ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDQ5NGI2ZTQuLjFkMzlhNmQgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMjgxMSw4ICsyODExLDggQEAKIE46IFN0ZWxpYW4gUG9wCiBFOiBzdGVsaWFuQHBvcGllcy5uZXQKIFA6IDEwMjREL0VEQkI2MTQ3IDdCMzYgMEUwNyAwNEJDIDExREMgQTdBMCAgRDNGNyA3MTg1IDlFN0EgRURCQiA2MTQ3Ci1EOiBzb255cGksIG1leWUgZHJpdmVycywgbWN0X3UyMzIgdXNiIHNlcmlhbCBoYWNrcwotUzogUGFyaXMsIEZyYW5jZQorRDogcmFuZG9tIGtlcm5lbCBoYWNrcworUzogUGFpbXBvbnQsIEZyYW5jZQogCiBOOiBQZXRlIFBvcG92CiBFOiBwZXRlX3BvcG92QHlhaG9vLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZAppbmRleCA5ZTQ1NDFkLi5lZGZmNjYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZApAQCAtMjYsMyArMjYsMTIgQEAKIAkJc2NoZWR1bGVyIGlzIGNob3Nlbi4gVHJpZ2dlciBzcGVjaWZpYyBwYXJhbWV0ZXJzIGNhbiBhcHBlYXIgaW4KIAkJL3N5cy9jbGFzcy9sZWRzLzxsZWQ+IG9uY2UgYSBnaXZlbiB0cmlnZ2VyIGlzIHNlbGVjdGVkLgogCitXaGF0OgkJL3N5cy9jbGFzcy9sZWRzLzxsZWQ+L2ludmVydGVkCitEYXRlOgkJSmFudWFyeSAyMDExCitLZXJuZWxWZXJzaW9uOgkyLjYuMzgKK0NvbnRhY3Q6CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlJbnZlcnQgdGhlIExFRCBvbi9vZmYgc3RhdGUuIFRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmljIHRvCisJCWdwaW8gYW5kIGJhY2tsaWdodCB0cmlnZ2Vycy4gSW4gY2FzZSBvZiB0aGUgYmFja2xpZ2h0IHRyaWdnZXIsCisJCWl0IGlzIHVzZWZ1bGwgd2hlbiBkcml2aW5nIGEgTEVEIHdoaWNoIGlzIGludGVuZGVkIHRvIGluZGljYXRlCisJCWEgZGV2aWNlIGluIGEgc3RhbmRieSBsaWtlIHN0YXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL210ZG5hbmQudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwKaW5kZXggMDIwYWM4MC4uNjIwZWIzZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL210ZG5hbmQudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsCkBAIC0yNTAsNyArMjUwLDcgQEAKIAkJPHRpdGxlPkRldmljZSByZWFkeSBmdW5jdGlvbjwvdGl0bGU+CiAJCTxwYXJhPgogCQkJSWYgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBoYXMgdGhlIHJlYWR5IGJ1c3kgcGluIG9mIHRoZSBOQU5EIGNoaXAgY29ubmVjdGVkIHRvIGEKLQkJCUdQSU8gb3Igb3RoZXIgYWNjZXNpYmxlIEkvTyBwaW4sIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIGJhY2sgdGhlIHN0YXRlIG9mIHRoZQorCQkJR1BJTyBvciBvdGhlciBhY2Nlc3NpYmxlIEkvTyBwaW4sIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIGJhY2sgdGhlIHN0YXRlIG9mIHRoZQogCQkJcGluLiBUaGUgZnVuY3Rpb24gaGFzIG5vIGFyZ3VtZW50cyBhbmQgc2hvdWxkIHJldHVybiAwLCBpZiB0aGUgZGV2aWNlIGlzIGJ1c3kgKFIvQiBwaW4gCiAJCQlpcyBsb3cpIGFuZCAxLCBpZiB0aGUgZGV2aWNlIGlzIHJlYWR5IChSL0IgcGluIGlzIGhpZ2gpLgogCQkJSWYgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBkb2VzIG5vdCBnaXZlIGFjY2VzcyB0byB0aGUgcmVhZHkgYnVzeSBwaW4sIHRoZW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBfZXZlbnRfbGlzdGVuZXIuYyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBfZXZlbnRfbGlzdGVuZXIuYwppbmRleCA4YzJiZmM0Li4zZTA4MmY5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3VwX2V2ZW50X2xpc3RlbmVyLmMKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cF9ldmVudF9saXN0ZW5lci5jCkBAIC05MSw3ICs5MSw3IEBACiAKIAkJaWYgKHJldCA9PSAtMSkgewogCQkJcGVycm9yKCJjZ3JvdXAuZXZlbnRfY29udHJvbCAiCi0JCQkJCSJpcyBub3QgYWNjZXNzYWJsZSBhbnkgbW9yZSIpOworCQkJCQkiaXMgbm90IGFjY2Vzc2libGUgYW55IG1vcmUiKTsKIAkJCWJyZWFrOwogCQl9CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dAppbmRleCAxOTAwMThiLi40NGI4YjdhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CkBAIC0zNTUsMTMgKzM1NSwxMyBAQAogCiBUbyBjaGFuZ2UgdGhlIHNldCBvZiBzdWJzeXN0ZW1zIGJvdW5kIHRvIGEgbW91bnRlZCBoaWVyYXJjaHksIGp1c3QKIHJlbW91bnQgd2l0aCBkaWZmZXJlbnQgb3B0aW9uczoKLSMgbW91bnQgLW8gcmVtb3VudCxjcHVzZXQsbnMgaGllcjEgL2Rldi9jZ3JvdXAKKyMgbW91bnQgLW8gcmVtb3VudCxjcHVzZXQsYmxraW8gaGllcjEgL2Rldi9jZ3JvdXAKIAotTm93IG1lbW9yeSBpcyByZW1vdmVkIGZyb20gdGhlIGhpZXJhcmNoeSBhbmQgbnMgaXMgYWRkZWQuCitOb3cgbWVtb3J5IGlzIHJlbW92ZWQgZnJvbSB0aGUgaGllcmFyY2h5IGFuZCBibGtpbyBpcyBhZGRlZC4KIAotTm90ZSB0aGlzIHdpbGwgYWRkIG5zIHRvIHRoZSBoaWVyYXJjaHkgYnV0IHdvbid0IHJlbW92ZSBtZW1vcnkgb3IKK05vdGUgdGhpcyB3aWxsIGFkZCBibGtpbyB0byB0aGUgaGllcmFyY2h5IGJ1dCB3b24ndCByZW1vdmUgbWVtb3J5IG9yCiBjcHVzZXQsIGJlY2F1c2UgdGhlIG5ldyBvcHRpb25zIGFyZSBhcHBlbmRlZCB0byB0aGUgb2xkIG9uZXM6Ci0jIG1vdW50IC1vIHJlbW91bnQsbnMgL2Rldi9jZ3JvdXAKKyMgbW91bnQgLW8gcmVtb3VudCxibGtpbyAvZGV2L2Nncm91cAogCiBUbyBTcGVjaWZ5IGEgaGllcmFyY2h5J3MgcmVsZWFzZV9hZ2VudDoKICMgbW91bnQgLXQgY2dyb3VwIC1vIGNwdXNldCxyZWxlYXNlX2FnZW50PSIvc2Jpbi9jcHVzZXRfcmVsZWFzZV9hZ2VudCIgXApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbWNnX3Rlc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbWNnX3Rlc3QudHh0CmluZGV4IGI3ZWVjZWMuLmZjOGZhOTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1jZ190ZXN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtY2dfdGVzdC50eHQKQEAgLTM5OCw3ICszOTgsNyBAQAogCXdyaXR0ZW4gdG8gbW92ZV9jaGFyZ2VfYXRfaW1taWdyYXRlLgogCiAgOS4xMCBNZW1vcnkgdGhyZXNob2xkcwotCU1lbW9yeSBjb250cm9sZXIgaW1wbGVtZW50cyBtZW1vcnkgdGhyZXNob2xkcyB1c2luZyBjZ3JvdXBzIG5vdGlmaWNhdGlvbgorCU1lbW9yeSBjb250cm9sbGVyIGltcGxlbWVudHMgbWVtb3J5IHRocmVzaG9sZHMgdXNpbmcgY2dyb3VwcyBub3RpZmljYXRpb24KIAlBUEkuIFlvdSBjYW4gdXNlIERvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBfZXZlbnRfbGlzdGVuZXIuYyB0byB0ZXN0CiAJaXQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZW1haWwtY2xpZW50cy50eHQgYi9Eb2N1bWVudGF0aW9uL2VtYWlsLWNsaWVudHMudHh0CmluZGV4IDk0NWZmM2YuLmEwYjU4ZTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZW1haWwtY2xpZW50cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9lbWFpbC1jbGllbnRzLnR4dApAQCAtMTA0LDYgKzEwNCwxMyBAQAogQXMgYW4gYWRkZWQgYm9udXMgeW91IGNhbiBjdXN0b21pc2UgdGhlIG1lc3NhZ2UgY3JlYXRpb24gdG9vbGJhciBtZW51CiBhbmQgcHV0IHRoZSAiaW5zZXJ0IGZpbGUiIGljb24gdGhlcmUuCiAKK01ha2UgdGhlIHRoZSBjb21wb3NlciB3aW5kb3cgd2lkZSBlbm91Z2ggc28gdGhhdCBubyBsaW5lcyB3cmFwLiBBcyBvZgorS01haWwgMS4xMy41IChLREUgNC41LjQpLCBLTWFpbCB3aWxsIGFwcGx5IHdvcmQgd3JhcHBpbmcgd2hlbiBzZW5kaW5nCit0aGUgZW1haWwgaWYgdGhlIGxpbmVzIHdyYXAgaW4gdGhlIGNvbXBvc2VyIHdpbmRvdy4gSGF2aW5nIHdvcmQgd3JhcHBpbmcKK2Rpc2FibGVkIGluIHRoZSBPcHRpb25zIG1lbnUgaXNuJ3QgZW5vdWdoLiBUaHVzLCBpZiB5b3VyIHBhdGNoIGhhcyB2ZXJ5Citsb25nIGxpbmVzLCB5b3UgbXVzdCBtYWtlIHRoZSBjb21wb3NlciB3aW5kb3cgdmVyeSB3aWRlIGJlZm9yZSBzZW5kaW5nCit0aGUgZW1haWwuIFNlZTogaHR0cHM6Ly9idWdzLmtkZS5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDAzNAorCiBZb3UgY2FuIHNhZmVseSBHUEcgc2lnbiBhdHRhY2htZW50cywgYnV0IGlubGluZWQgdGV4dCBpcyBwcmVmZXJyZWQgZm9yCiBwYXRjaGVzIHNvIGRvIG5vdCBHUEcgc2lnbiB0aGVtLiAgU2lnbmluZyBwYXRjaGVzIHRoYXQgaGF2ZSBiZWVuIGluc2VydGVkCiBhcyBpbmxpbmVkIHRleHQgd2lsbCBtYWtlIHRoZW0gdHJpY2t5IHRvIGV4dHJhY3QgZnJvbSB0aGVpciA3LWJpdCBlbmNvZGluZy4KQEAgLTE3OSwyNiArMTg2LDggQEAKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiBUaHVuZGVyYmlyZCAoR1VJKQogCi1CeSBkZWZhdWx0LCB0aHVuZGVyYmlyZCBsaWtlcyB0byBtYW5nbGUgdGV4dCwgYnV0IHRoZXJlIGFyZSB3YXlzIHRvCi1jb2VyY2UgaXQgaW50byBiZWluZyBuaWNlLgotCi0tIFVuZGVyIGFjY291bnQgc2V0dGluZ3MsIGNvbXBvc2l0aW9uIGFuZCBhZGRyZXNzaW5nLCB1bmNoZWNrICJDb21wb3NlCi0gIG1lc3NhZ2VzIGluIEhUTUwgZm9ybWF0Ii4KLQotLSBFZGl0IHlvdXIgVGh1bmRlcmJpcmQgY29uZmlnIHNldHRpbmdzIHRvIHRlbGwgaXQgbm90IHRvIHdyYXAgbGluZXM6Ci0gICAgICB1c2VyX3ByZWYoIm1haWxuZXdzLndyYXBsZW5ndGgiLCAwKTsKLQotLSBFZGl0IHlvdXIgVGh1bmRlcmJpcmQgY29uZmlnIHNldHRpbmdzIHNvIHRoYXQgaXQgd29uJ3QgdXNlIGZvcm1hdD1mbG93ZWQ6Ci0gICAgICB1c2VyX3ByZWYoIm1haWxuZXdzLnNlbmRfcGxhaW50ZXh0X2Zsb3dlZCIsIGZhbHNlKTsKLQotLSBZb3UgbmVlZCB0byBnZXQgVGh1bmRlcmJpcmQgaW50byBwcmVmb3JtYXQgbW9kZToKLS4gSWYgeW91IGNvbXBvc2UgSFRNTCBtZXNzYWdlcyBieSBkZWZhdWx0LCBpdCdzIG5vdCB0b28gaGFyZC4gSnVzdCBzZWxlY3QKLSAgIlByZWZvcm1hdCIgZnJvbSB0aGUgZHJvcC1kb3duIGJveCBqdXN0IHVuZGVyIHRoZSBzdWJqZWN0IGxpbmUuCi0uIElmIHlvdSBjb21wb3NlIGluIHRleHQgYnkgZGVmYXVsdCwgeW91IGhhdmUgdG8gdGVsbCBpdCB0byBjb21wb3NlIGEgbmV3Ci0gIG1lc3NhZ2UgaW4gSFRNTCAoanVzdCBhcyBhIG9uZS1vZmYpLCBhbmQgdGhlbiBmb3JjZSBpdCBmcm9tIHRoZXJlIGJhY2sgdG8KLSAgdGV4dCwgZWxzZSBpdCB3aWxsIHdyYXAgbGluZXMuIFRvIGRvIHRoaXMsIHVzZSBzaGlmdC1jbGljayBvbiB0aGUgV3JpdGUKLSAgaWNvbiB0byBjb21wb3NlIHRvIGdldCBIVE1MIGNvbXBvc2UgbW9kZSwgdGhlbiBzZWxlY3QgIlByZWZvcm1hdCIgZnJvbQotICB0aGUgZHJvcC1kb3duIGJveCBqdXN0IHVuZGVyIHRoZSBzdWJqZWN0IGxpbmUuCitUaHVuZGVyYmlyZCBpcyBhbiBPdXRsb29rIGNsb25lIHRoYXQgbGlrZXMgdG8gbWFuZ2xlIHRleHQsIGJ1dCB0aGVyZSBhcmUgd2F5cwordG8gY29lcmNlIGl0IGludG8gYmVoYXZpbmcuCiAKIC0gQWxsb3dzIHVzZSBvZiBhbiBleHRlcm5hbCBlZGl0b3I6CiAgIFRoZSBlYXNpZXN0IHRoaW5nIHRvIGRvIHdpdGggVGh1bmRlcmJpcmQgYW5kIHBhdGNoZXMgaXMgdG8gdXNlIGFuCkBAIC0yMDgsNiArMTk3LDI3IEBACiAgIFZpZXctPlRvb2xiYXJzLT5DdXN0b21pemUuLi4gYW5kIGZpbmFsbHkganVzdCBjbGljayBvbiBpdCB3aGVuIGluIHRoZQogICBDb21wb3NlIGRpYWxvZy4KIAorVG8gYmVhdCBzb21lIHNlbnNlIG91dCBvZiB0aGUgaW50ZXJuYWwgZWRpdG9yLCBkbyB0aGlzOgorCistIFVuZGVyIGFjY291bnQgc2V0dGluZ3MsIGNvbXBvc2l0aW9uIGFuZCBhZGRyZXNzaW5nLCB1bmNoZWNrICJDb21wb3NlCisgIG1lc3NhZ2VzIGluIEhUTUwgZm9ybWF0Ii4KKworLSBFZGl0IHlvdXIgVGh1bmRlcmJpcmQgY29uZmlnIHNldHRpbmdzIHNvIHRoYXQgaXQgd29uJ3QgdXNlIGZvcm1hdD1mbG93ZWQuCisgIEdvIHRvICJlZGl0LT5wcmVmZXJlbmNlcy0+YWR2YW5jZWQtPmNvbmZpZyBlZGl0b3IiIHRvIGJyaW5nIHVwIHRoZQorICB0aHVuZGVyYmlyZCdzIHJlZ2lzdHJ5IGVkaXRvciwgYW5kIHNldCAibWFpbG5ld3Muc2VuZF9wbGFpbnRleHRfZmxvd2VkIiB0bworICAiZmFsc2UiLgorCistIEVuYWJsZSAicHJlZm9ybWF0IiBtb2RlOiBTaGZ0LWNsaWNrIG9uIHRoZSBXcml0ZSBpY29uIHRvIGJyaW5nIHVwIHRoZSBIVE1MCisgIGNvbXBvc2VyLCBzZWxlY3QgIlByZWZvcm1hdCIgZnJvbSB0aGUgZHJvcC1kb3duIGJveCBqdXN0IHVuZGVyIHRoZSBzdWJqZWN0CisgIGxpbmUsIHRoZW4gY2xvc2UgdGhlIG1lc3NhZ2Ugd2l0aG91dCBzYXZpbmcuICAoVGhpcyBzZXR0aW5nIGFsc28gYXBwbGllcyB0bworICB0aGUgdGV4dCBjb21wb3NlciwgYnV0IHRoZSBvbmx5IGNvbnRyb2wgZm9yIGl0IGlzIGluIHRoZSBIVE1MIGNvbXBvc2VyLikKKworLSBJbnN0YWxsIHRoZSAidG9nZ2xlIHdvcmR3cmFwIiBleHRlbnNpb24uICBEb3dubG9hZCB0aGUgZmlsZSBmcm9tOgorICAgIGh0dHBzOi8vYWRkb25zLm1vemlsbGEub3JnL3RodW5kZXJiaXJkL2FkZG9uLzIzNTEvCisgIFRoZW4gZ28gdG8gInRvb2xzLT5hZGQgb25zIiwgc2VsZWN0ICJpbnN0YWxsIiBhdCB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4sCisgIGFuZCBicm93c2UgdG8gd2hlcmUgeW91IHNhdmVkIHRoZSAueHVsIGZpbGUuICBUaGlzIGFkZHMgYW4gIkVuYWJsZQorICBXb3Jkd3JhcCIgZW50cnkgdW5kZXIgdGhlIE9wdGlvbnMgbWVudSBvZiB0aGUgbWVzc2FnZSBjb21wb3Nlci4KKwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIFRrUmF0IChHVUkpCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCAyMmYxMDgxLi42Y2JiZDIwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0xOTMsNiArMTkzLDIwIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0OglDUzU1MzUvQ1M1NTM2IG9ic29sZXRlIEdQSU8gZHJpdmVyCitXaGVuOglKdW5lIDIwMTEKK0ZpbGVzOglkcml2ZXJzL3N0YWdpbmcvY3M1NTM1X2dwaW8vKgorQ2hlY2s6CWRyaXZlcnMvc3RhZ2luZy9jczU1MzVfZ3Bpby9jczU1MzVfZ3Bpby5jCitXaHk6CUEgbmV3ZXIgZHJpdmVyIHJlcGxhY2VzIHRoaXM7IGl0IGlzIGRyaXZlcnMvZ3Bpby9jczU1MzUtZ3Bpby5jLCBhbmQKKwlpbnRlZ3JhdGVzIHdpdGggdGhlIExpbnV4IEdQSU8gc3Vic3lzdGVtLiAgVGhlIG9sZCBkcml2ZXIgaGFzIGJlZW4KKwltb3ZlZCB0byBzdGFnaW5nLCBhbmQgd2lsbCBiZSByZW1vdmVkIGFsdG9nZXRoZXIgYXJvdW5kIDIuNi40MC4KKwlQbGVhc2UgdGVzdCB0aGUgbmV3IGRyaXZlciwgYW5kIGVuc3VyZSB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IHlvdQorCW5lZWQgYW5kIGFueSBidWdmaXhlcyBmcm9tIHRoZSBvbGQgZHJpdmVyIGFyZSBhdmFpbGFibGUgaW4gdGhlIG5ldworCW9uZS4KK1dobzoJQW5kcmVzIFNhbG9tb24gPGRpbGluZ2VyQHF1ZXVlZC5uZXQ+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFdoYXQ6CXJlbW92ZSBFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpCiBXaGVuOglBdWd1c3QgMjAwNgogRmlsZXM6CWFyY2gvKi9rZXJuZWwvKl9rc3ltcy5jCkBAIC01NzYsMyArNTkwLDEzIEBACiBXaG86CVRlanVuIEhlbyA8dGpAa2VybmVsLm9yZz4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglMZWdhY3ksIG5vbi1zdGFuZGFyZCBjaGFzc2lzIGludHJ1c2lvbiBkZXRlY3Rpb24gaW50ZXJmYWNlLgorV2hlbjoJSnVuZSAyMDExCitXaHk6CVRoZSBhZG05MjQwLCB3ODM3OTJkIGFuZCB3ODM3OTMgaGFyZHdhcmUgbW9uaXRvcmluZyBkcml2ZXJzIGhhdmUKKwlsZWdhY3kgaW50ZXJmYWNlcyBmb3IgY2hhc3NpcyBpbnRydXNpb24gZGV0ZWN0aW9uLiBBIHN0YW5kYXJkCisJaW50ZXJmYWNlIGhhcyBiZWVuIGFkZGVkIHRvIGVhY2ggZHJpdmVyLCBzbyB0aGUgbGVnYWN5IGludGVyZmFjZQorCWNhbiBiZSByZW1vdmVkLgorV2hvOglKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQKaW5kZXggYWMyYTI2MS4uNmVmOGNmMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0CkBAIC00NTcsNiArNDU3LDkgQEAKIAogTm90ZSwgYSB0ZWNobmljYWwgQ2hhbmdlTG9nIGFpbWVkIGF0IGtlcm5lbCBoYWNrZXJzIGlzIGluIGZzL250ZnMvQ2hhbmdlTG9nLgogCisyLjEuMzA6CisJLSBGaXggd3JpdGV2KCkgKGl0IGtlcHQgd3JpdGluZyB0aGUgZmlyc3Qgc2VnbWVudCBvdmVyIGFuZCBvdmVyIGFnYWluCisJICBpbnN0ZWFkIG9mIG1vdmluZyBvbnRvIHN1YnNlcXVlbnQgc2VnbWVudHMpLgogMi4xLjI5OgogCS0gRml4IGEgZGVhZGxvY2sgd2hlbiBtb3VudGluZyByZWFkLXdyaXRlLgogMi4xLjI4OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nCmluZGV4IDA3YTMyYjQuLjI2NmQyMDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZworKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcKQEAgLTM4NSwzICszODUsMTIgQEAKIG9uIG1hbnkgb3IgYWxsIGRpcmVjdG9yeSBpbm9kZXMgb24gdGhlIHdheSBkb3duIGEgcGF0aCB3YWxrICh0byBjaGVjayBmb3IKIGV4ZWMgcGVybWlzc2lvbikuIFRoZXNlIG11c3Qgbm93IGJlIHJjdS13YWxrIGF3YXJlIChmbGFncyAmIElQRVJNX1JDVSkuIFNlZQogRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0IGZvciBtb3JlIGRldGFpbHMuCisgCistLQorW21hbmRhdG9yeV0KKwlJbiAtPmZhbGxvY2F0ZSgpIHlvdSBtdXN0IGNoZWNrIHRoZSBtb2RlIG9wdGlvbiBwYXNzZWQgaW4uICBJZiB5b3VyCitmaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgaG9sZSBwdW5jaGluZyAoZGVhbGxvY2F0aW5nIHNwYWNlIGluIHRoZSBtaWRkbGUgb2YgYQorZmlsZSkgeW91IG11c3QgcmV0dXJuIC1FT1BOT1RTVVBQIGlmIEZBTExPQ19GTF9QVU5DSF9IT0xFIGlzIHNldCBpbiBtb2RlLgorQ3VycmVudGx5IHlvdSBjYW4gb25seSBoYXZlIEZBTExPQ19GTF9QVU5DSF9IT0xFIHdpdGggRkFMTE9DX0ZMX0tFRVBfU0laRSBzZXQsCitzbyB0aGUgaV9zaXplIHNob3VsZCBub3QgY2hhbmdlIHdoZW4gaG9sZSBwdW5jaGluZywgZXZlbiB3aGVuIHB1Y2hpbmcgdGhlIGVuZCBvZgorYSBmaWxlIG9mZi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQgYi9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CmluZGV4IDc5MmZhYTMuLmE0OTJkOTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dApAQCAtMTM1LDcgKzEzNSw3IEBACiAJaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pOwogCWludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKIAotVGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvIGZvciBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgZXJybm8uICBJdCBzaG91bGQKK1RoZSByZXR1cm4gdmFsdWUgaXMgemVybyBmb3Igc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIGVycm5vLiAgSXQgbXVzdAogYmUgY2hlY2tlZCwgc2luY2UgdGhlIGdldC9zZXQgY2FsbHMgZG9uJ3QgaGF2ZSBlcnJvciByZXR1cm5zIGFuZCBzaW5jZQogbWlzY29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZS4gIFlvdSBzaG91bGQgbm9ybWFsbHkgaXNzdWUgdGhlc2UgY2FsbHMgZnJvbQogYSB0YXNrIGNvbnRleHQuICBIb3dldmVyLCBmb3Igc3BpbmxvY2stc2FmZSBHUElPcyBpdCdzIE9LIHRvIHVzZSB0aGVtCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkbTkyNDAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkbTkyNDAKaW5kZXggMmM2ZjFmZS4uMzZlOGVjNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9hZG05MjQwCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vYWRtOTI0MApAQCAtMTU1LDcgKzE1NSw3IEBACiBUaGUgQURNOTI0MCBwcm92aWRlcyBhbiBpbnRlcm5hbCBvcGVuIGRyYWluIG9uIHRoaXMgbGluZSwgYW5kIG1heSBvdXRwdXQKIGEgMjAgbXMgYWN0aXZlIGxvdyBwdWxzZSB0byByZXNldCBhbiBleHRlcm5hbCBDaGFzc2lzIEludHJ1c2lvbiBsYXRjaC4KIAotQ2xlYXIgdGhlIENJIGxhdGNoIGJ5IHdyaXRpbmcgdmFsdWUgMSB0byB0aGUgc3lzZnMgY2hhc3Npc19jbGVhciBmaWxlLgorQ2xlYXIgdGhlIENJIGxhdGNoIGJ5IHdyaXRpbmcgdmFsdWUgMCB0byB0aGUgc3lzZnMgaW50cnVzaW9uMF9hbGFybSBmaWxlLgogCiBBbGFybSBmbGFncyByZXBvcnRlZCBhcyAxNi1iaXQgd29yZAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2Fkczc4MjggYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2Fkczc4MjgKaW5kZXggNzViYzRiZS4uMmJiZWJlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9hZHM3ODI4CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vYWRzNzgyOApAQCAtOSw3ICs5LDcgQEAKICAgICAgICAgICAgICAgIGh0dHA6Ly9mb2N1cy50aS5jb20vbGl0L2RzL3N5bWxpbmsvYWRzNzgyOC5wZGYKIAogQXV0aG9yczoKLSAgICAgICAgU3RldmUgSGFyZHkgPHN0ZXZlQGxpbnV4cmVhbHRpbWUuY28udWs+CisgICAgICAgIFN0ZXZlIEhhcmR5IDxzaGFyZHlAcmVkaGF0LmNvbT4KIAogTW9kdWxlIFBhcmFtZXRlcnMKIC0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2RtZTE3MzcgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2RtZTE3MzcKaW5kZXggZmM1ZGY3Ni4uNGQyOTM1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9kbWUxNzM3CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vZG1lMTczNwpAQCAtNDIsNyArNDIsNyBAQAogVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciB0aGUgaGFyZHdhcmUgbW9uaXRvcmluZyBjYXBhYmlsaXRpZXMgb2YgdGhlCiBTTVNDIERNRTE3MzcgYW5kIEFzdXMgQTgwMDAgKHdoaWNoIGFyZSB0aGUgc2FtZSksIFNNU0MgU0NINTAyNywgU0NIMzExeCwKIGFuZCBTQ0g1MTI3IFN1cGVyLUkvTyBjaGlwcy4gVGhlc2UgY2hpcHMgZmVhdHVyZSBtb25pdG9yaW5nIG9mIDMgdGVtcCBzZW5zb3JzCi10ZW1wWzEtM10gKDIgcmVtb3RlIGRpb2RlcyBhbmQgMSBpbnRlcm5hbCksIDcgdm9sdGFnZXMgaW5bMC02XSAoNiBleHRlcm5hbCBhbmQKK3RlbXBbMS0zXSAoMiByZW1vdGUgZGlvZGVzIGFuZCAxIGludGVybmFsKSwgOCB2b2x0YWdlcyBpblswLTddICg3IGV4dGVybmFsIGFuZAogMSBpbnRlcm5hbCkgYW5kIHVwIHRvIDYgZmFuIHNwZWVkcyBmYW5bMS02XS4gQWRkaXRpb25hbGx5LCB0aGUgY2hpcHMgaW1wbGVtZW50CiB1cCB0byA1IFBXTSBvdXRwdXRzIHB3bVsxLTMsNS02XSBmb3IgY29udHJvbGxpbmcgZmFuIHNwZWVkcyBib3RoIG1hbnVhbGx5IGFuZAogYXV0b21hdGljYWxseS4KQEAgLTEwNSw2ICsxMDUsNyBAQAogCWluNDogVjFfSU4JCQkJMFYgLSAxLjVWCiAJaW41OiBWVFIJKCszLjNWIHN0YW5kYnkpCQkwViAtIDQuMzhWCiAJaW42OiBWYmF0CSgrMy4wVikJCQkwViAtIDQuMzhWCisJaW43OiBWdHJpcAkoKzEuNVYpCQkJMFYgLSAxLjk5VgogCiBFYWNoIHZvbHRhZ2UgaW5wdXQgaGFzIGFzc29jaWF0ZWQgbWluIGFuZCBtYXggbGltaXRzIHdoaWNoIHRyaWdnZXIgYW4gYWxhcm0KIHdoZW4gY3Jvc3NlZC4KQEAgLTIxNywxMCArMjE4LDEwIEBACiB2cm0JCQkJUlcJVm9sdGFnZSByZWd1bGF0b3IgbW9kdWxlIHZlcnNpb24KIAkJCQkJbnVtYmVyLgogCi1pblswLTZdX2lucHV0CQkJUk8JTWVhc3VyZWQgdm9sdGFnZSBpbiBtaWxsaXZvbHRzLgotaW5bMC02XV9taW4JCQlSVwlMb3cgbGltaXQgZm9yIHZvbHRhZ2UgaW5wdXQuCi1pblswLTZdX21heAkJCVJXCUhpZ2ggbGltaXQgZm9yIHZvbHRhZ2UgaW5wdXQuCi1pblswLTZdX2FsYXJtCQkJUk8JVm9sdGFnZSBpbnB1dCBhbGFybS4gUmV0dXJucyAxIGlmCitpblswLTddX2lucHV0CQkJUk8JTWVhc3VyZWQgdm9sdGFnZSBpbiBtaWxsaXZvbHRzLgoraW5bMC03XV9taW4JCQlSVwlMb3cgbGltaXQgZm9yIHZvbHRhZ2UgaW5wdXQuCitpblswLTddX21heAkJCVJXCUhpZ2ggbGltaXQgZm9yIHZvbHRhZ2UgaW5wdXQuCitpblswLTddX2FsYXJtCQkJUk8JVm9sdGFnZSBpbnB1dCBhbGFybS4gUmV0dXJucyAxIGlmCiAJCQkJCXZvbHRhZ2UgaW5wdXQgaXMgb3Igd2VudCBvdXRzaWRlIHRoZQogCQkJCQlhc3NvY2lhdGVkIG1pbi1tYXggcmFuZ2UsIDAgb3RoZXJ3aXNlLgogCkBAIC0zMjQsMyArMzI1LDQgQEAKIHB3bTUJCQlvcHQJCW9wdAogZmFuNgkJCW9wdAkJb3B0CiBwd202CQkJb3B0CQlvcHQKK2luNwkJCQkJCXllcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdoZiBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNjI3aGYKaW5kZXggZmIxNDVlNS4uODQzMmUxMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdoZgorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2hmCkBAIC05MSwzICs5MSwyNSBAQAogCiBUaGUgYWJvdmUgc2VxdWVuY2UgYXNzdW1lcyBhIFN1cGVyLUkvTyBjb25maWcgc3BhY2UgYXQgMHgyZS8weDJmLCBidXQKIDB4NGUvMHg0ZiBpcyBhbHNvIHBvc3NpYmxlLgorCitWb2x0YWdlIHBpbiBtYXBwaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hlcmUgaXMgYSBzdW1tYXJ5IG9mIHRoZSB2b2x0YWdlIHBpbiBtYXBwaW5nIGZvciB0aGUgVzgzNjI3VEhGLiBUaGlzCitjYW4gYmUgdXNlZnVsIHRvIGNvbnZlcnQgZGF0YSBwcm92aWRlZCBieSBib2FyZCBtYW51ZmFjdHVyZXJzIGludG8KK3dvcmtpbmcgbGlic2Vuc29ycyBjb25maWd1cmF0aW9uIHN0YXRlbWVudHMuCisKKyAgICBXODM2MjdUSEYJCXwKKyAgUGluCXwgTmFtZQkJfCBSZWdpc3Rlcgl8IFN5c2ZzIGF0dHJpYnV0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMTAwCXwgQ1BVVkNPUkUJfCAyMGgJCXwgaW4wCisgICA5OQl8IFZJTjAJCXwgMjFoCQl8IGluMQorICAgOTgJfCBWSU4xCQl8IDIyaAkJfCBpbjIKKyAgIDk3CXwgVklOMgkJfCAyNGgJCXwgaW40CisgIDExNAl8IEFWQ0MJCXwgMjNoCQl8IGluMworICAgNjEJfCA1VlNCCQl8IDUwaCAoYmFuayA1KQl8IGluNworICAgNzQJfCBWQkFUCQl8IDUxaCAoYmFuayA1KQl8IGluOAorCitGb3Igb3RoZXIgc3VwcG9ydGVkIGRldmljZXMsIHlvdSdsbCBoYXZlIHRvIHRha2UgdGhlIGhhcmQgcGF0aCBhbmQKK2xvb2sgdXAgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBkYXRhc2hlZXQgeW91cnNlbGYgKGFuZCB0aGVuIGFkZCBpdAordG8gdGhpcyBkb2N1bWVudCBwbGVhc2UuKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTMgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MwppbmRleCA1MTE3MWE4Li42Y2M1ZjYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MworKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MwpAQCAtOTIsNyArOTIsNyBAQAogCiAqIENoYXNzaXMKICAgSWYgdGhlIGNhc2Ugb3BlbiBhbGFybSB0cmlnZ2VycywgaXQgd2lsbCBzdGF5IGluIHRoaXMgc3RhdGUgdW5sZXNzIGNsZWFyZWQKLSAgYnkgYW55IHdyaXRlIHRvIHRoZSBzeXNmcyBmaWxlICJjaGFzc2lzIi4KKyAgYnkgd3JpdGluZyAwIHRvIHRoZSBzeXNmcyBmaWxlICJpbnRydXNpb24wX2FsYXJtIi4KIAogKiBWSUQgYW5kIFZSTQogICBUaGUgVlJNIHZlcnNpb24gaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgZG9uJ3QgbW9kaWZ5IHRoZSBpdCB1bmxlc3MgeW91CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9tdXhlcy9ncGlvLWkyY211eCBiL0RvY3VtZW50YXRpb24vaTJjL211eGVzL2dwaW8taTJjbXV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWNkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9tdXhlcy9ncGlvLWkyY211eApAQCAtMCwwICsxLDY1IEBACitLZXJuZWwgZHJpdmVyIGdwaW8taTJjbXV4CisKK0F1dGhvcjogUGV0ZXIgS29yc2dhYXJkIDxwZXRlci5rb3JzZ2FhcmRAYmFyY28uY29tPgorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworZ3Bpby1pMmNtdXggaXMgYW4gaTJjIG11eCBkcml2ZXIgcHJvdmlkaW5nIGFjY2VzcyB0byBJMkMgYnVzIHNlZ21lbnRzCitmcm9tIGEgbWFzdGVyIEkyQyBidXMgYW5kIGEgaGFyZHdhcmUgTVVYIGNvbnRyb2xsZWQgdGhyb3VnaCBHUElPIHBpbnMuCisKK0UuRy46CisKKyAgLS0tLS0tLS0tLSAgICAgICAgICAgICAgLS0tLS0tLS0tLSAgQnVzIHNlZ21lbnQgMSAgIC0gLSAtIC0gLQorIHwgICAgICAgICAgfCBTQ0wvU0RBICAgIHwgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tIHwgICAgICAgICAgIHwKKyB8ICAgICAgICAgIHwtLS0tLS0tLS0tLS18ICAgICAgICAgIHwKKyB8ICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgIHwgQnVzIHNlZ21lbnQgMiB8ICAgICAgICAgICB8CisgfCAgTGludXggICB8IEdQSU8gMS4uTiAgfCAgIE1VWCAgICB8LS0tLS0tLS0tLS0tLS0tICAgRGV2aWNlcworIHwgICAgICAgICAgfC0tLS0tLS0tLS0tLXwgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwKKyB8ICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgIHwgQnVzIHNlZ21lbnQgTQorIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgICAgICAgIHwKKyAgLS0tLS0tLS0tLSAgICAgICAgICAgICAgLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgIC0gLSAtIC0gLQorCitTQ0wvU0RBIG9mIHRoZSBtYXN0ZXIgSTJDIGJ1cyBpcyBtdWx0aXBsZXhlZCB0byBidXMgc2VnbWVudCAxLi5NCithY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIG9mIHRoZSBHUElPIHBpbnMgMS4uTi4KKworVXNhZ2UKKy0tLS0tCisKK2dwaW8taTJjbXV4IHVzZXMgdGhlIHBsYXRmb3JtIGJ1cywgc28geW91IG5lZWQgdG8gcHJvdmlkZSBhIHN0cnVjdAorcGxhdGZvcm1fZGV2aWNlIHdpdGggdGhlIHBsYXRmb3JtX2RhdGEgcG9pbnRpbmcgdG8gYSBzdHJ1Y3QKK2dwaW9faTJjbXV4X3BsYXRmb3JtX2RhdGEgd2l0aCB0aGUgSTJDIGFkYXB0ZXIgbnVtYmVyIG9mIHRoZSBtYXN0ZXIKK2J1cywgdGhlIG51bWJlciBvZiBidXMgc2VnbWVudHMgdG8gY3JlYXRlIGFuZCB0aGUgR1BJTyBwaW5zIHVzZWQKK3RvIGNvbnRyb2wgaXQuIFNlZSBpbmNsdWRlL2xpbnV4L2dwaW8taTJjbXV4LmggZm9yIGRldGFpbHMuCisKK0UuRy4gc29tZXRoaW5nIGxpa2UgdGhpcyBmb3IgYSBNVVggcHJvdmlkaW5nIDQgYnVzIHNlZ21lbnRzCitjb250cm9sbGVkIHRocm91Z2ggMyBHUElPIHBpbnM6CisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLWkyY211eC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbXlib2FyZF9ncGlvbXV4X2dwaW9zW10gPSB7CisJQVQ5MV9QSU5fUEMyNiwgQVQ5MV9QSU5fUEMyNSwgQVQ5MV9QSU5fUEMyNAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG15Ym9hcmRfZ3Bpb211eF92YWx1ZXNbXSA9IHsKKwkwLCAxLCAyLCAzCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9faTJjbXV4X3BsYXRmb3JtX2RhdGEgbXlib2FyZF9pMmNtdXhfZGF0YSA9IHsKKwkucGFyZW50CQk9IDEsCisJLmJhc2VfbnIJPSAyLCAvKiBvcHRpb25hbCAqLworCS52YWx1ZXMJCT0gbXlib2FyZF9ncGlvbXV4X3ZhbHVlcywKKwkubl92YWx1ZXMJPSBBUlJBWV9TSVpFKG15Ym9hcmRfZ3Bpb211eF92YWx1ZXMpLAorCS5ncGlvcwkJPSBteWJvYXJkX2dwaW9tdXhfZ3Bpb3MsCisJLm5fZ3Bpb3MJPSBBUlJBWV9TSVpFKG15Ym9hcmRfZ3Bpb211eF9ncGlvcyksCisJLmlkbGUJCT0gNCwgLyogb3B0aW9uYWwgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG15Ym9hcmRfaTJjbXV4ID0geworCS5uYW1lCQk9ICJncGlvLWkyY211eCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm15Ym9hcmRfaTJjbXV4X2RhdGEsCisJfSwKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2ZmLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvZmYudHh0CmluZGV4IGRlZDRkNWYuLmIzODY3YmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5wdXQvZmYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvZmYudHh0CkBAIC00OSw3ICs0OSw5IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KIAotdW5zaWduZWQgbG9uZyBmZWF0dXJlc1sxICsgRkZfTUFYL3NpemVvZih1bnNpZ25lZCBsb25nKV07CisjZGVmaW5lIEJJVFNfVE9fTE9OR1MoeCkgXAorCSgoKHgpICsgOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZykgLSAxKSAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nKSkpCit1bnNpZ25lZCBsb25nIGZlYXR1cmVzW0JJVFNfVE9fTE9OR1MoRkZfQ05UKV07CiBpbnQgaW9jdGwoaW50IGZpbGVfZGVzY3JpcHRvciwgaW50IHJlcXVlc3QsIHVuc2lnbmVkIGxvbmcgKmZlYXR1cmVzKTsKIAogInJlcXVlc3QiIG11c3QgYmUgRVZJT0NHQklUKEVWX0ZGLCBzaXplIG9mIGZlYXR1cmVzIGFycmF5IGluIGJ5dGVzICkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAppbmRleCBkNmE2M2M3Li5hYzI5M2U5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CkBAIC0yNDcsNyArMjQ3LDcgQEAKICdwJwk0MC03RglsaW51eC9udnJhbS5oCiAncCcJODAtOUYJbGludXgvcHBkZXYuaAkJdXNlci1zcGFjZSBwYXJwb3J0CiAJCQkJCTxtYWlsdG86dGltQGN5YmVyZWxrLm5ldD4KLSdwJwlBMS1BNAlsaW51eC9wcHMuaAkJTGludXhQUFMKKydwJwlBMS1BNQlsaW51eC9wcHMuaAkJTGludXhQUFMKIAkJCQkJPG1haWx0bzpnaW9tZXR0aUBsaW51eC5pdD4KICdxJwkwMC0xRglsaW51eC9zZXJpby5oCiAncScJODAtRkYJbGludXgvdGVsZXBob255LmgJSW50ZXJuZXQgUGhvbmVKQUNLLCBJbnRlcm5ldCBMaW5lSkFDSwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pb3N0YXRzLnR4dCBiL0RvY3VtZW50YXRpb24vaW9zdGF0cy50eHQKaW5kZXggNTlhNjllYy4uZjZkZWNlNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pb3N0YXRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lvc3RhdHMudHh0CkBAIC04MSw3ICs4MSw3IEBACiAgICAgVGhlIG9ubHkgZmllbGQgdGhhdCBzaG91bGQgZ28gdG8gemVyby4gSW5jcmVtZW50ZWQgYXMgcmVxdWVzdHMgYXJlCiAgICAgZ2l2ZW4gdG8gYXBwcm9wcmlhdGUgc3RydWN0IHJlcXVlc3RfcXVldWUgYW5kIGRlY3JlbWVudGVkIGFzIHRoZXkgZmluaXNoLgogRmllbGQgMTAgLS0gIyBvZiBtaWxsaXNlY29uZHMgc3BlbnQgZG9pbmcgSS9PcwotICAgIFRoaXMgZmllbGQgaXMgaW5jcmVhc2VzIHNvIGxvbmcgYXMgZmllbGQgOSBpcyBub256ZXJvLgorICAgIFRoaXMgZmllbGQgaW5jcmVhc2VzIHNvIGxvbmcgYXMgZmllbGQgOSBpcyBub256ZXJvLgogRmllbGQgMTEgLS0gd2VpZ2h0ZWQgIyBvZiBtaWxsaXNlY29uZHMgc3BlbnQgZG9pbmcgSS9PcwogICAgIFRoaXMgZmllbGQgaXMgaW5jcmVtZW50ZWQgYXQgZWFjaCBJL08gc3RhcnQsIEkvTyBjb21wbGV0aW9uLCBJL08KICAgICBtZXJnZSwgb3IgcmVhZCBvZiB0aGVzZSBzdGF0cyBieSB0aGUgbnVtYmVyIG9mIEkvT3MgaW4gcHJvZ3Jlc3MKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0IGIvRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKaW5kZXggY2FiNjFkOC4uN2E5ZTBiNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKQEAgLTY1LDE4ICs2NSwyMSBAQAogCiAyKSBEb3dubG9hZCB0aGUga2V4ZWMtdG9vbHMgdXNlci1zcGFjZSBwYWNrYWdlIGZyb20gdGhlIGZvbGxvd2luZyBVUkw6CiAKLWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9ob3Jtcy9rZXhlYy10b29scy9rZXhlYy10b29scy50YXIuZ3oKK2h0dHA6Ly9rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMudGFyLmd6CiAKIFRoaXMgaXMgYSBzeW1saW5rIHRvIHRoZSBsYXRlc3QgdmVyc2lvbi4KIAogVGhlIGxhdGVzdCBrZXhlYy10b29scyBnaXQgdHJlZSBpcyBhdmFpbGFibGUgYXQ6CiAKLWdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ob3Jtcy9rZXhlYy10b29scy5naXQKLW9yCi1odHRwOi8vd3d3Lmtlcm5lbC5vcmcvZ2l0Lz9wPWxpbnV4L2tlcm5lbC9naXQvaG9ybXMva2V4ZWMtdG9vbHMuZ2l0CitnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL2tlcm5lbC9rZXhlYy9rZXhlYy10b29scy5naXQKK2FuZAoraHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMva2VybmVsL2tleGVjL2tleGVjLXRvb2xzLmdpdAorCitUaGVyZSBpcyBhbHNvIGEgZ2l0d2ViIGludGVyZmFjZSBhdmFpbGFibGUgYXQKK2h0dHA6Ly93d3cua2VybmVsLm9yZy9naXQvP3A9dXRpbHMva2VybmVsL2tleGVjL2tleGVjLXRvb2xzLmdpdAogCiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IGtleGVjLXRvb2xzIGNhbiBiZSBmb3VuZCBhdAotaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2hvcm1zL2tleGVjLXRvb2xzL1JFQURNRS5odG1sCitodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9rZXhlYy9SRUFETUUuaHRtbAogCiAzKSBVbnBhY2sgdGhlIHRhcmJhbGwgd2l0aCB0aGUgdGFyIGNvbW1hbmQsIGFzIGZvbGxvd3M6CiAKQEAgLTQzOSw2ICs0NDIsNiBAQAogQ29udGFjdAogPT09PT09PQogCi1WaXZlayBHb3lhbCAodmdveWFsQGluLmlibS5jb20pCitWaXZlayBHb3lhbCAodmdveWFsQHJlZGhhdC5jb20pCiBNYW5lZXNoIFNvbmkgKG1hbmVlc2hAaW4uaWJtLmNvbSkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBmM2RjOTUxLi41NWZlNzU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNDAzLDYgKzQwMywxMCBAQAogCWJ0dHYucGxsPQlTZWUgRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0luc21vZC1vcHRpb25zCiAJYnR0di50dW5lcj0JYW5kIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9DQVJETElTVAogCisJYnVsa19yZW1vdmU9b2ZmCVtQUENdICBUaGlzIHBhcmFtZXRlciBkaXNhYmxlcyB0aGUgdXNlIG9mIHRoZSBwU2VyaWVzCisJCQlmaXJtd2FyZSBmZWF0dXJlIGZvciBmbHVzaGluZyBtdWx0aXBsZSBocHRlIGVudHJpZXMKKwkJCWF0IGEgdGltZS4KKwogCWMxMDE9CQlbTkVUXSBNb3hhIEMxMDEgc3luY2hyb25vdXMgc2VyaWFsIGNhcmQKIAogCWNhY2hlc2l6ZT0JW0JVR1M9WDg2LTMyXSBPdmVycmlkZSBsZXZlbCAyIENQVSBjYWNoZSBzaXplIGRldGVjdGlvbi4KQEAgLTY1NSwxMSArNjU5LDYgQEAKIAogCWRzY2M0LnNldHVwPQlbTkVUXQogCi0JZHluYW1pY19wcmludGsJRW5hYmxlcyBwcl9kZWJ1ZygpL2Rldl9kYmcoKSBjYWxscyBpZgotCQkJQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGhhcyBiZWVuIGVuYWJsZWQuCi0JCQlUaGVzZSBjYW4gYWxzbyBiZSBzd2l0Y2hlZCBvbi9vZmYgdmlhCi0JCQk8ZGVidWdmcz4vZHluYW1pY19wcmludGsvbW9kdWxlcwotCiAJZWFybHljb249CVtLTkxdIE91dHB1dCBlYXJseSBjb25zb2xlIGRldmljZSBhbmQgb3B0aW9ucy4KIAkJdWFydFs4MjUwXSxpbyw8YWRkcj5bLG9wdGlvbnNdCiAJCXVhcnRbODI1MF0sbW1pbyw8YWRkcj5bLG9wdGlvbnNdCkBAIC04ODQsNiArODgzLDcgQEAKIAkJCSAgICAgY29udHJvbGxlcgogCWk4MDQyLm5vcG5wCVtIV10gRG9uJ3QgdXNlIEFDUElQblAgLyBQblBCSU9TIHRvIGRpc2NvdmVyIEtCRC9BVVgKIAkJCSAgICAgY29udHJvbGxlcnMKKwlpODA0Mi5ub3RpbWVvdXQJW0hXXSBJZ25vcmUgdGltZW91dCBjb25kaXRpb24gc2lnbmFsbGVkIGJ5IGNvbnJvbGxlcgogCWk4MDQyLnJlc2V0CVtIV10gUmVzZXQgdGhlIGNvbnRyb2xsZXIgZHVyaW5nIGluaXQgYW5kIGNsZWFudXAKIAlpODA0Mi51bmxvY2sJW0hXXSBVbmxvY2sgKGlnbm9yZSkgdGhlIGtleWxvY2sKIApAQCAtMTQ5MCw2ICsxNDkwLDEwIEBACiAJbXRkcGFydHM9CVtNVERdCiAJCQlTZWUgZHJpdmVycy9tdGQvY21kbGluZXBhcnQuYy4KIAorCW11bHRpdGNlPW9mZglbUFBDXSAgVGhpcyBwYXJhbWV0ZXIgZGlzYWJsZXMgdGhlIHVzZSBvZiB0aGUgcFNlcmllcworCQkJZmlybXdhcmUgZmVhdHVyZSBmb3IgdXBkYXRpbmcgbXVsdGlwbGUgVENFIGVudHJpZXMKKwkJCWF0IGEgdGltZS4KKwogCW9uZW5hbmQuYmRyeT0JW0hXLE1URF0gRmxleC1PbmVOQU5EIEJvdW5kYXJ5IENvbmZpZ3VyYXRpb24KIAogCQkJRm9ybWF0OiBbZGllMF9ib3VuZGFyeV1bLGRpZTBfbG9ja11bLGRpZTFfYm91bmRhcnldWyxkaWUxX2xvY2tdCkBAIC0xNzAxLDYgKzE3MDUsOSBAQAogCiAJbm8ta3ZtY2xvY2sJW1g4NixLVk1dIERpc2FibGUgcGFyYXZpcnR1YWxpemVkIEtWTSBjbG9jayBkcml2ZXIKIAorCW5vLWt2bWFwZglbWDg2LEtWTV0gRGlzYWJsZSBwYXJhdmlydHVhbGl6ZWQgYXN5bmNocm9ub3VzIHBhZ2UKKwkJCWZhdWx0IGhhbmRsaW5nLgorCiAJbm9sYXBpYwkJW1g4Ni0zMixBUElDXSBEbyBub3QgZW5hYmxlIG9yIHVzZSB0aGUgbG9jYWwgQVBJQy4KIAogCW5vbGFwaWNfdGltZXIJW1g4Ni0zMixBUElDXSBEbyBub3QgdXNlIHRoZSBsb2NhbCBBUElDIHRpbWVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rb19LUi9IT1dUTyBiL0RvY3VtZW50YXRpb24va29fS1IvSE9XVE8KaW5kZXggZTNhNTViNi4uYWI1MTg5YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rb19LUi9IT1dUTworKysgYi9Eb2N1bWVudGF0aW9uL2tvX0tSL0hPV1RPCkBAIC0zOTEsOCArMzkxLDggQEAKIGJ1Z21lLWphbml0b3Ig66mU7J2866eBIOumrOyKpO2KuChidWd6aWxsYeyXkCDrqqjrk6Ag67OA7ZmU65Ok7J20IOyXrOq4sOyEnCDrqZTsnbzroZwg7KCE7ZW07KeE64ukKQog7JeQIOuTseuhne2VmOuptCDrkJzri6QuCiAKLSAgICAgIGh0dHA6Ly9saXN0cy5vc2RsLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2J1Z21lLW5ldwotICAgICAgaHR0cDovL2xpc3RzLm9zZGwub3JnL21haWxtYW4vbGlzdGluZm8vYnVnbWUtamFuaXRvcnMKKyAgICAgIGh0dHBzOi8vbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9idWdtZS1uZXcKKyAgICAgIGh0dHBzOi8vbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9idWdtZS1qYW5pdG9ycwogCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dCBiL0RvY3VtZW50YXRpb24va3Byb2Jlcy50eHQKaW5kZXggNzQxZmU2Ni4uMGNmYjAwZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2twcm9iZXMudHh0CkBAIC01OTgsNyArNTk4LDcgQEAKIGEpIFRoZSBpbnN0cnVjdGlvbnMgaW4gRENSIG11c3QgYmUgcmVsb2NhdGFibGUuCiBiKSBUaGUgaW5zdHJ1Y3Rpb25zIGluIERDUiBtdXN0IG5vdCBpbmNsdWRlIGEgY2FsbCBpbnN0cnVjdGlvbi4KIGMpIEpUUFIgbXVzdCBub3QgYmUgdGFyZ2V0ZWQgYnkgYW55IGp1bXAgb3IgY2FsbCBpbnN0cnVjdGlvbi4KLWQpIERDUiBtdXN0IG5vdCBzdHJhZGRsZSB0aGUgYm9yZGVyIGJldHdlZWVuIGZ1bmN0aW9ucy4KK2QpIERDUiBtdXN0IG5vdCBzdHJhZGRsZSB0aGUgYm9yZGVyIGJldHdlZW4gZnVuY3Rpb25zLgogCiBBbnl3YXksIHRoZXNlIGxpbWl0YXRpb25zIGFyZSBjaGVja2VkIGJ5IHRoZSBpbi1rZXJuZWwgaW5zdHJ1Y3Rpb24KIGRlY29kZXIsIHNvIHlvdSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2t2bS9hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9rdm0vYXBpLnR4dAppbmRleCBiMzM2MjY2Li5hZDg1Nzk3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2t2bS9hcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24va3ZtL2FwaS50eHQKQEAgLTg3NCw3ICs4NzQsNyBAQAogIC0gS1ZNX01QX1NUQVRFX0hBTFRFRDogICAgICAgICAgdGhlIHZjcHUgaGFzIGV4ZWN1dGVkIGEgSExUIGluc3RydWN0aW9uIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgd2FpdGluZyBmb3IgYW4gaW50ZXJydXB0CiAgLSBLVk1fTVBfU1RBVEVfU0lQSV9SRUNFSVZFRDogICB0aGUgdmNwdSBoYXMganVzdCByZWNlaXZlZCBhIFNJUEkgKHZlY3RvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNpYmxlIHZpYSBLVk1fR0VUX1ZDUFVfRVZFTlRTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzaWJsZSB2aWEgS1ZNX0dFVF9WQ1BVX0VWRU5UUykKIAogVGhpcyBpb2N0bCBpcyBvbmx5IHVzZWZ1bCBhZnRlciBLVk1fQ1JFQVRFX0lSUUNISVAuICBXaXRob3V0IGFuIGluLWtlcm5lbAogaXJxY2hpcCwgdGhlIG11bHRpcHJvY2Vzc2luZyBzdGF0ZSBtdXN0IGJlIG1haW50YWluZWQgYnkgdXNlcnNwYWNlLgpAQCAtMTA4NSw2ICsxMDg1LDE4NCBAQAogSWYgYW55IGFkZGl0aW9uYWwgZmllbGQgZ2V0cyBhZGRlZCB0byB0aGlzIHN0cnVjdHVyZSBsYXRlciBvbiwgYSBiaXQgZm9yIHRoYXQKIGFkZGl0aW9uYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gd2lsbCBiZSBzZXQgaW4gdGhlIGZsYWdzIGJpdG1hcC4KIAorNC40NyBLVk1fQVNTSUdOX1BDSV9ERVZJQ0UKKworQ2FwYWJpbGl0eTogS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVAorQXJjaGl0ZWN0dXJlczogeDg2IGlhNjQKK1R5cGU6IHZtIGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX3BjaV9kZXYgKGluKQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitBc3NpZ25zIGEgaG9zdCBQQ0kgZGV2aWNlIHRvIHRoZSBWTS4KKworc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2IHsKKwlfX3UzMiBhc3NpZ25lZF9kZXZfaWQ7CisJX191MzIgYnVzbnI7CisJX191MzIgZGV2Zm47CisJX191MzIgZmxhZ3M7CisJX191MzIgc2VnbnI7CisJdW5pb24geworCQlfX3UzMiByZXNlcnZlZFsxMV07CisJfTsKK307CisKK1RoZSBQQ0kgZGV2aWNlIGlzIHNwZWNpZmllZCBieSB0aGUgdHJpcGxlIHNlZ25yLCBidXNuciwgYW5kIGRldmZuLgorSWRlbnRpZmljYXRpb24gaW4gc3VjY2VlZGluZyBzZXJ2aWNlIHJlcXVlc3RzIGlzIGRvbmUgdmlhIGFzc2lnbmVkX2Rldl9pZC4gVGhlCitmb2xsb3dpbmcgZmxhZ3MgYXJlIHNwZWNpZmllZDoKKworLyogRGVwZW5kcyBvbiBLVk1fQ0FQX0lPTU1VICovCisjZGVmaW5lIEtWTV9ERVZfQVNTSUdOX0VOQUJMRV9JT01NVQkoMSA8PCAwKQorCis0LjQ4IEtWTV9ERUFTU0lHTl9QQ0lfREVWSUNFCisKK0NhcGFiaWxpdHk6IEtWTV9DQVBfREVWSUNFX0RFQVNTSUdOTUVOVAorQXJjaGl0ZWN0dXJlczogeDg2IGlhNjQKK1R5cGU6IHZtIGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX3BjaV9kZXYgKGluKQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitFbmRzIFBDSSBkZXZpY2UgYXNzaWdubWVudCwgcmVsZWFzaW5nIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcy4KKworU2VlIEtWTV9DQVBfREVWSUNFX0FTU0lHTk1FTlQgZm9yIHRoZSBkYXRhIHN0cnVjdHVyZS4gT25seSBhc3NpZ25lZF9kZXZfaWQgaXMKK3VzZWQgaW4ga3ZtX2Fzc2lnbmVkX3BjaV9kZXYgdG8gaWRlbnRpZnkgdGhlIGRldmljZS4KKworNC40OSBLVk1fQVNTSUdOX0RFVl9JUlEKKworQ2FwYWJpbGl0eTogS1ZNX0NBUF9BU1NJR05fREVWX0lSUQorQXJjaGl0ZWN0dXJlczogeDg2IGlhNjQKK1R5cGU6IHZtIGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2lycSAoaW4pCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK0Fzc2lnbnMgYW4gSVJRIHRvIGEgcGFzc2VkLXRocm91Z2ggZGV2aWNlLgorCitzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2lycSB7CisJX191MzIgYXNzaWduZWRfZGV2X2lkOworCV9fdTMyIGhvc3RfaXJxOworCV9fdTMyIGd1ZXN0X2lycTsKKwlfX3UzMiBmbGFnczsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX3UzMiBhZGRyX2xvOworCQkJX191MzIgYWRkcl9oaTsKKwkJCV9fdTMyIGRhdGE7CisJCX0gZ3Vlc3RfbXNpOworCQlfX3UzMiByZXNlcnZlZFsxMl07CisJfTsKK307CisKK1RoZSBmb2xsb3dpbmcgZmxhZ3MgYXJlIGRlZmluZWQ6CisKKyNkZWZpbmUgS1ZNX0RFVl9JUlFfSE9TVF9JTlRYICAgICgxIDw8IDApCisjZGVmaW5lIEtWTV9ERVZfSVJRX0hPU1RfTVNJICAgICAoMSA8PCAxKQorI2RlZmluZSBLVk1fREVWX0lSUV9IT1NUX01TSVggICAgKDEgPDwgMikKKworI2RlZmluZSBLVk1fREVWX0lSUV9HVUVTVF9JTlRYICAgKDEgPDwgOCkKKyNkZWZpbmUgS1ZNX0RFVl9JUlFfR1VFU1RfTVNJICAgICgxIDw8IDkpCisjZGVmaW5lIEtWTV9ERVZfSVJRX0dVRVNUX01TSVggICAoMSA8PCAxMCkKKworSXQgaXMgbm90IHZhbGlkIHRvIHNwZWNpZnkgbXVsdGlwbGUgdHlwZXMgcGVyIGhvc3Qgb3IgZ3Vlc3QgSVJRLiBIb3dldmVyLCB0aGUKK0lSUSB0eXBlIG9mIGhvc3QgYW5kIGd1ZXN0IGNhbiBkaWZmZXIgb3IgY2FuIGV2ZW4gYmUgbnVsbC4KKworNC41MCBLVk1fREVBU1NJR05fREVWX0lSUQorCitDYXBhYmlsaXR5OiBLVk1fQ0FQX0FTU0lHTl9ERVZfSVJRCitBcmNoaXRlY3R1cmVzOiB4ODYgaWE2NAorVHlwZTogdm0gaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1fYXNzaWduZWRfaXJxIChpbikKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworRW5kcyBhbiBJUlEgYXNzaWdubWVudCB0byBhIHBhc3NlZC10aHJvdWdoIGRldmljZS4KKworU2VlIEtWTV9BU1NJR05fREVWX0lSUSBmb3IgdGhlIGRhdGEgc3RydWN0dXJlLiBUaGUgdGFyZ2V0IGRldmljZSBpcyBzcGVjaWZpZWQKK2J5IGFzc2lnbmVkX2Rldl9pZCwgZmxhZ3MgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSBJUlEgdHlwZSBzcGVjaWZpZWQgb24KK0tWTV9BU1NJR05fREVWX0lSUS4gUGFydGlhbCBkZWFzc2lnbm1lbnQgb2YgaG9zdCBvciBndWVzdCBJUlEgaXMgYWxsb3dlZC4KKworNC41MSBLVk1fU0VUX0dTSV9ST1VUSU5HCisKK0NhcGFiaWxpdHk6IEtWTV9DQVBfSVJRX1JPVVRJTkcKK0FyY2hpdGVjdHVyZXM6IHg4NiBpYTY0CitUeXBlOiB2bSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV9pcnFfcm91dGluZyAoaW4pCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK1NldHMgdGhlIEdTSSByb3V0aW5nIHRhYmxlIGVudHJpZXMsIG92ZXJ3cml0aW5nIGFueSBwcmV2aW91c2x5IHNldCBlbnRyaWVzLgorCitzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nIHsKKwlfX3UzMiBucjsKKwlfX3UzMiBmbGFnczsKKwlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5IGVudHJpZXNbMF07Cit9OworCitObyBmbGFncyBhcmUgc3BlY2lmaWVkIHNvIGZhciwgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4KKworc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSB7CisJX191MzIgZ3NpOworCV9fdTMyIHR5cGU7CisJX191MzIgZmxhZ3M7CisJX191MzIgcGFkOworCXVuaW9uIHsKKwkJc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIGlycWNoaXA7CisJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfbXNpIG1zaTsKKwkJX191MzIgcGFkWzhdOworCX0gdTsKK307CisKKy8qIGdzaSByb3V0aW5nIGVudHJ5IHR5cGVzICovCisjZGVmaW5lIEtWTV9JUlFfUk9VVElOR19JUlFDSElQIDEKKyNkZWZpbmUgS1ZNX0lSUV9ST1VUSU5HX01TSSAyCisKK05vIGZsYWdzIGFyZSBzcGVjaWZpZWQgc28gZmFyLCB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLgorCitzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgeworCV9fdTMyIGlycWNoaXA7CisJX191MzIgcGluOworfTsKKworc3RydWN0IGt2bV9pcnFfcm91dGluZ19tc2kgeworCV9fdTMyIGFkZHJlc3NfbG87CisJX191MzIgYWRkcmVzc19oaTsKKwlfX3UzMiBkYXRhOworCV9fdTMyIHBhZDsKK307CisKKzQuNTIgS1ZNX0FTU0lHTl9TRVRfTVNJWF9OUgorCitDYXBhYmlsaXR5OiBLVk1fQ0FQX0RFVklDRV9NU0lYCitBcmNoaXRlY3R1cmVzOiB4ODYgaWE2NAorVHlwZTogdm0gaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1fYXNzaWduZWRfbXNpeF9uciAoaW4pCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK1NldCB0aGUgbnVtYmVyIG9mIE1TSS1YIGludGVycnVwdHMgZm9yIGFuIGFzc2lnbmVkIGRldmljZS4gVGhpcyBzZXJ2aWNlIGNhbgorb25seSBiZSBjYWxsZWQgb25jZSBpbiB0aGUgbGlmZXRpbWUgb2YgYW4gYXNzaWduZWQgZGV2aWNlLgorCitzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX21zaXhfbnIgeworCV9fdTMyIGFzc2lnbmVkX2Rldl9pZDsKKwlfX3UxNiBlbnRyeV9ucjsKKwlfX3UxNiBwYWRkaW5nOworfTsKKworI2RlZmluZSBLVk1fTUFYX01TSVhfUEVSX0RFVgkJMjU2CisKKzQuNTMgS1ZNX0FTU0lHTl9TRVRfTVNJWF9FTlRSWQorCitDYXBhYmlsaXR5OiBLVk1fQ0FQX0RFVklDRV9NU0lYCitBcmNoaXRlY3R1cmVzOiB4ODYgaWE2NAorVHlwZTogdm0gaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1fYXNzaWduZWRfbXNpeF9lbnRyeSAoaW4pCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK1NwZWNpZmllcyB0aGUgcm91dGluZyBvZiBhbiBNU0ktWCBhc3NpZ25lZCBkZXZpY2UgaW50ZXJydXB0IHRvIGEgR1NJLiBTZXR0aW5nCit0aGUgR1NJIHZlY3RvciB0byB6ZXJvIG1lYW5zIGRpc2FibGluZyB0aGUgaW50ZXJydXB0LgorCitzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX21zaXhfZW50cnkgeworCV9fdTMyIGFzc2lnbmVkX2Rldl9pZDsKKwlfX3UzMiBnc2k7CisJX191MTYgZW50cnk7IC8qIFRoZSBpbmRleCBvZiBlbnRyeSBpbiB0aGUgTVNJLVggdGFibGUgKi8KKwlfX3UxNiBwYWRkaW5nWzNdOworfTsKKwogNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlCiAKIEFwcGxpY2F0aW9uIGNvZGUgb2J0YWlucyBhIHBvaW50ZXIgdG8gdGhlIGt2bV9ydW4gc3RydWN0dXJlIGJ5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2t2bS9jcHVpZC50eHQgYi9Eb2N1bWVudGF0aW9uL2t2bS9jcHVpZC50eHQKaW5kZXggMTRhMTJlYS4uODgyMDY4NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rdm0vY3B1aWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24va3ZtL2NwdWlkLnR4dApAQCAtMzYsNiArMzYsOSBAQAogS1ZNX0ZFQVRVUkVfQ0xPQ0tTT1VSQ0UyICAgICAgICAgICB8fCAgICAgMyB8fCBrdm1jbG9jayBhdmFpbGFibGUgYXQgbXNycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAgICAgICB8fCAweDRiNTY0ZDAwIGFuZCAweDRiNTY0ZDAxCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0tWTV9GRUFUVVJFX0FTWU5DX1BGICAgICAgICAgICAgICAgfHwgICAgIDQgfHwgYXN5bmMgcGYgY2FuIGJlIGVuYWJsZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgICAgICAgfHwgd3JpdGluZyB0byBtc3IgMHg0YjU2NGQwMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBLVk1fRkVBVFVSRV9DTE9DS1NPVVJDRV9TVEFCTEVfQklUIHx8ICAgIDI0IHx8IGhvc3Qgd2lsbCB3YXJuIGlmIG5vIGd1ZXN0LXNpZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgICAgICAgfHwgcGVyLWNwdSB3YXJwcyBhcmUgZXhwZWN0ZWQgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgICAgICAgfHwga3ZtY2xvY2suCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2t2bS9tc3IudHh0IGIvRG9jdW1lbnRhdGlvbi9rdm0vbXNyLnR4dAppbmRleCA4ZGRjZmU4Li5kMDc5YWVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2t2bS9tc3IudHh0CisrKyBiL0RvY3VtZW50YXRpb24va3ZtL21zci50eHQKQEAgLTMsNyArMyw2IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBLVk0gbWFrZXMgdXNlIG9mIHNvbWUgY3VzdG9tIE1TUnMgdG8gc2VydmljZSBzb21lIHJlcXVlc3RzLgotQXQgcHJlc2VudCwgdGhpcyBmYWNpbGl0eSBpcyBvbmx5IHVzZWQgYnkga3ZtY2xvY2suCiAKIEN1c3RvbSBNU1JzIGhhdmUgYSByYW5nZSByZXNlcnZlZCBmb3IgdGhlbSwgdGhhdCBnb2VzIGZyb20KIDB4NGI1NjRkMDAgdG8gMHg0YjU2NGRmZi4gVGhlcmUgYXJlIE1TUnMgb3V0c2lkZSB0aGlzIGFyZWEsCkBAIC0xNTEsMyArMTUwLDM4IEBACiAJCQlyZXR1cm4gUFJFU0VOVDsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gTk9OX1BSRVNFTlQ7CisKK01TUl9LVk1fQVNZTkNfUEZfRU46IDB4NGI1NjRkMDIKKwlkYXRhOiBCaXRzIDYzLTYgaG9sZCA2NC1ieXRlIGFsaWduZWQgcGh5c2ljYWwgYWRkcmVzcyBvZiBhCisJNjQgYnl0ZSBtZW1vcnkgYXJlYSB3aGljaCBtdXN0IGJlIGluIGd1ZXN0IFJBTSBhbmQgbXVzdCBiZQorCXplcm9lZC4gQml0cyA1LTIgYXJlIHJlc2VydmVkIGFuZCBzaG91bGQgYmUgemVyby4gQml0IDAgaXMgMQorCXdoZW4gYXN5bmNocm9ub3VzIHBhZ2UgZmF1bHRzIGFyZSBlbmFibGVkIG9uIHRoZSB2Y3B1IDAgd2hlbgorCWRpc2FibGVkLiBCaXQgMiBpcyAxIGlmIGFzeW5jaHJvbm91cyBwYWdlIGZhdWx0cyBjYW4gYmUgaW5qZWN0ZWQKKwl3aGVuIHZjcHUgaXMgaW4gY3BsID09IDAuCisKKwlGaXJzdCA0IGJ5dGUgb2YgNjQgYnl0ZSBtZW1vcnkgbG9jYXRpb24gd2lsbCBiZSB3cml0dGVuIHRvIGJ5CisJdGhlIGh5cGVydmlzb3IgYXQgdGhlIHRpbWUgb2YgYXN5bmNocm9ub3VzIHBhZ2UgZmF1bHQgKEFQRikKKwlpbmplY3Rpb24gdG8gaW5kaWNhdGUgdHlwZSBvZiBhc3luY2hyb25vdXMgcGFnZSBmYXVsdC4gVmFsdWUKKwlvZiAxIG1lYW5zIHRoYXQgdGhlIHBhZ2UgcmVmZXJyZWQgdG8gYnkgdGhlIHBhZ2UgZmF1bHQgaXMgbm90CisJcHJlc2VudC4gVmFsdWUgMiBtZWFucyB0aGF0IHRoZSBwYWdlIGlzIG5vdyBhdmFpbGFibGUuIERpc2FibGluZworCWludGVycnVwdCBpbmhpYml0cyBBUEZzLiBHdWVzdCBtdXN0IG5vdCBlbmFibGUgaW50ZXJydXB0CisJYmVmb3JlIHRoZSByZWFzb24gaXMgcmVhZCwgb3IgaXQgbWF5IGJlIG92ZXJ3cml0dGVuIGJ5IGFub3RoZXIKKwlBUEYuIFNpbmNlIEFQRiB1c2VzIHRoZSBzYW1lIGV4Y2VwdGlvbiB2ZWN0b3IgYXMgcmVndWxhciBwYWdlCisJZmF1bHQgZ3Vlc3QgbXVzdCByZXNldCB0aGUgcmVhc29uIHRvIDAgYmVmb3JlIGl0IGRvZXMKKwlzb21ldGhpbmcgdGhhdCBjYW4gZ2VuZXJhdGUgbm9ybWFsIHBhZ2UgZmF1bHQuICBJZiBkdXJpbmcgcGFnZQorCWZhdWx0IEFQRiByZWFzb24gaXMgMCBpdCBtZWFucyB0aGF0IHRoaXMgaXMgcmVndWxhciBwYWdlCisJZmF1bHQuCisKKwlEdXJpbmcgZGVsaXZlcnkgb2YgdHlwZSAxIEFQRiBjcjIgY29udGFpbnMgYSB0b2tlbiB0aGF0IHdpbGwKKwliZSB1c2VkIHRvIG5vdGlmeSBhIGd1ZXN0IHdoZW4gbWlzc2luZyBwYWdlIGJlY29tZXMKKwlhdmFpbGFibGUuIFdoZW4gcGFnZSBiZWNvbWVzIGF2YWlsYWJsZSB0eXBlIDIgQVBGIGlzIHNlbnQgd2l0aAorCWNyMiBzZXQgdG8gdGhlIHRva2VuIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFnZS4gVGhlcmUgaXMgc3BlY2lhbAorCWtpbmQgb2YgdG9rZW4gMHhmZmZmZmZmZiB3aGljaCB0ZWxscyB2Y3B1IHRoYXQgaXQgc2hvdWxkIHdha2UKKwl1cCBhbGwgcHJvY2Vzc2VzIHdhaXRpbmcgZm9yIEFQRnMgYW5kIG5vIGluZGl2aWR1YWwgdHlwZSAyIEFQRnMKKwl3aWxsIGJlIHNlbnQuCisKKwlJZiBBUEYgaXMgZGlzYWJsZWQgd2hpbGUgdGhlcmUgYXJlIG91dHN0YW5kaW5nIEFQRnMsIHRoZXkgd2lsbAorCW5vdCBiZSBkZWxpdmVyZWQuCisKKwlDdXJyZW50bHkgdHlwZSAyIEFQRiB3aWxsIGJlIGFsd2F5cyBkZWxpdmVyZWQgb24gdGhlIHNhbWUgdmNwdSBhcworCXR5cGUgMSB3YXMsIGJ1dCBndWVzdCBzaG91bGQgbm90IHJlbHkgb24gdGhhdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC50eHQgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QudHh0CmluZGV4IGVmYjNhNmEuLjZjY2FmOGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LnR4dApAQCAtMTExLDggKzExMSwxMSBAQAogCiAgIFRoZW4gdXNlIC0tdHVubmV0PWJyaWRnZTpsZzAgd2hlbiBsYXVuY2hpbmcgdGhlIGd1ZXN0LgogCi0gIFNlZSBodHRwOi8vbGludXgtbmV0Lm9zZGwub3JnL2luZGV4LnBocC9CcmlkZ2UgZm9yIGdlbmVyYWwgaW5mb3JtYXRpb24KLSAgb24gaG93IHRvIGdldCBicmlkZ2luZyB3b3JraW5nLgorICBTZWU6CisgIAorICAgIGh0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvYnJpZGdlCisgICAgCisgIGZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZXQgYnJpZGdpbmcgdG8gd29yay4KIAogVGhlcmUgaXMgYSBoZWxwZnVsIG1haWxpbmcgbGlzdCBhdCBodHRwOi8vb3psYWJzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xndWVzdAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hZ2ljLW51bWJlci50eHQgYi9Eb2N1bWVudGF0aW9uL21hZ2ljLW51bWJlci50eHQKaW5kZXggNTA1ZjE5Ni4uNGIxMmFiYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tYWdpYy1udW1iZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWFnaWMtbnVtYmVyLnR4dApAQCAtMTUwLDcgKzE1MCw3IEBACiBTVExfQk9BUkRNQUdJQyAgICAgICAgMHhhMjI2N2Y1MiAgc3RsYnJkICAgICAgICAgICAgaW5jbHVkZS9saW51eC9zdGFsbGlvbi5oCiBFTkkxNTVfTUFHSUMgICAgICAgICAgMHhhNTRiODcyZCAgbWlkd2F5X2Vwcm9tCSAgICBkcml2ZXJzL2F0bS9lbmkuaAogU0NJX01BR0lDICAgICAgICAgICAgIDB4YmFiZWZhY2UgIGdzX3BvcnQgICAgICAgICAgIGRyaXZlcnMvY2hhci9zaC1zY2kuaAotQ09EQV9NQUdJQyAgICAgICAgICAgIDB4QzBEQUMwREEgIGNvZGFfZmlsZV9pbmZvICAgIGluY2x1ZGUvbGludXgvY29kYV9mc19pLmgKK0NPREFfTUFHSUMgICAgICAgICAgICAweEMwREFDMERBICBjb2RhX2ZpbGVfaW5mbyAgICBmcy9jb2RhL2NvZGFfZnNfaS5oCiBEUE1FTV9NQUdJQyAgICAgICAgICAgMHhjMGZmZWUxMSAgZ2R0X3BjaV9zcmFtICAgICAgZHJpdmVycy9zY3NpL2dkdGguaAogU1RMSV9QT1JUTUFHSUMgICAgICAgIDB4ZTY3MWM3YTEgIHN0bGlwb3J0ICAgICAgICAgIGluY2x1ZGUvbGludXgvaXN0YWxsaW9uLmgKIFlBTV9NQUdJQyAgICAgICAgICAgICAweEYxMEE3NjU0ICB5YW1fcG9ydCAgICAgICAgICBkcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnR4dAppbmRleCBiZWM2OWE4Li5hN2JhNWU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnR4dApAQCAtMSw4ICsxLDggQEAKIEluIG9yZGVyIHRvIHVzZSB0aGUgRXRoZXJuZXQgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eSwgeW91J2xsIG5lZWQgdGhlCiB1c2Vyc3BhY2UgdG9vbHMuIFRoZXNlIHByb2dyYW1zIGFuZCBkb2N1bWVudGF0aW9uIGFyZSBhdmFpbGFibGUKLWF0IGh0dHA6Ly93d3cubGludXgtZm91bmRhdGlvbi5vcmcvZW4vTmV0OkJyaWRnZS4gIFRoZSBkb3dubG9hZCBwYWdlIGlzCithdCBodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvZW4vTmV0OkJyaWRnZS4gIFRoZSBkb3dubG9hZCBwYWdlIGlzCiBodHRwOi8vcHJkb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L2JyaWRnZS4KIAogSWYgeW91IHN0aWxsIGhhdmUgcXVlc3Rpb25zLCBkb24ndCBoZXNpdGF0ZSB0byBwb3N0IHRvIHRoZSBtYWlsaW5nIGxpc3QgCi0obW9yZSBpbmZvIGh0dHA6Ly9saXN0cy5vc2RsLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2JyaWRnZSkuCisobW9yZSBpbmZvIGh0dHBzOi8vbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9icmlkZ2UpLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY2FpZi9zcGlfcG9ydGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY2FpZi9zcGlfcG9ydGluZy50eHQKaW5kZXggNjFkN2M5Mi4uMGNiOGNiOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NhaWYvc3BpX3BvcnRpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYWlmL3NwaV9wb3J0aW5nLnR4dApAQCAtMzIsNyArMzIsNyBAQAogCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBDQUlGIFNQSSBpbnRlcmZhY2UgdG8gZ2l2ZQogCXlvdSBhIGNoYW5jZSB0byBzZXQgdXAgeW91ciBoYXJkd2FyZSB0byBiZSByZWFkeSB0byByZWNlaXZlCiAJYSBzdHJlYW0gb2YgZGF0YSBmcm9tIHRoZSBtYXN0ZXIuIFRoZSB4ZmVyIHN0cnVjdHVyZSBjb250YWlucwotCWJvdGggcGh5c2ljYWwgYW5kIGxvZ2ljYWwgYWRyZXNzZXMsIGFzIHdlbGwgYXMgdGhlIHRvdGFsIGxlbmd0aAorCWJvdGggcGh5c2ljYWwgYW5kIGxvZ2ljYWwgYWRkcmVzc2VzLCBhcyB3ZWxsIGFzIHRoZSB0b3RhbCBsZW5ndGgKIAlvZiB0aGUgdHJhbnNmZXIgaW4gYm90aCBkaXJlY3Rpb25zLlRoZSBkZXYgcGFyYW1ldGVyIGNhbiBiZSB1c2VkCiAJdG8gbWFwIHRvIGRpZmZlcmVudCBDQUlGIFNQSSBzbGF2ZSBkZXZpY2VzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQKaW5kZXggYjM5NWNhNi4uZDcxOGJjMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dApAQCAtMzgsMTEgKzM4LDExIEBACiBzcGVjaWZpZWQgaW4gUkZDcyA0MzQwLi4uNDIuCiAKIFRoZSBrbm93biBidWdzIGFyZSBhdDoKLQlodHRwOi8vbGludXgtbmV0Lm9zZGwub3JnL2luZGV4LnBocC9UT0RPI0RDQ1AKKwlodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL3RvZG8jRENDUAogCiBGb3IgbW9yZSB1cC10by1kYXRlIHZlcnNpb25zIG9mIHRoZSBEQ0NQIGltcGxlbWVudGF0aW9uLCBwbGVhc2UgY29uc2lkZXIgdXNpbmcKIHRoZSBleHBlcmltZW50YWwgRENDUCB0ZXN0IHRyZWU7IGluc3RydWN0aW9ucyBmb3IgY2hlY2tpbmcgdGhpcyBvdXQgYXJlIG9uOgotaHR0cDovL2xpbnV4LW5ldC5vc2RsLm9yZy9pbmRleC5waHAvRENDUF9UZXN0aW5nI0V4cGVyaW1lbnRhbF9EQ0NQX3NvdXJjZV90cmVlCitodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2RjY3BfdGVzdGluZyNFeHBlcmltZW50YWxfRENDUF9zb3VyY2VfdHJlZQogCiAKIFNvY2tldCBvcHRpb25zCkBAIC0xNjcsNiArMTY3LDcgQEAKIHNlcV93aW5kb3cgPSAxMDAKIAlUaGUgaW5pdGlhbCBzZXF1ZW5jZSB3aW5kb3cgKHNlYy4gNy41LjIpIG9mIHRoZSBzZW5kZXIuIFRoaXMgaW5mbHVlbmNlcwogCXRoZSBsb2NhbCBhY2tubyB2YWxpZGl0eSBhbmQgdGhlIHJlbW90ZSBzZXFubyB2YWxpZGl0eSB3aW5kb3dzICg3LjUuMSkuCisJVmFsdWVzIGluIHRoZSByYW5nZSBXbWluID0gMzIgKFJGQyA0MzQwLCA3LjUuMikgdXAgdG8gMl4zMi0xIGNhbiBiZSBzZXQuCiAKIHR4X3FsZW4gPSA1CiAJVGhlIHNpemUgb2YgdGhlIHRyYW5zbWl0IGJ1ZmZlciBpbiBwYWNrZXRzLiBBIHZhbHVlIG9mIDAgY29ycmVzcG9uZHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9nZW5lcmljX25ldGxpbmsudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2dlbmVyaWNfbmV0bGluay50eHQKaW5kZXggZDRmOGI4Yi4uM2UwNzExMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2dlbmVyaWNfbmV0bGluay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2dlbmVyaWNfbmV0bGluay50eHQKQEAgLTEsMyArMSwzIEBACiBBIHdpa2kgZG9jdW1lbnQgb24gaG93IHRvIHVzZSBHZW5lcmljIE5ldGxpbmsgY2FuIGJlIGZvdW5kIGhlcmU6CiAKLSAqIGh0dHA6Ly9saW51eC1uZXQub3NkbC5vcmcvaW5kZXgucGhwL0dlbmVyaWNfTmV0bGlua19IT1dUTworICogaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy9nZW5lcmljX25ldGxpbmtfaG93dG8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmZjL25mYy1wbjU0NC50eHQgYi9Eb2N1bWVudGF0aW9uL25mYy9uZmMtcG41NDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmY2FjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25mYy9uZmMtcG41NDQudHh0CkBAIC0wLDAgKzEsMTE0IEBACitLZXJuZWwgZHJpdmVyIGZvciB0aGUgTlhQIFNlbWljb25kdWN0b3JzIFBONTQ0IE5lYXIgRmllbGQKK0NvbW11bmljYXRpb24gY2hpcAorCitBdXRob3I6IEphcmkgVmFuaGFsYQorQ29udGFjdDogTWF0dGkgQWFsdG9uZW4gKG1hdHRpLmouYWFsdG9uZW4gYXQgbm9raWEuY29tKQorCitHZW5lcmFsCistLS0tLS0tCisKK1RoZSBQTjU0NCBpcyBhbiBpbnRlZ3JhdGVkIHRyYW5zbWlzc2lvbiBtb2R1bGUgZm9yIGNvbnRhY3RsZXNzCitjb21tdW5pY2F0aW9uLiBUaGUgZHJpdmVyIGdvZXMgdW5kZXIgZHJpdmVzL25mYy8gYW5kIGlzIGNvbXBpbGVkIGFzIGEKK21vZHVsZSBuYW1lZCAicG41NDQiLiBJdCByZWdpc3RlcnMgYSBtaXNjIGRldmljZSBhbmQgY3JlYXRlcyBhIGRldmljZQorZmlsZSBuYW1lZCAiL2Rldi9wbjU0NCIuCisKK0hvc3QgSW50ZXJmYWNlczogSTJDLCBTUEkgYW5kIEhTVSwgdGhpcyBkcml2ZXIgc3VwcG9ydHMgY3VycmVudGx5IG9ubHkgSTJDLgorCitUaGUgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgb2ZmZXJzIGEgc3lzZnMgaW50ZXJmYWNlIGZvciBhIGhhcmR3YXJlIHRlc3QgYW5kIGFuIElPQ1RMCitpbnRlcmZhY2UgZm9yIHNlbGVjdGluZyBiZXR3ZWVuIHR3byBvcGVyYXRpbmcgbW9kZXMuIFRoZXJlIGFyZSByZWFkLAord3JpdGUgYW5kIHBvbGwgZnVuY3Rpb25zIGZvciB0cmFuc2ZlcnJpbmcgbWVzc2FnZXMuIFRoZSB0d28gb3BlcmF0aW5nCittb2RlcyBhcmUgdGhlIG5vcm1hbCAoSENJKSBtb2RlIGFuZCB0aGUgZmlybXdhcmUgdXBkYXRlIG1vZGUuCisKK1BONTQ0IGlzIGNvbnRyb2xsZWQgYnkgc2VuZGluZyBtZXNzYWdlcyBmcm9tIHRoZSB1c2Vyc3BhY2UgdG8gdGhlCitjaGlwLiBUaGUgbWFpbiBmdW5jdGlvbiBvZiB0aGUgZHJpdmVyIGlzIGp1c3QgdG8gcGFzcyB0aG9zZSBtZXNzYWdlcword2l0aG91dCBjYXJpbmcgYWJvdXQgdGhlIG1lc3NhZ2UgY29udGVudC4KKworCitQcm90b2NvbHMKKy0tLS0tLS0tLQorCitJbiB0aGUgbm9ybWFsIChIQ0kpIG1vZGUgYW5kIGluIHRoZSBmaXJtd2FyZSB1cGRhdGUgbW9kZSByZWFkIGFuZAord3JpdGUgZnVuY3Rpb25zIGJlaGF2ZSBhIGJpdCBkaWZmZXJlbnRseSBiZWNhdXNlIHRoZSBtZXNzYWdlIGZvcm1hdHMKK29yIHRoZSBwcm90b2NvbHMgYXJlIGRpZmZlcmVudC4KKworSW4gdGhlIG5vcm1hbCAoSENJKSBtb2RlIHRoZSBwcm90b2NvbCB1c2VkIGlzIGRlcml2ZWQgZnJvbSB0aGUgRVRTSQorSENJIHNwZWNpZmljYXRpb24uIFRoZSBmaXJtd2FyZSBpcyB1cGRhdGVkIHVzaW5nIGEgc3BlY2lmaWMgcHJvdG9jb2wsCit3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSBIQ0kuCisKK0hDSSBtZXNzYWdlcyBjb25zaXN0IG9mIGFuIGVpZ2h0IGJpdCBoZWFkZXIgYW5kIHRoZSBtZXNzYWdlIGJvZHkuIFRoZQoraGVhZGVyIGNvbnRhaW5zIHRoZSBtZXNzYWdlIGxlbmd0aC4gTWF4aW11bSBzaXplIGZvciBhbiBIQ0kgbWVzc2FnZSBpcworMzMuIEluIEhDSSBtb2RlIHNlbnQgbWVzc2FnZXMgYXJlIHRlc3RlZCBmb3IgYSBjb3JyZWN0CitjaGVja3N1bS4gRmlybXdhcmUgdXBkYXRlIG1lc3NhZ2VzIGhhdmUgdGhlIGxlbmd0aCBpbiB0aGUgc2Vjb25kIChNU0IpCithbmQgdGhpcmQgKExTQikgYnl0ZXMgb2YgdGhlIG1lc3NhZ2UuIFRoZSBtYXhpbXVtIEZXIG1lc3NhZ2UgbGVuZ3RoIGlzCisxMDI0IGJ5dGVzLgorCitGb3IgdGhlIEVUU0kgSENJIHNwZWNpZmljYXRpb24gc2VlCitodHRwOi8vd3d3LmV0c2kub3JnL1dlYlNpdGUvVGVjaG5vbG9naWVzL1Byb3RvY29sU3BlY2lmaWNhdGlvbi5hc3B4CisKK1RoZSBIYXJkd2FyZSBUZXN0CistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaWRlYSBvZiB0aGUgdGVzdCBpcyB0aGF0IGl0IGNhbiBwZXJmb3JtZWQgYnkgcmVhZGluZyBmcm9tIHRoZQorY29ycmVzcG9uZGluZyBzeXNmcyBmaWxlLiBUaGUgdGVzdCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgYm9hcmQgZmlsZQorYW5kIGl0IHNob3VsZCB0ZXN0IHRoYXQgUE41NDQgY2FuIGJlIHB1dCBpbnRvIHRoZSBmaXJtd2FyZSB1cGRhdGUKK21vZGUuIElmIHRoZSB0ZXN0IGlzIG5vdCBpbXBsZW1lbnRlZCB0aGUgc3lzZnMgZmlsZSBkb2VzIG5vdCBnZXQKK2NyZWF0ZWQuCisKK0V4YW1wbGU6Cis+IGNhdCAvc3lzL21vZHVsZS9wbjU0NC9kcml2ZXJzL2kyY1w6cG41NDQvMy0wMDJiL25mY190ZXN0CisxCisKK05vcm1hbCBPcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0KKworUE41NDQgaXMgcG93ZXJlZCB1cCB3aGVuIHRoZSBkZXZpY2UgZmlsZSBpcyBvcGVuZWQsIG90aGVyd2lzZSBpdCdzCit0dXJuZWQgb2ZmLiBPbmx5IG9uZSBpbnN0YW5jZSBjYW4gdXNlIHRoZSBkZXZpY2UgYXQgYSB0aW1lLgorCitVc2Vyc3BhY2UgYXBwbGljYXRpb25zIGNvbnRyb2wgUE41NDQgd2l0aCBIQ0kgbWVzc2FnZXMuIFRoZSBoYXJkd2FyZQorc2VuZHMgYW4gaW50ZXJydXB0IHdoZW4gZGF0YSBpcyBhdmFpbGFibGUgZm9yIHJlYWRpbmcuIERhdGEgaXMKK3BoeXNpY2FsbHkgcmVhZCB3aGVuIHRoZSByZWFkIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBhIHVzZXJzcGFjZQorYXBwbGljYXRpb24uIFBvbGwoKSBjaGVja3MgdGhlIHJlYWQgaW50ZXJydXB0IHN0YXRlLiBDb25maWd1cmF0aW9uIGFuZAorc2VsZiB0ZXN0aW5nIGFyZSBhbHNvIGRvbmUgZnJvbSB0aGUgdXNlcnNwYWNlIHVzaW5nIHJlYWQgYW5kIHdyaXRlLgorCitFeGFtcGxlIHBsYXRmb3JtIGRhdGE6CisKK3N0YXRpYyBpbnQgcng3MV9wbjU0NF9uZmNfcmVxdWVzdF9yZXNvdXJjZXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwkvKiBHZXQgYW5kIHNldHVwIHRoZSBIVyByZXNvdXJjZXMgZm9yIHRoZSBkZXZpY2UgKi8KK30KKworc3RhdGljIHZvaWQgcng3MV9wbjU0NF9uZmNfZnJlZV9yZXNvdXJjZXModm9pZCkKK3sKKwkvKiBSZWxlYXNlIHRoZSBIVyByZXNvdXJjZXMgKi8KK30KKworc3RhdGljIHZvaWQgcng3MV9wbjU0NF9uZmNfZW5hYmxlKGludCBmdykKK3sKKwkvKiBUdXJuIHRoZSBkZXZpY2Ugb24gKi8KK30KKworc3RhdGljIGludCByeDcxX3BuNTQ0X25mY190ZXN0KHZvaWQpCit7CisJLyoKKwkgKiBQdXQgdGhlIGRldmljZSBpbnRvIHRoZSBGVyB1cGRhdGUgbW9kZQorCSAqIGFuZCB0aGVuIGJhY2sgdG8gdGhlIG5vcm1hbCBtb2RlLgorCSAqIENoZWNrIHRoZSBiZWhhdmlvciBhbmQgcmV0dXJuIG9uZSBvbiBzdWNjZXNzLAorCSAqIHplcm8gb24gZmFpbHVyZS4KKwkgKi8KK30KKworc3RhdGljIHZvaWQgcng3MV9wbjU0NF9uZmNfZGlzYWJsZSh2b2lkKQoreworCS8qIHR1cm4gdGhlIHBvd2VyIG9mZiAqLworfQorCitzdGF0aWMgc3RydWN0IHBuNTQ0X25mY19wbGF0Zm9ybV9kYXRhIHJ4NzFfbmZjX2RhdGEgPSB7CisJLnJlcXVlc3RfcmVzb3VyY2VzID0gcng3MV9wbjU0NF9uZmNfcmVxdWVzdF9yZXNvdXJjZXMsCisJLmZyZWVfcmVzb3VyY2VzID0gcng3MV9wbjU0NF9uZmNfZnJlZV9yZXNvdXJjZXMsCisJLmVuYWJsZSA9IHJ4NzFfcG41NDRfbmZjX2VuYWJsZSwKKwkudGVzdCA9IHJ4NzFfcG41NDRfbmZjX3Rlc3QsCisJLmRpc2FibGUgPSByeDcxX3BuNTQ0X25mY19kaXNhYmxlLAorfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKaW5kZXggMzAyZGI1ZC4uNzQwMGQ3NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKQEAgLTEzMSw3ICsxMzEsNyBAQAogcG9pbnQgYW5kIHRoZSB3YXkgYSBuZXcgcGxhdGZvcm0gc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBrZXJuZWwuIFRoZQogbGVnYWN5IGlTZXJpZXMgcGxhdGZvcm0gYnJlYWtzIHRob3NlIHJ1bGVzIGFzIGl0IHByZWRhdGVzIHRoaXMgc2NoZW1lLAogYnV0IG5vIG5ldyBib2FyZCBzdXBwb3J0IHdpbGwgYmUgYWNjZXB0ZWQgaW4gdGhlIG1haW4gdHJlZSB0aGF0Ci1kb2Vzbid0IGZvbGxvd3MgdGhlbSBwcm9wZXJseS4gIEluIGFkZGl0aW9uLCBzaW5jZSB0aGUgYWR2ZW50IG9mIHRoZQorZG9lc24ndCBmb2xsb3cgdGhlbSBwcm9wZXJseS4gIEluIGFkZGl0aW9uLCBzaW5jZSB0aGUgYWR2ZW50IG9mIHRoZQogYXJjaC9wb3dlcnBjIG1lcmdlZCBhcmNoaXRlY3R1cmUgZm9yIHBwYzMyIGFuZCBwcGM2NCwgbmV3IDMyLWJpdAogcGxhdGZvcm1zIGFuZCAzMi1iaXQgcGxhdGZvcm1zIHdoaWNoIG1vdmUgaW50byBhcmNoL3Bvd2VycGMgd2lsbCBiZQogcmVxdWlyZWQgdG8gdXNlIHRoZXNlIHJ1bGVzIGFzIHdlbGwuCkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogCiBXQVJOSU5HOiBUaGlzIHZlcnNpb24gaXMgc3RpbGwgaW4gZWFybHkgZGV2ZWxvcG1lbnQgc3RhZ2U7IHRoZQogcmVzdWx0aW5nIGRldmljZS10cmVlICJibG9icyIgaGF2ZSBub3QgeWV0IGJlZW4gdmFsaWRhdGVkIHdpdGggdGhlCi1rZXJuZWwuIFRoZSBjdXJyZW50IGdlbmVyYXRlZCBibG9jIGxhY2tzIGEgdXNlZnVsIHJlc2VydmUgbWFwIChpdCB3aWxsCitrZXJuZWwuIFRoZSBjdXJyZW50IGdlbmVyYXRlZCBibG9jayBsYWNrcyBhIHVzZWZ1bCByZXNlcnZlIG1hcCAoaXQgd2lsbAogYmUgZml4ZWQgdG8gZ2VuZXJhdGUgYW4gZW1wdHkgb25lLCBpdCdzIHVwIHRvIHRoZSBib290bG9hZGVyIHRvIGZpbGwKIGl0IHVwKSBhbW9uZyBvdGhlcnMuIFRoZSBlcnJvciBoYW5kbGluZyBuZWVkcyB3b3JrLCBidWdzIGFyZSBsdXJraW5nLAogZXRjLi4uCkBAIC0xMDk4LDcgKzEwOTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbiBhcmJpdHJhcnkgYXJyYXkgb2YgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgY2hpbGRub2RlQGFkZHJlc3NzIHsJLyogZGVmaW5lIGEgY2hpbGQgbm9kZSBuYW1lZCAiY2hpbGRub2RlIgorICBjaGlsZG5vZGVAYWRkcmVzcyB7CS8qIGRlZmluZSBhIGNoaWxkIG5vZGUgbmFtZWQgImNoaWxkbm9kZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogd2hvc2UgdW5pdCBuYW1lIGlzICJjaGlsZG5vZGUgYXQKIAkJCQkgKiBhZGRyZXNzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L2NwbS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9jcG0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDU5ODAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9jcG0udHh0CkBAIC0wLDAgKzEsNTIgQEAKK1BQQzR4eCBDbG9jayBQb3dlciBNYW5hZ2VtZW50IChDUE0pIG5vZGUKKworUmVxdWlyZWQgcHJvcGVydGllczoKKwktIGNvbXBhdGlibGUJCTogY29tcGF0aWJsZSBsaXN0LCBjdXJyZW50bHkgb25seSAiaWJtLGNwbSIKKwktIGRjci1hY2Nlc3MtbWV0aG9kCTogIm5hdGl2ZSIKKwktIGRjci1yZWcJCTogPCBEQ1IgcmVnaXN0ZXIgcmFuZ2UgPgorCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorCS0gZXItb2Zmc2V0CQk6IEFsbCA0eHggU29DcyB3aXRoIGEgQ1BNIGNvbnRyb2xsZXIgaGF2ZQorCQkJCSAgb25lIG9mIHR3byBkaWZmZXJlbnQgb3JkZXIgZm9yIHRoZSBDUE0KKwkJCQkgIHJlZ2lzdGVycy4gU29tZSBoYXZlIHRoZSBDUE0gcmVnaXN0ZXJzCisJCQkJICBpbiB0aGUgZm9sbG93aW5nIG9yZGVyIChFUixGUixTUikuIFRoZQorCQkJCSAgb3RoZXJzIGhhdmUgdGhlbSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyCisJCQkJICAoU1IsRVIsRlIpLiBGb3IgdGhlIHNlY29uZCBjYXNlIHNldAorCQkJCSAgZXItb2Zmc2V0ID0gPDE+LgorCS0gdW51c2VkLXVuaXRzCQk6IHNwZWNpZmllciBjb25zaXN0IG9mIG9uZSBjZWxsLiBGb3IgZWFjaAorCQkJCSAgYml0IGluIHRoZSBjZWxsLCB0aGUgY29ycmVzcG9uZGluZyBiaXQKKwkJCQkgIGluIENQTSB3aWxsIGJlIHNldCB0byB0dXJuIG9mZiB1bnVzZWQKKwkJCQkgIGRldmljZXMuCisJLSBpZGxlLWRvemUJCTogc3BlY2lmaWVyIGNvbnNpc3Qgb2Ygb25lIGNlbGwuIEZvciBlYWNoCisJCQkJICBiaXQgaW4gdGhlIGNlbGwsIHRoZSBjb3JyZXNwb25kaW5nIGJpdAorCQkJCSAgaW4gQ1BNIHdpbGwgYmUgc2V0IHRvIHR1cm4gb2ZmIHVudXNlZAorCQkJCSAgZGV2aWNlcy4gVGhpcyBpcyB1c3VhbGx5IGp1c3QgQ1BNW0NQVV0uCisJLSBzdGFuZGJ5CQk6IHNwZWNpZmllciBjb25zaXN0IG9mIG9uZSBjZWxsLiBGb3IgZWFjaAorCQkJCSAgYml0IGluIHRoZSBjZWxsLCB0aGUgY29ycmVzcG9uZGluZyBiaXQKKwkJCQkgIGluIENQTSB3aWxsIGJlIHNldCBvbiBzdGFuZGJ5IGFuZAorCQkJCSAgcmVzdG9yZWQgb24gcmVzdW1lLgorCS0gc3VzcGVuZAkJOiBzcGVjaWZpZXIgY29uc2lzdCBvZiBvbmUgY2VsbC4gRm9yIGVhY2gKKwkJCQkgIGJpdCBpbiB0aGUgY2VsbCwgdGhlIGNvcnJlc3BvbmRpbmcgYml0CisJCQkJICBpbiBDUE0gd2lsbCBiZSBzZXQgb24gc3VzcGVuZCAobWVtKSBhbmQKKwkJCQkgIHJlc3RvcmVkIG9uIHJlc3VtZS4gTm90ZSwgZm9yIHN0YW5kYnkKKwkJCQkgIGFuZCBzdXNwZW5kIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgY2FuCisJCQkJICBiZSBkaWZmZXJlbnQgb3IgdGhlIHNhbWUuIFVzdWFsbHkgZm9yCisJCQkJICBzdGFuZGJ5IG9ubHkgY2xhc3MgMiBhbmQgMyB1bml0cyBhcmUgc2V0LgorCQkJCSAgSG93ZXZlciwgdGhlIGludGVyZmFjZSBkb2VzIG5vdCBjYXJlLgorCQkJCSAgSWYgdGhleSBhcmUgdGhlIHNhbWUsIHRoZSBhZGRpdGlvbmFsCisJCQkJICBwb3dlciBzYXZpbmcgd2lsbCBiZSBzZWVpbmcgaWYgc3VwcG9ydAorCQkJCSAgaXMgYXZhaWxhYmxlIHRvIHB1dCB0aGUgRERSIGluIHNlbGYKKwkJCQkgIHJlZnJlc2ggbW9kZSBhbmQgYW55IGFkZGl0aW9uYWwgcG93ZXIKKwkJCQkgIHNhdmluZyB0ZWNobmlxdWVzIGZvciB0aGUgc3BlY2lmaWMgU29DLgorCitFeGFtcGxlOgorCUNQTTA6IGNwbSB7CisJCWNvbXBhdGlibGUgPSAiaWJtLGNwbSI7CisJCWRjci1hY2Nlc3MtbWV0aG9kID0gIm5hdGl2ZSI7CisJCWRjci1yZWcgPSA8MHgxNjAgMHgwMDM+OworCQllci1vZmZzZXQgPSA8MD47CisJCXVudXNlZC11bml0cyA9IDwweDAwMDAwMTAwPjsKKwkJaWRsZS1kb3plID0gPDB4MDIwMDAwMDA+OworCQlzdGFuZGJ5ID0gPDB4ZmVmZjAwMDA+OworCQlzdXNwZW5kID0gPDB4ZmVmZjc5MWQ+OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHBzL3Bwcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bwcy9wcHMudHh0CmluZGV4IDEyNWY0YWIuLmQzNWRjZGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcHBzL3Bwcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wcHMvcHBzLnR4dApAQCAtMTcwLDMgKzE3MCw0OSBAQAogCiBQbGVhc2UsIG5vdGUgdGhhdCB0byBjb21waWxlIHVzZXJsYW5kIHByb2dyYW1zIHlvdSBuZWVkIHRoZSBmaWxlIHRpbWVwcHMuaAogKHNlZSBEb2N1bWVudGF0aW9uL3Bwcy8pLgorCisKK0dlbmVyYXRvcnMKKy0tLS0tLS0tLS0KKworU29tZXRpbWVzIG9uZSBuZWVkcyB0byBiZSBhYmxlIG5vdCBvbmx5IHRvIGNhdGNoIFBQUyBzaWduYWxzIGJ1dCB0byBwcm9kdWNlCit0aGVtIGFsc28uIEZvciBleGFtcGxlLCBydW5uaW5nIGEgZGlzdHJpYnV0ZWQgc2ltdWxhdGlvbiwgd2hpY2ggcmVxdWlyZXMKK2NvbXB1dGVycycgY2xvY2sgdG8gYmUgc3luY2hyb25pemVkIHZlcnkgdGlnaHRseS4gT25lIHdheSB0byBkbyB0aGlzIGlzIHRvCitpbnZlbnQgc29tZSBjb21wbGljYXRlZCBoYXJkd2FyZSBzb2x1dGlvbnMgYnV0IGl0IG1heSBiZSBuZWl0aGVyIG5lY2Vzc2FyeQorbm9yIGFmZm9yZGFibGUuIFRoZSBjaGVhcCB3YXkgaXMgdG8gbG9hZCBhIFBQUyBnZW5lcmF0b3Igb24gb25lIG9mIHRoZQorY29tcHV0ZXJzIChtYXN0ZXIpIGFuZCBQUFMgY2xpZW50cyBvbiBvdGhlcnMgKHNsYXZlcyksIGFuZCB1c2UgdmVyeSBzaW1wbGUKK2NhYmxlcyB0byBkZWxpdmVyIHNpZ25hbHMgdXNpbmcgcGFyYWxsZWwgcG9ydHMsIGZvciBleGFtcGxlLgorCitQYXJhbGxlbCBwb3J0IGNhYmxlIHBpbm91dDoKK3BpbgluYW1lCW1hc3RlciAgICAgIHNsYXZlCisxCVNUUk9CRQkgICotLS0tLS0gICAgICoKKzIJRDAJICAqICAgICB8ICAgICAqCiszCUQxCSAgKiAgICAgfCAgICAgKgorNAlEMgkgICogICAgIHwgICAgICoKKzUJRDMJICAqICAgICB8ICAgICAqCis2CUQ0CSAgKiAgICAgfCAgICAgKgorNwlENQkgICogICAgIHwgICAgICoKKzgJRDYJICAqICAgICB8ICAgICAqCis5CUQ3CSAgKiAgICAgfCAgICAgKgorMTAJQUNLCSAgKiAgICAgLS0tLS0tKgorMTEJQlVTWQkgICogICAgICAgICAgICoKKzEyCVBFCSAgKiAgICAgICAgICAgKgorMTMJU0VMCSAgKiAgICAgICAgICAgKgorMTQJQVVUT0ZECSAgKiAgICAgICAgICAgKgorMTUJRVJST1IJICAqICAgICAgICAgICAqCisxNglJTklUCSAgKiAgICAgICAgICAgKgorMTcJU0VMSU4JICAqICAgICAgICAgICAqCisxOC0yNQlHTkQJICAqLS0tLS0tLS0tLS0qCisKK1BsZWFzZSBub3RlIHRoYXQgcGFyYWxsZWwgcG9ydCBpbnRlcnJ1cHQgb2NjdXJzIG9ubHkgb24gaGlnaC0+bG93IHRyYW5zaXRpb24sCitzbyBpdCBpcyB1c2VkIGZvciBQUFMgYXNzZXJ0IGVkZ2UuIFBQUyBjbGVhciBlZGdlIGNhbiBiZSBkZXRlcm1pbmVkIG9ubHkKK3VzaW5nIHBvbGxpbmcgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyIHdoaWNoIGFjdHVhbGx5IGNhbiBiZSBkb25lIHdheSBtb3JlCitwcmVjaXNlbHkgYmVjYXVzZSBpbnRlcnJ1cHQgaGFuZGxpbmcgZGVsYXlzIGNhbiBiZSBxdWl0ZSBiaWcgYW5kIHJhbmRvbS4gU28KK2N1cnJlbnQgcGFycG9ydCBQUFMgZ2VuZXJhdG9yIGltcGxlbWVudGF0aW9uIChwcHNfZ2VuX3BhcnBvcnQgbW9kdWxlKSBpcworZ2VhcmVkIHRvd2FyZHMgdXNpbmcgdGhlIGNsZWFyIGVkZ2UgZm9yIHRpbWUgc3luY2hyb25pemF0aW9uLgorCitDbGVhciBlZGdlIHBvbGxpbmcgaXMgZG9uZSB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgc28gaXQncyBiZXR0ZXIgdG8gc2VsZWN0CitkZWxheSBiZXR3ZWVuIGFzc2VydCBhbmQgY2xlYXIgZWRnZSBhcyBzbWFsbCBhcyBwb3NzaWJsZSB0byByZWR1Y2Ugc3lzdGVtCitsYXRlbmNpZXMuIEJ1dCBpZiBpdCBpcyB0b28gc21hbGwgc2xhdmUgd29uJ3QgYmUgYWJsZSB0byBjYXB0dXJlIGNsZWFyIGVkZ2UKK3RyYW5zaXRpb24uIFRoZSBkZWZhdWx0IG9mIDMwdXMgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGluIG1vc3Qgc2l0dWF0aW9ucy4KK1RoZSBkZWxheSBjYW4gYmUgc2VsZWN0ZWQgdXNpbmcgJ2RlbGF5JyBwcHNfZ2VuX3BhcnBvcnQgbW9kdWxlIHBhcmFtZXRlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvMDAtSU5ERVgKaW5kZXggM2MwMGM5Yy4uZDI2NTFjNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvMDAtSU5ERVgKQEAgLTMsNyArMyw3IEBACiBzY2hlZC1hcmNoLnR4dAogCS0gQ1BVIFNjaGVkdWxlciBpbXBsZW1lbnRhdGlvbiBoaW50cyBmb3IgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUuCiBzY2hlZC1kZXNpZ24tQ0ZTLnR4dAotCS0gZ29hbHMsIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhlIENvbXBsZXRlIEZhaXIgU2NoZWR1bGVyLgorCS0gZ29hbHMsIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhlIENvbXBsZXRlbHkgRmFpciBTY2hlZHVsZXIuCiBzY2hlZC1kb21haW5zLnR4dAogCS0gaW5mb3JtYXRpb24gb24gc2NoZWR1bGluZyBkb21haW5zLgogc2NoZWQtbmljZS1kZXNpZ24udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLmxwZmMgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLmxwZmMKaW5kZXggMzM3YzkyNC4uNWU4Mzc2OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5scGZjCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubHBmYwpAQCAtNTczLDcgKzU3Myw3IEBACiAJKiBCYWNrcm91bmQgbm9kZXZfdGltZW91dCBwcm9jZXNzaW5nIHRvIERQQyBUaGlzIGVuYWJsZXMgdXMgdG8KIAkgIHVuYmxvY2sgKHN0b3AgZGV2X2xvc3NfdG1vKSB3aGVuIGFwcG9wcmlhdGUuCiAJKiBGaXggYXJyYXkgZGlzY292ZXJ5IHdpdGggbXVsdGlwbGUgbHVucy4gIFRoZSBtYXhfbHVucyB3YXMgMCBhdAotCSAgdGhlIHRpbWUgdGhlIGhvc3Qgc3RydWN0dXJlIHdhcyBpbnRpYWxpemVkLiAgbHBmY19jZmdfcGFyYW1zCisJICB0aGUgdGltZSB0aGUgaG9zdCBzdHJ1Y3R1cmUgd2FzIGluaXRpYWxpemVkLiAgbHBmY19jZmdfcGFyYW1zCiAJICB0aGVuIHNldCB0aGUgbWF4X2x1bnMgdG8gdGhlIGNvcnJlY3QgdmFsdWUgYWZ0ZXJ3YXJkcy4KIAkqIFJlbW92ZSB1bnVzZWQgZGVmaW5lIExQRkNfTUFYX0xVTiBhbmQgc2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mCiAJICBscGZjX21heF9sdW4gcGFyYW1ldGVyIHRvIDUxMi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VyaWFsL3R0eS50eHQgYi9Eb2N1bWVudGF0aW9uL3NlcmlhbC90dHkudHh0CmluZGV4IDdjOTAwNTAuLjU0MGRiNDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2VyaWFsL3R0eS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwvdHR5LnR4dApAQCAtMTA3LDcgKzEwNyw3IEBACiAKIGRjZF9jaGFuZ2UoKQktCVJlcG9ydCB0byB0aGUgdHR5IGxpbmUgdGhlIGN1cnJlbnQgRENEIHBpbiBzdGF0dXMKIAkJCWNoYW5nZXMgYW5kIHRoZSByZWxhdGl2ZSB0aW1lc3RhbXAuIFRoZSB0aW1lc3RhbXAKLQkJCWNhbiBiZSBOVUxMLgorCQkJY2Fubm90IGJlIE5VTEwuCiAKIAogRHJpdmVyIEFjY2VzcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAppbmRleCBkMGViNjk2Li4zYzFlZGRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dApAQCAtOTc0LDEzICs5NzQsNiBAQAogCiAgICAgU2VlIGhkc3BtLnR4dCBmb3IgZGV0YWlscy4KIAotICBNb2R1bGUgc25kLWhpZmllcgotICAtLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgTW9kdWxlIGZvciB0aGUgTWVkaWFUZWsvVGVtcG9UZWMgSGlGaWVyIEZhbnRhc2lhIHNvdW5kIGNhcmQuCi0KLSAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBhdXRvcHJvYmUgYW5kIG11bHRpcGxlIGNhcmRzLgotCiAgIE1vZHVsZSBzbmQtaWNlMTcxMgogICAtLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTUzMSwxNSArMTUyNCwyMCBAQAogICBNb2R1bGUgc25kLW94eWdlbgogICAtLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiB0aGUgQy1NZWRpYSBDTUk4Nzg4IGNoaXA6CisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiB0aGUgQy1NZWRpYSBDTUk4Nzg2Lzg3ODcvODc4OCBjaGlwOgogICAgICogQXNvdW5kIEEtODc4OAorICAgICogQXN1cyBYb25hciBERwogICAgICogQXV6ZW5UZWNoIFgtTWVyaWRpYW4KKyAgICAqIEF1emVuVGVjaCBYLU1lcmlkaWFuIDJHCiAgICAgKiBCZ2VhcnMgYi1FbnNwaXJlcgogICAgICogQ2x1YjNEIFRoZWF0cm9uIERUUwogICAgICogSFQtT21lZ2EgQ2xhcm8gKHBsdXMpCiAgICAgKiBIVC1PbWVnYSBDbGFybyBoYWxvIChYVCkKKyAgICAqIEt1cm91dG9zaGlrb3UgQ01JODc4Ny1IRzJQQ0kKICAgICAqIFJhemVyIEJhcnJhY3VkYSBBQy0xCiAgICAgKiBTb25kaWdvIEluZmVybm8KKyAgICAqIFRlbXBvVGVjIEhpRmllciBGYW50YXNpYQorICAgICogVGVtcG9UZWMgSGlGaWVyIFNlcmVuYWRlCiAKICAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBhdXRvcHJvYmUgYW5kIG11bHRpcGxlIGNhcmRzLgogCkBAIC0yMDA2LDkgKzIwMDQsOSBAQAogICBNb2R1bGUgc25kLXZpcnR1b3NvCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gdGhlIEFzdXMgQVYxMDAvQVYyMDAgY2hpcHMsCi0gICAgaS5lLiwgWG9uYXIgRDEsIERYLCBEMiwgRDJYLCBEUywgSERBVjEuMyAoRGVsdXhlKSwgRXNzZW5jZSBTVAotICAgIChEZWx1eGUpIGFuZCBFc3NlbmNlIFNUWC4KKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIHRoZSBBc3VzIEFWNjYvQVYxMDAvQVYyMDAgY2hpcHMsCisgICAgaS5lLiwgWG9uYXIgRDEsIERYLCBEMiwgRDJYLCBEUywgRXNzZW5jZSBTVCAoRGVsdXhlKSwgRXNzZW5jZSBTVFgsCisgICAgSERBVjEuMyAoRGVsdXhlKSwgYW5kIEhEQVYxLjMgU2xpbS4KIAogICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIGF1dG9wcm9iZSBhbmQgbXVsdGlwbGUgY2FyZHMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKaW5kZXggMzdjNmFhZC4uMTZhZTQzMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKQEAgLTE0OSw3ICsxNDksNiBAQAogICBhY2VyLWFzcGlyZS03NzMwZyBBY2VyIEFzcGlyZSA3NzMwRwogICBhY2VyLWFzcGlyZS04OTMwZyBBY2VyIEFzcGlyZSA4OTMwRwogICBtZWRpb24JTWVkaW9uIExhcHRvcHMKLSAgbWVkaW9uLW1kMglNZWRpb24gTUQyCiAgIHRhcmdhLWRpZwlUYXJnYS9NU0kKICAgdGFyZ2EtMmNoLWRpZwlUYXJnYS9NU0kgd2l0aCAyLWNoYW5uZWwKICAgdGFyZ2EtOGNoLWRpZyBUYXJnYS9NU0kgd2l0aCA4LWNoYW5uZWwgKE1TSSBHWDYyMCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvMDAtSU5ERVgKaW5kZXggMTI4NmY0NS4uOGNmNWQ0OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvMDAtSU5ERVgKQEAgLTQsOCArNCw2IEBACiAJLSBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IC9wcm9jL3N5cy8gc3lzY3RsIGZpbGVzLgogYWJpLnR4dAogCS0gZG9jdW1lbnRhdGlvbiBmb3IgL3Byb2Mvc3lzL2FiaS8qLgotY3RsX3VubnVtYmVyZWQudHh0Ci0JLSBleHBsYW5hdGlvbiBvZiB3aHkgb25lIHNob3VsZCBub3QgYWRkIG5ldyBiaW5hcnkgc3lzY3RsIG51bWJlcnMuCiBmcy50eHQKIAktIGRvY3VtZW50YXRpb24gZm9yIC9wcm9jL3N5cy9mcy8qLgoga2VybmVsLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKaW5kZXggNTc0MDY3MS4uMTFkNWNlZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CkBAIC0zNCw2ICszNCw3IEBACiAtIGhvdHBsdWcKIC0gamF2YS1hcHBsZXR2aWV3ZXIgICAgICAgICAgIFsgYmluZm10X2phdmEsIG9ic29sZXRlIF0KIC0gamF2YS1pbnRlcnByZXRlciAgICAgICAgICAgIFsgYmluZm10X2phdmEsIG9ic29sZXRlIF0KKy0ga3B0cl9yZXN0cmljdAogLSBrc3RhY2tfZGVwdGhfdG9fcHJpbnQgICAgICAgWyBYODYgb25seSBdCiAtIGwyY3IgICAgICAgICAgICAgICAgICAgICAgICBbIFBQQyBvbmx5IF0KIC0gbW9kcHJvYmUgICAgICAgICAgICAgICAgICAgID09PiBEb2N1bWVudGF0aW9uL2RlYnVnZ2luZy1tb2R1bGVzLnR4dApAQCAtMjYxLDYgKzI2MiwxOSBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCitrcHRyX3Jlc3RyaWN0OgorCitUaGlzIHRvZ2dsZSBpbmRpY2F0ZXMgd2hldGhlciByZXN0cmljdGlvbnMgYXJlIHBsYWNlZCBvbgorZXhwb3Npbmcga2VybmVsIGFkZHJlc3NlcyB2aWEgL3Byb2MgYW5kIG90aGVyIGludGVyZmFjZXMuICBXaGVuCitrcHRyX3Jlc3RyaWN0IGlzIHNldCB0byAoMCksIHRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMuICBXaGVuCitrcHRyX3Jlc3RyaWN0IGlzIHNldCB0byAoMSksIHRoZSBkZWZhdWx0LCBrZXJuZWwgcG9pbnRlcnMKK3ByaW50ZWQgdXNpbmcgdGhlICVwSyBmb3JtYXQgc3BlY2lmaWVyIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCAwJ3MKK3VubGVzcyB0aGUgdXNlciBoYXMgQ0FQX1NZU0xPRy4gIFdoZW4ga3B0cl9yZXN0cmljdCBpcyBzZXQgdG8KKygyKSwga2VybmVsIHBvaW50ZXJzIHByaW50ZWQgdXNpbmcgJXBLIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCAwJ3MKK3JlZ2FyZGxlc3Mgb2YgcHJpdmlsZWdlcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwoga3N0YWNrX2RlcHRoX3RvX3ByaW50OiAoWDg2IG9ubHkpCiAKIENvbnRyb2xzIHRoZSBudW1iZXIgb2Ygd29yZHMgdG8gcHJpbnQgd2hlbiBkdW1waW5nIHRoZSByYXcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGltZXJzL3RpbWVyX3N0YXRzLnR4dCBiL0RvY3VtZW50YXRpb24vdGltZXJzL3RpbWVyX3N0YXRzLnR4dAppbmRleCA5YmQwMGZjLi44YWJkNDBiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RpbWVycy90aW1lcl9zdGF0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90aW1lcnMvdGltZXJfc3RhdHMudHh0CkBAIC0xOSw3ICsxOSw3IEBACiAKIC0gdGhlIHBpZCBvZiB0aGUgdGFzayhwcm9jZXNzKSB3aGljaCBpbml0aWFsaXplZCB0aGUgdGltZXIKIC0gdGhlIG5hbWUgb2YgdGhlIHByb2Nlc3Mgd2hpY2ggaW5pdGlhbGl6ZWQgdGhlIHRpbWVyCi0tIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgdGltZXIgd2FzIGludGlhbGl6ZWQKKy0gdGhlIGZ1bmN0aW9uIHdoZXJlIHRoZSB0aW1lciB3YXMgaW5pdGlhbGl6ZWQKIC0gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGlzIGFzc29jaWF0ZWQgdG8gdGhlIHRpbWVyCiAtIHRoZSBudW1iZXIgb2YgZXZlbnRzIChjYWxsYmFja3MpCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dAppbmRleCAwOWJkOGU5Li5iNTEwNTY0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMudHh0CkBAIC0xMjUsNyArMTI1LDcgQEAKIEZvciBleGFtcGxlLCBoZXJlJ3MgdGhlIGluZm9ybWF0aW9uIGRpc3BsYXllZCBmb3IgdGhlICdzY2hlZF93YWtldXAnCiBldmVudDoKIAotIyBjYXQgL2RlYnVnL3RyYWNpbmcvZXZlbnRzL3NjaGVkL3NjaGVkX3dha2V1cC9mb3JtYXQKKyMgY2F0IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL3NjaGVkL3NjaGVkX3dha2V1cC9mb3JtYXQKIAogbmFtZTogc2NoZWRfd2FrZXVwCiBJRDogNjAKQEAgLTIwMSwxOSArMjAxLDE5IEBACiAKIEZvciBleGFtcGxlOgogCi0jIGNkIC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9zY2hlZC9zY2hlZF93YWtldXAKKyMgY2QgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvc2NoZWQvc2NoZWRfd2FrZXVwCiAjIGVjaG8gImNvbW1vbl9wcmVlbXB0X2NvdW50ID4gNCIgPiBmaWx0ZXIKIAogQSBzbGlnaHRseSBtb3JlIGludm9sdmVkIGV4YW1wbGU6CiAKLSMgY2QgL2RlYnVnL3RyYWNpbmcvZXZlbnRzL3NjaGVkL3NjaGVkX3NpZ25hbF9zZW5kCisjIGNkIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL3NpZ25hbC9zaWduYWxfZ2VuZXJhdGUKICMgZWNobyAiKChzaWcgPj0gMTAgJiYgc2lnIDwgMTUpIHx8IHNpZyA9PSAxNykgJiYgY29tbSAhPSBiYXNoIiA+IGZpbHRlcgogCiBJZiB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgZXhwcmVzc2lvbiwgeW91J2xsIGdldCBhbiAnSW52YWxpZAogYXJndW1lbnQnIGVycm9yIHdoZW4gc2V0dGluZyBpdCwgYW5kIHRoZSBlcnJvbmVvdXMgc3RyaW5nIGFsb25nIHdpdGgKIGFuIGVycm9yIG1lc3NhZ2UgY2FuIGJlIHNlZW4gYnkgbG9va2luZyBhdCB0aGUgZmlsdGVyIGUuZy46CiAKLSMgY2QgL2RlYnVnL3RyYWNpbmcvZXZlbnRzL3NjaGVkL3NjaGVkX3NpZ25hbF9zZW5kCisjIGNkIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL3NpZ25hbC9zaWduYWxfZ2VuZXJhdGUKICMgZWNobyAiKChzaWcgPj0gMTAgJiYgc2lnIDwgMTUpIHx8IGRzaWcgPT0gMTcpICYmIGNvbW0gIT0gYmFzaCIgPiBmaWx0ZXIKIC1iYXNoOiBlY2hvOiB3cml0ZSBlcnJvcjogSW52YWxpZCBhcmd1bWVudAogIyBjYXQgZmlsdGVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3cxL3NsYXZlcy8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vdzEvc2xhdmVzLzAwLUlOREVYCmluZGV4IGY4MTAxZDYuLjc1NjEzYzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdzEvc2xhdmVzLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vdzEvc2xhdmVzLzAwLUlOREVYCkBAIC0yLDMgKzIsNSBAQAogCS0gVGhpcyBmaWxlCiB3MV90aGVybQogCS0gVGhlIE1heGltL0RhbGxhcyBTZW1pY29uZHVjdG9yIGRzMTgqMjAgdGVtcGVyYXR1cmUgc2Vuc29yLgordzFfZHMyNDIzCisJLSBUaGUgTWF4aW0vRGFsbGFzIFNlbWljb25kdWN0b3IgZHMyNDIzIGNvdW50ZXIgZGV2aWNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvdzFfZHMyNDIzIGIvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvdzFfZHMyNDIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYTY1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3cxL3NsYXZlcy93MV9kczI0MjMKQEAgLTAsMCArMSw0NyBAQAorS2VybmVsIGRyaXZlciB3MV9kczI0MjMKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBNYXhpbSBEUzI0MjMgYmFzZWQgY291bnRlciBkZXZpY2VzLgorCitzdXBwb3J0ZWQgZmFtaWx5IGNvZGVzOgorCVcxX1RIRVJNX0RTMjQyMwkweDFECisKK0F1dGhvcjogTWlrYSBMYWl0aW8gPGxhbWlrckBwaWxwcGEub3JnPgorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworU3VwcG9ydCBpcyBwcm92aWRlZCB0aHJvdWdoIHRoZSBzeXNmcyB3MV9zbGF2ZSBmaWxlLiBFYWNoIG9wZW5pbmcgYW5kCityZWFkIHNlcXVlbmNlIG9mIHcxX3NsYXZlIGZpbGUgaW5pdGlhdGVzIHRoZSByZWFkIG9mIGNvdW50ZXJzIGFuZCByYW0KK2F2YWlsYWJsZSBpbiBEUzI0MjMgcGFnZXMgMTIgLSAxNS4KKworUmVzdWx0IG9mIGVhY2ggcGFnZSBpcyBwcm92aWRlZCBhcyBhbiBBU0NJSSBvdXRwdXQgd2hlcmUgZWFjaCBjb3VudGVyCit2YWx1ZSBhbmQgYXNzb2NpYXRlZCByYW0gYnVmZmVyIGlzIG91dHBwdXRlZCB0byBvd24gbGluZS4KKworRWFjaCBsaW5lcyB3aWxsIGNvbnRhaW4gdGhlIHZhbHVlcyBvZiA0MiBieXRlcyByZWFkIGZyb20gdGhlIGNvdW50ZXIgYW5kCittZW1vcnkgcGFnZSBhbG9uZyB0aGUgY3JjPVlFUyBvciBOTyBmb3IgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZWFkIG9wZXJhdGlvbgord2FzIHN1Y2Nlc3NmdWxsIGFuZCBDUkMgbWF0Y2hlZC4KK0lmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWxsLCB0aGVyZSBpcyBhbHNvIGluIHRoZSBlbmQgb2YgZWFjaCBsaW5lCithIGNvdW50ZXIgdmFsdWUgZXhwcmVzc2VkIGFzIGFuIGludGVnZXIgYWZ0ZXIgYz0KKworTWVhbmluZyBvZiA0MiBieXRlcyByZXByZXNlbnRlZCBpcyBmb2xsb3dpbmc6CisgLSAxIGJ5dGUgZnJvbSByYW0gcGFnZQorIC0gNCBieXRlcyBmb3IgdGhlIGNvdW50ZXIgdmFsdWUKKyAtIDQgemVybyBieXRlcworIC0gMiBieXRlcyBmb3IgY3JjMTYgd2hpY2ggd2FzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZGF0YSByZWFkIHNpbmNlIHRoZSBwcmV2aW91cyBjcmMgYnl0ZXMKKyAtIDMxIHJlbWFpbmluZyBieXRlcyBmcm9tIHRoZSByYW0gcGFnZQorIC0gY3JjPVlFUy9OTyBpbmRpY2F0aW5nIHdoZXRoZXIgcmVhZCB3YXMgb2sgYW5kIGNyYyBtYXRjaGVkCisgLSBjPTxpbnQ+IGN1cnJlbnQgY291bnRlciB2YWx1ZQorCitleGFtcGxlIGZyb20gdGhlIHN1Y2Nlc3NmdWxsIHJlYWQ6CiswMCAwMiAwMCAwMCAwMCAwMCAwMCAwMCAwMCA2ZCAzOCAwMCBmZiBmZiAwMCAwMCBmZSBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiBjcmM9WUVTIGM9MgorMDAgMDIgMDAgMDAgMDAgMDAgMDAgMDAgMDAgZTAgMWYgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgY3JjPVlFUyBjPTIKKzAwIDI5IGM2IDVkIDE4IDAwIDAwIDAwIDAwIDA0IDM3IDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIGNyYz1ZRVMgYz00MDg3OTg3NjEKKzAwIDA1IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDhkIDM5IGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGNyYz1ZRVMgYz01CisKK2V4YW1wbGUgZnJvbSB0aGUgcmVhZCB3aXRoIGNyYyBlcnJvcnM6CiswMCAwMiAwMCAwMCAwMCAwMCAwMCAwMCAwMCA2ZCAzOCAwMCBmZiBmZiAwMCAwMCBmZSBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiBjcmM9WUVTIGM9MgorMDAgMDIgMDAgMDAgMjIgMDAgMDAgMDAgMDAgZTAgMWYgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgY3JjPU5PCiswMCBlMSA2MSA1ZCAxOSAwMCAwMCAwMCAwMCBkZiAwYiAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiBjcmM9Tk8KKzAwIDA1IDAwIDAwIDIwIDAwIDAwIDAwIDAwIDhkIDM5IGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGNyYz1OTwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODYvYm9vdC50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Ni9ib290LnR4dAppbmRleCBiZGViODFjLi45YjcyMjFhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3g4Ni9ib290LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Ni9ib290LnR4dApAQCAtNjIyLDkgKzYyMiw5IEBACiAgIFRoZSBwYXlsb2FkIG1heSBiZSBjb21wcmVzc2VkLiBUaGUgZm9ybWF0IG9mIGJvdGggdGhlIGNvbXByZXNzZWQgYW5kCiAgIHVuY29tcHJlc3NlZCBkYXRhIHNob3VsZCBiZSBkZXRlcm1pbmVkIHVzaW5nIHRoZSBzdGFuZGFyZCBtYWdpYwogICBudW1iZXJzLiAgVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgY29tcHJlc3Npb24gZm9ybWF0cyBhcmUgZ3ppcAotICAobWFnaWMgbnVtYmVycyAxRiA4QiBvciAxRiA5RSksIGJ6aXAyIChtYWdpYyBudW1iZXIgNDIgNUEpIGFuZCBMWk1BCi0gIChtYWdpYyBudW1iZXIgNUQgMDApLiAgVGhlIHVuY29tcHJlc3NlZCBwYXlsb2FkIGlzIGN1cnJlbnRseSBhbHdheXMgRUxGCi0gIChtYWdpYyBudW1iZXIgN0YgNDUgNEMgNDYpLgorICAobWFnaWMgbnVtYmVycyAxRiA4QiBvciAxRiA5RSksIGJ6aXAyIChtYWdpYyBudW1iZXIgNDIgNUEpLCBMWk1BCisgIChtYWdpYyBudW1iZXIgNUQgMDApLCBhbmQgWFogKG1hZ2ljIG51bWJlciBGRCAzNykuICBUaGUgdW5jb21wcmVzc2VkCisgIHBheWxvYWQgaXMgY3VycmVudGx5IGFsd2F5cyBFTEYgKG1hZ2ljIG51bWJlciA3RiA0NSA0QyA0NikuCiAgIAogRmllbGQgbmFtZToJcGF5bG9hZF9sZW5ndGgKIFR5cGU6CQlyZWFkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3h6LnR4dCBiL0RvY3VtZW50YXRpb24veHoudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZjNlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3h6LnR4dApAQCAtMCwwICsxLDEyMSBAQAorCitYWiBkYXRhIGNvbXByZXNzaW9uIGluIExpbnV4Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ludHJvZHVjdGlvbgorCisgICAgWFogaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBmb3JtYXQgd2l0aCBoaWdoIGNvbXByZXNzaW9uCisgICAgcmF0aW8gYW5kIHJlbGF0aXZlbHkgZmFzdCBkZWNvbXByZXNzaW9uLiBUaGUgcHJpbWFyeSBjb21wcmVzc2lvbgorICAgIGFsZ29yaXRobSAoZmlsdGVyKSBpcyBMWk1BMi4gQWRkaXRpb25hbCBmaWx0ZXJzIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUKKyAgICBjb21wcmVzc2lvbiByYXRpbyBldmVuIGZ1cnRoZXIuIEUuZy4gQnJhbmNoL0NhbGwvSnVtcCAoQkNKKSBmaWx0ZXJzCisgICAgaW1wcm92ZSBjb21wcmVzc2lvbiByYXRpbyBvZiBleGVjdXRhYmxlIGRhdGEuCisKKyAgICBUaGUgWFogZGVjb21wcmVzc29yIGluIExpbnV4IGlzIGNhbGxlZCBYWiBFbWJlZGRlZC4gSXQgc3VwcG9ydHMKKyAgICB0aGUgTFpNQTIgZmlsdGVyIGFuZCBvcHRpb25hbGx5IGFsc28gQkNKIGZpbHRlcnMuIENSQzMyIGlzIHN1cHBvcnRlZAorICAgIGZvciBpbnRlZ3JpdHkgY2hlY2tpbmcuIFRoZSBob21lIHBhZ2Ugb2YgWFogRW1iZWRkZWQgaXMgYXQKKyAgICA8aHR0cDovL3R1a2Fhbmkub3JnL3h6L2VtYmVkZGVkLmh0bWw+LCB3aGVyZSB5b3UgY2FuIGZpbmQgdGhlCisgICAgbGF0ZXN0IHZlcnNpb24gYW5kIGFsc28gaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGNvZGUgb3V0c2lkZQorICAgIHRoZSBMaW51eCBrZXJuZWwuCisKKyAgICBGb3IgdXNlcnNwYWNlLCBYWiBVdGlscyBwcm92aWRlIGEgemxpYi1saWtlIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAgICBhbmQgYSBnemlwLWxpa2UgY29tbWFuZCBsaW5lIHRvb2wuIFhaIFV0aWxzIGNhbiBiZSBkb3dubG9hZGVkIGZyb20KKyAgICA8aHR0cDovL3R1a2Fhbmkub3JnL3h6Lz4uCisKK1haIHJlbGF0ZWQgY29tcG9uZW50cyBpbiB0aGUga2VybmVsCisKKyAgICBUaGUgeHpfZGVjIG1vZHVsZSBwcm92aWRlcyBYWiBkZWNvbXByZXNzb3Igd2l0aCBzaW5nbGUtY2FsbCAoYnVmZmVyCisgICAgdG8gYnVmZmVyKSBhbmQgbXVsdGktY2FsbCAoc3RhdGVmdWwpIEFQSXMuIFRoZSB1c2FnZSBvZiB0aGUgeHpfZGVjCisgICAgbW9kdWxlIGlzIGRvY3VtZW50ZWQgaW4gaW5jbHVkZS9saW51eC94ei5oLgorCisgICAgVGhlIHh6X2RlY190ZXN0IG1vZHVsZSBpcyBmb3IgdGVzdGluZyB4el9kZWMuIHh6X2RlY190ZXN0IGlzIG5vdAorICAgIHVzZWZ1bCB1bmxlc3MgeW91IGFyZSBoYWNraW5nIHRoZSBYWiBkZWNvbXByZXNzb3IuIHh6X2RlY190ZXN0CisgICAgYWxsb2NhdGVzIGEgY2hhciBkZXZpY2UgbWFqb3IgZHluYW1pY2FsbHkgdG8gd2hpY2ggb25lIGNhbiB3cml0ZQorICAgIC54eiBmaWxlcyBmcm9tIHVzZXJzcGFjZS4gVGhlIGRlY29tcHJlc3NlZCBvdXRwdXQgaXMgdGhyb3duIGF3YXkuCisgICAgS2VlcCBhbiBleWUgb24gZG1lc2cgdG8gc2VlIGRpYWdub3N0aWNzIHByaW50ZWQgYnkgeHpfZGVjX3Rlc3QuCisgICAgU2VlIHRoZSB4el9kZWNfdGVzdCBzb3VyY2UgY29kZSBmb3IgdGhlIGRldGFpbHMuCisKKyAgICBGb3IgZGVjb21wcmVzc2luZyB0aGUga2VybmVsIGltYWdlLCBpbml0cmFtZnMsIGFuZCBpbml0cmQsIHRoZXJlCisgICAgaXMgYSB3cmFwcGVyIGZ1bmN0aW9uIGluIGxpYi9kZWNvbXByZXNzX3VueHouYy4gSXRzIEFQSSBpcyB0aGUKKyAgICBzYW1lIGFzIGluIG90aGVyIGRlY29tcHJlc3NfKi5jIGZpbGVzLCB3aGljaCBpcyBkZWZpbmVkIGluCisgICAgaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL2dlbmVyaWMuaC4KKworICAgIHNjcmlwdHMveHpfd3JhcC5zaCBpcyBhIHdyYXBwZXIgZm9yIHRoZSB4eiBjb21tYW5kIGxpbmUgdG9vbCBmb3VuZAorICAgIGZyb20gWFogVXRpbHMuIFRoZSB3cmFwcGVyIHNldHMgY29tcHJlc3Npb24gb3B0aW9ucyB0byB2YWx1ZXMgc3VpdGFibGUKKyAgICBmb3IgY29tcHJlc3NpbmcgdGhlIGtlcm5lbCBpbWFnZS4KKworICAgIEZvciBrZXJuZWwgbWFrZWZpbGVzLCB0d28gY29tbWFuZHMgYXJlIHByb3ZpZGVkIGZvciB1c2Ugd2l0aAorICAgICQoY2FsbCBpZl9uZWVkZWQpLiBUaGUga2VybmVsIGltYWdlIHNob3VsZCBiZSBjb21wcmVzc2VkIHdpdGgKKyAgICAkKGNhbGwgaWZfbmVlZGVkLHh6a2Vybikgd2hpY2ggd2lsbCB1c2UgYSBCQ0ogZmlsdGVyIGFuZCBhIGJpZyBMWk1BMgorICAgIGRpY3Rpb25hcnkuIEl0IHdpbGwgYWxzbyBhcHBlbmQgYSBmb3VyLWJ5dGUgdHJhaWxlciBjb250YWluaW5nIHRoZQorICAgIHVuY29tcHJlc3NlZCBzaXplIG9mIHRoZSBmaWxlLCB3aGljaCBpcyBuZWVkZWQgYnkgdGhlIGJvb3QgY29kZS4KKyAgICBPdGhlciB0aGluZ3Mgc2hvdWxkIGJlIGNvbXByZXNzZWQgd2l0aCAkKGNhbGwgaWZfbmVlZGVkLHh6bWlzYykKKyAgICB3aGljaCB3aWxsIHVzZSBubyBCQ0ogZmlsdGVyIGFuZCAxIE1pQiBMWk1BMiBkaWN0aW9uYXJ5LgorCitOb3RlcyBvbiBjb21wcmVzc2lvbiBvcHRpb25zCisKKyAgICBTaW5jZSB0aGUgWFogRW1iZWRkZWQgc3VwcG9ydHMgb25seSBzdHJlYW1zIHdpdGggbm8gaW50ZWdyaXR5IGNoZWNrIG9yCisgICAgQ1JDMzIsIG1ha2Ugc3VyZSB0aGF0IHlvdSBkb24ndCB1c2Ugc29tZSBvdGhlciBpbnRlZ3JpdHkgY2hlY2sgdHlwZQorICAgIHdoZW4gZW5jb2RpbmcgZmlsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgZGVjb2RlZCBieSB0aGUga2VybmVsLiBXaXRoCisgICAgbGlibHptYSwgeW91IG5lZWQgdG8gdXNlIGVpdGhlciBMWk1BX0NIRUNLX05PTkUgb3IgTFpNQV9DSEVDS19DUkMzMgorICAgIHdoZW4gZW5jb2RpbmcuIFdpdGggdGhlIHh6IGNvbW1hbmQgbGluZSB0b29sLCB1c2UgLS1jaGVjaz1ub25lIG9yCisgICAgLS1jaGVjaz1jcmMzMi4KKworICAgIFVzaW5nIENSQzMyIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHVubGVzcyB0aGVyZSBpcyBzb21lIG90aGVyIGxheWVyCisgICAgd2hpY2ggd2lsbCB2ZXJpZnkgdGhlIGludGVncml0eSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgYW55d2F5LgorICAgIERvdWJsZSBjaGVja2luZyB0aGUgaW50ZWdyaXR5IHdvdWxkIHByb2JhYmx5IGJlIHdhc3RlIG9mIENQVSBjeWNsZXMuCisgICAgTm90ZSB0aGF0IHRoZSBoZWFkZXJzIHdpbGwgYWx3YXlzIGhhdmUgYSBDUkMzMiB3aGljaCB3aWxsIGJlIHZhbGlkYXRlZAorICAgIGJ5IHRoZSBkZWNvZGVyOyB5b3UgY2FuIG9ubHkgY2hhbmdlIHRoZSBpbnRlZ3JpdHkgY2hlY2sgdHlwZSAob3IKKyAgICBkaXNhYmxlIGl0KSBmb3IgdGhlIGFjdHVhbCB1bmNvbXByZXNzZWQgZGF0YS4KKworICAgIEluIHVzZXJzcGFjZSwgTFpNQTIgaXMgdHlwaWNhbGx5IHVzZWQgd2l0aCBkaWN0aW9uYXJ5IHNpemVzIG9mIHNldmVyYWwKKyAgICBtZWdhYnl0ZXMuIFRoZSBkZWNvZGVyIG5lZWRzIHRvIGhhdmUgdGhlIGRpY3Rpb25hcnkgaW4gUkFNLCB0aHVzIGJpZworICAgIGRpY3Rpb25hcmllcyBjYW5ub3QgYmUgdXNlZCBmb3IgZmlsZXMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgZGVjb2RlZAorICAgIGJ5IHRoZSBrZXJuZWwuIDEgTWlCIGlzIHByb2JhYmx5IHRoZSBtYXhpbXVtIHJlYXNvbmFibGUgZGljdGlvbmFyeQorICAgIHNpemUgZm9yIGluLWtlcm5lbCB1c2UgKG1heWJlIG1vcmUgaXMgT0sgZm9yIGluaXRyYW1mcykuIFRoZSBwcmVzZXRzCisgICAgaW4gWFogVXRpbHMgbWF5IG5vdCBiZSBvcHRpbWFsIHdoZW4gY3JlYXRpbmcgZmlsZXMgZm9yIHRoZSBrZXJuZWwsCisgICAgc28gZG9uJ3QgaGVzaXRhdGUgdG8gdXNlIGN1c3RvbSBzZXR0aW5ncy4gRXhhbXBsZToKKworICAgICAgICB4eiAtLWNoZWNrPWNyYzMyIC0tbHptYTI9ZGljdD01MTJLaUIgaW5wdXRmaWxlCisKKyAgICBBbiBleGNlcHRpb24gdG8gYWJvdmUgZGljdGlvbmFyeSBzaXplIGxpbWl0YXRpb24gaXMgd2hlbiB0aGUgZGVjb2RlcgorICAgIGlzIHVzZWQgaW4gc2luZ2xlLWNhbGwgbW9kZS4gRGVjb21wcmVzc2luZyB0aGUga2VybmVsIGl0c2VsZiBpcyBhbgorICAgIGV4YW1wbGUgb2YgdGhpcyBzaXR1YXRpb24uIEluIHNpbmdsZS1jYWxsIG1vZGUsIHRoZSBtZW1vcnkgdXNhZ2UKKyAgICBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgZGljdGlvbmFyeSBzaXplLCBhbmQgaXQgaXMgcGVyZmVjdGx5IGZpbmUgdG8KKyAgICB1c2UgYSBiaWcgZGljdGlvbmFyeTogZm9yIG1heGltdW0gY29tcHJlc3Npb24sIHRoZSBkaWN0aW9uYXJ5IHNob3VsZAorICAgIGJlIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgdW5jb21wcmVzc2VkIGRhdGEgaXRzZWxmLgorCitGdXR1cmUgcGxhbnMKKworICAgIENyZWF0aW5nIGEgbGltaXRlZCBYWiBlbmNvZGVyIG1heSBiZSBjb25zaWRlcmVkIGlmIHBlb3BsZSB0aGluayBpdCBpcworICAgIHVzZWZ1bC4gTFpNQTIgaXMgc2xvd2VyIHRvIGNvbXByZXNzIHRoYW4gZS5nLiBEZWZsYXRlIG9yIExaTyBldmVuIGF0CisgICAgdGhlIGZhc3Rlc3Qgc2V0dGluZ3MsIHNvIGl0IGlzbid0IGNsZWFyIGlmIExaTUEyIGVuY29kZXIgaXMgd2FudGVkCisgICAgaW50byB0aGUga2VybmVsLgorCisgICAgU3VwcG9ydCBmb3IgbGltaXRlZCByYW5kb20tYWNjZXNzIHJlYWRpbmcgaXMgcGxhbm5lZCBmb3IgdGhlCisgICAgZGVjb21wcmVzc2lvbiBjb2RlLiBJIGRvbid0IGtub3cgaWYgaXQgY291bGQgaGF2ZSBhbnkgdXNlIGluIHRoZQorICAgIGtlcm5lbCwgYnV0IEkga25vdyB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCBpbiBzb21lIGVtYmVkZGVkIHByb2plY3RzCisgICAgb3V0c2lkZSB0aGUgTGludXgga2VybmVsLgorCitDb25mb3JtYW5jZSB0byB0aGUgLnh6IGZpbGUgZm9ybWF0IHNwZWNpZmljYXRpb24KKworICAgIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBjb3JuZXIgY2FzZXMgd2hlcmUgdGhpbmdzIGhhdmUgYmVlbiBzaW1wbGlmaWVkCisgICAgYXQgZXhwZW5zZSBvZiBkZXRlY3RpbmcgZXJyb3JzIGFzIGVhcmx5IGFzIHBvc3NpYmxlLiBUaGVzZSBzaG91bGQgbm90CisgICAgbWF0dGVyIGluIHByYWN0aWNlIGFsbCwgc2luY2UgdGhleSBkb24ndCBjYXVzZSBzZWN1cml0eSBpc3N1ZXMuIEJ1dAorICAgIGl0IGlzIGdvb2QgdG8ga25vdyB0aGlzIGlmIHRlc3RpbmcgdGhlIGNvZGUgZS5nLiB3aXRoIHRoZSB0ZXN0IGZpbGVzCisgICAgZnJvbSBYWiBVdGlscy4KKworUmVwb3J0aW5nIGJ1Z3MKKworICAgIEJlZm9yZSByZXBvcnRpbmcgYSBidWcsIHBsZWFzZSBjaGVjayB0aGF0IGl0J3Mgbm90IGZpeGVkIGFscmVhZHkKKyAgICBhdCB1cHN0cmVhbS4gU2VlIDxodHRwOi8vdHVrYWFuaS5vcmcveHovZW1iZWRkZWQuaHRtbD4gdG8gZ2V0IHRoZQorICAgIGxhdGVzdCBjb2RlLgorCisgICAgUmVwb3J0IGJ1Z3MgdG8gPGxhc3NlLmNvbGxpbkB0dWthYW5pLm9yZz4gb3IgdmlzaXQgI3R1a2Fhbmkgb24KKyAgICBGcmVlbm9kZSBhbmQgdGFsayB0byBMYXJoenUuIEkgZG9uJ3QgYWN0aXZlbHkgcmVhZCBMS01MIG9yIG90aGVyCisgICAga2VybmVsLXJlbGF0ZWQgbWFpbGluZyBsaXN0cywgc28gaWYgdGhlcmUncyBzb21ldGhpbmcgSSBzaG91bGQga25vdywKKyAgICB5b3Ugc2hvdWxkIGVtYWlsIHRvIG1lIHBlcnNvbmFsbHkgb3IgdXNlIElSQy4KKworICAgIERvbid0IGJvdGhlciBJZ29yIFBhdmxvdiB3aXRoIHF1ZXN0aW9ucyBhYm91dCB0aGUgWFogaW1wbGVtZW50YXRpb24KKyAgICBpbiB0aGUga2VybmVsIG9yIGFib3V0IFhaIFV0aWxzLiBXaGlsZSB0aGVzZSB0d28gaW1wbGVtZW50YXRpb25zCisgICAgaW5jbHVkZSBlc3NlbnRpYWwgY29kZSB0aGF0IGlzIGRpcmVjdGx5IGJhc2VkIG9uIElnb3IgUGF2bG92J3MgY29kZSwKKyAgICB0aGVzZSBpbXBsZW1lbnRhdGlvbnMgYXJlbid0IG1haW50YWluZWQgbm9yIHN1cHBvcnRlZCBieSBoaW0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3poX0NOL0hPV1RPIGIvRG9jdW1lbnRhdGlvbi96aF9DTi9IT1dUTwppbmRleCA2OTE2MDc3Li5mYWY5NzZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3poX0NOL0hPV1RPCisrKyBiL0RvY3VtZW50YXRpb24vemhfQ04vSE9XVE8KQEAgLTM0Nyw4ICszNDcsOCBAQAog5pyA5pawYnVn55qE6YCa55+l77yM5Y+v5Lul6K6i6ZiFYnVnbWUtbmV36YKu5Lu25YiX6KGo77yI5Y+q5pyJ5paw55qEYnVn5oql5ZGK5Lya6KKr5a+E5Yiw6L+Z6YeM77yJCiDmiJbogIXorqLpmIVidWdtZS1qYW5pdG9y6YKu5Lu25YiX6KGo77yI5omA5pyJYnVnemlsbGHnmoTlj5jliqjpg73kvJrooqvlr4TliLDov5nph4zvvInjgIIKIAotCWh0dHA6Ly9saXN0cy5vc2RsLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2J1Z21lLW5ldwotCWh0dHA6Ly9saXN0cy5vc2RsLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2J1Z21lLWphbml0b3JzCisJaHR0cHM6Ly9saXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2J1Z21lLW5ldworCWh0dHBzOi8vbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9idWdtZS1qYW5pdG9ycwogCiAKIOmCruS7tuWIl+ihqApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi96aF9DTi9TdWJtaXR0aW5nRHJpdmVycyBiL0RvY3VtZW50YXRpb24vemhfQ04vU3VibWl0dGluZ0RyaXZlcnMKaW5kZXggYzI3YjBmNi4uNTg4OWY4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi96aF9DTi9TdWJtaXR0aW5nRHJpdmVycworKysgYi9Eb2N1bWVudGF0aW9uL3poX0NOL1N1Ym1pdHRpbmdEcml2ZXJzCkBAIC02MSw3ICs2MSw3IEBACiBMaW51eCAyLjY6CiAJ6Zmk5LqG6YG15b6q5ZKMIDIuNCDniYjlhoXmoLjlkIzmoLfnmoTop4TliJnlpJbvvIzkvaDov5jpnIDopoHlnKggbGludXgta2VybmVsIOmCruS7tgogCeWIl+ihqOS4iui3n+i4quacgOaWsOeahCBBUEkg5Y+Y5YyW44CC5ZCRIExpbnV4IDIuNiDlhoXmoLjmj5DkuqTpqbHliqjnmoTpobbnuqfogZTns7vkuroKLQnmmK8gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz7jgIIKKwnmmK8gQW5kcmV3IE1vcnRvbiA8YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZz7jgIIKIAog5Yaz5a6a6K6+5aSH6amx5Yqo6IO95ZCm6KKr5o6l5Y+X55qE5p2h5Lu2CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGFjYTEwMmYuLjNkZDVjNmYgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0yODUsNiArMjg1LDQxIEBACiBTOglNYWludGFpbmVkCiBGOglzb3VuZC9wY2kvYWQxODg5LioKIAorQUQ1MjVYIEFOQUxPRyBERVZJQ0VTIERJR0lUQUwgUE9URU5USU9NRVRFUlMgRFJJVkVSCitNOglNaWNoYWVsIEhlbm5lcmljaCA8bWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbT4KK0w6CWRldmljZS1kcml2ZXItZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKK1c6CWh0dHA6Ly93aWtpLWFuYWxvZy5jb20vQUQ1MjU0CitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvbWlzYy9hZDUyNXhfZHBvdC5jCisKK0FENTM5OCBDVVJSRU5UIFJFR1VMQVRPUiBEUklWRVIgKEFENTM5OC9BRDU4MjEpCitNOglNaWNoYWVsIEhlbm5lcmljaCA8bWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbT4KK0w6CWRldmljZS1kcml2ZXItZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKK1c6CWh0dHA6Ly93aWtpLWFuYWxvZy5jb20vQUQ1Mzk4CitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvcmVndWxhdG9yL2FkNTM5OC5jCisKK0FENzE0WCBDQVBBQ0lUQU5DRSBUT1VDSCBTRU5TT1IgRFJJVkVSIChBRDcxNDIvMy83LzgvN0EpCitNOglNaWNoYWVsIEhlbm5lcmljaCA8bWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbT4KK0w6CWRldmljZS1kcml2ZXItZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKK1c6CWh0dHA6Ly93aWtpLWFuYWxvZy5jb20vQUQ3MTQyCitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvaW5wdXQvbWlzYy9hZDcxNHguYworCitBRDc4NzcgVE9VQ0hTQ1JFRU4gRFJJVkVSCitNOglNaWNoYWVsIEhlbm5lcmljaCA8bWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbT4KK0w6CWRldmljZS1kcml2ZXItZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKK1c6CWh0dHA6Ly93aWtpLWFuYWxvZy5jb20vQUQ3ODc3CitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc3LmMKKworQUQ3ODc5IFRPVUNIU0NSRUVOIERSSVZFUiAoQUQ3ODc5L0FENzg4OSkKK006CU1pY2hhZWwgSGVubmVyaWNoIDxtaWNoYWVsLmhlbm5lcmljaEBhbmFsb2cuY29tPgorTDoJZGV2aWNlLWRyaXZlci1kZXZlbEBibGFja2Zpbi51Y2xpbnV4Lm9yZworVzoJaHR0cDovL3dpa2ktYW5hbG9nLmNvbS9BRDc4NzkKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzkuYworCiBBRE0xMDI1IEhBUkRXQVJFIE1PTklUT1IgRFJJVkVSCiBNOglKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KIEw6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKQEAgLTMwNCw2ICszMzksMzIgQEAKIFM6CU9ycGhhbgogRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS4qCiAKK0FEUDU1MjAgQkFDS0xJR0hUIERSSVZFUiBXSVRIIElPIEVYUEFOREVSIChBRFA1NTIwL0FEUDU1MDEpCitNOglNaWNoYWVsIEhlbm5lcmljaCA8bWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbT4KK0w6CWRldmljZS1kcml2ZXItZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKK1c6CWh0dHA6Ly93aWtpLWFuYWxvZy5jb20vQURQNTUyMAorUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL21mZC9hZHA1NTIwLmMKK0Y6CWRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDU1MjBfYmwuYworRjoJZHJpdmVycy9sZWQvbGVkcy1hZHA1NTIwLmMKK0Y6CWRyaXZlcnMvZ3Bpby9hZHA1NTIwLWdwaW8uYworRjoJZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hZHA1NTIwLWtleXMuYworCitBRFA1NTg4IFFXRVJUWSBLRVlQQUQgQU5EIElPIEVYUEFOREVSIERSSVZFUiAoQURQNTU4OC9BRFA1NTg3KQorTToJTWljaGFlbCBIZW5uZXJpY2ggPG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20+CitMOglkZXZpY2UtZHJpdmVyLWRldmVsQGJsYWNrZmluLnVjbGludXgub3JnCitXOglodHRwOi8vd2lraS1hbmFsb2cuY29tL0FEUDU1ODgKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hZHA1NTg4LWtleXMuYworRjoJZHJpdmVycy9ncGlvL2FkcDU1ODgtZ3Bpby5jCisKK0FEUDg4NjAgQkFDS0xJR0hUIERSSVZFUiAoQURQODg2MC9BRFA4ODYxL0FEUDg4NjMpCitNOglNaWNoYWVsIEhlbm5lcmljaCA8bWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbT4KK0w6CWRldmljZS1kcml2ZXItZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKK1c6CWh0dHA6Ly93aWtpLWFuYWxvZy5jb20vQURQODg2MAorUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA4ODYwX2JsLmMKKwogQURUNzQ2WCBGQU4gRFJJVkVSCiBNOglDb2xpbiBMZXJveSA8Y29saW5AY29saW5vLm5ldD4KIFM6CU1haW50YWluZWQKQEAgLTMxNiw2ICszNzcsMTMgQEAKIEY6CURvY3VtZW50YXRpb24vaHdtb24vYWR0NzQ3NQogRjoJZHJpdmVycy9od21vbi9hZHQ3NDc1LmMKIAorQURYTDM0WCBUSFJFRS1BWElTIERJR0lUQUwgQUNDRUxFUk9NRVRFUiBEUklWRVIgKEFEWEwzNDUvQURYTDM0NikKK006CU1pY2hhZWwgSGVubmVyaWNoIDxtaWNoYWVsLmhlbm5lcmljaEBhbmFsb2cuY29tPgorTDoJZGV2aWNlLWRyaXZlci1kZXZlbEBibGFja2Zpbi51Y2xpbnV4Lm9yZworVzoJaHR0cDovL3dpa2ktYW5hbG9nLmNvbS9BRFhMMzQ1CitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvaW5wdXQvbWlzYy9hZHhsMzR4LmMKKwogQURWQU5TWVMgU0NTSSBEUklWRVIKIE06CU1hdHRoZXcgV2lsY294IDxtYXR0aGV3QHdpbC5jeD4KIEw6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCkBAIC00MjgsNyArNDk2LDYgQEAKIEY6CWFyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfYW1kLmMKIAogQU1TIChBcHBsZSBNb3Rpb24gU2Vuc29yKSBEUklWRVIKLU06CVN0ZWxpYW4gUG9wIDxzdGVsaWFuQHBvcGllcy5uZXQ+CiBNOglNaWNoYWVsIEhhbnNlbG1hbm4gPGxpbnV4LWtlcm5lbEBoYW5zbWkuY2g+CiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvbWFjaW50b3NoL2Ftcy8KQEAgLTQ0MCwxNiArNTA3LDIyIEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvCiAKK0FOQUxPRyBERVZJQ0VTIElOQyBBU09DIENPREVDIERSSVZFUlMKK0w6CWRldmljZS1kcml2ZXItZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKK0w6CWFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitXOglodHRwOi8vd2lraS1hbmFsb2cuY29tLworUzoJU3VwcG9ydGVkCitGOglzb3VuZC9zb2MvY29kZWNzL2FkMSoKK0Y6CXNvdW5kL3NvYy9jb2RlY3MvYWRhdSoKK0Y6CXNvdW5kL3NvYy9jb2RlY3MvYWRhdioKK0Y6CXNvdW5kL3NvYy9jb2RlY3Mvc3NtKgorCiBBTkFMT0cgREVWSUNFUyBJTkMgQVNPQyBEUklWRVJTCiBMOgl1Y2xpbnV4LWRpc3QtZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKIEw6CWFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiBTOglTdXBwb3J0ZWQKIEY6CXNvdW5kL3NvYy9ibGFja2Zpbi8qCi1GOglzb3VuZC9zb2MvY29kZWNzL2FkMSoKLUY6CXNvdW5kL3NvYy9jb2RlY3MvYWRhdSoKLUY6CXNvdW5kL3NvYy9jb2RlY3MvYWRhdioKLUY6CXNvdW5kL3NvYy9jb2RlY3Mvc3NtKgogCiBBT0EgKEFwcGxlIE9uYm9hcmQgQXVkaW8pIEFMU0EgRFJJVkVSCiBNOglKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgpAQCAtMTQ1MCw2ICsxNTIzLDE0IEBACiBGOglibG9jay9ic2cuYwogRjoJaW5jbHVkZS9saW51eC9ic2cuaAogCitCVDg3WCBBVURJTyBEUklWRVIKK006CUNsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPgorTDoJYWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK1Q6CWdpdCBnaXQ6Ly9naXQuYWxzYS1wcm9qZWN0Lm9yZy9hbHNhLWtlcm5lbC5naXQKK1M6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vc291bmQvYWxzYS9CdDg3eC50eHQKK0Y6CXNvdW5kL3BjaS9idDg3eC5jCisKIEJUOFhYR1BJTyBEUklWRVIKIE06CU1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CiBXOglodHRwOi8vYnUzc2NoLmRlL2J0Z3Bpby5waHAKQEAgLTE0NzUsNiArMTU1NiwxMyBAQAogRjoJRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2LwogRjoJZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2KgogCitDLU1FRElBIENNSTg3ODggRFJJVkVSCitNOglDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KK0w6CWFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitUOglnaXQgZ2l0Oi8vZ2l0LmFsc2EtcHJvamVjdC5vcmcvYWxzYS1rZXJuZWwuZ2l0CitTOglNYWludGFpbmVkCitGOglzb3VuZC9wY2kvb3h5Z2VuLworCiBDQUNIRUZJTEVTOiBGUy1DQUNIRSBCQUNLRU5EIEZPUiBDQUNISU5HIE9OIE1PVU5URUQgRklMRVNZU1RFTVMKIE06CURhdmlkIEhvd2VsbHMgPGRob3dlbGxzQHJlZGhhdC5jb20+CiBMOglsaW51eC1jYWNoZWZzQHJlZGhhdC5jb20KQEAgLTE3MTEsNyArMTc5OSw4IEBACiBGOglkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKIAogQ09ORklHRlMKLU06CUpvZWwgQmVja2VyIDxqb2VsLmJlY2tlckBvcmFjbGUuY29tPgorTToJSm9lbCBCZWNrZXIgPGpsYmVjQGV2aWxwbGFuLm9yZz4KK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvamxiZWMvY29uZmlnZnMuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CWZzL2NvbmZpZ2ZzLwogRjoJaW5jbHVkZS9saW51eC9jb25maWdmcy5oCkBAIC0xOTMzLDcgKzIwMjIsNyBAQAogRENDUCBQUk9UT0NPTAogTToJQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGdob3N0cHJvdG9jb2xzLm5ldD4KIEw6CWRjY3BAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vbGludXgtbmV0Lm9zZGwub3JnL2luZGV4LnBocC9EQ0NQCitXOglodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2RjY3AKIFM6CU1haW50YWluZWQKIEY6CWluY2x1ZGUvbGludXgvZGNjcC5oCiBGOglpbmNsdWRlL2xpbnV4L3RmcmMuaApAQCAtMjI2NSw2ICsyMzU0LDEzIEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2VkYWMvcjgyNjAwX2VkYWMuYwogCitFRElST0wgVUEtMTAxL1VBLTEwMDAgRFJJVkVSCitNOglDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KK0w6CWFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitUOglnaXQgZ2l0Oi8vZ2l0LmFsc2EtcHJvamVjdC5vcmcvYWxzYS1rZXJuZWwuZ2l0CitTOglNYWludGFpbmVkCitGOglzb3VuZC91c2IvbWlzYy91YTEwMS5jCisKIEVFRVBDIExBUFRPUCBFWFRSQVMgRFJJVkVSCiBNOglDb3JlbnRpbiBDaGFyeSA8Y29yZW50aW5jakBpa3NhaWYubmV0PgogTDoJYWNwaTRhc3VzLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CkBAIC0yMzU1LDcgKzI0NTEsNyBAQAogTToJU3RlcGhlbiBIZW1taW5nZXIgPHNoZW1taW5nZXJAbGludXgtZm91bmRhdGlvbi5vcmc+CiBMOglicmlkZ2VAbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93d3cubGludXgtZm91bmRhdGlvbi5vcmcvZW4vTmV0OkJyaWRnZQorVzoJaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2VuL05ldDpCcmlkZ2UKIFM6CU1haW50YWluZWQKIEY6CWluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS8KIEY6CW5ldC9icmlkZ2UvCkBAIC0yNjE4LDYgKzI3MTQsMTQgQEAKIEY6CWRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZ3Bpby5jCiBGOglpbmNsdWRlL2xpbnV4L2kyYy1ncGlvLmgKIAorR0VORVJJQyBHUElPIEkyQyBNVUxUSVBMRVhFUiBEUklWRVIKK006CVBldGVyIEtvcnNnYWFyZCA8cGV0ZXIua29yc2dhYXJkQGJhcmNvLmNvbT4KK0w6CWxpbnV4LWkyY0B2Z2VyLmtlcm5lbC5vcmcKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9pMmMvbXV4ZXMvZ3Bpby1pMmNtdXguYworRjoJaW5jbHVkZS9saW51eC9ncGlvLWkyY211eC5oCitGOglEb2N1bWVudGF0aW9uL2kyYy9tdXhlcy9ncGlvLWkyY211eAorCiBHRU5FUklDIEhETEMgKFdBTikgRFJJVkVSUwogTToJS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KIFc6CWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2hkbGMvCkBAIC0zNDI1LDYgKzM1MjksMTMgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvc2VyaWFsL2pzbS8KIAorSzEwVEVNUCBIQVJEV0FSRSBNT05JVE9SSU5HIERSSVZFUgorTToJQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CitMOglsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCitTOglNYWludGFpbmVkCitGOglEb2N1bWVudGF0aW9uL2h3bW9uL2sxMHRlbXAKK0Y6CWRyaXZlcnMvaHdtb24vazEwdGVtcC5jCisKIEs4VEVNUCBIQVJEV0FSRSBNT05JVE9SSU5HIERSSVZFUgogTToJUnVkb2xmIE1hcmVrIDxyLm1hcmVrQGFzc2VtYmxlci5jej4KIEw6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKQEAgLTQwMTAsOSArNDEyMSw4IEBACiBGOglrZXJuZWwvbW9kdWxlLmMKIAogTU9USU9OIEVZRSBWQUlPIFBJQ1RVUkVCT09LIENBTUVSQSBEUklWRVIKLU06CVN0ZWxpYW4gUG9wIDxzdGVsaWFuQHBvcGllcy5uZXQ+CiBXOglodHRwOi8vcG9waWVzLm5ldC9tZXllLwotUzoJTWFpbnRhaW5lZAorUzoJT3JwaGFuCiBGOglEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L21leWUudHh0CiBGOglkcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuKgogRjoJaW5jbHVkZS9saW51eC9tZXllLmgKQEAgLTQzMDAsMTEgKzQ0MTAsMTEgQEAKIEY6CWRyaXZlcnMvc2NzaS9uc3AzMioKIAogTlRGUyBGSUxFU1lTVEVNCi1NOglBbnRvbiBBbHRhcGFybWFrb3YgPGFpYTIxQGNhbnRhYi5uZXQ+CitNOglBbnRvbiBBbHRhcGFybWFrb3YgPGFudG9uQHR1eGVyYS5jb20+CiBMOglsaW51eC1udGZzLWRldkBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLVc6CWh0dHA6Ly93d3cubGludXgtbnRmcy5vcmcvCitXOglodHRwOi8vd3d3LnR1eGVyYS5jb20vCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FpYTIxL250ZnMtMi42LmdpdAotUzoJTWFpbnRhaW5lZAorUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0CiBGOglmcy9udGZzLwogCkBAIC00NDU2LDYgKzQ1NjYsMTMgQEAKIEY6CWluY2x1ZGUvbGludXgvb2YqLmgKIEs6CW9mX2dldF9wcm9wZXJ0eQogCitPUEw0IERSSVZFUgorTToJQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CitMOglhbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorVDoJZ2l0IGdpdDovL2dpdC5hbHNhLXByb2plY3Qub3JnL2Fsc2Eta2VybmVsLmdpdAorUzoJTWFpbnRhaW5lZAorRjoJc291bmQvZHJpdmVycy9vcGw0LworCiBPUFJPRklMRQogTToJUm9iZXJ0IFJpY2h0ZXIgPHJvYmVydC5yaWNodGVyQGFtZC5jb20+CiBMOglvcHJvZmlsZS1saXN0QGxpc3RzLnNmLm5ldApAQCAtNDQ2Nyw3ICs0NTg0LDcgQEAKIAogT1JBQ0xFIENMVVNURVIgRklMRVNZU1RFTSAyIChPQ0ZTMikKIE06CU1hcmsgRmFzaGVoIDxtZmFzaGVoQHN1c2UuY29tPgotTToJSm9lbCBCZWNrZXIgPGpvZWwuYmVja2VyQG9yYWNsZS5jb20+CitNOglKb2VsIEJlY2tlciA8amxiZWNAZXZpbHBsYW4ub3JnPgogTDoJb2NmczItZGV2ZWxAb3NzLm9yYWNsZS5jb20gKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL29zcy5vcmFjbGUuY29tL3Byb2plY3RzL29jZnMyLwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qbGJlYy9vY2ZzMi5naXQKQEAgLTQ1NTIsNyArNDY2OSw3IEBACiBNOglDaHJpcyBXcmlnaHQgPGNocmlzd0Bzb3VzLXNvbC5vcmc+CiBNOglBbG9rIEthdGFyaWEgPGFrYXRhcmlhQHZtd2FyZS5jb20+CiBNOglSdXN0eSBSdXNzZWxsIDxydXN0eUBydXN0Y29ycC5jb20uYXU+Ci1MOgl2aXJ0dWFsaXphdGlvbkBsaXN0cy5vc2RsLm9yZworTDoJdmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKIFM6CVN1cHBvcnRlZAogRjoJRG9jdW1lbnRhdGlvbi9pYTY0L3BhcmF2aXJ0X29wcy50eHQKIEY6CWFyY2gvKi9rZXJuZWwvcGFyYXZpcnQqCkBAIC01MDUwLDExICs1MTY3LDYgQEAKIEY6CWtlcm5lbC9zcmN1KgogWDoJa2VybmVsL3JjdXRvcnR1cmUuYwogCi1SRUFMIFRJTUUgQ0xPQ0sgRFJJVkVSIChMRUdBQ1kpCi1NOglQYXVsIEdvcnRtYWtlciA8cF9nb3J0bWFrZXJAeWFob28uY29tPgotUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9jaGFyL3J0Yy5jCi0KIFJFQUwgVElNRSBDTE9DSyAoUlRDKSBTVUJTWVNURU0KIE06CUFsZXNzYW5kcm8gWnVtbW8gPGEuenVtbW9AdG93ZXJ0ZWNoLml0PgogTDoJcnRjLWxpbnV4QGdvb2dsZWdyb3Vwcy5jb20KQEAgLTUyMDcsNyArNTMxOSw3IEBACiBNOglKYXNzaSBCcmFyIDxqYXNzaS5icmFyQHNhbXN1bmcuY29tPgogTDoJYWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CVN1cHBvcnRlZAotRjoJc291bmQvc29jL3MzYzI0eHgKK0Y6CXNvdW5kL3NvYy9zYW1zdW5nCiAKIFRJTUVLRUVQSU5HLCBOVFAKIE06CUpvaG4gU3R1bHR6IDxqb2huc3R1bEB1cy5pYm0uY29tPgpAQCAtNjIxNSw2ICs2MzI3LDEzIEBACiBXOglodHRwOi8vd3d3Lm9uZS1leWVkLWFsaWVuLm5ldC9+bWRoYXJtL2xpbnV4LXVzYi8KIEY6CWRyaXZlcnMvdXNiL3N0b3JhZ2UvCiAKK1VTQiBNSURJIERSSVZFUgorTToJQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CitMOglhbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorVDoJZ2l0IGdpdDovL2dpdC5hbHNhLXByb2plY3Qub3JnL2Fsc2Eta2VybmVsLmdpdAorUzoJTWFpbnRhaW5lZAorRjoJc291bmQvdXNiL21pZGkuKgorCiBVU0IgT0hDSSBEUklWRVIKIE06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwpAQCAtNjQ1NCw3ICs2NTczLDcgQEAKIFZJUlRJTyBIT1NUIChWSE9TVCkKIE06CSJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4KIEw6CWt2bUB2Z2VyLmtlcm5lbC5vcmcKLUw6CXZpcnR1YWxpemF0aW9uQGxpc3RzLm9zZGwub3JnCitMOgl2aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy92aG9zdC8KQEAgLTY1MDQsNyArNjYyMyw3IEBACiAKIFZMWU5RIEJVUwogTToJRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KLUw6CW9wZW53cnQtZGV2ZWxAbGlzdHMub3BlbndydC5vcmcKK0w6CW9wZW53cnQtZGV2ZWxAbGlzdHMub3BlbndydC5vcmcgKHN1YnNjcmliZXJzLW9ubHkpCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3ZseW5xL3ZseW5xLmMKIEY6CWluY2x1ZGUvbGludXgvdmx5bnEuaApAQCAtNjcyNCw3ICs2ODQzLDcgQEAKIE06CUplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteS5maXR6aGFyZGluZ2VAY2l0cml4LmNvbT4KIE06CUtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KIEw6CXhlbi1kZXZlbEBsaXN0cy54ZW5zb3VyY2UuY29tIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKLUw6CXZpcnR1YWxpemF0aW9uQGxpc3RzLm9zZGwub3JnCitMOgl2aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwogUzoJU3VwcG9ydGVkCiBGOglhcmNoL3g4Ni94ZW4vCiBGOglkcml2ZXJzLyoveGVuLSpmcm9udC5jCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMgYi9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKaW5kZXggMGYxZDg0OS4uYzFmM2U3YyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYwpAQCAtNTA2LDcgKzUwNiw3IEBACiAJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLFJUQ19TRUNPTkRTKTsKIAkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsUlRDX01JTlVURVMpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJcHJpbnRrX29uY2UoS0VSTl9OT1RJQ0UKIAkJICAgICAgICJzZXRfcnRjX21tc3M6IGNhbid0IHVwZGF0ZSBmcm9tICVkIHRvICVkXG4iLAogCQkgICAgICAgY21vc19taW51dGVzLCByZWFsX21pbnV0ZXMpOwogIAkJcmV0dmFsID0gLTE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vaXQ4MTUyLmMgYi9hcmNoL2FybS9jb21tb24vaXQ4MTUyLmMKaW5kZXggNDJmZjkwYi4uNjY1ZWJmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2l0ODE1Mi5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9pdDgxNTIuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgbmVlZGVkIGZvciBETUEgYm91bmNpbmcuCi0gKiBJVEU4MTUyIGNoaXAgY2FuIGFkZHJlZXMgdXAgdG8gNjRNQnl0ZSwgc28gYWxsIHRoZSBkZXZpY2VzCisgKiBJVEU4MTUyIGNoaXAgY2FuIGFkZHJlc3MgdXAgdG8gNjRNQnl0ZSwgc28gYWxsIHRoZSBkZXZpY2VzCiAgKiBjb25uZWN0ZWQgdG8gSVRFODE1MiAoUENJIGFuZCBVU0IpIHNob3VsZCBoYXZlIGxpbWl0ZWQgRE1BIHdpbmRvdwogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi92aWMuYyBiL2FyY2gvYXJtL2NvbW1vbi92aWMuYwppbmRleCBiYTY1ZjZlLi5jYjY2MGJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vdmljLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCkBAIC03MCw3ICs3MCw3IEBACiAgKiB2aWNfaW5pdDIgLSBjb21tb24gaW5pdGlhbGlzYXRpb24gY29kZQogICogQGJhc2U6IEJhc2Ugb2YgdGhlIFZJQy4KICAqCi0gKiBDb21tb24gaW5pdGlhbGlzYXRpb24gY29kZSBmb3IgcmVnaXN0ZXJhdGlvbgorICogQ29tbW9uIGluaXRpYWxpc2F0aW9uIGNvZGUgZm9yIHJlZ2lzdHJhdGlvbgogICogYW5kIHJlc3VtZS4KICovCiBzdGF0aWMgdm9pZCB2aWNfaW5pdDIodm9pZCBfX2lvbWVtICpiYXNlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWVjYmF0OTEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lY2JhdDkxLmMKaW5kZXggN2I1OGM5NC4uZGUyZmQwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWVjYmF0OTEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWNiYXQ5MS5jCkBAIC0xMjgsMTcgKzEyOCwxNyBAQAogCQkucGxhdGZvcm1fZGF0YQk9ICZteV9mbGFzaDBfcGxhdGZvcm0sCiAjZW5kaWYKIAl9LAotCXsJLyogVXNlciBhY2Nlc3NhYmxlIHNwaSAtIGNzMSAoMjUwS0h6KSAqLworCXsJLyogVXNlciBhY2Nlc3NpYmxlIHNwaSAtIGNzMSAoMjUwS0h6KSAqLwogCQkubW9kYWxpYXMJPSAic3BpLWNzMSIsCiAJCS5jaGlwX3NlbGVjdAk9IDEsCiAJCS5tYXhfc3BlZWRfaHoJPSAyNTAgKiAxMDAwLAogCX0sCi0JewkvKiBVc2VyIGFjY2Vzc2FibGUgc3BpIC0gY3MyICgxTUh6KSAqLworCXsJLyogVXNlciBhY2Nlc3NpYmxlIHNwaSAtIGNzMiAoMU1IeikgKi8KIAkJLm1vZGFsaWFzCT0gInNwaS1jczIiLAogCQkuY2hpcF9zZWxlY3QJPSAyLAogCQkubWF4X3NwZWVkX2h6CT0gMSAqIDEwMDAgKiAxMDAwLAogCX0sCi0JewkvKiBVc2VyIGFjY2Vzc2FibGUgc3BpIC0gY3MzICgxME1IeikgKi8KKwl7CS8qIFVzZXIgYWNjZXNzaWJsZSBzcGkgLSBjczMgKDEwTUh6KSAqLwogCQkubW9kYWxpYXMJPSAic3BpLWNzMyIsCiAJCS5jaGlwX3NlbGVjdAk9IDMsCiAJCS5tYXhfc3BlZWRfaHoJPSAxMCAqIDEwMDAgKiAxMDAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYwppbmRleCBkYWZiYWNjLi5lYTUzZjRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYwpAQCAtMzAxLDcgKzMwMSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBhdDkxX3BtX29wcyA9eworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBhdDkxX3BtX29wcyA9IHsKIAkudmFsaWQJPSBhdDkxX3BtX3ZhbGlkX3N0YXRlLAogCS5iZWdpbgk9IGF0OTFfcG1fYmVnaW4sCiAJLmVudGVyCT0gYXQ5MV9wbV9lbnRlciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvY2hpcGMvY2hpcGNIdy5jIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9jaGlwY0h3LmMKaW5kZXggYjNhNjFkOC4uOTYyNzNmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9jaGlwY0h3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9jaGlwY0h3LmMKQEAgLTc1Nyw3ICs3NTcsNyBAQAogCQl0ID0gdCA8PCAxOwogCX0KIAotCS8qIEludGlhbGl6ZSB0aGUgcmVzdWx0ICovCisJLyogSW5pdGlhbGl6ZSB0aGUgcmVzdWx0ICovCiAJciA9IDA7CiAKIAlkbyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3LmMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3LmMKaW5kZXggN2I5YmFjMi4uNmI5YmUyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9kbWFjL2RtYWNIdy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvZG1hYy9kbWFjSHcuYwpAQCAtODkzLDcgKzg5Myw3IEBACiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB1aW50MzJfdCBkbWFjSHdfZ2V0RG1hQ29udHJvbGxlckF0dHJpYnV0ZShkbWFjSHdfSEFORExFX3QgaGFuZGxlLAkvKiAgWyBJTiBdICBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KLQkJCQkJICBkbWFjSHdfQ09OVFJPTExFUl9BVFRSSUJfZSBhdHRyCS8qICBbIElOIF0gIERNQSBDb250cm9sZXIgYXR0cmlidXRlIG9mIHR5cGUgIGRtYWNId19DT05UUk9MTEVSX0FUVFJJQl9lICovCisJCQkJCSAgZG1hY0h3X0NPTlRST0xMRVJfQVRUUklCX2UgYXR0cgkvKiAgWyBJTiBdICBETUEgQ29udHJvbGxlciBhdHRyaWJ1dGUgb2YgdHlwZSAgZG1hY0h3X0NPTlRST0xMRVJfQVRUUklCX2UgKi8KICAgICApIHsKIAlkbWFjSHdfQ0JMS190ICpwQ2JsayA9IGRtYWNId19IQU5ETEVfVE9fQ0JMSyhoYW5kbGUpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3X2V4dHJhLmMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3X2V4dHJhLmMKaW5kZXggZmY3YjQzNi4uNzdmODRiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9kbWFjL2RtYWNId19leHRyYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvZG1hYy9kbWFjSHdfZXh0cmEuYwpAQCAtMzE2LDcgKzMxNiw3IEBACiAvKioKICogIEBicmllZiAgIENoZWNrIGlmIERNQSBjaGFubmVsIGlzIHRoZSBmbG93IGNvbnRyb2xsZXIKICoKLSogIEByZXR1cm4gIDEgOiBJZiBETUEgaXMgYSBmbG93IGNvbnRyb2xlcgorKiAgQHJldHVybiAgMSA6IElmIERNQSBpcyBhIGZsb3cgY29udHJvbGxlcgogKiAgICAgICAgICAgMCA6IFBlcmlwaGVyYWwgaXMgdGhlIGZsb3cgY29udHJvbGxlcgogKgogKiAgQG5vdGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvdG1yL3Rtckh3LmMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL3Rtci90bXJIdy5jCmluZGV4IDVjMWM5YTAuLjE2MjI1ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvdG1yL3Rtckh3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC90bXIvdG1ySHcuYwpAQCAtNTU4LDcgKzU1OCw3IEBACiAJCXQgPSB0IDw8IDE7CiAJfQogCi0JLyogSW50aWFsaXplIHRoZSByZXN1bHQgKi8KKwkvKiBJbml0aWFsaXplIHRoZSByZXN1bHQgKi8KIAlyID0gMDsKIAogCWRvIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9kbWEuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9kbWEuYwppbmRleCA3N2ViMzVjLi44ZDFiYWYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2RtYS5jCkBAIC02NzEsNyArNjcxLDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioKLSogICBJbnRpYWxpemVzIGFsbCBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRE1BLgorKiAgIEluaXRpYWxpemVzIGFsbCBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRE1BLgogKiAgIEByZXR1cm4KICogICAgICAgPj0gMCAgICAtIEluaXRpYWxpemF0aW9uIHdhcyBzdWNjZXNzZnVsbC4KICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9kbWFjSHcuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9kbWFjSHcuaAppbmRleCA1ZDUxMDEzLi42YzhkYTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvZG1hY0h3LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2RtYWNIdy5oCkBAIC01OTAsNyArNTkwLDcgQEAKICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHVpbnQzMl90IGRtYWNId19nZXREbWFDb250cm9sbGVyQXR0cmlidXRlKGRtYWNId19IQU5ETEVfdCBoYW5kbGUsCS8qICBbIElOIF0gIERNQSBDaGFubmVsIGhhbmRsZSAgKi8KLQkJCQkJICBkbWFjSHdfQ09OVFJPTExFUl9BVFRSSUJfZSBhdHRyCS8qICBbIElOIF0gIERNQSBDb250cm9sZXIgYXR0cmlidXRlIG9mIHR5cGUgIGRtYWNId19DT05UUk9MTEVSX0FUVFJJQl9lICovCisJCQkJCSAgZG1hY0h3X0NPTlRST0xMRVJfQVRUUklCX2UgYXR0cgkvKiAgWyBJTiBdICBETUEgQ29udHJvbGxlciBhdHRyaWJ1dGUgb2YgdHlwZSAgZG1hY0h3X0NPTlRST0xMRVJfQVRUUklCX2UgKi8KICAgICApOwogCiAjZW5kaWYgLyogX0RNQUNIV19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvdG1ySHcuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC90bXJIdy5oCmluZGV4IGYxMjM2ZDAuLjJjYmI1MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC90bXJIdy5oCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC90bXJIdy5oCkBAIC03Niw3ICs3Niw3IEBACiAqICAgICAgICAgICBjZXJ0YWluIHRpbWUgaW50ZXJ2YWwKICoKICogIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSBwZXJpb2RpYyB0aW1lciB0byBnZW5lcmF0ZSB0aW1lciBpbnRlcnJ1cHQKLSogIGFmdGVyIGV2ZXJ5IHRpbWUgaW50ZXJ2YWwgaW4gbWlsaXNlY29uZAorKiAgYWZ0ZXIgZXZlcnkgdGltZSBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZAogKgogKiAgQHJldHVybiAgIE9uIHN1Y2Nlc3M6IEVmZmVjdGl2ZSBpbnRlcnZhbCBzZXQgaW4gbWlsaS1zZWNvbmQKICogICAgICAgICAgICBPbiBmYWlsdXJlOiAwCkBAIC05Myw3ICs5Myw3IEBACiAqICAgICAgICAgICBhZnRlciBjZXJ0YWluIHRpbWUgaW50ZXJ2YWwKICoKICogIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSBwZXJpb2RpYyB0aW1lciB0byBnZW5lcmF0ZSBhIHNpbmdsZSB0aWNrcyBhZnRlcgotKiAgY2VydGFpbiB0aW1lIGludGVydmFsIGluIG1pbGlzZWNvbmQKKyogIGNlcnRhaW4gdGltZSBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZAogKgogKiAgQHJldHVybiAgIE9uIHN1Y2Nlc3M6IEVmZmVjdGl2ZSBpbnRlcnZhbCBzZXQgaW4gbWlsaS1zZWNvbmQKICogICAgICAgICAgICBPbiBmYWlsdXJlOiAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9kbWFjSHdfcHJpdi5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvZG1hY0h3X3ByaXYuaAppbmRleCBjYmYzMzRkLi5kNjdlMmY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9kbWFjSHdfcHJpdi5oCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2RtYWNId19wcml2LmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyogRGF0YSB0eXBlIGZvciBETUEgTGluayBMaXN0IEl0ZW0gKi8KIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdCBzYXI7CQkvKiBTb3VyY2UgQWRyZXNzIFJlZ2lzdGVyLgorCXVpbnQzMl90IHNhcjsJCS8qIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyLgogCQkJCSAgIEFkZHJlc3MgbXVzdCBiZSBhbGlnbmVkIHRvIENUTHguU1JDX1RSX1dJRFRILiAgICAgICAgICAgICAqLwogCXVpbnQzMl90IGRhcjsJCS8qIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIuCiAJCQkJICAgQWRkcmVzcyBtdXN0IGJlIGFsaWduZWQgdG8gQ1RMeC5EU1RfVFJfV0lEVEguICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9kbWFjSHdfcmVnLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9kbWFjSHdfcmVnLmgKaW5kZXggODkxY2VhOC4uZjFlY2Y5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvZG1hY0h3X3JlZy5oCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2RtYWNId19yZWcuaApAQCAtMzUsNyArMzUsNyBAQAogCiAvKiBEYXRhIHR5cGUgcmVwcmVzZW50aW5nIERNQSBjaGFubmVsIHJlZ2lzdGVycyAqLwogdHlwZWRlZiBzdHJ1Y3QgewotCWRtYWNId19SRUc2NF90IENoYW5uZWxTYXI7CS8qICBTb3VyY2UgQWRyZXNzIFJlZ2lzdGVyLiA2NCBiaXRzICh1cHBlciAzMiBiaXRzIGFyZSByZXNlcnZlZCkKKwlkbWFjSHdfUkVHNjRfdCBDaGFubmVsU2FyOwkvKiAgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIuIDY0IGJpdHMgKHVwcGVyIDMyIGJpdHMgYXJlIHJlc2VydmVkKQogCQkJCQkgICBBZGRyZXNzIG11c3QgYmUgYWxpZ25lZCB0byBDVEx4LlNSQ19UUl9XSURUSC4KIAkJCQkJICovCiAJZG1hY0h3X1JFRzY0X3QgQ2hhbm5lbERhcjsJLyogIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIuNjQgYml0cyAodXBwZXIgMzIgYml0cyBhcmUgcmVzZXJ2ZWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvcG0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9wbS5jCmluZGV4IGZhYjk1M2IuLjFiZDczYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9wbS5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGRhdmluY2lfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBkYXZpbmNpX3BtX29wcyA9IHsKIAkuZW50ZXIJCT0gZGF2aW5jaV9wbV9lbnRlciwKIAkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRvdmUvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWRvdmUvY29tbW9uLmMKaW5kZXggZjdhMTI1OC4uZmU2MjdhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtZG92ZS9jb21tb24uYwpAQCAtNzcwLDcgKzc3MCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkb3ZlX3NkaW8wID0gewotCS5uYW1lCQk9ICJzZGhjaS1tdiIsCisJLm5hbWUJCT0gInNkaGNpLWRvdmUiLAogCS5pZAkJPSAwLAogCS5kZXYJCT0gewogCQkuZG1hX21hc2sJCT0gJnNkaW9fZG1hbWFzaywKQEAgLTc5OCw3ICs3OTgsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG92ZV9zZGlvMSA9IHsKLQkubmFtZQkJPSAic2RoY2ktbXYiLAorCS5uYW1lCQk9ICJzZGhjaS1kb3ZlIiwKIAkuaWQJCT0gMSwKIAkuZGV2CQk9IHsKIAkJLmRtYV9tYXNrCQk9ICZzZGlvX2RtYW1hc2ssCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDIxM2E0ZmMuLjhjOTUwZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0zMyw3ICszMyw3IEBACiAjZGVmaW5lIEdFTUlOSV9MUENfSE9TVF9CQVNFCTB4NDcwMDAwMDAKICNkZWZpbmUgR0VNSU5JX0xQQ19JT19CQVNFCTB4NDc4MDAwMDAKICNkZWZpbmUgR0VNSU5JX0lOVEVSUlVQVF9CQVNFCTB4NDgwMDAwMDAKLS8qIFRPRE86IERpZmZlcmVudCBpbnRlcnJ1cHQgY29udHJvbGVycyB3aGVuIFNNUAorLyogVE9ETzogRGlmZmVyZW50IGludGVycnVwdCBjb250cm9sbGVycyB3aGVuIFNNUAogICogI2RlZmluZSBHRU1JTklfSU5URVJSVVBUMF9CQVNFCTB4NDgwMDAwMDAKICAqICNkZWZpbmUgR0VNSU5JX0lOVEVSUlVQVDFfQkFTRQkweDQ5MDAwMDAwCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcGNtMDM4LmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjbTAzOC5jCmluZGV4IGY2NjdhMjYuLjUwNTYxNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcGNtMDM4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY20wMzguYwpAQCAtMjU0LDEwICsyNTQsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9pbml0X2RhdGEgcGNtMDM4X3JlZ3VsYXRvcnNbXSA9IHsKIAl7Ci0JCS5pZCA9IE1DMTM3ODNfUkVHVV9WQ0FNLAorCQkuaWQgPSBNQzEzNzgzX1JFR19WQ0FNLAogCQkuaW5pdF9kYXRhID0gJmNhbV9kYXRhLAogCX0sIHsKLQkJLmlkID0gTUMxMzc4M19SRUdVX1ZNTUMxLAorCQkuaWQgPSBNQzEzNzgzX1JFR19WTU1DMSwKIAkJLmluaXRfZGF0YSA9ICZzZGhjMV9kYXRhLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvcG0taW14MjcuYyBiL2FyY2gvYXJtL21hY2gtaW14L3BtLWlteDI3LmMKaW5kZXggNmJmODFjZS4uYWNmMTc2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvcG0taW14MjcuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9wbS1pbXgyNy5jCkBAIC0zMiw3ICszMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgbXgyN19zdXNwZW5kX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgbXgyN19zdXNwZW5kX29wcyA9IHsKIAkuZW50ZXIgPSBteDI3X3N1c3BlbmRfZW50ZXIsCiAJLnZhbGlkID0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZC1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmQtc2V0dXAuYwppbmRleCBjOWQ3N2ZhLi5jZmNjYTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZC1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkLXNldHVwLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCiAJa2lya3dvb2RfaTJjX2luaXQoKTsKIAotCWlmIChtYWNoaW5lX2lzX29wZW5yZF9jbGllbnQoKSkgeworCWlmIChtYWNoaW5lX2lzX29wZW5yZF9jbGllbnQoKSB8fCBtYWNoaW5lX2lzX29wZW5yZF91bHRpbWF0ZSgpKSB7CiAJCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGkyY19ib2FyZF9pbmZvLAogCQkJQVJSQVlfU0laRShpMmNfYm9hcmRfaW5mbykpOwogCQlraXJrd29vZF9hdWRpb19pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxwYzMyeHgvcG0uYyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9wbS5jCmluZGV4IGE2ZTJhZWQuLmU3NmQ0MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9wbS5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBscGMzMnh4X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgbHBjMzJ4eF9wbV9vcHMgPSB7CiAJLnZhbGlkCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKIAkuZW50ZXIJPSBscGMzMnh4X3BtX2VudGVyLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby1xZ2ljLlMgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8tcWdpYy5TCmluZGV4IDRkYzk5YWEuLjEyNDY3MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby1xZ2ljLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLXFnaWMuUwpAQCAtMjYsNyArMjYsNyBAQAogCSAqIFRoZSBpbnRlcnJ1cHQgbnVtYmVyaW5nIHNjaGVtZSBpcyBkZWZpbmVkIGluIHRoZQogCSAqIGludGVycnVwdCBjb250cm9sbGVyIHNwZWMuICBUbyB3aXQ6CiAJICoKLQkgKiBNaWdyYXRlZCB0aGUgY29kZSBmcm9tIEFSTSBNUCBwb3J0IHRvIGJlIG1vcmUgY29uc2lzdGFudAorCSAqIE1pZ3JhdGVkIHRoZSBjb2RlIGZyb20gQVJNIE1QIHBvcnQgdG8gYmUgbW9yZSBjb25zaXN0ZW50CiAJICogd2l0aCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyAsIHRoZSBmb2xsb3dpbmcgc3RpbGwgaG9sZHMgdHJ1ZQogCSAqIGhvd2V2ZXIsIGFsbCBpbnRlcnJ1cHRzIGFyZSB0cmVhdGVkIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YKIAkgKiBpZiB0aGV5IGFyZSBsb2NhbCBJUEkgb3IgUFBJCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pby5jIGIvYXJjaC9hcm0vbWFjaC1tc20vaW8uYwppbmRleCA4MDBmMzI3Li4xMjYwMDA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2lvLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogewogCWlmIChtdHlwZSA9PSBNVF9ERVZJQ0UpIHsKIAkJLyogVGhlIHBlcmlwaGVyYWxzIGluIHRoZSA4ODAwMDAwMCAtIEQwMDAwMDAwIHJhbmdlCi0JCSAqIGFyZSBvbmx5IGFjY2Vzc2FibGUgYnkgdHlwZSBNVF9ERVZJQ0VfTk9OU0hBUkVELgorCQkgKiBhcmUgb25seSBhY2Nlc3NpYmxlIGJ5IHR5cGUgTVRfREVWSUNFX05PTlNIQVJFRC4KIAkJICogQWRqdXN0IG10eXBlIGFzIG5lY2Vzc2FyeSB0byBtYWtlIHRoaXMgImp1c3Qgd29yay4iCiAJCSAqLwogCQlpZiAoKHBoeXNfYWRkciA+PSAweDg4MDAwMDAwKSAmJiAocGh5c19hZGRyIDwgMHhEMDAwMDAwMCkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFfM2RzLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFfM2RzLmMKaW5kZXggNGU1MTZiNC4uODk5YTk2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxXzNkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMV8zZHMuYwpAQCAtMTQwLDEwICsxNDAsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9pbml0X2RhdGEgbXgzMV8zZHNfcmVndWxhdG9yc1tdID0gewogCXsKLQkJLmlkID0gTUMxMzc4M19SRUdVX1BXR1QxU1BJLCAvKiBQb3dlciBHYXRlIGZvciBBUk0gY29yZS4gKi8KKwkJLmlkID0gTUMxMzc4M19SRUdfUFdHVDFTUEksIC8qIFBvd2VyIEdhdGUgZm9yIEFSTSBjb3JlLiAqLwogCQkuaW5pdF9kYXRhID0gJnB3Z3R4X2luaXQsCiAJfSwgewotCQkuaWQgPSBNQzEzNzgzX1JFR1VfUFdHVDJTUEksIC8qIFBvd2VyIEdhdGUgZm9yIEwyIENhY2hlLiAqLworCQkuaWQgPSBNQzEzNzgzX1JFR19QV0dUMlNQSSwgLyogUG93ZXIgR2F0ZSBmb3IgTDIgQ2FjaGUuICovCiAJCS5pbml0X2RhdGEgPSAmcHdndHhfaW5pdCwKIAl9LCB7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMW1vYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMW1vYm9hcmQuYwppbmRleCAyMDNkMjFhLi4xYWE4ZDY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFtb2JvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbW9ib2FyZC5jCkBAIC0yMTYsMTEgKzIxNiwxMSBAQAogCiBzdGF0aWMgc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX2luaXRfZGF0YSBtb2JvYXJkX3JlZ3VsYXRvcnNbXSA9IHsKIAl7Ci0JCS5pZCA9IE1DMTM3ODNfUkVHVV9WTU1DMSwKKwkJLmlkID0gTUMxMzc4M19SRUdfVk1NQzEsCiAJCS5pbml0X2RhdGEgPSAmc2RoY192cmVnX2RhdGEsCiAJfSwKIAl7Ci0JCS5pZCA9IE1DMTM3ODNfUkVHVV9WQ0FNLAorCQkuaWQgPSBNQzEzNzgzX1JFR19WQ0FNLAogCQkuaW5pdF9kYXRhID0gJmNhbV92cmVnX2RhdGEsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMKaW5kZXggMGNjYTIzYS4uOThiYTk3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uYwpAQCAtNjQ3LDcgKzY0Nyw3IEBACiAKIAogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIG9tYXBfcG1fb3BzID17CitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIG9tYXBfcG1fb3BzID0gewogCS5wcmVwYXJlCT0gb21hcF9wbV9wcmVwYXJlLAogCS5lbnRlcgkJPSBvbWFwX3BtX2VudGVyLAogCS5maW5pc2gJCT0gb21hcF9wbV9maW5pc2gsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NwdWlkbGUzNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NwdWlkbGUzNHh4LmMKaW5kZXggZjNlMDQzZi4uMTFiODllOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jcHVpZGxlMzR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY3B1aWRsZTM0eHguYwpAQCAtMjUyLDcgKzI1Miw3IEBACiAJICogRklYTUU6IHdlIGN1cnJlbnRseSBtYW5hZ2UgZGV2aWNlLXNwZWNpZmljIGlkbGUgc3RhdGVzCiAJICogICAgICAgIGZvciBQRVIgYW5kIENPUkUgaW4gY29tYmluYXRpb24gd2l0aCBDUFUtc3BlY2lmaWMKIAkgKiAgICAgICAgaWRsZSBzdGF0ZXMuICBUaGlzIGlzIHdyb25nLCBhbmQgZGV2aWNlLXNwZWNpZmljCi0JICogICAgICAgIGlkbGUgbWFuYWdtZW50IG5lZWRzIHRvIGJlIHNlcGFyYXRlZCBvdXQgaW50byAKKwkgKiAgICAgICAgaWRsZSBtYW5hZ2VtZW50IG5lZWRzIHRvIGJlIHNlcGFyYXRlZCBvdXQgaW50byAKIAkgKiAgICAgICAgaXRzIG93biBjb2RlLgogCSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYwppbmRleCBkYWMyZDFkLi45ZTVkYzhlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMKQEAgLTM1MCw3ICszNTAsNyBAQAogCWVuYWJsZV9obHQoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBvbWFwX3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgb21hcF9wbV9vcHMgPSB7CiAJLmJlZ2luCQk9IG9tYXAyX3BtX2JlZ2luLAogCS5lbnRlcgkJPSBvbWFwMl9wbV9lbnRlciwKIAkuZW5kCQk9IG9tYXAyX3BtX2VuZCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCmluZGV4IDViMzIzZjIuLjhjYmJlYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwpAQCAtNjA1LDcgKzYwNSw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIG9tYXBfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBvbWFwX3BtX29wcyA9IHsKIAkuYmVnaW4JCT0gb21hcDNfcG1fYmVnaW4sCiAJLmVuZAkJPSBvbWFwM19wbV9lbmQsCiAJLmVudGVyCQk9IG9tYXAzX3BtX2VudGVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMKaW5kZXggZTlmNDg2MmMuLjc2Y2ZmZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYwpAQCAtNjUsNyArNjUsNyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBvbWFwX3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgb21hcF9wbV9vcHMgPSB7CiAJLmJlZ2luCQk9IG9tYXA0X3BtX2JlZ2luLAogCS5lbmQJCT0gb21hcDRfcG1fZW5kLAogCS5lbnRlcgkJPSBvbWFwNF9wbV9lbnRlciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCmluZGV4IGM2NDU3ODguLjMwMmRhNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtODUyLDcgKzg1Miw3IEBACiB9CiAKIC8qKgotICogb21hcF9zZXJpYWxfaW5pdCgpIC0gaW50aWFsaXplIGFsbCBzdXBwb3J0ZWQgc2VyaWFsIHBvcnRzCisgKiBvbWFwX3NlcmlhbF9pbml0KCkgLSBpbml0aWFsaXplIGFsbCBzdXBwb3J0ZWQgc2VyaWFsIHBvcnRzCiAgKgogICogSW5pdGlhbGl6ZXMgYWxsIGF2YWlsYWJsZSBVQVJUcyBhcyBzZXJpYWwgcG9ydHMuIFBsYXRmb3JtcwogICogY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHRoZXkgd2FudCB0byBoYXZlIGRlZmF1bHQgYmVoYXZpb3VyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvcG0uYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9wbS5jCmluZGV4IGVlM2MyOWMuLmYzZTYwYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9wbS5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAkgICAgICAgKHN0YXRlID09IFBNX1NVU1BFTkRfTUVNKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBwbng0MDA4X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgcG54NDAwOF9wbV9vcHMgPSB7CiAJLmVudGVyID0gcG54NDAwOF9wbV9lbnRlciwKIAkudmFsaWQgPSBwbng0MDA4X3BtX3ZhbGlkLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL214bTh4MTAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL214bTh4MTAuYwppbmRleCA0NjIxNjdhLi5jZGY3ZjQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9teG04eDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbXhtOHgxMC5jCkBAIC0zMzcsNyArMzM3LDcgQEAKIH0KICNlbmRpZgogCi0vKiBVU0IgT3BlbiBIb3N0IENvbnRyb2xlciBJbnRlcmZhY2UgKi8KKy8qIFVTQiBPcGVuIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8KIHN0YXRpYyBzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhIG14bV84eDEwX29oY2lfcGxhdGZvcm1fZGF0YSA9IHsKIAkucG9ydF9tb2RlID0gUE1NX05QU19NT0RFLAogCS5mbGFncyA9IEVOQUJMRV9QT1JUX0FMTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BtLmMKaW5kZXggMTY2YzE1Zi4uOTc4ZTFiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wbS5jCkBAIC05Niw3ICs5Niw3IEBACiAJCXB4YV9jcHVfcG1fZm5zLT5maW5pc2goKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBweGFfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBweGFfcG1fb3BzID0gewogCS52YWxpZAkJPSBweGFfcG1fdmFsaWQsCiAJLmVudGVyCQk9IHB4YV9wbV9lbnRlciwKIAkucHJlcGFyZQk9IHB4YV9wbV9wcmVwYXJlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jCmluZGV4IGU2OGQ0NmQuLjc4NTg4MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKQEAgLTg2OSw3ICs4NjksNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHNoYXJwc2xfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBzaGFycHNsX3BtX29wcyA9IHsKIAkucHJlcGFyZQk9IHB4YV9wbV9wcmVwYXJlLAogCS5maW5pc2gJCT0gcHhhX3BtX2ZpbmlzaCwKIAkuZW50ZXIJCT0gY29yZ2lfcHhhX3BtX2VudGVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKaW5kZXggZDdhZGE4Yy4uMWE4MWZlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCkBAIC0zODcsNyArMzg3LDcgQEAKIAkmczNjX2RldmljZV93ZHQsCiAJJnMzY19kZXZpY2VfaTJjMCwKIAkmczNjX2RldmljZV9paXMsCi0JJnMzY19kZXZpY2VfcGNtLAorCSZzYW1zdW5nX2Fzb2NfZG1hLAogCSZzM2NfZGV2aWNlX3VzYmdhZGdldCwKIAkmaDE5NDBfZGV2aWNlX2xlZHMsCiAJJmgxOTQwX2RldmljZV9ibHVldG9vdGgsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDE5NTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MTk1MC5jCmluZGV4IGUwNjIyYmIuLmVhYjZhZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MTk1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MTk1MC5jCkBAIC02OTIsNyArNjkyLDcgQEAKIAkmczNjX2RldmljZV93ZHQsCiAJJnMzY19kZXZpY2VfaTJjMCwKIAkmczNjX2RldmljZV9paXMsCi0JJnMzY19kZXZpY2VfcGNtLAorCSZzYW1zdW5nX2Fzb2NfZG1hLAogCSZzM2NfZGV2aWNlX3VzYmdhZGdldCwKIAkmczNjX2RldmljZV9ydGMsCiAJJnMzY19kZXZpY2VfbmFuZCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Nsb2NrLmMKaW5kZXggN2UwM2YwYS4uMWM5OGQyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Nsb2NrLmMKQEAgLTY5NSw3ICs2OTUsNyBAQAogCX0sIHsKIAkJLmNsawk9IHsKIAkJCS5uYW1lCQk9ICJhdWRpby1idXMiLAotCQkJLmlkCQk9IC0xLCAgLyogVGhlcmUncyBvbmx5IG9uZSBJSVN2NCBwb3J0ICovCisJCQkuaWQJCT0gMiwKIAkJCS5jdHJsYml0ICAgICAgICA9IFMzQzY0MTBfQ0xLQ09OX1NDTEtfQVVESU8yLAogCQkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKIAkJfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtYXVkaW8uYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtYXVkaW8uYwppbmRleCA3NjQyNmEzLi5jYWQ2NzAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZGV2LWF1ZGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Rldi1hdWRpby5jCkBAIC0yMiw3ICsyMiwxMiBAQAogI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CiAKLXN0YXRpYyBpbnQgczNjNjR4eF9pMnN2M19jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGNvbnN0IGNoYXIgKnJjbGtzcmNbXSA9IHsKKwlbMF0gPSAiaWlzIiwKKwlbMV0gPSAiYXVkaW8tYnVzIiwKK307CisKK3N0YXRpYyBpbnQgczNjNjR4eF9pMnNfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAl1bnNpZ25lZCBpbnQgYmFzZTsKIApAQCAtMzMsNiArMzgsMTIgQEAKIAljYXNlIDE6CiAJCWJhc2UgPSBTM0M2NFhYX0dQRSgwKTsKIAkJYnJlYWs7CisJY2FzZSAyOgorCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEMoNCksIFMzQ19HUElPX1NGTig1KSk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQQyg1KSwgUzNDX0dQSU9fU0ZOKDUpKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BDKDcpLCBTM0NfR1BJT19TRk4oNSkpOworCQlzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoUzNDNjRYWF9HUEgoNiksIDQsIFMzQ19HUElPX1NGTig1KSk7CisJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0RFQlVHICJJbnZhbGlkIEkyUyBDb250cm9sbGVyIG51bWJlcjogJWRcbiIsCiAJCQlwZGV2LT5pZCk7CkBAIC00NCwxNiArNTUsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzYzY0eHhfaTJzdjRfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEMoNCksIFMzQ19HUElPX1NGTig1KSk7Ci0JczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BDKDUpLCBTM0NfR1BJT19TRk4oNSkpOwotCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQQyg3KSwgUzNDX0dQSU9fU0ZOKDUpKTsKLQlzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoUzNDNjRYWF9HUEgoNiksIDQsIFMzQ19HUElPX1NGTig1KSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X2lpczBfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydCA9IFMzQzY0WFhfUEFfSUlTMCwKQEAgLTcyLDE3ICs3MywyMiBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHMzY19hdWRpb19wZGF0YSBzM2NfaTJzMF9wZGF0YSA9IHsKLQkuY2ZnX2dwaW8gPSBzM2M2NHh4X2kyc3YzX2NmZ19ncGlvLAorc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgaTJzdjNfcGRhdGEgPSB7CisJLmNmZ19ncGlvID0gczNjNjR4eF9pMnNfY2ZnX2dwaW8sCisJLnR5cGUgPSB7CisJCS5pMnMgPSB7CisJCQkuc3JjX2NsayA9IHJjbGtzcmMsCisJCX0sCisJfSwKIH07CiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjNjR4eF9kZXZpY2VfaWlzMCA9IHsKLQkubmFtZQkJICA9ICJzM2M2NHh4LWlpcyIsCisJLm5hbWUJCSAgPSAic2Ftc3VuZy1pMnMiLAogCS5pZAkJICA9IDAsCiAJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjNjR4eF9paXMwX3Jlc291cmNlKSwKIAkucmVzb3VyY2UJICA9IHMzYzY0eHhfaWlzMF9yZXNvdXJjZSwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfaTJzMF9wZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaTJzdjNfcGRhdGEsCiAJfSwKIH07CiBFWFBPUlRfU1lNQk9MKHMzYzY0eHhfZGV2aWNlX2lpczApOwpAQCAtMTA1LDE3ICsxMTEsMTMgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgczNjX2kyczFfcGRhdGEgPSB7Ci0JLmNmZ19ncGlvID0gczNjNjR4eF9pMnN2M19jZmdfZ3BpbywKLX07Ci0KIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjNjR4eF9kZXZpY2VfaWlzMSA9IHsKLQkubmFtZQkJICA9ICJzM2M2NHh4LWlpcyIsCisJLm5hbWUJCSAgPSAic2Ftc3VuZy1pMnMiLAogCS5pZAkJICA9IDEsCiAJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjNjR4eF9paXMxX3Jlc291cmNlKSwKIAkucmVzb3VyY2UJICA9IHMzYzY0eHhfaWlzMV9yZXNvdXJjZSwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfaTJzMV9wZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaTJzdjNfcGRhdGEsCiAJfSwKIH07CiBFWFBPUlRfU1lNQk9MKHMzYzY0eHhfZGV2aWNlX2lpczEpOwpAQCAtMTM4LDE3ICsxNDAsMjMgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgczNjX2kyc3Y0X3BkYXRhID0gewotCS5jZmdfZ3BpbyA9IHMzYzY0eHhfaTJzdjRfY2ZnX2dwaW8sCitzdGF0aWMgc3RydWN0IHMzY19hdWRpb19wZGF0YSBpMnN2NF9wZGF0YSA9IHsKKwkuY2ZnX2dwaW8gPSBzM2M2NHh4X2kyc19jZmdfZ3BpbywKKwkudHlwZSA9IHsKKwkJLmkycyA9IHsKKwkJCS5xdWlya3MgPSBRVUlSS19QUklfNkNIQU4sCisJCQkuc3JjX2NsayA9IHJjbGtzcmMsCisJCX0sCisJfSwKIH07CiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjNjR4eF9kZXZpY2VfaWlzdjQgPSB7Ci0JLm5hbWUJCSAgPSAiczNjNjR4eC1paXMtdjQiLAotCS5pZAkJICA9IC0xLAorCS5uYW1lID0gInNhbXN1bmctaTJzIiwKKwkuaWQgPSAyLAogCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzYzY0eHhfaWlzdjRfcmVzb3VyY2UpLAogCS5yZXNvdXJjZQkgID0gczNjNjR4eF9paXN2NF9yZXNvdXJjZSwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfaTJzdjRfcGRhdGEsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmkyc3Y0X3BkYXRhLAogCX0sCiB9OwogRVhQT1JUX1NZTUJPTChzM2M2NHh4X2RldmljZV9paXN2NCk7CkBAIC0yODgsNyArMjk2LDcgQEAKIHN0YXRpYyB1NjQgczNjNjR4eF9hYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzY0eHhfZGV2aWNlX2FjOTcgPSB7Ci0JLm5hbWUJCSAgPSAiczNjLWFjOTciLAorCS5uYW1lCQkgID0gInNhbXN1bmctYWM5NyIsCiAJLmlkCQkgID0gLTEsCiAJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjNjR4eF9hYzk3X3Jlc291cmNlKSwKIAkucmVzb3VyY2UJICA9IHMzYzY0eHhfYWM5N19yZXNvdXJjZSwKQEAgLTMwNywxNiArMzE1LDMgQEAKIAllbHNlCiAJCXMzY19hYzk3X3BkYXRhLmNmZ19ncGlvID0gczNjNjR4eF9hYzk3X2NmZ19ncGU7CiB9Ci0KLXN0YXRpYyB1NjQgczNjX2RldmljZV9hdWRpb19kbWFtYXNrID0gMHhmZmZmZmZmZlVMOwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfcGNtID0gewotCS5uYW1lCQkgID0gInMzYzI0eHgtcGNtLWF1ZGlvIiwKLQkuaWQJCSAgPSAtMSwKLQkuZGV2ICAgICAgICAgICAgICA9IHsKLQkJLmRtYV9tYXNrID0gJnMzY19kZXZpY2VfYXVkaW9fZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZlVMCi0JfQotfTsKLUVYUE9SVF9TWU1CT0woczNjX2RldmljZV9wY20pOwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZG1hLmMKaW5kZXggZTdkMDNhYi4uMzcyZWE2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kbWEuYwpAQCAtNzQwLDcgKzc0MCw3IEBACiAJLyogU2V0IGFsbCBETUEgY29uZmlndXJhdGlvbiB0byBiZSBETUEsIG5vdCBTRE1BICovCiAJd3JpdGVsKDB4ZmZmZmZmLCBTM0NfU1lTUkVHKDB4MTEwKSk7CiAKLQkvKiBSZWdpc3RlciBzdGFuZGFyZCBETUEgY29udHJvbGVycyAqLworCS8qIFJlZ2lzdGVyIHN0YW5kYXJkIERNQSBjb250cm9sbGVycyAqLwogCXMzYzY0eHhfZG1hX2luaXQxKDAsIERNQUNIX1VBUlQwLCBJUlFfRE1BMCwgMHg3NTAwMDAwMCk7CiAJczNjNjR4eF9kbWFfaW5pdDEoOCwgRE1BQ0hfUENNMV9UWCwgSVJRX0RNQTEsIDB4NzUxMDAwMDApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1zbWRrNjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21kazY0MTAuYwppbmRleCA3NzQ4OGZhLi5lODUxOTJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1zbWRrNjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLXNtZGs2NDEwLmMKQEAgLTI4Myw3ICsyODMsNyBAQAogCSZzM2NfZGV2aWNlX2ZiLAogCSZzM2NfZGV2aWNlX29oY2ksCiAJJnMzY19kZXZpY2VfdXNiX2hzb3RnLAotCSZzM2NfZGV2aWNlX3BjbSwKKwkmc2Ftc3VuZ19hc29jX2RtYSwKIAkmczNjNjR4eF9kZXZpY2VfaWlzdjQsCiAJJnNhbXN1bmdfZGV2aWNlX2tleXBhZCwKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2Rldi1hdWRpby5jIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2Rldi1hdWRpby5jCmluZGV4IDM0NjIxOTcuLjg3MTlkYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9kZXYtYXVkaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvZGV2LWF1ZGlvLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAkJYmFzZSA9IFM1UDY0NDJfR1BDMSgwKTsKIAkJYnJlYWs7CiAKLQljYXNlIC0xOgorCWNhc2UgMDoKIAkJYmFzZSA9IFM1UDY0NDJfR1BDMCgwKTsKIAkJYnJlYWs7CiAKQEAgLTQyLDggKzQyLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIHMzY19pMnNfcGRhdGEgPSB7CitzdGF0aWMgY29uc3QgY2hhciAqcmNsa3NyY192MzVbXSA9IHsKKwlbMF0gPSAiYnVzY2xrIiwKKwlbMV0gPSAiaTJzY2xrIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIGkyc3YzNV9wZGF0YSA9IHsKIAkuY2ZnX2dwaW8gPSBzNXA2NDQyX2NmZ19pMnMsCisJLnR5cGUgPSB7CisJCS5pMnMgPSB7CisJCQkucXVpcmtzID0gUVVJUktfU0VDX0RBSSB8IFFVSVJLX05FRURfUlNUQ0xSLAorCQkJLnNyY19jbGsgPSByY2xrc3JjX3YzNSwKKwkJfSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXA2NDQyX2lpczBfcmVzb3VyY2VbXSA9IHsKQEAgLTYyLDE1ICs3MywzNCBAQAogCQkuZW5kICAgPSBETUFDSF9JMlMwX1JYLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKIAl9LAorCVszXSA9IHsKKwkJLnN0YXJ0ID0gRE1BQ0hfSTJTMFNfVFgsCisJCS5lbmQgPSBETUFDSF9JMlMwU19UWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKIH07CiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwNjQ0Ml9kZXZpY2VfaWlzMCA9IHsKLQkubmFtZQkJICA9ICJzM2M2NHh4LWlpcy12NCIsCi0JLmlkCQkgID0gLTEsCisJLm5hbWUgPSAic2Ftc3VuZy1pMnMiLAorCS5pZCA9IDAsCiAJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczVwNjQ0Ml9paXMwX3Jlc291cmNlKSwKIAkucmVzb3VyY2UJICA9IHM1cDY0NDJfaWlzMF9yZXNvdXJjZSwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfaTJzX3BkYXRhLAorCQkucGxhdGZvcm1fZGF0YSA9ICZpMnN2MzVfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpyY2xrc3JjX3YzW10gPSB7CisJWzBdID0gImlpcyIsCisJWzFdID0gInNjbGtfYXVkaW8iLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgaTJzdjNfcGRhdGEgPSB7CisJLmNmZ19ncGlvID0gczVwNjQ0Ml9jZmdfaTJzLAorCS50eXBlID0geworCQkuaTJzID0geworCQkJLnNyY19jbGsgPSByY2xrc3JjX3YzLAorCQl9LAogCX0sCiB9OwogCkBAIC05MywxMiArMTIzLDEyIEBACiB9OwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cDY0NDJfZGV2aWNlX2lpczEgPSB7Ci0JLm5hbWUJCSAgPSAiczNjNjR4eC1paXMiLAorCS5uYW1lCQkgID0gInNhbXN1bmctaTJzIiwKIAkuaWQJCSAgPSAxLAogCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHM1cDY0NDJfaWlzMV9yZXNvdXJjZSksCiAJLnJlc291cmNlCSAgPSBzNXA2NDQyX2lpczFfcmVzb3VyY2UsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmczNjX2kyc19wZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaTJzdjNfcGRhdGEsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjR4MC9jbG9jay1zNXA2NDQwLmMgYi9hcmNoL2FybS9tYWNoLXM1cDY0eDAvY2xvY2stczVwNjQ0MC5jCmluZGV4IGU0ODgzZGMuLjQwOWM1ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwNjR4MC9jbG9jay1zNXA2NDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2Nsb2NrLXM1cDY0NDAuYwpAQCAtMjYxLDcgKzI2MSw3IEBACiAJCS5lbmFibGUJCT0gczVwNjR4MF9wY2xrX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgMjUpLAogCX0sIHsKLQkJLm5hbWUJCT0gImkyc192NDAiLAorCQkubmFtZQkJPSAiaWlzIiwKIAkJLmlkCQk9IDAsCiAJCS5wYXJlbnQJCT0gJmNsa19wY2xrX2xvdy5jbGssCiAJCS5lbmFibGUJCT0gczVwNjR4MF9wY2xrX2N0cmwsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvY2xvY2stczVwNjQ1MC5jIGIvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2Nsb2NrLXM1cDY0NTAuYwppbmRleCA3ZGJmM2M5Li43ZmM2YWJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvY2xvY2stczVwNjQ1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjR4MC9jbG9jay1zNXA2NDUwLmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogCQkuY3RybGJpdAk9ICgxIDw8IDIyKSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJpaXMiLAotCQkuaWQJCT0gLTEsCisJCS5pZAkJPSAwLAogCQkucGFyZW50CQk9ICZjbGtfcGNsa19sb3cuY2xrLAogCQkuZW5hYmxlCQk9IHM1cDY0eDBfcGNsa19jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDI2KSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjR4MC9kZXYtYXVkaW8uYyBiL2FyY2gvYXJtL21hY2gtczVwNjR4MC9kZXYtYXVkaW8uYwppbmRleCAzOTZiYWNjLi4xNGY4OWU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvZGV2LWF1ZGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2Rldi1hdWRpby5jCkBAIC0xOSwxNSArMTksMTkgQEAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogCi1zdGF0aWMgaW50IHM1cDY0NDBfY2ZnX2kycyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGNvbnN0IGNoYXIgKnJjbGtzcmNbXSA9IHsKKwlbMF0gPSAiaWlzIiwKKwlbMV0gPSAic2Nsa19hdWRpbzIiLAorfTsKKworc3RhdGljIGludCBzNXA2NHgwX2NmZ19pMnMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAkvKiBjb25maWd1cmUgR1BJTyBmb3IgaTJzIHBvcnQgKi8KIAlzd2l0Y2ggKHBkZXYtPmlkKSB7Ci0JY2FzZSAtMToKKwljYXNlIDA6CiAJCXMzY19ncGlvX2NmZ3Bpbl9yYW5nZShTNVA2NDQwX0dQUig0KSwgNSwgUzNDX0dQSU9fU0ZOKDUpKTsKIAkJczNjX2dwaW9fY2ZncGluX3JhbmdlKFM1UDY0NDBfR1BSKDEzKSwgMiwgUzNDX0dQSU9fU0ZOKDUpKTsKIAkJYnJlYWs7Ci0KIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgRGV2aWNlICVkXG4iLCBwZGV2LT5pZCk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzYsMzEgKzQwLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczVwNjQ1MF9jZmdfaTJzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JLyogY29uZmlndXJlIEdQSU8gZm9yIGkycyBwb3J0ICovCi0Jc3dpdGNoIChwZGV2LT5pZCkgewotCWNhc2UgLTE6Ci0JCXMzY19ncGlvX2NmZ3BpbihTNVA2NDUwX0dQQig0KSwgUzNDX0dQSU9fU0ZOKDUpKTsKLQkJczNjX2dwaW9fY2ZncGluX3JhbmdlKFM1UDY0NTBfR1BSKDQpLCA1LCBTM0NfR1BJT19TRk4oNSkpOwotCQlzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoUzVQNjQ1MF9HUFIoMTMpLCAyLCBTM0NfR1BJT19TRk4oNSkpOwotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIERldmljZSAlZFxuIiwgcGRldi0+aWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgczVwNjQ0MF9pMnNfcGRhdGEgPSB7Ci0JLmNmZ19ncGlvID0gczVwNjQ0MF9jZmdfaTJzLAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgczVwNjQ1MF9pMnNfcGRhdGEgPSB7Ci0JLmNmZ19ncGlvID0gczVwNjQ1MF9jZmdfaTJzLAorc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgczVwNjR4MF9pMnNfcGRhdGEgPSB7CisJLmNmZ19ncGlvID0gczVwNjR4MF9jZmdfaTJzLAorCS50eXBlID0geworCQkuaTJzID0geworCQkJLnF1aXJrcyA9IFFVSVJLX1BSSV82Q0hBTiwKKwkJCS5zcmNfY2xrID0gcmNsa3NyYywKKwkJfSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXA2NHgwX2lpczBfcmVzb3VyY2VbXSA9IHsKQEAgLTgyLDIyICs2OSwyMiBAQAogfTsKIAogc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXA2NDQwX2RldmljZV9paXMgPSB7Ci0JLm5hbWUJCT0gInMzYzY0eHgtaWlzLXY0IiwKLQkuaWQJCT0gLTEsCisJLm5hbWUJCT0gInNhbXN1bmctaTJzIiwKKwkuaWQJCT0gMCwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczVwNjR4MF9paXMwX3Jlc291cmNlKSwKIAkucmVzb3VyY2UJPSBzNXA2NHgwX2lpczBfcmVzb3VyY2UsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmczVwNjQ0MF9pMnNfcGRhdGEsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnM1cDY0eDBfaTJzX3BkYXRhLAogCX0sCiB9OwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cDY0NTBfZGV2aWNlX2lpczAgPSB7Ci0JLm5hbWUJCT0gInMzYzY0eHgtaWlzLXY0IiwKLQkuaWQJCT0gLTEsCisJLm5hbWUJCT0gInNhbXN1bmctaTJzIiwKKwkuaWQJCT0gMCwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczVwNjR4MF9paXMwX3Jlc291cmNlKSwKIAkucmVzb3VyY2UJPSBzNXA2NHgwX2lpczBfcmVzb3VyY2UsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmczVwNjQ1MF9pMnNfcGRhdGEsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnM1cDY0eDBfaTJzX3BkYXRhLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvZGV2LWF1ZGlvLmMgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvZGV2LWF1ZGlvLmMKaW5kZXggNTY0ZTE5NS4uYWIyZDI3MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2Rldi1hdWRpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9kZXYtYXVkaW8uYwpAQCAtMjMsMTcgKzIzLDE0IEBACiB7CiAJLyogY29uZmlndXJlIEdQSU8gZm9yIGkycyBwb3J0ICovCiAJc3dpdGNoIChwZGV2LT5pZCkgeworCWNhc2UgMDogLyogRGVkaWNhdGVkIHBpbnMgKi8KKwkJYnJlYWs7CiAJY2FzZSAxOgogCQlzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoUzVQQzEwMF9HUEMoMCksIDUsIFMzQ19HUElPX1NGTigyKSk7CiAJCWJyZWFrOwotCiAJY2FzZSAyOgogCQlzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoUzVQQzEwMF9HUEczKDApLCA1LCBTM0NfR1BJT19TRk4oNCkpOwogCQlicmVhazsKLQotCWNhc2UgLTE6IC8qIERlZGljYXRlZCBwaW5zICovCi0JCWJyZWFrOwotCiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIERldmljZSAlZFxuIiwgcGRldi0+aWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQyLDggKzM5LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIHMzY19pMnNfcGRhdGEgPSB7CitzdGF0aWMgY29uc3QgY2hhciAqcmNsa3NyY192NVtdID0geworCVswXSA9ICJpaXMiLAorCVsxXSA9ICJpMnNjbGtkMiIsCit9OworCitzdGF0aWMgc3RydWN0IHMzY19hdWRpb19wZGF0YSBpMnN2NV9wZGF0YSA9IHsKIAkuY2ZnX2dwaW8gPSBzNXBjMTAwX2NmZ19pMnMsCisJLnR5cGUgPSB7CisJCS5pMnMgPSB7CisJCQkucXVpcmtzID0gUVVJUktfUFJJXzZDSEFOIHwgUVVJUktfU0VDX0RBSQorCQkJCQkgfCBRVUlSS19ORUVEX1JTVENMUiwKKwkJCS5zcmNfY2xrID0gcmNsa3NyY192NSwKKwkJfSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXBjMTAwX2lpczBfcmVzb3VyY2VbXSA9IHsKQEAgLTYyLDE1ICs3MSwzNCBAQAogCQkuZW5kICAgPSBETUFDSF9JMlMwX1JYLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKIAl9LAorCVszXSA9IHsKKwkJLnN0YXJ0ID0gRE1BQ0hfSTJTMFNfVFgsCisJCS5lbmQgPSBETUFDSF9JMlMwU19UWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKIH07CiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwYzEwMF9kZXZpY2VfaWlzMCA9IHsKLQkubmFtZQkJICA9ICJzM2M2NHh4LWlpcy12NCIsCi0JLmlkCQkgID0gLTEsCisJLm5hbWUgPSAic2Ftc3VuZy1pMnMiLAorCS5pZCA9IDAsCiAJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczVwYzEwMF9paXMwX3Jlc291cmNlKSwKIAkucmVzb3VyY2UJICA9IHM1cGMxMDBfaWlzMF9yZXNvdXJjZSwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfaTJzX3BkYXRhLAorCQkucGxhdGZvcm1fZGF0YSA9ICZpMnN2NV9wZGF0YSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnJjbGtzcmNfdjNbXSA9IHsKKwlbMF0gPSAiaWlzIiwKKwlbMV0gPSAic2Nsa19hdWRpbyIsCit9OworCitzdGF0aWMgc3RydWN0IHMzY19hdWRpb19wZGF0YSBpMnN2M19wZGF0YSA9IHsKKwkuY2ZnX2dwaW8gPSBzNXBjMTAwX2NmZ19pMnMsCisJLnR5cGUgPSB7CisJCS5pMnMgPSB7CisJCQkuc3JjX2NsayA9IHJjbGtzcmNfdjMsCisJCX0sCiAJfSwKIH07CiAKQEAgLTkzLDEyICsxMjEsMTIgQEAKIH07CiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwYzEwMF9kZXZpY2VfaWlzMSA9IHsKLQkubmFtZQkJICA9ICJzM2M2NHh4LWlpcyIsCisJLm5hbWUJCSAgPSAic2Ftc3VuZy1pMnMiLAogCS5pZAkJICA9IDEsCiAJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczVwYzEwMF9paXMxX3Jlc291cmNlKSwKIAkucmVzb3VyY2UJICA9IHM1cGMxMDBfaWlzMV9yZXNvdXJjZSwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfaTJzX3BkYXRhLAorCQkucGxhdGZvcm1fZGF0YSA9ICZpMnN2M19wZGF0YSwKIAl9LAogfTsKIApAQCAtMTIxLDEyICsxNDksMTIgQEAKIH07CiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwYzEwMF9kZXZpY2VfaWlzMiA9IHsKLQkubmFtZQkJICA9ICJzM2M2NHh4LWlpcyIsCisJLm5hbWUJCSAgPSAic2Ftc3VuZy1pMnMiLAogCS5pZAkJICA9IDIsCiAJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczVwYzEwMF9paXMyX3Jlc291cmNlKSwKIAkucmVzb3VyY2UJICA9IHM1cGMxMDBfaWlzMl9yZXNvdXJjZSwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfaTJzX3BkYXRhLAorCQkucGxhdGZvcm1fZGF0YSA9ICZpMnN2M19wZGF0YSwKIAl9LAogfTsKIApAQCAtMjUzLDcgKzI4MSw3IEBACiBzdGF0aWMgdTY0IHM1cGMxMDBfYWM5N19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAogc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXBjMTAwX2RldmljZV9hYzk3ID0gewotCS5uYW1lCQkgID0gInMzYy1hYzk3IiwKKwkubmFtZQkJICA9ICJzYW1zdW5nLWFjOTciLAogCS5pZAkJICA9IC0xLAogCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHM1cGMxMDBfYWM5N19yZXNvdXJjZSksCiAJLnJlc291cmNlCSAgPSBzNXBjMTAwX2FjOTdfcmVzb3VyY2UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvbWFjaC1zbWRrYzEwMC5jIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL21hY2gtc21ka2MxMDAuYwppbmRleCAxOGI0MDVkLi5kZDE5MmEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvbWFjaC1zbWRrYzEwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9tYWNoLXNtZGtjMTAwLmMKQEAgLTk2LDYgKzk2LDcgQEAKIAogLyogSTJDMCAqLwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmNfZGV2czBbXSBfX2luaXRkYXRhID0geworCXtJMkNfQk9BUkRfSU5GTygid204NTgwIiwgMHgxYiksfSwKIH07CiAKIC8qIEkyQzEgKi8KQEAgLTE5MCw2ICsxOTEsNyBAQAogCSZzM2NfZGV2aWNlX3RzLAogCSZzM2NfZGV2aWNlX3dkdCwKIAkmc21ka2MxMDBfbGNkX3Bvd2VyZGV2LAorCSZzYW1zdW5nX2Fzb2NfZG1hLAogCSZzNXBjMTAwX2RldmljZV9paXMwLAogCSZzYW1zdW5nX2RldmljZV9rZXlwYWQsCiAJJnM1cGMxMDBfZGV2aWNlX2FjOTcsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9jbG9jay5jCmluZGV4IDAxOWMzYTYuLmI3NzRmZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9jbG9jay5jCkBAIC00NjcsMjAgKzQ2NywyMCBAQAogCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwM19jdHJsLAogCQkuY3RybGJpdAk9ICgxPDwyMSksCiAJfSwgewotCQkubmFtZQkJPSAiaTJzX3Y1MCIsCisJCS5uYW1lCQk9ICJpaXMiLAogCQkuaWQJCT0gMCwKIAkJLnBhcmVudAkJPSAmY2xrX3AsCiAJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCiAJCS5jdHJsYml0CT0gKDE8PDQpLAogCX0sIHsKLQkJLm5hbWUJCT0gImkyc192MzIiLAotCQkuaWQJCT0gMCwKKwkJLm5hbWUJCT0gImlpcyIsCisJCS5pZAkJPSAxLAogCQkucGFyZW50CQk9ICZjbGtfcCwKIAkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDNfY3RybCwKIAkJLmN0cmxiaXQJPSAoMSA8PCA1KSwKIAl9LCB7Ci0JCS5uYW1lCQk9ICJpMnNfdjMyIiwKLQkJLmlkCQk9IDEsCisJCS5uYW1lCQk9ICJpaXMiLAorCQkuaWQJCT0gMiwKIAkJLnBhcmVudAkJPSAmY2xrX3AsCiAJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCiAJCS5jdHJsYml0CT0gKDEgPDwgNiksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvZGV2LWF1ZGlvLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvZGV2LWF1ZGlvLmMKaW5kZXggMTMwM2ZjYi4uOGQ1OGYxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2Rldi1hdWRpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9kZXYtYXVkaW8uYwpAQCAtMTksMjIgKzE5LDI0IEBACiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAorc3RhdGljIGNvbnN0IGNoYXIgKnJjbGtzcmNbXSA9IHsKKwlbMF0gPSAiYnVzY2xrIiwKKwlbMV0gPSAiaTJzY2xrIiwKK307CisKIHN0YXRpYyBpbnQgczVwdjIxMF9jZmdfaTJzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJLyogY29uZmlndXJlIEdQSU8gZm9yIGkycyBwb3J0ICovCiAJc3dpdGNoIChwZGV2LT5pZCkgeworCWNhc2UgMDoKKwkJczNjX2dwaW9fY2ZncGluX3JhbmdlKFM1UFYyMTBfR1BJKDApLCA3LCBTM0NfR1BJT19TRk4oMikpOworCQlicmVhazsKIAljYXNlIDE6CiAJCXMzY19ncGlvX2NmZ3Bpbl9yYW5nZShTNVBWMjEwX0dQQzAoMCksIDUsIFMzQ19HUElPX1NGTigyKSk7CiAJCWJyZWFrOwotCiAJY2FzZSAyOgogCQlzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoUzVQVjIxMF9HUEMxKDApLCA1LCBTM0NfR1BJT19TRk4oNCkpOwogCQlicmVhazsKLQotCWNhc2UgLTE6Ci0JCXMzY19ncGlvX2NmZ3Bpbl9yYW5nZShTNVBWMjEwX0dQSSgwKSwgNywgUzNDX0dQSU9fU0ZOKDIpKTsKLQkJYnJlYWs7Ci0KIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgRGV2aWNlICVkXG4iLCBwZGV2LT5pZCk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDMsOCArNDUsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgczNjX2kyc19wZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIGkyc3Y1X3BkYXRhID0gewogCS5jZmdfZ3BpbyA9IHM1cHYyMTBfY2ZnX2kycywKKwkudHlwZSA9IHsKKwkJLmkycyA9IHsKKwkJCS5xdWlya3MgPSBRVUlSS19QUklfNkNIQU4gfCBRVUlSS19TRUNfREFJCisJCQkJCSB8IFFVSVJLX05FRURfUlNUQ0xSLAorCQkJLnNyY19jbGsgPSByY2xrc3JjLAorCQl9LAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cHYyMTBfaWlzMF9yZXNvdXJjZVtdID0gewpAQCAtNjMsMTUgKzcyLDM0IEBACiAJCS5lbmQgICA9IERNQUNIX0kyUzBfUlgsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAogCX0sCisJWzNdID0geworCQkuc3RhcnQgPSBETUFDSF9JMlMwU19UWCwKKwkJLmVuZCA9IERNQUNIX0kyUzBTX1RYLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAogfTsKIAogc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MjEwX2RldmljZV9paXMwID0gewotCS5uYW1lCQkgID0gInMzYzY0eHgtaWlzLXY0IiwKLQkuaWQJCSAgPSAtMSwKKwkubmFtZSA9ICJzYW1zdW5nLWkycyIsCisJLmlkID0gMCwKIAkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzNXB2MjEwX2lpczBfcmVzb3VyY2UpLAogCS5yZXNvdXJjZQkgID0gczVwdjIxMF9paXMwX3Jlc291cmNlLAogCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnMzY19pMnNfcGRhdGEsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmkyc3Y1X3BkYXRhLAorCX0sCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcmNsa3NyY192M1tdID0geworCVswXSA9ICJpaXMiLAorCVsxXSA9ICJhdWRpby1idXMiLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgaTJzdjNfcGRhdGEgPSB7CisJLmNmZ19ncGlvID0gczVwdjIxMF9jZmdfaTJzLAorCS50eXBlID0geworCQkuaTJzID0geworCQkJLnNyY19jbGsgPSByY2xrc3JjX3YzLAorCQl9LAogCX0sCiB9OwogCkBAIC05NCwxMiArMTIyLDEyIEBACiB9OwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYyMTBfZGV2aWNlX2lpczEgPSB7Ci0JLm5hbWUJCSAgPSAiczNjNjR4eC1paXMiLAorCS5uYW1lCQkgID0gInNhbXN1bmctaTJzIiwKIAkuaWQJCSAgPSAxLAogCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHM1cHYyMTBfaWlzMV9yZXNvdXJjZSksCiAJLnJlc291cmNlCSAgPSBzNXB2MjEwX2lpczFfcmVzb3VyY2UsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmczNjX2kyc19wZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaTJzdjNfcGRhdGEsCiAJfSwKIH07CiAKQEAgLTEyMiwxMiArMTUwLDEyIEBACiB9OwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYyMTBfZGV2aWNlX2lpczIgPSB7Ci0JLm5hbWUJCSAgPSAiczNjNjR4eC1paXMiLAorCS5uYW1lCQkgID0gInNhbXN1bmctaTJzIiwKIAkuaWQJCSAgPSAyLAogCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHM1cHYyMTBfaWlzMl9yZXNvdXJjZSksCiAJLnJlc291cmNlCSAgPSBzNXB2MjEwX2lpczJfcmVzb3VyY2UsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmczNjX2kyc19wZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaTJzdjNfcGRhdGEsCiAJfSwKIH07CiAKQEAgLTI4Myw3ICszMTEsNyBAQAogc3RhdGljIHU2NCBzNXB2MjEwX2FjOTdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjIxMF9kZXZpY2VfYWM5NyA9IHsKLQkubmFtZQkJICA9ICJzM2MtYWM5NyIsCisJLm5hbWUJCSAgPSAic2Ftc3VuZy1hYzk3IiwKIAkuaWQJCSAgPSAtMSwKIAkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzNXB2MjEwX2FjOTdfcmVzb3VyY2UpLAogCS5yZXNvdXJjZQkgID0gczVwdjIxMF9hYzk3X3Jlc291cmNlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZwppbmRleCAxMTUwYjM2Li5kNjRlZmUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZwpAQCAtMTEsNiArMTEsNyBAQAogCiBjb25maWcgQ1BVX1M1UFYzMTAKIAlib29sCisJc2VsZWN0IFMzQ19QTDMzMF9ETUEKIAloZWxwCiAJICBFbmFibGUgUzVQVjMxMCBDUFUgc3VwcG9ydAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvTWFrZWZpbGUKaW5kZXggODRhZmM2NC4uNjFlM2NiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9NYWtlZmlsZQpAQCAtMTMsNyArMTMsNyBAQAogIyBDb3JlIHN1cHBvcnQgZm9yIFM1UFYzMTAgc3lzdGVtCiAKIG9iai0kKENPTkZJR19DUFVfUzVQVjMxMCkJKz0gY3B1Lm8gaW5pdC5vIGNsb2NrLm8gaXJxLWNvbWJpbmVyLm8KLW9iai0kKENPTkZJR19DUFVfUzVQVjMxMCkJKz0gc2V0dXAtaTJjMC5vIHRpbWUubyBncGlvbGliLm8gaXJxLWVpbnQubworb2JqLSQoQ09ORklHX0NQVV9TNVBWMzEwKQkrPSBzZXR1cC1pMmMwLm8gdGltZS5vIGdwaW9saWIubyBpcnEtZWludC5vIGRtYS5vCiAKIG9iai0kKENPTkZJR19TTVApCQkrPSBwbGF0c21wLm8gaGVhZHNtcC5vCiBvYmotJChDT05GSUdfTE9DQUxfVElNRVJTKQkrPSBsb2NhbHRpbWVyLm8KQEAgLTI3LDYgKzI3LDcgQEAKIAogIyBkZXZpY2Ugc3VwcG9ydAogCitvYmoteSArPSBkZXYtYXVkaW8ubwogb2JqLSQoQ09ORklHX1M1UFYzMTBfU0VUVVBfSTJDMSkJKz0gc2V0dXAtaTJjMS5vCiBvYmotJChDT05GSUdfUzVQVjMxMF9TRVRVUF9JMkMyKQkrPSBzZXR1cC1pMmMyLm8KIG9iai0kKENPTkZJR19TNVBWMzEwX1NFVFVQX0kyQzMpCSs9IHNldHVwLWkyYzMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2Rldi1hdWRpby5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2Rldi1hdWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOTY0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvZGV2LWF1ZGlvLmMKQEAgLTAsMCArMSwzNjQgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9kZXYtYXVkaW8uYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiBMdGQKKyAqCUphc3dpbmRlciBTaW5naCA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyICpyY2xrc3JjW10gPSB7CisJWzBdID0gImJ1c2NsayIsCisJWzFdID0gImkyc2NsayIsCit9OworCitzdGF0aWMgaW50IHM1cHYzMTBfY2ZnX2kycyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCS8qIGNvbmZpZ3VyZSBHUElPIGZvciBpMnMgcG9ydCAqLworCXN3aXRjaCAocGRldi0+aWQpIHsKKwljYXNlIDA6CisJCXMzY19ncGlvX2NmZ3Bpbl9yYW5nZShTNVBWMzEwX0dQWigwKSwgNywgUzNDX0dQSU9fU0ZOKDIpKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoUzVQVjMxMF9HUEMwKDApLCA1LCBTM0NfR1BJT19TRk4oMikpOworCQlicmVhazsKKwljYXNlIDI6CisJCXMzY19ncGlvX2NmZ3Bpbl9yYW5nZShTNVBWMzEwX0dQQzEoMCksIDUsIFMzQ19HUElPX1NGTig0KSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBEZXZpY2UgJWRcbiIsIHBkZXYtPmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIGkyc3Y1X3BkYXRhID0geworCS5jZmdfZ3BpbyA9IHM1cHYzMTBfY2ZnX2kycywKKwkudHlwZSA9IHsKKwkJLmkycyA9IHsKKwkJCS5xdWlya3MgPSBRVUlSS19QUklfNkNIQU4gfCBRVUlSS19TRUNfREFJCisJCQkJCSB8IFFVSVJLX05FRURfUlNUQ0xSLAorCQkJLnNyY19jbGsgPSByY2xrc3JjLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cHYzMTBfaTJzMF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9JMlMwLAorCQkuZW5kCT0gUzVQVjMxMF9QQV9JMlMwICsgMHgxMDAgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gRE1BQ0hfSTJTMF9UWCwKKwkJLmVuZAk9IERNQUNIX0kyUzBfVFgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBETUFDSF9JMlMwX1JYLAorCQkuZW5kCT0gRE1BQ0hfSTJTMF9SWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IERNQUNIX0kyUzBTX1RYLAorCQkuZW5kCT0gRE1BQ0hfSTJTMFNfVFgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX2kyczAgPSB7CisJLm5hbWUgPSAic2Ftc3VuZy1pMnMiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHM1cHYzMTBfaTJzMF9yZXNvdXJjZSksCisJLnJlc291cmNlID0gczVwdjMxMF9pMnMwX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmkyc3Y1X3BkYXRhLAorCX0sCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcmNsa3NyY192M1tdID0geworCVswXSA9ICJzY2xrX2kycyIsCisJWzFdID0gIm5vX3N1Y2hfY2xvY2siLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgaTJzdjNfcGRhdGEgPSB7CisJLmNmZ19ncGlvID0gczVwdjMxMF9jZmdfaTJzLAorCS50eXBlID0geworCQkuaTJzID0geworCQkJLnF1aXJrcyA9IFFVSVJLX05PX01VWFBTUiwKKwkJCS5zcmNfY2xrID0gcmNsa3NyY192MywKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXB2MzEwX2kyczFfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFM1UFYzMTBfUEFfSTJTMSwKKwkJLmVuZAk9IFM1UFYzMTBfUEFfSTJTMSArIDB4MTAwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IERNQUNIX0kyUzFfVFgsCisJCS5lbmQJPSBETUFDSF9JMlMxX1RYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gRE1BQ0hfSTJTMV9SWCwKKwkJLmVuZAk9IERNQUNIX0kyUzFfUlgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX2kyczEgPSB7CisJLm5hbWUgPSAic2Ftc3VuZy1pMnMiLAorCS5pZCA9IDEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHM1cHYzMTBfaTJzMV9yZXNvdXJjZSksCisJLnJlc291cmNlID0gczVwdjMxMF9pMnMxX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmkyc3YzX3BkYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cHYzMTBfaTJzMl9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9JMlMyLAorCQkuZW5kCT0gUzVQVjMxMF9QQV9JMlMyICsgMHgxMDAgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gRE1BQ0hfSTJTMl9UWCwKKwkJLmVuZAk9IERNQUNIX0kyUzJfVFgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBETUFDSF9JMlMyX1JYLAorCQkuZW5kCT0gRE1BQ0hfSTJTMl9SWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjMxMF9kZXZpY2VfaTJzMiA9IHsKKwkubmFtZSA9ICJzYW1zdW5nLWkycyIsCisJLmlkID0gMiwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoczVwdjMxMF9pMnMyX3Jlc291cmNlKSwKKwkucmVzb3VyY2UgPSBzNXB2MzEwX2kyczJfcmVzb3VyY2UsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaTJzdjNfcGRhdGEsCisJfSwKK307CisKKy8qIFBDTSBDb250cm9sbGVyIHBsYXRmb3JtX2RldmljZXMgKi8KKworc3RhdGljIGludCBzNXB2MzEwX3BjbV9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN3aXRjaCAocGRldi0+aWQpIHsKKwljYXNlIDA6CisJCXMzY19ncGlvX2NmZ3Bpbl9yYW5nZShTNVBWMzEwX0dQWigwKSwgNSwgUzNDX0dQSU9fU0ZOKDMpKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoUzVQVjMxMF9HUEMwKDApLCA1LCBTM0NfR1BJT19TRk4oMykpOworCQlicmVhazsKKwljYXNlIDI6CisJCXMzY19ncGlvX2NmZ3Bpbl9yYW5nZShTNVBWMzEwX0dQQzEoMCksIDUsIFMzQ19HUElPX1NGTigzKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0RFQlVHICJJbnZhbGlkIFBDTSBDb250cm9sbGVyIG51bWJlciEiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIHMzY19wY21fcGRhdGEgPSB7CisJLmNmZ19ncGlvID0gczVwdjMxMF9wY21fY2ZnX2dwaW8sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cHYzMTBfcGNtMF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9QQ00wLAorCQkuZW5kCT0gUzVQVjMxMF9QQV9QQ00wICsgMHgxMDAgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gRE1BQ0hfUENNMF9UWCwKKwkJLmVuZAk9IERNQUNIX1BDTTBfVFgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBETUFDSF9QQ00wX1JYLAorCQkuZW5kCT0gRE1BQ0hfUENNMF9SWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjMxMF9kZXZpY2VfcGNtMCA9IHsKKwkubmFtZSA9ICJzYW1zdW5nLXBjbSIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoczVwdjMxMF9wY20wX3Jlc291cmNlKSwKKwkucmVzb3VyY2UgPSBzNXB2MzEwX3BjbTBfcmVzb3VyY2UsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmczNjX3BjbV9wZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXB2MzEwX3BjbTFfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFM1UFYzMTBfUEFfUENNMSwKKwkJLmVuZAk9IFM1UFYzMTBfUEFfUENNMSArIDB4MTAwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IERNQUNIX1BDTTFfVFgsCisJCS5lbmQJPSBETUFDSF9QQ00xX1RYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gRE1BQ0hfUENNMV9SWCwKKwkJLmVuZAk9IERNQUNIX1BDTTFfUlgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX3BjbTEgPSB7CisJLm5hbWUgPSAic2Ftc3VuZy1wY20iLAorCS5pZCA9IDEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHM1cHYzMTBfcGNtMV9yZXNvdXJjZSksCisJLnJlc291cmNlID0gczVwdjMxMF9wY20xX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnMzY19wY21fcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczVwdjMxMF9wY20yX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBTNVBWMzEwX1BBX1BDTTIsCisJCS5lbmQJPSBTNVBWMzEwX1BBX1BDTTIgKyAweDEwMCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBETUFDSF9QQ00yX1RYLAorCQkuZW5kCT0gRE1BQ0hfUENNMl9UWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IERNQUNIX1BDTTJfUlgsCisJCS5lbmQJPSBETUFDSF9QQ00yX1JYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MzEwX2RldmljZV9wY20yID0geworCS5uYW1lID0gInNhbXN1bmctcGNtIiwKKwkuaWQgPSAyLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzNXB2MzEwX3BjbTJfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSA9IHM1cHYzMTBfcGNtMl9yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfcGNtX3BkYXRhLAorCX0sCit9OworCisvKiBBQzk3IENvbnRyb2xsZXIgcGxhdGZvcm0gZGV2aWNlcyAqLworCitzdGF0aWMgaW50IHM1cHYzMTBfYWM5N19jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBzM2NfZ3Bpb19jZmdwaW5fcmFuZ2UoUzVQVjMxMF9HUEMwKDApLCA1LCBTM0NfR1BJT19TRk4oNCkpOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cHYzMTBfYWM5N19yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9BQzk3LAorCQkuZW5kCT0gUzVQVjMxMF9QQV9BQzk3ICsgMHgxMDAgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gRE1BQ0hfQUM5N19QQ01PVVQsCisJCS5lbmQJPSBETUFDSF9BQzk3X1BDTU9VVCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IERNQUNIX0FDOTdfUENNSU4sCisJCS5lbmQJPSBETUFDSF9BQzk3X1BDTUlOLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gRE1BQ0hfQUM5N19NSUNJTiwKKwkJLmVuZAk9IERNQUNIX0FDOTdfTUlDSU4sCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJWzRdID0geworCQkuc3RhcnQJPSBJUlFfQUM5NywKKwkJLmVuZAk9IElSUV9BQzk3LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgczNjX2FjOTdfcGRhdGEgPSB7CisJLmNmZ19ncGlvID0gczVwdjMxMF9hYzk3X2NmZ19ncGlvLAorfTsKKworc3RhdGljIHU2NCBzNXB2MzEwX2FjOTdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjMxMF9kZXZpY2VfYWM5NyA9IHsKKwkubmFtZSA9ICJzYW1zdW5nLWFjOTciLAorCS5pZCA9IC0xLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzNXB2MzEwX2FjOTdfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSA9IHM1cHYzMTBfYWM5N19yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfYWM5N19wZGF0YSwKKwkJLmRtYV9tYXNrID0gJnM1cHYzMTBfYWM5N19kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAorCX0sCit9OworCisvKiBTL1BESUYgQ29udHJvbGxlciBwbGF0Zm9ybV9kZXZpY2UgKi8KKworc3RhdGljIGludCBzNXB2MzEwX3NwZGlmX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJczNjX2dwaW9fY2ZncGluX3JhbmdlKFM1UFYzMTBfR1BDMSgwKSwgMiwgUzNDX0dQSU9fU0ZOKDMpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cHYzMTBfc3BkaWZfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFM1UFYzMTBfUEFfU1BESUYsCisJCS5lbmQJPSBTNVBWMzEwX1BBX1NQRElGICsgMHgxMDAgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gRE1BQ0hfU1BESUYsCisJCS5lbmQJPSBETUFDSF9TUERJRiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIHNhbXN1bmdfc3BkaWZfcGRhdGEgPSB7CisJLmNmZ19ncGlvID0gczVwdjMxMF9zcGRpZl9jZmdfZ3BpbywKK307CisKK3N0YXRpYyB1NjQgczVwdjMxMF9zcGRpZl9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MzEwX2RldmljZV9zcGRpZiA9IHsKKwkubmFtZSA9ICJzYW1zdW5nLXNwZGlmIiwKKwkuaWQgPSAtMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoczVwdjMxMF9zcGRpZl9yZXNvdXJjZSksCisJLnJlc291cmNlID0gczVwdjMxMF9zcGRpZl9yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzYW1zdW5nX3NwZGlmX3BkYXRhLAorCQkuZG1hX21hc2sgPSAmczVwdjMxMF9zcGRpZl9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMDY2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvZG1hLmMKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4gTHRkLgorICoJSmFzd2luZGVyIFNpbmdoIDxqYXNzaS5icmFyQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9pcnFzLmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorCisjaW5jbHVkZSA8cGxhdC9zM2MtcGwzMzAtcGRhdGEuaD4KKworc3RhdGljIHU2NCBkbWFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczVwdjMxMF9wZG1hMF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9QRE1BMCwKKwkJLmVuZAk9IFM1UFYzMTBfUEFfUERNQTAgKyBTWl80SywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9QRE1BMCwKKwkJLmVuZAk9IElSUV9QRE1BMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX3BsMzMwX3BsYXRkYXRhIHM1cHYzMTBfcGRtYTBfcGRhdGEgPSB7CisJLnBlcmkgPSB7CisJCVswXSA9IERNQUNIX1BDTTBfUlgsCisJCVsxXSA9IERNQUNIX1BDTTBfVFgsCisJCVsyXSA9IERNQUNIX1BDTTJfUlgsCisJCVszXSA9IERNQUNIX1BDTTJfVFgsCisJCVs0XSA9IERNQUNIX01TTV9SRVEwLAorCQlbNV0gPSBETUFDSF9NU01fUkVRMiwKKwkJWzZdID0gRE1BQ0hfU1BJMF9SWCwKKwkJWzddID0gRE1BQ0hfU1BJMF9UWCwKKwkJWzhdID0gRE1BQ0hfU1BJMl9SWCwKKwkJWzldID0gRE1BQ0hfU1BJMl9UWCwKKwkJWzEwXSA9IERNQUNIX0kyUzBTX1RYLAorCQlbMTFdID0gRE1BQ0hfSTJTMF9SWCwKKwkJWzEyXSA9IERNQUNIX0kyUzBfVFgsCisJCVsxM10gPSBETUFDSF9JMlMyX1JYLAorCQlbMTRdID0gRE1BQ0hfSTJTMl9UWCwKKwkJWzE1XSA9IERNQUNIX1VBUlQwX1JYLAorCQlbMTZdID0gRE1BQ0hfVUFSVDBfVFgsCisJCVsxN10gPSBETUFDSF9VQVJUMl9SWCwKKwkJWzE4XSA9IERNQUNIX1VBUlQyX1RYLAorCQlbMTldID0gRE1BQ0hfVUFSVDRfUlgsCisJCVsyMF0gPSBETUFDSF9VQVJUNF9UWCwKKwkJWzIxXSA9IERNQUNIX1NMSU1CVVMwX1JYLAorCQlbMjJdID0gRE1BQ0hfU0xJTUJVUzBfVFgsCisJCVsyM10gPSBETUFDSF9TTElNQlVTMl9SWCwKKwkJWzI0XSA9IERNQUNIX1NMSU1CVVMyX1RYLAorCQlbMjVdID0gRE1BQ0hfU0xJTUJVUzRfUlgsCisJCVsyNl0gPSBETUFDSF9TTElNQlVTNF9UWCwKKwkJWzI3XSA9IERNQUNIX0FDOTdfTUlDSU4sCisJCVsyOF0gPSBETUFDSF9BQzk3X1BDTUlOLAorCQlbMjldID0gRE1BQ0hfQUM5N19QQ01PVVQsCisJCVszMF0gPSBETUFDSF9NQVgsCisJCVszMV0gPSBETUFDSF9NQVgsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX3BkbWEwID0geworCS5uYW1lCQk9ICJzM2MtcGwzMzAiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzNXB2MzEwX3BkbWEwX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBzNXB2MzEwX3BkbWEwX3Jlc291cmNlLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmZG1hX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnM1cHYzMTBfcGRtYTBfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczVwdjMxMF9wZG1hMV9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUzVQVjMxMF9QQV9QRE1BMSwKKwkJLmVuZAk9IFM1UFYzMTBfUEFfUERNQTEgKyBTWl80SywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9QRE1BMSwKKwkJLmVuZAk9IElSUV9QRE1BMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX3BsMzMwX3BsYXRkYXRhIHM1cHYzMTBfcGRtYTFfcGRhdGEgPSB7CisJLnBlcmkgPSB7CisJCVswXSA9IERNQUNIX1BDTTBfUlgsCisJCVsxXSA9IERNQUNIX1BDTTBfVFgsCisJCVsyXSA9IERNQUNIX1BDTTFfUlgsCisJCVszXSA9IERNQUNIX1BDTTFfVFgsCisJCVs0XSA9IERNQUNIX01TTV9SRVExLAorCQlbNV0gPSBETUFDSF9NU01fUkVRMywKKwkJWzZdID0gRE1BQ0hfU1BJMV9SWCwKKwkJWzddID0gRE1BQ0hfU1BJMV9UWCwKKwkJWzhdID0gRE1BQ0hfSTJTMFNfVFgsCisJCVs5XSA9IERNQUNIX0kyUzBfUlgsCisJCVsxMF0gPSBETUFDSF9JMlMwX1RYLAorCQlbMTFdID0gRE1BQ0hfSTJTMV9SWCwKKwkJWzEyXSA9IERNQUNIX0kyUzFfVFgsCisJCVsxM10gPSBETUFDSF9VQVJUMF9SWCwKKwkJWzE0XSA9IERNQUNIX1VBUlQwX1RYLAorCQlbMTVdID0gRE1BQ0hfVUFSVDFfUlgsCisJCVsxNl0gPSBETUFDSF9VQVJUMV9UWCwKKwkJWzE3XSA9IERNQUNIX1VBUlQzX1JYLAorCQlbMThdID0gRE1BQ0hfVUFSVDNfVFgsCisJCVsxOV0gPSBETUFDSF9TTElNQlVTMV9SWCwKKwkJWzIwXSA9IERNQUNIX1NMSU1CVVMxX1RYLAorCQlbMjFdID0gRE1BQ0hfU0xJTUJVUzNfUlgsCisJCVsyMl0gPSBETUFDSF9TTElNQlVTM19UWCwKKwkJWzIzXSA9IERNQUNIX1NMSU1CVVM1X1JYLAorCQlbMjRdID0gRE1BQ0hfU0xJTUJVUzVfVFgsCisJCVsyNV0gPSBETUFDSF9TTElNQlVTMEFVWF9SWCwKKwkJWzI2XSA9IERNQUNIX1NMSU1CVVMwQVVYX1RYLAorCQlbMjddID0gRE1BQ0hfU1BESUYsCisJCVsyOF0gPSBETUFDSF9NQVgsCisJCVsyOV0gPSBETUFDSF9NQVgsCisJCVszMF0gPSBETUFDSF9NQVgsCisJCVszMV0gPSBETUFDSF9NQVgsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX3BkbWExID0geworCS5uYW1lCQk9ICJzM2MtcGwzMzAiLAorCS5pZAkJPSAxLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzNXB2MzEwX3BkbWExX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBzNXB2MzEwX3BkbWExX3Jlc291cmNlLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmZG1hX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnM1cHYzMTBfcGRtYTFfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzNXB2MzEwX2RtYWNzW10gX19pbml0ZGF0YSA9IHsKKwkmczVwdjMxMF9kZXZpY2VfcGRtYTAsCisJJnM1cHYzMTBfZGV2aWNlX3BkbWExLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczVwdjMxMF9kbWFfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHM1cHYzMTBfZG1hY3MsIEFSUkFZX1NJWkUoczVwdjMxMF9kbWFjcykpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHM1cHYzMTBfZG1hX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyMDllYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiBMdGQuCisgKglKYXN3aW5kZXIgU2luZ2ggPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX01BQ0hfRE1BX0gKKyNkZWZpbmUgX19NQUNIX0RNQV9ICisKKy8qIFRoaXMgcGxhdGZvcm0gdXNlcyB0aGUgY29tbW9uIFMzQyBETUEgQVBJIGRyaXZlciBmb3IgUEwzMzAgKi8KKyNpbmNsdWRlIDxwbGF0L3MzYy1kbWEtcGwzMzAuaD4KKworI2VuZGlmIC8qIF9fTUFDSF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCA5OWU3ZGFkLi4zYzA1YzU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtNTQsNiArNTQsOSBAQAogI2RlZmluZSBDT01CSU5FUl9HUk9VUCh4KQkoKHgpICogTUFYX0lSUV9JTl9DT01CSU5FUiArIElSUV9TUEkoNjQpKQogI2RlZmluZSBDT01CSU5FUl9JUlEoeCwgeSkJKENPTUJJTkVSX0dST1VQKHgpICsgeSkKIAorI2RlZmluZSBJUlFfUERNQTAJCUNPTUJJTkVSX0lSUSgyMSwgMCkKKyNkZWZpbmUgSVJRX1BETUExCQlDT01CSU5FUl9JUlEoMjEsIDEpCisKICNkZWZpbmUgSVJRX1RJTUVSMF9WSUMJCUNPTUJJTkVSX0lSUSgyMiwgMCkKICNkZWZpbmUgSVJRX1RJTUVSMV9WSUMJCUNPTUJJTkVSX0lSUSgyMiwgMSkKICNkZWZpbmUgSVJRX1RJTUVSMl9WSUMJCUNPTUJJTkVSX0lSUSgyMiwgMikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IDdhY2Y0ZTcuLjUzOTk0NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtNTIsNiArNTIsMTEgQEAKICNkZWZpbmUgUzVQVjMxMF9QQV9HSUNfRElTVAkJKDB4MTA1MDEwMDApCiAjZGVmaW5lIFM1UFYzMTBfUEFfTDJDQwkJCSgweDEwNTAyMDAwKQogCisvKiBETUEgKi8KKyNkZWZpbmUgUzVQVjMxMF9QQV9NRE1BCQkweDEwODEwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfUERNQTAJMHgxMjY4MDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX1BETUExCTB4MTI2OTAwMDAKKwogI2RlZmluZSBTNVBWMzEwX1BBX0dQSU8xCQkoMHgxMTQwMDAwMCkKICNkZWZpbmUgUzVQVjMxMF9QQV9HUElPMgkJKDB4MTEwMDAwMDApCiAjZGVmaW5lIFM1UFYzMTBfUEFfR1BJTzMJCSgweDAzODYwMDAwKQpAQCAtNjAsNiArNjUsMjIgQEAKIAogI2RlZmluZSBTNVBWMzEwX1BBX1NST01DCQkoMHgxMjU3MDAwMCkKIAorLyogUy9QRElGICovCisjZGVmaW5lIFM1UFYzMTBfUEFfU1BESUYJMHhFMTEwMDAwMAorCisvKiBJMlMgKi8KKyNkZWZpbmUgUzVQVjMxMF9QQV9JMlMwCQkweDAzODMwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfSTJTMQkJMHhFMzEwMDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX0kyUzIJCTB4RTJBMDAwMDAKKworLyogUENNICovCisjZGVmaW5lIFM1UFYzMTBfUEFfUENNMAkJMHgwMzg0MDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX1BDTTEJCTB4MTM5ODAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9QQ00yCQkweDEzOTkwMDAwCisKKy8qIEFDOTcgKi8KKyNkZWZpbmUgUzVQVjMxMF9QQV9BQzk3CQkweDEzOUEwMDAwCisKICNkZWZpbmUgUzVQVjMxMF9QQV9VQVJUCQkJKDB4MTM4MDAwMDApCiAKICNkZWZpbmUgUzVQX1BBX1VBUlQoeCkJCQkoUzVQVjMxMF9QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvcG0uYwppbmRleCBjODNmZGM4Li5hYjlmYzQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BtLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXJldHVybiB2aXJ0X3RvX3BoeXMoc3ApOwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHNhMTF4MF9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHNhMTF4MF9wbV9vcHMgPSB7CiAJLmVudGVyCQk9IHNhMTF4MF9wbV9lbnRlciwKIAkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYwppbmRleCBjZDc5ZDdjLi41Yjk5MzdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXA0ZXZiLmMKQEAgLTcxMSw2ICs3MTEsMTAgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZnNpX2FrNDY0M19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2ZzaTJfYV9hazQ2NDMiLAorfTsKKwogc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIHNoX21vYmlsZV9sY2RjMV9pbmZvID0gewogCS5jbG9ja19zb3VyY2UgPSBMQ0RDX0NMS19FWFRFUk5BTCwKIAkuY2hbMF0gPSB7CkBAIC05MzMsNiArOTM3LDcgQEAKIAkmc2RoaTFfZGV2aWNlLAogCSZ1c2IxX2hvc3RfZGV2aWNlLAogCSZmc2lfZGV2aWNlLAorCSZmc2lfYWs0NjQzX2RldmljZSwKIAkmc2hfbW1jaWZfZGV2aWNlLAogCSZsY2RjMV9kZXZpY2UsCiAJJmxjZGNfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMwMC5jIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMwMC5jCmluZGV4IDM1NjBmOGMuLjVhYTJkNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzAwLmMKQEAgLTM3MSw3ICszNzEsNyBAQAogfTsKIAogLyogQWRkIHNwZWFyMzAwIHNwZWNpZmljIGRldmljZXMgaGVyZSAqLwotLyogYXJtIGdwaW8xIGRldmljZSByZWdpc3RlcmF0aW9uICovCisvKiBhcm0gZ3BpbzEgZGV2aWNlIHJlZ2lzdHJhdGlvbiAqLwogc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8xX3BsYXRfZGF0YSA9IHsKIAkuZ3Bpb19iYXNlCT0gOCwKIAkuaXJxX2Jhc2UJPSBTUEVBUl9HUElPMV9JTlRfQkFTRSwKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCS8qIGNhbGwgc3BlYXIzeHggZmFtaWx5IGNvbW1vbiBpbml0IGZ1bmN0aW9uICovCiAJc3BlYXIzeHhfaW5pdCgpOwogCi0JLyogc2hhcmVkIGlycSByZWdpc3RlcmF0aW9uICovCisJLyogc2hhcmVkIGlycSByZWdpc3RyYXRpb24gKi8KIAlzaGlycV9yYXMxLnJlZ3MuYmFzZSA9CiAJCWlvcmVtYXAoU1BFQVIzMDBfVEVMRUNPTV9CQVNFLCBTUEVBUjMwMF9URUxFQ09NX1JFR19TSVpFKTsKIAlpZiAoc2hpcnFfcmFzMS5yZWdzLmJhc2UpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMTAuYyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMTAuYwppbmRleCA5NmExYWI4Li41M2I0MWI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMxMC5jCkBAIC0yNjYsNyArMjY2LDcgQEAKIAkvKiBjYWxsIHNwZWFyM3h4IGZhbWlseSBjb21tb24gaW5pdCBmdW5jdGlvbiAqLwogCXNwZWFyM3h4X2luaXQoKTsKIAotCS8qIHNoYXJlZCBpcnEgcmVnaXN0ZXJhdGlvbiAqLworCS8qIHNoYXJlZCBpcnEgcmVnaXN0cmF0aW9uICovCiAJYmFzZSA9IGlvcmVtYXAoU1BFQVIzMTBfU09DX0NPTkZJR19CQVNFLCBTUEVBUjMxMF9TT0NfQ09ORklHX1NJWkUpOwogCWlmIChiYXNlKSB7CiAJCS8qIHNoaXJxIDEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMjAuYyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMjAuYwppbmRleCA2YTEyMTk1Li44OGI0NjUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMyMC5jCkBAIC01MTksNyArNTE5LDcgQEAKIAkvKiBjYWxsIHNwZWFyM3h4IGZhbWlseSBjb21tb24gaW5pdCBmdW5jdGlvbiAqLwogCXNwZWFyM3h4X2luaXQoKTsKIAotCS8qIHNoYXJlZCBpcnEgcmVnaXN0ZXJhdGlvbiAqLworCS8qIHNoYXJlZCBpcnEgcmVnaXN0cmF0aW9uICovCiAJYmFzZSA9IGlvcmVtYXAoU1BFQVIzMjBfU09DX0NPTkZJR19CQVNFLCBTUEVBUjMyMF9TT0NfQ09ORklHX1NJWkUpOwogCWlmIChiYXNlKSB7CiAJCS8qIHNoaXJxIDEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzeHguYyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzeHguYwppbmRleCBlODczMTNhLi41MmY1NTNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjN4eC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8bWFjaC9zcGVhci5oPgogCiAvKiBBZGQgc3BlYXIzeHggbWFjaGluZXMgY29tbW9uIGRldmljZXMgaGVyZSAqLwotLyogZ3BpbyBkZXZpY2UgcmVnaXN0ZXJhdGlvbiAqLworLyogZ3BpbyBkZXZpY2UgcmVnaXN0cmF0aW9uICovCiBzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3Bpb19wbGF0X2RhdGEgPSB7CiAJLmdwaW9fYmFzZQk9IDAsCiAJLmlycV9iYXNlCT0gU1BFQVJfR1BJT19JTlRfQkFTRSwKQEAgLTQxLDcgKzQxLDcgQEAKIAkuaXJxID0ge0lSUV9CQVNJQ19HUElPLCBOT19JUlF9LAogfTsKIAotLyogdWFydCBkZXZpY2UgcmVnaXN0ZXJhdGlvbiAqLworLyogdWFydCBkZXZpY2UgcmVnaXN0cmF0aW9uICovCiBzdHJ1Y3QgYW1iYV9kZXZpY2UgdWFydF9kZXZpY2UgPSB7CiAJLmRldiA9IHsKIAkJLmluaXRfbmFtZSA9ICJ1YXJ0IiwKQEAgLTU0Myw2ICs1NDMsNiBAQAogCiBwbXhfZmFpbDoKIAlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgInBhZG11eDogcmVnaXN0ZXJhdGlvbiBmYWlsZWQuIGVyciBubzogJWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiAicGFkbXV4OiByZWdpc3RyYXRpb24gZmFpbGVkLiBlcnIgbm86ICVkXG4iLAogCQkJCXJldCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNnh4LmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNnh4LmMKaW5kZXggYmFmNmJjYy4uZjJmZTE0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9zcGVhcjZ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvc3BlYXI2eHguYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KIAogLyogQWRkIHNwZWFyNnh4IG1hY2hpbmVzIGNvbW1vbiBkZXZpY2VzIGhlcmUgKi8KLS8qIHVhcnQgZGV2aWNlIHJlZ2lzdGVyYXRpb24gKi8KKy8qIHVhcnQgZGV2aWNlIHJlZ2lzdHJhdGlvbiAqLwogc3RydWN0IGFtYmFfZGV2aWNlIHVhcnRfZGV2aWNlW10gPSB7CiAJewogCQkuZGV2ID0gewpAQCAtNTAsNyArNTAsNyBAQAogCX0KIH07CiAKLS8qIGdwaW8gZGV2aWNlIHJlZ2lzdGVyYXRpb24gKi8KKy8qIGdwaW8gZGV2aWNlIHJlZ2lzdHJhdGlvbiAqLwogc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW9fcGxhdF9kYXRhW10gPSB7CiAJewogCQkuZ3Bpb19iYXNlCT0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL3NkaGNpLmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9zZGhjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZDA4NmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9zZGhjaS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC10ZWdyYS9pbmNsdWRlL21hY2gvc2RoY2kuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBQYWxtLCBJbmMuCisgKiBBdXRob3I6IFl2b25uZSBZaXAgPHlAcGFsbS5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfVEVHUkFfU0RIQ0lfSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9URUdSQV9TREhDSV9ICisKKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorCitzdHJ1Y3QgdGVncmFfc2RoY2lfcGxhdGZvcm1fZGF0YSB7CisJaW50IGNkX2dwaW87CisJaW50IHdwX2dwaW87CisJaW50IHBvd2VyX2dwaW87CisJaW50IGlzXzhiaXQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC11MzAwL0tjb25maWcKaW5kZXggODAxYjIxZS4uMzJhN2IwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL0tjb25maWcKQEAgLTY0LDcgKzY0LDcgQEAKIAlib29sICJEdWFsIFJBTSIKIAloZWxwCiAJCVNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIER1YWwgUkFNIHBob25lcy4KLQkJVGhpcyBpcyB0d28gUkFNIG1lbW9yeXMgb24gZGlmZmVyZW50IEVNSUZzLgorCQlUaGlzIGlzIHR3byBSQU0gbWVtb3JpZXMgb24gZGlmZmVyZW50IEVNSUZzLgogZW5kY2hvaWNlCiAKIGNvbmZpZyBVMzAwX0RFQlVHCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2NvaDkwMTMxOC5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9jb2g5MDEzMTguaAppbmRleCAxOTNkYTJkLi42MTkzYWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2NvaDkwMTMxOC5oCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvY29oOTAxMzE4LmgKQEAgLTI0LDcgKzI0LDcgQEAKICAqIEBzcmNfYWRkcjogdHJhbnNmZXIgc291cmNlIGFkZHJlc3MKICAqIEBkc3RfYWRkcjogdHJhbnNmZXIgZGVzdGluYXRpb24gYWRkcmVzcwogICogQGxpbmtfYWRkcjogIHBoeXNpY2FsIGFkZHJlc3MgdG8gbmV4dCBsbGkKLSAqIEB2aXJ0X2xpbmtfYWRkcjogdmlydHVhbCBhZGRyZXMgb2YgbmV4dCBsbGkgKG9ubHkgdXNlZCBieSBwb29sX2ZyZWUpCisgKiBAdmlydF9saW5rX2FkZHI6IHZpcnR1YWwgYWRkcmVzcyBvZiBuZXh0IGxsaSAob25seSB1c2VkIGJ5IHBvb2xfZnJlZSkKICAqIEBwaHlfdGhpczogcGh5c2ljYWwgYWRkcmVzcyBvZiBjdXJyZW50IGxsaSAob25seSB1c2VkIGJ5IHBvb2xfZnJlZSkKICAqLwogc3RydWN0IGNvaDkwMTMxOF9sbGkgewpAQCAtOTAsNyArOTAsNyBAQAogICogc3RydWN0IGNvaDkwMTMxOF9wbGF0Zm9ybSAtIHBsYXRmb3JtIGFyY2ggc3RydWN0dXJlCiAgKiBAY2hhbnNfc2xhdmU6IHNwZWNpZnlpbmcgZG1hIHNsYXZlIGNoYW5uZWxzCiAgKiBAY2hhbnNfbWVtY3B5OiBzcGVjaWZ5aW5nIGRtYSBtZW1jcHkgY2hhbm5lbHMKLSAqIEBhY2Nlc3NfbWVtb3J5X3N0YXRlOiByZXF1ZXN0aW5nIERNQSBtZW1lb3J5IGFjY2VzcyAob24gLyBvZmYpCisgKiBAYWNjZXNzX21lbW9yeV9zdGF0ZTogcmVxdWVzdGluZyBETUEgbWVtb3J5IGFjY2VzcyAob24gLyBvZmYpCiAgKiBAY2hhbl9jb25mOiBkbWEgY2hhbm5lbCBjb25maWd1cmF0aW9ucwogICogQG1heF9jaGFubmVsczogbWF4IG51bWJlciBvZiBkbWEgY2hhbmVubHMKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAtcmVndWxhdG9ycy5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAtcmVndWxhdG9ycy5jCmluZGV4IDExODdmMWYuLjUzMzk2N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLXJlZ3VsYXRvcnMuYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC1yZWd1bGF0b3JzLmMKQEAgLTMsOTkgKzMsOTQgQEAKICAqCiAgKiBMaWNlbnNlIFRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MgogICoKLSAqIEF1dGhvcjogU3VuZGFyIEl5ZXIgPHN1bmRhci5peWVyQHN0ZXJpY3Nzb24uY29tPgorICogQXV0aG9yczogU3VuZGFyIEl5ZXIgPHN1bmRhci5peWVyQHN0ZXJpY3Nzb24uY29tPgorICogICAgICAgICAgQmVuZ3QgSm9uc3NvbiA8YmVuZ3QuZy5qb25zc29uQHN0ZXJpY3Nzb24uY29tPgogICoKICAqIE1PUDUwMCBib2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBmb3IgcmVndWxhdG9ycwogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvYWI4NTAwLmg+CiAKLS8qIHN1cHBsaWVzIHRvIHRoZSBkaXNwbGF5L2NhbWVyYSAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFiODUwMF92YXV4MV9yZWd1bGF0b3IgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJWLURJU1BMQVkiLAotCQkubWluX3VWID0gMjUwMDAwMCwKLQkJLm1heF91ViA9IDI5MDAwMDAsCi0JCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRXwKLQkJCQkJUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisvKiBBQjg1MDAgcmVndWxhdG9ycyAqLworc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYWI4NTAwX3JlZ3VsYXRvcnNbQUI4NTAwX05VTV9SRUdVTEFUT1JTXSA9IHsKKwkvKiBzdXBwbGllcyB0byB0aGUgZGlzcGxheS9jYW1lcmEgKi8KKwlbQUI4NTAwX0xET19BVVgxXSA9IHsKKwkJLmNvbnN0cmFpbnRzID0geworCQkJLm5hbWUgPSAiVi1ESVNQTEFZIiwKKwkJCS5taW5fdVYgPSAyNTAwMDAwLAorCQkJLm1heF91ViA9IDI5MDAwMDAsCisJCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAorCQkJCQkgIFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQl9LAorCX0sCisJLyogc3VwcGxpZXMgdG8gdGhlIG9uLWJvYXJkIGVNTUMgKi8KKwlbQUI4NTAwX0xET19BVVgyXSA9IHsKKwkJLmNvbnN0cmFpbnRzID0geworCQkJLm5hbWUgPSAiVi1lTU1DMSIsCisJCQkubWluX3VWID0gMTEwMDAwMCwKKwkJCS5tYXhfdVYgPSAzMzAwMDAwLAorCQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKKwkJCQkJICBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJfSwKKwl9LAorCS8qIHN1cHBseSBmb3IgVkFVWDMsIHN1cHBsaWVzIHRvIFNEY2FyZCBzbG90cyAqLworCVtBQjg1MDBfTERPX0FVWDNdID0geworCQkuY29uc3RyYWludHMgPSB7CisJCQkubmFtZSA9ICJWLU1NQy1TRCIsCisJCQkubWluX3VWID0gMTEwMDAwMCwKKwkJCS5tYXhfdVYgPSAzMzAwMDAwLAorCQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKKwkJCQkJICBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJfSwKKwl9LAorCS8qIHN1cHBseSBmb3IgdHZvdXQsIGdwYWRjLCBUVk9VVCBMRE8gKi8KKwlbQUI4NTAwX0xET19UVk9VVF0gPSB7CisJCS5jb25zdHJhaW50cyA9IHsKKwkJCS5uYW1lID0gIlYtVFZPVVQiLAorCQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCX0sCisJfSwKKwkvKiBzdXBwbHkgZm9yIGFiODUwMC12YXVkaW8sIFZBVURJTyBMRE8gKi8KKwlbQUI4NTAwX0xET19BVURJT10gPSB7CisJCS5jb25zdHJhaW50cyA9IHsKKwkJCS5uYW1lID0gIlYtQVVEIiwKKwkJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQl9LAorCX0sCisJLyogc3VwcGx5IGZvciB2LWFuYW1pYzEgVkFNaWMxLUxETyAqLworCVtBQjg1MDBfTERPX0FOQU1JQzFdID0geworCQkuY29uc3RyYWludHMgPSB7CisJCQkubmFtZSA9ICJWLUFNSUMxIiwKKwkJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQl9LAorCX0sCisJLyogc3VwcGx5IGZvciB2LWFtaWMyLCBWQU1JQzIgTERPLCByZXVzZSBjb25zdGFudHMgZm9yIEFNSUMxICovCisJW0FCODUwMF9MRE9fQU5BTUlDMl0gPSB7CisJCS5jb25zdHJhaW50cyA9IHsKKwkJCS5uYW1lID0gIlYtQU1JQzIiLAorCQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCX0sCisJfSwKKwkvKiBzdXBwbHkgZm9yIHYtZG1pYywgVkRNSUMgTERPICovCisJW0FCODUwMF9MRE9fRE1JQ10gPSB7CisJCS5jb25zdHJhaW50cyA9IHsKKwkJCS5uYW1lID0gIlYtRE1JQyIsCisJCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJfSwKKwl9LAorCS8qIHN1cHBseSBmb3Igdi1pbnRjb3JlMTIsIFZJTlRDT1JFMTIgTERPICovCisJW0FCODUwMF9MRE9fSU5UQ09SRV0gPSB7CisJCS5jb25zdHJhaW50cyA9IHsKKwkJCS5uYW1lID0gIlYtSU5UQ09SRSIsCisJCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJfSwKKwl9LAorCS8qIHN1cHBseSBmb3IgVTg1MDAgQ1NJL0RTSSwgVkFOQSBMRE8gKi8KKwlbQUI4NTAwX0xET19BTkFdID0geworCQkuY29uc3RyYWludHMgPSB7CisJCQkubmFtZSA9ICJWLUNTSS9EU0kiLAorCQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCX0sCiAJfSwKIH07Ci0KLS8qIHN1cHBsaWVzIHRvIHRoZSBvbi1ib2FyZCBlTU1DICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYWI4NTAwX3ZhdXgyX3JlZ3VsYXRvciA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5uYW1lID0gIlYtZU1NQzEiLAotCQkubWluX3VWID0gMTEwMDAwMCwKLQkJLm1heF91ViA9IDMzMDAwMDAsCi0JCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRXwKLQkJCQkJUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCi0JfSwKLX07Ci0KLS8qIHN1cHBseSBmb3IgVkFVWDMsIHN1cHBsaWVzIHRvIFNEY2FyZCBzbG90cyAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFiODUwMF92YXV4M19yZWd1bGF0b3IgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJWLU1NQy1TRCIsCi0JCS5taW5fdVYgPSAxMTAwMDAwLAotCQkubWF4X3VWID0gMzMwMDAwMCwKLQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFfAotCQkJCQlSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQl9LAotfTsKLQotLyogc3VwcGx5IGZvciB0dm91dCwgZ3BhZGMsIFRWT1VUIExETyAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFiODUwMF92dHZvdXRfaW5pdCA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5uYW1lID0gIlYtVFZPVVQiLAotCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQl9LAotfTsKLQotLyogc3VwcGx5IGZvciBhYjg1MDAtdmF1ZGlvLCBWQVVESU8gTERPICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYWI4NTAwX3ZhdWRpb19pbml0ID0gewotCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiVi1BVUQiLAotCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQl9LAotfTsKLQotLyogc3VwcGx5IGZvciB2LWFuYW1pYzEgVkFNaWMxLUxETyAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFiODUwMF92YW1pYzFfaW5pdCA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5uYW1lID0gIlYtQU1JQzEiLAotCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQl9LAotfTsKLQotLyogc3VwcGx5IGZvciB2LWFtaWMyLCBWQU1JQzIgTERPLCByZXVzZSBjb25zdGFudHMgZm9yIEFNSUMxICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYWI4NTAwX3ZhbWljMl9pbml0ID0gewotCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiVi1BTUlDMiIsCi0JCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCX0sCi19OwotCi0vKiBzdXBwbHkgZm9yIHYtZG1pYywgVkRNSUMgTERPICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYWI4NTAwX3ZkbWljX2luaXQgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJWLURNSUMiLAotCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQl9LAotfTsKLQotLyogc3VwcGx5IGZvciB2LWludGNvcmUxMiwgVklOVENPUkUxMiBMRE8gKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBhYjg1MDBfdmludGNvcmVfaW5pdCA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5uYW1lID0gIlYtSU5UQ09SRSIsCi0JCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCX0sCi19OwotCi0vKiBzdXBwbHkgZm9yIFU4NTAwIENTSS9EU0ksIFZBTkEgTERPICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYWI4NTAwX3ZhbmFfaW5pdCA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5uYW1lID0gIlYtQ1NJL0RTSSIsCi0JCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCX0sCi19OwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC1yZWd1bGF0b3JzLmggYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC1yZWd1bGF0b3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3NWZhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLXJlZ3VsYXRvcnMuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiBTQSAyMDEwCisgKgorICogTGljZW5zZSBUZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIKKyAqCisgKiBBdXRob3I6IEJlbmd0IEpvbnNzb24gPGJlbmd0Lmcuam9uc3NvbkBzdGVyaWNzc29uLmNvbT4gZm9yIFNULUVyaWNzc29uCisgKgorICogTU9QNTAwIGJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZvciByZWd1bGF0b3JzCisgKi8KKworI2lmbmRlZiBfX0JPQVJEX01PUDUwMF9SRUdVTEFUT1JTX0gKKyNkZWZpbmUgX19CT0FSRF9NT1A1MDBfUkVHVUxBVE9SU19ICisKKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9hYjg1MDAuaD4KKworZXh0ZXJuIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFiODUwMF9yZWd1bGF0b3JzW0FCODUwMF9OVU1fUkVHVUxBVE9SU107CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmMKaW5kZXggYTFjOWVhMS4uYTM5M2Y1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiZGV2aWNlcy1kYjg1MDAuaCIKICNpbmNsdWRlICJwaW5zLWRiODUwMC5oIgogI2luY2x1ZGUgImJvYXJkLW1vcDUwMC5oIgorI2luY2x1ZGUgImJvYXJkLW1vcDUwMC1yZWd1bGF0b3JzLmgiCiAKIHN0YXRpYyBwaW5fY2ZnX3QgbW9wNTAwX3BpbnNbXSA9IHsKIAkvKiBTU1AwICovCkBAIC04MCw2ICs4MSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYWI4NTAwX3BsYXRmb3JtX2RhdGEgYWI4NTAwX3BsYXRkYXRhID0gewogCS5pcnFfYmFzZQk9IE1PUDUwMF9BQjg1MDBfSVJRX0JBU0UsCisJLnJlZ3VsYXRvcgk9IGFiODUwMF9yZWd1bGF0b3JzLAorCS5udW1fcmVndWxhdG9yCT0gQVJSQVlfU0laRShhYjg1MDBfcmVndWxhdG9ycyksCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGFiODUwMF9yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZsdXNoLmMgYi9hcmNoL2FybS9tbS9mbHVzaC5jCmluZGV4IGMyOWYyODMuLjJiMjY5YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZsdXNoLmMKKysrIGIvYXJjaC9hcm0vbW0vZmx1c2guYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KIAogI2luY2x1ZGUgIm1tLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDU4YTQ5Y2MuLmJhNjVjOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtNzAsNyArNzAsNyBAQAogCiAvKiBhbGwgbm9ybWFsIElSUXMgY2FuIGJlIEZJUXMgKi8KICNkZWZpbmUgRklRX1NUQVJUCTAKLS8qIHN3aXRjaCBiZXR3ZWFuIElSUSBhbmQgRklRICovCisvKiBzd2l0Y2ggYmV0d2VlbiBJUlEgYW5kIEZJUSAqLwogZXh0ZXJuIGludCBteGNfc2V0X2lycV9maXEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpOwogCiAjZW5kaWYgLyogX19BU01fQVJDSF9NWENfSVJRU19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9od21vZC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwX2h3bW9kLmgKaW5kZXggNjg2NGE5OS4uMWVlZTg1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwX2h3bW9kLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwX2h3bW9kLmgKQEAgLTM1MSw3ICszNTEsNyBAQAogLyoqCiAgKiBzdHJ1Y3Qgb21hcF9od21vZF9vbWFwNF9wcmNtIC0gT01BUDQtc3BlY2lmaWMgUFJDTSBkYXRhCiAgKiBAY2xrY3RybF9yZWc6IFBSQ00gYWRkcmVzcyBvZiB0aGUgY2xvY2sgY29udHJvbCByZWdpc3RlcgotICogQHJzdGN0cmxfcmVnOiBhZHJlc3Mgb2YgdGhlIFhYWF9SU1RDVFJMIHJlZ2lzdGVyIGxvY2F0ZWQgaW4gdGhlIFBSTQorICogQHJzdGN0cmxfcmVnOiBhZGRyZXNzIG9mIHRoZSBYWFhfUlNUQ1RSTCByZWdpc3RlciBsb2NhdGVkIGluIHRoZSBQUk0KICAqIEBzdWJtb2R1bGVfd2tkZXBfYml0OiBiaXQgc2hpZnQgb2YgdGhlIFdLREVQIHJhbmdlCiAgKi8KIHN0cnVjdCBvbWFwX2h3bW9kX29tYXA0X3ByY20gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMKaW5kZXggMmY5MTA1Ny4uOGE0MmJjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jCkBAIC0yNTksMjEgKzI1OSw2IEBACiAKIEVYUE9SVF9TWU1CT0woczNjX2RldmljZV9paXMpOwogCi0vKiBBU29DIFBDTSBETUEgKi8KLQotc3RhdGljIHU2NCBzM2NfZGV2aWNlX2F1ZGlvX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9wY20gPSB7Ci0JLm5hbWUJCSAgPSAiczNjMjR4eC1wY20tYXVkaW8iLAotCS5pZAkJICA9IC0xLAotCS5kZXYgICAgICAgICAgICAgID0gewotCQkuZG1hX21hc2sgPSAmczNjX2RldmljZV9hdWRpb19kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmVUwKLQl9Ci19OwotCi1FWFBPUlRfU1lNQk9MKHMzY19kZXZpY2VfcGNtKTsKLQogLyogUlRDICovCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX3J0Y19yZXNvdXJjZVtdID0gewpAQCAtNDk2LDggKzQ4MSwxMCBAQAogCX0sCiB9OwogCitzdGF0aWMgdTY0IHMzY19kZXZpY2VfYXVkaW9fZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKwogc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2FjOTcgPSB7Ci0JLm5hbWUJCSAgPSAiczNjLWFjOTciLAorCS5uYW1lCQkgID0gInNhbXN1bmctYWM5NyIsCiAJLmlkCQkgID0gLTEsCiAJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjX2FjOTdfcmVzb3VyY2UpLAogCS5yZXNvdXJjZQkgID0gczNjX2FjOTdfcmVzb3VyY2UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvTWFrZWZpbGUKaW5kZXggYWZjY2U0Ny4uMTlkOGExNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9NYWtlZmlsZQpAQCAtMTcsNiArMTcsNyBAQAogb2JqLXkJCQkJKz0gcHdtLWNsb2NrLm8KIG9iai15CQkJCSs9IGdwaW8ubwogb2JqLXkJCQkJKz0gZ3Bpby1jb25maWcubworb2JqLXkJCQkJKz0gZGV2LWFzb2NkbWEubwogCiBvYmotJChDT05GSUdfU0FNU1VOR19HUElPTElCXzRCSVQpCSs9IGdwaW9saWIubwogb2JqLSQoQ09ORklHX1NBTVNVTkdfQ0xLU1JDKQkrPSBjbG9jay1jbGtzcmMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1hc29jZG1hLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LWFzb2NkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDY4YzRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1hc29jZG1hLmMKQEAgLTAsMCArMSwyNSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1hc29jZG1hLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4gTHRkCisgKglKYXN3aW5kZXIgU2luZ2ggPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKworc3RhdGljIHU2NCBhdWRpb19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzYW1zdW5nX2Fzb2NfZG1hID0geworCS5uYW1lCQkgID0gInNhbXN1bmctYXVkaW8iLAorCS5pZAkJICA9IC0xLAorCS5kZXYgICAgICAgICAgICAgID0geworCQkuZG1hX21hc2sgPSAmYXVkaW9fZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9Cit9OworRVhQT1JUX1NZTUJPTChzYW1zdW5nX2Fzb2NfZG1hKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvYXVkaW8uaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvYXVkaW8uaAppbmRleCA3NzEyZmY2Li5hMDgyNmVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2F1ZGlvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9hdWRpby5oCkBAIC0yNSwxMCArMjUsMzQgQEAKICNkZWZpbmUgUzVQQzEwMF9TUERJRl9HUEczIDEKIGV4dGVybiB2b2lkIHM1cGMxMDBfc3BkaWZfc2V0dXBfZ3BpbyhpbnQpOwogCitzdHJ1Y3Qgc2Ftc3VuZ19pMnMgeworLyogSWYgdGhlIFByaW1hcnkgREFJIGhhcyA1LjEgQ2hhbm5lbHMgKi8KKyNkZWZpbmUgUVVJUktfUFJJXzZDSEFOCQkoMSA8PCAwKQorLyogSWYgdGhlIEkyUyBibG9jayBoYXMgYSBTdGVyZW8gT3ZlcmxheSBDaGFubmVsICovCisjZGVmaW5lIFFVSVJLX1NFQ19EQUkJCSgxIDw8IDEpCisvKgorICogSWYgdGhlIEkyUyBibG9jayBoYXMgbm8gaW50ZXJuYWwgcHJlc2NhbGFyIG9yIE1VWCAoSTJTTU9EWzEwXSBiaXQpCisgKiBUaGUgTWFjaGluZSBkcml2ZXIgbXVzdCBwcm92aWRlIHN1aXRhYmx5IHNldCBjbG9jayB0byB0aGUgSTJTIGJsb2NrLgorICovCisjZGVmaW5lIFFVSVJLX05PX01VWFBTUgkJKDEgPDwgMikKKyNkZWZpbmUgUVVJUktfTkVFRF9SU1RDTFIJKDEgPDwgMykKKwkvKiBRdWlya3Mgb2YgdGhlIEkyUyBjb250cm9sbGVyICovCisJdTMyIHF1aXJrczsKKworCS8qCisJICogQXJyYXkgb2YgY2xvY2sgbmFtZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBJMlMgc2lnbmFscy4KKwkgKiBBbHNvIGNvcnJlc3BvbmRzIHRvIGNsb2NrcyBvZiBJMlNNT0RbMTBdCisJICovCisJY29uc3QgY2hhciAqKnNyY19jbGs7Cit9OworCiAvKioKICAqIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgLSBjb21tb24gcGxhdGZvcm0gZGF0YSBmb3IgYXVkaW8gZGV2aWNlIGRyaXZlcnMKICAqIEBjZmdfZ3BpbzogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gc2V0dXAgbXV4J2VkIHBpbnMgaW4gSTJTL1BDTS9BQzk3IG1vZGUKICAqLwogc3RydWN0IHMzY19hdWRpb19wZGF0YSB7CiAJaW50ICgqY2ZnX2dwaW8pKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CisJdW5pb24geworCQlzdHJ1Y3Qgc2Ftc3VuZ19pMnMgaTJzOworCX0gdHlwZTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RldnMuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZGV2cy5oCmluZGV4IDJkODJhNmMuLmU5ZTNiNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZGV2cy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZGV2cy5oCkBAIC0zMiw3ICszMiw3IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9zcGkwOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjNjR4eF9kZXZpY2Vfc3BpMTsKIAotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9wY207CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzYW1zdW5nX2Fzb2NfZG1hOwogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9wY20wOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjNjR4eF9kZXZpY2VfcGNtMTsKQEAgLTk2LDYgKzk2LDE1IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MjEwX2RldmljZV9paXMyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjIxMF9kZXZpY2Vfc3BkaWY7CiAKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX2FjOTc7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MzEwX2RldmljZV9wY20wOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjMxMF9kZXZpY2VfcGNtMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX3BjbTI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MzEwX2RldmljZV9pMnMwOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjMxMF9kZXZpY2VfaTJzMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cHYzMTBfZGV2aWNlX2kyczI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MzEwX2RldmljZV9zcGRpZjsKKwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwNjQ0Ml9kZXZpY2VfcGNtMDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cDY0NDJfZGV2aWNlX3BjbTE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXA2NDQyX2RldmljZV9paXMwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3BtLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0uYwppbmRleCAyN2NmY2E1Li41YmYzZjJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0uYworKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0uYwpAQCAtMzU1LDcgKzM1NSw3IEBACiAJczNjX3BtX2NoZWNrX2NsZWFudXAoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBzM2NfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBzM2NfcG1fb3BzID0gewogCS5lbnRlcgkJPSBzM2NfcG1fZW50ZXIsCiAJLnByZXBhcmUJPSBzM2NfcG1fcHJlcGFyZSwKIAkuZmluaXNoCQk9IHMzY19wbV9maW5pc2gsCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3BtLmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3BtLmMKaW5kZXggZjAyMWVkZi4uMzJkNjgwZSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9wbS5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvcG0uYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgYXZyMzJfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBhdnIzMl9wbV9vcHMgPSB7CiAJLnZhbGlkCT0gYXZyMzJfcG1fdmFsaWRfc3RhdGUsCiAJLmVudGVyCT0gYXZyMzJfcG1fZW50ZXIsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9NYWtlZmlsZSBiL2FyY2gvYmxhY2tmaW4vTWFrZWZpbGUKaW5kZXggNDY3MzhkNC4uNDZmNDJiMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9NYWtlZmlsZQorKysgYi9hcmNoL2JsYWNrZmluL01ha2VmaWxlCkBAIC0xOSw3ICsxOSw3IEBACiBlbmRpZgogS0JVSUxEX0FGTEFHUyAgICAgICAgICAgKz0gJChjYWxsIGNjLW9wdGlvbiwtbW5vLWZkcGljKQogS0JVSUxEX0NGTEFHU19NT0RVTEUgICAgKz0gLW1sb25nLWNhbGxzCi1LQlVJTERfTERGTEFHU19NT0RVTEUgICArPSAtbSBlbGYzMmJmaW4KK0xERkxBR1MgICAgICAgICAgICAgICAgICs9IC1tIGVsZjMyYmZpbgogS0FMTFNZTVMgICAgICAgICArPSAtLXN5bWJvbC1wcmVmaXg9XwogCiBLQlVJTERfREVGQ09ORklHIDo9IEJGNTM3LVNUQU1QX2RlZmNvbmZpZwpAQCAtOTcsOCArOTcsMTEgQEAKIHJldi0kKENPTkZJR19CRl9SRVZfTk9ORSkgOj0gbm9uZQogcmV2LSQoQ09ORklHX0JGX1JFVl9BTlkpICA6PSBhbnkKIAotS0JVSUxEX0NGTEFHUyArPSAtbWNwdT0kKGNwdS15KS0kKHJldi15KQotS0JVSUxEX0FGTEFHUyArPSAtbWNwdT0kKGNwdS15KS0kKHJldi15KQorQ1BVX1JFViA6PSAkKGNwdS15KS0kKHJldi15KQorZXhwb3J0IENQVV9SRVYKKworS0JVSUxEX0NGTEFHUyArPSAtbWNwdT0kKENQVV9SRVYpCitLQlVJTERfQUZMQUdTICs9IC1tY3B1PSQoQ1BVX1JFVikKIAogIyAtIHdlIHV0aWxpemUgdGhlIHNpbGljb24gcmV2IGZyb20gdGhlIHRvb2xjaGFpbiwgc28gbW92ZSBpdCBvdmVyIHRvIHRoZSBjaGVja2ZsYWdzCiBDSEVDS0ZMQUdTX1NJTElDT04gPSAkKHNoZWxsIGVjaG8gIiIgfCAkKENQUCkgJChLQlVJTERfQ0ZMQUdTKSAtZEQgLSAyPi9kZXYvbnVsbCB8IGF3ayAnJCQyID09ICJfX1NJTElDT05fUkVWSVNJT05fXyIgeyBwcmludCAkJDMgfScpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL2JsYWNrZmluL2Jvb3QvTWFrZWZpbGUKaW5kZXggMTNkMmRiZC4uMGE0OTI3OSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvYmxhY2tmaW4vYm9vdC9NYWtlZmlsZQpAQCAtMTcsNyArMTcsNyBAQAogCiBxdWlldF9jbWRfdWltYWdlID0gVUlNQUdFICAkQAogICAgICAgY21kX3VpbWFnZSA9ICQoQ09ORklHX1NIRUxMKSAkKE1LSU1BR0UpIC1BICQoQVJDSCkgLU8gbGludXggLVQga2VybmVsIFwKLSAgICAgICAgICAgICAgICAgICAtQyAkKDIpIC1uICckKE1BQ0hJTkUpLSQoS0VSTkVMUkVMRUFTRSknIFwKKyAgICAgICAgICAgICAgICAgICAtQyAkKDIpIC1uICckKENQVV9SRVYpLSQoS0VSTkVMUkVMRUFTRSknIFwKICAgICAgICAgICAgICAgICAgICAtZSAkKHNoZWxsICQoTk0pIHZtbGludXggfCBhd2sgJyQkTkYgPT0gIl9fc3RhcnQiIHtwcmludCAkJDF9JykgXAogICAgICAgICAgICAgICAgICAgICQoVUlNQUdFX09QVFMteSkgLWQgJDwgJEAKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lULVNNUF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVQtU01QX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2Y0NTEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lULVNNUF9kZWZjb25maWcKQEAgLTAsMCArMSwxMTMgQEAKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJR05BTEZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSRkQgaXMgbm90IHNldAorIyBDT05GSUdfRVZFTlRGRCBpcyBub3Qgc2V0CisjIENPTkZJR19BSU8gaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRD15CitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CitDT05GSUdfQkY1NjE9eQorQ09ORklHX1NNUD15CitDT05GSUdfSVJRX1RJTUVSMD0xMAorQ09ORklHX0NMS0lOX0haPTMwMDAwMDAwCitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19OT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTPTAKK0NPTkZJR19CRklOX0dQVElNRVJTPW0KK0NPTkZJR19DX0NEUFJJTz15CitDT05GSUdfQkFOS18zPTB4QUFDMgorQ09ORklHX0JJTkZNVF9GTEFUPXkKK0NPTkZJR19CSU5GTVRfWkZMQVQ9eQorQ09ORklHX1BNPXkKK0NPTkZJR19ORVQ9eQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfVU5JWD15CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CitDT05GSUdfSVJEQT1tCitDT05GSUdfSVJMQU49bQorQ09ORklHX0lSQ09NTT1tCitDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVA9eQorQ09ORklHX0lSVFRZX1NJUj1tCisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX0NIQVI9bQorQ09ORklHX01URF9CTE9DSz15CitDT05GSUdfTVREX0NGST1tCitDT05GSUdfTVREX0NGSV9BTURTVEQ9bQorQ09ORklHX01URF9SQU09eQorQ09ORklHX01URF9ST009bQorQ09ORklHX01URF9QSFlTTUFQPW0KK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUPW0KKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj1tCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX0pUQUdfQ09NTT1tCitDT05GSUdfU0VSSUFMX0JGSU49eQorQ09ORklHX1NFUklBTF9CRklOX0NPTlNPTEU9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9CRklOPXkKK0NPTkZJR19HUElPTElCPXkKK0NPTkZJR19HUElPX1NZU0ZTPXkKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CitDT05GSUdfQkZJTl9XRFQ9eQorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9bQorQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19TTUJfRlM9bQorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfU0hJUlE9eQorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01NUlM9eQorQ09ORklHX0RFQlVHX0hXRVJSPXkKK0NPTkZJR19FWEFDVF9IV0VSUj15CitDT05GSUdfREVCVUdfRE9VQkxFRkFVTFQ9eQorQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTl9PTkU9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfQ1BMQl9JTkZPPXkKK0NPTkZJR19DUllQVE89eQorIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0ROUDUzNzBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0ROUDUzNzBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYmM3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvRE5QNTM3MF9kZWZjb25maWcKQEAgLTAsMCArMSwxMjEgQEAKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0FMVkVSU0lPTj0iRE5QNTM3MCIKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU0xPQj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfQkY1Mzc9eQorQ09ORklHX0JGX1JFVl8wXzM9eQorQ09ORklHX0ROUDUzNzA9eQorQ09ORklHX0lSUV9FUlJPUj03CisjIENPTkZJR19DWUNMRVNfQ0xPQ0tTT1VSQ0UgaXMgbm90IHNldAorQ09ORklHX0NfQ0RQUklPPXkKK0NPTkZJR19DX0FNQkVOX0IwX0IxX0IyPXkKK0NPTkZJR19QTT15CisjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfVU5JWD15CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKK0NPTkZJR19MTEMyPXkKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfREVCVUc9eQorQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTEKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CitDT05GSUdfTkZUTD15CitDT05GSUdfTkZUTF9SVz15CitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9ST009eQorQ09ORklHX01URF9BQlNFTlQ9eQorQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1VDTElOVVg9eQorQ09ORklHX01URF9QTEFUUkFNPXkKK0NPTkZJR19NVERfREFUQUZMQVNIPXkKK0NPTkZJR19NVERfQkxPQ0syTVREPXkKK0NPTkZJR19NVERfTkFORD15CitDT05GSUdfTVREX05BTkRfUExBVEZPUk09eQorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9SQU09eQorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19CRklOX01BQz15CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX0RNQV9JTlRFUkZBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9KVEFHX0NPTU09eQorQ09ORklHX0JGSU5fSlRBR19DT01NX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9CRklOPXkKK0NPTkZJR19TRVJJQUxfQkZJTl9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQkZJTl9VQVJUMD15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD02NAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfQkxBQ0tGSU5fVFdJPXkKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9CRklOPXkKK0NPTkZJR19TUElfU1BJREVWPXkKK0NPTkZJR19HUElPTElCPXkKK0NPTkZJR19HUElPX1NZU0ZTPXkKK0NPTkZJR19TRU5TT1JTX0xNNzU9eQorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX01NQz15CitDT05GSUdfTU1DX1NQST15CitDT05GSUdfRE1BREVWSUNFUz15CitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9ODUwCitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0NSQU1GUz15CitDT05GSUdfUk9NRlNfRlM9eQorQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CT1RIPXkKKyMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfU0hJUlE9eQorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorQ09ORklHX0RFQlVHX09CSkVDVFM9eQorQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQorQ09ORklHX0RFQlVHX0tPQkpFQ1Q9eQorQ09ORklHX0RFQlVHX0lORk89eQorQ09ORklHX0RFQlVHX1ZNPXkKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CitDT05GSUdfREVCVUdfTElTVD15CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfUEFHRV9QT0lTT05JTkc9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19ET1VCTEVGQVVMVD15CitDT05GSUdfQ1BMQl9JTkZPPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX2RtYS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTEyMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fZG1hLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIGJmaW5fZG1hLmggLSBCbGFja2ZpbiBETUEgZGVmaW5lcy9zdHJ1Y3R1cmVzL2V0Yy4uLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaWZuZGVmIF9fQVNNX0JGSU5fRE1BX0hfXworI2RlZmluZSBfX0FTTV9CRklOX0RNQV9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIERNQV9DT05GSUcgTWFza3MgKi8KKyNkZWZpbmUgRE1BRU4JCQkweDAwMDEJLyogRE1BIENoYW5uZWwgRW5hYmxlICovCisjZGVmaW5lIFdOUgkJCQkweDAwMDIJLyogQ2hhbm5lbCBEaXJlY3Rpb24gKFcvUiopICovCisjZGVmaW5lIFdEU0laRV84CQkweDAwMDAJLyogVHJhbnNmZXIgV29yZCBTaXplID0gOCAqLworI2RlZmluZSBXRFNJWkVfMTYJCTB4MDAwNAkvKiBUcmFuc2ZlciBXb3JkIFNpemUgPSAxNiAqLworI2RlZmluZSBXRFNJWkVfMzIJCTB4MDAwOAkvKiBUcmFuc2ZlciBXb3JkIFNpemUgPSAzMiAqLworI2RlZmluZSBETUEyRAkJCTB4MDAxMAkvKiBETUEgTW9kZSAoMkQvMUQqKSAqLworI2RlZmluZSBSRVNUQVJUCQkJMHgwMDIwCS8qIERNQSBCdWZmZXIgQ2xlYXIgKi8KKyNkZWZpbmUgRElfU0VMCQkJMHgwMDQwCS8qIERhdGEgSW50ZXJydXB0IFRpbWluZyBTZWxlY3QgKi8KKyNkZWZpbmUgRElfRU4JCQkweDAwODAJLyogRGF0YSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE5EU0laRV8wCQkweDAwMDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAwIChTdG9wL0F1dG9idWZmZXIpICovCisjZGVmaW5lIE5EU0laRV8xCQkweDAxMDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAxICovCisjZGVmaW5lIE5EU0laRV8yCQkweDAyMDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAyICovCisjZGVmaW5lIE5EU0laRV8zCQkweDAzMDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAzICovCisjZGVmaW5lIE5EU0laRV80CQkweDA0MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA0ICovCisjZGVmaW5lIE5EU0laRV81CQkweDA1MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA1ICovCisjZGVmaW5lIE5EU0laRV82CQkweDA2MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA2ICovCisjZGVmaW5lIE5EU0laRV83CQkweDA3MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA3ICovCisjZGVmaW5lIE5EU0laRV84CQkweDA4MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA4ICovCisjZGVmaW5lIE5EU0laRV85CQkweDA5MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA5ICovCisjZGVmaW5lIE5EU0laRQkJCTB4MGYwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSAqLworI2RlZmluZSBETUFGTE9XCQkJMHg3MDAwCS8qIEZsb3cgQ29udHJvbCAqLworI2RlZmluZSBETUFGTE9XX1NUT1AJMHgwMDAwCS8qIFN0b3AgTW9kZSAqLworI2RlZmluZSBETUFGTE9XX0FVVE8JMHgxMDAwCS8qIEF1dG9idWZmZXIgTW9kZSAqLworI2RlZmluZSBETUFGTE9XX0FSUkFZCTB4NDAwMAkvKiBEZXNjcmlwdG9yIEFycmF5IE1vZGUgKi8KKyNkZWZpbmUgRE1BRkxPV19TTUFMTAkweDYwMDAJLyogU21hbGwgTW9kZWwgRGVzY3JpcHRvciBMaXN0IE1vZGUgKi8KKyNkZWZpbmUgRE1BRkxPV19MQVJHRQkweDcwMDAJLyogTGFyZ2UgTW9kZWwgRGVzY3JpcHRvciBMaXN0IE1vZGUgKi8KKworLyogRE1BX0lSUV9TVEFUVVMgTWFza3MgKi8KKyNkZWZpbmUgRE1BX0RPTkUJCTB4MDAwMQkvKiBETUEgQ29tcGxldGlvbiBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lIERNQV9FUlIJCQkweDAwMDIJLyogRE1BIEVycm9yIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgREZFVENICQkJMHgwMDA0CS8qIERNQSBEZXNjcmlwdG9yIEZldGNoIEluZGljYXRvciAqLworI2RlZmluZSBETUFfUlVOCQkJMHgwMDA4CS8qIERNQSBDaGFubmVsIFJ1bm5pbmcgSW5kaWNhdG9yICovCisKKy8qCisgKiBBbGwgQmxhY2tmaW4gc3lzdGVtIE1NUnMgYXJlIHBhZGRlZCB0byAzMmJpdHMgZXZlbiBpZiB0aGUgcmVnaXN0ZXIKKyAqIGl0c2VsZiBpcyBvbmx5IDE2Yml0cy4gIFNvIHVzZSBhIGhlbHBlciBtYWNybyB0byBzdHJlYW1saW5lIHRoaXMuCisgKi8KKyNkZWZpbmUgX19CRlAobSkgdTE2IG07IHUxNiBfX3BhZF8jI20KKworLyoKKyAqIGJmaW4gZG1hIHJlZ2lzdGVycyBsYXlvdXQKKyAqLworc3RydWN0IGJmaW5fZG1hX3JlZ3MgeworCXUzMiBuZXh0X2Rlc2NfcHRyOworCXUzMiBzdGFydF9hZGRyOworCV9fQkZQKGNvbmZpZyk7CisJdTMyIF9fcGFkMDsKKwlfX0JGUCh4X2NvdW50KTsKKwlfX0JGUCh4X21vZGlmeSk7CisJX19CRlAoeV9jb3VudCk7CisJX19CRlAoeV9tb2RpZnkpOworCXUzMiBjdXJyX2Rlc2NfcHRyOworCXUzMiBjdXJyX2FkZHI7CisJX19CRlAoaXJxX3N0YXR1cyk7CisJX19CRlAocGVyaXBoZXJhbF9tYXApOworCV9fQkZQKGN1cnJfeF9jb3VudCk7CisJdTMyIF9fcGFkMTsKKwlfX0JGUChjdXJyX3lfY291bnQpOworCXUzMiBfX3BhZDI7Cit9OworCisvKgorICogYmZpbiBoYW5kc2hha2UgbWRtYSByZWdpc3RlcnMgbGF5b3V0CisgKi8KK3N0cnVjdCBiZmluX2htZG1hX3JlZ3MgeworCV9fQkZQKGNvbnRyb2wpOworCV9fQkZQKGVjaW5pdCk7CisJX19CRlAoYmNpbml0KTsKKwlfX0JGUChlY3VyZ2VudCk7CisJX19CRlAoZWNvdmVyZmxvdyk7CisJX19CRlAoZWNvdW50KTsKKwlfX0JGUChiY291bnQpOworfTsKKworI3VuZGVmIF9fQkZQCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NlcmlhbC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjlmMTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc2VyaWFsLmgKQEAgLTAsMCArMSwyNzUgQEAKKy8qCisgKiBiZmluX3NlcmlhbC5oIC0gQmxhY2tmaW4gVUFSVC9TZXJpYWwgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2lmbmRlZiBfX0JGSU5fQVNNX1NFUklBTF9IX18KKyNkZWZpbmUgX19CRklOX0FTTV9TRVJJQUxfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPG1hY2gvYW5vbWFseS5oPgorI2luY2x1ZGUgPG1hY2gvYmZpbl9zZXJpYWwuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fVUFSVDBfQ1RTUlRTKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQkZJTl9VQVJUMV9DVFNSVFMpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19CRklOX1VBUlQyX0NUU1JUUykgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0JGSU5fVUFSVDNfQ1RTUlRTKQorIyBpZmRlZiBCRklOX1VBUlRfQkY1NFhfU1RZTEUKKyMgIGRlZmluZSBDT05GSUdfU0VSSUFMX0JGSU5fSEFSRF9DVFNSVFMKKyMgZWxzZQorIyAgZGVmaW5lIENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKKyMgZW5kaWYKKyNlbmRpZgorCitzdHJ1Y3QgY2lyY19idWY7CitzdHJ1Y3QgdGltZXJfbGlzdDsKK3N0cnVjdCB3b3JrX3N0cnVjdDsKKworc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgeworCXN0cnVjdCB1YXJ0X3BvcnQgcG9ydDsKKwl1bnNpZ25lZCBpbnQgb2xkX3N0YXR1czsKKwlpbnQgc3RhdHVzX2lycTsKKyNpZm5kZWYgQkZJTl9VQVJUX0JGNTRYX1NUWUxFCisJdW5zaWduZWQgaW50IGxzcjsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9ETUEKKwlpbnQgdHhfZG9uZTsKKwlpbnQgdHhfY291bnQ7CisJc3RydWN0IGNpcmNfYnVmIHJ4X2RtYV9idWY7CisJc3RydWN0IHRpbWVyX2xpc3QgcnhfZG1hX3RpbWVyOworCWludCByeF9kbWFfbnJvd3M7CisJdW5zaWduZWQgaW50IHR4X2RtYV9jaGFubmVsOworCXVuc2lnbmVkIGludCByeF9kbWFfY2hhbm5lbDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfZG1hX3dvcmtxdWV1ZTsKKyNlbGlmIEFOT01BTFlfMDUwMDAzNjMKKwl1bnNpZ25lZCBpbnQgYW5vbWFseV90aHJlc2hvbGQ7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fSEFSRF9DVFNSVFMKKwlpbnQgc2N0czsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUykgfHwgXAorCWRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX0hBUkRfQ1RTUlRTKQorCWludCBjdHNfcGluOworCWludCBydHNfcGluOworI2VuZGlmCit9OworCisvKiBVQVJUX0xDUiBNYXNrcyAqLworI2RlZmluZSBXTFMoeCkgICAgICAgICAgICAgICAgICAgKCgoeCktNSkgJiAweDAzKSAgLyogV29yZCBMZW5ndGggU2VsZWN0ICovCisjZGVmaW5lIFNUQiAgICAgICAgICAgICAgICAgICAgICAweDA0ICAvKiBTdG9wIEJpdHMgKi8KKyNkZWZpbmUgUEVOICAgICAgICAgICAgICAgICAgICAgIDB4MDggIC8qIFBhcml0eSBFbmFibGUgKi8KKyNkZWZpbmUgRVBTICAgICAgICAgICAgICAgICAgICAgIDB4MTAgIC8qIEV2ZW4gUGFyaXR5IFNlbGVjdCAqLworI2RlZmluZSBTVFAgICAgICAgICAgICAgICAgICAgICAgMHgyMCAgLyogU3RpY2sgUGFyaXR5ICovCisjZGVmaW5lIFNCICAgICAgICAgICAgICAgICAgICAgICAweDQwICAvKiBTZXQgQnJlYWsgKi8KKyNkZWZpbmUgRExBQiAgICAgICAgICAgICAgICAgICAgIDB4ODAgIC8qIERpdmlzb3IgTGF0Y2ggQWNjZXNzICovCisKKy8qIFVBUlRfTFNSIE1hc2tzICovCisjZGVmaW5lIERSICAgICAgICAgICAgICAgICAgICAgICAweDAxICAvKiBEYXRhIFJlYWR5ICovCisjZGVmaW5lIE9FICAgICAgICAgICAgICAgICAgICAgICAweDAyICAvKiBPdmVycnVuIEVycm9yICovCisjZGVmaW5lIFBFICAgICAgICAgICAgICAgICAgICAgICAweDA0ICAvKiBQYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgRkUgICAgICAgICAgICAgICAgICAgICAgIDB4MDggIC8qIEZyYW1pbmcgRXJyb3IgKi8KKyNkZWZpbmUgQkkgICAgICAgICAgICAgICAgICAgICAgIDB4MTAgIC8qIEJyZWFrIEludGVycnVwdCAqLworI2RlZmluZSBUSFJFICAgICAgICAgICAgICAgICAgICAgMHgyMCAgLyogVEhSIEVtcHR5ICovCisjZGVmaW5lIFRFTVQgICAgICAgICAgICAgICAgICAgICAweDQwICAvKiBUU1IgYW5kIFVBUlRfVEhSIEVtcHR5ICovCisjZGVmaW5lIFRGSSAgICAgICAgICAgICAgICAgICAgICAweDgwICAvKiBUcmFuc21pc3Npb24gRmluaXNoZWQgSW5kaWNhdG9yICovCisKKy8qIFVBUlRfSUVSIE1hc2tzICovCisjZGVmaW5lIEVSQkZJICAgICAgICAgICAgICAgICAgICAweDAxICAvKiBFbmFibGUgUmVjZWl2ZSBCdWZmZXIgRnVsbCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRVRCRUkgICAgICAgICAgICAgICAgICAgIDB4MDIgIC8qIEVuYWJsZSBUcmFuc21pdCBCdWZmZXIgRW1wdHkgSW50ZXJydXB0ICovCisjZGVmaW5lIEVMU0kgICAgICAgICAgICAgICAgICAgICAweDA0ICAvKiBFbmFibGUgUlggU3RhdHVzIEludGVycnVwdCAqLworI2RlZmluZSBFRFNTSSAgICAgICAgICAgICAgICAgICAgMHgwOCAgLyogRW5hYmxlIE1vZGVtIFN0YXR1cyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRURUUFRJICAgICAgICAgICAgICAgICAgIDB4MTAgIC8qIEVuYWJsZSBETUEgVHJhbnNtaXQgUElSUSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRVRGSSAgICAgICAgICAgICAgICAgICAgIDB4MjAgIC8qIEVuYWJsZSBUcmFuc21pc3Npb24gRmluaXNoZWQgSW50ZXJydXB0ICovCisjZGVmaW5lIEVSRkNJICAgICAgICAgICAgICAgICAgICAweDQwICAvKiBFbmFibGUgUmVjZWl2ZSBGSUZPIENvdW50IEludGVycnVwdCAqLworCisvKiBVQVJUX01DUiBNYXNrcyAqLworI2RlZmluZSBYT0ZGICAgICAgICAgICAgICAgICAgICAgMHgwMSAgLyogVHJhbnNtaXR0ZXIgT2ZmICovCisjZGVmaW5lIE1SVFMgICAgICAgICAgICAgICAgICAgICAweDAyICAvKiBNYW51YWwgUmVxdWVzdCBUbyBTZW5kICovCisjZGVmaW5lIFJGSVQgICAgICAgICAgICAgICAgICAgICAweDA0ICAvKiBSZWNlaXZlIEZJRk8gSVJRIFRocmVzaG9sZCAqLworI2RlZmluZSBSRlJUICAgICAgICAgICAgICAgICAgICAgMHgwOCAgLyogUmVjZWl2ZSBGSUZPIFJUUyBUaHJlc2hvbGQgKi8KKyNkZWZpbmUgTE9PUF9FTkEgICAgICAgICAgICAgICAgIDB4MTAgIC8qIExvb3BiYWNrIE1vZGUgRW5hYmxlICovCisjZGVmaW5lIEZDUE9MICAgICAgICAgICAgICAgICAgICAweDIwICAvKiBGbG93IENvbnRyb2wgUGluIFBvbGFyaXR5ICovCisjZGVmaW5lIEFSVFMgICAgICAgICAgICAgICAgICAgICAweDQwICAvKiBBdXRvbWF0aWMgUmVxdWVzdCBUbyBTZW5kICovCisjZGVmaW5lIEFDVFMgICAgICAgICAgICAgICAgICAgICAweDgwICAvKiBBdXRvbWF0aWMgQ2xlYXIgVG8gU2VuZCAqLworCisvKiBVQVJUX01TUiBNYXNrcyAqLworI2RlZmluZSBTQ1RTICAgICAgICAgICAgICAgICAgICAgMHgwMSAgLyogU3RpY2t5IENUUyAqLworI2RlZmluZSBDVFMgICAgICAgICAgICAgICAgICAgICAgMHgxMCAgLyogQ2xlYXIgVG8gU2VuZCAqLworI2RlZmluZSBSRkNTICAgICAgICAgICAgICAgICAgICAgMHgyMCAgLyogUmVjZWl2ZSBGSUZPIENvdW50IFN0YXR1cyAqLworCisvKiBVQVJUX0dDVEwgTWFza3MgKi8KKyNkZWZpbmUgVUNFTiAgICAgICAgICAgICAgICAgICAgIDB4MDEgIC8qIEVuYWJsZSBVQVJUeCBDbG9ja3MgKi8KKyNkZWZpbmUgSVJFTiAgICAgICAgICAgICAgICAgICAgIDB4MDIgIC8qIEVuYWJsZSBJckRBIE1vZGUgKi8KKyNkZWZpbmUgVFBPTEMgICAgICAgICAgICAgICAgICAgIDB4MDQgIC8qIElyREEgVFggUG9sYXJpdHkgQ2hhbmdlICovCisjZGVmaW5lIFJQT0xDICAgICAgICAgICAgICAgICAgICAweDA4ICAvKiBJckRBIFJYIFBvbGFyaXR5IENoYW5nZSAqLworI2RlZmluZSBGUEUgICAgICAgICAgICAgICAgICAgICAgMHgxMCAgLyogRm9yY2UgUGFyaXR5IEVycm9yIE9uIFRyYW5zbWl0ICovCisjZGVmaW5lIEZGRSAgICAgICAgICAgICAgICAgICAgICAweDIwICAvKiBGb3JjZSBGcmFtaW5nIEVycm9yIE9uIFRyYW5zbWl0ICovCisKKyNpZmRlZiBCRklOX1VBUlRfQkY1NFhfU1RZTEUKKyMgZGVmaW5lIE9GRlNFVF9ETEwgICAgICAgICAgICAgIDB4MDAgIC8qIERpdmlzb3IgTGF0Y2ggKExvdy1CeXRlKSAgICAgICAgKi8KKyMgZGVmaW5lIE9GRlNFVF9ETEggICAgICAgICAgICAgIDB4MDQgIC8qIERpdmlzb3IgTGF0Y2ggKEhpZ2gtQnl0ZSkgICAgICAgKi8KKyMgZGVmaW5lIE9GRlNFVF9HQ1RMICAgICAgICAgICAgIDB4MDggIC8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgKi8KKyMgZGVmaW5lIE9GRlNFVF9MQ1IgICAgICAgICAgICAgIDB4MEMgIC8qIExpbmUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgKi8KKyMgZGVmaW5lIE9GRlNFVF9NQ1IgICAgICAgICAgICAgIDB4MTAgIC8qIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgKi8KKyMgZGVmaW5lIE9GRlNFVF9MU1IgICAgICAgICAgICAgIDB4MTQgIC8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgKi8KKyMgZGVmaW5lIE9GRlNFVF9NU1IgICAgICAgICAgICAgIDB4MTggIC8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgKi8KKyMgZGVmaW5lIE9GRlNFVF9TQ1IgICAgICAgICAgICAgIDB4MUMgIC8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyICAgICAgICAgICAgKi8KKyMgZGVmaW5lIE9GRlNFVF9JRVJfU0VUICAgICAgICAgIDB4MjAgIC8qIFNldCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgKi8KKyMgZGVmaW5lIE9GRlNFVF9JRVJfQ0xFQVIgICAgICAgIDB4MjQgIC8qIENsZWFyIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyMgZGVmaW5lIE9GRlNFVF9USFIgICAgICAgICAgICAgIDB4MjggIC8qIFRyYW5zbWl0IEhvbGRpbmcgcmVnaXN0ZXIgICAgICAgKi8KKyMgZGVmaW5lIE9GRlNFVF9SQlIgICAgICAgICAgICAgIDB4MkMgIC8qIFJlY2VpdmUgQnVmZmVyIHJlZ2lzdGVyICAgICAgICAgKi8KKyNlbHNlIC8qIEJGNTMzIHN0eWxlICovCisjIGRlZmluZSBPRkZTRVRfVEhSICAgICAgICAgICAgICAweDAwICAvKiBUcmFuc21pdCBIb2xkaW5nIHJlZ2lzdGVyICAgICAgICAgKi8KKyMgZGVmaW5lIE9GRlNFVF9SQlIgICAgICAgICAgICAgIDB4MDAgIC8qIFJlY2VpdmUgQnVmZmVyIHJlZ2lzdGVyICAgICAgICAgICAqLworIyBkZWZpbmUgT0ZGU0VUX0RMTCAgICAgICAgICAgICAgMHgwMCAgLyogRGl2aXNvciBMYXRjaCAoTG93LUJ5dGUpICAgICAgICAgICovCisjIGRlZmluZSBPRkZTRVRfRExIICAgICAgICAgICAgICAweDA0ICAvKiBEaXZpc29yIExhdGNoIChIaWdoLUJ5dGUpICAgICAgICAgKi8KKyMgZGVmaW5lIE9GRlNFVF9JRVIgICAgICAgICAgICAgIDB4MDQgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAqLworIyBkZWZpbmUgT0ZGU0VUX0lJUiAgICAgICAgICAgICAgMHgwOCAgLyogSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICovCisjIGRlZmluZSBPRkZTRVRfTENSICAgICAgICAgICAgICAweDBDICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgKi8KKyMgZGVmaW5lIE9GRlNFVF9NQ1IgICAgICAgICAgICAgIDB4MTAgIC8qIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAqLworIyBkZWZpbmUgT0ZGU0VUX0xTUiAgICAgICAgICAgICAgMHgxNCAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICovCisjIGRlZmluZSBPRkZTRVRfTVNSICAgICAgICAgICAgICAweDE4ICAvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgKi8KKyMgZGVmaW5lIE9GRlNFVF9TQ1IgICAgICAgICAgICAgIDB4MUMgIC8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyICAgICAgICAgICAgICAqLworIyBkZWZpbmUgT0ZGU0VUX0dDVEwgICAgICAgICAgICAgMHgyNCAgLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICovCisvKiBjb2RlIHNob3VsZCBub3QgbmVlZCBJSVIsIHNvIGZvcmNlIGJ1aWxkIGVycm9yIGlmIHRoZXkgdXNlIGl0ICovCisjIHVuZGVmIE9GRlNFVF9JSVIKKyNlbmRpZgorCisvKgorICogQWxsIEJsYWNrZmluIHN5c3RlbSBNTVJzIGFyZSBwYWRkZWQgdG8gMzJiaXRzIGV2ZW4gaWYgdGhlIHJlZ2lzdGVyCisgKiBpdHNlbGYgaXMgb25seSAxNmJpdHMuICBTbyB1c2UgYSBoZWxwZXIgbWFjcm8gdG8gc3RyZWFtbGluZSB0aGlzLgorICovCisjZGVmaW5lIF9fQkZQKG0pIHUxNiBtOyB1MTYgX19wYWRfIyNtCitzdHJ1Y3QgYmZpbl91YXJ0X3JlZ3MgeworI2lmZGVmIEJGSU5fVUFSVF9CRjU0WF9TVFlMRQorCV9fQkZQKGRsbCk7CisJX19CRlAoZGxoKTsKKwlfX0JGUChnY3RsKTsKKwlfX0JGUChsY3IpOworCV9fQkZQKG1jcik7CisJX19CRlAobHNyKTsKKwlfX0JGUChtc3IpOworCV9fQkZQKHNjcik7CisJX19CRlAoaWVyX3NldCk7CisJX19CRlAoaWVyX2NsZWFyKTsKKwlfX0JGUCh0aHIpOworCV9fQkZQKHJicik7CisjZWxzZQorCXVuaW9uIHsKKwkJdTE2IGRsbDsKKwkJdTE2IHRocjsKKwkJY29uc3QgdTE2IHJicjsKKwl9OworCWNvbnN0IHUxNiBfX3BhZDA7CisJdW5pb24geworCQl1MTYgZGxoOworCQl1MTYgaWVyOworCX07CisJY29uc3QgdTE2IF9fcGFkMTsKKwljb25zdCBfX0JGUChpaXIpOworCV9fQkZQKGxjcik7CisJX19CRlAobWNyKTsKKwlfX0JGUChsc3IpOworCV9fQkZQKG1zcik7CisJX19CRlAoc2NyKTsKKwljb25zdCB1MzIgX19wYWQyOworCV9fQkZQKGdjdGwpOworI2VuZGlmCit9OworI3VuZGVmIF9fQkZQCisKKyNpZm5kZWYgcG9ydF9tZW1iYXNlCisjIGRlZmluZSBwb3J0X21lbWJhc2UocCkgKCgoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKikocCkpLT5wb3J0Lm1lbWJhc2UpCisjZW5kaWYKKworI2RlZmluZSBVQVJUX0dFVF9DSEFSKHApICAgICAgYmZpbl9yZWFkMTYocG9ydF9tZW1iYXNlKHApICsgT0ZGU0VUX1JCUikKKyNkZWZpbmUgVUFSVF9HRVRfRExMKHApICAgICAgIGJmaW5fcmVhZDE2KHBvcnRfbWVtYmFzZShwKSArIE9GRlNFVF9ETEwpCisjZGVmaW5lIFVBUlRfR0VUX0RMSChwKSAgICAgICBiZmluX3JlYWQxNihwb3J0X21lbWJhc2UocCkgKyBPRkZTRVRfRExIKQorI2RlZmluZSBVQVJUX0dFVF9HQ1RMKHApICAgICAgYmZpbl9yZWFkMTYocG9ydF9tZW1iYXNlKHApICsgT0ZGU0VUX0dDVEwpCisjZGVmaW5lIFVBUlRfR0VUX0xDUihwKSAgICAgICBiZmluX3JlYWQxNihwb3J0X21lbWJhc2UocCkgKyBPRkZTRVRfTENSKQorI2RlZmluZSBVQVJUX0dFVF9NQ1IocCkgICAgICAgYmZpbl9yZWFkMTYocG9ydF9tZW1iYXNlKHApICsgT0ZGU0VUX01DUikKKyNkZWZpbmUgVUFSVF9HRVRfTVNSKHApICAgICAgIGJmaW5fcmVhZDE2KHBvcnRfbWVtYmFzZShwKSArIE9GRlNFVF9NU1IpCisKKyNkZWZpbmUgVUFSVF9QVVRfQ0hBUihwLCB2KSAgIGJmaW5fd3JpdGUxNihwb3J0X21lbWJhc2UocCkgKyBPRkZTRVRfVEhSLCB2KQorI2RlZmluZSBVQVJUX1BVVF9ETEwocCwgdikgICAgYmZpbl93cml0ZTE2KHBvcnRfbWVtYmFzZShwKSArIE9GRlNFVF9ETEwsIHYpCisjZGVmaW5lIFVBUlRfUFVUX0RMSChwLCB2KSAgICBiZmluX3dyaXRlMTYocG9ydF9tZW1iYXNlKHApICsgT0ZGU0VUX0RMSCwgdikKKyNkZWZpbmUgVUFSVF9QVVRfR0NUTChwLCB2KSAgIGJmaW5fd3JpdGUxNihwb3J0X21lbWJhc2UocCkgKyBPRkZTRVRfR0NUTCwgdikKKyNkZWZpbmUgVUFSVF9QVVRfTENSKHAsIHYpICAgIGJmaW5fd3JpdGUxNihwb3J0X21lbWJhc2UocCkgKyBPRkZTRVRfTENSLCB2KQorI2RlZmluZSBVQVJUX1BVVF9NQ1IocCwgdikgICAgYmZpbl93cml0ZTE2KHBvcnRfbWVtYmFzZShwKSArIE9GRlNFVF9NQ1IsIHYpCisKKyNpZmRlZiBCRklOX1VBUlRfQkY1NFhfU1RZTEUKKworI2RlZmluZSBVQVJUX0NMRUFSX0lFUihwLCB2KSAgYmZpbl93cml0ZTE2KHBvcnRfbWVtYmFzZShwKSArIE9GRlNFVF9JRVJfQ0xFQVIsIHYpCisjZGVmaW5lIFVBUlRfR0VUX0lFUihwKSAgICAgICBiZmluX3JlYWQxNihwb3J0X21lbWJhc2UocCkgKyBPRkZTRVRfSUVSX1NFVCkKKyNkZWZpbmUgVUFSVF9TRVRfSUVSKHAsIHYpICAgIGJmaW5fd3JpdGUxNihwb3J0X21lbWJhc2UocCkgKyBPRkZTRVRfSUVSX1NFVCwgdikKKworI2RlZmluZSBVQVJUX0NMRUFSX0RMQUIocCkgICAgLyogTU1ScyBub3QgbXV4ZWQgb24gQkY1NHggKi8KKyNkZWZpbmUgVUFSVF9TRVRfRExBQihwKSAgICAgIC8qIE1NUnMgbm90IG11eGVkIG9uIEJGNTR4ICovCisKKyNkZWZpbmUgVUFSVF9DTEVBUl9MU1IocCkgICAgIGJmaW5fd3JpdGUxNihwb3J0X21lbWJhc2UocCkgKyBPRkZTRVRfTFNSLCAtMSkKKyNkZWZpbmUgVUFSVF9HRVRfTFNSKHApICAgICAgIGJmaW5fcmVhZDE2KHBvcnRfbWVtYmFzZShwKSArIE9GRlNFVF9MU1IpCisjZGVmaW5lIFVBUlRfUFVUX0xTUihwLCB2KSAgICBiZmluX3dyaXRlMTYocG9ydF9tZW1iYXNlKHApICsgT0ZGU0VUX0xTUiwgdikKKworLyogVGhpcyBoYW5kbGVzIGhhcmQgQ1RTL1JUUyAqLworI2RlZmluZSBCRklOX1VBUlRfQ1RTUlRTX0hBUkQKKyNkZWZpbmUgVUFSVF9DTEVBUl9TQ1RTKHApICAgICAgYmZpbl93cml0ZTE2KChwb3J0X21lbWJhc2UocCkgKyBPRkZTRVRfTVNSKSwgU0NUUykKKyNkZWZpbmUgVUFSVF9HRVRfQ1RTKHgpICAgICAgICAgKFVBUlRfR0VUX01TUih4KSAmIENUUykKKyNkZWZpbmUgVUFSVF9ESVNBQkxFX1JUUyh4KSAgICAgVUFSVF9QVVRfTUNSKHgsIFVBUlRfR0VUX01DUih4KSAmIH4oQVJUUyB8IE1SVFMpKQorI2RlZmluZSBVQVJUX0VOQUJMRV9SVFMoeCkgICAgICBVQVJUX1BVVF9NQ1IoeCwgVUFSVF9HRVRfTUNSKHgpIHwgTVJUUyB8IEFSVFMpCisjZGVmaW5lIFVBUlRfRU5BQkxFX0lOVFMoeCwgdikgIFVBUlRfU0VUX0lFUih4LCB2KQorI2RlZmluZSBVQVJUX0RJU0FCTEVfSU5UUyh4KSAgICBVQVJUX0NMRUFSX0lFUih4LCAweEYpCisKKyNlbHNlIC8qIEJGNTMzIHN0eWxlICovCisKKyNkZWZpbmUgVUFSVF9DTEVBUl9JRVIocCwgdikgIFVBUlRfUFVUX0lFUihwLCBVQVJUX0dFVF9JRVIocCkgJiB+KHYpKQorI2RlZmluZSBVQVJUX0dFVF9JRVIocCkgICAgICAgYmZpbl9yZWFkMTYocG9ydF9tZW1iYXNlKHApICsgT0ZGU0VUX0lFUikKKyNkZWZpbmUgVUFSVF9QVVRfSUVSKHAsIHYpICAgIGJmaW5fd3JpdGUxNihwb3J0X21lbWJhc2UocCkgKyBPRkZTRVRfSUVSLCB2KQorI2RlZmluZSBVQVJUX1NFVF9JRVIocCwgdikgICAgVUFSVF9QVVRfSUVSKHAsIFVBUlRfR0VUX0lFUihwKSB8ICh2KSkKKworI2RlZmluZSBVQVJUX0NMRUFSX0RMQUIocCkgICAgZG8geyBVQVJUX1BVVF9MQ1IocCwgVUFSVF9HRVRfTENSKHApICYgfkRMQUIpOyBTU1lOQygpOyB9IHdoaWxlICgwKQorI2RlZmluZSBVQVJUX1NFVF9ETEFCKHApICAgICAgZG8geyBVQVJUX1BVVF9MQ1IocCwgVUFSVF9HRVRfTENSKHApIHwgRExBQik7IFNTWU5DKCk7IH0gd2hpbGUgKDApCisKKyNpZm5kZWYgcHV0X2xzcl9jYWNoZQorIyBkZWZpbmUgcHV0X2xzcl9jYWNoZShwLCB2KSAoKChzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqKShwKSktPmxzciA9ICh2KSkKKyNlbmRpZgorI2lmbmRlZiBnZXRfbHNyX2NhY2hlCisjIGRlZmluZSBnZXRfbHNyX2NhY2hlKHApICAgICgoKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICopKHApKS0+bHNyKQorI2VuZGlmCisKKy8qIFRoZSBoYXJkd2FyZSBjbGVhcnMgdGhlIExTUiBiaXRzIHVwb24gcmVhZCwgc28gd2UgbmVlZCB0byBjYWNoZQorICogc29tZSBvZiB0aGUgbW9yZSBmdW4gYml0cyBpbiBzb2Z0d2FyZSBzbyB0aGV5IGRvbid0IGdldCBsb3N0CisgKiB3aGVuIGNoZWNraW5nIHRoZSBMU1IgaW4gb3RoZXIgY29kZSBwYXRocyAoVFgpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgVUFSVF9DTEVBUl9MU1Iodm9pZCAqcCkKK3sKKwlwdXRfbHNyX2NhY2hlKHAsIDApOworCWJmaW5fd3JpdGUxNihwb3J0X21lbWJhc2UocCkgKyBPRkZTRVRfTFNSLCAtMSk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBVQVJUX0dFVF9MU1Iodm9pZCAqcCkKK3sKKwl1bnNpZ25lZCBpbnQgbHNyID0gYmZpbl9yZWFkMTYocG9ydF9tZW1iYXNlKHApICsgT0ZGU0VUX0xTUik7CisJcHV0X2xzcl9jYWNoZShwLCBnZXRfbHNyX2NhY2hlKHApIHwgKGxzciAmIChCSXxGRXxQRXxPRSkpKTsKKwlyZXR1cm4gbHNyIHwgZ2V0X2xzcl9jYWNoZShwKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBVQVJUX1BVVF9MU1Iodm9pZCAqcCwgdWludDE2X3QgdmFsKQoreworCXB1dF9sc3JfY2FjaGUocCwgZ2V0X2xzcl9jYWNoZShwKSAmIH52YWwpOworfQorCisvKiBUaGlzIGhhbmRsZXMgc29mdCBDVFMvUlRTICovCisjZGVmaW5lIFVBUlRfR0VUX0NUUyh4KSAgICAgICAgZ3Bpb19nZXRfdmFsdWUoKHgpLT5jdHNfcGluKQorI2RlZmluZSBVQVJUX0RJU0FCTEVfUlRTKHgpICAgIGdwaW9fc2V0X3ZhbHVlKCh4KS0+cnRzX3BpbiwgMSkKKyNkZWZpbmUgVUFSVF9FTkFCTEVfUlRTKHgpICAgICBncGlvX3NldF92YWx1ZSgoeCktPnJ0c19waW4sIDApCisjZGVmaW5lIFVBUlRfRU5BQkxFX0lOVFMoeCwgdikgVUFSVF9QVVRfSUVSKHgsIHYpCisjZGVmaW5lIFVBUlRfRElTQUJMRV9JTlRTKHgpICAgVUFSVF9QVVRfSUVSKHgsIDApCisKKyNlbmRpZgorCisjaWZuZGVmIEJGSU5fVUFSVF9UWF9GSUZPX1NJWkUKKyMgZGVmaW5lIEJGSU5fVUFSVF9UWF9GSUZPX1NJWkUgMgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0JGSU5fQVNNX1NFUklBTF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDNmN2VmNGQuLjI5ZjRmZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMTA4LDcgKzEwOCw5IEBACiAjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCWJhcnJpZXIoKQogCisjZGVmaW5lIHRlc3RfYml0IF9fc2tpcF90ZXN0X2JpdAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9ub24tYXRvbWljLmg+CisjdW5kZWYgdGVzdF9iaXQKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZS5oCmluZGV4IGJkMDY0MWEuLjU2ODg4NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlLmgKQEAgLTcsNiArNyw4IEBACiAjaWZuZGVmIF9fQVJDSF9CTEFDS0ZJTl9DQUNIRV9ICiAjZGVmaW5lIF9fQVJDSF9CTEFDS0ZJTl9DQUNIRV9ICiAKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CS8qIGZvciBhc21saW5rYWdlICovCisKIC8qCiAgKiBCeXRlcyBwZXIgTDEgY2FjaGUgbGluZQogICogQmxhY2tmaW4gbG9hZHMgMzIgYnl0ZXMgZm9yIGNhY2hlCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDI2NjZmZjguLjc3MTM1YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0xMSw2ICsxMSw5IEBACiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4JLyogZm9yIFNTWU5DKCkgKi8KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4JLyogZm9yIF9yYW1lbmQgKi8KKyNpZmRlZiBDT05GSUdfU01QCisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2VuZGlmCiAKIGV4dGVybiB2b2lkIGJsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZW5kX2FkZHJlc3MpOwogZXh0ZXJuIHZvaWQgYmxhY2tmaW5fZGNhY2hlX2ZsdXNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcmVzcywgdW5zaWduZWQgbG9uZyBlbmRfYWRkcmVzcyk7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEuaAppbmRleCBlZWRmM2NhLi5kOWRiYzFhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLmgKQEAgLTE0LDQwICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEuaD4KLQotLyogRE1BX0NPTkZJRyBNYXNrcyAqLwotI2RlZmluZSBETUFFTgkJCTB4MDAwMQkvKiBETUEgQ2hhbm5lbCBFbmFibGUgKi8KLSNkZWZpbmUgV05SCQkJCTB4MDAwMgkvKiBDaGFubmVsIERpcmVjdGlvbiAoVy9SKikgKi8KLSNkZWZpbmUgV0RTSVpFXzgJCTB4MDAwMAkvKiBUcmFuc2ZlciBXb3JkIFNpemUgPSA4ICovCi0jZGVmaW5lIFdEU0laRV8xNgkJMHgwMDA0CS8qIFRyYW5zZmVyIFdvcmQgU2l6ZSA9IDE2ICovCi0jZGVmaW5lIFdEU0laRV8zMgkJMHgwMDA4CS8qIFRyYW5zZmVyIFdvcmQgU2l6ZSA9IDMyICovCi0jZGVmaW5lIERNQTJECQkJMHgwMDEwCS8qIERNQSBNb2RlICgyRC8xRCopICovCi0jZGVmaW5lIFJFU1RBUlQJCQkweDAwMjAJLyogRE1BIEJ1ZmZlciBDbGVhciAqLwotI2RlZmluZSBESV9TRUwJCQkweDAwNDAJLyogRGF0YSBJbnRlcnJ1cHQgVGltaW5nIFNlbGVjdCAqLwotI2RlZmluZSBESV9FTgkJCTB4MDA4MAkvKiBEYXRhIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgTkRTSVpFXzAJCTB4MDAwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDAgKFN0b3AvQXV0b2J1ZmZlcikgKi8KLSNkZWZpbmUgTkRTSVpFXzEJCTB4MDEwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDEgKi8KLSNkZWZpbmUgTkRTSVpFXzIJCTB4MDIwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDIgKi8KLSNkZWZpbmUgTkRTSVpFXzMJCTB4MDMwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDMgKi8KLSNkZWZpbmUgTkRTSVpFXzQJCTB4MDQwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDQgKi8KLSNkZWZpbmUgTkRTSVpFXzUJCTB4MDUwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDUgKi8KLSNkZWZpbmUgTkRTSVpFXzYJCTB4MDYwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDYgKi8KLSNkZWZpbmUgTkRTSVpFXzcJCTB4MDcwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDcgKi8KLSNkZWZpbmUgTkRTSVpFXzgJCTB4MDgwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDggKi8KLSNkZWZpbmUgTkRTSVpFXzkJCTB4MDkwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDkgKi8KLSNkZWZpbmUgTkRTSVpFCQkJMHgwZjAwCS8qIE5leHQgRGVzY3JpcHRvciBTaXplICovCi0jZGVmaW5lIERNQUZMT1cJCQkweDcwMDAJLyogRmxvdyBDb250cm9sICovCi0jZGVmaW5lIERNQUZMT1dfU1RPUAkweDAwMDAJLyogU3RvcCBNb2RlICovCi0jZGVmaW5lIERNQUZMT1dfQVVUTwkweDEwMDAJLyogQXV0b2J1ZmZlciBNb2RlICovCi0jZGVmaW5lIERNQUZMT1dfQVJSQVkJMHg0MDAwCS8qIERlc2NyaXB0b3IgQXJyYXkgTW9kZSAqLwotI2RlZmluZSBETUFGTE9XX1NNQUxMCTB4NjAwMAkvKiBTbWFsbCBNb2RlbCBEZXNjcmlwdG9yIExpc3QgTW9kZSAqLwotI2RlZmluZSBETUFGTE9XX0xBUkdFCTB4NzAwMAkvKiBMYXJnZSBNb2RlbCBEZXNjcmlwdG9yIExpc3QgTW9kZSAqLwotCi0vKiBETUFfSVJRX1NUQVRVUyBNYXNrcyAqLwotI2RlZmluZSBETUFfRE9ORQkJMHgwMDAxCS8qIERNQSBDb21wbGV0aW9uIEludGVycnVwdCBTdGF0dXMgKi8KLSNkZWZpbmUgRE1BX0VSUgkJCTB4MDAwMgkvKiBETUEgRXJyb3IgSW50ZXJydXB0IFN0YXR1cyAqLwotI2RlZmluZSBERkVUQ0gJCQkweDAwMDQJLyogRE1BIERlc2NyaXB0b3IgRmV0Y2ggSW5kaWNhdG9yICovCi0jZGVmaW5lIERNQV9SVU4JCQkweDAwMDgJLyogRE1BIENoYW5uZWwgUnVubmluZyBJbmRpY2F0b3IgKi8KKyNpbmNsdWRlIDxhc20vYmZpbl9kbWEuaD4KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBjb25maWcgcmVnIGJpdHMgdmFsdWUKQEAgLTE0OSw3ICsxMTYsNyBAQAogKglETUEgQVBJJ3MKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBleHRlcm4gc3RydWN0IGRtYV9jaGFubmVsIGRtYV9jaFtNQVhfRE1BX0NIQU5ORUxTXTsKLWV4dGVybiBzdHJ1Y3QgZG1hX3JlZ2lzdGVyICpkbWFfaW9fYmFzZV9hZGRyW01BWF9ETUFfQ0hBTk5FTFNdOworZXh0ZXJuIHN0cnVjdCBkbWFfcmVnaXN0ZXIgKiBjb25zdCBkbWFfaW9fYmFzZV9hZGRyW01BWF9ETUFfQ0hBTk5FTFNdOwogZXh0ZXJuIGludCBjaGFubmVsMmlycSh1bnNpZ25lZCBpbnQgY2hhbm5lbCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZG1hX3N0YXJ0X2FkZHIodW5zaWduZWQgaW50IGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYWRkcikKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kcG1jLmgKaW5kZXggZWZjYzNhZS4uMzA0NzEyMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kcG1jLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kcG1jLmgKQEAgLTksNiArOSw4IEBACiAjaWZuZGVmIF9CTEFDS0ZJTl9EUE1DX0hfCiAjZGVmaW5lIF9CTEFDS0ZJTl9EUE1DX0hfCiAKKyNpbmNsdWRlIDxtYWNoL3BsbC5oPgorCiAvKiBQTExfQ1RMIE1hc2tzICovCiAjZGVmaW5lIERGCQkJMHgwMDAxCS8qIDA6IFBMTCA9IENMS0lOLCAxOiBQTEwgPSBDTEtJTi8yICovCiAjZGVmaW5lIFBMTF9PRkYJCQkweDAwMDIJLyogUExMIE5vdCBQb3dlcmVkICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMjM0ZmJhYy4uZGNjYWUyNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaW8uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA0LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpAQCAtNywxNDggKzcsNDggQEAKICNpZm5kZWYgX0JGSU5fSU9fSAogI2RlZmluZSBfQkZJTl9JT19ICiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLS8qCi0gKiBUaGVzZSBhcmUgZm9yIElTQS9QQ0kgc2hhcmVkIG1lbW9yeSBfb25seV8gYW5kIHNob3VsZCBuZXZlciBiZSB1c2VkCi0gKiBvbiBhbnkgb3RoZXIgdHlwZSBvZiBtZW1vcnksIGluY2x1ZGluZyBab3JybyBtZW1vcnkuIFRoZXkgYXJlIG1lYW50IHRvCi0gKiBhY2Nlc3MgdGhlIGJ1cyBpbiB0aGUgYnVzIGJ5dGUgb3JkZXIgd2hpY2ggaXMgbGl0dGxlLWVuZGlhbiEuCi0gKgotICogcmVhZFgvd3JpdGVYKCkgYXJlIHVzZWQgdG8gYWNjZXNzIG1lbW9yeSBtYXBwZWQgZGV2aWNlcy4gT24gc29tZQotICogYXJjaGl0ZWN0dXJlcyB0aGUgbWVtb3J5IG1hcHBlZCBJTyBzdHVmZiBuZWVkcyB0byBiZSBhY2Nlc3NlZAotICogZGlmZmVyZW50bHkuIE9uIHRoZSBiZmluIGFyY2hpdGVjdHVyZSwgd2UganVzdCByZWFkL3dyaXRlIHRoZQotICogbWVtb3J5IGxvY2F0aW9uIGRpcmVjdGx5LgotICovCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCXVuc2lnbmVkIGludCB2YWw7Ci0JaW50IHRtcDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJImNsaSAlMTsiCi0JCSJOT1A7IE5PUDsgU1NZTkM7IgotCQkiJTAgPSBiIFslMl0gKHopOyIKLQkJInN0aSAlMTsiCi0JCTogIj1kIih2YWwpLCAiPWQiKHRtcCkKLQkJOiAiYSIoYWRkcikKLQkpOwotCi0JcmV0dXJuICh1bnNpZ25lZCBjaGFyKSB2YWw7CisjZGVmaW5lIERFQ0xBUkVfQkZJTl9SQVdfUkVBRFgoc2l6ZSwgdHlwZSwgYXNtLCBhc21fc2lnbikgXAorc3RhdGljIGlubGluZSB0eXBlIF9fcmF3X3JlYWQjI3NpemUoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKSBcCit7IFwKKwl1bnNpZ25lZCBpbnQgdmFsOyBcCisJaW50IHRtcDsgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICggXAorCQkiY2xpICUxOyIgXAorCQkiTk9QOyBOT1A7IFNTWU5DOyIgXAorCQkiJTAgPSAiI2FzbSIgWyUyXSAiI2FzbV9zaWduIjsiIFwKKwkJInN0aSAlMTsiIFwKKwkJOiAiPWQiKHZhbCksICI9ZCIodG1wKSBcCisJCTogImEiKGFkZHIpIFwKKwkpOyBcCisJcmV0dXJuICh0eXBlKSB2YWw7IFwKIH0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCByZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JdW5zaWduZWQgaW50IHZhbDsKLQlpbnQgdG1wOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiY2xpICUxOyIKLQkJIk5PUDsgTk9QOyBTU1lOQzsiCi0JCSIlMCA9IHcgWyUyXSAoeik7IgotCQkic3RpICUxOyIKLQkJOiAiPWQiKHZhbCksICI9ZCIodG1wKQotCQk6ICJhIihhZGRyKQotCSk7Ci0KLQlyZXR1cm4gKHVuc2lnbmVkIHNob3J0KSB2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQl1bnNpZ25lZCBpbnQgdmFsOwotCWludCB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSJjbGkgJTE7IgotCQkiTk9QOyBOT1A7IFNTWU5DOyIKLQkJIiUwID0gWyUyXTsiCi0JCSJzdGkgJTE7IgotCQk6ICI9ZCIodmFsKSwgIj1kIih0bXApCi0JCTogImEiKGFkZHIpCi0JKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLSNlbmRpZiAvKiAgX19BU1NFTUJMWV9fICovCi0KLSNkZWZpbmUgd3JpdGViKGIsIGFkZHIpICh2b2lkKSgoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhZGRyKSkgPSAoYikpCi0jZGVmaW5lIHdyaXRldyhiLCBhZGRyKSAodm9pZCkoKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKGFkZHIpKSA9IChiKSkKLSNkZWZpbmUgd3JpdGVsKGIsIGFkZHIpICh2b2lkKSgoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKGFkZHIpKSA9IChiKSkKLQotI2RlZmluZSBfX3Jhd19yZWFkYiByZWFkYgotI2RlZmluZSBfX3Jhd19yZWFkdyByZWFkdwotI2RlZmluZSBfX3Jhd19yZWFkbCByZWFkbAotI2RlZmluZSBfX3Jhd193cml0ZWIgd3JpdGViCi0jZGVmaW5lIF9fcmF3X3dyaXRldyB3cml0ZXcKLSNkZWZpbmUgX19yYXdfd3JpdGVsIHdyaXRlbAotI2RlZmluZSBtZW1zZXRfaW8oYSwgYiwgYykJbWVtc2V0KCh2b2lkICopKGEpLCAoYiksIChjKSkKLSNkZWZpbmUgbWVtY3B5X2Zyb21pbyhhLCBiLCBjKQltZW1jcHkoKGEpLCAodm9pZCAqKShiKSwgKGMpKQotI2RlZmluZSBtZW1jcHlfdG9pbyhhLCBiLCBjKQltZW1jcHkoKHZvaWQgKikoYSksIChiKSwgKGMpKQotCi0vKiBDb252ZXJ0ICJJL08gcG9ydCBhZGRyZXNzZXMiIHRvIGFjdHVhbCBhZGRyZXNzZXMuICBpLmUuIHVnbHkgY2FzdHMuICovCi0jZGVmaW5lIF9faW8ocG9ydCkgKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKHBvcnQpKQotCi0jZGVmaW5lIGluYihwb3J0KSAgICByZWFkYihfX2lvKHBvcnQpKQotI2RlZmluZSBpbncocG9ydCkgICAgcmVhZHcoX19pbyhwb3J0KSkKLSNkZWZpbmUgaW5sKHBvcnQpICAgIHJlYWRsKF9faW8ocG9ydCkpCi0jZGVmaW5lIG91dGIoeCwgcG9ydCkgd3JpdGViKHgsIF9faW8ocG9ydCkpCi0jZGVmaW5lIG91dHcoeCwgcG9ydCkgd3JpdGV3KHgsIF9faW8ocG9ydCkpCi0jZGVmaW5lIG91dGwoeCwgcG9ydCkgd3JpdGVsKHgsIF9faW8ocG9ydCkpCi0KLSNkZWZpbmUgaW5iX3AocG9ydCkgICAgaW5iKF9faW8ocG9ydCkpCi0jZGVmaW5lIGlud19wKHBvcnQpICAgIGludyhfX2lvKHBvcnQpKQotI2RlZmluZSBpbmxfcChwb3J0KSAgICBpbmwoX19pbyhwb3J0KSkKLSNkZWZpbmUgb3V0Yl9wKHgsIHBvcnQpIG91dGIoeCwgX19pbyhwb3J0KSkKLSNkZWZpbmUgb3V0d19wKHgsIHBvcnQpIG91dHcoeCwgX19pbyhwb3J0KSkKLSNkZWZpbmUgb3V0bF9wKHgsIHBvcnQpIG91dGwoeCwgX19pbyhwb3J0KSkKLQotI2RlZmluZSBpb3JlYWQ4X3JlcChhLCBkLCBjKQlyZWFkc2IoYSwgZCwgYykKLSNkZWZpbmUgaW9yZWFkMTZfcmVwKGEsIGQsIGMpCXJlYWRzdyhhLCBkLCBjKQotI2RlZmluZSBpb3JlYWQzMl9yZXAoYSwgZCwgYykJcmVhZHNsKGEsIGQsIGMpCi0jZGVmaW5lIGlvd3JpdGU4X3JlcChhLCBzLCBjKQl3cml0ZXNiKGEsIHMsIGMpCi0jZGVmaW5lIGlvd3JpdGUxNl9yZXAoYSwgcywgYykJd3JpdGVzdyhhLCBzLCBjKQotI2RlZmluZSBpb3dyaXRlMzJfcmVwKGEsIHMsIGMpCXdyaXRlc2woYSwgcywgYykKLQotI2RlZmluZSBpb3JlYWQ4KHgpCQkJcmVhZGIoeCkKLSNkZWZpbmUgaW9yZWFkMTYoeCkJCQlyZWFkdyh4KQotI2RlZmluZSBpb3JlYWQzMih4KQkJCXJlYWRsKHgpCi0jZGVmaW5lIGlvd3JpdGU4KHZhbCwgeCkJCXdyaXRlYih2YWwsIHgpCi0jZGVmaW5lIGlvd3JpdGUxNih2YWwsIHgpCQl3cml0ZXcodmFsLCB4KQotI2RlZmluZSBpb3dyaXRlMzIodmFsLCB4KQkJd3JpdGVsKHZhbCwgeCkKLQotLyoqCi0gKiBJL08gd3JpdGUgYmFycmllcgotICoKLSAqIEVuc3VyZSBvcmRlcmluZyBvZiBJL08gc3BhY2Ugd3JpdGVzLiBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoYXQgd3JpdGVzCi0gKiBmb2xsb3dpbmcgdGhlIGJhcnJpZXIgd2lsbCBhcnJpdmUgYWZ0ZXIgYWxsIHByZXZpb3VzIHdyaXRlcy4KLSAqLwotI2RlZmluZSBtbWlvd2IoKSBkbyB7IFNTWU5DKCk7IHdtYigpOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKLQotLyogVmFsdWVzIGZvciBub2NhY2hlZmxhZyBhbmQgY21vZGUgKi8KLSNkZWZpbmUgSU9NQVBfTk9DQUNIRV9TRVIJCTEKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KK0RFQ0xBUkVfQkZJTl9SQVdfUkVBRFgoYiwgdTgsIGIsICh6KSkKKyNkZWZpbmUgX19yYXdfcmVhZGIgX19yYXdfcmVhZGIKK0RFQ0xBUkVfQkZJTl9SQVdfUkVBRFgodywgdTE2LCB3LCAoeikpCisjZGVmaW5lIF9fcmF3X3JlYWR3IF9fcmF3X3JlYWR3CitERUNMQVJFX0JGSU5fUkFXX1JFQURYKGwsIHUzMiwgLCApCisjZGVmaW5lIF9fcmF3X3JlYWRsIF9fcmF3X3JlYWRsCiAKIGV4dGVybiB2b2lkIG91dHNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CiBleHRlcm4gdm9pZCBvdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogZXh0ZXJuIHZvaWQgb3V0c3dfOCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogZXh0ZXJuIHZvaWQgb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKKyNkZWZpbmUgb3V0c2Igb3V0c2IKKyNkZWZpbmUgb3V0c3cgb3V0c3cKKyNkZWZpbmUgb3V0c2wgb3V0c2wKIAogZXh0ZXJuIHZvaWQgaW5zYih1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogZXh0ZXJuIHZvaWQgaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogZXh0ZXJuIHZvaWQgaW5zd184KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CiBleHRlcm4gdm9pZCBpbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CiBleHRlcm4gdm9pZCBpbnNsXzE2KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisjZGVmaW5lIGluc2IgaW5zYgorI2RlZmluZSBpbnN3IGluc3cKKyNkZWZpbmUgaW5zbCBpbnNsCiAKIGV4dGVybiB2b2lkIGRtYV9vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNob3J0IGNvdW50KTsKIGV4dGVybiB2b2lkIGRtYV9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNob3J0IGNvdW50KTsKQEAgLTE1OCwxMDggKzU4LDE0IEBACiBleHRlcm4gdm9pZCBkbWFfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNob3J0IGNvdW50KTsKIGV4dGVybiB2b2lkIGRtYV9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgc2hvcnQgY291bnQpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZHNsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQotewotCWluc2woKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZHN3KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQotewotCWluc3coKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZHNiKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQotewotCWluc2IoKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVzbChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IGxlbikKLXsKLQlvdXRzbCgodW5zaWduZWQgbG9uZylhZGRyLCBidWYsIGxlbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXN3KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuKQotewotCW91dHN3KCh1bnNpZ25lZCBsb25nKWFkZHIsIGJ1ZiwgbGVuKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlc2IoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4pCi17Ci0Jb3V0c2IoKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOwotfQotCi0vKgotICogTWFwIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4KKy8qKgorICogSS9PIHdyaXRlIGJhcnJpZXIKKyAqCisgKiBFbnN1cmUgb3JkZXJpbmcgb2YgSS9PIHNwYWNlIHdyaXRlcy4gVGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGF0IHdyaXRlcworICogZm9sbG93aW5nIHRoZSBiYXJyaWVyIHdpbGwgYXJyaXZlIGFmdGVyIGFsbCBwcmV2aW91cyB3cml0ZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCWludCBjYWNoZWZsYWcpCi17Ci0JcmV0dXJuICh2b2lkIF9faW9tZW0gKilwaHlzYWRkcjsKLX0KKyNkZWZpbmUgbW1pb3diKCkgZG8geyBTU1lOQygpOyB3bWIoKTsgfSB3aGlsZSAoMCkKIAotLyoKLSAqIFVubWFwIGEgaW9yZW1hcCgpZWQgcmVnaW9uIGFnYWluCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpb3VubWFwKHZvaWQgKmFkZHIpCi17Ci19Ci0KLS8qCi0gKiBfX2lvdW5tYXAgdW5tYXBzIG5lYXJseSBldmVyeXRoaW5nLCBzbyBiZSBjYXJlZnVsCi0gKiBpdCBkb2Vzbid0IGZyZWUgY3VycmVudGx5IHBvaW50ZXIvcGFnZSB0YWJsZXMgYW55bW9yZSBidXQgaXQKLSAqIHdhbnMndCB1c2VkIGFueXdheSBhbmQgbWlnaHQgYmUgYWRkZWQgbGF0ZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvdW5tYXAodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQotewotfQotCi0vKgotICogU2V0IG5ldyBjYWNoZSBtb2RlIGZvciBzb21lIGtlcm5lbCBhZGRyZXNzIHNwYWNlLgotICogVGhlIGNhbGxlciBtdXN0IHB1c2ggZGF0YSBmb3IgdGhhdCByYW5nZSBpdHNlbGYsIGlmIHN1Y2ggZGF0YSBtYXkgYWxyZWFkeQotICogYmUgaW4gdGhlIGNhY2hlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQga2VybmVsX3NldF9jYWNoZW1vZGUodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCQlpbnQgY21vZGUpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICppb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlyZXR1cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCBJT01BUF9OT0NBQ0hFX1NFUik7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcF9ub2NhY2hlKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgSU9NQVBfTk9DQUNIRV9TRVIpOwotfQotCi1leHRlcm4gdm9pZCBibGtmaW5faW52X2NhY2hlX2FsbCh2b2lkKTsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pby5oPgogCiAjZW5kaWYKLQotI2RlZmluZQlpb3BvcnRfbWFwKHBvcnQsIG5yKQkJKCh2b2lkIF9faW9tZW0qKShwb3J0KSkKLSNkZWZpbmUJaW9wb3J0X3VubWFwKGFkZHIpCi0KLS8qIFBhZ2VzIHRvIHBoeXNpY2FsIGFkZHJlc3MuLi4gKi8KLSNkZWZpbmUgcGFnZV90b19idXMocGFnZSkgICAgICAgKChwYWdlIC0gbWVtX21hcCkgPDwgUEFHRV9TSElGVCkKLQotI2RlZmluZSBwaHlzX3RvX3ZpcnQodmFkZHIpCSgodm9pZCAqKSAodmFkZHIpKQotI2RlZmluZSB2aXJ0X3RvX3BoeXModmFkZHIpCSgodW5zaWduZWQgbG9uZykgKHZhZGRyKSkKLQotI2RlZmluZSB2aXJ0X3RvX2J1cyB2aXJ0X3RvX3BoeXMKLSNkZWZpbmUgYnVzX3RvX3ZpcnQgcGh5c190b192aXJ0Ci0KLS8qCi0gKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCi0gKiBhY2Nlc3MKLSAqLwotI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCi0KLS8qCi0gKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCi0gKi8KLSNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKLQotI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmCQkJCS8qIF9CRklOX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxZmxhZ3MuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxZmxhZ3MuaAppbmRleCA0MWM0ZDcwLi4zMzY1Y2I5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCkBAIC0xMyw5ICsxMyw2IEBACiAjaWZkZWYgQ09ORklHX1NNUAogIyBpbmNsdWRlIDxhc20vcGRhLmg+CiAjIGluY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLS8qIEZvcndhcmQgZGVjbCBuZWVkZWQgZHVlIHRvIGNkZWYgaW50ZXIgZGVwZW5kZW5jaWVzICovCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90IF9fcHVyZSBiZmluX2RzcGlkKHZvaWQpOwotIyBkZWZpbmUgYmxhY2tmaW5fY29yZV9pZCgpIChiZmluX2RzcGlkKCkgJiAweGZmKQogIyBkZWZpbmUgYmZpbl9pcnFfZmxhZ3MgY3B1X3BkYVtibGFja2Zpbl9jb3JlX2lkKCldLmltYXNrCiAjZWxzZQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYmZpbl9pcnFfZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBhZWE4ODAyLi44YWY3NzcyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTE0LDcgKzE0LDcgQEAKICNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyBfX2xhYmVsX18gX2w7IF9sOiAmJl9sO30pCiAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CisjaW5jbHVkZSA8bWFjaC9ibGFja2Zpbi5oPgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmR1c3Aodm9pZCkKIHsKQEAgLTEzNCw2ICsxMzQsOCBAQAogCXJldHVybiBiZmluX3JlYWRfRFNQSUQoKTsKIH0KIAorI2RlZmluZSBibGFja2Zpbl9jb3JlX2lkKCkgKGJmaW5fZHNwaWQoKSAmIDB4ZmYpCisKIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgX19wdXJlIGJmaW5fY29tcGlsZWRfcmV2aWQodm9pZCkKIHsKICNpZiBkZWZpbmVkKENPTkZJR19CRl9SRVZfMF8wKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IDE5NDJjY2YuLjFmMjg2ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTE3LDEyICsxNywxMiBAQAogYXNtbGlua2FnZSB2b2lkIF9fcmF3X3NwaW5fbG9ja19hc20odm9sYXRpbGUgaW50ICpwdHIpOwogYXNtbGlua2FnZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrX2FzbSh2b2xhdGlsZSBpbnQgKnB0cik7CiBhc21saW5rYWdlIHZvaWQgX19yYXdfc3Bpbl91bmxvY2tfYXNtKHZvbGF0aWxlIGludCAqcHRyKTsKLWFzbWxpbmthZ2Ugdm9pZCBhcmNoX3JlYWRfbG9ja19hc20odm9sYXRpbGUgaW50ICpwdHIpOwotYXNtbGlua2FnZSBpbnQgYXJjaF9yZWFkX3RyeWxvY2tfYXNtKHZvbGF0aWxlIGludCAqcHRyKTsKLWFzbWxpbmthZ2Ugdm9pZCBhcmNoX3JlYWRfdW5sb2NrX2FzbSh2b2xhdGlsZSBpbnQgKnB0cik7Ci1hc21saW5rYWdlIHZvaWQgYXJjaF93cml0ZV9sb2NrX2FzbSh2b2xhdGlsZSBpbnQgKnB0cik7Ci1hc21saW5rYWdlIGludCBhcmNoX3dyaXRlX3RyeWxvY2tfYXNtKHZvbGF0aWxlIGludCAqcHRyKTsKLWFzbWxpbmthZ2Ugdm9pZCBhcmNoX3dyaXRlX3VubG9ja19hc20odm9sYXRpbGUgaW50ICpwdHIpOworYXNtbGlua2FnZSB2b2lkIF9fcmF3X3JlYWRfbG9ja19hc20odm9sYXRpbGUgaW50ICpwdHIpOworYXNtbGlua2FnZSBpbnQgX19yYXdfcmVhZF90cnlsb2NrX2FzbSh2b2xhdGlsZSBpbnQgKnB0cik7Cithc21saW5rYWdlIHZvaWQgX19yYXdfcmVhZF91bmxvY2tfYXNtKHZvbGF0aWxlIGludCAqcHRyKTsKK2FzbWxpbmthZ2Ugdm9pZCBfX3Jhd193cml0ZV9sb2NrX2FzbSh2b2xhdGlsZSBpbnQgKnB0cik7Cithc21saW5rYWdlIGludCBfX3Jhd193cml0ZV90cnlsb2NrX2FzbSh2b2xhdGlsZSBpbnQgKnB0cik7Cithc21saW5rYWdlIHZvaWQgX19yYXdfd3JpdGVfdW5sb2NrX2FzbSh2b2xhdGlsZSBpbnQgKnB0cik7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFyY2hfc3Bpbl9pc19sb2NrZWQoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewpAQCAtNjQsMzIgKzY0LDM2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3JlYWRfbG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKLQlhcmNoX3JlYWRfbG9ja19hc20oJnJ3LT5sb2NrKTsKKwlfX3Jhd19yZWFkX2xvY2tfYXNtKCZydy0+bG9jayk7CiB9CiAKKyNkZWZpbmUgYXJjaF9yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIGFyY2hfcmVhZF9sb2NrKGxvY2spCisKIHN0YXRpYyBpbmxpbmUgaW50IGFyY2hfcmVhZF90cnlsb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewotCXJldHVybiBhcmNoX3JlYWRfdHJ5bG9ja19hc20oJnJ3LT5sb2NrKTsKKwlyZXR1cm4gX19yYXdfcmVhZF90cnlsb2NrX2FzbSgmcnctPmxvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZWFkX3VubG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKLQlhcmNoX3JlYWRfdW5sb2NrX2FzbSgmcnctPmxvY2spOworCV9fcmF3X3JlYWRfdW5sb2NrX2FzbSgmcnctPmxvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF93cml0ZV9sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewotCWFyY2hfd3JpdGVfbG9ja19hc20oJnJ3LT5sb2NrKTsKKwlfX3Jhd193cml0ZV9sb2NrX2FzbSgmcnctPmxvY2spOwogfQogCisjZGVmaW5lIGFyY2hfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgYXJjaF93cml0ZV9sb2NrKGxvY2spCisKIHN0YXRpYyBpbmxpbmUgaW50IGFyY2hfd3JpdGVfdHJ5bG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKLQlyZXR1cm4gYXJjaF93cml0ZV90cnlsb2NrX2FzbSgmcnctPmxvY2spOworCXJldHVybiBfX3Jhd193cml0ZV90cnlsb2NrX2FzbSgmcnctPmxvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF93cml0ZV91bmxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7Ci0JYXJjaF93cml0ZV91bmxvY2tfYXNtKCZydy0+bG9jayk7CisJX19yYXdfd3JpdGVfdW5sb2NrX2FzbSgmcnctPmxvY2spOwogfQogCiAjZGVmaW5lIGFyY2hfc3Bpbl9yZWxheChsb2NrKSAgCWNwdV9yZWxheCgpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcGxsLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcGxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgyMTc4YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9tYWNoLWNvbW1vbi9wbGwuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDUtMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKKyNpZm5kZWYgX01BQ0hfQ09NTU9OX1BMTF9ICisjZGVmaW5lIF9NQUNIX0NPTU1PTl9QTExfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CisjaW5jbHVkZSA8YXNtL2lycWZsYWdzLmg+CisKKyNpZm5kZWYgYmZpbl9pd3JfcmVzdG9yZQorc3RhdGljIGlubGluZSB2b2lkCitiZmluX2l3cl9yZXN0b3JlKHVuc2lnbmVkIGxvbmcgaXdyMCwgdW5zaWduZWQgbG9uZyBpd3IxLCB1bnNpZ25lZCBsb25nIGl3cjIpCit7CisjaWZkZWYgU0lDX0lXUgorCWJmaW5fd3JpdGVfU0lDX0lXUihpd3IwKTsKKyNlbHNlCisJYmZpbl93cml0ZV9TSUNfSVdSMChpd3IwKTsKKyMgaWZkZWYgU0lDX0lXUjEKKwliZmluX3dyaXRlX1NJQ19JV1IxKGl3cjEpOworIyBlbmRpZgorIyBpZmRlZiBTSUNfSVdSMgorCWJmaW5fd3JpdGVfU0lDX0lXUjIoaXdyMik7CisjIGVuZGlmCisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZuZGVmIGJmaW5faXdyX3NhdmUKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZpbl9pd3Jfc2F2ZSh1bnNpZ25lZCBsb25nIG5pd3IwLCB1bnNpZ25lZCBsb25nIG5pd3IxLCB1bnNpZ25lZCBsb25nIG5pd3IyLAorICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICppd3IwLCB1bnNpZ25lZCBsb25nICppd3IxLCB1bnNpZ25lZCBsb25nICppd3IyKQoreworI2lmZGVmIFNJQ19JV1IKKwkqaXdyMCA9IGJmaW5fcmVhZF9TSUNfSVdSKCk7CisjZWxzZQorCSppd3IwID0gYmZpbl9yZWFkX1NJQ19JV1IwKCk7CisjIGlmZGVmIFNJQ19JV1IxCisJKml3cjEgPSBiZmluX3JlYWRfU0lDX0lXUjEoKTsKKyMgZW5kaWYKKyMgaWZkZWYgU0lDX0lXUjIKKwkqaXdyMiA9IGJmaW5fcmVhZF9TSUNfSVdSMigpOworIyBlbmRpZgorI2VuZGlmCisJYmZpbl9pd3JfcmVzdG9yZShuaXdyMCwgbml3cjEsIG5pd3IyKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgX2JmaW5fd3JpdGVfcGxsX3JlbG9jayh1MzIgYWRkciwgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBpd3IwLCBpd3IxLCBpd3IyOworCisJaWYgKHZhbCA9PSBiZmluX3JlYWRfUExMX0NUTCgpKQorCQlyZXR1cm47CisKKwlmbGFncyA9IGhhcmRfbG9jYWxfaXJxX3NhdmUoKTsKKwkvKiBFbmFibGUgdGhlIFBMTCBXYWtldXAgYml0IGluIFNJQyBJV1IgKi8KKwliZmluX2l3cl9zYXZlKElXUl9FTkFCTEUoMCksIDAsIDAsICZpd3IwLCAmaXdyMSwgJml3cjIpOworCisJYmZpbl93cml0ZTE2KGFkZHIsIHZhbCk7CisJU1NZTkMoKTsKKwlhc20oIklETEU7Iik7CisKKwliZmluX2l3cl9yZXN0b3JlKGl3cjAsIGl3cjEsIGl3cjIpOworCWhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKiBXcml0aW5nIHRvIFBMTF9DVEwgaW5pdGlhdGVzIGEgUExMIHJlbG9jayBzZXF1ZW5jZSAqLworc3RhdGljIGlubGluZSB2b2lkIGJmaW5fd3JpdGVfUExMX0NUTCh1bnNpZ25lZCBpbnQgdmFsKQoreworCV9iZmluX3dyaXRlX3BsbF9yZWxvY2soUExMX0NUTCwgdmFsKTsKK30KKworLyogV3JpdGluZyB0byBWUl9DVEwgaW5pdGlhdGVzIGEgUExMIHJlbG9jayBzZXF1ZW5jZSAqLworc3RhdGljIGlubGluZSB2b2lkIGJmaW5fd3JpdGVfVlJfQ1RMKHVuc2lnbmVkIGludCB2YWwpCit7CisJX2JmaW5fd3JpdGVfcGxsX3JlbG9jayhWUl9DVEwsIHZhbCk7Cit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9tYWNoLWNvbW1vbi9wb3J0cy1hLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzhhNzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtYS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBQb3J0IEEgTWFza3MKKyAqLworCisjaWZuZGVmIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfQV9fCisjZGVmaW5lIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfQV9fCisKKyNkZWZpbmUgUEEwCQkoMSA8PCAwKQorI2RlZmluZSBQQTEJCSgxIDw8IDEpCisjZGVmaW5lIFBBMgkJKDEgPDwgMikKKyNkZWZpbmUgUEEzCQkoMSA8PCAzKQorI2RlZmluZSBQQTQJCSgxIDw8IDQpCisjZGVmaW5lIFBBNQkJKDEgPDwgNSkKKyNkZWZpbmUgUEE2CQkoMSA8PCA2KQorI2RlZmluZSBQQTcJCSgxIDw8IDcpCisjZGVmaW5lIFBBOAkJKDEgPDwgOCkKKyNkZWZpbmUgUEE5CQkoMSA8PCA5KQorI2RlZmluZSBQQTEwCQkoMSA8PCAxMCkKKyNkZWZpbmUgUEExMQkJKDEgPDwgMTEpCisjZGVmaW5lIFBBMTIJCSgxIDw8IDEyKQorI2RlZmluZSBQQTEzCQkoMSA8PCAxMykKKyNkZWZpbmUgUEExNAkJKDEgPDwgMTQpCisjZGVmaW5lIFBBMTUJCSgxIDw8IDE1KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9tYWNoLWNvbW1vbi9wb3J0cy1iLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MTcwMmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtYi5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBQb3J0IEIgTWFza3MKKyAqLworCisjaWZuZGVmIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfQl9fCisjZGVmaW5lIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfQl9fCisKKyNkZWZpbmUgUEIwCQkoMSA8PCAwKQorI2RlZmluZSBQQjEJCSgxIDw8IDEpCisjZGVmaW5lIFBCMgkJKDEgPDwgMikKKyNkZWZpbmUgUEIzCQkoMSA8PCAzKQorI2RlZmluZSBQQjQJCSgxIDw8IDQpCisjZGVmaW5lIFBCNQkJKDEgPDwgNSkKKyNkZWZpbmUgUEI2CQkoMSA8PCA2KQorI2RlZmluZSBQQjcJCSgxIDw8IDcpCisjZGVmaW5lIFBCOAkJKDEgPDwgOCkKKyNkZWZpbmUgUEI5CQkoMSA8PCA5KQorI2RlZmluZSBQQjEwCQkoMSA8PCAxMCkKKyNkZWZpbmUgUEIxMQkJKDEgPDwgMTEpCisjZGVmaW5lIFBCMTIJCSgxIDw8IDEyKQorI2RlZmluZSBQQjEzCQkoMSA8PCAxMykKKyNkZWZpbmUgUEIxNAkJKDEgPDwgMTQpCisjZGVmaW5lIFBCMTUJCSgxIDw8IDE1KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9tYWNoLWNvbW1vbi9wb3J0cy1jLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYzY2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtYy5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBQb3J0IEMgTWFza3MKKyAqLworCisjaWZuZGVmIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfQ19fCisjZGVmaW5lIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfQ19fCisKKyNkZWZpbmUgUEMwCQkoMSA8PCAwKQorI2RlZmluZSBQQzEJCSgxIDw8IDEpCisjZGVmaW5lIFBDMgkJKDEgPDwgMikKKyNkZWZpbmUgUEMzCQkoMSA8PCAzKQorI2RlZmluZSBQQzQJCSgxIDw8IDQpCisjZGVmaW5lIFBDNQkJKDEgPDwgNSkKKyNkZWZpbmUgUEM2CQkoMSA8PCA2KQorI2RlZmluZSBQQzcJCSgxIDw8IDcpCisjZGVmaW5lIFBDOAkJKDEgPDwgOCkKKyNkZWZpbmUgUEM5CQkoMSA8PCA5KQorI2RlZmluZSBQQzEwCQkoMSA8PCAxMCkKKyNkZWZpbmUgUEMxMQkJKDEgPDwgMTEpCisjZGVmaW5lIFBDMTIJCSgxIDw8IDEyKQorI2RlZmluZSBQQzEzCQkoMSA8PCAxMykKKyNkZWZpbmUgUEMxNAkJKDEgPDwgMTQpCisjZGVmaW5lIFBDMTUJCSgxIDw8IDE1KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9tYWNoLWNvbW1vbi9wb3J0cy1kLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OGM2YTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtZC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBQb3J0IEQgTWFza3MKKyAqLworCisjaWZuZGVmIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfRF9fCisjZGVmaW5lIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfRF9fCisKKyNkZWZpbmUgUEQwCQkoMSA8PCAwKQorI2RlZmluZSBQRDEJCSgxIDw8IDEpCisjZGVmaW5lIFBEMgkJKDEgPDwgMikKKyNkZWZpbmUgUEQzCQkoMSA8PCAzKQorI2RlZmluZSBQRDQJCSgxIDw8IDQpCisjZGVmaW5lIFBENQkJKDEgPDwgNSkKKyNkZWZpbmUgUEQ2CQkoMSA8PCA2KQorI2RlZmluZSBQRDcJCSgxIDw8IDcpCisjZGVmaW5lIFBEOAkJKDEgPDwgOCkKKyNkZWZpbmUgUEQ5CQkoMSA8PCA5KQorI2RlZmluZSBQRDEwCQkoMSA8PCAxMCkKKyNkZWZpbmUgUEQxMQkJKDEgPDwgMTEpCisjZGVmaW5lIFBEMTIJCSgxIDw8IDEyKQorI2RlZmluZSBQRDEzCQkoMSA8PCAxMykKKyNkZWZpbmUgUEQxNAkJKDEgPDwgMTQpCisjZGVmaW5lIFBEMTUJCSgxIDw8IDE1KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9tYWNoLWNvbW1vbi9wb3J0cy1lLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4OGIwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBQb3J0IEUgTWFza3MKKyAqLworCisjaWZuZGVmIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfRV9fCisjZGVmaW5lIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfRV9fCisKKyNkZWZpbmUgUEUwCQkoMSA8PCAwKQorI2RlZmluZSBQRTEJCSgxIDw8IDEpCisjZGVmaW5lIFBFMgkJKDEgPDwgMikKKyNkZWZpbmUgUEUzCQkoMSA8PCAzKQorI2RlZmluZSBQRTQJCSgxIDw8IDQpCisjZGVmaW5lIFBFNQkJKDEgPDwgNSkKKyNkZWZpbmUgUEU2CQkoMSA8PCA2KQorI2RlZmluZSBQRTcJCSgxIDw8IDcpCisjZGVmaW5lIFBFOAkJKDEgPDwgOCkKKyNkZWZpbmUgUEU5CQkoMSA8PCA5KQorI2RlZmluZSBQRTEwCQkoMSA8PCAxMCkKKyNkZWZpbmUgUEUxMQkJKDEgPDwgMTEpCisjZGVmaW5lIFBFMTIJCSgxIDw8IDEyKQorI2RlZmluZSBQRTEzCQkoMSA8PCAxMykKKyNkZWZpbmUgUEUxNAkJKDEgPDwgMTQpCisjZGVmaW5lIFBFMTUJCSgxIDw8IDE1KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9tYWNoLWNvbW1vbi9wb3J0cy1mLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YWYyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtZi5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBQb3J0IEYgTWFza3MKKyAqLworCisjaWZuZGVmIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfRl9fCisjZGVmaW5lIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfRl9fCisKKyNkZWZpbmUgUEYwCQkoMSA8PCAwKQorI2RlZmluZSBQRjEJCSgxIDw8IDEpCisjZGVmaW5lIFBGMgkJKDEgPDwgMikKKyNkZWZpbmUgUEYzCQkoMSA8PCAzKQorI2RlZmluZSBQRjQJCSgxIDw8IDQpCisjZGVmaW5lIFBGNQkJKDEgPDwgNSkKKyNkZWZpbmUgUEY2CQkoMSA8PCA2KQorI2RlZmluZSBQRjcJCSgxIDw8IDcpCisjZGVmaW5lIFBGOAkJKDEgPDwgOCkKKyNkZWZpbmUgUEY5CQkoMSA8PCA5KQorI2RlZmluZSBQRjEwCQkoMSA8PCAxMCkKKyNkZWZpbmUgUEYxMQkJKDEgPDwgMTEpCisjZGVmaW5lIFBGMTIJCSgxIDw8IDEyKQorI2RlZmluZSBQRjEzCQkoMSA8PCAxMykKKyNkZWZpbmUgUEYxNAkJKDEgPDwgMTQpCisjZGVmaW5lIFBGMTUJCSgxIDw8IDE1KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9tYWNoLWNvbW1vbi9wb3J0cy1nLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MzU1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtZy5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBQb3J0IEcgTWFza3MKKyAqLworCisjaWZuZGVmIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfR19fCisjZGVmaW5lIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfR19fCisKKyNkZWZpbmUgUEcwCQkoMSA8PCAwKQorI2RlZmluZSBQRzEJCSgxIDw8IDEpCisjZGVmaW5lIFBHMgkJKDEgPDwgMikKKyNkZWZpbmUgUEczCQkoMSA8PCAzKQorI2RlZmluZSBQRzQJCSgxIDw8IDQpCisjZGVmaW5lIFBHNQkJKDEgPDwgNSkKKyNkZWZpbmUgUEc2CQkoMSA8PCA2KQorI2RlZmluZSBQRzcJCSgxIDw8IDcpCisjZGVmaW5lIFBHOAkJKDEgPDwgOCkKKyNkZWZpbmUgUEc5CQkoMSA8PCA5KQorI2RlZmluZSBQRzEwCQkoMSA8PCAxMCkKKyNkZWZpbmUgUEcxMQkJKDEgPDwgMTEpCisjZGVmaW5lIFBHMTIJCSgxIDw8IDEyKQorI2RlZmluZSBQRzEzCQkoMSA8PCAxMykKKyNkZWZpbmUgUEcxNAkJKDEgPDwgMTQpCisjZGVmaW5lIFBHMTUJCSgxIDw8IDE1KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9tYWNoLWNvbW1vbi9wb3J0cy1oLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMzkxMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtaC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBQb3J0IEggTWFza3MKKyAqLworCisjaWZuZGVmIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfSF9fCisjZGVmaW5lIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfSF9fCisKKyNkZWZpbmUgUEgwCQkoMSA8PCAwKQorI2RlZmluZSBQSDEJCSgxIDw8IDEpCisjZGVmaW5lIFBIMgkJKDEgPDwgMikKKyNkZWZpbmUgUEgzCQkoMSA8PCAzKQorI2RlZmluZSBQSDQJCSgxIDw8IDQpCisjZGVmaW5lIFBINQkJKDEgPDwgNSkKKyNkZWZpbmUgUEg2CQkoMSA8PCA2KQorI2RlZmluZSBQSDcJCSgxIDw8IDcpCisjZGVmaW5lIFBIOAkJKDEgPDwgOCkKKyNkZWZpbmUgUEg5CQkoMSA8PCA5KQorI2RlZmluZSBQSDEwCQkoMSA8PCAxMCkKKyNkZWZpbmUgUEgxMQkJKDEgPDwgMTEpCisjZGVmaW5lIFBIMTIJCSgxIDw8IDEyKQorI2RlZmluZSBQSDEzCQkoMSA8PCAxMykKKyNkZWZpbmUgUEgxNAkJKDEgPDwgMTQpCisjZGVmaW5lIFBIMTUJCSgxIDw8IDE1KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9tYWNoLWNvbW1vbi9wb3J0cy1pLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzZmMDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtaS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBQb3J0IEkgTWFza3MKKyAqLworCisjaWZuZGVmIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfSV9fCisjZGVmaW5lIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfSV9fCisKKyNkZWZpbmUgUEkwCQkoMSA8PCAwKQorI2RlZmluZSBQSTEJCSgxIDw8IDEpCisjZGVmaW5lIFBJMgkJKDEgPDwgMikKKyNkZWZpbmUgUEkzCQkoMSA8PCAzKQorI2RlZmluZSBQSTQJCSgxIDw8IDQpCisjZGVmaW5lIFBJNQkJKDEgPDwgNSkKKyNkZWZpbmUgUEk2CQkoMSA8PCA2KQorI2RlZmluZSBQSTcJCSgxIDw8IDcpCisjZGVmaW5lIFBJOAkJKDEgPDwgOCkKKyNkZWZpbmUgUEk5CQkoMSA8PCA5KQorI2RlZmluZSBQSTEwCQkoMSA8PCAxMCkKKyNkZWZpbmUgUEkxMQkJKDEgPDwgMTEpCisjZGVmaW5lIFBJMTIJCSgxIDw8IDEyKQorI2RlZmluZSBQSTEzCQkoMSA8PCAxMykKKyNkZWZpbmUgUEkxNAkJKDEgPDwgMTQpCisjZGVmaW5lIFBJMTUJCSgxIDw8IDE1KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9tYWNoLWNvbW1vbi9wb3J0cy1qLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtai5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDEyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvbWFjaC1jb21tb24vcG9ydHMtai5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBQb3J0IEogTWFza3MKKyAqLworCisjaWZuZGVmIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfSl9fCisjZGVmaW5lIF9fQkZJTl9QRVJJUEhFUkFMX1BPUlRfSl9fCisKKyNkZWZpbmUgUEowCQkoMSA8PCAwKQorI2RlZmluZSBQSjEJCSgxIDw8IDEpCisjZGVmaW5lIFBKMgkJKDEgPDwgMikKKyNkZWZpbmUgUEozCQkoMSA8PCAzKQorI2RlZmluZSBQSjQJCSgxIDw8IDQpCisjZGVmaW5lIFBKNQkJKDEgPDwgNSkKKyNkZWZpbmUgUEo2CQkoMSA8PCA2KQorI2RlZmluZSBQSjcJCSgxIDw8IDcpCisjZGVmaW5lIFBKOAkJKDEgPDwgOCkKKyNkZWZpbmUgUEo5CQkoMSA8PCA5KQorI2RlZmluZSBQSjEwCQkoMSA8PCAxMCkKKyNkZWZpbmUgUEoxMQkJKDEgPDwgMTEpCisjZGVmaW5lIFBKMTIJCSgxIDw8IDEyKQorI2RlZmluZSBQSjEzCQkoMSA8PCAxMykKKyNkZWZpbmUgUEoxNAkJKDEgPDwgMTQpCisjZGVmaW5lIFBKMTUJCSgxIDw8IDE1KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYwppbmRleCBiZmU3NWFmLi44ODZlMDAwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJpbml0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxiaW5pdC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkgICAgKChfcmFtZW5kIC0gdW5jYWNoZWRfZW5kKSA+PSAxICogMTAyNCAqIDEwMjQpKQogCQlkY3BsYl9ib3VuZHNbaV9kXS5lYWRkciA9IHVuY2FjaGVkX2VuZDsKIAllbHNlCi0JCWRjcGxiX2JvdW5kc1tpX2RdLmVhZGRyID0gdW5jYWNoZWRfZW5kICYgfigxICogMTAyNCAqIDEwMjQpOworCQlkY3BsYl9ib3VuZHNbaV9kXS5lYWRkciA9IHVuY2FjaGVkX2VuZCAmIH4oMSAqIDEwMjQgKiAxMDI0IC0gMSk7CiAJZGNwbGJfYm91bmRzW2lfZCsrXS5kYXRhID0gU0RSQU1fREdFTkVSSUM7CiAJLyogRE1BIHVuY2FjaGVkIHJlZ2lvbi4gICovCiAJaWYgKERNQV9VTkNBQ0hFRF9SRUdJT04pIHsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGIuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGIuYwppbmRleCBlZGFlNDYxLi5lYjkyNTkyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYi5jCkBAIC0zNDUsNiArMzQ1LDIzIEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19JUElQRQorc3RhdGljIHVuc2lnbmVkIGxvbmcga2dkYl9hcmNoX2ltYXNrOworI2VuZGlmCisKK3ZvaWQga2dkYl9wb3N0X3ByaW1hcnlfY29kZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVfdmVjdG9yLCBpbnQgZXJyX2NvZGUpCit7CisJaWYgKGtnZGJfc2luZ2xlX3N0ZXApCisJCXByZWVtcHRfZW5hYmxlKCk7CisKKyNpZmRlZiBDT05GSUdfSVBJUEUKKwlpZiAoa2dkYl9hcmNoX2ltYXNrKSB7CisJCWNwdV9wZGFbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV0uZXhfaW1hc2sgPSBrZ2RiX2FyY2hfaW1hc2s7CisJCWtnZGJfYXJjaF9pbWFzayA9IDA7CisJfQorI2VuZGlmCit9CisKIGludCBrZ2RiX2FyY2hfaGFuZGxlX2V4Y2VwdGlvbihpbnQgdmVjdG9yLCBpbnQgc2lnbm8sCiAJCQkgICAgICAgaW50IGVycl9jb2RlLCBjaGFyICpyZW1jb21faW5fYnVmZmVyLAogCQkJICAgICAgIGNoYXIgKnJlbWNvbV9vdXRfYnVmZmVyLApAQCAtMzg4LDYgKzQwNSwxMiBAQAogCQkJICoga2dkYl9zaW5nbGVfc3RlcCA+IDAgbWVhbnMgaW4gc2luZ2xlIHN0ZXAgbW9kZQogCQkJICovCiAJCQlrZ2RiX3NpbmdsZV9zdGVwID0gaSArIDE7CisKKwkJCXByZWVtcHRfZGlzYWJsZSgpOworI2lmZGVmIENPTkZJR19JUElQRQorCQkJa2dkYl9hcmNoX2ltYXNrID0gY3B1X3BkYVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXS5leF9pbWFzazsKKwkJCWNwdV9wZGFbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV0uZXhfaW1hc2sgPSAwOworI2VuZGlmCiAJCX0KIAogCQliZmluX2NvcnJlY3RfaHdfYnJlYWsoKTsKQEAgLTQ0OCw2ICs0NzEsOSBAQAogaW50IGtnZGJfYXJjaF9pbml0KHZvaWQpCiB7CiAJa2dkYl9zaW5nbGVfc3RlcCA9IDA7CisjaWZkZWYgQ09ORklHX0lQSVBFCisJa2dkYl9hcmNoX2ltYXNrID0gMDsKKyNlbmRpZgogCiAJYmZpbl9yZW1vdmVfYWxsX2h3X2JyZWFrKCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9rZ2RiX3Rlc3QuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGJfdGVzdC5jCmluZGV4IDA4YzAyMzYuLjJhNmU5ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGJfdGVzdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGJfdGVzdC5jCkBAIC05NSw2ICs5NSwxMCBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CiAKKyNpZiBMMl9MRU5HVEgKKwludW0yID0gMDsKKyNlbmRpZgorCiAJZW50cnkgPSBwcm9jX2NyZWF0ZSgia2dkYnRlc3QiLCAwLCBOVUxMLCAma2dkYl90ZXN0X3Byb2NfZm9wcyk7CiAJaWYgKGVudHJ5ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2JvYXJkcy9lemJyZC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2JvYXJkcy9lemJyZC5jCmluZGV4IGI4OTRjOGEuLmMwY2NhZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9ib2FyZHMvZXpicmQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL2V6YnJkLmMKQEAgLTEwNCwyNCArMTA0LDIzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgYmZpbl9waHlkZXZfcGxhdGZvcm1fZGF0YSBiZmluX3BoeWRldl9kYXRhW10gPSB7CiAJewotCQkuYWRkciA9IDEsCi0JCS5pcnEgPSBJUlFfTUFDX1BIWUlOVCwKLQl9LAotCXsKLQkJLmFkZHIgPSAyLAotCQkuaXJxID0gSVJRX01BQ19QSFlJTlQsCi0JfSwKLQl7CisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RTQV9LU1o4ODkzTSkgfHwgZGVmaW5lZChDT05GSUdfTkVUX0RTQV9LU1o4ODkzTV9NT0RVTEUpCiAJCS5hZGRyID0gMywKKyNlbHNlCisJCS5hZGRyID0gMSwKKyNlbmRpZgogCQkuaXJxID0gSVJRX01BQ19QSFlJTlQsCiAJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYmZpbl9taWlfYnVzX3BsYXRmb3JtX2RhdGEgYmZpbl9taWlfYnVzX2RhdGEgPSB7Ci0JLnBoeWRldl9udW1iZXIgPSAzLAorCS5waHlkZXZfbnVtYmVyID0gMSwKIAkucGh5ZGV2X2RhdGEgPSBiZmluX3BoeWRldl9kYXRhLAogCS5waHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCiAJLm1hY19wZXJpcGhlcmFscyA9IGJmaW5fbWFjX3BlcmlwaGVyYWxzLAorI2lmIGRlZmluZWQoQ09ORklHX05FVF9EU0FfS1NaODg5M00pIHx8IGRlZmluZWQoQ09ORklHX05FVF9EU0FfS1NaODg5M01fTU9EVUxFKQorCS5waHlfbWFzayA9IDB4ZmZmNywgLyogT25seSBwcm9iZSB0aGUgcG9ydCBwaHkgY29ubmVjdCB0byB0aGUgb24gY2hpcCBNQUMgKi8KKyNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9taWlfYnVzID0gewpAQCAtNDUzLDcgKzQ1Miw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMF9UWCwgUF9VQVJUMF9SWCwgMAogfTsKIApAQCAtNDk2LDcgKzQ5NSw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDFfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQxX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMV9UWCwgUF9VQVJUMV9SWCwgMAogfTsKIApAQCAtNjM2LDkgKzYzNSw5IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQwX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1NQT1JUMF9URlMsIFBfU1BPUlQwX0RUUFJJLCBQX1NQT1JUMF9UU0NMSywgUF9TUE9SVDBfUkZTLAotCVBfU1BPUlQwX0RSUFJJLCBQX1NQT1JUMF9SU0NMSywgUF9TUE9SVDBfRFJTRUMsIFBfU1BPUlQwX0RUU0VDLCAwCisJUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCAwCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MF91YXJ0X2RldmljZSA9IHsKQEAgLTY3MCw5ICs2NjksOSBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MV9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQxX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9TUE9SVDFfVEZTLCBQX1NQT1JUMV9EVFBSSSwgUF9TUE9SVDFfVFNDTEssIFBfU1BPUlQxX1JGUywKLQlQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIFBfU1BPUlQxX0RSU0VDLCBQX1NQT1JUMV9EVFNFQywgMAorCVBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgMAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zcG9ydDFfdWFydF9kZXZpY2UgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL3RjbS1iZjUxOC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2JvYXJkcy90Y20tYmY1MTguYwppbmRleCBlNmNlMWQ3Li41MGZjNWM4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL3RjbS1iZjUxOC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9ib2FyZHMvdGNtLWJmNTE4LmMKQEAgLTM3Nyw3ICszNzcsNyBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfVUFSVDBfVFgsIFBfVUFSVDBfUlgsIDAKIH07CiAKQEAgLTQyMCw3ICs0MjAsNyBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQxX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MV9wZXJpcGhlcmFsc1tdID0gewogCVBfVUFSVDFfVFgsIFBfVUFSVDFfUlgsIDAKIH07CiAKQEAgLTU0Nyw5ICs1NDcsOSBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MF9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQwX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9TUE9SVDBfVEZTLCBQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywKLQlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIFBfU1BPUlQwX0RSU0VDLCBQX1NQT1JUMF9EVFNFQywgMAorCVBfU1BPUlQwX0RSUFJJLCBQX1NQT1JUMF9SU0NMSywgMAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zcG9ydDBfdWFydF9kZXZpY2UgPSB7CkBAIC01ODEsOSArNTgxLDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDFfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MV9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQxX1RGUywgUF9TUE9SVDFfRFRQUkksIFBfU1BPUlQxX1RTQ0xLLCBQX1NQT1JUMV9SRlMsCi0JUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCBQX1NQT1JUMV9EUlNFQywgUF9TUE9SVDFfRFRTRUMsIDAKKwlQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQxX3VhcnRfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2RtYS5jCmluZGV4IDc4YjQzNjAuLmJjZDFmYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvZG1hLmMKQEAgLTExLDcgKzExLDcgQEAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAKLXN0cnVjdCBkbWFfcmVnaXN0ZXIgKmRtYV9pb19iYXNlX2FkZHJbTUFYX0RNQV9DSEFOTkVMU10gPSB7CitzdHJ1Y3QgZG1hX3JlZ2lzdGVyICogY29uc3QgZG1hX2lvX2Jhc2VfYWRkcltNQVhfRE1BX0NIQU5ORUxTXSA9IHsKIAkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBETUEwX05FWFRfREVTQ19QVFIsCiAJKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgRE1BMV9ORVhUX0RFU0NfUFRSLAogCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIERNQTJfTkVYVF9ERVNDX1BUUiwKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWwuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGM2MDNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbC5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBtYWNoL2JmaW5fc2VyaWFsLmggLSBCbGFja2ZpbiBVQVJUL1NlcmlhbCBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA2LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaWZuZGVmIF9fQkZJTl9NQUNIX1NFUklBTF9IX18KKyNkZWZpbmUgX19CRklOX01BQ0hfU0VSSUFMX0hfXworCisjZGVmaW5lIEJGSU5fVUFSVF9OUl9QT1JUUwkyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggOTcwZDMxMC4uZjZkOTI0YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC00LDM2ICs0LDkgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KIAotI2RlZmluZSBVQVJUX0dFVF9DSEFSKHVhcnQpICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfUkJSKSkKLSNkZWZpbmUgVUFSVF9HRVRfRExMKHVhcnQpCWJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9ETEwpKQotI2RlZmluZSBVQVJUX0dFVF9JRVIodWFydCkgICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfSUVSKSkKLSNkZWZpbmUgVUFSVF9HRVRfRExIKHVhcnQpCWJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9ETEgpKQotI2RlZmluZSBVQVJUX0dFVF9JSVIodWFydCkgICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfSUlSKSkKLSNkZWZpbmUgVUFSVF9HRVRfTENSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xDUikpCi0jZGVmaW5lIFVBUlRfR0VUX0dDVEwodWFydCkgICAgIGJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9HQ1RMKSkKLQotI2RlZmluZSBVQVJUX1BVVF9DSEFSKHVhcnQsIHYpICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9USFIpLCB2KQotI2RlZmluZSBVQVJUX1BVVF9ETEwodWFydCwgdikgICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9ETEwpLCB2KQotI2RlZmluZSBVQVJUX1BVVF9JRVIodWFydCwgdikgICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9JRVIpLCB2KQotI2RlZmluZSBVQVJUX1NFVF9JRVIodWFydCwgdikgICAgVUFSVF9QVVRfSUVSKHVhcnQsIFVBUlRfR0VUX0lFUih1YXJ0KSB8ICh2KSkKLSNkZWZpbmUgVUFSVF9DTEVBUl9JRVIodWFydCwgdikgIFVBUlRfUFVUX0lFUih1YXJ0LCBVQVJUX0dFVF9JRVIodWFydCkgJiB+KHYpKQotI2RlZmluZSBVQVJUX1BVVF9ETEgodWFydCwgdikgICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9ETEgpLCB2KQotI2RlZmluZSBVQVJUX1BVVF9MQ1IodWFydCwgdikgICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MQ1IpLCB2KQotI2RlZmluZSBVQVJUX1BVVF9HQ1RMKHVhcnQsIHYpICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9HQ1RMKSwgdikKLQotI2RlZmluZSBVQVJUX1NFVF9ETEFCKHVhcnQpICAgICBkbyB7IFVBUlRfUFVUX0xDUih1YXJ0LCBVQVJUX0dFVF9MQ1IodWFydCkgfCBETEFCKTsgU1NZTkMoKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgVUFSVF9DTEVBUl9ETEFCKHVhcnQpICAgZG8geyBVQVJUX1BVVF9MQ1IodWFydCwgVUFSVF9HRVRfTENSKHVhcnQpICYgfkRMQUIpOyBTU1lOQygpOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFVBUlRfR0VUX0NUUyh4KSBncGlvX2dldF92YWx1ZSh4LT5jdHNfcGluKQotI2RlZmluZSBVQVJUX0RJU0FCTEVfUlRTKHgpIGdwaW9fc2V0X3ZhbHVlKHgtPnJ0c19waW4sIDEpCi0jZGVmaW5lIFVBUlRfRU5BQkxFX1JUUyh4KSBncGlvX3NldF92YWx1ZSh4LT5ydHNfcGluLCAwKQotI2RlZmluZSBVQVJUX0VOQUJMRV9JTlRTKHgsIHYpIFVBUlRfUFVUX0lFUih4LCB2KQotI2RlZmluZSBVQVJUX0RJU0FCTEVfSU5UUyh4KSBVQVJUX1BVVF9JRVIoeCwgMCkKLQogI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fVUFSVDBfQ1RTUlRTKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX1VBUlQxX0NUU1JUUykKICMgZGVmaW5lIENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKIApAQCAtNTQsNTAgKzI3LDYgQEAKICMgZW5kaWYKICNlbmRpZgogCi0jZGVmaW5lIEJGSU5fVUFSVF9UWF9GSUZPX1NJWkUJMgotCi0vKgotICogVGhlIHBpbiBjb25maWd1cmF0aW9uIGlzIGRpZmZlcmVudCBmcm9tIHNjaGVtYXRpYwotICovCi1zdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCB7Ci0Jc3RydWN0IHVhcnRfcG9ydCBwb3J0OwotCXVuc2lnbmVkIGludCBvbGRfc3RhdHVzOwotCWludCBzdGF0dXNfaXJxOwotCXVuc2lnbmVkIGludCBsc3I7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0RNQQotCWludCB0eF9kb25lOwotCWludCB0eF9jb3VudDsKLQlzdHJ1Y3QgY2lyY19idWYgcnhfZG1hX2J1ZjsKLQlzdHJ1Y3QgdGltZXJfbGlzdCByeF9kbWFfdGltZXI7Ci0JaW50IHJ4X2RtYV9ucm93czsKLQl1bnNpZ25lZCBpbnQgdHhfZG1hX2NoYW5uZWw7Ci0JdW5zaWduZWQgaW50IHJ4X2RtYV9jaGFubmVsOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF9kbWFfd29ya3F1ZXVlOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUwotCXN0cnVjdCB0aW1lcl9saXN0IGN0c190aW1lcjsKLQlpbnQgY3RzX3BpbjsKLQlpbnQgcnRzX3BpbjsKLSNlbmRpZgotfTsKLQotLyogVGhlIGhhcmR3YXJlIGNsZWFycyB0aGUgTFNSIGJpdHMgdXBvbiByZWFkLCBzbyB3ZSBuZWVkIHRvIGNhY2hlCi0gKiBzb21lIG9mIHRoZSBtb3JlIGZ1biBiaXRzIGluIHNvZnR3YXJlIHNvIHRoZXkgZG9uJ3QgZ2V0IGxvc3QKLSAqIHdoZW4gY2hlY2tpbmcgdGhlIExTUiBpbiBvdGhlciBjb2RlIHBhdGhzIChUWCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFVBUlRfR0VUX0xTUihzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCkKLXsKLQl1bnNpZ25lZCBpbnQgbHNyID0gYmZpbl9yZWFkMTYodWFydC0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUik7Ci0JdWFydC0+bHNyIHw9IChsc3IgJiAoQkl8RkV8UEV8T0UpKTsKLQlyZXR1cm4gbHNyIHwgdWFydC0+bHNyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgVUFSVF9DTEVBUl9MU1Ioc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCi17Ci0JdWFydC0+bHNyID0gMDsKLQliZmluX3dyaXRlMTYodWFydC0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUiwgLTEpOwotfQotCiBzdHJ1Y3QgYmZpbl9zZXJpYWxfcmVzIHsKIAl1bnNpZ25lZCBsb25nIHVhcnRfYmFzZV9hZGRyOwogCWludCB1YXJ0X2lycTsKQEAgLTE0NiwzICs3NSw1IEBACiB9OwogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJiZmluLXVhcnQiCisKKyNpbmNsdWRlIDxhc20vYmZpbl9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCA5MDUzNDYyLi5hODgyODg2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDYxICsxLDQzIEBACiAvKgotICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCiAjZGVmaW5lIF9NQUNIX0JMQUNLRklOX0hfCiAKICNpbmNsdWRlICJiZjUxOC5oIgotI2luY2x1ZGUgImRlZkJGNTEyLmgiCiAjaW5jbHVkZSAiYW5vbWFseS5oIgogCi0jaWYgZGVmaW5lZChDT05GSUdfQkY1MTgpCi0jaW5jbHVkZSAiZGVmQkY1MTguaCIKKyNpbmNsdWRlIDxhc20vZGVmX0xQQmxhY2tmaW4uaD4KKyNpZmRlZiBDT05GSUdfQkY1MTIKKyMgaW5jbHVkZSAiZGVmQkY1MTIuaCIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CRjUxNAorIyBpbmNsdWRlICJkZWZCRjUxNC5oIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0JGNTE2CisjIGluY2x1ZGUgImRlZkJGNTE2LmgiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQkY1MTgKKyMgaW5jbHVkZSAiZGVmQkY1MTguaCIKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQkY1MTYpCi0jaW5jbHVkZSAiZGVmQkY1MTYuaCIKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjIGluY2x1ZGUgPGFzbS9jZGVmX0xQQmxhY2tmaW4uaD4KKyMgaWZkZWYgQ09ORklHX0JGNTEyCisjICBpbmNsdWRlICJjZGVmQkY1MTIuaCIKKyMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX0JGNTE0CisjICBpbmNsdWRlICJjZGVmQkY1MTQuaCIKKyMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX0JGNTE2CisjICBpbmNsdWRlICJjZGVmQkY1MTYuaCIKKyMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX0JGNTE4CisjICBpbmNsdWRlICJjZGVmQkY1MTguaCIKKyMgZW5kaWYKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQkY1MTQpCi0jaW5jbHVkZSAiZGVmQkY1MTQuaCIKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQkY1MTIpCi0jaW5jbHVkZSAiZGVmQkY1MTIuaCIKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQotI2luY2x1ZGUgImNkZWZCRjUxMi5oIgotCi0jaWYgZGVmaW5lZChDT05GSUdfQkY1MTgpCi0jaW5jbHVkZSAiY2RlZkJGNTE4LmgiCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0JGNTE2KQotI2luY2x1ZGUgImNkZWZCRjUxNi5oIgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19CRjUxNCkKLSNpbmNsdWRlICJjZGVmQkY1MTQuaCIKLSNlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgQkZJTl9VQVJUX05SX1BPUlRTCTIKLQotI2RlZmluZSBPRkZTRVRfVEhSICAgICAgICAgICAgICAweDAwCS8qIFRyYW5zbWl0IEhvbGRpbmcgcmVnaXN0ZXIgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfUkJSICAgICAgICAgICAgICAweDAwCS8qIFJlY2VpdmUgQnVmZmVyIHJlZ2lzdGVyICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfRExMICAgICAgICAgICAgICAweDAwCS8qIERpdmlzb3IgTGF0Y2ggKExvdy1CeXRlKSAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfSUVSICAgICAgICAgICAgICAweDA0CS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfRExIICAgICAgICAgICAgICAweDA0CS8qIERpdmlzb3IgTGF0Y2ggKEhpZ2gtQnl0ZSkgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfSUlSICAgICAgICAgICAgICAweDA4CS8qIEludGVycnVwdCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAgICAqLwotI2RlZmluZSBPRkZTRVRfTENSICAgICAgICAgICAgICAweDBDCS8qIExpbmUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfTUNSICAgICAgICAgICAgICAweDEwCS8qIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfTFNSICAgICAgICAgICAgICAweDE0CS8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfTVNSICAgICAgICAgICAgICAweDE4CS8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfU0NSICAgICAgICAgICAgICAweDFDCS8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfR0NUTCAgICAgICAgICAgICAweDI0CS8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAqLwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTEyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxMi5oCmluZGV4IDQ5MzAyMGQuLmI2NTdkMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTEyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwpAQCAtNywxNSArNywxMDM3IEBACiAjaWZuZGVmIF9DREVGX0JGNTEyX0gKICNkZWZpbmUgX0NERUZfQkY1MTJfSAogCi0vKiBpbmNsdWRlIGFsbCBDb3JlIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zICovCi0jaW5jbHVkZSAiZGVmQkY1MTIuaCIKKy8qIENsb2NrIGFuZCBTeXN0ZW0gQ29udHJvbAkoMHhGRkMwMDAwMCAtIDB4RkZDMDAwRkYpCQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfUExMX0NUTCgpCQkJYmZpbl9yZWFkMTYoUExMX0NUTCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BMTF9ESVYoKQkJCWJmaW5fcmVhZDE2KFBMTF9ESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfUExMX0RJVih2YWwpCQkJYmZpbl93cml0ZTE2KFBMTF9ESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1ZSX0NUTCgpCQkJYmZpbl9yZWFkMTYoVlJfQ1RMKQorI2RlZmluZSBiZmluX3JlYWRfUExMX1NUQVQoKQkJCWJmaW5fcmVhZDE2KFBMTF9TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX1BMTF9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihQTExfU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUExMX0xPQ0tDTlQoKQkJCWJmaW5fcmVhZDE2KFBMTF9MT0NLQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX1BMTF9MT0NLQ05UKHZhbCkJCWJmaW5fd3JpdGUxNihQTExfTE9DS0NOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0hJUElEKCkJCQliZmluX3JlYWQzMihDSElQSUQpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0hJUElEKHZhbCkJCQliZmluX3dyaXRlMzIoQ0hJUElELCB2YWwpCiAKLS8qIGluY2x1ZGUgY29yZSBzcGVjaWZpYyByZWdpc3RlciBwb2ludGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8YXNtL2NkZWZfTFBCbGFja2Zpbi5oPgogCi0vKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUxMiAqLworLyogU3lzdGVtIEludGVycnVwdCBDb250cm9sbGVyICgweEZGQzAwMTAwIC0gMHhGRkMwMDFGRikJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1NXUlNUKCkJCQliZmluX3JlYWQxNihTV1JTVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TV1JTVCh2YWwpCQkJYmZpbl93cml0ZTE2KFNXUlNULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TWVNDUigpCQkJYmZpbl9yZWFkMTYoU1lTQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1lTQ1IodmFsKQkJCWJmaW5fd3JpdGUxNihTWVNDUiwgdmFsKQogCi0vKiBpbmNsdWRlIGNkZWZCRjUxeF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTF4IHByb2Nlc3NvcnMgKi8KLSNpbmNsdWRlICJjZGVmQkY1MXhfYmFzZS5oIgorI2RlZmluZSBiZmluX3JlYWRfU0lDX1JWRUNUKCkJCQliZmluX3JlYWQzMihTSUNfUlZFQ1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX1JWRUNUKHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfUlZFQ1QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JTUFTSzAoKQkJCWJmaW5fcmVhZDMyKFNJQ19JTUFTSzApCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lNQVNLMCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lNQVNLMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lNQVNLKHgpCQkJYmZpbl9yZWFkMzIoU0lDX0lNQVNLMCArICh4IDw8IDYpKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JTUFTSyh4LCB2YWwpCQliZmluX3dyaXRlMzIoKFNJQ19JTUFTSzAgKyAoeCA8PCA2KSksIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjAoKQkJCWJmaW5fcmVhZDMyKFNJQ19JQVIwKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVIwKHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSUFSMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjEoKQkJCWJmaW5fcmVhZDMyKFNJQ19JQVIxKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVIxKHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSUFSMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjIoKQkJCWJmaW5fcmVhZDMyKFNJQ19JQVIyKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVIyKHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSUFSMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjMoKQkJCWJmaW5fcmVhZDMyKFNJQ19JQVIzKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVIzKHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSUFSMywgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9TSUNfSVNSMCgpCQkJYmZpbl9yZWFkMzIoU0lDX0lTUjApCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lTUjAodmFsKQkJYmZpbl93cml0ZTMyKFNJQ19JU1IwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TSUNfSVNSKHgpCQkJYmZpbl9yZWFkMzIoU0lDX0lTUjAgKyAoeCA8PCA2KSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSVNSKHgsIHZhbCkJCWJmaW5fd3JpdGUzMigoU0lDX0lTUjAgKyAoeCA8PCA2KSksIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfU0lDX0lXUjAoKQkJCWJmaW5fcmVhZDMyKFNJQ19JV1IwKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JV1IwKHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSVdSMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lXUih4KQkJCWJmaW5fcmVhZDMyKFNJQ19JV1IwICsgKHggPDwgNikpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lXUih4LCB2YWwpCQliZmluX3dyaXRlMzIoKFNJQ19JV1IwICsgKHggPDwgNikpLCB2YWwpCisKKy8qIFNJQyBBZGRpdGlvbnMgdG8gQURTUC1CRjUxeCAoMHhGRkMwMDE0QyAtIDB4RkZDMDAxNjIpICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JTUFTSzEoKQkJCWJmaW5fcmVhZDMyKFNJQ19JTUFTSzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lNQVNLMSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lNQVNLMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjQoKQkJCWJmaW5fcmVhZDMyKFNJQ19JQVI0KQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVI0KHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSUFSNCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjUoKQkJCWJmaW5fcmVhZDMyKFNJQ19JQVI1KQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVI1KHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSUFSNSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjYoKQkJCWJmaW5fcmVhZDMyKFNJQ19JQVI2KQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVI2KHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSUFSNiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjcoKQkJCWJmaW5fcmVhZDMyKFNJQ19JQVI3KQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVI3KHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSUFSNywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lTUjEoKQkJCWJmaW5fcmVhZDMyKFNJQ19JU1IxKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JU1IxKHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSVNSMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lXUjEoKQkJCWJmaW5fcmVhZDMyKFNJQ19JV1IxKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JV1IxKHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSVdSMSwgdmFsKQorCisvKiBXYXRjaGRvZyBUaW1lcgkJKDB4RkZDMDAyMDAgLSAweEZGQzAwMkZGKQkJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9XRE9HX0NUTCgpCQkJYmZpbl9yZWFkMTYoV0RPR19DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfV0RPR19DVEwodmFsKQkJYmZpbl93cml0ZTE2KFdET0dfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9XRE9HX0NOVCgpCQkJYmZpbl9yZWFkMzIoV0RPR19DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfV0RPR19DTlQodmFsKQkJYmZpbl93cml0ZTMyKFdET0dfQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9XRE9HX1NUQVQoKQkJCWJmaW5fcmVhZDMyKFdET0dfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9XRE9HX1NUQVQodmFsKQkJYmZpbl93cml0ZTMyKFdET0dfU1RBVCwgdmFsKQorCisKKy8qIFJlYWwgVGltZSBDbG9jawkJKDB4RkZDMDAzMDAgLSAweEZGQzAwM0ZGKQkJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9SVENfU1RBVCgpCQkJYmZpbl9yZWFkMzIoUlRDX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlRDX1NUQVQodmFsKQkJYmZpbl93cml0ZTMyKFJUQ19TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SVENfSUNUTCgpCQkJYmZpbl9yZWFkMTYoUlRDX0lDVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlRDX0lDVEwodmFsKQkJYmZpbl93cml0ZTE2KFJUQ19JQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SVENfSVNUQVQoKQkJCWJmaW5fcmVhZDE2KFJUQ19JU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SVENfSVNUQVQodmFsKQkJYmZpbl93cml0ZTE2KFJUQ19JU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlRDX1NXQ05UKCkJCQliZmluX3JlYWQxNihSVENfU1dDTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlRDX1NXQ05UKHZhbCkJCWJmaW5fd3JpdGUxNihSVENfU1dDTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JUQ19BTEFSTSgpCQkJYmZpbl9yZWFkMzIoUlRDX0FMQVJNKQorI2RlZmluZSBiZmluX3dyaXRlX1JUQ19BTEFSTSh2YWwpCQliZmluX3dyaXRlMzIoUlRDX0FMQVJNLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SVENfRkFTVCgpCQkJYmZpbl9yZWFkMTYoUlRDX0ZBU1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlRDX0ZBU1QodmFsKQkJYmZpbl93cml0ZTE2KFJUQ19GQVNULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SVENfUFJFTigpCQkJYmZpbl9yZWFkMTYoUlRDX1BSRU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfUlRDX1BSRU4odmFsKQkJYmZpbl93cml0ZTE2KFJUQ19QUkVOLCB2YWwpCisKKworLyogVUFSVDAgQ29udHJvbGxlcgkJKDB4RkZDMDA0MDAgLSAweEZGQzAwNEZGKQkJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9USFIoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX1RIUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9USFIodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX1RIUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfUkJSKCkJCQliZmluX3JlYWQxNihVQVJUMF9SQlIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfUkJSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9SQlIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX0RMTCgpCQkJYmZpbl9yZWFkMTYoVUFSVDBfRExMKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX0RMTCh2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfRExMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9JRVIoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0lFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9JRVIodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0lFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfRExIKCkJCQliZmluX3JlYWQxNihVQVJUMF9ETEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfRExIKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9ETEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX0lJUigpCQkJYmZpbl9yZWFkMTYoVUFSVDBfSUlSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX0lJUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfSUlSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9MQ1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0xDUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9MQ1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0xDUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfTUNSKCkJCQliZmluX3JlYWQxNihVQVJUMF9NQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfTUNSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9NQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX0xTUigpCQkJYmZpbl9yZWFkMTYoVUFSVDBfTFNSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX0xTUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfTFNSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9NU1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX01TUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9NU1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX01TUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfU0NSKCkJCQliZmluX3JlYWQxNihVQVJUMF9TQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfU0NSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9TQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX0dDVEwoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0dDVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfR0NUTCh2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfR0NUTCwgdmFsKQorCisKKy8qIFRJTUVSMC03IFJlZ2lzdGVycwkJKDB4RkZDMDA2MDAgLSAweEZGQzAwNkZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVIwX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjBfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjBfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjBfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjBfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjBfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVIwX0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMF9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVIwX1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjBfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjBfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjBfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVIwX1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMF9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIwX1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMV9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVIxX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjFfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjFfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjFfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjFfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjFfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVIxX0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMV9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVIxX1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjFfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjFfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjFfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVIxX1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMV9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIxX1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMl9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVIyX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjJfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjJfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjJfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjJfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjJfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVIyX0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMl9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVIyX1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjJfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjJfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjJfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVIyX1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMl9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIyX1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSM19DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVIzX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjNfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjNfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjNfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjNfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjNfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVIzX0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSM19QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVIzX1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjNfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjNfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjNfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVIzX1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSM19XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIzX1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVI0X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjRfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjRfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjRfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjRfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjRfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVI0X0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNF9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVI0X1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjRfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjRfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjRfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVI0X1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSNF9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI0X1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNV9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVI1X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjVfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjVfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjVfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjVfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjVfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVI1X0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNV9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVI1X1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjVfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjVfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjVfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVI1X1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSNV9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI1X1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNl9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVI2X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjZfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjZfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjZfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjZfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjZfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVI2X0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNl9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVI2X1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjZfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjZfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjZfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVI2X1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSNl9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI2X1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSN19DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVI3X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjdfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjdfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjdfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjdfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjdfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVI3X0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSN19QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVI3X1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjdfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjdfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjdfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVI3X1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSN19XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI3X1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSX0VOQUJMRSgpCQliZmluX3JlYWQxNihUSU1FUl9FTkFCTEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfRU5BQkxFKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUl9FTkFCTEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSX0RJU0FCTEUoKQkJYmZpbl9yZWFkMTYoVElNRVJfRElTQUJMRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9ESVNBQkxFKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUl9ESVNBQkxFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9TVEFUVVMoKQkJYmZpbl9yZWFkMzIoVElNRVJfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMzIoVElNRVJfU1RBVFVTLCB2YWwpCisKKworLyogR2VuZXJhbCBQdXJwb3NlIEkvTyBQb3J0IEYgKDB4RkZDMDA3MDAgLSAweEZGQzAwN0ZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU8oKQkJCWJmaW5fcmVhZDE2KFBPUlRGSU8pCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJTyh2YWwpCQkJYmZpbl93cml0ZTE2KFBPUlRGSU8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX0NMRUFSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX1NFVCgpCQkJYmZpbl9yZWFkMTYoUE9SVEZJT19TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19TRVQodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX1RPR0dMRSgpCQliZmluX3JlYWQxNihQT1JURklPX1RPR0dMRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX1RPR0dMRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZJT19UT0dHTEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fTUFTS0EoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19NQVNLQSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tBKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tBLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tBX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fTUFTS0FfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19NQVNLQV9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tBX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tBX1NFVCgpCQliZmluX3JlYWQxNihQT1JURklPX01BU0tBX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tBX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tBX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19NQVNLQV9UT0dHTEUoKQliZmluX3JlYWQxNihQT1JURklPX01BU0tBX1RPR0dMRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tBX1RPR0dMRSh2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tBX1RPR0dMRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19NQVNLQigpCQliZmluX3JlYWQxNihQT1JURklPX01BU0tCKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fTUFTS0IodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fTUFTS0IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fTUFTS0JfQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19NQVNLQl9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tCX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRGSU9fTUFTS0JfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fTUFTS0JfU0VUKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fTUFTS0JfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fTUFTS0JfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRGSU9fTUFTS0JfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tCX1RPR0dMRSgpCWJmaW5fcmVhZDE2KFBPUlRGSU9fTUFTS0JfVE9HR0xFKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fTUFTS0JfVE9HR0xFKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRGSU9fTUFTS0JfVE9HR0xFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX0RJUigpCQkJYmZpbl9yZWFkMTYoUE9SVEZJT19ESVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19ESVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fRElSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX1BPTEFSKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fUE9MQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19QT0xBUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZJT19QT0xBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19FREdFKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fRURHRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX0VER0UodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fRURHRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19CT1RIKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fQk9USCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX0JPVEgodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fQk9USCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19JTkVOKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fSU5FTikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX0lORU4odmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fSU5FTiwgdmFsKQorCisKKy8qIFNQT1JUMCBDb250cm9sbGVyCQkoMHhGRkMwMDgwMCAtIDB4RkZDMDA4RkYpCQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RDUjEoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9UQ1IxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UQ1IxKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfVENSMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RDUjIoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9UQ1IyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UQ1IyKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfVENSMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RDTEtESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX1RDTEtESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RDTEtESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9UQ0xLRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfVEZTRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9URlNESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RGU0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1RGU0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RYKCkJCQliZmluX3JlYWQzMihTUE9SVDBfVFgpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RYKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDBfVFgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9SWCgpCQkJYmZpbl9yZWFkMzIoU1BPUlQwX1JYKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9SWCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX1JYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfVFgzMigpCQkJYmZpbl9yZWFkMzIoU1BPUlQwX1RYKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UWDMyKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDBfVFgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9SWDMyKCkJCQliZmluX3JlYWQzMihTUE9SVDBfUlgpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JYMzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9SWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RYMTYoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9UWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVFgxNih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1RYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUlgxNigpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JYKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9SWDE2KHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfUlgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9SQ1IxKCkJCQliZmluX3JlYWQxNihTUE9SVDBfUkNSMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUkNSMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1JDUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9SQ1IyKCkJCQliZmluX3JlYWQxNihTUE9SVDBfUkNSMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUkNSMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1JDUjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9SQ0xLRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9SQ0xLRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9SQ0xLRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfUkNMS0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1JGU0RJVigpCQliZmluX3JlYWQxNihTUE9SVDBfUkZTRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9SRlNESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9SRlNESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9TVEFUKCkJCQliZmluX3JlYWQxNihTUE9SVDBfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9DSE5MKCkJCQliZmluX3JlYWQxNihTUE9SVDBfQ0hOTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfQ0hOTCh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX0NITkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NQ01DMSgpCQliZmluX3JlYWQxNihTUE9SVDBfTUNNQzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01DTUMxKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfTUNNQzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NQ01DMigpCQliZmluX3JlYWQxNihTUE9SVDBfTUNNQzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01DTUMyKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfTUNNQzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NVENTMCgpCQliZmluX3JlYWQzMihTUE9SVDBfTVRDUzApCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01UQ1MwKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDBfTVRDUzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NVENTMSgpCQliZmluX3JlYWQzMihTUE9SVDBfTVRDUzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01UQ1MxKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDBfTVRDUzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NVENTMigpCQliZmluX3JlYWQzMihTUE9SVDBfTVRDUzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01UQ1MyKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDBfTVRDUzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NVENTMygpCQliZmluX3JlYWQzMihTUE9SVDBfTVRDUzMpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01UQ1MzKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDBfTVRDUzMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NUkNTMCgpCQliZmluX3JlYWQzMihTUE9SVDBfTVJDUzApCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01SQ1MwKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDBfTVJDUzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NUkNTMSgpCQliZmluX3JlYWQzMihTUE9SVDBfTVJDUzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01SQ1MxKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDBfTVJDUzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NUkNTMigpCQliZmluX3JlYWQzMihTUE9SVDBfTVJDUzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01SQ1MyKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDBfTVJDUzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NUkNTMygpCQliZmluX3JlYWQzMihTUE9SVDBfTVJDUzMpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01SQ1MzKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDBfTVJDUzMsIHZhbCkKKworCisvKiBTUE9SVDEgQ29udHJvbGxlcgkJKDB4RkZDMDA5MDAgLSAweEZGQzAwOUZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9UQ1IxKCkJCQliZmluX3JlYWQxNihTUE9SVDFfVENSMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVENSMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1RDUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9UQ1IyKCkJCQliZmluX3JlYWQxNihTUE9SVDFfVENSMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVENSMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1RDUjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9UQ0xLRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMV9UQ0xLRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9UQ0xLRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfVENMS0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1RGU0RJVigpCQliZmluX3JlYWQxNihTUE9SVDFfVEZTRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9URlNESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9URlNESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9UWCgpCQkJYmZpbl9yZWFkMzIoU1BPUlQxX1RYKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9UWCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX1RYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfUlgoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMV9SWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfUlgodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9SWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1RYMzIoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMV9UWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVFgzMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX1RYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfUlgzMigpCQkJYmZpbl9yZWFkMzIoU1BPUlQxX1JYKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9SWDMyKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDFfUlgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9UWDE2KCkJCQliZmluX3JlYWQxNihTUE9SVDFfVFgpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1RYMTYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9UWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JYMTYoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMV9SWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfUlgxNih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1JYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfUkNSMSgpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX1JDUjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JDUjEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9SQ1IxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfUkNSMigpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX1JDUjIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JDUjIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9SQ1IyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfUkNMS0RJVigpCQliZmluX3JlYWQxNihTUE9SVDFfUkNMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfUkNMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1JDTEtESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9SRlNESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQxX1JGU0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfUkZTRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfUkZTRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfU1RBVCgpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1NUQVQodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfQ0hOTCgpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX0NITkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX0NITkwodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9DSE5MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfTUNNQzEoKQkJYmZpbl9yZWFkMTYoU1BPUlQxX01DTUMxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9NQ01DMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX01DTUMxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfTUNNQzIoKQkJYmZpbl9yZWFkMTYoU1BPUlQxX01DTUMyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9NQ01DMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX01DTUMyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfTVRDUzAoKQkJYmZpbl9yZWFkMzIoU1BPUlQxX01UQ1MwKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9NVENTMCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX01UQ1MwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfTVRDUzEoKQkJYmZpbl9yZWFkMzIoU1BPUlQxX01UQ1MxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9NVENTMSh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX01UQ1MxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfTVRDUzIoKQkJYmZpbl9yZWFkMzIoU1BPUlQxX01UQ1MyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9NVENTMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX01UQ1MyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfTVRDUzMoKQkJYmZpbl9yZWFkMzIoU1BPUlQxX01UQ1MzKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9NVENTMyh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX01UQ1MzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfTVJDUzAoKQkJYmZpbl9yZWFkMzIoU1BPUlQxX01SQ1MwKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9NUkNTMCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX01SQ1MwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfTVJDUzEoKQkJYmZpbl9yZWFkMzIoU1BPUlQxX01SQ1MxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9NUkNTMSh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX01SQ1MxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfTVJDUzIoKQkJYmZpbl9yZWFkMzIoU1BPUlQxX01SQ1MyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9NUkNTMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX01SQ1MyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfTVJDUzMoKQkJYmZpbl9yZWFkMzIoU1BPUlQxX01SQ1MzKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9NUkNTMyh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX01SQ1MzLCB2YWwpCisKKworLyogRXh0ZXJuYWwgQnVzIEludGVyZmFjZSBVbml0ICgweEZGQzAwQTAwIC0gMHhGRkMwMEFGRikJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfQU1HQ1RMKCkJCQliZmluX3JlYWQxNihFQklVX0FNR0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0FNR0NUTCh2YWwpCQliZmluX3dyaXRlMTYoRUJJVV9BTUdDVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfQU1CQ1RMMCgpCQliZmluX3JlYWQzMihFQklVX0FNQkNUTDApCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9BTUJDVEwwKHZhbCkJCWJmaW5fd3JpdGUzMihFQklVX0FNQkNUTDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfQU1CQ1RMMSgpCQliZmluX3JlYWQzMihFQklVX0FNQkNUTDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9BTUJDVEwxKHZhbCkJCWJmaW5fd3JpdGUzMihFQklVX0FNQkNUTDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfU0RHQ1RMKCkJCQliZmluX3JlYWQzMihFQklVX1NER0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX1NER0NUTCh2YWwpCQliZmluX3dyaXRlMzIoRUJJVV9TREdDVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfU0RCQ1RMKCkJCQliZmluX3JlYWQxNihFQklVX1NEQkNUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX1NEQkNUTCh2YWwpCQliZmluX3dyaXRlMTYoRUJJVV9TREJDVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfU0RSUkMoKQkJCWJmaW5fcmVhZDE2KEVCSVVfU0RSUkMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9TRFJSQyh2YWwpCQliZmluX3dyaXRlMTYoRUJJVV9TRFJSQywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9TRFNUQVQoKQkJCWJmaW5fcmVhZDE2KEVCSVVfU0RTVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfU0RTVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihFQklVX1NEU1RBVCwgdmFsKQorCisKKy8qIERNQSBUcmFmZmljIENvbnRyb2wgUmVnaXN0ZXJzCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9ETUFDX1RDX1BFUigpCQkJYmZpbl9yZWFkMTYoRE1BQ19UQ19QRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BQ19UQ19QRVIodmFsKQkJYmZpbl93cml0ZTE2KERNQUNfVENfUEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUFDX1RDX0NOVCgpCQkJYmZpbl9yZWFkMTYoRE1BQ19UQ19DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BQ19UQ19DTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQUNfVENfQ05ULCB2YWwpCisKKy8qIERNQSBDb250cm9sbGVyCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfRE1BMF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTBfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUEwX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTBfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMF9ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BMF9TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMF9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMF9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMF9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMF9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTBfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMF9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUEwX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTBfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEwX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTBfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMF9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTBfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUEwX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUEwX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMF9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMF9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUEwX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUEwX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BMF9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTBfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfRE1BMV9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTFfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUExX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTFfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMV9ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMV9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BMV9TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMV9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMV9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMV9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMV9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTFfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMV9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUExX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTFfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTFfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTFfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMV9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMV9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUExX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUExX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BMV9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTFfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfRE1BMl9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTJfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUEyX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTJfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMl9ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BMl9TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTJfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMl9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUEyX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTJfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEyX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTJfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTJfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUEyX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUEyX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMl9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMl9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUEyX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUEyX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BMl9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTJfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfRE1BM19DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTNfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUEzX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTNfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BM19ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEzX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BM19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BM19TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEzX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BM19YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BM19YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEzX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BM19ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BM19ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEzX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTNfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BM19YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUEzX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTNfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEzX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTNfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BM19DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTNfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEzX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUEzX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUEzX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BM19DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BM19DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUEzX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUEzX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BM19QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTNfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfRE1BNF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTRfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE0X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTRfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BNF9ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE0X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BNF9TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE0X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNF9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNF9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE0X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNF9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNF9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE0X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTRfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BNF9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE0X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTRfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE0X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTRfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNF9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTRfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE0X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE0X0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE0X0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNF9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNF9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE0X0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE0X0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BNF9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTRfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfRE1BNV9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTVfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE1X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTVfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BNV9ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE1X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNV9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BNV9TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE1X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNV9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNV9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE1X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNV9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNV9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE1X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTVfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BNV9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE1X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTVfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE1X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTVfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTVfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE1X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE1X0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE1X0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNV9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNV9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE1X0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE1X0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BNV9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTVfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfRE1BNl9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTZfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE2X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTZfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BNl9ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE2X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BNl9TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE2X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE2X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE2X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTZfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BNl9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE2X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTZfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE2X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTZfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTZfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE2X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE2X0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE2X0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNl9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNl9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE2X0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE2X0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BNl9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTZfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfRE1BN19DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTdfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE3X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTdfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BN19ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE3X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BN19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BN19TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE3X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BN19YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BN19YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE3X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BN19ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BN19ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE3X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTdfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BN19YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE3X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTdfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE3X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTdfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BN19DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTdfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE3X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE3X0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE3X0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BN19DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BN19DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE3X0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE3X0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BN19QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTdfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfRE1BOF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQThfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE4X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQThfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BOF9ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE4X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BOF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BOF9TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE4X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOF9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BOF9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE4X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOF9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BOF9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE4X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQThfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BOF9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE4X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQThfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE4X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQThfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BOF9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQThfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE4X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE4X0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE4X0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOF9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BOF9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE4X0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE4X0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BOF9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQThfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfRE1BOV9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTlfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE5X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTlfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BOV9ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE5X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BOV9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BOV9TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE5X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOV9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BOV9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE5X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOV9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BOV9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE5X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTlfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BOV9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE5X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTlfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE5X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTlfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BOV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTlfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE5X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE5X0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE5X0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOV9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BOV9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE5X0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE5X0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BOV9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTlfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ09ORklHKCkJCWJmaW5fcmVhZDE2KERNQTEwX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KERNQTEwX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExMF9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTBfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfU1RBUlRfQUREUigpCQliZmluX3JlYWQzMihETUExMF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX1NUQVJUX0FERFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTBfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExMF9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTEwX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTBfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMF9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUExMF9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTBfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTEwX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMF9ZX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExMF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX0NVUlJfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTBfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTEwX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTEwX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTEwX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTBfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTBfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExMF9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMTBfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KERNQTEwX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoRE1BMTBfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoRE1BMTBfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ09ORklHKCkJCWJmaW5fcmVhZDE2KERNQTExX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KERNQTExX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExMV9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTFfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfU1RBUlRfQUREUigpCQliZmluX3JlYWQzMihETUExMV9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX1NUQVJUX0FERFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTFfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExMV9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTExX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTFfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMV9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUExMV9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTFfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTExX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMV9ZX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExMV9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX0NVUlJfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTFfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTExX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTExX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTExX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTFfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTFfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExMV9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMTFfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KERNQTExX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoRE1BMTFfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoRE1BMTFfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDBfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX05FWFRfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX0QwX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfRDBfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfRDBfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1NUQVJUX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMF9TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMF9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMF9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDBfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9YX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QwX1hfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDBfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9ZX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QwX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0NVUlJfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX0QwX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfRDBfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoTURNQV9EMF9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DVVJSX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMF9DVVJSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfQ1VSUl9YX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9EMF9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMF9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfQ1VSUl9ZX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9EMF9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMF9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihNRE1BX0QwX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDBfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KE1ETUFfRDBfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QwX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfQ09ORklHKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzBfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX1MwX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9ORVhUX0RFU0NfUFRSKCkJYmZpbl9yZWFkMzIoTURNQV9TMF9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfTkVYVF9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX1MwX05FWFRfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfU1RBUlRfQUREUigpCQliZmluX3JlYWQzMihNRE1BX1MwX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9TVEFSVF9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzBfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzBfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzBfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzBfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzBfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9YX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX1MwX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfWF9NT0RJRlkodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMF9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX1MwX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfWV9NT0RJRlkodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMF9ZX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DVVJSX0RFU0NfUFRSKCkJYmZpbl9yZWFkMzIoTURNQV9TMF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX1MwX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfUzBfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ1VSUl9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzBfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0NVUlJfWF9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfUzBfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzBfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0NVUlJfWV9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfUzBfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzBfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoTURNQV9TMF9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MwX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfUEVSSVBIRVJBTF9NQVAoKQliZmluX3JlYWQxNihNRE1BX1MwX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMF9QRVJJUEhFUkFMX01BUCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NPTkZJRygpCQliZmluX3JlYWQxNihNRE1BX0QxX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfTkVYVF9ERVNDX1BUUigpCWJmaW5fcmVhZDMyKE1ETUFfRDFfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMV9ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoTURNQV9EMV9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfU1RBUlRfQUREUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX0QxX1NUQVJUX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWF9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX0QxX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX0QxX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWV9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX0QxX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX0QxX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoTURNQV9EMV9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1hfTU9ESUZZKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDFfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoTURNQV9EMV9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1lfTU9ESUZZKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDFfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfQ1VSUl9ERVNDX1BUUigpCWJmaW5fcmVhZDMyKE1ETUFfRDFfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMV9DVVJSX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NVUlJfQUREUigpCQliZmluX3JlYWQzMihNRE1BX0QxX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfQUREUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX0QxX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9DVVJSX1hfQ09VTlQoKQliZmluX3JlYWQxNihNRE1BX0QxX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QxX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9DVVJSX1lfQ09VTlQoKQliZmluX3JlYWQxNihNRE1BX0QxX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QxX0NVUlJfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9JUlFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDFfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0lSUV9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoTURNQV9EMV9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoTURNQV9EMV9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDFfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9DT05GSUcoKQkJYmZpbl9yZWFkMTYoTURNQV9TMV9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzFfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX05FWFRfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX1MxX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzFfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfUzFfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1NUQVJUX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9TMV9TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9TMV9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TMV9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9TMV9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TMV9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzFfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9YX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MxX1hfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzFfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9ZX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MxX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NVUlJfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX1MxX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzFfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoTURNQV9TMV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DVVJSX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9TMV9DVVJSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfQ1VSUl9YX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9TMV9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMV9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfQ1VSUl9ZX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9TMV9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMV9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihNRE1BX1MxX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzFfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KE1ETUFfUzFfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MxX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKworLyogUGFyYWxsZWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKDB4RkZDMDEwMDAgLSAweEZGQzAxMEZGKQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfUFBJX0NPTlRST0woKQkJCWJmaW5fcmVhZDE2KFBQSV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1BQSV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihQUElfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUFBJX1NUQVRVUygpCQkJYmZpbl9yZWFkMTYoUFBJX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9QUElfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihQUElfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fY2xlYXJfUFBJX1NUQVRVUygpCQkJYmZpbl93cml0ZV9QUElfU1RBVFVTKDB4RkZGRikKKyNkZWZpbmUgYmZpbl9yZWFkX1BQSV9ERUxBWSgpCQkJYmZpbl9yZWFkMTYoUFBJX0RFTEFZKQorI2RlZmluZSBiZmluX3dyaXRlX1BQSV9ERUxBWSh2YWwpCQliZmluX3dyaXRlMTYoUFBJX0RFTEFZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QUElfQ09VTlQoKQkJCWJmaW5fcmVhZDE2KFBQSV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QUElfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KFBQSV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUFBJX0ZSQU1FKCkJCQliZmluX3JlYWQxNihQUElfRlJBTUUpCisjZGVmaW5lIGJmaW5fd3JpdGVfUFBJX0ZSQU1FKHZhbCkJCWJmaW5fd3JpdGUxNihQUElfRlJBTUUsIHZhbCkKKworCisvKiBUd28tV2lyZSBJbnRlcmZhY2UJCSgweEZGQzAxNDAwIC0gMHhGRkMwMTRGRikJCQkJCQkJCSovCisKKy8qIEdlbmVyYWwgUHVycG9zZSBJL08gUG9ydCBHICgweEZGQzAxNTAwIC0gMHhGRkMwMTVGRikJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPKCkJCQliZmluX3JlYWQxNihQT1JUR0lPKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU8odmFsKQkJCWJmaW5fd3JpdGUxNihQT1JUR0lPLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19DTEVBUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdJT19DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19TRVQoKQkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fU0VUKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19UT0dHTEUoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19UT0dHTEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19UT0dHTEUodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHSU9fVE9HR0xFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX01BU0tBKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fTUFTS0EpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19NQVNLQV9DTEVBUigpCQliZmluX3JlYWQxNihQT1JUR0lPX01BU0tBX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fTUFTS0FfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQV9DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19NQVNLQV9TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19NQVNLQV9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQV9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQV9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fTUFTS0FfVE9HR0xFKCkJYmZpbl9yZWFkMTYoUE9SVEdJT19NQVNLQV9UT0dHTEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQV9UT0dHTEUodmFsKQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQV9UT0dHTEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fTUFTS0IoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19NQVNLQikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX01BU0tCKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tCLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX01BU0tCX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fTUFTS0JfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQl9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tCX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX01BU0tCX1NFVCgpCQliZmluX3JlYWQxNihQT1JUR0lPX01BU0tCX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX01BU0tCX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tCX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19NQVNLQl9UT0dHTEUoKQliZmluX3JlYWQxNihQT1JUR0lPX01BU0tCX1RPR0dMRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX01BU0tCX1RPR0dMRSh2YWwpCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tCX1RPR0dMRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19ESVIoKQkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fRElSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fRElSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX0RJUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19QT0xBUigpCQliZmluX3JlYWQxNihQT1JUR0lPX1BPTEFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fUE9MQVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHSU9fUE9MQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fRURHRSgpCQliZmluX3JlYWQxNihQT1JUR0lPX0VER0UpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19FREdFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX0VER0UsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fQk9USCgpCQliZmluX3JlYWQxNihQT1JUR0lPX0JPVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19CT1RIKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX0JPVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fSU5FTigpCQliZmluX3JlYWQxNihQT1JUR0lPX0lORU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19JTkVOKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX0lORU4sIHZhbCkKKworCisvKiBHZW5lcmFsIFB1cnBvc2UgSS9PIFBvcnQgSCAoMHhGRkMwMTcwMCAtIDB4RkZDMDE3RkYpCQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJTygpCQkJYmZpbl9yZWFkMTYoUE9SVEhJTykKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPKHZhbCkJCQliZmluX3dyaXRlMTYoUE9SVEhJTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19DTEVBUigpCQliZmluX3JlYWQxNihQT1JUSElPX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fQ0xFQVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRISU9fQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fU0VUKCkJCQliZmluX3JlYWQxNihQT1JUSElPX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX1NFVCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fVE9HR0xFKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fVE9HR0xFKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fVE9HR0xFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSElPX1RPR0dMRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19NQVNLQSgpCQliZmluX3JlYWQxNihQT1JUSElPX01BU0tBKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0EodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0EsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fTUFTS0FfQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19NQVNLQV9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX01BU0tBX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0FfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fTUFTS0FfU0VUKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fTUFTS0FfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0FfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0FfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX01BU0tBX1RPR0dMRSgpCWJmaW5fcmVhZDE2KFBPUlRISU9fTUFTS0FfVE9HR0xFKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0FfVE9HR0xFKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0FfVE9HR0xFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX01BU0tCKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fTUFTS0IpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19NQVNLQih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19NQVNLQl9DTEVBUigpCQliZmluX3JlYWQxNihQT1JUSElPX01BU0tCX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0JfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQl9DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19NQVNLQl9TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19NQVNLQl9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19NQVNLQl9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQl9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fTUFTS0JfVE9HR0xFKCkJYmZpbl9yZWFkMTYoUE9SVEhJT19NQVNLQl9UT0dHTEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19NQVNLQl9UT0dHTEUodmFsKQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQl9UT0dHTEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fRElSKCkJCQliZmluX3JlYWQxNihQT1JUSElPX0RJUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX0RJUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19ESVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fUE9MQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19QT0xBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX1BPTEFSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSElPX1BPTEFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX0VER0UoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19FREdFKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fRURHRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19FREdFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX0JPVEgoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19CT1RIKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fQk9USCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19CT1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX0lORU4oKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19JTkVOKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fSU5FTih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19JTkVOLCB2YWwpCisKKworLyogVUFSVDEgQ29udHJvbGxlcgkJKDB4RkZDMDIwMDAgLSAweEZGQzAyMEZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX1RIUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfVEhSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX1RIUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfVEhSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9SQlIoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX1JCUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9SQlIodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX1JCUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfRExMKCkJCQliZmluX3JlYWQxNihVQVJUMV9ETEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfRExMKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9ETEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX0lFUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfSUVSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX0lFUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfSUVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9ETEgoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX0RMSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9ETEgodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX0RMSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfSUlSKCkJCQliZmluX3JlYWQxNihVQVJUMV9JSVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfSUlSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9JSVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX0xDUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfTENSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX0xDUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfTENSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9NQ1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX01DUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9NQ1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX01DUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfTFNSKCkJCQliZmluX3JlYWQxNihVQVJUMV9MU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfTFNSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9MU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX01TUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfTVNSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX01TUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfTVNSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9TQ1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX1NDUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9TQ1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX1NDUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfR0NUTCgpCQkJYmZpbl9yZWFkMTYoVUFSVDFfR0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9HQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9HQ1RMLCB2YWwpCisKKy8qIE9taXQgQ0FOIHJlZ2lzdGVyIHNldHMgZnJvbSB0aGUgY2RlZkJGNTM0LmggKENBTiBpcyBub3QgaW4gdGhlIEFEU1AtQkY1MXggcHJvY2Vzc29yKSAqLworCisvKiBQaW4gQ29udHJvbCBSZWdpc3RlcnMJKDB4RkZDMDMyMDAgLSAweEZGQzAzMkZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX0ZFUigpCQkJYmZpbl9yZWFkMTYoUE9SVEZfRkVSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGX0ZFUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZfRkVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR19GRVIoKQkJCWJmaW5fcmVhZDE2KFBPUlRHX0ZFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19GRVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHX0ZFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhfRkVSKCkJCQliZmluX3JlYWQxNihQT1JUSF9GRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhfRkVSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSF9GRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRfTVVYKCkJCQliZmluX3JlYWQxNihQT1JUX01VWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUX01VWCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVF9NVVgsIHZhbCkKKworCisvKiBIYW5kc2hha2UgTURNQSBSZWdpc3RlcnMJKDB4RkZDMDMzMDAgLSAweEZGQzAzM0ZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0VDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTBfRUNJTklUKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ0lOSVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9CQ0lOSVQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0JDSU5JVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfQkNJTklUKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQkNJTklULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNVUkdFTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0VDVVJHRU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ1VSR0VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0VDVVJHRU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNPVkVSRkxPVygpCQliZmluX3JlYWQxNihITURNQTBfRUNPVkVSRkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfRUNPVkVSRkxPVyh2YWwpCWJmaW5fd3JpdGUxNihITURNQTBfRUNPVkVSRkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0VDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTBfRUNPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9CQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0JDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfQkNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQkNPVU5ULCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0VDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTFfRUNJTklUKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ0lOSVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9CQ0lOSVQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0JDSU5JVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfQkNJTklUKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQkNJTklULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNVUkdFTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0VDVVJHRU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ1VSR0VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0VDVVJHRU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNPVkVSRkxPVygpCQliZmluX3JlYWQxNihITURNQTFfRUNPVkVSRkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfRUNPVkVSRkxPVyh2YWwpCWJmaW5fd3JpdGUxNihITURNQTFfRUNPVkVSRkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0VDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTFfRUNPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9CQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0JDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfQkNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQkNPVU5ULCB2YWwpCisKKy8qID09PT0gZW5kIGZyb20gY2RlZkJGNTM0LmggPT09PSAqLworCisvKiBHUElPIFBJTiBtdXggKDB4RkZDMDMyMTAgLSBPeEZGQzAzMjg4KSAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURl9NVVgoKQkJCWJmaW5fcmVhZDE2KFBPUlRGX01VWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURl9NVVgodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGX01VWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdfTVVYKCkJCQliZmluX3JlYWQxNihQT1JUR19NVVgpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdfTVVYKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR19NVVgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRIX01VWCgpCQkJYmZpbl9yZWFkMTYoUE9SVEhfTVVYKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRIX01VWCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhfTVVYLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX0RSSVZFKCkJCQliZmluX3JlYWQxNihQT1JURl9EUklWRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURl9EUklWRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZfRFJJVkUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHX0RSSVZFKCkJCQliZmluX3JlYWQxNihQT1JUR19EUklWRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19EUklWRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdfRFJJVkUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRIX0RSSVZFKCkJCQliZmluX3JlYWQxNihQT1JUSF9EUklWRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSF9EUklWRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhfRFJJVkUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX1NMRVcoKQkJCWJmaW5fcmVhZDE2KFBPUlRGX1NMRVcpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZfU0xFVyh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZfU0xFVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdfU0xFVygpCQkJYmZpbl9yZWFkMTYoUE9SVEdfU0xFVykKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19TTEVXKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR19TTEVXLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSF9TTEVXKCkJCQliZmluX3JlYWQxNihQT1JUSF9TTEVXKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRIX1NMRVcodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRIX1NMRVcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX0hZU1RFUklTSVMoKQkJYmZpbl9yZWFkMTYoUE9SVEZfSFlTVEVSSVNJUykKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURl9IWVNURVJJU0lTKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRGX0hZU1RFUklTSVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHX0hZU1RFUklTSVMoKQkJYmZpbl9yZWFkMTYoUE9SVEdfSFlTVEVSSVNJUykKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19IWVNURVJJU0lTKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRHX0hZU1RFUklTSVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRIX0hZU1RFUklTSVMoKQkJYmZpbl9yZWFkMTYoUE9SVEhfSFlTVEVSSVNJUykKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSF9IWVNURVJJU0lTKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRIX0hZU1RFUklTSVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01JU0NQT1JUX0RSSVZFKCkJCWJmaW5fcmVhZDE2KE1JU0NQT1JUX0RSSVZFKQorI2RlZmluZSBiZmluX3dyaXRlX01JU0NQT1JUX0RSSVZFKHZhbCkJCWJmaW5fd3JpdGUxNihNSVNDUE9SVF9EUklWRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTUlTQ1BPUlRfU0xFVygpCQliZmluX3JlYWQxNihNSVNDUE9SVF9TTEVXKQorI2RlZmluZSBiZmluX3dyaXRlX01JU0NQT1JUX1NMRVcodmFsKQkJYmZpbl93cml0ZTE2KE1JU0NQT1JUX1NMRVcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01JU0NQT1JUX0hZU1RFUklTSVMoKQkJYmZpbl9yZWFkMTYoTUlTQ1BPUlRfSFlTVEVSSVNJUykKKyNkZWZpbmUgYmZpbl93cml0ZV9NSVNDUE9SVF9IWVNURVJJU0lTKHZhbCkJYmZpbl93cml0ZTE2KE1JU0NQT1JUX0hZU1RFUklTSVMsIHZhbCkKKworLyogSE9TVCBQb3J0IFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9IT1NUX0NPTlRST0woKQkJYmZpbl9yZWFkMTYoSE9TVF9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX0hPU1RfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoSE9TVF9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9IT1NUX1NUQVRVUygpCQkJYmZpbl9yZWFkMTYoSE9TVF9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE9TVF9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KEhPU1RfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9IT1NUX1RJTUVPVVQoKQkJYmZpbl9yZWFkMTYoSE9TVF9USU1FT1VUKQorI2RlZmluZSBiZmluX3dyaXRlX0hPU1RfVElNRU9VVCh2YWwpCQliZmluX3dyaXRlMTYoSE9TVF9USU1FT1VULCB2YWwpCisKKy8qIENvdW50ZXIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0NOVF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KENOVF9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ05UX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoQ05UX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ05UX0lNQVNLKCkJCQliZmluX3JlYWQxNihDTlRfSU1BU0spCisjZGVmaW5lIGJmaW5fd3JpdGVfQ05UX0lNQVNLKHZhbCkJCWJmaW5fd3JpdGUxNihDTlRfSU1BU0ssIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NOVF9TVEFUVVMoKQkJCWJmaW5fcmVhZDE2KENOVF9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ05UX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoQ05UX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ05UX0NPTU1BTkQoKQkJCWJmaW5fcmVhZDE2KENOVF9DT01NQU5EKQorI2RlZmluZSBiZmluX3dyaXRlX0NOVF9DT01NQU5EKHZhbCkJCWJmaW5fd3JpdGUxNihDTlRfQ09NTUFORCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ05UX0RFQk9VTkNFKCkJCWJmaW5fcmVhZDE2KENOVF9ERUJPVU5DRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DTlRfREVCT1VOQ0UodmFsKQkJYmZpbl93cml0ZTE2KENOVF9ERUJPVU5DRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ05UX0NPVU5URVIoKQkJCWJmaW5fcmVhZDMyKENOVF9DT1VOVEVSKQorI2RlZmluZSBiZmluX3dyaXRlX0NOVF9DT1VOVEVSKHZhbCkJCWJmaW5fd3JpdGUzMihDTlRfQ09VTlRFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ05UX01BWCgpCQkJYmZpbl9yZWFkMzIoQ05UX01BWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DTlRfTUFYKHZhbCkJCQliZmluX3dyaXRlMzIoQ05UX01BWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ05UX01JTigpCQkJYmZpbl9yZWFkMzIoQ05UX01JTikKKyNkZWZpbmUgYmZpbl93cml0ZV9DTlRfTUlOKHZhbCkJCQliZmluX3dyaXRlMzIoQ05UX01JTiwgdmFsKQorCisvKiBTZWN1cml0eSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfU0VDVVJFX1NZU1NXVCgpCQliZmluX3JlYWQzMihTRUNVUkVfU1lTU1dUKQorI2RlZmluZSBiZmluX3dyaXRlX1NFQ1VSRV9TWVNTV1QodmFsKQkJYmZpbl93cml0ZTMyKFNFQ1VSRV9TWVNTV1QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NFQ1VSRV9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KFNFQ1VSRV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1NFQ1VSRV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihTRUNVUkVfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0VDVVJFX1NUQVRVUygpCQliZmluX3JlYWQxNihTRUNVUkVfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX1NFQ1VSRV9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KFNFQ1VSRV9TVEFUVVMsIHZhbCkKIAogI2VuZGlmIC8qIF9DREVGX0JGNTEyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNC5oCmluZGV4IDEwOGZhNGIuLmRjOTg4NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwpAQCAtNyw5ICs3LDYgQEAKICNpZm5kZWYgX0NERUZfQkY1MTRfSAogI2RlZmluZSBfQ0RFRl9CRjUxNF9ICiAKLS8qIGluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlICJkZWZCRjUxNC5oIgotCiAvKiBCRjUxNCBpcyBCRjUxMiArIFJTSSAqLwogI2luY2x1ZGUgImNkZWZCRjUxMi5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTYuaAppbmRleCAyNzUxNTkyLi4xNDJlNDVjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE2LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KQEAgLTcsOSArNyw2IEBACiAjaWZuZGVmIF9DREVGX0JGNTE2X0gKICNkZWZpbmUgX0NERUZfQkY1MTZfSAogCi0vKiBpbmNsdWRlIGFsbCBDb3JlIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zICovCi0jaW5jbHVkZSAiZGVmQkY1MTYuaCIKLQogLyogQkY1MTYgaXMgQkY1MTQgKyBFTUFDICovCiAjaW5jbHVkZSAiY2RlZkJGNTE0LmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxOC5oCmluZGV4IDdmYjdmMGUuLmU2MzgxOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTguaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwpAQCAtNyw5ICs3LDYgQEAKICNpZm5kZWYgX0NERUZfQkY1MThfSAogI2RlZmluZSBfQ0RFRl9CRjUxOF9ICiAKLS8qIGluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlICJkZWZCRjUxOC5oIgotCiAvKiBCRjUxOCBpcyBCRjUxNiArIElFRUUtMTU4OCAqLwogI2luY2x1ZGUgImNkZWZCRjUxNi5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxeF9iYXNlLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxeF9iYXNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNjk2OWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MXhfYmFzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgotICovCi0KLSNpZm5kZWYgX0NERUZfQkY1MlhfSAotI2RlZmluZSBfQ0RFRl9CRjUyWF9ICi0KLSNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KLQotI2luY2x1ZGUgImRlZkJGNTF4X2Jhc2UuaCIKLQotLyogSW5jbHVkZSBjb3JlIHNwZWNpZmljIHJlZ2lzdGVyIHBvaW50ZXIgZGVmaW5pdGlvbnMgCQkJCQkJCQkqLwotI2luY2x1ZGUgPGFzbS9jZGVmX0xQQmxhY2tmaW4uaD4KLQotLyogPT09PSBiZWdpbiBmcm9tIGNkZWZCRjUzNC5oID09PT0gKi8KLQotLyogQ2xvY2sgYW5kIFN5c3RlbSBDb250cm9sCSgweEZGQzAwMDAwIC0gMHhGRkMwMDBGRikJCQkJCQkJCSovCi0jZGVmaW5lIGJmaW5fcmVhZF9QTExfQ1RMKCkJCQliZmluX3JlYWQxNihQTExfQ1RMKQotI2RlZmluZSBiZmluX3JlYWRfUExMX0RJVigpCQkJYmZpbl9yZWFkMTYoUExMX0RJVikKLSNkZWZpbmUgYmZpbl93cml0ZV9QTExfRElWKHZhbCkJCQliZmluX3dyaXRlMTYoUExMX0RJViwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVlJfQ1RMKCkJCQliZmluX3JlYWQxNihWUl9DVEwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QTExfU1RBVCgpCQkJYmZpbl9yZWFkMTYoUExMX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUExMX1NUQVQodmFsKQkJYmZpbl93cml0ZTE2KFBMTF9TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QTExfTE9DS0NOVCgpCQkJYmZpbl9yZWFkMTYoUExMX0xPQ0tDTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUExMX0xPQ0tDTlQodmFsKQkJYmZpbl93cml0ZTE2KFBMTF9MT0NLQ05ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DSElQSUQoKQkJCWJmaW5fcmVhZDMyKENISVBJRCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DSElQSUQodmFsKQkJCWJmaW5fd3JpdGUzMihDSElQSUQsIHZhbCkKLQotCi0vKiBTeXN0ZW0gSW50ZXJydXB0IENvbnRyb2xsZXIgKDB4RkZDMDAxMDAgLSAweEZGQzAwMUZGKQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfU1dSU1QoKQkJCWJmaW5fcmVhZDE2KFNXUlNUKQotI2RlZmluZSBiZmluX3dyaXRlX1NXUlNUKHZhbCkJCQliZmluX3dyaXRlMTYoU1dSU1QsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NZU0NSKCkJCQliZmluX3JlYWQxNihTWVNDUikKLSNkZWZpbmUgYmZpbl93cml0ZV9TWVNDUih2YWwpCQkJYmZpbl93cml0ZTE2KFNZU0NSLCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19SVkVDVCgpCQkJYmZpbl9yZWFkMzIoU0lDX1JWRUNUKQotI2RlZmluZSBiZmluX3dyaXRlX1NJQ19SVkVDVCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX1JWRUNULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TSUNfSU1BU0swKCkJCQliZmluX3JlYWQzMihTSUNfSU1BU0swKQotI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JTUFTSzAodmFsKQkJYmZpbl93cml0ZTMyKFNJQ19JTUFTSzAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JTUFTSyh4KQkJCWJmaW5fcmVhZDMyKFNJQ19JTUFTSzAgKyAoeCA8PCA2KSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSU1BU0soeCwgdmFsKQkJYmZpbl93cml0ZTMyKChTSUNfSU1BU0swICsgKHggPDwgNikpLCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIwKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIxKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIyKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMih2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIzKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMykKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMyh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjMsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfU0lDX0lTUjAoKQkJCWJmaW5fcmVhZDMyKFNJQ19JU1IwKQotI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JU1IwKHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSVNSMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0lDX0lTUih4KQkJCWJmaW5fcmVhZDMyKFNJQ19JU1IwICsgKHggPDwgNikpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lTUih4LCB2YWwpCQliZmluX3dyaXRlMzIoKFNJQ19JU1IwICsgKHggPDwgNikpLCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JV1IwKCkJCQliZmluX3JlYWQzMihTSUNfSVdSMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSVdSMCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lXUjAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JV1IoeCkJCQliZmluX3JlYWQzMihTSUNfSVdSMCArICh4IDw8IDYpKQotI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JV1IoeCwgdmFsKQkJYmZpbl93cml0ZTMyKChTSUNfSVdSMCArICh4IDw8IDYpKSwgdmFsKQotCi0vKiBTSUMgQWRkaXRpb25zIHRvIEFEU1AtQkY1MXggKDB4RkZDMDAxNEMgLSAweEZGQzAwMTYyKSAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9TSUNfSU1BU0sxKCkJCQliZmluX3JlYWQzMihTSUNfSU1BU0sxKQotI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JTUFTSzEodmFsKQkJYmZpbl93cml0ZTMyKFNJQ19JTUFTSzEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVI0KCkJCQliZmluX3JlYWQzMihTSUNfSUFSNCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSNCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVI1KCkJCQliZmluX3JlYWQzMihTSUNfSUFSNSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSNSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVI2KCkJCQliZmluX3JlYWQzMihTSUNfSUFSNikKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSNih2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVI3KCkJCQliZmluX3JlYWQzMihTSUNfSUFSNykKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSNyh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjcsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JU1IxKCkJCQliZmluX3JlYWQzMihTSUNfSVNSMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSVNSMSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lTUjEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JV1IxKCkJCQliZmluX3JlYWQzMihTSUNfSVdSMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSVdSMSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lXUjEsIHZhbCkKLQotLyogV2F0Y2hkb2cgVGltZXIJCSgweEZGQzAwMjAwIC0gMHhGRkMwMDJGRikJCQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfV0RPR19DVEwoKQkJCWJmaW5fcmVhZDE2KFdET0dfQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1dET0dfQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihXRE9HX0NUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfV0RPR19DTlQoKQkJCWJmaW5fcmVhZDMyKFdET0dfQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX1dET0dfQ05UKHZhbCkJCWJmaW5fd3JpdGUzMihXRE9HX0NOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfV0RPR19TVEFUKCkJCQliZmluX3JlYWQzMihXRE9HX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfV0RPR19TVEFUKHZhbCkJCWJmaW5fd3JpdGUzMihXRE9HX1NUQVQsIHZhbCkKLQotCi0vKiBSZWFsIFRpbWUgQ2xvY2sJCSgweEZGQzAwMzAwIC0gMHhGRkMwMDNGRikJCQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfUlRDX1NUQVQoKQkJCWJmaW5fcmVhZDMyKFJUQ19TVEFUKQotI2RlZmluZSBiZmluX3dyaXRlX1JUQ19TVEFUKHZhbCkJCWJmaW5fd3JpdGUzMihSVENfU1RBVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlRDX0lDVEwoKQkJCWJmaW5fcmVhZDE2KFJUQ19JQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1JUQ19JQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihSVENfSUNUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlRDX0lTVEFUKCkJCQliZmluX3JlYWQxNihSVENfSVNUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlRDX0lTVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihSVENfSVNUQVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JUQ19TV0NOVCgpCQkJYmZpbl9yZWFkMTYoUlRDX1NXQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX1JUQ19TV0NOVCh2YWwpCQliZmluX3dyaXRlMTYoUlRDX1NXQ05ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SVENfQUxBUk0oKQkJCWJmaW5fcmVhZDMyKFJUQ19BTEFSTSkKLSNkZWZpbmUgYmZpbl93cml0ZV9SVENfQUxBUk0odmFsKQkJYmZpbl93cml0ZTMyKFJUQ19BTEFSTSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlRDX0ZBU1QoKQkJCWJmaW5fcmVhZDE2KFJUQ19GQVNUKQotI2RlZmluZSBiZmluX3dyaXRlX1JUQ19GQVNUKHZhbCkJCWJmaW5fd3JpdGUxNihSVENfRkFTVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlRDX1BSRU4oKQkJCWJmaW5fcmVhZDE2KFJUQ19QUkVOKQotI2RlZmluZSBiZmluX3dyaXRlX1JUQ19QUkVOKHZhbCkJCWJmaW5fd3JpdGUxNihSVENfUFJFTiwgdmFsKQotCi0KLS8qIFVBUlQwIENvbnRyb2xsZXIJCSgweEZGQzAwNDAwIC0gMHhGRkMwMDRGRikJCQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfVEhSKCkJCQliZmluX3JlYWQxNihVQVJUMF9USFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfVEhSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9USFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX1JCUigpCQkJYmZpbl9yZWFkMTYoVUFSVDBfUkJSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX1JCUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfUkJSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9ETEwoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0RMTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9ETEwodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0RMTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfSUVSKCkJCQliZmluX3JlYWQxNihVQVJUMF9JRVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfSUVSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9JRVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX0RMSCgpCQkJYmZpbl9yZWFkMTYoVUFSVDBfRExIKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX0RMSCh2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfRExILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9JSVIoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0lJUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9JSVIodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0lJUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfTENSKCkJCQliZmluX3JlYWQxNihVQVJUMF9MQ1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfTENSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9MQ1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX01DUigpCQkJYmZpbl9yZWFkMTYoVUFSVDBfTUNSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX01DUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfTUNSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9MU1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0xTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9MU1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0xTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfTVNSKCkJCQliZmluX3JlYWQxNihVQVJUMF9NU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfTVNSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9NU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX1NDUigpCQkJYmZpbl9yZWFkMTYoVUFSVDBfU0NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX1NDUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfU0NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9HQ1RMKCkJCQliZmluX3JlYWQxNihVQVJUMF9HQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX0dDVEwodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0dDVEwsIHZhbCkKLQotCi0vKiBUSU1FUjAtNyBSZWdpc3RlcnMJCSgweEZGQzAwNjAwIC0gMHhGRkMwMDZGRikJCQkJCQkJCSovCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjBfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSMF9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIwX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIwX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIwX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIwX0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIwX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMF9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjBfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSMF9QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIwX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIwX1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIwX1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSMF9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjBfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMF9XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjFfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSMV9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIxX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIxX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIxX0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMV9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjFfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSMV9QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIxX1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIxX1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSMV9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjFfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMV9XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjJfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSMl9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIyX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIyX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIyX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIyX0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIyX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMl9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjJfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSMl9QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIyX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIyX1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIyX1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSMl9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjJfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMl9XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjNfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSM19DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIzX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIzX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIzX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIzX0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIzX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSM19DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjNfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSM19QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIzX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIzX1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIzX1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSM19XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjNfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSM19XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjRfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSNF9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI0X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI0X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI0X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI0X0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI0X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNF9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjRfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSNF9QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI0X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI0X1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI0X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSNF9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjRfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNF9XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjVfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSNV9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI1X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI1X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI1X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI1X0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI1X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNV9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjVfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSNV9QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI1X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI1X1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI1X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSNV9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjVfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNV9XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjZfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSNl9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI2X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI2X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI2X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI2X0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI2X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNl9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjZfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSNl9QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI2X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI2X1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI2X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSNl9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjZfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNl9XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjdfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSN19DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI3X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI3X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI3X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI3X0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI3X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSN19DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjdfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSN19QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI3X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI3X1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI3X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSN19XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjdfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSN19XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9FTkFCTEUoKQkJYmZpbl9yZWFkMTYoVElNRVJfRU5BQkxFKQotI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX0VOQUJMRSh2YWwpCQliZmluX3dyaXRlMTYoVElNRVJfRU5BQkxFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9ESVNBQkxFKCkJCWJmaW5fcmVhZDE2KFRJTUVSX0RJU0FCTEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfRElTQUJMRSh2YWwpCQliZmluX3dyaXRlMTYoVElNRVJfRElTQUJMRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVJfU1RBVFVTKCkJCWJmaW5fcmVhZDMyKFRJTUVSX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9TVEFUVVModmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSX1NUQVRVUywgdmFsKQotCi0KLS8qIEdlbmVyYWwgUHVycG9zZSBJL08gUG9ydCBGICgweEZGQzAwNzAwIC0gMHhGRkMwMDdGRikJCQkJCQkJCSovCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPKCkJCQliZmluX3JlYWQxNihQT1JURklPKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU8odmFsKQkJCWJmaW5fd3JpdGUxNihQT1JURklPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fQ0xFQVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19DTEVBUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZJT19DTEVBUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19TRVQoKQkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fU0VUKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fU0VUKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX1NFVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19UT0dHTEUoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19UT0dHTEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19UT0dHTEUodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fVE9HR0xFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tBKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fTUFTS0EpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19NQVNLQSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZJT19NQVNLQSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19NQVNLQV9DTEVBUigpCQliZmluX3JlYWQxNihQT1JURklPX01BU0tBX0NMRUFSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fTUFTS0FfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEZJT19NQVNLQV9DTEVBUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19NQVNLQV9TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19NQVNLQV9TRVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19NQVNLQV9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEZJT19NQVNLQV9TRVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fTUFTS0FfVE9HR0xFKCkJYmZpbl9yZWFkMTYoUE9SVEZJT19NQVNLQV9UT0dHTEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19NQVNLQV9UT0dHTEUodmFsKQliZmluX3dyaXRlMTYoUE9SVEZJT19NQVNLQV9UT0dHTEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fTUFTS0IoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19NQVNLQikKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tCKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tCLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tCX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fTUFTS0JfQ0xFQVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19NQVNLQl9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tCX0NMRUFSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tCX1NFVCgpCQliZmluX3JlYWQxNihQT1JURklPX01BU0tCX1NFVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tCX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tCX1NFVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19NQVNLQl9UT0dHTEUoKQliZmluX3JlYWQxNihQT1JURklPX01BU0tCX1RPR0dMRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tCX1RPR0dMRSh2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tCX1RPR0dMRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19ESVIoKQkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fRElSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fRElSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX0RJUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19QT0xBUigpCQliZmluX3JlYWQxNihQT1JURklPX1BPTEFSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fUE9MQVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fUE9MQVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fRURHRSgpCQliZmluX3JlYWQxNihQT1JURklPX0VER0UpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19FREdFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX0VER0UsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fQk9USCgpCQliZmluX3JlYWQxNihQT1JURklPX0JPVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19CT1RIKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX0JPVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fSU5FTigpCQliZmluX3JlYWQxNihQT1JURklPX0lORU4pCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19JTkVOKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX0lORU4sIHZhbCkKLQotCi0vKiBTUE9SVDAgQ29udHJvbGxlcgkJKDB4RkZDMDA4MDAgLSAweEZGQzAwOEZGKQkJCQkJCQkJKi8KLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ1IxKCkJCQliZmluX3JlYWQxNihTUE9SVDBfVENSMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVENSMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1RDUjEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ1IyKCkJCQliZmluX3JlYWQxNihTUE9SVDBfVENSMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVENSMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1RDUjIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ0xLRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9UQ0xLRElWKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UQ0xLRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfVENMS0RJViwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RGU0RJVigpCQliZmluX3JlYWQxNihTUE9SVDBfVEZTRElWKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9URlNESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9URlNESVYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UWCgpCQkJYmZpbl9yZWFkMzIoU1BPUlQwX1RYKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UWCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX1RYLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUlgoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMF9SWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUlgodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9SWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RYMzIoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMF9UWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVFgzMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX1RYLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUlgzMigpCQkJYmZpbl9yZWFkMzIoU1BPUlQwX1JYKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9SWDMyKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDBfUlgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UWDE2KCkJCQliZmluX3JlYWQxNihTUE9SVDBfVFgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RYMTYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9UWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1JYMTYoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9SWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUlgxNih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1JYLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkNSMSgpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JDUjEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JDUjEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9SQ1IxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkNSMigpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JDUjIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JDUjIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9SQ1IyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkNMS0RJVigpCQliZmluX3JlYWQxNihTUE9SVDBfUkNMS0RJVikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUkNMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1JDTEtESVYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9SRlNESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JGU0RJVikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUkZTRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfUkZTRElWLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfU1RBVCgpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1NUQVQodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfQ0hOTCgpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX0NITkwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX0NITkwodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9DSE5MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTUNNQzEoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX01DTUMxKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NQ01DMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX01DTUMxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTUNNQzIoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX01DTUMyKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NQ01DMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX01DTUMyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzAoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MwKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzEoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MxKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMSh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzIoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MyKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzMoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MzKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMyh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzAoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MwKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzEoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MxKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMSh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzIoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MyKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzMoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MzKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMyh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MzLCB2YWwpCi0KLQotLyogU1BPUlQxIENvbnRyb2xsZXIJCSgweEZGQzAwOTAwIC0gMHhGRkMwMDlGRikJCQkJCQkJCSovCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVENSMSgpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RDUjEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1RDUjEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9UQ1IxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVENSMigpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RDUjIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1RDUjIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9UQ1IyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVENMS0RJVigpCQliZmluX3JlYWQxNihTUE9SVDFfVENMS0RJVikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVENMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1RDTEtESVYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9URlNESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RGU0RJVikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVEZTRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfVEZTRElWLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVFgoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMV9UWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVFgodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9UWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JYKCkJCQliZmluX3JlYWQzMihTUE9SVDFfUlgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JYKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDFfUlgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9UWDMyKCkJCQliZmluX3JlYWQzMihTUE9SVDFfVFgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1RYMzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9UWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JYMzIoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMV9SWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfUlgzMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX1JYLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVFgxNigpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RYKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9UWDE2KHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfVFgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9SWDE2KCkJCQliZmluX3JlYWQxNihTUE9SVDFfUlgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JYMTYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9SWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JDUjEoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMV9SQ1IxKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9SQ1IxKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfUkNSMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JDUjIoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMV9SQ1IyKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9SQ1IyKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfUkNSMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JDTEtESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQxX1JDTEtESVYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JDTEtESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9SQ0xLRElWLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfUkZTRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMV9SRlNESVYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JGU0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1JGU0RJViwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1NUQVQoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMV9TVEFUKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfU1RBVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX0NITkwoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMV9DSE5MKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9DSE5MKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfQ0hOTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01DTUMxKCkJCWJmaW5fcmVhZDE2KFNQT1JUMV9NQ01DMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTUNNQzEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9NQ01DMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01DTUMyKCkJCWJmaW5fcmVhZDE2KFNQT1JUMV9NQ01DMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTUNNQzIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9NQ01DMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01UQ1MwKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NVENTMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVRDUzAodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NVENTMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01UQ1MxKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NVENTMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVRDUzEodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NVENTMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01UQ1MyKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NVENTMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVRDUzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NVENTMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01UQ1MzKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NVENTMykKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVRDUzModmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NVENTMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01SQ1MwKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NUkNTMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVJDUzAodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NUkNTMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01SQ1MxKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NUkNTMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVJDUzEodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NUkNTMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01SQ1MyKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NUkNTMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVJDUzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NUkNTMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01SQ1MzKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NUkNTMykKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVJDUzModmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NUkNTMywgdmFsKQotCi0KLS8qIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgVW5pdCAoMHhGRkMwMEEwMCAtIDB4RkZDMDBBRkYpCQkJCQkJCSovCi0jZGVmaW5lIGJmaW5fcmVhZF9FQklVX0FNR0NUTCgpCQkJYmZpbl9yZWFkMTYoRUJJVV9BTUdDVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9BTUdDVEwodmFsKQkJYmZpbl93cml0ZTE2KEVCSVVfQU1HQ1RMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FQklVX0FNQkNUTDAoKQkJYmZpbl9yZWFkMzIoRUJJVV9BTUJDVEwwKQotI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfQU1CQ1RMMCh2YWwpCQliZmluX3dyaXRlMzIoRUJJVV9BTUJDVEwwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FQklVX0FNQkNUTDEoKQkJYmZpbl9yZWFkMzIoRUJJVV9BTUJDVEwxKQotI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfQU1CQ1RMMSh2YWwpCQliZmluX3dyaXRlMzIoRUJJVV9BTUJDVEwxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FQklVX1NER0NUTCgpCQkJYmZpbl9yZWFkMzIoRUJJVV9TREdDVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9TREdDVEwodmFsKQkJYmZpbl93cml0ZTMyKEVCSVVfU0RHQ1RMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FQklVX1NEQkNUTCgpCQkJYmZpbl9yZWFkMTYoRUJJVV9TREJDVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9TREJDVEwodmFsKQkJYmZpbl93cml0ZTE2KEVCSVVfU0RCQ1RMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FQklVX1NEUlJDKCkJCQliZmluX3JlYWQxNihFQklVX1NEUlJDKQotI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfU0RSUkModmFsKQkJYmZpbl93cml0ZTE2KEVCSVVfU0RSUkMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfU0RTVEFUKCkJCQliZmluX3JlYWQxNihFQklVX1NEU1RBVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FQklVX1NEU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoRUJJVV9TRFNUQVQsIHZhbCkKLQotCi0vKiBETUEgVHJhZmZpYyBDb250cm9sIFJlZ2lzdGVycwkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfRE1BX1RDX1BFUigpCQkJYmZpbl9yZWFkMTYoRE1BX1RDX1BFUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUFfVENfUEVSKHZhbCkJCWJmaW5fd3JpdGUxNihETUFfVENfUEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUFfVENfQ05UKCkJCQliZmluX3JlYWQxNihETUFfVENfQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQV9UQ19DTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQV9UQ19DTlQsIHZhbCkKLQotLyogQWx0ZXJuYXRlIGRlcHJlY2F0ZWQgcmVnaXN0ZXIgbmFtZXMgKGJlbG93KSBwcm92aWRlZCBmb3IgYmFja3dhcmRzIGNvZGUgY29tcGF0aWJpbGl0eSAqLwotI2RlZmluZSBiZmluX3JlYWRfRE1BX1RDUEVSKCkJCQliZmluX3JlYWQxNihETUFfVENQRVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BX1RDUEVSKHZhbCkJCWJmaW5fd3JpdGUxNihETUFfVENQRVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQV9UQ0NOVCgpCQkJYmZpbl9yZWFkMTYoRE1BX1RDQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQV9UQ0NOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BX1RDQ05ULCB2YWwpCi0KLS8qIERNQSBDb250cm9sbGVyCQkJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfRE1BMF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTBfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUEwX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMF9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTBfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMF9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMF9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BMF9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMF9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMF9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMF9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTBfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMF9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUEwX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTBfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEwX0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTBfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMF9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMF9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTBfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEwX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUEwX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUEwX0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMF9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMF9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMF9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUEwX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUEwX0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BMF9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTBfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BMV9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTFfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUExX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMV9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTFfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMV9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BMV9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMV9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMV9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMV9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTFfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMV9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUExX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTFfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExX0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTFfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMV9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTFfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExX0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMV9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMV9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUExX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUExX0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BMV9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTFfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BMl9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTJfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUEyX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMl9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTJfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMl9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMl9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BMl9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMl9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMl9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMl9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTJfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMl9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMl9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUEyX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTJfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEyX0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTJfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMl9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMl9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTJfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEyX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUEyX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUEyX0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMl9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMl9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMl9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUEyX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUEyX0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BMl9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTJfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BM19DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTNfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUEzX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BM19ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTNfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BM19ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEzX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BM19TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BM19TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEzX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BM19YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BM19YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEzX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BM19ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BM19ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEzX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTNfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BM19YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BM19ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUEzX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTNfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEzX0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTNfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BM19DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BM19DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTNfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEzX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUEzX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUEzX0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BM19DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BM19DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BM19DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUEzX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUEzX0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BM19QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTNfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BNF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTRfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE0X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNF9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTRfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BNF9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE0X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNF9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BNF9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE0X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNF9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE0X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNF9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNF9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE0X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTRfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BNF9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE0X1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTRfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE0X0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTRfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNF9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNF9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTRfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE0X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE0X0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE0X0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNF9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNF9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNF9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE0X0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE0X0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BNF9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTRfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BNV9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTVfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE1X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNV9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTVfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BNV9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE1X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BNV9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE1X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNV9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE1X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNV9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNV9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE1X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTVfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BNV9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE1X1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTVfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE1X0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTVfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNV9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTVfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE1X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE1X0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE1X0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNV9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNV9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE1X0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE1X0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BNV9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTVfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BNl9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTZfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE2X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNl9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTZfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BNl9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE2X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNl9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BNl9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE2X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNl9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE2X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNl9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNl9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE2X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTZfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BNl9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNl9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE2X1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTZfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE2X0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTZfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNl9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNl9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTZfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE2X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE2X0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE2X0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNl9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNl9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNl9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE2X0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE2X0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BNl9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTZfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BN19DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTdfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE3X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BN19ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTdfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BN19ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE3X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BN19TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BN19TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE3X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BN19YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BN19YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE3X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BN19ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BN19ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE3X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTdfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BN19YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BN19ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE3X1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTdfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE3X0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTdfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BN19DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BN19DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTdfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE3X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE3X0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE3X0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BN19DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BN19DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BN19DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE3X0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE3X0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BN19QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTdfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BOF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQThfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQThfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE4X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOF9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQThfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BOF9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE4X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BOF9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQThfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BOF9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE4X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQThfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BOF9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE4X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOF9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQThfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BOF9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE4X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQThfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BOF9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE4X1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQThfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQThfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQThfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE4X0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQThfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOF9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BOF9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQThfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE4X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE4X0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE4X0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOF9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOF9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BOF9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQThfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE4X0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE4X0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQThfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BOF9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQThfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BOV9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTlfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE5X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOV9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTlfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BOV9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE5X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BOV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BOV9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE5X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BOV9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE5X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOV9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BOV9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE5X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTlfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BOV9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE5X1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTlfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE5X0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTlfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BOV9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTlfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE5X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE5X0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE5X0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOV9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BOV9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE5X0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE5X0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BOV9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTlfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ09ORklHKCkJCWJmaW5fcmVhZDE2KERNQTEwX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KERNQTEwX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExMF9ORVhUX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTBfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfU1RBUlRfQUREUigpCQliZmluX3JlYWQzMihETUExMF9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX1NUQVJUX0FERFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTBfU1RBUlRfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExMF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTEwX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTBfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMF9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUExMF9YX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTBfWF9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTEwX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMF9ZX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExMF9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX0NVUlJfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTBfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTEwX0NVUlJfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTEwX0NVUlJfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTEwX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTBfQ1VSUl9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTBfQ1VSUl9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExMF9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMTBfSVJRX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KERNQTEwX0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoRE1BMTBfUEVSSVBIRVJBTF9NQVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoRE1BMTBfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ09ORklHKCkJCWJmaW5fcmVhZDE2KERNQTExX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KERNQTExX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExMV9ORVhUX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTFfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfU1RBUlRfQUREUigpCQliZmluX3JlYWQzMihETUExMV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX1NUQVJUX0FERFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTFfU1RBUlRfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExMV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTExX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTFfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMV9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUExMV9YX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTFfWF9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTExX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMV9ZX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExMV9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX0NVUlJfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTFfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTExX0NVUlJfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTExX0NVUlJfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTExX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTFfQ1VSUl9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTFfQ1VSUl9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExMV9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMTFfSVJRX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KERNQTExX0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoRE1BMTFfUEVSSVBIRVJBTF9NQVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoRE1BMTFfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDBfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX05FWFRfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX0QwX05FWFRfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfRDBfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfRDBfU1RBUlRfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1NUQVJUX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMF9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMF9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMF9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDBfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9YX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QwX1hfTU9ESUZZLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDBfWV9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9ZX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QwX1lfTU9ESUZZLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0NVUlJfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX0QwX0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfRDBfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoTURNQV9EMF9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DVVJSX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMF9DVVJSX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfQ1VSUl9YX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9EMF9DVVJSX1hfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMF9DVVJSX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfQ1VSUl9ZX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9EMF9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMF9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihNRE1BX0QwX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDBfSVJRX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KE1ETUFfRDBfUEVSSVBIRVJBTF9NQVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QwX1BFUklQSEVSQUxfTUFQLCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfQ09ORklHKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzBfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX1MwX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9ORVhUX0RFU0NfUFRSKCkJYmZpbl9yZWFkMzIoTURNQV9TMF9ORVhUX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfTkVYVF9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX1MwX05FWFRfREVTQ19QVFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfU1RBUlRfQUREUigpCQliZmluX3JlYWQzMihNRE1BX1MwX1NUQVJUX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9TVEFSVF9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzBfU1RBUlRfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzBfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzBfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzBfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzBfWV9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9YX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX1MwX1hfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfWF9NT0RJRlkodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMF9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX1MwX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfWV9NT0RJRlkodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMF9ZX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DVVJSX0RFU0NfUFRSKCkJYmZpbl9yZWFkMzIoTURNQV9TMF9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX1MwX0NVUlJfREVTQ19QVFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfUzBfQ1VSUl9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ1VSUl9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzBfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0NVUlJfWF9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfUzBfQ1VSUl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzBfQ1VSUl9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0NVUlJfWV9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfUzBfQ1VSUl9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzBfQ1VSUl9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoTURNQV9TMF9JUlFfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MwX0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfUEVSSVBIRVJBTF9NQVAoKQliZmluX3JlYWQxNihNRE1BX1MwX1BFUklQSEVSQUxfTUFQKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMF9QRVJJUEhFUkFMX01BUCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NPTkZJRygpCQliZmluX3JlYWQxNihNRE1BX0QxX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMV9DT05GSUcsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfTkVYVF9ERVNDX1BUUigpCWJmaW5fcmVhZDMyKE1ETUFfRDFfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMV9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoTURNQV9EMV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfU1RBUlRfQUREUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX0QxX1NUQVJUX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWF9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX0QxX1hfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX0QxX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWV9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX0QxX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX0QxX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoTURNQV9EMV9YX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1hfTU9ESUZZKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDFfWF9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoTURNQV9EMV9ZX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1lfTU9ESUZZKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDFfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfQ1VSUl9ERVNDX1BUUigpCWJmaW5fcmVhZDMyKE1ETUFfRDFfQ1VSUl9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMV9DVVJSX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NVUlJfQUREUigpCQliZmluX3JlYWQzMihNRE1BX0QxX0NVUlJfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfQUREUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX0QxX0NVUlJfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9DVVJSX1hfQ09VTlQoKQliZmluX3JlYWQxNihNRE1BX0QxX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QxX0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9DVVJSX1lfQ09VTlQoKQliZmluX3JlYWQxNihNRE1BX0QxX0NVUlJfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QxX0NVUlJfWV9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9JUlFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDFfSVJRX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0lSUV9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoTURNQV9EMV9JUlFfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoTURNQV9EMV9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDFfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9DT05GSUcoKQkJYmZpbl9yZWFkMTYoTURNQV9TMV9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzFfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX05FWFRfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX1MxX05FWFRfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzFfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfUzFfU1RBUlRfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1NUQVJUX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9TMV9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9TMV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TMV9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9TMV9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TMV9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzFfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9YX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MxX1hfTU9ESUZZLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzFfWV9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9ZX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MxX1lfTU9ESUZZLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NVUlJfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX1MxX0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzFfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoTURNQV9TMV9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DVVJSX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9TMV9DVVJSX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfQ1VSUl9YX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9TMV9DVVJSX1hfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMV9DVVJSX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfQ1VSUl9ZX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9TMV9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMV9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihNRE1BX1MxX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzFfSVJRX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KE1ETUFfUzFfUEVSSVBIRVJBTF9NQVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MxX1BFUklQSEVSQUxfTUFQLCB2YWwpCi0KLQotLyogUGFyYWxsZWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKDB4RkZDMDEwMDAgLSAweEZGQzAxMEZGKQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfUFBJX0NPTlRST0woKQkJCWJmaW5fcmVhZDE2KFBQSV9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1BQSV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihQUElfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUFBJX1NUQVRVUygpCQkJYmZpbl9yZWFkMTYoUFBJX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9QUElfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihQUElfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fY2xlYXJfUFBJX1NUQVRVUygpCQkJYmZpbl93cml0ZV9QUElfU1RBVFVTKDB4RkZGRikKLSNkZWZpbmUgYmZpbl9yZWFkX1BQSV9ERUxBWSgpCQkJYmZpbl9yZWFkMTYoUFBJX0RFTEFZKQotI2RlZmluZSBiZmluX3dyaXRlX1BQSV9ERUxBWSh2YWwpCQliZmluX3dyaXRlMTYoUFBJX0RFTEFZLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QUElfQ09VTlQoKQkJCWJmaW5fcmVhZDE2KFBQSV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QUElfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KFBQSV9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUFBJX0ZSQU1FKCkJCQliZmluX3JlYWQxNihQUElfRlJBTUUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUFBJX0ZSQU1FKHZhbCkJCWJmaW5fd3JpdGUxNihQUElfRlJBTUUsIHZhbCkKLQotCi0vKiBUd28tV2lyZSBJbnRlcmZhY2UJCSgweEZGQzAxNDAwIC0gMHhGRkMwMTRGRikJCQkJCQkJCSovCi0KLS8qIEdlbmVyYWwgUHVycG9zZSBJL08gUG9ydCBHICgweEZGQzAxNTAwIC0gMHhGRkMwMTVGRikJCQkJCQkJCSovCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPKCkJCQliZmluX3JlYWQxNihQT1JUR0lPKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU8odmFsKQkJCWJmaW5fd3JpdGUxNihQT1JUR0lPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fQ0xFQVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19DTEVBUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdJT19DTEVBUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19TRVQoKQkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fU0VUKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fU0VUKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX1NFVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19UT0dHTEUoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19UT0dHTEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19UT0dHTEUodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHSU9fVE9HR0xFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX01BU0tBKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fTUFTS0EpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19NQVNLQV9DTEVBUigpCQliZmluX3JlYWQxNihQT1JUR0lPX01BU0tBX0NMRUFSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fTUFTS0FfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQV9DTEVBUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19NQVNLQV9TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19NQVNLQV9TRVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQV9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQV9TRVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fTUFTS0FfVE9HR0xFKCkJYmZpbl9yZWFkMTYoUE9SVEdJT19NQVNLQV9UT0dHTEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQV9UT0dHTEUodmFsKQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQV9UT0dHTEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fTUFTS0IoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19NQVNLQikKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX01BU0tCKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tCLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX01BU0tCX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fTUFTS0JfQ0xFQVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQl9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tCX0NMRUFSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX01BU0tCX1NFVCgpCQliZmluX3JlYWQxNihQT1JUR0lPX01BU0tCX1NFVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX01BU0tCX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tCX1NFVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19NQVNLQl9UT0dHTEUoKQliZmluX3JlYWQxNihQT1JUR0lPX01BU0tCX1RPR0dMRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX01BU0tCX1RPR0dMRSh2YWwpCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tCX1RPR0dMRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19ESVIoKQkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fRElSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fRElSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX0RJUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19QT0xBUigpCQliZmluX3JlYWQxNihQT1JUR0lPX1BPTEFSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fUE9MQVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHSU9fUE9MQVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fRURHRSgpCQliZmluX3JlYWQxNihQT1JUR0lPX0VER0UpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19FREdFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX0VER0UsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fQk9USCgpCQliZmluX3JlYWQxNihQT1JUR0lPX0JPVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19CT1RIKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX0JPVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fSU5FTigpCQliZmluX3JlYWQxNihQT1JUR0lPX0lORU4pCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19JTkVOKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX0lORU4sIHZhbCkKLQotCi0vKiBHZW5lcmFsIFB1cnBvc2UgSS9PIFBvcnQgSCAoMHhGRkMwMTcwMCAtIDB4RkZDMDE3RkYpCQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJTygpCQkJYmZpbl9yZWFkMTYoUE9SVEhJTykKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPKHZhbCkJCQliZmluX3dyaXRlMTYoUE9SVEhJTywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19DTEVBUigpCQliZmluX3JlYWQxNihQT1JUSElPX0NMRUFSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fQ0xFQVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRISU9fQ0xFQVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fU0VUKCkJCQliZmluX3JlYWQxNihQT1JUSElPX1NFVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX1NFVCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19TRVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fVE9HR0xFKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fVE9HR0xFKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fVE9HR0xFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSElPX1RPR0dMRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19NQVNLQSgpCQliZmluX3JlYWQxNihQT1JUSElPX01BU0tBKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0EodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0EsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fTUFTS0FfQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19NQVNLQV9DTEVBUikKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX01BU0tBX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0FfQ0xFQVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fTUFTS0FfU0VUKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fTUFTS0FfU0VUKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0FfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0FfU0VULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX01BU0tBX1RPR0dMRSgpCWJmaW5fcmVhZDE2KFBPUlRISU9fTUFTS0FfVE9HR0xFKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0FfVE9HR0xFKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0FfVE9HR0xFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX01BU0tCKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fTUFTS0IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19NQVNLQih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19NQVNLQl9DTEVBUigpCQliZmluX3JlYWQxNihQT1JUSElPX01BU0tCX0NMRUFSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0JfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQl9DTEVBUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19NQVNLQl9TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19NQVNLQl9TRVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19NQVNLQl9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQl9TRVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fTUFTS0JfVE9HR0xFKCkJYmZpbl9yZWFkMTYoUE9SVEhJT19NQVNLQl9UT0dHTEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19NQVNLQl9UT0dHTEUodmFsKQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQl9UT0dHTEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fRElSKCkJCQliZmluX3JlYWQxNihQT1JUSElPX0RJUikKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX0RJUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19ESVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fUE9MQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19QT0xBUikKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX1BPTEFSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSElPX1BPTEFSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX0VER0UoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19FREdFKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fRURHRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19FREdFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX0JPVEgoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19CT1RIKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fQk9USCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19CT1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX0lORU4oKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19JTkVOKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fSU5FTih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19JTkVOLCB2YWwpCi0KLQotLyogVUFSVDEgQ29udHJvbGxlcgkJKDB4RkZDMDIwMDAgLSAweEZGQzAyMEZGKQkJCQkJCQkJKi8KLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX1RIUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfVEhSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX1RIUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfVEhSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9SQlIoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX1JCUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9SQlIodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX1JCUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfRExMKCkJCQliZmluX3JlYWQxNihVQVJUMV9ETEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfRExMKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9ETEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX0lFUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfSUVSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX0lFUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfSUVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9ETEgoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX0RMSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9ETEgodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX0RMSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfSUlSKCkJCQliZmluX3JlYWQxNihVQVJUMV9JSVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfSUlSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9JSVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX0xDUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfTENSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX0xDUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfTENSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9NQ1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX01DUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9NQ1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX01DUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfTFNSKCkJCQliZmluX3JlYWQxNihVQVJUMV9MU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfTFNSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9MU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX01TUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfTVNSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX01TUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfTVNSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9TQ1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX1NDUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9TQ1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX1NDUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfR0NUTCgpCQkJYmZpbl9yZWFkMTYoVUFSVDFfR0NUTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9HQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9HQ1RMLCB2YWwpCi0KLS8qIE9taXQgQ0FOIHJlZ2lzdGVyIHNldHMgZnJvbSB0aGUgY2RlZkJGNTM0LmggKENBTiBpcyBub3QgaW4gdGhlIEFEU1AtQkY1MXggcHJvY2Vzc29yKSAqLwotCi0vKiBQaW4gQ29udHJvbCBSZWdpc3RlcnMJKDB4RkZDMDMyMDAgLSAweEZGQzAzMkZGKQkJCQkJCQkJKi8KLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX0ZFUigpCQkJYmZpbl9yZWFkMTYoUE9SVEZfRkVSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGX0ZFUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZfRkVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUR19GRVIoKQkJCWJmaW5fcmVhZDE2KFBPUlRHX0ZFUikKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19GRVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHX0ZFUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEhfRkVSKCkJCQliZmluX3JlYWQxNihQT1JUSF9GRVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhfRkVSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSF9GRVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRfTVVYKCkJCQliZmluX3JlYWQxNihQT1JUX01VWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUX01VWCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVF9NVVgsIHZhbCkKLQotCi0vKiBIYW5kc2hha2UgTURNQSBSZWdpc3RlcnMJKDB4RkZDMDMzMDAgLSAweEZGQzAzM0ZGKQkJCQkJCQkJKi8KLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0VDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTBfRUNJTklUKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ0lOSVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9CQ0lOSVQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0JDSU5JVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfQkNJTklUKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQkNJTklULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNVUkdFTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0VDVVJHRU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ1VSR0VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0VDVVJHRU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNPVkVSRkxPVygpCQliZmluX3JlYWQxNihITURNQTBfRUNPVkVSRkxPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfRUNPVkVSRkxPVyh2YWwpCWJmaW5fd3JpdGUxNihITURNQTBfRUNPVkVSRkxPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0VDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTBfRUNPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9CQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0JDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfQkNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQkNPVU5ULCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0VDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTFfRUNJTklUKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ0lOSVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9CQ0lOSVQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0JDSU5JVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfQkNJTklUKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQkNJTklULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNVUkdFTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0VDVVJHRU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ1VSR0VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0VDVVJHRU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNPVkVSRkxPVygpCQliZmluX3JlYWQxNihITURNQTFfRUNPVkVSRkxPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfRUNPVkVSRkxPVyh2YWwpCWJmaW5fd3JpdGUxNihITURNQTFfRUNPVkVSRkxPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0VDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTFfRUNPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9CQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0JDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfQkNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQkNPVU5ULCB2YWwpCi0KLS8qID09PT0gZW5kIGZyb20gY2RlZkJGNTM0LmggPT09PSAqLwotCi0vKiBHUElPIFBJTiBtdXggKDB4RkZDMDMyMTAgLSBPeEZGQzAzMjg4KSAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JURl9NVVgoKQkJCWJmaW5fcmVhZDE2KFBPUlRGX01VWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JURl9NVVgodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGX01VWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdfTVVYKCkJCQliZmluX3JlYWQxNihQT1JUR19NVVgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdfTVVYKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR19NVVgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRIX01VWCgpCQkJYmZpbl9yZWFkMTYoUE9SVEhfTVVYKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRIX01VWCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhfTVVYLCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX0RSSVZFKCkJCQliZmluX3JlYWQxNihQT1JURl9EUklWRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JURl9EUklWRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZfRFJJVkUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHX0RSSVZFKCkJCQliZmluX3JlYWQxNihQT1JUR19EUklWRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19EUklWRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdfRFJJVkUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRIX0RSSVZFKCkJCQliZmluX3JlYWQxNihQT1JUSF9EUklWRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSF9EUklWRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhfRFJJVkUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX1NMRVcoKQkJCWJmaW5fcmVhZDE2KFBPUlRGX1NMRVcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZfU0xFVyh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZfU0xFVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdfU0xFVygpCQkJYmZpbl9yZWFkMTYoUE9SVEdfU0xFVykKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19TTEVXKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR19TTEVXLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUSF9TTEVXKCkJCQliZmluX3JlYWQxNihQT1JUSF9TTEVXKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRIX1NMRVcodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRIX1NMRVcsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX0hZU1RFUklTSVMoKQkJYmZpbl9yZWFkMTYoUE9SVEZfSFlTVEVSSVNJUykKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JURl9IWVNURVJJU0lTKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRGX0hZU1RFUklTSVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHX0hZU1RFUklTSVMoKQkJYmZpbl9yZWFkMTYoUE9SVEdfSFlTVEVSSVNJUykKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19IWVNURVJJU0lTKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRHX0hZU1RFUklTSVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRIX0hZU1RFUklTSVMoKQkJYmZpbl9yZWFkMTYoUE9SVEhfSFlTVEVSSVNJUykKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSF9IWVNURVJJU0lTKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRIX0hZU1RFUklTSVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01JU0NQT1JUX0RSSVZFKCkJCWJmaW5fcmVhZDE2KE1JU0NQT1JUX0RSSVZFKQotI2RlZmluZSBiZmluX3dyaXRlX01JU0NQT1JUX0RSSVZFKHZhbCkJCWJmaW5fd3JpdGUxNihNSVNDUE9SVF9EUklWRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTUlTQ1BPUlRfU0xFVygpCQliZmluX3JlYWQxNihNSVNDUE9SVF9TTEVXKQotI2RlZmluZSBiZmluX3dyaXRlX01JU0NQT1JUX1NMRVcodmFsKQkJYmZpbl93cml0ZTE2KE1JU0NQT1JUX1NMRVcsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01JU0NQT1JUX0hZU1RFUklTSVMoKQkJYmZpbl9yZWFkMTYoTUlTQ1BPUlRfSFlTVEVSSVNJUykKLSNkZWZpbmUgYmZpbl93cml0ZV9NSVNDUE9SVF9IWVNURVJJU0lTKHZhbCkJYmZpbl93cml0ZTE2KE1JU0NQT1JUX0hZU1RFUklTSVMsIHZhbCkKLQotLyogSE9TVCBQb3J0IFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9IT1NUX0NPTlRST0woKQkJYmZpbl9yZWFkMTYoSE9TVF9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX0hPU1RfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoSE9TVF9DT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9IT1NUX1NUQVRVUygpCQkJYmZpbl9yZWFkMTYoSE9TVF9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE9TVF9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KEhPU1RfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9IT1NUX1RJTUVPVVQoKQkJYmZpbl9yZWFkMTYoSE9TVF9USU1FT1VUKQotI2RlZmluZSBiZmluX3dyaXRlX0hPU1RfVElNRU9VVCh2YWwpCQliZmluX3dyaXRlMTYoSE9TVF9USU1FT1VULCB2YWwpCi0KLS8qIENvdW50ZXIgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX0NOVF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KENOVF9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ05UX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoQ05UX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ05UX0lNQVNLKCkJCQliZmluX3JlYWQxNihDTlRfSU1BU0spCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ05UX0lNQVNLKHZhbCkJCWJmaW5fd3JpdGUxNihDTlRfSU1BU0ssIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NOVF9TVEFUVVMoKQkJCWJmaW5fcmVhZDE2KENOVF9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ05UX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoQ05UX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ05UX0NPTU1BTkQoKQkJCWJmaW5fcmVhZDE2KENOVF9DT01NQU5EKQotI2RlZmluZSBiZmluX3dyaXRlX0NOVF9DT01NQU5EKHZhbCkJCWJmaW5fd3JpdGUxNihDTlRfQ09NTUFORCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ05UX0RFQk9VTkNFKCkJCWJmaW5fcmVhZDE2KENOVF9ERUJPVU5DRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DTlRfREVCT1VOQ0UodmFsKQkJYmZpbl93cml0ZTE2KENOVF9ERUJPVU5DRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ05UX0NPVU5URVIoKQkJCWJmaW5fcmVhZDMyKENOVF9DT1VOVEVSKQotI2RlZmluZSBiZmluX3dyaXRlX0NOVF9DT1VOVEVSKHZhbCkJCWJmaW5fd3JpdGUzMihDTlRfQ09VTlRFUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ05UX01BWCgpCQkJYmZpbl9yZWFkMzIoQ05UX01BWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DTlRfTUFYKHZhbCkJCQliZmluX3dyaXRlMzIoQ05UX01BWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ05UX01JTigpCQkJYmZpbl9yZWFkMzIoQ05UX01JTikKLSNkZWZpbmUgYmZpbl93cml0ZV9DTlRfTUlOKHZhbCkJCQliZmluX3dyaXRlMzIoQ05UX01JTiwgdmFsKQotCi0vKiBTZWN1cml0eSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfU0VDVVJFX1NZU1NXVCgpCQliZmluX3JlYWQzMihTRUNVUkVfU1lTU1dUKQotI2RlZmluZSBiZmluX3dyaXRlX1NFQ1VSRV9TWVNTV1QodmFsKQkJYmZpbl93cml0ZTMyKFNFQ1VSRV9TWVNTV1QsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NFQ1VSRV9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KFNFQ1VSRV9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1NFQ1VSRV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihTRUNVUkVfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0VDVVJFX1NUQVRVUygpCQliZmluX3JlYWQxNihTRUNVUkVfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX1NFQ1VSRV9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KFNFQ1VSRV9TVEFUVVMsIHZhbCkKLQotLyogVGhlc2UgbmVlZCB0byBiZSBsYXN0IGR1ZSB0byB0aGUgY2RlZi9saW51eCBpbnRlci1kZXBlbmRlbmNpZXMgKi8KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNlbmRpZiAvKiBfQ0RFRl9CRjUyWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTEyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTEyLmgKaW5kZXggOWI1MDViYi4uMjcyODU4MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxMi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KQEAgLTcsMTIgKzcsMTM4OCBAQAogI2lmbmRlZiBfREVGX0JGNTEyX0gKICNkZWZpbmUgX0RFRl9CRjUxMl9ICiAKLS8qIEluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxhc20vZGVmX0xQQmxhY2tmaW4uaD4KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiAgIFNZU1RFTSAmIE1NUiBBRERSRVNTIERFRklOSVRJT05TIENPTU1PTiBUTyBBTEwgQURTUC1CRjUxeCAgICAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAotLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1MTIgKi8KKy8qIENsb2NrIGFuZCBTeXN0ZW0gQ29udHJvbAkoMHhGRkMwMDAwMCAtIDB4RkZDMDAwRkYpCQkJCQkJCQkqLworI2RlZmluZSBQTExfQ1RMCQkJCTB4RkZDMDAwMDAJLyogUExMIENvbnRyb2wgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBQTExfRElWCQkJCTB4RkZDMDAwMDQJLyogUExMIERpdmlkZSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFZSX0NUTAkJCQkweEZGQzAwMDA4CS8qIFZvbHRhZ2UgUmVndWxhdG9yIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgUExMX1NUQVQJCQkweEZGQzAwMDBDCS8qIFBMTCBTdGF0dXMgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBQTExfTE9DS0NOVAkJCTB4RkZDMDAwMTAJLyogUExMIExvY2sgQ291bnQgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIENISVBJRAkJCQkweEZGQzAwMDE0CS8qIERldmljZSBJRCBSZWdpc3RlciAqLwogCi0vKiBJbmNsdWRlIGRlZkJGNTF4X2Jhc2UuaCBmb3IgdGhlIHNldCBvZiAjZGVmaW5lcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIEFEU1AtQkY1MXggcHJvY2Vzc29ycyAqLwotI2luY2x1ZGUgImRlZkJGNTF4X2Jhc2UuaCIKKy8qIFN5c3RlbSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoMHhGRkMwMDEwMCAtIDB4RkZDMDAxRkYpCQkJCQkJCQkqLworI2RlZmluZSBTV1JTVAkJCQkweEZGQzAwMTAwCS8qIFNvZnR3YXJlIFJlc2V0IFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBTWVNDUgkJCQkweEZGQzAwMTA0CS8qIFN5c3RlbSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFNJQ19SVkVDVAkJCTB4RkZDMDAxMDgJLyogSW50ZXJydXB0IFJlc2V0IFZlY3RvciBBZGRyZXNzIFJlZ2lzdGVyCQkJKi8KKworI2RlZmluZSBTSUNfSU1BU0swCQkJMHhGRkMwMDEwQwkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgU0lDX0lBUjAJCQkweEZGQzAwMTEwCS8qIEludGVycnVwdCBBc3NpZ25tZW50IFJlZ2lzdGVyIDAJCQkJKi8KKyNkZWZpbmUgU0lDX0lBUjEJCQkweEZGQzAwMTE0CS8qIEludGVycnVwdCBBc3NpZ25tZW50IFJlZ2lzdGVyIDEJCQkJKi8KKyNkZWZpbmUgU0lDX0lBUjIJCQkweEZGQzAwMTE4CS8qIEludGVycnVwdCBBc3NpZ25tZW50IFJlZ2lzdGVyIDIJCQkJKi8KKyNkZWZpbmUgU0lDX0lBUjMJCQkweEZGQzAwMTFDCS8qIEludGVycnVwdCBBc3NpZ25tZW50IFJlZ2lzdGVyIDMJCQkJKi8KKyNkZWZpbmUgU0lDX0lTUjAJCQkweEZGQzAwMTIwCS8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFNJQ19JV1IwCQkJMHhGRkMwMDEyNAkvKiBJbnRlcnJ1cHQgV2FrZXVwIFJlZ2lzdGVyCQkJCQkqLworCisvKiBTSUMgQWRkaXRpb25zIHRvIEFEU1AtQkY1MXggKDB4RkZDMDAxNEMgLSAweEZGQzAwMTYyKSAqLworI2RlZmluZSBTSUNfSU1BU0sxICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDAxNEMgICAgIC8qIEludGVycnVwdCBNYXNrIHJlZ2lzdGVyIG9mIFNJQzIgKi8KKyNkZWZpbmUgU0lDX0lBUjQgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTUwICAgICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCByZWdpc3RlcjQgKi8KKyNkZWZpbmUgU0lDX0lBUjUgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTU0ICAgICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCByZWdpc3RlcjUgKi8KKyNkZWZpbmUgU0lDX0lBUjYgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTU4ICAgICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCByZWdpc3RlcjYgKi8KKyNkZWZpbmUgU0lDX0lBUjcgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTVDICAgICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCByZWdpc3RlcjcgKi8KKyNkZWZpbmUgU0lDX0lTUjEgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTYwICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVyIHJlZ2lzdGVyICovCisjZGVmaW5lIFNJQ19JV1IxICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMDE2NCAgICAgLyogSW50ZXJydXB0IFdha2V1cCByZWdpc3RlciAqLworCisKKy8qIFdhdGNoZG9nIFRpbWVyCQkJKDB4RkZDMDAyMDAgLSAweEZGQzAwMkZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgV0RPR19DVEwJCQkweEZGQzAwMjAwCS8qIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgV0RPR19DTlQJCQkweEZGQzAwMjA0CS8qIFdhdGNoZG9nIENvdW50IFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBXRE9HX1NUQVQJCQkweEZGQzAwMjA4CS8qIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlcgkJCQkJKi8KKworCisvKiBSZWFsIFRpbWUgQ2xvY2sJCSgweEZGQzAwMzAwIC0gMHhGRkMwMDNGRikJCQkJCQkJCQkqLworI2RlZmluZSBSVENfU1RBVAkJCTB4RkZDMDAzMDAJLyogUlRDIFN0YXR1cyBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFJUQ19JQ1RMCQkJMHhGRkMwMDMwNAkvKiBSVEMgSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBSVENfSVNUQVQJCQkweEZGQzAwMzA4CS8qIFJUQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUlRDX1NXQ05UCQkJMHhGRkMwMDMwQwkvKiBSVEMgU3RvcHdhdGNoIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFJUQ19BTEFSTQkJCTB4RkZDMDAzMTAJLyogUlRDIEFsYXJtIFRpbWUgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFJUQ19GQVNUCQkJMHhGRkMwMDMxNAkvKiBSVEMgUHJlc2NhbGVyIEVuYWJsZSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFJUQ19QUkVOCQkJMHhGRkMwMDMxNAkvKiBSVEMgUHJlc2NhbGVyIEVuYWJsZSBBbHRlcm5hdGUgTWFjcm8JCSovCisKKworLyogVUFSVDAgQ29udHJvbGxlcgkJKDB4RkZDMDA0MDAgLSAweEZGQzAwNEZGKQkJCQkJCQkJCSovCisjZGVmaW5lIFVBUlQwX1RIUgkJCTB4RkZDMDA0MDAJLyogVHJhbnNtaXQgSG9sZGluZyByZWdpc3RlcgkJCQkqLworI2RlZmluZSBVQVJUMF9SQlIJCQkweEZGQzAwNDAwCS8qIFJlY2VpdmUgQnVmZmVyIHJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBVQVJUMF9ETEwJCQkweEZGQzAwNDAwCS8qIERpdmlzb3IgTGF0Y2ggKExvdy1CeXRlKQkJCQkJKi8KKyNkZWZpbmUgVUFSVDBfSUVSCQkJMHhGRkMwMDQwNAkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFVBUlQwX0RMSAkJCTB4RkZDMDA0MDQJLyogRGl2aXNvciBMYXRjaCAoSGlnaC1CeXRlKQkJCQkqLworI2RlZmluZSBVQVJUMF9JSVIJCQkweEZGQzAwNDA4CS8qIEludGVycnVwdCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgVUFSVDBfTENSCQkJMHhGRkMwMDQwQwkvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFVBUlQwX01DUgkJCTB4RkZDMDA0MTAJLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVUFSVDBfTFNSCQkJMHhGRkMwMDQxNAkvKiBMaW5lIFN0YXR1cyBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFVBUlQwX01TUgkJCTB4RkZDMDA0MTgJLyogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBVQVJUMF9TQ1IJCQkweEZGQzAwNDFDCS8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgVUFSVDBfR0NUTAkJCTB4RkZDMDA0MjQJLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCisKKy8qIFNQSTAgQ29udHJvbGxlcgkJCSgweEZGQzAwNTAwIC0gMHhGRkMwMDVGRikJCQkJCQkJKi8KKyNkZWZpbmUgU1BJMF9SRUdCQVNFCQkJMHhGRkMwMDUwMAorI2RlZmluZSBTUEkwX0NUTAkJCTB4RkZDMDA1MDAJLyogU1BJIENvbnRyb2wgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBTUEkwX0ZMRwkJCTB4RkZDMDA1MDQJLyogU1BJIEZsYWcgcmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBTUEkwX1NUQVQJCQkweEZGQzAwNTA4CS8qIFNQSSBTdGF0dXMgcmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBTUEkwX1REQlIJCQkweEZGQzAwNTBDCS8qIFNQSSBUcmFuc21pdCBEYXRhIEJ1ZmZlciBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBTUEkwX1JEQlIJCQkweEZGQzAwNTEwCS8qIFNQSSBSZWNlaXZlIERhdGEgQnVmZmVyIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFNQSTBfQkFVRAkJCTB4RkZDMDA1MTQJLyogU1BJIEJhdWQgcmF0ZSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgU1BJMF9TSEFET1cJCQkweEZGQzAwNTE4CS8qIFNQSV9SREJSIFNoYWRvdyBSZWdpc3RlcgkJCQkJKi8KKworLyogU1BJMSBDb250cm9sbGVyCQkJKDB4RkZDMDM0MDAgLSAweEZGQzAzNEZGKQkJCQkJCQkqLworI2RlZmluZSBTUEkxX1JFR0JBU0UJCQkweEZGQzAzNDAwCisjZGVmaW5lIFNQSTFfQ1RMCQkJMHhGRkMwMzQwMAkvKiBTUEkgQ29udHJvbCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFNQSTFfRkxHCQkJMHhGRkMwMzQwNAkvKiBTUEkgRmxhZyByZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFNQSTFfU1RBVAkJCTB4RkZDMDM0MDgJLyogU1BJIFN0YXR1cyByZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFNQSTFfVERCUgkJCTB4RkZDMDM0MEMJLyogU1BJIFRyYW5zbWl0IERhdGEgQnVmZmVyIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFNQSTFfUkRCUgkJCTB4RkZDMDM0MTAJLyogU1BJIFJlY2VpdmUgRGF0YSBCdWZmZXIgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgU1BJMV9CQVVECQkJMHhGRkMwMzQxNAkvKiBTUEkgQmF1ZCByYXRlIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBTUEkxX1NIQURPVwkJCTB4RkZDMDM0MTgJLyogU1BJX1JEQlIgU2hhZG93IFJlZ2lzdGVyCQkJCQkqLworCisvKiBUSU1FUjAtNyBSZWdpc3RlcnMJCSgweEZGQzAwNjAwIC0gMHhGRkMwMDZGRikJCQkJCQkJCSovCisjZGVmaW5lIFRJTUVSMF9DT05GSUcJCTB4RkZDMDA2MDAJLyogVGltZXIgMCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgVElNRVIwX0NPVU5URVIJCTB4RkZDMDA2MDQJLyogVGltZXIgMCBDb3VudGVyIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBUSU1FUjBfUEVSSU9ECQkweEZGQzAwNjA4CS8qIFRpbWVyIDAgUGVyaW9kIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBUSU1FUjBfV0lEVEgJCTB4RkZDMDA2MEMJLyogVGltZXIgMCBXaWR0aCBSZWdpc3RlcgkJCQkJKi8KKworI2RlZmluZSBUSU1FUjFfQ09ORklHCQkweEZGQzAwNjEwCS8qIFRpbWVyIDEgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAgCQkJKi8KKyNkZWZpbmUgVElNRVIxX0NPVU5URVIJCTB4RkZDMDA2MTQJLyogVGltZXIgMSBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAJCQkqLworI2RlZmluZSBUSU1FUjFfUEVSSU9ECQkweEZGQzAwNjE4CS8qIFRpbWVyIDEgUGVyaW9kIFJlZ2lzdGVyICAgICAgICAgCQkJKi8KKyNkZWZpbmUgVElNRVIxX1dJRFRICQkweEZGQzAwNjFDCS8qIFRpbWVyIDEgV2lkdGggUmVnaXN0ZXIgICAgICAgICAgCQkJKi8KKworI2RlZmluZSBUSU1FUjJfQ09ORklHCQkweEZGQzAwNjIwCS8qIFRpbWVyIDIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAgCQkJKi8KKyNkZWZpbmUgVElNRVIyX0NPVU5URVIJCTB4RkZDMDA2MjQJLyogVGltZXIgMiBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAJCQkqLworI2RlZmluZSBUSU1FUjJfUEVSSU9ECQkweEZGQzAwNjI4CS8qIFRpbWVyIDIgUGVyaW9kIFJlZ2lzdGVyICAgICAgICAgCQkJKi8KKyNkZWZpbmUgVElNRVIyX1dJRFRICQkweEZGQzAwNjJDCS8qIFRpbWVyIDIgV2lkdGggUmVnaXN0ZXIgICAgICAgICAgCQkJKi8KKworI2RlZmluZSBUSU1FUjNfQ09ORklHCQkweEZGQzAwNjMwCS8qIFRpbWVyIDMgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFRJTUVSM19DT1VOVEVSCQkweEZGQzAwNjM0CS8qIFRpbWVyIDMgQ291bnRlciBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVElNRVIzX1BFUklPRAkJMHhGRkMwMDYzOAkvKiBUaW1lciAzIFBlcmlvZCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVElNRVIzX1dJRFRICQkweEZGQzAwNjNDCS8qIFRpbWVyIDMgV2lkdGggUmVnaXN0ZXIJCQkJCSovCisKKyNkZWZpbmUgVElNRVI0X0NPTkZJRwkJMHhGRkMwMDY0MAkvKiBUaW1lciA0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIAkJCSovCisjZGVmaW5lIFRJTUVSNF9DT1VOVEVSCQkweEZGQzAwNjQ0CS8qIFRpbWVyIDQgQ291bnRlciBSZWdpc3RlciAgICAgICAgCQkJKi8KKyNkZWZpbmUgVElNRVI0X1BFUklPRAkJMHhGRkMwMDY0OAkvKiBUaW1lciA0IFBlcmlvZCBSZWdpc3RlciAgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSNF9XSURUSAkJMHhGRkMwMDY0QwkvKiBUaW1lciA0IFdpZHRoIFJlZ2lzdGVyICAgICAgICAgIAkJCSovCisKKyNkZWZpbmUgVElNRVI1X0NPTkZJRwkJMHhGRkMwMDY1MAkvKiBUaW1lciA1IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIAkJCSovCisjZGVmaW5lIFRJTUVSNV9DT1VOVEVSCQkweEZGQzAwNjU0CS8qIFRpbWVyIDUgQ291bnRlciBSZWdpc3RlciAgICAgICAgCQkJKi8KKyNkZWZpbmUgVElNRVI1X1BFUklPRAkJMHhGRkMwMDY1OAkvKiBUaW1lciA1IFBlcmlvZCBSZWdpc3RlciAgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSNV9XSURUSAkJMHhGRkMwMDY1QwkvKiBUaW1lciA1IFdpZHRoIFJlZ2lzdGVyICAgICAgICAgIAkJCSovCisKKyNkZWZpbmUgVElNRVI2X0NPTkZJRwkJMHhGRkMwMDY2MAkvKiBUaW1lciA2IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIAkJCSovCisjZGVmaW5lIFRJTUVSNl9DT1VOVEVSCQkweEZGQzAwNjY0CS8qIFRpbWVyIDYgQ291bnRlciBSZWdpc3RlciAgICAgICAgCQkJKi8KKyNkZWZpbmUgVElNRVI2X1BFUklPRAkJMHhGRkMwMDY2OAkvKiBUaW1lciA2IFBlcmlvZCBSZWdpc3RlciAgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSNl9XSURUSAkJMHhGRkMwMDY2QwkvKiBUaW1lciA2IFdpZHRoIFJlZ2lzdGVyICAgICAgICAgIAkJCSovCisKKyNkZWZpbmUgVElNRVI3X0NPTkZJRwkJMHhGRkMwMDY3MAkvKiBUaW1lciA3IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIAkJCSovCisjZGVmaW5lIFRJTUVSN19DT1VOVEVSCQkweEZGQzAwNjc0CS8qIFRpbWVyIDcgQ291bnRlciBSZWdpc3RlciAgICAgICAgCQkJKi8KKyNkZWZpbmUgVElNRVI3X1BFUklPRAkJMHhGRkMwMDY3OAkvKiBUaW1lciA3IFBlcmlvZCBSZWdpc3RlciAgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSN19XSURUSAkJMHhGRkMwMDY3QwkvKiBUaW1lciA3IFdpZHRoIFJlZ2lzdGVyICAgICAgIAkJCSovCisKKyNkZWZpbmUgVElNRVJfRU5BQkxFCQkweEZGQzAwNjgwCS8qIFRpbWVyIEVuYWJsZSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVElNRVJfRElTQUJMRQkJMHhGRkMwMDY4NAkvKiBUaW1lciBEaXNhYmxlIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBUSU1FUl9TVEFUVVMJCTB4RkZDMDA2ODgJLyogVGltZXIgU3RhdHVzIFJlZ2lzdGVyCQkJCQkqLworCisvKiBHZW5lcmFsIFB1cnBvc2UgSS9PIFBvcnQgRiAoMHhGRkMwMDcwMCAtIDB4RkZDMDA3RkYpCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgUE9SVEZJTwkJCQkJMHhGRkMwMDcwMAkvKiBQb3J0IEYgSS9PIFBpbiBTdGF0ZSBTcGVjaWZ5IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFBPUlRGSU9fQ0xFQVIJCQkweEZGQzAwNzA0CS8qIFBvcnQgRiBJL08gUGVyaXBoZXJhbCBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFBPUlRGSU9fU0VUCQkJCTB4RkZDMDA3MDgJLyogUG9ydCBGIEkvTyBQZXJpcGhlcmFsIEludGVycnVwdCBTZXQgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JURklPX1RPR0dMRQkJCTB4RkZDMDA3MEMJLyogUG9ydCBGIEkvTyBQaW4gU3RhdGUgVG9nZ2xlIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBQT1JURklPX01BU0tBCQkJMHhGRkMwMDcxMAkvKiBQb3J0IEYgSS9PIE1hc2sgU3RhdGUgU3BlY2lmeSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkqLworI2RlZmluZSBQT1JURklPX01BU0tBX0NMRUFSCQkweEZGQzAwNzE0CS8qIFBvcnQgRiBJL08gTWFzayBEaXNhYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUE9SVEZJT19NQVNLQV9TRVQJCTB4RkZDMDA3MTgJLyogUG9ydCBGIEkvTyBNYXNrIEVuYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRGSU9fTUFTS0FfVE9HR0xFCTB4RkZDMDA3MUMJLyogUG9ydCBGIEkvTyBNYXNrIFRvZ2dsZSBFbmFibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUE9SVEZJT19NQVNLQgkJCTB4RkZDMDA3MjAJLyogUG9ydCBGIEkvTyBNYXNrIFN0YXRlIFNwZWNpZnkgSW50ZXJydXB0IEIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUE9SVEZJT19NQVNLQl9DTEVBUgkJMHhGRkMwMDcyNAkvKiBQb3J0IEYgSS9PIE1hc2sgRGlzYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRGSU9fTUFTS0JfU0VUCQkweEZGQzAwNzI4CS8qIFBvcnQgRiBJL08gTWFzayBFbmFibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JURklPX01BU0tCX1RPR0dMRQkweEZGQzAwNzJDCS8qIFBvcnQgRiBJL08gTWFzayBUb2dnbGUgRW5hYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCSovCisjZGVmaW5lIFBPUlRGSU9fRElSCQkJCTB4RkZDMDA3MzAJLyogUG9ydCBGIEkvTyBEaXJlY3Rpb24gUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBQT1JURklPX1BPTEFSCQkJMHhGRkMwMDczNAkvKiBQb3J0IEYgSS9PIFNvdXJjZSBQb2xhcml0eSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgUE9SVEZJT19FREdFCQkJMHhGRkMwMDczOAkvKiBQb3J0IEYgSS9PIFNvdXJjZSBTZW5zaXRpdml0eSBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBQT1JURklPX0JPVEgJCQkweEZGQzAwNzNDCS8qIFBvcnQgRiBJL08gU2V0IG9uIEJPVEggRWRnZXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgUE9SVEZJT19JTkVOCQkJMHhGRkMwMDc0MAkvKiBQb3J0IEYgSS9PIElucHV0IEVuYWJsZSBSZWdpc3RlciAJCQkJCSovCisKKy8qIFNQT1JUMCBDb250cm9sbGVyCQkoMHhGRkMwMDgwMCAtIDB4RkZDMDA4RkYpCQkJCQkJCQkJCSovCisjZGVmaW5lIFNQT1JUMF9UQ1IxCQkJMHhGRkMwMDgwMAkvKiBTUE9SVDAgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgU1BPUlQwX1RDUjIJCQkweEZGQzAwODA0CS8qIFNQT1JUMCBUcmFuc21pdCBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBTUE9SVDBfVENMS0RJVgkJMHhGRkMwMDgwOAkvKiBTUE9SVDAgVHJhbnNtaXQgQ2xvY2sgRGl2aWRlcgkJCQkJKi8KKyNkZWZpbmUgU1BPUlQwX1RGU0RJVgkJMHhGRkMwMDgwQwkvKiBTUE9SVDAgVHJhbnNtaXQgRnJhbWUgU3luYyBEaXZpZGVyCQkJCSovCisjZGVmaW5lIFNQT1JUMF9UWAkJCTB4RkZDMDA4MTAJLyogU1BPUlQwIFRYIERhdGEgUmVnaXN0ZXIJCQkJCQkJKi8KKyNkZWZpbmUgU1BPUlQwX1JYCQkJMHhGRkMwMDgxOAkvKiBTUE9SVDAgUlggRGF0YSBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBTUE9SVDBfUkNSMQkJCTB4RkZDMDA4MjAJLyogU1BPUlQwIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFNQT1JUMF9SQ1IyCQkJMHhGRkMwMDgyNAkvKiBTUE9SVDAgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgU1BPUlQwX1JDTEtESVYJCTB4RkZDMDA4MjgJLyogU1BPUlQwIFJlY2VpdmUgQ2xvY2sgRGl2aWRlcgkJCQkJCSovCisjZGVmaW5lIFNQT1JUMF9SRlNESVYJCTB4RkZDMDA4MkMJLyogU1BPUlQwIFJlY2VpdmUgRnJhbWUgU3luYyBEaXZpZGVyCQkJCSovCisjZGVmaW5lIFNQT1JUMF9TVEFUCQkJMHhGRkMwMDgzMAkvKiBTUE9SVDAgU3RhdHVzIFJlZ2lzdGVyCQkJCQkJCSovCisjZGVmaW5lIFNQT1JUMF9DSE5MCQkJMHhGRkMwMDgzNAkvKiBTUE9SVDAgQ3VycmVudCBDaGFubmVsIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBTUE9SVDBfTUNNQzEJCTB4RkZDMDA4MzgJLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCSovCisjZGVmaW5lIFNQT1JUMF9NQ01DMgkJMHhGRkMwMDgzQwkvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIJKi8KKyNkZWZpbmUgU1BPUlQwX01UQ1MwCQkweEZGQzAwODQwCS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAwCSovCisjZGVmaW5lIFNQT1JUMF9NVENTMQkJMHhGRkMwMDg0NAkvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMQkqLworI2RlZmluZSBTUE9SVDBfTVRDUzIJCTB4RkZDMDA4NDgJLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDIJKi8KKyNkZWZpbmUgU1BPUlQwX01UQ1MzCQkweEZGQzAwODRDCS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAzCSovCisjZGVmaW5lIFNQT1JUMF9NUkNTMAkJMHhGRkMwMDg1MAkvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAwCSovCisjZGVmaW5lIFNQT1JUMF9NUkNTMQkJMHhGRkMwMDg1NAkvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAxCSovCisjZGVmaW5lIFNQT1JUMF9NUkNTMgkJMHhGRkMwMDg1OAkvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAyCSovCisjZGVmaW5lIFNQT1JUMF9NUkNTMwkJMHhGRkMwMDg1QwkvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAzCSovCisKKy8qIFNQT1JUMSBDb250cm9sbGVyCQkoMHhGRkMwMDkwMCAtIDB4RkZDMDA5RkYpCQkJCQkJCQkJCSovCisjZGVmaW5lIFNQT1JUMV9UQ1IxCQkJMHhGRkMwMDkwMAkvKiBTUE9SVDEgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgU1BPUlQxX1RDUjIJCQkweEZGQzAwOTA0CS8qIFNQT1JUMSBUcmFuc21pdCBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBTUE9SVDFfVENMS0RJVgkJMHhGRkMwMDkwOAkvKiBTUE9SVDEgVHJhbnNtaXQgQ2xvY2sgRGl2aWRlcgkJCQkJKi8KKyNkZWZpbmUgU1BPUlQxX1RGU0RJVgkJMHhGRkMwMDkwQwkvKiBTUE9SVDEgVHJhbnNtaXQgRnJhbWUgU3luYyBEaXZpZGVyCQkJCSovCisjZGVmaW5lIFNQT1JUMV9UWAkJCTB4RkZDMDA5MTAJLyogU1BPUlQxIFRYIERhdGEgUmVnaXN0ZXIJCQkJCQkJKi8KKyNkZWZpbmUgU1BPUlQxX1JYCQkJMHhGRkMwMDkxOAkvKiBTUE9SVDEgUlggRGF0YSBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBTUE9SVDFfUkNSMQkJCTB4RkZDMDA5MjAJLyogU1BPUlQxIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFNQT1JUMV9SQ1IyCQkJMHhGRkMwMDkyNAkvKiBTUE9SVDEgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgU1BPUlQxX1JDTEtESVYJCTB4RkZDMDA5MjgJLyogU1BPUlQxIFJlY2VpdmUgQ2xvY2sgRGl2aWRlcgkJCQkJCSovCisjZGVmaW5lIFNQT1JUMV9SRlNESVYJCTB4RkZDMDA5MkMJLyogU1BPUlQxIFJlY2VpdmUgRnJhbWUgU3luYyBEaXZpZGVyCQkJCSovCisjZGVmaW5lIFNQT1JUMV9TVEFUCQkJMHhGRkMwMDkzMAkvKiBTUE9SVDEgU3RhdHVzIFJlZ2lzdGVyCQkJCQkJCSovCisjZGVmaW5lIFNQT1JUMV9DSE5MCQkJMHhGRkMwMDkzNAkvKiBTUE9SVDEgQ3VycmVudCBDaGFubmVsIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBTUE9SVDFfTUNNQzEJCTB4RkZDMDA5MzgJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCSovCisjZGVmaW5lIFNQT1JUMV9NQ01DMgkJMHhGRkMwMDkzQwkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIJKi8KKyNkZWZpbmUgU1BPUlQxX01UQ1MwCQkweEZGQzAwOTQwCS8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAwCSovCisjZGVmaW5lIFNQT1JUMV9NVENTMQkJMHhGRkMwMDk0NAkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMQkqLworI2RlZmluZSBTUE9SVDFfTVRDUzIJCTB4RkZDMDA5NDgJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDIJKi8KKyNkZWZpbmUgU1BPUlQxX01UQ1MzCQkweEZGQzAwOTRDCS8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAzCSovCisjZGVmaW5lIFNQT1JUMV9NUkNTMAkJMHhGRkMwMDk1MAkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAwCSovCisjZGVmaW5lIFNQT1JUMV9NUkNTMQkJMHhGRkMwMDk1NAkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAxCSovCisjZGVmaW5lIFNQT1JUMV9NUkNTMgkJMHhGRkMwMDk1OAkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAyCSovCisjZGVmaW5lIFNQT1JUMV9NUkNTMwkJMHhGRkMwMDk1QwkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAzCSovCisKKy8qIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgVW5pdCAoMHhGRkMwMEEwMCAtIDB4RkZDMDBBRkYpCQkJCQkJCQkqLworI2RlZmluZSBFQklVX0FNR0NUTAkJCTB4RkZDMDBBMDAJLyogQXN5bmNocm9ub3VzIE1lbW9yeSBHbG9iYWwgQ29udHJvbCBSZWdpc3RlcgkqLworI2RlZmluZSBFQklVX0FNQkNUTDAJCTB4RkZDMDBBMDQJLyogQXN5bmNocm9ub3VzIE1lbW9yeSBCYW5rIENvbnRyb2wgUmVnaXN0ZXIgMAkqLworI2RlZmluZSBFQklVX0FNQkNUTDEJCTB4RkZDMDBBMDgJLyogQXN5bmNocm9ub3VzIE1lbW9yeSBCYW5rIENvbnRyb2wgUmVnaXN0ZXIgMQkqLworI2RlZmluZSBFQklVX1NER0NUTAkJCTB4RkZDMDBBMTAJLyogU0RSQU0gR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRUJJVV9TREJDVEwJCQkweEZGQzAwQTE0CS8qIFNEUkFNIEJhbmsgQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRUJJVV9TRFJSQwkJCTB4RkZDMDBBMTgJLyogU0RSQU0gUmVmcmVzaCBSYXRlIENvbnRyb2wgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBFQklVX1NEU1RBVAkJCTB4RkZDMDBBMUMJLyogU0RSQU0gU3RhdHVzIFJlZ2lzdGVyCQkJCQkJKi8KKworLyogRE1BIFRyYWZmaWMgQ29udHJvbCBSZWdpc3RlcnMJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgRE1BQ19UQ19QRVIJCQkweEZGQzAwQjBDCS8qIFRyYWZmaWMgQ29udHJvbCBQZXJpb2RzIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgRE1BQ19UQ19DTlQJCQkweEZGQzAwQjEwCS8qIFRyYWZmaWMgQ29udHJvbCBDdXJyZW50IENvdW50cyBSZWdpc3RlcgkqLworCisvKiBETUEgQ29udHJvbGxlciAoMHhGRkMwMEMwMCAtIDB4RkZDMDBGRkYpCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgRE1BMF9ORVhUX0RFU0NfUFRSCQkweEZGQzAwQzAwCS8qIERNQSBDaGFubmVsIDAgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTBfU1RBUlRfQUREUgkJCTB4RkZDMDBDMDQJLyogRE1BIENoYW5uZWwgMCBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUEwX0NPTkZJRwkJCQkweEZGQzAwQzA4CS8qIERNQSBDaGFubmVsIDAgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BMF9YX0NPVU5UCQkJMHhGRkMwMEMxMAkvKiBETUEgQ2hhbm5lbCAwIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEwX1hfTU9ESUZZCQkJMHhGRkMwMEMxNAkvKiBETUEgQ2hhbm5lbCAwIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMF9ZX0NPVU5UCQkJMHhGRkMwMEMxOAkvKiBETUEgQ2hhbm5lbCAwIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEwX1lfTU9ESUZZCQkJMHhGRkMwMEMxQwkvKiBETUEgQ2hhbm5lbCAwIFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMF9DVVJSX0RFU0NfUFRSCQkweEZGQzAwQzIwCS8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgRE1BMF9DVVJSX0FERFIJCQkweEZGQzAwQzI0CS8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTBfSVJRX1NUQVRVUwkJCTB4RkZDMDBDMjgJLyogRE1BIENoYW5uZWwgMCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTBfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBDMkMJLyogRE1BIENoYW5uZWwgMCBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUEwX0NVUlJfWF9DT1VOVAkJMHhGRkMwMEMzMAkvKiBETUEgQ2hhbm5lbCAwIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUEwX0NVUlJfWV9DT1VOVAkJMHhGRkMwMEMzOAkvKiBETUEgQ2hhbm5lbCAwIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIERNQTFfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEM0MAkvKiBETUEgQ2hhbm5lbCAxIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBETUExX1NUQVJUX0FERFIJCQkweEZGQzAwQzQ0CS8qIERNQSBDaGFubmVsIDEgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BMV9DT05GSUcJCQkJMHhGRkMwMEM0OAkvKiBETUEgQ2hhbm5lbCAxIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTFfWF9DT1VOVAkJCTB4RkZDMDBDNTAJLyogRE1BIENoYW5uZWwgMSBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMV9YX01PRElGWQkJCTB4RkZDMDBDNTQJLyogRE1BIENoYW5uZWwgMSBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTFfWV9DT1VOVAkJCTB4RkZDMDBDNTgJLyogRE1BIENoYW5uZWwgMSBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMV9ZX01PRElGWQkJCTB4RkZDMDBDNUMJLyogRE1BIENoYW5uZWwgMSBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTFfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMEM2MAkvKiBETUEgQ2hhbm5lbCAxIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIERNQTFfQ1VSUl9BRERSCQkJMHhGRkMwMEM2NAkvKiBETUEgQ2hhbm5lbCAxIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExX0lSUV9TVEFUVVMJCQkweEZGQzAwQzY4CS8qIERNQSBDaGFubmVsIDEgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExX1BFUklQSEVSQUxfTUFQCQkweEZGQzAwQzZDCS8qIERNQSBDaGFubmVsIDEgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMV9DVVJSX1hfQ09VTlQJCTB4RkZDMDBDNzAJLyogRE1BIENoYW5uZWwgMSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMV9DVVJSX1lfQ09VTlQJCTB4RkZDMDBDNzgJLyogRE1BIENoYW5uZWwgMSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKworI2RlZmluZSBETUEyX05FWFRfREVTQ19QVFIJCTB4RkZDMDBDODAJLyogRE1BIENoYW5uZWwgMiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgRE1BMl9TVEFSVF9BRERSCQkJMHhGRkMwMEM4NAkvKiBETUEgQ2hhbm5lbCAyIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTJfQ09ORklHCQkJCTB4RkZDMDBDODgJLyogRE1BIENoYW5uZWwgMiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUEyX1hfQ09VTlQJCQkweEZGQzAwQzkwCS8qIERNQSBDaGFubmVsIDIgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTJfWF9NT0RJRlkJCQkweEZGQzAwQzk0CS8qIERNQSBDaGFubmVsIDIgWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEyX1lfQ09VTlQJCQkweEZGQzAwQzk4CS8qIERNQSBDaGFubmVsIDIgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTJfWV9NT0RJRlkJCQkweEZGQzAwQzlDCS8qIERNQSBDaGFubmVsIDIgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEyX0NVUlJfREVTQ19QVFIJCTB4RkZDMDBDQTAJLyogRE1BIENoYW5uZWwgMiBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLworI2RlZmluZSBETUEyX0NVUlJfQUREUgkJCTB4RkZDMDBDQTQJLyogRE1BIENoYW5uZWwgMiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMl9JUlFfU1RBVFVTCQkJMHhGRkMwMENBOAkvKiBETUEgQ2hhbm5lbCAyIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMl9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMENBQwkvKiBETUEgQ2hhbm5lbCAyIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTJfQ1VSUl9YX0NPVU5UCQkweEZGQzAwQ0IwCS8qIERNQSBDaGFubmVsIDIgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTJfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwQ0I4CS8qIERNQSBDaGFubmVsIDIgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgRE1BM19ORVhUX0RFU0NfUFRSCQkweEZGQzAwQ0MwCS8qIERNQSBDaGFubmVsIDMgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTNfU1RBUlRfQUREUgkJCTB4RkZDMDBDQzQJLyogRE1BIENoYW5uZWwgMyBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUEzX0NPTkZJRwkJCQkweEZGQzAwQ0M4CS8qIERNQSBDaGFubmVsIDMgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BM19YX0NPVU5UCQkJMHhGRkMwMENEMAkvKiBETUEgQ2hhbm5lbCAzIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEzX1hfTU9ESUZZCQkJMHhGRkMwMENENAkvKiBETUEgQ2hhbm5lbCAzIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BM19ZX0NPVU5UCQkJMHhGRkMwMENEOAkvKiBETUEgQ2hhbm5lbCAzIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEzX1lfTU9ESUZZCQkJMHhGRkMwMENEQwkvKiBETUEgQ2hhbm5lbCAzIFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BM19DVVJSX0RFU0NfUFRSCQkweEZGQzAwQ0UwCS8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgRE1BM19DVVJSX0FERFIJCQkweEZGQzAwQ0U0CS8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTNfSVJRX1NUQVRVUwkJCTB4RkZDMDBDRTgJLyogRE1BIENoYW5uZWwgMyBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTNfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBDRUMJLyogRE1BIENoYW5uZWwgMyBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUEzX0NVUlJfWF9DT1VOVAkJMHhGRkMwMENGMAkvKiBETUEgQ2hhbm5lbCAzIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUEzX0NVUlJfWV9DT1VOVAkJMHhGRkMwMENGOAkvKiBETUEgQ2hhbm5lbCAzIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIERNQTRfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEQwMAkvKiBETUEgQ2hhbm5lbCA0IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBETUE0X1NUQVJUX0FERFIJCQkweEZGQzAwRDA0CS8qIERNQSBDaGFubmVsIDQgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BNF9DT05GSUcJCQkJMHhGRkMwMEQwOAkvKiBETUEgQ2hhbm5lbCA0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTRfWF9DT1VOVAkJCTB4RkZDMDBEMTAJLyogRE1BIENoYW5uZWwgNCBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BNF9YX01PRElGWQkJCTB4RkZDMDBEMTQJLyogRE1BIENoYW5uZWwgNCBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTRfWV9DT1VOVAkJCTB4RkZDMDBEMTgJLyogRE1BIENoYW5uZWwgNCBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BNF9ZX01PRElGWQkJCTB4RkZDMDBEMUMJLyogRE1BIENoYW5uZWwgNCBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTRfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMEQyMAkvKiBETUEgQ2hhbm5lbCA0IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIERNQTRfQ1VSUl9BRERSCQkJMHhGRkMwMEQyNAkvKiBETUEgQ2hhbm5lbCA0IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE0X0lSUV9TVEFUVVMJCQkweEZGQzAwRDI4CS8qIERNQSBDaGFubmVsIDQgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE0X1BFUklQSEVSQUxfTUFQCQkweEZGQzAwRDJDCS8qIERNQSBDaGFubmVsIDQgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BNF9DVVJSX1hfQ09VTlQJCTB4RkZDMDBEMzAJLyogRE1BIENoYW5uZWwgNCBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BNF9DVVJSX1lfQ09VTlQJCTB4RkZDMDBEMzgJLyogRE1BIENoYW5uZWwgNCBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKworI2RlZmluZSBETUE1X05FWFRfREVTQ19QVFIJCTB4RkZDMDBENDAJLyogRE1BIENoYW5uZWwgNSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgRE1BNV9TVEFSVF9BRERSCQkJMHhGRkMwMEQ0NAkvKiBETUEgQ2hhbm5lbCA1IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTVfQ09ORklHCQkJCTB4RkZDMDBENDgJLyogRE1BIENoYW5uZWwgNSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUE1X1hfQ09VTlQJCQkweEZGQzAwRDUwCS8qIERNQSBDaGFubmVsIDUgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTVfWF9NT0RJRlkJCQkweEZGQzAwRDU0CS8qIERNQSBDaGFubmVsIDUgWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE1X1lfQ09VTlQJCQkweEZGQzAwRDU4CS8qIERNQSBDaGFubmVsIDUgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTVfWV9NT0RJRlkJCQkweEZGQzAwRDVDCS8qIERNQSBDaGFubmVsIDUgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE1X0NVUlJfREVTQ19QVFIJCTB4RkZDMDBENjAJLyogRE1BIENoYW5uZWwgNSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLworI2RlZmluZSBETUE1X0NVUlJfQUREUgkJCTB4RkZDMDBENjQJLyogRE1BIENoYW5uZWwgNSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BNV9JUlFfU1RBVFVTCQkJMHhGRkMwMEQ2OAkvKiBETUEgQ2hhbm5lbCA1IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BNV9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMEQ2QwkvKiBETUEgQ2hhbm5lbCA1IFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTVfQ1VSUl9YX0NPVU5UCQkweEZGQzAwRDcwCS8qIERNQSBDaGFubmVsIDUgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTVfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRDc4CS8qIERNQSBDaGFubmVsIDUgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgRE1BNl9ORVhUX0RFU0NfUFRSCQkweEZGQzAwRDgwCS8qIERNQSBDaGFubmVsIDYgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTZfU1RBUlRfQUREUgkJCTB4RkZDMDBEODQJLyogRE1BIENoYW5uZWwgNiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUE2X0NPTkZJRwkJCQkweEZGQzAwRDg4CS8qIERNQSBDaGFubmVsIDYgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BNl9YX0NPVU5UCQkJMHhGRkMwMEQ5MAkvKiBETUEgQ2hhbm5lbCA2IFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE2X1hfTU9ESUZZCQkJMHhGRkMwMEQ5NAkvKiBETUEgQ2hhbm5lbCA2IFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BNl9ZX0NPVU5UCQkJMHhGRkMwMEQ5OAkvKiBETUEgQ2hhbm5lbCA2IFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE2X1lfTU9ESUZZCQkJMHhGRkMwMEQ5QwkvKiBETUEgQ2hhbm5lbCA2IFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BNl9DVVJSX0RFU0NfUFRSCQkweEZGQzAwREEwCS8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgRE1BNl9DVVJSX0FERFIJCQkweEZGQzAwREE0CS8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTZfSVJRX1NUQVRVUwkJCTB4RkZDMDBEQTgJLyogRE1BIENoYW5uZWwgNiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTZfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBEQUMJLyogRE1BIENoYW5uZWwgNiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE2X0NVUlJfWF9DT1VOVAkJMHhGRkMwMERCMAkvKiBETUEgQ2hhbm5lbCA2IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE2X0NVUlJfWV9DT1VOVAkJMHhGRkMwMERCOAkvKiBETUEgQ2hhbm5lbCA2IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIERNQTdfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMERDMAkvKiBETUEgQ2hhbm5lbCA3IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBETUE3X1NUQVJUX0FERFIJCQkweEZGQzAwREM0CS8qIERNQSBDaGFubmVsIDcgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BN19DT05GSUcJCQkJMHhGRkMwMERDOAkvKiBETUEgQ2hhbm5lbCA3IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTdfWF9DT1VOVAkJCTB4RkZDMDBERDAJLyogRE1BIENoYW5uZWwgNyBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BN19YX01PRElGWQkJCTB4RkZDMDBERDQJLyogRE1BIENoYW5uZWwgNyBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTdfWV9DT1VOVAkJCTB4RkZDMDBERDgJLyogRE1BIENoYW5uZWwgNyBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BN19ZX01PRElGWQkJCTB4RkZDMDBEREMJLyogRE1BIENoYW5uZWwgNyBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTdfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMERFMAkvKiBETUEgQ2hhbm5lbCA3IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIERNQTdfQ1VSUl9BRERSCQkJMHhGRkMwMERFNAkvKiBETUEgQ2hhbm5lbCA3IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE3X0lSUV9TVEFUVVMJCQkweEZGQzAwREU4CS8qIERNQSBDaGFubmVsIDcgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE3X1BFUklQSEVSQUxfTUFQCQkweEZGQzAwREVDCS8qIERNQSBDaGFubmVsIDcgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BN19DVVJSX1hfQ09VTlQJCTB4RkZDMDBERjAJLyogRE1BIENoYW5uZWwgNyBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BN19DVVJSX1lfQ09VTlQJCTB4RkZDMDBERjgJLyogRE1BIENoYW5uZWwgNyBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKworI2RlZmluZSBETUE4X05FWFRfREVTQ19QVFIJCTB4RkZDMDBFMDAJLyogRE1BIENoYW5uZWwgOCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgRE1BOF9TVEFSVF9BRERSCQkJMHhGRkMwMEUwNAkvKiBETUEgQ2hhbm5lbCA4IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQThfQ09ORklHCQkJCTB4RkZDMDBFMDgJLyogRE1BIENoYW5uZWwgOCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUE4X1hfQ09VTlQJCQkweEZGQzAwRTEwCS8qIERNQSBDaGFubmVsIDggWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQThfWF9NT0RJRlkJCQkweEZGQzAwRTE0CS8qIERNQSBDaGFubmVsIDggWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE4X1lfQ09VTlQJCQkweEZGQzAwRTE4CS8qIERNQSBDaGFubmVsIDggWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQThfWV9NT0RJRlkJCQkweEZGQzAwRTFDCS8qIERNQSBDaGFubmVsIDggWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE4X0NVUlJfREVTQ19QVFIJCTB4RkZDMDBFMjAJLyogRE1BIENoYW5uZWwgOCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLworI2RlZmluZSBETUE4X0NVUlJfQUREUgkJCTB4RkZDMDBFMjQJLyogRE1BIENoYW5uZWwgOCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BOF9JUlFfU1RBVFVTCQkJMHhGRkMwMEUyOAkvKiBETUEgQ2hhbm5lbCA4IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BOF9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMEUyQwkvKiBETUEgQ2hhbm5lbCA4IFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQThfQ1VSUl9YX0NPVU5UCQkweEZGQzAwRTMwCS8qIERNQSBDaGFubmVsIDggQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQThfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRTM4CS8qIERNQSBDaGFubmVsIDggQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgRE1BOV9ORVhUX0RFU0NfUFRSCQkweEZGQzAwRTQwCS8qIERNQSBDaGFubmVsIDkgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTlfU1RBUlRfQUREUgkJCTB4RkZDMDBFNDQJLyogRE1BIENoYW5uZWwgOSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUE5X0NPTkZJRwkJCQkweEZGQzAwRTQ4CS8qIERNQSBDaGFubmVsIDkgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BOV9YX0NPVU5UCQkJMHhGRkMwMEU1MAkvKiBETUEgQ2hhbm5lbCA5IFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE5X1hfTU9ESUZZCQkJMHhGRkMwMEU1NAkvKiBETUEgQ2hhbm5lbCA5IFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BOV9ZX0NPVU5UCQkJMHhGRkMwMEU1OAkvKiBETUEgQ2hhbm5lbCA5IFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE5X1lfTU9ESUZZCQkJMHhGRkMwMEU1QwkvKiBETUEgQ2hhbm5lbCA5IFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BOV9DVVJSX0RFU0NfUFRSCQkweEZGQzAwRTYwCS8qIERNQSBDaGFubmVsIDkgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgRE1BOV9DVVJSX0FERFIJCQkweEZGQzAwRTY0CS8qIERNQSBDaGFubmVsIDkgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTlfSVJRX1NUQVRVUwkJCTB4RkZDMDBFNjgJLyogRE1BIENoYW5uZWwgOSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTlfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBFNkMJLyogRE1BIENoYW5uZWwgOSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE5X0NVUlJfWF9DT1VOVAkJMHhGRkMwMEU3MAkvKiBETUEgQ2hhbm5lbCA5IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE5X0NVUlJfWV9DT1VOVAkJMHhGRkMwMEU3OAkvKiBETUEgQ2hhbm5lbCA5IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIERNQTEwX05FWFRfREVTQ19QVFIJCTB4RkZDMDBFODAJLyogRE1BIENoYW5uZWwgMTAgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTEwX1NUQVJUX0FERFIJCTB4RkZDMDBFODQJLyogRE1BIENoYW5uZWwgMTAgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExMF9DT05GSUcJCQkweEZGQzAwRTg4CS8qIERNQSBDaGFubmVsIDEwIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMTBfWF9DT1VOVAkJCTB4RkZDMDBFOTAJLyogRE1BIENoYW5uZWwgMTAgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTEwX1hfTU9ESUZZCQkJMHhGRkMwMEU5NAkvKiBETUEgQ2hhbm5lbCAxMCBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTEwX1lfQ09VTlQJCQkweEZGQzAwRTk4CS8qIERNQSBDaGFubmVsIDEwIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUExMF9ZX01PRElGWQkJCTB4RkZDMDBFOUMJLyogRE1BIENoYW5uZWwgMTAgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUExMF9DVVJSX0RFU0NfUFRSCQkweEZGQzAwRUEwCS8qIERNQSBDaGFubmVsIDEwIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIERNQTEwX0NVUlJfQUREUgkJCTB4RkZDMDBFQTQJLyogRE1BIENoYW5uZWwgMTAgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTEwX0lSUV9TVEFUVVMJCTB4RkZDMDBFQTgJLyogRE1BIENoYW5uZWwgMTAgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExMF9QRVJJUEhFUkFMX01BUAkweEZGQzAwRUFDCS8qIERNQSBDaGFubmVsIDEwIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTEwX0NVUlJfWF9DT1VOVAkJMHhGRkMwMEVCMAkvKiBETUEgQ2hhbm5lbCAxMCBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMTBfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRUI4CS8qIERNQSBDaGFubmVsIDEwIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIERNQTExX05FWFRfREVTQ19QVFIJCTB4RkZDMDBFQzAJLyogRE1BIENoYW5uZWwgMTEgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTExX1NUQVJUX0FERFIJCTB4RkZDMDBFQzQJLyogRE1BIENoYW5uZWwgMTEgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExMV9DT05GSUcJCQkweEZGQzAwRUM4CS8qIERNQSBDaGFubmVsIDExIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMTFfWF9DT1VOVAkJCTB4RkZDMDBFRDAJLyogRE1BIENoYW5uZWwgMTEgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTExX1hfTU9ESUZZCQkJMHhGRkMwMEVENAkvKiBETUEgQ2hhbm5lbCAxMSBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTExX1lfQ09VTlQJCQkweEZGQzAwRUQ4CS8qIERNQSBDaGFubmVsIDExIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUExMV9ZX01PRElGWQkJCTB4RkZDMDBFREMJLyogRE1BIENoYW5uZWwgMTEgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUExMV9DVVJSX0RFU0NfUFRSCQkweEZGQzAwRUUwCS8qIERNQSBDaGFubmVsIDExIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIERNQTExX0NVUlJfQUREUgkJCTB4RkZDMDBFRTQJLyogRE1BIENoYW5uZWwgMTEgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTExX0lSUV9TVEFUVVMJCTB4RkZDMDBFRTgJLyogRE1BIENoYW5uZWwgMTEgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExMV9QRVJJUEhFUkFMX01BUAkweEZGQzAwRUVDCS8qIERNQSBDaGFubmVsIDExIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTExX0NVUlJfWF9DT1VOVAkJMHhGRkMwMEVGMAkvKiBETUEgQ2hhbm5lbCAxMSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMTFfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRUY4CS8qIERNQSBDaGFubmVsIDExIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIE1ETUFfRDBfTkVYVF9ERVNDX1BUUgkweEZGQzAwRjAwCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgTURNQV9EMF9TVEFSVF9BRERSCQkweEZGQzAwRjA0CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIE1ETUFfRDBfQ09ORklHCQkJMHhGRkMwMEYwOAkvKiBNZW1ETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBNRE1BX0QwX1hfQ09VTlQJCQkweEZGQzAwRjEwCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgTURNQV9EMF9YX01PRElGWQkJMHhGRkMwMEYxNAkvKiBNZW1ETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfRDBfWV9DT1VOVAkJCTB4RkZDMDBGMTgJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBNRE1BX0QwX1lfTU9ESUZZCQkweEZGQzAwRjFDCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgTURNQV9EMF9DVVJSX0RFU0NfUFRSCTB4RkZDMDBGMjAJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIE1ETUFfRDBfQ1VSUl9BRERSCQkweEZGQzAwRjI0CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgTURNQV9EMF9JUlFfU1RBVFVTCQkweEZGQzAwRjI4CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgTURNQV9EMF9QRVJJUEhFUkFMX01BUAkweEZGQzAwRjJDCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBNRE1BX0QwX0NVUlJfWF9DT1VOVAkweEZGQzAwRjMwCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgTURNQV9EMF9DVVJSX1lfQ09VTlQJMHhGRkMwMEYzOAkvKiBNZW1ETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgTURNQV9TMF9ORVhUX0RFU0NfUFRSCTB4RkZDMDBGNDAJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJCSovCisjZGVmaW5lIE1ETUFfUzBfU1RBUlRfQUREUgkJMHhGRkMwMEY0NAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzBfQ09ORklHCQkJMHhGRkMwMEY0OAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzBfWF9DT1VOVAkJCTB4RkZDMDBGNTAJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBYIENvdW50IFJlZ2lzdGVyCQkJCQkJCSovCisjZGVmaW5lIE1ETUFfUzBfWF9NT0RJRlkJCTB4RkZDMDBGNTQJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBNRE1BX1MwX1lfQ09VTlQJCQkweEZGQzAwRjU4CS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgWSBDb3VudCBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBNRE1BX1MwX1lfTU9ESUZZCQkweEZGQzAwRjVDCS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkJKi8KKyNkZWZpbmUgTURNQV9TMF9DVVJSX0RFU0NfUFRSCTB4RkZDMDBGNjAJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgTURNQV9TMF9DVVJSX0FERFIJCTB4RkZDMDBGNjQJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzBfSVJRX1NUQVRVUwkJMHhGRkMwMEY2OAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzBfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMEY2QwkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBNRE1BX1MwX0NVUlJfWF9DT1VOVAkweEZGQzAwRjcwCS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBNRE1BX1MwX0NVUlJfWV9DT1VOVAkweEZGQzAwRjc4CS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCQkqLworCisjZGVmaW5lIE1ETUFfRDFfTkVYVF9ERVNDX1BUUgkweEZGQzAwRjgwCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgTURNQV9EMV9TVEFSVF9BRERSCQkweEZGQzAwRjg0CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIE1ETUFfRDFfQ09ORklHCQkJMHhGRkMwMEY4OAkvKiBNZW1ETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBNRE1BX0QxX1hfQ09VTlQJCQkweEZGQzAwRjkwCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgTURNQV9EMV9YX01PRElGWQkJMHhGRkMwMEY5NAkvKiBNZW1ETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfRDFfWV9DT1VOVAkJCTB4RkZDMDBGOTgJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBNRE1BX0QxX1lfTU9ESUZZCQkweEZGQzAwRjlDCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgTURNQV9EMV9DVVJSX0RFU0NfUFRSCTB4RkZDMDBGQTAJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIE1ETUFfRDFfQ1VSUl9BRERSCQkweEZGQzAwRkE0CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgTURNQV9EMV9JUlFfU1RBVFVTCQkweEZGQzAwRkE4CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgTURNQV9EMV9QRVJJUEhFUkFMX01BUAkweEZGQzAwRkFDCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBNRE1BX0QxX0NVUlJfWF9DT1VOVAkweEZGQzAwRkIwCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgTURNQV9EMV9DVVJSX1lfQ09VTlQJMHhGRkMwMEZCOAkvKiBNZW1ETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgTURNQV9TMV9ORVhUX0RFU0NfUFRSCTB4RkZDMDBGQzAJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJCSovCisjZGVmaW5lIE1ETUFfUzFfU1RBUlRfQUREUgkJMHhGRkMwMEZDNAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzFfQ09ORklHCQkJMHhGRkMwMEZDOAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzFfWF9DT1VOVAkJCTB4RkZDMDBGRDAJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBYIENvdW50IFJlZ2lzdGVyCQkJCQkJCSovCisjZGVmaW5lIE1ETUFfUzFfWF9NT0RJRlkJCTB4RkZDMDBGRDQJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBNRE1BX1MxX1lfQ09VTlQJCQkweEZGQzAwRkQ4CS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgWSBDb3VudCBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBNRE1BX1MxX1lfTU9ESUZZCQkweEZGQzAwRkRDCS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkJKi8KKyNkZWZpbmUgTURNQV9TMV9DVVJSX0RFU0NfUFRSCTB4RkZDMDBGRTAJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgTURNQV9TMV9DVVJSX0FERFIJCTB4RkZDMDBGRTQJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzFfSVJRX1NUQVRVUwkJMHhGRkMwMEZFOAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzFfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMEZFQwkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBNRE1BX1MxX0NVUlJfWF9DT1VOVAkweEZGQzAwRkYwCS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBNRE1BX1MxX0NVUlJfWV9DT1VOVAkweEZGQzAwRkY4CS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCQkqLworCisKKy8qIFBhcmFsbGVsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICgweEZGQzAxMDAwIC0gMHhGRkMwMTBGRikJCQkJKi8KKyNkZWZpbmUgUFBJX0NPTlRST0wJCQkweEZGQzAxMDAwCS8qIFBQSSBDb250cm9sIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUFBJX1NUQVRVUwkJCTB4RkZDMDEwMDQJLyogUFBJIFN0YXR1cyBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBQSV9DT1VOVAkJCTB4RkZDMDEwMDgJLyogUFBJIFRyYW5zZmVyIENvdW50IFJlZ2lzdGVyCSovCisjZGVmaW5lIFBQSV9ERUxBWQkJCTB4RkZDMDEwMEMJLyogUFBJIERlbGF5IENvdW50IFJlZ2lzdGVyCQkqLworI2RlZmluZSBQUElfRlJBTUUJCQkweEZGQzAxMDEwCS8qIFBQSSBGcmFtZSBMZW5ndGggUmVnaXN0ZXIJKi8KKworCisvKiBUd28tV2lyZSBJbnRlcmZhY2UJCSgweEZGQzAxNDAwIC0gMHhGRkMwMTRGRikJCQkJCQkJCSovCisjZGVmaW5lIFRXSTBfUkVHQkFTRQkJCTB4RkZDMDE0MDAKKyNkZWZpbmUgVFdJMF9DTEtESVYJCQkweEZGQzAxNDAwCS8qIFNlcmlhbCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgVFdJMF9DT05UUk9MCQkJMHhGRkMwMTQwNAkvKiBUV0kgQ29udHJvbCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFRXSTBfU0xBVkVfQ1RMCQkweEZGQzAxNDA4CS8qIFNsYXZlIE1vZGUgQ29udHJvbCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBUV0kwX1NMQVZFX1NUQVQJCTB4RkZDMDE0MEMJLyogU2xhdmUgTW9kZSBTdGF0dXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgVFdJMF9TTEFWRV9BRERSCQkweEZGQzAxNDEwCS8qIFNsYXZlIE1vZGUgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBUV0kwX01BU1RFUl9DVEwJCTB4RkZDMDE0MTQJLyogTWFzdGVyIE1vZGUgQ29udHJvbCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBUV0kwX01BU1RFUl9TVEFUCQkweEZGQzAxNDE4CS8qIE1hc3RlciBNb2RlIFN0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBUV0kwX01BU1RFUl9BRERSCQkweEZGQzAxNDFDCS8qIE1hc3RlciBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgVFdJMF9JTlRfU1RBVAkJMHhGRkMwMTQyMAkvKiBUV0kgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFRXSTBfSU5UX01BU0sJCTB4RkZDMDE0MjQJLyogVFdJIE1hc3RlciBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgVFdJMF9GSUZPX0NUTAkJMHhGRkMwMTQyOAkvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFRXSTBfRklGT19TVEFUCQkweEZGQzAxNDJDCS8qIEZJRk8gU3RhdHVzIFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgVFdJMF9YTVRfREFUQTgJCTB4RkZDMDE0ODAJLyogRklGTyBUcmFuc21pdCBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyCSovCisjZGVmaW5lIFRXSTBfWE1UX0RBVEExNgkJMHhGRkMwMTQ4NAkvKiBGSUZPIFRyYW5zbWl0IERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgVFdJMF9SQ1ZfREFUQTgJCTB4RkZDMDE0ODgJLyogRklGTyBSZWNlaXZlIERhdGEgU2luZ2xlIEJ5dGUgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgVFdJMF9SQ1ZfREFUQTE2CQkweEZGQzAxNDhDCS8qIEZJRk8gUmVjZWl2ZSBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyCSovCisKKworLyogR2VuZXJhbCBQdXJwb3NlIEkvTyBQb3J0IEcgKDB4RkZDMDE1MDAgLSAweEZGQzAxNUZGKQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFBPUlRHSU8JCQkJCTB4RkZDMDE1MDAJLyogUG9ydCBHIEkvTyBQaW4gU3RhdGUgU3BlY2lmeSBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBQT1JUR0lPX0NMRUFSCQkJMHhGRkMwMTUwNAkvKiBQb3J0IEcgSS9PIFBlcmlwaGVyYWwgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBQT1JUR0lPX1NFVAkJCQkweEZGQzAxNTA4CS8qIFBvcnQgRyBJL08gUGVyaXBoZXJhbCBJbnRlcnJ1cHQgU2V0IFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUE9SVEdJT19UT0dHTEUJCQkweEZGQzAxNTBDCS8qIFBvcnQgRyBJL08gUGluIFN0YXRlIFRvZ2dsZSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgUE9SVEdJT19NQVNLQQkJCTB4RkZDMDE1MTAJLyogUG9ydCBHIEkvTyBNYXNrIFN0YXRlIFNwZWNpZnkgSW50ZXJydXB0IEEgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUE9SVEdJT19NQVNLQV9DTEVBUgkJMHhGRkMwMTUxNAkvKiBQb3J0IEcgSS9PIE1hc2sgRGlzYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRHSU9fTUFTS0FfU0VUCQkweEZGQzAxNTE4CS8qIFBvcnQgRyBJL08gTWFzayBFbmFibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JUR0lPX01BU0tBX1RPR0dMRQkweEZGQzAxNTFDCS8qIFBvcnQgRyBJL08gTWFzayBUb2dnbGUgRW5hYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCSovCisjZGVmaW5lIFBPUlRHSU9fTUFTS0IJCQkweEZGQzAxNTIwCS8qIFBvcnQgRyBJL08gTWFzayBTdGF0ZSBTcGVjaWZ5IEludGVycnVwdCBCIFJlZ2lzdGVyCSovCisjZGVmaW5lIFBPUlRHSU9fTUFTS0JfQ0xFQVIJCTB4RkZDMDE1MjQJLyogUG9ydCBHIEkvTyBNYXNrIERpc2FibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JUR0lPX01BU0tCX1NFVAkJMHhGRkMwMTUyOAkvKiBQb3J0IEcgSS9PIE1hc2sgRW5hYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUE9SVEdJT19NQVNLQl9UT0dHTEUJMHhGRkMwMTUyQwkvKiBQb3J0IEcgSS9PIE1hc2sgVG9nZ2xlIEVuYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkqLworI2RlZmluZSBQT1JUR0lPX0RJUgkJCQkweEZGQzAxNTMwCS8qIFBvcnQgRyBJL08gRGlyZWN0aW9uIFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgUE9SVEdJT19QT0xBUgkJCTB4RkZDMDE1MzQJLyogUG9ydCBHIEkvTyBTb3VyY2UgUG9sYXJpdHkgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFBPUlRHSU9fRURHRQkJCTB4RkZDMDE1MzgJLyogUG9ydCBHIEkvTyBTb3VyY2UgU2Vuc2l0aXZpdHkgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgUE9SVEdJT19CT1RICQkJMHhGRkMwMTUzQwkvKiBQb3J0IEcgSS9PIFNldCBvbiBCT1RIIEVkZ2VzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFBPUlRHSU9fSU5FTgkJCTB4RkZDMDE1NDAJLyogUG9ydCBHIEkvTyBJbnB1dCBFbmFibGUgUmVnaXN0ZXIJCQkJCQkqLworCisKKy8qIEdlbmVyYWwgUHVycG9zZSBJL08gUG9ydCBIICgweEZGQzAxNzAwIC0gMHhGRkMwMTdGRikJCQkJCQkJCQkJCQkqLworI2RlZmluZSBQT1JUSElPCQkJCQkweEZGQzAxNzAwCS8qIFBvcnQgSCBJL08gUGluIFN0YXRlIFNwZWNpZnkgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgUE9SVEhJT19DTEVBUgkJCTB4RkZDMDE3MDQJLyogUG9ydCBIIEkvTyBQZXJpcGhlcmFsIEludGVycnVwdCBDbGVhciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgUE9SVEhJT19TRVQJCQkJMHhGRkMwMTcwOAkvKiBQb3J0IEggSS9PIFBlcmlwaGVyYWwgSW50ZXJydXB0IFNldCBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRISU9fVE9HR0xFCQkJMHhGRkMwMTcwQwkvKiBQb3J0IEggSS9PIFBpbiBTdGF0ZSBUb2dnbGUgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFBPUlRISU9fTUFTS0EJCQkweEZGQzAxNzEwCS8qIFBvcnQgSCBJL08gTWFzayBTdGF0ZSBTcGVjaWZ5IEludGVycnVwdCBBIFJlZ2lzdGVyCSovCisjZGVmaW5lIFBPUlRISU9fTUFTS0FfQ0xFQVIJCTB4RkZDMDE3MTQJLyogUG9ydCBIIEkvTyBNYXNrIERpc2FibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JUSElPX01BU0tBX1NFVAkJMHhGRkMwMTcxOAkvKiBQb3J0IEggSS9PIE1hc2sgRW5hYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUE9SVEhJT19NQVNLQV9UT0dHTEUJMHhGRkMwMTcxQwkvKiBQb3J0IEggSS9PIE1hc2sgVG9nZ2xlIEVuYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkqLworI2RlZmluZSBQT1JUSElPX01BU0tCCQkJMHhGRkMwMTcyMAkvKiBQb3J0IEggSS9PIE1hc2sgU3RhdGUgU3BlY2lmeSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkqLworI2RlZmluZSBQT1JUSElPX01BU0tCX0NMRUFSCQkweEZGQzAxNzI0CS8qIFBvcnQgSCBJL08gTWFzayBEaXNhYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUE9SVEhJT19NQVNLQl9TRVQJCTB4RkZDMDE3MjgJLyogUG9ydCBIIEkvTyBNYXNrIEVuYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRISU9fTUFTS0JfVE9HR0xFCTB4RkZDMDE3MkMJLyogUG9ydCBIIEkvTyBNYXNrIFRvZ2dsZSBFbmFibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUE9SVEhJT19ESVIJCQkJMHhGRkMwMTczMAkvKiBQb3J0IEggSS9PIERpcmVjdGlvbiBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFBPUlRISU9fUE9MQVIJCQkweEZGQzAxNzM0CS8qIFBvcnQgSCBJL08gU291cmNlIFBvbGFyaXR5IFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBQT1JUSElPX0VER0UJCQkweEZGQzAxNzM4CS8qIFBvcnQgSCBJL08gU291cmNlIFNlbnNpdGl2aXR5IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFBPUlRISU9fQk9USAkJCTB4RkZDMDE3M0MJLyogUG9ydCBIIEkvTyBTZXQgb24gQk9USCBFZGdlcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBQT1JUSElPX0lORU4JCQkweEZGQzAxNzQwCS8qIFBvcnQgSCBJL08gSW5wdXQgRW5hYmxlIFJlZ2lzdGVyCQkJCQkJKi8KKworCisvKiBVQVJUMSBDb250cm9sbGVyCQkoMHhGRkMwMjAwMCAtIDB4RkZDMDIwRkYpCQkJCQkJCQkqLworI2RlZmluZSBVQVJUMV9USFIJCQkweEZGQzAyMDAwCS8qIFRyYW5zbWl0IEhvbGRpbmcgcmVnaXN0ZXIJCQkqLworI2RlZmluZSBVQVJUMV9SQlIJCQkweEZGQzAyMDAwCS8qIFJlY2VpdmUgQnVmZmVyIHJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFVBUlQxX0RMTAkJCTB4RkZDMDIwMDAJLyogRGl2aXNvciBMYXRjaCAoTG93LUJ5dGUpCQkJCSovCisjZGVmaW5lIFVBUlQxX0lFUgkJCTB4RkZDMDIwMDQJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFVBUlQxX0RMSAkJCTB4RkZDMDIwMDQJLyogRGl2aXNvciBMYXRjaCAoSGlnaC1CeXRlKQkJCSovCisjZGVmaW5lIFVBUlQxX0lJUgkJCTB4RkZDMDIwMDgJLyogSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyCSovCisjZGVmaW5lIFVBUlQxX0xDUgkJCTB4RkZDMDIwMEMJLyogTGluZSBDb250cm9sIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFVBUlQxX01DUgkJCTB4RkZDMDIwMTAJLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBVQVJUMV9MU1IJCQkweEZGQzAyMDE0CS8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBVQVJUMV9NU1IJCQkweEZGQzAyMDE4CS8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBVQVJUMV9TQ1IJCQkweEZGQzAyMDFDCS8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBVQVJUMV9HQ1RMCQkJMHhGRkMwMjAyNAkvKiBHbG9iYWwgQ29udHJvbCBSZWdpc3RlcgkJCQkqLworCisKKy8qIFBpbiBDb250cm9sIFJlZ2lzdGVycwkoMHhGRkMwMzIwMCAtIDB4RkZDMDMyRkYpCQkJCQkJCQkJCQkqLworI2RlZmluZSBQT1JURl9GRVIJCQkweEZGQzAzMjAwCS8qIFBvcnQgRiBGdW5jdGlvbiBFbmFibGUgUmVnaXN0ZXIgKEFsdGVybmF0ZS9GbGFnKikJKi8KKyNkZWZpbmUgUE9SVEdfRkVSCQkJMHhGRkMwMzIwNAkvKiBQb3J0IEcgRnVuY3Rpb24gRW5hYmxlIFJlZ2lzdGVyIChBbHRlcm5hdGUvRmxhZyopCSovCisjZGVmaW5lIFBPUlRIX0ZFUgkJCTB4RkZDMDMyMDgJLyogUG9ydCBIIEZ1bmN0aW9uIEVuYWJsZSBSZWdpc3RlciAoQWx0ZXJuYXRlL0ZsYWcqKQkqLworI2RlZmluZSBCRklOX1BPUlRfTVVYCQkJMHhGRkMwMzIwQwkvKiBQb3J0IE11bHRpcGxleGVyIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCisKKworLyogSGFuZHNoYWtlIE1ETUEgUmVnaXN0ZXJzCSgweEZGQzAzMzAwIC0gMHhGRkMwMzNGRikJCQkJCQkJCQkJKi8KKyNkZWZpbmUgSE1ETUEwX0NPTlRST0wJCTB4RkZDMDMzMDAJLyogSGFuZHNoYWtlIE1ETUEwIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIEhNRE1BMF9FQ0lOSVQJCTB4RkZDMDMzMDQJLyogSE1ETUEwIEluaXRpYWwgRWRnZSBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBITURNQTBfQkNJTklUCQkweEZGQzAzMzA4CS8qIEhNRE1BMCBJbml0aWFsIEJsb2NrIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIEhNRE1BMF9FQ1VSR0VOVAkJMHhGRkMwMzMwQwkvKiBITURNQTAgVXJnZW50IEVkZ2UgQ291bnQgVGhyZXNob2xkIFJlZ2lzdGVyCQkqLworI2RlZmluZSBITURNQTBfRUNPVkVSRkxPVwkweEZGQzAzMzEwCS8qIEhNRE1BMCBFZGdlIENvdW50IE92ZXJmbG93IEludGVycnVwdCBSZWdpc3RlcgkqLworI2RlZmluZSBITURNQTBfRUNPVU5UCQkweEZGQzAzMzE0CS8qIEhNRE1BMCBDdXJyZW50IEVkZ2UgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgSE1ETUEwX0JDT1VOVAkJMHhGRkMwMzMxOAkvKiBITURNQTAgQ3VycmVudCBCbG9jayBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIEhNRE1BMV9DT05UUk9MCQkweEZGQzAzMzQwCS8qIEhhbmRzaGFrZSBNRE1BMSBDb250cm9sIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBITURNQTFfRUNJTklUCQkweEZGQzAzMzQ0CS8qIEhNRE1BMSBJbml0aWFsIEVkZ2UgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgSE1ETUExX0JDSU5JVAkJMHhGRkMwMzM0OAkvKiBITURNQTEgSW5pdGlhbCBCbG9jayBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBITURNQTFfRUNVUkdFTlQJCTB4RkZDMDMzNEMJLyogSE1ETUExIFVyZ2VudCBFZGdlIENvdW50IFRocmVzaG9sZCBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgSE1ETUExX0VDT1ZFUkZMT1cJMHhGRkMwMzM1MAkvKiBITURNQTEgRWRnZSBDb3VudCBPdmVyZmxvdyBJbnRlcnJ1cHQgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgSE1ETUExX0VDT1VOVAkJMHhGRkMwMzM1NAkvKiBITURNQTEgQ3VycmVudCBFZGdlIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIEhNRE1BMV9CQ09VTlQJCTB4RkZDMDMzNTgJLyogSE1ETUExIEN1cnJlbnQgQmxvY2sgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKworCisvKiBHUElPIFBJTiBtdXggKDB4RkZDMDMyMTAgLSBPeEZGQzAzMjg4KSAqLworI2RlZmluZSBQT1JURl9NVVggICAgICAgICAgICAgICAweEZGQzAzMjEwICAgICAgLyogUG9ydCBGIG11eCBjb250cm9sICovCisjZGVmaW5lIFBPUlRHX01VWCAgICAgICAgICAgICAgIDB4RkZDMDMyMTQgICAgICAvKiBQb3J0IEcgbXV4IGNvbnRyb2wgKi8KKyNkZWZpbmUgUE9SVEhfTVVYICAgICAgICAgICAgICAgMHhGRkMwMzIxOCAgICAgIC8qIFBvcnQgSCBtdXggY29udHJvbCAqLworI2RlZmluZSBQT1JURl9EUklWRSAgICAgICAgICAgICAweEZGQzAzMjIwICAgICAgLyogUG9ydCBGIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgKi8KKyNkZWZpbmUgUE9SVEdfRFJJVkUgICAgICAgICAgICAgMHhGRkMwMzIyNCAgICAgIC8qIFBvcnQgRyBkcml2ZSBzdHJlbmd0aCBjb250cm9sICovCisjZGVmaW5lIFBPUlRIX0RSSVZFICAgICAgICAgICAgIDB4RkZDMDMyMjggICAgICAvKiBQb3J0IEggZHJpdmUgc3RyZW5ndGggY29udHJvbCAqLworI2RlZmluZSBQT1JURl9TTEVXICAgICAgICAgICAgICAweEZGQzAzMjMwICAgICAgLyogUG9ydCBGIHNsZXcgY29udHJvbCAqLworI2RlZmluZSBQT1JUR19TTEVXICAgICAgICAgICAgICAweEZGQzAzMjM0ICAgICAgLyogUG9ydCBHIHNsZXcgY29udHJvbCAqLworI2RlZmluZSBQT1JUSF9TTEVXICAgICAgICAgICAgICAweEZGQzAzMjM4ICAgICAgLyogUG9ydCBIIHNsZXcgY29udHJvbCAqLworI2RlZmluZSBQT1JURl9IWVNURVJJU0lTICAgICAgICAweEZGQzAzMjQwICAgICAgLyogUG9ydCBGIFNjaG1pdHQgdHJpZ2dlciBjb250cm9sICovCisjZGVmaW5lIFBPUlRHX0hZU1RFUklTSVMgICAgICAgIDB4RkZDMDMyNDQgICAgICAvKiBQb3J0IEcgU2NobWl0dCB0cmlnZ2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgUE9SVEhfSFlTVEVSSVNJUyAgICAgICAgMHhGRkMwMzI0OCAgICAgIC8qIFBvcnQgSCBTY2htaXR0IHRyaWdnZXIgY29udHJvbCAqLworI2RlZmluZSBNSVNDUE9SVF9EUklWRSAgICAgICAgICAweEZGQzAzMjgwICAgICAgLyogTWlzYyBQb3J0IGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgKi8KKyNkZWZpbmUgTUlTQ1BPUlRfU0xFVyAgICAgICAgICAgMHhGRkMwMzI4NCAgICAgIC8qIE1pc2MgUG9ydCBzbGV3IGNvbnRyb2wgKi8KKyNkZWZpbmUgTUlTQ1BPUlRfSFlTVEVSSVNJUyAgICAgMHhGRkMwMzI4OCAgICAgIC8qIE1pc2MgUG9ydCBTY2htaXR0IHRyaWdnZXIgY29udHJvbCAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogU3lzdGVtIE1NUiBSZWdpc3RlciBCaXRzIEFuZCBNYWNyb3MKKyoqCisqKiBEaXNjbGFpbWVyOglBbGwgbWFjcm9zIGFyZSBpbnRlbmRlZCB0byBtYWtlIEMgYW5kIEFzc2VtYmx5IGNvZGUgbW9yZSByZWFkYWJsZS4KKyoqCQkJCVVzZSB0aGVzZSBtYWNyb3MgY2FyZWZ1bGx5LCBhcyBhbnkgdGhhdCBkbyBsZWZ0IHNoaWZ0cyBmb3IgZmllbGQKKyoqCQkJCWRlcG9zaXRpbmcgd2lsbCByZXN1bHQgaW4gdGhlIGxvd2VyIG9yZGVyIGJpdHMgYmVpbmcgZGVzdHJveWVkLiAgQW55CisqKgkJCQltYWNybyB0aGF0IHNoaWZ0cyBsZWZ0IHRvIHByb3Blcmx5IHBvc2l0aW9uIHRoZSBiaXQtZmllbGQgc2hvdWxkIGJlCisqKgkJCQl1c2VkIGFzIHBhcnQgb2YgYW4gT1IgdG8gaW5pdGlhbGl6ZSBhIHJlZ2lzdGVyIGFuZCBOT1QgYXMgYSBkeW5hbWljCisqKgkJCQltb2RpZmllciBVTkxFU1MgdGhlIGxvd2VyIG9yZGVyIGJpdHMgYXJlIHNhdmVkIGFuZCBPUmVkIGJhY2sgaW4gd2hlbgorKioJCQkJdGhlIG1hY3JvIGlzIHVzZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDSElQSUQgTWFza3MgKi8KKyNkZWZpbmUgQ0hJUElEX1ZFUlNJT04gICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIENISVBJRF9GQU1JTFkgICAgICAgICAgMHgwRkZGRjAwMAorI2RlZmluZSBDSElQSURfTUFOVUZBQ1RVUkUgICAgIDB4MDAwMDBGRkUKKworLyogU1dSU1QgTWFza3MJCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBTWVNURU1fUkVTRVQJCTB4MDAwNwkvKiBJbml0aWF0ZXMgQSBTeXN0ZW0gU29mdHdhcmUgUmVzZXQJCQkqLworI2RlZmluZQlET1VCTEVfRkFVTFQJCTB4MDAwOAkvKiBDb3JlIERvdWJsZSBGYXVsdCBDYXVzZXMgUmVzZXQJCQkJKi8KKyNkZWZpbmUgUkVTRVRfRE9VQkxFCQkweDIwMDAJLyogU1cgUmVzZXQgR2VuZXJhdGVkIEJ5IENvcmUgRG91YmxlLUZhdWx0CQkqLworI2RlZmluZSBSRVNFVF9XRE9HCQkJMHg0MDAwCS8qIFNXIFJlc2V0IEdlbmVyYXRlZCBCeSBXYXRjaGRvZyBUaW1lcgkJCSovCisjZGVmaW5lIFJFU0VUX1NPRlRXQVJFCQkweDgwMDAJLyogU1cgUmVzZXQgT2NjdXJyZWQgU2luY2UgTGFzdCBSZWFkIE9mIFNXUlNUCSovCisKKy8qIFNZU0NSIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBCTU9ERQkJCQkweDAwMDcJLyogQm9vdCBNb2RlIC0gTGF0Y2hlZCBEdXJpbmcgSFcgUmVzZXQgRnJvbSBNb2RlIFBpbnMJKi8KKyNkZWZpbmUJTk9CT09UCQkJCTB4MDAxMAkvKiBFeGVjdXRlIEZyb20gTDEgb3IgQVNZTkMgQmFuayAwIFdoZW4gQk1PREUgPSAwCQkqLworCisKKy8qICoqKioqKioqKioqKiogIFNZU1RFTSBJTlRFUlJVUFQgQ09OVFJPTExFUiBNQVNLUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUGVyaXBoZXJhbCBNYXNrcyBGb3IgU0lDX0lTUiwgU0lDX0lXUiwgU0lDX0lNQVNLCQkJCQkJCQkJCSovCisKKyNpZiAwCisjZGVmaW5lIElSUV9QTExfV0FLRVVQCTB4MDAwMDAwMDEJLyogUExMIFdha2V1cCBJbnRlcnJ1cHQJCQkgCQkJCQkqLworCisjZGVmaW5lIElSUV9FUlJPUjEgICAgICAweDAwMDAwMDAyICAvKiBFcnJvciBJbnRlcnJ1cHQgKERNQSwgRE1BUnggQmxvY2ssIERNQVJ4IE92ZXJmbG93KSAqLworI2RlZmluZSBJUlFfRVJST1IyICAgICAgMHgwMDAwMDAwNCAgLyogRXJyb3IgSW50ZXJydXB0IChDQU4sIEV0aGVybmV0LCBTUE9SVHgsIFBQSSwgU1BJLCBVQVJUeCkgKi8KKyNkZWZpbmUgSVJRX1JUQwkJCTB4MDAwMDAwMDgJLyogUmVhbCBUaW1lIENsb2NrIEludGVycnVwdCAJCQkJCQkqLworI2RlZmluZSBJUlFfRE1BMAkJMHgwMDAwMDAxMAkvKiBETUEgQ2hhbm5lbCAwIChQUEkpIEludGVycnVwdCAJCQkJCSovCisjZGVmaW5lIElSUV9ETUEzCQkweDAwMDAwMDIwCS8qIERNQSBDaGFubmVsIDMgKFNQT1JUMCBSWCkgSW50ZXJydXB0IAkJCQkqLworI2RlZmluZSBJUlFfRE1BNAkJMHgwMDAwMDA0MAkvKiBETUEgQ2hhbm5lbCA0IChTUE9SVDAgVFgpIEludGVycnVwdCAJCQkJKi8KKyNkZWZpbmUgSVJRX0RNQTUJCTB4MDAwMDAwODAJLyogRE1BIENoYW5uZWwgNSAoU1BPUlQxIFJYKSBJbnRlcnJ1cHQgCQkJCSovCisKKyNkZWZpbmUgSVJRX0RNQTYJCTB4MDAwMDAxMDAJLyogRE1BIENoYW5uZWwgNiAoU1BPUlQxIFRYKSBJbnRlcnJ1cHQgCQkgCQkqLworI2RlZmluZSBJUlFfVFdJCQkJMHgwMDAwMDIwMAkvKiBUV0kgSW50ZXJydXB0CQkJCQkJCQkJKi8KKyNkZWZpbmUgSVJRX0RNQTcJCTB4MDAwMDA0MDAJLyogRE1BIENoYW5uZWwgNyAoU1BJKSBJbnRlcnJ1cHQgCQkJCQkqLworI2RlZmluZSBJUlFfRE1BOAkJMHgwMDAwMDgwMAkvKiBETUEgQ2hhbm5lbCA4IChVQVJUMCBSWCkgSW50ZXJydXB0IAkJCQkqLworI2RlZmluZSBJUlFfRE1BOQkJMHgwMDAwMTAwMAkvKiBETUEgQ2hhbm5lbCA5IChVQVJUMCBUWCkgSW50ZXJydXB0IAkJCQkqLworI2RlZmluZSBJUlFfRE1BMTAJCTB4MDAwMDIwMDAJLyogRE1BIENoYW5uZWwgMTAgKFVBUlQxIFJYKSBJbnRlcnJ1cHQgCQkJCSovCisjZGVmaW5lIElSUV9ETUExMQkJMHgwMDAwNDAwMAkvKiBETUEgQ2hhbm5lbCAxMSAoVUFSVDEgVFgpIEludGVycnVwdCAJCQkJKi8KKyNkZWZpbmUgSVJRX0NBTl9SWAkJMHgwMDAwODAwMAkvKiBDQU4gUmVjZWl2ZSBJbnRlcnJ1cHQgCQkJCQkJCSovCisKKyNkZWZpbmUgSVJRX0NBTl9UWAkJMHgwMDAxMDAwMAkvKiBDQU4gVHJhbnNtaXQgSW50ZXJydXB0ICAJCQkJCQkJKi8KKyNkZWZpbmUgSVJRX0RNQTEJCTB4MDAwMjAwMDAJLyogRE1BIENoYW5uZWwgMSAoRXRoZXJuZXQgUlgpIEludGVycnVwdCAJCQkqLworI2RlZmluZSBJUlFfUEZBX1BPUlRICTB4MDAwMjAwMDAJLyogUEYgUG9ydCBIIChQRjQ3OjMyKSBJbnRlcnJ1cHQgQSAJCQkJCSovCisjZGVmaW5lIElSUV9ETUEyCQkweDAwMDQwMDAwCS8qIERNQSBDaGFubmVsIDIgKEV0aGVybmV0IFRYKSBJbnRlcnJ1cHQgCQkJKi8KKyNkZWZpbmUgSVJRX1BGQl9QT1JUSAkweDAwMDQwMDAwCS8qIFBGIFBvcnQgSCAoUEY0NzozMikgSW50ZXJydXB0IEIgCQkJCQkqLworI2RlZmluZSBJUlFfVElNRVIwCQkweDAwMDgwMDAwCS8qIFRpbWVyIDAgSW50ZXJydXB0CQkJCQkJCQkqLworI2RlZmluZSBJUlFfVElNRVIxCQkweDAwMTAwMDAwCS8qIFRpbWVyIDEgSW50ZXJydXB0IAkJCQkJCQkJKi8KKyNkZWZpbmUgSVJRX1RJTUVSMgkJMHgwMDIwMDAwMAkvKiBUaW1lciAyIEludGVycnVwdCAJCQkJCQkJCSovCisjZGVmaW5lIElSUV9USU1FUjMJCTB4MDA0MDAwMDAJLyogVGltZXIgMyBJbnRlcnJ1cHQgCQkJCQkJCQkqLworI2RlZmluZSBJUlFfVElNRVI0CQkweDAwODAwMDAwCS8qIFRpbWVyIDQgSW50ZXJydXB0IAkJCQkJCQkJKi8KKworI2RlZmluZSBJUlFfVElNRVI1CQkweDAxMDAwMDAwCS8qIFRpbWVyIDUgSW50ZXJydXB0IAkJCQkJCQkJKi8KKyNkZWZpbmUgSVJRX1RJTUVSNgkJMHgwMjAwMDAwMAkvKiBUaW1lciA2IEludGVycnVwdCAJCQkJCQkJCSovCisjZGVmaW5lIElSUV9USU1FUjcJCTB4MDQwMDAwMDAJLyogVGltZXIgNyBJbnRlcnJ1cHQgCQkJCQkJCQkqLworI2RlZmluZSBJUlFfUEZBX1BPUlRGRwkweDA4MDAwMDAwCS8qIFBGIFBvcnRzIEYmRyAoUEYzMTowKSBJbnRlcnJ1cHQgQSAJCQkJKi8KKyNkZWZpbmUgSVJRX1BGQl9QT1JURgkweDgwMDAwMDAwCS8qIFBGIFBvcnQgRiAoUEYxNTowKSBJbnRlcnJ1cHQgQiAJCQkJCSovCisjZGVmaW5lIElSUV9ETUExMgkJMHgyMDAwMDAwMAkvKiBETUEgQ2hhbm5lbHMgMTIgKE1ETUExIFNvdXJjZSkgUlggSW50ZXJydXB0IAkJKi8KKyNkZWZpbmUgSVJRX0RNQTEzCQkweDIwMDAwMDAwCS8qIERNQSBDaGFubmVscyAxMyAoTURNQTEgRGVzdGluYXRpb24pIFRYIEludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1BMTQJCTB4NDAwMDAwMDAJLyogRE1BIENoYW5uZWxzIDE0IChNRE1BMCBTb3VyY2UpIFJYIEludGVycnVwdCAJCSovCisjZGVmaW5lIElSUV9ETUExNQkJMHg0MDAwMDAwMAkvKiBETUEgQ2hhbm5lbHMgMTUgKE1ETUEwIERlc3RpbmF0aW9uKSBUWCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1dET0cJCTB4ODAwMDAwMDAJLyogU29mdHdhcmUgV2F0Y2hkb2cgVGltZXIgSW50ZXJydXB0IAkJCQkqLworI2RlZmluZSBJUlFfUEZCX1BPUlRHCTB4MTAwMDAwMDAJLyogUEYgUG9ydCBHIChQRjMxOjE2KSBJbnRlcnJ1cHQgQiAJCQkJCSovCisjZW5kaWYKKworLyogU0lDX0lBUjAgTWFjcm9zCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgUDBfSVZHKHgpCQkoKCh4KSYweEYpLTcpCQkJLyogUGVyaXBoZXJhbCAjMCBhc3NpZ25lZCBJVkcgI3ggCSovCisjZGVmaW5lIFAxX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDQJLyogUGVyaXBoZXJhbCAjMSBhc3NpZ25lZCBJVkcgI3ggCSovCisjZGVmaW5lIFAyX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDgJLyogUGVyaXBoZXJhbCAjMiBhc3NpZ25lZCBJVkcgI3ggCSovCisjZGVmaW5lIFAzX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweEMJLyogUGVyaXBoZXJhbCAjMyBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDRfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTAJLyogUGVyaXBoZXJhbCAjNCBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDVfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTQJLyogUGVyaXBoZXJhbCAjNSBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDZfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTgJLyogUGVyaXBoZXJhbCAjNiBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDdfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MUMJLyogUGVyaXBoZXJhbCAjNyBhc3NpZ25lZCBJVkcgI3gJKi8KKworLyogU0lDX0lBUjEgTWFjcm9zCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgUDhfSVZHKHgpCQkoKCh4KSYweEYpLTcpCQkJLyogUGVyaXBoZXJhbCAjOCBhc3NpZ25lZCBJVkcgI3ggCSovCisjZGVmaW5lIFA5X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDQJLyogUGVyaXBoZXJhbCAjOSBhc3NpZ25lZCBJVkcgI3ggCSovCisjZGVmaW5lIFAxMF9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHg4CS8qIFBlcmlwaGVyYWwgIzEwIGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMTFfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4QwkvKiBQZXJpcGhlcmFsICMxMSBhc3NpZ25lZCBJVkcgI3ggCSovCisjZGVmaW5lIFAxMl9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxMAkvKiBQZXJpcGhlcmFsICMxMiBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDEzX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDE0CS8qIFBlcmlwaGVyYWwgIzEzIGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMTRfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTgJLyogUGVyaXBoZXJhbCAjMTQgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAxNV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxQwkvKiBQZXJpcGhlcmFsICMxNSBhc3NpZ25lZCBJVkcgI3gJKi8KKworLyogU0lDX0lBUjIgTWFjcm9zCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgUDE2X0lWRyh4KQkJKCgoeCkmMHhGKS03KQkJCS8qIFBlcmlwaGVyYWwgIzE2IGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMTdfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4NAkvKiBQZXJpcGhlcmFsICMxNyBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDE4X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDgJLyogUGVyaXBoZXJhbCAjMTggYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAxOV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHhDCS8qIFBlcmlwaGVyYWwgIzE5IGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMjBfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTAJLyogUGVyaXBoZXJhbCAjMjAgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAyMV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxNAkvKiBQZXJpcGhlcmFsICMyMSBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDIyX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDE4CS8qIFBlcmlwaGVyYWwgIzIyIGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMjNfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MUMJLyogUGVyaXBoZXJhbCAjMjMgYXNzaWduZWQgSVZHICN4CSovCisKKy8qIFNJQ19JQVIzIE1hY3JvcwkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFAyNF9JVkcoeCkJCSgoKHgpJjB4RiktNykJCQkvKiBQZXJpcGhlcmFsICMyNCBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDI1X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDQJLyogUGVyaXBoZXJhbCAjMjUgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAyNl9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHg4CS8qIFBlcmlwaGVyYWwgIzI2IGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMjdfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4QwkvKiBQZXJpcGhlcmFsICMyNyBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDI4X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDEwCS8qIFBlcmlwaGVyYWwgIzI4IGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMjlfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTQJLyogUGVyaXBoZXJhbCAjMjkgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAzMF9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxOAkvKiBQZXJpcGhlcmFsICMzMCBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDMxX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDFDCS8qIFBlcmlwaGVyYWwgIzMxIGFzc2lnbmVkIElWRyAjeAkqLworCisKKy8qIFNJQ19JTUFTSyBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFNJQ19VTk1BU0tfQUxMCTB4MDAwMDAwMDAJCQkJCS8qIFVubWFzayBhbGwgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzCSovCisjZGVmaW5lIFNJQ19NQVNLX0FMTAkweEZGRkZGRkZGCQkJCQkvKiBNYXNrIGFsbCBwZXJpcGhlcmFsIGludGVycnVwdHMJKi8KKyNkZWZpbmUgU0lDX01BU0soeCkJCSgxIDw8ICgoeCkmMHgxRikpCQkJCQkvKiBNYXNrIFBlcmlwaGVyYWwgI3ggaW50ZXJydXB0CQkqLworI2RlZmluZSBTSUNfVU5NQVNLKHgpCSgweEZGRkZGRkZGIF4gKDEgPDwgKCh4KSYweDFGKSkpCS8qIFVubWFzayBQZXJpcGhlcmFsICN4IGludGVycnVwdAkqLworCisvKiBTSUNfSVdSIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgSVdSX0RJU0FCTEVfQUxMCTB4MDAwMDAwMDAJCQkJCS8qIFdha2V1cCBEaXNhYmxlIGFsbCBwZXJpcGhlcmFscwkqLworI2RlZmluZSBJV1JfRU5BQkxFX0FMTAkweEZGRkZGRkZGCQkJCQkvKiBXYWtldXAgRW5hYmxlIGFsbCBwZXJpcGhlcmFscwkqLworI2RlZmluZSBJV1JfRU5BQkxFKHgpCSgxIDw8ICgoeCkmMHgxRikpCQkJCQkvKiBXYWtldXAgRW5hYmxlIFBlcmlwaGVyYWwgI3gJCSovCisjZGVmaW5lIElXUl9ESVNBQkxFKHgpCSgweEZGRkZGRkZGIF4gKDEgPDwgKCh4KSYweDFGKSkpIAkvKiBXYWtldXAgRGlzYWJsZSBQZXJpcGhlcmFsICN4CQkqLworCisvKiAgKioqKioqKioqKioqKioqKiAgR0VORVJBTCBQVVJQT1NFIFRJTUVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqLworLyogVElNRVJfRU5BQkxFIE1hc2tzCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFRJTUVOMAkJCTB4MDAwMQkJLyogRW5hYmxlIFRpbWVyIDAJCQkJCSovCisjZGVmaW5lIFRJTUVOMQkJCTB4MDAwMgkJLyogRW5hYmxlIFRpbWVyIDEJCQkJCSovCisjZGVmaW5lIFRJTUVOMgkJCTB4MDAwNAkJLyogRW5hYmxlIFRpbWVyIDIJCQkJCSovCisjZGVmaW5lIFRJTUVOMwkJCTB4MDAwOAkJLyogRW5hYmxlIFRpbWVyIDMJCQkJCSovCisjZGVmaW5lIFRJTUVONAkJCTB4MDAxMAkJLyogRW5hYmxlIFRpbWVyIDQJCQkJCSovCisjZGVmaW5lIFRJTUVONQkJCTB4MDAyMAkJLyogRW5hYmxlIFRpbWVyIDUJCQkJCSovCisjZGVmaW5lIFRJTUVONgkJCTB4MDA0MAkJLyogRW5hYmxlIFRpbWVyIDYJCQkJCSovCisjZGVmaW5lIFRJTUVONwkJCTB4MDA4MAkJLyogRW5hYmxlIFRpbWVyIDcJCQkJCSovCisKKy8qIFRJTUVSX0RJU0FCTEUgTWFza3MJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVElNRElTMAkJCVRJTUVOMAkJLyogRGlzYWJsZSBUaW1lciAwCQkJCQkqLworI2RlZmluZSBUSU1ESVMxCQkJVElNRU4xCQkvKiBEaXNhYmxlIFRpbWVyIDEJCQkJCSovCisjZGVmaW5lIFRJTURJUzIJCQlUSU1FTjIJCS8qIERpc2FibGUgVGltZXIgMgkJCQkJKi8KKyNkZWZpbmUgVElNRElTMwkJCVRJTUVOMwkJLyogRGlzYWJsZSBUaW1lciAzCQkJCQkqLworI2RlZmluZSBUSU1ESVM0CQkJVElNRU40CQkvKiBEaXNhYmxlIFRpbWVyIDQJCQkJCSovCisjZGVmaW5lIFRJTURJUzUJCQlUSU1FTjUJCS8qIERpc2FibGUgVGltZXIgNQkJCQkJKi8KKyNkZWZpbmUgVElNRElTNgkJCVRJTUVONgkJLyogRGlzYWJsZSBUaW1lciA2CQkJCQkqLworI2RlZmluZSBUSU1ESVM3CQkJVElNRU43CQkvKiBEaXNhYmxlIFRpbWVyIDcJCQkJCSovCisKKy8qIFRJTUVSX1NUQVRVUyBNYXNrcwkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBUSU1JTDAJCQkweDAwMDAwMDAxCS8qIFRpbWVyIDAgSW50ZXJydXB0CQkJCSovCisjZGVmaW5lIFRJTUlMMQkJCTB4MDAwMDAwMDIJLyogVGltZXIgMSBJbnRlcnJ1cHQJCQkJKi8KKyNkZWZpbmUgVElNSUwyCQkJMHgwMDAwMDAwNAkvKiBUaW1lciAyIEludGVycnVwdAkJCQkqLworI2RlZmluZSBUSU1JTDMJCQkweDAwMDAwMDA4CS8qIFRpbWVyIDMgSW50ZXJydXB0CQkJCSovCisjZGVmaW5lIFRPVkZfRVJSMAkJMHgwMDAwMDAxMAkvKiBUaW1lciAwIENvdW50ZXIgT3ZlcmZsb3cJCQkqLworI2RlZmluZSBUT1ZGX0VSUjEJCTB4MDAwMDAwMjAJLyogVGltZXIgMSBDb3VudGVyIE92ZXJmbG93CQkJKi8KKyNkZWZpbmUgVE9WRl9FUlIyCQkweDAwMDAwMDQwCS8qIFRpbWVyIDIgQ291bnRlciBPdmVyZmxvdwkJCSovCisjZGVmaW5lIFRPVkZfRVJSMwkJMHgwMDAwMDA4MAkvKiBUaW1lciAzIENvdW50ZXIgT3ZlcmZsb3cJCQkqLworI2RlZmluZSBUUlVOMAkJCTB4MDAwMDEwMDAJLyogVGltZXIgMCBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVOMQkJCTB4MDAwMDIwMDAJLyogVGltZXIgMSBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVOMgkJCTB4MDAwMDQwMDAJLyogVGltZXIgMiBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVOMwkJCTB4MDAwMDgwMDAJLyogVGltZXIgMyBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUSU1JTDQJCQkweDAwMDEwMDAwCS8qIFRpbWVyIDQgSW50ZXJydXB0CQkJCSovCisjZGVmaW5lIFRJTUlMNQkJCTB4MDAwMjAwMDAJLyogVGltZXIgNSBJbnRlcnJ1cHQJCQkJKi8KKyNkZWZpbmUgVElNSUw2CQkJMHgwMDA0MDAwMAkvKiBUaW1lciA2IEludGVycnVwdAkJCQkqLworI2RlZmluZSBUSU1JTDcJCQkweDAwMDgwMDAwCS8qIFRpbWVyIDcgSW50ZXJydXB0CQkJCSovCisjZGVmaW5lIFRPVkZfRVJSNAkJMHgwMDEwMDAwMAkvKiBUaW1lciA0IENvdW50ZXIgT3ZlcmZsb3cJCQkqLworI2RlZmluZSBUT1ZGX0VSUjUJCTB4MDAyMDAwMDAJLyogVGltZXIgNSBDb3VudGVyIE92ZXJmbG93CQkJKi8KKyNkZWZpbmUgVE9WRl9FUlI2CQkweDAwNDAwMDAwCS8qIFRpbWVyIDYgQ291bnRlciBPdmVyZmxvdwkJCSovCisjZGVmaW5lIFRPVkZfRVJSNwkJMHgwMDgwMDAwMAkvKiBUaW1lciA3IENvdW50ZXIgT3ZlcmZsb3cJCQkqLworI2RlZmluZSBUUlVONAkJCTB4MTAwMDAwMDAJLyogVGltZXIgNCBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVONQkJCTB4MjAwMDAwMDAJLyogVGltZXIgNSBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVONgkJCTB4NDAwMDAwMDAJLyogVGltZXIgNiBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVONwkJCTB4ODAwMDAwMDAJLyogVGltZXIgNyBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworCisvKiBBbHRlcm5hdGUgRGVwcmVjYXRlZCBNYWNyb3MgUHJvdmlkZWQgRm9yIEJhY2t3YXJkcyBDb2RlIENvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVE9WTF9FUlIwIFRPVkZfRVJSMAorI2RlZmluZSBUT1ZMX0VSUjEgVE9WRl9FUlIxCisjZGVmaW5lIFRPVkxfRVJSMiBUT1ZGX0VSUjIKKyNkZWZpbmUgVE9WTF9FUlIzIFRPVkZfRVJSMworI2RlZmluZSBUT1ZMX0VSUjQgVE9WRl9FUlI0CisjZGVmaW5lIFRPVkxfRVJSNSBUT1ZGX0VSUjUKKyNkZWZpbmUgVE9WTF9FUlI2IFRPVkZfRVJSNgorI2RlZmluZSBUT1ZMX0VSUjcgVE9WRl9FUlI3CisKKy8qIFRJTUVSeF9DT05GSUcgTWFza3MJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgUFdNX09VVAkJCTB4MDAwMQkvKiBQdWxzZS1XaWR0aCBNb2R1bGF0aW9uIE91dHB1dCBNb2RlCSovCisjZGVmaW5lIFdEVEhfQ0FQCQkweDAwMDIJLyogV2lkdGggQ2FwdHVyZSBJbnB1dCBNb2RlCQkJCSovCisjZGVmaW5lIEVYVF9DTEsJCQkweDAwMDMJLyogRXh0ZXJuYWwgQ2xvY2sgTW9kZQkJCQkJKi8KKyNkZWZpbmUgUFVMU0VfSEkJCTB4MDAwNAkvKiBBY3Rpb24gUHVsc2UgKFBvc2l0aXZlL05lZ2F0aXZlKikJKi8KKyNkZWZpbmUgUEVSSU9EX0NOVAkJMHgwMDA4CS8qIFBlcmlvZCBDb3VudAkJCQkJCQkqLworI2RlZmluZSBJUlFfRU5BCQkJMHgwMDEwCS8qIEludGVycnVwdCBSZXF1ZXN0IEVuYWJsZQkJCQkqLworI2RlZmluZSBUSU5fU0VMCQkJMHgwMDIwCS8qIFRpbWVyIElucHV0IFNlbGVjdAkJCQkJKi8KKyNkZWZpbmUgT1VUX0RJUwkJCTB4MDA0MAkvKiBPdXRwdXQgUGFkIERpc2FibGUJCQkJCSovCisjZGVmaW5lIENMS19TRUwJCQkweDAwODAJLyogVGltZXIgQ2xvY2sgU2VsZWN0CQkJCQkqLworI2RlZmluZSBUT0dHTEVfSEkJCTB4MDEwMAkvKiBQV01fT1VUIFBVTFNFX0hJIFRvZ2dsZSBNb2RlCQkJKi8KKyNkZWZpbmUgRU1VX1JVTgkJCTB4MDIwMAkvKiBFbXVsYXRpb24gQmVoYXZpb3IgU2VsZWN0CQkJKi8KKyNkZWZpbmUgRVJSX1RZUAkJCTB4QzAwMAkvKiBFcnJvciBUeXBlCQkJCQkJCSovCisKKy8qICoqKioqKioqKioqKioqKioqKioqKiAgQVNZTkNIUk9OT1VTIE1FTU9SWSBDT05UUk9MTEVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRUJJVV9BTUdDVEwgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIEFNQ0tFTgkJCTB4MDAwMQkJLyogRW5hYmxlIENMS09VVAkJCQkJCQkJCSovCisjZGVmaW5lCUFNQkVOX05PTkUJCTB4MDAwMAkJLyogQWxsIEJhbmtzIERpc2FibGVkCQkJCQkJCQkqLworI2RlZmluZSBBTUJFTl9CMAkJMHgwMDAyCQkvKiBFbmFibGUgQXN5bmMgTWVtb3J5IEJhbmsgMCBvbmx5CQkJCQkqLworI2RlZmluZSBBTUJFTl9CMF9CMQkJMHgwMDA0CQkvKiBFbmFibGUgQXN5bmMgTWVtb3J5IEJhbmtzIDAgJiAxIG9ubHkJCQkJKi8KKyNkZWZpbmUgQU1CRU5fQjBfQjFfQjIJMHgwMDA2CQkvKiBFbmFibGUgQXN5bmMgTWVtb3J5IEJhbmtzIDAsIDEsIGFuZCAyCQkJKi8KKyNkZWZpbmUgQU1CRU5fQUxMCQkweDAwMDgJCS8qIEVuYWJsZSBBc3luYyBNZW1vcnkgQmFua3MgKGFsbCkgMCwgMSwgMiwgYW5kIDMJKi8KKworLyogRUJJVV9BTUJDVEwwIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBCMFJEWUVOCQkJMHgwMDAwMDAwMSAgLyogQmFuayAwIChCMCkgUkRZIEVuYWJsZQkJCQkJCQkqLworI2RlZmluZSBCMFJEWVBPTAkJMHgwMDAwMDAwMiAgLyogQjAgUkRZIEFjdGl2ZSBIaWdoCQkJCQkJCQkqLworI2RlZmluZSBCMFRUXzEJCQkweDAwMDAwMDA0ICAvKiBCMCBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMSBjeWNsZQkJKi8KKyNkZWZpbmUgQjBUVF8yCQkJMHgwMDAwMDAwOCAgLyogQjAgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDIgY3ljbGVzCSovCisjZGVmaW5lIEIwVFRfMwkJCTB4MDAwMDAwMEMgIC8qIEIwIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAzIGN5Y2xlcwkqLworI2RlZmluZSBCMFRUXzQJCQkweDAwMDAwMDAwICAvKiBCMCBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gNCBjeWNsZXMJKi8KKyNkZWZpbmUgQjBTVF8xCQkJMHgwMDAwMDAxMCAgLyogQjAgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMSBjeWNsZQkJKi8KKyNkZWZpbmUgQjBTVF8yCQkJMHgwMDAwMDAyMCAgLyogQjAgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMiBjeWNsZXMJCSovCisjZGVmaW5lIEIwU1RfMwkJCTB4MDAwMDAwMzAgIC8qIEIwIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDMgY3ljbGVzCQkqLworI2RlZmluZSBCMFNUXzQJCQkweDAwMDAwMDAwICAvKiBCMCBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSA0IGN5Y2xlcwkJKi8KKyNkZWZpbmUgQjBIVF8xCQkJMHgwMDAwMDA0MCAgLyogQjAgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDEgY3ljbGUJCSovCisjZGVmaW5lIEIwSFRfMgkJCTB4MDAwMDAwODAgIC8qIEIwIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAyIGN5Y2xlcwkqLworI2RlZmluZSBCMEhUXzMJCQkweDAwMDAwMEMwICAvKiBCMCBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMyBjeWNsZXMJKi8KKyNkZWZpbmUgQjBIVF8wCQkJMHgwMDAwMDAwMCAgLyogQjAgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDAgY3ljbGVzCSovCisjZGVmaW5lIEIwUkFUXzEJCQkweDAwMDAwMTAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gMSBjeWNsZQkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfMgkJCTB4MDAwMDAyMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfMwkJCTB4MDAwMDAzMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfNAkJCTB4MDAwMDA0MDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfNQkJCTB4MDAwMDA1MDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfNgkJCTB4MDAwMDA2MDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfNwkJCTB4MDAwMDA3MDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfOAkJCTB4MDAwMDA4MDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfOQkJCTB4MDAwMDA5MDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfMTAJCTB4MDAwMDBBMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwUkFUXzExCQkweDAwMDAwQjAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFJBVF8xMgkJMHgwMDAwMEMwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfMTMJCTB4MDAwMDBEMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwUkFUXzE0CQkweDAwMDAwRTAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFJBVF8xNQkJMHgwMDAwMEYwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfMQkJCTB4MDAwMDEwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMSBjeWNsZQkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfMgkJCTB4MDAwMDIwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzMJCQkweDAwMDAzMDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFdBVF80CQkJMHgwMDAwNDAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfNQkJCTB4MDAwMDUwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzYJCQkweDAwMDA2MDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFdBVF83CQkJMHgwMDAwNzAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfOAkJCTB4MDAwMDgwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzkJCQkweDAwMDA5MDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFdBVF8xMAkJMHgwMDAwQTAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzExCQkweDAwMDBCMDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfMTIJCTB4MDAwMEMwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFdBVF8xMwkJMHgwMDAwRDAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzE0CQkweDAwMDBFMDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfMTUJCTB4MDAwMEYwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzCQkJCQkqLworCisjZGVmaW5lIEIxUkRZRU4JCQkweDAwMDEwMDAwICAvKiBCYW5rIDEgKEIxKSBSRFkgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAJKi8KKyNkZWZpbmUgQjFSRFlQT0wJCTB4MDAwMjAwMDAgIC8qIEIxIFJEWSBBY3RpdmUgSGlnaCAgICAgICAgICAgICAgICAgICAgICAgICAgIAkqLworI2RlZmluZSBCMVRUXzEJCQkweDAwMDQwMDAwICAvKiBCMSBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMSBjeWNsZSAJKi8KKyNkZWZpbmUgQjFUVF8yCQkJMHgwMDA4MDAwMCAgLyogQjEgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDIgY3ljbGVzCSovCisjZGVmaW5lIEIxVFRfMwkJCTB4MDAwQzAwMDAgIC8qIEIxIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAzIGN5Y2xlcwkqLworI2RlZmluZSBCMVRUXzQJCQkweDAwMDAwMDAwICAvKiBCMSBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gNCBjeWNsZXMJKi8KKyNkZWZpbmUgQjFTVF8xCQkJMHgwMDEwMDAwMCAgLyogQjEgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMSBjeWNsZSAgCSovCisjZGVmaW5lIEIxU1RfMgkJCTB4MDAyMDAwMDAgIC8qIEIxIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDIgY3ljbGVzIAkqLworI2RlZmluZSBCMVNUXzMJCQkweDAwMzAwMDAwICAvKiBCMSBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAzIGN5Y2xlcyAJKi8KKyNkZWZpbmUgQjFTVF80CQkJMHgwMDAwMDAwMCAgLyogQjEgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gNCBjeWNsZXMgCSovCisjZGVmaW5lIEIxSFRfMQkJCTB4MDA0MDAwMDAgIC8qIEIxIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAxIGN5Y2xlIAkqLworI2RlZmluZSBCMUhUXzIJCQkweDAwODAwMDAwICAvKiBCMSBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMiBjeWNsZXMJKi8KKyNkZWZpbmUgQjFIVF8zCQkJMHgwMEMwMDAwMCAgLyogQjEgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDMgY3ljbGVzCSovCisjZGVmaW5lIEIxSFRfMAkJCTB4MDAwMDAwMDAgIC8qIEIxIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAwIGN5Y2xlcwkqLworI2RlZmluZSBCMVJBVF8xCQkJMHgwMTAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDEgY3ljbGUJCQkJCSovCisjZGVmaW5lIEIxUkFUXzIJCQkweDAyMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzMJCQkweDAzMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzQJCQkweDA0MDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzUJCQkweDA1MDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzYJCQkweDA2MDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzcJCQkweDA3MDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzgJCQkweDA4MDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzkJCQkweDA5MDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzEwCQkweDBBMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVJBVF8xMQkJMHgwQjAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFSQVRfMTIJCTB4MEMwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzEzCQkweDBEMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVJBVF8xNAkJMHgwRTAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFSQVRfMTUJCTB4MEYwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxV0FUXzEJCQkweDEwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDEgY3ljbGUJCQkJCSovCisjZGVmaW5lIEIxV0FUXzIJCQkweDIwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF8zCQkJMHgzMDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFXQVRfNAkJCTB4NDAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxV0FUXzUJCQkweDUwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF82CQkJMHg2MDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFXQVRfNwkJCTB4NzAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxV0FUXzgJCQkweDgwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDggY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF85CQkJMHg5MDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFXQVRfMTAJCTB4QTAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF8xMQkJMHhCMDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxV0FUXzEyCQkweEMwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFXQVRfMTMJCTB4RDAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF8xNAkJMHhFMDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxV0FUXzE1CQkweEYwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcwkJCQkJKi8KKworLyogRUJJVV9BTUJDVEwxIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBCMlJEWUVOCQkJMHgwMDAwMDAwMSAgLyogQmFuayAyIChCMikgUkRZIEVuYWJsZQkJCQkJCQkqLworI2RlZmluZSBCMlJEWVBPTAkJMHgwMDAwMDAwMiAgLyogQjIgUkRZIEFjdGl2ZSBIaWdoCQkJCQkJCQkqLworI2RlZmluZSBCMlRUXzEJCQkweDAwMDAwMDA0ICAvKiBCMiBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMSBjeWNsZQkJKi8KKyNkZWZpbmUgQjJUVF8yCQkJMHgwMDAwMDAwOCAgLyogQjIgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDIgY3ljbGVzCSovCisjZGVmaW5lIEIyVFRfMwkJCTB4MDAwMDAwMEMgIC8qIEIyIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAzIGN5Y2xlcwkqLworI2RlZmluZSBCMlRUXzQJCQkweDAwMDAwMDAwICAvKiBCMiBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gNCBjeWNsZXMJKi8KKyNkZWZpbmUgQjJTVF8xCQkJMHgwMDAwMDAxMCAgLyogQjIgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMSBjeWNsZQkJKi8KKyNkZWZpbmUgQjJTVF8yCQkJMHgwMDAwMDAyMCAgLyogQjIgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMiBjeWNsZXMJCSovCisjZGVmaW5lIEIyU1RfMwkJCTB4MDAwMDAwMzAgIC8qIEIyIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDMgY3ljbGVzCQkqLworI2RlZmluZSBCMlNUXzQJCQkweDAwMDAwMDAwICAvKiBCMiBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSA0IGN5Y2xlcwkJKi8KKyNkZWZpbmUgQjJIVF8xCQkJMHgwMDAwMDA0MCAgLyogQjIgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDEgY3ljbGUJCSovCisjZGVmaW5lIEIySFRfMgkJCTB4MDAwMDAwODAgIC8qIEIyIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAyIGN5Y2xlcwkqLworI2RlZmluZSBCMkhUXzMJCQkweDAwMDAwMEMwICAvKiBCMiBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMyBjeWNsZXMJKi8KKyNkZWZpbmUgQjJIVF8wCQkJMHgwMDAwMDAwMCAgLyogQjIgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDAgY3ljbGVzCSovCisjZGVmaW5lIEIyUkFUXzEJCQkweDAwMDAwMTAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gMSBjeWNsZQkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfMgkJCTB4MDAwMDAyMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfMwkJCTB4MDAwMDAzMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfNAkJCTB4MDAwMDA0MDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfNQkJCTB4MDAwMDA1MDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfNgkJCTB4MDAwMDA2MDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfNwkJCTB4MDAwMDA3MDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfOAkJCTB4MDAwMDA4MDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfOQkJCTB4MDAwMDA5MDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfMTAJCTB4MDAwMDBBMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyUkFUXzExCQkweDAwMDAwQjAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMlJBVF8xMgkJMHgwMDAwMEMwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfMTMJCTB4MDAwMDBEMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyUkFUXzE0CQkweDAwMDAwRTAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMlJBVF8xNQkJMHgwMDAwMEYwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfMQkJCTB4MDAwMDEwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMSBjeWNsZQkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfMgkJCTB4MDAwMDIwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzMJCQkweDAwMDAzMDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMldBVF80CQkJMHgwMDAwNDAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfNQkJCTB4MDAwMDUwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzYJCQkweDAwMDA2MDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMldBVF83CQkJMHgwMDAwNzAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfOAkJCTB4MDAwMDgwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzkJCQkweDAwMDA5MDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMldBVF8xMAkJMHgwMDAwQTAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzExCQkweDAwMDBCMDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfMTIJCTB4MDAwMEMwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMldBVF8xMwkJMHgwMDAwRDAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzE0CQkweDAwMDBFMDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfMTUJCTB4MDAwMEYwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzCQkJCQkqLworCisjZGVmaW5lIEIzUkRZRU4JCQkweDAwMDEwMDAwICAvKiBCYW5rIDMgKEIzKSBSRFkgRW5hYmxlCQkJCQkJCSovCisjZGVmaW5lIEIzUkRZUE9MCQkweDAwMDIwMDAwICAvKiBCMyBSRFkgQWN0aXZlIEhpZ2gJCQkJCQkJCSovCisjZGVmaW5lIEIzVFRfMQkJCTB4MDAwNDAwMDAgIC8qIEIzIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAxIGN5Y2xlCQkqLworI2RlZmluZSBCM1RUXzIJCQkweDAwMDgwMDAwICAvKiBCMyBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMiBjeWNsZXMJKi8KKyNkZWZpbmUgQjNUVF8zCQkJMHgwMDBDMDAwMCAgLyogQjMgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDMgY3ljbGVzCSovCisjZGVmaW5lIEIzVFRfNAkJCTB4MDAwMDAwMDAgIC8qIEIzIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSA0IGN5Y2xlcwkqLworI2RlZmluZSBCM1NUXzEJCQkweDAwMTAwMDAwICAvKiBCMyBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAxIGN5Y2xlCQkqLworI2RlZmluZSBCM1NUXzIJCQkweDAwMjAwMDAwICAvKiBCMyBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAyIGN5Y2xlcwkJKi8KKyNkZWZpbmUgQjNTVF8zCQkJMHgwMDMwMDAwMCAgLyogQjMgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMyBjeWNsZXMJCSovCisjZGVmaW5lIEIzU1RfNAkJCTB4MDAwMDAwMDAgIC8qIEIzIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDQgY3ljbGVzCQkqLworI2RlZmluZSBCM0hUXzEJCQkweDAwNDAwMDAwICAvKiBCMyBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMSBjeWNsZQkJKi8KKyNkZWZpbmUgQjNIVF8yCQkJMHgwMDgwMDAwMCAgLyogQjMgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDIgY3ljbGVzCSovCisjZGVmaW5lIEIzSFRfMwkJCTB4MDBDMDAwMDAgIC8qIEIzIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAzIGN5Y2xlcwkqLworI2RlZmluZSBCM0hUXzAJCQkweDAwMDAwMDAwICAvKiBCMyBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMCBjeWNsZXMJKi8KKyNkZWZpbmUgQjNSQVRfMQkJCTB4MDEwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlCQkJCQkqLworI2RlZmluZSBCM1JBVF8yCQkJMHgwMjAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF8zCQkJMHgwMzAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF80CQkJMHgwNDAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF81CQkJMHgwNTAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF82CQkJMHgwNjAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF83CQkJMHgwNzAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF84CQkJMHgwODAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDggY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF85CQkJMHgwOTAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF8xMAkJMHgwQTAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNSQVRfMTEJCTB4MEIwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzUkFUXzEyCQkweDBDMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF8xMwkJMHgwRDAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNSQVRfMTQJCTB4MEUwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzUkFUXzE1CQkweDBGMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1dBVF8xCQkJMHgxMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlCQkJCQkqLworI2RlZmluZSBCM1dBVF8yCQkJMHgyMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfMwkJCTB4MzAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzV0FUXzQJCQkweDQwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1dBVF81CQkJMHg1MDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfNgkJCTB4NjAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzV0FUXzcJCQkweDcwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1dBVF84CQkJMHg4MDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfOQkJCTB4OTAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzV0FUXzEwCQkweEEwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfMTEJCTB4QjAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1dBVF8xMgkJMHhDMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzV0FUXzEzCQkweEQwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfMTQJCTB4RTAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1dBVF8xNQkJMHhGMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMJCQkJCSovCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKiAgU0RSQU0gQ09OVFJPTExFUiBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEVCSVVfU0RHQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFNDVExFCQkJMHgwMDAwMDAwMQkvKiBFbmFibGUgU0RSQU0gU2lnbmFscwkJCQkJCQkJCQkqLworI2RlZmluZSBDTF8yCQkJMHgwMDAwMDAwOAkvKiBTRFJBTSBDQVMgTGF0ZW5jeSA9IDIgY3ljbGVzCQkJCQkJCQkqLworI2RlZmluZSBDTF8zCQkJMHgwMDAwMDAwQwkvKiBTRFJBTSBDQVMgTGF0ZW5jeSA9IDMgY3ljbGVzCQkJCQkJCQkqLworI2RlZmluZSBQQVNSX0FMTAkJMHgwMDAwMDAwMAkvKiBBbGwgNCBTRFJBTSBCYW5rcyBSZWZyZXNoZWQgSW4gU2VsZi1SZWZyZXNoCQkJCSovCisjZGVmaW5lIFBBU1JfQjBfQjEJCTB4MDAwMDAwMTAJLyogU0RSQU0gQmFua3MgMCBhbmQgMSBBcmUgUmVmcmVzaGVkIEluIFNlbGYtUmVmcmVzaAkJKi8KKyNkZWZpbmUgUEFTUl9CMAkJCTB4MDAwMDAwMjAJLyogT25seSBTRFJBTSBCYW5rIDAgSXMgUmVmcmVzaGVkIEluIFNlbGYtUmVmcmVzaAkJCSovCisjZGVmaW5lIFRSQVNfMQkJCTB4MDAwMDAwNDAJLyogU0RSQU0gdFJBUyA9IDEgY3ljbGUJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU18yCQkJMHgwMDAwMDA4MAkvKiBTRFJBTSB0UkFTID0gMiBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkFTXzMJCQkweDAwMDAwMEMwCS8qIFNEUkFNIHRSQVMgPSAzIGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQVNfNAkJCTB4MDAwMDAxMDAJLyogU0RSQU0gdFJBUyA9IDQgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU181CQkJMHgwMDAwMDE0MAkvKiBTRFJBTSB0UkFTID0gNSBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkFTXzYJCQkweDAwMDAwMTgwCS8qIFNEUkFNIHRSQVMgPSA2IGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQVNfNwkJCTB4MDAwMDAxQzAJLyogU0RSQU0gdFJBUyA9IDcgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU184CQkJMHgwMDAwMDIwMAkvKiBTRFJBTSB0UkFTID0gOCBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkFTXzkJCQkweDAwMDAwMjQwCS8qIFNEUkFNIHRSQVMgPSA5IGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQVNfMTAJCQkweDAwMDAwMjgwCS8qIFNEUkFNIHRSQVMgPSAxMCBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkFTXzExCQkJMHgwMDAwMDJDMAkvKiBTRFJBTSB0UkFTID0gMTEgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU18xMgkJCTB4MDAwMDAzMDAJLyogU0RSQU0gdFJBUyA9IDEyIGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQVNfMTMJCQkweDAwMDAwMzQwCS8qIFNEUkFNIHRSQVMgPSAxMyBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkFTXzE0CQkJMHgwMDAwMDM4MAkvKiBTRFJBTSB0UkFTID0gMTQgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU18xNQkJCTB4MDAwMDAzQzAJLyogU0RSQU0gdFJBUyA9IDE1IGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSUF8xCQkJMHgwMDAwMDgwMAkvKiBTRFJBTSB0UlAgPSAxIGN5Y2xlCQkJCQkJCQkJCSovCisjZGVmaW5lIFRSUF8yCQkJMHgwMDAwMTAwMAkvKiBTRFJBTSB0UlAgPSAyIGN5Y2xlcwkJCQkJCQkJCQkqLworI2RlZmluZSBUUlBfMwkJCTB4MDAwMDE4MDAJLyogU0RSQU0gdFJQID0gMyBjeWNsZXMJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJQXzQJCQkweDAwMDAyMDAwCS8qIFNEUkFNIHRSUCA9IDQgY3ljbGVzCQkJCQkJCQkJCSovCisjZGVmaW5lIFRSUF81CQkJMHgwMDAwMjgwMAkvKiBTRFJBTSB0UlAgPSA1IGN5Y2xlcwkJCQkJCQkJCQkqLworI2RlZmluZSBUUlBfNgkJCTB4MDAwMDMwMDAJLyogU0RSQU0gdFJQID0gNiBjeWNsZXMJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJQXzcJCQkweDAwMDAzODAwCS8qIFNEUkFNIHRSUCA9IDcgY3ljbGVzCQkJCQkJCQkJCSovCisjZGVmaW5lIFRSQ0RfMQkJCTB4MDAwMDgwMDAJLyogU0RSQU0gdFJDRCA9IDEgY3ljbGUJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJDRF8yCQkJMHgwMDAxMDAwMAkvKiBTRFJBTSB0UkNEID0gMiBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkNEXzMJCQkweDAwMDE4MDAwCS8qIFNEUkFNIHRSQ0QgPSAzIGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQ0RfNAkJCTB4MDAwMjAwMDAJLyogU0RSQU0gdFJDRCA9IDQgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJDRF81CQkJMHgwMDAyODAwMAkvKiBTRFJBTSB0UkNEID0gNSBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkNEXzYJCQkweDAwMDMwMDAwCS8qIFNEUkFNIHRSQ0QgPSA2IGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQ0RfNwkJCTB4MDAwMzgwMDAJLyogU0RSQU0gdFJDRCA9IDcgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFdSXzEJCQkweDAwMDgwMDAwCS8qIFNEUkFNIHRXUiA9IDEgY3ljbGUJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFdSXzIJCQkweDAwMTAwMDAwCS8qIFNEUkFNIHRXUiA9IDIgY3ljbGVzCQkJCQkJCQkJCSovCisjZGVmaW5lIFRXUl8zCQkJMHgwMDE4MDAwMAkvKiBTRFJBTSB0V1IgPSAzIGN5Y2xlcwkJCQkJCQkJCQkqLworI2RlZmluZSBQVVBTRAkJCTB4MDAyMDAwMDAJLyogUG93ZXItVXAgU3RhcnQgRGVsYXkgKDE1IFNDTEsgQ3ljbGVzIERlbGF5KQkJCQkqLworI2RlZmluZSBQU00JCQkJMHgwMDQwMDAwMAkvKiBQb3dlci1VcCBTZXF1ZW5jZSAoTW9kZSBSZWdpc3RlciBCZWZvcmUvQWZ0ZXIqIFJlZnJlc2gpCSovCisjZGVmaW5lIFBTUwkJCQkweDAwODAwMDAwCS8qIEVuYWJsZSBQb3dlci1VcCBTZXF1ZW5jZSBvbiBOZXh0IFNEUkFNIEFjY2VzcwkJCSovCisjZGVmaW5lIFNSRlMJCQkweDAxMDAwMDAwCS8qIEVuYWJsZSBTRFJBTSBTZWxmLVJlZnJlc2ggTW9kZQkJCQkJCQkqLworI2RlZmluZSBFQlVGRQkJCTB4MDIwMDAwMDAJLyogRW5hYmxlIEV4dGVybmFsIEJ1ZmZlcmluZyBUaW1pbmcJCQkJCQkJKi8KKyNkZWZpbmUgRkJCUlcJCQkweDA0MDAwMDAwCS8qIEVuYWJsZSBGYXN0IEJhY2stVG8tQmFjayBSZWFkIFRvIFdyaXRlCQkJCQkqLworI2RlZmluZSBFTVJFTgkJCTB4MTAwMDAwMDAJLyogRXh0ZW5kZWQgTW9kZSBSZWdpc3RlciBFbmFibGUJCQkJCQkJKi8KKyNkZWZpbmUgVENTUgkJCTB4MjAwMDAwMDAJLyogVGVtcC1Db21wZW5zYXRlZCBTZWxmLVJlZnJlc2ggVmFsdWUgKDg1LzQ1KiBEZWcgQykJCSovCisjZGVmaW5lIENEREJHCQkJMHg0MDAwMDAwMAkvKiBUcmlzdGF0ZSBTRFJBTSBDb250cm9scyBEdXJpbmcgQnVzIEdyYW50CQkJCQkqLworCisvKiBFQklVX1NEQkNUTCBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIEVCRQkJCQkweDAwMDEJCS8qIEVuYWJsZSBTRFJBTSBFeHRlcm5hbCBCYW5rCQkJCQkJCSovCisjZGVmaW5lIEVCU1pfMTYJCQkweDAwMDAJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgU2l6ZSA9IDE2TUIJKi8KKyNkZWZpbmUgRUJTWl8zMgkJCTB4MDAwMgkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBTaXplID0gMzJNQgkqLworI2RlZmluZSBFQlNaXzY0CQkJMHgwMDA0CQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIFNpemUgPSA2NE1CCSovCisjZGVmaW5lIEVCU1pfMTI4CQkweDAwMDYJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgU2l6ZSA9IDEyOE1CCQkqLworI2RlZmluZSBFQlNaXzI1NgkJMHgwMDA4CQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIFNpemUgPSAyNTZNQiAJKi8KKyNkZWZpbmUgRUJTWl81MTIJCTB4MDAwQQkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBTaXplID0gNTEyTUIJCSovCisjZGVmaW5lIEVCQ0FXXzgJCQkweDAwMDAJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgQ29sdW1uIEFkZHJlc3MgV2lkdGggPSA4IEJpdHMJKi8KKyNkZWZpbmUgRUJDQVdfOQkJCTB4MDAxMAkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBDb2x1bW4gQWRkcmVzcyBXaWR0aCA9IDkgQml0cwkqLworI2RlZmluZSBFQkNBV18xMAkJMHgwMDIwCQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIENvbHVtbiBBZGRyZXNzIFdpZHRoID0gMTAgQml0cwkqLworI2RlZmluZSBFQkNBV18xMQkJMHgwMDMwCQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIENvbHVtbiBBZGRyZXNzIFdpZHRoID0gMTEgQml0cwkqLworCisvKiBFQklVX1NEU1RBVCBNYXNrcwkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgU0RDSQkJCTB4MDAwMQkJLyogU0RSQU0gQ29udHJvbGxlciBJZGxlIAkJCQkqLworI2RlZmluZSBTRFNSQQkJCTB4MDAwMgkJLyogU0RSQU0gU2VsZi1SZWZyZXNoIEFjdGl2ZQkJCSovCisjZGVmaW5lIFNEUFVBCQkJMHgwMDA0CQkvKiBTRFJBTSBQb3dlci1VcCBBY3RpdmUgCQkJCSovCisjZGVmaW5lIFNEUlMJCQkweDAwMDgJCS8qIFNEUkFNIFdpbGwgUG93ZXItVXAgT24gTmV4dCBBY2Nlc3MJKi8KKyNkZWZpbmUgU0RFQVNFCQkJMHgwMDEwCQkvKiBTRFJBTSBFQUIgU3RpY2t5IEVycm9yIFN0YXR1cwkJKi8KKyNkZWZpbmUgQkdTVEFUCQkJMHgwMDIwCQkvKiBCdXMgR3JhbnQgU3RhdHVzCQkJCQkJKi8KKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKiAgRE1BIENPTlRST0xMRVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBETUF4X1BFUklQSEVSQUxfTUFQLCBNRE1BX3l5X1BFUklQSEVSQUxfTUFQIE1hc2tzCQkJCQkJCQkqLworI2RlZmluZSBDVFlQRQkJCTB4MDA0MAkvKiBETUEgQ2hhbm5lbCBUeXBlIEluZGljYXRvciAoTWVtb3J5L1BlcmlwaGVyYWwqKQkqLworI2RlZmluZSBQTUFQCQkJMHhGMDAwCS8qIFBlcmlwaGVyYWwgTWFwcGVkIFRvIFRoaXMgQ2hhbm5lbAkJCQkqLworI2RlZmluZSBQTUFQX1BQSQkJMHgwMDAwCS8qIAkJUFBJIFBvcnQgRE1BCQkJCQkJCQkqLworI2RlZmluZQlQTUFQX0VNQUNSWAkJMHgxMDAwCS8qIAkJRXRoZXJuZXQgUmVjZWl2ZSBETUEJCQkJCQkqLworI2RlZmluZSBQTUFQX0VNQUNUWAkJMHgyMDAwCS8qIAkJRXRoZXJuZXQgVHJhbnNtaXQgRE1BCQkJCQkJKi8KKyNkZWZpbmUgUE1BUF9TUE9SVDBSWAkweDMwMDAJLyogCQlTUE9SVDAgUmVjZWl2ZSBETUEJCQkJCQkJKi8KKyNkZWZpbmUgUE1BUF9TUE9SVDBUWAkweDQwMDAJLyogCQlTUE9SVDAgVHJhbnNtaXQgRE1BCQkJCQkJCSovCisjZGVmaW5lIFBNQVBfU1BPUlQxUlgJMHg1MDAwCS8qIAkJU1BPUlQxIFJlY2VpdmUgRE1BCQkJCQkJCSovCisjZGVmaW5lIFBNQVBfU1BPUlQxVFgJMHg2MDAwCS8qIAkJU1BPUlQxIFRyYW5zbWl0IERNQQkJCQkJCQkqLworI2RlZmluZSBQTUFQX1NQSQkJMHg3MDAwCS8qIAkJU1BJIFBvcnQgRE1BCQkJCQkJCQkqLworI2RlZmluZSBQTUFQX1VBUlQwUlgJMHg4MDAwCS8qIAkJVUFSVDAgUG9ydCBSZWNlaXZlIERNQQkJCQkJCSovCisjZGVmaW5lIFBNQVBfVUFSVDBUWAkweDkwMDAJLyogCQlVQVJUMCBQb3J0IFRyYW5zbWl0IERNQQkJCQkJCSovCisjZGVmaW5lCVBNQVBfVUFSVDFSWAkweEEwMDAJLyogCQlVQVJUMSBQb3J0IFJlY2VpdmUgRE1BCQkJCQkJKi8KKyNkZWZpbmUJUE1BUF9VQVJUMVRYCTB4QjAwMAkvKiAJCVVBUlQxIFBvcnQgVHJhbnNtaXQgRE1BCQkJCQkJKi8KKworLyogICoqKioqKioqKioqKiAgUEFSQUxMRUwgUEVSSVBIRVJBTCBJTlRFUkZBQ0UgKFBQSSkgTUFTS1MgKioqKioqKioqKioqKi8KKy8qICBQUElfQ09OVFJPTCBNYXNrcwkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBQT1JUX0VOCQkJMHgwMDAxCQkvKiBQUEkgUG9ydCBFbmFibGUJCQkJCSovCisjZGVmaW5lIFBPUlRfRElSCQkweDAwMDIJCS8qIFBQSSBQb3J0IERpcmVjdGlvbgkJCQkqLworI2RlZmluZSBYRlJfVFlQRQkJMHgwMDBDCQkvKiBQUEkgVHJhbnNmZXIgVHlwZQkJCQkqLworI2RlZmluZSBQT1JUX0NGRwkJMHgwMDMwCQkvKiBQUEkgUG9ydCBDb25maWd1cmF0aW9uCQkJKi8KKyNkZWZpbmUgRkxEX1NFTAkJCTB4MDA0MAkJLyogUFBJIEFjdGl2ZSBGaWVsZCBTZWxlY3QJCQkqLworI2RlZmluZSBQQUNLX0VOCQkJMHgwMDgwCQkvKiBQUEkgUGFja2luZyBNb2RlCQkJCQkqLworI2RlZmluZSBETUEzMgkJCTB4MDEwMAkJLyogUFBJIDMyLWJpdCBETUEgRW5hYmxlCQkJKi8KKyNkZWZpbmUgU0tJUF9FTgkJCTB4MDIwMAkJLyogUFBJIFNraXAgRWxlbWVudCBFbmFibGUJCQkqLworI2RlZmluZSBTS0lQX0VPCQkJMHgwNDAwCQkvKiBQUEkgU2tpcCBFdmVuL09kZCBFbGVtZW50cwkJKi8KKyNkZWZpbmUgRExFTl84CQkJMHgwMDAwCQkvKiBEYXRhIExlbmd0aCA9IDggQml0cwkJCQkqLworI2RlZmluZSBETEVOXzEwCQkJMHgwODAwCQkvKiBEYXRhIExlbmd0aCA9IDEwIEJpdHMJCQkqLworI2RlZmluZSBETEVOXzExCQkJMHgxMDAwCQkvKiBEYXRhIExlbmd0aCA9IDExIEJpdHMJCQkqLworI2RlZmluZSBETEVOXzEyCQkJMHgxODAwCQkvKiBEYXRhIExlbmd0aCA9IDEyIEJpdHMJCQkqLworI2RlZmluZSBETEVOXzEzCQkJMHgyMDAwCQkvKiBEYXRhIExlbmd0aCA9IDEzIEJpdHMJCQkqLworI2RlZmluZSBETEVOXzE0CQkJMHgyODAwCQkvKiBEYXRhIExlbmd0aCA9IDE0IEJpdHMJCQkqLworI2RlZmluZSBETEVOXzE1CQkJMHgzMDAwCQkvKiBEYXRhIExlbmd0aCA9IDE1IEJpdHMJCQkqLworI2RlZmluZSBETEVOXzE2CQkJMHgzODAwCQkvKiBEYXRhIExlbmd0aCA9IDE2IEJpdHMJCQkqLworI2RlZmluZSBETEVOR1RICQkJMHgzODAwCQkvKiBQUEkgRGF0YSBMZW5ndGggICovCisjZGVmaW5lIFBPTEMJCQkweDQwMDAJCS8qIFBQSSBDbG9jayBQb2xhcml0eQkJCQkqLworI2RlZmluZSBQT0xTCQkJMHg4MDAwCQkvKiBQUEkgRnJhbWUgU3luYyBQb2xhcml0eQkJCSovCisKKy8qIFBQSV9TVEFUVVMgTWFza3MJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIEZMRAkJCQkweDA0MDAJCS8qIEZpZWxkIEluZGljYXRvcgkJCQkJKi8KKyNkZWZpbmUgRlRfRVJSCQkJMHgwODAwCQkvKiBGcmFtZSBUcmFjayBFcnJvcgkJCQkqLworI2RlZmluZSBPVlIJCQkJMHgxMDAwCQkvKiBGSUZPIE92ZXJmbG93IEVycm9yCQkJCSovCisjZGVmaW5lIFVORFIJCQkweDIwMDAJCS8qIEZJRk8gVW5kZXJydW4gRXJyb3IJCQkJKi8KKyNkZWZpbmUgRVJSX0RFVAkJCTB4NDAwMAkJLyogRXJyb3IgRGV0ZWN0ZWQgSW5kaWNhdG9yCQkJKi8KKyNkZWZpbmUgRVJSX05DT1IJCTB4ODAwMAkJLyogRXJyb3IgTm90IENvcnJlY3RlZCBJbmRpY2F0b3IJKi8KKworCisvKiAgKioqKioqKioqKioqKioqKioqKiogIFRXTy1XSVJFIElOVEVSRkFDRSAoVFdJKSBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUV0lfQ0xLRElWIE1hY3JvcyAoVXNlOiAqcFRXSV9DTEtESVYgPSBDTEtMT1coeCl8Q0xLSEkoeSk7ICApCQkJCSovCisjZGVmaW5lCUNMS0xPVyh4KQkoKHgpICYgMHhGRikJCS8qIFBlcmlvZHMgQ2xvY2sgSXMgSGVsZCBMb3cJCQkqLworI2RlZmluZSBDTEtISSh5KQkoKCh5KSYweEZGKTw8MHg4KQkvKiBQZXJpb2RzIEJlZm9yZSBOZXcgQ2xvY2sgTG93CQkJKi8KKworLyogVFdJX1BSRVNDQUxFIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUJUFJFU0NBTEUJMHgwMDdGCQkvKiBTQ0xLcyBQZXIgSW50ZXJuYWwgVGltZSBSZWZlcmVuY2UgKDEwTUh6KQkqLworI2RlZmluZQlUV0lfRU5BCQkweDAwODAJCS8qIFRXSSBFbmFibGUJCQkJCQkJCQkqLworI2RlZmluZQlTQ0NCCQkweDAyMDAJCS8qIFNDQ0IgQ29tcGF0aWJpbGl0eSBFbmFibGUJCQkJCSovCisKKy8qIFRXSV9TTEFWRV9DVEwgTWFza3MJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZQlTRU4JCQkweDAwMDEJCS8qIFNsYXZlIEVuYWJsZQkJCQkJCQkJCSovCisjZGVmaW5lCVNBRERfTEVOCTB4MDAwMgkJLyogU2xhdmUgQWRkcmVzcyBMZW5ndGgJCQkJCQkJKi8KKyNkZWZpbmUJU1REVkFMCQkweDAwMDQJCS8qIFNsYXZlIFRyYW5zbWl0IERhdGEgVmFsaWQJCQkJCSovCisjZGVmaW5lCU5BSwkJCTB4MDAwOAkJLyogTkFLL0FDSyogR2VuZXJhdGVkIEF0IENvbmNsdXNpb24gT2YgVHJhbnNmZXIgKi8KKyNkZWZpbmUJR0VOCQkJMHgwMDEwCQkvKiBHZW5lcmFsIENhbGwgQWRycmVzcyBNYXRjaGluZyBFbmFibGVkCQkqLworCisvKiBUV0lfU0xBVkVfU1RBVCBNYXNrcwkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCVNESVIJCTB4MDAwMQkJLyogU2xhdmUgVHJhbnNmZXIgRGlyZWN0aW9uIChUcmFuc21pdC9SZWNlaXZlKikJKi8KKyNkZWZpbmUgR0NBTEwJCTB4MDAwMgkJLyogR2VuZXJhbCBDYWxsIEluZGljYXRvcgkJCQkJCSovCisKKy8qIFRXSV9NQVNURVJfQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCU1FTgkJCTB4MDAwMQkJLyogTWFzdGVyIE1vZGUgRW5hYmxlCQkJCQkJKi8KKyNkZWZpbmUJTUFERF9MRU4JMHgwMDAyCQkvKiBNYXN0ZXIgQWRkcmVzcyBMZW5ndGgJCQkJCSovCisjZGVmaW5lCU1ESVIJCTB4MDAwNAkJLyogTWFzdGVyIFRyYW5zbWl0IERpcmVjdGlvbiAoUlgvVFgqKQkJKi8KKyNkZWZpbmUJRkFTVAkJMHgwMDA4CQkvKiBVc2UgRmFzdCBNb2RlIFRpbWluZyBTcGVjcwkJCQkqLworI2RlZmluZQlTVE9QCQkweDAwMTAJCS8qIElzc3VlIFN0b3AgQ29uZGl0aW9uCQkJCQkJKi8KKyNkZWZpbmUJUlNUQVJUCQkweDAwMjAJCS8qIFJlcGVhdCBTdGFydCBvciBTdG9wKiBBdCBFbmQgT2YgVHJhbnNmZXIJKi8KKyNkZWZpbmUJRENOVAkJMHgzRkMwCQkvKiBEYXRhIEJ5dGVzIFRvIFRyYW5zZmVyCQkJCQkqLworI2RlZmluZQlTREFPVlIJCTB4NDAwMAkJLyogU2VyaWFsIERhdGEgT3ZlcnJpZGUJCQkJCQkqLworI2RlZmluZQlTQ0xPVlIJCTB4ODAwMAkJLyogU2VyaWFsIENsb2NrIE92ZXJyaWRlCQkJCQkqLworCisvKiBUV0lfTUFTVEVSX1NUQVQgTWFza3MJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCU1QUk9HCQkweDAwMDEJCS8qIE1hc3RlciBUcmFuc2ZlciBJbiBQcm9ncmVzcwkJCQkJKi8KKyNkZWZpbmUJTE9TVEFSQgkJMHgwMDAyCQkvKiBMb3N0IEFyYml0cmF0aW9uIEluZGljYXRvciAoWGZlciBBYm9ydGVkKQkqLworI2RlZmluZQlBTkFLCQkweDAwMDQJCS8qIEFkZHJlc3MgTm90IEFja25vd2xlZGdlZAkJCQkJCSovCisjZGVmaW5lCUROQUsJCTB4MDAwOAkJLyogRGF0YSBOb3QgQWNrbm93bGVkZ2VkCQkJCQkJKi8KKyNkZWZpbmUJQlVGUkRFUlIJMHgwMDEwCQkvKiBCdWZmZXIgUmVhZCBFcnJvcgkJCQkJCQkqLworI2RlZmluZQlCVUZXUkVSUgkweDAwMjAJCS8qIEJ1ZmZlciBXcml0ZSBFcnJvcgkJCQkJCQkqLworI2RlZmluZQlTREFTRU4JCTB4MDA0MAkJLyogU2VyaWFsIERhdGEgU2Vuc2UJCQkJCQkJKi8KKyNkZWZpbmUJU0NMU0VOCQkweDAwODAJCS8qIFNlcmlhbCBDbG9jayBTZW5zZQkJCQkJCQkqLworI2RlZmluZQlCVVNCVVNZCQkweDAxMDAJCS8qIEJ1cyBCdXN5IEluZGljYXRvcgkJCQkJCQkqLworCisvKiBUV0lfSU5UX1NSQyBhbmQgVFdJX0lOVF9FTkFCTEUgTWFza3MJCQkJCQkqLworI2RlZmluZQlTSU5JVAkJMHgwMDAxCQkvKiBTbGF2ZSBUcmFuc2ZlciBJbml0aWF0ZWQJKi8KKyNkZWZpbmUJU0NPTVAJCTB4MDAwMgkJLyogU2xhdmUgVHJhbnNmZXIgQ29tcGxldGUJKi8KKyNkZWZpbmUJU0VSUgkJMHgwMDA0CQkvKiBTbGF2ZSBUcmFuc2ZlciBFcnJvcgkJKi8KKyNkZWZpbmUJU09WRgkJMHgwMDA4CQkvKiBTbGF2ZSBPdmVyZmxvdwkJCSovCisjZGVmaW5lCU1DT01QCQkweDAwMTAJCS8qIE1hc3RlciBUcmFuc2ZlciBDb21wbGV0ZQkqLworI2RlZmluZQlNRVJSCQkweDAwMjAJCS8qIE1hc3RlciBUcmFuc2ZlciBFcnJvcgkqLworI2RlZmluZQlYTVRTRVJWCQkweDAwNDAJCS8qIFRyYW5zbWl0IEZJRk8gU2VydmljZQkqLworI2RlZmluZQlSQ1ZTRVJWCQkweDAwODAJCS8qIFJlY2VpdmUgRklGTyBTZXJ2aWNlCQkqLworCisvKiBUV0lfRklGT19DVFJMIE1hc2tzCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUJWE1URkxVU0gJMHgwMDAxCQkvKiBUcmFuc21pdCBCdWZmZXIgRmx1c2gJCQkqLworI2RlZmluZQlSQ1ZGTFVTSAkweDAwMDIJCS8qIFJlY2VpdmUgQnVmZmVyIEZsdXNoCQkJCSovCisjZGVmaW5lCVhNVElOVExFTgkweDAwMDQJCS8qIFRyYW5zbWl0IEJ1ZmZlciBJbnRlcnJ1cHQgTGVuZ3RoCSovCisjZGVmaW5lCVJDVklOVExFTgkweDAwMDgJCS8qIFJlY2VpdmUgQnVmZmVyIEludGVycnVwdCBMZW5ndGgJKi8KKworLyogVFdJX0ZJRk9fU1RBVCBNYXNrcwkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCVhNVFNUQVQJCTB4MDAwMwkJLyogVHJhbnNtaXQgRklGTyBTdGF0dXMJCQkJCQkJKi8KKyNkZWZpbmUJWE1UX0VNUFRZCTB4MDAwMAkJLyogCQlUcmFuc21pdCBGSUZPIEVtcHR5CQkJCQkJKi8KKyNkZWZpbmUJWE1UX0hBTEYJMHgwMDAxCQkvKiAJCVRyYW5zbWl0IEZJRk8gSGFzIDEgQnl0ZSBUbyBXcml0ZQkJKi8KKyNkZWZpbmUJWE1UX0ZVTEwJMHgwMDAzCQkvKiAJCVRyYW5zbWl0IEZJRk8gRnVsbCAoMiBCeXRlcyBUbyBXcml0ZSkJKi8KKworI2RlZmluZQlSQ1ZTVEFUCQkweDAwMEMJCS8qIFJlY2VpdmUgRklGTyBTdGF0dXMJCQkJCQkJKi8KKyNkZWZpbmUJUkNWX0VNUFRZCTB4MDAwMAkJLyogCQlSZWNlaXZlIEZJRk8gRW1wdHkJCQkJCQkqLworI2RlZmluZQlSQ1ZfSEFMRgkweDAwMDQJCS8qIAkJUmVjZWl2ZSBGSUZPIEhhcyAxIEJ5dGUgVG8gUmVhZAkJCSovCisjZGVmaW5lCVJDVl9GVUxMCTB4MDAwQwkJLyogCQlSZWNlaXZlIEZJRk8gRnVsbCAoMiBCeXRlcyBUbyBSZWFkKQkJKi8KKworCisvKiAgKioqKioqKioqKioqKioqKioqKiAgUElOIENPTlRST0wgUkVHSVNURVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFBPUlRfTVVYIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUJUEpTRQkJCTB4MDAwMQkJCS8qIFBvcnQgSiBTUEkvU1BPUlQgRW5hYmxlCQkJKi8KKyNkZWZpbmUJUEpTRV9TUE9SVAkJMHgwMDAwCQkJLyogCQlFbmFibGUgVEZTMC9EVDBQUkkJCQkqLworI2RlZmluZQlQSlNFX1NQSQkJMHgwMDAxCQkJLyogCQlFbmFibGUgU1BJX1NTRUwzOjIJCQkqLworCisjZGVmaW5lCVBKQ0UoeCkJCQkoKCh4KSYweDMpPDwxKQkvKiBQb3J0IEogQ0FOL1NQSS9TUE9SVCBFbmFibGUJCSovCisjZGVmaW5lCVBKQ0VfU1BPUlQJCTB4MDAwMAkJCS8qIAkJRW5hYmxlIERSMFNFQy9EVDBTRUMJCSovCisjZGVmaW5lCVBKQ0VfQ0FOCQkweDAwMDIJCQkvKiAJCUVuYWJsZSBDQU4gUlgvVFgJCQkqLworI2RlZmluZQlQSkNFX1NQSQkJMHgwMDA0CQkJLyogCQlFbmFibGUgU1BJX1NTRUw3CQkJKi8KKworI2RlZmluZQlQRkRFCQkJMHgwMDA4CQkJLyogUG9ydCBGIERNQSBSZXF1ZXN0IEVuYWJsZQkJKi8KKyNkZWZpbmUJUEZERV9VQVJUCQkweDAwMDAJCQkvKiAJCUVuYWJsZSBVQVJUMCBSWC9UWAkJCSovCisjZGVmaW5lCVBGREVfRE1BCQkweDAwMDgJCQkvKiAJCUVuYWJsZSBETUFSMTowCQkJCSovCisKKyNkZWZpbmUJUEZURQkJCTB4MDAxMAkJCS8qIFBvcnQgRiBUaW1lciBFbmFibGUJCQkJKi8KKyNkZWZpbmUJUEZURV9VQVJUCQkweDAwMDAJCQkvKgkJRW5hYmxlIFVBUlQxIFJYL1RYCQkJKi8KKyNkZWZpbmUJUEZURV9USU1FUgkJMHgwMDEwCQkJLyogCQlFbmFibGUgVE1SNzo2CQkJCSovCisKKyNkZWZpbmUJUEZTNkUJCQkweDAwMjAJCQkvKiBQb3J0IEYgU1BJIFNTRUwgNiBFbmFibGUJCQkqLworI2RlZmluZQlQRlM2RV9USU1FUgkJMHgwMDAwCQkJLyoJCUVuYWJsZSBUTVI1CQkJCQkqLworI2RlZmluZQlQRlM2RV9TUEkJCTB4MDAyMAkJCS8qIAkJRW5hYmxlIFNQSV9TU0VMNgkJCSovCisKKyNkZWZpbmUJUEZTNUUJCQkweDAwNDAJCQkvKiBQb3J0IEYgU1BJIFNTRUwgNSBFbmFibGUJCQkqLworI2RlZmluZQlQRlM1RV9USU1FUgkJMHgwMDAwCQkJLyoJCUVuYWJsZSBUTVI0CQkJCQkqLworI2RlZmluZQlQRlM1RV9TUEkJCTB4MDA0MAkJCS8qIAkJRW5hYmxlIFNQSV9TU0VMNQkJCSovCisKKyNkZWZpbmUJUEZTNEUJCQkweDAwODAJCQkvKiBQb3J0IEYgU1BJIFNTRUwgNCBFbmFibGUJCQkqLworI2RlZmluZQlQRlM0RV9USU1FUgkJMHgwMDAwCQkJLyoJCUVuYWJsZSBUTVIzCQkJCQkqLworI2RlZmluZQlQRlM0RV9TUEkJCTB4MDA4MAkJCS8qIAkJRW5hYmxlIFNQSV9TU0VMNAkJCSovCisKKyNkZWZpbmUJUEZGRQkJCTB4MDEwMAkJCS8qIFBvcnQgRiBQUEkgRnJhbWUgU3luYyBFbmFibGUJCSovCisjZGVmaW5lCVBGRkVfVElNRVIJCTB4MDAwMAkJCS8qIAkJRW5hYmxlIFRNUjIJCQkJCSovCisjZGVmaW5lCVBGRkVfUFBJCQkweDAxMDAJCQkvKiAJCUVuYWJsZSBQUEkgRlMzCQkJCSovCisKKyNkZWZpbmUJUEdTRQkJCTB4MDIwMAkJCS8qIFBvcnQgRyBTUE9SVDEgU2Vjb25kYXJ5IEVuYWJsZQkqLworI2RlZmluZQlQR1NFX1BQSQkJMHgwMDAwCQkJLyogCQlFbmFibGUgUFBJIEQ5OjgJCQkJKi8KKyNkZWZpbmUJUEdTRV9TUE9SVAkJMHgwMjAwCQkJLyogCQlFbmFibGUgRFIxU0VDL0RUMVNFQwkJKi8KKworI2RlZmluZQlQR1JFCQkJMHgwNDAwCQkJLyogUG9ydCBHIFNQT1JUMSBSZWNlaXZlIEVuYWJsZQkJKi8KKyNkZWZpbmUJUEdSRV9QUEkJCTB4MDAwMAkJCS8qIAkJRW5hYmxlIFBQSSBEMTI6MTAJCQkqLworI2RlZmluZQlQR1JFX1NQT1JUCQkweDA0MDAJCQkvKiAJCUVuYWJsZSBEUjFQUkkvUkZTMS9SU0NMSzEJKi8KKworI2RlZmluZQlQR1RFCQkJMHgwODAwCQkJLyogUG9ydCBHIFNQT1JUMSBUcmFuc21pdCBFbmFibGUJKi8KKyNkZWZpbmUJUEdURV9QUEkJCTB4MDAwMAkJCS8qIAkJRW5hYmxlIFBQSSBEMTU6MTMJCQkqLworI2RlZmluZQlQR1RFX1NQT1JUCQkweDA4MDAJCQkvKiAJCUVuYWJsZSBEVDFQUkkvVEZTMS9UU0NMSzEJKi8KKworCisvKiAgKioqKioqKioqKioqKioqKioqICBIQU5EU0hBS0UgRE1BIChIRE1BKSBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqLworLyogSERNQXhfQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZQlITURNQUVOCQkweDAwMDEJLyogRW5hYmxlIEhhbmRzaGFrZSBETUEgMC8xCQkJCQkqLworI2RlZmluZQlSRVAJCQkweDAwMDIJLyogSERNQSBSZXF1ZXN0IFBvbGFyaXR5CQkJCQkqLworI2RlZmluZQlVVEUJCQkweDAwMDQJLyogVXJnZW5jeSBUaHJlc2hvbGQgRW5hYmxlCQkJCQkqLworI2RlZmluZQlPSUUJCQkweDAwMTAJLyogT3ZlcmZsb3cgSW50ZXJydXB0IEVuYWJsZQkJCQkqLworI2RlZmluZQlCRElFCQkweDAwMjAJLyogQmxvY2sgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlCQkJCSovCisjZGVmaW5lCU1CREkJCTB4MDA0MAkvKiBNYXNrIEJsb2NrIERvbmUgSVJRIElmIFBlbmRpbmcgRUNOVAkJKi8KKyNkZWZpbmUJRFJRCQkJMHgwMzAwCS8qIEhETUEgUmVxdWVzdCBUeXBlCQkJCQkJKi8KKyNkZWZpbmUJRFJRX05PTkUJMHgwMDAwCS8qIAkJTm8gUmVxdWVzdAkJCQkJCQkqLworI2RlZmluZQlEUlFfU0lOR0xFCTB4MDEwMAkvKiAJCUNoYW5uZWxzIFJlcXVlc3QgU2luZ2xlCQkJCSovCisjZGVmaW5lCURSUV9NVUxUSQkweDAyMDAJLyogCQlDaGFubmVscyBSZXF1ZXN0IE11bHRpIChEZWZhdWx0KQkqLworI2RlZmluZQlEUlFfVVJHRU5UCTB4MDMwMAkvKiAJCUNoYW5uZWxzIFJlcXVlc3QgTXVsdGkgVXJnZW50CQkqLworI2RlZmluZQlSQkMJCQkweDEwMDAJLyogUmVsb2FkIEJDTlQgV2l0aCBJQkNOVAkJCQkJKi8KKyNkZWZpbmUJUFMJCQkweDIwMDAJLyogSERNQSBQaW4gU3RhdHVzCQkJCQkJCSovCisjZGVmaW5lCU9JCQkJMHg0MDAwCS8qIE92ZXJmbG93IEludGVycnVwdCBHZW5lcmF0ZWQJCQkJKi8KKyNkZWZpbmUJQkRJCQkJMHg4MDAwCS8qIEJsb2NrIERvbmUgSW50ZXJydXB0IEdlbmVyYXRlZAkJCSovCisKKy8qIGVudHJ5IGFkZHJlc3NlcyBvZiB0aGUgdXNlci1jYWxsYWJsZSBCb290IFJPTSBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBfQk9PVFJPTV9SRVNFVCAweEVGMDAwMDAwCisjZGVmaW5lIF9CT09UUk9NX0ZJTkFMX0lOSVQgMHhFRjAwMDAwMgorI2RlZmluZSBfQk9PVFJPTV9ET19NRU1PUllfRE1BIDB4RUYwMDAwMDYKKyNkZWZpbmUgX0JPT1RST01fQk9PVF9EWEVfRkxBU0ggMHhFRjAwMDAwOAorI2RlZmluZSBfQk9PVFJPTV9CT09UX0RYRV9TUEkgMHhFRjAwMDAwQQorI2RlZmluZSBfQk9PVFJPTV9CT09UX0RYRV9UV0kgMHhFRjAwMDAwQworI2RlZmluZSBfQk9PVFJPTV9HRVRfRFhFX0FERFJFU1NfRkxBU0ggMHhFRjAwMDAxMAorI2RlZmluZSBfQk9PVFJPTV9HRVRfRFhFX0FERFJFU1NfU1BJIDB4RUYwMDAwMTIKKyNkZWZpbmUgX0JPT1RST01fR0VUX0RYRV9BRERSRVNTX1RXSSAweEVGMDAwMDE0CisKKy8qIEFsdGVybmF0ZSBEZXByZWNhdGVkIE1hY3JvcyBQcm92aWRlZCBGb3IgQmFja3dhcmRzIENvZGUgQ29tcGF0aWJpbGl0eSAqLworI2RlZmluZQlQR0RFX1VBUlQgICBQRkRFX1VBUlQKKyNkZWZpbmUJUEdERV9ETUEgICAgUEZERV9ETUEKKyNkZWZpbmUJQ0tFTE9XCQlTQ0tFTE9XCisKKy8qIEhPU1QgUG9ydCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ09OVFJPTCAgMHhmZmMwMzQwMCAgIC8qIEhPU1QgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRVUyAgMHhmZmMwMzQwNCAgIC8qIEhPU1QgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9TVF9USU1FT1VUICAweGZmYzAzNDA4ICAgLyogSE9TVCBBY2tub3dsZWRnZSBNb2RlIFRpbWVvdXQgUmVnaXN0ZXIgKi8KKworLyogQ291bnRlciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ05UX0NPTkZJRyAgMHhmZmMwMzUwMCAgIC8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDTlRfSU1BU0sgIDB4ZmZjMDM1MDQgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ05UX1NUQVRVUyAgMHhmZmMwMzUwOCAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTlRfQ09NTUFORCAgMHhmZmMwMzUwYyAgIC8qIENvbW1hbmQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDTlRfREVCT1VOQ0UgIDB4ZmZjMDM1MTAgICAvKiBEZWJvdW5jZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTlRfQ09VTlRFUiAgMHhmZmMwMzUxNCAgIC8qIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIENOVF9NQVggIDB4ZmZjMDM1MTggICAvKiBNYXhpbWFsIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBDTlRfTUlOICAweGZmYzAzNTFjICAgLyogTWluaW1hbCBDb3VudCBSZWdpc3RlciAqLworCisvKiBPVFAvRlVTRSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBPVFBfQ09OVFJPTCAgMHhmZmMwMzYwMCAgIC8qIE9UUC9GdXNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIE9UUF9CRU4gIDB4ZmZjMDM2MDQgICAvKiBPVFAvRnVzZSBCeXRlIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgT1RQX1NUQVRVUyAgMHhmZmMwMzYwOCAgIC8qIE9UUC9GdXNlIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgT1RQX1RJTUlORyAgMHhmZmMwMzYwYyAgIC8qIE9UUC9GdXNlIEFjY2VzcyBUaW1pbmcgKi8KKworLyogU2VjdXJpdHkgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNFQ1VSRV9TWVNTV1QgIDB4ZmZjMDM2MjAgICAvKiBTZWN1cmUgU3lzdGVtIFN3aXRjaGVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFQ1VSRV9DT05UUk9MICAweGZmYzAzNjI0ICAgLyogU2VjdXJlIENvbnRyb2wgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNFQ1VSRV9TVEFUVVMgIDB4ZmZjMDM2MjggICAvKiBTZWN1cmUgU3RhdHVzICovCisKKy8qIE9UUCBSZWFkL1dyaXRlIERhdGEgQnVmZmVyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgT1RQX0RBVEEwICAweGZmYzAzNjgwICAgLyogT1RQL0Z1c2UgRGF0YSAoT1RQX0RBVEEwLTMpIGFjY2Vzc2VzIHRoZSBmdXNlIHJlYWQgd3JpdGUgYnVmZmVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgT1RQX0RBVEExICAweGZmYzAzNjg0ICAgLyogT1RQL0Z1c2UgRGF0YSAoT1RQX0RBVEEwLTMpIGFjY2Vzc2VzIHRoZSBmdXNlIHJlYWQgd3JpdGUgYnVmZmVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgT1RQX0RBVEEyICAweGZmYzAzNjg4ICAgLyogT1RQL0Z1c2UgRGF0YSAoT1RQX0RBVEEwLTMpIGFjY2Vzc2VzIHRoZSBmdXNlIHJlYWQgd3JpdGUgYnVmZmVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgT1RQX0RBVEEzICAweGZmYzAzNjhjICAgLyogT1RQL0Z1c2UgRGF0YSAoT1RQX0RBVEEwLTMpIGFjY2Vzc2VzIHRoZSBmdXNlIHJlYWQgd3JpdGUgYnVmZmVyICovCisKKy8qIE1vdG9yIENvbnRyb2wgUFdNIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFBXTV9DVFJMICAweGZmYzAzNzAwICAgLyogUFdNIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgUFdNX1NUQVQgIDB4ZmZjMDM3MDQgICAvKiBQV00gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgUFdNX1RNICAweGZmYzAzNzA4ICAgLyogUFdNIFBlcmlvZCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgIFBXTV9EVCAgMHhmZmMwMzcwYyAgIC8qIFBXTSBEZWFkIFRpbWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgUFdNX0dBVEUgIDB4ZmZjMDM3MTAgICAvKiBQV00gQ2hvcHBpbmcgQ29udHJvbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgUFdNX0NIQSAgMHhmZmMwMzcxNCAgIC8qIFBXTSBDaGFubmVsIEEgRHV0eSBDb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBQV01fQ0hCICAweGZmYzAzNzE4ICAgLyogUFdNIENoYW5uZWwgQiBEdXR5IENvbnRyb2wgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIFBXTV9DSEMgIDB4ZmZjMDM3MWMgICAvKiBQV00gQ2hhbm5lbCBDIER1dHkgQ29udHJvbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgUFdNX1NFRyAgMHhmZmMwMzcyMCAgIC8qIFBXTSBDcm9zc292ZXIgYW5kIE91dHB1dCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBXTV9TWU5DV1QgIDB4ZmZjMDM3MjQgICAvKiBQV00gU3luYyBQbHVzZSBXaWR0aCBDb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFBXTV9DSEFMICAweGZmYzAzNzI4ICAgLyogUFdNIENoYW5uZWwgQUwgRHV0eSBDb250cm9sIChTUiBtb2RlIG9ubHkpICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFBXTV9DSEJMICAweGZmYzAzNzJjICAgLyogUFdNIENoYW5uZWwgQkwgRHV0eSBDb250cm9sIChTUiBtb2RlIG9ubHkpICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFBXTV9DSENMICAweGZmYzAzNzMwICAgLyogUFdNIENoYW5uZWwgQ0wgRHV0eSBDb250cm9sIChTUiBtb2RlIG9ubHkpICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBQV01fTFNJICAweGZmYzAzNzM0ICAgLyogUFdNIExvdyBTaWRlIEludmVydCAoU1IgbW9kZSBvbmx5KSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFBXTV9TVEFUMiAgMHhmZmMwMzczOCAgIC8qIFBXTSBTdGF0dXMgUmVnaXN0ZXIgMiAqLworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qICAgICBTSU5HTEUgQklUIE1BQ1JPIFBBSVJTIChiaXQgbWFzayBhbmQgbmVnYXRlZCBvbmUpICAgICAgKi8KKy8qICAgICBhbmQgTVVMVEkgQklUIFJFQUQgTUFDUk9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworLyogQml0IG1hc2tzIGZvciBIT1NUX0NPTlRST0wgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfSE9TVF9FTiAgMHgxICAgICAgICAvKiBIb3N0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9uSE9TVF9FTiAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX0hPU1RfRU5EICAweDIgICAgICAgIC8qIEhvc3QgRW5kaWFuZXNzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfbkhPU1RfRU5EICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9EQVRBX1NJWkUgIDB4NCAgICAgICAgLyogRGF0YSBTaXplICovCisjZGVmaW5lICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9uREFUQV9TSVpFICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfSE9TVF9SU1QgIDB4OCAgICAgICAgLyogSG9zdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX25IT1NUX1JTVCAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX0hSRFlfT1ZSICAweDIwICAgICAgIC8qIEhvc3QgUmVhZHkgT3ZlcnJpZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9uSFJEWV9PVlIgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9JTlRfTU9ERSAgMHg0MCAgICAgICAvKiBJbnRlcnJ1cHQgTW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX25JTlRfTU9ERSAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX0JUX0VOICAweDgwICAgICAgIC8qIEJ1cyBUaW1lb3V0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfIG5CVF9FTiAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfRUhXICAweDEwMCAgICAgIC8qIEVuYWJsZSBIb3N0IFdyaXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9uRUhXICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9FSFIgIDB4MjAwICAgICAgLyogRW5hYmxlIEhvc3QgUmVhZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfbkVIUiAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfQkRSICAweDQwMCAgICAgIC8qIEJ1cnN0IERNQSBSZXF1ZXN0cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfbkJEUiAgMHgwCisKKy8qIEJpdCBtYXNrcyBmb3IgSE9TVF9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9SRUFEWSAgMHgxICAgICAgICAvKiBETUEgUmVhZHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9uUkVBRFkgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9GSUZPRlVMTCAgMHgyICAgICAgICAvKiBGSUZPIEZ1bGwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9uRklGT0ZVTEwgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX0ZJRk9FTVBUWSAgMHg0ICAgICAgICAvKiBGSUZPIEVtcHR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9uRklGT0VNUFRZICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfQ09NUExFVEUgIDB4OCAgICAgICAgLyogRE1BIENvbXBsZXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfbkNPTVBMRVRFICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX0hTSEsgIDB4MTAgICAgICAgLyogSG9zdCBIYW5kc2hha2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfbkhTSEsgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfVElNRU9VVCAgMHgyMCAgICAgICAvKiBIb3N0IFRpbWVvdXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfblRJTUVPVVQgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfSElSUSAgMHg0MCAgICAgICAvKiBIb3N0IEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX25ISVJRICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgSE9TVF9TVEFUX0FMTE9XX0NORkcgIDB4ODAgICAgICAgLyogQWxsb3cgTmV3IENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBIT1NUX1NUQVRfbkFMTE9XX0NORkcgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfRE1BX0RJUiAgMHgxMDAgICAgICAvKiBETUEgRGlyZWN0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX25ETUFfRElSICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9CVEUgIDB4MjAwICAgICAgLyogQnVzIFRpbWVvdXQgRW5hYmxlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfbkJURSAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgSE9TVF9TVEFUX0hPU1RSRF9ET05FICAweDgwMDAgICAgIC8qIEhvc3QgUmVhZCBDb21wbGV0aW9uIEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgSE9TVF9TVEFUX25IT1NUUkRfRE9ORSAgMHgwCisKKy8qIEJpdCBtYXNrcyBmb3IgSE9TVF9USU1FT1VUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgSE9TVF9DT1VOVF9USU1FT1VUICAweDdmZiAgICAgIC8qIEhvc3QgVGltZW91dCBjb3VudCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNFQ1VSRV9TWVNTV1QgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBFTVVEQUJMICAweDEgICAgICAgIC8qIEVtdWxhdGlvbiBEaXNhYmxlLiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5FTVVEQUJMICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUlNUREFCTCAgMHgyICAgICAgICAvKiBSZXNldCBEaXNhYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblJTVERBQkwgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBMMUlEQUJMICAweDFjICAgICAgIC8qIEwxIEluc3RydWN0aW9uIE1lbW9yeSBEaXNhYmxlLiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEwxREFEQUJMICAweGUwICAgICAgIC8qIEwxIERhdGEgQmFuayBBIE1lbW9yeSBEaXNhYmxlLiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEwxREJEQUJMICAweDcwMCAgICAgIC8qIEwxIERhdGEgQmFuayBCIE1lbW9yeSBEaXNhYmxlLiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUEwT1ZSICAweDgwMCAgICAgIC8qIERNQTAgTWVtb3J5IEFjY2VzcyBPdmVycmlkZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ETUEwT1ZSICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BMU9WUiAgMHgxMDAwICAgICAvKiBETUExIE1lbW9yeSBBY2Nlc3MgT3ZlcnJpZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRE1BMU9WUiAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFTVVPVlIgIDB4NDAwMCAgICAgLyogRW11bGF0aW9uIE92ZXJyaWRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FTVVPVlIgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgT1RQU0VOICAweDgwMDAgICAgIC8qIE9UUCBTZWNyZXRzIEVuYWJsZS4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk9UUFNFTiAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBMMkRBQkwgIDB4NzAwMDAgICAgLyogTDIgTWVtb3J5IERpc2FibGUuICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0VDVVJFX0NPTlRST0wgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNVUkUwICAweDEgICAgICAgIC8qIFNFQ1VSRSAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblNFQ1VSRTAgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNVUkUxICAweDIgICAgICAgIC8qIFNFQ1VSRSAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblNFQ1VSRTEgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNVUkUyICAweDQgICAgICAgIC8qIFNFQ1VSRSAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblNFQ1VSRTIgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNVUkUzICAweDggICAgICAgIC8qIFNFQ1VSRSAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblNFQ1VSRTMgIDB4MAorCisvKiBCaXQgbWFza3MgZm9yIFNFQ1VSRV9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNNT0RFICAweDMgICAgICAgIC8qIFNlY3VyZWQgTW9kZSBDb250cm9sIFN0YXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBOTUkgIDB4NCAgICAgICAgLyogTm9uIE1hc2thYmxlIEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuTk1JICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQUZWQUxJRCAgMHg4ICAgICAgICAvKiBBdXRoZW50aWNhdGlvbiBGaXJtd2FyZSBWYWxpZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5BRlZBTElEICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEFGRVhJVCAgMHgxMCAgICAgICAvKiBBdXRoZW50aWNhdGlvbiBGaXJtd2FyZSBFeGl0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5BRkVYSVQgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNTVEFUICAweGUwICAgICAgIC8qIFNlY3VyZSBTdGF0dXMgKi8KIAogI2VuZGlmIC8qIF9ERUZfQkY1MTJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxeF9iYXNlLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTF4X2Jhc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY4NDkxMy4uMDAwMDAwMAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTF4X2Jhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCi0gKi8KLQotI2lmbmRlZiBfREVGX0JGNTFYX0gKLSNkZWZpbmUgX0RFRl9CRjUxWF9ICi0KLQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLS8qICAgU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgQ09NTU9OIFRPIEFMTCBBRFNQLUJGNTF4ICAgICovCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0vKiBDbG9jayBhbmQgU3lzdGVtIENvbnRyb2wJKDB4RkZDMDAwMDAgLSAweEZGQzAwMEZGKQkJCQkJCQkJKi8KLSNkZWZpbmUgUExMX0NUTAkJCQkweEZGQzAwMDAwCS8qIFBMTCBDb250cm9sIFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgUExMX0RJVgkJCQkweEZGQzAwMDA0CS8qIFBMTCBEaXZpZGUgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBWUl9DVEwJCQkJMHhGRkMwMDAwOAkvKiBWb2x0YWdlIFJlZ3VsYXRvciBDb250cm9sIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFBMTF9TVEFUCQkJMHhGRkMwMDAwQwkvKiBQTEwgU3RhdHVzIFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgUExMX0xPQ0tDTlQJCQkweEZGQzAwMDEwCS8qIFBMTCBMb2NrIENvdW50IFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBDSElQSUQJCQkJMHhGRkMwMDAxNAkvKiBEZXZpY2UgSUQgUmVnaXN0ZXIgKi8KLQotLyogU3lzdGVtIEludGVycnVwdCBDb250cm9sbGVyICgweEZGQzAwMTAwIC0gMHhGRkMwMDFGRikJCQkJCQkJCSovCi0jZGVmaW5lIFNXUlNUCQkJCTB4RkZDMDAxMDAJLyogU29mdHdhcmUgUmVzZXQgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFNZU0NSCQkJCTB4RkZDMDAxMDQJLyogU3lzdGVtIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgU0lDX1JWRUNUCQkJMHhGRkMwMDEwOAkvKiBJbnRlcnJ1cHQgUmVzZXQgVmVjdG9yIEFkZHJlc3MgUmVnaXN0ZXIJCQkqLwotCi0jZGVmaW5lIFNJQ19JTUFTSzAJCQkweEZGQzAwMTBDCS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBTSUNfSUFSMAkJCTB4RkZDMDAxMTAJLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgMAkJCQkqLwotI2RlZmluZSBTSUNfSUFSMQkJCTB4RkZDMDAxMTQJLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgMQkJCQkqLwotI2RlZmluZSBTSUNfSUFSMgkJCTB4RkZDMDAxMTgJLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgMgkJCQkqLwotI2RlZmluZSBTSUNfSUFSMwkJCTB4RkZDMDAxMUMJLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgMwkJCQkqLwotI2RlZmluZSBTSUNfSVNSMAkJCTB4RkZDMDAxMjAJLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgU0lDX0lXUjAJCQkweEZGQzAwMTI0CS8qIEludGVycnVwdCBXYWtldXAgUmVnaXN0ZXIJCQkJCSovCi0KLS8qIFNJQyBBZGRpdGlvbnMgdG8gQURTUC1CRjUxeCAoMHhGRkMwMDE0QyAtIDB4RkZDMDAxNjIpICovCi0jZGVmaW5lIFNJQ19JTUFTSzEgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMDE0QyAgICAgLyogSW50ZXJydXB0IE1hc2sgcmVnaXN0ZXIgb2YgU0lDMiAqLwotI2RlZmluZSBTSUNfSUFSNCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDAxNTAgICAgIC8qIEludGVycnVwdCBBc3NpZ25tZW50IHJlZ2lzdGVyNCAqLwotI2RlZmluZSBTSUNfSUFSNSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDAxNTQgICAgIC8qIEludGVycnVwdCBBc3NpZ25tZW50IHJlZ2lzdGVyNSAqLwotI2RlZmluZSBTSUNfSUFSNiAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDAxNTggICAgIC8qIEludGVycnVwdCBBc3NpZ25tZW50IHJlZ2lzdGVyNiAqLwotI2RlZmluZSBTSUNfSUFSNyAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDAxNUMgICAgIC8qIEludGVycnVwdCBBc3NpZ25tZW50IHJlZ2lzdGVyNyAqLwotI2RlZmluZSBTSUNfSVNSMSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDAxNjAgICAgIC8qIEludGVycnVwdCBTdGF0dXIgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgU0lDX0lXUjEgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTY0ICAgICAvKiBJbnRlcnJ1cHQgV2FrZXVwIHJlZ2lzdGVyICovCi0KLQotLyogV2F0Y2hkb2cgVGltZXIJCQkoMHhGRkMwMDIwMCAtIDB4RkZDMDAyRkYpCQkJCQkJCQkqLwotI2RlZmluZSBXRE9HX0NUTAkJCTB4RkZDMDAyMDAJLyogV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBXRE9HX0NOVAkJCTB4RkZDMDAyMDQJLyogV2F0Y2hkb2cgQ291bnQgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFdET0dfU1RBVAkJCTB4RkZDMDAyMDgJLyogV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyCQkJCQkqLwotCi0KLS8qIFJlYWwgVGltZSBDbG9jawkJKDB4RkZDMDAzMDAgLSAweEZGQzAwM0ZGKQkJCQkJCQkJCSovCi0jZGVmaW5lIFJUQ19TVEFUCQkJMHhGRkMwMDMwMAkvKiBSVEMgU3RhdHVzIFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgUlRDX0lDVEwJCQkweEZGQzAwMzA0CS8qIFJUQyBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFJUQ19JU1RBVAkJCTB4RkZDMDAzMDgJLyogUlRDIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBSVENfU1dDTlQJCQkweEZGQzAwMzBDCS8qIFJUQyBTdG9wd2F0Y2ggQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgUlRDX0FMQVJNCQkJMHhGRkMwMDMxMAkvKiBSVEMgQWxhcm0gVGltZSBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgUlRDX0ZBU1QJCQkweEZGQzAwMzE0CS8qIFJUQyBQcmVzY2FsZXIgRW5hYmxlIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUlRDX1BSRU4JCQkweEZGQzAwMzE0CS8qIFJUQyBQcmVzY2FsZXIgRW5hYmxlIEFsdGVybmF0ZSBNYWNybwkJKi8KLQotCi0vKiBVQVJUMCBDb250cm9sbGVyCQkoMHhGRkMwMDQwMCAtIDB4RkZDMDA0RkYpCQkJCQkJCQkJKi8KLSNkZWZpbmUgVUFSVDBfVEhSCQkJMHhGRkMwMDQwMAkvKiBUcmFuc21pdCBIb2xkaW5nIHJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFVBUlQwX1JCUgkJCTB4RkZDMDA0MDAJLyogUmVjZWl2ZSBCdWZmZXIgcmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFVBUlQwX0RMTAkJCTB4RkZDMDA0MDAJLyogRGl2aXNvciBMYXRjaCAoTG93LUJ5dGUpCQkJCQkqLwotI2RlZmluZSBVQVJUMF9JRVIJCQkweEZGQzAwNDA0CS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgVUFSVDBfRExICQkJMHhGRkMwMDQwNAkvKiBEaXZpc29yIExhdGNoIChIaWdoLUJ5dGUpCQkJCSovCi0jZGVmaW5lIFVBUlQwX0lJUgkJCTB4RkZDMDA0MDgJLyogSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBVQVJUMF9MQ1IJCQkweEZGQzAwNDBDCS8qIExpbmUgQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgVUFSVDBfTUNSCQkJMHhGRkMwMDQxMAkvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBVQVJUMF9MU1IJCQkweEZGQzAwNDE0CS8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgVUFSVDBfTVNSCQkJMHhGRkMwMDQxOAkvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFVBUlQwX1NDUgkJCTB4RkZDMDA0MUMJLyogU0NSIFNjcmF0Y2ggUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBVQVJUMF9HQ1RMCQkJMHhGRkMwMDQyNAkvKiBHbG9iYWwgQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KLQotLyogU1BJMCBDb250cm9sbGVyCQkJKDB4RkZDMDA1MDAgLSAweEZGQzAwNUZGKQkJCQkJCQkqLwotI2RlZmluZSBTUEkwX1JFR0JBU0UJCQkweEZGQzAwNTAwCi0jZGVmaW5lIFNQSTBfQ1RMCQkJMHhGRkMwMDUwMAkvKiBTUEkgQ29udHJvbCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIFNQSTBfRkxHCQkJMHhGRkMwMDUwNAkvKiBTUEkgRmxhZyByZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIFNQSTBfU1RBVAkJCTB4RkZDMDA1MDgJLyogU1BJIFN0YXR1cyByZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIFNQSTBfVERCUgkJCTB4RkZDMDA1MEMJLyogU1BJIFRyYW5zbWl0IERhdGEgQnVmZmVyIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFNQSTBfUkRCUgkJCTB4RkZDMDA1MTAJLyogU1BJIFJlY2VpdmUgRGF0YSBCdWZmZXIgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgU1BJMF9CQVVECQkJMHhGRkMwMDUxNAkvKiBTUEkgQmF1ZCByYXRlIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBTUEkwX1NIQURPVwkJCTB4RkZDMDA1MTgJLyogU1BJX1JEQlIgU2hhZG93IFJlZ2lzdGVyCQkJCQkqLwotCi0vKiBTUEkxIENvbnRyb2xsZXIJCQkoMHhGRkMwMzQwMCAtIDB4RkZDMDM0RkYpCQkJCQkJCSovCi0jZGVmaW5lIFNQSTFfUkVHQkFTRQkJCTB4RkZDMDM0MDAKLSNkZWZpbmUgU1BJMV9DVEwJCQkweEZGQzAzNDAwCS8qIFNQSSBDb250cm9sIFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgU1BJMV9GTEcJCQkweEZGQzAzNDA0CS8qIFNQSSBGbGFnIHJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgU1BJMV9TVEFUCQkJMHhGRkMwMzQwOAkvKiBTUEkgU3RhdHVzIHJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgU1BJMV9UREJSCQkJMHhGRkMwMzQwQwkvKiBTUEkgVHJhbnNtaXQgRGF0YSBCdWZmZXIgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgU1BJMV9SREJSCQkJMHhGRkMwMzQxMAkvKiBTUEkgUmVjZWl2ZSBEYXRhIEJ1ZmZlciBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBTUEkxX0JBVUQJCQkweEZGQzAzNDE0CS8qIFNQSSBCYXVkIHJhdGUgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFNQSTFfU0hBRE9XCQkJMHhGRkMwMzQxOAkvKiBTUElfUkRCUiBTaGFkb3cgUmVnaXN0ZXIJCQkJCSovCi0KLS8qIFRJTUVSMC03IFJlZ2lzdGVycwkJKDB4RkZDMDA2MDAgLSAweEZGQzAwNkZGKQkJCQkJCQkJKi8KLSNkZWZpbmUgVElNRVIwX0NPTkZJRwkJMHhGRkMwMDYwMAkvKiBUaW1lciAwIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBUSU1FUjBfQ09VTlRFUgkJMHhGRkMwMDYwNAkvKiBUaW1lciAwIENvdW50ZXIgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFRJTUVSMF9QRVJJT0QJCTB4RkZDMDA2MDgJLyogVGltZXIgMCBQZXJpb2QgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFRJTUVSMF9XSURUSAkJMHhGRkMwMDYwQwkvKiBUaW1lciAwIFdpZHRoIFJlZ2lzdGVyCQkJCQkqLwotCi0jZGVmaW5lIFRJTUVSMV9DT05GSUcJCTB4RkZDMDA2MTAJLyogVGltZXIgMSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAJCQkqLwotI2RlZmluZSBUSU1FUjFfQ09VTlRFUgkJMHhGRkMwMDYxNAkvKiBUaW1lciAxIENvdW50ZXIgUmVnaXN0ZXIgICAgICAgIAkJCSovCi0jZGVmaW5lIFRJTUVSMV9QRVJJT0QJCTB4RkZDMDA2MTgJLyogVGltZXIgMSBQZXJpb2QgUmVnaXN0ZXIgICAgICAgICAJCQkqLwotI2RlZmluZSBUSU1FUjFfV0lEVEgJCTB4RkZDMDA2MUMJLyogVGltZXIgMSBXaWR0aCBSZWdpc3RlciAgICAgICAgICAJCQkqLwotCi0jZGVmaW5lIFRJTUVSMl9DT05GSUcJCTB4RkZDMDA2MjAJLyogVGltZXIgMiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAJCQkqLwotI2RlZmluZSBUSU1FUjJfQ09VTlRFUgkJMHhGRkMwMDYyNAkvKiBUaW1lciAyIENvdW50ZXIgUmVnaXN0ZXIgICAgICAgIAkJCSovCi0jZGVmaW5lIFRJTUVSMl9QRVJJT0QJCTB4RkZDMDA2MjgJLyogVGltZXIgMiBQZXJpb2QgUmVnaXN0ZXIgICAgICAgICAJCQkqLwotI2RlZmluZSBUSU1FUjJfV0lEVEgJCTB4RkZDMDA2MkMJLyogVGltZXIgMiBXaWR0aCBSZWdpc3RlciAgICAgICAgICAJCQkqLwotCi0jZGVmaW5lIFRJTUVSM19DT05GSUcJCTB4RkZDMDA2MzAJLyogVGltZXIgMyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgVElNRVIzX0NPVU5URVIJCTB4RkZDMDA2MzQJLyogVGltZXIgMyBDb3VudGVyIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBUSU1FUjNfUEVSSU9ECQkweEZGQzAwNjM4CS8qIFRpbWVyIDMgUGVyaW9kIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBUSU1FUjNfV0lEVEgJCTB4RkZDMDA2M0MJLyogVGltZXIgMyBXaWR0aCBSZWdpc3RlcgkJCQkJKi8KLQotI2RlZmluZSBUSU1FUjRfQ09ORklHCQkweEZGQzAwNjQwCS8qIFRpbWVyIDQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAgCQkJKi8KLSNkZWZpbmUgVElNRVI0X0NPVU5URVIJCTB4RkZDMDA2NDQJLyogVGltZXIgNCBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAJCQkqLwotI2RlZmluZSBUSU1FUjRfUEVSSU9ECQkweEZGQzAwNjQ4CS8qIFRpbWVyIDQgUGVyaW9kIFJlZ2lzdGVyICAgICAgICAgCQkJKi8KLSNkZWZpbmUgVElNRVI0X1dJRFRICQkweEZGQzAwNjRDCS8qIFRpbWVyIDQgV2lkdGggUmVnaXN0ZXIgICAgICAgICAgCQkJKi8KLQotI2RlZmluZSBUSU1FUjVfQ09ORklHCQkweEZGQzAwNjUwCS8qIFRpbWVyIDUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAgCQkJKi8KLSNkZWZpbmUgVElNRVI1X0NPVU5URVIJCTB4RkZDMDA2NTQJLyogVGltZXIgNSBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAJCQkqLwotI2RlZmluZSBUSU1FUjVfUEVSSU9ECQkweEZGQzAwNjU4CS8qIFRpbWVyIDUgUGVyaW9kIFJlZ2lzdGVyICAgICAgICAgCQkJKi8KLSNkZWZpbmUgVElNRVI1X1dJRFRICQkweEZGQzAwNjVDCS8qIFRpbWVyIDUgV2lkdGggUmVnaXN0ZXIgICAgICAgICAgCQkJKi8KLQotI2RlZmluZSBUSU1FUjZfQ09ORklHCQkweEZGQzAwNjYwCS8qIFRpbWVyIDYgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAgCQkJKi8KLSNkZWZpbmUgVElNRVI2X0NPVU5URVIJCTB4RkZDMDA2NjQJLyogVGltZXIgNiBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAJCQkqLwotI2RlZmluZSBUSU1FUjZfUEVSSU9ECQkweEZGQzAwNjY4CS8qIFRpbWVyIDYgUGVyaW9kIFJlZ2lzdGVyICAgICAgICAgCQkJKi8KLSNkZWZpbmUgVElNRVI2X1dJRFRICQkweEZGQzAwNjZDCS8qIFRpbWVyIDYgV2lkdGggUmVnaXN0ZXIgICAgICAgICAgCQkJKi8KLQotI2RlZmluZSBUSU1FUjdfQ09ORklHCQkweEZGQzAwNjcwCS8qIFRpbWVyIDcgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAgCQkJKi8KLSNkZWZpbmUgVElNRVI3X0NPVU5URVIJCTB4RkZDMDA2NzQJLyogVGltZXIgNyBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAJCQkqLwotI2RlZmluZSBUSU1FUjdfUEVSSU9ECQkweEZGQzAwNjc4CS8qIFRpbWVyIDcgUGVyaW9kIFJlZ2lzdGVyICAgICAgICAgCQkJKi8KLSNkZWZpbmUgVElNRVI3X1dJRFRICQkweEZGQzAwNjdDCS8qIFRpbWVyIDcgV2lkdGggUmVnaXN0ZXIgICAgICAgCQkJKi8KLQotI2RlZmluZSBUSU1FUl9FTkFCTEUJCTB4RkZDMDA2ODAJLyogVGltZXIgRW5hYmxlIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBUSU1FUl9ESVNBQkxFCQkweEZGQzAwNjg0CS8qIFRpbWVyIERpc2FibGUgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFRJTUVSX1NUQVRVUwkJMHhGRkMwMDY4OAkvKiBUaW1lciBTdGF0dXMgUmVnaXN0ZXIJCQkJCSovCi0KLS8qIEdlbmVyYWwgUHVycG9zZSBJL08gUG9ydCBGICgweEZGQzAwNzAwIC0gMHhGRkMwMDdGRikJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBQT1JURklPCQkJCQkweEZGQzAwNzAwCS8qIFBvcnQgRiBJL08gUGluIFN0YXRlIFNwZWNpZnkgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgUE9SVEZJT19DTEVBUgkJCTB4RkZDMDA3MDQJLyogUG9ydCBGIEkvTyBQZXJpcGhlcmFsIEludGVycnVwdCBDbGVhciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgUE9SVEZJT19TRVQJCQkJMHhGRkMwMDcwOAkvKiBQb3J0IEYgSS9PIFBlcmlwaGVyYWwgSW50ZXJydXB0IFNldCBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFBPUlRGSU9fVE9HR0xFCQkJMHhGRkMwMDcwQwkvKiBQb3J0IEYgSS9PIFBpbiBTdGF0ZSBUb2dnbGUgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFBPUlRGSU9fTUFTS0EJCQkweEZGQzAwNzEwCS8qIFBvcnQgRiBJL08gTWFzayBTdGF0ZSBTcGVjaWZ5IEludGVycnVwdCBBIFJlZ2lzdGVyCSovCi0jZGVmaW5lIFBPUlRGSU9fTUFTS0FfQ0xFQVIJCTB4RkZDMDA3MTQJLyogUG9ydCBGIEkvTyBNYXNrIERpc2FibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBQT1JURklPX01BU0tBX1NFVAkJMHhGRkMwMDcxOAkvKiBQb3J0IEYgSS9PIE1hc2sgRW5hYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUE9SVEZJT19NQVNLQV9UT0dHTEUJMHhGRkMwMDcxQwkvKiBQb3J0IEYgSS9PIE1hc2sgVG9nZ2xlIEVuYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkqLwotI2RlZmluZSBQT1JURklPX01BU0tCCQkJMHhGRkMwMDcyMAkvKiBQb3J0IEYgSS9PIE1hc2sgU3RhdGUgU3BlY2lmeSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkqLwotI2RlZmluZSBQT1JURklPX01BU0tCX0NMRUFSCQkweEZGQzAwNzI0CS8qIFBvcnQgRiBJL08gTWFzayBEaXNhYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUE9SVEZJT19NQVNLQl9TRVQJCTB4RkZDMDA3MjgJLyogUG9ydCBGIEkvTyBNYXNrIEVuYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFBPUlRGSU9fTUFTS0JfVE9HR0xFCTB4RkZDMDA3MkMJLyogUG9ydCBGIEkvTyBNYXNrIFRvZ2dsZSBFbmFibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgUE9SVEZJT19ESVIJCQkJMHhGRkMwMDczMAkvKiBQb3J0IEYgSS9PIERpcmVjdGlvbiBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIFBPUlRGSU9fUE9MQVIJCQkweEZGQzAwNzM0CS8qIFBvcnQgRiBJL08gU291cmNlIFBvbGFyaXR5IFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBQT1JURklPX0VER0UJCQkweEZGQzAwNzM4CS8qIFBvcnQgRiBJL08gU291cmNlIFNlbnNpdGl2aXR5IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFBPUlRGSU9fQk9USAkJCTB4RkZDMDA3M0MJLyogUG9ydCBGIEkvTyBTZXQgb24gQk9USCBFZGdlcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBQT1JURklPX0lORU4JCQkweEZGQzAwNzQwCS8qIFBvcnQgRiBJL08gSW5wdXQgRW5hYmxlIFJlZ2lzdGVyIAkJCQkJKi8KLQotLyogU1BPUlQwIENvbnRyb2xsZXIJCSgweEZGQzAwODAwIC0gMHhGRkMwMDhGRikJCQkJCQkJCQkJKi8KLSNkZWZpbmUgU1BPUlQwX1RDUjEJCQkweEZGQzAwODAwCS8qIFNQT1JUMCBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBTUE9SVDBfVENSMgkJCTB4RkZDMDA4MDQJLyogU1BPUlQwIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFNQT1JUMF9UQ0xLRElWCQkweEZGQzAwODA4CS8qIFNQT1JUMCBUcmFuc21pdCBDbG9jayBEaXZpZGVyCQkJCQkqLwotI2RlZmluZSBTUE9SVDBfVEZTRElWCQkweEZGQzAwODBDCS8qIFNQT1JUMCBUcmFuc21pdCBGcmFtZSBTeW5jIERpdmlkZXIJCQkJKi8KLSNkZWZpbmUgU1BPUlQwX1RYCQkJMHhGRkMwMDgxMAkvKiBTUE9SVDAgVFggRGF0YSBSZWdpc3RlcgkJCQkJCQkqLwotI2RlZmluZSBTUE9SVDBfUlgJCQkweEZGQzAwODE4CS8qIFNQT1JUMCBSWCBEYXRhIFJlZ2lzdGVyCQkJCQkJCSovCi0jZGVmaW5lIFNQT1JUMF9SQ1IxCQkJMHhGRkMwMDgyMAkvKiBTUE9SVDAgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgU1BPUlQwX1JDUjIJCQkweEZGQzAwODI0CS8qIFNQT1JUMCBUcmFuc21pdCBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBTUE9SVDBfUkNMS0RJVgkJMHhGRkMwMDgyOAkvKiBTUE9SVDAgUmVjZWl2ZSBDbG9jayBEaXZpZGVyCQkJCQkJKi8KLSNkZWZpbmUgU1BPUlQwX1JGU0RJVgkJMHhGRkMwMDgyQwkvKiBTUE9SVDAgUmVjZWl2ZSBGcmFtZSBTeW5jIERpdmlkZXIJCQkJKi8KLSNkZWZpbmUgU1BPUlQwX1NUQVQJCQkweEZGQzAwODMwCS8qIFNQT1JUMCBTdGF0dXMgUmVnaXN0ZXIJCQkJCQkJKi8KLSNkZWZpbmUgU1BPUlQwX0NITkwJCQkweEZGQzAwODM0CS8qIFNQT1JUMCBDdXJyZW50IENoYW5uZWwgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFNQT1JUMF9NQ01DMQkJMHhGRkMwMDgzOAkvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEJKi8KLSNkZWZpbmUgU1BPUlQwX01DTUMyCQkweEZGQzAwODNDCS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMgkqLwotI2RlZmluZSBTUE9SVDBfTVRDUzAJCTB4RkZDMDA4NDAJLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDAJKi8KLSNkZWZpbmUgU1BPUlQwX01UQ1MxCQkweEZGQzAwODQ0CS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAxCSovCi0jZGVmaW5lIFNQT1JUMF9NVENTMgkJMHhGRkMwMDg0OAkvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMgkqLwotI2RlZmluZSBTUE9SVDBfTVRDUzMJCTB4RkZDMDA4NEMJLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDMJKi8KLSNkZWZpbmUgU1BPUlQwX01SQ1MwCQkweEZGQzAwODUwCS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDAJKi8KLSNkZWZpbmUgU1BPUlQwX01SQ1MxCQkweEZGQzAwODU0CS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDEJKi8KLSNkZWZpbmUgU1BPUlQwX01SQ1MyCQkweEZGQzAwODU4CS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDIJKi8KLSNkZWZpbmUgU1BPUlQwX01SQ1MzCQkweEZGQzAwODVDCS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDMJKi8KLQotLyogU1BPUlQxIENvbnRyb2xsZXIJCSgweEZGQzAwOTAwIC0gMHhGRkMwMDlGRikJCQkJCQkJCQkJKi8KLSNkZWZpbmUgU1BPUlQxX1RDUjEJCQkweEZGQzAwOTAwCS8qIFNQT1JUMSBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBTUE9SVDFfVENSMgkJCTB4RkZDMDA5MDQJLyogU1BPUlQxIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFNQT1JUMV9UQ0xLRElWCQkweEZGQzAwOTA4CS8qIFNQT1JUMSBUcmFuc21pdCBDbG9jayBEaXZpZGVyCQkJCQkqLwotI2RlZmluZSBTUE9SVDFfVEZTRElWCQkweEZGQzAwOTBDCS8qIFNQT1JUMSBUcmFuc21pdCBGcmFtZSBTeW5jIERpdmlkZXIJCQkJKi8KLSNkZWZpbmUgU1BPUlQxX1RYCQkJMHhGRkMwMDkxMAkvKiBTUE9SVDEgVFggRGF0YSBSZWdpc3RlcgkJCQkJCQkqLwotI2RlZmluZSBTUE9SVDFfUlgJCQkweEZGQzAwOTE4CS8qIFNQT1JUMSBSWCBEYXRhIFJlZ2lzdGVyCQkJCQkJCSovCi0jZGVmaW5lIFNQT1JUMV9SQ1IxCQkJMHhGRkMwMDkyMAkvKiBTUE9SVDEgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgU1BPUlQxX1JDUjIJCQkweEZGQzAwOTI0CS8qIFNQT1JUMSBUcmFuc21pdCBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBTUE9SVDFfUkNMS0RJVgkJMHhGRkMwMDkyOAkvKiBTUE9SVDEgUmVjZWl2ZSBDbG9jayBEaXZpZGVyCQkJCQkJKi8KLSNkZWZpbmUgU1BPUlQxX1JGU0RJVgkJMHhGRkMwMDkyQwkvKiBTUE9SVDEgUmVjZWl2ZSBGcmFtZSBTeW5jIERpdmlkZXIJCQkJKi8KLSNkZWZpbmUgU1BPUlQxX1NUQVQJCQkweEZGQzAwOTMwCS8qIFNQT1JUMSBTdGF0dXMgUmVnaXN0ZXIJCQkJCQkJKi8KLSNkZWZpbmUgU1BPUlQxX0NITkwJCQkweEZGQzAwOTM0CS8qIFNQT1JUMSBDdXJyZW50IENoYW5uZWwgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFNQT1JUMV9NQ01DMQkJMHhGRkMwMDkzOAkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEJKi8KLSNkZWZpbmUgU1BPUlQxX01DTUMyCQkweEZGQzAwOTNDCS8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMgkqLwotI2RlZmluZSBTUE9SVDFfTVRDUzAJCTB4RkZDMDA5NDAJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDAJKi8KLSNkZWZpbmUgU1BPUlQxX01UQ1MxCQkweEZGQzAwOTQ0CS8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAxCSovCi0jZGVmaW5lIFNQT1JUMV9NVENTMgkJMHhGRkMwMDk0OAkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMgkqLwotI2RlZmluZSBTUE9SVDFfTVRDUzMJCTB4RkZDMDA5NEMJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDMJKi8KLSNkZWZpbmUgU1BPUlQxX01SQ1MwCQkweEZGQzAwOTUwCS8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDAJKi8KLSNkZWZpbmUgU1BPUlQxX01SQ1MxCQkweEZGQzAwOTU0CS8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDEJKi8KLSNkZWZpbmUgU1BPUlQxX01SQ1MyCQkweEZGQzAwOTU4CS8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDIJKi8KLSNkZWZpbmUgU1BPUlQxX01SQ1MzCQkweEZGQzAwOTVDCS8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDMJKi8KLQotLyogRXh0ZXJuYWwgQnVzIEludGVyZmFjZSBVbml0ICgweEZGQzAwQTAwIC0gMHhGRkMwMEFGRikJCQkJCQkJCSovCi0jZGVmaW5lIEVCSVVfQU1HQ1RMCQkJMHhGRkMwMEEwMAkvKiBBc3luY2hyb25vdXMgTWVtb3J5IEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIEVCSVVfQU1CQ1RMMAkJMHhGRkMwMEEwNAkvKiBBc3luY2hyb25vdXMgTWVtb3J5IEJhbmsgQ29udHJvbCBSZWdpc3RlciAwCSovCi0jZGVmaW5lIEVCSVVfQU1CQ1RMMQkJMHhGRkMwMEEwOAkvKiBBc3luY2hyb25vdXMgTWVtb3J5IEJhbmsgQ29udHJvbCBSZWdpc3RlciAxCSovCi0jZGVmaW5lIEVCSVVfU0RHQ1RMCQkJMHhGRkMwMEExMAkvKiBTRFJBTSBHbG9iYWwgQ29udHJvbCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBFQklVX1NEQkNUTAkJCTB4RkZDMDBBMTQJLyogU0RSQU0gQmFuayBDb250cm9sIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBFQklVX1NEUlJDCQkJMHhGRkMwMEExOAkvKiBTRFJBTSBSZWZyZXNoIFJhdGUgQ29udHJvbCBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIEVCSVVfU0RTVEFUCQkJMHhGRkMwMEExQwkvKiBTRFJBTSBTdGF0dXMgUmVnaXN0ZXIJCQkJCQkqLwotCi0vKiBETUEgVHJhZmZpYyBDb250cm9sIFJlZ2lzdGVycwkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBETUFfVENfUEVSCQkJMHhGRkMwMEIwQwkvKiBUcmFmZmljIENvbnRyb2wgUGVyaW9kcyBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIERNQV9UQ19DTlQJCQkweEZGQzAwQjEwCS8qIFRyYWZmaWMgQ29udHJvbCBDdXJyZW50IENvdW50cyBSZWdpc3RlcgkqLwotCi0vKiBBbHRlcm5hdGUgZGVwcmVjYXRlZCByZWdpc3RlciBuYW1lcyAoYmVsb3cpIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29kZSBjb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lIERNQV9UQ1BFUgkJCTB4RkZDMDBCMEMJLyogVHJhZmZpYyBDb250cm9sIFBlcmlvZHMgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBETUFfVENDTlQJCQkweEZGQzAwQjEwCS8qIFRyYWZmaWMgQ29udHJvbCBDdXJyZW50IENvdW50cyBSZWdpc3RlcgkqLwotCi0vKiBETUEgQ29udHJvbGxlciAoMHhGRkMwMEMwMCAtIDB4RkZDMDBGRkYpCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgRE1BMF9ORVhUX0RFU0NfUFRSCQkweEZGQzAwQzAwCS8qIERNQSBDaGFubmVsIDAgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIERNQTBfU1RBUlRfQUREUgkJCTB4RkZDMDBDMDQJLyogRE1BIENoYW5uZWwgMCBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBETUEwX0NPTkZJRwkJCQkweEZGQzAwQzA4CS8qIERNQSBDaGFubmVsIDAgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgRE1BMF9YX0NPVU5UCQkJMHhGRkMwMEMxMAkvKiBETUEgQ2hhbm5lbCAwIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUEwX1hfTU9ESUZZCQkJMHhGRkMwMEMxNAkvKiBETUEgQ2hhbm5lbCAwIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BMF9ZX0NPVU5UCQkJMHhGRkMwMEMxOAkvKiBETUEgQ2hhbm5lbCAwIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUEwX1lfTU9ESUZZCQkJMHhGRkMwMEMxQwkvKiBETUEgQ2hhbm5lbCAwIFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BMF9DVVJSX0RFU0NfUFRSCQkweEZGQzAwQzIwCS8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgRE1BMF9DVVJSX0FERFIJCQkweEZGQzAwQzI0CS8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTBfSVJRX1NUQVRVUwkJCTB4RkZDMDBDMjgJLyogRE1BIENoYW5uZWwgMCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTBfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBDMkMJLyogRE1BIENoYW5uZWwgMCBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUEwX0NVUlJfWF9DT1VOVAkJMHhGRkMwMEMzMAkvKiBETUEgQ2hhbm5lbCAwIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUEwX0NVUlJfWV9DT1VOVAkJMHhGRkMwMEMzOAkvKiBETUEgQ2hhbm5lbCAwIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLwotCi0jZGVmaW5lIERNQTFfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEM0MAkvKiBETUEgQ2hhbm5lbCAxIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBETUExX1NUQVJUX0FERFIJCQkweEZGQzAwQzQ0CS8qIERNQSBDaGFubmVsIDEgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgRE1BMV9DT05GSUcJCQkJMHhGRkMwMEM0OAkvKiBETUEgQ2hhbm5lbCAxIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIERNQTFfWF9DT1VOVAkJCTB4RkZDMDBDNTAJLyogRE1BIENoYW5uZWwgMSBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BMV9YX01PRElGWQkJCTB4RkZDMDBDNTQJLyogRE1BIENoYW5uZWwgMSBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTFfWV9DT1VOVAkJCTB4RkZDMDBDNTgJLyogRE1BIENoYW5uZWwgMSBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BMV9ZX01PRElGWQkJCTB4RkZDMDBDNUMJLyogRE1BIENoYW5uZWwgMSBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTFfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMEM2MAkvKiBETUEgQ2hhbm5lbCAxIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIERNQTFfQ1VSUl9BRERSCQkJMHhGRkMwMEM2NAkvKiBETUEgQ2hhbm5lbCAxIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUExX0lSUV9TVEFUVVMJCQkweEZGQzAwQzY4CS8qIERNQSBDaGFubmVsIDEgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUExX1BFUklQSEVSQUxfTUFQCQkweEZGQzAwQzZDCS8qIERNQSBDaGFubmVsIDEgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMV9DVVJSX1hfQ09VTlQJCTB4RkZDMDBDNzAJLyogRE1BIENoYW5uZWwgMSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMV9DVVJSX1lfQ09VTlQJCTB4RkZDMDBDNzgJLyogRE1BIENoYW5uZWwgMSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KLQotI2RlZmluZSBETUEyX05FWFRfREVTQ19QVFIJCTB4RkZDMDBDODAJLyogRE1BIENoYW5uZWwgMiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgRE1BMl9TVEFSVF9BRERSCQkJMHhGRkMwMEM4NAkvKiBETUEgQ2hhbm5lbCAyIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIERNQTJfQ09ORklHCQkJCTB4RkZDMDBDODgJLyogRE1BIENoYW5uZWwgMiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBETUEyX1hfQ09VTlQJCQkweEZGQzAwQzkwCS8qIERNQSBDaGFubmVsIDIgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTJfWF9NT0RJRlkJCQkweEZGQzAwQzk0CS8qIERNQSBDaGFubmVsIDIgWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUEyX1lfQ09VTlQJCQkweEZGQzAwQzk4CS8qIERNQSBDaGFubmVsIDIgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTJfWV9NT0RJRlkJCQkweEZGQzAwQzlDCS8qIERNQSBDaGFubmVsIDIgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUEyX0NVUlJfREVTQ19QVFIJCTB4RkZDMDBDQTAJLyogRE1BIENoYW5uZWwgMiBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLwotI2RlZmluZSBETUEyX0NVUlJfQUREUgkJCTB4RkZDMDBDQTQJLyogRE1BIENoYW5uZWwgMiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMl9JUlFfU1RBVFVTCQkJMHhGRkMwMENBOAkvKiBETUEgQ2hhbm5lbCAyIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMl9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMENBQwkvKiBETUEgQ2hhbm5lbCAyIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTJfQ1VSUl9YX0NPVU5UCQkweEZGQzAwQ0IwCS8qIERNQSBDaGFubmVsIDIgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTJfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwQ0I4CS8qIERNQSBDaGFubmVsIDIgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCi0KLSNkZWZpbmUgRE1BM19ORVhUX0RFU0NfUFRSCQkweEZGQzAwQ0MwCS8qIERNQSBDaGFubmVsIDMgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIERNQTNfU1RBUlRfQUREUgkJCTB4RkZDMDBDQzQJLyogRE1BIENoYW5uZWwgMyBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBETUEzX0NPTkZJRwkJCQkweEZGQzAwQ0M4CS8qIERNQSBDaGFubmVsIDMgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgRE1BM19YX0NPVU5UCQkJMHhGRkMwMENEMAkvKiBETUEgQ2hhbm5lbCAzIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUEzX1hfTU9ESUZZCQkJMHhGRkMwMENENAkvKiBETUEgQ2hhbm5lbCAzIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BM19ZX0NPVU5UCQkJMHhGRkMwMENEOAkvKiBETUEgQ2hhbm5lbCAzIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUEzX1lfTU9ESUZZCQkJMHhGRkMwMENEQwkvKiBETUEgQ2hhbm5lbCAzIFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BM19DVVJSX0RFU0NfUFRSCQkweEZGQzAwQ0UwCS8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgRE1BM19DVVJSX0FERFIJCQkweEZGQzAwQ0U0CS8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTNfSVJRX1NUQVRVUwkJCTB4RkZDMDBDRTgJLyogRE1BIENoYW5uZWwgMyBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTNfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBDRUMJLyogRE1BIENoYW5uZWwgMyBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUEzX0NVUlJfWF9DT1VOVAkJMHhGRkMwMENGMAkvKiBETUEgQ2hhbm5lbCAzIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUEzX0NVUlJfWV9DT1VOVAkJMHhGRkMwMENGOAkvKiBETUEgQ2hhbm5lbCAzIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLwotCi0jZGVmaW5lIERNQTRfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEQwMAkvKiBETUEgQ2hhbm5lbCA0IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBETUE0X1NUQVJUX0FERFIJCQkweEZGQzAwRDA0CS8qIERNQSBDaGFubmVsIDQgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgRE1BNF9DT05GSUcJCQkJMHhGRkMwMEQwOAkvKiBETUEgQ2hhbm5lbCA0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIERNQTRfWF9DT1VOVAkJCTB4RkZDMDBEMTAJLyogRE1BIENoYW5uZWwgNCBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BNF9YX01PRElGWQkJCTB4RkZDMDBEMTQJLyogRE1BIENoYW5uZWwgNCBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTRfWV9DT1VOVAkJCTB4RkZDMDBEMTgJLyogRE1BIENoYW5uZWwgNCBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BNF9ZX01PRElGWQkJCTB4RkZDMDBEMUMJLyogRE1BIENoYW5uZWwgNCBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTRfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMEQyMAkvKiBETUEgQ2hhbm5lbCA0IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIERNQTRfQ1VSUl9BRERSCQkJMHhGRkMwMEQyNAkvKiBETUEgQ2hhbm5lbCA0IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE0X0lSUV9TVEFUVVMJCQkweEZGQzAwRDI4CS8qIERNQSBDaGFubmVsIDQgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE0X1BFUklQSEVSQUxfTUFQCQkweEZGQzAwRDJDCS8qIERNQSBDaGFubmVsIDQgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BNF9DVVJSX1hfQ09VTlQJCTB4RkZDMDBEMzAJLyogRE1BIENoYW5uZWwgNCBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BNF9DVVJSX1lfQ09VTlQJCTB4RkZDMDBEMzgJLyogRE1BIENoYW5uZWwgNCBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KLQotI2RlZmluZSBETUE1X05FWFRfREVTQ19QVFIJCTB4RkZDMDBENDAJLyogRE1BIENoYW5uZWwgNSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgRE1BNV9TVEFSVF9BRERSCQkJMHhGRkMwMEQ0NAkvKiBETUEgQ2hhbm5lbCA1IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIERNQTVfQ09ORklHCQkJCTB4RkZDMDBENDgJLyogRE1BIENoYW5uZWwgNSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBETUE1X1hfQ09VTlQJCQkweEZGQzAwRDUwCS8qIERNQSBDaGFubmVsIDUgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTVfWF9NT0RJRlkJCQkweEZGQzAwRDU0CS8qIERNQSBDaGFubmVsIDUgWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE1X1lfQ09VTlQJCQkweEZGQzAwRDU4CS8qIERNQSBDaGFubmVsIDUgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTVfWV9NT0RJRlkJCQkweEZGQzAwRDVDCS8qIERNQSBDaGFubmVsIDUgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE1X0NVUlJfREVTQ19QVFIJCTB4RkZDMDBENjAJLyogRE1BIENoYW5uZWwgNSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLwotI2RlZmluZSBETUE1X0NVUlJfQUREUgkJCTB4RkZDMDBENjQJLyogRE1BIENoYW5uZWwgNSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BNV9JUlFfU1RBVFVTCQkJMHhGRkMwMEQ2OAkvKiBETUEgQ2hhbm5lbCA1IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BNV9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMEQ2QwkvKiBETUEgQ2hhbm5lbCA1IFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTVfQ1VSUl9YX0NPVU5UCQkweEZGQzAwRDcwCS8qIERNQSBDaGFubmVsIDUgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTVfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRDc4CS8qIERNQSBDaGFubmVsIDUgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCi0KLSNkZWZpbmUgRE1BNl9ORVhUX0RFU0NfUFRSCQkweEZGQzAwRDgwCS8qIERNQSBDaGFubmVsIDYgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIERNQTZfU1RBUlRfQUREUgkJCTB4RkZDMDBEODQJLyogRE1BIENoYW5uZWwgNiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBETUE2X0NPTkZJRwkJCQkweEZGQzAwRDg4CS8qIERNQSBDaGFubmVsIDYgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgRE1BNl9YX0NPVU5UCQkJMHhGRkMwMEQ5MAkvKiBETUEgQ2hhbm5lbCA2IFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE2X1hfTU9ESUZZCQkJMHhGRkMwMEQ5NAkvKiBETUEgQ2hhbm5lbCA2IFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BNl9ZX0NPVU5UCQkJMHhGRkMwMEQ5OAkvKiBETUEgQ2hhbm5lbCA2IFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE2X1lfTU9ESUZZCQkJMHhGRkMwMEQ5QwkvKiBETUEgQ2hhbm5lbCA2IFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BNl9DVVJSX0RFU0NfUFRSCQkweEZGQzAwREEwCS8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgRE1BNl9DVVJSX0FERFIJCQkweEZGQzAwREE0CS8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTZfSVJRX1NUQVRVUwkJCTB4RkZDMDBEQTgJLyogRE1BIENoYW5uZWwgNiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTZfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBEQUMJLyogRE1BIENoYW5uZWwgNiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE2X0NVUlJfWF9DT1VOVAkJMHhGRkMwMERCMAkvKiBETUEgQ2hhbm5lbCA2IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE2X0NVUlJfWV9DT1VOVAkJMHhGRkMwMERCOAkvKiBETUEgQ2hhbm5lbCA2IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLwotCi0jZGVmaW5lIERNQTdfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMERDMAkvKiBETUEgQ2hhbm5lbCA3IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBETUE3X1NUQVJUX0FERFIJCQkweEZGQzAwREM0CS8qIERNQSBDaGFubmVsIDcgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgRE1BN19DT05GSUcJCQkJMHhGRkMwMERDOAkvKiBETUEgQ2hhbm5lbCA3IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIERNQTdfWF9DT1VOVAkJCTB4RkZDMDBERDAJLyogRE1BIENoYW5uZWwgNyBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BN19YX01PRElGWQkJCTB4RkZDMDBERDQJLyogRE1BIENoYW5uZWwgNyBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTdfWV9DT1VOVAkJCTB4RkZDMDBERDgJLyogRE1BIENoYW5uZWwgNyBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BN19ZX01PRElGWQkJCTB4RkZDMDBEREMJLyogRE1BIENoYW5uZWwgNyBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTdfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMERFMAkvKiBETUEgQ2hhbm5lbCA3IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIERNQTdfQ1VSUl9BRERSCQkJMHhGRkMwMERFNAkvKiBETUEgQ2hhbm5lbCA3IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE3X0lSUV9TVEFUVVMJCQkweEZGQzAwREU4CS8qIERNQSBDaGFubmVsIDcgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE3X1BFUklQSEVSQUxfTUFQCQkweEZGQzAwREVDCS8qIERNQSBDaGFubmVsIDcgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BN19DVVJSX1hfQ09VTlQJCTB4RkZDMDBERjAJLyogRE1BIENoYW5uZWwgNyBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BN19DVVJSX1lfQ09VTlQJCTB4RkZDMDBERjgJLyogRE1BIENoYW5uZWwgNyBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KLQotI2RlZmluZSBETUE4X05FWFRfREVTQ19QVFIJCTB4RkZDMDBFMDAJLyogRE1BIENoYW5uZWwgOCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgRE1BOF9TVEFSVF9BRERSCQkJMHhGRkMwMEUwNAkvKiBETUEgQ2hhbm5lbCA4IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIERNQThfQ09ORklHCQkJCTB4RkZDMDBFMDgJLyogRE1BIENoYW5uZWwgOCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBETUE4X1hfQ09VTlQJCQkweEZGQzAwRTEwCS8qIERNQSBDaGFubmVsIDggWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQThfWF9NT0RJRlkJCQkweEZGQzAwRTE0CS8qIERNQSBDaGFubmVsIDggWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE4X1lfQ09VTlQJCQkweEZGQzAwRTE4CS8qIERNQSBDaGFubmVsIDggWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQThfWV9NT0RJRlkJCQkweEZGQzAwRTFDCS8qIERNQSBDaGFubmVsIDggWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE4X0NVUlJfREVTQ19QVFIJCTB4RkZDMDBFMjAJLyogRE1BIENoYW5uZWwgOCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLwotI2RlZmluZSBETUE4X0NVUlJfQUREUgkJCTB4RkZDMDBFMjQJLyogRE1BIENoYW5uZWwgOCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BOF9JUlFfU1RBVFVTCQkJMHhGRkMwMEUyOAkvKiBETUEgQ2hhbm5lbCA4IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BOF9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMEUyQwkvKiBETUEgQ2hhbm5lbCA4IFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQThfQ1VSUl9YX0NPVU5UCQkweEZGQzAwRTMwCS8qIERNQSBDaGFubmVsIDggQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQThfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRTM4CS8qIERNQSBDaGFubmVsIDggQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCi0KLSNkZWZpbmUgRE1BOV9ORVhUX0RFU0NfUFRSCQkweEZGQzAwRTQwCS8qIERNQSBDaGFubmVsIDkgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIERNQTlfU1RBUlRfQUREUgkJCTB4RkZDMDBFNDQJLyogRE1BIENoYW5uZWwgOSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBETUE5X0NPTkZJRwkJCQkweEZGQzAwRTQ4CS8qIERNQSBDaGFubmVsIDkgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgRE1BOV9YX0NPVU5UCQkJMHhGRkMwMEU1MAkvKiBETUEgQ2hhbm5lbCA5IFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE5X1hfTU9ESUZZCQkJMHhGRkMwMEU1NAkvKiBETUEgQ2hhbm5lbCA5IFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BOV9ZX0NPVU5UCQkJMHhGRkMwMEU1OAkvKiBETUEgQ2hhbm5lbCA5IFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE5X1lfTU9ESUZZCQkJMHhGRkMwMEU1QwkvKiBETUEgQ2hhbm5lbCA5IFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BOV9DVVJSX0RFU0NfUFRSCQkweEZGQzAwRTYwCS8qIERNQSBDaGFubmVsIDkgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgRE1BOV9DVVJSX0FERFIJCQkweEZGQzAwRTY0CS8qIERNQSBDaGFubmVsIDkgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTlfSVJRX1NUQVRVUwkJCTB4RkZDMDBFNjgJLyogRE1BIENoYW5uZWwgOSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTlfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBFNkMJLyogRE1BIENoYW5uZWwgOSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE5X0NVUlJfWF9DT1VOVAkJMHhGRkMwMEU3MAkvKiBETUEgQ2hhbm5lbCA5IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE5X0NVUlJfWV9DT1VOVAkJMHhGRkMwMEU3OAkvKiBETUEgQ2hhbm5lbCA5IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLwotCi0jZGVmaW5lIERNQTEwX05FWFRfREVTQ19QVFIJCTB4RkZDMDBFODAJLyogRE1BIENoYW5uZWwgMTAgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIERNQTEwX1NUQVJUX0FERFIJCTB4RkZDMDBFODQJLyogRE1BIENoYW5uZWwgMTAgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUExMF9DT05GSUcJCQkweEZGQzAwRTg4CS8qIERNQSBDaGFubmVsIDEwIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMTBfWF9DT1VOVAkJCTB4RkZDMDBFOTAJLyogRE1BIENoYW5uZWwgMTAgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTEwX1hfTU9ESUZZCQkJMHhGRkMwMEU5NAkvKiBETUEgQ2hhbm5lbCAxMCBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTEwX1lfQ09VTlQJCQkweEZGQzAwRTk4CS8qIERNQSBDaGFubmVsIDEwIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUExMF9ZX01PRElGWQkJCTB4RkZDMDBFOUMJLyogRE1BIENoYW5uZWwgMTAgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUExMF9DVVJSX0RFU0NfUFRSCQkweEZGQzAwRUEwCS8qIERNQSBDaGFubmVsIDEwIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIERNQTEwX0NVUlJfQUREUgkJCTB4RkZDMDBFQTQJLyogRE1BIENoYW5uZWwgMTAgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTEwX0lSUV9TVEFUVVMJCTB4RkZDMDBFQTgJLyogRE1BIENoYW5uZWwgMTAgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUExMF9QRVJJUEhFUkFMX01BUAkweEZGQzAwRUFDCS8qIERNQSBDaGFubmVsIDEwIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTEwX0NVUlJfWF9DT1VOVAkJMHhGRkMwMEVCMAkvKiBETUEgQ2hhbm5lbCAxMCBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMTBfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRUI4CS8qIERNQSBDaGFubmVsIDEwIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLwotCi0jZGVmaW5lIERNQTExX05FWFRfREVTQ19QVFIJCTB4RkZDMDBFQzAJLyogRE1BIENoYW5uZWwgMTEgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIERNQTExX1NUQVJUX0FERFIJCTB4RkZDMDBFQzQJLyogRE1BIENoYW5uZWwgMTEgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUExMV9DT05GSUcJCQkweEZGQzAwRUM4CS8qIERNQSBDaGFubmVsIDExIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMTFfWF9DT1VOVAkJCTB4RkZDMDBFRDAJLyogRE1BIENoYW5uZWwgMTEgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTExX1hfTU9ESUZZCQkJMHhGRkMwMEVENAkvKiBETUEgQ2hhbm5lbCAxMSBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTExX1lfQ09VTlQJCQkweEZGQzAwRUQ4CS8qIERNQSBDaGFubmVsIDExIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUExMV9ZX01PRElGWQkJCTB4RkZDMDBFREMJLyogRE1BIENoYW5uZWwgMTEgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUExMV9DVVJSX0RFU0NfUFRSCQkweEZGQzAwRUUwCS8qIERNQSBDaGFubmVsIDExIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIERNQTExX0NVUlJfQUREUgkJCTB4RkZDMDBFRTQJLyogRE1BIENoYW5uZWwgMTEgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTExX0lSUV9TVEFUVVMJCTB4RkZDMDBFRTgJLyogRE1BIENoYW5uZWwgMTEgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUExMV9QRVJJUEhFUkFMX01BUAkweEZGQzAwRUVDCS8qIERNQSBDaGFubmVsIDExIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTExX0NVUlJfWF9DT1VOVAkJMHhGRkMwMEVGMAkvKiBETUEgQ2hhbm5lbCAxMSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMTFfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRUY4CS8qIERNQSBDaGFubmVsIDExIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLwotCi0jZGVmaW5lIE1ETUFfRDBfTkVYVF9ERVNDX1BUUgkweEZGQzAwRjAwCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTURNQV9EMF9TVEFSVF9BRERSCQkweEZGQzAwRjA0CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIE1ETUFfRDBfQ09ORklHCQkJMHhGRkMwMEYwOAkvKiBNZW1ETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBNRE1BX0QwX1hfQ09VTlQJCQkweEZGQzAwRjEwCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgTURNQV9EMF9YX01PRElGWQkJMHhGRkMwMEYxNAkvKiBNZW1ETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIE1ETUFfRDBfWV9DT1VOVAkJCTB4RkZDMDBGMTgJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBNRE1BX0QwX1lfTU9ESUZZCQkweEZGQzAwRjFDCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgTURNQV9EMF9DVVJSX0RFU0NfUFRSCTB4RkZDMDBGMjAJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1ETUFfRDBfQ1VSUl9BRERSCQkweEZGQzAwRjI0CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgTURNQV9EMF9JUlFfU1RBVFVTCQkweEZGQzAwRjI4CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgTURNQV9EMF9QRVJJUEhFUkFMX01BUAkweEZGQzAwRjJDCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBNRE1BX0QwX0NVUlJfWF9DT1VOVAkweEZGQzAwRjMwCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgTURNQV9EMF9DVVJSX1lfQ09VTlQJMHhGRkMwMEYzOAkvKiBNZW1ETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCi0KLSNkZWZpbmUgTURNQV9TMF9ORVhUX0RFU0NfUFRSCTB4RkZDMDBGNDAJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIE1ETUFfUzBfU1RBUlRfQUREUgkJMHhGRkMwMEY0NAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzBfQ09ORklHCQkJMHhGRkMwMEY0OAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzBfWF9DT1VOVAkJCTB4RkZDMDBGNTAJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBYIENvdW50IFJlZ2lzdGVyCQkJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzBfWF9NT0RJRlkJCTB4RkZDMDBGNTQJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCQkqLwotI2RlZmluZSBNRE1BX1MwX1lfQ09VTlQJCQkweEZGQzAwRjU4CS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgWSBDb3VudCBSZWdpc3RlcgkJCQkJCQkqLwotI2RlZmluZSBNRE1BX1MwX1lfTU9ESUZZCQkweEZGQzAwRjVDCS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkJKi8KLSNkZWZpbmUgTURNQV9TMF9DVVJSX0RFU0NfUFRSCTB4RkZDMDBGNjAJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTURNQV9TMF9DVVJSX0FERFIJCTB4RkZDMDBGNjQJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzBfSVJRX1NUQVRVUwkJMHhGRkMwMEY2OAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzBfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMEY2QwkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBNRE1BX1MwX0NVUlJfWF9DT1VOVAkweEZGQzAwRjcwCS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBNRE1BX1MwX0NVUlJfWV9DT1VOVAkweEZGQzAwRjc4CS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCQkqLwotCi0jZGVmaW5lIE1ETUFfRDFfTkVYVF9ERVNDX1BUUgkweEZGQzAwRjgwCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTURNQV9EMV9TVEFSVF9BRERSCQkweEZGQzAwRjg0CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIE1ETUFfRDFfQ09ORklHCQkJMHhGRkMwMEY4OAkvKiBNZW1ETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBNRE1BX0QxX1hfQ09VTlQJCQkweEZGQzAwRjkwCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgTURNQV9EMV9YX01PRElGWQkJMHhGRkMwMEY5NAkvKiBNZW1ETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIE1ETUFfRDFfWV9DT1VOVAkJCTB4RkZDMDBGOTgJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBNRE1BX0QxX1lfTU9ESUZZCQkweEZGQzAwRjlDCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgTURNQV9EMV9DVVJSX0RFU0NfUFRSCTB4RkZDMDBGQTAJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIE1ETUFfRDFfQ1VSUl9BRERSCQkweEZGQzAwRkE0CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgTURNQV9EMV9JUlFfU1RBVFVTCQkweEZGQzAwRkE4CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgTURNQV9EMV9QRVJJUEhFUkFMX01BUAkweEZGQzAwRkFDCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBNRE1BX0QxX0NVUlJfWF9DT1VOVAkweEZGQzAwRkIwCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgTURNQV9EMV9DVVJSX1lfQ09VTlQJMHhGRkMwMEZCOAkvKiBNZW1ETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCi0KLSNkZWZpbmUgTURNQV9TMV9ORVhUX0RFU0NfUFRSCTB4RkZDMDBGQzAJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIE1ETUFfUzFfU1RBUlRfQUREUgkJMHhGRkMwMEZDNAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzFfQ09ORklHCQkJMHhGRkMwMEZDOAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzFfWF9DT1VOVAkJCTB4RkZDMDBGRDAJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBYIENvdW50IFJlZ2lzdGVyCQkJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzFfWF9NT0RJRlkJCTB4RkZDMDBGRDQJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCQkqLwotI2RlZmluZSBNRE1BX1MxX1lfQ09VTlQJCQkweEZGQzAwRkQ4CS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgWSBDb3VudCBSZWdpc3RlcgkJCQkJCQkqLwotI2RlZmluZSBNRE1BX1MxX1lfTU9ESUZZCQkweEZGQzAwRkRDCS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkJKi8KLSNkZWZpbmUgTURNQV9TMV9DVVJSX0RFU0NfUFRSCTB4RkZDMDBGRTAJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgTURNQV9TMV9DVVJSX0FERFIJCTB4RkZDMDBGRTQJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzFfSVJRX1NUQVRVUwkJMHhGRkMwMEZFOAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzFfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMEZFQwkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBNRE1BX1MxX0NVUlJfWF9DT1VOVAkweEZGQzAwRkYwCS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBNRE1BX1MxX0NVUlJfWV9DT1VOVAkweEZGQzAwRkY4CS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCQkqLwotCi0KLS8qIFBhcmFsbGVsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICgweEZGQzAxMDAwIC0gMHhGRkMwMTBGRikJCQkJKi8KLSNkZWZpbmUgUFBJX0NPTlRST0wJCQkweEZGQzAxMDAwCS8qIFBQSSBDb250cm9sIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUFBJX1NUQVRVUwkJCTB4RkZDMDEwMDQJLyogUFBJIFN0YXR1cyBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFBQSV9DT1VOVAkJCTB4RkZDMDEwMDgJLyogUFBJIFRyYW5zZmVyIENvdW50IFJlZ2lzdGVyCSovCi0jZGVmaW5lIFBQSV9ERUxBWQkJCTB4RkZDMDEwMEMJLyogUFBJIERlbGF5IENvdW50IFJlZ2lzdGVyCQkqLwotI2RlZmluZSBQUElfRlJBTUUJCQkweEZGQzAxMDEwCS8qIFBQSSBGcmFtZSBMZW5ndGggUmVnaXN0ZXIJKi8KLQotCi0vKiBUd28tV2lyZSBJbnRlcmZhY2UJCSgweEZGQzAxNDAwIC0gMHhGRkMwMTRGRikJCQkJCQkJCSovCi0jZGVmaW5lIFRXSTBfUkVHQkFTRQkJCTB4RkZDMDE0MDAKLSNkZWZpbmUgVFdJMF9DTEtESVYJCQkweEZGQzAxNDAwCS8qIFNlcmlhbCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgVFdJMF9DT05UUk9MCQkJMHhGRkMwMTQwNAkvKiBUV0kgQ29udHJvbCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIFRXSTBfU0xBVkVfQ1RMCQkweEZGQzAxNDA4CS8qIFNsYXZlIE1vZGUgQ29udHJvbCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBUV0kwX1NMQVZFX1NUQVQJCTB4RkZDMDE0MEMJLyogU2xhdmUgTW9kZSBTdGF0dXMgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgVFdJMF9TTEFWRV9BRERSCQkweEZGQzAxNDEwCS8qIFNsYXZlIE1vZGUgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBUV0kwX01BU1RFUl9DVEwJCTB4RkZDMDE0MTQJLyogTWFzdGVyIE1vZGUgQ29udHJvbCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBUV0kwX01BU1RFUl9TVEFUCQkweEZGQzAxNDE4CS8qIE1hc3RlciBNb2RlIFN0YXR1cyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBUV0kwX01BU1RFUl9BRERSCQkweEZGQzAxNDFDCS8qIE1hc3RlciBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgVFdJMF9JTlRfU1RBVAkJMHhGRkMwMTQyMAkvKiBUV0kgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFRXSTBfSU5UX01BU0sJCTB4RkZDMDE0MjQJLyogVFdJIE1hc3RlciBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgVFdJMF9GSUZPX0NUTAkJMHhGRkMwMTQyOAkvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFRXSTBfRklGT19TVEFUCQkweEZGQzAxNDJDCS8qIEZJRk8gU3RhdHVzIFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgVFdJMF9YTVRfREFUQTgJCTB4RkZDMDE0ODAJLyogRklGTyBUcmFuc21pdCBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyCSovCi0jZGVmaW5lIFRXSTBfWE1UX0RBVEExNgkJMHhGRkMwMTQ4NAkvKiBGSUZPIFRyYW5zbWl0IERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgVFdJMF9SQ1ZfREFUQTgJCTB4RkZDMDE0ODgJLyogRklGTyBSZWNlaXZlIERhdGEgU2luZ2xlIEJ5dGUgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgVFdJMF9SQ1ZfREFUQTE2CQkweEZGQzAxNDhDCS8qIEZJRk8gUmVjZWl2ZSBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyCSovCi0KLQotLyogR2VuZXJhbCBQdXJwb3NlIEkvTyBQb3J0IEcgKDB4RkZDMDE1MDAgLSAweEZGQzAxNUZGKQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFBPUlRHSU8JCQkJCTB4RkZDMDE1MDAJLyogUG9ydCBHIEkvTyBQaW4gU3RhdGUgU3BlY2lmeSBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBQT1JUR0lPX0NMRUFSCQkJMHhGRkMwMTUwNAkvKiBQb3J0IEcgSS9PIFBlcmlwaGVyYWwgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBQT1JUR0lPX1NFVAkJCQkweEZGQzAxNTA4CS8qIFBvcnQgRyBJL08gUGVyaXBoZXJhbCBJbnRlcnJ1cHQgU2V0IFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUE9SVEdJT19UT0dHTEUJCQkweEZGQzAxNTBDCS8qIFBvcnQgRyBJL08gUGluIFN0YXRlIFRvZ2dsZSBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgUE9SVEdJT19NQVNLQQkJCTB4RkZDMDE1MTAJLyogUG9ydCBHIEkvTyBNYXNrIFN0YXRlIFNwZWNpZnkgSW50ZXJydXB0IEEgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgUE9SVEdJT19NQVNLQV9DTEVBUgkJMHhGRkMwMTUxNAkvKiBQb3J0IEcgSS9PIE1hc2sgRGlzYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFBPUlRHSU9fTUFTS0FfU0VUCQkweEZGQzAxNTE4CS8qIFBvcnQgRyBJL08gTWFzayBFbmFibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBQT1JUR0lPX01BU0tBX1RPR0dMRQkweEZGQzAxNTFDCS8qIFBvcnQgRyBJL08gTWFzayBUb2dnbGUgRW5hYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCSovCi0jZGVmaW5lIFBPUlRHSU9fTUFTS0IJCQkweEZGQzAxNTIwCS8qIFBvcnQgRyBJL08gTWFzayBTdGF0ZSBTcGVjaWZ5IEludGVycnVwdCBCIFJlZ2lzdGVyCSovCi0jZGVmaW5lIFBPUlRHSU9fTUFTS0JfQ0xFQVIJCTB4RkZDMDE1MjQJLyogUG9ydCBHIEkvTyBNYXNrIERpc2FibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBQT1JUR0lPX01BU0tCX1NFVAkJMHhGRkMwMTUyOAkvKiBQb3J0IEcgSS9PIE1hc2sgRW5hYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUE9SVEdJT19NQVNLQl9UT0dHTEUJMHhGRkMwMTUyQwkvKiBQb3J0IEcgSS9PIE1hc2sgVG9nZ2xlIEVuYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkqLwotI2RlZmluZSBQT1JUR0lPX0RJUgkJCQkweEZGQzAxNTMwCS8qIFBvcnQgRyBJL08gRGlyZWN0aW9uIFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgUE9SVEdJT19QT0xBUgkJCTB4RkZDMDE1MzQJLyogUG9ydCBHIEkvTyBTb3VyY2UgUG9sYXJpdHkgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFBPUlRHSU9fRURHRQkJCTB4RkZDMDE1MzgJLyogUG9ydCBHIEkvTyBTb3VyY2UgU2Vuc2l0aXZpdHkgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgUE9SVEdJT19CT1RICQkJMHhGRkMwMTUzQwkvKiBQb3J0IEcgSS9PIFNldCBvbiBCT1RIIEVkZ2VzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFBPUlRHSU9fSU5FTgkJCTB4RkZDMDE1NDAJLyogUG9ydCBHIEkvTyBJbnB1dCBFbmFibGUgUmVnaXN0ZXIJCQkJCQkqLwotCi0KLS8qIEdlbmVyYWwgUHVycG9zZSBJL08gUG9ydCBIICgweEZGQzAxNzAwIC0gMHhGRkMwMTdGRikJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBQT1JUSElPCQkJCQkweEZGQzAxNzAwCS8qIFBvcnQgSCBJL08gUGluIFN0YXRlIFNwZWNpZnkgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgUE9SVEhJT19DTEVBUgkJCTB4RkZDMDE3MDQJLyogUG9ydCBIIEkvTyBQZXJpcGhlcmFsIEludGVycnVwdCBDbGVhciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgUE9SVEhJT19TRVQJCQkJMHhGRkMwMTcwOAkvKiBQb3J0IEggSS9PIFBlcmlwaGVyYWwgSW50ZXJydXB0IFNldCBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFBPUlRISU9fVE9HR0xFCQkJMHhGRkMwMTcwQwkvKiBQb3J0IEggSS9PIFBpbiBTdGF0ZSBUb2dnbGUgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFBPUlRISU9fTUFTS0EJCQkweEZGQzAxNzEwCS8qIFBvcnQgSCBJL08gTWFzayBTdGF0ZSBTcGVjaWZ5IEludGVycnVwdCBBIFJlZ2lzdGVyCSovCi0jZGVmaW5lIFBPUlRISU9fTUFTS0FfQ0xFQVIJCTB4RkZDMDE3MTQJLyogUG9ydCBIIEkvTyBNYXNrIERpc2FibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBQT1JUSElPX01BU0tBX1NFVAkJMHhGRkMwMTcxOAkvKiBQb3J0IEggSS9PIE1hc2sgRW5hYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUE9SVEhJT19NQVNLQV9UT0dHTEUJMHhGRkMwMTcxQwkvKiBQb3J0IEggSS9PIE1hc2sgVG9nZ2xlIEVuYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkqLwotI2RlZmluZSBQT1JUSElPX01BU0tCCQkJMHhGRkMwMTcyMAkvKiBQb3J0IEggSS9PIE1hc2sgU3RhdGUgU3BlY2lmeSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkqLwotI2RlZmluZSBQT1JUSElPX01BU0tCX0NMRUFSCQkweEZGQzAxNzI0CS8qIFBvcnQgSCBJL08gTWFzayBEaXNhYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUE9SVEhJT19NQVNLQl9TRVQJCTB4RkZDMDE3MjgJLyogUG9ydCBIIEkvTyBNYXNrIEVuYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFBPUlRISU9fTUFTS0JfVE9HR0xFCTB4RkZDMDE3MkMJLyogUG9ydCBIIEkvTyBNYXNrIFRvZ2dsZSBFbmFibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgUE9SVEhJT19ESVIJCQkJMHhGRkMwMTczMAkvKiBQb3J0IEggSS9PIERpcmVjdGlvbiBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIFBPUlRISU9fUE9MQVIJCQkweEZGQzAxNzM0CS8qIFBvcnQgSCBJL08gU291cmNlIFBvbGFyaXR5IFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBQT1JUSElPX0VER0UJCQkweEZGQzAxNzM4CS8qIFBvcnQgSCBJL08gU291cmNlIFNlbnNpdGl2aXR5IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFBPUlRISU9fQk9USAkJCTB4RkZDMDE3M0MJLyogUG9ydCBIIEkvTyBTZXQgb24gQk9USCBFZGdlcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBQT1JUSElPX0lORU4JCQkweEZGQzAxNzQwCS8qIFBvcnQgSCBJL08gSW5wdXQgRW5hYmxlIFJlZ2lzdGVyCQkJCQkJKi8KLQotCi0vKiBVQVJUMSBDb250cm9sbGVyCQkoMHhGRkMwMjAwMCAtIDB4RkZDMDIwRkYpCQkJCQkJCQkqLwotI2RlZmluZSBVQVJUMV9USFIJCQkweEZGQzAyMDAwCS8qIFRyYW5zbWl0IEhvbGRpbmcgcmVnaXN0ZXIJCQkqLwotI2RlZmluZSBVQVJUMV9SQlIJCQkweEZGQzAyMDAwCS8qIFJlY2VpdmUgQnVmZmVyIHJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFVBUlQxX0RMTAkJCTB4RkZDMDIwMDAJLyogRGl2aXNvciBMYXRjaCAoTG93LUJ5dGUpCQkJCSovCi0jZGVmaW5lIFVBUlQxX0lFUgkJCTB4RkZDMDIwMDQJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFVBUlQxX0RMSAkJCTB4RkZDMDIwMDQJLyogRGl2aXNvciBMYXRjaCAoSGlnaC1CeXRlKQkJCSovCi0jZGVmaW5lIFVBUlQxX0lJUgkJCTB4RkZDMDIwMDgJLyogSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyCSovCi0jZGVmaW5lIFVBUlQxX0xDUgkJCTB4RkZDMDIwMEMJLyogTGluZSBDb250cm9sIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFVBUlQxX01DUgkJCTB4RkZDMDIwMTAJLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBVQVJUMV9MU1IJCQkweEZGQzAyMDE0CS8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBVQVJUMV9NU1IJCQkweEZGQzAyMDE4CS8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBVQVJUMV9TQ1IJCQkweEZGQzAyMDFDCS8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBVQVJUMV9HQ1RMCQkJMHhGRkMwMjAyNAkvKiBHbG9iYWwgQ29udHJvbCBSZWdpc3RlcgkJCQkqLwotCi0KLS8qIFBpbiBDb250cm9sIFJlZ2lzdGVycwkoMHhGRkMwMzIwMCAtIDB4RkZDMDMyRkYpCQkJCQkJCQkJCQkqLwotI2RlZmluZSBQT1JURl9GRVIJCQkweEZGQzAzMjAwCS8qIFBvcnQgRiBGdW5jdGlvbiBFbmFibGUgUmVnaXN0ZXIgKEFsdGVybmF0ZS9GbGFnKikJKi8KLSNkZWZpbmUgUE9SVEdfRkVSCQkJMHhGRkMwMzIwNAkvKiBQb3J0IEcgRnVuY3Rpb24gRW5hYmxlIFJlZ2lzdGVyIChBbHRlcm5hdGUvRmxhZyopCSovCi0jZGVmaW5lIFBPUlRIX0ZFUgkJCTB4RkZDMDMyMDgJLyogUG9ydCBIIEZ1bmN0aW9uIEVuYWJsZSBSZWdpc3RlciAoQWx0ZXJuYXRlL0ZsYWcqKQkqLwotI2RlZmluZSBCRklOX1BPUlRfTVVYCQkJMHhGRkMwMzIwQwkvKiBQb3J0IE11bHRpcGxleGVyIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCi0KLQotLyogSGFuZHNoYWtlIE1ETUEgUmVnaXN0ZXJzCSgweEZGQzAzMzAwIC0gMHhGRkMwMzNGRikJCQkJCQkJCQkJKi8KLSNkZWZpbmUgSE1ETUEwX0NPTlRST0wJCTB4RkZDMDMzMDAJLyogSGFuZHNoYWtlIE1ETUEwIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIEhNRE1BMF9FQ0lOSVQJCTB4RkZDMDMzMDQJLyogSE1ETUEwIEluaXRpYWwgRWRnZSBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBITURNQTBfQkNJTklUCQkweEZGQzAzMzA4CS8qIEhNRE1BMCBJbml0aWFsIEJsb2NrIENvdW50IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIEhNRE1BMF9FQ1VSR0VOVAkJMHhGRkMwMzMwQwkvKiBITURNQTAgVXJnZW50IEVkZ2UgQ291bnQgVGhyZXNob2xkIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBITURNQTBfRUNPVkVSRkxPVwkweEZGQzAzMzEwCS8qIEhNRE1BMCBFZGdlIENvdW50IE92ZXJmbG93IEludGVycnVwdCBSZWdpc3RlcgkqLwotI2RlZmluZSBITURNQTBfRUNPVU5UCQkweEZGQzAzMzE0CS8qIEhNRE1BMCBDdXJyZW50IEVkZ2UgQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgSE1ETUEwX0JDT1VOVAkJMHhGRkMwMzMxOAkvKiBITURNQTAgQ3VycmVudCBCbG9jayBDb3VudCBSZWdpc3RlcgkJCQkqLwotCi0jZGVmaW5lIEhNRE1BMV9DT05UUk9MCQkweEZGQzAzMzQwCS8qIEhhbmRzaGFrZSBNRE1BMSBDb250cm9sIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBITURNQTFfRUNJTklUCQkweEZGQzAzMzQ0CS8qIEhNRE1BMSBJbml0aWFsIEVkZ2UgQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgSE1ETUExX0JDSU5JVAkJMHhGRkMwMzM0OAkvKiBITURNQTEgSW5pdGlhbCBCbG9jayBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBITURNQTFfRUNVUkdFTlQJCTB4RkZDMDMzNEMJLyogSE1ETUExIFVyZ2VudCBFZGdlIENvdW50IFRocmVzaG9sZCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgSE1ETUExX0VDT1ZFUkZMT1cJMHhGRkMwMzM1MAkvKiBITURNQTEgRWRnZSBDb3VudCBPdmVyZmxvdyBJbnRlcnJ1cHQgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgSE1ETUExX0VDT1VOVAkJMHhGRkMwMzM1NAkvKiBITURNQTEgQ3VycmVudCBFZGdlIENvdW50IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIEhNRE1BMV9CQ09VTlQJCTB4RkZDMDMzNTgJLyogSE1ETUExIEN1cnJlbnQgQmxvY2sgQ291bnQgUmVnaXN0ZXIJCQkJKi8KLQotCi0vKiBHUElPIFBJTiBtdXggKDB4RkZDMDMyMTAgLSBPeEZGQzAzMjg4KSAqLwotI2RlZmluZSBQT1JURl9NVVggICAgICAgICAgICAgICAweEZGQzAzMjEwICAgICAgLyogUG9ydCBGIG11eCBjb250cm9sICovCi0jZGVmaW5lIFBPUlRHX01VWCAgICAgICAgICAgICAgIDB4RkZDMDMyMTQgICAgICAvKiBQb3J0IEcgbXV4IGNvbnRyb2wgKi8KLSNkZWZpbmUgUE9SVEhfTVVYICAgICAgICAgICAgICAgMHhGRkMwMzIxOCAgICAgIC8qIFBvcnQgSCBtdXggY29udHJvbCAqLwotI2RlZmluZSBQT1JURl9EUklWRSAgICAgICAgICAgICAweEZGQzAzMjIwICAgICAgLyogUG9ydCBGIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgKi8KLSNkZWZpbmUgUE9SVEdfRFJJVkUgICAgICAgICAgICAgMHhGRkMwMzIyNCAgICAgIC8qIFBvcnQgRyBkcml2ZSBzdHJlbmd0aCBjb250cm9sICovCi0jZGVmaW5lIFBPUlRIX0RSSVZFICAgICAgICAgICAgIDB4RkZDMDMyMjggICAgICAvKiBQb3J0IEggZHJpdmUgc3RyZW5ndGggY29udHJvbCAqLwotI2RlZmluZSBQT1JURl9TTEVXICAgICAgICAgICAgICAweEZGQzAzMjMwICAgICAgLyogUG9ydCBGIHNsZXcgY29udHJvbCAqLwotI2RlZmluZSBQT1JUR19TTEVXICAgICAgICAgICAgICAweEZGQzAzMjM0ICAgICAgLyogUG9ydCBHIHNsZXcgY29udHJvbCAqLwotI2RlZmluZSBQT1JUSF9TTEVXICAgICAgICAgICAgICAweEZGQzAzMjM4ICAgICAgLyogUG9ydCBIIHNsZXcgY29udHJvbCAqLwotI2RlZmluZSBQT1JURl9IWVNURVJJU0lTICAgICAgICAweEZGQzAzMjQwICAgICAgLyogUG9ydCBGIFNjaG1pdHQgdHJpZ2dlciBjb250cm9sICovCi0jZGVmaW5lIFBPUlRHX0hZU1RFUklTSVMgICAgICAgIDB4RkZDMDMyNDQgICAgICAvKiBQb3J0IEcgU2NobWl0dCB0cmlnZ2VyIGNvbnRyb2wgKi8KLSNkZWZpbmUgUE9SVEhfSFlTVEVSSVNJUyAgICAgICAgMHhGRkMwMzI0OCAgICAgIC8qIFBvcnQgSCBTY2htaXR0IHRyaWdnZXIgY29udHJvbCAqLwotI2RlZmluZSBNSVNDUE9SVF9EUklWRSAgICAgICAgICAweEZGQzAzMjgwICAgICAgLyogTWlzYyBQb3J0IGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgKi8KLSNkZWZpbmUgTUlTQ1BPUlRfU0xFVyAgICAgICAgICAgMHhGRkMwMzI4NCAgICAgIC8qIE1pc2MgUG9ydCBzbGV3IGNvbnRyb2wgKi8KLSNkZWZpbmUgTUlTQ1BPUlRfSFlTVEVSSVNJUyAgICAgMHhGRkMwMzI4OCAgICAgIC8qIE1pc2MgUG9ydCBTY2htaXR0IHRyaWdnZXIgY29udHJvbCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiogU3lzdGVtIE1NUiBSZWdpc3RlciBCaXRzIEFuZCBNYWNyb3MKLSoqCi0qKiBEaXNjbGFpbWVyOglBbGwgbWFjcm9zIGFyZSBpbnRlbmRlZCB0byBtYWtlIEMgYW5kIEFzc2VtYmx5IGNvZGUgbW9yZSByZWFkYWJsZS4KLSoqCQkJCVVzZSB0aGVzZSBtYWNyb3MgY2FyZWZ1bGx5LCBhcyBhbnkgdGhhdCBkbyBsZWZ0IHNoaWZ0cyBmb3IgZmllbGQKLSoqCQkJCWRlcG9zaXRpbmcgd2lsbCByZXN1bHQgaW4gdGhlIGxvd2VyIG9yZGVyIGJpdHMgYmVpbmcgZGVzdHJveWVkLiAgQW55Ci0qKgkJCQltYWNybyB0aGF0IHNoaWZ0cyBsZWZ0IHRvIHByb3Blcmx5IHBvc2l0aW9uIHRoZSBiaXQtZmllbGQgc2hvdWxkIGJlCi0qKgkJCQl1c2VkIGFzIHBhcnQgb2YgYW4gT1IgdG8gaW5pdGlhbGl6ZSBhIHJlZ2lzdGVyIGFuZCBOT1QgYXMgYSBkeW5hbWljCi0qKgkJCQltb2RpZmllciBVTkxFU1MgdGhlIGxvd2VyIG9yZGVyIGJpdHMgYXJlIHNhdmVkIGFuZCBPUmVkIGJhY2sgaW4gd2hlbgotKioJCQkJdGhlIG1hY3JvIGlzIHVzZWQuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBDSElQSUQgTWFza3MgKi8KLSNkZWZpbmUgQ0hJUElEX1ZFUlNJT04gICAgICAgICAweEYwMDAwMDAwCi0jZGVmaW5lIENISVBJRF9GQU1JTFkgICAgICAgICAgMHgwRkZGRjAwMAotI2RlZmluZSBDSElQSURfTUFOVUZBQ1RVUkUgICAgIDB4MDAwMDBGRkUKLQotLyogU1dSU1QgTWFza3MJCQkJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBTWVNURU1fUkVTRVQJCTB4MDAwNwkvKiBJbml0aWF0ZXMgQSBTeXN0ZW0gU29mdHdhcmUgUmVzZXQJCQkqLwotI2RlZmluZQlET1VCTEVfRkFVTFQJCTB4MDAwOAkvKiBDb3JlIERvdWJsZSBGYXVsdCBDYXVzZXMgUmVzZXQJCQkJKi8KLSNkZWZpbmUgUkVTRVRfRE9VQkxFCQkweDIwMDAJLyogU1cgUmVzZXQgR2VuZXJhdGVkIEJ5IENvcmUgRG91YmxlLUZhdWx0CQkqLwotI2RlZmluZSBSRVNFVF9XRE9HCQkJMHg0MDAwCS8qIFNXIFJlc2V0IEdlbmVyYXRlZCBCeSBXYXRjaGRvZyBUaW1lcgkJCSovCi0jZGVmaW5lIFJFU0VUX1NPRlRXQVJFCQkweDgwMDAJLyogU1cgUmVzZXQgT2NjdXJyZWQgU2luY2UgTGFzdCBSZWFkIE9mIFNXUlNUCSovCi0KLS8qIFNZU0NSIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBCTU9ERQkJCQkweDAwMDcJLyogQm9vdCBNb2RlIC0gTGF0Y2hlZCBEdXJpbmcgSFcgUmVzZXQgRnJvbSBNb2RlIFBpbnMJKi8KLSNkZWZpbmUJTk9CT09UCQkJCTB4MDAxMAkvKiBFeGVjdXRlIEZyb20gTDEgb3IgQVNZTkMgQmFuayAwIFdoZW4gQk1PREUgPSAwCQkqLwotCi0KLS8qICoqKioqKioqKioqKiogIFNZU1RFTSBJTlRFUlJVUFQgQ09OVFJPTExFUiBNQVNLUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUGVyaXBoZXJhbCBNYXNrcyBGb3IgU0lDX0lTUiwgU0lDX0lXUiwgU0lDX0lNQVNLCQkJCQkJCQkJCSovCi0KLSNpZiAwCi0jZGVmaW5lIElSUV9QTExfV0FLRVVQCTB4MDAwMDAwMDEJLyogUExMIFdha2V1cCBJbnRlcnJ1cHQJCQkgCQkJCQkqLwotCi0jZGVmaW5lIElSUV9FUlJPUjEgICAgICAweDAwMDAwMDAyICAvKiBFcnJvciBJbnRlcnJ1cHQgKERNQSwgRE1BUnggQmxvY2ssIERNQVJ4IE92ZXJmbG93KSAqLwotI2RlZmluZSBJUlFfRVJST1IyICAgICAgMHgwMDAwMDAwNCAgLyogRXJyb3IgSW50ZXJydXB0IChDQU4sIEV0aGVybmV0LCBTUE9SVHgsIFBQSSwgU1BJLCBVQVJUeCkgKi8KLSNkZWZpbmUgSVJRX1JUQwkJCTB4MDAwMDAwMDgJLyogUmVhbCBUaW1lIENsb2NrIEludGVycnVwdCAJCQkJCQkqLwotI2RlZmluZSBJUlFfRE1BMAkJMHgwMDAwMDAxMAkvKiBETUEgQ2hhbm5lbCAwIChQUEkpIEludGVycnVwdCAJCQkJCSovCi0jZGVmaW5lIElSUV9ETUEzCQkweDAwMDAwMDIwCS8qIERNQSBDaGFubmVsIDMgKFNQT1JUMCBSWCkgSW50ZXJydXB0IAkJCQkqLwotI2RlZmluZSBJUlFfRE1BNAkJMHgwMDAwMDA0MAkvKiBETUEgQ2hhbm5lbCA0IChTUE9SVDAgVFgpIEludGVycnVwdCAJCQkJKi8KLSNkZWZpbmUgSVJRX0RNQTUJCTB4MDAwMDAwODAJLyogRE1BIENoYW5uZWwgNSAoU1BPUlQxIFJYKSBJbnRlcnJ1cHQgCQkJCSovCi0KLSNkZWZpbmUgSVJRX0RNQTYJCTB4MDAwMDAxMDAJLyogRE1BIENoYW5uZWwgNiAoU1BPUlQxIFRYKSBJbnRlcnJ1cHQgCQkgCQkqLwotI2RlZmluZSBJUlFfVFdJCQkJMHgwMDAwMDIwMAkvKiBUV0kgSW50ZXJydXB0CQkJCQkJCQkJKi8KLSNkZWZpbmUgSVJRX0RNQTcJCTB4MDAwMDA0MDAJLyogRE1BIENoYW5uZWwgNyAoU1BJKSBJbnRlcnJ1cHQgCQkJCQkqLwotI2RlZmluZSBJUlFfRE1BOAkJMHgwMDAwMDgwMAkvKiBETUEgQ2hhbm5lbCA4IChVQVJUMCBSWCkgSW50ZXJydXB0IAkJCQkqLwotI2RlZmluZSBJUlFfRE1BOQkJMHgwMDAwMTAwMAkvKiBETUEgQ2hhbm5lbCA5IChVQVJUMCBUWCkgSW50ZXJydXB0IAkJCQkqLwotI2RlZmluZSBJUlFfRE1BMTAJCTB4MDAwMDIwMDAJLyogRE1BIENoYW5uZWwgMTAgKFVBUlQxIFJYKSBJbnRlcnJ1cHQgCQkJCSovCi0jZGVmaW5lIElSUV9ETUExMQkJMHgwMDAwNDAwMAkvKiBETUEgQ2hhbm5lbCAxMSAoVUFSVDEgVFgpIEludGVycnVwdCAJCQkJKi8KLSNkZWZpbmUgSVJRX0NBTl9SWAkJMHgwMDAwODAwMAkvKiBDQU4gUmVjZWl2ZSBJbnRlcnJ1cHQgCQkJCQkJCSovCi0KLSNkZWZpbmUgSVJRX0NBTl9UWAkJMHgwMDAxMDAwMAkvKiBDQU4gVHJhbnNtaXQgSW50ZXJydXB0ICAJCQkJCQkJKi8KLSNkZWZpbmUgSVJRX0RNQTEJCTB4MDAwMjAwMDAJLyogRE1BIENoYW5uZWwgMSAoRXRoZXJuZXQgUlgpIEludGVycnVwdCAJCQkqLwotI2RlZmluZSBJUlFfUEZBX1BPUlRICTB4MDAwMjAwMDAJLyogUEYgUG9ydCBIIChQRjQ3OjMyKSBJbnRlcnJ1cHQgQSAJCQkJCSovCi0jZGVmaW5lIElSUV9ETUEyCQkweDAwMDQwMDAwCS8qIERNQSBDaGFubmVsIDIgKEV0aGVybmV0IFRYKSBJbnRlcnJ1cHQgCQkJKi8KLSNkZWZpbmUgSVJRX1BGQl9QT1JUSAkweDAwMDQwMDAwCS8qIFBGIFBvcnQgSCAoUEY0NzozMikgSW50ZXJydXB0IEIgCQkJCQkqLwotI2RlZmluZSBJUlFfVElNRVIwCQkweDAwMDgwMDAwCS8qIFRpbWVyIDAgSW50ZXJydXB0CQkJCQkJCQkqLwotI2RlZmluZSBJUlFfVElNRVIxCQkweDAwMTAwMDAwCS8qIFRpbWVyIDEgSW50ZXJydXB0IAkJCQkJCQkJKi8KLSNkZWZpbmUgSVJRX1RJTUVSMgkJMHgwMDIwMDAwMAkvKiBUaW1lciAyIEludGVycnVwdCAJCQkJCQkJCSovCi0jZGVmaW5lIElSUV9USU1FUjMJCTB4MDA0MDAwMDAJLyogVGltZXIgMyBJbnRlcnJ1cHQgCQkJCQkJCQkqLwotI2RlZmluZSBJUlFfVElNRVI0CQkweDAwODAwMDAwCS8qIFRpbWVyIDQgSW50ZXJydXB0IAkJCQkJCQkJKi8KLQotI2RlZmluZSBJUlFfVElNRVI1CQkweDAxMDAwMDAwCS8qIFRpbWVyIDUgSW50ZXJydXB0IAkJCQkJCQkJKi8KLSNkZWZpbmUgSVJRX1RJTUVSNgkJMHgwMjAwMDAwMAkvKiBUaW1lciA2IEludGVycnVwdCAJCQkJCQkJCSovCi0jZGVmaW5lIElSUV9USU1FUjcJCTB4MDQwMDAwMDAJLyogVGltZXIgNyBJbnRlcnJ1cHQgCQkJCQkJCQkqLwotI2RlZmluZSBJUlFfUEZBX1BPUlRGRwkweDA4MDAwMDAwCS8qIFBGIFBvcnRzIEYmRyAoUEYzMTowKSBJbnRlcnJ1cHQgQSAJCQkJKi8KLSNkZWZpbmUgSVJRX1BGQl9QT1JURgkweDgwMDAwMDAwCS8qIFBGIFBvcnQgRiAoUEYxNTowKSBJbnRlcnJ1cHQgQiAJCQkJCSovCi0jZGVmaW5lIElSUV9ETUExMgkJMHgyMDAwMDAwMAkvKiBETUEgQ2hhbm5lbHMgMTIgKE1ETUExIFNvdXJjZSkgUlggSW50ZXJydXB0IAkJKi8KLSNkZWZpbmUgSVJRX0RNQTEzCQkweDIwMDAwMDAwCS8qIERNQSBDaGFubmVscyAxMyAoTURNQTEgRGVzdGluYXRpb24pIFRYIEludGVycnVwdCAqLwotI2RlZmluZSBJUlFfRE1BMTQJCTB4NDAwMDAwMDAJLyogRE1BIENoYW5uZWxzIDE0IChNRE1BMCBTb3VyY2UpIFJYIEludGVycnVwdCAJCSovCi0jZGVmaW5lIElSUV9ETUExNQkJMHg0MDAwMDAwMAkvKiBETUEgQ2hhbm5lbHMgMTUgKE1ETUEwIERlc3RpbmF0aW9uKSBUWCBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSVJRX1dET0cJCTB4ODAwMDAwMDAJLyogU29mdHdhcmUgV2F0Y2hkb2cgVGltZXIgSW50ZXJydXB0IAkJCQkqLwotI2RlZmluZSBJUlFfUEZCX1BPUlRHCTB4MTAwMDAwMDAJLyogUEYgUG9ydCBHIChQRjMxOjE2KSBJbnRlcnJ1cHQgQiAJCQkJCSovCi0jZW5kaWYKLQotLyogU0lDX0lBUjAgTWFjcm9zCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUDBfSVZHKHgpCQkoKCh4KSYweEYpLTcpCQkJLyogUGVyaXBoZXJhbCAjMCBhc3NpZ25lZCBJVkcgI3ggCSovCi0jZGVmaW5lIFAxX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDQJLyogUGVyaXBoZXJhbCAjMSBhc3NpZ25lZCBJVkcgI3ggCSovCi0jZGVmaW5lIFAyX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDgJLyogUGVyaXBoZXJhbCAjMiBhc3NpZ25lZCBJVkcgI3ggCSovCi0jZGVmaW5lIFAzX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweEMJLyogUGVyaXBoZXJhbCAjMyBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDRfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTAJLyogUGVyaXBoZXJhbCAjNCBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDVfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTQJLyogUGVyaXBoZXJhbCAjNSBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDZfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTgJLyogUGVyaXBoZXJhbCAjNiBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDdfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MUMJLyogUGVyaXBoZXJhbCAjNyBhc3NpZ25lZCBJVkcgI3gJKi8KLQotLyogU0lDX0lBUjEgTWFjcm9zCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUDhfSVZHKHgpCQkoKCh4KSYweEYpLTcpCQkJLyogUGVyaXBoZXJhbCAjOCBhc3NpZ25lZCBJVkcgI3ggCSovCi0jZGVmaW5lIFA5X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDQJLyogUGVyaXBoZXJhbCAjOSBhc3NpZ25lZCBJVkcgI3ggCSovCi0jZGVmaW5lIFAxMF9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHg4CS8qIFBlcmlwaGVyYWwgIzEwIGFzc2lnbmVkIElWRyAjeAkqLwotI2RlZmluZSBQMTFfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4QwkvKiBQZXJpcGhlcmFsICMxMSBhc3NpZ25lZCBJVkcgI3ggCSovCi0jZGVmaW5lIFAxMl9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxMAkvKiBQZXJpcGhlcmFsICMxMiBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDEzX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDE0CS8qIFBlcmlwaGVyYWwgIzEzIGFzc2lnbmVkIElWRyAjeAkqLwotI2RlZmluZSBQMTRfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTgJLyogUGVyaXBoZXJhbCAjMTQgYXNzaWduZWQgSVZHICN4CSovCi0jZGVmaW5lIFAxNV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxQwkvKiBQZXJpcGhlcmFsICMxNSBhc3NpZ25lZCBJVkcgI3gJKi8KLQotLyogU0lDX0lBUjIgTWFjcm9zCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUDE2X0lWRyh4KQkJKCgoeCkmMHhGKS03KQkJCS8qIFBlcmlwaGVyYWwgIzE2IGFzc2lnbmVkIElWRyAjeAkqLwotI2RlZmluZSBQMTdfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4NAkvKiBQZXJpcGhlcmFsICMxNyBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDE4X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDgJLyogUGVyaXBoZXJhbCAjMTggYXNzaWduZWQgSVZHICN4CSovCi0jZGVmaW5lIFAxOV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHhDCS8qIFBlcmlwaGVyYWwgIzE5IGFzc2lnbmVkIElWRyAjeAkqLwotI2RlZmluZSBQMjBfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTAJLyogUGVyaXBoZXJhbCAjMjAgYXNzaWduZWQgSVZHICN4CSovCi0jZGVmaW5lIFAyMV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxNAkvKiBQZXJpcGhlcmFsICMyMSBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDIyX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDE4CS8qIFBlcmlwaGVyYWwgIzIyIGFzc2lnbmVkIElWRyAjeAkqLwotI2RlZmluZSBQMjNfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MUMJLyogUGVyaXBoZXJhbCAjMjMgYXNzaWduZWQgSVZHICN4CSovCi0KLS8qIFNJQ19JQVIzIE1hY3JvcwkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFAyNF9JVkcoeCkJCSgoKHgpJjB4RiktNykJCQkvKiBQZXJpcGhlcmFsICMyNCBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDI1X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDQJLyogUGVyaXBoZXJhbCAjMjUgYXNzaWduZWQgSVZHICN4CSovCi0jZGVmaW5lIFAyNl9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHg4CS8qIFBlcmlwaGVyYWwgIzI2IGFzc2lnbmVkIElWRyAjeAkqLwotI2RlZmluZSBQMjdfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4QwkvKiBQZXJpcGhlcmFsICMyNyBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDI4X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDEwCS8qIFBlcmlwaGVyYWwgIzI4IGFzc2lnbmVkIElWRyAjeAkqLwotI2RlZmluZSBQMjlfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTQJLyogUGVyaXBoZXJhbCAjMjkgYXNzaWduZWQgSVZHICN4CSovCi0jZGVmaW5lIFAzMF9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxOAkvKiBQZXJpcGhlcmFsICMzMCBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDMxX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDFDCS8qIFBlcmlwaGVyYWwgIzMxIGFzc2lnbmVkIElWRyAjeAkqLwotCi0KLS8qIFNJQ19JTUFTSyBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFNJQ19VTk1BU0tfQUxMCTB4MDAwMDAwMDAJCQkJCS8qIFVubWFzayBhbGwgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzCSovCi0jZGVmaW5lIFNJQ19NQVNLX0FMTAkweEZGRkZGRkZGCQkJCQkvKiBNYXNrIGFsbCBwZXJpcGhlcmFsIGludGVycnVwdHMJKi8KLSNkZWZpbmUgU0lDX01BU0soeCkJCSgxIDw8ICgoeCkmMHgxRikpCQkJCQkvKiBNYXNrIFBlcmlwaGVyYWwgI3ggaW50ZXJydXB0CQkqLwotI2RlZmluZSBTSUNfVU5NQVNLKHgpCSgweEZGRkZGRkZGIF4gKDEgPDwgKCh4KSYweDFGKSkpCS8qIFVubWFzayBQZXJpcGhlcmFsICN4IGludGVycnVwdAkqLwotCi0vKiBTSUNfSVdSIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgSVdSX0RJU0FCTEVfQUxMCTB4MDAwMDAwMDAJCQkJCS8qIFdha2V1cCBEaXNhYmxlIGFsbCBwZXJpcGhlcmFscwkqLwotI2RlZmluZSBJV1JfRU5BQkxFX0FMTAkweEZGRkZGRkZGCQkJCQkvKiBXYWtldXAgRW5hYmxlIGFsbCBwZXJpcGhlcmFscwkqLwotI2RlZmluZSBJV1JfRU5BQkxFKHgpCSgxIDw8ICgoeCkmMHgxRikpCQkJCQkvKiBXYWtldXAgRW5hYmxlIFBlcmlwaGVyYWwgI3gJCSovCi0jZGVmaW5lIElXUl9ESVNBQkxFKHgpCSgweEZGRkZGRkZGIF4gKDEgPDwgKCh4KSYweDFGKSkpIAkvKiBXYWtldXAgRGlzYWJsZSBQZXJpcGhlcmFsICN4CQkqLwotCi0KLS8qICoqKioqKioqKioqKioqIFVBUlQgQ09OVFJPTExFUiBNQVNLUyAqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogVUFSVHhfTENSIE1hc2tzCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgV0xTKHgpCQkoKCh4KS01KSAmIDB4MDMpCS8qIFdvcmQgTGVuZ3RoIFNlbGVjdCAqLwotI2RlZmluZSBTVEIJCQkweDA0CQkJCS8qIFN0b3AgQml0cwkJCSovCi0jZGVmaW5lIFBFTgkJCTB4MDgJCQkJLyogUGFyaXR5IEVuYWJsZQkJKi8KLSNkZWZpbmUgRVBTCQkJMHgxMAkJCQkvKiBFdmVuIFBhcml0eSBTZWxlY3QJKi8KLSNkZWZpbmUgU1RQCQkJMHgyMAkJCQkvKiBTdGljayBQYXJpdHkJCQkqLwotI2RlZmluZSBTQgkJCTB4NDAJCQkJLyogU2V0IEJyZWFrCQkJKi8KLSNkZWZpbmUgRExBQgkJMHg4MAkJCQkvKiBEaXZpc29yIExhdGNoIEFjY2VzcwkqLwotCi0vKiBVQVJUeF9NQ1IgTWFzawkJCQkJCQkJCQkqLwotI2RlZmluZSBMT09QX0VOQQkweDEwCS8qIExvb3BiYWNrIE1vZGUgRW5hYmxlICovCi0jZGVmaW5lIExPT1BfRU5BX1AJMHgwNAotCi0vKiBVQVJUeF9MU1IgTWFza3MJCQkJCQkJCQkJKi8KLSNkZWZpbmUgRFIJCQkweDAxCS8qIERhdGEgUmVhZHkJCQkJKi8KLSNkZWZpbmUgT0UJCQkweDAyCS8qIE92ZXJydW4gRXJyb3IJCQkqLwotI2RlZmluZSBQRQkJCTB4MDQJLyogUGFyaXR5IEVycm9yCQkJCSovCi0jZGVmaW5lIEZFCQkJMHgwOAkvKiBGcmFtaW5nIEVycm9yCQkJKi8KLSNkZWZpbmUgQkkJCQkweDEwCS8qIEJyZWFrIEludGVycnVwdAkJCSovCi0jZGVmaW5lIFRIUkUJCTB4MjAJLyogVEhSIEVtcHR5CQkJCSovCi0jZGVmaW5lIFRFTVQJCTB4NDAJLyogVFNSIGFuZCBVQVJUX1RIUiBFbXB0eQkqLwotCi0vKiBVQVJUeF9JRVIgTWFza3MJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBFUkJGSQkJMHgwMQkJLyogRW5hYmxlIFJlY2VpdmUgQnVmZmVyIEZ1bGwgSW50ZXJydXB0CQkqLwotI2RlZmluZSBFVEJFSQkJMHgwMgkJLyogRW5hYmxlIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eSBJbnRlcnJ1cHQJKi8KLSNkZWZpbmUgRUxTSQkJMHgwNAkJLyogRW5hYmxlIFJYIFN0YXR1cyBJbnRlcnJ1cHQJCQkJKi8KLQotLyogVUFSVHhfSUlSIE1hc2tzCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBOSU5UCQkweDAxCQkvKiBQZW5kaW5nIEludGVycnVwdAkJCQkJKi8KLSNkZWZpbmUgSUlSX1RYX1JFQURZICAgIDB4MDIJCS8qIFVBUlRfVEhSIGVtcHR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIElJUl9SWF9SRUFEWSAgICAweDA0CQkvKiBSZWNlaXZlIGRhdGEgcmVhZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBJSVJfTElORV9DSEFOR0UgMHgwNgkJLyogUmVjZWl2ZSBsaW5lIHN0YXR1cyAgICAJCQkqLwotI2RlZmluZSBJSVJfU1RBVFVTCTB4MDYJCS8qIEhpZ2hlc3QgUHJpb3JpdHkgUGVuZGluZyBJbnRlcnJ1cHQJKi8KLQotLyogVUFSVHhfR0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBVQ0VOCQkweDAxCQkvKiBFbmFibGUgVUFSVHggQ2xvY2tzCQkJCSovCi0jZGVmaW5lIElSRU4JCTB4MDIJCS8qIEVuYWJsZSBJckRBIE1vZGUJCQkJCSovCi0jZGVmaW5lIFRQT0xDCQkweDA0CQkvKiBJckRBIFRYIFBvbGFyaXR5IENoYW5nZQkJCSovCi0jZGVmaW5lIFJQT0xDCQkweDA4CQkvKiBJckRBIFJYIFBvbGFyaXR5IENoYW5nZQkJCSovCi0jZGVmaW5lIEZQRQkJCTB4MTAJCS8qIEZvcmNlIFBhcml0eSBFcnJvciBPbiBUcmFuc21pdAkqLwotI2RlZmluZSBGRkUJCQkweDIwCQkvKiBGb3JjZSBGcmFtaW5nIEVycm9yIE9uIFRyYW5zbWl0CSovCi0KLQotLyogICoqKioqKioqKioqKioqKiogIEdFTkVSQUwgUFVSUE9TRSBUSU1FUiBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFRJTUVSX0VOQUJMRSBNYXNrcwkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBUSU1FTjAJCQkweDAwMDEJCS8qIEVuYWJsZSBUaW1lciAwCQkJCQkqLwotI2RlZmluZSBUSU1FTjEJCQkweDAwMDIJCS8qIEVuYWJsZSBUaW1lciAxCQkJCQkqLwotI2RlZmluZSBUSU1FTjIJCQkweDAwMDQJCS8qIEVuYWJsZSBUaW1lciAyCQkJCQkqLwotI2RlZmluZSBUSU1FTjMJCQkweDAwMDgJCS8qIEVuYWJsZSBUaW1lciAzCQkJCQkqLwotI2RlZmluZSBUSU1FTjQJCQkweDAwMTAJCS8qIEVuYWJsZSBUaW1lciA0CQkJCQkqLwotI2RlZmluZSBUSU1FTjUJCQkweDAwMjAJCS8qIEVuYWJsZSBUaW1lciA1CQkJCQkqLwotI2RlZmluZSBUSU1FTjYJCQkweDAwNDAJCS8qIEVuYWJsZSBUaW1lciA2CQkJCQkqLwotI2RlZmluZSBUSU1FTjcJCQkweDAwODAJCS8qIEVuYWJsZSBUaW1lciA3CQkJCQkqLwotCi0vKiBUSU1FUl9ESVNBQkxFIE1hc2tzCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFRJTURJUzAJCQlUSU1FTjAJCS8qIERpc2FibGUgVGltZXIgMAkJCQkJKi8KLSNkZWZpbmUgVElNRElTMQkJCVRJTUVOMQkJLyogRGlzYWJsZSBUaW1lciAxCQkJCQkqLwotI2RlZmluZSBUSU1ESVMyCQkJVElNRU4yCQkvKiBEaXNhYmxlIFRpbWVyIDIJCQkJCSovCi0jZGVmaW5lIFRJTURJUzMJCQlUSU1FTjMJCS8qIERpc2FibGUgVGltZXIgMwkJCQkJKi8KLSNkZWZpbmUgVElNRElTNAkJCVRJTUVONAkJLyogRGlzYWJsZSBUaW1lciA0CQkJCQkqLwotI2RlZmluZSBUSU1ESVM1CQkJVElNRU41CQkvKiBEaXNhYmxlIFRpbWVyIDUJCQkJCSovCi0jZGVmaW5lIFRJTURJUzYJCQlUSU1FTjYJCS8qIERpc2FibGUgVGltZXIgNgkJCQkJKi8KLSNkZWZpbmUgVElNRElTNwkJCVRJTUVONwkJLyogRGlzYWJsZSBUaW1lciA3CQkJCQkqLwotCi0vKiBUSU1FUl9TVEFUVVMgTWFza3MJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgVElNSUwwCQkJMHgwMDAwMDAwMQkvKiBUaW1lciAwIEludGVycnVwdAkJCQkqLwotI2RlZmluZSBUSU1JTDEJCQkweDAwMDAwMDAyCS8qIFRpbWVyIDEgSW50ZXJydXB0CQkJCSovCi0jZGVmaW5lIFRJTUlMMgkJCTB4MDAwMDAwMDQJLyogVGltZXIgMiBJbnRlcnJ1cHQJCQkJKi8KLSNkZWZpbmUgVElNSUwzCQkJMHgwMDAwMDAwOAkvKiBUaW1lciAzIEludGVycnVwdAkJCQkqLwotI2RlZmluZSBUT1ZGX0VSUjAJCTB4MDAwMDAwMTAJLyogVGltZXIgMCBDb3VudGVyIE92ZXJmbG93CQkJKi8KLSNkZWZpbmUgVE9WRl9FUlIxCQkweDAwMDAwMDIwCS8qIFRpbWVyIDEgQ291bnRlciBPdmVyZmxvdwkJCSovCi0jZGVmaW5lIFRPVkZfRVJSMgkJMHgwMDAwMDA0MAkvKiBUaW1lciAyIENvdW50ZXIgT3ZlcmZsb3cJCQkqLwotI2RlZmluZSBUT1ZGX0VSUjMJCTB4MDAwMDAwODAJLyogVGltZXIgMyBDb3VudGVyIE92ZXJmbG93CQkJKi8KLSNkZWZpbmUgVFJVTjAJCQkweDAwMDAxMDAwCS8qIFRpbWVyIDAgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLSNkZWZpbmUgVFJVTjEJCQkweDAwMDAyMDAwCS8qIFRpbWVyIDEgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLSNkZWZpbmUgVFJVTjIJCQkweDAwMDA0MDAwCS8qIFRpbWVyIDIgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLSNkZWZpbmUgVFJVTjMJCQkweDAwMDA4MDAwCS8qIFRpbWVyIDMgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLSNkZWZpbmUgVElNSUw0CQkJMHgwMDAxMDAwMAkvKiBUaW1lciA0IEludGVycnVwdAkJCQkqLwotI2RlZmluZSBUSU1JTDUJCQkweDAwMDIwMDAwCS8qIFRpbWVyIDUgSW50ZXJydXB0CQkJCSovCi0jZGVmaW5lIFRJTUlMNgkJCTB4MDAwNDAwMDAJLyogVGltZXIgNiBJbnRlcnJ1cHQJCQkJKi8KLSNkZWZpbmUgVElNSUw3CQkJMHgwMDA4MDAwMAkvKiBUaW1lciA3IEludGVycnVwdAkJCQkqLwotI2RlZmluZSBUT1ZGX0VSUjQJCTB4MDAxMDAwMDAJLyogVGltZXIgNCBDb3VudGVyIE92ZXJmbG93CQkJKi8KLSNkZWZpbmUgVE9WRl9FUlI1CQkweDAwMjAwMDAwCS8qIFRpbWVyIDUgQ291bnRlciBPdmVyZmxvdwkJCSovCi0jZGVmaW5lIFRPVkZfRVJSNgkJMHgwMDQwMDAwMAkvKiBUaW1lciA2IENvdW50ZXIgT3ZlcmZsb3cJCQkqLwotI2RlZmluZSBUT1ZGX0VSUjcJCTB4MDA4MDAwMDAJLyogVGltZXIgNyBDb3VudGVyIE92ZXJmbG93CQkJKi8KLSNkZWZpbmUgVFJVTjQJCQkweDEwMDAwMDAwCS8qIFRpbWVyIDQgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLSNkZWZpbmUgVFJVTjUJCQkweDIwMDAwMDAwCS8qIFRpbWVyIDUgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLSNkZWZpbmUgVFJVTjYJCQkweDQwMDAwMDAwCS8qIFRpbWVyIDYgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLSNkZWZpbmUgVFJVTjcJCQkweDgwMDAwMDAwCS8qIFRpbWVyIDcgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLQotLyogQWx0ZXJuYXRlIERlcHJlY2F0ZWQgTWFjcm9zIFByb3ZpZGVkIEZvciBCYWNrd2FyZHMgQ29kZSBDb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lIFRPVkxfRVJSMCBUT1ZGX0VSUjAKLSNkZWZpbmUgVE9WTF9FUlIxIFRPVkZfRVJSMQotI2RlZmluZSBUT1ZMX0VSUjIgVE9WRl9FUlIyCi0jZGVmaW5lIFRPVkxfRVJSMyBUT1ZGX0VSUjMKLSNkZWZpbmUgVE9WTF9FUlI0IFRPVkZfRVJSNAotI2RlZmluZSBUT1ZMX0VSUjUgVE9WRl9FUlI1Ci0jZGVmaW5lIFRPVkxfRVJSNiBUT1ZGX0VSUjYKLSNkZWZpbmUgVE9WTF9FUlI3IFRPVkZfRVJSNwotCi0vKiBUSU1FUnhfQ09ORklHIE1hc2tzCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFBXTV9PVVQJCQkweDAwMDEJLyogUHVsc2UtV2lkdGggTW9kdWxhdGlvbiBPdXRwdXQgTW9kZQkqLwotI2RlZmluZSBXRFRIX0NBUAkJMHgwMDAyCS8qIFdpZHRoIENhcHR1cmUgSW5wdXQgTW9kZQkJCQkqLwotI2RlZmluZSBFWFRfQ0xLCQkJMHgwMDAzCS8qIEV4dGVybmFsIENsb2NrIE1vZGUJCQkJCSovCi0jZGVmaW5lIFBVTFNFX0hJCQkweDAwMDQJLyogQWN0aW9uIFB1bHNlIChQb3NpdGl2ZS9OZWdhdGl2ZSopCSovCi0jZGVmaW5lIFBFUklPRF9DTlQJCTB4MDAwOAkvKiBQZXJpb2QgQ291bnQJCQkJCQkJKi8KLSNkZWZpbmUgSVJRX0VOQQkJCTB4MDAxMAkvKiBJbnRlcnJ1cHQgUmVxdWVzdCBFbmFibGUJCQkJKi8KLSNkZWZpbmUgVElOX1NFTAkJCTB4MDAyMAkvKiBUaW1lciBJbnB1dCBTZWxlY3QJCQkJCSovCi0jZGVmaW5lIE9VVF9ESVMJCQkweDAwNDAJLyogT3V0cHV0IFBhZCBEaXNhYmxlCQkJCQkqLwotI2RlZmluZSBDTEtfU0VMCQkJMHgwMDgwCS8qIFRpbWVyIENsb2NrIFNlbGVjdAkJCQkJKi8KLSNkZWZpbmUgVE9HR0xFX0hJCQkweDAxMDAJLyogUFdNX09VVCBQVUxTRV9ISSBUb2dnbGUgTW9kZQkJCSovCi0jZGVmaW5lIEVNVV9SVU4JCQkweDAyMDAJLyogRW11bGF0aW9uIEJlaGF2aW9yIFNlbGVjdAkJCSovCi0jZGVmaW5lIEVSUl9UWVAJCQkweEMwMDAJLyogRXJyb3IgVHlwZQkJCQkJCQkqLwotCi0KLS8qICoqKioqKioqKioqKioqKioqKiAgIEdQSU8gUE9SVFMgRiwgRywgSCBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgR2VuZXJhbCBQdXJwb3NlIElPICgweEZGQzAwNzAwIC0gMHhGRkMwMDdGRikgIE1hc2tzIAkJCQkqLwotLyogUG9ydCBGIE1hc2tzIAkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUEYwCQkweDAwMDEKLSNkZWZpbmUgUEYxCQkweDAwMDIKLSNkZWZpbmUgUEYyCQkweDAwMDQKLSNkZWZpbmUgUEYzCQkweDAwMDgKLSNkZWZpbmUgUEY0CQkweDAwMTAKLSNkZWZpbmUgUEY1CQkweDAwMjAKLSNkZWZpbmUgUEY2CQkweDAwNDAKLSNkZWZpbmUgUEY3CQkweDAwODAKLSNkZWZpbmUgUEY4CQkweDAxMDAKLSNkZWZpbmUgUEY5CQkweDAyMDAKLSNkZWZpbmUgUEYxMAkweDA0MDAKLSNkZWZpbmUgUEYxMQkweDA4MDAKLSNkZWZpbmUgUEYxMgkweDEwMDAKLSNkZWZpbmUgUEYxMwkweDIwMDAKLSNkZWZpbmUgUEYxNAkweDQwMDAKLSNkZWZpbmUgUEYxNQkweDgwMDAKLQotLyogUG9ydCBHIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUEcwCQkweDAwMDEKLSNkZWZpbmUgUEcxCQkweDAwMDIKLSNkZWZpbmUgUEcyCQkweDAwMDQKLSNkZWZpbmUgUEczCQkweDAwMDgKLSNkZWZpbmUgUEc0CQkweDAwMTAKLSNkZWZpbmUgUEc1CQkweDAwMjAKLSNkZWZpbmUgUEc2CQkweDAwNDAKLSNkZWZpbmUgUEc3CQkweDAwODAKLSNkZWZpbmUgUEc4CQkweDAxMDAKLSNkZWZpbmUgUEc5CQkweDAyMDAKLSNkZWZpbmUgUEcxMAkweDA0MDAKLSNkZWZpbmUgUEcxMQkweDA4MDAKLSNkZWZpbmUgUEcxMgkweDEwMDAKLSNkZWZpbmUgUEcxMwkweDIwMDAKLSNkZWZpbmUgUEcxNAkweDQwMDAKLSNkZWZpbmUgUEcxNQkweDgwMDAKLQotLyogUG9ydCBIIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUEgwCQkweDAwMDEKLSNkZWZpbmUgUEgxCQkweDAwMDIKLSNkZWZpbmUgUEgyCQkweDAwMDQKLSNkZWZpbmUgUEgzCQkweDAwMDgKLSNkZWZpbmUgUEg0CQkweDAwMTAKLSNkZWZpbmUgUEg1CQkweDAwMjAKLSNkZWZpbmUgUEg2CQkweDAwNDAKLSNkZWZpbmUgUEg3CQkweDAwODAKLQotLyogKioqKioqKioqKioqKioqKioqKioqICBBU1lOQ0hST05PVVMgTUVNT1JZIENPTlRST0xMRVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBFQklVX0FNR0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgQU1DS0VOCQkJMHgwMDAxCQkvKiBFbmFibGUgQ0xLT1VUCQkJCQkJCQkJKi8KLSNkZWZpbmUJQU1CRU5fTk9ORQkJMHgwMDAwCQkvKiBBbGwgQmFua3MgRGlzYWJsZWQJCQkJCQkJCSovCi0jZGVmaW5lIEFNQkVOX0IwCQkweDAwMDIJCS8qIEVuYWJsZSBBc3luYyBNZW1vcnkgQmFuayAwIG9ubHkJCQkJCSovCi0jZGVmaW5lIEFNQkVOX0IwX0IxCQkweDAwMDQJCS8qIEVuYWJsZSBBc3luYyBNZW1vcnkgQmFua3MgMCAmIDEgb25seQkJCQkqLwotI2RlZmluZSBBTUJFTl9CMF9CMV9CMgkweDAwMDYJCS8qIEVuYWJsZSBBc3luYyBNZW1vcnkgQmFua3MgMCwgMSwgYW5kIDIJCQkqLwotI2RlZmluZSBBTUJFTl9BTEwJCTB4MDAwOAkJLyogRW5hYmxlIEFzeW5jIE1lbW9yeSBCYW5rcyAoYWxsKSAwLCAxLCAyLCBhbmQgMwkqLwotCi0vKiBFQklVX0FNQkNUTDAgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIEIwUkRZRU4JCQkweDAwMDAwMDAxICAvKiBCYW5rIDAgKEIwKSBSRFkgRW5hYmxlCQkJCQkJCSovCi0jZGVmaW5lIEIwUkRZUE9MCQkweDAwMDAwMDAyICAvKiBCMCBSRFkgQWN0aXZlIEhpZ2gJCQkJCQkJCSovCi0jZGVmaW5lIEIwVFRfMQkJCTB4MDAwMDAwMDQgIC8qIEIwIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAxIGN5Y2xlCQkqLwotI2RlZmluZSBCMFRUXzIJCQkweDAwMDAwMDA4ICAvKiBCMCBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMiBjeWNsZXMJKi8KLSNkZWZpbmUgQjBUVF8zCQkJMHgwMDAwMDAwQyAgLyogQjAgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDMgY3ljbGVzCSovCi0jZGVmaW5lIEIwVFRfNAkJCTB4MDAwMDAwMDAgIC8qIEIwIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSA0IGN5Y2xlcwkqLwotI2RlZmluZSBCMFNUXzEJCQkweDAwMDAwMDEwICAvKiBCMCBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAxIGN5Y2xlCQkqLwotI2RlZmluZSBCMFNUXzIJCQkweDAwMDAwMDIwICAvKiBCMCBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAyIGN5Y2xlcwkJKi8KLSNkZWZpbmUgQjBTVF8zCQkJMHgwMDAwMDAzMCAgLyogQjAgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMyBjeWNsZXMJCSovCi0jZGVmaW5lIEIwU1RfNAkJCTB4MDAwMDAwMDAgIC8qIEIwIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDQgY3ljbGVzCQkqLwotI2RlZmluZSBCMEhUXzEJCQkweDAwMDAwMDQwICAvKiBCMCBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMSBjeWNsZQkJKi8KLSNkZWZpbmUgQjBIVF8yCQkJMHgwMDAwMDA4MCAgLyogQjAgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDIgY3ljbGVzCSovCi0jZGVmaW5lIEIwSFRfMwkJCTB4MDAwMDAwQzAgIC8qIEIwIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAzIGN5Y2xlcwkqLwotI2RlZmluZSBCMEhUXzAJCQkweDAwMDAwMDAwICAvKiBCMCBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMCBjeWNsZXMJKi8KLSNkZWZpbmUgQjBSQVRfMQkJCTB4MDAwMDAxMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlCQkJCQkqLwotI2RlZmluZSBCMFJBVF8yCQkJMHgwMDAwMDIwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF8zCQkJMHgwMDAwMDMwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF80CQkJMHgwMDAwMDQwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF81CQkJMHgwMDAwMDUwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF82CQkJMHgwMDAwMDYwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF83CQkJMHgwMDAwMDcwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF84CQkJMHgwMDAwMDgwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDggY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF85CQkJMHgwMDAwMDkwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF8xMAkJMHgwMDAwMEEwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjBSQVRfMTEJCTB4MDAwMDBCMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIwUkFUXzEyCQkweDAwMDAwQzAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF8xMwkJMHgwMDAwMEQwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjBSQVRfMTQJCTB4MDAwMDBFMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIwUkFUXzE1CQkweDAwMDAwRjAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFdBVF8xCQkJMHgwMDAwMTAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlCQkJCQkqLwotI2RlZmluZSBCMFdBVF8yCQkJMHgwMDAwMjAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjBXQVRfMwkJCTB4MDAwMDMwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIwV0FUXzQJCQkweDAwMDA0MDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFdBVF81CQkJMHgwMDAwNTAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjBXQVRfNgkJCTB4MDAwMDYwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIwV0FUXzcJCQkweDAwMDA3MDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFdBVF84CQkJMHgwMDAwODAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjBXQVRfOQkJCTB4MDAwMDkwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIwV0FUXzEwCQkweDAwMDBBMDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjBXQVRfMTEJCTB4MDAwMEIwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFdBVF8xMgkJMHgwMDAwQzAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIwV0FUXzEzCQkweDAwMDBEMDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjBXQVRfMTQJCTB4MDAwMEUwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFdBVF8xNQkJMHgwMDAwRjAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMJCQkJCSovCi0KLSNkZWZpbmUgQjFSRFlFTgkJCTB4MDAwMTAwMDAgIC8qIEJhbmsgMSAoQjEpIFJEWSBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgIAkqLwotI2RlZmluZSBCMVJEWVBPTAkJMHgwMDAyMDAwMCAgLyogQjEgUkRZIEFjdGl2ZSBIaWdoICAgICAgICAgICAgICAgICAgICAgICAgICAgCSovCi0jZGVmaW5lIEIxVFRfMQkJCTB4MDAwNDAwMDAgIC8qIEIxIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAxIGN5Y2xlIAkqLwotI2RlZmluZSBCMVRUXzIJCQkweDAwMDgwMDAwICAvKiBCMSBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMiBjeWNsZXMJKi8KLSNkZWZpbmUgQjFUVF8zCQkJMHgwMDBDMDAwMCAgLyogQjEgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDMgY3ljbGVzCSovCi0jZGVmaW5lIEIxVFRfNAkJCTB4MDAwMDAwMDAgIC8qIEIxIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSA0IGN5Y2xlcwkqLwotI2RlZmluZSBCMVNUXzEJCQkweDAwMTAwMDAwICAvKiBCMSBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAxIGN5Y2xlICAJKi8KLSNkZWZpbmUgQjFTVF8yCQkJMHgwMDIwMDAwMCAgLyogQjEgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMiBjeWNsZXMgCSovCi0jZGVmaW5lIEIxU1RfMwkJCTB4MDAzMDAwMDAgIC8qIEIxIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDMgY3ljbGVzIAkqLwotI2RlZmluZSBCMVNUXzQJCQkweDAwMDAwMDAwICAvKiBCMSBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSA0IGN5Y2xlcyAJKi8KLSNkZWZpbmUgQjFIVF8xCQkJMHgwMDQwMDAwMCAgLyogQjEgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDEgY3ljbGUgCSovCi0jZGVmaW5lIEIxSFRfMgkJCTB4MDA4MDAwMDAgIC8qIEIxIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAyIGN5Y2xlcwkqLwotI2RlZmluZSBCMUhUXzMJCQkweDAwQzAwMDAwICAvKiBCMSBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMyBjeWNsZXMJKi8KLSNkZWZpbmUgQjFIVF8wCQkJMHgwMDAwMDAwMCAgLyogQjEgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDAgY3ljbGVzCSovCi0jZGVmaW5lIEIxUkFUXzEJCQkweDAxMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMSBjeWNsZQkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfMgkJCTB4MDIwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfMwkJCTB4MDMwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfNAkJCTB4MDQwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfNQkJCTB4MDUwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfNgkJCTB4MDYwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfNwkJCTB4MDcwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfOAkJCTB4MDgwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfOQkJCTB4MDkwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfMTAJCTB4MEEwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIxUkFUXzExCQkweDBCMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMVJBVF8xMgkJMHgwQzAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfMTMJCTB4MEQwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIxUkFUXzE0CQkweDBFMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMVJBVF8xNQkJMHgwRjAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFXQVRfMQkJCTB4MTAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMSBjeWNsZQkJCQkJKi8KLSNkZWZpbmUgQjFXQVRfMgkJCTB4MjAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIxV0FUXzMJCQkweDMwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMVdBVF80CQkJMHg0MDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFXQVRfNQkJCTB4NTAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIxV0FUXzYJCQkweDYwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMVdBVF83CQkJMHg3MDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFXQVRfOAkJCTB4ODAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIxV0FUXzkJCQkweDkwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMVdBVF8xMAkJMHhBMDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIxV0FUXzExCQkweEIwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFXQVRfMTIJCTB4QzAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMVdBVF8xMwkJMHhEMDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIxV0FUXzE0CQkweEUwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFXQVRfMTUJCTB4RjAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzCQkJCQkqLwotCi0vKiBFQklVX0FNQkNUTDEgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIEIyUkRZRU4JCQkweDAwMDAwMDAxICAvKiBCYW5rIDIgKEIyKSBSRFkgRW5hYmxlCQkJCQkJCSovCi0jZGVmaW5lIEIyUkRZUE9MCQkweDAwMDAwMDAyICAvKiBCMiBSRFkgQWN0aXZlIEhpZ2gJCQkJCQkJCSovCi0jZGVmaW5lIEIyVFRfMQkJCTB4MDAwMDAwMDQgIC8qIEIyIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAxIGN5Y2xlCQkqLwotI2RlZmluZSBCMlRUXzIJCQkweDAwMDAwMDA4ICAvKiBCMiBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMiBjeWNsZXMJKi8KLSNkZWZpbmUgQjJUVF8zCQkJMHgwMDAwMDAwQyAgLyogQjIgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDMgY3ljbGVzCSovCi0jZGVmaW5lIEIyVFRfNAkJCTB4MDAwMDAwMDAgIC8qIEIyIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSA0IGN5Y2xlcwkqLwotI2RlZmluZSBCMlNUXzEJCQkweDAwMDAwMDEwICAvKiBCMiBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAxIGN5Y2xlCQkqLwotI2RlZmluZSBCMlNUXzIJCQkweDAwMDAwMDIwICAvKiBCMiBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAyIGN5Y2xlcwkJKi8KLSNkZWZpbmUgQjJTVF8zCQkJMHgwMDAwMDAzMCAgLyogQjIgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMyBjeWNsZXMJCSovCi0jZGVmaW5lIEIyU1RfNAkJCTB4MDAwMDAwMDAgIC8qIEIyIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDQgY3ljbGVzCQkqLwotI2RlZmluZSBCMkhUXzEJCQkweDAwMDAwMDQwICAvKiBCMiBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMSBjeWNsZQkJKi8KLSNkZWZpbmUgQjJIVF8yCQkJMHgwMDAwMDA4MCAgLyogQjIgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDIgY3ljbGVzCSovCi0jZGVmaW5lIEIySFRfMwkJCTB4MDAwMDAwQzAgIC8qIEIyIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAzIGN5Y2xlcwkqLwotI2RlZmluZSBCMkhUXzAJCQkweDAwMDAwMDAwICAvKiBCMiBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMCBjeWNsZXMJKi8KLSNkZWZpbmUgQjJSQVRfMQkJCTB4MDAwMDAxMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlCQkJCQkqLwotI2RlZmluZSBCMlJBVF8yCQkJMHgwMDAwMDIwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF8zCQkJMHgwMDAwMDMwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF80CQkJMHgwMDAwMDQwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF81CQkJMHgwMDAwMDUwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF82CQkJMHgwMDAwMDYwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF83CQkJMHgwMDAwMDcwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF84CQkJMHgwMDAwMDgwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDggY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF85CQkJMHgwMDAwMDkwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF8xMAkJMHgwMDAwMEEwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjJSQVRfMTEJCTB4MDAwMDBCMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIyUkFUXzEyCQkweDAwMDAwQzAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF8xMwkJMHgwMDAwMEQwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjJSQVRfMTQJCTB4MDAwMDBFMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIyUkFUXzE1CQkweDAwMDAwRjAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMldBVF8xCQkJMHgwMDAwMTAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlCQkJCQkqLwotI2RlZmluZSBCMldBVF8yCQkJMHgwMDAwMjAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjJXQVRfMwkJCTB4MDAwMDMwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIyV0FUXzQJCQkweDAwMDA0MDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMldBVF81CQkJMHgwMDAwNTAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjJXQVRfNgkJCTB4MDAwMDYwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIyV0FUXzcJCQkweDAwMDA3MDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMldBVF84CQkJMHgwMDAwODAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjJXQVRfOQkJCTB4MDAwMDkwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIyV0FUXzEwCQkweDAwMDBBMDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjJXQVRfMTEJCTB4MDAwMEIwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMldBVF8xMgkJMHgwMDAwQzAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIyV0FUXzEzCQkweDAwMDBEMDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjJXQVRfMTQJCTB4MDAwMEUwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMldBVF8xNQkJMHgwMDAwRjAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMJCQkJCSovCi0KLSNkZWZpbmUgQjNSRFlFTgkJCTB4MDAwMTAwMDAgIC8qIEJhbmsgMyAoQjMpIFJEWSBFbmFibGUJCQkJCQkJKi8KLSNkZWZpbmUgQjNSRFlQT0wJCTB4MDAwMjAwMDAgIC8qIEIzIFJEWSBBY3RpdmUgSGlnaAkJCQkJCQkJKi8KLSNkZWZpbmUgQjNUVF8xCQkJMHgwMDA0MDAwMCAgLyogQjMgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDEgY3ljbGUJCSovCi0jZGVmaW5lIEIzVFRfMgkJCTB4MDAwODAwMDAgIC8qIEIzIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAyIGN5Y2xlcwkqLwotI2RlZmluZSBCM1RUXzMJCQkweDAwMEMwMDAwICAvKiBCMyBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMyBjeWNsZXMJKi8KLSNkZWZpbmUgQjNUVF80CQkJMHgwMDAwMDAwMCAgLyogQjMgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDQgY3ljbGVzCSovCi0jZGVmaW5lIEIzU1RfMQkJCTB4MDAxMDAwMDAgIC8qIEIzIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDEgY3ljbGUJCSovCi0jZGVmaW5lIEIzU1RfMgkJCTB4MDAyMDAwMDAgIC8qIEIzIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDIgY3ljbGVzCQkqLwotI2RlZmluZSBCM1NUXzMJCQkweDAwMzAwMDAwICAvKiBCMyBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAzIGN5Y2xlcwkJKi8KLSNkZWZpbmUgQjNTVF80CQkJMHgwMDAwMDAwMCAgLyogQjMgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gNCBjeWNsZXMJCSovCi0jZGVmaW5lIEIzSFRfMQkJCTB4MDA0MDAwMDAgIC8qIEIzIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAxIGN5Y2xlCQkqLwotI2RlZmluZSBCM0hUXzIJCQkweDAwODAwMDAwICAvKiBCMyBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMiBjeWNsZXMJKi8KLSNkZWZpbmUgQjNIVF8zCQkJMHgwMEMwMDAwMCAgLyogQjMgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDMgY3ljbGVzCSovCi0jZGVmaW5lIEIzSFRfMAkJCTB4MDAwMDAwMDAgIC8qIEIzIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAwIGN5Y2xlcwkqLwotI2RlZmluZSBCM1JBVF8xCQkJMHgwMTAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDEgY3ljbGUJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzIJCQkweDAyMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzMJCQkweDAzMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzQJCQkweDA0MDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzUJCQkweDA1MDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzYJCQkweDA2MDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzcJCQkweDA3MDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzgJCQkweDA4MDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzkJCQkweDA5MDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzEwCQkweDBBMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCM1JBVF8xMQkJMHgwQjAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjNSQVRfMTIJCTB4MEMwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzEzCQkweDBEMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCM1JBVF8xNAkJMHgwRTAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjNSQVRfMTUJCTB4MEYwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzV0FUXzEJCQkweDEwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDEgY3ljbGUJCQkJCSovCi0jZGVmaW5lIEIzV0FUXzIJCQkweDIwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCM1dBVF8zCQkJMHgzMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjNXQVRfNAkJCTB4NDAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzV0FUXzUJCQkweDUwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCM1dBVF82CQkJMHg2MDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjNXQVRfNwkJCTB4NzAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzV0FUXzgJCQkweDgwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDggY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCM1dBVF85CQkJMHg5MDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjNXQVRfMTAJCTB4QTAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCM1dBVF8xMQkJMHhCMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzV0FUXzEyCQkweEMwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjNXQVRfMTMJCTB4RDAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCM1dBVF8xNAkJMHhFMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzV0FUXzE1CQkweEYwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcwkJCQkJKi8KLQotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqICBTRFJBTSBDT05UUk9MTEVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRUJJVV9TREdDVEwgTWFza3MJCQkJCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgU0NUTEUJCQkweDAwMDAwMDAxCS8qIEVuYWJsZSBTRFJBTSBTaWduYWxzCQkJCQkJCQkJCSovCi0jZGVmaW5lIENMXzIJCQkweDAwMDAwMDA4CS8qIFNEUkFNIENBUyBMYXRlbmN5ID0gMiBjeWNsZXMJCQkJCQkJCSovCi0jZGVmaW5lIENMXzMJCQkweDAwMDAwMDBDCS8qIFNEUkFNIENBUyBMYXRlbmN5ID0gMyBjeWNsZXMJCQkJCQkJCSovCi0jZGVmaW5lIFBBU1JfQUxMCQkweDAwMDAwMDAwCS8qIEFsbCA0IFNEUkFNIEJhbmtzIFJlZnJlc2hlZCBJbiBTZWxmLVJlZnJlc2gJCQkJKi8KLSNkZWZpbmUgUEFTUl9CMF9CMQkJMHgwMDAwMDAxMAkvKiBTRFJBTSBCYW5rcyAwIGFuZCAxIEFyZSBSZWZyZXNoZWQgSW4gU2VsZi1SZWZyZXNoCQkqLwotI2RlZmluZSBQQVNSX0IwCQkJMHgwMDAwMDAyMAkvKiBPbmx5IFNEUkFNIEJhbmsgMCBJcyBSZWZyZXNoZWQgSW4gU2VsZi1SZWZyZXNoCQkJKi8KLSNkZWZpbmUgVFJBU18xCQkJMHgwMDAwMDA0MAkvKiBTRFJBTSB0UkFTID0gMSBjeWNsZQkJCQkJCQkJCQkqLwotI2RlZmluZSBUUkFTXzIJCQkweDAwMDAwMDgwCS8qIFNEUkFNIHRSQVMgPSAyIGN5Y2xlcwkJCQkJCQkJCSovCi0jZGVmaW5lIFRSQVNfMwkJCTB4MDAwMDAwQzAJLyogU0RSQU0gdFJBUyA9IDMgY3ljbGVzCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJBU180CQkJMHgwMDAwMDEwMAkvKiBTRFJBTSB0UkFTID0gNCBjeWNsZXMJCQkJCQkJCQkqLwotI2RlZmluZSBUUkFTXzUJCQkweDAwMDAwMTQwCS8qIFNEUkFNIHRSQVMgPSA1IGN5Y2xlcwkJCQkJCQkJCSovCi0jZGVmaW5lIFRSQVNfNgkJCTB4MDAwMDAxODAJLyogU0RSQU0gdFJBUyA9IDYgY3ljbGVzCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJBU183CQkJMHgwMDAwMDFDMAkvKiBTRFJBTSB0UkFTID0gNyBjeWNsZXMJCQkJCQkJCQkqLwotI2RlZmluZSBUUkFTXzgJCQkweDAwMDAwMjAwCS8qIFNEUkFNIHRSQVMgPSA4IGN5Y2xlcwkJCQkJCQkJCSovCi0jZGVmaW5lIFRSQVNfOQkJCTB4MDAwMDAyNDAJLyogU0RSQU0gdFJBUyA9IDkgY3ljbGVzCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJBU18xMAkJCTB4MDAwMDAyODAJLyogU0RSQU0gdFJBUyA9IDEwIGN5Y2xlcwkJCQkJCQkJCSovCi0jZGVmaW5lIFRSQVNfMTEJCQkweDAwMDAwMkMwCS8qIFNEUkFNIHRSQVMgPSAxMSBjeWNsZXMJCQkJCQkJCQkqLwotI2RlZmluZSBUUkFTXzEyCQkJMHgwMDAwMDMwMAkvKiBTRFJBTSB0UkFTID0gMTIgY3ljbGVzCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJBU18xMwkJCTB4MDAwMDAzNDAJLyogU0RSQU0gdFJBUyA9IDEzIGN5Y2xlcwkJCQkJCQkJCSovCi0jZGVmaW5lIFRSQVNfMTQJCQkweDAwMDAwMzgwCS8qIFNEUkFNIHRSQVMgPSAxNCBjeWNsZXMJCQkJCQkJCQkqLwotI2RlZmluZSBUUkFTXzE1CQkJMHgwMDAwMDNDMAkvKiBTRFJBTSB0UkFTID0gMTUgY3ljbGVzCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJQXzEJCQkweDAwMDAwODAwCS8qIFNEUkFNIHRSUCA9IDEgY3ljbGUJCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJQXzIJCQkweDAwMDAxMDAwCS8qIFNEUkFNIHRSUCA9IDIgY3ljbGVzCQkJCQkJCQkJCSovCi0jZGVmaW5lIFRSUF8zCQkJMHgwMDAwMTgwMAkvKiBTRFJBTSB0UlAgPSAzIGN5Y2xlcwkJCQkJCQkJCQkqLwotI2RlZmluZSBUUlBfNAkJCTB4MDAwMDIwMDAJLyogU0RSQU0gdFJQID0gNCBjeWNsZXMJCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJQXzUJCQkweDAwMDAyODAwCS8qIFNEUkFNIHRSUCA9IDUgY3ljbGVzCQkJCQkJCQkJCSovCi0jZGVmaW5lIFRSUF82CQkJMHgwMDAwMzAwMAkvKiBTRFJBTSB0UlAgPSA2IGN5Y2xlcwkJCQkJCQkJCQkqLwotI2RlZmluZSBUUlBfNwkJCTB4MDAwMDM4MDAJLyogU0RSQU0gdFJQID0gNyBjeWNsZXMJCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJDRF8xCQkJMHgwMDAwODAwMAkvKiBTRFJBTSB0UkNEID0gMSBjeWNsZQkJCQkJCQkJCQkqLwotI2RlZmluZSBUUkNEXzIJCQkweDAwMDEwMDAwCS8qIFNEUkFNIHRSQ0QgPSAyIGN5Y2xlcwkJCQkJCQkJCSovCi0jZGVmaW5lIFRSQ0RfMwkJCTB4MDAwMTgwMDAJLyogU0RSQU0gdFJDRCA9IDMgY3ljbGVzCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJDRF80CQkJMHgwMDAyMDAwMAkvKiBTRFJBTSB0UkNEID0gNCBjeWNsZXMJCQkJCQkJCQkqLwotI2RlZmluZSBUUkNEXzUJCQkweDAwMDI4MDAwCS8qIFNEUkFNIHRSQ0QgPSA1IGN5Y2xlcwkJCQkJCQkJCSovCi0jZGVmaW5lIFRSQ0RfNgkJCTB4MDAwMzAwMDAJLyogU0RSQU0gdFJDRCA9IDYgY3ljbGVzCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJDRF83CQkJMHgwMDAzODAwMAkvKiBTRFJBTSB0UkNEID0gNyBjeWNsZXMJCQkJCQkJCQkqLwotI2RlZmluZSBUV1JfMQkJCTB4MDAwODAwMDAJLyogU0RSQU0gdFdSID0gMSBjeWNsZQkJCQkJCQkJCQkqLwotI2RlZmluZSBUV1JfMgkJCTB4MDAxMDAwMDAJLyogU0RSQU0gdFdSID0gMiBjeWNsZXMJCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFdSXzMJCQkweDAwMTgwMDAwCS8qIFNEUkFNIHRXUiA9IDMgY3ljbGVzCQkJCQkJCQkJCSovCi0jZGVmaW5lIFBVUFNECQkJMHgwMDIwMDAwMAkvKiBQb3dlci1VcCBTdGFydCBEZWxheSAoMTUgU0NMSyBDeWNsZXMgRGVsYXkpCQkJCSovCi0jZGVmaW5lIFBTTQkJCQkweDAwNDAwMDAwCS8qIFBvd2VyLVVwIFNlcXVlbmNlIChNb2RlIFJlZ2lzdGVyIEJlZm9yZS9BZnRlciogUmVmcmVzaCkJKi8KLSNkZWZpbmUgUFNTCQkJCTB4MDA4MDAwMDAJLyogRW5hYmxlIFBvd2VyLVVwIFNlcXVlbmNlIG9uIE5leHQgU0RSQU0gQWNjZXNzCQkJKi8KLSNkZWZpbmUgU1JGUwkJCTB4MDEwMDAwMDAJLyogRW5hYmxlIFNEUkFNIFNlbGYtUmVmcmVzaCBNb2RlCQkJCQkJCSovCi0jZGVmaW5lIEVCVUZFCQkJMHgwMjAwMDAwMAkvKiBFbmFibGUgRXh0ZXJuYWwgQnVmZmVyaW5nIFRpbWluZwkJCQkJCQkqLwotI2RlZmluZSBGQkJSVwkJCTB4MDQwMDAwMDAJLyogRW5hYmxlIEZhc3QgQmFjay1Uby1CYWNrIFJlYWQgVG8gV3JpdGUJCQkJCSovCi0jZGVmaW5lIEVNUkVOCQkJMHgxMDAwMDAwMAkvKiBFeHRlbmRlZCBNb2RlIFJlZ2lzdGVyIEVuYWJsZQkJCQkJCQkqLwotI2RlZmluZSBUQ1NSCQkJMHgyMDAwMDAwMAkvKiBUZW1wLUNvbXBlbnNhdGVkIFNlbGYtUmVmcmVzaCBWYWx1ZSAoODUvNDUqIERlZyBDKQkJKi8KLSNkZWZpbmUgQ0REQkcJCQkweDQwMDAwMDAwCS8qIFRyaXN0YXRlIFNEUkFNIENvbnRyb2xzIER1cmluZyBCdXMgR3JhbnQJCQkJCSovCi0KLS8qIEVCSVVfU0RCQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgRUJFCQkJCTB4MDAwMQkJLyogRW5hYmxlIFNEUkFNIEV4dGVybmFsIEJhbmsJCQkJCQkJKi8KLSNkZWZpbmUgRUJTWl8xNgkJCTB4MDAwMAkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBTaXplID0gMTZNQgkqLwotI2RlZmluZSBFQlNaXzMyCQkJMHgwMDAyCQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIFNpemUgPSAzMk1CCSovCi0jZGVmaW5lIEVCU1pfNjQJCQkweDAwMDQJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgU2l6ZSA9IDY0TUIJKi8KLSNkZWZpbmUgRUJTWl8xMjgJCTB4MDAwNgkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBTaXplID0gMTI4TUIJCSovCi0jZGVmaW5lIEVCU1pfMjU2CQkweDAwMDgJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgU2l6ZSA9IDI1Nk1CIAkqLwotI2RlZmluZSBFQlNaXzUxMgkJMHgwMDBBCQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIFNpemUgPSA1MTJNQgkJKi8KLSNkZWZpbmUgRUJDQVdfOAkJCTB4MDAwMAkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBDb2x1bW4gQWRkcmVzcyBXaWR0aCA9IDggQml0cwkqLwotI2RlZmluZSBFQkNBV185CQkJMHgwMDEwCQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIENvbHVtbiBBZGRyZXNzIFdpZHRoID0gOSBCaXRzCSovCi0jZGVmaW5lIEVCQ0FXXzEwCQkweDAwMjAJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgQ29sdW1uIEFkZHJlc3MgV2lkdGggPSAxMCBCaXRzCSovCi0jZGVmaW5lIEVCQ0FXXzExCQkweDAwMzAJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgQ29sdW1uIEFkZHJlc3MgV2lkdGggPSAxMSBCaXRzCSovCi0KLS8qIEVCSVVfU0RTVEFUIE1hc2tzCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBTRENJCQkJMHgwMDAxCQkvKiBTRFJBTSBDb250cm9sbGVyIElkbGUgCQkJCSovCi0jZGVmaW5lIFNEU1JBCQkJMHgwMDAyCQkvKiBTRFJBTSBTZWxmLVJlZnJlc2ggQWN0aXZlCQkJKi8KLSNkZWZpbmUgU0RQVUEJCQkweDAwMDQJCS8qIFNEUkFNIFBvd2VyLVVwIEFjdGl2ZSAJCQkJKi8KLSNkZWZpbmUgU0RSUwkJCTB4MDAwOAkJLyogU0RSQU0gV2lsbCBQb3dlci1VcCBPbiBOZXh0IEFjY2VzcwkqLwotI2RlZmluZSBTREVBU0UJCQkweDAwMTAJCS8qIFNEUkFNIEVBQiBTdGlja3kgRXJyb3IgU3RhdHVzCQkqLwotI2RlZmluZSBCR1NUQVQJCQkweDAwMjAJCS8qIEJ1cyBHcmFudCBTdGF0dXMJCQkJCQkqLwotCi0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqICBETUEgQ09OVFJPTExFUiBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIERNQXhfUEVSSVBIRVJBTF9NQVAsIE1ETUFfeXlfUEVSSVBIRVJBTF9NQVAgTWFza3MJCQkJCQkJCSovCi0jZGVmaW5lIENUWVBFCQkJMHgwMDQwCS8qIERNQSBDaGFubmVsIFR5cGUgSW5kaWNhdG9yIChNZW1vcnkvUGVyaXBoZXJhbCopCSovCi0jZGVmaW5lIFBNQVAJCQkweEYwMDAJLyogUGVyaXBoZXJhbCBNYXBwZWQgVG8gVGhpcyBDaGFubmVsCQkJCSovCi0jZGVmaW5lIFBNQVBfUFBJCQkweDAwMDAJLyogCQlQUEkgUG9ydCBETUEJCQkJCQkJCSovCi0jZGVmaW5lCVBNQVBfRU1BQ1JYCQkweDEwMDAJLyogCQlFdGhlcm5ldCBSZWNlaXZlIERNQQkJCQkJCSovCi0jZGVmaW5lIFBNQVBfRU1BQ1RYCQkweDIwMDAJLyogCQlFdGhlcm5ldCBUcmFuc21pdCBETUEJCQkJCQkqLwotI2RlZmluZSBQTUFQX1NQT1JUMFJYCTB4MzAwMAkvKiAJCVNQT1JUMCBSZWNlaXZlIERNQQkJCQkJCQkqLwotI2RlZmluZSBQTUFQX1NQT1JUMFRYCTB4NDAwMAkvKiAJCVNQT1JUMCBUcmFuc21pdCBETUEJCQkJCQkJKi8KLSNkZWZpbmUgUE1BUF9TUE9SVDFSWAkweDUwMDAJLyogCQlTUE9SVDEgUmVjZWl2ZSBETUEJCQkJCQkJKi8KLSNkZWZpbmUgUE1BUF9TUE9SVDFUWAkweDYwMDAJLyogCQlTUE9SVDEgVHJhbnNtaXQgRE1BCQkJCQkJCSovCi0jZGVmaW5lIFBNQVBfU1BJCQkweDcwMDAJLyogCQlTUEkgUG9ydCBETUEJCQkJCQkJCSovCi0jZGVmaW5lIFBNQVBfVUFSVDBSWAkweDgwMDAJLyogCQlVQVJUMCBQb3J0IFJlY2VpdmUgRE1BCQkJCQkJKi8KLSNkZWZpbmUgUE1BUF9VQVJUMFRYCTB4OTAwMAkvKiAJCVVBUlQwIFBvcnQgVHJhbnNtaXQgRE1BCQkJCQkJKi8KLSNkZWZpbmUJUE1BUF9VQVJUMVJYCTB4QTAwMAkvKiAJCVVBUlQxIFBvcnQgUmVjZWl2ZSBETUEJCQkJCQkqLwotI2RlZmluZQlQTUFQX1VBUlQxVFgJMHhCMDAwCS8qIAkJVUFSVDEgUG9ydCBUcmFuc21pdCBETUEJCQkJCQkqLwotCi0vKiAgKioqKioqKioqKioqICBQQVJBTExFTCBQRVJJUEhFUkFMIElOVEVSRkFDRSAoUFBJKSBNQVNLUyAqKioqKioqKioqKioqLwotLyogIFBQSV9DT05UUk9MIE1hc2tzCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFBPUlRfRU4JCQkweDAwMDEJCS8qIFBQSSBQb3J0IEVuYWJsZQkJCQkJKi8KLSNkZWZpbmUgUE9SVF9ESVIJCTB4MDAwMgkJLyogUFBJIFBvcnQgRGlyZWN0aW9uCQkJCSovCi0jZGVmaW5lIFhGUl9UWVBFCQkweDAwMEMJCS8qIFBQSSBUcmFuc2ZlciBUeXBlCQkJCSovCi0jZGVmaW5lIFBPUlRfQ0ZHCQkweDAwMzAJCS8qIFBQSSBQb3J0IENvbmZpZ3VyYXRpb24JCQkqLwotI2RlZmluZSBGTERfU0VMCQkJMHgwMDQwCQkvKiBQUEkgQWN0aXZlIEZpZWxkIFNlbGVjdAkJCSovCi0jZGVmaW5lIFBBQ0tfRU4JCQkweDAwODAJCS8qIFBQSSBQYWNraW5nIE1vZGUJCQkJCSovCi0jZGVmaW5lIERNQTMyCQkJMHgwMTAwCQkvKiBQUEkgMzItYml0IERNQSBFbmFibGUJCQkqLwotI2RlZmluZSBTS0lQX0VOCQkJMHgwMjAwCQkvKiBQUEkgU2tpcCBFbGVtZW50IEVuYWJsZQkJCSovCi0jZGVmaW5lIFNLSVBfRU8JCQkweDA0MDAJCS8qIFBQSSBTa2lwIEV2ZW4vT2RkIEVsZW1lbnRzCQkqLwotI2RlZmluZSBETEVOXzgJCQkweDAwMDAJCS8qIERhdGEgTGVuZ3RoID0gOCBCaXRzCQkJCSovCi0jZGVmaW5lIERMRU5fMTAJCQkweDA4MDAJCS8qIERhdGEgTGVuZ3RoID0gMTAgQml0cwkJCSovCi0jZGVmaW5lIERMRU5fMTEJCQkweDEwMDAJCS8qIERhdGEgTGVuZ3RoID0gMTEgQml0cwkJCSovCi0jZGVmaW5lIERMRU5fMTIJCQkweDE4MDAJCS8qIERhdGEgTGVuZ3RoID0gMTIgQml0cwkJCSovCi0jZGVmaW5lIERMRU5fMTMJCQkweDIwMDAJCS8qIERhdGEgTGVuZ3RoID0gMTMgQml0cwkJCSovCi0jZGVmaW5lIERMRU5fMTQJCQkweDI4MDAJCS8qIERhdGEgTGVuZ3RoID0gMTQgQml0cwkJCSovCi0jZGVmaW5lIERMRU5fMTUJCQkweDMwMDAJCS8qIERhdGEgTGVuZ3RoID0gMTUgQml0cwkJCSovCi0jZGVmaW5lIERMRU5fMTYJCQkweDM4MDAJCS8qIERhdGEgTGVuZ3RoID0gMTYgQml0cwkJCSovCi0jZGVmaW5lIERMRU5HVEgJCQkweDM4MDAJCS8qIFBQSSBEYXRhIExlbmd0aCAgKi8KLSNkZWZpbmUgUE9MQwkJCTB4NDAwMAkJLyogUFBJIENsb2NrIFBvbGFyaXR5CQkJCSovCi0jZGVmaW5lIFBPTFMJCQkweDgwMDAJCS8qIFBQSSBGcmFtZSBTeW5jIFBvbGFyaXR5CQkJKi8KLQotLyogUFBJX1NUQVRVUyBNYXNrcwkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgRkxECQkJCTB4MDQwMAkJLyogRmllbGQgSW5kaWNhdG9yCQkJCQkqLwotI2RlZmluZSBGVF9FUlIJCQkweDA4MDAJCS8qIEZyYW1lIFRyYWNrIEVycm9yCQkJCSovCi0jZGVmaW5lIE9WUgkJCQkweDEwMDAJCS8qIEZJRk8gT3ZlcmZsb3cgRXJyb3IJCQkJKi8KLSNkZWZpbmUgVU5EUgkJCTB4MjAwMAkJLyogRklGTyBVbmRlcnJ1biBFcnJvcgkJCQkqLwotI2RlZmluZSBFUlJfREVUCQkJMHg0MDAwCQkvKiBFcnJvciBEZXRlY3RlZCBJbmRpY2F0b3IJCQkqLwotI2RlZmluZSBFUlJfTkNPUgkJMHg4MDAwCQkvKiBFcnJvciBOb3QgQ29ycmVjdGVkIEluZGljYXRvcgkqLwotCi0KLS8qICAqKioqKioqKioqKioqKioqKioqKiAgVFdPLVdJUkUgSU5URVJGQUNFIChUV0kpIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFRXSV9DTEtESVYgTWFjcm9zIChVc2U6ICpwVFdJX0NMS0RJViA9IENMS0xPVyh4KXxDTEtISSh5KTsgICkJCQkJKi8KLSNkZWZpbmUJQ0xLTE9XKHgpCSgoeCkgJiAweEZGKQkJLyogUGVyaW9kcyBDbG9jayBJcyBIZWxkIExvdwkJCSovCi0jZGVmaW5lIENMS0hJKHkpCSgoKHkpJjB4RkYpPDwweDgpCS8qIFBlcmlvZHMgQmVmb3JlIE5ldyBDbG9jayBMb3cJCQkqLwotCi0vKiBUV0lfUFJFU0NBTEUgTWFza3MJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZQlQUkVTQ0FMRQkweDAwN0YJCS8qIFNDTEtzIFBlciBJbnRlcm5hbCBUaW1lIFJlZmVyZW5jZSAoMTBNSHopCSovCi0jZGVmaW5lCVRXSV9FTkEJCTB4MDA4MAkJLyogVFdJIEVuYWJsZQkJCQkJCQkJCSovCi0jZGVmaW5lCVNDQ0IJCTB4MDIwMAkJLyogU0NDQiBDb21wYXRpYmlsaXR5IEVuYWJsZQkJCQkJKi8KLQotLyogVFdJX1NMQVZFX0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lCVNFTgkJCTB4MDAwMQkJLyogU2xhdmUgRW5hYmxlCQkJCQkJCQkJKi8KLSNkZWZpbmUJU0FERF9MRU4JMHgwMDAyCQkvKiBTbGF2ZSBBZGRyZXNzIExlbmd0aAkJCQkJCQkqLwotI2RlZmluZQlTVERWQUwJCTB4MDAwNAkJLyogU2xhdmUgVHJhbnNtaXQgRGF0YSBWYWxpZAkJCQkJKi8KLSNkZWZpbmUJTkFLCQkJMHgwMDA4CQkvKiBOQUsvQUNLKiBHZW5lcmF0ZWQgQXQgQ29uY2x1c2lvbiBPZiBUcmFuc2ZlciAqLwotI2RlZmluZQlHRU4JCQkweDAwMTAJCS8qIEdlbmVyYWwgQ2FsbCBBZHJyZXNzIE1hdGNoaW5nIEVuYWJsZWQJCSovCi0KLS8qIFRXSV9TTEFWRV9TVEFUIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUJU0RJUgkJMHgwMDAxCQkvKiBTbGF2ZSBUcmFuc2ZlciBEaXJlY3Rpb24gKFRyYW5zbWl0L1JlY2VpdmUqKQkqLwotI2RlZmluZSBHQ0FMTAkJMHgwMDAyCQkvKiBHZW5lcmFsIENhbGwgSW5kaWNhdG9yCQkJCQkJKi8KLQotLyogVFdJX01BU1RFUl9DVEwgTWFza3MJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUJTUVOCQkJMHgwMDAxCQkvKiBNYXN0ZXIgTW9kZSBFbmFibGUJCQkJCQkqLwotI2RlZmluZQlNQUREX0xFTgkweDAwMDIJCS8qIE1hc3RlciBBZGRyZXNzIExlbmd0aAkJCQkJKi8KLSNkZWZpbmUJTURJUgkJMHgwMDA0CQkvKiBNYXN0ZXIgVHJhbnNtaXQgRGlyZWN0aW9uIChSWC9UWCopCQkqLwotI2RlZmluZQlGQVNUCQkweDAwMDgJCS8qIFVzZSBGYXN0IE1vZGUgVGltaW5nIFNwZWNzCQkJCSovCi0jZGVmaW5lCVNUT1AJCTB4MDAxMAkJLyogSXNzdWUgU3RvcCBDb25kaXRpb24JCQkJCQkqLwotI2RlZmluZQlSU1RBUlQJCTB4MDAyMAkJLyogUmVwZWF0IFN0YXJ0IG9yIFN0b3AqIEF0IEVuZCBPZiBUcmFuc2ZlcgkqLwotI2RlZmluZQlEQ05UCQkweDNGQzAJCS8qIERhdGEgQnl0ZXMgVG8gVHJhbnNmZXIJCQkJCSovCi0jZGVmaW5lCVNEQU9WUgkJMHg0MDAwCQkvKiBTZXJpYWwgRGF0YSBPdmVycmlkZQkJCQkJCSovCi0jZGVmaW5lCVNDTE9WUgkJMHg4MDAwCQkvKiBTZXJpYWwgQ2xvY2sgT3ZlcnJpZGUJCQkJCSovCi0KLS8qIFRXSV9NQVNURVJfU1RBVCBNYXNrcwkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUJTVBST0cJCTB4MDAwMQkJLyogTWFzdGVyIFRyYW5zZmVyIEluIFByb2dyZXNzCQkJCQkqLwotI2RlZmluZQlMT1NUQVJCCQkweDAwMDIJCS8qIExvc3QgQXJiaXRyYXRpb24gSW5kaWNhdG9yIChYZmVyIEFib3J0ZWQpCSovCi0jZGVmaW5lCUFOQUsJCTB4MDAwNAkJLyogQWRkcmVzcyBOb3QgQWNrbm93bGVkZ2VkCQkJCQkJKi8KLSNkZWZpbmUJRE5BSwkJMHgwMDA4CQkvKiBEYXRhIE5vdCBBY2tub3dsZWRnZWQJCQkJCQkqLwotI2RlZmluZQlCVUZSREVSUgkweDAwMTAJCS8qIEJ1ZmZlciBSZWFkIEVycm9yCQkJCQkJCSovCi0jZGVmaW5lCUJVRldSRVJSCTB4MDAyMAkJLyogQnVmZmVyIFdyaXRlIEVycm9yCQkJCQkJCSovCi0jZGVmaW5lCVNEQVNFTgkJMHgwMDQwCQkvKiBTZXJpYWwgRGF0YSBTZW5zZQkJCQkJCQkqLwotI2RlZmluZQlTQ0xTRU4JCTB4MDA4MAkJLyogU2VyaWFsIENsb2NrIFNlbnNlCQkJCQkJCSovCi0jZGVmaW5lCUJVU0JVU1kJCTB4MDEwMAkJLyogQnVzIEJ1c3kgSW5kaWNhdG9yCQkJCQkJCSovCi0KLS8qIFRXSV9JTlRfU1JDIGFuZCBUV0lfSU5UX0VOQUJMRSBNYXNrcwkJCQkJCSovCi0jZGVmaW5lCVNJTklUCQkweDAwMDEJCS8qIFNsYXZlIFRyYW5zZmVyIEluaXRpYXRlZAkqLwotI2RlZmluZQlTQ09NUAkJMHgwMDAyCQkvKiBTbGF2ZSBUcmFuc2ZlciBDb21wbGV0ZQkqLwotI2RlZmluZQlTRVJSCQkweDAwMDQJCS8qIFNsYXZlIFRyYW5zZmVyIEVycm9yCQkqLwotI2RlZmluZQlTT1ZGCQkweDAwMDgJCS8qIFNsYXZlIE92ZXJmbG93CQkJKi8KLSNkZWZpbmUJTUNPTVAJCTB4MDAxMAkJLyogTWFzdGVyIFRyYW5zZmVyIENvbXBsZXRlCSovCi0jZGVmaW5lCU1FUlIJCTB4MDAyMAkJLyogTWFzdGVyIFRyYW5zZmVyIEVycm9yCSovCi0jZGVmaW5lCVhNVFNFUlYJCTB4MDA0MAkJLyogVHJhbnNtaXQgRklGTyBTZXJ2aWNlCSovCi0jZGVmaW5lCVJDVlNFUlYJCTB4MDA4MAkJLyogUmVjZWl2ZSBGSUZPIFNlcnZpY2UJCSovCi0KLS8qIFRXSV9GSUZPX0NUUkwgTWFza3MJCQkJCQkJCQkJCQkqLwotI2RlZmluZQlYTVRGTFVTSAkweDAwMDEJCS8qIFRyYW5zbWl0IEJ1ZmZlciBGbHVzaAkJCSovCi0jZGVmaW5lCVJDVkZMVVNICTB4MDAwMgkJLyogUmVjZWl2ZSBCdWZmZXIgRmx1c2gJCQkJKi8KLSNkZWZpbmUJWE1USU5UTEVOCTB4MDAwNAkJLyogVHJhbnNtaXQgQnVmZmVyIEludGVycnVwdCBMZW5ndGgJKi8KLSNkZWZpbmUJUkNWSU5UTEVOCTB4MDAwOAkJLyogUmVjZWl2ZSBCdWZmZXIgSW50ZXJydXB0IExlbmd0aAkqLwotCi0vKiBUV0lfRklGT19TVEFUIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUJWE1UU1RBVAkJMHgwMDAzCQkvKiBUcmFuc21pdCBGSUZPIFN0YXR1cwkJCQkJCQkqLwotI2RlZmluZQlYTVRfRU1QVFkJMHgwMDAwCQkvKiAJCVRyYW5zbWl0IEZJRk8gRW1wdHkJCQkJCQkqLwotI2RlZmluZQlYTVRfSEFMRgkweDAwMDEJCS8qIAkJVHJhbnNtaXQgRklGTyBIYXMgMSBCeXRlIFRvIFdyaXRlCQkqLwotI2RlZmluZQlYTVRfRlVMTAkweDAwMDMJCS8qIAkJVHJhbnNtaXQgRklGTyBGdWxsICgyIEJ5dGVzIFRvIFdyaXRlKQkqLwotCi0jZGVmaW5lCVJDVlNUQVQJCTB4MDAwQwkJLyogUmVjZWl2ZSBGSUZPIFN0YXR1cwkJCQkJCQkqLwotI2RlZmluZQlSQ1ZfRU1QVFkJMHgwMDAwCQkvKiAJCVJlY2VpdmUgRklGTyBFbXB0eQkJCQkJCSovCi0jZGVmaW5lCVJDVl9IQUxGCTB4MDAwNAkJLyogCQlSZWNlaXZlIEZJRk8gSGFzIDEgQnl0ZSBUbyBSZWFkCQkJKi8KLSNkZWZpbmUJUkNWX0ZVTEwJMHgwMDBDCQkvKiAJCVJlY2VpdmUgRklGTyBGdWxsICgyIEJ5dGVzIFRvIFJlYWQpCQkqLwotCi0KLS8qICAqKioqKioqKioqKioqKioqKioqICBQSU4gQ09OVFJPTCBSRUdJU1RFUiBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUE9SVF9NVVggTWFza3MJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZQlQSlNFCQkJMHgwMDAxCQkJLyogUG9ydCBKIFNQSS9TUE9SVCBFbmFibGUJCQkqLwotI2RlZmluZQlQSlNFX1NQT1JUCQkweDAwMDAJCQkvKiAJCUVuYWJsZSBURlMwL0RUMFBSSQkJCSovCi0jZGVmaW5lCVBKU0VfU1BJCQkweDAwMDEJCQkvKiAJCUVuYWJsZSBTUElfU1NFTDM6MgkJCSovCi0KLSNkZWZpbmUJUEpDRSh4KQkJCSgoKHgpJjB4Myk8PDEpCS8qIFBvcnQgSiBDQU4vU1BJL1NQT1JUIEVuYWJsZQkJKi8KLSNkZWZpbmUJUEpDRV9TUE9SVAkJMHgwMDAwCQkJLyogCQlFbmFibGUgRFIwU0VDL0RUMFNFQwkJKi8KLSNkZWZpbmUJUEpDRV9DQU4JCTB4MDAwMgkJCS8qIAkJRW5hYmxlIENBTiBSWC9UWAkJCSovCi0jZGVmaW5lCVBKQ0VfU1BJCQkweDAwMDQJCQkvKiAJCUVuYWJsZSBTUElfU1NFTDcJCQkqLwotCi0jZGVmaW5lCVBGREUJCQkweDAwMDgJCQkvKiBQb3J0IEYgRE1BIFJlcXVlc3QgRW5hYmxlCQkqLwotI2RlZmluZQlQRkRFX1VBUlQJCTB4MDAwMAkJCS8qIAkJRW5hYmxlIFVBUlQwIFJYL1RYCQkJKi8KLSNkZWZpbmUJUEZERV9ETUEJCTB4MDAwOAkJCS8qIAkJRW5hYmxlIERNQVIxOjAJCQkJKi8KLQotI2RlZmluZQlQRlRFCQkJMHgwMDEwCQkJLyogUG9ydCBGIFRpbWVyIEVuYWJsZQkJCQkqLwotI2RlZmluZQlQRlRFX1VBUlQJCTB4MDAwMAkJCS8qCQlFbmFibGUgVUFSVDEgUlgvVFgJCQkqLwotI2RlZmluZQlQRlRFX1RJTUVSCQkweDAwMTAJCQkvKiAJCUVuYWJsZSBUTVI3OjYJCQkJKi8KLQotI2RlZmluZQlQRlM2RQkJCTB4MDAyMAkJCS8qIFBvcnQgRiBTUEkgU1NFTCA2IEVuYWJsZQkJCSovCi0jZGVmaW5lCVBGUzZFX1RJTUVSCQkweDAwMDAJCQkvKgkJRW5hYmxlIFRNUjUJCQkJCSovCi0jZGVmaW5lCVBGUzZFX1NQSQkJMHgwMDIwCQkJLyogCQlFbmFibGUgU1BJX1NTRUw2CQkJKi8KLQotI2RlZmluZQlQRlM1RQkJCTB4MDA0MAkJCS8qIFBvcnQgRiBTUEkgU1NFTCA1IEVuYWJsZQkJCSovCi0jZGVmaW5lCVBGUzVFX1RJTUVSCQkweDAwMDAJCQkvKgkJRW5hYmxlIFRNUjQJCQkJCSovCi0jZGVmaW5lCVBGUzVFX1NQSQkJMHgwMDQwCQkJLyogCQlFbmFibGUgU1BJX1NTRUw1CQkJKi8KLQotI2RlZmluZQlQRlM0RQkJCTB4MDA4MAkJCS8qIFBvcnQgRiBTUEkgU1NFTCA0IEVuYWJsZQkJCSovCi0jZGVmaW5lCVBGUzRFX1RJTUVSCQkweDAwMDAJCQkvKgkJRW5hYmxlIFRNUjMJCQkJCSovCi0jZGVmaW5lCVBGUzRFX1NQSQkJMHgwMDgwCQkJLyogCQlFbmFibGUgU1BJX1NTRUw0CQkJKi8KLQotI2RlZmluZQlQRkZFCQkJMHgwMTAwCQkJLyogUG9ydCBGIFBQSSBGcmFtZSBTeW5jIEVuYWJsZQkJKi8KLSNkZWZpbmUJUEZGRV9USU1FUgkJMHgwMDAwCQkJLyogCQlFbmFibGUgVE1SMgkJCQkJKi8KLSNkZWZpbmUJUEZGRV9QUEkJCTB4MDEwMAkJCS8qIAkJRW5hYmxlIFBQSSBGUzMJCQkJKi8KLQotI2RlZmluZQlQR1NFCQkJMHgwMjAwCQkJLyogUG9ydCBHIFNQT1JUMSBTZWNvbmRhcnkgRW5hYmxlCSovCi0jZGVmaW5lCVBHU0VfUFBJCQkweDAwMDAJCQkvKiAJCUVuYWJsZSBQUEkgRDk6OAkJCQkqLwotI2RlZmluZQlQR1NFX1NQT1JUCQkweDAyMDAJCQkvKiAJCUVuYWJsZSBEUjFTRUMvRFQxU0VDCQkqLwotCi0jZGVmaW5lCVBHUkUJCQkweDA0MDAJCQkvKiBQb3J0IEcgU1BPUlQxIFJlY2VpdmUgRW5hYmxlCQkqLwotI2RlZmluZQlQR1JFX1BQSQkJMHgwMDAwCQkJLyogCQlFbmFibGUgUFBJIEQxMjoxMAkJCSovCi0jZGVmaW5lCVBHUkVfU1BPUlQJCTB4MDQwMAkJCS8qIAkJRW5hYmxlIERSMVBSSS9SRlMxL1JTQ0xLMQkqLwotCi0jZGVmaW5lCVBHVEUJCQkweDA4MDAJCQkvKiBQb3J0IEcgU1BPUlQxIFRyYW5zbWl0IEVuYWJsZQkqLwotI2RlZmluZQlQR1RFX1BQSQkJMHgwMDAwCQkJLyogCQlFbmFibGUgUFBJIEQxNToxMwkJCSovCi0jZGVmaW5lCVBHVEVfU1BPUlQJCTB4MDgwMAkJCS8qIAkJRW5hYmxlIERUMVBSSS9URlMxL1RTQ0xLMQkqLwotCi0KLS8qICAqKioqKioqKioqKioqKioqKiogIEhBTkRTSEFLRSBETUEgKEhETUEpIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKiovCi0vKiBIRE1BeF9DVEwgTWFza3MJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lCUhNRE1BRU4JCTB4MDAwMQkvKiBFbmFibGUgSGFuZHNoYWtlIERNQSAwLzEJCQkJCSovCi0jZGVmaW5lCVJFUAkJCTB4MDAwMgkvKiBIRE1BIFJlcXVlc3QgUG9sYXJpdHkJCQkJCSovCi0jZGVmaW5lCVVURQkJCTB4MDAwNAkvKiBVcmdlbmN5IFRocmVzaG9sZCBFbmFibGUJCQkJCSovCi0jZGVmaW5lCU9JRQkJCTB4MDAxMAkvKiBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlCQkJCSovCi0jZGVmaW5lCUJESUUJCTB4MDAyMAkvKiBCbG9jayBEb25lIEludGVycnVwdCBFbmFibGUJCQkJKi8KLSNkZWZpbmUJTUJESQkJMHgwMDQwCS8qIE1hc2sgQmxvY2sgRG9uZSBJUlEgSWYgUGVuZGluZyBFQ05UCQkqLwotI2RlZmluZQlEUlEJCQkweDAzMDAJLyogSERNQSBSZXF1ZXN0IFR5cGUJCQkJCQkqLwotI2RlZmluZQlEUlFfTk9ORQkweDAwMDAJLyogCQlObyBSZXF1ZXN0CQkJCQkJCSovCi0jZGVmaW5lCURSUV9TSU5HTEUJMHgwMTAwCS8qIAkJQ2hhbm5lbHMgUmVxdWVzdCBTaW5nbGUJCQkJKi8KLSNkZWZpbmUJRFJRX01VTFRJCTB4MDIwMAkvKiAJCUNoYW5uZWxzIFJlcXVlc3QgTXVsdGkgKERlZmF1bHQpCSovCi0jZGVmaW5lCURSUV9VUkdFTlQJMHgwMzAwCS8qIAkJQ2hhbm5lbHMgUmVxdWVzdCBNdWx0aSBVcmdlbnQJCSovCi0jZGVmaW5lCVJCQwkJCTB4MTAwMAkvKiBSZWxvYWQgQkNOVCBXaXRoIElCQ05UCQkJCQkqLwotI2RlZmluZQlQUwkJCTB4MjAwMAkvKiBIRE1BIFBpbiBTdGF0dXMJCQkJCQkJKi8KLSNkZWZpbmUJT0kJCQkweDQwMDAJLyogT3ZlcmZsb3cgSW50ZXJydXB0IEdlbmVyYXRlZAkJCQkqLwotI2RlZmluZQlCREkJCQkweDgwMDAJLyogQmxvY2sgRG9uZSBJbnRlcnJ1cHQgR2VuZXJhdGVkCQkJKi8KLQotLyogZW50cnkgYWRkcmVzc2VzIG9mIHRoZSB1c2VyLWNhbGxhYmxlIEJvb3QgUk9NIGZ1bmN0aW9ucyAqLwotCi0jZGVmaW5lIF9CT09UUk9NX1JFU0VUIDB4RUYwMDAwMDAKLSNkZWZpbmUgX0JPT1RST01fRklOQUxfSU5JVCAweEVGMDAwMDAyCi0jZGVmaW5lIF9CT09UUk9NX0RPX01FTU9SWV9ETUEgMHhFRjAwMDAwNgotI2RlZmluZSBfQk9PVFJPTV9CT09UX0RYRV9GTEFTSCAweEVGMDAwMDA4Ci0jZGVmaW5lIF9CT09UUk9NX0JPT1RfRFhFX1NQSSAweEVGMDAwMDBBCi0jZGVmaW5lIF9CT09UUk9NX0JPT1RfRFhFX1RXSSAweEVGMDAwMDBDCi0jZGVmaW5lIF9CT09UUk9NX0dFVF9EWEVfQUREUkVTU19GTEFTSCAweEVGMDAwMDEwCi0jZGVmaW5lIF9CT09UUk9NX0dFVF9EWEVfQUREUkVTU19TUEkgMHhFRjAwMDAxMgotI2RlZmluZSBfQk9PVFJPTV9HRVRfRFhFX0FERFJFU1NfVFdJIDB4RUYwMDAwMTQKLQotLyogQWx0ZXJuYXRlIERlcHJlY2F0ZWQgTWFjcm9zIFByb3ZpZGVkIEZvciBCYWNrd2FyZHMgQ29kZSBDb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lCVBHREVfVUFSVCAgIFBGREVfVUFSVAotI2RlZmluZQlQR0RFX0RNQSAgICBQRkRFX0RNQQotI2RlZmluZQlDS0VMT1cJCVNDS0VMT1cKLQotLyogSE9TVCBQb3J0IFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9TVF9DT05UUk9MICAweGZmYzAzNDAwICAgLyogSE9TVCBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVFVTICAweGZmYzAzNDA0ICAgLyogSE9TVCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBIT1NUX1RJTUVPVVQgIDB4ZmZjMDM0MDggICAvKiBIT1NUIEFja25vd2xlZGdlIE1vZGUgVGltZW91dCBSZWdpc3RlciAqLwotCi0vKiBDb3VudGVyIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDTlRfQ09ORklHICAweGZmYzAzNTAwICAgLyogQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENOVF9JTUFTSyAgMHhmZmMwMzUwNCAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDTlRfU1RBVFVTICAweGZmYzAzNTA4ICAgLyogU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENOVF9DT01NQU5EICAweGZmYzAzNTBjICAgLyogQ29tbWFuZCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENOVF9ERUJPVU5DRSAgMHhmZmMwMzUxMCAgIC8qIERlYm91bmNlIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENOVF9DT1VOVEVSICAweGZmYzAzNTE0ICAgLyogQ291bnRlciBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgQ05UX01BWCAgMHhmZmMwMzUxOCAgIC8qIE1heGltYWwgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIENOVF9NSU4gIDB4ZmZjMDM1MWMgICAvKiBNaW5pbWFsIENvdW50IFJlZ2lzdGVyICovCi0KLS8qIE9UUC9GVVNFIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE9UUF9DT05UUk9MICAweGZmYzAzNjAwICAgLyogT1RQL0Z1c2UgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgT1RQX0JFTiAgMHhmZmMwMzYwNCAgIC8qIE9UUC9GdXNlIEJ5dGUgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBPVFBfU1RBVFVTICAweGZmYzAzNjA4ICAgLyogT1RQL0Z1c2UgU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBPVFBfVElNSU5HICAweGZmYzAzNjBjICAgLyogT1RQL0Z1c2UgQWNjZXNzIFRpbWluZyAqLwotCi0vKiBTZWN1cml0eSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0VDVVJFX1NZU1NXVCAgMHhmZmMwMzYyMCAgIC8qIFNlY3VyZSBTeXN0ZW0gU3dpdGNoZXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VDVVJFX0NPTlRST0wgIDB4ZmZjMDM2MjQgICAvKiBTZWN1cmUgQ29udHJvbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0VDVVJFX1NUQVRVUyAgMHhmZmMwMzYyOCAgIC8qIFNlY3VyZSBTdGF0dXMgKi8KLQotLyogT1RQIFJlYWQvV3JpdGUgRGF0YSBCdWZmZXIgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBPVFBfREFUQTAgIDB4ZmZjMDM2ODAgICAvKiBPVFAvRnVzZSBEYXRhIChPVFBfREFUQTAtMykgYWNjZXNzZXMgdGhlIGZ1c2UgcmVhZCB3cml0ZSBidWZmZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBPVFBfREFUQTEgIDB4ZmZjMDM2ODQgICAvKiBPVFAvRnVzZSBEYXRhIChPVFBfREFUQTAtMykgYWNjZXNzZXMgdGhlIGZ1c2UgcmVhZCB3cml0ZSBidWZmZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBPVFBfREFUQTIgIDB4ZmZjMDM2ODggICAvKiBPVFAvRnVzZSBEYXRhIChPVFBfREFUQTAtMykgYWNjZXNzZXMgdGhlIGZ1c2UgcmVhZCB3cml0ZSBidWZmZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBPVFBfREFUQTMgIDB4ZmZjMDM2OGMgICAvKiBPVFAvRnVzZSBEYXRhIChPVFBfREFUQTAtMykgYWNjZXNzZXMgdGhlIGZ1c2UgcmVhZCB3cml0ZSBidWZmZXIgKi8KLQotLyogTW90b3IgQ29udHJvbCBQV00gUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgUFdNX0NUUkwgIDB4ZmZjMDM3MDAgICAvKiBQV00gQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBQV01fU1RBVCAgMHhmZmMwMzcwNCAgIC8qIFBXTSBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICBQV01fVE0gIDB4ZmZjMDM3MDggICAvKiBQV00gUGVyaW9kIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgUFdNX0RUICAweGZmYzAzNzBjICAgLyogUFdNIERlYWQgVGltZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBQV01fR0FURSAgMHhmZmMwMzcxMCAgIC8qIFBXTSBDaG9wcGluZyBDb250cm9sICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBQV01fQ0hBICAweGZmYzAzNzE0ICAgLyogUFdNIENoYW5uZWwgQSBEdXR5IENvbnRyb2wgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIFBXTV9DSEIgIDB4ZmZjMDM3MTggICAvKiBQV00gQ2hhbm5lbCBCIER1dHkgQ29udHJvbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgUFdNX0NIQyAgMHhmZmMwMzcxYyAgIC8qIFBXTSBDaGFubmVsIEMgRHV0eSBDb250cm9sICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBQV01fU0VHICAweGZmYzAzNzIwICAgLyogUFdNIENyb3Nzb3ZlciBhbmQgT3V0cHV0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUFdNX1NZTkNXVCAgMHhmZmMwMzcyNCAgIC8qIFBXTSBTeW5jIFBsdXNlIFdpZHRoIENvbnRyb2wgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgUFdNX0NIQUwgIDB4ZmZjMDM3MjggICAvKiBQV00gQ2hhbm5lbCBBTCBEdXR5IENvbnRyb2wgKFNSIG1vZGUgb25seSkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgUFdNX0NIQkwgIDB4ZmZjMDM3MmMgICAvKiBQV00gQ2hhbm5lbCBCTCBEdXR5IENvbnRyb2wgKFNSIG1vZGUgb25seSkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgUFdNX0NIQ0wgIDB4ZmZjMDM3MzAgICAvKiBQV00gQ2hhbm5lbCBDTCBEdXR5IENvbnRyb2wgKFNSIG1vZGUgb25seSkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIFBXTV9MU0kgIDB4ZmZjMDM3MzQgICAvKiBQV00gTG93IFNpZGUgSW52ZXJ0IChTUiBtb2RlIG9ubHkpICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUFdNX1NUQVQyICAweGZmYzAzNzM4ICAgLyogUFdNIFN0YXR1cyBSZWdpc3RlciAyICovCi0KLQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotLyogICAgIFNJTkdMRSBCSVQgTUFDUk8gUEFJUlMgKGJpdCBtYXNrIGFuZCBuZWdhdGVkIG9uZSkgICAgICAqLwotLyogICAgIGFuZCBNVUxUSSBCSVQgUkVBRCBNQUNST1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEhPU1RfQ09OVFJPTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9IT1NUX0VOICAweDEgICAgICAgIC8qIEhvc3QgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX25IT1NUX0VOICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfSE9TVF9FTkQgIDB4MiAgICAgICAgLyogSG9zdCBFbmRpYW5lc3MgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9uSE9TVF9FTkQgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX0RBVEFfU0laRSAgMHg0ICAgICAgICAvKiBEYXRhIFNpemUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgSE9TVF9DTlRSX25EQVRBX1NJWkUgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9IT1NUX1JTVCAgMHg4ICAgICAgICAvKiBIb3N0IFJlc2V0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfbkhPU1RfUlNUICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfSFJEWV9PVlIgIDB4MjAgICAgICAgLyogSG9zdCBSZWFkeSBPdmVycmlkZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX25IUkRZX09WUiAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX0lOVF9NT0RFICAweDQwICAgICAgIC8qIEludGVycnVwdCBNb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfbklOVF9NT0RFICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfQlRfRU4gIDB4ODAgICAgICAgLyogQnVzIFRpbWVvdXQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl8gbkJUX0VOICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9FSFcgIDB4MTAwICAgICAgLyogRW5hYmxlIEhvc3QgV3JpdGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX25FSFcgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX0VIUiAgMHgyMDAgICAgICAvKiBFbmFibGUgSG9zdCBSZWFkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9uRUhSICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9CRFIgIDB4NDAwICAgICAgLyogQnVyc3QgRE1BIFJlcXVlc3RzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9uQkRSICAweDAKLQotLyogQml0IG1hc2tzIGZvciBIT1NUX1NUQVRVUyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX1JFQURZICAweDEgICAgICAgIC8qIERNQSBSZWFkeSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX25SRUFEWSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX0ZJRk9GVUxMICAweDIgICAgICAgIC8qIEZJRk8gRnVsbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX25GSUZPRlVMTCAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfRklGT0VNUFRZICAweDQgICAgICAgIC8qIEZJRk8gRW1wdHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgSE9TVF9TVEFUX25GSUZPRU1QVFkgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9DT01QTEVURSAgMHg4ICAgICAgICAvKiBETUEgQ29tcGxldGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9uQ09NUExFVEUgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfSFNISyAgMHgxMCAgICAgICAvKiBIb3N0IEhhbmRzaGFrZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9uSFNISyAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9USU1FT1VUICAweDIwICAgICAgIC8qIEhvc3QgVGltZW91dCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9uVElNRU9VVCAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9ISVJRICAweDQwICAgICAgIC8qIEhvc3QgSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfbkhJUlEgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICBIT1NUX1NUQVRfQUxMT1dfQ05GRyAgMHg4MCAgICAgICAvKiBBbGxvdyBOZXcgQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgIEhPU1RfU1RBVF9uQUxMT1dfQ05GRyAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9ETUFfRElSICAweDEwMCAgICAgIC8qIERNQSBEaXJlY3Rpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfbkRNQV9ESVIgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX0JURSAgMHgyMDAgICAgICAvKiBCdXMgVGltZW91dCBFbmFibGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9uQlRFICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICBIT1NUX1NUQVRfSE9TVFJEX0RPTkUgIDB4ODAwMCAgICAgLyogSG9zdCBSZWFkIENvbXBsZXRpb24gSW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICBIT1NUX1NUQVRfbkhPU1RSRF9ET05FICAweDAKLQotLyogQml0IG1hc2tzIGZvciBIT1NUX1RJTUVPVVQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICBIT1NUX0NPVU5UX1RJTUVPVVQgIDB4N2ZmICAgICAgLyogSG9zdCBUaW1lb3V0IGNvdW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0VDVVJFX1NZU1NXVCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEVNVURBQkwgIDB4MSAgICAgICAgLyogRW11bGF0aW9uIERpc2FibGUuICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgbkVNVURBQkwgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBSU1REQUJMICAweDIgICAgICAgIC8qIFJlc2V0IERpc2FibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuUlNUREFCTCAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEwxSURBQkwgIDB4MWMgICAgICAgLyogTDEgSW5zdHJ1Y3Rpb24gTWVtb3J5IERpc2FibGUuICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgTDFEQURBQkwgIDB4ZTAgICAgICAgLyogTDEgRGF0YSBCYW5rIEEgTWVtb3J5IERpc2FibGUuICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgTDFEQkRBQkwgIDB4NzAwICAgICAgLyogTDEgRGF0YSBCYW5rIEIgTWVtb3J5IERpc2FibGUuICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTBPVlIgIDB4ODAwICAgICAgLyogRE1BMCBNZW1vcnkgQWNjZXNzIE92ZXJyaWRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgbkRNQTBPVlIgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUExT1ZSICAweDEwMDAgICAgIC8qIERNQTEgTWVtb3J5IEFjY2VzcyBPdmVycmlkZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ETUExT1ZSICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVNVU9WUiAgMHg0MDAwICAgICAvKiBFbXVsYXRpb24gT3ZlcnJpZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVNVU9WUiAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBPVFBTRU4gIDB4ODAwMCAgICAgLyogT1RQIFNlY3JldHMgRW5hYmxlLiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuT1RQU0VOICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEwyREFCTCAgMHg3MDAwMCAgICAvKiBMMiBNZW1vcnkgRGlzYWJsZS4gKi8KLQotLyogQml0IG1hc2tzIGZvciBTRUNVUkVfQ09OVFJPTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFQ1VSRTAgIDB4MSAgICAgICAgLyogU0VDVVJFIDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuU0VDVVJFMCAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFQ1VSRTEgIDB4MiAgICAgICAgLyogU0VDVVJFIDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuU0VDVVJFMSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFQ1VSRTIgIDB4NCAgICAgICAgLyogU0VDVVJFIDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuU0VDVVJFMiAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFQ1VSRTMgIDB4OCAgICAgICAgLyogU0VDVVJFIDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuU0VDVVJFMyAgMHgwCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0VDVVJFX1NUQVRVUyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFQ01PREUgIDB4MyAgICAgICAgLyogU2VjdXJlZCBNb2RlIENvbnRyb2wgU3RhdGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE5NSSAgMHg0ICAgICAgICAvKiBOb24gTWFza2FibGUgSW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5OTUkgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBBRlZBTElEICAweDggICAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIEZpcm13YXJlIFZhbGlkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgbkFGVkFMSUQgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQUZFWElUICAweDEwICAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIEZpcm13YXJlIEV4aXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkFGRVhJVCAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFQ1NUQVQgIDB4ZTAgICAgICAgLyogU2VjdXJlIFN0YXR1cyAqLwotCi0KLQotI2VuZGlmIC8qIF9ERUZfQkY1MVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCA5YWY2Y2UwLi5iNDgwNzA1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtNTUsNCArNTUsOCBAQAogI2RlZmluZSBQT1JUX0cgR1BJT19QRzAKICNkZWZpbmUgUE9SVF9IIEdQSU9fUEgwCiAKKyNpbmNsdWRlIDxtYWNoLWNvbW1vbi9wb3J0cy1mLmg+CisjaW5jbHVkZSA8bWFjaC1jb21tb24vcG9ydHMtZy5oPgorI2luY2x1ZGUgPG1hY2gtY29tbW9uL3BvcnRzLWguaD4KKwogI2VuZGlmIC8qIF9NQUNIX0dQSU9fSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcGxsLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL3BsbC5oCmluZGV4IGQ1NTAyOTguLjk0Y2NhNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcGxsLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9wbGwuaApAQCAtMSw2MyArMSBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKLSAqLwotCi0jaWZuZGVmIF9NQUNIX1BMTF9ICi0jZGVmaW5lIF9NQUNIX1BMTF9ICi0KLSNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KLSNpbmNsdWRlIDxhc20vaXJxZmxhZ3MuaD4KLQotLyogV3JpdGluZyB0byBQTExfQ1RMIGluaXRpYXRlcyBhIFBMTCByZWxvY2sgc2VxdWVuY2UuICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGJmaW5fd3JpdGVfUExMX0NUTCh1bnNpZ25lZCBpbnQgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGl3cjAsIGl3cjE7Ci0KLQlpZiAodmFsID09IGJmaW5fcmVhZF9QTExfQ1RMKCkpCi0JCXJldHVybjsKLQotCWZsYWdzID0gaGFyZF9sb2NhbF9pcnFfc2F2ZSgpOwotCS8qIEVuYWJsZSB0aGUgUExMIFdha2V1cCBiaXQgaW4gU0lDIElXUiAqLwotCWl3cjAgPSBiZmluX3JlYWQzMihTSUNfSVdSMCk7Ci0JaXdyMSA9IGJmaW5fcmVhZDMyKFNJQ19JV1IxKTsKLQkvKiBPbmx5IGFsbG93IFBQTCBXYWtldXApICovCi0JYmZpbl93cml0ZTMyKFNJQ19JV1IwLCBJV1JfRU5BQkxFKDApKTsKLQliZmluX3dyaXRlMzIoU0lDX0lXUjEsIDApOwotCi0JYmZpbl93cml0ZTE2KFBMTF9DVEwsIHZhbCk7Ci0JU1NZTkMoKTsKLQlhc20oIklETEU7Iik7Ci0KLQliZmluX3dyaXRlMzIoU0lDX0lXUjAsIGl3cjApOwotCWJmaW5fd3JpdGUzMihTSUNfSVdSMSwgaXdyMSk7Ci0JaGFyZF9sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qIFdyaXRpbmcgdG8gVlJfQ1RMIGluaXRpYXRlcyBhIFBMTCByZWxvY2sgc2VxdWVuY2UuICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGJmaW5fd3JpdGVfVlJfQ1RMKHVuc2lnbmVkIGludCB2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgaXdyMCwgaXdyMTsKLQotCWlmICh2YWwgPT0gYmZpbl9yZWFkX1ZSX0NUTCgpKQotCQlyZXR1cm47Ci0KLQlmbGFncyA9IGhhcmRfbG9jYWxfaXJxX3NhdmUoKTsKLQkvKiBFbmFibGUgdGhlIFBMTCBXYWtldXAgYml0IGluIFNJQyBJV1IgKi8KLQlpd3IwID0gYmZpbl9yZWFkMzIoU0lDX0lXUjApOwotCWl3cjEgPSBiZmluX3JlYWQzMihTSUNfSVdSMSk7Ci0JLyogT25seSBhbGxvdyBQUEwgV2FrZXVwKSAqLwotCWJmaW5fd3JpdGUzMihTSUNfSVdSMCwgSVdSX0VOQUJMRSgwKSk7Ci0JYmZpbl93cml0ZTMyKFNJQ19JV1IxLCAwKTsKLQotCWJmaW5fd3JpdGUxNihWUl9DVEwsIHZhbCk7Ci0JU1NZTkMoKTsKLQlhc20oIklETEU7Iik7Ci0KLQliZmluX3dyaXRlMzIoU0lDX0lXUjAsIGl3cjApOwotCWJmaW5fd3JpdGUzMihTSUNfSVdSMSwgaXdyMSk7Ci0JaGFyZF9sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLSNlbmRpZiAvKiBfTUFDSF9QTExfSCAqLworI2luY2x1ZGUgPG1hY2gtY29tbW9uL3BsbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9hZDcxNjBldmFsLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2FkNzE2MGV2YWwuYwppbmRleCA1MjI5NWZmLi5jY2FiNGM2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2FkNzE2MGV2YWwuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2FkNzE2MGV2YWwuYwpAQCAtNjcsNiArNjcsNyBAQAogCSAqIGlmIGl0IGlzIHRoZSBjYXNlLgogCSAqLwogCS5ncGlvX3Zyc2VsX2FjdGl2ZQk9IDEsCisJLmNsa2luICAgICAgICAgID0gMjQsICAgICAgICAgICAvKiBtdXNiIENMS0lOIGluIE1IWiAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSBtdXNiX3BsYXQgPSB7CkBAIC00MTksNyArNDIwLDcgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQwX1RYLCBQX1VBUlQwX1JYLCAwCiB9OwogCkBAIC00NzQsNyArNDc1LDcgQEAKICNlbmRpZgogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MV9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDFfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQxX1RYLCBQX1VBUlQxX1JYLCAwCiB9OwogCkBAIC02MjcsOSArNjI4LDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQwX1RGUywgUF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsCi0JUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCBQX1NQT1JUMF9EUlNFQywgUF9TUE9SVDBfRFRTRUMsIDAKKwlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQwX3VhcnRfZGV2aWNlID0gewpAQCAtNjYxLDkgKzY2Miw5IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQxX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDFfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1NQT1JUMV9URlMsIFBfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgUF9TUE9SVDFfUkZTLAotCVBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgUF9TUE9SVDFfRFJTRUMsIFBfU1BPUlQxX0RUU0VDLCAwCisJUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCAwCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MV91YXJ0X2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYwppbmRleCA1MDUzM2VkLi5jOWQ2ZGM4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbV9iZjUyNy5jCkBAIC0xMDQsNiArMTA0LDcgQEAKIAkgKiBpZiBpdCBpcyB0aGUgY2FzZS4KIAkgKi8KIAkuZ3Bpb192cnNlbF9hY3RpdmUJPSAxLAorCS5jbGtpbiAgICAgICAgICA9IDI0LCAgICAgICAgICAgLyogbXVzYiBDTEtJTiBpbiBNSFogKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXVzYl9oZHJjX3BsYXRmb3JtX2RhdGEgbXVzYl9wbGF0ID0gewpAQCAtNjE0LDcgKzYxNSw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMF9UWCwgUF9VQVJUMF9SWCwgMAogfTsKIApAQCAtNjY5LDcgKzY3MCw3IEBACiAjZW5kaWYKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDFfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQxX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMV9UWCwgUF9VQVJUMV9SWCwgMAogfTsKIApAQCAtODAxLDkgKzgwMiw5IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQwX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1NQT1JUMF9URlMsIFBfU1BPUlQwX0RUUFJJLCBQX1NQT1JUMF9UU0NMSywgUF9TUE9SVDBfUkZTLAotCVBfU1BPUlQwX0RSUFJJLCBQX1NQT1JUMF9SU0NMSywgUF9TUE9SVDBfRFJTRUMsIFBfU1BPUlQwX0RUU0VDLCAwCisJUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCAwCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MF91YXJ0X2RldmljZSA9IHsKQEAgLTgzNSw5ICs4MzYsOSBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MV9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQxX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9TUE9SVDFfVEZTLCBQX1NQT1JUMV9EVFBSSSwgUF9TUE9SVDFfVFNDTEssIFBfU1BPUlQxX1JGUywKLQlQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIFBfU1BPUlQxX0RSU0VDLCBQX1NQT1JUMV9EVFNFQywgMAorCVBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgMAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zcG9ydDFfdWFydF9kZXZpY2UgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKaW5kZXggZDA2MTc3Yi4uYjcxMDFhYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpicmQuYwpAQCAtNjgsNiArNjgsNyBAQAogCSAqIGlmIGl0IGlzIHRoZSBjYXNlLgogCSAqLwogCS5ncGlvX3Zyc2VsX2FjdGl2ZQk9IDEsCisJLmNsa2luICAgICAgICAgID0gMjQsICAgICAgICAgICAvKiBtdXNiIENMS0lOIGluIE1IWiAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSBtdXNiX3BsYXQgPSB7CkBAIC00OTksNyArNTAwLDcgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQwX1RYLCBQX1VBUlQwX1JYLCAwCiB9OwogCkBAIC01NTQsNyArNTU1LDcgQEAKICNlbmRpZgogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MV9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDFfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQxX1RYLCBQX1VBUlQxX1JYLCAwCiB9OwogCkBAIC02ODEsOSArNjgyLDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQwX1RGUywgUF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsCi0JUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCBQX1NQT1JUMF9EUlNFQywgUF9TUE9SVDBfRFRTRUMsIDAKKwlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQwX3VhcnRfZGV2aWNlID0gewpAQCAtNzE1LDkgKzcxNiw5IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQxX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDFfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1NQT1JUMV9URlMsIFBfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgUF9TUE9SVDFfUkZTLAotCVBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgUF9TUE9SVDFfRFJTRUMsIFBfU1BPUlQxX0RUU0VDLCAwCisJUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCAwCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MV91YXJ0X2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwppbmRleCAzNWE4OGE1Li4yY2QyZmY2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemtpdC5jCkBAIC0xMDgsNiArMTA4LDcgQEAKIAkgKiBpZiBpdCBpcyB0aGUgY2FzZS4KIAkgKi8KIAkuZ3Bpb192cnNlbF9hY3RpdmUJPSAxLAorCS5jbGtpbiAgICAgICAgICA9IDI0LCAgICAgICAgICAgLyogbXVzYiBDTEtJTiBpbiBNSFogKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXVzYl9oZHJjX3BsYXRmb3JtX2RhdGEgbXVzYl9wbGF0ID0gewpAQCAtNzA4LDcgKzcwOSw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMF9UWCwgUF9VQVJUMF9SWCwgMAogfTsKIApAQCAtNzYzLDcgKzc2NCw3IEBACiAjZW5kaWYKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDFfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQxX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMV9UWCwgUF9VQVJUMV9SWCwgMAogfTsKIApAQCAtOTYyLDYgKzk2MywxMSBAQAogCQlJMkNfQk9BUkRfSU5GTygiYWQ1MjUyIiwgMHgyZiksCiAJfSwKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NORF9TT0NfQURBVTEzNzMpIHx8IGRlZmluZWQoQ09ORklHX1NORF9TT0NfQURBVTEzNzNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImFkYXUxMzczIiwgMHgxQSksCisJfSwKKyNlbmRpZgogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVF9NT0RVTEUpCkBAIC05ODQsOSArOTkwLDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQwX1RGUywgUF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsCi0JUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCBQX1NQT1JUMF9EUlNFQywgUF9TUE9SVDBfRFRTRUMsIDAKKwlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQwX3VhcnRfZGV2aWNlID0gewpAQCAtMTAxOCw5ICsxMDI0LDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDFfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MV9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQxX1RGUywgUF9TUE9SVDFfRFRQUkksIFBfU1BPUlQxX1RTQ0xLLCBQX1NQT1JUMV9SRlMsCi0JUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCBQX1NQT1JUMV9EUlNFQywgUF9TUE9SVDFfRFRTRUMsIDAKKwlQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQxX3VhcnRfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy90bGw2NTI3bS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy90bGw2NTI3bS5jCmluZGV4IDEzMDg2MWIuLjE4ZDMwM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvdGxsNjUyN20uYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL3RsbDY1MjdtLmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogCUdQSU9fUEcxLCBHUElPX1BIOSwgR1BJT19QSDEwCiB9OwogCi1zdGF0aWMgc3RydWN0IGdwaW9fZGVjb2Rlcl9wbGF0ZnJvbV9kYXRhIHNwaV9kZWNvZGVkX2NzID0geworc3RhdGljIHN0cnVjdCBncGlvX2RlY29kZXJfcGxhdGZvcm1fZGF0YSBzcGlfZGVjb2RlZF9jcyA9IHsKIAkuYmFzZQkJPSBFWFBfR1BJT19TUElTRUxfQkFTRSwKIAkuaW5wdXRfYWRkcnMJPSBncGlvX2FkZHJfaW5wdXRzLAogCS5ucl9pbnB1dF9hZGRycyA9IEFSUkFZX1NJWkUoZ3Bpb19hZGRyX2lucHV0cyksCkBAIC01ODYsNyArNTg2LDcgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQwX1RYLCBQX1VBUlQwX1JYLCAwCiB9OwogCkBAIC02NDIsNyArNjQyLDcgQEAKICNlbmRpZgogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MV9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDFfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQxX1RYLCBQX1VBUlQxX1JYLCAwCiB9OwogCkBAIC03OTksOSArNzk5LDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQwX1RGUywgUF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsCi0JUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCBQX1NQT1JUMF9EUlNFQywgUF9TUE9SVDBfRFRTRUMsIDAKKwlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQwX3VhcnRfZGV2aWNlID0gewpAQCAtODM0LDkgKzgzNCw5IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQxX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDFfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1NQT1JUMV9URlMsIFBfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgUF9TUE9SVDFfUkZTLAotCVBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgUF9TUE9SVDFfRFJTRUMsIFBfU1BPUlQxX0RUU0VDLCAwCisJUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCAwCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MV91YXJ0X2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9kbWEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9kbWEuYwppbmRleCA3YmM3NTc3Li4xZmFiZGVmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvZG1hLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2RtYS5jCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogCi1zdHJ1Y3QgZG1hX3JlZ2lzdGVyICpkbWFfaW9fYmFzZV9hZGRyW01BWF9ETUFfQ0hBTk5FTFNdID0geworc3RydWN0IGRtYV9yZWdpc3RlciAqIGNvbnN0IGRtYV9pb19iYXNlX2FkZHJbTUFYX0RNQV9DSEFOTkVMU10gPSB7CiAJKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgRE1BMF9ORVhUX0RFU0NfUFRSLAogCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIERNQTFfTkVYVF9ERVNDX1BUUiwKIAkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBETUEyX05FWFRfREVTQ19QVFIsCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBjNjAzZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWwuaApAQCAtMCwwICsxLDE0IEBACisvKgorICogbWFjaC9iZmluX3NlcmlhbC5oIC0gQmxhY2tmaW4gVUFSVC9TZXJpYWwgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2lmbmRlZiBfX0JGSU5fTUFDSF9TRVJJQUxfSF9fCisjZGVmaW5lIF9fQkZJTl9NQUNIX1NFUklBTF9IX18KKworI2RlZmluZSBCRklOX1VBUlRfTlJfUE9SVFMJMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IGMxZDU1YjguLjk2MGUwODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtNCwzNiArNCw5IEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+CiAKLSNkZWZpbmUgVUFSVF9HRVRfQ0hBUih1YXJ0KSAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX1JCUikpCi0jZGVmaW5lIFVBUlRfR0VUX0RMTCh1YXJ0KQliZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExMKSkKLSNkZWZpbmUgVUFSVF9HRVRfSUVSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lFUikpCi0jZGVmaW5lIFVBUlRfR0VUX0RMSCh1YXJ0KQliZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExIKSkKLSNkZWZpbmUgVUFSVF9HRVRfSUlSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lJUikpCi0jZGVmaW5lIFVBUlRfR0VUX0xDUih1YXJ0KSAgICAgIGJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MQ1IpKQotI2RlZmluZSBVQVJUX0dFVF9HQ1RMKHVhcnQpICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfR0NUTCkpCi0KLSNkZWZpbmUgVUFSVF9QVVRfQ0hBUih1YXJ0LCB2KSAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfVEhSKSwgdikKLSNkZWZpbmUgVUFSVF9QVVRfRExMKHVhcnQsIHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExMKSwgdikKLSNkZWZpbmUgVUFSVF9QVVRfSUVSKHVhcnQsIHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfSUVSKSwgdikKLSNkZWZpbmUgVUFSVF9TRVRfSUVSKHVhcnQsIHYpICAgIFVBUlRfUFVUX0lFUih1YXJ0LCBVQVJUX0dFVF9JRVIodWFydCkgfCAodikpCi0jZGVmaW5lIFVBUlRfQ0xFQVJfSUVSKHVhcnQsIHYpICBVQVJUX1BVVF9JRVIodWFydCwgVUFSVF9HRVRfSUVSKHVhcnQpICYgfih2KSkKLSNkZWZpbmUgVUFSVF9QVVRfRExIKHVhcnQsIHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExIKSwgdikKLSNkZWZpbmUgVUFSVF9QVVRfTENSKHVhcnQsIHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTENSKSwgdikKLSNkZWZpbmUgVUFSVF9QVVRfR0NUTCh1YXJ0LCB2KSAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfR0NUTCksIHYpCi0KLSNkZWZpbmUgVUFSVF9TRVRfRExBQih1YXJ0KSAgICAgZG8geyBVQVJUX1BVVF9MQ1IodWFydCwgVUFSVF9HRVRfTENSKHVhcnQpIHwgRExBQik7IFNTWU5DKCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFVBUlRfQ0xFQVJfRExBQih1YXJ0KSAgIGRvIHsgVUFSVF9QVVRfTENSKHVhcnQsIFVBUlRfR0VUX0xDUih1YXJ0KSAmIH5ETEFCKTsgU1NZTkMoKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBVQVJUX0dFVF9DVFMoeCkgZ3Bpb19nZXRfdmFsdWUoeC0+Y3RzX3BpbikKLSNkZWZpbmUgVUFSVF9ESVNBQkxFX1JUUyh4KSBncGlvX3NldF92YWx1ZSh4LT5ydHNfcGluLCAxKQotI2RlZmluZSBVQVJUX0VOQUJMRV9SVFMoeCkgZ3Bpb19zZXRfdmFsdWUoeC0+cnRzX3BpbiwgMCkKLSNkZWZpbmUgVUFSVF9FTkFCTEVfSU5UUyh4LCB2KSBVQVJUX1BVVF9JRVIoeCwgdikKLSNkZWZpbmUgVUFSVF9ESVNBQkxFX0lOVFMoeCkgVUFSVF9QVVRfSUVSKHgsIDApCi0KICNpZiBkZWZpbmVkKENPTkZJR19CRklOX1VBUlQwX0NUU1JUUykgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9VQVJUMV9DVFNSVFMpCiAjIGRlZmluZSBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCiAKQEAgLTU0LDUwICsyNyw2IEBACiAjIGVuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBCRklOX1VBUlRfVFhfRklGT19TSVpFCTIKLQotLyoKLSAqIFRoZSBwaW4gY29uZmlndXJhdGlvbiBpcyBkaWZmZXJlbnQgZnJvbSBzY2hlbWF0aWMKLSAqLwotc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgewotCXN0cnVjdCB1YXJ0X3BvcnQgcG9ydDsKLQl1bnNpZ25lZCBpbnQgb2xkX3N0YXR1czsKLQlpbnQgc3RhdHVzX2lycTsKLQl1bnNpZ25lZCBpbnQgbHNyOwotI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9ETUEKLQlpbnQgdHhfZG9uZTsKLQlpbnQgdHhfY291bnQ7Ci0Jc3RydWN0IGNpcmNfYnVmIHJ4X2RtYV9idWY7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgcnhfZG1hX3RpbWVyOwotCWludCByeF9kbWFfbnJvd3M7Ci0JdW5zaWduZWQgaW50IHR4X2RtYV9jaGFubmVsOwotCXVuc2lnbmVkIGludCByeF9kbWFfY2hhbm5lbDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfZG1hX3dvcmtxdWV1ZTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKLQlzdHJ1Y3QgdGltZXJfbGlzdCBjdHNfdGltZXI7Ci0JaW50IGN0c19waW47Ci0JaW50IHJ0c19waW47Ci0jZW5kaWYKLX07Ci0KLS8qIFRoZSBoYXJkd2FyZSBjbGVhcnMgdGhlIExTUiBiaXRzIHVwb24gcmVhZCwgc28gd2UgbmVlZCB0byBjYWNoZQotICogc29tZSBvZiB0aGUgbW9yZSBmdW4gYml0cyBpbiBzb2Z0d2FyZSBzbyB0aGV5IGRvbid0IGdldCBsb3N0Ci0gKiB3aGVuIGNoZWNraW5nIHRoZSBMU1IgaW4gb3RoZXIgY29kZSBwYXRocyAoVFgpLgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBVQVJUX0dFVF9MU1Ioc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCi17Ci0JdW5zaWduZWQgaW50IGxzciA9IGJmaW5fcmVhZDE2KHVhcnQtPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MU1IpOwotCXVhcnQtPmxzciB8PSAobHNyICYgKEJJfEZFfFBFfE9FKSk7Ci0JcmV0dXJuIGxzciB8IHVhcnQtPmxzcjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIFVBUlRfQ0xFQVJfTFNSKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0KQotewotCXVhcnQtPmxzciA9IDA7Ci0JYmZpbl93cml0ZTE2KHVhcnQtPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MU1IsIC0xKTsKLX0KLQogc3RydWN0IGJmaW5fc2VyaWFsX3JlcyB7CiAJdW5zaWduZWQgbG9uZyB1YXJ0X2Jhc2VfYWRkcjsKIAlpbnQgdWFydF9pcnE7CkBAIC0xNDYsMyArNzUsNSBAQAogfTsKIAogI2RlZmluZSBEUklWRVJfTkFNRSAiYmZpbi11YXJ0IgorCisjaW5jbHVkZSA8YXNtL2JmaW5fc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggZjcxNGM1ZC4uZTFkMjc5MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMSw0OSArMSwzNyBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDctMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwogI2RlZmluZSBfTUFDSF9CTEFDS0ZJTl9IXwogCiAjaW5jbHVkZSAiYmY1MjcuaCIKLSNpbmNsdWRlICJkZWZCRjUyMi5oIgogI2luY2x1ZGUgImFub21hbHkuaCIKIAotI2lmIGRlZmluZWQoQ09ORklHX0JGNTI3KSB8fCBkZWZpbmVkKENPTkZJR19CRjUyNikKLSNpbmNsdWRlICJkZWZCRjUyNy5oIgorI2luY2x1ZGUgPGFzbS9kZWZfTFBCbGFja2Zpbi5oPgorI2lmIGRlZmluZWQoQ09ORklHX0JGNTIzKSB8fCBkZWZpbmVkKENPTkZJR19CRjUyMikKKyMgaW5jbHVkZSAiZGVmQkY1MjIuaCIKICNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfQkY1MjUpIHx8IGRlZmluZWQoQ09ORklHX0JGNTI0KQotI2luY2x1ZGUgImRlZkJGNTI1LmgiCisjIGluY2x1ZGUgImRlZkJGNTI1LmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19CRjUyNykgfHwgZGVmaW5lZChDT05GSUdfQkY1MjYpCisjIGluY2x1ZGUgImRlZkJGNTI3LmgiCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykKLSNpbmNsdWRlICJjZGVmQkY1MjIuaCIKLQotI2lmIGRlZmluZWQoQ09ORklHX0JGNTI3KSB8fCBkZWZpbmVkKENPTkZJR19CRjUyNikKLSNpbmNsdWRlICJjZGVmQkY1MjcuaCIKKyMgaW5jbHVkZSA8YXNtL2NkZWZfTFBCbGFja2Zpbi5oPgorIyBpZiBkZWZpbmVkKENPTkZJR19CRjUyMykgfHwgZGVmaW5lZChDT05GSUdfQkY1MjIpCisjICBpbmNsdWRlICJjZGVmQkY1MjIuaCIKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZChDT05GSUdfQkY1MjUpIHx8IGRlZmluZWQoQ09ORklHX0JGNTI0KQorIyAgaW5jbHVkZSAiY2RlZkJGNTI1LmgiCisjIGVuZGlmCisjIGlmIGRlZmluZWQoQ09ORklHX0JGNTI3KSB8fCBkZWZpbmVkKENPTkZJR19CRjUyNikKKyMgIGluY2x1ZGUgImNkZWZCRjUyNy5oIgorIyBlbmRpZgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19CRjUyNSkgfHwgZGVmaW5lZChDT05GSUdfQkY1MjQpCi0jaW5jbHVkZSAiY2RlZkJGNTI1LmgiCi0jZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIEJGSU5fVUFSVF9OUl9QT1JUUwkyCi0KLSNkZWZpbmUgT0ZGU0VUX1RIUiAgICAgICAgICAgICAgMHgwMAkvKiBUcmFuc21pdCBIb2xkaW5nIHJlZ2lzdGVyICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX1JCUiAgICAgICAgICAgICAgMHgwMAkvKiBSZWNlaXZlIEJ1ZmZlciByZWdpc3RlciAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX0RMTCAgICAgICAgICAgICAgMHgwMAkvKiBEaXZpc29yIExhdGNoIChMb3ctQnl0ZSkgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX0lFUiAgICAgICAgICAgICAgMHgwNAkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX0RMSCAgICAgICAgICAgICAgMHgwNAkvKiBEaXZpc29yIExhdGNoIChIaWdoLUJ5dGUpICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX0lJUiAgICAgICAgICAgICAgMHgwOAkvKiBJbnRlcnJ1cHQgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX0xDUiAgICAgICAgICAgICAgMHgwQwkvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX01DUiAgICAgICAgICAgICAgMHgxMAkvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX0xTUiAgICAgICAgICAgICAgMHgxNAkvKiBMaW5lIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX01TUiAgICAgICAgICAgICAgMHgxOAkvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX1NDUiAgICAgICAgICAgICAgMHgxQwkvKiBTQ1IgU2NyYXRjaCBSZWdpc3RlciAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX0dDVEwgICAgICAgICAgICAgMHgyNAkvKiBHbG9iYWwgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgKi8KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyMi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjIuaAppbmRleCAxMDc5YWY4Li42MThkZmNkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyMi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTIyLmgKQEAgLTEsMjEgKzEsMTA5NSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDctMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUyMl9ICiAjZGVmaW5lIF9DREVGX0JGNTIyX0gKIAotLyogaW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgImRlZkJGNTIyLmgiCisvKiBDbG9jayBhbmQgU3lzdGVtIENvbnRyb2wJKDB4RkZDMDAwMDAgLSAweEZGQzAwMEZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1BMTF9DVEwoKQkJCWJmaW5fcmVhZDE2KFBMTF9DVEwpCisjZGVmaW5lIGJmaW5fcmVhZF9QTExfRElWKCkJCQliZmluX3JlYWQxNihQTExfRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1BMTF9ESVYodmFsKQkJCWJmaW5fd3JpdGUxNihQTExfRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9WUl9DVEwoKQkJCWJmaW5fcmVhZDE2KFZSX0NUTCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BMTF9TVEFUKCkJCQliZmluX3JlYWQxNihQTExfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QTExfU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoUExMX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BMTF9MT0NLQ05UKCkJCQliZmluX3JlYWQxNihQTExfTE9DS0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QTExfTE9DS0NOVCh2YWwpCQliZmluX3dyaXRlMTYoUExMX0xPQ0tDTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NISVBJRCgpCQkJYmZpbl9yZWFkMzIoQ0hJUElEKQorI2RlZmluZSBiZmluX3dyaXRlX0NISVBJRCh2YWwpCQkJYmZpbl93cml0ZTMyKENISVBJRCwgdmFsKQogCi0vKiBpbmNsdWRlIGNvcmUgc3BlY2lmaWMgcmVnaXN0ZXIgcG9pbnRlciBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGFzbS9jZGVmX0xQQmxhY2tmaW4uaD4KIAotLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1MjIgKi8KKy8qIFN5c3RlbSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoMHhGRkMwMDEwMCAtIDB4RkZDMDAxRkYpCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9TV1JTVCgpCQkJYmZpbl9yZWFkMTYoU1dSU1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1dSU1QodmFsKQkJCWJmaW5fd3JpdGUxNihTV1JTVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1lTQ1IoKQkJCWJmaW5fcmVhZDE2KFNZU0NSKQorI2RlZmluZSBiZmluX3dyaXRlX1NZU0NSKHZhbCkJCQliZmluX3dyaXRlMTYoU1lTQ1IsIHZhbCkKIAotLyogaW5jbHVkZSBjZGVmQkY1MnhfYmFzZS5oIGZvciB0aGUgc2V0IG9mICNkZWZpbmVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQURTUC1CRjUyeCBwcm9jZXNzb3JzICovCi0jaW5jbHVkZSAiY2RlZkJGNTJ4X2Jhc2UuaCIKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19SVkVDVCgpCQkJYmZpbl9yZWFkMzIoU0lDX1JWRUNUKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19SVkVDVCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX1JWRUNULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TSUNfSU1BU0swKCkJCQliZmluX3JlYWQzMihTSUNfSU1BU0swKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JTUFTSzAodmFsKQkJYmZpbl93cml0ZTMyKFNJQ19JTUFTSzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JTUFTSyh4KQkJCWJmaW5fcmVhZDMyKFNJQ19JTUFTSzAgKyAoeCA8PCA2KSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSU1BU0soeCwgdmFsKQkJYmZpbl93cml0ZTMyKChTSUNfSU1BU0swICsgKHggPDwgNikpLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIwKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIxKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIyKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMih2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIzKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMykKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMyh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjMsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfU0lDX0lTUjAoKQkJCWJmaW5fcmVhZDMyKFNJQ19JU1IwKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JU1IwKHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSVNSMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lTUih4KQkJCWJmaW5fcmVhZDMyKFNJQ19JU1IwICsgKHggPDwgNikpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lTUih4LCB2YWwpCQliZmluX3dyaXRlMzIoKFNJQ19JU1IwICsgKHggPDwgNikpLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JV1IwKCkJCQliZmluX3JlYWQzMihTSUNfSVdSMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSVdSMCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lXUjAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JV1IoeCkJCQliZmluX3JlYWQzMihTSUNfSVdSMCArICh4IDw8IDYpKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JV1IoeCwgdmFsKQkJYmZpbl93cml0ZTMyKChTSUNfSVdSMCArICh4IDw8IDYpKSwgdmFsKQorCisvKiBTSUMgQWRkaXRpb25zIHRvIEFEU1AtQkY1MnggKDB4RkZDMDAxNEMgLSAweEZGQzAwMTYyKSAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9TSUNfSU1BU0sxKCkJCQliZmluX3JlYWQzMihTSUNfSU1BU0sxKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JTUFTSzEodmFsKQkJYmZpbl93cml0ZTMyKFNJQ19JTUFTSzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVI0KCkJCQliZmluX3JlYWQzMihTSUNfSUFSNCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSNCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVI1KCkJCQliZmluX3JlYWQzMihTSUNfSUFSNSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSNSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVI2KCkJCQliZmluX3JlYWQzMihTSUNfSUFSNikKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSNih2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVI3KCkJCQliZmluX3JlYWQzMihTSUNfSUFSNykKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSNyh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JU1IxKCkJCQliZmluX3JlYWQzMihTSUNfSVNSMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSVNSMSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lTUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JV1IxKCkJCQliZmluX3JlYWQzMihTSUNfSVdSMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSVdSMSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lXUjEsIHZhbCkKKworLyogV2F0Y2hkb2cgVGltZXIJCSgweEZGQzAwMjAwIC0gMHhGRkMwMDJGRikJCQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfV0RPR19DVEwoKQkJCWJmaW5fcmVhZDE2KFdET0dfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1dET0dfQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihXRE9HX0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfV0RPR19DTlQoKQkJCWJmaW5fcmVhZDMyKFdET0dfQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX1dET0dfQ05UKHZhbCkJCWJmaW5fd3JpdGUzMihXRE9HX0NOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfV0RPR19TVEFUKCkJCQliZmluX3JlYWQzMihXRE9HX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfV0RPR19TVEFUKHZhbCkJCWJmaW5fd3JpdGUzMihXRE9HX1NUQVQsIHZhbCkKKworCisvKiBSZWFsIFRpbWUgQ2xvY2sJCSgweEZGQzAwMzAwIC0gMHhGRkMwMDNGRikJCQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfUlRDX1NUQVQoKQkJCWJmaW5fcmVhZDMyKFJUQ19TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX1JUQ19TVEFUKHZhbCkJCWJmaW5fd3JpdGUzMihSVENfU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlRDX0lDVEwoKQkJCWJmaW5fcmVhZDE2KFJUQ19JQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1JUQ19JQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihSVENfSUNUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlRDX0lTVEFUKCkJCQliZmluX3JlYWQxNihSVENfSVNUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlRDX0lTVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihSVENfSVNUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JUQ19TV0NOVCgpCQkJYmZpbl9yZWFkMTYoUlRDX1NXQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX1JUQ19TV0NOVCh2YWwpCQliZmluX3dyaXRlMTYoUlRDX1NXQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SVENfQUxBUk0oKQkJCWJmaW5fcmVhZDMyKFJUQ19BTEFSTSkKKyNkZWZpbmUgYmZpbl93cml0ZV9SVENfQUxBUk0odmFsKQkJYmZpbl93cml0ZTMyKFJUQ19BTEFSTSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlRDX0ZBU1QoKQkJCWJmaW5fcmVhZDE2KFJUQ19GQVNUKQorI2RlZmluZSBiZmluX3dyaXRlX1JUQ19GQVNUKHZhbCkJCWJmaW5fd3JpdGUxNihSVENfRkFTVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlRDX1BSRU4oKQkJCWJmaW5fcmVhZDE2KFJUQ19QUkVOKQorI2RlZmluZSBiZmluX3dyaXRlX1JUQ19QUkVOKHZhbCkJCWJmaW5fd3JpdGUxNihSVENfUFJFTiwgdmFsKQorCisKKy8qIFVBUlQwIENvbnRyb2xsZXIJCSgweEZGQzAwNDAwIC0gMHhGRkMwMDRGRikJCQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfVEhSKCkJCQliZmluX3JlYWQxNihVQVJUMF9USFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfVEhSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9USFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX1JCUigpCQkJYmZpbl9yZWFkMTYoVUFSVDBfUkJSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX1JCUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfUkJSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9ETEwoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0RMTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9ETEwodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0RMTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfSUVSKCkJCQliZmluX3JlYWQxNihVQVJUMF9JRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfSUVSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9JRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX0RMSCgpCQkJYmZpbl9yZWFkMTYoVUFSVDBfRExIKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX0RMSCh2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfRExILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9JSVIoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0lJUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9JSVIodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0lJUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfTENSKCkJCQliZmluX3JlYWQxNihVQVJUMF9MQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfTENSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9MQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX01DUigpCQkJYmZpbl9yZWFkMTYoVUFSVDBfTUNSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX01DUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfTUNSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9MU1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0xTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9MU1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0xTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfTVNSKCkJCQliZmluX3JlYWQxNihVQVJUMF9NU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfTVNSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9NU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX1NDUigpCQkJYmZpbl9yZWFkMTYoVUFSVDBfU0NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX1NDUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfU0NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9HQ1RMKCkJCQliZmluX3JlYWQxNihVQVJUMF9HQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX0dDVEwodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0dDVEwsIHZhbCkKKworCisvKiBTUEkgQ29udHJvbGxlcgkJKDB4RkZDMDA1MDAgLSAweEZGQzAwNUZGKQkJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9TUElfQ1RMKCkJCQliZmluX3JlYWQxNihTUElfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSV9DVEwodmFsKQkJCWJmaW5fd3JpdGUxNihTUElfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUElfRkxHKCkJCQliZmluX3JlYWQxNihTUElfRkxHKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSV9GTEcodmFsKQkJCWJmaW5fd3JpdGUxNihTUElfRkxHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUElfU1RBVCgpCQkJYmZpbl9yZWFkMTYoU1BJX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BJX1NUQVQodmFsKQkJYmZpbl93cml0ZTE2KFNQSV9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUElfVERCUigpCQkJYmZpbl9yZWFkMTYoU1BJX1REQlIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BJX1REQlIodmFsKQkJYmZpbl93cml0ZTE2KFNQSV9UREJSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUElfUkRCUigpCQkJYmZpbl9yZWFkMTYoU1BJX1JEQlIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BJX1JEQlIodmFsKQkJYmZpbl93cml0ZTE2KFNQSV9SREJSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUElfQkFVRCgpCQkJYmZpbl9yZWFkMTYoU1BJX0JBVUQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BJX0JBVUQodmFsKQkJYmZpbl93cml0ZTE2KFNQSV9CQVVELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUElfU0hBRE9XKCkJCQliZmluX3JlYWQxNihTUElfU0hBRE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSV9TSEFET1codmFsKQkJYmZpbl93cml0ZTE2KFNQSV9TSEFET1csIHZhbCkKKworCisvKiBUSU1FUjAtNyBSZWdpc3RlcnMJCSgweEZGQzAwNjAwIC0gMHhGRkMwMDZGRikJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjBfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSMF9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIwX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIwX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIwX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIwX0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIwX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMF9DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjBfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSMF9QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIwX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIwX1BFUklPRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIwX1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSMF9XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjBfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMF9XSURUSCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjFfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSMV9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIxX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIxX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIxX0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMV9DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjFfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSMV9QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIxX1BFUklPRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIxX1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSMV9XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjFfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMV9XSURUSCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjJfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSMl9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIyX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIyX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIyX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIyX0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIyX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMl9DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjJfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSMl9QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIyX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIyX1BFUklPRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIyX1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSMl9XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjJfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMl9XSURUSCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjNfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSM19DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIzX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIzX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIzX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIzX0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIzX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSM19DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjNfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSM19QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIzX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIzX1BFUklPRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIzX1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSM19XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjNfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSM19XSURUSCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjRfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSNF9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI0X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI0X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI0X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI0X0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI0X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNF9DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjRfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSNF9QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI0X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI0X1BFUklPRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI0X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSNF9XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjRfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNF9XSURUSCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjVfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSNV9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI1X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI1X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI1X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI1X0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI1X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNV9DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjVfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSNV9QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI1X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI1X1BFUklPRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI1X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSNV9XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjVfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNV9XSURUSCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjZfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSNl9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI2X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI2X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI2X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI2X0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI2X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNl9DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjZfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSNl9QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI2X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI2X1BFUklPRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI2X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSNl9XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjZfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNl9XSURUSCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjdfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSN19DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI3X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI3X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI3X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI3X0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI3X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSN19DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjdfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSN19QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI3X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI3X1BFUklPRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI3X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSN19XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjdfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSN19XSURUSCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9FTkFCTEUoKQkJYmZpbl9yZWFkMTYoVElNRVJfRU5BQkxFKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX0VOQUJMRSh2YWwpCQliZmluX3dyaXRlMTYoVElNRVJfRU5BQkxFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9ESVNBQkxFKCkJCWJmaW5fcmVhZDE2KFRJTUVSX0RJU0FCTEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfRElTQUJMRSh2YWwpCQliZmluX3dyaXRlMTYoVElNRVJfRElTQUJMRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVJfU1RBVFVTKCkJCWJmaW5fcmVhZDMyKFRJTUVSX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9TVEFUVVModmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSX1NUQVRVUywgdmFsKQorCisKKy8qIEdlbmVyYWwgUHVycG9zZSBJL08gUG9ydCBGICgweEZGQzAwNzAwIC0gMHhGRkMwMDdGRikJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPKCkJCQliZmluX3JlYWQxNihQT1JURklPKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU8odmFsKQkJCWJmaW5fd3JpdGUxNihQT1JURklPLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19DTEVBUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZJT19DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19TRVQoKQkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fU0VUKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19UT0dHTEUoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19UT0dHTEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19UT0dHTEUodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fVE9HR0xFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tBKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fTUFTS0EpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19NQVNLQSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZJT19NQVNLQSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19NQVNLQV9DTEVBUigpCQliZmluX3JlYWQxNihQT1JURklPX01BU0tBX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fTUFTS0FfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEZJT19NQVNLQV9DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19NQVNLQV9TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19NQVNLQV9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19NQVNLQV9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEZJT19NQVNLQV9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fTUFTS0FfVE9HR0xFKCkJYmZpbl9yZWFkMTYoUE9SVEZJT19NQVNLQV9UT0dHTEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19NQVNLQV9UT0dHTEUodmFsKQliZmluX3dyaXRlMTYoUE9SVEZJT19NQVNLQV9UT0dHTEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fTUFTS0IoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19NQVNLQikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tCKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tCLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tCX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fTUFTS0JfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19NQVNLQl9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tCX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tCX1NFVCgpCQliZmluX3JlYWQxNihQT1JURklPX01BU0tCX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tCX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tCX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19NQVNLQl9UT0dHTEUoKQliZmluX3JlYWQxNihQT1JURklPX01BU0tCX1RPR0dMRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tCX1RPR0dMRSh2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tCX1RPR0dMRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19ESVIoKQkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fRElSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fRElSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX0RJUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19QT0xBUigpCQliZmluX3JlYWQxNihQT1JURklPX1BPTEFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fUE9MQVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fUE9MQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fRURHRSgpCQliZmluX3JlYWQxNihQT1JURklPX0VER0UpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19FREdFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX0VER0UsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fQk9USCgpCQliZmluX3JlYWQxNihQT1JURklPX0JPVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19CT1RIKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX0JPVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fSU5FTigpCQliZmluX3JlYWQxNihQT1JURklPX0lORU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19JTkVOKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX0lORU4sIHZhbCkKKworCisvKiBTUE9SVDAgQ29udHJvbGxlcgkJKDB4RkZDMDA4MDAgLSAweEZGQzAwOEZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ1IxKCkJCQliZmluX3JlYWQxNihTUE9SVDBfVENSMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVENSMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1RDUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ1IyKCkJCQliZmluX3JlYWQxNihTUE9SVDBfVENSMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVENSMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1RDUjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ0xLRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9UQ0xLRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UQ0xLRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfVENMS0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RGU0RJVigpCQliZmluX3JlYWQxNihTUE9SVDBfVEZTRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9URlNESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9URlNESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UWCgpCQkJYmZpbl9yZWFkMzIoU1BPUlQwX1RYKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UWCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX1RYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUlgoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMF9SWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUlgodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9SWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RYMzIoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMF9UWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVFgzMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX1RYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUlgzMigpCQkJYmZpbl9yZWFkMzIoU1BPUlQwX1JYKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9SWDMyKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDBfUlgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UWDE2KCkJCQliZmluX3JlYWQxNihTUE9SVDBfVFgpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RYMTYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9UWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1JYMTYoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9SWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUlgxNih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1JYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkNSMSgpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JDUjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JDUjEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9SQ1IxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkNSMigpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JDUjIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JDUjIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9SQ1IyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkNMS0RJVigpCQliZmluX3JlYWQxNihTUE9SVDBfUkNMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUkNMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1JDTEtESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9SRlNESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JGU0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUkZTRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfUkZTRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfU1RBVCgpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1NUQVQodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfQ0hOTCgpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX0NITkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX0NITkwodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9DSE5MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTUNNQzEoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX01DTUMxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NQ01DMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX01DTUMxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTUNNQzIoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX01DTUMyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NQ01DMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX01DTUMyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzAoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MwKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzEoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMSh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzIoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzMoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MzKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMyh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzAoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MwKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzEoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMSh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzIoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzMoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MzKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMyh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MzLCB2YWwpCisKKworLyogU1BPUlQxIENvbnRyb2xsZXIJCSgweEZGQzAwOTAwIC0gMHhGRkMwMDlGRikJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVENSMSgpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RDUjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1RDUjEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9UQ1IxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVENSMigpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RDUjIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1RDUjIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9UQ1IyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVENMS0RJVigpCQliZmluX3JlYWQxNihTUE9SVDFfVENMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVENMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1RDTEtESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9URlNESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RGU0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVEZTRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfVEZTRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVFgoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMV9UWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVFgodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9UWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JYKCkJCQliZmluX3JlYWQzMihTUE9SVDFfUlgpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JYKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDFfUlgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9UWDMyKCkJCQliZmluX3JlYWQzMihTUE9SVDFfVFgpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1RYMzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9UWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JYMzIoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMV9SWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfUlgzMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX1JYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVFgxNigpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RYKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9UWDE2KHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfVFgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9SWDE2KCkJCQliZmluX3JlYWQxNihTUE9SVDFfUlgpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JYMTYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9SWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JDUjEoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMV9SQ1IxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9SQ1IxKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfUkNSMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JDUjIoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMV9SQ1IyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9SQ1IyKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfUkNSMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JDTEtESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQxX1JDTEtESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JDTEtESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9SQ0xLRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfUkZTRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMV9SRlNESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JGU0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1JGU0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1NUQVQoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMV9TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX0NITkwoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMV9DSE5MKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9DSE5MKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfQ0hOTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01DTUMxKCkJCWJmaW5fcmVhZDE2KFNQT1JUMV9NQ01DMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTUNNQzEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9NQ01DMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01DTUMyKCkJCWJmaW5fcmVhZDE2KFNQT1JUMV9NQ01DMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTUNNQzIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9NQ01DMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01UQ1MwKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NVENTMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVRDUzAodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NVENTMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01UQ1MxKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NVENTMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVRDUzEodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NVENTMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01UQ1MyKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NVENTMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVRDUzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NVENTMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01UQ1MzKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NVENTMykKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVRDUzModmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NVENTMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01SQ1MwKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NUkNTMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVJDUzAodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NUkNTMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01SQ1MxKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NUkNTMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVJDUzEodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NUkNTMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01SQ1MyKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NUkNTMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVJDUzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NUkNTMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01SQ1MzKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NUkNTMykKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVJDUzModmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NUkNTMywgdmFsKQorCisKKy8qIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgVW5pdCAoMHhGRkMwMEEwMCAtIDB4RkZDMDBBRkYpCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0FNR0NUTCgpCQkJYmZpbl9yZWFkMTYoRUJJVV9BTUdDVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9BTUdDVEwodmFsKQkJYmZpbl93cml0ZTE2KEVCSVVfQU1HQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0FNQkNUTDAoKQkJYmZpbl9yZWFkMzIoRUJJVV9BTUJDVEwwKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfQU1CQ1RMMCh2YWwpCQliZmluX3dyaXRlMzIoRUJJVV9BTUJDVEwwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0FNQkNUTDEoKQkJYmZpbl9yZWFkMzIoRUJJVV9BTUJDVEwxKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfQU1CQ1RMMSh2YWwpCQliZmluX3dyaXRlMzIoRUJJVV9BTUJDVEwxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX1NER0NUTCgpCQkJYmZpbl9yZWFkMzIoRUJJVV9TREdDVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9TREdDVEwodmFsKQkJYmZpbl93cml0ZTMyKEVCSVVfU0RHQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX1NEQkNUTCgpCQkJYmZpbl9yZWFkMTYoRUJJVV9TREJDVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9TREJDVEwodmFsKQkJYmZpbl93cml0ZTE2KEVCSVVfU0RCQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX1NEUlJDKCkJCQliZmluX3JlYWQxNihFQklVX1NEUlJDKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfU0RSUkModmFsKQkJYmZpbl93cml0ZTE2KEVCSVVfU0RSUkMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfU0RTVEFUKCkJCQliZmluX3JlYWQxNihFQklVX1NEU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX1NEU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoRUJJVV9TRFNUQVQsIHZhbCkKKworCisvKiBETUEgVHJhZmZpYyBDb250cm9sIFJlZ2lzdGVycwkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfRE1BQ19UQ19QRVIoKQkJCWJmaW5fcmVhZDE2KERNQUNfVENfUEVSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQUNfVENfUEVSKHZhbCkJCWJmaW5fd3JpdGUxNihETUFDX1RDX1BFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BQ19UQ19DTlQoKQkJCWJmaW5fcmVhZDE2KERNQUNfVENfQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQUNfVENfQ05UKHZhbCkJCWJmaW5fd3JpdGUxNihETUFDX1RDX0NOVCwgdmFsKQorCisvKiBETUEgQ29udHJvbGxlcgkJCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUEwX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEwX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTBfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTBfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTBfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTBfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTBfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTBfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTBfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUEwX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTBfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUEwX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BMF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUEwX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTBfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUEwX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMF9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMF9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTBfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTBfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMF9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMF9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTBfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUEwX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUExX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTFfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTFfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTFfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTFfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTFfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTFfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTFfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUExX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTFfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMV9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUExX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExX0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BMV9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUExX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTFfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUExX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMV9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMV9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTFfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTFfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMV9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMV9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExX1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTFfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUExX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUEyX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMl9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEyX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTJfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTJfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTJfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTJfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUEyX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTJfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMl9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUEyX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyX0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BMl9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUEyX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTJfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUEyX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMl9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMl9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTJfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTJfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMl9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMl9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTJfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUEyX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUEzX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BM19DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEzX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTNfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTNfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTNfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTNfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTNfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTNfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTNfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19YX01PRElGWSgpCQliZmluX3JlYWQxNihETUEzX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTNfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BM19ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUEzX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEzX0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BM19DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUEzX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTNfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUEzX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BM19DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BM19DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTNfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTNfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEzX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BM19JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BM19JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEzX1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTNfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUEzX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUE0X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BNF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE0X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTRfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTRfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTRfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTRfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTRfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTRfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTRfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE0X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTRfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BNF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUE0X1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE0X0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BNF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUE0X0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTRfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUE0X0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNF9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNF9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTRfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTRfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE0X0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BNF9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BNF9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE0X1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTRfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUE0X1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUE1X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BNV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE1X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTVfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTVfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTVfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTVfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTVfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTVfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTVfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE1X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTVfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BNV9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUE1X1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE1X0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BNV9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUE1X0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTVfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUE1X0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNV9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNV9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTVfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTVfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE1X0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BNV9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BNV9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE1X1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTVfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUE1X1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUE2X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BNl9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE2X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTZfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTZfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTZfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTZfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTZfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTZfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTZfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE2X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTZfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BNl9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUE2X1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE2X0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BNl9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUE2X0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTZfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUE2X0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNl9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNl9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTZfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTZfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE2X0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BNl9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BNl9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE2X1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTZfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUE2X1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUE3X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BN19DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE3X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTdfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTdfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTdfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTdfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTdfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTdfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTdfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE3X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTdfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BN19ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUE3X1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE3X0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BN19DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUE3X0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTdfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUE3X0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BN19DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BN19DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTdfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTdfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE3X0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BN19JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BN19JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE3X1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTdfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUE3X1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUE4X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BOF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE4X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQThfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQThfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQThfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQThfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQThfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQThfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQThfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE4X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQThfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BOF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUE4X1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE4X0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BOF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUE4X0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQThfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUE4X0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOF9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BOF9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQThfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQThfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE4X0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BOF9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BOF9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE4X1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQThfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUE4X1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUE5X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BOV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE5X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTlfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTlfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTlfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTlfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTlfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTlfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTlfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE5X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTlfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BOV9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUE5X1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE5X0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BOV9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUE5X0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTlfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUE5X0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOV9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BOV9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTlfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTlfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE5X0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BOV9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BOV9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE5X1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTlfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUE5X1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX0NPTkZJRygpCQliZmluX3JlYWQxNihETUExMF9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX05FWFRfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BMTBfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTEwX05FWFRfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMTBfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9TVEFSVF9BRERSKHZhbCkJYmZpbl93cml0ZTMyKERNQTEwX1NUQVJUX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTBfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMF9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTEwX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTBfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMTBfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTEwX1hfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUExMF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9ZX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTBfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BMTBfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTEwX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX0NVUlJfQUREUigpCQliZmluX3JlYWQzMihETUExMF9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUExMF9DVVJSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExMF9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTEwX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTEwX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTBfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9JUlFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KERNQTEwX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihETUExMF9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KERNQTEwX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTEwX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX0NPTkZJRygpCQliZmluX3JlYWQxNihETUExMV9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX05FWFRfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BMTFfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTExX05FWFRfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMTFfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9TVEFSVF9BRERSKHZhbCkJYmZpbl93cml0ZTMyKERNQTExX1NUQVJUX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTFfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMV9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTExX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTFfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMTFfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTExX1hfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUExMV9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9ZX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTFfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BMTFfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTExX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX0NVUlJfQUREUigpCQliZmluX3JlYWQzMihETUExMV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUExMV9DVVJSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExMV9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTExX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTExX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTFfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9JUlFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KERNQTExX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihETUExMV9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KERNQTExX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTExX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfQ09ORklHKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDBfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX0QwX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9ORVhUX0RFU0NfUFRSKCkJYmZpbl9yZWFkMzIoTURNQV9EMF9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfTkVYVF9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX0QwX05FWFRfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfU1RBUlRfQUREUigpCQliZmluX3JlYWQzMihNRE1BX0QwX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9TVEFSVF9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfRDBfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDBfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDBfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDBfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDBfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9YX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX0QwX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWF9NT0RJRlkodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMF9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX0QwX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWV9NT0RJRlkodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMF9ZX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DVVJSX0RFU0NfUFRSKCkJYmZpbl9yZWFkMzIoTURNQV9EMF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX0QwX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfRDBfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ1VSUl9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfRDBfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0NVUlJfWF9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfRDBfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDBfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0NVUlJfWV9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfRDBfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDBfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QwX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfUEVSSVBIRVJBTF9NQVAoKQliZmluX3JlYWQxNihNRE1BX0QwX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMF9QRVJJUEhFUkFMX01BUCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0NPTkZJRygpCQliZmluX3JlYWQxNihNRE1BX1MwX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TMF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfTkVYVF9ERVNDX1BUUigpCWJmaW5fcmVhZDMyKE1ETUFfUzBfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9TMF9ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoTURNQV9TMF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfU1RBUlRfQUREUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX1MwX1NUQVJUX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfWF9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX1MwX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX1MwX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfWV9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX1MwX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX1MwX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoTURNQV9TMF9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1hfTU9ESUZZKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzBfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoTURNQV9TMF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1lfTU9ESUZZKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzBfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfQ1VSUl9ERVNDX1BUUigpCWJmaW5fcmVhZDMyKE1ETUFfUzBfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9TMF9DVVJSX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0NVUlJfQUREUigpCQliZmluX3JlYWQzMihNRE1BX1MwX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfQUREUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX1MwX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DVVJSX1hfQ09VTlQoKQliZmluX3JlYWQxNihNRE1BX1MwX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MwX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DVVJSX1lfQ09VTlQoKQliZmluX3JlYWQxNihNRE1BX1MwX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MwX0NVUlJfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9JUlFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzBfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0lSUV9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoTURNQV9TMF9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoTURNQV9TMF9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzBfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9DT05GSUcoKQkJYmZpbl9yZWFkMTYoTURNQV9EMV9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDFfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX05FWFRfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX0QxX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfRDFfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfRDFfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1NUQVJUX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMV9TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9EMV9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMV9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9EMV9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMV9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDFfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9YX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QxX1hfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDFfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9ZX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QxX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NVUlJfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX0QxX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfRDFfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoTURNQV9EMV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DVVJSX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMV9DVVJSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfQ1VSUl9YX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9EMV9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMV9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfQ1VSUl9ZX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9EMV9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMV9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihNRE1BX0QxX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDFfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KE1ETUFfRDFfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QxX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfQ09ORklHKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzFfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX1MxX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9ORVhUX0RFU0NfUFRSKCkJYmZpbl9yZWFkMzIoTURNQV9TMV9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfTkVYVF9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX1MxX05FWFRfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfU1RBUlRfQUREUigpCQliZmluX3JlYWQzMihNRE1BX1MxX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9TVEFSVF9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzFfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzFfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzFfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzFfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzFfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9YX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX1MxX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWF9NT0RJRlkodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMV9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX1MxX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWV9NT0RJRlkodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMV9ZX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9DVVJSX0RFU0NfUFRSKCkJYmZpbl9yZWFkMzIoTURNQV9TMV9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX1MxX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfUzFfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzFfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NVUlJfWF9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfUzFfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzFfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NVUlJfWV9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfUzFfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzFfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoTURNQV9TMV9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MxX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfUEVSSVBIRVJBTF9NQVAoKQliZmluX3JlYWQxNihNRE1BX1MxX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMV9QRVJJUEhFUkFMX01BUCwgdmFsKQorCisKKy8qIFBhcmFsbGVsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICgweEZGQzAxMDAwIC0gMHhGRkMwMTBGRikJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1BQSV9DT05UUk9MKCkJCQliZmluX3JlYWQxNihQUElfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QUElfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoUFBJX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BQSV9TVEFUVVMoKQkJCWJmaW5fcmVhZDE2KFBQSV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfUFBJX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoUFBJX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX2NsZWFyX1BQSV9TVEFUVVMoKQkJCWJmaW5fd3JpdGVfUFBJX1NUQVRVUygweEZGRkYpCisjZGVmaW5lIGJmaW5fcmVhZF9QUElfREVMQVkoKQkJCWJmaW5fcmVhZDE2KFBQSV9ERUxBWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QUElfREVMQVkodmFsKQkJYmZpbl93cml0ZTE2KFBQSV9ERUxBWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUFBJX0NPVU5UKCkJCQliZmluX3JlYWQxNihQUElfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUFBJX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihQUElfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BQSV9GUkFNRSgpCQkJYmZpbl9yZWFkMTYoUFBJX0ZSQU1FKQorI2RlZmluZSBiZmluX3dyaXRlX1BQSV9GUkFNRSh2YWwpCQliZmluX3dyaXRlMTYoUFBJX0ZSQU1FLCB2YWwpCisKKworLyogVHdvLVdpcmUgSW50ZXJmYWNlCQkoMHhGRkMwMTQwMCAtIDB4RkZDMDE0RkYpCQkJCQkJCQkqLworCisvKiBHZW5lcmFsIFB1cnBvc2UgSS9PIFBvcnQgRyAoMHhGRkMwMTUwMCAtIDB4RkZDMDE1RkYpCQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJTygpCQkJYmZpbl9yZWFkMTYoUE9SVEdJTykKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPKHZhbCkJCQliZmluX3dyaXRlMTYoUE9SVEdJTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19DTEVBUigpCQliZmluX3JlYWQxNihQT1JUR0lPX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fQ0xFQVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHSU9fQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fU0VUKCkJCQliZmluX3JlYWQxNihQT1JUR0lPX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX1NFVCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdJT19TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fVE9HR0xFKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fVE9HR0xFKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fVE9HR0xFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX1RPR0dMRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19NQVNLQSgpCQliZmluX3JlYWQxNihQT1JUR0lPX01BU0tBKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fTUFTS0EodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHSU9fTUFTS0EsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fTUFTS0FfQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19NQVNLQV9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX01BU0tBX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRHSU9fTUFTS0FfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fTUFTS0FfU0VUKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fTUFTS0FfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fTUFTS0FfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRHSU9fTUFTS0FfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX01BU0tBX1RPR0dMRSgpCWJmaW5fcmVhZDE2KFBPUlRHSU9fTUFTS0FfVE9HR0xFKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fTUFTS0FfVE9HR0xFKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRHSU9fTUFTS0FfVE9HR0xFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX01BU0tCKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fTUFTS0IpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19NQVNLQl9DTEVBUigpCQliZmluX3JlYWQxNihQT1JUR0lPX01BU0tCX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fTUFTS0JfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQl9DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19NQVNLQl9TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19NQVNLQl9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQl9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQl9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fTUFTS0JfVE9HR0xFKCkJYmZpbl9yZWFkMTYoUE9SVEdJT19NQVNLQl9UT0dHTEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQl9UT0dHTEUodmFsKQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQl9UT0dHTEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fRElSKCkJCQliZmluX3JlYWQxNihQT1JUR0lPX0RJUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX0RJUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdJT19ESVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fUE9MQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19QT0xBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX1BPTEFSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX1BPTEFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX0VER0UoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19FREdFKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fRURHRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdJT19FREdFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX0JPVEgoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19CT1RIKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fQk9USCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdJT19CT1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX0lORU4oKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19JTkVOKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fSU5FTih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdJT19JTkVOLCB2YWwpCisKKworLyogR2VuZXJhbCBQdXJwb3NlIEkvTyBQb3J0IEggKDB4RkZDMDE3MDAgLSAweEZGQzAxN0ZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU8oKQkJCWJmaW5fcmVhZDE2KFBPUlRISU8pCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJTyh2YWwpCQkJYmZpbl93cml0ZTE2KFBPUlRISU8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX0NMRUFSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSElPX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX1NFVCgpCQkJYmZpbl9yZWFkMTYoUE9SVEhJT19TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19TRVQodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRISU9fU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX1RPR0dMRSgpCQliZmluX3JlYWQxNihQT1JUSElPX1RPR0dMRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX1RPR0dMRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19UT0dHTEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fTUFTS0EoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19NQVNLQSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX01BU0tBKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSElPX01BU0tBLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX01BU0tBX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fTUFTS0FfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19NQVNLQV9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JUSElPX01BU0tBX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX01BU0tBX1NFVCgpCQliZmluX3JlYWQxNihQT1JUSElPX01BU0tBX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX01BU0tBX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JUSElPX01BU0tBX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19NQVNLQV9UT0dHTEUoKQliZmluX3JlYWQxNihQT1JUSElPX01BU0tBX1RPR0dMRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX01BU0tBX1RPR0dMRSh2YWwpCWJmaW5fd3JpdGUxNihQT1JUSElPX01BU0tBX1RPR0dMRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19NQVNLQigpCQliZmluX3JlYWQxNihQT1JUSElPX01BU0tCKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0IodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fTUFTS0JfQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19NQVNLQl9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX01BU0tCX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0JfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fTUFTS0JfU0VUKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fTUFTS0JfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0JfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0JfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX01BU0tCX1RPR0dMRSgpCWJmaW5fcmVhZDE2KFBPUlRISU9fTUFTS0JfVE9HR0xFKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0JfVE9HR0xFKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0JfVE9HR0xFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX0RJUigpCQkJYmZpbl9yZWFkMTYoUE9SVEhJT19ESVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19ESVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRISU9fRElSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX1BPTEFSKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fUE9MQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19QT0xBUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19QT0xBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19FREdFKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fRURHRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX0VER0UodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRISU9fRURHRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19CT1RIKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fQk9USCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX0JPVEgodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRISU9fQk9USCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19JTkVOKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fSU5FTikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX0lORU4odmFsKQkJYmZpbl93cml0ZTE2KFBPUlRISU9fSU5FTiwgdmFsKQorCisKKy8qIFVBUlQxIENvbnRyb2xsZXIJCSgweEZGQzAyMDAwIC0gMHhGRkMwMjBGRikJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9USFIoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX1RIUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9USFIodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX1RIUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfUkJSKCkJCQliZmluX3JlYWQxNihVQVJUMV9SQlIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfUkJSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9SQlIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX0RMTCgpCQkJYmZpbl9yZWFkMTYoVUFSVDFfRExMKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX0RMTCh2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfRExMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9JRVIoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX0lFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9JRVIodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX0lFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfRExIKCkJCQliZmluX3JlYWQxNihVQVJUMV9ETEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfRExIKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9ETEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX0lJUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfSUlSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX0lJUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfSUlSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9MQ1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX0xDUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9MQ1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX0xDUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfTUNSKCkJCQliZmluX3JlYWQxNihVQVJUMV9NQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfTUNSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9NQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX0xTUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfTFNSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX0xTUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfTFNSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9NU1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX01TUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9NU1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX01TUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfU0NSKCkJCQliZmluX3JlYWQxNihVQVJUMV9TQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfU0NSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9TQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX0dDVEwoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX0dDVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfR0NUTCh2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfR0NUTCwgdmFsKQorCisvKiBPbWl0IENBTiByZWdpc3RlciBzZXRzIGZyb20gdGhlIGNkZWZCRjUzNC5oIChDQU4gaXMgbm90IGluIHRoZSBBRFNQLUJGNTJ4IHByb2Nlc3NvcikgKi8KKworLyogUGluIENvbnRyb2wgUmVnaXN0ZXJzCSgweEZGQzAzMjAwIC0gMHhGRkMwMzJGRikJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURl9GRVIoKQkJCWJmaW5fcmVhZDE2KFBPUlRGX0ZFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURl9GRVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGX0ZFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdfRkVSKCkJCQliZmluX3JlYWQxNihQT1JUR19GRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdfRkVSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR19GRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRIX0ZFUigpCQkJYmZpbl9yZWFkMTYoUE9SVEhfRkVSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRIX0ZFUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhfRkVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUX01VWCgpCQkJYmZpbl9yZWFkMTYoUE9SVF9NVVgpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVF9NVVgodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRfTVVYLCB2YWwpCisKKworLyogSGFuZHNoYWtlIE1ETUEgUmVnaXN0ZXJzCSgweEZGQzAzMzAwIC0gMHhGRkMwMzNGRikJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfQ09OVFJPTCgpCQliZmluX3JlYWQxNihITURNQTBfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9FQ0lOSVQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0VDSU5JVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfRUNJTklUKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfRUNJTklULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfQkNJTklUKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9CQ0lOSVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0JDSU5JVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0JDSU5JVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0VDVVJHRU5UKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9FQ1VSR0VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfRUNVUkdFTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ1VSR0VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0VDT1ZFUkZMT1coKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0VDT1ZFUkZMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0VDT1ZFUkZMT1codmFsKQliZmluX3dyaXRlMTYoSE1ETUEwX0VDT1ZFUkZMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9FQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0VDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfRUNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfRUNPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfQkNPVU5UKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9CQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0JDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0JDT1VOVCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfQ09OVFJPTCgpCQliZmluX3JlYWQxNihITURNQTFfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9FQ0lOSVQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0VDSU5JVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfRUNJTklUKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfRUNJTklULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfQkNJTklUKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9CQ0lOSVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0JDSU5JVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0JDSU5JVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0VDVVJHRU5UKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9FQ1VSR0VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfRUNVUkdFTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ1VSR0VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0VDT1ZFUkZMT1coKQkJYmZpbl9yZWFkMTYoSE1ETUExX0VDT1ZFUkZMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0VDT1ZFUkZMT1codmFsKQliZmluX3dyaXRlMTYoSE1ETUExX0VDT1ZFUkZMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9FQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0VDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfRUNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfRUNPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfQkNPVU5UKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9CQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0JDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0JDT1VOVCwgdmFsKQorCisvKiA9PT09IGVuZCBmcm9tIGNkZWZCRjUzNC5oID09PT0gKi8KKworLyogR1BJTyBQSU4gbXV4ICgweEZGQzAzMjEwIC0gT3hGRkMwMzI4OCkgKi8KKworI2RlZmluZSBiZmluX3JlYWRfUE9SVEZfTVVYKCkJCQliZmluX3JlYWQxNihQT1JURl9NVVgpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZfTVVYKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURl9NVVgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHX01VWCgpCQkJYmZpbl9yZWFkMTYoUE9SVEdfTVVYKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHX01VWCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdfTVVYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSF9NVVgoKQkJCWJmaW5fcmVhZDE2KFBPUlRIX01VWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSF9NVVgodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRIX01VWCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURl9EUklWRSgpCQkJYmZpbl9yZWFkMTYoUE9SVEZfRFJJVkUpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZfRFJJVkUodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGX0RSSVZFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR19EUklWRSgpCQkJYmZpbl9yZWFkMTYoUE9SVEdfRFJJVkUpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdfRFJJVkUodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHX0RSSVZFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSF9EUklWRSgpCQkJYmZpbl9yZWFkMTYoUE9SVEhfRFJJVkUpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhfRFJJVkUodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRIX0RSSVZFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURl9TTEVXKCkJCQliZmluX3JlYWQxNihQT1JURl9TTEVXKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGX1NMRVcodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGX1NMRVcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHX1NMRVcoKQkJCWJmaW5fcmVhZDE2KFBPUlRHX1NMRVcpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdfU0xFVyh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdfU0xFVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhfU0xFVygpCQkJYmZpbl9yZWFkMTYoUE9SVEhfU0xFVykKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSF9TTEVXKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSF9TTEVXLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURl9IWVNURVJJU0lTKCkJCWJmaW5fcmVhZDE2KFBPUlRGX0hZU1RFUklTSVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZfSFlTVEVSSVNJUyh2YWwpCWJmaW5fd3JpdGUxNihQT1JURl9IWVNURVJJU0lTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR19IWVNURVJJU0lTKCkJCWJmaW5fcmVhZDE2KFBPUlRHX0hZU1RFUklTSVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdfSFlTVEVSSVNJUyh2YWwpCWJmaW5fd3JpdGUxNihQT1JUR19IWVNURVJJU0lTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSF9IWVNURVJJU0lTKCkJCWJmaW5fcmVhZDE2KFBPUlRIX0hZU1RFUklTSVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhfSFlTVEVSSVNJUyh2YWwpCWJmaW5fd3JpdGUxNihQT1JUSF9IWVNURVJJU0lTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NSVNDUE9SVF9EUklWRSgpCQliZmluX3JlYWQxNihNSVNDUE9SVF9EUklWRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NSVNDUE9SVF9EUklWRSh2YWwpCQliZmluX3dyaXRlMTYoTUlTQ1BPUlRfRFJJVkUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01JU0NQT1JUX1NMRVcoKQkJYmZpbl9yZWFkMTYoTUlTQ1BPUlRfU0xFVykKKyNkZWZpbmUgYmZpbl93cml0ZV9NSVNDUE9SVF9TTEVXKHZhbCkJCWJmaW5fd3JpdGUxNihNSVNDUE9SVF9TTEVXLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NSVNDUE9SVF9IWVNURVJJU0lTKCkJCWJmaW5fcmVhZDE2KE1JU0NQT1JUX0hZU1RFUklTSVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfTUlTQ1BPUlRfSFlTVEVSSVNJUyh2YWwpCWJmaW5fd3JpdGUxNihNSVNDUE9SVF9IWVNURVJJU0lTLCB2YWwpCisKKy8qIEhPU1QgUG9ydCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfSE9TVF9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KEhPU1RfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9IT1NUX0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KEhPU1RfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE9TVF9TVEFUVVMoKQkJCWJmaW5fcmVhZDE2KEhPU1RfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0hPU1RfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihIT1NUX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE9TVF9USU1FT1VUKCkJCWJmaW5fcmVhZDE2KEhPU1RfVElNRU9VVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9IT1NUX1RJTUVPVVQodmFsKQkJYmZpbl93cml0ZTE2KEhPU1RfVElNRU9VVCwgdmFsKQorCisvKiBDb3VudGVyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9DTlRfQ09ORklHKCkJCQliZmluX3JlYWQxNihDTlRfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0NOVF9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KENOVF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NOVF9JTUFTSygpCQkJYmZpbl9yZWFkMTYoQ05UX0lNQVNLKQorI2RlZmluZSBiZmluX3dyaXRlX0NOVF9JTUFTSyh2YWwpCQliZmluX3dyaXRlMTYoQ05UX0lNQVNLLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DTlRfU1RBVFVTKCkJCQliZmluX3JlYWQxNihDTlRfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0NOVF9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KENOVF9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NOVF9DT01NQU5EKCkJCQliZmluX3JlYWQxNihDTlRfQ09NTUFORCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DTlRfQ09NTUFORCh2YWwpCQliZmluX3dyaXRlMTYoQ05UX0NPTU1BTkQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NOVF9ERUJPVU5DRSgpCQliZmluX3JlYWQxNihDTlRfREVCT1VOQ0UpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ05UX0RFQk9VTkNFKHZhbCkJCWJmaW5fd3JpdGUxNihDTlRfREVCT1VOQ0UsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NOVF9DT1VOVEVSKCkJCQliZmluX3JlYWQzMihDTlRfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9DTlRfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoQ05UX0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NOVF9NQVgoKQkJCWJmaW5fcmVhZDMyKENOVF9NQVgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ05UX01BWCh2YWwpCQkJYmZpbl93cml0ZTMyKENOVF9NQVgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NOVF9NSU4oKQkJCWJmaW5fcmVhZDMyKENOVF9NSU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfQ05UX01JTih2YWwpCQkJYmZpbl93cml0ZTMyKENOVF9NSU4sIHZhbCkKKworLyogU2VjdXJpdHkgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1NFQ1VSRV9TWVNTV1QoKQkJYmZpbl9yZWFkMzIoU0VDVVJFX1NZU1NXVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TRUNVUkVfU1lTU1dUKHZhbCkJCWJmaW5fd3JpdGUzMihTRUNVUkVfU1lTU1dULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TRUNVUkVfQ09OVFJPTCgpCQliZmluX3JlYWQxNihTRUNVUkVfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TRUNVUkVfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoU0VDVVJFX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NFQ1VSRV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoU0VDVVJFX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9TRUNVUkVfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihTRUNVUkVfU1RBVFVTLCB2YWwpCisKKy8qIE5GQyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTkZDX0NUTCgpCQkJYmZpbl9yZWFkMTYoTkZDX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ORkNfQ1RMKHZhbCkJCQliZmluX3dyaXRlMTYoTkZDX0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX1NUQVQoKQkJCWJmaW5fcmVhZDE2KE5GQ19TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0lSUVNUQVQoKQkJCWJmaW5fcmVhZDE2KE5GQ19JUlFTVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19JUlFTVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfSVJRU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0lSUU1BU0soKQkJCWJmaW5fcmVhZDE2KE5GQ19JUlFNQVNLKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19JUlFNQVNLKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfSVJRTUFTSywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0VDQzAoKQkJCWJmaW5fcmVhZDE2KE5GQ19FQ0MwKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19FQ0MwKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfRUNDMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0VDQzEoKQkJCWJmaW5fcmVhZDE2KE5GQ19FQ0MxKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19FQ0MxKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfRUNDMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0VDQzIoKQkJCWJmaW5fcmVhZDE2KE5GQ19FQ0MyKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19FQ0MyKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfRUNDMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0VDQzMoKQkJCWJmaW5fcmVhZDE2KE5GQ19FQ0MzKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19FQ0MzKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfRUNDMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0NPVU5UKCkJCQliZmluX3JlYWQxNihORkNfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX05GQ19SU1QoKQkJCWJmaW5fcmVhZDE2KE5GQ19SU1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX1JTVCh2YWwpCQkJYmZpbl93cml0ZTE2KE5GQ19SU1QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX05GQ19QR0NUTCgpCQkJYmZpbl9yZWFkMTYoTkZDX1BHQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19QR0NUTCh2YWwpCQliZmluX3dyaXRlMTYoTkZDX1BHQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfUkVBRCgpCQkJYmZpbl9yZWFkMTYoTkZDX1JFQUQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX1JFQUQodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19SRUFELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfQUREUigpCQkJYmZpbl9yZWFkMTYoTkZDX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0FERFIodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfQ01EKCkJCQliZmluX3JlYWQxNihORkNfQ01EKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19DTUQodmFsKQkJCWJmaW5fd3JpdGUxNihORkNfQ01ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfREFUQV9XUigpCQkJYmZpbl9yZWFkMTYoTkZDX0RBVEFfV1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0RBVEFfV1IodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19EQVRBX1dSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfREFUQV9SRCgpCQkJYmZpbl9yZWFkMTYoTkZDX0RBVEFfUkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0RBVEFfUkQodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19EQVRBX1JELCB2YWwpCiAKICNlbmRpZiAvKiBfQ0RFRl9CRjUyMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyNS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjUuaAppbmRleCBkN2UyNzUxLi5kOTBhODViIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyNS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI1LmgKQEAgLTEsMTUgKzEsMTIgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MjVfSAogI2RlZmluZSBfQ0RFRl9CRjUyNV9ICiAKLS8qIGluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlICJkZWZCRjUyNS5oIgotCiAvKiBCRjUyNSBpcyBCRjUyMiArIFVTQiAqLwogI2luY2x1ZGUgImNkZWZCRjUyMi5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyNy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjcuaAppbmRleCBjN2JhNTQ0Li5lYjIyZjU4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyNy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI3LmgKQEAgLTEsMTUgKzEsMTIgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MjdfSAogI2RlZmluZSBfQ0RFRl9CRjUyN19ICiAKLS8qIGluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlICJkZWZCRjUyNy5oIgotCiAvKiBCRjUyNyBpcyBCRjUyNSArIEVNQUMgKi8KICNpbmNsdWRlICJjZGVmQkY1MjUuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MnhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MnhfYmFzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDQ4YjUyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTJ4X2Jhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgotICovCi0KLSNpZm5kZWYgX0NERUZfQkY1MlhfSAotI2RlZmluZSBfQ0RFRl9CRjUyWF9ICi0KLSNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KLQotI2luY2x1ZGUgImRlZkJGNTJ4X2Jhc2UuaCIKLQotLyogSW5jbHVkZSBjb3JlIHNwZWNpZmljIHJlZ2lzdGVyIHBvaW50ZXIgZGVmaW5pdGlvbnMgCQkJCQkJCQkqLwotI2luY2x1ZGUgPGFzbS9jZGVmX0xQQmxhY2tmaW4uaD4KLQotLyogPT09PSBiZWdpbiBmcm9tIGNkZWZCRjUzNC5oID09PT0gKi8KLQotLyogQ2xvY2sgYW5kIFN5c3RlbSBDb250cm9sCSgweEZGQzAwMDAwIC0gMHhGRkMwMDBGRikJCQkJCQkJCSovCi0jZGVmaW5lIGJmaW5fcmVhZF9QTExfQ1RMKCkJCQliZmluX3JlYWQxNihQTExfQ1RMKQotI2RlZmluZSBiZmluX3JlYWRfUExMX0RJVigpCQkJYmZpbl9yZWFkMTYoUExMX0RJVikKLSNkZWZpbmUgYmZpbl93cml0ZV9QTExfRElWKHZhbCkJCQliZmluX3dyaXRlMTYoUExMX0RJViwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVlJfQ1RMKCkJCQliZmluX3JlYWQxNihWUl9DVEwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QTExfU1RBVCgpCQkJYmZpbl9yZWFkMTYoUExMX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUExMX1NUQVQodmFsKQkJYmZpbl93cml0ZTE2KFBMTF9TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QTExfTE9DS0NOVCgpCQkJYmZpbl9yZWFkMTYoUExMX0xPQ0tDTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUExMX0xPQ0tDTlQodmFsKQkJYmZpbl93cml0ZTE2KFBMTF9MT0NLQ05ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DSElQSUQoKQkJCWJmaW5fcmVhZDMyKENISVBJRCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DSElQSUQodmFsKQkJCWJmaW5fd3JpdGUzMihDSElQSUQsIHZhbCkKLQotCi0vKiBTeXN0ZW0gSW50ZXJydXB0IENvbnRyb2xsZXIgKDB4RkZDMDAxMDAgLSAweEZGQzAwMUZGKQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfU1dSU1QoKQkJCWJmaW5fcmVhZDE2KFNXUlNUKQotI2RlZmluZSBiZmluX3dyaXRlX1NXUlNUKHZhbCkJCQliZmluX3dyaXRlMTYoU1dSU1QsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NZU0NSKCkJCQliZmluX3JlYWQxNihTWVNDUikKLSNkZWZpbmUgYmZpbl93cml0ZV9TWVNDUih2YWwpCQkJYmZpbl93cml0ZTE2KFNZU0NSLCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19SVkVDVCgpCQkJYmZpbl9yZWFkMzIoU0lDX1JWRUNUKQotI2RlZmluZSBiZmluX3dyaXRlX1NJQ19SVkVDVCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX1JWRUNULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TSUNfSU1BU0swKCkJCQliZmluX3JlYWQzMihTSUNfSU1BU0swKQotI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JTUFTSzAodmFsKQkJYmZpbl93cml0ZTMyKFNJQ19JTUFTSzAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JTUFTSyh4KQkJCWJmaW5fcmVhZDMyKFNJQ19JTUFTSzAgKyAoeCA8PCA2KSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSU1BU0soeCwgdmFsKQkJYmZpbl93cml0ZTMyKChTSUNfSU1BU0swICsgKHggPDwgNikpLCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIwKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIxKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIyKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMih2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIzKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMykKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMyh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjMsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfU0lDX0lTUjAoKQkJCWJmaW5fcmVhZDMyKFNJQ19JU1IwKQotI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JU1IwKHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSVNSMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0lDX0lTUih4KQkJCWJmaW5fcmVhZDMyKFNJQ19JU1IwICsgKHggPDwgNikpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lTUih4LCB2YWwpCQliZmluX3dyaXRlMzIoKFNJQ19JU1IwICsgKHggPDwgNikpLCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JV1IwKCkJCQliZmluX3JlYWQzMihTSUNfSVdSMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSVdSMCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lXUjAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JV1IoeCkJCQliZmluX3JlYWQzMihTSUNfSVdSMCArICh4IDw8IDYpKQotI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JV1IoeCwgdmFsKQkJYmZpbl93cml0ZTMyKChTSUNfSVdSMCArICh4IDw8IDYpKSwgdmFsKQotCi0vKiBTSUMgQWRkaXRpb25zIHRvIEFEU1AtQkY1MnggKDB4RkZDMDAxNEMgLSAweEZGQzAwMTYyKSAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9TSUNfSU1BU0sxKCkJCQliZmluX3JlYWQzMihTSUNfSU1BU0sxKQotI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JTUFTSzEodmFsKQkJYmZpbl93cml0ZTMyKFNJQ19JTUFTSzEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVI0KCkJCQliZmluX3JlYWQzMihTSUNfSUFSNCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSNCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVI1KCkJCQliZmluX3JlYWQzMihTSUNfSUFSNSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSNSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVI2KCkJCQliZmluX3JlYWQzMihTSUNfSUFSNikKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSNih2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVI3KCkJCQliZmluX3JlYWQzMihTSUNfSUFSNykKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSNyh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjcsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JU1IxKCkJCQliZmluX3JlYWQzMihTSUNfSVNSMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSVNSMSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lTUjEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JV1IxKCkJCQliZmluX3JlYWQzMihTSUNfSVdSMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSVdSMSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lXUjEsIHZhbCkKLQotLyogV2F0Y2hkb2cgVGltZXIJCSgweEZGQzAwMjAwIC0gMHhGRkMwMDJGRikJCQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfV0RPR19DVEwoKQkJCWJmaW5fcmVhZDE2KFdET0dfQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1dET0dfQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihXRE9HX0NUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfV0RPR19DTlQoKQkJCWJmaW5fcmVhZDMyKFdET0dfQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX1dET0dfQ05UKHZhbCkJCWJmaW5fd3JpdGUzMihXRE9HX0NOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfV0RPR19TVEFUKCkJCQliZmluX3JlYWQzMihXRE9HX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfV0RPR19TVEFUKHZhbCkJCWJmaW5fd3JpdGUzMihXRE9HX1NUQVQsIHZhbCkKLQotCi0vKiBSZWFsIFRpbWUgQ2xvY2sJCSgweEZGQzAwMzAwIC0gMHhGRkMwMDNGRikJCQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfUlRDX1NUQVQoKQkJCWJmaW5fcmVhZDMyKFJUQ19TVEFUKQotI2RlZmluZSBiZmluX3dyaXRlX1JUQ19TVEFUKHZhbCkJCWJmaW5fd3JpdGUzMihSVENfU1RBVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlRDX0lDVEwoKQkJCWJmaW5fcmVhZDE2KFJUQ19JQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1JUQ19JQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihSVENfSUNUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlRDX0lTVEFUKCkJCQliZmluX3JlYWQxNihSVENfSVNUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlRDX0lTVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihSVENfSVNUQVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JUQ19TV0NOVCgpCQkJYmZpbl9yZWFkMTYoUlRDX1NXQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX1JUQ19TV0NOVCh2YWwpCQliZmluX3dyaXRlMTYoUlRDX1NXQ05ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SVENfQUxBUk0oKQkJCWJmaW5fcmVhZDMyKFJUQ19BTEFSTSkKLSNkZWZpbmUgYmZpbl93cml0ZV9SVENfQUxBUk0odmFsKQkJYmZpbl93cml0ZTMyKFJUQ19BTEFSTSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlRDX0ZBU1QoKQkJCWJmaW5fcmVhZDE2KFJUQ19GQVNUKQotI2RlZmluZSBiZmluX3dyaXRlX1JUQ19GQVNUKHZhbCkJCWJmaW5fd3JpdGUxNihSVENfRkFTVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlRDX1BSRU4oKQkJCWJmaW5fcmVhZDE2KFJUQ19QUkVOKQotI2RlZmluZSBiZmluX3dyaXRlX1JUQ19QUkVOKHZhbCkJCWJmaW5fd3JpdGUxNihSVENfUFJFTiwgdmFsKQotCi0KLS8qIFVBUlQwIENvbnRyb2xsZXIJCSgweEZGQzAwNDAwIC0gMHhGRkMwMDRGRikJCQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfVEhSKCkJCQliZmluX3JlYWQxNihVQVJUMF9USFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfVEhSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9USFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX1JCUigpCQkJYmZpbl9yZWFkMTYoVUFSVDBfUkJSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX1JCUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfUkJSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9ETEwoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0RMTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9ETEwodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0RMTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfSUVSKCkJCQliZmluX3JlYWQxNihVQVJUMF9JRVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfSUVSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9JRVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX0RMSCgpCQkJYmZpbl9yZWFkMTYoVUFSVDBfRExIKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX0RMSCh2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfRExILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9JSVIoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0lJUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9JSVIodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0lJUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfTENSKCkJCQliZmluX3JlYWQxNihVQVJUMF9MQ1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfTENSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9MQ1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX01DUigpCQkJYmZpbl9yZWFkMTYoVUFSVDBfTUNSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX01DUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfTUNSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9MU1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0xTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9MU1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0xTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfTVNSKCkJCQliZmluX3JlYWQxNihVQVJUMF9NU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfTVNSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9NU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX1NDUigpCQkJYmZpbl9yZWFkMTYoVUFSVDBfU0NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX1NDUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfU0NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9HQ1RMKCkJCQliZmluX3JlYWQxNihVQVJUMF9HQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX0dDVEwodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0dDVEwsIHZhbCkKLQotCi0vKiBTUEkgQ29udHJvbGxlcgkJKDB4RkZDMDA1MDAgLSAweEZGQzAwNUZGKQkJCQkJCQkJCSovCi0jZGVmaW5lIGJmaW5fcmVhZF9TUElfQ1RMKCkJCQliZmluX3JlYWQxNihTUElfQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1NQSV9DVEwodmFsKQkJCWJmaW5fd3JpdGUxNihTUElfQ1RMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUElfRkxHKCkJCQliZmluX3JlYWQxNihTUElfRkxHKQotI2RlZmluZSBiZmluX3dyaXRlX1NQSV9GTEcodmFsKQkJCWJmaW5fd3JpdGUxNihTUElfRkxHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUElfU1RBVCgpCQkJYmZpbl9yZWFkMTYoU1BJX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BJX1NUQVQodmFsKQkJYmZpbl93cml0ZTE2KFNQSV9TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUElfVERCUigpCQkJYmZpbl9yZWFkMTYoU1BJX1REQlIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BJX1REQlIodmFsKQkJYmZpbl93cml0ZTE2KFNQSV9UREJSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUElfUkRCUigpCQkJYmZpbl9yZWFkMTYoU1BJX1JEQlIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BJX1JEQlIodmFsKQkJYmZpbl93cml0ZTE2KFNQSV9SREJSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUElfQkFVRCgpCQkJYmZpbl9yZWFkMTYoU1BJX0JBVUQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BJX0JBVUQodmFsKQkJYmZpbl93cml0ZTE2KFNQSV9CQVVELCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUElfU0hBRE9XKCkJCQliZmluX3JlYWQxNihTUElfU0hBRE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1NQSV9TSEFET1codmFsKQkJYmZpbl93cml0ZTE2KFNQSV9TSEFET1csIHZhbCkKLQotCi0vKiBUSU1FUjAtNyBSZWdpc3RlcnMJCSgweEZGQzAwNjAwIC0gMHhGRkMwMDZGRikJCQkJCQkJCSovCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjBfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSMF9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIwX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIwX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIwX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIwX0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIwX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMF9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjBfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSMF9QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIwX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIwX1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIwX1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSMF9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjBfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMF9XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjFfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSMV9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIxX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIxX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIxX0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMV9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjFfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSMV9QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIxX1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIxX1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSMV9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjFfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMV9XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjJfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSMl9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIyX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIyX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIyX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIyX0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIyX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMl9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjJfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSMl9QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIyX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIyX1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIyX1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSMl9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjJfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMl9XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjNfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSM19DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIzX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIzX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIzX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIzX0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIzX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSM19DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjNfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSM19QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIzX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIzX1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIzX1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSM19XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjNfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSM19XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjRfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSNF9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI0X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI0X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI0X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI0X0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI0X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNF9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjRfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSNF9QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI0X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI0X1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI0X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSNF9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjRfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNF9XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjVfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSNV9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI1X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI1X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI1X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI1X0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI1X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNV9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjVfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSNV9QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI1X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI1X1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI1X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSNV9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjVfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNV9XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjZfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSNl9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI2X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI2X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI2X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI2X0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI2X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNl9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjZfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSNl9QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI2X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI2X1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI2X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSNl9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjZfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNl9XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjdfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSN19DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI3X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI3X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI3X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI3X0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI3X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSN19DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjdfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSN19QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI3X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI3X1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI3X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSN19XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjdfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSN19XSURUSCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9FTkFCTEUoKQkJYmZpbl9yZWFkMTYoVElNRVJfRU5BQkxFKQotI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX0VOQUJMRSh2YWwpCQliZmluX3dyaXRlMTYoVElNRVJfRU5BQkxFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9ESVNBQkxFKCkJCWJmaW5fcmVhZDE2KFRJTUVSX0RJU0FCTEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfRElTQUJMRSh2YWwpCQliZmluX3dyaXRlMTYoVElNRVJfRElTQUJMRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVJfU1RBVFVTKCkJCWJmaW5fcmVhZDMyKFRJTUVSX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9TVEFUVVModmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSX1NUQVRVUywgdmFsKQotCi0KLS8qIEdlbmVyYWwgUHVycG9zZSBJL08gUG9ydCBGICgweEZGQzAwNzAwIC0gMHhGRkMwMDdGRikJCQkJCQkJCSovCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPKCkJCQliZmluX3JlYWQxNihQT1JURklPKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU8odmFsKQkJCWJmaW5fd3JpdGUxNihQT1JURklPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fQ0xFQVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19DTEVBUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZJT19DTEVBUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19TRVQoKQkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fU0VUKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fU0VUKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX1NFVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19UT0dHTEUoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19UT0dHTEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19UT0dHTEUodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fVE9HR0xFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tBKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fTUFTS0EpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19NQVNLQSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZJT19NQVNLQSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19NQVNLQV9DTEVBUigpCQliZmluX3JlYWQxNihQT1JURklPX01BU0tBX0NMRUFSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fTUFTS0FfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEZJT19NQVNLQV9DTEVBUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19NQVNLQV9TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19NQVNLQV9TRVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19NQVNLQV9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEZJT19NQVNLQV9TRVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fTUFTS0FfVE9HR0xFKCkJYmZpbl9yZWFkMTYoUE9SVEZJT19NQVNLQV9UT0dHTEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19NQVNLQV9UT0dHTEUodmFsKQliZmluX3dyaXRlMTYoUE9SVEZJT19NQVNLQV9UT0dHTEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fTUFTS0IoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19NQVNLQikKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tCKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tCLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tCX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fTUFTS0JfQ0xFQVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19NQVNLQl9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tCX0NMRUFSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tCX1NFVCgpCQliZmluX3JlYWQxNihQT1JURklPX01BU0tCX1NFVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tCX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tCX1NFVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19NQVNLQl9UT0dHTEUoKQliZmluX3JlYWQxNihQT1JURklPX01BU0tCX1RPR0dMRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tCX1RPR0dMRSh2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tCX1RPR0dMRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19ESVIoKQkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fRElSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fRElSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX0RJUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19QT0xBUigpCQliZmluX3JlYWQxNihQT1JURklPX1BPTEFSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fUE9MQVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fUE9MQVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fRURHRSgpCQliZmluX3JlYWQxNihQT1JURklPX0VER0UpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19FREdFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX0VER0UsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fQk9USCgpCQliZmluX3JlYWQxNihQT1JURklPX0JPVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19CT1RIKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX0JPVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fSU5FTigpCQliZmluX3JlYWQxNihQT1JURklPX0lORU4pCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19JTkVOKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX0lORU4sIHZhbCkKLQotCi0vKiBTUE9SVDAgQ29udHJvbGxlcgkJKDB4RkZDMDA4MDAgLSAweEZGQzAwOEZGKQkJCQkJCQkJKi8KLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ1IxKCkJCQliZmluX3JlYWQxNihTUE9SVDBfVENSMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVENSMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1RDUjEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ1IyKCkJCQliZmluX3JlYWQxNihTUE9SVDBfVENSMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVENSMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1RDUjIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ0xLRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9UQ0xLRElWKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UQ0xLRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfVENMS0RJViwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RGU0RJVigpCQliZmluX3JlYWQxNihTUE9SVDBfVEZTRElWKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9URlNESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9URlNESVYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UWCgpCQkJYmZpbl9yZWFkMzIoU1BPUlQwX1RYKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UWCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX1RYLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUlgoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMF9SWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUlgodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9SWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RYMzIoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMF9UWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVFgzMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX1RYLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUlgzMigpCQkJYmZpbl9yZWFkMzIoU1BPUlQwX1JYKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9SWDMyKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDBfUlgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UWDE2KCkJCQliZmluX3JlYWQxNihTUE9SVDBfVFgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RYMTYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9UWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1JYMTYoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9SWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUlgxNih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1JYLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkNSMSgpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JDUjEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JDUjEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9SQ1IxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkNSMigpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JDUjIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JDUjIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9SQ1IyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkNMS0RJVigpCQliZmluX3JlYWQxNihTUE9SVDBfUkNMS0RJVikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUkNMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1JDTEtESVYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9SRlNESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JGU0RJVikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUkZTRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfUkZTRElWLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfU1RBVCgpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1NUQVQodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfQ0hOTCgpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX0NITkwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX0NITkwodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9DSE5MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTUNNQzEoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX01DTUMxKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NQ01DMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX01DTUMxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTUNNQzIoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX01DTUMyKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NQ01DMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX01DTUMyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzAoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MwKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzEoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MxKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMSh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzIoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MyKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzMoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MzKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMyh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzAoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MwKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzEoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MxKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMSh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzIoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MyKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzMoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MzKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMyh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MzLCB2YWwpCi0KLQotLyogU1BPUlQxIENvbnRyb2xsZXIJCSgweEZGQzAwOTAwIC0gMHhGRkMwMDlGRikJCQkJCQkJCSovCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVENSMSgpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RDUjEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1RDUjEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9UQ1IxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVENSMigpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RDUjIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1RDUjIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9UQ1IyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVENMS0RJVigpCQliZmluX3JlYWQxNihTUE9SVDFfVENMS0RJVikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVENMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1RDTEtESVYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9URlNESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RGU0RJVikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVEZTRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfVEZTRElWLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVFgoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMV9UWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVFgodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9UWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JYKCkJCQliZmluX3JlYWQzMihTUE9SVDFfUlgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JYKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDFfUlgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9UWDMyKCkJCQliZmluX3JlYWQzMihTUE9SVDFfVFgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1RYMzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9UWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JYMzIoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMV9SWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfUlgzMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX1JYLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVFgxNigpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RYKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9UWDE2KHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfVFgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9SWDE2KCkJCQliZmluX3JlYWQxNihTUE9SVDFfUlgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JYMTYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9SWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JDUjEoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMV9SQ1IxKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9SQ1IxKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfUkNSMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JDUjIoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMV9SQ1IyKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9SQ1IyKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfUkNSMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JDTEtESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQxX1JDTEtESVYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JDTEtESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9SQ0xLRElWLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfUkZTRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMV9SRlNESVYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JGU0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1JGU0RJViwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1NUQVQoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMV9TVEFUKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfU1RBVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX0NITkwoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMV9DSE5MKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9DSE5MKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfQ0hOTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01DTUMxKCkJCWJmaW5fcmVhZDE2KFNQT1JUMV9NQ01DMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTUNNQzEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9NQ01DMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01DTUMyKCkJCWJmaW5fcmVhZDE2KFNQT1JUMV9NQ01DMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTUNNQzIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9NQ01DMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01UQ1MwKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NVENTMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVRDUzAodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NVENTMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01UQ1MxKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NVENTMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVRDUzEodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NVENTMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01UQ1MyKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NVENTMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVRDUzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NVENTMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01UQ1MzKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NVENTMykKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVRDUzModmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NVENTMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01SQ1MwKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NUkNTMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVJDUzAodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NUkNTMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01SQ1MxKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NUkNTMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVJDUzEodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NUkNTMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01SQ1MyKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NUkNTMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVJDUzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NUkNTMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01SQ1MzKCkJCWJmaW5fcmVhZDMyKFNQT1JUMV9NUkNTMykKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVJDUzModmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9NUkNTMywgdmFsKQotCi0KLS8qIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgVW5pdCAoMHhGRkMwMEEwMCAtIDB4RkZDMDBBRkYpCQkJCQkJCSovCi0jZGVmaW5lIGJmaW5fcmVhZF9FQklVX0FNR0NUTCgpCQkJYmZpbl9yZWFkMTYoRUJJVV9BTUdDVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9BTUdDVEwodmFsKQkJYmZpbl93cml0ZTE2KEVCSVVfQU1HQ1RMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FQklVX0FNQkNUTDAoKQkJYmZpbl9yZWFkMzIoRUJJVV9BTUJDVEwwKQotI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfQU1CQ1RMMCh2YWwpCQliZmluX3dyaXRlMzIoRUJJVV9BTUJDVEwwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FQklVX0FNQkNUTDEoKQkJYmZpbl9yZWFkMzIoRUJJVV9BTUJDVEwxKQotI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfQU1CQ1RMMSh2YWwpCQliZmluX3dyaXRlMzIoRUJJVV9BTUJDVEwxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FQklVX1NER0NUTCgpCQkJYmZpbl9yZWFkMzIoRUJJVV9TREdDVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9TREdDVEwodmFsKQkJYmZpbl93cml0ZTMyKEVCSVVfU0RHQ1RMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FQklVX1NEQkNUTCgpCQkJYmZpbl9yZWFkMTYoRUJJVV9TREJDVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9TREJDVEwodmFsKQkJYmZpbl93cml0ZTE2KEVCSVVfU0RCQ1RMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FQklVX1NEUlJDKCkJCQliZmluX3JlYWQxNihFQklVX1NEUlJDKQotI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfU0RSUkModmFsKQkJYmZpbl93cml0ZTE2KEVCSVVfU0RSUkMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfU0RTVEFUKCkJCQliZmluX3JlYWQxNihFQklVX1NEU1RBVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FQklVX1NEU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoRUJJVV9TRFNUQVQsIHZhbCkKLQotCi0vKiBETUEgVHJhZmZpYyBDb250cm9sIFJlZ2lzdGVycwkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfRE1BX1RDX1BFUigpCQkJYmZpbl9yZWFkMTYoRE1BX1RDX1BFUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUFfVENfUEVSKHZhbCkJCWJmaW5fd3JpdGUxNihETUFfVENfUEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUFfVENfQ05UKCkJCQliZmluX3JlYWQxNihETUFfVENfQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQV9UQ19DTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQV9UQ19DTlQsIHZhbCkKLQotLyogQWx0ZXJuYXRlIGRlcHJlY2F0ZWQgcmVnaXN0ZXIgbmFtZXMgKGJlbG93KSBwcm92aWRlZCBmb3IgYmFja3dhcmRzIGNvZGUgY29tcGF0aWJpbGl0eSAqLwotI2RlZmluZSBiZmluX3JlYWRfRE1BX1RDUEVSKCkJCQliZmluX3JlYWQxNihETUFfVENQRVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BX1RDUEVSKHZhbCkJCWJmaW5fd3JpdGUxNihETUFfVENQRVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQV9UQ0NOVCgpCQkJYmZpbl9yZWFkMTYoRE1BX1RDQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQV9UQ0NOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BX1RDQ05ULCB2YWwpCi0KLS8qIERNQSBDb250cm9sbGVyCQkJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfRE1BMF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTBfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUEwX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMF9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTBfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMF9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMF9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BMF9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMF9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMF9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMF9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTBfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMF9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUEwX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTBfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEwX0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTBfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMF9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMF9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTBfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEwX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUEwX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUEwX0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMF9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMF9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMF9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUEwX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUEwX0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BMF9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTBfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BMV9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTFfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUExX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMV9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTFfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMV9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BMV9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMV9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMV9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMV9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTFfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMV9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUExX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTFfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExX0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTFfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMV9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTFfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExX0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMV9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMV9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUExX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUExX0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BMV9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTFfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BMl9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTJfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUEyX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMl9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTJfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMl9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMl9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BMl9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMl9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMl9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMl9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTJfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMl9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMl9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUEyX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTJfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEyX0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTJfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMl9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMl9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTJfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEyX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUEyX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUEyX0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMl9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMl9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMl9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUEyX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUEyX0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BMl9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTJfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BM19DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTNfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUEzX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BM19ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTNfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BM19ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEzX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BM19TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BM19TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEzX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BM19YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BM19YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEzX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BM19ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BM19ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEzX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTNfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BM19YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BM19ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUEzX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTNfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEzX0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTNfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BM19DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BM19DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTNfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEzX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUEzX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUEzX0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BM19DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BM19DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BM19DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUEzX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUEzX0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BM19QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTNfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BNF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTRfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE0X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNF9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTRfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BNF9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE0X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNF9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BNF9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE0X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNF9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE0X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNF9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNF9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE0X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTRfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BNF9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE0X1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTRfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE0X0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTRfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNF9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNF9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTRfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE0X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE0X0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE0X0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNF9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNF9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNF9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE0X0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE0X0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BNF9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTRfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BNV9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTVfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE1X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNV9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTVfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BNV9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE1X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BNV9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE1X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNV9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE1X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNV9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNV9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE1X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTVfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BNV9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE1X1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTVfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE1X0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTVfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNV9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTVfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE1X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE1X0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE1X0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNV9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNV9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE1X0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE1X0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BNV9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTVfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BNl9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTZfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE2X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNl9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTZfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BNl9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE2X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNl9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BNl9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE2X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNl9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE2X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNl9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BNl9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE2X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTZfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BNl9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNl9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE2X1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTZfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE2X0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTZfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNl9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BNl9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTZfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE2X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE2X0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE2X0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BNl9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNl9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNl9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE2X0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE2X0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BNl9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTZfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BN19DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTdfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE3X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BN19ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTdfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BN19ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE3X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BN19TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BN19TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE3X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BN19YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BN19YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE3X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BN19ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BN19ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE3X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTdfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BN19YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BN19ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE3X1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTdfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE3X0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTdfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BN19DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BN19DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTdfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE3X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE3X0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE3X0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BN19DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BN19DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BN19DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE3X0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE3X0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BN19QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTdfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BOF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQThfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQThfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE4X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOF9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQThfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BOF9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE4X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BOF9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQThfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BOF9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE4X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQThfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BOF9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE4X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOF9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQThfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BOF9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE4X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQThfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BOF9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE4X1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQThfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQThfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQThfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE4X0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQThfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOF9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BOF9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQThfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE4X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE4X0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE4X0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOF9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOF9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BOF9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQThfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE4X0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE4X0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQThfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BOF9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQThfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BOV9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTlfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE5X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOV9ORVhUX0RFU0NfUFRSKCkJCWJmaW5fcmVhZDMyKERNQTlfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BOV9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE5X1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BOV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfU1RBUlRfQUREUih2YWwpCQliZmluX3dyaXRlMzIoRE1BOV9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE5X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BOV9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE5X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOV9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BOV9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE5X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTlfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BOV9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE5X1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfWV9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTlfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE5X0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTlfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BOV9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTlfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUE5X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUE5X0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE5X0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BOV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOV9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BOV9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE5X0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE5X0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BOV9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTlfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ09ORklHKCkJCWJmaW5fcmVhZDE2KERNQTEwX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KERNQTEwX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExMF9ORVhUX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTBfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfU1RBUlRfQUREUigpCQliZmluX3JlYWQzMihETUExMF9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX1NUQVJUX0FERFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTBfU1RBUlRfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExMF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTEwX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTBfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMF9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUExMF9YX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTBfWF9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTEwX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMF9ZX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExMF9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX0NVUlJfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTBfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTEwX0NVUlJfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTEwX0NVUlJfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTEwX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTBfQ1VSUl9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTBfQ1VSUl9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExMF9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMTBfSVJRX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KERNQTEwX0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoRE1BMTBfUEVSSVBIRVJBTF9NQVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoRE1BMTBfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ09ORklHKCkJCWJmaW5fcmVhZDE2KERNQTExX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KERNQTExX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExMV9ORVhUX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTFfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfU1RBUlRfQUREUigpCQliZmluX3JlYWQzMihETUExMV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX1NUQVJUX0FERFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTFfU1RBUlRfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExMV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTExX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTFfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMV9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUExMV9YX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9YX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTFfWF9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTExX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMV9ZX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ1VSUl9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExMV9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX0NVUlJfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoRE1BMTFfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTExX0NVUlJfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9DVVJSX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTExX0NVUlJfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTExX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTFfQ1VSUl9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTFfQ1VSUl9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExMV9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMTFfSVJRX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KERNQTExX0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoRE1BMTFfUEVSSVBIRVJBTF9NQVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoRE1BMTFfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDBfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX05FWFRfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX0QwX05FWFRfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfRDBfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfRDBfU1RBUlRfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1NUQVJUX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMF9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMF9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMF9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDBfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9YX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QwX1hfTU9ESUZZLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDBfWV9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9ZX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QwX1lfTU9ESUZZLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0NVUlJfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX0QwX0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfRDBfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoTURNQV9EMF9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DVVJSX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMF9DVVJSX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfQ1VSUl9YX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9EMF9DVVJSX1hfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMF9DVVJSX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfQ1VSUl9ZX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9EMF9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMF9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihNRE1BX0QwX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDBfSVJRX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KE1ETUFfRDBfUEVSSVBIRVJBTF9NQVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QwX1BFUklQSEVSQUxfTUFQLCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfQ09ORklHKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzBfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX1MwX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9ORVhUX0RFU0NfUFRSKCkJYmZpbl9yZWFkMzIoTURNQV9TMF9ORVhUX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfTkVYVF9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX1MwX05FWFRfREVTQ19QVFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfU1RBUlRfQUREUigpCQliZmluX3JlYWQzMihNRE1BX1MwX1NUQVJUX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9TVEFSVF9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzBfU1RBUlRfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzBfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzBfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzBfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzBfWV9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9YX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX1MwX1hfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfWF9NT0RJRlkodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMF9YX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX1MwX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfWV9NT0RJRlkodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMF9ZX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DVVJSX0RFU0NfUFRSKCkJYmZpbl9yZWFkMzIoTURNQV9TMF9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX1MwX0NVUlJfREVTQ19QVFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfUzBfQ1VSUl9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ1VSUl9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzBfQ1VSUl9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0NVUlJfWF9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfUzBfQ1VSUl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzBfQ1VSUl9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0NVUlJfWV9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfUzBfQ1VSUl9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzBfQ1VSUl9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoTURNQV9TMF9JUlFfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MwX0lSUV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfUEVSSVBIRVJBTF9NQVAoKQliZmluX3JlYWQxNihNRE1BX1MwX1BFUklQSEVSQUxfTUFQKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMF9QRVJJUEhFUkFMX01BUCwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NPTkZJRygpCQliZmluX3JlYWQxNihNRE1BX0QxX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMV9DT05GSUcsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfTkVYVF9ERVNDX1BUUigpCWJmaW5fcmVhZDMyKE1ETUFfRDFfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMV9ORVhUX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoTURNQV9EMV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfU1RBUlRfQUREUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX0QxX1NUQVJUX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWF9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX0QxX1hfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX0QxX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWV9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX0QxX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX0QxX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoTURNQV9EMV9YX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1hfTU9ESUZZKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDFfWF9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoTURNQV9EMV9ZX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1lfTU9ESUZZKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDFfWV9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfQ1VSUl9ERVNDX1BUUigpCWJmaW5fcmVhZDMyKE1ETUFfRDFfQ1VSUl9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMV9DVVJSX0RFU0NfUFRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NVUlJfQUREUigpCQliZmluX3JlYWQzMihNRE1BX0QxX0NVUlJfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfQUREUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX0QxX0NVUlJfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9DVVJSX1hfQ09VTlQoKQliZmluX3JlYWQxNihNRE1BX0QxX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QxX0NVUlJfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9DVVJSX1lfQ09VTlQoKQliZmluX3JlYWQxNihNRE1BX0QxX0NVUlJfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QxX0NVUlJfWV9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9JUlFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDFfSVJRX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0lSUV9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoTURNQV9EMV9JUlFfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoTURNQV9EMV9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDFfUEVSSVBIRVJBTF9NQVAsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9DT05GSUcoKQkJYmZpbl9yZWFkMTYoTURNQV9TMV9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzFfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX05FWFRfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX1MxX05FWFRfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzFfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfUzFfU1RBUlRfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1NUQVJUX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9TMV9TVEFSVF9BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9TMV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TMV9YX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9TMV9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TMV9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzFfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9YX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MxX1hfTU9ESUZZLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzFfWV9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9ZX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MxX1lfTU9ESUZZLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NVUlJfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX1MxX0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzFfQ1VSUl9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoTURNQV9TMV9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DVVJSX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9TMV9DVVJSX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfQ1VSUl9YX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9TMV9DVVJSX1hfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMV9DVVJSX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfQ1VSUl9ZX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9TMV9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMV9DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihNRE1BX1MxX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzFfSVJRX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KE1ETUFfUzFfUEVSSVBIRVJBTF9NQVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MxX1BFUklQSEVSQUxfTUFQLCB2YWwpCi0KLQotLyogUGFyYWxsZWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKDB4RkZDMDEwMDAgLSAweEZGQzAxMEZGKQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfUFBJX0NPTlRST0woKQkJCWJmaW5fcmVhZDE2KFBQSV9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1BQSV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihQUElfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUFBJX1NUQVRVUygpCQkJYmZpbl9yZWFkMTYoUFBJX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9QUElfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihQUElfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fY2xlYXJfUFBJX1NUQVRVUygpCQkJYmZpbl93cml0ZV9QUElfU1RBVFVTKDB4RkZGRikKLSNkZWZpbmUgYmZpbl9yZWFkX1BQSV9ERUxBWSgpCQkJYmZpbl9yZWFkMTYoUFBJX0RFTEFZKQotI2RlZmluZSBiZmluX3dyaXRlX1BQSV9ERUxBWSh2YWwpCQliZmluX3dyaXRlMTYoUFBJX0RFTEFZLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QUElfQ09VTlQoKQkJCWJmaW5fcmVhZDE2KFBQSV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QUElfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KFBQSV9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUFBJX0ZSQU1FKCkJCQliZmluX3JlYWQxNihQUElfRlJBTUUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUFBJX0ZSQU1FKHZhbCkJCWJmaW5fd3JpdGUxNihQUElfRlJBTUUsIHZhbCkKLQotCi0vKiBUd28tV2lyZSBJbnRlcmZhY2UJCSgweEZGQzAxNDAwIC0gMHhGRkMwMTRGRikJCQkJCQkJCSovCi0KLS8qIEdlbmVyYWwgUHVycG9zZSBJL08gUG9ydCBHICgweEZGQzAxNTAwIC0gMHhGRkMwMTVGRikJCQkJCQkJCSovCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPKCkJCQliZmluX3JlYWQxNihQT1JUR0lPKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU8odmFsKQkJCWJmaW5fd3JpdGUxNihQT1JUR0lPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fQ0xFQVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19DTEVBUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdJT19DTEVBUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19TRVQoKQkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fU0VUKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fU0VUKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX1NFVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19UT0dHTEUoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19UT0dHTEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19UT0dHTEUodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHSU9fVE9HR0xFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX01BU0tBKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fTUFTS0EpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19NQVNLQV9DTEVBUigpCQliZmluX3JlYWQxNihQT1JUR0lPX01BU0tBX0NMRUFSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fTUFTS0FfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQV9DTEVBUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19NQVNLQV9TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19NQVNLQV9TRVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQV9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQV9TRVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fTUFTS0FfVE9HR0xFKCkJYmZpbl9yZWFkMTYoUE9SVEdJT19NQVNLQV9UT0dHTEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQV9UT0dHTEUodmFsKQliZmluX3dyaXRlMTYoUE9SVEdJT19NQVNLQV9UT0dHTEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fTUFTS0IoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19NQVNLQikKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX01BU0tCKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tCLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX01BU0tCX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fTUFTS0JfQ0xFQVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQl9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tCX0NMRUFSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX01BU0tCX1NFVCgpCQliZmluX3JlYWQxNihQT1JUR0lPX01BU0tCX1NFVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX01BU0tCX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tCX1NFVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19NQVNLQl9UT0dHTEUoKQliZmluX3JlYWQxNihQT1JUR0lPX01BU0tCX1RPR0dMRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX01BU0tCX1RPR0dMRSh2YWwpCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tCX1RPR0dMRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19ESVIoKQkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fRElSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fRElSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX0RJUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19QT0xBUigpCQliZmluX3JlYWQxNihQT1JUR0lPX1BPTEFSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fUE9MQVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHSU9fUE9MQVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fRURHRSgpCQliZmluX3JlYWQxNihQT1JUR0lPX0VER0UpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19FREdFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX0VER0UsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fQk9USCgpCQliZmluX3JlYWQxNihQT1JUR0lPX0JPVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19CT1RIKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX0JPVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fSU5FTigpCQliZmluX3JlYWQxNihQT1JUR0lPX0lORU4pCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19JTkVOKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX0lORU4sIHZhbCkKLQotCi0vKiBHZW5lcmFsIFB1cnBvc2UgSS9PIFBvcnQgSCAoMHhGRkMwMTcwMCAtIDB4RkZDMDE3RkYpCQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJTygpCQkJYmZpbl9yZWFkMTYoUE9SVEhJTykKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPKHZhbCkJCQliZmluX3dyaXRlMTYoUE9SVEhJTywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19DTEVBUigpCQliZmluX3JlYWQxNihQT1JUSElPX0NMRUFSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fQ0xFQVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRISU9fQ0xFQVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fU0VUKCkJCQliZmluX3JlYWQxNihQT1JUSElPX1NFVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX1NFVCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19TRVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fVE9HR0xFKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fVE9HR0xFKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fVE9HR0xFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSElPX1RPR0dMRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19NQVNLQSgpCQliZmluX3JlYWQxNihQT1JUSElPX01BU0tBKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0EodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0EsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fTUFTS0FfQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19NQVNLQV9DTEVBUikKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX01BU0tBX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0FfQ0xFQVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fTUFTS0FfU0VUKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fTUFTS0FfU0VUKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0FfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0FfU0VULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX01BU0tBX1RPR0dMRSgpCWJmaW5fcmVhZDE2KFBPUlRISU9fTUFTS0FfVE9HR0xFKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0FfVE9HR0xFKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRISU9fTUFTS0FfVE9HR0xFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX01BU0tCKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fTUFTS0IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19NQVNLQih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19NQVNLQl9DTEVBUigpCQliZmluX3JlYWQxNihQT1JUSElPX01BU0tCX0NMRUFSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0JfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQl9DTEVBUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19NQVNLQl9TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19NQVNLQl9TRVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19NQVNLQl9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQl9TRVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fTUFTS0JfVE9HR0xFKCkJYmZpbl9yZWFkMTYoUE9SVEhJT19NQVNLQl9UT0dHTEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19NQVNLQl9UT0dHTEUodmFsKQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQl9UT0dHTEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fRElSKCkJCQliZmluX3JlYWQxNihQT1JUSElPX0RJUikKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX0RJUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19ESVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fUE9MQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19QT0xBUikKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX1BPTEFSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSElPX1BPTEFSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX0VER0UoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19FREdFKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fRURHRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19FREdFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX0JPVEgoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19CT1RIKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fQk9USCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19CT1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX0lORU4oKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19JTkVOKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fSU5FTih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19JTkVOLCB2YWwpCi0KLQotLyogVUFSVDEgQ29udHJvbGxlcgkJKDB4RkZDMDIwMDAgLSAweEZGQzAyMEZGKQkJCQkJCQkJKi8KLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX1RIUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfVEhSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX1RIUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfVEhSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9SQlIoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX1JCUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9SQlIodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX1JCUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfRExMKCkJCQliZmluX3JlYWQxNihVQVJUMV9ETEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfRExMKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9ETEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX0lFUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfSUVSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX0lFUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfSUVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9ETEgoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX0RMSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9ETEgodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX0RMSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfSUlSKCkJCQliZmluX3JlYWQxNihVQVJUMV9JSVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfSUlSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9JSVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX0xDUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfTENSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX0xDUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfTENSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9NQ1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX01DUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9NQ1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX01DUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfTFNSKCkJCQliZmluX3JlYWQxNihVQVJUMV9MU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfTFNSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9MU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX01TUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfTVNSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX01TUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfTVNSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9TQ1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX1NDUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9TQ1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX1NDUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfR0NUTCgpCQkJYmZpbl9yZWFkMTYoVUFSVDFfR0NUTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9HQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9HQ1RMLCB2YWwpCi0KLS8qIE9taXQgQ0FOIHJlZ2lzdGVyIHNldHMgZnJvbSB0aGUgY2RlZkJGNTM0LmggKENBTiBpcyBub3QgaW4gdGhlIEFEU1AtQkY1MnggcHJvY2Vzc29yKSAqLwotCi0vKiBQaW4gQ29udHJvbCBSZWdpc3RlcnMJKDB4RkZDMDMyMDAgLSAweEZGQzAzMkZGKQkJCQkJCQkJKi8KLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX0ZFUigpCQkJYmZpbl9yZWFkMTYoUE9SVEZfRkVSKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGX0ZFUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZfRkVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUR19GRVIoKQkJCWJmaW5fcmVhZDE2KFBPUlRHX0ZFUikKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19GRVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHX0ZFUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEhfRkVSKCkJCQliZmluX3JlYWQxNihQT1JUSF9GRVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhfRkVSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSF9GRVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRfTVVYKCkJCQliZmluX3JlYWQxNihQT1JUX01VWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUX01VWCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVF9NVVgsIHZhbCkKLQotCi0vKiBIYW5kc2hha2UgTURNQSBSZWdpc3RlcnMJKDB4RkZDMDMzMDAgLSAweEZGQzAzM0ZGKQkJCQkJCQkJKi8KLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0VDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTBfRUNJTklUKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ0lOSVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9CQ0lOSVQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0JDSU5JVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfQkNJTklUKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQkNJTklULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNVUkdFTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0VDVVJHRU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ1VSR0VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0VDVVJHRU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNPVkVSRkxPVygpCQliZmluX3JlYWQxNihITURNQTBfRUNPVkVSRkxPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfRUNPVkVSRkxPVyh2YWwpCWJmaW5fd3JpdGUxNihITURNQTBfRUNPVkVSRkxPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0VDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTBfRUNPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9CQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0JDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfQkNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQkNPVU5ULCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0VDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTFfRUNJTklUKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ0lOSVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9CQ0lOSVQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0JDSU5JVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfQkNJTklUKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQkNJTklULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNVUkdFTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0VDVVJHRU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ1VSR0VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0VDVVJHRU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNPVkVSRkxPVygpCQliZmluX3JlYWQxNihITURNQTFfRUNPVkVSRkxPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfRUNPVkVSRkxPVyh2YWwpCWJmaW5fd3JpdGUxNihITURNQTFfRUNPVkVSRkxPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0VDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTFfRUNPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9CQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0JDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfQkNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQkNPVU5ULCB2YWwpCi0KLS8qID09PT0gZW5kIGZyb20gY2RlZkJGNTM0LmggPT09PSAqLwotCi0vKiBHUElPIFBJTiBtdXggKDB4RkZDMDMyMTAgLSBPeEZGQzAzMjg4KSAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JURl9NVVgoKQkJCWJmaW5fcmVhZDE2KFBPUlRGX01VWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JURl9NVVgodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGX01VWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdfTVVYKCkJCQliZmluX3JlYWQxNihQT1JUR19NVVgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdfTVVYKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR19NVVgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRIX01VWCgpCQkJYmZpbl9yZWFkMTYoUE9SVEhfTVVYKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRIX01VWCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhfTVVYLCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX0RSSVZFKCkJCQliZmluX3JlYWQxNihQT1JURl9EUklWRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JURl9EUklWRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZfRFJJVkUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHX0RSSVZFKCkJCQliZmluX3JlYWQxNihQT1JUR19EUklWRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19EUklWRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdfRFJJVkUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRIX0RSSVZFKCkJCQliZmluX3JlYWQxNihQT1JUSF9EUklWRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSF9EUklWRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhfRFJJVkUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX1NMRVcoKQkJCWJmaW5fcmVhZDE2KFBPUlRGX1NMRVcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZfU0xFVyh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZfU0xFVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUE9SVEdfU0xFVygpCQkJYmZpbl9yZWFkMTYoUE9SVEdfU0xFVykKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19TTEVXKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR19TTEVXLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QT1JUSF9TTEVXKCkJCQliZmluX3JlYWQxNihQT1JUSF9TTEVXKQotI2RlZmluZSBiZmluX3dyaXRlX1BPUlRIX1NMRVcodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRIX1NMRVcsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX0hZU1RFUklTSVMoKQkJYmZpbl9yZWFkMTYoUE9SVEZfSFlTVEVSSVNJUykKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JURl9IWVNURVJJU0lTKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRGX0hZU1RFUklTSVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHX0hZU1RFUklTSVMoKQkJYmZpbl9yZWFkMTYoUE9SVEdfSFlTVEVSSVNJUykKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19IWVNURVJJU0lTKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRHX0hZU1RFUklTSVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BPUlRIX0hZU1RFUklTSVMoKQkJYmZpbl9yZWFkMTYoUE9SVEhfSFlTVEVSSVNJUykKLSNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSF9IWVNURVJJU0lTKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRIX0hZU1RFUklTSVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01JU0NQT1JUX0RSSVZFKCkJCWJmaW5fcmVhZDE2KE1JU0NQT1JUX0RSSVZFKQotI2RlZmluZSBiZmluX3dyaXRlX01JU0NQT1JUX0RSSVZFKHZhbCkJCWJmaW5fd3JpdGUxNihNSVNDUE9SVF9EUklWRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTUlTQ1BPUlRfU0xFVygpCQliZmluX3JlYWQxNihNSVNDUE9SVF9TTEVXKQotI2RlZmluZSBiZmluX3dyaXRlX01JU0NQT1JUX1NMRVcodmFsKQkJYmZpbl93cml0ZTE2KE1JU0NQT1JUX1NMRVcsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01JU0NQT1JUX0hZU1RFUklTSVMoKQkJYmZpbl9yZWFkMTYoTUlTQ1BPUlRfSFlTVEVSSVNJUykKLSNkZWZpbmUgYmZpbl93cml0ZV9NSVNDUE9SVF9IWVNURVJJU0lTKHZhbCkJYmZpbl93cml0ZTE2KE1JU0NQT1JUX0hZU1RFUklTSVMsIHZhbCkKLQotLyogSE9TVCBQb3J0IFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9IT1NUX0NPTlRST0woKQkJYmZpbl9yZWFkMTYoSE9TVF9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX0hPU1RfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoSE9TVF9DT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9IT1NUX1NUQVRVUygpCQkJYmZpbl9yZWFkMTYoSE9TVF9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE9TVF9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KEhPU1RfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9IT1NUX1RJTUVPVVQoKQkJYmZpbl9yZWFkMTYoSE9TVF9USU1FT1VUKQotI2RlZmluZSBiZmluX3dyaXRlX0hPU1RfVElNRU9VVCh2YWwpCQliZmluX3dyaXRlMTYoSE9TVF9USU1FT1VULCB2YWwpCi0KLS8qIENvdW50ZXIgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX0NOVF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KENOVF9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ05UX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoQ05UX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ05UX0lNQVNLKCkJCQliZmluX3JlYWQxNihDTlRfSU1BU0spCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ05UX0lNQVNLKHZhbCkJCWJmaW5fd3JpdGUxNihDTlRfSU1BU0ssIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NOVF9TVEFUVVMoKQkJCWJmaW5fcmVhZDE2KENOVF9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ05UX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoQ05UX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ05UX0NPTU1BTkQoKQkJCWJmaW5fcmVhZDE2KENOVF9DT01NQU5EKQotI2RlZmluZSBiZmluX3dyaXRlX0NOVF9DT01NQU5EKHZhbCkJCWJmaW5fd3JpdGUxNihDTlRfQ09NTUFORCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ05UX0RFQk9VTkNFKCkJCWJmaW5fcmVhZDE2KENOVF9ERUJPVU5DRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DTlRfREVCT1VOQ0UodmFsKQkJYmZpbl93cml0ZTE2KENOVF9ERUJPVU5DRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ05UX0NPVU5URVIoKQkJCWJmaW5fcmVhZDMyKENOVF9DT1VOVEVSKQotI2RlZmluZSBiZmluX3dyaXRlX0NOVF9DT1VOVEVSKHZhbCkJCWJmaW5fd3JpdGUzMihDTlRfQ09VTlRFUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ05UX01BWCgpCQkJYmZpbl9yZWFkMzIoQ05UX01BWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DTlRfTUFYKHZhbCkJCQliZmluX3dyaXRlMzIoQ05UX01BWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ05UX01JTigpCQkJYmZpbl9yZWFkMzIoQ05UX01JTikKLSNkZWZpbmUgYmZpbl93cml0ZV9DTlRfTUlOKHZhbCkJCQliZmluX3dyaXRlMzIoQ05UX01JTiwgdmFsKQotCi0vKiBTZWN1cml0eSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfU0VDVVJFX1NZU1NXVCgpCQliZmluX3JlYWQzMihTRUNVUkVfU1lTU1dUKQotI2RlZmluZSBiZmluX3dyaXRlX1NFQ1VSRV9TWVNTV1QodmFsKQkJYmZpbl93cml0ZTMyKFNFQ1VSRV9TWVNTV1QsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NFQ1VSRV9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KFNFQ1VSRV9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1NFQ1VSRV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihTRUNVUkVfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0VDVVJFX1NUQVRVUygpCQliZmluX3JlYWQxNihTRUNVUkVfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX1NFQ1VSRV9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KFNFQ1VSRV9TVEFUVVMsIHZhbCkKLQotLyogTkZDIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9ORkNfQ1RMKCkJCQliZmluX3JlYWQxNihORkNfQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX05GQ19DVEwodmFsKQkJCWJmaW5fd3JpdGUxNihORkNfQ1RMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ORkNfU1RBVCgpCQkJYmZpbl9yZWFkMTYoTkZDX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX1NUQVQodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ORkNfSVJRU1RBVCgpCQkJYmZpbl9yZWFkMTYoTkZDX0lSUVNUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0lSUVNUQVQodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19JUlFTVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ORkNfSVJRTUFTSygpCQkJYmZpbl9yZWFkMTYoTkZDX0lSUU1BU0spCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0lSUU1BU0sodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19JUlFNQVNLLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ORkNfRUNDMCgpCQkJYmZpbl9yZWFkMTYoTkZDX0VDQzApCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0VDQzAodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19FQ0MwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ORkNfRUNDMSgpCQkJYmZpbl9yZWFkMTYoTkZDX0VDQzEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0VDQzEodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19FQ0MxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ORkNfRUNDMigpCQkJYmZpbl9yZWFkMTYoTkZDX0VDQzIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0VDQzIodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19FQ0MyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ORkNfRUNDMygpCQkJYmZpbl9yZWFkMTYoTkZDX0VDQzMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0VDQzModmFsKQkJYmZpbl93cml0ZTE2KE5GQ19FQ0MzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ORkNfQ09VTlQoKQkJCWJmaW5fcmVhZDE2KE5GQ19DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ORkNfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTkZDX1JTVCgpCQkJYmZpbl9yZWFkMTYoTkZDX1JTVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ORkNfUlNUKHZhbCkJCQliZmluX3dyaXRlMTYoTkZDX1JTVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTkZDX1BHQ1RMKCkJCQliZmluX3JlYWQxNihORkNfUEdDVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX1BHQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfUEdDVEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX05GQ19SRUFEKCkJCQliZmluX3JlYWQxNihORkNfUkVBRCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ORkNfUkVBRCh2YWwpCQliZmluX3dyaXRlMTYoTkZDX1JFQUQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX05GQ19BRERSKCkJCQliZmluX3JlYWQxNihORkNfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ORkNfQUREUih2YWwpCQliZmluX3dyaXRlMTYoTkZDX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX05GQ19DTUQoKQkJCWJmaW5fcmVhZDE2KE5GQ19DTUQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0NNRCh2YWwpCQkJYmZpbl93cml0ZTE2KE5GQ19DTUQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX05GQ19EQVRBX1dSKCkJCQliZmluX3JlYWQxNihORkNfREFUQV9XUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ORkNfREFUQV9XUih2YWwpCQliZmluX3dyaXRlMTYoTkZDX0RBVEFfV1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX05GQ19EQVRBX1JEKCkJCQliZmluX3JlYWQxNihORkNfREFUQV9SRCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ORkNfREFUQV9SRCh2YWwpCQliZmluX3dyaXRlMTYoTkZDX0RBVEFfUkQsIHZhbCkKLQotLyogVGhlc2UgbmVlZCB0byBiZSBsYXN0IGR1ZSB0byB0aGUgY2RlZi9saW51eCBpbnRlci1kZXBlbmRlbmNpZXMgKi8KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNlbmRpZiAvKiBfQ0RFRl9CRjUyWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTIyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTIyLmgKaW5kZXggY2IxMzlhMi4uODlmNTQyMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyMi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwpAQCAtNywxMiArNywxMzkzIEBACiAjaWZuZGVmIF9ERUZfQkY1MjJfSAogI2RlZmluZSBfREVGX0JGNTIyX0gKIAotLyogSW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGFzbS9kZWZfTFBCbGFja2Zpbi5oPgorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qICAgU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgQ09NTU9OIFRPIEFMTCBBRFNQLUJGNTJ4ICAgICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCi0vKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUyMiAqLworLyogPT09PSBiZWdpbiBmcm9tIGRlZkJGNTM0LmggPT09PSAqLwogCi0vKiBJbmNsdWRlIGRlZkJGNTJ4X2Jhc2UuaCBmb3IgdGhlIHNldCBvZiAjZGVmaW5lcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIEFEU1AtQkY1MnggcHJvY2Vzc29ycyAqLwotI2luY2x1ZGUgImRlZkJGNTJ4X2Jhc2UuaCIKKy8qIENsb2NrIGFuZCBTeXN0ZW0gQ29udHJvbAkoMHhGRkMwMDAwMCAtIDB4RkZDMDAwRkYpCQkJCQkJCQkqLworI2RlZmluZSBQTExfQ1RMCQkJCTB4RkZDMDAwMDAJLyogUExMIENvbnRyb2wgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBQTExfRElWCQkJCTB4RkZDMDAwMDQJLyogUExMIERpdmlkZSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFZSX0NUTAkJCQkweEZGQzAwMDA4CS8qIFZvbHRhZ2UgUmVndWxhdG9yIENvbnRyb2wgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFBMTF9TVEFUCQkJMHhGRkMwMDAwQwkvKiBQTEwgU3RhdHVzIFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgUExMX0xPQ0tDTlQJCQkweEZGQzAwMDEwCS8qIFBMTCBMb2NrIENvdW50IFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBDSElQSUQgICAgICAgIDB4RkZDMDAwMTQgIC8qIERldmljZSBJRCBSZWdpc3RlciAqLworCisKKy8qIFN5c3RlbSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoMHhGRkMwMDEwMCAtIDB4RkZDMDAxRkYpCQkJCQkJCSovCisjZGVmaW5lIFNXUlNUCQkJCTB4RkZDMDAxMDAJLyogU29mdHdhcmUgUmVzZXQgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFNZU0NSCQkJCTB4RkZDMDAxMDQJLyogU3lzdGVtIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkqLworI2RlZmluZSBTSUNfUlZFQ1QJCQkweEZGQzAwMTA4CS8qIEludGVycnVwdCBSZXNldCBWZWN0b3IgQWRkcmVzcyBSZWdpc3RlcgkqLworCisjZGVmaW5lIFNJQ19JTUFTSzAJCQkweEZGQzAwMTBDCS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBTSUNfSUFSMAkJCTB4RkZDMDAxMTAJLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgMAkJCSovCisjZGVmaW5lIFNJQ19JQVIxCQkJMHhGRkMwMDExNAkvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCBSZWdpc3RlciAxCQkJKi8KKyNkZWZpbmUgU0lDX0lBUjIJCQkweEZGQzAwMTE4CS8qIEludGVycnVwdCBBc3NpZ25tZW50IFJlZ2lzdGVyIDIJCQkqLworI2RlZmluZSBTSUNfSUFSMwkJCTB4RkZDMDAxMUMJLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgMwkJCSovCisjZGVmaW5lIFNJQ19JU1IwCQkJCTB4RkZDMDAxMjAJLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBTSUNfSVdSMAkJCQkweEZGQzAwMTI0CS8qIEludGVycnVwdCBXYWtldXAgUmVnaXN0ZXIJCQkJKi8KKworLyogU0lDIEFkZGl0aW9ucyB0byBBRFNQLUJGNTJ4ICgweEZGQzAwMTRDIC0gMHhGRkMwMDE2MikgKi8KKyNkZWZpbmUgU0lDX0lNQVNLMSAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTRDICAgICAvKiBJbnRlcnJ1cHQgTWFzayByZWdpc3RlciBvZiBTSUMyICovCisjZGVmaW5lIFNJQ19JQVI0ICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMDE1MCAgICAgLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgcmVnaXN0ZXI0ICovCisjZGVmaW5lIFNJQ19JQVI1ICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMDE1NCAgICAgLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgcmVnaXN0ZXI1ICovCisjZGVmaW5lIFNJQ19JQVI2ICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMDE1OCAgICAgLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgcmVnaXN0ZXI2ICovCisjZGVmaW5lIFNJQ19JQVI3ICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMDE1QyAgICAgLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgcmVnaXN0ZXI3ICovCisjZGVmaW5lIFNJQ19JU1IxICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMDE2MCAgICAgLyogSW50ZXJydXB0IFN0YXR1ciByZWdpc3RlciAqLworI2RlZmluZSBTSUNfSVdSMSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDAxNjQgICAgIC8qIEludGVycnVwdCBXYWtldXAgcmVnaXN0ZXIgKi8KKworCisvKiBXYXRjaGRvZyBUaW1lcgkJCSgweEZGQzAwMjAwIC0gMHhGRkMwMDJGRikJCQkJCQkJCSovCisjZGVmaW5lIFdET0dfQ1RMCQkJMHhGRkMwMDIwMAkvKiBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFdET0dfQ05UCQkJMHhGRkMwMDIwNAkvKiBXYXRjaGRvZyBDb3VudCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgV0RPR19TVEFUCQkJMHhGRkMwMDIwOAkvKiBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIJCQkJCSovCisKKworLyogUmVhbCBUaW1lIENsb2NrCQkoMHhGRkMwMDMwMCAtIDB4RkZDMDAzRkYpCQkJCQkJCQkJKi8KKyNkZWZpbmUgUlRDX1NUQVQJCQkweEZGQzAwMzAwCS8qIFJUQyBTdGF0dXMgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBSVENfSUNUTAkJCTB4RkZDMDAzMDQJLyogUlRDIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUlRDX0lTVEFUCQkJMHhGRkMwMDMwOAkvKiBSVEMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFJUQ19TV0NOVAkJCTB4RkZDMDAzMEMJLyogUlRDIFN0b3B3YXRjaCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBSVENfQUxBUk0JCQkweEZGQzAwMzEwCS8qIFJUQyBBbGFybSBUaW1lIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBSVENfRkFTVAkJCTB4RkZDMDAzMTQJLyogUlRDIFByZXNjYWxlciBFbmFibGUgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBSVENfUFJFTgkJCTB4RkZDMDAzMTQJLyogUlRDIFByZXNjYWxlciBFbmFibGUgQWx0ZXJuYXRlIE1hY3JvCQkqLworCisKKy8qIFVBUlQwIENvbnRyb2xsZXIJCSgweEZGQzAwNDAwIC0gMHhGRkMwMDRGRikJCQkJCQkJCQkqLworI2RlZmluZSBVQVJUMF9USFIJCQkweEZGQzAwNDAwCS8qIFRyYW5zbWl0IEhvbGRpbmcgcmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgVUFSVDBfUkJSCQkJMHhGRkMwMDQwMAkvKiBSZWNlaXZlIEJ1ZmZlciByZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVUFSVDBfRExMCQkJMHhGRkMwMDQwMAkvKiBEaXZpc29yIExhdGNoIChMb3ctQnl0ZSkJCQkJCSovCisjZGVmaW5lIFVBUlQwX0lFUgkJCTB4RkZDMDA0MDQJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBVQVJUMF9ETEgJCQkweEZGQzAwNDA0CS8qIERpdmlzb3IgTGF0Y2ggKEhpZ2gtQnl0ZSkJCQkJKi8KKyNkZWZpbmUgVUFSVDBfSUlSCQkJMHhGRkMwMDQwOAkvKiBJbnRlcnJ1cHQgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIJCSovCisjZGVmaW5lIFVBUlQwX0xDUgkJCTB4RkZDMDA0MEMJLyogTGluZSBDb250cm9sIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBVQVJUMF9NQ1IJCQkweEZGQzAwNDEwCS8qIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFVBUlQwX0xTUgkJCTB4RkZDMDA0MTQJLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBVQVJUMF9NU1IJCQkweEZGQzAwNDE4CS8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVUFSVDBfU0NSCQkJMHhGRkMwMDQxQwkvKiBTQ1IgU2NyYXRjaCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFVBUlQwX0dDVEwJCQkweEZGQzAwNDI0CS8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyCQkJCQkqLworCisKKy8qIFNQSSBDb250cm9sbGVyCQkJKDB4RkZDMDA1MDAgLSAweEZGQzAwNUZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgU1BJMF9SRUdCQVNFCQkJMHhGRkMwMDUwMAorI2RlZmluZSBTUElfQ1RMCQkJCTB4RkZDMDA1MDAJLyogU1BJIENvbnRyb2wgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBTUElfRkxHCQkJCTB4RkZDMDA1MDQJLyogU1BJIEZsYWcgcmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBTUElfU1RBVAkJCTB4RkZDMDA1MDgJLyogU1BJIFN0YXR1cyByZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFNQSV9UREJSCQkJMHhGRkMwMDUwQwkvKiBTUEkgVHJhbnNtaXQgRGF0YSBCdWZmZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFNQSV9SREJSCQkJMHhGRkMwMDUxMAkvKiBTUEkgUmVjZWl2ZSBEYXRhIEJ1ZmZlciBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFNQSV9CQVVECQkJMHhGRkMwMDUxNAkvKiBTUEkgQmF1ZCByYXRlIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBTUElfU0hBRE9XCQkJMHhGRkMwMDUxOAkvKiBTUElfUkRCUiBTaGFkb3cgUmVnaXN0ZXIJCQkJCSovCisKKworLyogVElNRVIwLTcgUmVnaXN0ZXJzCQkoMHhGRkMwMDYwMCAtIDB4RkZDMDA2RkYpCQkJCQkJCQkqLworI2RlZmluZSBUSU1FUjBfQ09ORklHCQkweEZGQzAwNjAwCS8qIFRpbWVyIDAgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFRJTUVSMF9DT1VOVEVSCQkweEZGQzAwNjA0CS8qIFRpbWVyIDAgQ291bnRlciBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVElNRVIwX1BFUklPRAkJMHhGRkMwMDYwOAkvKiBUaW1lciAwIFBlcmlvZCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVElNRVIwX1dJRFRICQkweEZGQzAwNjBDCS8qIFRpbWVyIDAgV2lkdGggUmVnaXN0ZXIJCQkJCSovCisKKyNkZWZpbmUgVElNRVIxX0NPTkZJRwkJMHhGRkMwMDYxMAkvKiBUaW1lciAxIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIAkJCSovCisjZGVmaW5lIFRJTUVSMV9DT1VOVEVSCQkweEZGQzAwNjE0CS8qIFRpbWVyIDEgQ291bnRlciBSZWdpc3RlciAgICAgICAgCQkJKi8KKyNkZWZpbmUgVElNRVIxX1BFUklPRAkJMHhGRkMwMDYxOAkvKiBUaW1lciAxIFBlcmlvZCBSZWdpc3RlciAgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSMV9XSURUSAkJMHhGRkMwMDYxQwkvKiBUaW1lciAxIFdpZHRoIFJlZ2lzdGVyICAgICAgICAgIAkJCSovCisKKyNkZWZpbmUgVElNRVIyX0NPTkZJRwkJMHhGRkMwMDYyMAkvKiBUaW1lciAyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIAkJCSovCisjZGVmaW5lIFRJTUVSMl9DT1VOVEVSCQkweEZGQzAwNjI0CS8qIFRpbWVyIDIgQ291bnRlciBSZWdpc3RlciAgICAgICAgCQkJKi8KKyNkZWZpbmUgVElNRVIyX1BFUklPRAkJMHhGRkMwMDYyOAkvKiBUaW1lciAyIFBlcmlvZCBSZWdpc3RlciAgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSMl9XSURUSAkJMHhGRkMwMDYyQwkvKiBUaW1lciAyIFdpZHRoIFJlZ2lzdGVyICAgICAgICAgIAkJCSovCisKKyNkZWZpbmUgVElNRVIzX0NPTkZJRwkJMHhGRkMwMDYzMAkvKiBUaW1lciAzIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkqLworI2RlZmluZSBUSU1FUjNfQ09VTlRFUgkJMHhGRkMwMDYzNAkvKiBUaW1lciAzIENvdW50ZXIgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFRJTUVSM19QRVJJT0QJCTB4RkZDMDA2MzgJLyogVGltZXIgMyBQZXJpb2QgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFRJTUVSM19XSURUSAkJMHhGRkMwMDYzQwkvKiBUaW1lciAzIFdpZHRoIFJlZ2lzdGVyCQkJCQkqLworCisjZGVmaW5lIFRJTUVSNF9DT05GSUcJCTB4RkZDMDA2NDAJLyogVGltZXIgNCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAJCQkqLworI2RlZmluZSBUSU1FUjRfQ09VTlRFUgkJMHhGRkMwMDY0NAkvKiBUaW1lciA0IENvdW50ZXIgUmVnaXN0ZXIgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSNF9QRVJJT0QJCTB4RkZDMDA2NDgJLyogVGltZXIgNCBQZXJpb2QgUmVnaXN0ZXIgICAgICAgICAJCQkqLworI2RlZmluZSBUSU1FUjRfV0lEVEgJCTB4RkZDMDA2NEMJLyogVGltZXIgNCBXaWR0aCBSZWdpc3RlciAgICAgICAgICAJCQkqLworCisjZGVmaW5lIFRJTUVSNV9DT05GSUcJCTB4RkZDMDA2NTAJLyogVGltZXIgNSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAJCQkqLworI2RlZmluZSBUSU1FUjVfQ09VTlRFUgkJMHhGRkMwMDY1NAkvKiBUaW1lciA1IENvdW50ZXIgUmVnaXN0ZXIgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSNV9QRVJJT0QJCTB4RkZDMDA2NTgJLyogVGltZXIgNSBQZXJpb2QgUmVnaXN0ZXIgICAgICAgICAJCQkqLworI2RlZmluZSBUSU1FUjVfV0lEVEgJCTB4RkZDMDA2NUMJLyogVGltZXIgNSBXaWR0aCBSZWdpc3RlciAgICAgICAgICAJCQkqLworCisjZGVmaW5lIFRJTUVSNl9DT05GSUcJCTB4RkZDMDA2NjAJLyogVGltZXIgNiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAJCQkqLworI2RlZmluZSBUSU1FUjZfQ09VTlRFUgkJMHhGRkMwMDY2NAkvKiBUaW1lciA2IENvdW50ZXIgUmVnaXN0ZXIgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSNl9QRVJJT0QJCTB4RkZDMDA2NjgJLyogVGltZXIgNiBQZXJpb2QgUmVnaXN0ZXIgICAgICAgICAJCQkqLworI2RlZmluZSBUSU1FUjZfV0lEVEgJCTB4RkZDMDA2NkMJLyogVGltZXIgNiBXaWR0aCBSZWdpc3RlciAgICAgICAgICAJCQkqLworCisjZGVmaW5lIFRJTUVSN19DT05GSUcJCTB4RkZDMDA2NzAJLyogVGltZXIgNyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAJCQkqLworI2RlZmluZSBUSU1FUjdfQ09VTlRFUgkJMHhGRkMwMDY3NAkvKiBUaW1lciA3IENvdW50ZXIgUmVnaXN0ZXIgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSN19QRVJJT0QJCTB4RkZDMDA2NzgJLyogVGltZXIgNyBQZXJpb2QgUmVnaXN0ZXIgICAgICAgICAJCQkqLworI2RlZmluZSBUSU1FUjdfV0lEVEgJCTB4RkZDMDA2N0MJLyogVGltZXIgNyBXaWR0aCBSZWdpc3RlciAgICAgICAJCQkqLworCisjZGVmaW5lIFRJTUVSX0VOQUJMRQkJMHhGRkMwMDY4MAkvKiBUaW1lciBFbmFibGUgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFRJTUVSX0RJU0FCTEUJCTB4RkZDMDA2ODQJLyogVGltZXIgRGlzYWJsZSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVElNRVJfU1RBVFVTCQkweEZGQzAwNjg4CS8qIFRpbWVyIFN0YXR1cyBSZWdpc3RlcgkJCQkJKi8KKworCisvKiBHZW5lcmFsIFB1cnBvc2UgSS9PIFBvcnQgRiAoMHhGRkMwMDcwMCAtIDB4RkZDMDA3RkYpCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgUE9SVEZJTwkJCQkJMHhGRkMwMDcwMAkvKiBQb3J0IEYgSS9PIFBpbiBTdGF0ZSBTcGVjaWZ5IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFBPUlRGSU9fQ0xFQVIJCQkweEZGQzAwNzA0CS8qIFBvcnQgRiBJL08gUGVyaXBoZXJhbCBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFBPUlRGSU9fU0VUCQkJCTB4RkZDMDA3MDgJLyogUG9ydCBGIEkvTyBQZXJpcGhlcmFsIEludGVycnVwdCBTZXQgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JURklPX1RPR0dMRQkJCTB4RkZDMDA3MEMJLyogUG9ydCBGIEkvTyBQaW4gU3RhdGUgVG9nZ2xlIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBQT1JURklPX01BU0tBCQkJMHhGRkMwMDcxMAkvKiBQb3J0IEYgSS9PIE1hc2sgU3RhdGUgU3BlY2lmeSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkqLworI2RlZmluZSBQT1JURklPX01BU0tBX0NMRUFSCQkweEZGQzAwNzE0CS8qIFBvcnQgRiBJL08gTWFzayBEaXNhYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUE9SVEZJT19NQVNLQV9TRVQJCTB4RkZDMDA3MTgJLyogUG9ydCBGIEkvTyBNYXNrIEVuYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRGSU9fTUFTS0FfVE9HR0xFCTB4RkZDMDA3MUMJLyogUG9ydCBGIEkvTyBNYXNrIFRvZ2dsZSBFbmFibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUE9SVEZJT19NQVNLQgkJCTB4RkZDMDA3MjAJLyogUG9ydCBGIEkvTyBNYXNrIFN0YXRlIFNwZWNpZnkgSW50ZXJydXB0IEIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUE9SVEZJT19NQVNLQl9DTEVBUgkJMHhGRkMwMDcyNAkvKiBQb3J0IEYgSS9PIE1hc2sgRGlzYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRGSU9fTUFTS0JfU0VUCQkweEZGQzAwNzI4CS8qIFBvcnQgRiBJL08gTWFzayBFbmFibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JURklPX01BU0tCX1RPR0dMRQkweEZGQzAwNzJDCS8qIFBvcnQgRiBJL08gTWFzayBUb2dnbGUgRW5hYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCSovCisjZGVmaW5lIFBPUlRGSU9fRElSCQkJCTB4RkZDMDA3MzAJLyogUG9ydCBGIEkvTyBEaXJlY3Rpb24gUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBQT1JURklPX1BPTEFSCQkJMHhGRkMwMDczNAkvKiBQb3J0IEYgSS9PIFNvdXJjZSBQb2xhcml0eSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgUE9SVEZJT19FREdFCQkJMHhGRkMwMDczOAkvKiBQb3J0IEYgSS9PIFNvdXJjZSBTZW5zaXRpdml0eSBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBQT1JURklPX0JPVEgJCQkweEZGQzAwNzNDCS8qIFBvcnQgRiBJL08gU2V0IG9uIEJPVEggRWRnZXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgUE9SVEZJT19JTkVOCQkJMHhGRkMwMDc0MAkvKiBQb3J0IEYgSS9PIElucHV0IEVuYWJsZSBSZWdpc3RlciAJCQkJCSovCisKKworLyogU1BPUlQwIENvbnRyb2xsZXIJCSgweEZGQzAwODAwIC0gMHhGRkMwMDhGRikJCQkJCQkJCQkJKi8KKyNkZWZpbmUgU1BPUlQwX1RDUjEJCQkweEZGQzAwODAwCS8qIFNQT1JUMCBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBTUE9SVDBfVENSMgkJCTB4RkZDMDA4MDQJLyogU1BPUlQwIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFNQT1JUMF9UQ0xLRElWCQkweEZGQzAwODA4CS8qIFNQT1JUMCBUcmFuc21pdCBDbG9jayBEaXZpZGVyCQkJCQkqLworI2RlZmluZSBTUE9SVDBfVEZTRElWCQkweEZGQzAwODBDCS8qIFNQT1JUMCBUcmFuc21pdCBGcmFtZSBTeW5jIERpdmlkZXIJCQkJKi8KKyNkZWZpbmUgU1BPUlQwX1RYCQkJMHhGRkMwMDgxMAkvKiBTUE9SVDAgVFggRGF0YSBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBTUE9SVDBfUlgJCQkweEZGQzAwODE4CS8qIFNQT1JUMCBSWCBEYXRhIFJlZ2lzdGVyCQkJCQkJCSovCisjZGVmaW5lIFNQT1JUMF9SQ1IxCQkJMHhGRkMwMDgyMAkvKiBTUE9SVDAgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgU1BPUlQwX1JDUjIJCQkweEZGQzAwODI0CS8qIFNQT1JUMCBUcmFuc21pdCBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBTUE9SVDBfUkNMS0RJVgkJMHhGRkMwMDgyOAkvKiBTUE9SVDAgUmVjZWl2ZSBDbG9jayBEaXZpZGVyCQkJCQkJKi8KKyNkZWZpbmUgU1BPUlQwX1JGU0RJVgkJMHhGRkMwMDgyQwkvKiBTUE9SVDAgUmVjZWl2ZSBGcmFtZSBTeW5jIERpdmlkZXIJCQkJKi8KKyNkZWZpbmUgU1BPUlQwX1NUQVQJCQkweEZGQzAwODMwCS8qIFNQT1JUMCBTdGF0dXMgUmVnaXN0ZXIJCQkJCQkJKi8KKyNkZWZpbmUgU1BPUlQwX0NITkwJCQkweEZGQzAwODM0CS8qIFNQT1JUMCBDdXJyZW50IENoYW5uZWwgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFNQT1JUMF9NQ01DMQkJMHhGRkMwMDgzOAkvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEJKi8KKyNkZWZpbmUgU1BPUlQwX01DTUMyCQkweEZGQzAwODNDCS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMgkqLworI2RlZmluZSBTUE9SVDBfTVRDUzAJCTB4RkZDMDA4NDAJLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDAJKi8KKyNkZWZpbmUgU1BPUlQwX01UQ1MxCQkweEZGQzAwODQ0CS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAxCSovCisjZGVmaW5lIFNQT1JUMF9NVENTMgkJMHhGRkMwMDg0OAkvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMgkqLworI2RlZmluZSBTUE9SVDBfTVRDUzMJCTB4RkZDMDA4NEMJLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDMJKi8KKyNkZWZpbmUgU1BPUlQwX01SQ1MwCQkweEZGQzAwODUwCS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDAJKi8KKyNkZWZpbmUgU1BPUlQwX01SQ1MxCQkweEZGQzAwODU0CS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDEJKi8KKyNkZWZpbmUgU1BPUlQwX01SQ1MyCQkweEZGQzAwODU4CS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDIJKi8KKyNkZWZpbmUgU1BPUlQwX01SQ1MzCQkweEZGQzAwODVDCS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDMJKi8KKworCisvKiBTUE9SVDEgQ29udHJvbGxlcgkJKDB4RkZDMDA5MDAgLSAweEZGQzAwOUZGKQkJCQkJCQkJCQkqLworI2RlZmluZSBTUE9SVDFfVENSMQkJCTB4RkZDMDA5MDAJLyogU1BPUlQxIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFNQT1JUMV9UQ1IyCQkJMHhGRkMwMDkwNAkvKiBTUE9SVDEgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgU1BPUlQxX1RDTEtESVYJCTB4RkZDMDA5MDgJLyogU1BPUlQxIFRyYW5zbWl0IENsb2NrIERpdmlkZXIJCQkJCSovCisjZGVmaW5lIFNQT1JUMV9URlNESVYJCTB4RkZDMDA5MEMJLyogU1BPUlQxIFRyYW5zbWl0IEZyYW1lIFN5bmMgRGl2aWRlcgkJCQkqLworI2RlZmluZSBTUE9SVDFfVFgJCQkweEZGQzAwOTEwCS8qIFNQT1JUMSBUWCBEYXRhIFJlZ2lzdGVyCQkJCQkJCSovCisjZGVmaW5lIFNQT1JUMV9SWAkJCTB4RkZDMDA5MTgJLyogU1BPUlQxIFJYIERhdGEgUmVnaXN0ZXIJCQkJCQkJKi8KKyNkZWZpbmUgU1BPUlQxX1JDUjEJCQkweEZGQzAwOTIwCS8qIFNQT1JUMSBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBTUE9SVDFfUkNSMgkJCTB4RkZDMDA5MjQJLyogU1BPUlQxIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFNQT1JUMV9SQ0xLRElWCQkweEZGQzAwOTI4CS8qIFNQT1JUMSBSZWNlaXZlIENsb2NrIERpdmlkZXIJCQkJCQkqLworI2RlZmluZSBTUE9SVDFfUkZTRElWCQkweEZGQzAwOTJDCS8qIFNQT1JUMSBSZWNlaXZlIEZyYW1lIFN5bmMgRGl2aWRlcgkJCQkqLworI2RlZmluZSBTUE9SVDFfU1RBVAkJCTB4RkZDMDA5MzAJLyogU1BPUlQxIFN0YXR1cyBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBTUE9SVDFfQ0hOTAkJCTB4RkZDMDA5MzQJLyogU1BPUlQxIEN1cnJlbnQgQ2hhbm5lbCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgU1BPUlQxX01DTUMxCQkweEZGQzAwOTM4CS8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQkqLworI2RlZmluZSBTUE9SVDFfTUNNQzIJCTB4RkZDMDA5M0MJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyCSovCisjZGVmaW5lIFNQT1JUMV9NVENTMAkJMHhGRkMwMDk0MAkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMAkqLworI2RlZmluZSBTUE9SVDFfTVRDUzEJCTB4RkZDMDA5NDQJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDEJKi8KKyNkZWZpbmUgU1BPUlQxX01UQ1MyCQkweEZGQzAwOTQ4CS8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAyCSovCisjZGVmaW5lIFNQT1JUMV9NVENTMwkJMHhGRkMwMDk0QwkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMwkqLworI2RlZmluZSBTUE9SVDFfTVJDUzAJCTB4RkZDMDA5NTAJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMAkqLworI2RlZmluZSBTUE9SVDFfTVJDUzEJCTB4RkZDMDA5NTQJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMQkqLworI2RlZmluZSBTUE9SVDFfTVJDUzIJCTB4RkZDMDA5NTgJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMgkqLworI2RlZmluZSBTUE9SVDFfTVJDUzMJCTB4RkZDMDA5NUMJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMwkqLworCisKKy8qIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgVW5pdCAoMHhGRkMwMEEwMCAtIDB4RkZDMDBBRkYpCQkJCQkJCQkqLworI2RlZmluZSBFQklVX0FNR0NUTAkJCTB4RkZDMDBBMDAJLyogQXN5bmNocm9ub3VzIE1lbW9yeSBHbG9iYWwgQ29udHJvbCBSZWdpc3RlcgkqLworI2RlZmluZSBFQklVX0FNQkNUTDAJCTB4RkZDMDBBMDQJLyogQXN5bmNocm9ub3VzIE1lbW9yeSBCYW5rIENvbnRyb2wgUmVnaXN0ZXIgMAkqLworI2RlZmluZSBFQklVX0FNQkNUTDEJCTB4RkZDMDBBMDgJLyogQXN5bmNocm9ub3VzIE1lbW9yeSBCYW5rIENvbnRyb2wgUmVnaXN0ZXIgMQkqLworI2RlZmluZSBFQklVX1NER0NUTAkJCTB4RkZDMDBBMTAJLyogU0RSQU0gR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRUJJVV9TREJDVEwJCQkweEZGQzAwQTE0CS8qIFNEUkFNIEJhbmsgQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRUJJVV9TRFJSQwkJCTB4RkZDMDBBMTgJLyogU0RSQU0gUmVmcmVzaCBSYXRlIENvbnRyb2wgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBFQklVX1NEU1RBVAkJCTB4RkZDMDBBMUMJLyogU0RSQU0gU3RhdHVzIFJlZ2lzdGVyCQkJCQkJKi8KKworCisvKiBETUEgVHJhZmZpYyBDb250cm9sIFJlZ2lzdGVycwkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBETUFDX1RDX1BFUgkJCTB4RkZDMDBCMEMJLyogVHJhZmZpYyBDb250cm9sIFBlcmlvZHMgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBETUFDX1RDX0NOVAkJCTB4RkZDMDBCMTAJLyogVHJhZmZpYyBDb250cm9sIEN1cnJlbnQgQ291bnRzIFJlZ2lzdGVyCSovCisKKy8qIERNQSBDb250cm9sbGVyICgweEZGQzAwQzAwIC0gMHhGRkMwMEZGRikJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBETUEwX05FWFRfREVTQ19QVFIJCTB4RkZDMDBDMDAJLyogRE1BIENoYW5uZWwgMCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgRE1BMF9TVEFSVF9BRERSCQkJMHhGRkMwMEMwNAkvKiBETUEgQ2hhbm5lbCAwIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTBfQ09ORklHCQkJCTB4RkZDMDBDMDgJLyogRE1BIENoYW5uZWwgMCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUEwX1hfQ09VTlQJCQkweEZGQzAwQzEwCS8qIERNQSBDaGFubmVsIDAgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTBfWF9NT0RJRlkJCQkweEZGQzAwQzE0CS8qIERNQSBDaGFubmVsIDAgWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEwX1lfQ09VTlQJCQkweEZGQzAwQzE4CS8qIERNQSBDaGFubmVsIDAgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTBfWV9NT0RJRlkJCQkweEZGQzAwQzFDCS8qIERNQSBDaGFubmVsIDAgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEwX0NVUlJfREVTQ19QVFIJCTB4RkZDMDBDMjAJLyogRE1BIENoYW5uZWwgMCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLworI2RlZmluZSBETUEwX0NVUlJfQUREUgkJCTB4RkZDMDBDMjQJLyogRE1BIENoYW5uZWwgMCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMF9JUlFfU1RBVFVTCQkJMHhGRkMwMEMyOAkvKiBETUEgQ2hhbm5lbCAwIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMF9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMEMyQwkvKiBETUEgQ2hhbm5lbCAwIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTBfQ1VSUl9YX0NPVU5UCQkweEZGQzAwQzMwCS8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTBfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwQzM4CS8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgRE1BMV9ORVhUX0RFU0NfUFRSCQkweEZGQzAwQzQwCS8qIERNQSBDaGFubmVsIDEgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTFfU1RBUlRfQUREUgkJCTB4RkZDMDBDNDQJLyogRE1BIENoYW5uZWwgMSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUExX0NPTkZJRwkJCQkweEZGQzAwQzQ4CS8qIERNQSBDaGFubmVsIDEgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BMV9YX0NPVU5UCQkJMHhGRkMwMEM1MAkvKiBETUEgQ2hhbm5lbCAxIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUExX1hfTU9ESUZZCQkJMHhGRkMwMEM1NAkvKiBETUEgQ2hhbm5lbCAxIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMV9ZX0NPVU5UCQkJMHhGRkMwMEM1OAkvKiBETUEgQ2hhbm5lbCAxIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUExX1lfTU9ESUZZCQkJMHhGRkMwMEM1QwkvKiBETUEgQ2hhbm5lbCAxIFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMV9DVVJSX0RFU0NfUFRSCQkweEZGQzAwQzYwCS8qIERNQSBDaGFubmVsIDEgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgRE1BMV9DVVJSX0FERFIJCQkweEZGQzAwQzY0CS8qIERNQSBDaGFubmVsIDEgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTFfSVJRX1NUQVRVUwkJCTB4RkZDMDBDNjgJLyogRE1BIENoYW5uZWwgMSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTFfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBDNkMJLyogRE1BIENoYW5uZWwgMSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExX0NVUlJfWF9DT1VOVAkJMHhGRkMwMEM3MAkvKiBETUEgQ2hhbm5lbCAxIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExX0NVUlJfWV9DT1VOVAkJMHhGRkMwMEM3OAkvKiBETUEgQ2hhbm5lbCAxIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIERNQTJfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEM4MAkvKiBETUEgQ2hhbm5lbCAyIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBETUEyX1NUQVJUX0FERFIJCQkweEZGQzAwQzg0CS8qIERNQSBDaGFubmVsIDIgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BMl9DT05GSUcJCQkJMHhGRkMwMEM4OAkvKiBETUEgQ2hhbm5lbCAyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTJfWF9DT1VOVAkJCTB4RkZDMDBDOTAJLyogRE1BIENoYW5uZWwgMiBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMl9YX01PRElGWQkJCTB4RkZDMDBDOTQJLyogRE1BIENoYW5uZWwgMiBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTJfWV9DT1VOVAkJCTB4RkZDMDBDOTgJLyogRE1BIENoYW5uZWwgMiBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMl9ZX01PRElGWQkJCTB4RkZDMDBDOUMJLyogRE1BIENoYW5uZWwgMiBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTJfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMENBMAkvKiBETUEgQ2hhbm5lbCAyIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIERNQTJfQ1VSUl9BRERSCQkJMHhGRkMwMENBNAkvKiBETUEgQ2hhbm5lbCAyIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUEyX0lSUV9TVEFUVVMJCQkweEZGQzAwQ0E4CS8qIERNQSBDaGFubmVsIDIgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUEyX1BFUklQSEVSQUxfTUFQCQkweEZGQzAwQ0FDCS8qIERNQSBDaGFubmVsIDIgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMl9DVVJSX1hfQ09VTlQJCTB4RkZDMDBDQjAJLyogRE1BIENoYW5uZWwgMiBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMl9DVVJSX1lfQ09VTlQJCTB4RkZDMDBDQjgJLyogRE1BIENoYW5uZWwgMiBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKworI2RlZmluZSBETUEzX05FWFRfREVTQ19QVFIJCTB4RkZDMDBDQzAJLyogRE1BIENoYW5uZWwgMyBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgRE1BM19TVEFSVF9BRERSCQkJMHhGRkMwMENDNAkvKiBETUEgQ2hhbm5lbCAzIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTNfQ09ORklHCQkJCTB4RkZDMDBDQzgJLyogRE1BIENoYW5uZWwgMyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUEzX1hfQ09VTlQJCQkweEZGQzAwQ0QwCS8qIERNQSBDaGFubmVsIDMgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTNfWF9NT0RJRlkJCQkweEZGQzAwQ0Q0CS8qIERNQSBDaGFubmVsIDMgWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEzX1lfQ09VTlQJCQkweEZGQzAwQ0Q4CS8qIERNQSBDaGFubmVsIDMgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTNfWV9NT0RJRlkJCQkweEZGQzAwQ0RDCS8qIERNQSBDaGFubmVsIDMgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEzX0NVUlJfREVTQ19QVFIJCTB4RkZDMDBDRTAJLyogRE1BIENoYW5uZWwgMyBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLworI2RlZmluZSBETUEzX0NVUlJfQUREUgkJCTB4RkZDMDBDRTQJLyogRE1BIENoYW5uZWwgMyBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BM19JUlFfU1RBVFVTCQkJMHhGRkMwMENFOAkvKiBETUEgQ2hhbm5lbCAzIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BM19QRVJJUEhFUkFMX01BUAkJMHhGRkMwMENFQwkvKiBETUEgQ2hhbm5lbCAzIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTNfQ1VSUl9YX0NPVU5UCQkweEZGQzAwQ0YwCS8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTNfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwQ0Y4CS8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgRE1BNF9ORVhUX0RFU0NfUFRSCQkweEZGQzAwRDAwCS8qIERNQSBDaGFubmVsIDQgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTRfU1RBUlRfQUREUgkJCTB4RkZDMDBEMDQJLyogRE1BIENoYW5uZWwgNCBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUE0X0NPTkZJRwkJCQkweEZGQzAwRDA4CS8qIERNQSBDaGFubmVsIDQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BNF9YX0NPVU5UCQkJMHhGRkMwMEQxMAkvKiBETUEgQ2hhbm5lbCA0IFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE0X1hfTU9ESUZZCQkJMHhGRkMwMEQxNAkvKiBETUEgQ2hhbm5lbCA0IFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BNF9ZX0NPVU5UCQkJMHhGRkMwMEQxOAkvKiBETUEgQ2hhbm5lbCA0IFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE0X1lfTU9ESUZZCQkJMHhGRkMwMEQxQwkvKiBETUEgQ2hhbm5lbCA0IFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BNF9DVVJSX0RFU0NfUFRSCQkweEZGQzAwRDIwCS8qIERNQSBDaGFubmVsIDQgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgRE1BNF9DVVJSX0FERFIJCQkweEZGQzAwRDI0CS8qIERNQSBDaGFubmVsIDQgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTRfSVJRX1NUQVRVUwkJCTB4RkZDMDBEMjgJLyogRE1BIENoYW5uZWwgNCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTRfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBEMkMJLyogRE1BIENoYW5uZWwgNCBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE0X0NVUlJfWF9DT1VOVAkJMHhGRkMwMEQzMAkvKiBETUEgQ2hhbm5lbCA0IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE0X0NVUlJfWV9DT1VOVAkJMHhGRkMwMEQzOAkvKiBETUEgQ2hhbm5lbCA0IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIERNQTVfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEQ0MAkvKiBETUEgQ2hhbm5lbCA1IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBETUE1X1NUQVJUX0FERFIJCQkweEZGQzAwRDQ0CS8qIERNQSBDaGFubmVsIDUgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BNV9DT05GSUcJCQkJMHhGRkMwMEQ0OAkvKiBETUEgQ2hhbm5lbCA1IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTVfWF9DT1VOVAkJCTB4RkZDMDBENTAJLyogRE1BIENoYW5uZWwgNSBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BNV9YX01PRElGWQkJCTB4RkZDMDBENTQJLyogRE1BIENoYW5uZWwgNSBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTVfWV9DT1VOVAkJCTB4RkZDMDBENTgJLyogRE1BIENoYW5uZWwgNSBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BNV9ZX01PRElGWQkJCTB4RkZDMDBENUMJLyogRE1BIENoYW5uZWwgNSBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTVfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMEQ2MAkvKiBETUEgQ2hhbm5lbCA1IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIERNQTVfQ1VSUl9BRERSCQkJMHhGRkMwMEQ2NAkvKiBETUEgQ2hhbm5lbCA1IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE1X0lSUV9TVEFUVVMJCQkweEZGQzAwRDY4CS8qIERNQSBDaGFubmVsIDUgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE1X1BFUklQSEVSQUxfTUFQCQkweEZGQzAwRDZDCS8qIERNQSBDaGFubmVsIDUgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BNV9DVVJSX1hfQ09VTlQJCTB4RkZDMDBENzAJLyogRE1BIENoYW5uZWwgNSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BNV9DVVJSX1lfQ09VTlQJCTB4RkZDMDBENzgJLyogRE1BIENoYW5uZWwgNSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKworI2RlZmluZSBETUE2X05FWFRfREVTQ19QVFIJCTB4RkZDMDBEODAJLyogRE1BIENoYW5uZWwgNiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgRE1BNl9TVEFSVF9BRERSCQkJMHhGRkMwMEQ4NAkvKiBETUEgQ2hhbm5lbCA2IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTZfQ09ORklHCQkJCTB4RkZDMDBEODgJLyogRE1BIENoYW5uZWwgNiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUE2X1hfQ09VTlQJCQkweEZGQzAwRDkwCS8qIERNQSBDaGFubmVsIDYgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTZfWF9NT0RJRlkJCQkweEZGQzAwRDk0CS8qIERNQSBDaGFubmVsIDYgWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE2X1lfQ09VTlQJCQkweEZGQzAwRDk4CS8qIERNQSBDaGFubmVsIDYgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTZfWV9NT0RJRlkJCQkweEZGQzAwRDlDCS8qIERNQSBDaGFubmVsIDYgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE2X0NVUlJfREVTQ19QVFIJCTB4RkZDMDBEQTAJLyogRE1BIENoYW5uZWwgNiBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLworI2RlZmluZSBETUE2X0NVUlJfQUREUgkJCTB4RkZDMDBEQTQJLyogRE1BIENoYW5uZWwgNiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BNl9JUlFfU1RBVFVTCQkJMHhGRkMwMERBOAkvKiBETUEgQ2hhbm5lbCA2IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BNl9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMERBQwkvKiBETUEgQ2hhbm5lbCA2IFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTZfQ1VSUl9YX0NPVU5UCQkweEZGQzAwREIwCS8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTZfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwREI4CS8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgRE1BN19ORVhUX0RFU0NfUFRSCQkweEZGQzAwREMwCS8qIERNQSBDaGFubmVsIDcgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTdfU1RBUlRfQUREUgkJCTB4RkZDMDBEQzQJLyogRE1BIENoYW5uZWwgNyBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUE3X0NPTkZJRwkJCQkweEZGQzAwREM4CS8qIERNQSBDaGFubmVsIDcgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BN19YX0NPVU5UCQkJMHhGRkMwMEREMAkvKiBETUEgQ2hhbm5lbCA3IFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE3X1hfTU9ESUZZCQkJMHhGRkMwMERENAkvKiBETUEgQ2hhbm5lbCA3IFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BN19ZX0NPVU5UCQkJMHhGRkMwMEREOAkvKiBETUEgQ2hhbm5lbCA3IFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE3X1lfTU9ESUZZCQkJMHhGRkMwMEREQwkvKiBETUEgQ2hhbm5lbCA3IFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BN19DVVJSX0RFU0NfUFRSCQkweEZGQzAwREUwCS8qIERNQSBDaGFubmVsIDcgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgRE1BN19DVVJSX0FERFIJCQkweEZGQzAwREU0CS8qIERNQSBDaGFubmVsIDcgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTdfSVJRX1NUQVRVUwkJCTB4RkZDMDBERTgJLyogRE1BIENoYW5uZWwgNyBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTdfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBERUMJLyogRE1BIENoYW5uZWwgNyBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE3X0NVUlJfWF9DT1VOVAkJMHhGRkMwMERGMAkvKiBETUEgQ2hhbm5lbCA3IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE3X0NVUlJfWV9DT1VOVAkJMHhGRkMwMERGOAkvKiBETUEgQ2hhbm5lbCA3IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIERNQThfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEUwMAkvKiBETUEgQ2hhbm5lbCA4IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBETUE4X1NUQVJUX0FERFIJCQkweEZGQzAwRTA0CS8qIERNQSBDaGFubmVsIDggU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BOF9DT05GSUcJCQkJMHhGRkMwMEUwOAkvKiBETUEgQ2hhbm5lbCA4IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQThfWF9DT1VOVAkJCTB4RkZDMDBFMTAJLyogRE1BIENoYW5uZWwgOCBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BOF9YX01PRElGWQkJCTB4RkZDMDBFMTQJLyogRE1BIENoYW5uZWwgOCBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQThfWV9DT1VOVAkJCTB4RkZDMDBFMTgJLyogRE1BIENoYW5uZWwgOCBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BOF9ZX01PRElGWQkJCTB4RkZDMDBFMUMJLyogRE1BIENoYW5uZWwgOCBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQThfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMEUyMAkvKiBETUEgQ2hhbm5lbCA4IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIERNQThfQ1VSUl9BRERSCQkJMHhGRkMwMEUyNAkvKiBETUEgQ2hhbm5lbCA4IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE4X0lSUV9TVEFUVVMJCQkweEZGQzAwRTI4CS8qIERNQSBDaGFubmVsIDggSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE4X1BFUklQSEVSQUxfTUFQCQkweEZGQzAwRTJDCS8qIERNQSBDaGFubmVsIDggUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BOF9DVVJSX1hfQ09VTlQJCTB4RkZDMDBFMzAJLyogRE1BIENoYW5uZWwgOCBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BOF9DVVJSX1lfQ09VTlQJCTB4RkZDMDBFMzgJLyogRE1BIENoYW5uZWwgOCBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKworI2RlZmluZSBETUE5X05FWFRfREVTQ19QVFIJCTB4RkZDMDBFNDAJLyogRE1BIENoYW5uZWwgOSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgRE1BOV9TVEFSVF9BRERSCQkJMHhGRkMwMEU0NAkvKiBETUEgQ2hhbm5lbCA5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTlfQ09ORklHCQkJCTB4RkZDMDBFNDgJLyogRE1BIENoYW5uZWwgOSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUE5X1hfQ09VTlQJCQkweEZGQzAwRTUwCS8qIERNQSBDaGFubmVsIDkgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTlfWF9NT0RJRlkJCQkweEZGQzAwRTU0CS8qIERNQSBDaGFubmVsIDkgWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE5X1lfQ09VTlQJCQkweEZGQzAwRTU4CS8qIERNQSBDaGFubmVsIDkgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTlfWV9NT0RJRlkJCQkweEZGQzAwRTVDCS8qIERNQSBDaGFubmVsIDkgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE5X0NVUlJfREVTQ19QVFIJCTB4RkZDMDBFNjAJLyogRE1BIENoYW5uZWwgOSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLworI2RlZmluZSBETUE5X0NVUlJfQUREUgkJCTB4RkZDMDBFNjQJLyogRE1BIENoYW5uZWwgOSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BOV9JUlFfU1RBVFVTCQkJMHhGRkMwMEU2OAkvKiBETUEgQ2hhbm5lbCA5IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BOV9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMEU2QwkvKiBETUEgQ2hhbm5lbCA5IFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTlfQ1VSUl9YX0NPVU5UCQkweEZGQzAwRTcwCS8qIERNQSBDaGFubmVsIDkgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTlfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRTc4CS8qIERNQSBDaGFubmVsIDkgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgRE1BMTBfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEU4MAkvKiBETUEgQ2hhbm5lbCAxMCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgRE1BMTBfU1RBUlRfQUREUgkJMHhGRkMwMEU4NAkvKiBETUEgQ2hhbm5lbCAxMCBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTEwX0NPTkZJRwkJCTB4RkZDMDBFODgJLyogRE1BIENoYW5uZWwgMTAgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExMF9YX0NPVU5UCQkJMHhGRkMwMEU5MAkvKiBETUEgQ2hhbm5lbCAxMCBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMTBfWF9NT0RJRlkJCQkweEZGQzAwRTk0CS8qIERNQSBDaGFubmVsIDEwIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMTBfWV9DT1VOVAkJCTB4RkZDMDBFOTgJLyogRE1BIENoYW5uZWwgMTAgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTEwX1lfTU9ESUZZCQkJMHhGRkMwMEU5QwkvKiBETUEgQ2hhbm5lbCAxMCBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTEwX0NVUlJfREVTQ19QVFIJCTB4RkZDMDBFQTAJLyogRE1BIENoYW5uZWwgMTAgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgRE1BMTBfQ1VSUl9BRERSCQkJMHhGRkMwMEVBNAkvKiBETUEgQ2hhbm5lbCAxMCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMTBfSVJRX1NUQVRVUwkJMHhGRkMwMEVBOAkvKiBETUEgQ2hhbm5lbCAxMCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTEwX1BFUklQSEVSQUxfTUFQCTB4RkZDMDBFQUMJLyogRE1BIENoYW5uZWwgMTAgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMTBfQ1VSUl9YX0NPVU5UCQkweEZGQzAwRUIwCS8qIERNQSBDaGFubmVsIDEwIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExMF9DVVJSX1lfQ09VTlQJCTB4RkZDMDBFQjgJLyogRE1BIENoYW5uZWwgMTAgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgRE1BMTFfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEVDMAkvKiBETUEgQ2hhbm5lbCAxMSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgRE1BMTFfU1RBUlRfQUREUgkJMHhGRkMwMEVDNAkvKiBETUEgQ2hhbm5lbCAxMSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTExX0NPTkZJRwkJCTB4RkZDMDBFQzgJLyogRE1BIENoYW5uZWwgMTEgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExMV9YX0NPVU5UCQkJMHhGRkMwMEVEMAkvKiBETUEgQ2hhbm5lbCAxMSBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMTFfWF9NT0RJRlkJCQkweEZGQzAwRUQ0CS8qIERNQSBDaGFubmVsIDExIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMTFfWV9DT1VOVAkJCTB4RkZDMDBFRDgJLyogRE1BIENoYW5uZWwgMTEgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTExX1lfTU9ESUZZCQkJMHhGRkMwMEVEQwkvKiBETUEgQ2hhbm5lbCAxMSBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTExX0NVUlJfREVTQ19QVFIJCTB4RkZDMDBFRTAJLyogRE1BIENoYW5uZWwgMTEgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgRE1BMTFfQ1VSUl9BRERSCQkJMHhGRkMwMEVFNAkvKiBETUEgQ2hhbm5lbCAxMSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMTFfSVJRX1NUQVRVUwkJMHhGRkMwMEVFOAkvKiBETUEgQ2hhbm5lbCAxMSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTExX1BFUklQSEVSQUxfTUFQCTB4RkZDMDBFRUMJLyogRE1BIENoYW5uZWwgMTEgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMTFfQ1VSUl9YX0NPVU5UCQkweEZGQzAwRUYwCS8qIERNQSBDaGFubmVsIDExIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExMV9DVVJSX1lfQ09VTlQJCTB4RkZDMDBFRjgJLyogRE1BIENoYW5uZWwgMTEgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgTURNQV9EMF9ORVhUX0RFU0NfUFRSCTB4RkZDMDBGMDAJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBNRE1BX0QwX1NUQVJUX0FERFIJCTB4RkZDMDBGMDQJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgTURNQV9EMF9DT05GSUcJCQkweEZGQzAwRjA4CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIE1ETUFfRDBfWF9DT1VOVAkJCTB4RkZDMDBGMTAJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBNRE1BX0QwX1hfTU9ESUZZCQkweEZGQzAwRjE0CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgTURNQV9EMF9ZX0NPVU5UCQkJMHhGRkMwMEYxOAkvKiBNZW1ETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIE1ETUFfRDBfWV9NT0RJRlkJCTB4RkZDMDBGMUMJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBNRE1BX0QwX0NVUlJfREVTQ19QVFIJMHhGRkMwMEYyMAkvKiBNZW1ETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgTURNQV9EMF9DVVJSX0FERFIJCTB4RkZDMDBGMjQJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBNRE1BX0QwX0lSUV9TVEFUVVMJCTB4RkZDMDBGMjgJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBNRE1BX0QwX1BFUklQSEVSQUxfTUFQCTB4RkZDMDBGMkMJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIE1ETUFfRDBfQ1VSUl9YX0NPVU5UCTB4RkZDMDBGMzAJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBNRE1BX0QwX0NVUlJfWV9DT1VOVAkweEZGQzAwRjM4CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKworI2RlZmluZSBNRE1BX1MwX05FWFRfREVTQ19QVFIJMHhGRkMwMEY0MAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgTURNQV9TMF9TVEFSVF9BRERSCQkweEZGQzAwRjQ0CS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgTURNQV9TMF9DT05GSUcJCQkweEZGQzAwRjQ4CS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgTURNQV9TMF9YX0NPVU5UCQkJMHhGRkMwMEY1MAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkJKi8KKyNkZWZpbmUgTURNQV9TMF9YX01PRElGWQkJMHhGRkMwMEY1NAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJCSovCisjZGVmaW5lIE1ETUFfUzBfWV9DT1VOVAkJCTB4RkZDMDBGNTgJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBZIENvdW50IFJlZ2lzdGVyCQkJCQkJCSovCisjZGVmaW5lIE1ETUFfUzBfWV9NT0RJRlkJCTB4RkZDMDBGNUMJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBNRE1BX1MwX0NVUlJfREVTQ19QVFIJMHhGRkMwMEY2MAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBNRE1BX1MwX0NVUlJfQUREUgkJMHhGRkMwMEY2NAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgTURNQV9TMF9JUlFfU1RBVFVTCQkweEZGQzAwRjY4CS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgTURNQV9TMF9QRVJJUEhFUkFMX01BUAkweEZGQzAwRjZDCS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzBfQ1VSUl9YX0NPVU5UCTB4RkZDMDBGNzAJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzBfQ1VSUl9ZX0NPVU5UCTB4RkZDMDBGNzgJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJCSovCisKKyNkZWZpbmUgTURNQV9EMV9ORVhUX0RFU0NfUFRSCTB4RkZDMDBGODAJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBNRE1BX0QxX1NUQVJUX0FERFIJCTB4RkZDMDBGODQJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgTURNQV9EMV9DT05GSUcJCQkweEZGQzAwRjg4CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIE1ETUFfRDFfWF9DT1VOVAkJCTB4RkZDMDBGOTAJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBNRE1BX0QxX1hfTU9ESUZZCQkweEZGQzAwRjk0CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgTURNQV9EMV9ZX0NPVU5UCQkJMHhGRkMwMEY5OAkvKiBNZW1ETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIE1ETUFfRDFfWV9NT0RJRlkJCTB4RkZDMDBGOUMJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBNRE1BX0QxX0NVUlJfREVTQ19QVFIJMHhGRkMwMEZBMAkvKiBNZW1ETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgTURNQV9EMV9DVVJSX0FERFIJCTB4RkZDMDBGQTQJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBNRE1BX0QxX0lSUV9TVEFUVVMJCTB4RkZDMDBGQTgJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBNRE1BX0QxX1BFUklQSEVSQUxfTUFQCTB4RkZDMDBGQUMJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIE1ETUFfRDFfQ1VSUl9YX0NPVU5UCTB4RkZDMDBGQjAJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBNRE1BX0QxX0NVUlJfWV9DT1VOVAkweEZGQzAwRkI4CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKworI2RlZmluZSBNRE1BX1MxX05FWFRfREVTQ19QVFIJMHhGRkMwMEZDMAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgTURNQV9TMV9TVEFSVF9BRERSCQkweEZGQzAwRkM0CS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgTURNQV9TMV9DT05GSUcJCQkweEZGQzAwRkM4CS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgTURNQV9TMV9YX0NPVU5UCQkJMHhGRkMwMEZEMAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkJKi8KKyNkZWZpbmUgTURNQV9TMV9YX01PRElGWQkJMHhGRkMwMEZENAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJCSovCisjZGVmaW5lIE1ETUFfUzFfWV9DT1VOVAkJCTB4RkZDMDBGRDgJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBZIENvdW50IFJlZ2lzdGVyCQkJCQkJCSovCisjZGVmaW5lIE1ETUFfUzFfWV9NT0RJRlkJCTB4RkZDMDBGREMJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBNRE1BX1MxX0NVUlJfREVTQ19QVFIJMHhGRkMwMEZFMAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBNRE1BX1MxX0NVUlJfQUREUgkJMHhGRkMwMEZFNAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgTURNQV9TMV9JUlFfU1RBVFVTCQkweEZGQzAwRkU4CS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgTURNQV9TMV9QRVJJUEhFUkFMX01BUAkweEZGQzAwRkVDCS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzFfQ1VSUl9YX0NPVU5UCTB4RkZDMDBGRjAJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzFfQ1VSUl9ZX0NPVU5UCTB4RkZDMDBGRjgJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJCSovCisKKworLyogUGFyYWxsZWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKDB4RkZDMDEwMDAgLSAweEZGQzAxMEZGKQkJCQkqLworI2RlZmluZSBQUElfQ09OVFJPTAkJCTB4RkZDMDEwMDAJLyogUFBJIENvbnRyb2wgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQUElfU1RBVFVTCQkJMHhGRkMwMTAwNAkvKiBQUEkgU3RhdHVzIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUFBJX0NPVU5UCQkJMHhGRkMwMTAwOAkvKiBQUEkgVHJhbnNmZXIgQ291bnQgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUFBJX0RFTEFZCQkJMHhGRkMwMTAwQwkvKiBQUEkgRGVsYXkgQ291bnQgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFBQSV9GUkFNRQkJCTB4RkZDMDEwMTAJLyogUFBJIEZyYW1lIExlbmd0aCBSZWdpc3RlcgkqLworCisKKy8qIFR3by1XaXJlIEludGVyZmFjZQkJKDB4RkZDMDE0MDAgLSAweEZGQzAxNEZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgVFdJMF9SRUdCQVNFCQkJMHhGRkMwMTQwMAorI2RlZmluZSBUV0kwX0NMS0RJVgkJCTB4RkZDMDE0MDAJLyogU2VyaWFsIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBUV0kwX0NPTlRST0wJCQkweEZGQzAxNDA0CS8qIFRXSSBDb250cm9sIFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgVFdJMF9TTEFWRV9DVEwJCTB4RkZDMDE0MDgJLyogU2xhdmUgTW9kZSBDb250cm9sIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFRXSTBfU0xBVkVfU1RBVAkJMHhGRkMwMTQwQwkvKiBTbGF2ZSBNb2RlIFN0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBUV0kwX1NMQVZFX0FERFIJCTB4RkZDMDE0MTAJLyogU2xhdmUgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFRXSTBfTUFTVEVSX0NUTAkJMHhGRkMwMTQxNAkvKiBNYXN0ZXIgTW9kZSBDb250cm9sIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFRXSTBfTUFTVEVSX1NUQVQJCTB4RkZDMDE0MTgJLyogTWFzdGVyIE1vZGUgU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFRXSTBfTUFTVEVSX0FERFIJCTB4RkZDMDE0MUMJLyogTWFzdGVyIE1vZGUgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBUV0kwX0lOVF9TVEFUCQkweEZGQzAxNDIwCS8qIFRXSSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgVFdJMF9JTlRfTUFTSwkJMHhGRkMwMTQyNAkvKiBUV0kgTWFzdGVyIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyCQkqLworI2RlZmluZSBUV0kwX0ZJRk9fQ1RMCQkweEZGQzAxNDI4CS8qIEZJRk8gQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVFdJMF9GSUZPX1NUQVQJCTB4RkZDMDE0MkMJLyogRklGTyBTdGF0dXMgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBUV0kwX1hNVF9EQVRBOAkJMHhGRkMwMTQ4MAkvKiBGSUZPIFRyYW5zbWl0IERhdGEgU2luZ2xlIEJ5dGUgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgVFdJMF9YTVRfREFUQTE2CQkweEZGQzAxNDg0CS8qIEZJRk8gVHJhbnNtaXQgRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlcgkqLworI2RlZmluZSBUV0kwX1JDVl9EQVRBOAkJMHhGRkMwMTQ4OAkvKiBGSUZPIFJlY2VpdmUgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlcgkqLworI2RlZmluZSBUV0kwX1JDVl9EQVRBMTYJCTB4RkZDMDE0OEMJLyogRklGTyBSZWNlaXZlIERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIJKi8KKworCisvKiBHZW5lcmFsIFB1cnBvc2UgSS9PIFBvcnQgRyAoMHhGRkMwMTUwMCAtIDB4RkZDMDE1RkYpCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgUE9SVEdJTwkJCQkJMHhGRkMwMTUwMAkvKiBQb3J0IEcgSS9PIFBpbiBTdGF0ZSBTcGVjaWZ5IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFBPUlRHSU9fQ0xFQVIJCQkweEZGQzAxNTA0CS8qIFBvcnQgRyBJL08gUGVyaXBoZXJhbCBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFBPUlRHSU9fU0VUCQkJCTB4RkZDMDE1MDgJLyogUG9ydCBHIEkvTyBQZXJpcGhlcmFsIEludGVycnVwdCBTZXQgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JUR0lPX1RPR0dMRQkJCTB4RkZDMDE1MEMJLyogUG9ydCBHIEkvTyBQaW4gU3RhdGUgVG9nZ2xlIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBQT1JUR0lPX01BU0tBCQkJMHhGRkMwMTUxMAkvKiBQb3J0IEcgSS9PIE1hc2sgU3RhdGUgU3BlY2lmeSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkqLworI2RlZmluZSBQT1JUR0lPX01BU0tBX0NMRUFSCQkweEZGQzAxNTE0CS8qIFBvcnQgRyBJL08gTWFzayBEaXNhYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUE9SVEdJT19NQVNLQV9TRVQJCTB4RkZDMDE1MTgJLyogUG9ydCBHIEkvTyBNYXNrIEVuYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRHSU9fTUFTS0FfVE9HR0xFCTB4RkZDMDE1MUMJLyogUG9ydCBHIEkvTyBNYXNrIFRvZ2dsZSBFbmFibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUE9SVEdJT19NQVNLQgkJCTB4RkZDMDE1MjAJLyogUG9ydCBHIEkvTyBNYXNrIFN0YXRlIFNwZWNpZnkgSW50ZXJydXB0IEIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUE9SVEdJT19NQVNLQl9DTEVBUgkJMHhGRkMwMTUyNAkvKiBQb3J0IEcgSS9PIE1hc2sgRGlzYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRHSU9fTUFTS0JfU0VUCQkweEZGQzAxNTI4CS8qIFBvcnQgRyBJL08gTWFzayBFbmFibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JUR0lPX01BU0tCX1RPR0dMRQkweEZGQzAxNTJDCS8qIFBvcnQgRyBJL08gTWFzayBUb2dnbGUgRW5hYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCSovCisjZGVmaW5lIFBPUlRHSU9fRElSCQkJCTB4RkZDMDE1MzAJLyogUG9ydCBHIEkvTyBEaXJlY3Rpb24gUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBQT1JUR0lPX1BPTEFSCQkJMHhGRkMwMTUzNAkvKiBQb3J0IEcgSS9PIFNvdXJjZSBQb2xhcml0eSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgUE9SVEdJT19FREdFCQkJMHhGRkMwMTUzOAkvKiBQb3J0IEcgSS9PIFNvdXJjZSBTZW5zaXRpdml0eSBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBQT1JUR0lPX0JPVEgJCQkweEZGQzAxNTNDCS8qIFBvcnQgRyBJL08gU2V0IG9uIEJPVEggRWRnZXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgUE9SVEdJT19JTkVOCQkJMHhGRkMwMTU0MAkvKiBQb3J0IEcgSS9PIElucHV0IEVuYWJsZSBSZWdpc3RlcgkJCQkJCSovCisKKworLyogR2VuZXJhbCBQdXJwb3NlIEkvTyBQb3J0IEggKDB4RkZDMDE3MDAgLSAweEZGQzAxN0ZGKQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFBPUlRISU8JCQkJCTB4RkZDMDE3MDAJLyogUG9ydCBIIEkvTyBQaW4gU3RhdGUgU3BlY2lmeSBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBQT1JUSElPX0NMRUFSCQkJMHhGRkMwMTcwNAkvKiBQb3J0IEggSS9PIFBlcmlwaGVyYWwgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBQT1JUSElPX1NFVAkJCQkweEZGQzAxNzA4CS8qIFBvcnQgSCBJL08gUGVyaXBoZXJhbCBJbnRlcnJ1cHQgU2V0IFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUE9SVEhJT19UT0dHTEUJCQkweEZGQzAxNzBDCS8qIFBvcnQgSCBJL08gUGluIFN0YXRlIFRvZ2dsZSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgUE9SVEhJT19NQVNLQQkJCTB4RkZDMDE3MTAJLyogUG9ydCBIIEkvTyBNYXNrIFN0YXRlIFNwZWNpZnkgSW50ZXJydXB0IEEgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUE9SVEhJT19NQVNLQV9DTEVBUgkJMHhGRkMwMTcxNAkvKiBQb3J0IEggSS9PIE1hc2sgRGlzYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRISU9fTUFTS0FfU0VUCQkweEZGQzAxNzE4CS8qIFBvcnQgSCBJL08gTWFzayBFbmFibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JUSElPX01BU0tBX1RPR0dMRQkweEZGQzAxNzFDCS8qIFBvcnQgSCBJL08gTWFzayBUb2dnbGUgRW5hYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCSovCisjZGVmaW5lIFBPUlRISU9fTUFTS0IJCQkweEZGQzAxNzIwCS8qIFBvcnQgSCBJL08gTWFzayBTdGF0ZSBTcGVjaWZ5IEludGVycnVwdCBCIFJlZ2lzdGVyCSovCisjZGVmaW5lIFBPUlRISU9fTUFTS0JfQ0xFQVIJCTB4RkZDMDE3MjQJLyogUG9ydCBIIEkvTyBNYXNrIERpc2FibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JUSElPX01BU0tCX1NFVAkJMHhGRkMwMTcyOAkvKiBQb3J0IEggSS9PIE1hc2sgRW5hYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUE9SVEhJT19NQVNLQl9UT0dHTEUJMHhGRkMwMTcyQwkvKiBQb3J0IEggSS9PIE1hc2sgVG9nZ2xlIEVuYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkqLworI2RlZmluZSBQT1JUSElPX0RJUgkJCQkweEZGQzAxNzMwCS8qIFBvcnQgSCBJL08gRGlyZWN0aW9uIFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgUE9SVEhJT19QT0xBUgkJCTB4RkZDMDE3MzQJLyogUG9ydCBIIEkvTyBTb3VyY2UgUG9sYXJpdHkgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFBPUlRISU9fRURHRQkJCTB4RkZDMDE3MzgJLyogUG9ydCBIIEkvTyBTb3VyY2UgU2Vuc2l0aXZpdHkgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgUE9SVEhJT19CT1RICQkJMHhGRkMwMTczQwkvKiBQb3J0IEggSS9PIFNldCBvbiBCT1RIIEVkZ2VzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFBPUlRISU9fSU5FTgkJCTB4RkZDMDE3NDAJLyogUG9ydCBIIEkvTyBJbnB1dCBFbmFibGUgUmVnaXN0ZXIJCQkJCQkqLworCisKKy8qIFVBUlQxIENvbnRyb2xsZXIJCSgweEZGQzAyMDAwIC0gMHhGRkMwMjBGRikJCQkJCQkJCSovCisjZGVmaW5lIFVBUlQxX1RIUgkJCTB4RkZDMDIwMDAJLyogVHJhbnNtaXQgSG9sZGluZyByZWdpc3RlcgkJCSovCisjZGVmaW5lIFVBUlQxX1JCUgkJCTB4RkZDMDIwMDAJLyogUmVjZWl2ZSBCdWZmZXIgcmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgVUFSVDFfRExMCQkJMHhGRkMwMjAwMAkvKiBEaXZpc29yIExhdGNoIChMb3ctQnl0ZSkJCQkJKi8KKyNkZWZpbmUgVUFSVDFfSUVSCQkJMHhGRkMwMjAwNAkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgVUFSVDFfRExICQkJMHhGRkMwMjAwNAkvKiBEaXZpc29yIExhdGNoIChIaWdoLUJ5dGUpCQkJKi8KKyNkZWZpbmUgVUFSVDFfSUlSCQkJMHhGRkMwMjAwOAkvKiBJbnRlcnJ1cHQgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIJKi8KKyNkZWZpbmUgVUFSVDFfTENSCQkJMHhGRkMwMjAwQwkvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgVUFSVDFfTUNSCQkJMHhGRkMwMjAxMAkvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFVBUlQxX0xTUgkJCTB4RkZDMDIwMTQJLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFVBUlQxX01TUgkJCTB4RkZDMDIwMTgJLyogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFVBUlQxX1NDUgkJCTB4RkZDMDIwMUMJLyogU0NSIFNjcmF0Y2ggUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFVBUlQxX0dDVEwJCQkweEZGQzAyMDI0CS8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyCQkJCSovCisKKworLyogT21pdCBDQU4gcmVnaXN0ZXIgc2V0cyBmcm9tIHRoZSBkZWZCRjUzNC5oIChDQU4gaXMgbm90IGluIHRoZSBBRFNQLUJGNTJ4IHByb2Nlc3NvcikgKi8KKworLyogUGluIENvbnRyb2wgUmVnaXN0ZXJzCSgweEZGQzAzMjAwIC0gMHhGRkMwMzJGRikJCQkJCQkJCQkJCSovCisjZGVmaW5lIFBPUlRGX0ZFUgkJCTB4RkZDMDMyMDAJLyogUG9ydCBGIEZ1bmN0aW9uIEVuYWJsZSBSZWdpc3RlciAoQWx0ZXJuYXRlL0ZsYWcqKQkqLworI2RlZmluZSBQT1JUR19GRVIJCQkweEZGQzAzMjA0CS8qIFBvcnQgRyBGdW5jdGlvbiBFbmFibGUgUmVnaXN0ZXIgKEFsdGVybmF0ZS9GbGFnKikJKi8KKyNkZWZpbmUgUE9SVEhfRkVSCQkJMHhGRkMwMzIwOAkvKiBQb3J0IEggRnVuY3Rpb24gRW5hYmxlIFJlZ2lzdGVyIChBbHRlcm5hdGUvRmxhZyopCSovCisjZGVmaW5lIEJGSU5fUE9SVF9NVVgJCQkweEZGQzAzMjBDCS8qIFBvcnQgTXVsdGlwbGV4ZXIgQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KKworCisvKiBIYW5kc2hha2UgTURNQSBSZWdpc3RlcnMJKDB4RkZDMDMzMDAgLSAweEZGQzAzM0ZGKQkJCQkJCQkJCQkqLworI2RlZmluZSBITURNQTBfQ09OVFJPTAkJMHhGRkMwMzMwMAkvKiBIYW5kc2hha2UgTURNQTAgQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgSE1ETUEwX0VDSU5JVAkJMHhGRkMwMzMwNAkvKiBITURNQTAgSW5pdGlhbCBFZGdlIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIEhNRE1BMF9CQ0lOSVQJCTB4RkZDMDMzMDgJLyogSE1ETUEwIEluaXRpYWwgQmxvY2sgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgSE1ETUEwX0VDVVJHRU5UCQkweEZGQzAzMzBDCS8qIEhNRE1BMCBVcmdlbnQgRWRnZSBDb3VudCBUaHJlc2hvbGQgUmVnaXN0ZXIJCSovCisjZGVmaW5lIEhNRE1BMF9FQ09WRVJGTE9XCTB4RkZDMDMzMTAJLyogSE1ETUEwIEVkZ2UgQ291bnQgT3ZlcmZsb3cgSW50ZXJydXB0IFJlZ2lzdGVyCSovCisjZGVmaW5lIEhNRE1BMF9FQ09VTlQJCTB4RkZDMDMzMTQJLyogSE1ETUEwIEN1cnJlbnQgRWRnZSBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBITURNQTBfQkNPVU5UCQkweEZGQzAzMzE4CS8qIEhNRE1BMCBDdXJyZW50IEJsb2NrIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgSE1ETUExX0NPTlRST0wJCTB4RkZDMDMzNDAJLyogSGFuZHNoYWtlIE1ETUExIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIEhNRE1BMV9FQ0lOSVQJCTB4RkZDMDMzNDQJLyogSE1ETUExIEluaXRpYWwgRWRnZSBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBITURNQTFfQkNJTklUCQkweEZGQzAzMzQ4CS8qIEhNRE1BMSBJbml0aWFsIEJsb2NrIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIEhNRE1BMV9FQ1VSR0VOVAkJMHhGRkMwMzM0QwkvKiBITURNQTEgVXJnZW50IEVkZ2UgQ291bnQgVGhyZXNob2xkIFJlZ2lzdGVyCQkqLworI2RlZmluZSBITURNQTFfRUNPVkVSRkxPVwkweEZGQzAzMzUwCS8qIEhNRE1BMSBFZGdlIENvdW50IE92ZXJmbG93IEludGVycnVwdCBSZWdpc3RlcgkqLworI2RlZmluZSBITURNQTFfRUNPVU5UCQkweEZGQzAzMzU0CS8qIEhNRE1BMSBDdXJyZW50IEVkZ2UgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgSE1ETUExX0JDT1VOVAkJMHhGRkMwMzM1OAkvKiBITURNQTEgQ3VycmVudCBCbG9jayBDb3VudCBSZWdpc3RlcgkJCQkqLworCisvKiBHUElPIFBJTiBtdXggKDB4RkZDMDMyMTAgLSBPeEZGQzAzMjg4KSAqLworI2RlZmluZSBQT1JURl9NVVggICAgICAgICAgICAgICAweEZGQzAzMjEwICAgICAgLyogUG9ydCBGIG11eCBjb250cm9sICovCisjZGVmaW5lIFBPUlRHX01VWCAgICAgICAgICAgICAgIDB4RkZDMDMyMTQgICAgICAvKiBQb3J0IEcgbXV4IGNvbnRyb2wgKi8KKyNkZWZpbmUgUE9SVEhfTVVYICAgICAgICAgICAgICAgMHhGRkMwMzIxOCAgICAgIC8qIFBvcnQgSCBtdXggY29udHJvbCAqLworI2RlZmluZSBQT1JURl9EUklWRSAgICAgICAgICAgICAweEZGQzAzMjIwICAgICAgLyogUG9ydCBGIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgKi8KKyNkZWZpbmUgUE9SVEdfRFJJVkUgICAgICAgICAgICAgMHhGRkMwMzIyNCAgICAgIC8qIFBvcnQgRyBkcml2ZSBzdHJlbmd0aCBjb250cm9sICovCisjZGVmaW5lIFBPUlRIX0RSSVZFICAgICAgICAgICAgIDB4RkZDMDMyMjggICAgICAvKiBQb3J0IEggZHJpdmUgc3RyZW5ndGggY29udHJvbCAqLworI2RlZmluZSBQT1JURl9TTEVXICAgICAgICAgICAgICAweEZGQzAzMjMwICAgICAgLyogUG9ydCBGIHNsZXcgY29udHJvbCAqLworI2RlZmluZSBQT1JUR19TTEVXICAgICAgICAgICAgICAweEZGQzAzMjM0ICAgICAgLyogUG9ydCBHIHNsZXcgY29udHJvbCAqLworI2RlZmluZSBQT1JUSF9TTEVXICAgICAgICAgICAgICAweEZGQzAzMjM4ICAgICAgLyogUG9ydCBIIHNsZXcgY29udHJvbCAqLworI2RlZmluZSBQT1JURl9IWVNURVJJU0lTICAgICAgICAweEZGQzAzMjQwICAgICAgLyogUG9ydCBGIFNjaG1pdHQgdHJpZ2dlciBjb250cm9sICovCisjZGVmaW5lIFBPUlRHX0hZU1RFUklTSVMgICAgICAgIDB4RkZDMDMyNDQgICAgICAvKiBQb3J0IEcgU2NobWl0dCB0cmlnZ2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgUE9SVEhfSFlTVEVSSVNJUyAgICAgICAgMHhGRkMwMzI0OCAgICAgIC8qIFBvcnQgSCBTY2htaXR0IHRyaWdnZXIgY29udHJvbCAqLworI2RlZmluZSBNSVNDUE9SVF9EUklWRSAgICAgICAgICAweEZGQzAzMjgwICAgICAgLyogTWlzYyBQb3J0IGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgKi8KKyNkZWZpbmUgTUlTQ1BPUlRfU0xFVyAgICAgICAgICAgMHhGRkMwMzI4NCAgICAgIC8qIE1pc2MgUG9ydCBzbGV3IGNvbnRyb2wgKi8KKyNkZWZpbmUgTUlTQ1BPUlRfSFlTVEVSSVNJUyAgICAgMHhGRkMwMzI4OCAgICAgIC8qIE1pc2MgUG9ydCBTY2htaXR0IHRyaWdnZXIgY29udHJvbCAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogU3lzdGVtIE1NUiBSZWdpc3RlciBCaXRzIEFuZCBNYWNyb3MKKyoqCisqKiBEaXNjbGFpbWVyOglBbGwgbWFjcm9zIGFyZSBpbnRlbmRlZCB0byBtYWtlIEMgYW5kIEFzc2VtYmx5IGNvZGUgbW9yZSByZWFkYWJsZS4KKyoqCQkJCVVzZSB0aGVzZSBtYWNyb3MgY2FyZWZ1bGx5LCBhcyBhbnkgdGhhdCBkbyBsZWZ0IHNoaWZ0cyBmb3IgZmllbGQKKyoqCQkJCWRlcG9zaXRpbmcgd2lsbCByZXN1bHQgaW4gdGhlIGxvd2VyIG9yZGVyIGJpdHMgYmVpbmcgZGVzdHJveWVkLiAgQW55CisqKgkJCQltYWNybyB0aGF0IHNoaWZ0cyBsZWZ0IHRvIHByb3Blcmx5IHBvc2l0aW9uIHRoZSBiaXQtZmllbGQgc2hvdWxkIGJlCisqKgkJCQl1c2VkIGFzIHBhcnQgb2YgYW4gT1IgdG8gaW5pdGlhbGl6ZSBhIHJlZ2lzdGVyIGFuZCBOT1QgYXMgYSBkeW5hbWljCisqKgkJCQltb2RpZmllciBVTkxFU1MgdGhlIGxvd2VyIG9yZGVyIGJpdHMgYXJlIHNhdmVkIGFuZCBPUmVkIGJhY2sgaW4gd2hlbgorKioJCQkJdGhlIG1hY3JvIGlzIHVzZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDSElQSUQgTWFza3MgKi8KKyNkZWZpbmUgQ0hJUElEX1ZFUlNJT04gICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIENISVBJRF9GQU1JTFkgICAgICAgICAgMHgwRkZGRjAwMAorI2RlZmluZSBDSElQSURfTUFOVUZBQ1RVUkUgICAgIDB4MDAwMDBGRkUKKworLyogU1dSU1QgTWFza3MJCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBTWVNURU1fUkVTRVQJCTB4MDAwNwkvKiBJbml0aWF0ZXMgQSBTeXN0ZW0gU29mdHdhcmUgUmVzZXQJCQkqLworI2RlZmluZQlET1VCTEVfRkFVTFQJCTB4MDAwOAkvKiBDb3JlIERvdWJsZSBGYXVsdCBDYXVzZXMgUmVzZXQJCQkJKi8KKyNkZWZpbmUgUkVTRVRfRE9VQkxFCQkweDIwMDAJLyogU1cgUmVzZXQgR2VuZXJhdGVkIEJ5IENvcmUgRG91YmxlLUZhdWx0CQkqLworI2RlZmluZSBSRVNFVF9XRE9HCQkJMHg0MDAwCS8qIFNXIFJlc2V0IEdlbmVyYXRlZCBCeSBXYXRjaGRvZyBUaW1lcgkJCSovCisjZGVmaW5lIFJFU0VUX1NPRlRXQVJFCQkweDgwMDAJLyogU1cgUmVzZXQgT2NjdXJyZWQgU2luY2UgTGFzdCBSZWFkIE9mIFNXUlNUCSovCisKKy8qIFNZU0NSIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBCTU9ERQkJCQkweDAwMDcJLyogQm9vdCBNb2RlIC0gTGF0Y2hlZCBEdXJpbmcgSFcgUmVzZXQgRnJvbSBNb2RlIFBpbnMJKi8KKyNkZWZpbmUJTk9CT09UCQkJCTB4MDAxMAkvKiBFeGVjdXRlIEZyb20gTDEgb3IgQVNZTkMgQmFuayAwIFdoZW4gQk1PREUgPSAwCQkqLworCisKKy8qICoqKioqKioqKioqKiogIFNZU1RFTSBJTlRFUlJVUFQgQ09OVFJPTExFUiBNQVNLUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUGVyaXBoZXJhbCBNYXNrcyBGb3IgU0lDX0lTUiwgU0lDX0lXUiwgU0lDX0lNQVNLCQkJCQkJCQkJCSovCisKKyNpZiAwCisjZGVmaW5lIElSUV9QTExfV0FLRVVQCTB4MDAwMDAwMDEJLyogUExMIFdha2V1cCBJbnRlcnJ1cHQJCQkgCQkJCQkqLworCisjZGVmaW5lIElSUV9FUlJPUjEgICAgICAweDAwMDAwMDAyICAvKiBFcnJvciBJbnRlcnJ1cHQgKERNQSwgRE1BUnggQmxvY2ssIERNQVJ4IE92ZXJmbG93KSAqLworI2RlZmluZSBJUlFfRVJST1IyICAgICAgMHgwMDAwMDAwNCAgLyogRXJyb3IgSW50ZXJydXB0IChDQU4sIEV0aGVybmV0LCBTUE9SVHgsIFBQSSwgU1BJLCBVQVJUeCkgKi8KKyNkZWZpbmUgSVJRX1JUQwkJCTB4MDAwMDAwMDgJLyogUmVhbCBUaW1lIENsb2NrIEludGVycnVwdCAJCQkJCQkqLworI2RlZmluZSBJUlFfRE1BMAkJMHgwMDAwMDAxMAkvKiBETUEgQ2hhbm5lbCAwIChQUEkpIEludGVycnVwdCAJCQkJCSovCisjZGVmaW5lIElSUV9ETUEzCQkweDAwMDAwMDIwCS8qIERNQSBDaGFubmVsIDMgKFNQT1JUMCBSWCkgSW50ZXJydXB0IAkJCQkqLworI2RlZmluZSBJUlFfRE1BNAkJMHgwMDAwMDA0MAkvKiBETUEgQ2hhbm5lbCA0IChTUE9SVDAgVFgpIEludGVycnVwdCAJCQkJKi8KKyNkZWZpbmUgSVJRX0RNQTUJCTB4MDAwMDAwODAJLyogRE1BIENoYW5uZWwgNSAoU1BPUlQxIFJYKSBJbnRlcnJ1cHQgCQkJCSovCisKKyNkZWZpbmUgSVJRX0RNQTYJCTB4MDAwMDAxMDAJLyogRE1BIENoYW5uZWwgNiAoU1BPUlQxIFRYKSBJbnRlcnJ1cHQgCQkgCQkqLworI2RlZmluZSBJUlFfVFdJCQkJMHgwMDAwMDIwMAkvKiBUV0kgSW50ZXJydXB0CQkJCQkJCQkJKi8KKyNkZWZpbmUgSVJRX0RNQTcJCTB4MDAwMDA0MDAJLyogRE1BIENoYW5uZWwgNyAoU1BJKSBJbnRlcnJ1cHQgCQkJCQkqLworI2RlZmluZSBJUlFfRE1BOAkJMHgwMDAwMDgwMAkvKiBETUEgQ2hhbm5lbCA4IChVQVJUMCBSWCkgSW50ZXJydXB0IAkJCQkqLworI2RlZmluZSBJUlFfRE1BOQkJMHgwMDAwMTAwMAkvKiBETUEgQ2hhbm5lbCA5IChVQVJUMCBUWCkgSW50ZXJydXB0IAkJCQkqLworI2RlZmluZSBJUlFfRE1BMTAJCTB4MDAwMDIwMDAJLyogRE1BIENoYW5uZWwgMTAgKFVBUlQxIFJYKSBJbnRlcnJ1cHQgCQkJCSovCisjZGVmaW5lIElSUV9ETUExMQkJMHgwMDAwNDAwMAkvKiBETUEgQ2hhbm5lbCAxMSAoVUFSVDEgVFgpIEludGVycnVwdCAJCQkJKi8KKyNkZWZpbmUgSVJRX0NBTl9SWAkJMHgwMDAwODAwMAkvKiBDQU4gUmVjZWl2ZSBJbnRlcnJ1cHQgCQkJCQkJCSovCisKKyNkZWZpbmUgSVJRX0NBTl9UWAkJMHgwMDAxMDAwMAkvKiBDQU4gVHJhbnNtaXQgSW50ZXJydXB0ICAJCQkJCQkJKi8KKyNkZWZpbmUgSVJRX0RNQTEJCTB4MDAwMjAwMDAJLyogRE1BIENoYW5uZWwgMSAoRXRoZXJuZXQgUlgpIEludGVycnVwdCAJCQkqLworI2RlZmluZSBJUlFfUEZBX1BPUlRICTB4MDAwMjAwMDAJLyogUEYgUG9ydCBIIChQRjQ3OjMyKSBJbnRlcnJ1cHQgQSAJCQkJCSovCisjZGVmaW5lIElSUV9ETUEyCQkweDAwMDQwMDAwCS8qIERNQSBDaGFubmVsIDIgKEV0aGVybmV0IFRYKSBJbnRlcnJ1cHQgCQkJKi8KKyNkZWZpbmUgSVJRX1BGQl9QT1JUSAkweDAwMDQwMDAwCS8qIFBGIFBvcnQgSCAoUEY0NzozMikgSW50ZXJydXB0IEIgCQkJCQkqLworI2RlZmluZSBJUlFfVElNRVIwCQkweDAwMDgwMDAwCS8qIFRpbWVyIDAgSW50ZXJydXB0CQkJCQkJCQkqLworI2RlZmluZSBJUlFfVElNRVIxCQkweDAwMTAwMDAwCS8qIFRpbWVyIDEgSW50ZXJydXB0IAkJCQkJCQkJKi8KKyNkZWZpbmUgSVJRX1RJTUVSMgkJMHgwMDIwMDAwMAkvKiBUaW1lciAyIEludGVycnVwdCAJCQkJCQkJCSovCisjZGVmaW5lIElSUV9USU1FUjMJCTB4MDA0MDAwMDAJLyogVGltZXIgMyBJbnRlcnJ1cHQgCQkJCQkJCQkqLworI2RlZmluZSBJUlFfVElNRVI0CQkweDAwODAwMDAwCS8qIFRpbWVyIDQgSW50ZXJydXB0IAkJCQkJCQkJKi8KKworI2RlZmluZSBJUlFfVElNRVI1CQkweDAxMDAwMDAwCS8qIFRpbWVyIDUgSW50ZXJydXB0IAkJCQkJCQkJKi8KKyNkZWZpbmUgSVJRX1RJTUVSNgkJMHgwMjAwMDAwMAkvKiBUaW1lciA2IEludGVycnVwdCAJCQkJCQkJCSovCisjZGVmaW5lIElSUV9USU1FUjcJCTB4MDQwMDAwMDAJLyogVGltZXIgNyBJbnRlcnJ1cHQgCQkJCQkJCQkqLworI2RlZmluZSBJUlFfUEZBX1BPUlRGRwkweDA4MDAwMDAwCS8qIFBGIFBvcnRzIEYmRyAoUEYzMTowKSBJbnRlcnJ1cHQgQSAJCQkJKi8KKyNkZWZpbmUgSVJRX1BGQl9QT1JURgkweDgwMDAwMDAwCS8qIFBGIFBvcnQgRiAoUEYxNTowKSBJbnRlcnJ1cHQgQiAJCQkJCSovCisjZGVmaW5lIElSUV9ETUExMgkJMHgyMDAwMDAwMAkvKiBETUEgQ2hhbm5lbHMgMTIgKE1ETUExIFNvdXJjZSkgUlggSW50ZXJydXB0IAkJKi8KKyNkZWZpbmUgSVJRX0RNQTEzCQkweDIwMDAwMDAwCS8qIERNQSBDaGFubmVscyAxMyAoTURNQTEgRGVzdGluYXRpb24pIFRYIEludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1BMTQJCTB4NDAwMDAwMDAJLyogRE1BIENoYW5uZWxzIDE0IChNRE1BMCBTb3VyY2UpIFJYIEludGVycnVwdCAJCSovCisjZGVmaW5lIElSUV9ETUExNQkJMHg0MDAwMDAwMAkvKiBETUEgQ2hhbm5lbHMgMTUgKE1ETUEwIERlc3RpbmF0aW9uKSBUWCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1dET0cJCTB4ODAwMDAwMDAJLyogU29mdHdhcmUgV2F0Y2hkb2cgVGltZXIgSW50ZXJydXB0IAkJCQkqLworI2RlZmluZSBJUlFfUEZCX1BPUlRHCTB4MTAwMDAwMDAJLyogUEYgUG9ydCBHIChQRjMxOjE2KSBJbnRlcnJ1cHQgQiAJCQkJCSovCisjZW5kaWYKKworLyogU0lDX0lBUjAgTWFjcm9zCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgUDBfSVZHKHgpCQkoKCh4KSYweEYpLTcpCQkJLyogUGVyaXBoZXJhbCAjMCBhc3NpZ25lZCBJVkcgI3ggCSovCisjZGVmaW5lIFAxX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDQJLyogUGVyaXBoZXJhbCAjMSBhc3NpZ25lZCBJVkcgI3ggCSovCisjZGVmaW5lIFAyX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDgJLyogUGVyaXBoZXJhbCAjMiBhc3NpZ25lZCBJVkcgI3ggCSovCisjZGVmaW5lIFAzX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweEMJLyogUGVyaXBoZXJhbCAjMyBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDRfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTAJLyogUGVyaXBoZXJhbCAjNCBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDVfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTQJLyogUGVyaXBoZXJhbCAjNSBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDZfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTgJLyogUGVyaXBoZXJhbCAjNiBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDdfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MUMJLyogUGVyaXBoZXJhbCAjNyBhc3NpZ25lZCBJVkcgI3gJKi8KKworLyogU0lDX0lBUjEgTWFjcm9zCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgUDhfSVZHKHgpCQkoKCh4KSYweEYpLTcpCQkJLyogUGVyaXBoZXJhbCAjOCBhc3NpZ25lZCBJVkcgI3ggCSovCisjZGVmaW5lIFA5X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDQJLyogUGVyaXBoZXJhbCAjOSBhc3NpZ25lZCBJVkcgI3ggCSovCisjZGVmaW5lIFAxMF9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHg4CS8qIFBlcmlwaGVyYWwgIzEwIGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMTFfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4QwkvKiBQZXJpcGhlcmFsICMxMSBhc3NpZ25lZCBJVkcgI3ggCSovCisjZGVmaW5lIFAxMl9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxMAkvKiBQZXJpcGhlcmFsICMxMiBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDEzX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDE0CS8qIFBlcmlwaGVyYWwgIzEzIGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMTRfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTgJLyogUGVyaXBoZXJhbCAjMTQgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAxNV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxQwkvKiBQZXJpcGhlcmFsICMxNSBhc3NpZ25lZCBJVkcgI3gJKi8KKworLyogU0lDX0lBUjIgTWFjcm9zCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgUDE2X0lWRyh4KQkJKCgoeCkmMHhGKS03KQkJCS8qIFBlcmlwaGVyYWwgIzE2IGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMTdfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4NAkvKiBQZXJpcGhlcmFsICMxNyBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDE4X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDgJLyogUGVyaXBoZXJhbCAjMTggYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAxOV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHhDCS8qIFBlcmlwaGVyYWwgIzE5IGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMjBfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTAJLyogUGVyaXBoZXJhbCAjMjAgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAyMV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxNAkvKiBQZXJpcGhlcmFsICMyMSBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDIyX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDE4CS8qIFBlcmlwaGVyYWwgIzIyIGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMjNfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MUMJLyogUGVyaXBoZXJhbCAjMjMgYXNzaWduZWQgSVZHICN4CSovCisKKy8qIFNJQ19JQVIzIE1hY3JvcwkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFAyNF9JVkcoeCkJCSgoKHgpJjB4RiktNykJCQkvKiBQZXJpcGhlcmFsICMyNCBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDI1X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDQJLyogUGVyaXBoZXJhbCAjMjUgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAyNl9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHg4CS8qIFBlcmlwaGVyYWwgIzI2IGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMjdfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4QwkvKiBQZXJpcGhlcmFsICMyNyBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDI4X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDEwCS8qIFBlcmlwaGVyYWwgIzI4IGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMjlfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTQJLyogUGVyaXBoZXJhbCAjMjkgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAzMF9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxOAkvKiBQZXJpcGhlcmFsICMzMCBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDMxX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDFDCS8qIFBlcmlwaGVyYWwgIzMxIGFzc2lnbmVkIElWRyAjeAkqLworCisKKy8qIFNJQ19JTUFTSyBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFNJQ19VTk1BU0tfQUxMCTB4MDAwMDAwMDAJCQkJCS8qIFVubWFzayBhbGwgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzCSovCisjZGVmaW5lIFNJQ19NQVNLX0FMTAkweEZGRkZGRkZGCQkJCQkvKiBNYXNrIGFsbCBwZXJpcGhlcmFsIGludGVycnVwdHMJKi8KKyNkZWZpbmUgU0lDX01BU0soeCkJCSgxIDw8ICgoeCkmMHgxRikpCQkJCQkvKiBNYXNrIFBlcmlwaGVyYWwgI3ggaW50ZXJydXB0CQkqLworI2RlZmluZSBTSUNfVU5NQVNLKHgpCSgweEZGRkZGRkZGIF4gKDEgPDwgKCh4KSYweDFGKSkpCS8qIFVubWFzayBQZXJpcGhlcmFsICN4IGludGVycnVwdAkqLworCisvKiBTSUNfSVdSIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgSVdSX0RJU0FCTEVfQUxMCTB4MDAwMDAwMDAJCQkJCS8qIFdha2V1cCBEaXNhYmxlIGFsbCBwZXJpcGhlcmFscwkqLworI2RlZmluZSBJV1JfRU5BQkxFX0FMTAkweEZGRkZGRkZGCQkJCQkvKiBXYWtldXAgRW5hYmxlIGFsbCBwZXJpcGhlcmFscwkqLworI2RlZmluZSBJV1JfRU5BQkxFKHgpCSgxIDw8ICgoeCkmMHgxRikpCQkJCQkvKiBXYWtldXAgRW5hYmxlIFBlcmlwaGVyYWwgI3gJCSovCisjZGVmaW5lIElXUl9ESVNBQkxFKHgpCSgweEZGRkZGRkZGIF4gKDEgPDwgKCh4KSYweDFGKSkpIAkvKiBXYWtldXAgRGlzYWJsZSBQZXJpcGhlcmFsICN4CQkqLworCisvKiAgKioqKioqKioqKioqKioqKiAgR0VORVJBTCBQVVJQT1NFIFRJTUVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqLworLyogVElNRVJfRU5BQkxFIE1hc2tzCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFRJTUVOMAkJCTB4MDAwMQkJLyogRW5hYmxlIFRpbWVyIDAJCQkJCSovCisjZGVmaW5lIFRJTUVOMQkJCTB4MDAwMgkJLyogRW5hYmxlIFRpbWVyIDEJCQkJCSovCisjZGVmaW5lIFRJTUVOMgkJCTB4MDAwNAkJLyogRW5hYmxlIFRpbWVyIDIJCQkJCSovCisjZGVmaW5lIFRJTUVOMwkJCTB4MDAwOAkJLyogRW5hYmxlIFRpbWVyIDMJCQkJCSovCisjZGVmaW5lIFRJTUVONAkJCTB4MDAxMAkJLyogRW5hYmxlIFRpbWVyIDQJCQkJCSovCisjZGVmaW5lIFRJTUVONQkJCTB4MDAyMAkJLyogRW5hYmxlIFRpbWVyIDUJCQkJCSovCisjZGVmaW5lIFRJTUVONgkJCTB4MDA0MAkJLyogRW5hYmxlIFRpbWVyIDYJCQkJCSovCisjZGVmaW5lIFRJTUVONwkJCTB4MDA4MAkJLyogRW5hYmxlIFRpbWVyIDcJCQkJCSovCisKKy8qIFRJTUVSX0RJU0FCTEUgTWFza3MJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVElNRElTMAkJCVRJTUVOMAkJLyogRGlzYWJsZSBUaW1lciAwCQkJCQkqLworI2RlZmluZSBUSU1ESVMxCQkJVElNRU4xCQkvKiBEaXNhYmxlIFRpbWVyIDEJCQkJCSovCisjZGVmaW5lIFRJTURJUzIJCQlUSU1FTjIJCS8qIERpc2FibGUgVGltZXIgMgkJCQkJKi8KKyNkZWZpbmUgVElNRElTMwkJCVRJTUVOMwkJLyogRGlzYWJsZSBUaW1lciAzCQkJCQkqLworI2RlZmluZSBUSU1ESVM0CQkJVElNRU40CQkvKiBEaXNhYmxlIFRpbWVyIDQJCQkJCSovCisjZGVmaW5lIFRJTURJUzUJCQlUSU1FTjUJCS8qIERpc2FibGUgVGltZXIgNQkJCQkJKi8KKyNkZWZpbmUgVElNRElTNgkJCVRJTUVONgkJLyogRGlzYWJsZSBUaW1lciA2CQkJCQkqLworI2RlZmluZSBUSU1ESVM3CQkJVElNRU43CQkvKiBEaXNhYmxlIFRpbWVyIDcJCQkJCSovCisKKy8qIFRJTUVSX1NUQVRVUyBNYXNrcwkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBUSU1JTDAJCQkweDAwMDAwMDAxCS8qIFRpbWVyIDAgSW50ZXJydXB0CQkJCSovCisjZGVmaW5lIFRJTUlMMQkJCTB4MDAwMDAwMDIJLyogVGltZXIgMSBJbnRlcnJ1cHQJCQkJKi8KKyNkZWZpbmUgVElNSUwyCQkJMHgwMDAwMDAwNAkvKiBUaW1lciAyIEludGVycnVwdAkJCQkqLworI2RlZmluZSBUSU1JTDMJCQkweDAwMDAwMDA4CS8qIFRpbWVyIDMgSW50ZXJydXB0CQkJCSovCisjZGVmaW5lIFRPVkZfRVJSMAkJMHgwMDAwMDAxMAkvKiBUaW1lciAwIENvdW50ZXIgT3ZlcmZsb3cJCQkqLworI2RlZmluZSBUT1ZGX0VSUjEJCTB4MDAwMDAwMjAJLyogVGltZXIgMSBDb3VudGVyIE92ZXJmbG93CQkJKi8KKyNkZWZpbmUgVE9WRl9FUlIyCQkweDAwMDAwMDQwCS8qIFRpbWVyIDIgQ291bnRlciBPdmVyZmxvdwkJCSovCisjZGVmaW5lIFRPVkZfRVJSMwkJMHgwMDAwMDA4MAkvKiBUaW1lciAzIENvdW50ZXIgT3ZlcmZsb3cJCQkqLworI2RlZmluZSBUUlVOMAkJCTB4MDAwMDEwMDAJLyogVGltZXIgMCBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVOMQkJCTB4MDAwMDIwMDAJLyogVGltZXIgMSBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVOMgkJCTB4MDAwMDQwMDAJLyogVGltZXIgMiBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVOMwkJCTB4MDAwMDgwMDAJLyogVGltZXIgMyBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUSU1JTDQJCQkweDAwMDEwMDAwCS8qIFRpbWVyIDQgSW50ZXJydXB0CQkJCSovCisjZGVmaW5lIFRJTUlMNQkJCTB4MDAwMjAwMDAJLyogVGltZXIgNSBJbnRlcnJ1cHQJCQkJKi8KKyNkZWZpbmUgVElNSUw2CQkJMHgwMDA0MDAwMAkvKiBUaW1lciA2IEludGVycnVwdAkJCQkqLworI2RlZmluZSBUSU1JTDcJCQkweDAwMDgwMDAwCS8qIFRpbWVyIDcgSW50ZXJydXB0CQkJCSovCisjZGVmaW5lIFRPVkZfRVJSNAkJMHgwMDEwMDAwMAkvKiBUaW1lciA0IENvdW50ZXIgT3ZlcmZsb3cJCQkqLworI2RlZmluZSBUT1ZGX0VSUjUJCTB4MDAyMDAwMDAJLyogVGltZXIgNSBDb3VudGVyIE92ZXJmbG93CQkJKi8KKyNkZWZpbmUgVE9WRl9FUlI2CQkweDAwNDAwMDAwCS8qIFRpbWVyIDYgQ291bnRlciBPdmVyZmxvdwkJCSovCisjZGVmaW5lIFRPVkZfRVJSNwkJMHgwMDgwMDAwMAkvKiBUaW1lciA3IENvdW50ZXIgT3ZlcmZsb3cJCQkqLworI2RlZmluZSBUUlVONAkJCTB4MTAwMDAwMDAJLyogVGltZXIgNCBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVONQkJCTB4MjAwMDAwMDAJLyogVGltZXIgNSBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVONgkJCTB4NDAwMDAwMDAJLyogVGltZXIgNiBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVONwkJCTB4ODAwMDAwMDAJLyogVGltZXIgNyBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworCisvKiBBbHRlcm5hdGUgRGVwcmVjYXRlZCBNYWNyb3MgUHJvdmlkZWQgRm9yIEJhY2t3YXJkcyBDb2RlIENvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVE9WTF9FUlIwIFRPVkZfRVJSMAorI2RlZmluZSBUT1ZMX0VSUjEgVE9WRl9FUlIxCisjZGVmaW5lIFRPVkxfRVJSMiBUT1ZGX0VSUjIKKyNkZWZpbmUgVE9WTF9FUlIzIFRPVkZfRVJSMworI2RlZmluZSBUT1ZMX0VSUjQgVE9WRl9FUlI0CisjZGVmaW5lIFRPVkxfRVJSNSBUT1ZGX0VSUjUKKyNkZWZpbmUgVE9WTF9FUlI2IFRPVkZfRVJSNgorI2RlZmluZSBUT1ZMX0VSUjcgVE9WRl9FUlI3CisKKy8qIFRJTUVSeF9DT05GSUcgTWFza3MJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgUFdNX09VVAkJCTB4MDAwMQkvKiBQdWxzZS1XaWR0aCBNb2R1bGF0aW9uIE91dHB1dCBNb2RlCSovCisjZGVmaW5lIFdEVEhfQ0FQCQkweDAwMDIJLyogV2lkdGggQ2FwdHVyZSBJbnB1dCBNb2RlCQkJCSovCisjZGVmaW5lIEVYVF9DTEsJCQkweDAwMDMJLyogRXh0ZXJuYWwgQ2xvY2sgTW9kZQkJCQkJKi8KKyNkZWZpbmUgUFVMU0VfSEkJCTB4MDAwNAkvKiBBY3Rpb24gUHVsc2UgKFBvc2l0aXZlL05lZ2F0aXZlKikJKi8KKyNkZWZpbmUgUEVSSU9EX0NOVAkJMHgwMDA4CS8qIFBlcmlvZCBDb3VudAkJCQkJCQkqLworI2RlZmluZSBJUlFfRU5BCQkJMHgwMDEwCS8qIEludGVycnVwdCBSZXF1ZXN0IEVuYWJsZQkJCQkqLworI2RlZmluZSBUSU5fU0VMCQkJMHgwMDIwCS8qIFRpbWVyIElucHV0IFNlbGVjdAkJCQkJKi8KKyNkZWZpbmUgT1VUX0RJUwkJCTB4MDA0MAkvKiBPdXRwdXQgUGFkIERpc2FibGUJCQkJCSovCisjZGVmaW5lIENMS19TRUwJCQkweDAwODAJLyogVGltZXIgQ2xvY2sgU2VsZWN0CQkJCQkqLworI2RlZmluZSBUT0dHTEVfSEkJCTB4MDEwMAkvKiBQV01fT1VUIFBVTFNFX0hJIFRvZ2dsZSBNb2RlCQkJKi8KKyNkZWZpbmUgRU1VX1JVTgkJCTB4MDIwMAkvKiBFbXVsYXRpb24gQmVoYXZpb3IgU2VsZWN0CQkJKi8KKyNkZWZpbmUgRVJSX1RZUAkJCTB4QzAwMAkvKiBFcnJvciBUeXBlCQkJCQkJCSovCisKKy8qICoqKioqKioqKioqKioqKioqKioqKiAgQVNZTkNIUk9OT1VTIE1FTU9SWSBDT05UUk9MTEVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRUJJVV9BTUdDVEwgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIEFNQ0tFTgkJCTB4MDAwMQkJLyogRW5hYmxlIENMS09VVAkJCQkJCQkJCSovCisjZGVmaW5lCUFNQkVOX05PTkUJCTB4MDAwMAkJLyogQWxsIEJhbmtzIERpc2FibGVkCQkJCQkJCQkqLworI2RlZmluZSBBTUJFTl9CMAkJMHgwMDAyCQkvKiBFbmFibGUgQXN5bmMgTWVtb3J5IEJhbmsgMCBvbmx5CQkJCQkqLworI2RlZmluZSBBTUJFTl9CMF9CMQkJMHgwMDA0CQkvKiBFbmFibGUgQXN5bmMgTWVtb3J5IEJhbmtzIDAgJiAxIG9ubHkJCQkJKi8KKyNkZWZpbmUgQU1CRU5fQjBfQjFfQjIJMHgwMDA2CQkvKiBFbmFibGUgQXN5bmMgTWVtb3J5IEJhbmtzIDAsIDEsIGFuZCAyCQkJKi8KKyNkZWZpbmUgQU1CRU5fQUxMCQkweDAwMDgJCS8qIEVuYWJsZSBBc3luYyBNZW1vcnkgQmFua3MgKGFsbCkgMCwgMSwgMiwgYW5kIDMJKi8KKworLyogRUJJVV9BTUJDVEwwIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBCMFJEWUVOCQkJMHgwMDAwMDAwMSAgLyogQmFuayAwIChCMCkgUkRZIEVuYWJsZQkJCQkJCQkqLworI2RlZmluZSBCMFJEWVBPTAkJMHgwMDAwMDAwMiAgLyogQjAgUkRZIEFjdGl2ZSBIaWdoCQkJCQkJCQkqLworI2RlZmluZSBCMFRUXzEJCQkweDAwMDAwMDA0ICAvKiBCMCBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMSBjeWNsZQkJKi8KKyNkZWZpbmUgQjBUVF8yCQkJMHgwMDAwMDAwOCAgLyogQjAgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDIgY3ljbGVzCSovCisjZGVmaW5lIEIwVFRfMwkJCTB4MDAwMDAwMEMgIC8qIEIwIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAzIGN5Y2xlcwkqLworI2RlZmluZSBCMFRUXzQJCQkweDAwMDAwMDAwICAvKiBCMCBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gNCBjeWNsZXMJKi8KKyNkZWZpbmUgQjBTVF8xCQkJMHgwMDAwMDAxMCAgLyogQjAgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMSBjeWNsZQkJKi8KKyNkZWZpbmUgQjBTVF8yCQkJMHgwMDAwMDAyMCAgLyogQjAgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMiBjeWNsZXMJCSovCisjZGVmaW5lIEIwU1RfMwkJCTB4MDAwMDAwMzAgIC8qIEIwIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDMgY3ljbGVzCQkqLworI2RlZmluZSBCMFNUXzQJCQkweDAwMDAwMDAwICAvKiBCMCBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSA0IGN5Y2xlcwkJKi8KKyNkZWZpbmUgQjBIVF8xCQkJMHgwMDAwMDA0MCAgLyogQjAgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDEgY3ljbGUJCSovCisjZGVmaW5lIEIwSFRfMgkJCTB4MDAwMDAwODAgIC8qIEIwIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAyIGN5Y2xlcwkqLworI2RlZmluZSBCMEhUXzMJCQkweDAwMDAwMEMwICAvKiBCMCBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMyBjeWNsZXMJKi8KKyNkZWZpbmUgQjBIVF8wCQkJMHgwMDAwMDAwMCAgLyogQjAgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDAgY3ljbGVzCSovCisjZGVmaW5lIEIwUkFUXzEJCQkweDAwMDAwMTAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gMSBjeWNsZQkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfMgkJCTB4MDAwMDAyMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfMwkJCTB4MDAwMDAzMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfNAkJCTB4MDAwMDA0MDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfNQkJCTB4MDAwMDA1MDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfNgkJCTB4MDAwMDA2MDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfNwkJCTB4MDAwMDA3MDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfOAkJCTB4MDAwMDA4MDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfOQkJCTB4MDAwMDA5MDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfMTAJCTB4MDAwMDBBMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwUkFUXzExCQkweDAwMDAwQjAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFJBVF8xMgkJMHgwMDAwMEMwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfMTMJCTB4MDAwMDBEMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwUkFUXzE0CQkweDAwMDAwRTAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFJBVF8xNQkJMHgwMDAwMEYwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfMQkJCTB4MDAwMDEwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMSBjeWNsZQkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfMgkJCTB4MDAwMDIwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzMJCQkweDAwMDAzMDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFdBVF80CQkJMHgwMDAwNDAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfNQkJCTB4MDAwMDUwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzYJCQkweDAwMDA2MDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFdBVF83CQkJMHgwMDAwNzAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfOAkJCTB4MDAwMDgwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzkJCQkweDAwMDA5MDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFdBVF8xMAkJMHgwMDAwQTAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzExCQkweDAwMDBCMDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfMTIJCTB4MDAwMEMwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFdBVF8xMwkJMHgwMDAwRDAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzE0CQkweDAwMDBFMDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfMTUJCTB4MDAwMEYwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzCQkJCQkqLworCisjZGVmaW5lIEIxUkRZRU4JCQkweDAwMDEwMDAwICAvKiBCYW5rIDEgKEIxKSBSRFkgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAJKi8KKyNkZWZpbmUgQjFSRFlQT0wJCTB4MDAwMjAwMDAgIC8qIEIxIFJEWSBBY3RpdmUgSGlnaCAgICAgICAgICAgICAgICAgICAgICAgICAgIAkqLworI2RlZmluZSBCMVRUXzEJCQkweDAwMDQwMDAwICAvKiBCMSBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMSBjeWNsZSAJKi8KKyNkZWZpbmUgQjFUVF8yCQkJMHgwMDA4MDAwMCAgLyogQjEgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDIgY3ljbGVzCSovCisjZGVmaW5lIEIxVFRfMwkJCTB4MDAwQzAwMDAgIC8qIEIxIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAzIGN5Y2xlcwkqLworI2RlZmluZSBCMVRUXzQJCQkweDAwMDAwMDAwICAvKiBCMSBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gNCBjeWNsZXMJKi8KKyNkZWZpbmUgQjFTVF8xCQkJMHgwMDEwMDAwMCAgLyogQjEgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMSBjeWNsZSAgCSovCisjZGVmaW5lIEIxU1RfMgkJCTB4MDAyMDAwMDAgIC8qIEIxIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDIgY3ljbGVzIAkqLworI2RlZmluZSBCMVNUXzMJCQkweDAwMzAwMDAwICAvKiBCMSBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAzIGN5Y2xlcyAJKi8KKyNkZWZpbmUgQjFTVF80CQkJMHgwMDAwMDAwMCAgLyogQjEgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gNCBjeWNsZXMgCSovCisjZGVmaW5lIEIxSFRfMQkJCTB4MDA0MDAwMDAgIC8qIEIxIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAxIGN5Y2xlIAkqLworI2RlZmluZSBCMUhUXzIJCQkweDAwODAwMDAwICAvKiBCMSBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMiBjeWNsZXMJKi8KKyNkZWZpbmUgQjFIVF8zCQkJMHgwMEMwMDAwMCAgLyogQjEgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDMgY3ljbGVzCSovCisjZGVmaW5lIEIxSFRfMAkJCTB4MDAwMDAwMDAgIC8qIEIxIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAwIGN5Y2xlcwkqLworI2RlZmluZSBCMVJBVF8xCQkJMHgwMTAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDEgY3ljbGUJCQkJCSovCisjZGVmaW5lIEIxUkFUXzIJCQkweDAyMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzMJCQkweDAzMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzQJCQkweDA0MDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzUJCQkweDA1MDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzYJCQkweDA2MDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzcJCQkweDA3MDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzgJCQkweDA4MDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzkJCQkweDA5MDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzEwCQkweDBBMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVJBVF8xMQkJMHgwQjAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFSQVRfMTIJCTB4MEMwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzEzCQkweDBEMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVJBVF8xNAkJMHgwRTAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFSQVRfMTUJCTB4MEYwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxV0FUXzEJCQkweDEwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDEgY3ljbGUJCQkJCSovCisjZGVmaW5lIEIxV0FUXzIJCQkweDIwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF8zCQkJMHgzMDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFXQVRfNAkJCTB4NDAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxV0FUXzUJCQkweDUwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF82CQkJMHg2MDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFXQVRfNwkJCTB4NzAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxV0FUXzgJCQkweDgwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDggY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF85CQkJMHg5MDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFXQVRfMTAJCTB4QTAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF8xMQkJMHhCMDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxV0FUXzEyCQkweEMwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFXQVRfMTMJCTB4RDAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF8xNAkJMHhFMDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxV0FUXzE1CQkweEYwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcwkJCQkJKi8KKworLyogRUJJVV9BTUJDVEwxIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBCMlJEWUVOCQkJMHgwMDAwMDAwMSAgLyogQmFuayAyIChCMikgUkRZIEVuYWJsZQkJCQkJCQkqLworI2RlZmluZSBCMlJEWVBPTAkJMHgwMDAwMDAwMiAgLyogQjIgUkRZIEFjdGl2ZSBIaWdoCQkJCQkJCQkqLworI2RlZmluZSBCMlRUXzEJCQkweDAwMDAwMDA0ICAvKiBCMiBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMSBjeWNsZQkJKi8KKyNkZWZpbmUgQjJUVF8yCQkJMHgwMDAwMDAwOCAgLyogQjIgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDIgY3ljbGVzCSovCisjZGVmaW5lIEIyVFRfMwkJCTB4MDAwMDAwMEMgIC8qIEIyIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAzIGN5Y2xlcwkqLworI2RlZmluZSBCMlRUXzQJCQkweDAwMDAwMDAwICAvKiBCMiBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gNCBjeWNsZXMJKi8KKyNkZWZpbmUgQjJTVF8xCQkJMHgwMDAwMDAxMCAgLyogQjIgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMSBjeWNsZQkJKi8KKyNkZWZpbmUgQjJTVF8yCQkJMHgwMDAwMDAyMCAgLyogQjIgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMiBjeWNsZXMJCSovCisjZGVmaW5lIEIyU1RfMwkJCTB4MDAwMDAwMzAgIC8qIEIyIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDMgY3ljbGVzCQkqLworI2RlZmluZSBCMlNUXzQJCQkweDAwMDAwMDAwICAvKiBCMiBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSA0IGN5Y2xlcwkJKi8KKyNkZWZpbmUgQjJIVF8xCQkJMHgwMDAwMDA0MCAgLyogQjIgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDEgY3ljbGUJCSovCisjZGVmaW5lIEIySFRfMgkJCTB4MDAwMDAwODAgIC8qIEIyIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAyIGN5Y2xlcwkqLworI2RlZmluZSBCMkhUXzMJCQkweDAwMDAwMEMwICAvKiBCMiBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMyBjeWNsZXMJKi8KKyNkZWZpbmUgQjJIVF8wCQkJMHgwMDAwMDAwMCAgLyogQjIgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDAgY3ljbGVzCSovCisjZGVmaW5lIEIyUkFUXzEJCQkweDAwMDAwMTAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gMSBjeWNsZQkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfMgkJCTB4MDAwMDAyMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfMwkJCTB4MDAwMDAzMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfNAkJCTB4MDAwMDA0MDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfNQkJCTB4MDAwMDA1MDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfNgkJCTB4MDAwMDA2MDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfNwkJCTB4MDAwMDA3MDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfOAkJCTB4MDAwMDA4MDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfOQkJCTB4MDAwMDA5MDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfMTAJCTB4MDAwMDBBMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyUkFUXzExCQkweDAwMDAwQjAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMlJBVF8xMgkJMHgwMDAwMEMwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfMTMJCTB4MDAwMDBEMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyUkFUXzE0CQkweDAwMDAwRTAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMlJBVF8xNQkJMHgwMDAwMEYwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfMQkJCTB4MDAwMDEwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMSBjeWNsZQkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfMgkJCTB4MDAwMDIwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzMJCQkweDAwMDAzMDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMldBVF80CQkJMHgwMDAwNDAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfNQkJCTB4MDAwMDUwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzYJCQkweDAwMDA2MDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMldBVF83CQkJMHgwMDAwNzAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfOAkJCTB4MDAwMDgwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzkJCQkweDAwMDA5MDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMldBVF8xMAkJMHgwMDAwQTAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzExCQkweDAwMDBCMDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfMTIJCTB4MDAwMEMwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMldBVF8xMwkJMHgwMDAwRDAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzE0CQkweDAwMDBFMDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfMTUJCTB4MDAwMEYwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzCQkJCQkqLworCisjZGVmaW5lIEIzUkRZRU4JCQkweDAwMDEwMDAwICAvKiBCYW5rIDMgKEIzKSBSRFkgRW5hYmxlCQkJCQkJCSovCisjZGVmaW5lIEIzUkRZUE9MCQkweDAwMDIwMDAwICAvKiBCMyBSRFkgQWN0aXZlIEhpZ2gJCQkJCQkJCSovCisjZGVmaW5lIEIzVFRfMQkJCTB4MDAwNDAwMDAgIC8qIEIzIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAxIGN5Y2xlCQkqLworI2RlZmluZSBCM1RUXzIJCQkweDAwMDgwMDAwICAvKiBCMyBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMiBjeWNsZXMJKi8KKyNkZWZpbmUgQjNUVF8zCQkJMHgwMDBDMDAwMCAgLyogQjMgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDMgY3ljbGVzCSovCisjZGVmaW5lIEIzVFRfNAkJCTB4MDAwMDAwMDAgIC8qIEIzIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSA0IGN5Y2xlcwkqLworI2RlZmluZSBCM1NUXzEJCQkweDAwMTAwMDAwICAvKiBCMyBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAxIGN5Y2xlCQkqLworI2RlZmluZSBCM1NUXzIJCQkweDAwMjAwMDAwICAvKiBCMyBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAyIGN5Y2xlcwkJKi8KKyNkZWZpbmUgQjNTVF8zCQkJMHgwMDMwMDAwMCAgLyogQjMgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMyBjeWNsZXMJCSovCisjZGVmaW5lIEIzU1RfNAkJCTB4MDAwMDAwMDAgIC8qIEIzIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDQgY3ljbGVzCQkqLworI2RlZmluZSBCM0hUXzEJCQkweDAwNDAwMDAwICAvKiBCMyBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMSBjeWNsZQkJKi8KKyNkZWZpbmUgQjNIVF8yCQkJMHgwMDgwMDAwMCAgLyogQjMgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDIgY3ljbGVzCSovCisjZGVmaW5lIEIzSFRfMwkJCTB4MDBDMDAwMDAgIC8qIEIzIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAzIGN5Y2xlcwkqLworI2RlZmluZSBCM0hUXzAJCQkweDAwMDAwMDAwICAvKiBCMyBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMCBjeWNsZXMJKi8KKyNkZWZpbmUgQjNSQVRfMQkJCTB4MDEwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlCQkJCQkqLworI2RlZmluZSBCM1JBVF8yCQkJMHgwMjAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF8zCQkJMHgwMzAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF80CQkJMHgwNDAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF81CQkJMHgwNTAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF82CQkJMHgwNjAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF83CQkJMHgwNzAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF84CQkJMHgwODAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDggY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF85CQkJMHgwOTAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF8xMAkJMHgwQTAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNSQVRfMTEJCTB4MEIwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzUkFUXzEyCQkweDBDMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF8xMwkJMHgwRDAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNSQVRfMTQJCTB4MEUwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzUkFUXzE1CQkweDBGMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1dBVF8xCQkJMHgxMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlCQkJCQkqLworI2RlZmluZSBCM1dBVF8yCQkJMHgyMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfMwkJCTB4MzAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzV0FUXzQJCQkweDQwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1dBVF81CQkJMHg1MDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfNgkJCTB4NjAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzV0FUXzcJCQkweDcwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1dBVF84CQkJMHg4MDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfOQkJCTB4OTAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzV0FUXzEwCQkweEEwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfMTEJCTB4QjAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1dBVF8xMgkJMHhDMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzV0FUXzEzCQkweEQwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfMTQJCTB4RTAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1dBVF8xNQkJMHhGMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMJCQkJCSovCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKiAgU0RSQU0gQ09OVFJPTExFUiBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEVCSVVfU0RHQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFNDVExFCQkJMHgwMDAwMDAwMQkvKiBFbmFibGUgU0RSQU0gU2lnbmFscwkJCQkJCQkJCQkqLworI2RlZmluZSBDTF8yCQkJMHgwMDAwMDAwOAkvKiBTRFJBTSBDQVMgTGF0ZW5jeSA9IDIgY3ljbGVzCQkJCQkJCQkqLworI2RlZmluZSBDTF8zCQkJMHgwMDAwMDAwQwkvKiBTRFJBTSBDQVMgTGF0ZW5jeSA9IDMgY3ljbGVzCQkJCQkJCQkqLworI2RlZmluZSBQQVNSX0FMTAkJMHgwMDAwMDAwMAkvKiBBbGwgNCBTRFJBTSBCYW5rcyBSZWZyZXNoZWQgSW4gU2VsZi1SZWZyZXNoCQkJCSovCisjZGVmaW5lIFBBU1JfQjBfQjEJCTB4MDAwMDAwMTAJLyogU0RSQU0gQmFua3MgMCBhbmQgMSBBcmUgUmVmcmVzaGVkIEluIFNlbGYtUmVmcmVzaAkJKi8KKyNkZWZpbmUgUEFTUl9CMAkJCTB4MDAwMDAwMjAJLyogT25seSBTRFJBTSBCYW5rIDAgSXMgUmVmcmVzaGVkIEluIFNlbGYtUmVmcmVzaAkJCSovCisjZGVmaW5lIFRSQVNfMQkJCTB4MDAwMDAwNDAJLyogU0RSQU0gdFJBUyA9IDEgY3ljbGUJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU18yCQkJMHgwMDAwMDA4MAkvKiBTRFJBTSB0UkFTID0gMiBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkFTXzMJCQkweDAwMDAwMEMwCS8qIFNEUkFNIHRSQVMgPSAzIGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQVNfNAkJCTB4MDAwMDAxMDAJLyogU0RSQU0gdFJBUyA9IDQgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU181CQkJMHgwMDAwMDE0MAkvKiBTRFJBTSB0UkFTID0gNSBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkFTXzYJCQkweDAwMDAwMTgwCS8qIFNEUkFNIHRSQVMgPSA2IGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQVNfNwkJCTB4MDAwMDAxQzAJLyogU0RSQU0gdFJBUyA9IDcgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU184CQkJMHgwMDAwMDIwMAkvKiBTRFJBTSB0UkFTID0gOCBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkFTXzkJCQkweDAwMDAwMjQwCS8qIFNEUkFNIHRSQVMgPSA5IGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQVNfMTAJCQkweDAwMDAwMjgwCS8qIFNEUkFNIHRSQVMgPSAxMCBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkFTXzExCQkJMHgwMDAwMDJDMAkvKiBTRFJBTSB0UkFTID0gMTEgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU18xMgkJCTB4MDAwMDAzMDAJLyogU0RSQU0gdFJBUyA9IDEyIGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQVNfMTMJCQkweDAwMDAwMzQwCS8qIFNEUkFNIHRSQVMgPSAxMyBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkFTXzE0CQkJMHgwMDAwMDM4MAkvKiBTRFJBTSB0UkFTID0gMTQgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU18xNQkJCTB4MDAwMDAzQzAJLyogU0RSQU0gdFJBUyA9IDE1IGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSUF8xCQkJMHgwMDAwMDgwMAkvKiBTRFJBTSB0UlAgPSAxIGN5Y2xlCQkJCQkJCQkJCSovCisjZGVmaW5lIFRSUF8yCQkJMHgwMDAwMTAwMAkvKiBTRFJBTSB0UlAgPSAyIGN5Y2xlcwkJCQkJCQkJCQkqLworI2RlZmluZSBUUlBfMwkJCTB4MDAwMDE4MDAJLyogU0RSQU0gdFJQID0gMyBjeWNsZXMJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJQXzQJCQkweDAwMDAyMDAwCS8qIFNEUkFNIHRSUCA9IDQgY3ljbGVzCQkJCQkJCQkJCSovCisjZGVmaW5lIFRSUF81CQkJMHgwMDAwMjgwMAkvKiBTRFJBTSB0UlAgPSA1IGN5Y2xlcwkJCQkJCQkJCQkqLworI2RlZmluZSBUUlBfNgkJCTB4MDAwMDMwMDAJLyogU0RSQU0gdFJQID0gNiBjeWNsZXMJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJQXzcJCQkweDAwMDAzODAwCS8qIFNEUkFNIHRSUCA9IDcgY3ljbGVzCQkJCQkJCQkJCSovCisjZGVmaW5lIFRSQ0RfMQkJCTB4MDAwMDgwMDAJLyogU0RSQU0gdFJDRCA9IDEgY3ljbGUJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJDRF8yCQkJMHgwMDAxMDAwMAkvKiBTRFJBTSB0UkNEID0gMiBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkNEXzMJCQkweDAwMDE4MDAwCS8qIFNEUkFNIHRSQ0QgPSAzIGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQ0RfNAkJCTB4MDAwMjAwMDAJLyogU0RSQU0gdFJDRCA9IDQgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJDRF81CQkJMHgwMDAyODAwMAkvKiBTRFJBTSB0UkNEID0gNSBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkNEXzYJCQkweDAwMDMwMDAwCS8qIFNEUkFNIHRSQ0QgPSA2IGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQ0RfNwkJCTB4MDAwMzgwMDAJLyogU0RSQU0gdFJDRCA9IDcgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFdSXzEJCQkweDAwMDgwMDAwCS8qIFNEUkFNIHRXUiA9IDEgY3ljbGUJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFdSXzIJCQkweDAwMTAwMDAwCS8qIFNEUkFNIHRXUiA9IDIgY3ljbGVzCQkJCQkJCQkJCSovCisjZGVmaW5lIFRXUl8zCQkJMHgwMDE4MDAwMAkvKiBTRFJBTSB0V1IgPSAzIGN5Y2xlcwkJCQkJCQkJCQkqLworI2RlZmluZSBQVVBTRAkJCTB4MDAyMDAwMDAJLyogUG93ZXItVXAgU3RhcnQgRGVsYXkgKDE1IFNDTEsgQ3ljbGVzIERlbGF5KQkJCQkqLworI2RlZmluZSBQU00JCQkJMHgwMDQwMDAwMAkvKiBQb3dlci1VcCBTZXF1ZW5jZSAoTW9kZSBSZWdpc3RlciBCZWZvcmUvQWZ0ZXIqIFJlZnJlc2gpCSovCisjZGVmaW5lIFBTUwkJCQkweDAwODAwMDAwCS8qIEVuYWJsZSBQb3dlci1VcCBTZXF1ZW5jZSBvbiBOZXh0IFNEUkFNIEFjY2VzcwkJCSovCisjZGVmaW5lIFNSRlMJCQkweDAxMDAwMDAwCS8qIEVuYWJsZSBTRFJBTSBTZWxmLVJlZnJlc2ggTW9kZQkJCQkJCQkqLworI2RlZmluZSBFQlVGRQkJCTB4MDIwMDAwMDAJLyogRW5hYmxlIEV4dGVybmFsIEJ1ZmZlcmluZyBUaW1pbmcJCQkJCQkJKi8KKyNkZWZpbmUgRkJCUlcJCQkweDA0MDAwMDAwCS8qIEVuYWJsZSBGYXN0IEJhY2stVG8tQmFjayBSZWFkIFRvIFdyaXRlCQkJCQkqLworI2RlZmluZSBFTVJFTgkJCTB4MTAwMDAwMDAJLyogRXh0ZW5kZWQgTW9kZSBSZWdpc3RlciBFbmFibGUJCQkJCQkJKi8KKyNkZWZpbmUgVENTUgkJCTB4MjAwMDAwMDAJLyogVGVtcC1Db21wZW5zYXRlZCBTZWxmLVJlZnJlc2ggVmFsdWUgKDg1LzQ1KiBEZWcgQykJCSovCisjZGVmaW5lIENEREJHCQkJMHg0MDAwMDAwMAkvKiBUcmlzdGF0ZSBTRFJBTSBDb250cm9scyBEdXJpbmcgQnVzIEdyYW50CQkJCQkqLworCisvKiBFQklVX1NEQkNUTCBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIEVCRQkJCQkweDAwMDEJCS8qIEVuYWJsZSBTRFJBTSBFeHRlcm5hbCBCYW5rCQkJCQkJCSovCisjZGVmaW5lIEVCU1pfMTYJCQkweDAwMDAJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgU2l6ZSA9IDE2TUIJKi8KKyNkZWZpbmUgRUJTWl8zMgkJCTB4MDAwMgkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBTaXplID0gMzJNQgkqLworI2RlZmluZSBFQlNaXzY0CQkJMHgwMDA0CQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIFNpemUgPSA2NE1CCSovCisjZGVmaW5lIEVCU1pfMTI4CQkweDAwMDYJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgU2l6ZSA9IDEyOE1CCQkqLworI2RlZmluZSBFQlNaXzI1NgkJMHgwMDA4CQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIFNpemUgPSAyNTZNQiAJKi8KKyNkZWZpbmUgRUJTWl81MTIJCTB4MDAwQQkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBTaXplID0gNTEyTUIJCSovCisjZGVmaW5lIEVCQ0FXXzgJCQkweDAwMDAJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgQ29sdW1uIEFkZHJlc3MgV2lkdGggPSA4IEJpdHMJKi8KKyNkZWZpbmUgRUJDQVdfOQkJCTB4MDAxMAkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBDb2x1bW4gQWRkcmVzcyBXaWR0aCA9IDkgQml0cwkqLworI2RlZmluZSBFQkNBV18xMAkJMHgwMDIwCQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIENvbHVtbiBBZGRyZXNzIFdpZHRoID0gMTAgQml0cwkqLworI2RlZmluZSBFQkNBV18xMQkJMHgwMDMwCQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIENvbHVtbiBBZGRyZXNzIFdpZHRoID0gMTEgQml0cwkqLworCisvKiBFQklVX1NEU1RBVCBNYXNrcwkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgU0RDSQkJCTB4MDAwMQkJLyogU0RSQU0gQ29udHJvbGxlciBJZGxlIAkJCQkqLworI2RlZmluZSBTRFNSQQkJCTB4MDAwMgkJLyogU0RSQU0gU2VsZi1SZWZyZXNoIEFjdGl2ZQkJCSovCisjZGVmaW5lIFNEUFVBCQkJMHgwMDA0CQkvKiBTRFJBTSBQb3dlci1VcCBBY3RpdmUgCQkJCSovCisjZGVmaW5lIFNEUlMJCQkweDAwMDgJCS8qIFNEUkFNIFdpbGwgUG93ZXItVXAgT24gTmV4dCBBY2Nlc3MJKi8KKyNkZWZpbmUgU0RFQVNFCQkJMHgwMDEwCQkvKiBTRFJBTSBFQUIgU3RpY2t5IEVycm9yIFN0YXR1cwkJKi8KKyNkZWZpbmUgQkdTVEFUCQkJMHgwMDIwCQkvKiBCdXMgR3JhbnQgU3RhdHVzCQkJCQkJKi8KKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKiAgRE1BIENPTlRST0xMRVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBETUF4X1BFUklQSEVSQUxfTUFQLCBNRE1BX3l5X1BFUklQSEVSQUxfTUFQIE1hc2tzCQkJCQkJCQkqLworI2RlZmluZSBDVFlQRQkJCTB4MDA0MAkvKiBETUEgQ2hhbm5lbCBUeXBlIEluZGljYXRvciAoTWVtb3J5L1BlcmlwaGVyYWwqKQkqLworI2RlZmluZSBQTUFQCQkJMHhGMDAwCS8qIFBlcmlwaGVyYWwgTWFwcGVkIFRvIFRoaXMgQ2hhbm5lbAkJCQkqLworI2RlZmluZSBQTUFQX1BQSQkJMHgwMDAwCS8qIAkJUFBJIFBvcnQgRE1BCQkJCQkJCQkqLworI2RlZmluZQlQTUFQX0VNQUNSWAkJMHgxMDAwCS8qIAkJRXRoZXJuZXQgUmVjZWl2ZSBETUEJCQkJCQkqLworI2RlZmluZSBQTUFQX0VNQUNUWAkJMHgyMDAwCS8qIAkJRXRoZXJuZXQgVHJhbnNtaXQgRE1BCQkJCQkJKi8KKyNkZWZpbmUgUE1BUF9TUE9SVDBSWAkweDMwMDAJLyogCQlTUE9SVDAgUmVjZWl2ZSBETUEJCQkJCQkJKi8KKyNkZWZpbmUgUE1BUF9TUE9SVDBUWAkweDQwMDAJLyogCQlTUE9SVDAgVHJhbnNtaXQgRE1BCQkJCQkJCSovCisjZGVmaW5lIFBNQVBfU1BPUlQxUlgJMHg1MDAwCS8qIAkJU1BPUlQxIFJlY2VpdmUgRE1BCQkJCQkJCSovCisjZGVmaW5lIFBNQVBfU1BPUlQxVFgJMHg2MDAwCS8qIAkJU1BPUlQxIFRyYW5zbWl0IERNQQkJCQkJCQkqLworI2RlZmluZSBQTUFQX1NQSQkJMHg3MDAwCS8qIAkJU1BJIFBvcnQgRE1BCQkJCQkJCQkqLworI2RlZmluZSBQTUFQX1VBUlQwUlgJMHg4MDAwCS8qIAkJVUFSVDAgUG9ydCBSZWNlaXZlIERNQQkJCQkJCSovCisjZGVmaW5lIFBNQVBfVUFSVDBUWAkweDkwMDAJLyogCQlVQVJUMCBQb3J0IFRyYW5zbWl0IERNQQkJCQkJCSovCisjZGVmaW5lCVBNQVBfVUFSVDFSWAkweEEwMDAJLyogCQlVQVJUMSBQb3J0IFJlY2VpdmUgRE1BCQkJCQkJKi8KKyNkZWZpbmUJUE1BUF9VQVJUMVRYCTB4QjAwMAkvKiAJCVVBUlQxIFBvcnQgVHJhbnNtaXQgRE1BCQkJCQkJKi8KKworLyogICoqKioqKioqKioqKiAgUEFSQUxMRUwgUEVSSVBIRVJBTCBJTlRFUkZBQ0UgKFBQSSkgTUFTS1MgKioqKioqKioqKioqKi8KKy8qICBQUElfQ09OVFJPTCBNYXNrcwkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBQT1JUX0VOCQkJMHgwMDAxCQkvKiBQUEkgUG9ydCBFbmFibGUJCQkJCSovCisjZGVmaW5lIFBPUlRfRElSCQkweDAwMDIJCS8qIFBQSSBQb3J0IERpcmVjdGlvbgkJCQkqLworI2RlZmluZSBYRlJfVFlQRQkJMHgwMDBDCQkvKiBQUEkgVHJhbnNmZXIgVHlwZQkJCQkqLworI2RlZmluZSBQT1JUX0NGRwkJMHgwMDMwCQkvKiBQUEkgUG9ydCBDb25maWd1cmF0aW9uCQkJKi8KKyNkZWZpbmUgRkxEX1NFTAkJCTB4MDA0MAkJLyogUFBJIEFjdGl2ZSBGaWVsZCBTZWxlY3QJCQkqLworI2RlZmluZSBQQUNLX0VOCQkJMHgwMDgwCQkvKiBQUEkgUGFja2luZyBNb2RlCQkJCQkqLworI2RlZmluZSBETUEzMgkJCTB4MDEwMAkJLyogUFBJIDMyLWJpdCBETUEgRW5hYmxlCQkJKi8KKyNkZWZpbmUgU0tJUF9FTgkJCTB4MDIwMAkJLyogUFBJIFNraXAgRWxlbWVudCBFbmFibGUJCQkqLworI2RlZmluZSBTS0lQX0VPCQkJMHgwNDAwCQkvKiBQUEkgU2tpcCBFdmVuL09kZCBFbGVtZW50cwkJKi8KKyNkZWZpbmUgRExFTl84CQkJMHgwMDAwCQkvKiBEYXRhIExlbmd0aCA9IDggQml0cwkJCQkqLworI2RlZmluZSBETEVOXzEwCQkJMHgwODAwCQkvKiBEYXRhIExlbmd0aCA9IDEwIEJpdHMJCQkqLworI2RlZmluZSBETEVOXzExCQkJMHgxMDAwCQkvKiBEYXRhIExlbmd0aCA9IDExIEJpdHMJCQkqLworI2RlZmluZSBETEVOXzEyCQkJMHgxODAwCQkvKiBEYXRhIExlbmd0aCA9IDEyIEJpdHMJCQkqLworI2RlZmluZSBETEVOXzEzCQkJMHgyMDAwCQkvKiBEYXRhIExlbmd0aCA9IDEzIEJpdHMJCQkqLworI2RlZmluZSBETEVOXzE0CQkJMHgyODAwCQkvKiBEYXRhIExlbmd0aCA9IDE0IEJpdHMJCQkqLworI2RlZmluZSBETEVOXzE1CQkJMHgzMDAwCQkvKiBEYXRhIExlbmd0aCA9IDE1IEJpdHMJCQkqLworI2RlZmluZSBETEVOXzE2CQkJMHgzODAwCQkvKiBEYXRhIExlbmd0aCA9IDE2IEJpdHMJCQkqLworI2RlZmluZSBETEVOR1RICQkJMHgzODAwCQkvKiBQUEkgRGF0YSBMZW5ndGggICovCisjZGVmaW5lIFBPTEMJCQkweDQwMDAJCS8qIFBQSSBDbG9jayBQb2xhcml0eQkJCQkqLworI2RlZmluZSBQT0xTCQkJMHg4MDAwCQkvKiBQUEkgRnJhbWUgU3luYyBQb2xhcml0eQkJCSovCisKKy8qIFBQSV9TVEFUVVMgTWFza3MJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIEZMRAkJCQkweDA0MDAJCS8qIEZpZWxkIEluZGljYXRvcgkJCQkJKi8KKyNkZWZpbmUgRlRfRVJSCQkJMHgwODAwCQkvKiBGcmFtZSBUcmFjayBFcnJvcgkJCQkqLworI2RlZmluZSBPVlIJCQkJMHgxMDAwCQkvKiBGSUZPIE92ZXJmbG93IEVycm9yCQkJCSovCisjZGVmaW5lIFVORFIJCQkweDIwMDAJCS8qIEZJRk8gVW5kZXJydW4gRXJyb3IJCQkJKi8KKyNkZWZpbmUgRVJSX0RFVAkJCTB4NDAwMAkJLyogRXJyb3IgRGV0ZWN0ZWQgSW5kaWNhdG9yCQkJKi8KKyNkZWZpbmUgRVJSX05DT1IJCTB4ODAwMAkJLyogRXJyb3IgTm90IENvcnJlY3RlZCBJbmRpY2F0b3IJKi8KKworCisvKiAgKioqKioqKioqKioqKioqKioqKiogIFRXTy1XSVJFIElOVEVSRkFDRSAoVFdJKSBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUV0lfQ0xLRElWIE1hY3JvcyAoVXNlOiAqcFRXSV9DTEtESVYgPSBDTEtMT1coeCl8Q0xLSEkoeSk7ICApCQkJCSovCisjZGVmaW5lCUNMS0xPVyh4KQkoKHgpICYgMHhGRikJCS8qIFBlcmlvZHMgQ2xvY2sgSXMgSGVsZCBMb3cJCQkqLworI2RlZmluZSBDTEtISSh5KQkoKCh5KSYweEZGKTw8MHg4KQkvKiBQZXJpb2RzIEJlZm9yZSBOZXcgQ2xvY2sgTG93CQkJKi8KKworLyogVFdJX1BSRVNDQUxFIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUJUFJFU0NBTEUJMHgwMDdGCQkvKiBTQ0xLcyBQZXIgSW50ZXJuYWwgVGltZSBSZWZlcmVuY2UgKDEwTUh6KQkqLworI2RlZmluZQlUV0lfRU5BCQkweDAwODAJCS8qIFRXSSBFbmFibGUJCQkJCQkJCQkqLworI2RlZmluZQlTQ0NCCQkweDAyMDAJCS8qIFNDQ0IgQ29tcGF0aWJpbGl0eSBFbmFibGUJCQkJCSovCisKKy8qIFRXSV9TTEFWRV9DVEwgTWFza3MJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZQlTRU4JCQkweDAwMDEJCS8qIFNsYXZlIEVuYWJsZQkJCQkJCQkJCSovCisjZGVmaW5lCVNBRERfTEVOCTB4MDAwMgkJLyogU2xhdmUgQWRkcmVzcyBMZW5ndGgJCQkJCQkJKi8KKyNkZWZpbmUJU1REVkFMCQkweDAwMDQJCS8qIFNsYXZlIFRyYW5zbWl0IERhdGEgVmFsaWQJCQkJCSovCisjZGVmaW5lCU5BSwkJCTB4MDAwOAkJLyogTkFLL0FDSyogR2VuZXJhdGVkIEF0IENvbmNsdXNpb24gT2YgVHJhbnNmZXIgKi8KKyNkZWZpbmUJR0VOCQkJMHgwMDEwCQkvKiBHZW5lcmFsIENhbGwgQWRycmVzcyBNYXRjaGluZyBFbmFibGVkCQkqLworCisvKiBUV0lfU0xBVkVfU1RBVCBNYXNrcwkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCVNESVIJCTB4MDAwMQkJLyogU2xhdmUgVHJhbnNmZXIgRGlyZWN0aW9uIChUcmFuc21pdC9SZWNlaXZlKikJKi8KKyNkZWZpbmUgR0NBTEwJCTB4MDAwMgkJLyogR2VuZXJhbCBDYWxsIEluZGljYXRvcgkJCQkJCSovCisKKy8qIFRXSV9NQVNURVJfQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCU1FTgkJCTB4MDAwMQkJLyogTWFzdGVyIE1vZGUgRW5hYmxlCQkJCQkJKi8KKyNkZWZpbmUJTUFERF9MRU4JMHgwMDAyCQkvKiBNYXN0ZXIgQWRkcmVzcyBMZW5ndGgJCQkJCSovCisjZGVmaW5lCU1ESVIJCTB4MDAwNAkJLyogTWFzdGVyIFRyYW5zbWl0IERpcmVjdGlvbiAoUlgvVFgqKQkJKi8KKyNkZWZpbmUJRkFTVAkJMHgwMDA4CQkvKiBVc2UgRmFzdCBNb2RlIFRpbWluZyBTcGVjcwkJCQkqLworI2RlZmluZQlTVE9QCQkweDAwMTAJCS8qIElzc3VlIFN0b3AgQ29uZGl0aW9uCQkJCQkJKi8KKyNkZWZpbmUJUlNUQVJUCQkweDAwMjAJCS8qIFJlcGVhdCBTdGFydCBvciBTdG9wKiBBdCBFbmQgT2YgVHJhbnNmZXIJKi8KKyNkZWZpbmUJRENOVAkJMHgzRkMwCQkvKiBEYXRhIEJ5dGVzIFRvIFRyYW5zZmVyCQkJCQkqLworI2RlZmluZQlTREFPVlIJCTB4NDAwMAkJLyogU2VyaWFsIERhdGEgT3ZlcnJpZGUJCQkJCQkqLworI2RlZmluZQlTQ0xPVlIJCTB4ODAwMAkJLyogU2VyaWFsIENsb2NrIE92ZXJyaWRlCQkJCQkqLworCisvKiBUV0lfTUFTVEVSX1NUQVQgTWFza3MJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCU1QUk9HCQkweDAwMDEJCS8qIE1hc3RlciBUcmFuc2ZlciBJbiBQcm9ncmVzcwkJCQkJKi8KKyNkZWZpbmUJTE9TVEFSQgkJMHgwMDAyCQkvKiBMb3N0IEFyYml0cmF0aW9uIEluZGljYXRvciAoWGZlciBBYm9ydGVkKQkqLworI2RlZmluZQlBTkFLCQkweDAwMDQJCS8qIEFkZHJlc3MgTm90IEFja25vd2xlZGdlZAkJCQkJCSovCisjZGVmaW5lCUROQUsJCTB4MDAwOAkJLyogRGF0YSBOb3QgQWNrbm93bGVkZ2VkCQkJCQkJKi8KKyNkZWZpbmUJQlVGUkRFUlIJMHgwMDEwCQkvKiBCdWZmZXIgUmVhZCBFcnJvcgkJCQkJCQkqLworI2RlZmluZQlCVUZXUkVSUgkweDAwMjAJCS8qIEJ1ZmZlciBXcml0ZSBFcnJvcgkJCQkJCQkqLworI2RlZmluZQlTREFTRU4JCTB4MDA0MAkJLyogU2VyaWFsIERhdGEgU2Vuc2UJCQkJCQkJKi8KKyNkZWZpbmUJU0NMU0VOCQkweDAwODAJCS8qIFNlcmlhbCBDbG9jayBTZW5zZQkJCQkJCQkqLworI2RlZmluZQlCVVNCVVNZCQkweDAxMDAJCS8qIEJ1cyBCdXN5IEluZGljYXRvcgkJCQkJCQkqLworCisvKiBUV0lfSU5UX1NSQyBhbmQgVFdJX0lOVF9FTkFCTEUgTWFza3MJCQkJCQkqLworI2RlZmluZQlTSU5JVAkJMHgwMDAxCQkvKiBTbGF2ZSBUcmFuc2ZlciBJbml0aWF0ZWQJKi8KKyNkZWZpbmUJU0NPTVAJCTB4MDAwMgkJLyogU2xhdmUgVHJhbnNmZXIgQ29tcGxldGUJKi8KKyNkZWZpbmUJU0VSUgkJMHgwMDA0CQkvKiBTbGF2ZSBUcmFuc2ZlciBFcnJvcgkJKi8KKyNkZWZpbmUJU09WRgkJMHgwMDA4CQkvKiBTbGF2ZSBPdmVyZmxvdwkJCSovCisjZGVmaW5lCU1DT01QCQkweDAwMTAJCS8qIE1hc3RlciBUcmFuc2ZlciBDb21wbGV0ZQkqLworI2RlZmluZQlNRVJSCQkweDAwMjAJCS8qIE1hc3RlciBUcmFuc2ZlciBFcnJvcgkqLworI2RlZmluZQlYTVRTRVJWCQkweDAwNDAJCS8qIFRyYW5zbWl0IEZJRk8gU2VydmljZQkqLworI2RlZmluZQlSQ1ZTRVJWCQkweDAwODAJCS8qIFJlY2VpdmUgRklGTyBTZXJ2aWNlCQkqLworCisvKiBUV0lfRklGT19DVFJMIE1hc2tzCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUJWE1URkxVU0gJMHgwMDAxCQkvKiBUcmFuc21pdCBCdWZmZXIgRmx1c2gJCQkqLworI2RlZmluZQlSQ1ZGTFVTSAkweDAwMDIJCS8qIFJlY2VpdmUgQnVmZmVyIEZsdXNoCQkJCSovCisjZGVmaW5lCVhNVElOVExFTgkweDAwMDQJCS8qIFRyYW5zbWl0IEJ1ZmZlciBJbnRlcnJ1cHQgTGVuZ3RoCSovCisjZGVmaW5lCVJDVklOVExFTgkweDAwMDgJCS8qIFJlY2VpdmUgQnVmZmVyIEludGVycnVwdCBMZW5ndGgJKi8KKworLyogVFdJX0ZJRk9fU1RBVCBNYXNrcwkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCVhNVFNUQVQJCTB4MDAwMwkJLyogVHJhbnNtaXQgRklGTyBTdGF0dXMJCQkJCQkJKi8KKyNkZWZpbmUJWE1UX0VNUFRZCTB4MDAwMAkJLyogCQlUcmFuc21pdCBGSUZPIEVtcHR5CQkJCQkJKi8KKyNkZWZpbmUJWE1UX0hBTEYJMHgwMDAxCQkvKiAJCVRyYW5zbWl0IEZJRk8gSGFzIDEgQnl0ZSBUbyBXcml0ZQkJKi8KKyNkZWZpbmUJWE1UX0ZVTEwJMHgwMDAzCQkvKiAJCVRyYW5zbWl0IEZJRk8gRnVsbCAoMiBCeXRlcyBUbyBXcml0ZSkJKi8KKworI2RlZmluZQlSQ1ZTVEFUCQkweDAwMEMJCS8qIFJlY2VpdmUgRklGTyBTdGF0dXMJCQkJCQkJKi8KKyNkZWZpbmUJUkNWX0VNUFRZCTB4MDAwMAkJLyogCQlSZWNlaXZlIEZJRk8gRW1wdHkJCQkJCQkqLworI2RlZmluZQlSQ1ZfSEFMRgkweDAwMDQJCS8qIAkJUmVjZWl2ZSBGSUZPIEhhcyAxIEJ5dGUgVG8gUmVhZAkJCSovCisjZGVmaW5lCVJDVl9GVUxMCTB4MDAwQwkJLyogCQlSZWNlaXZlIEZJRk8gRnVsbCAoMiBCeXRlcyBUbyBSZWFkKQkJKi8KKworCisvKiBPbWl0IENBTiBtYXNrcyBmcm9tIGRlZkJGNTM0LmggKi8KKworLyogICoqKioqKioqKioqKioqKioqKiogIFBJTiBDT05UUk9MIFJFR0lTVEVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQT1JUX01VWCBNYXNrcwkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCVBKU0UJCQkweDAwMDEJCQkvKiBQb3J0IEogU1BJL1NQT1JUIEVuYWJsZQkJCSovCisjZGVmaW5lCVBKU0VfU1BPUlQJCTB4MDAwMAkJCS8qIAkJRW5hYmxlIFRGUzAvRFQwUFJJCQkJKi8KKyNkZWZpbmUJUEpTRV9TUEkJCTB4MDAwMQkJCS8qIAkJRW5hYmxlIFNQSV9TU0VMMzoyCQkJKi8KKworI2RlZmluZQlQSkNFKHgpCQkJKCgoeCkmMHgzKTw8MSkJLyogUG9ydCBKIENBTi9TUEkvU1BPUlQgRW5hYmxlCQkqLworI2RlZmluZQlQSkNFX1NQT1JUCQkweDAwMDAJCQkvKiAJCUVuYWJsZSBEUjBTRUMvRFQwU0VDCQkqLworI2RlZmluZQlQSkNFX0NBTgkJMHgwMDAyCQkJLyogCQlFbmFibGUgQ0FOIFJYL1RYCQkJKi8KKyNkZWZpbmUJUEpDRV9TUEkJCTB4MDAwNAkJCS8qIAkJRW5hYmxlIFNQSV9TU0VMNwkJCSovCisKKyNkZWZpbmUJUEZERQkJCTB4MDAwOAkJCS8qIFBvcnQgRiBETUEgUmVxdWVzdCBFbmFibGUJCSovCisjZGVmaW5lCVBGREVfVUFSVAkJMHgwMDAwCQkJLyogCQlFbmFibGUgVUFSVDAgUlgvVFgJCQkqLworI2RlZmluZQlQRkRFX0RNQQkJMHgwMDA4CQkJLyogCQlFbmFibGUgRE1BUjE6MAkJCQkqLworCisjZGVmaW5lCVBGVEUJCQkweDAwMTAJCQkvKiBQb3J0IEYgVGltZXIgRW5hYmxlCQkJCSovCisjZGVmaW5lCVBGVEVfVUFSVAkJMHgwMDAwCQkJLyoJCUVuYWJsZSBVQVJUMSBSWC9UWAkJCSovCisjZGVmaW5lCVBGVEVfVElNRVIJCTB4MDAxMAkJCS8qIAkJRW5hYmxlIFRNUjc6NgkJCQkqLworCisjZGVmaW5lCVBGUzZFCQkJMHgwMDIwCQkJLyogUG9ydCBGIFNQSSBTU0VMIDYgRW5hYmxlCQkJKi8KKyNkZWZpbmUJUEZTNkVfVElNRVIJCTB4MDAwMAkJCS8qCQlFbmFibGUgVE1SNQkJCQkJKi8KKyNkZWZpbmUJUEZTNkVfU1BJCQkweDAwMjAJCQkvKiAJCUVuYWJsZSBTUElfU1NFTDYJCQkqLworCisjZGVmaW5lCVBGUzVFCQkJMHgwMDQwCQkJLyogUG9ydCBGIFNQSSBTU0VMIDUgRW5hYmxlCQkJKi8KKyNkZWZpbmUJUEZTNUVfVElNRVIJCTB4MDAwMAkJCS8qCQlFbmFibGUgVE1SNAkJCQkJKi8KKyNkZWZpbmUJUEZTNUVfU1BJCQkweDAwNDAJCQkvKiAJCUVuYWJsZSBTUElfU1NFTDUJCQkqLworCisjZGVmaW5lCVBGUzRFCQkJMHgwMDgwCQkJLyogUG9ydCBGIFNQSSBTU0VMIDQgRW5hYmxlCQkJKi8KKyNkZWZpbmUJUEZTNEVfVElNRVIJCTB4MDAwMAkJCS8qCQlFbmFibGUgVE1SMwkJCQkJKi8KKyNkZWZpbmUJUEZTNEVfU1BJCQkweDAwODAJCQkvKiAJCUVuYWJsZSBTUElfU1NFTDQJCQkqLworCisjZGVmaW5lCVBGRkUJCQkweDAxMDAJCQkvKiBQb3J0IEYgUFBJIEZyYW1lIFN5bmMgRW5hYmxlCQkqLworI2RlZmluZQlQRkZFX1RJTUVSCQkweDAwMDAJCQkvKiAJCUVuYWJsZSBUTVIyCQkJCQkqLworI2RlZmluZQlQRkZFX1BQSQkJMHgwMTAwCQkJLyogCQlFbmFibGUgUFBJIEZTMwkJCQkqLworCisjZGVmaW5lCVBHU0UJCQkweDAyMDAJCQkvKiBQb3J0IEcgU1BPUlQxIFNlY29uZGFyeSBFbmFibGUJKi8KKyNkZWZpbmUJUEdTRV9QUEkJCTB4MDAwMAkJCS8qIAkJRW5hYmxlIFBQSSBEOTo4CQkJCSovCisjZGVmaW5lCVBHU0VfU1BPUlQJCTB4MDIwMAkJCS8qIAkJRW5hYmxlIERSMVNFQy9EVDFTRUMJCSovCisKKyNkZWZpbmUJUEdSRQkJCTB4MDQwMAkJCS8qIFBvcnQgRyBTUE9SVDEgUmVjZWl2ZSBFbmFibGUJCSovCisjZGVmaW5lCVBHUkVfUFBJCQkweDAwMDAJCQkvKiAJCUVuYWJsZSBQUEkgRDEyOjEwCQkJKi8KKyNkZWZpbmUJUEdSRV9TUE9SVAkJMHgwNDAwCQkJLyogCQlFbmFibGUgRFIxUFJJL1JGUzEvUlNDTEsxCSovCisKKyNkZWZpbmUJUEdURQkJCTB4MDgwMAkJCS8qIFBvcnQgRyBTUE9SVDEgVHJhbnNtaXQgRW5hYmxlCSovCisjZGVmaW5lCVBHVEVfUFBJCQkweDAwMDAJCQkvKiAJCUVuYWJsZSBQUEkgRDE1OjEzCQkJKi8KKyNkZWZpbmUJUEdURV9TUE9SVAkJMHgwODAwCQkJLyogCQlFbmFibGUgRFQxUFJJL1RGUzEvVFNDTEsxCSovCisKKworLyogICoqKioqKioqKioqKioqKioqKiAgSEFORFNIQUtFIERNQSAoSERNQSkgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKi8KKy8qIEhETUF4X0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUJSE1ETUFFTgkJMHgwMDAxCS8qIEVuYWJsZSBIYW5kc2hha2UgRE1BIDAvMQkJCQkJKi8KKyNkZWZpbmUJUkVQCQkJMHgwMDAyCS8qIEhETUEgUmVxdWVzdCBQb2xhcml0eQkJCQkJKi8KKyNkZWZpbmUJVVRFCQkJMHgwMDA0CS8qIFVyZ2VuY3kgVGhyZXNob2xkIEVuYWJsZQkJCQkJKi8KKyNkZWZpbmUJT0lFCQkJMHgwMDEwCS8qIE92ZXJmbG93IEludGVycnVwdCBFbmFibGUJCQkJKi8KKyNkZWZpbmUJQkRJRQkJMHgwMDIwCS8qIEJsb2NrIERvbmUgSW50ZXJydXB0IEVuYWJsZQkJCQkqLworI2RlZmluZQlNQkRJCQkweDAwNDAJLyogTWFzayBCbG9jayBEb25lIElSUSBJZiBQZW5kaW5nIEVDTlQJCSovCisjZGVmaW5lCURSUQkJCTB4MDMwMAkvKiBIRE1BIFJlcXVlc3QgVHlwZQkJCQkJCSovCisjZGVmaW5lCURSUV9OT05FCTB4MDAwMAkvKiAJCU5vIFJlcXVlc3QJCQkJCQkJKi8KKyNkZWZpbmUJRFJRX1NJTkdMRQkweDAxMDAJLyogCQlDaGFubmVscyBSZXF1ZXN0IFNpbmdsZQkJCQkqLworI2RlZmluZQlEUlFfTVVMVEkJMHgwMjAwCS8qIAkJQ2hhbm5lbHMgUmVxdWVzdCBNdWx0aSAoRGVmYXVsdCkJKi8KKyNkZWZpbmUJRFJRX1VSR0VOVAkweDAzMDAJLyogCQlDaGFubmVscyBSZXF1ZXN0IE11bHRpIFVyZ2VudAkJKi8KKyNkZWZpbmUJUkJDCQkJMHgxMDAwCS8qIFJlbG9hZCBCQ05UIFdpdGggSUJDTlQJCQkJCSovCisjZGVmaW5lCVBTCQkJMHgyMDAwCS8qIEhETUEgUGluIFN0YXR1cwkJCQkJCQkqLworI2RlZmluZQlPSQkJCTB4NDAwMAkvKiBPdmVyZmxvdyBJbnRlcnJ1cHQgR2VuZXJhdGVkCQkJCSovCisjZGVmaW5lCUJESQkJCTB4ODAwMAkvKiBCbG9jayBEb25lIEludGVycnVwdCBHZW5lcmF0ZWQJCQkqLworCisvKiBlbnRyeSBhZGRyZXNzZXMgb2YgdGhlIHVzZXItY2FsbGFibGUgQm9vdCBST00gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgX0JPT1RST01fUkVTRVQgMHhFRjAwMDAwMAorI2RlZmluZSBfQk9PVFJPTV9GSU5BTF9JTklUIDB4RUYwMDAwMDIKKyNkZWZpbmUgX0JPT1RST01fRE9fTUVNT1JZX0RNQSAweEVGMDAwMDA2CisjZGVmaW5lIF9CT09UUk9NX0JPT1RfRFhFX0ZMQVNIIDB4RUYwMDAwMDgKKyNkZWZpbmUgX0JPT1RST01fQk9PVF9EWEVfU1BJIDB4RUYwMDAwMEEKKyNkZWZpbmUgX0JPT1RST01fQk9PVF9EWEVfVFdJIDB4RUYwMDAwMEMKKyNkZWZpbmUgX0JPT1RST01fR0VUX0RYRV9BRERSRVNTX0ZMQVNIIDB4RUYwMDAwMTAKKyNkZWZpbmUgX0JPT1RST01fR0VUX0RYRV9BRERSRVNTX1NQSSAweEVGMDAwMDEyCisjZGVmaW5lIF9CT09UUk9NX0dFVF9EWEVfQUREUkVTU19UV0kgMHhFRjAwMDAxNAorCisvKiBBbHRlcm5hdGUgRGVwcmVjYXRlZCBNYWNyb3MgUHJvdmlkZWQgRm9yIEJhY2t3YXJkcyBDb2RlIENvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUJUEdERV9VQVJUICAgUEZERV9VQVJUCisjZGVmaW5lCVBHREVfRE1BICAgIFBGREVfRE1BCisjZGVmaW5lCUNLRUxPVwkJU0NLRUxPVworCisvKiA9PT09IGVuZCBmcm9tIGRlZkJGNTM0LmggPT09PSAqLworCisvKiBIT1NUIFBvcnQgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBIT1NUX0NPTlRST0wgIDB4ZmZjMDM0MDAgICAvKiBIT1NUIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUVVMgIDB4ZmZjMDM0MDQgICAvKiBIT1NUIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPU1RfVElNRU9VVCAgMHhmZmMwMzQwOCAgIC8qIEhPU1QgQWNrbm93bGVkZ2UgTW9kZSBUaW1lb3V0IFJlZ2lzdGVyICovCisKKy8qIENvdW50ZXIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENOVF9DT05GSUcgIDB4ZmZjMDM1MDAgICAvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ05UX0lNQVNLICAweGZmYzAzNTA0ICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENOVF9TVEFUVVMgIDB4ZmZjMDM1MDggICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ05UX0NPTU1BTkQgIDB4ZmZjMDM1MGMgICAvKiBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ05UX0RFQk9VTkNFICAweGZmYzAzNTEwICAgLyogRGVib3VuY2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ05UX0NPVU5URVIgIDB4ZmZjMDM1MTQgICAvKiBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBDTlRfTUFYICAweGZmYzAzNTE4ICAgLyogTWF4aW1hbCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgQ05UX01JTiAgMHhmZmMwMzUxYyAgIC8qIE1pbmltYWwgQ291bnQgUmVnaXN0ZXIgKi8KKworLyogT1RQL0ZVU0UgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgT1RQX0NPTlRST0wgIDB4ZmZjMDM2MDAgICAvKiBPVFAvRnVzZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBPVFBfQkVOICAweGZmYzAzNjA0ICAgLyogT1RQL0Z1c2UgQnl0ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE9UUF9TVEFUVVMgIDB4ZmZjMDM2MDggICAvKiBPVFAvRnVzZSBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE9UUF9USU1JTkcgIDB4ZmZjMDM2MGMgICAvKiBPVFAvRnVzZSBBY2Nlc3MgVGltaW5nICovCisKKy8qIFNlY3VyaXR5IFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTRUNVUkVfU1lTU1dUICAweGZmYzAzNjIwICAgLyogU2VjdXJlIFN5c3RlbSBTd2l0Y2hlcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNVUkVfQ09OVFJPTCAgMHhmZmMwMzYyNCAgIC8qIFNlY3VyZSBDb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTRUNVUkVfU1RBVFVTICAweGZmYzAzNjI4ICAgLyogU2VjdXJlIFN0YXR1cyAqLworCisvKiBPVFAgUmVhZC9Xcml0ZSBEYXRhIEJ1ZmZlciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9UUF9EQVRBMCAgMHhmZmMwMzY4MCAgIC8qIE9UUC9GdXNlIERhdGEgKE9UUF9EQVRBMC0zKSBhY2Nlc3NlcyB0aGUgZnVzZSByZWFkIHdyaXRlIGJ1ZmZlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9UUF9EQVRBMSAgMHhmZmMwMzY4NCAgIC8qIE9UUC9GdXNlIERhdGEgKE9UUF9EQVRBMC0zKSBhY2Nlc3NlcyB0aGUgZnVzZSByZWFkIHdyaXRlIGJ1ZmZlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9UUF9EQVRBMiAgMHhmZmMwMzY4OCAgIC8qIE9UUC9GdXNlIERhdGEgKE9UUF9EQVRBMC0zKSBhY2Nlc3NlcyB0aGUgZnVzZSByZWFkIHdyaXRlIGJ1ZmZlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9UUF9EQVRBMyAgMHhmZmMwMzY4YyAgIC8qIE9UUC9GdXNlIERhdGEgKE9UUF9EQVRBMC0zKSBhY2Nlc3NlcyB0aGUgZnVzZSByZWFkIHdyaXRlIGJ1ZmZlciAqLworCisvKiBORkMgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIE5GQ19DVEwgIDB4ZmZjMDM3MDAgICAvKiBOQU5EIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX1NUQVQgIDB4ZmZjMDM3MDQgICAvKiBOQU5EIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBORkNfSVJRU1RBVCAgMHhmZmMwMzcwOCAgIC8qIE5BTkQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBORkNfSVJRTUFTSyAgMHhmZmMwMzcwYyAgIC8qIE5BTkQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX0VDQzAgIDB4ZmZjMDM3MTAgICAvKiBOQU5EIEVDQyBSZWdpc3RlciAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIE5GQ19FQ0MxICAweGZmYzAzNzE0ICAgLyogTkFORCBFQ0MgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBORkNfRUNDMiAgMHhmZmMwMzcxOCAgIC8qIE5BTkQgRUNDIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX0VDQzMgIDB4ZmZjMDM3MWMgICAvKiBOQU5EIEVDQyBSZWdpc3RlciAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgTkZDX0NPVU5UICAweGZmYzAzNzIwICAgLyogTkFORCBFQ0MgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIE5GQ19SU1QgIDB4ZmZjMDM3MjQgICAvKiBOQU5EIEVDQyBSZXNldCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE5GQ19QR0NUTCAgMHhmZmMwMzcyOCAgIC8qIE5BTkQgUGFnZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIE5GQ19SRUFEICAweGZmYzAzNzJjICAgLyogTkFORCBSZWFkIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX0FERFIgIDB4ZmZjMDM3NDAgICAvKiBOQU5EIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIE5GQ19DTUQgIDB4ZmZjMDM3NDQgICAvKiBOQU5EIENvbW1hbmQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTkZDX0RBVEFfV1IgIDB4ZmZjMDM3NDggICAvKiBOQU5EIERhdGEgV3JpdGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTkZDX0RBVEFfUkQgIDB4ZmZjMDM3NGMgICAvKiBOQU5EIERhdGEgUmVhZCBSZWdpc3RlciAqLworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiAgICAgU0lOR0xFIEJJVCBNQUNSTyBQQUlSUyAoYml0IG1hc2sgYW5kIG5lZ2F0ZWQgb25lKSAgICAgICovCisvKiAgICAgYW5kIE1VTFRJIEJJVCBSRUFEIE1BQ1JPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qIEJpdCBtYXNrcyBmb3IgSE9TVF9DT05UUk9MICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX0hPU1RfRU4gIDB4MSAgICAgICAgLyogSG9zdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfbkhPU1RfRU4gIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9IT1NUX0VORCAgMHgyICAgICAgICAvKiBIb3N0IEVuZGlhbmVzcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX25IT1NUX0VORCAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfREFUQV9TSVpFICAweDQgICAgICAgIC8qIERhdGEgU2l6ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBIT1NUX0NOVFJfbkRBVEFfU0laRSAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX0hPU1RfUlNUICAweDggICAgICAgIC8qIEhvc3QgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9uSE9TVF9SU1QgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9IUkRZX09WUiAgMHgyMCAgICAgICAvKiBIb3N0IFJlYWR5IE92ZXJyaWRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfbkhSRFlfT1ZSICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfSU5UX01PREUgIDB4NDAgICAgICAgLyogSW50ZXJydXB0IE1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9uSU5UX01PREUgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9CVF9FTiAgMHg4MCAgICAgICAvKiBCdXMgVGltZW91dCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSXyBuQlRfRU4gIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX0VIVyAgMHgxMDAgICAgICAvKiBFbmFibGUgSG9zdCBXcml0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfbkVIVyAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfRUhSICAweDIwMCAgICAgIC8qIEVuYWJsZSBIb3N0IFJlYWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX25FSFIgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX0JEUiAgMHg0MDAgICAgICAvKiBCdXJzdCBETUEgUmVxdWVzdHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX25CRFIgIDB4MAorCisvKiBCaXQgbWFza3MgZm9yIEhPU1RfU1RBVFVTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfUkVBRFkgIDB4MSAgICAgICAgLyogRE1BIFJlYWR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfblJFQURZICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfRklGT0ZVTEwgIDB4MiAgICAgICAgLyogRklGTyBGdWxsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfbkZJRk9GVUxMICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9GSUZPRU1QVFkgIDB4NCAgICAgICAgLyogRklGTyBFbXB0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBIT1NUX1NUQVRfbkZJRk9FTVBUWSAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX0NPTVBMRVRFICAweDggICAgICAgIC8qIERNQSBDb21wbGV0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX25DT01QTEVURSAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9IU0hLICAweDEwICAgICAgIC8qIEhvc3QgSGFuZHNoYWtlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX25IU0hLICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX1RJTUVPVVQgIDB4MjAgICAgICAgLyogSG9zdCBUaW1lb3V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX25USU1FT1VUICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX0hJUlEgIDB4NDAgICAgICAgLyogSG9zdCBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9uSElSUSAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9BTExPV19DTkZHICAweDgwICAgICAgIC8qIEFsbG93IE5ldyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgSE9TVF9TVEFUX25BTExPV19DTkZHICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX0RNQV9ESVIgIDB4MTAwICAgICAgLyogRE1BIERpcmVjdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9uRE1BX0RJUiAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfQlRFICAweDIwMCAgICAgIC8qIEJ1cyBUaW1lb3V0IEVuYWJsZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX25CVEUgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgIEhPU1RfU1RBVF9IT1NUUkRfRE9ORSAgMHg4MDAwICAgICAvKiBIb3N0IFJlYWQgQ29tcGxldGlvbiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIEhPU1RfU1RBVF9uSE9TVFJEX0RPTkUgIDB4MAorCisvKiBCaXQgbWFza3MgZm9yIEhPU1RfVElNRU9VVCAqLworCisjZGVmaW5lICAgICAgICAgICAgIEhPU1RfQ09VTlRfVElNRU9VVCAgMHg3ZmYgICAgICAvKiBIb3N0IFRpbWVvdXQgY291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBTRUNVUkVfU1lTU1dUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRU1VREFCTCAgMHgxICAgICAgICAvKiBFbXVsYXRpb24gRGlzYWJsZS4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRU1VREFCTCAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFJTVERBQkwgIDB4MiAgICAgICAgLyogUmVzZXQgRGlzYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5SU1REQUJMICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTDFJREFCTCAgMHgxYyAgICAgICAvKiBMMSBJbnN0cnVjdGlvbiBNZW1vcnkgRGlzYWJsZS4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBMMURBREFCTCAgMHhlMCAgICAgICAvKiBMMSBEYXRhIEJhbmsgQSBNZW1vcnkgRGlzYWJsZS4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBMMURCREFCTCAgMHg3MDAgICAgICAvKiBMMSBEYXRhIEJhbmsgQiBNZW1vcnkgRGlzYWJsZS4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BME9WUiAgMHg4MDAgICAgICAvKiBETUEwIE1lbW9yeSBBY2Nlc3MgT3ZlcnJpZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRE1BME9WUiAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTFPVlIgIDB4MTAwMCAgICAgLyogRE1BMSBNZW1vcnkgQWNjZXNzIE92ZXJyaWRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRNQTFPVlIgIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRU1VT1ZSICAweDQwMDAgICAgIC8qIEVtdWxhdGlvbiBPdmVycmlkZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRU1VT1ZSICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE9UUFNFTiAgMHg4MDAwICAgICAvKiBPVFAgU2VjcmV0cyBFbmFibGUuICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5PVFBTRU4gIDB4MAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTDJEQUJMICAweDcwMDAwICAgIC8qIEwyIE1lbW9yeSBEaXNhYmxlLiAqLworCisvKiBCaXQgbWFza3MgZm9yIFNFQ1VSRV9DT05UUk9MICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VDVVJFMCAgMHgxICAgICAgICAvKiBTRUNVUkUgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5TRUNVUkUwICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VDVVJFMSAgMHgyICAgICAgICAvKiBTRUNVUkUgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5TRUNVUkUxICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VDVVJFMiAgMHg0ICAgICAgICAvKiBTRUNVUkUgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5TRUNVUkUyICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VDVVJFMyAgMHg4ICAgICAgICAvKiBTRUNVUkUgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5TRUNVUkUzICAweDAKKworLyogQml0IG1hc2tzIGZvciBTRUNVUkVfU1RBVFVTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VDTU9ERSAgMHgzICAgICAgICAvKiBTZWN1cmVkIE1vZGUgQ29udHJvbCBTdGF0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTk1JICAweDQgICAgICAgIC8qIE5vbiBNYXNrYWJsZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbk5NSSAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEFGVkFMSUQgIDB4OCAgICAgICAgLyogQXV0aGVudGljYXRpb24gRmlybXdhcmUgVmFsaWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQUZWQUxJRCAgMHgwCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBBRkVYSVQgIDB4MTAgICAgICAgLyogQXV0aGVudGljYXRpb24gRmlybXdhcmUgRXhpdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQUZFWElUICAweDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VDU1RBVCAgMHhlMCAgICAgICAvKiBTZWN1cmUgU3RhdHVzICovCiAKICNlbmRpZiAvKiBfREVGX0JGNTIyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjUuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjUuaAppbmRleCBjMTM2ZjcwLi5jYzM4M2FkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI1LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDctMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI3LmgKaW5kZXggNGRkNThmYi4uMDUzNjlhOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTJ4X2Jhc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk0NzUwMy4uMDAwMDAwMAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTJ4X2Jhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKLSAqLwotCi0jaWZuZGVmIF9ERUZfQkY1MlhfSAotI2RlZmluZSBfREVGX0JGNTJYX0gKLQotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotLyogICBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBDT01NT04gVE8gQUxMIEFEU1AtQkY1MnggICAgKi8KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8qID09PT0gYmVnaW4gZnJvbSBkZWZCRjUzNC5oID09PT0gKi8KLQotLyogQ2xvY2sgYW5kIFN5c3RlbSBDb250cm9sCSgweEZGQzAwMDAwIC0gMHhGRkMwMDBGRikJCQkJCQkJCSovCi0jZGVmaW5lIFBMTF9DVEwJCQkJMHhGRkMwMDAwMAkvKiBQTEwgQ29udHJvbCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIFBMTF9ESVYJCQkJMHhGRkMwMDAwNAkvKiBQTEwgRGl2aWRlIFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgVlJfQ1RMCQkJCTB4RkZDMDAwMDgJLyogVm9sdGFnZSBSZWd1bGF0b3IgQ29udHJvbCBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgUExMX1NUQVQJCQkweEZGQzAwMDBDCS8qIFBMTCBTdGF0dXMgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBQTExfTE9DS0NOVAkJCTB4RkZDMDAwMTAJLyogUExMIExvY2sgQ291bnQgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIENISVBJRCAgICAgICAgMHhGRkMwMDAxNCAgLyogRGV2aWNlIElEIFJlZ2lzdGVyICovCi0KLQotLyogU3lzdGVtIEludGVycnVwdCBDb250cm9sbGVyICgweEZGQzAwMTAwIC0gMHhGRkMwMDFGRikJCQkJCQkJKi8KLSNkZWZpbmUgU1dSU1QJCQkJMHhGRkMwMDEwMAkvKiBTb2Z0d2FyZSBSZXNldCBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgU1lTQ1IJCQkJMHhGRkMwMDEwNAkvKiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFNJQ19SVkVDVAkJCTB4RkZDMDAxMDgJLyogSW50ZXJydXB0IFJlc2V0IFZlY3RvciBBZGRyZXNzIFJlZ2lzdGVyCSovCi0KLSNkZWZpbmUgU0lDX0lNQVNLMAkJCTB4RkZDMDAxMEMJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFNJQ19JQVIwCQkJMHhGRkMwMDExMAkvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCBSZWdpc3RlciAwCQkJKi8KLSNkZWZpbmUgU0lDX0lBUjEJCQkweEZGQzAwMTE0CS8qIEludGVycnVwdCBBc3NpZ25tZW50IFJlZ2lzdGVyIDEJCQkqLwotI2RlZmluZSBTSUNfSUFSMgkJCTB4RkZDMDAxMTgJLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgMgkJCSovCi0jZGVmaW5lIFNJQ19JQVIzCQkJMHhGRkMwMDExQwkvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCBSZWdpc3RlciAzCQkJKi8KLSNkZWZpbmUgU0lDX0lTUjAJCQkJMHhGRkMwMDEyMAkvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFNJQ19JV1IwCQkJCTB4RkZDMDAxMjQJLyogSW50ZXJydXB0IFdha2V1cCBSZWdpc3RlcgkJCQkqLwotCi0vKiBTSUMgQWRkaXRpb25zIHRvIEFEU1AtQkY1MnggKDB4RkZDMDAxNEMgLSAweEZGQzAwMTYyKSAqLwotI2RlZmluZSBTSUNfSU1BU0sxICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDAxNEMgICAgIC8qIEludGVycnVwdCBNYXNrIHJlZ2lzdGVyIG9mIFNJQzIgKi8KLSNkZWZpbmUgU0lDX0lBUjQgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTUwICAgICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCByZWdpc3RlcjQgKi8KLSNkZWZpbmUgU0lDX0lBUjUgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTU0ICAgICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCByZWdpc3RlcjUgKi8KLSNkZWZpbmUgU0lDX0lBUjYgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTU4ICAgICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCByZWdpc3RlcjYgKi8KLSNkZWZpbmUgU0lDX0lBUjcgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTVDICAgICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCByZWdpc3RlcjcgKi8KLSNkZWZpbmUgU0lDX0lTUjEgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTYwICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVyIHJlZ2lzdGVyICovCi0jZGVmaW5lIFNJQ19JV1IxICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMDE2NCAgICAgLyogSW50ZXJydXB0IFdha2V1cCByZWdpc3RlciAqLwotCi0KLS8qIFdhdGNoZG9nIFRpbWVyCQkJKDB4RkZDMDAyMDAgLSAweEZGQzAwMkZGKQkJCQkJCQkJKi8KLSNkZWZpbmUgV0RPR19DVEwJCQkweEZGQzAwMjAwCS8qIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgV0RPR19DTlQJCQkweEZGQzAwMjA0CS8qIFdhdGNoZG9nIENvdW50IFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBXRE9HX1NUQVQJCQkweEZGQzAwMjA4CS8qIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlcgkJCQkJKi8KLQotCi0vKiBSZWFsIFRpbWUgQ2xvY2sJCSgweEZGQzAwMzAwIC0gMHhGRkMwMDNGRikJCQkJCQkJCQkqLwotI2RlZmluZSBSVENfU1RBVAkJCTB4RkZDMDAzMDAJLyogUlRDIFN0YXR1cyBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIFJUQ19JQ1RMCQkJMHhGRkMwMDMwNAkvKiBSVEMgSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBSVENfSVNUQVQJCQkweEZGQzAwMzA4CS8qIFJUQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUlRDX1NXQ05UCQkJMHhGRkMwMDMwQwkvKiBSVEMgU3RvcHdhdGNoIENvdW50IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFJUQ19BTEFSTQkJCTB4RkZDMDAzMTAJLyogUlRDIEFsYXJtIFRpbWUgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFJUQ19GQVNUCQkJMHhGRkMwMDMxNAkvKiBSVEMgUHJlc2NhbGVyIEVuYWJsZSBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFJUQ19QUkVOCQkJMHhGRkMwMDMxNAkvKiBSVEMgUHJlc2NhbGVyIEVuYWJsZSBBbHRlcm5hdGUgTWFjcm8JCSovCi0KLQotLyogVUFSVDAgQ29udHJvbGxlcgkJKDB4RkZDMDA0MDAgLSAweEZGQzAwNEZGKQkJCQkJCQkJCSovCi0jZGVmaW5lIFVBUlQwX1RIUgkJCTB4RkZDMDA0MDAJLyogVHJhbnNtaXQgSG9sZGluZyByZWdpc3RlcgkJCQkqLwotI2RlZmluZSBVQVJUMF9SQlIJCQkweEZGQzAwNDAwCS8qIFJlY2VpdmUgQnVmZmVyIHJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBVQVJUMF9ETEwJCQkweEZGQzAwNDAwCS8qIERpdmlzb3IgTGF0Y2ggKExvdy1CeXRlKQkJCQkJKi8KLSNkZWZpbmUgVUFSVDBfSUVSCQkJMHhGRkMwMDQwNAkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFVBUlQwX0RMSAkJCTB4RkZDMDA0MDQJLyogRGl2aXNvciBMYXRjaCAoSGlnaC1CeXRlKQkJCQkqLwotI2RlZmluZSBVQVJUMF9JSVIJCQkweEZGQzAwNDA4CS8qIEludGVycnVwdCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgVUFSVDBfTENSCQkJMHhGRkMwMDQwQwkvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFVBUlQwX01DUgkJCTB4RkZDMDA0MTAJLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgVUFSVDBfTFNSCQkJMHhGRkMwMDQxNAkvKiBMaW5lIFN0YXR1cyBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIFVBUlQwX01TUgkJCTB4RkZDMDA0MTgJLyogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBVQVJUMF9TQ1IJCQkweEZGQzAwNDFDCS8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgVUFSVDBfR0NUTAkJCTB4RkZDMDA0MjQJLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCi0KLQotLyogU1BJIENvbnRyb2xsZXIJCQkoMHhGRkMwMDUwMCAtIDB4RkZDMDA1RkYpCQkJCQkJCQkqLwotI2RlZmluZSBTUEkwX1JFR0JBU0UJCQkweEZGQzAwNTAwCi0jZGVmaW5lIFNQSV9DVEwJCQkJMHhGRkMwMDUwMAkvKiBTUEkgQ29udHJvbCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIFNQSV9GTEcJCQkJMHhGRkMwMDUwNAkvKiBTUEkgRmxhZyByZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIFNQSV9TVEFUCQkJMHhGRkMwMDUwOAkvKiBTUEkgU3RhdHVzIHJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgU1BJX1REQlIJCQkweEZGQzAwNTBDCS8qIFNQSSBUcmFuc21pdCBEYXRhIEJ1ZmZlciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgU1BJX1JEQlIJCQkweEZGQzAwNTEwCS8qIFNQSSBSZWNlaXZlIERhdGEgQnVmZmVyIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgU1BJX0JBVUQJCQkweEZGQzAwNTE0CS8qIFNQSSBCYXVkIHJhdGUgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFNQSV9TSEFET1cJCQkweEZGQzAwNTE4CS8qIFNQSV9SREJSIFNoYWRvdyBSZWdpc3RlcgkJCQkJKi8KLQotCi0vKiBUSU1FUjAtNyBSZWdpc3RlcnMJCSgweEZGQzAwNjAwIC0gMHhGRkMwMDZGRikJCQkJCQkJCSovCi0jZGVmaW5lIFRJTUVSMF9DT05GSUcJCTB4RkZDMDA2MDAJLyogVGltZXIgMCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgVElNRVIwX0NPVU5URVIJCTB4RkZDMDA2MDQJLyogVGltZXIgMCBDb3VudGVyIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBUSU1FUjBfUEVSSU9ECQkweEZGQzAwNjA4CS8qIFRpbWVyIDAgUGVyaW9kIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBUSU1FUjBfV0lEVEgJCTB4RkZDMDA2MEMJLyogVGltZXIgMCBXaWR0aCBSZWdpc3RlcgkJCQkJKi8KLQotI2RlZmluZSBUSU1FUjFfQ09ORklHCQkweEZGQzAwNjEwCS8qIFRpbWVyIDEgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAgCQkJKi8KLSNkZWZpbmUgVElNRVIxX0NPVU5URVIJCTB4RkZDMDA2MTQJLyogVGltZXIgMSBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAJCQkqLwotI2RlZmluZSBUSU1FUjFfUEVSSU9ECQkweEZGQzAwNjE4CS8qIFRpbWVyIDEgUGVyaW9kIFJlZ2lzdGVyICAgICAgICAgCQkJKi8KLSNkZWZpbmUgVElNRVIxX1dJRFRICQkweEZGQzAwNjFDCS8qIFRpbWVyIDEgV2lkdGggUmVnaXN0ZXIgICAgICAgICAgCQkJKi8KLQotI2RlZmluZSBUSU1FUjJfQ09ORklHCQkweEZGQzAwNjIwCS8qIFRpbWVyIDIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAgCQkJKi8KLSNkZWZpbmUgVElNRVIyX0NPVU5URVIJCTB4RkZDMDA2MjQJLyogVGltZXIgMiBDb3VudGVyIFJlZ2lzdGVyICAgICAgICAJCQkqLwotI2RlZmluZSBUSU1FUjJfUEVSSU9ECQkweEZGQzAwNjI4CS8qIFRpbWVyIDIgUGVyaW9kIFJlZ2lzdGVyICAgICAgICAgCQkJKi8KLSNkZWZpbmUgVElNRVIyX1dJRFRICQkweEZGQzAwNjJDCS8qIFRpbWVyIDIgV2lkdGggUmVnaXN0ZXIgICAgICAgICAgCQkJKi8KLQotI2RlZmluZSBUSU1FUjNfQ09ORklHCQkweEZGQzAwNjMwCS8qIFRpbWVyIDMgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFRJTUVSM19DT1VOVEVSCQkweEZGQzAwNjM0CS8qIFRpbWVyIDMgQ291bnRlciBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgVElNRVIzX1BFUklPRAkJMHhGRkMwMDYzOAkvKiBUaW1lciAzIFBlcmlvZCBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgVElNRVIzX1dJRFRICQkweEZGQzAwNjNDCS8qIFRpbWVyIDMgV2lkdGggUmVnaXN0ZXIJCQkJCSovCi0KLSNkZWZpbmUgVElNRVI0X0NPTkZJRwkJMHhGRkMwMDY0MAkvKiBUaW1lciA0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIAkJCSovCi0jZGVmaW5lIFRJTUVSNF9DT1VOVEVSCQkweEZGQzAwNjQ0CS8qIFRpbWVyIDQgQ291bnRlciBSZWdpc3RlciAgICAgICAgCQkJKi8KLSNkZWZpbmUgVElNRVI0X1BFUklPRAkJMHhGRkMwMDY0OAkvKiBUaW1lciA0IFBlcmlvZCBSZWdpc3RlciAgICAgICAgIAkJCSovCi0jZGVmaW5lIFRJTUVSNF9XSURUSAkJMHhGRkMwMDY0QwkvKiBUaW1lciA0IFdpZHRoIFJlZ2lzdGVyICAgICAgICAgIAkJCSovCi0KLSNkZWZpbmUgVElNRVI1X0NPTkZJRwkJMHhGRkMwMDY1MAkvKiBUaW1lciA1IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIAkJCSovCi0jZGVmaW5lIFRJTUVSNV9DT1VOVEVSCQkweEZGQzAwNjU0CS8qIFRpbWVyIDUgQ291bnRlciBSZWdpc3RlciAgICAgICAgCQkJKi8KLSNkZWZpbmUgVElNRVI1X1BFUklPRAkJMHhGRkMwMDY1OAkvKiBUaW1lciA1IFBlcmlvZCBSZWdpc3RlciAgICAgICAgIAkJCSovCi0jZGVmaW5lIFRJTUVSNV9XSURUSAkJMHhGRkMwMDY1QwkvKiBUaW1lciA1IFdpZHRoIFJlZ2lzdGVyICAgICAgICAgIAkJCSovCi0KLSNkZWZpbmUgVElNRVI2X0NPTkZJRwkJMHhGRkMwMDY2MAkvKiBUaW1lciA2IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIAkJCSovCi0jZGVmaW5lIFRJTUVSNl9DT1VOVEVSCQkweEZGQzAwNjY0CS8qIFRpbWVyIDYgQ291bnRlciBSZWdpc3RlciAgICAgICAgCQkJKi8KLSNkZWZpbmUgVElNRVI2X1BFUklPRAkJMHhGRkMwMDY2OAkvKiBUaW1lciA2IFBlcmlvZCBSZWdpc3RlciAgICAgICAgIAkJCSovCi0jZGVmaW5lIFRJTUVSNl9XSURUSAkJMHhGRkMwMDY2QwkvKiBUaW1lciA2IFdpZHRoIFJlZ2lzdGVyICAgICAgICAgIAkJCSovCi0KLSNkZWZpbmUgVElNRVI3X0NPTkZJRwkJMHhGRkMwMDY3MAkvKiBUaW1lciA3IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIAkJCSovCi0jZGVmaW5lIFRJTUVSN19DT1VOVEVSCQkweEZGQzAwNjc0CS8qIFRpbWVyIDcgQ291bnRlciBSZWdpc3RlciAgICAgICAgCQkJKi8KLSNkZWZpbmUgVElNRVI3X1BFUklPRAkJMHhGRkMwMDY3OAkvKiBUaW1lciA3IFBlcmlvZCBSZWdpc3RlciAgICAgICAgIAkJCSovCi0jZGVmaW5lIFRJTUVSN19XSURUSAkJMHhGRkMwMDY3QwkvKiBUaW1lciA3IFdpZHRoIFJlZ2lzdGVyICAgICAgIAkJCSovCi0KLSNkZWZpbmUgVElNRVJfRU5BQkxFCQkweEZGQzAwNjgwCS8qIFRpbWVyIEVuYWJsZSBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgVElNRVJfRElTQUJMRQkJMHhGRkMwMDY4NAkvKiBUaW1lciBEaXNhYmxlIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBUSU1FUl9TVEFUVVMJCTB4RkZDMDA2ODgJLyogVGltZXIgU3RhdHVzIFJlZ2lzdGVyCQkJCQkqLwotCi0KLS8qIEdlbmVyYWwgUHVycG9zZSBJL08gUG9ydCBGICgweEZGQzAwNzAwIC0gMHhGRkMwMDdGRikJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBQT1JURklPCQkJCQkweEZGQzAwNzAwCS8qIFBvcnQgRiBJL08gUGluIFN0YXRlIFNwZWNpZnkgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgUE9SVEZJT19DTEVBUgkJCTB4RkZDMDA3MDQJLyogUG9ydCBGIEkvTyBQZXJpcGhlcmFsIEludGVycnVwdCBDbGVhciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgUE9SVEZJT19TRVQJCQkJMHhGRkMwMDcwOAkvKiBQb3J0IEYgSS9PIFBlcmlwaGVyYWwgSW50ZXJydXB0IFNldCBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFBPUlRGSU9fVE9HR0xFCQkJMHhGRkMwMDcwQwkvKiBQb3J0IEYgSS9PIFBpbiBTdGF0ZSBUb2dnbGUgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFBPUlRGSU9fTUFTS0EJCQkweEZGQzAwNzEwCS8qIFBvcnQgRiBJL08gTWFzayBTdGF0ZSBTcGVjaWZ5IEludGVycnVwdCBBIFJlZ2lzdGVyCSovCi0jZGVmaW5lIFBPUlRGSU9fTUFTS0FfQ0xFQVIJCTB4RkZDMDA3MTQJLyogUG9ydCBGIEkvTyBNYXNrIERpc2FibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBQT1JURklPX01BU0tBX1NFVAkJMHhGRkMwMDcxOAkvKiBQb3J0IEYgSS9PIE1hc2sgRW5hYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUE9SVEZJT19NQVNLQV9UT0dHTEUJMHhGRkMwMDcxQwkvKiBQb3J0IEYgSS9PIE1hc2sgVG9nZ2xlIEVuYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkqLwotI2RlZmluZSBQT1JURklPX01BU0tCCQkJMHhGRkMwMDcyMAkvKiBQb3J0IEYgSS9PIE1hc2sgU3RhdGUgU3BlY2lmeSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkqLwotI2RlZmluZSBQT1JURklPX01BU0tCX0NMRUFSCQkweEZGQzAwNzI0CS8qIFBvcnQgRiBJL08gTWFzayBEaXNhYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUE9SVEZJT19NQVNLQl9TRVQJCTB4RkZDMDA3MjgJLyogUG9ydCBGIEkvTyBNYXNrIEVuYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFBPUlRGSU9fTUFTS0JfVE9HR0xFCTB4RkZDMDA3MkMJLyogUG9ydCBGIEkvTyBNYXNrIFRvZ2dsZSBFbmFibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgUE9SVEZJT19ESVIJCQkJMHhGRkMwMDczMAkvKiBQb3J0IEYgSS9PIERpcmVjdGlvbiBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIFBPUlRGSU9fUE9MQVIJCQkweEZGQzAwNzM0CS8qIFBvcnQgRiBJL08gU291cmNlIFBvbGFyaXR5IFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBQT1JURklPX0VER0UJCQkweEZGQzAwNzM4CS8qIFBvcnQgRiBJL08gU291cmNlIFNlbnNpdGl2aXR5IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFBPUlRGSU9fQk9USAkJCTB4RkZDMDA3M0MJLyogUG9ydCBGIEkvTyBTZXQgb24gQk9USCBFZGdlcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBQT1JURklPX0lORU4JCQkweEZGQzAwNzQwCS8qIFBvcnQgRiBJL08gSW5wdXQgRW5hYmxlIFJlZ2lzdGVyIAkJCQkJKi8KLQotCi0vKiBTUE9SVDAgQ29udHJvbGxlcgkJKDB4RkZDMDA4MDAgLSAweEZGQzAwOEZGKQkJCQkJCQkJCQkqLwotI2RlZmluZSBTUE9SVDBfVENSMQkJCTB4RkZDMDA4MDAJLyogU1BPUlQwIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFNQT1JUMF9UQ1IyCQkJMHhGRkMwMDgwNAkvKiBTUE9SVDAgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgU1BPUlQwX1RDTEtESVYJCTB4RkZDMDA4MDgJLyogU1BPUlQwIFRyYW5zbWl0IENsb2NrIERpdmlkZXIJCQkJCSovCi0jZGVmaW5lIFNQT1JUMF9URlNESVYJCTB4RkZDMDA4MEMJLyogU1BPUlQwIFRyYW5zbWl0IEZyYW1lIFN5bmMgRGl2aWRlcgkJCQkqLwotI2RlZmluZSBTUE9SVDBfVFgJCQkweEZGQzAwODEwCS8qIFNQT1JUMCBUWCBEYXRhIFJlZ2lzdGVyCQkJCQkJCSovCi0jZGVmaW5lIFNQT1JUMF9SWAkJCTB4RkZDMDA4MTgJLyogU1BPUlQwIFJYIERhdGEgUmVnaXN0ZXIJCQkJCQkJKi8KLSNkZWZpbmUgU1BPUlQwX1JDUjEJCQkweEZGQzAwODIwCS8qIFNQT1JUMCBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBTUE9SVDBfUkNSMgkJCTB4RkZDMDA4MjQJLyogU1BPUlQwIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFNQT1JUMF9SQ0xLRElWCQkweEZGQzAwODI4CS8qIFNQT1JUMCBSZWNlaXZlIENsb2NrIERpdmlkZXIJCQkJCQkqLwotI2RlZmluZSBTUE9SVDBfUkZTRElWCQkweEZGQzAwODJDCS8qIFNQT1JUMCBSZWNlaXZlIEZyYW1lIFN5bmMgRGl2aWRlcgkJCQkqLwotI2RlZmluZSBTUE9SVDBfU1RBVAkJCTB4RkZDMDA4MzAJLyogU1BPUlQwIFN0YXR1cyBSZWdpc3RlcgkJCQkJCQkqLwotI2RlZmluZSBTUE9SVDBfQ0hOTAkJCTB4RkZDMDA4MzQJLyogU1BPUlQwIEN1cnJlbnQgQ2hhbm5lbCBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgU1BPUlQwX01DTUMxCQkweEZGQzAwODM4CS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQkqLwotI2RlZmluZSBTUE9SVDBfTUNNQzIJCTB4RkZDMDA4M0MJLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyCSovCi0jZGVmaW5lIFNQT1JUMF9NVENTMAkJMHhGRkMwMDg0MAkvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMAkqLwotI2RlZmluZSBTUE9SVDBfTVRDUzEJCTB4RkZDMDA4NDQJLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDEJKi8KLSNkZWZpbmUgU1BPUlQwX01UQ1MyCQkweEZGQzAwODQ4CS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAyCSovCi0jZGVmaW5lIFNQT1JUMF9NVENTMwkJMHhGRkMwMDg0QwkvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMwkqLwotI2RlZmluZSBTUE9SVDBfTVJDUzAJCTB4RkZDMDA4NTAJLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMAkqLwotI2RlZmluZSBTUE9SVDBfTVJDUzEJCTB4RkZDMDA4NTQJLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMQkqLwotI2RlZmluZSBTUE9SVDBfTVJDUzIJCTB4RkZDMDA4NTgJLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMgkqLwotI2RlZmluZSBTUE9SVDBfTVJDUzMJCTB4RkZDMDA4NUMJLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMwkqLwotCi0KLS8qIFNQT1JUMSBDb250cm9sbGVyCQkoMHhGRkMwMDkwMCAtIDB4RkZDMDA5RkYpCQkJCQkJCQkJCSovCi0jZGVmaW5lIFNQT1JUMV9UQ1IxCQkJMHhGRkMwMDkwMAkvKiBTUE9SVDEgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgU1BPUlQxX1RDUjIJCQkweEZGQzAwOTA0CS8qIFNQT1JUMSBUcmFuc21pdCBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBTUE9SVDFfVENMS0RJVgkJMHhGRkMwMDkwOAkvKiBTUE9SVDEgVHJhbnNtaXQgQ2xvY2sgRGl2aWRlcgkJCQkJKi8KLSNkZWZpbmUgU1BPUlQxX1RGU0RJVgkJMHhGRkMwMDkwQwkvKiBTUE9SVDEgVHJhbnNtaXQgRnJhbWUgU3luYyBEaXZpZGVyCQkJCSovCi0jZGVmaW5lIFNQT1JUMV9UWAkJCTB4RkZDMDA5MTAJLyogU1BPUlQxIFRYIERhdGEgUmVnaXN0ZXIJCQkJCQkJKi8KLSNkZWZpbmUgU1BPUlQxX1JYCQkJMHhGRkMwMDkxOAkvKiBTUE9SVDEgUlggRGF0YSBSZWdpc3RlcgkJCQkJCQkqLwotI2RlZmluZSBTUE9SVDFfUkNSMQkJCTB4RkZDMDA5MjAJLyogU1BPUlQxIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFNQT1JUMV9SQ1IyCQkJMHhGRkMwMDkyNAkvKiBTUE9SVDEgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgU1BPUlQxX1JDTEtESVYJCTB4RkZDMDA5MjgJLyogU1BPUlQxIFJlY2VpdmUgQ2xvY2sgRGl2aWRlcgkJCQkJCSovCi0jZGVmaW5lIFNQT1JUMV9SRlNESVYJCTB4RkZDMDA5MkMJLyogU1BPUlQxIFJlY2VpdmUgRnJhbWUgU3luYyBEaXZpZGVyCQkJCSovCi0jZGVmaW5lIFNQT1JUMV9TVEFUCQkJMHhGRkMwMDkzMAkvKiBTUE9SVDEgU3RhdHVzIFJlZ2lzdGVyCQkJCQkJCSovCi0jZGVmaW5lIFNQT1JUMV9DSE5MCQkJMHhGRkMwMDkzNAkvKiBTUE9SVDEgQ3VycmVudCBDaGFubmVsIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBTUE9SVDFfTUNNQzEJCTB4RkZDMDA5MzgJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCSovCi0jZGVmaW5lIFNQT1JUMV9NQ01DMgkJMHhGRkMwMDkzQwkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIJKi8KLSNkZWZpbmUgU1BPUlQxX01UQ1MwCQkweEZGQzAwOTQwCS8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAwCSovCi0jZGVmaW5lIFNQT1JUMV9NVENTMQkJMHhGRkMwMDk0NAkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMQkqLwotI2RlZmluZSBTUE9SVDFfTVRDUzIJCTB4RkZDMDA5NDgJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDIJKi8KLSNkZWZpbmUgU1BPUlQxX01UQ1MzCQkweEZGQzAwOTRDCS8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAzCSovCi0jZGVmaW5lIFNQT1JUMV9NUkNTMAkJMHhGRkMwMDk1MAkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAwCSovCi0jZGVmaW5lIFNQT1JUMV9NUkNTMQkJMHhGRkMwMDk1NAkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAxCSovCi0jZGVmaW5lIFNQT1JUMV9NUkNTMgkJMHhGRkMwMDk1OAkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAyCSovCi0jZGVmaW5lIFNQT1JUMV9NUkNTMwkJMHhGRkMwMDk1QwkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAzCSovCi0KLQotLyogRXh0ZXJuYWwgQnVzIEludGVyZmFjZSBVbml0ICgweEZGQzAwQTAwIC0gMHhGRkMwMEFGRikJCQkJCQkJCSovCi0jZGVmaW5lIEVCSVVfQU1HQ1RMCQkJMHhGRkMwMEEwMAkvKiBBc3luY2hyb25vdXMgTWVtb3J5IEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyCSovCi0jZGVmaW5lIEVCSVVfQU1CQ1RMMAkJMHhGRkMwMEEwNAkvKiBBc3luY2hyb25vdXMgTWVtb3J5IEJhbmsgQ29udHJvbCBSZWdpc3RlciAwCSovCi0jZGVmaW5lIEVCSVVfQU1CQ1RMMQkJMHhGRkMwMEEwOAkvKiBBc3luY2hyb25vdXMgTWVtb3J5IEJhbmsgQ29udHJvbCBSZWdpc3RlciAxCSovCi0jZGVmaW5lIEVCSVVfU0RHQ1RMCQkJMHhGRkMwMEExMAkvKiBTRFJBTSBHbG9iYWwgQ29udHJvbCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBFQklVX1NEQkNUTAkJCTB4RkZDMDBBMTQJLyogU0RSQU0gQmFuayBDb250cm9sIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBFQklVX1NEUlJDCQkJMHhGRkMwMEExOAkvKiBTRFJBTSBSZWZyZXNoIFJhdGUgQ29udHJvbCBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIEVCSVVfU0RTVEFUCQkJMHhGRkMwMEExQwkvKiBTRFJBTSBTdGF0dXMgUmVnaXN0ZXIJCQkJCQkqLwotCi0KLS8qIERNQSBUcmFmZmljIENvbnRyb2wgUmVnaXN0ZXJzCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIERNQV9UQ19QRVIJCQkweEZGQzAwQjBDCS8qIFRyYWZmaWMgQ29udHJvbCBQZXJpb2RzIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgRE1BX1RDX0NOVAkJCTB4RkZDMDBCMTAJLyogVHJhZmZpYyBDb250cm9sIEN1cnJlbnQgQ291bnRzIFJlZ2lzdGVyCSovCi0KLS8qIEFsdGVybmF0ZSBkZXByZWNhdGVkIHJlZ2lzdGVyIG5hbWVzIChiZWxvdykgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb2RlIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgRE1BX1RDUEVSCQkJMHhGRkMwMEIwQwkvKiBUcmFmZmljIENvbnRyb2wgUGVyaW9kcyBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIERNQV9UQ0NOVAkJCTB4RkZDMDBCMTAJLyogVHJhZmZpYyBDb250cm9sIEN1cnJlbnQgQ291bnRzIFJlZ2lzdGVyCSovCi0KLS8qIERNQSBDb250cm9sbGVyICgweEZGQzAwQzAwIC0gMHhGRkMwMEZGRikJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBETUEwX05FWFRfREVTQ19QVFIJCTB4RkZDMDBDMDAJLyogRE1BIENoYW5uZWwgMCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgRE1BMF9TVEFSVF9BRERSCQkJMHhGRkMwMEMwNAkvKiBETUEgQ2hhbm5lbCAwIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIERNQTBfQ09ORklHCQkJCTB4RkZDMDBDMDgJLyogRE1BIENoYW5uZWwgMCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBETUEwX1hfQ09VTlQJCQkweEZGQzAwQzEwCS8qIERNQSBDaGFubmVsIDAgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTBfWF9NT0RJRlkJCQkweEZGQzAwQzE0CS8qIERNQSBDaGFubmVsIDAgWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUEwX1lfQ09VTlQJCQkweEZGQzAwQzE4CS8qIERNQSBDaGFubmVsIDAgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTBfWV9NT0RJRlkJCQkweEZGQzAwQzFDCS8qIERNQSBDaGFubmVsIDAgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUEwX0NVUlJfREVTQ19QVFIJCTB4RkZDMDBDMjAJLyogRE1BIENoYW5uZWwgMCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLwotI2RlZmluZSBETUEwX0NVUlJfQUREUgkJCTB4RkZDMDBDMjQJLyogRE1BIENoYW5uZWwgMCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMF9JUlFfU1RBVFVTCQkJMHhGRkMwMEMyOAkvKiBETUEgQ2hhbm5lbCAwIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMF9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMEMyQwkvKiBETUEgQ2hhbm5lbCAwIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTBfQ1VSUl9YX0NPVU5UCQkweEZGQzAwQzMwCS8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTBfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwQzM4CS8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCi0KLSNkZWZpbmUgRE1BMV9ORVhUX0RFU0NfUFRSCQkweEZGQzAwQzQwCS8qIERNQSBDaGFubmVsIDEgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIERNQTFfU1RBUlRfQUREUgkJCTB4RkZDMDBDNDQJLyogRE1BIENoYW5uZWwgMSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBETUExX0NPTkZJRwkJCQkweEZGQzAwQzQ4CS8qIERNQSBDaGFubmVsIDEgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgRE1BMV9YX0NPVU5UCQkJMHhGRkMwMEM1MAkvKiBETUEgQ2hhbm5lbCAxIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUExX1hfTU9ESUZZCQkJMHhGRkMwMEM1NAkvKiBETUEgQ2hhbm5lbCAxIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BMV9ZX0NPVU5UCQkJMHhGRkMwMEM1OAkvKiBETUEgQ2hhbm5lbCAxIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUExX1lfTU9ESUZZCQkJMHhGRkMwMEM1QwkvKiBETUEgQ2hhbm5lbCAxIFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BMV9DVVJSX0RFU0NfUFRSCQkweEZGQzAwQzYwCS8qIERNQSBDaGFubmVsIDEgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgRE1BMV9DVVJSX0FERFIJCQkweEZGQzAwQzY0CS8qIERNQSBDaGFubmVsIDEgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTFfSVJRX1NUQVRVUwkJCTB4RkZDMDBDNjgJLyogRE1BIENoYW5uZWwgMSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTFfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBDNkMJLyogRE1BIENoYW5uZWwgMSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUExX0NVUlJfWF9DT1VOVAkJMHhGRkMwMEM3MAkvKiBETUEgQ2hhbm5lbCAxIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUExX0NVUlJfWV9DT1VOVAkJMHhGRkMwMEM3OAkvKiBETUEgQ2hhbm5lbCAxIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLwotCi0jZGVmaW5lIERNQTJfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEM4MAkvKiBETUEgQ2hhbm5lbCAyIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBETUEyX1NUQVJUX0FERFIJCQkweEZGQzAwQzg0CS8qIERNQSBDaGFubmVsIDIgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgRE1BMl9DT05GSUcJCQkJMHhGRkMwMEM4OAkvKiBETUEgQ2hhbm5lbCAyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIERNQTJfWF9DT1VOVAkJCTB4RkZDMDBDOTAJLyogRE1BIENoYW5uZWwgMiBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BMl9YX01PRElGWQkJCTB4RkZDMDBDOTQJLyogRE1BIENoYW5uZWwgMiBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTJfWV9DT1VOVAkJCTB4RkZDMDBDOTgJLyogRE1BIENoYW5uZWwgMiBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BMl9ZX01PRElGWQkJCTB4RkZDMDBDOUMJLyogRE1BIENoYW5uZWwgMiBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTJfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMENBMAkvKiBETUEgQ2hhbm5lbCAyIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIERNQTJfQ1VSUl9BRERSCQkJMHhGRkMwMENBNAkvKiBETUEgQ2hhbm5lbCAyIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUEyX0lSUV9TVEFUVVMJCQkweEZGQzAwQ0E4CS8qIERNQSBDaGFubmVsIDIgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUEyX1BFUklQSEVSQUxfTUFQCQkweEZGQzAwQ0FDCS8qIERNQSBDaGFubmVsIDIgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMl9DVVJSX1hfQ09VTlQJCTB4RkZDMDBDQjAJLyogRE1BIENoYW5uZWwgMiBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMl9DVVJSX1lfQ09VTlQJCTB4RkZDMDBDQjgJLyogRE1BIENoYW5uZWwgMiBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KLQotI2RlZmluZSBETUEzX05FWFRfREVTQ19QVFIJCTB4RkZDMDBDQzAJLyogRE1BIENoYW5uZWwgMyBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgRE1BM19TVEFSVF9BRERSCQkJMHhGRkMwMENDNAkvKiBETUEgQ2hhbm5lbCAzIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIERNQTNfQ09ORklHCQkJCTB4RkZDMDBDQzgJLyogRE1BIENoYW5uZWwgMyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBETUEzX1hfQ09VTlQJCQkweEZGQzAwQ0QwCS8qIERNQSBDaGFubmVsIDMgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTNfWF9NT0RJRlkJCQkweEZGQzAwQ0Q0CS8qIERNQSBDaGFubmVsIDMgWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUEzX1lfQ09VTlQJCQkweEZGQzAwQ0Q4CS8qIERNQSBDaGFubmVsIDMgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTNfWV9NT0RJRlkJCQkweEZGQzAwQ0RDCS8qIERNQSBDaGFubmVsIDMgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUEzX0NVUlJfREVTQ19QVFIJCTB4RkZDMDBDRTAJLyogRE1BIENoYW5uZWwgMyBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLwotI2RlZmluZSBETUEzX0NVUlJfQUREUgkJCTB4RkZDMDBDRTQJLyogRE1BIENoYW5uZWwgMyBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BM19JUlFfU1RBVFVTCQkJMHhGRkMwMENFOAkvKiBETUEgQ2hhbm5lbCAzIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BM19QRVJJUEhFUkFMX01BUAkJMHhGRkMwMENFQwkvKiBETUEgQ2hhbm5lbCAzIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTNfQ1VSUl9YX0NPVU5UCQkweEZGQzAwQ0YwCS8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTNfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwQ0Y4CS8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCi0KLSNkZWZpbmUgRE1BNF9ORVhUX0RFU0NfUFRSCQkweEZGQzAwRDAwCS8qIERNQSBDaGFubmVsIDQgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIERNQTRfU1RBUlRfQUREUgkJCTB4RkZDMDBEMDQJLyogRE1BIENoYW5uZWwgNCBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBETUE0X0NPTkZJRwkJCQkweEZGQzAwRDA4CS8qIERNQSBDaGFubmVsIDQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgRE1BNF9YX0NPVU5UCQkJMHhGRkMwMEQxMAkvKiBETUEgQ2hhbm5lbCA0IFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE0X1hfTU9ESUZZCQkJMHhGRkMwMEQxNAkvKiBETUEgQ2hhbm5lbCA0IFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BNF9ZX0NPVU5UCQkJMHhGRkMwMEQxOAkvKiBETUEgQ2hhbm5lbCA0IFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE0X1lfTU9ESUZZCQkJMHhGRkMwMEQxQwkvKiBETUEgQ2hhbm5lbCA0IFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BNF9DVVJSX0RFU0NfUFRSCQkweEZGQzAwRDIwCS8qIERNQSBDaGFubmVsIDQgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgRE1BNF9DVVJSX0FERFIJCQkweEZGQzAwRDI0CS8qIERNQSBDaGFubmVsIDQgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTRfSVJRX1NUQVRVUwkJCTB4RkZDMDBEMjgJLyogRE1BIENoYW5uZWwgNCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTRfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBEMkMJLyogRE1BIENoYW5uZWwgNCBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE0X0NVUlJfWF9DT1VOVAkJMHhGRkMwMEQzMAkvKiBETUEgQ2hhbm5lbCA0IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE0X0NVUlJfWV9DT1VOVAkJMHhGRkMwMEQzOAkvKiBETUEgQ2hhbm5lbCA0IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLwotCi0jZGVmaW5lIERNQTVfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEQ0MAkvKiBETUEgQ2hhbm5lbCA1IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBETUE1X1NUQVJUX0FERFIJCQkweEZGQzAwRDQ0CS8qIERNQSBDaGFubmVsIDUgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgRE1BNV9DT05GSUcJCQkJMHhGRkMwMEQ0OAkvKiBETUEgQ2hhbm5lbCA1IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIERNQTVfWF9DT1VOVAkJCTB4RkZDMDBENTAJLyogRE1BIENoYW5uZWwgNSBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BNV9YX01PRElGWQkJCTB4RkZDMDBENTQJLyogRE1BIENoYW5uZWwgNSBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTVfWV9DT1VOVAkJCTB4RkZDMDBENTgJLyogRE1BIENoYW5uZWwgNSBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BNV9ZX01PRElGWQkJCTB4RkZDMDBENUMJLyogRE1BIENoYW5uZWwgNSBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTVfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMEQ2MAkvKiBETUEgQ2hhbm5lbCA1IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIERNQTVfQ1VSUl9BRERSCQkJMHhGRkMwMEQ2NAkvKiBETUEgQ2hhbm5lbCA1IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE1X0lSUV9TVEFUVVMJCQkweEZGQzAwRDY4CS8qIERNQSBDaGFubmVsIDUgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE1X1BFUklQSEVSQUxfTUFQCQkweEZGQzAwRDZDCS8qIERNQSBDaGFubmVsIDUgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BNV9DVVJSX1hfQ09VTlQJCTB4RkZDMDBENzAJLyogRE1BIENoYW5uZWwgNSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BNV9DVVJSX1lfQ09VTlQJCTB4RkZDMDBENzgJLyogRE1BIENoYW5uZWwgNSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KLQotI2RlZmluZSBETUE2X05FWFRfREVTQ19QVFIJCTB4RkZDMDBEODAJLyogRE1BIENoYW5uZWwgNiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgRE1BNl9TVEFSVF9BRERSCQkJMHhGRkMwMEQ4NAkvKiBETUEgQ2hhbm5lbCA2IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIERNQTZfQ09ORklHCQkJCTB4RkZDMDBEODgJLyogRE1BIENoYW5uZWwgNiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBETUE2X1hfQ09VTlQJCQkweEZGQzAwRDkwCS8qIERNQSBDaGFubmVsIDYgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTZfWF9NT0RJRlkJCQkweEZGQzAwRDk0CS8qIERNQSBDaGFubmVsIDYgWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE2X1lfQ09VTlQJCQkweEZGQzAwRDk4CS8qIERNQSBDaGFubmVsIDYgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTZfWV9NT0RJRlkJCQkweEZGQzAwRDlDCS8qIERNQSBDaGFubmVsIDYgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE2X0NVUlJfREVTQ19QVFIJCTB4RkZDMDBEQTAJLyogRE1BIENoYW5uZWwgNiBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLwotI2RlZmluZSBETUE2X0NVUlJfQUREUgkJCTB4RkZDMDBEQTQJLyogRE1BIENoYW5uZWwgNiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BNl9JUlFfU1RBVFVTCQkJMHhGRkMwMERBOAkvKiBETUEgQ2hhbm5lbCA2IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BNl9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMERBQwkvKiBETUEgQ2hhbm5lbCA2IFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTZfQ1VSUl9YX0NPVU5UCQkweEZGQzAwREIwCS8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTZfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwREI4CS8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCi0KLSNkZWZpbmUgRE1BN19ORVhUX0RFU0NfUFRSCQkweEZGQzAwREMwCS8qIERNQSBDaGFubmVsIDcgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIERNQTdfU1RBUlRfQUREUgkJCTB4RkZDMDBEQzQJLyogRE1BIENoYW5uZWwgNyBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBETUE3X0NPTkZJRwkJCQkweEZGQzAwREM4CS8qIERNQSBDaGFubmVsIDcgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgRE1BN19YX0NPVU5UCQkJMHhGRkMwMEREMAkvKiBETUEgQ2hhbm5lbCA3IFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE3X1hfTU9ESUZZCQkJMHhGRkMwMERENAkvKiBETUEgQ2hhbm5lbCA3IFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BN19ZX0NPVU5UCQkJMHhGRkMwMEREOAkvKiBETUEgQ2hhbm5lbCA3IFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE3X1lfTU9ESUZZCQkJMHhGRkMwMEREQwkvKiBETUEgQ2hhbm5lbCA3IFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BN19DVVJSX0RFU0NfUFRSCQkweEZGQzAwREUwCS8qIERNQSBDaGFubmVsIDcgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgRE1BN19DVVJSX0FERFIJCQkweEZGQzAwREU0CS8qIERNQSBDaGFubmVsIDcgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTdfSVJRX1NUQVRVUwkJCTB4RkZDMDBERTgJLyogRE1BIENoYW5uZWwgNyBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTdfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBERUMJLyogRE1BIENoYW5uZWwgNyBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE3X0NVUlJfWF9DT1VOVAkJMHhGRkMwMERGMAkvKiBETUEgQ2hhbm5lbCA3IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE3X0NVUlJfWV9DT1VOVAkJMHhGRkMwMERGOAkvKiBETUEgQ2hhbm5lbCA3IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLwotCi0jZGVmaW5lIERNQThfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEUwMAkvKiBETUEgQ2hhbm5lbCA4IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBETUE4X1NUQVJUX0FERFIJCQkweEZGQzAwRTA0CS8qIERNQSBDaGFubmVsIDggU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgRE1BOF9DT05GSUcJCQkJMHhGRkMwMEUwOAkvKiBETUEgQ2hhbm5lbCA4IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIERNQThfWF9DT1VOVAkJCTB4RkZDMDBFMTAJLyogRE1BIENoYW5uZWwgOCBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BOF9YX01PRElGWQkJCTB4RkZDMDBFMTQJLyogRE1BIENoYW5uZWwgOCBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQThfWV9DT1VOVAkJCTB4RkZDMDBFMTgJLyogRE1BIENoYW5uZWwgOCBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BOF9ZX01PRElGWQkJCTB4RkZDMDBFMUMJLyogRE1BIENoYW5uZWwgOCBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQThfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMEUyMAkvKiBETUEgQ2hhbm5lbCA4IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCi0jZGVmaW5lIERNQThfQ1VSUl9BRERSCQkJMHhGRkMwMEUyNAkvKiBETUEgQ2hhbm5lbCA4IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE4X0lSUV9TVEFUVVMJCQkweEZGQzAwRTI4CS8qIERNQSBDaGFubmVsIDggSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUE4X1BFUklQSEVSQUxfTUFQCQkweEZGQzAwRTJDCS8qIERNQSBDaGFubmVsIDggUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BOF9DVVJSX1hfQ09VTlQJCTB4RkZDMDBFMzAJLyogRE1BIENoYW5uZWwgOCBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BOF9DVVJSX1lfQ09VTlQJCTB4RkZDMDBFMzgJLyogRE1BIENoYW5uZWwgOCBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KLQotI2RlZmluZSBETUE5X05FWFRfREVTQ19QVFIJCTB4RkZDMDBFNDAJLyogRE1BIENoYW5uZWwgOSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgRE1BOV9TVEFSVF9BRERSCQkJMHhGRkMwMEU0NAkvKiBETUEgQ2hhbm5lbCA5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIERNQTlfQ09ORklHCQkJCTB4RkZDMDBFNDgJLyogRE1BIENoYW5uZWwgOSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBETUE5X1hfQ09VTlQJCQkweEZGQzAwRTUwCS8qIERNQSBDaGFubmVsIDkgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTlfWF9NT0RJRlkJCQkweEZGQzAwRTU0CS8qIERNQSBDaGFubmVsIDkgWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE5X1lfQ09VTlQJCQkweEZGQzAwRTU4CS8qIERNQSBDaGFubmVsIDkgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTlfWV9NT0RJRlkJCQkweEZGQzAwRTVDCS8qIERNQSBDaGFubmVsIDkgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBETUE5X0NVUlJfREVTQ19QVFIJCTB4RkZDMDBFNjAJLyogRE1BIENoYW5uZWwgOSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLwotI2RlZmluZSBETUE5X0NVUlJfQUREUgkJCTB4RkZDMDBFNjQJLyogRE1BIENoYW5uZWwgOSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BOV9JUlFfU1RBVFVTCQkJMHhGRkMwMEU2OAkvKiBETUEgQ2hhbm5lbCA5IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BOV9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMEU2QwkvKiBETUEgQ2hhbm5lbCA5IFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTlfQ1VSUl9YX0NPVU5UCQkweEZGQzAwRTcwCS8qIERNQSBDaGFubmVsIDkgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTlfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRTc4CS8qIERNQSBDaGFubmVsIDkgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCi0KLSNkZWZpbmUgRE1BMTBfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEU4MAkvKiBETUEgQ2hhbm5lbCAxMCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgRE1BMTBfU1RBUlRfQUREUgkJMHhGRkMwMEU4NAkvKiBETUEgQ2hhbm5lbCAxMCBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTEwX0NPTkZJRwkJCTB4RkZDMDBFODgJLyogRE1BIENoYW5uZWwgMTAgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUExMF9YX0NPVU5UCQkJMHhGRkMwMEU5MAkvKiBETUEgQ2hhbm5lbCAxMCBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BMTBfWF9NT0RJRlkJCQkweEZGQzAwRTk0CS8qIERNQSBDaGFubmVsIDEwIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BMTBfWV9DT1VOVAkJCTB4RkZDMDBFOTgJLyogRE1BIENoYW5uZWwgMTAgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTEwX1lfTU9ESUZZCQkJMHhGRkMwMEU5QwkvKiBETUEgQ2hhbm5lbCAxMCBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTEwX0NVUlJfREVTQ19QVFIJCTB4RkZDMDBFQTAJLyogRE1BIENoYW5uZWwgMTAgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgRE1BMTBfQ1VSUl9BRERSCQkJMHhGRkMwMEVBNAkvKiBETUEgQ2hhbm5lbCAxMCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMTBfSVJRX1NUQVRVUwkJMHhGRkMwMEVBOAkvKiBETUEgQ2hhbm5lbCAxMCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTEwX1BFUklQSEVSQUxfTUFQCTB4RkZDMDBFQUMJLyogRE1BIENoYW5uZWwgMTAgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMTBfQ1VSUl9YX0NPVU5UCQkweEZGQzAwRUIwCS8qIERNQSBDaGFubmVsIDEwIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUExMF9DVVJSX1lfQ09VTlQJCTB4RkZDMDBFQjgJLyogRE1BIENoYW5uZWwgMTAgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCi0KLSNkZWZpbmUgRE1BMTFfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEVDMAkvKiBETUEgQ2hhbm5lbCAxMSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgRE1BMTFfU1RBUlRfQUREUgkJMHhGRkMwMEVDNAkvKiBETUEgQ2hhbm5lbCAxMSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTExX0NPTkZJRwkJCTB4RkZDMDBFQzgJLyogRE1BIENoYW5uZWwgMTEgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUExMV9YX0NPVU5UCQkJMHhGRkMwMEVEMAkvKiBETUEgQ2hhbm5lbCAxMSBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BMTFfWF9NT0RJRlkJCQkweEZGQzAwRUQ0CS8qIERNQSBDaGFubmVsIDExIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgRE1BMTFfWV9DT1VOVAkJCTB4RkZDMDBFRDgJLyogRE1BIENoYW5uZWwgMTEgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTExX1lfTU9ESUZZCQkJMHhGRkMwMEVEQwkvKiBETUEgQ2hhbm5lbCAxMSBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIERNQTExX0NVUlJfREVTQ19QVFIJCTB4RkZDMDBFRTAJLyogRE1BIENoYW5uZWwgMTEgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgRE1BMTFfQ1VSUl9BRERSCQkJMHhGRkMwMEVFNAkvKiBETUEgQ2hhbm5lbCAxMSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMTFfSVJRX1NUQVRVUwkJMHhGRkMwMEVFOAkvKiBETUEgQ2hhbm5lbCAxMSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIERNQTExX1BFUklQSEVSQUxfTUFQCTB4RkZDMDBFRUMJLyogRE1BIENoYW5uZWwgMTEgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgRE1BMTFfQ1VSUl9YX0NPVU5UCQkweEZGQzAwRUYwCS8qIERNQSBDaGFubmVsIDExIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBETUExMV9DVVJSX1lfQ09VTlQJCTB4RkZDMDBFRjgJLyogRE1BIENoYW5uZWwgMTEgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCi0KLSNkZWZpbmUgTURNQV9EMF9ORVhUX0RFU0NfUFRSCTB4RkZDMDBGMDAJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNRE1BX0QwX1NUQVJUX0FERFIJCTB4RkZDMDBGMDQJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgTURNQV9EMF9DT05GSUcJCQkweEZGQzAwRjA4CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIE1ETUFfRDBfWF9DT1VOVAkJCTB4RkZDMDBGMTAJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBNRE1BX0QwX1hfTU9ESUZZCQkweEZGQzAwRjE0CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgTURNQV9EMF9ZX0NPVU5UCQkJMHhGRkMwMEYxOAkvKiBNZW1ETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIE1ETUFfRDBfWV9NT0RJRlkJCTB4RkZDMDBGMUMJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBNRE1BX0QwX0NVUlJfREVTQ19QVFIJMHhGRkMwMEYyMAkvKiBNZW1ETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTURNQV9EMF9DVVJSX0FERFIJCTB4RkZDMDBGMjQJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBNRE1BX0QwX0lSUV9TVEFUVVMJCTB4RkZDMDBGMjgJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBNRE1BX0QwX1BFUklQSEVSQUxfTUFQCTB4RkZDMDBGMkMJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIE1ETUFfRDBfQ1VSUl9YX0NPVU5UCTB4RkZDMDBGMzAJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBNRE1BX0QwX0NVUlJfWV9DT1VOVAkweEZGQzAwRjM4CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KLQotI2RlZmluZSBNRE1BX1MwX05FWFRfREVTQ19QVFIJMHhGRkMwMEY0MAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgTURNQV9TMF9TVEFSVF9BRERSCQkweEZGQzAwRjQ0CS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgTURNQV9TMF9DT05GSUcJCQkweEZGQzAwRjQ4CS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgTURNQV9TMF9YX0NPVU5UCQkJMHhGRkMwMEY1MAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkJKi8KLSNkZWZpbmUgTURNQV9TMF9YX01PRElGWQkJMHhGRkMwMEY1NAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzBfWV9DT1VOVAkJCTB4RkZDMDBGNTgJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBZIENvdW50IFJlZ2lzdGVyCQkJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzBfWV9NT0RJRlkJCTB4RkZDMDBGNUMJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCQkqLwotI2RlZmluZSBNRE1BX1MwX0NVUlJfREVTQ19QVFIJMHhGRkMwMEY2MAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNRE1BX1MwX0NVUlJfQUREUgkJMHhGRkMwMEY2NAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgTURNQV9TMF9JUlFfU1RBVFVTCQkweEZGQzAwRjY4CS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgTURNQV9TMF9QRVJJUEhFUkFMX01BUAkweEZGQzAwRjZDCS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzBfQ1VSUl9YX0NPVU5UCTB4RkZDMDBGNzAJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzBfQ1VSUl9ZX0NPVU5UCTB4RkZDMDBGNzgJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJCSovCi0KLSNkZWZpbmUgTURNQV9EMV9ORVhUX0RFU0NfUFRSCTB4RkZDMDBGODAJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNRE1BX0QxX1NUQVJUX0FERFIJCTB4RkZDMDBGODQJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgTURNQV9EMV9DT05GSUcJCQkweEZGQzAwRjg4CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIE1ETUFfRDFfWF9DT1VOVAkJCTB4RkZDMDBGOTAJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBNRE1BX0QxX1hfTU9ESUZZCQkweEZGQzAwRjk0CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgTURNQV9EMV9ZX0NPVU5UCQkJMHhGRkMwMEY5OAkvKiBNZW1ETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIE1ETUFfRDFfWV9NT0RJRlkJCTB4RkZDMDBGOUMJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBNRE1BX0QxX0NVUlJfREVTQ19QVFIJMHhGRkMwMEZBMAkvKiBNZW1ETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgTURNQV9EMV9DVVJSX0FERFIJCTB4RkZDMDBGQTQJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBNRE1BX0QxX0lSUV9TVEFUVVMJCTB4RkZDMDBGQTgJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBNRE1BX0QxX1BFUklQSEVSQUxfTUFQCTB4RkZDMDBGQUMJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIE1ETUFfRDFfQ1VSUl9YX0NPVU5UCTB4RkZDMDBGQjAJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBNRE1BX0QxX0NVUlJfWV9DT1VOVAkweEZGQzAwRkI4CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KLQotI2RlZmluZSBNRE1BX1MxX05FWFRfREVTQ19QVFIJMHhGRkMwMEZDMAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgTURNQV9TMV9TVEFSVF9BRERSCQkweEZGQzAwRkM0CS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgTURNQV9TMV9DT05GSUcJCQkweEZGQzAwRkM4CS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgTURNQV9TMV9YX0NPVU5UCQkJMHhGRkMwMEZEMAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkJKi8KLSNkZWZpbmUgTURNQV9TMV9YX01PRElGWQkJMHhGRkMwMEZENAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzFfWV9DT1VOVAkJCTB4RkZDMDBGRDgJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBZIENvdW50IFJlZ2lzdGVyCQkJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzFfWV9NT0RJRlkJCTB4RkZDMDBGREMJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCQkqLwotI2RlZmluZSBNRE1BX1MxX0NVUlJfREVTQ19QVFIJMHhGRkMwMEZFMAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBNRE1BX1MxX0NVUlJfQUREUgkJMHhGRkMwMEZFNAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgTURNQV9TMV9JUlFfU1RBVFVTCQkweEZGQzAwRkU4CS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgTURNQV9TMV9QRVJJUEhFUkFMX01BUAkweEZGQzAwRkVDCS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzFfQ1VSUl9YX0NPVU5UCTB4RkZDMDBGRjAJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIE1ETUFfUzFfQ1VSUl9ZX0NPVU5UCTB4RkZDMDBGRjgJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJCSovCi0KLQotLyogUGFyYWxsZWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKDB4RkZDMDEwMDAgLSAweEZGQzAxMEZGKQkJCQkqLwotI2RlZmluZSBQUElfQ09OVFJPTAkJCTB4RkZDMDEwMDAJLyogUFBJIENvbnRyb2wgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBQUElfU1RBVFVTCQkJMHhGRkMwMTAwNAkvKiBQUEkgU3RhdHVzIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUFBJX0NPVU5UCQkJMHhGRkMwMTAwOAkvKiBQUEkgVHJhbnNmZXIgQ291bnQgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgUFBJX0RFTEFZCQkJMHhGRkMwMTAwQwkvKiBQUEkgRGVsYXkgQ291bnQgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIFBQSV9GUkFNRQkJCTB4RkZDMDEwMTAJLyogUFBJIEZyYW1lIExlbmd0aCBSZWdpc3RlcgkqLwotCi0KLS8qIFR3by1XaXJlIEludGVyZmFjZQkJKDB4RkZDMDE0MDAgLSAweEZGQzAxNEZGKQkJCQkJCQkJKi8KLSNkZWZpbmUgVFdJMF9SRUdCQVNFCQkJMHhGRkMwMTQwMAotI2RlZmluZSBUV0kwX0NMS0RJVgkJCTB4RkZDMDE0MDAJLyogU2VyaWFsIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBUV0kwX0NPTlRST0wJCQkweEZGQzAxNDA0CS8qIFRXSSBDb250cm9sIFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgVFdJMF9TTEFWRV9DVEwJCTB4RkZDMDE0MDgJLyogU2xhdmUgTW9kZSBDb250cm9sIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFRXSTBfU0xBVkVfU1RBVAkJMHhGRkMwMTQwQwkvKiBTbGF2ZSBNb2RlIFN0YXR1cyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBUV0kwX1NMQVZFX0FERFIJCTB4RkZDMDE0MTAJLyogU2xhdmUgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFRXSTBfTUFTVEVSX0NUTAkJMHhGRkMwMTQxNAkvKiBNYXN0ZXIgTW9kZSBDb250cm9sIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFRXSTBfTUFTVEVSX1NUQVQJCTB4RkZDMDE0MTgJLyogTWFzdGVyIE1vZGUgU3RhdHVzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFRXSTBfTUFTVEVSX0FERFIJCTB4RkZDMDE0MUMJLyogTWFzdGVyIE1vZGUgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBUV0kwX0lOVF9TVEFUCQkweEZGQzAxNDIwCS8qIFRXSSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgVFdJMF9JTlRfTUFTSwkJMHhGRkMwMTQyNAkvKiBUV0kgTWFzdGVyIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBUV0kwX0ZJRk9fQ1RMCQkweEZGQzAxNDI4CS8qIEZJRk8gQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgVFdJMF9GSUZPX1NUQVQJCTB4RkZDMDE0MkMJLyogRklGTyBTdGF0dXMgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBUV0kwX1hNVF9EQVRBOAkJMHhGRkMwMTQ4MAkvKiBGSUZPIFRyYW5zbWl0IERhdGEgU2luZ2xlIEJ5dGUgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgVFdJMF9YTVRfREFUQTE2CQkweEZGQzAxNDg0CS8qIEZJRk8gVHJhbnNtaXQgRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlcgkqLwotI2RlZmluZSBUV0kwX1JDVl9EQVRBOAkJMHhGRkMwMTQ4OAkvKiBGSUZPIFJlY2VpdmUgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlcgkqLwotI2RlZmluZSBUV0kwX1JDVl9EQVRBMTYJCTB4RkZDMDE0OEMJLyogRklGTyBSZWNlaXZlIERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIJKi8KLQotCi0vKiBHZW5lcmFsIFB1cnBvc2UgSS9PIFBvcnQgRyAoMHhGRkMwMTUwMCAtIDB4RkZDMDE1RkYpCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUE9SVEdJTwkJCQkJMHhGRkMwMTUwMAkvKiBQb3J0IEcgSS9PIFBpbiBTdGF0ZSBTcGVjaWZ5IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFBPUlRHSU9fQ0xFQVIJCQkweEZGQzAxNTA0CS8qIFBvcnQgRyBJL08gUGVyaXBoZXJhbCBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIFBPUlRHSU9fU0VUCQkJCTB4RkZDMDE1MDgJLyogUG9ydCBHIEkvTyBQZXJpcGhlcmFsIEludGVycnVwdCBTZXQgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBQT1JUR0lPX1RPR0dMRQkJCTB4RkZDMDE1MEMJLyogUG9ydCBHIEkvTyBQaW4gU3RhdGUgVG9nZ2xlIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBQT1JUR0lPX01BU0tBCQkJMHhGRkMwMTUxMAkvKiBQb3J0IEcgSS9PIE1hc2sgU3RhdGUgU3BlY2lmeSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkqLwotI2RlZmluZSBQT1JUR0lPX01BU0tBX0NMRUFSCQkweEZGQzAxNTE0CS8qIFBvcnQgRyBJL08gTWFzayBEaXNhYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUE9SVEdJT19NQVNLQV9TRVQJCTB4RkZDMDE1MTgJLyogUG9ydCBHIEkvTyBNYXNrIEVuYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFBPUlRHSU9fTUFTS0FfVE9HR0xFCTB4RkZDMDE1MUMJLyogUG9ydCBHIEkvTyBNYXNrIFRvZ2dsZSBFbmFibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgUE9SVEdJT19NQVNLQgkJCTB4RkZDMDE1MjAJLyogUG9ydCBHIEkvTyBNYXNrIFN0YXRlIFNwZWNpZnkgSW50ZXJydXB0IEIgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgUE9SVEdJT19NQVNLQl9DTEVBUgkJMHhGRkMwMTUyNAkvKiBQb3J0IEcgSS9PIE1hc2sgRGlzYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFBPUlRHSU9fTUFTS0JfU0VUCQkweEZGQzAxNTI4CS8qIFBvcnQgRyBJL08gTWFzayBFbmFibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBQT1JUR0lPX01BU0tCX1RPR0dMRQkweEZGQzAxNTJDCS8qIFBvcnQgRyBJL08gTWFzayBUb2dnbGUgRW5hYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCSovCi0jZGVmaW5lIFBPUlRHSU9fRElSCQkJCTB4RkZDMDE1MzAJLyogUG9ydCBHIEkvTyBEaXJlY3Rpb24gUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBQT1JUR0lPX1BPTEFSCQkJMHhGRkMwMTUzNAkvKiBQb3J0IEcgSS9PIFNvdXJjZSBQb2xhcml0eSBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgUE9SVEdJT19FREdFCQkJMHhGRkMwMTUzOAkvKiBQb3J0IEcgSS9PIFNvdXJjZSBTZW5zaXRpdml0eSBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBQT1JUR0lPX0JPVEgJCQkweEZGQzAxNTNDCS8qIFBvcnQgRyBJL08gU2V0IG9uIEJPVEggRWRnZXMgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgUE9SVEdJT19JTkVOCQkJMHhGRkMwMTU0MAkvKiBQb3J0IEcgSS9PIElucHV0IEVuYWJsZSBSZWdpc3RlcgkJCQkJCSovCi0KLQotLyogR2VuZXJhbCBQdXJwb3NlIEkvTyBQb3J0IEggKDB4RkZDMDE3MDAgLSAweEZGQzAxN0ZGKQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFBPUlRISU8JCQkJCTB4RkZDMDE3MDAJLyogUG9ydCBIIEkvTyBQaW4gU3RhdGUgU3BlY2lmeSBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBQT1JUSElPX0NMRUFSCQkJMHhGRkMwMTcwNAkvKiBQb3J0IEggSS9PIFBlcmlwaGVyYWwgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBQT1JUSElPX1NFVAkJCQkweEZGQzAxNzA4CS8qIFBvcnQgSCBJL08gUGVyaXBoZXJhbCBJbnRlcnJ1cHQgU2V0IFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUE9SVEhJT19UT0dHTEUJCQkweEZGQzAxNzBDCS8qIFBvcnQgSCBJL08gUGluIFN0YXRlIFRvZ2dsZSBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgUE9SVEhJT19NQVNLQQkJCTB4RkZDMDE3MTAJLyogUG9ydCBIIEkvTyBNYXNrIFN0YXRlIFNwZWNpZnkgSW50ZXJydXB0IEEgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgUE9SVEhJT19NQVNLQV9DTEVBUgkJMHhGRkMwMTcxNAkvKiBQb3J0IEggSS9PIE1hc2sgRGlzYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFBPUlRISU9fTUFTS0FfU0VUCQkweEZGQzAxNzE4CS8qIFBvcnQgSCBJL08gTWFzayBFbmFibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBQT1JUSElPX01BU0tBX1RPR0dMRQkweEZGQzAxNzFDCS8qIFBvcnQgSCBJL08gTWFzayBUb2dnbGUgRW5hYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCSovCi0jZGVmaW5lIFBPUlRISU9fTUFTS0IJCQkweEZGQzAxNzIwCS8qIFBvcnQgSCBJL08gTWFzayBTdGF0ZSBTcGVjaWZ5IEludGVycnVwdCBCIFJlZ2lzdGVyCSovCi0jZGVmaW5lIFBPUlRISU9fTUFTS0JfQ0xFQVIJCTB4RkZDMDE3MjQJLyogUG9ydCBIIEkvTyBNYXNrIERpc2FibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBQT1JUSElPX01BU0tCX1NFVAkJMHhGRkMwMTcyOAkvKiBQb3J0IEggSS9PIE1hc2sgRW5hYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgUE9SVEhJT19NQVNLQl9UT0dHTEUJMHhGRkMwMTcyQwkvKiBQb3J0IEggSS9PIE1hc2sgVG9nZ2xlIEVuYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkqLwotI2RlZmluZSBQT1JUSElPX0RJUgkJCQkweEZGQzAxNzMwCS8qIFBvcnQgSCBJL08gRGlyZWN0aW9uIFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgUE9SVEhJT19QT0xBUgkJCTB4RkZDMDE3MzQJLyogUG9ydCBIIEkvTyBTb3VyY2UgUG9sYXJpdHkgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFBPUlRISU9fRURHRQkJCTB4RkZDMDE3MzgJLyogUG9ydCBIIEkvTyBTb3VyY2UgU2Vuc2l0aXZpdHkgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgUE9SVEhJT19CT1RICQkJMHhGRkMwMTczQwkvKiBQb3J0IEggSS9PIFNldCBvbiBCT1RIIEVkZ2VzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFBPUlRISU9fSU5FTgkJCTB4RkZDMDE3NDAJLyogUG9ydCBIIEkvTyBJbnB1dCBFbmFibGUgUmVnaXN0ZXIJCQkJCQkqLwotCi0KLS8qIFVBUlQxIENvbnRyb2xsZXIJCSgweEZGQzAyMDAwIC0gMHhGRkMwMjBGRikJCQkJCQkJCSovCi0jZGVmaW5lIFVBUlQxX1RIUgkJCTB4RkZDMDIwMDAJLyogVHJhbnNtaXQgSG9sZGluZyByZWdpc3RlcgkJCSovCi0jZGVmaW5lIFVBUlQxX1JCUgkJCTB4RkZDMDIwMDAJLyogUmVjZWl2ZSBCdWZmZXIgcmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgVUFSVDFfRExMCQkJMHhGRkMwMjAwMAkvKiBEaXZpc29yIExhdGNoIChMb3ctQnl0ZSkJCQkJKi8KLSNkZWZpbmUgVUFSVDFfSUVSCQkJMHhGRkMwMjAwNAkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgVUFSVDFfRExICQkJMHhGRkMwMjAwNAkvKiBEaXZpc29yIExhdGNoIChIaWdoLUJ5dGUpCQkJKi8KLSNkZWZpbmUgVUFSVDFfSUlSCQkJMHhGRkMwMjAwOAkvKiBJbnRlcnJ1cHQgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIJKi8KLSNkZWZpbmUgVUFSVDFfTENSCQkJMHhGRkMwMjAwQwkvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgVUFSVDFfTUNSCQkJMHhGRkMwMjAxMAkvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFVBUlQxX0xTUgkJCTB4RkZDMDIwMTQJLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFVBUlQxX01TUgkJCTB4RkZDMDIwMTgJLyogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFVBUlQxX1NDUgkJCTB4RkZDMDIwMUMJLyogU0NSIFNjcmF0Y2ggUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIFVBUlQxX0dDVEwJCQkweEZGQzAyMDI0CS8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyCQkJCSovCi0KLQotLyogT21pdCBDQU4gcmVnaXN0ZXIgc2V0cyBmcm9tIHRoZSBkZWZCRjUzNC5oIChDQU4gaXMgbm90IGluIHRoZSBBRFNQLUJGNTJ4IHByb2Nlc3NvcikgKi8KLQotLyogUGluIENvbnRyb2wgUmVnaXN0ZXJzCSgweEZGQzAzMjAwIC0gMHhGRkMwMzJGRikJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFBPUlRGX0ZFUgkJCTB4RkZDMDMyMDAJLyogUG9ydCBGIEZ1bmN0aW9uIEVuYWJsZSBSZWdpc3RlciAoQWx0ZXJuYXRlL0ZsYWcqKQkqLwotI2RlZmluZSBQT1JUR19GRVIJCQkweEZGQzAzMjA0CS8qIFBvcnQgRyBGdW5jdGlvbiBFbmFibGUgUmVnaXN0ZXIgKEFsdGVybmF0ZS9GbGFnKikJKi8KLSNkZWZpbmUgUE9SVEhfRkVSCQkJMHhGRkMwMzIwOAkvKiBQb3J0IEggRnVuY3Rpb24gRW5hYmxlIFJlZ2lzdGVyIChBbHRlcm5hdGUvRmxhZyopCSovCi0jZGVmaW5lIEJGSU5fUE9SVF9NVVgJCQkweEZGQzAzMjBDCS8qIFBvcnQgTXVsdGlwbGV4ZXIgQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KLQotCi0vKiBIYW5kc2hha2UgTURNQSBSZWdpc3RlcnMJKDB4RkZDMDMzMDAgLSAweEZGQzAzM0ZGKQkJCQkJCQkJCQkqLwotI2RlZmluZSBITURNQTBfQ09OVFJPTAkJMHhGRkMwMzMwMAkvKiBIYW5kc2hha2UgTURNQTAgQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgSE1ETUEwX0VDSU5JVAkJMHhGRkMwMzMwNAkvKiBITURNQTAgSW5pdGlhbCBFZGdlIENvdW50IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIEhNRE1BMF9CQ0lOSVQJCTB4RkZDMDMzMDgJLyogSE1ETUEwIEluaXRpYWwgQmxvY2sgQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgSE1ETUEwX0VDVVJHRU5UCQkweEZGQzAzMzBDCS8qIEhNRE1BMCBVcmdlbnQgRWRnZSBDb3VudCBUaHJlc2hvbGQgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIEhNRE1BMF9FQ09WRVJGTE9XCTB4RkZDMDMzMTAJLyogSE1ETUEwIEVkZ2UgQ291bnQgT3ZlcmZsb3cgSW50ZXJydXB0IFJlZ2lzdGVyCSovCi0jZGVmaW5lIEhNRE1BMF9FQ09VTlQJCTB4RkZDMDMzMTQJLyogSE1ETUEwIEN1cnJlbnQgRWRnZSBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBITURNQTBfQkNPVU5UCQkweEZGQzAzMzE4CS8qIEhNRE1BMCBDdXJyZW50IEJsb2NrIENvdW50IFJlZ2lzdGVyCQkJCSovCi0KLSNkZWZpbmUgSE1ETUExX0NPTlRST0wJCTB4RkZDMDMzNDAJLyogSGFuZHNoYWtlIE1ETUExIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCi0jZGVmaW5lIEhNRE1BMV9FQ0lOSVQJCTB4RkZDMDMzNDQJLyogSE1ETUExIEluaXRpYWwgRWRnZSBDb3VudCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBITURNQTFfQkNJTklUCQkweEZGQzAzMzQ4CS8qIEhNRE1BMSBJbml0aWFsIEJsb2NrIENvdW50IFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIEhNRE1BMV9FQ1VSR0VOVAkJMHhGRkMwMzM0QwkvKiBITURNQTEgVXJnZW50IEVkZ2UgQ291bnQgVGhyZXNob2xkIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBITURNQTFfRUNPVkVSRkxPVwkweEZGQzAzMzUwCS8qIEhNRE1BMSBFZGdlIENvdW50IE92ZXJmbG93IEludGVycnVwdCBSZWdpc3RlcgkqLwotI2RlZmluZSBITURNQTFfRUNPVU5UCQkweEZGQzAzMzU0CS8qIEhNRE1BMSBDdXJyZW50IEVkZ2UgQ291bnQgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgSE1ETUExX0JDT1VOVAkJMHhGRkMwMzM1OAkvKiBITURNQTEgQ3VycmVudCBCbG9jayBDb3VudCBSZWdpc3RlcgkJCQkqLwotCi0vKiBHUElPIFBJTiBtdXggKDB4RkZDMDMyMTAgLSBPeEZGQzAzMjg4KSAqLwotI2RlZmluZSBQT1JURl9NVVggICAgICAgICAgICAgICAweEZGQzAzMjEwICAgICAgLyogUG9ydCBGIG11eCBjb250cm9sICovCi0jZGVmaW5lIFBPUlRHX01VWCAgICAgICAgICAgICAgIDB4RkZDMDMyMTQgICAgICAvKiBQb3J0IEcgbXV4IGNvbnRyb2wgKi8KLSNkZWZpbmUgUE9SVEhfTVVYICAgICAgICAgICAgICAgMHhGRkMwMzIxOCAgICAgIC8qIFBvcnQgSCBtdXggY29udHJvbCAqLwotI2RlZmluZSBQT1JURl9EUklWRSAgICAgICAgICAgICAweEZGQzAzMjIwICAgICAgLyogUG9ydCBGIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgKi8KLSNkZWZpbmUgUE9SVEdfRFJJVkUgICAgICAgICAgICAgMHhGRkMwMzIyNCAgICAgIC8qIFBvcnQgRyBkcml2ZSBzdHJlbmd0aCBjb250cm9sICovCi0jZGVmaW5lIFBPUlRIX0RSSVZFICAgICAgICAgICAgIDB4RkZDMDMyMjggICAgICAvKiBQb3J0IEggZHJpdmUgc3RyZW5ndGggY29udHJvbCAqLwotI2RlZmluZSBQT1JURl9TTEVXICAgICAgICAgICAgICAweEZGQzAzMjMwICAgICAgLyogUG9ydCBGIHNsZXcgY29udHJvbCAqLwotI2RlZmluZSBQT1JUR19TTEVXICAgICAgICAgICAgICAweEZGQzAzMjM0ICAgICAgLyogUG9ydCBHIHNsZXcgY29udHJvbCAqLwotI2RlZmluZSBQT1JUSF9TTEVXICAgICAgICAgICAgICAweEZGQzAzMjM4ICAgICAgLyogUG9ydCBIIHNsZXcgY29udHJvbCAqLwotI2RlZmluZSBQT1JURl9IWVNURVJJU0lTICAgICAgICAweEZGQzAzMjQwICAgICAgLyogUG9ydCBGIFNjaG1pdHQgdHJpZ2dlciBjb250cm9sICovCi0jZGVmaW5lIFBPUlRHX0hZU1RFUklTSVMgICAgICAgIDB4RkZDMDMyNDQgICAgICAvKiBQb3J0IEcgU2NobWl0dCB0cmlnZ2VyIGNvbnRyb2wgKi8KLSNkZWZpbmUgUE9SVEhfSFlTVEVSSVNJUyAgICAgICAgMHhGRkMwMzI0OCAgICAgIC8qIFBvcnQgSCBTY2htaXR0IHRyaWdnZXIgY29udHJvbCAqLwotI2RlZmluZSBNSVNDUE9SVF9EUklWRSAgICAgICAgICAweEZGQzAzMjgwICAgICAgLyogTWlzYyBQb3J0IGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgKi8KLSNkZWZpbmUgTUlTQ1BPUlRfU0xFVyAgICAgICAgICAgMHhGRkMwMzI4NCAgICAgIC8qIE1pc2MgUG9ydCBzbGV3IGNvbnRyb2wgKi8KLSNkZWZpbmUgTUlTQ1BPUlRfSFlTVEVSSVNJUyAgICAgMHhGRkMwMzI4OCAgICAgIC8qIE1pc2MgUG9ydCBTY2htaXR0IHRyaWdnZXIgY29udHJvbCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiogU3lzdGVtIE1NUiBSZWdpc3RlciBCaXRzIEFuZCBNYWNyb3MKLSoqCi0qKiBEaXNjbGFpbWVyOglBbGwgbWFjcm9zIGFyZSBpbnRlbmRlZCB0byBtYWtlIEMgYW5kIEFzc2VtYmx5IGNvZGUgbW9yZSByZWFkYWJsZS4KLSoqCQkJCVVzZSB0aGVzZSBtYWNyb3MgY2FyZWZ1bGx5LCBhcyBhbnkgdGhhdCBkbyBsZWZ0IHNoaWZ0cyBmb3IgZmllbGQKLSoqCQkJCWRlcG9zaXRpbmcgd2lsbCByZXN1bHQgaW4gdGhlIGxvd2VyIG9yZGVyIGJpdHMgYmVpbmcgZGVzdHJveWVkLiAgQW55Ci0qKgkJCQltYWNybyB0aGF0IHNoaWZ0cyBsZWZ0IHRvIHByb3Blcmx5IHBvc2l0aW9uIHRoZSBiaXQtZmllbGQgc2hvdWxkIGJlCi0qKgkJCQl1c2VkIGFzIHBhcnQgb2YgYW4gT1IgdG8gaW5pdGlhbGl6ZSBhIHJlZ2lzdGVyIGFuZCBOT1QgYXMgYSBkeW5hbWljCi0qKgkJCQltb2RpZmllciBVTkxFU1MgdGhlIGxvd2VyIG9yZGVyIGJpdHMgYXJlIHNhdmVkIGFuZCBPUmVkIGJhY2sgaW4gd2hlbgotKioJCQkJdGhlIG1hY3JvIGlzIHVzZWQuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBDSElQSUQgTWFza3MgKi8KLSNkZWZpbmUgQ0hJUElEX1ZFUlNJT04gICAgICAgICAweEYwMDAwMDAwCi0jZGVmaW5lIENISVBJRF9GQU1JTFkgICAgICAgICAgMHgwRkZGRjAwMAotI2RlZmluZSBDSElQSURfTUFOVUZBQ1RVUkUgICAgIDB4MDAwMDBGRkUKLQotLyogU1dSU1QgTWFza3MJCQkJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBTWVNURU1fUkVTRVQJCTB4MDAwNwkvKiBJbml0aWF0ZXMgQSBTeXN0ZW0gU29mdHdhcmUgUmVzZXQJCQkqLwotI2RlZmluZQlET1VCTEVfRkFVTFQJCTB4MDAwOAkvKiBDb3JlIERvdWJsZSBGYXVsdCBDYXVzZXMgUmVzZXQJCQkJKi8KLSNkZWZpbmUgUkVTRVRfRE9VQkxFCQkweDIwMDAJLyogU1cgUmVzZXQgR2VuZXJhdGVkIEJ5IENvcmUgRG91YmxlLUZhdWx0CQkqLwotI2RlZmluZSBSRVNFVF9XRE9HCQkJMHg0MDAwCS8qIFNXIFJlc2V0IEdlbmVyYXRlZCBCeSBXYXRjaGRvZyBUaW1lcgkJCSovCi0jZGVmaW5lIFJFU0VUX1NPRlRXQVJFCQkweDgwMDAJLyogU1cgUmVzZXQgT2NjdXJyZWQgU2luY2UgTGFzdCBSZWFkIE9mIFNXUlNUCSovCi0KLS8qIFNZU0NSIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBCTU9ERQkJCQkweDAwMDcJLyogQm9vdCBNb2RlIC0gTGF0Y2hlZCBEdXJpbmcgSFcgUmVzZXQgRnJvbSBNb2RlIFBpbnMJKi8KLSNkZWZpbmUJTk9CT09UCQkJCTB4MDAxMAkvKiBFeGVjdXRlIEZyb20gTDEgb3IgQVNZTkMgQmFuayAwIFdoZW4gQk1PREUgPSAwCQkqLwotCi0KLS8qICoqKioqKioqKioqKiogIFNZU1RFTSBJTlRFUlJVUFQgQ09OVFJPTExFUiBNQVNLUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUGVyaXBoZXJhbCBNYXNrcyBGb3IgU0lDX0lTUiwgU0lDX0lXUiwgU0lDX0lNQVNLCQkJCQkJCQkJCSovCi0KLSNpZiAwCi0jZGVmaW5lIElSUV9QTExfV0FLRVVQCTB4MDAwMDAwMDEJLyogUExMIFdha2V1cCBJbnRlcnJ1cHQJCQkgCQkJCQkqLwotCi0jZGVmaW5lIElSUV9FUlJPUjEgICAgICAweDAwMDAwMDAyICAvKiBFcnJvciBJbnRlcnJ1cHQgKERNQSwgRE1BUnggQmxvY2ssIERNQVJ4IE92ZXJmbG93KSAqLwotI2RlZmluZSBJUlFfRVJST1IyICAgICAgMHgwMDAwMDAwNCAgLyogRXJyb3IgSW50ZXJydXB0IChDQU4sIEV0aGVybmV0LCBTUE9SVHgsIFBQSSwgU1BJLCBVQVJUeCkgKi8KLSNkZWZpbmUgSVJRX1JUQwkJCTB4MDAwMDAwMDgJLyogUmVhbCBUaW1lIENsb2NrIEludGVycnVwdCAJCQkJCQkqLwotI2RlZmluZSBJUlFfRE1BMAkJMHgwMDAwMDAxMAkvKiBETUEgQ2hhbm5lbCAwIChQUEkpIEludGVycnVwdCAJCQkJCSovCi0jZGVmaW5lIElSUV9ETUEzCQkweDAwMDAwMDIwCS8qIERNQSBDaGFubmVsIDMgKFNQT1JUMCBSWCkgSW50ZXJydXB0IAkJCQkqLwotI2RlZmluZSBJUlFfRE1BNAkJMHgwMDAwMDA0MAkvKiBETUEgQ2hhbm5lbCA0IChTUE9SVDAgVFgpIEludGVycnVwdCAJCQkJKi8KLSNkZWZpbmUgSVJRX0RNQTUJCTB4MDAwMDAwODAJLyogRE1BIENoYW5uZWwgNSAoU1BPUlQxIFJYKSBJbnRlcnJ1cHQgCQkJCSovCi0KLSNkZWZpbmUgSVJRX0RNQTYJCTB4MDAwMDAxMDAJLyogRE1BIENoYW5uZWwgNiAoU1BPUlQxIFRYKSBJbnRlcnJ1cHQgCQkgCQkqLwotI2RlZmluZSBJUlFfVFdJCQkJMHgwMDAwMDIwMAkvKiBUV0kgSW50ZXJydXB0CQkJCQkJCQkJKi8KLSNkZWZpbmUgSVJRX0RNQTcJCTB4MDAwMDA0MDAJLyogRE1BIENoYW5uZWwgNyAoU1BJKSBJbnRlcnJ1cHQgCQkJCQkqLwotI2RlZmluZSBJUlFfRE1BOAkJMHgwMDAwMDgwMAkvKiBETUEgQ2hhbm5lbCA4IChVQVJUMCBSWCkgSW50ZXJydXB0IAkJCQkqLwotI2RlZmluZSBJUlFfRE1BOQkJMHgwMDAwMTAwMAkvKiBETUEgQ2hhbm5lbCA5IChVQVJUMCBUWCkgSW50ZXJydXB0IAkJCQkqLwotI2RlZmluZSBJUlFfRE1BMTAJCTB4MDAwMDIwMDAJLyogRE1BIENoYW5uZWwgMTAgKFVBUlQxIFJYKSBJbnRlcnJ1cHQgCQkJCSovCi0jZGVmaW5lIElSUV9ETUExMQkJMHgwMDAwNDAwMAkvKiBETUEgQ2hhbm5lbCAxMSAoVUFSVDEgVFgpIEludGVycnVwdCAJCQkJKi8KLSNkZWZpbmUgSVJRX0NBTl9SWAkJMHgwMDAwODAwMAkvKiBDQU4gUmVjZWl2ZSBJbnRlcnJ1cHQgCQkJCQkJCSovCi0KLSNkZWZpbmUgSVJRX0NBTl9UWAkJMHgwMDAxMDAwMAkvKiBDQU4gVHJhbnNtaXQgSW50ZXJydXB0ICAJCQkJCQkJKi8KLSNkZWZpbmUgSVJRX0RNQTEJCTB4MDAwMjAwMDAJLyogRE1BIENoYW5uZWwgMSAoRXRoZXJuZXQgUlgpIEludGVycnVwdCAJCQkqLwotI2RlZmluZSBJUlFfUEZBX1BPUlRICTB4MDAwMjAwMDAJLyogUEYgUG9ydCBIIChQRjQ3OjMyKSBJbnRlcnJ1cHQgQSAJCQkJCSovCi0jZGVmaW5lIElSUV9ETUEyCQkweDAwMDQwMDAwCS8qIERNQSBDaGFubmVsIDIgKEV0aGVybmV0IFRYKSBJbnRlcnJ1cHQgCQkJKi8KLSNkZWZpbmUgSVJRX1BGQl9QT1JUSAkweDAwMDQwMDAwCS8qIFBGIFBvcnQgSCAoUEY0NzozMikgSW50ZXJydXB0IEIgCQkJCQkqLwotI2RlZmluZSBJUlFfVElNRVIwCQkweDAwMDgwMDAwCS8qIFRpbWVyIDAgSW50ZXJydXB0CQkJCQkJCQkqLwotI2RlZmluZSBJUlFfVElNRVIxCQkweDAwMTAwMDAwCS8qIFRpbWVyIDEgSW50ZXJydXB0IAkJCQkJCQkJKi8KLSNkZWZpbmUgSVJRX1RJTUVSMgkJMHgwMDIwMDAwMAkvKiBUaW1lciAyIEludGVycnVwdCAJCQkJCQkJCSovCi0jZGVmaW5lIElSUV9USU1FUjMJCTB4MDA0MDAwMDAJLyogVGltZXIgMyBJbnRlcnJ1cHQgCQkJCQkJCQkqLwotI2RlZmluZSBJUlFfVElNRVI0CQkweDAwODAwMDAwCS8qIFRpbWVyIDQgSW50ZXJydXB0IAkJCQkJCQkJKi8KLQotI2RlZmluZSBJUlFfVElNRVI1CQkweDAxMDAwMDAwCS8qIFRpbWVyIDUgSW50ZXJydXB0IAkJCQkJCQkJKi8KLSNkZWZpbmUgSVJRX1RJTUVSNgkJMHgwMjAwMDAwMAkvKiBUaW1lciA2IEludGVycnVwdCAJCQkJCQkJCSovCi0jZGVmaW5lIElSUV9USU1FUjcJCTB4MDQwMDAwMDAJLyogVGltZXIgNyBJbnRlcnJ1cHQgCQkJCQkJCQkqLwotI2RlZmluZSBJUlFfUEZBX1BPUlRGRwkweDA4MDAwMDAwCS8qIFBGIFBvcnRzIEYmRyAoUEYzMTowKSBJbnRlcnJ1cHQgQSAJCQkJKi8KLSNkZWZpbmUgSVJRX1BGQl9QT1JURgkweDgwMDAwMDAwCS8qIFBGIFBvcnQgRiAoUEYxNTowKSBJbnRlcnJ1cHQgQiAJCQkJCSovCi0jZGVmaW5lIElSUV9ETUExMgkJMHgyMDAwMDAwMAkvKiBETUEgQ2hhbm5lbHMgMTIgKE1ETUExIFNvdXJjZSkgUlggSW50ZXJydXB0IAkJKi8KLSNkZWZpbmUgSVJRX0RNQTEzCQkweDIwMDAwMDAwCS8qIERNQSBDaGFubmVscyAxMyAoTURNQTEgRGVzdGluYXRpb24pIFRYIEludGVycnVwdCAqLwotI2RlZmluZSBJUlFfRE1BMTQJCTB4NDAwMDAwMDAJLyogRE1BIENoYW5uZWxzIDE0IChNRE1BMCBTb3VyY2UpIFJYIEludGVycnVwdCAJCSovCi0jZGVmaW5lIElSUV9ETUExNQkJMHg0MDAwMDAwMAkvKiBETUEgQ2hhbm5lbHMgMTUgKE1ETUEwIERlc3RpbmF0aW9uKSBUWCBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSVJRX1dET0cJCTB4ODAwMDAwMDAJLyogU29mdHdhcmUgV2F0Y2hkb2cgVGltZXIgSW50ZXJydXB0IAkJCQkqLwotI2RlZmluZSBJUlFfUEZCX1BPUlRHCTB4MTAwMDAwMDAJLyogUEYgUG9ydCBHIChQRjMxOjE2KSBJbnRlcnJ1cHQgQiAJCQkJCSovCi0jZW5kaWYKLQotLyogU0lDX0lBUjAgTWFjcm9zCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUDBfSVZHKHgpCQkoKCh4KSYweEYpLTcpCQkJLyogUGVyaXBoZXJhbCAjMCBhc3NpZ25lZCBJVkcgI3ggCSovCi0jZGVmaW5lIFAxX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDQJLyogUGVyaXBoZXJhbCAjMSBhc3NpZ25lZCBJVkcgI3ggCSovCi0jZGVmaW5lIFAyX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDgJLyogUGVyaXBoZXJhbCAjMiBhc3NpZ25lZCBJVkcgI3ggCSovCi0jZGVmaW5lIFAzX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweEMJLyogUGVyaXBoZXJhbCAjMyBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDRfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTAJLyogUGVyaXBoZXJhbCAjNCBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDVfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTQJLyogUGVyaXBoZXJhbCAjNSBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDZfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTgJLyogUGVyaXBoZXJhbCAjNiBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDdfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MUMJLyogUGVyaXBoZXJhbCAjNyBhc3NpZ25lZCBJVkcgI3gJKi8KLQotLyogU0lDX0lBUjEgTWFjcm9zCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUDhfSVZHKHgpCQkoKCh4KSYweEYpLTcpCQkJLyogUGVyaXBoZXJhbCAjOCBhc3NpZ25lZCBJVkcgI3ggCSovCi0jZGVmaW5lIFA5X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDQJLyogUGVyaXBoZXJhbCAjOSBhc3NpZ25lZCBJVkcgI3ggCSovCi0jZGVmaW5lIFAxMF9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHg4CS8qIFBlcmlwaGVyYWwgIzEwIGFzc2lnbmVkIElWRyAjeAkqLwotI2RlZmluZSBQMTFfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4QwkvKiBQZXJpcGhlcmFsICMxMSBhc3NpZ25lZCBJVkcgI3ggCSovCi0jZGVmaW5lIFAxMl9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxMAkvKiBQZXJpcGhlcmFsICMxMiBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDEzX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDE0CS8qIFBlcmlwaGVyYWwgIzEzIGFzc2lnbmVkIElWRyAjeAkqLwotI2RlZmluZSBQMTRfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTgJLyogUGVyaXBoZXJhbCAjMTQgYXNzaWduZWQgSVZHICN4CSovCi0jZGVmaW5lIFAxNV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxQwkvKiBQZXJpcGhlcmFsICMxNSBhc3NpZ25lZCBJVkcgI3gJKi8KLQotLyogU0lDX0lBUjIgTWFjcm9zCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUDE2X0lWRyh4KQkJKCgoeCkmMHhGKS03KQkJCS8qIFBlcmlwaGVyYWwgIzE2IGFzc2lnbmVkIElWRyAjeAkqLwotI2RlZmluZSBQMTdfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4NAkvKiBQZXJpcGhlcmFsICMxNyBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDE4X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDgJLyogUGVyaXBoZXJhbCAjMTggYXNzaWduZWQgSVZHICN4CSovCi0jZGVmaW5lIFAxOV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHhDCS8qIFBlcmlwaGVyYWwgIzE5IGFzc2lnbmVkIElWRyAjeAkqLwotI2RlZmluZSBQMjBfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTAJLyogUGVyaXBoZXJhbCAjMjAgYXNzaWduZWQgSVZHICN4CSovCi0jZGVmaW5lIFAyMV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxNAkvKiBQZXJpcGhlcmFsICMyMSBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDIyX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDE4CS8qIFBlcmlwaGVyYWwgIzIyIGFzc2lnbmVkIElWRyAjeAkqLwotI2RlZmluZSBQMjNfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MUMJLyogUGVyaXBoZXJhbCAjMjMgYXNzaWduZWQgSVZHICN4CSovCi0KLS8qIFNJQ19JQVIzIE1hY3JvcwkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFAyNF9JVkcoeCkJCSgoKHgpJjB4RiktNykJCQkvKiBQZXJpcGhlcmFsICMyNCBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDI1X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDQJLyogUGVyaXBoZXJhbCAjMjUgYXNzaWduZWQgSVZHICN4CSovCi0jZGVmaW5lIFAyNl9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHg4CS8qIFBlcmlwaGVyYWwgIzI2IGFzc2lnbmVkIElWRyAjeAkqLwotI2RlZmluZSBQMjdfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4QwkvKiBQZXJpcGhlcmFsICMyNyBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDI4X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDEwCS8qIFBlcmlwaGVyYWwgIzI4IGFzc2lnbmVkIElWRyAjeAkqLwotI2RlZmluZSBQMjlfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTQJLyogUGVyaXBoZXJhbCAjMjkgYXNzaWduZWQgSVZHICN4CSovCi0jZGVmaW5lIFAzMF9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxOAkvKiBQZXJpcGhlcmFsICMzMCBhc3NpZ25lZCBJVkcgI3gJKi8KLSNkZWZpbmUgUDMxX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDFDCS8qIFBlcmlwaGVyYWwgIzMxIGFzc2lnbmVkIElWRyAjeAkqLwotCi0KLS8qIFNJQ19JTUFTSyBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFNJQ19VTk1BU0tfQUxMCTB4MDAwMDAwMDAJCQkJCS8qIFVubWFzayBhbGwgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzCSovCi0jZGVmaW5lIFNJQ19NQVNLX0FMTAkweEZGRkZGRkZGCQkJCQkvKiBNYXNrIGFsbCBwZXJpcGhlcmFsIGludGVycnVwdHMJKi8KLSNkZWZpbmUgU0lDX01BU0soeCkJCSgxIDw8ICgoeCkmMHgxRikpCQkJCQkvKiBNYXNrIFBlcmlwaGVyYWwgI3ggaW50ZXJydXB0CQkqLwotI2RlZmluZSBTSUNfVU5NQVNLKHgpCSgweEZGRkZGRkZGIF4gKDEgPDwgKCh4KSYweDFGKSkpCS8qIFVubWFzayBQZXJpcGhlcmFsICN4IGludGVycnVwdAkqLwotCi0vKiBTSUNfSVdSIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgSVdSX0RJU0FCTEVfQUxMCTB4MDAwMDAwMDAJCQkJCS8qIFdha2V1cCBEaXNhYmxlIGFsbCBwZXJpcGhlcmFscwkqLwotI2RlZmluZSBJV1JfRU5BQkxFX0FMTAkweEZGRkZGRkZGCQkJCQkvKiBXYWtldXAgRW5hYmxlIGFsbCBwZXJpcGhlcmFscwkqLwotI2RlZmluZSBJV1JfRU5BQkxFKHgpCSgxIDw8ICgoeCkmMHgxRikpCQkJCQkvKiBXYWtldXAgRW5hYmxlIFBlcmlwaGVyYWwgI3gJCSovCi0jZGVmaW5lIElXUl9ESVNBQkxFKHgpCSgweEZGRkZGRkZGIF4gKDEgPDwgKCh4KSYweDFGKSkpIAkvKiBXYWtldXAgRGlzYWJsZSBQZXJpcGhlcmFsICN4CQkqLwotCi0KLS8qICoqKioqKioqKioqKioqIFVBUlQgQ09OVFJPTExFUiBNQVNLUyAqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogVUFSVHhfTENSIE1hc2tzCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgV0xTKHgpCQkoKCh4KS01KSAmIDB4MDMpCS8qIFdvcmQgTGVuZ3RoIFNlbGVjdCAqLwotI2RlZmluZSBTVEIJCQkweDA0CQkJCS8qIFN0b3AgQml0cwkJCSovCi0jZGVmaW5lIFBFTgkJCTB4MDgJCQkJLyogUGFyaXR5IEVuYWJsZQkJKi8KLSNkZWZpbmUgRVBTCQkJMHgxMAkJCQkvKiBFdmVuIFBhcml0eSBTZWxlY3QJKi8KLSNkZWZpbmUgU1RQCQkJMHgyMAkJCQkvKiBTdGljayBQYXJpdHkJCQkqLwotI2RlZmluZSBTQgkJCTB4NDAJCQkJLyogU2V0IEJyZWFrCQkJKi8KLSNkZWZpbmUgRExBQgkJMHg4MAkJCQkvKiBEaXZpc29yIExhdGNoIEFjY2VzcwkqLwotCi0vKiBVQVJUeF9NQ1IgTWFzawkJCQkJCQkJCQkqLwotI2RlZmluZSBMT09QX0VOQQkweDEwCS8qIExvb3BiYWNrIE1vZGUgRW5hYmxlICovCi0jZGVmaW5lIExPT1BfRU5BX1AJMHgwNAotCi0vKiBVQVJUeF9MU1IgTWFza3MJCQkJCQkJCQkJKi8KLSNkZWZpbmUgRFIJCQkweDAxCS8qIERhdGEgUmVhZHkJCQkJKi8KLSNkZWZpbmUgT0UJCQkweDAyCS8qIE92ZXJydW4gRXJyb3IJCQkqLwotI2RlZmluZSBQRQkJCTB4MDQJLyogUGFyaXR5IEVycm9yCQkJCSovCi0jZGVmaW5lIEZFCQkJMHgwOAkvKiBGcmFtaW5nIEVycm9yCQkJKi8KLSNkZWZpbmUgQkkJCQkweDEwCS8qIEJyZWFrIEludGVycnVwdAkJCSovCi0jZGVmaW5lIFRIUkUJCTB4MjAJLyogVEhSIEVtcHR5CQkJCSovCi0jZGVmaW5lIFRFTVQJCTB4NDAJLyogVFNSIGFuZCBVQVJUX1RIUiBFbXB0eQkqLwotCi0vKiBVQVJUeF9JRVIgTWFza3MJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBFUkJGSQkJMHgwMQkJLyogRW5hYmxlIFJlY2VpdmUgQnVmZmVyIEZ1bGwgSW50ZXJydXB0CQkqLwotI2RlZmluZSBFVEJFSQkJMHgwMgkJLyogRW5hYmxlIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eSBJbnRlcnJ1cHQJKi8KLSNkZWZpbmUgRUxTSQkJMHgwNAkJLyogRW5hYmxlIFJYIFN0YXR1cyBJbnRlcnJ1cHQJCQkJKi8KLQotLyogVUFSVHhfSUlSIE1hc2tzCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBOSU5UCQkweDAxCQkvKiBQZW5kaW5nIEludGVycnVwdAkJCQkJKi8KLSNkZWZpbmUgSUlSX1RYX1JFQURZICAgIDB4MDIJCS8qIFVBUlRfVEhSIGVtcHR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIElJUl9SWF9SRUFEWSAgICAweDA0CQkvKiBSZWNlaXZlIGRhdGEgcmVhZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBJSVJfTElORV9DSEFOR0UgMHgwNgkJLyogUmVjZWl2ZSBsaW5lIHN0YXR1cyAgICAJCQkqLwotI2RlZmluZSBJSVJfU1RBVFVTCTB4MDYJCS8qIEhpZ2hlc3QgUHJpb3JpdHkgUGVuZGluZyBJbnRlcnJ1cHQJKi8KLQotLyogVUFSVHhfR0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBVQ0VOCQkweDAxCQkvKiBFbmFibGUgVUFSVHggQ2xvY2tzCQkJCSovCi0jZGVmaW5lIElSRU4JCTB4MDIJCS8qIEVuYWJsZSBJckRBIE1vZGUJCQkJCSovCi0jZGVmaW5lIFRQT0xDCQkweDA0CQkvKiBJckRBIFRYIFBvbGFyaXR5IENoYW5nZQkJCSovCi0jZGVmaW5lIFJQT0xDCQkweDA4CQkvKiBJckRBIFJYIFBvbGFyaXR5IENoYW5nZQkJCSovCi0jZGVmaW5lIEZQRQkJCTB4MTAJCS8qIEZvcmNlIFBhcml0eSBFcnJvciBPbiBUcmFuc21pdAkqLwotI2RlZmluZSBGRkUJCQkweDIwCQkvKiBGb3JjZSBGcmFtaW5nIEVycm9yIE9uIFRyYW5zbWl0CSovCi0KLQotLyogICoqKioqKioqKioqKioqKiogIEdFTkVSQUwgUFVSUE9TRSBUSU1FUiBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFRJTUVSX0VOQUJMRSBNYXNrcwkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBUSU1FTjAJCQkweDAwMDEJCS8qIEVuYWJsZSBUaW1lciAwCQkJCQkqLwotI2RlZmluZSBUSU1FTjEJCQkweDAwMDIJCS8qIEVuYWJsZSBUaW1lciAxCQkJCQkqLwotI2RlZmluZSBUSU1FTjIJCQkweDAwMDQJCS8qIEVuYWJsZSBUaW1lciAyCQkJCQkqLwotI2RlZmluZSBUSU1FTjMJCQkweDAwMDgJCS8qIEVuYWJsZSBUaW1lciAzCQkJCQkqLwotI2RlZmluZSBUSU1FTjQJCQkweDAwMTAJCS8qIEVuYWJsZSBUaW1lciA0CQkJCQkqLwotI2RlZmluZSBUSU1FTjUJCQkweDAwMjAJCS8qIEVuYWJsZSBUaW1lciA1CQkJCQkqLwotI2RlZmluZSBUSU1FTjYJCQkweDAwNDAJCS8qIEVuYWJsZSBUaW1lciA2CQkJCQkqLwotI2RlZmluZSBUSU1FTjcJCQkweDAwODAJCS8qIEVuYWJsZSBUaW1lciA3CQkJCQkqLwotCi0vKiBUSU1FUl9ESVNBQkxFIE1hc2tzCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFRJTURJUzAJCQlUSU1FTjAJCS8qIERpc2FibGUgVGltZXIgMAkJCQkJKi8KLSNkZWZpbmUgVElNRElTMQkJCVRJTUVOMQkJLyogRGlzYWJsZSBUaW1lciAxCQkJCQkqLwotI2RlZmluZSBUSU1ESVMyCQkJVElNRU4yCQkvKiBEaXNhYmxlIFRpbWVyIDIJCQkJCSovCi0jZGVmaW5lIFRJTURJUzMJCQlUSU1FTjMJCS8qIERpc2FibGUgVGltZXIgMwkJCQkJKi8KLSNkZWZpbmUgVElNRElTNAkJCVRJTUVONAkJLyogRGlzYWJsZSBUaW1lciA0CQkJCQkqLwotI2RlZmluZSBUSU1ESVM1CQkJVElNRU41CQkvKiBEaXNhYmxlIFRpbWVyIDUJCQkJCSovCi0jZGVmaW5lIFRJTURJUzYJCQlUSU1FTjYJCS8qIERpc2FibGUgVGltZXIgNgkJCQkJKi8KLSNkZWZpbmUgVElNRElTNwkJCVRJTUVONwkJLyogRGlzYWJsZSBUaW1lciA3CQkJCQkqLwotCi0vKiBUSU1FUl9TVEFUVVMgTWFza3MJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgVElNSUwwCQkJMHgwMDAwMDAwMQkvKiBUaW1lciAwIEludGVycnVwdAkJCQkqLwotI2RlZmluZSBUSU1JTDEJCQkweDAwMDAwMDAyCS8qIFRpbWVyIDEgSW50ZXJydXB0CQkJCSovCi0jZGVmaW5lIFRJTUlMMgkJCTB4MDAwMDAwMDQJLyogVGltZXIgMiBJbnRlcnJ1cHQJCQkJKi8KLSNkZWZpbmUgVElNSUwzCQkJMHgwMDAwMDAwOAkvKiBUaW1lciAzIEludGVycnVwdAkJCQkqLwotI2RlZmluZSBUT1ZGX0VSUjAJCTB4MDAwMDAwMTAJLyogVGltZXIgMCBDb3VudGVyIE92ZXJmbG93CQkJKi8KLSNkZWZpbmUgVE9WRl9FUlIxCQkweDAwMDAwMDIwCS8qIFRpbWVyIDEgQ291bnRlciBPdmVyZmxvdwkJCSovCi0jZGVmaW5lIFRPVkZfRVJSMgkJMHgwMDAwMDA0MAkvKiBUaW1lciAyIENvdW50ZXIgT3ZlcmZsb3cJCQkqLwotI2RlZmluZSBUT1ZGX0VSUjMJCTB4MDAwMDAwODAJLyogVGltZXIgMyBDb3VudGVyIE92ZXJmbG93CQkJKi8KLSNkZWZpbmUgVFJVTjAJCQkweDAwMDAxMDAwCS8qIFRpbWVyIDAgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLSNkZWZpbmUgVFJVTjEJCQkweDAwMDAyMDAwCS8qIFRpbWVyIDEgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLSNkZWZpbmUgVFJVTjIJCQkweDAwMDA0MDAwCS8qIFRpbWVyIDIgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLSNkZWZpbmUgVFJVTjMJCQkweDAwMDA4MDAwCS8qIFRpbWVyIDMgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLSNkZWZpbmUgVElNSUw0CQkJMHgwMDAxMDAwMAkvKiBUaW1lciA0IEludGVycnVwdAkJCQkqLwotI2RlZmluZSBUSU1JTDUJCQkweDAwMDIwMDAwCS8qIFRpbWVyIDUgSW50ZXJydXB0CQkJCSovCi0jZGVmaW5lIFRJTUlMNgkJCTB4MDAwNDAwMDAJLyogVGltZXIgNiBJbnRlcnJ1cHQJCQkJKi8KLSNkZWZpbmUgVElNSUw3CQkJMHgwMDA4MDAwMAkvKiBUaW1lciA3IEludGVycnVwdAkJCQkqLwotI2RlZmluZSBUT1ZGX0VSUjQJCTB4MDAxMDAwMDAJLyogVGltZXIgNCBDb3VudGVyIE92ZXJmbG93CQkJKi8KLSNkZWZpbmUgVE9WRl9FUlI1CQkweDAwMjAwMDAwCS8qIFRpbWVyIDUgQ291bnRlciBPdmVyZmxvdwkJCSovCi0jZGVmaW5lIFRPVkZfRVJSNgkJMHgwMDQwMDAwMAkvKiBUaW1lciA2IENvdW50ZXIgT3ZlcmZsb3cJCQkqLwotI2RlZmluZSBUT1ZGX0VSUjcJCTB4MDA4MDAwMDAJLyogVGltZXIgNyBDb3VudGVyIE92ZXJmbG93CQkJKi8KLSNkZWZpbmUgVFJVTjQJCQkweDEwMDAwMDAwCS8qIFRpbWVyIDQgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLSNkZWZpbmUgVFJVTjUJCQkweDIwMDAwMDAwCS8qIFRpbWVyIDUgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLSNkZWZpbmUgVFJVTjYJCQkweDQwMDAwMDAwCS8qIFRpbWVyIDYgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLSNkZWZpbmUgVFJVTjcJCQkweDgwMDAwMDAwCS8qIFRpbWVyIDcgU2xhdmUgRW5hYmxlIFN0YXR1cwkJKi8KLQotLyogQWx0ZXJuYXRlIERlcHJlY2F0ZWQgTWFjcm9zIFByb3ZpZGVkIEZvciBCYWNrd2FyZHMgQ29kZSBDb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lIFRPVkxfRVJSMCBUT1ZGX0VSUjAKLSNkZWZpbmUgVE9WTF9FUlIxIFRPVkZfRVJSMQotI2RlZmluZSBUT1ZMX0VSUjIgVE9WRl9FUlIyCi0jZGVmaW5lIFRPVkxfRVJSMyBUT1ZGX0VSUjMKLSNkZWZpbmUgVE9WTF9FUlI0IFRPVkZfRVJSNAotI2RlZmluZSBUT1ZMX0VSUjUgVE9WRl9FUlI1Ci0jZGVmaW5lIFRPVkxfRVJSNiBUT1ZGX0VSUjYKLSNkZWZpbmUgVE9WTF9FUlI3IFRPVkZfRVJSNwotCi0vKiBUSU1FUnhfQ09ORklHIE1hc2tzCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFBXTV9PVVQJCQkweDAwMDEJLyogUHVsc2UtV2lkdGggTW9kdWxhdGlvbiBPdXRwdXQgTW9kZQkqLwotI2RlZmluZSBXRFRIX0NBUAkJMHgwMDAyCS8qIFdpZHRoIENhcHR1cmUgSW5wdXQgTW9kZQkJCQkqLwotI2RlZmluZSBFWFRfQ0xLCQkJMHgwMDAzCS8qIEV4dGVybmFsIENsb2NrIE1vZGUJCQkJCSovCi0jZGVmaW5lIFBVTFNFX0hJCQkweDAwMDQJLyogQWN0aW9uIFB1bHNlIChQb3NpdGl2ZS9OZWdhdGl2ZSopCSovCi0jZGVmaW5lIFBFUklPRF9DTlQJCTB4MDAwOAkvKiBQZXJpb2QgQ291bnQJCQkJCQkJKi8KLSNkZWZpbmUgSVJRX0VOQQkJCTB4MDAxMAkvKiBJbnRlcnJ1cHQgUmVxdWVzdCBFbmFibGUJCQkJKi8KLSNkZWZpbmUgVElOX1NFTAkJCTB4MDAyMAkvKiBUaW1lciBJbnB1dCBTZWxlY3QJCQkJCSovCi0jZGVmaW5lIE9VVF9ESVMJCQkweDAwNDAJLyogT3V0cHV0IFBhZCBEaXNhYmxlCQkJCQkqLwotI2RlZmluZSBDTEtfU0VMCQkJMHgwMDgwCS8qIFRpbWVyIENsb2NrIFNlbGVjdAkJCQkJKi8KLSNkZWZpbmUgVE9HR0xFX0hJCQkweDAxMDAJLyogUFdNX09VVCBQVUxTRV9ISSBUb2dnbGUgTW9kZQkJCSovCi0jZGVmaW5lIEVNVV9SVU4JCQkweDAyMDAJLyogRW11bGF0aW9uIEJlaGF2aW9yIFNlbGVjdAkJCSovCi0jZGVmaW5lIEVSUl9UWVAJCQkweEMwMDAJLyogRXJyb3IgVHlwZQkJCQkJCQkqLwotCi0KLS8qICoqKioqKioqKioqKioqKioqKiAgIEdQSU8gUE9SVFMgRiwgRywgSCBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgR2VuZXJhbCBQdXJwb3NlIElPICgweEZGQzAwNzAwIC0gMHhGRkMwMDdGRikgIE1hc2tzIAkJCQkqLwotLyogUG9ydCBGIE1hc2tzIAkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUEYwCQkweDAwMDEKLSNkZWZpbmUgUEYxCQkweDAwMDIKLSNkZWZpbmUgUEYyCQkweDAwMDQKLSNkZWZpbmUgUEYzCQkweDAwMDgKLSNkZWZpbmUgUEY0CQkweDAwMTAKLSNkZWZpbmUgUEY1CQkweDAwMjAKLSNkZWZpbmUgUEY2CQkweDAwNDAKLSNkZWZpbmUgUEY3CQkweDAwODAKLSNkZWZpbmUgUEY4CQkweDAxMDAKLSNkZWZpbmUgUEY5CQkweDAyMDAKLSNkZWZpbmUgUEYxMAkweDA0MDAKLSNkZWZpbmUgUEYxMQkweDA4MDAKLSNkZWZpbmUgUEYxMgkweDEwMDAKLSNkZWZpbmUgUEYxMwkweDIwMDAKLSNkZWZpbmUgUEYxNAkweDQwMDAKLSNkZWZpbmUgUEYxNQkweDgwMDAKLQotLyogUG9ydCBHIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUEcwCQkweDAwMDEKLSNkZWZpbmUgUEcxCQkweDAwMDIKLSNkZWZpbmUgUEcyCQkweDAwMDQKLSNkZWZpbmUgUEczCQkweDAwMDgKLSNkZWZpbmUgUEc0CQkweDAwMTAKLSNkZWZpbmUgUEc1CQkweDAwMjAKLSNkZWZpbmUgUEc2CQkweDAwNDAKLSNkZWZpbmUgUEc3CQkweDAwODAKLSNkZWZpbmUgUEc4CQkweDAxMDAKLSNkZWZpbmUgUEc5CQkweDAyMDAKLSNkZWZpbmUgUEcxMAkweDA0MDAKLSNkZWZpbmUgUEcxMQkweDA4MDAKLSNkZWZpbmUgUEcxMgkweDEwMDAKLSNkZWZpbmUgUEcxMwkweDIwMDAKLSNkZWZpbmUgUEcxNAkweDQwMDAKLSNkZWZpbmUgUEcxNQkweDgwMDAKLQotLyogUG9ydCBIIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUEgwCQkweDAwMDEKLSNkZWZpbmUgUEgxCQkweDAwMDIKLSNkZWZpbmUgUEgyCQkweDAwMDQKLSNkZWZpbmUgUEgzCQkweDAwMDgKLSNkZWZpbmUgUEg0CQkweDAwMTAKLSNkZWZpbmUgUEg1CQkweDAwMjAKLSNkZWZpbmUgUEg2CQkweDAwNDAKLSNkZWZpbmUgUEg3CQkweDAwODAKLSNkZWZpbmUgUEg4CQkweDAxMDAKLSNkZWZpbmUgUEg5CQkweDAyMDAKLSNkZWZpbmUgUEgxMAkweDA0MDAKLSNkZWZpbmUgUEgxMQkweDA4MDAKLSNkZWZpbmUgUEgxMgkweDEwMDAKLSNkZWZpbmUgUEgxMwkweDIwMDAKLSNkZWZpbmUgUEgxNAkweDQwMDAKLSNkZWZpbmUgUEgxNQkweDgwMDAKLQotLyogKioqKioqKioqKioqKioqKioqKioqICBBU1lOQ0hST05PVVMgTUVNT1JZIENPTlRST0xMRVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBFQklVX0FNR0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgQU1DS0VOCQkJMHgwMDAxCQkvKiBFbmFibGUgQ0xLT1VUCQkJCQkJCQkJKi8KLSNkZWZpbmUJQU1CRU5fTk9ORQkJMHgwMDAwCQkvKiBBbGwgQmFua3MgRGlzYWJsZWQJCQkJCQkJCSovCi0jZGVmaW5lIEFNQkVOX0IwCQkweDAwMDIJCS8qIEVuYWJsZSBBc3luYyBNZW1vcnkgQmFuayAwIG9ubHkJCQkJCSovCi0jZGVmaW5lIEFNQkVOX0IwX0IxCQkweDAwMDQJCS8qIEVuYWJsZSBBc3luYyBNZW1vcnkgQmFua3MgMCAmIDEgb25seQkJCQkqLwotI2RlZmluZSBBTUJFTl9CMF9CMV9CMgkweDAwMDYJCS8qIEVuYWJsZSBBc3luYyBNZW1vcnkgQmFua3MgMCwgMSwgYW5kIDIJCQkqLwotI2RlZmluZSBBTUJFTl9BTEwJCTB4MDAwOAkJLyogRW5hYmxlIEFzeW5jIE1lbW9yeSBCYW5rcyAoYWxsKSAwLCAxLCAyLCBhbmQgMwkqLwotCi0vKiBFQklVX0FNQkNUTDAgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIEIwUkRZRU4JCQkweDAwMDAwMDAxICAvKiBCYW5rIDAgKEIwKSBSRFkgRW5hYmxlCQkJCQkJCSovCi0jZGVmaW5lIEIwUkRZUE9MCQkweDAwMDAwMDAyICAvKiBCMCBSRFkgQWN0aXZlIEhpZ2gJCQkJCQkJCSovCi0jZGVmaW5lIEIwVFRfMQkJCTB4MDAwMDAwMDQgIC8qIEIwIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAxIGN5Y2xlCQkqLwotI2RlZmluZSBCMFRUXzIJCQkweDAwMDAwMDA4ICAvKiBCMCBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMiBjeWNsZXMJKi8KLSNkZWZpbmUgQjBUVF8zCQkJMHgwMDAwMDAwQyAgLyogQjAgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDMgY3ljbGVzCSovCi0jZGVmaW5lIEIwVFRfNAkJCTB4MDAwMDAwMDAgIC8qIEIwIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSA0IGN5Y2xlcwkqLwotI2RlZmluZSBCMFNUXzEJCQkweDAwMDAwMDEwICAvKiBCMCBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAxIGN5Y2xlCQkqLwotI2RlZmluZSBCMFNUXzIJCQkweDAwMDAwMDIwICAvKiBCMCBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAyIGN5Y2xlcwkJKi8KLSNkZWZpbmUgQjBTVF8zCQkJMHgwMDAwMDAzMCAgLyogQjAgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMyBjeWNsZXMJCSovCi0jZGVmaW5lIEIwU1RfNAkJCTB4MDAwMDAwMDAgIC8qIEIwIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDQgY3ljbGVzCQkqLwotI2RlZmluZSBCMEhUXzEJCQkweDAwMDAwMDQwICAvKiBCMCBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMSBjeWNsZQkJKi8KLSNkZWZpbmUgQjBIVF8yCQkJMHgwMDAwMDA4MCAgLyogQjAgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDIgY3ljbGVzCSovCi0jZGVmaW5lIEIwSFRfMwkJCTB4MDAwMDAwQzAgIC8qIEIwIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAzIGN5Y2xlcwkqLwotI2RlZmluZSBCMEhUXzAJCQkweDAwMDAwMDAwICAvKiBCMCBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMCBjeWNsZXMJKi8KLSNkZWZpbmUgQjBSQVRfMQkJCTB4MDAwMDAxMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlCQkJCQkqLwotI2RlZmluZSBCMFJBVF8yCQkJMHgwMDAwMDIwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF8zCQkJMHgwMDAwMDMwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF80CQkJMHgwMDAwMDQwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF81CQkJMHgwMDAwMDUwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF82CQkJMHgwMDAwMDYwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF83CQkJMHgwMDAwMDcwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF84CQkJMHgwMDAwMDgwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDggY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF85CQkJMHgwMDAwMDkwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF8xMAkJMHgwMDAwMEEwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjBSQVRfMTEJCTB4MDAwMDBCMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIwUkFUXzEyCQkweDAwMDAwQzAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFJBVF8xMwkJMHgwMDAwMEQwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjBSQVRfMTQJCTB4MDAwMDBFMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIwUkFUXzE1CQkweDAwMDAwRjAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFdBVF8xCQkJMHgwMDAwMTAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlCQkJCQkqLwotI2RlZmluZSBCMFdBVF8yCQkJMHgwMDAwMjAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjBXQVRfMwkJCTB4MDAwMDMwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIwV0FUXzQJCQkweDAwMDA0MDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFdBVF81CQkJMHgwMDAwNTAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjBXQVRfNgkJCTB4MDAwMDYwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIwV0FUXzcJCQkweDAwMDA3MDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFdBVF84CQkJMHgwMDAwODAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjBXQVRfOQkJCTB4MDAwMDkwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIwV0FUXzEwCQkweDAwMDBBMDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjBXQVRfMTEJCTB4MDAwMEIwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFdBVF8xMgkJMHgwMDAwQzAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIwV0FUXzEzCQkweDAwMDBEMDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjBXQVRfMTQJCTB4MDAwMEUwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMFdBVF8xNQkJMHgwMDAwRjAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMJCQkJCSovCi0KLSNkZWZpbmUgQjFSRFlFTgkJCTB4MDAwMTAwMDAgIC8qIEJhbmsgMSAoQjEpIFJEWSBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgIAkqLwotI2RlZmluZSBCMVJEWVBPTAkJMHgwMDAyMDAwMCAgLyogQjEgUkRZIEFjdGl2ZSBIaWdoICAgICAgICAgICAgICAgICAgICAgICAgICAgCSovCi0jZGVmaW5lIEIxVFRfMQkJCTB4MDAwNDAwMDAgIC8qIEIxIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAxIGN5Y2xlIAkqLwotI2RlZmluZSBCMVRUXzIJCQkweDAwMDgwMDAwICAvKiBCMSBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMiBjeWNsZXMJKi8KLSNkZWZpbmUgQjFUVF8zCQkJMHgwMDBDMDAwMCAgLyogQjEgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDMgY3ljbGVzCSovCi0jZGVmaW5lIEIxVFRfNAkJCTB4MDAwMDAwMDAgIC8qIEIxIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSA0IGN5Y2xlcwkqLwotI2RlZmluZSBCMVNUXzEJCQkweDAwMTAwMDAwICAvKiBCMSBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAxIGN5Y2xlICAJKi8KLSNkZWZpbmUgQjFTVF8yCQkJMHgwMDIwMDAwMCAgLyogQjEgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMiBjeWNsZXMgCSovCi0jZGVmaW5lIEIxU1RfMwkJCTB4MDAzMDAwMDAgIC8qIEIxIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDMgY3ljbGVzIAkqLwotI2RlZmluZSBCMVNUXzQJCQkweDAwMDAwMDAwICAvKiBCMSBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSA0IGN5Y2xlcyAJKi8KLSNkZWZpbmUgQjFIVF8xCQkJMHgwMDQwMDAwMCAgLyogQjEgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDEgY3ljbGUgCSovCi0jZGVmaW5lIEIxSFRfMgkJCTB4MDA4MDAwMDAgIC8qIEIxIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAyIGN5Y2xlcwkqLwotI2RlZmluZSBCMUhUXzMJCQkweDAwQzAwMDAwICAvKiBCMSBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMyBjeWNsZXMJKi8KLSNkZWZpbmUgQjFIVF8wCQkJMHgwMDAwMDAwMCAgLyogQjEgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDAgY3ljbGVzCSovCi0jZGVmaW5lIEIxUkFUXzEJCQkweDAxMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMSBjeWNsZQkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfMgkJCTB4MDIwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfMwkJCTB4MDMwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfNAkJCTB4MDQwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfNQkJCTB4MDUwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfNgkJCTB4MDYwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfNwkJCTB4MDcwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfOAkJCTB4MDgwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfOQkJCTB4MDkwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfMTAJCTB4MEEwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIxUkFUXzExCQkweDBCMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMVJBVF8xMgkJMHgwQzAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFSQVRfMTMJCTB4MEQwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIxUkFUXzE0CQkweDBFMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMVJBVF8xNQkJMHgwRjAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFXQVRfMQkJCTB4MTAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMSBjeWNsZQkJCQkJKi8KLSNkZWZpbmUgQjFXQVRfMgkJCTB4MjAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIxV0FUXzMJCQkweDMwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMVdBVF80CQkJMHg0MDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFXQVRfNQkJCTB4NTAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIxV0FUXzYJCQkweDYwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMVdBVF83CQkJMHg3MDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFXQVRfOAkJCTB4ODAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIxV0FUXzkJCQkweDkwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMVdBVF8xMAkJMHhBMDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIxV0FUXzExCQkweEIwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFXQVRfMTIJCTB4QzAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMVdBVF8xMwkJMHhEMDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIxV0FUXzE0CQkweEUwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjFXQVRfMTUJCTB4RjAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzCQkJCQkqLwotCi0vKiBFQklVX0FNQkNUTDEgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIEIyUkRZRU4JCQkweDAwMDAwMDAxICAvKiBCYW5rIDIgKEIyKSBSRFkgRW5hYmxlCQkJCQkJCSovCi0jZGVmaW5lIEIyUkRZUE9MCQkweDAwMDAwMDAyICAvKiBCMiBSRFkgQWN0aXZlIEhpZ2gJCQkJCQkJCSovCi0jZGVmaW5lIEIyVFRfMQkJCTB4MDAwMDAwMDQgIC8qIEIyIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAxIGN5Y2xlCQkqLwotI2RlZmluZSBCMlRUXzIJCQkweDAwMDAwMDA4ICAvKiBCMiBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMiBjeWNsZXMJKi8KLSNkZWZpbmUgQjJUVF8zCQkJMHgwMDAwMDAwQyAgLyogQjIgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDMgY3ljbGVzCSovCi0jZGVmaW5lIEIyVFRfNAkJCTB4MDAwMDAwMDAgIC8qIEIyIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSA0IGN5Y2xlcwkqLwotI2RlZmluZSBCMlNUXzEJCQkweDAwMDAwMDEwICAvKiBCMiBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAxIGN5Y2xlCQkqLwotI2RlZmluZSBCMlNUXzIJCQkweDAwMDAwMDIwICAvKiBCMiBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAyIGN5Y2xlcwkJKi8KLSNkZWZpbmUgQjJTVF8zCQkJMHgwMDAwMDAzMCAgLyogQjIgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMyBjeWNsZXMJCSovCi0jZGVmaW5lIEIyU1RfNAkJCTB4MDAwMDAwMDAgIC8qIEIyIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDQgY3ljbGVzCQkqLwotI2RlZmluZSBCMkhUXzEJCQkweDAwMDAwMDQwICAvKiBCMiBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMSBjeWNsZQkJKi8KLSNkZWZpbmUgQjJIVF8yCQkJMHgwMDAwMDA4MCAgLyogQjIgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDIgY3ljbGVzCSovCi0jZGVmaW5lIEIySFRfMwkJCTB4MDAwMDAwQzAgIC8qIEIyIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAzIGN5Y2xlcwkqLwotI2RlZmluZSBCMkhUXzAJCQkweDAwMDAwMDAwICAvKiBCMiBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMCBjeWNsZXMJKi8KLSNkZWZpbmUgQjJSQVRfMQkJCTB4MDAwMDAxMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlCQkJCQkqLwotI2RlZmluZSBCMlJBVF8yCQkJMHgwMDAwMDIwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF8zCQkJMHgwMDAwMDMwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF80CQkJMHgwMDAwMDQwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF81CQkJMHgwMDAwMDUwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF82CQkJMHgwMDAwMDYwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF83CQkJMHgwMDAwMDcwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF84CQkJMHgwMDAwMDgwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDggY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF85CQkJMHgwMDAwMDkwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF8xMAkJMHgwMDAwMEEwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjJSQVRfMTEJCTB4MDAwMDBCMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIyUkFUXzEyCQkweDAwMDAwQzAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMlJBVF8xMwkJMHgwMDAwMEQwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjJSQVRfMTQJCTB4MDAwMDBFMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIyUkFUXzE1CQkweDAwMDAwRjAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMldBVF8xCQkJMHgwMDAwMTAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlCQkJCQkqLwotI2RlZmluZSBCMldBVF8yCQkJMHgwMDAwMjAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjJXQVRfMwkJCTB4MDAwMDMwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIyV0FUXzQJCQkweDAwMDA0MDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMldBVF81CQkJMHgwMDAwNTAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjJXQVRfNgkJCTB4MDAwMDYwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIyV0FUXzcJCQkweDAwMDA3MDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMldBVF84CQkJMHgwMDAwODAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjJXQVRfOQkJCTB4MDAwMDkwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIyV0FUXzEwCQkweDAwMDBBMDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjJXQVRfMTEJCTB4MDAwMEIwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMldBVF8xMgkJMHgwMDAwQzAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIyV0FUXzEzCQkweDAwMDBEMDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjJXQVRfMTQJCTB4MDAwMEUwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCMldBVF8xNQkJMHgwMDAwRjAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMJCQkJCSovCi0KLSNkZWZpbmUgQjNSRFlFTgkJCTB4MDAwMTAwMDAgIC8qIEJhbmsgMyAoQjMpIFJEWSBFbmFibGUJCQkJCQkJKi8KLSNkZWZpbmUgQjNSRFlQT0wJCTB4MDAwMjAwMDAgIC8qIEIzIFJEWSBBY3RpdmUgSGlnaAkJCQkJCQkJKi8KLSNkZWZpbmUgQjNUVF8xCQkJMHgwMDA0MDAwMCAgLyogQjMgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDEgY3ljbGUJCSovCi0jZGVmaW5lIEIzVFRfMgkJCTB4MDAwODAwMDAgIC8qIEIzIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAyIGN5Y2xlcwkqLwotI2RlZmluZSBCM1RUXzMJCQkweDAwMEMwMDAwICAvKiBCMyBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMyBjeWNsZXMJKi8KLSNkZWZpbmUgQjNUVF80CQkJMHgwMDAwMDAwMCAgLyogQjMgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDQgY3ljbGVzCSovCi0jZGVmaW5lIEIzU1RfMQkJCTB4MDAxMDAwMDAgIC8qIEIzIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDEgY3ljbGUJCSovCi0jZGVmaW5lIEIzU1RfMgkJCTB4MDAyMDAwMDAgIC8qIEIzIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDIgY3ljbGVzCQkqLwotI2RlZmluZSBCM1NUXzMJCQkweDAwMzAwMDAwICAvKiBCMyBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAzIGN5Y2xlcwkJKi8KLSNkZWZpbmUgQjNTVF80CQkJMHgwMDAwMDAwMCAgLyogQjMgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gNCBjeWNsZXMJCSovCi0jZGVmaW5lIEIzSFRfMQkJCTB4MDA0MDAwMDAgIC8qIEIzIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAxIGN5Y2xlCQkqLwotI2RlZmluZSBCM0hUXzIJCQkweDAwODAwMDAwICAvKiBCMyBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMiBjeWNsZXMJKi8KLSNkZWZpbmUgQjNIVF8zCQkJMHgwMEMwMDAwMCAgLyogQjMgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDMgY3ljbGVzCSovCi0jZGVmaW5lIEIzSFRfMAkJCTB4MDAwMDAwMDAgIC8qIEIzIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAwIGN5Y2xlcwkqLwotI2RlZmluZSBCM1JBVF8xCQkJMHgwMTAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDEgY3ljbGUJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzIJCQkweDAyMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzMJCQkweDAzMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzQJCQkweDA0MDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzUJCQkweDA1MDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzYJCQkweDA2MDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzcJCQkweDA3MDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzgJCQkweDA4MDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzkJCQkweDA5MDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzEwCQkweDBBMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCM1JBVF8xMQkJMHgwQjAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjNSQVRfMTIJCTB4MEMwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzUkFUXzEzCQkweDBEMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCM1JBVF8xNAkJMHgwRTAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjNSQVRfMTUJCTB4MEYwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzV0FUXzEJCQkweDEwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDEgY3ljbGUJCQkJCSovCi0jZGVmaW5lIEIzV0FUXzIJCQkweDIwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCM1dBVF8zCQkJMHgzMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjNXQVRfNAkJCTB4NDAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzV0FUXzUJCQkweDUwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCM1dBVF82CQkJMHg2MDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjNXQVRfNwkJCTB4NzAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzV0FUXzgJCQkweDgwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDggY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCM1dBVF85CQkJMHg5MDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjNXQVRfMTAJCTB4QTAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCM1dBVF8xMQkJMHhCMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzV0FUXzEyCQkweEMwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcwkJCQkJKi8KLSNkZWZpbmUgQjNXQVRfMTMJCTB4RDAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzCQkJCQkqLwotI2RlZmluZSBCM1dBVF8xNAkJMHhFMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMJCQkJCSovCi0jZGVmaW5lIEIzV0FUXzE1CQkweEYwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcwkJCQkJKi8KLQotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqICBTRFJBTSBDT05UUk9MTEVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRUJJVV9TREdDVEwgTWFza3MJCQkJCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgU0NUTEUJCQkweDAwMDAwMDAxCS8qIEVuYWJsZSBTRFJBTSBTaWduYWxzCQkJCQkJCQkJCSovCi0jZGVmaW5lIENMXzIJCQkweDAwMDAwMDA4CS8qIFNEUkFNIENBUyBMYXRlbmN5ID0gMiBjeWNsZXMJCQkJCQkJCSovCi0jZGVmaW5lIENMXzMJCQkweDAwMDAwMDBDCS8qIFNEUkFNIENBUyBMYXRlbmN5ID0gMyBjeWNsZXMJCQkJCQkJCSovCi0jZGVmaW5lIFBBU1JfQUxMCQkweDAwMDAwMDAwCS8qIEFsbCA0IFNEUkFNIEJhbmtzIFJlZnJlc2hlZCBJbiBTZWxmLVJlZnJlc2gJCQkJKi8KLSNkZWZpbmUgUEFTUl9CMF9CMQkJMHgwMDAwMDAxMAkvKiBTRFJBTSBCYW5rcyAwIGFuZCAxIEFyZSBSZWZyZXNoZWQgSW4gU2VsZi1SZWZyZXNoCQkqLwotI2RlZmluZSBQQVNSX0IwCQkJMHgwMDAwMDAyMAkvKiBPbmx5IFNEUkFNIEJhbmsgMCBJcyBSZWZyZXNoZWQgSW4gU2VsZi1SZWZyZXNoCQkJKi8KLSNkZWZpbmUgVFJBU18xCQkJMHgwMDAwMDA0MAkvKiBTRFJBTSB0UkFTID0gMSBjeWNsZQkJCQkJCQkJCQkqLwotI2RlZmluZSBUUkFTXzIJCQkweDAwMDAwMDgwCS8qIFNEUkFNIHRSQVMgPSAyIGN5Y2xlcwkJCQkJCQkJCSovCi0jZGVmaW5lIFRSQVNfMwkJCTB4MDAwMDAwQzAJLyogU0RSQU0gdFJBUyA9IDMgY3ljbGVzCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJBU180CQkJMHgwMDAwMDEwMAkvKiBTRFJBTSB0UkFTID0gNCBjeWNsZXMJCQkJCQkJCQkqLwotI2RlZmluZSBUUkFTXzUJCQkweDAwMDAwMTQwCS8qIFNEUkFNIHRSQVMgPSA1IGN5Y2xlcwkJCQkJCQkJCSovCi0jZGVmaW5lIFRSQVNfNgkJCTB4MDAwMDAxODAJLyogU0RSQU0gdFJBUyA9IDYgY3ljbGVzCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJBU183CQkJMHgwMDAwMDFDMAkvKiBTRFJBTSB0UkFTID0gNyBjeWNsZXMJCQkJCQkJCQkqLwotI2RlZmluZSBUUkFTXzgJCQkweDAwMDAwMjAwCS8qIFNEUkFNIHRSQVMgPSA4IGN5Y2xlcwkJCQkJCQkJCSovCi0jZGVmaW5lIFRSQVNfOQkJCTB4MDAwMDAyNDAJLyogU0RSQU0gdFJBUyA9IDkgY3ljbGVzCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJBU18xMAkJCTB4MDAwMDAyODAJLyogU0RSQU0gdFJBUyA9IDEwIGN5Y2xlcwkJCQkJCQkJCSovCi0jZGVmaW5lIFRSQVNfMTEJCQkweDAwMDAwMkMwCS8qIFNEUkFNIHRSQVMgPSAxMSBjeWNsZXMJCQkJCQkJCQkqLwotI2RlZmluZSBUUkFTXzEyCQkJMHgwMDAwMDMwMAkvKiBTRFJBTSB0UkFTID0gMTIgY3ljbGVzCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJBU18xMwkJCTB4MDAwMDAzNDAJLyogU0RSQU0gdFJBUyA9IDEzIGN5Y2xlcwkJCQkJCQkJCSovCi0jZGVmaW5lIFRSQVNfMTQJCQkweDAwMDAwMzgwCS8qIFNEUkFNIHRSQVMgPSAxNCBjeWNsZXMJCQkJCQkJCQkqLwotI2RlZmluZSBUUkFTXzE1CQkJMHgwMDAwMDNDMAkvKiBTRFJBTSB0UkFTID0gMTUgY3ljbGVzCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJQXzEJCQkweDAwMDAwODAwCS8qIFNEUkFNIHRSUCA9IDEgY3ljbGUJCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJQXzIJCQkweDAwMDAxMDAwCS8qIFNEUkFNIHRSUCA9IDIgY3ljbGVzCQkJCQkJCQkJCSovCi0jZGVmaW5lIFRSUF8zCQkJMHgwMDAwMTgwMAkvKiBTRFJBTSB0UlAgPSAzIGN5Y2xlcwkJCQkJCQkJCQkqLwotI2RlZmluZSBUUlBfNAkJCTB4MDAwMDIwMDAJLyogU0RSQU0gdFJQID0gNCBjeWNsZXMJCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJQXzUJCQkweDAwMDAyODAwCS8qIFNEUkFNIHRSUCA9IDUgY3ljbGVzCQkJCQkJCQkJCSovCi0jZGVmaW5lIFRSUF82CQkJMHgwMDAwMzAwMAkvKiBTRFJBTSB0UlAgPSA2IGN5Y2xlcwkJCQkJCQkJCQkqLwotI2RlZmluZSBUUlBfNwkJCTB4MDAwMDM4MDAJLyogU0RSQU0gdFJQID0gNyBjeWNsZXMJCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJDRF8xCQkJMHgwMDAwODAwMAkvKiBTRFJBTSB0UkNEID0gMSBjeWNsZQkJCQkJCQkJCQkqLwotI2RlZmluZSBUUkNEXzIJCQkweDAwMDEwMDAwCS8qIFNEUkFNIHRSQ0QgPSAyIGN5Y2xlcwkJCQkJCQkJCSovCi0jZGVmaW5lIFRSQ0RfMwkJCTB4MDAwMTgwMDAJLyogU0RSQU0gdFJDRCA9IDMgY3ljbGVzCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJDRF80CQkJMHgwMDAyMDAwMAkvKiBTRFJBTSB0UkNEID0gNCBjeWNsZXMJCQkJCQkJCQkqLwotI2RlZmluZSBUUkNEXzUJCQkweDAwMDI4MDAwCS8qIFNEUkFNIHRSQ0QgPSA1IGN5Y2xlcwkJCQkJCQkJCSovCi0jZGVmaW5lIFRSQ0RfNgkJCTB4MDAwMzAwMDAJLyogU0RSQU0gdFJDRCA9IDYgY3ljbGVzCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFJDRF83CQkJMHgwMDAzODAwMAkvKiBTRFJBTSB0UkNEID0gNyBjeWNsZXMJCQkJCQkJCQkqLwotI2RlZmluZSBUV1JfMQkJCTB4MDAwODAwMDAJLyogU0RSQU0gdFdSID0gMSBjeWNsZQkJCQkJCQkJCQkqLwotI2RlZmluZSBUV1JfMgkJCTB4MDAxMDAwMDAJLyogU0RSQU0gdFdSID0gMiBjeWNsZXMJCQkJCQkJCQkJKi8KLSNkZWZpbmUgVFdSXzMJCQkweDAwMTgwMDAwCS8qIFNEUkFNIHRXUiA9IDMgY3ljbGVzCQkJCQkJCQkJCSovCi0jZGVmaW5lIFBVUFNECQkJMHgwMDIwMDAwMAkvKiBQb3dlci1VcCBTdGFydCBEZWxheSAoMTUgU0NMSyBDeWNsZXMgRGVsYXkpCQkJCSovCi0jZGVmaW5lIFBTTQkJCQkweDAwNDAwMDAwCS8qIFBvd2VyLVVwIFNlcXVlbmNlIChNb2RlIFJlZ2lzdGVyIEJlZm9yZS9BZnRlciogUmVmcmVzaCkJKi8KLSNkZWZpbmUgUFNTCQkJCTB4MDA4MDAwMDAJLyogRW5hYmxlIFBvd2VyLVVwIFNlcXVlbmNlIG9uIE5leHQgU0RSQU0gQWNjZXNzCQkJKi8KLSNkZWZpbmUgU1JGUwkJCTB4MDEwMDAwMDAJLyogRW5hYmxlIFNEUkFNIFNlbGYtUmVmcmVzaCBNb2RlCQkJCQkJCSovCi0jZGVmaW5lIEVCVUZFCQkJMHgwMjAwMDAwMAkvKiBFbmFibGUgRXh0ZXJuYWwgQnVmZmVyaW5nIFRpbWluZwkJCQkJCQkqLwotI2RlZmluZSBGQkJSVwkJCTB4MDQwMDAwMDAJLyogRW5hYmxlIEZhc3QgQmFjay1Uby1CYWNrIFJlYWQgVG8gV3JpdGUJCQkJCSovCi0jZGVmaW5lIEVNUkVOCQkJMHgxMDAwMDAwMAkvKiBFeHRlbmRlZCBNb2RlIFJlZ2lzdGVyIEVuYWJsZQkJCQkJCQkqLwotI2RlZmluZSBUQ1NSCQkJMHgyMDAwMDAwMAkvKiBUZW1wLUNvbXBlbnNhdGVkIFNlbGYtUmVmcmVzaCBWYWx1ZSAoODUvNDUqIERlZyBDKQkJKi8KLSNkZWZpbmUgQ0REQkcJCQkweDQwMDAwMDAwCS8qIFRyaXN0YXRlIFNEUkFNIENvbnRyb2xzIER1cmluZyBCdXMgR3JhbnQJCQkJCSovCi0KLS8qIEVCSVVfU0RCQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgRUJFCQkJCTB4MDAwMQkJLyogRW5hYmxlIFNEUkFNIEV4dGVybmFsIEJhbmsJCQkJCQkJKi8KLSNkZWZpbmUgRUJTWl8xNgkJCTB4MDAwMAkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBTaXplID0gMTZNQgkqLwotI2RlZmluZSBFQlNaXzMyCQkJMHgwMDAyCQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIFNpemUgPSAzMk1CCSovCi0jZGVmaW5lIEVCU1pfNjQJCQkweDAwMDQJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgU2l6ZSA9IDY0TUIJKi8KLSNkZWZpbmUgRUJTWl8xMjgJCTB4MDAwNgkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBTaXplID0gMTI4TUIJCSovCi0jZGVmaW5lIEVCU1pfMjU2CQkweDAwMDgJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgU2l6ZSA9IDI1Nk1CIAkqLwotI2RlZmluZSBFQlNaXzUxMgkJMHgwMDBBCQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIFNpemUgPSA1MTJNQgkJKi8KLSNkZWZpbmUgRUJDQVdfOAkJCTB4MDAwMAkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBDb2x1bW4gQWRkcmVzcyBXaWR0aCA9IDggQml0cwkqLwotI2RlZmluZSBFQkNBV185CQkJMHgwMDEwCQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIENvbHVtbiBBZGRyZXNzIFdpZHRoID0gOSBCaXRzCSovCi0jZGVmaW5lIEVCQ0FXXzEwCQkweDAwMjAJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgQ29sdW1uIEFkZHJlc3MgV2lkdGggPSAxMCBCaXRzCSovCi0jZGVmaW5lIEVCQ0FXXzExCQkweDAwMzAJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgQ29sdW1uIEFkZHJlc3MgV2lkdGggPSAxMSBCaXRzCSovCi0KLS8qIEVCSVVfU0RTVEFUIE1hc2tzCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBTRENJCQkJMHgwMDAxCQkvKiBTRFJBTSBDb250cm9sbGVyIElkbGUgCQkJCSovCi0jZGVmaW5lIFNEU1JBCQkJMHgwMDAyCQkvKiBTRFJBTSBTZWxmLVJlZnJlc2ggQWN0aXZlCQkJKi8KLSNkZWZpbmUgU0RQVUEJCQkweDAwMDQJCS8qIFNEUkFNIFBvd2VyLVVwIEFjdGl2ZSAJCQkJKi8KLSNkZWZpbmUgU0RSUwkJCTB4MDAwOAkJLyogU0RSQU0gV2lsbCBQb3dlci1VcCBPbiBOZXh0IEFjY2VzcwkqLwotI2RlZmluZSBTREVBU0UJCQkweDAwMTAJCS8qIFNEUkFNIEVBQiBTdGlja3kgRXJyb3IgU3RhdHVzCQkqLwotI2RlZmluZSBCR1NUQVQJCQkweDAwMjAJCS8qIEJ1cyBHcmFudCBTdGF0dXMJCQkJCQkqLwotCi0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqICBETUEgQ09OVFJPTExFUiBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIERNQXhfUEVSSVBIRVJBTF9NQVAsIE1ETUFfeXlfUEVSSVBIRVJBTF9NQVAgTWFza3MJCQkJCQkJCSovCi0jZGVmaW5lIENUWVBFCQkJMHgwMDQwCS8qIERNQSBDaGFubmVsIFR5cGUgSW5kaWNhdG9yIChNZW1vcnkvUGVyaXBoZXJhbCopCSovCi0jZGVmaW5lIFBNQVAJCQkweEYwMDAJLyogUGVyaXBoZXJhbCBNYXBwZWQgVG8gVGhpcyBDaGFubmVsCQkJCSovCi0jZGVmaW5lIFBNQVBfUFBJCQkweDAwMDAJLyogCQlQUEkgUG9ydCBETUEJCQkJCQkJCSovCi0jZGVmaW5lCVBNQVBfRU1BQ1JYCQkweDEwMDAJLyogCQlFdGhlcm5ldCBSZWNlaXZlIERNQQkJCQkJCSovCi0jZGVmaW5lIFBNQVBfRU1BQ1RYCQkweDIwMDAJLyogCQlFdGhlcm5ldCBUcmFuc21pdCBETUEJCQkJCQkqLwotI2RlZmluZSBQTUFQX1NQT1JUMFJYCTB4MzAwMAkvKiAJCVNQT1JUMCBSZWNlaXZlIERNQQkJCQkJCQkqLwotI2RlZmluZSBQTUFQX1NQT1JUMFRYCTB4NDAwMAkvKiAJCVNQT1JUMCBUcmFuc21pdCBETUEJCQkJCQkJKi8KLSNkZWZpbmUgUE1BUF9TUE9SVDFSWAkweDUwMDAJLyogCQlTUE9SVDEgUmVjZWl2ZSBETUEJCQkJCQkJKi8KLSNkZWZpbmUgUE1BUF9TUE9SVDFUWAkweDYwMDAJLyogCQlTUE9SVDEgVHJhbnNtaXQgRE1BCQkJCQkJCSovCi0jZGVmaW5lIFBNQVBfU1BJCQkweDcwMDAJLyogCQlTUEkgUG9ydCBETUEJCQkJCQkJCSovCi0jZGVmaW5lIFBNQVBfVUFSVDBSWAkweDgwMDAJLyogCQlVQVJUMCBQb3J0IFJlY2VpdmUgRE1BCQkJCQkJKi8KLSNkZWZpbmUgUE1BUF9VQVJUMFRYCTB4OTAwMAkvKiAJCVVBUlQwIFBvcnQgVHJhbnNtaXQgRE1BCQkJCQkJKi8KLSNkZWZpbmUJUE1BUF9VQVJUMVJYCTB4QTAwMAkvKiAJCVVBUlQxIFBvcnQgUmVjZWl2ZSBETUEJCQkJCQkqLwotI2RlZmluZQlQTUFQX1VBUlQxVFgJMHhCMDAwCS8qIAkJVUFSVDEgUG9ydCBUcmFuc21pdCBETUEJCQkJCQkqLwotCi0vKiAgKioqKioqKioqKioqICBQQVJBTExFTCBQRVJJUEhFUkFMIElOVEVSRkFDRSAoUFBJKSBNQVNLUyAqKioqKioqKioqKioqLwotLyogIFBQSV9DT05UUk9MIE1hc2tzCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFBPUlRfRU4JCQkweDAwMDEJCS8qIFBQSSBQb3J0IEVuYWJsZQkJCQkJKi8KLSNkZWZpbmUgUE9SVF9ESVIJCTB4MDAwMgkJLyogUFBJIFBvcnQgRGlyZWN0aW9uCQkJCSovCi0jZGVmaW5lIFhGUl9UWVBFCQkweDAwMEMJCS8qIFBQSSBUcmFuc2ZlciBUeXBlCQkJCSovCi0jZGVmaW5lIFBPUlRfQ0ZHCQkweDAwMzAJCS8qIFBQSSBQb3J0IENvbmZpZ3VyYXRpb24JCQkqLwotI2RlZmluZSBGTERfU0VMCQkJMHgwMDQwCQkvKiBQUEkgQWN0aXZlIEZpZWxkIFNlbGVjdAkJCSovCi0jZGVmaW5lIFBBQ0tfRU4JCQkweDAwODAJCS8qIFBQSSBQYWNraW5nIE1vZGUJCQkJCSovCi0jZGVmaW5lIERNQTMyCQkJMHgwMTAwCQkvKiBQUEkgMzItYml0IERNQSBFbmFibGUJCQkqLwotI2RlZmluZSBTS0lQX0VOCQkJMHgwMjAwCQkvKiBQUEkgU2tpcCBFbGVtZW50IEVuYWJsZQkJCSovCi0jZGVmaW5lIFNLSVBfRU8JCQkweDA0MDAJCS8qIFBQSSBTa2lwIEV2ZW4vT2RkIEVsZW1lbnRzCQkqLwotI2RlZmluZSBETEVOXzgJCQkweDAwMDAJCS8qIERhdGEgTGVuZ3RoID0gOCBCaXRzCQkJCSovCi0jZGVmaW5lIERMRU5fMTAJCQkweDA4MDAJCS8qIERhdGEgTGVuZ3RoID0gMTAgQml0cwkJCSovCi0jZGVmaW5lIERMRU5fMTEJCQkweDEwMDAJCS8qIERhdGEgTGVuZ3RoID0gMTEgQml0cwkJCSovCi0jZGVmaW5lIERMRU5fMTIJCQkweDE4MDAJCS8qIERhdGEgTGVuZ3RoID0gMTIgQml0cwkJCSovCi0jZGVmaW5lIERMRU5fMTMJCQkweDIwMDAJCS8qIERhdGEgTGVuZ3RoID0gMTMgQml0cwkJCSovCi0jZGVmaW5lIERMRU5fMTQJCQkweDI4MDAJCS8qIERhdGEgTGVuZ3RoID0gMTQgQml0cwkJCSovCi0jZGVmaW5lIERMRU5fMTUJCQkweDMwMDAJCS8qIERhdGEgTGVuZ3RoID0gMTUgQml0cwkJCSovCi0jZGVmaW5lIERMRU5fMTYJCQkweDM4MDAJCS8qIERhdGEgTGVuZ3RoID0gMTYgQml0cwkJCSovCi0jZGVmaW5lIERMRU5HVEgJCQkweDM4MDAJCS8qIFBQSSBEYXRhIExlbmd0aCAgKi8KLSNkZWZpbmUgUE9MQwkJCTB4NDAwMAkJLyogUFBJIENsb2NrIFBvbGFyaXR5CQkJCSovCi0jZGVmaW5lIFBPTFMJCQkweDgwMDAJCS8qIFBQSSBGcmFtZSBTeW5jIFBvbGFyaXR5CQkJKi8KLQotLyogUFBJX1NUQVRVUyBNYXNrcwkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgRkxECQkJCTB4MDQwMAkJLyogRmllbGQgSW5kaWNhdG9yCQkJCQkqLwotI2RlZmluZSBGVF9FUlIJCQkweDA4MDAJCS8qIEZyYW1lIFRyYWNrIEVycm9yCQkJCSovCi0jZGVmaW5lIE9WUgkJCQkweDEwMDAJCS8qIEZJRk8gT3ZlcmZsb3cgRXJyb3IJCQkJKi8KLSNkZWZpbmUgVU5EUgkJCTB4MjAwMAkJLyogRklGTyBVbmRlcnJ1biBFcnJvcgkJCQkqLwotI2RlZmluZSBFUlJfREVUCQkJMHg0MDAwCQkvKiBFcnJvciBEZXRlY3RlZCBJbmRpY2F0b3IJCQkqLwotI2RlZmluZSBFUlJfTkNPUgkJMHg4MDAwCQkvKiBFcnJvciBOb3QgQ29ycmVjdGVkIEluZGljYXRvcgkqLwotCi0KLS8qICAqKioqKioqKioqKioqKioqKioqKiAgVFdPLVdJUkUgSU5URVJGQUNFIChUV0kpIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFRXSV9DTEtESVYgTWFjcm9zIChVc2U6ICpwVFdJX0NMS0RJViA9IENMS0xPVyh4KXxDTEtISSh5KTsgICkJCQkJKi8KLSNkZWZpbmUJQ0xLTE9XKHgpCSgoeCkgJiAweEZGKQkJLyogUGVyaW9kcyBDbG9jayBJcyBIZWxkIExvdwkJCSovCi0jZGVmaW5lIENMS0hJKHkpCSgoKHkpJjB4RkYpPDwweDgpCS8qIFBlcmlvZHMgQmVmb3JlIE5ldyBDbG9jayBMb3cJCQkqLwotCi0vKiBUV0lfUFJFU0NBTEUgTWFza3MJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZQlQUkVTQ0FMRQkweDAwN0YJCS8qIFNDTEtzIFBlciBJbnRlcm5hbCBUaW1lIFJlZmVyZW5jZSAoMTBNSHopCSovCi0jZGVmaW5lCVRXSV9FTkEJCTB4MDA4MAkJLyogVFdJIEVuYWJsZQkJCQkJCQkJCSovCi0jZGVmaW5lCVNDQ0IJCTB4MDIwMAkJLyogU0NDQiBDb21wYXRpYmlsaXR5IEVuYWJsZQkJCQkJKi8KLQotLyogVFdJX1NMQVZFX0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lCVNFTgkJCTB4MDAwMQkJLyogU2xhdmUgRW5hYmxlCQkJCQkJCQkJKi8KLSNkZWZpbmUJU0FERF9MRU4JMHgwMDAyCQkvKiBTbGF2ZSBBZGRyZXNzIExlbmd0aAkJCQkJCQkqLwotI2RlZmluZQlTVERWQUwJCTB4MDAwNAkJLyogU2xhdmUgVHJhbnNtaXQgRGF0YSBWYWxpZAkJCQkJKi8KLSNkZWZpbmUJTkFLCQkJMHgwMDA4CQkvKiBOQUsvQUNLKiBHZW5lcmF0ZWQgQXQgQ29uY2x1c2lvbiBPZiBUcmFuc2ZlciAqLwotI2RlZmluZQlHRU4JCQkweDAwMTAJCS8qIEdlbmVyYWwgQ2FsbCBBZHJyZXNzIE1hdGNoaW5nIEVuYWJsZWQJCSovCi0KLS8qIFRXSV9TTEFWRV9TVEFUIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUJU0RJUgkJMHgwMDAxCQkvKiBTbGF2ZSBUcmFuc2ZlciBEaXJlY3Rpb24gKFRyYW5zbWl0L1JlY2VpdmUqKQkqLwotI2RlZmluZSBHQ0FMTAkJMHgwMDAyCQkvKiBHZW5lcmFsIENhbGwgSW5kaWNhdG9yCQkJCQkJKi8KLQotLyogVFdJX01BU1RFUl9DVEwgTWFza3MJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUJTUVOCQkJMHgwMDAxCQkvKiBNYXN0ZXIgTW9kZSBFbmFibGUJCQkJCQkqLwotI2RlZmluZQlNQUREX0xFTgkweDAwMDIJCS8qIE1hc3RlciBBZGRyZXNzIExlbmd0aAkJCQkJKi8KLSNkZWZpbmUJTURJUgkJMHgwMDA0CQkvKiBNYXN0ZXIgVHJhbnNtaXQgRGlyZWN0aW9uIChSWC9UWCopCQkqLwotI2RlZmluZQlGQVNUCQkweDAwMDgJCS8qIFVzZSBGYXN0IE1vZGUgVGltaW5nIFNwZWNzCQkJCSovCi0jZGVmaW5lCVNUT1AJCTB4MDAxMAkJLyogSXNzdWUgU3RvcCBDb25kaXRpb24JCQkJCQkqLwotI2RlZmluZQlSU1RBUlQJCTB4MDAyMAkJLyogUmVwZWF0IFN0YXJ0IG9yIFN0b3AqIEF0IEVuZCBPZiBUcmFuc2ZlcgkqLwotI2RlZmluZQlEQ05UCQkweDNGQzAJCS8qIERhdGEgQnl0ZXMgVG8gVHJhbnNmZXIJCQkJCSovCi0jZGVmaW5lCVNEQU9WUgkJMHg0MDAwCQkvKiBTZXJpYWwgRGF0YSBPdmVycmlkZQkJCQkJCSovCi0jZGVmaW5lCVNDTE9WUgkJMHg4MDAwCQkvKiBTZXJpYWwgQ2xvY2sgT3ZlcnJpZGUJCQkJCSovCi0KLS8qIFRXSV9NQVNURVJfU1RBVCBNYXNrcwkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUJTVBST0cJCTB4MDAwMQkJLyogTWFzdGVyIFRyYW5zZmVyIEluIFByb2dyZXNzCQkJCQkqLwotI2RlZmluZQlMT1NUQVJCCQkweDAwMDIJCS8qIExvc3QgQXJiaXRyYXRpb24gSW5kaWNhdG9yIChYZmVyIEFib3J0ZWQpCSovCi0jZGVmaW5lCUFOQUsJCTB4MDAwNAkJLyogQWRkcmVzcyBOb3QgQWNrbm93bGVkZ2VkCQkJCQkJKi8KLSNkZWZpbmUJRE5BSwkJMHgwMDA4CQkvKiBEYXRhIE5vdCBBY2tub3dsZWRnZWQJCQkJCQkqLwotI2RlZmluZQlCVUZSREVSUgkweDAwMTAJCS8qIEJ1ZmZlciBSZWFkIEVycm9yCQkJCQkJCSovCi0jZGVmaW5lCUJVRldSRVJSCTB4MDAyMAkJLyogQnVmZmVyIFdyaXRlIEVycm9yCQkJCQkJCSovCi0jZGVmaW5lCVNEQVNFTgkJMHgwMDQwCQkvKiBTZXJpYWwgRGF0YSBTZW5zZQkJCQkJCQkqLwotI2RlZmluZQlTQ0xTRU4JCTB4MDA4MAkJLyogU2VyaWFsIENsb2NrIFNlbnNlCQkJCQkJCSovCi0jZGVmaW5lCUJVU0JVU1kJCTB4MDEwMAkJLyogQnVzIEJ1c3kgSW5kaWNhdG9yCQkJCQkJCSovCi0KLS8qIFRXSV9JTlRfU1JDIGFuZCBUV0lfSU5UX0VOQUJMRSBNYXNrcwkJCQkJCSovCi0jZGVmaW5lCVNJTklUCQkweDAwMDEJCS8qIFNsYXZlIFRyYW5zZmVyIEluaXRpYXRlZAkqLwotI2RlZmluZQlTQ09NUAkJMHgwMDAyCQkvKiBTbGF2ZSBUcmFuc2ZlciBDb21wbGV0ZQkqLwotI2RlZmluZQlTRVJSCQkweDAwMDQJCS8qIFNsYXZlIFRyYW5zZmVyIEVycm9yCQkqLwotI2RlZmluZQlTT1ZGCQkweDAwMDgJCS8qIFNsYXZlIE92ZXJmbG93CQkJKi8KLSNkZWZpbmUJTUNPTVAJCTB4MDAxMAkJLyogTWFzdGVyIFRyYW5zZmVyIENvbXBsZXRlCSovCi0jZGVmaW5lCU1FUlIJCTB4MDAyMAkJLyogTWFzdGVyIFRyYW5zZmVyIEVycm9yCSovCi0jZGVmaW5lCVhNVFNFUlYJCTB4MDA0MAkJLyogVHJhbnNtaXQgRklGTyBTZXJ2aWNlCSovCi0jZGVmaW5lCVJDVlNFUlYJCTB4MDA4MAkJLyogUmVjZWl2ZSBGSUZPIFNlcnZpY2UJCSovCi0KLS8qIFRXSV9GSUZPX0NUUkwgTWFza3MJCQkJCQkJCQkJCQkqLwotI2RlZmluZQlYTVRGTFVTSAkweDAwMDEJCS8qIFRyYW5zbWl0IEJ1ZmZlciBGbHVzaAkJCSovCi0jZGVmaW5lCVJDVkZMVVNICTB4MDAwMgkJLyogUmVjZWl2ZSBCdWZmZXIgRmx1c2gJCQkJKi8KLSNkZWZpbmUJWE1USU5UTEVOCTB4MDAwNAkJLyogVHJhbnNtaXQgQnVmZmVyIEludGVycnVwdCBMZW5ndGgJKi8KLSNkZWZpbmUJUkNWSU5UTEVOCTB4MDAwOAkJLyogUmVjZWl2ZSBCdWZmZXIgSW50ZXJydXB0IExlbmd0aAkqLwotCi0vKiBUV0lfRklGT19TVEFUIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUJWE1UU1RBVAkJMHgwMDAzCQkvKiBUcmFuc21pdCBGSUZPIFN0YXR1cwkJCQkJCQkqLwotI2RlZmluZQlYTVRfRU1QVFkJMHgwMDAwCQkvKiAJCVRyYW5zbWl0IEZJRk8gRW1wdHkJCQkJCQkqLwotI2RlZmluZQlYTVRfSEFMRgkweDAwMDEJCS8qIAkJVHJhbnNtaXQgRklGTyBIYXMgMSBCeXRlIFRvIFdyaXRlCQkqLwotI2RlZmluZQlYTVRfRlVMTAkweDAwMDMJCS8qIAkJVHJhbnNtaXQgRklGTyBGdWxsICgyIEJ5dGVzIFRvIFdyaXRlKQkqLwotCi0jZGVmaW5lCVJDVlNUQVQJCTB4MDAwQwkJLyogUmVjZWl2ZSBGSUZPIFN0YXR1cwkJCQkJCQkqLwotI2RlZmluZQlSQ1ZfRU1QVFkJMHgwMDAwCQkvKiAJCVJlY2VpdmUgRklGTyBFbXB0eQkJCQkJCSovCi0jZGVmaW5lCVJDVl9IQUxGCTB4MDAwNAkJLyogCQlSZWNlaXZlIEZJRk8gSGFzIDEgQnl0ZSBUbyBSZWFkCQkJKi8KLSNkZWZpbmUJUkNWX0ZVTEwJMHgwMDBDCQkvKiAJCVJlY2VpdmUgRklGTyBGdWxsICgyIEJ5dGVzIFRvIFJlYWQpCQkqLwotCi0KLS8qIE9taXQgQ0FOIG1hc2tzIGZyb20gZGVmQkY1MzQuaCAqLwotCi0vKiAgKioqKioqKioqKioqKioqKioqKiAgUElOIENPTlRST0wgUkVHSVNURVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFBPUlRfTVVYIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUJUEpTRQkJCTB4MDAwMQkJCS8qIFBvcnQgSiBTUEkvU1BPUlQgRW5hYmxlCQkJKi8KLSNkZWZpbmUJUEpTRV9TUE9SVAkJMHgwMDAwCQkJLyogCQlFbmFibGUgVEZTMC9EVDBQUkkJCQkqLwotI2RlZmluZQlQSlNFX1NQSQkJMHgwMDAxCQkJLyogCQlFbmFibGUgU1BJX1NTRUwzOjIJCQkqLwotCi0jZGVmaW5lCVBKQ0UoeCkJCQkoKCh4KSYweDMpPDwxKQkvKiBQb3J0IEogQ0FOL1NQSS9TUE9SVCBFbmFibGUJCSovCi0jZGVmaW5lCVBKQ0VfU1BPUlQJCTB4MDAwMAkJCS8qIAkJRW5hYmxlIERSMFNFQy9EVDBTRUMJCSovCi0jZGVmaW5lCVBKQ0VfQ0FOCQkweDAwMDIJCQkvKiAJCUVuYWJsZSBDQU4gUlgvVFgJCQkqLwotI2RlZmluZQlQSkNFX1NQSQkJMHgwMDA0CQkJLyogCQlFbmFibGUgU1BJX1NTRUw3CQkJKi8KLQotI2RlZmluZQlQRkRFCQkJMHgwMDA4CQkJLyogUG9ydCBGIERNQSBSZXF1ZXN0IEVuYWJsZQkJKi8KLSNkZWZpbmUJUEZERV9VQVJUCQkweDAwMDAJCQkvKiAJCUVuYWJsZSBVQVJUMCBSWC9UWAkJCSovCi0jZGVmaW5lCVBGREVfRE1BCQkweDAwMDgJCQkvKiAJCUVuYWJsZSBETUFSMTowCQkJCSovCi0KLSNkZWZpbmUJUEZURQkJCTB4MDAxMAkJCS8qIFBvcnQgRiBUaW1lciBFbmFibGUJCQkJKi8KLSNkZWZpbmUJUEZURV9VQVJUCQkweDAwMDAJCQkvKgkJRW5hYmxlIFVBUlQxIFJYL1RYCQkJKi8KLSNkZWZpbmUJUEZURV9USU1FUgkJMHgwMDEwCQkJLyogCQlFbmFibGUgVE1SNzo2CQkJCSovCi0KLSNkZWZpbmUJUEZTNkUJCQkweDAwMjAJCQkvKiBQb3J0IEYgU1BJIFNTRUwgNiBFbmFibGUJCQkqLwotI2RlZmluZQlQRlM2RV9USU1FUgkJMHgwMDAwCQkJLyoJCUVuYWJsZSBUTVI1CQkJCQkqLwotI2RlZmluZQlQRlM2RV9TUEkJCTB4MDAyMAkJCS8qIAkJRW5hYmxlIFNQSV9TU0VMNgkJCSovCi0KLSNkZWZpbmUJUEZTNUUJCQkweDAwNDAJCQkvKiBQb3J0IEYgU1BJIFNTRUwgNSBFbmFibGUJCQkqLwotI2RlZmluZQlQRlM1RV9USU1FUgkJMHgwMDAwCQkJLyoJCUVuYWJsZSBUTVI0CQkJCQkqLwotI2RlZmluZQlQRlM1RV9TUEkJCTB4MDA0MAkJCS8qIAkJRW5hYmxlIFNQSV9TU0VMNQkJCSovCi0KLSNkZWZpbmUJUEZTNEUJCQkweDAwODAJCQkvKiBQb3J0IEYgU1BJIFNTRUwgNCBFbmFibGUJCQkqLwotI2RlZmluZQlQRlM0RV9USU1FUgkJMHgwMDAwCQkJLyoJCUVuYWJsZSBUTVIzCQkJCQkqLwotI2RlZmluZQlQRlM0RV9TUEkJCTB4MDA4MAkJCS8qIAkJRW5hYmxlIFNQSV9TU0VMNAkJCSovCi0KLSNkZWZpbmUJUEZGRQkJCTB4MDEwMAkJCS8qIFBvcnQgRiBQUEkgRnJhbWUgU3luYyBFbmFibGUJCSovCi0jZGVmaW5lCVBGRkVfVElNRVIJCTB4MDAwMAkJCS8qIAkJRW5hYmxlIFRNUjIJCQkJCSovCi0jZGVmaW5lCVBGRkVfUFBJCQkweDAxMDAJCQkvKiAJCUVuYWJsZSBQUEkgRlMzCQkJCSovCi0KLSNkZWZpbmUJUEdTRQkJCTB4MDIwMAkJCS8qIFBvcnQgRyBTUE9SVDEgU2Vjb25kYXJ5IEVuYWJsZQkqLwotI2RlZmluZQlQR1NFX1BQSQkJMHgwMDAwCQkJLyogCQlFbmFibGUgUFBJIEQ5OjgJCQkJKi8KLSNkZWZpbmUJUEdTRV9TUE9SVAkJMHgwMjAwCQkJLyogCQlFbmFibGUgRFIxU0VDL0RUMVNFQwkJKi8KLQotI2RlZmluZQlQR1JFCQkJMHgwNDAwCQkJLyogUG9ydCBHIFNQT1JUMSBSZWNlaXZlIEVuYWJsZQkJKi8KLSNkZWZpbmUJUEdSRV9QUEkJCTB4MDAwMAkJCS8qIAkJRW5hYmxlIFBQSSBEMTI6MTAJCQkqLwotI2RlZmluZQlQR1JFX1NQT1JUCQkweDA0MDAJCQkvKiAJCUVuYWJsZSBEUjFQUkkvUkZTMS9SU0NMSzEJKi8KLQotI2RlZmluZQlQR1RFCQkJMHgwODAwCQkJLyogUG9ydCBHIFNQT1JUMSBUcmFuc21pdCBFbmFibGUJKi8KLSNkZWZpbmUJUEdURV9QUEkJCTB4MDAwMAkJCS8qIAkJRW5hYmxlIFBQSSBEMTU6MTMJCQkqLwotI2RlZmluZQlQR1RFX1NQT1JUCQkweDA4MDAJCQkvKiAJCUVuYWJsZSBEVDFQUkkvVEZTMS9UU0NMSzEJKi8KLQotCi0vKiAgKioqKioqKioqKioqKioqKioqICBIQU5EU0hBS0UgRE1BIChIRE1BKSBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqLwotLyogSERNQXhfQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZQlITURNQUVOCQkweDAwMDEJLyogRW5hYmxlIEhhbmRzaGFrZSBETUEgMC8xCQkJCQkqLwotI2RlZmluZQlSRVAJCQkweDAwMDIJLyogSERNQSBSZXF1ZXN0IFBvbGFyaXR5CQkJCQkqLwotI2RlZmluZQlVVEUJCQkweDAwMDQJLyogVXJnZW5jeSBUaHJlc2hvbGQgRW5hYmxlCQkJCQkqLwotI2RlZmluZQlPSUUJCQkweDAwMTAJLyogT3ZlcmZsb3cgSW50ZXJydXB0IEVuYWJsZQkJCQkqLwotI2RlZmluZQlCRElFCQkweDAwMjAJLyogQmxvY2sgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlCQkJCSovCi0jZGVmaW5lCU1CREkJCTB4MDA0MAkvKiBNYXNrIEJsb2NrIERvbmUgSVJRIElmIFBlbmRpbmcgRUNOVAkJKi8KLSNkZWZpbmUJRFJRCQkJMHgwMzAwCS8qIEhETUEgUmVxdWVzdCBUeXBlCQkJCQkJKi8KLSNkZWZpbmUJRFJRX05PTkUJMHgwMDAwCS8qIAkJTm8gUmVxdWVzdAkJCQkJCQkqLwotI2RlZmluZQlEUlFfU0lOR0xFCTB4MDEwMAkvKiAJCUNoYW5uZWxzIFJlcXVlc3QgU2luZ2xlCQkJCSovCi0jZGVmaW5lCURSUV9NVUxUSQkweDAyMDAJLyogCQlDaGFubmVscyBSZXF1ZXN0IE11bHRpIChEZWZhdWx0KQkqLwotI2RlZmluZQlEUlFfVVJHRU5UCTB4MDMwMAkvKiAJCUNoYW5uZWxzIFJlcXVlc3QgTXVsdGkgVXJnZW50CQkqLwotI2RlZmluZQlSQkMJCQkweDEwMDAJLyogUmVsb2FkIEJDTlQgV2l0aCBJQkNOVAkJCQkJKi8KLSNkZWZpbmUJUFMJCQkweDIwMDAJLyogSERNQSBQaW4gU3RhdHVzCQkJCQkJCSovCi0jZGVmaW5lCU9JCQkJMHg0MDAwCS8qIE92ZXJmbG93IEludGVycnVwdCBHZW5lcmF0ZWQJCQkJKi8KLSNkZWZpbmUJQkRJCQkJMHg4MDAwCS8qIEJsb2NrIERvbmUgSW50ZXJydXB0IEdlbmVyYXRlZAkJCSovCi0KLS8qIGVudHJ5IGFkZHJlc3NlcyBvZiB0aGUgdXNlci1jYWxsYWJsZSBCb290IFJPTSBmdW5jdGlvbnMgKi8KLQotI2RlZmluZSBfQk9PVFJPTV9SRVNFVCAweEVGMDAwMDAwCi0jZGVmaW5lIF9CT09UUk9NX0ZJTkFMX0lOSVQgMHhFRjAwMDAwMgotI2RlZmluZSBfQk9PVFJPTV9ET19NRU1PUllfRE1BIDB4RUYwMDAwMDYKLSNkZWZpbmUgX0JPT1RST01fQk9PVF9EWEVfRkxBU0ggMHhFRjAwMDAwOAotI2RlZmluZSBfQk9PVFJPTV9CT09UX0RYRV9TUEkgMHhFRjAwMDAwQQotI2RlZmluZSBfQk9PVFJPTV9CT09UX0RYRV9UV0kgMHhFRjAwMDAwQwotI2RlZmluZSBfQk9PVFJPTV9HRVRfRFhFX0FERFJFU1NfRkxBU0ggMHhFRjAwMDAxMAotI2RlZmluZSBfQk9PVFJPTV9HRVRfRFhFX0FERFJFU1NfU1BJIDB4RUYwMDAwMTIKLSNkZWZpbmUgX0JPT1RST01fR0VUX0RYRV9BRERSRVNTX1RXSSAweEVGMDAwMDE0Ci0KLS8qIEFsdGVybmF0ZSBEZXByZWNhdGVkIE1hY3JvcyBQcm92aWRlZCBGb3IgQmFja3dhcmRzIENvZGUgQ29tcGF0aWJpbGl0eSAqLwotI2RlZmluZQlQR0RFX1VBUlQgICBQRkRFX1VBUlQKLSNkZWZpbmUJUEdERV9ETUEgICAgUEZERV9ETUEKLSNkZWZpbmUJQ0tFTE9XCQlTQ0tFTE9XCi0KLS8qID09PT0gZW5kIGZyb20gZGVmQkY1MzQuaCA9PT09ICovCi0KLS8qIEhPU1QgUG9ydCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ09OVFJPTCAgMHhmZmMwMzQwMCAgIC8qIEhPU1QgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRVUyAgMHhmZmMwMzQwNCAgIC8qIEhPU1QgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9TVF9USU1FT1VUICAweGZmYzAzNDA4ICAgLyogSE9TVCBBY2tub3dsZWRnZSBNb2RlIFRpbWVvdXQgUmVnaXN0ZXIgKi8KLQotLyogQ291bnRlciBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ05UX0NPTkZJRyAgMHhmZmMwMzUwMCAgIC8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDTlRfSU1BU0sgIDB4ZmZjMDM1MDQgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ05UX1NUQVRVUyAgMHhmZmMwMzUwOCAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTlRfQ09NTUFORCAgMHhmZmMwMzUwYyAgIC8qIENvbW1hbmQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDTlRfREVCT1VOQ0UgIDB4ZmZjMDM1MTAgICAvKiBEZWJvdW5jZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTlRfQ09VTlRFUiAgMHhmZmMwMzUxNCAgIC8qIENvdW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIENOVF9NQVggIDB4ZmZjMDM1MTggICAvKiBNYXhpbWFsIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBDTlRfTUlOICAweGZmYzAzNTFjICAgLyogTWluaW1hbCBDb3VudCBSZWdpc3RlciAqLwotCi0vKiBPVFAvRlVTRSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBPVFBfQ09OVFJPTCAgMHhmZmMwMzYwMCAgIC8qIE9UUC9GdXNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIE9UUF9CRU4gIDB4ZmZjMDM2MDQgICAvKiBPVFAvRnVzZSBCeXRlIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgT1RQX1NUQVRVUyAgMHhmZmMwMzYwOCAgIC8qIE9UUC9GdXNlIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgT1RQX1RJTUlORyAgMHhmZmMwMzYwYyAgIC8qIE9UUC9GdXNlIEFjY2VzcyBUaW1pbmcgKi8KLQotLyogU2VjdXJpdHkgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNFQ1VSRV9TWVNTV1QgIDB4ZmZjMDM2MjAgICAvKiBTZWN1cmUgU3lzdGVtIFN3aXRjaGVzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFQ1VSRV9DT05UUk9MICAweGZmYzAzNjI0ICAgLyogU2VjdXJlIENvbnRyb2wgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNFQ1VSRV9TVEFUVVMgIDB4ZmZjMDM2MjggICAvKiBTZWN1cmUgU3RhdHVzICovCi0KLS8qIE9UUCBSZWFkL1dyaXRlIERhdGEgQnVmZmVyIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgT1RQX0RBVEEwICAweGZmYzAzNjgwICAgLyogT1RQL0Z1c2UgRGF0YSAoT1RQX0RBVEEwLTMpIGFjY2Vzc2VzIHRoZSBmdXNlIHJlYWQgd3JpdGUgYnVmZmVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgT1RQX0RBVEExICAweGZmYzAzNjg0ICAgLyogT1RQL0Z1c2UgRGF0YSAoT1RQX0RBVEEwLTMpIGFjY2Vzc2VzIHRoZSBmdXNlIHJlYWQgd3JpdGUgYnVmZmVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgT1RQX0RBVEEyICAweGZmYzAzNjg4ICAgLyogT1RQL0Z1c2UgRGF0YSAoT1RQX0RBVEEwLTMpIGFjY2Vzc2VzIHRoZSBmdXNlIHJlYWQgd3JpdGUgYnVmZmVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgT1RQX0RBVEEzICAweGZmYzAzNjhjICAgLyogT1RQL0Z1c2UgRGF0YSAoT1RQX0RBVEEwLTMpIGFjY2Vzc2VzIHRoZSBmdXNlIHJlYWQgd3JpdGUgYnVmZmVyICovCi0KLS8qIE5GQyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX0NUTCAgMHhmZmMwMzcwMCAgIC8qIE5BTkQgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBORkNfU1RBVCAgMHhmZmMwMzcwNCAgIC8qIE5BTkQgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE5GQ19JUlFTVEFUICAweGZmYzAzNzA4ICAgLyogTkFORCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE5GQ19JUlFNQVNLICAweGZmYzAzNzBjICAgLyogTkFORCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBORkNfRUNDMCAgMHhmZmMwMzcxMCAgIC8qIE5BTkQgRUNDIFJlZ2lzdGVyIDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX0VDQzEgIDB4ZmZjMDM3MTQgICAvKiBOQU5EIEVDQyBSZWdpc3RlciAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIE5GQ19FQ0MyICAweGZmYzAzNzE4ICAgLyogTkFORCBFQ0MgUmVnaXN0ZXIgMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBORkNfRUNDMyAgMHhmZmMwMzcxYyAgIC8qIE5BTkQgRUNDIFJlZ2lzdGVyIDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBORkNfQ09VTlQgIDB4ZmZjMDM3MjAgICAvKiBOQU5EIEVDQyBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX1JTVCAgMHhmZmMwMzcyNCAgIC8qIE5BTkQgRUNDIFJlc2V0IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgTkZDX1BHQ1RMICAweGZmYzAzNzI4ICAgLyogTkFORCBQYWdlIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX1JFQUQgIDB4ZmZjMDM3MmMgICAvKiBOQU5EIFJlYWQgRGF0YSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBORkNfQUREUiAgMHhmZmMwMzc0MCAgIC8qIE5BTkQgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX0NNRCAgMHhmZmMwMzc0NCAgIC8qIE5BTkQgQ29tbWFuZCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBORkNfREFUQV9XUiAgMHhmZmMwMzc0OCAgIC8qIE5BTkQgRGF0YSBXcml0ZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBORkNfREFUQV9SRCAgMHhmZmMwMzc0YyAgIC8qIE5BTkQgRGF0YSBSZWFkIFJlZ2lzdGVyICovCi0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLS8qICAgICBTSU5HTEUgQklUIE1BQ1JPIFBBSVJTIChiaXQgbWFzayBhbmQgbmVnYXRlZCBvbmUpICAgICAgKi8KLS8qICAgICBhbmQgTVVMVEkgQklUIFJFQUQgTUFDUk9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLQotLyogQml0IG1hc2tzIGZvciBIT1NUX0NPTlRST0wgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfSE9TVF9FTiAgMHgxICAgICAgICAvKiBIb3N0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9uSE9TVF9FTiAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX0hPU1RfRU5EICAweDIgICAgICAgIC8qIEhvc3QgRW5kaWFuZXNzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfbkhPU1RfRU5EICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9EQVRBX1NJWkUgIDB4NCAgICAgICAgLyogRGF0YSBTaXplICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9uREFUQV9TSVpFICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfSE9TVF9SU1QgIDB4OCAgICAgICAgLyogSG9zdCBSZXNldCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX25IT1NUX1JTVCAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX0hSRFlfT1ZSICAweDIwICAgICAgIC8qIEhvc3QgUmVhZHkgT3ZlcnJpZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9uSFJEWV9PVlIgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9JTlRfTU9ERSAgMHg0MCAgICAgICAvKiBJbnRlcnJ1cHQgTW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX25JTlRfTU9ERSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9TVF9DTlRSX0JUX0VOICAweDgwICAgICAgIC8qIEJ1cyBUaW1lb3V0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfIG5CVF9FTiAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfRUhXICAweDEwMCAgICAgIC8qIEVuYWJsZSBIb3N0IFdyaXRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9uRUhXICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ05UUl9FSFIgIDB4MjAwICAgICAgLyogRW5hYmxlIEhvc3QgUmVhZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfbkVIUiAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfQkRSICAweDQwMCAgICAgIC8qIEJ1cnN0IERNQSBSZXF1ZXN0cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX0NOVFJfbkJEUiAgMHgwCi0KLS8qIEJpdCBtYXNrcyBmb3IgSE9TVF9TVEFUVVMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9SRUFEWSAgMHgxICAgICAgICAvKiBETUEgUmVhZHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9uUkVBRFkgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9GSUZPRlVMTCAgMHgyICAgICAgICAvKiBGSUZPIEZ1bGwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9uRklGT0ZVTEwgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX0ZJRk9FTVBUWSAgMHg0ICAgICAgICAvKiBGSUZPIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9uRklGT0VNUFRZICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfQ09NUExFVEUgIDB4OCAgICAgICAgLyogRE1BIENvbXBsZXRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfbkNPTVBMRVRFICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX0hTSEsgIDB4MTAgICAgICAgLyogSG9zdCBIYW5kc2hha2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfbkhTSEsgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfVElNRU9VVCAgMHgyMCAgICAgICAvKiBIb3N0IFRpbWVvdXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfblRJTUVPVVQgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfSElSUSAgMHg0MCAgICAgICAvKiBIb3N0IEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX25ISVJRICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgSE9TVF9TVEFUX0FMTE9XX0NORkcgIDB4ODAgICAgICAgLyogQWxsb3cgTmV3IENvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBIT1NUX1NUQVRfbkFMTE9XX0NORkcgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfRE1BX0RJUiAgMHgxMDAgICAgICAvKiBETUEgRGlyZWN0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUX25ETUFfRElSICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVF9CVEUgIDB4MjAwICAgICAgLyogQnVzIFRpbWVvdXQgRW5hYmxlZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRfbkJURSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgSE9TVF9TVEFUX0hPU1RSRF9ET05FICAweDgwMDAgICAgIC8qIEhvc3QgUmVhZCBDb21wbGV0aW9uIEludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgSE9TVF9TVEFUX25IT1NUUkRfRE9ORSAgMHgwCi0KLS8qIEJpdCBtYXNrcyBmb3IgSE9TVF9USU1FT1VUICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgSE9TVF9DT1VOVF9USU1FT1VUICAweDdmZiAgICAgIC8qIEhvc3QgVGltZW91dCBjb3VudCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNFQ1VSRV9TWVNTV1QgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBFTVVEQUJMICAweDEgICAgICAgIC8qIEVtdWxhdGlvbiBEaXNhYmxlLiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIG5FTVVEQUJMICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgUlNUREFCTCAgMHgyICAgICAgICAvKiBSZXNldCBEaXNhYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgblJTVERBQkwgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBMMUlEQUJMICAweDFjICAgICAgIC8qIEwxIEluc3RydWN0aW9uIE1lbW9yeSBEaXNhYmxlLiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEwxREFEQUJMICAweGUwICAgICAgIC8qIEwxIERhdGEgQmFuayBBIE1lbW9yeSBEaXNhYmxlLiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEwxREJEQUJMICAweDcwMCAgICAgIC8qIEwxIERhdGEgQmFuayBCIE1lbW9yeSBEaXNhYmxlLiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUEwT1ZSICAweDgwMCAgICAgIC8qIERNQTAgTWVtb3J5IEFjY2VzcyBPdmVycmlkZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ETUEwT1ZSICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BMU9WUiAgMHgxMDAwICAgICAvKiBETUExIE1lbW9yeSBBY2Nlc3MgT3ZlcnJpZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuRE1BMU9WUiAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFTVVPVlIgIDB4NDAwMCAgICAgLyogRW11bGF0aW9uIE92ZXJyaWRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FTVVPVlIgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgT1RQU0VOICAweDgwMDAgICAgIC8qIE9UUCBTZWNyZXRzIEVuYWJsZS4gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk9UUFNFTiAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBMMkRBQkwgIDB4NzAwMDAgICAgLyogTDIgTWVtb3J5IERpc2FibGUuICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0VDVVJFX0NPTlRST0wgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNVUkUwICAweDEgICAgICAgIC8qIFNFQ1VSRSAwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgblNFQ1VSRTAgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNVUkUxICAweDIgICAgICAgIC8qIFNFQ1VSRSAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgblNFQ1VSRTEgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNVUkUyICAweDQgICAgICAgIC8qIFNFQ1VSRSAyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgblNFQ1VSRTIgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNVUkUzICAweDggICAgICAgIC8qIFNFQ1VSRSAzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgblNFQ1VSRTMgIDB4MAotCi0vKiBCaXQgbWFza3MgZm9yIFNFQ1VSRV9TVEFUVVMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNNT0RFICAweDMgICAgICAgIC8qIFNlY3VyZWQgTW9kZSBDb250cm9sIFN0YXRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBOTUkgIDB4NCAgICAgICAgLyogTm9uIE1hc2thYmxlIEludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuTk1JICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQUZWQUxJRCAgMHg4ICAgICAgICAvKiBBdXRoZW50aWNhdGlvbiBGaXJtd2FyZSBWYWxpZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIG5BRlZBTElEICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEFGRVhJVCAgMHgxMCAgICAgICAvKiBBdXRoZW50aWNhdGlvbiBGaXJtd2FyZSBFeGl0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5BRkVYSVQgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNTVEFUICAweGUwICAgICAgIC8qIFNlY3VyZSBTdGF0dXMgKi8KLQotI2VuZGlmIC8qIF9ERUZfQkY1MlhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBmODBjMjk5Li5mYmE2MDZiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtNjIsNCArNjIsOCBAQAogI2RlZmluZSBQT1JUX0cgR1BJT19QRzAKICNkZWZpbmUgUE9SVF9IIEdQSU9fUEgwCiAKKyNpbmNsdWRlIDxtYWNoLWNvbW1vbi9wb3J0cy1mLmg+CisjaW5jbHVkZSA8bWFjaC1jb21tb24vcG9ydHMtZy5oPgorI2luY2x1ZGUgPG1hY2gtY29tbW9uL3BvcnRzLWguaD4KKwogI2VuZGlmIC8qIF9NQUNIX0dQSU9fSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcGxsLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL3BsbC5oCmluZGV4IDI0ZjFkN2MuLjk0Y2NhNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcGxsLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9wbGwuaApAQCAtMSw2MyArMSBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgotICovCi0KLSNpZm5kZWYgX01BQ0hfUExMX0gKLSNkZWZpbmUgX01BQ0hfUExMX0gKLQotI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgotI2luY2x1ZGUgPGFzbS9pcnFmbGFncy5oPgotCi0vKiBXcml0aW5nIHRvIFBMTF9DVEwgaW5pdGlhdGVzIGEgUExMIHJlbG9jayBzZXF1ZW5jZS4gKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYmZpbl93cml0ZV9QTExfQ1RMKHVuc2lnbmVkIGludCB2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgaXdyMCwgaXdyMTsKLQotCWlmICh2YWwgPT0gYmZpbl9yZWFkX1BMTF9DVEwoKSkKLQkJcmV0dXJuOwotCi0JZmxhZ3MgPSBoYXJkX2xvY2FsX2lycV9zYXZlKCk7Ci0JLyogRW5hYmxlIHRoZSBQTEwgV2FrZXVwIGJpdCBpbiBTSUMgSVdSICovCi0JaXdyMCA9IGJmaW5fcmVhZDMyKFNJQ19JV1IwKTsKLQlpd3IxID0gYmZpbl9yZWFkMzIoU0lDX0lXUjEpOwotCS8qIE9ubHkgYWxsb3cgUFBMIFdha2V1cCkgKi8KLQliZmluX3dyaXRlMzIoU0lDX0lXUjAsIElXUl9FTkFCTEUoMCkpOwotCWJmaW5fd3JpdGUzMihTSUNfSVdSMSwgMCk7Ci0KLQliZmluX3dyaXRlMTYoUExMX0NUTCwgdmFsKTsKLQlTU1lOQygpOwotCWFzbSgiSURMRTsiKTsKLQotCWJmaW5fd3JpdGUzMihTSUNfSVdSMCwgaXdyMCk7Ci0JYmZpbl93cml0ZTMyKFNJQ19JV1IxLCBpd3IxKTsKLQloYXJkX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyogV3JpdGluZyB0byBWUl9DVEwgaW5pdGlhdGVzIGEgUExMIHJlbG9jayBzZXF1ZW5jZS4gKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYmZpbl93cml0ZV9WUl9DVEwodW5zaWduZWQgaW50IHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpd3IwLCBpd3IxOwotCi0JaWYgKHZhbCA9PSBiZmluX3JlYWRfVlJfQ1RMKCkpCi0JCXJldHVybjsKLQotCWZsYWdzID0gaGFyZF9sb2NhbF9pcnFfc2F2ZSgpOwotCS8qIEVuYWJsZSB0aGUgUExMIFdha2V1cCBiaXQgaW4gU0lDIElXUiAqLwotCWl3cjAgPSBiZmluX3JlYWQzMihTSUNfSVdSMCk7Ci0JaXdyMSA9IGJmaW5fcmVhZDMyKFNJQ19JV1IxKTsKLQkvKiBPbmx5IGFsbG93IFBQTCBXYWtldXApICovCi0JYmZpbl93cml0ZTMyKFNJQ19JV1IwLCBJV1JfRU5BQkxFKDApKTsKLQliZmluX3dyaXRlMzIoU0lDX0lXUjEsIDApOwotCi0JYmZpbl93cml0ZTE2KFZSX0NUTCwgdmFsKTsKLQlTU1lOQygpOwotCWFzbSgiSURMRTsiKTsKLQotCWJmaW5fd3JpdGUzMihTSUNfSVdSMCwgaXdyMCk7Ci0JYmZpbl93cml0ZTMyKFNJQ19JV1IxLCBpd3IxKTsKLQloYXJkX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotI2VuZGlmIC8qIF9NQUNIX1BMTF9IICovCisjaW5jbHVkZSA8bWFjaC1jb21tb24vcGxsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL0g4NjA2LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL0g4NjA2LmMKaW5kZXggMmNlN2IxNi4uZDRiZmNlYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9IODYwNi5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvSDg2MDYuYwpAQCAtMjg2LDcgKzI4Niw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMF9UWCwgUF9VQVJUMF9SWCwgMAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9ibGFja3N0YW1wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYwppbmRleCAyMGMxMDIyLi44N2I1YWYzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGFzbS9iZmluNXh4X3NwaS5oPgogI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2RwbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2Zpb19mbGFnLmg+CiAKIC8qCiAgKiBOYW1lIHRoZSBCb2FyZCBmb3IgdGhlIC9wcm9jL2NwdWluZm8KQEAgLTIyNSw3ICsyMjQsNyBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfVUFSVDBfVFgsIFBfVUFSVDBfUlgsIDAKIH07CiAKQEAgLTI5MCw5ICsyODksOSBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MF9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQwX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9TUE9SVDBfVEZTLCBQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywKLQlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIFBfU1BPUlQwX0RSU0VDLCBQX1NQT1JUMF9EVFNFQywgMAorCVBfU1BPUlQwX0RSUFJJLCBQX1NQT1JUMF9SU0NMSywgMAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zcG9ydDBfdWFydF9kZXZpY2UgPSB7CkBAIC0zMjQsOSArMzIzLDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDFfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MV9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQxX1RGUywgUF9TUE9SVDFfRFRQUkksIFBfU1BPUlQxX1RTQ0xLLCBQX1NQT1JUMV9SRlMsCi0JUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCBQX1NQT1JUMV9EUlNFQywgUF9TUE9SVDFfRFRTRUMsIDAKKwlQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQxX3VhcnRfZGV2aWNlID0gewpAQCAtNDc2LDEwICs0NzUsMTYgQEAKIAkJcmV0dXJuIHJldDsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkgfHwgZGVmaW5lZChDT05GSUdfU01DOTFYX01PRFVMRSkKLQkvKiBzZXR1cCBCRjUzM19TVEFNUCBDUExEIHRvIHJvdXRlIEFNUzMgdG8gRXRoZXJuZXQgTUFDICovCi0JYmZpbl93cml0ZV9GSU9fRElSKGJmaW5fcmVhZF9GSU9fRElSKCkgfCBQRjApOwotCWJmaW5fd3JpdGVfRklPX0ZMQUdfUyhQRjApOwotCVNTWU5DKCk7CisJLyoKKwkgKiBzZXR1cCBCRjUzM19TVEFNUCBDUExEIHRvIHJvdXRlIEFNUzMgdG8gRXRoZXJuZXQgTUFDLgorCSAqIHRoZSBiZmluLWFzeW5jLW1hcCBkcml2ZXIgdGFrZXMgY2FyZSBvZiBmbGlwcGluZyBiZXR3ZWVuCisJICogZmxhc2ggYW5kIGV0aGVybmV0IHdoZW4gbmVjZXNzYXJ5LgorCSAqLworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1BGMCwgImVuZXRfY3BsZCIpOworCWlmICghcmV0KSB7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BGMCwgMSk7CisJCWdwaW9fZnJlZShHUElPX1BGMCk7CisJfQogI2VuZGlmCiAKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhiZmluX3NwaV9ib2FyZF9pbmZvLCBBUlJBWV9TSVpFKGJmaW5fc3BpX2JvYXJkX2luZm8pKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzMuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzMuYwppbmRleCBhZGJlNjJhLi40ZDU2MDRlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2NtX2JmNTMzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9jbV9iZjUzMy5jCkBAIC0yNzEsNyArMjcxLDcgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQwX1RYLCBQX1VBUlQwX1JYLCAwCiB9OwogCkBAIC0zMzYsOSArMzM2LDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQwX1RGUywgUF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsCi0JUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCBQX1NQT1JUMF9EUlNFQywgUF9TUE9SVDBfRFRTRUMsIDAKKwlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQwX3VhcnRfZGV2aWNlID0gewpAQCAtMzcwLDkgKzM3MCw5IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQxX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDFfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1NQT1JUMV9URlMsIFBfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgUF9TUE9SVDFfUkZTLAotCVBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgUF9TUE9SVDFfRFJTRUMsIFBfU1BPUlQxX0RUU0VDLCAwCisJUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCAwCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MV91YXJ0X2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYwppbmRleCBhMWNiOGU3Li5iNjdiOTFkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCkBAIC0zNDksNyArMzQ5LDcgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQwX1RYLCBQX1VBUlQwX1JYLCAwCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2lwMHguYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvaXAweC5jCmluZGV4IDViYTRiMDIuLmY4NjlhMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvaXAweC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvaXAweC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9iZmluNXh4X3NwaS5oPgogI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9maW9fZmxhZy5oPgogCiAvKgogICogTmFtZSB0aGUgQm9hcmQgZm9yIHRoZSAvcHJvYy9jcHVpbmZvCkBAIC0xNzQsNyArMTczLDcgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQwX1RYLCBQX1VBUlQwX1JYLCAwCiB9OwogCkBAIC0yOTUsMTUgKzI5NCw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKTogcmVnaXN0ZXJpbmcgZGV2aWNlIHJlc291cmNlc1xuIiwgX19mdW5jX18pOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGlwMHhfZGV2aWNlcywgQVJSQVlfU0laRShpcDB4X2RldmljZXMpKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9NT0RVTEUpCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYmZpbl9zcGlfYm9hcmRfaW5mbyk7ICsraSkgewotCQlpbnQgaiA9IDEgPDwgYmZpbl9zcGlfYm9hcmRfaW5mb1tpXS5jaGlwX3NlbGVjdDsKLQkJLyogc2V0IHNwaSBjcyB0byAxICovCi0JCWJmaW5fd3JpdGVfRklPX0RJUihiZmluX3JlYWRfRklPX0RJUigpIHwgaik7Ci0JCWJmaW5fd3JpdGVfRklPX0ZMQUdfUyhqKTsKLQl9CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oYmZpbl9zcGlfYm9hcmRfaW5mbywgQVJSQVlfU0laRShiZmluX3NwaV9ib2FyZF9pbmZvKSk7Ci0jZW5kaWYKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jCmluZGV4IGIzYjFjZGUuLjQzMjI0ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL3N0YW1wLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KICNpbmNsdWRlIDxhc20vZHBtYy5oPgotI2luY2x1ZGUgPG1hY2gvZmlvX2ZsYWcuaD4KIAogLyoKICAqIE5hbWUgdGhlIEJvYXJkIGZvciB0aGUgL3Byb2MvY3B1aW5mbwpAQCAtMzU0LDcgKzM1Myw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMF9UWCwgUF9VQVJUMF9SWCwgMAogfTsKIApAQCAtNDE5LDkgKzQxOCw5IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQwX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1NQT1JUMF9URlMsIFBfU1BPUlQwX0RUUFJJLCBQX1NQT1JUMF9UU0NMSywgUF9TUE9SVDBfUkZTLAotCVBfU1BPUlQwX0RSUFJJLCBQX1NQT1JUMF9SU0NMSywgUF9TUE9SVDBfRFJTRUMsIFBfU1BPUlQwX0RUU0VDLCAwCisJUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCAwCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MF91YXJ0X2RldmljZSA9IHsKQEAgLTQ1Myw5ICs0NTIsOSBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MV9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQxX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9TUE9SVDFfVEZTLCBQX1NQT1JUMV9EVFBSSSwgUF9TUE9SVDFfVFNDTEssIFBfU1BPUlQxX1JGUywKLQlQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIFBfU1BPUlQxX0RSU0VDLCBQX1NQT1JUMV9EVFNFQywgMAorCVBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgMAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zcG9ydDFfdWFydF9kZXZpY2UgPSB7CkBAIC02NzQsMTAgKzY3MywxNiBAQAogCQlyZXR1cm4gcmV0OwogCiAjaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKSB8fCBkZWZpbmVkKENPTkZJR19TTUM5MVhfTU9EVUxFKQotCS8qIHNldHVwIEJGNTMzX1NUQU1QIENQTEQgdG8gcm91dGUgQU1TMyB0byBFdGhlcm5ldCBNQUMgKi8KLQliZmluX3dyaXRlX0ZJT19ESVIoYmZpbl9yZWFkX0ZJT19ESVIoKSB8IFBGMCk7Ci0JYmZpbl93cml0ZV9GSU9fRkxBR19TKFBGMCk7Ci0JU1NZTkMoKTsKKwkvKgorCSAqIHNldHVwIEJGNTMzX1NUQU1QIENQTEQgdG8gcm91dGUgQU1TMyB0byBFdGhlcm5ldCBNQUMuCisJICogdGhlIGJmaW4tYXN5bmMtbWFwIGRyaXZlciB0YWtlcyBjYXJlIG9mIGZsaXBwaW5nIGJldHdlZW4KKwkgKiBmbGFzaCBhbmQgZXRoZXJuZXQgd2hlbiBuZWNlc3NhcnkuCisJICovCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fUEYwLCAiZW5ldF9jcGxkIik7CisJaWYgKCFyZXQpIHsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUEYwLCAxKTsKKwkJZ3Bpb19mcmVlKEdQSU9fUEYwKTsKKwl9CiAjZW5kaWYKIAogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGJmaW5fc3BpX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoYmZpbl9zcGlfYm9hcmRfaW5mbykpOwpAQCAtNzEzLDcgKzcxOCw2IEBACiB2b2lkIG5hdGl2ZV9tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY21kKQogewogCS8qIHdvcmthcm91bmQgcHVsbCB1cCBvbiBjcGxkIC8gZmxhc2ggcGluIG5vdCBiZWluZyBzdHJvbmcgZW5vdWdoICovCi0JYmZpbl93cml0ZV9GSU9fSU5FTih+UEYwKTsKLQliZmluX3dyaXRlX0ZJT19ESVIoUEYwKTsKLQliZmluX3dyaXRlX0ZJT19GTEFHX0MoUEYwKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QRjAsICJmbGFzaF9jcGxkIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUEYwLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9kbWEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9kbWEuYwppbmRleCA0YTE0YTQ2Li4xZjU5ODhkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvZG1hLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2RtYS5jCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogCi1zdHJ1Y3QgZG1hX3JlZ2lzdGVyICpkbWFfaW9fYmFzZV9hZGRyW01BWF9ETUFfQ0hBTk5FTFNdID0geworc3RydWN0IGRtYV9yZWdpc3RlciAqIGNvbnN0IGRtYV9pb19iYXNlX2FkZHJbTUFYX0RNQV9DSEFOTkVMU10gPSB7CiAJKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgRE1BMF9ORVhUX0RFU0NfUFRSLAogCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIERNQTFfTkVYVF9ERVNDX1BUUiwKIAkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBETUEyX05FWFRfREVTQ19QVFIsCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwNzJjOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWwuaApAQCAtMCwwICsxLDE0IEBACisvKgorICogbWFjaC9iZmluX3NlcmlhbC5oIC0gQmxhY2tmaW4gVUFSVC9TZXJpYWwgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2lmbmRlZiBfX0JGSU5fTUFDSF9TRVJJQUxfSF9fCisjZGVmaW5lIF9fQkZJTl9NQUNIX1NFUklBTF9IX18KKworI2RlZmluZSBCRklOX1VBUlRfTlJfUE9SVFMJMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IDllMWYzZGUuLjQ1ZGNhYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtNCwzNiArNCw5IEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+CiAKLSNkZWZpbmUgVUFSVF9HRVRfQ0hBUih1YXJ0KSAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX1JCUikpCi0jZGVmaW5lIFVBUlRfR0VUX0RMTCh1YXJ0KQliZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExMKSkKLSNkZWZpbmUgVUFSVF9HRVRfSUVSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lFUikpCi0jZGVmaW5lIFVBUlRfR0VUX0RMSCh1YXJ0KQliZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExIKSkKLSNkZWZpbmUgVUFSVF9HRVRfSUlSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lJUikpCi0jZGVmaW5lIFVBUlRfR0VUX0xDUih1YXJ0KSAgICAgIGJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MQ1IpKQotI2RlZmluZSBVQVJUX0dFVF9HQ1RMKHVhcnQpICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfR0NUTCkpCi0KLSNkZWZpbmUgVUFSVF9QVVRfQ0hBUih1YXJ0LHYpICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9USFIpLHYpCi0jZGVmaW5lIFVBUlRfUFVUX0RMTCh1YXJ0LHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExMKSx2KQotI2RlZmluZSBVQVJUX1BVVF9JRVIodWFydCx2KSAgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lFUiksdikKLSNkZWZpbmUgVUFSVF9TRVRfSUVSKHVhcnQsdikgICAgVUFSVF9QVVRfSUVSKHVhcnQsIFVBUlRfR0VUX0lFUih1YXJ0KSB8ICh2KSkKLSNkZWZpbmUgVUFSVF9DTEVBUl9JRVIodWFydCx2KSAgVUFSVF9QVVRfSUVSKHVhcnQsIFVBUlRfR0VUX0lFUih1YXJ0KSAmIH4odikpCi0jZGVmaW5lIFVBUlRfUFVUX0RMSCh1YXJ0LHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExIKSx2KQotI2RlZmluZSBVQVJUX1BVVF9MQ1IodWFydCx2KSAgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xDUiksdikKLSNkZWZpbmUgVUFSVF9QVVRfR0NUTCh1YXJ0LHYpICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9HQ1RMKSx2KQotCi0jZGVmaW5lIFVBUlRfU0VUX0RMQUIodWFydCkgICAgIGRvIHsgVUFSVF9QVVRfTENSKHVhcnQsIFVBUlRfR0VUX0xDUih1YXJ0KSB8IERMQUIpOyBTU1lOQygpOyB9IHdoaWxlICgwKQotI2RlZmluZSBVQVJUX0NMRUFSX0RMQUIodWFydCkgICBkbyB7IFVBUlRfUFVUX0xDUih1YXJ0LCBVQVJUX0dFVF9MQ1IodWFydCkgJiB+RExBQik7IFNTWU5DKCk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgVUFSVF9HRVRfQ1RTKHgpIGdwaW9fZ2V0X3ZhbHVlKHgtPmN0c19waW4pCi0jZGVmaW5lIFVBUlRfRElTQUJMRV9SVFMoeCkgZ3Bpb19zZXRfdmFsdWUoeC0+cnRzX3BpbiwgMSkKLSNkZWZpbmUgVUFSVF9FTkFCTEVfUlRTKHgpIGdwaW9fc2V0X3ZhbHVlKHgtPnJ0c19waW4sIDApCi0jZGVmaW5lIFVBUlRfRU5BQkxFX0lOVFMoeCwgdikgVUFSVF9QVVRfSUVSKHgsIHYpCi0jZGVmaW5lIFVBUlRfRElTQUJMRV9JTlRTKHgpIFVBUlRfUFVUX0lFUih4LCAwKQotCiAjaWZkZWYgQ09ORklHX0JGSU5fVUFSVDBfQ1RTUlRTCiAjIGRlZmluZSBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCiAjIGlmbmRlZiBDT05GSUdfVUFSVDBfQ1RTX1BJTgpAQCAtNDQsNTEgKzE3LDYgQEAKICMgZW5kaWYKICNlbmRpZgogCi0jZGVmaW5lIEJGSU5fVUFSVF9UWF9GSUZPX1NJWkUJMgotCi1zdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCB7Ci0gICAgICAgIHN0cnVjdCB1YXJ0X3BvcnQgICAgICAgIHBvcnQ7Ci0gICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIG9sZF9zdGF0dXM7Ci0JaW50CQkJc3RhdHVzX2lycTsKLQl1bnNpZ25lZCBpbnQgbHNyOwotI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9ETUEKLQlpbnQJCQl0eF9kb25lOwotCWludAkJCXR4X2NvdW50OwotCXN0cnVjdCBjaXJjX2J1ZgkJcnhfZG1hX2J1ZjsKLQlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICByeF9kbWFfdGltZXI7Ci0JaW50CQkJcnhfZG1hX25yb3dzOwotCXVuc2lnbmVkIGludAkJdHhfZG1hX2NoYW5uZWw7Ci0JdW5zaWduZWQgaW50CQlyeF9kbWFfY2hhbm5lbDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdHhfZG1hX3dvcmtxdWV1ZTsKLSNlbHNlCi0jIGlmIEFOT01BTFlfMDUwMDAzNjMKLQl1bnNpZ25lZCBpbnQgYW5vbWFseV90aHJlc2hvbGQ7Ci0jIGVuZGlmCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCi0Jc3RydWN0IHRpbWVyX2xpc3QgICAgICAgY3RzX3RpbWVyOwotCWludAkJCWN0c19waW47Ci0JaW50CQkJcnRzX3BpbjsKLSNlbmRpZgotfTsKLQotLyogVGhlIGhhcmR3YXJlIGNsZWFycyB0aGUgTFNSIGJpdHMgdXBvbiByZWFkLCBzbyB3ZSBuZWVkIHRvIGNhY2hlCi0gKiBzb21lIG9mIHRoZSBtb3JlIGZ1biBiaXRzIGluIHNvZnR3YXJlIHNvIHRoZXkgZG9uJ3QgZ2V0IGxvc3QKLSAqIHdoZW4gY2hlY2tpbmcgdGhlIExTUiBpbiBvdGhlciBjb2RlIHBhdGhzIChUWCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFVBUlRfR0VUX0xTUihzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCkKLXsKLQl1bnNpZ25lZCBpbnQgbHNyID0gYmZpbl9yZWFkMTYodWFydC0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUik7Ci0JdWFydC0+bHNyIHw9IChsc3IgJiAoQkl8RkV8UEV8T0UpKTsKLQlyZXR1cm4gbHNyIHwgdWFydC0+bHNyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgVUFSVF9DTEVBUl9MU1Ioc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCi17Ci0JdWFydC0+bHNyID0gMDsKLQliZmluX3dyaXRlMTYodWFydC0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUiwgLTEpOwotfQotCiBzdHJ1Y3QgYmZpbl9zZXJpYWxfcmVzIHsKIAl1bnNpZ25lZCBsb25nCXVhcnRfYmFzZV9hZGRyOwogCWludAkJdWFydF9pcnE7CkBAIC0xMjAsMyArNDgsNSBAQAogfTsKIAogI2RlZmluZSBEUklWRVJfTkFNRSAiYmZpbi11YXJ0IgorCisjaW5jbHVkZSA8YXNtL2JmaW5fc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggZjRiZDZkZi4uZTM2NjIwNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMSw3ICsxLDcgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA1LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX01BQ0hfQkxBQ0tGSU5fSF8KQEAgLTEwLDI2ICsxMCwxNCBAQAogI2RlZmluZSBCRjUzM19GQU1JTFkKIAogI2luY2x1ZGUgImJmNTMzLmgiCi0jaW5jbHVkZSAiZGVmQkY1MzIuaCIKICNpbmNsdWRlICJhbm9tYWx5LmgiCiAKLSNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCi0jaW5jbHVkZSAiY2RlZkJGNTMyLmgiCisjaW5jbHVkZSA8YXNtL2RlZl9MUEJsYWNrZmluLmg+CisjaW5jbHVkZSAiZGVmQkY1MzIuaCIKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyMgaW5jbHVkZSA8YXNtL2NkZWZfTFBCbGFja2Zpbi5oPgorIyBpbmNsdWRlICJjZGVmQkY1MzIuaCIKICNlbmRpZgogCi0jZGVmaW5lIEJGSU5fVUFSVF9OUl9QT1JUUyAgICAgIDEKLQotI2RlZmluZSBPRkZTRVRfVEhSICAgICAgICAgICAgICAweDAwCS8qIFRyYW5zbWl0IEhvbGRpbmcgcmVnaXN0ZXIgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfUkJSICAgICAgICAgICAgICAweDAwCS8qIFJlY2VpdmUgQnVmZmVyIHJlZ2lzdGVyICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfRExMICAgICAgICAgICAgICAweDAwCS8qIERpdmlzb3IgTGF0Y2ggKExvdy1CeXRlKSAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfSUVSICAgICAgICAgICAgICAweDA0CS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfRExIICAgICAgICAgICAgICAweDA0CS8qIERpdmlzb3IgTGF0Y2ggKEhpZ2gtQnl0ZSkgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfSUlSICAgICAgICAgICAgICAweDA4CS8qIEludGVycnVwdCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAgICAqLwotI2RlZmluZSBPRkZTRVRfTENSICAgICAgICAgICAgICAweDBDCS8qIExpbmUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfTUNSICAgICAgICAgICAgICAweDEwCS8qIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfTFNSICAgICAgICAgICAgICAweDE0CS8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfTVNSICAgICAgICAgICAgICAweDE4CS8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfU0NSICAgICAgICAgICAgICAweDFDCS8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfR0NUTCAgICAgICAgICAgICAweDI0CS8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAqLwotCi0jZW5kaWYJCQkJLyogX01BQ0hfQkxBQ0tGSU5fSF8gKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9jZGVmQkY1MzIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvY2RlZkJGNTMyLmgKaW5kZXggNDAxZTUyNC4uZmQwY2JlNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9jZGVmQkY1MzIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2NkZWZCRjUzMi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDUtMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KQEAgLTcsOSArNyw2IEBACiAjaWZuZGVmIF9DREVGX0JGNTMyX0gKICNkZWZpbmUgX0NERUZfQkY1MzJfSAogCi0vKmluY2x1ZGUgY29yZSBzcGVjaWZpYyByZWdpc3RlciBwb2ludGVyIGRlZmluaXRpb25zKi8KLSNpbmNsdWRlIDxhc20vY2RlZl9MUEJsYWNrZmluLmg+Ci0KIC8qIENsb2NrIGFuZCBTeXN0ZW0gQ29udHJvbCAoMHhGRkMwIDA0MDAtMHhGRkMwIDA3RkYpICovCiAjZGVmaW5lIGJmaW5fcmVhZF9QTExfQ1RMKCkgICAgICAgICAgICAgICAgICBiZmluX3JlYWQxNihQTExfQ1RMKQogI2RlZmluZSBiZmluX3JlYWRfUExMX1NUQVQoKSAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoUExMX1NUQVQpCkBAIC02NiwxNiArNjMsMTAgQEAKICNkZWZpbmUgYmZpbl93cml0ZV9SVENfUFJFTih2YWwpICAgICAgICAgICAgIGJmaW5fd3JpdGUxNihSVENfUFJFTix2YWwpCiAKIC8qIERNQSBUcmFmZmljIGNvbnRyb2xzICovCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUFfVENQRVIoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUFfVENQRVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BX1RDUEVSKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMTYoRE1BX1RDUEVSLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQV9UQ0NOVCgpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KERNQV9UQ0NOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUFfVENDTlQodmFsKSAgICAgICAgICAgIGJmaW5fd3JpdGUxNihETUFfVENDTlQsdmFsKQotCi0vKiBBbHRlcm5hdGUgZGVwcmVjYXRlZCByZWdpc3RlciBuYW1lcyAoYmVsb3cpIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29kZSBjb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUFfVENfUEVSKCkgICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUFfVENfUEVSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQV9UQ19QRVIodmFsKSAgICAgICAgICAgYmZpbl93cml0ZTE2KERNQV9UQ19QRVIsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BX1RDX0NOVCgpICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoRE1BX1RDX0NOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUFfVENfQ05UKHZhbCkgICAgICAgICAgIGJmaW5fd3JpdGUxNihETUFfVENfQ05ULHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQUNfVENfUEVSKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KERNQUNfVENfUEVSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQUNfVENfUEVSKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTE2KERNQUNfVENfUEVSLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQUNfVENfQ05UKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KERNQUNfVENfQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQUNfVENfQ05UKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTE2KERNQUNfVENfQ05ULHZhbCkKIAogLyogR2VuZXJhbCBQdXJwb3NlIElPICgweEZGQzAgMjQwMC0weEZGQzAgMjdGRikgKi8KICNkZWZpbmUgYmZpbl9yZWFkX0ZJT19ESVIoKSAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEZJT19ESVIpCkBAIC0xMDUsNiArOTYsNDcgQEAKICNkZWZpbmUgYmZpbl9yZWFkX0ZJT19NQVNLQl9UKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEZJT19NQVNLQl9UKQogI2RlZmluZSBiZmluX3dyaXRlX0ZJT19NQVNLQl9UKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTE2KEZJT19NQVNLQl9ULHZhbCkKIAorI2lmIEFOT01BTFlfMDUwMDAzMTEKKy8qIEtlZXAgYXQgdGhlIENQUCBleHBhbnNpb24gdG8gYXZvaWQgY2lyY3VsYXIgaGVhZGVyIGRlcGVuZGVuY3kgbG9vcHMgKi8KKyNkZWZpbmUgQkZJTl9XUklURV9GSU9fRkxBRyhuYW1lLCB2YWwpIFwKKwlkbyB7IFwKKwkJdW5zaWduZWQgbG9uZyBfX2ZsYWdzOyBcCisJCV9fZmxhZ3MgPSBoYXJkX2xvY2FsX2lycV9zYXZlKCk7IFwKKwkJYmZpbl93cml0ZTE2KEZJT19GTEFHXyMjbmFtZSwgdmFsKTsgXAorCQliZmluX3JlYWRfQ0hJUElEKCk7IFwKKwkJaGFyZF9sb2NhbF9pcnFfcmVzdG9yZShfX2ZsYWdzKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGJmaW5fd3JpdGVfRklPX0ZMQUdfRCh2YWwpICAgICAgICAgICBCRklOX1dSSVRFX0ZJT19GTEFHKEQsIHZhbCkKKyNkZWZpbmUgYmZpbl93cml0ZV9GSU9fRkxBR19DKHZhbCkgICAgICAgICAgIEJGSU5fV1JJVEVfRklPX0ZMQUcoQywgdmFsKQorI2RlZmluZSBiZmluX3dyaXRlX0ZJT19GTEFHX1ModmFsKSAgICAgICAgICAgQkZJTl9XUklURV9GSU9fRkxBRyhTLCB2YWwpCisjZGVmaW5lIGJmaW5fd3JpdGVfRklPX0ZMQUdfVCh2YWwpICAgICAgICAgICBCRklOX1dSSVRFX0ZJT19GTEFHKFQsIHZhbCkKKworI2RlZmluZSBCRklOX1JFQURfRklPX0ZMQUcobmFtZSkgXAorCSh7IFwKKwkJdW5zaWduZWQgbG9uZyBfX2ZsYWdzOyBcCisJCXUxNiBfX3JldDsgXAorCQlfX2ZsYWdzID0gaGFyZF9sb2NhbF9pcnFfc2F2ZSgpOyBcCisJCV9fcmV0ID0gYmZpbl9yZWFkMTYoRklPX0ZMQUdfIyNuYW1lKTsgXAorCQliZmluX3JlYWRfQ0hJUElEKCk7IFwKKwkJaGFyZF9sb2NhbF9pcnFfcmVzdG9yZShfX2ZsYWdzKTsgXAorCQlfX3JldDsgXAorCX0pCisjZGVmaW5lIGJmaW5fcmVhZF9GSU9fRkxBR19EKCkgICAgICAgICAgICAgICBCRklOX1JFQURfRklPX0ZMQUcoRCkKKyNkZWZpbmUgYmZpbl9yZWFkX0ZJT19GTEFHX0MoKSAgICAgICAgICAgICAgIEJGSU5fUkVBRF9GSU9fRkxBRyhDKQorI2RlZmluZSBiZmluX3JlYWRfRklPX0ZMQUdfUygpICAgICAgICAgICAgICAgQkZJTl9SRUFEX0ZJT19GTEFHKFMpCisjZGVmaW5lIGJmaW5fcmVhZF9GSU9fRkxBR19UKCkgICAgICAgICAgICAgICBCRklOX1JFQURfRklPX0ZMQUcoVCkKKworI2Vsc2UKKyNkZWZpbmUgYmZpbl93cml0ZV9GSU9fRkxBR19EKHZhbCkgICAgICAgICAgIGJmaW5fd3JpdGUxNihGSU9fRkxBR19ELCB2YWwpCisjZGVmaW5lIGJmaW5fd3JpdGVfRklPX0ZMQUdfQyh2YWwpICAgICAgICAgICBiZmluX3dyaXRlMTYoRklPX0ZMQUdfQywgdmFsKQorI2RlZmluZSBiZmluX3dyaXRlX0ZJT19GTEFHX1ModmFsKSAgICAgICAgICAgYmZpbl93cml0ZTE2KEZJT19GTEFHX1MsIHZhbCkKKyNkZWZpbmUgYmZpbl93cml0ZV9GSU9fRkxBR19UKHZhbCkgICAgICAgICAgIGJmaW5fd3JpdGUxNihGSU9fRkxBR19ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9GSU9fRkxBR19EKCkgICAgICAgICAgICAgICBiZmluX3JlYWQxNihGSU9fRkxBR19EKQorI2RlZmluZSBiZmluX3JlYWRfRklPX0ZMQUdfQygpICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoRklPX0ZMQUdfQykKKyNkZWZpbmUgYmZpbl9yZWFkX0ZJT19GTEFHX1MoKSAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEZJT19GTEFHX1MpCisjZGVmaW5lIGJmaW5fcmVhZF9GSU9fRkxBR19UKCkgICAgICAgICAgICAgICBiZmluX3JlYWQxNihGSU9fRkxBR19UKQorI2VuZGlmCisKIC8qIERNQSBDb250cm9sbGVyICovCiAjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX0NPTkZJRygpICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUEwX0NPTkZJRykKICNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX0NPTkZJRyh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUxNihETUEwX0NPTkZJRyx2YWwpCkBAIC02NDcsNyArNjc5LDQgQEAKICNkZWZpbmUgYmZpbl9yZWFkX1BQSV9GUkFNRSgpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KFBQSV9GUkFNRSkKICNkZWZpbmUgYmZpbl93cml0ZV9QUElfRlJBTUUodmFsKSAgICAgICAgICAgIGJmaW5fd3JpdGUxNihQUElfRlJBTUUsdmFsKQogCi0vKiBUaGVzZSBuZWVkIHRvIGJlIGxhc3QgZHVlIHRvIHRoZSBjZGVmL2xpbnV4IGludGVyLWRlcGVuZGVuY2llcyAqLwotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQogI2VuZGlmCQkJCS8qIF9DREVGX0JGNTMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZGVmQkY1MzIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZGVmQkY1MzIuaAppbmRleCAzYWRiMGI0Li4yMzc2ZDUzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2RlZkJGNTMyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9kZWZCRjUzMi5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFN5c3RlbSAmIE1NUiBiaXQgYW5kIEFkZHJlc3MgZGVmaW5pdGlvbnMgZm9yIEFEU1AtQkY1MzIKICAqCi0gKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA1LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwpAQCAtOSw5ICs5LDYgQEAKICNpZm5kZWYgX0RFRl9CRjUzMl9ICiAjZGVmaW5lIF9ERUZfQkY1MzJfSAogCi0vKiBpbmNsdWRlIGFsbCBDb3JlIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8YXNtL2RlZl9MUEJsYWNrZmluLmg+Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogLyogU3lzdGVtIE1NUiBSZWdpc3RlciBNYXAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwpAQCAtMTgyLDEyICsxNzksOCBAQAogI2RlZmluZSBFQklVX1NEU1RBVAkJCTB4RkZDMDBBMUMJLyogU0RSQU0gU3RhdHVzIFJlZ2lzdGVyICovCiAKIC8qIERNQSBUcmFmZmljIGNvbnRyb2xzICovCi0jZGVmaW5lIERNQV9UQ19QRVIgMHhGRkMwMEIwQwkvKiBUcmFmZmljIENvbnRyb2wgUGVyaW9kcyBSZWdpc3RlciAqLwotI2RlZmluZSBETUFfVENfQ05UIDB4RkZDMDBCMTAJLyogVHJhZmZpYyBDb250cm9sIEN1cnJlbnQgQ291bnRzIFJlZ2lzdGVyICovCi0KLS8qIEFsdGVybmF0ZSBkZXByZWNhdGVkIHJlZ2lzdGVyIG5hbWVzIChiZWxvdykgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb2RlIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgRE1BX1RDUEVSIDB4RkZDMDBCMEMJLyogVHJhZmZpYyBDb250cm9sIFBlcmlvZHMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRE1BX1RDQ05UIDB4RkZDMDBCMTAJLyogVHJhZmZpYyBDb250cm9sIEN1cnJlbnQgQ291bnRzIFJlZ2lzdGVyICovCisjZGVmaW5lIERNQUNfVENfUEVSIDB4RkZDMDBCMEMJLyogVHJhZmZpYyBDb250cm9sIFBlcmlvZHMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BQ19UQ19DTlQgMHhGRkMwMEIxMAkvKiBUcmFmZmljIENvbnRyb2wgQ3VycmVudCBDb3VudHMgUmVnaXN0ZXIgKi8KIAogLyogRE1BIENvbnRyb2xsZXIgKDB4RkZDMDBDMDAgLSAweEZGQzAwRkZGKSAqLwogI2RlZmluZSBETUEwX0NPTkZJRwkJMHhGRkMwMEMwOAkvKiBETUEgQ2hhbm5lbCAwIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KQEAgLTQzMiw4MyArNDI1LDYgQEAKICNkZWZpbmUgSVdSX0VOQUJMRSh4KQkgICAgICAgKDEgPDwgKHgpKQkvKiBXYWtldXAgRW5hYmxlIFBlcmlwaGVyYWwgI3ggKi8KICNkZWZpbmUgSVdSX0RJU0FCTEUoeCkgKDB4RkZGRkZGRkYgXiAoMSA8PCAoeCkpKQkvKiBXYWtldXAgRGlzYWJsZSBQZXJpcGhlcmFsICN4ICovCiAKLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFVBUlQgQ09OVFJPTExFUiBNQVNLUyAqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8qIFVBUlRfTENSIFJlZ2lzdGVyICovCi0KLSNkZWZpbmUgRExBQgkweDgwCi0jZGVmaW5lIFNCICAgICAgMHg0MAotI2RlZmluZSBTVFAgICAgICAweDIwCi0jZGVmaW5lIEVQUyAgICAgMHgxMAotI2RlZmluZSBQRU4JMHgwOAotI2RlZmluZSBTVEIJMHgwNAotI2RlZmluZSBXTFMoeCkJKCh4LTUpICYgMHgwMykKLQotI2RlZmluZSBETEFCX1AJMHgwNwotI2RlZmluZSBTQl9QCTB4MDYKLSNkZWZpbmUgU1RQX1AJMHgwNQotI2RlZmluZSBFUFNfUAkweDA0Ci0jZGVmaW5lIFBFTl9QCTB4MDMKLSNkZWZpbmUgU1RCX1AJMHgwMgotI2RlZmluZSBXTFNfUDEJMHgwMQotI2RlZmluZSBXTFNfUDAJMHgwMAotCi0vKiBVQVJUX01DUiBSZWdpc3RlciAqLwotI2RlZmluZSBMT09QX0VOQQkweDEwCi0jZGVmaW5lIExPT1BfRU5BX1AJMHgwNAotCi0vKiBVQVJUX0xTUiBSZWdpc3RlciAqLwotI2RlZmluZSBURU1UCTB4NDAKLSNkZWZpbmUgVEhSRQkweDIwCi0jZGVmaW5lIEJJCTB4MTAKLSNkZWZpbmUgRkUJMHgwOAotI2RlZmluZSBQRQkweDA0Ci0jZGVmaW5lIE9FCTB4MDIKLSNkZWZpbmUgRFIJMHgwMQotCi0jZGVmaW5lIFRFTVBfUAkweDA2Ci0jZGVmaW5lIFRIUkVfUAkweDA1Ci0jZGVmaW5lIEJJX1AJMHgwNAotI2RlZmluZSBGRV9QCTB4MDMKLSNkZWZpbmUgUEVfUAkweDAyCi0jZGVmaW5lIE9FX1AJMHgwMQotI2RlZmluZSBEUl9QCTB4MDAKLQotLyogVUFSVF9JRVIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRUxTSQkweDA0Ci0jZGVmaW5lIEVUQkVJCTB4MDIKLSNkZWZpbmUgRVJCRkkJMHgwMQotCi0jZGVmaW5lIEVMU0lfUAkweDAyCi0jZGVmaW5lIEVUQkVJX1AJMHgwMQotI2RlZmluZSBFUkJGSV9QCTB4MDAKLQotLyogVUFSVF9JSVIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgU1RBVFVTKHgpCSgoeCA8PCAxKSAmIDB4MDYpCi0jZGVmaW5lIE5JTlQJCTB4MDEKLSNkZWZpbmUgU1RBVFVTX1AxCTB4MDIKLSNkZWZpbmUgU1RBVFVTX1AwCTB4MDEKLSNkZWZpbmUgTklOVF9QCQkweDAwCi0jZGVmaW5lIElJUl9UWF9SRUFEWSAgICAweDAyCS8qIFVBUlRfVEhSIGVtcHR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIElJUl9SWF9SRUFEWSAgICAweDA0CS8qIFJlY2VpdmUgZGF0YSByZWFkeSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIElJUl9MSU5FX0NIQU5HRSAweDA2CS8qIFJlY2VpdmUgbGluZSBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIElJUl9TVEFUVVMJMHgwNgotCi0vKiBVQVJUX0dDVEwgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRkZFCTB4MjAKLSNkZWZpbmUgRlBFCTB4MTAKLSNkZWZpbmUgUlBPTEMJMHgwOAotI2RlZmluZSBUUE9MQwkweDA0Ci0jZGVmaW5lIElSRU4JMHgwMgotI2RlZmluZSBVQ0VOCTB4MDEKLQotI2RlZmluZSBGRkVfUAkweDA1Ci0jZGVmaW5lIEZQRV9QCTB4MDQKLSNkZWZpbmUgUlBPTENfUAkweDAzCi0jZGVmaW5lIFRQT0xDX1AJMHgwMgotI2RlZmluZSBJUkVOX1AJMHgwMQotI2RlZmluZSBVQ0VOX1AJMHgwMAotCiAvKiAgKioqKioqKioqICBQQVJBTExFTCBQRVJJUEhFUkFMIElOVEVSRkFDRSAoUFBJKSBNQVNLUyAqKioqKioqKioqKioqKioqICAgKi8KIAogLyogIFBQSV9DT05UUk9MIE1hc2tzICAgICAgICAgKi8KQEAgLTY0Myw0NCArNTU5LDYgQEAKICNkZWZpbmUgRVJSX1RZUF9QMAkJMHgwRQogI2RlZmluZSBFUlJfVFlQX1AxCQkweDBGCiAKLS8qLyAqKioqKioqKioqKioqKioqKiogICBQUk9HUkFNTUFCTEUgRkxBRyBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8qICBHZW5lcmFsIFB1cnBvc2UgSU8gKDB4RkZDMDA3MDAgLSAweEZGQzAwN0ZGKSAgTWFza3MgKi8KLSNkZWZpbmUgUEYwICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIFBGMSAgICAgICAgIDB4MDAwMgotI2RlZmluZSBQRjIgICAgICAgICAweDAwMDQKLSNkZWZpbmUgUEYzICAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIFBGNCAgICAgICAgIDB4MDAxMAotI2RlZmluZSBQRjUgICAgICAgICAweDAwMjAKLSNkZWZpbmUgUEY2ICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIFBGNyAgICAgICAgIDB4MDA4MAotI2RlZmluZSBQRjggICAgICAgICAweDAxMDAKLSNkZWZpbmUgUEY5ICAgICAgICAgMHgwMjAwCi0jZGVmaW5lIFBGMTAgICAgICAgIDB4MDQwMAotI2RlZmluZSBQRjExICAgICAgICAweDA4MDAKLSNkZWZpbmUgUEYxMiAgICAgICAgMHgxMDAwCi0jZGVmaW5lIFBGMTMgICAgICAgIDB4MjAwMAotI2RlZmluZSBQRjE0ICAgICAgICAweDQwMDAKLSNkZWZpbmUgUEYxNSAgICAgICAgMHg4MDAwCi0KLS8qICBHZW5lcmFsIFB1cnBvc2UgSU8gKDB4RkZDMDA3MDAgLSAweEZGQzAwN0ZGKSAgQklUIFBPU0lUSU9OUyAqLwotI2RlZmluZSBQRjBfUCAgICAgICAgIDAKLSNkZWZpbmUgUEYxX1AgICAgICAgICAxCi0jZGVmaW5lIFBGMl9QICAgICAgICAgMgotI2RlZmluZSBQRjNfUCAgICAgICAgIDMKLSNkZWZpbmUgUEY0X1AgICAgICAgICA0Ci0jZGVmaW5lIFBGNV9QICAgICAgICAgNQotI2RlZmluZSBQRjZfUCAgICAgICAgIDYKLSNkZWZpbmUgUEY3X1AgICAgICAgICA3Ci0jZGVmaW5lIFBGOF9QICAgICAgICAgOAotI2RlZmluZSBQRjlfUCAgICAgICAgIDkKLSNkZWZpbmUgUEYxMF9QICAgICAgICAxMAotI2RlZmluZSBQRjExX1AgICAgICAgIDExCi0jZGVmaW5lIFBGMTJfUCAgICAgICAgMTIKLSNkZWZpbmUgUEYxM19QICAgICAgICAxMwotI2RlZmluZSBQRjE0X1AgICAgICAgIDE0Ci0jZGVmaW5lIFBGMTVfUCAgICAgICAgMTUKLQogLyogKioqKioqKioqKioqKioqKioqKioqICBBU1lOQ0hST05PVVMgTUVNT1JZIENPTlRST0xMRVIgTUFTS1MgICoqKioqKioqKioqKiogKi8KIAogLyogQU1HQ1RMIE1hc2tzICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2Zpb19mbGFnLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2Zpb19mbGFnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYmZiYTAuLjAwMDAwMDAKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9maW9fZmxhZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgotICovCi0KLSNpZm5kZWYgX01BQ0hfRklPX0ZMQUdfSAotI2RlZmluZSBfTUFDSF9GSU9fRkxBR19ICi0KLSNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KLSNpbmNsdWRlIDxhc20vaXJxZmxhZ3MuaD4KLQotI2lmIEFOT01BTFlfMDUwMDAzMTEKLSNkZWZpbmUgQkZJTl9XUklURV9GSU9fRkxBRyhuYW1lKSBcCi1zdGF0aWMgaW5saW5lIHZvaWQgYmZpbl93cml0ZV9GSU9fRkxBR18jI25hbWUodW5zaWduZWQgc2hvcnQgdmFsKSBcCi17IFwKLQl1bnNpZ25lZCBsb25nIGZsYWdzOyBcCi0JZmxhZ3MgPSBoYXJkX2xvY2FsX2lycV9zYXZlKCk7IFwKLQliZmluX3dyaXRlMTYoRklPX0ZMQUdfIyNuYW1lLCB2YWwpOyBcCi0JYmZpbl9yZWFkX0NISVBJRCgpOyBcCi0JaGFyZF9sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKLX0KLUJGSU5fV1JJVEVfRklPX0ZMQUcoRCkKLUJGSU5fV1JJVEVfRklPX0ZMQUcoQykKLUJGSU5fV1JJVEVfRklPX0ZMQUcoUykKLUJGSU5fV1JJVEVfRklPX0ZMQUcoVCkKLQotI2RlZmluZSBCRklOX1JFQURfRklPX0ZMQUcobmFtZSkgXAotc3RhdGljIGlubGluZSB1MTYgYmZpbl9yZWFkX0ZJT19GTEFHXyMjbmFtZSh2b2lkKSBcCi17IFwKLQl1bnNpZ25lZCBsb25nIGZsYWdzOyBcCi0JdTE2IHJldDsgXAotCWZsYWdzID0gaGFyZF9sb2NhbF9pcnFfc2F2ZSgpOyBcCi0JcmV0ID0gYmZpbl9yZWFkMTYoRklPX0ZMQUdfIyNuYW1lKTsgXAotCWJmaW5fcmVhZF9DSElQSUQoKTsgXAotCWhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyBcCi0JcmV0dXJuIHJldDsgXAotfQotQkZJTl9SRUFEX0ZJT19GTEFHKEQpCi1CRklOX1JFQURfRklPX0ZMQUcoQykKLUJGSU5fUkVBRF9GSU9fRkxBRyhTKQotQkZJTl9SRUFEX0ZJT19GTEFHKFQpCi0KLSNlbHNlCi0jZGVmaW5lIGJmaW5fd3JpdGVfRklPX0ZMQUdfRCh2YWwpICAgICAgICAgICBiZmluX3dyaXRlMTYoRklPX0ZMQUdfRCwgdmFsKQotI2RlZmluZSBiZmluX3dyaXRlX0ZJT19GTEFHX0ModmFsKSAgICAgICAgICAgYmZpbl93cml0ZTE2KEZJT19GTEFHX0MsIHZhbCkKLSNkZWZpbmUgYmZpbl93cml0ZV9GSU9fRkxBR19TKHZhbCkgICAgICAgICAgIGJmaW5fd3JpdGUxNihGSU9fRkxBR19TLCB2YWwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRklPX0ZMQUdfVCh2YWwpICAgICAgICAgICBiZmluX3dyaXRlMTYoRklPX0ZMQUdfVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRklPX0ZMQUdfVCgpICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoRklPX0ZMQUdfVCkKLSNkZWZpbmUgYmZpbl9yZWFkX0ZJT19GTEFHX0MoKSAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEZJT19GTEFHX0MpCi0jZGVmaW5lIGJmaW5fcmVhZF9GSU9fRkxBR19TKCkgICAgICAgICAgICAgICBiZmluX3JlYWQxNihGSU9fRkxBR19TKQotI2RlZmluZSBiZmluX3JlYWRfRklPX0ZMQUdfRCgpICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoRklPX0ZMQUdfRCkKLSNlbmRpZgotCi0jZW5kaWYgLyogX01BQ0hfRklPX0ZMQUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBlMDI0MTZkLi5jY2U0ZjhmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMjgsNCArMjgsNiBAQAogCiAjZGVmaW5lIFBPUlRfRiBHUElPX1BGMAogCisjaW5jbHVkZSA8bWFjaC1jb21tb24vcG9ydHMtZi5oPgorCiAjZW5kaWYgLyogX01BQ0hfR1BJT19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9wbGwuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvcGxsLmgKaW5kZXggMTY5YzEwNi4uOTRjY2E2NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9wbGwuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL3BsbC5oCkBAIC0xLDU3ICsxIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCi0gKi8KLQotI2lmbmRlZiBfTUFDSF9QTExfSAotI2RlZmluZSBfTUFDSF9QTExfSAotCi0jaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+Ci0jaW5jbHVkZSA8YXNtL2lycWZsYWdzLmg+Ci0KLS8qIFdyaXRpbmcgdG8gUExMX0NUTCBpbml0aWF0ZXMgYSBQTEwgcmVsb2NrIHNlcXVlbmNlLiAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZCBiZmluX3dyaXRlX1BMTF9DVEwodW5zaWduZWQgaW50IHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpd3I7Ci0KLQlpZiAodmFsID09IGJmaW5fcmVhZF9QTExfQ1RMKCkpCi0JCXJldHVybjsKLQotCWZsYWdzID0gaGFyZF9sb2NhbF9pcnFfc2F2ZSgpOwotCS8qIEVuYWJsZSB0aGUgUExMIFdha2V1cCBiaXQgaW4gU0lDIElXUiAqLwotCWl3ciA9IGJmaW5fcmVhZDMyKFNJQ19JV1IpOwotCS8qIE9ubHkgYWxsb3cgUFBMIFdha2V1cCkgKi8KLQliZmluX3dyaXRlMzIoU0lDX0lXUiwgSVdSX0VOQUJMRSgwKSk7Ci0KLQliZmluX3dyaXRlMTYoUExMX0NUTCwgdmFsKTsKLQlTU1lOQygpOwotCWFzbSgiSURMRTsiKTsKLQotCWJmaW5fd3JpdGUzMihTSUNfSVdSLCBpd3IpOwotCWhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKiBXcml0aW5nIHRvIFZSX0NUTCBpbml0aWF0ZXMgYSBQTEwgcmVsb2NrIHNlcXVlbmNlLiAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZCBiZmluX3dyaXRlX1ZSX0NUTCh1bnNpZ25lZCBpbnQgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGl3cjsKLQotCWlmICh2YWwgPT0gYmZpbl9yZWFkX1ZSX0NUTCgpKQotCQlyZXR1cm47Ci0KLQlmbGFncyA9IGhhcmRfbG9jYWxfaXJxX3NhdmUoKTsKLQkvKiBFbmFibGUgdGhlIFBMTCBXYWtldXAgYml0IGluIFNJQyBJV1IgKi8KLQlpd3IgPSBiZmluX3JlYWQzMihTSUNfSVdSKTsKLQkvKiBPbmx5IGFsbG93IFBQTCBXYWtldXApICovCi0JYmZpbl93cml0ZTMyKFNJQ19JV1IsIElXUl9FTkFCTEUoMCkpOwotCi0JYmZpbl93cml0ZTE2KFZSX0NUTCwgdmFsKTsKLQlTU1lOQygpOwotCWFzbSgiSURMRTsiKTsKLQotCWJmaW5fd3JpdGUzMihTSUNfSVdSLCBpd3IpOwotCWhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0jZW5kaWYgLyogX01BQ0hfUExMX0ggKi8KKyNpbmNsdWRlIDxtYWNoLWNvbW1vbi9wbGwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvS2NvbmZpZyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvS2NvbmZpZwppbmRleCA0NDEzMmZkLi5hNDRiZjNhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL0tjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9LY29uZmlnCkBAIC0zOSw0ICszOSwxMCBAQAogCWhlbHAKIAkgIEJvYXJkIHN1cHBseSBwYWNrYWdlIGZvciBDU1AgTWlub3RhdXIKIAorY29uZmlnIEROUDUzNzAKKwlib29sICJTU1YgRGlsL05ldFBDIEROUC81MzcwIgorCWRlcGVuZHMgb24gKEJGNTM3KQorCWhlbHAKKwkgIEJvYXJkIHN1cHBseSBwYWNrYWdlIGZvciBETlAvNTM3MCBESUw2NCBtb2R1bGUKKwogZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL01ha2VmaWxlIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9NYWtlZmlsZQppbmRleCA3ZTZhYTRlLi5mZTQyMjU4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvTWFrZWZpbGUKQEAgLTgsMyArOCw0IEBACiBvYmotJChDT05GSUdfQkZJTjUzN19CTFVFVEVDSE5JWF9UQ00pICArPSB0Y21fYmY1Mzcubwogb2JqLSQoQ09ORklHX1BOQVYxMCkgICAgICAgICAgICAgICAgICAgKz0gcG5hdjEwLm8KIG9iai0kKENPTkZJR19DQU1TSUdfTUlOT1RBVVIpICAgICAgICAgICs9IG1pbm90YXVyLm8KK29iai0kKENPTkZJR19ETlA1MzcwKSAgICAgICAgICAgICAgICAgICs9IGRucDUzNzAubwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN2UuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1MzdlLmMKaW5kZXggODM2Njk4Yy4uMmM3NzZlMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN2UuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3ZS5jCkBAIC0zNzMsNyArMzczLDcgQEAKICNlbmRpZgogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQwX1RYLCBQX1VBUlQwX1JYLCAwCiB9OwogCkBAIC00MzQsNyArNDM0LDcgQEAKICNlbmRpZgogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MV9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDFfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQxX1RYLCBQX1VBUlQxX1JYLCAwCiB9OwogCkBAIC01NDUsOSArNTQ1LDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQwX1RGUywgUF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsCi0JUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCBQX1NQT1JUMF9EUlNFQywgUF9TUE9SVDBfRFRTRUMsIDAKKwlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQwX3VhcnRfZGV2aWNlID0gewpAQCAtNTc5LDkgKzU3OSw5IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQxX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDFfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1NQT1JUMV9URlMsIFBfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgUF9TUE9SVDFfUkZTLAotCVBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgUF9TUE9SVDFfRFJTRUMsIFBfU1BPUlQxX0RUU0VDLCAwCisJUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCAwCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MV91YXJ0X2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1Mzd1LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3dS5jCmluZGV4IDJhODU2NzAuLjA4NTY2MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1Mzd1LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN3UuYwpAQCAtMzU2LDcgKzM1Niw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMF9UWCwgUF9VQVJUMF9SWCwgMAogfTsKIApAQCAtMzk5LDcgKzM5OSw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDFfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQxX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMV9UWCwgUF9VQVJUMV9SWCwgMAogfTsKIApAQCAtNTEwLDkgKzUxMCw5IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQwX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1NQT1JUMF9URlMsIFBfU1BPUlQwX0RUUFJJLCBQX1NQT1JUMF9UU0NMSywgUF9TUE9SVDBfUkZTLAotCVBfU1BPUlQwX0RSUFJJLCBQX1NQT1JUMF9SU0NMSywgUF9TUE9SVDBfRFJTRUMsIFBfU1BPUlQwX0RUU0VDLCAwCisJUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCAwCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MF91YXJ0X2RldmljZSA9IHsKQEAgLTU0NCw5ICs1NDQsOSBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MV9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQxX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9TUE9SVDFfVEZTLCBQX1NQT1JUMV9EVFBSSSwgUF9TUE9SVDFfVFNDTEssIFBfU1BPUlQxX1JGUywKLQlQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIFBfU1BPUlQxX0RSU0VDLCBQX1NQT1JUMV9EVFNFQywgMAorCVBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgMAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zcG9ydDFfdWFydF9kZXZpY2UgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2RucDUzNzAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZG5wNTM3MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZTllYTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2RucDUzNzAuYwpAQCAtMCwwICsxLDQxOCBAQAorLyoKKyAqIFRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIFNTViBEaWwvTmV0UEMgRE5QLzUzNzAgYm9hcmQuCisgKgorICogRElMIG1vZHVsZTogICAgICAgICBodHRwOi8vd3d3LmRpbG5ldHBjLmNvbS9kbnAwMDg2Lmh0bQorICogU0syOCAoc3RhcnRlciBraXQpOiBodHRwOi8vd3d3LmRpbG5ldHBjLmNvbS9kbnAwMDg4Lmh0bQorICoKKyAqIENvcHlyaWdodCAyMDEwIDNhbGl0eSBEaWdpdGFsIFN5c3RlbXMKKyAqIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL21tY19zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2JmaW41eHhfc3BpLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+CisjaW5jbHVkZSA8YXNtL2RwbWMuaD4KKworLyoKKyAqIE5hbWUgdGhlIEJvYXJkIGZvciB0aGUgL3Byb2MvY3B1aW5mbworICovCitjb25zdCBjaGFyIGJmaW5fYm9hcmRfbmFtZVtdID0gIkROUC81MzcwIjsKKyNkZWZpbmUgRkxBU0hfTUFDICAgICAgICAgICAgICAgMHgyMDJmMDAwMAorI2RlZmluZSBDT05GSUdfTVREX1BIWVNNQVBfTEVOICAweDMwMDAwMAorCisjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX0JGSU5fTU9EVUxFKQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcnRjX2RldmljZSA9IHsKKwkubmFtZSA9ICJydGMtYmZpbiIsCisJLmlkICAgPSAtMSwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fTUFDKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX01BQ19NT0RVTEUpCisjaW5jbHVkZSA8bGludXgvYmZpbl9tYWMuaD4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBiZmluX21hY19wZXJpcGhlcmFsc1tdID0gUF9STUlJMDsKKworc3RhdGljIHN0cnVjdCBiZmluX3BoeWRldl9wbGF0Zm9ybV9kYXRhIGJmaW5fcGh5ZGV2X2RhdGFbXSA9IHsKKwl7CisJCS5hZGRyID0gMSwKKwkJLmlycSA9IFBIWV9QT0xMLCAvKiBJUlFfTUFDX1BIWUlOVCAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IGJmaW5fbWlpX2J1c19wbGF0Zm9ybV9kYXRhIGJmaW5fbWlpX2J1c19kYXRhID0geworCS5waHlkZXZfbnVtYmVyICAgPSAxLAorCS5waHlkZXZfZGF0YSAgICAgPSBiZmluX3BoeWRldl9kYXRhLAorCS5waHlfbW9kZSAgICAgICAgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSwKKwkubWFjX3BlcmlwaGVyYWxzID0gYmZpbl9tYWNfcGVyaXBoZXJhbHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX21paV9idXMgPSB7CisJLm5hbWUgPSAiYmZpbl9taWlfYnVzIiwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX21paV9idXNfZGF0YSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX21hY19kZXZpY2UgPSB7CisJLm5hbWUgPSAiYmZpbl9tYWMiLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmJmaW5fbWlpX2J1cywKKwl9Cit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGFzbWJfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUgICAgICAgPSAiYm9vdGxvYWRlcihub3IpIiwKKwkJLnNpemUgICAgICAgPSAweDMwMDAwLAorCQkub2Zmc2V0ICAgICA9IDAsCisJfSwgeworCQkubmFtZSAgICAgICA9ICJsaW51eCBrZXJuZWwgYW5kIHJvb3Rmcyhub3IpIiwKKwkJLnNpemUgICAgICAgPSAweDMwMDAwMCAtIDB4MzAwMDAgLSAweDEwMDAwLAorCQkub2Zmc2V0ICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwl9LCB7CisJCS5uYW1lICAgICAgID0gIk1BQyBhZGRyZXNzKG5vcikiLAorCQkuc2l6ZSAgICAgICA9IDB4MTAwMDAsCisJCS5vZmZzZXQgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgYXNtYl9mbGFzaF9kYXRhID0geworCS53aWR0aCAgICAgID0gMSwKKwkucGFydHMgICAgICA9IGFzbWJfZmxhc2hfcGFydGl0aW9ucywKKwkubnJfcGFydHMgICA9IEFSUkFZX1NJWkUoYXNtYl9mbGFzaF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXNtYl9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgPSAweDIwMDAwMDAwLAorCS5lbmQgICA9IDB4MjAyZmZmZmYsCisJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCit9OworCisvKiA0IE1CIE5PUiBmbGFzaCBhdHRhY2hlZCB0byBhc3luYyBtZW1vcnkgYmFua3MgMC0yLAorICogdGhlcmVmb3JlIG9ubHkgMyBNQiB2aXNpYmxlLgorICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhc21iX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkgID0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkgID0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZhc21iX2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCisJLnJlc291cmNlICAgICAgPSAmYXNtYl9mbGFzaF9yZXNvdXJjZSwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9NT0RVTEUpCisKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfU1BJX01PRFVMRSkKKworI2RlZmluZSBNTUNfU1BJX0NBUkRfREVURUNUX0lOVCBJUlFfUEY1CisKK3N0YXRpYyBpbnQgYmZpbl9tbWNfc3BpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAorCWlycXJldHVybl90ICgqZGV0ZWN0X2ludCkoaW50LCB2b2lkICopLCB2b2lkICpkYXRhKQoreworCXJldHVybiByZXF1ZXN0X2lycShNTUNfU1BJX0NBUkRfREVURUNUX0lOVCwgZGV0ZWN0X2ludCwKKwkJSVJRRl9UUklHR0VSX0ZBTExJTkcsICJtbWMtc3BpLWRldGVjdCIsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBiZmluX21tY19zcGlfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZnJlZV9pcnEoTU1DX1NQSV9DQVJEX0RFVEVDVF9JTlQsIGRhdGEpOworfQorCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgbW1jX3NwaV9jaGlwX2luZm8gPSB7CisJLmVuYWJsZV9kbWEgICAgPSAwLAkgLyogdXNlIG5vIGRtYSB0cmFuc2ZlciB3aXRoIHRoaXMgY2hpcCovCisJLmJpdHNfcGVyX3dvcmQgPSA4LAorfTsKKworc3RhdGljIHN0cnVjdCBtbWNfc3BpX3BsYXRmb3JtX2RhdGEgYmZpbl9tbWNfc3BpX3BkYXRhID0geworCS5pbml0ID0gYmZpbl9tbWNfc3BpX2luaXQsCisJLmV4aXQgPSBiZmluX21tY19zcGlfZXhpdCwKKwkuZGV0ZWN0X2RlbGF5ID0gMTAwLCAvKiBtc2VjcyAqLworfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTVREX0RBVEFGTEFTSCkgfHwgZGVmaW5lZChDT05GSUdfTVREX0RBVEFGTEFTSF9NT0RVTEUpCisvKiBUaGlzIG1hcHBpbmcgaXMgZm9yIGF0NDVkYjY0MiBpdCBoYXMgMTA1NiBwYWdlIHNpemUsCisgKiBwYXJ0aXRpb24gc2l6ZSBhbmQgb2Zmc2V0IHNob3VsZCBiZSBwYWdlIGFsaWduZWQKKyAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGJmaW5fc3BpX2RhdGFmbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSAgID0gIkpGRlMyIGRhdGFmbGFzaChub3IpIiwKKyNpZmRlZiBDT05GSUdfTVREX1BBR0VTSVpFXzEwMjQKKwkJLm9mZnNldCA9IDB4NDAwMDAsCisJCS5zaXplICAgPSAweDdDMDAwMCwKKyNlbHNlCisJCS5vZmZzZXQgPSAweDAsCisJCS5zaXplICAgPSAweDg0MDAwMCwKKyNlbmRpZgorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBiZmluX3NwaV9kYXRhZmxhc2hfZGF0YSA9IHsKKwkubmFtZSAgICAgPSAibXRkX2RhdGFmbGFzaCIsCisJLnBhcnRzICAgID0gYmZpbl9zcGlfZGF0YWZsYXNoX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzID0gQVJSQVlfU0laRShiZmluX3NwaV9kYXRhZmxhc2hfcGFydGl0aW9ucyksCisJLnR5cGUgICAgID0gIm10ZF9kYXRhZmxhc2giLAorfTsKKworc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9kYXRhZmxhc2hfY2hpcF9pbmZvID0geworCS5lbmFibGVfZG1hICAgID0gMCwJIC8qIHVzZSBubyBkbWEgdHJhbnNmZXIgd2l0aCB0aGlzIGNoaXAqLworCS5iaXRzX3Blcl93b3JkID0gOCwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBiZmluX3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKy8qIFNEL01NQyBjYXJkIHJlYWRlciBhdCBTUEkgYnVzICovCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1NQSV9NT0RVTEUpCisJeworCQkubW9kYWxpYXMJID0gIm1tY19zcGkiLAorCQkubWF4X3NwZWVkX2h6ICAgID0gMjAwMDAwMDAsCisJCS5idXNfbnVtCSA9IDAsCisJCS5jaGlwX3NlbGVjdCAgICAgPSAxLAorCQkucGxhdGZvcm1fZGF0YSAgID0gJmJmaW5fbW1jX3NwaV9wZGF0YSwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZtbWNfc3BpX2NoaXBfaW5mbywKKwkJLm1vZGUJICAgICAgICAgPSBTUElfTU9ERV8zLAorCX0sCisjZW5kaWYKKworLyogOCBNZWdhYnl0ZSBBdG1lbCBOT1IgZmxhc2ggY2hpcCBhdCBTUEkgYnVzICovCisjaWYgZGVmaW5lZChDT05GSUdfTVREX0RBVEFGTEFTSCkgfHwgZGVmaW5lZChDT05GSUdfTVREX0RBVEFGTEFTSF9NT0RVTEUpCisJeworCS5tb2RhbGlhcyAgICAgICAgPSAibXRkX2RhdGFmbGFzaCIsCisJLm1heF9zcGVlZF9oeiAgICA9IDE2NzAwMDAwLAorCS5idXNfbnVtICAgICAgICAgPSAwLAorCS5jaGlwX3NlbGVjdCAgICAgPSAyLAorCS5wbGF0Zm9ybV9kYXRhICAgPSAmYmZpbl9zcGlfZGF0YWZsYXNoX2RhdGEsCisJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfZGF0YWZsYXNoX2NoaXBfaW5mbywKKwkubW9kZSAgICAgICAgICAgID0gU1BJX01PREVfMywgLyogU1BJX0NQSEEgYW5kIFNQSV9DUE9MICovCisJfSwKKyNlbmRpZgorfTsKKworLyogU1BJIGNvbnRyb2xsZXIgZGF0YSAqLworLyogU1BJICgwKSAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX3NwaTBfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFNQSTBfUkVHQkFTRSwKKwkJLmVuZCAgID0gU1BJMF9SRUdCQVNFICsgMHhGRiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IENIX1NQSSwKKwkJLmVuZCAgID0gQ0hfU1BJLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1NQSSwKKwkJLmVuZCAgID0gSVJRX1NQSSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfbWFzdGVyIHNwaV9iZmluX21hc3Rlcl9pbmZvID0geworCS5udW1fY2hpcHNlbGVjdCA9IDgsCisJLmVuYWJsZV9kbWEgICAgID0gMSwgIC8qIG1hc3RlciBoYXMgdGhlIGFiaWxpdHkgdG8gZG8gZG1hIHRyYW5zZmVyICovCisJLnBpbl9yZXEgICAgICAgID0ge1BfU1BJMF9TQ0ssIFBfU1BJMF9NSVNPLCBQX1NQSTBfTU9TSSwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzcGlfYmZpbl9tYXN0ZXJfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgID0gImJmaW4tc3BpIiwKKwkuaWQgICAgICAgICAgICA9IDAsIC8qIEJ1cyBudW1iZXIgKi8KKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYmZpbl9zcGkwX3Jlc291cmNlKSwKKwkucmVzb3VyY2UgICAgICA9IGJmaW5fc3BpMF9yZXNvdXJjZSwKKwkuZGV2ICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc3BpX2JmaW5fbWFzdGVyX2luZm8sIC8qIFBhc3NlZCB0byBkcml2ZXIgKi8KKwl9LAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fVUFSVDAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl91YXJ0MF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IFVBUlQwX1RIUiwKKwkJLmVuZCA9IFVBUlQwX0dDVEwrMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydCA9IElSUV9VQVJUMF9SWCwKKwkJLmVuZCA9IElSUV9VQVJUMF9SWCsxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gSVJRX1VBUlQwX0VSUk9SLAorCQkuZW5kID0gSVJRX1VBUlQwX0VSUk9SLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQ0hfVUFSVDBfVFgsCisJCS5lbmQgPSBDSF9VQVJUMF9UWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwl7CisJCS5zdGFydCA9IENIX1VBUlQwX1JYLAorCQkuZW5kID0gQ0hfVUFSVDBfUlgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0geworCVBfVUFSVDBfVFgsIFBfVUFSVDBfUlgsIDAKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fdWFydDBfZGV2aWNlID0geworCS5uYW1lID0gImJmaW4tdWFydCIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYmZpbl91YXJ0MF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IGJmaW5fdWFydDBfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmJmaW5fdWFydDBfcGVyaXBoZXJhbHMsIC8qIFBhc3NlZCB0byBkcml2ZXIgKi8KKwl9LAorfTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX1VBUlQxCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fdWFydDFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBVQVJUMV9USFIsCisJCS5lbmQgICA9IFVBUlQxX0dDVEwrMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydCA9IElSUV9VQVJUMV9SWCwKKwkJLmVuZCAgID0gSVJRX1VBUlQxX1JYKzEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBJUlFfVUFSVDFfRVJST1IsCisJCS5lbmQgICA9IElSUV9VQVJUMV9FUlJPUiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCA9IENIX1VBUlQxX1RYLAorCQkuZW5kICAgPSBDSF9VQVJUMV9UWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwl7CisJCS5zdGFydCA9IENIX1VBUlQxX1JYLAorCQkuZW5kICAgPSBDSF9VQVJUMV9SWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQxX3BlcmlwaGVyYWxzW10gPSB7CisJUF9VQVJUMV9UWCwgUF9VQVJUMV9SWCwgMAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl91YXJ0MV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgPSAiYmZpbi11YXJ0IiwKKwkuaWQgICAgICAgICAgICA9IDEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGJmaW5fdWFydDFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICA9IGJmaW5fdWFydDFfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmJmaW5fdWFydDFfcGVyaXBoZXJhbHMsIC8qIFBhc3NlZCB0byBkcml2ZXIgKi8KKwl9LAorfTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkNfQkxBQ0tGSU5fVFdJKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfQkxBQ0tGSU5fVFdJX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl90d2kwX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBUV0kwX1JFR0JBU0UsCisJCS5lbmQgICA9IFRXSTBfUkVHQkFTRSArIDB4ZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfVFdJLAorCQkuZW5kICAgPSBJUlFfVFdJLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaTJjX2JmaW5fdHdpX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICA9ICJpMmMtYmZpbi10d2kiLAorCS5pZCAgICAgICAgICAgID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYmZpbl90d2kwX3Jlc291cmNlKSwKKwkucmVzb3VyY2UgICAgICA9IGJmaW5fdHdpMF9yZXNvdXJjZSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRucDUzNzBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQorI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9VQVJUMAorCSZiZmluX3VhcnQwX2RldmljZSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9VQVJUMQorCSZiZmluX3VhcnQxX2RldmljZSwKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQorCSZhc21iX2ZsYXNoX2RldmljZSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9NQUMpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTUFDX01PRFVMRSkKKwkmYmZpbl9taWlfYnVzLAorCSZiZmluX21hY19kZXZpY2UsCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9NT0RVTEUpCisJJnNwaV9iZmluX21hc3Rlcl9kZXZpY2UsCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0kpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0lfTU9EVUxFKQorCSZpMmNfYmZpbl90d2lfZGV2aWNlLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTl9NT0RVTEUpCisJJnJ0Y19kZXZpY2UsCisjZW5kaWYKKworfTsKKworc3RhdGljIGludCBfX2luaXQgZG5wNTM3MF9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiRE5QLzUzNzA6IHJlZ2lzdGVyaW5nIGRldmljZSByZXNvdXJjZXNcbiIpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRucDUzNzBfZGV2aWNlcywgQVJSQVlfU0laRShkbnA1MzcwX2RldmljZXMpKTsKKwlwcmludGsoS0VSTl9JTkZPICJETlAvNTM3MDogcmVnaXN0ZXJpbmcgJXp1IFNQSSBzbGF2ZSBkZXZpY2VzXG4iLAorCSAgICAgICBBUlJBWV9TSVpFKGJmaW5fc3BpX2JvYXJkX2luZm8pKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhiZmluX3NwaV9ib2FyZF9pbmZvLCBBUlJBWV9TSVpFKGJmaW5fc3BpX2JvYXJkX2luZm8pKTsKKwlwcmludGsoS0VSTl9JTkZPICJETlAvNTM3MDogTUFDICVwTVxuIiwgKHZvaWQgKilGTEFTSF9NQUMpOworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChkbnA1MzcwX2luaXQpOworCisvKgorICogQ3VycmVudGx5IHRoZSBNQUMgYWRkcmVzcyBpcyBzYXZlZCBpbiBGbGFzaCBieSBVLUJvb3QKKyAqLwordm9pZCBiZmluX2dldF9ldGhlcl9hZGRyKGNoYXIgKmFkZHIpCit7CisJKih1MzIgKikoJihhZGRyWzBdKSkgPSBiZmluX3JlYWQzMihGTEFTSF9NQUMpOworCSoodTE2ICopKCYoYWRkcls0XSkpID0gYmZpbl9yZWFkMTYoRkxBU0hfTUFDICsgNCk7Cit9CitFWFBPUlRfU1lNQk9MKGJmaW5fZ2V0X2V0aGVyX2FkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9taW5vdGF1ci5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9taW5vdGF1ci5jCmluZGV4IDQ5ODAwNTEuLmJmYjM2NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvbWlub3RhdXIuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL21pbm90YXVyLmMKQEAgLTI2Myw3ICsyNjMsNyBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfVUFSVDBfVFgsIFBfVUFSVDBfUlgsIDAKIH07CiAKQEAgLTMwNiw3ICszMDYsNyBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQxX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MV9wZXJpcGhlcmFsc1tdID0gewogCVBfVUFSVDFfVFgsIFBfVUFSVDFfUlgsIDAKIH07CiAKQEAgLTQxOSw5ICs0MTksOSBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MF9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQwX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9TUE9SVDBfVEZTLCBQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywKLQlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIFBfU1BPUlQwX0RSU0VDLCBQX1NQT1JUMF9EVFNFQywgMAorCVBfU1BPUlQwX0RSUFJJLCBQX1NQT1JUMF9SU0NMSywgMAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zcG9ydDBfdWFydF9kZXZpY2UgPSB7CkBAIC00NTMsOSArNDUzLDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDFfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MV9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQxX1RGUywgUF9TUE9SVDFfRFRQUkksIFBfU1BPUlQxX1RTQ0xLLCBQX1NQT1JUMV9SRlMsCi0JUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCBQX1NQT1JUMV9EUlNFQywgUF9TUE9SVDFfRFRTRUMsIDAKKwlQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQxX3VhcnRfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9wbmF2MTAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvcG5hdjEwLmMKaW5kZXggYjk1ODA3OC4uOTM4OWYwMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9wbmF2MTAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3BuYXYxMC5jCkBAIC0zNjcsNyArMzY3LDcgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQwX1RYLCBQX1VBUlQwX1JYLCAwCiB9OwogCkBAIC00MTAsNyArNDEwLDcgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MV9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDFfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQxX1RYLCBQX1VBUlQxX1JYLCAwCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKaW5kZXggM2FhMzQ0Yy4uMmM2OTc4NSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwpAQCAtMjg5LDcgKzI4OSw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0NBTl9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19DQU5fQkZJTl9NT0RVTEUpCi11bnNpZ25lZCBzaG9ydCBiZmluX2Nhbl9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fY2FuX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9DQU4wX1JYLCBQX0NBTjBfVFgsIDAKIH07CiAKQEAgLTY5Myw3ICs2OTMsNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19BRDJTMTIwWCkgfHwgZGVmaW5lZChDT05GSUdfQUQyUzEyMFhfTU9EVUxFKQotdW5zaWduZWQgc2hvcnQgYWQyczEyMHhfcGxhdGZvcm1fZGF0YVtdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGFkMnMxMjB4X3BsYXRmb3JtX2RhdGFbXSA9IHsKIAkvKiB1c2VkIGFzIFNBTVBMRSBhbmQgUkRWRUwgKi8KIAlHUElPX1BGNSwgR1BJT19QRjYsIDAKIH07CkBAIC03MDUsNyArNzA1LDcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQUQyUzEyMTApIHx8IGRlZmluZWQoQ09ORklHX0FEMlMxMjEwX01PRFVMRSkKLXVuc2lnbmVkIHNob3J0IGFkMnMxMjEwX3BsYXRmb3JtX2RhdGFbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBhZDJzMTIxMF9wbGF0Zm9ybV9kYXRhW10gPSB7CiAJLyogdXNlIGFzIFNBTVBMRSwgQTAsIEExICovCiAJR1BJT19QRjcsIEdQSU9fUEY4LCBHUElPX1BGOSwKICMgaWYgZGVmaW5lZChDT05GSUdfQUQyUzEyMTBfR1BJT19JTlBVVCkgfHwgZGVmaW5lZChDT05GSUdfQUQyUzEyMTBfR1BJT19PVVRQVVQpCkBAIC0xNzE3LDcgKzE3MTcsNyBAQAogI2VuZGlmCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfVUFSVDBfVFgsIFBfVUFSVDBfUlgsIDAKIH07CiAKQEAgLTE3NjAsNyArMTc2MCw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDFfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQxX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMV9UWCwgUF9VQVJUMV9SWCwgMAogfTsKIApAQCAtMjQ0Nyw5ICsyNDQ3LDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQwX1RGUywgUF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsCi0JUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCBQX1NQT1JUMF9EUlNFQywgUF9TUE9SVDBfRFRTRUMsIDAKKwlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQwX3VhcnRfZGV2aWNlID0gewpAQCAtMjQ4MSw5ICsyNDgxLDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDFfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MV9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQxX1RGUywgUF9TUE9SVDFfRFRQUkksIFBfU1BPUlQxX1RTQ0xLLCBQX1NQT1JUMV9SRlMsCi0JUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCBQX1NQT1JUMV9EUlNFQywgUF9TUE9SVDFfRFRTRUMsIDAKKwlQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQxX3VhcnRfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy90Y21fYmY1MzcuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvdGNtX2JmNTM3LmMKaW5kZXggMzE0OThhZC4uMDc2MWIyMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy90Y21fYmY1MzcuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3RjbV9iZjUzNy5jCkBAIC0zNTYsNyArMzU2LDcgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQwX1RYLCBQX1VBUlQwX1JYLCAwCiB9OwogCkBAIC0zOTksNyArMzk5LDcgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MV9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDFfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQxX1RYLCBQX1VBUlQxX1JYLCAwCiB9OwogCkBAIC01MTIsOSArNTEyLDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQwX1RGUywgUF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsCi0JUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCBQX1NQT1JUMF9EUlNFQywgUF9TUE9SVDBfRFRTRUMsIDAKKwlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQwX3VhcnRfZGV2aWNlID0gewpAQCAtNTQ2LDkgKzU0Niw5IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQxX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDFfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1NQT1JUMV9URlMsIFBfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgUF9TUE9SVDFfUkZTLAotCVBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgUF9TUE9SVDFfRFJTRUMsIFBfU1BPUlQxX0RUU0VDLCAwCisJUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCAwCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MV91YXJ0X2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9kbWEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9kbWEuYwppbmRleCA1YzhjNGVkLi41YzYyZTk5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvZG1hLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2RtYS5jCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogCi1zdHJ1Y3QgZG1hX3JlZ2lzdGVyICpkbWFfaW9fYmFzZV9hZGRyW01BWF9ETUFfQ0hBTk5FTFNdID0geworc3RydWN0IGRtYV9yZWdpc3RlciAqIGNvbnN0IGRtYV9pb19iYXNlX2FkZHJbTUFYX0RNQV9DSEFOTkVMU10gPSB7CiAJKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgRE1BMF9ORVhUX0RFU0NfUFRSLAogCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIERNQTFfTkVYVF9ERVNDX1BUUiwKIAkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBETUEyX05FWFRfREVTQ19QVFIsCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBjNjAzZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWwuaApAQCAtMCwwICsxLDE0IEBACisvKgorICogbWFjaC9iZmluX3NlcmlhbC5oIC0gQmxhY2tmaW4gVUFSVC9TZXJpYWwgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2lmbmRlZiBfX0JGSU5fTUFDSF9TRVJJQUxfSF9fCisjZGVmaW5lIF9fQkZJTl9NQUNIX1NFUklBTF9IX18KKworI2RlZmluZSBCRklOX1VBUlRfTlJfUE9SVFMJMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IDYzNWM5MWMuLjNlOTU1ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtNCwzNiArNCw5IEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+CiAKLSNkZWZpbmUgVUFSVF9HRVRfQ0hBUih1YXJ0KSAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX1JCUikpCi0jZGVmaW5lIFVBUlRfR0VUX0RMTCh1YXJ0KQliZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExMKSkKLSNkZWZpbmUgVUFSVF9HRVRfSUVSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lFUikpCi0jZGVmaW5lIFVBUlRfR0VUX0RMSCh1YXJ0KQliZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExIKSkKLSNkZWZpbmUgVUFSVF9HRVRfSUlSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lJUikpCi0jZGVmaW5lIFVBUlRfR0VUX0xDUih1YXJ0KSAgICAgIGJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MQ1IpKQotI2RlZmluZSBVQVJUX0dFVF9HQ1RMKHVhcnQpICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfR0NUTCkpCi0KLSNkZWZpbmUgVUFSVF9QVVRfQ0hBUih1YXJ0LHYpICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9USFIpLHYpCi0jZGVmaW5lIFVBUlRfUFVUX0RMTCh1YXJ0LHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExMKSx2KQotI2RlZmluZSBVQVJUX1BVVF9JRVIodWFydCx2KSAgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lFUiksdikKLSNkZWZpbmUgVUFSVF9TRVRfSUVSKHVhcnQsdikgICAgVUFSVF9QVVRfSUVSKHVhcnQsIFVBUlRfR0VUX0lFUih1YXJ0KSB8ICh2KSkKLSNkZWZpbmUgVUFSVF9DTEVBUl9JRVIodWFydCx2KSAgVUFSVF9QVVRfSUVSKHVhcnQsIFVBUlRfR0VUX0lFUih1YXJ0KSAmIH4odikpCi0jZGVmaW5lIFVBUlRfUFVUX0RMSCh1YXJ0LHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExIKSx2KQotI2RlZmluZSBVQVJUX1BVVF9MQ1IodWFydCx2KSAgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xDUiksdikKLSNkZWZpbmUgVUFSVF9QVVRfR0NUTCh1YXJ0LHYpICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9HQ1RMKSx2KQotCi0jZGVmaW5lIFVBUlRfU0VUX0RMQUIodWFydCkgICAgIGRvIHsgVUFSVF9QVVRfTENSKHVhcnQsIFVBUlRfR0VUX0xDUih1YXJ0KSB8IERMQUIpOyBTU1lOQygpOyB9IHdoaWxlICgwKQotI2RlZmluZSBVQVJUX0NMRUFSX0RMQUIodWFydCkgICBkbyB7IFVBUlRfUFVUX0xDUih1YXJ0LCBVQVJUX0dFVF9MQ1IodWFydCkgJiB+RExBQik7IFNTWU5DKCk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgVUFSVF9HRVRfQ1RTKHgpIGdwaW9fZ2V0X3ZhbHVlKHgtPmN0c19waW4pCi0jZGVmaW5lIFVBUlRfRElTQUJMRV9SVFMoeCkgZ3Bpb19zZXRfdmFsdWUoeC0+cnRzX3BpbiwgMSkKLSNkZWZpbmUgVUFSVF9FTkFCTEVfUlRTKHgpIGdwaW9fc2V0X3ZhbHVlKHgtPnJ0c19waW4sIDApCi0jZGVmaW5lIFVBUlRfRU5BQkxFX0lOVFMoeCwgdikgVUFSVF9QVVRfSUVSKHgsIHYpCi0jZGVmaW5lIFVBUlRfRElTQUJMRV9JTlRTKHgpIFVBUlRfUFVUX0lFUih4LCAwKQotCiAjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9VQVJUMF9DVFNSVFMpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fVUFSVDFfQ1RTUlRTKQogIyBkZWZpbmUgQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUwogCkBAIC01NCw0OSArMjcsNiBAQAogIyBlbmRpZgogI2VuZGlmCiAKLSNkZWZpbmUgQkZJTl9VQVJUX1RYX0ZJRk9fU0laRQkyCi0KLS8qCi0gKiBUaGUgcGluIGNvbmZpZ3VyYXRpb24gaXMgZGlmZmVyZW50IGZyb20gc2NoZW1hdGljCi0gKi8KLXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0IHsKLSAgICAgICAgc3RydWN0IHVhcnRfcG9ydCAgICAgICAgcG9ydDsKLSAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgb2xkX3N0YXR1czsKLQlpbnQJCQlzdGF0dXNfaXJxOwotCXVuc2lnbmVkIGludCBsc3I7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0RNQQotCWludAkJCXR4X2RvbmU7Ci0JaW50CQkJdHhfY291bnQ7Ci0Jc3RydWN0IGNpcmNfYnVmCQlyeF9kbWFfYnVmOwotCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHJ4X2RtYV90aW1lcjsKLQlpbnQJCQlyeF9kbWFfbnJvd3M7Ci0JdW5zaWduZWQgaW50CQl0eF9kbWFfY2hhbm5lbDsKLQl1bnNpZ25lZCBpbnQJCXJ4X2RtYV9jaGFubmVsOwotCXN0cnVjdCB3b3JrX3N0cnVjdAl0eF9kbWFfd29ya3F1ZXVlOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUwotCWludAkJY3RzX3BpbjsKLQlpbnQgCQlydHNfcGluOwotI2VuZGlmCi19OwotCi0vKiBUaGUgaGFyZHdhcmUgY2xlYXJzIHRoZSBMU1IgYml0cyB1cG9uIHJlYWQsIHNvIHdlIG5lZWQgdG8gY2FjaGUKLSAqIHNvbWUgb2YgdGhlIG1vcmUgZnVuIGJpdHMgaW4gc29mdHdhcmUgc28gdGhleSBkb24ndCBnZXQgbG9zdAotICogd2hlbiBjaGVja2luZyB0aGUgTFNSIGluIG90aGVyIGNvZGUgcGF0aHMgKFRYKS4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgVUFSVF9HRVRfTFNSKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0KQotewotCXVuc2lnbmVkIGludCBsc3IgPSBiZmluX3JlYWQxNih1YXJ0LT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTFNSKTsKLQl1YXJ0LT5sc3IgfD0gKGxzciAmIChCSXxGRXxQRXxPRSkpOwotCXJldHVybiBsc3IgfCB1YXJ0LT5sc3I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBVQVJUX0NMRUFSX0xTUihzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCkKLXsKLQl1YXJ0LT5sc3IgPSAwOwotCWJmaW5fd3JpdGUxNih1YXJ0LT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTFNSLCAtMSk7Ci19Ci0KIHN0cnVjdCBiZmluX3NlcmlhbF9yZXMgewogCXVuc2lnbmVkIGxvbmcJdWFydF9iYXNlX2FkZHI7CiAJaW50CQl1YXJ0X2lycTsKQEAgLTE0NSwzICs3NSw1IEBACiB9OwogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJiZmluLXVhcnQiCisKKyNpbmNsdWRlIDxhc20vYmZpbl9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCBhMTJkNGI2Li5iYWEwOTZmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDUtMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwpAQCAtMTAsMzQgKzEwLDI0IEBACiAjZGVmaW5lIEJGNTM3X0ZBTUlMWQogCiAjaW5jbHVkZSAiYmY1MzcuaCIKLSNpbmNsdWRlICJkZWZCRjUzNC5oIgogI2luY2x1ZGUgImFub21hbHkuaCIKIAorI2luY2x1ZGUgPGFzbS9kZWZfTFBCbGFja2Zpbi5oPgorI2lmZGVmIENPTkZJR19CRjUzNAorIyBpbmNsdWRlICJkZWZCRjUzNC5oIgorI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQkY1MzcpIHx8IGRlZmluZWQoQ09ORklHX0JGNTM2KQotI2luY2x1ZGUgImRlZkJGNTM3LmgiCisjIGluY2x1ZGUgImRlZkJGNTM3LmgiCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykKLSNpbmNsdWRlICJjZGVmQkY1MzQuaCIKLQotI2lmIGRlZmluZWQoQ09ORklHX0JGNTM3KSB8fCBkZWZpbmVkKENPTkZJR19CRjUzNikKLSNpbmNsdWRlICJjZGVmQkY1MzcuaCIKKyMgaW5jbHVkZSA8YXNtL2NkZWZfTFBCbGFja2Zpbi5oPgorIyBpZmRlZiBDT05GSUdfQkY1MzQKKyMgIGluY2x1ZGUgImNkZWZCRjUzNC5oIgorIyBlbmRpZgorIyBpZiBkZWZpbmVkKENPTkZJR19CRjUzNykgfHwgZGVmaW5lZChDT05GSUdfQkY1MzYpCisjICBpbmNsdWRlICJjZGVmQkY1MzcuaCIKKyMgZW5kaWYKICNlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgQkZJTl9VQVJUX05SX1BPUlRTCTIKLQotI2RlZmluZSBPRkZTRVRfVEhSICAgICAgICAgICAgICAweDAwCS8qIFRyYW5zbWl0IEhvbGRpbmcgcmVnaXN0ZXIgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfUkJSICAgICAgICAgICAgICAweDAwCS8qIFJlY2VpdmUgQnVmZmVyIHJlZ2lzdGVyICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfRExMICAgICAgICAgICAgICAweDAwCS8qIERpdmlzb3IgTGF0Y2ggKExvdy1CeXRlKSAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfSUVSICAgICAgICAgICAgICAweDA0CS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfRExIICAgICAgICAgICAgICAweDA0CS8qIERpdmlzb3IgTGF0Y2ggKEhpZ2gtQnl0ZSkgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfSUlSICAgICAgICAgICAgICAweDA4CS8qIEludGVycnVwdCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAgICAqLwotI2RlZmluZSBPRkZTRVRfTENSICAgICAgICAgICAgICAweDBDCS8qIExpbmUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfTUNSICAgICAgICAgICAgICAweDEwCS8qIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfTFNSICAgICAgICAgICAgICAweDE0CS8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfTVNSICAgICAgICAgICAgICAweDE4CS8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfU0NSICAgICAgICAgICAgICAweDFDCS8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfR0NUTCAgICAgICAgICAgICAweDI0CS8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNC5oCmluZGV4IGZiZWIzNWUuLjU2M2VkZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA1LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCkBAIC03LDE0ICs3LDYgQEAKICNpZm5kZWYgX0NERUZfQkY1MzRfSAogI2RlZmluZSBfQ0RFRl9CRjUzNF9ICiAKLSNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KLQotLyogSW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAJCQkJCQkJCQkqLwotI2luY2x1ZGUgImRlZkJGNTM0LmgiCi0KLS8qIEluY2x1ZGUgY29yZSBzcGVjaWZpYyByZWdpc3RlciBwb2ludGVyIGRlZmluaXRpb25zIAkJCQkJCQkJKi8KLSNpbmNsdWRlIDxhc20vY2RlZl9MUEJsYWNrZmluLmg+Ci0KIC8qIENsb2NrIGFuZCBTeXN0ZW0gQ29udHJvbAkoMHhGRkMwMDAwMCAtIDB4RkZDMDAwRkYpCQkJCQkJCQkqLwogI2RlZmluZSBiZmluX3JlYWRfUExMX0NUTCgpICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoUExMX0NUTCkKICNkZWZpbmUgYmZpbl9yZWFkX1BMTF9ESVYoKSAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KFBMTF9ESVYpCkBAIC0zNTUsMTYgKzM0NywxMCBAQAogI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfU0RTVEFUKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTE2KEVCSVVfU0RTVEFULHZhbCkKIAogLyogRE1BIFRyYWZmaWMgQ29udHJvbCBSZWdpc3RlcnMJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgYmZpbl9yZWFkX0RNQV9UQ19QRVIoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUFfVENfUEVSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQV9UQ19QRVIodmFsKSAgICAgICAgICAgIGJmaW5fd3JpdGUxNihETUFfVENfUEVSLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQV9UQ19DTlQoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUFfVENfQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQV9UQ19DTlQodmFsKSAgICAgICAgICAgIGJmaW5fd3JpdGUxNihETUFfVENfQ05ULHZhbCkKLQotLyogQWx0ZXJuYXRlIGRlcHJlY2F0ZWQgcmVnaXN0ZXIgbmFtZXMgKGJlbG93KSBwcm92aWRlZCBmb3IgYmFja3dhcmRzIGNvZGUgY29tcGF0aWJpbGl0eSAqLwotI2RlZmluZSBiZmluX3JlYWRfRE1BX1RDUEVSKCkgICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoRE1BX1RDUEVSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQV9UQ1BFUih2YWwpICAgICAgICAgICAgYmZpbl93cml0ZTE2KERNQV9UQ1BFUix2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUFfVENDTlQoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUFfVENDTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BX1RDQ05UKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMTYoRE1BX1RDQ05ULHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQUNfVENfUEVSKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KERNQUNfVENfUEVSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQUNfVENfUEVSKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTE2KERNQUNfVENfUEVSLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQUNfVENfQ05UKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KERNQUNfVENfQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQUNfVENfQ05UKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTE2KERNQUNfVENfQ05ULHZhbCkKIAogLyogRE1BIENvbnRyb2xsZXIJCQkJCQkJCQkJCQkJCQkJCSovCiAjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX0NPTkZJRygpICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUEwX0NPTkZJRykKQEAgLTE3NDcsNyArMTczMyw0IEBACiAjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfQkNPVU5UKCkgICAgICAgICAgICBiZmluX3JlYWQxNihITURNQTFfQkNPVU5UKQogI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9CQ09VTlQodmFsKSAgICAgICAgYmZpbl93cml0ZTE2KEhNRE1BMV9CQ09VTlQsdmFsKQogCi0vKiBUaGVzZSBuZWVkIHRvIGJlIGxhc3QgZHVlIHRvIHRoZSBjZGVmL2xpbnV4IGludGVyLWRlcGVuZGVuY2llcyAqLwotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQogI2VuZGlmCQkJCS8qIF9DREVGX0JGNTM0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNy5oCmluZGV4IDkzNjNjMzkuLjE5ZWMyMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA1LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCkBAIC0xMCw5ICsxMCw2IEBACiAvKiBJbmNsdWRlIE1NUnMgQ29tbW9uIHRvIEJGNTM0IAkJCQkJCQkJKi8KICNpbmNsdWRlICJjZGVmQkY1MzQuaCIKIAotLyogSW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAJCQkJCQkJCQkqLwotI2luY2x1ZGUgImRlZkJGNTM3LmgiCi0KIC8qIEluY2x1ZGUgTWFjcm8gIkRlZmluZXMiIEZvciBFTUFDIChVbmlxdWUgdG8gQkY1MzYvQkY1MzcJCSovCiAvKiAxMC8xMDAgRXRoZXJuZXQgQ29udHJvbGxlcgkoMHhGRkMwMzAwMCAtIDB4RkZDMDMxRkYpIAkJCQkJCSovCiAjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX09QTU9ERSgpICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX09QTU9ERSkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzQuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzQuaAppbmRleCAwMzIzZTZiLi43MjViYjM1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDUtMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCkBAIC03LDkgKzcsNiBAQAogI2lmbmRlZiBfREVGX0JGNTM0X0gKICNkZWZpbmUgX0RFRl9CRjUzNF9ICiAKLS8qIEluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxhc20vZGVmX0xQQmxhY2tmaW4uaD4KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiogU3lzdGVtIE1NUiBSZWdpc3RlciBNYXAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xOTMsMTIgKzE5MCw4IEBACiAjZGVmaW5lIEVCSVVfU0RTVEFUCQkJMHhGRkMwMEExQwkvKiBTRFJBTSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAvKiBETUEgVHJhZmZpYyBDb250cm9sIFJlZ2lzdGVycwkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBETUFfVENfUEVSCQkJMHhGRkMwMEIwQwkvKiBUcmFmZmljIENvbnRyb2wgUGVyaW9kcyBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIERNQV9UQ19DTlQJCQkweEZGQzAwQjEwCS8qIFRyYWZmaWMgQ29udHJvbCBDdXJyZW50IENvdW50cyBSZWdpc3RlcgkqLwotCi0vKiBBbHRlcm5hdGUgZGVwcmVjYXRlZCByZWdpc3RlciBuYW1lcyAoYmVsb3cpIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29kZSBjb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lIERNQV9UQ1BFUgkJCTB4RkZDMDBCMEMJLyogVHJhZmZpYyBDb250cm9sIFBlcmlvZHMgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBETUFfVENDTlQJCQkweEZGQzAwQjEwCS8qIFRyYWZmaWMgQ29udHJvbCBDdXJyZW50IENvdW50cyBSZWdpc3RlcgkqLworI2RlZmluZSBETUFDX1RDX1BFUgkJCTB4RkZDMDBCMEMJLyogVHJhZmZpYyBDb250cm9sIFBlcmlvZHMgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBETUFDX1RDX0NOVAkJCTB4RkZDMDBCMTAJLyogVHJhZmZpYyBDb250cm9sIEN1cnJlbnQgQ291bnRzIFJlZ2lzdGVyCSovCiAKIC8qIERNQSBDb250cm9sbGVyICgweEZGQzAwQzAwIC0gMHhGRkMwMEZGRikJCQkJCQkJCQkJCQkJCQkqLwogI2RlZmluZSBETUEwX05FWFRfREVTQ19QVFIJCTB4RkZDMDBDMDAJLyogRE1BIENoYW5uZWwgMCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAgICAgICAgICAgICAgICovCkBAIC0xMDI5LDQ4ICsxMDIyLDYgQEAKICNkZWZpbmUgSVdSX0VOQUJMRSh4KQkoMSA8PCAoKHgpJjB4MUYpKQkvKiBXYWtldXAgRW5hYmxlIFBlcmlwaGVyYWwgI3ggICAgICAgICAgKi8KICNkZWZpbmUgSVdSX0RJU0FCTEUoeCkJKDB4RkZGRkZGRkYgXiAoMSA8PCAoKHgpJjB4MUYpKSkJLyogV2FrZXVwIERpc2FibGUgUGVyaXBoZXJhbCAjeCAgICAgICAgICovCiAKLS8qICoqKioqKioqKioqKioqIFVBUlQgQ09OVFJPTExFUiBNQVNLUyAqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogVUFSVHhfTENSIE1hc2tzCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgV0xTKHgpCQkoKCh4KS01KSAmIDB4MDMpCS8qIFdvcmQgTGVuZ3RoIFNlbGVjdCAgICovCi0jZGVmaW5lIFNUQgkJCTB4MDQJLyogU3RvcCBCaXRzICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBQRU4JCQkweDA4CS8qIFBhcml0eSBFbmFibGUgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRVBTCQkJMHgxMAkvKiBFdmVuIFBhcml0eSBTZWxlY3QgICAqLwotI2RlZmluZSBTVFAJCQkweDIwCS8qIFN0aWNrIFBhcml0eSAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0IJCQkweDQwCS8qIFNldCBCcmVhayAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRExBQgkJMHg4MAkvKiBEaXZpc29yIExhdGNoIEFjY2VzcyAqLwotCi0vKiBVQVJUeF9NQ1IgTWFzawkJCQkJCQkJCQkqLwotI2RlZmluZSBMT09QX0VOQQkJMHgxMAkvKiBMb29wYmFjayBNb2RlIEVuYWJsZSAgICAgICAgICovCi0jZGVmaW5lIExPT1BfRU5BX1AJMHgwNAotLyogVUFSVHhfTFNSIE1hc2tzCQkJCQkJCQkJCSovCi0jZGVmaW5lIERSCQkJMHgwMQkvKiBEYXRhIFJlYWR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0UJCQkweDAyCS8qIE92ZXJydW4gRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBQRQkJCTB4MDQJLyogUGFyaXR5IEVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZFCQkJMHgwOAkvKiBGcmFtaW5nIEVycm9yICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQkkJCQkweDEwCS8qIEJyZWFrIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBUSFJFCQkweDIwCS8qIFRIUiBFbXB0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBURU1UCQkweDQwCS8qIFRTUiBhbmQgVUFSVF9USFIgRW1wdHkgICAgICAgKi8KLQotLyogVUFSVHhfSUVSIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgRVJCRkkJCTB4MDEJLyogRW5hYmxlIFJlY2VpdmUgQnVmZmVyIEZ1bGwgSW50ZXJydXB0ICAgICAgICAgKi8KLSNkZWZpbmUgRVRCRUkJCTB4MDIJLyogRW5hYmxlIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eSBJbnRlcnJ1cHQgICAgICAgKi8KLSNkZWZpbmUgRUxTSQkJMHgwNAkvKiBFbmFibGUgUlggU3RhdHVzIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLS8qIFVBUlR4X0lJUiBNYXNrcwkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgTklOVAkJMHgwMQkvKiBQZW5kaW5nIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIElJUl9UWF9SRUFEWSAgICAweDAyCS8qIFVBUlRfVEhSIGVtcHR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIElJUl9SWF9SRUFEWSAgICAweDA0CS8qIFJlY2VpdmUgZGF0YSByZWFkeSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIElJUl9MSU5FX0NIQU5HRSAweDA2CS8qIFJlY2VpdmUgbGluZSBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIElJUl9TVEFUVVMJMHgwNgotCi0vKiBVQVJUeF9HQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFVDRU4JCTB4MDEJLyogRW5hYmxlIFVBUlR4IENsb2NrcyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSVJFTgkJMHgwMgkvKiBFbmFibGUgSXJEQSBNb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRQT0xDCQkweDA0CS8qIElyREEgVFggUG9sYXJpdHkgQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJQT0xDCQkweDA4CS8qIElyREEgUlggUG9sYXJpdHkgQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZQRQkJCTB4MTAJLyogRm9yY2UgUGFyaXR5IEVycm9yIE9uIFRyYW5zbWl0ICAgICAgICovCi0jZGVmaW5lIEZGRQkJCTB4MjAJLyogRm9yY2UgRnJhbWluZyBFcnJvciBPbiBUcmFuc21pdCAgICAgICovCi0KIC8qICAqKioqKioqKioqKioqKioqICBHRU5FUkFMIFBVUlBPU0UgVElNRVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKiovCiAvKiBUSU1FUl9FTkFCTEUgTWFza3MJCQkJCQkJCQkJCQkJKi8KICNkZWZpbmUgVElNRU4wCQkJMHgwMDAxCS8qIEVuYWJsZSBUaW1lciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTExNDEsNjIgKzEwOTIsNiBAQAogI2RlZmluZSBFTVVfUlVOCQkJMHgwMjAwCS8qIEVtdWxhdGlvbiBCZWhhdmlvciBTZWxlY3QgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEVSUl9UWVAJCQkweEMwMDAJLyogRXJyb3IgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLS8qICoqKioqKioqKioqKioqKioqKiAgIEdQSU8gUE9SVFMgRiwgRywgSCBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgR2VuZXJhbCBQdXJwb3NlIElPICgweEZGQzAwNzAwIC0gMHhGRkMwMDdGRikgIE1hc2tzIAkJCQkqLwotLyogUG9ydCBGIE1hc2tzIAkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUEYwCQkweDAwMDEKLSNkZWZpbmUgUEYxCQkweDAwMDIKLSNkZWZpbmUgUEYyCQkweDAwMDQKLSNkZWZpbmUgUEYzCQkweDAwMDgKLSNkZWZpbmUgUEY0CQkweDAwMTAKLSNkZWZpbmUgUEY1CQkweDAwMjAKLSNkZWZpbmUgUEY2CQkweDAwNDAKLSNkZWZpbmUgUEY3CQkweDAwODAKLSNkZWZpbmUgUEY4CQkweDAxMDAKLSNkZWZpbmUgUEY5CQkweDAyMDAKLSNkZWZpbmUgUEYxMAkweDA0MDAKLSNkZWZpbmUgUEYxMQkweDA4MDAKLSNkZWZpbmUgUEYxMgkweDEwMDAKLSNkZWZpbmUgUEYxMwkweDIwMDAKLSNkZWZpbmUgUEYxNAkweDQwMDAKLSNkZWZpbmUgUEYxNQkweDgwMDAKLQotLyogUG9ydCBHIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUEcwCQkweDAwMDEKLSNkZWZpbmUgUEcxCQkweDAwMDIKLSNkZWZpbmUgUEcyCQkweDAwMDQKLSNkZWZpbmUgUEczCQkweDAwMDgKLSNkZWZpbmUgUEc0CQkweDAwMTAKLSNkZWZpbmUgUEc1CQkweDAwMjAKLSNkZWZpbmUgUEc2CQkweDAwNDAKLSNkZWZpbmUgUEc3CQkweDAwODAKLSNkZWZpbmUgUEc4CQkweDAxMDAKLSNkZWZpbmUgUEc5CQkweDAyMDAKLSNkZWZpbmUgUEcxMAkweDA0MDAKLSNkZWZpbmUgUEcxMQkweDA4MDAKLSNkZWZpbmUgUEcxMgkweDEwMDAKLSNkZWZpbmUgUEcxMwkweDIwMDAKLSNkZWZpbmUgUEcxNAkweDQwMDAKLSNkZWZpbmUgUEcxNQkweDgwMDAKLQotLyogUG9ydCBIIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUEgwCQkweDAwMDEKLSNkZWZpbmUgUEgxCQkweDAwMDIKLSNkZWZpbmUgUEgyCQkweDAwMDQKLSNkZWZpbmUgUEgzCQkweDAwMDgKLSNkZWZpbmUgUEg0CQkweDAwMTAKLSNkZWZpbmUgUEg1CQkweDAwMjAKLSNkZWZpbmUgUEg2CQkweDAwNDAKLSNkZWZpbmUgUEg3CQkweDAwODAKLSNkZWZpbmUgUEg4CQkweDAxMDAKLSNkZWZpbmUgUEg5CQkweDAyMDAKLSNkZWZpbmUgUEgxMAkweDA0MDAKLSNkZWZpbmUgUEgxMQkweDA4MDAKLSNkZWZpbmUgUEgxMgkweDEwMDAKLSNkZWZpbmUgUEgxMwkweDIwMDAKLSNkZWZpbmUgUEgxNAkweDQwMDAKLSNkZWZpbmUgUEgxNQkweDgwMDAKLQogLyogKioqKioqKioqKioqKioqKioqKioqICBBU1lOQ0hST05PVVMgTUVNT1JZIENPTlRST0xMRVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBFQklVX0FNR0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJKi8KICNkZWZpbmUgQU1DS0VOCQkJMHgwMDAxCS8qIEVuYWJsZSBDTEtPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTUyMyw3ICsxNDE4LDcgQEAKICNkZWZpbmUJU0FERF9MRU4JMHgwMDAyCS8qIFNsYXZlIEFkZHJlc3MgTGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lCVNURFZBTAkJMHgwMDA0CS8qIFNsYXZlIFRyYW5zbWl0IERhdGEgVmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZQlOQUsJCQkweDAwMDgJLyogTkFLL0FDSyogR2VuZXJhdGVkIEF0IENvbmNsdXNpb24gT2YgVHJhbnNmZXIgKi8KLSNkZWZpbmUJR0VOCQkJMHgwMDEwCS8qIEdlbmVyYWwgQ2FsbCBBZHJyZXNzIE1hdGNoaW5nIEVuYWJsZWQgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJR0VOCQkJMHgwMDEwCS8qIEdlbmVyYWwgQ2FsbCBBZGRyZXNzIE1hdGNoaW5nIEVuYWJsZWQgICAgICAgICAgICAgICAgKi8KIAogLyogVFdJX1NMQVZFX1NUQVQgTWFza3MJCQkJCQkJCQkJCQkJCQkqLwogI2RlZmluZQlTRElSCQkweDAwMDEJLyogU2xhdmUgVHJhbnNmZXIgRGlyZWN0aW9uIChUcmFuc21pdC9SZWNlaXZlKikgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzcuaAppbmRleCA4Y2I1ZDVjLi4zZDQ3MWQ3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDUtMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCkBAIC03LDkgKzcsNiBAQAogI2lmbmRlZiBfREVGX0JGNTM3X0gKICNkZWZpbmUgX0RFRl9CRjUzN19ICiAKLS8qIEluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMqLwotI2luY2x1ZGUgPGFzbS9jZGVmX0xQQmxhY2tmaW4uaD4KLQogLyogSW5jbHVkZSBhbGwgTU1SIGFuZCBiaXQgZGVmaW5lcyBjb21tb24gdG8gQkY1MzQgKi8KICNpbmNsdWRlICJkZWZCRjUzNC5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IGY4MGMyOTkuLmZiYTYwNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC02Miw0ICs2Miw4IEBACiAjZGVmaW5lIFBPUlRfRyBHUElPX1BHMAogI2RlZmluZSBQT1JUX0ggR1BJT19QSDAKIAorI2luY2x1ZGUgPG1hY2gtY29tbW9uL3BvcnRzLWYuaD4KKyNpbmNsdWRlIDxtYWNoLWNvbW1vbi9wb3J0cy1nLmg+CisjaW5jbHVkZSA8bWFjaC1jb21tb24vcG9ydHMtaC5oPgorCiAjZW5kaWYgLyogX01BQ0hfR1BJT19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wbGwuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvcGxsLmgKaW5kZXggMTY5YzEwNi4uOTRjY2E2NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wbGwuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL3BsbC5oCkBAIC0xLDU3ICsxIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCi0gKi8KLQotI2lmbmRlZiBfTUFDSF9QTExfSAotI2RlZmluZSBfTUFDSF9QTExfSAotCi0jaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+Ci0jaW5jbHVkZSA8YXNtL2lycWZsYWdzLmg+Ci0KLS8qIFdyaXRpbmcgdG8gUExMX0NUTCBpbml0aWF0ZXMgYSBQTEwgcmVsb2NrIHNlcXVlbmNlLiAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZCBiZmluX3dyaXRlX1BMTF9DVEwodW5zaWduZWQgaW50IHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpd3I7Ci0KLQlpZiAodmFsID09IGJmaW5fcmVhZF9QTExfQ1RMKCkpCi0JCXJldHVybjsKLQotCWZsYWdzID0gaGFyZF9sb2NhbF9pcnFfc2F2ZSgpOwotCS8qIEVuYWJsZSB0aGUgUExMIFdha2V1cCBiaXQgaW4gU0lDIElXUiAqLwotCWl3ciA9IGJmaW5fcmVhZDMyKFNJQ19JV1IpOwotCS8qIE9ubHkgYWxsb3cgUFBMIFdha2V1cCkgKi8KLQliZmluX3dyaXRlMzIoU0lDX0lXUiwgSVdSX0VOQUJMRSgwKSk7Ci0KLQliZmluX3dyaXRlMTYoUExMX0NUTCwgdmFsKTsKLQlTU1lOQygpOwotCWFzbSgiSURMRTsiKTsKLQotCWJmaW5fd3JpdGUzMihTSUNfSVdSLCBpd3IpOwotCWhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKiBXcml0aW5nIHRvIFZSX0NUTCBpbml0aWF0ZXMgYSBQTEwgcmVsb2NrIHNlcXVlbmNlLiAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZCBiZmluX3dyaXRlX1ZSX0NUTCh1bnNpZ25lZCBpbnQgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGl3cjsKLQotCWlmICh2YWwgPT0gYmZpbl9yZWFkX1ZSX0NUTCgpKQotCQlyZXR1cm47Ci0KLQlmbGFncyA9IGhhcmRfbG9jYWxfaXJxX3NhdmUoKTsKLQkvKiBFbmFibGUgdGhlIFBMTCBXYWtldXAgYml0IGluIFNJQyBJV1IgKi8KLQlpd3IgPSBiZmluX3JlYWQzMihTSUNfSVdSKTsKLQkvKiBPbmx5IGFsbG93IFBQTCBXYWtldXApICovCi0JYmZpbl93cml0ZTMyKFNJQ19JV1IsIElXUl9FTkFCTEUoMCkpOwotCi0JYmZpbl93cml0ZTE2KFZSX0NUTCwgdmFsKTsKLQlTU1lOQygpOwotCWFzbSgiSURMRTsiKTsKLQotCWJmaW5fd3JpdGUzMihTSUNfSVdSLCBpd3IpOwotCWhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0jZW5kaWYgLyogX01BQ0hfUExMX0ggKi8KKyNpbmNsdWRlIDxtYWNoLWNvbW1vbi9wbGwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9ib2FyZHMvZXpraXQuYwppbmRleCBjNmZiMGE1Li5lNjE0MjRlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2JvYXJkcy9lemtpdC5jCkBAIC04Miw3ICs4Miw3IEBACiAjZW5kaWYKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMF9UWCwgUF9VQVJUMF9SWCwgMAogfTsKIApAQCAtMTI1LDcgKzEyNSw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDFfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQxX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMV9UWCwgUF9VQVJUMV9SWCwgMAogfTsKIApAQCAtMTY4LDcgKzE2OCw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDJfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQyX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMl9UWCwgUF9VQVJUMl9SWCwgMAogfTsKIApAQCAtMjgyLDkgKzI4Miw5IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQwX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1NQT1JUMF9URlMsIFBfU1BPUlQwX0RUUFJJLCBQX1NQT1JUMF9UU0NMSywgUF9TUE9SVDBfUkZTLAotCVBfU1BPUlQwX0RSUFJJLCBQX1NQT1JUMF9SU0NMSywgUF9TUE9SVDBfRFJTRUMsIFBfU1BPUlQwX0RUU0VDLCAwCisJUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCAwCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MF91YXJ0X2RldmljZSA9IHsKQEAgLTMxNiw5ICszMTYsOSBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MV9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQxX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9TUE9SVDFfVEZTLCBQX1NQT1JUMV9EVFBSSSwgUF9TUE9SVDFfVFNDTEssIFBfU1BPUlQxX1JGUywKLQlQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIFBfU1BPUlQxX0RSU0VDLCBQX1NQT1JUMV9EVFNFQywgMAorCVBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgMAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zcG9ydDFfdWFydF9kZXZpY2UgPSB7CkBAIC0zNTAsNyArMzUwLDcgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDJfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0Ml9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQyX1RGUywgUF9TUE9SVDJfRFRQUkksIFBfU1BPUlQyX1RTQ0xLLCBQX1NQT1JUMl9SRlMsCiAJUF9TUE9SVDJfRFJQUkksIFBfU1BPUlQyX1JTQ0xLLCBQX1NQT1JUMl9EUlNFQywgUF9TUE9SVDJfRFRTRUMsIDAKIH07CkBAIC0zODQsNyArMzg0LDcgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDNfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0M19wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQzX1RGUywgUF9TUE9SVDNfRFRQUkksIFBfU1BPUlQzX1RTQ0xLLCBQX1NQT1JUM19SRlMsCiAJUF9TUE9SVDNfRFJQUkksIFBfU1BPUlQzX1JTQ0xLLCBQX1NQT1JUM19EUlNFQywgUF9TUE9SVDNfRFRTRUMsIDAKIH07CkBAIC00MDIsNyArNDAyLDcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQ0FOX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX0NBTl9CRklOX01PRFVMRSkKLXVuc2lnbmVkIHNob3J0IGJmaW5fY2FuX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl9jYW5fcGVyaXBoZXJhbHNbXSA9IHsKIAlQX0NBTjBfUlgsIFBfQ0FOMF9UWCwgMAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2RtYS5jCmluZGV4IDVkYzAyMjUuLmNjZThlZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvZG1hLmMKQEAgLTExLDcgKzExLDcgQEAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAKLXN0cnVjdCBkbWFfcmVnaXN0ZXIgKmRtYV9pb19iYXNlX2FkZHJbTUFYX0RNQV9DSEFOTkVMU10gPSB7CitzdHJ1Y3QgZG1hX3JlZ2lzdGVyICogY29uc3QgZG1hX2lvX2Jhc2VfYWRkcltNQVhfRE1BX0NIQU5ORUxTXSA9IHsKIAkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBETUEwX05FWFRfREVTQ19QVFIsCiAJKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgRE1BMV9ORVhUX0RFU0NfUFRSLAogCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIERNQTJfTkVYVF9ERVNDX1BUUiwKQEAgLTMyLDE0ICszMiwxNCBAQAogCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIERNQTE3X05FWFRfREVTQ19QVFIsCiAJKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgRE1BMThfTkVYVF9ERVNDX1BUUiwKIAkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBETUExOV9ORVhUX0RFU0NfUFRSLAotCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIE1ETUEwX0QwX05FWFRfREVTQ19QVFIsCi0JKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgTURNQTBfUzBfTkVYVF9ERVNDX1BUUiwKLQkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBNRE1BMF9EMV9ORVhUX0RFU0NfUFRSLAotCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIE1ETUEwX1MxX05FWFRfREVTQ19QVFIsCi0JKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgTURNQTFfRDBfTkVYVF9ERVNDX1BUUiwKLQkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBNRE1BMV9TMF9ORVhUX0RFU0NfUFRSLAotCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIE1ETUExX0QxX05FWFRfREVTQ19QVFIsCi0JKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgTURNQTFfUzFfTkVYVF9ERVNDX1BUUiwKKwkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBNRE1BX0QwX05FWFRfREVTQ19QVFIsCisJKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgTURNQV9TMF9ORVhUX0RFU0NfUFRSLAorCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIE1ETUFfRDFfTkVYVF9ERVNDX1BUUiwKKwkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBNRE1BX1MxX05FWFRfREVTQ19QVFIsCisJKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgTURNQV9EMl9ORVhUX0RFU0NfUFRSLAorCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIE1ETUFfUzJfTkVYVF9ERVNDX1BUUiwKKwkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBNRE1BX0QzX05FWFRfREVTQ19QVFIsCisJKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgTURNQV9TM19ORVhUX0RFU0NfUFRSLAogfTsKIEVYUE9SVF9TWU1CT0woZG1hX2lvX2Jhc2VfYWRkcik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWwuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjZlMjc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbC5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBtYWNoL2JmaW5fc2VyaWFsLmggLSBCbGFja2ZpbiBVQVJUL1NlcmlhbCBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA2LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaWZuZGVmIF9fQkZJTl9NQUNIX1NFUklBTF9IX18KKyNkZWZpbmUgX19CRklOX01BQ0hfU0VSSUFMX0hfXworCisjZGVmaW5lIEJGSU5fVUFSVF9OUl9QT1JUUwkzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggNWMxNDgxNC4uYmViNTAyZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC00LDM2ICs0LDkgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+CiAKLSNkZWZpbmUgVUFSVF9HRVRfQ0hBUih1YXJ0KSAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX1JCUikpCi0jZGVmaW5lIFVBUlRfR0VUX0RMTCh1YXJ0KQliZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExMKSkKLSNkZWZpbmUgVUFSVF9HRVRfSUVSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lFUikpCi0jZGVmaW5lIFVBUlRfR0VUX0RMSCh1YXJ0KQliZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExIKSkKLSNkZWZpbmUgVUFSVF9HRVRfSUlSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lJUikpCi0jZGVmaW5lIFVBUlRfR0VUX0xDUih1YXJ0KSAgICAgIGJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MQ1IpKQotI2RlZmluZSBVQVJUX0dFVF9HQ1RMKHVhcnQpICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfR0NUTCkpCi0KLSNkZWZpbmUgVUFSVF9QVVRfQ0hBUih1YXJ0LCB2KSAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfVEhSKSwgdikKLSNkZWZpbmUgVUFSVF9QVVRfRExMKHVhcnQsIHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExMKSwgdikKLSNkZWZpbmUgVUFSVF9QVVRfSUVSKHVhcnQsIHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfSUVSKSwgdikKLSNkZWZpbmUgVUFSVF9TRVRfSUVSKHVhcnQsIHYpICAgIFVBUlRfUFVUX0lFUih1YXJ0LCBVQVJUX0dFVF9JRVIodWFydCkgfCAodikpCi0jZGVmaW5lIFVBUlRfQ0xFQVJfSUVSKHVhcnQsIHYpICBVQVJUX1BVVF9JRVIodWFydCwgVUFSVF9HRVRfSUVSKHVhcnQpICYgfih2KSkKLSNkZWZpbmUgVUFSVF9QVVRfRExIKHVhcnQsIHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExIKSwgdikKLSNkZWZpbmUgVUFSVF9QVVRfTENSKHVhcnQsIHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTENSKSwgdikKLSNkZWZpbmUgVUFSVF9QVVRfR0NUTCh1YXJ0LCB2KSAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfR0NUTCksIHYpCi0KLSNkZWZpbmUgVUFSVF9TRVRfRExBQih1YXJ0KSAgICAgZG8geyBVQVJUX1BVVF9MQ1IodWFydCwgVUFSVF9HRVRfTENSKHVhcnQpIHwgRExBQik7IFNTWU5DKCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFVBUlRfQ0xFQVJfRExBQih1YXJ0KSAgIGRvIHsgVUFSVF9QVVRfTENSKHVhcnQsIFVBUlRfR0VUX0xDUih1YXJ0KSAmIH5ETEFCKTsgU1NZTkMoKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBVQVJUX0dFVF9DVFMoeCkgZ3Bpb19nZXRfdmFsdWUoeC0+Y3RzX3BpbikKLSNkZWZpbmUgVUFSVF9ESVNBQkxFX1JUUyh4KSBncGlvX3NldF92YWx1ZSh4LT5ydHNfcGluLCAxKQotI2RlZmluZSBVQVJUX0VOQUJMRV9SVFMoeCkgZ3Bpb19zZXRfdmFsdWUoeC0+cnRzX3BpbiwgMCkKLSNkZWZpbmUgVUFSVF9FTkFCTEVfSU5UUyh4LCB2KSBVQVJUX1BVVF9JRVIoeCwgdikKLSNkZWZpbmUgVUFSVF9ESVNBQkxFX0lOVFMoeCkgVUFSVF9QVVRfSUVSKHgsIDApCi0KICNpZiBkZWZpbmVkKENPTkZJR19CRklOX1VBUlQwX0NUU1JUUykgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9VQVJUMV9DVFNSVFMpCiAjIGRlZmluZSBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCiAKQEAgLTU0LDUwICsyNyw2IEBACiAjIGVuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBCRklOX1VBUlRfVFhfRklGT19TSVpFCTIKLQotLyoKLSAqIFRoZSBwaW4gY29uZmlndXJhdGlvbiBpcyBkaWZmZXJlbnQgZnJvbSBzY2hlbWF0aWMKLSAqLwotc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgewotCXN0cnVjdCB1YXJ0X3BvcnQJcG9ydDsKLQl1bnNpZ25lZCBpbnQJCW9sZF9zdGF0dXM7Ci0JaW50CQkJc3RhdHVzX2lycTsKLQl1bnNpZ25lZCBpbnQgbHNyOwotI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9ETUEKLQlpbnQJCQl0eF9kb25lOwotCWludAkJCXR4X2NvdW50OwotCXN0cnVjdCBjaXJjX2J1ZgkJcnhfZG1hX2J1ZjsKLQlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICByeF9kbWFfdGltZXI7Ci0JaW50CQkJcnhfZG1hX25yb3dzOwotCXVuc2lnbmVkIGludAkJdHhfZG1hX2NoYW5uZWw7Ci0JdW5zaWduZWQgaW50CQlyeF9kbWFfY2hhbm5lbDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdHhfZG1hX3dvcmtxdWV1ZTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKLQlzdHJ1Y3QgdGltZXJfbGlzdAljdHNfdGltZXI7Ci0JaW50CQljdHNfcGluOwotCWludAkJcnRzX3BpbjsKLSNlbmRpZgotfTsKLQotLyogVGhlIGhhcmR3YXJlIGNsZWFycyB0aGUgTFNSIGJpdHMgdXBvbiByZWFkLCBzbyB3ZSBuZWVkIHRvIGNhY2hlCi0gKiBzb21lIG9mIHRoZSBtb3JlIGZ1biBiaXRzIGluIHNvZnR3YXJlIHNvIHRoZXkgZG9uJ3QgZ2V0IGxvc3QKLSAqIHdoZW4gY2hlY2tpbmcgdGhlIExTUiBpbiBvdGhlciBjb2RlIHBhdGhzIChUWCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFVBUlRfR0VUX0xTUihzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCkKLXsKLQl1bnNpZ25lZCBpbnQgbHNyID0gYmZpbl9yZWFkMTYodWFydC0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUik7Ci0JdWFydC0+bHNyIHw9IChsc3IgJiAoQkl8RkV8UEV8T0UpKTsKLQlyZXR1cm4gbHNyIHwgdWFydC0+bHNyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgVUFSVF9DTEVBUl9MU1Ioc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCi17Ci0JdWFydC0+bHNyID0gMDsKLQliZmluX3dyaXRlMTYodWFydC0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUiwgLTEpOwotfQotCiBzdHJ1Y3QgYmZpbl9zZXJpYWxfcmVzIHsKIAl1bnNpZ25lZCBsb25nCXVhcnRfYmFzZV9hZGRyOwogCWludAkJdWFydF9pcnE7CkBAIC0xNjAsMyArODksNSBAQAogfTsKIAogI2RlZmluZSBEUklWRVJfTkFNRSAiYmZpbi11YXJ0IgorCisjaW5jbHVkZSA8YXNtL2JmaW5fc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggMDhiNWVhYi4uNzkxZDA4NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpAQCAtMTAsMzEgKzEwLDI0IEBACiAjZGVmaW5lIEJGNTM4X0ZBTUlMWQogCiAjaW5jbHVkZSAiYmY1MzguaCIKLSNpbmNsdWRlICJkZWZCRjUzOS5oIgogI2luY2x1ZGUgImFub21hbHkuaCIKIAotCi0jaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQotI2luY2x1ZGUgImNkZWZCRjUzOC5oIgotCi0jaWYgZGVmaW5lZChDT05GSUdfQkY1MzkpCi0jaW5jbHVkZSAiY2RlZkJGNTM5LmgiCisjaW5jbHVkZSA8YXNtL2RlZl9MUEJsYWNrZmluLmg+CisjaWZkZWYgQ09ORklHX0JGNTM4CisjIGluY2x1ZGUgImRlZkJGNTM4LmgiCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQkY1MzkKKyMgaW5jbHVkZSAiZGVmQkY1MzkuaCIKICNlbmRpZgogCi0jZGVmaW5lIEJGSU5fVUFSVF9OUl9QT1JUUwkzCi0KLSNkZWZpbmUgT0ZGU0VUX1RIUiAgICAgICAgICAgICAgMHgwMAkvKiBUcmFuc21pdCBIb2xkaW5nIHJlZ2lzdGVyICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX1JCUiAgICAgICAgICAgICAgMHgwMAkvKiBSZWNlaXZlIEJ1ZmZlciByZWdpc3RlciAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX0RMTCAgICAgICAgICAgICAgMHgwMAkvKiBEaXZpc29yIExhdGNoIChMb3ctQnl0ZSkgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX0lFUiAgICAgICAgICAgICAgMHgwNAkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX0RMSCAgICAgICAgICAgICAgMHgwNAkvKiBEaXZpc29yIExhdGNoIChIaWdoLUJ5dGUpICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX0lJUiAgICAgICAgICAgICAgMHgwOAkvKiBJbnRlcnJ1cHQgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX0xDUiAgICAgICAgICAgICAgMHgwQwkvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX01DUiAgICAgICAgICAgICAgMHgxMAkvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX0xTUiAgICAgICAgICAgICAgMHgxNAkvKiBMaW5lIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX01TUiAgICAgICAgICAgICAgMHgxOAkvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX1NDUiAgICAgICAgICAgICAgMHgxQwkvKiBTQ1IgU2NyYXRjaCBSZWdpc3RlciAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT0ZGU0VUX0dDVEwgICAgICAgICAgICAgMHgyNAkvKiBHbG9iYWwgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjIGluY2x1ZGUgPGFzbS9jZGVmX0xQQmxhY2tmaW4uaD4KKyMgaWZkZWYgQ09ORklHX0JGNTM4CisjICBpbmNsdWRlICJjZGVmQkY1MzguaCIKKyMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX0JGNTM5CisjICBpbmNsdWRlICJjZGVmQkY1MzkuaCIKKyMgZW5kaWYKKyNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvY2RlZkJGNTM4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2NkZWZCRjUzOC5oCmluZGV4IDA4NWIwNmIuLmY2YTU2NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvY2RlZkJGNTM4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzguaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpAQCAtNywxNCArNyw2IEBACiAjaWZuZGVmIF9DREVGX0JGNTM4X0gKICNkZWZpbmUgX0NERUZfQkY1MzhfSAogCi0jaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+Ci0KLS8qaW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyovCi0jaW5jbHVkZSAiZGVmQkY1MzkuaCIKLQotLyppbmNsdWRlIGNvcmUgc3BlY2lmaWMgcmVnaXN0ZXIgcG9pbnRlciBkZWZpbml0aW9ucyovCi0jaW5jbHVkZSA8YXNtL2NkZWZfTFBCbGFja2Zpbi5oPgotCiAjZGVmaW5lIGJmaW5fd3JpdGVQVFIoYWRkciwgdmFsKSBiZmluX3dyaXRlMzIoYWRkciwgdmFsKQogCiAjZGVmaW5lIGJmaW5fcmVhZF9QTExfQ1RMKCkgICAgICAgICAgICBiZmluX3JlYWQxNihQTExfQ1RMKQpAQCAtNDg3LDEwICs0NzksMTAgQEAKICNkZWZpbmUgYmZpbl93cml0ZV9FQklVX1NEUlJDKHZhbCkgICAgIGJmaW5fd3JpdGUxNihFQklVX1NEUlJDLCB2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9FQklVX1NEU1RBVCgpICAgICAgICBiZmluX3JlYWQxNihFQklVX1NEU1RBVCkKICNkZWZpbmUgYmZpbl93cml0ZV9FQklVX1NEU1RBVCh2YWwpICAgIGJmaW5fd3JpdGUxNihFQklVX1NEU1RBVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BMF9UQ19QRVIoKSAgICAgICAgYmZpbl9yZWFkMTYoRE1BMF9UQ19QRVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9UQ19QRVIodmFsKSAgICBiZmluX3dyaXRlMTYoRE1BMF9UQ19QRVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfVENfQ05UKCkgICAgICAgIGJmaW5fcmVhZDE2KERNQTBfVENfQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfVENfQ05UKHZhbCkgICAgYmZpbl93cml0ZTE2KERNQTBfVENfQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUFDMF9UQ19QRVIoKSAgICAgICBiZmluX3JlYWQxNihETUFDMF9UQ19QRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BQzBfVENfUEVSKHZhbCkgICBiZmluX3dyaXRlMTYoRE1BQzBfVENfUEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUFDMF9UQ19DTlQoKSAgICAgICBiZmluX3JlYWQxNihETUFDMF9UQ19DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BQzBfVENfQ05UKHZhbCkgICBiZmluX3dyaXRlMTYoRE1BQzBfVENfQ05ULCB2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX05FWFRfREVTQ19QVFIoKSBiZmluX3JlYWRQVFIoRE1BMF9ORVhUX0RFU0NfUFRSKQogI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoRE1BMF9ORVhUX0RFU0NfUFRSLCB2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1NUQVJUX0FERFIoKSAgICBiZmluX3JlYWRQVFIoRE1BMF9TVEFSVF9BRERSKQpAQCAtNjk5LDEwICs2OTEsMTAgQEAKICNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihETUE3X0NVUlJfWF9DT1VOVCwgdmFsKQogI2RlZmluZSBiZmluX3JlYWRfRE1BN19DVVJSX1lfQ09VTlQoKSAgYmZpbl9yZWFkMTYoRE1BN19DVVJSX1lfQ09VTlQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoRE1BN19DVVJSX1lfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfVENfUEVSKCkgICAgICAgIGJmaW5fcmVhZDE2KERNQTFfVENfUEVSKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfVENfUEVSKHZhbCkgICAgYmZpbl93cml0ZTE2KERNQTFfVENfUEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExX1RDX0NOVCgpICAgICAgICBiZmluX3JlYWQxNihETUExX1RDX0NOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1RDX0NOVCh2YWwpICAgIGJmaW5fd3JpdGUxNihETUExX1RDX0NOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BQzFfVENfUEVSKCkgICAgICAgYmZpbl9yZWFkMTYoRE1BQzFfVENfUEVSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQUMxX1RDX1BFUih2YWwpICAgYmZpbl93cml0ZTE2KERNQUMxX1RDX1BFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BQzFfVENfQ05UKCkgICAgICAgYmZpbl9yZWFkMTYoRE1BQzFfVENfQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQUMxX1RDX0NOVCh2YWwpICAgYmZpbl93cml0ZTE2KERNQUMxX1RDX0NOVCwgdmFsKQogI2RlZmluZSBiZmluX3JlYWRfRE1BOF9ORVhUX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKERNQThfTkVYVF9ERVNDX1BUUikKICNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X05FWFRfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKERNQThfTkVYVF9ERVNDX1BUUiwgdmFsKQogI2RlZmluZSBiZmluX3JlYWRfRE1BOF9TVEFSVF9BRERSKCkgICAgYmZpbl9yZWFkUFRSKERNQThfU1RBUlRfQUREUikKQEAgLTEwMTUsMjczICsxMDA3LDIxNCBAQAogI2RlZmluZSBiZmluX3dyaXRlX0RNQTE5X0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihETUExOV9DVVJSX1hfQ09VTlQsIHZhbCkKICNkZWZpbmUgYmZpbl9yZWFkX0RNQTE5X0NVUlJfWV9DT1VOVCgpIGJmaW5fcmVhZDE2KERNQTE5X0NVUlJfWV9DT1VOVCkKICNkZWZpbmUgYmZpbl93cml0ZV9ETUExOV9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoRE1BMTlfQ1VSUl9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMF9EMF9ORVhUX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKE1ETUEwX0QwX05FWFRfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfRDBfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQTBfRDBfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfRDBfU1RBUlRfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMF9EMF9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX0QwX1NUQVJUX0FERFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUEwX0QwX1NUQVJUX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX0QwX0NPTkZJRygpICAgIGJmaW5fcmVhZDE2KE1ETUEwX0QwX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9EMF9DT05GSUcodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfRDBfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMF9EMF9YX0NPVU5UKCkgICBiZmluX3JlYWQxNihNRE1BMF9EMF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX0QwX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfRDBfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfRDBfWF9NT0RJRlkoKSAgYmZpbl9yZWFkMTYoTURNQTBfRDBfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfRDBfWF9NT0RJRlkodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfRDBfWF9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX0QwX1lfQ09VTlQoKSAgIGJmaW5fcmVhZDE2KE1ETUEwX0QwX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfRDBfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9EMF9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMF9EMF9ZX01PRElGWSgpICBiZmluX3JlYWQxNihNRE1BMF9EMF9ZX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9EMF9ZX01PRElGWSh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9EMF9ZX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfRDBfQ1VSUl9ERVNDX1BUUigpIGJmaW5fcmVhZFBUUihNRE1BMF9EMF9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX0QwX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUEwX0QwX0NVUlJfREVTQ19QVFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX0QwX0NVUlJfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMF9EMF9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfRDBfQ1VSUl9BRERSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BMF9EMF9DVVJSX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX0QwX0lSUV9TVEFUVVMoKSBiZmluX3JlYWQxNihNRE1BMF9EMF9JUlFfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX0QwX0lSUV9TVEFUVVModmFsKSBiZmluX3dyaXRlMTYoTURNQTBfRDBfSVJRX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfRDBfUEVSSVBIRVJBTF9NQVAoKSBiZmluX3JlYWQxNihNRE1BMF9EMF9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9EMF9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9EMF9QRVJJUEhFUkFMX01BUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfRDBfQ1VSUl9YX0NPVU5UKCkgYmZpbl9yZWFkMTYoTURNQTBfRDBfQ1VSUl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX0QwX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9EMF9DVVJSX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX0QwX0NVUlJfWV9DT1VOVCgpIGJmaW5fcmVhZDE2KE1ETUEwX0QwX0NVUlJfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9EMF9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfRDBfQ1VSUl9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMF9TMF9ORVhUX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKE1ETUEwX1MwX05FWFRfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfUzBfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQTBfUzBfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfUzBfU1RBUlRfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMF9TMF9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX1MwX1NUQVJUX0FERFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUEwX1MwX1NUQVJUX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX1MwX0NPTkZJRygpICAgIGJmaW5fcmVhZDE2KE1ETUEwX1MwX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9TMF9DT05GSUcodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfUzBfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMF9TMF9YX0NPVU5UKCkgICBiZmluX3JlYWQxNihNRE1BMF9TMF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX1MwX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfUzBfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfUzBfWF9NT0RJRlkoKSAgYmZpbl9yZWFkMTYoTURNQTBfUzBfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfUzBfWF9NT0RJRlkodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfUzBfWF9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX1MwX1lfQ09VTlQoKSAgIGJmaW5fcmVhZDE2KE1ETUEwX1MwX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfUzBfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9TMF9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMF9TMF9ZX01PRElGWSgpICBiZmluX3JlYWQxNihNRE1BMF9TMF9ZX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9TMF9ZX01PRElGWSh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9TMF9ZX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfUzBfQ1VSUl9ERVNDX1BUUigpIGJmaW5fcmVhZFBUUihNRE1BMF9TMF9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX1MwX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUEwX1MwX0NVUlJfREVTQ19QVFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX1MwX0NVUlJfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMF9TMF9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfUzBfQ1VSUl9BRERSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BMF9TMF9DVVJSX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX1MwX0lSUV9TVEFUVVMoKSBiZmluX3JlYWQxNihNRE1BMF9TMF9JUlFfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX1MwX0lSUV9TVEFUVVModmFsKSBiZmluX3dyaXRlMTYoTURNQTBfUzBfSVJRX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfUzBfUEVSSVBIRVJBTF9NQVAoKSBiZmluX3JlYWQxNihNRE1BMF9TMF9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9TMF9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9TMF9QRVJJUEhFUkFMX01BUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfUzBfQ1VSUl9YX0NPVU5UKCkgYmZpbl9yZWFkMTYoTURNQTBfUzBfQ1VSUl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX1MwX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9TMF9DVVJSX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX1MwX0NVUlJfWV9DT1VOVCgpIGJmaW5fcmVhZDE2KE1ETUEwX1MwX0NVUlJfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9TMF9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfUzBfQ1VSUl9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMF9EMV9ORVhUX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKE1ETUEwX0QxX05FWFRfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfRDFfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQTBfRDFfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfRDFfU1RBUlRfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMF9EMV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX0QxX1NUQVJUX0FERFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUEwX0QxX1NUQVJUX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX0QxX0NPTkZJRygpICAgIGJmaW5fcmVhZDE2KE1ETUEwX0QxX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9EMV9DT05GSUcodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfRDFfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMF9EMV9YX0NPVU5UKCkgICBiZmluX3JlYWQxNihNRE1BMF9EMV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX0QxX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfRDFfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfRDFfWF9NT0RJRlkoKSAgYmZpbl9yZWFkMTYoTURNQTBfRDFfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfRDFfWF9NT0RJRlkodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfRDFfWF9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX0QxX1lfQ09VTlQoKSAgIGJmaW5fcmVhZDE2KE1ETUEwX0QxX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfRDFfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9EMV9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMF9EMV9ZX01PRElGWSgpICBiZmluX3JlYWQxNihNRE1BMF9EMV9ZX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9EMV9ZX01PRElGWSh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9EMV9ZX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfRDFfQ1VSUl9ERVNDX1BUUigpIGJmaW5fcmVhZFBUUihNRE1BMF9EMV9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX0QxX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUEwX0QxX0NVUlJfREVTQ19QVFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX0QxX0NVUlJfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMF9EMV9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfRDFfQ1VSUl9BRERSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BMF9EMV9DVVJSX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX0QxX0lSUV9TVEFUVVMoKSBiZmluX3JlYWQxNihNRE1BMF9EMV9JUlFfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX0QxX0lSUV9TVEFUVVModmFsKSBiZmluX3dyaXRlMTYoTURNQTBfRDFfSVJRX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfRDFfUEVSSVBIRVJBTF9NQVAoKSBiZmluX3JlYWQxNihNRE1BMF9EMV9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9EMV9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9EMV9QRVJJUEhFUkFMX01BUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfRDFfQ1VSUl9YX0NPVU5UKCkgYmZpbl9yZWFkMTYoTURNQTBfRDFfQ1VSUl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX0QxX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9EMV9DVVJSX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX0QxX0NVUlJfWV9DT1VOVCgpIGJmaW5fcmVhZDE2KE1ETUEwX0QxX0NVUlJfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9EMV9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfRDFfQ1VSUl9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMF9TMV9ORVhUX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKE1ETUEwX1MxX05FWFRfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfUzFfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQTBfUzFfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfUzFfU1RBUlRfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMF9TMV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX1MxX1NUQVJUX0FERFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUEwX1MxX1NUQVJUX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX1MxX0NPTkZJRygpICAgIGJmaW5fcmVhZDE2KE1ETUEwX1MxX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9TMV9DT05GSUcodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfUzFfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMF9TMV9YX0NPVU5UKCkgICBiZmluX3JlYWQxNihNRE1BMF9TMV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX1MxX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfUzFfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfUzFfWF9NT0RJRlkoKSAgYmZpbl9yZWFkMTYoTURNQTBfUzFfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfUzFfWF9NT0RJRlkodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfUzFfWF9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX1MxX1lfQ09VTlQoKSAgIGJmaW5fcmVhZDE2KE1ETUEwX1MxX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfUzFfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9TMV9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMF9TMV9ZX01PRElGWSgpICBiZmluX3JlYWQxNihNRE1BMF9TMV9ZX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9TMV9ZX01PRElGWSh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9TMV9ZX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfUzFfQ1VSUl9ERVNDX1BUUigpIGJmaW5fcmVhZFBUUihNRE1BMF9TMV9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX1MxX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUEwX1MxX0NVUlJfREVTQ19QVFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX1MxX0NVUlJfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMF9TMV9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTBfUzFfQ1VSUl9BRERSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BMF9TMV9DVVJSX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX1MxX0lSUV9TVEFUVVMoKSBiZmluX3JlYWQxNihNRE1BMF9TMV9JUlFfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX1MxX0lSUV9TVEFUVVModmFsKSBiZmluX3dyaXRlMTYoTURNQTBfUzFfSVJRX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfUzFfUEVSSVBIRVJBTF9NQVAoKSBiZmluX3JlYWQxNihNRE1BMF9TMV9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9TMV9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9TMV9QRVJJUEhFUkFMX01BUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTBfUzFfQ1VSUl9YX0NPVU5UKCkgYmZpbl9yZWFkMTYoTURNQTBfUzFfQ1VSUl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEwX1MxX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMF9TMV9DVVJSX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEwX1MxX0NVUlJfWV9DT1VOVCgpIGJmaW5fcmVhZDE2KE1ETUEwX1MxX0NVUlJfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMF9TMV9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTBfUzFfQ1VSUl9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9EMF9ORVhUX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKE1ETUExX0QwX05FWFRfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDBfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQTFfRDBfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDBfU1RBUlRfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMV9EMF9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QwX1NUQVJUX0FERFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUExX0QwX1NUQVJUX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QwX0NPTkZJRygpICAgIGJmaW5fcmVhZDE2KE1ETUExX0QwX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMF9DT05GSUcodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfRDBfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9EMF9YX0NPVU5UKCkgICBiZmluX3JlYWQxNihNRE1BMV9EMF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QwX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfRDBfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDBfWF9NT0RJRlkoKSAgYmZpbl9yZWFkMTYoTURNQTFfRDBfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDBfWF9NT0RJRlkodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfRDBfWF9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QwX1lfQ09VTlQoKSAgIGJmaW5fcmVhZDE2KE1ETUExX0QwX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDBfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9EMF9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9EMF9ZX01PRElGWSgpICBiZmluX3JlYWQxNihNRE1BMV9EMF9ZX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMF9ZX01PRElGWSh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9EMF9ZX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDBfQ1VSUl9ERVNDX1BUUigpIGJmaW5fcmVhZFBUUihNRE1BMV9EMF9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QwX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUExX0QwX0NVUlJfREVTQ19QVFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QwX0NVUlJfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMV9EMF9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDBfQ1VSUl9BRERSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BMV9EMF9DVVJSX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QwX0lSUV9TVEFUVVMoKSBiZmluX3JlYWQxNihNRE1BMV9EMF9JUlFfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QwX0lSUV9TVEFUVVModmFsKSBiZmluX3dyaXRlMTYoTURNQTFfRDBfSVJRX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDBfUEVSSVBIRVJBTF9NQVAoKSBiZmluX3JlYWQxNihNRE1BMV9EMF9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMF9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9EMF9QRVJJUEhFUkFMX01BUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDBfQ1VSUl9YX0NPVU5UKCkgYmZpbl9yZWFkMTYoTURNQTFfRDBfQ1VSUl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QwX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9EMF9DVVJSX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QwX0NVUlJfWV9DT1VOVCgpIGJmaW5fcmVhZDE2KE1ETUExX0QwX0NVUlJfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMF9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfRDBfQ1VSUl9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMF9ORVhUX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKE1ETUExX1MwX05FWFRfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzBfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQTFfUzBfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzBfU1RBUlRfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMV9TMF9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MwX1NUQVJUX0FERFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUExX1MwX1NUQVJUX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MwX0NPTkZJRygpICAgIGJmaW5fcmVhZDE2KE1ETUExX1MwX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMF9DT05GSUcodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfUzBfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMF9YX0NPVU5UKCkgICBiZmluX3JlYWQxNihNRE1BMV9TMF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MwX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfUzBfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzBfWF9NT0RJRlkoKSAgYmZpbl9yZWFkMTYoTURNQTFfUzBfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzBfWF9NT0RJRlkodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfUzBfWF9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MwX1lfQ09VTlQoKSAgIGJmaW5fcmVhZDE2KE1ETUExX1MwX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzBfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9TMF9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMF9ZX01PRElGWSgpICBiZmluX3JlYWQxNihNRE1BMV9TMF9ZX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMF9ZX01PRElGWSh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9TMF9ZX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzBfQ1VSUl9ERVNDX1BUUigpIGJmaW5fcmVhZFBUUihNRE1BMV9TMF9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MwX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUExX1MwX0NVUlJfREVTQ19QVFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MwX0NVUlJfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMV9TMF9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzBfQ1VSUl9BRERSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BMV9TMF9DVVJSX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MwX0lSUV9TVEFUVVMoKSBiZmluX3JlYWQxNihNRE1BMV9TMF9JUlFfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MwX0lSUV9TVEFUVVModmFsKSBiZmluX3dyaXRlMTYoTURNQTFfUzBfSVJRX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzBfUEVSSVBIRVJBTF9NQVAoKSBiZmluX3JlYWQxNihNRE1BMV9TMF9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMF9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9TMF9QRVJJUEhFUkFMX01BUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzBfQ1VSUl9YX0NPVU5UKCkgYmZpbl9yZWFkMTYoTURNQTFfUzBfQ1VSUl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MwX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9TMF9DVVJSX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MwX0NVUlJfWV9DT1VOVCgpIGJmaW5fcmVhZDE2KE1ETUExX1MwX0NVUlJfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMF9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfUzBfQ1VSUl9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9EMV9ORVhUX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKE1ETUExX0QxX05FWFRfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDFfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQTFfRDFfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDFfU1RBUlRfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMV9EMV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QxX1NUQVJUX0FERFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUExX0QxX1NUQVJUX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QxX0NPTkZJRygpICAgIGJmaW5fcmVhZDE2KE1ETUExX0QxX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMV9DT05GSUcodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfRDFfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9EMV9YX0NPVU5UKCkgICBiZmluX3JlYWQxNihNRE1BMV9EMV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QxX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfRDFfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDFfWF9NT0RJRlkoKSAgYmZpbl9yZWFkMTYoTURNQTFfRDFfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDFfWF9NT0RJRlkodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfRDFfWF9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QxX1lfQ09VTlQoKSAgIGJmaW5fcmVhZDE2KE1ETUExX0QxX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDFfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9EMV9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9EMV9ZX01PRElGWSgpICBiZmluX3JlYWQxNihNRE1BMV9EMV9ZX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMV9ZX01PRElGWSh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9EMV9ZX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDFfQ1VSUl9ERVNDX1BUUigpIGJmaW5fcmVhZFBUUihNRE1BMV9EMV9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QxX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUExX0QxX0NVUlJfREVTQ19QVFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QxX0NVUlJfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMV9EMV9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDFfQ1VSUl9BRERSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BMV9EMV9DVVJSX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QxX0lSUV9TVEFUVVMoKSBiZmluX3JlYWQxNihNRE1BMV9EMV9JUlFfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QxX0lSUV9TVEFUVVModmFsKSBiZmluX3dyaXRlMTYoTURNQTFfRDFfSVJRX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDFfUEVSSVBIRVJBTF9NQVAoKSBiZmluX3JlYWQxNihNRE1BMV9EMV9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMV9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9EMV9QRVJJUEhFUkFMX01BUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDFfQ1VSUl9YX0NPVU5UKCkgYmZpbl9yZWFkMTYoTURNQTFfRDFfQ1VSUl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QxX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9EMV9DVVJSX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QxX0NVUlJfWV9DT1VOVCgpIGJmaW5fcmVhZDE2KE1ETUExX0QxX0NVUlJfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMV9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfRDFfQ1VSUl9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMV9ORVhUX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKE1ETUExX1MxX05FWFRfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzFfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQTFfUzFfTkVYVF9ERVNDX1BUUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzFfU1RBUlRfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMV9TMV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MxX1NUQVJUX0FERFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUExX1MxX1NUQVJUX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MxX0NPTkZJRygpICAgIGJmaW5fcmVhZDE2KE1ETUExX1MxX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMV9DT05GSUcodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfUzFfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMV9YX0NPVU5UKCkgICBiZmluX3JlYWQxNihNRE1BMV9TMV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MxX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfUzFfWF9DT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzFfWF9NT0RJRlkoKSAgYmZpbl9yZWFkMTYoTURNQTFfUzFfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzFfWF9NT0RJRlkodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfUzFfWF9NT0RJRlksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MxX1lfQ09VTlQoKSAgIGJmaW5fcmVhZDE2KE1ETUExX1MxX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzFfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9TMV9ZX0NPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMV9ZX01PRElGWSgpICBiZmluX3JlYWQxNihNRE1BMV9TMV9ZX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMV9ZX01PRElGWSh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9TMV9ZX01PRElGWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzFfQ1VSUl9ERVNDX1BUUigpIGJmaW5fcmVhZFBUUihNRE1BMV9TMV9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MxX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUExX1MxX0NVUlJfREVTQ19QVFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MxX0NVUlJfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BMV9TMV9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzFfQ1VSUl9BRERSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BMV9TMV9DVVJSX0FERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MxX0lSUV9TVEFUVVMoKSBiZmluX3JlYWQxNihNRE1BMV9TMV9JUlFfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MxX0lSUV9TVEFUVVModmFsKSBiZmluX3dyaXRlMTYoTURNQTFfUzFfSVJRX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzFfUEVSSVBIRVJBTF9NQVAoKSBiZmluX3JlYWQxNihNRE1BMV9TMV9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMV9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9TMV9QRVJJUEhFUkFMX01BUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzFfQ1VSUl9YX0NPVU5UKCkgYmZpbl9yZWFkMTYoTURNQTFfUzFfQ1VSUl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MxX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9TMV9DVVJSX1hfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MxX0NVUlJfWV9DT1VOVCgpIGJmaW5fcmVhZDE2KE1ETUExX1MxX0NVUlJfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMV9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfUzFfQ1VSUl9ZX0NPVU5ULCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfQ09ORklHKCkgIGJmaW5fcmVhZF9NRE1BMF9TMF9DT05GSUcoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ09ORklHKHZhbCkgYmZpbl93cml0ZV9NRE1BMF9TMF9DT05GSUcodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9JUlFfU1RBVFVTKCkgIGJmaW5fcmVhZF9NRE1BMF9TMF9JUlFfU1RBVFVTKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0lSUV9TVEFUVVModmFsKSBiZmluX3dyaXRlX01ETUEwX1MwX0lSUV9TVEFUVVModmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9YX01PRElGWSgpICBiZmluX3JlYWRfTURNQTBfUzBfWF9NT0RJRlkoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfWF9NT0RJRlkodmFsKSBiZmluX3dyaXRlX01ETUEwX1MwX1hfTU9ESUZZKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfWV9NT0RJRlkoKSAgYmZpbl9yZWFkX01ETUEwX1MwX1lfTU9ESUZZKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1lfTU9ESUZZKHZhbCkgYmZpbl93cml0ZV9NRE1BMF9TMF9ZX01PRElGWSh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1hfQ09VTlQoKSAgYmZpbl9yZWFkX01ETUEwX1MwX1hfQ09VTlQoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGVfTURNQTBfUzBfWF9DT1VOVCh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1lfQ09VTlQoKSAgYmZpbl9yZWFkX01ETUEwX1MwX1lfQ09VTlQoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGVfTURNQTBfUzBfWV9DT1VOVCh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1NUQVJUX0FERFIoKSAgYmZpbl9yZWFkX01ETUEwX1MwX1NUQVJUX0FERFIoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfU1RBUlRfQUREUih2YWwpIGJmaW5fd3JpdGVfTURNQTBfUzBfU1RBUlRfQUREUih2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0NPTkZJRygpICBiZmluX3JlYWRfTURNQTBfRDBfQ09ORklHKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX0NPTkZJRyh2YWwpIGJmaW5fd3JpdGVfTURNQTBfRDBfQ09ORklHKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfSVJRX1NUQVRVUygpICBiZmluX3JlYWRfTURNQTBfRDBfSVJRX1NUQVRVUygpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9JUlFfU1RBVFVTKHZhbCkgYmZpbl93cml0ZV9NRE1BMF9EMF9JUlFfU1RBVFVTKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfWF9NT0RJRlkoKSAgYmZpbl9yZWFkX01ETUEwX0QwX1hfTU9ESUZZKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1hfTU9ESUZZKHZhbCkgYmZpbl93cml0ZV9NRE1BMF9EMF9YX01PRElGWSh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1lfTU9ESUZZKCkgIGJmaW5fcmVhZF9NRE1BMF9EMF9ZX01PRElGWSgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9ZX01PRElGWSh2YWwpIGJmaW5fd3JpdGVfTURNQTBfRDBfWV9NT0RJRlkodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9YX0NPVU5UKCkgIGJmaW5fcmVhZF9NRE1BMF9EMF9YX0NPVU5UKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlX01ETUEwX0QwX1hfQ09VTlQodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9ZX0NPVU5UKCkgIGJmaW5fcmVhZF9NRE1BMF9EMF9ZX0NPVU5UKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlX01ETUEwX0QwX1lfQ09VTlQodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9TVEFSVF9BRERSKCkgIGJmaW5fcmVhZF9NRE1BMF9EMF9TVEFSVF9BRERSKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1NUQVJUX0FERFIodmFsKSBiZmluX3dyaXRlX01ETUEwX0QwX1NUQVJUX0FERFIodmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NPTkZJRygpICBiZmluX3JlYWRfTURNQTBfUzFfQ09ORklHKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX0NPTkZJRyh2YWwpIGJmaW5fd3JpdGVfTURNQTBfUzFfQ09ORklHKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfSVJRX1NUQVRVUygpICBiZmluX3JlYWRfTURNQTBfUzFfSVJRX1NUQVRVUygpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9JUlFfU1RBVFVTKHZhbCkgYmZpbl93cml0ZV9NRE1BMF9TMV9JUlFfU1RBVFVTKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfWF9NT0RJRlkoKSAgYmZpbl9yZWFkX01ETUEwX1MxX1hfTU9ESUZZKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1hfTU9ESUZZKHZhbCkgYmZpbl93cml0ZV9NRE1BMF9TMV9YX01PRElGWSh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1lfTU9ESUZZKCkgIGJmaW5fcmVhZF9NRE1BMF9TMV9ZX01PRElGWSgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9ZX01PRElGWSh2YWwpIGJmaW5fd3JpdGVfTURNQTBfUzFfWV9NT0RJRlkodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9YX0NPVU5UKCkgIGJmaW5fcmVhZF9NRE1BMF9TMV9YX0NPVU5UKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlX01ETUEwX1MxX1hfQ09VTlQodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9ZX0NPVU5UKCkgIGJmaW5fcmVhZF9NRE1BMF9TMV9ZX0NPVU5UKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlX01ETUEwX1MxX1lfQ09VTlQodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9TVEFSVF9BRERSKCkgIGJmaW5fcmVhZF9NRE1BMF9TMV9TVEFSVF9BRERSKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1NUQVJUX0FERFIodmFsKSBiZmluX3dyaXRlX01ETUEwX1MxX1NUQVJUX0FERFIodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9DT05GSUcoKSAgYmZpbl9yZWFkX01ETUEwX0QxX0NPTkZJRygpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DT05GSUcodmFsKSBiZmluX3dyaXRlX01ETUEwX0QxX0NPTkZJRyh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0lSUV9TVEFUVVMoKSAgYmZpbl9yZWFkX01ETUEwX0QxX0lSUV9TVEFUVVMoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfSVJRX1NUQVRVUyh2YWwpIGJmaW5fd3JpdGVfTURNQTBfRDFfSVJRX1NUQVRVUyh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1hfTU9ESUZZKCkgIGJmaW5fcmVhZF9NRE1BMF9EMV9YX01PRElGWSgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9YX01PRElGWSh2YWwpIGJmaW5fd3JpdGVfTURNQTBfRDFfWF9NT0RJRlkodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9ZX01PRElGWSgpICBiZmluX3JlYWRfTURNQTBfRDFfWV9NT0RJRlkoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfWV9NT0RJRlkodmFsKSBiZmluX3dyaXRlX01ETUEwX0QxX1lfTU9ESUZZKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWF9DT1VOVCgpICBiZmluX3JlYWRfTURNQTBfRDFfWF9DT1VOVCgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9YX0NPVU5UKHZhbCkgYmZpbl93cml0ZV9NRE1BMF9EMV9YX0NPVU5UKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWV9DT1VOVCgpICBiZmluX3JlYWRfTURNQTBfRDFfWV9DT1VOVCgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9ZX0NPVU5UKHZhbCkgYmZpbl93cml0ZV9NRE1BMF9EMV9ZX0NPVU5UKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfU1RBUlRfQUREUigpICBiZmluX3JlYWRfTURNQTBfRDFfU1RBUlRfQUREUigpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9TVEFSVF9BRERSKHZhbCkgYmZpbl93cml0ZV9NRE1BMF9EMV9TVEFSVF9BRERSKHZhbCkKLQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9ORVhUX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKE1ETUFfRDBfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX05FWFRfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUFfRDBfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9TVEFSVF9BRERSKCkgYmZpbl9yZWFkUFRSKE1ETUFfRDBfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1NUQVJUX0FERFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUFfRDBfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DT05GSUcoKSAgICBiZmluX3JlYWQxNihNRE1BX0QwX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX0NPTkZJRyh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QwX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9YX0NPVU5UKCkgICBiZmluX3JlYWQxNihNRE1BX0QwX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9YX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDBfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9YX01PRElGWSgpICBiZmluX3JlYWQxNihNRE1BX0QwX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWF9NT0RJRlkodmFsKSBiZmluX3dyaXRlMTYoTURNQV9EMF9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9ZX0NPVU5UKCkgICBiZmluX3JlYWQxNihNRE1BX0QwX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9ZX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDBfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9ZX01PRElGWSgpICBiZmluX3JlYWQxNihNRE1BX0QwX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWV9NT0RJRlkodmFsKSBiZmluX3dyaXRlMTYoTURNQV9EMF9ZX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DVVJSX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKE1ETUFfRDBfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUFfRDBfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DVVJSX0FERFIoKSBiZmluX3JlYWRQVFIoTURNQV9EMF9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DVVJSX0FERFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUFfRDBfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0lSUV9TVEFUVVMoKSBiZmluX3JlYWQxNihNRE1BX0QwX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9JUlFfU1RBVFVTKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDBfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9QRVJJUEhFUkFMX01BUCgpIGJmaW5fcmVhZDE2KE1ETUFfRDBfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QwX1BFUklQSEVSQUxfTUFQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0NVUlJfWF9DT1VOVCgpIGJmaW5fcmVhZDE2KE1ETUFfRDBfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ1VSUl9YX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDBfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0NVUlJfWV9DT1VOVCgpIGJmaW5fcmVhZDE2KE1ETUFfRDBfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ1VSUl9ZX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDBfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX05FWFRfREVTQ19QVFIoKSBiZmluX3JlYWRQVFIoTURNQV9TMF9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQV9TMF9ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1NUQVJUX0FERFIoKSBiZmluX3JlYWRQVFIoTURNQV9TMF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfU1RBUlRfQUREUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQV9TMF9TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0NPTkZJRygpICAgIGJmaW5fcmVhZDE2KE1ETUFfUzBfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ09ORklHKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfUzBfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1hfQ09VTlQoKSAgIGJmaW5fcmVhZDE2KE1ETUFfUzBfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TMF9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1hfTU9ESUZZKCkgIGJmaW5fcmVhZDE2KE1ETUFfUzBfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9YX01PRElGWSh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MwX1hfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1lfQ09VTlQoKSAgIGJmaW5fcmVhZDE2KE1ETUFfUzBfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TMF9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1lfTU9ESUZZKCkgIGJmaW5fcmVhZDE2KE1ETUFfUzBfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9ZX01PRElGWSh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MwX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0NVUlJfREVTQ19QVFIoKSBiZmluX3JlYWRQVFIoTURNQV9TMF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ1VSUl9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQV9TMF9DVVJSX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0NVUlJfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BX1MwX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfQUREUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQV9TMF9DVVJSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfSVJRX1NUQVRVUygpIGJmaW5fcmVhZDE2KE1ETUFfUzBfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0lSUV9TVEFUVVModmFsKSBiZmluX3dyaXRlMTYoTURNQV9TMF9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1BFUklQSEVSQUxfTUFQKCkgYmZpbl9yZWFkMTYoTURNQV9TMF9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1BFUklQSEVSQUxfTUFQKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfUzBfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfQ1VSUl9YX0NPVU5UKCkgYmZpbl9yZWFkMTYoTURNQV9TMF9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9DVVJSX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TMF9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfQ1VSUl9ZX0NPVU5UKCkgYmZpbl9yZWFkMTYoTURNQV9TMF9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TMF9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfTkVYVF9ERVNDX1BUUigpIGJmaW5fcmVhZFBUUihNRE1BX0QxX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9ORVhUX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BX0QxX05FWFRfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfU1RBUlRfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BX0QxX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9TVEFSVF9BRERSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BX0QxX1NUQVJUX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfQ09ORklHKCkgICAgYmZpbl9yZWFkMTYoTURNQV9EMV9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DT05GSUcodmFsKSBiZmluX3dyaXRlMTYoTURNQV9EMV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWF9DT1VOVCgpICAgYmZpbl9yZWFkMTYoTURNQV9EMV9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QxX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWF9NT0RJRlkoKSAgYmZpbl9yZWFkMTYoTURNQV9EMV9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1hfTU9ESUZZKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDFfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWV9DT1VOVCgpICAgYmZpbl9yZWFkMTYoTURNQV9EMV9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QxX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWV9NT0RJRlkoKSAgYmZpbl9yZWFkMTYoTURNQV9EMV9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1lfTU9ESUZZKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDFfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfQ1VSUl9ERVNDX1BUUigpIGJmaW5fcmVhZFBUUihNRE1BX0QxX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DVVJSX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BX0QxX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfQ1VSUl9BRERSKCkgYmZpbl9yZWFkUFRSKE1ETUFfRDFfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfQ1VSUl9BRERSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BX0QxX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9JUlFfU1RBVFVTKCkgYmZpbl9yZWFkMTYoTURNQV9EMV9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfSVJRX1NUQVRVUyh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QxX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfUEVSSVBIRVJBTF9NQVAoKSBiZmluX3JlYWQxNihNRE1BX0QxX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfUEVSSVBIRVJBTF9NQVAodmFsKSBiZmluX3dyaXRlMTYoTURNQV9EMV9QRVJJUEhFUkFMX01BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9DVVJSX1hfQ09VTlQoKSBiZmluX3JlYWQxNihNRE1BX0QxX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QxX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9DVVJSX1lfQ09VTlQoKSBiZmluX3JlYWQxNihNRE1BX0QxX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QxX0NVUlJfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9ORVhUX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKE1ETUFfUzFfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX05FWFRfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUFfUzFfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9TVEFSVF9BRERSKCkgYmZpbl9yZWFkUFRSKE1ETUFfUzFfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1NUQVJUX0FERFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUFfUzFfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9DT05GSUcoKSAgICBiZmluX3JlYWQxNihNRE1BX1MxX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX0NPTkZJRyh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MxX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9YX0NPVU5UKCkgICBiZmluX3JlYWQxNihNRE1BX1MxX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9YX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfUzFfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9YX01PRElGWSgpICBiZmluX3JlYWQxNihNRE1BX1MxX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWF9NT0RJRlkodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TMV9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9ZX0NPVU5UKCkgICBiZmluX3JlYWQxNihNRE1BX1MxX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9ZX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfUzFfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9ZX01PRElGWSgpICBiZmluX3JlYWQxNihNRE1BX1MxX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWV9NT0RJRlkodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TMV9ZX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9DVVJSX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKE1ETUFfUzFfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUFfUzFfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9DVVJSX0FERFIoKSBiZmluX3JlYWRQVFIoTURNQV9TMV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DVVJSX0FERFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUFfUzFfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0lSUV9TVEFUVVMoKSBiZmluX3JlYWQxNihNRE1BX1MxX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9JUlFfU1RBVFVTKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfUzFfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9QRVJJUEhFUkFMX01BUCgpIGJmaW5fcmVhZDE2KE1ETUFfUzFfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MxX1BFUklQSEVSQUxfTUFQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NVUlJfWF9DT1VOVCgpIGJmaW5fcmVhZDE2KE1ETUFfUzFfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9YX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfUzFfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NVUlJfWV9DT1VOVCgpIGJmaW5fcmVhZDE2KE1ETUFfUzFfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9ZX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfUzFfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX05FWFRfREVTQ19QVFIoKSBiZmluX3JlYWRQVFIoTURNQV9EMl9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDJfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQV9EMl9ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX1NUQVJUX0FERFIoKSBiZmluX3JlYWRQVFIoTURNQV9EMl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDJfU1RBUlRfQUREUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQV9EMl9TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX0NPTkZJRygpICAgIGJmaW5fcmVhZDE2KE1ETUFfRDJfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDJfQ09ORklHKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDJfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX1hfQ09VTlQoKSAgIGJmaW5fcmVhZDE2KE1ETUFfRDJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QyX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9EMl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX1hfTU9ESUZZKCkgIGJmaW5fcmVhZDE2KE1ETUFfRDJfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMl9YX01PRElGWSh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QyX1hfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX1lfQ09VTlQoKSAgIGJmaW5fcmVhZDE2KE1ETUFfRDJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QyX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9EMl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX1lfTU9ESUZZKCkgIGJmaW5fcmVhZDE2KE1ETUFfRDJfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMl9ZX01PRElGWSh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QyX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX0NVUlJfREVTQ19QVFIoKSBiZmluX3JlYWRQVFIoTURNQV9EMl9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDJfQ1VSUl9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQV9EMl9DVVJSX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX0NVUlJfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BX0QyX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QyX0NVUlJfQUREUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQV9EMl9DVVJSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDJfSVJRX1NUQVRVUygpIGJmaW5fcmVhZDE2KE1ETUFfRDJfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QyX0lSUV9TVEFUVVModmFsKSBiZmluX3dyaXRlMTYoTURNQV9EMl9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX1BFUklQSEVSQUxfTUFQKCkgYmZpbl9yZWFkMTYoTURNQV9EMl9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QyX1BFUklQSEVSQUxfTUFQKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDJfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDJfQ1VSUl9YX0NPVU5UKCkgYmZpbl9yZWFkMTYoTURNQV9EMl9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMl9DVVJSX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9EMl9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDJfQ1VSUl9ZX0NPVU5UKCkgYmZpbl9yZWFkMTYoTURNQV9EMl9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMl9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9EMl9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfTkVYVF9ERVNDX1BUUigpIGJmaW5fcmVhZFBUUihNRE1BX1MyX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMl9ORVhUX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BX1MyX05FWFRfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfU1RBUlRfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BX1MyX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMl9TVEFSVF9BRERSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BX1MyX1NUQVJUX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfQ09ORklHKCkgICAgYmZpbl9yZWFkMTYoTURNQV9TMl9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMl9DT05GSUcodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TMl9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfWF9DT1VOVCgpICAgYmZpbl9yZWFkMTYoTURNQV9TMl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MyX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfWF9NT0RJRlkoKSAgYmZpbl9yZWFkMTYoTURNQV9TMl9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MyX1hfTU9ESUZZKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfUzJfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfWV9DT1VOVCgpICAgYmZpbl9yZWFkMTYoTURNQV9TMl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MyX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfWV9NT0RJRlkoKSAgYmZpbl9yZWFkMTYoTURNQV9TMl9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MyX1lfTU9ESUZZKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfUzJfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfQ1VSUl9ERVNDX1BUUigpIGJmaW5fcmVhZFBUUihNRE1BX1MyX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMl9DVVJSX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BX1MyX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfQ1VSUl9BRERSKCkgYmZpbl9yZWFkUFRSKE1ETUFfUzJfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfQ1VSUl9BRERSKHZhbCkgYmZpbl93cml0ZVBUUihNRE1BX1MyX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMl9JUlFfU1RBVFVTKCkgYmZpbl9yZWFkMTYoTURNQV9TMl9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfSVJRX1NUQVRVUyh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MyX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfUEVSSVBIRVJBTF9NQVAoKSBiZmluX3JlYWQxNihNRE1BX1MyX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfUEVSSVBIRVJBTF9NQVAodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TMl9QRVJJUEhFUkFMX01BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMl9DVVJSX1hfQ09VTlQoKSBiZmluX3JlYWQxNihNRE1BX1MyX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MyX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MyX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMl9DVVJSX1lfQ09VTlQoKSBiZmluX3JlYWQxNihNRE1BX1MyX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MyX0NVUlJfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MyX0NVUlJfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19ORVhUX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKE1ETUFfRDNfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX05FWFRfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUFfRDNfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19TVEFSVF9BRERSKCkgYmZpbl9yZWFkUFRSKE1ETUFfRDNfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX1NUQVJUX0FERFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUFfRDNfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19DT05GSUcoKSAgICBiZmluX3JlYWQxNihNRE1BX0QzX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX0NPTkZJRyh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QzX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19YX0NPVU5UKCkgICBiZmluX3JlYWQxNihNRE1BX0QzX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EM19YX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDNfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19YX01PRElGWSgpICBiZmluX3JlYWQxNihNRE1BX0QzX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDNfWF9NT0RJRlkodmFsKSBiZmluX3dyaXRlMTYoTURNQV9EM19YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19ZX0NPVU5UKCkgICBiZmluX3JlYWQxNihNRE1BX0QzX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EM19ZX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDNfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19ZX01PRElGWSgpICBiZmluX3JlYWQxNihNRE1BX0QzX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDNfWV9NT0RJRlkodmFsKSBiZmluX3dyaXRlMTYoTURNQV9EM19ZX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19DVVJSX0RFU0NfUFRSKCkgYmZpbl9yZWFkUFRSKE1ETUFfRDNfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUFfRDNfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19DVVJSX0FERFIoKSBiZmluX3JlYWRQVFIoTURNQV9EM19DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EM19DVVJSX0FERFIodmFsKSBiZmluX3dyaXRlUFRSKE1ETUFfRDNfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX0lSUV9TVEFUVVMoKSBiZmluX3JlYWQxNihNRE1BX0QzX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EM19JUlFfU1RBVFVTKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDNfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19QRVJJUEhFUkFMX01BUCgpIGJmaW5fcmVhZDE2KE1ETUFfRDNfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EM19QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QzX1BFUklQSEVSQUxfTUFQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX0NVUlJfWF9DT1VOVCgpIGJmaW5fcmVhZDE2KE1ETUFfRDNfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDNfQ1VSUl9YX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDNfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX0NVUlJfWV9DT1VOVCgpIGJmaW5fcmVhZDE2KE1ETUFfRDNfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDNfQ1VSUl9ZX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDNfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX05FWFRfREVTQ19QVFIoKSBiZmluX3JlYWRQVFIoTURNQV9TM19ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzNfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQV9TM19ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX1NUQVJUX0FERFIoKSBiZmluX3JlYWRQVFIoTURNQV9TM19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzNfU1RBUlRfQUREUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQV9TM19TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX0NPTkZJRygpICAgIGJmaW5fcmVhZDE2KE1ETUFfUzNfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzNfQ09ORklHKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfUzNfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX1hfQ09VTlQoKSAgIGJmaW5fcmVhZDE2KE1ETUFfUzNfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MzX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TM19YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX1hfTU9ESUZZKCkgIGJmaW5fcmVhZDE2KE1ETUFfUzNfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TM19YX01PRElGWSh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MzX1hfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX1lfQ09VTlQoKSAgIGJmaW5fcmVhZDE2KE1ETUFfUzNfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MzX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TM19ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX1lfTU9ESUZZKCkgIGJmaW5fcmVhZDE2KE1ETUFfUzNfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TM19ZX01PRElGWSh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MzX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX0NVUlJfREVTQ19QVFIoKSBiZmluX3JlYWRQVFIoTURNQV9TM19DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzNfQ1VSUl9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQV9TM19DVVJSX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX0NVUlJfQUREUigpIGJmaW5fcmVhZFBUUihNRE1BX1MzX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MzX0NVUlJfQUREUih2YWwpIGJmaW5fd3JpdGVQVFIoTURNQV9TM19DVVJSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzNfSVJRX1NUQVRVUygpIGJmaW5fcmVhZDE2KE1ETUFfUzNfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MzX0lSUV9TVEFUVVModmFsKSBiZmluX3dyaXRlMTYoTURNQV9TM19JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX1BFUklQSEVSQUxfTUFQKCkgYmZpbl9yZWFkMTYoTURNQV9TM19QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MzX1BFUklQSEVSQUxfTUFQKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfUzNfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzNfQ1VSUl9YX0NPVU5UKCkgYmZpbl9yZWFkMTYoTURNQV9TM19DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TM19DVVJSX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TM19DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzNfQ1VSUl9ZX0NPVU5UKCkgYmZpbl9yZWFkMTYoTURNQV9TM19DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TM19DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TM19DVVJSX1lfQ09VTlQsIHZhbCkKICNkZWZpbmUgYmZpbl9yZWFkX1BQSV9DT05UUk9MKCkgICAgICAgIGJmaW5fcmVhZDE2KFBQSV9DT05UUk9MKQogI2RlZmluZSBiZmluX3dyaXRlX1BQSV9DT05UUk9MKHZhbCkgICAgYmZpbl93cml0ZTE2KFBQSV9DT05UUk9MLCB2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9QUElfU1RBVFVTKCkgICAgICAgICBiZmluX3JlYWQxNihQUElfU1RBVFVTKQpAQCAtMjAyNCw3ICsxOTU3LDQgQEAKICNkZWZpbmUgYmZpbl9yZWFkX0NBTl9NQjMxX0lEMSgpICAgICAgIGJmaW5fcmVhZDE2KENBTl9NQjMxX0lEMSkKICNkZWZpbmUgYmZpbl93cml0ZV9DQU5fTUIzMV9JRDEodmFsKSAgIGJmaW5fd3JpdGUxNihDQU5fTUIzMV9JRDEsIHZhbCkKIAotLyogVGhlc2UgbmVlZCB0byBiZSBsYXN0IGR1ZSB0byB0aGUgY2RlZi9saW51eCBpbnRlci1kZXBlbmRlbmNpZXMgKi8KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvY2RlZkJGNTM5LmgKaW5kZXggMTk4YzRiYi4uYWNjMTVmMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2NkZWZCRjUzOS5oCkBAIC0xLDYgKzEsNyBAQAotLyogRE8gTk9UIEVESVQgVEhJUyBGSUxFCi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1jZGVmLWhlYWRlcnMueHNsCi0gKiBETyBOT1QgRURJVCBUSElTIEZJTEUKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUzOV9ICkBAIC05LDcgKzEwLDYgQEAKIC8qIEluY2x1ZGUgTU1ScyBDb21tb24gdG8gQkY1MzggCQkJCQkJCQkqLwogI2luY2x1ZGUgImNkZWZCRjUzOC5oIgogCi0KICNkZWZpbmUgYmZpbl9yZWFkX01YVlJfQ09ORklHKCkgICAgICAgIGJmaW5fcmVhZDE2KE1YVlJfQ09ORklHKQogI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQ09ORklHKHZhbCkgICAgYmZpbl93cml0ZTE2KE1YVlJfQ09ORklHLCB2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX1BMTF9DVExfMCgpICAgICBiZmluX3JlYWQzMihNWFZSX1BMTF9DVExfMCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZGVmQkY1MzguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZGVmQkY1MzguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjdmODFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9kZWZCRjUzOC5oCkBAIC0wLDAgKzEsMTgyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKKyAqLworCisjaWZuZGVmIF9ERUZfQkY1MzhfSAorI2RlZmluZSBfREVGX0JGNTM4X0gKKworLyogQ2xvY2svUmVndWxhdG9yIENvbnRyb2wgKDB4RkZDMDAwMDAgLSAweEZGQzAwMEZGKSAqLworI2RlZmluZQlQTExfQ1RMCQkJMHhGRkMwMDAwMAkvKiBQTEwgQ29udHJvbCByZWdpc3RlciAoMTYtYml0KSAqLworI2RlZmluZQlQTExfRElWCQkJMHhGRkMwMDAwNAkvKiBQTEwgRGl2aWRlIFJlZ2lzdGVyICgxNi1iaXQpICovCisjZGVmaW5lCVZSX0NUTAkJCTB4RkZDMDAwMDgJLyogVm9sdGFnZSBSZWd1bGF0b3IgQ29udHJvbCBSZWdpc3RlciAoMTYtYml0KSAqLworI2RlZmluZQlQTExfU1RBVAkJMHhGRkMwMDAwQwkvKiBQTEwgU3RhdHVzIHJlZ2lzdGVyICgxNi1iaXQpICovCisjZGVmaW5lCVBMTF9MT0NLQ05UCQkweEZGQzAwMDEwCS8qIFBMTCBMb2NrCUNvdW50IHJlZ2lzdGVyICgxNi1iaXQpICovCisjZGVmaW5lCUNISVBJRAkJCTB4RkZDMDAwMTQJLyogQ2hpcAlJRCBSZWdpc3RlciAqLworCisvKiBDSElQSUQgTWFza3MgKi8KKyNkZWZpbmUgQ0hJUElEX1ZFUlNJT04gICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIENISVBJRF9GQU1JTFkgICAgICAgICAgMHgwRkZGRjAwMAorI2RlZmluZSBDSElQSURfTUFOVUZBQ1RVUkUgICAgIDB4MDAwMDBGRkUKKworLyogU3lzdGVtIEludGVycnVwdCBDb250cm9sbGVyICgweEZGQzAwMTAwIC0gMHhGRkMwMDFGRikgKi8KKyNkZWZpbmUJU1dSU1QJCQkweEZGQzAwMTAwICAvKiBTb2Z0d2FyZQlSZXNldCBSZWdpc3RlciAoMTYtYml0KSAqLworI2RlZmluZQlTWVNDUgkJCTB4RkZDMDAxMDQgIC8qIFN5c3RlbSBDb25maWd1cmF0aW9uIHJlZ2lzdGUgKi8KKyNkZWZpbmUJU0lDX1JWRUNUCQkweEZGQzAwMTA4CisjZGVmaW5lCVNJQ19JTUFTSzAJCTB4RkZDMDAxMEMgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lCVNJQ19JQVIwCQkweEZGQzAwMTEwICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCBSZWdpc3RlciAwICovCisjZGVmaW5lCVNJQ19JQVIxCQkweEZGQzAwMTE0ICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCBSZWdpc3RlciAxICovCisjZGVmaW5lCVNJQ19JQVIyCQkweEZGQzAwMTE4ICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCBSZWdpc3RlciAyICovCisjZGVmaW5lCVNJQ19JQVIzCQkJMHhGRkMwMDExQwkvKiBJbnRlcnJ1cHQgQXNzaWdubWVudAlSZWdpc3RlciAzICovCisjZGVmaW5lCVNJQ19JU1IwCQkJMHhGRkMwMDEyMCAgLyogSW50ZXJydXB0IFN0YXR1cwlSZWdpc3RlciAqLworI2RlZmluZQlTSUNfSVdSMAkJCTB4RkZDMDAxMjQgIC8qIEludGVycnVwdCBXYWtldXAJUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU0lDX0lNQVNLMQkJCTB4RkZDMDAxMjgJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgMSAqLworI2RlZmluZQlTSUNfSVNSMQkJCTB4RkZDMDAxMkMJLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAxICovCisjZGVmaW5lCVNJQ19JV1IxCQkJMHhGRkMwMDEzMAkvKiBJbnRlcnJ1cHQgV2FrZXVwIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUJU0lDX0lBUjQJCQkweEZGQzAwMTM0CS8qIEludGVycnVwdCBBc3NpZ25tZW50CVJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUJU0lDX0lBUjUJCQkweEZGQzAwMTM4CS8qIEludGVycnVwdCBBc3NpZ25tZW50CVJlZ2lzdGVyIDUgKi8KKyNkZWZpbmUJU0lDX0lBUjYJCQkweEZGQzAwMTNDCS8qIEludGVycnVwdCBBc3NpZ25tZW50CVJlZ2lzdGVyIDYgKi8KKworCisvKiBXYXRjaGRvZyBUaW1lciAoMHhGRkMwMDIwMCAtCTB4RkZDMDAyRkYpICovCisjZGVmaW5lCVdET0dfQ1RMCTB4RkZDMDAyMDAgIC8qIFdhdGNoZG9nCUNvbnRyb2wJUmVnaXN0ZXIgKi8KKyNkZWZpbmUJV0RPR19DTlQJMHhGRkMwMDIwNCAgLyogV2F0Y2hkb2cJQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJV0RPR19TVEFUCTB4RkZDMDAyMDggIC8qIFdhdGNoZG9nCVN0YXR1cyBSZWdpc3RlciAqLworCisKKy8qIFJlYWwJVGltZSBDbG9jayAoMHhGRkMwMDMwMCAtIDB4RkZDMDAzRkYpICovCisjZGVmaW5lCVJUQ19TVEFUCTB4RkZDMDAzMDAgIC8qIFJUQyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJUlRDX0lDVEwJMHhGRkMwMDMwNCAgLyogUlRDIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCVJUQ19JU1RBVAkweEZGQzAwMzA4ICAvKiBSVEMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQlSVENfU1dDTlQJMHhGRkMwMDMwQyAgLyogUlRDIFN0b3B3YXRjaCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlSVENfQUxBUk0JMHhGRkMwMDMxMCAgLyogUlRDIEFsYXJtIFRpbWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJUlRDX0ZBU1QJMHhGRkMwMDMxNCAgLyogUlRDIFByZXNjYWxlciBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJUlRDX1BSRU4JCTB4RkZDMDAzMTQgIC8qIFJUQyBQcmVzY2FsZXIgRW5hYmxlIFJlZ2lzdGVyIChhbHRlcm5hdGUJbWFjcm8pICovCisKKworLyogVUFSVDAgQ29udHJvbGxlciAoMHhGRkMwMDQwMAktIDB4RkZDMDA0RkYpICovCisjZGVmaW5lCVVBUlQwX1RIUgkgICAgICAweEZGQzAwNDAwICAvKiBUcmFuc21pdCBIb2xkaW5nIHJlZ2lzdGVyICovCisjZGVmaW5lCVVBUlQwX1JCUgkgICAgICAweEZGQzAwNDAwICAvKiBSZWNlaXZlIEJ1ZmZlciByZWdpc3RlciAqLworI2RlZmluZQlVQVJUMF9ETEwJICAgICAgMHhGRkMwMDQwMCAgLyogRGl2aXNvciBMYXRjaCAoTG93LUJ5dGUpICovCisjZGVmaW5lCVVBUlQwX0lFUgkgICAgICAweEZGQzAwNDA0ICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lCVVBUlQwX0RMSAkgICAgICAweEZGQzAwNDA0ICAvKiBEaXZpc29yIExhdGNoIChIaWdoLUJ5dGUpICovCisjZGVmaW5lCVVBUlQwX0lJUgkgICAgICAweEZGQzAwNDA4ICAvKiBJbnRlcnJ1cHQgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJVUFSVDBfTENSCSAgICAgIDB4RkZDMDA0MEMgIC8qIExpbmUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQlVQVJUMF9NQ1IJCQkgMHhGRkMwMDQxMCAgLyoJTW9kZW0gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQlVQVJUMF9MU1IJICAgICAgMHhGRkMwMDQxNCAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJVUFSVDBfU0NSCSAgICAgIDB4RkZDMDA0MUMgIC8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyICovCisjZGVmaW5lCVVBUlQwX0dDVEwJCSAgICAgMHhGRkMwMDQyNAkgLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworCisvKiBTUEkwCUNvbnRyb2xsZXIgKDB4RkZDMDA1MDAgLSAweEZGQzAwNUZGKSAqLworCisjZGVmaW5lCVNQSTBfQ1RMCQkJMHhGRkMwMDUwMCAgLyogU1BJMCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQSTBfRkxHCQkJMHhGRkMwMDUwNCAgLyogU1BJMCBGbGFnIHJlZ2lzdGVyICovCisjZGVmaW5lCVNQSTBfU1RBVAkJCTB4RkZDMDA1MDggIC8qIFNQSTAgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lCVNQSTBfVERCUgkJCTB4RkZDMDA1MEMgIC8qIFNQSTAgVHJhbnNtaXQgRGF0YSBCdWZmZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BJMF9SREJSCQkJMHhGRkMwMDUxMCAgLyogU1BJMCBSZWNlaXZlIERhdGEgQnVmZmVyCVJlZ2lzdGVyICovCisjZGVmaW5lCVNQSTBfQkFVRAkJCTB4RkZDMDA1MTQgIC8qIFNQSTAgQmF1ZCByYXRlIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQSTBfU0hBRE9XCQkJMHhGRkMwMDUxOCAgLyogU1BJMF9SREJSIFNoYWRvdwlSZWdpc3RlciAqLworI2RlZmluZSBTUEkwX1JFR0JBU0UJCQlTUEkwX0NUTAorCisKKy8qIFRJTUVSIDAsIDEsIDIgUmVnaXN0ZXJzICgweEZGQzAwNjAwIC0gMHhGRkMwMDZGRikgKi8KKyNkZWZpbmUJVElNRVIwX0NPTkZJRwkJCTB4RkZDMDA2MDAgICAgIC8qIFRpbWVyCTAgQ29uZmlndXJhdGlvbglSZWdpc3RlciAqLworI2RlZmluZQlUSU1FUjBfQ09VTlRFUgkJCQkweEZGQzAwNjA0ICAgICAvKiBUaW1lcgkwIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJVElNRVIwX1BFUklPRAkJCTB4RkZDMDA2MDggICAgIC8qIFRpbWVyCTAgUGVyaW9kIFJlZ2lzdGVyICovCisjZGVmaW5lCVRJTUVSMF9XSURUSAkJCTB4RkZDMDA2MEMgICAgIC8qIFRpbWVyCTAgV2lkdGgJUmVnaXN0ZXIgKi8KKworI2RlZmluZQlUSU1FUjFfQ09ORklHCQkJMHhGRkMwMDYxMAkvKiAgVGltZXIgMSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAgKi8KKyNkZWZpbmUJVElNRVIxX0NPVU5URVIJCQkweEZGQzAwNjE0CS8qICBUaW1lciAxIENvdW50ZXIgUmVnaXN0ZXIJICAgICAqLworI2RlZmluZQlUSU1FUjFfUEVSSU9ECQkJMHhGRkMwMDYxOAkvKiAgVGltZXIgMSBQZXJpb2QgUmVnaXN0ZXIJICAgICAqLworI2RlZmluZQlUSU1FUjFfV0lEVEgJCQkweEZGQzAwNjFDCS8qICBUaW1lciAxIFdpZHRoIFJlZ2lzdGVyCSAgICAgKi8KKworI2RlZmluZQlUSU1FUjJfQ09ORklHCQkJMHhGRkMwMDYyMAkvKiBUaW1lciAyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgICAqLworI2RlZmluZQlUSU1FUjJfQ09VTlRFUgkJCTB4RkZDMDA2MjQJLyogVGltZXIgMiBDb3VudGVyIFJlZ2lzdGVyCSAgICAqLworI2RlZmluZQlUSU1FUjJfUEVSSU9ECQkJMHhGRkMwMDYyOAkvKiBUaW1lciAyIFBlcmlvZCBSZWdpc3RlcgkgICAgKi8KKyNkZWZpbmUJVElNRVIyX1dJRFRICQkJMHhGRkMwMDYyQwkvKiBUaW1lciAyIFdpZHRoIFJlZ2lzdGVyCSAgICAqLworCisjZGVmaW5lCVRJTUVSX0VOQUJMRQkJCQkweEZGQzAwNjQwCS8qIFRpbWVyIEVuYWJsZQlSZWdpc3RlciAqLworI2RlZmluZQlUSU1FUl9ESVNBQkxFCQkJCTB4RkZDMDA2NDQJLyogVGltZXIgRGlzYWJsZSBSZWdpc3RlciAqLworI2RlZmluZQlUSU1FUl9TVEFUVVMJCQkJMHhGRkMwMDY0OAkvKiBUaW1lciBTdGF0dXMJUmVnaXN0ZXIgKi8KKworCisvKiBQcm9ncmFtbWFibGUJRmxhZ3MgKDB4RkZDMDA3MDAgLSAweEZGQzAwN0ZGKSAqLworI2RlZmluZQlGSU9fRkxBR19ECQkJCTB4RkZDMDA3MDAgIC8qIEZsYWcgTWFzayB0byBkaXJlY3RseSBzcGVjaWZ5IHN0YXRlIG9mIHBpbnMgKi8KKyNkZWZpbmUJRklPX0ZMQUdfQwkJCTB4RkZDMDA3MDQgIC8qIFBlcmlwaGVyYWwgSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIgKGNsZWFyKSAqLworI2RlZmluZQlGSU9fRkxBR19TCQkJMHhGRkMwMDcwOCAgLyogUGVyaXBoZXJhbCBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAoc2V0KSAqLworI2RlZmluZQlGSU9fRkxBR19UCQkJCQkweEZGQzAwNzBDICAvKiBGbGFnIE1hc2sgdG8gZGlyZWN0bHkgdG9nZ2xlIHN0YXRlIG9mIHBpbnMgKi8KKyNkZWZpbmUJRklPX01BU0tBX0QJCQkweEZGQzAwNzEwICAvKiBGbGFnIE1hc2sgSW50ZXJydXB0IEEgUmVnaXN0ZXIgKHNldCBkaXJlY3RseSkgKi8KKyNkZWZpbmUJRklPX01BU0tBX0MJCQkweEZGQzAwNzE0ICAvKiBGbGFnIE1hc2sgSW50ZXJydXB0IEEgUmVnaXN0ZXIgKGNsZWFyKSAqLworI2RlZmluZQlGSU9fTUFTS0FfUwkJCTB4RkZDMDA3MTggIC8qIEZsYWcgTWFzayBJbnRlcnJ1cHQgQSBSZWdpc3RlciAoc2V0KSAqLworI2RlZmluZQlGSU9fTUFTS0FfVAkJCTB4RkZDMDA3MUMgIC8qIEZsYWcgTWFzayBJbnRlcnJ1cHQgQSBSZWdpc3RlciAodG9nZ2xlKSAqLworI2RlZmluZQlGSU9fTUFTS0JfRAkJCTB4RkZDMDA3MjAgIC8qIEZsYWcgTWFzayBJbnRlcnJ1cHQgQiBSZWdpc3RlciAoc2V0IGRpcmVjdGx5KSAqLworI2RlZmluZQlGSU9fTUFTS0JfQwkJCTB4RkZDMDA3MjQgIC8qIEZsYWcgTWFzayBJbnRlcnJ1cHQgQiBSZWdpc3RlciAoY2xlYXIpICovCisjZGVmaW5lCUZJT19NQVNLQl9TCQkJMHhGRkMwMDcyOCAgLyogRmxhZyBNYXNrIEludGVycnVwdCBCIFJlZ2lzdGVyIChzZXQpICovCisjZGVmaW5lCUZJT19NQVNLQl9UCQkJMHhGRkMwMDcyQyAgLyogRmxhZyBNYXNrIEludGVycnVwdCBCIFJlZ2lzdGVyICh0b2dnbGUpICovCisjZGVmaW5lCUZJT19ESVIJCQkJMHhGRkMwMDczMCAgLyogUGVyaXBoZXJhbCBGbGFnIERpcmVjdGlvbiBSZWdpc3RlciAqLworI2RlZmluZQlGSU9fUE9MQVIJCQkweEZGQzAwNzM0ICAvKiBGbGFnIFNvdXJjZSBQb2xhcml0eSBSZWdpc3RlciAqLworI2RlZmluZQlGSU9fRURHRQkJCTB4RkZDMDA3MzggIC8qIEZsYWcgU291cmNlIFNlbnNpdGl2aXR5IFJlZ2lzdGVyICovCisjZGVmaW5lCUZJT19CT1RICQkJMHhGRkMwMDczQyAgLyogRmxhZyBTZXQJb24gQk9USAlFZGdlcyBSZWdpc3RlciAqLworI2RlZmluZQlGSU9fSU5FTgkJCQkJMHhGRkMwMDc0MCAgLyogRmxhZyBJbnB1dCBFbmFibGUgUmVnaXN0ZXIgICovCisKKworLyogU1BPUlQwIENvbnRyb2xsZXIgKDB4RkZDMDA4MDAgLSAweEZGQzAwOEZGKSAqLworI2RlZmluZQlTUE9SVDBfVENSMQkJCQkweEZGQzAwODAwICAvKiBTUE9SVDAgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQT1JUMF9UQ1IyCQkJCTB4RkZDMDA4MDQgIC8qIFNQT1JUMCBUcmFuc21pdCBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BPUlQwX1RDTEtESVYJCQkweEZGQzAwODA4ICAvKiBTUE9SVDAgVHJhbnNtaXQgQ2xvY2sgRGl2aWRlciAqLworI2RlZmluZQlTUE9SVDBfVEZTRElWCQkJMHhGRkMwMDgwQyAgLyogU1BPUlQwIFRyYW5zbWl0IEZyYW1lIFN5bmMgRGl2aWRlciAqLworI2RlZmluZQlTUE9SVDBfVFgJCQkweEZGQzAwODEwICAvKiBTUE9SVDAgVFggRGF0YSBSZWdpc3RlciAqLworI2RlZmluZQlTUE9SVDBfUlgJCQkweEZGQzAwODE4ICAvKiBTUE9SVDAgUlggRGF0YSBSZWdpc3RlciAqLworI2RlZmluZQlTUE9SVDBfUkNSMQkJCQkweEZGQzAwODIwICAvKiBTUE9SVDAgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQT1JUMF9SQ1IyCQkJCTB4RkZDMDA4MjQgIC8qIFNQT1JUMCBUcmFuc21pdCBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BPUlQwX1JDTEtESVYJCQkweEZGQzAwODI4ICAvKiBTUE9SVDAgUmVjZWl2ZSBDbG9jayBEaXZpZGVyICovCisjZGVmaW5lCVNQT1JUMF9SRlNESVYJCQkweEZGQzAwODJDICAvKiBTUE9SVDAgUmVjZWl2ZSBGcmFtZSBTeW5jIERpdmlkZXIgKi8KKyNkZWZpbmUJU1BPUlQwX1NUQVQJCQkweEZGQzAwODMwICAvKiBTUE9SVDAgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQT1JUMF9DSE5MCQkJMHhGRkMwMDgzNCAgLyogU1BPUlQwIEN1cnJlbnQgQ2hhbm5lbCBSZWdpc3RlciAqLworI2RlZmluZQlTUE9SVDBfTUNNQzEJCQkweEZGQzAwODM4ICAvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUJU1BPUlQwX01DTUMyCQkJMHhGRkMwMDgzQyAgLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lCVNQT1JUMF9NVENTMAkJCTB4RkZDMDA4NDAgIC8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAwICovCisjZGVmaW5lCVNQT1JUMF9NVENTMQkJCTB4RkZDMDA4NDQgIC8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAxICovCisjZGVmaW5lCVNQT1JUMF9NVENTMgkJCTB4RkZDMDA4NDggIC8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAyICovCisjZGVmaW5lCVNQT1JUMF9NVENTMwkJCTB4RkZDMDA4NEMgIC8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAzICovCisjZGVmaW5lCVNQT1JUMF9NUkNTMAkJCTB4RkZDMDA4NTAgIC8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUJU1BPUlQwX01SQ1MxCQkJMHhGRkMwMDg1NCAgLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMSAqLworI2RlZmluZQlTUE9SVDBfTVJDUzIJCQkweEZGQzAwODU4ICAvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAyICovCisjZGVmaW5lCVNQT1JUMF9NUkNTMwkJCTB4RkZDMDA4NUMgIC8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDMgKi8KKworCisvKiBTUE9SVDEgQ29udHJvbGxlciAoMHhGRkMwMDkwMCAtIDB4RkZDMDA5RkYpICovCisjZGVmaW5lCVNQT1JUMV9UQ1IxCQkJCTB4RkZDMDA5MDAgIC8qIFNQT1JUMSBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BPUlQxX1RDUjIJCQkJMHhGRkMwMDkwNCAgLyogU1BPUlQxIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlciAqLworI2RlZmluZQlTUE9SVDFfVENMS0RJVgkJCTB4RkZDMDA5MDggIC8qIFNQT1JUMSBUcmFuc21pdCBDbG9jayBEaXZpZGVyICovCisjZGVmaW5lCVNQT1JUMV9URlNESVYJCQkweEZGQzAwOTBDICAvKiBTUE9SVDEgVHJhbnNtaXQgRnJhbWUgU3luYyBEaXZpZGVyICovCisjZGVmaW5lCVNQT1JUMV9UWAkJCTB4RkZDMDA5MTAgIC8qIFNQT1JUMSBUWCBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQT1JUMV9SWAkJCTB4RkZDMDA5MTggIC8qIFNQT1JUMSBSWCBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQT1JUMV9SQ1IxCQkJCTB4RkZDMDA5MjAgIC8qIFNQT1JUMSBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BPUlQxX1JDUjIJCQkJMHhGRkMwMDkyNCAgLyogU1BPUlQxIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlciAqLworI2RlZmluZQlTUE9SVDFfUkNMS0RJVgkJCTB4RkZDMDA5MjggIC8qIFNQT1JUMSBSZWNlaXZlIENsb2NrIERpdmlkZXIgKi8KKyNkZWZpbmUJU1BPUlQxX1JGU0RJVgkJCTB4RkZDMDA5MkMgIC8qIFNQT1JUMSBSZWNlaXZlIEZyYW1lIFN5bmMgRGl2aWRlciAqLworI2RlZmluZQlTUE9SVDFfU1RBVAkJCTB4RkZDMDA5MzAgIC8qIFNQT1JUMSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BPUlQxX0NITkwJCQkweEZGQzAwOTM0ICAvKiBTUE9SVDEgQ3VycmVudCBDaGFubmVsIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQT1JUMV9NQ01DMQkJCTB4RkZDMDA5MzggIC8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZQlTUE9SVDFfTUNNQzIJCQkweEZGQzAwOTNDICAvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUJU1BPUlQxX01UQ1MwCQkJMHhGRkMwMDk0MCAgLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUJU1BPUlQxX01UQ1MxCQkJMHhGRkMwMDk0NCAgLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUJU1BPUlQxX01UQ1MyCQkJMHhGRkMwMDk0OCAgLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUJU1BPUlQxX01UQ1MzCQkJMHhGRkMwMDk0QyAgLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUJU1BPUlQxX01SQ1MwCQkJMHhGRkMwMDk1MCAgLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMCAqLworI2RlZmluZQlTUE9SVDFfTVJDUzEJCQkweEZGQzAwOTU0ICAvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAxICovCisjZGVmaW5lCVNQT1JUMV9NUkNTMgkJCTB4RkZDMDA5NTggIC8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUJU1BPUlQxX01SQ1MzCQkJMHhGRkMwMDk1QyAgLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMyAqLworCisKKy8qIEV4dGVybmFsIEJ1cwlJbnRlcmZhY2UgVW5pdCAoMHhGRkMwMEEwMCAtIDB4RkZDMDBBRkYpICovCisvKiBBc3luY2hyb25vdXMJTWVtb3J5IENvbnRyb2xsZXIgICovCisjZGVmaW5lCUVCSVVfQU1HQ1RMCQkJMHhGRkMwMEEwMCAgLyogQXN5bmNocm9ub3VzIE1lbW9yeSBHbG9iYWwgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQlFQklVX0FNQkNUTDAJCTB4RkZDMDBBMDQgIC8qIEFzeW5jaHJvbm91cyBNZW1vcnkgQmFuawlDb250cm9sCVJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUJRUJJVV9BTUJDVEwxCQkweEZGQzAwQTA4ICAvKiBBc3luY2hyb25vdXMgTWVtb3J5IEJhbmsJQ29udHJvbAlSZWdpc3RlciAxICovCisKKy8qIFNEUkFNIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUJRUJJVV9TREdDVEwJCQkweEZGQzAwQTEwICAvKiBTRFJBTSBHbG9iYWwgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQlFQklVX1NEQkNUTAkJCTB4RkZDMDBBMTQgIC8qIFNEUkFNIEJhbmsgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQlFQklVX1NEUlJDCQkJMHhGRkMwMEExOCAgLyogU0RSQU0gUmVmcmVzaCBSYXRlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRUJJVV9TRFNUQVQJCQkweEZGQzAwQTFDICAvKiBTRFJBTSBTdGF0dXMgUmVnaXN0ZXIgKi8KKworCisKKy8qIERNQSBDb250cm9sbGVyIDAgVHJhZmZpYyBDb250cm9sIFJlZ2lzdGVycyAoMHhGRkMwMEIwMCAtIDB4RkZDMDBCRkYpICovCisKKyNkZWZpbmUJRE1BQzBfVENfUEVSCQkJMHhGRkMwMEIwQwkvKiBETUEgQ29udHJvbGxlciAwIFRyYWZmaWMgQ29udHJvbCBQZXJpb2RzIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQUMwX1RDX0NOVAkJCTB4RkZDMDBCMTAJLyogRE1BIENvbnRyb2xsZXIgMCBUcmFmZmljIENvbnRyb2wgQ3VycmVudCBDb3VudHMgUmVnaXN0ZXIgKi8KKworCisKKy8qIERNQSBDb250cm9sbGVyIDAgKDB4RkZDMDBDMDAJLSAweEZGQzAwRkZGKQkJCQkJCQkgKi8KKworI2RlZmluZQlETUEwX05FWFRfREVTQ19QVFIJCTB4RkZDMDBDMDAJLyogRE1BIENoYW5uZWwgMCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUEwX1NUQVJUX0FERFIJCQkweEZGQzAwQzA0CS8qIERNQSBDaGFubmVsIDAgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUEwX0NPTkZJRwkJCQkweEZGQzAwQzA4CS8qIERNQSBDaGFubmVsIDAgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZQlETUEwX1hfQ09VTlQJCQkweEZGQzAwQzEwCS8qIERNQSBDaGFubmVsIDAgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUEwX1hfTU9ESUZZCQkJMHhGRkMwMEMxNAkvKiBETUEgQ2hhbm5lbCAwIFggTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTBfWV9DT1VOVAkJCTB4RkZDMDBDMTgJLyogRE1BIENoYW5uZWwgMCBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTBfWV9NT0RJRlkJCQkweEZGQzAwQzFDCS8qIERNQSBDaGFubmVsIDAgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMF9DVVJSX0RFU0NfUFRSCQkweEZGQzAwQzIwCS8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMF9DVVJSX0FERFIJCQkweEZGQzAwQzI0CS8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTBfSVJRX1NUQVRVUwkJCTB4RkZDMDBDMjgJLyogRE1BIENoYW5uZWwgMCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTBfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBDMkMJLyogRE1BIENoYW5uZWwgMCBQZXJpcGhlcmFsIE1hcAlSZWdpc3RlciAqLworI2RlZmluZQlETUEwX0NVUlJfWF9DT1VOVAkJMHhGRkMwMEMzMAkvKiBETUEgQ2hhbm5lbCAwIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUEwX0NVUlJfWV9DT1VOVAkJMHhGRkMwMEMzOAkvKiBETUEgQ2hhbm5lbCAwIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisjZGVmaW5lCURNQTFfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEM0MAkvKiBETUEgQ2hhbm5lbCAxIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTFfU1RBUlRfQUREUgkJCTB4RkZDMDBDNDQJLyogRE1BIENoYW5uZWwgMSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTFfQ09ORklHCQkJCTB4RkZDMDBDNDgJLyogRE1BIENoYW5uZWwgMSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTFfWF9DT1VOVAkJCTB4RkZDMDBDNTAJLyogRE1BIENoYW5uZWwgMSBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTFfWF9NT0RJRlkJCQkweEZGQzAwQzU0CS8qIERNQSBDaGFubmVsIDEgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMV9ZX0NPVU5UCQkJMHhGRkMwMEM1OAkvKiBETUEgQ2hhbm5lbCAxIFkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMV9ZX01PRElGWQkJCTB4RkZDMDBDNUMJLyogRE1BIENoYW5uZWwgMSBZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlETUExX0NVUlJfREVTQ19QVFIJCTB4RkZDMDBDNjAJLyogRE1BIENoYW5uZWwgMSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUExX0NVUlJfQUREUgkJCTB4RkZDMDBDNjQJLyogRE1BIENoYW5uZWwgMSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMV9JUlFfU1RBVFVTCQkJMHhGRkMwMEM2OAkvKiBETUEgQ2hhbm5lbCAxIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMV9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMEM2QwkvKiBETUEgQ2hhbm5lbCAxIFBlcmlwaGVyYWwgTWFwCVJlZ2lzdGVyICovCisjZGVmaW5lCURNQTFfQ1VSUl9YX0NPVU5UCQkweEZGQzAwQzcwCS8qIERNQSBDaGFubmVsIDEgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTFfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwQzc4CS8qIERNQSBDaGFubmVsIDEgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCisKKyNkZWZpbmUJRE1BMl9ORVhUX0RFU0NfUFRSCQkweEZGQzAwQzgwCS8qIERNQSBDaGFubmVsIDIgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMl9TVEFSVF9BRERSCQkJMHhGRkMwMEM4NAkvKiBETUEgQ2hhbm5lbCAyIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMl9DT05GSUcJCQkJMHhGRkMwMEM4OAkvKiBETUEgQ2hhbm5lbCAyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMl9YX0NPVU5UCQkJMHhGRkMwMEM5MAkvKiBETUEgQ2hhbm5lbCAyIFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMl9YX01PRElGWQkJCTB4RkZDMDBDOTQJLyogRE1BIENoYW5uZWwgMiBYIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlETUEyX1lfQ09VTlQJCQkweEZGQzAwQzk4CS8qIERNQSBDaGFubmVsIDIgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUEyX1lfTU9ESUZZCQkJMHhGRkMwMEM5QwkvKiBETUEgQ2hhbm5lbCAyIFkgTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTJfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMENBMAkvKiBETUEgQ2hhbm5lbCAyIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTJfQ1VSUl9BRERSCQkJMHhGRkMwMENBNAkvKiBETUEgQ2hhbm5lbCAyIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUEyX0lSUV9TVEFUVVMJCQkweEZGQzAwQ0E4CS8qIERNQSBDaGFubmVsIDIgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQlETUEyX1BFUklQSEVSQUxfTUFQCQkweEZGQzAwQ0FDCS8qIERNQSBDaGFubmVsIDIgUGVyaXBoZXJhbCBNYXAJUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMl9DVVJSX1hfQ09VTlQJCTB4RkZDMDBDQjAJLyogRE1BIENoYW5uZWwgMiBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMl9DVVJSX1lfQ09VTlQJCTB4RkZDMDBDQjgJLyogRE1BIENoYW5uZWwgMiBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlETUEzX05FWFRfREVTQ19QVFIJCTB4RkZDMDBDQzAJLyogRE1BIENoYW5uZWwgMyBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUEzX1NUQVJUX0FERFIJCQkweEZGQzAwQ0M0CS8qIERNQSBDaGFubmVsIDMgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUEzX0NPTkZJRwkJCQkweEZGQzAwQ0M4CS8qIERNQSBDaGFubmVsIDMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZQlETUEzX1hfQ09VTlQJCQkweEZGQzAwQ0QwCS8qIERNQSBDaGFubmVsIDMgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUEzX1hfTU9ESUZZCQkJMHhGRkMwMENENAkvKiBETUEgQ2hhbm5lbCAzIFggTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTNfWV9DT1VOVAkJCTB4RkZDMDBDRDgJLyogRE1BIENoYW5uZWwgMyBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTNfWV9NT0RJRlkJCQkweEZGQzAwQ0RDCS8qIERNQSBDaGFubmVsIDMgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BM19DVVJSX0RFU0NfUFRSCQkweEZGQzAwQ0UwCS8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BM19DVVJSX0FERFIJCQkweEZGQzAwQ0U0CS8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTNfSVJRX1NUQVRVUwkJCTB4RkZDMDBDRTgJLyogRE1BIENoYW5uZWwgMyBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTNfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBDRUMJLyogRE1BIENoYW5uZWwgMyBQZXJpcGhlcmFsIE1hcAlSZWdpc3RlciAqLworI2RlZmluZQlETUEzX0NVUlJfWF9DT1VOVAkJMHhGRkMwMENGMAkvKiBETUEgQ2hhbm5lbCAzIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUEzX0NVUlJfWV9DT1VOVAkJMHhGRkMwMENGOAkvKiBETUEgQ2hhbm5lbCAzIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisjZGVmaW5lCURNQTRfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEQwMAkvKiBETUEgQ2hhbm5lbCA0IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTRfU1RBUlRfQUREUgkJCTB4RkZDMDBEMDQJLyogRE1BIENoYW5uZWwgNCBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTRfQ09ORklHCQkJCTB4RkZDMDBEMDgJLyogRE1BIENoYW5uZWwgNCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTRfWF9DT1VOVAkJCTB4RkZDMDBEMTAJLyogRE1BIENoYW5uZWwgNCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTRfWF9NT0RJRlkJCQkweEZGQzAwRDE0CS8qIERNQSBDaGFubmVsIDQgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BNF9ZX0NPVU5UCQkJMHhGRkMwMEQxOAkvKiBETUEgQ2hhbm5lbCA0IFkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BNF9ZX01PRElGWQkJCTB4RkZDMDBEMUMJLyogRE1BIENoYW5uZWwgNCBZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlETUE0X0NVUlJfREVTQ19QVFIJCTB4RkZDMDBEMjAJLyogRE1BIENoYW5uZWwgNCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUE0X0NVUlJfQUREUgkJCTB4RkZDMDBEMjQJLyogRE1BIENoYW5uZWwgNCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BNF9JUlFfU1RBVFVTCQkJMHhGRkMwMEQyOAkvKiBETUEgQ2hhbm5lbCA0IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BNF9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMEQyQwkvKiBETUEgQ2hhbm5lbCA0IFBlcmlwaGVyYWwgTWFwCVJlZ2lzdGVyICovCisjZGVmaW5lCURNQTRfQ1VSUl9YX0NPVU5UCQkweEZGQzAwRDMwCS8qIERNQSBDaGFubmVsIDQgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTRfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRDM4CS8qIERNQSBDaGFubmVsIDQgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCisKKyNkZWZpbmUJRE1BNV9ORVhUX0RFU0NfUFRSCQkweEZGQzAwRDQwCS8qIERNQSBDaGFubmVsIDUgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BNV9TVEFSVF9BRERSCQkJMHhGRkMwMEQ0NAkvKiBETUEgQ2hhbm5lbCA1IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BNV9DT05GSUcJCQkJMHhGRkMwMEQ0OAkvKiBETUEgQ2hhbm5lbCA1IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BNV9YX0NPVU5UCQkJMHhGRkMwMEQ1MAkvKiBETUEgQ2hhbm5lbCA1IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BNV9YX01PRElGWQkJCTB4RkZDMDBENTQJLyogRE1BIENoYW5uZWwgNSBYIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlETUE1X1lfQ09VTlQJCQkweEZGQzAwRDU4CS8qIERNQSBDaGFubmVsIDUgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUE1X1lfTU9ESUZZCQkJMHhGRkMwMEQ1QwkvKiBETUEgQ2hhbm5lbCA1IFkgTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTVfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMEQ2MAkvKiBETUEgQ2hhbm5lbCA1IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTVfQ1VSUl9BRERSCQkJMHhGRkMwMEQ2NAkvKiBETUEgQ2hhbm5lbCA1IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUE1X0lSUV9TVEFUVVMJCQkweEZGQzAwRDY4CS8qIERNQSBDaGFubmVsIDUgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQlETUE1X1BFUklQSEVSQUxfTUFQCQkweEZGQzAwRDZDCS8qIERNQSBDaGFubmVsIDUgUGVyaXBoZXJhbCBNYXAJUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BNV9DVVJSX1hfQ09VTlQJCTB4RkZDMDBENzAJLyogRE1BIENoYW5uZWwgNSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BNV9DVVJSX1lfQ09VTlQJCTB4RkZDMDBENzgJLyogRE1BIENoYW5uZWwgNSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlETUE2X05FWFRfREVTQ19QVFIJCTB4RkZDMDBEODAJLyogRE1BIENoYW5uZWwgNiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUE2X1NUQVJUX0FERFIJCQkweEZGQzAwRDg0CS8qIERNQSBDaGFubmVsIDYgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUE2X0NPTkZJRwkJCQkweEZGQzAwRDg4CS8qIERNQSBDaGFubmVsIDYgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZQlETUE2X1hfQ09VTlQJCQkweEZGQzAwRDkwCS8qIERNQSBDaGFubmVsIDYgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUE2X1hfTU9ESUZZCQkJMHhGRkMwMEQ5NAkvKiBETUEgQ2hhbm5lbCA2IFggTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTZfWV9DT1VOVAkJCTB4RkZDMDBEOTgJLyogRE1BIENoYW5uZWwgNiBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTZfWV9NT0RJRlkJCQkweEZGQzAwRDlDCS8qIERNQSBDaGFubmVsIDYgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BNl9DVVJSX0RFU0NfUFRSCQkweEZGQzAwREEwCS8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BNl9DVVJSX0FERFIJCQkweEZGQzAwREE0CS8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTZfSVJRX1NUQVRVUwkJCTB4RkZDMDBEQTgJLyogRE1BIENoYW5uZWwgNiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTZfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBEQUMJLyogRE1BIENoYW5uZWwgNiBQZXJpcGhlcmFsIE1hcAlSZWdpc3RlciAqLworI2RlZmluZQlETUE2X0NVUlJfWF9DT1VOVAkJMHhGRkMwMERCMAkvKiBETUEgQ2hhbm5lbCA2IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUE2X0NVUlJfWV9DT1VOVAkJMHhGRkMwMERCOAkvKiBETUEgQ2hhbm5lbCA2IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisjZGVmaW5lCURNQTdfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMERDMAkvKiBETUEgQ2hhbm5lbCA3IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTdfU1RBUlRfQUREUgkJCTB4RkZDMDBEQzQJLyogRE1BIENoYW5uZWwgNyBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTdfQ09ORklHCQkJCTB4RkZDMDBEQzgJLyogRE1BIENoYW5uZWwgNyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTdfWF9DT1VOVAkJCTB4RkZDMDBERDAJLyogRE1BIENoYW5uZWwgNyBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTdfWF9NT0RJRlkJCQkweEZGQzAwREQ0CS8qIERNQSBDaGFubmVsIDcgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BN19ZX0NPVU5UCQkJMHhGRkMwMEREOAkvKiBETUEgQ2hhbm5lbCA3IFkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BN19ZX01PRElGWQkJCTB4RkZDMDBEREMJLyogRE1BIENoYW5uZWwgNyBZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlETUE3X0NVUlJfREVTQ19QVFIJCTB4RkZDMDBERTAJLyogRE1BIENoYW5uZWwgNyBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUE3X0NVUlJfQUREUgkJCTB4RkZDMDBERTQJLyogRE1BIENoYW5uZWwgNyBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BN19JUlFfU1RBVFVTCQkJMHhGRkMwMERFOAkvKiBETUEgQ2hhbm5lbCA3IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BN19QRVJJUEhFUkFMX01BUAkJMHhGRkMwMERFQwkvKiBETUEgQ2hhbm5lbCA3IFBlcmlwaGVyYWwgTWFwCVJlZ2lzdGVyICovCisjZGVmaW5lCURNQTdfQ1VSUl9YX0NPVU5UCQkweEZGQzAwREYwCS8qIERNQSBDaGFubmVsIDcgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTdfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwREY4CS8qIERNQSBDaGFubmVsIDcgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCisKKyNkZWZpbmUJTURNQV9EMF9ORVhUX0RFU0NfUFRSCTB4RkZDMDBFMDAJLyogTWVtRE1BMCBTdHJlYW0gMCBEZXN0aW5hdGlvbglOZXh0IERlc2NyaXB0b3IJUG9pbnRlcglSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QwX1NUQVJUX0FERFIJCTB4RkZDMDBFMDQJLyogTWVtRE1BMCBTdHJlYW0gMCBEZXN0aW5hdGlvbglTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDBfQ09ORklHCQkJMHhGRkMwMEUwOAkvKiBNZW1ETUEwIFN0cmVhbSAwIERlc3RpbmF0aW9uCUNvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9EMF9YX0NPVU5UCQkweEZGQzAwRTEwCS8qIE1lbURNQTAgU3RyZWFtIDAgRGVzdGluYXRpb24JWCBDb3VudAlSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QwX1hfTU9ESUZZCQkweEZGQzAwRTE0CS8qIE1lbURNQTAgU3RyZWFtIDAgRGVzdGluYXRpb24JWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9EMF9ZX0NPVU5UCQkweEZGQzAwRTE4CS8qIE1lbURNQTAgU3RyZWFtIDAgRGVzdGluYXRpb24JWSBDb3VudAlSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QwX1lfTU9ESUZZCQkweEZGQzAwRTFDCS8qIE1lbURNQTAgU3RyZWFtIDAgRGVzdGluYXRpb24JWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9EMF9DVVJSX0RFU0NfUFRSCTB4RkZDMDBFMjAJLyogTWVtRE1BMCBTdHJlYW0gMCBEZXN0aW5hdGlvbglDdXJyZW50CURlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QwX0NVUlJfQUREUgkJMHhGRkMwMEUyNAkvKiBNZW1ETUEwIFN0cmVhbSAwIERlc3RpbmF0aW9uCUN1cnJlbnQJQWRkcmVzcwlSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QwX0lSUV9TVEFUVVMJCTB4RkZDMDBFMjgJLyogTWVtRE1BMCBTdHJlYW0gMCBEZXN0aW5hdGlvbglJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDBfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMEUyQwkvKiBNZW1ETUEwIFN0cmVhbSAwIERlc3RpbmF0aW9uCVBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDBfQ1VSUl9YX0NPVU5UCTB4RkZDMDBFMzAJLyogTWVtRE1BMCBTdHJlYW0gMCBEZXN0aW5hdGlvbglDdXJyZW50CVggQ291bnQJUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9EMF9DVVJSX1lfQ09VTlQJMHhGRkMwMEUzOAkvKiBNZW1ETUEwIFN0cmVhbSAwIERlc3RpbmF0aW9uCUN1cnJlbnQJWSBDb3VudAlSZWdpc3RlciAqLworCisjZGVmaW5lCU1ETUFfUzBfTkVYVF9ERVNDX1BUUgkweEZGQzAwRTQwCS8qIE1lbURNQTAgU3RyZWFtIDAgU291cmNlIE5leHQJRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzBfU1RBUlRfQUREUgkJMHhGRkMwMEU0NAkvKiBNZW1ETUEwIFN0cmVhbSAwIFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzBfQ09ORklHCQkJMHhGRkMwMEU0OAkvKiBNZW1ETUEwIFN0cmVhbSAwIFNvdXJjZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzBfWF9DT1VOVAkJMHhGRkMwMEU1MAkvKiBNZW1ETUEwIFN0cmVhbSAwIFNvdXJjZSBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzBfWF9NT0RJRlkJCTB4RkZDMDBFNTQJLyogTWVtRE1BMCBTdHJlYW0gMCBTb3VyY2UgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TMF9ZX0NPVU5UCQkweEZGQzAwRTU4CS8qIE1lbURNQTAgU3RyZWFtIDAgU291cmNlIFkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TMF9ZX01PRElGWQkJMHhGRkMwMEU1QwkvKiBNZW1ETUEwIFN0cmVhbSAwIFNvdXJjZSBZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX1MwX0NVUlJfREVTQ19QVFIJMHhGRkMwMEU2MAkvKiBNZW1ETUEwIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX1MwX0NVUlJfQUREUgkJMHhGRkMwMEU2NAkvKiBNZW1ETUEwIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TMF9JUlFfU1RBVFVTCQkweEZGQzAwRTY4CS8qIE1lbURNQTAgU3RyZWFtIDAgU291cmNlIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TMF9QRVJJUEhFUkFMX01BUAkweEZGQzAwRTZDCS8qIE1lbURNQTAgU3RyZWFtIDAgU291cmNlIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzBfQ1VSUl9YX0NPVU5UCTB4RkZDMDBFNzAJLyogTWVtRE1BMCBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzBfQ1VSUl9ZX0NPVU5UCTB4RkZDMDBFNzgJLyogTWVtRE1BMCBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCisKKyNkZWZpbmUJTURNQV9EMV9ORVhUX0RFU0NfUFRSCTB4RkZDMDBFODAJLyogTWVtRE1BMCBTdHJlYW0gMSBEZXN0aW5hdGlvbglOZXh0IERlc2NyaXB0b3IJUG9pbnRlcglSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QxX1NUQVJUX0FERFIJCTB4RkZDMDBFODQJLyogTWVtRE1BMCBTdHJlYW0gMSBEZXN0aW5hdGlvbglTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDFfQ09ORklHCQkJMHhGRkMwMEU4OAkvKiBNZW1ETUEwIFN0cmVhbSAxIERlc3RpbmF0aW9uCUNvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9EMV9YX0NPVU5UCQkweEZGQzAwRTkwCS8qIE1lbURNQTAgU3RyZWFtIDEgRGVzdGluYXRpb24JWCBDb3VudAlSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QxX1hfTU9ESUZZCQkweEZGQzAwRTk0CS8qIE1lbURNQTAgU3RyZWFtIDEgRGVzdGluYXRpb24JWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9EMV9ZX0NPVU5UCQkweEZGQzAwRTk4CS8qIE1lbURNQTAgU3RyZWFtIDEgRGVzdGluYXRpb24JWSBDb3VudAlSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QxX1lfTU9ESUZZCQkweEZGQzAwRTlDCS8qIE1lbURNQTAgU3RyZWFtIDEgRGVzdGluYXRpb24JWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9EMV9DVVJSX0RFU0NfUFRSCTB4RkZDMDBFQTAJLyogTWVtRE1BMCBTdHJlYW0gMSBEZXN0aW5hdGlvbglDdXJyZW50CURlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QxX0NVUlJfQUREUgkJMHhGRkMwMEVBNAkvKiBNZW1ETUEwIFN0cmVhbSAxIERlc3RpbmF0aW9uCUN1cnJlbnQJQWRkcmVzcwlSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QxX0lSUV9TVEFUVVMJCTB4RkZDMDBFQTgJLyogTWVtRE1BMCBTdHJlYW0gMSBEZXN0aW5hdGlvbglJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDFfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMEVBQwkvKiBNZW1ETUEwIFN0cmVhbSAxIERlc3RpbmF0aW9uCVBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDFfQ1VSUl9YX0NPVU5UCTB4RkZDMDBFQjAJLyogTWVtRE1BMCBTdHJlYW0gMSBEZXN0aW5hdGlvbglDdXJyZW50CVggQ291bnQJUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9EMV9DVVJSX1lfQ09VTlQJMHhGRkMwMEVCOAkvKiBNZW1ETUEwIFN0cmVhbSAxIERlc3RpbmF0aW9uCUN1cnJlbnQJWSBDb3VudAlSZWdpc3RlciAqLworCisjZGVmaW5lCU1ETUFfUzFfTkVYVF9ERVNDX1BUUgkweEZGQzAwRUMwCS8qIE1lbURNQTAgU3RyZWFtIDEgU291cmNlIE5leHQJRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzFfU1RBUlRfQUREUgkJMHhGRkMwMEVDNAkvKiBNZW1ETUEwIFN0cmVhbSAxIFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzFfQ09ORklHCQkJMHhGRkMwMEVDOAkvKiBNZW1ETUEwIFN0cmVhbSAxIFNvdXJjZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzFfWF9DT1VOVAkJMHhGRkMwMEVEMAkvKiBNZW1ETUEwIFN0cmVhbSAxIFNvdXJjZSBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzFfWF9NT0RJRlkJCTB4RkZDMDBFRDQJLyogTWVtRE1BMCBTdHJlYW0gMSBTb3VyY2UgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TMV9ZX0NPVU5UCQkweEZGQzAwRUQ4CS8qIE1lbURNQTAgU3RyZWFtIDEgU291cmNlIFkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TMV9ZX01PRElGWQkJMHhGRkMwMEVEQwkvKiBNZW1ETUEwIFN0cmVhbSAxIFNvdXJjZSBZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX1MxX0NVUlJfREVTQ19QVFIJMHhGRkMwMEVFMAkvKiBNZW1ETUEwIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX1MxX0NVUlJfQUREUgkJMHhGRkMwMEVFNAkvKiBNZW1ETUEwIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TMV9JUlFfU1RBVFVTCQkweEZGQzAwRUU4CS8qIE1lbURNQTAgU3RyZWFtIDEgU291cmNlIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TMV9QRVJJUEhFUkFMX01BUAkweEZGQzAwRUVDCS8qIE1lbURNQTAgU3RyZWFtIDEgU291cmNlIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzFfQ1VSUl9YX0NPVU5UCTB4RkZDMDBFRjAJLyogTWVtRE1BMCBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzFfQ1VSUl9ZX0NPVU5UCTB4RkZDMDBFRjgJLyogTWVtRE1BMCBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCisKKworLyogUGFyYWxsZWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKFBQSSkgKDB4RkZDMDEwMDAgLSAweEZGQzAxMEZGKSAqLworI2RlZmluZQlQUElfQ09OVFJPTAkJCTB4RkZDMDEwMDAJLyogUFBJIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJUFBJX1NUQVRVUwkJCTB4RkZDMDEwMDQJLyogUFBJIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQlQUElfQ09VTlQJCQkweEZGQzAxMDA4CS8qIFBQSSBUcmFuc2ZlcglDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlQUElfREVMQVkJCQkweEZGQzAxMDBDCS8qIFBQSSBEZWxheSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlQUElfRlJBTUUJCQkweEZGQzAxMDEwCS8qIFBQSSBGcmFtZSBMZW5ndGggUmVnaXN0ZXIgKi8KKworCisvKiBUd28tV2lyZSBJbnRlcmZhY2UgMAkoMHhGRkMwMTQwMCAtIDB4RkZDMDE0RkYpCQkJICovCisjZGVmaW5lCVRXSTBfQ0xLRElWCQkJMHhGRkMwMTQwMAkvKiBTZXJpYWwgQ2xvY2sJRGl2aWRlcglSZWdpc3RlciAqLworI2RlZmluZQlUV0kwX0NPTlRST0wJCTB4RkZDMDE0MDQJLyogVFdJMAlNYXN0ZXIgSW50ZXJuYWwJVGltZSBSZWZlcmVuY2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJVFdJMF9TTEFWRV9DVEwJCTB4RkZDMDE0MDgJLyogU2xhdmUgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTBfU0xBVkVfU1RBVAkJMHhGRkMwMTQwQwkvKiBTbGF2ZSBNb2RlIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQlUV0kwX1NMQVZFX0FERFIJCTB4RkZDMDE0MTAJLyogU2xhdmUgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTBfTUFTVEVSX0NUTAkweEZGQzAxNDE0CS8qIE1hc3RlciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJVFdJMF9NQVNURVJfU1RBVAkweEZGQzAxNDE4CS8qIE1hc3RlciBNb2RlIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQlUV0kwX01BU1RFUl9BRERSCTB4RkZDMDE0MUMJLyogTWFzdGVyIE1vZGUgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlUV0kwX0lOVF9TVEFUCQkweEZGQzAxNDIwCS8qIFRXSTAJTWFzdGVyIEludGVycnVwdCBSZWdpc3RlciAqLworI2RlZmluZQlUV0kwX0lOVF9NQVNLCQkweEZGQzAxNDI0CS8qIFRXSTAJTWFzdGVyIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTBfRklGT19DVEwJCTB4RkZDMDE0MjgJLyogRklGTwlDb250cm9sCVJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTBfRklGT19TVEFUCQkweEZGQzAxNDJDCS8qIEZJRk8JU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTBfWE1UX0RBVEE4CQkweEZGQzAxNDgwCS8qIEZJRk8JVHJhbnNtaXQgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlciAqLworI2RlZmluZQlUV0kwX1hNVF9EQVRBMTYJCTB4RkZDMDE0ODQJLyogRklGTwlUcmFuc21pdCBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTBfUkNWX0RBVEE4CQkweEZGQzAxNDg4CS8qIEZJRk8JUmVjZWl2ZQlEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTBfUkNWX0RBVEExNgkJMHhGRkMwMTQ4QwkvKiBGSUZPCVJlY2VpdmUJRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlciAqLworCisjZGVmaW5lIFRXSTBfUkVHQkFTRQkJVFdJMF9DTEtESVYKKworLyogdGhlIGZvbGxvd2luZyBhcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lCVRXSTBfUFJFU0NBTEUJIFRXSTBfQ09OVFJPTAorI2RlZmluZQlUV0kwX0lOVF9TUkMJIFRXSTBfSU5UX1NUQVQKKyNkZWZpbmUJVFdJMF9JTlRfRU5BQkxFCSBUV0kwX0lOVF9NQVNLCisKKworLyogR2VuZXJhbC1QdXJwb3NlIFBvcnRzICAoMHhGRkMwMTUwMCAtCTB4RkZDMDE1RkYpCSAqLworCisvKiBHUElPCVBvcnQgQyBSZWdpc3RlcglOYW1lcyAqLworI2RlZmluZSBQT1JUQ0lPX0ZFUgkJCTB4RkZDMDE1MDAJLyogR1BJTwlQaW4gUG9ydCBDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVENJTwkJCQkweEZGQzAxNTEwCS8qIEdQSU8JUGluIFBvcnQgQyBEYXRhCVJlZ2lzdGVyICovCisjZGVmaW5lIFBPUlRDSU9fQ0xFQVIJCQkweEZGQzAxNTIwCS8qIENsZWFyIEdQSU8gUGluIFBvcnQgQyBSZWdpc3RlciAqLworI2RlZmluZSBQT1JUQ0lPX1NFVAkJCTB4RkZDMDE1MzAJLyogU2V0IEdQSU8gUGluCVBvcnQgQyBSZWdpc3RlciAqLworI2RlZmluZSBQT1JUQ0lPX1RPR0dMRQkJCTB4RkZDMDE1NDAJLyogVG9nZ2xlIEdQSU8gUGluIFBvcnQJQyBSZWdpc3RlciAqLworI2RlZmluZSBQT1JUQ0lPX0RJUgkJCTB4RkZDMDE1NTAJLyogR1BJTwlQaW4gUG9ydCBDIERpcmVjdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBQT1JUQ0lPX0lORU4JCQkweEZGQzAxNTYwCS8qIEdQSU8JUGluIFBvcnQgQyBJbnB1dCBFbmFibGUJUmVnaXN0ZXIgKi8KKworLyogR1BJTwlQb3J0IEQgUmVnaXN0ZXIJTmFtZXMgKi8KKyNkZWZpbmUgUE9SVERJT19GRVIJCQkweEZGQzAxNTA0CS8qIEdQSU8JUGluIFBvcnQgRCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFBPUlRESU8JCQkJMHhGRkMwMTUxNAkvKiBHUElPCVBpbiBQb3J0IEQgRGF0YQlSZWdpc3RlciAqLworI2RlZmluZSBQT1JURElPX0NMRUFSCQkJMHhGRkMwMTUyNAkvKiBDbGVhciBHUElPIFBpbiBQb3J0IEQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVERJT19TRVQJCQkweEZGQzAxNTM0CS8qIFNldCBHUElPIFBpbglQb3J0IEQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVERJT19UT0dHTEUJCQkweEZGQzAxNTQ0CS8qIFRvZ2dsZSBHUElPIFBpbiBQb3J0CUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVERJT19ESVIJCQkweEZGQzAxNTU0CS8qIEdQSU8JUGluIFBvcnQgRCBEaXJlY3Rpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVERJT19JTkVOCQkJMHhGRkMwMTU2NAkvKiBHUElPCVBpbiBQb3J0IEQgSW5wdXQgRW5hYmxlCVJlZ2lzdGVyICovCisKKy8qIEdQSU8JUG9ydCBFIFJlZ2lzdGVyCU5hbWVzICovCisjZGVmaW5lIFBPUlRFSU9fRkVSCQkJMHhGRkMwMTUwOAkvKiBHUElPCVBpbiBQb3J0IEUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBQT1JURUlPCQkJCTB4RkZDMDE1MTgJLyogR1BJTwlQaW4gUG9ydCBFIERhdGEJUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVEVJT19DTEVBUgkJCTB4RkZDMDE1MjgJLyogQ2xlYXIgR1BJTyBQaW4gUG9ydCBFIFJlZ2lzdGVyICovCisjZGVmaW5lIFBPUlRFSU9fU0VUCQkJMHhGRkMwMTUzOAkvKiBTZXQgR1BJTyBQaW4JUG9ydCBFIFJlZ2lzdGVyICovCisjZGVmaW5lIFBPUlRFSU9fVE9HR0xFCQkJMHhGRkMwMTU0OAkvKiBUb2dnbGUgR1BJTyBQaW4gUG9ydAlFIFJlZ2lzdGVyICovCisjZGVmaW5lIFBPUlRFSU9fRElSCQkJMHhGRkMwMTU1OAkvKiBHUElPCVBpbiBQb3J0IEUgRGlyZWN0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFBPUlRFSU9fSU5FTgkJCTB4RkZDMDE1NjgJLyogR1BJTwlQaW4gUG9ydCBFIElucHV0IEVuYWJsZQlSZWdpc3RlciAqLworCisvKiBETUEgQ29udHJvbGxlciAxIFRyYWZmaWMgQ29udHJvbCBSZWdpc3RlcnMgKDB4RkZDMDFCMDAgLSAweEZGQzAxQkZGKSAqLworCisjZGVmaW5lCURNQUMxX1RDX1BFUgkJCTB4RkZDMDFCMEMJLyogRE1BIENvbnRyb2xsZXIgMSBUcmFmZmljIENvbnRyb2wgUGVyaW9kcyBSZWdpc3RlciAqLworI2RlZmluZQlETUFDMV9UQ19DTlQJCQkweEZGQzAxQjEwCS8qIERNQSBDb250cm9sbGVyIDEgVHJhZmZpYyBDb250cm9sIEN1cnJlbnQgQ291bnRzIFJlZ2lzdGVyICovCisKKworCisvKiBETUEgQ29udHJvbGxlciAxICgweEZGQzAxQzAwCS0gMHhGRkMwMUZGRikJCQkJCQkJICovCisjZGVmaW5lCURNQThfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMUMwMAkvKiBETUEgQ2hhbm5lbCA4IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQThfU1RBUlRfQUREUgkJCTB4RkZDMDFDMDQJLyogRE1BIENoYW5uZWwgOCBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQThfQ09ORklHCQkJCTB4RkZDMDFDMDgJLyogRE1BIENoYW5uZWwgOCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQThfWF9DT1VOVAkJCTB4RkZDMDFDMTAJLyogRE1BIENoYW5uZWwgOCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQThfWF9NT0RJRlkJCQkweEZGQzAxQzE0CS8qIERNQSBDaGFubmVsIDggWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BOF9ZX0NPVU5UCQkJMHhGRkMwMUMxOAkvKiBETUEgQ2hhbm5lbCA4IFkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BOF9ZX01PRElGWQkJCTB4RkZDMDFDMUMJLyogRE1BIENoYW5uZWwgOCBZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlETUE4X0NVUlJfREVTQ19QVFIJCTB4RkZDMDFDMjAJLyogRE1BIENoYW5uZWwgOCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUE4X0NVUlJfQUREUgkJCTB4RkZDMDFDMjQJLyogRE1BIENoYW5uZWwgOCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BOF9JUlFfU1RBVFVTCQkJMHhGRkMwMUMyOAkvKiBETUEgQ2hhbm5lbCA4IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BOF9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMUMyQwkvKiBETUEgQ2hhbm5lbCA4IFBlcmlwaGVyYWwgTWFwCVJlZ2lzdGVyICovCisjZGVmaW5lCURNQThfQ1VSUl9YX0NPVU5UCQkweEZGQzAxQzMwCS8qIERNQSBDaGFubmVsIDggQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQThfQ1VSUl9ZX0NPVU5UCQkweEZGQzAxQzM4CS8qIERNQSBDaGFubmVsIDggQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCisKKyNkZWZpbmUJRE1BOV9ORVhUX0RFU0NfUFRSCQkweEZGQzAxQzQwCS8qIERNQSBDaGFubmVsIDkgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BOV9TVEFSVF9BRERSCQkJMHhGRkMwMUM0NAkvKiBETUEgQ2hhbm5lbCA5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BOV9DT05GSUcJCQkJMHhGRkMwMUM0OAkvKiBETUEgQ2hhbm5lbCA5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BOV9YX0NPVU5UCQkJMHhGRkMwMUM1MAkvKiBETUEgQ2hhbm5lbCA5IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BOV9YX01PRElGWQkJCTB4RkZDMDFDNTQJLyogRE1BIENoYW5uZWwgOSBYIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlETUE5X1lfQ09VTlQJCQkweEZGQzAxQzU4CS8qIERNQSBDaGFubmVsIDkgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUE5X1lfTU9ESUZZCQkJMHhGRkMwMUM1QwkvKiBETUEgQ2hhbm5lbCA5IFkgTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTlfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMUM2MAkvKiBETUEgQ2hhbm5lbCA5IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTlfQ1VSUl9BRERSCQkJMHhGRkMwMUM2NAkvKiBETUEgQ2hhbm5lbCA5IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUE5X0lSUV9TVEFUVVMJCQkweEZGQzAxQzY4CS8qIERNQSBDaGFubmVsIDkgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQlETUE5X1BFUklQSEVSQUxfTUFQCQkweEZGQzAxQzZDCS8qIERNQSBDaGFubmVsIDkgUGVyaXBoZXJhbCBNYXAJUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BOV9DVVJSX1hfQ09VTlQJCTB4RkZDMDFDNzAJLyogRE1BIENoYW5uZWwgOSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BOV9DVVJSX1lfQ09VTlQJCTB4RkZDMDFDNzgJLyogRE1BIENoYW5uZWwgOSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlETUExMF9ORVhUX0RFU0NfUFRSCQkweEZGQzAxQzgwCS8qIERNQSBDaGFubmVsIDEwIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTEwX1NUQVJUX0FERFIJCTB4RkZDMDFDODQJLyogRE1BIENoYW5uZWwgMTAgU3RhcnQJQWRkcmVzcwlSZWdpc3RlciAqLworI2RlZmluZQlETUExMF9DT05GSUcJCQkweEZGQzAxQzg4CS8qIERNQSBDaGFubmVsIDEwIENvbmZpZ3VyYXRpb24JUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTBfWF9DT1VOVAkJCTB4RkZDMDFDOTAJLyogRE1BIENoYW5uZWwgMTAgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExMF9YX01PRElGWQkJCTB4RkZDMDFDOTQJLyogRE1BIENoYW5uZWwgMTAgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTBfWV9DT1VOVAkJCTB4RkZDMDFDOTgJLyogRE1BIENoYW5uZWwgMTAgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExMF9ZX01PRElGWQkJCTB4RkZDMDFDOUMJLyogRE1BIENoYW5uZWwgMTAgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTBfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMUNBMAkvKiBETUEgQ2hhbm5lbCAxMCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUExMF9DVVJSX0FERFIJCQkweEZGQzAxQ0E0CS8qIERNQSBDaGFubmVsIDEwIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUExMF9JUlFfU1RBVFVTCQkweEZGQzAxQ0E4CS8qIERNQSBDaGFubmVsIDEwIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTBfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMUNBQwkvKiBETUEgQ2hhbm5lbCAxMCBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZQlETUExMF9DVVJSX1hfQ09VTlQJCTB4RkZDMDFDQjAJLyogRE1BIENoYW5uZWwgMTAgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTEwX0NVUlJfWV9DT1VOVAkJMHhGRkMwMUNCOAkvKiBETUEgQ2hhbm5lbCAxMCBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlETUExMV9ORVhUX0RFU0NfUFRSCQkweEZGQzAxQ0MwCS8qIERNQSBDaGFubmVsIDExIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTExX1NUQVJUX0FERFIJCTB4RkZDMDFDQzQJLyogRE1BIENoYW5uZWwgMTEgU3RhcnQJQWRkcmVzcwlSZWdpc3RlciAqLworI2RlZmluZQlETUExMV9DT05GSUcJCQkweEZGQzAxQ0M4CS8qIERNQSBDaGFubmVsIDExIENvbmZpZ3VyYXRpb24JUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTFfWF9DT1VOVAkJCTB4RkZDMDFDRDAJLyogRE1BIENoYW5uZWwgMTEgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExMV9YX01PRElGWQkJCTB4RkZDMDFDRDQJLyogRE1BIENoYW5uZWwgMTEgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTFfWV9DT1VOVAkJCTB4RkZDMDFDRDgJLyogRE1BIENoYW5uZWwgMTEgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExMV9ZX01PRElGWQkJCTB4RkZDMDFDREMJLyogRE1BIENoYW5uZWwgMTEgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTFfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMUNFMAkvKiBETUEgQ2hhbm5lbCAxMSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUExMV9DVVJSX0FERFIJCQkweEZGQzAxQ0U0CS8qIERNQSBDaGFubmVsIDExIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUExMV9JUlFfU1RBVFVTCQkweEZGQzAxQ0U4CS8qIERNQSBDaGFubmVsIDExIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTFfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMUNFQwkvKiBETUEgQ2hhbm5lbCAxMSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZQlETUExMV9DVVJSX1hfQ09VTlQJCTB4RkZDMDFDRjAJLyogRE1BIENoYW5uZWwgMTEgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTExX0NVUlJfWV9DT1VOVAkJMHhGRkMwMUNGOAkvKiBETUEgQ2hhbm5lbCAxMSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlETUExMl9ORVhUX0RFU0NfUFRSCQkweEZGQzAxRDAwCS8qIERNQSBDaGFubmVsIDEyIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTEyX1NUQVJUX0FERFIJCTB4RkZDMDFEMDQJLyogRE1BIENoYW5uZWwgMTIgU3RhcnQJQWRkcmVzcwlSZWdpc3RlciAqLworI2RlZmluZQlETUExMl9DT05GSUcJCQkweEZGQzAxRDA4CS8qIERNQSBDaGFubmVsIDEyIENvbmZpZ3VyYXRpb24JUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTJfWF9DT1VOVAkJCTB4RkZDMDFEMTAJLyogRE1BIENoYW5uZWwgMTIgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExMl9YX01PRElGWQkJCTB4RkZDMDFEMTQJLyogRE1BIENoYW5uZWwgMTIgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTJfWV9DT1VOVAkJCTB4RkZDMDFEMTgJLyogRE1BIENoYW5uZWwgMTIgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExMl9ZX01PRElGWQkJCTB4RkZDMDFEMUMJLyogRE1BIENoYW5uZWwgMTIgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTJfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMUQyMAkvKiBETUEgQ2hhbm5lbCAxMiBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUExMl9DVVJSX0FERFIJCQkweEZGQzAxRDI0CS8qIERNQSBDaGFubmVsIDEyIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUExMl9JUlFfU1RBVFVTCQkweEZGQzAxRDI4CS8qIERNQSBDaGFubmVsIDEyIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTJfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMUQyQwkvKiBETUEgQ2hhbm5lbCAxMiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZQlETUExMl9DVVJSX1hfQ09VTlQJCTB4RkZDMDFEMzAJLyogRE1BIENoYW5uZWwgMTIgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTEyX0NVUlJfWV9DT1VOVAkJMHhGRkMwMUQzOAkvKiBETUEgQ2hhbm5lbCAxMiBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlETUExM19ORVhUX0RFU0NfUFRSCQkweEZGQzAxRDQwCS8qIERNQSBDaGFubmVsIDEzIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTEzX1NUQVJUX0FERFIJCTB4RkZDMDFENDQJLyogRE1BIENoYW5uZWwgMTMgU3RhcnQJQWRkcmVzcwlSZWdpc3RlciAqLworI2RlZmluZQlETUExM19DT05GSUcJCQkweEZGQzAxRDQ4CS8qIERNQSBDaGFubmVsIDEzIENvbmZpZ3VyYXRpb24JUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTNfWF9DT1VOVAkJCTB4RkZDMDFENTAJLyogRE1BIENoYW5uZWwgMTMgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExM19YX01PRElGWQkJCTB4RkZDMDFENTQJLyogRE1BIENoYW5uZWwgMTMgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTNfWV9DT1VOVAkJCTB4RkZDMDFENTgJLyogRE1BIENoYW5uZWwgMTMgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExM19ZX01PRElGWQkJCTB4RkZDMDFENUMJLyogRE1BIENoYW5uZWwgMTMgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTNfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMUQ2MAkvKiBETUEgQ2hhbm5lbCAxMyBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUExM19DVVJSX0FERFIJCQkweEZGQzAxRDY0CS8qIERNQSBDaGFubmVsIDEzIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUExM19JUlFfU1RBVFVTCQkweEZGQzAxRDY4CS8qIERNQSBDaGFubmVsIDEzIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTNfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMUQ2QwkvKiBETUEgQ2hhbm5lbCAxMyBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZQlETUExM19DVVJSX1hfQ09VTlQJCTB4RkZDMDFENzAJLyogRE1BIENoYW5uZWwgMTMgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTEzX0NVUlJfWV9DT1VOVAkJMHhGRkMwMUQ3OAkvKiBETUEgQ2hhbm5lbCAxMyBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlETUExNF9ORVhUX0RFU0NfUFRSCQkweEZGQzAxRDgwCS8qIERNQSBDaGFubmVsIDE0IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTE0X1NUQVJUX0FERFIJCTB4RkZDMDFEODQJLyogRE1BIENoYW5uZWwgMTQgU3RhcnQJQWRkcmVzcwlSZWdpc3RlciAqLworI2RlZmluZQlETUExNF9DT05GSUcJCQkweEZGQzAxRDg4CS8qIERNQSBDaGFubmVsIDE0IENvbmZpZ3VyYXRpb24JUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTRfWF9DT1VOVAkJCTB4RkZDMDFEOTAJLyogRE1BIENoYW5uZWwgMTQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExNF9YX01PRElGWQkJCTB4RkZDMDFEOTQJLyogRE1BIENoYW5uZWwgMTQgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTRfWV9DT1VOVAkJCTB4RkZDMDFEOTgJLyogRE1BIENoYW5uZWwgMTQgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExNF9ZX01PRElGWQkJCTB4RkZDMDFEOUMJLyogRE1BIENoYW5uZWwgMTQgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTRfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMURBMAkvKiBETUEgQ2hhbm5lbCAxNCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUExNF9DVVJSX0FERFIJCQkweEZGQzAxREE0CS8qIERNQSBDaGFubmVsIDE0IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUExNF9JUlFfU1RBVFVTCQkweEZGQzAxREE4CS8qIERNQSBDaGFubmVsIDE0IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTRfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMURBQwkvKiBETUEgQ2hhbm5lbCAxNCBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZQlETUExNF9DVVJSX1hfQ09VTlQJCTB4RkZDMDFEQjAJLyogRE1BIENoYW5uZWwgMTQgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTE0X0NVUlJfWV9DT1VOVAkJMHhGRkMwMURCOAkvKiBETUEgQ2hhbm5lbCAxNCBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlETUExNV9ORVhUX0RFU0NfUFRSCQkweEZGQzAxREMwCS8qIERNQSBDaGFubmVsIDE1IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTE1X1NUQVJUX0FERFIJCTB4RkZDMDFEQzQJLyogRE1BIENoYW5uZWwgMTUgU3RhcnQJQWRkcmVzcwlSZWdpc3RlciAqLworI2RlZmluZQlETUExNV9DT05GSUcJCQkweEZGQzAxREM4CS8qIERNQSBDaGFubmVsIDE1IENvbmZpZ3VyYXRpb24JUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTVfWF9DT1VOVAkJCTB4RkZDMDFERDAJLyogRE1BIENoYW5uZWwgMTUgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExNV9YX01PRElGWQkJCTB4RkZDMDFERDQJLyogRE1BIENoYW5uZWwgMTUgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTVfWV9DT1VOVAkJCTB4RkZDMDFERDgJLyogRE1BIENoYW5uZWwgMTUgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExNV9ZX01PRElGWQkJCTB4RkZDMDFEREMJLyogRE1BIENoYW5uZWwgMTUgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTVfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMURFMAkvKiBETUEgQ2hhbm5lbCAxNSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUExNV9DVVJSX0FERFIJCQkweEZGQzAxREU0CS8qIERNQSBDaGFubmVsIDE1IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUExNV9JUlFfU1RBVFVTCQkweEZGQzAxREU4CS8qIERNQSBDaGFubmVsIDE1IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTVfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMURFQwkvKiBETUEgQ2hhbm5lbCAxNSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZQlETUExNV9DVVJSX1hfQ09VTlQJCTB4RkZDMDFERjAJLyogRE1BIENoYW5uZWwgMTUgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTE1X0NVUlJfWV9DT1VOVAkJMHhGRkMwMURGOAkvKiBETUEgQ2hhbm5lbCAxNSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlETUExNl9ORVhUX0RFU0NfUFRSCQkweEZGQzAxRTAwCS8qIERNQSBDaGFubmVsIDE2IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTE2X1NUQVJUX0FERFIJCTB4RkZDMDFFMDQJLyogRE1BIENoYW5uZWwgMTYgU3RhcnQJQWRkcmVzcwlSZWdpc3RlciAqLworI2RlZmluZQlETUExNl9DT05GSUcJCQkweEZGQzAxRTA4CS8qIERNQSBDaGFubmVsIDE2IENvbmZpZ3VyYXRpb24JUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTZfWF9DT1VOVAkJCTB4RkZDMDFFMTAJLyogRE1BIENoYW5uZWwgMTYgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExNl9YX01PRElGWQkJCTB4RkZDMDFFMTQJLyogRE1BIENoYW5uZWwgMTYgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTZfWV9DT1VOVAkJCTB4RkZDMDFFMTgJLyogRE1BIENoYW5uZWwgMTYgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExNl9ZX01PRElGWQkJCTB4RkZDMDFFMUMJLyogRE1BIENoYW5uZWwgMTYgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTZfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMUUyMAkvKiBETUEgQ2hhbm5lbCAxNiBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUExNl9DVVJSX0FERFIJCQkweEZGQzAxRTI0CS8qIERNQSBDaGFubmVsIDE2IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUExNl9JUlFfU1RBVFVTCQkweEZGQzAxRTI4CS8qIERNQSBDaGFubmVsIDE2IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTZfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMUUyQwkvKiBETUEgQ2hhbm5lbCAxNiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZQlETUExNl9DVVJSX1hfQ09VTlQJCTB4RkZDMDFFMzAJLyogRE1BIENoYW5uZWwgMTYgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTE2X0NVUlJfWV9DT1VOVAkJMHhGRkMwMUUzOAkvKiBETUEgQ2hhbm5lbCAxNiBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlETUExN19ORVhUX0RFU0NfUFRSCQkweEZGQzAxRTQwCS8qIERNQSBDaGFubmVsIDE3IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTE3X1NUQVJUX0FERFIJCTB4RkZDMDFFNDQJLyogRE1BIENoYW5uZWwgMTcgU3RhcnQJQWRkcmVzcwlSZWdpc3RlciAqLworI2RlZmluZQlETUExN19DT05GSUcJCQkweEZGQzAxRTQ4CS8qIERNQSBDaGFubmVsIDE3IENvbmZpZ3VyYXRpb24JUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTdfWF9DT1VOVAkJCTB4RkZDMDFFNTAJLyogRE1BIENoYW5uZWwgMTcgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExN19YX01PRElGWQkJCTB4RkZDMDFFNTQJLyogRE1BIENoYW5uZWwgMTcgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTdfWV9DT1VOVAkJCTB4RkZDMDFFNTgJLyogRE1BIENoYW5uZWwgMTcgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExN19ZX01PRElGWQkJCTB4RkZDMDFFNUMJLyogRE1BIENoYW5uZWwgMTcgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTdfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMUU2MAkvKiBETUEgQ2hhbm5lbCAxNyBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUExN19DVVJSX0FERFIJCQkweEZGQzAxRTY0CS8qIERNQSBDaGFubmVsIDE3IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUExN19JUlFfU1RBVFVTCQkweEZGQzAxRTY4CS8qIERNQSBDaGFubmVsIDE3IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTdfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMUU2QwkvKiBETUEgQ2hhbm5lbCAxNyBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZQlETUExN19DVVJSX1hfQ09VTlQJCTB4RkZDMDFFNzAJLyogRE1BIENoYW5uZWwgMTcgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTE3X0NVUlJfWV9DT1VOVAkJMHhGRkMwMUU3OAkvKiBETUEgQ2hhbm5lbCAxNyBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlETUExOF9ORVhUX0RFU0NfUFRSCQkweEZGQzAxRTgwCS8qIERNQSBDaGFubmVsIDE4IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTE4X1NUQVJUX0FERFIJCTB4RkZDMDFFODQJLyogRE1BIENoYW5uZWwgMTggU3RhcnQJQWRkcmVzcwlSZWdpc3RlciAqLworI2RlZmluZQlETUExOF9DT05GSUcJCQkweEZGQzAxRTg4CS8qIERNQSBDaGFubmVsIDE4IENvbmZpZ3VyYXRpb24JUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMThfWF9DT1VOVAkJCTB4RkZDMDFFOTAJLyogRE1BIENoYW5uZWwgMTggWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExOF9YX01PRElGWQkJCTB4RkZDMDFFOTQJLyogRE1BIENoYW5uZWwgMTggWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMThfWV9DT1VOVAkJCTB4RkZDMDFFOTgJLyogRE1BIENoYW5uZWwgMTggWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExOF9ZX01PRElGWQkJCTB4RkZDMDFFOUMJLyogRE1BIENoYW5uZWwgMTggWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMThfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMUVBMAkvKiBETUEgQ2hhbm5lbCAxOCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUExOF9DVVJSX0FERFIJCQkweEZGQzAxRUE0CS8qIERNQSBDaGFubmVsIDE4IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUExOF9JUlFfU1RBVFVTCQkweEZGQzAxRUE4CS8qIERNQSBDaGFubmVsIDE4IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMThfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMUVBQwkvKiBETUEgQ2hhbm5lbCAxOCBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZQlETUExOF9DVVJSX1hfQ09VTlQJCTB4RkZDMDFFQjAJLyogRE1BIENoYW5uZWwgMTggQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTE4X0NVUlJfWV9DT1VOVAkJMHhGRkMwMUVCOAkvKiBETUEgQ2hhbm5lbCAxOCBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlETUExOV9ORVhUX0RFU0NfUFRSCQkweEZGQzAxRUMwCS8qIERNQSBDaGFubmVsIDE5IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTE5X1NUQVJUX0FERFIJCTB4RkZDMDFFQzQJLyogRE1BIENoYW5uZWwgMTkgU3RhcnQJQWRkcmVzcwlSZWdpc3RlciAqLworI2RlZmluZQlETUExOV9DT05GSUcJCQkweEZGQzAxRUM4CS8qIERNQSBDaGFubmVsIDE5IENvbmZpZ3VyYXRpb24JUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTlfWF9DT1VOVAkJCTB4RkZDMDFFRDAJLyogRE1BIENoYW5uZWwgMTkgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExOV9YX01PRElGWQkJCTB4RkZDMDFFRDQJLyogRE1BIENoYW5uZWwgMTkgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTlfWV9DT1VOVAkJCTB4RkZDMDFFRDgJLyogRE1BIENoYW5uZWwgMTkgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlETUExOV9ZX01PRElGWQkJCTB4RkZDMDFFREMJLyogRE1BIENoYW5uZWwgMTkgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTlfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMUVFMAkvKiBETUEgQ2hhbm5lbCAxOSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZQlETUExOV9DVVJSX0FERFIJCQkweEZGQzAxRUU0CS8qIERNQSBDaGFubmVsIDE5IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlETUExOV9JUlFfU1RBVFVTCQkweEZGQzAxRUU4CS8qIERNQSBDaGFubmVsIDE5IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BMTlfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMUVFQwkvKiBETUEgQ2hhbm5lbCAxOSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZQlETUExOV9DVVJSX1hfQ09VTlQJCTB4RkZDMDFFRjAJLyogRE1BIENoYW5uZWwgMTkgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lCURNQTE5X0NVUlJfWV9DT1VOVAkJMHhGRkMwMUVGOAkvKiBETUEgQ2hhbm5lbCAxOSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlNRE1BX0QyX05FWFRfREVTQ19QVFIJMHhGRkMwMUYwMAkvKiBNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uCU5leHQgRGVzY3JpcHRvcglQb2ludGVyCVJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDJfU1RBUlRfQUREUgkJMHhGRkMwMUYwNAkvKiBNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uCVN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9EMl9DT05GSUcJCQkweEZGQzAxRjA4CS8qIE1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24JQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QyX1hfQ09VTlQJCTB4RkZDMDFGMTAJLyogTWVtRE1BMSBTdHJlYW0gMCBEZXN0aW5hdGlvbglYIENvdW50CVJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDJfWF9NT0RJRlkJCTB4RkZDMDFGMTQJLyogTWVtRE1BMSBTdHJlYW0gMCBEZXN0aW5hdGlvbglYIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QyX1lfQ09VTlQJCTB4RkZDMDFGMTgJLyogTWVtRE1BMSBTdHJlYW0gMCBEZXN0aW5hdGlvbglZIENvdW50CVJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDJfWV9NT0RJRlkJCTB4RkZDMDFGMUMJLyogTWVtRE1BMSBTdHJlYW0gMCBEZXN0aW5hdGlvbglZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QyX0NVUlJfREVTQ19QVFIJMHhGRkMwMUYyMAkvKiBNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uCUN1cnJlbnQJRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDJfQ1VSUl9BRERSCQkweEZGQzAxRjI0CS8qIE1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24JQ3VycmVudAlBZGRyZXNzCVJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDJfSVJRX1NUQVRVUwkJMHhGRkMwMUYyOAkvKiBNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uCUludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9EMl9QRVJJUEhFUkFMX01BUAkweEZGQzAxRjJDCS8qIE1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24JUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9EMl9DVVJSX1hfQ09VTlQJMHhGRkMwMUYzMAkvKiBNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uCUN1cnJlbnQJWCBDb3VudAlSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QyX0NVUlJfWV9DT1VOVAkweEZGQzAxRjM4CS8qIE1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24JQ3VycmVudAlZIENvdW50CVJlZ2lzdGVyICovCisKKyNkZWZpbmUJTURNQV9TMl9ORVhUX0RFU0NfUFRSCTB4RkZDMDFGNDAJLyogTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgTmV4dAlEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TMl9TVEFSVF9BRERSCQkweEZGQzAxRjQ0CS8qIE1lbURNQTEgU3RyZWFtIDAgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TMl9DT05GSUcJCQkweEZGQzAxRjQ4CS8qIE1lbURNQTEgU3RyZWFtIDAgU291cmNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TMl9YX0NPVU5UCQkweEZGQzAxRjUwCS8qIE1lbURNQTEgU3RyZWFtIDAgU291cmNlIFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TMl9YX01PRElGWQkJMHhGRkMwMUY1NAkvKiBNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBYIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX1MyX1lfQ09VTlQJCTB4RkZDMDFGNTgJLyogTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX1MyX1lfTU9ESUZZCQkweEZGQzAxRjVDCS8qIE1lbURNQTEgU3RyZWFtIDAgU291cmNlIFkgTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzJfQ1VSUl9ERVNDX1BUUgkweEZGQzAxRjYwCS8qIE1lbURNQTEgU3RyZWFtIDAgU291cmNlIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzJfQ1VSUl9BRERSCQkweEZGQzAxRjY0CS8qIE1lbURNQTEgU3RyZWFtIDAgU291cmNlIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX1MyX0lSUV9TVEFUVVMJCTB4RkZDMDFGNjgJLyogTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX1MyX1BFUklQSEVSQUxfTUFQCTB4RkZDMDFGNkMJLyogTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TMl9DVVJSX1hfQ09VTlQJMHhGRkMwMUY3MAkvKiBNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TMl9DVVJSX1lfQ09VTlQJMHhGRkMwMUY3OAkvKiBNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlNRE1BX0QzX05FWFRfREVTQ19QVFIJMHhGRkMwMUY4MAkvKiBNZW1ETUExIFN0cmVhbSAxIERlc3RpbmF0aW9uCU5leHQgRGVzY3JpcHRvcglQb2ludGVyCVJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDNfU1RBUlRfQUREUgkJMHhGRkMwMUY4NAkvKiBNZW1ETUExIFN0cmVhbSAxIERlc3RpbmF0aW9uCVN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9EM19DT05GSUcJCQkweEZGQzAxRjg4CS8qIE1lbURNQTEgU3RyZWFtIDEgRGVzdGluYXRpb24JQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QzX1hfQ09VTlQJCTB4RkZDMDFGOTAJLyogTWVtRE1BMSBTdHJlYW0gMSBEZXN0aW5hdGlvbglYIENvdW50CVJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDNfWF9NT0RJRlkJCTB4RkZDMDFGOTQJLyogTWVtRE1BMSBTdHJlYW0gMSBEZXN0aW5hdGlvbglYIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QzX1lfQ09VTlQJCTB4RkZDMDFGOTgJLyogTWVtRE1BMSBTdHJlYW0gMSBEZXN0aW5hdGlvbglZIENvdW50CVJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDNfWV9NT0RJRlkJCTB4RkZDMDFGOUMJLyogTWVtRE1BMSBTdHJlYW0gMSBEZXN0aW5hdGlvbglZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QzX0NVUlJfREVTQ19QVFIJMHhGRkMwMUZBMAkvKiBNZW1ETUExIFN0cmVhbSAxIERlc3RpbmF0aW9uCUN1cnJlbnQJRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDNfQ1VSUl9BRERSCQkweEZGQzAxRkE0CS8qIE1lbURNQTEgU3RyZWFtIDEgRGVzdGluYXRpb24JQ3VycmVudAlBZGRyZXNzCVJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfRDNfSVJRX1NUQVRVUwkJMHhGRkMwMUZBOAkvKiBNZW1ETUExIFN0cmVhbSAxIERlc3RpbmF0aW9uCUludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9EM19QRVJJUEhFUkFMX01BUAkweEZGQzAxRkFDCS8qIE1lbURNQTEgU3RyZWFtIDEgRGVzdGluYXRpb24JUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9EM19DVVJSX1hfQ09VTlQJMHhGRkMwMUZCMAkvKiBNZW1ETUExIFN0cmVhbSAxIERlc3RpbmF0aW9uCUN1cnJlbnQJWCBDb3VudAlSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX0QzX0NVUlJfWV9DT1VOVAkweEZGQzAxRkI4CS8qIE1lbURNQTEgU3RyZWFtIDEgRGVzdGluYXRpb24JQ3VycmVudAlZIENvdW50CVJlZ2lzdGVyICovCisKKyNkZWZpbmUJTURNQV9TM19ORVhUX0RFU0NfUFRSCTB4RkZDMDFGQzAJLyogTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgTmV4dAlEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TM19TVEFSVF9BRERSCQkweEZGQzAxRkM0CS8qIE1lbURNQTEgU3RyZWFtIDEgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TM19DT05GSUcJCQkweEZGQzAxRkM4CS8qIE1lbURNQTEgU3RyZWFtIDEgU291cmNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TM19YX0NPVU5UCQkweEZGQzAxRkQwCS8qIE1lbURNQTEgU3RyZWFtIDEgU291cmNlIFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TM19YX01PRElGWQkJMHhGRkMwMUZENAkvKiBNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBYIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX1MzX1lfQ09VTlQJCTB4RkZDMDFGRDgJLyogTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX1MzX1lfTU9ESUZZCQkweEZGQzAxRkRDCS8qIE1lbURNQTEgU3RyZWFtIDEgU291cmNlIFkgTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzNfQ1VSUl9ERVNDX1BUUgkweEZGQzAxRkUwCS8qIE1lbURNQTEgU3RyZWFtIDEgU291cmNlIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCU1ETUFfUzNfQ1VSUl9BRERSCQkweEZGQzAxRkU0CS8qIE1lbURNQTEgU3RyZWFtIDEgU291cmNlIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX1MzX0lSUV9TVEFUVVMJCTB4RkZDMDFGRTgJLyogTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQlNRE1BX1MzX1BFUklQSEVSQUxfTUFQCTB4RkZDMDFGRUMJLyogTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TM19DVVJSX1hfQ09VTlQJMHhGRkMwMUZGMAkvKiBNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTURNQV9TM19DVVJSX1lfQ09VTlQJMHhGRkMwMUZGOAkvKiBNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworCisvKiBVQVJUMSBDb250cm9sbGVyCQkoMHhGRkMwMjAwMCAtIDB4RkZDMDIwRkYpCSAqLworI2RlZmluZQlVQVJUMV9USFIJCQkweEZGQzAyMDAwCS8qIFRyYW5zbWl0IEhvbGRpbmcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJVUFSVDFfUkJSCQkJMHhGRkMwMjAwMAkvKiBSZWNlaXZlIEJ1ZmZlciByZWdpc3RlciAqLworI2RlZmluZQlVQVJUMV9ETEwJCQkweEZGQzAyMDAwCS8qIERpdmlzb3IgTGF0Y2ggKExvdy1CeXRlKSAqLworI2RlZmluZQlVQVJUMV9JRVIJCQkweEZGQzAyMDA0CS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJVUFSVDFfRExICQkJMHhGRkMwMjAwNAkvKiBEaXZpc29yIExhdGNoIChIaWdoLUJ5dGUpICovCisjZGVmaW5lCVVBUlQxX0lJUgkJCTB4RkZDMDIwMDgJLyogSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCVVBUlQxX0xDUgkJCTB4RkZDMDIwMEMJLyogTGluZQlDb250cm9sCVJlZ2lzdGVyICovCisjZGVmaW5lCVVBUlQxX01DUgkJCTB4RkZDMDIwMTAJLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQlVQVJUMV9MU1IJCQkweEZGQzAyMDE0CS8qIExpbmUJU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCVVBUlQxX1NDUgkJCTB4RkZDMDIwMUMJLyogU0NSIFNjcmF0Y2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUJVUFSVDFfR0NUTAkJCTB4RkZDMDIwMjQJLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworCisvKiBVQVJUMiBDb250cm9sbGVyCQkoMHhGRkMwMjEwMCAtIDB4RkZDMDIxRkYpCSAqLworI2RlZmluZQlVQVJUMl9USFIJCQkweEZGQzAyMTAwCS8qIFRyYW5zbWl0IEhvbGRpbmcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJVUFSVDJfUkJSCQkJMHhGRkMwMjEwMAkvKiBSZWNlaXZlIEJ1ZmZlciByZWdpc3RlciAqLworI2RlZmluZQlVQVJUMl9ETEwJCQkweEZGQzAyMTAwCS8qIERpdmlzb3IgTGF0Y2ggKExvdy1CeXRlKSAqLworI2RlZmluZQlVQVJUMl9JRVIJCQkweEZGQzAyMTA0CS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJVUFSVDJfRExICQkJMHhGRkMwMjEwNAkvKiBEaXZpc29yIExhdGNoIChIaWdoLUJ5dGUpICovCisjZGVmaW5lCVVBUlQyX0lJUgkJCTB4RkZDMDIxMDgJLyogSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCVVBUlQyX0xDUgkJCTB4RkZDMDIxMEMJLyogTGluZQlDb250cm9sCVJlZ2lzdGVyICovCisjZGVmaW5lCVVBUlQyX01DUgkJCTB4RkZDMDIxMTAJLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQlVQVJUMl9MU1IJCQkweEZGQzAyMTE0CS8qIExpbmUJU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCVVBUlQyX1NDUgkJCTB4RkZDMDIxMUMJLyogU0NSIFNjcmF0Y2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUJVUFSVDJfR0NUTAkJCTB4RkZDMDIxMjQJLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworCisvKiBUd28tV2lyZSBJbnRlcmZhY2UgMQkoMHhGRkMwMjIwMCAtIDB4RkZDMDIyRkYpCQkJICovCisjZGVmaW5lCVRXSTFfQ0xLRElWCQkJMHhGRkMwMjIwMAkvKiBTZXJpYWwgQ2xvY2sJRGl2aWRlcglSZWdpc3RlciAqLworI2RlZmluZQlUV0kxX0NPTlRST0wJCTB4RkZDMDIyMDQJLyogVFdJMQlNYXN0ZXIgSW50ZXJuYWwJVGltZSBSZWZlcmVuY2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJVFdJMV9TTEFWRV9DVEwJCTB4RkZDMDIyMDgJLyogU2xhdmUgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTFfU0xBVkVfU1RBVAkJMHhGRkMwMjIwQwkvKiBTbGF2ZSBNb2RlIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQlUV0kxX1NMQVZFX0FERFIJCTB4RkZDMDIyMTAJLyogU2xhdmUgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTFfTUFTVEVSX0NUTAkweEZGQzAyMjE0CS8qIE1hc3RlciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJVFdJMV9NQVNURVJfU1RBVAkweEZGQzAyMjE4CS8qIE1hc3RlciBNb2RlIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQlUV0kxX01BU1RFUl9BRERSCTB4RkZDMDIyMUMJLyogTWFzdGVyIE1vZGUgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZQlUV0kxX0lOVF9TVEFUCQkweEZGQzAyMjIwCS8qIFRXSTEJTWFzdGVyIEludGVycnVwdCBSZWdpc3RlciAqLworI2RlZmluZQlUV0kxX0lOVF9NQVNLCQkweEZGQzAyMjI0CS8qIFRXSTEJTWFzdGVyIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTFfRklGT19DVEwJCTB4RkZDMDIyMjgJLyogRklGTwlDb250cm9sCVJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTFfRklGT19TVEFUCQkweEZGQzAyMjJDCS8qIEZJRk8JU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTFfWE1UX0RBVEE4CQkweEZGQzAyMjgwCS8qIEZJRk8JVHJhbnNtaXQgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlciAqLworI2RlZmluZQlUV0kxX1hNVF9EQVRBMTYJCTB4RkZDMDIyODQJLyogRklGTwlUcmFuc21pdCBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTFfUkNWX0RBVEE4CQkweEZGQzAyMjg4CS8qIEZJRk8JUmVjZWl2ZQlEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTFfUkNWX0RBVEExNgkJMHhGRkMwMjI4QwkvKiBGSUZPCVJlY2VpdmUJRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlciAqLworI2RlZmluZSBUV0kxX1JFR0JBU0UJCVRXSTFfQ0xLRElWCisKKworLyogdGhlIGZvbGxvd2luZyBhcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lCVRXSTFfUFJFU0NBTEUJICBUV0kxX0NPTlRST0wKKyNkZWZpbmUJVFdJMV9JTlRfU1JDCSAgVFdJMV9JTlRfU1RBVAorI2RlZmluZQlUV0kxX0lOVF9FTkFCTEUJICBUV0kxX0lOVF9NQVNLCisKKworLyogU1BJMQlDb250cm9sbGVyCQkoMHhGRkMwMjMwMCAtIDB4RkZDMDIzRkYpCSAqLworI2RlZmluZQlTUEkxX0NUTAkJCTB4RkZDMDIzMDAgIC8qIFNQSTEgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQlTUEkxX0ZMRwkJCTB4RkZDMDIzMDQgIC8qIFNQSTEgRmxhZyByZWdpc3RlciAqLworI2RlZmluZQlTUEkxX1NUQVQJCQkweEZGQzAyMzA4ICAvKiBTUEkxIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZQlTUEkxX1REQlIJCQkweEZGQzAyMzBDICAvKiBTUEkxIFRyYW5zbWl0IERhdGEgQnVmZmVyIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQSTFfUkRCUgkJCTB4RkZDMDIzMTAgIC8qIFNQSTEgUmVjZWl2ZSBEYXRhIEJ1ZmZlcglSZWdpc3RlciAqLworI2RlZmluZQlTUEkxX0JBVUQJCQkweEZGQzAyMzE0ICAvKiBTUEkxIEJhdWQgcmF0ZSBSZWdpc3RlciAqLworI2RlZmluZQlTUEkxX1NIQURPVwkJCTB4RkZDMDIzMTggIC8qIFNQSTFfUkRCUiBTaGFkb3cJUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BJMV9SRUdCQVNFCQkJU1BJMV9DVEwKKworLyogU1BJMglDb250cm9sbGVyCQkoMHhGRkMwMjQwMCAtIDB4RkZDMDI0RkYpCSAqLworI2RlZmluZQlTUEkyX0NUTAkJCTB4RkZDMDI0MDAgIC8qIFNQSTIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQlTUEkyX0ZMRwkJCTB4RkZDMDI0MDQgIC8qIFNQSTIgRmxhZyByZWdpc3RlciAqLworI2RlZmluZQlTUEkyX1NUQVQJCQkweEZGQzAyNDA4ICAvKiBTUEkyIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZQlTUEkyX1REQlIJCQkweEZGQzAyNDBDICAvKiBTUEkyIFRyYW5zbWl0IERhdGEgQnVmZmVyIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQSTJfUkRCUgkJCTB4RkZDMDI0MTAgIC8qIFNQSTIgUmVjZWl2ZSBEYXRhIEJ1ZmZlcglSZWdpc3RlciAqLworI2RlZmluZQlTUEkyX0JBVUQJCQkweEZGQzAyNDE0ICAvKiBTUEkyIEJhdWQgcmF0ZSBSZWdpc3RlciAqLworI2RlZmluZQlTUEkyX1NIQURPVwkJCTB4RkZDMDI0MTggIC8qIFNQSTJfUkRCUiBTaGFkb3cJUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BJMl9SRUdCQVNFCQkJU1BJMl9DVEwKKworLyogU1BPUlQyIENvbnRyb2xsZXIJCSgweEZGQzAyNTAwIC0gMHhGRkMwMjVGRikJCQkgKi8KKyNkZWZpbmUJU1BPUlQyX1RDUjEJCQkweEZGQzAyNTAwCS8qIFNQT1JUMiBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BPUlQyX1RDUjIJCQkweEZGQzAyNTA0CS8qIFNQT1JUMiBUcmFuc21pdCBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BPUlQyX1RDTEtESVYJCTB4RkZDMDI1MDgJLyogU1BPUlQyIFRyYW5zbWl0IENsb2NrIERpdmlkZXIgKi8KKyNkZWZpbmUJU1BPUlQyX1RGU0RJVgkJMHhGRkMwMjUwQwkvKiBTUE9SVDIgVHJhbnNtaXQgRnJhbWUgU3luYyBEaXZpZGVyICovCisjZGVmaW5lCVNQT1JUMl9UWAkJCTB4RkZDMDI1MTAJLyogU1BPUlQyIFRYIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BPUlQyX1JYCQkJMHhGRkMwMjUxOAkvKiBTUE9SVDIgUlggRGF0YSBSZWdpc3RlciAqLworI2RlZmluZQlTUE9SVDJfUkNSMQkJCTB4RkZDMDI1MjAJLyogU1BPUlQyIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlciAqLworI2RlZmluZQlTUE9SVDJfUkNSMgkJCTB4RkZDMDI1MjQJLyogU1BPUlQyIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlciAqLworI2RlZmluZQlTUE9SVDJfUkNMS0RJVgkJMHhGRkMwMjUyOAkvKiBTUE9SVDIgUmVjZWl2ZSBDbG9jawlEaXZpZGVyICovCisjZGVmaW5lCVNQT1JUMl9SRlNESVYJCTB4RkZDMDI1MkMJLyogU1BPUlQyIFJlY2VpdmUgRnJhbWUJU3luYyBEaXZpZGVyICovCisjZGVmaW5lCVNQT1JUMl9TVEFUCQkJMHhGRkMwMjUzMAkvKiBTUE9SVDIgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQT1JUMl9DSE5MCQkJMHhGRkMwMjUzNAkvKiBTUE9SVDIgQ3VycmVudCBDaGFubmVsIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQT1JUMl9NQ01DMQkJMHhGRkMwMjUzOAkvKiBTUE9SVDIgTXVsdGktQ2hhbm5lbAlDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUJU1BPUlQyX01DTUMyCQkweEZGQzAyNTNDCS8qIFNQT1JUMiBNdWx0aS1DaGFubmVsCUNvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZQlTUE9SVDJfTVRDUzAJCTB4RkZDMDI1NDAJLyogU1BPUlQyIE11bHRpLUNoYW5uZWwJVHJhbnNtaXQgU2VsZWN0CVJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUJU1BPUlQyX01UQ1MxCQkweEZGQzAyNTQ0CS8qIFNQT1JUMiBNdWx0aS1DaGFubmVsCVRyYW5zbWl0IFNlbGVjdAlSZWdpc3RlciAxICovCisjZGVmaW5lCVNQT1JUMl9NVENTMgkJMHhGRkMwMjU0OAkvKiBTUE9SVDIgTXVsdGktQ2hhbm5lbAlUcmFuc21pdCBTZWxlY3QJUmVnaXN0ZXIgMiAqLworI2RlZmluZQlTUE9SVDJfTVRDUzMJCTB4RkZDMDI1NEMJLyogU1BPUlQyIE11bHRpLUNoYW5uZWwJVHJhbnNtaXQgU2VsZWN0CVJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUJU1BPUlQyX01SQ1MwCQkweEZGQzAyNTUwCS8qIFNQT1JUMiBNdWx0aS1DaGFubmVsCVJlY2VpdmUJU2VsZWN0IFJlZ2lzdGVyCTAgKi8KKyNkZWZpbmUJU1BPUlQyX01SQ1MxCQkweEZGQzAyNTU0CS8qIFNQT1JUMiBNdWx0aS1DaGFubmVsCVJlY2VpdmUJU2VsZWN0IFJlZ2lzdGVyCTEgKi8KKyNkZWZpbmUJU1BPUlQyX01SQ1MyCQkweEZGQzAyNTU4CS8qIFNQT1JUMiBNdWx0aS1DaGFubmVsCVJlY2VpdmUJU2VsZWN0IFJlZ2lzdGVyCTIgKi8KKyNkZWZpbmUJU1BPUlQyX01SQ1MzCQkweEZGQzAyNTVDCS8qIFNQT1JUMiBNdWx0aS1DaGFubmVsCVJlY2VpdmUJU2VsZWN0IFJlZ2lzdGVyCTMgKi8KKworCisvKiBTUE9SVDMgQ29udHJvbGxlcgkJKDB4RkZDMDI2MDAgLSAweEZGQzAyNkZGKQkJCSAqLworI2RlZmluZQlTUE9SVDNfVENSMQkJCTB4RkZDMDI2MDAJLyogU1BPUlQzIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlciAqLworI2RlZmluZQlTUE9SVDNfVENSMgkJCTB4RkZDMDI2MDQJLyogU1BPUlQzIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlciAqLworI2RlZmluZQlTUE9SVDNfVENMS0RJVgkJMHhGRkMwMjYwOAkvKiBTUE9SVDMgVHJhbnNtaXQgQ2xvY2sgRGl2aWRlciAqLworI2RlZmluZQlTUE9SVDNfVEZTRElWCQkweEZGQzAyNjBDCS8qIFNQT1JUMyBUcmFuc21pdCBGcmFtZSBTeW5jIERpdmlkZXIgKi8KKyNkZWZpbmUJU1BPUlQzX1RYCQkJMHhGRkMwMjYxMAkvKiBTUE9SVDMgVFggRGF0YSBSZWdpc3RlciAqLworI2RlZmluZQlTUE9SVDNfUlgJCQkweEZGQzAyNjE4CS8qIFNQT1JUMyBSWCBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQT1JUM19SQ1IxCQkJMHhGRkMwMjYyMAkvKiBTUE9SVDMgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQT1JUM19SQ1IyCQkJMHhGRkMwMjYyNAkvKiBTUE9SVDMgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyICovCisjZGVmaW5lCVNQT1JUM19SQ0xLRElWCQkweEZGQzAyNjI4CS8qIFNQT1JUMyBSZWNlaXZlIENsb2NrCURpdmlkZXIgKi8KKyNkZWZpbmUJU1BPUlQzX1JGU0RJVgkJMHhGRkMwMjYyQwkvKiBTUE9SVDMgUmVjZWl2ZSBGcmFtZQlTeW5jIERpdmlkZXIgKi8KKyNkZWZpbmUJU1BPUlQzX1NUQVQJCQkweEZGQzAyNjMwCS8qIFNQT1JUMyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BPUlQzX0NITkwJCQkweEZGQzAyNjM0CS8qIFNQT1JUMyBDdXJyZW50IENoYW5uZWwgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU1BPUlQzX01DTUMxCQkweEZGQzAyNjM4CS8qIFNQT1JUMyBNdWx0aS1DaGFubmVsCUNvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZQlTUE9SVDNfTUNNQzIJCTB4RkZDMDI2M0MJLyogU1BPUlQzIE11bHRpLUNoYW5uZWwJQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lCVNQT1JUM19NVENTMAkJMHhGRkMwMjY0MAkvKiBTUE9SVDMgTXVsdGktQ2hhbm5lbAlUcmFuc21pdCBTZWxlY3QJUmVnaXN0ZXIgMCAqLworI2RlZmluZQlTUE9SVDNfTVRDUzEJCTB4RkZDMDI2NDQJLyogU1BPUlQzIE11bHRpLUNoYW5uZWwJVHJhbnNtaXQgU2VsZWN0CVJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUJU1BPUlQzX01UQ1MyCQkweEZGQzAyNjQ4CS8qIFNQT1JUMyBNdWx0aS1DaGFubmVsCVRyYW5zbWl0IFNlbGVjdAlSZWdpc3RlciAyICovCisjZGVmaW5lCVNQT1JUM19NVENTMwkJMHhGRkMwMjY0QwkvKiBTUE9SVDMgTXVsdGktQ2hhbm5lbAlUcmFuc21pdCBTZWxlY3QJUmVnaXN0ZXIgMyAqLworI2RlZmluZQlTUE9SVDNfTVJDUzAJCTB4RkZDMDI2NTAJLyogU1BPUlQzIE11bHRpLUNoYW5uZWwJUmVjZWl2ZQlTZWxlY3QgUmVnaXN0ZXIJMCAqLworI2RlZmluZQlTUE9SVDNfTVJDUzEJCTB4RkZDMDI2NTQJLyogU1BPUlQzIE11bHRpLUNoYW5uZWwJUmVjZWl2ZQlTZWxlY3QgUmVnaXN0ZXIJMSAqLworI2RlZmluZQlTUE9SVDNfTVJDUzIJCTB4RkZDMDI2NTgJLyogU1BPUlQzIE11bHRpLUNoYW5uZWwJUmVjZWl2ZQlTZWxlY3QgUmVnaXN0ZXIJMiAqLworI2RlZmluZQlTUE9SVDNfTVJDUzMJCTB4RkZDMDI2NUMJLyogU1BPUlQzIE11bHRpLUNoYW5uZWwJUmVjZWl2ZQlTZWxlY3QgUmVnaXN0ZXIJMyAqLworCisKKy8qIENBTiBDb250cm9sbGVyCQkoMHhGRkMwMkEwMCAtIDB4RkZDMDJGRkYpCQkJCSAqLworLyogRm9yIE1haWxib3hlcyAwLTE1CQkJCQkJCQkJCQkgKi8KKyNkZWZpbmUJQ0FOX01DMQkJCQkweEZGQzAyQTAwCS8qIE1haWxib3ggY29uZmlnIHJlZyAxCSAqLworI2RlZmluZQlDQU5fTUQxCQkJCTB4RkZDMDJBMDQJLyogTWFpbGJveCBkaXJlY3Rpb24gcmVnIDEgKi8KKyNkZWZpbmUJQ0FOX1RSUzEJCQkweEZGQzAyQTA4CS8qIFRyYW5zbWl0IFJlcXVlc3QgU2V0CXJlZyAxICovCisjZGVmaW5lCUNBTl9UUlIxCQkJMHhGRkMwMkEwQwkvKiBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0IHJlZyAxICovCisjZGVmaW5lCUNBTl9UQTEJCQkJMHhGRkMwMkExMAkvKiBUcmFuc21pdCBBY2tub3dsZWRnZQlyZWcgMSAqLworI2RlZmluZQlDQU5fQUExCQkJCTB4RkZDMDJBMTQJLyogVHJhbnNtaXQgQWJvcnQgQWNrbm93bGVkZ2UgcmVnIDEgKi8KKyNkZWZpbmUJQ0FOX1JNUDEJCQkweEZGQzAyQTE4CS8qIFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nIHJlZyAxICovCisjZGVmaW5lCUNBTl9STUwxCQkJMHhGRkMwMkExQwkvKiBSZWNlaXZlIE1lc3NhZ2UgTG9zdAlyZWcgMSAqLworI2RlZmluZQlDQU5fTUJUSUYxCQkJMHhGRkMwMkEyMAkvKiBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnIHJlZyAxICovCisjZGVmaW5lCUNBTl9NQlJJRjEJCQkweEZGQzAyQTI0CS8qIE1haWxib3ggUmVjZWl2ZSAgSW50ZXJydXB0IEZsYWcgcmVnIDEgKi8KKyNkZWZpbmUJQ0FOX01CSU0xCQkJMHhGRkMwMkEyOAkvKiBNYWlsYm94IEludGVycnVwdCBNYXNrIHJlZyAxICovCisjZGVmaW5lCUNBTl9SRkgxCQkJMHhGRkMwMkEyQwkvKiBSZW1vdGUgRnJhbWUJSGFuZGxpbmcgcmVnIDEgKi8KKyNkZWZpbmUJQ0FOX09QU1MxCQkJMHhGRkMwMkEzMAkvKiBPdmVyd3JpdGUgUHJvdGVjdGlvbglTaW5nbGUgU2hvdCBYbWlzc2lvbiByZWcgMSAqLworCisvKiBGb3IgTWFpbGJveGVzIDE2LTMxCQkJCQkJCQkJCQkgKi8KKyNkZWZpbmUJQ0FOX01DMgkJCQkweEZGQzAyQTQwCS8qIE1haWxib3ggY29uZmlnIHJlZyAyCSAqLworI2RlZmluZQlDQU5fTUQyCQkJCTB4RkZDMDJBNDQJLyogTWFpbGJveCBkaXJlY3Rpb24gcmVnIDIgKi8KKyNkZWZpbmUJQ0FOX1RSUzIJCQkweEZGQzAyQTQ4CS8qIFRyYW5zbWl0IFJlcXVlc3QgU2V0CXJlZyAyICovCisjZGVmaW5lCUNBTl9UUlIyCQkJMHhGRkMwMkE0QwkvKiBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0IHJlZyAyICovCisjZGVmaW5lCUNBTl9UQTIJCQkJMHhGRkMwMkE1MAkvKiBUcmFuc21pdCBBY2tub3dsZWRnZQlyZWcgMiAqLworI2RlZmluZQlDQU5fQUEyCQkJCTB4RkZDMDJBNTQJLyogVHJhbnNtaXQgQWJvcnQgQWNrbm93bGVkZ2UgcmVnIDIgKi8KKyNkZWZpbmUJQ0FOX1JNUDIJCQkweEZGQzAyQTU4CS8qIFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nIHJlZyAyICovCisjZGVmaW5lCUNBTl9STUwyCQkJMHhGRkMwMkE1QwkvKiBSZWNlaXZlIE1lc3NhZ2UgTG9zdAlyZWcgMiAqLworI2RlZmluZQlDQU5fTUJUSUYyCQkJMHhGRkMwMkE2MAkvKiBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnIHJlZyAyICovCisjZGVmaW5lCUNBTl9NQlJJRjIJCQkweEZGQzAyQTY0CS8qIE1haWxib3ggUmVjZWl2ZSAgSW50ZXJydXB0IEZsYWcgcmVnIDIgKi8KKyNkZWZpbmUJQ0FOX01CSU0yCQkJMHhGRkMwMkE2OAkvKiBNYWlsYm94IEludGVycnVwdCBNYXNrIHJlZyAyICovCisjZGVmaW5lCUNBTl9SRkgyCQkJMHhGRkMwMkE2QwkvKiBSZW1vdGUgRnJhbWUJSGFuZGxpbmcgcmVnIDIgKi8KKyNkZWZpbmUJQ0FOX09QU1MyCQkJMHhGRkMwMkE3MAkvKiBPdmVyd3JpdGUgUHJvdGVjdGlvbglTaW5nbGUgU2hvdCBYbWlzc2lvbiByZWcgMiAqLworCisjZGVmaW5lCUNBTl9DTE9DSwkJCTB4RkZDMDJBODAJLyogQml0IFRpbWluZyBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUJQ0FOX1RJTUlORwkJCTB4RkZDMDJBODQJLyogQml0IFRpbWluZyBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIDEgKi8KKworI2RlZmluZQlDQU5fREVCVUcJCQkweEZGQzAyQTg4CS8qIERlYnVnIFJlZ2lzdGVyCQkgKi8KKy8qIHRoZSBmb2xsb3dpbmcgaXMgZm9yCWJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lCUNBTl9DTkYJCSBDQU5fREVCVUcKKworI2RlZmluZQlDQU5fU1RBVFVTCQkJMHhGRkMwMkE4QwkvKiBHbG9iYWwgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9DRUMJCQkJMHhGRkMwMkE5MAkvKiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9HSVMJCQkJMHhGRkMwMkE5NAkvKiBHbG9iYWwgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fR0lNCQkJCTB4RkZDMDJBOTgJLyogR2xvYmFsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9HSUYJCQkJMHhGRkMwMkE5QwkvKiBHbG9iYWwgSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX0NPTlRST0wJCQkweEZGQzAyQUEwCS8qIE1hc3RlciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9JTlRSCQkJMHhGRkMwMkFBNAkvKiBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUJURAkJCTB4RkZDMDJBQUMJLyogTWFpbGJveCBUZW1wb3JhcnkgRGlzYWJsZSBGZWF0dXJlICovCisjZGVmaW5lCUNBTl9FV1IJCQkJMHhGRkMwMkFCMAkvKiBQcm9ncmFtbWFibGUJV2FybmluZwlMZXZlbCAqLworI2RlZmluZQlDQU5fRVNSCQkJCTB4RkZDMDJBQjQJLyogRXJyb3IgU3RhdHVzCVJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9VQ0NOVAkJCTB4RkZDMDJBQzQJLyogVW5pdmVyc2FsIENvdW50ZXIJICovCisjZGVmaW5lCUNBTl9VQ1JDCQkJMHhGRkMwMkFDOAkvKiBVbml2ZXJzYWwgQ291bnRlciBSZWxvYWQvQ2FwdHVyZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fVUNDTkYJCQkweEZGQzAyQUNDCS8qIFVuaXZlcnNhbCBDb3VudGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKworLyogTWFpbGJveCBBY2NlcHRhbmNlIE1hc2tzCQkJCQkgKi8KKyNkZWZpbmUJQ0FOX0FNMDBMCQkJMHhGRkMwMkIwMAkvKiBNYWlsYm94IDAgTG93IEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0wMEgJCQkweEZGQzAyQjA0CS8qIE1haWxib3ggMCBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0wMUwJCQkweEZGQzAyQjA4CS8qIE1haWxib3ggMSBMb3cgQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTAxSAkJCTB4RkZDMDJCMEMJLyogTWFpbGJveCAxIEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTAyTAkJCTB4RkZDMDJCMTAJLyogTWFpbGJveCAyIExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMDJICQkJMHhGRkMwMkIxNAkvKiBNYWlsYm94IDIgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMDNMCQkJMHhGRkMwMkIxOAkvKiBNYWlsYm94IDMgTG93IEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0wM0gJCQkweEZGQzAyQjFDCS8qIE1haWxib3ggMyBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0wNEwJCQkweEZGQzAyQjIwCS8qIE1haWxib3ggNCBMb3cgQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTA0SAkJCTB4RkZDMDJCMjQJLyogTWFpbGJveCA0IEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTA1TAkJCTB4RkZDMDJCMjgJLyogTWFpbGJveCA1IExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMDVICQkJMHhGRkMwMkIyQwkvKiBNYWlsYm94IDUgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMDZMCQkJMHhGRkMwMkIzMAkvKiBNYWlsYm94IDYgTG93IEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0wNkgJCQkweEZGQzAyQjM0CS8qIE1haWxib3ggNiBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0wN0wJCQkweEZGQzAyQjM4CS8qIE1haWxib3ggNyBMb3cgQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTA3SAkJCTB4RkZDMDJCM0MJLyogTWFpbGJveCA3IEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTA4TAkJCTB4RkZDMDJCNDAJLyogTWFpbGJveCA4IExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMDhICQkJMHhGRkMwMkI0NAkvKiBNYWlsYm94IDggSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMDlMCQkJMHhGRkMwMkI0OAkvKiBNYWlsYm94IDkgTG93IEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0wOUgJCQkweEZGQzAyQjRDCS8qIE1haWxib3ggOSBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0xMEwJCQkweEZGQzAyQjUwCS8qIE1haWxib3ggMTAgTG93IEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0xMEgJCQkweEZGQzAyQjU0CS8qIE1haWxib3ggMTAgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMTFMCQkJMHhGRkMwMkI1OAkvKiBNYWlsYm94IDExIExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMTFICQkJMHhGRkMwMkI1QwkvKiBNYWlsYm94IDExIEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTEyTAkJCTB4RkZDMDJCNjAJLyogTWFpbGJveCAxMiBMb3cgQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTEySAkJCTB4RkZDMDJCNjQJLyogTWFpbGJveCAxMiBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0xM0wJCQkweEZGQzAyQjY4CS8qIE1haWxib3ggMTMgTG93IEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0xM0gJCQkweEZGQzAyQjZDCS8qIE1haWxib3ggMTMgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMTRMCQkJMHhGRkMwMkI3MAkvKiBNYWlsYm94IDE0IExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMTRICQkJMHhGRkMwMkI3NAkvKiBNYWlsYm94IDE0IEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTE1TAkJCTB4RkZDMDJCNzgJLyogTWFpbGJveCAxNSBMb3cgQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTE1SAkJCTB4RkZDMDJCN0MJLyogTWFpbGJveCAxNSBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLworCisjZGVmaW5lCUNBTl9BTTE2TAkJCTB4RkZDMDJCODAJLyogTWFpbGJveCAxNiBMb3cgQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTE2SAkJCTB4RkZDMDJCODQJLyogTWFpbGJveCAxNiBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0xN0wJCQkweEZGQzAyQjg4CS8qIE1haWxib3ggMTcgTG93IEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0xN0gJCQkweEZGQzAyQjhDCS8qIE1haWxib3ggMTcgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMThMCQkJMHhGRkMwMkI5MAkvKiBNYWlsYm94IDE4IExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMThICQkJMHhGRkMwMkI5NAkvKiBNYWlsYm94IDE4IEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTE5TAkJCTB4RkZDMDJCOTgJLyogTWFpbGJveCAxOSBMb3cgQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTE5SAkJCTB4RkZDMDJCOUMJLyogTWFpbGJveCAxOSBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0yMEwJCQkweEZGQzAyQkEwCS8qIE1haWxib3ggMjAgTG93IEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0yMEgJCQkweEZGQzAyQkE0CS8qIE1haWxib3ggMjAgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMjFMCQkJMHhGRkMwMkJBOAkvKiBNYWlsYm94IDIxIExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMjFICQkJMHhGRkMwMkJBQwkvKiBNYWlsYm94IDIxIEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTIyTAkJCTB4RkZDMDJCQjAJLyogTWFpbGJveCAyMiBMb3cgQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTIySAkJCTB4RkZDMDJCQjQJLyogTWFpbGJveCAyMiBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0yM0wJCQkweEZGQzAyQkI4CS8qIE1haWxib3ggMjMgTG93IEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0yM0gJCQkweEZGQzAyQkJDCS8qIE1haWxib3ggMjMgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMjRMCQkJMHhGRkMwMkJDMAkvKiBNYWlsYm94IDI0IExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMjRICQkJMHhGRkMwMkJDNAkvKiBNYWlsYm94IDI0IEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTI1TAkJCTB4RkZDMDJCQzgJLyogTWFpbGJveCAyNSBMb3cgQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTI1SAkJCTB4RkZDMDJCQ0MJLyogTWFpbGJveCAyNSBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0yNkwJCQkweEZGQzAyQkQwCS8qIE1haWxib3ggMjYgTG93IEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0yNkgJCQkweEZGQzAyQkQ0CS8qIE1haWxib3ggMjYgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMjdMCQkJMHhGRkMwMkJEOAkvKiBNYWlsYm94IDI3IExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMjdICQkJMHhGRkMwMkJEQwkvKiBNYWlsYm94IDI3IEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTI4TAkJCTB4RkZDMDJCRTAJLyogTWFpbGJveCAyOCBMb3cgQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTI4SAkJCTB4RkZDMDJCRTQJLyogTWFpbGJveCAyOCBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0yOUwJCQkweEZGQzAyQkU4CS8qIE1haWxib3ggMjkgTG93IEFjY2VwdGFuY2UgTWFzayAqLworI2RlZmluZQlDQU5fQU0yOUgJCQkweEZGQzAyQkVDCS8qIE1haWxib3ggMjkgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMzBMCQkJMHhGRkMwMkJGMAkvKiBNYWlsYm94IDMwIExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KKyNkZWZpbmUJQ0FOX0FNMzBICQkJMHhGRkMwMkJGNAkvKiBNYWlsYm94IDMwIEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTMxTAkJCTB4RkZDMDJCRjgJLyogTWFpbGJveCAzMSBMb3cgQWNjZXB0YW5jZSBNYXNrICovCisjZGVmaW5lCUNBTl9BTTMxSAkJCTB4RkZDMDJCRkMJLyogTWFpbGJveCAzMSBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLworCisvKiBDQU4gQWNjZXB0YW5jZSBNYXNrIE1hY3JvcyAqLworI2RlZmluZQlDQU5fQU1fTCh4KQkJCShDQU5fQU0wMEwrKCh4KSoweDgpKQorI2RlZmluZQlDQU5fQU1fSCh4KQkJCShDQU5fQU0wMEgrKCh4KSoweDgpKQorCisvKiBNYWlsYm94IFJlZ2lzdGVycwkJCQkJCQkJCSAqLworI2RlZmluZQlDQU5fTUIwMF9EQVRBMAkJMHhGRkMwMkMwMAkvKiBNYWlsYm94IDAgRGF0YSBXb3JkIDAgWzE1OjBdCVJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjAwX0RBVEExCQkweEZGQzAyQzA0CS8qIE1haWxib3ggMCBEYXRhIFdvcmQgMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjAwX0RBVEEyCQkweEZGQzAyQzA4CS8qIE1haWxib3ggMCBEYXRhIFdvcmQgMiBbNDc6MzJdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjAwX0RBVEEzCQkweEZGQzAyQzBDCS8qIE1haWxib3ggMCBEYXRhIFdvcmQgMyBbNjM6NDhdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjAwX0xFTkdUSAkJMHhGRkMwMkMxMAkvKiBNYWlsYm94IDAgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwMF9USU1FU1RBTVAJMHhGRkMwMkMxNAkvKiBNYWlsYm94IDAgVGltZSBTdGFtcAlWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwMF9JRDAJCTB4RkZDMDJDMTgJLyogTWFpbGJveCAwIElkZW50aWZpZXIJTG93IFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjAwX0lEMQkJMHhGRkMwMkMxQwkvKiBNYWlsYm94IDAgSWRlbnRpZmllcglIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMDFfREFUQTAJCTB4RkZDMDJDMjAJLyogTWFpbGJveCAxIERhdGEgV29yZCAwIFsxNTowXQlSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwMV9EQVRBMQkJMHhGRkMwMkMyNAkvKiBNYWlsYm94IDEgRGF0YSBXb3JkIDEgWzMxOjE2XSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwMV9EQVRBMgkJMHhGRkMwMkMyOAkvKiBNYWlsYm94IDEgRGF0YSBXb3JkIDIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwMV9EQVRBMwkJMHhGRkMwMkMyQwkvKiBNYWlsYm94IDEgRGF0YSBXb3JkIDMgWzYzOjQ4XSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwMV9MRU5HVEgJCTB4RkZDMDJDMzAJLyogTWFpbGJveCAxIERhdGEgTGVuZ3RoIENvZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDFfVElNRVNUQU1QCTB4RkZDMDJDMzQJLyogTWFpbGJveCAxIFRpbWUgU3RhbXAJVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDFfSUQwCQkweEZGQzAyQzM4CS8qIE1haWxib3ggMSBJZGVudGlmaWVyCUxvdyBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwMV9JRDEJCTB4RkZDMDJDM0MJLyogTWFpbGJveCAxIElkZW50aWZpZXIJSGlnaCBSZWdpc3RlciAqLworCisjZGVmaW5lCUNBTl9NQjAyX0RBVEEwCQkweEZGQzAyQzQwCS8qIE1haWxib3ggMiBEYXRhIFdvcmQgMCBbMTU6MF0JUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDJfREFUQTEJCTB4RkZDMDJDNDQJLyogTWFpbGJveCAyIERhdGEgV29yZCAxIFszMToxNl0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDJfREFUQTIJCTB4RkZDMDJDNDgJLyogTWFpbGJveCAyIERhdGEgV29yZCAyIFs0NzozMl0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDJfREFUQTMJCTB4RkZDMDJDNEMJLyogTWFpbGJveCAyIERhdGEgV29yZCAzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDJfTEVOR1RICQkweEZGQzAyQzUwCS8qIE1haWxib3ggMiBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjAyX1RJTUVTVEFNUAkweEZGQzAyQzU0CS8qIE1haWxib3ggMiBUaW1lIFN0YW1wCVZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjAyX0lEMAkJMHhGRkMwMkM1OAkvKiBNYWlsYm94IDIgSWRlbnRpZmllcglMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDJfSUQxCQkweEZGQzAyQzVDCS8qIE1haWxib3ggMiBJZGVudGlmaWVyCUhpZ2ggUmVnaXN0ZXIgKi8KKworI2RlZmluZQlDQU5fTUIwM19EQVRBMAkJMHhGRkMwMkM2MAkvKiBNYWlsYm94IDMgRGF0YSBXb3JkIDAgWzE1OjBdCVJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjAzX0RBVEExCQkweEZGQzAyQzY0CS8qIE1haWxib3ggMyBEYXRhIFdvcmQgMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjAzX0RBVEEyCQkweEZGQzAyQzY4CS8qIE1haWxib3ggMyBEYXRhIFdvcmQgMiBbNDc6MzJdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjAzX0RBVEEzCQkweEZGQzAyQzZDCS8qIE1haWxib3ggMyBEYXRhIFdvcmQgMyBbNjM6NDhdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjAzX0xFTkdUSAkJMHhGRkMwMkM3MAkvKiBNYWlsYm94IDMgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwM19USU1FU1RBTVAJMHhGRkMwMkM3NAkvKiBNYWlsYm94IDMgVGltZSBTdGFtcAlWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwM19JRDAJCTB4RkZDMDJDNzgJLyogTWFpbGJveCAzIElkZW50aWZpZXIJTG93IFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjAzX0lEMQkJMHhGRkMwMkM3QwkvKiBNYWlsYm94IDMgSWRlbnRpZmllcglIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMDRfREFUQTAJCTB4RkZDMDJDODAJLyogTWFpbGJveCA0IERhdGEgV29yZCAwIFsxNTowXQlSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwNF9EQVRBMQkJMHhGRkMwMkM4NAkvKiBNYWlsYm94IDQgRGF0YSBXb3JkIDEgWzMxOjE2XSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwNF9EQVRBMgkJMHhGRkMwMkM4OAkvKiBNYWlsYm94IDQgRGF0YSBXb3JkIDIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwNF9EQVRBMwkJMHhGRkMwMkM4QwkvKiBNYWlsYm94IDQgRGF0YSBXb3JkIDMgWzYzOjQ4XSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwNF9MRU5HVEgJCTB4RkZDMDJDOTAJLyogTWFpbGJveCA0IERhdGEgTGVuZ3RoIENvZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDRfVElNRVNUQU1QCTB4RkZDMDJDOTQJLyogTWFpbGJveCA0IFRpbWUgU3RhbXAJVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDRfSUQwCQkweEZGQzAyQzk4CS8qIE1haWxib3ggNCBJZGVudGlmaWVyCUxvdyBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwNF9JRDEJCTB4RkZDMDJDOUMJLyogTWFpbGJveCA0IElkZW50aWZpZXIJSGlnaCBSZWdpc3RlciAqLworCisjZGVmaW5lCUNBTl9NQjA1X0RBVEEwCQkweEZGQzAyQ0EwCS8qIE1haWxib3ggNSBEYXRhIFdvcmQgMCBbMTU6MF0JUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDVfREFUQTEJCTB4RkZDMDJDQTQJLyogTWFpbGJveCA1IERhdGEgV29yZCAxIFszMToxNl0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDVfREFUQTIJCTB4RkZDMDJDQTgJLyogTWFpbGJveCA1IERhdGEgV29yZCAyIFs0NzozMl0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDVfREFUQTMJCTB4RkZDMDJDQUMJLyogTWFpbGJveCA1IERhdGEgV29yZCAzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDVfTEVOR1RICQkweEZGQzAyQ0IwCS8qIE1haWxib3ggNSBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjA1X1RJTUVTVEFNUAkweEZGQzAyQ0I0CS8qIE1haWxib3ggNSBUaW1lIFN0YW1wCVZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjA1X0lEMAkJMHhGRkMwMkNCOAkvKiBNYWlsYm94IDUgSWRlbnRpZmllcglMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDVfSUQxCQkweEZGQzAyQ0JDCS8qIE1haWxib3ggNSBJZGVudGlmaWVyCUhpZ2ggUmVnaXN0ZXIgKi8KKworI2RlZmluZQlDQU5fTUIwNl9EQVRBMAkJMHhGRkMwMkNDMAkvKiBNYWlsYm94IDYgRGF0YSBXb3JkIDAgWzE1OjBdCVJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjA2X0RBVEExCQkweEZGQzAyQ0M0CS8qIE1haWxib3ggNiBEYXRhIFdvcmQgMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjA2X0RBVEEyCQkweEZGQzAyQ0M4CS8qIE1haWxib3ggNiBEYXRhIFdvcmQgMiBbNDc6MzJdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjA2X0RBVEEzCQkweEZGQzAyQ0NDCS8qIE1haWxib3ggNiBEYXRhIFdvcmQgMyBbNjM6NDhdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjA2X0xFTkdUSAkJMHhGRkMwMkNEMAkvKiBNYWlsYm94IDYgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwNl9USU1FU1RBTVAJMHhGRkMwMkNENAkvKiBNYWlsYm94IDYgVGltZSBTdGFtcAlWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwNl9JRDAJCTB4RkZDMDJDRDgJLyogTWFpbGJveCA2IElkZW50aWZpZXIJTG93IFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjA2X0lEMQkJMHhGRkMwMkNEQwkvKiBNYWlsYm94IDYgSWRlbnRpZmllcglIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMDdfREFUQTAJCTB4RkZDMDJDRTAJLyogTWFpbGJveCA3IERhdGEgV29yZCAwIFsxNTowXQlSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwN19EQVRBMQkJMHhGRkMwMkNFNAkvKiBNYWlsYm94IDcgRGF0YSBXb3JkIDEgWzMxOjE2XSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwN19EQVRBMgkJMHhGRkMwMkNFOAkvKiBNYWlsYm94IDcgRGF0YSBXb3JkIDIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwN19EQVRBMwkJMHhGRkMwMkNFQwkvKiBNYWlsYm94IDcgRGF0YSBXb3JkIDMgWzYzOjQ4XSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwN19MRU5HVEgJCTB4RkZDMDJDRjAJLyogTWFpbGJveCA3IERhdGEgTGVuZ3RoIENvZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDdfVElNRVNUQU1QCTB4RkZDMDJDRjQJLyogTWFpbGJveCA3IFRpbWUgU3RhbXAJVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDdfSUQwCQkweEZGQzAyQ0Y4CS8qIE1haWxib3ggNyBJZGVudGlmaWVyCUxvdyBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwN19JRDEJCTB4RkZDMDJDRkMJLyogTWFpbGJveCA3IElkZW50aWZpZXIJSGlnaCBSZWdpc3RlciAqLworCisjZGVmaW5lCUNBTl9NQjA4X0RBVEEwCQkweEZGQzAyRDAwCS8qIE1haWxib3ggOCBEYXRhIFdvcmQgMCBbMTU6MF0JUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDhfREFUQTEJCTB4RkZDMDJEMDQJLyogTWFpbGJveCA4IERhdGEgV29yZCAxIFszMToxNl0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDhfREFUQTIJCTB4RkZDMDJEMDgJLyogTWFpbGJveCA4IERhdGEgV29yZCAyIFs0NzozMl0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDhfREFUQTMJCTB4RkZDMDJEMEMJLyogTWFpbGJveCA4IERhdGEgV29yZCAzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDhfTEVOR1RICQkweEZGQzAyRDEwCS8qIE1haWxib3ggOCBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjA4X1RJTUVTVEFNUAkweEZGQzAyRDE0CS8qIE1haWxib3ggOCBUaW1lIFN0YW1wCVZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjA4X0lEMAkJMHhGRkMwMkQxOAkvKiBNYWlsYm94IDggSWRlbnRpZmllcglMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMDhfSUQxCQkweEZGQzAyRDFDCS8qIE1haWxib3ggOCBJZGVudGlmaWVyCUhpZ2ggUmVnaXN0ZXIgKi8KKworI2RlZmluZQlDQU5fTUIwOV9EQVRBMAkJMHhGRkMwMkQyMAkvKiBNYWlsYm94IDkgRGF0YSBXb3JkIDAgWzE1OjBdCVJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjA5X0RBVEExCQkweEZGQzAyRDI0CS8qIE1haWxib3ggOSBEYXRhIFdvcmQgMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjA5X0RBVEEyCQkweEZGQzAyRDI4CS8qIE1haWxib3ggOSBEYXRhIFdvcmQgMiBbNDc6MzJdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjA5X0RBVEEzCQkweEZGQzAyRDJDCS8qIE1haWxib3ggOSBEYXRhIFdvcmQgMyBbNjM6NDhdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjA5X0xFTkdUSAkJMHhGRkMwMkQzMAkvKiBNYWlsYm94IDkgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwOV9USU1FU1RBTVAJMHhGRkMwMkQzNAkvKiBNYWlsYm94IDkgVGltZSBTdGFtcAlWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIwOV9JRDAJCTB4RkZDMDJEMzgJLyogTWFpbGJveCA5IElkZW50aWZpZXIJTG93IFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjA5X0lEMQkJMHhGRkMwMkQzQwkvKiBNYWlsYm94IDkgSWRlbnRpZmllcglIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMTBfREFUQTAJCTB4RkZDMDJENDAJLyogTWFpbGJveCAxMCBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTBfREFUQTEJCTB4RkZDMDJENDQJLyogTWFpbGJveCAxMCBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjEwX0RBVEEyCQkweEZGQzAyRDQ4CS8qIE1haWxib3ggMTAgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxMF9EQVRBMwkJMHhGRkMwMkQ0QwkvKiBNYWlsYm94IDEwIERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTBfTEVOR1RICQkweEZGQzAyRDUwCS8qIE1haWxib3ggMTAgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxMF9USU1FU1RBTVAJMHhGRkMwMkQ1NAkvKiBNYWlsYm94IDEwIFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTBfSUQwCQkweEZGQzAyRDU4CS8qIE1haWxib3ggMTAgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTBfSUQxCQkweEZGQzAyRDVDCS8qIE1haWxib3ggMTAgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMTFfREFUQTAJCTB4RkZDMDJENjAJLyogTWFpbGJveCAxMSBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTFfREFUQTEJCTB4RkZDMDJENjQJLyogTWFpbGJveCAxMSBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjExX0RBVEEyCQkweEZGQzAyRDY4CS8qIE1haWxib3ggMTEgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxMV9EQVRBMwkJMHhGRkMwMkQ2QwkvKiBNYWlsYm94IDExIERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTFfTEVOR1RICQkweEZGQzAyRDcwCS8qIE1haWxib3ggMTEgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxMV9USU1FU1RBTVAJMHhGRkMwMkQ3NAkvKiBNYWlsYm94IDExIFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTFfSUQwCQkweEZGQzAyRDc4CS8qIE1haWxib3ggMTEgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTFfSUQxCQkweEZGQzAyRDdDCS8qIE1haWxib3ggMTEgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMTJfREFUQTAJCTB4RkZDMDJEODAJLyogTWFpbGJveCAxMiBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTJfREFUQTEJCTB4RkZDMDJEODQJLyogTWFpbGJveCAxMiBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjEyX0RBVEEyCQkweEZGQzAyRDg4CS8qIE1haWxib3ggMTIgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxMl9EQVRBMwkJMHhGRkMwMkQ4QwkvKiBNYWlsYm94IDEyIERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTJfTEVOR1RICQkweEZGQzAyRDkwCS8qIE1haWxib3ggMTIgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxMl9USU1FU1RBTVAJMHhGRkMwMkQ5NAkvKiBNYWlsYm94IDEyIFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTJfSUQwCQkweEZGQzAyRDk4CS8qIE1haWxib3ggMTIgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTJfSUQxCQkweEZGQzAyRDlDCS8qIE1haWxib3ggMTIgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMTNfREFUQTAJCTB4RkZDMDJEQTAJLyogTWFpbGJveCAxMyBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTNfREFUQTEJCTB4RkZDMDJEQTQJLyogTWFpbGJveCAxMyBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjEzX0RBVEEyCQkweEZGQzAyREE4CS8qIE1haWxib3ggMTMgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxM19EQVRBMwkJMHhGRkMwMkRBQwkvKiBNYWlsYm94IDEzIERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTNfTEVOR1RICQkweEZGQzAyREIwCS8qIE1haWxib3ggMTMgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxM19USU1FU1RBTVAJMHhGRkMwMkRCNAkvKiBNYWlsYm94IDEzIFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTNfSUQwCQkweEZGQzAyREI4CS8qIE1haWxib3ggMTMgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTNfSUQxCQkweEZGQzAyREJDCS8qIE1haWxib3ggMTMgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMTRfREFUQTAJCTB4RkZDMDJEQzAJLyogTWFpbGJveCAxNCBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTRfREFUQTEJCTB4RkZDMDJEQzQJLyogTWFpbGJveCAxNCBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjE0X0RBVEEyCQkweEZGQzAyREM4CS8qIE1haWxib3ggMTQgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxNF9EQVRBMwkJMHhGRkMwMkRDQwkvKiBNYWlsYm94IDE0IERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTRfTEVOR1RICQkweEZGQzAyREQwCS8qIE1haWxib3ggMTQgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxNF9USU1FU1RBTVAJMHhGRkMwMkRENAkvKiBNYWlsYm94IDE0IFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTRfSUQwCQkweEZGQzAyREQ4CS8qIE1haWxib3ggMTQgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTRfSUQxCQkweEZGQzAyRERDCS8qIE1haWxib3ggMTQgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMTVfREFUQTAJCTB4RkZDMDJERTAJLyogTWFpbGJveCAxNSBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTVfREFUQTEJCTB4RkZDMDJERTQJLyogTWFpbGJveCAxNSBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjE1X0RBVEEyCQkweEZGQzAyREU4CS8qIE1haWxib3ggMTUgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxNV9EQVRBMwkJMHhGRkMwMkRFQwkvKiBNYWlsYm94IDE1IERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTVfTEVOR1RICQkweEZGQzAyREYwCS8qIE1haWxib3ggMTUgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxNV9USU1FU1RBTVAJMHhGRkMwMkRGNAkvKiBNYWlsYm94IDE1IFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTVfSUQwCQkweEZGQzAyREY4CS8qIE1haWxib3ggMTUgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTVfSUQxCQkweEZGQzAyREZDCS8qIE1haWxib3ggMTUgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMTZfREFUQTAJCTB4RkZDMDJFMDAJLyogTWFpbGJveCAxNiBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTZfREFUQTEJCTB4RkZDMDJFMDQJLyogTWFpbGJveCAxNiBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjE2X0RBVEEyCQkweEZGQzAyRTA4CS8qIE1haWxib3ggMTYgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxNl9EQVRBMwkJMHhGRkMwMkUwQwkvKiBNYWlsYm94IDE2IERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTZfTEVOR1RICQkweEZGQzAyRTEwCS8qIE1haWxib3ggMTYgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxNl9USU1FU1RBTVAJMHhGRkMwMkUxNAkvKiBNYWlsYm94IDE2IFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTZfSUQwCQkweEZGQzAyRTE4CS8qIE1haWxib3ggMTYgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTZfSUQxCQkweEZGQzAyRTFDCS8qIE1haWxib3ggMTYgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMTdfREFUQTAJCTB4RkZDMDJFMjAJLyogTWFpbGJveCAxNyBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTdfREFUQTEJCTB4RkZDMDJFMjQJLyogTWFpbGJveCAxNyBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjE3X0RBVEEyCQkweEZGQzAyRTI4CS8qIE1haWxib3ggMTcgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxN19EQVRBMwkJMHhGRkMwMkUyQwkvKiBNYWlsYm94IDE3IERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTdfTEVOR1RICQkweEZGQzAyRTMwCS8qIE1haWxib3ggMTcgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxN19USU1FU1RBTVAJMHhGRkMwMkUzNAkvKiBNYWlsYm94IDE3IFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTdfSUQwCQkweEZGQzAyRTM4CS8qIE1haWxib3ggMTcgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTdfSUQxCQkweEZGQzAyRTNDCS8qIE1haWxib3ggMTcgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMThfREFUQTAJCTB4RkZDMDJFNDAJLyogTWFpbGJveCAxOCBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMThfREFUQTEJCTB4RkZDMDJFNDQJLyogTWFpbGJveCAxOCBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjE4X0RBVEEyCQkweEZGQzAyRTQ4CS8qIE1haWxib3ggMTggRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxOF9EQVRBMwkJMHhGRkMwMkU0QwkvKiBNYWlsYm94IDE4IERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMThfTEVOR1RICQkweEZGQzAyRTUwCS8qIE1haWxib3ggMTggRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxOF9USU1FU1RBTVAJMHhGRkMwMkU1NAkvKiBNYWlsYm94IDE4IFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMThfSUQwCQkweEZGQzAyRTU4CS8qIE1haWxib3ggMTggSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMThfSUQxCQkweEZGQzAyRTVDCS8qIE1haWxib3ggMTggSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMTlfREFUQTAJCTB4RkZDMDJFNjAJLyogTWFpbGJveCAxOSBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTlfREFUQTEJCTB4RkZDMDJFNjQJLyogTWFpbGJveCAxOSBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjE5X0RBVEEyCQkweEZGQzAyRTY4CS8qIE1haWxib3ggMTkgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxOV9EQVRBMwkJMHhGRkMwMkU2QwkvKiBNYWlsYm94IDE5IERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTlfTEVOR1RICQkweEZGQzAyRTcwCS8qIE1haWxib3ggMTkgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIxOV9USU1FU1RBTVAJMHhGRkMwMkU3NAkvKiBNYWlsYm94IDE5IFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTlfSUQwCQkweEZGQzAyRTc4CS8qIE1haWxib3ggMTkgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMTlfSUQxCQkweEZGQzAyRTdDCS8qIE1haWxib3ggMTkgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMjBfREFUQTAJCTB4RkZDMDJFODAJLyogTWFpbGJveCAyMCBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjBfREFUQTEJCTB4RkZDMDJFODQJLyogTWFpbGJveCAyMCBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjIwX0RBVEEyCQkweEZGQzAyRTg4CS8qIE1haWxib3ggMjAgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyMF9EQVRBMwkJMHhGRkMwMkU4QwkvKiBNYWlsYm94IDIwIERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjBfTEVOR1RICQkweEZGQzAyRTkwCS8qIE1haWxib3ggMjAgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyMF9USU1FU1RBTVAJMHhGRkMwMkU5NAkvKiBNYWlsYm94IDIwIFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjBfSUQwCQkweEZGQzAyRTk4CS8qIE1haWxib3ggMjAgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjBfSUQxCQkweEZGQzAyRTlDCS8qIE1haWxib3ggMjAgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMjFfREFUQTAJCTB4RkZDMDJFQTAJLyogTWFpbGJveCAyMSBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjFfREFUQTEJCTB4RkZDMDJFQTQJLyogTWFpbGJveCAyMSBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjIxX0RBVEEyCQkweEZGQzAyRUE4CS8qIE1haWxib3ggMjEgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyMV9EQVRBMwkJMHhGRkMwMkVBQwkvKiBNYWlsYm94IDIxIERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjFfTEVOR1RICQkweEZGQzAyRUIwCS8qIE1haWxib3ggMjEgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyMV9USU1FU1RBTVAJMHhGRkMwMkVCNAkvKiBNYWlsYm94IDIxIFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjFfSUQwCQkweEZGQzAyRUI4CS8qIE1haWxib3ggMjEgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjFfSUQxCQkweEZGQzAyRUJDCS8qIE1haWxib3ggMjEgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMjJfREFUQTAJCTB4RkZDMDJFQzAJLyogTWFpbGJveCAyMiBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjJfREFUQTEJCTB4RkZDMDJFQzQJLyogTWFpbGJveCAyMiBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjIyX0RBVEEyCQkweEZGQzAyRUM4CS8qIE1haWxib3ggMjIgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyMl9EQVRBMwkJMHhGRkMwMkVDQwkvKiBNYWlsYm94IDIyIERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjJfTEVOR1RICQkweEZGQzAyRUQwCS8qIE1haWxib3ggMjIgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyMl9USU1FU1RBTVAJMHhGRkMwMkVENAkvKiBNYWlsYm94IDIyIFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjJfSUQwCQkweEZGQzAyRUQ4CS8qIE1haWxib3ggMjIgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjJfSUQxCQkweEZGQzAyRURDCS8qIE1haWxib3ggMjIgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMjNfREFUQTAJCTB4RkZDMDJFRTAJLyogTWFpbGJveCAyMyBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjNfREFUQTEJCTB4RkZDMDJFRTQJLyogTWFpbGJveCAyMyBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjIzX0RBVEEyCQkweEZGQzAyRUU4CS8qIE1haWxib3ggMjMgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyM19EQVRBMwkJMHhGRkMwMkVFQwkvKiBNYWlsYm94IDIzIERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjNfTEVOR1RICQkweEZGQzAyRUYwCS8qIE1haWxib3ggMjMgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyM19USU1FU1RBTVAJMHhGRkMwMkVGNAkvKiBNYWlsYm94IDIzIFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjNfSUQwCQkweEZGQzAyRUY4CS8qIE1haWxib3ggMjMgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjNfSUQxCQkweEZGQzAyRUZDCS8qIE1haWxib3ggMjMgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMjRfREFUQTAJCTB4RkZDMDJGMDAJLyogTWFpbGJveCAyNCBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjRfREFUQTEJCTB4RkZDMDJGMDQJLyogTWFpbGJveCAyNCBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjI0X0RBVEEyCQkweEZGQzAyRjA4CS8qIE1haWxib3ggMjQgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyNF9EQVRBMwkJMHhGRkMwMkYwQwkvKiBNYWlsYm94IDI0IERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjRfTEVOR1RICQkweEZGQzAyRjEwCS8qIE1haWxib3ggMjQgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyNF9USU1FU1RBTVAJMHhGRkMwMkYxNAkvKiBNYWlsYm94IDI0IFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjRfSUQwCQkweEZGQzAyRjE4CS8qIE1haWxib3ggMjQgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjRfSUQxCQkweEZGQzAyRjFDCS8qIE1haWxib3ggMjQgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMjVfREFUQTAJCTB4RkZDMDJGMjAJLyogTWFpbGJveCAyNSBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjVfREFUQTEJCTB4RkZDMDJGMjQJLyogTWFpbGJveCAyNSBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjI1X0RBVEEyCQkweEZGQzAyRjI4CS8qIE1haWxib3ggMjUgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyNV9EQVRBMwkJMHhGRkMwMkYyQwkvKiBNYWlsYm94IDI1IERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjVfTEVOR1RICQkweEZGQzAyRjMwCS8qIE1haWxib3ggMjUgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyNV9USU1FU1RBTVAJMHhGRkMwMkYzNAkvKiBNYWlsYm94IDI1IFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjVfSUQwCQkweEZGQzAyRjM4CS8qIE1haWxib3ggMjUgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjVfSUQxCQkweEZGQzAyRjNDCS8qIE1haWxib3ggMjUgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMjZfREFUQTAJCTB4RkZDMDJGNDAJLyogTWFpbGJveCAyNiBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjZfREFUQTEJCTB4RkZDMDJGNDQJLyogTWFpbGJveCAyNiBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjI2X0RBVEEyCQkweEZGQzAyRjQ4CS8qIE1haWxib3ggMjYgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyNl9EQVRBMwkJMHhGRkMwMkY0QwkvKiBNYWlsYm94IDI2IERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjZfTEVOR1RICQkweEZGQzAyRjUwCS8qIE1haWxib3ggMjYgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyNl9USU1FU1RBTVAJMHhGRkMwMkY1NAkvKiBNYWlsYm94IDI2IFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjZfSUQwCQkweEZGQzAyRjU4CS8qIE1haWxib3ggMjYgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjZfSUQxCQkweEZGQzAyRjVDCS8qIE1haWxib3ggMjYgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMjdfREFUQTAJCTB4RkZDMDJGNjAJLyogTWFpbGJveCAyNyBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjdfREFUQTEJCTB4RkZDMDJGNjQJLyogTWFpbGJveCAyNyBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjI3X0RBVEEyCQkweEZGQzAyRjY4CS8qIE1haWxib3ggMjcgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyN19EQVRBMwkJMHhGRkMwMkY2QwkvKiBNYWlsYm94IDI3IERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjdfTEVOR1RICQkweEZGQzAyRjcwCS8qIE1haWxib3ggMjcgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyN19USU1FU1RBTVAJMHhGRkMwMkY3NAkvKiBNYWlsYm94IDI3IFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjdfSUQwCQkweEZGQzAyRjc4CS8qIE1haWxib3ggMjcgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjdfSUQxCQkweEZGQzAyRjdDCS8qIE1haWxib3ggMjcgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMjhfREFUQTAJCTB4RkZDMDJGODAJLyogTWFpbGJveCAyOCBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjhfREFUQTEJCTB4RkZDMDJGODQJLyogTWFpbGJveCAyOCBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjI4X0RBVEEyCQkweEZGQzAyRjg4CS8qIE1haWxib3ggMjggRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyOF9EQVRBMwkJMHhGRkMwMkY4QwkvKiBNYWlsYm94IDI4IERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjhfTEVOR1RICQkweEZGQzAyRjkwCS8qIE1haWxib3ggMjggRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyOF9USU1FU1RBTVAJMHhGRkMwMkY5NAkvKiBNYWlsYm94IDI4IFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjhfSUQwCQkweEZGQzAyRjk4CS8qIE1haWxib3ggMjggSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjhfSUQxCQkweEZGQzAyRjlDCS8qIE1haWxib3ggMjggSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMjlfREFUQTAJCTB4RkZDMDJGQTAJLyogTWFpbGJveCAyOSBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjlfREFUQTEJCTB4RkZDMDJGQTQJLyogTWFpbGJveCAyOSBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjI5X0RBVEEyCQkweEZGQzAyRkE4CS8qIE1haWxib3ggMjkgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyOV9EQVRBMwkJMHhGRkMwMkZBQwkvKiBNYWlsYm94IDI5IERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjlfTEVOR1RICQkweEZGQzAyRkIwCS8qIE1haWxib3ggMjkgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIyOV9USU1FU1RBTVAJMHhGRkMwMkZCNAkvKiBNYWlsYm94IDI5IFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjlfSUQwCQkweEZGQzAyRkI4CS8qIE1haWxib3ggMjkgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMjlfSUQxCQkweEZGQzAyRkJDCS8qIE1haWxib3ggMjkgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMzBfREFUQTAJCTB4RkZDMDJGQzAJLyogTWFpbGJveCAzMCBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMzBfREFUQTEJCTB4RkZDMDJGQzQJLyogTWFpbGJveCAzMCBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjMwX0RBVEEyCQkweEZGQzAyRkM4CS8qIE1haWxib3ggMzAgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIzMF9EQVRBMwkJMHhGRkMwMkZDQwkvKiBNYWlsYm94IDMwIERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMzBfTEVOR1RICQkweEZGQzAyRkQwCS8qIE1haWxib3ggMzAgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIzMF9USU1FU1RBTVAJMHhGRkMwMkZENAkvKiBNYWlsYm94IDMwIFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMzBfSUQwCQkweEZGQzAyRkQ4CS8qIE1haWxib3ggMzAgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMzBfSUQxCQkweEZGQzAyRkRDCS8qIE1haWxib3ggMzAgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQ0FOX01CMzFfREFUQTAJCTB4RkZDMDJGRTAJLyogTWFpbGJveCAzMSBEYXRhIFdvcmQJMCBbMTU6MF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMzFfREFUQTEJCTB4RkZDMDJGRTQJLyogTWFpbGJveCAzMSBEYXRhIFdvcmQJMSBbMzE6MTZdIFJlZ2lzdGVyICovCisjZGVmaW5lCUNBTl9NQjMxX0RBVEEyCQkweEZGQzAyRkU4CS8qIE1haWxib3ggMzEgRGF0YSBXb3JkCTIgWzQ3OjMyXSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIzMV9EQVRBMwkJMHhGRkMwMkZFQwkvKiBNYWlsYm94IDMxIERhdGEgV29yZAkzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMzFfTEVOR1RICQkweEZGQzAyRkYwCS8qIE1haWxib3ggMzEgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLworI2RlZmluZQlDQU5fTUIzMV9USU1FU1RBTVAJMHhGRkMwMkZGNAkvKiBNYWlsYm94IDMxIFRpbWUgU3RhbXAgVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMzFfSUQwCQkweEZGQzAyRkY4CS8qIE1haWxib3ggMzEgSWRlbnRpZmllciBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQ0FOX01CMzFfSUQxCQkweEZGQzAyRkZDCS8qIE1haWxib3ggMzEgSWRlbnRpZmllciBIaWdoIFJlZ2lzdGVyICovCisKKy8qIENBTiBNYWlsYm94IEFyZWEgTWFjcm9zICovCisjZGVmaW5lCUNBTl9NQl9JRDEoeCkJCShDQU5fTUIwMF9JRDErKCh4KSoweDIwKSkKKyNkZWZpbmUJQ0FOX01CX0lEMCh4KQkJKENBTl9NQjAwX0lEMCsoKHgpKjB4MjApKQorI2RlZmluZQlDQU5fTUJfVElNRVNUQU1QKHgpCShDQU5fTUIwMF9USU1FU1RBTVArKCh4KSoweDIwKSkKKyNkZWZpbmUJQ0FOX01CX0xFTkdUSCh4KQkoQ0FOX01CMDBfTEVOR1RIKygoeCkqMHgyMCkpCisjZGVmaW5lCUNBTl9NQl9EQVRBMyh4KQkJKENBTl9NQjAwX0RBVEEzKygoeCkqMHgyMCkpCisjZGVmaW5lCUNBTl9NQl9EQVRBMih4KQkJKENBTl9NQjAwX0RBVEEyKygoeCkqMHgyMCkpCisjZGVmaW5lCUNBTl9NQl9EQVRBMSh4KQkJKENBTl9NQjAwX0RBVEExKygoeCkqMHgyMCkpCisjZGVmaW5lCUNBTl9NQl9EQVRBMCh4KQkJKENBTl9NQjAwX0RBVEEwKygoeCkqMHgyMCkpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBTeXN0ZW0gTU1SIFJlZ2lzdGVyIEJpdHMgYW5kCU1hY3JvcyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworLyogU1dSU1QgTWFzayAqLworI2RlZmluZQlTWVNURU1fUkVTRVQJMHgwMDA3CS8qIEluaXRpYXRlcyBBIFN5c3RlbSBTb2Z0d2FyZSBSZXNldCAqLworI2RlZmluZQlET1VCTEVfRkFVTFQJMHgwMDA4CS8qIENvcmUJRG91YmxlIEZhdWx0IENhdXNlcyBSZXNldCAqLworI2RlZmluZQlSRVNFVF9ET1VCTEUJMHgyMDAwCS8qIFNXIFJlc2V0IEdlbmVyYXRlZCBCeSBDb3JlIERvdWJsZS1GYXVsdCAqLworI2RlZmluZQlSRVNFVF9XRE9HCQkweDQwMDAJLyogU1cgUmVzZXQgR2VuZXJhdGVkIEJ5IFdhdGNoZG9nIFRpbWVyICovCisjZGVmaW5lCVJFU0VUX1NPRlRXQVJFCTB4ODAwMAkvKiBTVyBSZXNldCBPY2N1cnJlZCBTaW5jZSBMYXN0CVJlYWQgT2YJU1dSU1QgKi8KKworLyogU1lTQ1IgTWFza3MJCQkJCQkJCQkJCQkJICovCisjZGVmaW5lCUJNT0RFCQkJMHgwMDA2CS8qIEJvb3QJTW9kZSAtIExhdGNoZWQgRHVyaW5nIEhXIFJlc2V0IEZyb20gTW9kZSBQaW5zICovCisjZGVmaW5lCU5PQk9PVAkJCTB4MDAxMAkvKiBFeGVjdXRlIEZyb20JTDEgb3IgQVNZTkMgQmFuayAwIFdoZW4JQk1PREUgPQkwICovCisKKworLyogKioqKioqKioqKioqKiAgU1lTVEVNIElOVEVSUlVQVCBDT05UUk9MTEVSIE1BU0tTICoqKioqKioqKioqKioqKioqICovCisKKy8qIFBlcmlwaGVyYWwgTWFza3MgRm9yCVNJQzBfSVNSLCBTSUMwX0lXUiwgU0lDMF9JTUFTSyAqLworI2RlZmluZQlQTExfV0FLRVVQX0lSUQkJMHgwMDAwMDAwMQkvKiBQTEwgV2FrZXVwIEludGVycnVwdAlSZXF1ZXN0ICovCisjZGVmaW5lCURNQUMwX0VSUl9JUlEJCTB4MDAwMDAwMDIJLyogRE1BIENvbnRyb2xsZXIgMCBFcnJvciBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlQUElfRVJSX0lSUQkJMHgwMDAwMDAwNAkvKiBQUEkgRXJyb3IgSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUJU1BPUlQwX0VSUl9JUlEJCTB4MDAwMDAwMDgJLyogU1BPUlQwIEVycm9yCUludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lCVNQT1JUMV9FUlJfSVJRCQkweDAwMDAwMDEwCS8qIFNQT1JUMSBFcnJvcglJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlTUEkwX0VSUl9JUlEJCTB4MDAwMDAwMjAJLyogU1BJMAlFcnJvciBJbnRlcnJ1cHQJUmVxdWVzdCAqLworI2RlZmluZQlVQVJUMF9FUlJfSVJRCQkweDAwMDAwMDQwCS8qIFVBUlQwIEVycm9yIEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lCVJUQ19JUlEJCQkweDAwMDAwMDgwCS8qIFJlYWwtVGltZSBDbG9jayBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlETUEwX0lSUQkJMHgwMDAwMDEwMAkvKiBETUEgQ2hhbm5lbCAwIChQUEkpIEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lCURNQTFfSVJRCQkweDAwMDAwMjAwCS8qIERNQSBDaGFubmVsIDEgKFNQT1JUMCBSWCkgSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUJRE1BMl9JUlEJCTB4MDAwMDA0MDAJLyogRE1BIENoYW5uZWwgMiAoU1BPUlQwIFRYKSBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlETUEzX0lSUQkJMHgwMDAwMDgwMAkvKiBETUEgQ2hhbm5lbCAzIChTUE9SVDEgUlgpIEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lCURNQTRfSVJRCQkweDAwMDAxMDAwCS8qIERNQSBDaGFubmVsIDQgKFNQT1JUMSBUWCkgSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUJRE1BNV9JUlEJCTB4MDAwMDIwMDAJLyogRE1BIENoYW5uZWwgNSAoU1BJKSBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlETUE2X0lSUQkJMHgwMDAwNDAwMAkvKiBETUEgQ2hhbm5lbCA2IChVQVJUIFJYKSBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlETUE3X0lSUQkJMHgwMDAwODAwMAkvKiBETUEgQ2hhbm5lbCA3IChVQVJUIFRYKSBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlUSU1FUjBfSVJRCQkweDAwMDEwMDAwCS8qIFRpbWVyIDAgSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUJVElNRVIxX0lSUQkJMHgwMDAyMDAwMAkvKiBUaW1lciAxIEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lCVRJTUVSMl9JUlEJCTB4MDAwNDAwMDAJLyogVGltZXIgMiBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlQRkFfSVJRCQkJMHgwMDA4MDAwMAkvKiBQcm9ncmFtbWFibGUJRmxhZyBJbnRlcnJ1cHQgUmVxdWVzdCBBICovCisjZGVmaW5lCVBGQl9JUlEJCQkweDAwMTAwMDAwCS8qIFByb2dyYW1tYWJsZQlGbGFnIEludGVycnVwdCBSZXF1ZXN0IEIgKi8KKyNkZWZpbmUJTURNQTBfMF9JUlEJCTB4MDAyMDAwMDAJLyogTWVtRE1BMCBTdHJlYW0gMCBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlNRE1BMF8xX0lSUQkJMHgwMDQwMDAwMAkvKiBNZW1ETUEwIFN0cmVhbSAxIEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lCVdET0dfSVJRCQkweDAwODAwMDAwCS8qIFNvZnR3YXJlIFdhdGNoZG9nIFRpbWVyIEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lCURNQUMxX0VSUl9JUlEJCTB4MDEwMDAwMDAJLyogRE1BIENvbnRyb2xsZXIgMSBFcnJvciBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlTUE9SVDJfRVJSX0lSUQkJMHgwMjAwMDAwMAkvKiBTUE9SVDIgRXJyb3IJSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUJU1BPUlQzX0VSUl9JUlEJCTB4MDQwMDAwMDAJLyogU1BPUlQzIEVycm9yCUludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lCU1YVlJfU0RfSVJRCQkweDA4MDAwMDAwCS8qIE1YVlIJU3luY2hyb25vdXMgRGF0YSBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlTUEkxX0VSUl9JUlEJCTB4MTAwMDAwMDAJLyogU1BJMQlFcnJvciBJbnRlcnJ1cHQJUmVxdWVzdCAqLworI2RlZmluZQlTUEkyX0VSUl9JUlEJCTB4MjAwMDAwMDAJLyogU1BJMglFcnJvciBJbnRlcnJ1cHQJUmVxdWVzdCAqLworI2RlZmluZQlVQVJUMV9FUlJfSVJRCQkweDQwMDAwMDAwCS8qIFVBUlQxIEVycm9yIEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lCVVBUlQyX0VSUl9JUlEJCTB4ODAwMDAwMDAJLyogVUFSVDIgRXJyb3IgSW50ZXJydXB0IFJlcXVlc3QgKi8KKworLyogdGhlIGZvbGxvd2luZyBhcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lCURNQTBfRVJSX0lSUQkJRE1BQzBfRVJSX0lSUQorI2RlZmluZQlETUExX0VSUl9JUlEJCURNQUMxX0VSUl9JUlEKKworCisvKiBQZXJpcGhlcmFsIE1hc2tzIEZvcglTSUNfSVNSMSwgU0lDX0lXUjEsIFNJQ19JTUFTSzEJICovCisjZGVmaW5lCUNBTl9FUlJfSVJRCQkJMHgwMDAwMDAwMQkvKiBDQU4gRXJyb3IgSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUJRE1BOF9JUlEJCQkweDAwMDAwMDAyCS8qIERNQSBDaGFubmVsIDggKFNQT1JUMiBSWCkgSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUJRE1BOV9JUlEJCQkweDAwMDAwMDA0CS8qIERNQSBDaGFubmVsIDkgKFNQT1JUMiBUWCkgSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUJRE1BMTBfSVJRCQkJMHgwMDAwMDAwOAkvKiBETUEgQ2hhbm5lbCAxMCAoU1BPUlQzIFJYKSBJbnRlcnJ1cHQJUmVxdWVzdCAqLworI2RlZmluZQlETUExMV9JUlEJCQkweDAwMDAwMDEwCS8qIERNQSBDaGFubmVsIDExIChTUE9SVDMgVFgpIEludGVycnVwdAlSZXF1ZXN0ICovCisjZGVmaW5lCURNQTEyX0lSUQkJCTB4MDAwMDAwMjAJLyogRE1BIENoYW5uZWwgMTIgSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUJRE1BMTNfSVJRCQkJMHgwMDAwMDA0MAkvKiBETUEgQ2hhbm5lbCAxMyBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlETUExNF9JUlEJCQkweDAwMDAwMDgwCS8qIERNQSBDaGFubmVsIDE0IChTUEkxKSBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlETUExNV9JUlEJCQkweDAwMDAwMTAwCS8qIERNQSBDaGFubmVsIDE1IChTUEkyKSBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlETUExNl9JUlEJCQkweDAwMDAwMjAwCS8qIERNQSBDaGFubmVsIDE2IChVQVJUMSBSWCkgSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUJRE1BMTdfSVJRCQkJMHgwMDAwMDQwMAkvKiBETUEgQ2hhbm5lbCAxNyAoVUFSVDEgVFgpIEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lCURNQTE4X0lSUQkJCTB4MDAwMDA4MDAJLyogRE1BIENoYW5uZWwgMTggKFVBUlQyIFJYKSBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlETUExOV9JUlEJCQkweDAwMDAxMDAwCS8qIERNQSBDaGFubmVsIDE5IChVQVJUMiBUWCkgSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUJVFdJMF9JUlEJCQkweDAwMDAyMDAwCS8qIFRXSTAJSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUJVFdJMV9JUlEJCQkweDAwMDA0MDAwCS8qIFRXSTEJSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUJQ0FOX1JYX0lSUQkJCTB4MDAwMDgwMDAJLyogQ0FOIFJlY2VpdmUgSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUJQ0FOX1RYX0lSUQkJCTB4MDAwMTAwMDAJLyogQ0FOIFRyYW5zbWl0CUludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lCU1ETUExXzBfSVJRCQkJMHgwMDAyMDAwMAkvKiBNZW1ETUExIFN0cmVhbSAwIEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lCU1ETUExXzFfSVJRCQkJMHgwMDA0MDAwMAkvKiBNZW1ETUExIFN0cmVhbSAxIEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lCU1YVlJfU1RBVF9JUlEJCQkweDAwMDgwMDAwCS8qIE1YVlIJU3RhdHVzIEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lCU1YVlJfQ01fSVJRCQkJMHgwMDEwMDAwMAkvKiBNWFZSCUNvbnRyb2wJTWVzc2FnZQlJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZQlNWFZSX0FQX0lSUQkJCTB4MDAyMDAwMDAJLyogTVhWUglBc3luY2hyb25vdXMgUGFja2V0IEludGVycnVwdCAqLworCisvKiB0aGUgZm9sbG93aW5nIGFyZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUJTURNQTBfSVJRCQlNRE1BMV8wX0lSUQorI2RlZmluZQlNRE1BMV9JUlEJCU1ETUExXzFfSVJRCisKKyNpZmRlZiBfTUlTUkFfUlVMRVMKKyNkZWZpbmUJX01GMTUgMHhGdQorI2RlZmluZQlfTUY3IDd1CisjZWxzZQorI2RlZmluZQlfTUYxNSAweEYKKyNkZWZpbmUJX01GNyA3CisjZW5kaWYgLyogX01JU1JBX1JVTEVTICovCisKKy8qIFNJQ19JTUFTS3ggTWFza3MJCQkJCQkJCQkJCSAqLworI2RlZmluZQlTSUNfVU5NQVNLX0FMTAkweDAwMDAwMDAwCQkJCQkvKiBVbm1hc2sgYWxsIHBlcmlwaGVyYWwgaW50ZXJydXB0cyAqLworI2RlZmluZQlTSUNfTUFTS19BTEwJMHhGRkZGRkZGRgkJCQkJLyogTWFzawlhbGwgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzICovCisjaWZkZWYgX01JU1JBX1JVTEVTCisjZGVmaW5lCVNJQ19NQVNLKHgpCQkoMSA8PCAoKHgpJjB4MUZ1KSkJCQkJCS8qIE1hc2sJUGVyaXBoZXJhbCAjeCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUJU0lDX1VOTUFTSyh4KQkoMHhGRkZGRkZGRnUgXiAoMSA8PCAoKHgpJjB4MUZ1KSkpCS8qIFVubWFzayBQZXJpcGhlcmFsICN4CWludGVycnVwdCAqLworI2Vsc2UKKyNkZWZpbmUJU0lDX01BU0soeCkJCSgxIDw8ICgoeCkmMHgxRikpCQkJCQkvKiBNYXNrCVBlcmlwaGVyYWwgI3ggaW50ZXJydXB0ICovCisjZGVmaW5lCVNJQ19VTk1BU0soeCkJKDB4RkZGRkZGRkYgXiAoMSA8PCAoKHgpJjB4MUYpKSkJLyogVW5tYXNrIFBlcmlwaGVyYWwgI3gJaW50ZXJydXB0ICovCisjZW5kaWYgLyogX01JU1JBX1JVTEVTICovCisKKy8qIFNJQ19JV1J4IE1hc2tzCQkJCQkJCQkJCQkgKi8KKyNkZWZpbmUJSVdSX0RJU0FCTEVfQUxMCTB4MDAwMDAwMDAJCQkJCS8qIFdha2V1cCBEaXNhYmxlIGFsbCBwZXJpcGhlcmFscyAqLworI2RlZmluZQlJV1JfRU5BQkxFX0FMTAkweEZGRkZGRkZGCQkJCQkvKiBXYWtldXAgRW5hYmxlIGFsbCBwZXJpcGhlcmFscyAqLworI2lmZGVmIF9NSVNSQV9SVUxFUworI2RlZmluZQlJV1JfRU5BQkxFKHgpCSgxIDw8ICgoeCkmMHgxRnUpKQkJCQkJLyogV2FrZXVwIEVuYWJsZSBQZXJpcGhlcmFsICN4ICovCisjZGVmaW5lCUlXUl9ESVNBQkxFKHgpCSgweEZGRkZGRkZGdSBeICgxIDw8ICgoeCkmMHgxRnUpKSkJLyogV2FrZXVwIERpc2FibGUgUGVyaXBoZXJhbCAjeCAqLworI2Vsc2UKKyNkZWZpbmUJSVdSX0VOQUJMRSh4KQkoMSA8PCAoKHgpJjB4MUYpKQkJCQkJLyogV2FrZXVwIEVuYWJsZSBQZXJpcGhlcmFsICN4ICovCisjZGVmaW5lCUlXUl9ESVNBQkxFKHgpCSgweEZGRkZGRkZGIF4gKDEgPDwgKCh4KSYweDFGKSkpCS8qIFdha2V1cCBEaXNhYmxlIFBlcmlwaGVyYWwgI3ggKi8KKyNlbmRpZiAvKiBfTUlTUkFfUlVMRVMgKi8KKworLyogICoqKioqKioqKiAgUEFSQUxMRUwJUEVSSVBIRVJBTCBJTlRFUkZBQ0UgKFBQSSkgTUFTS1MgKioqKioqKioqKioqKioqKiAgICovCisvKiAgUFBJX0NPTlRST0wJTWFza3MJICAgICAgKi8KKyNkZWZpbmUJUE9SVF9FTgkJMHgwMDAxCS8qIFBQSSBQb3J0IEVuYWJsZSAgKi8KKyNkZWZpbmUJUE9SVF9ESVIJMHgwMDAyCS8qIFBQSSBQb3J0IERpcmVjdGlvbgkgICAgKi8KKyNkZWZpbmUJWEZSX1RZUEUJMHgwMDBDCS8qIFBQSSBUcmFuc2ZlcglUeXBlICAqLworI2RlZmluZQlQT1JUX0NGRwkweDAwMzAJLyogUFBJIFBvcnQgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZQlGTERfU0VMCQkweDAwNDAJLyogUFBJIEFjdGl2ZSBGaWVsZCBTZWxlY3QgKi8KKyNkZWZpbmUJUEFDS19FTgkJMHgwMDgwCS8qIFBQSSBQYWNraW5nIE1vZGUgKi8KKy8qIHByZXZpb3VzIHZlcnNpb25zIG9mCWRlZkJGNTM5LmggZXJyb25lb3VzbHkgaW5jbHVkZWQJRE1BMzIgKFBQSSAzMi1iaXQgRE1BIEVuYWJsZSkgKi8KKyNkZWZpbmUJU0tJUF9FTgkJMHgwMjAwCS8qIFBQSSBTa2lwIEVsZW1lbnQgRW5hYmxlICovCisjZGVmaW5lCVNLSVBfRU8JCTB4MDQwMAkvKiBQUEkgU2tpcCBFdmVuL09kZCBFbGVtZW50cyAqLworI2RlZmluZQlETEVOR1RICQkweDM4MDAJLyogUFBJIERhdGEgTGVuZ3RoICAqLworI2RlZmluZQlETEVOXzgJCTB4MAkgICAgIC8qCVBQSSBEYXRhIExlbmd0aAltYXNrIGZvciBETEVOPTggKi8KKyNkZWZpbmUJRExFTl8xMAkJMHgwODAwCQkvKiBEYXRhCUxlbmd0aCA9IDEwIEJpdHMgKi8KKyNkZWZpbmUJRExFTl8xMQkJMHgxMDAwCQkvKiBEYXRhCUxlbmd0aCA9IDExIEJpdHMgKi8KKyNkZWZpbmUJRExFTl8xMgkJMHgxODAwCQkvKiBEYXRhCUxlbmd0aCA9IDEyIEJpdHMgKi8KKyNkZWZpbmUJRExFTl8xMwkJMHgyMDAwCQkvKiBEYXRhCUxlbmd0aCA9IDEzIEJpdHMgKi8KKyNkZWZpbmUJRExFTl8xNAkJMHgyODAwCQkvKiBEYXRhCUxlbmd0aCA9IDE0IEJpdHMgKi8KKyNkZWZpbmUJRExFTl8xNQkJMHgzMDAwCQkvKiBEYXRhCUxlbmd0aCA9IDE1IEJpdHMgKi8KKyNkZWZpbmUJRExFTl8xNgkJMHgzODAwCQkvKiBEYXRhCUxlbmd0aCA9IDE2IEJpdHMgKi8KKyNpZmRlZiBfTUlTUkFfUlVMRVMKKyNkZWZpbmUJRExFTih4KQkJKCgoKHgpLTl1KSAmIDB4MDd1KSA8PCAxMSkgIC8qIFBQSSBEYXRhCUxlbmd0aCAob25seSB3b3JrcyBmb3IgeD0xMC0tPng9MTYpICovCisjZWxzZQorI2RlZmluZQlETEVOKHgpCQkoKCgoeCktOSkgJiAweDA3KSA8PCAxMSkgIC8qIFBQSSBEYXRhIExlbmd0aCAob25seSB3b3JrcyBmb3IgeD0xMC0tPng9MTYpICovCisjZW5kaWYgLyogX01JU1JBX1JVTEVTICovCisjZGVmaW5lCVBPTAkJCTB4QzAwMAkvKiBQUEkgU2lnbmFsIFBvbGFyaXRpZXMgICAgICAgKi8KKyNkZWZpbmUJUE9MQwkJMHg0MDAwCQkvKiBQUEkgQ2xvY2sgUG9sYXJpdHkgKi8KKyNkZWZpbmUJUE9MUwkJMHg4MDAwCQkvKiBQUEkgRnJhbWUgU3luYyBQb2xhcml0eSAqLworCisKKy8qIFBQSV9TVEFUVVMgTWFza3MJCQkJCSAgICAgKi8KKyNkZWZpbmUJRkxECQkJMHgwNDAwCS8qIEZpZWxkIEluZGljYXRvciAgICovCisjZGVmaW5lCUZUX0VSUgkJMHgwODAwCS8qIEZyYW1lIFRyYWNrIEVycm9yICovCisjZGVmaW5lCU9WUgkJCTB4MTAwMAkvKiBGSUZPCU92ZXJmbG93IEVycm9yICovCisjZGVmaW5lCVVORFIJCTB4MjAwMAkvKiBGSUZPCVVuZGVycnVuIEVycm9yICovCisjZGVmaW5lCUVSUl9ERVQJCTB4NDAwMAkvKiBFcnJvciBEZXRlY3RlZCBJbmRpY2F0b3IgKi8KKyNkZWZpbmUJRVJSX05DT1IJMHg4MDAwCS8qIEVycm9yIE5vdCBDb3JyZWN0ZWQgSW5kaWNhdG9yICovCisKKworLyogKioqKioqKioqKiAgRE1BIENPTlRST0xMRVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBETUF4X1BFUklQSEVSQUxfTUFQLAlNRE1BX3l5X1BFUklQSEVSQUxfTUFQIE1hc2tzICovCisKKyNkZWZpbmUJQ1RZUEUJCQkweDAwNDAJLyogRE1BIENoYW5uZWwgVHlwZSBJbmRpY2F0b3IgKi8KKyNkZWZpbmUJQ1RZUEVfUAkJCTB4NgkJLyogRE1BIENoYW5uZWwgVHlwZSBJbmRpY2F0b3IgQklUIFBPU0lUSU9OICovCisjZGVmaW5lCVBDQVA4CQkJMHgwMDgwCS8qIERNQSA4LWJpdCBPcGVyYXRpb24gSW5kaWNhdG9yICAgKi8KKyNkZWZpbmUJUENBUDE2CQkJMHgwMTAwCS8qIERNQSAxNi1iaXQgT3BlcmF0aW9uCUluZGljYXRvciAqLworI2RlZmluZQlQQ0FQMzIJCQkweDAyMDAJLyogRE1BIDMyLWJpdCBPcGVyYXRpb24JSW5kaWNhdG9yICovCisjZGVmaW5lCVBDQVBXUgkJCTB4MDQwMAkvKiBETUEgV3JpdGUgT3BlcmF0aW9uIEluZGljYXRvciAqLworI2RlZmluZQlQQ0FQUkQJCQkweDA4MDAJLyogRE1BIFJlYWQgT3BlcmF0aW9uIEluZGljYXRvciAqLworI2RlZmluZQlQTUFQCQkJMHhGMDAwCS8qIERNQSBQZXJpcGhlcmFsIE1hcCBGaWVsZCAqLworCisvKiBQTUFQCUVuY29kaW5ncyBGb3IgRE1BIENvbnRyb2xsZXIgMCAqLworI2RlZmluZQlQTUFQX1BQSQkJMHgwMDAwCS8qIFBNQVAJUFBJIFBvcnQgRE1BICovCisjZGVmaW5lCVBNQVBfU1BPUlQwUlgJMHgxMDAwCS8qIFBNQVAJU1BPUlQwIFJlY2VpdmUgRE1BICovCisjZGVmaW5lCVBNQVBfU1BPUlQwVFgJMHgyMDAwCS8qIFBNQVAJU1BPUlQwIFRyYW5zbWl0CURNQSAqLworI2RlZmluZQlQTUFQX1NQT1JUMVJYCTB4MzAwMAkvKiBQTUFQCVNQT1JUMSBSZWNlaXZlIERNQSAqLworI2RlZmluZQlQTUFQX1NQT1JUMVRYCTB4NDAwMAkvKiBQTUFQCVNQT1JUMSBUcmFuc21pdAlETUEgKi8KKyNkZWZpbmUJUE1BUF9TUEkwCQkweDUwMDAJLyogUE1BUAlTUEkgRE1BICovCisjZGVmaW5lCVBNQVBfVUFSVDBSWAkJMHg2MDAwCS8qIFBNQVAJVUFSVCBSZWNlaXZlIERNQSAqLworI2RlZmluZQlQTUFQX1VBUlQwVFgJCTB4NzAwMAkvKiBQTUFQCVVBUlQgVHJhbnNtaXQgRE1BICovCisKKy8qIFBNQVAJRW5jb2RpbmdzIEZvciBETUEgQ29udHJvbGxlciAxICovCisjZGVmaW5lCVBNQVBfU1BPUlQyUlgJICAgIDB4MDAwMCAgLyogUE1BUCBTUE9SVDIgUmVjZWl2ZSBETUEgKi8KKyNkZWZpbmUJUE1BUF9TUE9SVDJUWAkgICAgMHgxMDAwICAvKiBQTUFQIFNQT1JUMiBUcmFuc21pdCBETUEgKi8KKyNkZWZpbmUJUE1BUF9TUE9SVDNSWAkgICAgMHgyMDAwICAvKiBQTUFQIFNQT1JUMyBSZWNlaXZlIERNQSAqLworI2RlZmluZQlQTUFQX1NQT1JUM1RYCSAgICAweDMwMDAgIC8qIFBNQVAgU1BPUlQzIFRyYW5zbWl0IERNQSAqLworI2RlZmluZQlQTUFQX1NQSTEJICAgIDB4NjAwMCAgLyogUE1BUCBTUEkxIERNQSAqLworI2RlZmluZQlQTUFQX1NQSTIJICAgIDB4NzAwMCAgLyogUE1BUCBTUEkyIERNQSAqLworI2RlZmluZQlQTUFQX1VBUlQxUlgJICAgIDB4ODAwMCAgLyogUE1BUCBVQVJUMSBSZWNlaXZlIERNQSAqLworI2RlZmluZQlQTUFQX1VBUlQxVFgJICAgIDB4OTAwMCAgLyogUE1BUCBVQVJUMSBUcmFuc21pdCBETUEgKi8KKyNkZWZpbmUJUE1BUF9VQVJUMlJYCSAgICAweEEwMDAgIC8qIFBNQVAgVUFSVDIgUmVjZWl2ZSBETUEgKi8KKyNkZWZpbmUJUE1BUF9VQVJUMlRYCSAgICAweEIwMDAgIC8qIFBNQVAgVUFSVDIgVHJhbnNtaXQgRE1BICovCisKKworLyogICoqKioqKioqKioqKiogIEdFTkVSQUwgUFVSUE9TRSBUSU1FUiBNQVNLUwkqKioqKioqKioqKioqKioqKioqKiAqLworLyogUFdNIFRpbWVyIGJpdCBkZWZpbml0aW9ucyAqLworLyogVElNRVJfRU5BQkxFCVJlZ2lzdGVyICovCisjZGVmaW5lCVRJTUVOMAkJCTB4MDAwMQkvKiBFbmFibGUgVGltZXIJMCAqLworI2RlZmluZQlUSU1FTjEJCQkweDAwMDIJLyogRW5hYmxlIFRpbWVyCTEgKi8KKyNkZWZpbmUJVElNRU4yCQkJMHgwMDA0CS8qIEVuYWJsZSBUaW1lcgkyICovCisKKyNkZWZpbmUJVElNRU4wX1AJCTB4MDAKKyNkZWZpbmUJVElNRU4xX1AJCTB4MDEKKyNkZWZpbmUJVElNRU4yX1AJCTB4MDIKKworLyogVElNRVJfRElTQUJMRSBSZWdpc3RlciAqLworI2RlZmluZQlUSU1ESVMwCQkJMHgwMDAxCS8qIERpc2FibGUgVGltZXIgMCAqLworI2RlZmluZQlUSU1ESVMxCQkJMHgwMDAyCS8qIERpc2FibGUgVGltZXIgMSAqLworI2RlZmluZQlUSU1ESVMyCQkJMHgwMDA0CS8qIERpc2FibGUgVGltZXIgMiAqLworCisjZGVmaW5lCVRJTURJUzBfUAkJMHgwMAorI2RlZmluZQlUSU1ESVMxX1AJCTB4MDEKKyNkZWZpbmUJVElNRElTMl9QCQkweDAyCisKKy8qIFRJTUVSX1NUQVRVUwlSZWdpc3RlciAqLworI2RlZmluZQlUSU1JTDAJCQkweDAwMDEJLyogVGltZXIgMCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUJVElNSUwxCQkJMHgwMDAyCS8qIFRpbWVyIDEgSW50ZXJydXB0ICovCisjZGVmaW5lCVRJTUlMMgkJCTB4MDAwNAkvKiBUaW1lciAyIEludGVycnVwdCAqLworI2RlZmluZQlUT1ZGX0VSUjAJCTB4MDAxMAkvKiBUaW1lciAwIENvdW50ZXIgT3ZlcmZsb3cgKi8KKyNkZWZpbmUJVE9WRl9FUlIxCQkweDAwMjAJLyogVGltZXIgMSBDb3VudGVyIE92ZXJmbG93ICovCisjZGVmaW5lCVRPVkZfRVJSMgkJMHgwMDQwCS8qIFRpbWVyIDIgQ291bnRlciBPdmVyZmxvdyAqLworI2RlZmluZQlUUlVOMAkJCTB4MTAwMAkvKiBUaW1lciAwIFNsYXZlIEVuYWJsZQlTdGF0dXMgKi8KKyNkZWZpbmUJVFJVTjEJCQkweDIwMDAJLyogVGltZXIgMSBTbGF2ZSBFbmFibGUJU3RhdHVzICovCisjZGVmaW5lCVRSVU4yCQkJMHg0MDAwCS8qIFRpbWVyIDIgU2xhdmUgRW5hYmxlCVN0YXR1cyAqLworCisjZGVmaW5lCVRJTUlMMF9QCQkweDAwCisjZGVmaW5lCVRJTUlMMV9QCQkweDAxCisjZGVmaW5lCVRJTUlMMl9QCQkweDAyCisjZGVmaW5lCVRPVkZfRVJSMF9QCQkweDA0CisjZGVmaW5lCVRPVkZfRVJSMV9QCQkweDA1CisjZGVmaW5lCVRPVkZfRVJSMl9QCQkweDA2CisjZGVmaW5lCVRSVU4wX1AJCQkweDBDCisjZGVmaW5lCVRSVU4xX1AJCQkweDBECisjZGVmaW5lCVRSVU4yX1AJCQkweDBFCisKKy8qIEFsdGVybmF0ZSBEZXByZWNhdGVkCU1hY3JvcyBQcm92aWRlZAlGb3IgQmFja3dhcmRzIENvZGUgQ29tcGF0aWJpbGl0eSAqLworI2RlZmluZQlUT1ZMX0VSUjAJCVRPVkZfRVJSMAorI2RlZmluZQlUT1ZMX0VSUjEJCVRPVkZfRVJSMQorI2RlZmluZQlUT1ZMX0VSUjIJCVRPVkZfRVJSMgorI2RlZmluZQlUT1ZMX0VSUjBfUAkJVE9WRl9FUlIwX1AKKyNkZWZpbmUJVE9WTF9FUlIxX1AJVE9WRl9FUlIxX1AKKyNkZWZpbmUJVE9WTF9FUlIyX1AJVE9WRl9FUlIyX1AKKworLyogVElNRVJ4X0NPTkZJRyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJUFdNX09VVAkJCTB4MDAwMQorI2RlZmluZQlXRFRIX0NBUAkJMHgwMDAyCisjZGVmaW5lCUVYVF9DTEsJCQkweDAwMDMKKyNkZWZpbmUJUFVMU0VfSEkJCTB4MDAwNAorI2RlZmluZQlQRVJJT0RfQ05UCQkweDAwMDgKKyNkZWZpbmUJSVJRX0VOQQkJCTB4MDAxMAorI2RlZmluZQlUSU5fU0VMCQkJMHgwMDIwCisjZGVmaW5lCU9VVF9ESVMJCQkweDAwNDAKKyNkZWZpbmUJQ0xLX1NFTAkJCTB4MDA4MAorI2RlZmluZQlUT0dHTEVfSEkJCTB4MDEwMAorI2RlZmluZQlFTVVfUlVOCQkJMHgwMjAwCisjaWZkZWYgX01JU1JBX1JVTEVTCisjZGVmaW5lCUVSUl9UWVAoeCkJCSgoKHgpICYJMHgwM3UpIDw8IDE0KQorI2Vsc2UKKyNkZWZpbmUJRVJSX1RZUCh4KQkJKCgoeCkgJgkweDAzKSA8PCAxNCkKKyNlbmRpZiAvKiBfTUlTUkFfUlVMRVMgKi8KKworI2RlZmluZQlUTU9ERV9QMAkJMHgwMAorI2RlZmluZQlUTU9ERV9QMQkJMHgwMQorI2RlZmluZQlQVUxTRV9ISV9QCQkweDAyCisjZGVmaW5lCVBFUklPRF9DTlRfUAkweDAzCisjZGVmaW5lCUlSUV9FTkFfUAkJMHgwNAorI2RlZmluZQlUSU5fU0VMX1AJCTB4MDUKKyNkZWZpbmUJT1VUX0RJU19QCQkweDA2CisjZGVmaW5lCUNMS19TRUxfUAkJMHgwNworI2RlZmluZQlUT0dHTEVfSElfUAkJMHgwOAorI2RlZmluZQlFTVVfUlVOX1AJCTB4MDkKKyNkZWZpbmUJRVJSX1RZUF9QMAkJMHgwRQorI2RlZmluZQlFUlJfVFlQX1AxCQkweDBGCisKKy8qICoqKioqKioqKioqKioqKioqKioqKiAgQVNZTkNIUk9OT1VTIE1FTU9SWSBDT05UUk9MTEVSIE1BU0tTCSoqKioqKioqKioqKiogKi8KKy8qIEVCSVVfQU1HQ1RMIE1hc2tzICovCisjZGVmaW5lCUFNQ0tFTgkJMHgwMDAxCS8qIEVuYWJsZSBDTEtPVVQgKi8KKyNkZWZpbmUJQU1CRU5fTk9ORQkweDAwMDAJLyogQWxsIEJhbmtzIERpc2FibGVkICovCisjZGVmaW5lCUFNQkVOX0IwCTB4MDAwMgkvKiBFbmFibGUgQXN5bmNocm9ub3VzIE1lbW9yeSBCYW5rIDAgb25seSAqLworI2RlZmluZQlBTUJFTl9CMF9CMQkweDAwMDQJLyogRW5hYmxlIEFzeW5jaHJvbm91cyBNZW1vcnkgQmFua3MgMCAmCTEgb25seSAqLworI2RlZmluZQlBTUJFTl9CMF9CMV9CMgkweDAwMDYJLyogRW5hYmxlIEFzeW5jaHJvbm91cyBNZW1vcnkgQmFua3MgMCwgMSwgYW5kIDIgKi8KKyNkZWZpbmUJQU1CRU5fQUxMCTB4MDAwOAkvKiBFbmFibGUgQXN5bmNocm9ub3VzIE1lbW9yeSBCYW5rcyAoYWxsKSAwLCAxLAkyLCBhbmQgMyAqLworI2RlZmluZQlDRFBSSU8JCTB4MDEwMAkvKiBETUEgaGFzIHByaW9yaXR5IG92ZXIgY29yZSBmb3IgZXh0ZXJuYWwgYWNjZXNzZXMgKi8KKworLyogRUJJVV9BTUdDVEwgQml0IFBvc2l0aW9ucyAqLworI2RlZmluZQlBTUNLRU5fUAkJMHgwMDAwCS8qIEVuYWJsZSBDTEtPVVQgKi8KKyNkZWZpbmUJQU1CRU5fUDAJCTB4MDAwMQkvKiBBc3luY2hyb25vdXMJTWVtb3J5IEVuYWJsZSwgMDAwIC0gYmFua3MgMC0zIGRpc2FibGVkLCAwMDEgLSBCYW5rIDAgZW5hYmxlZCAqLworI2RlZmluZQlBTUJFTl9QMQkJMHgwMDAyCS8qIEFzeW5jaHJvbm91cwlNZW1vcnkgRW5hYmxlLCAwMTAgLSBiYW5rcyAwJjEgZW5hYmxlZCwJIDAxMSAtIGJhbmtzIDAtMyBlbmFibGVkICovCisjZGVmaW5lCUFNQkVOX1AyCQkweDAwMDMJLyogQXN5bmNocm9ub3VzCU1lbW9yeSBFbmFibGUsIDF4eCAtIEFsbCBiYW5rcyAoYmFuayAwLAkxLCAyLCBhbmQgMykgZW5hYmxlZCAqLworCisvKiBFQklVX0FNQkNUTDAJTWFza3MgKi8KKyNkZWZpbmUJQjBSRFlFTgkJCTB4MDAwMDAwMDEgIC8qIEJhbmsgMCBSRFkgRW5hYmxlLCAwPWRpc2FibGUsIDE9ZW5hYmxlICovCisjZGVmaW5lCUIwUkRZUE9MCQkweDAwMDAwMDAyICAvKiBCYW5rIDAgUkRZIEFjdGl2ZSBoaWdoLCAwPWFjdGl2ZQlsb3csIDE9YWN0aXZlIGhpZ2ggKi8KKyNkZWZpbmUJQjBUVF8xCQkJMHgwMDAwMDAwNCAgLyogQmFuayAwIFRyYW5zaXRpb24gVGltZSBmcm9tIFJlYWQJdG8gV3JpdGUgPSAxIGN5Y2xlICovCisjZGVmaW5lCUIwVFRfMgkJCTB4MDAwMDAwMDggIC8qIEJhbmsgMCBUcmFuc2l0aW9uIFRpbWUgZnJvbSBSZWFkCXRvIFdyaXRlID0gMiBjeWNsZXMgKi8KKyNkZWZpbmUJQjBUVF8zCQkJMHgwMDAwMDAwQyAgLyogQmFuayAwIFRyYW5zaXRpb24gVGltZSBmcm9tIFJlYWQJdG8gV3JpdGUgPSAzIGN5Y2xlcyAqLworI2RlZmluZQlCMFRUXzQJCQkweDAwMDAwMDAwICAvKiBCYW5rIDAgVHJhbnNpdGlvbiBUaW1lIGZyb20gUmVhZAl0byBXcml0ZSA9IDQgY3ljbGVzICovCisjZGVmaW5lCUIwU1RfMQkJCTB4MDAwMDAwMTAgIC8qIEJhbmsgMCBTZXR1cCBUaW1lIGZyb20gQU9FIGFzc2VydGVkIHRvIFJlYWQvV3JpdGUgYXNzZXJ0ZWQ9MSBjeWNsZSAqLworI2RlZmluZQlCMFNUXzIJCQkweDAwMDAwMDIwICAvKiBCYW5rIDAgU2V0dXAgVGltZSBmcm9tIEFPRSBhc3NlcnRlZCB0byBSZWFkL1dyaXRlIGFzc2VydGVkPTIgY3ljbGVzICovCisjZGVmaW5lCUIwU1RfMwkJCTB4MDAwMDAwMzAgIC8qIEJhbmsgMCBTZXR1cCBUaW1lIGZyb20gQU9FIGFzc2VydGVkIHRvIFJlYWQvV3JpdGUgYXNzZXJ0ZWQ9MyBjeWNsZXMgKi8KKyNkZWZpbmUJQjBTVF80CQkJMHgwMDAwMDAwMCAgLyogQmFuayAwIFNldHVwIFRpbWUgZnJvbSBBT0UgYXNzZXJ0ZWQgdG8gUmVhZC9Xcml0ZSBhc3NlcnRlZD00IGN5Y2xlcyAqLworI2RlZmluZQlCMEhUXzEJCQkweDAwMDAwMDQwICAvKiBCYW5rIDAgSG9sZCBUaW1lCWZyb20gUmVhZC9Xcml0ZQlkZWFzc2VydGVkIHRvIEFPRSBkZWFzc2VydGVkID0gMSBjeWNsZSAqLworI2RlZmluZQlCMEhUXzIJCQkweDAwMDAwMDgwICAvKiBCYW5rIDAgSG9sZCBUaW1lCWZyb20gUmVhZC9Xcml0ZQlkZWFzc2VydGVkIHRvIEFPRSBkZWFzc2VydGVkID0gMiBjeWNsZXMgKi8KKyNkZWZpbmUJQjBIVF8zCQkJMHgwMDAwMDBDMCAgLyogQmFuayAwIEhvbGQgVGltZQlmcm9tIFJlYWQvV3JpdGUJZGVhc3NlcnRlZCB0byBBT0UgZGVhc3NlcnRlZCA9IDMgY3ljbGVzICovCisjZGVmaW5lCUIwSFRfMAkJCTB4MDAwMDAwMDAgIC8qIEJhbmsgMCBIb2xkIFRpbWUJZnJvbSBSZWFkL1dyaXRlCWRlYXNzZXJ0ZWQgdG8gQU9FIGRlYXNzZXJ0ZWQgPSAwIGN5Y2xlcyAqLworI2RlZmluZQlCMFJBVF8xCQkJMHgwMDAwMDEwMCAgLyogQmFuayAwIFJlYWQgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlICovCisjZGVmaW5lCUIwUkFUXzIJCQkweDAwMDAwMjAwICAvKiBCYW5rIDAgUmVhZCBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzICovCisjZGVmaW5lCUIwUkFUXzMJCQkweDAwMDAwMzAwICAvKiBCYW5rIDAgUmVhZCBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzICovCisjZGVmaW5lCUIwUkFUXzQJCQkweDAwMDAwNDAwICAvKiBCYW5rIDAgUmVhZCBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzICovCisjZGVmaW5lCUIwUkFUXzUJCQkweDAwMDAwNTAwICAvKiBCYW5rIDAgUmVhZCBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzICovCisjZGVmaW5lCUIwUkFUXzYJCQkweDAwMDAwNjAwICAvKiBCYW5rIDAgUmVhZCBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzICovCisjZGVmaW5lCUIwUkFUXzcJCQkweDAwMDAwNzAwICAvKiBCYW5rIDAgUmVhZCBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzICovCisjZGVmaW5lCUIwUkFUXzgJCQkweDAwMDAwODAwICAvKiBCYW5rIDAgUmVhZCBBY2Nlc3MgVGltZSA9IDggY3ljbGVzICovCisjZGVmaW5lCUIwUkFUXzkJCQkweDAwMDAwOTAwICAvKiBCYW5rIDAgUmVhZCBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzICovCisjZGVmaW5lCUIwUkFUXzEwCQkweDAwMDAwQTAwICAvKiBCYW5rIDAgUmVhZCBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcyAqLworI2RlZmluZQlCMFJBVF8xMQkJMHgwMDAwMEIwMCAgLyogQmFuayAwIFJlYWQgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMgKi8KKyNkZWZpbmUJQjBSQVRfMTIJCTB4MDAwMDBDMDAgIC8qIEJhbmsgMCBSZWFkIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzICovCisjZGVmaW5lCUIwUkFUXzEzCQkweDAwMDAwRDAwICAvKiBCYW5rIDAgUmVhZCBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcyAqLworI2RlZmluZQlCMFJBVF8xNAkJMHgwMDAwMEUwMCAgLyogQmFuayAwIFJlYWQgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMgKi8KKyNkZWZpbmUJQjBSQVRfMTUJCTB4MDAwMDBGMDAgIC8qIEJhbmsgMCBSZWFkIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzICovCisjZGVmaW5lCUIwV0FUXzEJCQkweDAwMDAxMDAwICAvKiBCYW5rIDAgV3JpdGUgQWNjZXNzIFRpbWUJPSAxIGN5Y2xlICovCisjZGVmaW5lCUIwV0FUXzIJCQkweDAwMDAyMDAwICAvKiBCYW5rIDAgV3JpdGUgQWNjZXNzIFRpbWUJPSAyIGN5Y2xlcyAqLworI2RlZmluZQlCMFdBVF8zCQkJMHgwMDAwMzAwMCAgLyogQmFuayAwIFdyaXRlIEFjY2VzcyBUaW1lCT0gMyBjeWNsZXMgKi8KKyNkZWZpbmUJQjBXQVRfNAkJCTB4MDAwMDQwMDAgIC8qIEJhbmsgMCBXcml0ZSBBY2Nlc3MgVGltZQk9IDQgY3ljbGVzICovCisjZGVmaW5lCUIwV0FUXzUJCQkweDAwMDA1MDAwICAvKiBCYW5rIDAgV3JpdGUgQWNjZXNzIFRpbWUJPSA1IGN5Y2xlcyAqLworI2RlZmluZQlCMFdBVF82CQkJMHgwMDAwNjAwMCAgLyogQmFuayAwIFdyaXRlIEFjY2VzcyBUaW1lCT0gNiBjeWNsZXMgKi8KKyNkZWZpbmUJQjBXQVRfNwkJCTB4MDAwMDcwMDAgIC8qIEJhbmsgMCBXcml0ZSBBY2Nlc3MgVGltZQk9IDcgY3ljbGVzICovCisjZGVmaW5lCUIwV0FUXzgJCQkweDAwMDA4MDAwICAvKiBCYW5rIDAgV3JpdGUgQWNjZXNzIFRpbWUJPSA4IGN5Y2xlcyAqLworI2RlZmluZQlCMFdBVF85CQkJMHgwMDAwOTAwMCAgLyogQmFuayAwIFdyaXRlIEFjY2VzcyBUaW1lCT0gOSBjeWNsZXMgKi8KKyNkZWZpbmUJQjBXQVRfMTAJCTB4MDAwMEEwMDAgIC8qIEJhbmsgMCBXcml0ZSBBY2Nlc3MgVGltZQk9IDEwIGN5Y2xlcyAqLworI2RlZmluZQlCMFdBVF8xMQkJMHgwMDAwQjAwMCAgLyogQmFuayAwIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTEgY3ljbGVzICovCisjZGVmaW5lCUIwV0FUXzEyCQkweDAwMDBDMDAwICAvKiBCYW5rIDAgV3JpdGUgQWNjZXNzIFRpbWUJPSAxMiBjeWNsZXMgKi8KKyNkZWZpbmUJQjBXQVRfMTMJCTB4MDAwMEQwMDAgIC8qIEJhbmsgMCBXcml0ZSBBY2Nlc3MgVGltZQk9IDEzIGN5Y2xlcyAqLworI2RlZmluZQlCMFdBVF8xNAkJMHgwMDAwRTAwMCAgLyogQmFuayAwIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTQgY3ljbGVzICovCisjZGVmaW5lCUIwV0FUXzE1CQkweDAwMDBGMDAwICAvKiBCYW5rIDAgV3JpdGUgQWNjZXNzIFRpbWUJPSAxNSBjeWNsZXMgKi8KKyNkZWZpbmUJQjFSRFlFTgkJCTB4MDAwMTAwMDAgIC8qIEJhbmsgMSBSRFkgZW5hYmxlLCAwPWRpc2FibGUsIDE9ZW5hYmxlICovCisjZGVmaW5lCUIxUkRZUE9MCQkweDAwMDIwMDAwICAvKiBCYW5rIDEgUkRZIEFjdGl2ZSBoaWdoLCAwPWFjdGl2ZQlsb3csIDE9YWN0aXZlIGhpZ2ggKi8KKyNkZWZpbmUJQjFUVF8xCQkJMHgwMDA0MDAwMCAgLyogQmFuayAxIFRyYW5zaXRpb24gVGltZSBmcm9tIFJlYWQJdG8gV3JpdGUgPSAxIGN5Y2xlICovCisjZGVmaW5lCUIxVFRfMgkJCTB4MDAwODAwMDAgIC8qIEJhbmsgMSBUcmFuc2l0aW9uIFRpbWUgZnJvbSBSZWFkCXRvIFdyaXRlID0gMiBjeWNsZXMgKi8KKyNkZWZpbmUJQjFUVF8zCQkJMHgwMDBDMDAwMCAgLyogQmFuayAxIFRyYW5zaXRpb24gVGltZSBmcm9tIFJlYWQJdG8gV3JpdGUgPSAzIGN5Y2xlcyAqLworI2RlZmluZQlCMVRUXzQJCQkweDAwMDAwMDAwICAvKiBCYW5rIDEgVHJhbnNpdGlvbiBUaW1lIGZyb20gUmVhZAl0byBXcml0ZSA9IDQgY3ljbGVzICovCisjZGVmaW5lCUIxU1RfMQkJCTB4MDAxMDAwMDAgIC8qIEJhbmsgMSBTZXR1cCBUaW1lIGZyb20gQU9FIGFzc2VydGVkIHRvIFJlYWQgb3IgV3JpdGUgYXNzZXJ0ZWQgPSAxIGN5Y2xlICovCisjZGVmaW5lCUIxU1RfMgkJCTB4MDAyMDAwMDAgIC8qIEJhbmsgMSBTZXR1cCBUaW1lIGZyb20gQU9FIGFzc2VydGVkIHRvIFJlYWQgb3IgV3JpdGUgYXNzZXJ0ZWQgPSAyIGN5Y2xlcyAqLworI2RlZmluZQlCMVNUXzMJCQkweDAwMzAwMDAwICAvKiBCYW5rIDEgU2V0dXAgVGltZSBmcm9tIEFPRSBhc3NlcnRlZCB0byBSZWFkIG9yIFdyaXRlIGFzc2VydGVkID0gMyBjeWNsZXMgKi8KKyNkZWZpbmUJQjFTVF80CQkJMHgwMDAwMDAwMCAgLyogQmFuayAxIFNldHVwIFRpbWUgZnJvbSBBT0UgYXNzZXJ0ZWQgdG8gUmVhZCBvciBXcml0ZSBhc3NlcnRlZCA9IDQgY3ljbGVzICovCisjZGVmaW5lCUIxSFRfMQkJCTB4MDA0MDAwMDAgIC8qIEJhbmsgMSBIb2xkIFRpbWUJZnJvbSBSZWFkIG9yIFdyaXRlIGRlYXNzZXJ0ZWQgdG8gQU9FIGRlYXNzZXJ0ZWQJPSAxIGN5Y2xlICovCisjZGVmaW5lCUIxSFRfMgkJCTB4MDA4MDAwMDAgIC8qIEJhbmsgMSBIb2xkIFRpbWUJZnJvbSBSZWFkIG9yIFdyaXRlIGRlYXNzZXJ0ZWQgdG8gQU9FIGRlYXNzZXJ0ZWQJPSAyIGN5Y2xlcyAqLworI2RlZmluZQlCMUhUXzMJCQkweDAwQzAwMDAwICAvKiBCYW5rIDEgSG9sZCBUaW1lCWZyb20gUmVhZCBvciBXcml0ZSBkZWFzc2VydGVkIHRvIEFPRSBkZWFzc2VydGVkCT0gMyBjeWNsZXMgKi8KKyNkZWZpbmUJQjFIVF8wCQkJMHgwMDAwMDAwMCAgLyogQmFuayAxIEhvbGQgVGltZQlmcm9tIFJlYWQgb3IgV3JpdGUgZGVhc3NlcnRlZCB0byBBT0UgZGVhc3NlcnRlZAk9IDAgY3ljbGVzICovCisjZGVmaW5lCUIxUkFUXzEJCQkweDAxMDAwMDAwICAvKiBCYW5rIDEgUmVhZCBBY2Nlc3MgVGltZSA9IDEgY3ljbGUgKi8KKyNkZWZpbmUJQjFSQVRfMgkJCTB4MDIwMDAwMDAgIC8qIEJhbmsgMSBSZWFkIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMgKi8KKyNkZWZpbmUJQjFSQVRfMwkJCTB4MDMwMDAwMDAgIC8qIEJhbmsgMSBSZWFkIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMgKi8KKyNkZWZpbmUJQjFSQVRfNAkJCTB4MDQwMDAwMDAgIC8qIEJhbmsgMSBSZWFkIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMgKi8KKyNkZWZpbmUJQjFSQVRfNQkJCTB4MDUwMDAwMDAgIC8qIEJhbmsgMSBSZWFkIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMgKi8KKyNkZWZpbmUJQjFSQVRfNgkJCTB4MDYwMDAwMDAgIC8qIEJhbmsgMSBSZWFkIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMgKi8KKyNkZWZpbmUJQjFSQVRfNwkJCTB4MDcwMDAwMDAgIC8qIEJhbmsgMSBSZWFkIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMgKi8KKyNkZWZpbmUJQjFSQVRfOAkJCTB4MDgwMDAwMDAgIC8qIEJhbmsgMSBSZWFkIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMgKi8KKyNkZWZpbmUJQjFSQVRfOQkJCTB4MDkwMDAwMDAgIC8qIEJhbmsgMSBSZWFkIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMgKi8KKyNkZWZpbmUJQjFSQVRfMTAJCTB4MEEwMDAwMDAgIC8qIEJhbmsgMSBSZWFkIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzICovCisjZGVmaW5lCUIxUkFUXzExCQkweDBCMDAwMDAwICAvKiBCYW5rIDEgUmVhZCBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcyAqLworI2RlZmluZQlCMVJBVF8xMgkJMHgwQzAwMDAwMCAgLyogQmFuayAxIFJlYWQgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMgKi8KKyNkZWZpbmUJQjFSQVRfMTMJCTB4MEQwMDAwMDAgIC8qIEJhbmsgMSBSZWFkIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzICovCisjZGVmaW5lCUIxUkFUXzE0CQkweDBFMDAwMDAwICAvKiBCYW5rIDEgUmVhZCBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcyAqLworI2RlZmluZQlCMVJBVF8xNQkJMHgwRjAwMDAwMCAgLyogQmFuayAxIFJlYWQgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMgKi8KKyNkZWZpbmUJQjFXQVRfMQkJCTB4MTAwMDAwMDAgLyogQmFuayAxIFdyaXRlIEFjY2VzcyBUaW1lID0gMSBjeWNsZSAqLworI2RlZmluZQlCMVdBVF8yCQkJMHgyMDAwMDAwMCAgLyogQmFuayAxIFdyaXRlIEFjY2VzcyBUaW1lCT0gMiBjeWNsZXMgKi8KKyNkZWZpbmUJQjFXQVRfMwkJCTB4MzAwMDAwMDAgIC8qIEJhbmsgMSBXcml0ZSBBY2Nlc3MgVGltZQk9IDMgY3ljbGVzICovCisjZGVmaW5lCUIxV0FUXzQJCQkweDQwMDAwMDAwICAvKiBCYW5rIDEgV3JpdGUgQWNjZXNzIFRpbWUJPSA0IGN5Y2xlcyAqLworI2RlZmluZQlCMVdBVF81CQkJMHg1MDAwMDAwMCAgLyogQmFuayAxIFdyaXRlIEFjY2VzcyBUaW1lCT0gNSBjeWNsZXMgKi8KKyNkZWZpbmUJQjFXQVRfNgkJCTB4NjAwMDAwMDAgIC8qIEJhbmsgMSBXcml0ZSBBY2Nlc3MgVGltZQk9IDYgY3ljbGVzICovCisjZGVmaW5lCUIxV0FUXzcJCQkweDcwMDAwMDAwICAvKiBCYW5rIDEgV3JpdGUgQWNjZXNzIFRpbWUJPSA3IGN5Y2xlcyAqLworI2RlZmluZQlCMVdBVF84CQkJMHg4MDAwMDAwMCAgLyogQmFuayAxIFdyaXRlIEFjY2VzcyBUaW1lCT0gOCBjeWNsZXMgKi8KKyNkZWZpbmUJQjFXQVRfOQkJCTB4OTAwMDAwMDAgIC8qIEJhbmsgMSBXcml0ZSBBY2Nlc3MgVGltZQk9IDkgY3ljbGVzICovCisjZGVmaW5lCUIxV0FUXzEwCQkweEEwMDAwMDAwICAvKiBCYW5rIDEgV3JpdGUgQWNjZXNzIFRpbWUJPSAxMCBjeWNsZXMgKi8KKyNkZWZpbmUJQjFXQVRfMTEJCTB4QjAwMDAwMDAgIC8qIEJhbmsgMSBXcml0ZSBBY2Nlc3MgVGltZQk9IDExIGN5Y2xlcyAqLworI2RlZmluZQlCMVdBVF8xMgkJMHhDMDAwMDAwMCAgLyogQmFuayAxIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTIgY3ljbGVzICovCisjZGVmaW5lCUIxV0FUXzEzCQkweEQwMDAwMDAwICAvKiBCYW5rIDEgV3JpdGUgQWNjZXNzIFRpbWUJPSAxMyBjeWNsZXMgKi8KKyNkZWZpbmUJQjFXQVRfMTQJCTB4RTAwMDAwMDAgIC8qIEJhbmsgMSBXcml0ZSBBY2Nlc3MgVGltZQk9IDE0IGN5Y2xlcyAqLworI2RlZmluZQlCMVdBVF8xNQkJMHhGMDAwMDAwMCAgLyogQmFuayAxIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTUgY3ljbGVzICovCisKKy8qIEVCSVVfQU1CQ1RMMQlNYXNrcyAqLworI2RlZmluZQlCMlJEWUVOCQkJMHgwMDAwMDAwMSAgLyogQmFuayAyIFJEWSBFbmFibGUsIDA9ZGlzYWJsZSwgMT1lbmFibGUgKi8KKyNkZWZpbmUJQjJSRFlQT0wJCTB4MDAwMDAwMDIgIC8qIEJhbmsgMiBSRFkgQWN0aXZlIGhpZ2gsIDA9YWN0aXZlCWxvdywgMT1hY3RpdmUgaGlnaCAqLworI2RlZmluZQlCMlRUXzEJCQkweDAwMDAwMDA0ICAvKiBCYW5rIDIgVHJhbnNpdGlvbiBUaW1lIGZyb20gUmVhZAl0byBXcml0ZSA9IDEgY3ljbGUgKi8KKyNkZWZpbmUJQjJUVF8yCQkJMHgwMDAwMDAwOCAgLyogQmFuayAyIFRyYW5zaXRpb24gVGltZSBmcm9tIFJlYWQJdG8gV3JpdGUgPSAyIGN5Y2xlcyAqLworI2RlZmluZQlCMlRUXzMJCQkweDAwMDAwMDBDICAvKiBCYW5rIDIgVHJhbnNpdGlvbiBUaW1lIGZyb20gUmVhZAl0byBXcml0ZSA9IDMgY3ljbGVzICovCisjZGVmaW5lCUIyVFRfNAkJCTB4MDAwMDAwMDAgIC8qIEJhbmsgMiBUcmFuc2l0aW9uIFRpbWUgZnJvbSBSZWFkCXRvIFdyaXRlID0gNCBjeWNsZXMgKi8KKyNkZWZpbmUJQjJTVF8xCQkJMHgwMDAwMDAxMCAgLyogQmFuayAyIFNldHVwIFRpbWUgZnJvbSBBT0UgYXNzZXJ0ZWQgdG8gUmVhZCBvciBXcml0ZSBhc3NlcnRlZCA9IDEgY3ljbGUgKi8KKyNkZWZpbmUJQjJTVF8yCQkJMHgwMDAwMDAyMCAgLyogQmFuayAyIFNldHVwIFRpbWUgZnJvbSBBT0UgYXNzZXJ0ZWQgdG8gUmVhZCBvciBXcml0ZSBhc3NlcnRlZCA9IDIgY3ljbGVzICovCisjZGVmaW5lCUIyU1RfMwkJCTB4MDAwMDAwMzAgIC8qIEJhbmsgMiBTZXR1cCBUaW1lIGZyb20gQU9FIGFzc2VydGVkIHRvIFJlYWQgb3IgV3JpdGUgYXNzZXJ0ZWQgPSAzIGN5Y2xlcyAqLworI2RlZmluZQlCMlNUXzQJCQkweDAwMDAwMDAwICAvKiBCYW5rIDIgU2V0dXAgVGltZSBmcm9tIEFPRSBhc3NlcnRlZCB0byBSZWFkIG9yIFdyaXRlIGFzc2VydGVkID0gNCBjeWNsZXMgKi8KKyNkZWZpbmUJQjJIVF8xCQkJMHgwMDAwMDA0MCAgLyogQmFuayAyIEhvbGQgVGltZQlmcm9tIFJlYWQgb3IgV3JpdGUgZGVhc3NlcnRlZCB0byBBT0UgZGVhc3NlcnRlZAk9IDEgY3ljbGUgKi8KKyNkZWZpbmUJQjJIVF8yCQkJMHgwMDAwMDA4MCAgLyogQmFuayAyIEhvbGQgVGltZQlmcm9tIFJlYWQgb3IgV3JpdGUgZGVhc3NlcnRlZCB0byBBT0UgZGVhc3NlcnRlZAk9IDIgY3ljbGVzICovCisjZGVmaW5lCUIySFRfMwkJCTB4MDAwMDAwQzAgIC8qIEJhbmsgMiBIb2xkIFRpbWUJZnJvbSBSZWFkIG9yIFdyaXRlIGRlYXNzZXJ0ZWQgdG8gQU9FIGRlYXNzZXJ0ZWQJPSAzIGN5Y2xlcyAqLworI2RlZmluZQlCMkhUXzAJCQkweDAwMDAwMDAwICAvKiBCYW5rIDIgSG9sZCBUaW1lCWZyb20gUmVhZCBvciBXcml0ZSBkZWFzc2VydGVkIHRvIEFPRSBkZWFzc2VydGVkCT0gMCBjeWNsZXMgKi8KKyNkZWZpbmUJQjJSQVRfMQkJCTB4MDAwMDAxMDAgIC8qIEJhbmsgMiBSZWFkIEFjY2VzcyBUaW1lID0gMSBjeWNsZSAqLworI2RlZmluZQlCMlJBVF8yCQkJMHgwMDAwMDIwMCAgLyogQmFuayAyIFJlYWQgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcyAqLworI2RlZmluZQlCMlJBVF8zCQkJMHgwMDAwMDMwMCAgLyogQmFuayAyIFJlYWQgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcyAqLworI2RlZmluZQlCMlJBVF80CQkJMHgwMDAwMDQwMCAgLyogQmFuayAyIFJlYWQgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcyAqLworI2RlZmluZQlCMlJBVF81CQkJMHgwMDAwMDUwMCAgLyogQmFuayAyIFJlYWQgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcyAqLworI2RlZmluZQlCMlJBVF82CQkJMHgwMDAwMDYwMCAgLyogQmFuayAyIFJlYWQgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcyAqLworI2RlZmluZQlCMlJBVF83CQkJMHgwMDAwMDcwMCAgLyogQmFuayAyIFJlYWQgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcyAqLworI2RlZmluZQlCMlJBVF84CQkJMHgwMDAwMDgwMCAgLyogQmFuayAyIFJlYWQgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcyAqLworI2RlZmluZQlCMlJBVF85CQkJMHgwMDAwMDkwMCAgLyogQmFuayAyIFJlYWQgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcyAqLworI2RlZmluZQlCMlJBVF8xMAkJMHgwMDAwMEEwMCAgLyogQmFuayAyIFJlYWQgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMgKi8KKyNkZWZpbmUJQjJSQVRfMTEJCTB4MDAwMDBCMDAgIC8qIEJhbmsgMiBSZWFkIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzICovCisjZGVmaW5lCUIyUkFUXzEyCQkweDAwMDAwQzAwICAvKiBCYW5rIDIgUmVhZCBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcyAqLworI2RlZmluZQlCMlJBVF8xMwkJMHgwMDAwMEQwMCAgLyogQmFuayAyIFJlYWQgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMgKi8KKyNkZWZpbmUJQjJSQVRfMTQJCTB4MDAwMDBFMDAgIC8qIEJhbmsgMiBSZWFkIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzICovCisjZGVmaW5lCUIyUkFUXzE1CQkweDAwMDAwRjAwICAvKiBCYW5rIDIgUmVhZCBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcyAqLworI2RlZmluZQlCMldBVF8xCQkJMHgwMDAwMTAwMCAgLyogQmFuayAyIFdyaXRlIEFjY2VzcyBUaW1lCT0gMSBjeWNsZSAqLworI2RlZmluZQlCMldBVF8yCQkJMHgwMDAwMjAwMCAgLyogQmFuayAyIFdyaXRlIEFjY2VzcyBUaW1lCT0gMiBjeWNsZXMgKi8KKyNkZWZpbmUJQjJXQVRfMwkJCTB4MDAwMDMwMDAgIC8qIEJhbmsgMiBXcml0ZSBBY2Nlc3MgVGltZQk9IDMgY3ljbGVzICovCisjZGVmaW5lCUIyV0FUXzQJCQkweDAwMDA0MDAwICAvKiBCYW5rIDIgV3JpdGUgQWNjZXNzIFRpbWUJPSA0IGN5Y2xlcyAqLworI2RlZmluZQlCMldBVF81CQkJMHgwMDAwNTAwMCAgLyogQmFuayAyIFdyaXRlIEFjY2VzcyBUaW1lCT0gNSBjeWNsZXMgKi8KKyNkZWZpbmUJQjJXQVRfNgkJCTB4MDAwMDYwMDAgIC8qIEJhbmsgMiBXcml0ZSBBY2Nlc3MgVGltZQk9IDYgY3ljbGVzICovCisjZGVmaW5lCUIyV0FUXzcJCQkweDAwMDA3MDAwICAvKiBCYW5rIDIgV3JpdGUgQWNjZXNzIFRpbWUJPSA3IGN5Y2xlcyAqLworI2RlZmluZQlCMldBVF84CQkJMHgwMDAwODAwMCAgLyogQmFuayAyIFdyaXRlIEFjY2VzcyBUaW1lCT0gOCBjeWNsZXMgKi8KKyNkZWZpbmUJQjJXQVRfOQkJCTB4MDAwMDkwMDAgIC8qIEJhbmsgMiBXcml0ZSBBY2Nlc3MgVGltZQk9IDkgY3ljbGVzICovCisjZGVmaW5lCUIyV0FUXzEwCQkweDAwMDBBMDAwICAvKiBCYW5rIDIgV3JpdGUgQWNjZXNzIFRpbWUJPSAxMCBjeWNsZXMgKi8KKyNkZWZpbmUJQjJXQVRfMTEJCTB4MDAwMEIwMDAgIC8qIEJhbmsgMiBXcml0ZSBBY2Nlc3MgVGltZQk9IDExIGN5Y2xlcyAqLworI2RlZmluZQlCMldBVF8xMgkJMHgwMDAwQzAwMCAgLyogQmFuayAyIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTIgY3ljbGVzICovCisjZGVmaW5lCUIyV0FUXzEzCQkweDAwMDBEMDAwICAvKiBCYW5rIDIgV3JpdGUgQWNjZXNzIFRpbWUJPSAxMyBjeWNsZXMgKi8KKyNkZWZpbmUJQjJXQVRfMTQJCTB4MDAwMEUwMDAgIC8qIEJhbmsgMiBXcml0ZSBBY2Nlc3MgVGltZQk9IDE0IGN5Y2xlcyAqLworI2RlZmluZQlCMldBVF8xNQkJMHgwMDAwRjAwMCAgLyogQmFuayAyIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTUgY3ljbGVzICovCisjZGVmaW5lCUIzUkRZRU4JCQkweDAwMDEwMDAwICAvKiBCYW5rIDMgUkRZIGVuYWJsZSwgMD1kaXNhYmxlLCAxPWVuYWJsZSAqLworI2RlZmluZQlCM1JEWVBPTAkJMHgwMDAyMDAwMCAgLyogQmFuayAzIFJEWSBBY3RpdmUgaGlnaCwgMD1hY3RpdmUJbG93LCAxPWFjdGl2ZSBoaWdoICovCisjZGVmaW5lCUIzVFRfMQkJCTB4MDAwNDAwMDAgIC8qIEJhbmsgMyBUcmFuc2l0aW9uIFRpbWUgZnJvbSBSZWFkCXRvIFdyaXRlID0gMSBjeWNsZSAqLworI2RlZmluZQlCM1RUXzIJCQkweDAwMDgwMDAwICAvKiBCYW5rIDMgVHJhbnNpdGlvbiBUaW1lIGZyb20gUmVhZAl0byBXcml0ZSA9IDIgY3ljbGVzICovCisjZGVmaW5lCUIzVFRfMwkJCTB4MDAwQzAwMDAgIC8qIEJhbmsgMyBUcmFuc2l0aW9uIFRpbWUgZnJvbSBSZWFkCXRvIFdyaXRlID0gMyBjeWNsZXMgKi8KKyNkZWZpbmUJQjNUVF80CQkJMHgwMDAwMDAwMCAgLyogQmFuayAzIFRyYW5zaXRpb24gVGltZSBmcm9tIFJlYWQJdG8gV3JpdGUgPSA0IGN5Y2xlcyAqLworI2RlZmluZQlCM1NUXzEJCQkweDAwMTAwMDAwICAvKiBCYW5rIDMgU2V0dXAgVGltZSBmcm9tIEFPRSBhc3NlcnRlZCB0byBSZWFkIG9yIFdyaXRlIGFzc2VydGVkID0gMSBjeWNsZSAqLworI2RlZmluZQlCM1NUXzIJCQkweDAwMjAwMDAwICAvKiBCYW5rIDMgU2V0dXAgVGltZSBmcm9tIEFPRSBhc3NlcnRlZCB0byBSZWFkIG9yIFdyaXRlIGFzc2VydGVkID0gMiBjeWNsZXMgKi8KKyNkZWZpbmUJQjNTVF8zCQkJMHgwMDMwMDAwMCAgLyogQmFuayAzIFNldHVwIFRpbWUgZnJvbSBBT0UgYXNzZXJ0ZWQgdG8gUmVhZCBvciBXcml0ZSBhc3NlcnRlZCA9IDMgY3ljbGVzICovCisjZGVmaW5lCUIzU1RfNAkJCTB4MDAwMDAwMDAgIC8qIEJhbmsgMyBTZXR1cCBUaW1lIGZyb20gQU9FIGFzc2VydGVkIHRvIFJlYWQgb3IgV3JpdGUgYXNzZXJ0ZWQgPSA0IGN5Y2xlcyAqLworI2RlZmluZQlCM0hUXzEJCQkweDAwNDAwMDAwICAvKiBCYW5rIDMgSG9sZCBUaW1lCWZyb20gUmVhZCBvciBXcml0ZSBkZWFzc2VydGVkIHRvIEFPRSBkZWFzc2VydGVkCT0gMSBjeWNsZSAqLworI2RlZmluZQlCM0hUXzIJCQkweDAwODAwMDAwICAvKiBCYW5rIDMgSG9sZCBUaW1lCWZyb20gUmVhZCBvciBXcml0ZSBkZWFzc2VydGVkIHRvIEFPRSBkZWFzc2VydGVkCT0gMiBjeWNsZXMgKi8KKyNkZWZpbmUJQjNIVF8zCQkJMHgwMEMwMDAwMCAgLyogQmFuayAzIEhvbGQgVGltZQlmcm9tIFJlYWQgb3IgV3JpdGUgZGVhc3NlcnRlZCB0byBBT0UgZGVhc3NlcnRlZAk9IDMgY3ljbGVzICovCisjZGVmaW5lCUIzSFRfMAkJCTB4MDAwMDAwMDAgIC8qIEJhbmsgMyBIb2xkIFRpbWUJZnJvbSBSZWFkIG9yIFdyaXRlIGRlYXNzZXJ0ZWQgdG8gQU9FIGRlYXNzZXJ0ZWQJPSAwIGN5Y2xlcyAqLworI2RlZmluZQlCM1JBVF8xCQkJMHgwMTAwMDAwMCAvKiBCYW5rIDMgUmVhZCBBY2Nlc3MgVGltZSA9CTEgY3ljbGUgKi8KKyNkZWZpbmUJQjNSQVRfMgkJCTB4MDIwMDAwMDAgIC8qIEJhbmsgMyBSZWFkIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMgKi8KKyNkZWZpbmUJQjNSQVRfMwkJCTB4MDMwMDAwMDAgIC8qIEJhbmsgMyBSZWFkIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMgKi8KKyNkZWZpbmUJQjNSQVRfNAkJCTB4MDQwMDAwMDAgIC8qIEJhbmsgMyBSZWFkIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMgKi8KKyNkZWZpbmUJQjNSQVRfNQkJCTB4MDUwMDAwMDAgIC8qIEJhbmsgMyBSZWFkIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMgKi8KKyNkZWZpbmUJQjNSQVRfNgkJCTB4MDYwMDAwMDAgIC8qIEJhbmsgMyBSZWFkIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMgKi8KKyNkZWZpbmUJQjNSQVRfNwkJCTB4MDcwMDAwMDAgIC8qIEJhbmsgMyBSZWFkIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMgKi8KKyNkZWZpbmUJQjNSQVRfOAkJCTB4MDgwMDAwMDAgIC8qIEJhbmsgMyBSZWFkIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMgKi8KKyNkZWZpbmUJQjNSQVRfOQkJCTB4MDkwMDAwMDAgIC8qIEJhbmsgMyBSZWFkIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMgKi8KKyNkZWZpbmUJQjNSQVRfMTAJCTB4MEEwMDAwMDAgIC8qIEJhbmsgMyBSZWFkIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzICovCisjZGVmaW5lCUIzUkFUXzExCQkweDBCMDAwMDAwICAvKiBCYW5rIDMgUmVhZCBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcyAqLworI2RlZmluZQlCM1JBVF8xMgkJMHgwQzAwMDAwMCAgLyogQmFuayAzIFJlYWQgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMgKi8KKyNkZWZpbmUJQjNSQVRfMTMJCTB4MEQwMDAwMDAgIC8qIEJhbmsgMyBSZWFkIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzICovCisjZGVmaW5lCUIzUkFUXzE0CQkweDBFMDAwMDAwICAvKiBCYW5rIDMgUmVhZCBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcyAqLworI2RlZmluZQlCM1JBVF8xNQkJMHgwRjAwMDAwMCAgLyogQmFuayAzIFJlYWQgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMgKi8KKyNkZWZpbmUJQjNXQVRfMQkJCTB4MTAwMDAwMDAgLyogQmFuayAzIFdyaXRlIEFjY2VzcyBUaW1lID0gMSBjeWNsZSAqLworI2RlZmluZQlCM1dBVF8yCQkJMHgyMDAwMDAwMCAgLyogQmFuayAzIFdyaXRlIEFjY2VzcyBUaW1lCT0gMiBjeWNsZXMgKi8KKyNkZWZpbmUJQjNXQVRfMwkJCTB4MzAwMDAwMDAgIC8qIEJhbmsgMyBXcml0ZSBBY2Nlc3MgVGltZQk9IDMgY3ljbGVzICovCisjZGVmaW5lCUIzV0FUXzQJCQkweDQwMDAwMDAwICAvKiBCYW5rIDMgV3JpdGUgQWNjZXNzIFRpbWUJPSA0IGN5Y2xlcyAqLworI2RlZmluZQlCM1dBVF81CQkJMHg1MDAwMDAwMCAgLyogQmFuayAzIFdyaXRlIEFjY2VzcyBUaW1lCT0gNSBjeWNsZXMgKi8KKyNkZWZpbmUJQjNXQVRfNgkJCTB4NjAwMDAwMDAgIC8qIEJhbmsgMyBXcml0ZSBBY2Nlc3MgVGltZQk9IDYgY3ljbGVzICovCisjZGVmaW5lCUIzV0FUXzcJCQkweDcwMDAwMDAwICAvKiBCYW5rIDMgV3JpdGUgQWNjZXNzIFRpbWUJPSA3IGN5Y2xlcyAqLworI2RlZmluZQlCM1dBVF84CQkJMHg4MDAwMDAwMCAgLyogQmFuayAzIFdyaXRlIEFjY2VzcyBUaW1lCT0gOCBjeWNsZXMgKi8KKyNkZWZpbmUJQjNXQVRfOQkJCTB4OTAwMDAwMDAgIC8qIEJhbmsgMyBXcml0ZSBBY2Nlc3MgVGltZQk9IDkgY3ljbGVzICovCisjZGVmaW5lCUIzV0FUXzEwCQkweEEwMDAwMDAwICAvKiBCYW5rIDMgV3JpdGUgQWNjZXNzIFRpbWUJPSAxMCBjeWNsZXMgKi8KKyNkZWZpbmUJQjNXQVRfMTEJCTB4QjAwMDAwMDAgIC8qIEJhbmsgMyBXcml0ZSBBY2Nlc3MgVGltZQk9IDExIGN5Y2xlcyAqLworI2RlZmluZQlCM1dBVF8xMgkJMHhDMDAwMDAwMCAgLyogQmFuayAzIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTIgY3ljbGVzICovCisjZGVmaW5lCUIzV0FUXzEzCQkweEQwMDAwMDAwICAvKiBCYW5rIDMgV3JpdGUgQWNjZXNzIFRpbWUJPSAxMyBjeWNsZXMgKi8KKyNkZWZpbmUJQjNXQVRfMTQJCTB4RTAwMDAwMDAgIC8qIEJhbmsgMyBXcml0ZSBBY2Nlc3MgVGltZQk9IDE0IGN5Y2xlcyAqLworI2RlZmluZQlCM1dBVF8xNQkJMHhGMDAwMDAwMCAgLyogQmFuayAzIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTUgY3ljbGVzICovCisKKy8qICoqKioqKioqKioqKioqKioqKioqKiogIFNEUkFNIENPTlRST0xMRVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogRUJJVV9TREdDVEwgTWFza3MgKi8KKyNkZWZpbmUJU0NUTEUJCQkweDAwMDAwMDAxIC8qIEVuYWJsZSBTQ0xLWzBdLCAvU1JBUywgL1NDQVMsIC9TV0UsIFNEUU1bMzowXSAqLworI2RlZmluZQlDTF8yCQkJMHgwMDAwMDAwOCAvKiBTRFJBTSBDQVMJbGF0ZW5jeQk9IDIgY3ljbGVzICovCisjZGVmaW5lCUNMXzMJCQkweDAwMDAwMDBDIC8qIFNEUkFNIENBUwlsYXRlbmN5CT0gMyBjeWNsZXMgKi8KKyNkZWZpbmUJUEZFCQkJCTB4MDAwMDAwMTAgLyogRW5hYmxlIFNEUkFNIHByZWZldGNoICovCisjZGVmaW5lCVBGUAkJCQkweDAwMDAwMDIwIC8qIFByZWZldGNoIGhhcyBwcmlvcml0eSBvdmVyIEFNQyByZXF1ZXN0cyAqLworI2RlZmluZQlQQVNSX0FMTAkJMHgwMDAwMDAwMAkvKiBBbGwgNCBTRFJBTSBCYW5rcyBSZWZyZXNoZWQgSW4gU2VsZi1SZWZyZXNoICovCisjZGVmaW5lCVBBU1JfQjBfQjEJCTB4MDAwMDAwMTAJLyogU0RSQU0gQmFua3MgMCBhbmQgMSBBcmUgUmVmcmVzaGVkIEluCVNlbGYtUmVmcmVzaCAqLworI2RlZmluZQlQQVNSX0IwCQkJMHgwMDAwMDAyMAkvKiBPbmx5CVNEUkFNIEJhbmsgMCBJcwlSZWZyZXNoZWQgSW4gU2VsZi1SZWZyZXNoICovCisjZGVmaW5lCVRSQVNfMQkJCTB4MDAwMDAwNDAgLyogU0RSQU0gdFJBUyA9IDEgY3ljbGUgKi8KKyNkZWZpbmUJVFJBU18yCQkJMHgwMDAwMDA4MCAvKiBTRFJBTSB0UkFTID0gMiBjeWNsZXMgKi8KKyNkZWZpbmUJVFJBU18zCQkJMHgwMDAwMDBDMCAvKiBTRFJBTSB0UkFTID0gMyBjeWNsZXMgKi8KKyNkZWZpbmUJVFJBU180CQkJMHgwMDAwMDEwMCAvKiBTRFJBTSB0UkFTID0gNCBjeWNsZXMgKi8KKyNkZWZpbmUJVFJBU181CQkJMHgwMDAwMDE0MCAvKiBTRFJBTSB0UkFTID0gNSBjeWNsZXMgKi8KKyNkZWZpbmUJVFJBU182CQkJMHgwMDAwMDE4MCAvKiBTRFJBTSB0UkFTID0gNiBjeWNsZXMgKi8KKyNkZWZpbmUJVFJBU183CQkJMHgwMDAwMDFDMCAvKiBTRFJBTSB0UkFTID0gNyBjeWNsZXMgKi8KKyNkZWZpbmUJVFJBU184CQkJMHgwMDAwMDIwMCAvKiBTRFJBTSB0UkFTID0gOCBjeWNsZXMgKi8KKyNkZWZpbmUJVFJBU185CQkJMHgwMDAwMDI0MCAvKiBTRFJBTSB0UkFTID0gOSBjeWNsZXMgKi8KKyNkZWZpbmUJVFJBU18xMAkJCTB4MDAwMDAyODAgLyogU0RSQU0gdFJBUyA9IDEwIGN5Y2xlcyAqLworI2RlZmluZQlUUkFTXzExCQkJMHgwMDAwMDJDMCAvKiBTRFJBTSB0UkFTID0gMTEgY3ljbGVzICovCisjZGVmaW5lCVRSQVNfMTIJCQkweDAwMDAwMzAwIC8qIFNEUkFNIHRSQVMgPSAxMiBjeWNsZXMgKi8KKyNkZWZpbmUJVFJBU18xMwkJCTB4MDAwMDAzNDAgLyogU0RSQU0gdFJBUyA9IDEzIGN5Y2xlcyAqLworI2RlZmluZQlUUkFTXzE0CQkJMHgwMDAwMDM4MCAvKiBTRFJBTSB0UkFTID0gMTQgY3ljbGVzICovCisjZGVmaW5lCVRSQVNfMTUJCQkweDAwMDAwM0MwIC8qIFNEUkFNIHRSQVMgPSAxNSBjeWNsZXMgKi8KKyNkZWZpbmUJVFJQXzEJCQkweDAwMDAwODAwIC8qIFNEUkFNIHRSUAk9IDEgY3ljbGUgKi8KKyNkZWZpbmUJVFJQXzIJCQkweDAwMDAxMDAwIC8qIFNEUkFNIHRSUAk9IDIgY3ljbGVzICovCisjZGVmaW5lCVRSUF8zCQkJMHgwMDAwMTgwMCAvKiBTRFJBTSB0UlAJPSAzIGN5Y2xlcyAqLworI2RlZmluZQlUUlBfNAkJCTB4MDAwMDIwMDAgLyogU0RSQU0gdFJQCT0gNCBjeWNsZXMgKi8KKyNkZWZpbmUJVFJQXzUJCQkweDAwMDAyODAwIC8qIFNEUkFNIHRSUAk9IDUgY3ljbGVzICovCisjZGVmaW5lCVRSUF82CQkJMHgwMDAwMzAwMCAvKiBTRFJBTSB0UlAJPSA2IGN5Y2xlcyAqLworI2RlZmluZQlUUlBfNwkJCTB4MDAwMDM4MDAgLyogU0RSQU0gdFJQCT0gNyBjeWNsZXMgKi8KKyNkZWZpbmUJVFJDRF8xCQkJMHgwMDAwODAwMCAvKiBTRFJBTSB0UkNEID0gMSBjeWNsZSAqLworI2RlZmluZQlUUkNEXzIJCQkweDAwMDEwMDAwIC8qIFNEUkFNIHRSQ0QgPSAyIGN5Y2xlcyAqLworI2RlZmluZQlUUkNEXzMJCQkweDAwMDE4MDAwIC8qIFNEUkFNIHRSQ0QgPSAzIGN5Y2xlcyAqLworI2RlZmluZQlUUkNEXzQJCQkweDAwMDIwMDAwIC8qIFNEUkFNIHRSQ0QgPSA0IGN5Y2xlcyAqLworI2RlZmluZQlUUkNEXzUJCQkweDAwMDI4MDAwIC8qIFNEUkFNIHRSQ0QgPSA1IGN5Y2xlcyAqLworI2RlZmluZQlUUkNEXzYJCQkweDAwMDMwMDAwIC8qIFNEUkFNIHRSQ0QgPSA2IGN5Y2xlcyAqLworI2RlZmluZQlUUkNEXzcJCQkweDAwMDM4MDAwIC8qIFNEUkFNIHRSQ0QgPSA3IGN5Y2xlcyAqLworI2RlZmluZQlUV1JfMQkJCTB4MDAwODAwMDAgLyogU0RSQU0gdFdSCT0gMSBjeWNsZSAqLworI2RlZmluZQlUV1JfMgkJCTB4MDAxMDAwMDAgLyogU0RSQU0gdFdSCT0gMiBjeWNsZXMgKi8KKyNkZWZpbmUJVFdSXzMJCQkweDAwMTgwMDAwIC8qIFNEUkFNIHRXUgk9IDMgY3ljbGVzICovCisjZGVmaW5lCVBVUFNECQkJMHgwMDIwMDAwMCAvKlBvd2VyLXVwIHN0YXJ0IGRlbGF5ICovCisjZGVmaW5lCVBTTQkJCQkweDAwNDAwMDAwIC8qIFNEUkFNIHBvd2VyLXVwIHNlcXVlbmNlID0JUHJlY2hhcmdlLCBtb2RlCXJlZ2lzdGVyIHNldCwgOAlDQlIgcmVmcmVzaCBjeWNsZXMgKi8KKyNkZWZpbmUJUFNTCQkJCTB4MDA4MDAwMDAgLyogZW5hYmxlIFNEUkFNIHBvd2VyLXVwIHNlcXVlbmNlIG9uCW5leHQgU0RSQU0gYWNjZXNzICovCisjZGVmaW5lCVNSRlMJCQkweDAxMDAwMDAwIC8qIFN0YXJ0IFNEUkFNIHNlbGYtcmVmcmVzaCBtb2RlICovCisjZGVmaW5lCUVCVUZFCQkJMHgwMjAwMDAwMCAvKiBFbmFibGUgZXh0ZXJuYWwgYnVmZmVyaW5nCXRpbWluZyAqLworI2RlZmluZQlGQkJSVwkJCTB4MDQwMDAwMDAgLyogRmFzdCBiYWNrLXRvLWJhY2sJcmVhZCB3cml0ZSBlbmFibGUgKi8KKyNkZWZpbmUJRU1SRU4JCQkweDEwMDAwMDAwIC8qIEV4dGVuZGVkIG1vZGUgcmVnaXN0ZXIgZW5hYmxlICovCisjZGVmaW5lCVRDU1IJCQkweDIwMDAwMDAwIC8qIFRlbXAgY29tcGVuc2F0ZWQgc2VsZiByZWZyZXNoIHZhbHVlIDg1IGRlZyBDICovCisjZGVmaW5lCUNEREJHCQkJMHg0MDAwMDAwMCAvKiBUcmlzdGF0ZSBTRFJBTSBjb250cm9scyBkdXJpbmcgYnVzIGdyYW50ICovCisKKy8qIEVCSVVfU0RCQ1RMIE1hc2tzICovCisjZGVmaW5lCUVCRQkJCQkweDAwMDAwMDAxIC8qIEVuYWJsZSBTRFJBTSBleHRlcm5hbCBiYW5rICovCisjZGVmaW5lCUVCU1pfMTYJCQkweDAwMDAwMDAwIC8qIFNEUkFNIGV4dGVybmFsIGJhbmsgc2l6ZSA9IDE2TUIgKi8KKyNkZWZpbmUJRUJTWl8zMgkJCTB4MDAwMDAwMDIgLyogU0RSQU0gZXh0ZXJuYWwgYmFuayBzaXplID0gMzJNQiAqLworI2RlZmluZQlFQlNaXzY0CQkJMHgwMDAwMDAwNCAvKiBTRFJBTSBleHRlcm5hbCBiYW5rIHNpemUgPSA2NE1CICovCisjZGVmaW5lCUVCU1pfMTI4CQkweDAwMDAwMDA2IC8qIFNEUkFNIGV4dGVybmFsIGJhbmsgc2l6ZSA9IDEyOE1CICovCisjZGVmaW5lCUVCU1pfMjU2CQkweDAwMDAwMDA4IC8qIFNEUkFNIEV4dGVybmFsIEJhbmsgU2l6ZSA9IDI1Nk1CICovCisjZGVmaW5lCUVCU1pfNTEyCQkweDAwMDAwMDBBIC8qIFNEUkFNIEV4dGVybmFsIEJhbmsgU2l6ZSA9IDUxMk1CICovCisjZGVmaW5lCUVCQ0FXXzgJCQkweDAwMDAwMDAwIC8qIFNEUkFNIGV4dGVybmFsIGJhbmsgY29sdW1uIGFkZHJlc3Mgd2lkdGggPSA4IGJpdHMgKi8KKyNkZWZpbmUJRUJDQVdfOQkJCTB4MDAwMDAwMTAgLyogU0RSQU0gZXh0ZXJuYWwgYmFuayBjb2x1bW4gYWRkcmVzcyB3aWR0aCA9IDkgYml0cyAqLworI2RlZmluZQlFQkNBV18xMAkJMHgwMDAwMDAyMCAvKiBTRFJBTSBleHRlcm5hbCBiYW5rIGNvbHVtbiBhZGRyZXNzIHdpZHRoID0gOSBiaXRzICovCisjZGVmaW5lCUVCQ0FXXzExCQkweDAwMDAwMDMwIC8qIFNEUkFNIGV4dGVybmFsIGJhbmsgY29sdW1uIGFkZHJlc3Mgd2lkdGggPSA5IGJpdHMgKi8KKworLyogRUJJVV9TRFNUQVQgTWFza3MgKi8KKyNkZWZpbmUJU0RDSQkJCTB4MDAwMDAwMDEgLyogU0RSQU0gY29udHJvbGxlciBpcyBpZGxlICovCisjZGVmaW5lCVNEU1JBCQkJMHgwMDAwMDAwMiAvKiBTRFJBTSBTRFJBTSBzZWxmIHJlZnJlc2ggaXMgYWN0aXZlICovCisjZGVmaW5lCVNEUFVBCQkJMHgwMDAwMDAwNCAvKiBTRFJBTSBwb3dlciB1cCBhY3RpdmUgICovCisjZGVmaW5lCVNEUlMJCQkweDAwMDAwMDA4IC8qIFNEUkFNIGlzIGluIHJlc2V0CXN0YXRlICovCisjZGVmaW5lCVNERUFTRQkJCTB4MDAwMDAwMTAgLyogU0RSQU0gRUFCCXN0aWNreSBlcnJvciBzdGF0dXMgLSBXMUMgKi8KKyNkZWZpbmUJQkdTVEFUCQkJMHgwMDAwMDAyMCAvKiBCdXMgZ3JhbnRlZCAqLworCisKKy8qICAqKioqKioqKioqKioqKioqKioqKiAgVFdPLVdJUkUgSU5URVJGQUNFIChUV0l4KSBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUV0l4X0NMS0RJViBNYWNyb3MgKFVzZTogKnBUV0l4X0NMS0RJViA9IENMS0xPVyh4KXxDTEtISSh5KTsJICkgKi8KKyNpZmRlZiBfTUlTUkFfUlVMRVMKKyNkZWZpbmUJQ0xLTE9XKHgpCSgoeCkgJiAweEZGdSkJCS8qIFBlcmlvZHMgQ2xvY2sgSXMgSGVsZCBMb3cgKi8KKyNkZWZpbmUJQ0xLSEkoeSkJKCgoeSkmMHhGRnUpPDwweDgpCS8qIFBlcmlvZHMgQmVmb3JlIE5ldyBDbG9jayBMb3cgKi8KKyNlbHNlCisjZGVmaW5lCUNMS0xPVyh4KQkoKHgpICYgMHhGRikJCS8qIFBlcmlvZHMgQ2xvY2sgSXMgSGVsZCBMb3cgKi8KKyNkZWZpbmUJQ0xLSEkoeSkJKCgoeSkmMHhGRik8PDB4OCkJLyogUGVyaW9kcyBCZWZvcmUgTmV3IENsb2NrIExvdyAqLworI2VuZGlmIC8qIF9NSVNSQV9SVUxFUyAqLworCisvKiBUV0l4X1BSRVNDQUxFIE1hc2tzCQkJCQkJCQkgKi8KKyNkZWZpbmUJUFJFU0NBTEUJMHgwMDdGCQkvKiBTQ0xLcyBQZXIgSW50ZXJuYWwgVGltZSBSZWZlcmVuY2UgKDEwTUh6KSAqLworI2RlZmluZQlUV0lfRU5BCQkweDAwODAJCS8qIFRXSSBFbmFibGUJCSAqLworI2RlZmluZQlTQ0NCCQkweDAyMDAJCS8qIFNDQ0IJQ29tcGF0aWJpbGl0eSBFbmFibGUgKi8KKworLyogVFdJeF9TTEFWRV9DVFJMIE1hc2tzCQkJCQkJCQkgKi8KKyNkZWZpbmUJU0VOCQkJMHgwMDAxCQkvKiBTbGF2ZSBFbmFibGUJCSAqLworI2RlZmluZQlTQUREX0xFTgkweDAwMDIJCS8qIFNsYXZlIEFkZHJlc3MgTGVuZ3RoICovCisjZGVmaW5lCVNURFZBTAkJMHgwMDA0CQkvKiBTbGF2ZSBUcmFuc21pdCBEYXRhIFZhbGlkICovCisjZGVmaW5lCU5BSwkJCTB4MDAwOAkJLyogTkFLL0FDSyogR2VuZXJhdGVkIEF0IENvbmNsdXNpb24gT2YgVHJhbnNmZXIgKi8KKyNkZWZpbmUJR0VOCQkJMHgwMDEwCQkvKiBHZW5lcmFsIENhbGwJQWRycmVzcwlNYXRjaGluZyBFbmFibGVkICovCisKKy8qIFRXSXhfU0xBVkVfU1RBVCBNYXNrcwkJCQkJCQkJICovCisjZGVmaW5lCVNESVIJCTB4MDAwMQkJLyogU2xhdmUgVHJhbnNmZXIgRGlyZWN0aW9uIChUcmFuc21pdC9SZWNlaXZlKikgKi8KKyNkZWZpbmUJR0NBTEwJCTB4MDAwMgkJLyogR2VuZXJhbCBDYWxsCUluZGljYXRvciAqLworCisvKiBUV0l4X01BU1RFUl9DVFJMIE1hc2tzCQkJCQkJICovCisjZGVmaW5lCU1FTgkJCTB4MDAwMQkJLyogTWFzdGVyIE1vZGUgRW5hYmxlICovCisjZGVmaW5lCU1BRERfTEVOCTB4MDAwMgkJLyogTWFzdGVyIEFkZHJlc3MgTGVuZ3RoICovCisjZGVmaW5lCU1ESVIJCTB4MDAwNAkJLyogTWFzdGVyIFRyYW5zbWl0IERpcmVjdGlvbiAoUlgvVFgqKSAqLworI2RlZmluZQlGQVNUCQkweDAwMDgJCS8qIFVzZSBGYXN0IE1vZGUgVGltaW5nCVNwZWNzICovCisjZGVmaW5lCVNUT1AJCTB4MDAxMAkJLyogSXNzdWUgU3RvcCBDb25kaXRpb24gKi8KKyNkZWZpbmUJUlNUQVJUCQkweDAwMjAJCS8qIFJlcGVhdCBTdGFydAlvciBTdG9wKiBBdCBFbmQJT2YgVHJhbnNmZXIgKi8KKyNkZWZpbmUJRENOVAkJMHgzRkMwCQkvKiBEYXRhCUJ5dGVzIFRvIFRyYW5zZmVyICovCisjZGVmaW5lCVNEQU9WUgkJMHg0MDAwCQkvKiBTZXJpYWwgRGF0YSBPdmVycmlkZSAqLworI2RlZmluZQlTQ0xPVlIJCTB4ODAwMAkJLyogU2VyaWFsIENsb2NrCU92ZXJyaWRlICovCisKKy8qIFRXSXhfTUFTVEVSX1NUQVQgTWFza3MJCQkJCQkJICovCisjZGVmaW5lCU1QUk9HCQkweDAwMDEJCS8qIE1hc3RlciBUcmFuc2ZlciBJbiBQcm9ncmVzcyAqLworI2RlZmluZQlMT1NUQVJCCQkweDAwMDIJCS8qIExvc3QJQXJiaXRyYXRpb24gSW5kaWNhdG9yIChYZmVyIEFib3J0ZWQpICovCisjZGVmaW5lCUFOQUsJCTB4MDAwNAkJLyogQWRkcmVzcyBOb3QgQWNrbm93bGVkZ2VkICovCisjZGVmaW5lCUROQUsJCTB4MDAwOAkJLyogRGF0YQlOb3QgQWNrbm93bGVkZ2VkICovCisjZGVmaW5lCUJVRlJERVJSCTB4MDAxMAkJLyogQnVmZmVyIFJlYWQgRXJyb3IgKi8KKyNkZWZpbmUJQlVGV1JFUlIJMHgwMDIwCQkvKiBCdWZmZXIgV3JpdGUJRXJyb3IgKi8KKyNkZWZpbmUJU0RBU0VOCQkweDAwNDAJCS8qIFNlcmlhbCBEYXRhIFNlbnNlICovCisjZGVmaW5lCVNDTFNFTgkJMHgwMDgwCQkvKiBTZXJpYWwgQ2xvY2sJU2Vuc2UgKi8KKyNkZWZpbmUJQlVTQlVTWQkJMHgwMTAwCQkvKiBCdXMgQnVzeSBJbmRpY2F0b3IgKi8KKworLyogVFdJeF9JTlRfU1JDCWFuZCBUV0l4X0lOVF9FTkFCTEUgTWFza3MgKi8KKyNkZWZpbmUJU0lOSVQJCTB4MDAwMQkJLyogU2xhdmUgVHJhbnNmZXIgSW5pdGlhdGVkICovCisjZGVmaW5lCVNDT01QCQkweDAwMDIJCS8qIFNsYXZlIFRyYW5zZmVyIENvbXBsZXRlICovCisjZGVmaW5lCVNFUlIJCTB4MDAwNAkJLyogU2xhdmUgVHJhbnNmZXIgRXJyb3IgKi8KKyNkZWZpbmUJU09WRgkJMHgwMDA4CQkvKiBTbGF2ZSBPdmVyZmxvdyAqLworI2RlZmluZQlNQ09NUAkJMHgwMDEwCQkvKiBNYXN0ZXIgVHJhbnNmZXIgQ29tcGxldGUgKi8KKyNkZWZpbmUJTUVSUgkJMHgwMDIwCQkvKiBNYXN0ZXIgVHJhbnNmZXIgRXJyb3IgKi8KKyNkZWZpbmUJWE1UU0VSVgkJMHgwMDQwCQkvKiBUcmFuc21pdCBGSUZPIFNlcnZpY2UgKi8KKyNkZWZpbmUJUkNWU0VSVgkJMHgwMDgwCQkvKiBSZWNlaXZlIEZJRk8JU2VydmljZSAqLworCisvKiBUV0l4X0ZJRk9fQ1RMIE1hc2tzCQkJCQkgKi8KKyNkZWZpbmUJWE1URkxVU0gJMHgwMDAxCQkvKiBUcmFuc21pdCBCdWZmZXIgRmx1c2ggKi8KKyNkZWZpbmUJUkNWRkxVU0gJMHgwMDAyCQkvKiBSZWNlaXZlIEJ1ZmZlciBGbHVzaCAqLworI2RlZmluZQlYTVRJTlRMRU4JMHgwMDA0CQkvKiBUcmFuc21pdCBCdWZmZXIgSW50ZXJydXB0IExlbmd0aCAqLworI2RlZmluZQlSQ1ZJTlRMRU4JMHgwMDA4CQkvKiBSZWNlaXZlIEJ1ZmZlciBJbnRlcnJ1cHQgTGVuZ3RoICovCisKKy8qIFRXSXhfRklGT19TVEFUIE1hc2tzCQkJCQkJCQkgKi8KKyNkZWZpbmUJWE1UU1RBVAkJMHgwMDAzCQkvKiBUcmFuc21pdCBGSUZPIFN0YXR1cyAqLworI2RlZmluZQlYTVRfRU1QVFkJMHgwMDAwCQkvKgkJVHJhbnNtaXQgRklGTyBFbXB0eSAqLworI2RlZmluZQlYTVRfSEFMRgkweDAwMDEJCS8qCQlUcmFuc21pdCBGSUZPIEhhcyAxIEJ5dGUgVG8gV3JpdGUgKi8KKyNkZWZpbmUJWE1UX0ZVTEwJMHgwMDAzCQkvKgkJVHJhbnNtaXQgRklGTyBGdWxsICgyIEJ5dGVzIFRvIFdyaXRlKSAqLworCisjZGVmaW5lCVJDVlNUQVQJCTB4MDAwQwkJLyogUmVjZWl2ZSBGSUZPCVN0YXR1cyAqLworI2RlZmluZQlSQ1ZfRU1QVFkJMHgwMDAwCQkvKgkJUmVjZWl2ZQlGSUZPIEVtcHR5ICovCisjZGVmaW5lCVJDVl9IQUxGCTB4MDAwNAkJLyoJCVJlY2VpdmUJRklGTyBIYXMgMSBCeXRlCVRvIFJlYWQgKi8KKyNkZWZpbmUJUkNWX0ZVTEwJMHgwMDBDCQkvKgkJUmVjZWl2ZQlGSUZPIEZ1bGwgKDIgQnl0ZXMgVG8gUmVhZCkgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmgKaW5kZXggN2E4YWM1Zi4uODEwMGJjZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9kZWZCRjUzOS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZGVmQkY1MzkuaApAQCAtMSw4NTkgKzEsMTMgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCi0vKiBTWVNURU0gJiBNTSBSRUdJU1RFUiBCSVQgJiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTM4LzkgKi8KLQogI2lmbmRlZiBfREVGX0JGNTM5X0gKICNkZWZpbmUgX0RFRl9CRjUzOV9ICiAKLS8qIGluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxhc20vZGVmX0xQQmxhY2tmaW4uaD4KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLS8qIFN5c3RlbSBNTVIgUmVnaXN0ZXIgTWFwICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLS8qIENsb2NrL1JlZ3VsYXRvciBDb250cm9sICgweEZGQzAwMDAwIC0gMHhGRkMwMDBGRikgKi8KLSNkZWZpbmUJUExMX0NUTAkJCTB4RkZDMDAwMDAJLyogUExMIENvbnRyb2wgcmVnaXN0ZXIgKDE2LWJpdCkgKi8KLSNkZWZpbmUJUExMX0RJVgkJCTB4RkZDMDAwMDQJLyogUExMIERpdmlkZSBSZWdpc3RlciAoMTYtYml0KSAqLwotI2RlZmluZQlWUl9DVEwJCQkweEZGQzAwMDA4CS8qIFZvbHRhZ2UgUmVndWxhdG9yIENvbnRyb2wgUmVnaXN0ZXIgKDE2LWJpdCkgKi8KLSNkZWZpbmUJUExMX1NUQVQJCTB4RkZDMDAwMEMJLyogUExMIFN0YXR1cyByZWdpc3RlciAoMTYtYml0KSAqLwotI2RlZmluZQlQTExfTE9DS0NOVAkJMHhGRkMwMDAxMAkvKiBQTEwgTG9jawlDb3VudCByZWdpc3RlciAoMTYtYml0KSAqLwotI2RlZmluZQlDSElQSUQJCQkweEZGQzAwMDE0CS8qIENoaXAJSUQgUmVnaXN0ZXIgKi8KLQotLyogQ0hJUElEIE1hc2tzICovCi0jZGVmaW5lIENISVBJRF9WRVJTSU9OICAgICAgICAgMHhGMDAwMDAwMAotI2RlZmluZSBDSElQSURfRkFNSUxZICAgICAgICAgIDB4MEZGRkYwMDAKLSNkZWZpbmUgQ0hJUElEX01BTlVGQUNUVVJFICAgICAweDAwMDAwRkZFCi0KLS8qIFN5c3RlbSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoMHhGRkMwMDEwMCAtIDB4RkZDMDAxRkYpICovCi0jZGVmaW5lCVNXUlNUCQkJMHhGRkMwMDEwMCAgLyogU29mdHdhcmUJUmVzZXQgUmVnaXN0ZXIgKDE2LWJpdCkgKi8KLSNkZWZpbmUJU1lTQ1IJCQkweEZGQzAwMTA0ICAvKiBTeXN0ZW0gQ29uZmlndXJhdGlvbiByZWdpc3RlICovCi0jZGVmaW5lCVNJQ19SVkVDVAkJMHhGRkMwMDEwOAotI2RlZmluZQlTSUNfSU1BU0swCQkweEZGQzAwMTBDICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZQlTSUNfSUFSMAkJMHhGRkMwMDExMCAgLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgMCAqLwotI2RlZmluZQlTSUNfSUFSMQkJMHhGRkMwMDExNCAgLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgMSAqLwotI2RlZmluZQlTSUNfSUFSMgkJMHhGRkMwMDExOCAgLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgMiAqLwotI2RlZmluZQlTSUNfSUFSMwkJCTB4RkZDMDAxMUMJLyogSW50ZXJydXB0IEFzc2lnbm1lbnQJUmVnaXN0ZXIgMyAqLwotI2RlZmluZQlTSUNfSVNSMAkJCTB4RkZDMDAxMjAgIC8qIEludGVycnVwdCBTdGF0dXMJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJU0lDX0lXUjAJCQkweEZGQzAwMTI0ICAvKiBJbnRlcnJ1cHQgV2FrZXVwCVJlZ2lzdGVyICovCi0jZGVmaW5lCVNJQ19JTUFTSzEJCQkweEZGQzAwMTI4CS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUJU0lDX0lTUjEJCQkweEZGQzAwMTJDCS8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgMSAqLwotI2RlZmluZQlTSUNfSVdSMQkJCTB4RkZDMDAxMzAJLyogSW50ZXJydXB0IFdha2V1cCBSZWdpc3RlciAxICovCi0jZGVmaW5lCVNJQ19JQVI0CQkJMHhGRkMwMDEzNAkvKiBJbnRlcnJ1cHQgQXNzaWdubWVudAlSZWdpc3RlciA0ICovCi0jZGVmaW5lCVNJQ19JQVI1CQkJMHhGRkMwMDEzOAkvKiBJbnRlcnJ1cHQgQXNzaWdubWVudAlSZWdpc3RlciA1ICovCi0jZGVmaW5lCVNJQ19JQVI2CQkJMHhGRkMwMDEzQwkvKiBJbnRlcnJ1cHQgQXNzaWdubWVudAlSZWdpc3RlciA2ICovCi0KLQotLyogV2F0Y2hkb2cgVGltZXIgKDB4RkZDMDAyMDAgLQkweEZGQzAwMkZGKSAqLwotI2RlZmluZQlXRE9HX0NUTAkweEZGQzAwMjAwICAvKiBXYXRjaGRvZwlDb250cm9sCVJlZ2lzdGVyICovCi0jZGVmaW5lCVdET0dfQ05UCTB4RkZDMDAyMDQgIC8qIFdhdGNoZG9nCUNvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCVdET0dfU1RBVAkweEZGQzAwMjA4ICAvKiBXYXRjaGRvZwlTdGF0dXMgUmVnaXN0ZXIgKi8KLQotCi0vKiBSZWFsCVRpbWUgQ2xvY2sgKDB4RkZDMDAzMDAgLSAweEZGQzAwM0ZGKSAqLwotI2RlZmluZQlSVENfU1RBVAkweEZGQzAwMzAwICAvKiBSVEMgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCVJUQ19JQ1RMCTB4RkZDMDAzMDQgIC8qIFJUQyBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZQlSVENfSVNUQVQJMHhGRkMwMDMwOCAgLyogUlRDIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJUlRDX1NXQ05UCTB4RkZDMDAzMEMgIC8qIFJUQyBTdG9wd2F0Y2ggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJUlRDX0FMQVJNCTB4RkZDMDAzMTAgIC8qIFJUQyBBbGFybSBUaW1lIFJlZ2lzdGVyICovCi0jZGVmaW5lCVJUQ19GQVNUCTB4RkZDMDAzMTQgIC8qIFJUQyBQcmVzY2FsZXIgRW5hYmxlIFJlZ2lzdGVyICovCi0jZGVmaW5lCVJUQ19QUkVOCQkweEZGQzAwMzE0ICAvKiBSVEMgUHJlc2NhbGVyIEVuYWJsZSBSZWdpc3RlciAoYWx0ZXJuYXRlCW1hY3JvKSAqLwotCi0KLS8qIFVBUlQwIENvbnRyb2xsZXIgKDB4RkZDMDA0MDAJLSAweEZGQzAwNEZGKSAqLwotI2RlZmluZQlVQVJUMF9USFIJICAgICAgMHhGRkMwMDQwMCAgLyogVHJhbnNtaXQgSG9sZGluZyByZWdpc3RlciAqLwotI2RlZmluZQlVQVJUMF9SQlIJICAgICAgMHhGRkMwMDQwMCAgLyogUmVjZWl2ZSBCdWZmZXIgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJVUFSVDBfRExMCSAgICAgIDB4RkZDMDA0MDAgIC8qIERpdmlzb3IgTGF0Y2ggKExvdy1CeXRlKSAqLwotI2RlZmluZQlVQVJUMF9JRVIJICAgICAgMHhGRkMwMDQwNCAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZQlVQVJUMF9ETEgJICAgICAgMHhGRkMwMDQwNCAgLyogRGl2aXNvciBMYXRjaCAoSGlnaC1CeXRlKSAqLwotI2RlZmluZQlVQVJUMF9JSVIJICAgICAgMHhGRkMwMDQwOCAgLyogSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lCVVBUlQwX0xDUgkgICAgICAweEZGQzAwNDBDICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVUFSVDBfTUNSCQkJIDB4RkZDMDA0MTAgIC8qCU1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVUFSVDBfTFNSCSAgICAgIDB4RkZDMDA0MTQgIC8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCVVBUlQwX1NDUgkgICAgICAweEZGQzAwNDFDICAvKiBTQ1IgU2NyYXRjaCBSZWdpc3RlciAqLwotI2RlZmluZQlVQVJUMF9HQ1RMCQkgICAgIDB4RkZDMDA0MjQJIC8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyICovCi0KLQotLyogU1BJMAlDb250cm9sbGVyICgweEZGQzAwNTAwIC0gMHhGRkMwMDVGRikgKi8KLQotI2RlZmluZQlTUEkwX0NUTAkJCTB4RkZDMDA1MDAgIC8qIFNQSTAgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZQlTUEkwX0ZMRwkJCTB4RkZDMDA1MDQgIC8qIFNQSTAgRmxhZyByZWdpc3RlciAqLwotI2RlZmluZQlTUEkwX1NUQVQJCQkweEZGQzAwNTA4ICAvKiBTUEkwIFN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZQlTUEkwX1REQlIJCQkweEZGQzAwNTBDICAvKiBTUEkwIFRyYW5zbWl0IERhdGEgQnVmZmVyIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQSTBfUkRCUgkJCTB4RkZDMDA1MTAgIC8qIFNQSTAgUmVjZWl2ZSBEYXRhIEJ1ZmZlcglSZWdpc3RlciAqLwotI2RlZmluZQlTUEkwX0JBVUQJCQkweEZGQzAwNTE0ICAvKiBTUEkwIEJhdWQgcmF0ZSBSZWdpc3RlciAqLwotI2RlZmluZQlTUEkwX1NIQURPVwkJCTB4RkZDMDA1MTggIC8qIFNQSTBfUkRCUiBTaGFkb3cJUmVnaXN0ZXIgKi8KLSNkZWZpbmUgU1BJMF9SRUdCQVNFCQkJU1BJMF9DVEwKLQotCi0vKiBUSU1FUiAwLCAxLCAyIFJlZ2lzdGVycyAoMHhGRkMwMDYwMCAtIDB4RkZDMDA2RkYpICovCi0jZGVmaW5lCVRJTUVSMF9DT05GSUcJCQkweEZGQzAwNjAwICAgICAvKiBUaW1lcgkwIENvbmZpZ3VyYXRpb24JUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVElNRVIwX0NPVU5URVIJCQkJMHhGRkMwMDYwNCAgICAgLyogVGltZXIJMCBDb3VudGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lCVRJTUVSMF9QRVJJT0QJCQkweEZGQzAwNjA4ICAgICAvKiBUaW1lcgkwIFBlcmlvZCBSZWdpc3RlciAqLwotI2RlZmluZQlUSU1FUjBfV0lEVEgJCQkweEZGQzAwNjBDICAgICAvKiBUaW1lcgkwIFdpZHRoCVJlZ2lzdGVyICovCi0KLSNkZWZpbmUJVElNRVIxX0NPTkZJRwkJCTB4RkZDMDA2MTAJLyogIFRpbWVyIDEgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAgICovCi0jZGVmaW5lCVRJTUVSMV9DT1VOVEVSCQkJMHhGRkMwMDYxNAkvKiAgVGltZXIgMSBDb3VudGVyIFJlZ2lzdGVyCSAgICAgKi8KLSNkZWZpbmUJVElNRVIxX1BFUklPRAkJCTB4RkZDMDA2MTgJLyogIFRpbWVyIDEgUGVyaW9kIFJlZ2lzdGVyCSAgICAgKi8KLSNkZWZpbmUJVElNRVIxX1dJRFRICQkJMHhGRkMwMDYxQwkvKiAgVGltZXIgMSBXaWR0aCBSZWdpc3RlcgkgICAgICovCi0KLSNkZWZpbmUJVElNRVIyX0NPTkZJRwkJCTB4RkZDMDA2MjAJLyogVGltZXIgMiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAgKi8KLSNkZWZpbmUJVElNRVIyX0NPVU5URVIJCQkweEZGQzAwNjI0CS8qIFRpbWVyIDIgQ291bnRlciBSZWdpc3RlcgkgICAgKi8KLSNkZWZpbmUJVElNRVIyX1BFUklPRAkJCTB4RkZDMDA2MjgJLyogVGltZXIgMiBQZXJpb2QgUmVnaXN0ZXIJICAgICovCi0jZGVmaW5lCVRJTUVSMl9XSURUSAkJCTB4RkZDMDA2MkMJLyogVGltZXIgMiBXaWR0aCBSZWdpc3RlcgkgICAgKi8KLQotI2RlZmluZQlUSU1FUl9FTkFCTEUJCQkJMHhGRkMwMDY0MAkvKiBUaW1lciBFbmFibGUJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVElNRVJfRElTQUJMRQkJCQkweEZGQzAwNjQ0CS8qIFRpbWVyIERpc2FibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVElNRVJfU1RBVFVTCQkJCTB4RkZDMDA2NDgJLyogVGltZXIgU3RhdHVzCVJlZ2lzdGVyICovCi0KLQotLyogUHJvZ3JhbW1hYmxlCUZsYWdzICgweEZGQzAwNzAwIC0gMHhGRkMwMDdGRikgKi8KLSNkZWZpbmUJRklPX0ZMQUdfRAkJCQkweEZGQzAwNzAwICAvKiBGbGFnIE1hc2sgdG8gZGlyZWN0bHkgc3BlY2lmeSBzdGF0ZSBvZiBwaW5zICovCi0jZGVmaW5lCUZJT19GTEFHX0MJCQkweEZGQzAwNzA0ICAvKiBQZXJpcGhlcmFsIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyIChjbGVhcikgKi8KLSNkZWZpbmUJRklPX0ZMQUdfUwkJCTB4RkZDMDA3MDggIC8qIFBlcmlwaGVyYWwgSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIgKHNldCkgKi8KLSNkZWZpbmUJRklPX0ZMQUdfVAkJCQkJMHhGRkMwMDcwQyAgLyogRmxhZyBNYXNrIHRvIGRpcmVjdGx5IHRvZ2dsZSBzdGF0ZSBvZiBwaW5zICovCi0jZGVmaW5lCUZJT19NQVNLQV9ECQkJMHhGRkMwMDcxMCAgLyogRmxhZyBNYXNrIEludGVycnVwdCBBIFJlZ2lzdGVyIChzZXQgZGlyZWN0bHkpICovCi0jZGVmaW5lCUZJT19NQVNLQV9DCQkJMHhGRkMwMDcxNCAgLyogRmxhZyBNYXNrIEludGVycnVwdCBBIFJlZ2lzdGVyIChjbGVhcikgKi8KLSNkZWZpbmUJRklPX01BU0tBX1MJCQkweEZGQzAwNzE4ICAvKiBGbGFnIE1hc2sgSW50ZXJydXB0IEEgUmVnaXN0ZXIgKHNldCkgKi8KLSNkZWZpbmUJRklPX01BU0tBX1QJCQkweEZGQzAwNzFDICAvKiBGbGFnIE1hc2sgSW50ZXJydXB0IEEgUmVnaXN0ZXIgKHRvZ2dsZSkgKi8KLSNkZWZpbmUJRklPX01BU0tCX0QJCQkweEZGQzAwNzIwICAvKiBGbGFnIE1hc2sgSW50ZXJydXB0IEIgUmVnaXN0ZXIgKHNldCBkaXJlY3RseSkgKi8KLSNkZWZpbmUJRklPX01BU0tCX0MJCQkweEZGQzAwNzI0ICAvKiBGbGFnIE1hc2sgSW50ZXJydXB0IEIgUmVnaXN0ZXIgKGNsZWFyKSAqLwotI2RlZmluZQlGSU9fTUFTS0JfUwkJCTB4RkZDMDA3MjggIC8qIEZsYWcgTWFzayBJbnRlcnJ1cHQgQiBSZWdpc3RlciAoc2V0KSAqLwotI2RlZmluZQlGSU9fTUFTS0JfVAkJCTB4RkZDMDA3MkMgIC8qIEZsYWcgTWFzayBJbnRlcnJ1cHQgQiBSZWdpc3RlciAodG9nZ2xlKSAqLwotI2RlZmluZQlGSU9fRElSCQkJCTB4RkZDMDA3MzAgIC8qIFBlcmlwaGVyYWwgRmxhZyBEaXJlY3Rpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRklPX1BPTEFSCQkJMHhGRkMwMDczNCAgLyogRmxhZyBTb3VyY2UgUG9sYXJpdHkgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRklPX0VER0UJCQkweEZGQzAwNzM4ICAvKiBGbGFnIFNvdXJjZSBTZW5zaXRpdml0eSBSZWdpc3RlciAqLwotI2RlZmluZQlGSU9fQk9USAkJCTB4RkZDMDA3M0MgIC8qIEZsYWcgU2V0CW9uIEJPVEgJRWRnZXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRklPX0lORU4JCQkJCTB4RkZDMDA3NDAgIC8qIEZsYWcgSW5wdXQgRW5hYmxlIFJlZ2lzdGVyICAqLwotCi0KLS8qIFNQT1JUMCBDb250cm9sbGVyICgweEZGQzAwODAwIC0gMHhGRkMwMDhGRikgKi8KLSNkZWZpbmUJU1BPUlQwX1RDUjEJCQkJMHhGRkMwMDgwMCAgLyogU1BPUlQwIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlciAqLwotI2RlZmluZQlTUE9SVDBfVENSMgkJCQkweEZGQzAwODA0ICAvKiBTUE9SVDAgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQT1JUMF9UQ0xLRElWCQkJMHhGRkMwMDgwOCAgLyogU1BPUlQwIFRyYW5zbWl0IENsb2NrIERpdmlkZXIgKi8KLSNkZWZpbmUJU1BPUlQwX1RGU0RJVgkJCTB4RkZDMDA4MEMgIC8qIFNQT1JUMCBUcmFuc21pdCBGcmFtZSBTeW5jIERpdmlkZXIgKi8KLSNkZWZpbmUJU1BPUlQwX1RYCQkJMHhGRkMwMDgxMCAgLyogU1BPUlQwIFRYIERhdGEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJU1BPUlQwX1JYCQkJMHhGRkMwMDgxOCAgLyogU1BPUlQwIFJYIERhdGEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJU1BPUlQwX1JDUjEJCQkJMHhGRkMwMDgyMCAgLyogU1BPUlQwIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlciAqLwotI2RlZmluZQlTUE9SVDBfUkNSMgkJCQkweEZGQzAwODI0ICAvKiBTUE9SVDAgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQT1JUMF9SQ0xLRElWCQkJMHhGRkMwMDgyOCAgLyogU1BPUlQwIFJlY2VpdmUgQ2xvY2sgRGl2aWRlciAqLwotI2RlZmluZQlTUE9SVDBfUkZTRElWCQkJMHhGRkMwMDgyQyAgLyogU1BPUlQwIFJlY2VpdmUgRnJhbWUgU3luYyBEaXZpZGVyICovCi0jZGVmaW5lCVNQT1JUMF9TVEFUCQkJMHhGRkMwMDgzMCAgLyogU1BPUlQwIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZQlTUE9SVDBfQ0hOTAkJCTB4RkZDMDA4MzQgIC8qIFNQT1JUMCBDdXJyZW50IENoYW5uZWwgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJU1BPUlQwX01DTUMxCQkJMHhGRkMwMDgzOCAgLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCi0jZGVmaW5lCVNQT1JUMF9NQ01DMgkJCTB4RkZDMDA4M0MgIC8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLwotI2RlZmluZQlTUE9SVDBfTVRDUzAJCQkweEZGQzAwODQwICAvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMCAqLwotI2RlZmluZQlTUE9SVDBfTVRDUzEJCQkweEZGQzAwODQ0ICAvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMSAqLwotI2RlZmluZQlTUE9SVDBfTVRDUzIJCQkweEZGQzAwODQ4ICAvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMiAqLwotI2RlZmluZQlTUE9SVDBfTVRDUzMJCQkweEZGQzAwODRDICAvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMyAqLwotI2RlZmluZQlTUE9SVDBfTVJDUzAJCQkweEZGQzAwODUwICAvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAwICovCi0jZGVmaW5lCVNQT1JUMF9NUkNTMQkJCTB4RkZDMDA4NTQgIC8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUJU1BPUlQwX01SQ1MyCQkJMHhGRkMwMDg1OCAgLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMiAqLwotI2RlZmluZQlTUE9SVDBfTVJDUzMJCQkweEZGQzAwODVDICAvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAzICovCi0KLQotLyogU1BPUlQxIENvbnRyb2xsZXIgKDB4RkZDMDA5MDAgLSAweEZGQzAwOUZGKSAqLwotI2RlZmluZQlTUE9SVDFfVENSMQkJCQkweEZGQzAwOTAwICAvKiBTUE9SVDEgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQT1JUMV9UQ1IyCQkJCTB4RkZDMDA5MDQgIC8qIFNQT1JUMSBUcmFuc21pdCBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJU1BPUlQxX1RDTEtESVYJCQkweEZGQzAwOTA4ICAvKiBTUE9SVDEgVHJhbnNtaXQgQ2xvY2sgRGl2aWRlciAqLwotI2RlZmluZQlTUE9SVDFfVEZTRElWCQkJMHhGRkMwMDkwQyAgLyogU1BPUlQxIFRyYW5zbWl0IEZyYW1lIFN5bmMgRGl2aWRlciAqLwotI2RlZmluZQlTUE9SVDFfVFgJCQkweEZGQzAwOTEwICAvKiBTUE9SVDEgVFggRGF0YSBSZWdpc3RlciAqLwotI2RlZmluZQlTUE9SVDFfUlgJCQkweEZGQzAwOTE4ICAvKiBTUE9SVDEgUlggRGF0YSBSZWdpc3RlciAqLwotI2RlZmluZQlTUE9SVDFfUkNSMQkJCQkweEZGQzAwOTIwICAvKiBTUE9SVDEgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQT1JUMV9SQ1IyCQkJCTB4RkZDMDA5MjQgIC8qIFNQT1JUMSBUcmFuc21pdCBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJU1BPUlQxX1JDTEtESVYJCQkweEZGQzAwOTI4ICAvKiBTUE9SVDEgUmVjZWl2ZSBDbG9jayBEaXZpZGVyICovCi0jZGVmaW5lCVNQT1JUMV9SRlNESVYJCQkweEZGQzAwOTJDICAvKiBTUE9SVDEgUmVjZWl2ZSBGcmFtZSBTeW5jIERpdmlkZXIgKi8KLSNkZWZpbmUJU1BPUlQxX1NUQVQJCQkweEZGQzAwOTMwICAvKiBTUE9SVDEgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQT1JUMV9DSE5MCQkJMHhGRkMwMDkzNCAgLyogU1BPUlQxIEN1cnJlbnQgQ2hhbm5lbCBSZWdpc3RlciAqLwotI2RlZmluZQlTUE9SVDFfTUNNQzEJCQkweEZGQzAwOTM4ICAvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUJU1BPUlQxX01DTUMyCQkJMHhGRkMwMDkzQyAgLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCi0jZGVmaW5lCVNQT1JUMV9NVENTMAkJCTB4RkZDMDA5NDAgIC8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAwICovCi0jZGVmaW5lCVNQT1JUMV9NVENTMQkJCTB4RkZDMDA5NDQgIC8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAxICovCi0jZGVmaW5lCVNQT1JUMV9NVENTMgkJCTB4RkZDMDA5NDggIC8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAyICovCi0jZGVmaW5lCVNQT1JUMV9NVENTMwkJCTB4RkZDMDA5NEMgIC8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAzICovCi0jZGVmaW5lCVNQT1JUMV9NUkNTMAkJCTB4RkZDMDA5NTAgIC8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDAgKi8KLSNkZWZpbmUJU1BPUlQxX01SQ1MxCQkJMHhGRkMwMDk1NCAgLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMSAqLwotI2RlZmluZQlTUE9SVDFfTVJDUzIJCQkweEZGQzAwOTU4ICAvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAyICovCi0jZGVmaW5lCVNQT1JUMV9NUkNTMwkJCTB4RkZDMDA5NUMgIC8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDMgKi8KLQotCi0vKiBFeHRlcm5hbCBCdXMJSW50ZXJmYWNlIFVuaXQgKDB4RkZDMDBBMDAgLSAweEZGQzAwQUZGKSAqLwotLyogQXN5bmNocm9ub3VzCU1lbW9yeSBDb250cm9sbGVyICAqLwotI2RlZmluZQlFQklVX0FNR0NUTAkJCTB4RkZDMDBBMDAgIC8qIEFzeW5jaHJvbm91cyBNZW1vcnkgR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRUJJVV9BTUJDVEwwCQkweEZGQzAwQTA0ICAvKiBBc3luY2hyb25vdXMgTWVtb3J5IEJhbmsJQ29udHJvbAlSZWdpc3RlciAwICovCi0jZGVmaW5lCUVCSVVfQU1CQ1RMMQkJMHhGRkMwMEEwOCAgLyogQXN5bmNocm9ub3VzIE1lbW9yeSBCYW5rCUNvbnRyb2wJUmVnaXN0ZXIgMSAqLwotCi0vKiBTRFJBTSBDb250cm9sbGVyICovCi0jZGVmaW5lCUVCSVVfU0RHQ1RMCQkJMHhGRkMwMEExMCAgLyogU0RSQU0gR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRUJJVV9TREJDVEwJCQkweEZGQzAwQTE0ICAvKiBTRFJBTSBCYW5rIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRUJJVV9TRFJSQwkJCTB4RkZDMDBBMTggIC8qIFNEUkFNIFJlZnJlc2ggUmF0ZSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lCUVCSVVfU0RTVEFUCQkJMHhGRkMwMEExQyAgLyogU0RSQU0gU3RhdHVzIFJlZ2lzdGVyICovCi0KLQotCi0vKiBETUEgQ29udHJvbGxlciAwIFRyYWZmaWMgQ29udHJvbCBSZWdpc3RlcnMgKDB4RkZDMDBCMDAgLSAweEZGQzAwQkZGKSAqLwotCi0jZGVmaW5lCURNQUMwX1RDX1BFUgkJCTB4RkZDMDBCMEMJLyogRE1BIENvbnRyb2xsZXIgMCBUcmFmZmljIENvbnRyb2wgUGVyaW9kcyBSZWdpc3RlciAqLwotI2RlZmluZQlETUFDMF9UQ19DTlQJCQkweEZGQzAwQjEwCS8qIERNQSBDb250cm9sbGVyIDAgVHJhZmZpYyBDb250cm9sIEN1cnJlbnQgQ291bnRzIFJlZ2lzdGVyICovCi0KLS8qIEFsdGVybmF0ZSBkZXByZWNhdGVkCXJlZ2lzdGVyIG5hbWVzIChiZWxvdykgcHJvdmlkZWQJZm9yIGJhY2t3YXJkcyBjb2RlIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUJRE1BMF9UQ1BFUgkJCURNQUMwX1RDX1BFUgotI2RlZmluZQlETUEwX1RDQ05UCQkJRE1BQzBfVENfQ05UCi0KLQotLyogRE1BIENvbnRyb2xsZXIgMCAoMHhGRkMwMEMwMAktIDB4RkZDMDBGRkYpCQkJCQkJCSAqLwotCi0jZGVmaW5lCURNQTBfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEMwMAkvKiBETUEgQ2hhbm5lbCAwIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTBfU1RBUlRfQUREUgkJCTB4RkZDMDBDMDQJLyogRE1BIENoYW5uZWwgMCBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTBfQ09ORklHCQkJCTB4RkZDMDBDMDgJLyogRE1BIENoYW5uZWwgMCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTBfWF9DT1VOVAkJCTB4RkZDMDBDMTAJLyogRE1BIENoYW5uZWwgMCBYIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTBfWF9NT0RJRlkJCQkweEZGQzAwQzE0CS8qIERNQSBDaGFubmVsIDAgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMF9ZX0NPVU5UCQkJMHhGRkMwMEMxOAkvKiBETUEgQ2hhbm5lbCAwIFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMF9ZX01PRElGWQkJCTB4RkZDMDBDMUMJLyogRE1BIENoYW5uZWwgMCBZIE1vZGlmeSBSZWdpc3RlciAqLwotI2RlZmluZQlETUEwX0NVUlJfREVTQ19QVFIJCTB4RkZDMDBDMjAJLyogRE1BIENoYW5uZWwgMCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUEwX0NVUlJfQUREUgkJCTB4RkZDMDBDMjQJLyogRE1BIENoYW5uZWwgMCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMF9JUlFfU1RBVFVTCQkJMHhGRkMwMEMyOAkvKiBETUEgQ2hhbm5lbCAwIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMF9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMEMyQwkvKiBETUEgQ2hhbm5lbCAwIFBlcmlwaGVyYWwgTWFwCVJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTBfQ1VSUl9YX0NPVU5UCQkweEZGQzAwQzMwCS8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTBfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwQzM4CS8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJRE1BMV9ORVhUX0RFU0NfUFRSCQkweEZGQzAwQzQwCS8qIERNQSBDaGFubmVsIDEgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMV9TVEFSVF9BRERSCQkJMHhGRkMwMEM0NAkvKiBETUEgQ2hhbm5lbCAxIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMV9DT05GSUcJCQkJMHhGRkMwMEM0OAkvKiBETUEgQ2hhbm5lbCAxIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMV9YX0NPVU5UCQkJMHhGRkMwMEM1MAkvKiBETUEgQ2hhbm5lbCAxIFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMV9YX01PRElGWQkJCTB4RkZDMDBDNTQJLyogRE1BIENoYW5uZWwgMSBYIE1vZGlmeSBSZWdpc3RlciAqLwotI2RlZmluZQlETUExX1lfQ09VTlQJCQkweEZGQzAwQzU4CS8qIERNQSBDaGFubmVsIDEgWSBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUExX1lfTU9ESUZZCQkJMHhGRkMwMEM1QwkvKiBETUEgQ2hhbm5lbCAxIFkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTFfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMEM2MAkvKiBETUEgQ2hhbm5lbCAxIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTFfQ1VSUl9BRERSCQkJMHhGRkMwMEM2NAkvKiBETUEgQ2hhbm5lbCAxIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZQlETUExX0lSUV9TVEFUVVMJCQkweEZGQzAwQzY4CS8qIERNQSBDaGFubmVsIDEgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZQlETUExX1BFUklQSEVSQUxfTUFQCQkweEZGQzAwQzZDCS8qIERNQSBDaGFubmVsIDEgUGVyaXBoZXJhbCBNYXAJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMV9DVVJSX1hfQ09VTlQJCTB4RkZDMDBDNzAJLyogRE1BIENoYW5uZWwgMSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMV9DVVJSX1lfQ09VTlQJCTB4RkZDMDBDNzgJLyogRE1BIENoYW5uZWwgMSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlETUEyX05FWFRfREVTQ19QVFIJCTB4RkZDMDBDODAJLyogRE1BIENoYW5uZWwgMiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUEyX1NUQVJUX0FERFIJCQkweEZGQzAwQzg0CS8qIERNQSBDaGFubmVsIDIgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZQlETUEyX0NPTkZJRwkJCQkweEZGQzAwQzg4CS8qIERNQSBDaGFubmVsIDIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZQlETUEyX1hfQ09VTlQJCQkweEZGQzAwQzkwCS8qIERNQSBDaGFubmVsIDIgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUEyX1hfTU9ESUZZCQkJMHhGRkMwMEM5NAkvKiBETUEgQ2hhbm5lbCAyIFggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTJfWV9DT1VOVAkJCTB4RkZDMDBDOTgJLyogRE1BIENoYW5uZWwgMiBZIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTJfWV9NT0RJRlkJCQkweEZGQzAwQzlDCS8qIERNQSBDaGFubmVsIDIgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMl9DVVJSX0RFU0NfUFRSCQkweEZGQzAwQ0EwCS8qIERNQSBDaGFubmVsIDIgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMl9DVVJSX0FERFIJCQkweEZGQzAwQ0E0CS8qIERNQSBDaGFubmVsIDIgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTJfSVJRX1NUQVRVUwkJCTB4RkZDMDBDQTgJLyogRE1BIENoYW5uZWwgMiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTJfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBDQUMJLyogRE1BIENoYW5uZWwgMiBQZXJpcGhlcmFsIE1hcAlSZWdpc3RlciAqLwotI2RlZmluZQlETUEyX0NVUlJfWF9DT1VOVAkJMHhGRkMwMENCMAkvKiBETUEgQ2hhbm5lbCAyIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUEyX0NVUlJfWV9DT1VOVAkJMHhGRkMwMENCOAkvKiBETUEgQ2hhbm5lbCAyIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLwotCi0jZGVmaW5lCURNQTNfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMENDMAkvKiBETUEgQ2hhbm5lbCAzIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTNfU1RBUlRfQUREUgkJCTB4RkZDMDBDQzQJLyogRE1BIENoYW5uZWwgMyBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTNfQ09ORklHCQkJCTB4RkZDMDBDQzgJLyogRE1BIENoYW5uZWwgMyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTNfWF9DT1VOVAkJCTB4RkZDMDBDRDAJLyogRE1BIENoYW5uZWwgMyBYIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTNfWF9NT0RJRlkJCQkweEZGQzAwQ0Q0CS8qIERNQSBDaGFubmVsIDMgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BM19ZX0NPVU5UCQkJMHhGRkMwMENEOAkvKiBETUEgQ2hhbm5lbCAzIFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BM19ZX01PRElGWQkJCTB4RkZDMDBDREMJLyogRE1BIENoYW5uZWwgMyBZIE1vZGlmeSBSZWdpc3RlciAqLwotI2RlZmluZQlETUEzX0NVUlJfREVTQ19QVFIJCTB4RkZDMDBDRTAJLyogRE1BIENoYW5uZWwgMyBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUEzX0NVUlJfQUREUgkJCTB4RkZDMDBDRTQJLyogRE1BIENoYW5uZWwgMyBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BM19JUlFfU1RBVFVTCQkJMHhGRkMwMENFOAkvKiBETUEgQ2hhbm5lbCAzIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BM19QRVJJUEhFUkFMX01BUAkJMHhGRkMwMENFQwkvKiBETUEgQ2hhbm5lbCAzIFBlcmlwaGVyYWwgTWFwCVJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTNfQ1VSUl9YX0NPVU5UCQkweEZGQzAwQ0YwCS8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTNfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwQ0Y4CS8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJRE1BNF9ORVhUX0RFU0NfUFRSCQkweEZGQzAwRDAwCS8qIERNQSBDaGFubmVsIDQgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BNF9TVEFSVF9BRERSCQkJMHhGRkMwMEQwNAkvKiBETUEgQ2hhbm5lbCA0IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BNF9DT05GSUcJCQkJMHhGRkMwMEQwOAkvKiBETUEgQ2hhbm5lbCA0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BNF9YX0NPVU5UCQkJMHhGRkMwMEQxMAkvKiBETUEgQ2hhbm5lbCA0IFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BNF9YX01PRElGWQkJCTB4RkZDMDBEMTQJLyogRE1BIENoYW5uZWwgNCBYIE1vZGlmeSBSZWdpc3RlciAqLwotI2RlZmluZQlETUE0X1lfQ09VTlQJCQkweEZGQzAwRDE4CS8qIERNQSBDaGFubmVsIDQgWSBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUE0X1lfTU9ESUZZCQkJMHhGRkMwMEQxQwkvKiBETUEgQ2hhbm5lbCA0IFkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTRfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMEQyMAkvKiBETUEgQ2hhbm5lbCA0IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTRfQ1VSUl9BRERSCQkJMHhGRkMwMEQyNAkvKiBETUEgQ2hhbm5lbCA0IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZQlETUE0X0lSUV9TVEFUVVMJCQkweEZGQzAwRDI4CS8qIERNQSBDaGFubmVsIDQgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZQlETUE0X1BFUklQSEVSQUxfTUFQCQkweEZGQzAwRDJDCS8qIERNQSBDaGFubmVsIDQgUGVyaXBoZXJhbCBNYXAJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BNF9DVVJSX1hfQ09VTlQJCTB4RkZDMDBEMzAJLyogRE1BIENoYW5uZWwgNCBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BNF9DVVJSX1lfQ09VTlQJCTB4RkZDMDBEMzgJLyogRE1BIENoYW5uZWwgNCBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlETUE1X05FWFRfREVTQ19QVFIJCTB4RkZDMDBENDAJLyogRE1BIENoYW5uZWwgNSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUE1X1NUQVJUX0FERFIJCQkweEZGQzAwRDQ0CS8qIERNQSBDaGFubmVsIDUgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZQlETUE1X0NPTkZJRwkJCQkweEZGQzAwRDQ4CS8qIERNQSBDaGFubmVsIDUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZQlETUE1X1hfQ09VTlQJCQkweEZGQzAwRDUwCS8qIERNQSBDaGFubmVsIDUgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUE1X1hfTU9ESUZZCQkJMHhGRkMwMEQ1NAkvKiBETUEgQ2hhbm5lbCA1IFggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTVfWV9DT1VOVAkJCTB4RkZDMDBENTgJLyogRE1BIENoYW5uZWwgNSBZIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTVfWV9NT0RJRlkJCQkweEZGQzAwRDVDCS8qIERNQSBDaGFubmVsIDUgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BNV9DVVJSX0RFU0NfUFRSCQkweEZGQzAwRDYwCS8qIERNQSBDaGFubmVsIDUgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BNV9DVVJSX0FERFIJCQkweEZGQzAwRDY0CS8qIERNQSBDaGFubmVsIDUgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTVfSVJRX1NUQVRVUwkJCTB4RkZDMDBENjgJLyogRE1BIENoYW5uZWwgNSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTVfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBENkMJLyogRE1BIENoYW5uZWwgNSBQZXJpcGhlcmFsIE1hcAlSZWdpc3RlciAqLwotI2RlZmluZQlETUE1X0NVUlJfWF9DT1VOVAkJMHhGRkMwMEQ3MAkvKiBETUEgQ2hhbm5lbCA1IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUE1X0NVUlJfWV9DT1VOVAkJMHhGRkMwMEQ3OAkvKiBETUEgQ2hhbm5lbCA1IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLwotCi0jZGVmaW5lCURNQTZfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEQ4MAkvKiBETUEgQ2hhbm5lbCA2IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTZfU1RBUlRfQUREUgkJCTB4RkZDMDBEODQJLyogRE1BIENoYW5uZWwgNiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTZfQ09ORklHCQkJCTB4RkZDMDBEODgJLyogRE1BIENoYW5uZWwgNiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTZfWF9DT1VOVAkJCTB4RkZDMDBEOTAJLyogRE1BIENoYW5uZWwgNiBYIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTZfWF9NT0RJRlkJCQkweEZGQzAwRDk0CS8qIERNQSBDaGFubmVsIDYgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BNl9ZX0NPVU5UCQkJMHhGRkMwMEQ5OAkvKiBETUEgQ2hhbm5lbCA2IFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BNl9ZX01PRElGWQkJCTB4RkZDMDBEOUMJLyogRE1BIENoYW5uZWwgNiBZIE1vZGlmeSBSZWdpc3RlciAqLwotI2RlZmluZQlETUE2X0NVUlJfREVTQ19QVFIJCTB4RkZDMDBEQTAJLyogRE1BIENoYW5uZWwgNiBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUE2X0NVUlJfQUREUgkJCTB4RkZDMDBEQTQJLyogRE1BIENoYW5uZWwgNiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BNl9JUlFfU1RBVFVTCQkJMHhGRkMwMERBOAkvKiBETUEgQ2hhbm5lbCA2IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BNl9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMERBQwkvKiBETUEgQ2hhbm5lbCA2IFBlcmlwaGVyYWwgTWFwCVJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTZfQ1VSUl9YX0NPVU5UCQkweEZGQzAwREIwCS8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTZfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwREI4CS8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJRE1BN19ORVhUX0RFU0NfUFRSCQkweEZGQzAwREMwCS8qIERNQSBDaGFubmVsIDcgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BN19TVEFSVF9BRERSCQkJMHhGRkMwMERDNAkvKiBETUEgQ2hhbm5lbCA3IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BN19DT05GSUcJCQkJMHhGRkMwMERDOAkvKiBETUEgQ2hhbm5lbCA3IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BN19YX0NPVU5UCQkJMHhGRkMwMEREMAkvKiBETUEgQ2hhbm5lbCA3IFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BN19YX01PRElGWQkJCTB4RkZDMDBERDQJLyogRE1BIENoYW5uZWwgNyBYIE1vZGlmeSBSZWdpc3RlciAqLwotI2RlZmluZQlETUE3X1lfQ09VTlQJCQkweEZGQzAwREQ4CS8qIERNQSBDaGFubmVsIDcgWSBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUE3X1lfTU9ESUZZCQkJMHhGRkMwMEREQwkvKiBETUEgQ2hhbm5lbCA3IFkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTdfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMERFMAkvKiBETUEgQ2hhbm5lbCA3IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTdfQ1VSUl9BRERSCQkJMHhGRkMwMERFNAkvKiBETUEgQ2hhbm5lbCA3IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZQlETUE3X0lSUV9TVEFUVVMJCQkweEZGQzAwREU4CS8qIERNQSBDaGFubmVsIDcgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZQlETUE3X1BFUklQSEVSQUxfTUFQCQkweEZGQzAwREVDCS8qIERNQSBDaGFubmVsIDcgUGVyaXBoZXJhbCBNYXAJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BN19DVVJSX1hfQ09VTlQJCTB4RkZDMDBERjAJLyogRE1BIENoYW5uZWwgNyBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BN19DVVJSX1lfQ09VTlQJCTB4RkZDMDBERjgJLyogRE1BIENoYW5uZWwgNyBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlNRE1BMF9EMF9ORVhUX0RFU0NfUFRSCTB4RkZDMDBFMDAJLyogTWVtRE1BMCBTdHJlYW0gMCBEZXN0aW5hdGlvbglOZXh0IERlc2NyaXB0b3IJUG9pbnRlcglSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9EMF9TVEFSVF9BRERSCQkweEZGQzAwRTA0CS8qIE1lbURNQTAgU3RyZWFtIDAgRGVzdGluYXRpb24JU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9EMF9DT05GSUcJCQkweEZGQzAwRTA4CS8qIE1lbURNQTAgU3RyZWFtIDAgRGVzdGluYXRpb24JQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9EMF9YX0NPVU5UCQkweEZGQzAwRTEwCS8qIE1lbURNQTAgU3RyZWFtIDAgRGVzdGluYXRpb24JWCBDb3VudAlSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9EMF9YX01PRElGWQkJMHhGRkMwMEUxNAkvKiBNZW1ETUEwIFN0cmVhbSAwIERlc3RpbmF0aW9uCVggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX0QwX1lfQ09VTlQJCTB4RkZDMDBFMTgJLyogTWVtRE1BMCBTdHJlYW0gMCBEZXN0aW5hdGlvbglZIENvdW50CVJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX0QwX1lfTU9ESUZZCQkweEZGQzAwRTFDCS8qIE1lbURNQTAgU3RyZWFtIDAgRGVzdGluYXRpb24JWSBNb2RpZnkgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfRDBfQ1VSUl9ERVNDX1BUUgkweEZGQzAwRTIwCS8qIE1lbURNQTAgU3RyZWFtIDAgRGVzdGluYXRpb24JQ3VycmVudAlEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfRDBfQ1VSUl9BRERSCQkweEZGQzAwRTI0CS8qIE1lbURNQTAgU3RyZWFtIDAgRGVzdGluYXRpb24JQ3VycmVudAlBZGRyZXNzCVJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX0QwX0lSUV9TVEFUVVMJCTB4RkZDMDBFMjgJLyogTWVtRE1BMCBTdHJlYW0gMCBEZXN0aW5hdGlvbglJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX0QwX1BFUklQSEVSQUxfTUFQCTB4RkZDMDBFMkMJLyogTWVtRE1BMCBTdHJlYW0gMCBEZXN0aW5hdGlvbglQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9EMF9DVVJSX1hfQ09VTlQJMHhGRkMwMEUzMAkvKiBNZW1ETUEwIFN0cmVhbSAwIERlc3RpbmF0aW9uCUN1cnJlbnQJWCBDb3VudAlSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9EMF9DVVJSX1lfQ09VTlQJMHhGRkMwMEUzOAkvKiBNZW1ETUEwIFN0cmVhbSAwIERlc3RpbmF0aW9uCUN1cnJlbnQJWSBDb3VudAlSZWdpc3RlciAqLwotCi0jZGVmaW5lCU1ETUEwX1MwX05FWFRfREVTQ19QVFIJMHhGRkMwMEU0MAkvKiBNZW1ETUEwIFN0cmVhbSAwIFNvdXJjZSBOZXh0CURlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9TMF9TVEFSVF9BRERSCQkweEZGQzAwRTQ0CS8qIE1lbURNQTAgU3RyZWFtIDAgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfUzBfQ09ORklHCQkJMHhGRkMwMEU0OAkvKiBNZW1ETUEwIFN0cmVhbSAwIFNvdXJjZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX1MwX1hfQ09VTlQJCTB4RkZDMDBFNTAJLyogTWVtRE1BMCBTdHJlYW0gMCBTb3VyY2UgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9TMF9YX01PRElGWQkJMHhGRkMwMEU1NAkvKiBNZW1ETUEwIFN0cmVhbSAwIFNvdXJjZSBYIE1vZGlmeSBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9TMF9ZX0NPVU5UCQkweEZGQzAwRTU4CS8qIE1lbURNQTAgU3RyZWFtIDAgU291cmNlIFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfUzBfWV9NT0RJRlkJCTB4RkZDMDBFNUMJLyogTWVtRE1BMCBTdHJlYW0gMCBTb3VyY2UgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfUzBfQ1VSUl9ERVNDX1BUUgkweEZGQzAwRTYwCS8qIE1lbURNQTAgU3RyZWFtIDAgU291cmNlIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX1MwX0NVUlJfQUREUgkJMHhGRkMwMEU2NAkvKiBNZW1ETUEwIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfUzBfSVJRX1NUQVRVUwkJMHhGRkMwMEU2OAkvKiBNZW1ETUEwIFN0cmVhbSAwIFNvdXJjZSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX1MwX1BFUklQSEVSQUxfTUFQCTB4RkZDMDBFNkMJLyogTWVtRE1BMCBTdHJlYW0gMCBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfUzBfQ1VSUl9YX0NPVU5UCTB4RkZDMDBFNzAJLyogTWVtRE1BMCBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX1MwX0NVUlJfWV9DT1VOVAkweEZGQzAwRTc4CS8qIE1lbURNQTAgU3RyZWFtIDAgU291cmNlIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLwotCi0jZGVmaW5lCU1ETUEwX0QxX05FWFRfREVTQ19QVFIJMHhGRkMwMEU4MAkvKiBNZW1ETUEwIFN0cmVhbSAxIERlc3RpbmF0aW9uCU5leHQgRGVzY3JpcHRvcglQb2ludGVyCVJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX0QxX1NUQVJUX0FERFIJCTB4RkZDMDBFODQJLyogTWVtRE1BMCBTdHJlYW0gMSBEZXN0aW5hdGlvbglTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX0QxX0NPTkZJRwkJCTB4RkZDMDBFODgJLyogTWVtRE1BMCBTdHJlYW0gMSBEZXN0aW5hdGlvbglDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX0QxX1hfQ09VTlQJCTB4RkZDMDBFOTAJLyogTWVtRE1BMCBTdHJlYW0gMSBEZXN0aW5hdGlvbglYIENvdW50CVJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX0QxX1hfTU9ESUZZCQkweEZGQzAwRTk0CS8qIE1lbURNQTAgU3RyZWFtIDEgRGVzdGluYXRpb24JWCBNb2RpZnkgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfRDFfWV9DT1VOVAkJMHhGRkMwMEU5OAkvKiBNZW1ETUEwIFN0cmVhbSAxIERlc3RpbmF0aW9uCVkgQ291bnQJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfRDFfWV9NT0RJRlkJCTB4RkZDMDBFOUMJLyogTWVtRE1BMCBTdHJlYW0gMSBEZXN0aW5hdGlvbglZIE1vZGlmeSBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9EMV9DVVJSX0RFU0NfUFRSCTB4RkZDMDBFQTAJLyogTWVtRE1BMCBTdHJlYW0gMSBEZXN0aW5hdGlvbglDdXJyZW50CURlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9EMV9DVVJSX0FERFIJCTB4RkZDMDBFQTQJLyogTWVtRE1BMCBTdHJlYW0gMSBEZXN0aW5hdGlvbglDdXJyZW50CUFkZHJlc3MJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfRDFfSVJRX1NUQVRVUwkJMHhGRkMwMEVBOAkvKiBNZW1ETUEwIFN0cmVhbSAxIERlc3RpbmF0aW9uCUludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfRDFfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMEVBQwkvKiBNZW1ETUEwIFN0cmVhbSAxIERlc3RpbmF0aW9uCVBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX0QxX0NVUlJfWF9DT1VOVAkweEZGQzAwRUIwCS8qIE1lbURNQTAgU3RyZWFtIDEgRGVzdGluYXRpb24JQ3VycmVudAlYIENvdW50CVJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX0QxX0NVUlJfWV9DT1VOVAkweEZGQzAwRUI4CS8qIE1lbURNQTAgU3RyZWFtIDEgRGVzdGluYXRpb24JQ3VycmVudAlZIENvdW50CVJlZ2lzdGVyICovCi0KLSNkZWZpbmUJTURNQTBfUzFfTkVYVF9ERVNDX1BUUgkweEZGQzAwRUMwCS8qIE1lbURNQTAgU3RyZWFtIDEgU291cmNlIE5leHQJRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX1MxX1NUQVJUX0FERFIJCTB4RkZDMDBFQzQJLyogTWVtRE1BMCBTdHJlYW0gMSBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9TMV9DT05GSUcJCQkweEZGQzAwRUM4CS8qIE1lbURNQTAgU3RyZWFtIDEgU291cmNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfUzFfWF9DT1VOVAkJMHhGRkMwMEVEMAkvKiBNZW1ETUEwIFN0cmVhbSAxIFNvdXJjZSBYIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX1MxX1hfTU9ESUZZCQkweEZGQzAwRUQ0CS8qIE1lbURNQTAgU3RyZWFtIDEgU291cmNlIFggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUEwX1MxX1lfQ09VTlQJCTB4RkZDMDBFRDgJLyogTWVtRE1BMCBTdHJlYW0gMSBTb3VyY2UgWSBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9TMV9ZX01PRElGWQkJMHhGRkMwMEVEQwkvKiBNZW1ETUEwIFN0cmVhbSAxIFNvdXJjZSBZIE1vZGlmeSBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9TMV9DVVJSX0RFU0NfUFRSCTB4RkZDMDBFRTAJLyogTWVtRE1BMCBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfUzFfQ1VSUl9BRERSCQkweEZGQzAwRUU0CS8qIE1lbURNQTAgU3RyZWFtIDEgU291cmNlIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9TMV9JUlFfU1RBVFVTCQkweEZGQzAwRUU4CS8qIE1lbURNQTAgU3RyZWFtIDEgU291cmNlIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfUzFfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMEVFQwkvKiBNZW1ETUEwIFN0cmVhbSAxIFNvdXJjZSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMF9TMV9DVVJSX1hfQ09VTlQJMHhGRkMwMEVGMAkvKiBNZW1ETUEwIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTBfUzFfQ1VSUl9ZX0NPVU5UCTB4RkZDMDBFRjgJLyogTWVtRE1BMCBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUgTURNQV9EMF9ORVhUX0RFU0NfUFRSIE1ETUEwX0QwX05FWFRfREVTQ19QVFIKLSNkZWZpbmUgTURNQV9EMF9TVEFSVF9BRERSIE1ETUEwX0QwX1NUQVJUX0FERFIKLSNkZWZpbmUgTURNQV9EMF9DT05GSUcgTURNQTBfRDBfQ09ORklHCi0jZGVmaW5lIE1ETUFfRDBfWF9DT1VOVCBNRE1BMF9EMF9YX0NPVU5UCi0jZGVmaW5lIE1ETUFfRDBfWF9NT0RJRlkgTURNQTBfRDBfWF9NT0RJRlkKLSNkZWZpbmUgTURNQV9EMF9ZX0NPVU5UIE1ETUEwX0QwX1lfQ09VTlQKLSNkZWZpbmUgTURNQV9EMF9ZX01PRElGWSBNRE1BMF9EMF9ZX01PRElGWQotI2RlZmluZSBNRE1BX0QwX0NVUlJfREVTQ19QVFIgTURNQTBfRDBfQ1VSUl9ERVNDX1BUUgotI2RlZmluZSBNRE1BX0QwX0NVUlJfQUREUiBNRE1BMF9EMF9DVVJSX0FERFIKLSNkZWZpbmUgTURNQV9EMF9JUlFfU1RBVFVTIE1ETUEwX0QwX0lSUV9TVEFUVVMKLSNkZWZpbmUgTURNQV9EMF9QRVJJUEhFUkFMX01BUCBNRE1BMF9EMF9QRVJJUEhFUkFMX01BUAotI2RlZmluZSBNRE1BX0QwX0NVUlJfWF9DT1VOVCBNRE1BMF9EMF9DVVJSX1hfQ09VTlQKLSNkZWZpbmUgTURNQV9EMF9DVVJSX1lfQ09VTlQgTURNQTBfRDBfQ1VSUl9ZX0NPVU5UCi0KLSNkZWZpbmUgTURNQV9TMF9ORVhUX0RFU0NfUFRSIE1ETUEwX1MwX05FWFRfREVTQ19QVFIKLSNkZWZpbmUgTURNQV9TMF9TVEFSVF9BRERSIE1ETUEwX1MwX1NUQVJUX0FERFIKLSNkZWZpbmUgTURNQV9TMF9DT05GSUcgTURNQTBfUzBfQ09ORklHCi0jZGVmaW5lIE1ETUFfUzBfWF9DT1VOVCBNRE1BMF9TMF9YX0NPVU5UCi0jZGVmaW5lIE1ETUFfUzBfWF9NT0RJRlkgTURNQTBfUzBfWF9NT0RJRlkKLSNkZWZpbmUgTURNQV9TMF9ZX0NPVU5UIE1ETUEwX1MwX1lfQ09VTlQKLSNkZWZpbmUgTURNQV9TMF9ZX01PRElGWSBNRE1BMF9TMF9ZX01PRElGWQotI2RlZmluZSBNRE1BX1MwX0NVUlJfREVTQ19QVFIgTURNQTBfUzBfQ1VSUl9ERVNDX1BUUgotI2RlZmluZSBNRE1BX1MwX0NVUlJfQUREUiBNRE1BMF9TMF9DVVJSX0FERFIKLSNkZWZpbmUgTURNQV9TMF9JUlFfU1RBVFVTIE1ETUEwX1MwX0lSUV9TVEFUVVMKLSNkZWZpbmUgTURNQV9TMF9QRVJJUEhFUkFMX01BUCBNRE1BMF9TMF9QRVJJUEhFUkFMX01BUAotI2RlZmluZSBNRE1BX1MwX0NVUlJfWF9DT1VOVCBNRE1BMF9TMF9DVVJSX1hfQ09VTlQKLSNkZWZpbmUgTURNQV9TMF9DVVJSX1lfQ09VTlQgTURNQTBfUzBfQ1VSUl9ZX0NPVU5UCi0KLSNkZWZpbmUgTURNQV9EMV9ORVhUX0RFU0NfUFRSIE1ETUEwX0QxX05FWFRfREVTQ19QVFIKLSNkZWZpbmUgTURNQV9EMV9TVEFSVF9BRERSIE1ETUEwX0QxX1NUQVJUX0FERFIKLSNkZWZpbmUgTURNQV9EMV9DT05GSUcgTURNQTBfRDFfQ09ORklHCi0jZGVmaW5lIE1ETUFfRDFfWF9DT1VOVCBNRE1BMF9EMV9YX0NPVU5UCi0jZGVmaW5lIE1ETUFfRDFfWF9NT0RJRlkgTURNQTBfRDFfWF9NT0RJRlkKLSNkZWZpbmUgTURNQV9EMV9ZX0NPVU5UIE1ETUEwX0QxX1lfQ09VTlQKLSNkZWZpbmUgTURNQV9EMV9ZX01PRElGWSBNRE1BMF9EMV9ZX01PRElGWQotI2RlZmluZSBNRE1BX0QxX0NVUlJfREVTQ19QVFIgTURNQTBfRDFfQ1VSUl9ERVNDX1BUUgotI2RlZmluZSBNRE1BX0QxX0NVUlJfQUREUiBNRE1BMF9EMV9DVVJSX0FERFIKLSNkZWZpbmUgTURNQV9EMV9JUlFfU1RBVFVTIE1ETUEwX0QxX0lSUV9TVEFUVVMKLSNkZWZpbmUgTURNQV9EMV9QRVJJUEhFUkFMX01BUCBNRE1BMF9EMV9QRVJJUEhFUkFMX01BUAotI2RlZmluZSBNRE1BX0QxX0NVUlJfWF9DT1VOVCBNRE1BMF9EMV9DVVJSX1hfQ09VTlQKLSNkZWZpbmUgTURNQV9EMV9DVVJSX1lfQ09VTlQgTURNQTBfRDFfQ1VSUl9ZX0NPVU5UCi0KLSNkZWZpbmUgTURNQV9TMV9ORVhUX0RFU0NfUFRSIE1ETUEwX1MxX05FWFRfREVTQ19QVFIKLSNkZWZpbmUgTURNQV9TMV9TVEFSVF9BRERSIE1ETUEwX1MxX1NUQVJUX0FERFIKLSNkZWZpbmUgTURNQV9TMV9DT05GSUcgTURNQTBfUzFfQ09ORklHCi0jZGVmaW5lIE1ETUFfUzFfWF9DT1VOVCBNRE1BMF9TMV9YX0NPVU5UCi0jZGVmaW5lIE1ETUFfUzFfWF9NT0RJRlkgTURNQTBfUzFfWF9NT0RJRlkKLSNkZWZpbmUgTURNQV9TMV9ZX0NPVU5UIE1ETUEwX1MxX1lfQ09VTlQKLSNkZWZpbmUgTURNQV9TMV9ZX01PRElGWSBNRE1BMF9TMV9ZX01PRElGWQotI2RlZmluZSBNRE1BX1MxX0NVUlJfREVTQ19QVFIgTURNQTBfUzFfQ1VSUl9ERVNDX1BUUgotI2RlZmluZSBNRE1BX1MxX0NVUlJfQUREUiBNRE1BMF9TMV9DVVJSX0FERFIKLSNkZWZpbmUgTURNQV9TMV9JUlFfU1RBVFVTIE1ETUEwX1MxX0lSUV9TVEFUVVMKLSNkZWZpbmUgTURNQV9TMV9QRVJJUEhFUkFMX01BUCBNRE1BMF9TMV9QRVJJUEhFUkFMX01BUAotI2RlZmluZSBNRE1BX1MxX0NVUlJfWF9DT1VOVCBNRE1BMF9TMV9DVVJSX1hfQ09VTlQKLSNkZWZpbmUgTURNQV9TMV9DVVJSX1lfQ09VTlQgTURNQTBfUzFfQ1VSUl9ZX0NPVU5UCi0KLQotLyogUGFyYWxsZWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKFBQSSkgKDB4RkZDMDEwMDAgLSAweEZGQzAxMEZGKSAqLwotI2RlZmluZQlQUElfQ09OVFJPTAkJCTB4RkZDMDEwMDAJLyogUFBJIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJUFBJX1NUQVRVUwkJCTB4RkZDMDEwMDQJLyogUFBJIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZQlQUElfQ09VTlQJCQkweEZGQzAxMDA4CS8qIFBQSSBUcmFuc2ZlcglDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlQUElfREVMQVkJCQkweEZGQzAxMDBDCS8qIFBQSSBEZWxheSBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlQUElfRlJBTUUJCQkweEZGQzAxMDEwCS8qIFBQSSBGcmFtZSBMZW5ndGggUmVnaXN0ZXIgKi8KLQotCi0vKiBUd28tV2lyZSBJbnRlcmZhY2UgMAkoMHhGRkMwMTQwMCAtIDB4RkZDMDE0RkYpCQkJICovCi0jZGVmaW5lCVRXSTBfQ0xLRElWCQkJMHhGRkMwMTQwMAkvKiBTZXJpYWwgQ2xvY2sJRGl2aWRlcglSZWdpc3RlciAqLwotI2RlZmluZQlUV0kwX0NPTlRST0wJCTB4RkZDMDE0MDQJLyogVFdJMAlNYXN0ZXIgSW50ZXJuYWwJVGltZSBSZWZlcmVuY2UgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVFdJMF9TTEFWRV9DVEwJCTB4RkZDMDE0MDgJLyogU2xhdmUgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lCVRXSTBfU0xBVkVfU1RBVAkJMHhGRkMwMTQwQwkvKiBTbGF2ZSBNb2RlIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZQlUV0kwX1NMQVZFX0FERFIJCTB4RkZDMDE0MTAJLyogU2xhdmUgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lCVRXSTBfTUFTVEVSX0NUTAkweEZGQzAxNDE0CS8qIE1hc3RlciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVFdJMF9NQVNURVJfU1RBVAkweEZGQzAxNDE4CS8qIE1hc3RlciBNb2RlIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZQlUV0kwX01BU1RFUl9BRERSCTB4RkZDMDE0MUMJLyogTWFzdGVyIE1vZGUgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZQlUV0kwX0lOVF9TVEFUCQkweEZGQzAxNDIwCS8qIFRXSTAJTWFzdGVyIEludGVycnVwdCBSZWdpc3RlciAqLwotI2RlZmluZQlUV0kwX0lOVF9NQVNLCQkweEZGQzAxNDI0CS8qIFRXSTAJTWFzdGVyIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCi0jZGVmaW5lCVRXSTBfRklGT19DVEwJCTB4RkZDMDE0MjgJLyogRklGTwlDb250cm9sCVJlZ2lzdGVyICovCi0jZGVmaW5lCVRXSTBfRklGT19TVEFUCQkweEZGQzAxNDJDCS8qIEZJRk8JU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCVRXSTBfWE1UX0RBVEE4CQkweEZGQzAxNDgwCS8qIEZJRk8JVHJhbnNtaXQgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlciAqLwotI2RlZmluZQlUV0kwX1hNVF9EQVRBMTYJCTB4RkZDMDE0ODQJLyogRklGTwlUcmFuc21pdCBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyICovCi0jZGVmaW5lCVRXSTBfUkNWX0RBVEE4CQkweEZGQzAxNDg4CS8qIEZJRk8JUmVjZWl2ZQlEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyICovCi0jZGVmaW5lCVRXSTBfUkNWX0RBVEExNgkJMHhGRkMwMTQ4QwkvKiBGSUZPCVJlY2VpdmUJRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlciAqLwotCi0jZGVmaW5lIFRXSTBfUkVHQkFTRQkJVFdJMF9DTEtESVYKLQotLyogdGhlIGZvbGxvd2luZyBhcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lCVRXSTBfUFJFU0NBTEUJIFRXSTBfQ09OVFJPTAotI2RlZmluZQlUV0kwX0lOVF9TUkMJIFRXSTBfSU5UX1NUQVQKLSNkZWZpbmUJVFdJMF9JTlRfRU5BQkxFCSBUV0kwX0lOVF9NQVNLCi0KLQotLyogR2VuZXJhbC1QdXJwb3NlIFBvcnRzICAoMHhGRkMwMTUwMCAtCTB4RkZDMDE1RkYpCSAqLwotCi0vKiBHUElPCVBvcnQgQyBSZWdpc3RlcglOYW1lcyAqLwotI2RlZmluZSBQT1JUQ0lPX0ZFUgkJCTB4RkZDMDE1MDAJLyogR1BJTwlQaW4gUG9ydCBDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUE9SVENJTwkJCQkweEZGQzAxNTEwCS8qIEdQSU8JUGluIFBvcnQgQyBEYXRhCVJlZ2lzdGVyICovCi0jZGVmaW5lIFBPUlRDSU9fQ0xFQVIJCQkweEZGQzAxNTIwCS8qIENsZWFyIEdQSU8gUGluIFBvcnQgQyBSZWdpc3RlciAqLwotI2RlZmluZSBQT1JUQ0lPX1NFVAkJCTB4RkZDMDE1MzAJLyogU2V0IEdQSU8gUGluCVBvcnQgQyBSZWdpc3RlciAqLwotI2RlZmluZSBQT1JUQ0lPX1RPR0dMRQkJCTB4RkZDMDE1NDAJLyogVG9nZ2xlIEdQSU8gUGluIFBvcnQJQyBSZWdpc3RlciAqLwotI2RlZmluZSBQT1JUQ0lPX0RJUgkJCTB4RkZDMDE1NTAJLyogR1BJTwlQaW4gUG9ydCBDIERpcmVjdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZSBQT1JUQ0lPX0lORU4JCQkweEZGQzAxNTYwCS8qIEdQSU8JUGluIFBvcnQgQyBJbnB1dCBFbmFibGUJUmVnaXN0ZXIgKi8KLQotLyogR1BJTwlQb3J0IEQgUmVnaXN0ZXIJTmFtZXMgKi8KLSNkZWZpbmUgUE9SVERJT19GRVIJCQkweEZGQzAxNTA0CS8qIEdQSU8JUGluIFBvcnQgRCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBPUlRESU8JCQkJMHhGRkMwMTUxNAkvKiBHUElPCVBpbiBQb3J0IEQgRGF0YQlSZWdpc3RlciAqLwotI2RlZmluZSBQT1JURElPX0NMRUFSCQkJMHhGRkMwMTUyNAkvKiBDbGVhciBHUElPIFBpbiBQb3J0IEQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUE9SVERJT19TRVQJCQkweEZGQzAxNTM0CS8qIFNldCBHUElPIFBpbglQb3J0IEQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUE9SVERJT19UT0dHTEUJCQkweEZGQzAxNTQ0CS8qIFRvZ2dsZSBHUElPIFBpbiBQb3J0CUQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUE9SVERJT19ESVIJCQkweEZGQzAxNTU0CS8qIEdQSU8JUGluIFBvcnQgRCBEaXJlY3Rpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUE9SVERJT19JTkVOCQkJMHhGRkMwMTU2NAkvKiBHUElPCVBpbiBQb3J0IEQgSW5wdXQgRW5hYmxlCVJlZ2lzdGVyICovCi0KLS8qIEdQSU8JUG9ydCBFIFJlZ2lzdGVyCU5hbWVzICovCi0jZGVmaW5lIFBPUlRFSU9fRkVSCQkJMHhGRkMwMTUwOAkvKiBHUElPCVBpbiBQb3J0IEUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZSBQT1JURUlPCQkJCTB4RkZDMDE1MTgJLyogR1BJTwlQaW4gUG9ydCBFIERhdGEJUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUE9SVEVJT19DTEVBUgkJCTB4RkZDMDE1MjgJLyogQ2xlYXIgR1BJTyBQaW4gUG9ydCBFIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBPUlRFSU9fU0VUCQkJMHhGRkMwMTUzOAkvKiBTZXQgR1BJTyBQaW4JUG9ydCBFIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBPUlRFSU9fVE9HR0xFCQkJMHhGRkMwMTU0OAkvKiBUb2dnbGUgR1BJTyBQaW4gUG9ydAlFIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBPUlRFSU9fRElSCQkJMHhGRkMwMTU1OAkvKiBHUElPCVBpbiBQb3J0IEUgRGlyZWN0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBPUlRFSU9fSU5FTgkJCTB4RkZDMDE1NjgJLyogR1BJTwlQaW4gUG9ydCBFIElucHV0IEVuYWJsZQlSZWdpc3RlciAqLwotCi0vKiBETUEgQ29udHJvbGxlciAxIFRyYWZmaWMgQ29udHJvbCBSZWdpc3RlcnMgKDB4RkZDMDFCMDAgLSAweEZGQzAxQkZGKSAqLwotCi0jZGVmaW5lCURNQUMxX1RDX1BFUgkJCTB4RkZDMDFCMEMJLyogRE1BIENvbnRyb2xsZXIgMSBUcmFmZmljIENvbnRyb2wgUGVyaW9kcyBSZWdpc3RlciAqLwotI2RlZmluZQlETUFDMV9UQ19DTlQJCQkweEZGQzAxQjEwCS8qIERNQSBDb250cm9sbGVyIDEgVHJhZmZpYyBDb250cm9sIEN1cnJlbnQgQ291bnRzIFJlZ2lzdGVyICovCi0KLS8qIEFsdGVybmF0ZSBkZXByZWNhdGVkCXJlZ2lzdGVyIG5hbWVzIChiZWxvdykgcHJvdmlkZWQJZm9yIGJhY2t3YXJkcyBjb2RlIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUJRE1BMV9UQ1BFUgkJCURNQUMxX1RDX1BFUgotI2RlZmluZQlETUExX1RDQ05UCQkJRE1BQzFfVENfQ05UCi0KLQotLyogRE1BIENvbnRyb2xsZXIgMSAoMHhGRkMwMUMwMAktIDB4RkZDMDFGRkYpCQkJCQkJCSAqLwotI2RlZmluZQlETUE4X05FWFRfREVTQ19QVFIJCTB4RkZDMDFDMDAJLyogRE1BIENoYW5uZWwgOCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUE4X1NUQVJUX0FERFIJCQkweEZGQzAxQzA0CS8qIERNQSBDaGFubmVsIDggU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZQlETUE4X0NPTkZJRwkJCQkweEZGQzAxQzA4CS8qIERNQSBDaGFubmVsIDggQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZQlETUE4X1hfQ09VTlQJCQkweEZGQzAxQzEwCS8qIERNQSBDaGFubmVsIDggWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUE4X1hfTU9ESUZZCQkJMHhGRkMwMUMxNAkvKiBETUEgQ2hhbm5lbCA4IFggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQThfWV9DT1VOVAkJCTB4RkZDMDFDMTgJLyogRE1BIENoYW5uZWwgOCBZIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQThfWV9NT0RJRlkJCQkweEZGQzAxQzFDCS8qIERNQSBDaGFubmVsIDggWSBNb2RpZnkgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BOF9DVVJSX0RFU0NfUFRSCQkweEZGQzAxQzIwCS8qIERNQSBDaGFubmVsIDggQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BOF9DVVJSX0FERFIJCQkweEZGQzAxQzI0CS8qIERNQSBDaGFubmVsIDggQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQThfSVJRX1NUQVRVUwkJCTB4RkZDMDFDMjgJLyogRE1BIENoYW5uZWwgOCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQThfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDFDMkMJLyogRE1BIENoYW5uZWwgOCBQZXJpcGhlcmFsIE1hcAlSZWdpc3RlciAqLwotI2RlZmluZQlETUE4X0NVUlJfWF9DT1VOVAkJMHhGRkMwMUMzMAkvKiBETUEgQ2hhbm5lbCA4IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUE4X0NVUlJfWV9DT1VOVAkJMHhGRkMwMUMzOAkvKiBETUEgQ2hhbm5lbCA4IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLwotCi0jZGVmaW5lCURNQTlfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMUM0MAkvKiBETUEgQ2hhbm5lbCA5IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTlfU1RBUlRfQUREUgkJCTB4RkZDMDFDNDQJLyogRE1BIENoYW5uZWwgOSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTlfQ09ORklHCQkJCTB4RkZDMDFDNDgJLyogRE1BIENoYW5uZWwgOSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTlfWF9DT1VOVAkJCTB4RkZDMDFDNTAJLyogRE1BIENoYW5uZWwgOSBYIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTlfWF9NT0RJRlkJCQkweEZGQzAxQzU0CS8qIERNQSBDaGFubmVsIDkgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BOV9ZX0NPVU5UCQkJMHhGRkMwMUM1OAkvKiBETUEgQ2hhbm5lbCA5IFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BOV9ZX01PRElGWQkJCTB4RkZDMDFDNUMJLyogRE1BIENoYW5uZWwgOSBZIE1vZGlmeSBSZWdpc3RlciAqLwotI2RlZmluZQlETUE5X0NVUlJfREVTQ19QVFIJCTB4RkZDMDFDNjAJLyogRE1BIENoYW5uZWwgOSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUE5X0NVUlJfQUREUgkJCTB4RkZDMDFDNjQJLyogRE1BIENoYW5uZWwgOSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BOV9JUlFfU1RBVFVTCQkJMHhGRkMwMUM2OAkvKiBETUEgQ2hhbm5lbCA5IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BOV9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMUM2QwkvKiBETUEgQ2hhbm5lbCA5IFBlcmlwaGVyYWwgTWFwCVJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTlfQ1VSUl9YX0NPVU5UCQkweEZGQzAxQzcwCS8qIERNQSBDaGFubmVsIDkgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTlfQ1VSUl9ZX0NPVU5UCQkweEZGQzAxQzc4CS8qIERNQSBDaGFubmVsIDkgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJRE1BMTBfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMUM4MAkvKiBETUEgQ2hhbm5lbCAxMCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUExMF9TVEFSVF9BRERSCQkweEZGQzAxQzg0CS8qIERNQSBDaGFubmVsIDEwIFN0YXJ0CUFkZHJlc3MJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTBfQ09ORklHCQkJMHhGRkMwMUM4OAkvKiBETUEgQ2hhbm5lbCAxMCBDb25maWd1cmF0aW9uCVJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTEwX1hfQ09VTlQJCQkweEZGQzAxQzkwCS8qIERNQSBDaGFubmVsIDEwIFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTBfWF9NT0RJRlkJCQkweEZGQzAxQzk0CS8qIERNQSBDaGFubmVsIDEwIFggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTEwX1lfQ09VTlQJCQkweEZGQzAxQzk4CS8qIERNQSBDaGFubmVsIDEwIFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTBfWV9NT0RJRlkJCQkweEZGQzAxQzlDCS8qIERNQSBDaGFubmVsIDEwIFkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTEwX0NVUlJfREVTQ19QVFIJCTB4RkZDMDFDQTAJLyogRE1BIENoYW5uZWwgMTAgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTBfQ1VSUl9BRERSCQkJMHhGRkMwMUNBNAkvKiBETUEgQ2hhbm5lbCAxMCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTBfSVJRX1NUQVRVUwkJMHhGRkMwMUNBOAkvKiBETUEgQ2hhbm5lbCAxMCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTEwX1BFUklQSEVSQUxfTUFQCTB4RkZDMDFDQUMJLyogRE1BIENoYW5uZWwgMTAgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTBfQ1VSUl9YX0NPVU5UCQkweEZGQzAxQ0IwCS8qIERNQSBDaGFubmVsIDEwIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUExMF9DVVJSX1lfQ09VTlQJCTB4RkZDMDFDQjgJLyogRE1BIENoYW5uZWwgMTAgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJRE1BMTFfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMUNDMAkvKiBETUEgQ2hhbm5lbCAxMSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUExMV9TVEFSVF9BRERSCQkweEZGQzAxQ0M0CS8qIERNQSBDaGFubmVsIDExIFN0YXJ0CUFkZHJlc3MJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTFfQ09ORklHCQkJMHhGRkMwMUNDOAkvKiBETUEgQ2hhbm5lbCAxMSBDb25maWd1cmF0aW9uCVJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTExX1hfQ09VTlQJCQkweEZGQzAxQ0QwCS8qIERNQSBDaGFubmVsIDExIFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTFfWF9NT0RJRlkJCQkweEZGQzAxQ0Q0CS8qIERNQSBDaGFubmVsIDExIFggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTExX1lfQ09VTlQJCQkweEZGQzAxQ0Q4CS8qIERNQSBDaGFubmVsIDExIFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTFfWV9NT0RJRlkJCQkweEZGQzAxQ0RDCS8qIERNQSBDaGFubmVsIDExIFkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTExX0NVUlJfREVTQ19QVFIJCTB4RkZDMDFDRTAJLyogRE1BIENoYW5uZWwgMTEgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTFfQ1VSUl9BRERSCQkJMHhGRkMwMUNFNAkvKiBETUEgQ2hhbm5lbCAxMSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTFfSVJRX1NUQVRVUwkJMHhGRkMwMUNFOAkvKiBETUEgQ2hhbm5lbCAxMSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTExX1BFUklQSEVSQUxfTUFQCTB4RkZDMDFDRUMJLyogRE1BIENoYW5uZWwgMTEgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTFfQ1VSUl9YX0NPVU5UCQkweEZGQzAxQ0YwCS8qIERNQSBDaGFubmVsIDExIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUExMV9DVVJSX1lfQ09VTlQJCTB4RkZDMDFDRjgJLyogRE1BIENoYW5uZWwgMTEgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJRE1BMTJfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMUQwMAkvKiBETUEgQ2hhbm5lbCAxMiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUExMl9TVEFSVF9BRERSCQkweEZGQzAxRDA0CS8qIERNQSBDaGFubmVsIDEyIFN0YXJ0CUFkZHJlc3MJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTJfQ09ORklHCQkJMHhGRkMwMUQwOAkvKiBETUEgQ2hhbm5lbCAxMiBDb25maWd1cmF0aW9uCVJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTEyX1hfQ09VTlQJCQkweEZGQzAxRDEwCS8qIERNQSBDaGFubmVsIDEyIFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTJfWF9NT0RJRlkJCQkweEZGQzAxRDE0CS8qIERNQSBDaGFubmVsIDEyIFggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTEyX1lfQ09VTlQJCQkweEZGQzAxRDE4CS8qIERNQSBDaGFubmVsIDEyIFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTJfWV9NT0RJRlkJCQkweEZGQzAxRDFDCS8qIERNQSBDaGFubmVsIDEyIFkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTEyX0NVUlJfREVTQ19QVFIJCTB4RkZDMDFEMjAJLyogRE1BIENoYW5uZWwgMTIgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTJfQ1VSUl9BRERSCQkJMHhGRkMwMUQyNAkvKiBETUEgQ2hhbm5lbCAxMiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTJfSVJRX1NUQVRVUwkJMHhGRkMwMUQyOAkvKiBETUEgQ2hhbm5lbCAxMiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTEyX1BFUklQSEVSQUxfTUFQCTB4RkZDMDFEMkMJLyogRE1BIENoYW5uZWwgMTIgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTJfQ1VSUl9YX0NPVU5UCQkweEZGQzAxRDMwCS8qIERNQSBDaGFubmVsIDEyIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUExMl9DVVJSX1lfQ09VTlQJCTB4RkZDMDFEMzgJLyogRE1BIENoYW5uZWwgMTIgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJRE1BMTNfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMUQ0MAkvKiBETUEgQ2hhbm5lbCAxMyBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUExM19TVEFSVF9BRERSCQkweEZGQzAxRDQ0CS8qIERNQSBDaGFubmVsIDEzIFN0YXJ0CUFkZHJlc3MJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTNfQ09ORklHCQkJMHhGRkMwMUQ0OAkvKiBETUEgQ2hhbm5lbCAxMyBDb25maWd1cmF0aW9uCVJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTEzX1hfQ09VTlQJCQkweEZGQzAxRDUwCS8qIERNQSBDaGFubmVsIDEzIFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTNfWF9NT0RJRlkJCQkweEZGQzAxRDU0CS8qIERNQSBDaGFubmVsIDEzIFggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTEzX1lfQ09VTlQJCQkweEZGQzAxRDU4CS8qIERNQSBDaGFubmVsIDEzIFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTNfWV9NT0RJRlkJCQkweEZGQzAxRDVDCS8qIERNQSBDaGFubmVsIDEzIFkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTEzX0NVUlJfREVTQ19QVFIJCTB4RkZDMDFENjAJLyogRE1BIENoYW5uZWwgMTMgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTNfQ1VSUl9BRERSCQkJMHhGRkMwMUQ2NAkvKiBETUEgQ2hhbm5lbCAxMyBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTNfSVJRX1NUQVRVUwkJMHhGRkMwMUQ2OAkvKiBETUEgQ2hhbm5lbCAxMyBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTEzX1BFUklQSEVSQUxfTUFQCTB4RkZDMDFENkMJLyogRE1BIENoYW5uZWwgMTMgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTNfQ1VSUl9YX0NPVU5UCQkweEZGQzAxRDcwCS8qIERNQSBDaGFubmVsIDEzIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUExM19DVVJSX1lfQ09VTlQJCTB4RkZDMDFENzgJLyogRE1BIENoYW5uZWwgMTMgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJRE1BMTRfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMUQ4MAkvKiBETUEgQ2hhbm5lbCAxNCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUExNF9TVEFSVF9BRERSCQkweEZGQzAxRDg0CS8qIERNQSBDaGFubmVsIDE0IFN0YXJ0CUFkZHJlc3MJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTRfQ09ORklHCQkJMHhGRkMwMUQ4OAkvKiBETUEgQ2hhbm5lbCAxNCBDb25maWd1cmF0aW9uCVJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE0X1hfQ09VTlQJCQkweEZGQzAxRDkwCS8qIERNQSBDaGFubmVsIDE0IFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTRfWF9NT0RJRlkJCQkweEZGQzAxRDk0CS8qIERNQSBDaGFubmVsIDE0IFggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE0X1lfQ09VTlQJCQkweEZGQzAxRDk4CS8qIERNQSBDaGFubmVsIDE0IFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTRfWV9NT0RJRlkJCQkweEZGQzAxRDlDCS8qIERNQSBDaGFubmVsIDE0IFkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE0X0NVUlJfREVTQ19QVFIJCTB4RkZDMDFEQTAJLyogRE1BIENoYW5uZWwgMTQgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTRfQ1VSUl9BRERSCQkJMHhGRkMwMURBNAkvKiBETUEgQ2hhbm5lbCAxNCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTRfSVJRX1NUQVRVUwkJMHhGRkMwMURBOAkvKiBETUEgQ2hhbm5lbCAxNCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE0X1BFUklQSEVSQUxfTUFQCTB4RkZDMDFEQUMJLyogRE1BIENoYW5uZWwgMTQgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTRfQ1VSUl9YX0NPVU5UCQkweEZGQzAxREIwCS8qIERNQSBDaGFubmVsIDE0IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUExNF9DVVJSX1lfQ09VTlQJCTB4RkZDMDFEQjgJLyogRE1BIENoYW5uZWwgMTQgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJRE1BMTVfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMURDMAkvKiBETUEgQ2hhbm5lbCAxNSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUExNV9TVEFSVF9BRERSCQkweEZGQzAxREM0CS8qIERNQSBDaGFubmVsIDE1IFN0YXJ0CUFkZHJlc3MJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTVfQ09ORklHCQkJMHhGRkMwMURDOAkvKiBETUEgQ2hhbm5lbCAxNSBDb25maWd1cmF0aW9uCVJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE1X1hfQ09VTlQJCQkweEZGQzAxREQwCS8qIERNQSBDaGFubmVsIDE1IFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTVfWF9NT0RJRlkJCQkweEZGQzAxREQ0CS8qIERNQSBDaGFubmVsIDE1IFggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE1X1lfQ09VTlQJCQkweEZGQzAxREQ4CS8qIERNQSBDaGFubmVsIDE1IFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTVfWV9NT0RJRlkJCQkweEZGQzAxRERDCS8qIERNQSBDaGFubmVsIDE1IFkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE1X0NVUlJfREVTQ19QVFIJCTB4RkZDMDFERTAJLyogRE1BIENoYW5uZWwgMTUgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTVfQ1VSUl9BRERSCQkJMHhGRkMwMURFNAkvKiBETUEgQ2hhbm5lbCAxNSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTVfSVJRX1NUQVRVUwkJMHhGRkMwMURFOAkvKiBETUEgQ2hhbm5lbCAxNSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE1X1BFUklQSEVSQUxfTUFQCTB4RkZDMDFERUMJLyogRE1BIENoYW5uZWwgMTUgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTVfQ1VSUl9YX0NPVU5UCQkweEZGQzAxREYwCS8qIERNQSBDaGFubmVsIDE1IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUExNV9DVVJSX1lfQ09VTlQJCTB4RkZDMDFERjgJLyogRE1BIENoYW5uZWwgMTUgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJRE1BMTZfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMUUwMAkvKiBETUEgQ2hhbm5lbCAxNiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUExNl9TVEFSVF9BRERSCQkweEZGQzAxRTA0CS8qIERNQSBDaGFubmVsIDE2IFN0YXJ0CUFkZHJlc3MJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTZfQ09ORklHCQkJMHhGRkMwMUUwOAkvKiBETUEgQ2hhbm5lbCAxNiBDb25maWd1cmF0aW9uCVJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE2X1hfQ09VTlQJCQkweEZGQzAxRTEwCS8qIERNQSBDaGFubmVsIDE2IFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTZfWF9NT0RJRlkJCQkweEZGQzAxRTE0CS8qIERNQSBDaGFubmVsIDE2IFggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE2X1lfQ09VTlQJCQkweEZGQzAxRTE4CS8qIERNQSBDaGFubmVsIDE2IFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTZfWV9NT0RJRlkJCQkweEZGQzAxRTFDCS8qIERNQSBDaGFubmVsIDE2IFkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE2X0NVUlJfREVTQ19QVFIJCTB4RkZDMDFFMjAJLyogRE1BIENoYW5uZWwgMTYgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTZfQ1VSUl9BRERSCQkJMHhGRkMwMUUyNAkvKiBETUEgQ2hhbm5lbCAxNiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTZfSVJRX1NUQVRVUwkJMHhGRkMwMUUyOAkvKiBETUEgQ2hhbm5lbCAxNiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE2X1BFUklQSEVSQUxfTUFQCTB4RkZDMDFFMkMJLyogRE1BIENoYW5uZWwgMTYgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTZfQ1VSUl9YX0NPVU5UCQkweEZGQzAxRTMwCS8qIERNQSBDaGFubmVsIDE2IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUExNl9DVVJSX1lfQ09VTlQJCTB4RkZDMDFFMzgJLyogRE1BIENoYW5uZWwgMTYgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJRE1BMTdfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMUU0MAkvKiBETUEgQ2hhbm5lbCAxNyBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUExN19TVEFSVF9BRERSCQkweEZGQzAxRTQ0CS8qIERNQSBDaGFubmVsIDE3IFN0YXJ0CUFkZHJlc3MJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTdfQ09ORklHCQkJMHhGRkMwMUU0OAkvKiBETUEgQ2hhbm5lbCAxNyBDb25maWd1cmF0aW9uCVJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE3X1hfQ09VTlQJCQkweEZGQzAxRTUwCS8qIERNQSBDaGFubmVsIDE3IFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTdfWF9NT0RJRlkJCQkweEZGQzAxRTU0CS8qIERNQSBDaGFubmVsIDE3IFggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE3X1lfQ09VTlQJCQkweEZGQzAxRTU4CS8qIERNQSBDaGFubmVsIDE3IFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTdfWV9NT0RJRlkJCQkweEZGQzAxRTVDCS8qIERNQSBDaGFubmVsIDE3IFkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE3X0NVUlJfREVTQ19QVFIJCTB4RkZDMDFFNjAJLyogRE1BIENoYW5uZWwgMTcgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTdfQ1VSUl9BRERSCQkJMHhGRkMwMUU2NAkvKiBETUEgQ2hhbm5lbCAxNyBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTdfSVJRX1NUQVRVUwkJMHhGRkMwMUU2OAkvKiBETUEgQ2hhbm5lbCAxNyBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE3X1BFUklQSEVSQUxfTUFQCTB4RkZDMDFFNkMJLyogRE1BIENoYW5uZWwgMTcgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTdfQ1VSUl9YX0NPVU5UCQkweEZGQzAxRTcwCS8qIERNQSBDaGFubmVsIDE3IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUExN19DVVJSX1lfQ09VTlQJCTB4RkZDMDFFNzgJLyogRE1BIENoYW5uZWwgMTcgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJRE1BMThfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMUU4MAkvKiBETUEgQ2hhbm5lbCAxOCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUExOF9TVEFSVF9BRERSCQkweEZGQzAxRTg0CS8qIERNQSBDaGFubmVsIDE4IFN0YXJ0CUFkZHJlc3MJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMThfQ09ORklHCQkJMHhGRkMwMUU4OAkvKiBETUEgQ2hhbm5lbCAxOCBDb25maWd1cmF0aW9uCVJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE4X1hfQ09VTlQJCQkweEZGQzAxRTkwCS8qIERNQSBDaGFubmVsIDE4IFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMThfWF9NT0RJRlkJCQkweEZGQzAxRTk0CS8qIERNQSBDaGFubmVsIDE4IFggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE4X1lfQ09VTlQJCQkweEZGQzAxRTk4CS8qIERNQSBDaGFubmVsIDE4IFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMThfWV9NT0RJRlkJCQkweEZGQzAxRTlDCS8qIERNQSBDaGFubmVsIDE4IFkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE4X0NVUlJfREVTQ19QVFIJCTB4RkZDMDFFQTAJLyogRE1BIENoYW5uZWwgMTggQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMThfQ1VSUl9BRERSCQkJMHhGRkMwMUVBNAkvKiBETUEgQ2hhbm5lbCAxOCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMThfSVJRX1NUQVRVUwkJMHhGRkMwMUVBOAkvKiBETUEgQ2hhbm5lbCAxOCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE4X1BFUklQSEVSQUxfTUFQCTB4RkZDMDFFQUMJLyogRE1BIENoYW5uZWwgMTggUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMThfQ1VSUl9YX0NPVU5UCQkweEZGQzAxRUIwCS8qIERNQSBDaGFubmVsIDE4IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUExOF9DVVJSX1lfQ09VTlQJCTB4RkZDMDFFQjgJLyogRE1BIENoYW5uZWwgMTggQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJRE1BMTlfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMUVDMAkvKiBETUEgQ2hhbm5lbCAxOSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlETUExOV9TVEFSVF9BRERSCQkweEZGQzAxRUM0CS8qIERNQSBDaGFubmVsIDE5IFN0YXJ0CUFkZHJlc3MJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTlfQ09ORklHCQkJMHhGRkMwMUVDOAkvKiBETUEgQ2hhbm5lbCAxOSBDb25maWd1cmF0aW9uCVJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE5X1hfQ09VTlQJCQkweEZGQzAxRUQwCS8qIERNQSBDaGFubmVsIDE5IFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTlfWF9NT0RJRlkJCQkweEZGQzAxRUQ0CS8qIERNQSBDaGFubmVsIDE5IFggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE5X1lfQ09VTlQJCQkweEZGQzAxRUQ4CS8qIERNQSBDaGFubmVsIDE5IFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTlfWV9NT0RJRlkJCQkweEZGQzAxRURDCS8qIERNQSBDaGFubmVsIDE5IFkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE5X0NVUlJfREVTQ19QVFIJCTB4RkZDMDFFRTAJLyogRE1BIENoYW5uZWwgMTkgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTlfQ1VSUl9BRERSCQkJMHhGRkMwMUVFNAkvKiBETUEgQ2hhbm5lbCAxOSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTlfSVJRX1NUQVRVUwkJMHhGRkMwMUVFOAkvKiBETUEgQ2hhbm5lbCAxOSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCURNQTE5X1BFUklQSEVSQUxfTUFQCTB4RkZDMDFFRUMJLyogRE1BIENoYW5uZWwgMTkgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BMTlfQ1VSUl9YX0NPVU5UCQkweEZGQzAxRUYwCS8qIERNQSBDaGFubmVsIDE5IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlETUExOV9DVVJSX1lfQ09VTlQJCTB4RkZDMDFFRjgJLyogRE1BIENoYW5uZWwgMTkgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJTURNQTFfRDBfTkVYVF9ERVNDX1BUUgkweEZGQzAxRjAwCS8qIE1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24JTmV4dCBEZXNjcmlwdG9yCVBvaW50ZXIJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfRDBfU1RBUlRfQUREUgkJMHhGRkMwMUYwNAkvKiBNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uCVN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfRDBfQ09ORklHCQkJMHhGRkMwMUYwOAkvKiBNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uCUNvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfRDBfWF9DT1VOVAkJMHhGRkMwMUYxMAkvKiBNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uCVggQ291bnQJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfRDBfWF9NT0RJRlkJCTB4RkZDMDFGMTQJLyogTWVtRE1BMSBTdHJlYW0gMCBEZXN0aW5hdGlvbglYIE1vZGlmeSBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9EMF9ZX0NPVU5UCQkweEZGQzAxRjE4CS8qIE1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24JWSBDb3VudAlSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9EMF9ZX01PRElGWQkJMHhGRkMwMUYxQwkvKiBNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uCVkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX0QwX0NVUlJfREVTQ19QVFIJMHhGRkMwMUYyMAkvKiBNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uCUN1cnJlbnQJRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX0QwX0NVUlJfQUREUgkJMHhGRkMwMUYyNAkvKiBNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uCUN1cnJlbnQJQWRkcmVzcwlSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9EMF9JUlFfU1RBVFVTCQkweEZGQzAxRjI4CS8qIE1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24JSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9EMF9QRVJJUEhFUkFMX01BUAkweEZGQzAxRjJDCS8qIE1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24JUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfRDBfQ1VSUl9YX0NPVU5UCTB4RkZDMDFGMzAJLyogTWVtRE1BMSBTdHJlYW0gMCBEZXN0aW5hdGlvbglDdXJyZW50CVggQ291bnQJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfRDBfQ1VSUl9ZX0NPVU5UCTB4RkZDMDFGMzgJLyogTWVtRE1BMSBTdHJlYW0gMCBEZXN0aW5hdGlvbglDdXJyZW50CVkgQ291bnQJUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlNRE1BMV9TMF9ORVhUX0RFU0NfUFRSCTB4RkZDMDFGNDAJLyogTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgTmV4dAlEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfUzBfU1RBUlRfQUREUgkJMHhGRkMwMUY0NAkvKiBNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX1MwX0NPTkZJRwkJCTB4RkZDMDFGNDgJLyogTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9TMF9YX0NPVU5UCQkweEZGQzAxRjUwCS8qIE1lbURNQTEgU3RyZWFtIDAgU291cmNlIFggQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfUzBfWF9NT0RJRlkJCTB4RkZDMDFGNTQJLyogTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfUzBfWV9DT1VOVAkJMHhGRkMwMUY1OAkvKiBNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBZIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX1MwX1lfTU9ESUZZCQkweEZGQzAxRjVDCS8qIE1lbURNQTEgU3RyZWFtIDAgU291cmNlIFkgTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX1MwX0NVUlJfREVTQ19QVFIJMHhGRkMwMUY2MAkvKiBNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9TMF9DVVJSX0FERFIJCTB4RkZDMDFGNjQJLyogTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX1MwX0lSUV9TVEFUVVMJCTB4RkZDMDFGNjgJLyogTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9TMF9QRVJJUEhFUkFMX01BUAkweEZGQzAxRjZDCS8qIE1lbURNQTEgU3RyZWFtIDAgU291cmNlIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX1MwX0NVUlJfWF9DT1VOVAkweEZGQzAxRjcwCS8qIE1lbURNQTEgU3RyZWFtIDAgU291cmNlIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9TMF9DVVJSX1lfQ09VTlQJMHhGRkMwMUY3OAkvKiBNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlNRE1BMV9EMV9ORVhUX0RFU0NfUFRSCTB4RkZDMDFGODAJLyogTWVtRE1BMSBTdHJlYW0gMSBEZXN0aW5hdGlvbglOZXh0IERlc2NyaXB0b3IJUG9pbnRlcglSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9EMV9TVEFSVF9BRERSCQkweEZGQzAxRjg0CS8qIE1lbURNQTEgU3RyZWFtIDEgRGVzdGluYXRpb24JU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9EMV9DT05GSUcJCQkweEZGQzAxRjg4CS8qIE1lbURNQTEgU3RyZWFtIDEgRGVzdGluYXRpb24JQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9EMV9YX0NPVU5UCQkweEZGQzAxRjkwCS8qIE1lbURNQTEgU3RyZWFtIDEgRGVzdGluYXRpb24JWCBDb3VudAlSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9EMV9YX01PRElGWQkJMHhGRkMwMUY5NAkvKiBNZW1ETUExIFN0cmVhbSAxIERlc3RpbmF0aW9uCVggTW9kaWZ5IFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX0QxX1lfQ09VTlQJCTB4RkZDMDFGOTgJLyogTWVtRE1BMSBTdHJlYW0gMSBEZXN0aW5hdGlvbglZIENvdW50CVJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX0QxX1lfTU9ESUZZCQkweEZGQzAxRjlDCS8qIE1lbURNQTEgU3RyZWFtIDEgRGVzdGluYXRpb24JWSBNb2RpZnkgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfRDFfQ1VSUl9ERVNDX1BUUgkweEZGQzAxRkEwCS8qIE1lbURNQTEgU3RyZWFtIDEgRGVzdGluYXRpb24JQ3VycmVudAlEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfRDFfQ1VSUl9BRERSCQkweEZGQzAxRkE0CS8qIE1lbURNQTEgU3RyZWFtIDEgRGVzdGluYXRpb24JQ3VycmVudAlBZGRyZXNzCVJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX0QxX0lSUV9TVEFUVVMJCTB4RkZDMDFGQTgJLyogTWVtRE1BMSBTdHJlYW0gMSBEZXN0aW5hdGlvbglJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX0QxX1BFUklQSEVSQUxfTUFQCTB4RkZDMDFGQUMJLyogTWVtRE1BMSBTdHJlYW0gMSBEZXN0aW5hdGlvbglQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9EMV9DVVJSX1hfQ09VTlQJMHhGRkMwMUZCMAkvKiBNZW1ETUExIFN0cmVhbSAxIERlc3RpbmF0aW9uCUN1cnJlbnQJWCBDb3VudAlSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9EMV9DVVJSX1lfQ09VTlQJMHhGRkMwMUZCOAkvKiBNZW1ETUExIFN0cmVhbSAxIERlc3RpbmF0aW9uCUN1cnJlbnQJWSBDb3VudAlSZWdpc3RlciAqLwotCi0jZGVmaW5lCU1ETUExX1MxX05FWFRfREVTQ19QVFIJMHhGRkMwMUZDMAkvKiBNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBOZXh0CURlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9TMV9TVEFSVF9BRERSCQkweEZGQzAxRkM0CS8qIE1lbURNQTEgU3RyZWFtIDEgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfUzFfQ09ORklHCQkJMHhGRkMwMUZDOAkvKiBNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX1MxX1hfQ09VTlQJCTB4RkZDMDFGRDAJLyogTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgWCBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9TMV9YX01PRElGWQkJMHhGRkMwMUZENAkvKiBNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBYIE1vZGlmeSBSZWdpc3RlciAqLwotI2RlZmluZQlNRE1BMV9TMV9ZX0NPVU5UCQkweEZGQzAxRkQ4CS8qIE1lbURNQTEgU3RyZWFtIDEgU291cmNlIFkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfUzFfWV9NT0RJRlkJCTB4RkZDMDFGREMJLyogTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfUzFfQ1VSUl9ERVNDX1BUUgkweEZGQzAxRkUwCS8qIE1lbURNQTEgU3RyZWFtIDEgU291cmNlIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX1MxX0NVUlJfQUREUgkJMHhGRkMwMUZFNAkvKiBNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfUzFfSVJRX1NUQVRVUwkJMHhGRkMwMUZFOAkvKiBNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX1MxX1BFUklQSEVSQUxfTUFQCTB4RkZDMDFGRUMJLyogTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJTURNQTFfUzFfQ1VSUl9YX0NPVU5UCTB4RkZDMDFGRjAJLyogTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lCU1ETUExX1MxX0NVUlJfWV9DT1VOVAkweEZGQzAxRkY4CS8qIE1lbURNQTEgU3RyZWFtIDEgU291cmNlIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLwotCi0KLS8qIFVBUlQxIENvbnRyb2xsZXIJCSgweEZGQzAyMDAwIC0gMHhGRkMwMjBGRikJICovCi0jZGVmaW5lCVVBUlQxX1RIUgkJCTB4RkZDMDIwMDAJLyogVHJhbnNtaXQgSG9sZGluZyByZWdpc3RlciAqLwotI2RlZmluZQlVQVJUMV9SQlIJCQkweEZGQzAyMDAwCS8qIFJlY2VpdmUgQnVmZmVyIHJlZ2lzdGVyICovCi0jZGVmaW5lCVVBUlQxX0RMTAkJCTB4RkZDMDIwMDAJLyogRGl2aXNvciBMYXRjaCAoTG93LUJ5dGUpICovCi0jZGVmaW5lCVVBUlQxX0lFUgkJCTB4RkZDMDIwMDQJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZQlVQVJUMV9ETEgJCQkweEZGQzAyMDA0CS8qIERpdmlzb3IgTGF0Y2ggKEhpZ2gtQnl0ZSkgKi8KLSNkZWZpbmUJVUFSVDFfSUlSCQkJMHhGRkMwMjAwOAkvKiBJbnRlcnJ1cHQgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVUFSVDFfTENSCQkJMHhGRkMwMjAwQwkvKiBMaW5lCUNvbnRyb2wJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVUFSVDFfTUNSCQkJMHhGRkMwMjAxMAkvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lCVVBUlQxX0xTUgkJCTB4RkZDMDIwMTQJLyogTGluZQlTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVUFSVDFfU0NSCQkJMHhGRkMwMjAxQwkvKiBTQ1IgU2NyYXRjaCBSZWdpc3RlciAqLwotI2RlZmluZQlVQVJUMV9HQ1RMCQkJMHhGRkMwMjAyNAkvKiBHbG9iYWwgQ29udHJvbCBSZWdpc3RlciAqLwotCi0KLS8qIFVBUlQyIENvbnRyb2xsZXIJCSgweEZGQzAyMTAwIC0gMHhGRkMwMjFGRikJICovCi0jZGVmaW5lCVVBUlQyX1RIUgkJCTB4RkZDMDIxMDAJLyogVHJhbnNtaXQgSG9sZGluZyByZWdpc3RlciAqLwotI2RlZmluZQlVQVJUMl9SQlIJCQkweEZGQzAyMTAwCS8qIFJlY2VpdmUgQnVmZmVyIHJlZ2lzdGVyICovCi0jZGVmaW5lCVVBUlQyX0RMTAkJCTB4RkZDMDIxMDAJLyogRGl2aXNvciBMYXRjaCAoTG93LUJ5dGUpICovCi0jZGVmaW5lCVVBUlQyX0lFUgkJCTB4RkZDMDIxMDQJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZQlVQVJUMl9ETEgJCQkweEZGQzAyMTA0CS8qIERpdmlzb3IgTGF0Y2ggKEhpZ2gtQnl0ZSkgKi8KLSNkZWZpbmUJVUFSVDJfSUlSCQkJMHhGRkMwMjEwOAkvKiBJbnRlcnJ1cHQgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVUFSVDJfTENSCQkJMHhGRkMwMjEwQwkvKiBMaW5lCUNvbnRyb2wJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVUFSVDJfTUNSCQkJMHhGRkMwMjExMAkvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lCVVBUlQyX0xTUgkJCTB4RkZDMDIxMTQJLyogTGluZQlTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVUFSVDJfU0NSCQkJMHhGRkMwMjExQwkvKiBTQ1IgU2NyYXRjaCBSZWdpc3RlciAqLwotI2RlZmluZQlVQVJUMl9HQ1RMCQkJMHhGRkMwMjEyNAkvKiBHbG9iYWwgQ29udHJvbCBSZWdpc3RlciAqLwotCi0KLS8qIFR3by1XaXJlIEludGVyZmFjZSAxCSgweEZGQzAyMjAwIC0gMHhGRkMwMjJGRikJCQkgKi8KLSNkZWZpbmUJVFdJMV9DTEtESVYJCQkweEZGQzAyMjAwCS8qIFNlcmlhbCBDbG9jawlEaXZpZGVyCVJlZ2lzdGVyICovCi0jZGVmaW5lCVRXSTFfQ09OVFJPTAkJMHhGRkMwMjIwNAkvKiBUV0kxCU1hc3RlciBJbnRlcm5hbAlUaW1lIFJlZmVyZW5jZSBSZWdpc3RlciAqLwotI2RlZmluZQlUV0kxX1NMQVZFX0NUTAkJMHhGRkMwMjIwOAkvKiBTbGF2ZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVFdJMV9TTEFWRV9TVEFUCQkweEZGQzAyMjBDCS8qIFNsYXZlIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCVRXSTFfU0xBVkVfQUREUgkJMHhGRkMwMjIxMAkvKiBTbGF2ZSBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVFdJMV9NQVNURVJfQ1RMCTB4RkZDMDIyMTQJLyogTWFzdGVyIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZQlUV0kxX01BU1RFUl9TVEFUCTB4RkZDMDIyMTgJLyogTWFzdGVyIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCVRXSTFfTUFTVEVSX0FERFIJMHhGRkMwMjIxQwkvKiBNYXN0ZXIgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lCVRXSTFfSU5UX1NUQVQJCTB4RkZDMDIyMjAJLyogVFdJMQlNYXN0ZXIgSW50ZXJydXB0IFJlZ2lzdGVyICovCi0jZGVmaW5lCVRXSTFfSU5UX01BU0sJCTB4RkZDMDIyMjQJLyogVFdJMQlNYXN0ZXIgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVFdJMV9GSUZPX0NUTAkJMHhGRkMwMjIyOAkvKiBGSUZPCUNvbnRyb2wJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVFdJMV9GSUZPX1NUQVQJCTB4RkZDMDIyMkMJLyogRklGTwlTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVFdJMV9YTVRfREFUQTgJCTB4RkZDMDIyODAJLyogRklGTwlUcmFuc21pdCBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyICovCi0jZGVmaW5lCVRXSTFfWE1UX0RBVEExNgkJMHhGRkMwMjI4NAkvKiBGSUZPCVRyYW5zbWl0IERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVFdJMV9SQ1ZfREFUQTgJCTB4RkZDMDIyODgJLyogRklGTwlSZWNlaXZlCURhdGEgU2luZ2xlIEJ5dGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVFdJMV9SQ1ZfREFUQTE2CQkweEZGQzAyMjhDCS8qIEZJRk8JUmVjZWl2ZQlEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyICovCi0jZGVmaW5lIFRXSTFfUkVHQkFTRQkJVFdJMV9DTEtESVYKLQotCi0vKiB0aGUgZm9sbG93aW5nIGFyZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUJVFdJMV9QUkVTQ0FMRQkgIFRXSTFfQ09OVFJPTAotI2RlZmluZQlUV0kxX0lOVF9TUkMJICBUV0kxX0lOVF9TVEFUCi0jZGVmaW5lCVRXSTFfSU5UX0VOQUJMRQkgIFRXSTFfSU5UX01BU0sKLQotCi0vKiBTUEkxCUNvbnRyb2xsZXIJCSgweEZGQzAyMzAwIC0gMHhGRkMwMjNGRikJICovCi0jZGVmaW5lCVNQSTFfQ1RMCQkJMHhGRkMwMjMwMCAgLyogU1BJMSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQSTFfRkxHCQkJMHhGRkMwMjMwNCAgLyogU1BJMSBGbGFnIHJlZ2lzdGVyICovCi0jZGVmaW5lCVNQSTFfU1RBVAkJCTB4RkZDMDIzMDggIC8qIFNQSTEgU3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lCVNQSTFfVERCUgkJCTB4RkZDMDIzMEMgIC8qIFNQSTEgVHJhbnNtaXQgRGF0YSBCdWZmZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJU1BJMV9SREJSCQkJMHhGRkMwMjMxMCAgLyogU1BJMSBSZWNlaXZlIERhdGEgQnVmZmVyCVJlZ2lzdGVyICovCi0jZGVmaW5lCVNQSTFfQkFVRAkJCTB4RkZDMDIzMTQgIC8qIFNQSTEgQmF1ZCByYXRlIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQSTFfU0hBRE9XCQkJMHhGRkMwMjMxOCAgLyogU1BJMV9SREJSIFNoYWRvdwlSZWdpc3RlciAqLwotI2RlZmluZSBTUEkxX1JFR0JBU0UJCQlTUEkxX0NUTAotCi0vKiBTUEkyCUNvbnRyb2xsZXIJCSgweEZGQzAyNDAwIC0gMHhGRkMwMjRGRikJICovCi0jZGVmaW5lCVNQSTJfQ1RMCQkJMHhGRkMwMjQwMCAgLyogU1BJMiBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQSTJfRkxHCQkJMHhGRkMwMjQwNCAgLyogU1BJMiBGbGFnIHJlZ2lzdGVyICovCi0jZGVmaW5lCVNQSTJfU1RBVAkJCTB4RkZDMDI0MDggIC8qIFNQSTIgU3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lCVNQSTJfVERCUgkJCTB4RkZDMDI0MEMgIC8qIFNQSTIgVHJhbnNtaXQgRGF0YSBCdWZmZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJU1BJMl9SREJSCQkJMHhGRkMwMjQxMCAgLyogU1BJMiBSZWNlaXZlIERhdGEgQnVmZmVyCVJlZ2lzdGVyICovCi0jZGVmaW5lCVNQSTJfQkFVRAkJCTB4RkZDMDI0MTQgIC8qIFNQSTIgQmF1ZCByYXRlIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQSTJfU0hBRE9XCQkJMHhGRkMwMjQxOCAgLyogU1BJMl9SREJSIFNoYWRvdwlSZWdpc3RlciAqLwotI2RlZmluZSBTUEkyX1JFR0JBU0UJCQlTUEkyX0NUTAotCi0vKiBTUE9SVDIgQ29udHJvbGxlcgkJKDB4RkZDMDI1MDAgLSAweEZGQzAyNUZGKQkJCSAqLwotI2RlZmluZQlTUE9SVDJfVENSMQkJCTB4RkZDMDI1MDAJLyogU1BPUlQyIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlciAqLwotI2RlZmluZQlTUE9SVDJfVENSMgkJCTB4RkZDMDI1MDQJLyogU1BPUlQyIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlciAqLwotI2RlZmluZQlTUE9SVDJfVENMS0RJVgkJMHhGRkMwMjUwOAkvKiBTUE9SVDIgVHJhbnNtaXQgQ2xvY2sgRGl2aWRlciAqLwotI2RlZmluZQlTUE9SVDJfVEZTRElWCQkweEZGQzAyNTBDCS8qIFNQT1JUMiBUcmFuc21pdCBGcmFtZSBTeW5jIERpdmlkZXIgKi8KLSNkZWZpbmUJU1BPUlQyX1RYCQkJMHhGRkMwMjUxMAkvKiBTUE9SVDIgVFggRGF0YSBSZWdpc3RlciAqLwotI2RlZmluZQlTUE9SVDJfUlgJCQkweEZGQzAyNTE4CS8qIFNQT1JUMiBSWCBEYXRhIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQT1JUMl9SQ1IxCQkJMHhGRkMwMjUyMAkvKiBTUE9SVDIgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQT1JUMl9SQ1IyCQkJMHhGRkMwMjUyNAkvKiBTUE9SVDIgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQT1JUMl9SQ0xLRElWCQkweEZGQzAyNTI4CS8qIFNQT1JUMiBSZWNlaXZlIENsb2NrCURpdmlkZXIgKi8KLSNkZWZpbmUJU1BPUlQyX1JGU0RJVgkJMHhGRkMwMjUyQwkvKiBTUE9SVDIgUmVjZWl2ZSBGcmFtZQlTeW5jIERpdmlkZXIgKi8KLSNkZWZpbmUJU1BPUlQyX1NUQVQJCQkweEZGQzAyNTMwCS8qIFNQT1JUMiBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJU1BPUlQyX0NITkwJCQkweEZGQzAyNTM0CS8qIFNQT1JUMiBDdXJyZW50IENoYW5uZWwgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJU1BPUlQyX01DTUMxCQkweEZGQzAyNTM4CS8qIFNQT1JUMiBNdWx0aS1DaGFubmVsCUNvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLwotI2RlZmluZQlTUE9SVDJfTUNNQzIJCTB4RkZDMDI1M0MJLyogU1BPUlQyIE11bHRpLUNoYW5uZWwJQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCi0jZGVmaW5lCVNQT1JUMl9NVENTMAkJMHhGRkMwMjU0MAkvKiBTUE9SVDIgTXVsdGktQ2hhbm5lbAlUcmFuc21pdCBTZWxlY3QJUmVnaXN0ZXIgMCAqLwotI2RlZmluZQlTUE9SVDJfTVRDUzEJCTB4RkZDMDI1NDQJLyogU1BPUlQyIE11bHRpLUNoYW5uZWwJVHJhbnNtaXQgU2VsZWN0CVJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUJU1BPUlQyX01UQ1MyCQkweEZGQzAyNTQ4CS8qIFNQT1JUMiBNdWx0aS1DaGFubmVsCVRyYW5zbWl0IFNlbGVjdAlSZWdpc3RlciAyICovCi0jZGVmaW5lCVNQT1JUMl9NVENTMwkJMHhGRkMwMjU0QwkvKiBTUE9SVDIgTXVsdGktQ2hhbm5lbAlUcmFuc21pdCBTZWxlY3QJUmVnaXN0ZXIgMyAqLwotI2RlZmluZQlTUE9SVDJfTVJDUzAJCTB4RkZDMDI1NTAJLyogU1BPUlQyIE11bHRpLUNoYW5uZWwJUmVjZWl2ZQlTZWxlY3QgUmVnaXN0ZXIJMCAqLwotI2RlZmluZQlTUE9SVDJfTVJDUzEJCTB4RkZDMDI1NTQJLyogU1BPUlQyIE11bHRpLUNoYW5uZWwJUmVjZWl2ZQlTZWxlY3QgUmVnaXN0ZXIJMSAqLwotI2RlZmluZQlTUE9SVDJfTVJDUzIJCTB4RkZDMDI1NTgJLyogU1BPUlQyIE11bHRpLUNoYW5uZWwJUmVjZWl2ZQlTZWxlY3QgUmVnaXN0ZXIJMiAqLwotI2RlZmluZQlTUE9SVDJfTVJDUzMJCTB4RkZDMDI1NUMJLyogU1BPUlQyIE11bHRpLUNoYW5uZWwJUmVjZWl2ZQlTZWxlY3QgUmVnaXN0ZXIJMyAqLwotCi0KLS8qIFNQT1JUMyBDb250cm9sbGVyCQkoMHhGRkMwMjYwMCAtIDB4RkZDMDI2RkYpCQkJICovCi0jZGVmaW5lCVNQT1JUM19UQ1IxCQkJMHhGRkMwMjYwMAkvKiBTUE9SVDMgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQT1JUM19UQ1IyCQkJMHhGRkMwMjYwNAkvKiBTUE9SVDMgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQT1JUM19UQ0xLRElWCQkweEZGQzAyNjA4CS8qIFNQT1JUMyBUcmFuc21pdCBDbG9jayBEaXZpZGVyICovCi0jZGVmaW5lCVNQT1JUM19URlNESVYJCTB4RkZDMDI2MEMJLyogU1BPUlQzIFRyYW5zbWl0IEZyYW1lIFN5bmMgRGl2aWRlciAqLwotI2RlZmluZQlTUE9SVDNfVFgJCQkweEZGQzAyNjEwCS8qIFNQT1JUMyBUWCBEYXRhIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNQT1JUM19SWAkJCTB4RkZDMDI2MTgJLyogU1BPUlQzIFJYIERhdGEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJU1BPUlQzX1JDUjEJCQkweEZGQzAyNjIwCS8qIFNQT1JUMyBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJU1BPUlQzX1JDUjIJCQkweEZGQzAyNjI0CS8qIFNQT1JUMyBUcmFuc21pdCBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJU1BPUlQzX1JDTEtESVYJCTB4RkZDMDI2MjgJLyogU1BPUlQzIFJlY2VpdmUgQ2xvY2sJRGl2aWRlciAqLwotI2RlZmluZQlTUE9SVDNfUkZTRElWCQkweEZGQzAyNjJDCS8qIFNQT1JUMyBSZWNlaXZlIEZyYW1lCVN5bmMgRGl2aWRlciAqLwotI2RlZmluZQlTUE9SVDNfU1RBVAkJCTB4RkZDMDI2MzAJLyogU1BPUlQzIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZQlTUE9SVDNfQ0hOTAkJCTB4RkZDMDI2MzQJLyogU1BPUlQzIEN1cnJlbnQgQ2hhbm5lbCBSZWdpc3RlciAqLwotI2RlZmluZQlTUE9SVDNfTUNNQzEJCTB4RkZDMDI2MzgJLyogU1BPUlQzIE11bHRpLUNoYW5uZWwJQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCi0jZGVmaW5lCVNQT1JUM19NQ01DMgkJMHhGRkMwMjYzQwkvKiBTUE9SVDMgTXVsdGktQ2hhbm5lbAlDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUJU1BPUlQzX01UQ1MwCQkweEZGQzAyNjQwCS8qIFNQT1JUMyBNdWx0aS1DaGFubmVsCVRyYW5zbWl0IFNlbGVjdAlSZWdpc3RlciAwICovCi0jZGVmaW5lCVNQT1JUM19NVENTMQkJMHhGRkMwMjY0NAkvKiBTUE9SVDMgTXVsdGktQ2hhbm5lbAlUcmFuc21pdCBTZWxlY3QJUmVnaXN0ZXIgMSAqLwotI2RlZmluZQlTUE9SVDNfTVRDUzIJCTB4RkZDMDI2NDgJLyogU1BPUlQzIE11bHRpLUNoYW5uZWwJVHJhbnNtaXQgU2VsZWN0CVJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUJU1BPUlQzX01UQ1MzCQkweEZGQzAyNjRDCS8qIFNQT1JUMyBNdWx0aS1DaGFubmVsCVRyYW5zbWl0IFNlbGVjdAlSZWdpc3RlciAzICovCi0jZGVmaW5lCVNQT1JUM19NUkNTMAkJMHhGRkMwMjY1MAkvKiBTUE9SVDMgTXVsdGktQ2hhbm5lbAlSZWNlaXZlCVNlbGVjdCBSZWdpc3RlcgkwICovCi0jZGVmaW5lCVNQT1JUM19NUkNTMQkJMHhGRkMwMjY1NAkvKiBTUE9SVDMgTXVsdGktQ2hhbm5lbAlSZWNlaXZlCVNlbGVjdCBSZWdpc3RlcgkxICovCi0jZGVmaW5lCVNQT1JUM19NUkNTMgkJMHhGRkMwMjY1OAkvKiBTUE9SVDMgTXVsdGktQ2hhbm5lbAlSZWNlaXZlCVNlbGVjdCBSZWdpc3RlcgkyICovCi0jZGVmaW5lCVNQT1JUM19NUkNTMwkJMHhGRkMwMjY1QwkvKiBTUE9SVDMgTXVsdGktQ2hhbm5lbAlSZWNlaXZlCVNlbGVjdCBSZWdpc3RlcgkzICovCi0KKyNpbmNsdWRlICJkZWZCRjUzOC5oIgogCiAvKiBNZWRpYSBUcmFuc2NlaXZlciAoTVhWUikgICAoMHhGRkMwMjcwMCAtIDB4RkZDMDI4RkYpICovCiAKQEAgLTk5NSwxMjQ5ICsxNDksNCBAQAogI2RlZmluZQlNWFZSX0JMT0NLX0NOVAkgICAgICAweEZGQzAyOEMwICAvKiBNWFZSIEJsb2NrCUNvdW50ZXIgKi8KICNkZWZpbmUJTVhWUl9QTExfQ1RMXzIJICAgICAgMHhGRkMwMjhDNCAgLyogTVhWUiBQaGFzZQlMb2NrIExvb3AgQ29udHJvbCBSZWdpc3RlciAyICovCiAKLQotLyogQ0FOIENvbnRyb2xsZXIJCSgweEZGQzAyQTAwIC0gMHhGRkMwMkZGRikJCQkJICovCi0vKiBGb3IgTWFpbGJveGVzIDAtMTUJCQkJCQkJCQkJCSAqLwotI2RlZmluZQlDQU5fTUMxCQkJCTB4RkZDMDJBMDAJLyogTWFpbGJveCBjb25maWcgcmVnIDEJICovCi0jZGVmaW5lCUNBTl9NRDEJCQkJMHhGRkMwMkEwNAkvKiBNYWlsYm94IGRpcmVjdGlvbiByZWcgMSAqLwotI2RlZmluZQlDQU5fVFJTMQkJCTB4RkZDMDJBMDgJLyogVHJhbnNtaXQgUmVxdWVzdCBTZXQJcmVnIDEgKi8KLSNkZWZpbmUJQ0FOX1RSUjEJCQkweEZGQzAyQTBDCS8qIFRyYW5zbWl0IFJlcXVlc3QgUmVzZXQgcmVnIDEgKi8KLSNkZWZpbmUJQ0FOX1RBMQkJCQkweEZGQzAyQTEwCS8qIFRyYW5zbWl0IEFja25vd2xlZGdlCXJlZyAxICovCi0jZGVmaW5lCUNBTl9BQTEJCQkJMHhGRkMwMkExNAkvKiBUcmFuc21pdCBBYm9ydCBBY2tub3dsZWRnZSByZWcgMSAqLwotI2RlZmluZQlDQU5fUk1QMQkJCTB4RkZDMDJBMTgJLyogUmVjZWl2ZSBNZXNzYWdlIFBlbmRpbmcgcmVnIDEgKi8KLSNkZWZpbmUJQ0FOX1JNTDEJCQkweEZGQzAyQTFDCS8qIFJlY2VpdmUgTWVzc2FnZSBMb3N0CXJlZyAxICovCi0jZGVmaW5lCUNBTl9NQlRJRjEJCQkweEZGQzAyQTIwCS8qIE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgcmVnIDEgKi8KLSNkZWZpbmUJQ0FOX01CUklGMQkJCTB4RkZDMDJBMjQJLyogTWFpbGJveCBSZWNlaXZlICBJbnRlcnJ1cHQgRmxhZyByZWcgMSAqLwotI2RlZmluZQlDQU5fTUJJTTEJCQkweEZGQzAyQTI4CS8qIE1haWxib3ggSW50ZXJydXB0IE1hc2sgcmVnIDEgKi8KLSNkZWZpbmUJQ0FOX1JGSDEJCQkweEZGQzAyQTJDCS8qIFJlbW90ZSBGcmFtZQlIYW5kbGluZyByZWcgMSAqLwotI2RlZmluZQlDQU5fT1BTUzEJCQkweEZGQzAyQTMwCS8qIE92ZXJ3cml0ZSBQcm90ZWN0aW9uCVNpbmdsZSBTaG90IFhtaXNzaW9uIHJlZyAxICovCi0KLS8qIEZvciBNYWlsYm94ZXMgMTYtMzEJCQkJCQkJCQkJCSAqLwotI2RlZmluZQlDQU5fTUMyCQkJCTB4RkZDMDJBNDAJLyogTWFpbGJveCBjb25maWcgcmVnIDIJICovCi0jZGVmaW5lCUNBTl9NRDIJCQkJMHhGRkMwMkE0NAkvKiBNYWlsYm94IGRpcmVjdGlvbiByZWcgMiAqLwotI2RlZmluZQlDQU5fVFJTMgkJCTB4RkZDMDJBNDgJLyogVHJhbnNtaXQgUmVxdWVzdCBTZXQJcmVnIDIgKi8KLSNkZWZpbmUJQ0FOX1RSUjIJCQkweEZGQzAyQTRDCS8qIFRyYW5zbWl0IFJlcXVlc3QgUmVzZXQgcmVnIDIgKi8KLSNkZWZpbmUJQ0FOX1RBMgkJCQkweEZGQzAyQTUwCS8qIFRyYW5zbWl0IEFja25vd2xlZGdlCXJlZyAyICovCi0jZGVmaW5lCUNBTl9BQTIJCQkJMHhGRkMwMkE1NAkvKiBUcmFuc21pdCBBYm9ydCBBY2tub3dsZWRnZSByZWcgMiAqLwotI2RlZmluZQlDQU5fUk1QMgkJCTB4RkZDMDJBNTgJLyogUmVjZWl2ZSBNZXNzYWdlIFBlbmRpbmcgcmVnIDIgKi8KLSNkZWZpbmUJQ0FOX1JNTDIJCQkweEZGQzAyQTVDCS8qIFJlY2VpdmUgTWVzc2FnZSBMb3N0CXJlZyAyICovCi0jZGVmaW5lCUNBTl9NQlRJRjIJCQkweEZGQzAyQTYwCS8qIE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgcmVnIDIgKi8KLSNkZWZpbmUJQ0FOX01CUklGMgkJCTB4RkZDMDJBNjQJLyogTWFpbGJveCBSZWNlaXZlICBJbnRlcnJ1cHQgRmxhZyByZWcgMiAqLwotI2RlZmluZQlDQU5fTUJJTTIJCQkweEZGQzAyQTY4CS8qIE1haWxib3ggSW50ZXJydXB0IE1hc2sgcmVnIDIgKi8KLSNkZWZpbmUJQ0FOX1JGSDIJCQkweEZGQzAyQTZDCS8qIFJlbW90ZSBGcmFtZQlIYW5kbGluZyByZWcgMiAqLwotI2RlZmluZQlDQU5fT1BTUzIJCQkweEZGQzAyQTcwCS8qIE92ZXJ3cml0ZSBQcm90ZWN0aW9uCVNpbmdsZSBTaG90IFhtaXNzaW9uIHJlZyAyICovCi0KLSNkZWZpbmUJQ0FOX0NMT0NLCQkJMHhGRkMwMkE4MAkvKiBCaXQgVGltaW5nIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMCAqLwotI2RlZmluZQlDQU5fVElNSU5HCQkJMHhGRkMwMkE4NAkvKiBCaXQgVGltaW5nIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMSAqLwotCi0jZGVmaW5lCUNBTl9ERUJVRwkJCTB4RkZDMDJBODgJLyogRGVidWcgUmVnaXN0ZXIJCSAqLwotLyogdGhlIGZvbGxvd2luZyBpcyBmb3IJYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUJQ0FOX0NORgkJIENBTl9ERUJVRwotCi0jZGVmaW5lCUNBTl9TVEFUVVMJCQkweEZGQzAyQThDCS8qIEdsb2JhbCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX0NFQwkJCQkweEZGQzAyQTkwCS8qIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX0dJUwkJCQkweEZGQzAyQTk0CS8qIEdsb2JhbCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9HSU0JCQkJMHhGRkMwMkE5OAkvKiBHbG9iYWwgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX0dJRgkJCQkweEZGQzAyQTlDCS8qIEdsb2JhbCBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fQ09OVFJPTAkJCTB4RkZDMDJBQTAJLyogTWFzdGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX0lOVFIJCQkweEZGQzAyQUE0CS8qIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQlRECQkJMHhGRkMwMkFBQwkvKiBNYWlsYm94IFRlbXBvcmFyeSBEaXNhYmxlIEZlYXR1cmUgKi8KLSNkZWZpbmUJQ0FOX0VXUgkJCQkweEZGQzAyQUIwCS8qIFByb2dyYW1tYWJsZQlXYXJuaW5nCUxldmVsICovCi0jZGVmaW5lCUNBTl9FU1IJCQkJMHhGRkMwMkFCNAkvKiBFcnJvciBTdGF0dXMJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX1VDQ05UCQkJMHhGRkMwMkFDNAkvKiBVbml2ZXJzYWwgQ291bnRlcgkgKi8KLSNkZWZpbmUJQ0FOX1VDUkMJCQkweEZGQzAyQUM4CS8qIFVuaXZlcnNhbCBDb3VudGVyIFJlbG9hZC9DYXB0dXJlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9VQ0NORgkJCTB4RkZDMDJBQ0MJLyogVW5pdmVyc2FsIENvdW50ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotCi0vKiBNYWlsYm94IEFjY2VwdGFuY2UgTWFza3MJCQkJCSAqLwotI2RlZmluZQlDQU5fQU0wMEwJCQkweEZGQzAyQjAwCS8qIE1haWxib3ggMCBMb3cgQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTAwSAkJCTB4RkZDMDJCMDQJLyogTWFpbGJveCAwIEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTAxTAkJCTB4RkZDMDJCMDgJLyogTWFpbGJveCAxIExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMDFICQkJMHhGRkMwMkIwQwkvKiBNYWlsYm94IDEgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMDJMCQkJMHhGRkMwMkIxMAkvKiBNYWlsYm94IDIgTG93IEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0wMkgJCQkweEZGQzAyQjE0CS8qIE1haWxib3ggMiBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0wM0wJCQkweEZGQzAyQjE4CS8qIE1haWxib3ggMyBMb3cgQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTAzSAkJCTB4RkZDMDJCMUMJLyogTWFpbGJveCAzIEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTA0TAkJCTB4RkZDMDJCMjAJLyogTWFpbGJveCA0IExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMDRICQkJMHhGRkMwMkIyNAkvKiBNYWlsYm94IDQgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMDVMCQkJMHhGRkMwMkIyOAkvKiBNYWlsYm94IDUgTG93IEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0wNUgJCQkweEZGQzAyQjJDCS8qIE1haWxib3ggNSBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0wNkwJCQkweEZGQzAyQjMwCS8qIE1haWxib3ggNiBMb3cgQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTA2SAkJCTB4RkZDMDJCMzQJLyogTWFpbGJveCA2IEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTA3TAkJCTB4RkZDMDJCMzgJLyogTWFpbGJveCA3IExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMDdICQkJMHhGRkMwMkIzQwkvKiBNYWlsYm94IDcgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMDhMCQkJMHhGRkMwMkI0MAkvKiBNYWlsYm94IDggTG93IEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0wOEgJCQkweEZGQzAyQjQ0CS8qIE1haWxib3ggOCBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0wOUwJCQkweEZGQzAyQjQ4CS8qIE1haWxib3ggOSBMb3cgQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTA5SAkJCTB4RkZDMDJCNEMJLyogTWFpbGJveCA5IEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTEwTAkJCTB4RkZDMDJCNTAJLyogTWFpbGJveCAxMCBMb3cgQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTEwSAkJCTB4RkZDMDJCNTQJLyogTWFpbGJveCAxMCBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0xMUwJCQkweEZGQzAyQjU4CS8qIE1haWxib3ggMTEgTG93IEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0xMUgJCQkweEZGQzAyQjVDCS8qIE1haWxib3ggMTEgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMTJMCQkJMHhGRkMwMkI2MAkvKiBNYWlsYm94IDEyIExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMTJICQkJMHhGRkMwMkI2NAkvKiBNYWlsYm94IDEyIEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTEzTAkJCTB4RkZDMDJCNjgJLyogTWFpbGJveCAxMyBMb3cgQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTEzSAkJCTB4RkZDMDJCNkMJLyogTWFpbGJveCAxMyBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0xNEwJCQkweEZGQzAyQjcwCS8qIE1haWxib3ggMTQgTG93IEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0xNEgJCQkweEZGQzAyQjc0CS8qIE1haWxib3ggMTQgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMTVMCQkJMHhGRkMwMkI3OAkvKiBNYWlsYm94IDE1IExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMTVICQkJMHhGRkMwMkI3QwkvKiBNYWlsYm94IDE1IEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCi0KLSNkZWZpbmUJQ0FOX0FNMTZMCQkJMHhGRkMwMkI4MAkvKiBNYWlsYm94IDE2IExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMTZICQkJMHhGRkMwMkI4NAkvKiBNYWlsYm94IDE2IEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTE3TAkJCTB4RkZDMDJCODgJLyogTWFpbGJveCAxNyBMb3cgQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTE3SAkJCTB4RkZDMDJCOEMJLyogTWFpbGJveCAxNyBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0xOEwJCQkweEZGQzAyQjkwCS8qIE1haWxib3ggMTggTG93IEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0xOEgJCQkweEZGQzAyQjk0CS8qIE1haWxib3ggMTggSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMTlMCQkJMHhGRkMwMkI5OAkvKiBNYWlsYm94IDE5IExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMTlICQkJMHhGRkMwMkI5QwkvKiBNYWlsYm94IDE5IEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTIwTAkJCTB4RkZDMDJCQTAJLyogTWFpbGJveCAyMCBMb3cgQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTIwSAkJCTB4RkZDMDJCQTQJLyogTWFpbGJveCAyMCBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0yMUwJCQkweEZGQzAyQkE4CS8qIE1haWxib3ggMjEgTG93IEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0yMUgJCQkweEZGQzAyQkFDCS8qIE1haWxib3ggMjEgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMjJMCQkJMHhGRkMwMkJCMAkvKiBNYWlsYm94IDIyIExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMjJICQkJMHhGRkMwMkJCNAkvKiBNYWlsYm94IDIyIEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTIzTAkJCTB4RkZDMDJCQjgJLyogTWFpbGJveCAyMyBMb3cgQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTIzSAkJCTB4RkZDMDJCQkMJLyogTWFpbGJveCAyMyBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0yNEwJCQkweEZGQzAyQkMwCS8qIE1haWxib3ggMjQgTG93IEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0yNEgJCQkweEZGQzAyQkM0CS8qIE1haWxib3ggMjQgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMjVMCQkJMHhGRkMwMkJDOAkvKiBNYWlsYm94IDI1IExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMjVICQkJMHhGRkMwMkJDQwkvKiBNYWlsYm94IDI1IEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTI2TAkJCTB4RkZDMDJCRDAJLyogTWFpbGJveCAyNiBMb3cgQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTI2SAkJCTB4RkZDMDJCRDQJLyogTWFpbGJveCAyNiBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0yN0wJCQkweEZGQzAyQkQ4CS8qIE1haWxib3ggMjcgTG93IEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0yN0gJCQkweEZGQzAyQkRDCS8qIE1haWxib3ggMjcgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMjhMCQkJMHhGRkMwMkJFMAkvKiBNYWlsYm94IDI4IExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMjhICQkJMHhGRkMwMkJFNAkvKiBNYWlsYm94IDI4IEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTI5TAkJCTB4RkZDMDJCRTgJLyogTWFpbGJveCAyOSBMb3cgQWNjZXB0YW5jZSBNYXNrICovCi0jZGVmaW5lCUNBTl9BTTI5SAkJCTB4RkZDMDJCRUMJLyogTWFpbGJveCAyOSBIaWdoIEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0zMEwJCQkweEZGQzAyQkYwCS8qIE1haWxib3ggMzAgTG93IEFjY2VwdGFuY2UgTWFzayAqLwotI2RlZmluZQlDQU5fQU0zMEgJCQkweEZGQzAyQkY0CS8qIE1haWxib3ggMzAgSGlnaCBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMzFMCQkJMHhGRkMwMkJGOAkvKiBNYWlsYm94IDMxIExvdyBBY2NlcHRhbmNlIE1hc2sgKi8KLSNkZWZpbmUJQ0FOX0FNMzFICQkJMHhGRkMwMkJGQwkvKiBNYWlsYm94IDMxIEhpZ2ggQWNjZXB0YW5jZSBNYXNrICovCi0KLS8qIENBTiBBY2NlcHRhbmNlIE1hc2sgTWFjcm9zICovCi0jZGVmaW5lCUNBTl9BTV9MKHgpCQkJKENBTl9BTTAwTCsoKHgpKjB4OCkpCi0jZGVmaW5lCUNBTl9BTV9IKHgpCQkJKENBTl9BTTAwSCsoKHgpKjB4OCkpCi0KLS8qIE1haWxib3ggUmVnaXN0ZXJzCQkJCQkJCQkJICovCi0jZGVmaW5lCUNBTl9NQjAwX0RBVEEwCQkweEZGQzAyQzAwCS8qIE1haWxib3ggMCBEYXRhIFdvcmQgMCBbMTU6MF0JUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDBfREFUQTEJCTB4RkZDMDJDMDQJLyogTWFpbGJveCAwIERhdGEgV29yZCAxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDBfREFUQTIJCTB4RkZDMDJDMDgJLyogTWFpbGJveCAwIERhdGEgV29yZCAyIFs0NzozMl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDBfREFUQTMJCTB4RkZDMDJDMEMJLyogTWFpbGJveCAwIERhdGEgV29yZCAzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDBfTEVOR1RICQkweEZGQzAyQzEwCS8qIE1haWxib3ggMCBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjAwX1RJTUVTVEFNUAkweEZGQzAyQzE0CS8qIE1haWxib3ggMCBUaW1lIFN0YW1wCVZhbHVlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjAwX0lEMAkJMHhGRkMwMkMxOAkvKiBNYWlsYm94IDAgSWRlbnRpZmllcglMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDBfSUQxCQkweEZGQzAyQzFDCS8qIE1haWxib3ggMCBJZGVudGlmaWVyCUhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIwMV9EQVRBMAkJMHhGRkMwMkMyMAkvKiBNYWlsYm94IDEgRGF0YSBXb3JkIDAgWzE1OjBdCVJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjAxX0RBVEExCQkweEZGQzAyQzI0CS8qIE1haWxib3ggMSBEYXRhIFdvcmQgMSBbMzE6MTZdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjAxX0RBVEEyCQkweEZGQzAyQzI4CS8qIE1haWxib3ggMSBEYXRhIFdvcmQgMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjAxX0RBVEEzCQkweEZGQzAyQzJDCS8qIE1haWxib3ggMSBEYXRhIFdvcmQgMyBbNjM6NDhdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjAxX0xFTkdUSAkJMHhGRkMwMkMzMAkvKiBNYWlsYm94IDEgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwMV9USU1FU1RBTVAJMHhGRkMwMkMzNAkvKiBNYWlsYm94IDEgVGltZSBTdGFtcAlWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwMV9JRDAJCTB4RkZDMDJDMzgJLyogTWFpbGJveCAxIElkZW50aWZpZXIJTG93IFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjAxX0lEMQkJMHhGRkMwMkMzQwkvKiBNYWlsYm94IDEgSWRlbnRpZmllcglIaWdoIFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJQ0FOX01CMDJfREFUQTAJCTB4RkZDMDJDNDAJLyogTWFpbGJveCAyIERhdGEgV29yZCAwIFsxNTowXQlSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwMl9EQVRBMQkJMHhGRkMwMkM0NAkvKiBNYWlsYm94IDIgRGF0YSBXb3JkIDEgWzMxOjE2XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwMl9EQVRBMgkJMHhGRkMwMkM0OAkvKiBNYWlsYm94IDIgRGF0YSBXb3JkIDIgWzQ3OjMyXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwMl9EQVRBMwkJMHhGRkMwMkM0QwkvKiBNYWlsYm94IDIgRGF0YSBXb3JkIDMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwMl9MRU5HVEgJCTB4RkZDMDJDNTAJLyogTWFpbGJveCAyIERhdGEgTGVuZ3RoIENvZGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDJfVElNRVNUQU1QCTB4RkZDMDJDNTQJLyogTWFpbGJveCAyIFRpbWUgU3RhbXAJVmFsdWUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDJfSUQwCQkweEZGQzAyQzU4CS8qIE1haWxib3ggMiBJZGVudGlmaWVyCUxvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwMl9JRDEJCTB4RkZDMDJDNUMJLyogTWFpbGJveCAyIElkZW50aWZpZXIJSGlnaCBSZWdpc3RlciAqLwotCi0jZGVmaW5lCUNBTl9NQjAzX0RBVEEwCQkweEZGQzAyQzYwCS8qIE1haWxib3ggMyBEYXRhIFdvcmQgMCBbMTU6MF0JUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDNfREFUQTEJCTB4RkZDMDJDNjQJLyogTWFpbGJveCAzIERhdGEgV29yZCAxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDNfREFUQTIJCTB4RkZDMDJDNjgJLyogTWFpbGJveCAzIERhdGEgV29yZCAyIFs0NzozMl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDNfREFUQTMJCTB4RkZDMDJDNkMJLyogTWFpbGJveCAzIERhdGEgV29yZCAzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDNfTEVOR1RICQkweEZGQzAyQzcwCS8qIE1haWxib3ggMyBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjAzX1RJTUVTVEFNUAkweEZGQzAyQzc0CS8qIE1haWxib3ggMyBUaW1lIFN0YW1wCVZhbHVlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjAzX0lEMAkJMHhGRkMwMkM3OAkvKiBNYWlsYm94IDMgSWRlbnRpZmllcglMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDNfSUQxCQkweEZGQzAyQzdDCS8qIE1haWxib3ggMyBJZGVudGlmaWVyCUhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIwNF9EQVRBMAkJMHhGRkMwMkM4MAkvKiBNYWlsYm94IDQgRGF0YSBXb3JkIDAgWzE1OjBdCVJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjA0X0RBVEExCQkweEZGQzAyQzg0CS8qIE1haWxib3ggNCBEYXRhIFdvcmQgMSBbMzE6MTZdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjA0X0RBVEEyCQkweEZGQzAyQzg4CS8qIE1haWxib3ggNCBEYXRhIFdvcmQgMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjA0X0RBVEEzCQkweEZGQzAyQzhDCS8qIE1haWxib3ggNCBEYXRhIFdvcmQgMyBbNjM6NDhdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjA0X0xFTkdUSAkJMHhGRkMwMkM5MAkvKiBNYWlsYm94IDQgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwNF9USU1FU1RBTVAJMHhGRkMwMkM5NAkvKiBNYWlsYm94IDQgVGltZSBTdGFtcAlWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwNF9JRDAJCTB4RkZDMDJDOTgJLyogTWFpbGJveCA0IElkZW50aWZpZXIJTG93IFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjA0X0lEMQkJMHhGRkMwMkM5QwkvKiBNYWlsYm94IDQgSWRlbnRpZmllcglIaWdoIFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJQ0FOX01CMDVfREFUQTAJCTB4RkZDMDJDQTAJLyogTWFpbGJveCA1IERhdGEgV29yZCAwIFsxNTowXQlSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwNV9EQVRBMQkJMHhGRkMwMkNBNAkvKiBNYWlsYm94IDUgRGF0YSBXb3JkIDEgWzMxOjE2XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwNV9EQVRBMgkJMHhGRkMwMkNBOAkvKiBNYWlsYm94IDUgRGF0YSBXb3JkIDIgWzQ3OjMyXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwNV9EQVRBMwkJMHhGRkMwMkNBQwkvKiBNYWlsYm94IDUgRGF0YSBXb3JkIDMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwNV9MRU5HVEgJCTB4RkZDMDJDQjAJLyogTWFpbGJveCA1IERhdGEgTGVuZ3RoIENvZGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDVfVElNRVNUQU1QCTB4RkZDMDJDQjQJLyogTWFpbGJveCA1IFRpbWUgU3RhbXAJVmFsdWUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDVfSUQwCQkweEZGQzAyQ0I4CS8qIE1haWxib3ggNSBJZGVudGlmaWVyCUxvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwNV9JRDEJCTB4RkZDMDJDQkMJLyogTWFpbGJveCA1IElkZW50aWZpZXIJSGlnaCBSZWdpc3RlciAqLwotCi0jZGVmaW5lCUNBTl9NQjA2X0RBVEEwCQkweEZGQzAyQ0MwCS8qIE1haWxib3ggNiBEYXRhIFdvcmQgMCBbMTU6MF0JUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDZfREFUQTEJCTB4RkZDMDJDQzQJLyogTWFpbGJveCA2IERhdGEgV29yZCAxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDZfREFUQTIJCTB4RkZDMDJDQzgJLyogTWFpbGJveCA2IERhdGEgV29yZCAyIFs0NzozMl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDZfREFUQTMJCTB4RkZDMDJDQ0MJLyogTWFpbGJveCA2IERhdGEgV29yZCAzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDZfTEVOR1RICQkweEZGQzAyQ0QwCS8qIE1haWxib3ggNiBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjA2X1RJTUVTVEFNUAkweEZGQzAyQ0Q0CS8qIE1haWxib3ggNiBUaW1lIFN0YW1wCVZhbHVlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjA2X0lEMAkJMHhGRkMwMkNEOAkvKiBNYWlsYm94IDYgSWRlbnRpZmllcglMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDZfSUQxCQkweEZGQzAyQ0RDCS8qIE1haWxib3ggNiBJZGVudGlmaWVyCUhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIwN19EQVRBMAkJMHhGRkMwMkNFMAkvKiBNYWlsYm94IDcgRGF0YSBXb3JkIDAgWzE1OjBdCVJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjA3X0RBVEExCQkweEZGQzAyQ0U0CS8qIE1haWxib3ggNyBEYXRhIFdvcmQgMSBbMzE6MTZdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjA3X0RBVEEyCQkweEZGQzAyQ0U4CS8qIE1haWxib3ggNyBEYXRhIFdvcmQgMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjA3X0RBVEEzCQkweEZGQzAyQ0VDCS8qIE1haWxib3ggNyBEYXRhIFdvcmQgMyBbNjM6NDhdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjA3X0xFTkdUSAkJMHhGRkMwMkNGMAkvKiBNYWlsYm94IDcgRGF0YSBMZW5ndGggQ29kZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwN19USU1FU1RBTVAJMHhGRkMwMkNGNAkvKiBNYWlsYm94IDcgVGltZSBTdGFtcAlWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwN19JRDAJCTB4RkZDMDJDRjgJLyogTWFpbGJveCA3IElkZW50aWZpZXIJTG93IFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjA3X0lEMQkJMHhGRkMwMkNGQwkvKiBNYWlsYm94IDcgSWRlbnRpZmllcglIaWdoIFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJQ0FOX01CMDhfREFUQTAJCTB4RkZDMDJEMDAJLyogTWFpbGJveCA4IERhdGEgV29yZCAwIFsxNTowXQlSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwOF9EQVRBMQkJMHhGRkMwMkQwNAkvKiBNYWlsYm94IDggRGF0YSBXb3JkIDEgWzMxOjE2XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwOF9EQVRBMgkJMHhGRkMwMkQwOAkvKiBNYWlsYm94IDggRGF0YSBXb3JkIDIgWzQ3OjMyXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwOF9EQVRBMwkJMHhGRkMwMkQwQwkvKiBNYWlsYm94IDggRGF0YSBXb3JkIDMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwOF9MRU5HVEgJCTB4RkZDMDJEMTAJLyogTWFpbGJveCA4IERhdGEgTGVuZ3RoIENvZGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDhfVElNRVNUQU1QCTB4RkZDMDJEMTQJLyogTWFpbGJveCA4IFRpbWUgU3RhbXAJVmFsdWUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDhfSUQwCQkweEZGQzAyRDE4CS8qIE1haWxib3ggOCBJZGVudGlmaWVyCUxvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIwOF9JRDEJCTB4RkZDMDJEMUMJLyogTWFpbGJveCA4IElkZW50aWZpZXIJSGlnaCBSZWdpc3RlciAqLwotCi0jZGVmaW5lCUNBTl9NQjA5X0RBVEEwCQkweEZGQzAyRDIwCS8qIE1haWxib3ggOSBEYXRhIFdvcmQgMCBbMTU6MF0JUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDlfREFUQTEJCTB4RkZDMDJEMjQJLyogTWFpbGJveCA5IERhdGEgV29yZCAxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDlfREFUQTIJCTB4RkZDMDJEMjgJLyogTWFpbGJveCA5IERhdGEgV29yZCAyIFs0NzozMl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDlfREFUQTMJCTB4RkZDMDJEMkMJLyogTWFpbGJveCA5IERhdGEgV29yZCAzIFs2Mzo0OF0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDlfTEVOR1RICQkweEZGQzAyRDMwCS8qIE1haWxib3ggOSBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjA5X1RJTUVTVEFNUAkweEZGQzAyRDM0CS8qIE1haWxib3ggOSBUaW1lIFN0YW1wCVZhbHVlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjA5X0lEMAkJMHhGRkMwMkQzOAkvKiBNYWlsYm94IDkgSWRlbnRpZmllcglMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMDlfSUQxCQkweEZGQzAyRDNDCS8qIE1haWxib3ggOSBJZGVudGlmaWVyCUhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIxMF9EQVRBMAkJMHhGRkMwMkQ0MAkvKiBNYWlsYm94IDEwIERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxMF9EQVRBMQkJMHhGRkMwMkQ0NAkvKiBNYWlsYm94IDEwIERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMTBfREFUQTIJCTB4RkZDMDJENDgJLyogTWFpbGJveCAxMCBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjEwX0RBVEEzCQkweEZGQzAyRDRDCS8qIE1haWxib3ggMTAgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxMF9MRU5HVEgJCTB4RkZDMDJENTAJLyogTWFpbGJveCAxMCBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjEwX1RJTUVTVEFNUAkweEZGQzAyRDU0CS8qIE1haWxib3ggMTAgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxMF9JRDAJCTB4RkZDMDJENTgJLyogTWFpbGJveCAxMCBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxMF9JRDEJCTB4RkZDMDJENUMJLyogTWFpbGJveCAxMCBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIxMV9EQVRBMAkJMHhGRkMwMkQ2MAkvKiBNYWlsYm94IDExIERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxMV9EQVRBMQkJMHhGRkMwMkQ2NAkvKiBNYWlsYm94IDExIERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMTFfREFUQTIJCTB4RkZDMDJENjgJLyogTWFpbGJveCAxMSBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjExX0RBVEEzCQkweEZGQzAyRDZDCS8qIE1haWxib3ggMTEgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxMV9MRU5HVEgJCTB4RkZDMDJENzAJLyogTWFpbGJveCAxMSBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjExX1RJTUVTVEFNUAkweEZGQzAyRDc0CS8qIE1haWxib3ggMTEgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxMV9JRDAJCTB4RkZDMDJENzgJLyogTWFpbGJveCAxMSBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxMV9JRDEJCTB4RkZDMDJEN0MJLyogTWFpbGJveCAxMSBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIxMl9EQVRBMAkJMHhGRkMwMkQ4MAkvKiBNYWlsYm94IDEyIERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxMl9EQVRBMQkJMHhGRkMwMkQ4NAkvKiBNYWlsYm94IDEyIERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMTJfREFUQTIJCTB4RkZDMDJEODgJLyogTWFpbGJveCAxMiBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjEyX0RBVEEzCQkweEZGQzAyRDhDCS8qIE1haWxib3ggMTIgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxMl9MRU5HVEgJCTB4RkZDMDJEOTAJLyogTWFpbGJveCAxMiBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjEyX1RJTUVTVEFNUAkweEZGQzAyRDk0CS8qIE1haWxib3ggMTIgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxMl9JRDAJCTB4RkZDMDJEOTgJLyogTWFpbGJveCAxMiBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxMl9JRDEJCTB4RkZDMDJEOUMJLyogTWFpbGJveCAxMiBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIxM19EQVRBMAkJMHhGRkMwMkRBMAkvKiBNYWlsYm94IDEzIERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxM19EQVRBMQkJMHhGRkMwMkRBNAkvKiBNYWlsYm94IDEzIERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMTNfREFUQTIJCTB4RkZDMDJEQTgJLyogTWFpbGJveCAxMyBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjEzX0RBVEEzCQkweEZGQzAyREFDCS8qIE1haWxib3ggMTMgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxM19MRU5HVEgJCTB4RkZDMDJEQjAJLyogTWFpbGJveCAxMyBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjEzX1RJTUVTVEFNUAkweEZGQzAyREI0CS8qIE1haWxib3ggMTMgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxM19JRDAJCTB4RkZDMDJEQjgJLyogTWFpbGJveCAxMyBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxM19JRDEJCTB4RkZDMDJEQkMJLyogTWFpbGJveCAxMyBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIxNF9EQVRBMAkJMHhGRkMwMkRDMAkvKiBNYWlsYm94IDE0IERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxNF9EQVRBMQkJMHhGRkMwMkRDNAkvKiBNYWlsYm94IDE0IERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMTRfREFUQTIJCTB4RkZDMDJEQzgJLyogTWFpbGJveCAxNCBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjE0X0RBVEEzCQkweEZGQzAyRENDCS8qIE1haWxib3ggMTQgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxNF9MRU5HVEgJCTB4RkZDMDJERDAJLyogTWFpbGJveCAxNCBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjE0X1RJTUVTVEFNUAkweEZGQzAyREQ0CS8qIE1haWxib3ggMTQgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxNF9JRDAJCTB4RkZDMDJERDgJLyogTWFpbGJveCAxNCBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxNF9JRDEJCTB4RkZDMDJEREMJLyogTWFpbGJveCAxNCBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIxNV9EQVRBMAkJMHhGRkMwMkRFMAkvKiBNYWlsYm94IDE1IERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxNV9EQVRBMQkJMHhGRkMwMkRFNAkvKiBNYWlsYm94IDE1IERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMTVfREFUQTIJCTB4RkZDMDJERTgJLyogTWFpbGJveCAxNSBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjE1X0RBVEEzCQkweEZGQzAyREVDCS8qIE1haWxib3ggMTUgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxNV9MRU5HVEgJCTB4RkZDMDJERjAJLyogTWFpbGJveCAxNSBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjE1X1RJTUVTVEFNUAkweEZGQzAyREY0CS8qIE1haWxib3ggMTUgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxNV9JRDAJCTB4RkZDMDJERjgJLyogTWFpbGJveCAxNSBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxNV9JRDEJCTB4RkZDMDJERkMJLyogTWFpbGJveCAxNSBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIxNl9EQVRBMAkJMHhGRkMwMkUwMAkvKiBNYWlsYm94IDE2IERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxNl9EQVRBMQkJMHhGRkMwMkUwNAkvKiBNYWlsYm94IDE2IERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMTZfREFUQTIJCTB4RkZDMDJFMDgJLyogTWFpbGJveCAxNiBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjE2X0RBVEEzCQkweEZGQzAyRTBDCS8qIE1haWxib3ggMTYgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxNl9MRU5HVEgJCTB4RkZDMDJFMTAJLyogTWFpbGJveCAxNiBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjE2X1RJTUVTVEFNUAkweEZGQzAyRTE0CS8qIE1haWxib3ggMTYgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxNl9JRDAJCTB4RkZDMDJFMTgJLyogTWFpbGJveCAxNiBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxNl9JRDEJCTB4RkZDMDJFMUMJLyogTWFpbGJveCAxNiBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIxN19EQVRBMAkJMHhGRkMwMkUyMAkvKiBNYWlsYm94IDE3IERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxN19EQVRBMQkJMHhGRkMwMkUyNAkvKiBNYWlsYm94IDE3IERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMTdfREFUQTIJCTB4RkZDMDJFMjgJLyogTWFpbGJveCAxNyBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjE3X0RBVEEzCQkweEZGQzAyRTJDCS8qIE1haWxib3ggMTcgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxN19MRU5HVEgJCTB4RkZDMDJFMzAJLyogTWFpbGJveCAxNyBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjE3X1RJTUVTVEFNUAkweEZGQzAyRTM0CS8qIE1haWxib3ggMTcgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxN19JRDAJCTB4RkZDMDJFMzgJLyogTWFpbGJveCAxNyBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxN19JRDEJCTB4RkZDMDJFM0MJLyogTWFpbGJveCAxNyBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIxOF9EQVRBMAkJMHhGRkMwMkU0MAkvKiBNYWlsYm94IDE4IERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxOF9EQVRBMQkJMHhGRkMwMkU0NAkvKiBNYWlsYm94IDE4IERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMThfREFUQTIJCTB4RkZDMDJFNDgJLyogTWFpbGJveCAxOCBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjE4X0RBVEEzCQkweEZGQzAyRTRDCS8qIE1haWxib3ggMTggRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxOF9MRU5HVEgJCTB4RkZDMDJFNTAJLyogTWFpbGJveCAxOCBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjE4X1RJTUVTVEFNUAkweEZGQzAyRTU0CS8qIE1haWxib3ggMTggVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxOF9JRDAJCTB4RkZDMDJFNTgJLyogTWFpbGJveCAxOCBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxOF9JRDEJCTB4RkZDMDJFNUMJLyogTWFpbGJveCAxOCBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIxOV9EQVRBMAkJMHhGRkMwMkU2MAkvKiBNYWlsYm94IDE5IERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxOV9EQVRBMQkJMHhGRkMwMkU2NAkvKiBNYWlsYm94IDE5IERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMTlfREFUQTIJCTB4RkZDMDJFNjgJLyogTWFpbGJveCAxOSBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjE5X0RBVEEzCQkweEZGQzAyRTZDCS8qIE1haWxib3ggMTkgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxOV9MRU5HVEgJCTB4RkZDMDJFNzAJLyogTWFpbGJveCAxOSBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjE5X1RJTUVTVEFNUAkweEZGQzAyRTc0CS8qIE1haWxib3ggMTkgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxOV9JRDAJCTB4RkZDMDJFNzgJLyogTWFpbGJveCAxOSBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIxOV9JRDEJCTB4RkZDMDJFN0MJLyogTWFpbGJveCAxOSBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIyMF9EQVRBMAkJMHhGRkMwMkU4MAkvKiBNYWlsYm94IDIwIERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyMF9EQVRBMQkJMHhGRkMwMkU4NAkvKiBNYWlsYm94IDIwIERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMjBfREFUQTIJCTB4RkZDMDJFODgJLyogTWFpbGJveCAyMCBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjIwX0RBVEEzCQkweEZGQzAyRThDCS8qIE1haWxib3ggMjAgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyMF9MRU5HVEgJCTB4RkZDMDJFOTAJLyogTWFpbGJveCAyMCBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjIwX1RJTUVTVEFNUAkweEZGQzAyRTk0CS8qIE1haWxib3ggMjAgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyMF9JRDAJCTB4RkZDMDJFOTgJLyogTWFpbGJveCAyMCBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyMF9JRDEJCTB4RkZDMDJFOUMJLyogTWFpbGJveCAyMCBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIyMV9EQVRBMAkJMHhGRkMwMkVBMAkvKiBNYWlsYm94IDIxIERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyMV9EQVRBMQkJMHhGRkMwMkVBNAkvKiBNYWlsYm94IDIxIERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMjFfREFUQTIJCTB4RkZDMDJFQTgJLyogTWFpbGJveCAyMSBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjIxX0RBVEEzCQkweEZGQzAyRUFDCS8qIE1haWxib3ggMjEgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyMV9MRU5HVEgJCTB4RkZDMDJFQjAJLyogTWFpbGJveCAyMSBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjIxX1RJTUVTVEFNUAkweEZGQzAyRUI0CS8qIE1haWxib3ggMjEgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyMV9JRDAJCTB4RkZDMDJFQjgJLyogTWFpbGJveCAyMSBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyMV9JRDEJCTB4RkZDMDJFQkMJLyogTWFpbGJveCAyMSBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIyMl9EQVRBMAkJMHhGRkMwMkVDMAkvKiBNYWlsYm94IDIyIERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyMl9EQVRBMQkJMHhGRkMwMkVDNAkvKiBNYWlsYm94IDIyIERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMjJfREFUQTIJCTB4RkZDMDJFQzgJLyogTWFpbGJveCAyMiBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjIyX0RBVEEzCQkweEZGQzAyRUNDCS8qIE1haWxib3ggMjIgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyMl9MRU5HVEgJCTB4RkZDMDJFRDAJLyogTWFpbGJveCAyMiBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjIyX1RJTUVTVEFNUAkweEZGQzAyRUQ0CS8qIE1haWxib3ggMjIgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyMl9JRDAJCTB4RkZDMDJFRDgJLyogTWFpbGJveCAyMiBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyMl9JRDEJCTB4RkZDMDJFREMJLyogTWFpbGJveCAyMiBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIyM19EQVRBMAkJMHhGRkMwMkVFMAkvKiBNYWlsYm94IDIzIERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyM19EQVRBMQkJMHhGRkMwMkVFNAkvKiBNYWlsYm94IDIzIERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMjNfREFUQTIJCTB4RkZDMDJFRTgJLyogTWFpbGJveCAyMyBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjIzX0RBVEEzCQkweEZGQzAyRUVDCS8qIE1haWxib3ggMjMgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyM19MRU5HVEgJCTB4RkZDMDJFRjAJLyogTWFpbGJveCAyMyBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjIzX1RJTUVTVEFNUAkweEZGQzAyRUY0CS8qIE1haWxib3ggMjMgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyM19JRDAJCTB4RkZDMDJFRjgJLyogTWFpbGJveCAyMyBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyM19JRDEJCTB4RkZDMDJFRkMJLyogTWFpbGJveCAyMyBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIyNF9EQVRBMAkJMHhGRkMwMkYwMAkvKiBNYWlsYm94IDI0IERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyNF9EQVRBMQkJMHhGRkMwMkYwNAkvKiBNYWlsYm94IDI0IERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMjRfREFUQTIJCTB4RkZDMDJGMDgJLyogTWFpbGJveCAyNCBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjI0X0RBVEEzCQkweEZGQzAyRjBDCS8qIE1haWxib3ggMjQgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyNF9MRU5HVEgJCTB4RkZDMDJGMTAJLyogTWFpbGJveCAyNCBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjI0X1RJTUVTVEFNUAkweEZGQzAyRjE0CS8qIE1haWxib3ggMjQgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyNF9JRDAJCTB4RkZDMDJGMTgJLyogTWFpbGJveCAyNCBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyNF9JRDEJCTB4RkZDMDJGMUMJLyogTWFpbGJveCAyNCBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIyNV9EQVRBMAkJMHhGRkMwMkYyMAkvKiBNYWlsYm94IDI1IERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyNV9EQVRBMQkJMHhGRkMwMkYyNAkvKiBNYWlsYm94IDI1IERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMjVfREFUQTIJCTB4RkZDMDJGMjgJLyogTWFpbGJveCAyNSBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjI1X0RBVEEzCQkweEZGQzAyRjJDCS8qIE1haWxib3ggMjUgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyNV9MRU5HVEgJCTB4RkZDMDJGMzAJLyogTWFpbGJveCAyNSBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjI1X1RJTUVTVEFNUAkweEZGQzAyRjM0CS8qIE1haWxib3ggMjUgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyNV9JRDAJCTB4RkZDMDJGMzgJLyogTWFpbGJveCAyNSBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyNV9JRDEJCTB4RkZDMDJGM0MJLyogTWFpbGJveCAyNSBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIyNl9EQVRBMAkJMHhGRkMwMkY0MAkvKiBNYWlsYm94IDI2IERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyNl9EQVRBMQkJMHhGRkMwMkY0NAkvKiBNYWlsYm94IDI2IERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMjZfREFUQTIJCTB4RkZDMDJGNDgJLyogTWFpbGJveCAyNiBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjI2X0RBVEEzCQkweEZGQzAyRjRDCS8qIE1haWxib3ggMjYgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyNl9MRU5HVEgJCTB4RkZDMDJGNTAJLyogTWFpbGJveCAyNiBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjI2X1RJTUVTVEFNUAkweEZGQzAyRjU0CS8qIE1haWxib3ggMjYgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyNl9JRDAJCTB4RkZDMDJGNTgJLyogTWFpbGJveCAyNiBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyNl9JRDEJCTB4RkZDMDJGNUMJLyogTWFpbGJveCAyNiBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIyN19EQVRBMAkJMHhGRkMwMkY2MAkvKiBNYWlsYm94IDI3IERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyN19EQVRBMQkJMHhGRkMwMkY2NAkvKiBNYWlsYm94IDI3IERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMjdfREFUQTIJCTB4RkZDMDJGNjgJLyogTWFpbGJveCAyNyBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjI3X0RBVEEzCQkweEZGQzAyRjZDCS8qIE1haWxib3ggMjcgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyN19MRU5HVEgJCTB4RkZDMDJGNzAJLyogTWFpbGJveCAyNyBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjI3X1RJTUVTVEFNUAkweEZGQzAyRjc0CS8qIE1haWxib3ggMjcgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyN19JRDAJCTB4RkZDMDJGNzgJLyogTWFpbGJveCAyNyBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyN19JRDEJCTB4RkZDMDJGN0MJLyogTWFpbGJveCAyNyBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIyOF9EQVRBMAkJMHhGRkMwMkY4MAkvKiBNYWlsYm94IDI4IERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyOF9EQVRBMQkJMHhGRkMwMkY4NAkvKiBNYWlsYm94IDI4IERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMjhfREFUQTIJCTB4RkZDMDJGODgJLyogTWFpbGJveCAyOCBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjI4X0RBVEEzCQkweEZGQzAyRjhDCS8qIE1haWxib3ggMjggRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyOF9MRU5HVEgJCTB4RkZDMDJGOTAJLyogTWFpbGJveCAyOCBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjI4X1RJTUVTVEFNUAkweEZGQzAyRjk0CS8qIE1haWxib3ggMjggVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyOF9JRDAJCTB4RkZDMDJGOTgJLyogTWFpbGJveCAyOCBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyOF9JRDEJCTB4RkZDMDJGOUMJLyogTWFpbGJveCAyOCBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIyOV9EQVRBMAkJMHhGRkMwMkZBMAkvKiBNYWlsYm94IDI5IERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyOV9EQVRBMQkJMHhGRkMwMkZBNAkvKiBNYWlsYm94IDI5IERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMjlfREFUQTIJCTB4RkZDMDJGQTgJLyogTWFpbGJveCAyOSBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjI5X0RBVEEzCQkweEZGQzAyRkFDCS8qIE1haWxib3ggMjkgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyOV9MRU5HVEgJCTB4RkZDMDJGQjAJLyogTWFpbGJveCAyOSBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjI5X1RJTUVTVEFNUAkweEZGQzAyRkI0CS8qIE1haWxib3ggMjkgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyOV9JRDAJCTB4RkZDMDJGQjgJLyogTWFpbGJveCAyOSBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIyOV9JRDEJCTB4RkZDMDJGQkMJLyogTWFpbGJveCAyOSBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIzMF9EQVRBMAkJMHhGRkMwMkZDMAkvKiBNYWlsYm94IDMwIERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIzMF9EQVRBMQkJMHhGRkMwMkZDNAkvKiBNYWlsYm94IDMwIERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMzBfREFUQTIJCTB4RkZDMDJGQzgJLyogTWFpbGJveCAzMCBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjMwX0RBVEEzCQkweEZGQzAyRkNDCS8qIE1haWxib3ggMzAgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIzMF9MRU5HVEgJCTB4RkZDMDJGRDAJLyogTWFpbGJveCAzMCBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjMwX1RJTUVTVEFNUAkweEZGQzAyRkQ0CS8qIE1haWxib3ggMzAgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIzMF9JRDAJCTB4RkZDMDJGRDgJLyogTWFpbGJveCAzMCBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIzMF9JRDEJCTB4RkZDMDJGREMJLyogTWFpbGJveCAzMCBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotI2RlZmluZQlDQU5fTUIzMV9EQVRBMAkJMHhGRkMwMkZFMAkvKiBNYWlsYm94IDMxIERhdGEgV29yZAkwIFsxNTowXSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIzMV9EQVRBMQkJMHhGRkMwMkZFNAkvKiBNYWlsYm94IDMxIERhdGEgV29yZAkxIFszMToxNl0gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0FOX01CMzFfREFUQTIJCTB4RkZDMDJGRTgJLyogTWFpbGJveCAzMSBEYXRhIFdvcmQJMiBbNDc6MzJdIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjMxX0RBVEEzCQkweEZGQzAyRkVDCS8qIE1haWxib3ggMzEgRGF0YSBXb3JkCTMgWzYzOjQ4XSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIzMV9MRU5HVEgJCTB4RkZDMDJGRjAJLyogTWFpbGJveCAzMSBEYXRhIExlbmd0aCBDb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCUNBTl9NQjMxX1RJTUVTVEFNUAkweEZGQzAyRkY0CS8qIE1haWxib3ggMzEgVGltZSBTdGFtcCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIzMV9JRDAJCTB4RkZDMDJGRjgJLyogTWFpbGJveCAzMSBJZGVudGlmaWVyIExvdyBSZWdpc3RlciAqLwotI2RlZmluZQlDQU5fTUIzMV9JRDEJCTB4RkZDMDJGRkMJLyogTWFpbGJveCAzMSBJZGVudGlmaWVyIEhpZ2ggUmVnaXN0ZXIgKi8KLQotLyogQ0FOIE1haWxib3ggQXJlYSBNYWNyb3MgKi8KLSNkZWZpbmUJQ0FOX01CX0lEMSh4KQkJKENBTl9NQjAwX0lEMSsoKHgpKjB4MjApKQotI2RlZmluZQlDQU5fTUJfSUQwKHgpCQkoQ0FOX01CMDBfSUQwKygoeCkqMHgyMCkpCi0jZGVmaW5lCUNBTl9NQl9USU1FU1RBTVAoeCkJKENBTl9NQjAwX1RJTUVTVEFNUCsoKHgpKjB4MjApKQotI2RlZmluZQlDQU5fTUJfTEVOR1RIKHgpCShDQU5fTUIwMF9MRU5HVEgrKCh4KSoweDIwKSkKLSNkZWZpbmUJQ0FOX01CX0RBVEEzKHgpCQkoQ0FOX01CMDBfREFUQTMrKCh4KSoweDIwKSkKLSNkZWZpbmUJQ0FOX01CX0RBVEEyKHgpCQkoQ0FOX01CMDBfREFUQTIrKCh4KSoweDIwKSkKLSNkZWZpbmUJQ0FOX01CX0RBVEExKHgpCQkoQ0FOX01CMDBfREFUQTErKCh4KSoweDIwKSkKLSNkZWZpbmUJQ0FOX01CX0RBVEEwKHgpCQkoQ0FOX01CMDBfREFUQTArKCh4KSoweDIwKSkKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLS8qIFN5c3RlbSBNTVIgUmVnaXN0ZXIgQml0cyBhbmQJTWFjcm9zICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0vKiBTV1JTVCBNYXNrICovCi0jZGVmaW5lCVNZU1RFTV9SRVNFVAkweDAwMDcJLyogSW5pdGlhdGVzIEEgU3lzdGVtIFNvZnR3YXJlIFJlc2V0ICovCi0jZGVmaW5lCURPVUJMRV9GQVVMVAkweDAwMDgJLyogQ29yZQlEb3VibGUgRmF1bHQgQ2F1c2VzIFJlc2V0ICovCi0jZGVmaW5lCVJFU0VUX0RPVUJMRQkweDIwMDAJLyogU1cgUmVzZXQgR2VuZXJhdGVkIEJ5IENvcmUgRG91YmxlLUZhdWx0ICovCi0jZGVmaW5lCVJFU0VUX1dET0cJCTB4NDAwMAkvKiBTVyBSZXNldCBHZW5lcmF0ZWQgQnkgV2F0Y2hkb2cgVGltZXIgKi8KLSNkZWZpbmUJUkVTRVRfU09GVFdBUkUJMHg4MDAwCS8qIFNXIFJlc2V0IE9jY3VycmVkIFNpbmNlIExhc3QJUmVhZCBPZglTV1JTVCAqLwotCi0vKiBTWVNDUiBNYXNrcwkJCQkJCQkJCQkJCQkgKi8KLSNkZWZpbmUJQk1PREUJCQkweDAwMDYJLyogQm9vdAlNb2RlIC0gTGF0Y2hlZCBEdXJpbmcgSFcgUmVzZXQgRnJvbSBNb2RlIFBpbnMgKi8KLSNkZWZpbmUJTk9CT09UCQkJMHgwMDEwCS8qIEV4ZWN1dGUgRnJvbQlMMSBvciBBU1lOQyBCYW5rIDAgV2hlbglCTU9ERSA9CTAgKi8KLQotCi0vKiAqKioqKioqKioqKioqICBTWVNURU0gSU5URVJSVVBUIENPTlRST0xMRVIgTUFTS1MgKioqKioqKioqKioqKioqKiogKi8KLQotLyogUGVyaXBoZXJhbCBNYXNrcyBGb3IJU0lDMF9JU1IsIFNJQzBfSVdSLCBTSUMwX0lNQVNLICovCi0jZGVmaW5lCVBMTF9XQUtFVVBfSVJRCQkweDAwMDAwMDAxCS8qIFBMTCBXYWtldXAgSW50ZXJydXB0CVJlcXVlc3QgKi8KLSNkZWZpbmUJRE1BQzBfRVJSX0lSUQkJMHgwMDAwMDAwMgkvKiBETUEgQ29udHJvbGxlciAwIEVycm9yIEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCVBQSV9FUlJfSVJRCQkweDAwMDAwMDA0CS8qIFBQSSBFcnJvciBJbnRlcnJ1cHQgUmVxdWVzdCAqLwotI2RlZmluZQlTUE9SVDBfRVJSX0lSUQkJMHgwMDAwMDAwOAkvKiBTUE9SVDAgRXJyb3IJSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUJU1BPUlQxX0VSUl9JUlEJCTB4MDAwMDAwMTAJLyogU1BPUlQxIEVycm9yCUludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCVNQSTBfRVJSX0lSUQkJMHgwMDAwMDAyMAkvKiBTUEkwCUVycm9yIEludGVycnVwdAlSZXF1ZXN0ICovCi0jZGVmaW5lCVVBUlQwX0VSUl9JUlEJCTB4MDAwMDAwNDAJLyogVUFSVDAgRXJyb3IgSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUJUlRDX0lSUQkJCTB4MDAwMDAwODAJLyogUmVhbC1UaW1lIENsb2NrIEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCURNQTBfSVJRCQkweDAwMDAwMTAwCS8qIERNQSBDaGFubmVsIDAgKFBQSSkgSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUJRE1BMV9JUlEJCTB4MDAwMDAyMDAJLyogRE1BIENoYW5uZWwgMSAoU1BPUlQwIFJYKSBJbnRlcnJ1cHQgUmVxdWVzdCAqLwotI2RlZmluZQlETUEyX0lSUQkJMHgwMDAwMDQwMAkvKiBETUEgQ2hhbm5lbCAyIChTUE9SVDAgVFgpIEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCURNQTNfSVJRCQkweDAwMDAwODAwCS8qIERNQSBDaGFubmVsIDMgKFNQT1JUMSBSWCkgSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUJRE1BNF9JUlEJCTB4MDAwMDEwMDAJLyogRE1BIENoYW5uZWwgNCAoU1BPUlQxIFRYKSBJbnRlcnJ1cHQgUmVxdWVzdCAqLwotI2RlZmluZQlETUE1X0lSUQkJMHgwMDAwMjAwMAkvKiBETUEgQ2hhbm5lbCA1IChTUEkpIEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCURNQTZfSVJRCQkweDAwMDA0MDAwCS8qIERNQSBDaGFubmVsIDYgKFVBUlQgUlgpIEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCURNQTdfSVJRCQkweDAwMDA4MDAwCS8qIERNQSBDaGFubmVsIDcgKFVBUlQgVFgpIEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCVRJTUVSMF9JUlEJCTB4MDAwMTAwMDAJLyogVGltZXIgMCBJbnRlcnJ1cHQgUmVxdWVzdCAqLwotI2RlZmluZQlUSU1FUjFfSVJRCQkweDAwMDIwMDAwCS8qIFRpbWVyIDEgSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUJVElNRVIyX0lSUQkJMHgwMDA0MDAwMAkvKiBUaW1lciAyIEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCVBGQV9JUlEJCQkweDAwMDgwMDAwCS8qIFByb2dyYW1tYWJsZQlGbGFnIEludGVycnVwdCBSZXF1ZXN0IEEgKi8KLSNkZWZpbmUJUEZCX0lSUQkJCTB4MDAxMDAwMDAJLyogUHJvZ3JhbW1hYmxlCUZsYWcgSW50ZXJydXB0IFJlcXVlc3QgQiAqLwotI2RlZmluZQlNRE1BMF8wX0lSUQkJMHgwMDIwMDAwMAkvKiBNZW1ETUEwIFN0cmVhbSAwIEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCU1ETUEwXzFfSVJRCQkweDAwNDAwMDAwCS8qIE1lbURNQTAgU3RyZWFtIDEgSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUJV0RPR19JUlEJCTB4MDA4MDAwMDAJLyogU29mdHdhcmUgV2F0Y2hkb2cgVGltZXIgSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUJRE1BQzFfRVJSX0lSUQkJMHgwMTAwMDAwMAkvKiBETUEgQ29udHJvbGxlciAxIEVycm9yIEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCVNQT1JUMl9FUlJfSVJRCQkweDAyMDAwMDAwCS8qIFNQT1JUMiBFcnJvcglJbnRlcnJ1cHQgUmVxdWVzdCAqLwotI2RlZmluZQlTUE9SVDNfRVJSX0lSUQkJMHgwNDAwMDAwMAkvKiBTUE9SVDMgRXJyb3IJSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUJTVhWUl9TRF9JUlEJCTB4MDgwMDAwMDAJLyogTVhWUglTeW5jaHJvbm91cyBEYXRhIEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCVNQSTFfRVJSX0lSUQkJMHgxMDAwMDAwMAkvKiBTUEkxCUVycm9yIEludGVycnVwdAlSZXF1ZXN0ICovCi0jZGVmaW5lCVNQSTJfRVJSX0lSUQkJMHgyMDAwMDAwMAkvKiBTUEkyCUVycm9yIEludGVycnVwdAlSZXF1ZXN0ICovCi0jZGVmaW5lCVVBUlQxX0VSUl9JUlEJCTB4NDAwMDAwMDAJLyogVUFSVDEgRXJyb3IgSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUJVUFSVDJfRVJSX0lSUQkJMHg4MDAwMDAwMAkvKiBVQVJUMiBFcnJvciBJbnRlcnJ1cHQgUmVxdWVzdCAqLwotCi0vKiB0aGUgZm9sbG93aW5nIGFyZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUJRE1BMF9FUlJfSVJRCQlETUFDMF9FUlJfSVJRCi0jZGVmaW5lCURNQTFfRVJSX0lSUQkJRE1BQzFfRVJSX0lSUQotCi0KLS8qIFBlcmlwaGVyYWwgTWFza3MgRm9yCVNJQ19JU1IxLCBTSUNfSVdSMSwgU0lDX0lNQVNLMQkgKi8KLSNkZWZpbmUJQ0FOX0VSUl9JUlEJCQkweDAwMDAwMDAxCS8qIENBTiBFcnJvciBJbnRlcnJ1cHQgUmVxdWVzdCAqLwotI2RlZmluZQlETUE4X0lSUQkJCTB4MDAwMDAwMDIJLyogRE1BIENoYW5uZWwgOCAoU1BPUlQyIFJYKSBJbnRlcnJ1cHQgUmVxdWVzdCAqLwotI2RlZmluZQlETUE5X0lSUQkJCTB4MDAwMDAwMDQJLyogRE1BIENoYW5uZWwgOSAoU1BPUlQyIFRYKSBJbnRlcnJ1cHQgUmVxdWVzdCAqLwotI2RlZmluZQlETUExMF9JUlEJCQkweDAwMDAwMDA4CS8qIERNQSBDaGFubmVsIDEwIChTUE9SVDMgUlgpIEludGVycnVwdAlSZXF1ZXN0ICovCi0jZGVmaW5lCURNQTExX0lSUQkJCTB4MDAwMDAwMTAJLyogRE1BIENoYW5uZWwgMTEgKFNQT1JUMyBUWCkgSW50ZXJydXB0CVJlcXVlc3QgKi8KLSNkZWZpbmUJRE1BMTJfSVJRCQkJMHgwMDAwMDAyMAkvKiBETUEgQ2hhbm5lbCAxMiBJbnRlcnJ1cHQgUmVxdWVzdCAqLwotI2RlZmluZQlETUExM19JUlEJCQkweDAwMDAwMDQwCS8qIERNQSBDaGFubmVsIDEzIEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCURNQTE0X0lSUQkJCTB4MDAwMDAwODAJLyogRE1BIENoYW5uZWwgMTQgKFNQSTEpIEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCURNQTE1X0lSUQkJCTB4MDAwMDAxMDAJLyogRE1BIENoYW5uZWwgMTUgKFNQSTIpIEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCURNQTE2X0lSUQkJCTB4MDAwMDAyMDAJLyogRE1BIENoYW5uZWwgMTYgKFVBUlQxIFJYKSBJbnRlcnJ1cHQgUmVxdWVzdCAqLwotI2RlZmluZQlETUExN19JUlEJCQkweDAwMDAwNDAwCS8qIERNQSBDaGFubmVsIDE3IChVQVJUMSBUWCkgSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUJRE1BMThfSVJRCQkJMHgwMDAwMDgwMAkvKiBETUEgQ2hhbm5lbCAxOCAoVUFSVDIgUlgpIEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCURNQTE5X0lSUQkJCTB4MDAwMDEwMDAJLyogRE1BIENoYW5uZWwgMTkgKFVBUlQyIFRYKSBJbnRlcnJ1cHQgUmVxdWVzdCAqLwotI2RlZmluZQlUV0kwX0lSUQkJCTB4MDAwMDIwMDAJLyogVFdJMAlJbnRlcnJ1cHQgUmVxdWVzdCAqLwotI2RlZmluZQlUV0kxX0lSUQkJCTB4MDAwMDQwMDAJLyogVFdJMQlJbnRlcnJ1cHQgUmVxdWVzdCAqLwotI2RlZmluZQlDQU5fUlhfSVJRCQkJMHgwMDAwODAwMAkvKiBDQU4gUmVjZWl2ZSBJbnRlcnJ1cHQgUmVxdWVzdCAqLwotI2RlZmluZQlDQU5fVFhfSVJRCQkJMHgwMDAxMDAwMAkvKiBDQU4gVHJhbnNtaXQJSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUJTURNQTFfMF9JUlEJCQkweDAwMDIwMDAwCS8qIE1lbURNQTEgU3RyZWFtIDAgSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUJTURNQTFfMV9JUlEJCQkweDAwMDQwMDAwCS8qIE1lbURNQTEgU3RyZWFtIDEgSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUJTVhWUl9TVEFUX0lSUQkJCTB4MDAwODAwMDAJLyogTVhWUglTdGF0dXMgSW50ZXJydXB0IFJlcXVlc3QgKi8KLSNkZWZpbmUJTVhWUl9DTV9JUlEJCQkweDAwMTAwMDAwCS8qIE1YVlIJQ29udHJvbAlNZXNzYWdlCUludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lCU1YVlJfQVBfSVJRCQkJMHgwMDIwMDAwMAkvKiBNWFZSCUFzeW5jaHJvbm91cyBQYWNrZXQgSW50ZXJydXB0ICovCi0KLS8qIHRoZSBmb2xsb3dpbmcgYXJlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwotI2RlZmluZQlNRE1BMF9JUlEJCU1ETUExXzBfSVJRCi0jZGVmaW5lCU1ETUExX0lSUQkJTURNQTFfMV9JUlEKLQotI2lmZGVmIF9NSVNSQV9SVUxFUwotI2RlZmluZQlfTUYxNSAweEZ1Ci0jZGVmaW5lCV9NRjcgN3UKLSNlbHNlCi0jZGVmaW5lCV9NRjE1IDB4RgotI2RlZmluZQlfTUY3IDcKLSNlbmRpZiAvKiBfTUlTUkFfUlVMRVMgKi8KLQotLyogU0lDX0lNQVNLeCBNYXNrcwkJCQkJCQkJCQkJICovCi0jZGVmaW5lCVNJQ19VTk1BU0tfQUxMCTB4MDAwMDAwMDAJCQkJCS8qIFVubWFzayBhbGwgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzICovCi0jZGVmaW5lCVNJQ19NQVNLX0FMTAkweEZGRkZGRkZGCQkJCQkvKiBNYXNrCWFsbCBwZXJpcGhlcmFsIGludGVycnVwdHMgKi8KLSNpZmRlZiBfTUlTUkFfUlVMRVMKLSNkZWZpbmUJU0lDX01BU0soeCkJCSgxIDw8ICgoeCkmMHgxRnUpKQkJCQkJLyogTWFzawlQZXJpcGhlcmFsICN4IGludGVycnVwdCAqLwotI2RlZmluZQlTSUNfVU5NQVNLKHgpCSgweEZGRkZGRkZGdSBeICgxIDw8ICgoeCkmMHgxRnUpKSkJLyogVW5tYXNrIFBlcmlwaGVyYWwgI3gJaW50ZXJydXB0ICovCi0jZWxzZQotI2RlZmluZQlTSUNfTUFTSyh4KQkJKDEgPDwgKCh4KSYweDFGKSkJCQkJCS8qIE1hc2sJUGVyaXBoZXJhbCAjeCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUJU0lDX1VOTUFTSyh4KQkoMHhGRkZGRkZGRiBeICgxIDw8ICgoeCkmMHgxRikpKQkvKiBVbm1hc2sgUGVyaXBoZXJhbCAjeAlpbnRlcnJ1cHQgKi8KLSNlbmRpZiAvKiBfTUlTUkFfUlVMRVMgKi8KLQotLyogU0lDX0lXUnggTWFza3MJCQkJCQkJCQkJCSAqLwotI2RlZmluZQlJV1JfRElTQUJMRV9BTEwJMHgwMDAwMDAwMAkJCQkJLyogV2FrZXVwIERpc2FibGUgYWxsIHBlcmlwaGVyYWxzICovCi0jZGVmaW5lCUlXUl9FTkFCTEVfQUxMCTB4RkZGRkZGRkYJCQkJCS8qIFdha2V1cCBFbmFibGUgYWxsIHBlcmlwaGVyYWxzICovCi0jaWZkZWYgX01JU1JBX1JVTEVTCi0jZGVmaW5lCUlXUl9FTkFCTEUoeCkJKDEgPDwgKCh4KSYweDFGdSkpCQkJCQkvKiBXYWtldXAgRW5hYmxlIFBlcmlwaGVyYWwgI3ggKi8KLSNkZWZpbmUJSVdSX0RJU0FCTEUoeCkJKDB4RkZGRkZGRkZ1IF4gKDEgPDwgKCh4KSYweDFGdSkpKQkvKiBXYWtldXAgRGlzYWJsZSBQZXJpcGhlcmFsICN4ICovCi0jZWxzZQotI2RlZmluZQlJV1JfRU5BQkxFKHgpCSgxIDw8ICgoeCkmMHgxRikpCQkJCQkvKiBXYWtldXAgRW5hYmxlIFBlcmlwaGVyYWwgI3ggKi8KLSNkZWZpbmUJSVdSX0RJU0FCTEUoeCkJKDB4RkZGRkZGRkYgXiAoMSA8PCAoKHgpJjB4MUYpKSkJLyogV2FrZXVwIERpc2FibGUgUGVyaXBoZXJhbCAjeCAqLwotI2VuZGlmIC8qIF9NSVNSQV9SVUxFUyAqLwotCi0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFVBUlQgQ09OVFJPTExFUiBNQVNLUyAqKioqKioqKioqKioqKioqKioqKioqICovCi0vKiBVQVJUeF9MQ1IgUmVnaXN0ZXIgKi8KLSNpZmRlZiBfTUlTUkFfUlVMRVMKLSNkZWZpbmUJV0xTKHgpCQkoKCh4KS01dSkgJiAweDAzdSkJLyogV29yZAlMZW5ndGggU2VsZWN0ICovCi0jZWxzZQotI2RlZmluZQlXTFMoeCkJCSgoKHgpLTUpICYgMHgwMykJLyogV29yZAlMZW5ndGggU2VsZWN0ICovCi0jZW5kaWYgLyogX01JU1JBX1JVTEVTICovCi0jZGVmaW5lCVNUQgkJCTB4MDQJCQkJLyogU3RvcAlCaXRzICovCi0jZGVmaW5lCVBFTgkJCTB4MDgJCQkJLyogUGFyaXR5IEVuYWJsZSAqLwotI2RlZmluZQlFUFMJCQkweDEwCQkJCS8qIEV2ZW4JUGFyaXR5IFNlbGVjdCAqLwotI2RlZmluZQlTVFAJCQkweDIwCQkJCS8qIFN0aWNrIFBhcml0eSAqLwotI2RlZmluZQlTQgkJCTB4NDAJCQkJLyogU2V0IEJyZWFrICovCi0jZGVmaW5lCURMQUIJCTB4ODAJCQkJLyogRGl2aXNvciBMYXRjaCBBY2Nlc3MgKi8KLQotI2RlZmluZQlETEFCX1AJCTB4MDcKLSNkZWZpbmUJU0JfUAkJMHgwNgotI2RlZmluZQlTVFBfUAkJMHgwNQotI2RlZmluZQlFUFNfUAkJMHgwNAotI2RlZmluZQlQRU5fUAkJMHgwMwotI2RlZmluZQlTVEJfUAkJMHgwMgotI2RlZmluZQlXTFNfUDEJCTB4MDEKLSNkZWZpbmUJV0xTX1AwCQkweDAwCi0KLS8qIFVBUlR4X01DUiBSZWdpc3RlciAqLwotI2RlZmluZQlMT09QX0VOQQkweDEwCS8qIExvb3BiYWNrIE1vZGUgRW5hYmxlICovCi0jZGVmaW5lCUxPT1BfRU5BX1AJMHgwNAotLyogRGVwcmVjYXRlZCBVQVJUeF9NQ1IJTWFzawkJCSAqLwotCi0vKiBVQVJUeF9MU1IgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJRFIJCQkweDAxCS8qIERhdGEJUmVhZHkgKi8KLSNkZWZpbmUJT0UJCQkweDAyCS8qIE92ZXJydW4gRXJyb3IgKi8KLSNkZWZpbmUJUEUJCQkweDA0CS8qIFBhcml0eSBFcnJvciAqLwotI2RlZmluZQlGRQkJCTB4MDgJLyogRnJhbWluZyBFcnJvciAqLwotI2RlZmluZQlCSQkJCTB4MTAJLyogQnJlYWsgSW50ZXJydXB0ICovCi0jZGVmaW5lCVRIUkUJCTB4MjAJLyogVEhSIEVtcHR5ICovCi0jZGVmaW5lCVRFTVQJCTB4NDAJLyogVFNSIGFuZCBVQVJUX1RIUiBFbXB0eSAqLwotCi0jZGVmaW5lCVRFTVBfUAkJMHgwNgotI2RlZmluZQlUSFJFX1AJCTB4MDUKLSNkZWZpbmUJQklfUAkJMHgwNAotI2RlZmluZQlGRV9QCQkweDAzCi0jZGVmaW5lCVBFX1AJCTB4MDIKLSNkZWZpbmUJT0VfUAkJMHgwMQotI2RlZmluZQlEUl9QCQkweDAwCi0KLS8qIFVBUlR4X0lFUiBSZWdpc3RlciAqLwotI2RlZmluZQlFUkJGSQkJMHgwMQkJLyogRW5hYmxlIFJlY2VpdmUgQnVmZmVyIEZ1bGwgSW50ZXJydXB0ICovCi0jZGVmaW5lCUVUQkVJCQkweDAyCQkvKiBFbmFibGUgVHJhbnNtaXQgQnVmZmVyIEVtcHR5CUludGVycnVwdCAqLwotI2RlZmluZQlFTFNJCQkweDA0CQkvKiBFbmFibGUgUlggU3RhdHVzIEludGVycnVwdCAqLwotCi0jZGVmaW5lCUVMU0lfUAkJMHgwMgotI2RlZmluZQlFVEJFSV9QCQkweDAxCi0jZGVmaW5lCUVSQkZJX1AJCTB4MDAKLQotLyogVUFSVHhfSUlSIFJlZ2lzdGVyICovCi0jZGVmaW5lCU5JTlQJCTB4MDEKLSNkZWZpbmUJU1RBVFVTX1AxCTB4MDIKLSNkZWZpbmUJU1RBVFVTX1AwCTB4MDEKLSNkZWZpbmUJTklOVF9QCQkweDAwCi0KLS8qIFVBUlR4X0dDVEwgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVUNFTgkJMHgwMQkJLyogRW5hYmxlIFVBUlR4CUNsb2NrcyAqLwotI2RlZmluZQlJUkVOCQkweDAyCQkvKiBFbmFibGUgSXJEQSBNb2RlICovCi0jZGVmaW5lCVRQT0xDCQkweDA0CQkvKiBJckRBCVRYIFBvbGFyaXR5IENoYW5nZSAqLwotI2RlZmluZQlSUE9MQwkJMHgwOAkJLyogSXJEQQlSWCBQb2xhcml0eSBDaGFuZ2UgKi8KLSNkZWZpbmUJRlBFCQkJMHgxMAkJLyogRm9yY2UgUGFyaXR5CUVycm9yIE9uIFRyYW5zbWl0ICovCi0jZGVmaW5lCUZGRQkJCTB4MjAJCS8qIEZvcmNlIEZyYW1pbmcgRXJyb3IgT24gVHJhbnNtaXQgKi8KLQotI2RlZmluZQlGRkVfUAkJMHgwNQotI2RlZmluZQlGUEVfUAkJMHgwNAotI2RlZmluZQlSUE9MQ19QCQkweDAzCi0jZGVmaW5lCVRQT0xDX1AJCTB4MDIKLSNkZWZpbmUJSVJFTl9QCQkweDAxCi0jZGVmaW5lCVVDRU5fUAkJMHgwMAotCi0KLS8qICAqKioqKioqKiogIFBBUkFMTEVMCVBFUklQSEVSQUwgSU5URVJGQUNFIChQUEkpIE1BU0tTICoqKioqKioqKioqKioqKiogICAqLwotLyogIFBQSV9DT05UUk9MCU1hc2tzCSAgICAgICovCi0jZGVmaW5lCVBPUlRfRU4JCTB4MDAwMQkvKiBQUEkgUG9ydCBFbmFibGUgICovCi0jZGVmaW5lCVBPUlRfRElSCTB4MDAwMgkvKiBQUEkgUG9ydCBEaXJlY3Rpb24JICAgICovCi0jZGVmaW5lCVhGUl9UWVBFCTB4MDAwQwkvKiBQUEkgVHJhbnNmZXIJVHlwZSAgKi8KLSNkZWZpbmUJUE9SVF9DRkcJMHgwMDMwCS8qIFBQSSBQb3J0IENvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUJRkxEX1NFTAkJMHgwMDQwCS8qIFBQSSBBY3RpdmUgRmllbGQgU2VsZWN0ICovCi0jZGVmaW5lCVBBQ0tfRU4JCTB4MDA4MAkvKiBQUEkgUGFja2luZyBNb2RlICovCi0vKiBwcmV2aW91cyB2ZXJzaW9ucyBvZglkZWZCRjUzOS5oIGVycm9uZW91c2x5IGluY2x1ZGVkCURNQTMyIChQUEkgMzItYml0IERNQSBFbmFibGUpICovCi0jZGVmaW5lCVNLSVBfRU4JCTB4MDIwMAkvKiBQUEkgU2tpcCBFbGVtZW50IEVuYWJsZSAqLwotI2RlZmluZQlTS0lQX0VPCQkweDA0MDAJLyogUFBJIFNraXAgRXZlbi9PZGQgRWxlbWVudHMgKi8KLSNkZWZpbmUJRExFTkdUSAkJMHgzODAwCS8qIFBQSSBEYXRhIExlbmd0aCAgKi8KLSNkZWZpbmUJRExFTl84CQkweDAJICAgICAvKglQUEkgRGF0YSBMZW5ndGgJbWFzayBmb3IgRExFTj04ICovCi0jZGVmaW5lCURMRU5fMTAJCTB4MDgwMAkJLyogRGF0YQlMZW5ndGggPSAxMCBCaXRzICovCi0jZGVmaW5lCURMRU5fMTEJCTB4MTAwMAkJLyogRGF0YQlMZW5ndGggPSAxMSBCaXRzICovCi0jZGVmaW5lCURMRU5fMTIJCTB4MTgwMAkJLyogRGF0YQlMZW5ndGggPSAxMiBCaXRzICovCi0jZGVmaW5lCURMRU5fMTMJCTB4MjAwMAkJLyogRGF0YQlMZW5ndGggPSAxMyBCaXRzICovCi0jZGVmaW5lCURMRU5fMTQJCTB4MjgwMAkJLyogRGF0YQlMZW5ndGggPSAxNCBCaXRzICovCi0jZGVmaW5lCURMRU5fMTUJCTB4MzAwMAkJLyogRGF0YQlMZW5ndGggPSAxNSBCaXRzICovCi0jZGVmaW5lCURMRU5fMTYJCTB4MzgwMAkJLyogRGF0YQlMZW5ndGggPSAxNiBCaXRzICovCi0jaWZkZWYgX01JU1JBX1JVTEVTCi0jZGVmaW5lCURMRU4oeCkJCSgoKCh4KS05dSkgJiAweDA3dSkgPDwgMTEpICAvKiBQUEkgRGF0YQlMZW5ndGggKG9ubHkgd29ya3MgZm9yIHg9MTAtLT54PTE2KSAqLwotI2Vsc2UKLSNkZWZpbmUJRExFTih4KQkJKCgoKHgpLTkpICYgMHgwNykgPDwgMTEpICAvKiBQUEkgRGF0YSBMZW5ndGggKG9ubHkgd29ya3MgZm9yIHg9MTAtLT54PTE2KSAqLwotI2VuZGlmIC8qIF9NSVNSQV9SVUxFUyAqLwotI2RlZmluZQlQT0wJCQkweEMwMDAJLyogUFBJIFNpZ25hbCBQb2xhcml0aWVzICAgICAgICovCi0jZGVmaW5lCVBPTEMJCTB4NDAwMAkJLyogUFBJIENsb2NrIFBvbGFyaXR5ICovCi0jZGVmaW5lCVBPTFMJCTB4ODAwMAkJLyogUFBJIEZyYW1lIFN5bmMgUG9sYXJpdHkgKi8KLQotCi0vKiBQUElfU1RBVFVTIE1hc2tzCQkJCQkgICAgICovCi0jZGVmaW5lCUZMRAkJCTB4MDQwMAkvKiBGaWVsZCBJbmRpY2F0b3IgICAqLwotI2RlZmluZQlGVF9FUlIJCTB4MDgwMAkvKiBGcmFtZSBUcmFjayBFcnJvciAqLwotI2RlZmluZQlPVlIJCQkweDEwMDAJLyogRklGTwlPdmVyZmxvdyBFcnJvciAqLwotI2RlZmluZQlVTkRSCQkweDIwMDAJLyogRklGTwlVbmRlcnJ1biBFcnJvciAqLwotI2RlZmluZQlFUlJfREVUCQkweDQwMDAJLyogRXJyb3IgRGV0ZWN0ZWQgSW5kaWNhdG9yICovCi0jZGVmaW5lCUVSUl9OQ09SCTB4ODAwMAkvKiBFcnJvciBOb3QgQ29ycmVjdGVkIEluZGljYXRvciAqLwotCi0KLS8qICoqKioqKioqKiogIERNQSBDT05UUk9MTEVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogRE1BeF9QRVJJUEhFUkFMX01BUCwJTURNQV95eV9QRVJJUEhFUkFMX01BUCBNYXNrcyAqLwotCi0jZGVmaW5lCUNUWVBFCQkJMHgwMDQwCS8qIERNQSBDaGFubmVsIFR5cGUgSW5kaWNhdG9yICovCi0jZGVmaW5lCUNUWVBFX1AJCQkweDYJCS8qIERNQSBDaGFubmVsIFR5cGUgSW5kaWNhdG9yIEJJVCBQT1NJVElPTiAqLwotI2RlZmluZQlQQ0FQOAkJCTB4MDA4MAkvKiBETUEgOC1iaXQgT3BlcmF0aW9uIEluZGljYXRvciAgICovCi0jZGVmaW5lCVBDQVAxNgkJCTB4MDEwMAkvKiBETUEgMTYtYml0IE9wZXJhdGlvbglJbmRpY2F0b3IgKi8KLSNkZWZpbmUJUENBUDMyCQkJMHgwMjAwCS8qIERNQSAzMi1iaXQgT3BlcmF0aW9uCUluZGljYXRvciAqLwotI2RlZmluZQlQQ0FQV1IJCQkweDA0MDAJLyogRE1BIFdyaXRlIE9wZXJhdGlvbiBJbmRpY2F0b3IgKi8KLSNkZWZpbmUJUENBUFJECQkJMHgwODAwCS8qIERNQSBSZWFkIE9wZXJhdGlvbiBJbmRpY2F0b3IgKi8KLSNkZWZpbmUJUE1BUAkJCTB4RjAwMAkvKiBETUEgUGVyaXBoZXJhbCBNYXAgRmllbGQgKi8KLQotLyogUE1BUAlFbmNvZGluZ3MgRm9yIERNQSBDb250cm9sbGVyIDAgKi8KLSNkZWZpbmUJUE1BUF9QUEkJCTB4MDAwMAkvKiBQTUFQCVBQSSBQb3J0IERNQSAqLwotI2RlZmluZQlQTUFQX1NQT1JUMFJYCTB4MTAwMAkvKiBQTUFQCVNQT1JUMCBSZWNlaXZlIERNQSAqLwotI2RlZmluZQlQTUFQX1NQT1JUMFRYCTB4MjAwMAkvKiBQTUFQCVNQT1JUMCBUcmFuc21pdAlETUEgKi8KLSNkZWZpbmUJUE1BUF9TUE9SVDFSWAkweDMwMDAJLyogUE1BUAlTUE9SVDEgUmVjZWl2ZSBETUEgKi8KLSNkZWZpbmUJUE1BUF9TUE9SVDFUWAkweDQwMDAJLyogUE1BUAlTUE9SVDEgVHJhbnNtaXQJRE1BICovCi0jZGVmaW5lCVBNQVBfU1BJMAkJMHg1MDAwCS8qIFBNQVAJU1BJIERNQSAqLwotI2RlZmluZQlQTUFQX1VBUlQwUlgJCTB4NjAwMAkvKiBQTUFQCVVBUlQgUmVjZWl2ZSBETUEgKi8KLSNkZWZpbmUJUE1BUF9VQVJUMFRYCQkweDcwMDAJLyogUE1BUAlVQVJUIFRyYW5zbWl0IERNQSAqLwotCi0vKiBQTUFQCUVuY29kaW5ncyBGb3IgRE1BIENvbnRyb2xsZXIgMSAqLwotI2RlZmluZQlQTUFQX1NQT1JUMlJYCSAgICAweDAwMDAgIC8qIFBNQVAgU1BPUlQyIFJlY2VpdmUgRE1BICovCi0jZGVmaW5lCVBNQVBfU1BPUlQyVFgJICAgIDB4MTAwMCAgLyogUE1BUCBTUE9SVDIgVHJhbnNtaXQgRE1BICovCi0jZGVmaW5lCVBNQVBfU1BPUlQzUlgJICAgIDB4MjAwMCAgLyogUE1BUCBTUE9SVDMgUmVjZWl2ZSBETUEgKi8KLSNkZWZpbmUJUE1BUF9TUE9SVDNUWAkgICAgMHgzMDAwICAvKiBQTUFQIFNQT1JUMyBUcmFuc21pdCBETUEgKi8KLSNkZWZpbmUJUE1BUF9TUEkxCSAgICAweDYwMDAgIC8qIFBNQVAgU1BJMSBETUEgKi8KLSNkZWZpbmUJUE1BUF9TUEkyCSAgICAweDcwMDAgIC8qIFBNQVAgU1BJMiBETUEgKi8KLSNkZWZpbmUJUE1BUF9VQVJUMVJYCSAgICAweDgwMDAgIC8qIFBNQVAgVUFSVDEgUmVjZWl2ZSBETUEgKi8KLSNkZWZpbmUJUE1BUF9VQVJUMVRYCSAgICAweDkwMDAgIC8qIFBNQVAgVUFSVDEgVHJhbnNtaXQgRE1BICovCi0jZGVmaW5lCVBNQVBfVUFSVDJSWAkgICAgMHhBMDAwICAvKiBQTUFQIFVBUlQyIFJlY2VpdmUgRE1BICovCi0jZGVmaW5lCVBNQVBfVUFSVDJUWAkgICAgMHhCMDAwICAvKiBQTUFQIFVBUlQyIFRyYW5zbWl0IERNQSAqLwotCi0KLS8qICAqKioqKioqKioqKioqICBHRU5FUkFMIFBVUlBPU0UgVElNRVIgTUFTS1MJKioqKioqKioqKioqKioqKioqKiogKi8KLS8qIFBXTSBUaW1lciBiaXQgZGVmaW5pdGlvbnMgKi8KLS8qIFRJTUVSX0VOQUJMRQlSZWdpc3RlciAqLwotI2RlZmluZQlUSU1FTjAJCQkweDAwMDEJLyogRW5hYmxlIFRpbWVyCTAgKi8KLSNkZWZpbmUJVElNRU4xCQkJMHgwMDAyCS8qIEVuYWJsZSBUaW1lcgkxICovCi0jZGVmaW5lCVRJTUVOMgkJCTB4MDAwNAkvKiBFbmFibGUgVGltZXIJMiAqLwotCi0jZGVmaW5lCVRJTUVOMF9QCQkweDAwCi0jZGVmaW5lCVRJTUVOMV9QCQkweDAxCi0jZGVmaW5lCVRJTUVOMl9QCQkweDAyCi0KLS8qIFRJTUVSX0RJU0FCTEUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVElNRElTMAkJCTB4MDAwMQkvKiBEaXNhYmxlIFRpbWVyIDAgKi8KLSNkZWZpbmUJVElNRElTMQkJCTB4MDAwMgkvKiBEaXNhYmxlIFRpbWVyIDEgKi8KLSNkZWZpbmUJVElNRElTMgkJCTB4MDAwNAkvKiBEaXNhYmxlIFRpbWVyIDIgKi8KLQotI2RlZmluZQlUSU1ESVMwX1AJCTB4MDAKLSNkZWZpbmUJVElNRElTMV9QCQkweDAxCi0jZGVmaW5lCVRJTURJUzJfUAkJMHgwMgotCi0vKiBUSU1FUl9TVEFUVVMJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVElNSUwwCQkJMHgwMDAxCS8qIFRpbWVyIDAgSW50ZXJydXB0ICovCi0jZGVmaW5lCVRJTUlMMQkJCTB4MDAwMgkvKiBUaW1lciAxIEludGVycnVwdCAqLwotI2RlZmluZQlUSU1JTDIJCQkweDAwMDQJLyogVGltZXIgMiBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUJVE9WRl9FUlIwCQkweDAwMTAJLyogVGltZXIgMCBDb3VudGVyIE92ZXJmbG93ICovCi0jZGVmaW5lCVRPVkZfRVJSMQkJMHgwMDIwCS8qIFRpbWVyIDEgQ291bnRlciBPdmVyZmxvdyAqLwotI2RlZmluZQlUT1ZGX0VSUjIJCTB4MDA0MAkvKiBUaW1lciAyIENvdW50ZXIgT3ZlcmZsb3cgKi8KLSNkZWZpbmUJVFJVTjAJCQkweDEwMDAJLyogVGltZXIgMCBTbGF2ZSBFbmFibGUJU3RhdHVzICovCi0jZGVmaW5lCVRSVU4xCQkJMHgyMDAwCS8qIFRpbWVyIDEgU2xhdmUgRW5hYmxlCVN0YXR1cyAqLwotI2RlZmluZQlUUlVOMgkJCTB4NDAwMAkvKiBUaW1lciAyIFNsYXZlIEVuYWJsZQlTdGF0dXMgKi8KLQotI2RlZmluZQlUSU1JTDBfUAkJMHgwMAotI2RlZmluZQlUSU1JTDFfUAkJMHgwMQotI2RlZmluZQlUSU1JTDJfUAkJMHgwMgotI2RlZmluZQlUT1ZGX0VSUjBfUAkJMHgwNAotI2RlZmluZQlUT1ZGX0VSUjFfUAkJMHgwNQotI2RlZmluZQlUT1ZGX0VSUjJfUAkJMHgwNgotI2RlZmluZQlUUlVOMF9QCQkJMHgwQwotI2RlZmluZQlUUlVOMV9QCQkJMHgwRAotI2RlZmluZQlUUlVOMl9QCQkJMHgwRQotCi0vKiBBbHRlcm5hdGUgRGVwcmVjYXRlZAlNYWNyb3MgUHJvdmlkZWQJRm9yIEJhY2t3YXJkcyBDb2RlIENvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUJVE9WTF9FUlIwCQlUT1ZGX0VSUjAKLSNkZWZpbmUJVE9WTF9FUlIxCQlUT1ZGX0VSUjEKLSNkZWZpbmUJVE9WTF9FUlIyCQlUT1ZGX0VSUjIKLSNkZWZpbmUJVE9WTF9FUlIwX1AJCVRPVkZfRVJSMF9QCi0jZGVmaW5lCVRPVkxfRVJSMV9QCVRPVkZfRVJSMV9QCi0jZGVmaW5lCVRPVkxfRVJSMl9QCVRPVkZfRVJSMl9QCi0KLS8qIFRJTUVSeF9DT05GSUcgUmVnaXN0ZXJzICovCi0jZGVmaW5lCVBXTV9PVVQJCQkweDAwMDEKLSNkZWZpbmUJV0RUSF9DQVAJCTB4MDAwMgotI2RlZmluZQlFWFRfQ0xLCQkJMHgwMDAzCi0jZGVmaW5lCVBVTFNFX0hJCQkweDAwMDQKLSNkZWZpbmUJUEVSSU9EX0NOVAkJMHgwMDA4Ci0jZGVmaW5lCUlSUV9FTkEJCQkweDAwMTAKLSNkZWZpbmUJVElOX1NFTAkJCTB4MDAyMAotI2RlZmluZQlPVVRfRElTCQkJMHgwMDQwCi0jZGVmaW5lCUNMS19TRUwJCQkweDAwODAKLSNkZWZpbmUJVE9HR0xFX0hJCQkweDAxMDAKLSNkZWZpbmUJRU1VX1JVTgkJCTB4MDIwMAotI2lmZGVmIF9NSVNSQV9SVUxFUwotI2RlZmluZQlFUlJfVFlQKHgpCQkoKCh4KSAmCTB4MDN1KSA8PCAxNCkKLSNlbHNlCi0jZGVmaW5lCUVSUl9UWVAoeCkJCSgoKHgpICYJMHgwMykgPDwgMTQpCi0jZW5kaWYgLyogX01JU1JBX1JVTEVTICovCi0KLSNkZWZpbmUJVE1PREVfUDAJCTB4MDAKLSNkZWZpbmUJVE1PREVfUDEJCTB4MDEKLSNkZWZpbmUJUFVMU0VfSElfUAkJMHgwMgotI2RlZmluZQlQRVJJT0RfQ05UX1AJMHgwMwotI2RlZmluZQlJUlFfRU5BX1AJCTB4MDQKLSNkZWZpbmUJVElOX1NFTF9QCQkweDA1Ci0jZGVmaW5lCU9VVF9ESVNfUAkJMHgwNgotI2RlZmluZQlDTEtfU0VMX1AJCTB4MDcKLSNkZWZpbmUJVE9HR0xFX0hJX1AJCTB4MDgKLSNkZWZpbmUJRU1VX1JVTl9QCQkweDA5Ci0jZGVmaW5lCUVSUl9UWVBfUDAJCTB4MEUKLSNkZWZpbmUJRVJSX1RZUF9QMQkJMHgwRgotCi0KLS8qLyAqKioqKioqKioqKioqKioqKioJIEdFTkVSQUwtUFVSUE9TRSBJL08gICoqKioqKioqKioqKioqKioqKioqKiAqLwotLyogIEZsYWcgSS9PIChGSU9fKSBNYXNrcyAqLwotI2RlZmluZQlQRjAJCQkweDAwMDEKLSNkZWZpbmUJUEYxCQkJMHgwMDAyCi0jZGVmaW5lCVBGMgkJCTB4MDAwNAotI2RlZmluZQlQRjMJCQkweDAwMDgKLSNkZWZpbmUJUEY0CQkJMHgwMDEwCi0jZGVmaW5lCVBGNQkJCTB4MDAyMAotI2RlZmluZQlQRjYJCQkweDAwNDAKLSNkZWZpbmUJUEY3CQkJMHgwMDgwCi0jZGVmaW5lCVBGOAkJCTB4MDEwMAotI2RlZmluZQlQRjkJCQkweDAyMDAKLSNkZWZpbmUJUEYxMAkJMHgwNDAwCi0jZGVmaW5lCVBGMTEJCTB4MDgwMAotI2RlZmluZQlQRjEyCQkweDEwMDAKLSNkZWZpbmUJUEYxMwkJMHgyMDAwCi0jZGVmaW5lCVBGMTQJCTB4NDAwMAotI2RlZmluZQlQRjE1CQkweDgwMDAKLQotLyogIFBPUlQgRiBCSVQgUE9TSVRJT05TICovCi0jZGVmaW5lCVBGMF9QCQkweDAKLSNkZWZpbmUJUEYxX1AJCTB4MQotI2RlZmluZQlQRjJfUAkJMHgyCi0jZGVmaW5lCVBGM19QCQkweDMKLSNkZWZpbmUJUEY0X1AJCTB4NAotI2RlZmluZQlQRjVfUAkJMHg1Ci0jZGVmaW5lCVBGNl9QCQkweDYKLSNkZWZpbmUJUEY3X1AJCTB4NwotI2RlZmluZQlQRjhfUAkJMHg4Ci0jZGVmaW5lCVBGOV9QCQkweDkKLSNkZWZpbmUJUEYxMF9QCQkweEEKLSNkZWZpbmUJUEYxMV9QCQkweEIKLSNkZWZpbmUJUEYxMl9QCQkweEMKLSNkZWZpbmUJUEYxM19QCQkweEQKLSNkZWZpbmUJUEYxNF9QCQkweEUKLSNkZWZpbmUJUEYxNV9QCQkweEYKLQotCi0vKioqKioqKioqKioqKioqKioqKiAgIEdQSU8gTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKi8KLS8qIFBvcnQJQyBNYXNrcyAqLwotI2RlZmluZQlQQzAJCTB4MDAwMQotI2RlZmluZQlQQzEJCTB4MDAwMgotI2RlZmluZQlQQzQJCTB4MDAxMAotI2RlZmluZQlQQzUJCTB4MDAyMAotI2RlZmluZQlQQzYJCTB4MDA0MAotI2RlZmluZQlQQzcJCTB4MDA4MAotI2RlZmluZQlQQzgJCTB4MDEwMAotI2RlZmluZQlQQzkJCTB4MDIwMAotLyogUG9ydAlDIEJpdCBQb3NpdGlvbnMgKi8KLSNkZWZpbmUJUEMwX1AJMHgwCi0jZGVmaW5lCVBDMV9QCTB4MQotI2RlZmluZQlQQzRfUAkweDQKLSNkZWZpbmUJUEM1X1AJMHg1Ci0jZGVmaW5lCVBDNl9QCTB4NgotI2RlZmluZQlQQzdfUAkweDcKLSNkZWZpbmUJUEM4X1AJMHg4Ci0jZGVmaW5lCVBDOV9QCTB4OQotCi0vKiBQb3J0CUQgKi8KLSNkZWZpbmUJUEQwCQkweDAwMDEKLSNkZWZpbmUJUEQxCQkweDAwMDIKLSNkZWZpbmUJUEQyCQkweDAwMDQKLSNkZWZpbmUJUEQzCQkweDAwMDgKLSNkZWZpbmUJUEQ0CQkweDAwMTAKLSNkZWZpbmUJUEQ1CQkweDAwMjAKLSNkZWZpbmUJUEQ2CQkweDAwNDAKLSNkZWZpbmUJUEQ3CQkweDAwODAKLSNkZWZpbmUJUEQ4CQkweDAxMDAKLSNkZWZpbmUJUEQ5CQkweDAyMDAKLSNkZWZpbmUJUEQxMAkweDA0MDAKLSNkZWZpbmUJUEQxMQkweDA4MDAKLSNkZWZpbmUJUEQxMgkweDEwMDAKLSNkZWZpbmUJUEQxMwkweDIwMDAKLSNkZWZpbmUJUEQxNAkweDQwMDAKLSNkZWZpbmUJUEQxNQkweDgwMDAKLS8qIFBvcnQJRCBCaXQgUG9zaXRpb25zICovCi0jZGVmaW5lCVBEMF9QCTB4MAotI2RlZmluZQlQRDFfUAkweDEKLSNkZWZpbmUJUEQyX1AJMHgyCi0jZGVmaW5lCVBEM19QCTB4MwotI2RlZmluZQlQRDRfUAkweDQKLSNkZWZpbmUJUEQ1X1AJMHg1Ci0jZGVmaW5lCVBENl9QCTB4NgotI2RlZmluZQlQRDdfUAkweDcKLSNkZWZpbmUJUEQ4X1AJMHg4Ci0jZGVmaW5lCVBEOV9QCTB4OQotI2RlZmluZQlQRDEwX1AJMHhBCi0jZGVmaW5lCVBEMTFfUAkweEIKLSNkZWZpbmUJUEQxMl9QCTB4QwotI2RlZmluZQlQRDEzX1AJMHhECi0jZGVmaW5lCVBEMTRfUAkweEUKLSNkZWZpbmUJUEQxNV9QCTB4RgotCi0vKiBQb3J0CUUgKi8KLSNkZWZpbmUJUEUwCQkweDAwMDEKLSNkZWZpbmUJUEUxCQkweDAwMDIKLSNkZWZpbmUJUEUyCQkweDAwMDQKLSNkZWZpbmUJUEUzCQkweDAwMDgKLSNkZWZpbmUJUEU0CQkweDAwMTAKLSNkZWZpbmUJUEU1CQkweDAwMjAKLSNkZWZpbmUJUEU2CQkweDAwNDAKLSNkZWZpbmUJUEU3CQkweDAwODAKLSNkZWZpbmUJUEU4CQkweDAxMDAKLSNkZWZpbmUJUEU5CQkweDAyMDAKLSNkZWZpbmUJUEUxMAkweDA0MDAKLSNkZWZpbmUJUEUxMQkweDA4MDAKLSNkZWZpbmUJUEUxMgkweDEwMDAKLSNkZWZpbmUJUEUxMwkweDIwMDAKLSNkZWZpbmUJUEUxNAkweDQwMDAKLSNkZWZpbmUJUEUxNQkweDgwMDAKLS8qIFBvcnQJRSBCaXQgUG9zaXRpb25zICovCi0jZGVmaW5lCVBFMF9QCTB4MAotI2RlZmluZQlQRTFfUAkweDEKLSNkZWZpbmUJUEUyX1AJMHgyCi0jZGVmaW5lCVBFM19QCTB4MwotI2RlZmluZQlQRTRfUAkweDQKLSNkZWZpbmUJUEU1X1AJMHg1Ci0jZGVmaW5lCVBFNl9QCTB4NgotI2RlZmluZQlQRTdfUAkweDcKLSNkZWZpbmUJUEU4X1AJMHg4Ci0jZGVmaW5lCVBFOV9QCTB4OQotI2RlZmluZQlQRTEwX1AJMHhBCi0jZGVmaW5lCVBFMTFfUAkweEIKLSNkZWZpbmUJUEUxMl9QCTB4QwotI2RlZmluZQlQRTEzX1AJMHhECi0jZGVmaW5lCVBFMTRfUAkweEUKLSNkZWZpbmUJUEUxNV9QCTB4RgotCi0vKiAqKioqKioqKioqKioqKioqKioqKiogIEFTWU5DSFJPTk9VUyBNRU1PUlkgQ09OVFJPTExFUiBNQVNLUwkqKioqKioqKioqKioqICovCi0vKiBFQklVX0FNR0NUTCBNYXNrcyAqLwotI2RlZmluZQlBTUNLRU4JCTB4MDAwMQkvKiBFbmFibGUgQ0xLT1VUICovCi0jZGVmaW5lCUFNQkVOX05PTkUJMHgwMDAwCS8qIEFsbCBCYW5rcyBEaXNhYmxlZCAqLwotI2RlZmluZQlBTUJFTl9CMAkweDAwMDIJLyogRW5hYmxlIEFzeW5jaHJvbm91cyBNZW1vcnkgQmFuayAwIG9ubHkgKi8KLSNkZWZpbmUJQU1CRU5fQjBfQjEJMHgwMDA0CS8qIEVuYWJsZSBBc3luY2hyb25vdXMgTWVtb3J5IEJhbmtzIDAgJgkxIG9ubHkgKi8KLSNkZWZpbmUJQU1CRU5fQjBfQjFfQjIJMHgwMDA2CS8qIEVuYWJsZSBBc3luY2hyb25vdXMgTWVtb3J5IEJhbmtzIDAsIDEsIGFuZCAyICovCi0jZGVmaW5lCUFNQkVOX0FMTAkweDAwMDgJLyogRW5hYmxlIEFzeW5jaHJvbm91cyBNZW1vcnkgQmFua3MgKGFsbCkgMCwgMSwJMiwgYW5kIDMgKi8KLSNkZWZpbmUJQ0RQUklPCQkweDAxMDAJLyogRE1BIGhhcyBwcmlvcml0eSBvdmVyIGNvcmUgZm9yIGV4dGVybmFsIGFjY2Vzc2VzICovCi0KLS8qIEVCSVVfQU1HQ1RMIEJpdCBQb3NpdGlvbnMgKi8KLSNkZWZpbmUJQU1DS0VOX1AJCTB4MDAwMAkvKiBFbmFibGUgQ0xLT1VUICovCi0jZGVmaW5lCUFNQkVOX1AwCQkweDAwMDEJLyogQXN5bmNocm9ub3VzCU1lbW9yeSBFbmFibGUsIDAwMCAtIGJhbmtzIDAtMyBkaXNhYmxlZCwgMDAxIC0gQmFuayAwIGVuYWJsZWQgKi8KLSNkZWZpbmUJQU1CRU5fUDEJCTB4MDAwMgkvKiBBc3luY2hyb25vdXMJTWVtb3J5IEVuYWJsZSwgMDEwIC0gYmFua3MgMCYxIGVuYWJsZWQsCSAwMTEgLSBiYW5rcyAwLTMgZW5hYmxlZCAqLwotI2RlZmluZQlBTUJFTl9QMgkJMHgwMDAzCS8qIEFzeW5jaHJvbm91cwlNZW1vcnkgRW5hYmxlLCAxeHggLSBBbGwgYmFua3MgKGJhbmsgMCwJMSwgMiwgYW5kIDMpIGVuYWJsZWQgKi8KLQotLyogRUJJVV9BTUJDVEwwCU1hc2tzICovCi0jZGVmaW5lCUIwUkRZRU4JCQkweDAwMDAwMDAxICAvKiBCYW5rIDAgUkRZIEVuYWJsZSwgMD1kaXNhYmxlLCAxPWVuYWJsZSAqLwotI2RlZmluZQlCMFJEWVBPTAkJMHgwMDAwMDAwMiAgLyogQmFuayAwIFJEWSBBY3RpdmUgaGlnaCwgMD1hY3RpdmUJbG93LCAxPWFjdGl2ZSBoaWdoICovCi0jZGVmaW5lCUIwVFRfMQkJCTB4MDAwMDAwMDQgIC8qIEJhbmsgMCBUcmFuc2l0aW9uIFRpbWUgZnJvbSBSZWFkCXRvIFdyaXRlID0gMSBjeWNsZSAqLwotI2RlZmluZQlCMFRUXzIJCQkweDAwMDAwMDA4ICAvKiBCYW5rIDAgVHJhbnNpdGlvbiBUaW1lIGZyb20gUmVhZAl0byBXcml0ZSA9IDIgY3ljbGVzICovCi0jZGVmaW5lCUIwVFRfMwkJCTB4MDAwMDAwMEMgIC8qIEJhbmsgMCBUcmFuc2l0aW9uIFRpbWUgZnJvbSBSZWFkCXRvIFdyaXRlID0gMyBjeWNsZXMgKi8KLSNkZWZpbmUJQjBUVF80CQkJMHgwMDAwMDAwMCAgLyogQmFuayAwIFRyYW5zaXRpb24gVGltZSBmcm9tIFJlYWQJdG8gV3JpdGUgPSA0IGN5Y2xlcyAqLwotI2RlZmluZQlCMFNUXzEJCQkweDAwMDAwMDEwICAvKiBCYW5rIDAgU2V0dXAgVGltZSBmcm9tIEFPRSBhc3NlcnRlZCB0byBSZWFkL1dyaXRlIGFzc2VydGVkPTEgY3ljbGUgKi8KLSNkZWZpbmUJQjBTVF8yCQkJMHgwMDAwMDAyMCAgLyogQmFuayAwIFNldHVwIFRpbWUgZnJvbSBBT0UgYXNzZXJ0ZWQgdG8gUmVhZC9Xcml0ZSBhc3NlcnRlZD0yIGN5Y2xlcyAqLwotI2RlZmluZQlCMFNUXzMJCQkweDAwMDAwMDMwICAvKiBCYW5rIDAgU2V0dXAgVGltZSBmcm9tIEFPRSBhc3NlcnRlZCB0byBSZWFkL1dyaXRlIGFzc2VydGVkPTMgY3ljbGVzICovCi0jZGVmaW5lCUIwU1RfNAkJCTB4MDAwMDAwMDAgIC8qIEJhbmsgMCBTZXR1cCBUaW1lIGZyb20gQU9FIGFzc2VydGVkIHRvIFJlYWQvV3JpdGUgYXNzZXJ0ZWQ9NCBjeWNsZXMgKi8KLSNkZWZpbmUJQjBIVF8xCQkJMHgwMDAwMDA0MCAgLyogQmFuayAwIEhvbGQgVGltZQlmcm9tIFJlYWQvV3JpdGUJZGVhc3NlcnRlZCB0byBBT0UgZGVhc3NlcnRlZCA9IDEgY3ljbGUgKi8KLSNkZWZpbmUJQjBIVF8yCQkJMHgwMDAwMDA4MCAgLyogQmFuayAwIEhvbGQgVGltZQlmcm9tIFJlYWQvV3JpdGUJZGVhc3NlcnRlZCB0byBBT0UgZGVhc3NlcnRlZCA9IDIgY3ljbGVzICovCi0jZGVmaW5lCUIwSFRfMwkJCTB4MDAwMDAwQzAgIC8qIEJhbmsgMCBIb2xkIFRpbWUJZnJvbSBSZWFkL1dyaXRlCWRlYXNzZXJ0ZWQgdG8gQU9FIGRlYXNzZXJ0ZWQgPSAzIGN5Y2xlcyAqLwotI2RlZmluZQlCMEhUXzAJCQkweDAwMDAwMDAwICAvKiBCYW5rIDAgSG9sZCBUaW1lCWZyb20gUmVhZC9Xcml0ZQlkZWFzc2VydGVkIHRvIEFPRSBkZWFzc2VydGVkID0gMCBjeWNsZXMgKi8KLSNkZWZpbmUJQjBSQVRfMQkJCTB4MDAwMDAxMDAgIC8qIEJhbmsgMCBSZWFkIEFjY2VzcyBUaW1lID0gMSBjeWNsZSAqLwotI2RlZmluZQlCMFJBVF8yCQkJMHgwMDAwMDIwMCAgLyogQmFuayAwIFJlYWQgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcyAqLwotI2RlZmluZQlCMFJBVF8zCQkJMHgwMDAwMDMwMCAgLyogQmFuayAwIFJlYWQgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcyAqLwotI2RlZmluZQlCMFJBVF80CQkJMHgwMDAwMDQwMCAgLyogQmFuayAwIFJlYWQgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcyAqLwotI2RlZmluZQlCMFJBVF81CQkJMHgwMDAwMDUwMCAgLyogQmFuayAwIFJlYWQgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcyAqLwotI2RlZmluZQlCMFJBVF82CQkJMHgwMDAwMDYwMCAgLyogQmFuayAwIFJlYWQgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcyAqLwotI2RlZmluZQlCMFJBVF83CQkJMHgwMDAwMDcwMCAgLyogQmFuayAwIFJlYWQgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcyAqLwotI2RlZmluZQlCMFJBVF84CQkJMHgwMDAwMDgwMCAgLyogQmFuayAwIFJlYWQgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcyAqLwotI2RlZmluZQlCMFJBVF85CQkJMHgwMDAwMDkwMCAgLyogQmFuayAwIFJlYWQgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcyAqLwotI2RlZmluZQlCMFJBVF8xMAkJMHgwMDAwMEEwMCAgLyogQmFuayAwIFJlYWQgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMgKi8KLSNkZWZpbmUJQjBSQVRfMTEJCTB4MDAwMDBCMDAgIC8qIEJhbmsgMCBSZWFkIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzICovCi0jZGVmaW5lCUIwUkFUXzEyCQkweDAwMDAwQzAwICAvKiBCYW5rIDAgUmVhZCBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcyAqLwotI2RlZmluZQlCMFJBVF8xMwkJMHgwMDAwMEQwMCAgLyogQmFuayAwIFJlYWQgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMgKi8KLSNkZWZpbmUJQjBSQVRfMTQJCTB4MDAwMDBFMDAgIC8qIEJhbmsgMCBSZWFkIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzICovCi0jZGVmaW5lCUIwUkFUXzE1CQkweDAwMDAwRjAwICAvKiBCYW5rIDAgUmVhZCBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcyAqLwotI2RlZmluZQlCMFdBVF8xCQkJMHgwMDAwMTAwMCAgLyogQmFuayAwIFdyaXRlIEFjY2VzcyBUaW1lCT0gMSBjeWNsZSAqLwotI2RlZmluZQlCMFdBVF8yCQkJMHgwMDAwMjAwMCAgLyogQmFuayAwIFdyaXRlIEFjY2VzcyBUaW1lCT0gMiBjeWNsZXMgKi8KLSNkZWZpbmUJQjBXQVRfMwkJCTB4MDAwMDMwMDAgIC8qIEJhbmsgMCBXcml0ZSBBY2Nlc3MgVGltZQk9IDMgY3ljbGVzICovCi0jZGVmaW5lCUIwV0FUXzQJCQkweDAwMDA0MDAwICAvKiBCYW5rIDAgV3JpdGUgQWNjZXNzIFRpbWUJPSA0IGN5Y2xlcyAqLwotI2RlZmluZQlCMFdBVF81CQkJMHgwMDAwNTAwMCAgLyogQmFuayAwIFdyaXRlIEFjY2VzcyBUaW1lCT0gNSBjeWNsZXMgKi8KLSNkZWZpbmUJQjBXQVRfNgkJCTB4MDAwMDYwMDAgIC8qIEJhbmsgMCBXcml0ZSBBY2Nlc3MgVGltZQk9IDYgY3ljbGVzICovCi0jZGVmaW5lCUIwV0FUXzcJCQkweDAwMDA3MDAwICAvKiBCYW5rIDAgV3JpdGUgQWNjZXNzIFRpbWUJPSA3IGN5Y2xlcyAqLwotI2RlZmluZQlCMFdBVF84CQkJMHgwMDAwODAwMCAgLyogQmFuayAwIFdyaXRlIEFjY2VzcyBUaW1lCT0gOCBjeWNsZXMgKi8KLSNkZWZpbmUJQjBXQVRfOQkJCTB4MDAwMDkwMDAgIC8qIEJhbmsgMCBXcml0ZSBBY2Nlc3MgVGltZQk9IDkgY3ljbGVzICovCi0jZGVmaW5lCUIwV0FUXzEwCQkweDAwMDBBMDAwICAvKiBCYW5rIDAgV3JpdGUgQWNjZXNzIFRpbWUJPSAxMCBjeWNsZXMgKi8KLSNkZWZpbmUJQjBXQVRfMTEJCTB4MDAwMEIwMDAgIC8qIEJhbmsgMCBXcml0ZSBBY2Nlc3MgVGltZQk9IDExIGN5Y2xlcyAqLwotI2RlZmluZQlCMFdBVF8xMgkJMHgwMDAwQzAwMCAgLyogQmFuayAwIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTIgY3ljbGVzICovCi0jZGVmaW5lCUIwV0FUXzEzCQkweDAwMDBEMDAwICAvKiBCYW5rIDAgV3JpdGUgQWNjZXNzIFRpbWUJPSAxMyBjeWNsZXMgKi8KLSNkZWZpbmUJQjBXQVRfMTQJCTB4MDAwMEUwMDAgIC8qIEJhbmsgMCBXcml0ZSBBY2Nlc3MgVGltZQk9IDE0IGN5Y2xlcyAqLwotI2RlZmluZQlCMFdBVF8xNQkJMHgwMDAwRjAwMCAgLyogQmFuayAwIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTUgY3ljbGVzICovCi0jZGVmaW5lCUIxUkRZRU4JCQkweDAwMDEwMDAwICAvKiBCYW5rIDEgUkRZIGVuYWJsZSwgMD1kaXNhYmxlLCAxPWVuYWJsZSAqLwotI2RlZmluZQlCMVJEWVBPTAkJMHgwMDAyMDAwMCAgLyogQmFuayAxIFJEWSBBY3RpdmUgaGlnaCwgMD1hY3RpdmUJbG93LCAxPWFjdGl2ZSBoaWdoICovCi0jZGVmaW5lCUIxVFRfMQkJCTB4MDAwNDAwMDAgIC8qIEJhbmsgMSBUcmFuc2l0aW9uIFRpbWUgZnJvbSBSZWFkCXRvIFdyaXRlID0gMSBjeWNsZSAqLwotI2RlZmluZQlCMVRUXzIJCQkweDAwMDgwMDAwICAvKiBCYW5rIDEgVHJhbnNpdGlvbiBUaW1lIGZyb20gUmVhZAl0byBXcml0ZSA9IDIgY3ljbGVzICovCi0jZGVmaW5lCUIxVFRfMwkJCTB4MDAwQzAwMDAgIC8qIEJhbmsgMSBUcmFuc2l0aW9uIFRpbWUgZnJvbSBSZWFkCXRvIFdyaXRlID0gMyBjeWNsZXMgKi8KLSNkZWZpbmUJQjFUVF80CQkJMHgwMDAwMDAwMCAgLyogQmFuayAxIFRyYW5zaXRpb24gVGltZSBmcm9tIFJlYWQJdG8gV3JpdGUgPSA0IGN5Y2xlcyAqLwotI2RlZmluZQlCMVNUXzEJCQkweDAwMTAwMDAwICAvKiBCYW5rIDEgU2V0dXAgVGltZSBmcm9tIEFPRSBhc3NlcnRlZCB0byBSZWFkIG9yIFdyaXRlIGFzc2VydGVkID0gMSBjeWNsZSAqLwotI2RlZmluZQlCMVNUXzIJCQkweDAwMjAwMDAwICAvKiBCYW5rIDEgU2V0dXAgVGltZSBmcm9tIEFPRSBhc3NlcnRlZCB0byBSZWFkIG9yIFdyaXRlIGFzc2VydGVkID0gMiBjeWNsZXMgKi8KLSNkZWZpbmUJQjFTVF8zCQkJMHgwMDMwMDAwMCAgLyogQmFuayAxIFNldHVwIFRpbWUgZnJvbSBBT0UgYXNzZXJ0ZWQgdG8gUmVhZCBvciBXcml0ZSBhc3NlcnRlZCA9IDMgY3ljbGVzICovCi0jZGVmaW5lCUIxU1RfNAkJCTB4MDAwMDAwMDAgIC8qIEJhbmsgMSBTZXR1cCBUaW1lIGZyb20gQU9FIGFzc2VydGVkIHRvIFJlYWQgb3IgV3JpdGUgYXNzZXJ0ZWQgPSA0IGN5Y2xlcyAqLwotI2RlZmluZQlCMUhUXzEJCQkweDAwNDAwMDAwICAvKiBCYW5rIDEgSG9sZCBUaW1lCWZyb20gUmVhZCBvciBXcml0ZSBkZWFzc2VydGVkIHRvIEFPRSBkZWFzc2VydGVkCT0gMSBjeWNsZSAqLwotI2RlZmluZQlCMUhUXzIJCQkweDAwODAwMDAwICAvKiBCYW5rIDEgSG9sZCBUaW1lCWZyb20gUmVhZCBvciBXcml0ZSBkZWFzc2VydGVkIHRvIEFPRSBkZWFzc2VydGVkCT0gMiBjeWNsZXMgKi8KLSNkZWZpbmUJQjFIVF8zCQkJMHgwMEMwMDAwMCAgLyogQmFuayAxIEhvbGQgVGltZQlmcm9tIFJlYWQgb3IgV3JpdGUgZGVhc3NlcnRlZCB0byBBT0UgZGVhc3NlcnRlZAk9IDMgY3ljbGVzICovCi0jZGVmaW5lCUIxSFRfMAkJCTB4MDAwMDAwMDAgIC8qIEJhbmsgMSBIb2xkIFRpbWUJZnJvbSBSZWFkIG9yIFdyaXRlIGRlYXNzZXJ0ZWQgdG8gQU9FIGRlYXNzZXJ0ZWQJPSAwIGN5Y2xlcyAqLwotI2RlZmluZQlCMVJBVF8xCQkJMHgwMTAwMDAwMCAgLyogQmFuayAxIFJlYWQgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlICovCi0jZGVmaW5lCUIxUkFUXzIJCQkweDAyMDAwMDAwICAvKiBCYW5rIDEgUmVhZCBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzICovCi0jZGVmaW5lCUIxUkFUXzMJCQkweDAzMDAwMDAwICAvKiBCYW5rIDEgUmVhZCBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzICovCi0jZGVmaW5lCUIxUkFUXzQJCQkweDA0MDAwMDAwICAvKiBCYW5rIDEgUmVhZCBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzICovCi0jZGVmaW5lCUIxUkFUXzUJCQkweDA1MDAwMDAwICAvKiBCYW5rIDEgUmVhZCBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzICovCi0jZGVmaW5lCUIxUkFUXzYJCQkweDA2MDAwMDAwICAvKiBCYW5rIDEgUmVhZCBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzICovCi0jZGVmaW5lCUIxUkFUXzcJCQkweDA3MDAwMDAwICAvKiBCYW5rIDEgUmVhZCBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzICovCi0jZGVmaW5lCUIxUkFUXzgJCQkweDA4MDAwMDAwICAvKiBCYW5rIDEgUmVhZCBBY2Nlc3MgVGltZSA9IDggY3ljbGVzICovCi0jZGVmaW5lCUIxUkFUXzkJCQkweDA5MDAwMDAwICAvKiBCYW5rIDEgUmVhZCBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzICovCi0jZGVmaW5lCUIxUkFUXzEwCQkweDBBMDAwMDAwICAvKiBCYW5rIDEgUmVhZCBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcyAqLwotI2RlZmluZQlCMVJBVF8xMQkJMHgwQjAwMDAwMCAgLyogQmFuayAxIFJlYWQgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMgKi8KLSNkZWZpbmUJQjFSQVRfMTIJCTB4MEMwMDAwMDAgIC8qIEJhbmsgMSBSZWFkIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzICovCi0jZGVmaW5lCUIxUkFUXzEzCQkweDBEMDAwMDAwICAvKiBCYW5rIDEgUmVhZCBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcyAqLwotI2RlZmluZQlCMVJBVF8xNAkJMHgwRTAwMDAwMCAgLyogQmFuayAxIFJlYWQgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMgKi8KLSNkZWZpbmUJQjFSQVRfMTUJCTB4MEYwMDAwMDAgIC8qIEJhbmsgMSBSZWFkIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzICovCi0jZGVmaW5lCUIxV0FUXzEJCQkweDEwMDAwMDAwIC8qIEJhbmsgMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDEgY3ljbGUgKi8KLSNkZWZpbmUJQjFXQVRfMgkJCTB4MjAwMDAwMDAgIC8qIEJhbmsgMSBXcml0ZSBBY2Nlc3MgVGltZQk9IDIgY3ljbGVzICovCi0jZGVmaW5lCUIxV0FUXzMJCQkweDMwMDAwMDAwICAvKiBCYW5rIDEgV3JpdGUgQWNjZXNzIFRpbWUJPSAzIGN5Y2xlcyAqLwotI2RlZmluZQlCMVdBVF80CQkJMHg0MDAwMDAwMCAgLyogQmFuayAxIFdyaXRlIEFjY2VzcyBUaW1lCT0gNCBjeWNsZXMgKi8KLSNkZWZpbmUJQjFXQVRfNQkJCTB4NTAwMDAwMDAgIC8qIEJhbmsgMSBXcml0ZSBBY2Nlc3MgVGltZQk9IDUgY3ljbGVzICovCi0jZGVmaW5lCUIxV0FUXzYJCQkweDYwMDAwMDAwICAvKiBCYW5rIDEgV3JpdGUgQWNjZXNzIFRpbWUJPSA2IGN5Y2xlcyAqLwotI2RlZmluZQlCMVdBVF83CQkJMHg3MDAwMDAwMCAgLyogQmFuayAxIFdyaXRlIEFjY2VzcyBUaW1lCT0gNyBjeWNsZXMgKi8KLSNkZWZpbmUJQjFXQVRfOAkJCTB4ODAwMDAwMDAgIC8qIEJhbmsgMSBXcml0ZSBBY2Nlc3MgVGltZQk9IDggY3ljbGVzICovCi0jZGVmaW5lCUIxV0FUXzkJCQkweDkwMDAwMDAwICAvKiBCYW5rIDEgV3JpdGUgQWNjZXNzIFRpbWUJPSA5IGN5Y2xlcyAqLwotI2RlZmluZQlCMVdBVF8xMAkJMHhBMDAwMDAwMCAgLyogQmFuayAxIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTAgY3ljbGVzICovCi0jZGVmaW5lCUIxV0FUXzExCQkweEIwMDAwMDAwICAvKiBCYW5rIDEgV3JpdGUgQWNjZXNzIFRpbWUJPSAxMSBjeWNsZXMgKi8KLSNkZWZpbmUJQjFXQVRfMTIJCTB4QzAwMDAwMDAgIC8qIEJhbmsgMSBXcml0ZSBBY2Nlc3MgVGltZQk9IDEyIGN5Y2xlcyAqLwotI2RlZmluZQlCMVdBVF8xMwkJMHhEMDAwMDAwMCAgLyogQmFuayAxIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTMgY3ljbGVzICovCi0jZGVmaW5lCUIxV0FUXzE0CQkweEUwMDAwMDAwICAvKiBCYW5rIDEgV3JpdGUgQWNjZXNzIFRpbWUJPSAxNCBjeWNsZXMgKi8KLSNkZWZpbmUJQjFXQVRfMTUJCTB4RjAwMDAwMDAgIC8qIEJhbmsgMSBXcml0ZSBBY2Nlc3MgVGltZQk9IDE1IGN5Y2xlcyAqLwotCi0vKiBFQklVX0FNQkNUTDEJTWFza3MgKi8KLSNkZWZpbmUJQjJSRFlFTgkJCTB4MDAwMDAwMDEgIC8qIEJhbmsgMiBSRFkgRW5hYmxlLCAwPWRpc2FibGUsIDE9ZW5hYmxlICovCi0jZGVmaW5lCUIyUkRZUE9MCQkweDAwMDAwMDAyICAvKiBCYW5rIDIgUkRZIEFjdGl2ZSBoaWdoLCAwPWFjdGl2ZQlsb3csIDE9YWN0aXZlIGhpZ2ggKi8KLSNkZWZpbmUJQjJUVF8xCQkJMHgwMDAwMDAwNCAgLyogQmFuayAyIFRyYW5zaXRpb24gVGltZSBmcm9tIFJlYWQJdG8gV3JpdGUgPSAxIGN5Y2xlICovCi0jZGVmaW5lCUIyVFRfMgkJCTB4MDAwMDAwMDggIC8qIEJhbmsgMiBUcmFuc2l0aW9uIFRpbWUgZnJvbSBSZWFkCXRvIFdyaXRlID0gMiBjeWNsZXMgKi8KLSNkZWZpbmUJQjJUVF8zCQkJMHgwMDAwMDAwQyAgLyogQmFuayAyIFRyYW5zaXRpb24gVGltZSBmcm9tIFJlYWQJdG8gV3JpdGUgPSAzIGN5Y2xlcyAqLwotI2RlZmluZQlCMlRUXzQJCQkweDAwMDAwMDAwICAvKiBCYW5rIDIgVHJhbnNpdGlvbiBUaW1lIGZyb20gUmVhZAl0byBXcml0ZSA9IDQgY3ljbGVzICovCi0jZGVmaW5lCUIyU1RfMQkJCTB4MDAwMDAwMTAgIC8qIEJhbmsgMiBTZXR1cCBUaW1lIGZyb20gQU9FIGFzc2VydGVkIHRvIFJlYWQgb3IgV3JpdGUgYXNzZXJ0ZWQgPSAxIGN5Y2xlICovCi0jZGVmaW5lCUIyU1RfMgkJCTB4MDAwMDAwMjAgIC8qIEJhbmsgMiBTZXR1cCBUaW1lIGZyb20gQU9FIGFzc2VydGVkIHRvIFJlYWQgb3IgV3JpdGUgYXNzZXJ0ZWQgPSAyIGN5Y2xlcyAqLwotI2RlZmluZQlCMlNUXzMJCQkweDAwMDAwMDMwICAvKiBCYW5rIDIgU2V0dXAgVGltZSBmcm9tIEFPRSBhc3NlcnRlZCB0byBSZWFkIG9yIFdyaXRlIGFzc2VydGVkID0gMyBjeWNsZXMgKi8KLSNkZWZpbmUJQjJTVF80CQkJMHgwMDAwMDAwMCAgLyogQmFuayAyIFNldHVwIFRpbWUgZnJvbSBBT0UgYXNzZXJ0ZWQgdG8gUmVhZCBvciBXcml0ZSBhc3NlcnRlZCA9IDQgY3ljbGVzICovCi0jZGVmaW5lCUIySFRfMQkJCTB4MDAwMDAwNDAgIC8qIEJhbmsgMiBIb2xkIFRpbWUJZnJvbSBSZWFkIG9yIFdyaXRlIGRlYXNzZXJ0ZWQgdG8gQU9FIGRlYXNzZXJ0ZWQJPSAxIGN5Y2xlICovCi0jZGVmaW5lCUIySFRfMgkJCTB4MDAwMDAwODAgIC8qIEJhbmsgMiBIb2xkIFRpbWUJZnJvbSBSZWFkIG9yIFdyaXRlIGRlYXNzZXJ0ZWQgdG8gQU9FIGRlYXNzZXJ0ZWQJPSAyIGN5Y2xlcyAqLwotI2RlZmluZQlCMkhUXzMJCQkweDAwMDAwMEMwICAvKiBCYW5rIDIgSG9sZCBUaW1lCWZyb20gUmVhZCBvciBXcml0ZSBkZWFzc2VydGVkIHRvIEFPRSBkZWFzc2VydGVkCT0gMyBjeWNsZXMgKi8KLSNkZWZpbmUJQjJIVF8wCQkJMHgwMDAwMDAwMCAgLyogQmFuayAyIEhvbGQgVGltZQlmcm9tIFJlYWQgb3IgV3JpdGUgZGVhc3NlcnRlZCB0byBBT0UgZGVhc3NlcnRlZAk9IDAgY3ljbGVzICovCi0jZGVmaW5lCUIyUkFUXzEJCQkweDAwMDAwMTAwICAvKiBCYW5rIDIgUmVhZCBBY2Nlc3MgVGltZSA9IDEgY3ljbGUgKi8KLSNkZWZpbmUJQjJSQVRfMgkJCTB4MDAwMDAyMDAgIC8qIEJhbmsgMiBSZWFkIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMgKi8KLSNkZWZpbmUJQjJSQVRfMwkJCTB4MDAwMDAzMDAgIC8qIEJhbmsgMiBSZWFkIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMgKi8KLSNkZWZpbmUJQjJSQVRfNAkJCTB4MDAwMDA0MDAgIC8qIEJhbmsgMiBSZWFkIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMgKi8KLSNkZWZpbmUJQjJSQVRfNQkJCTB4MDAwMDA1MDAgIC8qIEJhbmsgMiBSZWFkIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMgKi8KLSNkZWZpbmUJQjJSQVRfNgkJCTB4MDAwMDA2MDAgIC8qIEJhbmsgMiBSZWFkIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMgKi8KLSNkZWZpbmUJQjJSQVRfNwkJCTB4MDAwMDA3MDAgIC8qIEJhbmsgMiBSZWFkIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMgKi8KLSNkZWZpbmUJQjJSQVRfOAkJCTB4MDAwMDA4MDAgIC8qIEJhbmsgMiBSZWFkIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMgKi8KLSNkZWZpbmUJQjJSQVRfOQkJCTB4MDAwMDA5MDAgIC8qIEJhbmsgMiBSZWFkIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMgKi8KLSNkZWZpbmUJQjJSQVRfMTAJCTB4MDAwMDBBMDAgIC8qIEJhbmsgMiBSZWFkIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzICovCi0jZGVmaW5lCUIyUkFUXzExCQkweDAwMDAwQjAwICAvKiBCYW5rIDIgUmVhZCBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcyAqLwotI2RlZmluZQlCMlJBVF8xMgkJMHgwMDAwMEMwMCAgLyogQmFuayAyIFJlYWQgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMgKi8KLSNkZWZpbmUJQjJSQVRfMTMJCTB4MDAwMDBEMDAgIC8qIEJhbmsgMiBSZWFkIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzICovCi0jZGVmaW5lCUIyUkFUXzE0CQkweDAwMDAwRTAwICAvKiBCYW5rIDIgUmVhZCBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcyAqLwotI2RlZmluZQlCMlJBVF8xNQkJMHgwMDAwMEYwMCAgLyogQmFuayAyIFJlYWQgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMgKi8KLSNkZWZpbmUJQjJXQVRfMQkJCTB4MDAwMDEwMDAgIC8qIEJhbmsgMiBXcml0ZSBBY2Nlc3MgVGltZQk9IDEgY3ljbGUgKi8KLSNkZWZpbmUJQjJXQVRfMgkJCTB4MDAwMDIwMDAgIC8qIEJhbmsgMiBXcml0ZSBBY2Nlc3MgVGltZQk9IDIgY3ljbGVzICovCi0jZGVmaW5lCUIyV0FUXzMJCQkweDAwMDAzMDAwICAvKiBCYW5rIDIgV3JpdGUgQWNjZXNzIFRpbWUJPSAzIGN5Y2xlcyAqLwotI2RlZmluZQlCMldBVF80CQkJMHgwMDAwNDAwMCAgLyogQmFuayAyIFdyaXRlIEFjY2VzcyBUaW1lCT0gNCBjeWNsZXMgKi8KLSNkZWZpbmUJQjJXQVRfNQkJCTB4MDAwMDUwMDAgIC8qIEJhbmsgMiBXcml0ZSBBY2Nlc3MgVGltZQk9IDUgY3ljbGVzICovCi0jZGVmaW5lCUIyV0FUXzYJCQkweDAwMDA2MDAwICAvKiBCYW5rIDIgV3JpdGUgQWNjZXNzIFRpbWUJPSA2IGN5Y2xlcyAqLwotI2RlZmluZQlCMldBVF83CQkJMHgwMDAwNzAwMCAgLyogQmFuayAyIFdyaXRlIEFjY2VzcyBUaW1lCT0gNyBjeWNsZXMgKi8KLSNkZWZpbmUJQjJXQVRfOAkJCTB4MDAwMDgwMDAgIC8qIEJhbmsgMiBXcml0ZSBBY2Nlc3MgVGltZQk9IDggY3ljbGVzICovCi0jZGVmaW5lCUIyV0FUXzkJCQkweDAwMDA5MDAwICAvKiBCYW5rIDIgV3JpdGUgQWNjZXNzIFRpbWUJPSA5IGN5Y2xlcyAqLwotI2RlZmluZQlCMldBVF8xMAkJMHgwMDAwQTAwMCAgLyogQmFuayAyIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTAgY3ljbGVzICovCi0jZGVmaW5lCUIyV0FUXzExCQkweDAwMDBCMDAwICAvKiBCYW5rIDIgV3JpdGUgQWNjZXNzIFRpbWUJPSAxMSBjeWNsZXMgKi8KLSNkZWZpbmUJQjJXQVRfMTIJCTB4MDAwMEMwMDAgIC8qIEJhbmsgMiBXcml0ZSBBY2Nlc3MgVGltZQk9IDEyIGN5Y2xlcyAqLwotI2RlZmluZQlCMldBVF8xMwkJMHgwMDAwRDAwMCAgLyogQmFuayAyIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTMgY3ljbGVzICovCi0jZGVmaW5lCUIyV0FUXzE0CQkweDAwMDBFMDAwICAvKiBCYW5rIDIgV3JpdGUgQWNjZXNzIFRpbWUJPSAxNCBjeWNsZXMgKi8KLSNkZWZpbmUJQjJXQVRfMTUJCTB4MDAwMEYwMDAgIC8qIEJhbmsgMiBXcml0ZSBBY2Nlc3MgVGltZQk9IDE1IGN5Y2xlcyAqLwotI2RlZmluZQlCM1JEWUVOCQkJMHgwMDAxMDAwMCAgLyogQmFuayAzIFJEWSBlbmFibGUsIDA9ZGlzYWJsZSwgMT1lbmFibGUgKi8KLSNkZWZpbmUJQjNSRFlQT0wJCTB4MDAwMjAwMDAgIC8qIEJhbmsgMyBSRFkgQWN0aXZlIGhpZ2gsIDA9YWN0aXZlCWxvdywgMT1hY3RpdmUgaGlnaCAqLwotI2RlZmluZQlCM1RUXzEJCQkweDAwMDQwMDAwICAvKiBCYW5rIDMgVHJhbnNpdGlvbiBUaW1lIGZyb20gUmVhZAl0byBXcml0ZSA9IDEgY3ljbGUgKi8KLSNkZWZpbmUJQjNUVF8yCQkJMHgwMDA4MDAwMCAgLyogQmFuayAzIFRyYW5zaXRpb24gVGltZSBmcm9tIFJlYWQJdG8gV3JpdGUgPSAyIGN5Y2xlcyAqLwotI2RlZmluZQlCM1RUXzMJCQkweDAwMEMwMDAwICAvKiBCYW5rIDMgVHJhbnNpdGlvbiBUaW1lIGZyb20gUmVhZAl0byBXcml0ZSA9IDMgY3ljbGVzICovCi0jZGVmaW5lCUIzVFRfNAkJCTB4MDAwMDAwMDAgIC8qIEJhbmsgMyBUcmFuc2l0aW9uIFRpbWUgZnJvbSBSZWFkCXRvIFdyaXRlID0gNCBjeWNsZXMgKi8KLSNkZWZpbmUJQjNTVF8xCQkJMHgwMDEwMDAwMCAgLyogQmFuayAzIFNldHVwIFRpbWUgZnJvbSBBT0UgYXNzZXJ0ZWQgdG8gUmVhZCBvciBXcml0ZSBhc3NlcnRlZCA9IDEgY3ljbGUgKi8KLSNkZWZpbmUJQjNTVF8yCQkJMHgwMDIwMDAwMCAgLyogQmFuayAzIFNldHVwIFRpbWUgZnJvbSBBT0UgYXNzZXJ0ZWQgdG8gUmVhZCBvciBXcml0ZSBhc3NlcnRlZCA9IDIgY3ljbGVzICovCi0jZGVmaW5lCUIzU1RfMwkJCTB4MDAzMDAwMDAgIC8qIEJhbmsgMyBTZXR1cCBUaW1lIGZyb20gQU9FIGFzc2VydGVkIHRvIFJlYWQgb3IgV3JpdGUgYXNzZXJ0ZWQgPSAzIGN5Y2xlcyAqLwotI2RlZmluZQlCM1NUXzQJCQkweDAwMDAwMDAwICAvKiBCYW5rIDMgU2V0dXAgVGltZSBmcm9tIEFPRSBhc3NlcnRlZCB0byBSZWFkIG9yIFdyaXRlIGFzc2VydGVkID0gNCBjeWNsZXMgKi8KLSNkZWZpbmUJQjNIVF8xCQkJMHgwMDQwMDAwMCAgLyogQmFuayAzIEhvbGQgVGltZQlmcm9tIFJlYWQgb3IgV3JpdGUgZGVhc3NlcnRlZCB0byBBT0UgZGVhc3NlcnRlZAk9IDEgY3ljbGUgKi8KLSNkZWZpbmUJQjNIVF8yCQkJMHgwMDgwMDAwMCAgLyogQmFuayAzIEhvbGQgVGltZQlmcm9tIFJlYWQgb3IgV3JpdGUgZGVhc3NlcnRlZCB0byBBT0UgZGVhc3NlcnRlZAk9IDIgY3ljbGVzICovCi0jZGVmaW5lCUIzSFRfMwkJCTB4MDBDMDAwMDAgIC8qIEJhbmsgMyBIb2xkIFRpbWUJZnJvbSBSZWFkIG9yIFdyaXRlIGRlYXNzZXJ0ZWQgdG8gQU9FIGRlYXNzZXJ0ZWQJPSAzIGN5Y2xlcyAqLwotI2RlZmluZQlCM0hUXzAJCQkweDAwMDAwMDAwICAvKiBCYW5rIDMgSG9sZCBUaW1lCWZyb20gUmVhZCBvciBXcml0ZSBkZWFzc2VydGVkIHRvIEFPRSBkZWFzc2VydGVkCT0gMCBjeWNsZXMgKi8KLSNkZWZpbmUJQjNSQVRfMQkJCTB4MDEwMDAwMDAgLyogQmFuayAzIFJlYWQgQWNjZXNzIFRpbWUgPQkxIGN5Y2xlICovCi0jZGVmaW5lCUIzUkFUXzIJCQkweDAyMDAwMDAwICAvKiBCYW5rIDMgUmVhZCBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzICovCi0jZGVmaW5lCUIzUkFUXzMJCQkweDAzMDAwMDAwICAvKiBCYW5rIDMgUmVhZCBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzICovCi0jZGVmaW5lCUIzUkFUXzQJCQkweDA0MDAwMDAwICAvKiBCYW5rIDMgUmVhZCBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzICovCi0jZGVmaW5lCUIzUkFUXzUJCQkweDA1MDAwMDAwICAvKiBCYW5rIDMgUmVhZCBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzICovCi0jZGVmaW5lCUIzUkFUXzYJCQkweDA2MDAwMDAwICAvKiBCYW5rIDMgUmVhZCBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzICovCi0jZGVmaW5lCUIzUkFUXzcJCQkweDA3MDAwMDAwICAvKiBCYW5rIDMgUmVhZCBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzICovCi0jZGVmaW5lCUIzUkFUXzgJCQkweDA4MDAwMDAwICAvKiBCYW5rIDMgUmVhZCBBY2Nlc3MgVGltZSA9IDggY3ljbGVzICovCi0jZGVmaW5lCUIzUkFUXzkJCQkweDA5MDAwMDAwICAvKiBCYW5rIDMgUmVhZCBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzICovCi0jZGVmaW5lCUIzUkFUXzEwCQkweDBBMDAwMDAwICAvKiBCYW5rIDMgUmVhZCBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcyAqLwotI2RlZmluZQlCM1JBVF8xMQkJMHgwQjAwMDAwMCAgLyogQmFuayAzIFJlYWQgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMgKi8KLSNkZWZpbmUJQjNSQVRfMTIJCTB4MEMwMDAwMDAgIC8qIEJhbmsgMyBSZWFkIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzICovCi0jZGVmaW5lCUIzUkFUXzEzCQkweDBEMDAwMDAwICAvKiBCYW5rIDMgUmVhZCBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcyAqLwotI2RlZmluZQlCM1JBVF8xNAkJMHgwRTAwMDAwMCAgLyogQmFuayAzIFJlYWQgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMgKi8KLSNkZWZpbmUJQjNSQVRfMTUJCTB4MEYwMDAwMDAgIC8qIEJhbmsgMyBSZWFkIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzICovCi0jZGVmaW5lCUIzV0FUXzEJCQkweDEwMDAwMDAwIC8qIEJhbmsgMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDEgY3ljbGUgKi8KLSNkZWZpbmUJQjNXQVRfMgkJCTB4MjAwMDAwMDAgIC8qIEJhbmsgMyBXcml0ZSBBY2Nlc3MgVGltZQk9IDIgY3ljbGVzICovCi0jZGVmaW5lCUIzV0FUXzMJCQkweDMwMDAwMDAwICAvKiBCYW5rIDMgV3JpdGUgQWNjZXNzIFRpbWUJPSAzIGN5Y2xlcyAqLwotI2RlZmluZQlCM1dBVF80CQkJMHg0MDAwMDAwMCAgLyogQmFuayAzIFdyaXRlIEFjY2VzcyBUaW1lCT0gNCBjeWNsZXMgKi8KLSNkZWZpbmUJQjNXQVRfNQkJCTB4NTAwMDAwMDAgIC8qIEJhbmsgMyBXcml0ZSBBY2Nlc3MgVGltZQk9IDUgY3ljbGVzICovCi0jZGVmaW5lCUIzV0FUXzYJCQkweDYwMDAwMDAwICAvKiBCYW5rIDMgV3JpdGUgQWNjZXNzIFRpbWUJPSA2IGN5Y2xlcyAqLwotI2RlZmluZQlCM1dBVF83CQkJMHg3MDAwMDAwMCAgLyogQmFuayAzIFdyaXRlIEFjY2VzcyBUaW1lCT0gNyBjeWNsZXMgKi8KLSNkZWZpbmUJQjNXQVRfOAkJCTB4ODAwMDAwMDAgIC8qIEJhbmsgMyBXcml0ZSBBY2Nlc3MgVGltZQk9IDggY3ljbGVzICovCi0jZGVmaW5lCUIzV0FUXzkJCQkweDkwMDAwMDAwICAvKiBCYW5rIDMgV3JpdGUgQWNjZXNzIFRpbWUJPSA5IGN5Y2xlcyAqLwotI2RlZmluZQlCM1dBVF8xMAkJMHhBMDAwMDAwMCAgLyogQmFuayAzIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTAgY3ljbGVzICovCi0jZGVmaW5lCUIzV0FUXzExCQkweEIwMDAwMDAwICAvKiBCYW5rIDMgV3JpdGUgQWNjZXNzIFRpbWUJPSAxMSBjeWNsZXMgKi8KLSNkZWZpbmUJQjNXQVRfMTIJCTB4QzAwMDAwMDAgIC8qIEJhbmsgMyBXcml0ZSBBY2Nlc3MgVGltZQk9IDEyIGN5Y2xlcyAqLwotI2RlZmluZQlCM1dBVF8xMwkJMHhEMDAwMDAwMCAgLyogQmFuayAzIFdyaXRlIEFjY2VzcyBUaW1lCT0gMTMgY3ljbGVzICovCi0jZGVmaW5lCUIzV0FUXzE0CQkweEUwMDAwMDAwICAvKiBCYW5rIDMgV3JpdGUgQWNjZXNzIFRpbWUJPSAxNCBjeWNsZXMgKi8KLSNkZWZpbmUJQjNXQVRfMTUJCTB4RjAwMDAwMDAgIC8qIEJhbmsgMyBXcml0ZSBBY2Nlc3MgVGltZQk9IDE1IGN5Y2xlcyAqLwotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqICBTRFJBTSBDT05UUk9MTEVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLS8qIEVCSVVfU0RHQ1RMIE1hc2tzICovCi0jZGVmaW5lCVNDVExFCQkJMHgwMDAwMDAwMSAvKiBFbmFibGUgU0NMS1swXSwgL1NSQVMsIC9TQ0FTLCAvU1dFLCBTRFFNWzM6MF0gKi8KLSNkZWZpbmUJQ0xfMgkJCTB4MDAwMDAwMDggLyogU0RSQU0gQ0FTCWxhdGVuY3kJPSAyIGN5Y2xlcyAqLwotI2RlZmluZQlDTF8zCQkJMHgwMDAwMDAwQyAvKiBTRFJBTSBDQVMJbGF0ZW5jeQk9IDMgY3ljbGVzICovCi0jZGVmaW5lCVBGRQkJCQkweDAwMDAwMDEwIC8qIEVuYWJsZSBTRFJBTSBwcmVmZXRjaCAqLwotI2RlZmluZQlQRlAJCQkJMHgwMDAwMDAyMCAvKiBQcmVmZXRjaCBoYXMgcHJpb3JpdHkgb3ZlciBBTUMgcmVxdWVzdHMgKi8KLSNkZWZpbmUJUEFTUl9BTEwJCTB4MDAwMDAwMDAJLyogQWxsIDQgU0RSQU0gQmFua3MgUmVmcmVzaGVkIEluIFNlbGYtUmVmcmVzaCAqLwotI2RlZmluZQlQQVNSX0IwX0IxCQkweDAwMDAwMDEwCS8qIFNEUkFNIEJhbmtzIDAgYW5kIDEgQXJlIFJlZnJlc2hlZCBJbglTZWxmLVJlZnJlc2ggKi8KLSNkZWZpbmUJUEFTUl9CMAkJCTB4MDAwMDAwMjAJLyogT25seQlTRFJBTSBCYW5rIDAgSXMJUmVmcmVzaGVkIEluIFNlbGYtUmVmcmVzaCAqLwotI2RlZmluZQlUUkFTXzEJCQkweDAwMDAwMDQwIC8qIFNEUkFNIHRSQVMgPSAxIGN5Y2xlICovCi0jZGVmaW5lCVRSQVNfMgkJCTB4MDAwMDAwODAgLyogU0RSQU0gdFJBUyA9IDIgY3ljbGVzICovCi0jZGVmaW5lCVRSQVNfMwkJCTB4MDAwMDAwQzAgLyogU0RSQU0gdFJBUyA9IDMgY3ljbGVzICovCi0jZGVmaW5lCVRSQVNfNAkJCTB4MDAwMDAxMDAgLyogU0RSQU0gdFJBUyA9IDQgY3ljbGVzICovCi0jZGVmaW5lCVRSQVNfNQkJCTB4MDAwMDAxNDAgLyogU0RSQU0gdFJBUyA9IDUgY3ljbGVzICovCi0jZGVmaW5lCVRSQVNfNgkJCTB4MDAwMDAxODAgLyogU0RSQU0gdFJBUyA9IDYgY3ljbGVzICovCi0jZGVmaW5lCVRSQVNfNwkJCTB4MDAwMDAxQzAgLyogU0RSQU0gdFJBUyA9IDcgY3ljbGVzICovCi0jZGVmaW5lCVRSQVNfOAkJCTB4MDAwMDAyMDAgLyogU0RSQU0gdFJBUyA9IDggY3ljbGVzICovCi0jZGVmaW5lCVRSQVNfOQkJCTB4MDAwMDAyNDAgLyogU0RSQU0gdFJBUyA9IDkgY3ljbGVzICovCi0jZGVmaW5lCVRSQVNfMTAJCQkweDAwMDAwMjgwIC8qIFNEUkFNIHRSQVMgPSAxMCBjeWNsZXMgKi8KLSNkZWZpbmUJVFJBU18xMQkJCTB4MDAwMDAyQzAgLyogU0RSQU0gdFJBUyA9IDExIGN5Y2xlcyAqLwotI2RlZmluZQlUUkFTXzEyCQkJMHgwMDAwMDMwMCAvKiBTRFJBTSB0UkFTID0gMTIgY3ljbGVzICovCi0jZGVmaW5lCVRSQVNfMTMJCQkweDAwMDAwMzQwIC8qIFNEUkFNIHRSQVMgPSAxMyBjeWNsZXMgKi8KLSNkZWZpbmUJVFJBU18xNAkJCTB4MDAwMDAzODAgLyogU0RSQU0gdFJBUyA9IDE0IGN5Y2xlcyAqLwotI2RlZmluZQlUUkFTXzE1CQkJMHgwMDAwMDNDMCAvKiBTRFJBTSB0UkFTID0gMTUgY3ljbGVzICovCi0jZGVmaW5lCVRSUF8xCQkJMHgwMDAwMDgwMCAvKiBTRFJBTSB0UlAJPSAxIGN5Y2xlICovCi0jZGVmaW5lCVRSUF8yCQkJMHgwMDAwMTAwMCAvKiBTRFJBTSB0UlAJPSAyIGN5Y2xlcyAqLwotI2RlZmluZQlUUlBfMwkJCTB4MDAwMDE4MDAgLyogU0RSQU0gdFJQCT0gMyBjeWNsZXMgKi8KLSNkZWZpbmUJVFJQXzQJCQkweDAwMDAyMDAwIC8qIFNEUkFNIHRSUAk9IDQgY3ljbGVzICovCi0jZGVmaW5lCVRSUF81CQkJMHgwMDAwMjgwMCAvKiBTRFJBTSB0UlAJPSA1IGN5Y2xlcyAqLwotI2RlZmluZQlUUlBfNgkJCTB4MDAwMDMwMDAgLyogU0RSQU0gdFJQCT0gNiBjeWNsZXMgKi8KLSNkZWZpbmUJVFJQXzcJCQkweDAwMDAzODAwIC8qIFNEUkFNIHRSUAk9IDcgY3ljbGVzICovCi0jZGVmaW5lCVRSQ0RfMQkJCTB4MDAwMDgwMDAgLyogU0RSQU0gdFJDRCA9IDEgY3ljbGUgKi8KLSNkZWZpbmUJVFJDRF8yCQkJMHgwMDAxMDAwMCAvKiBTRFJBTSB0UkNEID0gMiBjeWNsZXMgKi8KLSNkZWZpbmUJVFJDRF8zCQkJMHgwMDAxODAwMCAvKiBTRFJBTSB0UkNEID0gMyBjeWNsZXMgKi8KLSNkZWZpbmUJVFJDRF80CQkJMHgwMDAyMDAwMCAvKiBTRFJBTSB0UkNEID0gNCBjeWNsZXMgKi8KLSNkZWZpbmUJVFJDRF81CQkJMHgwMDAyODAwMCAvKiBTRFJBTSB0UkNEID0gNSBjeWNsZXMgKi8KLSNkZWZpbmUJVFJDRF82CQkJMHgwMDAzMDAwMCAvKiBTRFJBTSB0UkNEID0gNiBjeWNsZXMgKi8KLSNkZWZpbmUJVFJDRF83CQkJMHgwMDAzODAwMCAvKiBTRFJBTSB0UkNEID0gNyBjeWNsZXMgKi8KLSNkZWZpbmUJVFdSXzEJCQkweDAwMDgwMDAwIC8qIFNEUkFNIHRXUgk9IDEgY3ljbGUgKi8KLSNkZWZpbmUJVFdSXzIJCQkweDAwMTAwMDAwIC8qIFNEUkFNIHRXUgk9IDIgY3ljbGVzICovCi0jZGVmaW5lCVRXUl8zCQkJMHgwMDE4MDAwMCAvKiBTRFJBTSB0V1IJPSAzIGN5Y2xlcyAqLwotI2RlZmluZQlQVVBTRAkJCTB4MDAyMDAwMDAgLypQb3dlci11cCBzdGFydCBkZWxheSAqLwotI2RlZmluZQlQU00JCQkJMHgwMDQwMDAwMCAvKiBTRFJBTSBwb3dlci11cCBzZXF1ZW5jZSA9CVByZWNoYXJnZSwgbW9kZQlyZWdpc3RlciBzZXQsIDgJQ0JSIHJlZnJlc2ggY3ljbGVzICovCi0jZGVmaW5lCVBTUwkJCQkweDAwODAwMDAwIC8qIGVuYWJsZSBTRFJBTSBwb3dlci11cCBzZXF1ZW5jZSBvbgluZXh0IFNEUkFNIGFjY2VzcyAqLwotI2RlZmluZQlTUkZTCQkJMHgwMTAwMDAwMCAvKiBTdGFydCBTRFJBTSBzZWxmLXJlZnJlc2ggbW9kZSAqLwotI2RlZmluZQlFQlVGRQkJCTB4MDIwMDAwMDAgLyogRW5hYmxlIGV4dGVybmFsIGJ1ZmZlcmluZwl0aW1pbmcgKi8KLSNkZWZpbmUJRkJCUlcJCQkweDA0MDAwMDAwIC8qIEZhc3QgYmFjay10by1iYWNrCXJlYWQgd3JpdGUgZW5hYmxlICovCi0jZGVmaW5lCUVNUkVOCQkJMHgxMDAwMDAwMCAvKiBFeHRlbmRlZCBtb2RlIHJlZ2lzdGVyIGVuYWJsZSAqLwotI2RlZmluZQlUQ1NSCQkJMHgyMDAwMDAwMCAvKiBUZW1wIGNvbXBlbnNhdGVkIHNlbGYgcmVmcmVzaCB2YWx1ZSA4NSBkZWcgQyAqLwotI2RlZmluZQlDRERCRwkJCTB4NDAwMDAwMDAgLyogVHJpc3RhdGUgU0RSQU0gY29udHJvbHMgZHVyaW5nIGJ1cyBncmFudCAqLwotCi0vKiBFQklVX1NEQkNUTCBNYXNrcyAqLwotI2RlZmluZQlFQkUJCQkJMHgwMDAwMDAwMSAvKiBFbmFibGUgU0RSQU0gZXh0ZXJuYWwgYmFuayAqLwotI2RlZmluZQlFQlNaXzE2CQkJMHgwMDAwMDAwMCAvKiBTRFJBTSBleHRlcm5hbCBiYW5rIHNpemUgPSAxNk1CICovCi0jZGVmaW5lCUVCU1pfMzIJCQkweDAwMDAwMDAyIC8qIFNEUkFNIGV4dGVybmFsIGJhbmsgc2l6ZSA9IDMyTUIgKi8KLSNkZWZpbmUJRUJTWl82NAkJCTB4MDAwMDAwMDQgLyogU0RSQU0gZXh0ZXJuYWwgYmFuayBzaXplID0gNjRNQiAqLwotI2RlZmluZQlFQlNaXzEyOAkJMHgwMDAwMDAwNiAvKiBTRFJBTSBleHRlcm5hbCBiYW5rIHNpemUgPSAxMjhNQiAqLwotI2RlZmluZQlFQlNaXzI1NgkJMHgwMDAwMDAwOCAvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIFNpemUgPSAyNTZNQiAqLwotI2RlZmluZQlFQlNaXzUxMgkJMHgwMDAwMDAwQSAvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIFNpemUgPSA1MTJNQiAqLwotI2RlZmluZQlFQkNBV184CQkJMHgwMDAwMDAwMCAvKiBTRFJBTSBleHRlcm5hbCBiYW5rIGNvbHVtbiBhZGRyZXNzIHdpZHRoID0gOCBiaXRzICovCi0jZGVmaW5lCUVCQ0FXXzkJCQkweDAwMDAwMDEwIC8qIFNEUkFNIGV4dGVybmFsIGJhbmsgY29sdW1uIGFkZHJlc3Mgd2lkdGggPSA5IGJpdHMgKi8KLSNkZWZpbmUJRUJDQVdfMTAJCTB4MDAwMDAwMjAgLyogU0RSQU0gZXh0ZXJuYWwgYmFuayBjb2x1bW4gYWRkcmVzcyB3aWR0aCA9IDkgYml0cyAqLwotI2RlZmluZQlFQkNBV18xMQkJMHgwMDAwMDAzMCAvKiBTRFJBTSBleHRlcm5hbCBiYW5rIGNvbHVtbiBhZGRyZXNzIHdpZHRoID0gOSBiaXRzICovCi0KLS8qIEVCSVVfU0RTVEFUIE1hc2tzICovCi0jZGVmaW5lCVNEQ0kJCQkweDAwMDAwMDAxIC8qIFNEUkFNIGNvbnRyb2xsZXIgaXMgaWRsZSAqLwotI2RlZmluZQlTRFNSQQkJCTB4MDAwMDAwMDIgLyogU0RSQU0gU0RSQU0gc2VsZiByZWZyZXNoIGlzIGFjdGl2ZSAqLwotI2RlZmluZQlTRFBVQQkJCTB4MDAwMDAwMDQgLyogU0RSQU0gcG93ZXIgdXAgYWN0aXZlICAqLwotI2RlZmluZQlTRFJTCQkJMHgwMDAwMDAwOCAvKiBTRFJBTSBpcyBpbiByZXNldAlzdGF0ZSAqLwotI2RlZmluZQlTREVBU0UJCQkweDAwMDAwMDEwIC8qIFNEUkFNIEVBQglzdGlja3kgZXJyb3Igc3RhdHVzIC0gVzFDICovCi0jZGVmaW5lCUJHU1RBVAkJCTB4MDAwMDAwMjAgLyogQnVzIGdyYW50ZWQgKi8KLQotCi0vKiAgKioqKioqKioqKioqKioqKioqKiogIFRXTy1XSVJFIElOVEVSRkFDRSAoVFdJeCkgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKioqLwotLyogVFdJeF9DTEtESVYgTWFjcm9zIChVc2U6ICpwVFdJeF9DTEtESVYgPSBDTEtMT1coeCl8Q0xLSEkoeSk7CSApICovCi0jaWZkZWYgX01JU1JBX1JVTEVTCi0jZGVmaW5lCUNMS0xPVyh4KQkoKHgpICYgMHhGRnUpCQkvKiBQZXJpb2RzIENsb2NrIElzIEhlbGQgTG93ICovCi0jZGVmaW5lCUNMS0hJKHkpCSgoKHkpJjB4RkZ1KTw8MHg4KQkvKiBQZXJpb2RzIEJlZm9yZSBOZXcgQ2xvY2sgTG93ICovCi0jZWxzZQotI2RlZmluZQlDTEtMT1coeCkJKCh4KSAmIDB4RkYpCQkvKiBQZXJpb2RzIENsb2NrIElzIEhlbGQgTG93ICovCi0jZGVmaW5lCUNMS0hJKHkpCSgoKHkpJjB4RkYpPDwweDgpCS8qIFBlcmlvZHMgQmVmb3JlIE5ldyBDbG9jayBMb3cgKi8KLSNlbmRpZiAvKiBfTUlTUkFfUlVMRVMgKi8KLQotLyogVFdJeF9QUkVTQ0FMRSBNYXNrcwkJCQkJCQkJICovCi0jZGVmaW5lCVBSRVNDQUxFCTB4MDA3RgkJLyogU0NMS3MgUGVyIEludGVybmFsIFRpbWUgUmVmZXJlbmNlICgxME1IeikgKi8KLSNkZWZpbmUJVFdJX0VOQQkJMHgwMDgwCQkvKiBUV0kgRW5hYmxlCQkgKi8KLSNkZWZpbmUJU0NDQgkJMHgwMjAwCQkvKiBTQ0NCCUNvbXBhdGliaWxpdHkgRW5hYmxlICovCi0KLS8qIFRXSXhfU0xBVkVfQ1RSTCBNYXNrcwkJCQkJCQkJICovCi0jZGVmaW5lCVNFTgkJCTB4MDAwMQkJLyogU2xhdmUgRW5hYmxlCQkgKi8KLSNkZWZpbmUJU0FERF9MRU4JMHgwMDAyCQkvKiBTbGF2ZSBBZGRyZXNzIExlbmd0aCAqLwotI2RlZmluZQlTVERWQUwJCTB4MDAwNAkJLyogU2xhdmUgVHJhbnNtaXQgRGF0YSBWYWxpZCAqLwotI2RlZmluZQlOQUsJCQkweDAwMDgJCS8qIE5BSy9BQ0sqIEdlbmVyYXRlZCBBdCBDb25jbHVzaW9uIE9mIFRyYW5zZmVyICovCi0jZGVmaW5lCUdFTgkJCTB4MDAxMAkJLyogR2VuZXJhbCBDYWxsCUFkcnJlc3MJTWF0Y2hpbmcgRW5hYmxlZCAqLwotCi0vKiBUV0l4X1NMQVZFX1NUQVQgTWFza3MJCQkJCQkJCSAqLwotI2RlZmluZQlTRElSCQkweDAwMDEJCS8qIFNsYXZlIFRyYW5zZmVyIERpcmVjdGlvbiAoVHJhbnNtaXQvUmVjZWl2ZSopICovCi0jZGVmaW5lCUdDQUxMCQkweDAwMDIJCS8qIEdlbmVyYWwgQ2FsbAlJbmRpY2F0b3IgKi8KLQotLyogVFdJeF9NQVNURVJfQ1RSTCBNYXNrcwkJCQkJCSAqLwotI2RlZmluZQlNRU4JCQkweDAwMDEJCS8qIE1hc3RlciBNb2RlIEVuYWJsZSAqLwotI2RlZmluZQlNQUREX0xFTgkweDAwMDIJCS8qIE1hc3RlciBBZGRyZXNzIExlbmd0aCAqLwotI2RlZmluZQlNRElSCQkweDAwMDQJCS8qIE1hc3RlciBUcmFuc21pdCBEaXJlY3Rpb24gKFJYL1RYKikgKi8KLSNkZWZpbmUJRkFTVAkJMHgwMDA4CQkvKiBVc2UgRmFzdCBNb2RlIFRpbWluZwlTcGVjcyAqLwotI2RlZmluZQlTVE9QCQkweDAwMTAJCS8qIElzc3VlIFN0b3AgQ29uZGl0aW9uICovCi0jZGVmaW5lCVJTVEFSVAkJMHgwMDIwCQkvKiBSZXBlYXQgU3RhcnQJb3IgU3RvcCogQXQgRW5kCU9mIFRyYW5zZmVyICovCi0jZGVmaW5lCURDTlQJCTB4M0ZDMAkJLyogRGF0YQlCeXRlcyBUbyBUcmFuc2ZlciAqLwotI2RlZmluZQlTREFPVlIJCTB4NDAwMAkJLyogU2VyaWFsIERhdGEgT3ZlcnJpZGUgKi8KLSNkZWZpbmUJU0NMT1ZSCQkweDgwMDAJCS8qIFNlcmlhbCBDbG9jawlPdmVycmlkZSAqLwotCi0vKiBUV0l4X01BU1RFUl9TVEFUIE1hc2tzCQkJCQkJCSAqLwotI2RlZmluZQlNUFJPRwkJMHgwMDAxCQkvKiBNYXN0ZXIgVHJhbnNmZXIgSW4gUHJvZ3Jlc3MgKi8KLSNkZWZpbmUJTE9TVEFSQgkJMHgwMDAyCQkvKiBMb3N0CUFyYml0cmF0aW9uIEluZGljYXRvciAoWGZlciBBYm9ydGVkKSAqLwotI2RlZmluZQlBTkFLCQkweDAwMDQJCS8qIEFkZHJlc3MgTm90IEFja25vd2xlZGdlZCAqLwotI2RlZmluZQlETkFLCQkweDAwMDgJCS8qIERhdGEJTm90IEFja25vd2xlZGdlZCAqLwotI2RlZmluZQlCVUZSREVSUgkweDAwMTAJCS8qIEJ1ZmZlciBSZWFkIEVycm9yICovCi0jZGVmaW5lCUJVRldSRVJSCTB4MDAyMAkJLyogQnVmZmVyIFdyaXRlCUVycm9yICovCi0jZGVmaW5lCVNEQVNFTgkJMHgwMDQwCQkvKiBTZXJpYWwgRGF0YSBTZW5zZSAqLwotI2RlZmluZQlTQ0xTRU4JCTB4MDA4MAkJLyogU2VyaWFsIENsb2NrCVNlbnNlICovCi0jZGVmaW5lCUJVU0JVU1kJCTB4MDEwMAkJLyogQnVzIEJ1c3kgSW5kaWNhdG9yICovCi0KLS8qIFRXSXhfSU5UX1NSQwlhbmQgVFdJeF9JTlRfRU5BQkxFIE1hc2tzICovCi0jZGVmaW5lCVNJTklUCQkweDAwMDEJCS8qIFNsYXZlIFRyYW5zZmVyIEluaXRpYXRlZCAqLwotI2RlZmluZQlTQ09NUAkJMHgwMDAyCQkvKiBTbGF2ZSBUcmFuc2ZlciBDb21wbGV0ZSAqLwotI2RlZmluZQlTRVJSCQkweDAwMDQJCS8qIFNsYXZlIFRyYW5zZmVyIEVycm9yICovCi0jZGVmaW5lCVNPVkYJCTB4MDAwOAkJLyogU2xhdmUgT3ZlcmZsb3cgKi8KLSNkZWZpbmUJTUNPTVAJCTB4MDAxMAkJLyogTWFzdGVyIFRyYW5zZmVyIENvbXBsZXRlICovCi0jZGVmaW5lCU1FUlIJCTB4MDAyMAkJLyogTWFzdGVyIFRyYW5zZmVyIEVycm9yICovCi0jZGVmaW5lCVhNVFNFUlYJCTB4MDA0MAkJLyogVHJhbnNtaXQgRklGTyBTZXJ2aWNlICovCi0jZGVmaW5lCVJDVlNFUlYJCTB4MDA4MAkJLyogUmVjZWl2ZSBGSUZPCVNlcnZpY2UgKi8KLQotLyogVFdJeF9GSUZPX0NUTCBNYXNrcwkJCQkJICovCi0jZGVmaW5lCVhNVEZMVVNICTB4MDAwMQkJLyogVHJhbnNtaXQgQnVmZmVyIEZsdXNoICovCi0jZGVmaW5lCVJDVkZMVVNICTB4MDAwMgkJLyogUmVjZWl2ZSBCdWZmZXIgRmx1c2ggKi8KLSNkZWZpbmUJWE1USU5UTEVOCTB4MDAwNAkJLyogVHJhbnNtaXQgQnVmZmVyIEludGVycnVwdCBMZW5ndGggKi8KLSNkZWZpbmUJUkNWSU5UTEVOCTB4MDAwOAkJLyogUmVjZWl2ZSBCdWZmZXIgSW50ZXJydXB0IExlbmd0aCAqLwotCi0vKiBUV0l4X0ZJRk9fU1RBVCBNYXNrcwkJCQkJCQkJICovCi0jZGVmaW5lCVhNVFNUQVQJCTB4MDAwMwkJLyogVHJhbnNtaXQgRklGTyBTdGF0dXMgKi8KLSNkZWZpbmUJWE1UX0VNUFRZCTB4MDAwMAkJLyoJCVRyYW5zbWl0IEZJRk8gRW1wdHkgKi8KLSNkZWZpbmUJWE1UX0hBTEYJMHgwMDAxCQkvKgkJVHJhbnNtaXQgRklGTyBIYXMgMSBCeXRlIFRvIFdyaXRlICovCi0jZGVmaW5lCVhNVF9GVUxMCTB4MDAwMwkJLyoJCVRyYW5zbWl0IEZJRk8gRnVsbCAoMiBCeXRlcyBUbyBXcml0ZSkgKi8KLQotI2RlZmluZQlSQ1ZTVEFUCQkweDAwMEMJCS8qIFJlY2VpdmUgRklGTwlTdGF0dXMgKi8KLSNkZWZpbmUJUkNWX0VNUFRZCTB4MDAwMAkJLyoJCVJlY2VpdmUJRklGTyBFbXB0eSAqLwotI2RlZmluZQlSQ1ZfSEFMRgkweDAwMDQJCS8qCQlSZWNlaXZlCUZJRk8gSGFzIDEgQnl0ZQlUbyBSZWFkICovCi0jZGVmaW5lCVJDVl9GVUxMCTB4MDAwQwkJLyoJCVJlY2VpdmUJRklGTyBGdWxsICgyIEJ5dGVzIFRvIFJlYWQpICovCi0KICNlbmRpZiAvKiBfREVGX0JGNTM5X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggYmQ5YWRiNy4uOGE1YmVlZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTcwLDQgKzcwLDkgQEAKICNkZWZpbmUgUE9SVF9EIEdQSU9fUEQwCiAjZGVmaW5lIFBPUlRfRSBHUElPX1BFMAogCisjaW5jbHVkZSA8bWFjaC1jb21tb24vcG9ydHMtYy5oPgorI2luY2x1ZGUgPG1hY2gtY29tbW9uL3BvcnRzLWQuaD4KKyNpbmNsdWRlIDxtYWNoLWNvbW1vbi9wb3J0cy1lLmg+CisjaW5jbHVkZSA8bWFjaC1jb21tb24vcG9ydHMtZi5oPgorCiAjZW5kaWYgLyogX01BQ0hfR1BJT19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wbGwuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvcGxsLmgKaW5kZXggYjMwYmJjZC4uOTRjY2E2NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wbGwuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL3BsbC5oCkBAIC0xLDYzICsxIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgotICovCi0KLSNpZm5kZWYgX01BQ0hfUExMX0gKLSNkZWZpbmUgX01BQ0hfUExMX0gKLQotI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgotI2luY2x1ZGUgPGFzbS9pcnFmbGFncy5oPgotCi0vKiBXcml0aW5nIHRvIFBMTF9DVEwgaW5pdGlhdGVzIGEgUExMIHJlbG9jayBzZXF1ZW5jZS4gKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYmZpbl93cml0ZV9QTExfQ1RMKHVuc2lnbmVkIGludCB2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgaXdyMCwgaXdyMTsKLQotCWlmICh2YWwgPT0gYmZpbl9yZWFkX1BMTF9DVEwoKSkKLQkJcmV0dXJuOwotCi0JZmxhZ3MgPSBoYXJkX2xvY2FsX2lycV9zYXZlKCk7Ci0JLyogRW5hYmxlIHRoZSBQTEwgV2FrZXVwIGJpdCBpbiBTSUMgSVdSICovCi0JaXdyMCA9IGJmaW5fcmVhZDMyKFNJQ19JV1IwKTsKLQlpd3IxID0gYmZpbl9yZWFkMzIoU0lDX0lXUjEpOwotCS8qIE9ubHkgYWxsb3cgUFBMIFdha2V1cCkgKi8KLQliZmluX3dyaXRlMzIoU0lDX0lXUjAsIElXUl9FTkFCTEUoMCkpOwotCWJmaW5fd3JpdGUzMihTSUNfSVdSMSwgMCk7Ci0KLQliZmluX3dyaXRlMTYoUExMX0NUTCwgdmFsKTsKLQlTU1lOQygpOwotCWFzbSgiSURMRTsiKTsKLQotCWJmaW5fd3JpdGUzMihTSUNfSVdSMCwgaXdyMCk7Ci0JYmZpbl93cml0ZTMyKFNJQ19JV1IxLCBpd3IxKTsKLQloYXJkX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyogV3JpdGluZyB0byBWUl9DVEwgaW5pdGlhdGVzIGEgUExMIHJlbG9jayBzZXF1ZW5jZS4gKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYmZpbl93cml0ZV9WUl9DVEwodW5zaWduZWQgaW50IHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpd3IwLCBpd3IxOwotCi0JaWYgKHZhbCA9PSBiZmluX3JlYWRfVlJfQ1RMKCkpCi0JCXJldHVybjsKLQotCWZsYWdzID0gaGFyZF9sb2NhbF9pcnFfc2F2ZSgpOwotCS8qIEVuYWJsZSB0aGUgUExMIFdha2V1cCBiaXQgaW4gU0lDIElXUiAqLwotCWl3cjAgPSBiZmluX3JlYWQzMihTSUNfSVdSMCk7Ci0JaXdyMSA9IGJmaW5fcmVhZDMyKFNJQ19JV1IxKTsKLQkvKiBPbmx5IGFsbG93IFBQTCBXYWtldXApICovCi0JYmZpbl93cml0ZTMyKFNJQ19JV1IwLCBJV1JfRU5BQkxFKDApKTsKLQliZmluX3dyaXRlMzIoU0lDX0lXUjEsIDApOwotCi0JYmZpbl93cml0ZTE2KFZSX0NUTCwgdmFsKTsKLQlTU1lOQygpOwotCWFzbSgiSURMRTsiKTsKLQotCWJmaW5fd3JpdGUzMihTSUNfSVdSMCwgaXdyMCk7Ci0JYmZpbl93cml0ZTMyKFNJQ19JV1IxLCBpd3IxKTsKLQloYXJkX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotI2VuZGlmIC8qIF9NQUNIX1BMTF9IICovCisjaW5jbHVkZSA8bWFjaC1jb21tb24vcGxsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMKaW5kZXggNGMyZWU2Ny4uZDExNTAyYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9jbV9iZjU0OC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvY21fYmY1NDguYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMF9UWCwgUF9VQVJUMF9SWCwgMAogfTsKIApAQCAtMjExLDcgKzIxMSw3IEBACiAjZW5kaWYKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDFfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQxX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMV9UWCwgUF9VQVJUMV9SWCwKICNpZmRlZiBDT05GSUdfQkZJTl9VQVJUMV9DVFNSVFMKIAlQX1VBUlQxX1JUUywgUF9VQVJUMV9DVFMsCkBAIC0yNTgsNyArMjU4LDcgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0Ml9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDJfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQyX1RYLCBQX1VBUlQyX1JYLCAwCiB9OwogCkBAIC0zMTMsNyArMzEzLDcgQEAKICNlbmRpZgogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0M19wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDNfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQzX1RYLCBQX1VBUlQzX1JYLAogI2lmZGVmIENPTkZJR19CRklOX1VBUlQzX0NUU1JUUwogCVBfVUFSVDNfUlRTLCBQX1VBUlQzX0NUUywKQEAgLTUwNCw2ICs1MDQsNyBAQAogCSAqIGlmIGl0IGlzIHRoZSBjYXNlLgogCSAqLwogCS5ncGlvX3Zyc2VsX2FjdGl2ZQk9IDEsCisJLmNsa2luICAgICAgICAgID0gMjQsICAgICAgICAgICAvKiBtdXNiIENMS0lOIGluIE1IWiAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSBtdXNiX3BsYXQgPSB7CkBAIC01NTIsOSArNTUzLDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQwX1RGUywgUF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsCi0JUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCBQX1NQT1JUMF9EUlNFQywgUF9TUE9SVDBfRFRTRUMsIDAKKwlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQwX3VhcnRfZGV2aWNlID0gewpAQCAtNTg2LDkgKzU4Nyw5IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQxX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDFfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1NQT1JUMV9URlMsIFBfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgUF9TUE9SVDFfUkZTLAotCVBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgUF9TUE9SVDFfRFJTRUMsIFBfU1BPUlQxX0RUU0VDLCAwCisJUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCAwCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MV91YXJ0X2RldmljZSA9IHsKQEAgLTYyMCw3ICs2MjEsNyBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0Ml9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQyX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9TUE9SVDJfVEZTLCBQX1NQT1JUMl9EVFBSSSwgUF9TUE9SVDJfVFNDTEssIFBfU1BPUlQyX1JGUywKIAlQX1NQT1JUMl9EUlBSSSwgUF9TUE9SVDJfUlNDTEssIFBfU1BPUlQyX0RSU0VDLCBQX1NQT1JUMl9EVFNFQywgMAogfTsKQEAgLTY1NCw3ICs2NTUsNyBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0M19wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQzX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9TUE9SVDNfVEZTLCBQX1NQT1JUM19EVFBSSSwgUF9TUE9SVDNfVFNDTEssIFBfU1BPUlQzX1JGUywKIAlQX1NQT1JUM19EUlBSSSwgUF9TUE9SVDNfUlNDTEssIFBfU1BPUlQzX0RSU0VDLCBQX1NQT1JUM19EVFNFQywgMAogfTsKQEAgLTc1Niw3ICs3NTcsNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19DQU5fQkZJTikgfHwgZGVmaW5lZChDT05GSUdfQ0FOX0JGSU5fTU9EVUxFKQotdW5zaWduZWQgc2hvcnQgYmZpbl9jYW5fcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX2Nhbl9wZXJpcGhlcmFsc1tdID0gewogCVBfQ0FOMF9SWCwgUF9DQU4wX1RYLCAwCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMKaW5kZXggNGYwM2ZiYy4uY2U1YTJiYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9lemtpdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYwpAQCAtMjYxLDcgKzI2MSw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMF9UWCwgUF9VQVJUMF9SWCwgMAogfTsKIApAQCAtMzE2LDcgKzMxNiw3IEBACiAjZW5kaWYKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDFfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQxX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMV9UWCwgUF9VQVJUMV9SWCwKICNpZmRlZiBDT05GSUdfQkZJTl9VQVJUMV9DVFNSVFMKIAlQX1VBUlQxX1JUUywgUF9VQVJUMV9DVFMsCkBAIC0zNjMsNyArMzYzLDcgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0Ml9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDJfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQyX1RYLCBQX1VBUlQyX1JYLCAwCiB9OwogCkBAIC00MTgsNyArNDE4LDcgQEAKICNlbmRpZgogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0M19wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDNfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQzX1RYLCBQX1VBUlQzX1JYLAogI2lmZGVmIENPTkZJR19CRklOX1VBUlQzX0NUU1JUUwogCVBfVUFSVDNfUlRTLCBQX1VBUlQzX0NUUywKQEAgLTYwOSw2ICs2MDksNyBAQAogCSAqIGlmIGl0IGlzIHRoZSBjYXNlLgogCSAqLwogCS5ncGlvX3Zyc2VsX2FjdGl2ZQk9IDEsCisJLmNsa2luICAgICAgICAgID0gMjQsICAgICAgICAgICAvKiBtdXNiIENMS0lOIGluIE1IWiAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSBtdXNiX3BsYXQgPSB7CkBAIC02NTcsOSArNjU4LDkgQEAKIAl9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfU1BPUlQwX1RGUywgUF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsCi0JUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCBQX1NQT1JUMF9EUlNFQywgUF9TUE9SVDBfRFRTRUMsIDAKKwlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQwX3VhcnRfZGV2aWNlID0gewpAQCAtNjkxLDkgKzY5Miw5IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQxX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl9zcG9ydDFfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1NQT1JUMV9URlMsIFBfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgUF9TUE9SVDFfUkZTLAotCVBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgUF9TUE9SVDFfRFJTRUMsIFBfU1BPUlQxX0RUU0VDLCAwCisJUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCAwCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MV91YXJ0X2RldmljZSA9IHsKQEAgLTcyNSw3ICs3MjYsNyBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0Ml9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQyX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9TUE9SVDJfVEZTLCBQX1NQT1JUMl9EVFBSSSwgUF9TUE9SVDJfVFNDTEssIFBfU1BPUlQyX1JGUywKIAlQX1NQT1JUMl9EUlBSSSwgUF9TUE9SVDJfUlNDTEssIFBfU1BPUlQyX0RSU0VDLCBQX1NQT1JUMl9EVFNFQywgMAogfTsKQEAgLTc1OSw3ICs3NjAsNyBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3Nwb3J0M19wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fc3BvcnQzX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9TUE9SVDNfVEZTLCBQX1NQT1JUM19EVFBSSSwgUF9TUE9SVDNfVFNDTEssIFBfU1BPUlQzX1JGUywKIAlQX1NQT1JUM19EUlBSSSwgUF9TUE9SVDNfUlNDTEssIFBfU1BPUlQzX0RSU0VDLCBQX1NQT1JUM19EVFNFQywgMAogfTsKQEAgLTc3Nyw3ICs3NzgsNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19DQU5fQkZJTikgfHwgZGVmaW5lZChDT05GSUdfQ0FOX0JGSU5fTU9EVUxFKQotdW5zaWduZWQgc2hvcnQgYmZpbl9jYW5fcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX2Nhbl9wZXJpcGhlcmFsc1tdID0gewogCVBfQ0FOMF9SWCwgUF9DQU4wX1RYLCAwCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvZG1hLmMKaW5kZXggODg4YjljYy4uNjllYWQzMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9kbWEuYwpAQCAtMTEsNyArMTEsNyBAQAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KIAotc3RydWN0IGRtYV9yZWdpc3RlciAqZG1hX2lvX2Jhc2VfYWRkcltNQVhfRE1BX0NIQU5ORUxTXSA9IHsKK3N0cnVjdCBkbWFfcmVnaXN0ZXIgKiBjb25zdCBkbWFfaW9fYmFzZV9hZGRyW01BWF9ETUFfQ0hBTk5FTFNdID0gewogCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIERNQTBfTkVYVF9ERVNDX1BUUiwKIAkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBETUExX05FWFRfREVTQ19QVFIsCiAJKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgRE1BMl9ORVhUX0RFU0NfUFRSLApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NzEwOWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIG1hY2gvYmZpbl9zZXJpYWwuaCAtIEJsYWNrZmluIFVBUlQvU2VyaWFsIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IDIwMDYtMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKKyNpZm5kZWYgX19CRklOX01BQ0hfU0VSSUFMX0hfXworI2RlZmluZSBfX0JGSU5fTUFDSF9TRVJJQUxfSF9fCisKKyNkZWZpbmUgQkZJTl9VQVJUX05SX1BPUlRTCTQKKworI2RlZmluZSBCRklOX1VBUlRfQkY1NFhfU1RZTEUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCBkZDQ0YWE3Li4wZDk0ZWRhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTQsNzIgKzQsMTQgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+CiAKLSNkZWZpbmUgVUFSVF9HRVRfQ0hBUih1YXJ0KSAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX1JCUikpCi0jZGVmaW5lIFVBUlRfR0VUX0RMTCh1YXJ0KQliZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExMKSkKLSNkZWZpbmUgVUFSVF9HRVRfRExIKHVhcnQpCWJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9ETEgpKQotI2RlZmluZSBVQVJUX0dFVF9JRVIodWFydCkgICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfSUVSX1NFVCkpCi0jZGVmaW5lIFVBUlRfR0VUX0xDUih1YXJ0KSAgICAgIGJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MQ1IpKQotI2RlZmluZSBVQVJUX0dFVF9MU1IodWFydCkgICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTFNSKSkKLSNkZWZpbmUgVUFSVF9HRVRfR0NUTCh1YXJ0KSAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0dDVEwpKQotI2RlZmluZSBVQVJUX0dFVF9NU1IodWFydCkgICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTVNSKSkKLSNkZWZpbmUgVUFSVF9HRVRfTUNSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX01DUikpCi0KLSNkZWZpbmUgVUFSVF9QVVRfQ0hBUih1YXJ0LHYpICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9USFIpLHYpCi0jZGVmaW5lIFVBUlRfUFVUX0RMTCh1YXJ0LHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExMKSx2KQotI2RlZmluZSBVQVJUX1NFVF9JRVIodWFydCx2KSAgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lFUl9TRVQpLHYpCi0jZGVmaW5lIFVBUlRfQ0xFQVJfSUVSKHVhcnQsdikgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfSUVSX0NMRUFSKSx2KQotI2RlZmluZSBVQVJUX1BVVF9ETEgodWFydCx2KSAgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0RMSCksdikKLSNkZWZpbmUgVUFSVF9QVVRfTFNSKHVhcnQsdikJYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MU1IpLHYpCi0jZGVmaW5lIFVBUlRfUFVUX0xDUih1YXJ0LHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTENSKSx2KQotI2RlZmluZSBVQVJUX0NMRUFSX0xTUih1YXJ0KSAgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUiksIC0xKQotI2RlZmluZSBVQVJUX1BVVF9HQ1RMKHVhcnQsdikgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0dDVEwpLHYpCi0jZGVmaW5lIFVBUlRfUFVUX01DUih1YXJ0LHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTUNSKSx2KQotI2RlZmluZSBVQVJUX0NMRUFSX1NDVFModWFydCkgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX01TUiksU0NUUykKLQotI2RlZmluZSBVQVJUX1NFVF9ETEFCKHVhcnQpICAgICAvKiBNTVJzIG5vdCBtdXhlZCBvbiBCRjU0eCAqLwotI2RlZmluZSBVQVJUX0NMRUFSX0RMQUIodWFydCkgICAvKiBNTVJzIG5vdCBtdXhlZCBvbiBCRjU0eCAqLwotCi0jZGVmaW5lIFVBUlRfR0VUX0NUUyh4KSAoVUFSVF9HRVRfTVNSKHgpICYgQ1RTKQotI2RlZmluZSBVQVJUX0RJU0FCTEVfUlRTKHgpIFVBUlRfUFVUX01DUih4LCBVQVJUX0dFVF9NQ1IoeCkgJiB+KEFSVFN8TVJUUykpCi0jZGVmaW5lIFVBUlRfRU5BQkxFX1JUUyh4KSBVQVJUX1BVVF9NQ1IoeCwgVUFSVF9HRVRfTUNSKHgpIHwgTVJUUyB8IEFSVFMpCi0jZGVmaW5lIFVBUlRfRU5BQkxFX0lOVFMoeCwgdikgVUFSVF9TRVRfSUVSKHgsIHYpCi0jZGVmaW5lIFVBUlRfRElTQUJMRV9JTlRTKHgpIFVBUlRfQ0xFQVJfSUVSKHgsIDB4RikKLQogI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fVUFSVDBfQ1RTUlRTKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX1VBUlQxX0NUU1JUUykgfHwgXAogCWRlZmluZWQoQ09ORklHX0JGSU5fVUFSVDJfQ1RTUlRTKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX1VBUlQzX0NUU1JUUykKICMgZGVmaW5lIENPTkZJR19TRVJJQUxfQkZJTl9IQVJEX0NUU1JUUwogI2VuZGlmCiAKLSNkZWZpbmUgQkZJTl9VQVJUX1RYX0ZJRk9fU0laRQkyCi0KLS8qCi0gKiBUaGUgcGluIGNvbmZpZ3VyYXRpb24gaXMgZGlmZmVyZW50IGZyb20gc2NoZW1hdGljCi0gKi8KLXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0IHsKLSAgICAgICAgc3RydWN0IHVhcnRfcG9ydCAgICAgICAgcG9ydDsKLSAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgb2xkX3N0YXR1czsKLQlpbnQJCQlzdGF0dXNfaXJxOwotI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9ETUEKLQlpbnQJCQl0eF9kb25lOwotCWludAkJCXR4X2NvdW50OwotCXN0cnVjdCBjaXJjX2J1ZgkJcnhfZG1hX2J1ZjsKLQlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICByeF9kbWFfdGltZXI7Ci0JaW50CQkJcnhfZG1hX25yb3dzOwotCXVuc2lnbmVkIGludAkJdHhfZG1hX2NoYW5uZWw7Ci0JdW5zaWduZWQgaW50CQlyeF9kbWFfY2hhbm5lbDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdHhfZG1hX3dvcmtxdWV1ZTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9IQVJEX0NUU1JUUwotCWludAkJCXNjdHM7Ci0JaW50CQkJY3RzX3BpbjsKLQlpbnQJCQlydHNfcGluOwotI2VuZGlmCi19OwotCiBzdHJ1Y3QgYmZpbl9zZXJpYWxfcmVzIHsKIAl1bnNpZ25lZCBsb25nCXVhcnRfYmFzZV9hZGRyOwogCWludAkJdWFydF9pcnE7CkBAIC0xNDgsMyArOTAsNSBAQAogfTsKIAogI2RlZmluZSBEUklWRVJfTkFNRSAiYmZpbi11YXJ0IgorCisjaW5jbHVkZSA8YXNtL2JmaW5fc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggNTY4NDAzMC4uNzJkYTcyMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpAQCAtMTAsNTggKzEwLDQwIEBACiAjaW5jbHVkZSAiYmY1NDguaCIKICNpbmNsdWRlICJhbm9tYWx5LmgiCiAKKyNpbmNsdWRlIDxhc20vZGVmX0xQQmxhY2tmaW4uaD4KICNpZmRlZiBDT05GSUdfQkY1NDIKLSNpbmNsdWRlICJkZWZCRjU0Mi5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQkY1NDQKLSNpbmNsdWRlICJkZWZCRjU0NC5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQkY1NDcKLSNpbmNsdWRlICJkZWZCRjU0Ny5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQkY1NDgKLSNpbmNsdWRlICJkZWZCRjU0OC5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQkY1NDkKLSNpbmNsdWRlICJkZWZCRjU0OS5oIgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCi0jaWZkZWYgQ09ORklHX0JGNTQyCi0jaW5jbHVkZSAiY2RlZkJGNTQyLmgiCisjIGluY2x1ZGUgImRlZkJGNTQyLmgiCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQkY1NDQKLSNpbmNsdWRlICJjZGVmQkY1NDQuaCIKKyMgaW5jbHVkZSAiZGVmQkY1NDQuaCIKICNlbmRpZgogI2lmZGVmIENPTkZJR19CRjU0NwotI2luY2x1ZGUgImNkZWZCRjU0Ny5oIgorIyBpbmNsdWRlICJkZWZCRjU0Ny5oIgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JGNTQ4Ci0jaW5jbHVkZSAiY2RlZkJGNTQ4LmgiCisjIGluY2x1ZGUgImRlZkJGNTQ4LmgiCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQkY1NDkKLSNpbmNsdWRlICJjZGVmQkY1NDkuaCIKKyMgaW5jbHVkZSAiZGVmQkY1NDkuaCIKICNlbmRpZgogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworIyBpbmNsdWRlIDxhc20vY2RlZl9MUEJsYWNrZmluLmg+CisjIGlmZGVmIENPTkZJR19CRjU0MgorIyAgaW5jbHVkZSAiY2RlZkJGNTQyLmgiCisjIGVuZGlmCisjIGlmZGVmIENPTkZJR19CRjU0NAorIyAgaW5jbHVkZSAiY2RlZkJGNTQ0LmgiCisjIGVuZGlmCisjIGlmZGVmIENPTkZJR19CRjU0NworIyAgaW5jbHVkZSAiY2RlZkJGNTQ3LmgiCisjIGVuZGlmCisjIGlmZGVmIENPTkZJR19CRjU0OAorIyAgaW5jbHVkZSAiY2RlZkJGNTQ4LmgiCisjIGVuZGlmCisjIGlmZGVmIENPTkZJR19CRjU0OQorIyAgaW5jbHVkZSAiY2RlZkJGNTQ5LmgiCisjIGVuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBCRklOX1VBUlRfTlJfUE9SVFMJNAotCi0jZGVmaW5lIE9GRlNFVF9ETEwgICAgICAgICAgICAgIDB4MDAJLyogRGl2aXNvciBMYXRjaCAoTG93LUJ5dGUpICAgICAgICAgICAgICovCi0jZGVmaW5lIE9GRlNFVF9ETEggICAgICAgICAgICAgIDB4MDQJLyogRGl2aXNvciBMYXRjaCAoSGlnaC1CeXRlKSAgICAgICAgICAgICovCi0jZGVmaW5lIE9GRlNFVF9HQ1RMICAgICAgICAgICAgIDB4MDgJLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICovCi0jZGVmaW5lIE9GRlNFVF9MQ1IgICAgICAgICAgICAgIDB4MEMJLyogTGluZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE9GRlNFVF9NQ1IgICAgICAgICAgICAgIDB4MTAJLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE9GRlNFVF9MU1IgICAgICAgICAgICAgIDB4MTQJLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE9GRlNFVF9NU1IgICAgICAgICAgICAgIDB4MTgJLyogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE9GRlNFVF9TQ1IgICAgICAgICAgICAgIDB4MUMJLyogU0NSIFNjcmF0Y2ggUmVnaXN0ZXIgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE9GRlNFVF9JRVJfU0VUICAgICAgICAgIDB4MjAJLyogU2V0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICovCi0jZGVmaW5lIE9GRlNFVF9JRVJfQ0xFQVIgICAgICAgIDB4MjQJLyogQ2xlYXIgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAgICAgICovCi0jZGVmaW5lIE9GRlNFVF9USFIgICAgICAgICAgICAgIDB4MjgJLyogVHJhbnNtaXQgSG9sZGluZyByZWdpc3RlciAgICAgICAgICAgICovCi0jZGVmaW5lIE9GRlNFVF9SQlIgICAgICAgICAgICAgIDB4MkMJLyogUmVjZWl2ZSBCdWZmZXIgcmVnaXN0ZXIgICAgICAgICAgICAgICovCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQyLmgKaW5kZXggNDJmNGE5NC4uZDA5YzE5YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Mi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDctMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCkBAIC03LDE0ICs3LDYgQEAKICNpZm5kZWYgX0NERUZfQkY1NDJfSAogI2RlZmluZSBfQ0RFRl9CRjU0Ml9ICiAKLS8qIGluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlICJkZWZCRjU0Mi5oIgotCi0vKiBpbmNsdWRlIGNvcmUgc2JmaW5fcmVhZF8oKWVjaWZpYyByZWdpc3RlciBwb2ludGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8YXNtL2NkZWZfTFBCbGFja2Zpbi5oPgotCi0vKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjU0MiAqLwotCiAvKiBpbmNsdWRlIGNkZWZCRjU0eF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTR4IGJmaW5fcmVhZF8oKXJvY2Vzc29ycyAqLwogI2luY2x1ZGUgImNkZWZCRjU0eF9iYXNlLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0NC5oCmluZGV4IDIyMDc3OTkuLjMzZWM4MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpAQCAtNywxNCArNyw2IEBACiAjaWZuZGVmIF9DREVGX0JGNTQ0X0gKICNkZWZpbmUgX0NERUZfQkY1NDRfSAogCi0vKiBpbmNsdWRlIGFsbCBDb3JlIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zICovCi0jaW5jbHVkZSAiZGVmQkY1NDQuaCIKLQotLyogaW5jbHVkZSBjb3JlIHNiZmluX3JlYWRfKCllY2lmaWMgcmVnaXN0ZXIgcG9pbnRlciBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGFzbS9jZGVmX0xQQmxhY2tmaW4uaD4KLQotLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1NDQgKi8KLQogLyogaW5jbHVkZSBjZGVmQkY1NHhfYmFzZS5oIGZvciB0aGUgc2V0IG9mICNkZWZpbmVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQURTUC1CRjU0eCBiZmluX3JlYWRfKClyb2Nlc3NvcnMgKi8KICNpbmNsdWRlICJjZGVmQkY1NHhfYmFzZS5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Ny5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDcuaAppbmRleCBiYzY1MGU2Li5iY2I5NzI2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Ny5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ3LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCkBAIC03LDE0ICs3LDYgQEAKICNpZm5kZWYgX0NERUZfQkY1NDdfSAogI2RlZmluZSBfQ0RFRl9CRjU0N19ICiAKLS8qIGluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlICJkZWZCRjU0Ny5oIgotCi0vKiBpbmNsdWRlIGNvcmUgc2JmaW5fcmVhZF8oKWVjaWZpYyByZWdpc3RlciBwb2ludGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8YXNtL2NkZWZfTFBCbGFja2Zpbi5oPgotCi0vKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjU0NyAqLwotCiAvKiBpbmNsdWRlIGNkZWZCRjU0eF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTR4IGJmaW5fcmVhZF8oKXJvY2Vzc29ycyAqLwogI2luY2x1ZGUgImNkZWZCRjU0eF9iYXNlLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OC5oCmluZGV4IDM1MjNlMDguLmJhZTY3YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDguaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpAQCAtNywxNCArNyw2IEBACiAjaWZuZGVmIF9DREVGX0JGNTQ4X0gKICNkZWZpbmUgX0NERUZfQkY1NDhfSAogCi0vKiBpbmNsdWRlIGFsbCBDb3JlIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zICovCi0jaW5jbHVkZSAiZGVmQkY1NDguaCIKLQotLyogaW5jbHVkZSBjb3JlIHNiZmluX3JlYWRfKCllY2lmaWMgcmVnaXN0ZXIgcG9pbnRlciBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGFzbS9jZGVmX0xQQmxhY2tmaW4uaD4KLQotLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1NDggKi8KLQogLyogaW5jbHVkZSBjZGVmQkY1NHhfYmFzZS5oIGZvciB0aGUgc2V0IG9mICNkZWZpbmVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQURTUC1CRjU0eCBiZmluX3JlYWRfKClyb2Nlc3NvcnMgKi8KICNpbmNsdWRlICJjZGVmQkY1NHhfYmFzZS5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDkuaAppbmRleCA4MDIwMWVkLi4wMDIxMzZhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KQEAgLTcsMTQgKzcsNiBAQAogI2lmbmRlZiBfQ0RFRl9CRjU0OV9ICiAjZGVmaW5lIF9DREVGX0JGNTQ5X0gKIAotLyogaW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgImRlZkJGNTQ5LmgiCi0KLS8qIGluY2x1ZGUgY29yZSBzYmZpbl9yZWFkXygpZWNpZmljIHJlZ2lzdGVyIHBvaW50ZXIgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxhc20vY2RlZl9MUEJsYWNrZmluLmg+Ci0KLS8qIFNZU1RFTSAmIE1NUiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTQ5ICovCi0KIC8qIGluY2x1ZGUgY2RlZkJGNTR4X2Jhc2UuaCBmb3IgdGhlIHNldCBvZiAjZGVmaW5lcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIEFEU1AtQkY1NHggYmZpbl9yZWFkXygpcm9jZXNzb3JzICovCiAjaW5jbHVkZSAiY2RlZkJGNTR4X2Jhc2UuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NHhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NHhfYmFzZS5oCmluZGV4IGRlYWY1ZDYuLjUwYzg5YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTR4X2Jhc2UuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0eF9iYXNlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KQEAgLTcsMTAgKzcsNiBAQAogI2lmbmRlZiBfQ0RFRl9CRjU0WF9ICiAjZGVmaW5lIF9DREVGX0JGNTRYX0gKIAotI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgotCi0jaW5jbHVkZSAiZGVmQkY1NHhfYmFzZS5oIgotCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgQ09NTU9OIFRPIEFMTCBBRFNQLUJGNTR4ICAgICovCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwpAQCAtMjYzMywyMiArMjYyOSw1IEBACiAKIC8qIEhhbmRzaGFrZSBNRE1BIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBzaGFyZWQgZmlsZSBiZWNhdXNlIGl0IGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIEFEU1AtQkY1NDIgYmZpbl9yZWFkXygpcm9jZXNzb3IgKi8KIAotLyogbGVnYWN5IGRlZmluaXRpb25zICovCi0jZGVmaW5lIGJmaW5fcmVhZF9FQklVX0FNQ0JDVEwwCQliZmluX3JlYWRfRUJJVV9BTUJDVEwwCi0jZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9BTUNCQ1RMMAliZmluX3dyaXRlX0VCSVVfQU1CQ1RMMAotI2RlZmluZSBiZmluX3JlYWRfRUJJVV9BTUNCQ1RMMQkJYmZpbl9yZWFkX0VCSVVfQU1CQ1RMMQotI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfQU1DQkNUTDEJYmZpbl93cml0ZV9FQklVX0FNQkNUTDEKLSNkZWZpbmUgYmZpbl9yZWFkX1BJTlQwX0lSUQkJYmZpbl9yZWFkX1BJTlQwX1JFUVVFU1QKLSNkZWZpbmUgYmZpbl93cml0ZV9QSU5UMF9JUlEJCWJmaW5fd3JpdGVfUElOVDBfUkVRVUVTVAotI2RlZmluZSBiZmluX3JlYWRfUElOVDFfSVJRCQliZmluX3JlYWRfUElOVDFfUkVRVUVTVAotI2RlZmluZSBiZmluX3dyaXRlX1BJTlQxX0lSUQkJYmZpbl93cml0ZV9QSU5UMV9SRVFVRVNUCi0jZGVmaW5lIGJmaW5fcmVhZF9QSU5UMl9JUlEJCWJmaW5fcmVhZF9QSU5UMl9SRVFVRVNUCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElOVDJfSVJRCQliZmluX3dyaXRlX1BJTlQyX1JFUVVFU1QKLSNkZWZpbmUgYmZpbl9yZWFkX1BJTlQzX0lSUQkJYmZpbl9yZWFkX1BJTlQzX1JFUVVFU1QKLSNkZWZpbmUgYmZpbl93cml0ZV9QSU5UM19JUlEJCWJmaW5fd3JpdGVfUElOVDNfUkVRVUVTVAotCi0vKiBUaGVzZSBuZWVkIHRvIGJlIGxhc3QgZHVlIHRvIHRoZSBjZGVmL2xpbnV4IGludGVyLWRlcGVuZGVuY2llcyAqLwotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQogI2VuZGlmIC8qIF9DREVGX0JGNTRYX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Mi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Mi5oCmluZGV4IGFiZjVmNzUuLjYyOWJmMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KQEAgLTcsMTEgKzcsNiBAQAogI2lmbmRlZiBfREVGX0JGNTQyX0gKICNkZWZpbmUgX0RFRl9CRjU0Ml9ICiAKLS8qIEluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxhc20vZGVmX0xQQmxhY2tmaW4uaD4KLQotLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1NDIgKi8KLQogLyogSW5jbHVkZSBkZWZCRjU0eF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTR4IHByb2Nlc3NvcnMgKi8KICNpbmNsdWRlICJkZWZCRjU0eF9iYXNlLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDQuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDQuaAppbmRleCBlMjc3MTA5Li42NDI0NjhjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0NC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDctMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCkBAIC03LDExICs3LDYgQEAKICNpZm5kZWYgX0RFRl9CRjU0NF9ICiAjZGVmaW5lIF9ERUZfQkY1NDRfSAogCi0vKiBJbmNsdWRlIGFsbCBDb3JlIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8YXNtL2RlZl9MUEJsYWNrZmluLmg+Ci0KLS8qIFNZU1RFTSAmIE1NUiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTQ0ICovCi0KIC8qIEluY2x1ZGUgZGVmQkY1NHhfYmFzZS5oIGZvciB0aGUgc2V0IG9mICNkZWZpbmVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQURTUC1CRjU0eCBwcm9jZXNzb3JzICovCiAjaW5jbHVkZSAiZGVmQkY1NHhfYmFzZS5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ3LmgKaW5kZXggYmUyMWJhNS4uMmYzMzM3YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Ny5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KQEAgLTcsMTEgKzcsNiBAQAogI2lmbmRlZiBfREVGX0JGNTQ3X0gKICNkZWZpbmUgX0RFRl9CRjU0N19ICiAKLS8qIEluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxhc20vZGVmX0xQQmxhY2tmaW4uaD4KLQotLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1NDcgKi8KLQogLyogSW5jbHVkZSBkZWZCRjU0eF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTR4IHByb2Nlc3NvcnMgKi8KICNpbmNsdWRlICJkZWZCRjU0eF9iYXNlLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDguaAppbmRleCAzZmIzM2IwLi4zYzdmMWI2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDctMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCkBAIC03LDExICs3LDYgQEAKICNpZm5kZWYgX0RFRl9CRjU0OF9ICiAjZGVmaW5lIF9ERUZfQkY1NDhfSAogCi0vKiBJbmNsdWRlIGFsbCBDb3JlIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8YXNtL2RlZl9MUEJsYWNrZmluLmg+Ci0KLS8qIFNZU1RFTSAmIE1NUiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTQ4ICovCi0KIC8qIEluY2x1ZGUgZGVmQkY1NHhfYmFzZS5oIGZvciB0aGUgc2V0IG9mICNkZWZpbmVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQURTUC1CRjU0eCBwcm9jZXNzb3JzICovCiAjaW5jbHVkZSAiZGVmQkY1NHhfYmFzZS5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ5LmgKaW5kZXggNWEwNGU2ZC4uOWE0NWNiNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwpAQCAtNywxMSArNyw2IEBACiAjaWZuZGVmIF9ERUZfQkY1NDlfSAogI2RlZmluZSBfREVGX0JGNTQ5X0gKIAotLyogSW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGFzbS9kZWZfTFBCbGFja2Zpbi5oPgotCi0vKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjU0OSAqLwotCiAvKiBJbmNsdWRlIGRlZkJGNTR4X2Jhc2UuaCBmb3IgdGhlIHNldCBvZiAjZGVmaW5lcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIEFEU1AtQkY1NHggcHJvY2Vzc29ycyAqLwogI2luY2x1ZGUgImRlZkJGNTR4X2Jhc2UuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0eF9iYXNlLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTR4X2Jhc2UuaAppbmRleCA3OGY5MTEwLi4wODY3YzJiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTR4X2Jhc2UuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTR4X2Jhc2UuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwpAQCAtMTYxNSwxNCArMTYxNSwxNCBAQAogI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENUWVBFICAweDQwICAgICAgIC8qIERNQSBDaGFubmVsIFR5cGUgKi8KICNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUE1BUCAgMHhmMDAwICAgICAvKiBQZXJpcGhlcmFsIE1hcHBlZCBUbyBUaGlzIENoYW5uZWwgKi8KIAotLyogQml0IG1hc2tzIGZvciBETUFDeF9UQ1BFUiAqLworLyogQml0IG1hc2tzIGZvciBETUFDeF9UQ19QRVIgKi8KIAogI2RlZmluZSAgICAgICAgRENCX1RSQUZGSUNfUEVSSU9EICAweGYgICAgICAgIC8qIERDQiBUcmFmZmljIENvbnRyb2wgUGVyaW9kICovCiAjZGVmaW5lICAgICAgICBERUJfVFJBRkZJQ19QRVJJT0QgIDB4ZjAgICAgICAgLyogREVCIFRyYWZmaWMgQ29udHJvbCBQZXJpb2QgKi8KICNkZWZpbmUgICAgICAgIERBQl9UUkFGRklDX1BFUklPRCAgMHg3MDAgICAgICAvKiBEQUIgVHJhZmZpYyBDb250cm9sIFBlcmlvZCAqLwogI2RlZmluZSAgIE1ETUFfUk9VTkRfUk9CSU5fUEVSSU9EICAweGY4MDAgICAgIC8qIE1ETUEgUm91bmQgUm9iaW4gUGVyaW9kICovCiAKLS8qIEJpdCBtYXNrcyBmb3IgRE1BQ3hfVENDTlQgKi8KKy8qIEJpdCBtYXNrcyBmb3IgRE1BQ3hfVENfQ05UICovCiAKICNkZWZpbmUgICAgICAgICBEQ0JfVFJBRkZJQ19DT1VOVCAgMHhmICAgICAgICAvKiBEQ0IgVHJhZmZpYyBDb250cm9sIENvdW50ICovCiAjZGVmaW5lICAgICAgICAgREVCX1RSQUZGSUNfQ09VTlQgIDB4ZjAgICAgICAgLyogREVCIFRyYWZmaWMgQ29udHJvbCBDb3VudCAqLwpAQCAtMjE3Miw2OCArMjE3Miw2IEBACiAKICNkZWZpbmUgICAgICAgICAgICAgICAgIFJDVkRBVEExNiAgMHhmZmZmICAgICAvKiBSZWNlaXZlIEZJRk8gMTYtQml0IERhdGEgKi8KIAotLyogQml0IG1hc2tzIGZvciBVQVJUeF9MQ1IgKi8KLQotI2lmIDAKLS8qIGNvbmZsaWN0cyB3aXRoIGxlZ2FjeSBvbmUgaW4gbGFzdCBzZWN0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBXTFMgIDB4MyAgICAgICAgLyogV29yZCBMZW5ndGggU2VsZWN0ICovCi0jZW5kaWYKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFNUQiAgMHg0ICAgICAgICAvKiBTdG9wIEJpdHMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBFTiAgMHg4ICAgICAgICAvKiBQYXJpdHkgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBFUFMgIDB4MTAgICAgICAgLyogRXZlbiBQYXJpdHkgU2VsZWN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBTVFAgIDB4MjAgICAgICAgLyogU3RpY2t5IFBhcml0eSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNCICAweDQwICAgICAgIC8qIFNldCBCcmVhayAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVBUlR4X01DUiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFhPRkYgIDB4MSAgICAgICAgLyogVHJhbnNtaXR0ZXIgT2ZmICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1SVFMgIDB4MiAgICAgICAgLyogTWFudWFsIFJlcXVlc3QgVG8gU2VuZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSRklUICAweDQgICAgICAgIC8qIFJlY2VpdmUgRklGTyBJUlEgVGhyZXNob2xkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJGUlQgIDB4OCAgICAgICAgLyogUmVjZWl2ZSBGSUZPIFJUUyBUaHJlc2hvbGQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBMT09QX0VOQSAgMHgxMCAgICAgICAvKiBMb29wYmFjayBNb2RlIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEZDUE9MICAweDIwICAgICAgIC8qIEZsb3cgQ29udHJvbCBQaW4gUG9sYXJpdHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQVJUUyAgMHg0MCAgICAgICAvKiBBdXRvbWF0aWMgUmVxdWVzdCBUbyBTZW5kICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFDVFMgIDB4ODAgICAgICAgLyogQXV0b21hdGljIENsZWFyIFRvIFNlbmQgKi8KLQotLyogQml0IG1hc2tzIGZvciBVQVJUeF9MU1IgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIERSICAweDEgICAgICAgIC8qIERhdGEgUmVhZHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBPRSAgMHgyICAgICAgICAvKiBPdmVycnVuIEVycm9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUEUgIDB4NCAgICAgICAgLyogUGFyaXR5IEVycm9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgRkUgIDB4OCAgICAgICAgLyogRnJhbWluZyBFcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIEJJICAweDEwICAgICAgIC8qIEJyZWFrIEludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUSFJFICAweDIwICAgICAgIC8qIFRIUiBFbXB0eSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBURU1UICAweDQwICAgICAgIC8qIFRyYW5zbWl0dGVyIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBURkkgIDB4ODAgICAgICAgLyogVHJhbnNtaXNzaW9uIEZpbmlzaGVkIEluZGljYXRvciAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVBUlR4X01TUiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNDVFMgIDB4MSAgICAgICAgLyogU3RpY2t5IENUUyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ1RTICAweDEwICAgICAgIC8qIENsZWFyIFRvIFNlbmQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUkZDUyAgMHgyMCAgICAgICAvKiBSZWNlaXZlIEZJRk8gQ291bnQgU3RhdHVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVUFSVHhfSUVSX1NFVCAmIFVBUlR4X0lFUl9DTEVBUiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEVSQkZJICAweDEgICAgICAgIC8qIEVuYWJsZSBSZWNlaXZlIEJ1ZmZlciBGdWxsIEludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBFVEJFSSAgMHgyICAgICAgICAvKiBFbmFibGUgVHJhbnNtaXQgQnVmZmVyIEVtcHR5IEludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRUxTSSAgMHg0ICAgICAgICAvKiBFbmFibGUgUmVjZWl2ZSBTdGF0dXMgSW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEVEU1NJICAweDggICAgICAgIC8qIEVuYWJsZSBNb2RlbSBTdGF0dXMgSW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRURUUFRJICAweDEwICAgICAgIC8qIEVuYWJsZSBETUEgVHJhbnNtaXQgUElSUSBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVURkkgIDB4MjAgICAgICAgLyogRW5hYmxlIFRyYW5zbWlzc2lvbiBGaW5pc2hlZCBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgRVJGQ0kgIDB4NDAgICAgICAgLyogRW5hYmxlIFJlY2VpdmUgRklGTyBDb3VudCBJbnRlcnJ1cHQgKi8KLQotLyogQml0IG1hc2tzIGZvciBVQVJUeF9HQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVUNFTiAgMHgxICAgICAgICAvKiBVQVJUIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBJUkVOICAweDIgICAgICAgIC8qIElyREEgTW9kZSBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUE9MQyAgMHg0ICAgICAgICAvKiBJckRBIFRYIFBvbGFyaXR5IENoYW5nZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJQT0xDICAweDggICAgICAgIC8qIElyREEgUlggUG9sYXJpdHkgQ2hhbmdlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBGUEUgIDB4MTAgICAgICAgLyogRm9yY2UgUGFyaXR5IEVycm9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBGRkUgIDB4MjAgICAgICAgLyogRm9yY2UgRnJhbWluZyBFcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBFREJPICAweDQwICAgICAgIC8qIEVuYWJsZSBEaXZpZGUtYnktT25lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUdMU0kgIDB4ODAgICAgICAgLyogRW5hYmxlIEdsb2JhbCBMUyBJbnRlcnJ1cHQgKi8KLQotCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAvKiAgICAgTVVMVEkgQklUIE1BQ1JPIEVOVU1FUkFUSU9OUyAgICAgICAgICAgICovCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCkBAIC0yMjUxLDEzICsyMTg5LDYgQEAKICNkZWZpbmUgV0RUSF9DQVAgMHgwMDAyCiAjZGVmaW5lIEVYVF9DTEsgIDB4MDAwMwogCi0vKiBVQVJUeF9MQ1IgYml0IGZpZWxkIG9wdGlvbnMgKi8KLQotI2RlZmluZSBXTFNfNSAgIDB4MDAwMCAgICAvKiA1IGRhdGEgYml0cyAqLwotI2RlZmluZSBXTFNfNiAgIDB4MDAwMSAgICAvKiA2IGRhdGEgYml0cyAqLwotI2RlZmluZSBXTFNfNyAgIDB4MDAwMiAgICAvKiA3IGRhdGEgYml0cyAqLwotI2RlZmluZSBXTFNfOCAgIDB4MDAwMyAgICAvKiA4IGRhdGEgYml0cyAqLwotCiAvKiBQSU5UeCBSZWdpc3RlciBCaXQgRGVmaW5pdGlvbnMgKi8KIAogI2RlZmluZSBQSVEwIDB4MDAwMDAwMDEKQEAgLTIzMDAsMjQwICsyMjMxLDYgQEAKICNkZWZpbmUgUElRMzAgMHg0MDAwMDAwMAogI2RlZmluZSBQSVEzMSAweDgwMDAwMDAwCiAKLS8qIFBPUlQgQSBCaXQgRGVmaW5pdGlvbnMgZm9yIHRoZSByZWdpc3RlcnMKLVBPUlRBLCBQT1JUQV9TRVQsIFBPUlRBX0NMRUFSLAotUE9SVEFfRElSX1NFVCwgUE9SVEFfRElSX0NMRUFSLCBQT1JUQV9JTkVOLAotUE9SVEFfRkVSIHJlZ2lzdGVycwotKi8KLQotI2RlZmluZSBQQTAgMHgwMDAxCi0jZGVmaW5lIFBBMSAweDAwMDIKLSNkZWZpbmUgUEEyIDB4MDAwNAotI2RlZmluZSBQQTMgMHgwMDA4Ci0jZGVmaW5lIFBBNCAweDAwMTAKLSNkZWZpbmUgUEE1IDB4MDAyMAotI2RlZmluZSBQQTYgMHgwMDQwCi0jZGVmaW5lIFBBNyAweDAwODAKLSNkZWZpbmUgUEE4IDB4MDEwMAotI2RlZmluZSBQQTkgMHgwMjAwCi0jZGVmaW5lIFBBMTAgMHgwNDAwCi0jZGVmaW5lIFBBMTEgMHgwODAwCi0jZGVmaW5lIFBBMTIgMHgxMDAwCi0jZGVmaW5lIFBBMTMgMHgyMDAwCi0jZGVmaW5lIFBBMTQgMHg0MDAwCi0jZGVmaW5lIFBBMTUgMHg4MDAwCi0KLS8qIFBPUlQgQiBCaXQgRGVmaW5pdGlvbnMgZm9yIHRoZSByZWdpc3RlcnMKLVBPUlRCLCBQT1JUQl9TRVQsIFBPUlRCX0NMRUFSLAotUE9SVEJfRElSX1NFVCwgUE9SVEJfRElSX0NMRUFSLCBQT1JUQl9JTkVOLAotUE9SVEJfRkVSIHJlZ2lzdGVycwotKi8KLQotI2RlZmluZSBQQjAgMHgwMDAxCi0jZGVmaW5lIFBCMSAweDAwMDIKLSNkZWZpbmUgUEIyIDB4MDAwNAotI2RlZmluZSBQQjMgMHgwMDA4Ci0jZGVmaW5lIFBCNCAweDAwMTAKLSNkZWZpbmUgUEI1IDB4MDAyMAotI2RlZmluZSBQQjYgMHgwMDQwCi0jZGVmaW5lIFBCNyAweDAwODAKLSNkZWZpbmUgUEI4IDB4MDEwMAotI2RlZmluZSBQQjkgMHgwMjAwCi0jZGVmaW5lIFBCMTAgMHgwNDAwCi0jZGVmaW5lIFBCMTEgMHgwODAwCi0jZGVmaW5lIFBCMTIgMHgxMDAwCi0jZGVmaW5lIFBCMTMgMHgyMDAwCi0jZGVmaW5lIFBCMTQgMHg0MDAwCi0KLQotLyogUE9SVCBDIEJpdCBEZWZpbml0aW9ucyBmb3IgdGhlIHJlZ2lzdGVycwotUE9SVEMsIFBPUlRDX1NFVCwgUE9SVENfQ0xFQVIsCi1QT1JUQ19ESVJfU0VULCBQT1JUQ19ESVJfQ0xFQVIsIFBPUlRDX0lORU4sCi1QT1JUQ19GRVIgcmVnaXN0ZXJzCi0qLwotCi0KLSNkZWZpbmUgUEMwIDB4MDAwMQotI2RlZmluZSBQQzEgMHgwMDAyCi0jZGVmaW5lIFBDMiAweDAwMDQKLSNkZWZpbmUgUEMzIDB4MDAwOAotI2RlZmluZSBQQzQgMHgwMDEwCi0jZGVmaW5lIFBDNSAweDAwMjAKLSNkZWZpbmUgUEM2IDB4MDA0MAotI2RlZmluZSBQQzcgMHgwMDgwCi0jZGVmaW5lIFBDOCAweDAxMDAKLSNkZWZpbmUgUEM5IDB4MDIwMAotI2RlZmluZSBQQzEwIDB4MDQwMAotI2RlZmluZSBQQzExIDB4MDgwMAotI2RlZmluZSBQQzEyIDB4MTAwMAotI2RlZmluZSBQQzEzIDB4MjAwMAotCi0KLS8qIFBPUlQgRCBCaXQgRGVmaW5pdGlvbnMgZm9yIHRoZSByZWdpc3RlcnMKLVBPUlRELCBQT1JURF9TRVQsIFBPUlREX0NMRUFSLAotUE9SVERfRElSX1NFVCwgUE9SVERfRElSX0NMRUFSLCBQT1JURF9JTkVOLAotUE9SVERfRkVSIHJlZ2lzdGVycwotKi8KLQotI2RlZmluZSBQRDAgMHgwMDAxCi0jZGVmaW5lIFBEMSAweDAwMDIKLSNkZWZpbmUgUEQyIDB4MDAwNAotI2RlZmluZSBQRDMgMHgwMDA4Ci0jZGVmaW5lIFBENCAweDAwMTAKLSNkZWZpbmUgUEQ1IDB4MDAyMAotI2RlZmluZSBQRDYgMHgwMDQwCi0jZGVmaW5lIFBENyAweDAwODAKLSNkZWZpbmUgUEQ4IDB4MDEwMAotI2RlZmluZSBQRDkgMHgwMjAwCi0jZGVmaW5lIFBEMTAgMHgwNDAwCi0jZGVmaW5lIFBEMTEgMHgwODAwCi0jZGVmaW5lIFBEMTIgMHgxMDAwCi0jZGVmaW5lIFBEMTMgMHgyMDAwCi0jZGVmaW5lIFBEMTQgMHg0MDAwCi0jZGVmaW5lIFBEMTUgMHg4MDAwCi0KLS8qIFBPUlQgRSBCaXQgRGVmaW5pdGlvbnMgZm9yIHRoZSByZWdpc3RlcnMKLVBPUlRFLCBQT1JURV9TRVQsIFBPUlRFX0NMRUFSLAotUE9SVEVfRElSX1NFVCwgUE9SVEVfRElSX0NMRUFSLCBQT1JURV9JTkVOLAotUE9SVEVfRkVSIHJlZ2lzdGVycwotKi8KLQotCi0jZGVmaW5lIFBFMCAweDAwMDEKLSNkZWZpbmUgUEUxIDB4MDAwMgotI2RlZmluZSBQRTIgMHgwMDA0Ci0jZGVmaW5lIFBFMyAweDAwMDgKLSNkZWZpbmUgUEU0IDB4MDAxMAotI2RlZmluZSBQRTUgMHgwMDIwCi0jZGVmaW5lIFBFNiAweDAwNDAKLSNkZWZpbmUgUEU3IDB4MDA4MAotI2RlZmluZSBQRTggMHgwMTAwCi0jZGVmaW5lIFBFOSAweDAyMDAKLSNkZWZpbmUgUEUxMCAweDA0MDAKLSNkZWZpbmUgUEUxMSAweDA4MDAKLSNkZWZpbmUgUEUxMiAweDEwMDAKLSNkZWZpbmUgUEUxMyAweDIwMDAKLSNkZWZpbmUgUEUxNCAweDQwMDAKLSNkZWZpbmUgUEUxNSAweDgwMDAKLQotLyogUE9SVCBGIEJpdCBEZWZpbml0aW9ucyBmb3IgdGhlIHJlZ2lzdGVycwotUE9SVEYsIFBPUlRGX1NFVCwgUE9SVEZfQ0xFQVIsCi1QT1JURl9ESVJfU0VULCBQT1JURl9ESVJfQ0xFQVIsIFBPUlRGX0lORU4sCi1QT1JURl9GRVIgcmVnaXN0ZXJzCi0qLwotCi0KLSNkZWZpbmUgUEYwIDB4MDAwMQotI2RlZmluZSBQRjEgMHgwMDAyCi0jZGVmaW5lIFBGMiAweDAwMDQKLSNkZWZpbmUgUEYzIDB4MDAwOAotI2RlZmluZSBQRjQgMHgwMDEwCi0jZGVmaW5lIFBGNSAweDAwMjAKLSNkZWZpbmUgUEY2IDB4MDA0MAotI2RlZmluZSBQRjcgMHgwMDgwCi0jZGVmaW5lIFBGOCAweDAxMDAKLSNkZWZpbmUgUEY5IDB4MDIwMAotI2RlZmluZSBQRjEwIDB4MDQwMAotI2RlZmluZSBQRjExIDB4MDgwMAotI2RlZmluZSBQRjEyIDB4MTAwMAotI2RlZmluZSBQRjEzIDB4MjAwMAotI2RlZmluZSBQRjE0IDB4NDAwMAotI2RlZmluZSBQRjE1IDB4ODAwMAotCi0vKiBQT1JUIEcgQml0IERlZmluaXRpb25zIGZvciB0aGUgcmVnaXN0ZXJzCi1QT1JURywgUE9SVEdfU0VULCBQT1JUR19DTEVBUiwKLVBPUlRHX0RJUl9TRVQsIFBPUlRHX0RJUl9DTEVBUiwgUE9SVEdfSU5FTiwKLVBPUlRHX0ZFUiByZWdpc3RlcnMKLSovCi0KLQotI2RlZmluZSBQRzAgMHgwMDAxCi0jZGVmaW5lIFBHMSAweDAwMDIKLSNkZWZpbmUgUEcyIDB4MDAwNAotI2RlZmluZSBQRzMgMHgwMDA4Ci0jZGVmaW5lIFBHNCAweDAwMTAKLSNkZWZpbmUgUEc1IDB4MDAyMAotI2RlZmluZSBQRzYgMHgwMDQwCi0jZGVmaW5lIFBHNyAweDAwODAKLSNkZWZpbmUgUEc4IDB4MDEwMAotI2RlZmluZSBQRzkgMHgwMjAwCi0jZGVmaW5lIFBHMTAgMHgwNDAwCi0jZGVmaW5lIFBHMTEgMHgwODAwCi0jZGVmaW5lIFBHMTIgMHgxMDAwCi0jZGVmaW5lIFBHMTMgMHgyMDAwCi0jZGVmaW5lIFBHMTQgMHg0MDAwCi0jZGVmaW5lIFBHMTUgMHg4MDAwCi0KLS8qIFBPUlQgSCBCaXQgRGVmaW5pdGlvbnMgZm9yIHRoZSByZWdpc3RlcnMKLVBPUlRILCBQT1JUSF9TRVQsIFBPUlRIX0NMRUFSLAotUE9SVEhfRElSX1NFVCwgUE9SVEhfRElSX0NMRUFSLCBQT1JUSF9JTkVOLAotUE9SVEhfRkVSIHJlZ2lzdGVycwotKi8KLQotCi0jZGVmaW5lIFBIMCAweDAwMDEKLSNkZWZpbmUgUEgxIDB4MDAwMgotI2RlZmluZSBQSDIgMHgwMDA0Ci0jZGVmaW5lIFBIMyAweDAwMDgKLSNkZWZpbmUgUEg0IDB4MDAxMAotI2RlZmluZSBQSDUgMHgwMDIwCi0jZGVmaW5lIFBINiAweDAwNDAKLSNkZWZpbmUgUEg3IDB4MDA4MAotI2RlZmluZSBQSDggMHgwMTAwCi0jZGVmaW5lIFBIOSAweDAyMDAKLSNkZWZpbmUgUEgxMCAweDA0MDAKLSNkZWZpbmUgUEgxMSAweDA4MDAKLSNkZWZpbmUgUEgxMiAweDEwMDAKLSNkZWZpbmUgUEgxMyAweDIwMDAKLQotCi0vKiBQT1JUIEkgQml0IERlZmluaXRpb25zIGZvciB0aGUgcmVnaXN0ZXJzCi1QT1JUSSwgUE9SVElfU0VULCBQT1JUSV9DTEVBUiwKLVBPUlRJX0RJUl9TRVQsIFBPUlRJX0RJUl9DTEVBUiwgUE9SVElfSU5FTiwKLVBPUlRJX0ZFUiByZWdpc3RlcnMKLSovCi0KLQotI2RlZmluZSBQSTAgMHgwMDAxCi0jZGVmaW5lIFBJMSAweDAwMDIKLSNkZWZpbmUgUEkyIDB4MDAwNAotI2RlZmluZSBQSTMgMHgwMDA4Ci0jZGVmaW5lIFBJNCAweDAwMTAKLSNkZWZpbmUgUEk1IDB4MDAyMAotI2RlZmluZSBQSTYgMHgwMDQwCi0jZGVmaW5lIFBJNyAweDAwODAKLSNkZWZpbmUgUEk4IDB4MDEwMAotI2RlZmluZSBQSTkgMHgwMjAwCi0jZGVmaW5lIFBJMTAgMHgwNDAwCi0jZGVmaW5lIFBJMTEgMHgwODAwCi0jZGVmaW5lIFBJMTIgMHgxMDAwCi0jZGVmaW5lIFBJMTMgMHgyMDAwCi0jZGVmaW5lIFBJMTQgMHg0MDAwCi0jZGVmaW5lIFBJMTUgMHg4MDAwCi0KLS8qIFBPUlQgSiBCaXQgRGVmaW5pdGlvbnMgZm9yIHRoZSByZWdpc3RlcnMKLVBPUlRKLCBQT1JUSl9TRVQsIFBPUlRKX0NMRUFSLAotUE9SVEpfRElSX1NFVCwgUE9SVEpfRElSX0NMRUFSLCBQT1JUSl9JTkVOLAotUE9SVEpfRkVSIHJlZ2lzdGVycwotKi8KLQotCi0jZGVmaW5lIFBKMCAweDAwMDEKLSNkZWZpbmUgUEoxIDB4MDAwMgotI2RlZmluZSBQSjIgMHgwMDA0Ci0jZGVmaW5lIFBKMyAweDAwMDgKLSNkZWZpbmUgUEo0IDB4MDAxMAotI2RlZmluZSBQSjUgMHgwMDIwCi0jZGVmaW5lIFBKNiAweDAwNDAKLSNkZWZpbmUgUEo3IDB4MDA4MAotI2RlZmluZSBQSjggMHgwMTAwCi0jZGVmaW5lIFBKOSAweDAyMDAKLSNkZWZpbmUgUEoxMCAweDA0MDAKLSNkZWZpbmUgUEoxMSAweDA4MDAKLSNkZWZpbmUgUEoxMiAweDEwMDAKLSNkZWZpbmUgUEoxMyAweDIwMDAKLQotCiAvKiBQb3J0IE11eGluZyBCaXQgRmllbGRzIGZvciBQT1JUeF9NVVggUmVnaXN0ZXJzICovCiAKICNkZWZpbmUgTVVYMCAweDAwMDAwMDAzCkBAIC0yNzAzLDE2ICsyNDAwLDQgQEAKICNkZWZpbmUgQjNNQVBfUElIIDB4MDYwMDAwMDAgLyogTWFwIFBvcnQgSSBIaWdoIHRvIEJ5dGUgMyAqLwogI2RlZmluZSBCM01BUF9QSkggMHgwNzAwMDAwMCAvKiBNYXAgUG9ydCBKIEhpZ2ggdG8gQnl0ZSAzICovCiAKLQotLyogZm9yIGxlZ2FjeSBjb21wYXRpYmlsaXR5ICovCi0KLSNkZWZpbmUgV0xTKHgpICAoKCh4KS01KSAmIDB4MDMpIC8qIFdvcmQgTGVuZ3RoIFNlbGVjdCAqLwotI2RlZmluZSBXMUxNQVhfTUFYIFcxTE1BWF9NSU4KLSNkZWZpbmUgRUJJVV9BTUNCQ1RMMCBFQklVX0FNQkNUTDAKLSNkZWZpbmUgRUJJVV9BTUNCQ1RMMSBFQklVX0FNQkNUTDEKLSNkZWZpbmUgUElOVDBfSVJRIFBJTlQwX1JFUVVFU1QKLSNkZWZpbmUgUElOVDFfSVJRIFBJTlQxX1JFUVVFU1QKLSNkZWZpbmUgUElOVDJfSVJRIFBJTlQyX1JFUVVFU1QKLSNkZWZpbmUgUElOVDNfSVJRIFBJTlQzX1JFUVVFU1QKLQogI2VuZGlmIC8qIF9ERUZfQkY1NFhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAyODAzN2UzLi43ZGI0MzM1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMjAwLDQgKzIwMCwxNSBAQAogCiAjZW5kaWYKIAorI2luY2x1ZGUgPG1hY2gtY29tbW9uL3BvcnRzLWEuaD4KKyNpbmNsdWRlIDxtYWNoLWNvbW1vbi9wb3J0cy1iLmg+CisjaW5jbHVkZSA8bWFjaC1jb21tb24vcG9ydHMtYy5oPgorI2luY2x1ZGUgPG1hY2gtY29tbW9uL3BvcnRzLWQuaD4KKyNpbmNsdWRlIDxtYWNoLWNvbW1vbi9wb3J0cy1lLmg+CisjaW5jbHVkZSA8bWFjaC1jb21tb24vcG9ydHMtZi5oPgorI2luY2x1ZGUgPG1hY2gtY29tbW9uL3BvcnRzLWcuaD4KKyNpbmNsdWRlIDxtYWNoLWNvbW1vbi9wb3J0cy1oLmg+CisjaW5jbHVkZSA8bWFjaC1jb21tb24vcG9ydHMtaS5oPgorI2luY2x1ZGUgPG1hY2gtY29tbW9uL3BvcnRzLWouaD4KKwogI2VuZGlmIC8qIF9NQUNIX0dQSU9fSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvaXJxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2lycS5oCmluZGV4IDFmOTliNTEuLjk5ZmQxYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvaXJxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9pcnEuaApAQCAtNDc0LDQgKzQ3NCwyNiBAQAogI2RlZmluZSBJUlFfUElOVDJfUE9TCQkyNAogI2RlZmluZSBJUlFfUElOVDNfUE9TCQkyOAogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBiZmluIHBpbnQgcmVnaXN0ZXJzIGxheW91dAorICovCitzdHJ1Y3QgYmZpbl9waW50X3JlZ3MgeworCXUzMiBtYXNrX3NldDsKKwl1MzIgbWFza19jbGVhcjsKKwl1MzIgaXJxOworCXUzMiBhc3NpZ247CisJdTMyIGVkZ2Vfc2V0OworCXUzMiBlZGdlX2NsZWFyOworCXUzMiBpbnZlcnRfc2V0OworCXUzMiBpbnZlcnRfY2xlYXI7CisJdTMyIHBpbnN0YXRlOworCXUzMiBsYXRjaDsKKwl1MzIgX19wYWQwWzJdOworfTsKKworI2VuZGlmCisKICNlbmRpZiAvKiBfQkY1NDhfSVJRX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL3BsbC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9wbGwuaAppbmRleCA3ODY1YTA5Li45NGNjYTY3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL3BsbC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcGxsLmgKQEAgLTEsNjkgKzEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCi0gKi8KLQotI2lmbmRlZiBfTUFDSF9QTExfSAotI2RlZmluZSBfTUFDSF9QTExfSAotCi0jaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+Ci0jaW5jbHVkZSA8YXNtL2lycWZsYWdzLmg+Ci0KLS8qIFdyaXRpbmcgdG8gUExMX0NUTCBpbml0aWF0ZXMgYSBQTEwgcmVsb2NrIHNlcXVlbmNlLiAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZCBiZmluX3dyaXRlX1BMTF9DVEwodW5zaWduZWQgaW50IHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpd3IwLCBpd3IxLCBpd3IyOwotCi0JaWYgKHZhbCA9PSBiZmluX3JlYWRfUExMX0NUTCgpKQotCQlyZXR1cm47Ci0KLQlmbGFncyA9IGhhcmRfbG9jYWxfaXJxX3NhdmUoKTsKLQkvKiBFbmFibGUgdGhlIFBMTCBXYWtldXAgYml0IGluIFNJQyBJV1IgKi8KLQlpd3IwID0gYmZpbl9yZWFkMzIoU0lDX0lXUjApOwotCWl3cjEgPSBiZmluX3JlYWQzMihTSUNfSVdSMSk7Ci0JaXdyMiA9IGJmaW5fcmVhZDMyKFNJQ19JV1IyKTsKLQkvKiBPbmx5IGFsbG93IFBQTCBXYWtldXApICovCi0JYmZpbl93cml0ZTMyKFNJQ19JV1IwLCBJV1JfRU5BQkxFKDApKTsKLQliZmluX3dyaXRlMzIoU0lDX0lXUjEsIDApOwotCWJmaW5fd3JpdGUzMihTSUNfSVdSMiwgMCk7Ci0KLQliZmluX3dyaXRlMTYoUExMX0NUTCwgdmFsKTsKLQlTU1lOQygpOwotCWFzbSgiSURMRTsiKTsKLQotCWJmaW5fd3JpdGUzMihTSUNfSVdSMCwgaXdyMCk7Ci0JYmZpbl93cml0ZTMyKFNJQ19JV1IxLCBpd3IxKTsKLQliZmluX3dyaXRlMzIoU0lDX0lXUjIsIGl3cjIpOwotCWhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKiBXcml0aW5nIHRvIFZSX0NUTCBpbml0aWF0ZXMgYSBQTEwgcmVsb2NrIHNlcXVlbmNlLiAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZCBiZmluX3dyaXRlX1ZSX0NUTCh1bnNpZ25lZCBpbnQgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGl3cjAsIGl3cjEsIGl3cjI7Ci0KLQlpZiAodmFsID09IGJmaW5fcmVhZF9WUl9DVEwoKSkKLQkJcmV0dXJuOwotCi0JZmxhZ3MgPSBoYXJkX2xvY2FsX2lycV9zYXZlKCk7Ci0JLyogRW5hYmxlIHRoZSBQTEwgV2FrZXVwIGJpdCBpbiBTSUMgSVdSICovCi0JaXdyMCA9IGJmaW5fcmVhZDMyKFNJQ19JV1IwKTsKLQlpd3IxID0gYmZpbl9yZWFkMzIoU0lDX0lXUjEpOwotCWl3cjIgPSBiZmluX3JlYWQzMihTSUNfSVdSMik7Ci0JLyogT25seSBhbGxvdyBQUEwgV2FrZXVwKSAqLwotCWJmaW5fd3JpdGUzMihTSUNfSVdSMCwgSVdSX0VOQUJMRSgwKSk7Ci0JYmZpbl93cml0ZTMyKFNJQ19JV1IxLCAwKTsKLQliZmluX3dyaXRlMzIoU0lDX0lXUjIsIDApOwotCi0JYmZpbl93cml0ZTE2KFZSX0NUTCwgdmFsKTsKLQlTU1lOQygpOwotCWFzbSgiSURMRTsiKTsKLQotCWJmaW5fd3JpdGUzMihTSUNfSVdSMCwgaXdyMCk7Ci0JYmZpbl93cml0ZTMyKFNJQ19JV1IxLCBpd3IxKTsKLQliZmluX3dyaXRlMzIoU0lDX0lXUjIsIGl3cjIpOwotCWhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0jZW5kaWYgLyogX01BQ0hfUExMX0ggKi8KKyNpbmNsdWRlIDxtYWNoLWNvbW1vbi9wbGwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUwppbmRleCBmOTlmMTc0Li41MmQ2ZjczIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYXRvbWljLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2F0b21pYy5TCkBAIC00OSw2ICs0OSw3IEBACiAJanVtcCAuTHJldHJ5X2NvcmVsb2NrCiAuTGRvbmVfY29yZWxvY2s6CiAJcDAgPSByMTsKKwkvKiBmbHVzaCBjb3JlIGludGVybmFsIHdyaXRlIGJ1ZmZlciBiZWZvcmUgaW52YWxpZGF0ZSBkY2FjaGUgKi8KIAlDU1lOQyhyMik7CiAJZmx1c2hpbnZbcDBdOwogCVNTWU5DKHIyKTsKQEAgLTY4NSw2ICs2ODYsOCBAQAogCXIxID0gLUwxX0NBQ0hFX0JZVEVTOwogCXIxID0gcjAgJiByMTsKIAlwMCA9IHIxOworCS8qIGZsdXNoIGNvcmUgaW50ZXJuYWwgd3JpdGUgYnVmZmVyIGJlZm9yZSBpbnZhbGlkYXRlIGRjYWNoZSAqLworCUNTWU5DKHIyKTsKIAlmbHVzaGludltwMF07CiAJU1NZTkMocjIpOwogCXIwID0gW3AxXTsKQEAgLTkwNyw2ICs5MTAsOCBAQAogCXIxID0gLUwxX0NBQ0hFX0JZVEVTOwogCXIxID0gcjAgJiByMTsKIAlwMCA9IHIxOworCS8qIGZsdXNoIGNvcmUgaW50ZXJuYWwgd3JpdGUgYnVmZmVyIGJlZm9yZSBpbnZhbGlkYXRlIGRjYWNoZSAqLworCUNTWU5DKHIyKTsKIAlmbHVzaGludltwMF07CiAJU1NZTkMocjIpOwogCXIwID0gW3AxXTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvYWN2aWxvbi5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9hY3ZpbG9uLmMKaW5kZXggMGIxYzIwZi4uMzkyNmNkOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9hY3ZpbG9uLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9hY3ZpbG9uLmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogCSB9LAogfTsKIAotdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0geworc3RhdGljIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKIAlQX1VBUlQwX1RYLCBQX1VBUlQwX1JYLCAwCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2NtX2JmNTYxLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2NtX2JmNTYxLmMKaW5kZXggMDg3YjZiMC4uM2I2NzkyOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9jbV9iZjU2MS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvY21fYmY1NjEuYwpAQCAtMzM0LDcgKzMzNCw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMF9UWCwgUF9VQVJUMF9SWCwgMAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jCmluZGV4IGFiN2E0ODcuLmY2NjdlNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvZXpraXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2V6a2l0LmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogCX0sCiB9OwogCi11bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0MF9wZXJpcGhlcmFsc1tdID0gewogCVBfVUFSVDBfVFgsIFBfVUFSVDBfUlgsIDAKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvdGVwbGEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvdGVwbGEuYwppbmRleCBkMzAxN2U1Li5iYjA1NmU2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL3RlcGxhLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy90ZXBsYS5jCkBAIC03Miw3ICs3Miw3IEBACiAJfSwKIH07CiAKLXVuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiZmluX3VhcnQwX3BlcmlwaGVyYWxzW10gPSB7CiAJUF9VQVJUMF9UWCwgUF9VQVJUMF9SWCwgMAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2RtYS5jCmluZGV4IGM5MzhjM2MuLjhmZmRkNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvZG1hLmMKQEAgLTExLDcgKzExLDcgQEAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAKLXN0cnVjdCBkbWFfcmVnaXN0ZXIgKmRtYV9pb19iYXNlX2FkZHJbTUFYX0RNQV9DSEFOTkVMU10gPSB7CitzdHJ1Y3QgZG1hX3JlZ2lzdGVyICogY29uc3QgZG1hX2lvX2Jhc2VfYWRkcltNQVhfRE1BX0NIQU5ORUxTXSA9IHsKIAkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBETUExXzBfTkVYVF9ERVNDX1BUUiwKIAkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBETUExXzFfTkVYVF9ERVNDX1BUUiwKIAkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBETUExXzJfTkVYVF9ERVNDX1BUUiwKQEAgLTM2LDE0ICszNiwxNCBAQAogCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIERNQTJfOV9ORVhUX0RFU0NfUFRSLAogCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIERNQTJfMTBfTkVYVF9ERVNDX1BUUiwKIAkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBETUEyXzExX05FWFRfREVTQ19QVFIsCi0JKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgTURNQTFfRDBfTkVYVF9ERVNDX1BUUiwKLQkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBNRE1BMV9TMF9ORVhUX0RFU0NfUFRSLAotCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIE1ETUExX0QxX05FWFRfREVTQ19QVFIsCi0JKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgTURNQTFfUzFfTkVYVF9ERVNDX1BUUiwKLQkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBNRE1BMl9EMF9ORVhUX0RFU0NfUFRSLAotCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIE1ETUEyX1MwX05FWFRfREVTQ19QVFIsCi0JKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgTURNQTJfRDFfTkVYVF9ERVNDX1BUUiwKLQkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBNRE1BMl9TMV9ORVhUX0RFU0NfUFRSLAorCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIE1ETUFfRDBfTkVYVF9ERVNDX1BUUiwKKwkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBNRE1BX1MwX05FWFRfREVTQ19QVFIsCisJKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgTURNQV9EMV9ORVhUX0RFU0NfUFRSLAorCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIE1ETUFfUzFfTkVYVF9ERVNDX1BUUiwKKwkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBNRE1BX0QyX05FWFRfREVTQ19QVFIsCisJKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgTURNQV9TMl9ORVhUX0RFU0NfUFRSLAorCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIE1ETUFfRDNfTkVYVF9ERVNDX1BUUiwKKwkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBNRE1BX1MzX05FWFRfREVTQ19QVFIsCiAJKHN0cnVjdCBkbWFfcmVnaXN0ZXIgKikgSU1ETUFfRDBfTkVYVF9ERVNDX1BUUiwKIAkoc3RydWN0IGRtYV9yZWdpc3RlciAqKSBJTURNQV9TMF9ORVhUX0RFU0NfUFRSLAogCShzdHJ1Y3QgZG1hX3JlZ2lzdGVyICopIElNRE1BX0QxX05FWFRfREVTQ19QVFIsCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaG90cGx1Zy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2hvdHBsdWcuYwppbmRleCBjOTUxNjliLi40Y2QzYjI4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaG90cGx1Zy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ob3RwbHVnLmMKQEAgLTYsNyArNiw5IEBACiAgKi8KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CisKICNkZWZpbmUgU0lDX1NZU0lSUShpcnEpCShpcnEgLSAoSVJRX0NPUkVUTVIgKyAxKSkKIAogaW50IGhvdHBsdWdfY29yZWI7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IDRjMTA4YzkuLjZhMzQ5OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYW5vbWFseS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYW5vbWFseS5oCkBAIC0xODEsNyArMTgxLDExIEBACiAvKiBJbmNvcnJlY3QgVGltZXIgUHVsc2UgV2lkdGggaW4gU2luZ2xlLVNob3QgUFdNX09VVCBNb2RlIHdpdGggRXh0ZXJuYWwgQ2xvY2sgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI1NCAoX19TSUxJQ09OX1JFVklTSU9OX18gPiAzKQogLyogSW50ZXJydXB0L0V4Y2VwdGlvbiBEdXJpbmcgU2hvcnQgSGFyZHdhcmUgTG9vcCBNYXkgQ2F1c2UgQmFkIEluc3RydWN0aW9uIEZldGNoZXMgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDI1NyAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA1KQorLyogVGVtcG9hcnkgd29yayBhcm91bmQgZm9yIGtnZGIgYnVnIDYzMzMgaW4gU01QIGtlcm5lbC4gSXQgbG9va3MgY29yZWIgaGFuZ3MgaW4gZXhjZXB0aW9uCisgKiB3aXRob3V0IGhhbmRsaW5nIGFub21hbHkgMDUwMDAyNTcgcHJvcGVybHkgb24gYmY1NjEgdjAuNS4gVGhpcyB3b3JrIGFyb3VuZCBtYXkgY2hhbmdlCisgKiBhZnRlciB0aGUgYmVoYXZpb3IgYW5kIHRoZSByb290IGNhdXNlIGFyZSBjb25maXJtZWQgd2l0aCBoYXJkd2FyZSB0ZWFtLgorICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyNTcgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSB8fCAoX19TSUxJQ09OX1JFVklTSU9OX18gPT0gNSAmJiBDT05GSUdfU01QKSkKIC8qIEluc3RydWN0aW9uIENhY2hlIElzIENvcnJ1cHRlZCBXaGVuIEJpdHMgOSBhbmQgMTIgb2YgdGhlIElDUExCIERhdGEgUmVnaXN0ZXJzIERpZmZlciAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjU4IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDUpCiAvKiBJQ1BMQl9TVEFUVVMgTU1SIFJlZ2lzdGVyIE1heSBCZSBDb3JydXB0ZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWwuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODA3MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbC5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBtYWNoL2JmaW5fc2VyaWFsLmggLSBCbGFja2ZpbiBVQVJUL1NlcmlhbCBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA2LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaWZuZGVmIF9fQkZJTl9NQUNIX1NFUklBTF9IX18KKyNkZWZpbmUgX19CRklOX01BQ0hfU0VSSUFMX0hfXworCisjZGVmaW5lIEJGSU5fVUFSVF9OUl9QT1JUUwkxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggZTMzZTE1OC4uM2E2OTQ3NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC00LDM2ICs0LDkgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+CiAKLSNkZWZpbmUgVUFSVF9HRVRfQ0hBUih1YXJ0KSAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX1JCUikpCi0jZGVmaW5lIFVBUlRfR0VUX0RMTCh1YXJ0KQliZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExMKSkKLSNkZWZpbmUgVUFSVF9HRVRfSUVSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lFUikpCi0jZGVmaW5lIFVBUlRfR0VUX0RMSCh1YXJ0KQliZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExIKSkKLSNkZWZpbmUgVUFSVF9HRVRfSUlSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lJUikpCi0jZGVmaW5lIFVBUlRfR0VUX0xDUih1YXJ0KSAgICAgIGJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MQ1IpKQotI2RlZmluZSBVQVJUX0dFVF9HQ1RMKHVhcnQpICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfR0NUTCkpCi0KLSNkZWZpbmUgVUFSVF9QVVRfQ0hBUih1YXJ0LHYpICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9USFIpLHYpCi0jZGVmaW5lIFVBUlRfUFVUX0RMTCh1YXJ0LHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExMKSx2KQotI2RlZmluZSBVQVJUX1BVVF9JRVIodWFydCx2KSAgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lFUiksdikKLSNkZWZpbmUgVUFSVF9TRVRfSUVSKHVhcnQsdikgICAgVUFSVF9QVVRfSUVSKHVhcnQsIFVBUlRfR0VUX0lFUih1YXJ0KSB8ICh2KSkKLSNkZWZpbmUgVUFSVF9DTEVBUl9JRVIodWFydCx2KSAgVUFSVF9QVVRfSUVSKHVhcnQsIFVBUlRfR0VUX0lFUih1YXJ0KSAmIH4odikpCi0jZGVmaW5lIFVBUlRfUFVUX0RMSCh1YXJ0LHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExIKSx2KQotI2RlZmluZSBVQVJUX1BVVF9MQ1IodWFydCx2KSAgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xDUiksdikKLSNkZWZpbmUgVUFSVF9QVVRfR0NUTCh1YXJ0LHYpICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9HQ1RMKSx2KQotCi0jZGVmaW5lIFVBUlRfU0VUX0RMQUIodWFydCkgICAgIGRvIHsgVUFSVF9QVVRfTENSKHVhcnQsIFVBUlRfR0VUX0xDUih1YXJ0KSB8IERMQUIpOyBTU1lOQygpOyB9IHdoaWxlICgwKQotI2RlZmluZSBVQVJUX0NMRUFSX0RMQUIodWFydCkgICBkbyB7IFVBUlRfUFVUX0xDUih1YXJ0LCBVQVJUX0dFVF9MQ1IodWFydCkgJiB+RExBQik7IFNTWU5DKCk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgVUFSVF9HRVRfQ1RTKHgpIGdwaW9fZ2V0X3ZhbHVlKHgtPmN0c19waW4pCi0jZGVmaW5lIFVBUlRfRElTQUJMRV9SVFMoeCkgZ3Bpb19zZXRfdmFsdWUoeC0+cnRzX3BpbiwgMSkKLSNkZWZpbmUgVUFSVF9FTkFCTEVfUlRTKHgpIGdwaW9fc2V0X3ZhbHVlKHgtPnJ0c19waW4sIDApCi0jZGVmaW5lIFVBUlRfRU5BQkxFX0lOVFMoeCwgdikgVUFSVF9QVVRfSUVSKHgsIHYpCi0jZGVmaW5lIFVBUlRfRElTQUJMRV9JTlRTKHgpIFVBUlRfUFVUX0lFUih4LCAwKQotCiAjaWZkZWYgQ09ORklHX0JGSU5fVUFSVDBfQ1RTUlRTCiAjIGRlZmluZSBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCiAjIGlmbmRlZiBDT05GSUdfVUFSVDBfQ1RTX1BJTgpAQCAtNDQsNTEgKzE3LDYgQEAKICMgZW5kaWYKICNlbmRpZgogCi0jZGVmaW5lIEJGSU5fVUFSVF9UWF9GSUZPX1NJWkUJMgotCi1zdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCB7Ci0gICAgICAgIHN0cnVjdCB1YXJ0X3BvcnQgICAgICAgIHBvcnQ7Ci0gICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIG9sZF9zdGF0dXM7Ci0JaW50CQkJc3RhdHVzX2lycTsKLQl1bnNpZ25lZCBpbnQgbHNyOwotI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9ETUEKLQlpbnQJCQl0eF9kb25lOwotCWludAkJCXR4X2NvdW50OwotCXN0cnVjdCBjaXJjX2J1ZgkJcnhfZG1hX2J1ZjsKLQlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICByeF9kbWFfdGltZXI7Ci0JaW50CQkJcnhfZG1hX25yb3dzOwotCXVuc2lnbmVkIGludAkJdHhfZG1hX2NoYW5uZWw7Ci0JdW5zaWduZWQgaW50CQlyeF9kbWFfY2hhbm5lbDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdHhfZG1hX3dvcmtxdWV1ZTsKLSNlbHNlCi0jIGlmIEFOT01BTFlfMDUwMDAzNjMKLQl1bnNpZ25lZCBpbnQgYW5vbWFseV90aHJlc2hvbGQ7Ci0jIGVuZGlmCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCi0Jc3RydWN0IHRpbWVyX2xpc3QgICAgICAgY3RzX3RpbWVyOwotCWludAkJCWN0c19waW47Ci0JaW50CQkJcnRzX3BpbjsKLSNlbmRpZgotfTsKLQotLyogVGhlIGhhcmR3YXJlIGNsZWFycyB0aGUgTFNSIGJpdHMgdXBvbiByZWFkLCBzbyB3ZSBuZWVkIHRvIGNhY2hlCi0gKiBzb21lIG9mIHRoZSBtb3JlIGZ1biBiaXRzIGluIHNvZnR3YXJlIHNvIHRoZXkgZG9uJ3QgZ2V0IGxvc3QKLSAqIHdoZW4gY2hlY2tpbmcgdGhlIExTUiBpbiBvdGhlciBjb2RlIHBhdGhzIChUWCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFVBUlRfR0VUX0xTUihzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCkKLXsKLQl1bnNpZ25lZCBpbnQgbHNyID0gYmZpbl9yZWFkMTYodWFydC0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUik7Ci0JdWFydC0+bHNyIHw9IChsc3IgJiAoQkl8RkV8UEV8T0UpKTsKLQlyZXR1cm4gbHNyIHwgdWFydC0+bHNyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgVUFSVF9DTEVBUl9MU1Ioc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCi17Ci0JdWFydC0+bHNyID0gMDsKLQliZmluX3dyaXRlMTYodWFydC0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUiwgLTEpOwotfQotCiBzdHJ1Y3QgYmZpbl9zZXJpYWxfcmVzIHsKIAl1bnNpZ25lZCBsb25nCXVhcnRfYmFzZV9hZGRyOwogCWludAkJdWFydF9pcnE7CkBAIC0xMjAsMyArNDgsNSBAQAogfTsKIAogI2RlZmluZSBEUklWRVJfTkFNRSAiYmZpbi11YXJ0IgorCisjaW5jbHVkZSA8YXNtL2JmaW5fc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggNmM3ZGM1OC4uZGM0NzA1MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA1LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpAQCAtMTAsMTEgKzEwLDE0IEBACiAjZGVmaW5lIEJGNTYxX0ZBTUlMWQogCiAjaW5jbHVkZSAiYmY1NjEuaCIKLSNpbmNsdWRlICJkZWZCRjU2MS5oIgogI2luY2x1ZGUgImFub21hbHkuaCIKIAotI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykKLSNpbmNsdWRlICJjZGVmQkY1NjEuaCIKKyNpbmNsdWRlIDxhc20vZGVmX0xQQmxhY2tmaW4uaD4KKyNpbmNsdWRlICJkZWZCRjU2MS5oIgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworIyBpbmNsdWRlIDxhc20vY2RlZl9MUEJsYWNrZmluLmg+CisjIGluY2x1ZGUgImNkZWZCRjU2MS5oIgogI2VuZGlmCiAKICNkZWZpbmUgYmZpbl9yZWFkX0ZJT19GTEFHX0QoKSBiZmluX3JlYWRfRklPMF9GTEFHX0QoKQpAQCAtMzUsMTkgKzM4LDQgQEAKICNkZWZpbmUgYmZpbl9yZWFkX1NJQ0JfSVNSKHgpCQliZmluX3JlYWQzMihfX1NJQ19NVVgoU0lDQl9JU1IwLCB4KSkKICNkZWZpbmUgYmZpbl93cml0ZV9TSUNCX0lTUih4LCB2YWwpCWJmaW5fd3JpdGUzMihfX1NJQ19NVVgoU0lDQl9JU1IwLCB4KSwgdmFsKQogCi0jZGVmaW5lIEJGSU5fVUFSVF9OUl9QT1JUUyAgICAgIDEKLQotI2RlZmluZSBPRkZTRVRfVEhSICAgICAgICAgICAgICAweDAwCS8qIFRyYW5zbWl0IEhvbGRpbmcgcmVnaXN0ZXIgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfUkJSICAgICAgICAgICAgICAweDAwCS8qIFJlY2VpdmUgQnVmZmVyIHJlZ2lzdGVyICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfRExMICAgICAgICAgICAgICAweDAwCS8qIERpdmlzb3IgTGF0Y2ggKExvdy1CeXRlKSAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfSUVSICAgICAgICAgICAgICAweDA0CS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfRExIICAgICAgICAgICAgICAweDA0CS8qIERpdmlzb3IgTGF0Y2ggKEhpZ2gtQnl0ZSkgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfSUlSICAgICAgICAgICAgICAweDA4CS8qIEludGVycnVwdCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAgICAqLwotI2RlZmluZSBPRkZTRVRfTENSICAgICAgICAgICAgICAweDBDCS8qIExpbmUgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfTUNSICAgICAgICAgICAgICAweDEwCS8qIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfTFNSICAgICAgICAgICAgICAweDE0CS8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfTVNSICAgICAgICAgICAgICAweDE4CS8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfU0NSICAgICAgICAgICAgICAweDFDCS8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPRkZTRVRfR0NUTCAgICAgICAgICAgICAweDI0CS8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAqLwotCiAjZW5kaWYJCQkJLyogX01BQ0hfQkxBQ0tGSU5fSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvY2RlZkJGNTYxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2NkZWZCRjU2MS5oCmluZGV4IDJiYWI5OTEuLjc1MzMzMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvY2RlZkJGNTYxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9jZGVmQkY1NjEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA1LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpAQCAtNywxNCArNyw2IEBACiAjaWZuZGVmIF9DREVGX0JGNTYxX0gKICNkZWZpbmUgX0NERUZfQkY1NjFfSAogCi0jaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+Ci0KLS8qIGluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlICJkZWZCRjU2MS5oIgotCi0vKmluY2x1ZGUgY29yZSBzcGVjaWZpYyByZWdpc3RlciBwb2ludGVyIGRlZmluaXRpb25zKi8KLSNpbmNsdWRlIDxhc20vY2RlZl9MUEJsYWNrZmluLmg+Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogLyogU3lzdGVtIE1NUiBSZWdpc3RlciBNYXAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwpAQCAtNTIzLDE0ICs1MTUsMTQgQEAKICNkZWZpbmUgYmZpbl9yZWFkX1BQSTFfRlJBTUUoKSAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KFBQSTFfRlJBTUUpCiAjZGVmaW5lIGJmaW5fd3JpdGVfUFBJMV9GUkFNRSh2YWwpICAgICAgICAgICBiZmluX3dyaXRlMTYoUFBJMV9GUkFNRSx2YWwpCiAvKkRNQSB0cmFmZmljIGNvbnRyb2wgcmVnaXN0ZXJzICovCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExX1RDX1BFUigpICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUExX1RDX1BFUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1RDX1BFUih2YWwpICAgICAgICAgIGJmaW5fd3JpdGUxNihETUExX1RDX1BFUix2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUExX1RDX0NOVCgpICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUExX1RDX0NOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1RDX0NOVCh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUxNihETUExX1RDX0NOVCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1RDX1BFUigpICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUEyX1RDX1BFUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1RDX1BFUih2YWwpICAgICAgICAgIGJmaW5fd3JpdGUxNihETUEyX1RDX1BFUix2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1RDX0NOVCgpICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUEyX1RDX0NOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1RDX0NOVCh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUxNihETUEyX1RDX0NOVCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUFDMF9UQ19QRVIoKSAgICAgICAgICAgICBiZmluX3JlYWQxNihETUFDMF9UQ19QRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BQzBfVENfUEVSKHZhbCkgICAgICAgICBiZmluX3dyaXRlMTYoRE1BQzBfVENfUEVSLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQUMwX1RDX0NOVCgpICAgICAgICAgICAgIGJmaW5fcmVhZDE2KERNQUMwX1RDX0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUFDMF9UQ19DTlQodmFsKSAgICAgICAgIGJmaW5fd3JpdGUxNihETUFDMF9UQ19DTlQsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BQzFfVENfUEVSKCkgICAgICAgICAgICAgYmZpbl9yZWFkMTYoRE1BQzFfVENfUEVSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQUMxX1RDX1BFUih2YWwpICAgICAgICAgYmZpbl93cml0ZTE2KERNQUMxX1RDX1BFUix2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUFDMV9UQ19DTlQoKSAgICAgICAgICAgICBiZmluX3JlYWQxNihETUFDMV9UQ19DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BQzFfVENfQ05UKHZhbCkgICAgICAgICBiZmluX3dyaXRlMTYoRE1BQzFfVENfQ05ULHZhbCkKIC8qIERNQTEgQ29udHJvbGxlciByZWdpc3RlcnMgKDB4RkZDMCAxQzAwLTB4RkZDMCAxRkZGKSAqLwogI2RlZmluZSBiZmluX3JlYWRfRE1BMV8wX0NPTkZJRygpICAgICAgICAgICAgYmZpbl9yZWFkMTYoRE1BMV8wX0NPTkZJRykKICNkZWZpbmUgYmZpbl93cml0ZV9ETUExXzBfQ09ORklHKHZhbCkgICAgICAgIGJmaW5fd3JpdGUxNihETUExXzBfQ09ORklHLHZhbCkKQEAgLTg0NSwxMTAgKzgzNywxMTAgQEAKICNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfMTFfUEVSSVBIRVJBTF9NQVAoKSAgIGJmaW5fcmVhZDE2KERNQTFfMTFfUEVSSVBIRVJBTF9NQVApCiAjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV8xMV9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihETUExXzExX1BFUklQSEVSQUxfTUFQLHZhbCkKIC8qIE1lbW9yeSBETUExIENvbnRyb2xsZXIgcmVnaXN0ZXJzICgweEZGQzAgMUU4MC0weEZGQzAgMUZGRikgKi8KLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QwX0NPTkZJRygpICAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUExX0QwX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMF9DT05GSUcodmFsKSAgICAgIGJmaW5fd3JpdGUxNihNRE1BMV9EMF9DT05GSUcsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDBfTkVYVF9ERVNDX1BUUigpICAgYmZpbl9yZWFkMzIoTURNQTFfRDBfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMF9ORVhUX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZTMyKE1ETUExX0QwX05FWFRfREVTQ19QVFIsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDBfU1RBUlRfQUREUigpICAgICAgYmZpbl9yZWFkMzIoTURNQTFfRDBfU1RBUlRfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMF9TVEFSVF9BRERSKHZhbCkgIGJmaW5fd3JpdGUzMihNRE1BMV9EMF9TVEFSVF9BRERSLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QwX1hfQ09VTlQoKSAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUExX0QwX1hfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDBfWF9DT1VOVCh2YWwpICAgICBiZmluX3dyaXRlMTYoTURNQTFfRDBfWF9DT1VOVCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9EMF9ZX0NPVU5UKCkgICAgICAgICBiZmluX3JlYWQxNihNRE1BMV9EMF9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QwX1lfQ09VTlQodmFsKSAgICAgYmZpbl93cml0ZTE2KE1ETUExX0QwX1lfQ09VTlQsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDBfWF9NT0RJRlkoKSAgICAgICAgYmZpbl9yZWFkMTYoTURNQTFfRDBfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDBfWF9NT0RJRlkodmFsKSAgICBiZmluX3dyaXRlMTYoTURNQTFfRDBfWF9NT0RJRlksdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDBfWV9NT0RJRlkoKSAgICAgICAgYmZpbl9yZWFkMTYoTURNQTFfRDBfWV9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDBfWV9NT0RJRlkodmFsKSAgICBiZmluX3dyaXRlMTYoTURNQTFfRDBfWV9NT0RJRlksdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDBfQ1VSUl9ERVNDX1BUUigpICAgYmZpbl9yZWFkMzIoTURNQTFfRDBfQ1VSUl9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMF9DVVJSX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZTMyKE1ETUExX0QwX0NVUlJfREVTQ19QVFIsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDBfQ1VSUl9BRERSKCkgICAgICAgYmZpbl9yZWFkMzIoTURNQTFfRDBfQ1VSUl9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QwX0NVUlJfQUREUih2YWwpICAgYmZpbl93cml0ZTMyKE1ETUExX0QwX0NVUlJfQUREUix2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9EMF9DVVJSX1hfQ09VTlQoKSAgICBiZmluX3JlYWQxNihNRE1BMV9EMF9DVVJSX1hfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDBfQ1VSUl9YX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUExX0QwX0NVUlJfWF9DT1VOVCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9EMF9DVVJSX1lfQ09VTlQoKSAgICBiZmluX3JlYWQxNihNRE1BMV9EMF9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDBfQ1VSUl9ZX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUExX0QwX0NVUlJfWV9DT1VOVCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9EMF9JUlFfU1RBVFVTKCkgICAgICBiZmluX3JlYWQxNihNRE1BMV9EMF9JUlFfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QwX0lSUV9TVEFUVVModmFsKSAgYmZpbl93cml0ZTE2KE1ETUExX0QwX0lSUV9TVEFUVVMsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDBfUEVSSVBIRVJBTF9NQVAoKSAgYmZpbl9yZWFkMTYoTURNQTFfRDBfUEVSSVBIRVJBTF9NQVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDBfUEVSSVBIRVJBTF9NQVAodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfRDBfUEVSSVBIRVJBTF9NQVAsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzBfQ09ORklHKCkgICAgICAgICAgYmZpbl9yZWFkMTYoTURNQTFfUzBfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MwX0NPTkZJRyh2YWwpICAgICAgYmZpbl93cml0ZTE2KE1ETUExX1MwX0NPTkZJRyx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMF9ORVhUX0RFU0NfUFRSKCkgICBiZmluX3JlYWQzMihNRE1BMV9TMF9ORVhUX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MwX05FWFRfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlMzIoTURNQTFfUzBfTkVYVF9ERVNDX1BUUix2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMF9TVEFSVF9BRERSKCkgICAgICBiZmluX3JlYWQzMihNRE1BMV9TMF9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MwX1NUQVJUX0FERFIodmFsKSAgYmZpbl93cml0ZTMyKE1ETUExX1MwX1NUQVJUX0FERFIsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzBfWF9DT1VOVCgpICAgICAgICAgYmZpbl9yZWFkMTYoTURNQTFfUzBfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMF9YX0NPVU5UKHZhbCkgICAgIGJmaW5fd3JpdGUxNihNRE1BMV9TMF9YX0NPVU5ULHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MwX1lfQ09VTlQoKSAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUExX1MwX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzBfWV9DT1VOVCh2YWwpICAgICBiZmluX3dyaXRlMTYoTURNQTFfUzBfWV9DT1VOVCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMF9YX01PRElGWSgpICAgICAgICBiZmluX3JlYWQxNihNRE1BMV9TMF9YX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMF9YX01PRElGWSh2YWwpICAgIGJmaW5fd3JpdGUxNihNRE1BMV9TMF9YX01PRElGWSx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMF9ZX01PRElGWSgpICAgICAgICBiZmluX3JlYWQxNihNRE1BMV9TMF9ZX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMF9ZX01PRElGWSh2YWwpICAgIGJmaW5fd3JpdGUxNihNRE1BMV9TMF9ZX01PRElGWSx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMF9DVVJSX0RFU0NfUFRSKCkgICBiZmluX3JlYWQzMihNRE1BMV9TMF9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MwX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlMzIoTURNQTFfUzBfQ1VSUl9ERVNDX1BUUix2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMF9DVVJSX0FERFIoKSAgICAgICBiZmluX3JlYWQzMihNRE1BMV9TMF9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzBfQ1VSUl9BRERSKHZhbCkgICBiZmluX3dyaXRlMzIoTURNQTFfUzBfQ1VSUl9BRERSLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MwX0NVUlJfWF9DT1VOVCgpICAgIGJmaW5fcmVhZDE2KE1ETUExX1MwX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMF9DVVJSX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfUzBfQ1VSUl9YX0NPVU5ULHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MwX0NVUlJfWV9DT1VOVCgpICAgIGJmaW5fcmVhZDE2KE1ETUExX1MwX0NVUlJfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMF9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfUzBfQ1VSUl9ZX0NPVU5ULHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MwX0lSUV9TVEFUVVMoKSAgICAgIGJmaW5fcmVhZDE2KE1ETUExX1MwX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzBfSVJRX1NUQVRVUyh2YWwpICBiZmluX3dyaXRlMTYoTURNQTFfUzBfSVJRX1NUQVRVUyx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMF9QRVJJUEhFUkFMX01BUCgpICBiZmluX3JlYWQxNihNRE1BMV9TMF9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMF9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9TMF9QRVJJUEhFUkFMX01BUCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9EMV9DT05GSUcoKSAgICAgICAgICBiZmluX3JlYWQxNihNRE1BMV9EMV9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDFfQ09ORklHKHZhbCkgICAgICBiZmluX3dyaXRlMTYoTURNQTFfRDFfQ09ORklHLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QxX05FWFRfREVTQ19QVFIoKSAgIGJmaW5fcmVhZDMyKE1ETUExX0QxX05FWFRfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDFfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGUzMihNRE1BMV9EMV9ORVhUX0RFU0NfUFRSLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QxX1NUQVJUX0FERFIoKSAgICAgIGJmaW5fcmVhZDMyKE1ETUExX0QxX1NUQVJUX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDFfU1RBUlRfQUREUih2YWwpICBiZmluX3dyaXRlMzIoTURNQTFfRDFfU1RBUlRfQUREUix2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9EMV9YX0NPVU5UKCkgICAgICAgICBiZmluX3JlYWQxNihNRE1BMV9EMV9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QxX1hfQ09VTlQodmFsKSAgICAgYmZpbl93cml0ZTE2KE1ETUExX0QxX1hfQ09VTlQsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDFfWV9DT1VOVCgpICAgICAgICAgYmZpbl9yZWFkMTYoTURNQTFfRDFfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMV9ZX0NPVU5UKHZhbCkgICAgIGJmaW5fd3JpdGUxNihNRE1BMV9EMV9ZX0NPVU5ULHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QxX1hfTU9ESUZZKCkgICAgICAgIGJmaW5fcmVhZDE2KE1ETUExX0QxX1hfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QxX1hfTU9ESUZZKHZhbCkgICAgYmZpbl93cml0ZTE2KE1ETUExX0QxX1hfTU9ESUZZLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QxX1lfTU9ESUZZKCkgICAgICAgIGJmaW5fcmVhZDE2KE1ETUExX0QxX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QxX1lfTU9ESUZZKHZhbCkgICAgYmZpbl93cml0ZTE2KE1ETUExX0QxX1lfTU9ESUZZLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QxX0NVUlJfREVTQ19QVFIoKSAgIGJmaW5fcmVhZDMyKE1ETUExX0QxX0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfRDFfQ1VSUl9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGUzMihNRE1BMV9EMV9DVVJSX0RFU0NfUFRSLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QxX0NVUlJfQUREUigpICAgICAgIGJmaW5fcmVhZDMyKE1ETUExX0QxX0NVUlJfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMV9DVVJSX0FERFIodmFsKSAgIGJmaW5fd3JpdGUzMihNRE1BMV9EMV9DVVJSX0FERFIsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDFfQ1VSUl9YX0NPVU5UKCkgICAgYmZpbl9yZWFkMTYoTURNQTFfRDFfQ1VSUl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QxX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9EMV9DVVJSX1hfQ09VTlQsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDFfQ1VSUl9ZX0NPVU5UKCkgICAgYmZpbl9yZWFkMTYoTURNQTFfRDFfQ1VSUl9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QxX0NVUlJfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMV9EMV9DVVJSX1lfQ09VTlQsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfRDFfSVJRX1NUQVRVUygpICAgICAgYmZpbl9yZWFkMTYoTURNQTFfRDFfSVJRX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9EMV9JUlFfU1RBVFVTKHZhbCkgIGJmaW5fd3JpdGUxNihNRE1BMV9EMV9JUlFfU1RBVFVTLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX0QxX1BFUklQSEVSQUxfTUFQKCkgIGJmaW5fcmVhZDE2KE1ETUExX0QxX1BFUklQSEVSQUxfTUFQKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX0QxX1BFUklQSEVSQUxfTUFQKHZhbCkgYmZpbl93cml0ZTE2KE1ETUExX0QxX1BFUklQSEVSQUxfTUFQLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MxX0NPTkZJRygpICAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUExX1MxX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMV9DT05GSUcodmFsKSAgICAgIGJmaW5fd3JpdGUxNihNRE1BMV9TMV9DT05GSUcsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzFfTkVYVF9ERVNDX1BUUigpICAgYmZpbl9yZWFkMzIoTURNQTFfUzFfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMV9ORVhUX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZTMyKE1ETUExX1MxX05FWFRfREVTQ19QVFIsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzFfU1RBUlRfQUREUigpICAgICAgYmZpbl9yZWFkMzIoTURNQTFfUzFfU1RBUlRfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMV9TVEFSVF9BRERSKHZhbCkgIGJmaW5fd3JpdGUzMihNRE1BMV9TMV9TVEFSVF9BRERSLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUExX1MxX1hfQ09VTlQoKSAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUExX1MxX1hfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzFfWF9DT1VOVCh2YWwpICAgICBiZmluX3dyaXRlMTYoTURNQTFfUzFfWF9DT1VOVCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMV9ZX0NPVU5UKCkgICAgICAgICBiZmluX3JlYWQxNihNRE1BMV9TMV9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MxX1lfQ09VTlQodmFsKSAgICAgYmZpbl93cml0ZTE2KE1ETUExX1MxX1lfQ09VTlQsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzFfWF9NT0RJRlkoKSAgICAgICAgYmZpbl9yZWFkMTYoTURNQTFfUzFfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzFfWF9NT0RJRlkodmFsKSAgICBiZmluX3dyaXRlMTYoTURNQTFfUzFfWF9NT0RJRlksdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzFfWV9NT0RJRlkoKSAgICAgICAgYmZpbl9yZWFkMTYoTURNQTFfUzFfWV9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzFfWV9NT0RJRlkodmFsKSAgICBiZmluX3dyaXRlMTYoTURNQTFfUzFfWV9NT0RJRlksdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzFfQ1VSUl9ERVNDX1BUUigpICAgYmZpbl9yZWFkMzIoTURNQTFfUzFfQ1VSUl9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMV9TMV9DVVJSX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZTMyKE1ETUExX1MxX0NVUlJfREVTQ19QVFIsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzFfQ1VSUl9BRERSKCkgICAgICAgYmZpbl9yZWFkMzIoTURNQTFfUzFfQ1VSUl9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MxX0NVUlJfQUREUih2YWwpICAgYmZpbl93cml0ZTMyKE1ETUExX1MxX0NVUlJfQUREUix2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMV9DVVJSX1hfQ09VTlQoKSAgICBiZmluX3JlYWQxNihNRE1BMV9TMV9DVVJSX1hfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzFfQ1VSUl9YX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUExX1MxX0NVUlJfWF9DT1VOVCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMV9DVVJSX1lfQ09VTlQoKSAgICBiZmluX3JlYWQxNihNRE1BMV9TMV9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzFfQ1VSUl9ZX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUExX1MxX0NVUlJfWV9DT1VOVCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMV9TMV9JUlFfU1RBVFVTKCkgICAgICBiZmluX3JlYWQxNihNRE1BMV9TMV9JUlFfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUExX1MxX0lSUV9TVEFUVVModmFsKSAgYmZpbl93cml0ZTE2KE1ETUExX1MxX0lSUV9TVEFUVVMsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTFfUzFfUEVSSVBIRVJBTF9NQVAoKSAgYmZpbl9yZWFkMTYoTURNQTFfUzFfUEVSSVBIRVJBTF9NQVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTFfUzFfUEVSSVBIRVJBTF9NQVAodmFsKSBiZmluX3dyaXRlMTYoTURNQTFfUzFfUEVSSVBIRVJBTF9NQVAsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMl9DT05GSUcoKSAgICAgICAgICBiZmluX3JlYWQxNihNRE1BX0QyX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QyX0NPTkZJRyh2YWwpICAgICAgYmZpbl93cml0ZTE2KE1ETUFfRDJfQ09ORklHLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDJfTkVYVF9ERVNDX1BUUigpICAgYmZpbl9yZWFkMzIoTURNQV9EMl9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDJfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGUzMihNRE1BX0QyX05FWFRfREVTQ19QVFIsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMl9TVEFSVF9BRERSKCkgICAgICBiZmluX3JlYWQzMihNRE1BX0QyX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMl9TVEFSVF9BRERSKHZhbCkgIGJmaW5fd3JpdGUzMihNRE1BX0QyX1NUQVJUX0FERFIsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMl9YX0NPVU5UKCkgICAgICAgICBiZmluX3JlYWQxNihNRE1BX0QyX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMl9YX0NPVU5UKHZhbCkgICAgIGJmaW5fd3JpdGUxNihNRE1BX0QyX1hfQ09VTlQsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMl9ZX0NPVU5UKCkgICAgICAgICBiZmluX3JlYWQxNihNRE1BX0QyX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMl9ZX0NPVU5UKHZhbCkgICAgIGJmaW5fd3JpdGUxNihNRE1BX0QyX1lfQ09VTlQsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMl9YX01PRElGWSgpICAgICAgICBiZmluX3JlYWQxNihNRE1BX0QyX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDJfWF9NT0RJRlkodmFsKSAgICBiZmluX3dyaXRlMTYoTURNQV9EMl9YX01PRElGWSx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX1lfTU9ESUZZKCkgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfRDJfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMl9ZX01PRElGWSh2YWwpICAgIGJmaW5fd3JpdGUxNihNRE1BX0QyX1lfTU9ESUZZLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDJfQ1VSUl9ERVNDX1BUUigpICAgYmZpbl9yZWFkMzIoTURNQV9EMl9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDJfQ1VSUl9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGUzMihNRE1BX0QyX0NVUlJfREVTQ19QVFIsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMl9DVVJSX0FERFIoKSAgICAgICBiZmluX3JlYWQzMihNRE1BX0QyX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QyX0NVUlJfQUREUih2YWwpICAgYmZpbl93cml0ZTMyKE1ETUFfRDJfQ1VSUl9BRERSLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDJfQ1VSUl9YX0NPVU5UKCkgICAgYmZpbl9yZWFkMTYoTURNQV9EMl9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMl9DVVJSX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9EMl9DVVJSX1hfQ09VTlQsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMl9DVVJSX1lfQ09VTlQoKSAgICBiZmluX3JlYWQxNihNRE1BX0QyX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QyX0NVUlJfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QyX0NVUlJfWV9DT1VOVCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX0lSUV9TVEFUVVMoKSAgICAgIGJmaW5fcmVhZDE2KE1ETUFfRDJfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QyX0lSUV9TVEFUVVModmFsKSAgYmZpbl93cml0ZTE2KE1ETUFfRDJfSVJRX1NUQVRVUyx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX1BFUklQSEVSQUxfTUFQKCkgIGJmaW5fcmVhZDE2KE1ETUFfRDJfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMl9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QyX1BFUklQSEVSQUxfTUFQLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfQ09ORklHKCkgICAgICAgICAgYmZpbl9yZWFkMTYoTURNQV9TMl9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMl9DT05GSUcodmFsKSAgICAgIGJmaW5fd3JpdGUxNihNRE1BX1MyX0NPTkZJRyx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MyX05FWFRfREVTQ19QVFIoKSAgIGJmaW5fcmVhZDMyKE1ETUFfUzJfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MyX05FWFRfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlMzIoTURNQV9TMl9ORVhUX0RFU0NfUFRSLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfU1RBUlRfQUREUigpICAgICAgYmZpbl9yZWFkMzIoTURNQV9TMl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfU1RBUlRfQUREUih2YWwpICBiZmluX3dyaXRlMzIoTURNQV9TMl9TVEFSVF9BRERSLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfWF9DT1VOVCgpICAgICAgICAgYmZpbl9yZWFkMTYoTURNQV9TMl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfWF9DT1VOVCh2YWwpICAgICBiZmluX3dyaXRlMTYoTURNQV9TMl9YX0NPVU5ULHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfWV9DT1VOVCgpICAgICAgICAgYmZpbl9yZWFkMTYoTURNQV9TMl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfWV9DT1VOVCh2YWwpICAgICBiZmluX3dyaXRlMTYoTURNQV9TMl9ZX0NPVU5ULHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfWF9NT0RJRlkoKSAgICAgICAgYmZpbl9yZWFkMTYoTURNQV9TMl9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MyX1hfTU9ESUZZKHZhbCkgICAgYmZpbl93cml0ZTE2KE1ETUFfUzJfWF9NT0RJRlksdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMl9ZX01PRElGWSgpICAgICAgICBiZmluX3JlYWQxNihNRE1BX1MyX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfWV9NT0RJRlkodmFsKSAgICBiZmluX3dyaXRlMTYoTURNQV9TMl9ZX01PRElGWSx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MyX0NVUlJfREVTQ19QVFIoKSAgIGJmaW5fcmVhZDMyKE1ETUFfUzJfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MyX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlMzIoTURNQV9TMl9DVVJSX0RFU0NfUFRSLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfQ1VSUl9BRERSKCkgICAgICAgYmZpbl9yZWFkMzIoTURNQV9TMl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMl9DVVJSX0FERFIodmFsKSAgIGJmaW5fd3JpdGUzMihNRE1BX1MyX0NVUlJfQUREUix2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MyX0NVUlJfWF9DT1VOVCgpICAgIGJmaW5fcmVhZDE2KE1ETUFfUzJfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfQ1VSUl9YX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfUzJfQ1VSUl9YX0NPVU5ULHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfQ1VSUl9ZX0NPVU5UKCkgICAgYmZpbl9yZWFkMTYoTURNQV9TMl9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMl9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TMl9DVVJSX1lfQ09VTlQsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMl9JUlFfU1RBVFVTKCkgICAgICBiZmluX3JlYWQxNihNRE1BX1MyX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMl9JUlFfU1RBVFVTKHZhbCkgIGJmaW5fd3JpdGUxNihNRE1BX1MyX0lSUV9TVEFUVVMsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMl9QRVJJUEhFUkFMX01BUCgpICBiZmluX3JlYWQxNihNRE1BX1MyX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfUEVSSVBIRVJBTF9NQVAodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TMl9QRVJJUEhFUkFMX01BUCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX0NPTkZJRygpICAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfRDNfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDNfQ09ORklHKHZhbCkgICAgICBiZmluX3dyaXRlMTYoTURNQV9EM19DT05GSUcsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19ORVhUX0RFU0NfUFRSKCkgICBiZmluX3JlYWQzMihNRE1BX0QzX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EM19ORVhUX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZTMyKE1ETUFfRDNfTkVYVF9ERVNDX1BUUix2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX1NUQVJUX0FERFIoKSAgICAgIGJmaW5fcmVhZDMyKE1ETUFfRDNfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX1NUQVJUX0FERFIodmFsKSAgYmZpbl93cml0ZTMyKE1ETUFfRDNfU1RBUlRfQUREUix2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX1hfQ09VTlQoKSAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfRDNfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX1hfQ09VTlQodmFsKSAgICAgYmZpbl93cml0ZTE2KE1ETUFfRDNfWF9DT1VOVCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX1lfQ09VTlQoKSAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfRDNfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX1lfQ09VTlQodmFsKSAgICAgYmZpbl93cml0ZTE2KE1ETUFfRDNfWV9DT1VOVCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX1hfTU9ESUZZKCkgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfRDNfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EM19YX01PRElGWSh2YWwpICAgIGJmaW5fd3JpdGUxNihNRE1BX0QzX1hfTU9ESUZZLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDNfWV9NT0RJRlkoKSAgICAgICAgYmZpbl9yZWFkMTYoTURNQV9EM19ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX1lfTU9ESUZZKHZhbCkgICAgYmZpbl93cml0ZTE2KE1ETUFfRDNfWV9NT0RJRlksdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19DVVJSX0RFU0NfUFRSKCkgICBiZmluX3JlYWQzMihNRE1BX0QzX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EM19DVVJSX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZTMyKE1ETUFfRDNfQ1VSUl9ERVNDX1BUUix2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX0NVUlJfQUREUigpICAgICAgIGJmaW5fcmVhZDMyKE1ETUFfRDNfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDNfQ1VSUl9BRERSKHZhbCkgICBiZmluX3dyaXRlMzIoTURNQV9EM19DVVJSX0FERFIsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19DVVJSX1hfQ09VTlQoKSAgICBiZmluX3JlYWQxNihNRE1BX0QzX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QzX0NVUlJfWF9DT1VOVCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX0NVUlJfWV9DT1VOVCgpICAgIGJmaW5fcmVhZDE2KE1ETUFfRDNfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDNfQ1VSUl9ZX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDNfQ1VSUl9ZX0NPVU5ULHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDNfSVJRX1NUQVRVUygpICAgICAgYmZpbl9yZWFkMTYoTURNQV9EM19JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDNfSVJRX1NUQVRVUyh2YWwpICBiZmluX3dyaXRlMTYoTURNQV9EM19JUlFfU1RBVFVTLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDNfUEVSSVBIRVJBTF9NQVAoKSAgYmZpbl9yZWFkMTYoTURNQV9EM19QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX1BFUklQSEVSQUxfTUFQKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDNfUEVSSVBIRVJBTF9NQVAsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TM19DT05GSUcoKSAgICAgICAgICBiZmluX3JlYWQxNihNRE1BX1MzX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MzX0NPTkZJRyh2YWwpICAgICAgYmZpbl93cml0ZTE2KE1ETUFfUzNfQ09ORklHLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzNfTkVYVF9ERVNDX1BUUigpICAgYmZpbl9yZWFkMzIoTURNQV9TM19ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzNfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGUzMihNRE1BX1MzX05FWFRfREVTQ19QVFIsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TM19TVEFSVF9BRERSKCkgICAgICBiZmluX3JlYWQzMihNRE1BX1MzX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TM19TVEFSVF9BRERSKHZhbCkgIGJmaW5fd3JpdGUzMihNRE1BX1MzX1NUQVJUX0FERFIsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TM19YX0NPVU5UKCkgICAgICAgICBiZmluX3JlYWQxNihNRE1BX1MzX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TM19YX0NPVU5UKHZhbCkgICAgIGJmaW5fd3JpdGUxNihNRE1BX1MzX1hfQ09VTlQsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TM19ZX0NPVU5UKCkgICAgICAgICBiZmluX3JlYWQxNihNRE1BX1MzX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TM19ZX0NPVU5UKHZhbCkgICAgIGJmaW5fd3JpdGUxNihNRE1BX1MzX1lfQ09VTlQsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TM19YX01PRElGWSgpICAgICAgICBiZmluX3JlYWQxNihNRE1BX1MzX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzNfWF9NT0RJRlkodmFsKSAgICBiZmluX3dyaXRlMTYoTURNQV9TM19YX01PRElGWSx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX1lfTU9ESUZZKCkgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfUzNfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TM19ZX01PRElGWSh2YWwpICAgIGJmaW5fd3JpdGUxNihNRE1BX1MzX1lfTU9ESUZZLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzNfQ1VSUl9ERVNDX1BUUigpICAgYmZpbl9yZWFkMzIoTURNQV9TM19DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzNfQ1VSUl9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGUzMihNRE1BX1MzX0NVUlJfREVTQ19QVFIsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TM19DVVJSX0FERFIoKSAgICAgICBiZmluX3JlYWQzMihNRE1BX1MzX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MzX0NVUlJfQUREUih2YWwpICAgYmZpbl93cml0ZTMyKE1ETUFfUzNfQ1VSUl9BRERSLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzNfQ1VSUl9YX0NPVU5UKCkgICAgYmZpbl9yZWFkMTYoTURNQV9TM19DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TM19DVVJSX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TM19DVVJSX1hfQ09VTlQsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TM19DVVJSX1lfQ09VTlQoKSAgICBiZmluX3JlYWQxNihNRE1BX1MzX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MzX0NVUlJfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MzX0NVUlJfWV9DT1VOVCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX0lSUV9TVEFUVVMoKSAgICAgIGJmaW5fcmVhZDE2KE1ETUFfUzNfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MzX0lSUV9TVEFUVVModmFsKSAgYmZpbl93cml0ZTE2KE1ETUFfUzNfSVJRX1NUQVRVUyx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX1BFUklQSEVSQUxfTUFQKCkgIGJmaW5fcmVhZDE2KE1ETUFfUzNfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TM19QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MzX1BFUklQSEVSQUxfTUFQLHZhbCkKIC8qIERNQTIgQ29udHJvbGxlciByZWdpc3RlcnMgKDB4RkZDMCAwQzAwLTB4RkZDMCAwREZGKSAqLwogI2RlZmluZSBiZmluX3JlYWRfRE1BMl8wX0NPTkZJRygpICAgICAgICAgICAgYmZpbl9yZWFkMTYoRE1BMl8wX0NPTkZJRykKICNkZWZpbmUgYmZpbl93cml0ZV9ETUEyXzBfQ09ORklHKHZhbCkgICAgICAgIGJmaW5fd3JpdGUxNihETUEyXzBfQ09ORklHLHZhbCkKQEAgLTEyNjMsMTEwICsxMjU1LDExMCBAQAogI2RlZmluZSBiZmluX3JlYWRfRE1BMl8xMV9QRVJJUEhFUkFMX01BUCgpICAgYmZpbl9yZWFkMTYoRE1BMl8xMV9QRVJJUEhFUkFMX01BUCkKICNkZWZpbmUgYmZpbl93cml0ZV9ETUEyXzExX1BFUklQSEVSQUxfTUFQKHZhbCkgYmZpbl93cml0ZTE2KERNQTJfMTFfUEVSSVBIRVJBTF9NQVAsdmFsKQogLyogTWVtb3J5IERNQTIgQ29udHJvbGxlciByZWdpc3RlcnMgKDB4RkZDMCAwRTgwLTB4RkZDMCAwRkZGKSAqLwotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfRDBfQ09ORklHKCkgICAgICAgICAgYmZpbl9yZWFkMTYoTURNQTJfRDBfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX0QwX0NPTkZJRyh2YWwpICAgICAgYmZpbl93cml0ZTE2KE1ETUEyX0QwX0NPTkZJRyx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9EMF9ORVhUX0RFU0NfUFRSKCkgICBiZmluX3JlYWQzMihNRE1BMl9EMF9ORVhUX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX0QwX05FWFRfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlMzIoTURNQTJfRDBfTkVYVF9ERVNDX1BUUix2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9EMF9TVEFSVF9BRERSKCkgICAgICBiZmluX3JlYWQzMihNRE1BMl9EMF9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX0QwX1NUQVJUX0FERFIodmFsKSAgYmZpbl93cml0ZTMyKE1ETUEyX0QwX1NUQVJUX0FERFIsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfRDBfWF9DT1VOVCgpICAgICAgICAgYmZpbl9yZWFkMTYoTURNQTJfRDBfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9EMF9YX0NPVU5UKHZhbCkgICAgIGJmaW5fd3JpdGUxNihNRE1BMl9EMF9YX0NPVU5ULHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX0QwX1lfQ09VTlQoKSAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUEyX0QwX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfRDBfWV9DT1VOVCh2YWwpICAgICBiZmluX3dyaXRlMTYoTURNQTJfRDBfWV9DT1VOVCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9EMF9YX01PRElGWSgpICAgICAgICBiZmluX3JlYWQxNihNRE1BMl9EMF9YX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9EMF9YX01PRElGWSh2YWwpICAgIGJmaW5fd3JpdGUxNihNRE1BMl9EMF9YX01PRElGWSx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9EMF9ZX01PRElGWSgpICAgICAgICBiZmluX3JlYWQxNihNRE1BMl9EMF9ZX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9EMF9ZX01PRElGWSh2YWwpICAgIGJmaW5fd3JpdGUxNihNRE1BMl9EMF9ZX01PRElGWSx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9EMF9DVVJSX0RFU0NfUFRSKCkgICBiZmluX3JlYWQzMihNRE1BMl9EMF9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX0QwX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlMzIoTURNQTJfRDBfQ1VSUl9ERVNDX1BUUix2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9EMF9DVVJSX0FERFIoKSAgICAgICBiZmluX3JlYWQzMihNRE1BMl9EMF9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfRDBfQ1VSUl9BRERSKHZhbCkgICBiZmluX3dyaXRlMzIoTURNQTJfRDBfQ1VSUl9BRERSLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX0QwX0NVUlJfWF9DT1VOVCgpICAgIGJmaW5fcmVhZDE2KE1ETUEyX0QwX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9EMF9DVVJSX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTJfRDBfQ1VSUl9YX0NPVU5ULHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX0QwX0NVUlJfWV9DT1VOVCgpICAgIGJmaW5fcmVhZDE2KE1ETUEyX0QwX0NVUlJfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9EMF9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTJfRDBfQ1VSUl9ZX0NPVU5ULHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX0QwX0lSUV9TVEFUVVMoKSAgICAgIGJmaW5fcmVhZDE2KE1ETUEyX0QwX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfRDBfSVJRX1NUQVRVUyh2YWwpICBiZmluX3dyaXRlMTYoTURNQTJfRDBfSVJRX1NUQVRVUyx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9EMF9QRVJJUEhFUkFMX01BUCgpICBiZmluX3JlYWQxNihNRE1BMl9EMF9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9EMF9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMl9EMF9QRVJJUEhFUkFMX01BUCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9TMF9DT05GSUcoKSAgICAgICAgICBiZmluX3JlYWQxNihNRE1BMl9TMF9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfUzBfQ09ORklHKHZhbCkgICAgICBiZmluX3dyaXRlMTYoTURNQTJfUzBfQ09ORklHLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX1MwX05FWFRfREVTQ19QVFIoKSAgIGJmaW5fcmVhZDMyKE1ETUEyX1MwX05FWFRfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfUzBfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGUzMihNRE1BMl9TMF9ORVhUX0RFU0NfUFRSLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX1MwX1NUQVJUX0FERFIoKSAgICAgIGJmaW5fcmVhZDMyKE1ETUEyX1MwX1NUQVJUX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfUzBfU1RBUlRfQUREUih2YWwpICBiZmluX3dyaXRlMzIoTURNQTJfUzBfU1RBUlRfQUREUix2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9TMF9YX0NPVU5UKCkgICAgICAgICBiZmluX3JlYWQxNihNRE1BMl9TMF9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX1MwX1hfQ09VTlQodmFsKSAgICAgYmZpbl93cml0ZTE2KE1ETUEyX1MwX1hfQ09VTlQsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfUzBfWV9DT1VOVCgpICAgICAgICAgYmZpbl9yZWFkMTYoTURNQTJfUzBfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9TMF9ZX0NPVU5UKHZhbCkgICAgIGJmaW5fd3JpdGUxNihNRE1BMl9TMF9ZX0NPVU5ULHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX1MwX1hfTU9ESUZZKCkgICAgICAgIGJmaW5fcmVhZDE2KE1ETUEyX1MwX1hfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX1MwX1hfTU9ESUZZKHZhbCkgICAgYmZpbl93cml0ZTE2KE1ETUEyX1MwX1hfTU9ESUZZLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX1MwX1lfTU9ESUZZKCkgICAgICAgIGJmaW5fcmVhZDE2KE1ETUEyX1MwX1lfTU9ESUZZKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX1MwX1lfTU9ESUZZKHZhbCkgICAgYmZpbl93cml0ZTE2KE1ETUEyX1MwX1lfTU9ESUZZLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX1MwX0NVUlJfREVTQ19QVFIoKSAgIGJmaW5fcmVhZDMyKE1ETUEyX1MwX0NVUlJfREVTQ19QVFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfUzBfQ1VSUl9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGUzMihNRE1BMl9TMF9DVVJSX0RFU0NfUFRSLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX1MwX0NVUlJfQUREUigpICAgICAgIGJmaW5fcmVhZDMyKE1ETUEyX1MwX0NVUlJfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9TMF9DVVJSX0FERFIodmFsKSAgIGJmaW5fd3JpdGUzMihNRE1BMl9TMF9DVVJSX0FERFIsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfUzBfQ1VSUl9YX0NPVU5UKCkgICAgYmZpbl9yZWFkMTYoTURNQTJfUzBfQ1VSUl9YX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX1MwX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMl9TMF9DVVJSX1hfQ09VTlQsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfUzBfQ1VSUl9ZX0NPVU5UKCkgICAgYmZpbl9yZWFkMTYoTURNQTJfUzBfQ1VSUl9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX1MwX0NVUlJfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMl9TMF9DVVJSX1lfQ09VTlQsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfUzBfSVJRX1NUQVRVUygpICAgICAgYmZpbl9yZWFkMTYoTURNQTJfUzBfSVJRX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9TMF9JUlFfU1RBVFVTKHZhbCkgIGJmaW5fd3JpdGUxNihNRE1BMl9TMF9JUlFfU1RBVFVTLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX1MwX1BFUklQSEVSQUxfTUFQKCkgIGJmaW5fcmVhZDE2KE1ETUEyX1MwX1BFUklQSEVSQUxfTUFQKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX1MwX1BFUklQSEVSQUxfTUFQKHZhbCkgYmZpbl93cml0ZTE2KE1ETUEyX1MwX1BFUklQSEVSQUxfTUFQLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX0QxX0NPTkZJRygpICAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUEyX0QxX0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9EMV9DT05GSUcodmFsKSAgICAgIGJmaW5fd3JpdGUxNihNRE1BMl9EMV9DT05GSUcsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfRDFfTkVYVF9ERVNDX1BUUigpICAgYmZpbl9yZWFkMzIoTURNQTJfRDFfTkVYVF9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9EMV9ORVhUX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZTMyKE1ETUEyX0QxX05FWFRfREVTQ19QVFIsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfRDFfU1RBUlRfQUREUigpICAgICAgYmZpbl9yZWFkMzIoTURNQTJfRDFfU1RBUlRfQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9EMV9TVEFSVF9BRERSKHZhbCkgIGJmaW5fd3JpdGUzMihNRE1BMl9EMV9TVEFSVF9BRERSLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX0QxX1hfQ09VTlQoKSAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUEyX0QxX1hfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfRDFfWF9DT1VOVCh2YWwpICAgICBiZmluX3dyaXRlMTYoTURNQTJfRDFfWF9DT1VOVCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9EMV9ZX0NPVU5UKCkgICAgICAgICBiZmluX3JlYWQxNihNRE1BMl9EMV9ZX0NPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX0QxX1lfQ09VTlQodmFsKSAgICAgYmZpbl93cml0ZTE2KE1ETUEyX0QxX1lfQ09VTlQsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfRDFfWF9NT0RJRlkoKSAgICAgICAgYmZpbl9yZWFkMTYoTURNQTJfRDFfWF9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfRDFfWF9NT0RJRlkodmFsKSAgICBiZmluX3dyaXRlMTYoTURNQTJfRDFfWF9NT0RJRlksdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfRDFfWV9NT0RJRlkoKSAgICAgICAgYmZpbl9yZWFkMTYoTURNQTJfRDFfWV9NT0RJRlkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfRDFfWV9NT0RJRlkodmFsKSAgICBiZmluX3dyaXRlMTYoTURNQTJfRDFfWV9NT0RJRlksdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfRDFfQ1VSUl9ERVNDX1BUUigpICAgYmZpbl9yZWFkMzIoTURNQTJfRDFfQ1VSUl9ERVNDX1BUUikKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9EMV9DVVJSX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZTMyKE1ETUEyX0QxX0NVUlJfREVTQ19QVFIsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfRDFfQ1VSUl9BRERSKCkgICAgICAgYmZpbl9yZWFkMzIoTURNQTJfRDFfQ1VSUl9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX0QxX0NVUlJfQUREUih2YWwpICAgYmZpbl93cml0ZTMyKE1ETUEyX0QxX0NVUlJfQUREUix2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9EMV9DVVJSX1hfQ09VTlQoKSAgICBiZmluX3JlYWQxNihNRE1BMl9EMV9DVVJSX1hfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfRDFfQ1VSUl9YX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUEyX0QxX0NVUlJfWF9DT1VOVCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9EMV9DVVJSX1lfQ09VTlQoKSAgICBiZmluX3JlYWQxNihNRE1BMl9EMV9DVVJSX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfRDFfQ1VSUl9ZX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUEyX0QxX0NVUlJfWV9DT1VOVCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9EMV9JUlFfU1RBVFVTKCkgICAgICBiZmluX3JlYWQxNihNRE1BMl9EMV9JUlFfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX0QxX0lSUV9TVEFUVVModmFsKSAgYmZpbl93cml0ZTE2KE1ETUEyX0QxX0lSUV9TVEFUVVMsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfRDFfUEVSSVBIRVJBTF9NQVAoKSAgYmZpbl9yZWFkMTYoTURNQTJfRDFfUEVSSVBIRVJBTF9NQVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfRDFfUEVSSVBIRVJBTF9NQVAodmFsKSBiZmluX3dyaXRlMTYoTURNQTJfRDFfUEVSSVBIRVJBTF9NQVAsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfUzFfQ09ORklHKCkgICAgICAgICAgYmZpbl9yZWFkMTYoTURNQTJfUzFfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX1MxX0NPTkZJRyh2YWwpICAgICAgYmZpbl93cml0ZTE2KE1ETUEyX1MxX0NPTkZJRyx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9TMV9ORVhUX0RFU0NfUFRSKCkgICBiZmluX3JlYWQzMihNRE1BMl9TMV9ORVhUX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX1MxX05FWFRfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlMzIoTURNQTJfUzFfTkVYVF9ERVNDX1BUUix2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9TMV9TVEFSVF9BRERSKCkgICAgICBiZmluX3JlYWQzMihNRE1BMl9TMV9TVEFSVF9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX1MxX1NUQVJUX0FERFIodmFsKSAgYmZpbl93cml0ZTMyKE1ETUEyX1MxX1NUQVJUX0FERFIsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQTJfUzFfWF9DT1VOVCgpICAgICAgICAgYmZpbl9yZWFkMTYoTURNQTJfUzFfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9TMV9YX0NPVU5UKHZhbCkgICAgIGJmaW5fd3JpdGUxNihNRE1BMl9TMV9YX0NPVU5ULHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX1MxX1lfQ09VTlQoKSAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUEyX1MxX1lfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfUzFfWV9DT1VOVCh2YWwpICAgICBiZmluX3dyaXRlMTYoTURNQTJfUzFfWV9DT1VOVCx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9TMV9YX01PRElGWSgpICAgICAgICBiZmluX3JlYWQxNihNRE1BMl9TMV9YX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9TMV9YX01PRElGWSh2YWwpICAgIGJmaW5fd3JpdGUxNihNRE1BMl9TMV9YX01PRElGWSx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9TMV9ZX01PRElGWSgpICAgICAgICBiZmluX3JlYWQxNihNRE1BMl9TMV9ZX01PRElGWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9TMV9ZX01PRElGWSh2YWwpICAgIGJmaW5fd3JpdGUxNihNRE1BMl9TMV9ZX01PRElGWSx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9TMV9DVVJSX0RFU0NfUFRSKCkgICBiZmluX3JlYWQzMihNRE1BMl9TMV9DVVJSX0RFU0NfUFRSKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUEyX1MxX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlMzIoTURNQTJfUzFfQ1VSUl9ERVNDX1BUUix2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9TMV9DVVJSX0FERFIoKSAgICAgICBiZmluX3JlYWQzMihNRE1BMl9TMV9DVVJSX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfUzFfQ1VSUl9BRERSKHZhbCkgICBiZmluX3dyaXRlMzIoTURNQTJfUzFfQ1VSUl9BRERSLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX1MxX0NVUlJfWF9DT1VOVCgpICAgIGJmaW5fcmVhZDE2KE1ETUEyX1MxX0NVUlJfWF9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9TMV9DVVJSX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTJfUzFfQ1VSUl9YX0NPVU5ULHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX1MxX0NVUlJfWV9DT1VOVCgpICAgIGJmaW5fcmVhZDE2KE1ETUEyX1MxX0NVUlJfWV9DT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9TMV9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQTJfUzFfQ1VSUl9ZX0NPVU5ULHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUEyX1MxX0lSUV9TVEFUVVMoKSAgICAgIGJmaW5fcmVhZDE2KE1ETUEyX1MxX0lSUV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQTJfUzFfSVJRX1NUQVRVUyh2YWwpICBiZmluX3dyaXRlMTYoTURNQTJfUzFfSVJRX1NUQVRVUyx2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BMl9TMV9QRVJJUEhFUkFMX01BUCgpICBiZmluX3JlYWQxNihNRE1BMl9TMV9QRVJJUEhFUkFMX01BUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BMl9TMV9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BMl9TMV9QRVJJUEhFUkFMX01BUCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0NPTkZJRygpICAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfRDBfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ09ORklHKHZhbCkgICAgICBiZmluX3dyaXRlMTYoTURNQV9EMF9DT05GSUcsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9ORVhUX0RFU0NfUFRSKCkgICBiZmluX3JlYWQzMihNRE1BX0QwX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9ORVhUX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZTMyKE1ETUFfRDBfTkVYVF9ERVNDX1BUUix2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1NUQVJUX0FERFIoKSAgICAgIGJmaW5fcmVhZDMyKE1ETUFfRDBfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1NUQVJUX0FERFIodmFsKSAgYmZpbl93cml0ZTMyKE1ETUFfRDBfU1RBUlRfQUREUix2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1hfQ09VTlQoKSAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfRDBfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1hfQ09VTlQodmFsKSAgICAgYmZpbl93cml0ZTE2KE1ETUFfRDBfWF9DT1VOVCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1lfQ09VTlQoKSAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfRDBfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1lfQ09VTlQodmFsKSAgICAgYmZpbl93cml0ZTE2KE1ETUFfRDBfWV9DT1VOVCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1hfTU9ESUZZKCkgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfRDBfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9YX01PRElGWSh2YWwpICAgIGJmaW5fd3JpdGUxNihNRE1BX0QwX1hfTU9ESUZZLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfWV9NT0RJRlkoKSAgICAgICAgYmZpbl9yZWFkMTYoTURNQV9EMF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1lfTU9ESUZZKHZhbCkgICAgYmZpbl93cml0ZTE2KE1ETUFfRDBfWV9NT0RJRlksdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DVVJSX0RFU0NfUFRSKCkgICBiZmluX3JlYWQzMihNRE1BX0QwX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DVVJSX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZTMyKE1ETUFfRDBfQ1VSUl9ERVNDX1BUUix2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0NVUlJfQUREUigpICAgICAgIGJmaW5fcmVhZDMyKE1ETUFfRDBfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ1VSUl9BRERSKHZhbCkgICBiZmluX3dyaXRlMzIoTURNQV9EMF9DVVJSX0FERFIsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DVVJSX1hfQ09VTlQoKSAgICBiZmluX3JlYWQxNihNRE1BX0QwX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX0QwX0NVUlJfWF9DT1VOVCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0NVUlJfWV9DT1VOVCgpICAgIGJmaW5fcmVhZDE2KE1ETUFfRDBfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ1VSUl9ZX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDBfQ1VSUl9ZX0NPVU5ULHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfSVJRX1NUQVRVUygpICAgICAgYmZpbl9yZWFkMTYoTURNQV9EMF9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfSVJRX1NUQVRVUyh2YWwpICBiZmluX3dyaXRlMTYoTURNQV9EMF9JUlFfU1RBVFVTLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfUEVSSVBIRVJBTF9NQVAoKSAgYmZpbl9yZWFkMTYoTURNQV9EMF9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1BFUklQSEVSQUxfTUFQKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDBfUEVSSVBIRVJBTF9NQVAsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DT05GSUcoKSAgICAgICAgICBiZmluX3JlYWQxNihNRE1BX1MwX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NPTkZJRyh2YWwpICAgICAgYmZpbl93cml0ZTE2KE1ETUFfUzBfQ09ORklHLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfTkVYVF9ERVNDX1BUUigpICAgYmZpbl9yZWFkMzIoTURNQV9TMF9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfTkVYVF9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGUzMihNRE1BX1MwX05FWFRfREVTQ19QVFIsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9TVEFSVF9BRERSKCkgICAgICBiZmluX3JlYWQzMihNRE1BX1MwX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9TVEFSVF9BRERSKHZhbCkgIGJmaW5fd3JpdGUzMihNRE1BX1MwX1NUQVJUX0FERFIsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9YX0NPVU5UKCkgICAgICAgICBiZmluX3JlYWQxNihNRE1BX1MwX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9YX0NPVU5UKHZhbCkgICAgIGJmaW5fd3JpdGUxNihNRE1BX1MwX1hfQ09VTlQsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9ZX0NPVU5UKCkgICAgICAgICBiZmluX3JlYWQxNihNRE1BX1MwX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9ZX0NPVU5UKHZhbCkgICAgIGJmaW5fd3JpdGUxNihNRE1BX1MwX1lfQ09VTlQsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9YX01PRElGWSgpICAgICAgICBiZmluX3JlYWQxNihNRE1BX1MwX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfWF9NT0RJRlkodmFsKSAgICBiZmluX3dyaXRlMTYoTURNQV9TMF9YX01PRElGWSx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1lfTU9ESUZZKCkgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfUzBfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9ZX01PRElGWSh2YWwpICAgIGJmaW5fd3JpdGUxNihNRE1BX1MwX1lfTU9ESUZZLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfQ1VSUl9ERVNDX1BUUigpICAgYmZpbl9yZWFkMzIoTURNQV9TMF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfQ1VSUl9ERVNDX1BUUih2YWwpIGJmaW5fd3JpdGUzMihNRE1BX1MwX0NVUlJfREVTQ19QVFIsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DVVJSX0FERFIoKSAgICAgICBiZmluX3JlYWQzMihNRE1BX1MwX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfQUREUih2YWwpICAgYmZpbl93cml0ZTMyKE1ETUFfUzBfQ1VSUl9BRERSLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfQ1VSUl9YX0NPVU5UKCkgICAgYmZpbl9yZWFkMTYoTURNQV9TMF9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9DVVJSX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9TMF9DVVJSX1hfQ09VTlQsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DVVJSX1lfQ09VTlQoKSAgICBiZmluX3JlYWQxNihNRE1BX1MwX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MwX0NVUlJfWV9DT1VOVCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0lSUV9TVEFUVVMoKSAgICAgIGJmaW5fcmVhZDE2KE1ETUFfUzBfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0lSUV9TVEFUVVModmFsKSAgYmZpbl93cml0ZTE2KE1ETUFfUzBfSVJRX1NUQVRVUyx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1BFUklQSEVSQUxfTUFQKCkgIGJmaW5fcmVhZDE2KE1ETUFfUzBfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9QRVJJUEhFUkFMX01BUCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MwX1BFUklQSEVSQUxfTUFQLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfQ09ORklHKCkgICAgICAgICAgYmZpbl9yZWFkMTYoTURNQV9EMV9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DT05GSUcodmFsKSAgICAgIGJmaW5fd3JpdGUxNihNRE1BX0QxX0NPTkZJRyx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX05FWFRfREVTQ19QVFIoKSAgIGJmaW5fcmVhZDMyKE1ETUFfRDFfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX05FWFRfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlMzIoTURNQV9EMV9ORVhUX0RFU0NfUFRSLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfU1RBUlRfQUREUigpICAgICAgYmZpbl9yZWFkMzIoTURNQV9EMV9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfU1RBUlRfQUREUih2YWwpICBiZmluX3dyaXRlMzIoTURNQV9EMV9TVEFSVF9BRERSLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWF9DT1VOVCgpICAgICAgICAgYmZpbl9yZWFkMTYoTURNQV9EMV9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfWF9DT1VOVCh2YWwpICAgICBiZmluX3dyaXRlMTYoTURNQV9EMV9YX0NPVU5ULHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWV9DT1VOVCgpICAgICAgICAgYmZpbl9yZWFkMTYoTURNQV9EMV9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfWV9DT1VOVCh2YWwpICAgICBiZmluX3dyaXRlMTYoTURNQV9EMV9ZX0NPVU5ULHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWF9NT0RJRlkoKSAgICAgICAgYmZpbl9yZWFkMTYoTURNQV9EMV9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1hfTU9ESUZZKHZhbCkgICAgYmZpbl93cml0ZTE2KE1ETUFfRDFfWF9NT0RJRlksdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9ZX01PRElGWSgpICAgICAgICBiZmluX3JlYWQxNihNRE1BX0QxX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfWV9NT0RJRlkodmFsKSAgICBiZmluX3dyaXRlMTYoTURNQV9EMV9ZX01PRElGWSx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NVUlJfREVTQ19QVFIoKSAgIGJmaW5fcmVhZDMyKE1ETUFfRDFfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NVUlJfREVTQ19QVFIodmFsKSBiZmluX3dyaXRlMzIoTURNQV9EMV9DVVJSX0RFU0NfUFRSLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfQ1VSUl9BRERSKCkgICAgICAgYmZpbl9yZWFkMzIoTURNQV9EMV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DVVJSX0FERFIodmFsKSAgIGJmaW5fd3JpdGUzMihNRE1BX0QxX0NVUlJfQUREUix2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NVUlJfWF9DT1VOVCgpICAgIGJmaW5fcmVhZDE2KE1ETUFfRDFfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfQ1VSUl9YX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfRDFfQ1VSUl9YX0NPVU5ULHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfQ1VSUl9ZX0NPVU5UKCkgICAgYmZpbl9yZWFkMTYoTURNQV9EMV9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DVVJSX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlMTYoTURNQV9EMV9DVVJSX1lfQ09VTlQsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9JUlFfU1RBVFVTKCkgICAgICBiZmluX3JlYWQxNihNRE1BX0QxX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9JUlFfU1RBVFVTKHZhbCkgIGJmaW5fd3JpdGUxNihNRE1BX0QxX0lSUV9TVEFUVVMsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9QRVJJUEhFUkFMX01BUCgpICBiZmluX3JlYWQxNihNRE1BX0QxX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfUEVSSVBIRVJBTF9NQVAodmFsKSBiZmluX3dyaXRlMTYoTURNQV9EMV9QRVJJUEhFUkFMX01BUCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NPTkZJRygpICAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfUzFfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ09ORklHKHZhbCkgICAgICBiZmluX3dyaXRlMTYoTURNQV9TMV9DT05GSUcsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9ORVhUX0RFU0NfUFRSKCkgICBiZmluX3JlYWQzMihNRE1BX1MxX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9ORVhUX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZTMyKE1ETUFfUzFfTkVYVF9ERVNDX1BUUix2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1NUQVJUX0FERFIoKSAgICAgIGJmaW5fcmVhZDMyKE1ETUFfUzFfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1NUQVJUX0FERFIodmFsKSAgYmZpbl93cml0ZTMyKE1ETUFfUzFfU1RBUlRfQUREUix2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1hfQ09VTlQoKSAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfUzFfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1hfQ09VTlQodmFsKSAgICAgYmZpbl93cml0ZTE2KE1ETUFfUzFfWF9DT1VOVCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1lfQ09VTlQoKSAgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfUzFfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1lfQ09VTlQodmFsKSAgICAgYmZpbl93cml0ZTE2KE1ETUFfUzFfWV9DT1VOVCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1hfTU9ESUZZKCkgICAgICAgIGJmaW5fcmVhZDE2KE1ETUFfUzFfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9YX01PRElGWSh2YWwpICAgIGJmaW5fd3JpdGUxNihNRE1BX1MxX1hfTU9ESUZZLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfWV9NT0RJRlkoKSAgICAgICAgYmZpbl9yZWFkMTYoTURNQV9TMV9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1lfTU9ESUZZKHZhbCkgICAgYmZpbl93cml0ZTE2KE1ETUFfUzFfWV9NT0RJRlksdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9DVVJSX0RFU0NfUFRSKCkgICBiZmluX3JlYWQzMihNRE1BX1MxX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9DVVJSX0RFU0NfUFRSKHZhbCkgYmZpbl93cml0ZTMyKE1ETUFfUzFfQ1VSUl9ERVNDX1BUUix2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NVUlJfQUREUigpICAgICAgIGJmaW5fcmVhZDMyKE1ETUFfUzFfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9BRERSKHZhbCkgICBiZmluX3dyaXRlMzIoTURNQV9TMV9DVVJSX0FERFIsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9DVVJSX1hfQ09VTlQoKSAgICBiZmluX3JlYWQxNihNRE1BX1MxX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX0NVUlJfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGUxNihNRE1BX1MxX0NVUlJfWF9DT1VOVCx2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NVUlJfWV9DT1VOVCgpICAgIGJmaW5fcmVhZDE2KE1ETUFfUzFfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9ZX0NPVU5UKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfUzFfQ1VSUl9ZX0NPVU5ULHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfSVJRX1NUQVRVUygpICAgICAgYmZpbl9yZWFkMTYoTURNQV9TMV9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfSVJRX1NUQVRVUyh2YWwpICBiZmluX3dyaXRlMTYoTURNQV9TMV9JUlFfU1RBVFVTLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfUEVSSVBIRVJBTF9NQVAoKSAgYmZpbl9yZWFkMTYoTURNQV9TMV9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1BFUklQSEVSQUxfTUFQKHZhbCkgYmZpbl93cml0ZTE2KE1ETUFfUzFfUEVSSVBIRVJBTF9NQVAsdmFsKQogLyogSW50ZXJuYWwgTWVtb3J5IERNQSBSZWdpc3RlcnMgKDB4RkZDMF8xODAwIC0gMHhGRkMwXzE5RkYpICovCiAjZGVmaW5lIGJmaW5fcmVhZF9JTURNQV9EMF9DT05GSUcoKSAgICAgICAgICBiZmluX3JlYWQxNihJTURNQV9EMF9DT05GSUcpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSU1ETUFfRDBfQ09ORklHKHZhbCkgICAgICBiZmluX3dyaXRlMTYoSU1ETUFfRDBfQ09ORklHLHZhbCkKQEAgLTE0NjUsNjUgKzE0NTcsNCBAQAogI2RlZmluZSBiZmluX3JlYWRfSU1ETUFfUzFfSVJRX1NUQVRVUygpICAgICAgYmZpbl9yZWFkMTYoSU1ETUFfUzFfSVJRX1NUQVRVUykKICNkZWZpbmUgYmZpbl93cml0ZV9JTURNQV9TMV9JUlFfU1RBVFVTKHZhbCkgIGJmaW5fd3JpdGUxNihJTURNQV9TMV9JUlFfU1RBVFVTLHZhbCkKIAotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DT05GSUcoKSAgYmZpbl9yZWFkX01ETUExX1MwX0NPTkZJRygpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9DT05GSUcodmFsKSBiZmluX3dyaXRlX01ETUExX1MwX0NPTkZJRyh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0lSUV9TVEFUVVMoKSAgYmZpbl9yZWFkX01ETUExX1MwX0lSUV9TVEFUVVMoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfSVJRX1NUQVRVUyh2YWwpIGJmaW5fd3JpdGVfTURNQTFfUzBfSVJRX1NUQVRVUyh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1hfTU9ESUZZKCkgIGJmaW5fcmVhZF9NRE1BMV9TMF9YX01PRElGWSgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9YX01PRElGWSh2YWwpIGJmaW5fd3JpdGVfTURNQTFfUzBfWF9NT0RJRlkodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9ZX01PRElGWSgpICBiZmluX3JlYWRfTURNQTFfUzBfWV9NT0RJRlkoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfWV9NT0RJRlkodmFsKSBiZmluX3dyaXRlX01ETUExX1MwX1lfTU9ESUZZKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfWF9DT1VOVCgpICBiZmluX3JlYWRfTURNQTFfUzBfWF9DT1VOVCgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9YX0NPVU5UKHZhbCkgYmZpbl93cml0ZV9NRE1BMV9TMF9YX0NPVU5UKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfWV9DT1VOVCgpICBiZmluX3JlYWRfTURNQTFfUzBfWV9DT1VOVCgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9ZX0NPVU5UKHZhbCkgYmZpbl93cml0ZV9NRE1BMV9TMF9ZX0NPVU5UKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfU1RBUlRfQUREUigpICBiZmluX3JlYWRfTURNQTFfUzBfU1RBUlRfQUREUigpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9TVEFSVF9BRERSKHZhbCkgYmZpbl93cml0ZV9NRE1BMV9TMF9TVEFSVF9BRERSKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfQ09ORklHKCkgIGJmaW5fcmVhZF9NRE1BMV9EMF9DT05GSUcoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ09ORklHKHZhbCkgYmZpbl93cml0ZV9NRE1BMV9EMF9DT05GSUcodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9JUlFfU1RBVFVTKCkgIGJmaW5fcmVhZF9NRE1BMV9EMF9JUlFfU1RBVFVTKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX0lSUV9TVEFUVVModmFsKSBiZmluX3dyaXRlX01ETUExX0QwX0lSUV9TVEFUVVModmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9YX01PRElGWSgpICBiZmluX3JlYWRfTURNQTFfRDBfWF9NT0RJRlkoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWF9NT0RJRlkodmFsKSBiZmluX3dyaXRlX01ETUExX0QwX1hfTU9ESUZZKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfWV9NT0RJRlkoKSAgYmZpbl9yZWFkX01ETUExX0QwX1lfTU9ESUZZKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1lfTU9ESUZZKHZhbCkgYmZpbl93cml0ZV9NRE1BMV9EMF9ZX01PRElGWSh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1hfQ09VTlQoKSAgYmZpbl9yZWFkX01ETUExX0QwX1hfQ09VTlQoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGVfTURNQTFfRDBfWF9DT1VOVCh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1lfQ09VTlQoKSAgYmZpbl9yZWFkX01ETUExX0QwX1lfQ09VTlQoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGVfTURNQTFfRDBfWV9DT1VOVCh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1NUQVJUX0FERFIoKSAgYmZpbl9yZWFkX01ETUExX0QwX1NUQVJUX0FERFIoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfU1RBUlRfQUREUih2YWwpIGJmaW5fd3JpdGVfTURNQTFfRDBfU1RBUlRfQUREUih2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfQ09ORklHKCkgIGJmaW5fcmVhZF9NRE1BMV9TMV9DT05GSUcoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ09ORklHKHZhbCkgYmZpbl93cml0ZV9NRE1BMV9TMV9DT05GSUcodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9JUlFfU1RBVFVTKCkgIGJmaW5fcmVhZF9NRE1BMV9TMV9JUlFfU1RBVFVTKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX0lSUV9TVEFUVVModmFsKSBiZmluX3dyaXRlX01ETUExX1MxX0lSUV9TVEFUVVModmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9YX01PRElGWSgpICBiZmluX3JlYWRfTURNQTFfUzFfWF9NT0RJRlkoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWF9NT0RJRlkodmFsKSBiZmluX3dyaXRlX01ETUExX1MxX1hfTU9ESUZZKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfWV9NT0RJRlkoKSAgYmZpbl9yZWFkX01ETUExX1MxX1lfTU9ESUZZKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1lfTU9ESUZZKHZhbCkgYmZpbl93cml0ZV9NRE1BMV9TMV9ZX01PRElGWSh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1hfQ09VTlQoKSAgYmZpbl9yZWFkX01ETUExX1MxX1hfQ09VTlQoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWF9DT1VOVCh2YWwpIGJmaW5fd3JpdGVfTURNQTFfUzFfWF9DT1VOVCh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1lfQ09VTlQoKSAgYmZpbl9yZWFkX01ETUExX1MxX1lfQ09VTlQoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWV9DT1VOVCh2YWwpIGJmaW5fd3JpdGVfTURNQTFfUzFfWV9DT1VOVCh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX1NUQVJUX0FERFIoKSAgYmZpbl9yZWFkX01ETUExX1MxX1NUQVJUX0FERFIoKQotI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfU1RBUlRfQUREUih2YWwpIGJmaW5fd3JpdGVfTURNQTFfUzFfU1RBUlRfQUREUih2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NPTkZJRygpICBiZmluX3JlYWRfTURNQTFfRDFfQ09ORklHKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NPTkZJRyh2YWwpIGJmaW5fd3JpdGVfTURNQTFfRDFfQ09ORklHKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfSVJRX1NUQVRVUygpICBiZmluX3JlYWRfTURNQTFfRDFfSVJRX1NUQVRVUygpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9JUlFfU1RBVFVTKHZhbCkgYmZpbl93cml0ZV9NRE1BMV9EMV9JUlFfU1RBVFVTKHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWF9NT0RJRlkoKSAgYmZpbl9yZWFkX01ETUExX0QxX1hfTU9ESUZZKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1hfTU9ESUZZKHZhbCkgYmZpbl93cml0ZV9NRE1BMV9EMV9YX01PRElGWSh2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1lfTU9ESUZZKCkgIGJmaW5fcmVhZF9NRE1BMV9EMV9ZX01PRElGWSgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9ZX01PRElGWSh2YWwpIGJmaW5fd3JpdGVfTURNQTFfRDFfWV9NT0RJRlkodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9YX0NPVU5UKCkgIGJmaW5fcmVhZF9NRE1BMV9EMV9YX0NPVU5UKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1hfQ09VTlQodmFsKSBiZmluX3dyaXRlX01ETUExX0QxX1hfQ09VTlQodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9ZX0NPVU5UKCkgIGJmaW5fcmVhZF9NRE1BMV9EMV9ZX0NPVU5UKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1lfQ09VTlQodmFsKSBiZmluX3dyaXRlX01ETUExX0QxX1lfQ09VTlQodmFsKQotI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9TVEFSVF9BRERSKCkgIGJmaW5fcmVhZF9NRE1BMV9EMV9TVEFSVF9BRERSKCkKLSNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1NUQVJUX0FERFIodmFsKSBiZmluX3dyaXRlX01ETUExX0QxX1NUQVJUX0FERFIodmFsKQotCi0vKiBUaGVzZSBuZWVkIHRvIGJlIGxhc3QgZHVlIHRvIHRoZSBjZGVmL2xpbnV4IGludGVyLWRlcGVuZGVuY2llcyAqLwotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQogI2VuZGlmCQkJCS8qIF9DREVGX0JGNTYxX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZGVmQkY1NjEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZGVmQkY1NjEuaAppbmRleCA3OWUwNDhkLi43MWU4MDVlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2RlZkJGNTYxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9kZWZCRjU2MS5oCkBAIC0xLDE4ICsxLDExIEBACiAvKgotICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTYxX0gKICNkZWZpbmUgX0RFRl9CRjU2MV9ICi0vKgotI2lmICFkZWZpbmVkKF9fQURTUEJGNTYxX18pCi0jd2FybmluZyBkZWZCRjU2MS5oIHNob3VsZCBvbmx5IGJlIGluY2x1ZGVkIGZvciBCRjU2MSBjaGlwLgotI2VuZGlmCi0qLwotLyogaW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGFzbS9kZWZfTFBCbGFja2Zpbi5oPgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIC8qIFN5c3RlbSBNTVIgUmVnaXN0ZXIgTWFwICovCkBAIC0zMTEsMTAgKzMwNCwxMCBAQAogI2RlZmluZSBQUEkxX0ZSQU1FIAkJCQkJMHhGRkMwMTMxMAkvKiBQUEkxIEZyYW1lIExlbmd0aCByZWdpc3RlciAqLwogCiAvKkRNQSB0cmFmZmljIGNvbnRyb2wgcmVnaXN0ZXJzICovCi0jZGVmaW5lCURNQTFfVENfUEVSICAweEZGQzAxQjBDCS8qIFRyYWZmaWMgY29udHJvbCBwZXJpb2RzICovCi0jZGVmaW5lCURNQTFfVENfQ05UICAweEZGQzAxQjEwCS8qIFRyYWZmaWMgY29udHJvbCBjdXJyZW50IGNvdW50cyAqLwotI2RlZmluZQlETUEyX1RDX1BFUiAgMHhGRkMwMEIwQwkvKiBUcmFmZmljIGNvbnRyb2wgcGVyaW9kcyAqLwotI2RlZmluZQlETUEyX1RDX0NOVCAgMHhGRkMwMEIxMAkvKiBUcmFmZmljIGNvbnRyb2wgY3VycmVudCBjb3VudHMgICAgICAgICovCisjZGVmaW5lCURNQUMwX1RDX1BFUiAgMHhGRkMwMEIwQwkvKiBUcmFmZmljIGNvbnRyb2wgcGVyaW9kcyAqLworI2RlZmluZQlETUFDMF9UQ19DTlQgIDB4RkZDMDBCMTAJLyogVHJhZmZpYyBjb250cm9sIGN1cnJlbnQgY291bnRzICAgICAgICAqLworI2RlZmluZQlETUFDMV9UQ19QRVIgIDB4RkZDMDFCMEMJLyogVHJhZmZpYyBjb250cm9sIHBlcmlvZHMgKi8KKyNkZWZpbmUJRE1BQzFfVENfQ05UICAweEZGQzAxQjEwCS8qIFRyYWZmaWMgY29udHJvbCBjdXJyZW50IGNvdW50cyAqLwogCiAvKiBETUExIENvbnRyb2xsZXIgcmVnaXN0ZXJzICgweEZGQzAgMUMwMC0weEZGQzAgMUZGRikgKi8KICNkZWZpbmUgRE1BMV8wX0NPTkZJRyAweEZGQzAxQzA4CS8qIERNQTEgQ2hhbm5lbCAwIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KQEAgLTQ4Niw2MSArNDc5LDYxIEBACiAjZGVmaW5lIERNQTFfMTFfUEVSSVBIRVJBTF9NQVAgMHhGRkMwMUVFQwkvKiBETUExIENoYW5uZWwgMTEgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KIAogLyogTWVtb3J5IERNQTEgQ29udHJvbGxlciByZWdpc3RlcnMgKDB4RkZDMCAxRTgwLTB4RkZDMCAxRkZGKSAqLwotI2RlZmluZSBNRE1BMV9EMF9DT05GSUcgMHhGRkMwMUYwOAkvKk1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24gQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBNRE1BMV9EMF9ORVhUX0RFU0NfUFRSIDB4RkZDMDFGMDAJLypNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uIE5leHQgRGVzY3JpcHRvciBQdHIgUmVnICovCi0jZGVmaW5lIE1ETUExX0QwX1NUQVJUX0FERFIgMHhGRkMwMUYwNAkvKk1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyAqLwotI2RlZmluZSBNRE1BMV9EMF9YX0NPVU5UIDB4RkZDMDFGMTAJLypNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uIElubmVyLUxvb3AgQ291bnQgKi8KLSNkZWZpbmUgTURNQTFfRDBfWV9DT1VOVCAweEZGQzAxRjE4CS8qTWVtRE1BMSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBPdXRlci1Mb29wIENvdW50ICovCi0jZGVmaW5lIE1ETUExX0QwX1hfTU9ESUZZIDB4RkZDMDFGMTQJLypNZW1ETUExIFN0cmVhbSAwIERlc3QgSW5uZXItTG9vcCBBZGRyZXNzLUluY3JlbWVudCAqLwotI2RlZmluZSBNRE1BMV9EMF9ZX01PRElGWSAweEZGQzAxRjFDCS8qTWVtRE1BMSBTdHJlYW0gMCBEZXN0IE91dGVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KLSNkZWZpbmUgTURNQTFfRDBfQ1VSUl9ERVNDX1BUUiAweEZGQzAxRjIwCS8qTWVtRE1BMSBTdHJlYW0gMCBEZXN0IEN1cnJlbnQgRGVzY3JpcHRvciBQdHIgcmVnICovCi0jZGVmaW5lIE1ETUExX0QwX0NVUlJfQUREUiAweEZGQzAxRjI0CS8qTWVtRE1BMSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBDdXJyZW50IEFkZHJlc3MgKi8KLSNkZWZpbmUgTURNQTFfRDBfQ1VSUl9YX0NPVU5UIDB4RkZDMDFGMzAJLypNZW1ETUExIFN0cmVhbSAwIERlc3QgQ3VycmVudCBJbm5lci1Mb29wIENvdW50ICovCi0jZGVmaW5lIE1ETUExX0QwX0NVUlJfWV9DT1VOVCAweEZGQzAxRjM4CS8qTWVtRE1BMSBTdHJlYW0gMCBEZXN0IEN1cnJlbnQgT3V0ZXItTG9vcCBDb3VudCAqLwotI2RlZmluZSBNRE1BMV9EMF9JUlFfU1RBVFVTIDB4RkZDMDFGMjgJLypNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uIEludGVycnVwdC9TdGF0dXMgKi8KLSNkZWZpbmUgTURNQTFfRDBfUEVSSVBIRVJBTF9NQVAgMHhGRkMwMUYyQwkvKk1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24gUGVyaXBoZXJhbCBNYXAgKi8KKyNkZWZpbmUgTURNQV9EMl9DT05GSUcgMHhGRkMwMUYwOAkvKk1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24gQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBNRE1BX0QyX05FWFRfREVTQ19QVFIgMHhGRkMwMUYwMAkvKk1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24gTmV4dCBEZXNjcmlwdG9yIFB0ciBSZWcgKi8KKyNkZWZpbmUgTURNQV9EMl9TVEFSVF9BRERSIDB4RkZDMDFGMDQJLypNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgKi8KKyNkZWZpbmUgTURNQV9EMl9YX0NPVU5UIDB4RkZDMDFGMTAJLypNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uIElubmVyLUxvb3AgQ291bnQgKi8KKyNkZWZpbmUgTURNQV9EMl9ZX0NPVU5UIDB4RkZDMDFGMTgJLypNZW1ETUExIFN0cmVhbSAwIERlc3RpbmF0aW9uIE91dGVyLUxvb3AgQ291bnQgKi8KKyNkZWZpbmUgTURNQV9EMl9YX01PRElGWSAweEZGQzAxRjE0CS8qTWVtRE1BMSBTdHJlYW0gMCBEZXN0IElubmVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KKyNkZWZpbmUgTURNQV9EMl9ZX01PRElGWSAweEZGQzAxRjFDCS8qTWVtRE1BMSBTdHJlYW0gMCBEZXN0IE91dGVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KKyNkZWZpbmUgTURNQV9EMl9DVVJSX0RFU0NfUFRSIDB4RkZDMDFGMjAJLypNZW1ETUExIFN0cmVhbSAwIERlc3QgQ3VycmVudCBEZXNjcmlwdG9yIFB0ciByZWcgKi8KKyNkZWZpbmUgTURNQV9EMl9DVVJSX0FERFIgMHhGRkMwMUYyNAkvKk1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24gQ3VycmVudCBBZGRyZXNzICovCisjZGVmaW5lIE1ETUFfRDJfQ1VSUl9YX0NPVU5UIDB4RkZDMDFGMzAJLypNZW1ETUExIFN0cmVhbSAwIERlc3QgQ3VycmVudCBJbm5lci1Mb29wIENvdW50ICovCisjZGVmaW5lIE1ETUFfRDJfQ1VSUl9ZX0NPVU5UIDB4RkZDMDFGMzgJLypNZW1ETUExIFN0cmVhbSAwIERlc3QgQ3VycmVudCBPdXRlci1Mb29wIENvdW50ICovCisjZGVmaW5lIE1ETUFfRDJfSVJRX1NUQVRVUyAweEZGQzAxRjI4CS8qTWVtRE1BMSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBJbnRlcnJ1cHQvU3RhdHVzICovCisjZGVmaW5lIE1ETUFfRDJfUEVSSVBIRVJBTF9NQVAgMHhGRkMwMUYyQwkvKk1lbURNQTEgU3RyZWFtIDAgRGVzdGluYXRpb24gUGVyaXBoZXJhbCBNYXAgKi8KIAotI2RlZmluZSBNRE1BMV9TMF9DT05GSUcgMHhGRkMwMUY0OAkvKk1lbURNQTEgU3RyZWFtIDAgU291cmNlIENvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTURNQTFfUzBfTkVYVF9ERVNDX1BUUiAweEZGQzAxRjQwCS8qTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgTmV4dCBEZXNjcmlwdG9yIFB0ciBSZWcgKi8KLSNkZWZpbmUgTURNQTFfUzBfU1RBUlRfQUREUiAweEZGQzAxRjQ0CS8qTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgU3RhcnQgQWRkcmVzcyAqLwotI2RlZmluZSBNRE1BMV9TMF9YX0NPVU5UIDB4RkZDMDFGNTAJLypNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBJbm5lci1Mb29wIENvdW50ICovCi0jZGVmaW5lIE1ETUExX1MwX1lfQ09VTlQgMHhGRkMwMUY1OAkvKk1lbURNQTEgU3RyZWFtIDAgU291cmNlIE91dGVyLUxvb3AgQ291bnQgKi8KLSNkZWZpbmUgTURNQTFfUzBfWF9NT0RJRlkgMHhGRkMwMUY1NAkvKk1lbURNQTEgU3RyZWFtIDAgU291cmNlIElubmVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KLSNkZWZpbmUgTURNQTFfUzBfWV9NT0RJRlkgMHhGRkMwMUY1QwkvKk1lbURNQTEgU3RyZWFtIDAgU291cmNlIE91dGVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KLSNkZWZpbmUgTURNQTFfUzBfQ1VSUl9ERVNDX1BUUiAweEZGQzAxRjYwCS8qTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBEZXNjcmlwdG9yIFB0ciByZWcgKi8KLSNkZWZpbmUgTURNQTFfUzBfQ1VSUl9BRERSIDB4RkZDMDFGNjQJLypNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IEFkZHJlc3MgKi8KLSNkZWZpbmUgTURNQTFfUzBfQ1VSUl9YX0NPVU5UIDB4RkZDMDFGNzAJLypNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IElubmVyLUxvb3AgQ291bnQgKi8KLSNkZWZpbmUgTURNQTFfUzBfQ1VSUl9ZX0NPVU5UIDB4RkZDMDFGNzgJLypNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IE91dGVyLUxvb3AgQ291bnQgKi8KLSNkZWZpbmUgTURNQTFfUzBfSVJRX1NUQVRVUyAweEZGQzAxRjY4CS8qTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgSW50ZXJydXB0L1N0YXR1cyAqLwotI2RlZmluZSBNRE1BMV9TMF9QRVJJUEhFUkFMX01BUCAweEZGQzAxRjZDCS8qTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgKi8KKyNkZWZpbmUgTURNQV9TMl9DT05GSUcgMHhGRkMwMUY0OAkvKk1lbURNQTEgU3RyZWFtIDAgU291cmNlIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTURNQV9TMl9ORVhUX0RFU0NfUFRSIDB4RkZDMDFGNDAJLypNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBOZXh0IERlc2NyaXB0b3IgUHRyIFJlZyAqLworI2RlZmluZSBNRE1BX1MyX1NUQVJUX0FERFIgMHhGRkMwMUY0NAkvKk1lbURNQTEgU3RyZWFtIDAgU291cmNlIFN0YXJ0IEFkZHJlc3MgKi8KKyNkZWZpbmUgTURNQV9TMl9YX0NPVU5UIDB4RkZDMDFGNTAJLypNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBJbm5lci1Mb29wIENvdW50ICovCisjZGVmaW5lIE1ETUFfUzJfWV9DT1VOVCAweEZGQzAxRjU4CS8qTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgT3V0ZXItTG9vcCBDb3VudCAqLworI2RlZmluZSBNRE1BX1MyX1hfTU9ESUZZIDB4RkZDMDFGNTQJLypNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBJbm5lci1Mb29wIEFkZHJlc3MtSW5jcmVtZW50ICovCisjZGVmaW5lIE1ETUFfUzJfWV9NT0RJRlkgMHhGRkMwMUY1QwkvKk1lbURNQTEgU3RyZWFtIDAgU291cmNlIE91dGVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KKyNkZWZpbmUgTURNQV9TMl9DVVJSX0RFU0NfUFRSIDB4RkZDMDFGNjAJLypNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUHRyIHJlZyAqLworI2RlZmluZSBNRE1BX1MyX0NVUlJfQUREUiAweEZGQzAxRjY0CS8qTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBBZGRyZXNzICovCisjZGVmaW5lIE1ETUFfUzJfQ1VSUl9YX0NPVU5UIDB4RkZDMDFGNzAJLypNZW1ETUExIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IElubmVyLUxvb3AgQ291bnQgKi8KKyNkZWZpbmUgTURNQV9TMl9DVVJSX1lfQ09VTlQgMHhGRkMwMUY3OAkvKk1lbURNQTEgU3RyZWFtIDAgU291cmNlIEN1cnJlbnQgT3V0ZXItTG9vcCBDb3VudCAqLworI2RlZmluZSBNRE1BX1MyX0lSUV9TVEFUVVMgMHhGRkMwMUY2OAkvKk1lbURNQTEgU3RyZWFtIDAgU291cmNlIEludGVycnVwdC9TdGF0dXMgKi8KKyNkZWZpbmUgTURNQV9TMl9QRVJJUEhFUkFMX01BUCAweEZGQzAxRjZDCS8qTWVtRE1BMSBTdHJlYW0gMCBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgKi8KIAotI2RlZmluZSBNRE1BMV9EMV9DT05GSUcgMHhGRkMwMUY4OAkvKk1lbURNQTEgU3RyZWFtIDEgRGVzdGluYXRpb24gQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBNRE1BMV9EMV9ORVhUX0RFU0NfUFRSIDB4RkZDMDFGODAJLypNZW1ETUExIFN0cmVhbSAxIERlc3RpbmF0aW9uIE5leHQgRGVzY3JpcHRvciBQdHIgUmVnICovCi0jZGVmaW5lIE1ETUExX0QxX1NUQVJUX0FERFIgMHhGRkMwMUY4NAkvKk1lbURNQTEgU3RyZWFtIDEgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyAqLwotI2RlZmluZSBNRE1BMV9EMV9YX0NPVU5UIDB4RkZDMDFGOTAJLypNZW1ETUExIFN0cmVhbSAxIERlc3RpbmF0aW9uIElubmVyLUxvb3AgQ291bnQgKi8KLSNkZWZpbmUgTURNQTFfRDFfWV9DT1VOVCAweEZGQzAxRjk4CS8qTWVtRE1BMSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBPdXRlci1Mb29wIENvdW50ICovCi0jZGVmaW5lIE1ETUExX0QxX1hfTU9ESUZZIDB4RkZDMDFGOTQJLypNZW1ETUExIFN0cmVhbSAxIERlc3QgSW5uZXItTG9vcCBBZGRyZXNzLUluY3JlbWVudCAqLwotI2RlZmluZSBNRE1BMV9EMV9ZX01PRElGWSAweEZGQzAxRjlDCS8qTWVtRE1BMSBTdHJlYW0gMSBEZXN0IE91dGVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KLSNkZWZpbmUgTURNQTFfRDFfQ1VSUl9ERVNDX1BUUiAweEZGQzAxRkEwCS8qTWVtRE1BMSBTdHJlYW0gMSBEZXN0IEN1cnJlbnQgRGVzY3JpcHRvciBQdHIgcmVnICovCi0jZGVmaW5lIE1ETUExX0QxX0NVUlJfQUREUiAweEZGQzAxRkE0CS8qTWVtRE1BMSBTdHJlYW0gMSBEZXN0IEN1cnJlbnQgQWRkcmVzcyAqLwotI2RlZmluZSBNRE1BMV9EMV9DVVJSX1hfQ09VTlQgMHhGRkMwMUZCMAkvKk1lbURNQTEgU3RyZWFtIDEgRGVzdCBDdXJyZW50IElubmVyLUxvb3AgQ291bnQgKi8KLSNkZWZpbmUgTURNQTFfRDFfQ1VSUl9ZX0NPVU5UIDB4RkZDMDFGQjgJLypNZW1ETUExIFN0cmVhbSAxIERlc3QgQ3VycmVudCBPdXRlci1Mb29wIENvdW50ICovCi0jZGVmaW5lIE1ETUExX0QxX0lSUV9TVEFUVVMgMHhGRkMwMUZBOAkvKk1lbURNQTEgU3RyZWFtIDEgRGVzdCBJbnRlcnJ1cHQvU3RhdHVzICovCi0jZGVmaW5lIE1ETUExX0QxX1BFUklQSEVSQUxfTUFQIDB4RkZDMDFGQUMJLypNZW1ETUExIFN0cmVhbSAxIERlc3QgUGVyaXBoZXJhbCBNYXAgKi8KKyNkZWZpbmUgTURNQV9EM19DT05GSUcgMHhGRkMwMUY4OAkvKk1lbURNQTEgU3RyZWFtIDEgRGVzdGluYXRpb24gQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBNRE1BX0QzX05FWFRfREVTQ19QVFIgMHhGRkMwMUY4MAkvKk1lbURNQTEgU3RyZWFtIDEgRGVzdGluYXRpb24gTmV4dCBEZXNjcmlwdG9yIFB0ciBSZWcgKi8KKyNkZWZpbmUgTURNQV9EM19TVEFSVF9BRERSIDB4RkZDMDFGODQJLypNZW1ETUExIFN0cmVhbSAxIERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgKi8KKyNkZWZpbmUgTURNQV9EM19YX0NPVU5UIDB4RkZDMDFGOTAJLypNZW1ETUExIFN0cmVhbSAxIERlc3RpbmF0aW9uIElubmVyLUxvb3AgQ291bnQgKi8KKyNkZWZpbmUgTURNQV9EM19ZX0NPVU5UIDB4RkZDMDFGOTgJLypNZW1ETUExIFN0cmVhbSAxIERlc3RpbmF0aW9uIE91dGVyLUxvb3AgQ291bnQgKi8KKyNkZWZpbmUgTURNQV9EM19YX01PRElGWSAweEZGQzAxRjk0CS8qTWVtRE1BMSBTdHJlYW0gMSBEZXN0IElubmVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KKyNkZWZpbmUgTURNQV9EM19ZX01PRElGWSAweEZGQzAxRjlDCS8qTWVtRE1BMSBTdHJlYW0gMSBEZXN0IE91dGVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KKyNkZWZpbmUgTURNQV9EM19DVVJSX0RFU0NfUFRSIDB4RkZDMDFGQTAJLypNZW1ETUExIFN0cmVhbSAxIERlc3QgQ3VycmVudCBEZXNjcmlwdG9yIFB0ciByZWcgKi8KKyNkZWZpbmUgTURNQV9EM19DVVJSX0FERFIgMHhGRkMwMUZBNAkvKk1lbURNQTEgU3RyZWFtIDEgRGVzdCBDdXJyZW50IEFkZHJlc3MgKi8KKyNkZWZpbmUgTURNQV9EM19DVVJSX1hfQ09VTlQgMHhGRkMwMUZCMAkvKk1lbURNQTEgU3RyZWFtIDEgRGVzdCBDdXJyZW50IElubmVyLUxvb3AgQ291bnQgKi8KKyNkZWZpbmUgTURNQV9EM19DVVJSX1lfQ09VTlQgMHhGRkMwMUZCOAkvKk1lbURNQTEgU3RyZWFtIDEgRGVzdCBDdXJyZW50IE91dGVyLUxvb3AgQ291bnQgKi8KKyNkZWZpbmUgTURNQV9EM19JUlFfU1RBVFVTIDB4RkZDMDFGQTgJLypNZW1ETUExIFN0cmVhbSAxIERlc3QgSW50ZXJydXB0L1N0YXR1cyAqLworI2RlZmluZSBNRE1BX0QzX1BFUklQSEVSQUxfTUFQIDB4RkZDMDFGQUMJLypNZW1ETUExIFN0cmVhbSAxIERlc3QgUGVyaXBoZXJhbCBNYXAgKi8KIAotI2RlZmluZSBNRE1BMV9TMV9DT05GSUcgMHhGRkMwMUZDOAkvKk1lbURNQTEgU3RyZWFtIDEgU291cmNlIENvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTURNQTFfUzFfTkVYVF9ERVNDX1BUUiAweEZGQzAxRkMwCS8qTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgTmV4dCBEZXNjcmlwdG9yIFB0ciBSZWcgKi8KLSNkZWZpbmUgTURNQTFfUzFfU1RBUlRfQUREUiAweEZGQzAxRkM0CS8qTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgU3RhcnQgQWRkcmVzcyAqLwotI2RlZmluZSBNRE1BMV9TMV9YX0NPVU5UIDB4RkZDMDFGRDAJLypNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBJbm5lci1Mb29wIENvdW50ICovCi0jZGVmaW5lIE1ETUExX1MxX1lfQ09VTlQgMHhGRkMwMUZEOAkvKk1lbURNQTEgU3RyZWFtIDEgU291cmNlIE91dGVyLUxvb3AgQ291bnQgKi8KLSNkZWZpbmUgTURNQTFfUzFfWF9NT0RJRlkgMHhGRkMwMUZENAkvKk1lbURNQTEgU3RyZWFtIDEgU291cmNlIElubmVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KLSNkZWZpbmUgTURNQTFfUzFfWV9NT0RJRlkgMHhGRkMwMUZEQwkvKk1lbURNQTEgU3RyZWFtIDEgU291cmNlIE91dGVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KLSNkZWZpbmUgTURNQTFfUzFfQ1VSUl9ERVNDX1BUUiAweEZGQzAxRkUwCS8qTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBEZXNjcmlwdG9yIFB0ciByZWcgKi8KLSNkZWZpbmUgTURNQTFfUzFfQ1VSUl9BRERSIDB4RkZDMDFGRTQJLypNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IEFkZHJlc3MgKi8KLSNkZWZpbmUgTURNQTFfUzFfQ1VSUl9YX0NPVU5UIDB4RkZDMDFGRjAJLypNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IElubmVyLUxvb3AgQ291bnQgKi8KLSNkZWZpbmUgTURNQTFfUzFfQ1VSUl9ZX0NPVU5UIDB4RkZDMDFGRjgJLypNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IE91dGVyLUxvb3AgQ291bnQgKi8KLSNkZWZpbmUgTURNQTFfUzFfSVJRX1NUQVRVUyAweEZGQzAxRkU4CS8qTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgSW50ZXJydXB0L1N0YXR1cyAqLwotI2RlZmluZSBNRE1BMV9TMV9QRVJJUEhFUkFMX01BUCAweEZGQzAxRkVDCS8qTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgKi8KKyNkZWZpbmUgTURNQV9TM19DT05GSUcgMHhGRkMwMUZDOAkvKk1lbURNQTEgU3RyZWFtIDEgU291cmNlIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTURNQV9TM19ORVhUX0RFU0NfUFRSIDB4RkZDMDFGQzAJLypNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBOZXh0IERlc2NyaXB0b3IgUHRyIFJlZyAqLworI2RlZmluZSBNRE1BX1MzX1NUQVJUX0FERFIgMHhGRkMwMUZDNAkvKk1lbURNQTEgU3RyZWFtIDEgU291cmNlIFN0YXJ0IEFkZHJlc3MgKi8KKyNkZWZpbmUgTURNQV9TM19YX0NPVU5UIDB4RkZDMDFGRDAJLypNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBJbm5lci1Mb29wIENvdW50ICovCisjZGVmaW5lIE1ETUFfUzNfWV9DT1VOVCAweEZGQzAxRkQ4CS8qTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgT3V0ZXItTG9vcCBDb3VudCAqLworI2RlZmluZSBNRE1BX1MzX1hfTU9ESUZZIDB4RkZDMDFGRDQJLypNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBJbm5lci1Mb29wIEFkZHJlc3MtSW5jcmVtZW50ICovCisjZGVmaW5lIE1ETUFfUzNfWV9NT0RJRlkgMHhGRkMwMUZEQwkvKk1lbURNQTEgU3RyZWFtIDEgU291cmNlIE91dGVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KKyNkZWZpbmUgTURNQV9TM19DVVJSX0RFU0NfUFRSIDB4RkZDMDFGRTAJLypNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUHRyIHJlZyAqLworI2RlZmluZSBNRE1BX1MzX0NVUlJfQUREUiAweEZGQzAxRkU0CS8qTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBBZGRyZXNzICovCisjZGVmaW5lIE1ETUFfUzNfQ1VSUl9YX0NPVU5UIDB4RkZDMDFGRjAJLypNZW1ETUExIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IElubmVyLUxvb3AgQ291bnQgKi8KKyNkZWZpbmUgTURNQV9TM19DVVJSX1lfQ09VTlQgMHhGRkMwMUZGOAkvKk1lbURNQTEgU3RyZWFtIDEgU291cmNlIEN1cnJlbnQgT3V0ZXItTG9vcCBDb3VudCAqLworI2RlZmluZSBNRE1BX1MzX0lSUV9TVEFUVVMgMHhGRkMwMUZFOAkvKk1lbURNQTEgU3RyZWFtIDEgU291cmNlIEludGVycnVwdC9TdGF0dXMgKi8KKyNkZWZpbmUgTURNQV9TM19QRVJJUEhFUkFMX01BUCAweEZGQzAxRkVDCS8qTWVtRE1BMSBTdHJlYW0gMSBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgKi8KIAogLyogRE1BMiBDb250cm9sbGVyIHJlZ2lzdGVycyAoMHhGRkMwIDBDMDAtMHhGRkMwIDBERkYpICovCiAjZGVmaW5lIERNQTJfMF9DT05GSUcgMHhGRkMwMEMwOAkvKiBETUEyIENoYW5uZWwgMCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCkBAIC03MTIsMTE3ICs3MDUsNjEgQEAKICNkZWZpbmUgRE1BMl8xMV9QRVJJUEhFUkFMX01BUCAweEZGQzAwRUVDCS8qIERNQTIgQ2hhbm5lbCAxMSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLwogCiAvKiBNZW1vcnkgRE1BMiBDb250cm9sbGVyIHJlZ2lzdGVycyAoMHhGRkMwIDBFODAtMHhGRkMwIDBGRkYpICovCi0jZGVmaW5lIE1ETUEyX0QwX0NPTkZJRyAweEZGQzAwRjA4CS8qTWVtRE1BMiBTdHJlYW0gMCBEZXN0aW5hdGlvbiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCi0jZGVmaW5lIE1ETUEyX0QwX05FWFRfREVTQ19QVFIgMHhGRkMwMEYwMAkvKk1lbURNQTIgU3RyZWFtIDAgRGVzdGluYXRpb24gTmV4dCBEZXNjcmlwdG9yIFB0ciBSZWcgKi8KLSNkZWZpbmUgTURNQTJfRDBfU1RBUlRfQUREUiAweEZGQzAwRjA0CS8qTWVtRE1BMiBTdHJlYW0gMCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzICovCi0jZGVmaW5lIE1ETUEyX0QwX1hfQ09VTlQgMHhGRkMwMEYxMAkvKk1lbURNQTIgU3RyZWFtIDAgRGVzdCBJbm5lci1Mb29wIENvdW50IHJlZ2lzdGVyICovCi0jZGVmaW5lIE1ETUEyX0QwX1lfQ09VTlQgMHhGRkMwMEYxOAkvKk1lbURNQTIgU3RyZWFtIDAgRGVzdCBPdXRlci1Mb29wIENvdW50IHJlZ2lzdGVyICovCi0jZGVmaW5lIE1ETUEyX0QwX1hfTU9ESUZZIDB4RkZDMDBGMTQJLypNZW1ETUEyIFN0cmVhbSAwIERlc3QgSW5uZXItTG9vcCBBZGRyZXNzLUluY3JlbWVudCAqLwotI2RlZmluZSBNRE1BMl9EMF9ZX01PRElGWSAweEZGQzAwRjFDCS8qTWVtRE1BMiBTdHJlYW0gMCBEZXN0IE91dGVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KLSNkZWZpbmUgTURNQTJfRDBfQ1VSUl9ERVNDX1BUUiAweEZGQzAwRjIwCS8qTWVtRE1BMiBTdHJlYW0gMCBEZXN0IEN1cnJlbnQgRGVzY3JpcHRvciBQdHIgcmVnICovCi0jZGVmaW5lIE1ETUEyX0QwX0NVUlJfQUREUiAweEZGQzAwRjI0CS8qTWVtRE1BMiBTdHJlYW0gMCBEZXN0aW5hdGlvbiBDdXJyZW50IEFkZHJlc3MgKi8KLSNkZWZpbmUgTURNQTJfRDBfQ1VSUl9YX0NPVU5UIDB4RkZDMDBGMzAJLypNZW1ETUEyIFN0cmVhbSAwIERlc3QgQ3VycmVudCBJbm5lci1Mb29wIENvdW50IHJlZyAqLwotI2RlZmluZSBNRE1BMl9EMF9DVVJSX1lfQ09VTlQgMHhGRkMwMEYzOAkvKk1lbURNQTIgU3RyZWFtIDAgRGVzdCBDdXJyZW50IE91dGVyLUxvb3AgQ291bnQgcmVnICovCi0jZGVmaW5lIE1ETUEyX0QwX0lSUV9TVEFUVVMgMHhGRkMwMEYyOAkvKk1lbURNQTIgU3RyZWFtIDAgRGVzdCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1ETUEyX0QwX1BFUklQSEVSQUxfTUFQIDB4RkZDMDBGMkMJLypNZW1ETUEyIFN0cmVhbSAwIERlc3RpbmF0aW9uIFBlcmlwaGVyYWwgTWFwIHJlZ2lzdGVyICovCisjZGVmaW5lIE1ETUFfRDBfQ09ORklHIDB4RkZDMDBGMDgJLypNZW1ETUEyIFN0cmVhbSAwIERlc3RpbmF0aW9uIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTURNQV9EMF9ORVhUX0RFU0NfUFRSIDB4RkZDMDBGMDAJLypNZW1ETUEyIFN0cmVhbSAwIERlc3RpbmF0aW9uIE5leHQgRGVzY3JpcHRvciBQdHIgUmVnICovCisjZGVmaW5lIE1ETUFfRDBfU1RBUlRfQUREUiAweEZGQzAwRjA0CS8qTWVtRE1BMiBTdHJlYW0gMCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzICovCisjZGVmaW5lIE1ETUFfRDBfWF9DT1VOVCAweEZGQzAwRjEwCS8qTWVtRE1BMiBTdHJlYW0gMCBEZXN0IElubmVyLUxvb3AgQ291bnQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTURNQV9EMF9ZX0NPVU5UIDB4RkZDMDBGMTgJLypNZW1ETUEyIFN0cmVhbSAwIERlc3QgT3V0ZXItTG9vcCBDb3VudCByZWdpc3RlciAqLworI2RlZmluZSBNRE1BX0QwX1hfTU9ESUZZIDB4RkZDMDBGMTQJLypNZW1ETUEyIFN0cmVhbSAwIERlc3QgSW5uZXItTG9vcCBBZGRyZXNzLUluY3JlbWVudCAqLworI2RlZmluZSBNRE1BX0QwX1lfTU9ESUZZIDB4RkZDMDBGMUMJLypNZW1ETUEyIFN0cmVhbSAwIERlc3QgT3V0ZXItTG9vcCBBZGRyZXNzLUluY3JlbWVudCAqLworI2RlZmluZSBNRE1BX0QwX0NVUlJfREVTQ19QVFIgMHhGRkMwMEYyMAkvKk1lbURNQTIgU3RyZWFtIDAgRGVzdCBDdXJyZW50IERlc2NyaXB0b3IgUHRyIHJlZyAqLworI2RlZmluZSBNRE1BX0QwX0NVUlJfQUREUiAweEZGQzAwRjI0CS8qTWVtRE1BMiBTdHJlYW0gMCBEZXN0aW5hdGlvbiBDdXJyZW50IEFkZHJlc3MgKi8KKyNkZWZpbmUgTURNQV9EMF9DVVJSX1hfQ09VTlQgMHhGRkMwMEYzMAkvKk1lbURNQTIgU3RyZWFtIDAgRGVzdCBDdXJyZW50IElubmVyLUxvb3AgQ291bnQgcmVnICovCisjZGVmaW5lIE1ETUFfRDBfQ1VSUl9ZX0NPVU5UIDB4RkZDMDBGMzgJLypNZW1ETUEyIFN0cmVhbSAwIERlc3QgQ3VycmVudCBPdXRlci1Mb29wIENvdW50IHJlZyAqLworI2RlZmluZSBNRE1BX0QwX0lSUV9TVEFUVVMgMHhGRkMwMEYyOAkvKk1lbURNQTIgU3RyZWFtIDAgRGVzdCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1ETUFfRDBfUEVSSVBIRVJBTF9NQVAgMHhGRkMwMEYyQwkvKk1lbURNQTIgU3RyZWFtIDAgRGVzdGluYXRpb24gUGVyaXBoZXJhbCBNYXAgcmVnaXN0ZXIgKi8KIAotI2RlZmluZSBNRE1BMl9TMF9DT05GSUcgMHhGRkMwMEY0OAkvKk1lbURNQTIgU3RyZWFtIDAgU291cmNlIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTURNQTJfUzBfTkVYVF9ERVNDX1BUUiAweEZGQzAwRjQwCS8qTWVtRE1BMiBTdHJlYW0gMCBTb3VyY2UgTmV4dCBEZXNjcmlwdG9yIFB0ciBSZWcgKi8KLSNkZWZpbmUgTURNQTJfUzBfU1RBUlRfQUREUiAweEZGQzAwRjQ0CS8qTWVtRE1BMiBTdHJlYW0gMCBTb3VyY2UgU3RhcnQgQWRkcmVzcyAqLwotI2RlZmluZSBNRE1BMl9TMF9YX0NPVU5UIDB4RkZDMDBGNTAJLypNZW1ETUEyIFN0cmVhbSAwIFNvdXJjZSBJbm5lci1Mb29wIENvdW50IHJlZ2lzdGVyICovCi0jZGVmaW5lIE1ETUEyX1MwX1lfQ09VTlQgMHhGRkMwMEY1OAkvKk1lbURNQTIgU3RyZWFtIDAgU291cmNlIE91dGVyLUxvb3AgQ291bnQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTURNQTJfUzBfWF9NT0RJRlkgMHhGRkMwMEY1NAkvKk1lbURNQTIgU3RyZWFtIDAgU3JjIElubmVyLUxvb3AgQWRkci1JbmNyZW1lbnQgcmVnICovCi0jZGVmaW5lIE1ETUEyX1MwX1lfTU9ESUZZIDB4RkZDMDBGNUMJLypNZW1ETUEyIFN0cmVhbSAwIFNyYyBPdXRlci1Mb29wIEFkZHItSW5jcmVtZW50IHJlZyAqLwotI2RlZmluZSBNRE1BMl9TMF9DVVJSX0RFU0NfUFRSIDB4RkZDMDBGNjAJLypNZW1ETUEyIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUHRyIHJlZyAqLwotI2RlZmluZSBNRE1BMl9TMF9DVVJSX0FERFIgMHhGRkMwMEY2NAkvKk1lbURNQTIgU3RyZWFtIDAgU291cmNlIEN1cnJlbnQgQWRkcmVzcyAqLwotI2RlZmluZSBNRE1BMl9TMF9DVVJSX1hfQ09VTlQgMHhGRkMwMEY3MAkvKk1lbURNQTIgU3RyZWFtIDAgU3JjIEN1cnJlbnQgSW5uZXItTG9vcCBDb3VudCByZWcgKi8KLSNkZWZpbmUgTURNQTJfUzBfQ1VSUl9ZX0NPVU5UIDB4RkZDMDBGNzgJLypNZW1ETUEyIFN0cmVhbSAwIFNyYyBDdXJyZW50IE91dGVyLUxvb3AgQ291bnQgcmVnICovCi0jZGVmaW5lIE1ETUEyX1MwX0lSUV9TVEFUVVMgMHhGRkMwMEY2OAkvKk1lbURNQTIgU3RyZWFtIDAgU291cmNlIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTURNQTJfUzBfUEVSSVBIRVJBTF9NQVAgMHhGRkMwMEY2QwkvKk1lbURNQTIgU3RyZWFtIDAgU291cmNlIFBlcmlwaGVyYWwgTWFwIHJlZ2lzdGVyICovCisjZGVmaW5lIE1ETUFfUzBfQ09ORklHIDB4RkZDMDBGNDgJLypNZW1ETUEyIFN0cmVhbSAwIFNvdXJjZSBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIE1ETUFfUzBfTkVYVF9ERVNDX1BUUiAweEZGQzAwRjQwCS8qTWVtRE1BMiBTdHJlYW0gMCBTb3VyY2UgTmV4dCBEZXNjcmlwdG9yIFB0ciBSZWcgKi8KKyNkZWZpbmUgTURNQV9TMF9TVEFSVF9BRERSIDB4RkZDMDBGNDQJLypNZW1ETUEyIFN0cmVhbSAwIFNvdXJjZSBTdGFydCBBZGRyZXNzICovCisjZGVmaW5lIE1ETUFfUzBfWF9DT1VOVCAweEZGQzAwRjUwCS8qTWVtRE1BMiBTdHJlYW0gMCBTb3VyY2UgSW5uZXItTG9vcCBDb3VudCByZWdpc3RlciAqLworI2RlZmluZSBNRE1BX1MwX1lfQ09VTlQgMHhGRkMwMEY1OAkvKk1lbURNQTIgU3RyZWFtIDAgU291cmNlIE91dGVyLUxvb3AgQ291bnQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTURNQV9TMF9YX01PRElGWSAweEZGQzAwRjU0CS8qTWVtRE1BMiBTdHJlYW0gMCBTcmMgSW5uZXItTG9vcCBBZGRyLUluY3JlbWVudCByZWcgKi8KKyNkZWZpbmUgTURNQV9TMF9ZX01PRElGWSAweEZGQzAwRjVDCS8qTWVtRE1BMiBTdHJlYW0gMCBTcmMgT3V0ZXItTG9vcCBBZGRyLUluY3JlbWVudCByZWcgKi8KKyNkZWZpbmUgTURNQV9TMF9DVVJSX0RFU0NfUFRSIDB4RkZDMDBGNjAJLypNZW1ETUEyIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUHRyIHJlZyAqLworI2RlZmluZSBNRE1BX1MwX0NVUlJfQUREUiAweEZGQzAwRjY0CS8qTWVtRE1BMiBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBBZGRyZXNzICovCisjZGVmaW5lIE1ETUFfUzBfQ1VSUl9YX0NPVU5UIDB4RkZDMDBGNzAJLypNZW1ETUEyIFN0cmVhbSAwIFNyYyBDdXJyZW50IElubmVyLUxvb3AgQ291bnQgcmVnICovCisjZGVmaW5lIE1ETUFfUzBfQ1VSUl9ZX0NPVU5UIDB4RkZDMDBGNzgJLypNZW1ETUEyIFN0cmVhbSAwIFNyYyBDdXJyZW50IE91dGVyLUxvb3AgQ291bnQgcmVnICovCisjZGVmaW5lIE1ETUFfUzBfSVJRX1NUQVRVUyAweEZGQzAwRjY4CS8qTWVtRE1BMiBTdHJlYW0gMCBTb3VyY2UgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNRE1BX1MwX1BFUklQSEVSQUxfTUFQIDB4RkZDMDBGNkMJLypNZW1ETUEyIFN0cmVhbSAwIFNvdXJjZSBQZXJpcGhlcmFsIE1hcCByZWdpc3RlciAqLwogCi0jZGVmaW5lIE1ETUEyX0QxX0NPTkZJRyAweEZGQzAwRjg4CS8qTWVtRE1BMiBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCi0jZGVmaW5lIE1ETUEyX0QxX05FWFRfREVTQ19QVFIgMHhGRkMwMEY4MAkvKk1lbURNQTIgU3RyZWFtIDEgRGVzdGluYXRpb24gTmV4dCBEZXNjcmlwdG9yIFB0ciBSZWcgKi8KLSNkZWZpbmUgTURNQTJfRDFfU1RBUlRfQUREUiAweEZGQzAwRjg0CS8qTWVtRE1BMiBTdHJlYW0gMSBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzICovCi0jZGVmaW5lIE1ETUEyX0QxX1hfQ09VTlQgMHhGRkMwMEY5MAkvKk1lbURNQTIgU3RyZWFtIDEgRGVzdCBJbm5lci1Mb29wIENvdW50IHJlZ2lzdGVyICovCi0jZGVmaW5lIE1ETUEyX0QxX1lfQ09VTlQgMHhGRkMwMEY5OAkvKk1lbURNQTIgU3RyZWFtIDEgRGVzdCBPdXRlci1Mb29wIENvdW50IHJlZ2lzdGVyICovCi0jZGVmaW5lIE1ETUEyX0QxX1hfTU9ESUZZIDB4RkZDMDBGOTQJLypNZW1ETUEyIFN0cmVhbSAxIERlc3QgSW5uZXItTG9vcCBBZGRyZXNzLUluY3JlbWVudCAqLwotI2RlZmluZSBNRE1BMl9EMV9ZX01PRElGWSAweEZGQzAwRjlDCS8qTWVtRE1BMiBTdHJlYW0gMSBEZXN0IE91dGVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KLSNkZWZpbmUgTURNQTJfRDFfQ1VSUl9ERVNDX1BUUiAweEZGQzAwRkEwCS8qTWVtRE1BMiBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDdXJyZW50IERlc2NyaXB0b3IgUHRyICovCi0jZGVmaW5lIE1ETUEyX0QxX0NVUlJfQUREUiAweEZGQzAwRkE0CS8qTWVtRE1BMiBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDdXJyZW50IEFkZHJlc3MgcmVnICovCi0jZGVmaW5lIE1ETUEyX0QxX0NVUlJfWF9DT1VOVCAweEZGQzAwRkIwCS8qTWVtRE1BMiBTdHJlYW0gMSBEZXN0IEN1cnJlbnQgSW5uZXItTG9vcCBDb3VudCByZWcgKi8KLSNkZWZpbmUgTURNQTJfRDFfQ1VSUl9ZX0NPVU5UIDB4RkZDMDBGQjgJLypNZW1ETUEyIFN0cmVhbSAxIERlc3QgQ3VycmVudCBPdXRlci1Mb29wIENvdW50IHJlZyAqLwotI2RlZmluZSBNRE1BMl9EMV9JUlFfU1RBVFVTIDB4RkZDMDBGQTgJLypNZW1ETUEyIFN0cmVhbSAxIERlc3RpbmF0aW9uIEludGVycnVwdC9TdGF0dXMgUmVnICovCi0jZGVmaW5lIE1ETUEyX0QxX1BFUklQSEVSQUxfTUFQIDB4RkZDMDBGQUMJLypNZW1ETUEyIFN0cmVhbSAxIERlc3RpbmF0aW9uIFBlcmlwaGVyYWwgTWFwIHJlZ2lzdGVyICovCisjZGVmaW5lIE1ETUFfRDFfQ09ORklHIDB4RkZDMDBGODgJLypNZW1ETUEyIFN0cmVhbSAxIERlc3RpbmF0aW9uIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTURNQV9EMV9ORVhUX0RFU0NfUFRSIDB4RkZDMDBGODAJLypNZW1ETUEyIFN0cmVhbSAxIERlc3RpbmF0aW9uIE5leHQgRGVzY3JpcHRvciBQdHIgUmVnICovCisjZGVmaW5lIE1ETUFfRDFfU1RBUlRfQUREUiAweEZGQzAwRjg0CS8qTWVtRE1BMiBTdHJlYW0gMSBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzICovCisjZGVmaW5lIE1ETUFfRDFfWF9DT1VOVCAweEZGQzAwRjkwCS8qTWVtRE1BMiBTdHJlYW0gMSBEZXN0IElubmVyLUxvb3AgQ291bnQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTURNQV9EMV9ZX0NPVU5UIDB4RkZDMDBGOTgJLypNZW1ETUEyIFN0cmVhbSAxIERlc3QgT3V0ZXItTG9vcCBDb3VudCByZWdpc3RlciAqLworI2RlZmluZSBNRE1BX0QxX1hfTU9ESUZZIDB4RkZDMDBGOTQJLypNZW1ETUEyIFN0cmVhbSAxIERlc3QgSW5uZXItTG9vcCBBZGRyZXNzLUluY3JlbWVudCAqLworI2RlZmluZSBNRE1BX0QxX1lfTU9ESUZZIDB4RkZDMDBGOUMJLypNZW1ETUEyIFN0cmVhbSAxIERlc3QgT3V0ZXItTG9vcCBBZGRyZXNzLUluY3JlbWVudCAqLworI2RlZmluZSBNRE1BX0QxX0NVUlJfREVTQ19QVFIgMHhGRkMwMEZBMAkvKk1lbURNQTIgU3RyZWFtIDEgRGVzdGluYXRpb24gQ3VycmVudCBEZXNjcmlwdG9yIFB0ciAqLworI2RlZmluZSBNRE1BX0QxX0NVUlJfQUREUiAweEZGQzAwRkE0CS8qTWVtRE1BMiBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDdXJyZW50IEFkZHJlc3MgcmVnICovCisjZGVmaW5lIE1ETUFfRDFfQ1VSUl9YX0NPVU5UIDB4RkZDMDBGQjAJLypNZW1ETUEyIFN0cmVhbSAxIERlc3QgQ3VycmVudCBJbm5lci1Mb29wIENvdW50IHJlZyAqLworI2RlZmluZSBNRE1BX0QxX0NVUlJfWV9DT1VOVCAweEZGQzAwRkI4CS8qTWVtRE1BMiBTdHJlYW0gMSBEZXN0IEN1cnJlbnQgT3V0ZXItTG9vcCBDb3VudCByZWcgKi8KKyNkZWZpbmUgTURNQV9EMV9JUlFfU1RBVFVTIDB4RkZDMDBGQTgJLypNZW1ETUEyIFN0cmVhbSAxIERlc3RpbmF0aW9uIEludGVycnVwdC9TdGF0dXMgUmVnICovCisjZGVmaW5lIE1ETUFfRDFfUEVSSVBIRVJBTF9NQVAgMHhGRkMwMEZBQwkvKk1lbURNQTIgU3RyZWFtIDEgRGVzdGluYXRpb24gUGVyaXBoZXJhbCBNYXAgcmVnaXN0ZXIgKi8KIAotI2RlZmluZSBNRE1BMl9TMV9DT05GSUcgMHhGRkMwMEZDOAkvKk1lbURNQTIgU3RyZWFtIDEgU291cmNlIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTURNQTJfUzFfTkVYVF9ERVNDX1BUUiAweEZGQzAwRkMwCS8qTWVtRE1BMiBTdHJlYW0gMSBTb3VyY2UgTmV4dCBEZXNjcmlwdG9yIFB0ciBSZWcgKi8KLSNkZWZpbmUgTURNQTJfUzFfU1RBUlRfQUREUiAweEZGQzAwRkM0CS8qTWVtRE1BMiBTdHJlYW0gMSBTb3VyY2UgU3RhcnQgQWRkcmVzcyAqLwotI2RlZmluZSBNRE1BMl9TMV9YX0NPVU5UIDB4RkZDMDBGRDAJLypNZW1ETUEyIFN0cmVhbSAxIFNvdXJjZSBJbm5lci1Mb29wIENvdW50IHJlZ2lzdGVyICovCi0jZGVmaW5lIE1ETUEyX1MxX1lfQ09VTlQgMHhGRkMwMEZEOAkvKk1lbURNQTIgU3RyZWFtIDEgU291cmNlIE91dGVyLUxvb3AgQ291bnQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTURNQTJfUzFfWF9NT0RJRlkgMHhGRkMwMEZENAkvKk1lbURNQTIgU3RyZWFtIDEgU3JjIElubmVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KLSNkZWZpbmUgTURNQTJfUzFfWV9NT0RJRlkgMHhGRkMwMEZEQwkvKk1lbURNQTIgU3RyZWFtIDEgU291cmNlIE91dGVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KLSNkZWZpbmUgTURNQTJfUzFfQ1VSUl9ERVNDX1BUUiAweEZGQzAwRkUwCS8qTWVtRE1BMiBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBEZXNjcmlwdG9yIFB0ciByZWcgKi8KLSNkZWZpbmUgTURNQTJfUzFfQ1VSUl9BRERSIDB4RkZDMDBGRTQJLypNZW1ETUEyIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IEFkZHJlc3MgKi8KLSNkZWZpbmUgTURNQTJfUzFfQ1VSUl9YX0NPVU5UIDB4RkZDMDBGRjAJLypNZW1ETUEyIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IElubmVyLUxvb3AgQ291bnQgKi8KLSNkZWZpbmUgTURNQTJfUzFfQ1VSUl9ZX0NPVU5UIDB4RkZDMDBGRjgJLypNZW1ETUEyIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IE91dGVyLUxvb3AgQ291bnQgKi8KLSNkZWZpbmUgTURNQTJfUzFfSVJRX1NUQVRVUyAweEZGQzAwRkU4CS8qTWVtRE1BMiBTdHJlYW0gMSBTb3VyY2UgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBNRE1BMl9TMV9QRVJJUEhFUkFMX01BUCAweEZGQzAwRkVDCS8qTWVtRE1BMiBTdHJlYW0gMSBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgcmVnaXN0ZXIgKi8KLQotI2RlZmluZSBNRE1BX0QwX05FWFRfREVTQ19QVFIgTURNQTFfRDBfTkVYVF9ERVNDX1BUUgotI2RlZmluZSBNRE1BX0QwX1NUQVJUX0FERFIgTURNQTFfRDBfU1RBUlRfQUREUgotI2RlZmluZSBNRE1BX0QwX0NPTkZJRyBNRE1BMV9EMF9DT05GSUcKLSNkZWZpbmUgTURNQV9EMF9YX0NPVU5UIE1ETUExX0QwX1hfQ09VTlQKLSNkZWZpbmUgTURNQV9EMF9YX01PRElGWSBNRE1BMV9EMF9YX01PRElGWQotI2RlZmluZSBNRE1BX0QwX1lfQ09VTlQgTURNQTFfRDBfWV9DT1VOVAotI2RlZmluZSBNRE1BX0QwX1lfTU9ESUZZIE1ETUExX0QwX1lfTU9ESUZZCi0jZGVmaW5lIE1ETUFfRDBfQ1VSUl9ERVNDX1BUUiBNRE1BMV9EMF9DVVJSX0RFU0NfUFRSCi0jZGVmaW5lIE1ETUFfRDBfQ1VSUl9BRERSIE1ETUExX0QwX0NVUlJfQUREUgotI2RlZmluZSBNRE1BX0QwX0lSUV9TVEFUVVMgTURNQTFfRDBfSVJRX1NUQVRVUwotI2RlZmluZSBNRE1BX0QwX1BFUklQSEVSQUxfTUFQIE1ETUExX0QwX1BFUklQSEVSQUxfTUFQCi0jZGVmaW5lIE1ETUFfRDBfQ1VSUl9YX0NPVU5UIE1ETUExX0QwX0NVUlJfWF9DT1VOVAotI2RlZmluZSBNRE1BX0QwX0NVUlJfWV9DT1VOVCBNRE1BMV9EMF9DVVJSX1lfQ09VTlQKLQotI2RlZmluZSBNRE1BX1MwX05FWFRfREVTQ19QVFIgTURNQTFfUzBfTkVYVF9ERVNDX1BUUgotI2RlZmluZSBNRE1BX1MwX1NUQVJUX0FERFIgTURNQTFfUzBfU1RBUlRfQUREUgotI2RlZmluZSBNRE1BX1MwX0NPTkZJRyBNRE1BMV9TMF9DT05GSUcKLSNkZWZpbmUgTURNQV9TMF9YX0NPVU5UIE1ETUExX1MwX1hfQ09VTlQKLSNkZWZpbmUgTURNQV9TMF9YX01PRElGWSBNRE1BMV9TMF9YX01PRElGWQotI2RlZmluZSBNRE1BX1MwX1lfQ09VTlQgTURNQTFfUzBfWV9DT1VOVAotI2RlZmluZSBNRE1BX1MwX1lfTU9ESUZZIE1ETUExX1MwX1lfTU9ESUZZCi0jZGVmaW5lIE1ETUFfUzBfQ1VSUl9ERVNDX1BUUiBNRE1BMV9TMF9DVVJSX0RFU0NfUFRSCi0jZGVmaW5lIE1ETUFfUzBfQ1VSUl9BRERSIE1ETUExX1MwX0NVUlJfQUREUgotI2RlZmluZSBNRE1BX1MwX0lSUV9TVEFUVVMgTURNQTFfUzBfSVJRX1NUQVRVUwotI2RlZmluZSBNRE1BX1MwX1BFUklQSEVSQUxfTUFQIE1ETUExX1MwX1BFUklQSEVSQUxfTUFQCi0jZGVmaW5lIE1ETUFfUzBfQ1VSUl9YX0NPVU5UIE1ETUExX1MwX0NVUlJfWF9DT1VOVAotI2RlZmluZSBNRE1BX1MwX0NVUlJfWV9DT1VOVCBNRE1BMV9TMF9DVVJSX1lfQ09VTlQKLQotI2RlZmluZSBNRE1BX0QxX05FWFRfREVTQ19QVFIgTURNQTFfRDFfTkVYVF9ERVNDX1BUUgotI2RlZmluZSBNRE1BX0QxX1NUQVJUX0FERFIgTURNQTFfRDFfU1RBUlRfQUREUgotI2RlZmluZSBNRE1BX0QxX0NPTkZJRyBNRE1BMV9EMV9DT05GSUcKLSNkZWZpbmUgTURNQV9EMV9YX0NPVU5UIE1ETUExX0QxX1hfQ09VTlQKLSNkZWZpbmUgTURNQV9EMV9YX01PRElGWSBNRE1BMV9EMV9YX01PRElGWQotI2RlZmluZSBNRE1BX0QxX1lfQ09VTlQgTURNQTFfRDFfWV9DT1VOVAotI2RlZmluZSBNRE1BX0QxX1lfTU9ESUZZIE1ETUExX0QxX1lfTU9ESUZZCi0jZGVmaW5lIE1ETUFfRDFfQ1VSUl9ERVNDX1BUUiBNRE1BMV9EMV9DVVJSX0RFU0NfUFRSCi0jZGVmaW5lIE1ETUFfRDFfQ1VSUl9BRERSIE1ETUExX0QxX0NVUlJfQUREUgotI2RlZmluZSBNRE1BX0QxX0lSUV9TVEFUVVMgTURNQTFfRDFfSVJRX1NUQVRVUwotI2RlZmluZSBNRE1BX0QxX1BFUklQSEVSQUxfTUFQIE1ETUExX0QxX1BFUklQSEVSQUxfTUFQCi0jZGVmaW5lIE1ETUFfRDFfQ1VSUl9YX0NPVU5UIE1ETUExX0QxX0NVUlJfWF9DT1VOVAotI2RlZmluZSBNRE1BX0QxX0NVUlJfWV9DT1VOVCBNRE1BMV9EMV9DVVJSX1lfQ09VTlQKLQotI2RlZmluZSBNRE1BX1MxX05FWFRfREVTQ19QVFIgTURNQTFfUzFfTkVYVF9ERVNDX1BUUgotI2RlZmluZSBNRE1BX1MxX1NUQVJUX0FERFIgTURNQTFfUzFfU1RBUlRfQUREUgotI2RlZmluZSBNRE1BX1MxX0NPTkZJRyBNRE1BMV9TMV9DT05GSUcKLSNkZWZpbmUgTURNQV9TMV9YX0NPVU5UIE1ETUExX1MxX1hfQ09VTlQKLSNkZWZpbmUgTURNQV9TMV9YX01PRElGWSBNRE1BMV9TMV9YX01PRElGWQotI2RlZmluZSBNRE1BX1MxX1lfQ09VTlQgTURNQTFfUzFfWV9DT1VOVAotI2RlZmluZSBNRE1BX1MxX1lfTU9ESUZZIE1ETUExX1MxX1lfTU9ESUZZCi0jZGVmaW5lIE1ETUFfUzFfQ1VSUl9ERVNDX1BUUiBNRE1BMV9TMV9DVVJSX0RFU0NfUFRSCi0jZGVmaW5lIE1ETUFfUzFfQ1VSUl9BRERSIE1ETUExX1MxX0NVUlJfQUREUgotI2RlZmluZSBNRE1BX1MxX0lSUV9TVEFUVVMgTURNQTFfUzFfSVJRX1NUQVRVUwotI2RlZmluZSBNRE1BX1MxX1BFUklQSEVSQUxfTUFQIE1ETUExX1MxX1BFUklQSEVSQUxfTUFQCi0jZGVmaW5lIE1ETUFfUzFfQ1VSUl9YX0NPVU5UIE1ETUExX1MxX0NVUlJfWF9DT1VOVAotI2RlZmluZSBNRE1BX1MxX0NVUlJfWV9DT1VOVCBNRE1BMV9TMV9DVVJSX1lfQ09VTlQKKyNkZWZpbmUgTURNQV9TMV9DT05GSUcgMHhGRkMwMEZDOAkvKk1lbURNQTIgU3RyZWFtIDEgU291cmNlIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTURNQV9TMV9ORVhUX0RFU0NfUFRSIDB4RkZDMDBGQzAJLypNZW1ETUEyIFN0cmVhbSAxIFNvdXJjZSBOZXh0IERlc2NyaXB0b3IgUHRyIFJlZyAqLworI2RlZmluZSBNRE1BX1MxX1NUQVJUX0FERFIgMHhGRkMwMEZDNAkvKk1lbURNQTIgU3RyZWFtIDEgU291cmNlIFN0YXJ0IEFkZHJlc3MgKi8KKyNkZWZpbmUgTURNQV9TMV9YX0NPVU5UIDB4RkZDMDBGRDAJLypNZW1ETUEyIFN0cmVhbSAxIFNvdXJjZSBJbm5lci1Mb29wIENvdW50IHJlZ2lzdGVyICovCisjZGVmaW5lIE1ETUFfUzFfWV9DT1VOVCAweEZGQzAwRkQ4CS8qTWVtRE1BMiBTdHJlYW0gMSBTb3VyY2UgT3V0ZXItTG9vcCBDb3VudCByZWdpc3RlciAqLworI2RlZmluZSBNRE1BX1MxX1hfTU9ESUZZIDB4RkZDMDBGRDQJLypNZW1ETUEyIFN0cmVhbSAxIFNyYyBJbm5lci1Mb29wIEFkZHJlc3MtSW5jcmVtZW50ICovCisjZGVmaW5lIE1ETUFfUzFfWV9NT0RJRlkgMHhGRkMwMEZEQwkvKk1lbURNQTIgU3RyZWFtIDEgU291cmNlIE91dGVyLUxvb3AgQWRkcmVzcy1JbmNyZW1lbnQgKi8KKyNkZWZpbmUgTURNQV9TMV9DVVJSX0RFU0NfUFRSIDB4RkZDMDBGRTAJLypNZW1ETUEyIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUHRyIHJlZyAqLworI2RlZmluZSBNRE1BX1MxX0NVUlJfQUREUiAweEZGQzAwRkU0CS8qTWVtRE1BMiBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBBZGRyZXNzICovCisjZGVmaW5lIE1ETUFfUzFfQ1VSUl9YX0NPVU5UIDB4RkZDMDBGRjAJLypNZW1ETUEyIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IElubmVyLUxvb3AgQ291bnQgKi8KKyNkZWZpbmUgTURNQV9TMV9DVVJSX1lfQ09VTlQgMHhGRkMwMEZGOAkvKk1lbURNQTIgU3RyZWFtIDEgU291cmNlIEN1cnJlbnQgT3V0ZXItTG9vcCBDb3VudCAqLworI2RlZmluZSBNRE1BX1MxX0lSUV9TVEFUVVMgMHhGRkMwMEZFOAkvKk1lbURNQTIgU3RyZWFtIDEgU291cmNlIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTURNQV9TMV9QRVJJUEhFUkFMX01BUCAweEZGQzAwRkVDCS8qTWVtRE1BMiBTdHJlYW0gMSBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgcmVnaXN0ZXIgKi8KIAogLyogSW50ZXJuYWwgTWVtb3J5IERNQSBSZWdpc3RlcnMgKDB4RkZDMF8xODAwIC0gMHhGRkMwXzE5RkYpICovCiAjZGVmaW5lIElNRE1BX0QwX0NPTkZJRyAweEZGQzAxODA4CS8qSU1ETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gQ29uZmlndXJhdGlvbiAqLwpAQCAtOTI3LDgzICs4NjQsNiBAQAogI2RlZmluZSBJV1JfRU5BQkxFKHgpCSAgICAgICAoMSA8PCAoeCkpCS8qIFdha2V1cCBFbmFibGUgUGVyaXBoZXJhbCAjeCAqLwogI2RlZmluZSBJV1JfRElTQUJMRSh4KSAoMHhGRkZGRkZGRiBeICgxIDw8ICh4KSkpCS8qIFdha2V1cCBEaXNhYmxlIFBlcmlwaGVyYWwgI3ggKi8KIAotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogVUFSVCBDT05UUk9MTEVSIE1BU0tTICoqKioqKioqKioqKioqKioqKioqKiogKi8KLQotLyogVUFSVF9MQ1IgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBETEFCCTB4ODAKLSNkZWZpbmUgU0IgICAgICAweDQwCi0jZGVmaW5lIFNUUCAgICAgIDB4MjAKLSNkZWZpbmUgRVBTICAgICAweDEwCi0jZGVmaW5lIFBFTgkweDA4Ci0jZGVmaW5lIFNUQgkweDA0Ci0jZGVmaW5lIFdMUyh4KQkoKHgtNSkgJiAweDAzKQotCi0jZGVmaW5lIERMQUJfUAkweDA3Ci0jZGVmaW5lIFNCX1AJMHgwNgotI2RlZmluZSBTVFBfUAkweDA1Ci0jZGVmaW5lIEVQU19QCTB4MDQKLSNkZWZpbmUgUEVOX1AJMHgwMwotI2RlZmluZSBTVEJfUAkweDAyCi0jZGVmaW5lIFdMU19QMQkweDAxCi0jZGVmaW5lIFdMU19QMAkweDAwCi0KLS8qIFVBUlRfTUNSIFJlZ2lzdGVyICovCi0jZGVmaW5lIExPT1BfRU5BCTB4MTAKLSNkZWZpbmUgTE9PUF9FTkFfUAkweDA0Ci0KLS8qIFVBUlRfTFNSIFJlZ2lzdGVyICovCi0jZGVmaW5lIFRFTVQJMHg0MAotI2RlZmluZSBUSFJFCTB4MjAKLSNkZWZpbmUgQkkJMHgxMAotI2RlZmluZSBGRQkweDA4Ci0jZGVmaW5lIFBFCTB4MDQKLSNkZWZpbmUgT0UJMHgwMgotI2RlZmluZSBEUgkweDAxCi0KLSNkZWZpbmUgVEVNUF9QCTB4MDYKLSNkZWZpbmUgVEhSRV9QCTB4MDUKLSNkZWZpbmUgQklfUAkweDA0Ci0jZGVmaW5lIEZFX1AJMHgwMwotI2RlZmluZSBQRV9QCTB4MDIKLSNkZWZpbmUgT0VfUAkweDAxCi0jZGVmaW5lIERSX1AJMHgwMAotCi0vKiBVQVJUX0lFUiBSZWdpc3RlciAqLwotI2RlZmluZSBFTFNJCTB4MDQKLSNkZWZpbmUgRVRCRUkJMHgwMgotI2RlZmluZSBFUkJGSQkweDAxCi0KLSNkZWZpbmUgRUxTSV9QCTB4MDIKLSNkZWZpbmUgRVRCRUlfUAkweDAxCi0jZGVmaW5lIEVSQkZJX1AJMHgwMAotCi0vKiBVQVJUX0lJUiBSZWdpc3RlciAqLwotI2RlZmluZSBTVEFUVVMoeCkJKCh4IDw8IDEpICYgMHgwNikKLSNkZWZpbmUgTklOVAkJMHgwMQotI2RlZmluZSBTVEFUVVNfUDEJMHgwMgotI2RlZmluZSBTVEFUVVNfUDAJMHgwMQotI2RlZmluZSBOSU5UX1AJCTB4MDAKLSNkZWZpbmUgSUlSX1RYX1JFQURZICAgIDB4MDIJLyogVUFSVF9USFIgZW1wdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSUlSX1JYX1JFQURZICAgIDB4MDQJLyogUmVjZWl2ZSBkYXRhIHJlYWR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSUlSX0xJTkVfQ0hBTkdFIDB4MDYJLyogUmVjZWl2ZSBsaW5lIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSUlSX1NUQVRVUwkweDA2Ci0KLS8qIFVBUlRfR0NUTCBSZWdpc3RlciAqLwotI2RlZmluZSBGRkUJMHgyMAotI2RlZmluZSBGUEUJMHgxMAotI2RlZmluZSBSUE9MQwkweDA4Ci0jZGVmaW5lIFRQT0xDCTB4MDQKLSNkZWZpbmUgSVJFTgkweDAyCi0jZGVmaW5lIFVDRU4JMHgwMQotCi0jZGVmaW5lIEZGRV9QCTB4MDUKLSNkZWZpbmUgRlBFX1AJMHgwNAotI2RlZmluZSBSUE9MQ19QCTB4MDMKLSNkZWZpbmUgVFBPTENfUAkweDAyCi0jZGVmaW5lIElSRU5fUAkweDAxCi0jZGVmaW5lIFVDRU5fUAkweDAwCi0KIC8qICAqKioqKioqKiogIFBBUkFMTEVMIFBFUklQSEVSQUwgSU5URVJGQUNFIChQUEkpIE1BU0tTICoqKioqKioqKioqKioqKiogICAqLwogCiAvKiAgUFBJX0NPTlRST0wgTWFza3MgICAgICAgICAqLwpAQCAtMTIzMCw0NCArMTA5MCw2IEBACiAjZGVmaW5lIEVSUl9UWVBfUDAJCTB4MEUKICNkZWZpbmUgRVJSX1RZUF9QMQkJMHgwRgogCi0vKi8gKioqKioqKioqKioqKioqKioqICAgUFJPR1JBTU1BQkxFIEZMQUcgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKiAqLwotCi0vKiAgR2VuZXJhbCBQdXJwb3NlIElPICgweEZGQzAwNzAwIC0gMHhGRkMwMDdGRikgIE1hc2tzICovCi0jZGVmaW5lIFBGMCAgICAgICAgIDB4MDAwMQotI2RlZmluZSBQRjEgICAgICAgICAweDAwMDIKLSNkZWZpbmUgUEYyICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIFBGMyAgICAgICAgIDB4MDAwOAotI2RlZmluZSBQRjQgICAgICAgICAweDAwMTAKLSNkZWZpbmUgUEY1ICAgICAgICAgMHgwMDIwCi0jZGVmaW5lIFBGNiAgICAgICAgIDB4MDA0MAotI2RlZmluZSBQRjcgICAgICAgICAweDAwODAKLSNkZWZpbmUgUEY4ICAgICAgICAgMHgwMTAwCi0jZGVmaW5lIFBGOSAgICAgICAgIDB4MDIwMAotI2RlZmluZSBQRjEwICAgICAgICAweDA0MDAKLSNkZWZpbmUgUEYxMSAgICAgICAgMHgwODAwCi0jZGVmaW5lIFBGMTIgICAgICAgIDB4MTAwMAotI2RlZmluZSBQRjEzICAgICAgICAweDIwMDAKLSNkZWZpbmUgUEYxNCAgICAgICAgMHg0MDAwCi0jZGVmaW5lIFBGMTUgICAgICAgIDB4ODAwMAotCi0vKiAgR2VuZXJhbCBQdXJwb3NlIElPICgweEZGQzAwNzAwIC0gMHhGRkMwMDdGRikgIEJJVCBQT1NJVElPTlMgKi8KLSNkZWZpbmUgUEYwX1AgICAgICAgICAwCi0jZGVmaW5lIFBGMV9QICAgICAgICAgMQotI2RlZmluZSBQRjJfUCAgICAgICAgIDIKLSNkZWZpbmUgUEYzX1AgICAgICAgICAzCi0jZGVmaW5lIFBGNF9QICAgICAgICAgNAotI2RlZmluZSBQRjVfUCAgICAgICAgIDUKLSNkZWZpbmUgUEY2X1AgICAgICAgICA2Ci0jZGVmaW5lIFBGN19QICAgICAgICAgNwotI2RlZmluZSBQRjhfUCAgICAgICAgIDgKLSNkZWZpbmUgUEY5X1AgICAgICAgICA5Ci0jZGVmaW5lIFBGMTBfUCAgICAgICAgMTAKLSNkZWZpbmUgUEYxMV9QICAgICAgICAxMQotI2RlZmluZSBQRjEyX1AgICAgICAgIDEyCi0jZGVmaW5lIFBGMTNfUCAgICAgICAgMTMKLSNkZWZpbmUgUEYxNF9QICAgICAgICAxNAotI2RlZmluZSBQRjE1X1AgICAgICAgIDE1Ci0KIC8qICoqKioqKioqKioqKioqKioqKioqKiAgQVNZTkNIUk9OT1VTIE1FTU9SWSBDT05UUk9MTEVSIE1BU0tTICAqKioqKioqKioqKioqICovCiAKIC8qIEFNR0NUTCBNYXNrcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCA0ZjhhYTVkLi41N2Q1ZWFiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtNjIsNCArNjIsNiBAQAogI2RlZmluZSBQT1JUX0ZJTzEgR1BJT18xNgogI2RlZmluZSBQT1JUX0ZJTzIgR1BJT18zMgogCisjaW5jbHVkZSA8bWFjaC1jb21tb24vcG9ydHMtZi5oPgorCiAjZW5kaWYgLyogX01BQ0hfR1BJT19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9tZW1fbWFwLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL21lbV9tYXAuaAppbmRleCA1Yjk2ZWE1Li40Y2M5MTk5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL21lbV9tYXAuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL21lbV9tYXAuaApAQCAtMTA2LDcgKzEwNiw3IEBACiAjZGVmaW5lIENPUkVBX0wxX1NDUkFUQ0hfU1RBUlQJMHhGRkIwMDAwMAogI2RlZmluZSBDT1JFQl9MMV9TQ1JBVENIX1NUQVJUCTB4RkY3MDAwMDAKIAotI2lmZGVmIF9fQVNTRU1CTFlfXworI2lmZGVmIENPTkZJR19TTVAKIAogLyoKICAqIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGJvdGggcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBQREEgZm9yIHRoZQpAQCAtMTIxLDggKzEyMSw3IEBACiAgKiBpcyBhbGxvd2VkIHRvIHVzZSB0aGUgc3BlY2lmaWVkIERyZWcgZm9yIGRldGVybWluaW5nIHRoZSBQREEKICAqIGFkZHJlc3MgdG8gYmUgcmV0dXJuZWQgaW50byBQcmVnLgogICovCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBHRVRfUERBX1NBRkUocHJlZykJCVwKKyMgZGVmaW5lIEdFVF9QREFfU0FGRShwcmVnKQkJXAogCXByZWcubCA9IGxvKERTUElEKTsJCVwKIAlwcmVnLmggPSBoaShEU1BJRCk7CQlcCiAJcHJlZyA9IFtwcmVnXTsJCQlcCkBAIC0xNTgsNyArMTU3LDcgQEAKIAlwcmVnID0gW3ByZWddOwkJCVwKIDQ6CiAKLSNkZWZpbmUgR0VUX1BEQShwcmVnLCBkcmVnKQkJXAorIyBkZWZpbmUgR0VUX1BEQShwcmVnLCBkcmVnKQkJXAogCXByZWcubCA9IGxvKERTUElEKTsJCVwKIAlwcmVnLmggPSBoaShEU1BJRCk7CQlcCiAJZHJlZyA9IFtwcmVnXTsJCQlcCkBAIC0xNjksMTMgKzE2OCwxNyBAQAogCXByZWcgPSBbcHJlZ107CQkJXAogMToJCQkJCVwKIAotI2RlZmluZSBHRVRfQ1BVSUQocHJlZywgZHJlZykJCVwKKyMgZGVmaW5lIEdFVF9DUFVJRChwcmVnLCBkcmVnKQkJXAogCXByZWcubCA9IGxvKERTUElEKTsJCVwKIAlwcmVnLmggPSBoaShEU1BJRCk7CQlcCiAJZHJlZyA9IFtwcmVnXTsJCQlcCiAJZHJlZyA9IFJPVCBkcmVnIEJZIC0xOwkJXAogCWRyZWcgPSBDQzsKIAorIyBpZm5kZWYgX19BU1NFTUJMWV9fCisKKyMgIGluY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9sMV9zY3JhdGNoX3N0YXJ0X2NwdShpbnQgY3B1KQogewogCXJldHVybiBjcHUgPyBDT1JFQl9MMV9TQ1JBVENIX1NUQVJUIDogQ09SRUFfTDFfU0NSQVRDSF9TVEFSVDsKQEAgLTIxMCw4ICsyMTMsNyBAQAogCXJldHVybiBnZXRfbDFfZGF0YV9iX3N0YXJ0X2NwdShibGFja2Zpbl9jb3JlX2lkKCkpOwogfQogCisjIGVuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvcGxsLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3BsbC5oCmluZGV4IGYyYjFmYmQuLjc5NzdkYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvcGxsLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9wbGwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA1LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpAQCAtNyw1NyArNyw0OCBAQAogI2lmbmRlZiBfTUFDSF9QTExfSAogI2RlZmluZSBfTUFDSF9QTExfSAogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaWZkZWYgQ09ORklHX1NNUAorCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjaW5jbHVkZSA8YXNtL2lycWZsYWdzLmg+CisjaW5jbHVkZSA8bWFjaC9pcnEuaD4KIAotLyogV3JpdGluZyB0byBQTExfQ1RMIGluaXRpYXRlcyBhIFBMTCByZWxvY2sgc2VxdWVuY2UuICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGJmaW5fd3JpdGVfUExMX0NUTCh1bnNpZ25lZCBpbnQgdmFsKQorI2RlZmluZSBTVVBQTEVfMF9XQUtFVVAgKChJUlFfU1VQUExFXzAgLSAoSVJRX0NPUkVUTVIgKyAxKSkgJSAzMikKKworc3RhdGljIGlubGluZSB2b2lkCitiZmluX2l3cl9yZXN0b3JlKHVuc2lnbmVkIGxvbmcgaXdyMCwgdW5zaWduZWQgbG9uZyBpd3IxLCB1bnNpZ25lZCBsb25nIGl3cjIpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgaXdyMCwgaXdyMTsKKwl1bnNpZ25lZCBsb25nIFNJQ0FfU0lDQl9PRkYgPSAoKGJmaW5fcmVhZF9EU1BJRCgpICYgMHhmZikgPyAweDEwMDAgOiAwKTsKIAotCWlmICh2YWwgPT0gYmZpbl9yZWFkX1BMTF9DVEwoKSkKLQkJcmV0dXJuOworCWJmaW5fd3JpdGUzMihTSUNfSVdSMCArIFNJQ0FfU0lDQl9PRkYsIGl3cjApOworCWJmaW5fd3JpdGUzMihTSUNfSVdSMSArIFNJQ0FfU0lDQl9PRkYsIGl3cjEpOworfQorI2RlZmluZSBiZmluX2l3cl9yZXN0b3JlIGJmaW5faXdyX3Jlc3RvcmUKIAotCWZsYWdzID0gaGFyZF9sb2NhbF9pcnFfc2F2ZSgpOwotCS8qIEVuYWJsZSB0aGUgUExMIFdha2V1cCBiaXQgaW4gU0lDIElXUiAqLwotCWl3cjAgPSBiZmluX3JlYWQzMihTSUNBX0lXUjApOwotCWl3cjEgPSBiZmluX3JlYWQzMihTSUNBX0lXUjEpOwotCS8qIE9ubHkgYWxsb3cgUFBMIFdha2V1cCkgKi8KLQliZmluX3dyaXRlMzIoU0lDQV9JV1IwLCBJV1JfRU5BQkxFKDApKTsKLQliZmluX3dyaXRlMzIoU0lDQV9JV1IxLCAwKTsKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZpbl9pd3Jfc2F2ZSh1bnNpZ25lZCBsb25nIG5pd3IwLCB1bnNpZ25lZCBsb25nIG5pd3IxLCB1bnNpZ25lZCBsb25nIG5pd3IyLAorICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICppd3IwLCB1bnNpZ25lZCBsb25nICppd3IxLCB1bnNpZ25lZCBsb25nICppd3IyKQoreworCXVuc2lnbmVkIGxvbmcgU0lDQV9TSUNCX09GRiA9ICgoYmZpbl9yZWFkX0RTUElEKCkgJiAweGZmKSA/IDB4MTAwMCA6IDApOwogCi0JYmZpbl93cml0ZTE2KFBMTF9DVEwsIHZhbCk7Ci0JU1NZTkMoKTsKLQlhc20oIklETEU7Iik7CisJKml3cjAgPSBiZmluX3JlYWQzMihTSUNfSVdSMCArIFNJQ0FfU0lDQl9PRkYpOworCSppd3IxID0gYmZpbl9yZWFkMzIoU0lDX0lXUjEgKyBTSUNBX1NJQ0JfT0ZGKTsKKwliZmluX2l3cl9yZXN0b3JlKG5pd3IwLCBuaXdyMSwgbml3cjIpOworfQorI2RlZmluZSBiZmluX2l3cl9zYXZlIGJmaW5faXdyX3NhdmUKIAotCWJmaW5fd3JpdGUzMihTSUNBX0lXUjAsIGl3cjApOwotCWJmaW5fd3JpdGUzMihTSUNBX0lXUjEsIGl3cjEpOwotCWhhcmRfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworc3RhdGljIGlubGluZSB2b2lkCitiZmluX2l3cl9zZXRfc3VwMCh1bnNpZ25lZCBsb25nICppd3IwLCB1bnNpZ25lZCBsb25nICppd3IxLCB1bnNpZ25lZCBsb25nICppd3IyKQoreworCWJmaW5faXdyX3NhdmUoMCwgSVdSX0VOQUJMRShTVVBQTEVfMF9XQUtFVVApLCAwLCBpd3IwLCBpd3IxLCBpd3IyKTsKIH0KIAotLyogV3JpdGluZyB0byBWUl9DVEwgaW5pdGlhdGVzIGEgUExMIHJlbG9jayBzZXF1ZW5jZS4gKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYmZpbl93cml0ZV9WUl9DVEwodW5zaWduZWQgaW50IHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpd3IwLCBpd3IxOworI2VuZGlmCiAKLQlpZiAodmFsID09IGJmaW5fcmVhZF9WUl9DVEwoKSkKLQkJcmV0dXJuOworI2VuZGlmCiAKLQlmbGFncyA9IGhhcmRfbG9jYWxfaXJxX3NhdmUoKTsKLQkvKiBFbmFibGUgdGhlIFBMTCBXYWtldXAgYml0IGluIFNJQyBJV1IgKi8KLQlpd3IwID0gYmZpbl9yZWFkMzIoU0lDQV9JV1IwKTsKLQlpd3IxID0gYmZpbl9yZWFkMzIoU0lDQV9JV1IxKTsKLQkvKiBPbmx5IGFsbG93IFBQTCBXYWtldXApICovCi0JYmZpbl93cml0ZTMyKFNJQ0FfSVdSMCwgSVdSX0VOQUJMRSgwKSk7Ci0JYmZpbl93cml0ZTMyKFNJQ0FfSVdSMSwgMCk7CisjaW5jbHVkZSA8bWFjaC1jb21tb24vcGxsLmg+CiAKLQliZmluX3dyaXRlMTYoVlJfQ1RMLCB2YWwpOwotCVNTWU5DKCk7Ci0JYXNtKCJJRExFOyIpOwotCi0JYmZpbl93cml0ZTMyKFNJQ0FfSVdSMCwgaXdyMCk7Ci0JYmZpbl93cml0ZTMyKFNJQ0FfSVdSMSwgaXdyMSk7Ci0JaGFyZF9sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLSNlbmRpZiAvKiBfTUFDSF9QTExfSCAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3NtcC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9zbXAuaAppbmRleCAyYzhjNTE0Li4zNDZjNjA1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3NtcC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvc21wLmgKQEAgLTcsNiArNyw4IEBACiAjaWZuZGVmIF9NQUNIX0JGNTYxX1NNUAogI2RlZmluZSBfTUFDSF9CRjU2MV9TTVAKIAorLyogVGhpcyBoZWFkZXIgaGFzIHRvIHN0YW5kIGFsb25lIHRvIGF2b2lkIGNpcmN1bGFyIGRlcHMgKi8KKwogc3RydWN0IHRhc2tfc3RydWN0OwogCiB2b2lkIHBsYXRmb3JtX2luaXRfY3B1cyh2b2lkKTsKQEAgLTE3LDEzICsxOSwxMyBAQAogCiB2b2lkIHBsYXRmb3JtX3NlY29uZGFyeV9pbml0KHVuc2lnbmVkIGludCBjcHUpOwogCi12b2lkIHBsYXRmb3JtX3JlcXVlc3RfaXBpKGludCAoKmhhbmRsZXIpKGludCwgdm9pZCAqKSk7Cit2b2lkIHBsYXRmb3JtX3JlcXVlc3RfaXBpKGludCBpcnEsIC8qaXJxX2hhbmRsZXJfdCovIHZvaWQgKmhhbmRsZXIpOwogCi12b2lkIHBsYXRmb3JtX3NlbmRfaXBpKGNwdW1hc2tfdCBjYWxsbWFwKTsKK3ZvaWQgcGxhdGZvcm1fc2VuZF9pcGkoY3B1bWFza190IGNhbGxtYXAsIGludCBpcnEpOwogCi12b2lkIHBsYXRmb3JtX3NlbmRfaXBpX2NwdSh1bnNpZ25lZCBpbnQgY3B1KTsKK3ZvaWQgcGxhdGZvcm1fc2VuZF9pcGlfY3B1KHVuc2lnbmVkIGludCBjcHUsIGludCBpcnEpOwogCi12b2lkIHBsYXRmb3JtX2NsZWFyX2lwaSh1bnNpZ25lZCBpbnQgY3B1KTsKK3ZvaWQgcGxhdGZvcm1fY2xlYXJfaXBpKHVuc2lnbmVkIGludCBjcHUsIGludCBpcnEpOwogCiB2b2lkIGJmaW5fbG9jYWxfdGltZXJfc2V0dXAodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYwppbmRleCBmNTQwZWQxLi4xMDc0YTdlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc21wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NtcC5jCkBAIC04NiwxMiArODYsMTIgQEAKIAogCXNwaW5fbG9jaygmYm9vdF9sb2NrKTsKIAotCWlmICgoYmZpbl9yZWFkX1NJQ19TWVNDUigpICYgQ09SRUJfU1JBTV9JTklUKSA9PSAwKSB7CisJaWYgKChiZmluX3JlYWRfU1lTQ1IoKSAmIENPUkVCX1NSQU1fSU5JVCkgPT0gMCkgewogCQkvKiBDb3JlQiBhbHJlYWR5IHJ1bm5pbmcsIHNlbmRpbmcgaXBpIHRvIHdha2V1cCBpdCAqLwogCQlwbGF0Zm9ybV9zZW5kX2lwaV9jcHUoY3B1LCBJUlFfU1VQUExFXzApOwogCX0gZWxzZSB7CiAJCS8qIEtpY2sgQ29yZUIsIHdoaWNoIHNob3VsZCBzdGFydCBleGVjdXRpb24gZnJvbSBDT1JFX1NSQU1fQkFTRS4gKi8KLQkJYmZpbl93cml0ZV9TSUNfU1lTQ1IoYmZpbl9yZWFkX1NJQ19TWVNDUigpICYgfkNPUkVCX1NSQU1fSU5JVCk7CisJCWJmaW5fd3JpdGVfU1lTQ1IoYmZpbl9yZWFkX1NZU0NSKCkgJiB+Q09SRUJfU1JBTV9JTklUKTsKIAkJU1NZTkMoKTsKIAl9CiAKQEAgLTExMSw0MSArMTExLDQ2IEBACiAJCXBhbmljKCJDUFUldTogcHJvY2Vzc29yIGZhaWxlZCB0byBib290XG4iLCBjcHUpOwogfQogCi12b2lkIF9faW5pdCBwbGF0Zm9ybV9yZXF1ZXN0X2lwaShpcnFfaGFuZGxlcl90IGhhbmRsZXIpCitzdGF0aWMgY29uc3QgY2hhciBzdXBwbGUwW10gPSAiSVJRX1NVUFBMRV8wIjsKK3N0YXRpYyBjb25zdCBjaGFyIHN1cHBsZTFbXSA9ICJJUlFfU1VQUExFXzEiOwordm9pZCBfX2luaXQgcGxhdGZvcm1fcmVxdWVzdF9pcGkoaW50IGlycSwgdm9pZCAqaGFuZGxlcikKIHsKIAlpbnQgcmV0OworCWNvbnN0IGNoYXIgKm5hbWUgPSAoaXJxID09IElSUV9TVVBQTEVfMCkgPyBzdXBwbGUwIDogc3VwcGxlMTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKElSUV9TVVBQTEVfMCwgaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKLQkJCSAgIlN1cHBsZW1lbnRhbCBJbnRlcnJ1cHQwIiwgaGFuZGxlcik7CisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBoYW5kbGVyLCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsIG5hbWUsIGhhbmRsZXIpOwogCWlmIChyZXQpCi0JCXBhbmljKCJDYW5ub3QgcmVxdWVzdCBzdXBwbGVtZW50YWwgaW50ZXJydXB0IDAgZm9yIElQSSBzZXJ2aWNlIik7CisJCXBhbmljKCJDYW5ub3QgcmVxdWVzdCAlcyBmb3IgSVBJIHNlcnZpY2UiLCBuYW1lKTsKIH0KIAotdm9pZCBwbGF0Zm9ybV9zZW5kX2lwaShjcHVtYXNrX3QgY2FsbG1hcCkKK3ZvaWQgcGxhdGZvcm1fc2VuZF9pcGkoY3B1bWFza190IGNhbGxtYXAsIGludCBpcnEpCiB7CiAJdW5zaWduZWQgaW50IGNwdTsKKwlpbnQgb2Zmc2V0ID0gKGlycSA9PSBJUlFfU1VQUExFXzApID8gNiA6IDg7CiAKIAlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIGNhbGxtYXApIHsKIAkJQlVHX09OKGNwdSA+PSAyKTsKIAkJU1NZTkMoKTsKLQkJYmZpbl93cml0ZV9TSUNCX1NZU0NSKGJmaW5fcmVhZF9TSUNCX1NZU0NSKCkgfCAoMSA8PCAoNiArIGNwdSkpKTsKKwkJYmZpbl93cml0ZV9TSUNCX1NZU0NSKGJmaW5fcmVhZF9TSUNCX1NZU0NSKCkgfCAoMSA8PCAob2Zmc2V0ICsgY3B1KSkpOwogCQlTU1lOQygpOwogCX0KIH0KIAotdm9pZCBwbGF0Zm9ybV9zZW5kX2lwaV9jcHUodW5zaWduZWQgaW50IGNwdSkKK3ZvaWQgcGxhdGZvcm1fc2VuZF9pcGlfY3B1KHVuc2lnbmVkIGludCBjcHUsIGludCBpcnEpCiB7CisJaW50IG9mZnNldCA9IChpcnEgPT0gSVJRX1NVUFBMRV8wKSA/IDYgOiA4OwogCUJVR19PTihjcHUgPj0gMik7CiAJU1NZTkMoKTsKLQliZmluX3dyaXRlX1NJQ0JfU1lTQ1IoYmZpbl9yZWFkX1NJQ0JfU1lTQ1IoKSB8ICgxIDw8ICg2ICsgY3B1KSkpOworCWJmaW5fd3JpdGVfU0lDQl9TWVNDUihiZmluX3JlYWRfU0lDQl9TWVNDUigpIHwgKDEgPDwgKG9mZnNldCArIGNwdSkpKTsKIAlTU1lOQygpOwogfQogCi12b2lkIHBsYXRmb3JtX2NsZWFyX2lwaSh1bnNpZ25lZCBpbnQgY3B1KQordm9pZCBwbGF0Zm9ybV9jbGVhcl9pcGkodW5zaWduZWQgaW50IGNwdSwgaW50IGlycSkKIHsKKwlpbnQgb2Zmc2V0ID0gKGlycSA9PSBJUlFfU1VQUExFXzApID8gMTAgOiAxMjsKIAlCVUdfT04oY3B1ID49IDIpOwogCVNTWU5DKCk7Ci0JYmZpbl93cml0ZV9TSUNCX1NZU0NSKGJmaW5fcmVhZF9TSUNCX1NZU0NSKCkgfCAoMSA8PCAoMTAgKyBjcHUpKSk7CisJYmZpbl93cml0ZV9TSUNCX1NZU0NSKGJmaW5fcmVhZF9TSUNCX1NZU0NSKCkgfCAoMSA8PCAob2Zmc2V0ICsgY3B1KSkpOwogCVNTWU5DKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwppbmRleCAyY2E5MTVlLi5iYzA4Yzk4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCkBAIC02MTUsNyArNjE1LDcgQEAKICNpZmRlZiBDT05GSUdfSVBJUEUKIAlyMCA9IHNwOwogCVNQICs9IC0xMjsKLQljYWxsIF9fX2lwaXBlX3N5c2NhbGxfcm9vdDsKKwlwc2V1ZG9fbG9uZ19jYWxsIF9fX2lwaXBlX3N5c2NhbGxfcm9vdCwgcDA7CiAJU1AgKz0gMTI7CiAJY2MgPSByMCA9PSAxOwogCWlmIGNjIGp1bXAgLkxzeXNjYWxsX3JlYWxseV9leGl0OwpAQCAtNjkyLDcgKzY5Miw3IEBACiAJWy0tc3BdID0gcmV0aTsKIAlTUCArPSA0OyAvKiBkb24ndCBtZXJnZSB3aXRoIG5leHQgaW5zbiB0byBrZWVwIHRoZSBwYXR0ZXJuIG9idmlvdXMgKi8KIAlTUCArPSAtMTI7Ci0JY2FsbCBfX19pcGlwZV9zeW5jX3Jvb3Q7CisJcHNldWRvX2xvbmdfY2FsbCBfX19pcGlwZV9zeW5jX3Jvb3QsIHA0OwogCVNQICs9IDEyOwogCWp1bXAgLkxyZXN1bWVfdXNlcnNwYWNlXzE7CiAuTHN5c2NhbGxfbm9faXJxc3luYzoKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKaW5kZXggZGE3ZTNjNi4uYTYwNGYxOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKQEAgLTg2Niw3ICs4NjYsNiBAQAogCXUzMiBwaW50Yml0ID0gUElOVF9CSVQocGludF92YWwpOwogCXUzMiBiYW5rID0gUElOVF8yX0JBTksocGludF92YWwpOwogCi0JcGludFtiYW5rXS0+cmVxdWVzdCA9IHBpbnRiaXQ7CiAJcGludFtiYW5rXS0+bWFza19zZXQgPSBwaW50Yml0OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMKaW5kZXggODA4ODRiMS4uM2M2NDhhMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYwpAQCAtMjMsOSArMjMsNiBAQAogCiB2b2lkIGJmaW5fcG1fc3VzcGVuZF9zdGFuZGJ5X2VudGVyKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWZsYWdzID0gaGFyZF9sb2NhbF9pcnFfc2F2ZSgpOwogCWJmaW5fcG1fc3RhbmRieV9zZXR1cCgpOwogCiAjaWZkZWYgQ09ORklHX1BNX0JGSU5fU0xFRVBfREVFUEVSCkBAIC01NSw4ICs1Miw2IEBACiAjZWxzZQogCWJmaW5fd3JpdGVfU0lDX0lXUihJV1JfRElTQUJMRV9BTEwpOwogI2VuZGlmCi0KLQloYXJkX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogaW50IGJmNTN4X3N1c3BlbmRfbDFfbWVtKHVuc2lnbmVkIGNoYXIgKm1lbXB0cikKQEAgLTEyNyw3ICsxMjIsNiBAQAogCiBpbnQgYmZpbl9wbV9zdXNwZW5kX21lbV9lbnRlcih2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHdha2V1cCwgcmV0OwogCiAJdW5zaWduZWQgY2hhciAqbWVtcHRyID0ga21hbGxvYyhMMV9DT0RFX0xFTkdUSCArIEwxX0RBVEFfQV9MRU5HVEgKQEAgLTE0OSwxMiArMTQzLDkgQEAKIAl3YWtldXAgfD0gR1BXRTsKICNlbmRpZgogCi0JZmxhZ3MgPSBoYXJkX2xvY2FsX2lycV9zYXZlKCk7Ci0KIAlyZXQgPSBibGFja2Zpbl9kbWFfc3VzcGVuZCgpOwogCiAJaWYgKHJldCkgewotCQloYXJkX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJa2ZyZWUobWVtcHRyKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xNzgsNyArMTY5LDYgQEAKIAliZmluX2dwaW9fcG1faGliZXJuYXRlX3Jlc3RvcmUoKTsKIAlibGFja2Zpbl9kbWFfcmVzdW1lKCk7CiAKLQloYXJkX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlrZnJlZShtZW1wdHIpOwogCiAJcmV0dXJuIDA7CkBAIC0yMzMsNyArMjIzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGJmaW5fcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBiZmluX3BtX29wcyA9IHsKIAkuZW50ZXIgPSBiZmluX3BtX2VudGVyLAogCS52YWxpZAk9IGJmaW5fcG1fdmFsaWQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMKaW5kZXggYTE3MTA3YS4uOWYyNTE0MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC00MywxMiArNDQsNiBAQAogCSppbml0X3NhdmVkX3NlcXN0YXRfY29yZWIsICppbml0X3NhdmVkX2ljcGxiX2ZhdWx0X2FkZHJfY29yZWIsCiAJKmluaXRfc2F2ZWRfZGNwbGJfZmF1bHRfYWRkcl9jb3JlYjsKIAotY3B1bWFza190IGNwdV9wb3NzaWJsZV9tYXA7Ci1FWFBPUlRfU1lNQk9MKGNwdV9wb3NzaWJsZV9tYXApOwotCi1jcHVtYXNrX3QgY3B1X29ubGluZV9tYXA7Ci1FWFBPUlRfU1lNQk9MKGNwdV9vbmxpbmVfbWFwKTsKLQogI2RlZmluZSBCRklOX0lQSV9SRVNDSEVEVUxFICAgMAogI2RlZmluZSBCRklOX0lQSV9DQUxMX0ZVTkMgICAgMQogI2RlZmluZSBCRklOX0lQSV9DUFVfU1RPUCAgICAgMgpAQCAtNjUsOCArNjAsNyBAQAogCXZvaWQgKCpmdW5jKSh2b2lkICppbmZvKTsKIAl2b2lkICppbmZvOwogCWludCB3YWl0OwotCWNwdW1hc2tfdCBwZW5kaW5nOwotCWNwdW1hc2tfdCB3YWl0bWFzazsKKwljcHVtYXNrX3QgKndhaXRtYXNrOwogfTsKIAogc3RhdGljIHN0cnVjdCBibGFja2Zpbl9mbHVzaF9kYXRhIHNtcF9mbHVzaF9kYXRhOwpAQCAtNzQsMTUgKzY4LDE5IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN0b3BfbG9jayk7CiAKIHN0cnVjdCBpcGlfbWVzc2FnZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXVuc2lnbmVkIGxvbmcgdHlwZTsKIAlzdHJ1Y3Qgc21wX2NhbGxfc3RydWN0IGNhbGxfc3RydWN0OwogfTsKIAorLyogQSBtYWdpYyBudW1iZXIgLSBzdHJlc3MgdGVzdCBzaG93cyB0aGlzIGlzIHNhZmUgZm9yIGNvbW1vbiBjYXNlcyAqLworI2RlZmluZSBCRklOX0lQSV9NU0dRX0xFTiA1CisKKy8qIFNpbXBsZSBGSUZPIGJ1ZmZlciwgb3ZlcmZsb3cgbGVhZHMgdG8gcGFuaWMgKi8KIHN0cnVjdCBpcGlfbWVzc2FnZV9xdWV1ZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBoZWFkOwogCXNwaW5sb2NrX3QgbG9jazsKIAl1bnNpZ25lZCBsb25nIGNvdW50OworCXVuc2lnbmVkIGxvbmcgaGVhZDsgLyogaGVhZCBvZiB0aGUgcXVldWUgKi8KKwlzdHJ1Y3QgaXBpX21lc3NhZ2UgaXBpX21lc3NhZ2VbQkZJTl9JUElfTVNHUV9MRU5dOwogfTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBpcGlfbWVzc2FnZV9xdWV1ZSwgaXBpX21zZ19xdWV1ZSk7CkBAIC0xMjEsNyArMTE5LDYgQEAKIAlmdW5jID0gbXNnLT5jYWxsX3N0cnVjdC5mdW5jOwogCWluZm8gPSBtc2ctPmNhbGxfc3RydWN0LmluZm87CiAJd2FpdCA9IG1zZy0+Y2FsbF9zdHJ1Y3Qud2FpdDsKLQljcHVfY2xlYXIoY3B1LCBtc2ctPmNhbGxfc3RydWN0LnBlbmRpbmcpOwogCWZ1bmMoaW5mbyk7CiAJaWYgKHdhaXQpIHsKICNpZmRlZiBfX0FSQ0hfU1lOQ19DT1JFX0RDQUNIRQpAQCAtMTMyLDUxICsxMjksNTcgQEAKIAkJICovCiAJCXJlc3luY19jb3JlX2RjYWNoZSgpOwogI2VuZGlmCi0JCWNwdV9jbGVhcihjcHUsIG1zZy0+Y2FsbF9zdHJ1Y3Qud2FpdG1hc2spOwotCX0gZWxzZQotCQlrZnJlZShtc2cpOworCQljcHVfY2xlYXIoY3B1LCAqbXNnLT5jYWxsX3N0cnVjdC53YWl0bWFzayk7CisJfQogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgaXBpX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQorLyogVXNlIElSUV9TVVBQTEVfMCB0byByZXF1ZXN0IHJlc2NoZWR1bGUuCisgKiBXaGVuIHJldHVybmluZyBmcm9tIGludGVycnVwdCB0byB1c2VyIHNwYWNlLAorICogdGhlcmUgaXMgY2hhbmNlIHRvIHJlc2NoZWR1bGUgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpcGlfaGFuZGxlcl9pbnQwKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJcGxhdGZvcm1fY2xlYXJfaXBpKGNwdSwgSVJRX1NVUFBMRV8wKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpcGlfaGFuZGxlcl9pbnQxKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIHsKIAlzdHJ1Y3QgaXBpX21lc3NhZ2UgKm1zZzsKIAlzdHJ1Y3QgaXBpX21lc3NhZ2VfcXVldWUgKm1zZ19xdWV1ZTsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlwbGF0Zm9ybV9jbGVhcl9pcGkoY3B1KTsKKwlwbGF0Zm9ybV9jbGVhcl9pcGkoY3B1LCBJUlFfU1VQUExFXzEpOwogCiAJbXNnX3F1ZXVlID0gJl9fZ2V0X2NwdV92YXIoaXBpX21zZ19xdWV1ZSk7Ci0JbXNnX3F1ZXVlLT5jb3VudCsrOwogCi0Jc3Bpbl9sb2NrKCZtc2dfcXVldWUtPmxvY2spOwotCXdoaWxlICghbGlzdF9lbXB0eSgmbXNnX3F1ZXVlLT5oZWFkKSkgewotCQltc2cgPSBsaXN0X2VudHJ5KG1zZ19xdWV1ZS0+aGVhZC5uZXh0LCB0eXBlb2YoKm1zZyksIGxpc3QpOwotCQlsaXN0X2RlbCgmbXNnLT5saXN0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXNnX3F1ZXVlLT5sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAobXNnX3F1ZXVlLT5jb3VudCkgeworCQltc2cgPSAmbXNnX3F1ZXVlLT5pcGlfbWVzc2FnZVttc2dfcXVldWUtPmhlYWRdOwogCQlzd2l0Y2ggKG1zZy0+dHlwZSkgewotCQljYXNlIEJGSU5fSVBJX1JFU0NIRURVTEU6Ci0JCQkvKiBUaGF0J3MgdGhlIGVhc2llc3Qgb25lOyBsZWF2ZSBpdCB0bwotCQkJICogcmV0dXJuX2Zyb21faW50LiAqLwotCQkJa2ZyZWUobXNnKTsKLQkJCWJyZWFrOwogCQljYXNlIEJGSU5fSVBJX0NBTExfRlVOQzoKLQkJCXNwaW5fdW5sb2NrKCZtc2dfcXVldWUtPmxvY2spOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNnX3F1ZXVlLT5sb2NrLCBmbGFncyk7CiAJCQlpcGlfY2FsbF9mdW5jdGlvbihjcHUsIG1zZyk7Ci0JCQlzcGluX2xvY2soJm1zZ19xdWV1ZS0+bG9jayk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXNnX3F1ZXVlLT5sb2NrLCBmbGFncyk7CiAJCQlicmVhazsKIAkJY2FzZSBCRklOX0lQSV9DUFVfU1RPUDoKLQkJCXNwaW5fdW5sb2NrKCZtc2dfcXVldWUtPmxvY2spOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNnX3F1ZXVlLT5sb2NrLCBmbGFncyk7CiAJCQlpcGlfY3B1X3N0b3AoY3B1KTsKLQkJCXNwaW5fbG9jaygmbXNnX3F1ZXVlLT5sb2NrKTsKLQkJCWtmcmVlKG1zZyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXNnX3F1ZXVlLT5sb2NrLCBmbGFncyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX0NSSVQgIkNQVSV1OiBVbmtub3duIElQSSBtZXNzYWdlIDB4JWx4XG4iLAogCQkJICAgICAgIGNwdSwgbXNnLT50eXBlKTsKLQkJCWtmcmVlKG1zZyk7CiAJCQlicmVhazsKIAkJfQorCQltc2dfcXVldWUtPmhlYWQrKzsKKwkJbXNnX3F1ZXVlLT5oZWFkICU9IEJGSU5fSVBJX01TR1FfTEVOOworCQltc2dfcXVldWUtPmNvdW50LS07CiAJfQotCXNwaW5fdW5sb2NrKCZtc2dfcXVldWUtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zZ19xdWV1ZS0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMTg2LDQ4ICsxODksNDcgQEAKIAlzdHJ1Y3QgaXBpX21lc3NhZ2VfcXVldWUgKm1zZ19xdWV1ZTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCW1zZ19xdWV1ZSA9ICZwZXJfY3B1KGlwaV9tc2dfcXVldWUsIGNwdSk7Ci0JCUlOSVRfTElTVF9IRUFEKCZtc2dfcXVldWUtPmhlYWQpOwogCQlzcGluX2xvY2tfaW5pdCgmbXNnX3F1ZXVlLT5sb2NrKTsKIAkJbXNnX3F1ZXVlLT5jb3VudCA9IDA7CisJCW1zZ19xdWV1ZS0+aGVhZCA9IDA7CiAJfQogfQogCi1pbnQgc21wX2NhbGxfZnVuY3Rpb24odm9pZCAoKmZ1bmMpKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgd2FpdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfc2VuZF9tZXNzYWdlKGNwdW1hc2tfdCBjYWxsbWFwLCB1bnNpZ25lZCBsb25nIHR5cGUsCisJCQkJCXZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCB3YWl0KQogewogCXVuc2lnbmVkIGludCBjcHU7Ci0JY3B1bWFza190IGNhbGxtYXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaXBpX21lc3NhZ2VfcXVldWUgKm1zZ19xdWV1ZTsKIAlzdHJ1Y3QgaXBpX21lc3NhZ2UgKm1zZzsKLQotCWNhbGxtYXAgPSBjcHVfb25saW5lX21hcDsKLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjYWxsbWFwKTsKLQlpZiAoY3B1c19lbXB0eShjYWxsbWFwKSkKLQkJcmV0dXJuIDA7Ci0KLQltc2cgPSBrbWFsbG9jKHNpemVvZigqbXNnKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFtc2cpCi0JCXJldHVybiAtRU5PTUVNOwotCUlOSVRfTElTVF9IRUFEKCZtc2ctPmxpc3QpOwotCW1zZy0+Y2FsbF9zdHJ1Y3QuZnVuYyA9IGZ1bmM7Ci0JbXNnLT5jYWxsX3N0cnVjdC5pbmZvID0gaW5mbzsKLQltc2ctPmNhbGxfc3RydWN0LndhaXQgPSB3YWl0OwotCW1zZy0+Y2FsbF9zdHJ1Y3QucGVuZGluZyA9IGNhbGxtYXA7Ci0JbXNnLT5jYWxsX3N0cnVjdC53YWl0bWFzayA9IGNhbGxtYXA7Ci0JbXNnLT50eXBlID0gQkZJTl9JUElfQ0FMTF9GVU5DOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG5leHRfbXNnOworCWNwdW1hc2tfdCB3YWl0bWFzayA9IGNhbGxtYXA7IC8qIHdhaXRtYXNrIGlzIHNoYXJlZCBieSBhbGwgY3B1cyAqLwogCiAJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBjYWxsbWFwKSB7CiAJCW1zZ19xdWV1ZSA9ICZwZXJfY3B1KGlwaV9tc2dfcXVldWUsIGNwdSk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZtc2dfcXVldWUtPmxvY2ssIGZsYWdzKTsKLQkJbGlzdF9hZGRfdGFpbCgmbXNnLT5saXN0LCAmbXNnX3F1ZXVlLT5oZWFkKTsKKwkJaWYgKG1zZ19xdWV1ZS0+Y291bnQgPCBCRklOX0lQSV9NU0dRX0xFTikgeworCQkJbmV4dF9tc2cgPSAobXNnX3F1ZXVlLT5oZWFkICsgbXNnX3F1ZXVlLT5jb3VudCkKKwkJCQkJJSBCRklOX0lQSV9NU0dRX0xFTjsKKwkJCW1zZyA9ICZtc2dfcXVldWUtPmlwaV9tZXNzYWdlW25leHRfbXNnXTsKKwkJCW1zZy0+dHlwZSA9IHR5cGU7CisJCQlpZiAodHlwZSA9PSBCRklOX0lQSV9DQUxMX0ZVTkMpIHsKKwkJCQltc2ctPmNhbGxfc3RydWN0LmZ1bmMgPSBmdW5jOworCQkJCW1zZy0+Y2FsbF9zdHJ1Y3QuaW5mbyA9IGluZm87CisJCQkJbXNnLT5jYWxsX3N0cnVjdC53YWl0ID0gd2FpdDsKKwkJCQltc2ctPmNhbGxfc3RydWN0LndhaXRtYXNrID0gJndhaXRtYXNrOworCQkJfQorCQkJbXNnX3F1ZXVlLT5jb3VudCsrOworCQl9IGVsc2UKKwkJCXBhbmljKCJJUEkgbWVzc2FnZSBxdWV1ZSBvdmVyZmxvd1xuIik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zZ19xdWV1ZS0+bG9jaywgZmxhZ3MpOwotCQlwbGF0Zm9ybV9zZW5kX2lwaV9jcHUoY3B1KTsKKwkJcGxhdGZvcm1fc2VuZF9pcGlfY3B1KGNwdSwgSVJRX1NVUFBMRV8xKTsKIAl9CisKIAlpZiAod2FpdCkgewotCQl3aGlsZSAoIWNwdXNfZW1wdHkobXNnLT5jYWxsX3N0cnVjdC53YWl0bWFzaykpCisJCXdoaWxlICghY3B1c19lbXB0eSh3YWl0bWFzaykpCiAJCQlibGFja2Zpbl9kY2FjaGVfaW52YWxpZGF0ZV9yYW5nZSgKLQkJCQkodW5zaWduZWQgbG9uZykoJm1zZy0+Y2FsbF9zdHJ1Y3Qud2FpdG1hc2spLAotCQkJCSh1bnNpZ25lZCBsb25nKSgmbXNnLT5jYWxsX3N0cnVjdC53YWl0bWFzaykpOworCQkJCSh1bnNpZ25lZCBsb25nKSgmd2FpdG1hc2spLAorCQkJCSh1bnNpZ25lZCBsb25nKSgmd2FpdG1hc2spKTsKICNpZmRlZiBfX0FSQ0hfU1lOQ19DT1JFX0RDQUNIRQogCQkvKgogCQkgKiBJbnZhbGlkYXRlIEQgY2FjaGUgaW4gY2FzZSBzaGFyZWQgZGF0YSB3YXMgY2hhbmdlZCBieQpAQCAtMjM1LDggKzIzNywyMCBAQAogCQkgKi8KIAkJcmVzeW5jX2NvcmVfZGNhY2hlKCk7CiAjZW5kaWYKLQkJa2ZyZWUobXNnKTsKIAl9Cit9CisKK2ludCBzbXBfY2FsbF9mdW5jdGlvbih2b2lkICgqZnVuYykodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCB3YWl0KQoreworCWNwdW1hc2tfdCBjYWxsbWFwOworCisJY2FsbG1hcCA9IGNwdV9vbmxpbmVfbWFwOworCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNhbGxtYXApOworCWlmIChjcHVzX2VtcHR5KGNhbGxtYXApKQorCQlyZXR1cm4gMDsKKworCXNtcF9zZW5kX21lc3NhZ2UoY2FsbG1hcCwgQkZJTl9JUElfQ0FMTF9GVU5DLCBmdW5jLCBpbmZvLCB3YWl0KTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc21wX2NhbGxfZnVuY3Rpb24pOwpAQCAtMjQ2LDEwMCArMjYwLDM5IEBACiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IGNwdWlkOwogCWNwdW1hc2tfdCBjYWxsbWFwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGlwaV9tZXNzYWdlX3F1ZXVlICptc2dfcXVldWU7Ci0Jc3RydWN0IGlwaV9tZXNzYWdlICptc2c7CiAKIAlpZiAoY3B1X2lzX29mZmxpbmUoY3B1KSkKIAkJcmV0dXJuIDA7CiAJY3B1c19jbGVhcihjYWxsbWFwKTsKIAljcHVfc2V0KGNwdSwgY2FsbG1hcCk7CiAKLQltc2cgPSBrbWFsbG9jKHNpemVvZigqbXNnKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFtc2cpCi0JCXJldHVybiAtRU5PTUVNOwotCUlOSVRfTElTVF9IRUFEKCZtc2ctPmxpc3QpOwotCW1zZy0+Y2FsbF9zdHJ1Y3QuZnVuYyA9IGZ1bmM7Ci0JbXNnLT5jYWxsX3N0cnVjdC5pbmZvID0gaW5mbzsKLQltc2ctPmNhbGxfc3RydWN0LndhaXQgPSB3YWl0OwotCW1zZy0+Y2FsbF9zdHJ1Y3QucGVuZGluZyA9IGNhbGxtYXA7Ci0JbXNnLT5jYWxsX3N0cnVjdC53YWl0bWFzayA9IGNhbGxtYXA7Ci0JbXNnLT50eXBlID0gQkZJTl9JUElfQ0FMTF9GVU5DOworCXNtcF9zZW5kX21lc3NhZ2UoY2FsbG1hcCwgQkZJTl9JUElfQ0FMTF9GVU5DLCBmdW5jLCBpbmZvLCB3YWl0KTsKIAotCW1zZ19xdWV1ZSA9ICZwZXJfY3B1KGlwaV9tc2dfcXVldWUsIGNwdSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1zZ19xdWV1ZS0+bG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkX3RhaWwoJm1zZy0+bGlzdCwgJm1zZ19xdWV1ZS0+aGVhZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNnX3F1ZXVlLT5sb2NrLCBmbGFncyk7Ci0JcGxhdGZvcm1fc2VuZF9pcGlfY3B1KGNwdSk7Ci0KLQlpZiAod2FpdCkgewotCQl3aGlsZSAoIWNwdXNfZW1wdHkobXNnLT5jYWxsX3N0cnVjdC53YWl0bWFzaykpCi0JCQlibGFja2Zpbl9kY2FjaGVfaW52YWxpZGF0ZV9yYW5nZSgKLQkJCQkodW5zaWduZWQgbG9uZykoJm1zZy0+Y2FsbF9zdHJ1Y3Qud2FpdG1hc2spLAotCQkJCSh1bnNpZ25lZCBsb25nKSgmbXNnLT5jYWxsX3N0cnVjdC53YWl0bWFzaykpOwotI2lmZGVmIF9fQVJDSF9TWU5DX0NPUkVfRENBQ0hFCi0JCS8qCi0JCSAqIEludmFsaWRhdGUgRCBjYWNoZSBpbiBjYXNlIHNoYXJlZCBkYXRhIHdhcyBjaGFuZ2VkIGJ5Ci0JCSAqIG90aGVyIHByb2Nlc3NvcnMgdG8gZW5zdXJlIGNhY2hlIGNvaGVyZW5jZS4KLQkJICovCi0JCXJlc3luY19jb3JlX2RjYWNoZSgpOwotI2VuZGlmCi0JCWtmcmVlKG1zZyk7Ci0JfQogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKTsKIAogdm9pZCBzbXBfc2VuZF9yZXNjaGVkdWxlKGludCBjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaXBpX21lc3NhZ2VfcXVldWUgKm1zZ19xdWV1ZTsKLQlzdHJ1Y3QgaXBpX21lc3NhZ2UgKm1zZzsKLQorCS8qIHNpbXBseSB0cmlnZ2VyIGFuIGlwaSAqLwogCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpKQogCQlyZXR1cm47Ci0KLQltc2cgPSBremFsbG9jKHNpemVvZigqbXNnKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFtc2cpCi0JCXJldHVybjsKLQlJTklUX0xJU1RfSEVBRCgmbXNnLT5saXN0KTsKLQltc2ctPnR5cGUgPSBCRklOX0lQSV9SRVNDSEVEVUxFOwotCi0JbXNnX3F1ZXVlID0gJnBlcl9jcHUoaXBpX21zZ19xdWV1ZSwgY3B1KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXNnX3F1ZXVlLT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmbXNnLT5saXN0LCAmbXNnX3F1ZXVlLT5oZWFkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc2dfcXVldWUtPmxvY2ssIGZsYWdzKTsKLQlwbGF0Zm9ybV9zZW5kX2lwaV9jcHUoY3B1KTsKKwlwbGF0Zm9ybV9zZW5kX2lwaV9jcHUoY3B1LCBJUlFfU1VQUExFXzApOwogCiAJcmV0dXJuOwogfQogCiB2b2lkIHNtcF9zZW5kX3N0b3Aodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgY3B1OwogCWNwdW1hc2tfdCBjYWxsbWFwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGlwaV9tZXNzYWdlX3F1ZXVlICptc2dfcXVldWU7Ci0Jc3RydWN0IGlwaV9tZXNzYWdlICptc2c7CiAKIAljYWxsbWFwID0gY3B1X29ubGluZV9tYXA7CiAJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY2FsbG1hcCk7CiAJaWYgKGNwdXNfZW1wdHkoY2FsbG1hcCkpCiAJCXJldHVybjsKIAotCW1zZyA9IGt6YWxsb2Moc2l6ZW9mKCptc2cpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIW1zZykKLQkJcmV0dXJuOwotCUlOSVRfTElTVF9IRUFEKCZtc2ctPmxpc3QpOwotCW1zZy0+dHlwZSA9IEJGSU5fSVBJX0NQVV9TVE9QOworCXNtcF9zZW5kX21lc3NhZ2UoY2FsbG1hcCwgQkZJTl9JUElfQ1BVX1NUT1AsIE5VTEwsIE5VTEwsIDApOwogCi0JZm9yX2VhY2hfY3B1X21hc2soY3B1LCBjYWxsbWFwKSB7Ci0JCW1zZ19xdWV1ZSA9ICZwZXJfY3B1KGlwaV9tc2dfcXVldWUsIGNwdSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZtc2dfcXVldWUtPmxvY2ssIGZsYWdzKTsKLQkJbGlzdF9hZGRfdGFpbCgmbXNnLT5saXN0LCAmbXNnX3F1ZXVlLT5oZWFkKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNnX3F1ZXVlLT5sb2NrLCBmbGFncyk7Ci0JCXBsYXRmb3JtX3NlbmRfaXBpX2NwdShjcHUpOwotCX0KIAlyZXR1cm47CiB9CiAKQEAgLTQ0Niw3ICszOTksOCBAQAogewogCXBsYXRmb3JtX3ByZXBhcmVfY3B1cyhtYXhfY3B1cyk7CiAJaXBpX3F1ZXVlX2luaXQoKTsKLQlwbGF0Zm9ybV9yZXF1ZXN0X2lwaSgmaXBpX2hhbmRsZXIpOworCXBsYXRmb3JtX3JlcXVlc3RfaXBpKElSUV9TVVBQTEVfMCwgaXBpX2hhbmRsZXJfaW50MCk7CisJcGxhdGZvcm1fcmVxdWVzdF9pcGkoSVJRX1NVUFBMRV8xLCBpcGlfaGFuZGxlcl9pbnQxKTsKIH0KIAogdm9pZCBfX2luaXQgc21wX2NwdXNfZG9uZSh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYyBiL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCmluZGV4IDYyN2UwNGIuLmRmZDMwNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCkBAIC03MDQsMTggKzcwNCwxOCBAQAogewogCXN0cnVjdCBzcmFtX2xpc3Rfc3RydWN0ICpsc2wsICoqdG1wOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJaW50IHJldCA9IC0xOwogCiAJZm9yICh0bXAgPSAmbW0tPmNvbnRleHQuc3JhbV9saXN0OyAqdG1wOyB0bXAgPSAmKCp0bXApLT5uZXh0KQotCQlpZiAoKCp0bXApLT5hZGRyID09IGFkZHIpCi0JCQlnb3RvIGZvdW5kOwotCXJldHVybiAtMTsKLWZvdW5kOgotCWxzbCA9ICp0bXA7Ci0Jc3JhbV9mcmVlKGFkZHIpOwotCSp0bXAgPSBsc2wtPm5leHQ7Ci0Ja2ZyZWUobHNsKTsKKwkJaWYgKCgqdG1wKS0+YWRkciA9PSBhZGRyKSB7CisJCQlsc2wgPSAqdG1wOworCQkJcmV0ID0gc3JhbV9mcmVlKGFkZHIpOworCQkJKnRtcCA9IGxzbC0+bmV4dDsKKwkJCWtmcmVlKGxzbCk7CisJCQlicmVhazsKKwkJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woc3JhbV9mcmVlX3dpdGhfbHNsKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi9uYW5kX2luaXQuUyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvbmFuZF9pbml0LlMKaW5kZXggZTcwNWY1Yy4uZDY3MWZlZCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi9uYW5kX2luaXQuUworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbGliL25hbmRfaW5pdC5TCkBAIC0xMzksNyArMTM5LDcgQEAKIAlsc3JxCTgsICRyNAogCW1vdmUuYgkkcjQsIFskcjFdCTsgUm93IGFkZHJlc3MKIAlsc3JxCTgsICRyNAotCW1vdmUuYgkkcjQsIFskcjFdCTsgUm93IGFkZGRyZXNzCisJbW92ZS5iCSRyNCwgWyRyMV0JOyBSb3cgYWRkcmVzcwogCW1vdmVxCTIwLCAkcjQKIDI6CWJuZQkyYgogCXN1YnEJMSwgJHI0CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vZXRyYXhncGlvLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vZXRyYXhncGlvLmgKaW5kZXggZDQ3NDgxOC4uNDYxYzA4OSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2V0cmF4Z3Bpby5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9ldHJheGdwaW8uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBUaGUgZm9sbG93aW5nIGRldmljZXMgYXJlIGFjY2Vzc2FibGUgdXNpbmcgdGhpcyBkcml2ZXIgdXNpbmcKKyAqIFRoZSBmb2xsb3dpbmcgZGV2aWNlcyBhcmUgYWNjZXNzaWJsZSB1c2luZyB0aGlzIGRyaXZlciB1c2luZwogICogR1BJT19NQUpPUiAoMTIwKSBhbmQgYSBjb3VwbGUgb2YgbWlub3IgbnVtYmVycy4KICAqCiAgKiBGb3IgRVRSQVggMTAwTFggKENPTkZJR19FVFJBWF9BUkNIX1YxMCk6CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL3RpbWUuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvdGltZS5jCmluZGV4IGI1MDk2NDMuLjRlNzMwOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvdGltZS5jCkBAIC04Niw3ICs4Niw3IEBACiAJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLFJUQ19TRUNPTkRTKTsKIAkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsUlRDX01JTlVURVMpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJcHJpbnRrX29uY2UoS0VSTl9OT1RJQ0UKIAkJICAgICAgICJzZXRfcnRjX21tc3M6IGNhbid0IHVwZGF0ZSBmcm9tICVkIHRvICVkXG4iLAogCQkgICAgICAgY21vc19taW51dGVzLCByZWFsX21pbnV0ZXMpOwogCQlyZXR2YWwgPSAtMTsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvaDgzMDAvS2NvbmZpZy5kZWJ1ZwppbmRleCBlZTY3MWMzLi5lOGQxYjIzIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9oODMwMC9LY29uZmlnLmRlYnVnCkBAIC00OCw3ICs0OCw3IEBACiAJICBidWlsdGluIGtlcm5lbCBjb21tYW5kbGluZSBlbmFibGVkLgogCiBjb25maWcgS0VSTkVMX0NPTU1BTkQKLQlzdHJpbmcgIkJ1aWxkaW4gY29tbW1hbmQgc3RyaW5nIgorCXN0cmluZyAiQnVpbGRpbiBjb21tYW5kIHN0cmluZyIKIAlkZXBlbmRzIG9uIERFRkFVTFRfQ01ETElORQogCWhlbHAKIAkgIGJ1aWx0aW4ga2VybmVsIGNvbW1hbmRsaW5lIHN0cmluZ3MuCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDJmMjI5ZTUuLjI2ODllZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC01OTAsNiArNTkwLDEwIEBACiBpbnQga3ZtX3BhbF9lbXVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pOwogdm9pZCBrdm1fc2FsX2VtdWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAorI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0MgMQorc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZCk7Cit2b2lkIGt2bV9hcmNoX2ZyZWVfdm0oc3RydWN0IGt2bSAqa3ZtKTsKKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwppbmRleCBkOTJkNWI1Li5hYzc2ZGEwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwpAQCAtNjE3LDExICs2MTcsMTQgQEAKIAlyZXR1cm4gZ2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpOwogfQogCisvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdGF0aWMgc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwZm1mc19kZW50cnlfb3BlcmF0aW9uczsKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKgogcGZtZnNfbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsIGludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEpCiB7Ci0JcmV0dXJuIG1vdW50X3BzZXVkbyhmc190eXBlLCAicGZtOiIsIE5VTEwsIFBGTUZTX01BR0lDKTsKKwlyZXR1cm4gbW91bnRfcHNldWRvKGZzX3R5cGUsICJwZm06IiwgTlVMTCwgJnBmbWZzX2RlbnRyeV9vcGVyYXRpb25zLAorCQkJUEZNRlNfTUFHSUMpOwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgcGZtX2ZzX3R5cGUgPSB7CkBAIC0yMjMyLDcgKzIyMzUsNiBAQAogCX0KIAlwYXRoLm1udCA9IG1udGdldChwZm1mc19tbnQpOwogCi0JZF9zZXRfZF9vcChwYXRoLmRlbnRyeSwgJnBmbWZzX2RlbnRyeV9vcGVyYXRpb25zKTsKIAlkX2FkZChwYXRoLmRlbnRyeSwgaW5vZGUpOwogCiAJZmlsZSA9IGFsbG9jX2ZpbGUoJnBhdGgsIEZNT0RFX1JFQUQsICZwZm1fZmlsZV9vcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jIGIvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCmluZGV4IGY1NmE2MzEuLjcwZDIyNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYworKysgYi9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKQEAgLTc0OSw3ICs3NDksNyBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2FsbG9jX2t2bSh2b2lkKQorc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZCkKIHsKIAogCXN0cnVjdCBrdm0gKmt2bTsKQEAgLTc2MCw3ICs3NjAsNyBAQAogCXZtX2Jhc2UgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIGdldF9vcmRlcihLVk1fVk1fREFUQV9TSVpFKSk7CiAKIAlpZiAoIXZtX2Jhc2UpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlyZXR1cm4gTlVMTDsKIAogCW1lbXNldCgodm9pZCAqKXZtX2Jhc2UsIDAsIEtWTV9WTV9EQVRBX1NJWkUpOwogCWt2bSA9IChzdHJ1Y3Qga3ZtICopKHZtX2Jhc2UgKwpAQCAtODA2LDEwICs4MDYsMTIgQEAKICNkZWZpbmUgR1VFU1RfUEhZU0lDQUxfUlI0CTB4MjczOQogI2RlZmluZSBWTU1fSU5JVF9SUgkJMHgxNjYwCiAKLXN0YXRpYyB2b2lkIGt2bV9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSkKK2ludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlCVUdfT04oIWt2bSk7CiAKKwlrdm0tPmFyY2guaXNfc24yID0gaWE2NF9wbGF0Zm9ybV9pcygic24yIik7CisKIAlrdm0tPmFyY2gubWV0YXBoeXNpY2FsX3JyMCA9IEdVRVNUX1BIWVNJQ0FMX1JSMDsKIAlrdm0tPmFyY2gubWV0YXBoeXNpY2FsX3JyNCA9IEdVRVNUX1BIWVNJQ0FMX1JSNDsKIAlrdm0tPmFyY2gudm1tX2luaXRfcnIgPSBWTU1fSU5JVF9SUjsKQEAgLTgyMywyMSArODI1LDggQEAKIAogCS8qIFJlc2VydmUgYml0IDAgb2YgaXJxX3NvdXJjZXNfYml0bWFwIGZvciB1c2Vyc3BhY2UgaXJxIHNvdXJjZSAqLwogCXNldF9iaXQoS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELCAma3ZtLT5hcmNoLmlycV9zb3VyY2VzX2JpdG1hcCk7Ci19CiAKLXN0cnVjdCAga3ZtICprdm1fYXJjaF9jcmVhdGVfdm0odm9pZCkKLXsKLQlzdHJ1Y3Qga3ZtICprdm0gPSBrdm1fYWxsb2Nfa3ZtKCk7Ci0KLQlpZiAoSVNfRVJSKGt2bSkpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0Ja3ZtLT5hcmNoLmlzX3NuMiA9IGlhNjRfcGxhdGZvcm1faXMoInNuMiIpOwotCi0Ja3ZtX2luaXRfdm0oa3ZtKTsKLQotCXJldHVybiBrdm07Ci0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBrdm1fdm1faW9jdGxfZ2V0X2lycWNoaXAoc3RydWN0IGt2bSAqa3ZtLApAQCAtOTYyLDcgKzk1MSw5IEBACiAJCQlnb3RvIG91dDsKIAkJciA9IGt2bV9zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKGt2bSk7CiAJCWlmIChyKSB7CisJCQltdXRleF9sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCQkJa3ZtX2lvYXBpY19kZXN0cm95KGt2bSk7CisJCQltdXRleF91bmxvY2soJmt2bS0+c2xvdHNfbG9jayk7CiAJCQlnb3RvIG91dDsKIAkJfQogCQlicmVhazsKQEAgLTEzNTcsNyArMTM0OCw3IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfa3ZtKHN0cnVjdCBrdm0gKmt2bSkKK3ZvaWQga3ZtX2FyY2hfZnJlZV92bShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJdW5zaWduZWQgbG9uZyB2bV9iYXNlID0ga3ZtLT5hcmNoLnZtX2Jhc2U7CiAKQEAgLTEzOTksOSArMTM5MCw2IEBACiAjZW5kaWYKIAlrZnJlZShrdm0tPmFyY2gudmlvYXBpYyk7CiAJa3ZtX3JlbGVhc2Vfdm1fcGFnZXMoa3ZtKTsKLQlrdm1fZnJlZV9waHlzbWVtKGt2bSk7Ci0JY2xlYW51cF9zcmN1X3N0cnVjdCgma3ZtLT5zcmN1KTsKLQlmcmVlX2t2bShrdm0pOwogfQogCiB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vbW1pby5jIGIvYXJjaC9pYTY0L2t2bS9tbWlvLmMKaW5kZXggZmI4ZjlmNS4uZjFlMTdkMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9tbWlvLmMKKysrIGIvYXJjaC9pYTY0L2t2bS9tbWlvLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiAJbG9jYWxfaXJxX3NhdmUocHNyKTsKIAotCS8qSW50ZXJjZXB0IHRoZSBhY2NlcyBmb3IgUElCIHJhbmdlKi8KKwkvKkludGVyY2VwdCB0aGUgYWNjZXNzIGZvciBQSUIgcmFuZ2UqLwogCWlmIChpb3QgPT0gR1BGTl9QSUIpIHsKIAkJaWYgKCFkaXIpCiAJCQlsc2FwaWNfd3JpdGUodmNwdSwgc3JjX3BhLCBzLCAqZGVzdCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2Zwc3AuUyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvZnBzcC5TCmluZGV4IDczNjEzYjUuLjI2ZTg1ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvZnBzcC5TCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvZnBzcC5TCkBAIC0zODgxLDcgKzM4ODEsNyBAQAogIyBGUCBVbmltcGxlbWVudGVkIEluc3RydWN0aW9uIHN0YWNrIGZyYW1lIGFuZCBqdW1wIHRvIHRoYXQgZW50cnkKICMgcG9pbnQuCiAjCi0jIGJ1dCwgaWYgdGhlIEZQVSBpcyBkaXNhYmxlZCwgdGhlbiB3ZSBuZWVkIHRvIGp1bXAgdG8gdGhlIEZQVSBkaWFibGVkCisjIGJ1dCwgaWYgdGhlIEZQVSBpcyBkaXNhYmxlZCwgdGhlbiB3ZSBuZWVkIHRvIGp1bXAgdG8gdGhlIEZQVSBkaXNhYmxlZAogIyBlbnRyeSBwb2ludC4KIAltb3ZjCQklcGNyLCVkMAogCWJ0c3QJCSYweDEsJWQwCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbTU0OHhncHQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTQ4eGdwdC5oCmluZGV4IGM4ZWYxNTguLjMzYjJlZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTQ4eGdwdC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTQ4eGdwdC5oCkBAIC01OSwxMSArNTksMTMgQEAKICNkZWZpbmUgTUNGX0dQVF9HTVNfR1BJT19JTlBVVCAgICAgKDB4MDAwMDAwMDApCiAjZGVmaW5lIE1DRl9HUFRfR01TX0dQSU9fT1VUTE8gICAgICgweDAwMDAwMDIwKQogI2RlZmluZSBNQ0ZfR1BUX0dNU19HUElPX09VVEhJICAgICAoMHgwMDAwMDAzMCkKKyNkZWZpbmUgTUNGX0dQVF9HTVNfR1BJT19NQVNLICAgICAgKDB4MDAwMDAwMzApCiAjZGVmaW5lIE1DRl9HUFRfR01TX1RNU19ESVNBQkxFICAgICgweDAwMDAwMDAwKQogI2RlZmluZSBNQ0ZfR1BUX0dNU19UTVNfSU5DQVBUICAgICAoMHgwMDAwMDAwMSkKICNkZWZpbmUgTUNGX0dQVF9HTVNfVE1TX09VVENBUFQgICAgKDB4MDAwMDAwMDIpCiAjZGVmaW5lIE1DRl9HUFRfR01TX1RNU19QV00gICAgICAgICgweDAwMDAwMDAzKQogI2RlZmluZSBNQ0ZfR1BUX0dNU19UTVNfR1BJTyAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTUNGX0dQVF9HTVNfVE1TX01BU0sgICAgICAgKDB4MDAwMDAwMDcpCiAKIC8qIEJpdCBkZWZpbml0aW9ucyBhbmQgbWFjcm9zIGZvciBNQ0ZfR1BUX0dDSVIgKi8KICNkZWZpbmUgTUNGX0dQVF9HQ0lSX0NOVCh4KSAgICAgICAgKCgoeCkmMHgwMDAwRkZGRik8PDApCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL3BzYy5jIGIvYXJjaC9tNjhrL21hYy9wc2MuYwppbmRleCBiYTZjY2FiLi5hNGMzZWI2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL3BzYy5jCisrKyBiL2FyY2gvbTY4ay9tYWMvcHNjLmMKQEAgLTg4LDcgKzg4LDcgQEAKIAogCS8qCiAJICogVGhlIFBTQyBpcyBhbHdheXMgYXQgdGhlIHNhbWUgc3BvdCwgYnV0IHVzaW5nIHBzYwotCSAqIGtlZXBzIHRoaW5ncyBjb25zaXNhbnQgd2l0aCB0aGUgcHNjX3h4eHggZnVuY3Rpb25zLgorCSAqIGtlZXBzIHRoaW5ncyBjb25zaXN0ZW50IHdpdGggdGhlIHBzY194eHh4IGZ1bmN0aW9ucy4KIAkgKi8KIAogCXBzYyA9ICh2b2lkICopIFBTQ19CQVNFOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL0tjb25maWcuZGVidWcgYi9hcmNoL21pY3JvYmxhemUvS2NvbmZpZy5kZWJ1ZwppbmRleCBlNjZlMjVjLi4wMTJlMzc3IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL21pY3JvYmxhemUvS2NvbmZpZy5kZWJ1ZwpAQCAtMjMsOCArMjMsNCBAQAogCSAgVGhpcyBvcHRpb24gdHVybnMgb24vb2ZmIGhlYXJ0IGJlYXQga2VybmVsIGZ1bmN0aW9uYWxpdHkuCiAJICBGaXJzdCBHUElPIG5vZGUgaXMgdGFrZW4uCiAKLWNvbmZpZyBERUJVR19CT09UTUVNCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKLQlib29sICJEZWJ1ZyBCT09UTUVNIGluaXRpYWxpemF0aW9uIgotCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvTWFrZWZpbGUgYi9hcmNoL21pY3JvYmxhemUvTWFrZWZpbGUKaW5kZXggMTVmMWYxZC4uNmY0MzJlNiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL01ha2VmaWxlCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9NYWtlZmlsZQpAQCAtMTcsNyArMTcsNyBAQAogIyBUaGUgdmFyaW91cyBDT05GSUdfWElMSU5YIGNwdSBmZWF0dXJlcyBvcHRpb25zIGFyZSBpbnRlZ2VycyAwLzEvMi4uLgogIyByYXRoZXIgdGhhbiBib29scyB5L24KIAotIyBXb3JrIG91dCBIVyBtdWx0aXBsZXIgc3VwcG9ydC4gIFRoaXMgaXMgaWNreS4KKyMgV29yayBvdXQgSFcgbXVsdGlwbGVyIHN1cHBvcnQuIFRoaXMgaXMgdHJpY2t5LgogIyAxLiBTcGFydGFuMiBoYXMgbm8gSFcgbXVsdGlwbGVycy4KICMgMi4gTWljcm9CbGF6ZSB2My54IGFsd2F5cyB1c2VzIHRoZW0sIGV4Y2VwdCBpbiBTcGFydGFuIDIKICMgMy4gQWxsIG90aGVyIEZQR2EvQ1BVIHZlciBjb21ib3MsIHdlIGNhbiB0cnVzdCB0aGUgQ09ORklHXyBzZXR0aW5ncwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2NvbmZpZ3MvbW11X2RlZmNvbmZpZyBiL2FyY2gvbWljcm9ibGF6ZS9jb25maWdzL21tdV9kZWZjb25maWcKaW5kZXggOGI0MjJiMS4uYWI4ZmJlNyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2NvbmZpZ3MvbW11X2RlZmNvbmZpZworKysgYi9hcmNoL21pY3JvYmxhemUvY29uZmlncy9tbXVfZGVmY29uZmlnCkBAIC02Niw1ICs2Niw0IEBACiBDT05GSUdfREVCVUdfSU5GTz15CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0RFQlVHX0JPT1RNRU09eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3B2ci5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3B2ci5oCmluZGV4IDM3ZGI5NmEuLmExMGJlYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wdnIuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHZyLmgKQEAgLTEsOSArMSw5IEBACiAvKgogICogU3VwcG9ydCBmb3IgdGhlIE1pY3JvQmxhemUgUFZSIChQcm9jZXNzb3IgVmVyc2lvbiBSZWdpc3RlcikKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWljaGFsIFNpbWVrIDxtb25zdHJAbW9uc3RyLmV1PgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxMSBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSm9obiBXaWxsaWFtcyA8am9obi53aWxsaWFtc0BwZXRhbG9naXguY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA3IC0gMjAwOSBQZXRhTG9naXgKKyAqIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMTEgUGV0YUxvZ2l4CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAogICogUHVibGljIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCkBAIC00NiwxMSArNDYsMTEgQEAKICNkZWZpbmUgUFZSMl9JX0xNQl9NQVNLCQkJMHgxMDAwMDAwMAogI2RlZmluZSBQVlIyX0lOVEVSUlVQVF9JU19FREdFX01BU0sJMHgwODAwMDAwMAogI2RlZmluZSBQVlIyX0VER0VfSVNfUE9TSVRJVkVfTUFTSwkweDA0MDAwMDAwCi0jZGVmaW5lIFBWUjJfRF9QTEJfTUFTSwkJCTB4MDIwMDAwMDAJLyogbmV3ICovCi0jZGVmaW5lIFBWUjJfSV9QTEJfTUFTSwkJCTB4MDEwMDAwMDAJLyogbmV3ICovCi0jZGVmaW5lIFBWUjJfSU5URVJDT05ORUNUCQkweDAwODAwMDAwCS8qIG5ldyAqLwotI2RlZmluZSBQVlIyX1VTRV9FWFRFTkRfRlNMCQkweDAwMDgwMDAwCS8qIG5ldyAqLwotI2RlZmluZSBQVlIyX1VTRV9GU0xfRVhDCQkweDAwMDQwMDAwCS8qIG5ldyAqLworI2RlZmluZSBQVlIyX0RfUExCX01BU0sJCQkweDAyMDAwMDAwIC8qIG5ldyAqLworI2RlZmluZSBQVlIyX0lfUExCX01BU0sJCQkweDAxMDAwMDAwIC8qIG5ldyAqLworI2RlZmluZSBQVlIyX0lOVEVSQ09OTkVDVAkJMHgwMDgwMDAwMCAvKiBuZXcgKi8KKyNkZWZpbmUgUFZSMl9VU0VfRVhURU5EX0ZTTAkJMHgwMDA4MDAwMCAvKiBuZXcgKi8KKyNkZWZpbmUgUFZSMl9VU0VfRlNMX0VYQwkJMHgwMDA0MDAwMCAvKiBuZXcgKi8KICNkZWZpbmUgUFZSMl9VU0VfTVNSX0lOU1RSCQkweDAwMDIwMDAwCiAjZGVmaW5lIFBWUjJfVVNFX1BDTVBfSU5TVFIJCTB4MDAwMTAwMDAKICNkZWZpbmUgUFZSMl9BUkVBX09QVElNSVNFRAkJMHgwMDAwODAwMApAQCAtNTksNyArNTksNyBAQAogI2RlZmluZSBQVlIyX1VTRV9IV19NVUxfTUFTSwkJMHgwMDAwMTAwMAogI2RlZmluZSBQVlIyX1VTRV9GUFVfTUFTSwkJMHgwMDAwMDgwMAogI2RlZmluZSBQVlIyX1VTRV9NVUw2NF9NQVNLCQkweDAwMDAwNDAwCi0jZGVmaW5lIFBWUjJfVVNFX0ZQVTJfTUFTSwkJMHgwMDAwMDIwMAkvKiBuZXcgKi8KKyNkZWZpbmUgUFZSMl9VU0VfRlBVMl9NQVNLCQkweDAwMDAwMjAwIC8qIG5ldyAqLwogI2RlZmluZSBQVlIyX1VTRV9JUExCRVhDIAkJMHgwMDAwMDEwMAogI2RlZmluZSBQVlIyX1VTRV9EUExCRVhDCQkweDAwMDAwMDgwCiAjZGVmaW5lIFBWUjJfT1BDT0RFXzB4MF9JTExfTUFTSwkweDAwMDAwMDQwCkBAIC0xMjIsOTYgKzEyMiwxMDMgQEAKIAogCiAvKiBQVlIgYWNjZXNzIG1hY3JvcyAqLwotI2RlZmluZSBQVlJfSVNfRlVMTChwdnIpCQkocHZyLnB2clswXSAmIFBWUjBfUFZSX0ZVTExfTUFTSykKLSNkZWZpbmUgUFZSX1VTRV9CQVJSRUwocHZyKQkJKHB2ci5wdnJbMF0gJiBQVlIwX1VTRV9CQVJSRUxfTUFTSykKLSNkZWZpbmUgUFZSX1VTRV9ESVYocHZyKQkJKHB2ci5wdnJbMF0gJiBQVlIwX1VTRV9ESVZfTUFTSykKLSNkZWZpbmUgUFZSX1VTRV9IV19NVUwocHZyKQkJKHB2ci5wdnJbMF0gJiBQVlIwX1VTRV9IV19NVUxfTUFTSykKLSNkZWZpbmUgUFZSX1VTRV9GUFUocHZyKQkJKHB2ci5wdnJbMF0gJiBQVlIwX1VTRV9GUFVfTUFTSykKLSNkZWZpbmUgUFZSX1VTRV9GUFUyKHB2cikJCShwdnIucHZyWzJdICYgUFZSMl9VU0VfRlBVMl9NQVNLKQotI2RlZmluZSBQVlJfVVNFX0lDQUNIRShwdnIpCQkocHZyLnB2clswXSAmIFBWUjBfVVNFX0lDQUNIRV9NQVNLKQotI2RlZmluZSBQVlJfVVNFX0RDQUNIRShwdnIpCQkocHZyLnB2clswXSAmIFBWUjBfVVNFX0RDQUNIRV9NQVNLKQotI2RlZmluZSBQVlJfVkVSU0lPTihwdnIpCSgocHZyLnB2clswXSAmIFBWUjBfVkVSU0lPTl9NQVNLKSA+PiA4KQotI2RlZmluZSBQVlJfVVNFUjEocHZyKQkJCShwdnIucHZyWzBdICYgUFZSMF9VU0VSMV9NQVNLKQotI2RlZmluZSBQVlJfVVNFUjIocHZyKQkJCShwdnIucHZyWzFdICYgUFZSMV9VU0VSMl9NQVNLKQorI2RlZmluZSBQVlJfSVNfRlVMTChfcHZyKQkoX3B2ci5wdnJbMF0gJiBQVlIwX1BWUl9GVUxMX01BU0spCisjZGVmaW5lIFBWUl9VU0VfQkFSUkVMKF9wdnIpCShfcHZyLnB2clswXSAmIFBWUjBfVVNFX0JBUlJFTF9NQVNLKQorI2RlZmluZSBQVlJfVVNFX0RJVihfcHZyKQkoX3B2ci5wdnJbMF0gJiBQVlIwX1VTRV9ESVZfTUFTSykKKyNkZWZpbmUgUFZSX1VTRV9IV19NVUwoX3B2cikJKF9wdnIucHZyWzBdICYgUFZSMF9VU0VfSFdfTVVMX01BU0spCisjZGVmaW5lIFBWUl9VU0VfRlBVKF9wdnIpCShfcHZyLnB2clswXSAmIFBWUjBfVVNFX0ZQVV9NQVNLKQorI2RlZmluZSBQVlJfVVNFX0ZQVTIoX3B2cikJKF9wdnIucHZyWzJdICYgUFZSMl9VU0VfRlBVMl9NQVNLKQorI2RlZmluZSBQVlJfVVNFX0lDQUNIRShfcHZyKQkoX3B2ci5wdnJbMF0gJiBQVlIwX1VTRV9JQ0FDSEVfTUFTSykKKyNkZWZpbmUgUFZSX1VTRV9EQ0FDSEUoX3B2cikJKF9wdnIucHZyWzBdICYgUFZSMF9VU0VfRENBQ0hFX01BU0spCisjZGVmaW5lIFBWUl9WRVJTSU9OKF9wdnIpCSgoX3B2ci5wdnJbMF0gJiBQVlIwX1ZFUlNJT05fTUFTSykgPj4gOCkKKyNkZWZpbmUgUFZSX1VTRVIxKF9wdnIpCQkoX3B2ci5wdnJbMF0gJiBQVlIwX1VTRVIxX01BU0spCisjZGVmaW5lIFBWUl9VU0VSMihfcHZyKQkJKF9wdnIucHZyWzFdICYgUFZSMV9VU0VSMl9NQVNLKQogCi0jZGVmaW5lIFBWUl9EX09QQihwdnIpCQkJKHB2ci5wdnJbMl0gJiBQVlIyX0RfT1BCX01BU0spCi0jZGVmaW5lIFBWUl9EX0xNQihwdnIpCQkJKHB2ci5wdnJbMl0gJiBQVlIyX0RfTE1CX01BU0spCi0jZGVmaW5lIFBWUl9JX09QQihwdnIpCQkJKHB2ci5wdnJbMl0gJiBQVlIyX0lfT1BCX01BU0spCi0jZGVmaW5lIFBWUl9JX0xNQihwdnIpCQkJKHB2ci5wdnJbMl0gJiBQVlIyX0lfTE1CX01BU0spCi0jZGVmaW5lIFBWUl9JTlRFUlJVUFRfSVNfRURHRShwdnIpIFwKLQkJCShwdnIucHZyWzJdICYgUFZSMl9JTlRFUlJVUFRfSVNfRURHRV9NQVNLKQotI2RlZmluZSBQVlJfRURHRV9JU19QT1NJVElWRShwdnIpIFwKLQkJCShwdnIucHZyWzJdICYgUFZSMl9FREdFX0lTX1BPU0lUSVZFX01BU0spCi0jZGVmaW5lIFBWUl9VU0VfTVNSX0lOU1RSKHB2cikJCShwdnIucHZyWzJdICYgUFZSMl9VU0VfTVNSX0lOU1RSKQotI2RlZmluZSBQVlJfVVNFX1BDTVBfSU5TVFIocHZyKQkJKHB2ci5wdnJbMl0gJiBQVlIyX1VTRV9QQ01QX0lOU1RSKQotI2RlZmluZSBQVlJfQVJFQV9PUFRJTUlTRUQocHZyKQkJKHB2ci5wdnJbMl0gJiBQVlIyX0FSRUFfT1BUSU1JU0VEKQotI2RlZmluZSBQVlJfVVNFX01VTDY0KHB2cikJCShwdnIucHZyWzJdICYgUFZSMl9VU0VfTVVMNjRfTUFTSykKLSNkZWZpbmUgUFZSX09QQ09ERV8weDBfSUxMRUdBTChwdnIpIFwKLQkJCShwdnIucHZyWzJdICYgUFZSMl9PUENPREVfMHgwX0lMTF9NQVNLKQotI2RlZmluZSBQVlJfVU5BTElHTkVEX0VYQ0VQVElPTihwdnIpIFwKLQkJCShwdnIucHZyWzJdICYgUFZSMl9VTkFMSUdORURfRVhDX01BU0spCi0jZGVmaW5lIFBWUl9JTExfT1BDT0RFX0VYQ0VQVElPTihwdnIpIFwKLQkJCShwdnIucHZyWzJdICYgUFZSMl9JTExfT1BDT0RFX0VYQ19NQVNLKQotI2RlZmluZSBQVlJfSU9QQl9CVVNfRVhDRVBUSU9OKHB2cikgXAotCQkJKHB2ci5wdnJbMl0gJiBQVlIyX0lPUEJfQlVTX0VYQ19NQVNLKQotI2RlZmluZSBQVlJfRE9QQl9CVVNfRVhDRVBUSU9OKHB2cikgXAotCQkJKHB2ci5wdnJbMl0gJiBQVlIyX0RPUEJfQlVTX0VYQ19NQVNLKQotI2RlZmluZSBQVlJfRElWX1pFUk9fRVhDRVBUSU9OKHB2cikgXAotCQkJKHB2ci5wdnJbMl0gJiBQVlIyX0RJVl9aRVJPX0VYQ19NQVNLKQotI2RlZmluZSBQVlJfRlBVX0VYQ0VQVElPTihwdnIpCQkocHZyLnB2clsyXSAmIFBWUjJfRlBVX0VYQ19NQVNLKQotI2RlZmluZSBQVlJfRlNMX0VYQ0VQVElPTihwdnIpCQkocHZyLnB2clsyXSAmIFBWUjJfVVNFX0VYVEVORF9GU0wpCisjZGVmaW5lIFBWUl9EX09QQihfcHZyKQkJKF9wdnIucHZyWzJdICYgUFZSMl9EX09QQl9NQVNLKQorI2RlZmluZSBQVlJfRF9MTUIoX3B2cikJCShfcHZyLnB2clsyXSAmIFBWUjJfRF9MTUJfTUFTSykKKyNkZWZpbmUgUFZSX0lfT1BCKF9wdnIpCQkoX3B2ci5wdnJbMl0gJiBQVlIyX0lfT1BCX01BU0spCisjZGVmaW5lIFBWUl9JX0xNQihfcHZyKQkJKF9wdnIucHZyWzJdICYgUFZSMl9JX0xNQl9NQVNLKQorI2RlZmluZSBQVlJfSU5URVJSVVBUX0lTX0VER0UoX3B2cikgXAorCQkJKF9wdnIucHZyWzJdICYgUFZSMl9JTlRFUlJVUFRfSVNfRURHRV9NQVNLKQorI2RlZmluZSBQVlJfRURHRV9JU19QT1NJVElWRShfcHZyKSBcCisJCQkoX3B2ci5wdnJbMl0gJiBQVlIyX0VER0VfSVNfUE9TSVRJVkVfTUFTSykKKyNkZWZpbmUgUFZSX1VTRV9NU1JfSU5TVFIoX3B2cikJCShfcHZyLnB2clsyXSAmIFBWUjJfVVNFX01TUl9JTlNUUikKKyNkZWZpbmUgUFZSX1VTRV9QQ01QX0lOU1RSKF9wdnIpCShfcHZyLnB2clsyXSAmIFBWUjJfVVNFX1BDTVBfSU5TVFIpCisjZGVmaW5lIFBWUl9BUkVBX09QVElNSVNFRChfcHZyKQkoX3B2ci5wdnJbMl0gJiBQVlIyX0FSRUFfT1BUSU1JU0VEKQorI2RlZmluZSBQVlJfVVNFX01VTDY0KF9wdnIpCQkoX3B2ci5wdnJbMl0gJiBQVlIyX1VTRV9NVUw2NF9NQVNLKQorI2RlZmluZSBQVlJfT1BDT0RFXzB4MF9JTExFR0FMKF9wdnIpIFwKKwkJCShfcHZyLnB2clsyXSAmIFBWUjJfT1BDT0RFXzB4MF9JTExfTUFTSykKKyNkZWZpbmUgUFZSX1VOQUxJR05FRF9FWENFUFRJT04oX3B2cikgXAorCQkJKF9wdnIucHZyWzJdICYgUFZSMl9VTkFMSUdORURfRVhDX01BU0spCisjZGVmaW5lIFBWUl9JTExfT1BDT0RFX0VYQ0VQVElPTihfcHZyKSBcCisJCQkoX3B2ci5wdnJbMl0gJiBQVlIyX0lMTF9PUENPREVfRVhDX01BU0spCisjZGVmaW5lIFBWUl9JT1BCX0JVU19FWENFUFRJT04oX3B2cikgXAorCQkJKF9wdnIucHZyWzJdICYgUFZSMl9JT1BCX0JVU19FWENfTUFTSykKKyNkZWZpbmUgUFZSX0RPUEJfQlVTX0VYQ0VQVElPTihfcHZyKSBcCisJCQkoX3B2ci5wdnJbMl0gJiBQVlIyX0RPUEJfQlVTX0VYQ19NQVNLKQorI2RlZmluZSBQVlJfRElWX1pFUk9fRVhDRVBUSU9OKF9wdnIpIFwKKwkJCShfcHZyLnB2clsyXSAmIFBWUjJfRElWX1pFUk9fRVhDX01BU0spCisjZGVmaW5lIFBWUl9GUFVfRVhDRVBUSU9OKF9wdnIpCQkoX3B2ci5wdnJbMl0gJiBQVlIyX0ZQVV9FWENfTUFTSykKKyNkZWZpbmUgUFZSX0ZTTF9FWENFUFRJT04oX3B2cikJCShfcHZyLnB2clsyXSAmIFBWUjJfVVNFX0VYVEVORF9GU0wpCiAKLSNkZWZpbmUgUFZSX0RFQlVHX0VOQUJMRUQocHZyKQkJKHB2ci5wdnJbM10gJiBQVlIzX0RFQlVHX0VOQUJMRURfTUFTSykKLSNkZWZpbmUgUFZSX05VTUJFUl9PRl9QQ19CUksocHZyKSBcCi0JCQkoKHB2ci5wdnJbM10gJiBQVlIzX05VTUJFUl9PRl9QQ19CUktfTUFTSykgPj4gMjUpCi0jZGVmaW5lIFBWUl9OVU1CRVJfT0ZfUkRfQUREUl9CUksocHZyKSBcCi0JCQkoKHB2ci5wdnJbM10gJiBQVlIzX05VTUJFUl9PRl9SRF9BRERSX0JSS19NQVNLKSA+PiAxOSkKLSNkZWZpbmUgUFZSX05VTUJFUl9PRl9XUl9BRERSX0JSSyhwdnIpIFwKLQkJCSgocHZyLnB2clszXSAmIFBWUjNfTlVNQkVSX09GX1dSX0FERFJfQlJLX01BU0spID4+IDEzKQotI2RlZmluZSBQVlJfRlNMX0xJTktTKHB2cikJKChwdnIucHZyWzNdICYgUFZSM19GU0xfTElOS1NfTUFTSykgPj4gNykKKyNkZWZpbmUgUFZSX0RFQlVHX0VOQUJMRUQoX3B2cikJCShfcHZyLnB2clszXSAmIFBWUjNfREVCVUdfRU5BQkxFRF9NQVNLKQorI2RlZmluZSBQVlJfTlVNQkVSX09GX1BDX0JSSyhfcHZyKSBcCisJCQkoKF9wdnIucHZyWzNdICYgUFZSM19OVU1CRVJfT0ZfUENfQlJLX01BU0spID4+IDI1KQorI2RlZmluZSBQVlJfTlVNQkVSX09GX1JEX0FERFJfQlJLKF9wdnIpIFwKKwkJCSgoX3B2ci5wdnJbM10gJiBQVlIzX05VTUJFUl9PRl9SRF9BRERSX0JSS19NQVNLKSA+PiAxOSkKKyNkZWZpbmUgUFZSX05VTUJFUl9PRl9XUl9BRERSX0JSSyhfcHZyKSBcCisJCQkoKF9wdnIucHZyWzNdICYgUFZSM19OVU1CRVJfT0ZfV1JfQUREUl9CUktfTUFTSykgPj4gMTMpCisjZGVmaW5lIFBWUl9GU0xfTElOS1MoX3B2cikJKChfcHZyLnB2clszXSAmIFBWUjNfRlNMX0xJTktTX01BU0spID4+IDcpCiAKLSNkZWZpbmUgUFZSX0lDQUNIRV9BRERSX1RBR19CSVRTKHB2cikgXAotCQkJKChwdnIucHZyWzRdICYgUFZSNF9JQ0FDSEVfQUREUl9UQUdfQklUU19NQVNLKSA+PiAyNikKLSNkZWZpbmUgUFZSX0lDQUNIRV9VU0VfRlNMKHB2cikJCShwdnIucHZyWzRdICYgUFZSNF9JQ0FDSEVfVVNFX0ZTTF9NQVNLKQotI2RlZmluZSBQVlJfSUNBQ0hFX0FMTE9XX1dSKHB2cikJKHB2ci5wdnJbNF0gJiBQVlI0X0lDQUNIRV9BTExPV19XUl9NQVNLKQotI2RlZmluZSBQVlJfSUNBQ0hFX0xJTkVfTEVOKHB2cikgXAotCQkJKDEgPDwgKChwdnIucHZyWzRdICYgUFZSNF9JQ0FDSEVfTElORV9MRU5fTUFTSykgPj4gMjEpKQotI2RlZmluZSBQVlJfSUNBQ0hFX0JZVEVfU0laRShwdnIpIFwKLQkJCSgxIDw8ICgocHZyLnB2cls0XSAmIFBWUjRfSUNBQ0hFX0JZVEVfU0laRV9NQVNLKSA+PiAxNikpCisjZGVmaW5lIFBWUl9JQ0FDSEVfQUREUl9UQUdfQklUUyhfcHZyKSBcCisJCSgoX3B2ci5wdnJbNF0gJiBQVlI0X0lDQUNIRV9BRERSX1RBR19CSVRTX01BU0spID4+IDI2KQorI2RlZmluZSBQVlJfSUNBQ0hFX1VTRV9GU0woX3B2cikgXAorCQkoX3B2ci5wdnJbNF0gJiBQVlI0X0lDQUNIRV9VU0VfRlNMX01BU0spCisjZGVmaW5lIFBWUl9JQ0FDSEVfQUxMT1dfV1IoX3B2cikgXAorCQkoX3B2ci5wdnJbNF0gJiBQVlI0X0lDQUNIRV9BTExPV19XUl9NQVNLKQorI2RlZmluZSBQVlJfSUNBQ0hFX0xJTkVfTEVOKF9wdnIpIFwKKwkJKDEgPDwgKChfcHZyLnB2cls0XSAmIFBWUjRfSUNBQ0hFX0xJTkVfTEVOX01BU0spID4+IDIxKSkKKyNkZWZpbmUgUFZSX0lDQUNIRV9CWVRFX1NJWkUoX3B2cikgXAorCQkoMSA8PCAoKF9wdnIucHZyWzRdICYgUFZSNF9JQ0FDSEVfQllURV9TSVpFX01BU0spID4+IDE2KSkKIAotI2RlZmluZSBQVlJfRENBQ0hFX0FERFJfVEFHX0JJVFMocHZyKSBcCi0JCQkoKHB2ci5wdnJbNV0gJiBQVlI1X0RDQUNIRV9BRERSX1RBR19CSVRTX01BU0spID4+IDI2KQotI2RlZmluZSBQVlJfRENBQ0hFX1VTRV9GU0wocHZyKQkJKHB2ci5wdnJbNV0gJiBQVlI1X0RDQUNIRV9VU0VfRlNMX01BU0spCi0jZGVmaW5lIFBWUl9EQ0FDSEVfQUxMT1dfV1IocHZyKQkocHZyLnB2cls1XSAmIFBWUjVfRENBQ0hFX0FMTE9XX1dSX01BU0spCisjZGVmaW5lIFBWUl9EQ0FDSEVfQUREUl9UQUdfQklUUyhfcHZyKSBcCisJCQkoKF9wdnIucHZyWzVdICYgUFZSNV9EQ0FDSEVfQUREUl9UQUdfQklUU19NQVNLKSA+PiAyNikKKyNkZWZpbmUgUFZSX0RDQUNIRV9VU0VfRlNMKF9wdnIpCShfcHZyLnB2cls1XSAmIFBWUjVfRENBQ0hFX1VTRV9GU0xfTUFTSykKKyNkZWZpbmUgUFZSX0RDQUNIRV9BTExPV19XUihfcHZyKSBcCisJCQkoX3B2ci5wdnJbNV0gJiBQVlI1X0RDQUNIRV9BTExPV19XUl9NQVNLKQogLyogRklYTUUgdHdvIHNoaWZ0cyBvbiBvbmUgbGluZSBuZWVkcyBhbnkgY29tbWVudCAqLwotI2RlZmluZSBQVlJfRENBQ0hFX0xJTkVfTEVOKHB2cikgXAotCQkJKDEgPDwgKChwdnIucHZyWzVdICYgUFZSNV9EQ0FDSEVfTElORV9MRU5fTUFTSykgPj4gMjEpKQotI2RlZmluZSBQVlJfRENBQ0hFX0JZVEVfU0laRShwdnIpIFwKLQkJCSgxIDw8ICgocHZyLnB2cls1XSAmIFBWUjVfRENBQ0hFX0JZVEVfU0laRV9NQVNLKSA+PiAxNikpCisjZGVmaW5lIFBWUl9EQ0FDSEVfTElORV9MRU4oX3B2cikgXAorCQkoMSA8PCAoKF9wdnIucHZyWzVdICYgUFZSNV9EQ0FDSEVfTElORV9MRU5fTUFTSykgPj4gMjEpKQorI2RlZmluZSBQVlJfRENBQ0hFX0JZVEVfU0laRShfcHZyKSBcCisJCSgxIDw8ICgoX3B2ci5wdnJbNV0gJiBQVlI1X0RDQUNIRV9CWVRFX1NJWkVfTUFTSykgPj4gMTYpKQogCi0jZGVmaW5lIFBWUl9EQ0FDSEVfVVNFX1dSSVRFQkFDSyhwdnIpIFwKLQkJCSgocHZyLnB2cls1XSAmIFBWUjVfRENBQ0hFX1VTRV9XUklURUJBQ0spID4+IDE0KQorI2RlZmluZSBQVlJfRENBQ0hFX1VTRV9XUklURUJBQ0soX3B2cikgXAorCQkJKChfcHZyLnB2cls1XSAmIFBWUjVfRENBQ0hFX1VTRV9XUklURUJBQ0spID4+IDE0KQogCi0jZGVmaW5lIFBWUl9JQ0FDSEVfQkFTRUFERFIocHZyKQkocHZyLnB2cls2XSAmIFBWUjZfSUNBQ0hFX0JBU0VBRERSX01BU0spCi0jZGVmaW5lIFBWUl9JQ0FDSEVfSElHSEFERFIocHZyKQkocHZyLnB2cls3XSAmIFBWUjdfSUNBQ0hFX0hJR0hBRERSX01BU0spCisjZGVmaW5lIFBWUl9JQ0FDSEVfQkFTRUFERFIoX3B2cikgXAorCQkJKF9wdnIucHZyWzZdICYgUFZSNl9JQ0FDSEVfQkFTRUFERFJfTUFTSykKKyNkZWZpbmUgUFZSX0lDQUNIRV9ISUdIQUREUihfcHZyKSBcCisJCQkoX3B2ci5wdnJbN10gJiBQVlI3X0lDQUNIRV9ISUdIQUREUl9NQVNLKQorI2RlZmluZSBQVlJfRENBQ0hFX0JBU0VBRERSKF9wdnIpIFwKKwkJCShfcHZyLnB2cls4XSAmIFBWUjhfRENBQ0hFX0JBU0VBRERSX01BU0spCisjZGVmaW5lIFBWUl9EQ0FDSEVfSElHSEFERFIoX3B2cikgXAorCQkJKF9wdnIucHZyWzldICYgUFZSOV9EQ0FDSEVfSElHSEFERFJfTUFTSykKIAotI2RlZmluZSBQVlJfRENBQ0hFX0JBU0VBRERSKHB2cikJKHB2ci5wdnJbOF0gJiBQVlI4X0RDQUNIRV9CQVNFQUREUl9NQVNLKQotI2RlZmluZSBQVlJfRENBQ0hFX0hJR0hBRERSKHB2cikJKHB2ci5wdnJbOV0gJiBQVlI5X0RDQUNIRV9ISUdIQUREUl9NQVNLKQorI2RlZmluZSBQVlJfVEFSR0VUX0ZBTUlMWShfcHZyKSBcCisJCQkoKF9wdnIucHZyWzEwXSAmIFBWUjEwX1RBUkdFVF9GQU1JTFlfTUFTSykgPj4gMjQpCiAKLSNkZWZpbmUgUFZSX1RBUkdFVF9GQU1JTFkocHZyKQkoKHB2ci5wdnJbMTBdICYgUFZSMTBfVEFSR0VUX0ZBTUlMWV9NQVNLKSA+PiAyNCkKLQotI2RlZmluZSBQVlJfTVNSX1JFU0VUX1ZBTFVFKHB2cikgXAotCQkJCShwdnIucHZyWzExXSAmIFBWUjExX01TUl9SRVNFVF9WQUxVRV9NQVNLKQorI2RlZmluZSBQVlJfTVNSX1JFU0VUX1ZBTFVFKF9wdnIpIFwKKwkJCShfcHZyLnB2clsxMV0gJiBQVlIxMV9NU1JfUkVTRVRfVkFMVUVfTUFTSykKIAogLyogbW11ICovCi0jZGVmaW5lIFBWUl9VU0VfTU1VKHB2cikJKChwdnIucHZyWzExXSAmIFBWUjExX1VTRV9NTVUpID4+IDMwKQotI2RlZmluZSBQVlJfTU1VX0lUTEJfU0laRShwdnIpCShwdnIucHZyWzExXSAmIFBWUjExX01NVV9JVExCX1NJWkUpCi0jZGVmaW5lIFBWUl9NTVVfRFRMQl9TSVpFKHB2cikJKHB2ci5wdnJbMTFdICYgUFZSMTFfTU1VX0RUTEJfU0laRSkKLSNkZWZpbmUgUFZSX01NVV9UTEJfQUNDRVNTKHB2cikJKHB2ci5wdnJbMTFdICYgUFZSMTFfTU1VX1RMQl9BQ0NFU1MpCi0jZGVmaW5lIFBWUl9NTVVfWk9ORVMocHZyKQkocHZyLnB2clsxMV0gJiBQVlIxMV9NTVVfWk9ORVMpCisjZGVmaW5lIFBWUl9VU0VfTU1VKF9wdnIpCQkoKF9wdnIucHZyWzExXSAmIFBWUjExX1VTRV9NTVUpID4+IDMwKQorI2RlZmluZSBQVlJfTU1VX0lUTEJfU0laRShfcHZyKQkJKF9wdnIucHZyWzExXSAmIFBWUjExX01NVV9JVExCX1NJWkUpCisjZGVmaW5lIFBWUl9NTVVfRFRMQl9TSVpFKF9wdnIpCQkoX3B2ci5wdnJbMTFdICYgUFZSMTFfTU1VX0RUTEJfU0laRSkKKyNkZWZpbmUgUFZSX01NVV9UTEJfQUNDRVNTKF9wdnIpCShfcHZyLnB2clsxMV0gJiBQVlIxMV9NTVVfVExCX0FDQ0VTUykKKyNkZWZpbmUgUFZSX01NVV9aT05FUyhfcHZyKQkJKF9wdnIucHZyWzExXSAmIFBWUjExX01NVV9aT05FUykKIAogLyogZW5kaWFuICovCi0jZGVmaW5lIFBWUl9FTkRJQU4ocHZyKQkocHZyLnB2clswXSAmIFBWUjBfRU5ESSkKKyNkZWZpbmUgUFZSX0VORElBTihfcHZyKQkoX3B2ci5wdnJbMF0gJiBQVlIwX0VOREkpCiAKIGludCBjcHVfaGFzX3B2cih2b2lkKTsKIHZvaWQgZ2V0X3B2cihzdHJ1Y3QgcHZyX3MgKnB2cik7CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jcHVpbmZvLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jcHVpbmZvLmMKaW5kZXggODdjNzlmYS4uMmMzMDlmYyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY3B1aW5mby5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NwdWluZm8uYwpAQCAtMzIsNiArMzIsNyBAQAogCXsiNy4zMC5hIiwgMHgxMH0sCiAJeyI3LjMwLmIiLCAweDExfSwKIAl7IjguMDAuYSIsIDB4MTJ9LAorCXsiOC4wMC5iIiwgMHgxM30sCiAJe05VTEwsIDB9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS5TCmluZGV4IDgxOTIzOGIuLjQxYzMwY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlMKQEAgLTI4NywyNSArMjg3LDQ0IEBACiAgKiBhcmUgbWFza2VkLiBUaGlzIGlzIG5pY2UsIG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gQ0xJIGJlZm9yZSBzdGF0ZSBzYXZlCiAgKi8KIENfRU5UUlkoX3VzZXJfZXhjZXB0aW9uKToKLQlhZGRpCXIxNCwgcjE0LCA0CS8qIHJldHVybiBhZGRyZXNzIGlzIDQgYnl0ZSBhZnRlciBjYWxsICovCiAJc3dpCXIxLCByMCwgVE9QSFlTKFBFUl9DUFUoRU5UUllfU1ApKSAvKiBzYXZlIHN0YWNrICovCisJYWRkaQlyMTQsIHIxNCwgNAkvKiByZXR1cm4gYWRkcmVzcyBpcyA0IGJ5dGUgYWZ0ZXIgY2FsbCAqLwogCisJbWZzCXIxLCBybXNyCisJbm9wCisJYW5kaQlyMSwgcjEsIE1TUl9VTVMKKwlibmVpCXIxLCAxZgorCisvKiBLZXJuZWwtbW9kZSBzdGF0ZSBzYXZlIC0ga2VybmVsIGV4ZWN2ZSAqLworCWx3aQlyMSwgcjAsIFRPUEhZUyhQRVJfQ1BVKEVOVFJZX1NQKSk7IC8qIFJlbG9hZCBrZXJuZWwgc3RhY2stcHRyKi8KKwl0b3BoeXMocjEscjEpOworCisJYWRkaWsJcjEsIHIxLCAtU1RBVEVfU0FWRV9TSVpFOyAvKiBNYWtlIHJvb20gb24gdGhlIHN0YWNrLiAqLworCVNBVkVfUkVHUworCisJc3dpCXIxLCByMSwgUFRPICsgUFRfTU9ERTsgLyogcHRfcmVncyAtPiBrZXJuZWwgbW9kZSAqLworCWJyaWQJMmY7CisJbm9wOwkJCQkvKiBGaWxsIGRlbGF5IHNsb3QgKi8KKworLyogVXNlci1tb2RlIHN0YXRlIHNhdmUuICAqLworMToKIAlsd2kJcjEsIHIwLCBUT1BIWVMoUEVSX0NQVShDVVJSRU5UX1NBVkUpKTsgLyogZ2V0IHNhdmVkIGN1cnJlbnQgKi8KIAl0b3BoeXMocjEscjEpOwogCWx3aQlyMSwgcjEsIFRTX1RIUkVBRF9JTkZPOwkvKiBnZXQgc3RhY2sgZnJvbSB0YXNrX3N0cnVjdCAqLwotCS8qIE1TIHRoZXNlIHRocmVlIGluc3RydWN0aW9ucyBjYW4gYmUgYWRkZWQgdG8gb25lICovCi0JLyogYWRkaWsJcjEsIHIxLCBUSFJFQURfU0laRTsgKi8KLQkvKiB0b3BoeXMocjEscjEpOyAqLwotCS8qIGFkZGlrCXIxLCByMSwgLVNUQVRFX1NBVkVfU0laRTsgKi8KLQlhZGRpayByMSwgcjEsIFRIUkVBRF9TSVpFICsgQ09ORklHX0tFUk5FTF9CQVNFX0FERFIgLSBDT05GSUdfS0VSTkVMX1NUQVJUIC0gU1RBVEVfU0FWRV9TSVpFOworLyogY2FsY3VsYXRlIGtlcm5lbCBzdGFjayBwb2ludGVyIGZyb20gdGFzayBzdHJ1Y3QgOGsgKi8KKwlhZGRpawlyMSwgcjEsIFRIUkVBRF9TSVpFOworCXRvcGh5cyhyMSxyMSk7CisKKwlhZGRpawlyMSwgcjEsIC1TVEFURV9TQVZFX1NJWkU7IC8qIE1ha2Ugcm9vbSBvbiB0aGUgc3RhY2suICAqLwogCVNBVkVfUkVHUwogCXN3aQlyMCwgcjEsIFBUTyArIFBUX1IzCiAJc3dpCXIwLCByMSwgUFRPICsgUFRfUjQKIAorCXN3aQlyMCwgcjEsIFBUTyArIFBUX01PREU7CQkJLyogV2FzIGluIHVzZXItbW9kZS4gKi8KIAlsd2kJcjExLCByMCwgVE9QSFlTKFBFUl9DUFUoRU5UUllfU1ApKTsKIAlzd2kJcjExLCByMSwgUFRPK1BUX1IxOwkJLyogU3RvcmUgdXNlciBTUC4gICovCiAJY2xlYXJfdW1zOwotCWx3aQlDVVJSRU5UX1RBU0ssIHIwLCBUT1BIWVMoUEVSX0NQVShDVVJSRU5UX1NBVkUpKTsKKzI6CWx3aQlDVVJSRU5UX1RBU0ssIHIwLCBUT1BIWVMoUEVSX0NQVShDVVJSRU5UX1NBVkUpKTsKIAkvKiBTYXZlIGF3YXkgdGhlIHN5c2NhbGwgbnVtYmVyLiAgKi8KIAlzd2kJcjEyLCByMSwgUFRPK1BUX1IwOwogCXRvdmlydChyMSxyMSkKQEAgLTM3NSw2ICszOTQsOSBAQAogCXN3aQlyMywgcjEsIFBUTyArIFBUX1IzCiAJc3dpCXI0LCByMSwgUFRPICsgUFRfUjQKIAorCWx3aQlyMTEsIHIxLCBQVE8gKyBQVF9NT0RFOworLyogU2VlIGlmIHJldHVybmluZyB0byBrZXJuZWwgbW9kZSwgaWYgc28sIHNraXAgcmVzY2hlZCAmYy4gICovCisJYm5laQlyMTEsIDJmOwogCS8qIFdlJ3JlIHJldHVybmluZyB0byB1c2VyIG1vZGUsIHNvIGNoZWNrIGZvciB2YXJpb3VzIGNvbmRpdGlvbnMgdGhhdAogCSAqIHRyaWdnZXIgcmVzY2hlZHVsaW5nLiAqLwogCS8qIEZJWE1FOiBSZXN0cnVjdHVyZSBhbGwgdGhlc2UgZmxhZyBjaGVja3MuICovCkBAIC00MTcsNiArNDM5LDE2IEBACiAJUkVTVE9SRV9SRUdTOwogCWFkZGlrCXIxLCByMSwgU1RBVEVfU0FWRV9TSVpFCQkvKiBDbGVhbiB1cCBzdGFjayBzcGFjZS4gICovCiAJbHdpCXIxLCByMSwgUFRfUjEgLSBQVF9TSVpFOy8qIFJlc3RvcmUgdXNlciBzdGFjayBwb2ludGVyLiAqLworCWJyaQk2ZjsKKworLyogUmV0dXJuIHRvIGtlcm5lbCBzdGF0ZS4gICovCisyOglzZXRfYmlwOwkJCS8qICBJbnRzIG1hc2tlZCBmb3Igc3RhdGUgcmVzdG9yZSAqLworCVZNX09GRjsKKwl0b3BoeXMocjEscjEpOworCVJFU1RPUkVfUkVHUzsKKwlhZGRpawlyMSwgcjEsIFNUQVRFX1NBVkVfU0laRQkJLyogQ2xlYW4gdXAgc3RhY2sgc3BhY2UuICAqLworCXRvdmlydChyMSxyMSk7Cis2OgogVFJBUF9yZXR1cm46CQkvKiBNYWtlIGdsb2JhbCBzeW1ib2wgZm9yIGRlYnVnZ2luZyAqLwogCXJ0YmQJcjE0LCAwOwkvKiBJbnN0cnVjdGlvbnMgdG8gcmV0dXJuIGZyb20gYW4gSVJRICovCiAJbm9wOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9leGNlcHRpb25zLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2V4Y2VwdGlvbnMuYwppbmRleCA0NzhmMjk0Li5hN2ZhNmFlIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2V4Y2VwdGlvbnMuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2V4Y2VwdGlvbnMuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjZGVmaW5lIE1JQ1JPQkxBWkVfSUxMX09QQ09ERV9FWENFUFRJT04JMHgwMgogI2RlZmluZSBNSUNST0JMQVpFX0lCVVNfRVhDRVBUSU9OCTB4MDMKQEAgLTUyLDYgKzUzLDggQEAKIHZvaWQgc3dfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCV9leGNlcHRpb24oU0lHVFJBUCwgcmVncywgVFJBUF9CUktQVCwgcmVncy0+cjE2KTsKKwlmbHVzaF9kY2FjaGVfcmFuZ2UocmVncy0+cjE2LCByZWdzLT5yMTYgKyAweDQpOworCWZsdXNoX2ljYWNoZV9yYW5nZShyZWdzLT5yMTYsIHJlZ3MtPnIxNiArIDB4NCk7CiB9CiAKIHZvaWQgX2V4Y2VwdGlvbihpbnQgc2lnbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TCmluZGV4IDc4MTE5NTQuLjI1ZjZlMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMKQEAgLTk0NSwxMSArOTQ1LDIwIEBACiBzdG9yZTQ6CXNiaQlyMywgcjQsIDM7CS8qIERlbGF5IHNsb3QgKi8KIGV4X3Nod192bToKIAkvKiBTdG9yZSB0aGUgbG93ZXIgaGFsZi13b3JkLCBieXRlLWJ5LWJ5dGUgaW50byBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisjaWZkZWYgX19NSUNST0JMQVpFRUxfXworCWxidWkJcjMsIHI1LCAwOworc3RvcmU1OglzYmkJcjMsIHI0LCAwOworCWxidWkJcjMsIHI1LCAxOworCWJyaWQJcmV0X2Zyb21fZXhjOworc3RvcmU2OglzYmkJcjMsIHI0LCAxOwkvKiBEZWxheSBzbG90ICovCisjZWxzZQogCWxidWkJcjMsIHI1LCAyOwogc3RvcmU1OglzYmkJcjMsIHI0LCAwOwogCWxidWkJcjMsIHI1LCAzOwogCWJyaWQJcmV0X2Zyb21fZXhjOwogc3RvcmU2OglzYmkJcjMsIHI0LCAxOwkvKiBEZWxheSBzbG90ICovCisjZW5kaWYKKwogZXhfc3dfZW5kX3ZtOgkJCS8qIEV4Y2VwdGlvbiBoYW5kbGluZyBvZiBzdG9yZSB3b3JkLCBlbmRzLiAqLwogCiAvKiBXZSBoYXZlIHRvIHByZXZlbnQgY2FzZXMgdGhhdCBnZXQvcHV0X3VzZXIgbWFjcm9zIGdldCB1bmFsaWduZWQgcG9pbnRlcgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9tLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb20uYwppbmRleCBhMTA1MzAxLi5jODgxMzkzIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb20uYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb20uYwpAQCAtNjEsMTQgKzYxLDEyIEBACiAJY2hhciAqcDsKIAlpbnQgKmFkZHI7CiAKLQlwcl9kZWJ1Zygic2VhcmNoIFwiY2hvc2VuXCIsIGRlcHRoOiAlZCwgdW5hbWU6ICVzXG4iLCBkZXB0aCwgdW5hbWUpOworCXByX2RlYnVnKCJzZWFyY2ggXCJzZXJpYWxcIiwgZGVwdGg6ICVkLCB1bmFtZTogJXNcbiIsIGRlcHRoLCB1bmFtZSk7CiAKIC8qIGZpbmQgYWxsIHNlcmlhbCBub2RlcyAqLwogCWlmIChzdHJuY21wKHVuYW1lLCAic2VyaWFsIiwgNikgIT0gMCkKIAkJcmV0dXJuIDA7CiAKLQllYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQobm9kZSk7Ci0KIC8qIGZpbmQgY29tcGF0aWJsZSBub2RlIHdpdGggdWFydGxpdGUgKi8KIAlwID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiY29tcGF0aWJsZSIsICZsKTsKIAlpZiAoKHN0cm5jbXAocCwgInhsbngseHBzLXVhcnRsaXRlIiwgMTcpICE9IDApICYmCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggOTZhODhjMy4uMzQ1MWJkZSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTIzLDIwICsxMjMsMTAgQEAKIAogCV9faW5pdF9lbmRfYmVmb3JlX2luaXRyYW1mcyA9IC47CiAKLQkuaW5pdC5yYW1mcyBBTElHTihQQUdFX1NJWkUpIDogQVQoQUREUiguaW5pdC5yYW1mcykgLSBMT0FEX09GRlNFVCkgewotCQlfX2luaXRyYW1mc19zdGFydCA9IC47Ci0JCSooLmluaXQucmFtZnMpCi0JCV9faW5pdHJhbWZzX2VuZCA9IC47Ci0JCS4gPSBBTElHTig0KTsKLQkJTE9ORygwKTsKLS8qCi0gKiBGSVhNRSB0aGlzIGNhbiBicmVhayBpbml0cmFtZnMgZm9yIE1NVS4KLSAqIFBhZCBpbml0LnJhbWZzIHVwIHRvIHBhZ2UgYm91bmRhcnksCi0gKiBzbyB0aGF0IF9faW5pdF9lbmQgPT0gX19ic3Nfc3RhcnQuIFRoaXMgd2lsbCBtYWtlIGltYWdlLmVsZgotICogY29uc2lzdGVudCB3aXRoIHRoZSBpbWFnZS5iaW4KLSAqLwotCQkvKiAuID0gQUxJR04oUEFHRV9TSVpFKTsgKi8KKwkuaW5pdC5yYW1mcyA6IEFUKEFERFIoLmluaXQucmFtZnMpIC0gTE9BRF9PRkZTRVQpIHsKKwkJSU5JVF9SQU1fRlMKIAl9CisKIAlfX2luaXRfZW5kID0gLjsKIAogCS5ic3MgQUxJR04gKFBBR0VfU0laRSkgOiBBVChBRERSKC5ic3MpIC0gTE9BRF9PRkZTRVQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9saWIvbWVtbW92ZS5jIGIvYXJjaC9taWNyb2JsYXplL2xpYi9tZW1tb3ZlLmMKaW5kZXggMTIzZTM2MS4uODEwZmQ2OCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2xpYi9tZW1tb3ZlLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2xpYi9tZW1tb3ZlLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCQkJZm9yICg7IGMgPj0gNDsgYyAtPSA0KSB7CiAJCQkJdmFsdWUgPSAqLS1pX3NyYzsKIAkJCQkqLS1pX2RzdCA9IGJ1Zl9ob2xkIHwgKCh2YWx1ZSAmIDB4RkYwMDAwMDApPj4gMjQpOwotCQkJCWJ1Zl9ob2xkID0gKHZhbHVlICYgMHhGRkZGRkYpIDw8IDg7OworCQkJCWJ1Zl9ob2xkID0gKHZhbHVlICYgMHhGRkZGRkYpIDw8IDg7CiAJCQl9CiAjZW5kaWYKIAkJCS8qIFJlYWxpZ24gdGhlIHNvdXJjZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2xpYi9tdWxkaTMuUyBiL2FyY2gvbWljcm9ibGF6ZS9saWIvbXVsZGkzLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZWFhOGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9taWNyb2JsYXplL2xpYi9tdWxkaTMuUworKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotCi0vKgotICogTXVsdGlwbHkgb3BlcmF0aW9uIGZvciA2NCBiaXQgaW50ZWdlcnMsIGZvciBkZXZpY2VzIHdpdGggaGFyZCBtdWx0aXBseQotICoJSW5wdXQgOglPcGVyYW5kMVtIXSBpbiBSZWcgcjUKLSAqCQlPcGVyYW5kMVtMXSBpbiBSZWcgcjYKLSAqCQlPcGVyYW5kMltIXSBpbiBSZWcgcjcKLSAqCQlPcGVyYW5kMltMXSBpbiBSZWcgcjgKLSAqCU91dHB1dDogUmVzdWx0W0hdIGluIFJlZyByMwotICoJCVJlc3VsdFtMXSBpbiBSZWcgcjQKLSAqCi0gKiBFeHBsYWluYXRpb246Ci0gKgotICoJQm90aCB0aGUgaW5wdXQgbnVtYmVycyBhcmUgZGl2aWRlZCBpbnRvIDE2IGJpdCBudW1iZXIgYXMgZm9sbG93cwotICoJCW9wMSA9IEEgQiBDIEQKLSAqCQlvcDIgPSBFIEYgRyBICi0gKglyZXN1bHQgPSBEICogSAotICoJCSArIChDICogSCArIEQgKiBHKSA8PCAxNgotICoJCSArIChCICogSCArIEMgKiBHICsgRCAqIEYpIDw8IDMyCi0gKgkJICsgKEEgKiBIICsgQiAqIEcgKyBDICogRiArIEQgKiBFKSA8PCA0OAotICoKLSAqCU9ubHkgNjQgYml0cyBvZiB0aGUgb3V0cHV0IGFyZSBjb25zaWRlcmVkCi0gKi8KLQotCS50ZXh0Ci0JLmdsb2JsCV9fbXVsZGkzCi0JLnR5cGUgX19tdWxkaTMsIEBmdW5jdGlvbgotCS5lbnQgX19tdWxkaTMKLQotX19tdWxkaTM6Ci0JYWRkaQlyMSwgcjEsIC00MAotCi0vKiBTYXZlIHRoZSBpbnB1dCBvcGVyYW5kcyBvbiB0aGUgY2FsbGVyJ3Mgc3RhY2sgKi8KLQlzd2kJcjUsIHIxLCA0NAotCXN3aQlyNiwgcjEsIDQ4Ci0Jc3dpCXI3LCByMSwgNTIKLQlzd2kJcjgsIHIxLCA1NgotCi0vKiBTdG9yZSBhbGwgdGhlIGNhbGxlZSBzYXZlZCByZWdpc3RlcnMgKi8KLQlzdwlyMjAsIHIxLCByMAotCXN3aQlyMjEsIHIxLCA0Ci0Jc3dpCXIyMiwgcjEsIDgKLQlzd2kJcjIzLCByMSwgMTIKLQlzd2kJcjI0LCByMSwgMTYKLQlzd2kJcjI1LCByMSwgMjAKLQlzd2kJcjI2LCByMSwgMjQKLQlzd2kJcjI3LCByMSwgMjgKLQotLyogTG9hZCBhbGwgdGhlIDE2IGJpdCB2YWx1ZXMgZm9yIEEgdGhydSBIICovCi0JbGh1aQlyMjAsIHIxLCA0NCAvKiBBICovCi0JbGh1aQlyMjEsIHIxLCA0NiAvKiBCICovCi0JbGh1aQlyMjIsIHIxLCA0OCAvKiBDICovCi0JbGh1aQlyMjMsIHIxLCA1MCAvKiBEICovCi0JbGh1aQlyMjQsIHIxLCA1MiAvKiBFICovCi0JbGh1aQlyMjUsIHIxLCA1NCAvKiBGICovCi0JbGh1aQlyMjYsIHIxLCA1NiAvKiBHICovCi0JbGh1aQlyMjcsIHIxLCA1OCAvKiBIICovCi0KLS8qIEQgKiBIID09PiBMU0Igb2YgdGhlIHJlc3VsdCBvbiBzdGFjayA9PT4gU3RvcmUxICovCi0JbXVsCXI5LCByMjMsIHIyNwotCXN3aQlyOSwgcjEsIDM2IC8qIFBvczIgYW5kIFBvczMgKi8KLQotLyogSGkgKFN0b3JlMSkgKyBDICogSCArIEQgKiBHID09PiBTdG9yZTIgPT0+IFBvczEgYW5kIFBvczIgKi8KLS8qIFN0b3JlIHRoZSBjYXJyeSBnZW5lcmF0ZWQgaW4gcG9zaXRpb24gMiBmb3IgUG9zIDMgKi8KLQlsaHVpCXIxMSwgcjEsIDM2IC8qIFBvczIgKi8KLQltdWwJcjksIHIyMiwgcjI3IC8qIEMgKiBIICovCi0JbXVsCXIxMCwgcjIzLCByMjYgLyogRCAqIEcgKi8KLQlhZGQJcjksIHI5LCByMTAKLQlhZGRjCXIxMiwgcjAsIHIwCi0JYWRkCXI5LCByOSwgcjExCi0JYWRkYwlyMTIsIHIxMiwgcjAgLyogU3RvcmUgdGhlIENhcnJ5ICovCi0Jc2hpCXI5LCByMSwgMzYgLyogU3RvcmUgUG9zMiAqLwotCXN3aQlyOSwgcjEsIDMyCi0JbGh1aQlyMTEsIHIxLCAzMgotCXNoaQlyMTEsIHIxLCAzNCAvKiBTdG9yZSBQb3MxICovCi0KLS8qIEhpIChTdG9yZTIpICsgQiAqIEggKyBDICogRyArIEQgKiBGID09PiBTdG9yZTMgPT0+IFBvczAgYW5kIFBvczEgKi8KLQltdWwJcjksIHIyMSwgcjI3IC8qIEIgKiBIICovCi0JbXVsCXIxMCwgcjIyLCByMjYgLyogQyAqIEcgKi8KLQltdWwJcjcsIHIyMywgcjI1IC8qIEQgKiBGICovCi0JYWRkCXI5LCByOSwgcjExCi0JYWRkCXI5LCByOSwgcjEwCi0JYWRkCXI5LCByOSwgcjcKLQlzd2kJcjksIHIxLCAzMiAvKiBQb3MwIGFuZCBQb3MxICovCi0KLS8qIEhpIChTdG9yZTMpICsgQSAqIEggKyBCICogRyArIEMgKiBGICsgRCAqIEUgPT0+IFN0b3JlMyA9PT4gUG9zMCAqLwotCWxodWkJcjExLCByMSwgMzIgLyogUG9zMCAqLwotCW11bAlyOSwgcjIwLCByMjcgLyogQSAqIEggKi8KLQltdWwJcjEwLCByMjEsIHIyNiAvKiBCICogRyAqLwotCW11bAlyNywgcjIyLCByMjUgLyogQyAqIEYgKi8KLQltdWwJcjgsIHIyMywgcjI0IC8qIEQgKiBFICovCi0JYWRkCXI5LCByOSwgcjExCi0JYWRkIAlyOSwgcjksIHIxMAotCWFkZAlyOSwgcjksIHI3Ci0JYWRkCXI5LCByOSwgcjgKLQlzZXh0MTYJcjksIHI5IC8qIFNpZ24gZXh0ZW5kIHRoZSBNU0IgKi8KLQlzaGkJcjksIHIxLCAzMgotCi0vKiBNb3ZlIHJlc3VsdHMgdG8gcjMgYW5kIHI0ICovCi0JbGh1aQlyMywgcjEsIDMyCi0JYWRkCXIzLCByMywgcjEyCi0Jc2hpCXIzLCByMSwgMzIKLQlsd2kJcjMsIHIxLCAzMiAvKiBIaSBQYXJ0ICovCi0JbHdpCXI0LCByMSwgMzYgLyogTG8gUGFydCAqLwotCi0vKiBSZXN0b3JlIENhbGxlZSBzYXZlZCByZWdpc3RlcnMgKi8KLQlsdwlyMjAsIHIxLCByMAotCWx3aQlyMjEsIHIxLCA0Ci0JbHdpCXIyMiwgcjEsIDgKLQlsd2kJcjIzLCByMSwgMTIKLQlsd2kJcjI0LCByMSwgMTYKLQlsd2kJcjI1LCByMSwgMjAKLQlsd2kJcjI2LCByMSwgMjQKLQlsd2kJcjI3LCByMSwgMjgKLQotLyogUmVzdG9yZSBGcmFtZSBhbmQgcmV0dXJuICovCi0JcnRzZAlyMTUsIDgKLQlhZGRpCXIxLCByMSwgNDAKLQotLnNpemUgX19tdWxkaTMsIC4gLSBfX211bGRpMwotLmVuZCBfX211bGRpMwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2xpYi9tdWxkaTMuYyBiL2FyY2gvbWljcm9ibGF6ZS9saWIvbXVsZGkzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ4NjBlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9saWIvbXVsZGkzLmMKQEAgLTAsMCArMSw2MCBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAibGliZ2NjLmgiCisKKyNkZWZpbmUgRFd0eXBlIGxvbmcgbG9uZworI2RlZmluZSBVV3R5cGUgdW5zaWduZWQgbG9uZworI2RlZmluZSBVSFd0eXBlIHVuc2lnbmVkIHNob3J0CisKKyNkZWZpbmUgV19UWVBFX1NJWkUgMzIKKworI2RlZmluZSBfX2xsX0IgKChVV3R5cGUpIDEgPDwgKFdfVFlQRV9TSVpFIC8gMikpCisjZGVmaW5lIF9fbGxfbG93cGFydCh0KSAoKFVXdHlwZSkgKHQpICYgKF9fbGxfQiAtIDEpKQorI2RlZmluZSBfX2xsX2hpZ2hwYXJ0KHQpICgoVVd0eXBlKSAodCkgPj4gKFdfVFlQRV9TSVpFIC8gMikpCisKKy8qIElmIHdlIHN0aWxsIGRvbid0IGhhdmUgdW11bF9wcG1tLCBkZWZpbmUgaXQgdXNpbmcgcGxhaW4gQy4gICovCisjaWYgIWRlZmluZWQodW11bF9wcG1tKQorI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCVVXdHlwZSBfX3gwLCBfX3gxLCBfX3gyLCBfX3gzOwkJCQlcCisJCVVIV3R5cGUgX191bCwgX192bCwgX191aCwgX192aDsJCQkJXAorCQkJCQkJCQkJXAorCQlfX3VsID0gX19sbF9sb3dwYXJ0KHUpOwkJCQkJXAorCQlfX3VoID0gX19sbF9oaWdocGFydCh1KTsJCQkJXAorCQlfX3ZsID0gX19sbF9sb3dwYXJ0KHYpOwkJCQkJXAorCQlfX3ZoID0gX19sbF9oaWdocGFydCh2KTsJCQkJXAorCQkJCQkJCQkJXAorCQlfX3gwID0gKFVXdHlwZSkgX191bCAqIF9fdmw7CQkJCVwKKwkJX194MSA9IChVV3R5cGUpIF9fdWwgKiBfX3ZoOwkJCQlcCisJCV9feDIgPSAoVVd0eXBlKSBfX3VoICogX192bDsJCQkJXAorCQlfX3gzID0gKFVXdHlwZSkgX191aCAqIF9fdmg7CQkJCVwKKwkJCQkJCQkJCVwKKwkJX194MSArPSBfX2xsX2hpZ2hwYXJ0KF9feDApOyAvKiB0aGlzIGNhbid0IGdpdmUgY2FycnkgKi9cCisJCV9feDEgKz0gX194MjsgLyogYnV0IHRoaXMgaW5kZWVkIGNhbiAqLwkJCVwKKwkJaWYgKF9feDEgPCBfX3gyKSAvKiBkaWQgd2UgZ2V0IGl0PyAqLwkJCVwKKwkJX194MyArPSBfX2xsX0I7IC8qIHllcywgYWRkIGl0IGluIHRoZSBwcm9wZXIgcG9zICovCVwKKwkJCQkJCQkJCVwKKwkJKHcxKSA9IF9feDMgKyBfX2xsX2hpZ2hwYXJ0KF9feDEpOwkJCVwKKwkJKHcwKSA9IF9fbGxfbG93cGFydChfX3gxKSAqIF9fbGxfQiArIF9fbGxfbG93cGFydChfX3gwKTtcCisJfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX191bXVsc2lkaTMpCisjZGVmaW5lIF9fdW11bHNpZGkzKHUsIHYpICh7CQkJCVwKKwlEV3VuaW9uIF9fdzsJCQkJCVwKKwl1bXVsX3BwbW0oX193LnMuaGlnaCwgX193LnMubG93LCB1LCB2KTsJCVwKKwlfX3cubGw7CQkJCQkJXAorCX0pCisjZW5kaWYKKworRFd0eXBlIF9fbXVsZGkzKERXdHlwZSB1LCBEV3R5cGUgdikKK3sKKwljb25zdCBEV3VuaW9uIHV1ID0gey5sbCA9IHV9OworCWNvbnN0IERXdW5pb24gdnYgPSB7LmxsID0gdn07CisJRFd1bmlvbiB3ID0gey5sbCA9IF9fdW11bHNpZGkzKHV1LnMubG93LCB2di5zLmxvdyl9OworCisJdy5zLmhpZ2ggKz0gKChVV3R5cGUpIHV1LnMubG93ICogKFVXdHlwZSkgdnYucy5oaWdoCisJCSsgKFVXdHlwZSkgdXUucy5oaWdoICogKFVXdHlwZSkgdnYucy5sb3cpOworCisJcmV0dXJuIHcubGw7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcG93ZXIuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wb3dlci5jCmluZGV4IGU1OTE2YTUuLjY0N2U1MTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wb3dlci5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wb3dlci5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAlhdV93cml0ZWwoc2xlZXBfdXNiWzFdLCBVU0JEX0VOQUJMRSk7CiAJYXVfc3luYygpOwogI2Vsc2UKLQkvKiBlbmFibGUgYWNjY2VzIHRvIE9URyBtZW1vcnkgKi8KKwkvKiBlbmFibGUgYWNjZXNzIHRvIE9URyBtZW1vcnkgKi8KIAlhdV93cml0ZWwoYXVfcmVhZGwoVVNCX01TUl9CQVNFICsgNCkgfCAoMSA8PCA2KSwgVVNCX01TUl9CQVNFICsgNCk7CiAJYXVfc3luYygpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcG0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbS5jCmluZGV4IDRiYmQzMTMuLmFjYWY5MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbS5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGRiMXhfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBkYjF4X3BtX29wcyA9IHsKIAkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKIAkuYmVnaW4JCT0gZGIxeF9wbV9iZWdpbiwKIAkuZW50ZXIJCT0gZGIxeF9wbV9lbnRlciwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWMvdGltZS5jIGIvYXJjaC9taXBzL2RlYy90aW1lLmMKaW5kZXggMDJmNTA1Zi4uZWE1N2YzOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy90aW1lLmMKKysrIGIvYXJjaC9taXBzL2RlYy90aW1lLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcywgUlRDX1NFQ09ORFMpOwogCQlDTU9TX1dSSVRFKHJlYWxfbWludXRlcywgUlRDX01JTlVURVMpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJcHJpbnRrX29uY2UoS0VSTl9OT1RJQ0UKIAkJICAgICAgICJzZXRfcnRjX21tc3M6IGNhbid0IHVwZGF0ZSBmcm9tICVkIHRvICVkXG4iLAogCQkgICAgICAgY21vc19taW51dGVzLCByZWFsX21pbnV0ZXMpOwogCQlyZXR2YWwgPSAtMTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvaW9yZW1hcC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pb3JlbWFwLmgKaW5kZXggMDc2ZjJlZS4uYzg2ZWYwOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pb3JlbWFwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pb3JlbWFwLmgKQEAgLTg4LDcgKzg4LDcgQEAKIH0KIAogLyogVGhlc2UgYXJlIG5vdCBwb3J0YWJsZSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGRyaXZlcnMuIERyaXZlcnMgc2hvdWxkCi0gKiBiZSB1c2luZyBpb3JlbWFwKCkgYW5kIGZyaWVuZHMgdG8gbWFwIHBoeXNpY2FsIGFkZHJlc2VzIHRvIHZpcnR1YWwKKyAqIGJlIHVzaW5nIGlvcmVtYXAoKSBhbmQgZnJpZW5kcyB0byBtYXAgcGh5c2ljYWwgYWRkcmVzc2VzIHRvIHZpcnR1YWwKICAqIGFkZHJlc3NlcyBhbmQgZG1hX21hcCooKSBhbmQgZnJpZW5kcyB0byBtYXAgdmlydHVhbCBhZGRyZXNzZXMgaW50byBETUEKICAqIGFkZHJlc3NlcyBhbmQgYmFjay4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21jMTQ2ODE4LXRpbWUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYzE0NjgxOC10aW1lLmgKaW5kZXggMTk5YjQ1Ny4uNGEwOGRiZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21jMTQ2ODE4LXRpbWUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWMxNDY4MTgtdGltZS5oCkBAIC02Niw3ICs2Niw3IEBACiAJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLCBSVENfU0VDT05EUyk7CiAJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLCBSVENfTUlOVVRFUyk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORworCQlwcmludGtfb25jZShLRVJOX05PVElDRQogCQkgICAgICAgInNldF9ydGNfbW1zczogY2FuJ3QgdXBkYXRlIGZyb20gJWQgdG8gJWRcbiIsCiAJCSAgICAgICBjbW9zX21pbnV0ZXMsIHJlYWxfbWludXRlcyk7CiAJCXJldHZhbCA9IC0xOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC9ib2FyZC1xaV9sYjYwLmMgYi9hcmNoL21pcHMvano0NzQwL2JvYXJkLXFpX2xiNjAuYwppbmRleCA1YzBhMzU3Li4yYzBlMTA3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvano0NzQwL2JvYXJkLXFpX2xiNjAuYworKysgYi9hcmNoL21pcHMvano0NzQwL2JvYXJkLXFpX2xiNjAuYwpAQCAtNjUsNyArNjUsNyBAQAogCiAvKiBFYXJseSBwcm90b3R5cGVzIG9mIHRoZSBRSSBMQjYwIGhhZCBvbmx5IDFHQiBvZiBOQU5ELgogICogSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGVzZSBkZXZpY2VzIGFzd2VsbCB0aGUgcGFydGl0aW9uIGFuZCBlY2MgbGF5b3V0IGlzCi0gKiBpbml0YWxpemVkIGRlcGVuZGluZyBvbiB0aGUgTkFORCBzaXplICovCisgKiBpbml0aWFsaXplZCBkZXBlbmRpbmcgb24gdGhlIE5BTkQgc2l6ZSAqLwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHFpX2xiNjBfcGFydGl0aW9uc18xZ2JbXSA9IHsKIAl7CiAJCS5uYW1lID0gIk5BTkQgQk9PVCBwYXJ0aXRpb24iLApAQCAtNDY0LDcgKzQ2NCw3IEBACiAJYm9hcmRfZ3Bpb19zZXR1cCgpOwogCiAJaWYgKHFpX2xiNjBfaW5pdF9wbGF0Zm9ybV9kZXZpY2VzKCkpCi0JCXBhbmljKCJGYWlsZWQgdG8gaW5pdGFsaXplIHBsYXRmb3JtIGRldmljZXNcbiIpOworCQlwYW5pYygiRmFpbGVkIHRvIGluaXRpYWxpemUgcGxhdGZvcm0gZGV2aWNlc1xuIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qejQ3NDAvZ3Bpby5jIGIvYXJjaC9taXBzL2p6NDc0MC9ncGlvLmMKaW5kZXggMzhmNjBmMy4uODhlNmFlZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2p6NDc0MC9ncGlvLmMKKysrIGIvYXJjaC9taXBzL2p6NDc0MC9ncGlvLmMKQEAgLTU0Niw3ICs1NDYsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGp6NDc0MF9ncGlvX2NoaXBzKTsgKytpKQogCQlqejQ3NDBfZ3Bpb19jaGlwX2luaXQoJmp6NDc0MF9ncGlvX2NoaXBzW2ldLCBpKTsKIAotCXByaW50ayhLRVJOX0lORk8gIkpaNDc0MCBHUElPIGluaXRhbGl6ZWRcbiIpOworCXByaW50ayhLRVJOX0lORk8gIkpaNDc0MCBHUElPIGluaXRpYWxpemVkXG4iKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC9wbS5jIGIvYXJjaC9taXBzL2p6NDc0MC9wbS5jCmluZGV4IGE5OTk0NTguLjkwMmQ1YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qejQ3NDAvcG0uYworKysgYi9hcmNoL21pcHMvano0NzQwL3BtLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBqejQ3NDBfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBqejQ3NDBfcG1fb3BzID0gewogCS52YWxpZAkJPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAogCS5lbnRlcgkJPSBqejQ3NDBfcG1fZW50ZXIsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbS5jCmluZGV4IDZjMWZkOTAuLmY1NWUwN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcG0uYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BtLmMKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBsb29uZ3Nvbl9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGxvb25nc29uX3BtX29wcyA9IHsKIAkudmFsaWQJPSBsb29uZ3Nvbl9wbV92YWxpZF9zdGF0ZSwKIAkuZW50ZXIJPSBsb29uZ3Nvbl9wbV9lbnRlciwKIH07CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLW1lbW9yeS5jIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1tZW1vcnkuYwppbmRleCBiMjc0MTljLi5hOTZkMjgxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLW1lbW9yeS5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtbWVtb3J5LmMKQEAgLTQzLDcgKzQzLDcgQEAKIHN0YXRpYyBjaGFyICptdHlwZXNbM10gPSB7CiAJIkRvbnQgdXNlIG1lbW9yeSIsCiAJIllBTU9OIFBST00gbWVtb3J5IiwKLQkiRnJlZSBtZW1tb3J5IiwKKwkiRnJlZSBtZW1vcnkiLAogfTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaWUtb2N0ZW9uLmMgYi9hcmNoL21pcHMvcGNpL3BjaWUtb2N0ZW9uLmMKaW5kZXggMzg1ZjAzNS4uMDU4M2M0NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpZS1vY3Rlb24uYwpAQCAtOTAwLDcgKzkwMCw3IEBACiAJbWVtX2FjY2Vzc19zdWJpZC5zLnJvciA9IDA7CiAJLyogRGlzYWJsZSBSZWxheGVkIE9yZGVyaW5nIGZvciBXcml0ZXMuICovCiAJbWVtX2FjY2Vzc19zdWJpZC5zLnJvdyA9IDA7Ci0JLyogUENJZSBBZGRkcmVzcyBCaXRzIDw2MzozND4uICovCisJLyogUENJZSBBZGRyZXNzIEJpdHMgPDYzOjM0Pi4gKi8KIAltZW1fYWNjZXNzX3N1YmlkLnMuYmEgPSAwOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L21lbW9yeS5jIGIvYXJjaC9taXBzL3Bvd2VydHYvbWVtb3J5LmMKaW5kZXggNzM4ODBhZC4uZmIzZDI5NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3Bvd2VydHYvbWVtb3J5LmMKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvbWVtb3J5LmMKQEAgLTU3LDcgKzU3LDcgQEAKIHVuc2lnbmVkIGxvbmcgcHR2X21lbXNpemU7CiAKIC8qCi0gKiBzdHJ1Y3QgbG93X21lbV9yZXNlcnZlZCAtIEl0ZW1zIGluIGxvdyBtZW1tb3J5IHRoYXQgYXJlIHJlc2VydmVkCisgKiBzdHJ1Y3QgbG93X21lbV9yZXNlcnZlZCAtIEl0ZW1zIGluIGxvdyBtZW1vcnkgdGhhdCBhcmUgcmVzZXJ2ZWQKICAqIEBzdGFydDoJUGh5c2ljYWwgYWRkcmVzcyBvZiBpdGVtCiAgKiBAc2l6ZToJU2l6ZSwgaW4gYnl0ZXMsIG9mIHRoaXMgaXRlbQogICogQGlzX2FsaWFzZWQ6CVRydWUgaWYgdGhpcyBpcyBSQU0gYWxpYXNlZCBmcm9tIGFub3RoZXIgbG9jYXRpb24uIElmIGZhbHNlLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9wY2kuYyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvcGNpLmMKaW5kZXggOWEwYmU4MS4uOTZlNjlhMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9wY2kuYworKysgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3BjaS5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAogLyoKICAqIGFsbG9jYXRlIHBjaV9jb250cm9sbGVyIGFuZCByZXNvdXJjZXMuCi0gKiBtZW1fYmFzZSwgaW9fYmFzZTogcGh5c2ljYWwgYWRkcmVzc3MuICAwIGZvciBhdXRvIGFzc2lnbm1lbnQuCisgKiBtZW1fYmFzZSwgaW9fYmFzZTogcGh5c2ljYWwgYWRkcmVzcy4gIDAgZm9yIGF1dG8gYXNzaWdubWVudC4KICAqIG1lbV9zaXplIGFuZCBpb19zaXplIG1lYW5zIG1heCBzaXplIG9uIGF1dG8gYXNzaWdubWVudC4KICAqIHBjaWMgbXVzdCBiZSAmdHh4OV9wcmltYXJ5X3BjaWMgb3IgTlVMTC4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL0tjb25maWcgYi9hcmNoL21uMTAzMDAvS2NvbmZpZwppbmRleCA0MWJhMzg1Li44ZWQ0MWNmIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvS2NvbmZpZworKysgYi9hcmNoL21uMTAzMDAvS2NvbmZpZwpAQCAtMjAzLDYgKzIwMyw3IEBACiBjb25maWcgU01QCiAJYm9vbCAiU3ltbWV0cmljIG11bHRpLXByb2Nlc3Npbmcgc3VwcG9ydCIKIAlkZWZhdWx0IHkKKwlzZWxlY3QgVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMKIAlkZXBlbmRzIG9uIE1OMTAzMDBfUFJPQ19NTjJXUzAwMzggfHwgTU4xMDMwMF9QUk9DX01OMldTMDA1MAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIG9uZSBDUFUuIElmIHlvdSBoYXZlCkBAIC0yMjYsMTEgKzIyNyw2IEBACiAJZGVwZW5kcyBvbiBTTVAKIAlkZWZhdWx0ICIyIgogCi1jb25maWcgVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMKLQlib29sCi0JZGVwZW5kcyBvbiBTTVAKLQlkZWZhdWx0IHkKLQogc291cmNlICJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0IgogCiBjb25maWcgTU4xMDMwMF9DVVJSRU5UX0lOX0UyCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL3J0Yy5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9ydGMuYwppbmRleCBlOWUyMGY5Li40OGQ3MDU4IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3J0Yy5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvcnRjLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAkJQ01PU19XUklURShyZWFsX3NlY29uZHMsIFJUQ19TRUNPTkRTKTsKIAkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsIFJUQ19NSU5VVEVTKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCXByaW50a19vbmNlKEtFUk5fTk9USUNFCiAJCSAgICAgICAic2V0X3J0Y19tbXNzOiBjYW4ndCB1cGRhdGUgZnJvbSAlZCB0byAlZFxuIiwKIAkJICAgICAgIGNtb3NfbWludXRlcywgcmVhbF9taW51dGVzKTsKIAkJcmV0dmFsID0gLTE7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDQ4ZmI0NzkuLjk1OWYzOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC0yMCw2ICsyMCw5IEBACiBjb25maWcgQVJDSF9QSFlTX0FERFJfVF82NEJJVAogICAgICAgIGRlZl9ib29sIFBQQzY0IHx8IFBIWVNfNjRCSVQKIAorY29uZmlnIEFSQ0hfRE1BX0FERFJfVF82NEJJVAorCWRlZl9ib29sIEFSQ0hfUEhZU19BRERSX1RfNjRCSVQKKwogY29uZmlnIE1NVQogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTIwOSw3ICsyMTIsNyBAQAogY29uZmlnIEFSQ0hfU1VTUEVORF9QT1NTSUJMRQogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIEFEQl9QTVUgfHwgUFBDX0VGSUtBIHx8IFBQQ19MSVRFNTIwMCB8fCBQUENfODN4eCB8fCBcCi0JCSAgIFBQQ184NXh4IHx8IFBQQ184Nnh4IHx8IFBQQ19QU0VSSUVTCisJCSAgIFBQQ184NXh4IHx8IFBQQ184Nnh4IHx8IFBQQ19QU0VSSUVTIHx8IDQ0eCB8fCA0MHgKIAogY29uZmlnIFBQQ19EQ1JfTkFUSVZFCiAJYm9vbApAQCAtNTk1LDEzICs1OTgsMTEgQEAKIAogCSAgSWYgdW5zdXJlLCBsZWF2ZSBibGFuawogCi1pZiAhNDR4IHx8IEJST0tFTgogY29uZmlnIEFSQ0hfV0FOVFNfRlJFRVpFUl9DT05UUk9MCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gQURCX1BNVQogCiBzb3VyY2Uga2VybmVsL3Bvd2VyL0tjb25maWcKLWVuZGlmCiAKIGNvbmZpZyBTRUNDT01QCiAJYm9vbCAiRW5hYmxlIHNlY2NvbXAgdG8gc2FmZWx5IGNvbXB1dGUgdW50cnVzdGVkIGJ5dGVjb2RlIgpAQCAtNjgyLDYgKzY4MywxNSBAQAogCSAgRnJlZXNjYWxlIE1QQzg1eHgvTVBDODZ4eCBwb3dlciBtYW5hZ2VtZW50IGNvbnRyb2xsZXIgc3VwcG9ydAogCSAgKHN1c3BlbmQvcmVzdW1lKS4gRm9yIE1QQzgzeHggc2VlIHBsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYwogCitjb25maWcgUFBDNHh4X0NQTQorCWJvb2wKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFNVU1BFTkQgJiYgKDQ0eCB8fCA0MHgpCisJaGVscAorCSAgUFBDNHh4IENsb2NrIFBvd2VyIE1hbmFnZW1lbnQgKENQTSkgc3VwcG9ydCAoc3VzcGVuZC9yZXN1bWUpLgorCSAgSXQgYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHR3byBkaWZmZXJlbnQgaWRsZSBzdGF0ZXMgKGlkbGUtd2FpdAorCSAgYW5kIGlkbGUtZG96ZSkuCisKIGNvbmZpZyA0eHhfU09DCiAJYm9vbAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cwppbmRleCBhMzAzNzAzLi41YjI3YTRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKQEAgLTEwNSw2ICsxMDUsMTUgQEAKIAkJZGNyLXJlZyA9IDwweDAwYyAweDAwMj47CiAJfTsKIAorCUNQTTA6IGNwbSB7CisJCWNvbXBhdGlibGUgPSAiaWJtLGNwbSI7CisJCWRjci1hY2Nlc3MtbWV0aG9kID0gIm5hdGl2ZSI7CisJCWRjci1yZWcgPSA8MHgxNjAgMHgwMDM+OworCQl1bnVzZWQtdW5pdHMgPSA8MHgwMDAwMDEwMD47CisJCWlkbGUtZG96ZSA9IDwweDAyMDAwMDAwPjsKKwkJc3RhbmRieSA9IDwweGZlZmY3OTFkPjsKKwl9OworCiAJTDJDMDogbDJjIHsKIAkJY29tcGF0aWJsZSA9ICJpYm0sbDItY2FjaGUtNDYwZXgiLCAiaWJtLGwyLWNhY2hlIjsKIAkJZGNyLXJlZyA9IDwweDAyMCAweDAwOAkJLyogSW50ZXJuYWwgU1JBTSBEQ1IncyAqLwpAQCAtMjcwLDI4ICsyNzksNiBAQAogCQkJCWludGVycnVwdHMgPSA8MHgxIDB4ND47CiAJCQl9OwogCi0JCQlVQVJUMjogc2VyaWFsQGVmNjAwNTAwIHsKLQkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwotCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQkJcmVnID0gPDB4ZWY2MDA1MDAgMHgwMDAwMDAwOD47Ci0JCQkJdmlydHVhbC1yZWcgPSA8MHhlZjYwMDUwMD47Ci0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCi0JCQkJY3VycmVudC1zcGVlZCA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OwotCQkJCWludGVycnVwdHMgPSA8MjggMHg0PjsKLQkJCX07Ci0KLQkJCVVBUlQzOiBzZXJpYWxAZWY2MDA2MDAgewotCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7Ci0JCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCQlyZWcgPSA8MHhlZjYwMDYwMCAweDAwMDAwMDA4PjsKLQkJCQl2aXJ0dWFsLXJlZyA9IDwweGVmNjAwNjAwPjsKLQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KLQkJCQljdXJyZW50LXNwZWVkID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCi0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47Ci0JCQkJaW50ZXJydXB0cyA9IDwyOSAweDQ+OwotCQkJfTsKLQogCQkJSUlDMDogaTJjQGVmNjAwNzAwIHsKIAkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDYwZXgiLCAiaWJtLGlpYyI7CiAJCQkJcmVnID0gPDB4ZWY2MDA3MDAgMHgwMDAwMDAxND47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMKaW5kZXggMDgzZTY4ZS4uODllZGIxNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tpbGF1ZWEuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9raWxhdWVhLmR0cwpAQCAtODIsNiArODIsMTUgQEAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CiAJfTsKIAorCUNQTTA6IGNwbSB7CisJCWNvbXBhdGlibGUgPSAiaWJtLGNwbSI7CisJCWRjci1hY2Nlc3MtbWV0aG9kID0gIm5hdGl2ZSI7CisJCWRjci1yZWcgPSA8MHgwYjAgMHgwMDM+OworCQl1bnVzZWQtdW5pdHMgPSA8MHgwMDAwMDAwMD47CisJCWlkbGUtZG96ZSA9IDwweDAyMDAwMDAwPjsKKwkJc3RhbmRieSA9IDwweGUzZTc0ODAwPjsKKwl9OworCiAJcGxiIHsKIAkJY29tcGF0aWJsZSA9ICJpYm0scGxiLTQwNWV4IiwgImlibSxwbGI0IjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMwOF9wMW0uZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMDhfcDFtLmR0cwppbmRleCAwNWE3NmNjLi42OTdiM2Y2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMwOF9wMW0uZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzA4X3AxbS5kdHMKQEAgLTI5Nyw2ICsyOTcsMTQgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCX07CiAKKwkJZG1hQDJjMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMDgtZG1hIiwgImZzbCxtcGM1MTIxLWRtYSI7CisJCQlyZWcgPSA8MHgyYzAwMCAweDE4MDA+OworCQkJaW50ZXJydXB0cyA9IDwzIDB4OAorCQkJCQk5NCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKKwkJfTsKKwogCX07CiAKIAlwY2kwOiBwY2llQGUwMDA5MDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzA4cmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzA4cmRiLmR0cwppbmRleCBhOTdlYjJkLi5kM2RiMDJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMwOHJkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMDhyZGIuZHRzCkBAIC0yNjUsNiArMjY1LDE0IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQl9OwogCisJCWRtYUAyYzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzA4LWRtYSIsICJmc2wsbXBjNTEyMS1kbWEiOworCQkJcmVnID0gPDB4MmMwMDAgMHgxODAwPjsKKwkJCWludGVycnVwdHMgPSA8MyAweDgKKwkJCQkJOTQgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJCX07CisKIAl9OwogCiAJcGNpMDogcGNpZUBlMDAwOTAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2lsYXVlYV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2lsYXVlYV9kZWZjb25maWcKaW5kZXggNGUxOWVlNy4uMzRiOGMxYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2tpbGF1ZWFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9raWxhdWVhX2RlZmNvbmZpZwpAQCAtMTIsNiArMTIsOCBAQAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogQ09ORklHX0tJTEFVRUE9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogIyBDT05GSUdfV0FMTlVUIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19QQ0k9eQpAQCAtNDIsNiArNDQsOSBAQAogQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9OREZDPXkKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorQ09ORklHX1BNPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19QUEM0eHhfQ1BNPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnCmluZGV4IDQ1YzY0ZDguLjE3ZTRkZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZwpAQCAtNDIsNiArNDIsOSBAQAogQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9OREZDPXkKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorQ09ORklHX1BNPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19QUEM0eHhfQ1BNPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS84eHhfaW1tYXAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS84eHhfaW1tYXAuaAppbmRleCA0YjBlMTUyLi42YjZkYzIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vOHh4X2ltbWFwLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtLzh4eF9pbW1hcC5oCkBAIC05Myw3ICs5Myw3IEBACiB9IG1lbWN0bDh4eF90OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBCUiAtIE1lbW9yeSBDb250cm9sZXI6IEJhc2UgUmVnaXN0ZXIJCQkJCTE2LTkKKyAqIEJSIC0gTWVtb3J5IENvbnRyb2xsZXI6IEJhc2UgUmVnaXN0ZXIJCQkJCTE2LTkKICAqLwogI2RlZmluZSBCUl9CQV9NU0sJMHhmZmZmODAwMAkvKiBCYXNlIEFkZHJlc3MgTWFzawkJCSovCiAjZGVmaW5lIEJSX0FUX01TSwkweDAwMDA3MDAwCS8qIEFkZHJlc3MgVHlwZSBNYXNrCQkJKi8KQEAgLTExMCw3ICsxMTAsNyBAQAogI2RlZmluZSBCUl9WCQkweDAwMDAwMDAxCS8qIEJhbmsgVmFsaWQJCQkJKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogT1IgLSBNZW1vcnkgQ29udHJvbGVyOiBPcHRpb24gUmVnaXN0ZXIJCQkJMTYtMTEKKyAqIE9SIC0gTWVtb3J5IENvbnRyb2xsZXI6IE9wdGlvbiBSZWdpc3RlcgkJCQkxNi0xMQogICovCiAjZGVmaW5lIE9SX0FNX01TSwkweGZmZmY4MDAwCS8qIEFkZHJlc3MgTWFzayBNYXNrCQkJKi8KICNkZWZpbmUgT1JfQVRNX01TSwkweDAwMDA3MDAwCS8qIEFkZHJlc3MgVHlwZSBNYXNrIE1hc2sJCSovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggMzA5NjRhZS4uOGE3ZTkzMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTI2Nyw3ICsyNjcsMTYgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzNjQuaD4KICNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKK3Vuc2lnbmVkIGludCBfX2FyY2hfaHdlaWdodDgodW5zaWduZWQgaW50IHcpOwordW5zaWduZWQgaW50IF9fYXJjaF9od2VpZ2h0MTYodW5zaWduZWQgaW50IHcpOwordW5zaWduZWQgaW50IF9fYXJjaF9od2VpZ2h0MzIodW5zaWduZWQgaW50IHcpOwordW5zaWduZWQgbG9uZyBfX2FyY2hfaHdlaWdodDY0KF9fdTY0IHcpOworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9jb25zdF9od2VpZ2h0Lmg+CisjZWxzZQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0Lmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9maW5kLmg+CiAKIC8qIExpdHRsZS1lbmRpYW4gdmVyc2lvbnMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKaW5kZXggZjNhMWZkZC4uZjBhMjExZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKQEAgLTE5OSw2ICsxOTksOCBAQAogI2RlZmluZSBDUFVfRlRSX1VOQUxJR05FRF9MRF9TVEQJTE9OR19BU01fQ09OU1QoMHgwMDgwMDAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX0FTWU1fU01UCQlMT05HX0FTTV9DT05TVCgweDAxMDAwMDAwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfU1RDWF9DSEVDS1NfQUREUkVTUwlMT05HX0FTTV9DT05TVCgweDAyMDAwMDAwMDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfUE9QQ05UQgkJCUxPTkdfQVNNX0NPTlNUKDB4MDQwMDAwMDAwMDAwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9QT1BDTlRECQkJTE9OR19BU01fQ09OU1QoMHgwODAwMDAwMDAwMDAwMDAwKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCkBAIC00MDMsMjEgKzQwNSwyMiBAQAogCSAgICBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBcCiAJICAgIENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX1NNVCB8IFwKIAkgICAgQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUgfCBDUFVfRlRSX0xPQ0tMRVNTX1RMQklFIHwgXAotCSAgICBDUFVfRlRSX1BVUlIgfCBDUFVfRlRSX1NUQ1hfQ0hFQ0tTX0FERFJFU1MpCisJICAgIENQVV9GVFJfUFVSUiB8IENQVV9GVFJfU1RDWF9DSEVDS1NfQUREUkVTUyB8IFwKKwkgICAgQ1BVX0ZUUl9QT1BDTlRCKQogI2RlZmluZSBDUFVfRlRSU19QT1dFUjYgKENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9MV1NZTkMgfCBcCiAJICAgIENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IENQVV9GVFJfQ1RSTCB8IFwKIAkgICAgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfU01UIHwgXAogCSAgICBDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSB8IENQVV9GVFJfTE9DS0xFU1NfVExCSUUgfCBcCiAJICAgIENQVV9GVFJfUFVSUiB8IENQVV9GVFJfU1BVUlIgfCBDUFVfRlRSX1JFQUxfTEUgfCBcCiAJICAgIENQVV9GVFJfRFNDUiB8IENQVV9GVFJfVU5BTElHTkVEX0xEX1NURCB8IFwKLQkgICAgQ1BVX0ZUUl9TVENYX0NIRUNLU19BRERSRVNTKQorCSAgICBDUFVfRlRSX1NUQ1hfQ0hFQ0tTX0FERFJFU1MgfCBDUFVfRlRSX1BPUENOVEIpCiAjZGVmaW5lIENQVV9GVFJTX1BPV0VSNyAoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKIAkgICAgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9DVFJMIHwgXAogCSAgICBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCiAJICAgIENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFIHwgQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRSB8IFwKIAkgICAgQ1BVX0ZUUl9QVVJSIHwgQ1BVX0ZUUl9TUFVSUiB8IENQVV9GVFJfUkVBTF9MRSB8IFwKIAkgICAgQ1BVX0ZUUl9EU0NSIHwgQ1BVX0ZUUl9TQU8gIHwgQ1BVX0ZUUl9BU1lNX1NNVCB8IFwKLQkgICAgQ1BVX0ZUUl9TVENYX0NIRUNLU19BRERSRVNTKQorCSAgICBDUFVfRlRSX1NUQ1hfQ0hFQ0tTX0FERFJFU1MgfCBDUFVfRlRSX1BPUENOVEIgfCBDUFVfRlRSX1BPUENOVEQpCiAjZGVmaW5lIENQVV9GVFJTX0NFTEwJKENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9MV1NZTkMgfCBcCiAJICAgIENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IENQVV9GVFJfQ1RSTCB8IFwKIAkgICAgQ1BVX0ZUUl9BTFRJVkVDX0NPTVAgfCBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGhyZWFkcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRocmVhZHMuaAppbmRleCBhOGUxODQ0Li5mNzFiYjRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGhyZWFkcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aHJlYWRzLmgKQEAgLTYxLDIyICs2MSwyNSBAQAogCXJldHVybiBjcHVfdGhyZWFkX21hc2tfdG9fY29yZXMoY3B1X29ubGluZV9tYXApOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjcHVfdGhyZWFkX3RvX2NvcmUoaW50IGNwdSkKLXsKLQlyZXR1cm4gY3B1ID4+IHRocmVhZHNfc2hpZnQ7Ci19CisjaWZkZWYgQ09ORklHX1NNUAoraW50IGNwdV9jb3JlX2luZGV4X29mX3RocmVhZChpbnQgY3B1KTsKK2ludCBjcHVfZmlyc3RfdGhyZWFkX29mX2NvcmUoaW50IGNvcmUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9jb3JlX2luZGV4X29mX3RocmVhZChpbnQgY3B1KSB7IHJldHVybiBjcHU7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9maXJzdF90aHJlYWRfb2ZfY29yZShpbnQgY29yZSkgeyByZXR1cm4gY29yZTsgfQorI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IGNwdV90aHJlYWRfaW5fY29yZShpbnQgY3B1KQogewogCXJldHVybiBjcHUgJiAodGhyZWFkc19wZXJfY29yZSAtIDEpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjcHVfZmlyc3RfdGhyZWFkX2luX2NvcmUoaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9maXJzdF90aHJlYWRfc2libGluZyhpbnQgY3B1KQogewogCXJldHVybiBjcHUgJiB+KHRocmVhZHNfcGVyX2NvcmUgLSAxKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY3B1X2xhc3RfdGhyZWFkX2luX2NvcmUoaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9sYXN0X3RocmVhZF9zaWJsaW5nKGludCBjcHUpCiB7CiAJcmV0dXJuIGNwdSB8ICh0aHJlYWRzX3Blcl9jb3JlIC0gMSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGV2aWNlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGV2aWNlLmgKaW5kZXggYTM5NTRlNC4uMTZkMjVjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RldmljZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaApAQCAtOSw2ICs5LDEyIEBACiBzdHJ1Y3QgZG1hX21hcF9vcHM7CiBzdHJ1Y3QgZGV2aWNlX25vZGU7CiAKKy8qCisgKiBBcmNoIGV4dGVuc2lvbnMgdG8gc3RydWN0IGRldmljZS4KKyAqCisgKiBXaGVuIGFkZGluZyBmaWVsZHMsIGNvbnNpZGVyIG1hY2lvX2FkZF9vbmVfZGV2aWNlIGluCisgKiBkcml2ZXJzL21hY2ludG9zaC9tYWNpb19hc2ljLmMKKyAqLwogc3RydWN0IGRldl9hcmNoZGF0YSB7CiAJLyogRE1BIG9wZXJhdGlvbnMgb24gdGhhdCBkZXZpY2UgKi8KIAlzdHJ1Y3QgZG1hX21hcF9vcHMJKmRtYV9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmlybXdhcmUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCmluZGV4IDIwNzc4YTQuLjRlZjY2MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCkBAIC00Niw2ICs0Niw3IEBACiAjZGVmaW5lIEZXX0ZFQVRVUkVfUFMzX0xWMQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwODAwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX0JFQVQJCUFTTV9DT05TVCgweDAwMDAwMDAwMDEwMDAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfQ01PCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAyMDAwMDAwKQorI2RlZmluZSBGV19GRUFUVVJFX1ZQSE4JCUFTTV9DT05TVCgweDAwMDAwMDAwMDQwMDAwMDApCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTU5LDcgKzYwLDcgQEAKIAkJRldfRkVBVFVSRV9WSU8gfCBGV19GRUFUVVJFX1JETUEgfCBGV19GRUFUVVJFX0xMQU4gfAogCQlGV19GRUFUVVJFX0JVTEtfUkVNT1ZFIHwgRldfRkVBVFVSRV9YREFCUiB8CiAJCUZXX0ZFQVRVUkVfTVVMVElUQ0UgfCBGV19GRUFUVVJFX1NQTFBBUiB8IEZXX0ZFQVRVUkVfTFBBUiB8Ci0JCUZXX0ZFQVRVUkVfQ01PLAorCQlGV19GRUFUVVJFX0NNTyB8IEZXX0ZFQVRVUkVfVlBITiwKIAlGV19GRUFUVVJFX1BTRVJJRVNfQUxXQVlTID0gMCwKIAlGV19GRUFUVVJFX0lTRVJJRVNfUE9TU0lCTEUgPSBGV19GRUFUVVJFX0lTRVJJRVMgfCBGV19GRUFUVVJFX0xQQVIsCiAJRldfRkVBVFVSRV9JU0VSSUVTX0FMV0FZUyA9IEZXX0ZFQVRVUkVfSVNFUklFUyB8IEZXX0ZFQVRVUkVfTFBBUiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaAppbmRleCBkZTAzY2E1Li5lYzA4OWFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHZjYWxsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h2Y2FsbC5oCkBAIC0yMzIsNyArMjMyLDkgQEAKICNkZWZpbmUgSF9HRVRfRU1fUEFSTVMJCTB4MkI4CiAjZGVmaW5lIEhfU0VUX01QUAkJMHgyRDAKICNkZWZpbmUgSF9HRVRfTVBQCQkweDJENAotI2RlZmluZSBNQVhfSENBTExfT1BDT0RFCUhfR0VUX01QUAorI2RlZmluZSBIX0hPTUVfTk9ERV9BU1NPQ0lBVElWSVRZIDB4MkVDCisjZGVmaW5lIEhfQkVTVF9FTkVSR1kJCTB4MkY0CisjZGVmaW5lIE1BWF9IQ0FMTF9PUENPREUJSF9CRVNUX0VORVJHWQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmgKaW5kZXggN2Y1ZTBmZS4uMzgwZDQ4YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xwcGFjYS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9scHBhY2EuaApAQCAtNjIsNyArNjIsMTAgQEAKIAl2b2xhdGlsZSB1MzIgZHluX3BpcjsJCS8vIER5bmFtaWMgUHJvY0lkUmVnIHZhbHVlCXgyMC14MjMKIAl1MzIJZHNlaV9kYXRhOyAgICAgICAgICAgCS8vIERTRUkgZGF0YSAgICAgICAgICAgICAgICAgIAl4MjQteDI3CiAJdTY0CXNwcmczOyAgICAgICAgICAgICAgIAkvLyBTUFJHMyB2YWx1ZSAgICAgICAgICAgICAgICAJeDI4LXgyRgotCXU4CXJlc2VydmVkM1s4MF07CQkvLyBSZXNlcnZlZAkJCXgzMC14N0YKKwl1OAlyZXNlcnZlZDNbNDBdOwkJLy8gUmVzZXJ2ZWQJCQl4MzAteDU3CisJdm9sYXRpbGUgdTggdnBobl9hc3NvY19jb3VudHNbOF07IC8vIFZpcnR1YWwgcHJvY2Vzc29yIGhvbWUgbm9kZQorCQkJCQkvLyBhc3NvY2lhdGl2aXR5IGNoYW5nZSBjb3VudGVycyB4NTgteDVGCisJdTgJcmVzZXJ2ZWQ0WzMyXTsJCS8vIFJlc2VydmVkCQkJeDYwLXg3RgogCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBDQUNIRV9MSU5FXzIgMHgwMDgwIC0gMHgwMEZGIENvbnRhaW5zIGxvY2FsIHJlYWQtd3JpdGUgZGF0YQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKaW5kZXggZDA0NWIwMS4uODQzM2QzNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCkBAIC0yNyw5ICsyNyw3IEBACiBzdHJ1Y3QgcnRjX3RpbWU7CiBzdHJ1Y3QgZmlsZTsKIHN0cnVjdCBwY2lfY29udHJvbGxlcjsKLSNpZmRlZiBDT05GSUdfS0VYRUMKIHN0cnVjdCBraW1hZ2U7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19TTVAKIHN0cnVjdCBzbXBfb3BzX3QgewpAQCAtNzIsNyArNzAsNyBAQAogCQkJCQkgICAgIGludCBwc2l6ZSwgaW50IHNzaXplKTsKIAl2b2lkCQkoKmZsdXNoX2hhc2hfcmFuZ2UpKHVuc2lnbmVkIGxvbmcgbnVtYmVyLCBpbnQgbG9jYWwpOwogCi0JLyogc3BlY2lhbCBmb3Iga2V4ZWMsIHRvIGJlIGNhbGxlZCBpbiByZWFsIG1vZGUsIGxpbmFyIG1hcHBpbmcgaXMKKwkvKiBzcGVjaWFsIGZvciBrZXhlYywgdG8gYmUgY2FsbGVkIGluIHJlYWwgbW9kZSwgbGluZWFyIG1hcHBpbmcgaXMKIAkgKiBkZXN0cm95ZWQgYXMgd2VsbCAqLwogCXZvaWQJCSgqaHB0ZV9jbGVhcl9hbGwpKHZvaWQpOwogCkBAIC0zMjQsOCArMzIyLDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwogCi1leHRlcm4gdm9pZCBzZXR1cF9wY2lfcHRycyh2b2lkKTsKLQogI2lmZGVmIENPTkZJR19TTVAKIC8qIFBvb3IgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgKi8KIGV4dGVybiB2b2lkIF9fZGV2aW5pdCBzbXBfZ2VuZXJpY19naXZlX3RpbWViYXNlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tem9uZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tem9uZS5oCmluZGV4IGFhYzg3Y2IuLmZkM2ZkNTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXpvbmUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW16b25lLmgKQEAgLTMzLDYgKzMzLDkgQEAKIGV4dGVybiBjcHVtYXNrX3Zhcl90IG5vZGVfdG9fY3B1bWFza19tYXBbXTsKICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1heF9wZm47Cit1NjQgbWVtb3J5X2hvdHBsdWdfbWF4KHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgbWVtb3J5X2hvdHBsdWdfbWF4KCkgbWVtYmxvY2tfZW5kX29mX0RSQU0oKQogI2VuZGlmCiAKIC8qCkBAIC00Miw2ICs0NSw4IEBACiAjZGVmaW5lIG5vZGVfc3RhcnRfcGZuKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbikKICNkZWZpbmUgbm9kZV9lbmRfcGZuKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX2VuZF9wZm4pCiAKKyNlbHNlCisjZGVmaW5lIG1lbW9yeV9ob3RwbHVnX21heCgpIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkKICNlbmRpZiAvKiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUyAqLwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL252cmFtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbnZyYW0uaAppbmRleCA4NTBiNzJmLi45MmVmZTY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbnZyYW0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbnZyYW0uaApAQCAtMTAsMzEgKzEwLDcgQEAKICNpZm5kZWYgX0FTTV9QT1dFUlBDX05WUkFNX0gKICNkZWZpbmUgX0FTTV9QT1dFUlBDX05WUkFNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0KLSNkZWZpbmUgTlZSV19DTlQgMHgyMAotI2RlZmluZSBOVlJBTV9IRUFERVJfTEVOIDE2IC8qIHNpemVvZihzdHJ1Y3QgbnZyYW1faGVhZGVyKSAqLwotI2RlZmluZSBOVlJBTV9CTE9DS19MRU4gMTYKLSNkZWZpbmUgTlZSQU1fTUFYX1JFUSAoMjA4MC9OVlJBTV9CTE9DS19MRU4pCi0jZGVmaW5lIE5WUkFNX01JTl9SRVEgKDEwNTYvTlZSQU1fQkxPQ0tfTEVOKQotCi0jZGVmaW5lIE5WUkFNX0FTMCAgMHg3NAotI2RlZmluZSBOVlJBTV9BUzEgIDB4NzUKLSNkZWZpbmUgTlZSQU1fREFUQSAweDc3Ci0KLQotLyogUlRDIE9mZnNldHMgKi8KLQotI2RlZmluZSBNT1RPX1JUQ19TRUNPTkRTCTB4MUZGOQotI2RlZmluZSBNT1RPX1JUQ19NSU5VVEVTCTB4MUZGQQotI2RlZmluZSBNT1RPX1JUQ19IT1VSUwkJMHgxRkZCCi0jZGVmaW5lIE1PVE9fUlRDX0RBWV9PRl9XRUVLCTB4MUZGQwotI2RlZmluZSBNT1RPX1JUQ19EQVlfT0ZfTU9OVEgJMHgxRkZECi0jZGVmaW5lIE1PVE9fUlRDX01PTlRICQkweDFGRkUKLSNkZWZpbmUgTU9UT19SVENfWUVBUgkJMHgxRkZGCi0jZGVmaW5lIE1PVE9fUlRDX0NPTlRST0xBICAgICAgIDB4MUZGOAotI2RlZmluZSBNT1RPX1JUQ19DT05UUk9MQiAgICAgICAweDFGRjkKLQorLyogU2lnbmF0dXJlcyBmb3IgbnZyYW0gcGFydGl0aW9ucyAqLwogI2RlZmluZSBOVlJBTV9TSUdfU1AJMHgwMgkvKiBzdXBwb3J0IHByb2Nlc3NvciAqLwogI2RlZmluZSBOVlJBTV9TSUdfT0YJMHg1MAkvKiBvcGVuIGZpcm13YXJlIGNvbmZpZyAqLwogI2RlZmluZSBOVlJBTV9TSUdfRlcJMHg1MQkvKiBnZW5lcmFsIGZpcm13YXJlICovCkBAIC00OSwzMiArMjUsMTkgQEAKICNkZWZpbmUgTlZSQU1fU0lHX09TCTB4YTAJLyogT1MgZGVmaW5lZCAqLwogI2RlZmluZSBOVlJBTV9TSUdfUEFOSUMJMHhhMQkvKiBBcHBsZSBPU1ggInBhbmljIiAqLwogCi0vKiBJZiBjaGFuZ2UgdGhpcyBzaXplLCB0aGVuIGNoYW5nZSB0aGUgc2l6ZSBvZiBOVk5BTUVfTEVOICovCi1zdHJ1Y3QgbnZyYW1faGVhZGVyIHsKLQl1bnNpZ25lZCBjaGFyIHNpZ25hdHVyZTsKLQl1bnNpZ25lZCBjaGFyIGNoZWNrc3VtOwotCXVuc2lnbmVkIHNob3J0IGxlbmd0aDsKLQljaGFyIG5hbWVbMTJdOwotfTsKLQogI2lmZGVmIF9fS0VSTkVMX18KIAorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCi1zdHJ1Y3QgbnZyYW1fcGFydGl0aW9uIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHBhcnRpdGlvbjsKLQlzdHJ1Y3QgbnZyYW1faGVhZGVyIGhlYWRlcjsKLQl1bnNpZ25lZCBpbnQgaW5kZXg7Ci19OwotCi0KKyNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKIGV4dGVybiBpbnQgbnZyYW1fd3JpdGVfZXJyb3JfbG9nKGNoYXIgKiBidWZmLCBpbnQgbGVuZ3RoLAogCQkJCQkgdW5zaWduZWQgaW50IGVycl90eXBlLCB1bnNpZ25lZCBpbnQgZXJyX3NlcSk7CiBleHRlcm4gaW50IG52cmFtX3JlYWRfZXJyb3JfbG9nKGNoYXIgKiBidWZmLCBpbnQgbGVuZ3RoLAogCQkJCQkgdW5zaWduZWQgaW50ICogZXJyX3R5cGUsIHVuc2lnbmVkIGludCAqZXJyX3NlcSk7CiBleHRlcm4gaW50IG52cmFtX2NsZWFyX2Vycm9yX2xvZyh2b2lkKTsKLQogZXh0ZXJuIGludCBwU2VyaWVzX252cmFtX2luaXQodm9pZCk7CisjZW5kaWYgLyogQ09ORklHX1BQQ19QU0VSSUVTICovCiAKICNpZmRlZiBDT05GSUdfTU1JT19OVlJBTQogZXh0ZXJuIGludCBtbWlvX252cmFtX2luaXQodm9pZCk7CkBAIC04NSw2ICs0OCwxMyBAQAogfQogI2VuZGlmCiAKK2V4dGVybiBpbnQgX19pbml0IG52cmFtX3NjYW5fcGFydGl0aW9ucyh2b2lkKTsKK2V4dGVybiBsb2ZmX3QgbnZyYW1fY3JlYXRlX3BhcnRpdGlvbihjb25zdCBjaGFyICpuYW1lLCBpbnQgc2lnLAorCQkJCSAgICAgaW50IHJlcV9zaXplLCBpbnQgbWluX3NpemUpOworZXh0ZXJuIGludCBudnJhbV9yZW1vdmVfcGFydGl0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIGludCBzaWcpOworZXh0ZXJuIGludCBudnJhbV9nZXRfcGFydGl0aW9uX3NpemUobG9mZl90IGRhdGFfaW5kZXgpOworZXh0ZXJuIGxvZmZfdCBudnJhbV9maW5kX3BhcnRpdGlvbihjb25zdCBjaGFyICpuYW1lLCBpbnQgc2lnLCBpbnQgKm91dF9zaXplKTsKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyogUG93ZXJNYWMgc3BlY2lmaWMgbnZyYW0gc3R1ZmZzICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaAppbmRleCA0M2FkYzhiLi4xMjU1NTY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmgKQEAgLTM2LDYgKzM2LDggQEAKICNkZWZpbmUgUFBDX0lOU1RfTk9QCQkJMHg2MDAwMDAwMAogI2RlZmluZSBQUENfSU5TVF9QT1BDTlRCCQkweDdjMDAwMGY0CiAjZGVmaW5lIFBQQ19JTlNUX1BPUENOVEJfTUFTSwkJMHhmYzAwMDdmZQorI2RlZmluZSBQUENfSU5TVF9QT1BDTlRECQkweDdjMDAwM2Y0CisjZGVmaW5lIFBQQ19JTlNUX1BPUENOVFcJCTB4N2MwMDAyZjQKICNkZWZpbmUgUFBDX0lOU1RfUkZDSQkJCTB4NGMwMDAwNjYKICNkZWZpbmUgUFBDX0lOU1RfUkZESQkJCTB4NGMwMDAwNGUKICNkZWZpbmUgUFBDX0lOU1RfUkZNQ0kJCQkweDRjMDAwMDRjCkBAIC04OCw2ICs5MCwxMiBAQAogCQkJCQlfX1BQQ19SQihiKSB8IF9fUFBDX0VIKGVoKSkKICNkZWZpbmUgUFBDX01TR1NORChiKQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfTVNHU05EIHwgXAogCQkJCQlfX1BQQ19SQihiKSkKKyNkZWZpbmUgUFBDX1BPUENOVEIoYSwgcykJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfUE9QQ05UQiB8IFwKKwkJCQkJX19QUENfUkEoYSkgfCBfX1BQQ19SUyhzKSkKKyNkZWZpbmUgUFBDX1BPUENOVEQoYSwgcykJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfUE9QQ05URCB8IFwKKwkJCQkJX19QUENfUkEoYSkgfCBfX1BQQ19SUyhzKSkKKyNkZWZpbmUgUFBDX1BPUENOVFcoYSwgcykJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfUE9QQ05UVyB8IFwKKwkJCQkJX19QUENfUkEoYSkgfCBfX1BQQ19SUyhzKSkKICNkZWZpbmUgUFBDX1JGQ0kJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX1JGQ0kpCiAjZGVmaW5lIFBQQ19SRkRJCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9SRkRJKQogI2RlZmluZSBQUENfUkZNQ0kJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX1JGTUNJKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDRjMTQxODcuLmRlMTk2N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTEyMiw3ICsxMjIsNiBAQAogCQlUQVNLX1VOTUFQUEVEX0JBU0VfVVNFUjMyIDogVEFTS19VTk1BUFBFRF9CQVNFX1VTRVI2NCApCiAjZW5kaWYKIAotI2lmZGVmIF9fS0VSTkVMX18KICNpZmRlZiBfX3Bvd2VycGM2NF9fCiAKICNkZWZpbmUgU1RBQ0tfVE9QX1VTRVI2NCBUQVNLX1NJWkVfVVNFUjY0CkBAIC0xMzksNyArMTM4LDYgQEAKICNkZWZpbmUgU1RBQ0tfVE9QX01BWAlTVEFDS19UT1AKIAogI2VuZGlmIC8qIF9fcG93ZXJwYzY0X18gKi8KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIHNlZzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggYWZlNGFhYS4uN2VmMGQ5MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTEwNiw5ICsxMDYsMjIgQEAKIAkJCQkJCWludCBuaWQpCiB7CiB9Ci0KICNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfTlVNQSkgJiYgZGVmaW5lZChDT05GSUdfUFBDX1NQTFBBUikKK2V4dGVybiBpbnQgc3RhcnRfdG9wb2xvZ3lfdXBkYXRlKHZvaWQpOworZXh0ZXJuIGludCBzdG9wX3RvcG9sb2d5X3VwZGF0ZSh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBzdGFydF90b3BvbG9neV91cGRhdGUodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHN0b3BfdG9wb2xvZ3lfdXBkYXRlKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX05VTUEgJiYgQ09ORklHX1BQQ19TUExQQVIgKi8KKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RvcG9sb2d5Lmg+CiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdmRzb19kYXRhcGFnZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Zkc29fZGF0YXBhZ2UuaAppbmRleCAwODY3OWM1Li4yNWUzOTIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdmRzb19kYXRhcGFnZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS92ZHNvX2RhdGFwYWdlLmgKQEAgLTExNiw5ICsxMTYsNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKLSNpZmRlZiBfX0tFUk5FTF9fCiBleHRlcm4gc3RydWN0IHZkc29fZGF0YSAqdmRzb19kYXRhOwotI2VuZGlmCiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMzZjMzBmMy4uM2JiMmEzZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCkBAIC0yOSw4ICsyOSwxMCBAQAogb2JqLXkJCQkJOj0gY3B1dGFibGUubyBwdHJhY2UubyBzeXNjYWxscy5vIFwKIAkJCQkgICBpcnEubyBhbGlnbi5vIHNpZ25hbF8zMi5vIHBtYy5vIHZkc28ubyBcCiAJCQkJICAgaW5pdF90YXNrLm8gcHJvY2Vzcy5vIHN5c3RibC5vIGlkbGUubyBcCi0JCQkJICAgc2lnbmFsLm8gc3lzZnMubyBjYWNoZWluZm8ubwotb2JqLXkJCQkJKz0gdmRzbzMyLworCQkJCSAgIHNpZ25hbC5vIHN5c2ZzLm8gY2FjaGVpbmZvLm8gdGltZS5vIFwKKwkJCQkgICBwcm9tLm8gdHJhcHMubyBzZXR1cC1jb21tb24ubyBcCisJCQkJICAgdWRiZy5vIG1pc2MubyBpby5vIGRtYS5vIFwKKwkJCQkgICBtaXNjXyQoQ09ORklHX1dPUkRfU0laRSkubyB2ZHNvMzIvCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSBzZXR1cF82NC5vIHN5c19wcGMzMi5vIFwKIAkJCQkgICBzaWduYWxfNjQubyBwdHJhY2UzMi5vIFwKIAkJCQkgICBwYWNhLm8gbnZyYW1fNjQubyBmaXJtd2FyZS5vCkBAIC04MCw5ICs4Miw2IEBACiBleHRyYS0kKENPTkZJR184eHgpCQk6PSBoZWFkXzh4eC5vCiBleHRyYS15CQkJCSs9IHZtbGludXgubGRzCiAKLW9iai15CQkJCSs9IHRpbWUubyBwcm9tLm8gdHJhcHMubyBzZXR1cC1jb21tb24ubyBcCi0JCQkJICAgdWRiZy5vIG1pc2MubyBpby5vIGRtYS5vIFwKLQkJCQkgICBtaXNjXyQoQ09ORklHX1dPUkRfU0laRSkubwogb2JqLSQoQ09ORklHX1BQQzMyKQkJKz0gZW50cnlfMzIubyBzZXR1cF8zMi5vCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSBkbWEtaW9tbXUubyBpb21tdS5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGJkMGRmMmUuLjIzZTZhOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTIwOSw3ICsyMDksNiBAQAogCURFRklORShSVEFTRU5UUlksIG9mZnNldG9mKHN0cnVjdCBydGFzX3QsIGVudHJ5KSk7CiAKIAkvKiBJbnRlcnJ1cHQgcmVnaXN0ZXIgZnJhbWUgKi8KLQlERUZJTkUoU1RBQ0tfRlJBTUVfT1ZFUkhFQUQsIFNUQUNLX0ZSQU1FX09WRVJIRUFEKTsKIAlERUZJTkUoSU5UX0ZSQU1FX1NJWkUsIFNUQUNLX0lOVF9GUkFNRV9TSVpFKTsKIAlERUZJTkUoU1dJVENIX0ZSQU1FX1NJWkUsIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CiAjaWZkZWYgQ09ORklHX1BQQzY0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggOTZhOTA4Zi4uYmU1YWIxOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtNDU3LDE2ICs0NTcsMjYgQEAKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA2LAogCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19JQk0sCi0JCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfcG93ZXI3LAotCQkuY3B1X3Jlc3RvcmUJCT0gX19yZXN0b3JlX2NwdV9wb3dlcjcsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGM2NC9wb3dlcjciLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfUE9XRVI0LAotCQkub3Byb2ZpbGVfbW1jcmFfc2lodgk9IFBPV0VSNl9NTUNSQV9TSUhWLAotCQkub3Byb2ZpbGVfbW1jcmFfc2lwcgk9IFBPV0VSNl9NTUNSQV9TSVBSLAotCQkub3Byb2ZpbGVfbW1jcmFfY2xlYXIJPSBQT1dFUjZfTU1DUkFfVEhSTSB8Ci0JCQlQT1dFUjZfTU1DUkFfT1RIRVIsCiAJCS5wbGF0Zm9ybQkJPSAicG93ZXI3IiwKIAl9LAorCXsJLyogUG93ZXI3KyAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDAwNEEwMDAwLAorCQkuY3B1X25hbWUJCT0gIlBPV0VSNysgKHJhdykiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BPV0VSNywKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI3LAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSB8CisJCQlNTVVfRlRSX1RMQklFXzIwNiwKKwkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCisJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAorCQkubnVtX3BtY3MJCT0gNiwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvcG93ZXI3IiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX1BPV0VSNCwKKwkJLnBsYXRmb3JtCQk9ICJwb3dlcjcrIiwKKwl9LAogCXsJLyogQ2VsbCBCcm9hZGJhbmQgRW5naW5lICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLAogCQkucHZyX3ZhbHVlCQk9IDB4MDA3MDAwMDAsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCmluZGV4IDhlMDVjMTYuLjBhMmFmNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAKICNpZmRlZiBERUJVRwogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CkBAIC0xNDEsMyArMTQyLDM1IEBACiAKIAlyZXR1cm4gY3NpemU7CiB9CisKKyNpZmRlZiBDT05GSUdfUFBDX1JUQVMKKy8qCisgKiBUaGUgY3Jhc2hrZXJuZWwgcmVnaW9uIHdpbGwgYWxtb3N0IGFsd2F5cyBvdmVybGFwIHRoZSBSVEFTIHJlZ2lvbiwgc28KKyAqIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCB3aGVuIHNocmlua2luZyB0aGUgY3Jhc2hrZXJuZWwgcmVnaW9uLgorICovCit2b2lkIGNyYXNoX2ZyZWVfcmVzZXJ2ZWRfcGh5c19yYW5nZSh1bnNpZ25lZCBsb25nIGJlZ2luLCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJY29uc3QgdTMyICpiYXNlcCwgKnNpemVwOworCXVuc2lnbmVkIGludCBydGFzX3N0YXJ0ID0gMCwgcnRhc19lbmQgPSAwOworCisJYmFzZXAgPSBvZl9nZXRfcHJvcGVydHkocnRhcy5kZXYsICJsaW51eCxydGFzLWJhc2UiLCBOVUxMKTsKKwlzaXplcCA9IG9mX2dldF9wcm9wZXJ0eShydGFzLmRldiwgInJ0YXMtc2l6ZSIsIE5VTEwpOworCisJaWYgKGJhc2VwICYmIHNpemVwKSB7CisJCXJ0YXNfc3RhcnQgPSAqYmFzZXA7CisJCXJ0YXNfZW5kID0gKmJhc2VwICsgKnNpemVwOworCX0KKworCWZvciAoYWRkciA9IGJlZ2luOyBhZGRyIDwgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgeworCQkvKiBEb2VzIHRoaXMgcGFnZSBvdmVybGFwIHdpdGggdGhlIFJUQVMgcmVnaW9uPyAqLworCQlpZiAoYWRkciA8PSBydGFzX2VuZCAmJiAoKGFkZHIgKyBQQUdFX1NJWkUpID4gcnRhc19zdGFydCkpCisJCQljb250aW51ZTsKKworCQlDbGVhclBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShhZGRyID4+IFBBR0VfU0hJRlQpKTsKKwkJaW5pdF9wYWdlX2NvdW50KHBmbl90b19wYWdlKGFkZHIgPj4gUEFHRV9TSElGVCkpOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpX192YShhZGRyKSk7CisJCXRvdGFscmFtX3BhZ2VzKys7CisJfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYwppbmRleCA2ZTU0YTBmLi5lNzU1NDE1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLWlvbW11LmMKQEAgLTE5LDcgKzE5LDcgQEAKIAkJCQkgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQogewogCXJldHVybiBpb21tdV9hbGxvY19jb2hlcmVudChkZXYsIGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIHNpemUsCi0JCQkJICAgIGRtYV9oYW5kbGUsIGRldmljZV90b19tYXNrKGRldiksIGZsYWcsCisJCQkJICAgIGRtYV9oYW5kbGUsIGRldi0+Y29oZXJlbnRfZG1hX21hc2ssIGZsYWcsCiAJCQkJICAgIGRldl90b19ub2RlKGRldikpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKaW5kZXggZWQ0YWViOS4uYzIyZGMxZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlIDxhc20vZnRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiAjdW5kZWYgU0hPV19TWVNDQUxMUwogI3VuZGVmIFNIT1dfU1lTQ0FMTFNfVEFTSwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TCmluZGV4IDlmOGIwMWQuLjhhODE3OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRzLlMKQEAgLTEzLDYgKzEzLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtL2V4Y2VwdGlvbi02NHMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKIC8qCiAgKiBXZSBsYXlvdXQgcGh5c2ljYWwgbWVtb3J5IGFzIGZvbGxvd3M6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2ZwdS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9mcHUuUwppbmRleCBlODZjMDQwLi5kZTM2OTU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2ZwdS5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnB1LlMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogI2lmZGVmIENPTkZJR19WU1gKICNkZWZpbmUgUkVTVF8zMkZQVlNSUyhuLGMsYmFzZSkJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDB4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDB4LlMKaW5kZXggODI3OGU4Yi4uOWRkMjFhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzQweC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80MHguUwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiAvKiBBcyB3aXRoIHRoZSBvdGhlciBQb3dlclBDIHBvcnRzLCBpdCBpcyBleHBlY3RlZCB0aGF0IHdoZW4gY29kZQogICogZXhlY3V0aW9uIGJlZ2lucyBoZXJlLCB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyBjb250YWluIHZhbGlkLCB5ZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80NHguUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80NHguUwppbmRleCA1NjIzMDViLi5jYmIzNDM2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDR4LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzQ0eC5TCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3N5bmNoLmg+CiAjaW5jbHVkZSAiaGVhZF9ib29rZS5oIgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCmluZGV4IGYwZGQ1NzcuLjc4MmYyM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2VfNjQuaD4KICNpbmNsdWRlIDxhc20vaXJxZmxhZ3MuaD4KICNpbmNsdWRlIDxhc20va3ZtX2Jvb2szc19hc20uaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKIC8qIFRoZSBwaHlzaWNhbCBtZW1vcnkgaXMgbGF5ZWQgb3V0IHN1Y2ggdGhhdCB0aGUgc2Vjb25kYXJ5IHByb2Nlc3NvcgogICogc3BpbiBjb2RlIHNpdHMgYXQgMHgwMDAwLi4uMHgwMGZmLiBPbiBzZXJ2ZXIsIHRoZSB2ZWN0b3JzIGZvbGxvdwpAQCAtOTYsNyArOTcsNyBAQAogCS5sbG9uZyBodlJlbGVhc2VEYXRhLUtFUk5FTEJBU0UKICNlbmRpZiAvKiBDT05GSUdfUFBDX0lTRVJJRVMgKi8KIAotI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCisjaWZkZWYgQ09ORklHX1JFTE9DQVRBQkxFCiAJLyogVGhpcyBmbGFnIGlzIHNldCB0byAxIGJ5IGEgbG9hZGVyIGlmIHRoZSBrZXJuZWwgc2hvdWxkIHJ1bgogCSAqIGF0IHRoZSBsb2FkZWQgYWRkcmVzcyBpbnN0ZWFkIG9mIHRoZSBsaW5rZWQgYWRkcmVzcy4gIFRoaXMKIAkgKiBpcyB1c2VkIGJ5IGtleGVjLXRvb2xzIHRvIGtlZXAgdGhlIHRoZSBrZHVtcCBrZXJuZWwgaW4gdGhlCkBAIC0zODQsMTIgKzM4NSwxMCBAQAogCS8qIHByb2Nlc3MgcmVsb2NhdGlvbnMgZm9yIHRoZSBmaW5hbCBhZGRyZXNzIG9mIHRoZSBrZXJuZWwgKi8KIAlsaXMJcjI1LFBBR0VfT0ZGU0VUQGhpZ2hlc3QJLyogY29tcHV0ZSB2aXJ0dWFsIGJhc2Ugb2Yga2VybmVsICovCiAJc2xkaQlyMjUscjI1LDMyCi0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKIAlsd3oJcjcsX19ydW5fYXRfbG9hZC1fc3RleHQocjI2KQotCWNtcGx3aQljcjAscjcsMQkvKiBrZHVtcCBrZXJuZWwgPyAtIHN0YXkgd2hlcmUgd2UgYXJlICovCisJY21wbHdpCWNyMCxyNywxCS8qIGZsYWdnZWQgdG8gc3RheSB3aGVyZSB3ZSBhcmUgPyAqLwogCWJuZQkxZgogCWFkZAlyMjUscjI1LHIyNgotI2VuZGlmCiAxOgltcglyMyxyMjUKIAlibAkucmVsb2NhdGUKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzh4eC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzh4eC5TCmluZGV4IDFmMWEwNGIuLjFjYmY2NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84eHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfOHh4LlMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogLyogTWFjcm8gdG8gbWFrZSB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLiAqLwogI2lmZGVmIENPTkZJR184eHhfQ1BVNgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCmluZGV4IDUyOWI4MTcuLjNlMDI3MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlICJoZWFkX2Jvb2tlLmgiCiAKIC8qIEFzIHdpdGggdGhlIG90aGVyIFBvd2VyUEMgcG9ydHMsIGl0IGlzIGV4cGVjdGVkIHRoYXQgd2hlbiBjb2RlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKaW5kZXggZDU4MzkxNy4uOTYxYmIwMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYwpAQCAtMzExLDggKzMxMSw5IEBACiAJCS8qIEhhbmRsZSBmYWlsdXJlICovCiAJCWlmICh1bmxpa2VseShlbnRyeSA9PSBETUFfRVJST1JfQ09ERSkpIHsKIAkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiaW9tbXVfYWxsb2MgZmFpbGVkLCB0YmwgJXAgdmFkZHIgJWx4IgotCQkJCSAgICAgICAiIG5wYWdlcyAlbHhcbiIsIHRibCwgdmFkZHIsIG5wYWdlcyk7CisJCQkJZGV2X2luZm8oZGV2LCAiaW9tbXVfYWxsb2MgZmFpbGVkLCB0YmwgJXAgIgorCQkJCQkgInZhZGRyICVseCBucGFnZXMgJWx1XG4iLCB0YmwsIHZhZGRyLAorCQkJCQkgbnBhZ2VzKTsKIAkJCWdvdG8gZmFpbHVyZTsKIAkJfQogCkBAIC01NzksOSArNTgwLDkgQEAKIAkJCQkJIGF0dHJzKTsKIAkJaWYgKGRtYV9oYW5kbGUgPT0gRE1BX0VSUk9SX0NPREUpIHsKIAkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpICB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiaW9tbXVfYWxsb2MgZmFpbGVkLCAiCi0JCQkJCQkidGJsICVwIHZhZGRyICVwIG5wYWdlcyAlZFxuIiwKLQkJCQkJCXRibCwgdmFkZHIsIG5wYWdlcyk7CisJCQkJZGV2X2luZm8oZGV2LCAiaW9tbXVfYWxsb2MgZmFpbGVkLCB0YmwgJXAgIgorCQkJCQkgInZhZGRyICVwIG5wYWdlcyAlZFxuIiwgdGJsLCB2YWRkciwKKwkJCQkJIG5wYWdlcyk7CiAJCQl9CiAJCX0gZWxzZQogCQkJZG1hX2hhbmRsZSB8PSAodWFkZHIgJiB+SU9NTVVfUEFHRV9NQVNLKTsKQEAgLTYyNyw3ICs2MjgsOCBAQAogCSAqIHRoZSB0Y2UgdGFibGVzLgogCSAqLwogCWlmIChvcmRlciA+PSBJT01BUF9NQVhfT1JERVIpIHsKLQkJcHJpbnRrKCJpb21tdV9hbGxvY19jb25zaXN0ZW50IHNpemUgdG9vIGxhcmdlOiAweCVseFxuIiwgc2l6ZSk7CisJCWRldl9pbmZvKGRldiwgImlvbW11X2FsbG9jX2NvbnNpc3RlbnQgc2l6ZSB0b28gbGFyZ2U6IDB4JWx4XG4iLAorCQkJIHNpemUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzYy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMKaW5kZXggMmQyOTc1Mi4uYjY5NDYzZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMKQEAgLTEyMiw4ICsxMjIsMyBAQAogCW10bHIJcjAKIAltcglyMyxyNAogCWJscgotCi1fR0xPQkFMKF9fc2V0dXBfY3B1X3Bvd2VyNykKLV9HTE9CQUwoX19yZXN0b3JlX2NwdV9wb3dlcjcpCi0JLyogcGxhY2UgaG9sZGVyICovCi0JYmxyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY18zMi5TCmluZGV4IGE3YTU3MGQuLjA5NGJkOTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY18zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY18zMi5TCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9rZXhlYy5oPgogI2luY2x1ZGUgPGFzbS9idWcuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKIAkudGV4dAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCmluZGV4IGU1MTQ0OTAuLjIwNmEzMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL2tleGVjLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiAJLnRleHQKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jCmluZGV4IDljZjE5N2YuLmJiMTJiMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMKQEAgLTM0LDE1ICszNCwyNiBAQAogCiAjdW5kZWYgREVCVUdfTlZSQU0KIAotc3RhdGljIHN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKiBudnJhbV9wYXJ0Owotc3RhdGljIGxvbmcgbnZyYW1fZXJyb3JfbG9nX2luZGV4ID0gLTE7Ci1zdGF0aWMgbG9uZyBudnJhbV9lcnJvcl9sb2dfc2l6ZSA9IDA7CisjZGVmaW5lIE5WUkFNX0hFQURFUl9MRU4Jc2l6ZW9mKHN0cnVjdCBudnJhbV9oZWFkZXIpCisjZGVmaW5lIE5WUkFNX0JMT0NLX0xFTgkJTlZSQU1fSEVBREVSX0xFTgogCi1zdHJ1Y3QgZXJyX2xvZ19pbmZvIHsKLQlpbnQgZXJyb3JfdHlwZTsKLQl1bnNpZ25lZCBpbnQgc2VxX251bTsKKy8qIElmIGNoYW5nZSB0aGlzIHNpemUsIHRoZW4gY2hhbmdlIHRoZSBzaXplIG9mIE5WTkFNRV9MRU4gKi8KK3N0cnVjdCBudnJhbV9oZWFkZXIgeworCXVuc2lnbmVkIGNoYXIgc2lnbmF0dXJlOworCXVuc2lnbmVkIGNoYXIgY2hlY2tzdW07CisJdW5zaWduZWQgc2hvcnQgbGVuZ3RoOworCS8qIFRlcm1pbmF0aW5nIG51bGwgcmVxdWlyZWQgb25seSBmb3IgbmFtZXMgPCAxMiBjaGFycy4gKi8KKwljaGFyIG5hbWVbMTJdOwogfTsKIAorc3RydWN0IG52cmFtX3BhcnRpdGlvbiB7CisJc3RydWN0IGxpc3RfaGVhZCBwYXJ0aXRpb247CisJc3RydWN0IG52cmFtX2hlYWRlciBoZWFkZXI7CisJdW5zaWduZWQgaW50IGluZGV4OworfTsKKworc3RhdGljIExJU1RfSEVBRChudnJhbV9wYXJ0aXRpb25zKTsKKwogc3RhdGljIGxvZmZfdCBkZXZfbnZyYW1fbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQogewogCWludCBzaXplOwpAQCAtMTg2LDE0ICsxOTcsMTIgQEAKICNpZmRlZiBERUJVR19OVlJBTQogc3RhdGljIHZvaWQgX19pbml0IG52cmFtX3ByaW50X3BhcnRpdGlvbnMoY2hhciAqIGxhYmVsKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKiBwOwogCXN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKiB0bXBfcGFydDsKIAkKIAlwcmludGsoS0VSTl9XQVJOSU5HICItLS0tLS0tLSVzLS0tLS0tLS0tXG4iLCBsYWJlbCk7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiaW5keFx0XHRzaWdcdGNoa3NcdGxlblx0bmFtZVxuIik7Ci0JbGlzdF9mb3JfZWFjaChwLCAmbnZyYW1fcGFydC0+cGFydGl0aW9uKSB7Ci0JCXRtcF9wYXJ0ID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uLCBwYXJ0aXRpb24pOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlNGQgICAgXHQlMDJ4XHQlMDJ4XHQlZFx0JXNcbiIsCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfcGFydCwgJm52cmFtX3BhcnRpdGlvbnMsIHBhcnRpdGlvbikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlNGQgICAgXHQlMDJ4XHQlMDJ4XHQlZFx0JTEyc1xuIiwKIAkJICAgICAgIHRtcF9wYXJ0LT5pbmRleCwgdG1wX3BhcnQtPmhlYWRlci5zaWduYXR1cmUsCiAJCSAgICAgICB0bXBfcGFydC0+aGVhZGVyLmNoZWNrc3VtLCB0bXBfcGFydC0+aGVhZGVyLmxlbmd0aCwKIAkJICAgICAgIHRtcF9wYXJ0LT5oZWFkZXIubmFtZSk7CkBAIC0yMjgsOTUgKzIzNywxMTMgQEAKIAlyZXR1cm4gY19zdW07CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IG52cmFtX3JlbW92ZV9vc19wYXJ0aXRpb24odm9pZCkKKy8qKgorICogbnZyYW1fcmVtb3ZlX3BhcnRpdGlvbiAtIFJlbW92ZSBvbmUgb3IgbW9yZSBwYXJ0aXRpb25zIGluIG52cmFtCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgcGFydGl0aW9uIHRvIHJlbW92ZSwgb3IgTlVMTCBmb3IgYQorICogICAgICAgIHNpZ25hdHVyZSBvbmx5IG1hdGNoCisgKiBAc2lnOiBzaWduYXR1cmUgb2YgdGhlIHBhcnRpdGlvbihzKSB0byByZW1vdmUKKyAqLworCitpbnQgX19pbml0IG52cmFtX3JlbW92ZV9wYXJ0aXRpb24oY29uc3QgY2hhciAqbmFtZSwgaW50IHNpZykKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICppOwotCXN0cnVjdCBsaXN0X2hlYWQgKmo7Ci0Jc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqIHBhcnQ7Ci0Jc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqIGN1cl9wYXJ0OworCXN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKnBhcnQsICpwcmV2LCAqdG1wOwogCWludCByYzsKIAotCWxpc3RfZm9yX2VhY2goaSwgJm52cmFtX3BhcnQtPnBhcnRpdGlvbikgewotCQlwYXJ0ID0gbGlzdF9lbnRyeShpLCBzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uLCBwYXJ0aXRpb24pOwotCQlpZiAocGFydC0+aGVhZGVyLnNpZ25hdHVyZSAhPSBOVlJBTV9TSUdfT1MpCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXJ0LCAmbnZyYW1fcGFydGl0aW9ucywgcGFydGl0aW9uKSB7CisJCWlmIChwYXJ0LT5oZWFkZXIuc2lnbmF0dXJlICE9IHNpZykKIAkJCWNvbnRpbnVlOwotCQkKLQkJLyogTWFrZSBvcyBwYXJ0aXRpb24gYSBmcmVlIHBhcnRpdGlvbiAqLworCQlpZiAobmFtZSAmJiBzdHJuY21wKG5hbWUsIHBhcnQtPmhlYWRlci5uYW1lLCAxMikpCisJCQljb250aW51ZTsKKworCQkvKiBNYWtlIHBhcnRpdGlvbiBhIGZyZWUgcGFydGl0aW9uICovCiAJCXBhcnQtPmhlYWRlci5zaWduYXR1cmUgPSBOVlJBTV9TSUdfRlJFRTsKLQkJc3ByaW50ZihwYXJ0LT5oZWFkZXIubmFtZSwgInd3d3d3d3d3d3d3dyIpOworCQlzdHJuY3B5KHBhcnQtPmhlYWRlci5uYW1lLCAid3d3d3d3d3d3d3d3IiwgMTIpOwogCQlwYXJ0LT5oZWFkZXIuY2hlY2tzdW0gPSBudnJhbV9jaGVja3N1bSgmcGFydC0+aGVhZGVyKTsKLQotCQkvKiBNZXJnZSBjb250aWd1b3VzIGZyZWUgcGFydGl0aW9ucyBiYWNrd2FyZHMgKi8KLQkJbGlzdF9mb3JfZWFjaF9wcmV2KGosICZwYXJ0LT5wYXJ0aXRpb24pIHsKLQkJCWN1cl9wYXJ0ID0gbGlzdF9lbnRyeShqLCBzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uLCBwYXJ0aXRpb24pOwotCQkJaWYgKGN1cl9wYXJ0ID09IG52cmFtX3BhcnQgfHwgY3VyX3BhcnQtPmhlYWRlci5zaWduYXR1cmUgIT0gTlZSQU1fU0lHX0ZSRUUpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCQotCQkJcGFydC0+aGVhZGVyLmxlbmd0aCArPSBjdXJfcGFydC0+aGVhZGVyLmxlbmd0aDsKLQkJCXBhcnQtPmhlYWRlci5jaGVja3N1bSA9IG52cmFtX2NoZWNrc3VtKCZwYXJ0LT5oZWFkZXIpOwotCQkJcGFydC0+aW5kZXggPSBjdXJfcGFydC0+aW5kZXg7Ci0KLQkJCWxpc3RfZGVsKCZjdXJfcGFydC0+cGFydGl0aW9uKTsKLQkJCWtmcmVlKGN1cl9wYXJ0KTsKLQkJCWogPSAmcGFydC0+cGFydGl0aW9uOyAvKiBmaXh1cCBvdXIgbG9vcCAqLwotCQl9Ci0JCQotCQkvKiBNZXJnZSBjb250aWd1b3VzIGZyZWUgcGFydGl0aW9ucyBmb3J3YXJkcyAqLwotCQlsaXN0X2Zvcl9lYWNoKGosICZwYXJ0LT5wYXJ0aXRpb24pIHsKLQkJCWN1cl9wYXJ0ID0gbGlzdF9lbnRyeShqLCBzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uLCBwYXJ0aXRpb24pOwotCQkJaWYgKGN1cl9wYXJ0ID09IG52cmFtX3BhcnQgfHwgY3VyX3BhcnQtPmhlYWRlci5zaWduYXR1cmUgIT0gTlZSQU1fU0lHX0ZSRUUpIHsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJcGFydC0+aGVhZGVyLmxlbmd0aCArPSBjdXJfcGFydC0+aGVhZGVyLmxlbmd0aDsKLQkJCXBhcnQtPmhlYWRlci5jaGVja3N1bSA9IG52cmFtX2NoZWNrc3VtKCZwYXJ0LT5oZWFkZXIpOwotCi0JCQlsaXN0X2RlbCgmY3VyX3BhcnQtPnBhcnRpdGlvbik7Ci0JCQlrZnJlZShjdXJfcGFydCk7Ci0JCQlqID0gJnBhcnQtPnBhcnRpdGlvbjsgLyogZml4dXAgb3VyIGxvb3AgKi8KLQkJfQotCQkKIAkJcmMgPSBudnJhbV93cml0ZV9oZWFkZXIocGFydCk7CiAJCWlmIChyYyA8PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX3JlbW92ZV9vc19wYXJ0aXRpb246IG52cmFtX3dyaXRlIGZhaWxlZCAoJWQpXG4iLCByYyk7CisJCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX3JlbW92ZV9wYXJ0aXRpb246IG52cmFtX3dyaXRlIGZhaWxlZCAoJWQpXG4iLCByYyk7CiAJCQlyZXR1cm4gcmM7CiAJCX0KKwl9CiAKKwkvKiBNZXJnZSBjb250aWd1b3VzIG9uZXMgKi8KKwlwcmV2ID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFydCwgdG1wLCAmbnZyYW1fcGFydGl0aW9ucywgcGFydGl0aW9uKSB7CisJCWlmIChwYXJ0LT5oZWFkZXIuc2lnbmF0dXJlICE9IE5WUkFNX1NJR19GUkVFKSB7CisJCQlwcmV2ID0gTlVMTDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChwcmV2KSB7CisJCQlwcmV2LT5oZWFkZXIubGVuZ3RoICs9IHBhcnQtPmhlYWRlci5sZW5ndGg7CisJCQlwcmV2LT5oZWFkZXIuY2hlY2tzdW0gPSBudnJhbV9jaGVja3N1bSgmcGFydC0+aGVhZGVyKTsKKwkJCXJjID0gbnZyYW1fd3JpdGVfaGVhZGVyKHBhcnQpOworCQkJaWYgKHJjIDw9IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX3JlbW92ZV9wYXJ0aXRpb246IG52cmFtX3dyaXRlIGZhaWxlZCAoJWQpXG4iLCByYyk7CisJCQkJcmV0dXJuIHJjOworCQkJfQorCQkJbGlzdF9kZWwoJnBhcnQtPnBhcnRpdGlvbik7CisJCQlrZnJlZShwYXJ0KTsKKwkJfSBlbHNlCisJCQlwcmV2ID0gcGFydDsKIAl9CiAJCiAJcmV0dXJuIDA7CiB9CiAKLS8qIG52cmFtX2NyZWF0ZV9vc19wYXJ0aXRpb24KKy8qKgorICogbnZyYW1fY3JlYXRlX3BhcnRpdGlvbiAtIENyZWF0ZSBhIHBhcnRpdGlvbiBpbiBudnJhbQorICogQG5hbWU6IG5hbWUgb2YgdGhlIHBhcnRpdGlvbiB0byBjcmVhdGUKKyAqIEBzaWc6IHNpZ25hdHVyZSBvZiB0aGUgcGFydGl0aW9uIHRvIGNyZWF0ZQorICogQHJlcV9zaXplOiBzaXplIG9mIGRhdGEgdG8gYWxsb2NhdGUgaW4gYnl0ZXMKKyAqIEBtaW5fc2l6ZTogbWluaW11bSBhY2NlcHRhYmxlIHNpemUgKDAgbWVhbnMgcmVxX3NpemUpCiAgKgotICogQ3JlYXRlIGEgT1MgbGludXggcGFydGl0aW9uIHRvIGJ1ZmZlciBlcnJvciBsb2dzLgotICogV2lsbCBjcmVhdGUgYSBwYXJ0aXRpb24gc3RhcnRpbmcgYXQgdGhlIGZpcnN0IGZyZWUKLSAqIHNwYWNlIGZvdW5kIGlmIHNwYWNlIGhhcyBlbm91Z2ggcm9vbS4KKyAqIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9yIGEgcG9zaXRpdmUgbnZyYW0gaW5kZXgKKyAqIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEgYXJlYSBvZiB0aGUgbmV3bHkgY3JlYXRlZAorICogcGFydGl0aW9uLiBJZiB5b3UgcHJvdmlkZWQgYSBtaW5fc2l6ZSBzbWFsbGVyIHRoYW4gcmVxX3NpemUKKyAqIHlvdSBuZWVkIHRvIHF1ZXJ5IGZvciB0aGUgYWN0dWFsIHNpemUgeW91cnNlbGYgYWZ0ZXIgdGhlCisgKiBjYWxsIHVzaW5nIG52cmFtX3BhcnRpdGlvbl9nZXRfc2l6ZSgpLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBudnJhbV9jcmVhdGVfb3NfcGFydGl0aW9uKHZvaWQpCitsb2ZmX3QgX19pbml0IG52cmFtX2NyZWF0ZV9wYXJ0aXRpb24oY29uc3QgY2hhciAqbmFtZSwgaW50IHNpZywKKwkJCQkgICAgIGludCByZXFfc2l6ZSwgaW50IG1pbl9zaXplKQogewogCXN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKnBhcnQ7CiAJc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqbmV3X3BhcnQ7CiAJc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqZnJlZV9wYXJ0ID0gTlVMTDsKLQlpbnQgc2VxX2luaXRbMl0gPSB7IDAsIDAgfTsKKwlzdGF0aWMgY2hhciBudl9pbml0X3ZhbHNbMTZdOwogCWxvZmZfdCB0bXBfaW5kZXg7CiAJbG9uZyBzaXplID0gMDsKIAlpbnQgcmM7Ci0JCisKKwkvKiBDb252ZXJ0IHNpemVzIGZyb20gYnl0ZXMgdG8gYmxvY2tzICovCisJcmVxX3NpemUgPSBfQUxJR05fVVAocmVxX3NpemUsIE5WUkFNX0JMT0NLX0xFTikgLyBOVlJBTV9CTE9DS19MRU47CisJbWluX3NpemUgPSBfQUxJR05fVVAobWluX3NpemUsIE5WUkFNX0JMT0NLX0xFTikgLyBOVlJBTV9CTE9DS19MRU47CisKKwkvKiBJZiBubyBtaW5pbXVtIHNpemUgc3BlY2lmaWVkLCBtYWtlIGl0IHRoZSBzYW1lIGFzIHRoZQorCSAqIHJlcXVlc3RlZCBzaXplCisJICovCisJaWYgKG1pbl9zaXplID09IDApCisJCW1pbl9zaXplID0gcmVxX3NpemU7CisJaWYgKG1pbl9zaXplID4gcmVxX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTm93IGFkZCBvbmUgYmxvY2sgdG8gZWFjaCBmb3IgdGhlIGhlYWRlciAqLworCXJlcV9zaXplICs9IDE7CisJbWluX3NpemUgKz0gMTsKKwogCS8qIEZpbmQgYSBmcmVlIHBhcnRpdGlvbiB0aGF0IHdpbGwgZ2l2ZSB1cyB0aGUgbWF4aW11bSBuZWVkZWQgc2l6ZSAKIAkgICBJZiBjYW4ndCBmaW5kIG9uZSB0aGF0IHdpbGwgZ2l2ZSB1cyB0aGUgbWluaW11bSBzaXplIG5lZWRlZCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkocGFydCwgJm52cmFtX3BhcnQtPnBhcnRpdGlvbiwgcGFydGl0aW9uKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXJ0LCAmbnZyYW1fcGFydGl0aW9ucywgcGFydGl0aW9uKSB7CiAJCWlmIChwYXJ0LT5oZWFkZXIuc2lnbmF0dXJlICE9IE5WUkFNX1NJR19GUkVFKQogCQkJY29udGludWU7CiAKLQkJaWYgKHBhcnQtPmhlYWRlci5sZW5ndGggPj0gTlZSQU1fTUFYX1JFUSkgewotCQkJc2l6ZSA9IE5WUkFNX01BWF9SRVE7CisJCWlmIChwYXJ0LT5oZWFkZXIubGVuZ3RoID49IHJlcV9zaXplKSB7CisJCQlzaXplID0gcmVxX3NpemU7CiAJCQlmcmVlX3BhcnQgPSBwYXJ0OwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKCFzaXplICYmIHBhcnQtPmhlYWRlci5sZW5ndGggPj0gTlZSQU1fTUlOX1JFUSkgewotCQkJc2l6ZSA9IE5WUkFNX01JTl9SRVE7CisJCWlmIChwYXJ0LT5oZWFkZXIubGVuZ3RoID4gc2l6ZSAmJgorCQkgICAgcGFydC0+aGVhZGVyLmxlbmd0aCA+PSBtaW5fc2l6ZSkgeworCQkJc2l6ZSA9IHBhcnQtPmhlYWRlci5sZW5ndGg7CiAJCQlmcmVlX3BhcnQgPSBwYXJ0OwogCQl9CiAJfQpAQCAtMzI2LDEzNiArMzUzLDk1IEBACiAJLyogQ3JlYXRlIG91ciBPUyBwYXJ0aXRpb24gKi8KIAluZXdfcGFydCA9IGttYWxsb2Moc2l6ZW9mKCpuZXdfcGFydCksIEdGUF9LRVJORUwpOwogCWlmICghbmV3X3BhcnQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJudnJhbV9jcmVhdGVfb3NfcGFydGl0aW9uOiBrbWFsbG9jIGZhaWxlZFxuIik7CisJCXByX2VycigibnZyYW1fY3JlYXRlX29zX3BhcnRpdGlvbjoga21hbGxvYyBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAluZXdfcGFydC0+aW5kZXggPSBmcmVlX3BhcnQtPmluZGV4OwotCW5ld19wYXJ0LT5oZWFkZXIuc2lnbmF0dXJlID0gTlZSQU1fU0lHX09TOworCW5ld19wYXJ0LT5oZWFkZXIuc2lnbmF0dXJlID0gc2lnOwogCW5ld19wYXJ0LT5oZWFkZXIubGVuZ3RoID0gc2l6ZTsKLQlzdHJjcHkobmV3X3BhcnQtPmhlYWRlci5uYW1lLCAicHBjNjQsbGludXgiKTsKKwlzdHJuY3B5KG5ld19wYXJ0LT5oZWFkZXIubmFtZSwgbmFtZSwgMTIpOwogCW5ld19wYXJ0LT5oZWFkZXIuY2hlY2tzdW0gPSBudnJhbV9jaGVja3N1bSgmbmV3X3BhcnQtPmhlYWRlcik7CiAKIAlyYyA9IG52cmFtX3dyaXRlX2hlYWRlcihuZXdfcGFydCk7CiAJaWYgKHJjIDw9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJudnJhbV9jcmVhdGVfb3NfcGFydGl0aW9uOiBudnJhbV93cml0ZV9oZWFkZXIgIgotCQkJCSJmYWlsZWQgKCVkKVxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JLyogbWFrZSBzdXJlIGFuZCBpbml0aWFsaXplIHRvIHplcm8gdGhlIHNlcXVlbmNlIG51bWJlciBhbmQgdGhlIGVycm9yCi0JICAgdHlwZSBsb2dnZWQgKi8KLQl0bXBfaW5kZXggPSBuZXdfcGFydC0+aW5kZXggKyBOVlJBTV9IRUFERVJfTEVOOwotCXJjID0gcHBjX21kLm52cmFtX3dyaXRlKChjaGFyICopJnNlcV9pbml0LCBzaXplb2Yoc2VxX2luaXQpLCAmdG1wX2luZGV4KTsKLQlpZiAocmMgPD0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX2NyZWF0ZV9vc19wYXJ0aXRpb246IG52cmFtX3dyaXRlICIKKwkJcHJfZXJyKCJudnJhbV9jcmVhdGVfb3NfcGFydGl0aW9uOiBudnJhbV93cml0ZV9oZWFkZXIgIgogCQkgICAgICAgImZhaWxlZCAoJWQpXG4iLCByYyk7CiAJCXJldHVybiByYzsKIAl9Ci0JCi0JbnZyYW1fZXJyb3JfbG9nX2luZGV4ID0gbmV3X3BhcnQtPmluZGV4ICsgTlZSQU1fSEVBREVSX0xFTjsKLQludnJhbV9lcnJvcl9sb2dfc2l6ZSA9ICgocGFydC0+aGVhZGVyLmxlbmd0aCAtIDEpICoKLQkJCQlOVlJBTV9CTE9DS19MRU4pIC0gc2l6ZW9mKHN0cnVjdCBlcnJfbG9nX2luZm8pOwotCQogCWxpc3RfYWRkX3RhaWwoJm5ld19wYXJ0LT5wYXJ0aXRpb24sICZmcmVlX3BhcnQtPnBhcnRpdGlvbik7CiAKLQlpZiAoZnJlZV9wYXJ0LT5oZWFkZXIubGVuZ3RoIDw9IHNpemUpIHsKKwkvKiBBZGp1c3Qgb3IgcmVtb3ZlIHRoZSBwYXJ0aXRpb24gd2Ugc3RvbGUgdGhlIHNwYWNlIGZyb20gKi8KKwlpZiAoZnJlZV9wYXJ0LT5oZWFkZXIubGVuZ3RoID4gc2l6ZSkgeworCQlmcmVlX3BhcnQtPmluZGV4ICs9IHNpemUgKiBOVlJBTV9CTE9DS19MRU47CisJCWZyZWVfcGFydC0+aGVhZGVyLmxlbmd0aCAtPSBzaXplOworCQlmcmVlX3BhcnQtPmhlYWRlci5jaGVja3N1bSA9IG52cmFtX2NoZWNrc3VtKCZmcmVlX3BhcnQtPmhlYWRlcik7CisJCXJjID0gbnZyYW1fd3JpdGVfaGVhZGVyKGZyZWVfcGFydCk7CisJCWlmIChyYyA8PSAwKSB7CisJCQlwcl9lcnIoIm52cmFtX2NyZWF0ZV9vc19wYXJ0aXRpb246IG52cmFtX3dyaXRlX2hlYWRlciAiCisJCQkgICAgICAgImZhaWxlZCAoJWQpXG4iLCByYyk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9IGVsc2UgewogCQlsaXN0X2RlbCgmZnJlZV9wYXJ0LT5wYXJ0aXRpb24pOwogCQlrZnJlZShmcmVlX3BhcnQpOwotCQlyZXR1cm4gMDsKIAl9IAogCi0JLyogQWRqdXN0IHRoZSBwYXJ0aXRpb24gd2Ugc3RvbGUgdGhlIHNwYWNlIGZyb20gKi8KLQlmcmVlX3BhcnQtPmluZGV4ICs9IHNpemUgKiBOVlJBTV9CTE9DS19MRU47Ci0JZnJlZV9wYXJ0LT5oZWFkZXIubGVuZ3RoIC09IHNpemU7Ci0JZnJlZV9wYXJ0LT5oZWFkZXIuY2hlY2tzdW0gPSBudnJhbV9jaGVja3N1bSgmZnJlZV9wYXJ0LT5oZWFkZXIpOwotCQotCXJjID0gbnZyYW1fd3JpdGVfaGVhZGVyKGZyZWVfcGFydCk7Ci0JaWYgKHJjIDw9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJudnJhbV9jcmVhdGVfb3NfcGFydGl0aW9uOiBudnJhbV93cml0ZV9oZWFkZXIgIgotCQkgICAgICAgImZhaWxlZCAoJWQpXG4iLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKiBudnJhbV9zZXR1cF9wYXJ0aXRpb24KLSAqCi0gKiBUaGlzIHdpbGwgc2V0dXAgdGhlIHBhcnRpdGlvbiB3ZSBuZWVkIGZvciBidWZmZXJpbmcgdGhlCi0gKiBlcnJvciBsb2dzIGFuZCBjbGVhbnVwIHBhcnRpdGlvbnMgaWYgbmVlZGVkLgotICoKLSAqIFRoZSBnZW5lcmFsIHN0cmF0ZWd5IGlzIHRoZSBmb2xsb3dpbmc6Ci0gKiAxLikgSWYgdGhlcmUgaXMgcHBjNjQsbGludXggcGFydGl0aW9uIGxhcmdlIGVub3VnaCB0aGVuIHVzZSBpdC4KLSAqIDIuKSBJZiB0aGVyZSBpcyBub3QgYSBwcGM2NCxsaW51eCBwYXJ0aXRpb24gbGFyZ2UgZW5vdWdoLCBzZWFyY2gKLSAqIGZvciBhIGZyZWUgcGFydGl0aW9uIHRoYXQgaXMgbGFyZ2UgZW5vdWdoLgotICogMy4pIElmIHRoZXJlIGlzIG5vdCBhIGZyZWUgcGFydGl0aW9uIGxhcmdlIGVub3VnaCByZW1vdmUgCi0gKiBfYWxsXyBPUyBwYXJ0aXRpb25zIGFuZCBjb25zb2xpZGF0ZSB0aGUgc3BhY2UuCi0gKiA0LikgV2lsbCBmaXJzdCB0cnkgZ2V0dGluZyBhIGNodW5rIHRoYXQgd2lsbCBzYXRpc2Z5IHRoZSBtYXhpbXVtCi0gKiBlcnJvciBsb2cgc2l6ZSAoTlZSQU1fTUFYX1JFUSkuCi0gKiA1LikgSWYgdGhlIG1heCBjaHVuayBjYW5ub3QgYmUgYWxsb2NhdGVkIHRoZW4gdHJ5IGZpbmRpbmcgYSBjaHVuawotICogdGhhdCB3aWxsIHNhdGlzZnkgdGhlIG1pbnVtIG5lZWRlZCAoTlZSQU1fTUlOX1JFUSkuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IG52cmFtX3NldHVwX3BhcnRpdGlvbih2b2lkKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKiBwOwotCXN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKiBwYXJ0OwotCWludCByYzsKLQotCS8qIEZvciBub3csIHdlIGRvbid0IGRvIGFueSBvZiB0aGlzIG9uIHBtYWMsIHVudGlsIEkKLQkgKiBoYXZlIGZpZ3VyZWQgb3V0IGlmIGl0J3Mgd29ydGgga2lsbGluZyBzb21lIHVudXNlZCBzdHVmZnMKLQkgKiBpbiBvdXIgbnZyYW0sIGFzIEFwcGxlIGRlZmluZWQgcGFydGl0aW9ucyB1c2UgcHJldHR5IG11Y2gKLQkgKiBhbGwgb2YgdGhlIHNwYWNlCi0JICovCi0JaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpKQotCQlyZXR1cm4gLUVOT1NQQzsKLQotCS8qIHNlZSBpZiB3ZSBoYXZlIGFuIE9TIHBhcnRpdGlvbiB0aGF0IG1lZXRzIG91ciBuZWVkcy4KLQkgICB3aWxsIHRyeSBnZXR0aW5nIHRoZSBtYXggd2UgbmVlZC4gIElmIG5vdCB3ZSdsbCBkZWxldGUKLQkgICBwYXJ0aXRpb25zIGFuZCB0cnkgYWdhaW4uICovCi0JbGlzdF9mb3JfZWFjaChwLCAmbnZyYW1fcGFydC0+cGFydGl0aW9uKSB7Ci0JCXBhcnQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBudnJhbV9wYXJ0aXRpb24sIHBhcnRpdGlvbik7Ci0JCWlmIChwYXJ0LT5oZWFkZXIuc2lnbmF0dXJlICE9IE5WUkFNX1NJR19PUykKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzdHJjbXAocGFydC0+aGVhZGVyLm5hbWUsICJwcGM2NCxsaW51eCIpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHBhcnQtPmhlYWRlci5sZW5ndGggPj0gTlZSQU1fTUlOX1JFUSkgewotCQkJLyogZm91bmQgb3VyIHBhcnRpdGlvbiAqLwotCQkJbnZyYW1fZXJyb3JfbG9nX2luZGV4ID0gcGFydC0+aW5kZXggKyBOVlJBTV9IRUFERVJfTEVOOwotCQkJbnZyYW1fZXJyb3JfbG9nX3NpemUgPSAoKHBhcnQtPmhlYWRlci5sZW5ndGggLSAxKSAqCi0JCQkJCQlOVlJBTV9CTE9DS19MRU4pIC0gc2l6ZW9mKHN0cnVjdCBlcnJfbG9nX2luZm8pOwotCQkJcmV0dXJuIDA7CisJLyogQ2xlYXIgdGhlIG5ldyBwYXJ0aXRpb24gKi8KKwlmb3IgKHRtcF9pbmRleCA9IG5ld19wYXJ0LT5pbmRleCArIE5WUkFNX0hFQURFUl9MRU47CisJICAgICB0bXBfaW5kZXggPCAgKChzaXplIC0gMSkgKiBOVlJBTV9CTE9DS19MRU4pOworCSAgICAgdG1wX2luZGV4ICs9IE5WUkFNX0JMT0NLX0xFTikgeworCQlyYyA9IHBwY19tZC5udnJhbV93cml0ZShudl9pbml0X3ZhbHMsIE5WUkFNX0JMT0NLX0xFTiwgJnRtcF9pbmRleCk7CisJCWlmIChyYyA8PSAwKSB7CisJCQlwcl9lcnIoIm52cmFtX2NyZWF0ZV9wYXJ0aXRpb246IG52cmFtX3dyaXRlIGZhaWxlZCAoJWQpXG4iLCByYyk7CisJCQlyZXR1cm4gcmM7CiAJCX0KIAl9CiAJCi0JLyogdHJ5IGNyZWF0aW5nIGEgcGFydGl0aW9uIHdpdGggdGhlIGZyZWUgc3BhY2Ugd2UgaGF2ZSAqLwotCXJjID0gbnZyYW1fY3JlYXRlX29zX3BhcnRpdGlvbigpOwotCWlmICghcmMpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCQkKLQkvKiBuZWVkIHRvIGZyZWUgdXAgc29tZSBzcGFjZSAqLwotCXJjID0gbnZyYW1fcmVtb3ZlX29zX3BhcnRpdGlvbigpOwotCWlmIChyYykgewotCQlyZXR1cm4gcmM7Ci0JfQorCXJldHVybiBuZXdfcGFydC0+aW5kZXggKyBOVlJBTV9IRUFERVJfTEVOOworfQorCisvKioKKyAqIG52cmFtX2dldF9wYXJ0aXRpb25fc2l6ZSAtIEdldCB0aGUgZGF0YSBzaXplIG9mIGFuIG52cmFtIHBhcnRpdGlvbgorICogQGRhdGFfaW5kZXg6IFRoaXMgaXMgdGhlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdGhlIGRhdGEgb2YKKyAqICAgICAgICAgICAgICB0aGUgcGFydGl0aW9uLiBUaGUgc2FtZSB2YWx1ZSB0aGF0IGlzIHJldHVybmVkIGJ5CisgKiAgICAgICAgICAgICAgbnZyYW1fY3JlYXRlX3BhcnRpdGlvbigpLgorICovCitpbnQgbnZyYW1fZ2V0X3BhcnRpdGlvbl9zaXplKGxvZmZfdCBkYXRhX2luZGV4KQoreworCXN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKnBhcnQ7CiAJCi0JLyogY3JlYXRlIGEgcGFydGl0aW9uIGluIHRoaXMgbmV3IHNwYWNlICovCi0JcmMgPSBudnJhbV9jcmVhdGVfb3NfcGFydGl0aW9uKCk7Ci0JaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibnZyYW1fY3JlYXRlX29zX3BhcnRpdGlvbjogQ291bGQgbm90IGZpbmQgYSAiCi0JCSAgICAgICAiTlZSQU0gcGFydGl0aW9uIGxhcmdlIGVub3VnaFxuIik7Ci0JCXJldHVybiByYzsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhcnQsICZudnJhbV9wYXJ0aXRpb25zLCBwYXJ0aXRpb24pIHsKKwkJaWYgKHBhcnQtPmluZGV4ICsgTlZSQU1fSEVBREVSX0xFTiA9PSBkYXRhX2luZGV4KQorCQkJcmV0dXJuIChwYXJ0LT5oZWFkZXIubGVuZ3RoIC0gMSkgKiBOVlJBTV9CTE9DS19MRU47CiAJfQotCQotCXJldHVybiAwOworCXJldHVybiAtMTsKIH0KIAogCi1zdGF0aWMgaW50IF9faW5pdCBudnJhbV9zY2FuX3BhcnRpdGlvbnModm9pZCkKKy8qKgorICogbnZyYW1fZmluZF9wYXJ0aXRpb24gLSBGaW5kIGFuIG52cmFtIHBhcnRpdGlvbiBieSBzaWduYXR1cmUgYW5kIG5hbWUKKyAqIEBuYW1lOiBOYW1lIG9mIHRoZSBwYXJ0aXRpb24gb3IgTlVMTCBmb3IgYW55IG5hbWUKKyAqIEBzaWc6IFNpZ25hdHVyZSB0byB0ZXN0IGFnYWluc3QKKyAqIEBvdXRfc2l6ZTogaWYgbm9uLU5VTEwsIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGRhdGEgcGFydCBvZiB0aGUgcGFydGl0aW9uCisgKi8KK2xvZmZfdCBudnJhbV9maW5kX3BhcnRpdGlvbihjb25zdCBjaGFyICpuYW1lLCBpbnQgc2lnLCBpbnQgKm91dF9zaXplKQoreworCXN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKnA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZudnJhbV9wYXJ0aXRpb25zLCBwYXJ0aXRpb24pIHsKKwkJaWYgKHAtPmhlYWRlci5zaWduYXR1cmUgPT0gc2lnICYmCisJCSAgICAoIW5hbWUgfHwgIXN0cm5jbXAocC0+aGVhZGVyLm5hbWUsIG5hbWUsIDEyKSkpIHsKKwkJCWlmIChvdXRfc2l6ZSkKKwkJCQkqb3V0X3NpemUgPSAocC0+aGVhZGVyLmxlbmd0aCAtIDEpICoKKwkJCQkJTlZSQU1fQkxPQ0tfTEVOOworCQkJcmV0dXJuIHAtPmluZGV4ICsgTlZSQU1fSEVBREVSX0xFTjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBudnJhbV9zY2FuX3BhcnRpdGlvbnModm9pZCkKIHsKIAlsb2ZmX3QgY3VyX2luZGV4ID0gMDsKIAlzdHJ1Y3QgbnZyYW1faGVhZGVyIHBoZWFkOwpAQCAtNDY1LDcgKzQ1MSw3IEBACiAJaW50IHRvdGFsX3NpemU7CiAJaW50IGVycjsKIAotCWlmIChwcGNfbWQubnZyYW1fc2l6ZSA9PSBOVUxMKQorCWlmIChwcGNfbWQubnZyYW1fc2l6ZSA9PSBOVUxMIHx8IHBwY19tZC5udnJhbV9zaXplKCkgPD0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJdG90YWxfc2l6ZSA9IHBwY19tZC5udnJhbV9zaXplKCk7CiAJCkBAIC01MTIsMTIgKzQ5OCwxNiBAQAogCQkKIAkJbWVtY3B5KCZ0bXBfcGFydC0+aGVhZGVyLCAmcGhlYWQsIE5WUkFNX0hFQURFUl9MRU4pOwogCQl0bXBfcGFydC0+aW5kZXggPSBjdXJfaW5kZXg7Ci0JCWxpc3RfYWRkX3RhaWwoJnRtcF9wYXJ0LT5wYXJ0aXRpb24sICZudnJhbV9wYXJ0LT5wYXJ0aXRpb24pOworCQlsaXN0X2FkZF90YWlsKCZ0bXBfcGFydC0+cGFydGl0aW9uLCAmbnZyYW1fcGFydGl0aW9ucyk7CiAJCQogCQljdXJfaW5kZXggKz0gcGhlYWQubGVuZ3RoICogTlZSQU1fQkxPQ0tfTEVOOwogCX0KIAllcnIgPSAwOwogCisjaWZkZWYgREVCVUdfTlZSQU0KKwludnJhbV9wcmludF9wYXJ0aXRpb25zKCJOVlJBTSBQYXJ0aXRpb25zIik7CisjZW5kaWYKKwogIG91dDoKIAlrZnJlZShoZWFkZXIpOwogCXJldHVybiBlcnI7CkBAIC01MjUsOSArNTE1LDEwIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG52cmFtX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyb3I7CiAJaW50IHJjOwogCQorCUJVSUxEX0JVR19PTihOVlJBTV9CTE9DS19MRU4gIT0gMTYpOworCiAJaWYgKHBwY19tZC5udnJhbV9zaXplID09IE5VTEwgfHwgcHBjX21kLm52cmFtX3NpemUoKSA8PSAwKQogCQlyZXR1cm4gIC1FTk9ERVY7CiAKQEAgLTUzNywyOSArNTI4LDYgQEAKIAkJcmV0dXJuIHJjOwogCX0KICAgCQotICAJLyogaW5pdGlhbGl6ZSBvdXIgYW5jaG9yIGZvciB0aGUgbnZyYW0gcGFydGl0aW9uIGxpc3QgKi8KLSAgCW52cmFtX3BhcnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uKSwgR0ZQX0tFUk5FTCk7Ci0gIAlpZiAoIW52cmFtX3BhcnQpIHsKLSAgCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX2luaXQ6IEZhaWxlZCBrbWFsbG9jXG4iKTsKLSAgCQlyZXR1cm4gLUVOT01FTTsKLSAgCX0KLSAgCUlOSVRfTElTVF9IRUFEKCZudnJhbV9wYXJ0LT5wYXJ0aXRpb24pOwotICAKLSAgCS8qIEdldCBhbGwgdGhlIE5WUkFNIHBhcnRpdGlvbnMgKi8KLSAgCWVycm9yID0gbnZyYW1fc2Nhbl9wYXJ0aXRpb25zKCk7Ci0gIAlpZiAoZXJyb3IpIHsKLSAgCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX2luaXQ6IEZhaWxlZCBudnJhbV9zY2FuX3BhcnRpdGlvbnNcbiIpOwotICAJCXJldHVybiBlcnJvcjsKLSAgCX0KLSAgCQkKLSAgCWlmKG52cmFtX3NldHVwX3BhcnRpdGlvbigpKSAKLSAgCQlwcmludGsoS0VSTl9XQVJOSU5HICJudnJhbV9pbml0OiBDb3VsZCBub3QgZmluZCBudnJhbSBwYXJ0aXRpb24iCi0gIAkJICAgICAgICIgZm9yIG52cmFtIGJ1ZmZlcmVkIGVycm9yIGxvZ2dpbmcuXG4iKTsKLSAgCi0jaWZkZWYgREVCVUdfTlZSQU0KLQludnJhbV9wcmludF9wYXJ0aXRpb25zKCJOVlJBTSBQYXJ0aXRpb25zIik7Ci0jZW5kaWYKLQogICAJcmV0dXJuIHJjOwogfQogCkBAIC01NjgsMTM1ICs1MzYsNiBAQAogICAgICAgICBtaXNjX2RlcmVnaXN0ZXIoICZudnJhbV9kZXYgKTsKIH0KIAotCi0jaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCi0KLS8qIG52cmFtX3dyaXRlX2Vycm9yX2xvZwotICoKLSAqIFdlIG5lZWQgdG8gYnVmZmVyIHRoZSBlcnJvciBsb2dzIGludG8gbnZyYW0gdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZQotICogdGhlIGZhaWx1cmUgaW5mb3JtYXRpb24gdG8gZGVjb2RlLiAgSWYgd2UgaGF2ZSBhIHNldmVyZSBlcnJvciB0aGVyZQotICogaXMgbm8gd2F5IHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBPUyBvciB0aGUgbWFjaGluZSBpcyBpbiBhIHN0YXRlIHRvCi0gKiBnZXQgYmFjayB0byB1c2VyIGxhbmQgYW5kIHdyaXRlIHRoZSBlcnJvciB0byBkaXNrLiAgRm9yIGV4YW1wbGUgaWYKLSAqIHRoZSBTQ1NJIGRldmljZSBkcml2ZXIgY2F1c2VzIGEgTWFjaGluZSBDaGVjayBieSB3cml0aW5nIHRvIGEgYmFkCi0gKiBJTyBhZGRyZXNzLCB0aGVyZSBpcyBubyB3YXkgb2YgZ3VhcmFudGVlaW5nIHRoYXQgdGhlIGRldmljZSBkcml2ZXIKLSAqIGlzIGluIGFueSBzdGF0ZSB0aGF0IGlzIHdvdWxkIGFsc28gYmUgYWJsZSB0byB3cml0ZSB0aGUgZXJyb3IgZGF0YQotICogY2FwdHVyZWQgdG8gZGlzaywgdGh1cyB3ZSBidWZmZXIgaXQgaW4gTlZSQU0gZm9yIGFuYWx5c2lzIG9uIHRoZQotICogbmV4dCBib290LgotICoKLSAqIEluIE5WUkFNIHRoZSBwYXJ0aXRpb24gY29udGFpbmluZyB0aGUgZXJyb3IgbG9nIGJ1ZmZlciB3aWxsIGxvb2tzIGxpa2U6Ci0gKiBIZWFkZXIgKGluIGJ5dGVzKToKLSAqICstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiB8IHNpZ25hdHVyZSB8IGNoZWNrc3VtIHwgbGVuZ3RoIHwgbmFtZSAgICAgICB8IGRhdGEgICAgICAgICAgICAgfAotICogfDAgICAgICAgICAgfDEgICAgICAgICB8MiAgICAgIDN8NCAgICAgICAgIDE1fDE2ICAgICAgICBsZW5ndGgtMXwKLSAqICstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rCi0gKgotICogVGhlICdkYXRhJyBzZWN0aW9uIHdvdWxkIGxvb2sgbGlrZSAoaW4gYnl0ZXMpOgotICogKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqIHwgZXZlbnRfbG9nZ2VkIHwgc2VxdWVuY2UgIyB8IGVycm9yIGxvZyAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiB8MCAgICAgICAgICAgIDN8NCAgICAgICAgICA3fDggICAgICAgICAgICBudnJhbV9lcnJvcl9sb2dfc2l6ZS0xfAotICogKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqCi0gKiBldmVudF9sb2dnZWQ6IDAgaWYgZXZlbnQgaGFzIG5vdCBiZWVuIGxvZ2dlZCB0byBzeXNsb2csIDEgaWYgaXQgaGFzCi0gKiBzZXF1ZW5jZSAjOiBUaGUgdW5pcXVlIHNlcXVlbmNlICMgZm9yIGVhY2ggZXZlbnQuICh1bnRpbCBpdCB3cmFwcykKLSAqIGVycm9yIGxvZzogVGhlIGVycm9yIGxvZyBmcm9tIGV2ZW50X3NjYW4KLSAqLwotaW50IG52cmFtX3dyaXRlX2Vycm9yX2xvZyhjaGFyICogYnVmZiwgaW50IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGVycl90eXBlLCB1bnNpZ25lZCBpbnQgZXJyb3JfbG9nX2NudCkKLXsKLQlpbnQgcmM7Ci0JbG9mZl90IHRtcF9pbmRleDsKLQlzdHJ1Y3QgZXJyX2xvZ19pbmZvIGluZm87Ci0JCi0JaWYgKG52cmFtX2Vycm9yX2xvZ19pbmRleCA9PSAtMSkgewotCQlyZXR1cm4gLUVTUElQRTsKLQl9Ci0KLQlpZiAobGVuZ3RoID4gbnZyYW1fZXJyb3JfbG9nX3NpemUpIHsKLQkJbGVuZ3RoID0gbnZyYW1fZXJyb3JfbG9nX3NpemU7Ci0JfQotCi0JaW5mby5lcnJvcl90eXBlID0gZXJyX3R5cGU7Ci0JaW5mby5zZXFfbnVtID0gZXJyb3JfbG9nX2NudDsKLQotCXRtcF9pbmRleCA9IG52cmFtX2Vycm9yX2xvZ19pbmRleDsKLQotCXJjID0gcHBjX21kLm52cmFtX3dyaXRlKChjaGFyICopJmluZm8sIHNpemVvZihzdHJ1Y3QgZXJyX2xvZ19pbmZvKSwgJnRtcF9pbmRleCk7Ci0JaWYgKHJjIDw9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJudnJhbV93cml0ZV9lcnJvcl9sb2c6IEZhaWxlZCBudnJhbV93cml0ZSAoJWQpXG4iLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlyYyA9IHBwY19tZC5udnJhbV93cml0ZShidWZmLCBsZW5ndGgsICZ0bXBfaW5kZXgpOwotCWlmIChyYyA8PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibnZyYW1fd3JpdGVfZXJyb3JfbG9nOiBGYWlsZWQgbnZyYW1fd3JpdGUgKCVkKVxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCQotCXJldHVybiAwOwotfQotCi0vKiBudnJhbV9yZWFkX2Vycm9yX2xvZwotICoKLSAqIFJlYWRzIG52cmFtIGZvciBlcnJvciBsb2cgZm9yIGF0IG1vc3QgJ2xlbmd0aCcKLSAqLwotaW50IG52cmFtX3JlYWRfZXJyb3JfbG9nKGNoYXIgKiBidWZmLCBpbnQgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqIGVycl90eXBlLCB1bnNpZ25lZCBpbnQgKiBlcnJvcl9sb2dfY250KQotewotCWludCByYzsKLQlsb2ZmX3QgdG1wX2luZGV4OwotCXN0cnVjdCBlcnJfbG9nX2luZm8gaW5mbzsKLQkKLQlpZiAobnZyYW1fZXJyb3JfbG9nX2luZGV4ID09IC0xKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAobGVuZ3RoID4gbnZyYW1fZXJyb3JfbG9nX3NpemUpCi0JCWxlbmd0aCA9IG52cmFtX2Vycm9yX2xvZ19zaXplOwotCi0JdG1wX2luZGV4ID0gbnZyYW1fZXJyb3JfbG9nX2luZGV4OwotCi0JcmMgPSBwcGNfbWQubnZyYW1fcmVhZCgoY2hhciAqKSZpbmZvLCBzaXplb2Yoc3RydWN0IGVycl9sb2dfaW5mbyksICZ0bXBfaW5kZXgpOwotCWlmIChyYyA8PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibnZyYW1fcmVhZF9lcnJvcl9sb2c6IEZhaWxlZCBudnJhbV9yZWFkICglZClcbiIsIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCXJjID0gcHBjX21kLm52cmFtX3JlYWQoYnVmZiwgbGVuZ3RoLCAmdG1wX2luZGV4KTsKLQlpZiAocmMgPD0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX3JlYWRfZXJyb3JfbG9nOiBGYWlsZWQgbnZyYW1fcmVhZCAoJWQpXG4iLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQkqZXJyb3JfbG9nX2NudCA9IGluZm8uc2VxX251bTsKLQkqZXJyX3R5cGUgPSBpbmZvLmVycm9yX3R5cGU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogVGhpcyBkb2Vzbid0IGFjdHVhbGx5IHplcm8gYW55dGhpbmcsIGJ1dCBpdCBzZXRzIHRoZSBldmVudF9sb2dnZWQKLSAqIHdvcmQgdG8gdGVsbCB0aGF0IHRoaXMgZXZlbnQgaXMgc2FmZWx5IGluIHN5c2xvZy4KLSAqLwotaW50IG52cmFtX2NsZWFyX2Vycm9yX2xvZyh2b2lkKQotewotCWxvZmZfdCB0bXBfaW5kZXg7Ci0JaW50IGNsZWFyX3dvcmQgPSBFUlJfRkxBR19BTFJFQURZX0xPR0dFRDsKLQlpbnQgcmM7Ci0KLQlpZiAobnZyYW1fZXJyb3JfbG9nX2luZGV4ID09IC0xKQotCQlyZXR1cm4gLTE7Ci0KLQl0bXBfaW5kZXggPSBudnJhbV9lcnJvcl9sb2dfaW5kZXg7Ci0JCi0JcmMgPSBwcGNfbWQubnZyYW1fd3JpdGUoKGNoYXIgKikmY2xlYXJfd29yZCwgc2l6ZW9mKGludCksICZ0bXBfaW5kZXgpOwotCWlmIChyYyA8PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibnZyYW1fY2xlYXJfZXJyb3JfbG9nOiBGYWlsZWQgbnZyYW1fd3JpdGUgKCVkKVxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfUFBDX1BTRVJJRVMgKi8KLQogbW9kdWxlX2luaXQobnZyYW1faW5pdCk7CiBtb2R1bGVfZXhpdChudnJhbV9jbGVhbnVwKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCmluZGV4IGQ0M2ZjNjUuLjg1MTU3NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwpAQCAtMTkzLDggKzE5Myw3IEBACiAJaG9zZS0+aW9fcmVzb3VyY2Uuc3RhcnQgKz0gaW9fdmlydF9vZmZzZXQ7CiAJaG9zZS0+aW9fcmVzb3VyY2UuZW5kICs9IGlvX3ZpcnRfb2Zmc2V0OwogCi0JcHJfZGVidWcoIiAgaG9zZS0+aW9fcmVzb3VyY2U9MHglMDE2bGx4Li4uMHglMDE2bGx4XG4iLAotCQkgaG9zZS0+aW9fcmVzb3VyY2Uuc3RhcnQsIGhvc2UtPmlvX3Jlc291cmNlLmVuZCk7CisJcHJfZGVidWcoIiAgaG9zZS0+aW9fcmVzb3VyY2U9JXBSXG4iLCAmaG9zZS0+aW9fcmVzb3VyY2UpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwppbmRleCBhYjNlMzkyLi5lZjNlZjU2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTE4NiwzICsxODYsMTAgQEAKIEVYUE9SVF9TWU1CT0woX19tZmRjcik7CiAjZW5kaWYKIEVYUE9SVF9TWU1CT0woZW1wdHlfemVyb19wYWdlKTsKKworI2lmZGVmIENPTkZJR19QUEM2NAorRVhQT1JUX1NZTUJPTChfX2FyY2hfaHdlaWdodDgpOworRVhQT1JUX1NZTUJPTChfX2FyY2hfaHdlaWdodDE2KTsKK0VYUE9SVF9TWU1CT0woX19hcmNoX2h3ZWlnaHQzMik7CitFWFBPUlRfU1lNQk9MKF9fYXJjaF9od2VpZ2h0NjQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19zYXZlX3JlZ3MuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX3NhdmVfcmVncy5TCmluZGV4IDUxMTNiZDIuLmU4M2JhM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX3NhdmVfcmVncy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX3NhdmVfcmVncy5TCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiAvKgogICogR3JhYiB0aGUgcmVnaXN0ZXIgdmFsdWVzIGFzIHRoZXkgYXJlIG5vdy4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCmluZGV4IGE5YjMyOTYuLjkwNjUzNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTMxNiw2ICsxMzE2LDEwIEBACiBzdGF0aWMgbG9uZyBwcGNfc2V0X2h3ZGVidWcoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKIAkJICAgICBzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQgKmJwX2luZm8pCiB7CisjaWZuZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwl1bnNpZ25lZCBsb25nIGRhYnI7CisjZW5kaWYKKwogCWlmIChicF9pbmZvLT52ZXJzaW9uICE9IDEpCiAJCXJldHVybiAtRU5PVFNVUFA7CiAjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwpAQCAtMTM1MywxMSArMTM1NywxMCBAQAogCS8qCiAJICogV2Ugb25seSBzdXBwb3J0IG9uZSBkYXRhIGJyZWFrcG9pbnQKIAkgKi8KLQlpZiAoKChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JXKSA9PSAwKSB8fAotCSAgICAoKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIH5QUENfQlJFQUtQT0lOVF9UUklHR0VSX1JXKSAhPSAwKSB8fAotCSAgICAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICE9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfV1JJVEUpIHx8Ci0JICAgIChicF9pbmZvLT5hZGRyX21vZGUgIT0gUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVCkgfHwKLQkgICAgKGJwX2luZm8tPmNvbmRpdGlvbl9tb2RlICE9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FKSkKKwlpZiAoKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUlcpID09IDAgfHwKKwkgICAgKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIH5QUENfQlJFQUtQT0lOVF9UUklHR0VSX1JXKSAhPSAwIHx8CisJICAgIGJwX2luZm8tPmFkZHJfbW9kZSAhPSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUIHx8CisJICAgIGJwX2luZm8tPmNvbmRpdGlvbl9tb2RlICE9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjaGlsZC0+dGhyZWFkLmRhYnIpCkBAIC0xMzY2LDcgKzEzNjksMTQgQEAKIAlpZiAoKHVuc2lnbmVkIGxvbmcpYnBfaW5mby0+YWRkciA+PSBUQVNLX1NJWkUpCiAJCXJldHVybiAtRUlPOwogCi0JY2hpbGQtPnRocmVhZC5kYWJyID0gKHVuc2lnbmVkIGxvbmcpYnBfaW5mby0+YWRkcjsKKwlkYWJyID0gKHVuc2lnbmVkIGxvbmcpYnBfaW5mby0+YWRkciAmIH43VUw7CisJZGFiciB8PSBEQUJSX1RSQU5TTEFUSU9OOworCWlmIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JFQUQpCisJCWRhYnIgfD0gREFCUl9EQVRBX1JFQUQ7CisJaWYgKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfV1JJVEUpCisJCWRhYnIgfD0gREFCUl9EQVRBX1dSSVRFOworCisJY2hpbGQtPnRocmVhZC5kYWJyID0gZGFicjsKIAogCXJldHVybiAxOwogI2VuZGlmIC8qICFDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZTMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZTMyLmMKaW5kZXggOGE2ZGFmNC4uNjljNGJlOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UzMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlMzIuYwpAQCAtMjgwLDcgKzI4MCwxMSBAQAogCQkvKiBXZSBvbmx5IHN1cHBvcnQgb25lIERBQlIgYW5kIG5vIElBQlJTIGF0IHRoZSBtb21lbnQgKi8KIAkJaWYgKGFkZHIgPiAwKQogCQkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworCQlyZXQgPSBwdXRfdXNlcihjaGlsZC0+dGhyZWFkLmRhYzEsICh1MzIgX191c2VyICopZGF0YSk7CisjZWxzZQogCQlyZXQgPSBwdXRfdXNlcihjaGlsZC0+dGhyZWFkLmRhYnIsICh1MzIgX191c2VyICopZGF0YSk7CisjZW5kaWYKIAkJYnJlYWs7CiAJfQogCkBAIC0zMTIsNiArMzE2LDkgQEAKIAljYXNlIFBUUkFDRV9TRVRfREVCVUdSRUc6CiAJY2FzZSBQVFJBQ0VfU1lTQ0FMTDoKIAljYXNlIFBUUkFDRV9DT05UOgorCWNhc2UgUFBDX1BUUkFDRV9HRVRIV0RCR0lORk86CisJY2FzZSBQUENfUFRSQUNFX1NFVEhXREVCVUc6CisJY2FzZSBQUENfUFRSQUNFX0RFTEhXREVCVUc6CiAJCXJldCA9IGFyY2hfcHRyYWNlKGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKaW5kZXggOGZlOGJjNi4uMjA5N2YyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL3RvcG9sb2d5Lmg+CiAKIHN0cnVjdCBydGFzX3QgcnRhcyA9IHsKIAkubG9jayA9IF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQKQEAgLTcxMyw2ICs3MTQsNyBAQAogCWludCBjcHU7CiAKIAlzbGJfc2V0X3NpemUoU0xCX01JTl9TSVpFKTsKKwlzdG9wX3RvcG9sb2d5X3VwZGF0ZSgpOwogCXByaW50ayhLRVJOX0RFQlVHICJjYWxsaW5nIGlibSxzdXNwZW5kLW1lIG9uIGNwdSAlaVxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCXdoaWxlIChyYyA9PSBIX01VTFRJX1RIUkVBRFNfQUNUSVZFICYmICFhdG9taWNfcmVhZCgmZGF0YS0+ZG9uZSkgJiYKQEAgLTcyOCw2ICs3MzAsNyBAQAogCQlyYyA9IGF0b21pY19yZWFkKCZkYXRhLT5lcnJvcik7CiAKIAlhdG9taWNfc2V0KCZkYXRhLT5lcnJvciwgcmMpOworCXN0YXJ0X3RvcG9sb2d5X3VwZGF0ZSgpOwogCiAJaWYgKHdha2Vfd2hlbl9kb25lKSB7CiAJCWF0b21pY19zZXQoJmRhdGEtPmRvbmUsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IGNlNmY2MWMuLjVhMDQwMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKQEAgLTQzNyw4ICs0MzcsOCBAQAogCXVuc2lnbmVkIGludCBpOwogCiAJLyoKLQkgKiBpbnRlcnJ1cHQgc3RhY2tzIG11c3QgYmUgdW5kZXIgMjU2TUIsIHdlIGNhbm5vdCBhZmZvcmQgdG8gdGFrZQotCSAqIFNMQiBtaXNzZXMgb24gdGhlbS4KKwkgKiBJbnRlcnJ1cHQgc3RhY2tzIG11c3QgYmUgaW4gdGhlIGZpcnN0IHNlZ21lbnQgc2luY2Ugd2UKKwkgKiBjYW5ub3QgYWZmb3JkIHRvIHRha2UgU0xCIG1pc3NlcyBvbiB0aGVtLgogCSAqLwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXNvZnRpcnFfY3R4W2ldID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKaW5kZXggNjgwMzRiYi4uOTgxMzYwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCkBAIC00NjYsNyArNDY2LDIwIEBACiAJcmV0dXJuIGlkOwogfQogCi0vKiBNdXN0IGJlIGNhbGxlZCB3aGVuIG5vIGNoYW5nZSBjYW4gb2NjdXIgdG8gY3B1X3ByZXNlbnRfbWFzaywKKy8qIEhlbHBlciByb3V0aW5lcyBmb3IgY3B1IHRvIGNvcmUgbWFwcGluZyAqLworaW50IGNwdV9jb3JlX2luZGV4X29mX3RocmVhZChpbnQgY3B1KQoreworCXJldHVybiBjcHUgPj4gdGhyZWFkc19zaGlmdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNwdV9jb3JlX2luZGV4X29mX3RocmVhZCk7CisKK2ludCBjcHVfZmlyc3RfdGhyZWFkX29mX2NvcmUoaW50IGNvcmUpCit7CisJcmV0dXJuIGNvcmUgPDwgdGhyZWFkc19zaGlmdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNwdV9maXJzdF90aHJlYWRfb2ZfY29yZSk7CisKKy8qIE11c3QgYmUgY2FsbGVkIHdoZW4gbm8gY2hhbmdlIGNhbiBvY2N1ciB0byBjcHVfcHJlc2VudF9tYXAsCiAgKiBpLmUuIGR1cmluZyBjcHUgb25saW5lIG9yIG9mZmxpbmUuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdV90b19sMmNhY2hlKGludCBjcHUpCkBAIC01MTQsNyArNTI3LDcgQEAKIAlub3RpZnlfY3B1X3N0YXJ0aW5nKGNwdSk7CiAJc2V0X2NwdV9vbmxpbmUoY3B1LCB0cnVlKTsKIAkvKiBVcGRhdGUgc2libGluZyBtYXBzICovCi0JYmFzZSA9IGNwdV9maXJzdF90aHJlYWRfaW5fY29yZShjcHUpOworCWJhc2UgPSBjcHVfZmlyc3RfdGhyZWFkX3NpYmxpbmcoY3B1KTsKIAlmb3IgKGkgPSAwOyBpIDwgdGhyZWFkc19wZXJfY29yZTsgaSsrKSB7CiAJCWlmIChjcHVfaXNfb2ZmbGluZShiYXNlICsgaSkpCiAJCQljb250aW51ZTsKQEAgLTYwMCw3ICs2MTMsNyBAQAogCQlyZXR1cm4gZXJyOwogCiAJLyogVXBkYXRlIHNpYmxpbmcgbWFwcyAqLwotCWJhc2UgPSBjcHVfZmlyc3RfdGhyZWFkX2luX2NvcmUoY3B1KTsKKwliYXNlID0gY3B1X2ZpcnN0X3RocmVhZF9zaWJsaW5nKGNwdSk7CiAJZm9yIChpID0gMDsgaSA8IHRocmVhZHNfcGVyX2NvcmU7IGkrKykgewogCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIGNwdV9zaWJsaW5nX21hc2soYmFzZSArIGkpKTsKIAkJY3B1bWFza19jbGVhcl9jcHUoYmFzZSArIGksIGNwdV9zaWJsaW5nX21hc2soY3B1KSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCmluZGV4IDAxMDQwNjkuLjA5ZTRkZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAogc3RhdGljIHU2NCB0Yl90b19uc19zY2FsZSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIHVuc2lnbmVkIHRiX3RvX25zX3NoaWZ0IF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBib290X3RiIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgdTY0IGJvb3RfdGIgX19yZWFkX21vc3RseTsKIAogZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBzeXNfdHo7CiBzdGF0aWMgbG9uZyB0aW1lem9uZV9vZmZzZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZlY3Rvci5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZWN0b3IuUwppbmRleCBmZTQ2MDQ4Li45ZGU2ZjM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZlY3Rvci5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmVjdG9yLlMKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKIC8qCiAgKiBsb2FkX3VwX2FsdGl2ZWModW51c2VkLCB1bnVzZWQsIHRzaykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCmluZGV4IDQ0MWQyYTcuLjFiNjk1ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwpAQCAtNjAwLDYgKzYwMCwxMSBAQAogCXZpb19jbW9fZGVhbGxvYyh2aW9kZXYsIGFsbG9jX3NpemUpOwogfQogCitzdGF0aWMgaW50IHZpb19kbWFfaW9tbXVfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworICAgICAgICByZXR1cm4gZG1hX2lvbW11X29wcy5kbWFfc3VwcG9ydGVkKGRldiwgbWFzayk7Cit9CisKIHN0cnVjdCBkbWFfbWFwX29wcyB2aW9fZG1hX21hcHBpbmdfb3BzID0gewogCS5hbGxvY19jb2hlcmVudCA9IHZpb19kbWFfaW9tbXVfYWxsb2NfY29oZXJlbnQsCiAJLmZyZWVfY29oZXJlbnQgID0gdmlvX2RtYV9pb21tdV9mcmVlX2NvaGVyZW50LApAQCAtNjA3LDYgKzYxMiw3IEBACiAJLnVubWFwX3NnICAgICAgID0gdmlvX2RtYV9pb21tdV91bm1hcF9zZywKIAkubWFwX3BhZ2UgICAgICAgPSB2aW9fZG1hX2lvbW11X21hcF9wYWdlLAogCS51bm1hcF9wYWdlICAgICA9IHZpb19kbWFfaW9tbXVfdW5tYXBfcGFnZSwKKwkuZG1hX3N1cHBvcnRlZCAgPSB2aW9fZG1hX2lvbW11X2RtYV9zdXBwb3J0ZWQsCiAKIH07CiAKQEAgLTg1OCw4ICs4NjQsNyBAQAogCiBzdGF0aWMgdm9pZCB2aW9fY21vX3NldF9kbWFfb3BzKHN0cnVjdCB2aW9fZGV2ICp2aW9kZXYpCiB7Ci0JdmlvX2RtYV9tYXBwaW5nX29wcy5kbWFfc3VwcG9ydGVkID0gZG1hX2lvbW11X29wcy5kbWFfc3VwcG9ydGVkOwotCXZpb2Rldi0+ZGV2LmFyY2hkYXRhLmRtYV9vcHMgPSAmdmlvX2RtYV9tYXBwaW5nX29wczsKKwlzZXRfZG1hX29wcygmdmlvZGV2LT5kZXYsICZ2aW9fZG1hX21hcHBpbmdfb3BzKTsKIH0KIAogLyoqCkBAIC0xMjQ0LDcgKzEyNDksNyBAQAogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0NNTykpCiAJCXZpb19jbW9fc2V0X2RtYV9vcHModmlvZGV2KTsKIAllbHNlCi0JCXZpb2Rldi0+ZGV2LmFyY2hkYXRhLmRtYV9vcHMgPSAmZG1hX2lvbW11X29wczsKKwkJc2V0X2RtYV9vcHMoJnZpb2Rldi0+ZGV2LCAmZG1hX2lvbW11X29wcyk7CiAJc2V0X2lvbW11X3RhYmxlX2Jhc2UoJnZpb2Rldi0+ZGV2LCB2aW9fYnVpbGRfaW9tbXVfdGFibGUodmlvZGV2KSk7CiAJc2V0X2Rldl9ub2RlKCZ2aW9kZXYtPmRldiwgb2Zfbm9kZV90b19uaWQob2Zfbm9kZSkpOwogCkBAIC0xMjUyLDYgKzEyNTcsMTAgQEAKIAl2aW9kZXYtPmRldi5wYXJlbnQgPSAmdmlvX2J1c19kZXZpY2UuZGV2OwogCXZpb2Rldi0+ZGV2LmJ1cyA9ICZ2aW9fYnVzX3R5cGU7CiAJdmlvZGV2LT5kZXYucmVsZWFzZSA9IHZpb19kZXZfcmVsZWFzZTsKKyAgICAgICAgLyogbmVlZGVkIHRvIGVuc3VyZSBwcm9wZXIgb3BlcmF0aW9uIG9mIGNvaGVyZW50IGFsbG9jYXRpb25zCisgICAgICAgICAqIGxhdGVyLCBpbiBjYXNlIGRyaXZlciBkb2Vzbid0IHNldCBpdCBleHBsaWNpdGx5ICovCisgICAgICAgIGRtYV9zZXRfbWFzaygmdmlvZGV2LT5kZXYsIERNQV9CSVRfTUFTSyg2NCkpOworICAgICAgICBkbWFfc2V0X2NvaGVyZW50X21hc2soJnZpb2Rldi0+ZGV2LCBETUFfQklUX01BU0soNjQpKTsKIAogCS8qIHJlZ2lzdGVyIHdpdGggZ2VuZXJpYyBkZXZpY2UgZnJhbWV3b3JrICovCiAJaWYgKGRldmljZV9yZWdpc3RlcigmdmlvZGV2LT5kZXYpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYwppbmRleCBlMzE2ODQ3Li5iYWRjOTgzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmMKQEAgLTEzMDcsMTIgKzEzMDcsMTAgQEAKIAlpbnQgZXJyID0gLUVOT01FTTsKIAl1bnNpZ25lZCBsb25nIHA7CiAKLQl2Y3B1X2Jvb2szcyA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MpKTsKKwl2Y3B1X2Jvb2szcyA9IHZ6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MpKTsKIAlpZiAoIXZjcHVfYm9vazNzKQogCQlnb3RvIG91dDsKIAotCW1lbXNldCh2Y3B1X2Jvb2szcywgMCwgc2l6ZW9mKHN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MpKTsKLQogCXZjcHVfYm9vazNzLT5zaGFkb3dfdmNwdSA9IChzdHJ1Y3Qga3ZtcHBjX2Jvb2szc19zaGFkb3dfdmNwdSAqKQogCQlremFsbG9jKHNpemVvZigqdmNwdV9ib29rM3MtPnNoYWRvd192Y3B1KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF2Y3B1X2Jvb2szcy0+c2hhZG93X3ZjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCmluZGV4IDM4Zjc1NmYuLjk5NzU4NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCkBAIC0xNDUsMTggKzE0NSwxMiBAQAogCSooaW50ICopcnRuID0ga3ZtcHBjX2NvcmVfY2hlY2tfcHJvY2Vzc29yX2NvbXBhdCgpOwogfQogCi1zdHJ1Y3Qga3ZtICprdm1fYXJjaF9jcmVhdGVfdm0odm9pZCkKK2ludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKLQlzdHJ1Y3Qga3ZtICprdm07Ci0KLQlrdm0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFrdm0pCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JcmV0dXJuIGt2bTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQga3ZtcHBjX2ZyZWVfdmNwdXMoc3RydWN0IGt2bSAqa3ZtKQordm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CkBAIC0xNzYsMTQgKzE3MCw2IEBACiB7CiB9CiAKLXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pCi17Ci0Ja3ZtcHBjX2ZyZWVfdmNwdXMoa3ZtKTsKLQlrdm1fZnJlZV9waHlzbWVtKGt2bSk7Ci0JY2xlYW51cF9zcmN1X3N0cnVjdCgma3ZtLT5zcmN1KTsKLQlrZnJlZShrdm0pOwotfQotCiBpbnQga3ZtX2Rldl9pb2N0bF9jaGVja19leHRlbnNpb24obG9uZyBleHQpCiB7CiAJaW50IHI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2xpYi9NYWtlZmlsZQppbmRleCA4ODlmMmJjLi4xNjZhNmEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvTWFrZWZpbGUKQEAgLTE2LDcgKzE2LDcgQEAKIAogb2JqLSQoQ09ORklHX1BQQzY0KQkrPSBjb3B5cGFnZV82NC5vIGNvcHl1c2VyXzY0Lm8gXAogCQkJICAgbWVtY3B5XzY0Lm8gdXNlcmNvcHlfNjQubyBtZW1fNjQubyBzdHJpbmcubyBcCi0JCQkgICBjaGVja3N1bV93cmFwcGVyc182NC5vCisJCQkgICBjaGVja3N1bV93cmFwcGVyc182NC5vIGh3ZWlnaHRfNjQubwogb2JqLSQoQ09ORklHX1hNT04pCSs9IHNzdGVwLm8gbGRzdGZwLm8KIG9iai0kKENPTkZJR19LUFJPQkVTKQkrPSBzc3RlcC5vIGxkc3RmcC5vCiBvYmotJChDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UKQkrPSBzc3RlcC5vIGxkc3RmcC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2h3ZWlnaHRfNjQuUyBiL2FyY2gvcG93ZXJwYy9saWIvaHdlaWdodF82NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTI3ODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvbGliL2h3ZWlnaHRfNjQuUwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMTAKKyAqCisgKiBBdXRob3I6IEFudG9uIEJsYW5jaGFyZCA8YW50b25AYXUuaWJtLmNvbT4KKyAqLworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorCisvKiBOb3RlOiBUaGlzIGNvZGUgcmVsaWVzIG9uIC1tbWluaW1hbC10b2MgKi8KKworX0dMT0JBTChfX2FyY2hfaHdlaWdodDgpCitCRUdJTl9GVFJfU0VDVElPTgorCWIgLl9fc3dfaHdlaWdodDgKKwlub3AKKwlub3AKK0ZUUl9TRUNUSU9OX0VMU0UKKwlQUENfUE9QQ05UQihyMyxyMykKKwljbHJsZGkJcjMscjMsNjQtOAorCWJscgorQUxUX0ZUUl9TRUNUSU9OX0VORF9JRkNMUihDUFVfRlRSX1BPUENOVEIpCisKK19HTE9CQUwoX19hcmNoX2h3ZWlnaHQxNikKK0JFR0lOX0ZUUl9TRUNUSU9OCisJYiAuX19zd19od2VpZ2h0MTYKKwlub3AKKwlub3AKKwlub3AKKwlub3AKK0ZUUl9TRUNUSU9OX0VMU0UKKyAgQkVHSU5fRlRSX1NFQ1RJT05fTkVTVEVEKDUwKQorCVBQQ19QT1BDTlRCKHIzLHIzKQorCXNyZGkJcjQscjMsOAorCWFkZAlyMyxyNCxyMworCWNscmxkaQlyMyxyMyw2NC04CisJYmxyCisgIEZUUl9TRUNUSU9OX0VMU0VfTkVTVEVEKDUwKQorCWNscmx3aSAgcjMscjMsMTYKKwlQUENfUE9QQ05UVyhyMyxyMykKKwljbHJsZGkJcjMscjMsNjQtOAorCWJscgorICBBTFRfRlRSX1NFQ1RJT05fRU5EX05FU1RFRF9JRkNMUihDUFVfRlRSX1BPUENOVEQsIDUwKQorQUxUX0ZUUl9TRUNUSU9OX0VORF9JRkNMUihDUFVfRlRSX1BPUENOVEIpCisKK19HTE9CQUwoX19hcmNoX2h3ZWlnaHQzMikKK0JFR0lOX0ZUUl9TRUNUSU9OCisJYiAuX19zd19od2VpZ2h0MzIKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKK0ZUUl9TRUNUSU9OX0VMU0UKKyAgQkVHSU5fRlRSX1NFQ1RJT05fTkVTVEVEKDUxKQorCVBQQ19QT1BDTlRCKHIzLHIzKQorCXNyZGkJcjQscjMsMTYKKwlhZGQJcjMscjQscjMKKwlzcmRpCXI0LHIzLDgKKwlhZGQJcjMscjQscjMKKwljbHJsZGkJcjMscjMsNjQtOAorCWJscgorICBGVFJfU0VDVElPTl9FTFNFX05FU1RFRCg1MSkKKwlQUENfUE9QQ05UVyhyMyxyMykKKwljbHJsZGkJcjMscjMsNjQtOAorCWJscgorICBBTFRfRlRSX1NFQ1RJT05fRU5EX05FU1RFRF9JRkNMUihDUFVfRlRSX1BPUENOVEQsIDUxKQorQUxUX0ZUUl9TRUNUSU9OX0VORF9JRkNMUihDUFVfRlRSX1BPUENOVEIpCisKK19HTE9CQUwoX19hcmNoX2h3ZWlnaHQ2NCkKK0JFR0lOX0ZUUl9TRUNUSU9OCisJYiAuX19zd19od2VpZ2h0NjQKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKK0ZUUl9TRUNUSU9OX0VMU0UKKyAgQkVHSU5fRlRSX1NFQ1RJT05fTkVTVEVEKDUyKQorCVBQQ19QT1BDTlRCKHIzLHIzKQorCXNyZGkJcjQscjMsMzIKKwlhZGQJcjMscjQscjMKKwlzcmRpCXI0LHIzLDE2CisJYWRkCXIzLHI0LHIzCisJc3JkaQlyNCxyMyw4CisJYWRkCXIzLHI0LHIzCisJY2xybGRpCXIzLHIzLDY0LTgKKwlibHIKKyAgRlRSX1NFQ1RJT05fRUxTRV9ORVNURUQoNTIpCisJUFBDX1BPUENOVEQocjMscjMpCisJY2xybGRpCXIzLHIzLDY0LTgKKwlibHIKKyAgQUxUX0ZUUl9TRUNUSU9OX0VORF9ORVNURURfSUZDTFIoQ1BVX0ZUUl9QT1BDTlRELCA1MikKK0FMVF9GVFJfU0VDVElPTl9FTkRfSUZDTFIoQ1BVX0ZUUl9QT1BDTlRCKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKaW5kZXggNWU5NTg0NC4uYTU5OTFmYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCkBAIC0xMDcwLDcgKzEwNzAsNyBAQAogCQkgIHVuc2lnbmVkIGxvbmcgYWNjZXNzLCB1bnNpZ25lZCBsb25nIHRyYXApCiB7CiAJdW5zaWduZWQgbG9uZyB2c2lkOwotCXZvaWQgKnBnZGlyOworCXBnZF90ICpwZ2RpcjsKIAlwdGVfdCAqcHRlcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYywgc3NpemUsIGxvY2FsID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwppbmRleCA1Y2U5OTg0Li5jMGFhYjUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCkBAIC0xMTEsOCArMTExLDggQEAKIAkJICogYSBjb3JlIG1hcCBpbnN0ZWFkIGJ1dCB0aGlzIHdpbGwgZG8gZm9yIG5vdy4KIAkJICovCiAJCWZvcl9lYWNoX2NwdShjcHUsIG1tX2NwdW1hc2sobW0pKSB7Ci0JCQlmb3IgKGkgPSBjcHVfZmlyc3RfdGhyZWFkX2luX2NvcmUoY3B1KTsKLQkJCSAgICAgaSA8PSBjcHVfbGFzdF90aHJlYWRfaW5fY29yZShjcHUpOyBpKyspCisJCQlmb3IgKGkgPSBjcHVfZmlyc3RfdGhyZWFkX3NpYmxpbmcoY3B1KTsKKwkJCSAgICAgaSA8PSBjcHVfbGFzdF90aHJlYWRfc2libGluZyhjcHUpOyBpKyspCiAJCQkJX19zZXRfYml0KGlkLCBzdGFsZV9tYXBbaV0pOwogCQkJY3B1ID0gaSAtIDE7CiAJCX0KQEAgLTI2NCwxNCArMjY0LDE0IEBACiAJICovCiAJaWYgKHRlc3RfYml0KGlkLCBzdGFsZV9tYXBbY3B1XSkpIHsKIAkJcHJfaGFyZGNvbnQoIiB8IHN0YWxlIGZsdXNoICVkIFslZC4uJWRdIiwKLQkJCSAgICBpZCwgY3B1X2ZpcnN0X3RocmVhZF9pbl9jb3JlKGNwdSksCi0JCQkgICAgY3B1X2xhc3RfdGhyZWFkX2luX2NvcmUoY3B1KSk7CisJCQkgICAgaWQsIGNwdV9maXJzdF90aHJlYWRfc2libGluZyhjcHUpLAorCQkJICAgIGNwdV9sYXN0X3RocmVhZF9zaWJsaW5nKGNwdSkpOwogCiAJCWxvY2FsX2ZsdXNoX3RsYl9tbShuZXh0KTsKIAogCQkvKiBYWFggVGhpcyBjbGVhciBzaG91bGQgdWx0aW1hdGVseSBiZSBwYXJ0IG9mIGxvY2FsX2ZsdXNoX3RsYl9tbSAqLwotCQlmb3IgKGkgPSBjcHVfZmlyc3RfdGhyZWFkX2luX2NvcmUoY3B1KTsKLQkJICAgICBpIDw9IGNwdV9sYXN0X3RocmVhZF9pbl9jb3JlKGNwdSk7IGkrKykgeworCQlmb3IgKGkgPSBjcHVfZmlyc3RfdGhyZWFkX3NpYmxpbmcoY3B1KTsKKwkJICAgICBpIDw9IGNwdV9sYXN0X3RocmVhZF9zaWJsaW5nKGNwdSk7IGkrKykgewogCQkJX19jbGVhcl9iaXQoaWQsIHN0YWxlX21hcFtpXSk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwppbmRleCA3NDUwNWIyLi5iZjVjYjkxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKQEAgLTIwLDEwICsyMCwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ub2RlLmg+CiAjaW5jbHVkZSA8YXNtL3NwYXJzZW1lbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxhc20vcGFjYS5oPgorI2luY2x1ZGUgPGFzbS9odmNhbGwuaD4KIAogc3RhdGljIGludCBudW1hX2VuYWJsZWQgPSAxOwogCkBAIC0xNjMsNyArMTY4LDcgQEAKIAl3b3JrX3dpdGhfYWN0aXZlX3JlZ2lvbnMobmlkLCBnZXRfYWN0aXZlX3JlZ2lvbl93b3JrX2ZuLCBub2RlX2FyKTsKIH0KIAotc3RhdGljIHZvaWQgX19jcHVpbml0IG1hcF9jcHVfdG9fbm9kZShpbnQgY3B1LCBpbnQgbm9kZSkKK3N0YXRpYyB2b2lkIG1hcF9jcHVfdG9fbm9kZShpbnQgY3B1LCBpbnQgbm9kZSkKIHsKIAludW1hX2NwdV9sb29rdXBfdGFibGVbY3B1XSA9IG5vZGU7CiAKQEAgLTE3Myw3ICsxNzgsNyBAQAogCQljcHVtYXNrX3NldF9jcHUoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdKTsKIH0KIAotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSB8fCBkZWZpbmVkKENPTkZJR19QUENfU1BMUEFSKQogc3RhdGljIHZvaWQgdW5tYXBfY3B1X2Zyb21fbm9kZSh1bnNpZ25lZCBsb25nIGNwdSkKIHsKIAlpbnQgbm9kZSA9IG51bWFfY3B1X2xvb2t1cF90YWJsZVtjcHVdOwpAQCAtMTg3LDcgKzE5Miw3IEBACiAJCSAgICAgICBjcHUsIG5vZGUpOwogCX0KIH0KLSNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KKyNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgfHwgQ09ORklHX1BQQ19TUExQQVIgKi8KIAogLyogbXVzdCBob2xkIHJlZmVyZW5jZSB0byBub2RlIGR1cmluZyBjYWxsICovCiBzdGF0aWMgY29uc3QgaW50ICpvZl9nZXRfYXNzb2NpYXRpdml0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKQEAgLTI0NiwzMiArMjUxLDQxIEBACiAvKiBSZXR1cm5zIG5pZCBpbiB0aGUgcmFuZ2UgWzAuLk1BWF9OVU1OT0RFUy0xXSwgb3IgLTEgaWYgbm8gdXNlZnVsIG51bWEKICAqIGluZm8gaXMgZm91bmQuCiAgKi8KLXN0YXRpYyBpbnQgb2Zfbm9kZV90b19uaWRfc2luZ2xlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlKQorc3RhdGljIGludCBhc3NvY2lhdGl2aXR5X3RvX25pZChjb25zdCB1bnNpZ25lZCBpbnQgKmFzc29jaWF0aXZpdHkpCiB7CiAJaW50IG5pZCA9IC0xOwotCWNvbnN0IHVuc2lnbmVkIGludCAqdG1wOwogCiAJaWYgKG1pbl9jb21tb25fZGVwdGggPT0gLTEpCiAJCWdvdG8gb3V0OwogCi0JdG1wID0gb2ZfZ2V0X2Fzc29jaWF0aXZpdHkoZGV2aWNlKTsKLQlpZiAoIXRtcCkKLQkJZ290byBvdXQ7Ci0KLQlpZiAodG1wWzBdID49IG1pbl9jb21tb25fZGVwdGgpCi0JCW5pZCA9IHRtcFttaW5fY29tbW9uX2RlcHRoXTsKKwlpZiAoYXNzb2NpYXRpdml0eVswXSA+PSBtaW5fY29tbW9uX2RlcHRoKQorCQluaWQgPSBhc3NvY2lhdGl2aXR5W21pbl9jb21tb25fZGVwdGhdOwogCiAJLyogUE9XRVI0IExQQVIgdXNlcyAweGZmZmYgYXMgaW52YWxpZCBub2RlICovCiAJaWYgKG5pZCA9PSAweGZmZmYgfHwgbmlkID49IE1BWF9OVU1OT0RFUykKIAkJbmlkID0gLTE7CiAKLQlpZiAobmlkID4gMCAmJiB0bXBbMF0gPj0gZGlzdGFuY2VfcmVmX3BvaW50c19kZXB0aCkKLQkJaW5pdGlhbGl6ZV9kaXN0YW5jZV9sb29rdXBfdGFibGUobmlkLCB0bXApOworCWlmIChuaWQgPiAwICYmIGFzc29jaWF0aXZpdHlbMF0gPj0gZGlzdGFuY2VfcmVmX3BvaW50c19kZXB0aCkKKwkJaW5pdGlhbGl6ZV9kaXN0YW5jZV9sb29rdXBfdGFibGUobmlkLCBhc3NvY2lhdGl2aXR5KTsKIAogb3V0OgogCXJldHVybiBuaWQ7CiB9CiAKKy8qIFJldHVybnMgdGhlIG5pZCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGRldmljZSB0cmVlIG5vZGUsCisgKiBvciAtMSBpZiBub3QgZm91bmQuCisgKi8KK3N0YXRpYyBpbnQgb2Zfbm9kZV90b19uaWRfc2luZ2xlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlKQoreworCWludCBuaWQgPSAtMTsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnRtcDsKKworCXRtcCA9IG9mX2dldF9hc3NvY2lhdGl2aXR5KGRldmljZSk7CisJaWYgKHRtcCkKKwkJbmlkID0gYXNzb2NpYXRpdml0eV90b19uaWQodG1wKTsKKwlyZXR1cm4gbmlkOworfQorCiAvKiBXYWxrIHRoZSBkZXZpY2UgdHJlZSB1cHdhcmRzLCBsb29raW5nIGZvciBhbiBhc3NvY2lhdGl2aXR5IGlkICovCiBpbnQgb2Zfbm9kZV90b19uaWQoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UpCiB7CkBAIC0xMjQ3LDQgKzEyNjEsMjc1IEBACiAJcmV0dXJuIG5pZDsKIH0KIAorc3RhdGljIHU2NCBob3RfYWRkX2RyY29uZl9tZW1vcnlfbWF4KHZvaWQpCit7CisgICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5ID0gTlVMTDsKKyAgICAgICAgdW5zaWduZWQgaW50IGRyY29uZl9jZWxsX2NudCA9IDA7CisgICAgICAgIHU2NCBsbWJfc2l6ZSA9IDA7CisgICAgICAgIGNvbnN0IHUzMiAqZG0gPSAwOworCisgICAgICAgIG1lbW9yeSA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeSIpOworICAgICAgICBpZiAobWVtb3J5KSB7CisgICAgICAgICAgICAgICAgZHJjb25mX2NlbGxfY250ID0gb2ZfZ2V0X2RyY29uZl9tZW1vcnkobWVtb3J5LCAmZG0pOworICAgICAgICAgICAgICAgIGxtYl9zaXplID0gb2ZfZ2V0X2xtYl9zaXplKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgb2Zfbm9kZV9wdXQobWVtb3J5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbG1iX3NpemUgKiBkcmNvbmZfY2VsbF9jbnQ7Cit9CisKKy8qCisgKiBtZW1vcnlfaG90cGx1Z19tYXggLSByZXR1cm4gbWF4IGFkZHJlc3Mgb2YgbWVtb3J5IHRoYXQgbWF5IGJlIGFkZGVkCisgKgorICogVGhpcyBpcyBjdXJyZW50bHkgb25seSB1c2VkIG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGRyY29uZmlnIG1lbW9yeQorICogaG90cGx1Zy4KKyAqLwordTY0IG1lbW9yeV9ob3RwbHVnX21heCh2b2lkKQoreworICAgICAgICByZXR1cm4gbWF4KGhvdF9hZGRfZHJjb25mX21lbW9yeV9tYXgoKSwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSk7Cit9CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCisKKy8qIFZydHVhbCBQcm9jZXNzb3IgSG9tZSBOb2RlIChWUEhOKSBzdXBwb3J0ICovCisjaWZkZWYgQ09ORklHX1BQQ19TUExQQVIKKyNkZWZpbmUgVlBITl9OUl9DSEFOR0VfQ1RSUyAoOCkKK3N0YXRpYyB1OCB2cGhuX2NwdV9jaGFuZ2VfY291bnRzW05SX0NQVVNdW1ZQSE5fTlJfQ0hBTkdFX0NUUlNdOworc3RhdGljIGNwdW1hc2tfdCBjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2s7CitzdGF0aWMgaW50IHZwaG5fZW5hYmxlZDsKK3N0YXRpYyB2b2lkIHNldF90b3BvbG9neV90aW1lcih2b2lkKTsKKworLyoKKyAqIFN0b3JlIHRoZSBjdXJyZW50IHZhbHVlcyBvZiB0aGUgYXNzb2NpYXRpdml0eSBjaGFuZ2UgY291bnRlcnMgaW4gdGhlCisgKiBoeXBlcnZpc29yLgorICovCitzdGF0aWMgdm9pZCBzZXR1cF9jcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VfY291bnRlcnModm9pZCkKK3sKKwlpbnQgY3B1ID0gMDsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJaW50IGkgPSAwOworCQl1OCAqY291bnRzID0gdnBobl9jcHVfY2hhbmdlX2NvdW50c1tjcHVdOworCQl2b2xhdGlsZSB1OCAqaHlwZXJ2aXNvcl9jb3VudHMgPSBscHBhY2FbY3B1XS52cGhuX2Fzc29jX2NvdW50czsKKworCQlmb3IgKGkgPSAwOyBpIDwgVlBITl9OUl9DSEFOR0VfQ1RSUzsgaSsrKSB7CisJCQljb3VudHNbaV0gPSBoeXBlcnZpc29yX2NvdW50c1tpXTsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoZSBoeXBlcnZpc29yIG1haW50YWlucyBhIHNldCBvZiA4IGFzc29jaWF0aXZpdHkgY2hhbmdlIGNvdW50ZXJzIGluCisgKiB0aGUgVlBBIG9mIGVhY2ggY3B1IHRoYXQgY29ycmVzcG9uZCB0byB0aGUgYXNzb2NpYXRpdml0eSBsZXZlbHMgaW4gdGhlCisgKiBpYm0sYXNzb2NpYXRpdml0eS1yZWZlcmVuY2UtcG9pbnRzIHByb3BlcnR5LiBXaGVuIGFuIGFzc29jaWF0aXZpdHkKKyAqIGxldmVsIGNoYW5nZXMsIHRoZSBjb3JyZXNwb25kaW5nIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQuCisgKgorICogU2V0IGEgYml0IGluIGNwdV9hc3NvY2lhdGl2aXR5X2NoYW5nZXNfbWFzayBmb3IgZWFjaCBjcHUgd2hvc2UgaG9tZQorICogbm9kZSBhc3NvY2lhdGl2aXR5IGxldmVscyBoYXZlIGNoYW5nZWQuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNwdXMgd2l0aCB1bmhhbmRsZWQgYXNzb2NpYXRpdml0eSBjaGFuZ2VzLgorICovCitzdGF0aWMgaW50IHVwZGF0ZV9jcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2sodm9pZCkKK3sKKwlpbnQgY3B1ID0gMCwgbnJfY3B1cyA9IDA7CisJY3B1bWFza190ICpjaGFuZ2VzID0gJmNwdV9hc3NvY2lhdGl2aXR5X2NoYW5nZXNfbWFzazsKKworCWNwdW1hc2tfY2xlYXIoY2hhbmdlcyk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCWludCBpLCBjaGFuZ2VkID0gMDsKKwkJdTggKmNvdW50cyA9IHZwaG5fY3B1X2NoYW5nZV9jb3VudHNbY3B1XTsKKwkJdm9sYXRpbGUgdTggKmh5cGVydmlzb3JfY291bnRzID0gbHBwYWNhW2NwdV0udnBobl9hc3NvY19jb3VudHM7CisKKwkJZm9yIChpID0gMDsgaSA8IFZQSE5fTlJfQ0hBTkdFX0NUUlM7IGkrKykgeworCQkJaWYgKGh5cGVydmlzb3JfY291bnRzW2ldID4gY291bnRzW2ldKSB7CisJCQkJY291bnRzW2ldID0gaHlwZXJ2aXNvcl9jb3VudHNbaV07CisJCQkJY2hhbmdlZCA9IDE7CisJCQl9CisJCX0KKwkJaWYgKGNoYW5nZWQpIHsKKwkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIGNoYW5nZXMpOworCQkJbnJfY3B1cysrOworCQl9CisJfQorCisJcmV0dXJuIG5yX2NwdXM7Cit9CisKKy8qIDYgNjQtYml0IHJlZ2lzdGVycyB1bnBhY2tlZCBpbnRvIDEyIDMyLWJpdCBhc3NvY2lhdGl2aXR5IHZhbHVlcyAqLworI2RlZmluZSBWUEhOX0FTU09DX0JVRlNJWkUgKDYqc2l6ZW9mKHU2NCkvc2l6ZW9mKHUzMikpCisKKy8qCisgKiBDb252ZXJ0IHRoZSBhc3NvY2lhdGl2aXR5IGRvbWFpbiBudW1iZXJzIHJldHVybmVkIGZyb20gdGhlIGh5cGVydmlzb3IKKyAqIHRvIHRoZSBzZXF1ZW5jZSB0aGV5IHdvdWxkIGFwcGVhciBpbiB0aGUgaWJtLGFzc29jaWF0aXZpdHkgcHJvcGVydHkuCisgKi8KK3N0YXRpYyBpbnQgdnBobl91bnBhY2tfYXNzb2NpYXRpdml0eShjb25zdCBsb25nICpwYWNrZWQsIHVuc2lnbmVkIGludCAqdW5wYWNrZWQpCit7CisJaW50IGkgPSAwOworCWludCBucl9hc3NvY19kb21zID0gMDsKKwljb25zdCB1MTYgKmZpZWxkID0gKGNvbnN0IHUxNiopIHBhY2tlZDsKKworI2RlZmluZSBWUEhOX0ZJRUxEX1VOVVNFRAkoMHhmZmZmKQorI2RlZmluZSBWUEhOX0ZJRUxEX01TQgkJKDB4ODAwMCkKKyNkZWZpbmUgVlBITl9GSUVMRF9NQVNLCQkoflZQSE5fRklFTERfTVNCKQorCisJZm9yIChpID0gMDsgaSA8IFZQSE5fQVNTT0NfQlVGU0laRTsgaSsrKSB7CisJCWlmICgqZmllbGQgPT0gVlBITl9GSUVMRF9VTlVTRUQpIHsKKwkJCS8qIEFsbCBzaWduaWZpY2FudCBmaWVsZHMgcHJvY2Vzc2VkLCBhbmQgcmVtYWluaW5nCisJCQkgKiBmaWVsZHMgY29udGFpbiB0aGUgcmVzZXJ2ZWQgdmFsdWUgb2YgYWxsIDEncy4KKwkJCSAqIEp1c3Qgc3RvcmUgdGhlbS4KKwkJCSAqLworCQkJdW5wYWNrZWRbaV0gPSAqKCh1MzIqKWZpZWxkKTsKKwkJCWZpZWxkICs9IDI7CisJCX0KKwkJZWxzZSBpZiAoKmZpZWxkICYgVlBITl9GSUVMRF9NU0IpIHsKKwkJCS8qIERhdGEgaXMgaW4gdGhlIGxvd2VyIDE1IGJpdHMgb2YgdGhpcyBmaWVsZCAqLworCQkJdW5wYWNrZWRbaV0gPSAqZmllbGQgJiBWUEhOX0ZJRUxEX01BU0s7CisJCQlmaWVsZCsrOworCQkJbnJfYXNzb2NfZG9tcysrOworCQl9CisJCWVsc2UgeworCQkJLyogRGF0YSBpcyBpbiB0aGUgbG93ZXIgMTUgYml0cyBvZiB0aGlzIGZpZWxkCisJCQkgKiBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgbmV4dCAxNiBiaXQgZmllbGQKKwkJCSAqLworCQkJdW5wYWNrZWRbaV0gPSAqKCh1MzIqKWZpZWxkKTsKKwkJCWZpZWxkICs9IDI7CisJCQlucl9hc3NvY19kb21zKys7CisJCX0KKwl9CisKKwlyZXR1cm4gbnJfYXNzb2NfZG9tczsKK30KKworLyoKKyAqIFJldHJpZXZlIHRoZSBuZXcgYXNzb2NpYXRpdml0eSBpbmZvcm1hdGlvbiBmb3IgYSB2aXJ0dWFsIHByb2Nlc3NvcidzCisgKiBob21lIG5vZGUuCisgKi8KK3N0YXRpYyBsb25nIGhjYWxsX3ZwaG4odW5zaWduZWQgbG9uZyBjcHUsIHVuc2lnbmVkIGludCAqYXNzb2NpYXRpdml0eSkKK3sKKwlsb25nIHJjID0gMDsKKwlsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTDlfQlVGU0laRV0gPSB7MH07CisJdTY0IGZsYWdzID0gMTsKKwlpbnQgaHdjcHUgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSk7CisKKwlyYyA9IHBscGFyX2hjYWxsOShIX0hPTUVfTk9ERV9BU1NPQ0lBVElWSVRZLCByZXRidWYsIGZsYWdzLCBod2NwdSk7CisJdnBobl91bnBhY2tfYXNzb2NpYXRpdml0eShyZXRidWYsIGFzc29jaWF0aXZpdHkpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgbG9uZyB2cGhuX2dldF9hc3NvY2lhdGl2aXR5KHVuc2lnbmVkIGxvbmcgY3B1LAorCQkJCQl1bnNpZ25lZCBpbnQgKmFzc29jaWF0aXZpdHkpCit7CisJbG9uZyByYyA9IDA7CisKKwlyYyA9IGhjYWxsX3ZwaG4oY3B1LCBhc3NvY2lhdGl2aXR5KTsKKworCXN3aXRjaCAocmMpIHsKKwljYXNlIEhfRlVOQ1RJT046CisJCXByaW50ayhLRVJOX0lORk8KKwkJCSJWUEhOIGlzIG5vdCBzdXBwb3J0ZWQuIERpc2FibGluZyBwb2xsaW5nLi4uXG4iKTsKKwkJc3RvcF90b3BvbG9neV91cGRhdGUoKTsKKwkJYnJlYWs7CisJY2FzZSBIX0hBUkRXQVJFOgorCQlwcmludGsoS0VSTl9FUlIKKwkJCSJoY2FsbF92cGhuKCkgZXhwZXJpZW5jZWQgYSBoYXJkd2FyZSBmYXVsdCAiCisJCQkicHJldmVudGluZyBWUEhOLiBEaXNhYmxpbmcgcG9sbGluZy4uLlxuIik7CisJCXN0b3BfdG9wb2xvZ3lfdXBkYXRlKCk7CisJfQorCisJcmV0dXJuIHJjOworfQorCisvKgorICogVXBkYXRlIHRoZSBub2RlIG1hcHMgYW5kIHN5c2ZzIGVudHJpZXMgZm9yIGVhY2ggY3B1IHdob3NlIGhvbWUgbm9kZQorICogaGFzIGNoYW5nZWQuCisgKi8KK2ludCBhcmNoX3VwZGF0ZV9jcHVfdG9wb2xvZ3kodm9pZCkKK3sKKwlpbnQgY3B1ID0gMCwgbmlkID0gMCwgb2xkX25pZCA9IDA7CisJdW5zaWduZWQgaW50IGFzc29jaWF0aXZpdHlbVlBITl9BU1NPQ19CVUZTSVpFXSA9IHswfTsKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2ID0gTlVMTDsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgY3B1X2Fzc29jaWF0aXZpdHlfY2hhbmdlc19tYXNrKSB7CisJCXZwaG5fZ2V0X2Fzc29jaWF0aXZpdHkoY3B1LCBhc3NvY2lhdGl2aXR5KTsKKwkJbmlkID0gYXNzb2NpYXRpdml0eV90b19uaWQoYXNzb2NpYXRpdml0eSk7CisKKwkJaWYgKG5pZCA8IDAgfHwgIW5vZGVfb25saW5lKG5pZCkpCisJCQluaWQgPSBmaXJzdF9vbmxpbmVfbm9kZTsKKworCQlvbGRfbmlkID0gbnVtYV9jcHVfbG9va3VwX3RhYmxlW2NwdV07CisKKwkJLyogRGlzYWJsZSBob3RwbHVnIHdoaWxlIHdlIHVwZGF0ZSB0aGUgY3B1CisJCSAqIG1hc2tzIGFuZCBzeXNmcy4KKwkJICovCisJCWdldF9vbmxpbmVfY3B1cygpOworCQl1bnJlZ2lzdGVyX2NwdV91bmRlcl9ub2RlKGNwdSwgb2xkX25pZCk7CisJCXVubWFwX2NwdV9mcm9tX25vZGUoY3B1KTsKKwkJbWFwX2NwdV90b19ub2RlKGNwdSwgbmlkKTsKKwkJcmVnaXN0ZXJfY3B1X3VuZGVyX25vZGUoY3B1LCBuaWQpOworCQlwdXRfb25saW5lX2NwdXMoKTsKKworCQlzeXNkZXYgPSBnZXRfY3B1X3N5c2RldihjcHUpOworCQlpZiAoc3lzZGV2KQorCQkJa29iamVjdF91ZXZlbnQoJnN5c2Rldi0+a29iaiwgS09CSl9DSEFOR0UpOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCB0b3BvbG9neV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlyZWJ1aWxkX3NjaGVkX2RvbWFpbnMoKTsKK30KK3N0YXRpYyBERUNMQVJFX1dPUksodG9wb2xvZ3lfd29yaywgdG9wb2xvZ3lfd29ya19mbik7CisKK3ZvaWQgdG9wb2xvZ3lfc2NoZWR1bGVfdXBkYXRlKHZvaWQpCit7CisJc2NoZWR1bGVfd29yaygmdG9wb2xvZ3lfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIHRvcG9sb2d5X3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcgaWdub3JlZCkKK3sKKwlpZiAoIXZwaG5fZW5hYmxlZCkKKwkJcmV0dXJuOworCWlmICh1cGRhdGVfY3B1X2Fzc29jaWF0aXZpdHlfY2hhbmdlc19tYXNrKCkgPiAwKQorCQl0b3BvbG9neV9zY2hlZHVsZV91cGRhdGUoKTsKKwlzZXRfdG9wb2xvZ3lfdGltZXIoKTsKK30KK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCB0b3BvbG9neV90aW1lciA9CisJVElNRVJfSU5JVElBTElaRVIodG9wb2xvZ3lfdGltZXJfZm4sIDAsIDApOworCitzdGF0aWMgdm9pZCBzZXRfdG9wb2xvZ3lfdGltZXIodm9pZCkKK3sKKwl0b3BvbG9neV90aW1lci5kYXRhID0gMDsKKwl0b3BvbG9neV90aW1lci5leHBpcmVzID0gamlmZmllcyArIDYwICogSFo7CisJYWRkX3RpbWVyKCZ0b3BvbG9neV90aW1lcik7Cit9CisKKy8qCisgKiBTdGFydCBwb2xsaW5nIGZvciBWUEhOIGFzc29jaWF0aXZpdHkgY2hhbmdlcy4KKyAqLworaW50IHN0YXJ0X3RvcG9sb2d5X3VwZGF0ZSh2b2lkKQoreworCWludCByYyA9IDA7CisKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9WUEhOKSkgeworCQl2cGhuX2VuYWJsZWQgPSAxOworCQlzZXR1cF9jcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VfY291bnRlcnMoKTsKKwkJaW5pdF90aW1lcl9kZWZlcnJhYmxlKCZ0b3BvbG9neV90aW1lcik7CisJCXNldF90b3BvbG9neV90aW1lcigpOworCQlyYyA9IDE7CisJfQorCisJcmV0dXJuIHJjOworfQorX19pbml0Y2FsbChzdGFydF90b3BvbG9neV91cGRhdGUpOworCisvKgorICogRGlzYWJsZSBwb2xsaW5nIGZvciBWUEhOIGFzc29jaWF0aXZpdHkgY2hhbmdlcy4KKyAqLworaW50IHN0b3BfdG9wb2xvZ3lfdXBkYXRlKHZvaWQpCit7CisJdnBobl9lbmFibGVkID0gMDsKKwlyZXR1cm4gZGVsX3RpbWVyX3N5bmMoJnRvcG9sb2d5X3RpbWVyKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfUFBDX1NQTFBBUiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKaW5kZXggYTg3ZWFkMC4uOGRjNDFjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCkBAIC03OCw3ICs3OCw3IEBACiAKIAkvKiBwZ2RpciB0YWtlIHBhZ2Ugb3IgdHdvIHdpdGggNEsgcGFnZXMgYW5kIGEgcGFnZSBmcmFjdGlvbiBvdGhlcndpc2UgKi8KICNpZm5kZWYgQ09ORklHX1BQQ180S19QQUdFUwotCXJldCA9IChwZ2RfdCAqKWt6YWxsb2MoMSA8PCBQR0RJUl9PUkRFUiwgR0ZQX0tFUk5FTCk7CisJcmV0ID0ga3phbGxvYygxIDw8IFBHRElSX09SREVSLCBHRlBfS0VSTkVMKTsKICNlbHNlCiAJcmV0ID0gKHBnZF90ICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX1pFUk8sCiAJCQlQR0RJUl9PUkRFUiAtIFBBR0VfU0hJRlQpOwpAQCAtMjMwLDYgKzIzMCw3IEBACiAJCWFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgVk1fSU9SRU1BUCwgY2FsbGVyKTsKIAkJaWYgKGFyZWEgPT0gMCkKIAkJCXJldHVybiBOVUxMOworCQlhcmVhLT5waHlzX2FkZHIgPSBwOwogCQl2ID0gKHVuc2lnbmVkIGxvbmcpIGFyZWEtPmFkZHI7CiAJfSBlbHNlIHsKIAkJdiA9IChpb3JlbWFwX2JvdCAtPSBzaXplKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCmluZGV4IDIxZDZkZmEuLjg4OTI3YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYwpAQCAtMjIzLDYgKzIyMyw4IEBACiAJCQkJCSAgICBjYWxsZXIpOwogCQlpZiAoYXJlYSA9PSBOVUxMKQogCQkJcmV0dXJuIE5VTEw7CisKKwkJYXJlYS0+cGh5c19hZGRyID0gcGFsaWduZWQ7CiAJCXJldCA9IF9faW9yZW1hcF9hdChwYWxpZ25lZCwgYXJlYS0+YWRkciwgc2l6ZSwgZmxhZ3MpOwogCQlpZiAoIXJldCkKIAkJCXZ1bm1hcChhcmVhLT5hZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9jZWxsLmMgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfY2VsbC5jCmluZGV4IDdmZDkwZDAuLmM0ZDJiNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9jZWxsLmMKKysrIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX2NlbGwuYwpAQCAtMTQ2OSw3ICsxNDY5LDcgQEAKICAqIFRoZSBwbV9pbnRlcnZhbCByZWdpc3RlciBpcyBzZXR1cCB0byB3cml0ZSB0aGUgU1BVIFBDIHZhbHVlIGludG8gdGhlCiAgKiB0cmFjZSBidWZmZXIgYXQgdGhlIG1heGltdW0gcmF0ZSBwb3NzaWJsZS4gIFRoZSB0cmFjZSBidWZmZXIgaXMgY29uZmlndXJlZAogICogdG8gc3RvcmUgdGhlIFBDcywgd3JhcHBpbmcgd2hlbiBpdCBpcyBmdWxsLiAgVGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgaXMKLSAqIGludGlhbGl6ZWQgdG8gdGhlIG1heCBoYXJkd2FyZSBjb3VudCBtaW51cyB0aGUgbnVtYmVyIG9mIGV2ZW50cywgTiwgYmV0d2VlbgorICogaW5pdGlhbGl6ZWQgdG8gdGhlIG1heCBoYXJkd2FyZSBjb3VudCBtaW51cyB0aGUgbnVtYmVyIG9mIGV2ZW50cywgTiwgYmV0d2VlbgogICogc2FtcGxlcy4gIE9uY2UgdGhlIE4gZXZlbnRzIGhhdmUgb2NjdXJlZCwgYSBIVyBjb3VudGVyIG92ZXJmbG93IG9jY3VycwogICogY2F1c2luZyB0aGUgZ2VuZXJhdGlvbiBvZiBhIEhXIGNvdW50ZXIgaW50ZXJydXB0IHdoaWNoIGFsc28gc3RvcHMgdGhlCiAgKiB3cml0aW5nIG9mIHRoZSBTUFUgUEMgdmFsdWVzIHRvIHRoZSB0cmFjZSBidWZmZXIuICBIZW5jZSB0aGUgbGFzdCBQQwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9NYWtlZmlsZQppbmRleCA4MmZmMzI2Li5jMDRkMTZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9NYWtlZmlsZQpAQCAtMSw0ICsxLDcgQEAKLW9iai0kKENPTkZJR180NHgpCTo9IG1pc2NfNDR4Lm8gaWRsZS5vCitvYmotJChDT05GSUdfNDR4KQkrPSBtaXNjXzQ0eC5vCitpZm5lcSAoJChDT05GSUdfUFBDNHh4X0NQTSkseSkKK29iai0kKENPTkZJR180NHgpCSs9IGlkbGUubworZW5kaWYKIG9iai0kKENPTkZJR19QUEM0NHhfU0lNUExFKSArPSBwcGM0NHhfc2ltcGxlLm8KIG9iai0kKENPTkZJR19FQk9OWSkJKz0gZWJvbnkubwogb2JqLSQoQ09ORklHX1NBTTQ0MEVQKSAJKz0gc2FtNDQwZXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L2xpdGU1MjAwX3BtLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbGl0ZTUyMDBfcG0uYwppbmRleCA4MDIzNGU1Li5lZGEwZmMyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbGl0ZTUyMDBfcG0uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbGl0ZTUyMDBfcG0uYwpAQCAtMjMyLDcgKzIzMiw3IEBACiAJbGl0ZTUyMDBfcG1fdGFyZ2V0X3N0YXRlID0gUE1fU1VTUEVORF9PTjsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBsaXRlNTIwMF9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGxpdGU1MjAwX3BtX29wcyA9IHsKIAkudmFsaWQJCT0gbGl0ZTUyMDBfcG1fdmFsaWQsCiAJLmJlZ2luCQk9IGxpdGU1MjAwX3BtX2JlZ2luLAogCS5wcmVwYXJlCT0gbGl0ZTUyMDBfcG1fcHJlcGFyZSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BtLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9wbS5jCmluZGV4IDU2OGNlZjYuLjgzMTBlOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BtLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcG0uYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJaW91bm1hcChtYmFyKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBtcGM1Mnh4X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgbXBjNTJ4eF9wbV9vcHMgPSB7CiAJLnZhbGlkCQk9IG1wYzUyeHhfcG1fdmFsaWQsCiAJLnByZXBhcmUJPSBtcGM1Mnh4X3BtX3ByZXBhcmUsCiAJLmVudGVyCQk9IG1wYzUyeHhfcG1fZW50ZXIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC1hc20uUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLWFzbS5TCmluZGV4IDE5MzA1NDMuLjNkMWVjZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLWFzbS5TCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLWFzbS5TCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlvcmkJcjQsIHI0LCAweDAwMmEKIAltdHNwcglTUFJOX0RCQVQwTCwgcjQKIAlsaXMJcjgsIFRNUF9WSVJUX0lNTVJAaAotCW9yaQlyNCwgcjgsIDB4MDAxZQkvKiAxIE1CeXRlIGFjY2Vzc2FibGUgZnJvbSBLZXJuZWwgU3BhY2Ugb25seSAqLworCW9yaQlyNCwgcjgsIDB4MDAxZQkvKiAxIE1CeXRlIGFjY2Vzc2libGUgZnJvbSBLZXJuZWwgU3BhY2Ugb25seSAqLwogCW10c3ByCVNQUk5fREJBVDBVLCByNAogCWlzeW5jCiAKQEAgLTI0MSw3ICsyNDEsNyBAQAogCW9yaQlyNCwgcjQsIDB4MDAyYQogCW10c3ByCVNQUk5fREJBVDFMLCByNAogCWxpcwlyOSwgKFRNUF9WSVJUX0lNTVIgKyAweDAxMDAwMDAwKUBoCi0Jb3JpCXI0LCByOSwgMHgwMDFlCS8qIDEgTUJ5dGUgYWNjZXNzYWJsZSBmcm9tIEtlcm5lbCBTcGFjZSBvbmx5ICovCisJb3JpCXI0LCByOSwgMHgwMDFlCS8qIDEgTUJ5dGUgYWNjZXNzaWJsZSBmcm9tIEtlcm5lbCBTcGFjZSBvbmx5ICovCiAJbXRzcHIJU1BSTl9EQkFUMVUsIHI0CiAJaXN5bmMKIApAQCAtMjUzLDcgKzI1Myw3IEBACiAJbGkJcjQsIDB4MDAwMgogCW10c3ByCVNQUk5fREJBVDJMLCByNAogCWxpcwlyNCwgS0VSTkVMQkFTRUBoCi0Jb3JpCXI0LCByNCwgMHgwMDFlCS8qIDEgTUJ5dGUgYWNjZXNzYWJsZSBmcm9tIEtlcm5lbCBTcGFjZSBvbmx5ICovCisJb3JpCXI0LCByNCwgMHgwMDFlCS8qIDEgTUJ5dGUgYWNjZXNzaWJsZSBmcm9tIEtlcm5lbCBTcGFjZSBvbmx5ICovCiAJbXRzcHIJU1BSTl9EQkFUMlUsIHI0CiAJaXN5bmMKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMKaW5kZXggNzVhZTc3Zi4uZmQ0ZjJmMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jCkBAIC0zMTEsNyArMzExLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIG1wYzgzeHhfc3VzcGVuZF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIG1wYzgzeHhfc3VzcGVuZF9vcHMgPSB7CiAJLnZhbGlkID0gbXBjODN4eF9zdXNwZW5kX3ZhbGlkLAogCS5iZWdpbiA9IG1wYzgzeHhfc3VzcGVuZF9iZWdpbiwKIAkuZW50ZXIgPSBtcGM4M3h4X3N1c3BlbmRfZW50ZXIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCmluZGV4IGFhMzRjYWMuLjc0N2QxZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCkBAIC0zMDksNyArMzA5LDcgQEAKIAkJCS8qIFAxMDIxIGhhcyBwaW5zIG11eGVkIGZvciBRRSBhbmQgb3RoZXIgZnVuY3Rpb25zLiBUbwogCQkJICogZW5hYmxlIFFFIFVFQyBtb2RlLCB3ZSBuZWVkIHRvIHNldCBiaXQgUUUwIGZvciBVQ0MxCiAJCQkgKiBpbiBFdGggbW9kZSwgUUUwIGFuZCBRRTMgZm9yIFVDQzUgaW4gRXRoIG1vZGUsIFFFOQotCQkJICogYW5kIFFFMTIgZm9yIFFFIE1JSSBtYW5hZ2VtZW50IHNpbmdhbHMgaW4gUE1VWENSCisJCQkgKiBhbmQgUUUxMiBmb3IgUUUgTUlJIG1hbmFnZW1lbnQgc2lnbmFscyBpbiBQTVVYQ1IKIAkJCSAqIHJlZ2lzdGVyLgogCQkJICovCiAJCQkJc2V0Yml0czMyKHBtdXhjciwgTVBDODV4eF9QTVVYQ1JfUUUwIHwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwppbmRleCA5NTYxNTRmLi4yMDU3NjgyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCkBAIC0zMTMsMTMgKzMxMywxNCBAQAogc291cmNlICJhcmNoL3Bvd2VycGMvc3lzZGV2L2Jlc3Rjb21tL0tjb25maWciCiAKIGNvbmZpZyBNUEM4eHh4X0dQSU8KLQlib29sICJNUEM4eHh4IEdQSU8gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBQQ19NUEM4MzF4IHx8IFBQQ19NUEM4MzR4IHx8IFBQQ19NUEM4Mzd4IHx8IEZTTF9TT0NfQk9PS0UgfHwgUFBDXzg2eHgKKwlib29sICJNUEM1MTJ4L01QQzh4eHggR1BJTyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUFBDX01QQzUxMnggfHwgUFBDX01QQzgzMXggfHwgUFBDX01QQzgzNHggfHwgUFBDX01QQzgzN3ggfHwgXAorCQkgICBGU0xfU09DX0JPT0tFIHx8IFBQQ184Nnh4CiAJc2VsZWN0IEdFTkVSSUNfR1BJTwogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91J3JlIGdvaW5nIHRvIHVzZSBoYXJkd2FyZSB0aGF0IGNvbm5lY3RzIHRvIHRoZQotCSAgTVBDODMxeC84MzR4LzgzN3gvODU3Mi84NjEwIEdQSU9zLgorCSAgTVBDNTEyeC84MzF4LzgzNHgvODM3eC84NTcyLzg2MTAgR1BJT3MuCiAKIGNvbmZpZyBTSU1QTEVfR1BJTwogCWJvb2wgIlN1cHBvcnQgZm9yIHNpbXBsZSwgbWVtb3J5LW1hcHBlZCBHUElPIGNvbnRyb2xsZXJzIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2lvbW11LmMKaW5kZXggYmVlYzQwNS4uM2NlNjg1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pb21tdS5jCkBAIC03Niw3ICs3Niw3IEBACiAKIHN0YXRpYyB2b2lkIGNlbGxlYl9kbWFfZGV2X3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlkZXYtPmFyY2hkYXRhLmRtYV9vcHMgPSBnZXRfcGNpX2RtYV9vcHMoKTsKKwlzZXRfZG1hX29wcyhkZXYsICZkbWFfZGlyZWN0X29wcyk7CiAJc2V0X2RtYV9vZmZzZXQoZGV2LCBjZWxsZWJfZG1hX2RpcmVjdF9vZmZzZXQpOwogfQogCkBAIC0xMDYsNyArMTA2LDYgQEAKIHN0YXRpYyBpbnQgX19pbml0IGNlbGxlYl9pbml0X2lvbW11KHZvaWQpCiB7CiAJY2VsbGViX2luaXRfZGlyZWN0X21hcHBpbmcoKTsKLQlzZXRfcGNpX2RtYV9vcHMoJmRtYV9kaXJlY3Rfb3BzKTsKIAlwcGNfbWQucGNpX2RtYV9kZXZfc2V0dXAgPSBjZWxsZWJfcGNpX2RtYV9kZXZfc2V0dXA7CiAJYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZwbGF0Zm9ybV9idXNfdHlwZSwgJmNlbGxlYl9vZl9idXNfbm90aWZpZXIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvbHNjc2FfYWxsb2MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9sc2NzYV9hbGxvYy5jCmluZGV4IGExMDFhYmYuLjNiODk0ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9sc2NzYV9hbGxvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9sc2NzYV9hbGxvYy5jCkBAIC0zNiwxMCArMzYsOSBAQAogCXN0cnVjdCBzcHVfbHNjc2EgKmxzY3NhOwogCXVuc2lnbmVkIGNoYXIgKnA7CiAKLQlsc2NzYSA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzcHVfbHNjc2EpKTsKKwlsc2NzYSA9IHZ6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzcHVfbHNjc2EpKTsKIAlpZiAoIWxzY3NhKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQobHNjc2EsIDAsIHNpemVvZihzdHJ1Y3Qgc3B1X2xzY3NhKSk7CiAJY3NhLT5sc2NzYSA9IGxzY3NhOwogCiAJLyogU2V0IExTIHBhZ2VzIHJlc2VydmVkIHRvIGFsbG93IGZvciB1c2VyLXNwYWNlIG1hcHBpbmcuICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvdGltZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3RpbWUuYwppbmRleCAwNTRkZmU1Li5mODAzZjRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC90aW1lLmMKQEAgLTI5LDYgKzI5LDEwIEBACiAKIGV4dGVybiBzcGlubG9ja190IHJ0Y19sb2NrOwogCisjZGVmaW5lIE5WUkFNX0FTMCAgMHg3NAorI2RlZmluZSBOVlJBTV9BUzEgIDB4NzUKKyNkZWZpbmUgTlZSQU1fREFUQSAweDc3CisKIHN0YXRpYyBpbnQgbnZyYW1fYXMxID0gTlZSQU1fQVMxOwogc3RhdGljIGludCBudnJhbV9hczAgPSBOVlJBTV9BUzA7CiBzdGF0aWMgaW50IG52cmFtX2RhdGEgPSBOVlJBTV9EQVRBOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYwppbmRleCA0MmQwYTg4Li5iNWUwMjZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYwpAQCAtMTA0NSw3MSArMTA0NSw5IEBACiAJLndyaXRlCQk9IG1mX3NpZGVfcHJvY193cml0ZSwKIH07CiAKLSNpZiAwCi1zdGF0aWMgdm9pZCBtZl9nZXRTcmNIaXN0b3J5KGNoYXIgKmJ1ZmZlciwgaW50IHNpemUpCi17Ci0Jc3RydWN0IElwbFR5cGVSZXR1cm5TdHVmZiByZXR1cm5fc3R1ZmY7Ci0Jc3RydWN0IHBlbmRpbmdfZXZlbnQgKmV2ID0gbmV3X3BlbmRpbmdfZXZlbnQoKTsKLQlpbnQgcmMgPSAwOwotCWNoYXIgKnBhZ2VzWzRdOwotCi0JcGFnZXNbMF0gPSBrbWFsbG9jKDQwOTYsIEdGUF9BVE9NSUMpOwotCXBhZ2VzWzFdID0ga21hbGxvYyg0MDk2LCBHRlBfQVRPTUlDKTsKLQlwYWdlc1syXSA9IGttYWxsb2MoNDA5NiwgR0ZQX0FUT01JQyk7Ci0JcGFnZXNbM10gPSBrbWFsbG9jKDQwOTYsIEdGUF9BVE9NSUMpOwotCWlmICgoZXYgPT0gTlVMTCkgfHwgKHBhZ2VzWzBdID09IE5VTEwpIHx8IChwYWdlc1sxXSA9PSBOVUxMKQotCQkJIHx8IChwYWdlc1syXSA9PSBOVUxMKSB8fCAocGFnZXNbM10gPT0gTlVMTCkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0dXJuX3N0dWZmLnhUeXBlID0gMDsKLQlyZXR1cm5fc3R1ZmYueFJjID0gMDsKLQlyZXR1cm5fc3R1ZmYueERvbmUgPSAwOwotCWV2LT5ldmVudC5ocF9scF9ldmVudC54U3VidHlwZSA9IDY7Ci0JZXYtPmV2ZW50LmhwX2xwX2V2ZW50LngueFN1YnR5cGVEYXRhID0KLQkJc3VidHlwZV9kYXRhKCdNJywgJ0YnLCAnVicsICdJJyk7Ci0JZXYtPmV2ZW50LmRhdGEudnNwX2NtZC54RXZlbnQgPSAmcmV0dXJuX3N0dWZmOwotCWV2LT5ldmVudC5kYXRhLnZzcF9jbWQuY21kID0gNDsKLQlldi0+ZXZlbnQuZGF0YS52c3BfY21kLmxwX2luZGV4ID0gSHZMcENvbmZpZ19nZXRMcEluZGV4KCk7Ci0JZXYtPmV2ZW50LmRhdGEudnNwX2NtZC5yZXN1bHRfY29kZSA9IDB4RkY7Ci0JZXYtPmV2ZW50LmRhdGEudnNwX2NtZC5yZXNlcnZlZCA9IDA7Ci0JZXYtPmV2ZW50LmRhdGEudnNwX2NtZC5zdWJfZGF0YS5wYWdlWzBdID0gaXNlcmllc19odl9hZGRyKHBhZ2VzWzBdKTsKLQlldi0+ZXZlbnQuZGF0YS52c3BfY21kLnN1Yl9kYXRhLnBhZ2VbMV0gPSBpc2VyaWVzX2h2X2FkZHIocGFnZXNbMV0pOwotCWV2LT5ldmVudC5kYXRhLnZzcF9jbWQuc3ViX2RhdGEucGFnZVsyXSA9IGlzZXJpZXNfaHZfYWRkcihwYWdlc1syXSk7Ci0JZXYtPmV2ZW50LmRhdGEudnNwX2NtZC5zdWJfZGF0YS5wYWdlWzNdID0gaXNlcmllc19odl9hZGRyKHBhZ2VzWzNdKTsKLQltYigpOwotCWlmIChzaWduYWxfZXZlbnQoZXYpICE9IDApCi0JCXJldHVybjsKLQotIAl3aGlsZSAocmV0dXJuX3N0dWZmLnhEb25lICE9IDEpCi0gCQl1ZGVsYXkoMTApOwotIAlpZiAocmV0dXJuX3N0dWZmLnhSYyA9PSAwKQotIAkJbWVtY3B5KGJ1ZmZlciwgcGFnZXNbMF0sIHNpemUpOwotCWtmcmVlKHBhZ2VzWzBdKTsKLQlrZnJlZShwYWdlc1sxXSk7Ci0Ja2ZyZWUocGFnZXNbMl0pOwotCWtmcmVlKHBhZ2VzWzNdKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IG1mX3NyY19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotI2lmIDAKLQlpbnQgbGVuOwotCi0JbWZfZ2V0U3JjSGlzdG9yeShwYWdlLCBjb3VudCk7Ci0JbGVuID0gY291bnQ7Ci0JbGVuIC09IG9mZjsKLQlpZiAobGVuIDwgY291bnQpIHsKLQkJKmVvZiA9IDE7Ci0JCWlmIChsZW4gPD0gMCkKLQkJCXJldHVybiAwOwotCX0gZWxzZQotCQlsZW4gPSBjb3VudDsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCXJldHVybiBsZW47Ci0jZWxzZQogCXJldHVybiAwOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgbWZfc3JjX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pb21tdS5jCmluZGV4IDFmOWZiMmMuLjE0OTQzZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvaW9tbXUuYwpAQCAtMTU2LDIwICsxNTYsMTIgQEAKIAogc3RhdGljIHZvaWQgcGNpX2RtYV9idXNfc2V0dXBfcGFzZW1pKHN0cnVjdCBwY2lfYnVzICpidXMpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkbjsKLQogCXByX2RlYnVnKCJwY2lfZG1hX2J1c19zZXR1cCwgYnVzICVwLCBidXMtPnNlbGYgJXBcbiIsIGJ1cywgYnVzLT5zZWxmKTsKIAogCWlmICghaW9tbXVfdGFibGVfaW9ibWFwX2luaXRlZCkgewogCQlpb21tdV90YWJsZV9pb2JtYXBfaW5pdGVkID0gMTsKIAkJaW9tbXVfdGFibGVfaW9ibWFwX3NldHVwKCk7CiAJfQotCi0JZG4gPSBwY2lfYnVzX3RvX09GX25vZGUoYnVzKTsKLQotCWlmIChkbikKLQkJUENJX0ROKGRuKS0+aW9tbXVfdGFibGUgPSAmaW9tbXVfdGFibGVfaW9ibWFwOwotCiB9CiAKIApAQCAtMTkyLDkgKzE4NCw2IEBACiAJc2V0X2lvbW11X3RhYmxlX2Jhc2UoJmRldi0+ZGV2LCAmaW9tbXVfdGFibGVfaW9ibWFwKTsKIH0KIAotc3RhdGljIHZvaWQgcGNpX2RtYV9idXNfc2V0dXBfbnVsbChzdHJ1Y3QgcGNpX2J1cyAqYikgeyB9Ci1zdGF0aWMgdm9pZCBwY2lfZG1hX2Rldl9zZXR1cF9udWxsKHN0cnVjdCBwY2lfZGV2ICpkKSB7IH0KLQogaW50IF9faW5pdCBpb2JfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwpAQCAtMjUxLDE0ICsyNDAsOCBAQAogCWlvbW11X29mZiA9IG9mX2Nob3NlbiAmJgogCQkJb2ZfZ2V0X3Byb3BlcnR5KG9mX2Nob3NlbiwgImxpbnV4LGlvbW11LW9mZiIsIE5VTEwpOwogI2VuZGlmCi0JaWYgKGlvbW11X29mZikgewotCQkvKiBEaXJlY3QgSS9PLCBJT01NVSBvZmYgKi8KLQkJcHBjX21kLnBjaV9kbWFfZGV2X3NldHVwID0gcGNpX2RtYV9kZXZfc2V0dXBfbnVsbDsKLQkJcHBjX21kLnBjaV9kbWFfYnVzX3NldHVwID0gcGNpX2RtYV9idXNfc2V0dXBfbnVsbDsKLQkJc2V0X3BjaV9kbWFfb3BzKCZkbWFfZGlyZWN0X29wcyk7Ci0KKwlpZiAoaW9tbXVfb2ZmKQogCQlyZXR1cm47Ci0JfQogCiAJaW9iX2luaXQoTlVMTCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYwppbmRleCA5ZGViMjc0Li5kNWFjZWI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCkBAIC01MDYsNiArNTA2LDE1IEBACiAJCW9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobnAsICJzbXUiLCBOVUxMKTsKIAkJb2Zfbm9kZV9wdXQobnApOwogCX0KKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJmY3UiKTsKKwlpZiAobnAgPT0gTlVMTCkgeworCQkvKiBTb21lIG1hY2hpbmVzIGhhdmUgc3RyYW5nZWx5IGJyb2tlbiBkZXZpY2UtdHJlZSAqLworCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvdTNAMCxmODAwMDAwMC9pMmNAZjgwMDEwMDAvZmFuQDE1ZSIpOworCX0KKwlpZiAobnApIHsKKwkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgInRlbXBlcmF0dXJlIiwgTlVMTCk7CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2RldmljZS1pbml0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9kZXZpY2UtaW5pdC5jCmluZGV4IGIzNDEwMTguLjZjNGI1ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2RldmljZS1pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvZGV2aWNlLWluaXQuYwpAQCAtNTY2LDEwICs1NjYsMTAgQEAKIAljYXNlIFBTM19ERVZfVFlQRV9TVE9SX0RJU0s6CiAJCXJlc3VsdCA9IHBzM19zZXR1cF9zdG9yYWdlX2RldihyZXBvLCBQUzNfTUFUQ0hfSURfU1RPUl9ESVNLKTsKIAotCQkvKiBTb21lIGRldmljZXMgYXJlIG5vdCBhY2Nlc3NhYmxlIGZyb20gdGhlIE90aGVyIE9TIGxwYXIuICovCisJCS8qIFNvbWUgZGV2aWNlcyBhcmUgbm90IGFjY2Vzc2libGUgZnJvbSB0aGUgT3RoZXIgT1MgbHBhci4gKi8KIAkJaWYgKHJlc3VsdCA9PSAtRU5PREVWKSB7CiAJCQlyZXN1bHQgPSAwOwotCQkJcHJfZGVidWcoIiVzOiV1OiBub3QgYWNjZXNzYWJsZVxuIiwgX19mdW5jX18sCisJCQlwcl9kZWJ1ZygiJXM6JXU6IG5vdCBhY2Nlc3NpYmxlXG4iLCBfX2Z1bmNfXywKIAkJCQkgX19MSU5FX18pOwogCQl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2ludGVycnVwdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaW50ZXJydXB0LmMKaW5kZXggNTlkOTcxMi4uOTIyOTBmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaW50ZXJydXB0LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICAqIEBsb2NrOgogICogQGlwaV9kZWJ1Z19icmtfbWFzazoKICAqCi0gKiBUaGUgSFYgbWFudGFpbnMgcGVyIFNNVCB0aHJlYWQgbWFwcGluZ3Mgb2YgSFYgb3V0bGV0IHRvIEhWIHBsdWcgb24KKyAqIFRoZSBIViBtYWludGFpbnMgcGVyIFNNVCB0aHJlYWQgbWFwcGluZ3Mgb2YgSFYgb3V0bGV0IHRvIEhWIHBsdWcgb24KICAqIGJlaGFsZiBvZiB0aGUgZ3Vlc3QuICBUaGVzZSBtYXBwaW5ncyBhcmUgaW1wbGVtZW50ZWQgYXMgMjU2IGJpdCBndWVzdAogICogc3VwcGxpZWQgYml0bWFwcyBpbmRleGVkIGJ5IHBsdWcgbnVtYmVyLiAgVGhlIGFkZHJlc3NlcyBvZiB0aGUgYml0bWFwcwogICogYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgSFYgdGhyb3VnaCBsdjFfY29uZmlndXJlX2lycV9zdGF0ZV9iaXRtYXAoKS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKaW5kZXggMzEzOTgxNC4uNWQxYjc0MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKQEAgLTMzLDYgKzMzLDE2IEBACiAgICAgICAgZGVwZW5kcyBvbiBQQ0lfTVNJICYmIEVFSAogICAgICAgIGRlZmF1bHQgeQogCitjb25maWcgUFNFUklFU19FTkVSR1kKKwl0cmlzdGF0ZSAicFNlcmllcyBlbmVyZ3kgbWFuYWdlbWVudCBjYXBhYmlsaXRpZXMgZHJpdmVyIgorCWRlcGVuZHMgb24gUFBDX1BTRVJJRVMKKwlkZWZhdWx0IHkKKwloZWxwCisJICBQcm92aWRlcyBpbnRlcmZhY2UgdG8gcGxhdGZvcm0gZW5lcmd5IG1hbmFnZW1lbnQgY2FwYWJpbGl0aWVzCisJICBvbiBzdXBwb3J0ZWQgUFNFUklFUyBwbGF0Zm9ybXMuCisJICBQcm92aWRlczogL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvcHNlcmllc18oZGUpYWN0aXZhdGlvbl9oaW50X2xpc3QKKwkgIGFuZCAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVOL3BzZXJpZXNfKGRlKWFjdGl2YXRpb25faGludAorCiBjb25maWcgU0NBTkxPRwogCXRyaXN0YXRlICJTY2FubG9nIGR1bXAgaW50ZXJmYWNlIgogCWRlcGVuZHMgb24gUlRBU19QUk9DICYmIFBQQ19QU0VSSUVTCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKaW5kZXggNTllYjhiZC4uZmM1MjM3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQpAQCAtMTEsNiArMTEsNyBAQAogb2JqLSQoQ09ORklHX0tFWEVDKQkrPSBrZXhlYy5vCiBvYmotJChDT05GSUdfUENJKQkrPSBwY2kubyBwY2lfZGxwYXIubwogb2JqLSQoQ09ORklHX1BTRVJJRVNfTVNJKQkrPSBtc2kubworb2JqLSQoQ09ORklHX1BTRVJJRVNfRU5FUkdZKQkrPSBwc2VyaWVzX2VuZXJneS5vCiAKIG9iai0kKENPTkZJR19IT1RQTFVHX0NQVSkJKz0gaG90cGx1Zy1jcHUubwogb2JqLSQoQ09ORklHX01FTU9SWV9IT1RQTFVHKQkrPSBob3RwbHVnLW1lbW9yeS5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCmluZGV4IDBhMTRkOGMuLjBiMGVmZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCkBAIC01NSw2ICs1NSw3IEBACiAJe0ZXX0ZFQVRVUkVfWERBQlIsCQkiaGNhbGwteGRhYnIifSwKIAl7RldfRkVBVFVSRV9NVUxUSVRDRSwJCSJoY2FsbC1tdWx0aS10Y2UifSwKIAl7RldfRkVBVFVSRV9TUExQQVIsCQkiaGNhbGwtc3BscGFyIn0sCisJe0ZXX0ZFQVRVUkVfVlBITiwJCSJoY2FsbC12cGhuIn0sCiB9OwogCiAvKiBCdWlsZCB1cCB0aGUgZmlybXdhcmUgZmVhdHVyZXMgYml0bWFzayB1c2luZyB0aGUgY29udGVudHMgb2YKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGwuUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGwuUwppbmRleCA0OGQyMDU3Li5mZDA1ZmRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsLlMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbC5TCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCQogI2RlZmluZSBTVEtfUEFSTShpKSAgICAgKDQ4ICsgKChpKS0zKSo4KQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCmluZGV4IGUxOWZmMDIuLmYxMDY2NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCkBAIC01NSw3ICs1NSw3IEBACiBzdGF0aWMgaW50IGhjX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQogewogCXVuc2lnbmVkIGxvbmcgaF9udW0gPSAodW5zaWduZWQgbG9uZylwOwotCXN0cnVjdCBoY2FsbF9zdGF0cyAqaHMgPSAoc3RydWN0IGhjYWxsX3N0YXRzICopbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaGNhbGxfc3RhdHMgKmhzID0gbS0+cHJpdmF0ZTsKIAogCWlmIChoc1toX251bV0ubnVtX2NhbGxzKSB7CiAJCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9QVVJSKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKaW5kZXggYTc3YmNhZS4uZWRlYTYwYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1NjQgKiwgdGNlX3BhZ2UpID0gTlVMTDsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1NjQgKiwgdGNlX3BhZ2UpOwogCiBzdGF0aWMgaW50IHRjZV9idWlsZG11bHRpX3BTZXJpZXNMUChzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgbG9uZyB0Y2VudW0sCiAJCQkJICAgICBsb25nIG5wYWdlcywgdW5zaWduZWQgbG9uZyB1YWRkciwKQEAgLTMyMywxNCArMzIzLDEzIEBACiBzdGF0aWMgdm9pZCBpb21tdV90YWJsZV9zZXRwYXJtc19scGFyKHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiLAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sCiAJCQkJICAgICAgc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCi0JCQkJICAgICAgY29uc3Qgdm9pZCAqZG1hX3dpbmRvdywKLQkJCQkgICAgICBpbnQgYnVzc3Vibm8pCisJCQkJICAgICAgY29uc3Qgdm9pZCAqZG1hX3dpbmRvdykKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTsKIAotCXRibC0+aXRfYnVzbm8gID0gYnVzc3Vibm87CiAJb2ZfcGFyc2VfZG1hX3dpbmRvdyhkbiwgZG1hX3dpbmRvdywgJnRibC0+aXRfaW5kZXgsICZvZmZzZXQsICZzaXplKTsKIAorCXRibC0+aXRfYnVzbm8gPSBwaGItPmJ1cy0+bnVtYmVyOwogCXRibC0+aXRfYmFzZSAgID0gMDsKIAl0YmwtPml0X2Jsb2Nrc2l6ZSAgPSAxNjsKIAl0YmwtPml0X3R5cGUgPSBUQ0VfUENJOwpAQCAtNDUwLDE0ICs0NDksMTAgQEAKIAlpZiAoIXBwY2ktPmlvbW11X3RhYmxlKSB7CiAJCXRibCA9IGt6YWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IGlvbW11X3RhYmxlKSwgR0ZQX0tFUk5FTCwKIAkJCQkgICBwcGNpLT5waGItPm5vZGUpOwotCQlpb21tdV90YWJsZV9zZXRwYXJtc19scGFyKHBwY2ktPnBoYiwgcGRuLCB0YmwsIGRtYV93aW5kb3csCi0JCQlidXMtPm51bWJlcik7CisJCWlvbW11X3RhYmxlX3NldHBhcm1zX2xwYXIocHBjaS0+cGhiLCBwZG4sIHRibCwgZG1hX3dpbmRvdyk7CiAJCXBwY2ktPmlvbW11X3RhYmxlID0gaW9tbXVfaW5pdF90YWJsZSh0YmwsIHBwY2ktPnBoYi0+bm9kZSk7CiAJCXByX2RlYnVnKCIgIGNyZWF0ZWQgdGFibGU6ICVwXG4iLCBwcGNpLT5pb21tdV90YWJsZSk7CiAJfQotCi0JaWYgKHBkbiAhPSBkbikKLQkJUENJX0ROKGRuKS0+aW9tbXVfdGFibGUgPSBwcGNpLT5pb21tdV90YWJsZTsKIH0KIAogCkBAIC01MzMsMjEgKzUyOCwxMSBAQAogCX0KIAlwcl9kZWJ1ZygiICBwYXJlbnQgaXMgJXNcbiIsIHBkbi0+ZnVsbF9uYW1lKTsKIAotCS8qIENoZWNrIGZvciBwYXJlbnQgPT0gTlVMTCBzbyB3ZSBkb24ndCB0cnkgdG8gc2V0dXAgdGhlIGVtcHR5IEVBRFMKLQkgKiBzbG90cyBvbiBQT1dFUjQgbWFjaGluZXMuCi0JICovCi0JaWYgKGRtYV93aW5kb3cgPT0gTlVMTCB8fCBwZG4tPnBhcmVudCA9PSBOVUxMKSB7Ci0JCXByX2RlYnVnKCIgIG5vIGRtYSB3aW5kb3cgZm9yIGRldmljZSwgbGlua2luZyB0byBwYXJlbnRcbiIpOwotCQlzZXRfaW9tbXVfdGFibGVfYmFzZSgmZGV2LT5kZXYsIFBDSV9ETihwZG4pLT5pb21tdV90YWJsZSk7Ci0JCXJldHVybjsKLQl9Ci0KIAlwY2kgPSBQQ0lfRE4ocGRuKTsKIAlpZiAoIXBjaS0+aW9tbXVfdGFibGUpIHsKIAkJdGJsID0ga3phbGxvY19ub2RlKHNpemVvZihzdHJ1Y3QgaW9tbXVfdGFibGUpLCBHRlBfS0VSTkVMLAogCQkJCSAgIHBjaS0+cGhiLT5ub2RlKTsKLQkJaW9tbXVfdGFibGVfc2V0cGFybXNfbHBhcihwY2ktPnBoYiwgcGRuLCB0YmwsIGRtYV93aW5kb3csCi0JCQlwY2ktPnBoYi0+YnVzLT5udW1iZXIpOworCQlpb21tdV90YWJsZV9zZXRwYXJtc19scGFyKHBjaS0+cGhiLCBwZG4sIHRibCwgZG1hX3dpbmRvdyk7CiAJCXBjaS0+aW9tbXVfdGFibGUgPSBpb21tdV9pbml0X3RhYmxlKHRibCwgcGNpLT5waGItPm5vZGUpOwogCQlwcl9kZWJ1ZygiICBjcmVhdGVkIHRhYmxlOiAlcFxuIiwgcGNpLT5pb21tdV90YWJsZSk7CiAJfSBlbHNlIHsKQEAgLTU3MSw4ICs1NTYsNyBAQAogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIFBTRVJJRVNfUkVDT05GSUdfUkVNT1ZFOgotCQlpZiAocGNpICYmIHBjaS0+aW9tbXVfdGFibGUgJiYKLQkJICAgIG9mX2dldF9wcm9wZXJ0eShucCwgImlibSxkbWEtd2luZG93IiwgTlVMTCkpCisJCWlmIChwY2kgJiYgcGNpLT5pb21tdV90YWJsZSkKIAkJCWlvbW11X2ZyZWVfdGFibGUocGNpLT5pb21tdV90YWJsZSwgbnAtPmZ1bGxfbmFtZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC01ODksMTMgKzU3Myw4IEBACiAvKiBUaGVzZSBhcmUgY2FsbGVkIHZlcnkgZWFybHkuICovCiB2b2lkIGlvbW11X2luaXRfZWFybHlfcFNlcmllcyh2b2lkKQogewotCWlmIChvZl9jaG9zZW4gJiYgb2ZfZ2V0X3Byb3BlcnR5KG9mX2Nob3NlbiwgImxpbnV4LGlvbW11LW9mZiIsIE5VTEwpKSB7Ci0JCS8qIERpcmVjdCBJL08sIElPTU1VIG9mZiAqLwotCQlwcGNfbWQucGNpX2RtYV9kZXZfc2V0dXAgPSBOVUxMOwotCQlwcGNfbWQucGNpX2RtYV9idXNfc2V0dXAgPSBOVUxMOwotCQlzZXRfcGNpX2RtYV9vcHMoJmRtYV9kaXJlY3Rfb3BzKTsKKwlpZiAob2ZfY2hvc2VuICYmIG9mX2dldF9wcm9wZXJ0eShvZl9jaG9zZW4sICJsaW51eCxpb21tdS1vZmYiLCBOVUxMKSkKIAkJcmV0dXJuOwotCX0KIAogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKSB7CiAJCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX01VTFRJVENFKSkgewpAQCAtNjIyLDMgKzYwMSwxNyBAQAogCXNldF9wY2lfZG1hX29wcygmZG1hX2lvbW11X29wcyk7CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IGRpc2FibGVfbXVsdGl0Y2UoY2hhciAqc3RyKQoreworCWlmIChzdHJjbXAoc3RyLCAib2ZmIikgPT0gMCAmJgorCSAgICBmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpICYmCisJICAgIGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTVVMVElUQ0UpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGluZyBNVUxUSVRDRSBmaXJtd2FyZSBmZWF0dXJlXG4iKTsKKwkJcHBjX21kLnRjZV9idWlsZCA9IHRjZV9idWlsZF9wU2VyaWVzTFA7CisJCXBwY19tZC50Y2VfZnJlZQkgPSB0Y2VfZnJlZV9wU2VyaWVzTFA7CisJCXBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMgJj0gfkZXX0ZFQVRVUkVfTVVMVElUQ0U7CisJfQorCXJldHVybiAxOworfQorCitfX3NldHVwKCJtdWx0aXRjZT0iLCBkaXNhYmxlX211bHRpdGNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCmluZGV4IGYxMjkwNDAuLjVkM2VhOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwpAQCAtNjI3LDYgKzYyNywxOCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwU2VyaWVzX2xwYXJfdGxiaWVfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX2J1bGtfcmVtb3ZlKGNoYXIgKnN0cikKK3sKKwlpZiAoc3RyY21wKHN0ciwgIm9mZiIpID09IDAgJiYKKwkgICAgZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9CVUxLX1JFTU9WRSkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGluZyBCVUxLX1JFTU9WRSBmaXJtd2FyZSBmZWF0dXJlIik7CisJCQlwb3dlcnBjX2Zpcm13YXJlX2ZlYXR1cmVzICY9IH5GV19GRUFUVVJFX0JVTEtfUkVNT1ZFOworCX0KKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgiYnVsa19yZW1vdmU9IiwgZGlzYWJsZV9idWxrX3JlbW92ZSk7CisKIHZvaWQgX19pbml0IGhwdGVfaW5pdF9scGFyKHZvaWQpCiB7CiAJcHBjX21kLmhwdGVfaW52YWxpZGF0ZQk9IHBTZXJpZXNfbHBhcl9ocHRlX2ludmFsaWRhdGU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbnZyYW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9udnJhbS5jCmluZGV4IGJjM2M3ZjIuLjdlODI4YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9udnJhbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9udnJhbS5jCkBAIC0yMiwxMSArMjIsMjUgQEAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAKKy8qIE1heCBieXRlcyB0byByZWFkL3dyaXRlIGluIG9uZSBnbyAqLworI2RlZmluZSBOVlJXX0NOVCAweDIwCisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnZyYW1fc2l6ZTsKIHN0YXRpYyBpbnQgbnZyYW1fZmV0Y2gsIG52cmFtX3N0b3JlOwogc3RhdGljIGNoYXIgbnZyYW1fYnVmW05WUldfQ05UXTsJLyogYXNzdW1lIHRoaXMgaXMgaW4gdGhlIGZpcnN0IDRHQiAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyhudnJhbV9sb2NrKTsKIAorc3RhdGljIGxvbmcgbnZyYW1fZXJyb3JfbG9nX2luZGV4ID0gLTE7CitzdGF0aWMgbG9uZyBudnJhbV9lcnJvcl9sb2dfc2l6ZSA9IDA7CisKK3N0cnVjdCBlcnJfbG9nX2luZm8geworCWludCBlcnJvcl90eXBlOworCXVuc2lnbmVkIGludCBzZXFfbnVtOworfTsKKyNkZWZpbmUgTlZSQU1fTUFYX1JFUQkJMjA3OQorI2RlZmluZSBOVlJBTV9NSU5fUkVRCQkxMDU1CisKKyNkZWZpbmUgTlZSQU1fTE9HX1BBUlRfTkFNRQkiaWJtLHJ0YXMtbG9nIgogCiBzdGF0aWMgc3NpemVfdCBwU2VyaWVzX252cmFtX3JlYWQoY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqaW5kZXgpCiB7CkBAIC0xMTksNiArMTMzLDE5NyBAQAogCXJldHVybiBudnJhbV9zaXplID8gbnZyYW1fc2l6ZSA6IC1FTk9ERVY7CiB9CiAKKworLyogbnZyYW1fd3JpdGVfZXJyb3JfbG9nCisgKgorICogV2UgbmVlZCB0byBidWZmZXIgdGhlIGVycm9yIGxvZ3MgaW50byBudnJhbSB0byBlbnN1cmUgdGhhdCB3ZSBoYXZlCisgKiB0aGUgZmFpbHVyZSBpbmZvcm1hdGlvbiB0byBkZWNvZGUuICBJZiB3ZSBoYXZlIGEgc2V2ZXJlIGVycm9yIHRoZXJlCisgKiBpcyBubyB3YXkgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIE9TIG9yIHRoZSBtYWNoaW5lIGlzIGluIGEgc3RhdGUgdG8KKyAqIGdldCBiYWNrIHRvIHVzZXIgbGFuZCBhbmQgd3JpdGUgdGhlIGVycm9yIHRvIGRpc2suICBGb3IgZXhhbXBsZSBpZgorICogdGhlIFNDU0kgZGV2aWNlIGRyaXZlciBjYXVzZXMgYSBNYWNoaW5lIENoZWNrIGJ5IHdyaXRpbmcgdG8gYSBiYWQKKyAqIElPIGFkZHJlc3MsIHRoZXJlIGlzIG5vIHdheSBvZiBndWFyYW50ZWVpbmcgdGhhdCB0aGUgZGV2aWNlIGRyaXZlcgorICogaXMgaW4gYW55IHN0YXRlIHRoYXQgaXMgd291bGQgYWxzbyBiZSBhYmxlIHRvIHdyaXRlIHRoZSBlcnJvciBkYXRhCisgKiBjYXB0dXJlZCB0byBkaXNrLCB0aHVzIHdlIGJ1ZmZlciBpdCBpbiBOVlJBTSBmb3IgYW5hbHlzaXMgb24gdGhlCisgKiBuZXh0IGJvb3QuCisgKgorICogSW4gTlZSQU0gdGhlIHBhcnRpdGlvbiBjb250YWluaW5nIHRoZSBlcnJvciBsb2cgYnVmZmVyIHdpbGwgbG9va3MgbGlrZToKKyAqIEhlYWRlciAoaW4gYnl0ZXMpOgorICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgc2lnbmF0dXJlIHwgY2hlY2tzdW0gfCBsZW5ndGggfCBuYW1lICAgICAgIHwgZGF0YSAgICAgICAgICAgICB8CisgKiB8MCAgICAgICAgICB8MSAgICAgICAgIHwyICAgICAgM3w0ICAgICAgICAgMTV8MTYgICAgICAgIGxlbmd0aC0xfAorICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKiBUaGUgJ2RhdGEnIHNlY3Rpb24gd291bGQgbG9vayBsaWtlIChpbiBieXRlcyk6CisgKiArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfCBldmVudF9sb2dnZWQgfCBzZXF1ZW5jZSAjIHwgZXJyb3IgbG9nICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwwICAgICAgICAgICAgM3w0ICAgICAgICAgIDd8OCAgICAgICAgICAgIG52cmFtX2Vycm9yX2xvZ19zaXplLTF8CisgKiArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoKKyAqIGV2ZW50X2xvZ2dlZDogMCBpZiBldmVudCBoYXMgbm90IGJlZW4gbG9nZ2VkIHRvIHN5c2xvZywgMSBpZiBpdCBoYXMKKyAqIHNlcXVlbmNlICM6IFRoZSB1bmlxdWUgc2VxdWVuY2UgIyBmb3IgZWFjaCBldmVudC4gKHVudGlsIGl0IHdyYXBzKQorICogZXJyb3IgbG9nOiBUaGUgZXJyb3IgbG9nIGZyb20gZXZlbnRfc2NhbgorICovCitpbnQgbnZyYW1fd3JpdGVfZXJyb3JfbG9nKGNoYXIgKiBidWZmLCBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXJyX3R5cGUsIHVuc2lnbmVkIGludCBlcnJvcl9sb2dfY250KQoreworCWludCByYzsKKwlsb2ZmX3QgdG1wX2luZGV4OworCXN0cnVjdCBlcnJfbG9nX2luZm8gaW5mbzsKKwkKKwlpZiAobnZyYW1fZXJyb3JfbG9nX2luZGV4ID09IC0xKSB7CisJCXJldHVybiAtRVNQSVBFOworCX0KKworCWlmIChsZW5ndGggPiBudnJhbV9lcnJvcl9sb2dfc2l6ZSkgeworCQlsZW5ndGggPSBudnJhbV9lcnJvcl9sb2dfc2l6ZTsKKwl9CisKKwlpbmZvLmVycm9yX3R5cGUgPSBlcnJfdHlwZTsKKwlpbmZvLnNlcV9udW0gPSBlcnJvcl9sb2dfY250OworCisJdG1wX2luZGV4ID0gbnZyYW1fZXJyb3JfbG9nX2luZGV4OworCisJcmMgPSBwcGNfbWQubnZyYW1fd3JpdGUoKGNoYXIgKikmaW5mbywgc2l6ZW9mKHN0cnVjdCBlcnJfbG9nX2luZm8pLCAmdG1wX2luZGV4KTsKKwlpZiAocmMgPD0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX3dyaXRlX2Vycm9yX2xvZzogRmFpbGVkIG52cmFtX3dyaXRlICglZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJjID0gcHBjX21kLm52cmFtX3dyaXRlKGJ1ZmYsIGxlbmd0aCwgJnRtcF9pbmRleCk7CisJaWYgKHJjIDw9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJudnJhbV93cml0ZV9lcnJvcl9sb2c6IEZhaWxlZCBudnJhbV93cml0ZSAoJWQpXG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9CisJCisJcmV0dXJuIDA7Cit9CisKKy8qIG52cmFtX3JlYWRfZXJyb3JfbG9nCisgKgorICogUmVhZHMgbnZyYW0gZm9yIGVycm9yIGxvZyBmb3IgYXQgbW9zdCAnbGVuZ3RoJworICovCitpbnQgbnZyYW1fcmVhZF9lcnJvcl9sb2coY2hhciAqIGJ1ZmYsIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICogZXJyX3R5cGUsIHVuc2lnbmVkIGludCAqIGVycm9yX2xvZ19jbnQpCit7CisJaW50IHJjOworCWxvZmZfdCB0bXBfaW5kZXg7CisJc3RydWN0IGVycl9sb2dfaW5mbyBpbmZvOworCQorCWlmIChudnJhbV9lcnJvcl9sb2dfaW5kZXggPT0gLTEpCisJCXJldHVybiAtMTsKKworCWlmIChsZW5ndGggPiBudnJhbV9lcnJvcl9sb2dfc2l6ZSkKKwkJbGVuZ3RoID0gbnZyYW1fZXJyb3JfbG9nX3NpemU7CisKKwl0bXBfaW5kZXggPSBudnJhbV9lcnJvcl9sb2dfaW5kZXg7CisKKwlyYyA9IHBwY19tZC5udnJhbV9yZWFkKChjaGFyICopJmluZm8sIHNpemVvZihzdHJ1Y3QgZXJyX2xvZ19pbmZvKSwgJnRtcF9pbmRleCk7CisJaWYgKHJjIDw9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJudnJhbV9yZWFkX2Vycm9yX2xvZzogRmFpbGVkIG52cmFtX3JlYWQgKCVkKVxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBwcGNfbWQubnZyYW1fcmVhZChidWZmLCBsZW5ndGgsICZ0bXBfaW5kZXgpOworCWlmIChyYyA8PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibnZyYW1fcmVhZF9lcnJvcl9sb2c6IEZhaWxlZCBudnJhbV9yZWFkICglZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCSplcnJvcl9sb2dfY250ID0gaW5mby5zZXFfbnVtOworCSplcnJfdHlwZSA9IGluZm8uZXJyb3JfdHlwZTsKKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGRvZXNuJ3QgYWN0dWFsbHkgemVybyBhbnl0aGluZywgYnV0IGl0IHNldHMgdGhlIGV2ZW50X2xvZ2dlZAorICogd29yZCB0byB0ZWxsIHRoYXQgdGhpcyBldmVudCBpcyBzYWZlbHkgaW4gc3lzbG9nLgorICovCitpbnQgbnZyYW1fY2xlYXJfZXJyb3JfbG9nKHZvaWQpCit7CisJbG9mZl90IHRtcF9pbmRleDsKKwlpbnQgY2xlYXJfd29yZCA9IEVSUl9GTEFHX0FMUkVBRFlfTE9HR0VEOworCWludCByYzsKKworCWlmIChudnJhbV9lcnJvcl9sb2dfaW5kZXggPT0gLTEpCisJCXJldHVybiAtMTsKKworCXRtcF9pbmRleCA9IG52cmFtX2Vycm9yX2xvZ19pbmRleDsKKwkKKwlyYyA9IHBwY19tZC5udnJhbV93cml0ZSgoY2hhciAqKSZjbGVhcl93b3JkLCBzaXplb2YoaW50KSwgJnRtcF9pbmRleCk7CisJaWYgKHJjIDw9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJudnJhbV9jbGVhcl9lcnJvcl9sb2c6IEZhaWxlZCBudnJhbV93cml0ZSAoJWQpXG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogcHNlcmllc19udnJhbV9pbml0X2xvZ19wYXJ0aXRpb24KKyAqCisgKiBUaGlzIHdpbGwgc2V0dXAgdGhlIHBhcnRpdGlvbiB3ZSBuZWVkIGZvciBidWZmZXJpbmcgdGhlCisgKiBlcnJvciBsb2dzIGFuZCBjbGVhbnVwIHBhcnRpdGlvbnMgaWYgbmVlZGVkLgorICoKKyAqIFRoZSBnZW5lcmFsIHN0cmF0ZWd5IGlzIHRoZSBmb2xsb3dpbmc6CisgKiAxLikgSWYgdGhlcmUgaXMgbG9nIHBhcnRpdGlvbiBsYXJnZSBlbm91Z2ggdGhlbiB1c2UgaXQuCisgKiAyLikgSWYgdGhlcmUgaXMgbm9uZSBsYXJnZSBlbm91Z2gsIHNlYXJjaAorICogZm9yIGEgZnJlZSBwYXJ0aXRpb24gdGhhdCBpcyBsYXJnZSBlbm91Z2guCisgKiAzLikgSWYgdGhlcmUgaXMgbm90IGEgZnJlZSBwYXJ0aXRpb24gbGFyZ2UgZW5vdWdoIHJlbW92ZSAKKyAqIF9hbGxfIE9TIHBhcnRpdGlvbnMgYW5kIGNvbnNvbGlkYXRlIHRoZSBzcGFjZS4KKyAqIDQuKSBXaWxsIGZpcnN0IHRyeSBnZXR0aW5nIGEgY2h1bmsgdGhhdCB3aWxsIHNhdGlzZnkgdGhlIG1heGltdW0KKyAqIGVycm9yIGxvZyBzaXplIChOVlJBTV9NQVhfUkVRKS4KKyAqIDUuKSBJZiB0aGUgbWF4IGNodW5rIGNhbm5vdCBiZSBhbGxvY2F0ZWQgdGhlbiB0cnkgZmluZGluZyBhIGNodW5rCisgKiB0aGF0IHdpbGwgc2F0aXNmeSB0aGUgbWludW0gbmVlZGVkIChOVlJBTV9NSU5fUkVRKS4KKyAqLworc3RhdGljIGludCBfX2luaXQgcHNlcmllc19udnJhbV9pbml0X2xvZ19wYXJ0aXRpb24odm9pZCkKK3sKKwlsb2ZmX3QgcDsKKwlpbnQgc2l6ZTsKKworCS8qIFNjYW4gbnZyYW0gZm9yIHBhcnRpdGlvbnMgKi8KKwludnJhbV9zY2FuX3BhcnRpdGlvbnMoKTsKKworCS8qIExvb2tnIGZvciBvdXJzICovCisJcCA9IG52cmFtX2ZpbmRfcGFydGl0aW9uKE5WUkFNX0xPR19QQVJUX05BTUUsIE5WUkFNX1NJR19PUywgJnNpemUpOworCisJLyogRm91bmQgb25lIGJ1dCB0b28gc21hbGwsIHJlbW92ZSBpdCAqLworCWlmIChwICYmIHNpemUgPCBOVlJBTV9NSU5fUkVRKSB7CisJCXByX2luZm8oIm52cmFtOiBGb3VuZCB0b28gc21hbGwgIk5WUkFNX0xPR19QQVJUX05BTUUiIHBhcnRpdGlvbiIKKwkJCSIscmVtb3ZpbmcgaXQuLi4iKTsKKwkJbnZyYW1fcmVtb3ZlX3BhcnRpdGlvbihOVlJBTV9MT0dfUEFSVF9OQU1FLCBOVlJBTV9TSUdfT1MpOworCQlwID0gMDsKKwl9CisKKwkvKiBDcmVhdGUgb25lIGlmIHdlIGRpZG4ndCBmaW5kICovCisJaWYgKCFwKSB7CisJCXAgPSBudnJhbV9jcmVhdGVfcGFydGl0aW9uKE5WUkFNX0xPR19QQVJUX05BTUUsIE5WUkFNX1NJR19PUywKKwkJCQkJICAgTlZSQU1fTUFYX1JFUSwgTlZSQU1fTUlOX1JFUSk7CisJCS8qIE5vIHJvb20gZm9yIGl0LCB0cnkgdG8gZ2V0IHJpZCBvZiBhbnkgT1MgcGFydGl0aW9uCisJCSAqIGFuZCB0cnkgYWdhaW4KKwkJICovCisJCWlmIChwID09IC1FTk9TUEMpIHsKKwkJCXByX2luZm8oIm52cmFtOiBObyByb29tIHRvIGNyZWF0ZSAiTlZSQU1fTE9HX1BBUlRfTkFNRQorCQkJCSIgcGFydGl0aW9uLCBkZWxldGluZyBhbGwgT1MgcGFydGl0aW9ucy4uLiIpOworCQkJbnZyYW1fcmVtb3ZlX3BhcnRpdGlvbihOVUxMLCBOVlJBTV9TSUdfT1MpOworCQkJcCA9IG52cmFtX2NyZWF0ZV9wYXJ0aXRpb24oTlZSQU1fTE9HX1BBUlRfTkFNRSwKKwkJCQkJCSAgIE5WUkFNX1NJR19PUywgTlZSQU1fTUFYX1JFUSwKKwkJCQkJCSAgIE5WUkFNX01JTl9SRVEpOworCQl9CisJfQorCisJaWYgKHAgPD0gMCkgeworCQlwcl9lcnIoIm52cmFtOiBGYWlsZWQgdG8gZmluZCBvciBjcmVhdGUgIk5WUkFNX0xPR19QQVJUX05BTUUKKwkJICAgICAgICIgcGFydGl0aW9uLCBlcnIgJWRcbiIsIChpbnQpcCk7CisJCXJldHVybiAwOworCX0KKworCW52cmFtX2Vycm9yX2xvZ19pbmRleCA9IHA7CisJbnZyYW1fZXJyb3JfbG9nX3NpemUgPSBudnJhbV9nZXRfcGFydGl0aW9uX3NpemUocCkgLQorCQlzaXplb2Yoc3RydWN0IGVycl9sb2dfaW5mbyk7CisJCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2FyY2hfaW5pdGNhbGwocHNlcmllcywgcHNlcmllc19udnJhbV9pbml0X2xvZ19wYXJ0aXRpb24pOworCiBpbnQgX19pbml0IHBTZXJpZXNfbnZyYW1faW5pdCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnZyYW07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcHNlcmllc19lbmVyZ3kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wc2VyaWVzX2VuZXJneS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YjNjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcHNlcmllc19lbmVyZ3kuYwpAQCAtMCwwICsxLDMyNiBAQAorLyoKKyAqIFBPV0VSIHBsYXRmb3JtIGVuZXJneSBtYW5hZ2VtZW50IGRyaXZlcgorICogQ29weXJpZ2h0IChDKSAyMDEwIElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwc2VyaWVzIHBsYXRmb3JtIGRldmljZSBkcml2ZXIgcHJvdmlkZXMgYWNjZXNzIHRvCisgKiBwbGF0Zm9ybSBlbmVyZ3kgbWFuYWdlbWVudCBjYXBhYmlsaXRpZXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGFzbS9jcHV0aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CisKKworI2RlZmluZSBNT0RVTEVfVkVSUyAiMS4wIgorI2RlZmluZSBNT0RVTEVfTkFNRSAicHNlcmllc19lbmVyZ3kiCisKKy8qIERyaXZlciBmbGFncyAqLworCitzdGF0aWMgaW50IHN5c2ZzX2VudHJpZXM7CisKKy8qIEhlbHBlciByb3V0aW5lcyAqLworCisvKgorICogUm91dGluZSB0byBkZXRlY3QgZmlybXdhcmUgc3VwcG9ydCBmb3IgaGNhbGwKKyAqIHJldHVybiAxIGlmIEhfQkVTVF9FTkVSR1kgaXMgc3VwcG9ydGVkCisgKiBlbHNlIHJldHVybiAwCisgKi8KKworc3RhdGljIGludCBjaGVja19mb3JfaF9iZXN0X2VuZXJneSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcnRhcyA9IE5VTEw7CisJY29uc3QgY2hhciAqaHlwZXJ0YXMsICpzOworCWludCBsZW5ndGg7CisJaW50IHJjID0gMDsKKworCXJ0YXMgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3J0YXMiKTsKKwlpZiAoIXJ0YXMpCisJCXJldHVybiAwOworCisJaHlwZXJ0YXMgPSBvZl9nZXRfcHJvcGVydHkocnRhcywgImlibSxoeXBlcnRhcy1mdW5jdGlvbnMiLCAmbGVuZ3RoKTsKKwlpZiAoIWh5cGVydGFzKSB7CisJCW9mX25vZGVfcHV0KHJ0YXMpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBoeXBlcnRhcyB3aWxsIGhhdmUgbGlzdCBvZiBzdHJpbmdzIHdpdGggaGNhbGwgbmFtZXMgKi8KKwlmb3IgKHMgPSBoeXBlcnRhczsgcyA8IGh5cGVydGFzICsgbGVuZ3RoOyBzICs9IHN0cmxlbihzKSArIDEpIHsKKwkJaWYgKCFzdHJuY21wKCJoY2FsbC1iZXN0LWVuZXJneS0xIiwgcywgMTkpKSB7CisJCQlyYyA9IDE7IC8qIEZvdW5kIHRoZSBzdHJpbmcgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCW9mX25vZGVfcHV0KHJ0YXMpOworCXJldHVybiByYzsKK30KKworLyogSGVscGVyIFJvdXRpbmVzIHRvIGNvbnZlcnQgYmV0d2VlbiBkcmNfaW5kZXggdG8gY3B1IG51bWJlcnMgKi8KKworc3RhdGljIHUzMiBjcHVfdG9fZHJjX2luZGV4KGludCBjcHUpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbiA9IE5VTEw7CisJY29uc3QgaW50ICppbmRleGVzOworCWludCBpOworCWludCByYyA9IDE7CisJdTMyIHJldCA9IDA7CisKKwlkbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvY3B1cyIpOworCWlmIChkbiA9PSBOVUxMKQorCQlnb3RvIGVycjsKKwlpbmRleGVzID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLGRyYy1pbmRleGVzIiwgTlVMTCk7CisJaWYgKGluZGV4ZXMgPT0gTlVMTCkKKwkJZ290byBlcnJfb2Zfbm9kZV9wdXQ7CisJLyogQ29udmVydCBsb2dpY2FsIGNwdSBudW1iZXIgdG8gY29yZSBudW1iZXIgKi8KKwlpID0gY3B1X2NvcmVfaW5kZXhfb2ZfdGhyZWFkKGNwdSk7CisJLyoKKwkgKiBUaGUgZmlyc3QgZWxlbWVudCBpbmRleGVzWzBdIGlzIHRoZSBudW1iZXIgb2YgZHJjX2luZGV4ZXMKKwkgKiByZXR1cm5lZCBpbiB0aGUgbGlzdC4gIEhlbmNlIGkrMSB3aWxsIGdldCB0aGUgZHJjX2luZGV4CisJICogY29ycmVzcG9uZGluZyB0byBjb3JlIG51bWJlciBpLgorCSAqLworCVdBUk5fT04oaSA+IGluZGV4ZXNbMF0pOworCXJldCA9IGluZGV4ZXNbaSArIDFdOworCXJjID0gMDsKKworZXJyX29mX25vZGVfcHV0OgorCW9mX25vZGVfcHV0KGRuKTsKK2VycjoKKwlpZiAocmMpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNwdV90b19kcmNfaW5kZXgoJWQpIGZhaWxlZCIsIGNwdSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkcmNfaW5kZXhfdG9fY3B1KHUzMiBkcmNfaW5kZXgpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbiA9IE5VTEw7CisJY29uc3QgaW50ICppbmRleGVzOworCWludCBpLCBjcHUgPSAwOworCWludCByYyA9IDE7CisKKwlkbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvY3B1cyIpOworCWlmIChkbiA9PSBOVUxMKQorCQlnb3RvIGVycjsKKwlpbmRleGVzID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLGRyYy1pbmRleGVzIiwgTlVMTCk7CisJaWYgKGluZGV4ZXMgPT0gTlVMTCkKKwkJZ290byBlcnJfb2Zfbm9kZV9wdXQ7CisJLyoKKwkgKiBGaXJzdCBlbGVtZW50IGluIHRoZSBhcnJheSBpcyB0aGUgbnVtYmVyIG9mIGRyY19pbmRleGVzCisJICogcmV0dXJuZWQuICBTZWFyY2ggdGhyb3VnaCB0aGUgbGlzdCB0byBmaW5kIHRoZSBtYXRjaGluZworCSAqIGRyY19pbmRleCBhbmQgZ2V0IHRoZSBjb3JlIG51bWJlcgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBpbmRleGVzWzBdOyBpKyspIHsKKwkJaWYgKGluZGV4ZXNbaSArIDFdID09IGRyY19pbmRleCkKKwkJCWJyZWFrOworCX0KKwkvKiBDb252ZXJ0IGNvcmUgbnVtYmVyIHRvIGxvZ2ljYWwgY3B1IG51bWJlciAqLworCWNwdSA9IGNwdV9maXJzdF90aHJlYWRfb2ZfY29yZShpKTsKKwlyYyA9IDA7CisKK2Vycl9vZl9ub2RlX3B1dDoKKwlvZl9ub2RlX3B1dChkbik7CitlcnI6CisJaWYgKHJjKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJkcmNfaW5kZXhfdG9fY3B1KCVkKSBmYWlsZWQiLCBkcmNfaW5kZXgpOworCXJldHVybiBjcHU7Cit9CisKKy8qCisgKiBwc2VyaWVzIGh5cGVydmlzb3IgY2FsbCBIX0JFU1RfRU5FUkdZIHByb3ZpZGVzIGhpbnRzIHRvIE9TIG9uCisgKiBwcmVmZXJyZWQgbG9naWNhbCBjcHVzIHRvIGFjdGl2YXRlIG9yIGRlYWN0aXZhdGUgZm9yIG9wdGltaXplZAorICogZW5lcmd5IGNvbnN1bXB0aW9uLgorICovCisKKyNkZWZpbmUgRkxBR1NfTU9ERTEJMHgwMDRFMjAwMDAwMDgwRTAxCisjZGVmaW5lIEZMQUdTX01PREUyCTB4MDA0RTIwMDAwMDA4MDQwMQorI2RlZmluZSBGTEFHU19BQ1RJVkFURSAgMHgxMDAKKworc3RhdGljIHNzaXplX3QgZ2V0X2Jlc3RfZW5lcmd5X2xpc3QoY2hhciAqcGFnZSwgaW50IGFjdGl2YXRlKQoreworCWludCByYywgY250LCBpLCBjcHU7CisJdW5zaWduZWQgbG9uZyByZXRidWZbUExQQVJfSENBTEw5X0JVRlNJWkVdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXUzMiAqYnVmX3BhZ2U7CisJY2hhciAqcyA9IHBhZ2U7CisKKwlidWZfcGFnZSA9ICh1MzIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWlmICghYnVmX3BhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCisJZmxhZ3MgPSBGTEFHU19NT0RFMTsKKwlpZiAoYWN0aXZhdGUpCisJCWZsYWdzIHw9IEZMQUdTX0FDVElWQVRFOworCisJcmMgPSBwbHBhcl9oY2FsbDkoSF9CRVNUX0VORVJHWSwgcmV0YnVmLCBmbGFncywgMCwgX19wYShidWZfcGFnZSksCisJCQkJMCwgMCwgMCwgMCwgMCwgMCk7CisJaWYgKHJjICE9IEhfU1VDQ0VTUykgeworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1Zl9wYWdlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY250ID0gcmV0YnVmWzBdOworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQljcHUgPSBkcmNfaW5kZXhfdG9fY3B1KGJ1Zl9wYWdlWzIqaSsxXSk7CisJCWlmICgoY3B1X29ubGluZShjcHUpICYmICFhY3RpdmF0ZSkgfHwKKwkJICAgICghY3B1X29ubGluZShjcHUpICYmIGFjdGl2YXRlKSkKKwkJCXMgKz0gc3ByaW50ZihzLCAiJWQsIiwgY3B1KTsKKwl9CisJaWYgKHMgPiBwYWdlKSB7IC8qIFNvbWV0aGluZyB0byBzaG93ICovCisJCXMtLTsgLyogU3VwcHJlc3MgbGFzdCBjb21tYSAqLworCQlzICs9IHNwcmludGYocywgIlxuIik7CisJfQorCisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBidWZfcGFnZSk7CisJcmV0dXJuIHMtcGFnZTsKK30KKworc3RhdGljIHNzaXplX3QgZ2V0X2Jlc3RfZW5lcmd5X2RhdGEoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQkJY2hhciAqcGFnZSwgaW50IGFjdGl2YXRlKQoreworCWludCByYzsKKwl1bnNpZ25lZCBsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTDlfQlVGU0laRV07CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwlmbGFncyA9IEZMQUdTX01PREUyOworCWlmIChhY3RpdmF0ZSkKKwkJZmxhZ3MgfD0gRkxBR1NfQUNUSVZBVEU7CisKKwlyYyA9IHBscGFyX2hjYWxsOShIX0JFU1RfRU5FUkdZLCByZXRidWYsIGZsYWdzLAorCQkJCWNwdV90b19kcmNfaW5kZXgoZGV2LT5pZCksCisJCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCk7CisKKwlpZiAocmMgIT0gSF9TVUNDRVNTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbHVcbiIsIHJldGJ1ZlsxXSA+PiAzMik7Cit9CisKKy8qIFdyYXBwZXIgZnVuY3Rpb25zICovCisKK3N0YXRpYyBzc2l6ZV90IGNwdV9hY3RpdmF0ZV9oaW50X2xpc3Rfc2hvdyhzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywKKwkJCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLCBjaGFyICpwYWdlKQoreworCXJldHVybiBnZXRfYmVzdF9lbmVyZ3lfbGlzdChwYWdlLCAxKTsKK30KKworc3RhdGljIHNzaXplX3QgY3B1X2RlYWN0aXZhdGVfaGludF9saXN0X3Nob3coc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqcGFnZSkKK3sKKwlyZXR1cm4gZ2V0X2Jlc3RfZW5lcmd5X2xpc3QocGFnZSwgMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBlcmNwdV9hY3RpdmF0ZV9oaW50X3Nob3coc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpwYWdlKQoreworCXJldHVybiBnZXRfYmVzdF9lbmVyZ3lfZGF0YShkZXYsIHBhZ2UsIDEpOworfQorCitzdGF0aWMgc3NpemVfdCBwZXJjcHVfZGVhY3RpdmF0ZV9oaW50X3Nob3coc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBjaGFyICpwYWdlKQoreworCXJldHVybiBnZXRfYmVzdF9lbmVyZ3lfZGF0YShkZXYsIHBhZ2UsIDApOworfQorCisvKgorICogQ3JlYXRlIHN5c2ZzIGludGVyZmFjZToKKyAqIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3BzZXJpZXNfYWN0aXZhdGVfaGludF9saXN0CisgKiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9wc2VyaWVzX2RlYWN0aXZhdGVfaGludF9saXN0CisgKglDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBjcHVzIHRvIGFjdGl2YXRlIG9yIGRlYWN0aXZhdGUKKyAqIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdU4vcHNlcmllc19hY3RpdmF0ZV9oaW50CisgKiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVOL3BzZXJpZXNfZGVhY3RpdmF0ZV9oaW50CisgKglQZXItY3B1IHZhbHVlIG9mIHRoZSBoaW50CisgKi8KKworc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgYXR0cl9jcHVfYWN0aXZhdGVfaGludF9saXN0ID0KKwkJX1NZU0RFVl9DTEFTU19BVFRSKHBzZXJpZXNfYWN0aXZhdGVfaGludF9saXN0LCAwNDQ0LAorCQljcHVfYWN0aXZhdGVfaGludF9saXN0X3Nob3csIE5VTEwpOworCitzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSBhdHRyX2NwdV9kZWFjdGl2YXRlX2hpbnRfbGlzdCA9CisJCV9TWVNERVZfQ0xBU1NfQVRUUihwc2VyaWVzX2RlYWN0aXZhdGVfaGludF9saXN0LCAwNDQ0LAorCQljcHVfZGVhY3RpdmF0ZV9oaW50X2xpc3Rfc2hvdywgTlVMTCk7CisKK3N0cnVjdCBzeXNkZXZfYXR0cmlidXRlIGF0dHJfcGVyY3B1X2FjdGl2YXRlX2hpbnQgPQorCQlfU1lTREVWX0FUVFIocHNlcmllc19hY3RpdmF0ZV9oaW50LCAwNDQ0LAorCQlwZXJjcHVfYWN0aXZhdGVfaGludF9zaG93LCBOVUxMKTsKKworc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgYXR0cl9wZXJjcHVfZGVhY3RpdmF0ZV9oaW50ID0KKwkJX1NZU0RFVl9BVFRSKHBzZXJpZXNfZGVhY3RpdmF0ZV9oaW50LCAwNDQ0LAorCQlwZXJjcHVfZGVhY3RpdmF0ZV9oaW50X3Nob3csIE5VTEwpOworCitzdGF0aWMgaW50IF9faW5pdCBwc2VyaWVzX2VuZXJneV9pbml0KHZvaWQpCit7CisJaW50IGNwdSwgZXJyOworCXN0cnVjdCBzeXNfZGV2aWNlICpjcHVfc3lzX2RldjsKKworCWlmICghY2hlY2tfZm9yX2hfYmVzdF9lbmVyZ3koKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJIeXBlcmNhbGwgSF9CRVNUX0VORVJHWSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIENyZWF0ZSB0aGUgc3lzZnMgZmlsZXMgKi8KKwllcnIgPSBzeXNmc19jcmVhdGVfZmlsZSgmY3B1X3N5c2Rldl9jbGFzcy5rc2V0LmtvYmosCisJCQkJJmF0dHJfY3B1X2FjdGl2YXRlX2hpbnRfbGlzdC5hdHRyKTsKKwlpZiAoIWVycikKKwkJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGUoJmNwdV9zeXNkZXZfY2xhc3Mua3NldC5rb2JqLAorCQkJCSZhdHRyX2NwdV9kZWFjdGl2YXRlX2hpbnRfbGlzdC5hdHRyKTsKKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQljcHVfc3lzX2RldiA9IGdldF9jcHVfc3lzZGV2KGNwdSk7CisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZjcHVfc3lzX2Rldi0+a29iaiwKKwkJCQkmYXR0cl9wZXJjcHVfYWN0aXZhdGVfaGludC5hdHRyKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCQllcnIgPSBzeXNmc19jcmVhdGVfZmlsZSgmY3B1X3N5c19kZXYtPmtvYmosCisJCQkJJmF0dHJfcGVyY3B1X2RlYWN0aXZhdGVfaGludC5hdHRyKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzeXNmc19lbnRyaWVzID0gMTsgLyogUmVtb3ZlZCBlbnRyaWVzIG9uIGNsZWFudXAgKi8KKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHNlcmllc19lbmVyZ3lfY2xlYW51cCh2b2lkKQoreworCWludCBjcHU7CisJc3RydWN0IHN5c19kZXZpY2UgKmNwdV9zeXNfZGV2OworCisJaWYgKCFzeXNmc19lbnRyaWVzKQorCQlyZXR1cm47CisKKwkvKiBSZW1vdmUgdGhlIHN5c2ZzIGZpbGVzICovCisJc3lzZnNfcmVtb3ZlX2ZpbGUoJmNwdV9zeXNkZXZfY2xhc3Mua3NldC5rb2JqLAorCQkJCSZhdHRyX2NwdV9hY3RpdmF0ZV9oaW50X2xpc3QuYXR0cik7CisKKwlzeXNmc19yZW1vdmVfZmlsZSgmY3B1X3N5c2Rldl9jbGFzcy5rc2V0LmtvYmosCisJCQkJJmF0dHJfY3B1X2RlYWN0aXZhdGVfaGludF9saXN0LmF0dHIpOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQljcHVfc3lzX2RldiA9IGdldF9jcHVfc3lzZGV2KGNwdSk7CisJCXN5c2ZzX3JlbW92ZV9maWxlKCZjcHVfc3lzX2Rldi0+a29iaiwKKwkJCQkmYXR0cl9wZXJjcHVfYWN0aXZhdGVfaGludC5hdHRyKTsKKwkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmNwdV9zeXNfZGV2LT5rb2JqLAorCQkJCSZhdHRyX3BlcmNwdV9kZWFjdGl2YXRlX2hpbnQuYXR0cik7CisJfQorfQorCittb2R1bGVfaW5pdChwc2VyaWVzX2VuZXJneV9pbml0KTsKK21vZHVsZV9leGl0KHBzZXJpZXNfZW5lcmd5X2NsZWFudXApOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHBTZXJpZXMgcGxhdGZvcm0gZW5lcmd5IG1hbmFnZW1lbnQiKTsKK01PRFVMRV9BVVRIT1IoIlZhaWR5YW5hdGhhbiBTcmluaXZhc2FuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc3VzcGVuZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3N1c3BlbmQuYwppbmRleCBlZDcyMDk4Li5hOGNhMjg5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc3VzcGVuZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zdXNwZW5kLmMKQEAgLTE1Myw3ICsxNTMsNyBAQAogCS5uYW1lID0gInBvd2VyIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgcHNlcmllc19zdXNwZW5kX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgcHNlcmllc19zdXNwZW5kX29wcyA9IHsKIAkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKIAkuYmVnaW4JCT0gcHNlcmllc19zdXNwZW5kX2JlZ2luLAogCS5wcmVwYXJlX2xhdGUJPSBwc2VyaWVzX3ByZXBhcmVfbGF0ZSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCmluZGV4IDBiZWY5ZGEuLjljMjk3MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQpAQCAtNDEsNiArNDEsNyBAQAogaWZlcSAoJChDT05GSUdfUENJKSx5KQogb2JqLSQoQ09ORklHXzR4eCkJCSs9IHBwYzR4eF9wY2kubwogZW5kaWYKK29iai0kKENPTkZJR19QUEM0eHhfQ1BNKQkrPSBwcGM0eHhfY3BtLm8KIG9iai0kKENPTkZJR19QUEM0eHhfR1BJTykJKz0gcHBjNHh4X2dwaW8ubwogCiBvYmotJChDT05GSUdfQ1BNKQkJKz0gY3BtX2NvbW1vbi5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2RhcnRfaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCmluZGV4IDE3Y2YxNWUuLjhlOWUwNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCkBAIC0zMTIsMTcgKzMxMiwxMCBAQAogCiBzdGF0aWMgdm9pZCBwY2lfZG1hX2J1c19zZXR1cF9kYXJ0KHN0cnVjdCBwY2lfYnVzICpidXMpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkbjsKLQogCWlmICghaW9tbXVfdGFibGVfZGFydF9pbml0ZWQpIHsKIAkJaW9tbXVfdGFibGVfZGFydF9pbml0ZWQgPSAxOwogCQlpb21tdV90YWJsZV9kYXJ0X3NldHVwKCk7CiAJfQotCi0JZG4gPSBwY2lfYnVzX3RvX09GX25vZGUoYnVzKTsKLQotCWlmIChkbikKLQkJUENJX0ROKGRuKS0+aW9tbXVfdGFibGUgPSAmaW9tbXVfdGFibGVfZGFydDsKIH0KIAogc3RhdGljIGJvb2wgZGFydF9kZXZpY2Vfb25fcGNpZShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC0zNzMsNyArMzY2LDcgQEAKIAlpZiAoZG4gPT0gTlVMTCkgewogCQlkbiA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsICJkYXJ0IiwgInU0LWRhcnQiKTsKIAkJaWYgKGRuID09IE5VTEwpCi0JCQlnb3RvIGJhaWw7CisJCQlyZXR1cm47CS8qIHVzZSBkZWZhdWx0IGRpcmVjdF9kbWFfb3BzICovCiAJCWRhcnRfaXNfdTQgPSAxOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcG1jLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wbWMuYwppbmRleCA0NGRlODU1Li5lOTM4MWJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wbWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wbWMuYwpAQCAtNTMsNyArNTMsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHBtY19zdXNwZW5kX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgcG1jX3N1c3BlbmRfb3BzID0gewogCS52YWxpZCA9IHBtY19zdXNwZW5kX3ZhbGlkLAogCS5lbnRlciA9IHBtY19zdXNwZW5kX2VudGVyLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3Jpby5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcmlvLmMKaW5kZXggOTcyNTM2OS4uOWY5OWJlZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcmlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcmlvLmMKQEAgLTk3Myw3ICs5NzMsNiBAQAogCWlmIChkc3IgJiBET09SQkVMTF9EU1JfUUZJKSB7CiAJCXByX2luZm8oIlJJTzogZG9vcmJlbGwgcXVldWUgZnVsbFxuIik7CiAJCW91dF9iZTMyKCZwcml2LT5tc2dfcmVncy0+ZHNyLCBET09SQkVMTF9EU1JfUUZJKTsKLQkJZ290byBvdXQ7CiAJfQogCiAJLyogWFhYIE5lZWQgdG8gY2hlY2svZGlzcGF0Y2ggdW50aWwgcXVldWUgZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jCmluZGV4IGMwZWEwNWUuLmM0OGNkODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHh4X2dwaW8uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBHUElPcyBvbiBNUEM4MzQ5Lzg1NzIvODYxMCBhbmQgY29tcGF0aWJsZQorICogR1BJT3Mgb24gTVBDNTEyeC84MzQ5Lzg1NzIvODYxMCBhbmQgY29tcGF0aWJsZQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBQZXRlciBLb3JzZ2FhcmQgPGphY21ldEBzdW5zaXRlLmRrPgogICoKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgR1BJT19JRVIJCTB4MGMKICNkZWZpbmUgR1BJT19JTVIJCTB4MTAKICNkZWZpbmUgR1BJT19JQ1IJCTB4MTQKKyNkZWZpbmUgR1BJT19JQ1IyCQkweDE4CiAKIHN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCB7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCBtbV9nYzsKQEAgLTM3LDYgKzM4LDcgQEAKIAkgKi8KIAl1MzIgZGF0YTsKIAlzdHJ1Y3QgaXJxX2hvc3QgKmlycTsKKwl2b2lkICpvZl9kZXZfaWRfZGF0YTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdTMyIG1wYzh4eHhfZ3BpbzJtYXNrKHVuc2lnbmVkIGludCBncGlvKQpAQCAtMjE1LDYgKzIxNyw1MSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG1wYzUxMnhfaXJxX3NldF90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQoreworCXN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCAqbXBjOHh4eF9nYyA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tID0gJm1wYzh4eHhfZ2MtPm1tX2djOworCXVuc2lnbmVkIGxvbmcgZ3BpbyA9IHZpcnFfdG9faHcodmlycSk7CisJdm9pZCBfX2lvbWVtICpyZWc7CisJdW5zaWduZWQgaW50IHNoaWZ0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZ3BpbyA8IDE2KSB7CisJCXJlZyA9IG1tLT5yZWdzICsgR1BJT19JQ1I7CisJCXNoaWZ0ID0gKDE1IC0gZ3BpbykgKiAyOworCX0gZWxzZSB7CisJCXJlZyA9IG1tLT5yZWdzICsgR1BJT19JQ1IyOworCQlzaGlmdCA9ICgxNSAtIChncGlvICUgMTYpKSAqIDI7CisJfQorCisJc3dpdGNoIChmbG93X3R5cGUpIHsKKwljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKKwljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKKwkJY2xyc2V0Yml0c19iZTMyKHJlZywgMyA8PCBzaGlmdCwgMiA8PCBzaGlmdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgorCWNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKKwkJY2xyc2V0Yml0c19iZTMyKHJlZywgMyA8PCBzaGlmdCwgMSA8PCBzaGlmdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9UWVBFX0VER0VfQk9USDoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKKwkJY2xyYml0czMyKHJlZywgMyA8PCBzaGlmdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGM4eHh4X2lycV9jaGlwID0gewogCS5uYW1lCQk9ICJtcGM4eHh4LWdwaW8iLAogCS51bm1hc2sJCT0gbXBjOHh4eF9pcnFfdW5tYXNrLApAQCAtMjI2LDYgKzI3MywxMSBAQAogc3RhdGljIGludCBtcGM4eHh4X2dwaW9faXJxX21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAogCQkJCWlycV9od19udW1iZXJfdCBodykKIHsKKwlzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKm1wYzh4eHhfZ2MgPSBoLT5ob3N0X2RhdGE7CisKKwlpZiAobXBjOHh4eF9nYy0+b2ZfZGV2X2lkX2RhdGEpCisJCW1wYzh4eHhfaXJxX2NoaXAuc2V0X3R5cGUgPSBtcGM4eHh4X2djLT5vZl9kZXZfaWRfZGF0YTsKKwogCXNldF9pcnFfY2hpcF9kYXRhKHZpcnEsIGgtPmhvc3RfZGF0YSk7CiAJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZtcGM4eHh4X2lycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlzZXRfaXJxX3R5cGUodmlycSwgSVJRX1RZUEVfTk9ORSk7CkBAIC0yNTMsMTEgKzMwNSwyMCBAQAogCS54bGF0ZQk9IG1wYzh4eHhfZ3Bpb19pcnFfeGxhdGUsCiB9OwogCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM4eHh4X2dwaW9faWRzW10gX19pbml0ZGF0YSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWdwaW8iLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZ3BpbyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODYxMC1ncGlvIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWdwaW8iLCAuZGF0YSA9IG1wYzUxMnhfaXJxX3NldF90eXBlLCB9LAorCXt9Cit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgbXBjOHh4eF9hZGRfY29udHJvbGxlcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewogCXN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCAqbXBjOHh4eF9nYzsKIAlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYzsKIAlzdHJ1Y3QgZ3Bpb19jaGlwICpnYzsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICppZDsKIAl1bnNpZ25lZCBod2lycTsKIAlpbnQgcmV0OwogCkBAIC0yOTcsNiArMzU4LDEwIEBACiAJaWYgKCFtcGM4eHh4X2djLT5pcnEpCiAJCWdvdG8gc2tpcF9pcnE7CiAKKwlpZCA9IG9mX21hdGNoX25vZGUobXBjOHh4eF9ncGlvX2lkcywgbnApOworCWlmIChpZCkKKwkJbXBjOHh4eF9nYy0+b2ZfZGV2X2lkX2RhdGEgPSBpZC0+ZGF0YTsKKwogCW1wYzh4eHhfZ2MtPmlycS0+aG9zdF9kYXRhID0gbXBjOHh4eF9nYzsKIAogCS8qIGFjayBhbmQgbWFzayBhbGwgaXJxcyAqLwpAQCAtMzIxLDEzICszODYsNyBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAKLQlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJmc2wsbXBjODM0OS1ncGlvIikKLQkJbXBjOHh4eF9hZGRfY29udHJvbGxlcihucCk7Ci0KLQlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJmc2wsbXBjODU3Mi1ncGlvIikKLQkJbXBjOHh4eF9hZGRfY29udHJvbGxlcihucCk7Ci0KLQlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJmc2wsbXBjODYxMC1ncGlvIikKKwlmb3JfZWFjaF9tYXRjaGluZ19ub2RlKG5wLCBtcGM4eHh4X2dwaW9faWRzKQogCQltcGM4eHh4X2FkZF9jb250cm9sbGVyKG5wKTsKIAogCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImZzbCxxb3JpcS1ncGlvIikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X2NwbS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfY3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNiODZjYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X2NwbS5jCkBAIC0wLDAgKzEsMzQ2IEBACisvKgorICogUG93ZXJQQyA0eHggQ2xvY2sgYW5kIFBvd2VyIE1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24KKyAqIFZpY3RvciBHYWxsYXJkbyAodmdhbGxhcmRvQGFwbS5jb20pCisgKgorICogQmFzZWQgb24gYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaWRsZS5jOgorICogSmVyb25lIFlvdW5nIDxqeW91bmc1QHVzLmlibS5jb20+CisgKiBDb3B5cmlnaHQgMjAwOCBJQk0gQ29ycC4KKyAqCisgKiBCYXNlZCBvbiBhcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wbWMuYzoKKyAqIEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgorICogQ29weXJpZ2h0IDIwMDkgIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS9kY3IuaD4KKyNpbmNsdWRlIDxhc20vZGNyLW5hdGl2ZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisKKyNkZWZpbmUgQ1BNX0VSCTAKKyNkZWZpbmUgQ1BNX0ZSCTEKKyNkZWZpbmUgQ1BNX1NSCTIKKworI2RlZmluZSBDUE1fSURMRV9XQUlUCTAKKyNkZWZpbmUgQ1BNX0lETEVfRE9aRQkxCisKK3N0cnVjdCBjcG0geworCWRjcl9ob3N0X3QJZGNyX2hvc3Q7CisJdW5zaWduZWQgaW50CWRjcl9vZmZzZXRbM107CisJdW5zaWduZWQgaW50CXBvd2Vyc2F2ZV9vZmY7CisJdW5zaWduZWQgaW50CXVudXNlZDsKKwl1bnNpZ25lZCBpbnQJaWRsZV9kb3plOworCXVuc2lnbmVkIGludAlzdGFuZGJ5OworCXVuc2lnbmVkIGludAlzdXNwZW5kOworfTsKKworc3RhdGljIHN0cnVjdCBjcG0gY3BtOworCitzdHJ1Y3QgY3BtX2lkbGVfbW9kZSB7CisJdW5zaWduZWQgaW50IGVuYWJsZWQ7CisJY29uc3QgY2hhciAgKm5hbWU7Cit9OworCitzdGF0aWMgc3RydWN0IGNwbV9pZGxlX21vZGUgaWRsZV9tb2RlW10gPSB7CisJW0NQTV9JRExFX1dBSVRdID0geyAxLCAid2FpdCIgfSwgLyogZGVmYXVsdCAqLworCVtDUE1fSURMRV9ET1pFXSA9IHsgMCwgImRvemUiIH0sCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGNwbV9zZXQodW5zaWduZWQgaW50IGNwbV9yZWcsIHVuc2lnbmVkIGludCBtYXNrKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCS8qIENQTSBjb250cm9sbGVyIHN1cHBvcnRzIDMgZGlmZmVyZW50IHR5cGVzIG9mIHNsZWVwIGludGVyZmFjZQorCSAqIGtub3duIGFzIGNsYXNzIDEsIDIgYW5kIDMuIEZvciBjbGFzcyAxIHVuaXRzLCB0aGV5IGFyZQorCSAqIHVuY29uZGl0aW9uYWxseSBwdXQgdG8gc2xlZXAgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBDUE0gYml0IGlzCisJICogc2V0LiBGb3IgY2xhc3MgMiBhbmQgMyB1bml0cyB0aGlzIGlzIG5vdCBjYXNlOyBpZiB0aGV5IGNhbiBiZQorCSAqIHB1dCB0byB0byBzbGVlcCwgdGhleSB3aWxsLiBIZXJlIHdlIGRvIG5vdCB2ZXJpZnksIHdlIGp1c3QKKwkgKiBzZXQgdGhlbSBhbmQgZXhwZWN0IHRoZW0gdG8gZXZlbnR1YWxseSBnbyBvZmYgd2hlbiB0aGV5IGNhbi4KKwkgKi8KKwl2YWx1ZSA9IGRjcl9yZWFkKGNwbS5kY3JfaG9zdCwgY3BtLmRjcl9vZmZzZXRbY3BtX3JlZ10pOworCWRjcl93cml0ZShjcG0uZGNyX2hvc3QsIGNwbS5kY3Jfb2Zmc2V0W2NwbV9yZWddLCB2YWx1ZSB8IG1hc2spOworCisJLyogcmV0dXJuIG9sZCBzdGF0ZSwgdG8gcmVzdG9yZSBsYXRlciBpZiBuZWVkZWQgKi8KKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIGNwbV9pZGxlX3dhaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG1zcl9zYXZlOworCisJLyogc2F2ZSBvZmYgaW5pdGlhbCBzdGF0ZSAqLworCW1zcl9zYXZlID0gbWZtc3IoKTsKKwkvKiBzeW5jIHJlcXVpcmVkIHdoZW4gQ1BNMF9FUltDUFVdIGlzIHNldCAqLworCW1iKCk7CisJLyogc2V0IHdhaXQgc3RhdGUgTVNSICovCisJbXRtc3IobXNyX3NhdmV8TVNSX1dFfE1TUl9FRXxNU1JfQ0V8TVNSX0RFKTsKKwlpc3luYygpOworCS8qIHJldHVybiB0byBpbml0aWFsIHN0YXRlICovCisJbXRtc3IobXNyX3NhdmUpOworCWlzeW5jKCk7Cit9CisKK3N0YXRpYyB2b2lkIGNwbV9pZGxlX3NsZWVwKHVuc2lnbmVkIGludCBtYXNrKQoreworCXVuc2lnbmVkIGludCBlcl9zYXZlOworCisJLyogdXBkYXRlIENQTV9FUiBzdGF0ZSAqLworCWVyX3NhdmUgPSBjcG1fc2V0KENQTV9FUiwgbWFzayk7CisKKwkvKiBnbyB0byB3YWl0IHN0YXRlIHNvIHRoYXQgQ1BNMF9FUltDUFVdIGNhbiB0YWtlIGVmZmVjdCAqLworCWNwbV9pZGxlX3dhaXQoKTsKKworCS8qIHJlc3RvcmUgQ1BNX0VSIHN0YXRlICovCisJZGNyX3dyaXRlKGNwbS5kY3JfaG9zdCwgY3BtLmRjcl9vZmZzZXRbQ1BNX0VSXSwgZXJfc2F2ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNwbV9pZGxlX2RvemUodm9pZCkKK3sKKwljcG1faWRsZV9zbGVlcChjcG0uaWRsZV9kb3plKTsKK30KKworc3RhdGljIHZvaWQgY3BtX2lkbGVfY29uZmlnKGludCBtb2RlKQoreworCWludCBpOworCisJaWYgKGlkbGVfbW9kZVttb2RlXS5lbmFibGVkKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpZGxlX21vZGUpOyBpKyspCisJCWlkbGVfbW9kZVtpXS5lbmFibGVkID0gMDsKKworCWlkbGVfbW9kZVttb2RlXS5lbmFibGVkID0gMTsKK30KKworc3RhdGljIHNzaXplX3QgY3BtX2lkbGVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCSAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJY2hhciAqcyA9IGJ1ZjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlkbGVfbW9kZSk7IGkrKykgeworCQlpZiAoaWRsZV9tb2RlW2ldLmVuYWJsZWQpCisJCQlzICs9IHNwcmludGYocywgIlslc10gIiwgaWRsZV9tb2RlW2ldLm5hbWUpOworCQllbHNlCisJCQlzICs9IHNwcmludGYocywgIiVzICIsIGlkbGVfbW9kZVtpXS5uYW1lKTsKKwl9CisKKwkqKHMtMSkgPSAnXG4nOyAvKiBjb252ZXJ0IHRoZSBsYXN0IHNwYWNlIHRvIGEgbmV3bGluZSAqLworCisJcmV0dXJuIHMgLSBidWY7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNwbV9pZGxlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwlpbnQgaTsKKwljaGFyICpwOworCWludCBsZW47CisKKwlwID0gbWVtY2hyKGJ1ZiwgJ1xuJywgbik7CisJbGVuID0gcCA/IHAgLSBidWYgOiBuOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaWRsZV9tb2RlKTsgaSsrKSB7CisJCWlmIChzdHJuY21wKGJ1ZiwgaWRsZV9tb2RlW2ldLm5hbWUsIGxlbikgPT0gMCkgeworCQkJY3BtX2lkbGVfY29uZmlnKGkpOworCQkJcmV0dXJuIG47CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjcG1faWRsZV9hdHRyID0KKwlfX0FUVFIoaWRsZSwgMDY0NCwgY3BtX2lkbGVfc2hvdywgY3BtX2lkbGVfc3RvcmUpOworCitzdGF0aWMgdm9pZCBjcG1faWRsZV9jb25maWdfc3lzZnModm9pZCkKK3sKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzX2RldjsKKwl1bnNpZ25lZCBsb25nIHJldDsKKworCXN5c19kZXYgPSBnZXRfY3B1X3N5c2RldigwKTsKKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZzeXNfZGV2LT5rb2JqLAorCQkJCSZjcG1faWRsZV9hdHRyLmF0dHIpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJjcG06IGZhaWxlZCB0byBjcmVhdGUgaWRsZSBzeXNmcyBlbnRyeVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGNwbV9pZGxlKHZvaWQpCit7CisJaWYgKGlkbGVfbW9kZVtDUE1fSURMRV9ET1pFXS5lbmFibGVkKQorCQljcG1faWRsZV9kb3plKCk7CisJZWxzZQorCQljcG1faWRsZV93YWl0KCk7Cit9CisKK3N0YXRpYyBpbnQgY3BtX3N1c3BlbmRfdmFsaWQoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToKKwkJcmV0dXJuICEhY3BtLnN0YW5kYnk7CisJY2FzZSBQTV9TVVNQRU5EX01FTToKKwkJcmV0dXJuICEhY3BtLnN1c3BlbmQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcG1fc3VzcGVuZF9zdGFuZGJ5KHVuc2lnbmVkIGludCBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgdGNyX3NhdmU7CisKKwkvKiBkaXNhYmxlIGRlY3JlbWVudCBpbnRlcnJ1cHQgKi8KKwl0Y3Jfc2F2ZSA9IG1mc3ByKFNQUk5fVENSKTsKKwltdHNwcihTUFJOX1RDUiwgdGNyX3NhdmUgJiB+VENSX0RJRSk7CisKKwkvKiBnbyB0byBzbGVlcCBzdGF0ZSAqLworCWNwbV9pZGxlX3NsZWVwKG1hc2spOworCisJLyogcmVzdG9yZSBkZWNyZW1lbnQgaW50ZXJydXB0ICovCisJbXRzcHIoU1BSTl9UQ1IsIHRjcl9zYXZlKTsKK30KKworc3RhdGljIGludCBjcG1fc3VzcGVuZF9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCQljcG1fc3VzcGVuZF9zdGFuZGJ5KGNwbS5zdGFuZGJ5KTsKKwkJYnJlYWs7CisJY2FzZSBQTV9TVVNQRU5EX01FTToKKwkJY3BtX3N1c3BlbmRfc3RhbmRieShjcG0uc3VzcGVuZCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGNwbV9zdXNwZW5kX29wcyA9IHsKKwkudmFsaWQJCT0gY3BtX3N1c3BlbmRfdmFsaWQsCisJLmVudGVyCQk9IGNwbV9zdXNwZW5kX2VudGVyLAorfTsKKworc3RhdGljIGludCBjcG1fZ2V0X3VpbnRfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgbGVuOworCWNvbnN0IHVuc2lnbmVkIGludCAqcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgbmFtZSwgJmxlbik7CisKKwlpZiAocHJvcCA9PSBOVUxMIHx8IGxlbiA8IHNpemVvZih1MzIpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAqcHJvcDsKK30KKworc3RhdGljIGludCBfX2luaXQgY3BtX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCWludCBkY3JfYmFzZSwgZGNyX2xlbjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghY3BtLnBvd2Vyc2F2ZV9vZmYpIHsKKwkJY3BtX2lkbGVfY29uZmlnKENQTV9JRExFX1dBSVQpOworCQlwcGNfbWQucG93ZXJfc2F2ZSA9ICZjcG1faWRsZTsKKwl9CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJpYm0sY3BtIik7CisJaWYgKCFucCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlkY3JfYmFzZSA9IGRjcl9yZXNvdXJjZV9zdGFydChucCwgMCk7CisJZGNyX2xlbiA9IGRjcl9yZXNvdXJjZV9sZW4obnAsIDApOworCisJaWYgKGRjcl9iYXNlID09IDAgfHwgZGNyX2xlbiA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3BtOiBjb3VsZCBub3QgcGFyc2UgZGNyIHByb3BlcnR5IGZvciAlc1xuIiwKKwkJICAgICAgIG5wLT5mdWxsX25hbWUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwljcG0uZGNyX2hvc3QgPSBkY3JfbWFwKG5wLCBkY3JfYmFzZSwgZGNyX2xlbik7CisKKwlpZiAoIURDUl9NQVBfT0soY3BtLmRjcl9ob3N0KSkgeworCQlwcmludGsoS0VSTl9FUlIgImNwbTogZmFpbGVkIHRvIG1hcCBkY3IgcHJvcGVydHkgZm9yICVzXG4iLAorCQkgICAgICAgbnAtPmZ1bGxfbmFtZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEFsbCA0eHggU29DcyB3aXRoIGEgQ1BNIGNvbnRyb2xsZXIgaGF2ZSBvbmUgb2YgdHdvCisJICogZGlmZmVyZW50IG9yZGVyIGZvciB0aGUgQ1BNIHJlZ2lzdGVycy4gU29tZSBoYXZlIHRoZQorCSAqIENQTSByZWdpc3RlcnMgaW4gdGhlIGZvbGxvd2luZyBvcmRlciAoRVIsRlIsU1IpLiBUaGUKKwkgKiBvdGhlcnMgaGF2ZSB0aGVtIGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgKFNSLEVSLEZSKS4KKwkgKi8KKworCWlmIChjcG1fZ2V0X3VpbnRfcHJvcGVydHkobnAsICJlci1vZmZzZXQiKSA9PSAwKSB7CisJCWNwbS5kY3Jfb2Zmc2V0W0NQTV9FUl0gPSAwOworCQljcG0uZGNyX29mZnNldFtDUE1fRlJdID0gMTsKKwkJY3BtLmRjcl9vZmZzZXRbQ1BNX1NSXSA9IDI7CisJfSBlbHNlIHsKKwkJY3BtLmRjcl9vZmZzZXRbQ1BNX0VSXSA9IDE7CisJCWNwbS5kY3Jfb2Zmc2V0W0NQTV9GUl0gPSAyOworCQljcG0uZGNyX29mZnNldFtDUE1fU1JdID0gMDsKKwl9CisKKwkvKiBOb3cgbGV0J3Mgc2VlIHdoYXQgSVBzIHRvIHR1cm4gb2ZmIGZvciB0aGUgZm9sbG93aW5nIG1vZGVzICovCisKKwljcG0udW51c2VkID0gY3BtX2dldF91aW50X3Byb3BlcnR5KG5wLCAidW51c2VkLXVuaXRzIik7CisJY3BtLmlkbGVfZG96ZSA9IGNwbV9nZXRfdWludF9wcm9wZXJ0eShucCwgImlkbGUtZG96ZSIpOworCWNwbS5zdGFuZGJ5ID0gY3BtX2dldF91aW50X3Byb3BlcnR5KG5wLCAic3RhbmRieSIpOworCWNwbS5zdXNwZW5kID0gY3BtX2dldF91aW50X3Byb3BlcnR5KG5wLCAic3VzcGVuZCIpOworCisJLyogSWYgc29tZSBJUHMgYXJlIHVudXNlZCBsZXQncyB0dXJuIHRoZW0gb2ZmIG5vdyAqLworCisJaWYgKGNwbS51bnVzZWQpIHsKKwkJY3BtX3NldChDUE1fRVIsIGNwbS51bnVzZWQpOworCQljcG1fc2V0KENQTV9GUiwgY3BtLnVudXNlZCk7CisJfQorCisJLyogTm93IGxldCdzIGV4cG9ydCBpbnRlcmZhY2VzICovCisKKwlpZiAoIWNwbS5wb3dlcnNhdmVfb2ZmICYmIGNwbS5pZGxlX2RvemUpCisJCWNwbV9pZGxlX2NvbmZpZ19zeXNmcygpOworCisJaWYgKGNwbS5zdGFuZGJ5IHx8IGNwbS5zdXNwZW5kKQorCQlzdXNwZW5kX3NldF9vcHMoJmNwbV9zdXNwZW5kX29wcyk7CitvdXQ6CisJaWYgKG5wKQorCQlvZl9ub2RlX3B1dChucCk7CisJcmV0dXJuIHJldDsKK30KKworbGF0ZV9pbml0Y2FsbChjcG1faW5pdCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGNwbV9wb3dlcnNhdmVfb2ZmKGNoYXIgKmFyZykKK3sKKwljcG0ucG93ZXJzYXZlX29mZiA9IDE7CisJcmV0dXJuIDA7Cit9CitfX3NldHVwKCJwb3dlcnNhdmU9b2ZmIiwgY3BtX3Bvd2Vyc2F2ZV9vZmYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi90c2kxMDhfZGV2LmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYwppbmRleCBjMmQ2NzViLi5lZTA1NjgwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYwpAQCAtODQsOCArODQsOCBAQAogCQltZW1zZXQoJnRzaV9ldGhfZGF0YSwgMCwgc2l6ZW9mKHRzaV9ldGhfZGF0YSkpOwogCiAJCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyWzBdKTsKLQkJREJHKCIlczogbmFtZTpzdGFydC0+ZW5kID0gJXM6MHglbHgtPiAweCVseFxuIiwKLQkJCV9fZnVuY19fLHJbMF0ubmFtZSwgclswXS5zdGFydCwgclswXS5lbmQpOworCQlEQkcoIiVzOiBuYW1lOnN0YXJ0LT5lbmQgPSAlczolcFJcbiIsCisJCSAgICBfX2Z1bmNfXywgclswXS5uYW1lLCAmclswXSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIApAQCAtOTMsOCArOTMsOCBAQAogCQlyWzFdLnN0YXJ0ID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogCQlyWzFdLmVuZCA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKIAkJclsxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJROwotCQlEQkcoIiVzOiBuYW1lOnN0YXJ0LT5lbmQgPSAlczoweCVseC0+IDB4JWx4XG4iLAotCQkJX19mdW5jX18sclsxXS5uYW1lLCByWzFdLnN0YXJ0LCByWzFdLmVuZCk7CisJCURCRygiJXM6IG5hbWU6c3RhcnQtPmVuZCA9ICVzOiVwUlxuIiwKKwkJCV9fZnVuY19fLCByWzFdLm5hbWUsICZyWzFdKTsKIAogCQl0c2lfZXRoX2RldiA9CiAJCSAgICBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJ0c2ktZXRoZXJuZXQiLCBpKyssICZyWzBdLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDk4NWQ4MjUuLmJhZGU1MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYworKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTE2NCwyNCArMTY0LDE4IEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0cnVjdCBrdm0gKmt2bV9hcmNoX2NyZWF0ZV92bSh2b2lkKQoraW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtKQogewotCXN0cnVjdCBrdm0gKmt2bTsKIAlpbnQgcmM7CiAJY2hhciBkZWJ1Z19uYW1lWzE2XTsKIAogCXJjID0gczM5MF9lbmFibGVfc2llKCk7CiAJaWYgKHJjKQotCQlnb3RvIG91dF9ub2t2bTsKLQotCXJjID0gLUVOT01FTTsKLQlrdm0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFrdm0pCi0JCWdvdG8gb3V0X25va3ZtOworCQlnb3RvIG91dF9lcnI7CiAKIAlrdm0tPmFyY2guc2NhID0gKHN0cnVjdCBzY2FfYmxvY2sgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICgha3ZtLT5hcmNoLnNjYSkKLQkJZ290byBvdXRfbm9zY2E7CisJCWdvdG8gb3V0X2VycjsKIAogCXNwcmludGYoZGVidWdfbmFtZSwgImt2bS0ldSIsIGN1cnJlbnQtPnBpZCk7CiAKQEAgLTE5NSwxMyArMTg5LDExIEBACiAJZGVidWdfcmVnaXN0ZXJfdmlldyhrdm0tPmFyY2guZGJmLCAmZGVidWdfc3ByaW50Zl92aWV3KTsKIAlWTV9FVkVOVChrdm0sIDMsICIlcyIsICJ2bSBjcmVhdGVkIik7CiAKLQlyZXR1cm4ga3ZtOworCXJldHVybiAwOwogb3V0X25vZGJmOgogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoa3ZtLT5hcmNoLnNjYSkpOwotb3V0X25vc2NhOgotCWtmcmVlKGt2bSk7Ci1vdXRfbm9rdm06Ci0JcmV0dXJuIEVSUl9QVFIocmMpOworb3V0X2VycjoKKwlyZXR1cm4gcmM7CiB9CiAKIHZvaWQga3ZtX2FyY2hfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTI0MCwxMSArMjMyLDggQEAKIHZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJa3ZtX2ZyZWVfdmNwdXMoa3ZtKTsKLQlrdm1fZnJlZV9waHlzbWVtKGt2bSk7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShrdm0tPmFyY2guc2NhKSk7CiAJZGVidWdfdW5yZWdpc3Rlcihrdm0tPmFyY2guZGJmKTsKLQljbGVhbnVwX3NyY3Vfc3RydWN0KCZrdm0tPnNyY3UpOwotCWtmcmVlKGt2bSk7CiB9CiAKIC8qIFNlY3Rpb246IHZjcHUgcmVsYXRlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jCmluZGV4IDQ0OTlhMzcuLmFkYzliNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGhwNngwX3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgaHA2eDBfcG1fb3BzID0gewogCS5lbnRlcgkJPSBocDZ4MF9wbV9lbnRlciwKIAkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCmluZGV4IDUyN2EwY2QuLmI3MTA3NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCkBAIC0zMTgsNiArMzE4LDEwIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGZzaV9hazQ2NDJfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9mc2lfYV9hazQ2NDIiLAorfTsKKwogLyogS0VZU0MgaW4gU29DIChOZWVkcyBTVzMzLTIgc2V0IHRvIE9OKSAqLwogc3RhdGljIHN0cnVjdCBzaF9rZXlzY19pbmZvIGtleXNjX2luZm8gPSB7CiAJLm1vZGUgPSBTSF9LRVlTQ19NT0RFXzEsCkBAIC01OTAsNiArNTk0LDcgQEAKIAkmc2g3NzI0X3VzYjBfaG9zdF9kZXZpY2UsCiAJJnNoNzcyNF91c2IxX2dhZGdldF9kZXZpY2UsCiAJJmZzaV9kZXZpY2UsCisJJmZzaV9hazQ2NDJfZGV2aWNlLAogCSZzZGhpMF9jbjdfZGV2aWNlLAogCSZzZGhpMV9jbjhfZGV2aWNlLAogCSZpcmRhX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9ydGMuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9ydGMuYwppbmRleCAxYjIwMDk5Li5mODNhYzc5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvcnRjLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDAzL3J0Yy5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkJX19yYXdfd3JpdGViKHJlYWxfbWludXRlcyAlIDEwLCBSVENfTUlOMSk7CiAJCV9fcmF3X3dyaXRlYihyZWFsX21pbnV0ZXMgLyAxMCwgUlRDX01JTjEwKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCXByaW50a19vbmNlKEtFUk5fTk9USUNFCiAJCSAgICAgICAic2V0X3J0Y19tbXNzOiBjYW4ndCB1cGRhdGUgZnJvbSAlZCB0byAlZFxuIiwKIAkJICAgICAgIGNtb3NfbWludXRlcywgcmVhbF9taW51dGVzKTsKIAkJcmV0dmFsID0gLTE7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG0uYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jCmluZGV4IGU1NTk2ODcuLmE2Zjk1YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBzaF9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHNoX3BtX29wcyA9IHsKIAkuZW50ZXIgICAgICAgICAgPSBzaF9wbV9lbnRlciwKIAkudmFsaWQgICAgICAgICAgPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g1LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNS5jCmluZGV4IGViNGNjNGUuLmQxYmZmYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2g1LmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDUuYwpAQCAtNTY4LDcgKzU2OCw3IEBACiB9CiAKIC8qCi0gKiBGbHVzaCB0aGUgcmFuZ2UgW3N0YXJ0LGVuZF0gb2Yga2VybmVsIHZpcnR1YWwgYWRkZHJlc3Mgc3BhY2UgZnJvbQorICogRmx1c2ggdGhlIHJhbmdlIFtzdGFydCxlbmRdIG9mIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgZnJvbQogICogdGhlIEktY2FjaGUuICBUaGUgY29ycmVzcG9uZGluZyByYW5nZSBtdXN0IGJlIHB1cmdlZCBmcm9tIHRoZQogICogRC1jYWNoZSBhbHNvIGJlY2F1c2UgdGhlIFNILTUgZG9lc24ndCBoYXZlIGNhY2hlIHNub29waW5nIGJldHdlZW4KICAqIHRoZSBjYWNoZXMuICBUaGUgYWRkcmVzc2VzIHdpbGwgYmUgdmlzaWJsZSB0aHJvdWdoIHRoZSBzdXBlcnBhZ2UKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2NwdS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMKaW5kZXggZTQ0NzkzOC4uMGRjNzE0ZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMKQEAgLTM3NSw1ICszNzUsNSBAQAogCXJldHVybiAwOwogfQogCi1hcmNoX2luaXRjYWxsKGNwdV90eXBlX3Byb2JlKTsKK2Vhcmx5X2luaXRjYWxsKGNwdV90eXBlX3Byb2JlKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY3IuYwppbmRleCBiODc4NzNjLi5hZTk2Y2Y1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY3IuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY3IuYwpAQCAtMTY4LDQgKzE2OCw0IEBACiAJcmV0dXJuIGVycjsKIH0KIAotYXJjaF9pbml0Y2FsbChwY3JfYXJjaF9pbml0KTsKK2Vhcmx5X2luaXRjYWxsKHBjcl9hcmNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHNfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzXzY0LmMKaW5kZXggNDJhZDJiYS4uMWU5NzcwOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHNfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90cmFwc182NC5jCkBAIC02MjIsNyArNjIyLDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIENIQUZTUl9JRVJSX21zZ1tdID0KIAkiSW50ZXJuYWwgcHJvY2Vzc29yIGVycm9yIjsKIHN0YXRpYyBjb25zdCBjaGFyIENIQUZTUl9JU0FQX21zZ1tdID0KLQkiU3lzdGVtIHJlcXVlc3QgcGFyaXR5IGVycm9yIG9uIGluY29taW5nIGFkZHJlc3NzIjsKKwkiU3lzdGVtIHJlcXVlc3QgcGFyaXR5IGVycm9yIG9uIGluY29taW5nIGFkZHJlc3MiOwogc3RhdGljIGNvbnN0IGNoYXIgQ0hBRlNSX1VDVV9tc2dbXSA9CiAJIlVuY29ycmVjdGFibGUgRS1jYWNoZSBFQ0MgZXJyb3IgZm9yIGlmZXRjaC9kYXRhIjsKIHN0YXRpYyBjb25zdCBjaGFyIENIQUZTUl9VQ0NfbXNnW10gPQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnLnVtIGIvYXJjaC91bS9LY29uZmlnLnVtCmluZGV4IDUwZDZhYTIuLmY4ZDFkMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vS2NvbmZpZy51bQorKysgYi9hcmNoL3VtL0tjb25maWcudW0KQEAgLTEzMSw3ICsxMzEsNyBAQAogCiBjb25maWcgSElHSE1FTQogCWJvb2wgIkhpZ2htZW0gc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uICE2NEJJVCAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uICE2NEJJVCAmJiBCUk9LRU4KIAlkZWZhdWx0IG4KIAloZWxwCiAJICBUaGlzIHdhcyB1c2VkIHRvIGFsbG93IFVNTCB0byBydW4gd2l0aCBiaWcgYW1vdW50cyBvZiBtZW1vcnkuCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jIGIvYXJjaC91bS9kcml2ZXJzL2xpbmUuYwppbmRleCAxNjY0Y2NlLi4wNTBlNGRkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKQEAgLTgyMSwxMiArODIxLDEyIEBACiAKIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfd2luY2goc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbGU7CisJc3RydWN0IGxpc3RfaGVhZCAqZWxlLCAqbmV4dDsKIAlzdHJ1Y3Qgd2luY2ggKndpbmNoOwogCiAJc3Bpbl9sb2NrKCZ3aW5jaF9oYW5kbGVyX2xvY2spOwogCi0JbGlzdF9mb3JfZWFjaChlbGUsICZ3aW5jaF9oYW5kbGVycykgeworCWxpc3RfZm9yX2VhY2hfc2FmZShlbGUsIG5leHQsICZ3aW5jaF9oYW5kbGVycykgewogCQl3aW5jaCA9IGxpc3RfZW50cnkoZWxlLCBzdHJ1Y3Qgd2luY2gsIGxpc3QpOwogCQlpZiAod2luY2gtPnR0eSA9PSB0dHkpIHsKIAkJCWZyZWVfd2luY2god2luY2gsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL21tYXBwZXJfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL21tYXBwZXJfa2Vybi5jCmluZGV4IDg1MDFlN2QuLjdlMDYxOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9tbWFwcGVyX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbW1hcHBlcl9rZXJuLmMKQEAgLTM3LDEzICszNyw3IEBACiAJaWYgKCpwcG9zID4gbW1hcHBlcl9zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjb3VudCA+IG1tYXBwZXJfc2l6ZSAtICpwcG9zKQotCQljb3VudCA9IG1tYXBwZXJfc2l6ZSAtICpwcG9zOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ2X2J1ZlsqcHBvc10sIGJ1ZiwgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiBjb3VudDsKKwlyZXR1cm4gc2ltcGxlX3dyaXRlX3RvX2J1ZmZlcih2X2J1ZiwgbW1hcHBlcl9zaXplLCBwcG9zLCBidWYsIGNvdW50KTsKIH0KIAogc3RhdGljIGxvbmcgbW1hcHBlcl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCkBAIC0xMzcsMyArMTMxLDQgQEAKIAogTU9EVUxFX0FVVEhPUigiR3JlZyBMb25ub24gPGdsb25ub25AcmlkZ2VydW4uY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEU1BMaW51eCBzaW11bGF0b3IgbW1hcHBlciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGI2ZmNjYjAuLjM2ZWQyZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtNTEsNiArNTEsNyBAQAogCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEKKwlzZWxlY3QgSEFWRV9LRVJORUxfWFoKIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpPCiAJc2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVAogCXNlbGVjdCBIQVZFX01JWEVEX0JSRUFLUE9JTlRTX1JFR1MKQEAgLTY1LDYgKzY2LDcgQEAKIAlzZWxlY3QgSEFWRV9TUEFSU0VfSVJRCiAJc2VsZWN0IEdFTkVSSUNfSVJRX1BST0JFCiAJc2VsZWN0IEdFTkVSSUNfUEVORElOR19JUlEgaWYgU01QCisJc2VsZWN0IFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlmIFNNUAogCiBjb25maWcgSU5TVFJVQ1RJT05fREVDT0RFUgogCWRlZl9ib29sIChLUFJPQkVTIHx8IFBFUkZfRVZFTlRTKQpAQCAtMjAzLDEwICsyMDUsNiBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBETUFSICYmIEFDUEkKIAotY29uZmlnIFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTCi0JZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gU01QCi0KIGNvbmZpZyBYODZfMzJfU01QCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gWDg2XzMyICYmIFNNUApAQCAtMjA3OCwxMSArMjA3NiwxNyBAQAogCWJvb2wgIlN1cHBvcnQgZm9yIE9MUEMncyBPcGVuIEZpcm13YXJlIgogCWRlcGVuZHMgb24gIVg4Nl82NCAmJiAhWDg2X1BBRQogCWRlZmF1bHQgbgorCXNlbGVjdCBPRgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIE9wZW4gRmlybXdhcmUKIAkgIHRoYXQgaXMgdXNlZCBvbiB0aGUgT0xQQyBYTy0xIENoaWxkcmVuJ3MgTWFjaGluZS4KIAkgIElmIHVuc3VyZSwgc2F5IE4gaGVyZS4KIAorY29uZmlnIE9MUENfT1BFTkZJUk1XQVJFX0RUCisJYm9vbAorCWRlZmF1bHQgeSBpZiBPTFBDX09QRU5GSVJNV0FSRSAmJiBQUk9DX0RFVklDRVRSRUUKKwlzZWxlY3QgT0ZfUFJPTVRSRUUKKwogZW5kaWYgIyBYODZfMzIKIAogY29uZmlnIEFNRF9OQgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDBjMjI5NTUuLjA5NjY0ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAjIGNyZWF0ZSBhIGNvbXByZXNzZWQgdm1saW51eCBpbWFnZSBmcm9tIHRoZSBvcmlnaW5hbCB2bWxpbnV4CiAjCiAKLXRhcmdldHMgOj0gdm1saW51eC5sZHMgdm1saW51eCB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYSB2bWxpbnV4LmJpbi5sem8gaGVhZF8kKEJJVFMpLm8gbWlzYy5vIHN0cmluZy5vIGNtZGxpbmUubyBlYXJseV9zZXJpYWxfY29uc29sZS5vIHBpZ2d5Lm8KK3RhcmdldHMgOj0gdm1saW51eC5sZHMgdm1saW51eCB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYSB2bWxpbnV4LmJpbi54eiB2bWxpbnV4LmJpbi5sem8gaGVhZF8kKEJJVFMpLm8gbWlzYy5vIHN0cmluZy5vIGNtZGxpbmUubyBlYXJseV9zZXJpYWxfY29uc29sZS5vIHBpZ2d5Lm8KIAogS0JVSUxEX0NGTEFHUyA6PSAtbSQoQklUUykgLURfX0tFUk5FTF9fICQoTElOVVhfSU5DTFVERSkgLU8yCiBLQlVJTERfQ0ZMQUdTICs9IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mUElDCkBAIC00OSwxMiArNDksMTUgQEAKIAkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKICQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKHZtbGludXguYmluLmFsbC15KSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCiskKG9iaikvdm1saW51eC5iaW4ueHo6ICQodm1saW51eC5iaW4uYWxsLXkpIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQseHprZXJuKQogJChvYmopL3ZtbGludXguYmluLmx6bzogJCh2bWxpbnV4LmJpbi5hbGwteSkgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsem8pCiAKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfR1pJUCkJOj0gZ3oKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfQlpJUDIpCTo9IGJ6Mgogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWk1BKQk6PSBsem1hCitzdWZmaXgtJChDT05GSUdfS0VSTkVMX1haKQk6PSB4egogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWk8pIAk6PSBsem8KIAogcXVpZXRfY21kX21rcGlnZ3kgPSBNS1BJR0dZICRACmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCAzMjVjMDUyLi4zYTE5ZDA0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTEzOSw2ICsxMzksMTAgQEAKICNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bmx6bWEuYyIKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0tFUk5FTF9YWgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VueHouYyIKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0tFUk5FTF9MWk8KICNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bmx6by5jIgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWtwaWdneS5jIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21rcGlnZ3kuYwppbmRleCA1YzIyODEyLi42NDZhYTc4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWtwaWdneS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9ta3BpZ2d5LmMKQEAgLTc0LDcgKzc0LDcgQEAKIAogCW9mZnMgPSAob2xlbiA+IGlsZW4pID8gb2xlbiAtIGlsZW4gOiAwOwogCW9mZnMgKz0gb2xlbiA+PiAxMjsJLyogQWRkIDggYnl0ZXMgZm9yIGVhY2ggMzJLIGJsb2NrICovCi0Jb2ZmcyArPSAzMioxMDI0ICsgMTg7CS8qIEFkZCAzMksgKyAxOCBieXRlcyBzbGFjayAqLworCW9mZnMgKz0gNjQqMTAyNCArIDEyODsJLyogQWRkIDY0SyArIDEyOCBieXRlcyBzbGFjayAqLwogCW9mZnMgPSAob2Zmcys0MDk1KSAmIH40MDk1OyAvKiBSb3VuZCB0byBhIDRLIGJvdW5kYXJ5ICovCiAKIAlwcmludGYoIi5zZWN0aW9uIFwiLnJvZGF0YS4uY29tcHJlc3NlZFwiLFwiYVwiLEBwcm9nYml0c1xuIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfYXNtLlMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfYXNtLlMKaW5kZXggZmYxNjc1Ni4uOGZlMmE0OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2FzbS5TCisrKyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9hc20uUwpAQCAtOSw2ICs5LDIwIEBACiAgKiAgICAgICAgICAgIFZpbm9kaCBHb3BhbCA8dmlub2RoLmdvcGFsQGludGVsLmNvbT4KICAqICAgICAgICAgICAgS2FocmFtYW4gQWtkZW1pcgogICoKKyAqIEFkZGVkIFJGQzQxMDYgQUVTLUdDTSBzdXBwb3J0IGZvciAxMjgtYml0IGtleXMgdW5kZXIgdGhlIEFFQUQKKyAqIGludGVyZmFjZSBmb3IgNjQtYml0IGtlcm5lbHMuCisgKiAgICBBdXRob3JzOiBFcmRpbmMgT3p0dXJrIChlcmRpbmMub3p0dXJrQGludGVsLmNvbSkKKyAqICAgICAgICAgICAgIEFpZGFuIE8nTWFob255IChhaWRhbi5vLm1haG9ueUBpbnRlbC5jb20pCisgKiAgICAgICAgICAgICBBZHJpYW4gSG9iYW4gPGFkcmlhbi5ob2JhbkBpbnRlbC5jb20+CisgKiAgICAgICAgICAgICBKYW1lcyBHdWlsZm9yZCAoamFtZXMuZ3VpbGZvcmRAaW50ZWwuY29tKQorICogICAgICAgICAgICAgR2FicmllbGUgUGFvbG9uaSA8Z2FicmllbGUucGFvbG9uaUBpbnRlbC5jb20+CisgKiAgICAgICAgICAgICBUYWRldXN6IFN0cnVrICh0YWRldXN6LnN0cnVrQGludGVsLmNvbSkKKyAqICAgICAgICAgICAgIFdhamRpIEZlZ2hhbGkgKHdhamRpLmsuZmVnaGFsaUBpbnRlbC5jb20pCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTAsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFBvcnRlZCB4ODZfNjQgdmVyc2lvbiB0byB4ODY6CisgKiAgICBBdXRob3I6IE1hdGhpYXMgS3JhdXNlIDxtaW5pcGxpQGdvb2dsZW1haWwuY29tPgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTE4LDggKzMyLDYyIEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9pbnN0Lmg+CiAKKyNpZmRlZiBfX3g4Nl82NF9fCisuZGF0YQorUE9MWTogICAub2N0YSAweEMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitUV09PTkU6IC5vY3RhIDB4MDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKKworIyBvcmRlciBvZiB0aGVzZSBjb25zdGFudHMgc2hvdWxkIG5vdCBjaGFuZ2UuCisjIG1vcmUgc3BlY2lmaWNhbGx5LCBBTExfRiBzaG91bGQgZm9sbG93IFNISUZUX01BU0ssCisjIGFuZCBaRVJPIHNob3VsZCBmb2xsb3cgQUxMX0YKKworU0hVRl9NQVNLOiAgLm9jdGEgMHgwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRgorTUFTSzE6ICAgICAgLm9jdGEgMHgwMDAwMDAwMDAwMDAwMDAwZmZmZmZmZmZmZmZmZmZmZgorTUFTSzI6ICAgICAgLm9jdGEgMHhmZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMAorU0hJRlRfTUFTSzogLm9jdGEgMHgwZjBlMGQwYzBiMGEwOTA4MDcwNjA1MDQwMzAyMDEwMAorQUxMX0Y6ICAgICAgLm9jdGEgMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgorWkVSTzogICAgICAgLm9jdGEgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorT05FOiAgICAgICAgLm9jdGEgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorRl9NSU5fTUFTSzogLm9jdGEgMHhmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwCitkZWM6ICAgICAgICAub2N0YSAweDEKK2VuYzogICAgICAgIC5vY3RhIDB4MgorCisKIC50ZXh0CiAKKworI2RlZmluZQlTVEFDS19PRkZTRVQgICAgOCozCisjZGVmaW5lCUhhc2hLZXkJCTE2KjAJLy8gc3RvcmUgSGFzaEtleSA8PDEgbW9kIHBvbHkgaGVyZQorI2RlZmluZQlIYXNoS2V5XzIJMTYqMQkvLyBzdG9yZSBIYXNoS2V5XjIgPDwxIG1vZCBwb2x5IGhlcmUKKyNkZWZpbmUJSGFzaEtleV8zCTE2KjIJLy8gc3RvcmUgSGFzaEtleV4zIDw8MSBtb2QgcG9seSBoZXJlCisjZGVmaW5lCUhhc2hLZXlfNAkxNiozCS8vIHN0b3JlIEhhc2hLZXleNCA8PDEgbW9kIHBvbHkgaGVyZQorI2RlZmluZQlIYXNoS2V5X2sJMTYqNAkvLyBzdG9yZSBYT1Igb2YgSGlnaCA2NCBiaXRzIGFuZCBMb3cgNjQKKwkJCQkvLyBiaXRzIG9mICBIYXNoS2V5IDw8MSBtb2QgcG9seSBoZXJlCisJCQkJLy8oZm9yIEthcmF0c3ViYSBwdXJwb3NlcykKKyNkZWZpbmUJSGFzaEtleV8yX2sJMTYqNQkvLyBzdG9yZSBYT1Igb2YgSGlnaCA2NCBiaXRzIGFuZCBMb3cgNjQKKwkJCQkvLyBiaXRzIG9mICBIYXNoS2V5XjIgPDwxIG1vZCBwb2x5IGhlcmUKKwkJCQkvLyAoZm9yIEthcmF0c3ViYSBwdXJwb3NlcykKKyNkZWZpbmUJSGFzaEtleV8zX2sJMTYqNgkvLyBzdG9yZSBYT1Igb2YgSGlnaCA2NCBiaXRzIGFuZCBMb3cgNjQKKwkJCQkvLyBiaXRzIG9mICBIYXNoS2V5XjMgPDwxIG1vZCBwb2x5IGhlcmUKKwkJCQkvLyAoZm9yIEthcmF0c3ViYSBwdXJwb3NlcykKKyNkZWZpbmUJSGFzaEtleV80X2sJMTYqNwkvLyBzdG9yZSBYT1Igb2YgSGlnaCA2NCBiaXRzIGFuZCBMb3cgNjQKKwkJCQkvLyBiaXRzIG9mICBIYXNoS2V5XjQgPDwxIG1vZCBwb2x5IGhlcmUKKwkJCQkvLyAoZm9yIEthcmF0c3ViYSBwdXJwb3NlcykKKyNkZWZpbmUJVkFSSUFCTEVfT0ZGU0VUCTE2KjgKKworI2RlZmluZSBhcmcxIHJkaQorI2RlZmluZSBhcmcyIHJzaQorI2RlZmluZSBhcmczIHJkeAorI2RlZmluZSBhcmc0IHJjeAorI2RlZmluZSBhcmc1IHI4CisjZGVmaW5lIGFyZzYgcjkKKyNkZWZpbmUgYXJnNyBTVEFDS19PRkZTRVQrOCglcjE0KQorI2RlZmluZSBhcmc4IFNUQUNLX09GRlNFVCsxNiglcjE0KQorI2RlZmluZSBhcmc5IFNUQUNLX09GRlNFVCsyNCglcjE0KQorI2RlZmluZSBhcmcxMCBTVEFDS19PRkZTRVQrMzIoJXIxNCkKKyNlbmRpZgorCisKICNkZWZpbmUgU1RBVEUxCSV4bW0wCiAjZGVmaW5lIFNUQVRFMgkleG1tNAogI2RlZmluZSBTVEFURTMJJXhtbTUKQEAgLTMyLDEyICsxMDAsMTYgQEAKICNkZWZpbmUgSU4JSU4xCiAjZGVmaW5lIEtFWQkleG1tMgogI2RlZmluZSBJVgkleG1tMworCiAjZGVmaW5lIEJTV0FQX01BU0sgJXhtbTEwCiAjZGVmaW5lIENUUgkleG1tMTEKICNkZWZpbmUgSU5DCSV4bW0xMgogCisjaWZkZWYgX194ODZfNjRfXworI2RlZmluZSBBUkVHCSVyYXgKICNkZWZpbmUgS0VZUAklcmRpCiAjZGVmaW5lIE9VVFAJJXJzaQorI2RlZmluZSBVS0VZUAlPVVRQCiAjZGVmaW5lIElOUAklcmR4CiAjZGVmaW5lIExFTgklcmN4CiAjZGVmaW5lIElWUAklcjgKQEAgLTQ2LDYgKzExOCwxNTg4IEBACiAjZGVmaW5lIFRLRVlQCVQxCiAjZGVmaW5lIFQyCSVyMTEKICNkZWZpbmUgVENUUl9MT1cgVDIKKyNlbHNlCisjZGVmaW5lIEFSRUcJJWVheAorI2RlZmluZSBLRVlQCSVlZGkKKyNkZWZpbmUgT1VUUAlBUkVHCisjZGVmaW5lIFVLRVlQCU9VVFAKKyNkZWZpbmUgSU5QCSVlZHgKKyNkZWZpbmUgTEVOCSVlc2kKKyNkZWZpbmUgSVZQCSVlYnAKKyNkZWZpbmUgS0xFTgklZWJ4CisjZGVmaW5lIFQxCSVlY3gKKyNkZWZpbmUgVEtFWVAJVDEKKyNlbmRpZgorCisKKyNpZmRlZiBfX3g4Nl82NF9fCisvKiBHSEFTSF9NVUwgTUFDUk8gdG8gaW1wbGVtZW50OiBEYXRhKkhhc2hLZXkgbW9kICgxMjgsMTI3LDEyNiwxMjEsMCkKKyoKKyoKKyogSW5wdXQ6IEEgYW5kIEIgKDEyOC1iaXRzIGVhY2gsIGJpdC1yZWZsZWN0ZWQpCisqIE91dHB1dDogQyA9IEEqQip4IG1vZCBwb2x5LCAoaS5lLiA+PjEgKQorKiBUbyBjb21wdXRlIEdIID0gR0gqSGFzaEtleSBtb2QgcG9seSwgZ2l2ZSBISyA9IEhhc2hLZXk8PDEgbW9kIHBvbHkgYXMgaW5wdXQKKyogR0ggPSBHSCAqIEhLICogeCBtb2QgcG9seSB3aGljaCBpcyBlcXVpdmFsZW50IHRvIEdIKkhhc2hLZXkgbW9kIHBvbHkuCisqCisqLworLm1hY3JvIEdIQVNIX01VTCBHSCBISyBUTVAxIFRNUDIgVE1QMyBUTVA0IFRNUDUKKwltb3ZkcWEJICBcR0gsIFxUTVAxCisJcHNodWZkCSAgJDc4LCBcR0gsIFxUTVAyCisJcHNodWZkCSAgJDc4LCBcSEssIFxUTVAzCisJcHhvcgkgIFxHSCwgXFRNUDIgICAgICAgICAgICAjIFRNUDIgPSBhMSthMAorCXB4b3IJICBcSEssIFxUTVAzICAgICAgICAgICAgIyBUTVAzID0gYjErYjAKKwlQQ0xNVUxRRFEgMHgxMSwgXEhLLCBcVE1QMSAgICAgIyBUTVAxID0gYTEqYjEKKwlQQ0xNVUxRRFEgMHgwMCwgXEhLLCBcR0ggICAgICAgIyBHSCA9IGEwKmIwCisJUENMTVVMUURRIDB4MDAsIFxUTVAzLCBcVE1QMiAgICMgVE1QMiA9IChhMCthMSkqKGIxK2IwKQorCXB4b3IJICBcR0gsIFxUTVAyCisJcHhvcgkgIFxUTVAxLCBcVE1QMiAgICAgICAgICAjIFRNUDIgPSAoYTAqYjApKyhhMSpiMCkKKwltb3ZkcWEJICBcVE1QMiwgXFRNUDMKKwlwc2xsZHEJICAkOCwgXFRNUDMgICAgICAgICAgICAgIyBsZWZ0IHNoaWZ0IFRNUDMgMiBEV3MKKwlwc3JsZHEJICAkOCwgXFRNUDIgICAgICAgICAgICAgIyByaWdodCBzaGlmdCBUTVAyIDIgRFdzCisJcHhvcgkgIFxUTVAzLCBcR0gKKwlweG9yCSAgXFRNUDIsIFxUTVAxICAgICAgICAgICMgVE1QMjpHSCBob2xkcyB0aGUgcmVzdWx0IG9mIEdIKkhLCisKKyAgICAgICAgIyBmaXJzdCBwaGFzZSBvZiB0aGUgcmVkdWN0aW9uCisKKwltb3ZkcWEgICAgXEdILCBcVE1QMgorCW1vdmRxYSAgICBcR0gsIFxUTVAzCisJbW92ZHFhICAgIFxHSCwgXFRNUDQgICAgICAgICAgICAjIGNvcHkgR0ggaW50byBUTVAyLFRNUDMgYW5kIFRNUDQKKwkJCQkJIyBpbiBpbiBvcmRlciB0byBwZXJmb3JtCisJCQkJCSMgaW5kZXBlbmRlbnQgc2hpZnRzCisJcHNsbGQgICAgICQzMSwgXFRNUDIgICAgICAgICAgICAjIHBhY2tlZCByaWdodCBzaGlmdCA8PDMxCisJcHNsbGQgICAgICQzMCwgXFRNUDMgICAgICAgICAgICAjIHBhY2tlZCByaWdodCBzaGlmdCA8PDMwCisJcHNsbGQgICAgICQyNSwgXFRNUDQgICAgICAgICAgICAjIHBhY2tlZCByaWdodCBzaGlmdCA8PDI1CisJcHhvciAgICAgIFxUTVAzLCBcVE1QMiAgICAgICAgICAjIHhvciB0aGUgc2hpZnRlZCB2ZXJzaW9ucworCXB4b3IgICAgICBcVE1QNCwgXFRNUDIKKwltb3ZkcWEgICAgXFRNUDIsIFxUTVA1CisJcHNybGRxICAgICQ0LCBcVE1QNSAgICAgICAgICAgICAjIHJpZ2h0IHNoaWZ0IFRNUDUgMSBEVworCXBzbGxkcSAgICAkMTIsIFxUTVAyICAgICAgICAgICAgIyBsZWZ0IHNoaWZ0IFRNUDIgMyBEV3MKKwlweG9yICAgICAgXFRNUDIsIFxHSAorCisgICAgICAgICMgc2Vjb25kIHBoYXNlIG9mIHRoZSByZWR1Y3Rpb24KKworCW1vdmRxYSAgICBcR0gsXFRNUDIgICAgICAgICAgICAgIyBjb3B5IEdIIGludG8gVE1QMixUTVAzIGFuZCBUTVA0CisJCQkJCSMgaW4gaW4gb3JkZXIgdG8gcGVyZm9ybQorCQkJCQkjIGluZGVwZW5kZW50IHNoaWZ0cworCW1vdmRxYSAgICBcR0gsXFRNUDMKKwltb3ZkcWEgICAgXEdILFxUTVA0CisJcHNybGQgICAgICQxLFxUTVAyICAgICAgICAgICAgICAjIHBhY2tlZCBsZWZ0IHNoaWZ0ID4+MQorCXBzcmxkICAgICAkMixcVE1QMyAgICAgICAgICAgICAgIyBwYWNrZWQgbGVmdCBzaGlmdCA+PjIKKwlwc3JsZCAgICAgJDcsXFRNUDQgICAgICAgICAgICAgICMgcGFja2VkIGxlZnQgc2hpZnQgPj43CisJcHhvciAgICAgIFxUTVAzLFxUTVAyCQkjIHhvciB0aGUgc2hpZnRlZCB2ZXJzaW9ucworCXB4b3IgICAgICBcVE1QNCxcVE1QMgorCXB4b3IgICAgICBcVE1QNSwgXFRNUDIKKwlweG9yICAgICAgXFRNUDIsIFxHSAorCXB4b3IgICAgICBcVE1QMSwgXEdIICAgICAgICAgICAgIyByZXN1bHQgaXMgaW4gVE1QMQorLmVuZG0KKworLyoKKyogaWYgYSA9IG51bWJlciBvZiB0b3RhbCBwbGFpbnRleHQgYnl0ZXMKKyogYiA9IGZsb29yKGEvMTYpCisqIG51bV9pbml0aWFsX2Jsb2NrcyA9IGIgbW9kIDQKKyogZW5jcnlwdCB0aGUgaW5pdGlhbCBudW1faW5pdGlhbF9ibG9ja3MgYmxvY2tzIGFuZCBhcHBseSBnaGFzaCBvbgorKiB0aGUgY2lwaGVydGV4dAorKiAlcjEwLCAlcjExLCAlcjEyLCAlcmF4LCAleG1tNSwgJXhtbTYsICV4bW03LCAleG1tOCwgJXhtbTkgcmVnaXN0ZXJzCisqIGFyZSBjbG9iYmVyZWQKKyogYXJnMSwgJWFyZzIsICVhcmczLCAlcjE0IGFyZSB1c2VkIGFzIGEgcG9pbnRlciBvbmx5LCBub3QgbW9kaWZpZWQKKyovCisKKworLm1hY3JvIElOSVRJQUxfQkxPQ0tTX0RFQyBudW1faW5pdGlhbF9ibG9ja3MgVE1QMSBUTVAyIFRNUDMgVE1QNCBUTVA1IFhNTTAgWE1NMSBcCitYTU0yIFhNTTMgWE1NNCBYTU1Ec3QgVE1QNiBUTVA3IGkgaV9zZXEgb3BlcmF0aW9uCisJbW92CSAgIGFyZzcsICVyMTAgICAgICAgICAgICMgJXIxMCA9IEFBRAorCW1vdgkgICBhcmc4LCAlcjEyICAgICAgICAgICAjICVyMTIgPSBhYWRMZW4KKwltb3YJICAgJXIxMiwgJXIxMQorCXB4b3IJICAgJXhtbVxpLCAleG1tXGkKK19nZXRfQUFEX2xvb3BcbnVtX2luaXRpYWxfYmxvY2tzXG9wZXJhdGlvbjoKKwltb3ZkCSAgICglcjEwKSwgXFRNUDEKKwlwc2xsZHEJICAgJDEyLCBcVE1QMQorCXBzcmxkcQkgICAkNCwgJXhtbVxpCisJcHhvcgkgICBcVE1QMSwgJXhtbVxpCisJYWRkCSAgICQ0LCAlcjEwCisJc3ViCSAgICQ0LCAlcjEyCisJam5lCSAgIF9nZXRfQUFEX2xvb3BcbnVtX2luaXRpYWxfYmxvY2tzXG9wZXJhdGlvbgorCWNtcAkgICAkMTYsICVyMTEKKwlqZQkgICBfZ2V0X0FBRF9sb29wMl9kb25lXG51bV9pbml0aWFsX2Jsb2Nrc1xvcGVyYXRpb24KKwltb3YJICAgJDE2LCAlcjEyCitfZ2V0X0FBRF9sb29wMlxudW1faW5pdGlhbF9ibG9ja3Ncb3BlcmF0aW9uOgorCXBzcmxkcQkgICAkNCwgJXhtbVxpCisJc3ViCSAgICQ0LCAlcjEyCisJY21wCSAgICVyMTEsICVyMTIKKwlqbmUJICAgX2dldF9BQURfbG9vcDJcbnVtX2luaXRpYWxfYmxvY2tzXG9wZXJhdGlvbgorX2dldF9BQURfbG9vcDJfZG9uZVxudW1faW5pdGlhbF9ibG9ja3Ncb3BlcmF0aW9uOgorICAgICAgICBtb3ZkcWEgICAgIFNIVUZfTUFTSyglcmlwKSwgJXhtbTE0CisJUFNIVUZCX1hNTSAgICV4bW0xNCwgJXhtbVxpICMgYnl0ZS1yZWZsZWN0IHRoZSBBQUQgZGF0YQorCisJeG9yCSAgICVyMTEsICVyMTEgIyBpbml0aWFsaXNlIHRoZSBkYXRhIHBvaW50ZXIgb2Zmc2V0IGFzIHplcm8KKworICAgICAgICAjIHN0YXJ0IEFFUyBmb3IgbnVtX2luaXRpYWxfYmxvY2tzIGJsb2NrcworCisJbW92CSAgICVhcmc1LCAlcmF4ICAgICAgICAgICAgICAgICAgICAgICMgJXJheCA9ICpZMAorCW1vdmRxdQkgICAoJXJheCksIFxYTU0wICAgICAgICAgICAgICAgICAgICAjIFhNTTAgPSBZMAorICAgICAgICBtb3ZkcWEgICAgIFNIVUZfTUFTSyglcmlwKSwgJXhtbTE0CisJUFNIVUZCX1hNTSAgICV4bW0xNCwgXFhNTTAKKworLmlmIChcaSA9PSA1KSB8fCAoXGkgPT0gNikgfHwgKFxpID09IDcpCisuaXJwYyBpbmRleCwgXGlfc2VxCisJcGFkZGQJICAgT05FKCVyaXApLCBcWE1NMCAgICAgICAgICAgICAgICAgIyBJTkNSIFkwCisJbW92ZHFhCSAgIFxYTU0wLCAleG1tXGluZGV4CisgICAgICAgIG1vdmRxYSAgICAgU0hVRl9NQVNLKCVyaXApLCAleG1tMTQKKwlQU0hVRkJfWE1NICAgJXhtbTE0LCAleG1tXGluZGV4ICAgICAgIyBwZXJmb3JtIGEgMTYgYnl0ZSBzd2FwCisKKy5lbmRyCisuaXJwYyBpbmRleCwgXGlfc2VxCisJcHhvcgkgICAxNiowKCVhcmcxKSwgJXhtbVxpbmRleAorLmVuZHIKKy5pcnBjIGluZGV4LCBcaV9zZXEKKwltb3ZhcHMgMHgxMCglcmRpKSwgXFRNUDEKKwlBRVNFTkMgICAgIFxUTVAxLCAleG1tXGluZGV4ICAgICAgICAgICMgUm91bmQgMQorLmVuZHIKKy5pcnBjIGluZGV4LCBcaV9zZXEKKwltb3ZhcHMgMHgyMCglYXJnMSksIFxUTVAxCisJQUVTRU5DICAgICBcVE1QMSwgJXhtbVxpbmRleCAgICAgICAgICAjIFJvdW5kIDIKKy5lbmRyCisuaXJwYyBpbmRleCwgXGlfc2VxCisJbW92YXBzIDB4MzAoJWFyZzEpLCBcVE1QMQorCUFFU0VOQyAgICAgXFRNUDEsICV4bW1caW5kZXggICAgICAgICAgIyBSb3VuZCAyCisuZW5kcgorLmlycGMgaW5kZXgsIFxpX3NlcQorCW1vdmFwcyAweDQwKCVhcmcxKSwgXFRNUDEKKwlBRVNFTkMgICAgIFxUTVAxLCAleG1tXGluZGV4ICAgICAgICAgICMgUm91bmQgMgorLmVuZHIKKy5pcnBjIGluZGV4LCBcaV9zZXEKKwltb3ZhcHMgMHg1MCglYXJnMSksIFxUTVAxCisJQUVTRU5DICAgICBcVE1QMSwgJXhtbVxpbmRleCAgICAgICAgICAjIFJvdW5kIDIKKy5lbmRyCisuaXJwYyBpbmRleCwgXGlfc2VxCisJbW92YXBzIDB4NjAoJWFyZzEpLCBcVE1QMQorCUFFU0VOQyAgICAgXFRNUDEsICV4bW1caW5kZXggICAgICAgICAgIyBSb3VuZCAyCisuZW5kcgorLmlycGMgaW5kZXgsIFxpX3NlcQorCW1vdmFwcyAweDcwKCVhcmcxKSwgXFRNUDEKKwlBRVNFTkMgICAgIFxUTVAxLCAleG1tXGluZGV4ICAgICAgICAgICMgUm91bmQgMgorLmVuZHIKKy5pcnBjIGluZGV4LCBcaV9zZXEKKwltb3ZhcHMgMHg4MCglYXJnMSksIFxUTVAxCisJQUVTRU5DICAgICBcVE1QMSwgJXhtbVxpbmRleCAgICAgICAgICAjIFJvdW5kIDIKKy5lbmRyCisuaXJwYyBpbmRleCwgXGlfc2VxCisJbW92YXBzIDB4OTAoJWFyZzEpLCBcVE1QMQorCUFFU0VOQyAgICAgXFRNUDEsICV4bW1caW5kZXggICAgICAgICAgIyBSb3VuZCAyCisuZW5kcgorLmlycGMgaW5kZXgsIFxpX3NlcQorCW1vdmFwcyAweGEwKCVhcmcxKSwgXFRNUDEKKwlBRVNFTkNMQVNUIFxUTVAxLCAleG1tXGluZGV4ICAgICAgICAgIyBSb3VuZCAxMAorLmVuZHIKKy5pcnBjIGluZGV4LCBcaV9zZXEKKwltb3ZkcXUJICAgKCVhcmczICwgJXIxMSwgMSksIFxUTVAxCisJcHhvcgkgICBcVE1QMSwgJXhtbVxpbmRleAorCW1vdmRxdQkgICAleG1tXGluZGV4LCAoJWFyZzIgLCAlcjExLCAxKQorCSMgd3JpdGUgYmFjayBwbGFpbnRleHQvY2lwaGVydGV4dCBmb3IgbnVtX2luaXRpYWxfYmxvY2tzCisJYWRkCSAgICQxNiwgJXIxMQorCisJbW92ZHFhICAgICBcVE1QMSwgJXhtbVxpbmRleAorICAgICAgICBtb3ZkcWEgICAgIFNIVUZfTUFTSyglcmlwKSwgJXhtbTE0CisJUFNIVUZCX1hNTQkgICAleG1tMTQsICV4bW1caW5kZXgKKworCQkjIHByZXBhcmUgcGxhaW50ZXh0L2NpcGhlcnRleHQgZm9yIEdIQVNIIGNvbXB1dGF0aW9uCisuZW5kcgorLmVuZGlmCisJR0hBU0hfTVVMICAleG1tXGksIFxUTVAzLCBcVE1QMSwgXFRNUDIsIFxUTVA0LCBcVE1QNSwgXFhNTTEKKyAgICAgICAgIyBhcHBseSBHSEFTSCBvbiBudW1faW5pdGlhbF9ibG9ja3MgYmxvY2tzCisKKy5pZiBcaSA9PSA1CisgICAgICAgIHB4b3IgICAgICAgJXhtbTUsICV4bW02CisJR0hBU0hfTVVMICAleG1tNiwgXFRNUDMsIFxUTVAxLCBcVE1QMiwgXFRNUDQsIFxUTVA1LCBcWE1NMQorICAgICAgICBweG9yICAgICAgICV4bW02LCAleG1tNworCUdIQVNIX01VTCAgJXhtbTcsIFxUTVAzLCBcVE1QMSwgXFRNUDIsIFxUTVA0LCBcVE1QNSwgXFhNTTEKKyAgICAgICAgcHhvciAgICAgICAleG1tNywgJXhtbTgKKwlHSEFTSF9NVUwgICV4bW04LCBcVE1QMywgXFRNUDEsIFxUTVAyLCBcVE1QNCwgXFRNUDUsIFxYTU0xCisuZWxzZWlmIFxpID09IDYKKyAgICAgICAgcHhvciAgICAgICAleG1tNiwgJXhtbTcKKwlHSEFTSF9NVUwgICV4bW03LCBcVE1QMywgXFRNUDEsIFxUTVAyLCBcVE1QNCwgXFRNUDUsIFxYTU0xCisgICAgICAgIHB4b3IgICAgICAgJXhtbTcsICV4bW04CisJR0hBU0hfTVVMICAleG1tOCwgXFRNUDMsIFxUTVAxLCBcVE1QMiwgXFRNUDQsIFxUTVA1LCBcWE1NMQorLmVsc2VpZiBcaSA9PSA3CisgICAgICAgIHB4b3IgICAgICAgJXhtbTcsICV4bW04CisJR0hBU0hfTVVMICAleG1tOCwgXFRNUDMsIFxUTVAxLCBcVE1QMiwgXFRNUDQsIFxUTVA1LCBcWE1NMQorLmVuZGlmCisJY21wCSAgICQ2NCwgJXIxMworCWpsCV9pbml0aWFsX2Jsb2Nrc19kb25lXG51bV9pbml0aWFsX2Jsb2Nrc1xvcGVyYXRpb24KKwkjIG5vIG5lZWQgZm9yIHByZWNvbXB1dGVkIHZhbHVlcworLyoKKyoKKyogUHJlY29tcHV0YXRpb25zIGZvciBIYXNoS2V5IHBhcmFsbGVsIHdpdGggZW5jcnlwdGlvbiBvZiBmaXJzdCA0IGJsb2Nrcy4KKyogSGFza2V5X2lfayBob2xkcyBYT1JlZCB2YWx1ZXMgb2YgdGhlIGxvdyBhbmQgaGlnaCBwYXJ0cyBvZiB0aGUgSGFza2V5X2kKKyovCisJcGFkZGQJICAgT05FKCVyaXApLCBcWE1NMCAgICAgICAgICAgICAgIyBJTkNSIFkwCisJbW92ZHFhCSAgIFxYTU0wLCBcWE1NMQorICAgICAgICBtb3ZkcWEgICAgIFNIVUZfTUFTSyglcmlwKSwgJXhtbTE0CisJUFNIVUZCX1hNTSAgJXhtbTE0LCBcWE1NMSAgICAgICAgIyBwZXJmb3JtIGEgMTYgYnl0ZSBzd2FwCisKKwlwYWRkZAkgICBPTkUoJXJpcCksIFxYTU0wICAgICAgICAgICAgICAjIElOQ1IgWTAKKwltb3ZkcWEJICAgXFhNTTAsIFxYTU0yCisgICAgICAgIG1vdmRxYSAgICAgU0hVRl9NQVNLKCVyaXApLCAleG1tMTQKKwlQU0hVRkJfWE1NICAleG1tMTQsIFxYTU0yICAgICAgICAjIHBlcmZvcm0gYSAxNiBieXRlIHN3YXAKKworCXBhZGRkCSAgIE9ORSglcmlwKSwgXFhNTTAgICAgICAgICAgICAgICMgSU5DUiBZMAorCW1vdmRxYQkgICBcWE1NMCwgXFhNTTMKKyAgICAgICAgbW92ZHFhICAgICBTSFVGX01BU0soJXJpcCksICV4bW0xNAorCVBTSFVGQl9YTU0gJXhtbTE0LCBcWE1NMyAgICAgICAgIyBwZXJmb3JtIGEgMTYgYnl0ZSBzd2FwCisKKwlwYWRkZAkgICBPTkUoJXJpcCksIFxYTU0wICAgICAgICAgICAgICAjIElOQ1IgWTAKKwltb3ZkcWEJICAgXFhNTTAsIFxYTU00CisgICAgICAgIG1vdmRxYSAgICAgU0hVRl9NQVNLKCVyaXApLCAleG1tMTQKKwlQU0hVRkJfWE1NICV4bW0xNCwgXFhNTTQgICAgICAgICMgcGVyZm9ybSBhIDE2IGJ5dGUgc3dhcAorCisJcHhvcgkgICAxNiowKCVhcmcxKSwgXFhNTTEKKwlweG9yCSAgIDE2KjAoJWFyZzEpLCBcWE1NMgorCXB4b3IJICAgMTYqMCglYXJnMSksIFxYTU0zCisJcHhvcgkgICAxNiowKCVhcmcxKSwgXFhNTTQKKwltb3ZkcWEJICAgXFRNUDMsIFxUTVA1CisJcHNodWZkCSAgICQ3OCwgXFRNUDMsIFxUTVAxCisJcHhvcgkgICBcVE1QMywgXFRNUDEKKwltb3ZkcWEJICAgXFRNUDEsIEhhc2hLZXlfayglcnNwKQorCUdIQVNIX01VTCAgXFRNUDUsIFxUTVAzLCBcVE1QMSwgXFRNUDIsIFxUTVA0LCBcVE1QNiwgXFRNUDcKKyMgVE1QNSA9IEhhc2hLZXleMjw8MSAobW9kIHBvbHkpCisJbW92ZHFhCSAgIFxUTVA1LCBIYXNoS2V5XzIoJXJzcCkKKyMgSGFzaEtleV8yID0gSGFzaEtleV4yPDwxIChtb2QgcG9seSkKKwlwc2h1ZmQJICAgJDc4LCBcVE1QNSwgXFRNUDEKKwlweG9yCSAgIFxUTVA1LCBcVE1QMQorCW1vdmRxYQkgICBcVE1QMSwgSGFzaEtleV8yX2soJXJzcCkKKy5pcnBjIGluZGV4LCAxMjM0ICMgZG8gNCByb3VuZHMKKwltb3ZhcHMgMHgxMCpcaW5kZXgoJWFyZzEpLCBcVE1QMQorCUFFU0VOQwkgICBcVE1QMSwgXFhNTTEKKwlBRVNFTkMJICAgXFRNUDEsIFxYTU0yCisJQUVTRU5DCSAgIFxUTVAxLCBcWE1NMworCUFFU0VOQwkgICBcVE1QMSwgXFhNTTQKKy5lbmRyCisJR0hBU0hfTVVMICBcVE1QNSwgXFRNUDMsIFxUTVAxLCBcVE1QMiwgXFRNUDQsIFxUTVA2LCBcVE1QNworIyBUTVA1ID0gSGFzaEtleV4zPDwxIChtb2QgcG9seSkKKwltb3ZkcWEJICAgXFRNUDUsIEhhc2hLZXlfMyglcnNwKQorCXBzaHVmZAkgICAkNzgsIFxUTVA1LCBcVE1QMQorCXB4b3IJICAgXFRNUDUsIFxUTVAxCisJbW92ZHFhCSAgIFxUTVAxLCBIYXNoS2V5XzNfayglcnNwKQorLmlycGMgaW5kZXgsIDU2Nzg5ICMgZG8gbmV4dCA1IHJvdW5kcworCW1vdmFwcyAweDEwKlxpbmRleCglYXJnMSksIFxUTVAxCisJQUVTRU5DCSAgIFxUTVAxLCBcWE1NMQorCUFFU0VOQwkgICBcVE1QMSwgXFhNTTIKKwlBRVNFTkMJICAgXFRNUDEsIFxYTU0zCisJQUVTRU5DCSAgIFxUTVAxLCBcWE1NNAorLmVuZHIKKwlHSEFTSF9NVUwgIFxUTVA1LCBcVE1QMywgXFRNUDEsIFxUTVAyLCBcVE1QNCwgXFRNUDYsIFxUTVA3CisjIFRNUDUgPSBIYXNoS2V5XjM8PDEgKG1vZCBwb2x5KQorCW1vdmRxYQkgICBcVE1QNSwgSGFzaEtleV80KCVyc3ApCisJcHNodWZkCSAgICQ3OCwgXFRNUDUsIFxUTVAxCisJcHhvcgkgICBcVE1QNSwgXFRNUDEKKwltb3ZkcWEJICAgXFRNUDEsIEhhc2hLZXlfNF9rKCVyc3ApCisJbW92YXBzIDB4YTAoJWFyZzEpLCBcVE1QMgorCUFFU0VOQ0xBU1QgXFRNUDIsIFxYTU0xCisJQUVTRU5DTEFTVCBcVE1QMiwgXFhNTTIKKwlBRVNFTkNMQVNUIFxUTVAyLCBcWE1NMworCUFFU0VOQ0xBU1QgXFRNUDIsIFxYTU00CisJbW92ZHF1CSAgIDE2KjAoJWFyZzMgLCAlcjExICwgMSksIFxUTVAxCisJcHhvcgkgICBcVE1QMSwgXFhNTTEKKwltb3ZkcXUJICAgXFhNTTEsIDE2KjAoJWFyZzIgLCAlcjExICwgMSkKKwltb3ZkcWEgICAgIFxUTVAxLCBcWE1NMQorCW1vdmRxdQkgICAxNioxKCVhcmczICwgJXIxMSAsIDEpLCBcVE1QMQorCXB4b3IJICAgXFRNUDEsIFxYTU0yCisJbW92ZHF1CSAgIFxYTU0yLCAxNioxKCVhcmcyICwgJXIxMSAsIDEpCisJbW92ZHFhICAgICBcVE1QMSwgXFhNTTIKKwltb3ZkcXUJICAgMTYqMiglYXJnMyAsICVyMTEgLCAxKSwgXFRNUDEKKwlweG9yCSAgIFxUTVAxLCBcWE1NMworCW1vdmRxdQkgICBcWE1NMywgMTYqMiglYXJnMiAsICVyMTEgLCAxKQorCW1vdmRxYSAgICAgXFRNUDEsIFxYTU0zCisJbW92ZHF1CSAgIDE2KjMoJWFyZzMgLCAlcjExICwgMSksIFxUTVAxCisJcHhvcgkgICBcVE1QMSwgXFhNTTQKKwltb3ZkcXUJICAgXFhNTTQsIDE2KjMoJWFyZzIgLCAlcjExICwgMSkKKwltb3ZkcWEgICAgIFxUTVAxLCBcWE1NNAorCWFkZAkgICAkNjQsICVyMTEKKyAgICAgICAgbW92ZHFhICAgICBTSFVGX01BU0soJXJpcCksICV4bW0xNAorCVBTSFVGQl9YTU0gJXhtbTE0LCBcWE1NMSAjIHBlcmZvcm0gYSAxNiBieXRlIHN3YXAKKwlweG9yCSAgIFxYTU1Ec3QsIFxYTU0xCisjIGNvbWJpbmUgR0hBU0hlZCB2YWx1ZSB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGNpcGhlcnRleHQKKyAgICAgICAgbW92ZHFhICAgICBTSFVGX01BU0soJXJpcCksICV4bW0xNAorCVBTSFVGQl9YTU0gJXhtbTE0LCBcWE1NMiAjIHBlcmZvcm0gYSAxNiBieXRlIHN3YXAKKyAgICAgICAgbW92ZHFhICAgICBTSFVGX01BU0soJXJpcCksICV4bW0xNAorCVBTSFVGQl9YTU0gJXhtbTE0LCBcWE1NMyAjIHBlcmZvcm0gYSAxNiBieXRlIHN3YXAKKyAgICAgICAgbW92ZHFhICAgICBTSFVGX01BU0soJXJpcCksICV4bW0xNAorCVBTSFVGQl9YTU0gJXhtbTE0LCBcWE1NNCAjIHBlcmZvcm0gYSAxNiBieXRlIHN3YXAKKworX2luaXRpYWxfYmxvY2tzX2RvbmVcbnVtX2luaXRpYWxfYmxvY2tzXG9wZXJhdGlvbjoKKworLmVuZG0KKworCisvKgorKiBpZiBhID0gbnVtYmVyIG9mIHRvdGFsIHBsYWludGV4dCBieXRlcworKiBiID0gZmxvb3IoYS8xNikKKyogbnVtX2luaXRpYWxfYmxvY2tzID0gYiBtb2QgNAorKiBlbmNyeXB0IHRoZSBpbml0aWFsIG51bV9pbml0aWFsX2Jsb2NrcyBibG9ja3MgYW5kIGFwcGx5IGdoYXNoIG9uCisqIHRoZSBjaXBoZXJ0ZXh0CisqICVyMTAsICVyMTEsICVyMTIsICVyYXgsICV4bW01LCAleG1tNiwgJXhtbTcsICV4bW04LCAleG1tOSByZWdpc3RlcnMKKyogYXJlIGNsb2JiZXJlZAorKiBhcmcxLCAlYXJnMiwgJWFyZzMsICVyMTQgYXJlIHVzZWQgYXMgYSBwb2ludGVyIG9ubHksIG5vdCBtb2RpZmllZAorKi8KKworCisubWFjcm8gSU5JVElBTF9CTE9DS1NfRU5DIG51bV9pbml0aWFsX2Jsb2NrcyBUTVAxIFRNUDIgVE1QMyBUTVA0IFRNUDUgWE1NMCBYTU0xIFwKK1hNTTIgWE1NMyBYTU00IFhNTURzdCBUTVA2IFRNUDcgaSBpX3NlcSBvcGVyYXRpb24KKwltb3YJICAgYXJnNywgJXIxMCAgICAgICAgICAgIyAlcjEwID0gQUFECisJbW92CSAgIGFyZzgsICVyMTIgICAgICAgICAgICMgJXIxMiA9IGFhZExlbgorCW1vdgkgICAlcjEyLCAlcjExCisJcHhvcgkgICAleG1tXGksICV4bW1caQorX2dldF9BQURfbG9vcFxudW1faW5pdGlhbF9ibG9ja3Ncb3BlcmF0aW9uOgorCW1vdmQJICAgKCVyMTApLCBcVE1QMQorCXBzbGxkcQkgICAkMTIsIFxUTVAxCisJcHNybGRxCSAgICQ0LCAleG1tXGkKKwlweG9yCSAgIFxUTVAxLCAleG1tXGkKKwlhZGQJICAgJDQsICVyMTAKKwlzdWIJICAgJDQsICVyMTIKKwlqbmUJICAgX2dldF9BQURfbG9vcFxudW1faW5pdGlhbF9ibG9ja3Ncb3BlcmF0aW9uCisJY21wCSAgICQxNiwgJXIxMQorCWplCSAgIF9nZXRfQUFEX2xvb3AyX2RvbmVcbnVtX2luaXRpYWxfYmxvY2tzXG9wZXJhdGlvbgorCW1vdgkgICAkMTYsICVyMTIKK19nZXRfQUFEX2xvb3AyXG51bV9pbml0aWFsX2Jsb2Nrc1xvcGVyYXRpb246CisJcHNybGRxCSAgICQ0LCAleG1tXGkKKwlzdWIJICAgJDQsICVyMTIKKwljbXAJICAgJXIxMSwgJXIxMgorCWpuZQkgICBfZ2V0X0FBRF9sb29wMlxudW1faW5pdGlhbF9ibG9ja3Ncb3BlcmF0aW9uCitfZ2V0X0FBRF9sb29wMl9kb25lXG51bV9pbml0aWFsX2Jsb2Nrc1xvcGVyYXRpb246CisgICAgICAgIG1vdmRxYSAgICAgU0hVRl9NQVNLKCVyaXApLCAleG1tMTQKKwlQU0hVRkJfWE1NICAgJXhtbTE0LCAleG1tXGkgIyBieXRlLXJlZmxlY3QgdGhlIEFBRCBkYXRhCisKKwl4b3IJICAgJXIxMSwgJXIxMSAjIGluaXRpYWxpc2UgdGhlIGRhdGEgcG9pbnRlciBvZmZzZXQgYXMgemVybworCisgICAgICAgICMgc3RhcnQgQUVTIGZvciBudW1faW5pdGlhbF9ibG9ja3MgYmxvY2tzCisKKwltb3YJICAgJWFyZzUsICVyYXggICAgICAgICAgICAgICAgICAgICAgIyAlcmF4ID0gKlkwCisJbW92ZHF1CSAgICglcmF4KSwgXFhNTTAgICAgICAgICAgICAgICAgICAgICMgWE1NMCA9IFkwCisgICAgICAgIG1vdmRxYSAgICAgU0hVRl9NQVNLKCVyaXApLCAleG1tMTQKKwlQU0hVRkJfWE1NICAgJXhtbTE0LCBcWE1NMAorCisuaWYgKFxpID09IDUpIHx8IChcaSA9PSA2KSB8fCAoXGkgPT0gNykKKy5pcnBjIGluZGV4LCBcaV9zZXEKKwlwYWRkZAkgICBPTkUoJXJpcCksIFxYTU0wICAgICAgICAgICAgICAgICAjIElOQ1IgWTAKKwltb3ZkcWEJICAgXFhNTTAsICV4bW1caW5kZXgKKyAgICAgICAgbW92ZHFhICAgICBTSFVGX01BU0soJXJpcCksICV4bW0xNAorCVBTSFVGQl9YTU0gICAleG1tMTQsICV4bW1caW5kZXggICAgICAjIHBlcmZvcm0gYSAxNiBieXRlIHN3YXAKKworLmVuZHIKKy5pcnBjIGluZGV4LCBcaV9zZXEKKwlweG9yCSAgIDE2KjAoJWFyZzEpLCAleG1tXGluZGV4CisuZW5kcgorLmlycGMgaW5kZXgsIFxpX3NlcQorCW1vdmFwcyAweDEwKCVyZGkpLCBcVE1QMQorCUFFU0VOQyAgICAgXFRNUDEsICV4bW1caW5kZXggICAgICAgICAgIyBSb3VuZCAxCisuZW5kcgorLmlycGMgaW5kZXgsIFxpX3NlcQorCW1vdmFwcyAweDIwKCVhcmcxKSwgXFRNUDEKKwlBRVNFTkMgICAgIFxUTVAxLCAleG1tXGluZGV4ICAgICAgICAgICMgUm91bmQgMgorLmVuZHIKKy5pcnBjIGluZGV4LCBcaV9zZXEKKwltb3ZhcHMgMHgzMCglYXJnMSksIFxUTVAxCisJQUVTRU5DICAgICBcVE1QMSwgJXhtbVxpbmRleCAgICAgICAgICAjIFJvdW5kIDIKKy5lbmRyCisuaXJwYyBpbmRleCwgXGlfc2VxCisJbW92YXBzIDB4NDAoJWFyZzEpLCBcVE1QMQorCUFFU0VOQyAgICAgXFRNUDEsICV4bW1caW5kZXggICAgICAgICAgIyBSb3VuZCAyCisuZW5kcgorLmlycGMgaW5kZXgsIFxpX3NlcQorCW1vdmFwcyAweDUwKCVhcmcxKSwgXFRNUDEKKwlBRVNFTkMgICAgIFxUTVAxLCAleG1tXGluZGV4ICAgICAgICAgICMgUm91bmQgMgorLmVuZHIKKy5pcnBjIGluZGV4LCBcaV9zZXEKKwltb3ZhcHMgMHg2MCglYXJnMSksIFxUTVAxCisJQUVTRU5DICAgICBcVE1QMSwgJXhtbVxpbmRleCAgICAgICAgICAjIFJvdW5kIDIKKy5lbmRyCisuaXJwYyBpbmRleCwgXGlfc2VxCisJbW92YXBzIDB4NzAoJWFyZzEpLCBcVE1QMQorCUFFU0VOQyAgICAgXFRNUDEsICV4bW1caW5kZXggICAgICAgICAgIyBSb3VuZCAyCisuZW5kcgorLmlycGMgaW5kZXgsIFxpX3NlcQorCW1vdmFwcyAweDgwKCVhcmcxKSwgXFRNUDEKKwlBRVNFTkMgICAgIFxUTVAxLCAleG1tXGluZGV4ICAgICAgICAgICMgUm91bmQgMgorLmVuZHIKKy5pcnBjIGluZGV4LCBcaV9zZXEKKwltb3ZhcHMgMHg5MCglYXJnMSksIFxUTVAxCisJQUVTRU5DICAgICBcVE1QMSwgJXhtbVxpbmRleCAgICAgICAgICAjIFJvdW5kIDIKKy5lbmRyCisuaXJwYyBpbmRleCwgXGlfc2VxCisJbW92YXBzIDB4YTAoJWFyZzEpLCBcVE1QMQorCUFFU0VOQ0xBU1QgXFRNUDEsICV4bW1caW5kZXggICAgICAgICAjIFJvdW5kIDEwCisuZW5kcgorLmlycGMgaW5kZXgsIFxpX3NlcQorCW1vdmRxdQkgICAoJWFyZzMgLCAlcjExLCAxKSwgXFRNUDEKKwlweG9yCSAgIFxUTVAxLCAleG1tXGluZGV4CisJbW92ZHF1CSAgICV4bW1caW5kZXgsICglYXJnMiAsICVyMTEsIDEpCisJIyB3cml0ZSBiYWNrIHBsYWludGV4dC9jaXBoZXJ0ZXh0IGZvciBudW1faW5pdGlhbF9ibG9ja3MKKwlhZGQJICAgJDE2LCAlcjExCisKKyAgICAgICAgbW92ZHFhICAgICBTSFVGX01BU0soJXJpcCksICV4bW0xNAorCVBTSFVGQl9YTU0JICAgJXhtbTE0LCAleG1tXGluZGV4CisKKwkJIyBwcmVwYXJlIHBsYWludGV4dC9jaXBoZXJ0ZXh0IGZvciBHSEFTSCBjb21wdXRhdGlvbgorLmVuZHIKKy5lbmRpZgorCUdIQVNIX01VTCAgJXhtbVxpLCBcVE1QMywgXFRNUDEsIFxUTVAyLCBcVE1QNCwgXFRNUDUsIFxYTU0xCisgICAgICAgICMgYXBwbHkgR0hBU0ggb24gbnVtX2luaXRpYWxfYmxvY2tzIGJsb2NrcworCisuaWYgXGkgPT0gNQorICAgICAgICBweG9yICAgICAgICV4bW01LCAleG1tNgorCUdIQVNIX01VTCAgJXhtbTYsIFxUTVAzLCBcVE1QMSwgXFRNUDIsIFxUTVA0LCBcVE1QNSwgXFhNTTEKKyAgICAgICAgcHhvciAgICAgICAleG1tNiwgJXhtbTcKKwlHSEFTSF9NVUwgICV4bW03LCBcVE1QMywgXFRNUDEsIFxUTVAyLCBcVE1QNCwgXFRNUDUsIFxYTU0xCisgICAgICAgIHB4b3IgICAgICAgJXhtbTcsICV4bW04CisJR0hBU0hfTVVMICAleG1tOCwgXFRNUDMsIFxUTVAxLCBcVE1QMiwgXFRNUDQsIFxUTVA1LCBcWE1NMQorLmVsc2VpZiBcaSA9PSA2CisgICAgICAgIHB4b3IgICAgICAgJXhtbTYsICV4bW03CisJR0hBU0hfTVVMICAleG1tNywgXFRNUDMsIFxUTVAxLCBcVE1QMiwgXFRNUDQsIFxUTVA1LCBcWE1NMQorICAgICAgICBweG9yICAgICAgICV4bW03LCAleG1tOAorCUdIQVNIX01VTCAgJXhtbTgsIFxUTVAzLCBcVE1QMSwgXFRNUDIsIFxUTVA0LCBcVE1QNSwgXFhNTTEKKy5lbHNlaWYgXGkgPT0gNworICAgICAgICBweG9yICAgICAgICV4bW03LCAleG1tOAorCUdIQVNIX01VTCAgJXhtbTgsIFxUTVAzLCBcVE1QMSwgXFRNUDIsIFxUTVA0LCBcVE1QNSwgXFhNTTEKKy5lbmRpZgorCWNtcAkgICAkNjQsICVyMTMKKwlqbAlfaW5pdGlhbF9ibG9ja3NfZG9uZVxudW1faW5pdGlhbF9ibG9ja3Ncb3BlcmF0aW9uCisJIyBubyBuZWVkIGZvciBwcmVjb21wdXRlZCB2YWx1ZXMKKy8qCisqCisqIFByZWNvbXB1dGF0aW9ucyBmb3IgSGFzaEtleSBwYXJhbGxlbCB3aXRoIGVuY3J5cHRpb24gb2YgZmlyc3QgNCBibG9ja3MuCisqIEhhc2tleV9pX2sgaG9sZHMgWE9SZWQgdmFsdWVzIG9mIHRoZSBsb3cgYW5kIGhpZ2ggcGFydHMgb2YgdGhlIEhhc2tleV9pCisqLworCXBhZGRkCSAgIE9ORSglcmlwKSwgXFhNTTAgICAgICAgICAgICAgICMgSU5DUiBZMAorCW1vdmRxYQkgICBcWE1NMCwgXFhNTTEKKyAgICAgICAgbW92ZHFhICAgICBTSFVGX01BU0soJXJpcCksICV4bW0xNAorCVBTSFVGQl9YTU0gICV4bW0xNCwgXFhNTTEgICAgICAgICMgcGVyZm9ybSBhIDE2IGJ5dGUgc3dhcAorCisJcGFkZGQJICAgT05FKCVyaXApLCBcWE1NMCAgICAgICAgICAgICAgIyBJTkNSIFkwCisJbW92ZHFhCSAgIFxYTU0wLCBcWE1NMgorICAgICAgICBtb3ZkcWEgICAgIFNIVUZfTUFTSyglcmlwKSwgJXhtbTE0CisJUFNIVUZCX1hNTSAgJXhtbTE0LCBcWE1NMiAgICAgICAgIyBwZXJmb3JtIGEgMTYgYnl0ZSBzd2FwCisKKwlwYWRkZAkgICBPTkUoJXJpcCksIFxYTU0wICAgICAgICAgICAgICAjIElOQ1IgWTAKKwltb3ZkcWEJICAgXFhNTTAsIFxYTU0zCisgICAgICAgIG1vdmRxYSAgICAgU0hVRl9NQVNLKCVyaXApLCAleG1tMTQKKwlQU0hVRkJfWE1NICV4bW0xNCwgXFhNTTMgICAgICAgICMgcGVyZm9ybSBhIDE2IGJ5dGUgc3dhcAorCisJcGFkZGQJICAgT05FKCVyaXApLCBcWE1NMCAgICAgICAgICAgICAgIyBJTkNSIFkwCisJbW92ZHFhCSAgIFxYTU0wLCBcWE1NNAorICAgICAgICBtb3ZkcWEgICAgIFNIVUZfTUFTSyglcmlwKSwgJXhtbTE0CisJUFNIVUZCX1hNTSAleG1tMTQsIFxYTU00ICAgICAgICAjIHBlcmZvcm0gYSAxNiBieXRlIHN3YXAKKworCXB4b3IJICAgMTYqMCglYXJnMSksIFxYTU0xCisJcHhvcgkgICAxNiowKCVhcmcxKSwgXFhNTTIKKwlweG9yCSAgIDE2KjAoJWFyZzEpLCBcWE1NMworCXB4b3IJICAgMTYqMCglYXJnMSksIFxYTU00CisJbW92ZHFhCSAgIFxUTVAzLCBcVE1QNQorCXBzaHVmZAkgICAkNzgsIFxUTVAzLCBcVE1QMQorCXB4b3IJICAgXFRNUDMsIFxUTVAxCisJbW92ZHFhCSAgIFxUTVAxLCBIYXNoS2V5X2soJXJzcCkKKwlHSEFTSF9NVUwgIFxUTVA1LCBcVE1QMywgXFRNUDEsIFxUTVAyLCBcVE1QNCwgXFRNUDYsIFxUTVA3CisjIFRNUDUgPSBIYXNoS2V5XjI8PDEgKG1vZCBwb2x5KQorCW1vdmRxYQkgICBcVE1QNSwgSGFzaEtleV8yKCVyc3ApCisjIEhhc2hLZXlfMiA9IEhhc2hLZXleMjw8MSAobW9kIHBvbHkpCisJcHNodWZkCSAgICQ3OCwgXFRNUDUsIFxUTVAxCisJcHhvcgkgICBcVE1QNSwgXFRNUDEKKwltb3ZkcWEJICAgXFRNUDEsIEhhc2hLZXlfMl9rKCVyc3ApCisuaXJwYyBpbmRleCwgMTIzNCAjIGRvIDQgcm91bmRzCisJbW92YXBzIDB4MTAqXGluZGV4KCVhcmcxKSwgXFRNUDEKKwlBRVNFTkMJICAgXFRNUDEsIFxYTU0xCisJQUVTRU5DCSAgIFxUTVAxLCBcWE1NMgorCUFFU0VOQwkgICBcVE1QMSwgXFhNTTMKKwlBRVNFTkMJICAgXFRNUDEsIFxYTU00CisuZW5kcgorCUdIQVNIX01VTCAgXFRNUDUsIFxUTVAzLCBcVE1QMSwgXFRNUDIsIFxUTVA0LCBcVE1QNiwgXFRNUDcKKyMgVE1QNSA9IEhhc2hLZXleMzw8MSAobW9kIHBvbHkpCisJbW92ZHFhCSAgIFxUTVA1LCBIYXNoS2V5XzMoJXJzcCkKKwlwc2h1ZmQJICAgJDc4LCBcVE1QNSwgXFRNUDEKKwlweG9yCSAgIFxUTVA1LCBcVE1QMQorCW1vdmRxYQkgICBcVE1QMSwgSGFzaEtleV8zX2soJXJzcCkKKy5pcnBjIGluZGV4LCA1Njc4OSAjIGRvIG5leHQgNSByb3VuZHMKKwltb3ZhcHMgMHgxMCpcaW5kZXgoJWFyZzEpLCBcVE1QMQorCUFFU0VOQwkgICBcVE1QMSwgXFhNTTEKKwlBRVNFTkMJICAgXFRNUDEsIFxYTU0yCisJQUVTRU5DCSAgIFxUTVAxLCBcWE1NMworCUFFU0VOQwkgICBcVE1QMSwgXFhNTTQKKy5lbmRyCisJR0hBU0hfTVVMICBcVE1QNSwgXFRNUDMsIFxUTVAxLCBcVE1QMiwgXFRNUDQsIFxUTVA2LCBcVE1QNworIyBUTVA1ID0gSGFzaEtleV4zPDwxIChtb2QgcG9seSkKKwltb3ZkcWEJICAgXFRNUDUsIEhhc2hLZXlfNCglcnNwKQorCXBzaHVmZAkgICAkNzgsIFxUTVA1LCBcVE1QMQorCXB4b3IJICAgXFRNUDUsIFxUTVAxCisJbW92ZHFhCSAgIFxUTVAxLCBIYXNoS2V5XzRfayglcnNwKQorCW1vdmFwcyAweGEwKCVhcmcxKSwgXFRNUDIKKwlBRVNFTkNMQVNUIFxUTVAyLCBcWE1NMQorCUFFU0VOQ0xBU1QgXFRNUDIsIFxYTU0yCisJQUVTRU5DTEFTVCBcVE1QMiwgXFhNTTMKKwlBRVNFTkNMQVNUIFxUTVAyLCBcWE1NNAorCW1vdmRxdQkgICAxNiowKCVhcmczICwgJXIxMSAsIDEpLCBcVE1QMQorCXB4b3IJICAgXFRNUDEsIFxYTU0xCisJbW92ZHF1CSAgIDE2KjEoJWFyZzMgLCAlcjExICwgMSksIFxUTVAxCisJcHhvcgkgICBcVE1QMSwgXFhNTTIKKwltb3ZkcXUJICAgMTYqMiglYXJnMyAsICVyMTEgLCAxKSwgXFRNUDEKKwlweG9yCSAgIFxUTVAxLCBcWE1NMworCW1vdmRxdQkgICAxNiozKCVhcmczICwgJXIxMSAsIDEpLCBcVE1QMQorCXB4b3IJICAgXFRNUDEsIFxYTU00CisJbW92ZHF1ICAgICBcWE1NMSwgMTYqMCglYXJnMiAsICVyMTEgLCAxKQorCW1vdmRxdSAgICAgXFhNTTIsIDE2KjEoJWFyZzIgLCAlcjExICwgMSkKKwltb3ZkcXUgICAgIFxYTU0zLCAxNioyKCVhcmcyICwgJXIxMSAsIDEpCisJbW92ZHF1ICAgICBcWE1NNCwgMTYqMyglYXJnMiAsICVyMTEgLCAxKQorCisJYWRkCSAgICQ2NCwgJXIxMQorICAgICAgICBtb3ZkcWEgICAgIFNIVUZfTUFTSyglcmlwKSwgJXhtbTE0CisJUFNIVUZCX1hNTSAleG1tMTQsIFxYTU0xICMgcGVyZm9ybSBhIDE2IGJ5dGUgc3dhcAorCXB4b3IJICAgXFhNTURzdCwgXFhNTTEKKyMgY29tYmluZSBHSEFTSGVkIHZhbHVlIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgY2lwaGVydGV4dAorICAgICAgICBtb3ZkcWEgICAgIFNIVUZfTUFTSyglcmlwKSwgJXhtbTE0CisJUFNIVUZCX1hNTSAleG1tMTQsIFxYTU0yICMgcGVyZm9ybSBhIDE2IGJ5dGUgc3dhcAorICAgICAgICBtb3ZkcWEgICAgIFNIVUZfTUFTSyglcmlwKSwgJXhtbTE0CisJUFNIVUZCX1hNTSAleG1tMTQsIFxYTU0zICMgcGVyZm9ybSBhIDE2IGJ5dGUgc3dhcAorICAgICAgICBtb3ZkcWEgICAgIFNIVUZfTUFTSyglcmlwKSwgJXhtbTE0CisJUFNIVUZCX1hNTSAleG1tMTQsIFxYTU00ICMgcGVyZm9ybSBhIDE2IGJ5dGUgc3dhcAorCitfaW5pdGlhbF9ibG9ja3NfZG9uZVxudW1faW5pdGlhbF9ibG9ja3Ncb3BlcmF0aW9uOgorCisuZW5kbQorCisvKgorKiBlbmNyeXB0IDQgYmxvY2tzIGF0IGEgdGltZQorKiBnaGFzaCB0aGUgNCBwcmV2aW91c2x5IGVuY3J5cHRlZCBjaXBoZXJ0ZXh0IGJsb2NrcworKiBhcmcxLCAlYXJnMiwgJWFyZzMgYXJlIHVzZWQgYXMgcG9pbnRlcnMgb25seSwgbm90IG1vZGlmaWVkCisqICVyMTEgaXMgdGhlIGRhdGEgb2Zmc2V0IHZhbHVlCisqLworLm1hY3JvIEdIQVNIXzRfRU5DUllQVF80X1BBUkFMTEVMX0VOQyBUTVAxIFRNUDIgVE1QMyBUTVA0IFRNUDUgXAorVE1QNiBYTU0wIFhNTTEgWE1NMiBYTU0zIFhNTTQgWE1NNSBYTU02IFhNTTcgWE1NOCBvcGVyYXRpb24KKworCW1vdmRxYQkgIFxYTU0xLCBcWE1NNQorCW1vdmRxYQkgIFxYTU0yLCBcWE1NNgorCW1vdmRxYQkgIFxYTU0zLCBcWE1NNworCW1vdmRxYQkgIFxYTU00LCBcWE1NOAorCisgICAgICAgIG1vdmRxYSAgICBTSFVGX01BU0soJXJpcCksICV4bW0xNQorICAgICAgICAjIG11bHRpcGx5IFRNUDUgKiBIYXNoS2V5IHVzaW5nIGthcmF0c3ViYQorCisJbW92ZHFhCSAgXFhNTTUsIFxUTVA0CisJcHNodWZkCSAgJDc4LCBcWE1NNSwgXFRNUDYKKwlweG9yCSAgXFhNTTUsIFxUTVA2CisJcGFkZGQgICAgIE9ORSglcmlwKSwgXFhNTTAJCSMgSU5DUiBDTlQKKwltb3ZkcWEJICBIYXNoS2V5XzQoJXJzcCksIFxUTVA1CisJUENMTVVMUURRIDB4MTEsIFxUTVA1LCBcVE1QNCAgICAgICAgICAgIyBUTVA0ID0gYTEqYjEKKwltb3ZkcWEgICAgXFhNTTAsIFxYTU0xCisJcGFkZGQgICAgIE9ORSglcmlwKSwgXFhNTTAJCSMgSU5DUiBDTlQKKwltb3ZkcWEgICAgXFhNTTAsIFxYTU0yCisJcGFkZGQgICAgIE9ORSglcmlwKSwgXFhNTTAJCSMgSU5DUiBDTlQKKwltb3ZkcWEgICAgXFhNTTAsIFxYTU0zCisJcGFkZGQgICAgIE9ORSglcmlwKSwgXFhNTTAJCSMgSU5DUiBDTlQKKwltb3ZkcWEgICAgXFhNTTAsIFxYTU00CisJUFNIVUZCX1hNTSAleG1tMTUsIFxYTU0xCSMgcGVyZm9ybSBhIDE2IGJ5dGUgc3dhcAorCVBDTE1VTFFEUSAweDAwLCBcVE1QNSwgXFhNTTUgICAgICAgICAgICMgWE1NNSA9IGEwKmIwCisJUFNIVUZCX1hNTSAleG1tMTUsIFxYTU0yCSMgcGVyZm9ybSBhIDE2IGJ5dGUgc3dhcAorCVBTSFVGQl9YTU0gJXhtbTE1LCBcWE1NMwkjIHBlcmZvcm0gYSAxNiBieXRlIHN3YXAKKwlQU0hVRkJfWE1NICV4bW0xNSwgXFhNTTQJIyBwZXJmb3JtIGEgMTYgYnl0ZSBzd2FwCisKKwlweG9yCSAgKCVhcmcxKSwgXFhNTTEKKwlweG9yCSAgKCVhcmcxKSwgXFhNTTIKKwlweG9yCSAgKCVhcmcxKSwgXFhNTTMKKwlweG9yCSAgKCVhcmcxKSwgXFhNTTQKKwltb3ZkcWEJICBIYXNoS2V5XzRfayglcnNwKSwgXFRNUDUKKwlQQ0xNVUxRRFEgMHgwMCwgXFRNUDUsIFxUTVA2ICAgICAgICAgICAjIFRNUDYgPSAoYTErYTApKihiMStiMCkKKwltb3ZhcHMgMHgxMCglYXJnMSksIFxUTVAxCisJQUVTRU5DCSAgXFRNUDEsIFxYTU0xICAgICAgICAgICAgICAjIFJvdW5kIDEKKwlBRVNFTkMJICBcVE1QMSwgXFhNTTIKKwlBRVNFTkMJICBcVE1QMSwgXFhNTTMKKwlBRVNFTkMJICBcVE1QMSwgXFhNTTQKKwltb3ZhcHMgMHgyMCglYXJnMSksIFxUTVAxCisJQUVTRU5DCSAgXFRNUDEsIFxYTU0xICAgICAgICAgICAgICAjIFJvdW5kIDIKKwlBRVNFTkMJICBcVE1QMSwgXFhNTTIKKwlBRVNFTkMJICBcVE1QMSwgXFhNTTMKKwlBRVNFTkMJICBcVE1QMSwgXFhNTTQKKwltb3ZkcWEJICBcWE1NNiwgXFRNUDEKKwlwc2h1ZmQJICAkNzgsIFxYTU02LCBcVE1QMgorCXB4b3IJICBcWE1NNiwgXFRNUDIKKwltb3ZkcWEJICBIYXNoS2V5XzMoJXJzcCksIFxUTVA1CisJUENMTVVMUURRIDB4MTEsIFxUTVA1LCBcVE1QMSAgICAgICAgICAgIyBUTVAxID0gYTEgKiBiMQorCW1vdmFwcyAweDMwKCVhcmcxKSwgXFRNUDMKKwlBRVNFTkMgICAgXFRNUDMsIFxYTU0xICAgICAgICAgICAgICAjIFJvdW5kIDMKKwlBRVNFTkMgICAgXFRNUDMsIFxYTU0yCisJQUVTRU5DICAgIFxUTVAzLCBcWE1NMworCUFFU0VOQyAgICBcVE1QMywgXFhNTTQKKwlQQ0xNVUxRRFEgMHgwMCwgXFRNUDUsIFxYTU02ICAgICAgICAgICAjIFhNTTYgPSBhMCpiMAorCW1vdmFwcyAweDQwKCVhcmcxKSwgXFRNUDMKKwlBRVNFTkMJICBcVE1QMywgXFhNTTEgICAgICAgICAgICAgICMgUm91bmQgNAorCUFFU0VOQwkgIFxUTVAzLCBcWE1NMgorCUFFU0VOQwkgIFxUTVAzLCBcWE1NMworCUFFU0VOQwkgIFxUTVAzLCBcWE1NNAorCW1vdmRxYQkgIEhhc2hLZXlfM19rKCVyc3ApLCBcVE1QNQorCVBDTE1VTFFEUSAweDAwLCBcVE1QNSwgXFRNUDIgICAgICAgICAgICMgVE1QMiA9IChhMSthMCkqKGIxK2IwKQorCW1vdmFwcyAweDUwKCVhcmcxKSwgXFRNUDMKKwlBRVNFTkMJICBcVE1QMywgXFhNTTEgICAgICAgICAgICAgICMgUm91bmQgNQorCUFFU0VOQwkgIFxUTVAzLCBcWE1NMgorCUFFU0VOQwkgIFxUTVAzLCBcWE1NMworCUFFU0VOQwkgIFxUTVAzLCBcWE1NNAorCXB4b3IJICBcVE1QMSwgXFRNUDQKKyMgYWNjdW11bGF0ZSB0aGUgcmVzdWx0cyBpbiBUTVA0OlhNTTUsIFRNUDYgaG9sZHMgdGhlIG1pZGRsZSBwYXJ0CisJcHhvcgkgIFxYTU02LCBcWE1NNQorCXB4b3IJICBcVE1QMiwgXFRNUDYKKwltb3ZkcWEJICBcWE1NNywgXFRNUDEKKwlwc2h1ZmQJICAkNzgsIFxYTU03LCBcVE1QMgorCXB4b3IJICBcWE1NNywgXFRNUDIKKwltb3ZkcWEJICBIYXNoS2V5XzIoJXJzcCApLCBcVE1QNQorCisgICAgICAgICMgTXVsdGlwbHkgVE1QNSAqIEhhc2hLZXkgdXNpbmcga2FyYXRzdWJhCisKKwlQQ0xNVUxRRFEgMHgxMSwgXFRNUDUsIFxUTVAxICAgICAgICAgICAjIFRNUDEgPSBhMSpiMQorCW1vdmFwcyAweDYwKCVhcmcxKSwgXFRNUDMKKwlBRVNFTkMJICBcVE1QMywgXFhNTTEgICAgICAgICAgICAgICMgUm91bmQgNgorCUFFU0VOQwkgIFxUTVAzLCBcWE1NMgorCUFFU0VOQwkgIFxUTVAzLCBcWE1NMworCUFFU0VOQwkgIFxUTVAzLCBcWE1NNAorCVBDTE1VTFFEUSAweDAwLCBcVE1QNSwgXFhNTTcgICAgICAgICAgICMgWE1NNyA9IGEwKmIwCisJbW92YXBzIDB4NzAoJWFyZzEpLCBcVE1QMworCUFFU0VOQwkgIFxUTVAzLCBcWE1NMSAgICAgICAgICAgICAjIFJvdW5kIDcKKwlBRVNFTkMJICBcVE1QMywgXFhNTTIKKwlBRVNFTkMJICBcVE1QMywgXFhNTTMKKwlBRVNFTkMJICBcVE1QMywgXFhNTTQKKwltb3ZkcWEJICBIYXNoS2V5XzJfayglcnNwKSwgXFRNUDUKKwlQQ0xNVUxRRFEgMHgwMCwgXFRNUDUsIFxUTVAyICAgICAgICAgICAjIFRNUDIgPSAoYTErYTApKihiMStiMCkKKwltb3ZhcHMgMHg4MCglYXJnMSksIFxUTVAzCisJQUVTRU5DCSAgXFRNUDMsIFxYTU0xICAgICAgICAgICAgICMgUm91bmQgOAorCUFFU0VOQwkgIFxUTVAzLCBcWE1NMgorCUFFU0VOQwkgIFxUTVAzLCBcWE1NMworCUFFU0VOQwkgIFxUTVAzLCBcWE1NNAorCXB4b3IJICBcVE1QMSwgXFRNUDQKKyMgYWNjdW11bGF0ZSB0aGUgcmVzdWx0cyBpbiBUTVA0OlhNTTUsIFRNUDYgaG9sZHMgdGhlIG1pZGRsZSBwYXJ0CisJcHhvcgkgIFxYTU03LCBcWE1NNQorCXB4b3IJICBcVE1QMiwgXFRNUDYKKworICAgICAgICAjIE11bHRpcGx5IFhNTTggKiBIYXNoS2V5CisgICAgICAgICMgWE1NOCBhbmQgVE1QNSBob2xkIHRoZSB2YWx1ZXMgZm9yIHRoZSB0d28gb3BlcmFuZHMKKworCW1vdmRxYQkgIFxYTU04LCBcVE1QMQorCXBzaHVmZAkgICQ3OCwgXFhNTTgsIFxUTVAyCisJcHhvcgkgIFxYTU04LCBcVE1QMgorCW1vdmRxYQkgIEhhc2hLZXkoJXJzcCksIFxUTVA1CisJUENMTVVMUURRIDB4MTEsIFxUTVA1LCBcVE1QMSAgICAgICAgICAjIFRNUDEgPSBhMSpiMQorCW1vdmFwcyAweDkwKCVhcmcxKSwgXFRNUDMKKwlBRVNFTkMJICBcVE1QMywgXFhNTTEgICAgICAgICAgICAjIFJvdW5kIDkKKwlBRVNFTkMJICBcVE1QMywgXFhNTTIKKwlBRVNFTkMJICBcVE1QMywgXFhNTTMKKwlBRVNFTkMJICBcVE1QMywgXFhNTTQKKwlQQ0xNVUxRRFEgMHgwMCwgXFRNUDUsIFxYTU04ICAgICAgICAgICMgWE1NOCA9IGEwKmIwCisJbW92YXBzIDB4YTAoJWFyZzEpLCBcVE1QMworCUFFU0VOQ0xBU1QgXFRNUDMsIFxYTU0xICAgICAgICAgICAjIFJvdW5kIDEwCisJQUVTRU5DTEFTVCBcVE1QMywgXFhNTTIKKwlBRVNFTkNMQVNUIFxUTVAzLCBcWE1NMworCUFFU0VOQ0xBU1QgXFRNUDMsIFxYTU00CisJbW92ZHFhICAgIEhhc2hLZXlfayglcnNwKSwgXFRNUDUKKwlQQ0xNVUxRRFEgMHgwMCwgXFRNUDUsIFxUTVAyICAgICAgICAgICMgVE1QMiA9IChhMSthMCkqKGIxK2IwKQorCW1vdmRxdQkgICglYXJnMywlcjExLDEpLCBcVE1QMworCXB4b3IJICBcVE1QMywgXFhNTTEgICAgICAgICAgICAgICAgICMgQ2lwaGVydGV4dC9QbGFpbnRleHQgWE9SIEVLCisJbW92ZHF1CSAgMTYoJWFyZzMsJXIxMSwxKSwgXFRNUDMKKwlweG9yCSAgXFRNUDMsIFxYTU0yICAgICAgICAgICAgICAgICAjIENpcGhlcnRleHQvUGxhaW50ZXh0IFhPUiBFSworCW1vdmRxdQkgIDMyKCVhcmczLCVyMTEsMSksIFxUTVAzCisJcHhvcgkgIFxUTVAzLCBcWE1NMyAgICAgICAgICAgICAgICAgIyBDaXBoZXJ0ZXh0L1BsYWludGV4dCBYT1IgRUsKKwltb3ZkcXUJICA0OCglYXJnMywlcjExLDEpLCBcVE1QMworCXB4b3IJICBcVE1QMywgXFhNTTQgICAgICAgICAgICAgICAgICMgQ2lwaGVydGV4dC9QbGFpbnRleHQgWE9SIEVLCisgICAgICAgIG1vdmRxdSAgICBcWE1NMSwgKCVhcmcyLCVyMTEsMSkgICAgICAgICMgV3JpdGUgdG8gdGhlIGNpcGhlcnRleHQgYnVmZmVyCisgICAgICAgIG1vdmRxdSAgICBcWE1NMiwgMTYoJWFyZzIsJXIxMSwxKSAgICAgICMgV3JpdGUgdG8gdGhlIGNpcGhlcnRleHQgYnVmZmVyCisgICAgICAgIG1vdmRxdSAgICBcWE1NMywgMzIoJWFyZzIsJXIxMSwxKSAgICAgICMgV3JpdGUgdG8gdGhlIGNpcGhlcnRleHQgYnVmZmVyCisgICAgICAgIG1vdmRxdSAgICBcWE1NNCwgNDgoJWFyZzIsJXIxMSwxKSAgICAgICMgV3JpdGUgdG8gdGhlIGNpcGhlcnRleHQgYnVmZmVyCisJUFNIVUZCX1hNTSAleG1tMTUsIFxYTU0xICAgICAgICAjIHBlcmZvcm0gYSAxNiBieXRlIHN3YXAKKwlQU0hVRkJfWE1NICV4bW0xNSwgXFhNTTIJIyBwZXJmb3JtIGEgMTYgYnl0ZSBzd2FwCisJUFNIVUZCX1hNTSAleG1tMTUsIFxYTU0zCSMgcGVyZm9ybSBhIDE2IGJ5dGUgc3dhcAorCVBTSFVGQl9YTU0gJXhtbTE1LCBcWE1NNAkjIHBlcmZvcm0gYSAxNiBieXRlIHN3YXAKKworCXB4b3IJICBcVE1QNCwgXFRNUDEKKwlweG9yCSAgXFhNTTgsIFxYTU01CisJcHhvcgkgIFxUTVA2LCBcVE1QMgorCXB4b3IJICBcVE1QMSwgXFRNUDIKKwlweG9yCSAgXFhNTTUsIFxUTVAyCisJbW92ZHFhCSAgXFRNUDIsIFxUTVAzCisJcHNsbGRxCSAgJDgsIFxUTVAzICAgICAgICAgICAgICAgICAgICAjIGxlZnQgc2hpZnQgVE1QMyAyIERXcworCXBzcmxkcQkgICQ4LCBcVE1QMiAgICAgICAgICAgICAgICAgICAgIyByaWdodCBzaGlmdCBUTVAyIDIgRFdzCisJcHhvcgkgIFxUTVAzLCBcWE1NNQorCXB4b3IJICBcVE1QMiwgXFRNUDEJICAjIGFjY3VtdWxhdGUgdGhlIHJlc3VsdHMgaW4gVE1QMTpYTU01CisKKyAgICAgICAgIyBmaXJzdCBwaGFzZSBvZiByZWR1Y3Rpb24KKworCW1vdmRxYSAgICBcWE1NNSwgXFRNUDIKKwltb3ZkcWEgICAgXFhNTTUsIFxUTVAzCisJbW92ZHFhICAgIFxYTU01LCBcVE1QNAorIyBtb3ZlIFhNTTUgaW50byBUTVAyLCBUTVAzLCBUTVA0IGluIG9yZGVyIHRvIHBlcmZvcm0gc2hpZnRzIGluZGVwZW5kZW50bHkKKwlwc2xsZCAgICAgJDMxLCBcVE1QMiAgICAgICAgICAgICAgICAgICAjIHBhY2tlZCByaWdodCBzaGlmdCA8PCAzMQorCXBzbGxkICAgICAkMzAsIFxUTVAzICAgICAgICAgICAgICAgICAgICMgcGFja2VkIHJpZ2h0IHNoaWZ0IDw8IDMwCisJcHNsbGQgICAgICQyNSwgXFRNUDQgICAgICAgICAgICAgICAgICAgIyBwYWNrZWQgcmlnaHQgc2hpZnQgPDwgMjUKKwlweG9yICAgICAgXFRNUDMsIFxUTVAyCSAgICAgICAgICAgICAgICMgeG9yIHRoZSBzaGlmdGVkIHZlcnNpb25zCisJcHhvciAgICAgIFxUTVA0LCBcVE1QMgorCW1vdmRxYSAgICBcVE1QMiwgXFRNUDUKKwlwc3JsZHEgICAgJDQsIFxUTVA1ICAgICAgICAgICAgICAgICAgICAjIHJpZ2h0IHNoaWZ0IFQ1IDEgRFcKKwlwc2xsZHEgICAgJDEyLCBcVE1QMiAgICAgICAgICAgICAgICAgICAjIGxlZnQgc2hpZnQgVDIgMyBEV3MKKwlweG9yICAgICAgXFRNUDIsIFxYTU01CisKKyAgICAgICAgIyBzZWNvbmQgcGhhc2Ugb2YgcmVkdWN0aW9uCisKKwltb3ZkcWEgICAgXFhNTTUsXFRNUDIgIyBtYWtlIDMgY29waWVzIG9mIFhNTTUgaW50byBUTVAyLCBUTVAzLCBUTVA0CisJbW92ZHFhICAgIFxYTU01LFxUTVAzCisJbW92ZHFhICAgIFxYTU01LFxUTVA0CisJcHNybGQgICAgICQxLCBcVE1QMiAgICAgICAgICAgICAgICAgICAgIyBwYWNrZWQgbGVmdCBzaGlmdCA+PjEKKwlwc3JsZCAgICAgJDIsIFxUTVAzICAgICAgICAgICAgICAgICAgICAjIHBhY2tlZCBsZWZ0IHNoaWZ0ID4+MgorCXBzcmxkICAgICAkNywgXFRNUDQgICAgICAgICAgICAgICAgICAgICMgcGFja2VkIGxlZnQgc2hpZnQgPj43CisJcHhvciAgICAgIFxUTVAzLFxUTVAyCQkgICAgICAgIyB4b3IgdGhlIHNoaWZ0ZWQgdmVyc2lvbnMKKwlweG9yICAgICAgXFRNUDQsXFRNUDIKKwlweG9yICAgICAgXFRNUDUsIFxUTVAyCisJcHhvciAgICAgIFxUTVAyLCBcWE1NNQorCXB4b3IgICAgICBcVE1QMSwgXFhNTTUgICAgICAgICAgICAgICAgICMgcmVzdWx0IGlzIGluIFRNUDEKKworCXB4b3IJICBcWE1NNSwgXFhNTTEKKy5lbmRtCisKKy8qCisqIGRlY3J5cHQgNCBibG9ja3MgYXQgYSB0aW1lCisqIGdoYXNoIHRoZSA0IHByZXZpb3VzbHkgZGVjcnlwdGVkIGNpcGhlcnRleHQgYmxvY2tzCisqIGFyZzEsICVhcmcyLCAlYXJnMyBhcmUgdXNlZCBhcyBwb2ludGVycyBvbmx5LCBub3QgbW9kaWZpZWQKKyogJXIxMSBpcyB0aGUgZGF0YSBvZmZzZXQgdmFsdWUKKyovCisubWFjcm8gR0hBU0hfNF9FTkNSWVBUXzRfUEFSQUxMRUxfREVDIFRNUDEgVE1QMiBUTVAzIFRNUDQgVE1QNSBcCitUTVA2IFhNTTAgWE1NMSBYTU0yIFhNTTMgWE1NNCBYTU01IFhNTTYgWE1NNyBYTU04IG9wZXJhdGlvbgorCisJbW92ZHFhCSAgXFhNTTEsIFxYTU01CisJbW92ZHFhCSAgXFhNTTIsIFxYTU02CisJbW92ZHFhCSAgXFhNTTMsIFxYTU03CisJbW92ZHFhCSAgXFhNTTQsIFxYTU04CisKKyAgICAgICAgbW92ZHFhICAgIFNIVUZfTUFTSyglcmlwKSwgJXhtbTE1CisgICAgICAgICMgbXVsdGlwbHkgVE1QNSAqIEhhc2hLZXkgdXNpbmcga2FyYXRzdWJhCisKKwltb3ZkcWEJICBcWE1NNSwgXFRNUDQKKwlwc2h1ZmQJICAkNzgsIFxYTU01LCBcVE1QNgorCXB4b3IJICBcWE1NNSwgXFRNUDYKKwlwYWRkZCAgICAgT05FKCVyaXApLCBcWE1NMAkJIyBJTkNSIENOVAorCW1vdmRxYQkgIEhhc2hLZXlfNCglcnNwKSwgXFRNUDUKKwlQQ0xNVUxRRFEgMHgxMSwgXFRNUDUsIFxUTVA0ICAgICAgICAgICAjIFRNUDQgPSBhMSpiMQorCW1vdmRxYSAgICBcWE1NMCwgXFhNTTEKKwlwYWRkZCAgICAgT05FKCVyaXApLCBcWE1NMAkJIyBJTkNSIENOVAorCW1vdmRxYSAgICBcWE1NMCwgXFhNTTIKKwlwYWRkZCAgICAgT05FKCVyaXApLCBcWE1NMAkJIyBJTkNSIENOVAorCW1vdmRxYSAgICBcWE1NMCwgXFhNTTMKKwlwYWRkZCAgICAgT05FKCVyaXApLCBcWE1NMAkJIyBJTkNSIENOVAorCW1vdmRxYSAgICBcWE1NMCwgXFhNTTQKKwlQU0hVRkJfWE1NICV4bW0xNSwgXFhNTTEJIyBwZXJmb3JtIGEgMTYgYnl0ZSBzd2FwCisJUENMTVVMUURRIDB4MDAsIFxUTVA1LCBcWE1NNSAgICAgICAgICAgIyBYTU01ID0gYTAqYjAKKwlQU0hVRkJfWE1NICV4bW0xNSwgXFhNTTIJIyBwZXJmb3JtIGEgMTYgYnl0ZSBzd2FwCisJUFNIVUZCX1hNTSAleG1tMTUsIFxYTU0zCSMgcGVyZm9ybSBhIDE2IGJ5dGUgc3dhcAorCVBTSFVGQl9YTU0gJXhtbTE1LCBcWE1NNAkjIHBlcmZvcm0gYSAxNiBieXRlIHN3YXAKKworCXB4b3IJICAoJWFyZzEpLCBcWE1NMQorCXB4b3IJICAoJWFyZzEpLCBcWE1NMgorCXB4b3IJICAoJWFyZzEpLCBcWE1NMworCXB4b3IJICAoJWFyZzEpLCBcWE1NNAorCW1vdmRxYQkgIEhhc2hLZXlfNF9rKCVyc3ApLCBcVE1QNQorCVBDTE1VTFFEUSAweDAwLCBcVE1QNSwgXFRNUDYgICAgICAgICAgICMgVE1QNiA9IChhMSthMCkqKGIxK2IwKQorCW1vdmFwcyAweDEwKCVhcmcxKSwgXFRNUDEKKwlBRVNFTkMJICBcVE1QMSwgXFhNTTEgICAgICAgICAgICAgICMgUm91bmQgMQorCUFFU0VOQwkgIFxUTVAxLCBcWE1NMgorCUFFU0VOQwkgIFxUTVAxLCBcWE1NMworCUFFU0VOQwkgIFxUTVAxLCBcWE1NNAorCW1vdmFwcyAweDIwKCVhcmcxKSwgXFRNUDEKKwlBRVNFTkMJICBcVE1QMSwgXFhNTTEgICAgICAgICAgICAgICMgUm91bmQgMgorCUFFU0VOQwkgIFxUTVAxLCBcWE1NMgorCUFFU0VOQwkgIFxUTVAxLCBcWE1NMworCUFFU0VOQwkgIFxUTVAxLCBcWE1NNAorCW1vdmRxYQkgIFxYTU02LCBcVE1QMQorCXBzaHVmZAkgICQ3OCwgXFhNTTYsIFxUTVAyCisJcHhvcgkgIFxYTU02LCBcVE1QMgorCW1vdmRxYQkgIEhhc2hLZXlfMyglcnNwKSwgXFRNUDUKKwlQQ0xNVUxRRFEgMHgxMSwgXFRNUDUsIFxUTVAxICAgICAgICAgICAjIFRNUDEgPSBhMSAqIGIxCisJbW92YXBzIDB4MzAoJWFyZzEpLCBcVE1QMworCUFFU0VOQyAgICBcVE1QMywgXFhNTTEgICAgICAgICAgICAgICMgUm91bmQgMworCUFFU0VOQyAgICBcVE1QMywgXFhNTTIKKwlBRVNFTkMgICAgXFRNUDMsIFxYTU0zCisJQUVTRU5DICAgIFxUTVAzLCBcWE1NNAorCVBDTE1VTFFEUSAweDAwLCBcVE1QNSwgXFhNTTYgICAgICAgICAgICMgWE1NNiA9IGEwKmIwCisJbW92YXBzIDB4NDAoJWFyZzEpLCBcVE1QMworCUFFU0VOQwkgIFxUTVAzLCBcWE1NMSAgICAgICAgICAgICAgIyBSb3VuZCA0CisJQUVTRU5DCSAgXFRNUDMsIFxYTU0yCisJQUVTRU5DCSAgXFRNUDMsIFxYTU0zCisJQUVTRU5DCSAgXFRNUDMsIFxYTU00CisJbW92ZHFhCSAgSGFzaEtleV8zX2soJXJzcCksIFxUTVA1CisJUENMTVVMUURRIDB4MDAsIFxUTVA1LCBcVE1QMiAgICAgICAgICAgIyBUTVAyID0gKGExK2EwKSooYjErYjApCisJbW92YXBzIDB4NTAoJWFyZzEpLCBcVE1QMworCUFFU0VOQwkgIFxUTVAzLCBcWE1NMSAgICAgICAgICAgICAgIyBSb3VuZCA1CisJQUVTRU5DCSAgXFRNUDMsIFxYTU0yCisJQUVTRU5DCSAgXFRNUDMsIFxYTU0zCisJQUVTRU5DCSAgXFRNUDMsIFxYTU00CisJcHhvcgkgIFxUTVAxLCBcVE1QNAorIyBhY2N1bXVsYXRlIHRoZSByZXN1bHRzIGluIFRNUDQ6WE1NNSwgVE1QNiBob2xkcyB0aGUgbWlkZGxlIHBhcnQKKwlweG9yCSAgXFhNTTYsIFxYTU01CisJcHhvcgkgIFxUTVAyLCBcVE1QNgorCW1vdmRxYQkgIFxYTU03LCBcVE1QMQorCXBzaHVmZAkgICQ3OCwgXFhNTTcsIFxUTVAyCisJcHhvcgkgIFxYTU03LCBcVE1QMgorCW1vdmRxYQkgIEhhc2hLZXlfMiglcnNwICksIFxUTVA1CisKKyAgICAgICAgIyBNdWx0aXBseSBUTVA1ICogSGFzaEtleSB1c2luZyBrYXJhdHN1YmEKKworCVBDTE1VTFFEUSAweDExLCBcVE1QNSwgXFRNUDEgICAgICAgICAgICMgVE1QMSA9IGExKmIxCisJbW92YXBzIDB4NjAoJWFyZzEpLCBcVE1QMworCUFFU0VOQwkgIFxUTVAzLCBcWE1NMSAgICAgICAgICAgICAgIyBSb3VuZCA2CisJQUVTRU5DCSAgXFRNUDMsIFxYTU0yCisJQUVTRU5DCSAgXFRNUDMsIFxYTU0zCisJQUVTRU5DCSAgXFRNUDMsIFxYTU00CisJUENMTVVMUURRIDB4MDAsIFxUTVA1LCBcWE1NNyAgICAgICAgICAgIyBYTU03ID0gYTAqYjAKKwltb3ZhcHMgMHg3MCglYXJnMSksIFxUTVAzCisJQUVTRU5DCSAgXFRNUDMsIFxYTU0xICAgICAgICAgICAgICMgUm91bmQgNworCUFFU0VOQwkgIFxUTVAzLCBcWE1NMgorCUFFU0VOQwkgIFxUTVAzLCBcWE1NMworCUFFU0VOQwkgIFxUTVAzLCBcWE1NNAorCW1vdmRxYQkgIEhhc2hLZXlfMl9rKCVyc3ApLCBcVE1QNQorCVBDTE1VTFFEUSAweDAwLCBcVE1QNSwgXFRNUDIgICAgICAgICAgICMgVE1QMiA9IChhMSthMCkqKGIxK2IwKQorCW1vdmFwcyAweDgwKCVhcmcxKSwgXFRNUDMKKwlBRVNFTkMJICBcVE1QMywgXFhNTTEgICAgICAgICAgICAgIyBSb3VuZCA4CisJQUVTRU5DCSAgXFRNUDMsIFxYTU0yCisJQUVTRU5DCSAgXFRNUDMsIFxYTU0zCisJQUVTRU5DCSAgXFRNUDMsIFxYTU00CisJcHhvcgkgIFxUTVAxLCBcVE1QNAorIyBhY2N1bXVsYXRlIHRoZSByZXN1bHRzIGluIFRNUDQ6WE1NNSwgVE1QNiBob2xkcyB0aGUgbWlkZGxlIHBhcnQKKwlweG9yCSAgXFhNTTcsIFxYTU01CisJcHhvcgkgIFxUTVAyLCBcVE1QNgorCisgICAgICAgICMgTXVsdGlwbHkgWE1NOCAqIEhhc2hLZXkKKyAgICAgICAgIyBYTU04IGFuZCBUTVA1IGhvbGQgdGhlIHZhbHVlcyBmb3IgdGhlIHR3byBvcGVyYW5kcworCisJbW92ZHFhCSAgXFhNTTgsIFxUTVAxCisJcHNodWZkCSAgJDc4LCBcWE1NOCwgXFRNUDIKKwlweG9yCSAgXFhNTTgsIFxUTVAyCisJbW92ZHFhCSAgSGFzaEtleSglcnNwKSwgXFRNUDUKKwlQQ0xNVUxRRFEgMHgxMSwgXFRNUDUsIFxUTVAxICAgICAgICAgICMgVE1QMSA9IGExKmIxCisJbW92YXBzIDB4OTAoJWFyZzEpLCBcVE1QMworCUFFU0VOQwkgIFxUTVAzLCBcWE1NMSAgICAgICAgICAgICMgUm91bmQgOQorCUFFU0VOQwkgIFxUTVAzLCBcWE1NMgorCUFFU0VOQwkgIFxUTVAzLCBcWE1NMworCUFFU0VOQwkgIFxUTVAzLCBcWE1NNAorCVBDTE1VTFFEUSAweDAwLCBcVE1QNSwgXFhNTTggICAgICAgICAgIyBYTU04ID0gYTAqYjAKKwltb3ZhcHMgMHhhMCglYXJnMSksIFxUTVAzCisJQUVTRU5DTEFTVCBcVE1QMywgXFhNTTEgICAgICAgICAgICMgUm91bmQgMTAKKwlBRVNFTkNMQVNUIFxUTVAzLCBcWE1NMgorCUFFU0VOQ0xBU1QgXFRNUDMsIFxYTU0zCisJQUVTRU5DTEFTVCBcVE1QMywgXFhNTTQKKwltb3ZkcWEgICAgSGFzaEtleV9rKCVyc3ApLCBcVE1QNQorCVBDTE1VTFFEUSAweDAwLCBcVE1QNSwgXFRNUDIgICAgICAgICAgIyBUTVAyID0gKGExK2EwKSooYjErYjApCisJbW92ZHF1CSAgKCVhcmczLCVyMTEsMSksIFxUTVAzCisJcHhvcgkgIFxUTVAzLCBcWE1NMSAgICAgICAgICAgICAgICAgIyBDaXBoZXJ0ZXh0L1BsYWludGV4dCBYT1IgRUsKKwltb3ZkcXUJICBcWE1NMSwgKCVhcmcyLCVyMTEsMSkgICAgICAgICMgV3JpdGUgdG8gcGxhaW50ZXh0IGJ1ZmZlcgorCW1vdmRxYSAgICBcVE1QMywgXFhNTTEKKwltb3ZkcXUJICAxNiglYXJnMywlcjExLDEpLCBcVE1QMworCXB4b3IJICBcVE1QMywgXFhNTTIgICAgICAgICAgICAgICAgICMgQ2lwaGVydGV4dC9QbGFpbnRleHQgWE9SIEVLCisJbW92ZHF1CSAgXFhNTTIsIDE2KCVhcmcyLCVyMTEsMSkgICAgICAjIFdyaXRlIHRvIHBsYWludGV4dCBidWZmZXIKKwltb3ZkcWEgICAgXFRNUDMsIFxYTU0yCisJbW92ZHF1CSAgMzIoJWFyZzMsJXIxMSwxKSwgXFRNUDMKKwlweG9yCSAgXFRNUDMsIFxYTU0zICAgICAgICAgICAgICAgICAjIENpcGhlcnRleHQvUGxhaW50ZXh0IFhPUiBFSworCW1vdmRxdQkgIFxYTU0zLCAzMiglYXJnMiwlcjExLDEpICAgICAgIyBXcml0ZSB0byBwbGFpbnRleHQgYnVmZmVyCisJbW92ZHFhICAgIFxUTVAzLCBcWE1NMworCW1vdmRxdQkgIDQ4KCVhcmczLCVyMTEsMSksIFxUTVAzCisJcHhvcgkgIFxUTVAzLCBcWE1NNCAgICAgICAgICAgICAgICAgIyBDaXBoZXJ0ZXh0L1BsYWludGV4dCBYT1IgRUsKKwltb3ZkcXUJICBcWE1NNCwgNDgoJWFyZzIsJXIxMSwxKSAgICAgICMgV3JpdGUgdG8gcGxhaW50ZXh0IGJ1ZmZlcgorCW1vdmRxYSAgICBcVE1QMywgXFhNTTQKKwlQU0hVRkJfWE1NICV4bW0xNSwgXFhNTTEgICAgICAgICMgcGVyZm9ybSBhIDE2IGJ5dGUgc3dhcAorCVBTSFVGQl9YTU0gJXhtbTE1LCBcWE1NMgkjIHBlcmZvcm0gYSAxNiBieXRlIHN3YXAKKwlQU0hVRkJfWE1NICV4bW0xNSwgXFhNTTMJIyBwZXJmb3JtIGEgMTYgYnl0ZSBzd2FwCisJUFNIVUZCX1hNTSAleG1tMTUsIFxYTU00CSMgcGVyZm9ybSBhIDE2IGJ5dGUgc3dhcAorCisJcHhvcgkgIFxUTVA0LCBcVE1QMQorCXB4b3IJICBcWE1NOCwgXFhNTTUKKwlweG9yCSAgXFRNUDYsIFxUTVAyCisJcHhvcgkgIFxUTVAxLCBcVE1QMgorCXB4b3IJICBcWE1NNSwgXFRNUDIKKwltb3ZkcWEJICBcVE1QMiwgXFRNUDMKKwlwc2xsZHEJICAkOCwgXFRNUDMgICAgICAgICAgICAgICAgICAgICMgbGVmdCBzaGlmdCBUTVAzIDIgRFdzCisJcHNybGRxCSAgJDgsIFxUTVAyICAgICAgICAgICAgICAgICAgICAjIHJpZ2h0IHNoaWZ0IFRNUDIgMiBEV3MKKwlweG9yCSAgXFRNUDMsIFxYTU01CisJcHhvcgkgIFxUTVAyLCBcVE1QMQkgICMgYWNjdW11bGF0ZSB0aGUgcmVzdWx0cyBpbiBUTVAxOlhNTTUKKworICAgICAgICAjIGZpcnN0IHBoYXNlIG9mIHJlZHVjdGlvbgorCisJbW92ZHFhICAgIFxYTU01LCBcVE1QMgorCW1vdmRxYSAgICBcWE1NNSwgXFRNUDMKKwltb3ZkcWEgICAgXFhNTTUsIFxUTVA0CisjIG1vdmUgWE1NNSBpbnRvIFRNUDIsIFRNUDMsIFRNUDQgaW4gb3JkZXIgdG8gcGVyZm9ybSBzaGlmdHMgaW5kZXBlbmRlbnRseQorCXBzbGxkICAgICAkMzEsIFxUTVAyICAgICAgICAgICAgICAgICAgICMgcGFja2VkIHJpZ2h0IHNoaWZ0IDw8IDMxCisJcHNsbGQgICAgICQzMCwgXFRNUDMgICAgICAgICAgICAgICAgICAgIyBwYWNrZWQgcmlnaHQgc2hpZnQgPDwgMzAKKwlwc2xsZCAgICAgJDI1LCBcVE1QNCAgICAgICAgICAgICAgICAgICAjIHBhY2tlZCByaWdodCBzaGlmdCA8PCAyNQorCXB4b3IgICAgICBcVE1QMywgXFRNUDIJICAgICAgICAgICAgICAgIyB4b3IgdGhlIHNoaWZ0ZWQgdmVyc2lvbnMKKwlweG9yICAgICAgXFRNUDQsIFxUTVAyCisJbW92ZHFhICAgIFxUTVAyLCBcVE1QNQorCXBzcmxkcSAgICAkNCwgXFRNUDUgICAgICAgICAgICAgICAgICAgICMgcmlnaHQgc2hpZnQgVDUgMSBEVworCXBzbGxkcSAgICAkMTIsIFxUTVAyICAgICAgICAgICAgICAgICAgICMgbGVmdCBzaGlmdCBUMiAzIERXcworCXB4b3IgICAgICBcVE1QMiwgXFhNTTUKKworICAgICAgICAjIHNlY29uZCBwaGFzZSBvZiByZWR1Y3Rpb24KKworCW1vdmRxYSAgICBcWE1NNSxcVE1QMiAjIG1ha2UgMyBjb3BpZXMgb2YgWE1NNSBpbnRvIFRNUDIsIFRNUDMsIFRNUDQKKwltb3ZkcWEgICAgXFhNTTUsXFRNUDMKKwltb3ZkcWEgICAgXFhNTTUsXFRNUDQKKwlwc3JsZCAgICAgJDEsIFxUTVAyICAgICAgICAgICAgICAgICAgICAjIHBhY2tlZCBsZWZ0IHNoaWZ0ID4+MQorCXBzcmxkICAgICAkMiwgXFRNUDMgICAgICAgICAgICAgICAgICAgICMgcGFja2VkIGxlZnQgc2hpZnQgPj4yCisJcHNybGQgICAgICQ3LCBcVE1QNCAgICAgICAgICAgICAgICAgICAgIyBwYWNrZWQgbGVmdCBzaGlmdCA+PjcKKwlweG9yICAgICAgXFRNUDMsXFRNUDIJCSAgICAgICAjIHhvciB0aGUgc2hpZnRlZCB2ZXJzaW9ucworCXB4b3IgICAgICBcVE1QNCxcVE1QMgorCXB4b3IgICAgICBcVE1QNSwgXFRNUDIKKwlweG9yICAgICAgXFRNUDIsIFxYTU01CisJcHhvciAgICAgIFxUTVAxLCBcWE1NNSAgICAgICAgICAgICAgICAgIyByZXN1bHQgaXMgaW4gVE1QMQorCisJcHhvcgkgIFxYTU01LCBcWE1NMQorLmVuZG0KKworLyogR0hBU0ggdGhlIGxhc3QgNCBjaXBoZXJ0ZXh0IGJsb2Nrcy4gKi8KKy5tYWNybwlHSEFTSF9MQVNUXzQgVE1QMSBUTVAyIFRNUDMgVE1QNCBUTVA1IFRNUDYgXAorVE1QNyBYTU0xIFhNTTIgWE1NMyBYTU00IFhNTURzdAorCisgICAgICAgICMgTXVsdGlwbHkgVE1QNiAqIEhhc2hLZXkgKHVzaW5nIEthcmF0c3ViYSkKKworCW1vdmRxYQkgIFxYTU0xLCBcVE1QNgorCXBzaHVmZAkgICQ3OCwgXFhNTTEsIFxUTVAyCisJcHhvcgkgIFxYTU0xLCBcVE1QMgorCW1vdmRxYQkgIEhhc2hLZXlfNCglcnNwKSwgXFRNUDUKKwlQQ0xNVUxRRFEgMHgxMSwgXFRNUDUsIFxUTVA2ICAgICAgICMgVE1QNiA9IGExKmIxCisJUENMTVVMUURRIDB4MDAsIFxUTVA1LCBcWE1NMSAgICAgICAjIFhNTTEgPSBhMCpiMAorCW1vdmRxYQkgIEhhc2hLZXlfNF9rKCVyc3ApLCBcVE1QNAorCVBDTE1VTFFEUSAweDAwLCBcVE1QNCwgXFRNUDIgICAgICAgIyBUTVAyID0gKGExK2EwKSooYjErYjApCisJbW92ZHFhCSAgXFhNTTEsIFxYTU1Ec3QKKwltb3ZkcWEJICBcVE1QMiwgXFhNTTEgICAgICAgICAgICAgICMgcmVzdWx0IGluIFRNUDYsIFhNTURzdCwgWE1NMQorCisgICAgICAgICMgTXVsdGlwbHkgVE1QMSAqIEhhc2hLZXkgKHVzaW5nIEthcmF0c3ViYSkKKworCW1vdmRxYQkgIFxYTU0yLCBcVE1QMQorCXBzaHVmZAkgICQ3OCwgXFhNTTIsIFxUTVAyCisJcHhvcgkgIFxYTU0yLCBcVE1QMgorCW1vdmRxYQkgIEhhc2hLZXlfMyglcnNwKSwgXFRNUDUKKwlQQ0xNVUxRRFEgMHgxMSwgXFRNUDUsIFxUTVAxICAgICAgICMgVE1QMSA9IGExKmIxCisJUENMTVVMUURRIDB4MDAsIFxUTVA1LCBcWE1NMiAgICAgICAjIFhNTTIgPSBhMCpiMAorCW1vdmRxYQkgIEhhc2hLZXlfM19rKCVyc3ApLCBcVE1QNAorCVBDTE1VTFFEUSAweDAwLCBcVE1QNCwgXFRNUDIgICAgICAgIyBUTVAyID0gKGExK2EwKSooYjErYjApCisJcHhvcgkgIFxUTVAxLCBcVE1QNgorCXB4b3IJICBcWE1NMiwgXFhNTURzdAorCXB4b3IJICBcVE1QMiwgXFhNTTEKKyMgcmVzdWx0cyBhY2N1bXVsYXRlZCBpbiBUTVA2LCBYTU1Ec3QsIFhNTTEKKworICAgICAgICAjIE11bHRpcGx5IFRNUDEgKiBIYXNoS2V5ICh1c2luZyBLYXJhdHN1YmEpCisKKwltb3ZkcWEJICBcWE1NMywgXFRNUDEKKwlwc2h1ZmQJICAkNzgsIFxYTU0zLCBcVE1QMgorCXB4b3IJICBcWE1NMywgXFRNUDIKKwltb3ZkcWEJICBIYXNoS2V5XzIoJXJzcCksIFxUTVA1CisJUENMTVVMUURRIDB4MTEsIFxUTVA1LCBcVE1QMSAgICAgICAjIFRNUDEgPSBhMSpiMQorCVBDTE1VTFFEUSAweDAwLCBcVE1QNSwgXFhNTTMgICAgICAgIyBYTU0zID0gYTAqYjAKKwltb3ZkcWEJICBIYXNoS2V5XzJfayglcnNwKSwgXFRNUDQKKwlQQ0xNVUxRRFEgMHgwMCwgXFRNUDQsIFxUTVAyICAgICAgICMgVE1QMiA9IChhMSthMCkqKGIxK2IwKQorCXB4b3IJICBcVE1QMSwgXFRNUDYKKwlweG9yCSAgXFhNTTMsIFxYTU1Ec3QKKwlweG9yCSAgXFRNUDIsIFxYTU0xICAgIyByZXN1bHRzIGFjY3VtdWxhdGVkIGluIFRNUDYsIFhNTURzdCwgWE1NMQorCisgICAgICAgICMgTXVsdGlwbHkgVE1QMSAqIEhhc2hLZXkgKHVzaW5nIEthcmF0c3ViYSkKKwltb3ZkcWEJICBcWE1NNCwgXFRNUDEKKwlwc2h1ZmQJICAkNzgsIFxYTU00LCBcVE1QMgorCXB4b3IJICBcWE1NNCwgXFRNUDIKKwltb3ZkcWEJICBIYXNoS2V5KCVyc3ApLCBcVE1QNQorCVBDTE1VTFFEUSAweDExLCBcVE1QNSwgXFRNUDEJICAgICMgVE1QMSA9IGExKmIxCisJUENMTVVMUURRIDB4MDAsIFxUTVA1LCBcWE1NNCAgICAgICAjIFhNTTQgPSBhMCpiMAorCW1vdmRxYQkgIEhhc2hLZXlfayglcnNwKSwgXFRNUDQKKwlQQ0xNVUxRRFEgMHgwMCwgXFRNUDQsIFxUTVAyICAgICAgICMgVE1QMiA9IChhMSthMCkqKGIxK2IwKQorCXB4b3IJICBcVE1QMSwgXFRNUDYKKwlweG9yCSAgXFhNTTQsIFxYTU1Ec3QKKwlweG9yCSAgXFhNTTEsIFxUTVAyCisJcHhvcgkgIFxUTVA2LCBcVE1QMgorCXB4b3IJICBcWE1NRHN0LCBcVE1QMgorCSMgbWlkZGxlIHNlY3Rpb24gb2YgdGhlIHRlbXAgcmVzdWx0cyBjb21iaW5lZCBhcyBpbiBrYXJhdHN1YmEgYWxnb3JpdGhtCisJbW92ZHFhCSAgXFRNUDIsIFxUTVA0CisJcHNsbGRxCSAgJDgsIFxUTVA0ICAgICAgICAgICAgICAgICAjIGxlZnQgc2hpZnQgVE1QNCAyIERXcworCXBzcmxkcQkgICQ4LCBcVE1QMiAgICAgICAgICAgICAgICAgIyByaWdodCBzaGlmdCBUTVAyIDIgRFdzCisJcHhvcgkgIFxUTVA0LCBcWE1NRHN0CisJcHhvcgkgIFxUTVAyLCBcVE1QNgorIyBUTVA2OlhNTURzdCBob2xkcyB0aGUgcmVzdWx0IG9mIHRoZSBhY2N1bXVsYXRlZCBjYXJyeS1sZXNzIG11bHRpcGxpY2F0aW9ucworCSMgZmlyc3QgcGhhc2Ugb2YgdGhlIHJlZHVjdGlvbgorCW1vdmRxYSAgICBcWE1NRHN0LCBcVE1QMgorCW1vdmRxYSAgICBcWE1NRHN0LCBcVE1QMworCW1vdmRxYSAgICBcWE1NRHN0LCBcVE1QNAorIyBtb3ZlIFhNTURzdCBpbnRvIFRNUDIsIFRNUDMsIFRNUDQgaW4gb3JkZXIgdG8gcGVyZm9ybSAzIHNoaWZ0cyBpbmRlcGVuZGVudGx5CisJcHNsbGQgICAgICQzMSwgXFRNUDIgICAgICAgICAgICAgICAgIyBwYWNrZWQgcmlnaHQgc2hpZnRpbmcgPDwgMzEKKwlwc2xsZCAgICAgJDMwLCBcVE1QMyAgICAgICAgICAgICAgICAjIHBhY2tlZCByaWdodCBzaGlmdGluZyA8PCAzMAorCXBzbGxkICAgICAkMjUsIFxUTVA0ICAgICAgICAgICAgICAgICMgcGFja2VkIHJpZ2h0IHNoaWZ0aW5nIDw8IDI1CisJcHhvciAgICAgIFxUTVAzLCBcVE1QMiAgICAgICAgICAgICAgIyB4b3IgdGhlIHNoaWZ0ZWQgdmVyc2lvbnMKKwlweG9yICAgICAgXFRNUDQsIFxUTVAyCisJbW92ZHFhICAgIFxUTVAyLCBcVE1QNworCXBzcmxkcSAgICAkNCwgXFRNUDcgICAgICAgICAgICAgICAgICMgcmlnaHQgc2hpZnQgVE1QNyAxIERXCisJcHNsbGRxICAgICQxMiwgXFRNUDIgICAgICAgICAgICAgICAgIyBsZWZ0IHNoaWZ0IFRNUDIgMyBEV3MKKwlweG9yICAgICAgXFRNUDIsIFxYTU1Ec3QKKworICAgICAgICAjIHNlY29uZCBwaGFzZSBvZiB0aGUgcmVkdWN0aW9uCisJbW92ZHFhICAgIFxYTU1Ec3QsIFxUTVAyCisJIyBtYWtlIDMgY29waWVzIG9mIFhNTURzdCBmb3IgZG9pbmcgMyBzaGlmdCBvcGVyYXRpb25zCisJbW92ZHFhICAgIFxYTU1Ec3QsIFxUTVAzCisJbW92ZHFhICAgIFxYTU1Ec3QsIFxUTVA0CisJcHNybGQgICAgICQxLCBcVE1QMiAgICAgICAgICAgICAgICAgIyBwYWNrZWQgbGVmdCBzaGlmdCA+PiAxCisJcHNybGQgICAgICQyLCBcVE1QMyAgICAgICAgICAgICAgICAgIyBwYWNrZWQgbGVmdCBzaGlmdCA+PiAyCisJcHNybGQgICAgICQ3LCBcVE1QNCAgICAgICAgICAgICAgICAgIyBwYWNrZWQgbGVmdCBzaGlmdCA+PiA3CisJcHhvciAgICAgIFxUTVAzLCBcVE1QMiAgICAgICAgICAgICAgIyB4b3IgdGhlIHNoaWZ0ZWQgdmVyc2lvbnMKKwlweG9yICAgICAgXFRNUDQsIFxUTVAyCisJcHhvciAgICAgIFxUTVA3LCBcVE1QMgorCXB4b3IgICAgICBcVE1QMiwgXFhNTURzdAorCXB4b3IgICAgICBcVE1QNiwgXFhNTURzdCAgICAgICAgICAgICMgcmVkdWNlZCByZXN1bHQgaXMgaW4gWE1NRHN0CisuZW5kbQorCisvKiBFbmNyeXB0aW9uIG9mIGEgc2luZ2xlIGJsb2NrIGRvbmUqLworLm1hY3JvIEVOQ1JZUFRfU0lOR0xFX0JMT0NLIFhNTTAgVE1QMQorCisJcHhvcgkoJWFyZzEpLCBcWE1NMAorICAgICAgICBtb3ZhcHMgMTYoJWFyZzEpLCBcVE1QMQorCUFFU0VOQwlcVE1QMSwgXFhNTTAKKyAgICAgICAgbW92YXBzIDMyKCVhcmcxKSwgXFRNUDEKKwlBRVNFTkMJXFRNUDEsIFxYTU0wCisgICAgICAgIG1vdmFwcyA0OCglYXJnMSksIFxUTVAxCisJQUVTRU5DCVxUTVAxLCBcWE1NMAorICAgICAgICBtb3ZhcHMgNjQoJWFyZzEpLCBcVE1QMQorCUFFU0VOQwlcVE1QMSwgXFhNTTAKKyAgICAgICAgbW92YXBzIDgwKCVhcmcxKSwgXFRNUDEKKwlBRVNFTkMJXFRNUDEsIFxYTU0wCisgICAgICAgIG1vdmFwcyA5NiglYXJnMSksIFxUTVAxCisJQUVTRU5DCVxUTVAxLCBcWE1NMAorICAgICAgICBtb3ZhcHMgMTEyKCVhcmcxKSwgXFRNUDEKKwlBRVNFTkMJXFRNUDEsIFxYTU0wCisgICAgICAgIG1vdmFwcyAxMjgoJWFyZzEpLCBcVE1QMQorCUFFU0VOQwlcVE1QMSwgXFhNTTAKKyAgICAgICAgbW92YXBzIDE0NCglYXJnMSksIFxUTVAxCisJQUVTRU5DCVxUTVAxLCBcWE1NMAorICAgICAgICBtb3ZhcHMgMTYwKCVhcmcxKSwgXFRNUDEKKwlBRVNFTkNMQVNUCVxUTVAxLCBcWE1NMAorLmVuZG0KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogdm9pZCBhZXNuaV9nY21fZGVjKHZvaWQgKmFlc19jdHgsICAgIC8vIEFFUyBLZXkgc2NoZWR1bGUuIFN0YXJ0cyBvbiBhIDE2IGJ5dGUgYm91bmRhcnkuCisqICAgICAgICAgICAgICAgICAgIHU4ICpvdXQsICAgICAgICAgICAvLyBQbGFpbnRleHQgb3V0cHV0LiBFbmNyeXB0IGluLXBsYWNlIGlzIGFsbG93ZWQuCisqICAgICAgICAgICAgICAgICAgIGNvbnN0IHU4ICppbiwgICAgICAvLyBDaXBoZXJ0ZXh0IGlucHV0CisqICAgICAgICAgICAgICAgICAgIHU2NCBwbGFpbnRleHRfbGVuLCAvLyBMZW5ndGggb2YgZGF0YSBpbiBieXRlcyBmb3IgZGVjcnlwdGlvbi4KKyogICAgICAgICAgICAgICAgICAgdTggKml2LCAgICAgICAgICAgIC8vIFByZS1jb3VudGVyIGJsb2NrIGowOiA0IGJ5dGUgc2FsdCAoZnJvbSBTZWN1cml0eSBBc3NvY2lhdGlvbikKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbmNhdGVuYXRlZCB3aXRoIDggYnl0ZSBJbml0aWFsaXNhdGlvbiBWZWN0b3IgKGZyb20gSVBTZWMgRVNQIFBheWxvYWQpCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25jYXRlbmF0ZWQgd2l0aCAweDAwMDAwMDAxLiAxNi1ieXRlIGFsaWduZWQgcG9pbnRlci4KKyogICAgICAgICAgICAgICAgICAgdTggKmhhc2hfc3Via2V5LCAgIC8vIEgsIHRoZSBIYXNoIHN1YiBrZXkgaW5wdXQuIERhdGEgc3RhcnRzIG9uIGEgMTYtYnl0ZSBib3VuZGFyeS4KKyogICAgICAgICAgICAgICAgICAgY29uc3QgdTggKmFhZCwgICAgIC8vIEFkZGl0aW9uYWwgQXV0aGVudGljYXRpb24gRGF0YSAoQUFEKQorKiAgICAgICAgICAgICAgICAgICB1NjQgYWFkX2xlbiwgICAgICAgLy8gTGVuZ3RoIG9mIEFBRCBpbiBieXRlcy4gV2l0aCBSRkM0MTA2IHRoaXMgaXMgZ29pbmcgdG8gYmUgOCBvciAxMiBieXRlcworKiAgICAgICAgICAgICAgICAgICB1OCAgKmF1dGhfdGFnLCAgICAgLy8gQXV0aGVudGljYXRlZCBUYWcgb3V0cHV0LiBUaGUgZHJpdmVyIHdpbGwgY29tcGFyZSB0aGlzIHRvIHRoZQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2l2ZW4gYXV0aGVudGljYXRpb24gdGFnIGFuZCBvbmx5IHJldHVybiB0aGUgcGxhaW50ZXh0IGlmIHRoZXkgbWF0Y2guCisqICAgICAgICAgICAgICAgICAgIHU2NCBhdXRoX3RhZ19sZW4pOyAvLyBBdXRoZW50aWNhdGVkIFRhZyBMZW5ndGggaW4gYnl0ZXMuIFZhbGlkIHZhbHVlcyBhcmUgMTYKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChtb3N0IGxpa2VseSksIDEyIG9yIDguCisqCisqIEFzc3VtcHRpb25zOgorKgorKiBrZXlzOgorKiAgICAgICBrZXlzIGFyZSBwcmUtZXhwYW5kZWQgYW5kIGFsaWduZWQgdG8gMTYgYnl0ZXMuIHdlIGFyZSB1c2luZyB0aGUgZmlyc3QKKyogICAgICAgc2V0IG9mIDExIGtleXMgaW4gdGhlIGRhdGEgc3RydWN0dXJlIHZvaWQgKmFlc19jdHgKKyoKKyogaXY6CisqICAgICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyogICAgICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCisqICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisqICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbHQgIChGcm9tIHRoZSBTQSkgICAgICAgICAgICAgICB8CisqICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisqICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXphdGlvbiBWZWN0b3IgICAgICAgICAgICAgICAgICAgICB8CisqICAgICAgIHwgICAgICAgICAoVGhpcyBpcyB0aGUgc2VxdWVuY2UgbnVtYmVyIGZyb20gSVBTZWMgaGVhZGVyKSAgICAgICB8CisqICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisqICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisqICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisqCisqCisqCisqIEFBRDoKKyogICAgICAgQUFEIHBhZGRlZCB0byAxMjggYml0cyB3aXRoIDAKKyogICAgICAgZm9yIGV4YW1wbGUsIGFzc3VtZSBBQUQgaXMgYSB1MzIgdmVjdG9yCisqCisqICAgICAgIGlmIEFBRCBpcyA4IGJ5dGVzOgorKiAgICAgICBBQURbM10gPSB7QTAsIEExfTsKKyogICAgICAgcGFkZGVkIEFBRCBpbiB4bW0gcmVnaXN0ZXIgPSB7QTEgQTAgMCAwfQorKgorKiAgICAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisqICAgICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQorKiAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworKiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSSAoQTEpICAgICAgICAgICAgICAgICAgICAgICAgfAorKiAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworKiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgMzItYml0IFNlcXVlbmNlIE51bWJlciAoQTApICAgICAgICAgICAgICAgfAorKiAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworKiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKiAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFBRCBGb3JtYXQgd2l0aCAzMi1iaXQgU2VxdWVuY2UgTnVtYmVyCisqCisqICAgICAgIGlmIEFBRCBpcyAxMiBieXRlczoKKyogICAgICAgQUFEWzNdID0ge0EwLCBBMSwgQTJ9OworKiAgICAgICBwYWRkZWQgQUFEIGluIHhtbSByZWdpc3RlciA9IHtBMiBBMSBBMCAwfQorKgorKiAgICAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisqICAgICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQorKiAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworKiAgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyogICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUEkgKEEyKSAgICAgICAgICAgICAgICAgICAgICAgIHwKKyogICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyogICAgICAgfCAgICAgICAgICAgICAgICAgNjQtYml0IEV4dGVuZGVkIFNlcXVlbmNlIE51bWJlciB7QTEsQTB9ICAgICAgIHwKKyogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyogICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyogICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyoKKyogICAgICAgICAgICAgICAgICAgICAgICBBQUQgRm9ybWF0IHdpdGggNjQtYml0IEV4dGVuZGVkIFNlcXVlbmNlIE51bWJlcgorKgorKiBhYWRMZW46CisqICAgICAgIGZyb20gdGhlIGRlZmluaXRpb24gb2YgdGhlIHNwZWMsIGFhZExlbiBjYW4gb25seSBiZSA4IG9yIDEyIGJ5dGVzLgorKiAgICAgICBUaGUgY29kZSBzdXBwb3J0cyAxNiB0b28gYnV0IGZvciBvdGhlciBzaXplcywgdGhlIGNvZGUgd2lsbCBmYWlsLgorKgorKiBUTGVuOgorKiAgICAgICBmcm9tIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBzcGVjLCBUTGVuIGNhbiBvbmx5IGJlIDgsIDEyIG9yIDE2IGJ5dGVzLgorKiAgICAgICBGb3Igb3RoZXIgc2l6ZXMsIHRoZSBjb2RlIHdpbGwgZmFpbC4KKyoKKyogcG9seSA9IHheMTI4ICsgeF4xMjcgKyB4XjEyNiArIHheMTIxICsgMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0VOVFJZKGFlc25pX2djbV9kZWMpCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJbW92CSVyc3AsICVyMTQKKy8qCisqIHN0YXRlcyBvZiAleG1tIHJlZ2lzdGVycyAleG1tNjoleG1tMTUgbm90IHNhdmVkCisqIGFsbCAleG1tIHJlZ2lzdGVycyBhcmUgY2xvYmJlcmVkCisqLworCXN1YgkkVkFSSUFCTEVfT0ZGU0VULCAlcnNwCisJYW5kCSR+NjMsICVyc3AgICAgICAgICAgICAgICAgICAgICAgICAjIGFsaWduIHJzcCB0byA2NCBieXRlcworCW1vdgklYXJnNiwgJXIxMgorCW1vdmRxdQkoJXIxMiksICV4bW0xMwkJCSAgIyAleG1tMTMgPSBIYXNoS2V5CisgICAgICAgIG1vdmRxYSAgU0hVRl9NQVNLKCVyaXApLCAleG1tMgorCVBTSFVGQl9YTU0gJXhtbTIsICV4bW0xMworCisKKyMgUHJlY29tcHV0ZSBIYXNoS2V5PDwxIChtb2QgcG9seSkgZnJvbSB0aGUgaGFzaCBrZXkgKHJlcXVpcmVkIGZvciBHSEFTSCkKKworCW1vdmRxYQkleG1tMTMsICV4bW0yCisJcHNsbHEJJDEsICV4bW0xMworCXBzcmxxCSQ2MywgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW0xCisJcHNsbGRxCSQ4LCAleG1tMgorCXBzcmxkcQkkOCwgJXhtbTEKKwlwb3IJJXhtbTIsICV4bW0xMworCisgICAgICAgICMgUmVkdWN0aW9uCisKKwlwc2h1ZmQJJDB4MjQsICV4bW0xLCAleG1tMgorCXBjbXBlcWQgVFdPT05FKCVyaXApLCAleG1tMgorCXBhbmQJUE9MWSglcmlwKSwgJXhtbTIKKwlweG9yCSV4bW0yLCAleG1tMTMgICAgICMgJXhtbTEzIGhvbGRzIHRoZSBIYXNoS2V5PDwxIChtb2QgcG9seSkKKworCisgICAgICAgICMgRGVjcnlwdCBmaXJzdCBmZXcgYmxvY2tzCisKKwltb3ZkcWEgJXhtbTEzLCBIYXNoS2V5KCVyc3ApICAgICAgICAgICAjIHN0b3JlIEhhc2hLZXk8PDEgKG1vZCBwb2x5KQorCW1vdiAlYXJnNCwgJXIxMyAgICAjIHNhdmUgdGhlIG51bWJlciBvZiBieXRlcyBvZiBwbGFpbnRleHQvY2lwaGVydGV4dAorCWFuZCAkLTE2LCAlcjEzICAgICAgICAgICAgICAgICAgICAgICMgJXIxMyA9ICVyMTMgLSAoJXIxMyBtb2QgMTYpCisJbW92ICVyMTMsICVyMTIKKwlhbmQgJCgzPDw0KSwgJXIxMgorCWp6IF9pbml0aWFsX251bV9ibG9ja3NfaXNfMF9kZWNyeXB0CisJY21wICQoMjw8NCksICVyMTIKKwlqYiBfaW5pdGlhbF9udW1fYmxvY2tzX2lzXzFfZGVjcnlwdAorCWplIF9pbml0aWFsX251bV9ibG9ja3NfaXNfMl9kZWNyeXB0CitfaW5pdGlhbF9udW1fYmxvY2tzX2lzXzNfZGVjcnlwdDoKKwlJTklUSUFMX0JMT0NLU19ERUMgMywgJXhtbTksICV4bW0xMCwgJXhtbTEzLCAleG1tMTEsICV4bW0xMiwgJXhtbTAsIFwKKyV4bW0xLCAleG1tMiwgJXhtbTMsICV4bW00LCAleG1tOCwgJXhtbTUsICV4bW02LCA1LCA2NzgsIGRlYworCXN1YgkkNDgsICVyMTMKKwlqbXAJX2luaXRpYWxfYmxvY2tzX2RlY3J5cHRlZAorX2luaXRpYWxfbnVtX2Jsb2Nrc19pc18yX2RlY3J5cHQ6CisJSU5JVElBTF9CTE9DS1NfREVDCTIsICV4bW05LCAleG1tMTAsICV4bW0xMywgJXhtbTExLCAleG1tMTIsICV4bW0wLCBcCisleG1tMSwgJXhtbTIsICV4bW0zLCAleG1tNCwgJXhtbTgsICV4bW01LCAleG1tNiwgNiwgNzgsIGRlYworCXN1YgkkMzIsICVyMTMKKwlqbXAJX2luaXRpYWxfYmxvY2tzX2RlY3J5cHRlZAorX2luaXRpYWxfbnVtX2Jsb2Nrc19pc18xX2RlY3J5cHQ6CisJSU5JVElBTF9CTE9DS1NfREVDCTEsICV4bW05LCAleG1tMTAsICV4bW0xMywgJXhtbTExLCAleG1tMTIsICV4bW0wLCBcCisleG1tMSwgJXhtbTIsICV4bW0zLCAleG1tNCwgJXhtbTgsICV4bW01LCAleG1tNiwgNywgOCwgZGVjCisJc3ViCSQxNiwgJXIxMworCWptcAlfaW5pdGlhbF9ibG9ja3NfZGVjcnlwdGVkCitfaW5pdGlhbF9udW1fYmxvY2tzX2lzXzBfZGVjcnlwdDoKKwlJTklUSUFMX0JMT0NLU19ERUMJMCwgJXhtbTksICV4bW0xMCwgJXhtbTEzLCAleG1tMTEsICV4bW0xMiwgJXhtbTAsIFwKKyV4bW0xLCAleG1tMiwgJXhtbTMsICV4bW00LCAleG1tOCwgJXhtbTUsICV4bW02LCA4LCAwLCBkZWMKK19pbml0aWFsX2Jsb2Nrc19kZWNyeXB0ZWQ6CisJY21wCSQwLCAlcjEzCisJamUJX3plcm9fY2lwaGVyX2xlZnRfZGVjcnlwdAorCXN1YgkkNjQsICVyMTMKKwlqZQlfZm91cl9jaXBoZXJfbGVmdF9kZWNyeXB0CitfZGVjcnlwdF9ieV80OgorCUdIQVNIXzRfRU5DUllQVF80X1BBUkFMTEVMX0RFQwkleG1tOSwgJXhtbTEwLCAleG1tMTEsICV4bW0xMiwgJXhtbTEzLCBcCisleG1tMTQsICV4bW0wLCAleG1tMSwgJXhtbTIsICV4bW0zLCAleG1tNCwgJXhtbTUsICV4bW02LCAleG1tNywgJXhtbTgsIGRlYworCWFkZAkkNjQsICVyMTEKKwlzdWIJJDY0LCAlcjEzCisJam5lCV9kZWNyeXB0X2J5XzQKK19mb3VyX2NpcGhlcl9sZWZ0X2RlY3J5cHQ6CisJR0hBU0hfTEFTVF80CSV4bW05LCAleG1tMTAsICV4bW0xMSwgJXhtbTEyLCAleG1tMTMsICV4bW0xNCwgXAorJXhtbTE1LCAleG1tMSwgJXhtbTIsICV4bW0zLCAleG1tNCwgJXhtbTgKK196ZXJvX2NpcGhlcl9sZWZ0X2RlY3J5cHQ6CisJbW92CSVhcmc0LCAlcjEzCisJYW5kCSQxNSwgJXIxMwkJCQkjICVyMTMgPSBhcmc0IChtb2QgMTYpCisJamUJX211bHRpcGxlX29mXzE2X2J5dGVzX2RlY3J5cHQKKworICAgICAgICAjIEhhbmRsZSB0aGUgbGFzdCA8MTYgYnl0ZSBibG9jayBzZXBlcmF0ZWx5CisKKwlwYWRkZCBPTkUoJXJpcCksICV4bW0wICAgICAgICAgIyBpbmNyZW1lbnQgQ05UIHRvIGdldCBZbgorICAgICAgICBtb3ZkcWEgU0hVRl9NQVNLKCVyaXApLCAleG1tMTAKKwlQU0hVRkJfWE1NICV4bW0xMCwgJXhtbTAKKworCUVOQ1JZUFRfU0lOR0xFX0JMT0NLICAleG1tMCwgJXhtbTEgICAgIyBFKEssIFluKQorCXN1YiAkMTYsICVyMTEKKwlhZGQgJXIxMywgJXIxMQorCW1vdmRxdSAoJWFyZzMsJXIxMSwxKSwgJXhtbTEgICAjIHJlY2lldmUgdGhlIGxhc3QgPDE2IGJ5dGUgYmxvY2sKKwlsZWEgU0hJRlRfTUFTSysxNiglcmlwKSwgJXIxMgorCXN1YiAlcjEzLCAlcjEyCisjIGFkanVzdCB0aGUgc2h1ZmZsZSBtYXNrIHBvaW50ZXIgdG8gYmUgYWJsZSB0byBzaGlmdCAxNi0lcjEzIGJ5dGVzCisjICglcjEzIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gcGxhaW50ZXh0IG1vZCAxNikKKwltb3ZkcXUgKCVyMTIpLCAleG1tMiAgICAgICAgICAgIyBnZXQgdGhlIGFwcHJvcHJpYXRlIHNodWZmbGUgbWFzaworCVBTSFVGQl9YTU0gJXhtbTIsICV4bW0xICAgICAgICAgICAgIyByaWdodCBzaGlmdCAxNi0lcjEzIGJ1dGVzCisKKwltb3ZkcWEgICV4bW0xLCAleG1tMgorCXB4b3IgJXhtbTEsICV4bW0wICAgICAgICAgICAgIyBDaXBoZXJ0ZXh0IFhPUiBFKEssIFluKQorCW1vdmRxdSBBTExfRi1TSElGVF9NQVNLKCVyMTIpLCAleG1tMQorCSMgZ2V0IHRoZSBhcHByb3ByaWF0ZSBtYXNrIHRvIG1hc2sgb3V0IHRvcCAxNi0lcjEzIGJ5dGVzIG9mICV4bW0wCisJcGFuZCAleG1tMSwgJXhtbTAgICAgICAgICAgICAjIG1hc2sgb3V0IHRvcCAxNi0lcjEzIGJ5dGVzIG9mICV4bW0wCisJcGFuZCAgICAleG1tMSwgJXhtbTIKKyAgICAgICAgbW92ZHFhIFNIVUZfTUFTSyglcmlwKSwgJXhtbTEwCisJUFNIVUZCX1hNTSAleG1tMTAgLCV4bW0yCisKKwlweG9yICV4bW0yLCAleG1tOAorCUdIQVNIX01VTCAleG1tOCwgJXhtbTEzLCAleG1tOSwgJXhtbTEwLCAleG1tMTEsICV4bW01LCAleG1tNgorCSAgICAgICAgICAjIEdIQVNIIGNvbXB1dGF0aW9uIGZvciB0aGUgbGFzdCA8MTYgYnl0ZSBibG9jaworCXN1YiAlcjEzLCAlcjExCisJYWRkICQxNiwgJXIxMQorCisgICAgICAgICMgb3V0cHV0ICVyMTMgYnl0ZXMKKwlNT1ZRX1I2NF9YTU0JJXhtbTAsICVyYXgKKwljbXAJJDgsICVyMTMKKwlqbGUJX2xlc3NfdGhhbl84X2J5dGVzX2xlZnRfZGVjcnlwdAorCW1vdgklcmF4LCAoJWFyZzIgLCAlcjExLCAxKQorCWFkZAkkOCwgJXIxMQorCXBzcmxkcQkkOCwgJXhtbTAKKwlNT1ZRX1I2NF9YTU0JJXhtbTAsICVyYXgKKwlzdWIJJDgsICVyMTMKK19sZXNzX3RoYW5fOF9ieXRlc19sZWZ0X2RlY3J5cHQ6CisJbW92CSVhbCwgICglYXJnMiwgJXIxMSwgMSkKKwlhZGQJJDEsICVyMTEKKwlzaHIJJDgsICVyYXgKKwlzdWIJJDEsICVyMTMKKwlqbmUJX2xlc3NfdGhhbl84X2J5dGVzX2xlZnRfZGVjcnlwdAorX211bHRpcGxlX29mXzE2X2J5dGVzX2RlY3J5cHQ6CisJbW92CWFyZzgsICVyMTIJCSAgIyAlcjEzID0gYWFkTGVuIChudW1iZXIgb2YgYnl0ZXMpCisJc2hsCSQzLCAlcjEyCQkgICMgY29udmVydCBpbnRvIG51bWJlciBvZiBiaXRzCisJbW92ZAklcjEyZCwgJXhtbTE1CQkgICMgbGVuKEEpIGluICV4bW0xNQorCXNobAkkMywgJWFyZzQJCSAgIyBsZW4oQykgaW4gYml0cyAoKjEyOCkKKwlNT1ZRX1I2NF9YTU0JJWFyZzQsICV4bW0xCisJcHNsbGRxCSQ4LCAleG1tMTUJCSAgIyAleG1tMTUgPSBsZW4oQSl8fDB4MDAwMDAwMDAwMDAwMDAwMAorCXB4b3IJJXhtbTEsICV4bW0xNQkJICAjICV4bW0xNSA9IGxlbihBKXx8bGVuKEMpCisJcHhvcgkleG1tMTUsICV4bW04CisJR0hBU0hfTVVMCSV4bW04LCAleG1tMTMsICV4bW05LCAleG1tMTAsICV4bW0xMSwgJXhtbTUsICV4bW02CisJICAgICAgICAgIyBmaW5hbCBHSEFTSCBjb21wdXRhdGlvbgorICAgICAgICBtb3ZkcWEgU0hVRl9NQVNLKCVyaXApLCAleG1tMTAKKwlQU0hVRkJfWE1NICV4bW0xMCwgJXhtbTgKKworCW1vdgklYXJnNSwgJXJheAkJICAjICVyYXggPSAqWTAKKwltb3ZkcXUJKCVyYXgpLCAleG1tMAkJICAjICV4bW0wID0gWTAKKwlFTkNSWVBUX1NJTkdMRV9CTE9DSwkleG1tMCwgICV4bW0xCSAgIyBFKEssIFkwKQorCXB4b3IJJXhtbTgsICV4bW0wCitfcmV0dXJuX1RfZGVjcnlwdDoKKwltb3YJYXJnOSwgJXIxMCAgICAgICAgICAgICAgICAjICVyMTAgPSBhdXRoVGFnCisJbW92CWFyZzEwLCAlcjExICAgICAgICAgICAgICAgIyAlcjExID0gYXV0aF90YWdfbGVuCisJY21wCSQxNiwgJXIxMQorCWplCV9UXzE2X2RlY3J5cHQKKwljbXAJJDEyLCAlcjExCisJamUJX1RfMTJfZGVjcnlwdAorX1RfOF9kZWNyeXB0OgorCU1PVlFfUjY0X1hNTQkleG1tMCwgJXJheAorCW1vdgklcmF4LCAoJXIxMCkKKwlqbXAJX3JldHVybl9UX2RvbmVfZGVjcnlwdAorX1RfMTJfZGVjcnlwdDoKKwlNT1ZRX1I2NF9YTU0JJXhtbTAsICVyYXgKKwltb3YJJXJheCwgKCVyMTApCisJcHNybGRxCSQ4LCAleG1tMAorCW1vdmQJJXhtbTAsICVlYXgKKwltb3YJJWVheCwgOCglcjEwKQorCWptcAlfcmV0dXJuX1RfZG9uZV9kZWNyeXB0CitfVF8xNl9kZWNyeXB0OgorCW1vdmRxdQkleG1tMCwgKCVyMTApCitfcmV0dXJuX1RfZG9uZV9kZWNyeXB0OgorCW1vdgklcjE0LCAlcnNwCisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcmV0CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIHZvaWQgYWVzbmlfZ2NtX2VuYyh2b2lkICphZXNfY3R4LCAgICAgIC8vIEFFUyBLZXkgc2NoZWR1bGUuIFN0YXJ0cyBvbiBhIDE2IGJ5dGUgYm91bmRhcnkuCisqICAgICAgICAgICAgICAgICAgICB1OCAqb3V0LCAgICAgICAgICAgIC8vIENpcGhlcnRleHQgb3V0cHV0LiBFbmNyeXB0IGluLXBsYWNlIGlzIGFsbG93ZWQuCisqICAgICAgICAgICAgICAgICAgICBjb25zdCB1OCAqaW4sICAgICAgIC8vIFBsYWludGV4dCBpbnB1dAorKiAgICAgICAgICAgICAgICAgICAgdTY0IHBsYWludGV4dF9sZW4sICAvLyBMZW5ndGggb2YgZGF0YSBpbiBieXRlcyBmb3IgZW5jcnlwdGlvbi4KKyogICAgICAgICAgICAgICAgICAgIHU4ICppdiwgICAgICAgICAgICAgLy8gUHJlLWNvdW50ZXIgYmxvY2sgajA6IDQgYnl0ZSBzYWx0IChmcm9tIFNlY3VyaXR5IEFzc29jaWF0aW9uKQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25jYXRlbmF0ZWQgd2l0aCA4IGJ5dGUgSW5pdGlhbGlzYXRpb24gVmVjdG9yIChmcm9tIElQU2VjIEVTUCBQYXlsb2FkKQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25jYXRlbmF0ZWQgd2l0aCAweDAwMDAwMDAxLiAxNi1ieXRlIGFsaWduZWQgcG9pbnRlci4KKyogICAgICAgICAgICAgICAgICAgIHU4ICpoYXNoX3N1YmtleSwgICAgLy8gSCwgdGhlIEhhc2ggc3ViIGtleSBpbnB1dC4gRGF0YSBzdGFydHMgb24gYSAxNi1ieXRlIGJvdW5kYXJ5LgorKiAgICAgICAgICAgICAgICAgICAgY29uc3QgdTggKmFhZCwgICAgICAvLyBBZGRpdGlvbmFsIEF1dGhlbnRpY2F0aW9uIERhdGEgKEFBRCkKKyogICAgICAgICAgICAgICAgICAgIHU2NCBhYWRfbGVuLCAgICAgICAgLy8gTGVuZ3RoIG9mIEFBRCBpbiBieXRlcy4gV2l0aCBSRkM0MTA2IHRoaXMgaXMgZ29pbmcgdG8gYmUgOCBvciAxMiBieXRlcworKiAgICAgICAgICAgICAgICAgICAgdTggKmF1dGhfdGFnLCAgICAgICAvLyBBdXRoZW50aWNhdGVkIFRhZyBvdXRwdXQuCisqICAgICAgICAgICAgICAgICAgICB1NjQgYXV0aF90YWdfbGVuKTsgIC8vIEF1dGhlbnRpY2F0ZWQgVGFnIExlbmd0aCBpbiBieXRlcy4gVmFsaWQgdmFsdWVzIGFyZSAxNiAobW9zdCBsaWtlbHkpLAorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMiBvciA4LgorKgorKiBBc3N1bXB0aW9uczoKKyoKKyoga2V5czoKKyogICAgICAga2V5cyBhcmUgcHJlLWV4cGFuZGVkIGFuZCBhbGlnbmVkIHRvIDE2IGJ5dGVzLiB3ZSBhcmUgdXNpbmcgdGhlCisqICAgICAgIGZpcnN0IHNldCBvZiAxMSBrZXlzIGluIHRoZSBkYXRhIHN0cnVjdHVyZSB2b2lkICphZXNfY3R4CisqCisqCisqIGl2OgorKiAgICAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisqICAgICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQorKiAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworKiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYWx0ICAoRnJvbSB0aGUgU0EpICAgICAgICAgICAgICAgfAorKiAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworKiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6YXRpb24gVmVjdG9yICAgICAgICAgICAgICAgICAgICAgfAorKiAgICAgICB8ICAgICAgICAgKFRoaXMgaXMgdGhlIHNlcXVlbmNlIG51bWJlciBmcm9tIElQU2VjIGhlYWRlcikgICAgICAgfAorKiAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworKiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKiAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworKgorKgorKgorKiBBQUQ6CisqICAgICAgIEFBRCBwYWRkZWQgdG8gMTI4IGJpdHMgd2l0aCAwCisqICAgICAgIGZvciBleGFtcGxlLCBhc3N1bWUgQUFEIGlzIGEgdTMyIHZlY3RvcgorKgorKiAgICAgICBpZiBBQUQgaXMgOCBieXRlczoKKyogICAgICAgQUFEWzNdID0ge0EwLCBBMX07CisqICAgICAgIHBhZGRlZCBBQUQgaW4geG1tIHJlZ2lzdGVyID0ge0ExIEEwIDAgMH0KKyoKKyogICAgICAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMworKiAgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyogICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUEkgKEExKSAgICAgICAgICAgICAgICAgICAgICAgIHwKKyogICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyogICAgICAgfCAgICAgICAgICAgICAgICAgICAgIDMyLWJpdCBTZXF1ZW5jZSBOdW1iZXIgKEEwKSAgICAgICAgICAgICAgIHwKKyogICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyogICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQUQgRm9ybWF0IHdpdGggMzItYml0IFNlcXVlbmNlIE51bWJlcgorKgorKiAgICAgICBpZiBBQUQgaXMgMTIgYnl0ZXM6CisqICAgICAgIEFBRFszXSA9IHtBMCwgQTEsIEEyfTsKKyogICAgICAgcGFkZGVkIEFBRCBpbiB4bW0gcmVnaXN0ZXIgPSB7QTIgQTEgQTAgMH0KKyoKKyogICAgICAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMworKiAgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyogICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUEkgKEEyKSAgICAgICAgICAgICAgICAgICAgICAgIHwKKyogICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyogICAgICAgfCAgICAgICAgICAgICAgICAgNjQtYml0IEV4dGVuZGVkIFNlcXVlbmNlIE51bWJlciB7QTEsQTB9ICAgICAgIHwKKyogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyogICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyogICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyoKKyogICAgICAgICAgICAgICAgICAgICAgICAgQUFEIEZvcm1hdCB3aXRoIDY0LWJpdCBFeHRlbmRlZCBTZXF1ZW5jZSBOdW1iZXIKKyoKKyogYWFkTGVuOgorKiAgICAgICBmcm9tIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBzcGVjLCBhYWRMZW4gY2FuIG9ubHkgYmUgOCBvciAxMiBieXRlcy4KKyogICAgICAgVGhlIGNvZGUgc3VwcG9ydHMgMTYgdG9vIGJ1dCBmb3Igb3RoZXIgc2l6ZXMsIHRoZSBjb2RlIHdpbGwgZmFpbC4KKyoKKyogVExlbjoKKyogICAgICAgZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3BlYywgVExlbiBjYW4gb25seSBiZSA4LCAxMiBvciAxNiBieXRlcy4KKyogICAgICAgRm9yIG90aGVyIHNpemVzLCB0aGUgY29kZSB3aWxsIGZhaWwuCisqCisqIHBvbHkgPSB4XjEyOCArIHheMTI3ICsgeF4xMjYgKyB4XjEyMSArIDEKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0VOVFJZKGFlc25pX2djbV9lbmMpCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJbW92CSVyc3AsICVyMTQKKyMKKyMgc3RhdGVzIG9mICV4bW0gcmVnaXN0ZXJzICV4bW02OiV4bW0xNSBub3Qgc2F2ZWQKKyMgYWxsICV4bW0gcmVnaXN0ZXJzIGFyZSBjbG9iYmVyZWQKKyMKKwlzdWIJJFZBUklBQkxFX09GRlNFVCwgJXJzcAorCWFuZAkkfjYzLCAlcnNwCisJbW92CSVhcmc2LCAlcjEyCisJbW92ZHF1CSglcjEyKSwgJXhtbTEzCisgICAgICAgIG1vdmRxYSAgU0hVRl9NQVNLKCVyaXApLCAleG1tMgorCVBTSFVGQl9YTU0gJXhtbTIsICV4bW0xMworCisKKyMgcHJlY29tcHV0ZSBIYXNoS2V5PDwxIG1vZCBwb2x5IGZyb20gdGhlIEhhc2hLZXkgKHJlcXVpcmVkIGZvciBHSEFTSCkKKworCW1vdmRxYQkleG1tMTMsICV4bW0yCisJcHNsbHEJJDEsICV4bW0xMworCXBzcmxxCSQ2MywgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW0xCisJcHNsbGRxCSQ4LCAleG1tMgorCXBzcmxkcQkkOCwgJXhtbTEKKwlwb3IJJXhtbTIsICV4bW0xMworCisgICAgICAgICMgcmVkdWNlIEhhc2hLZXk8PDEKKworCXBzaHVmZAkkMHgyNCwgJXhtbTEsICV4bW0yCisJcGNtcGVxZCBUV09PTkUoJXJpcCksICV4bW0yCisJcGFuZAlQT0xZKCVyaXApLCAleG1tMgorCXB4b3IJJXhtbTIsICV4bW0xMworCW1vdmRxYQkleG1tMTMsIEhhc2hLZXkoJXJzcCkKKwltb3YJJWFyZzQsICVyMTMgICAgICAgICAgICAjICV4bW0xMyBob2xkcyBIYXNoS2V5PDwxIChtb2QgcG9seSkKKwlhbmQJJC0xNiwgJXIxMworCW1vdgklcjEzLCAlcjEyCisKKyAgICAgICAgIyBFbmNyeXB0IGZpcnN0IGZldyBibG9ja3MKKworCWFuZAkkKDM8PDQpLCAlcjEyCisJanoJX2luaXRpYWxfbnVtX2Jsb2Nrc19pc18wX2VuY3J5cHQKKwljbXAJJCgyPDw0KSwgJXIxMgorCWpiCV9pbml0aWFsX251bV9ibG9ja3NfaXNfMV9lbmNyeXB0CisJamUJX2luaXRpYWxfbnVtX2Jsb2Nrc19pc18yX2VuY3J5cHQKK19pbml0aWFsX251bV9ibG9ja3NfaXNfM19lbmNyeXB0OgorCUlOSVRJQUxfQkxPQ0tTX0VOQwkzLCAleG1tOSwgJXhtbTEwLCAleG1tMTMsICV4bW0xMSwgJXhtbTEyLCAleG1tMCwgXAorJXhtbTEsICV4bW0yLCAleG1tMywgJXhtbTQsICV4bW04LCAleG1tNSwgJXhtbTYsIDUsIDY3OCwgZW5jCisJc3ViCSQ0OCwgJXIxMworCWptcAlfaW5pdGlhbF9ibG9ja3NfZW5jcnlwdGVkCitfaW5pdGlhbF9udW1fYmxvY2tzX2lzXzJfZW5jcnlwdDoKKwlJTklUSUFMX0JMT0NLU19FTkMJMiwgJXhtbTksICV4bW0xMCwgJXhtbTEzLCAleG1tMTEsICV4bW0xMiwgJXhtbTAsIFwKKyV4bW0xLCAleG1tMiwgJXhtbTMsICV4bW00LCAleG1tOCwgJXhtbTUsICV4bW02LCA2LCA3OCwgZW5jCisJc3ViCSQzMiwgJXIxMworCWptcAlfaW5pdGlhbF9ibG9ja3NfZW5jcnlwdGVkCitfaW5pdGlhbF9udW1fYmxvY2tzX2lzXzFfZW5jcnlwdDoKKwlJTklUSUFMX0JMT0NLU19FTkMJMSwgJXhtbTksICV4bW0xMCwgJXhtbTEzLCAleG1tMTEsICV4bW0xMiwgJXhtbTAsIFwKKyV4bW0xLCAleG1tMiwgJXhtbTMsICV4bW00LCAleG1tOCwgJXhtbTUsICV4bW02LCA3LCA4LCBlbmMKKwlzdWIJJDE2LCAlcjEzCisJam1wCV9pbml0aWFsX2Jsb2Nrc19lbmNyeXB0ZWQKK19pbml0aWFsX251bV9ibG9ja3NfaXNfMF9lbmNyeXB0OgorCUlOSVRJQUxfQkxPQ0tTX0VOQwkwLCAleG1tOSwgJXhtbTEwLCAleG1tMTMsICV4bW0xMSwgJXhtbTEyLCAleG1tMCwgXAorJXhtbTEsICV4bW0yLCAleG1tMywgJXhtbTQsICV4bW04LCAleG1tNSwgJXhtbTYsIDgsIDAsIGVuYworX2luaXRpYWxfYmxvY2tzX2VuY3J5cHRlZDoKKworICAgICAgICAjIE1haW4gbG9vcCAtIEVuY3J5cHQgcmVtYWluaW5nIGJsb2NrcworCisJY21wCSQwLCAlcjEzCisJamUJX3plcm9fY2lwaGVyX2xlZnRfZW5jcnlwdAorCXN1YgkkNjQsICVyMTMKKwlqZQlfZm91cl9jaXBoZXJfbGVmdF9lbmNyeXB0CitfZW5jcnlwdF9ieV80X2VuY3J5cHQ6CisJR0hBU0hfNF9FTkNSWVBUXzRfUEFSQUxMRUxfRU5DCSV4bW05LCAleG1tMTAsICV4bW0xMSwgJXhtbTEyLCAleG1tMTMsIFwKKyV4bW0xNCwgJXhtbTAsICV4bW0xLCAleG1tMiwgJXhtbTMsICV4bW00LCAleG1tNSwgJXhtbTYsICV4bW03LCAleG1tOCwgZW5jCisJYWRkCSQ2NCwgJXIxMQorCXN1YgkkNjQsICVyMTMKKwlqbmUJX2VuY3J5cHRfYnlfNF9lbmNyeXB0CitfZm91cl9jaXBoZXJfbGVmdF9lbmNyeXB0OgorCUdIQVNIX0xBU1RfNAkleG1tOSwgJXhtbTEwLCAleG1tMTEsICV4bW0xMiwgJXhtbTEzLCAleG1tMTQsIFwKKyV4bW0xNSwgJXhtbTEsICV4bW0yLCAleG1tMywgJXhtbTQsICV4bW04CitfemVyb19jaXBoZXJfbGVmdF9lbmNyeXB0OgorCW1vdgklYXJnNCwgJXIxMworCWFuZAkkMTUsICVyMTMJCQkjICVyMTMgPSBhcmc0IChtb2QgMTYpCisJamUJX211bHRpcGxlX29mXzE2X2J5dGVzX2VuY3J5cHQKKworICAgICAgICAgIyBIYW5kbGUgdGhlIGxhc3QgPDE2IEJ5dGUgYmxvY2sgc2VwZXJhdGVseQorCXBhZGRkIE9ORSglcmlwKSwgJXhtbTAgICAgICAgICAgICAgICAgIyBJTkNSIENOVCB0byBnZXQgWW4KKyAgICAgICAgbW92ZHFhIFNIVUZfTUFTSyglcmlwKSwgJXhtbTEwCisJUFNIVUZCX1hNTSAleG1tMTAsICV4bW0wCisKKwlFTkNSWVBUX1NJTkdMRV9CTE9DSwkleG1tMCwgJXhtbTEgICAgICAgICMgRW5jcnlwdChLLCBZbikKKwlzdWIgJDE2LCAlcjExCisJYWRkICVyMTMsICVyMTEKKwltb3ZkcXUgKCVhcmczLCVyMTEsMSksICV4bW0xICAgICAjIHJlY2VpdmUgdGhlIGxhc3QgPDE2IGJ5dGUgYmxvY2tzCisJbGVhIFNISUZUX01BU0srMTYoJXJpcCksICVyMTIKKwlzdWIgJXIxMywgJXIxMgorCSMgYWRqdXN0IHRoZSBzaHVmZmxlIG1hc2sgcG9pbnRlciB0byBiZSBhYmxlIHRvIHNoaWZ0IDE2LXIxMyBieXRlcworCSMgKCVyMTMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBpbiBwbGFpbnRleHQgbW9kIDE2KQorCW1vdmRxdQkoJXIxMiksICV4bW0yICAgICAgICAgICAjIGdldCB0aGUgYXBwcm9wcmlhdGUgc2h1ZmZsZSBtYXNrCisJUFNIVUZCX1hNTQkleG1tMiwgJXhtbTEgICAgICAgICAgICAjIHNoaWZ0IHJpZ2h0IDE2LXIxMyBieXRlCisJcHhvcgkleG1tMSwgJXhtbTAgICAgICAgICAgICAjIFBsYWludGV4dCBYT1IgRW5jcnlwdChLLCBZbikKKwltb3ZkcXUJQUxMX0YtU0hJRlRfTUFTSyglcjEyKSwgJXhtbTEKKwkjIGdldCB0aGUgYXBwcm9wcmlhdGUgbWFzayB0byBtYXNrIG91dCB0b3AgMTYtcjEzIGJ5dGVzIG9mIHhtbTAKKwlwYW5kCSV4bW0xLCAleG1tMCAgICAgICAgICAgICMgbWFzayBvdXQgdG9wIDE2LXIxMyBieXRlcyBvZiB4bW0wCisgICAgICAgIG1vdmRxYSBTSFVGX01BU0soJXJpcCksICV4bW0xMAorCVBTSFVGQl9YTU0gJXhtbTEwLCV4bW0wCisKKwlweG9yCSV4bW0wLCAleG1tOAorCUdIQVNIX01VTCAleG1tOCwgJXhtbTEzLCAleG1tOSwgJXhtbTEwLCAleG1tMTEsICV4bW01LCAleG1tNgorCSMgR0hBU0ggY29tcHV0YXRpb24gZm9yIHRoZSBsYXN0IDwxNiBieXRlIGJsb2NrCisJc3ViCSVyMTMsICVyMTEKKwlhZGQJJDE2LCAlcjExCisJUFNIVUZCX1hNTSAleG1tMTAsICV4bW0xCisKKwkjIHNodWZmbGUgeG1tMCBiYWNrIHRvIG91dHB1dCBhcyBjaXBoZXJ0ZXh0CisKKyAgICAgICAgIyBPdXRwdXQgJXIxMyBieXRlcworCU1PVlFfUjY0X1hNTSAleG1tMCwgJXJheAorCWNtcCAkOCwgJXIxMworCWpsZSBfbGVzc190aGFuXzhfYnl0ZXNfbGVmdF9lbmNyeXB0CisJbW92ICVyYXgsICglYXJnMiAsICVyMTEsIDEpCisJYWRkICQ4LCAlcjExCisJcHNybGRxICQ4LCAleG1tMAorCU1PVlFfUjY0X1hNTSAleG1tMCwgJXJheAorCXN1YiAkOCwgJXIxMworX2xlc3NfdGhhbl84X2J5dGVzX2xlZnRfZW5jcnlwdDoKKwltb3YgJWFsLCAgKCVhcmcyLCAlcjExLCAxKQorCWFkZCAkMSwgJXIxMQorCXNociAkOCwgJXJheAorCXN1YiAkMSwgJXIxMworCWpuZSBfbGVzc190aGFuXzhfYnl0ZXNfbGVmdF9lbmNyeXB0CitfbXVsdGlwbGVfb2ZfMTZfYnl0ZXNfZW5jcnlwdDoKKwltb3YJYXJnOCwgJXIxMiAgICAjICVyMTIgPSBhZGRMZW4gKG51bWJlciBvZiBieXRlcykKKwlzaGwJJDMsICVyMTIKKwltb3ZkCSVyMTJkLCAleG1tMTUgICAgICAgIyBsZW4oQSkgaW4gJXhtbTE1CisJc2hsCSQzLCAlYXJnNCAgICAgICAgICAgICAgICMgbGVuKEMpIGluIGJpdHMgKCoxMjgpCisJTU9WUV9SNjRfWE1NCSVhcmc0LCAleG1tMQorCXBzbGxkcQkkOCwgJXhtbTE1ICAgICAgICAgICMgJXhtbTE1ID0gbGVuKEEpfHwweDAwMDAwMDAwMDAwMDAwMDAKKwlweG9yCSV4bW0xLCAleG1tMTUgICAgICAgIyAleG1tMTUgPSBsZW4oQSl8fGxlbihDKQorCXB4b3IJJXhtbTE1LCAleG1tOAorCUdIQVNIX01VTAkleG1tOCwgJXhtbTEzLCAleG1tOSwgJXhtbTEwLCAleG1tMTEsICV4bW01LCAleG1tNgorCSMgZmluYWwgR0hBU0ggY29tcHV0YXRpb24KKyAgICAgICAgbW92ZHFhIFNIVUZfTUFTSyglcmlwKSwgJXhtbTEwCisJUFNIVUZCX1hNTSAleG1tMTAsICV4bW04ICAgICAgICAgIyBwZXJmb3JtIGEgMTYgYnl0ZSBzd2FwCisKKwltb3YJJWFyZzUsICVyYXgJCSAgICAgICAjICVyYXggID0gKlkwCisJbW92ZHF1CSglcmF4KSwgJXhtbTAJCSAgICAgICAjICV4bW0wID0gWTAKKwlFTkNSWVBUX1NJTkdMRV9CTE9DSwkleG1tMCwgJXhtbTE1ICAgICAgICAgIyBFbmNyeXB0KEssIFkwKQorCXB4b3IJJXhtbTgsICV4bW0wCitfcmV0dXJuX1RfZW5jcnlwdDoKKwltb3YJYXJnOSwgJXIxMCAgICAgICAgICAgICAgICAgICAgICMgJXIxMCA9IGF1dGhUYWcKKwltb3YJYXJnMTAsICVyMTEgICAgICAgICAgICAgICAgICAgICMgJXIxMSA9IGF1dGhfdGFnX2xlbgorCWNtcAkkMTYsICVyMTEKKwlqZQlfVF8xNl9lbmNyeXB0CisJY21wCSQxMiwgJXIxMQorCWplCV9UXzEyX2VuY3J5cHQKK19UXzhfZW5jcnlwdDoKKwlNT1ZRX1I2NF9YTU0JJXhtbTAsICVyYXgKKwltb3YJJXJheCwgKCVyMTApCisJam1wCV9yZXR1cm5fVF9kb25lX2VuY3J5cHQKK19UXzEyX2VuY3J5cHQ6CisJTU9WUV9SNjRfWE1NCSV4bW0wLCAlcmF4CisJbW92CSVyYXgsICglcjEwKQorCXBzcmxkcQkkOCwgJXhtbTAKKwltb3ZkCSV4bW0wLCAlZWF4CisJbW92CSVlYXgsIDgoJXIxMCkKKwlqbXAJX3JldHVybl9UX2RvbmVfZW5jcnlwdAorX1RfMTZfZW5jcnlwdDoKKwltb3ZkcXUJJXhtbTAsICglcjEwKQorX3JldHVybl9UX2RvbmVfZW5jcnlwdDoKKwltb3YJJXIxNCwgJXJzcAorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXJldAorCisjZW5kaWYKKwogCiBfa2V5X2V4cGFuc2lvbl8xMjg6CiBfa2V5X2V4cGFuc2lvbl8yNTZhOgpAQCAtNTUsMTAgKzE3MDksMTEgQEAKIAlzaHVmcHMgJDBiMTAwMDExMDAsICV4bW0wLCAleG1tNAogCXB4b3IgJXhtbTQsICV4bW0wCiAJcHhvciAleG1tMSwgJXhtbTAKLQltb3ZhcHMgJXhtbTAsICglcmN4KQotCWFkZCAkMHgxMCwgJXJjeAorCW1vdmFwcyAleG1tMCwgKFRLRVlQKQorCWFkZCAkMHgxMCwgVEtFWVAKIAlyZXQKIAorLmFsaWduIDQKIF9rZXlfZXhwYW5zaW9uXzE5MmE6CiAJcHNodWZkICQwYjAxMDEwMTAxLCAleG1tMSwgJXhtbTEKIAlzaHVmcHMgJDBiMDAwMTAwMDAsICV4bW0wLCAleG1tNApAQCAtNzYsMTIgKzE3MzEsMTMgQEAKIAogCW1vdmFwcyAleG1tMCwgJXhtbTEKIAlzaHVmcHMgJDBiMDEwMDAxMDAsICV4bW0wLCAleG1tNgotCW1vdmFwcyAleG1tNiwgKCVyY3gpCisJbW92YXBzICV4bW02LCAoVEtFWVApCiAJc2h1ZnBzICQwYjAxMDAxMTEwLCAleG1tMiwgJXhtbTEKLQltb3ZhcHMgJXhtbTEsIDE2KCVyY3gpCi0JYWRkICQweDIwLCAlcmN4CisJbW92YXBzICV4bW0xLCAweDEwKFRLRVlQKQorCWFkZCAkMHgyMCwgVEtFWVAKIAlyZXQKIAorLmFsaWduIDQKIF9rZXlfZXhwYW5zaW9uXzE5MmI6CiAJcHNodWZkICQwYjAxMDEwMTAxLCAleG1tMSwgJXhtbTEKIAlzaHVmcHMgJDBiMDAwMTAwMDAsICV4bW0wLCAleG1tNApAQCAtOTYsMTAgKzE3NTIsMTEgQEAKIAlweG9yICV4bW0zLCAleG1tMgogCXB4b3IgJXhtbTUsICV4bW0yCiAKLQltb3ZhcHMgJXhtbTAsICglcmN4KQotCWFkZCAkMHgxMCwgJXJjeAorCW1vdmFwcyAleG1tMCwgKFRLRVlQKQorCWFkZCAkMHgxMCwgVEtFWVAKIAlyZXQKIAorLmFsaWduIDQKIF9rZXlfZXhwYW5zaW9uXzI1NmI6CiAJcHNodWZkICQwYjEwMTAxMDEwLCAleG1tMSwgJXhtbTEKIAlzaHVmcHMgJDBiMDAwMTAwMDAsICV4bW0yLCAleG1tNApAQCAtMTA3LDggKzE3NjQsOCBAQAogCXNodWZwcyAkMGIxMDAwMTEwMCwgJXhtbTIsICV4bW00CiAJcHhvciAleG1tNCwgJXhtbTIKIAlweG9yICV4bW0xLCAleG1tMgotCW1vdmFwcyAleG1tMiwgKCVyY3gpCi0JYWRkICQweDEwLCAlcmN4CisJbW92YXBzICV4bW0yLCAoVEtFWVApCisJYWRkICQweDEwLCBUS0VZUAogCXJldAogCiAvKgpAQCAtMTE2LDE3ICsxNzczLDIzIEBACiAgKiAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKICAqLwogRU5UUlkoYWVzbmlfc2V0X2tleSkKLQltb3Z1cHMgKCVyc2kpLCAleG1tMAkJIyB1c2VyIGtleSAoZmlyc3QgMTYgYnl0ZXMpCi0JbW92YXBzICV4bW0wLCAoJXJkaSkKLQlsZWEgMHgxMCglcmRpKSwgJXJjeAkJIyBrZXkgYWRkcgotCW1vdmwgJWVkeCwgNDgwKCVyZGkpCisjaWZuZGVmIF9feDg2XzY0X18KKwlwdXNobCBLRVlQCisJbW92bCA4KCVlc3ApLCBLRVlQCQkjIGN0eAorCW1vdmwgMTIoJWVzcCksIFVLRVlQCQkjIGluX2tleQorCW1vdmwgMTYoJWVzcCksICVlZHgJCSMga2V5X2xlbgorI2VuZGlmCisJbW92dXBzIChVS0VZUCksICV4bW0wCQkjIHVzZXIga2V5IChmaXJzdCAxNiBieXRlcykKKwltb3ZhcHMgJXhtbTAsIChLRVlQKQorCWxlYSAweDEwKEtFWVApLCBUS0VZUAkJIyBrZXkgYWRkcgorCW1vdmwgJWVkeCwgNDgwKEtFWVApCiAJcHhvciAleG1tNCwgJXhtbTQJCSMgeG1tNCBpcyBhc3N1bWVkIDAgaW4gX2tleV9leHBhbnNpb25feAogCWNtcCAkMjQsICVkbAogCWpiIC5MZW5jX2tleTEyOAogCWplIC5MZW5jX2tleTE5MgotCW1vdnVwcyAweDEwKCVyc2kpLCAleG1tMgkjIG90aGVyIHVzZXIga2V5Ci0JbW92YXBzICV4bW0yLCAoJXJjeCkKLQlhZGQgJDB4MTAsICVyY3gKKwltb3Z1cHMgMHgxMChVS0VZUCksICV4bW0yCSMgb3RoZXIgdXNlciBrZXkKKwltb3ZhcHMgJXhtbTIsIChUS0VZUCkKKwlhZGQgJDB4MTAsIFRLRVlQCiAJQUVTS0VZR0VOQVNTSVNUIDB4MSAleG1tMiAleG1tMQkJIyByb3VuZCAxCiAJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCiAJQUVTS0VZR0VOQVNTSVNUIDB4MSAleG1tMCAleG1tMQpAQCAtMTU1LDcgKzE4MTgsNyBAQAogCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQogCWptcCAuTGRlY19rZXkKIC5MZW5jX2tleTE5MjoKLQltb3ZxIDB4MTAoJXJzaSksICV4bW0yCQkjIG90aGVyIHVzZXIga2V5CisJbW92cSAweDEwKFVLRVlQKSwgJXhtbTIJCSMgb3RoZXIgdXNlciBrZXkKIAlBRVNLRVlHRU5BU1NJU1QgMHgxICV4bW0yICV4bW0xCQkjIHJvdW5kIDEKIAljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmEKIAlBRVNLRVlHRU5BU1NJU1QgMHgyICV4bW0yICV4bW0xCQkjIHJvdW5kIDIKQEAgLTE5NSwzMyArMTg1OCw0NyBAQAogCUFFU0tFWUdFTkFTU0lTVCAweDM2ICV4bW0wICV4bW0xCSMgcm91bmQgMTAKIAljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAogLkxkZWNfa2V5OgotCXN1YiAkMHgxMCwgJXJjeAotCW1vdmFwcyAoJXJkaSksICV4bW0wCi0JbW92YXBzICglcmN4KSwgJXhtbTEKLQltb3ZhcHMgJXhtbTAsIDI0MCglcmN4KQotCW1vdmFwcyAleG1tMSwgMjQwKCVyZGkpCi0JYWRkICQweDEwLCAlcmRpCi0JbGVhIDI0MC0xNiglcmN4KSwgJXJzaQorCXN1YiAkMHgxMCwgVEtFWVAKKwltb3ZhcHMgKEtFWVApLCAleG1tMAorCW1vdmFwcyAoVEtFWVApLCAleG1tMQorCW1vdmFwcyAleG1tMCwgMjQwKFRLRVlQKQorCW1vdmFwcyAleG1tMSwgMjQwKEtFWVApCisJYWRkICQweDEwLCBLRVlQCisJbGVhIDI0MC0xNihUS0VZUCksIFVLRVlQCiAuYWxpZ24gNAogLkxkZWNfa2V5X2xvb3A6Ci0JbW92YXBzICglcmRpKSwgJXhtbTAKKwltb3ZhcHMgKEtFWVApLCAleG1tMAogCUFFU0lNQyAleG1tMCAleG1tMQotCW1vdmFwcyAleG1tMSwgKCVyc2kpCi0JYWRkICQweDEwLCAlcmRpCi0Jc3ViICQweDEwLCAlcnNpCi0JY21wICVyY3gsICVyZGkKKwltb3ZhcHMgJXhtbTEsIChVS0VZUCkKKwlhZGQgJDB4MTAsIEtFWVAKKwlzdWIgJDB4MTAsIFVLRVlQCisJY21wIFRLRVlQLCBLRVlQCiAJamIgLkxkZWNfa2V5X2xvb3AKLQl4b3IgJXJheCwgJXJheAorCXhvciBBUkVHLCBBUkVHCisjaWZuZGVmIF9feDg2XzY0X18KKwlwb3BsIEtFWVAKKyNlbmRpZgogCXJldAogCiAvKgogICogdm9pZCBhZXNuaV9lbmMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCiAgKi8KIEVOVFJZKGFlc25pX2VuYykKKyNpZm5kZWYgX194ODZfNjRfXworCXB1c2hsIEtFWVAKKwlwdXNobCBLTEVOCisJbW92bCAxMiglZXNwKSwgS0VZUAorCW1vdmwgMTYoJWVzcCksIE9VVFAKKwltb3ZsIDIwKCVlc3ApLCBJTlAKKyNlbmRpZgogCW1vdmwgNDgwKEtFWVApLCBLTEVOCQkjIGtleSBsZW5ndGgKIAltb3Z1cHMgKElOUCksIFNUQVRFCQkjIGlucHV0CiAJY2FsbCBfYWVzbmlfZW5jMQogCW1vdnVwcyBTVEFURSwgKE9VVFApCQkjIG91dHB1dAorI2lmbmRlZiBfX3g4Nl82NF9fCisJcG9wbCBLTEVOCisJcG9wbCBLRVlQCisjZW5kaWYKIAlyZXQKIAogLyoKQEAgLTIzNiw2ICsxOTEzLDcgQEAKICAqCUtFWQogICoJVEtFWVAgKFQxKQogICovCisuYWxpZ24gNAogX2Flc25pX2VuYzE6CiAJbW92YXBzIChLRVlQKSwgS0VZCQkjIGtleQogCW1vdiBLRVlQLCBUS0VZUApAQCAtMjk4LDYgKzE5NzYsNyBAQAogICoJS0VZCiAgKglUS0VZUCAoVDEpCiAgKi8KKy5hbGlnbiA0CiBfYWVzbmlfZW5jNDoKIAltb3ZhcHMgKEtFWVApLCBLRVkJCSMga2V5CiAJbW92IEtFWVAsIFRLRVlQCkBAIC0zOTEsMTEgKzIwNzAsMjIgQEAKICAqIHZvaWQgYWVzbmlfZGVjIChzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKICAqLwogRU5UUlkoYWVzbmlfZGVjKQorI2lmbmRlZiBfX3g4Nl82NF9fCisJcHVzaGwgS0VZUAorCXB1c2hsIEtMRU4KKwltb3ZsIDEyKCVlc3ApLCBLRVlQCisJbW92bCAxNiglZXNwKSwgT1VUUAorCW1vdmwgMjAoJWVzcCksIElOUAorI2VuZGlmCiAJbW92IDQ4MChLRVlQKSwgS0xFTgkJIyBrZXkgbGVuZ3RoCiAJYWRkICQyNDAsIEtFWVAKIAltb3Z1cHMgKElOUCksIFNUQVRFCQkjIGlucHV0CiAJY2FsbCBfYWVzbmlfZGVjMQogCW1vdnVwcyBTVEFURSwgKE9VVFApCQkjb3V0cHV0CisjaWZuZGVmIF9feDg2XzY0X18KKwlwb3BsIEtMRU4KKwlwb3BsIEtFWVAKKyNlbmRpZgogCXJldAogCiAvKgpAQCAtNDEwLDYgKzIxMDAsNyBAQAogICoJS0VZCiAgKglUS0VZUCAoVDEpCiAgKi8KKy5hbGlnbiA0CiBfYWVzbmlfZGVjMToKIAltb3ZhcHMgKEtFWVApLCBLRVkJCSMga2V5CiAJbW92IEtFWVAsIFRLRVlQCkBAIC00NzIsNiArMjE2Myw3IEBACiAgKglLRVkKICAqCVRLRVlQIChUMSkKICAqLworLmFsaWduIDQKIF9hZXNuaV9kZWM0OgogCW1vdmFwcyAoS0VZUCksIEtFWQkJIyBrZXkKIAltb3YgS0VZUCwgVEtFWVAKQEAgLTU2Niw2ICsyMjU4LDE1IEBACiAgKgkJICAgICAgc2l6ZV90IGxlbikKICAqLwogRU5UUlkoYWVzbmlfZWNiX2VuYykKKyNpZm5kZWYgX194ODZfNjRfXworCXB1c2hsIExFTgorCXB1c2hsIEtFWVAKKwlwdXNobCBLTEVOCisJbW92bCAxNiglZXNwKSwgS0VZUAorCW1vdmwgMjAoJWVzcCksIE9VVFAKKwltb3ZsIDI0KCVlc3ApLCBJTlAKKwltb3ZsIDI4KCVlc3ApLCBMRU4KKyNlbmRpZgogCXRlc3QgTEVOLCBMRU4JCSMgY2hlY2sgbGVuZ3RoCiAJanogLkxlY2JfZW5jX3JldAogCW1vdiA0ODAoS0VZUCksIEtMRU4KQEAgLTYwMiw2ICsyMzAzLDExIEBACiAJY21wICQxNiwgTEVOCiAJamdlIC5MZWNiX2VuY19sb29wMQogLkxlY2JfZW5jX3JldDoKKyNpZm5kZWYgX194ODZfNjRfXworCXBvcGwgS0xFTgorCXBvcGwgS0VZUAorCXBvcGwgTEVOCisjZW5kaWYKIAlyZXQKIAogLyoKQEAgLTYwOSw2ICsyMzE1LDE1IEBACiAgKgkJICAgICAgc2l6ZV90IGxlbik7CiAgKi8KIEVOVFJZKGFlc25pX2VjYl9kZWMpCisjaWZuZGVmIF9feDg2XzY0X18KKwlwdXNobCBMRU4KKwlwdXNobCBLRVlQCisJcHVzaGwgS0xFTgorCW1vdmwgMTYoJWVzcCksIEtFWVAKKwltb3ZsIDIwKCVlc3ApLCBPVVRQCisJbW92bCAyNCglZXNwKSwgSU5QCisJbW92bCAyOCglZXNwKSwgTEVOCisjZW5kaWYKIAl0ZXN0IExFTiwgTEVOCiAJanogLkxlY2JfZGVjX3JldAogCW1vdiA0ODAoS0VZUCksIEtMRU4KQEAgLTY0Niw2ICsyMzYxLDExIEBACiAJY21wICQxNiwgTEVOCiAJamdlIC5MZWNiX2RlY19sb29wMQogLkxlY2JfZGVjX3JldDoKKyNpZm5kZWYgX194ODZfNjRfXworCXBvcGwgS0xFTgorCXBvcGwgS0VZUAorCXBvcGwgTEVOCisjZW5kaWYKIAlyZXQKIAogLyoKQEAgLTY1Myw2ICsyMzczLDE3IEBACiAgKgkJICAgICAgc2l6ZV90IGxlbiwgdTggKml2KQogICovCiBFTlRSWShhZXNuaV9jYmNfZW5jKQorI2lmbmRlZiBfX3g4Nl82NF9fCisJcHVzaGwgSVZQCisJcHVzaGwgTEVOCisJcHVzaGwgS0VZUAorCXB1c2hsIEtMRU4KKwltb3ZsIDIwKCVlc3ApLCBLRVlQCisJbW92bCAyNCglZXNwKSwgT1VUUAorCW1vdmwgMjgoJWVzcCksIElOUAorCW1vdmwgMzIoJWVzcCksIExFTgorCW1vdmwgMzYoJWVzcCksIElWUAorI2VuZGlmCiAJY21wICQxNiwgTEVOCiAJamIgLkxjYmNfZW5jX3JldAogCW1vdiA0ODAoS0VZUCksIEtMRU4KQEAgLTY3MCw2ICsyNDAxLDEyIEBACiAJamdlIC5MY2JjX2VuY19sb29wCiAJbW92dXBzIFNUQVRFLCAoSVZQKQogLkxjYmNfZW5jX3JldDoKKyNpZm5kZWYgX194ODZfNjRfXworCXBvcGwgS0xFTgorCXBvcGwgS0VZUAorCXBvcGwgTEVOCisJcG9wbCBJVlAKKyNlbmRpZgogCXJldAogCiAvKgpAQCAtNjc3LDYgKzI0MTQsMTcgQEAKICAqCQkgICAgICBzaXplX3QgbGVuLCB1OCAqaXYpCiAgKi8KIEVOVFJZKGFlc25pX2NiY19kZWMpCisjaWZuZGVmIF9feDg2XzY0X18KKwlwdXNobCBJVlAKKwlwdXNobCBMRU4KKwlwdXNobCBLRVlQCisJcHVzaGwgS0xFTgorCW1vdmwgMjAoJWVzcCksIEtFWVAKKwltb3ZsIDI0KCVlc3ApLCBPVVRQCisJbW92bCAyOCglZXNwKSwgSU5QCisJbW92bCAzMiglZXNwKSwgTEVOCisJbW92bCAzNiglZXNwKSwgSVZQCisjZW5kaWYKIAljbXAgJDE2LCBMRU4KIAlqYiAuTGNiY19kZWNfanVzdF9yZXQKIAltb3YgNDgwKEtFWVApLCBLTEVOCkBAIC02OTAsMTYgKzI0MzgsMzAgQEAKIAltb3ZhcHMgSU4xLCBTVEFURTEKIAltb3Z1cHMgMHgxMChJTlApLCBJTjIKIAltb3ZhcHMgSU4yLCBTVEFURTIKKyNpZmRlZiBfX3g4Nl82NF9fCiAJbW92dXBzIDB4MjAoSU5QKSwgSU4zCiAJbW92YXBzIElOMywgU1RBVEUzCiAJbW92dXBzIDB4MzAoSU5QKSwgSU40CiAJbW92YXBzIElONCwgU1RBVEU0CisjZWxzZQorCW1vdnVwcyAweDIwKElOUCksIElOMQorCW1vdmFwcyBJTjEsIFNUQVRFMworCW1vdnVwcyAweDMwKElOUCksIElOMgorCW1vdmFwcyBJTjIsIFNUQVRFNAorI2VuZGlmCiAJY2FsbCBfYWVzbmlfZGVjNAogCXB4b3IgSVYsIFNUQVRFMQorI2lmZGVmIF9feDg2XzY0X18KIAlweG9yIElOMSwgU1RBVEUyCiAJcHhvciBJTjIsIFNUQVRFMwogCXB4b3IgSU4zLCBTVEFURTQKIAltb3ZhcHMgSU40LCBJVgorI2Vsc2UKKwlweG9yIChJTlApLCBTVEFURTIKKwlweG9yIDB4MTAoSU5QKSwgU1RBVEUzCisJcHhvciBJTjEsIFNUQVRFNAorCW1vdmFwcyBJTjIsIElWCisjZW5kaWYKIAltb3Z1cHMgU1RBVEUxLCAoT1VUUCkKIAltb3Z1cHMgU1RBVEUyLCAweDEwKE9VVFApCiAJbW92dXBzIFNUQVRFMywgMHgyMChPVVRQKQpAQCAtNzI3LDggKzI0ODksMTUgQEAKIC5MY2JjX2RlY19yZXQ6CiAJbW92dXBzIElWLCAoSVZQKQogLkxjYmNfZGVjX2p1c3RfcmV0OgorI2lmbmRlZiBfX3g4Nl82NF9fCisJcG9wbCBLTEVOCisJcG9wbCBLRVlQCisJcG9wbCBMRU4KKwlwb3BsIElWUAorI2VuZGlmCiAJcmV0CiAKKyNpZmRlZiBfX3g4Nl82NF9fCiAuYWxpZ24gMTYKIC5MYnN3YXBfbWFzazoKIAkuYnl0ZSAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwCkBAIC03NDQsNiArMjUxMyw3IEBACiAgKglJTkM6CT09IDEsIGluIGxpdHRsZSBlbmRpYW4KICAqCUJTV0FQX01BU0sgPT0gZW5kaWFuIHN3YXBwaW5nIG1hc2sKICAqLworLmFsaWduIDQKIF9hZXNuaV9pbmNfaW5pdDoKIAltb3ZhcHMgLkxic3dhcF9tYXNrLCBCU1dBUF9NQVNLCiAJbW92YXBzIElWLCBDVFIKQEAgLTc2OCw2ICsyNTM4LDcgQEAKICAqCUNUUjoJPT0gb3V0cHV0IElWLCBpbiBsaXR0bGUgZW5kaWFuCiAgKglUQ1RSX0xPVzogPT0gbG93ZXIgcXdvcmQgb2YgQ1RSCiAgKi8KKy5hbGlnbiA0CiBfYWVzbmlfaW5jOgogCXBhZGRxIElOQywgQ1RSCiAJYWRkICQxLCBUQ1RSX0xPVwpAQCAtODM5LDMgKzI2MTAsNCBAQAogCW1vdnVwcyBJViwgKElWUCkKIC5MY3RyX2VuY19qdXN0X3JldDoKIAlyZXQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKaW5kZXggMmNiM2RjYy4uZTFlNjBjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCkBAIC01LDYgKzUsMTQgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCwgSW50ZWwgQ29ycC4KICAqICAgIEF1dGhvcjogSHVhbmcgWWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+CiAgKgorICogQWRkZWQgUkZDNDEwNiBBRVMtR0NNIHN1cHBvcnQgZm9yIDEyOC1iaXQga2V5cyB1bmRlciB0aGUgQUVBRAorICogaW50ZXJmYWNlIGZvciA2NC1iaXQga2VybmVscy4KKyAqICAgIEF1dGhvcnM6IEFkcmlhbiBIb2JhbiA8YWRyaWFuLmhvYmFuQGludGVsLmNvbT4KKyAqICAgICAgICAgICAgIEdhYnJpZWxlIFBhb2xvbmkgPGdhYnJpZWxlLnBhb2xvbmlAaW50ZWwuY29tPgorICogICAgICAgICAgICAgVGFkZXVzeiBTdHJ1ayAodGFkZXVzei5zdHJ1a0BpbnRlbC5jb20pCisgKiAgICAgICAgICAgICBBaWRhbiBPJ01haG9ueSAoYWlkYW4uby5tYWhvbnlAaW50ZWwuY29tKQorICogICAgQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC0yMSw2ICsyOSwxMCBAQAogI2luY2x1ZGUgPGNyeXB0by9jdHIuaD4KICNpbmNsdWRlIDxhc20vaTM4Ny5oPgogI2luY2x1ZGUgPGFzbS9hZXMuaD4KKyNpbmNsdWRlIDxjcnlwdG8vc2NhdHRlcndhbGsuaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvYWVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19DUllQVE9fQ1RSKSB8fCBkZWZpbmVkKENPTkZJR19DUllQVE9fQ1RSX01PRFVMRSkKICNkZWZpbmUgSEFTX0NUUgpAQCAtNDIsOCArNTQsMzEgQEAKIAlzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF90Zm07CiB9OwogCi0jZGVmaW5lIEFFU05JX0FMSUdOCTE2CisvKiBUaGlzIGRhdGEgaXMgc3RvcmVkIGF0IHRoZSBlbmQgb2YgdGhlIGNyeXB0b190Zm0gc3RydWN0LgorICogSXQncyBhIHR5cGUgb2YgcGVyICJzZXNzaW9uIiBkYXRhIHN0b3JhZ2UgbG9jYXRpb24uCisgKiBUaGlzIG5lZWRzIHRvIGJlIDE2IGJ5dGUgYWxpZ25lZC4KKyAqLworc3RydWN0IGFlc25pX3JmYzQxMDZfZ2NtX2N0eCB7CisJdTggaGFzaF9zdWJrZXlbMTZdOworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCBhZXNfa2V5X2V4cGFuZGVkOworCXU4IG5vbmNlWzRdOworCXN0cnVjdCBjcnlwdGRfYWVhZCAqY3J5cHRkX3RmbTsKK307CisKK3N0cnVjdCBhZXNuaV9nY21fc2V0X2hhc2hfc3Via2V5X3Jlc3VsdCB7CisJaW50IGVycjsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uOworfTsKKworc3RydWN0IGFlc25pX2hhc2hfc3Via2V5X3JlcV9kYXRhIHsKKwl1OCBpdlsxNl07CisJc3RydWN0IGFlc25pX2djbV9zZXRfaGFzaF9zdWJrZXlfcmVzdWx0IHJlc3VsdDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7Cit9OworCisjZGVmaW5lIEFFU05JX0FMSUdOCSgxNikKICNkZWZpbmUgQUVTX0JMT0NLX01BU0sJKH4oQUVTX0JMT0NLX1NJWkUtMSkpCisjZGVmaW5lIFJGQzQxMDZfSEFTSF9TVUJLRVlfU0laRSAxNgogCiBhc21saW5rYWdlIGludCBhZXNuaV9zZXRfa2V5KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqaW5fa2V5LAogCQkJICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbik7CkBAIC01OSw5ICs5NCw2MiBAQAogCQkJICAgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYpOwogYXNtbGlua2FnZSB2b2lkIGFlc25pX2NiY19kZWMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCiAJCQkgICAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7CisjaWZkZWYgQ09ORklHX1g4Nl82NAogYXNtbGlua2FnZSB2b2lkIGFlc25pX2N0cl9lbmMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCiAJCQkgICAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7CiAKKy8qIGFzbWxpbmthZ2Ugdm9pZCBhZXNuaV9nY21fZW5jKCkKKyAqIHZvaWQgKmN0eCwgIEFFUyBLZXkgc2NoZWR1bGUuIFN0YXJ0cyBvbiBhIDE2IGJ5dGUgYm91bmRhcnkuCisgKiB1OCAqb3V0LCBDaXBoZXJ0ZXh0IG91dHB1dC4gRW5jcnlwdCBpbi1wbGFjZSBpcyBhbGxvd2VkLgorICogY29uc3QgdTggKmluLCBQbGFpbnRleHQgaW5wdXQKKyAqIHVuc2lnbmVkIGxvbmcgcGxhaW50ZXh0X2xlbiwgTGVuZ3RoIG9mIGRhdGEgaW4gYnl0ZXMgZm9yIGVuY3J5cHRpb24uCisgKiB1OCAqaXYsIFByZS1jb3VudGVyIGJsb2NrIGowOiA0IGJ5dGUgc2FsdCAoZnJvbSBTZWN1cml0eSBBc3NvY2lhdGlvbikKKyAqICAgICAgICAgY29uY2F0ZW5hdGVkIHdpdGggOCBieXRlIEluaXRpYWxpc2F0aW9uIFZlY3RvciAoZnJvbSBJUFNlYyBFU1AKKyAqICAgICAgICAgUGF5bG9hZCkgY29uY2F0ZW5hdGVkIHdpdGggMHgwMDAwMDAwMS4gMTYtYnl0ZSBhbGlnbmVkIHBvaW50ZXIuCisgKiB1OCAqaGFzaF9zdWJrZXksIHRoZSBIYXNoIHN1YiBrZXkgaW5wdXQuIERhdGEgc3RhcnRzIG9uIGEgMTYtYnl0ZSBib3VuZGFyeS4KKyAqIGNvbnN0IHU4ICphYWQsIEFkZGl0aW9uYWwgQXV0aGVudGljYXRpb24gRGF0YSAoQUFEKQorICogdW5zaWduZWQgbG9uZyBhYWRfbGVuLCBMZW5ndGggb2YgQUFEIGluIGJ5dGVzLiBXaXRoIFJGQzQxMDYgdGhpcworICogICAgICAgICAgaXMgZ29pbmcgdG8gYmUgOCBvciAxMiBieXRlcworICogdTggKmF1dGhfdGFnLCBBdXRoZW50aWNhdGVkIFRhZyBvdXRwdXQuCisgKiB1bnNpZ25lZCBsb25nIGF1dGhfdGFnX2xlbiksIEF1dGhlbnRpY2F0ZWQgVGFnIExlbmd0aCBpbiBieXRlcy4KKyAqICAgICAgICAgIFZhbGlkIHZhbHVlcyBhcmUgMTYgKG1vc3QgbGlrZWx5KSwgMTIgb3IgOC4KKyAqLworYXNtbGlua2FnZSB2b2lkIGFlc25pX2djbV9lbmModm9pZCAqY3R4LCB1OCAqb3V0LAorCQkJY29uc3QgdTggKmluLCB1bnNpZ25lZCBsb25nIHBsYWludGV4dF9sZW4sIHU4ICppdiwKKwkJCXU4ICpoYXNoX3N1YmtleSwgY29uc3QgdTggKmFhZCwgdW5zaWduZWQgbG9uZyBhYWRfbGVuLAorCQkJdTggKmF1dGhfdGFnLCB1bnNpZ25lZCBsb25nIGF1dGhfdGFnX2xlbik7CisKKy8qIGFzbWxpbmthZ2Ugdm9pZCBhZXNuaV9nY21fZGVjKCkKKyAqIHZvaWQgKmN0eCwgQUVTIEtleSBzY2hlZHVsZS4gU3RhcnRzIG9uIGEgMTYgYnl0ZSBib3VuZGFyeS4KKyAqIHU4ICpvdXQsIFBsYWludGV4dCBvdXRwdXQuIERlY3J5cHQgaW4tcGxhY2UgaXMgYWxsb3dlZC4KKyAqIGNvbnN0IHU4ICppbiwgQ2lwaGVydGV4dCBpbnB1dAorICogdW5zaWduZWQgbG9uZyBjaXBoZXJ0ZXh0X2xlbiwgTGVuZ3RoIG9mIGRhdGEgaW4gYnl0ZXMgZm9yIGRlY3J5cHRpb24uCisgKiB1OCAqaXYsIFByZS1jb3VudGVyIGJsb2NrIGowOiA0IGJ5dGUgc2FsdCAoZnJvbSBTZWN1cml0eSBBc3NvY2lhdGlvbikKKyAqICAgICAgICAgY29uY2F0ZW5hdGVkIHdpdGggOCBieXRlIEluaXRpYWxpc2F0aW9uIFZlY3RvciAoZnJvbSBJUFNlYyBFU1AKKyAqICAgICAgICAgUGF5bG9hZCkgY29uY2F0ZW5hdGVkIHdpdGggMHgwMDAwMDAwMS4gMTYtYnl0ZSBhbGlnbmVkIHBvaW50ZXIuCisgKiB1OCAqaGFzaF9zdWJrZXksIHRoZSBIYXNoIHN1YiBrZXkgaW5wdXQuIERhdGEgc3RhcnRzIG9uIGEgMTYtYnl0ZSBib3VuZGFyeS4KKyAqIGNvbnN0IHU4ICphYWQsIEFkZGl0aW9uYWwgQXV0aGVudGljYXRpb24gRGF0YSAoQUFEKQorICogdW5zaWduZWQgbG9uZyBhYWRfbGVuLCBMZW5ndGggb2YgQUFEIGluIGJ5dGVzLiBXaXRoIFJGQzQxMDYgdGhpcyBpcyBnb2luZworICogdG8gYmUgOCBvciAxMiBieXRlcworICogdTggKmF1dGhfdGFnLCBBdXRoZW50aWNhdGVkIFRhZyBvdXRwdXQuCisgKiB1bnNpZ25lZCBsb25nIGF1dGhfdGFnX2xlbikgQXV0aGVudGljYXRlZCBUYWcgTGVuZ3RoIGluIGJ5dGVzLgorICogVmFsaWQgdmFsdWVzIGFyZSAxNiAobW9zdCBsaWtlbHkpLCAxMiBvciA4LgorICovCithc21saW5rYWdlIHZvaWQgYWVzbmlfZ2NtX2RlYyh2b2lkICpjdHgsIHU4ICpvdXQsCisJCQljb25zdCB1OCAqaW4sIHVuc2lnbmVkIGxvbmcgY2lwaGVydGV4dF9sZW4sIHU4ICppdiwKKwkJCXU4ICpoYXNoX3N1YmtleSwgY29uc3QgdTggKmFhZCwgdW5zaWduZWQgbG9uZyBhYWRfbGVuLAorCQkJdTggKmF1dGhfdGFnLCB1bnNpZ25lZCBsb25nIGF1dGhfdGFnX2xlbik7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0CithZXNuaV9yZmM0MTA2X2djbV9jdHggKmFlc25pX3JmYzQxMDZfZ2NtX2N0eF9nZXQoc3RydWN0IGNyeXB0b19hZWFkICp0Zm0pCit7CisJcmV0dXJuCisJCShzdHJ1Y3QgYWVzbmlfcmZjNDEwNl9nY21fY3R4ICopCisJCVBUUl9BTElHTigodTggKikKKwkJY3J5cHRvX3RmbV9jdHgoY3J5cHRvX2FlYWRfdGZtKHRmbSkpLCBBRVNOSV9BTElHTik7Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmFlc19jdHgodm9pZCAqcmF3X2N0eCkKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylyYXdfY3R4OwpAQCAtMzI0LDYgKzQxMiw3IEBACiAJfSwKIH07CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CiBzdGF0aWMgdm9pZCBjdHJfY3J5cHRfZmluYWwoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsCiAJCQkgICAgc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrKQogewpAQCAtMzg5LDYgKzQ3OCw3IEBACiAJCX0sCiAJfSwKIH07CisjZW5kaWYKIAogc3RhdGljIGludCBhYmxrX3NldF9rZXkoc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0sIGNvbnN0IHU4ICprZXksCiAJCQl1bnNpZ25lZCBpbnQga2V5X2xlbikKQEAgLTUzNiw2ICs2MjYsNyBAQAogCX0sCiB9OwogCisjaWZkZWYgQ09ORklHX1g4Nl82NAogc3RhdGljIGludCBhYmxrX2N0cl9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7CiAJc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpjcnlwdGRfdGZtOwpAQCAtNjEyLDYgKzcwMyw3IEBACiAJfSwKIH07CiAjZW5kaWYKKyNlbmRpZgogCiAjaWZkZWYgSEFTX0xSVwogc3RhdGljIGludCBhYmxrX2xyd19pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCkBAIC03MzAsNiArODIyLDQyNCBAQAogfTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1g4Nl82NAorc3RhdGljIGludCByZmM0MTA2X2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRkX2FlYWQgKmNyeXB0ZF90Zm07CisJc3RydWN0IGFlc25pX3JmYzQxMDZfZ2NtX2N0eCAqY3R4ID0gKHN0cnVjdCBhZXNuaV9yZmM0MTA2X2djbV9jdHggKikKKwkJUFRSX0FMSUdOKCh1OCAqKWNyeXB0b190Zm1fY3R4KHRmbSksIEFFU05JX0FMSUdOKTsKKwljcnlwdGRfdGZtID0gY3J5cHRkX2FsbG9jX2FlYWQoIl9fZHJpdmVyLWdjbS1hZXMtYWVzbmkiLCAwLCAwKTsKKwlpZiAoSVNfRVJSKGNyeXB0ZF90Zm0pKQorCQlyZXR1cm4gUFRSX0VSUihjcnlwdGRfdGZtKTsKKwljdHgtPmNyeXB0ZF90Zm0gPSBjcnlwdGRfdGZtOworCXRmbS0+Y3J0X2FlYWQucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWVhZF9yZXF1ZXN0KQorCQkrIGNyeXB0b19hZWFkX3JlcXNpemUoJmNyeXB0ZF90Zm0tPmJhc2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZmM0MTA2X2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgYWVzbmlfcmZjNDEwNl9nY21fY3R4ICpjdHggPQorCQkoc3RydWN0IGFlc25pX3JmYzQxMDZfZ2NtX2N0eCAqKQorCQlQVFJfQUxJR04oKHU4ICopY3J5cHRvX3RmbV9jdHgodGZtKSwgQUVTTklfQUxJR04pOworCWlmICghSVNfRVJSKGN0eC0+Y3J5cHRkX3RmbSkpCisJCWNyeXB0ZF9mcmVlX2FlYWQoY3R4LT5jcnlwdGRfdGZtKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCityZmM0MTA2X3NldF9oYXNoX3N1YmtleV9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQoreworCXN0cnVjdCBhZXNuaV9nY21fc2V0X2hhc2hfc3Via2V5X3Jlc3VsdCAqcmVzdWx0ID0gcmVxLT5kYXRhOworCisJaWYgKGVyciA9PSAtRUlOUFJPR1JFU1MpCisJCXJldHVybjsKKwlyZXN1bHQtPmVyciA9IGVycjsKKwljb21wbGV0ZSgmcmVzdWx0LT5jb21wbGV0aW9uKTsKK30KKworc3RhdGljIGludAorcmZjNDEwNl9zZXRfaGFzaF9zdWJrZXkodTggKmhhc2hfc3Via2V5LCBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5X2xlbikKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmN0cl90Zm07CisJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxOworCWludCByZXQgPSAtRUlOVkFMOworCXN0cnVjdCBhZXNuaV9oYXNoX3N1YmtleV9yZXFfZGF0YSAqcmVxX2RhdGE7CisKKwljdHJfdGZtID0gY3J5cHRvX2FsbG9jX2FibGtjaXBoZXIoImN0cihhZXMpIiwgMCwgMCk7CisJaWYgKElTX0VSUihjdHJfdGZtKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3RyX3RmbSk7CisKKwljcnlwdG9fYWJsa2NpcGhlcl9jbGVhcl9mbGFncyhjdHJfdGZtLCB+MCk7CisKKwlyZXQgPSBjcnlwdG9fYWJsa2NpcGhlcl9zZXRrZXkoY3RyX3RmbSwga2V5LCBrZXlfbGVuKTsKKwlpZiAocmV0KSB7CisJCWNyeXB0b19mcmVlX2FibGtjaXBoZXIoY3RyX3RmbSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmVxID0gYWJsa2NpcGhlcl9yZXF1ZXN0X2FsbG9jKGN0cl90Zm0sIEdGUF9LRVJORUwpOworCWlmICghcmVxKSB7CisJCWNyeXB0b19mcmVlX2FibGtjaXBoZXIoY3RyX3RmbSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlcV9kYXRhID0ga21hbGxvYyhzaXplb2YoKnJlcV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXFfZGF0YSkgeworCQljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKGN0cl90Zm0pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHJlcV9kYXRhLT5pdiwgMCwgc2l6ZW9mKHJlcV9kYXRhLT5pdikpOworCisJLyogQ2xlYXIgdGhlIGRhdGEgaW4gdGhlIGhhc2ggc3ViIGtleSBjb250YWluZXIgdG8gemVyby4qLworCS8qIFdlIHdhbnQgdG8gY2lwaGVyIGFsbCB6ZXJvcyB0byBjcmVhdGUgdGhlIGhhc2ggc3ViIGtleS4gKi8KKwltZW1zZXQoaGFzaF9zdWJrZXksIDAsIFJGQzQxMDZfSEFTSF9TVUJLRVlfU0laRSk7CisKKwlpbml0X2NvbXBsZXRpb24oJnJlcV9kYXRhLT5yZXN1bHQuY29tcGxldGlvbik7CisJc2dfaW5pdF9vbmUoJnJlcV9kYXRhLT5zZywgaGFzaF9zdWJrZXksIFJGQzQxMDZfSEFTSF9TVUJLRVlfU0laRSk7CisJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0ocmVxLCBjdHJfdGZtKTsKKwlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHJlcSwgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQIHwKKwkJCQkJQ1JZUFRPX1RGTV9SRVFfTUFZX0JBQ0tMT0csCisJCQkJCXJmYzQxMDZfc2V0X2hhc2hfc3Via2V5X2RvbmUsCisJCQkJCSZyZXFfZGF0YS0+cmVzdWx0KTsKKworCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCAmcmVxX2RhdGEtPnNnLAorCQkmcmVxX2RhdGEtPnNnLCBSRkM0MTA2X0hBU0hfU1VCS0VZX1NJWkUsIHJlcV9kYXRhLT5pdik7CisKKwlyZXQgPSBjcnlwdG9fYWJsa2NpcGhlcl9lbmNyeXB0KHJlcSk7CisJaWYgKHJldCA9PSAtRUlOUFJPR1JFU1MgfHwgcmV0ID09IC1FQlVTWSkgeworCQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUKKwkJCSgmcmVxX2RhdGEtPnJlc3VsdC5jb21wbGV0aW9uKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSByZXFfZGF0YS0+cmVzdWx0LmVycjsKKwl9CisJYWJsa2NpcGhlcl9yZXF1ZXN0X2ZyZWUocmVxKTsKKwlrZnJlZShyZXFfZGF0YSk7CisJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcihjdHJfdGZtKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJmYzQxMDZfc2V0X2tleShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnBhcmVudCwgY29uc3QgdTggKmtleSwKKwkJCQkJCSAgIHVuc2lnbmVkIGludCBrZXlfbGVuKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBjcnlwdG9fYWVhZF90Zm0ocGFyZW50KTsKKwlzdHJ1Y3QgYWVzbmlfcmZjNDEwNl9nY21fY3R4ICpjdHggPSBhZXNuaV9yZmM0MTA2X2djbV9jdHhfZ2V0KHBhcmVudCk7CisJdTggKm5ld19rZXlfbWVtID0gTlVMTDsKKworCWlmIChrZXlfbGVuIDwgNCkgeworCQljcnlwdG9fdGZtX3NldF9mbGFncyh0Zm0sIENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qQWNjb3VudCBmb3IgNCBieXRlIG5vbmNlIGF0IHRoZSBlbmQuKi8KKwlrZXlfbGVuIC09IDQ7CisJaWYgKGtleV9sZW4gIT0gQUVTX0tFWVNJWkVfMTI4KSB7CisJCWNyeXB0b190Zm1fc2V0X2ZsYWdzKHRmbSwgQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZW1jcHkoY3R4LT5ub25jZSwga2V5ICsga2V5X2xlbiwgc2l6ZW9mKGN0eC0+bm9uY2UpKTsKKwkvKlRoaXMgbXVzdCBiZSBvbiBhIDE2IGJ5dGUgYm91bmRhcnkhKi8KKwlpZiAoKHVuc2lnbmVkIGxvbmcpKCYoY3R4LT5hZXNfa2V5X2V4cGFuZGVkLmtleV9lbmNbMF0pKSAlIEFFU05JX0FMSUdOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgodW5zaWduZWQgbG9uZylrZXkgJSBBRVNOSV9BTElHTikgeworCQkvKmtleSBpcyBub3QgYWxpZ25lZDogdXNlIGFuIGF1eHVsaWFyIGFsaWduZWQgcG9pbnRlciovCisJCW5ld19rZXlfbWVtID0ga21hbGxvYyhrZXlfbGVuK0FFU05JX0FMSUdOLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFuZXdfa2V5X21lbSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCW5ld19rZXlfbWVtID0gUFRSX0FMSUdOKG5ld19rZXlfbWVtLCBBRVNOSV9BTElHTik7CisJCW1lbWNweShuZXdfa2V5X21lbSwga2V5LCBrZXlfbGVuKTsKKwkJa2V5ID0gbmV3X2tleV9tZW07CisJfQorCisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKQorCQlyZXQgPSBjcnlwdG9fYWVzX2V4cGFuZF9rZXkoJihjdHgtPmFlc19rZXlfZXhwYW5kZWQpLAorCQlrZXksIGtleV9sZW4pOworCWVsc2UgeworCQlrZXJuZWxfZnB1X2JlZ2luKCk7CisJCXJldCA9IGFlc25pX3NldF9rZXkoJihjdHgtPmFlc19rZXlfZXhwYW5kZWQpLCBrZXksIGtleV9sZW4pOworCQlrZXJuZWxfZnB1X2VuZCgpOworCX0KKwkvKlRoaXMgbXVzdCBiZSBvbiBhIDE2IGJ5dGUgYm91bmRhcnkhKi8KKwlpZiAoKHVuc2lnbmVkIGxvbmcpKCYoY3R4LT5oYXNoX3N1YmtleVswXSkpICUgQUVTTklfQUxJR04pIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKwlyZXQgPSByZmM0MTA2X3NldF9oYXNoX3N1YmtleShjdHgtPmhhc2hfc3Via2V5LCBrZXksIGtleV9sZW4pOworZXhpdDoKKwlrZnJlZShuZXdfa2V5X21lbSk7CisJcmV0dXJuIHJldDsKK30KKworLyogVGhpcyBpcyB0aGUgSW50ZWdyaXR5IENoZWNrIFZhbHVlIChha2EgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBsZW5ndGggYW5kIGNhbgorICogYmUgOCwgMTIgb3IgMTYgYnl0ZXMgbG9uZy4gKi8KK3N0YXRpYyBpbnQgcmZjNDEwNl9zZXRfYXV0aHNpemUoc3RydWN0IGNyeXB0b19hZWFkICpwYXJlbnQsCisJCQkJdW5zaWduZWQgaW50IGF1dGhzaXplKQoreworCXN0cnVjdCBhZXNuaV9yZmM0MTA2X2djbV9jdHggKmN0eCA9IGFlc25pX3JmYzQxMDZfZ2NtX2N0eF9nZXQocGFyZW50KTsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmNyeXB0ZF9jaGlsZCA9IGNyeXB0ZF9hZWFkX2NoaWxkKGN0eC0+Y3J5cHRkX3RmbSk7CisKKwlzd2l0Y2ggKGF1dGhzaXplKSB7CisJY2FzZSA4OgorCWNhc2UgMTI6CisJY2FzZSAxNjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWNyeXB0b19hZWFkX2NydChwYXJlbnQpLT5hdXRoc2l6ZSA9IGF1dGhzaXplOworCWNyeXB0b19hZWFkX2NydChjcnlwdGRfY2hpbGQpLT5hdXRoc2l6ZSA9IGF1dGhzaXplOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJmYzQxMDZfZW5jcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBhZXNuaV9yZmM0MTA2X2djbV9jdHggKmN0eCA9IGFlc25pX3JmYzQxMDZfZ2NtX2N0eF9nZXQodGZtKTsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmNyeXB0ZF9jaGlsZCA9IGNyeXB0ZF9hZWFkX2NoaWxkKGN0eC0+Y3J5cHRkX3RmbSk7CisKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpIHsKKwkJc3RydWN0IGFlYWRfcmVxdWVzdCAqY3J5cHRkX3JlcSA9CisJCQkoc3RydWN0IGFlYWRfcmVxdWVzdCAqKSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CisJCW1lbWNweShjcnlwdGRfcmVxLCByZXEsIHNpemVvZigqcmVxKSk7CisJCWFlYWRfcmVxdWVzdF9zZXRfdGZtKGNyeXB0ZF9yZXEsICZjdHgtPmNyeXB0ZF90Zm0tPmJhc2UpOworCQlyZXR1cm4gY3J5cHRvX2FlYWRfZW5jcnlwdChjcnlwdGRfcmVxKTsKKwl9IGVsc2UgeworCQlrZXJuZWxfZnB1X2JlZ2luKCk7CisJCXJldCA9IGNyeXB0ZF9jaGlsZC0+YmFzZS5jcnRfYWVhZC5lbmNyeXB0KHJlcSk7CisJCWtlcm5lbF9mcHVfZW5kKCk7CisJCXJldHVybiByZXQ7CisJfQorfQorCitzdGF0aWMgaW50IHJmYzQxMDZfZGVjcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBhZXNuaV9yZmM0MTA2X2djbV9jdHggKmN0eCA9IGFlc25pX3JmYzQxMDZfZ2NtX2N0eF9nZXQodGZtKTsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmNyeXB0ZF9jaGlsZCA9IGNyeXB0ZF9hZWFkX2NoaWxkKGN0eC0+Y3J5cHRkX3RmbSk7CisKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpIHsKKwkJc3RydWN0IGFlYWRfcmVxdWVzdCAqY3J5cHRkX3JlcSA9CisJCQkoc3RydWN0IGFlYWRfcmVxdWVzdCAqKSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CisJCW1lbWNweShjcnlwdGRfcmVxLCByZXEsIHNpemVvZigqcmVxKSk7CisJCWFlYWRfcmVxdWVzdF9zZXRfdGZtKGNyeXB0ZF9yZXEsICZjdHgtPmNyeXB0ZF90Zm0tPmJhc2UpOworCQlyZXR1cm4gY3J5cHRvX2FlYWRfZGVjcnlwdChjcnlwdGRfcmVxKTsKKwl9IGVsc2UgeworCQlrZXJuZWxfZnB1X2JlZ2luKCk7CisJCXJldCA9IGNyeXB0ZF9jaGlsZC0+YmFzZS5jcnRfYWVhZC5kZWNyeXB0KHJlcSk7CisJCWtlcm5lbF9mcHVfZW5kKCk7CisJCXJldHVybiByZXQ7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgcmZjNDEwNl9hbGcgPSB7CisJLmNyYV9uYW1lID0gInJmYzQxMDYoZ2NtKGFlcykpIiwKKwkuY3JhX2RyaXZlcl9uYW1lID0gInJmYzQxMDYtZ2NtLWFlc25pIiwKKwkuY3JhX3ByaW9yaXR5ID0gNDAwLAorCS5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX1RZUEVfQUVBRCB8IENSWVBUT19BTEdfQVNZTkMsCisJLmNyYV9ibG9ja3NpemUgPSAxLAorCS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWVzbmlfcmZjNDEwNl9nY21fY3R4KSArIEFFU05JX0FMSUdOLAorCS5jcmFfYWxpZ25tYXNrID0gMCwKKwkuY3JhX3R5cGUgPSAmY3J5cHRvX25pdmFlYWRfdHlwZSwKKwkuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5jcmFfbGlzdCA9IExJU1RfSEVBRF9JTklUKHJmYzQxMDZfYWxnLmNyYV9saXN0KSwKKwkuY3JhX2luaXQgPSByZmM0MTA2X2luaXQsCisJLmNyYV9leGl0ID0gcmZjNDEwNl9leGl0LAorCS5jcmFfdSA9IHsKKwkJLmFlYWQgPSB7CisJCQkuc2V0a2V5ID0gcmZjNDEwNl9zZXRfa2V5LAorCQkJLnNldGF1dGhzaXplID0gcmZjNDEwNl9zZXRfYXV0aHNpemUsCisJCQkuZW5jcnlwdCA9IHJmYzQxMDZfZW5jcnlwdCwKKwkJCS5kZWNyeXB0ID0gcmZjNDEwNl9kZWNyeXB0LAorCQkJLmdlbml2ID0gInNlcWl2IiwKKwkJCS5pdnNpemUgPSA4LAorCQkJLm1heGF1dGhzaXplID0gMTYsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19kcml2ZXJfcmZjNDEwNl9lbmNyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKK3sKKwl1OCBvbmVfZW50cnlfaW5fc2cgPSAwOworCXU4ICpzcmMsICpkc3QsICphc3NvYzsKKwlfX2JlMzIgY291bnRlciA9IGNwdV90b19iZTMyKDEpOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqdGZtID0gY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSk7CisJc3RydWN0IGFlc25pX3JmYzQxMDZfZ2NtX2N0eCAqY3R4ID0gYWVzbmlfcmZjNDEwNl9nY21fY3R4X2dldCh0Zm0pOworCXZvaWQgKmFlc19jdHggPSAmKGN0eC0+YWVzX2tleV9leHBhbmRlZCk7CisJdW5zaWduZWQgbG9uZyBhdXRoX3RhZ19sZW4gPSBjcnlwdG9fYWVhZF9hdXRoc2l6ZSh0Zm0pOworCXU4IGl2X3RhYlsxNitBRVNOSV9BTElHTl07CisJdTgqIGl2ID0gKHU4ICopIFBUUl9BTElHTigodTggKilpdl90YWIsIEFFU05JX0FMSUdOKTsKKwlzdHJ1Y3Qgc2NhdHRlcl93YWxrIHNyY19zZ193YWxrOworCXN0cnVjdCBzY2F0dGVyX3dhbGsgYXNzb2Nfc2dfd2FsazsKKwlzdHJ1Y3Qgc2NhdHRlcl93YWxrIGRzdF9zZ193YWxrOworCXVuc2lnbmVkIGludCBpOworCisJLyogQXNzdW1pbmcgd2UgYXJlIHN1cHBvcnRpbmcgcmZjNDEwNiA2NC1iaXQgZXh0ZW5kZWQgKi8KKwkvKiBzZXF1ZW5jZSBudW1iZXJzIFdlIG5lZWQgdG8gaGF2ZSB0aGUgQUFEIGxlbmd0aCBlcXVhbCAqLworCS8qIHRvIDggb3IgMTIgYnl0ZXMgKi8KKwlpZiAodW5saWtlbHkocmVxLT5hc3NvY2xlbiAhPSA4ICYmIHJlcS0+YXNzb2NsZW4gIT0gMTIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBJViBiZWxvdyBidWlsdCAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCSooaXYraSkgPSBjdHgtPm5vbmNlW2ldOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCSooaXYrNCtpKSA9IHJlcS0+aXZbaV07CisJKigoX19iZTMyICopKGl2KzEyKSkgPSBjb3VudGVyOworCisJaWYgKChzZ19pc19sYXN0KHJlcS0+c3JjKSkgJiYgKHNnX2lzX2xhc3QocmVxLT5hc3NvYykpKSB7CisJCW9uZV9lbnRyeV9pbl9zZyA9IDE7CisJCXNjYXR0ZXJ3YWxrX3N0YXJ0KCZzcmNfc2dfd2FsaywgcmVxLT5zcmMpOworCQlzY2F0dGVyd2Fsa19zdGFydCgmYXNzb2Nfc2dfd2FsaywgcmVxLT5hc3NvYyk7CisJCXNyYyA9IHNjYXR0ZXJ3YWxrX21hcCgmc3JjX3NnX3dhbGssIDApOworCQlhc3NvYyA9IHNjYXR0ZXJ3YWxrX21hcCgmYXNzb2Nfc2dfd2FsaywgMCk7CisJCWRzdCA9IHNyYzsKKwkJaWYgKHVubGlrZWx5KHJlcS0+c3JjICE9IHJlcS0+ZHN0KSkgeworCQkJc2NhdHRlcndhbGtfc3RhcnQoJmRzdF9zZ193YWxrLCByZXEtPmRzdCk7CisJCQlkc3QgPSBzY2F0dGVyd2Fsa19tYXAoJmRzdF9zZ193YWxrLCAwKTsKKwkJfQorCisJfSBlbHNlIHsKKwkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBzcmMsIGRzdCwgYXNzb2MgKi8KKwkJc3JjID0ga21hbGxvYyhyZXEtPmNyeXB0bGVuICsgYXV0aF90YWdfbGVuICsgcmVxLT5hc3NvY2xlbiwKKwkJCUdGUF9BVE9NSUMpOworCQlpZiAodW5saWtlbHkoIXNyYykpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJYXNzb2MgPSAoc3JjICsgcmVxLT5jcnlwdGxlbiArIGF1dGhfdGFnX2xlbik7CisJCXNjYXR0ZXJ3YWxrX21hcF9hbmRfY29weShzcmMsIHJlcS0+c3JjLCAwLCByZXEtPmNyeXB0bGVuLCAwKTsKKwkJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KGFzc29jLCByZXEtPmFzc29jLCAwLAorCQkJCQlyZXEtPmFzc29jbGVuLCAwKTsKKwkJZHN0ID0gc3JjOworCX0KKworCWFlc25pX2djbV9lbmMoYWVzX2N0eCwgZHN0LCBzcmMsICh1bnNpZ25lZCBsb25nKXJlcS0+Y3J5cHRsZW4sIGl2LAorCQljdHgtPmhhc2hfc3Via2V5LCBhc3NvYywgKHVuc2lnbmVkIGxvbmcpcmVxLT5hc3NvY2xlbiwgZHN0CisJCSsgKCh1bnNpZ25lZCBsb25nKXJlcS0+Y3J5cHRsZW4pLCBhdXRoX3RhZ19sZW4pOworCisJLyogVGhlIGF1dGhUYWcgKGFrYSB0aGUgSW50ZWdyaXR5IENoZWNrIFZhbHVlKSBuZWVkcyB0byBiZSB3cml0dGVuCisJICogYmFjayB0byB0aGUgcGFja2V0LiAqLworCWlmIChvbmVfZW50cnlfaW5fc2cpIHsKKwkJaWYgKHVubGlrZWx5KHJlcS0+c3JjICE9IHJlcS0+ZHN0KSkgeworCQkJc2NhdHRlcndhbGtfdW5tYXAoZHN0LCAwKTsKKwkJCXNjYXR0ZXJ3YWxrX2RvbmUoJmRzdF9zZ193YWxrLCAwLCAwKTsKKwkJfQorCQlzY2F0dGVyd2Fsa191bm1hcChzcmMsIDApOworCQlzY2F0dGVyd2Fsa191bm1hcChhc3NvYywgMCk7CisJCXNjYXR0ZXJ3YWxrX2RvbmUoJnNyY19zZ193YWxrLCAwLCAwKTsKKwkJc2NhdHRlcndhbGtfZG9uZSgmYXNzb2Nfc2dfd2FsaywgMCwgMCk7CisJfSBlbHNlIHsKKwkJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KGRzdCwgcmVxLT5kc3QsIDAsCisJCQlyZXEtPmNyeXB0bGVuICsgYXV0aF90YWdfbGVuLCAxKTsKKwkJa2ZyZWUoc3JjKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kcml2ZXJfcmZjNDEwNl9kZWNyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKK3sKKwl1OCBvbmVfZW50cnlfaW5fc2cgPSAwOworCXU4ICpzcmMsICpkc3QsICphc3NvYzsKKwl1bnNpZ25lZCBsb25nIHRlbXBDaXBoZXJMZW4gPSAwOworCV9fYmUzMiBjb3VudGVyID0gY3B1X3RvX2JlMzIoMSk7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IGNyeXB0b19hZWFkICp0Zm0gPSBjcnlwdG9fYWVhZF9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgYWVzbmlfcmZjNDEwNl9nY21fY3R4ICpjdHggPSBhZXNuaV9yZmM0MTA2X2djbV9jdHhfZ2V0KHRmbSk7CisJdm9pZCAqYWVzX2N0eCA9ICYoY3R4LT5hZXNfa2V5X2V4cGFuZGVkKTsKKwl1bnNpZ25lZCBsb25nIGF1dGhfdGFnX2xlbiA9IGNyeXB0b19hZWFkX2F1dGhzaXplKHRmbSk7CisJdTggaXZfYW5kX2F1dGhUYWdbMzIrQUVTTklfQUxJR05dOworCXU4ICppdiA9ICh1OCAqKSBQVFJfQUxJR04oKHU4ICopaXZfYW5kX2F1dGhUYWcsIEFFU05JX0FMSUdOKTsKKwl1OCAqYXV0aFRhZyA9IGl2ICsgMTY7CisJc3RydWN0IHNjYXR0ZXJfd2FsayBzcmNfc2dfd2FsazsKKwlzdHJ1Y3Qgc2NhdHRlcl93YWxrIGFzc29jX3NnX3dhbGs7CisJc3RydWN0IHNjYXR0ZXJfd2FsayBkc3Rfc2dfd2FsazsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICh1bmxpa2VseSgocmVxLT5jcnlwdGxlbiA8IGF1dGhfdGFnX2xlbikgfHwKKwkJKHJlcS0+YXNzb2NsZW4gIT0gOCAmJiByZXEtPmFzc29jbGVuICE9IDEyKSkpCisJCXJldHVybiAtRUlOVkFMOworCS8qIEFzc3VtaW5nIHdlIGFyZSBzdXBwb3J0aW5nIHJmYzQxMDYgNjQtYml0IGV4dGVuZGVkICovCisJLyogc2VxdWVuY2UgbnVtYmVycyBXZSBuZWVkIHRvIGhhdmUgdGhlIEFBRCBsZW5ndGggKi8KKwkvKiBlcXVhbCB0byA4IG9yIDEyIGJ5dGVzICovCisKKwl0ZW1wQ2lwaGVyTGVuID0gKHVuc2lnbmVkIGxvbmcpKHJlcS0+Y3J5cHRsZW4gLSBhdXRoX3RhZ19sZW4pOworCS8qIElWIGJlbG93IGJ1aWx0ICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJKihpditpKSA9IGN0eC0+bm9uY2VbaV07CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJKihpdis0K2kpID0gcmVxLT5pdltpXTsKKwkqKChfX2JlMzIgKikoaXYrMTIpKSA9IGNvdW50ZXI7CisKKwlpZiAoKHNnX2lzX2xhc3QocmVxLT5zcmMpKSAmJiAoc2dfaXNfbGFzdChyZXEtPmFzc29jKSkpIHsKKwkJb25lX2VudHJ5X2luX3NnID0gMTsKKwkJc2NhdHRlcndhbGtfc3RhcnQoJnNyY19zZ193YWxrLCByZXEtPnNyYyk7CisJCXNjYXR0ZXJ3YWxrX3N0YXJ0KCZhc3NvY19zZ193YWxrLCByZXEtPmFzc29jKTsKKwkJc3JjID0gc2NhdHRlcndhbGtfbWFwKCZzcmNfc2dfd2FsaywgMCk7CisJCWFzc29jID0gc2NhdHRlcndhbGtfbWFwKCZhc3NvY19zZ193YWxrLCAwKTsKKwkJZHN0ID0gc3JjOworCQlpZiAodW5saWtlbHkocmVxLT5zcmMgIT0gcmVxLT5kc3QpKSB7CisJCQlzY2F0dGVyd2Fsa19zdGFydCgmZHN0X3NnX3dhbGssIHJlcS0+ZHN0KTsKKwkJCWRzdCA9IHNjYXR0ZXJ3YWxrX21hcCgmZHN0X3NnX3dhbGssIDApOworCQl9CisKKwl9IGVsc2UgeworCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHNyYywgZHN0LCBhc3NvYyAqLworCQlzcmMgPSBrbWFsbG9jKHJlcS0+Y3J5cHRsZW4gKyByZXEtPmFzc29jbGVuLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFzcmMpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJYXNzb2MgPSAoc3JjICsgcmVxLT5jcnlwdGxlbiArIGF1dGhfdGFnX2xlbik7CisJCXNjYXR0ZXJ3YWxrX21hcF9hbmRfY29weShzcmMsIHJlcS0+c3JjLCAwLCByZXEtPmNyeXB0bGVuLCAwKTsKKwkJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KGFzc29jLCByZXEtPmFzc29jLCAwLAorCQkJcmVxLT5hc3NvY2xlbiwgMCk7CisJCWRzdCA9IHNyYzsKKwl9CisKKwlhZXNuaV9nY21fZGVjKGFlc19jdHgsIGRzdCwgc3JjLCB0ZW1wQ2lwaGVyTGVuLCBpdiwKKwkJY3R4LT5oYXNoX3N1YmtleSwgYXNzb2MsICh1bnNpZ25lZCBsb25nKXJlcS0+YXNzb2NsZW4sCisJCWF1dGhUYWcsIGF1dGhfdGFnX2xlbik7CisKKwkvKiBDb21wYXJlIGdlbmVyYXRlZCB0YWcgd2l0aCBwYXNzZWQgaW4gdGFnLiAqLworCXJldHZhbCA9IG1lbWNtcChzcmMgKyB0ZW1wQ2lwaGVyTGVuLCBhdXRoVGFnLCBhdXRoX3RhZ19sZW4pID8KKwkJLUVCQURNU0cgOiAwOworCisJaWYgKG9uZV9lbnRyeV9pbl9zZykgeworCQlpZiAodW5saWtlbHkocmVxLT5zcmMgIT0gcmVxLT5kc3QpKSB7CisJCQlzY2F0dGVyd2Fsa191bm1hcChkc3QsIDApOworCQkJc2NhdHRlcndhbGtfZG9uZSgmZHN0X3NnX3dhbGssIDAsIDApOworCQl9CisJCXNjYXR0ZXJ3YWxrX3VubWFwKHNyYywgMCk7CisJCXNjYXR0ZXJ3YWxrX3VubWFwKGFzc29jLCAwKTsKKwkJc2NhdHRlcndhbGtfZG9uZSgmc3JjX3NnX3dhbGssIDAsIDApOworCQlzY2F0dGVyd2Fsa19kb25lKCZhc3NvY19zZ193YWxrLCAwLCAwKTsKKwl9IGVsc2UgeworCQlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoZHN0LCByZXEtPmRzdCwgMCwgcmVxLT5jcnlwdGxlbiwgMSk7CisJCWtmcmVlKHNyYyk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBfX3JmYzQxMDZfYWxnID0geworCS5jcmFfbmFtZQkJPSAiX19nY20tYWVzLWFlc25pIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0gIl9fZHJpdmVyLWdjbS1hZXMtYWVzbmkiLAorCS5jcmFfcHJpb3JpdHkJCT0gMCwKKwkuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfVFlQRV9BRUFELAorCS5jcmFfYmxvY2tzaXplCQk9IDEsCisJLmNyYV9jdHhzaXplCT0gc2l6ZW9mKHN0cnVjdCBhZXNuaV9yZmM0MTA2X2djbV9jdHgpICsgQUVTTklfQUxJR04sCisJLmNyYV9hbGlnbm1hc2sJCT0gMCwKKwkuY3JhX3R5cGUJCT0gJmNyeXB0b19hZWFkX3R5cGUsCisJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9IExJU1RfSEVBRF9JTklUKF9fcmZjNDEwNl9hbGcuY3JhX2xpc3QpLAorCS5jcmFfdSA9IHsKKwkJLmFlYWQgPSB7CisJCQkuZW5jcnlwdAk9IF9fZHJpdmVyX3JmYzQxMDZfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CT0gX19kcml2ZXJfcmZjNDEwNl9kZWNyeXB0LAorCQl9LAorCX0sCit9OworI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IGFlc25pX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwpAQCAtNzM4LDYgKzEyNDgsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICJJbnRlbCBBRVMtTkkgaW5zdHJ1Y3Rpb25zIGFyZSBub3QgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCiAJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhZXNuaV9hbGcpKSkKIAkJZ290byBhZXNfZXJyOwogCWlmICgoZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmX19hZXNuaV9hbGcpKSkKQEAgLTc0NiwxOCArMTI1NywyNCBAQAogCQlnb3RvIGJsa19lY2JfZXJyOwogCWlmICgoZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYmxrX2NiY19hbGcpKSkKIAkJZ290byBibGtfY2JjX2VycjsKLQlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmJsa19jdHJfYWxnKSkpCi0JCWdvdG8gYmxrX2N0cl9lcnI7CiAJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhYmxrX2VjYl9hbGcpKSkKIAkJZ290byBhYmxrX2VjYl9lcnI7CiAJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhYmxrX2NiY19hbGcpKSkKIAkJZ290byBhYmxrX2NiY19lcnI7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWlmICgoZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYmxrX2N0cl9hbGcpKSkKKwkJZ290byBibGtfY3RyX2VycjsKIAlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFibGtfY3RyX2FsZykpKQogCQlnb3RvIGFibGtfY3RyX2VycjsKKwlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJl9fcmZjNDEwNl9hbGcpKSkKKwkJZ290byBfX2FlYWRfZ2NtX2VycjsKKwlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJnJmYzQxMDZfYWxnKSkpCisJCWdvdG8gYWVhZF9nY21fZXJyOwogI2lmZGVmIEhBU19DVFIKIAlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFibGtfcmZjMzY4Nl9jdHJfYWxnKSkpCiAJCWdvdG8gYWJsa19yZmMzNjg2X2N0cl9lcnI7CiAjZW5kaWYKKyNlbmRpZgogI2lmZGVmIEhBU19MUlcKIAlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFibGtfbHJ3X2FsZykpKQogCQlnb3RvIGFibGtfbHJ3X2VycjsKQEAgLTc3MCw3ICsxMjg3LDYgQEAKIAlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFibGtfeHRzX2FsZykpKQogCQlnb3RvIGFibGtfeHRzX2VycjsKICNlbmRpZgotCiAJcmV0dXJuIGVycjsKIAogI2lmZGVmIEhBU19YVFMKQEAgLTc4NCwxOCArMTMwMCwyNCBAQAogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWJsa19scndfYWxnKTsKIGFibGtfbHJ3X2VycjoKICNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfNjQKICNpZmRlZiBIQVNfQ1RSCiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhYmxrX3JmYzM2ODZfY3RyX2FsZyk7CiBhYmxrX3JmYzM2ODZfY3RyX2VycjoKICNlbmRpZgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmcmZjNDEwNl9hbGcpOworYWVhZF9nY21fZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmX19yZmM0MTA2X2FsZyk7CitfX2FlYWRfZ2NtX2VycjoKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFibGtfY3RyX2FsZyk7CiBhYmxrX2N0cl9lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZibGtfY3RyX2FsZyk7CitibGtfY3RyX2VycjoKKyNlbmRpZgogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWJsa19jYmNfYWxnKTsKIGFibGtfY2JjX2VycjoKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFibGtfZWNiX2FsZyk7CiBhYmxrX2VjYl9lcnI6Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZibGtfY3RyX2FsZyk7Ci1ibGtfY3RyX2VycjoKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmJsa19jYmNfYWxnKTsKIGJsa19jYmNfZXJyOgogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYmxrX2VjYl9hbGcpOwpAQCAtODE4LDEzICsxMzQwLDE3IEBACiAjaWZkZWYgSEFTX0xSVwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWJsa19scndfYWxnKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfNjQKICNpZmRlZiBIQVNfQ1RSCiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhYmxrX3JmYzM2ODZfY3RyX2FsZyk7CiAjZW5kaWYKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnJmYzQxMDZfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJl9fcmZjNDEwNl9hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWJsa19jdHJfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmJsa19jdHJfYWxnKTsKKyNlbmRpZgogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWJsa19jYmNfYWxnKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFibGtfZWNiX2FsZyk7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZibGtfY3RyX2FsZyk7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZibGtfY2JjX2FsZyk7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZibGtfZWNiX2FsZyk7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZfX2Flc25pX2FsZyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKaW5kZXggNTVkMTA2Yi4uMjExY2EzZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaApAQCAtMTg1LDE3ICsxODUsMTYgQEAKIAogI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKIGV4dGVybiBpbnQgYWNwaV9udW1hOwotZXh0ZXJuIGludCBhY3BpX2dldF9ub2RlcyhzdHJ1Y3QgYm9vdG5vZGUgKnBoeXNub2Rlcyk7CitleHRlcm4gdm9pZCBhY3BpX2dldF9ub2RlcyhzdHJ1Y3QgYm9vdG5vZGUgKnBoeXNub2RlcywgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQl1bnNpZ25lZCBsb25nIGVuZCk7CiBleHRlcm4gaW50IGFjcGlfc2Nhbl9ub2Rlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiAjZGVmaW5lIE5SX05PREVfTUVNQkxLUyAoTUFYX05VTU5PREVTKjIpCisKKyNpZmRlZiBDT05GSUdfTlVNQV9FTVUKIGV4dGVybiB2b2lkIGFjcGlfZmFrZV9ub2Rlcyhjb25zdCBzdHJ1Y3QgYm9vdG5vZGUgKmZha2Vfbm9kZXMsCiAJCQkJICAgaW50IG51bV9ub2Rlcyk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGFjcGlfZmFrZV9ub2Rlcyhjb25zdCBzdHJ1Y3QgYm9vdG5vZGUgKmZha2Vfbm9kZXMsCi0JCQkJICAgaW50IG51bV9ub2RlcykKLXsKLX0KICNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19BQ1BJX05VTUEgKi8KIAogI2RlZmluZSBhY3BpX3VubGF6eV90bGIoeCkJbGVhdmVfbW0oeCkKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX25iLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfbmIuaAppbmRleCA2YWVlNTBkLi42NGRjODJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfbmIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfbmIuaApAQCAtMywxNiArMywyNyBAQAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKK3N0cnVjdCBhbWRfbmJfYnVzX2Rldl9yYW5nZSB7CisJdTggYnVzOworCXU4IGRldl9iYXNlOworCXU4IGRldl9saW1pdDsKK307CisKIGV4dGVybiBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbWRfbmJfbWlzY19pZHNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYW1kX25iX2J1c19kZXZfcmFuZ2UgYW1kX25iX2J1c19kZXZfcmFuZ2VzW107CiBzdHJ1Y3QgYm9vdG5vZGU7CiAKIGV4dGVybiBpbnQgZWFybHlfaXNfYW1kX25iKHUzMiB2YWx1ZSk7CiBleHRlcm4gaW50IGFtZF9jYWNoZV9ub3J0aGJyaWRnZXModm9pZCk7CiBleHRlcm4gdm9pZCBhbWRfZmx1c2hfZ2FydHModm9pZCk7Ci1leHRlcm4gaW50IGFtZF9nZXRfbm9kZXMoc3RydWN0IGJvb3Rub2RlICpub2Rlcyk7CiBleHRlcm4gaW50IGFtZF9udW1hX2luaXQodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7CiBleHRlcm4gaW50IGFtZF9zY2FuX25vZGVzKHZvaWQpOwogCisjaWZkZWYgQ09ORklHX05VTUFfRU1VCitleHRlcm4gdm9pZCBhbWRfZmFrZV9ub2Rlcyhjb25zdCBzdHJ1Y3QgYm9vdG5vZGUgKm5vZGVzLCBpbnQgbnJfbm9kZXMpOworZXh0ZXJuIHZvaWQgYW1kX2dldF9ub2RlcyhzdHJ1Y3QgYm9vdG5vZGUgKm5vZGVzKTsKKyNlbmRpZgorCiBzdHJ1Y3QgYW1kX25vcnRoYnJpZGdlIHsKIAlzdHJ1Y3QgcGNpX2RldiAqbWlzYzsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ib290LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ib290LmgKaW5kZXggM2I2MmFiNS4uNWUxYTJlZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYm9vdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3QuaApAQCAtMzIsMTEgKzMyLDcgQEAKICNkZWZpbmUgQk9PVF9IRUFQX1NJWkUgICAgICAgICAgICAgMHg0MDAwMDAKICNlbHNlIC8qICFDT05GSUdfS0VSTkVMX0JaSVAyICovCiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIEJPT1RfSEVBUF9TSVpFCTB4NzAwMAotI2Vsc2UKLSNkZWZpbmUgQk9PVF9IRUFQX1NJWkUJMHg0MDAwCi0jZW5kaWYKKyNkZWZpbmUgQk9PVF9IRUFQX1NJWkUJMHg4MDAwCiAKICNlbmRpZiAvKiAhQ09ORklHX0tFUk5FTF9CWklQMiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IDAxNDFiMjMuLjQ3MjliMmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC0xMTYsMTEgKzExNiwxMSBAQAogI2VuZGlmCiAJRklYX1RFWFRfUE9LRTEsCS8qIHJlc2VydmUgMiBwYWdlcyBmb3IgdGV4dF9wb2tlKCkgKi8KIAlGSVhfVEVYVF9QT0tFMCwgLyogZmlyc3QgcGFnZSBpcyBsYXN0LCBiZWNhdXNlIGFsbG9jYXRpb24gaXMgYmFja3dhcmQgKi8KLQlfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzLAotCiAjaWZkZWYJQ09ORklHX1g4Nl9NUlNUCiAJRklYX0xOV19WUlRDLAogI2VuZGlmCisJX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcywKKwogCS8qCiAJICogMjU2IHRlbXBvcmFyeSBib290LXRpbWUgbWFwcGluZ3MsIHVzZWQgYnkgZWFybHlfaW9yZW1hcCgpLAogCSAqIGJlZm9yZSBpb3JlbWFwKCkgaXMgZnVuY3Rpb25hbC4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dwaW8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCA0OWRiZmRmLi45MWQ5MTVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ncGlvLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZ3Bpby5oCkBAIC0zOCwxMiArMzgsOSBAQAogCXJldHVybiBfX2dwaW9fY2Fuc2xlZXAoZ3Bpbyk7CiB9CiAKLS8qCi0gKiBOb3QgaW1wbGVtZW50ZWQsIHlldC4KLSAqLwogc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgaW50IGdwaW8pCiB7Ci0JcmV0dXJuIC1FTk9TWVM7CisJcmV0dXJuIF9fZ3Bpb190b19pcnEoZ3Bpbyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGludCBpcnEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IGJhODcwYmIuLmM3MDRiMzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCkBAIC0xMCw2ICsxMCw5IEBACiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KICNpbmNsdWRlIDxhc20vaXJxX3ZlY3RvcnMuaD4KIAorLyogRXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3VwcG9ydCB0aGlzLCBzdXBwbHkgaXQgdG8gYXBwZWFzZSBPRiAqLworc3RhdGljIGlubGluZSB2b2lkIGlycV9kaXNwb3NlX21hcHBpbmcodW5zaWduZWQgaW50IHZpcnEpIHsgfQorCiBzdGF0aWMgaW5saW5lIGludCBpcnFfY2Fub25pY2FsaXplKGludCBpcnEpCiB7CiAJcmV0dXJuICgoaXJxID09IDIpID8gOSA6IGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZGVidWcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tkZWJ1Zy5oCmluZGV4IGYyM2ViMjUuLmNhMjQyZDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tkZWJ1Zy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tkZWJ1Zy5oCkBAIC0xOCw3ICsxOCw2IEBACiAJRElFX1RSQVAsCiAJRElFX0dQRiwKIAlESUVfQ0FMTCwKLQlESUVfTk1JX0lQSSwKIAlESUVfUEFHRV9GQVVMVCwKIAlESUVfTk1JVU5LTk9XTiwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaAppbmRleCBiMzZjNmIzLi44ZTM3ZGViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKQEAgLTE1LDYgKzE1LDE0IEBACiAKIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0OwogCitzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiB7CisJdTggdmVjdG9yOworCWJvb2wgZXJyb3JfY29kZV92YWxpZDsKKwl1MTYgZXJyb3JfY29kZTsKKwlib29sIG5lc3RlZF9wYWdlX2ZhdWx0OworCXU2NCBhZGRyZXNzOyAvKiBjcjIgb3IgbmVzdGVkIHBhZ2UgZmF1bHQgZ3BhICovCit9OworCiAvKgogICogeDg2X2VtdWxhdGVfb3BzOgogICoKQEAgLTY0LDcgKzcyLDggQEAKIAkgKiAgQGJ5dGVzOiBbSU4gXSBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmcm9tIG1lbW9yeS4KIAkgKi8KIAlpbnQgKCpyZWFkX3N0ZCkodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsCi0JCQl1bnNpZ25lZCBpbnQgYnl0ZXMsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICplcnJvcik7CisJCQl1bnNpZ25lZCBpbnQgYnl0ZXMsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCXN0cnVjdCB4ODZfZXhjZXB0aW9uICpmYXVsdCk7CiAKIAkvKgogCSAqIHdyaXRlX3N0ZDogV3JpdGUgYnl0ZXMgb2Ygc3RhbmRhcmQgKG5vbi1lbXVsYXRlZC9zcGVjaWFsKSBtZW1vcnkuCkBAIC03NCw3ICs4Myw4IEBACiAJICogIEBieXRlczogW0lOIF0gTnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlIHRvIG1lbW9yeS4KIAkgKi8KIAlpbnQgKCp3cml0ZV9zdGQpKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLAotCQkJIHVuc2lnbmVkIGludCBieXRlcywgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmVycm9yKTsKKwkJCSB1bnNpZ25lZCBpbnQgYnl0ZXMsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZmF1bHQpOwogCS8qCiAJICogZmV0Y2g6IFJlYWQgYnl0ZXMgb2Ygc3RhbmRhcmQgKG5vbi1lbXVsYXRlZC9zcGVjaWFsKSBtZW1vcnkuCiAJICogICAgICAgIFVzZWQgZm9yIGluc3RydWN0aW9uIGZldGNoLgpAQCAtODMsNyArOTMsOCBAQAogCSAqICBAYnl0ZXM6IFtJTiBdIE51bWJlciBvZiBieXRlcyB0byByZWFkIGZyb20gbWVtb3J5LgogCSAqLwogCWludCAoKmZldGNoKSh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKnZhbCwKLQkJCXVuc2lnbmVkIGludCBieXRlcywgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmVycm9yKTsKKwkJICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZmF1bHQpOwogCiAJLyoKIAkgKiByZWFkX2VtdWxhdGVkOiBSZWFkIGJ5dGVzIGZyb20gZW11bGF0ZWQvc3BlY2lhbCBtZW1vcnkgYXJlYS4KQEAgLTk0LDcgKzEwNSw3IEBACiAJaW50ICgqcmVhZF9lbXVsYXRlZCkodW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICB2b2lkICp2YWwsCiAJCQkgICAgIHVuc2lnbmVkIGludCBieXRlcywKLQkJCSAgICAgdW5zaWduZWQgaW50ICplcnJvciwKKwkJCSAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmZhdWx0LAogCQkJICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAJLyoKQEAgLTEwNyw3ICsxMTgsNyBAQAogCWludCAoKndyaXRlX2VtdWxhdGVkKSh1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgICBjb25zdCB2b2lkICp2YWwsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgKmVycm9yLAorCQkJICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmZhdWx0LAogCQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogCS8qCkBAIC0xMjIsNyArMTMzLDcgQEAKIAkJCQljb25zdCB2b2lkICpvbGQsCiAJCQkJY29uc3Qgdm9pZCAqbmV3LAogCQkJCXVuc2lnbmVkIGludCBieXRlcywKLQkJCQl1bnNpZ25lZCBpbnQgKmVycm9yLAorCQkJCXN0cnVjdCB4ODZfZXhjZXB0aW9uICpmYXVsdCwKIAkJCQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAJaW50ICgqcGlvX2luX2VtdWxhdGVkKShpbnQgc2l6ZSwgdW5zaWduZWQgc2hvcnQgcG9ydCwgdm9pZCAqdmFsLApAQCAtMTU5LDcgKzE3MCwxMCBAQAogCX07CiAJdW5pb24gewogCQl1bnNpZ25lZCBsb25nICpyZWc7Ci0JCXVuc2lnbmVkIGxvbmcgbWVtOworCQlzdHJ1Y3Qgc2VnbWVudGVkX2FkZHJlc3MgeworCQkJdWxvbmcgZWE7CisJCQl1bnNpZ25lZCBzZWc7CisJCX0gbWVtOwogCX0gYWRkcjsKIAl1bmlvbiB7CiAJCXVuc2lnbmVkIGxvbmcgdmFsOwpAQCAtMjI2LDkgKzI0MCw4IEBACiAKIAlib29sIHBlcm1fb2s7IC8qIGRvIG5vdCBjaGVjayBwZXJtaXNzaW9ucyBpZiB0cnVlICovCiAKLQlpbnQgZXhjZXB0aW9uOyAvKiBleGNlcHRpb24gdGhhdCBoYXBwZW5zIGR1cmluZyBlbXVsYXRpb24gb3IgLTEgKi8KLQl1MzIgZXJyb3JfY29kZTsgLyogZXJyb3IgY29kZSBmb3IgZXhjZXB0aW9uICovCi0JYm9vbCBlcnJvcl9jb2RlX3ZhbGlkOworCWJvb2wgaGF2ZV9leGNlcHRpb247CisJc3RydWN0IHg4Nl9leGNlcHRpb24gZXhjZXB0aW9uOwogCiAJLyogZGVjb2RlIGNhY2hlICovCiAJc3RydWN0IGRlY29kZV9jYWNoZSBkZWNvZGU7CkBAIC0yNTIsNyArMjY1LDcgQEAKICNkZWZpbmUgWDg2RU1VTF9NT0RFX0hPU1QgWDg2RU1VTF9NT0RFX1BST1Q2NAogI2VuZGlmCiAKLWludCB4ODZfZGVjb2RlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpOworaW50IHg4Nl9kZWNvZGVfaW5zbihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKTsKICNkZWZpbmUgRU1VTEFUSU9OX0ZBSUxFRCAtMQogI2RlZmluZSBFTVVMQVRJT05fT0sgMAogI2RlZmluZSBFTVVMQVRJT05fUkVTVEFSVCAxCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBmNzAyZjgyLi5hYTc1ZjIxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTgzLDExICs4MywxNCBAQAogI2RlZmluZSBLVk1fTlJfRklYRURfTVRSUl9SRUdJT04gODgKICNkZWZpbmUgS1ZNX05SX1ZBUl9NVFJSIDgKIAorI2RlZmluZSBBU1lOQ19QRl9QRVJfVkNQVSA2NAorCiBleHRlcm4gc3BpbmxvY2tfdCBrdm1fbG9jazsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHZtX2xpc3Q7CiAKIHN0cnVjdCBrdm1fdmNwdTsKIHN0cnVjdCBrdm07CitzdHJ1Y3Qga3ZtX2FzeW5jX3BmOwogCiBlbnVtIGt2bV9yZWcgewogCVZDUFVfUkVHU19SQVggPSAwLApAQCAtMTE0LDYgKzExNyw3IEBACiAKIGVudW0ga3ZtX3JlZ19leCB7CiAJVkNQVV9FWFJFR19QRFBUUiA9IE5SX1ZDUFVfUkVHUywKKwlWQ1BVX0VYUkVHX0NSMywKIH07CiAKIGVudW0gewpAQCAtMjM4LDE2ICsyNDIsMTggQEAKIAl2b2lkICgqbmV3X2NyMykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAl2b2lkICgqc2V0X2NyMykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHJvb3QpOwogCXVuc2lnbmVkIGxvbmcgKCpnZXRfY3IzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCWludCAoKnBhZ2VfZmF1bHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MzIgZXJyKTsKLQl2b2lkICgqaW5qZWN0X3BhZ2VfZmF1bHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJaW50ICgqcGFnZV9mYXVsdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHUzMiBlcnIsCisJCQkgIGJvb2wgcHJlZmF1bHQpOworCXZvaWQgKCppbmplY3RfcGFnZV9mYXVsdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmZhdWx0KTsKIAl2b2lkICgqZnJlZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAlncGFfdCAoKmd2YV90b19ncGEpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MzIgYWNjZXNzLAotCQkJICAgIHUzMiAqZXJyb3IpOworCQkJICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pOwogCWdwYV90ICgqdHJhbnNsYXRlX2dwYSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHUzMiBhY2Nlc3MpOwogCXZvaWQgKCpwcmVmZXRjaF9wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgICBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpwYWdlKTsKIAlpbnQgKCpzeW5jX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwgYm9vbCBjbGVhcl91bnN5bmMpOworCQkJIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKTsKIAl2b2lkICgqaW52bHBnKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSk7CiAJaHBhX3Qgcm9vdF9ocGE7CiAJaW50IHJvb3RfbGV2ZWw7CkBAIC0zMTUsMTYgKzMyMSw2IEBACiAJICovCiAJc3RydWN0IGt2bV9tbXUgKndhbGtfbW11OwogCi0JLyoKLQkgKiBUaGlzIHN0cnVjdCBpcyBmaWxsZWQgd2l0aCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIHByb3BhZ2F0ZSBhCi0JICogcGFnZSBmYXVsdCBpbnRvIHRoZSBndWVzdAotCSAqLwotCXN0cnVjdCB7Ci0JCXU2NCAgICAgIGFkZHJlc3M7Ci0JCXVuc2lnbmVkIGVycm9yX2NvZGU7Ci0JCWJvb2wgICAgIG5lc3RlZDsKLQl9IGZhdWx0OwotCiAJLyogb25seSBuZWVkZWQgaW4ga3ZtX3B2X21tdV9vcCgpIHBhdGgsIGJ1dCBpdCdzIGhvdCBzbwogCSAqIHB1dCBpdCBoZXJlIHRvIGF2b2lkIGFsbG9jYXRpb24gKi8KIAlzdHJ1Y3Qga3ZtX3B2X21tdV9vcF9idWZmZXIgbW11X29wX2J1ZmZlcjsKQEAgLTQxMiw2ICs0MDgsMTUgQEAKIAl1NjQgaHZfdmFwaWM7CiAKIAljcHVtYXNrX3Zhcl90IHdiaW52ZF9kaXJ0eV9tYXNrOworCisJc3RydWN0IHsKKwkJYm9vbCBoYWx0ZWQ7CisJCWdmbl90IGdmbnNbcm91bmR1cF9wb3dfb2ZfdHdvKEFTWU5DX1BGX1BFUl9WQ1BVKV07CisJCXN0cnVjdCBnZm5fdG9faHZhX2NhY2hlIGRhdGE7CisJCXU2NCBtc3JfdmFsOworCQl1MzIgaWQ7CisJCWJvb2wgc2VuZF91c2VyX29ubHk7CisJfSBhcGY7CiB9OwogCiBzdHJ1Y3Qga3ZtX2FyY2ggewpAQCAtNDU2LDYgKzQ2MSwxMCBAQAogCS8qIGZpZWxkcyB1c2VkIGJ5IEhZUEVSLVYgZW11bGF0aW9uICovCiAJdTY0IGh2X2d1ZXN0X29zX2lkOwogCXU2NCBodl9oeXBlcmNhbGw7CisKKwkjaWZkZWYgQ09ORklHX0tWTV9NTVVfQVVESVQKKwlpbnQgYXVkaXRfcG9pbnQ7CisJI2VuZGlmCiB9OwogCiBzdHJ1Y3Qga3ZtX3ZtX3N0YXQgewpAQCAtNTI5LDYgKzUzOCw3IEBACiAJCQkgICAgc3RydWN0IGt2bV9zZWdtZW50ICp2YXIsIGludCBzZWcpOwogCXZvaWQgKCpnZXRfY3NfZGJfbF9iaXRzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqZGIsIGludCAqbCk7CiAJdm9pZCAoKmRlY2FjaGVfY3IwX2d1ZXN0X2JpdHMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJdm9pZCAoKmRlY2FjaGVfY3IzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCXZvaWQgKCpkZWNhY2hlX2NyNF9ndWVzdF9iaXRzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCXZvaWQgKCpzZXRfY3IwKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKTsKIAl2b2lkICgqc2V0X2NyMykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMyk7CkBAIC01ODIsOSArNTkyLDE3IEBACiAKIAl2b2lkICgqd3JpdGVfdHNjX29mZnNldCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2Zmc2V0KTsKIAorCXZvaWQgKCpnZXRfZXhpdF9pbmZvKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqaW5mbzEsIHU2NCAqaW5mbzIpOwogCWNvbnN0IHN0cnVjdCB0cmFjZV9wcmludF9mbGFncyAqZXhpdF9yZWFzb25zX3N0cjsKIH07CiAKK3N0cnVjdCBrdm1fYXJjaF9hc3luY19wZiB7CisJdTMyIHRva2VuOworCWdmbl90IGdmbjsKKwl1bnNpZ25lZCBsb25nIGNyMzsKKwlib29sIGRpcmVjdF9tYXA7Cit9OworCiBleHRlcm4gc3RydWN0IGt2bV94ODZfb3BzICprdm1feDg2X29wczsKIAogaW50IGt2bV9tbXVfbW9kdWxlX2luaXQodm9pZCk7CkBAIC01OTQsNyArNjEyLDYgQEAKIGludCBrdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGt2bV9tbXVfc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX21tdV9zZXRfbm9ucHJlc2VudF9wdGVzKHU2NCB0cmFwX3B0ZSwgdTY0IG5vdHJhcF9wdGUpOwotdm9pZCBrdm1fbW11X3NldF9iYXNlX3B0ZXModTY0IGJhc2VfcHRlKTsKIHZvaWQga3ZtX21tdV9zZXRfbWFza19wdGVzKHU2NCB1c2VyX21hc2ssIHU2NCBhY2Nlc3NlZF9tYXNrLAogCQl1NjQgZGlydHlfbWFzaywgdTY0IG54X21hc2ssIHU2NCB4X21hc2spOwogCkBAIC02MjMsOCArNjQwLDE1IEBACiAjZGVmaW5lIEVNVUxUWVBFX05PX0RFQ09ERQkgICAgKDEgPDwgMCkKICNkZWZpbmUgRU1VTFRZUEVfVFJBUF9VRAkgICAgKDEgPDwgMSkKICNkZWZpbmUgRU1VTFRZUEVfU0tJUAkJICAgICgxIDw8IDIpCi1pbnQgZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQl1bnNpZ25lZCBsb25nIGNyMiwgdTE2IGVycm9yX2NvZGUsIGludCBlbXVsYXRpb25fdHlwZSk7CitpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMiwKKwkJCSAgICBpbnQgZW11bGF0aW9uX3R5cGUsIHZvaWQgKmluc24sIGludCBpbnNuX2xlbik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGVtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJaW50IGVtdWxhdGlvbl90eXBlKQoreworCXJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCBlbXVsYXRpb25fdHlwZSwgTlVMTCwgMCk7Cit9CisKIHZvaWQgcmVhbG1vZGVfbGdkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBzaXplLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogdm9pZCByZWFsbW9kZV9saWR0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHNpemUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiAKQEAgLTY1MCw3ICs2NzQsNyBAQAogaW50IGt2bV9zZXRfY3IwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjApOwogaW50IGt2bV9zZXRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMpOwogaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpOwotdm9pZCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KTsKK2ludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KTsKIGludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbCk7CiBpbnQga3ZtX2dldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyAqdmFsKTsKIHVuc2lnbmVkIGxvbmcga3ZtX2dldF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKQEAgLTY2OCwxMSArNjkyLDExIEBACiB2b2lkIGt2bV9xdWV1ZV9leGNlcHRpb25fZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIG5yLCB1MzIgZXJyb3JfY29kZSk7CiB2b2lkIGt2bV9yZXF1ZXVlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIG5yKTsKIHZvaWQga3ZtX3JlcXVldWVfZXhjZXB0aW9uX2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBuciwgdTMyIGVycm9yX2NvZGUpOwotdm9pZCBrdm1faW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK3ZvaWQga3ZtX2luamVjdF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHg4Nl9leGNlcHRpb24gKmZhdWx0KTsKIGludCBrdm1fcmVhZF9ndWVzdF9wYWdlX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11ICptbXUsCiAJCQkgICAgZ2ZuX3QgZ2ZuLCB2b2lkICpkYXRhLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLAogCQkJICAgIHUzMiBhY2Nlc3MpOwotdm9pZCBrdm1fcHJvcGFnYXRlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Cit2b2lkIGt2bV9wcm9wYWdhdGVfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZmF1bHQpOwogYm9vbCBrdm1fcmVxdWlyZV9jcGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcmVxdWlyZWRfY3BsKTsKIAogaW50IGt2bV9waWNfc2V0X2lycSh2b2lkICpvcGFxdWUsIGludCBpcnEsIGludCBsZXZlbCk7CkBAIC02OTAsMTYgKzcxNCwyMSBAQAogaW50IGt2bV9tbXVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fbW11X3VubG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fbW11X3N5bmNfcm9vdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLWdwYV90IGt2bV9tbXVfZ3ZhX3RvX2dwYV9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MzIgKmVycm9yKTsKLWdwYV90IGt2bV9tbXVfZ3ZhX3RvX2dwYV9mZXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdTMyICplcnJvcik7Ci1ncGFfdCBrdm1fbW11X2d2YV90b19ncGFfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHUzMiAqZXJyb3IpOwotZ3BhX3Qga3ZtX21tdV9ndmFfdG9fZ3BhX3N5c3RlbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdTMyICplcnJvcik7CitncGFfdCBrdm1fbW11X2d2YV90b19ncGFfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwKKwkJCSAgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pOworZ3BhX3Qga3ZtX21tdV9ndmFfdG9fZ3BhX2ZldGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLAorCQkJICAgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pOworZ3BhX3Qga3ZtX21tdV9ndmFfdG9fZ3BhX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLAorCQkJICAgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pOworZ3BhX3Qga3ZtX21tdV9ndmFfdG9fZ3BhX3N5c3RlbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwKKwkJCQlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKTsKIAogaW50IGt2bV9lbXVsYXRlX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBpbnQga3ZtX2ZpeF9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAotaW50IGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdTMyIGVycm9yX2NvZGUpOworaW50IGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdTMyIGVycm9yX2NvZGUsCisJCSAgICAgICB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4pOwogdm9pZCBrdm1fbW11X2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSk7CiAKIHZvaWQga3ZtX2VuYWJsZV90ZHAodm9pZCk7CkBAIC03NjYsMjAgKzc5NSwyNSBAQAogI2RlZmluZSBIRl9WSU5UUl9NQVNLCQkoMSA8PCAyKQogI2RlZmluZSBIRl9OTUlfTUFTSwkJKDEgPDwgMykKICNkZWZpbmUgSEZfSVJFVF9NQVNLCQkoMSA8PCA0KQorI2RlZmluZSBIRl9HVUVTVF9NQVNLCQkoMSA8PCA1KSAvKiBWQ1BVIGlzIGluIGd1ZXN0LW1vZGUgKi8KIAogLyoKICAqIEhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbiBpbnN0cnVjdGlvbnMgbWF5IGZhdWx0IGlmIGEKICAqIHJlYm9vdCB0dXJucyBvZmYgdmlydHVhbGl6YXRpb24gd2hpbGUgcHJvY2Vzc2VzIGFyZSBydW5uaW5nLgogICogVHJhcCB0aGUgZmF1bHQgYW5kIGlnbm9yZSB0aGUgaW5zdHJ1Y3Rpb24gaWYgdGhhdCBoYXBwZW5zLgogICovCi1hc21saW5rYWdlIHZvaWQga3ZtX2hhbmRsZV9mYXVsdF9vbl9yZWJvb3Qodm9pZCk7Cithc21saW5rYWdlIHZvaWQga3ZtX3NwdXJpb3VzX2ZhdWx0KHZvaWQpOworZXh0ZXJuIGJvb2wga3ZtX3JlYm9vdGluZzsKIAogI2RlZmluZSBfX2t2bV9oYW5kbGVfZmF1bHRfb25fcmVib290KGluc24pIFwKIAkiNjY2OiAiIGluc24gIlxuXHQiIFwKKwkiNjY4OiBcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkiLnB1c2hzZWN0aW9uIC5maXh1cCwgXCJheFwiIFxuIiBcCiAJIjY2NzogXG5cdCIgXAorCSJjbXBiICQwLCBrdm1fcmVib290aW5nIFxuXHQiCSAgICAgIFwKKwkiam5lIDY2OGIgXG5cdCIgICAgICAJCSAgICAgIFwKIAlfX0FTTV9TSVpFKHB1c2gpICIgJDY2NmIgXG5cdCIJICAgICAgXAotCSJqbXAga3ZtX2hhbmRsZV9mYXVsdF9vbl9yZWJvb3QgXG5cdCIgXAorCSJjYWxsIGt2bV9zcHVyaW91c19mYXVsdCBcblx0IgkgICAgICBcCiAJIi5wb3BzZWN0aW9uIFxuXHQiIFwKIAkiLnB1c2hzZWN0aW9uIF9fZXhfdGFibGUsIFwiYVwiIFxuXHQiIFwKIAlfQVNNX1BUUiAiIDY2NmIsIDY2N2IgXG5cdCIgXApAQCAtNzk5LDQgKzgzMywxNSBAQAogCiBib29sIGt2bV9pc19saW5lYXJfcmlwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBsaW5lYXJfcmlwKTsKIAordm9pZCBrdm1fYXJjaF9hc3luY19wYWdlX25vdF9wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkgICAgIHN0cnVjdCBrdm1fYXN5bmNfcGYgKndvcmspOwordm9pZCBrdm1fYXJjaF9hc3luY19wYWdlX3ByZXNlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSBzdHJ1Y3Qga3ZtX2FzeW5jX3BmICp3b3JrKTsKK3ZvaWQga3ZtX2FyY2hfYXN5bmNfcGFnZV9yZWFkeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgICAgc3RydWN0IGt2bV9hc3luY19wZiAqd29yayk7Citib29sIGt2bV9hcmNoX2Nhbl9pbmplY3RfYXN5bmNfcGFnZV9wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitleHRlcm4gYm9vbCBrdm1fZmluZF9hc3luY19wZl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pOworCit2b2lkIGt2bV9jb21wbGV0ZV9pbnNuX2dwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVycik7CisKICNlbmRpZiAvKiBfQVNNX1g4Nl9LVk1fSE9TVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaAppbmRleCA3YjU2MmI2Li5hNDI3YmY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgKQEAgLTIwLDYgKzIwLDcgQEAKICAqIGFyZSBhdmFpbGFibGUuIFRoZSB1c2Ugb2YgMHgxMSBhbmQgMHgxMiBpcyBkZXByZWNhdGVkCiAgKi8KICNkZWZpbmUgS1ZNX0ZFQVRVUkVfQ0xPQ0tTT1VSQ0UyICAgICAgICAzCisjZGVmaW5lIEtWTV9GRUFUVVJFX0FTWU5DX1BGCQk0CiAKIC8qIFRoZSBsYXN0IDggYml0cyBhcmUgdXNlZCB0byBpbmRpY2F0ZSBob3cgdG8gaW50ZXJwcmV0IHRoZSBmbGFncyBmaWVsZAogICogaW4gcHZjbG9jayBzdHJ1Y3R1cmUuIElmIG5vIGJpdHMgYXJlIHNldCwgYWxsIGZsYWdzIGFyZSBpZ25vcmVkLgpAQCAtMzIsOSArMzMsMTMgQEAKIC8qIEN1c3RvbSBNU1JzIGZhbGxzIGluIHRoZSByYW5nZSAweDRiNTY0ZDAwLTB4NGI1NjRkZmYgKi8KICNkZWZpbmUgTVNSX0tWTV9XQUxMX0NMT0NLX05FVyAgMHg0YjU2NGQwMAogI2RlZmluZSBNU1JfS1ZNX1NZU1RFTV9USU1FX05FVyAweDRiNTY0ZDAxCisjZGVmaW5lIE1TUl9LVk1fQVNZTkNfUEZfRU4gMHg0YjU2NGQwMgogCiAjZGVmaW5lIEtWTV9NQVhfTU1VX09QX0JBVENIICAgICAgICAgICAzMgogCisjZGVmaW5lIEtWTV9BU1lOQ19QRl9FTkFCTEVECQkJKDEgPDwgMCkKKyNkZWZpbmUgS1ZNX0FTWU5DX1BGX1NFTkRfQUxXQVlTCQkoMSA8PCAxKQorCiAvKiBPcGVyYXRpb25zIGZvciBLVk1fSENfTU1VX09QICovCiAjZGVmaW5lIEtWTV9NTVVfT1BfV1JJVEVfUFRFICAgICAgICAgICAgMQogI2RlZmluZSBLVk1fTU1VX09QX0ZMVVNIX1RMQgkgICAgICAgIDIKQEAgLTYxLDEwICs2NiwyMCBAQAogCV9fdTY0IHB0X3BoeXM7CiB9OwogCisjZGVmaW5lIEtWTV9QVl9SRUFTT05fUEFHRV9OT1RfUFJFU0VOVCAxCisjZGVmaW5lIEtWTV9QVl9SRUFTT05fUEFHRV9SRUFEWSAyCisKK3N0cnVjdCBrdm1fdmNwdV9wdl9hcGZfZGF0YSB7CisJX191MzIgcmVhc29uOworCV9fdTggcGFkWzYwXTsKKwlfX3UzMiBlbmFibGVkOworfTsKKwogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKIGV4dGVybiB2b2lkIGt2bWNsb2NrX2luaXQodm9pZCk7CitleHRlcm4gaW50IGt2bV9yZWdpc3Rlcl9jbG9jayhjaGFyICp0eHQpOwogCiAKIC8qIFRoaXMgaW5zdHJ1Y3Rpb24gaXMgdm1jYWxsLiAgT24gbm9uLVZUIGFyY2hpdGVjdHVyZXMsIGl0IHdpbGwgZ2VuZXJhdGUgYQpAQCAtMTYwLDggKzE3NSwxNyBAQAogCiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVAogdm9pZCBfX2luaXQga3ZtX2d1ZXN0X2luaXQodm9pZCk7Cit2b2lkIGt2bV9hc3luY19wZl90YXNrX3dhaXQodTMyIHRva2VuKTsKK3ZvaWQga3ZtX2FzeW5jX3BmX3Rhc2tfd2FrZSh1MzIgdG9rZW4pOwordTMyIGt2bV9yZWFkX2FuZF9yZXNldF9wZl9yZWFzb24odm9pZCk7CiAjZWxzZQogI2RlZmluZSBrdm1fZ3Vlc3RfaW5pdCgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUga3ZtX2FzeW5jX3BmX3Rhc2tfd2FpdChUKSBkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBrdm1fYXN5bmNfcGZfdGFza193YWtlKFQpIGRvIHt9IHdoaWxlKDApCitzdGF0aWMgaW5saW5lIHUzMiBrdm1fcmVhZF9hbmRfcmVzZXRfcGZfcmVhc29uKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2hfdHJhcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21hY2hfdHJhcHMuaAppbmRleCBmNzkyMDYwLi43MmE4YjUyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tYWNoX3RyYXBzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWFjaF90cmFwcy5oCkBAIC03LDkgKzcsMTkgQEAKIAogI2luY2x1ZGUgPGFzbS9tYzE0NjgxOHJ0Yy5oPgogCisjZGVmaW5lIE5NSV9SRUFTT05fUE9SVAkJMHg2MQorCisjZGVmaW5lIE5NSV9SRUFTT05fU0VSUgkJMHg4MAorI2RlZmluZSBOTUlfUkVBU09OX0lPQ0hLCTB4NDAKKyNkZWZpbmUgTk1JX1JFQVNPTl9NQVNLCQkoTk1JX1JFQVNPTl9TRVJSIHwgTk1JX1JFQVNPTl9JT0NISykKKworI2RlZmluZSBOTUlfUkVBU09OX0NMRUFSX1NFUlIJMHgwNAorI2RlZmluZSBOTUlfUkVBU09OX0NMRUFSX0lPQ0hLCTB4MDgKKyNkZWZpbmUgTk1JX1JFQVNPTl9DTEVBUl9NQVNLCTB4MGYKKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGdldF9ubWlfcmVhc29uKHZvaWQpCiB7Ci0JcmV0dXJuIGluYigweDYxKTsKKwlyZXR1cm4gaW5iKE5NSV9SRUFTT05fUE9SVCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWFzc2VydF9ubWkodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL25taS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKaW5kZXggYzQwMjFiOS4uYzc2ZjViOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKQEAgLTIzLDYgKzIzLDI2IEBACiAjZGVmaW5lIGFyY2hfdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSBhcmNoX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UKICNlbmRpZgogCisvKgorICogRGVmaW5lIHNvbWUgcHJpb3JpdGllcyBmb3IgdGhlIG5taSBub3RpZmllciBjYWxsIGNoYWluLgorICoKKyAqIENyZWF0ZSBhIGxvY2FsIG5taSBiaXQgdGhhdCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhhbgorICogZXh0ZXJuYWwgbm1pcywgYmVjYXVzZSB0aGUgbG9jYWwgb25lcyBhcmUgbW9yZSBmcmVxdWVudC4KKyAqCisgKiBBbHNvIHNldHVwIHNvbWUgZGVmYXVsdCBoaWdoL25vcm1hbC9sb3cgc2V0dGluZ3MgZm9yCisgKiBzdWJzeXN0ZW1zIHRvIHJlZ2lzdGVycyB3aXRoLiAgVXNpbmcgNCBiaXRzIHRvIHNlcGVyYXRlCisgKiB0aGUgcHJpb3JpdGllcy4gIFRoaXMgY2FuIGdvIGFsb3QgaGlnaGVyIGlmIG5lZWRlZCBiZS4KKyAqLworCisjZGVmaW5lIE5NSV9MT0NBTF9TSElGVAkJMTYJLyogcmFuZG9tbHkgcGlja2VkICovCisjZGVmaW5lIE5NSV9MT0NBTF9CSVQJCSgxVUxMIDw8IE5NSV9MT0NBTF9TSElGVCkKKyNkZWZpbmUgTk1JX0hJR0hfUFJJT1IJCSgxVUxMIDw8IDgpCisjZGVmaW5lIE5NSV9OT1JNQUxfUFJJT1IJKDFVTEwgPDwgNCkKKyNkZWZpbmUgTk1JX0xPV19QUklPUgkJKDFVTEwgPDwgMCkKKyNkZWZpbmUgTk1JX0xPQ0FMX0hJR0hfUFJJT1IJKE5NSV9MT0NBTF9CSVQgfCBOTUlfSElHSF9QUklPUikKKyNkZWZpbmUgTk1JX0xPQ0FMX05PUk1BTF9QUklPUgkoTk1JX0xPQ0FMX0JJVCB8IE5NSV9OT1JNQUxfUFJJT1IpCisjZGVmaW5lIE5NSV9MT0NBTF9MT1dfUFJJT1IJKE5NSV9MT0NBTF9CSVQgfCBOTUlfTE9XX1BSSU9SKQorCiB2b2lkIHN0b3Bfbm1pKHZvaWQpOwogdm9pZCByZXN0YXJ0X25taSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV82NC5oCmluZGV4IDgyM2UwNzAuLjVhZTg3MjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzY0LmgKQEAgLTM4LDcgKzM4LDcgQEAKIGV4dGVybiB2b2lkIF9fY3B1aW5pdCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSk7CiAKICNpZmRlZiBDT05GSUdfTlVNQV9FTVUKLSNkZWZpbmUgRkFLRV9OT0RFX01JTl9TSVpFCSgodTY0KTY0IDw8IDIwKQorI2RlZmluZSBGQUtFX05PREVfTUlOX1NJWkUJKCh1NjQpMzIgPDwgMjApCiAjZGVmaW5lIEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLCSh+KEZBS0VfTk9ERV9NSU5fU0laRSAtIDFVTCkpCiAjZW5kaWYgLyogQ09ORklHX05VTUFfRU1VICovCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vb2xwYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vb2xwYy5oCmluZGV4IDQyYTk3OGMuLmY0ODIwMTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL29scGMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9vbHBjLmgKQEAgLTEwNywxMCArMTA3LDE0IEBACiAvKiBHUElPIGFzc2lnbm1lbnRzICovCiAKICNkZWZpbmUgT0xQQ19HUElPX01JQ19BQwkxCi0jZGVmaW5lIE9MUENfR1BJT19EQ09OX0lSUQlnZW9kZV9ncGlvKDcpCisjZGVmaW5lIE9MUENfR1BJT19EQ09OX1NUQVQwCTUKKyNkZWZpbmUgT0xQQ19HUElPX0RDT05fU1RBVDEJNgorI2RlZmluZSBPTFBDX0dQSU9fRENPTl9JUlEJNwogI2RlZmluZSBPTFBDX0dQSU9fVEhSTV9BTFJNCWdlb2RlX2dwaW8oMTApCi0jZGVmaW5lIE9MUENfR1BJT19TTUJfQ0xLCWdlb2RlX2dwaW8oMTQpCi0jZGVmaW5lIE9MUENfR1BJT19TTUJfREFUQQlnZW9kZV9ncGlvKDE1KQorI2RlZmluZSBPTFBDX0dQSU9fRENPTl9MT0FEICAgIDExCisjZGVmaW5lIE9MUENfR1BJT19EQ09OX0JMQU5LICAgMTIKKyNkZWZpbmUgT0xQQ19HUElPX1NNQl9DTEsgICAgICAxNAorI2RlZmluZSBPTFBDX0dQSU9fU01CX0RBVEEgICAgIDE1CiAjZGVmaW5lIE9MUENfR1BJT19XT1JLQVVYCWdlb2RlX2dwaW8oMjQpCiAjZGVmaW5lIE9MUENfR1BJT19MSUQJCWdlb2RlX2dwaW8oMjYpCiAjZGVmaW5lIE9MUENfR1BJT19FQ1NDSQkJZ2VvZGVfZ3BpbygyNykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL29scGNfb2Z3LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9vbHBjX29mdy5oCmluZGV4IDJhODQ3ODEuLjY0MTk4OGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL29scGNfb2Z3LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vb2xwY19vZncuaApAQCAtOCw2ICs4LDggQEAKIAogI2lmZGVmIENPTkZJR19PTFBDX09QRU5GSVJNV0FSRQogCitleHRlcm4gYm9vbCBvbHBjX29md19pc19pbnN0YWxsZWQodm9pZCk7CisKIC8qIHJ1biBhbiBPRlcgY29tbWFuZCBieSBjYWxsaW5nIGludG8gdGhlIGZpcm13YXJlICovCiAjZGVmaW5lIG9scGNfb2Z3KG5hbWUsIGFyZ3MsIHJlcykgXAogCV9fb2xwY19vZncoKG5hbWUpLCBBUlJBWV9TSVpFKGFyZ3MpLCBhcmdzLCBBUlJBWV9TSVpFKHJlcyksIHJlcykKQEAgLTI2LDEwICsyOCwxNyBAQAogCiAjZWxzZSAvKiAhQ09ORklHX09MUENfT1BFTkZJUk1XQVJFICovCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBvbHBjX29md19pc19pbnN0YWxsZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBvbHBjX29md19kZXRlY3Qodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfb2xwY19vZndfcGdkKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSBib29sIG9scGNfb2Z3X3ByZXNlbnQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH0KIAogI2VuZGlmIC8qICFDT05GSUdfT0xQQ19PUEVORklSTVdBUkUgKi8KIAorI2lmZGVmIENPTkZJR19PTFBDX09QRU5GSVJNV0FSRV9EVAorZXh0ZXJuIHZvaWQgb2xwY19kdF9idWlsZF9kZXZpY2V0cmVlKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbHBjX2R0X2J1aWxkX2RldmljZXRyZWUodm9pZCkgeyB9CisjZW5kaWYgLyogQ09ORklHX09MUENfT1BFTkZJUk1XQVJFX0RUICovCisKICNlbmRpZiAvKiBfQVNNX1g4Nl9PTFBDX09GV19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50X3A0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50X3A0LmgKaW5kZXggMjk1ZTJmZi4uZTJmNmE5OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9wNC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnRfcDQuaApAQCAtMjAsNiArMjAsOSBAQAogI2RlZmluZSBBUkNIX1A0X01BWF9FU0NSCShBUkNIX1A0X1RPVEFMX0VTQ1IgLSBBUkNIX1A0X1JFU0VSVkVEX0VTQ1IpCiAjZGVmaW5lIEFSQ0hfUDRfTUFYX0NDQ1IJKDE4KQogCisjZGVmaW5lIEFSQ0hfUDRfQ05UUlZBTF9CSVRTCSg0MCkKKyNkZWZpbmUgQVJDSF9QNF9DTlRSVkFMX01BU0sJKCgxVUxMIDw8IEFSQ0hfUDRfQ05UUlZBTF9CSVRTKSAtIDEpCisKICNkZWZpbmUgUDRfRVNDUl9FVkVOVF9NQVNLCTB4N2UwMDAwMDBVCiAjZGVmaW5lIFA0X0VTQ1JfRVZFTlRfU0hJRlQJMjUKICNkZWZpbmUgUDRfRVNDUl9FVkVOVE1BU0tfTUFTSwkweDAxZmZmZTAwVQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDI3MWRlOTQuLmI0Mzg5YTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTkyLDcgKzkyLDcgQEAKIGV4dGVybiB2b2lkIF9fX3BtZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwbWRfdCAqcG1kKTsKIAogc3RhdGljIGlubGluZSB2b2lkIF9fcG1kX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBtZF90ICpwbWQsCi0JCQkJICB1bnNpZ25lZCBsb25nIGFkZGRyZXNzKQorCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCV9fX3BtZF9mcmVlX3RsYih0bGIsIHBtZCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGM2ZWZlY2YuLjUzZmQxZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC05MDEsNyArOTAxLDcgQEAKIC8qCiAgKiBUaGUgYmVsb3cgLTggaXMgdG8gcmVzZXJ2ZSA4IGJ5dGVzIG9uIHRvcCBvZiB0aGUgcmluZzAgc3RhY2suCiAgKiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBndWFyYW50ZWUgdGhhdCB0aGUgZW50aXJlICJzdHJ1Y3QgcHRfcmVncyIKLSAqIGlzIGFjY2Vzc2FibGUgZXZlbiBpZiB0aGUgQ1BVIGhhdmVuJ3Qgc3RvcmVkIHRoZSBTUy9FU1AgcmVnaXN0ZXJzCisgKiBpcyBhY2Nlc3NpYmxlIGV2ZW4gaWYgdGhlIENQVSBoYXZlbid0IHN0b3JlZCB0aGUgU1MvRVNQIHJlZ2lzdGVycwogICogb24gdGhlIHN0YWNrIChpbnRlcnJ1cHQgZ2F0ZSBkb2VzIG5vdCBzYXZlIHRoZXNlIHJlZ2lzdGVycwogICogd2hlbiBzd2l0Y2hpbmcgdG8gdGhlIHNhbWUgcHJpdiByaW5nKS4KICAqIFRoZXJlZm9yZSBiZXdhcmU6IGFjY2Vzc2luZyB0aGUgc3MvZXNwIGZpZWxkcyBvZiB0aGUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb20uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGVjOTVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvbS5oCkBAIC0wLDAgKzEgQEAKKy8qIGR1bW15IHByb20uaDsgaGVyZSB0byBtYWtlIGxpbnV4L29mLmgncyAjaW5jbHVkZXMgaGFwcHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKaW5kZXggMGU4MzEwNS4uZjJiODNiYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKQEAgLTQ3LDE0ICs0NywxMyBAQAogCUlOVEVSQ0VQVF9NT05JVE9SLAogCUlOVEVSQ0VQVF9NV0FJVCwKIAlJTlRFUkNFUFRfTVdBSVRfQ09ORCwKKwlJTlRFUkNFUFRfWFNFVEJWLAogfTsKIAogCiBzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB2bWNiX2NvbnRyb2xfYXJlYSB7Ci0JdTE2IGludGVyY2VwdF9jcl9yZWFkOwotCXUxNiBpbnRlcmNlcHRfY3Jfd3JpdGU7Ci0JdTE2IGludGVyY2VwdF9kcl9yZWFkOwotCXUxNiBpbnRlcmNlcHRfZHJfd3JpdGU7CisJdTMyIGludGVyY2VwdF9jcjsKKwl1MzIgaW50ZXJjZXB0X2RyOwogCXUzMiBpbnRlcmNlcHRfZXhjZXB0aW9uczsKIAl1NjQgaW50ZXJjZXB0OwogCXU4IHJlc2VydmVkXzFbNDJdOwpAQCAtODEsMTQgKzgwLDE5IEBACiAJdTMyIGV2ZW50X2lual9lcnI7CiAJdTY0IG5lc3RlZF9jcjM7CiAJdTY0IGxicl9jdGw7Ci0JdTY0IHJlc2VydmVkXzU7CisJdTMyIGNsZWFuOworCXUzMiByZXNlcnZlZF81OwogCXU2NCBuZXh0X3JpcDsKLQl1OCByZXNlcnZlZF82WzgxNl07CisJdTggaW5zbl9sZW47CisJdTggaW5zbl9ieXRlc1sxNV07CisJdTggcmVzZXJ2ZWRfNls4MDBdOwogfTsKIAogCiAjZGVmaW5lIFRMQl9DT05UUk9MX0RPX05PVEhJTkcgMAogI2RlZmluZSBUTEJfQ09OVFJPTF9GTFVTSF9BTExfQVNJRCAxCisjZGVmaW5lIFRMQl9DT05UUk9MX0ZMVVNIX0FTSUQgMworI2RlZmluZSBUTEJfQ09OVFJPTF9GTFVTSF9BU0lEX0xPQ0FMIDcKIAogI2RlZmluZSBWX1RQUl9NQVNLIDB4MGYKIApAQCAtMjA0LDE5ICsyMDgsMzEgQEAKICNkZWZpbmUgU1ZNX1NFTEVDVE9SX1JFQURfTUFTSyBTVk1fU0VMRUNUT1JfV1JJVEVfTUFTSwogI2RlZmluZSBTVk1fU0VMRUNUT1JfQ09ERV9NQVNLICgxIDw8IDMpCiAKLSNkZWZpbmUgSU5URVJDRVBUX0NSMF9NQVNLIDEKLSNkZWZpbmUgSU5URVJDRVBUX0NSM19NQVNLICgxIDw8IDMpCi0jZGVmaW5lIElOVEVSQ0VQVF9DUjRfTUFTSyAoMSA8PCA0KQotI2RlZmluZSBJTlRFUkNFUFRfQ1I4X01BU0sgKDEgPDwgOCkKKyNkZWZpbmUgSU5URVJDRVBUX0NSMF9SRUFECTAKKyNkZWZpbmUgSU5URVJDRVBUX0NSM19SRUFECTMKKyNkZWZpbmUgSU5URVJDRVBUX0NSNF9SRUFECTQKKyNkZWZpbmUgSU5URVJDRVBUX0NSOF9SRUFECTgKKyNkZWZpbmUgSU5URVJDRVBUX0NSMF9XUklURQkoMTYgKyAwKQorI2RlZmluZSBJTlRFUkNFUFRfQ1IzX1dSSVRFCSgxNiArIDMpCisjZGVmaW5lIElOVEVSQ0VQVF9DUjRfV1JJVEUJKDE2ICsgNCkKKyNkZWZpbmUgSU5URVJDRVBUX0NSOF9XUklURQkoMTYgKyA4KQogCi0jZGVmaW5lIElOVEVSQ0VQVF9EUjBfTUFTSyAxCi0jZGVmaW5lIElOVEVSQ0VQVF9EUjFfTUFTSyAoMSA8PCAxKQotI2RlZmluZSBJTlRFUkNFUFRfRFIyX01BU0sgKDEgPDwgMikKLSNkZWZpbmUgSU5URVJDRVBUX0RSM19NQVNLICgxIDw8IDMpCi0jZGVmaW5lIElOVEVSQ0VQVF9EUjRfTUFTSyAoMSA8PCA0KQotI2RlZmluZSBJTlRFUkNFUFRfRFI1X01BU0sgKDEgPDwgNSkKLSNkZWZpbmUgSU5URVJDRVBUX0RSNl9NQVNLICgxIDw8IDYpCi0jZGVmaW5lIElOVEVSQ0VQVF9EUjdfTUFTSyAoMSA8PCA3KQorI2RlZmluZSBJTlRFUkNFUFRfRFIwX1JFQUQJMAorI2RlZmluZSBJTlRFUkNFUFRfRFIxX1JFQUQJMQorI2RlZmluZSBJTlRFUkNFUFRfRFIyX1JFQUQJMgorI2RlZmluZSBJTlRFUkNFUFRfRFIzX1JFQUQJMworI2RlZmluZSBJTlRFUkNFUFRfRFI0X1JFQUQJNAorI2RlZmluZSBJTlRFUkNFUFRfRFI1X1JFQUQJNQorI2RlZmluZSBJTlRFUkNFUFRfRFI2X1JFQUQJNgorI2RlZmluZSBJTlRFUkNFUFRfRFI3X1JFQUQJNworI2RlZmluZSBJTlRFUkNFUFRfRFIwX1dSSVRFCSgxNiArIDApCisjZGVmaW5lIElOVEVSQ0VQVF9EUjFfV1JJVEUJKDE2ICsgMSkKKyNkZWZpbmUgSU5URVJDRVBUX0RSMl9XUklURQkoMTYgKyAyKQorI2RlZmluZSBJTlRFUkNFUFRfRFIzX1dSSVRFCSgxNiArIDMpCisjZGVmaW5lIElOVEVSQ0VQVF9EUjRfV1JJVEUJKDE2ICsgNCkKKyNkZWZpbmUgSU5URVJDRVBUX0RSNV9XUklURQkoMTYgKyA1KQorI2RlZmluZSBJTlRFUkNFUFRfRFI2X1dSSVRFCSgxNiArIDYpCisjZGVmaW5lIElOVEVSQ0VQVF9EUjdfV1JJVEUJKDE2ICsgNykKIAogI2RlZmluZSBTVk1fRVZUSU5KX1ZFQ19NQVNLIDB4ZmYKIApAQCAtMjQ2LDYgKzI2Miw4IEBACiAjZGVmaW5lIFNWTV9FWElUSU5GT1NISUZUX1RTX1JFQVNPTl9KTVAgMzgKICNkZWZpbmUgU1ZNX0VYSVRJTkZPU0hJRlRfVFNfSEFTX0VSUk9SX0NPREUgNDQKIAorI2RlZmluZSBTVk1fRVhJVElORk9fUkVHX01BU0sgMHgwRgorCiAjZGVmaW5lCVNWTV9FWElUX1JFQURfQ1IwIAkweDAwMAogI2RlZmluZQlTVk1fRVhJVF9SRUFEX0NSMyAJMHgwMDMKICNkZWZpbmUJU1ZNX0VYSVRfUkVBRF9DUjQgCTB4MDA0CkBAIC0zMTYsNiArMzM0LDcgQEAKICNkZWZpbmUgU1ZNX0VYSVRfTU9OSVRPUgkweDA4YQogI2RlZmluZSBTVk1fRVhJVF9NV0FJVAkJMHgwOGIKICNkZWZpbmUgU1ZNX0VYSVRfTVdBSVRfQ09ORAkweDA4YworI2RlZmluZSBTVk1fRVhJVF9YU0VUQlYJCTB4MDhkCiAjZGVmaW5lIFNWTV9FWElUX05QRiAgCQkweDQwMAogCiAjZGVmaW5lIFNWTV9FWElUX0VSUgkJLTEKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYXBzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFwcy5oCmluZGV4IGY2NmNkYTUuLjAzMTBkYTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYXBzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhcHMuaApAQCAtMzAsNiArMzAsNyBAQAogYXNtbGlua2FnZSB2b2lkIHN0YWNrX3NlZ21lbnQodm9pZCk7CiBhc21saW5rYWdlIHZvaWQgZ2VuZXJhbF9wcm90ZWN0aW9uKHZvaWQpOwogYXNtbGlua2FnZSB2b2lkIHBhZ2VfZmF1bHQodm9pZCk7Cithc21saW5rYWdlIHZvaWQgYXN5bmNfcGFnZV9mYXVsdCh2b2lkKTsKIGFzbWxpbmthZ2Ugdm9pZCBzcHVyaW91c19pbnRlcnJ1cHRfYnVnKHZvaWQpOwogYXNtbGlua2FnZSB2b2lkIGNvcHJvY2Vzc29yX2Vycm9yKHZvaWQpOwogYXNtbGlua2FnZSB2b2lkIGFsaWdubWVudF9jaGVjayh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgKaW5kZXggOWYwY2JkOS4uODQ0NzFiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgKQEAgLTY2LDE1ICs2NiwyMyBAQAogI2RlZmluZSBQSU5fQkFTRURfTk1JX0VYSVRJTkcgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAogI2RlZmluZSBQSU5fQkFTRURfVklSVFVBTF9OTUlTICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAogCisjZGVmaW5lIFZNX0VYSVRfU0FWRV9ERUJVR19DT05UUk9MUyAgICAgICAgICAgICAweDAwMDAwMDAyCiAjZGVmaW5lIFZNX0VYSVRfSE9TVF9BRERSX1NQQUNFX1NJWkUgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFZNX0VYSVRfTE9BRF9JQTMyX1BFUkZfR0xPQkFMX0NUUkwgICAgICAweDAwMDAxMDAwCiAjZGVmaW5lIFZNX0VYSVRfQUNLX0lOVFJfT05fRVhJVCAgICAgICAgICAgICAgICAweDAwMDA4MDAwCiAjZGVmaW5lIFZNX0VYSVRfU0FWRV9JQTMyX1BBVAkJCTB4MDAwNDAwMDAKICNkZWZpbmUgVk1fRVhJVF9MT0FEX0lBMzJfUEFUCQkJMHgwMDA4MDAwMAorI2RlZmluZSBWTV9FWElUX1NBVkVfSUEzMl9FRkVSICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBWTV9FWElUX0xPQURfSUEzMl9FRkVSICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBWTV9FWElUX1NBVkVfVk1YX1BSRUVNUFRJT05fVElNRVIgICAgICAgMHgwMDQwMDAwMAogCisjZGVmaW5lIFZNX0VOVFJZX0xPQURfREVCVUdfQ09OVFJPTFMgICAgICAgICAgICAweDAwMDAwMDAyCiAjZGVmaW5lIFZNX0VOVFJZX0lBMzJFX01PREUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCiAjZGVmaW5lIFZNX0VOVFJZX1NNTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCiAjZGVmaW5lIFZNX0VOVFJZX0RFQUNUX0RVQUxfTU9OSVRPUiAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFZNX0VOVFJZX0xPQURfSUEzMl9QRVJGX0dMT0JBTF9DVFJMICAgICAweDAwMDAyMDAwCiAjZGVmaW5lIFZNX0VOVFJZX0xPQURfSUEzMl9QQVQJCQkweDAwMDA0MDAwCisjZGVmaW5lIFZNX0VOVFJZX0xPQURfSUEzMl9FRkVSICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCiAKIC8qIFZNQ1MgRW5jb2RpbmdzICovCiBlbnVtIHZtY3NfZmllbGQgewpAQCAtMjM5LDYgKzI0Nyw3IEBACiAjZGVmaW5lIEVYSVRfUkVBU09OX1RBU0tfU1dJVENIICAgICAgICAgOQogI2RlZmluZSBFWElUX1JFQVNPTl9DUFVJRCAgICAgICAgICAgICAgIDEwCiAjZGVmaW5lIEVYSVRfUkVBU09OX0hMVCAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRVhJVF9SRUFTT05fSU5WRCAgICAgICAgICAgICAgICAxMwogI2RlZmluZSBFWElUX1JFQVNPTl9JTlZMUEcgICAgICAgICAgICAgIDE0CiAjZGVmaW5lIEVYSVRfUkVBU09OX1JEUE1DICAgICAgICAgICAgICAgMTUKICNkZWZpbmUgRVhJVF9SRUFTT05fUkRUU0MgICAgICAgICAgICAgICAxNgpAQCAtMjk2LDYgKzMwNSwxMiBAQAogI2RlZmluZSBHVUVTVF9JTlRSX1NUQVRFX1NNSQkJMHgwMDAwMDAwNAogI2RlZmluZSBHVUVTVF9JTlRSX1NUQVRFX05NSQkJMHgwMDAwMDAwOAogCisvKiBHVUVTVF9BQ1RJVklUWV9TVEFURSBmbGFncyAqLworI2RlZmluZSBHVUVTVF9BQ1RJVklUWV9BQ1RJVkUJCTAKKyNkZWZpbmUgR1VFU1RfQUNUSVZJVFlfSExUCQkxCisjZGVmaW5lIEdVRVNUX0FDVElWSVRZX1NIVVRET1dOCQkyCisjZGVmaW5lIEdVRVNUX0FDVElWSVRZX1dBSVRfU0lQSQkzCisKIC8qCiAgKiBFeGl0IFF1YWxpZmljYXRpb25zIGZvciBNT1YgZm9yIENvbnRyb2wgUmVnaXN0ZXIgQWNjZXNzCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCBkMmZkYjA4Li41N2NhNzc3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC0xMDg2LDcgKzEwODYsNyBAQAogCiAJZG1hX2RvbS0+YXBlcnR1cmVfc2l6ZSArPSBBUEVSVFVSRV9SQU5HRV9TSVpFOwogCi0JLyogSW50aWFsaXplIHRoZSBleGNsdXNpb24gcmFuZ2UgaWYgbmVjZXNzYXJ5ICovCisJLyogSW5pdGlhbGl6ZSB0aGUgZXhjbHVzaW9uIHJhbmdlIGlmIG5lY2Vzc2FyeSAqLwogCWZvcl9lYWNoX2lvbW11KGlvbW11KSB7CiAJCWlmIChpb21tdS0+ZXhjbHVzaW9uX3N0YXJ0ICYmCiAJCSAgICBpb21tdS0+ZXhjbHVzaW9uX3N0YXJ0ID49IGRtYV9kb20tPmFwZXJ0dXJlW2luZGV4XS0+b2Zmc2V0CkBAIC0xMzUzLDcgKzEzNTMsNyBAQAogCiAvKgogICogQWxsb2NhdGVzIGEgbmV3IHByb3RlY3Rpb24gZG9tYWluIHVzYWJsZSBmb3IgdGhlIGRtYV9vcHMgZnVuY3Rpb25zLgotICogSXQgYWxzbyBpbnRpYWxpemVzIHRoZSBwYWdlIHRhYmxlIGFuZCB0aGUgYWRkcmVzcyBhbGxvY2F0b3IgZGF0YQorICogSXQgYWxzbyBpbml0aWFsaXplcyB0aGUgcGFnZSB0YWJsZSBhbmQgdGhlIGFkZHJlc3MgYWxsb2NhdG9yIGRhdGEKICAqIHN0cnVjdHVyZXMgcmVxdWlyZWQgZm9yIHRoZSBkbWFfb3BzIGludGVyZmFjZQogICovCiBzdGF0aWMgc3RydWN0IGRtYV9vcHNfZG9tYWluICpkbWFfb3BzX2RvbWFpbl9hbGxvYyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9uYi5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9uYi5jCmluZGV4IGFmZmFjYjUuLjBhOTlmNzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfbmIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX25iLmMKQEAgLTIwLDYgKzIwLDEzIEBACiB9OwogRVhQT1JUX1NZTUJPTChhbWRfbmJfbWlzY19pZHMpOwogCitjb25zdCBzdHJ1Y3QgYW1kX25iX2J1c19kZXZfcmFuZ2UgYW1kX25iX2J1c19kZXZfcmFuZ2VzW10gX19pbml0Y29uc3QgPSB7CisJeyAweDAwLCAweDE4LCAweDIwIH0sCisJeyAweGZmLCAweDAwLCAweDIwIH0sCisJeyAweGZlLCAweDAwLCAweDIwIH0sCisJeyB9Cit9OworCiBzdHJ1Y3QgYW1kX25vcnRoYnJpZGdlX2luZm8gYW1kX25vcnRoYnJpZGdlczsKIEVYUE9SVF9TWU1CT0woYW1kX25vcnRoYnJpZGdlcyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jIGIvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMKaW5kZXggZGNkN2M4My4uNTk1NWE3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMKQEAgLTM5LDE4ICszOSw2IEBACiAKIGludCBmaXhfYXBlcnR1cmUgX19pbml0ZGF0YSA9IDE7CiAKLXN0cnVjdCBidXNfZGV2X3JhbmdlIHsKLQlpbnQgYnVzOwotCWludCBkZXZfYmFzZTsKLQlpbnQgZGV2X2xpbWl0OwotfTsKLQotc3RhdGljIHN0cnVjdCBidXNfZGV2X3JhbmdlIGJ1c19kZXZfcmFuZ2VzW10gX19pbml0ZGF0YSA9IHsKLQl7IDB4MDAsIDB4MTgsIDB4MjB9LAotCXsgMHhmZiwgMHgwMCwgMHgyMH0sCi0JeyAweGZlLCAweDAwLCAweDIwfQotfTsKLQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBnYXJ0X3Jlc291cmNlID0gewogCS5uYW1lCT0gIkdBUlQiLAogCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLApAQCAtMjk0LDEzICsyODIsMTMgQEAKIAlzZWFyY2hfYWdwX2JyaWRnZSgmYWdwX2FwZXJfb3JkZXIsICZ2YWxpZF9hZ3ApOwogCiAJZml4ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidXNfZGV2X3Jhbmdlcyk7IGkrKykgeworCWZvciAoaSA9IDA7IGFtZF9uYl9idXNfZGV2X3Jhbmdlc1tpXS5kZXZfbGltaXQ7IGkrKykgewogCQlpbnQgYnVzOwogCQlpbnQgZGV2X2Jhc2UsIGRldl9saW1pdDsKIAotCQlidXMgPSBidXNfZGV2X3Jhbmdlc1tpXS5idXM7Ci0JCWRldl9iYXNlID0gYnVzX2Rldl9yYW5nZXNbaV0uZGV2X2Jhc2U7Ci0JCWRldl9saW1pdCA9IGJ1c19kZXZfcmFuZ2VzW2ldLmRldl9saW1pdDsKKwkJYnVzID0gYW1kX25iX2J1c19kZXZfcmFuZ2VzW2ldLmJ1czsKKwkJZGV2X2Jhc2UgPSBhbWRfbmJfYnVzX2Rldl9yYW5nZXNbaV0uZGV2X2Jhc2U7CisJCWRldl9saW1pdCA9IGFtZF9uYl9idXNfZGV2X3Jhbmdlc1tpXS5kZXZfbGltaXQ7CiAKIAkJZm9yIChzbG90ID0gZGV2X2Jhc2U7IHNsb3QgPCBkZXZfbGltaXQ7IHNsb3QrKykgewogCQkJaWYgKCFlYXJseV9pc19hbWRfbmIocmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgMywgMHgwMCkpKQpAQCAtMzQ5LDEzICszMzcsMTMgQEAKIAkJcmV0dXJuOwogCiAJLyogZGlzYWJsZSB0aGVtIGFsbCBhdCBmaXJzdCAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1c19kZXZfcmFuZ2VzKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGFtZF9uYl9idXNfZGV2X3Jhbmdlc1tpXS5kZXZfbGltaXQ7IGkrKykgewogCQlpbnQgYnVzOwogCQlpbnQgZGV2X2Jhc2UsIGRldl9saW1pdDsKIAotCQlidXMgPSBidXNfZGV2X3Jhbmdlc1tpXS5idXM7Ci0JCWRldl9iYXNlID0gYnVzX2Rldl9yYW5nZXNbaV0uZGV2X2Jhc2U7Ci0JCWRldl9saW1pdCA9IGJ1c19kZXZfcmFuZ2VzW2ldLmRldl9saW1pdDsKKwkJYnVzID0gYW1kX25iX2J1c19kZXZfcmFuZ2VzW2ldLmJ1czsKKwkJZGV2X2Jhc2UgPSBhbWRfbmJfYnVzX2Rldl9yYW5nZXNbaV0uZGV2X2Jhc2U7CisJCWRldl9saW1pdCA9IGFtZF9uYl9idXNfZGV2X3Jhbmdlc1tpXS5kZXZfbGltaXQ7CiAKIAkJZm9yIChzbG90ID0gZGV2X2Jhc2U7IHNsb3QgPCBkZXZfbGltaXQ7IHNsb3QrKykgewogCQkJaWYgKCFlYXJseV9pc19hbWRfbmIocmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgMywgMHgwMCkpKQpAQCAtMzkwLDE0ICszNzgsMTQgQEAKIAogCWZpeCA9IDA7CiAJbm9kZSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVzX2Rldl9yYW5nZXMpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgYW1kX25iX2J1c19kZXZfcmFuZ2VzW2ldLmRldl9saW1pdDsgaSsrKSB7CiAJCWludCBidXM7CiAJCWludCBkZXZfYmFzZSwgZGV2X2xpbWl0OwogCQl1MzIgY3RsOwogCi0JCWJ1cyA9IGJ1c19kZXZfcmFuZ2VzW2ldLmJ1czsKLQkJZGV2X2Jhc2UgPSBidXNfZGV2X3Jhbmdlc1tpXS5kZXZfYmFzZTsKLQkJZGV2X2xpbWl0ID0gYnVzX2Rldl9yYW5nZXNbaV0uZGV2X2xpbWl0OworCQlidXMgPSBhbWRfbmJfYnVzX2Rldl9yYW5nZXNbaV0uYnVzOworCQlkZXZfYmFzZSA9IGFtZF9uYl9idXNfZGV2X3Jhbmdlc1tpXS5kZXZfYmFzZTsKKwkJZGV2X2xpbWl0ID0gYW1kX25iX2J1c19kZXZfcmFuZ2VzW2ldLmRldl9saW1pdDsKIAogCQlmb3IgKHNsb3QgPSBkZXZfYmFzZTsgc2xvdCA8IGRldl9saW1pdDsgc2xvdCsrKSB7CiAJCQlpZiAoIWVhcmx5X2lzX2FtZF9uYihyZWFkX3BjaV9jb25maWcoYnVzLCBzbG90LCAzLCAweDAwKSkpCkBAIC01MDUsNyArNDkzLDcgQEAKIAl9CiAKIAkvKiBGaXggdXAgdGhlIG5vcnRoIGJyaWRnZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidXNfZGV2X3Jhbmdlcyk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBhbWRfbmJfYnVzX2Rldl9yYW5nZXNbaV0uZGV2X2xpbWl0OyBpKyspIHsKIAkJaW50IGJ1cywgZGV2X2Jhc2UsIGRldl9saW1pdDsKIAogCQkvKgpAQCAtNTE0LDkgKzUwMiw5IEBACiAJCSAqLwogCQl1MzIgY3RsID0gRElTVExCV0FMS1BSQiB8IGFwZXJfb3JkZXIgPDwgMTsKIAotCQlidXMgPSBidXNfZGV2X3Jhbmdlc1tpXS5idXM7Ci0JCWRldl9iYXNlID0gYnVzX2Rldl9yYW5nZXNbaV0uZGV2X2Jhc2U7Ci0JCWRldl9saW1pdCA9IGJ1c19kZXZfcmFuZ2VzW2ldLmRldl9saW1pdDsKKwkJYnVzID0gYW1kX25iX2J1c19kZXZfcmFuZ2VzW2ldLmJ1czsKKwkJZGV2X2Jhc2UgPSBhbWRfbmJfYnVzX2Rldl9yYW5nZXNbaV0uZGV2X2Jhc2U7CisJCWRldl9saW1pdCA9IGFtZF9uYl9idXNfZGV2X3Jhbmdlc1tpXS5kZXZfbGltaXQ7CiAJCWZvciAoc2xvdCA9IGRldl9iYXNlOyBzbG90IDwgZGV2X2xpbWl0OyBzbG90KyspIHsKIAkJCWlmICghZWFybHlfaXNfYW1kX25iKHJlYWRfcGNpX2NvbmZpZyhidXMsIHNsb3QsIDMsIDB4MDApKSkKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwppbmRleCBhNTEzNDViLi4wNmMxOTZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCkBAIC02ODQsNyArNjg0LDcgQEAKIAlsYXBpY19jbG9ja2V2ZW50Lm11bHQgPSBkaXZfc2MoZGVsdGEsIFRJQ0tfTlNFQyAqIExBUElDX0NBTF9MT09QUywKIAkJCQkgICAgICAgbGFwaWNfY2xvY2tldmVudC5zaGlmdCk7CiAJbGFwaWNfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPQotCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4N0ZGRkZGLCAmbGFwaWNfY2xvY2tldmVudCk7CisJCWNsb2NrZXZlbnRfZGVsdGEybnMoMHg3RkZGRkZGRiwgJmxhcGljX2Nsb2NrZXZlbnQpOwogCWxhcGljX2Nsb2NrZXZlbnQubWluX2RlbHRhX25zID0KIAkJY2xvY2tldmVudF9kZWx0YTJucygweEYsICZsYXBpY19jbG9ja2V2ZW50KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaHdfbm1pLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9od19ubWkuYwppbmRleCA3MmVjMjllLi43OWZkNDNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9od19ubWkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9od19ubWkuYwpAQCAtNjgsNyArNjgsNiBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIERJRV9OTUk6Ci0JY2FzZSBESUVfTk1JX0lQSToKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtOTYsNyArOTUsNyBAQAogc3RhdGljIF9fcmVhZF9tb3N0bHkgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGJhY2t0cmFjZV9ub3RpZmllciA9IHsKIAkubm90aWZpZXJfY2FsbCAgICAgICAgICA9IGFyY2hfdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZV9oYW5kbGVyLAogCS5uZXh0ICAgICAgICAgICAgICAgICAgID0gTlVMTCwKLQkucHJpb3JpdHkgICAgICAgICAgICAgICA9IDEKKwkucHJpb3JpdHkgICAgICAgICAgICAgICA9IE5NSV9MT0NBTF9MT1dfUFJJT1IsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCByZWdpc3Rlcl90cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwppbmRleCBlY2NhNWY0Li5iZDE2YjU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKQEAgLTM3OCw3ICszNzgsNyBAQAogCiBzdGF0aWMgX19jcHVpbml0IHZvaWQgc2V0X3gyYXBpY19leHRyYV9iaXRzKGludCBwbm9kZSkKIHsKLQlfX3RoaXNfY3B1X3dyaXRlKHgyYXBpY19leHRyYV9iaXRzLCAocG5vZGUgPDwgNikpOworCV9fdGhpc19jcHVfd3JpdGUoeDJhcGljX2V4dHJhX2JpdHMsIHBub2RlIDw8IHV2aF9hcGljaWQucy5wbm9kZV9zaGlmdCk7CiB9CiAKIC8qCkBAIC02NDEsNyArNjQxLDcgQEAKICAqLwogaW50IHV2X2hhbmRsZV9ubWkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqZGF0YSkKIHsKLQlpZiAocmVhc29uICE9IERJRV9OTUlfSVBJKQorCWlmIChyZWFzb24gIT0gRElFX05NSVVOS05PV04pCiAJCXJldHVybiBOT1RJRllfT0s7CiAKIAlpZiAoaW5fY3Jhc2hfa2V4ZWMpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW5qZWN0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW5qZWN0LmMKaW5kZXggZTdkYmRlNy4uYTc3OTcxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWluamVjdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS1pbmplY3QuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGFzbS9tY2UuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9ubWkuaD4KIAogLyogVXBkYXRlIGZha2UgbWNlIHJlZ2lzdGVycyBvbiBjdXJyZW50IENQVS4gKi8KIHN0YXRpYyB2b2lkIGluamVjdF9tY2Uoc3RydWN0IG1jZSAqbSkKQEAgLTgzLDcgKzg0LDcgQEAKIAlzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MgPSAoc3RydWN0IGRpZV9hcmdzICopZGF0YTsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCBtY2UgKm0gPSAmX19nZXRfY3B1X3ZhcihpbmplY3RtKTsKLQlpZiAodmFsICE9IERJRV9OTUlfSVBJIHx8ICFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbWNlX2luamVjdF9jcHVtYXNrKSkKKwlpZiAodmFsICE9IERJRV9OTUkgfHwgIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBtY2VfaW5qZWN0X2NwdW1hc2spKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtY2VfaW5qZWN0X2NwdW1hc2spOwogCWlmIChtLT5pbmplY3RfZmxhZ3MgJiBNQ0pfRVhDRVBUSU9OKQpAQCAtOTUsNyArOTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG1jZV9yYWlzZV9uYiA9IHsKIAkubm90aWZpZXJfY2FsbCA9IG1jZV9yYWlzZV9ub3RpZnksCi0JLnByaW9yaXR5ID0gMTAwMCwKKwkucHJpb3JpdHkgPSBOTUlfTE9DQUxfTk9STUFMX1BSSU9SLAogfTsKIAogLyogSW5qZWN0IG1jZSBvbiBjdXJyZW50IENQVSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwppbmRleCAwNDkyMTAxLi45ZDk3N2EyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwpAQCAtMTI2Nyw3ICsxMjY3LDYgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBESUVfTk1JOgotCWNhc2UgRElFX05NSV9JUEk6CiAJCWJyZWFrOwogCWNhc2UgRElFX05NSVVOS05PV046CiAJCXRoaXNfbm1pID0gcGVyY3B1X3JlYWQoaXJxX3N0YXQuX19ubWlfY291bnQpOwpAQCAtMTMxNyw3ICsxMzE2LDcgQEAKIHN0YXRpYyBfX3JlYWRfbW9zdGx5IHN0cnVjdCBub3RpZmllcl9ibG9jayBwZXJmX2V2ZW50X25taV9ub3RpZmllciA9IHsKIAkubm90aWZpZXJfY2FsbAkJPSBwZXJmX2V2ZW50X25taV9oYW5kbGVyLAogCS5uZXh0CQkJPSBOVUxMLAotCS5wcmlvcml0eQkJPSAxCisJLnByaW9yaXR5CQk9IE5NSV9MT0NBTF9MT1dfUFJJT1IsCiB9OwogCiBzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgdW5jb25zdHJhaW5lZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKaW5kZXggODE0MDBiOS4uZTU2YjliZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKQEAgLTc1MywxOSArNzUzLDIxIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHA0X3BtdV9jbGVhcl9jY2NyX292ZihzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjKQogewotCWludCBvdmVyZmxvdyA9IDA7Ci0JdTMyIGxvdywgaGlnaDsKKwl1NjQgdjsKIAotCXJkbXNyKGh3Yy0+Y29uZmlnX2Jhc2UgKyBod2MtPmlkeCwgbG93LCBoaWdoKTsKLQotCS8qIHdlIG5lZWQgdG8gY2hlY2sgaGlnaCBiaXQgZm9yIHVuZmxhZ2dlZCBvdmVyZmxvd3MgKi8KLQlpZiAoKGxvdyAmIFA0X0NDQ1JfT1ZGKSB8fCAhKGhpZ2ggJiAoMSA8PCAzMSkpKSB7Ci0JCW92ZXJmbG93ID0gMTsKLQkJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBod2MtPmlkeCwKLQkJCSgodTY0KWxvdykgJiB+UDRfQ0NDUl9PVkYpOworCS8qIGFuIG9mZmljaWFsIHdheSBmb3Igb3ZlcmZsb3cgaW5kaWNhdGlvbiAqLworCXJkbXNybChod2MtPmNvbmZpZ19iYXNlICsgaHdjLT5pZHgsIHYpOworCWlmICh2ICYgUDRfQ0NDUl9PVkYpIHsKKwkJd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBod2MtPmlkeCwgdiAmIH5QNF9DQ0NSX09WRik7CisJCXJldHVybiAxOwogCX0KIAotCXJldHVybiBvdmVyZmxvdzsKKwkvKiBpdCBtaWdodCBiZSB1bmZsYWdnZWQgb3ZlcmZsb3cgKi8KKwlyZG1zcmwoaHdjLT5ldmVudF9iYXNlICsgaHdjLT5pZHgsIHYpOworCWlmICghKHYgJiBBUkNIX1A0X0NOVFJWQUxfTUFTSykpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHA0X3BtdV9kaXNhYmxlX3BlYnModm9pZCkKQEAgLTExNTIsOSArMTE1NCw5IEBACiAJICovCiAJLm51bV9jb3VudGVycwkJPSBBUkNIX1A0X01BWF9DQ0NSLAogCS5hcGljCQkJPSAxLAotCS5jbnR2YWxfYml0cwkJPSA0MCwKLQkuY250dmFsX21hc2sJCT0gKDFVTEwgPDwgNDApIC0gMSwKLQkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCAzOSkgLSAxLAorCS5jbnR2YWxfYml0cwkJPSBBUkNIX1A0X0NOVFJWQUxfQklUUywKKwkuY250dmFsX21hc2sJCT0gQVJDSF9QNF9DTlRSVkFMX01BU0ssCisJLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgKEFSQ0hfUDRfQ05UUlZBTF9CSVRTIC0gMSkpIC0gMSwKIAkuaHdfY29uZmlnCQk9IHA0X2h3X2NvbmZpZywKIAkuc2NoZWR1bGVfZXZlbnRzCT0gcDRfcG11X3NjaGVkdWxlX2V2ZW50cywKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCmluZGV4IDg0NzRjOTkuLmQ2ZmIxNDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKQEAgLTE5NywxNCArMTk3LDggQEAKICAqLwogdm9pZCBkdW1wX3N0YWNrKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBicCA9IDA7CiAJdW5zaWduZWQgbG9uZyBzdGFjazsKIAotI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCi0JaWYgKCFicCkKLQkJZ2V0X2JwKGJwKTsKLSNlbmRpZgotCiAJcHJpbnRrKCJQaWQ6ICVkLCBjb21tOiAlLjIwcyAlcyAlcyAlLipzXG4iLAogCQljdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sIHByaW50X3RhaW50ZWQoKSwKIAkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IDU5MWU2MDEuLmM4YjRlZmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCkBAIC0xNDA2LDYgKzE0MDYsMTYgQEAKIAlDRklfRU5EUFJPQwogRU5EKGdlbmVyYWxfcHJvdGVjdGlvbikKIAorI2lmZGVmIENPTkZJR19LVk1fR1VFU1QKK0VOVFJZKGFzeW5jX3BhZ2VfZmF1bHQpCisJUklORzBfRUNfRlJBTUUKKwlwdXNobCAkZG9fYXN5bmNfcGFnZV9mYXVsdAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CisJam1wIGVycm9yX2NvZGUKKwlDRklfRU5EUFJPQworRU5EKGFwZl9wYWdlX2ZhdWx0KQorI2VuZGlmCisKIC8qCiAgKiBFbmQgb2Yga3Byb2JlcyBzZWN0aW9uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggZTNiYTQxNy4uYWVkMWZmYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKQEAgLTI5OSwxNyArMjk5LDIxIEBACiBFTlRSWShzYXZlX2FyZ3MpCiAJWENQVF9GUkFNRQogCWNsZAotCW1vdnFfY2ZpIHJkaSwgUkRJKzE2LUFSR09GRlNFVAotCW1vdnFfY2ZpIHJzaSwgUlNJKzE2LUFSR09GRlNFVAotCW1vdnFfY2ZpIHJkeCwgUkRYKzE2LUFSR09GRlNFVAotCW1vdnFfY2ZpIHJjeCwgUkNYKzE2LUFSR09GRlNFVAotCW1vdnFfY2ZpIHJheCwgUkFYKzE2LUFSR09GRlNFVAotCW1vdnFfY2ZpICByOCwgIFI4KzE2LUFSR09GRlNFVAotCW1vdnFfY2ZpICByOSwgIFI5KzE2LUFSR09GRlNFVAotCW1vdnFfY2ZpIHIxMCwgUjEwKzE2LUFSR09GRlNFVAotCW1vdnFfY2ZpIHIxMSwgUjExKzE2LUFSR09GRlNFVAorCS8qCisJICogc3RhcnQgZnJvbSByYnAgaW4gcHRfcmVncyBhbmQganVtcCBvdmVyCisJICogcmV0dXJuIGFkZHJlc3MuCisJICovCisJbW92cV9jZmkgcmRpLCBSREkrOC1SQlAKKwltb3ZxX2NmaSByc2ksIFJTSSs4LVJCUAorCW1vdnFfY2ZpIHJkeCwgUkRYKzgtUkJQCisJbW92cV9jZmkgcmN4LCBSQ1grOC1SQlAKKwltb3ZxX2NmaSByYXgsIFJBWCs4LVJCUAorCW1vdnFfY2ZpICByOCwgIFI4KzgtUkJQCisJbW92cV9jZmkgIHI5LCAgUjkrOC1SQlAKKwltb3ZxX2NmaSByMTAsIFIxMCs4LVJCUAorCW1vdnFfY2ZpIHIxMSwgUjExKzgtUkJQCiAKLQlsZWFxIC1BUkdPRkZTRVQrMTYoJXJzcCksJXJkaQkvKiBhcmcxIGZvciBoYW5kbGVyICovCisJbGVhcSAtUkJQKzgoJXJzcCksJXJkaQkvKiBhcmcxIGZvciBoYW5kbGVyICovCiAJbW92cV9jZmkgcmJwLCA4CQkvKiBwdXNoICVyYnAgKi8KIAlsZWFxIDgoJXJzcCksICVyYnAJCS8qIG1vdiAlcnNwLCAlZWJwICovCiAJdGVzdGwgJDMsIENTKCVyZGkpCkBAIC03ODIsOCArNzg2LDkgQEAKIAogLyogMCglcnNwKTogfihpbnRlcnJ1cHQgbnVtYmVyKSAqLwogCS5tYWNybyBpbnRlcnJ1cHQgZnVuYwotCXN1YnEgJE9SSUdfUkFYLUFSR09GRlNFVCs4LCAlcnNwCi0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIE9SSUdfUkFYLUFSR09GRlNFVCs4CisJLyogcmVzZXJ2ZSBwdF9yZWdzIGZvciBzY3JhdGNoIHJlZ3MgYW5kIHJicCAqLworCXN1YnEgJE9SSUdfUkFYLVJCUCwgJXJzcAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCBPUklHX1JBWC1SQlAKIAljYWxsIHNhdmVfYXJncwogCVBBUlRJQUxfRlJBTUUgMAogCWNhbGwgXGZ1bmMKQEAgLTgwOCw5ICs4MTMsMTQgQEAKIAlUUkFDRV9JUlFTX09GRgogCWRlY2wgUEVSX0NQVV9WQVIoaXJxX2NvdW50KQogCWxlYXZlcQorCiAJQ0ZJX1JFU1RPUkUJCXJicAogCUNGSV9ERUZfQ0ZBX1JFR0lTVEVSCXJzcAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVAktOAorCisJLyogd2UgZGlkIG5vdCBzYXZlIHJieCwgcmVzdG9yZSBvbmx5IGZyb20gQVJHT0ZGU0VUICovCisJYWRkcSAkOCwgJXJzcAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVAktOAogZXhpdF9pbnRyOgogCUdFVF9USFJFQURfSU5GTyglcmN4KQogCXRlc3RsICQzLENTLUFSR09GRlNFVCglcnNwKQpAQCAtMTMxOSw2ICsxMzI5LDkgQEAKICNlbmRpZgogZXJyb3JlbnRyeSBnZW5lcmFsX3Byb3RlY3Rpb24gZG9fZ2VuZXJhbF9wcm90ZWN0aW9uCiBlcnJvcmVudHJ5IHBhZ2VfZmF1bHQgZG9fcGFnZV9mYXVsdAorI2lmZGVmIENPTkZJR19LVk1fR1VFU1QKK2Vycm9yZW50cnkgYXN5bmNfcGFnZV9mYXVsdCBkb19hc3luY19wYWdlX2ZhdWx0CisjZW5kaWYKICNpZmRlZiBDT05GSUdfWDg2X01DRQogcGFyYW5vaWR6ZXJvZW50cnkgbWFjaGluZV9jaGVjayAqbWFjaGluZV9jaGVja192ZWN0b3IoJXJpcCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggOWY1NGIyMC4uZmMyOTNkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCkBAIC0xMjYsNyArMTI2LDcgQEAKIAltb3ZzbAogCW1vdmwgcGEoYm9vdF9wYXJhbXMpICsgTkVXX0NMX1BPSU5URVIsJWVzaQogCWFuZGwgJWVzaSwlZXNpCi0JanogMWYJCQkjIE5vIGNvbWFuZCBsaW5lCisJanogMWYJCQkjIE5vIGNvbW1hbmQgbGluZQogCW1vdmwgJHBhKGJvb3RfY29tbWFuZF9saW5lKSwlZWRpCiAJbW92bCAkKENPTU1BTkRfTElORV9TSVpFLzQpLCVlY3gKIAlyZXAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaTM4Ny5jCmluZGV4IDU4YmIyMzkuLmU2MGMzOGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2kzODcuYwpAQCAtMTY5LDYgKzE2OSw3IEBACiAJc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKHRzayk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChpbml0X2ZwdSk7CiAKIC8qCiAgKiBUaGUgeHN0YXRlcmVnc19hY3RpdmUoKSByb3V0aW5lIGlzIHRoZSBzYW1lIGFzIHRoZSBmcHJlZ3NfYWN0aXZlKCkgcm91dGluZSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwppbmRleCAzYTQzY2FhLi41Mjk0NWRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgpAQCAtMjc1LDYgKzI3NiwxNSBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTCh2ZWN0b3JfdXNlZF9ieV9wZXJjcHVfaXJxKTsKIAorI2lmZGVmIENPTkZJR19PRgordW5zaWduZWQgaW50IGlycV9jcmVhdGVfb2ZfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbnRyb2xsZXIsCisJCWNvbnN0IHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUpCit7CisJcmV0dXJuIGludHNwZWNbMF07Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcnFfY3JlYXRlX29mX21hcHBpbmcpOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIC8qIEEgY3B1IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBjcHVfb25saW5lX21hc2suICBSZXNldCBpcnEgYWZmaW5pdGllcy4gKi8KIHZvaWQgZml4dXBfaXJxcyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2tnZGIuYyBiL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMKaW5kZXggY2QyMWI2NS4uYTQxMzAwMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2tnZGIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva2dkYi5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CiAKIHN0cnVjdCBkYmdfcmVnX2RlZl90IGRiZ19yZWdfZGVmW0RCR19NQVhfUkVHX05VTV0gPQogewpAQCAtNTI1LDEwICs1MjYsNiBAQAogCQl9CiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAotCWNhc2UgRElFX05NSV9JUEk6Ci0JCS8qIEp1c3QgaWdub3JlLCB3ZSB3aWxsIGhhbmRsZSB0aGUgcm91bmR1cCBvbiBESUVfTk1JLiAqLwotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0KIAljYXNlIERJRV9OTUlVTktOT1dOOgogCQlpZiAod2FzX2luX2RlYnVnX25taVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXSkgewogCQkJd2FzX2luX2RlYnVnX25taVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXSA9IDA7CkBAIC02MDYsNyArNjAzLDcgQEAKIAkvKgogCSAqIExvd2VzdC1wcmlvIG5vdGlmaWVyIHByaW9yaXR5LCB3ZSB3YW50IHRvIGJlIG5vdGlmaWVkIGxhc3Q6CiAJICovCi0JLnByaW9yaXR5CT0gLUlOVF9NQVgsCisJLnByaW9yaXR5CT0gTk1JX0xPQ0FMX0xPV19QUklPUiwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bS5jIGIvYXJjaC94ODYva2VybmVsL2t2bS5jCmluZGV4IDYzYjBlYzguLjhkYzQ0NjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm0uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMKQEAgLTI3LDE2ICsyNywzNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKICNkZWZpbmUgTU1VX1FVRVVFX1NJWkUgMTAyNAogCitzdGF0aWMgaW50IGt2bWFwZiA9IDE7CisKK3N0YXRpYyBpbnQgcGFyc2Vfbm9fa3ZtYXBmKGNoYXIgKmFyZykKK3sKKyAgICAgICAga3ZtYXBmID0gMDsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK2Vhcmx5X3BhcmFtKCJuby1rdm1hcGYiLCBwYXJzZV9ub19rdm1hcGYpOworCiBzdHJ1Y3Qga3ZtX3BhcmFfc3RhdGUgewogCXU4IG1tdV9xdWV1ZVtNTVVfUVVFVUVfU0laRV07CiAJaW50IG1tdV9xdWV1ZV9sZW47CiB9OwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGt2bV9wYXJhX3N0YXRlLCBwYXJhX3N0YXRlKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3ZtX3ZjcHVfcHZfYXBmX2RhdGEsIGFwZl9yZWFzb24pIF9fYWxpZ25lZCg2NCk7CiAKIHN0YXRpYyBzdHJ1Y3Qga3ZtX3BhcmFfc3RhdGUgKmt2bV9wYXJhX3N0YXRlKHZvaWQpCiB7CkBAIC01MCw2ICs3MSwxOTUgQEAKIHsKIH0KIAorI2RlZmluZSBLVk1fVEFTS19TTEVFUF9IQVNIQklUUyA4CisjZGVmaW5lIEtWTV9UQVNLX1NMRUVQX0hBU0hTSVpFICgxPDxLVk1fVEFTS19TTEVFUF9IQVNIQklUUykKKworc3RydWN0IGt2bV90YXNrX3NsZWVwX25vZGUgeworCXN0cnVjdCBobGlzdF9ub2RlIGxpbms7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CisJdTMyIHRva2VuOworCWludCBjcHU7CisJYm9vbCBoYWx0ZWQ7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07Cit9OworCitzdGF0aWMgc3RydWN0IGt2bV90YXNrX3NsZWVwX2hlYWQgeworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBsaXN0OworfSBhc3luY19wZl9zbGVlcGVyc1tLVk1fVEFTS19TTEVFUF9IQVNIU0laRV07CisKK3N0YXRpYyBzdHJ1Y3Qga3ZtX3Rhc2tfc2xlZXBfbm9kZSAqX2ZpbmRfYXBmX3Rhc2soc3RydWN0IGt2bV90YXNrX3NsZWVwX2hlYWQgKmIsCisJCQkJCQkgIHUzMiB0b2tlbikKK3sKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcDsKKworCWhsaXN0X2Zvcl9lYWNoKHAsICZiLT5saXN0KSB7CisJCXN0cnVjdCBrdm1fdGFza19zbGVlcF9ub2RlICpuID0KKwkJCWhsaXN0X2VudHJ5KHAsIHR5cGVvZigqbiksIGxpbmspOworCQlpZiAobi0+dG9rZW4gPT0gdG9rZW4pCisJCQlyZXR1cm4gbjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBrdm1fYXN5bmNfcGZfdGFza193YWl0KHUzMiB0b2tlbikKK3sKKwl1MzIga2V5ID0gaGFzaF8zMih0b2tlbiwgS1ZNX1RBU0tfU0xFRVBfSEFTSEJJVFMpOworCXN0cnVjdCBrdm1fdGFza19zbGVlcF9oZWFkICpiID0gJmFzeW5jX3BmX3NsZWVwZXJzW2tleV07CisJc3RydWN0IGt2bV90YXNrX3NsZWVwX25vZGUgbiwgKmU7CisJREVGSU5FX1dBSVQod2FpdCk7CisJaW50IGNwdSwgaWRsZTsKKworCWNwdSA9IGdldF9jcHUoKTsKKwlpZGxlID0gaWRsZV9jcHUoY3B1KTsKKwlwdXRfY3B1KCk7CisKKwlzcGluX2xvY2soJmItPmxvY2spOworCWUgPSBfZmluZF9hcGZfdGFzayhiLCB0b2tlbik7CisJaWYgKGUpIHsKKwkJLyogZHVtbXkgZW50cnkgZXhpc3QgLT4gd2FrZSB1cCB3YXMgZGVsaXZlcmVkIGFoZWFkIG9mIFBGICovCisJCWhsaXN0X2RlbCgmZS0+bGluayk7CisJCWtmcmVlKGUpOworCQlzcGluX3VubG9jaygmYi0+bG9jayk7CisJCXJldHVybjsKKwl9CisKKwluLnRva2VuID0gdG9rZW47CisJbi5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJbi5tbSA9IGN1cnJlbnQtPmFjdGl2ZV9tbTsKKwluLmhhbHRlZCA9IGlkbGUgfHwgcHJlZW1wdF9jb3VudCgpID4gMTsKKwlhdG9taWNfaW5jKCZuLm1tLT5tbV9jb3VudCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbi53cSk7CisJaGxpc3RfYWRkX2hlYWQoJm4ubGluaywgJmItPmxpc3QpOworCXNwaW5fdW5sb2NrKCZiLT5sb2NrKTsKKworCWZvciAoOzspIHsKKwkJaWYgKCFuLmhhbHRlZCkKKwkJCXByZXBhcmVfdG9fd2FpdCgmbi53cSwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKGhsaXN0X3VuaGFzaGVkKCZuLmxpbmspKQorCQkJYnJlYWs7CisKKwkJaWYgKCFuLmhhbHRlZCkgeworCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQkJc2NoZWR1bGUoKTsKKwkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogV2UgY2Fubm90IHJlc2NoZWR1bGUuIFNvIGhhbHQuCisJCQkgKi8KKwkJCW5hdGl2ZV9zYWZlX2hhbHQoKTsKKwkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCX0KKwl9CisJaWYgKCFuLmhhbHRlZCkKKwkJZmluaXNoX3dhaXQoJm4ud3EsICZ3YWl0KTsKKworCXJldHVybjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGt2bV9hc3luY19wZl90YXNrX3dhaXQpOworCitzdGF0aWMgdm9pZCBhcGZfdGFza193YWtlX29uZShzdHJ1Y3Qga3ZtX3Rhc2tfc2xlZXBfbm9kZSAqbikKK3sKKwlobGlzdF9kZWxfaW5pdCgmbi0+bGluayk7CisJaWYgKCFuLT5tbSkKKwkJcmV0dXJuOworCW1tZHJvcChuLT5tbSk7CisJaWYgKG4tPmhhbHRlZCkKKwkJc21wX3NlbmRfcmVzY2hlZHVsZShuLT5jcHUpOworCWVsc2UgaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJm4tPndxKSkKKwkJd2FrZV91cCgmbi0+d3EpOworfQorCitzdGF0aWMgdm9pZCBhcGZfdGFza193YWtlX2FsbCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEtWTV9UQVNLX1NMRUVQX0hBU0hTSVpFOyBpKyspIHsKKwkJc3RydWN0IGhsaXN0X25vZGUgKnAsICpuZXh0OworCQlzdHJ1Y3Qga3ZtX3Rhc2tfc2xlZXBfaGVhZCAqYiA9ICZhc3luY19wZl9zbGVlcGVyc1tpXTsKKwkJc3Bpbl9sb2NrKCZiLT5sb2NrKTsKKwkJaGxpc3RfZm9yX2VhY2hfc2FmZShwLCBuZXh0LCAmYi0+bGlzdCkgeworCQkJc3RydWN0IGt2bV90YXNrX3NsZWVwX25vZGUgKm4gPQorCQkJCWhsaXN0X2VudHJ5KHAsIHR5cGVvZigqbiksIGxpbmspOworCQkJaWYgKG4tPmNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCQkJYXBmX3Rhc2tfd2FrZV9vbmUobik7CisJCX0KKwkJc3Bpbl91bmxvY2soJmItPmxvY2spOworCX0KK30KKwordm9pZCBrdm1fYXN5bmNfcGZfdGFza193YWtlKHUzMiB0b2tlbikKK3sKKwl1MzIga2V5ID0gaGFzaF8zMih0b2tlbiwgS1ZNX1RBU0tfU0xFRVBfSEFTSEJJVFMpOworCXN0cnVjdCBrdm1fdGFza19zbGVlcF9oZWFkICpiID0gJmFzeW5jX3BmX3NsZWVwZXJzW2tleV07CisJc3RydWN0IGt2bV90YXNrX3NsZWVwX25vZGUgKm47CisKKwlpZiAodG9rZW4gPT0gfjApIHsKKwkJYXBmX3Rhc2tfd2FrZV9hbGwoKTsKKwkJcmV0dXJuOworCX0KKworYWdhaW46CisJc3Bpbl9sb2NrKCZiLT5sb2NrKTsKKwluID0gX2ZpbmRfYXBmX3Rhc2soYiwgdG9rZW4pOworCWlmICghbikgeworCQkvKgorCQkgKiBhc3luYyBQRiB3YXMgbm90IHlldCBoYW5kbGVkLgorCQkgKiBBZGQgZHVtbXkgZW50cnkgZm9yIHRoZSB0b2tlbi4KKwkJICovCisJCW4gPSBrbWFsbG9jKHNpemVvZigqbiksIEdGUF9BVE9NSUMpOworCQlpZiAoIW4pIHsKKwkJCS8qCisJCQkgKiBBbGxvY2F0aW9uIGZhaWxlZCEgQnVzeSB3YWl0IHdoaWxlIG90aGVyIGNwdQorCQkJICogaGFuZGxlcyBhc3luYyBQRi4KKwkJCSAqLworCQkJc3Bpbl91bmxvY2soJmItPmxvY2spOworCQkJY3B1X3JlbGF4KCk7CisJCQlnb3RvIGFnYWluOworCQl9CisJCW4tPnRva2VuID0gdG9rZW47CisJCW4tPmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkJbi0+bW0gPSBOVUxMOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZuLT53cSk7CisJCWhsaXN0X2FkZF9oZWFkKCZuLT5saW5rLCAmYi0+bGlzdCk7CisJfSBlbHNlCisJCWFwZl90YXNrX3dha2Vfb25lKG4pOworCXNwaW5fdW5sb2NrKCZiLT5sb2NrKTsKKwlyZXR1cm47Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1fYXN5bmNfcGZfdGFza193YWtlKTsKKwordTMyIGt2bV9yZWFkX2FuZF9yZXNldF9wZl9yZWFzb24odm9pZCkKK3sKKwl1MzIgcmVhc29uID0gMDsKKworCWlmIChfX2dldF9jcHVfdmFyKGFwZl9yZWFzb24pLmVuYWJsZWQpIHsKKwkJcmVhc29uID0gX19nZXRfY3B1X3ZhcihhcGZfcmVhc29uKS5yZWFzb247CisJCV9fZ2V0X2NwdV92YXIoYXBmX3JlYXNvbikucmVhc29uID0gMDsKKwl9CisKKwlyZXR1cm4gcmVhc29uOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3JlYWRfYW5kX3Jlc2V0X3BmX3JlYXNvbik7CisKK2RvdHJhcGxpbmthZ2Ugdm9pZCBfX2twcm9iZXMKK2RvX2FzeW5jX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKK3sKKwlzd2l0Y2ggKGt2bV9yZWFkX2FuZF9yZXNldF9wZl9yZWFzb24oKSkgeworCWRlZmF1bHQ6CisJCWRvX3BhZ2VfZmF1bHQocmVncywgZXJyb3JfY29kZSk7CisJCWJyZWFrOworCWNhc2UgS1ZNX1BWX1JFQVNPTl9QQUdFX05PVF9QUkVTRU5UOgorCQkvKiBwYWdlIGlzIHN3YXBwZWQgb3V0IGJ5IHRoZSBob3N0LiAqLworCQlrdm1fYXN5bmNfcGZfdGFza193YWl0KCh1MzIpcmVhZF9jcjIoKSk7CisJCWJyZWFrOworCWNhc2UgS1ZNX1BWX1JFQVNPTl9QQUdFX1JFQURZOgorCQlrdm1fYXN5bmNfcGZfdGFza193YWtlKCh1MzIpcmVhZF9jcjIoKSk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIHZvaWQga3ZtX21tdV9vcCh2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxlbikKIHsKIAlpbnQgcjsKQEAgLTIzMSwxMCArNDQxLDExNyBAQAogI2VuZGlmCiB9CiAKLXZvaWQgX19pbml0IGt2bV9ndWVzdF9pbml0KHZvaWQpCit2b2lkIF9fY3B1aW5pdCBrdm1fZ3Vlc3RfY3B1X2luaXQodm9pZCkKIHsKIAlpZiAoIWt2bV9wYXJhX2F2YWlsYWJsZSgpKQogCQlyZXR1cm47CiAKKwlpZiAoa3ZtX3BhcmFfaGFzX2ZlYXR1cmUoS1ZNX0ZFQVRVUkVfQVNZTkNfUEYpICYmIGt2bWFwZikgeworCQl1NjQgcGEgPSBfX3BhKCZfX2dldF9jcHVfdmFyKGFwZl9yZWFzb24pKTsKKworI2lmZGVmIENPTkZJR19QUkVFTVBUCisJCXBhIHw9IEtWTV9BU1lOQ19QRl9TRU5EX0FMV0FZUzsKKyNlbmRpZgorCQl3cm1zcmwoTVNSX0tWTV9BU1lOQ19QRl9FTiwgcGEgfCBLVk1fQVNZTkNfUEZfRU5BQkxFRCk7CisJCV9fZ2V0X2NwdV92YXIoYXBmX3JlYXNvbikuZW5hYmxlZCA9IDE7CisJCXByaW50ayhLRVJOX0lORk8iS1ZNIHNldHVwIGFzeW5jIFBGIGZvciBjcHUgJWRcbiIsCisJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOworCX0KK30KKworc3RhdGljIHZvaWQga3ZtX3B2X2Rpc2FibGVfYXBmKHZvaWQgKnVudXNlZCkKK3sKKwlpZiAoIV9fZ2V0X2NwdV92YXIoYXBmX3JlYXNvbikuZW5hYmxlZCkKKwkJcmV0dXJuOworCisJd3Jtc3JsKE1TUl9LVk1fQVNZTkNfUEZfRU4sIDApOworCV9fZ2V0X2NwdV92YXIoYXBmX3JlYXNvbikuZW5hYmxlZCA9IDA7CisKKwlwcmludGsoS0VSTl9JTkZPIlVucmVnaXN0ZXIgcHYgc2hhcmVkIG1lbW9yeSBmb3IgY3B1ICVkXG4iLAorCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOworfQorCitzdGF0aWMgaW50IGt2bV9wdl9yZWJvb3Rfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp1bnVzZWQpCit7CisJaWYgKGNvZGUgPT0gU1lTX1JFU1RBUlQpCisJCW9uX2VhY2hfY3B1KGt2bV9wdl9kaXNhYmxlX2FwZiwgTlVMTCwgMSk7CisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9wdl9yZWJvb3RfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBrdm1fcHZfcmVib290X25vdGlmeSwKK307CisKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgdm9pZCBfX2luaXQga3ZtX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0tWTV9DTE9DSworCVdBUk5fT04oa3ZtX3JlZ2lzdGVyX2Nsb2NrKCJwcmltYXJ5IGNwdSBjbG9jayIpKTsKKyNlbmRpZgorCWt2bV9ndWVzdF9jcHVfaW5pdCgpOworCW5hdGl2ZV9zbXBfcHJlcGFyZV9ib290X2NwdSgpOworfQorCitzdGF0aWMgdm9pZCBrdm1fZ3Vlc3RfY3B1X29ubGluZSh2b2lkICpkdW1teSkKK3sKKwlrdm1fZ3Vlc3RfY3B1X2luaXQoKTsKK30KKworc3RhdGljIHZvaWQga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKHZvaWQgKmR1bW15KQoreworCWt2bV9wdl9kaXNhYmxlX2FwZihOVUxMKTsKKwlhcGZfdGFza193YWtlX2FsbCgpOworfQorCitzdGF0aWMgaW50IF9fY3B1aW5pdCBrdm1fY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCWludCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGt2bV9ndWVzdF9jcHVfb25saW5lLCBOVUxMLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorCWNhc2UgQ1BVX0RPV05fUFJFUEFSRV9GUk9aRU46CisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGt2bV9ndWVzdF9jcHVfb2ZmbGluZSwgTlVMTCwgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEga3ZtX2NwdV9ub3RpZmllciA9IHsKKyAgICAgICAgLm5vdGlmaWVyX2NhbGwgID0ga3ZtX2NwdV9ub3RpZnksCit9OworI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9faW5pdCBrdm1fYXBmX3RyYXBfaW5pdCh2b2lkKQoreworCXNldF9pbnRyX2dhdGUoMTQsICZhc3luY19wYWdlX2ZhdWx0KTsKK30KKwordm9pZCBfX2luaXQga3ZtX2d1ZXN0X2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWlmICgha3ZtX3BhcmFfYXZhaWxhYmxlKCkpCisJCXJldHVybjsKKwogCXBhcmF2aXJ0X29wc19zZXR1cCgpOworCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigma3ZtX3B2X3JlYm9vdF9uYik7CisJZm9yIChpID0gMDsgaSA8IEtWTV9UQVNLX1NMRUVQX0hBU0hTSVpFOyBpKyspCisJCXNwaW5fbG9ja19pbml0KCZhc3luY19wZl9zbGVlcGVyc1tpXS5sb2NrKTsKKwlpZiAoa3ZtX3BhcmFfaGFzX2ZlYXR1cmUoS1ZNX0ZFQVRVUkVfQVNZTkNfUEYpKQorCQl4ODZfaW5pdC5pcnFzLnRyYXBfaW5pdCA9IGt2bV9hcGZfdHJhcF9pbml0OworCisjaWZkZWYgQ09ORklHX1NNUAorCXNtcF9vcHMuc21wX3ByZXBhcmVfYm9vdF9jcHUgPSBrdm1fc21wX3ByZXBhcmVfYm9vdF9jcHU7CisJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZrdm1fY3B1X25vdGlmaWVyKTsKKyNlbHNlCisJa3ZtX2d1ZXN0X2NwdV9pbml0KCk7CisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKaW5kZXggY2E0M2NlMy4uZjk4ZDNlYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCS5mbGFncyA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAotc3RhdGljIGludCBrdm1fcmVnaXN0ZXJfY2xvY2soY2hhciAqdHh0KQoraW50IGt2bV9yZWdpc3Rlcl9jbG9jayhjaGFyICp0eHQpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgbG93LCBoaWdoLCByZXQ7CkBAIC0xNTIsMTQgKzE1Miw2IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB2b2lkIF9faW5pdCBrdm1fc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKLXsKLQlXQVJOX09OKGt2bV9yZWdpc3Rlcl9jbG9jaygicHJpbWFyeSBjcHUgY2xvY2siKSk7Ci0JbmF0aXZlX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KCk7Ci19Ci0jZW5kaWYKLQogLyoKICAqIEFmdGVyIHRoZSBjbG9jayBpcyByZWdpc3RlcmVkLCB0aGUgaG9zdCB3aWxsIGtlZXAgd3JpdGluZyB0byB0aGUKICAqIHJlZ2lzdGVyZWQgbWVtb3J5IGxvY2F0aW9uLiBJZiB0aGUgZ3Vlc3QgaGFwcGVucyB0byBzaHV0ZG93biwgdGhpcyBtZW1vcnkKQEAgLTIwNiw5ICsxOTgsNiBAQAogCXg4Nl9jcHVpbml0LnNldHVwX3BlcmNwdV9jbG9ja2V2ID0KIAkJa3ZtX3NldHVwX3NlY29uZGFyeV9jbG9jazsKICNlbmRpZgotI2lmZGVmIENPTkZJR19TTVAKLQlzbXBfb3BzLnNtcF9wcmVwYXJlX2Jvb3RfY3B1ID0ga3ZtX3NtcF9wcmVwYXJlX2Jvb3RfY3B1OwotI2VuZGlmCiAJbWFjaGluZV9vcHMuc2h1dGRvd24gID0ga3ZtX3NodXRkb3duOwogI2lmZGVmIENPTkZJR19LRVhFQwogCW1hY2hpbmVfb3BzLmNyYXNoX3NodXRkb3duICA9IGt2bV9jcmFzaF9zaHV0ZG93bjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwppbmRleCBjNDk1YWE4Li5mYzdhYWUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL3BjaV94ODYuaD4KICNpbmNsdWRlIDxhc20vdmlydGV4dC5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAjIGluY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CkBAIC03NDcsNyArNzQ4LDcgQEAKIHsKIAlpbnQgY3B1OwogCi0JaWYgKHZhbCAhPSBESUVfTk1JX0lQSSkKKwlpZiAodmFsICE9IERJRV9OTUkpCiAJCXJldHVybiBOT1RJRllfT0s7CiAKIAljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtNzc4LDYgKzc3OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY3Jhc2hfbm1pX25iID0gewogCS5ub3RpZmllcl9jYWxsID0gY3Jhc2hfbm1pX2NhbGxiYWNrLAorCS8qIHdlIHdhbnQgdG8gYmUgdGhlIGZpcnN0IG9uZSBjYWxsZWQgKi8KKwkucHJpb3JpdHkgPSBOTUlfTE9DQUxfSElHSF9QUklPUisxLAogfTsKIAogLyogSGFsdCBhbGwgb3RoZXIgQ1BVcywgY2FsbGluZyB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIGVhY2ggb2YgdGhlbQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3J0Yy5jIGIvYXJjaC94ODYva2VybmVsL3J0Yy5jCmluZGV4IDFjZmJiZmMuLjZmMzljYWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9ydGMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkJQ01PU19XUklURShyZWFsX3NlY29uZHMsIFJUQ19TRUNPTkRTKTsKIAkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsIFJUQ19NSU5VVEVTKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCXByaW50a19vbmNlKEtFUk5fTk9USUNFCiAJCSAgICAgICAic2V0X3J0Y19tbXNzOiBjYW4ndCB1cGRhdGUgZnJvbSAlZCB0byAlZFxuIiwKIAkJICAgICAgIGNtb3NfbWludXRlcywgcmVhbF9taW51dGVzKTsKIAkJcmV0dmFsID0gLTE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwppbmRleCBjNzE0OWM5Li43NjNkZjc3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKQEAgLTk3LDEyICs5NywxMiBAQAogICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHg4Nl9jcHVfaG90cGx1Z19kcml2ZXJfbXV0ZXgpOwogCi12b2lkIGNwdV9ob3RwbHVnX2RyaXZlcl9sb2NrKCkKK3ZvaWQgY3B1X2hvdHBsdWdfZHJpdmVyX2xvY2sodm9pZCkKIHsKICAgICAgICAgbXV0ZXhfbG9jaygmeDg2X2NwdV9ob3RwbHVnX2RyaXZlcl9tdXRleCk7CiB9CiAKLXZvaWQgY3B1X2hvdHBsdWdfZHJpdmVyX3VubG9jaygpCit2b2lkIGNwdV9ob3RwbHVnX2RyaXZlcl91bmxvY2sodm9pZCkKIHsKICAgICAgICAgbXV0ZXhfdW5sb2NrKCZ4ODZfY3B1X2hvdHBsdWdfZHJpdmVyX211dGV4KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggYzc2YWFjYS4uYjliNjcxNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTg0LDYgKzg0LDExIEBACiBzdGF0aWMgaW50IGlnbm9yZV9ubWlzOwogCiBpbnQgdW5rbm93bl9ubWlfcGFuaWM7CisvKgorICogUHJldmVudCBOTUkgcmVhc29uIHBvcnQgKDB4NjEpIGJlaW5nIGFjY2Vzc2VkIHNpbXVsdGFuZW91c2x5LCBjYW4KKyAqIG9ubHkgYmUgdXNlZCBpbiBOTUkgaGFuZGxlci4KKyAqLworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobm1pX3JlYXNvbl9sb2NrKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGNvbmRpdGlvbmFsX3N0aShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKQEAgLTMxMCwxNSArMzE1LDE1IEBACiBfX3NldHVwKCJ1bmtub3duX25taV9wYW5pYyIsIHNldHVwX3Vua25vd25fbm1pX3BhbmljKTsKIAogc3RhdGljIG5vdHJhY2UgX19rcHJvYmVzIHZvaWQKLW1lbV9wYXJpdHlfZXJyb3IodW5zaWduZWQgY2hhciByZWFzb24sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorcGNpX3NlcnJfZXJyb3IodW5zaWduZWQgY2hhciByZWFzb24sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXByaW50ayhLRVJOX0VNRVJHCi0JCSJVaGh1aC4gTk1JIHJlY2VpdmVkIGZvciB1bmtub3duIHJlYXNvbiAlMDJ4IG9uIENQVSAlZC5cbiIsCi0JCQlyZWFzb24sIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcHJfZW1lcmcoIk5NSTogUENJIHN5c3RlbSBlcnJvciAoU0VSUikgZm9yIHJlYXNvbiAlMDJ4IG9uIENQVSAlZC5cbiIsCisJCSByZWFzb24sIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKLQlwcmludGsoS0VSTl9FTUVSRwotCQkiWW91IGhhdmUgc29tZSBoYXJkd2FyZSBwcm9ibGVtLCBsaWtlbHkgb24gdGhlIFBDSSBidXMuXG4iKTsKLQorCS8qCisJICogT24gc29tZSBtYWNoaW5lcywgUENJIFNFUlIgbGluZSBpcyB1c2VkIHRvIHJlcG9ydCBtZW1vcnkKKwkgKiBlcnJvcnMuIEVEQUMgbWFrZXMgdXNlIG9mIGl0LgorCSAqLwogI2lmIGRlZmluZWQoQ09ORklHX0VEQUMpCiAJaWYgKGVkYWNfaGFuZGxlcl9zZXQoKSkgewogCQllZGFjX2F0b21pY19hc3NlcnRfZXJyb3IoKTsKQEAgLTMyOSwxMSArMzM0LDExIEBACiAJaWYgKHBhbmljX29uX3VucmVjb3ZlcmVkX25taSkKIAkJcGFuaWMoIk5NSTogTm90IGNvbnRpbnVpbmciKTsKIAotCXByaW50ayhLRVJOX0VNRVJHICJEYXplZCBhbmQgY29uZnVzZWQsIGJ1dCB0cnlpbmcgdG8gY29udGludWVcbiIpOworCXByX2VtZXJnKCJEYXplZCBhbmQgY29uZnVzZWQsIGJ1dCB0cnlpbmcgdG8gY29udGludWVcbiIpOwogCi0JLyogQ2xlYXIgYW5kIGRpc2FibGUgdGhlIG1lbW9yeSBwYXJpdHkgZXJyb3IgbGluZS4gKi8KLQlyZWFzb24gPSAocmVhc29uICYgMHhmKSB8IDQ7Ci0Jb3V0YihyZWFzb24sIDB4NjEpOworCS8qIENsZWFyIGFuZCBkaXNhYmxlIHRoZSBQQ0kgU0VSUiBlcnJvciBsaW5lLiAqLworCXJlYXNvbiA9IChyZWFzb24gJiBOTUlfUkVBU09OX0NMRUFSX01BU0spIHwgTk1JX1JFQVNPTl9DTEVBUl9TRVJSOworCW91dGIocmVhc29uLCBOTUlfUkVBU09OX1BPUlQpOwogfQogCiBzdGF0aWMgbm90cmFjZSBfX2twcm9iZXMgdm9pZApAQCAtMzQxLDE1ICszNDYsMTcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGk7CiAKLQlwcmludGsoS0VSTl9FTUVSRyAiTk1JOiBJT0NLIGVycm9yIChkZWJ1ZyBpbnRlcnJ1cHQ/KVxuIik7CisJcHJfZW1lcmcoCisJIk5NSTogSU9DSyBlcnJvciAoZGVidWcgaW50ZXJydXB0PykgZm9yIHJlYXNvbiAlMDJ4IG9uIENQVSAlZC5cbiIsCisJCSByZWFzb24sIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJc2hvd19yZWdpc3RlcnMocmVncyk7CiAKIAlpZiAocGFuaWNfb25faW9fbm1pKQogCQlwYW5pYygiTk1JIElPQ0sgZXJyb3I6IE5vdCBjb250aW51aW5nIik7CiAKIAkvKiBSZS1lbmFibGUgdGhlIElPQ0sgbGluZSwgd2FpdCBmb3IgYSBmZXcgc2Vjb25kcyAqLwotCXJlYXNvbiA9IChyZWFzb24gJiAweGYpIHwgODsKLQlvdXRiKHJlYXNvbiwgMHg2MSk7CisJcmVhc29uID0gKHJlYXNvbiAmIE5NSV9SRUFTT05fQ0xFQVJfTUFTSykgfCBOTUlfUkVBU09OX0NMRUFSX0lPQ0hLOworCW91dGIocmVhc29uLCBOTUlfUkVBU09OX1BPUlQpOwogCiAJaSA9IDIwMDAwOwogCXdoaWxlICgtLWkpIHsKQEAgLTM1Nyw4ICszNjQsOCBAQAogCQl1ZGVsYXkoMTAwKTsKIAl9CiAKLQlyZWFzb24gJj0gfjg7Ci0Jb3V0YihyZWFzb24sIDB4NjEpOworCXJlYXNvbiAmPSB+Tk1JX1JFQVNPTl9DTEVBUl9JT0NISzsKKwlvdXRiKHJlYXNvbiwgTk1JX1JFQVNPTl9QT1JUKTsKIH0KIAogc3RhdGljIG5vdHJhY2UgX19rcHJvYmVzIHZvaWQKQEAgLTM3Nyw1NyArMzg0LDUwIEBACiAJCXJldHVybjsKIAl9CiAjZW5kaWYKLQlwcmludGsoS0VSTl9FTUVSRwotCQkiVWhodWguIE5NSSByZWNlaXZlZCBmb3IgdW5rbm93biByZWFzb24gJTAyeCBvbiBDUFUgJWQuXG4iLAotCQkJcmVhc29uLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXByX2VtZXJnKCJVaGh1aC4gTk1JIHJlY2VpdmVkIGZvciB1bmtub3duIHJlYXNvbiAlMDJ4IG9uIENQVSAlZC5cbiIsCisJCSByZWFzb24sIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKLQlwcmludGsoS0VSTl9FTUVSRyAiRG8geW91IGhhdmUgYSBzdHJhbmdlIHBvd2VyIHNhdmluZyBtb2RlIGVuYWJsZWQ/XG4iKTsKKwlwcl9lbWVyZygiRG8geW91IGhhdmUgYSBzdHJhbmdlIHBvd2VyIHNhdmluZyBtb2RlIGVuYWJsZWQ/XG4iKTsKIAlpZiAodW5rbm93bl9ubWlfcGFuaWMgfHwgcGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pKQogCQlwYW5pYygiTk1JOiBOb3QgY29udGludWluZyIpOwogCi0JcHJpbnRrKEtFUk5fRU1FUkcgIkRhemVkIGFuZCBjb25mdXNlZCwgYnV0IHRyeWluZyB0byBjb250aW51ZVxuIik7CisJcHJfZW1lcmcoIkRhemVkIGFuZCBjb25mdXNlZCwgYnV0IHRyeWluZyB0byBjb250aW51ZVxuIik7CiB9CiAKIHN0YXRpYyBub3RyYWNlIF9fa3Byb2JlcyB2b2lkIGRlZmF1bHRfZG9fbm1pKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGNoYXIgcmVhc29uID0gMDsKLQlpbnQgY3B1OwogCi0JY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCS8qCisJICogQ1BVLXNwZWNpZmljIE5NSSBtdXN0IGJlIHByb2Nlc3NlZCBiZWZvcmUgbm9uLUNQVS1zcGVjaWZpYworCSAqIE5NSSwgb3RoZXJ3aXNlIHdlIG1heSBsb3NlIGl0LCBiZWNhdXNlIHRoZSBDUFUtc3BlY2lmaWMKKwkgKiBOTUkgY2FuIG5vdCBiZSBkZXRlY3RlZC9wcm9jZXNzZWQgb24gb3RoZXIgQ1BVcy4KKwkgKi8KKwlpZiAobm90aWZ5X2RpZShESUVfTk1JLCAibm1pIiwgcmVncywgMCwgMiwgU0lHSU5UKSA9PSBOT1RJRllfU1RPUCkKKwkJcmV0dXJuOwogCi0JLyogT25seSB0aGUgQlNQIGdldHMgZXh0ZXJuYWwgTk1JcyBmcm9tIHRoZSBzeXN0ZW0uICovCi0JaWYgKCFjcHUpCi0JCXJlYXNvbiA9IGdldF9ubWlfcmVhc29uKCk7CisJLyogTm9uLUNQVS1zcGVjaWZpYyBOTUk6IE5NSSBzb3VyY2VzIGNhbiBiZSBwcm9jZXNzZWQgb24gYW55IENQVSAqLworCXJhd19zcGluX2xvY2soJm5taV9yZWFzb25fbG9jayk7CisJcmVhc29uID0gZ2V0X25taV9yZWFzb24oKTsKIAotCWlmICghKHJlYXNvbiAmIDB4YzApKSB7Ci0JCWlmIChub3RpZnlfZGllKERJRV9OTUlfSVBJLCAibm1pX2lwaSIsIHJlZ3MsIHJlYXNvbiwgMiwgU0lHSU5UKQotCQkJCQkJCQk9PSBOT1RJRllfU1RPUCkKLQkJCXJldHVybjsKLQotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCQlpZiAobm90aWZ5X2RpZShESUVfTk1JLCAibm1pIiwgcmVncywgcmVhc29uLCAyLCBTSUdJTlQpCi0JCQkJCQkJPT0gTk9USUZZX1NUT1ApCi0JCQlyZXR1cm47CisJaWYgKHJlYXNvbiAmIE5NSV9SRUFTT05fTUFTSykgeworCQlpZiAocmVhc29uICYgTk1JX1JFQVNPTl9TRVJSKQorCQkJcGNpX3NlcnJfZXJyb3IocmVhc29uLCByZWdzKTsKKwkJZWxzZSBpZiAocmVhc29uICYgTk1JX1JFQVNPTl9JT0NISykKKwkJCWlvX2NoZWNrX2Vycm9yKHJlYXNvbiwgcmVncyk7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCQkvKgorCQkgKiBSZWFzc2VydCBOTUkgaW4gY2FzZSBpdCBiZWNhbWUgYWN0aXZlCisJCSAqIG1lYW53aGlsZSBhcyBpdCdzIGVkZ2UtdHJpZ2dlcmVkOgorCQkgKi8KKwkJcmVhc3NlcnRfbm1pKCk7CiAjZW5kaWYKLQkJdW5rbm93bl9ubWlfZXJyb3IocmVhc29uLCByZWdzKTsKLQorCQlyYXdfc3Bpbl91bmxvY2soJm5taV9yZWFzb25fbG9jayk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKG5vdGlmeV9kaWUoRElFX05NSSwgIm5taSIsIHJlZ3MsIHJlYXNvbiwgMiwgU0lHSU5UKSA9PSBOT1RJRllfU1RPUCkKLQkJcmV0dXJuOworCXJhd19zcGluX3VubG9jaygmbm1pX3JlYXNvbl9sb2NrKTsKIAotCS8qIEFLOiBmb2xsb3dpbmcgY2hlY2tzIHNlZW0gdG8gYmUgYnJva2VuIG9uIG1vZGVybiBjaGlwc2V0cy4gRklYTUUgKi8KLQlpZiAocmVhc29uICYgMHg4MCkKLQkJbWVtX3Bhcml0eV9lcnJvcihyZWFzb24sIHJlZ3MpOwotCWlmIChyZWFzb24gJiAweDQwKQotCQlpb19jaGVja19lcnJvcihyZWFzb24sIHJlZ3MpOwotI2lmZGVmIENPTkZJR19YODZfMzIKLQkvKgotCSAqIFJlYXNzZXJ0IE5NSSBpbiBjYXNlIGl0IGJlY2FtZSBhY3RpdmUgbWVhbndoaWxlCi0JICogYXMgaXQncyBlZGdlLXRyaWdnZXJlZDoKLQkgKi8KLQlyZWFzc2VydF9ubWkoKTsKLSNlbmRpZgorCXVua25vd25fbm1pX2Vycm9yKHJlYXNvbiwgcmVncyk7CiB9CiAKIGRvdHJhcGxpbmthZ2Ugbm90cmFjZSBfX2twcm9iZXMgdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzYy5jIGIvYXJjaC94ODYva2VybmVsL3RzYy5jCmluZGV4IDAzZDJlYTguLjgyM2Y3OWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90c2MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKQEAgLTk2NSw3ICs5NjUsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3RzY19jbG9ja3NvdXJjZSh2b2lkKQogewotCWlmICghY3B1X2hhc190c2MgfHwgdHNjX2Rpc2FibGVkID4gMCkKKwlpZiAoIWNwdV9oYXNfdHNjIHx8IHRzY19kaXNhYmxlZCA+IDAgfHwgIXRzY19raHopCiAJCXJldHVybiAwOwogCiAJaWYgKHRzY19jbG9ja3NvdXJjZV9yZWxpYWJsZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9LY29uZmlnIGIvYXJjaC94ODYva3ZtL0tjb25maWcKaW5kZXggZGRjMTMxZi4uNTBmNjM2NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL0tjb25maWcKKysrIGIvYXJjaC94ODYva3ZtL0tjb25maWcKQEAgLTI4LDYgKzI4LDcgQEAKIAlzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUAogCXNlbGVjdCBIQVZFX0tWTV9FVkVOVEZECiAJc2VsZWN0IEtWTV9BUElDX0FSQ0hJVEVDVFVSRQorCXNlbGVjdCBLVk1fQVNZTkNfUEYKIAlzZWxlY3QgVVNFUl9SRVRVUk5fTk9USUZJRVIKIAlzZWxlY3QgS1ZNX01NSU8KIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKaW5kZXggMzFhNzAzNS4uZjE1NTAxZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2t2bS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKIAotRVhUUkFfQ0ZMQUdTICs9IC1JdmlydC9rdm0gLUlhcmNoL3g4Ni9rdm0KK2NjZmxhZ3MteSArPSAtSXZpcnQva3ZtIC1JYXJjaC94ODYva3ZtCiAKIENGTEFHU194ODYubyA6PSAtSS4KIENGTEFHU19zdm0ubyA6PSAtSS4KQEAgLTksNiArOSw3IEBACiAJCQkJY29hbGVzY2VkX21taW8ubyBpcnFfY29tbS5vIGV2ZW50ZmQubyBcCiAJCQkJYXNzaWduZWQtZGV2Lm8pCiBrdm0tJChDT05GSUdfSU9NTVVfQVBJKQkrPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGlvbW11Lm8pCitrdm0tJChDT05GSUdfS1ZNX0FTWU5DX1BGKQkrPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGFzeW5jX3BmLm8pCiAKIGt2bS15CQkJKz0geDg2Lm8gbW11Lm8gZW11bGF0ZS5vIGk4MjU5Lm8gaXJxLm8gbGFwaWMubyBcCiAJCQkgICBpODI1NC5vIHRpbWVyLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCmluZGV4IDM4YjZlOGQuLmNhZjk2NjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKKysrIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuYwpAQCAtMjAsMTYgKzIwLDggQEAKICAqIEZyb206IHhlbi11bnN0YWJsZSAxMDY3NjphZjk4MDlmNTFmODFhM2M0M2YyNzZmMDBjODFhNTJlZjU1OGFmZGE0CiAgKi8KIAotI2lmbmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxwdWJsaWMveGVuLmg+Ci0jZGVmaW5lIERQUklOVEYoX2YsIF9hIC4uLikgcHJpbnRmKF9mICwgIyMgX2EpCi0jZWxzZQogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAjaW5jbHVkZSAia3ZtX2NhY2hlX3JlZ3MuaCIKLSNkZWZpbmUgRFBSSU5URih4Li4uKSBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS9rdm1fZW11bGF0ZS5oPgogCkBAIC00MTgsOSArNDEwLDkgQEAKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1yZWdpc3Rlcl9hZGRyZXNzKHN0cnVjdCBkZWNvZGVfY2FjaGUgKmMsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyByZWcpCityZWdpc3Rlcl9hZGRyZXNzKHN0cnVjdCBkZWNvZGVfY2FjaGUgKmMsIHVuc2lnbmVkIGxvbmcgcmVnKQogewotCXJldHVybiBiYXNlICsgYWRkcmVzc19tYXNrKGMsIHJlZyk7CisJcmV0dXJuIGFkZHJlc3NfbWFzayhjLCByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTQ1Miw2MCArNDQ0LDU1IEBACiAJcmV0dXJuIG9wcy0+Z2V0X2NhY2hlZF9zZWdtZW50X2Jhc2Uoc2VnLCBjdHh0LT52Y3B1KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VnX292ZXJyaWRlX2Jhc2Uoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCi0JCQkJICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcywKLQkJCQkgICAgICAgc3RydWN0IGRlY29kZV9jYWNoZSAqYykKK3N0YXRpYyB1bnNpZ25lZCBzZWdfb3ZlcnJpZGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcywKKwkJCSAgICAgc3RydWN0IGRlY29kZV9jYWNoZSAqYykKIHsKIAlpZiAoIWMtPmhhc19zZWdfb3ZlcnJpZGUpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIHNlZ19iYXNlKGN0eHQsIG9wcywgYy0+c2VnX292ZXJyaWRlKTsKKwlyZXR1cm4gYy0+c2VnX292ZXJyaWRlOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBlc19iYXNlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAotCQkJICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCitzdGF0aWMgdWxvbmcgbGluZWFyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkgICAgc3RydWN0IHNlZ21lbnRlZF9hZGRyZXNzIGFkZHIpCiB7Ci0JcmV0dXJuIHNlZ19iYXNlKGN0eHQsIG9wcywgVkNQVV9TUkVHX0VTKTsKKwlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKKwl1bG9uZyBsYTsKKworCWxhID0gc2VnX2Jhc2UoY3R4dCwgY3R4dC0+b3BzLCBhZGRyLnNlZykgKyBhZGRyLmVhOworCWlmIChjLT5hZF9ieXRlcyAhPSA4KQorCQlsYSAmPSAodTMyKS0xOworCXJldHVybiBsYTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgc3NfYmFzZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJCSAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQorc3RhdGljIGludCBlbXVsYXRlX2V4Y2VwdGlvbihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IHZlYywKKwkJCSAgICAgdTMyIGVycm9yLCBib29sIHZhbGlkKQogewotCXJldHVybiBzZWdfYmFzZShjdHh0LCBvcHMsIFZDUFVfU1JFR19TUyk7CisJY3R4dC0+ZXhjZXB0aW9uLnZlY3RvciA9IHZlYzsKKwljdHh0LT5leGNlcHRpb24uZXJyb3JfY29kZSA9IGVycm9yOworCWN0eHQtPmV4Y2VwdGlvbi5lcnJvcl9jb2RlX3ZhbGlkID0gdmFsaWQ7CisJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwogfQogCi1zdGF0aWMgdm9pZCBlbXVsYXRlX2V4Y2VwdGlvbihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IHZlYywKLQkJCQkgICAgICB1MzIgZXJyb3IsIGJvb2wgdmFsaWQpCitzdGF0aWMgaW50IGVtdWxhdGVfZ3Aoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCBlcnIpCiB7Ci0JY3R4dC0+ZXhjZXB0aW9uID0gdmVjOwotCWN0eHQtPmVycm9yX2NvZGUgPSBlcnJvcjsKLQljdHh0LT5lcnJvcl9jb2RlX3ZhbGlkID0gdmFsaWQ7CisJcmV0dXJuIGVtdWxhdGVfZXhjZXB0aW9uKGN0eHQsIEdQX1ZFQ1RPUiwgZXJyLCB0cnVlKTsKIH0KIAotc3RhdGljIHZvaWQgZW11bGF0ZV9ncChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGVycikKK3N0YXRpYyBpbnQgZW11bGF0ZV91ZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIHsKLQllbXVsYXRlX2V4Y2VwdGlvbihjdHh0LCBHUF9WRUNUT1IsIGVyciwgdHJ1ZSk7CisJcmV0dXJuIGVtdWxhdGVfZXhjZXB0aW9uKGN0eHQsIFVEX1ZFQ1RPUiwgMCwgZmFsc2UpOwogfQogCi1zdGF0aWMgdm9pZCBlbXVsYXRlX3BmKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQorc3RhdGljIGludCBlbXVsYXRlX3RzKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgZXJyKQogewotCWVtdWxhdGVfZXhjZXB0aW9uKGN0eHQsIFBGX1ZFQ1RPUiwgMCwgdHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtdWxhdGVfdWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0JZW11bGF0ZV9leGNlcHRpb24oY3R4dCwgVURfVkVDVE9SLCAwLCBmYWxzZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtdWxhdGVfdHMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCBlcnIpCi17Ci0JZW11bGF0ZV9leGNlcHRpb24oY3R4dCwgVFNfVkVDVE9SLCBlcnIsIHRydWUpOworCXJldHVybiBlbXVsYXRlX2V4Y2VwdGlvbihjdHh0LCBUU19WRUNUT1IsIGVyciwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgZW11bGF0ZV9kZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIHsKLQllbXVsYXRlX2V4Y2VwdGlvbihjdHh0LCBERV9WRUNUT1IsIDAsIGZhbHNlKTsKLQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CisJcmV0dXJuIGVtdWxhdGVfZXhjZXB0aW9uKGN0eHQsIERFX1ZFQ1RPUiwgMCwgZmFsc2UpOwogfQogCiBzdGF0aWMgaW50IGRvX2ZldGNoX2luc25fYnl0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKQEAgLTUyMCw3ICs1MDcsNyBAQAogCQljdXJfc2l6ZSA9IGZjLT5lbmQgLSBmYy0+c3RhcnQ7CiAJCXNpemUgPSBtaW4oMTVVTCAtIGN1cl9zaXplLCBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShlaXApKTsKIAkJcmMgPSBvcHMtPmZldGNoKGN0eHQtPmNzX2Jhc2UgKyBlaXAsIGZjLT5kYXRhICsgY3VyX3NpemUsCi0JCQkJc2l6ZSwgY3R4dC0+dmNwdSwgTlVMTCk7CisJCQkJc2l6ZSwgY3R4dC0+dmNwdSwgJmN0eHQtPmV4Y2VwdGlvbik7CiAJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQkJcmV0dXJuIHJjOwogCQlmYy0+ZW5kICs9IHNpemU7CkBAIC01NjQsNyArNTUxLDcgQEAKIAogc3RhdGljIGludCByZWFkX2Rlc2NyaXB0b3Ioc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCiAJCQkgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMsCi0JCQkgICB1bG9uZyBhZGRyLAorCQkJICAgc3RydWN0IHNlZ21lbnRlZF9hZGRyZXNzIGFkZHIsCiAJCQkgICB1MTYgKnNpemUsIHVuc2lnbmVkIGxvbmcgKmFkZHJlc3MsIGludCBvcF9ieXRlcykKIHsKIAlpbnQgcmM7CkBAIC01NzIsMTAgKzU1OSwxMyBAQAogCWlmIChvcF9ieXRlcyA9PSAyKQogCQlvcF9ieXRlcyA9IDM7CiAJKmFkZHJlc3MgPSAwOwotCXJjID0gb3BzLT5yZWFkX3N0ZChhZGRyLCAodW5zaWduZWQgbG9uZyAqKXNpemUsIDIsIGN0eHQtPnZjcHUsIE5VTEwpOworCXJjID0gb3BzLT5yZWFkX3N0ZChsaW5lYXIoY3R4dCwgYWRkciksICh1bnNpZ25lZCBsb25nICopc2l6ZSwgMiwKKwkJCSAgIGN0eHQtPnZjcHUsICZjdHh0LT5leGNlcHRpb24pOwogCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gcmM7Ci0JcmMgPSBvcHMtPnJlYWRfc3RkKGFkZHIgKyAyLCBhZGRyZXNzLCBvcF9ieXRlcywgY3R4dC0+dmNwdSwgTlVMTCk7CisJYWRkci5lYSArPSAyOworCXJjID0gb3BzLT5yZWFkX3N0ZChsaW5lYXIoY3R4dCwgYWRkciksIGFkZHJlc3MsIG9wX2J5dGVzLAorCQkJICAgY3R4dC0+dmNwdSwgJmN0eHQtPmV4Y2VwdGlvbik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC03NjgsNyArNzU4LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCW9wLT5hZGRyLm1lbSA9IG1vZHJtX2VhOworCW9wLT5hZGRyLm1lbS5lYSA9IG1vZHJtX2VhOwogZG9uZToKIAlyZXR1cm4gcmM7CiB9CkBAIC03ODMsMTMgKzc3MywxMyBAQAogCW9wLT50eXBlID0gT1BfTUVNOwogCXN3aXRjaCAoYy0+YWRfYnl0ZXMpIHsKIAljYXNlIDI6Ci0JCW9wLT5hZGRyLm1lbSA9IGluc25fZmV0Y2godTE2LCAyLCBjLT5laXApOworCQlvcC0+YWRkci5tZW0uZWEgPSBpbnNuX2ZldGNoKHUxNiwgMiwgYy0+ZWlwKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgotCQlvcC0+YWRkci5tZW0gPSBpbnNuX2ZldGNoKHUzMiwgNCwgYy0+ZWlwKTsKKwkJb3AtPmFkZHIubWVtLmVhID0gaW5zbl9mZXRjaCh1MzIsIDQsIGMtPmVpcCk7CiAJCWJyZWFrOwogCWNhc2UgODoKLQkJb3AtPmFkZHIubWVtID0gaW5zbl9mZXRjaCh1NjQsIDgsIGMtPmVpcCk7CisJCW9wLT5hZGRyLm1lbS5lYSA9IGluc25fZmV0Y2godTY0LCA4LCBjLT5laXApOwogCQlicmVhazsKIAl9CiBkb25lOgpAQCAtODA4LDcgKzc5OCw3IEBACiAJCWVsc2UgaWYgKGMtPnNyYy5ieXRlcyA9PSA0KQogCQkJc3YgPSAoczMyKWMtPnNyYy52YWwgJiAoczMyKW1hc2s7CiAKLQkJYy0+ZHN0LmFkZHIubWVtICs9IChzdiA+PiAzKTsKKwkJYy0+ZHN0LmFkZHIubWVtLmVhICs9IChzdiA+PiAzKTsKIAl9CiAKIAkvKiBvbmx5IHN1YndvcmQgb2Zmc2V0ICovCkBAIC04MjEsNyArODExLDYgQEAKIHsKIAlpbnQgcmM7CiAJc3RydWN0IHJlYWRfY2FjaGUgKm1jID0gJmN0eHQtPmRlY29kZS5tZW1fcmVhZDsKLQl1MzIgZXJyOwogCiAJd2hpbGUgKHNpemUpIHsKIAkJaW50IG4gPSBtaW4oc2l6ZSwgOHUpOwpAQCAtODI5LDEwICs4MTgsOCBAQAogCQlpZiAobWMtPnBvcyA8IG1jLT5lbmQpCiAJCQlnb3RvIHJlYWRfY2FjaGVkOwogCi0JCXJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKGFkZHIsIG1jLT5kYXRhICsgbWMtPmVuZCwgbiwgJmVyciwKLQkJCQkJY3R4dC0+dmNwdSk7Ci0JCWlmIChyYyA9PSBYODZFTVVMX1BST1BBR0FURV9GQVVMVCkKLQkJCWVtdWxhdGVfcGYoY3R4dCk7CisJCXJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKGFkZHIsIG1jLT5kYXRhICsgbWMtPmVuZCwgbiwKKwkJCQkJJmN0eHQtPmV4Y2VwdGlvbiwgY3R4dC0+dmNwdSk7CiAJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQkJcmV0dXJuIHJjOwogCQltYy0+ZW5kICs9IG47CkBAIC05MDcsMTkgKzg5NCwxNSBAQAogCXN0cnVjdCBkZXNjX3B0ciBkdDsKIAl1MTYgaW5kZXggPSBzZWxlY3RvciA+PiAzOwogCWludCByZXQ7Ci0JdTMyIGVycjsKIAl1bG9uZyBhZGRyOwogCiAJZ2V0X2Rlc2NyaXB0b3JfdGFibGVfcHRyKGN0eHQsIG9wcywgc2VsZWN0b3IsICZkdCk7CiAKLQlpZiAoZHQuc2l6ZSA8IGluZGV4ICogOCArIDcpIHsKLQkJZW11bGF0ZV9ncChjdHh0LCBzZWxlY3RvciAmIDB4ZmZmYyk7Ci0JCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKLQl9CisJaWYgKGR0LnNpemUgPCBpbmRleCAqIDggKyA3KQorCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCBzZWxlY3RvciAmIDB4ZmZmYyk7CiAJYWRkciA9IGR0LmFkZHJlc3MgKyBpbmRleCAqIDg7Ci0JcmV0ID0gb3BzLT5yZWFkX3N0ZChhZGRyLCBkZXNjLCBzaXplb2YgKmRlc2MsIGN0eHQtPnZjcHUsICAmZXJyKTsKLQlpZiAocmV0ID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUKQotCQllbXVsYXRlX3BmKGN0eHQpOworCXJldCA9IG9wcy0+cmVhZF9zdGQoYWRkciwgZGVzYywgc2l6ZW9mICpkZXNjLCBjdHh0LT52Y3B1LAorCQkJICAgICZjdHh0LT5leGNlcHRpb24pOwogCiAgICAgICAgcmV0dXJuIHJldDsKIH0KQEAgLTkzMSwyMSArOTE0LDE3IEBACiB7CiAJc3RydWN0IGRlc2NfcHRyIGR0OwogCXUxNiBpbmRleCA9IHNlbGVjdG9yID4+IDM7Ci0JdTMyIGVycjsKIAl1bG9uZyBhZGRyOwogCWludCByZXQ7CiAKIAlnZXRfZGVzY3JpcHRvcl90YWJsZV9wdHIoY3R4dCwgb3BzLCBzZWxlY3RvciwgJmR0KTsKIAotCWlmIChkdC5zaXplIDwgaW5kZXggKiA4ICsgNykgewotCQllbXVsYXRlX2dwKGN0eHQsIHNlbGVjdG9yICYgMHhmZmZjKTsKLQkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwotCX0KKwlpZiAoZHQuc2l6ZSA8IGluZGV4ICogOCArIDcpCisJCXJldHVybiBlbXVsYXRlX2dwKGN0eHQsIHNlbGVjdG9yICYgMHhmZmZjKTsKIAogCWFkZHIgPSBkdC5hZGRyZXNzICsgaW5kZXggKiA4OwotCXJldCA9IG9wcy0+d3JpdGVfc3RkKGFkZHIsIGRlc2MsIHNpemVvZiAqZGVzYywgY3R4dC0+dmNwdSwgJmVycik7Ci0JaWYgKHJldCA9PSBYODZFTVVMX1BST1BBR0FURV9GQVVMVCkKLQkJZW11bGF0ZV9wZihjdHh0KTsKKwlyZXQgPSBvcHMtPndyaXRlX3N0ZChhZGRyLCBkZXNjLCBzaXplb2YgKmRlc2MsIGN0eHQtPnZjcHUsCisJCQkgICAgICZjdHh0LT5leGNlcHRpb24pOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwOTIsNyArMTA3MSw2IEBACiB7CiAJaW50IHJjOwogCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwotCXUzMiBlcnI7CiAKIAlzd2l0Y2ggKGMtPmRzdC50eXBlKSB7CiAJY2FzZSBPUF9SRUc6CkBAIC0xMTAxLDIxICsxMDc5LDE5IEBACiAJY2FzZSBPUF9NRU06CiAJCWlmIChjLT5sb2NrX3ByZWZpeCkKIAkJCXJjID0gb3BzLT5jbXB4Y2hnX2VtdWxhdGVkKAotCQkJCQljLT5kc3QuYWRkci5tZW0sCisJCQkJCWxpbmVhcihjdHh0LCBjLT5kc3QuYWRkci5tZW0pLAogCQkJCQkmYy0+ZHN0Lm9yaWdfdmFsLAogCQkJCQkmYy0+ZHN0LnZhbCwKIAkJCQkJYy0+ZHN0LmJ5dGVzLAotCQkJCQkmZXJyLAorCQkJCQkmY3R4dC0+ZXhjZXB0aW9uLAogCQkJCQljdHh0LT52Y3B1KTsKIAkJZWxzZQogCQkJcmMgPSBvcHMtPndyaXRlX2VtdWxhdGVkKAotCQkJCQljLT5kc3QuYWRkci5tZW0sCisJCQkJCWxpbmVhcihjdHh0LCBjLT5kc3QuYWRkci5tZW0pLAogCQkJCQkmYy0+ZHN0LnZhbCwKIAkJCQkJYy0+ZHN0LmJ5dGVzLAotCQkJCQkmZXJyLAorCQkJCQkmY3R4dC0+ZXhjZXB0aW9uLAogCQkJCQljdHh0LT52Y3B1KTsKLQkJaWYgKHJjID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUKQotCQkJZW11bGF0ZV9wZihjdHh0KTsKIAkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCQlyZXR1cm4gcmM7CiAJCWJyZWFrOwpAQCAtMTEzNyw4ICsxMTEzLDggQEAKIAljLT5kc3QuYnl0ZXMgPSBjLT5vcF9ieXRlczsKIAljLT5kc3QudmFsID0gYy0+c3JjLnZhbDsKIAlyZWdpc3Rlcl9hZGRyZXNzX2luY3JlbWVudChjLCAmYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSwgLWMtPm9wX2J5dGVzKTsKLQljLT5kc3QuYWRkci5tZW0gPSByZWdpc3Rlcl9hZGRyZXNzKGMsIHNzX2Jhc2UoY3R4dCwgb3BzKSwKLQkJCQkJICAgYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSk7CisJYy0+ZHN0LmFkZHIubWVtLmVhID0gcmVnaXN0ZXJfYWRkcmVzcyhjLCBjLT5yZWdzW1ZDUFVfUkVHU19SU1BdKTsKKwljLT5kc3QuYWRkci5tZW0uc2VnID0gVkNQVV9TUkVHX1NTOwogfQogCiBzdGF0aWMgaW50IGVtdWxhdGVfcG9wKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LApAQCAtMTE0NywxMCArMTEyMywxMSBAQAogewogCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwogCWludCByYzsKKwlzdHJ1Y3Qgc2VnbWVudGVkX2FkZHJlc3MgYWRkcjsKIAotCXJjID0gcmVhZF9lbXVsYXRlZChjdHh0LCBvcHMsIHJlZ2lzdGVyX2FkZHJlc3MoYywgc3NfYmFzZShjdHh0LCBvcHMpLAotCQkJCQkJICAgICAgIGMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0pLAotCQkJICAgZGVzdCwgbGVuKTsKKwlhZGRyLmVhID0gcmVnaXN0ZXJfYWRkcmVzcyhjLCBjLT5yZWdzW1ZDUFVfUkVHU19SU1BdKTsKKwlhZGRyLnNlZyA9IFZDUFVfU1JFR19TUzsKKwlyYyA9IHJlYWRfZW11bGF0ZWQoY3R4dCwgb3BzLCBsaW5lYXIoY3R4dCwgYWRkciksIGRlc3QsIGxlbik7CiAJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByYzsKIApAQCAtMTE4NCwxMCArMTE2MSw4IEBACiAJCQljaGFuZ2VfbWFzayB8PSBFRkxHX0lGOwogCQlicmVhazsKIAljYXNlIFg4NkVNVUxfTU9ERV9WTTg2OgotCQlpZiAoaW9wbCA8IDMpIHsKLQkJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7Ci0JCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7Ci0JCX0KKwkJaWYgKGlvcGwgPCAzKQorCQkJcmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgMCk7CiAJCWNoYW5nZV9tYXNrIHw9IEVGTEdfSUY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6IC8qIHJlYWwgbW9kZSAqLwpAQCAtMTE5OCw5ICsxMTczLDYgQEAKIAkqKHVuc2lnbmVkIGxvbmcgKilkZXN0ID0KIAkJKGN0eHQtPmVmbGFncyAmIH5jaGFuZ2VfbWFzaykgfCAodmFsICYgY2hhbmdlX21hc2spOwogCi0JaWYgKHJjID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUKQotCQllbXVsYXRlX3BmKGN0eHQpOwotCiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMjg3LDcgKzEyNTksNiBAQAogCWd2YV90IGNzX2FkZHI7CiAJZ3ZhX3QgZWlwX2FkZHI7CiAJdTE2IGNzLCBlaXA7Ci0JdTMyIGVycjsKIAogCS8qIFRPRE86IEFkZCBsaW1pdCBjaGVja3MgKi8KIAljLT5zcmMudmFsID0gY3R4dC0+ZWZsYWdzOwpAQCAtMTMxNywxMSArMTI4OCwxMSBAQAogCWVpcF9hZGRyID0gZHQuYWRkcmVzcyArIChpcnEgPDwgMik7CiAJY3NfYWRkciA9IGR0LmFkZHJlc3MgKyAoaXJxIDw8IDIpICsgMjsKIAotCXJjID0gb3BzLT5yZWFkX3N0ZChjc19hZGRyLCAmY3MsIDIsIGN0eHQtPnZjcHUsICZlcnIpOworCXJjID0gb3BzLT5yZWFkX3N0ZChjc19hZGRyLCAmY3MsIDIsIGN0eHQtPnZjcHUsICZjdHh0LT5leGNlcHRpb24pOwogCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gcmM7CiAKLQlyYyA9IG9wcy0+cmVhZF9zdGQoZWlwX2FkZHIsICZlaXAsIDIsIGN0eHQtPnZjcHUsICZlcnIpOworCXJjID0gb3BzLT5yZWFkX3N0ZChlaXBfYWRkciwgJmVpcCwgMiwgY3R4dC0+dmNwdSwgJmN0eHQtPmV4Y2VwdGlvbik7CiAJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByYzsKIApAQCAtMTM3MCwxMCArMTM0MSw4IEBACiAJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByYzsKIAotCWlmICh0ZW1wX2VpcCAmIH4weGZmZmYpIHsKLQkJZW11bGF0ZV9ncChjdHh0LCAwKTsKLQkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwotCX0KKwlpZiAodGVtcF9laXAgJiB+MHhmZmZmKQorCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKIAogCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmY3MsIGMtPm9wX2J5dGVzKTsKIApAQCAtMTYyNCwxMCArMTU5Myw4IEBACiAKIAkvKiBzeXNjYWxsIGlzIG5vdCBhdmFpbGFibGUgaW4gcmVhbCBtb2RlICovCiAJaWYgKGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1JFQUwgfHwKLQkgICAgY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfVk04NikgewotCQllbXVsYXRlX3VkKGN0eHQpOwotCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7Ci0JfQorCSAgICBjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9WTTg2KQorCQlyZXR1cm4gZW11bGF0ZV91ZChjdHh0KTsKIAogCXNldHVwX3N5c2NhbGxzX3NlZ21lbnRzKGN0eHQsIG9wcywgJmNzLCAmc3MpOwogCkBAIC0xNjc4LDM0ICsxNjQ1LDI2IEBACiAJdTE2IGNzX3NlbCwgc3Nfc2VsOwogCiAJLyogaW5qZWN0ICNHUCBpZiBpbiByZWFsIG1vZGUgKi8KLQlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUkVBTCkgewotCQllbXVsYXRlX2dwKGN0eHQsIDApOwotCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7Ci0JfQorCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9SRUFMKQorCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKIAogCS8qIFhYWCBzeXNlbnRlci9zeXNleGl0IGhhdmUgbm90IGJlZW4gdGVzdGVkIGluIDY0Yml0IG1vZGUuCiAJKiBUaGVyZWZvcmUsIHdlIGluamVjdCBhbiAjVUQuCiAJKi8KLQlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0KSB7Ci0JCWVtdWxhdGVfdWQoY3R4dCk7Ci0JCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKLQl9CisJaWYgKGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1Q2NCkKKwkJcmV0dXJuIGVtdWxhdGVfdWQoY3R4dCk7CiAKIAlzZXR1cF9zeXNjYWxsc19zZWdtZW50cyhjdHh0LCBvcHMsICZjcywgJnNzKTsKIAogCW9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfSUEzMl9TWVNFTlRFUl9DUywgJm1zcl9kYXRhKTsKIAlzd2l0Y2ggKGN0eHQtPm1vZGUpIHsKIAljYXNlIFg4NkVNVUxfTU9ERV9QUk9UMzI6Ci0JCWlmICgobXNyX2RhdGEgJiAweGZmZmMpID09IDB4MCkgewotCQkJZW11bGF0ZV9ncChjdHh0LCAwKTsKLQkJCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKLQkJfQorCQlpZiAoKG1zcl9kYXRhICYgMHhmZmZjKSA9PSAweDApCisJCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBYODZFTVVMX01PREVfUFJPVDY0OgotCQlpZiAobXNyX2RhdGEgPT0gMHgwKSB7Ci0JCQllbXVsYXRlX2dwKGN0eHQsIDApOwotCQkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwotCQl9CisJCWlmIChtc3JfZGF0YSA9PSAweDApCisJCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNzQ1LDEwICsxNzA0LDggQEAKIAogCS8qIGluamVjdCAjR1AgaWYgaW4gcmVhbCBtb2RlIG9yIFZpcnR1YWwgODA4NiBtb2RlICovCiAJaWYgKGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1JFQUwgfHwKLQkgICAgY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfVk04NikgewotCQllbXVsYXRlX2dwKGN0eHQsIDApOwotCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7Ci0JfQorCSAgICBjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9WTTg2KQorCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKIAogCXNldHVwX3N5c2NhbGxzX3NlZ21lbnRzKGN0eHQsIG9wcywgJmNzLCAmc3MpOwogCkBAIC0xNzYzLDE4ICsxNzIwLDE0IEBACiAJc3dpdGNoICh1c2VybW9kZSkgewogCWNhc2UgWDg2RU1VTF9NT0RFX1BST1QzMjoKIAkJY3Nfc2VsID0gKHUxNikobXNyX2RhdGEgKyAxNik7Ci0JCWlmICgobXNyX2RhdGEgJiAweGZmZmMpID09IDB4MCkgewotCQkJZW11bGF0ZV9ncChjdHh0LCAwKTsKLQkJCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKLQkJfQorCQlpZiAoKG1zcl9kYXRhICYgMHhmZmZjKSA9PSAweDApCisJCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKIAkJc3Nfc2VsID0gKHUxNikobXNyX2RhdGEgKyAyNCk7CiAJCWJyZWFrOwogCWNhc2UgWDg2RU1VTF9NT0RFX1BST1Q2NDoKIAkJY3Nfc2VsID0gKHUxNikobXNyX2RhdGEgKyAzMik7Ci0JCWlmIChtc3JfZGF0YSA9PSAweDApIHsKLQkJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7Ci0JCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7Ci0JCX0KKwkJaWYgKG1zcl9kYXRhID09IDB4MCkKKwkJCXJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApOwogCQlzc19zZWwgPSBjc19zZWwgKyA4OwogCQljcy5kID0gMDsKIAkJY3MubCA9IDE7CkBAIC0xOTM0LDMzICsxODg3LDI3IEBACiB7CiAJc3RydWN0IHRzc19zZWdtZW50XzE2IHRzc19zZWc7CiAJaW50IHJldDsKLQl1MzIgZXJyLCBuZXdfdHNzX2Jhc2UgPSBnZXRfZGVzY19iYXNlKG5ld19kZXNjKTsKKwl1MzIgbmV3X3Rzc19iYXNlID0gZ2V0X2Rlc2NfYmFzZShuZXdfZGVzYyk7CiAKIAlyZXQgPSBvcHMtPnJlYWRfc3RkKG9sZF90c3NfYmFzZSwgJnRzc19zZWcsIHNpemVvZiB0c3Nfc2VnLCBjdHh0LT52Y3B1LAotCQkJICAgICZlcnIpOwotCWlmIChyZXQgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpIHsKKwkJCSAgICAmY3R4dC0+ZXhjZXB0aW9uKTsKKwlpZiAocmV0ICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCS8qIEZJWE1FOiBuZWVkIHRvIHByb3ZpZGUgcHJlY2lzZSBmYXVsdCBhZGRyZXNzICovCi0JCWVtdWxhdGVfcGYoY3R4dCk7CiAJCXJldHVybiByZXQ7Ci0JfQogCiAJc2F2ZV9zdGF0ZV90b190c3MxNihjdHh0LCBvcHMsICZ0c3Nfc2VnKTsKIAogCXJldCA9IG9wcy0+d3JpdGVfc3RkKG9sZF90c3NfYmFzZSwgJnRzc19zZWcsIHNpemVvZiB0c3Nfc2VnLCBjdHh0LT52Y3B1LAotCQkJICAgICAmZXJyKTsKLQlpZiAocmV0ID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUKSB7CisJCQkgICAgICZjdHh0LT5leGNlcHRpb24pOworCWlmIChyZXQgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJLyogRklYTUU6IG5lZWQgdG8gcHJvdmlkZSBwcmVjaXNlIGZhdWx0IGFkZHJlc3MgKi8KLQkJZW11bGF0ZV9wZihjdHh0KTsKIAkJcmV0dXJuIHJldDsKLQl9CiAKIAlyZXQgPSBvcHMtPnJlYWRfc3RkKG5ld190c3NfYmFzZSwgJnRzc19zZWcsIHNpemVvZiB0c3Nfc2VnLCBjdHh0LT52Y3B1LAotCQkJICAgICZlcnIpOwotCWlmIChyZXQgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpIHsKKwkJCSAgICAmY3R4dC0+ZXhjZXB0aW9uKTsKKwlpZiAocmV0ICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCS8qIEZJWE1FOiBuZWVkIHRvIHByb3ZpZGUgcHJlY2lzZSBmYXVsdCBhZGRyZXNzICovCi0JCWVtdWxhdGVfcGYoY3R4dCk7CiAJCXJldHVybiByZXQ7Ci0JfQogCiAJaWYgKG9sZF90c3Nfc2VsICE9IDB4ZmZmZikgewogCQl0c3Nfc2VnLnByZXZfdGFza19saW5rID0gb2xkX3Rzc19zZWw7CkBAIC0xOTY4LDEyICsxOTE1LDEwIEBACiAJCXJldCA9IG9wcy0+d3JpdGVfc3RkKG5ld190c3NfYmFzZSwKIAkJCQkgICAgICZ0c3Nfc2VnLnByZXZfdGFza19saW5rLAogCQkJCSAgICAgc2l6ZW9mIHRzc19zZWcucHJldl90YXNrX2xpbmssCi0JCQkJICAgICBjdHh0LT52Y3B1LCAmZXJyKTsKLQkJaWYgKHJldCA9PSBYODZFTVVMX1BST1BBR0FURV9GQVVMVCkgeworCQkJCSAgICAgY3R4dC0+dmNwdSwgJmN0eHQtPmV4Y2VwdGlvbik7CisJCWlmIChyZXQgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJCS8qIEZJWE1FOiBuZWVkIHRvIHByb3ZpZGUgcHJlY2lzZSBmYXVsdCBhZGRyZXNzICovCi0JCQllbXVsYXRlX3BmKGN0eHQpOwogCQkJcmV0dXJuIHJldDsKLQkJfQogCX0KIAogCXJldHVybiBsb2FkX3N0YXRlX2Zyb21fdHNzMTYoY3R4dCwgb3BzLCAmdHNzX3NlZyk7CkBAIC0yMDEzLDEwICsxOTU4LDggQEAKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKIAlpbnQgcmV0OwogCi0JaWYgKG9wcy0+c2V0X2NyKDMsIHRzcy0+Y3IzLCBjdHh0LT52Y3B1KSkgewotCQllbXVsYXRlX2dwKGN0eHQsIDApOwotCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7Ci0JfQorCWlmIChvcHMtPnNldF9jcigzLCB0c3MtPmNyMywgY3R4dC0+dmNwdSkpCisJCXJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApOwogCWMtPmVpcCA9IHRzcy0+ZWlwOwogCWN0eHQtPmVmbGFncyA9IHRzcy0+ZWZsYWdzIHwgMjsKIAljLT5yZWdzW1ZDUFVfUkVHU19SQVhdID0gdHNzLT5lYXg7CkBAIC0yMDc2LDMzICsyMDE5LDI3IEBACiB7CiAJc3RydWN0IHRzc19zZWdtZW50XzMyIHRzc19zZWc7CiAJaW50IHJldDsKLQl1MzIgZXJyLCBuZXdfdHNzX2Jhc2UgPSBnZXRfZGVzY19iYXNlKG5ld19kZXNjKTsKKwl1MzIgbmV3X3Rzc19iYXNlID0gZ2V0X2Rlc2NfYmFzZShuZXdfZGVzYyk7CiAKIAlyZXQgPSBvcHMtPnJlYWRfc3RkKG9sZF90c3NfYmFzZSwgJnRzc19zZWcsIHNpemVvZiB0c3Nfc2VnLCBjdHh0LT52Y3B1LAotCQkJICAgICZlcnIpOwotCWlmIChyZXQgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpIHsKKwkJCSAgICAmY3R4dC0+ZXhjZXB0aW9uKTsKKwlpZiAocmV0ICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCS8qIEZJWE1FOiBuZWVkIHRvIHByb3ZpZGUgcHJlY2lzZSBmYXVsdCBhZGRyZXNzICovCi0JCWVtdWxhdGVfcGYoY3R4dCk7CiAJCXJldHVybiByZXQ7Ci0JfQogCiAJc2F2ZV9zdGF0ZV90b190c3MzMihjdHh0LCBvcHMsICZ0c3Nfc2VnKTsKIAogCXJldCA9IG9wcy0+d3JpdGVfc3RkKG9sZF90c3NfYmFzZSwgJnRzc19zZWcsIHNpemVvZiB0c3Nfc2VnLCBjdHh0LT52Y3B1LAotCQkJICAgICAmZXJyKTsKLQlpZiAocmV0ID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUKSB7CisJCQkgICAgICZjdHh0LT5leGNlcHRpb24pOworCWlmIChyZXQgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJLyogRklYTUU6IG5lZWQgdG8gcHJvdmlkZSBwcmVjaXNlIGZhdWx0IGFkZHJlc3MgKi8KLQkJZW11bGF0ZV9wZihjdHh0KTsKIAkJcmV0dXJuIHJldDsKLQl9CiAKIAlyZXQgPSBvcHMtPnJlYWRfc3RkKG5ld190c3NfYmFzZSwgJnRzc19zZWcsIHNpemVvZiB0c3Nfc2VnLCBjdHh0LT52Y3B1LAotCQkJICAgICZlcnIpOwotCWlmIChyZXQgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpIHsKKwkJCSAgICAmY3R4dC0+ZXhjZXB0aW9uKTsKKwlpZiAocmV0ICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCS8qIEZJWE1FOiBuZWVkIHRvIHByb3ZpZGUgcHJlY2lzZSBmYXVsdCBhZGRyZXNzICovCi0JCWVtdWxhdGVfcGYoY3R4dCk7CiAJCXJldHVybiByZXQ7Ci0JfQogCiAJaWYgKG9sZF90c3Nfc2VsICE9IDB4ZmZmZikgewogCQl0c3Nfc2VnLnByZXZfdGFza19saW5rID0gb2xkX3Rzc19zZWw7CkBAIC0yMTEwLDEyICsyMDQ3LDEwIEBACiAJCXJldCA9IG9wcy0+d3JpdGVfc3RkKG5ld190c3NfYmFzZSwKIAkJCQkgICAgICZ0c3Nfc2VnLnByZXZfdGFza19saW5rLAogCQkJCSAgICAgc2l6ZW9mIHRzc19zZWcucHJldl90YXNrX2xpbmssCi0JCQkJICAgICBjdHh0LT52Y3B1LCAmZXJyKTsKLQkJaWYgKHJldCA9PSBYODZFTVVMX1BST1BBR0FURV9GQVVMVCkgeworCQkJCSAgICAgY3R4dC0+dmNwdSwgJmN0eHQtPmV4Y2VwdGlvbik7CisJCWlmIChyZXQgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJCS8qIEZJWE1FOiBuZWVkIHRvIHByb3ZpZGUgcHJlY2lzZSBmYXVsdCBhZGRyZXNzICovCi0JCQllbXVsYXRlX3BmKGN0eHQpOwogCQkJcmV0dXJuIHJldDsKLQkJfQogCX0KIAogCXJldHVybiBsb2FkX3N0YXRlX2Zyb21fdHNzMzIoY3R4dCwgb3BzLCAmdHNzX3NlZyk7CkBAIC0yMTQ2LDEwICsyMDgxLDggQEAKIAogCWlmIChyZWFzb24gIT0gVEFTS19TV0lUQ0hfSVJFVCkgewogCQlpZiAoKHRzc19zZWxlY3RvciAmIDMpID4gbmV4dF90c3NfZGVzYy5kcGwgfHwKLQkJICAgIG9wcy0+Y3BsKGN0eHQtPnZjcHUpID4gbmV4dF90c3NfZGVzYy5kcGwpIHsKLQkJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7Ci0JCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7Ci0JCX0KKwkJICAgIG9wcy0+Y3BsKGN0eHQtPnZjcHUpID4gbmV4dF90c3NfZGVzYy5kcGwpCisJCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKIAl9CiAKIAlkZXNjX2xpbWl0ID0gZGVzY19saW1pdF9zY2FsZWQoJm5leHRfdHNzX2Rlc2MpOwpAQCAtMjIzMSwxNCArMjE2NCwxNSBAQAogCXJldHVybiAocmMgPT0gWDg2RU1VTF9VTkhBTkRMRUFCTEUpID8gLTEgOiAwOwogfQogCi1zdGF0aWMgdm9pZCBzdHJpbmdfYWRkcl9pbmMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHVuc2lnbmVkIGxvbmcgYmFzZSwKK3N0YXRpYyB2b2lkIHN0cmluZ19hZGRyX2luYyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdW5zaWduZWQgc2VnLAogCQkJICAgIGludCByZWcsIHN0cnVjdCBvcGVyYW5kICpvcCkKIHsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKIAlpbnQgZGYgPSAoY3R4dC0+ZWZsYWdzICYgRUZMR19ERikgPyAtMSA6IDE7CiAKIAlyZWdpc3Rlcl9hZGRyZXNzX2luY3JlbWVudChjLCAmYy0+cmVnc1tyZWddLCBkZiAqIG9wLT5ieXRlcyk7Ci0Jb3AtPmFkZHIubWVtID0gcmVnaXN0ZXJfYWRkcmVzcyhjLCAgYmFzZSwgYy0+cmVnc1tyZWddKTsKKwlvcC0+YWRkci5tZW0uZWEgPSByZWdpc3Rlcl9hZGRyZXNzKGMsIGMtPnJlZ3NbcmVnXSk7CisJb3AtPmFkZHIubWVtLnNlZyA9IHNlZzsKIH0KIAogc3RhdGljIGludCBlbV9wdXNoKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQpAQCAtMjM2OSwxMCArMjMwMyw4IEBACiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CiAJdTY0IHRzYyA9IDA7CiAKLQlpZiAoY3BsID4gMCAmJiAoY3R4dC0+b3BzLT5nZXRfY3IoNCwgY3R4dC0+dmNwdSkgJiBYODZfQ1I0X1RTRCkpIHsKLQkJZW11bGF0ZV9ncChjdHh0LCAwKTsKLQkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwotCX0KKwlpZiAoY3BsID4gMCAmJiAoY3R4dC0+b3BzLT5nZXRfY3IoNCwgY3R4dC0+dmNwdSkgJiBYODZfQ1I0X1RTRCkpCisJCXJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApOwogCWN0eHQtPm9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfSUEzMl9UU0MsICZ0c2MpOwogCWMtPnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSAodTMyKXRzYzsKIAljLT5yZWdzW1ZDUFVfUkVHU19SRFhdID0gdHNjID4+IDMyOwpAQCAtMjY0Nyw3ICsyNTc5LDcgQEAKIAogCW9wLT50eXBlID0gT1BfSU1NOwogCW9wLT5ieXRlcyA9IHNpemU7Ci0Jb3AtPmFkZHIubWVtID0gYy0+ZWlwOworCW9wLT5hZGRyLm1lbS5lYSA9IGMtPmVpcDsKIAkvKiBOQi4gSW1tZWRpYXRlcyBhcmUgc2lnbi1leHRlbmRlZCBhcyBuZWNlc3NhcnkuICovCiAJc3dpdGNoIChvcC0+Ynl0ZXMpIHsKIAljYXNlIDE6CkBAIC0yNjc4LDcgKzI2MTAsNyBAQAogfQogCiBpbnQKLXg4Nl9kZWNvZGVfaW5zbihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3g4Nl9kZWNvZGVfaW5zbihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKQogewogCXN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcyA9IGN0eHQtPm9wczsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKQEAgLTI2ODksNyArMjYyMSwxMCBAQAogCXN0cnVjdCBvcGVyYW5kIG1lbW9wID0geyAudHlwZSA9IE9QX05PTkUgfTsKIAogCWMtPmVpcCA9IGN0eHQtPmVpcDsKLQljLT5mZXRjaC5zdGFydCA9IGMtPmZldGNoLmVuZCA9IGMtPmVpcDsKKwljLT5mZXRjaC5zdGFydCA9IGMtPmVpcDsKKwljLT5mZXRjaC5lbmQgPSBjLT5mZXRjaC5zdGFydCArIGluc25fbGVuOworCWlmIChpbnNuX2xlbiA+IDApCisJCW1lbWNweShjLT5mZXRjaC5kYXRhLCBpbnNuLCBpbnNuX2xlbik7CiAJY3R4dC0+Y3NfYmFzZSA9IHNlZ19iYXNlKGN0eHQsIG9wcywgVkNQVV9TUkVHX0NTKTsKIAogCXN3aXRjaCAobW9kZSkgewpAQCAtMjgwMywxMCArMjczOCw4IEBACiAJYy0+ZXhlY3V0ZSA9IG9wY29kZS51LmV4ZWN1dGU7CiAKIAkvKiBVbnJlY29nbmlzZWQ/ICovCi0JaWYgKGMtPmQgPT0gMCB8fCAoYy0+ZCAmIFVuZGVmaW5lZCkpIHsKLQkJRFBSSU5URigiQ2Fubm90IGVtdWxhdGUgJTAyeFxuIiwgYy0+Yik7CisJaWYgKGMtPmQgPT0gMCB8fCAoYy0+ZCAmIFVuZGVmaW5lZCkpCiAJCXJldHVybiAtMTsKLQl9CiAKIAlpZiAobW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0ICYmIChjLT5kICYgU3RhY2spKQogCQljLT5vcF9ieXRlcyA9IDg7CkBAIC0yODMxLDE0ICsyNzY0LDEzIEBACiAJaWYgKCFjLT5oYXNfc2VnX292ZXJyaWRlKQogCQlzZXRfc2VnX292ZXJyaWRlKGMsIFZDUFVfU1JFR19EUyk7CiAKLQlpZiAobWVtb3AudHlwZSA9PSBPUF9NRU0gJiYgISghYy0+dHdvYnl0ZSAmJiBjLT5iID09IDB4OGQpKQotCQltZW1vcC5hZGRyLm1lbSArPSBzZWdfb3ZlcnJpZGVfYmFzZShjdHh0LCBvcHMsIGMpOworCW1lbW9wLmFkZHIubWVtLnNlZyA9IHNlZ19vdmVycmlkZShjdHh0LCBvcHMsIGMpOwogCiAJaWYgKG1lbW9wLnR5cGUgPT0gT1BfTUVNICYmIGMtPmFkX2J5dGVzICE9IDgpCi0JCW1lbW9wLmFkZHIubWVtID0gKHUzMiltZW1vcC5hZGRyLm1lbTsKKwkJbWVtb3AuYWRkci5tZW0uZWEgPSAodTMyKW1lbW9wLmFkZHIubWVtLmVhOwogCiAJaWYgKG1lbW9wLnR5cGUgPT0gT1BfTUVNICYmIGMtPnJpcF9yZWxhdGl2ZSkKLQkJbWVtb3AuYWRkci5tZW0gKz0gYy0+ZWlwOworCQltZW1vcC5hZGRyLm1lbS5lYSArPSBjLT5laXA7CiAKIAkvKgogCSAqIERlY29kZSBhbmQgZmV0Y2ggdGhlIHNvdXJjZSBvcGVyYW5kOiByZWdpc3RlciwgbWVtb3J5CkBAIC0yODkwLDE0ICsyODIyLDE0IEBACiAJY2FzZSBTcmNTSToKIAkJYy0+c3JjLnR5cGUgPSBPUF9NRU07CiAJCWMtPnNyYy5ieXRlcyA9IChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlczsKLQkJYy0+c3JjLmFkZHIubWVtID0KLQkJCXJlZ2lzdGVyX2FkZHJlc3MoYywgIHNlZ19vdmVycmlkZV9iYXNlKGN0eHQsIG9wcywgYyksCi0JCQkJCSBjLT5yZWdzW1ZDUFVfUkVHU19SU0ldKTsKKwkJYy0+c3JjLmFkZHIubWVtLmVhID0KKwkJCXJlZ2lzdGVyX2FkZHJlc3MoYywgYy0+cmVnc1tWQ1BVX1JFR1NfUlNJXSk7CisJCWMtPnNyYy5hZGRyLm1lbS5zZWcgPSBzZWdfb3ZlcnJpZGUoY3R4dCwgb3BzLCBjKSwKIAkJYy0+c3JjLnZhbCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgU3JjSW1tRkFkZHI6CiAJCWMtPnNyYy50eXBlID0gT1BfSU1NOwotCQljLT5zcmMuYWRkci5tZW0gPSBjLT5laXA7CisJCWMtPnNyYy5hZGRyLm1lbS5lYSA9IGMtPmVpcDsKIAkJYy0+c3JjLmJ5dGVzID0gYy0+b3BfYnl0ZXMgKyAyOwogCQlpbnNuX2ZldGNoX2FycihjLT5zcmMudmFscHRyLCBjLT5zcmMuYnl0ZXMsIGMtPmVpcCk7CiAJCWJyZWFrOwpAQCAtMjk0NCw3ICsyODc2LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBEc3RJbW1VQnl0ZToKIAkJYy0+ZHN0LnR5cGUgPSBPUF9JTU07Ci0JCWMtPmRzdC5hZGRyLm1lbSA9IGMtPmVpcDsKKwkJYy0+ZHN0LmFkZHIubWVtLmVhID0gYy0+ZWlwOwogCQljLT5kc3QuYnl0ZXMgPSAxOwogCQljLT5kc3QudmFsID0gaW5zbl9mZXRjaCh1OCwgMSwgYy0+ZWlwKTsKIAkJYnJlYWs7CkBAIC0yOTY5LDkgKzI5MDEsOSBAQAogCWNhc2UgRHN0REk6CiAJCWMtPmRzdC50eXBlID0gT1BfTUVNOwogCQljLT5kc3QuYnl0ZXMgPSAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDogYy0+b3BfYnl0ZXM7Ci0JCWMtPmRzdC5hZGRyLm1lbSA9Ci0JCQlyZWdpc3Rlcl9hZGRyZXNzKGMsIGVzX2Jhc2UoY3R4dCwgb3BzKSwKLQkJCQkJIGMtPnJlZ3NbVkNQVV9SRUdTX1JESV0pOworCQljLT5kc3QuYWRkci5tZW0uZWEgPQorCQkJcmVnaXN0ZXJfYWRkcmVzcyhjLCBjLT5yZWdzW1ZDUFVfUkVHU19SREldKTsKKwkJYy0+ZHN0LmFkZHIubWVtLnNlZyA9IFZDUFVfU1JFR19FUzsKIAkJYy0+ZHN0LnZhbCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgSW1wbGljaXRPcHM6CkBAIC0zMDIwLDI0ICsyOTUyLDI0IEBACiAJY3R4dC0+ZGVjb2RlLm1lbV9yZWFkLnBvcyA9IDA7CiAKIAlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0ICYmIChjLT5kICYgTm82NCkpIHsKLQkJZW11bGF0ZV91ZChjdHh0KTsKKwkJcmMgPSBlbXVsYXRlX3VkKGN0eHQpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJLyogTE9DSyBwcmVmaXggaXMgYWxsb3dlZCBvbmx5IHdpdGggc29tZSBpbnN0cnVjdGlvbnMgKi8KIAlpZiAoYy0+bG9ja19wcmVmaXggJiYgKCEoYy0+ZCAmIExvY2spIHx8IGMtPmRzdC50eXBlICE9IE9QX01FTSkpIHsKLQkJZW11bGF0ZV91ZChjdHh0KTsKKwkJcmMgPSBlbXVsYXRlX3VkKGN0eHQpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKChjLT5kICYgU3JjTWFzaykgPT0gU3JjTWVtRkFkZHIgJiYgYy0+c3JjLnR5cGUgIT0gT1BfTUVNKSB7Ci0JCWVtdWxhdGVfdWQoY3R4dCk7CisJCXJjID0gZW11bGF0ZV91ZChjdHh0KTsKIAkJZ290byBkb25lOwogCX0KIAogCS8qIFByaXZpbGVnZWQgaW5zdHJ1Y3Rpb24gY2FuIGJlIGV4ZWN1dGVkIG9ubHkgaW4gQ1BMPTAgKi8KIAlpZiAoKGMtPmQgJiBQcml2KSAmJiBvcHMtPmNwbChjdHh0LT52Y3B1KSkgewotCQllbXVsYXRlX2dwKGN0eHQsIDApOworCQlyYyA9IGVtdWxhdGVfZ3AoY3R4dCwgMCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTMwNTAsNyArMjk4Miw3IEBACiAJfQogCiAJaWYgKChjLT5zcmMudHlwZSA9PSBPUF9NRU0pICYmICEoYy0+ZCAmIE5vQWNjZXNzKSkgewotCQlyYyA9IHJlYWRfZW11bGF0ZWQoY3R4dCwgb3BzLCBjLT5zcmMuYWRkci5tZW0sCisJCXJjID0gcmVhZF9lbXVsYXRlZChjdHh0LCBvcHMsIGxpbmVhcihjdHh0LCBjLT5zcmMuYWRkci5tZW0pLAogCQkJCQljLT5zcmMudmFscHRyLCBjLT5zcmMuYnl0ZXMpOwogCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJCWdvdG8gZG9uZTsKQEAgLTMwNTgsNyArMjk5MCw3IEBACiAJfQogCiAJaWYgKGMtPnNyYzIudHlwZSA9PSBPUF9NRU0pIHsKLQkJcmMgPSByZWFkX2VtdWxhdGVkKGN0eHQsIG9wcywgYy0+c3JjMi5hZGRyLm1lbSwKKwkJcmMgPSByZWFkX2VtdWxhdGVkKGN0eHQsIG9wcywgbGluZWFyKGN0eHQsIGMtPnNyYzIuYWRkci5tZW0pLAogCQkJCQkmYy0+c3JjMi52YWwsIGMtPnNyYzIuYnl0ZXMpOwogCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJCWdvdG8gZG9uZTsKQEAgLTMwNzAsNyArMzAwMiw3IEBACiAKIAlpZiAoKGMtPmRzdC50eXBlID09IE9QX01FTSkgJiYgIShjLT5kICYgTW92KSkgewogCQkvKiBvcHRpbWlzYXRpb24gLSBhdm9pZCBzbG93IGVtdWxhdGVkIHJlYWQgaWYgTW92ICovCi0JCXJjID0gcmVhZF9lbXVsYXRlZChjdHh0LCBvcHMsIGMtPmRzdC5hZGRyLm1lbSwKKwkJcmMgPSByZWFkX2VtdWxhdGVkKGN0eHQsIG9wcywgbGluZWFyKGN0eHQsIGMtPmRzdC5hZGRyLm1lbSksCiAJCQkJICAgJmMtPmRzdC52YWwsIGMtPmRzdC5ieXRlcyk7CiAJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQkJZ290byBkb25lOwpAQCAtMzIxNSwxMyArMzE0NywxMyBAQAogCQlicmVhazsKIAljYXNlIDB4OGM6ICAvKiBtb3Ygci9tLCBzcmVnICovCiAJCWlmIChjLT5tb2RybV9yZWcgPiBWQ1BVX1NSRUdfR1MpIHsKLQkJCWVtdWxhdGVfdWQoY3R4dCk7CisJCQlyYyA9IGVtdWxhdGVfdWQoY3R4dCk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJYy0+ZHN0LnZhbCA9IG9wcy0+Z2V0X3NlZ21lbnRfc2VsZWN0b3IoYy0+bW9kcm1fcmVnLCBjdHh0LT52Y3B1KTsKIAkJYnJlYWs7CiAJY2FzZSAweDhkOiAvKiBsZWEgcjE2L3IzMiwgbSAqLwotCQljLT5kc3QudmFsID0gYy0+c3JjLmFkZHIubWVtOworCQljLT5kc3QudmFsID0gYy0+c3JjLmFkZHIubWVtLmVhOwogCQlicmVhazsKIAljYXNlIDB4OGU6IHsgLyogbW92IHNlZywgci9tMTYgKi8KIAkJdWludDE2X3Qgc2VsOwpAQCAtMzIzMCw3ICszMTYyLDcgQEAKIAogCQlpZiAoYy0+bW9kcm1fcmVnID09IFZDUFVfU1JFR19DUyB8fAogCQkgICAgYy0+bW9kcm1fcmVnID4gVkNQVV9TUkVHX0dTKSB7Ci0JCQllbXVsYXRlX3VkKGN0eHQpOworCQkJcmMgPSBlbXVsYXRlX3VkKGN0eHQpOwogCQkJZ290byBkb25lOwogCQl9CiAKQEAgLTMyNjgsNyArMzIwMCw2IEBACiAJCWJyZWFrOwogCWNhc2UgMHhhNiAuLi4gMHhhNzoJLyogY21wcyAqLwogCQljLT5kc3QudHlwZSA9IE9QX05PTkU7IC8qIERpc2FibGUgd3JpdGViYWNrLiAqLwotCQlEUFJJTlRGKCJjbXBzOiBtZW0xPTB4JXAgbWVtMj0weCVwXG4iLCBjLT5zcmMuYWRkci5tZW0sIGMtPmRzdC5hZGRyLm1lbSk7CiAJCWdvdG8gY21wOwogCWNhc2UgMHhhOCAuLi4gMHhhOToJLyogdGVzdCBheCwgaW1tICovCiAJCWdvdG8gdGVzdDsKQEAgLTMzNjMsNyArMzI5NCw3IEBACiAJZG9faW9faW46CiAJCWMtPmRzdC5ieXRlcyA9IG1pbihjLT5kc3QuYnl0ZXMsIDR1KTsKIAkJaWYgKCFlbXVsYXRvcl9pb19wZXJtaXRlZChjdHh0LCBvcHMsIGMtPnNyYy52YWwsIGMtPmRzdC5ieXRlcykpIHsKLQkJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7CisJCQlyYyA9IGVtdWxhdGVfZ3AoY3R4dCwgMCk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJaWYgKCFwaW9faW5fZW11bGF0ZWQoY3R4dCwgb3BzLCBjLT5kc3QuYnl0ZXMsIGMtPnNyYy52YWwsCkBAIC0zMzc3LDcgKzMzMDgsNyBAQAogCQljLT5zcmMuYnl0ZXMgPSBtaW4oYy0+c3JjLmJ5dGVzLCA0dSk7CiAJCWlmICghZW11bGF0b3JfaW9fcGVybWl0ZWQoY3R4dCwgb3BzLCBjLT5kc3QudmFsLAogCQkJCQkgIGMtPnNyYy5ieXRlcykpIHsKLQkJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7CisJCQlyYyA9IGVtdWxhdGVfZ3AoY3R4dCwgMCk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJb3BzLT5waW9fb3V0X2VtdWxhdGVkKGMtPnNyYy5ieXRlcywgYy0+ZHN0LnZhbCwKQEAgLTM0MDIsMTQgKzMzMzMsMTQgQEAKIAkJYnJlYWs7CiAJY2FzZSAweGZhOiAvKiBjbGkgKi8KIAkJaWYgKGVtdWxhdG9yX2JhZF9pb3BsKGN0eHQsIG9wcykpIHsKLQkJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7CisJCQlyYyA9IGVtdWxhdGVfZ3AoY3R4dCwgMCk7CiAJCQlnb3RvIGRvbmU7CiAJCX0gZWxzZQogCQkJY3R4dC0+ZWZsYWdzICY9IH5YODZfRUZMQUdTX0lGOwogCQlicmVhazsKIAljYXNlIDB4ZmI6IC8qIHN0aSAqLwogCQlpZiAoZW11bGF0b3JfYmFkX2lvcGwoY3R4dCwgb3BzKSkgewotCQkJZW11bGF0ZV9ncChjdHh0LCAwKTsKKwkJCXJjID0gZW11bGF0ZV9ncChjdHh0LCAwKTsKIAkJCWdvdG8gZG9uZTsKIAkJfSBlbHNlIHsKIAkJCWN0eHQtPmludGVycnVwdGliaWxpdHkgPSBLVk1fWDg2X1NIQURPV19JTlRfU1RJOwpAQCAtMzQ0OSwxMSArMzM4MCwxMSBAQAogCWMtPmRzdC50eXBlID0gc2F2ZWRfZHN0X3R5cGU7CiAKIAlpZiAoKGMtPmQgJiBTcmNNYXNrKSA9PSBTcmNTSSkKLQkJc3RyaW5nX2FkZHJfaW5jKGN0eHQsIHNlZ19vdmVycmlkZV9iYXNlKGN0eHQsIG9wcywgYyksCisJCXN0cmluZ19hZGRyX2luYyhjdHh0LCBzZWdfb3ZlcnJpZGUoY3R4dCwgb3BzLCBjKSwKIAkJCQlWQ1BVX1JFR1NfUlNJLCAmYy0+c3JjKTsKIAogCWlmICgoYy0+ZCAmIERzdE1hc2spID09IERzdERJKQotCQlzdHJpbmdfYWRkcl9pbmMoY3R4dCwgZXNfYmFzZShjdHh0LCBvcHMpLCBWQ1BVX1JFR1NfUkRJLAorCQlzdHJpbmdfYWRkcl9pbmMoY3R4dCwgVkNQVV9TUkVHX0VTLCBWQ1BVX1JFR1NfUkRJLAogCQkJCSZjLT5kc3QpOwogCiAJaWYgKGMtPnJlcF9wcmVmaXggJiYgKGMtPmQgJiBTdHJpbmcpKSB7CkBAIC0zNDgyLDYgKzM0MTMsOCBAQAogCWN0eHQtPmVpcCA9IGMtPmVpcDsKIAogZG9uZToKKwlpZiAocmMgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpCisJCWN0eHQtPmhhdmVfZXhjZXB0aW9uID0gdHJ1ZTsKIAlyZXR1cm4gKHJjID09IFg4NkVNVUxfVU5IQU5ETEVBQkxFKSA/IEVNVUxBVElPTl9GQUlMRUQgOiBFTVVMQVRJT05fT0s7CiAKIHR3b2J5dGVfaW5zbjoKQEAgLTM1NDQsOSArMzQ3NywxMSBAQAogCQkJYnJlYWs7CiAJCWNhc2UgNTogLyogbm90IGRlZmluZWQgKi8KIAkJCWVtdWxhdGVfdWQoY3R4dCk7CisJCQlyYyA9IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwogCQkJZ290byBkb25lOwogCQljYXNlIDc6IC8qIGludmxwZyovCi0JCQllbXVsYXRlX2ludmxwZyhjdHh0LT52Y3B1LCBjLT5zcmMuYWRkci5tZW0pOworCQkJZW11bGF0ZV9pbnZscGcoY3R4dC0+dmNwdSwKKwkJCQkgICAgICAgbGluZWFyKGN0eHQsIGMtPnNyYy5hZGRyLm1lbSkpOwogCQkJLyogRGlzYWJsZSB3cml0ZWJhY2suICovCiAJCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CiAJCQlicmVhazsKQEAgLTM1NzMsNiArMzUwOCw3IEBACiAJCWNhc2UgNSAuLi4gNzoKIAkJY2FzZSA5IC4uLiAxNToKIAkJCWVtdWxhdGVfdWQoY3R4dCk7CisJCQlyYyA9IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwogCQkJZ290byBkb25lOwogCQl9CiAJCWMtPmRzdC52YWwgPSBvcHMtPmdldF9jcihjLT5tb2RybV9yZWcsIGN0eHQtPnZjcHUpOwpAQCAtMzU4MSw2ICszNTE3LDcgQEAKIAkJaWYgKChvcHMtPmdldF9jcig0LCBjdHh0LT52Y3B1KSAmIFg4Nl9DUjRfREUpICYmCiAJCSAgICAoYy0+bW9kcm1fcmVnID09IDQgfHwgYy0+bW9kcm1fcmVnID09IDUpKSB7CiAJCQllbXVsYXRlX3VkKGN0eHQpOworCQkJcmMgPSBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCQlvcHMtPmdldF9kcihjLT5tb2RybV9yZWcsICZjLT5kc3QudmFsLCBjdHh0LT52Y3B1KTsKQEAgLTM1ODgsNiArMzUyNSw3IEBACiAJY2FzZSAweDIyOiAvKiBtb3YgcmVnLCBjciAqLwogCQlpZiAob3BzLT5zZXRfY3IoYy0+bW9kcm1fcmVnLCBjLT5zcmMudmFsLCBjdHh0LT52Y3B1KSkgewogCQkJZW11bGF0ZV9ncChjdHh0LCAwKTsKKwkJCXJjID0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwpAQCAtMzU5Niw2ICszNTM0LDcgQEAKIAkJaWYgKChvcHMtPmdldF9jcig0LCBjdHh0LT52Y3B1KSAmIFg4Nl9DUjRfREUpICYmCiAJCSAgICAoYy0+bW9kcm1fcmVnID09IDQgfHwgYy0+bW9kcm1fcmVnID09IDUpKSB7CiAJCQllbXVsYXRlX3VkKGN0eHQpOworCQkJcmMgPSBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCkBAIC0zNjA0LDYgKzM1NDMsNyBAQAogCQkJCSB+MFVMTCA6IH4wVSksIGN0eHQtPnZjcHUpIDwgMCkgewogCQkJLyogI1VEIGNvbmRpdGlvbiBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgdGhlIGNvZGUgYWJvdmUgKi8KIAkJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7CisJCQlyYyA9IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwogCQkJZ290byBkb25lOwogCQl9CiAKQEAgLTM2MTUsNiArMzU1NSw3IEBACiAJCQl8ICgodTY0KWMtPnJlZ3NbVkNQVV9SRUdTX1JEWF0gPDwgMzIpOwogCQlpZiAob3BzLT5zZXRfbXNyKGN0eHQtPnZjcHUsIGMtPnJlZ3NbVkNQVV9SRUdTX1JDWF0sIG1zcl9kYXRhKSkgewogCQkJZW11bGF0ZV9ncChjdHh0LCAwKTsKKwkJCXJjID0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJcmMgPSBYODZFTVVMX0NPTlRJTlVFOwpAQCAtMzYyMyw2ICszNTY0LDcgQEAKIAkJLyogcmRtc3IgKi8KIAkJaWYgKG9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBjLT5yZWdzW1ZDUFVfUkVHU19SQ1hdLCAmbXNyX2RhdGEpKSB7CiAJCQllbXVsYXRlX2dwKGN0eHQsIDApOworCQkJcmMgPSBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAkJCWdvdG8gZG9uZTsKIAkJfSBlbHNlIHsKIAkJCWMtPnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSAodTMyKW1zcl9kYXRhOwpAQCAtMzc4NSw2ICszNzI3LDUgQEAKIAlnb3RvIHdyaXRlYmFjazsKIAogY2Fubm90X2VtdWxhdGU6Ci0JRFBSSU5URigiQ2Fubm90IGVtdWxhdGUgJTAyeFxuIiwgYy0+Yik7CiAJcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9jYWNoZV9yZWdzLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2NhY2hlX3JlZ3MuaAppbmRleCA5NzViYjQ1Li4zMzc3ZDUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2NhY2hlX3JlZ3MuaAorKysgYi9hcmNoL3g4Ni9rdm0va3ZtX2NhY2hlX3JlZ3MuaApAQCAtNzMsNiArNzMsMTMgQEAKIAlyZXR1cm4gdmNwdS0+YXJjaC5jcjQgJiBtYXNrOwogfQogCitzdGF0aWMgaW5saW5lIHVsb25nIGt2bV9yZWFkX2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaWYgKCF0ZXN0X2JpdChWQ1BVX0VYUkVHX0NSMywgKHVsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCkpCisJCWt2bV94ODZfb3BzLT5kZWNhY2hlX2NyMyh2Y3B1KTsKKwlyZXR1cm4gdmNwdS0+YXJjaC5jcjM7Cit9CisKIHN0YXRpYyBpbmxpbmUgdWxvbmcga3ZtX3JlYWRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlyZXR1cm4ga3ZtX3JlYWRfY3I0X2JpdHModmNwdSwgfjBVTCk7CkBAIC04NCw0ICs5MSwxOSBAQAogCQl8ICgodTY0KShrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkRYKSAmIC0xdSkgPDwgMzIpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdmNwdS0+YXJjaC5oZmxhZ3MgfD0gSEZfR1VFU1RfTUFTSzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxlYXZlX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZjcHUtPmFyY2guaGZsYWdzICY9IH5IRl9HVUVTVF9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHZjcHUtPmFyY2guaGZsYWdzICYgSEZfR1VFU1RfTUFTSzsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCmluZGV4IDQxM2Y4OTcuLjkzY2Y5ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9sYXBpYy5jCisrKyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCkBAIC0yNzcsNyArMjc3LDggQEAKIAogCWlmIChvbGRfcHByICE9IHBwcikgewogCQlhcGljX3NldF9yZWcoYXBpYywgQVBJQ19QUk9DUFJJLCBwcHIpOwotCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfRVZFTlQsIGFwaWMtPnZjcHUpOworCQlpZiAocHByIDwgb2xkX3BwcikKKwkJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9FVkVOVCwgYXBpYy0+dmNwdSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11LmMKaW5kZXggZmJiMDRhZS4uOWNhZmJiNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS5jCisrKyBiL2FyY2gveDg2L2t2bS9tbXUuYwpAQCAtMTgsOSArMTgsMTEgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgImlycS5oIgogI2luY2x1ZGUgIm1tdS5oIgogI2luY2x1ZGUgIng4Ni5oIgogI2luY2x1ZGUgImt2bV9jYWNoZV9yZWdzLmgiCisjaW5jbHVkZSAieDg2LmgiCiAKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0xOTQsNyArMTk2LDYgQEAKIAogc3RhdGljIHU2NCBfX3JlYWRfbW9zdGx5IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlOwogc3RhdGljIHU2NCBfX3JlYWRfbW9zdGx5IHNoYWRvd19ub3RyYXBfbm9ucHJlc2VudF9wdGU7Ci1zdGF0aWMgdTY0IF9fcmVhZF9tb3N0bHkgc2hhZG93X2Jhc2VfcHJlc2VudF9wdGU7CiBzdGF0aWMgdTY0IF9fcmVhZF9tb3N0bHkgc2hhZG93X254X21hc2s7CiBzdGF0aWMgdTY0IF9fcmVhZF9tb3N0bHkgc2hhZG93X3hfbWFzazsJLyogbXV0dWFsIGV4Y2x1c2l2ZSB3aXRoIG54X21hc2sgKi8KIHN0YXRpYyB1NjQgX19yZWFkX21vc3RseSBzaGFkb3dfdXNlcl9tYXNrOwpAQCAtMjEzLDEyICsyMTQsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX21tdV9zZXRfbm9ucHJlc2VudF9wdGVzKTsKIAotdm9pZCBrdm1fbW11X3NldF9iYXNlX3B0ZXModTY0IGJhc2VfcHRlKQotewotCXNoYWRvd19iYXNlX3ByZXNlbnRfcHRlID0gYmFzZV9wdGU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fbW11X3NldF9iYXNlX3B0ZXMpOwotCiB2b2lkIGt2bV9tbXVfc2V0X21hc2tfcHRlcyh1NjQgdXNlcl9tYXNrLCB1NjQgYWNjZXNzZWRfbWFzaywKIAkJdTY0IGRpcnR5X21hc2ssIHU2NCBueF9tYXNrLCB1NjQgeF9tYXNrKQogewpAQCAtNDgyLDQ2ICs0NzcsNDYgQEAKIH0KIAogLyoKLSAqIFJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgbGFyZ2VwYWdlIHdyaXRlIGNvdW50IGZvciBhIGdpdmVuCi0gKiBnZm4sIGhhbmRsaW5nIHNsb3RzIHRoYXQgYXJlIG5vdCBsYXJnZSBwYWdlIGFsaWduZWQuCisgKiBSZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGxhcmdlIHBhZ2UgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gZ2ZuLAorICogaGFuZGxpbmcgc2xvdHMgdGhhdCBhcmUgbm90IGxhcmdlIHBhZ2UgYWxpZ25lZC4KICAqLwotc3RhdGljIGludCAqc2xvdF9sYXJnZXBhZ2VfaWR4KGdmbl90IGdmbiwKLQkJCSAgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAotCQkJICAgICAgIGludCBsZXZlbCkKK3N0YXRpYyBzdHJ1Y3Qga3ZtX2xwYWdlX2luZm8gKmxwYWdlX2luZm9fc2xvdChnZm5fdCBnZm4sCisJCQkJCSAgICAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCisJCQkJCSAgICAgIGludCBsZXZlbCkKIHsKIAl1bnNpZ25lZCBsb25nIGlkeDsKIAogCWlkeCA9IChnZm4gPj4gS1ZNX0hQQUdFX0dGTl9TSElGVChsZXZlbCkpIC0KIAkgICAgICAoc2xvdC0+YmFzZV9nZm4gPj4gS1ZNX0hQQUdFX0dGTl9TSElGVChsZXZlbCkpOwotCXJldHVybiAmc2xvdC0+bHBhZ2VfaW5mb1tsZXZlbCAtIDJdW2lkeF0ud3JpdGVfY291bnQ7CisJcmV0dXJuICZzbG90LT5scGFnZV9pbmZvW2xldmVsIC0gMl1baWR4XTsKIH0KIAogc3RhdGljIHZvaWQgYWNjb3VudF9zaGFkb3dlZChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKIHsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwotCWludCAqd3JpdGVfY291bnQ7CisJc3RydWN0IGt2bV9scGFnZV9pbmZvICpsaW5mbzsKIAlpbnQgaTsKIAogCXNsb3QgPSBnZm5fdG9fbWVtc2xvdChrdm0sIGdmbik7CiAJZm9yIChpID0gUFRfRElSRUNUT1JZX0xFVkVMOwogCSAgICAgaSA8IFBUX1BBR0VfVEFCTEVfTEVWRUwgKyBLVk1fTlJfUEFHRV9TSVpFUzsgKytpKSB7Ci0JCXdyaXRlX2NvdW50ICAgPSBzbG90X2xhcmdlcGFnZV9pZHgoZ2ZuLCBzbG90LCBpKTsKLQkJKndyaXRlX2NvdW50ICs9IDE7CisJCWxpbmZvID0gbHBhZ2VfaW5mb19zbG90KGdmbiwgc2xvdCwgaSk7CisJCWxpbmZvLT53cml0ZV9jb3VudCArPSAxOwogCX0KIH0KIAogc3RhdGljIHZvaWQgdW5hY2NvdW50X3NoYWRvd2VkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogewogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7Ci0JaW50ICp3cml0ZV9jb3VudDsKKwlzdHJ1Y3Qga3ZtX2xwYWdlX2luZm8gKmxpbmZvOwogCWludCBpOwogCiAJc2xvdCA9IGdmbl90b19tZW1zbG90KGt2bSwgZ2ZuKTsKIAlmb3IgKGkgPSBQVF9ESVJFQ1RPUllfTEVWRUw7CiAJICAgICBpIDwgUFRfUEFHRV9UQUJMRV9MRVZFTCArIEtWTV9OUl9QQUdFX1NJWkVTOyArK2kpIHsKLQkJd3JpdGVfY291bnQgICA9IHNsb3RfbGFyZ2VwYWdlX2lkeChnZm4sIHNsb3QsIGkpOwotCQkqd3JpdGVfY291bnQgLT0gMTsKLQkJV0FSTl9PTigqd3JpdGVfY291bnQgPCAwKTsKKwkJbGluZm8gPSBscGFnZV9pbmZvX3Nsb3QoZ2ZuLCBzbG90LCBpKTsKKwkJbGluZm8tPndyaXRlX2NvdW50IC09IDE7CisJCVdBUk5fT04obGluZm8tPndyaXRlX2NvdW50IDwgMCk7CiAJfQogfQogCkBAIC01MzAsMTIgKzUyNSwxMiBAQAogCQkJCWludCBsZXZlbCkKIHsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwotCWludCAqbGFyZ2VwYWdlX2lkeDsKKwlzdHJ1Y3Qga3ZtX2xwYWdlX2luZm8gKmxpbmZvOwogCiAJc2xvdCA9IGdmbl90b19tZW1zbG90KGt2bSwgZ2ZuKTsKIAlpZiAoc2xvdCkgewotCQlsYXJnZXBhZ2VfaWR4ID0gc2xvdF9sYXJnZXBhZ2VfaWR4KGdmbiwgc2xvdCwgbGV2ZWwpOwotCQlyZXR1cm4gKmxhcmdlcGFnZV9pZHg7CisJCWxpbmZvID0gbHBhZ2VfaW5mb19zbG90KGdmbiwgc2xvdCwgbGV2ZWwpOworCQlyZXR1cm4gbGluZm8tPndyaXRlX2NvdW50OwogCX0KIAogCXJldHVybiAxOwpAQCAtNTkwLDE2ICs1ODUsMTUgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nICpnZm5fdG9fcm1hcChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgaW50IGxldmVsKQogewogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7Ci0JdW5zaWduZWQgbG9uZyBpZHg7CisJc3RydWN0IGt2bV9scGFnZV9pbmZvICpsaW5mbzsKIAogCXNsb3QgPSBnZm5fdG9fbWVtc2xvdChrdm0sIGdmbik7CiAJaWYgKGxpa2VseShsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKSkKIAkJcmV0dXJuICZzbG90LT5ybWFwW2dmbiAtIHNsb3QtPmJhc2VfZ2ZuXTsKIAotCWlkeCA9IChnZm4gPj4gS1ZNX0hQQUdFX0dGTl9TSElGVChsZXZlbCkpIC0KLQkJKHNsb3QtPmJhc2VfZ2ZuID4+IEtWTV9IUEFHRV9HRk5fU0hJRlQobGV2ZWwpKTsKKwlsaW5mbyA9IGxwYWdlX2luZm9fc2xvdChnZm4sIHNsb3QsIGxldmVsKTsKIAotCXJldHVybiAmc2xvdC0+bHBhZ2VfaW5mb1tsZXZlbCAtIDJdW2lkeF0ucm1hcF9wZGU7CisJcmV0dXJuICZsaW5mby0+cm1hcF9wZGU7CiB9CiAKIC8qCkBAIC04ODcsMTkgKzg4MSwxNiBAQAogCQllbmQgPSBzdGFydCArIChtZW1zbG90LT5ucGFnZXMgPDwgUEFHRV9TSElGVCk7CiAJCWlmIChodmEgPj0gc3RhcnQgJiYgaHZhIDwgZW5kKSB7CiAJCQlnZm5fdCBnZm5fb2Zmc2V0ID0gKGh2YSAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUOworCQkJZ2ZuX3QgZ2ZuID0gbWVtc2xvdC0+YmFzZV9nZm4gKyBnZm5fb2Zmc2V0OwogCiAJCQlyZXQgPSBoYW5kbGVyKGt2bSwgJm1lbXNsb3QtPnJtYXBbZ2ZuX29mZnNldF0sIGRhdGEpOwogCiAJCQlmb3IgKGogPSAwOyBqIDwgS1ZNX05SX1BBR0VfU0laRVMgLSAxOyArK2opIHsKLQkJCQl1bnNpZ25lZCBsb25nIGlkeDsKLQkJCQlpbnQgc2g7CisJCQkJc3RydWN0IGt2bV9scGFnZV9pbmZvICpsaW5mbzsKIAotCQkJCXNoID0gS1ZNX0hQQUdFX0dGTl9TSElGVChQVF9ESVJFQ1RPUllfTEVWRUwraik7Ci0JCQkJaWR4ID0gKChtZW1zbG90LT5iYXNlX2dmbitnZm5fb2Zmc2V0KSA+PiBzaCkgLQotCQkJCQkobWVtc2xvdC0+YmFzZV9nZm4gPj4gc2gpOwotCQkJCXJldCB8PSBoYW5kbGVyKGt2bSwKLQkJCQkJJm1lbXNsb3QtPmxwYWdlX2luZm9bal1baWR4XS5ybWFwX3BkZSwKLQkJCQkJZGF0YSk7CisJCQkJbGluZm8gPSBscGFnZV9pbmZvX3Nsb3QoZ2ZuLCBtZW1zbG90LAorCQkJCQkJCVBUX0RJUkVDVE9SWV9MRVZFTCArIGopOworCQkJCXJldCB8PSBoYW5kbGVyKGt2bSwgJmxpbmZvLT5ybWFwX3BkZSwgZGF0YSk7CiAJCQl9CiAJCQl0cmFjZV9rdm1fYWdlX3BhZ2UoaHZhLCBtZW1zbG90LCByZXQpOwogCQkJcmV0dmFsIHw9IHJldDsKQEAgLTExNjEsNyArMTE1Miw3IEBACiB9CiAKIHN0YXRpYyBpbnQgbm9ucGFnaW5nX3N5bmNfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkgICAgICAgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIGJvb2wgY2xlYXJfdW5zeW5jKQorCQkJICAgICAgIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogewogCXJldHVybiAxOwogfQpAQCAtMTI5MSw3ICsxMjgyLDcgQEAKIAlpZiAoY2xlYXJfdW5zeW5jKQogCQlrdm1fdW5saW5rX3Vuc3luY19wYWdlKHZjcHUtPmt2bSwgc3ApOwogCi0JaWYgKHZjcHUtPmFyY2gubW11LnN5bmNfcGFnZSh2Y3B1LCBzcCwgY2xlYXJfdW5zeW5jKSkgeworCWlmICh2Y3B1LT5hcmNoLm1tdS5zeW5jX3BhZ2UodmNwdSwgc3ApKSB7CiAJCWt2bV9tbXVfcHJlcGFyZV96YXBfcGFnZSh2Y3B1LT5rdm0sIHNwLCBpbnZhbGlkX2xpc3QpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0xMzMyLDEyICsxMzIzLDEyIEBACiAJCQljb250aW51ZTsKIAogCQlXQVJOX09OKHMtPnJvbGUubGV2ZWwgIT0gUFRfUEFHRV9UQUJMRV9MRVZFTCk7CisJCWt2bV91bmxpbmtfdW5zeW5jX3BhZ2UodmNwdS0+a3ZtLCBzKTsKIAkJaWYgKChzLT5yb2xlLmNyNF9wYWUgIT0gISFpc19wYWUodmNwdSkpIHx8Ci0JCQkodmNwdS0+YXJjaC5tbXUuc3luY19wYWdlKHZjcHUsIHMsIHRydWUpKSkgeworCQkJKHZjcHUtPmFyY2gubW11LnN5bmNfcGFnZSh2Y3B1LCBzKSkpIHsKIAkJCWt2bV9tbXVfcHJlcGFyZV96YXBfcGFnZSh2Y3B1LT5rdm0sIHMsICZpbnZhbGlkX2xpc3QpOwogCQkJY29udGludWU7CiAJCX0KLQkJa3ZtX3VubGlua191bnN5bmNfcGFnZSh2Y3B1LT5rdm0sIHMpOwogCQlmbHVzaCA9IHRydWU7CiAJfQogCkBAIC0xOTYzLDkgKzE5NTQsOSBAQAogCQkgICAgdW5zaWduZWQgcHRlX2FjY2VzcywgaW50IHVzZXJfZmF1bHQsCiAJCSAgICBpbnQgd3JpdGVfZmF1bHQsIGludCBkaXJ0eSwgaW50IGxldmVsLAogCQkgICAgZ2ZuX3QgZ2ZuLCBwZm5fdCBwZm4sIGJvb2wgc3BlY3VsYXRpdmUsCi0JCSAgICBib29sIGNhbl91bnN5bmMsIGJvb2wgcmVzZXRfaG9zdF9wcm90ZWN0aW9uKQorCQkgICAgYm9vbCBjYW5fdW5zeW5jLCBib29sIGhvc3Rfd3JpdGFibGUpCiB7Ci0JdTY0IHNwdGU7CisJdTY0IHNwdGUsIGVudHJ5ID0gKnNwdGVwOwogCWludCByZXQgPSAwOwogCiAJLyoKQEAgLTE5NzMsNyArMTk2NCw3IEBACiAJICogd2hldGhlciB0aGUgZ3Vlc3QgYWN0dWFsbHkgdXNlZCB0aGUgcHRlIChpbiBvcmRlciB0byBkZXRlY3QKIAkgKiBkZW1hbmQgcGFnaW5nKS4KIAkgKi8KLQlzcHRlID0gc2hhZG93X2Jhc2VfcHJlc2VudF9wdGU7CisJc3B0ZSA9IFBUX1BSRVNFTlRfTUFTSzsKIAlpZiAoIXNwZWN1bGF0aXZlKQogCQlzcHRlIHw9IHNoYWRvd19hY2Nlc3NlZF9tYXNrOwogCWlmICghZGlydHkpCkBAIC0xOTkwLDggKzE5ODEsMTAgQEAKIAkJc3B0ZSB8PSBrdm1feDg2X29wcy0+Z2V0X210X21hc2sodmNwdSwgZ2ZuLAogCQkJa3ZtX2lzX21taW9fcGZuKHBmbikpOwogCi0JaWYgKHJlc2V0X2hvc3RfcHJvdGVjdGlvbikKKwlpZiAoaG9zdF93cml0YWJsZSkKIAkJc3B0ZSB8PSBTUFRFX0hPU1RfV1JJVEVBQkxFOworCWVsc2UKKwkJcHRlX2FjY2VzcyAmPSB+QUNDX1dSSVRFX01BU0s7CiAKIAlzcHRlIHw9ICh1NjQpcGZuIDw8IFBBR0VfU0hJRlQ7CiAKQEAgLTIwMzYsNiArMjAyOSwxNCBAQAogCiBzZXRfcHRlOgogCXVwZGF0ZV9zcHRlKHNwdGVwLCBzcHRlKTsKKwkvKgorCSAqIElmIHdlIG92ZXJ3cml0ZSBhIHdyaXRhYmxlIHNwdGUgd2l0aCBhIHJlYWQtb25seSBvbmUgd2UKKwkgKiBzaG91bGQgZmx1c2ggcmVtb3RlIFRMQnMuIE90aGVyd2lzZSBybWFwX3dyaXRlX3Byb3RlY3QKKwkgKiB3aWxsIGZpbmQgYSByZWFkLW9ubHkgc3B0ZSwgZXZlbiB0aG91Z2ggdGhlIHdyaXRhYmxlIHNwdGUKKwkgKiBtaWdodCBiZSBjYWNoZWQgb24gYSBDUFUncyBUTEIuCisJICovCisJaWYgKGlzX3dyaXRhYmxlX3B0ZShlbnRyeSkgJiYgIWlzX3dyaXRhYmxlX3B0ZSgqc3B0ZXApKQorCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnModmNwdS0+a3ZtKTsKIGRvbmU6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTIwNDUsNyArMjA0Niw3IEBACiAJCQkgaW50IHVzZXJfZmF1bHQsIGludCB3cml0ZV9mYXVsdCwgaW50IGRpcnR5LAogCQkJIGludCAqcHR3cml0ZSwgaW50IGxldmVsLCBnZm5fdCBnZm4sCiAJCQkgcGZuX3QgcGZuLCBib29sIHNwZWN1bGF0aXZlLAotCQkJIGJvb2wgcmVzZXRfaG9zdF9wcm90ZWN0aW9uKQorCQkJIGJvb2wgaG9zdF93cml0YWJsZSkKIHsKIAlpbnQgd2FzX3JtYXBwZWQgPSAwOwogCWludCBybWFwX2NvdW50OwpAQCAtMjA4MCw3ICsyMDgxLDcgQEAKIAogCWlmIChzZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgcHRlX2FjY2VzcywgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCiAJCSAgICAgIGRpcnR5LCBsZXZlbCwgZ2ZuLCBwZm4sIHNwZWN1bGF0aXZlLCB0cnVlLAotCQkgICAgICByZXNldF9ob3N0X3Byb3RlY3Rpb24pKSB7CisJCSAgICAgIGhvc3Rfd3JpdGFibGUpKSB7CiAJCWlmICh3cml0ZV9mYXVsdCkKIAkJCSpwdHdyaXRlID0gMTsKIAkJa3ZtX21tdV9mbHVzaF90bGIodmNwdSk7CkBAIC0yMjExLDcgKzIyMTIsOCBAQAogfQogCiBzdGF0aWMgaW50IF9fZGlyZWN0X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHYsIGludCB3cml0ZSwKLQkJCWludCBsZXZlbCwgZ2ZuX3QgZ2ZuLCBwZm5fdCBwZm4pCisJCQlpbnQgbWFwX3dyaXRhYmxlLCBpbnQgbGV2ZWwsIGdmbl90IGdmbiwgcGZuX3QgcGZuLAorCQkJYm9vbCBwcmVmYXVsdCkKIHsKIAlzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yIGl0ZXJhdG9yOwogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwpAQCAtMjIyMCw5ICsyMjIyLDExIEBACiAKIAlmb3JfZWFjaF9zaGFkb3dfZW50cnkodmNwdSwgKHU2NClnZm4gPDwgUEFHRV9TSElGVCwgaXRlcmF0b3IpIHsKIAkJaWYgKGl0ZXJhdG9yLmxldmVsID09IGxldmVsKSB7Ci0JCQltbXVfc2V0X3NwdGUodmNwdSwgaXRlcmF0b3Iuc3B0ZXAsIEFDQ19BTEwsIEFDQ19BTEwsCisJCQl1bnNpZ25lZCBwdGVfYWNjZXNzID0gQUNDX0FMTDsKKworCQkJbW11X3NldF9zcHRlKHZjcHUsIGl0ZXJhdG9yLnNwdGVwLCBBQ0NfQUxMLCBwdGVfYWNjZXNzLAogCQkJCSAgICAgMCwgd3JpdGUsIDEsICZwdF93cml0ZSwKLQkJCQkgICAgIGxldmVsLCBnZm4sIHBmbiwgZmFsc2UsIHRydWUpOworCQkJCSAgICAgbGV2ZWwsIGdmbiwgcGZuLCBwcmVmYXVsdCwgbWFwX3dyaXRhYmxlKTsKIAkJCWRpcmVjdF9wdGVfcHJlZmV0Y2godmNwdSwgaXRlcmF0b3Iuc3B0ZXApOwogCQkJKyt2Y3B1LT5zdGF0LnBmX2ZpeGVkOwogCQkJYnJlYWs7CkBAIC0yMjc3LDEyICsyMjgxLDE3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgbm9ucGFnaW5nX21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IHYsIGludCB3cml0ZSwgZ2ZuX3QgZ2ZuKQorc3RhdGljIGJvb2wgdHJ5X2FzeW5jX3BmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwcmVmYXVsdCwgZ2ZuX3QgZ2ZuLAorCQkJIGd2YV90IGd2YSwgcGZuX3QgKnBmbiwgYm9vbCB3cml0ZSwgYm9vbCAqd3JpdGFibGUpOworCitzdGF0aWMgaW50IG5vbnBhZ2luZ19tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCB2LCBpbnQgd3JpdGUsIGdmbl90IGdmbiwKKwkJCSBib29sIHByZWZhdWx0KQogewogCWludCByOwogCWludCBsZXZlbDsKIAlwZm5fdCBwZm47CiAJdW5zaWduZWQgbG9uZyBtbXVfc2VxOworCWJvb2wgbWFwX3dyaXRhYmxlOwogCiAJbGV2ZWwgPSBtYXBwaW5nX2xldmVsKHZjcHUsIGdmbik7CiAKQEAgLTIyOTcsNyArMjMwNiw5IEBACiAKIAltbXVfc2VxID0gdmNwdS0+a3ZtLT5tbXVfbm90aWZpZXJfc2VxOwogCXNtcF9ybWIoKTsKLQlwZm4gPSBnZm5fdG9fcGZuKHZjcHUtPmt2bSwgZ2ZuKTsKKworCWlmICh0cnlfYXN5bmNfcGYodmNwdSwgcHJlZmF1bHQsIGdmbiwgdiwgJnBmbiwgd3JpdGUsICZtYXBfd3JpdGFibGUpKQorCQlyZXR1cm4gMDsKIAogCS8qIG1taW8gKi8KIAlpZiAoaXNfZXJyb3JfcGZuKHBmbikpCkBAIC0yMzA3LDcgKzIzMTgsOCBAQAogCWlmIChtbXVfbm90aWZpZXJfcmV0cnkodmNwdSwgbW11X3NlcSkpCiAJCWdvdG8gb3V0X3VubG9jazsKIAlrdm1fbW11X2ZyZWVfc29tZV9wYWdlcyh2Y3B1KTsKLQlyID0gX19kaXJlY3RfbWFwKHZjcHUsIHYsIHdyaXRlLCBsZXZlbCwgZ2ZuLCBwZm4pOworCXIgPSBfX2RpcmVjdF9tYXAodmNwdSwgdiwgd3JpdGUsIG1hcF93cml0YWJsZSwgbGV2ZWwsIGdmbiwgcGZuLAorCQkJIHByZWZhdWx0KTsKIAlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAKIApAQCAtMjUzMCw2ICsyNTQyLDcgQEAKIAkJaHBhX3Qgcm9vdCA9IHZjcHUtPmFyY2gubW11LnJvb3RfaHBhOwogCQlzcCA9IHBhZ2VfaGVhZGVyKHJvb3QpOwogCQltbXVfc3luY19jaGlsZHJlbih2Y3B1LCBzcCk7CisJCXRyYWNlX2t2bV9tbXVfYXVkaXQodmNwdSwgQVVESVRfUE9TVF9TWU5DKTsKIAkJcmV0dXJuOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CkBAIC0yNTUyLDIzICsyNTY1LDI0IEBACiB9CiAKIHN0YXRpYyBncGFfdCBub25wYWdpbmdfZ3ZhX3RvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IHZhZGRyLAotCQkJCSAgdTMyIGFjY2VzcywgdTMyICplcnJvcikKKwkJCQkgIHUzMiBhY2Nlc3MsIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pCiB7Ci0JaWYgKGVycm9yKQotCQkqZXJyb3IgPSAwOworCWlmIChleGNlcHRpb24pCisJCWV4Y2VwdGlvbi0+ZXJyb3JfY29kZSA9IDA7CiAJcmV0dXJuIHZhZGRyOwogfQogCiBzdGF0aWMgZ3BhX3Qgbm9ucGFnaW5nX2d2YV90b19ncGFfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgdmFkZHIsCi0JCQkJCSB1MzIgYWNjZXNzLCB1MzIgKmVycm9yKQorCQkJCQkgdTMyIGFjY2VzcywKKwkJCQkJIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pCiB7Ci0JaWYgKGVycm9yKQotCQkqZXJyb3IgPSAwOworCWlmIChleGNlcHRpb24pCisJCWV4Y2VwdGlvbi0+ZXJyb3JfY29kZSA9IDA7CiAJcmV0dXJuIHZjcHUtPmFyY2gubmVzdGVkX21tdS50cmFuc2xhdGVfZ3BhKHZjcHUsIHZhZGRyLCBhY2Nlc3MpOwogfQogCiBzdGF0aWMgaW50IG5vbnBhZ2luZ19wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLAotCQkJCXUzMiBlcnJvcl9jb2RlKQorCQkJCXUzMiBlcnJvcl9jb2RlLCBib29sIHByZWZhdWx0KQogewogCWdmbl90IGdmbjsKIAlpbnQgcjsKQEAgLTI1ODQsMTcgKzI1OTgsNjcgQEAKIAlnZm4gPSBndmEgPj4gUEFHRV9TSElGVDsKIAogCXJldHVybiBub25wYWdpbmdfbWFwKHZjcHUsIGd2YSAmIFBBR0VfTUFTSywKLQkJCSAgICAgZXJyb3JfY29kZSAmIFBGRVJSX1dSSVRFX01BU0ssIGdmbik7CisJCQkgICAgIGVycm9yX2NvZGUgJiBQRkVSUl9XUklURV9NQVNLLCBnZm4sIHByZWZhdWx0KTsKIH0KIAotc3RhdGljIGludCB0ZHBfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGdwYSwKLQkJCQl1MzIgZXJyb3JfY29kZSkKK3N0YXRpYyBpbnQga3ZtX2FyY2hfc2V0dXBfYXN5bmNfcGYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIGdmbl90IGdmbikKK3sKKwlzdHJ1Y3Qga3ZtX2FyY2hfYXN5bmNfcGYgYXJjaDsKKworCWFyY2gudG9rZW4gPSAodmNwdS0+YXJjaC5hcGYuaWQrKyA8PCAxMikgfCB2Y3B1LT52Y3B1X2lkOworCWFyY2guZ2ZuID0gZ2ZuOworCWFyY2guZGlyZWN0X21hcCA9IHZjcHUtPmFyY2gubW11LmRpcmVjdF9tYXA7CisJYXJjaC5jcjMgPSB2Y3B1LT5hcmNoLm1tdS5nZXRfY3IzKHZjcHUpOworCisJcmV0dXJuIGt2bV9zZXR1cF9hc3luY19wZih2Y3B1LCBndmEsIGdmbiwgJmFyY2gpOworfQorCitzdGF0aWMgYm9vbCBjYW5fZG9fYXN5bmNfcGYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWlmICh1bmxpa2VseSghaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0+a3ZtKSB8fAorCQkgICAgIGt2bV9ldmVudF9uZWVkc19yZWluamVjdGlvbih2Y3B1KSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBrdm1feDg2X29wcy0+aW50ZXJydXB0X2FsbG93ZWQodmNwdSk7Cit9CisKK3N0YXRpYyBib29sIHRyeV9hc3luY19wZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcHJlZmF1bHQsIGdmbl90IGdmbiwKKwkJCSBndmFfdCBndmEsIHBmbl90ICpwZm4sIGJvb2wgd3JpdGUsIGJvb2wgKndyaXRhYmxlKQoreworCWJvb2wgYXN5bmM7CisKKwkqcGZuID0gZ2ZuX3RvX3Bmbl9hc3luYyh2Y3B1LT5rdm0sIGdmbiwgJmFzeW5jLCB3cml0ZSwgd3JpdGFibGUpOworCisJaWYgKCFhc3luYykKKwkJcmV0dXJuIGZhbHNlOyAvKiAqcGZuIGhhcyBjb3JyZWN0IHBhZ2UgYWxyZWFkeSAqLworCisJcHV0X3BhZ2UocGZuX3RvX3BhZ2UoKnBmbikpOworCisJaWYgKCFwcmVmYXVsdCAmJiBjYW5fZG9fYXN5bmNfcGYodmNwdSkpIHsKKwkJdHJhY2Vfa3ZtX3RyeV9hc3luY19nZXRfcGFnZShndmEsIGdmbik7CisJCWlmIChrdm1fZmluZF9hc3luY19wZl9nZm4odmNwdSwgZ2ZuKSkgeworCQkJdHJhY2Vfa3ZtX2FzeW5jX3BmX2RvdWJsZWZhdWx0KGd2YSwgZ2ZuKTsKKwkJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9BUEZfSEFMVCwgdmNwdSk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfSBlbHNlIGlmIChrdm1fYXJjaF9zZXR1cF9hc3luY19wZih2Y3B1LCBndmEsIGdmbikpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkqcGZuID0gZ2ZuX3RvX3Bmbl9wcm90KHZjcHUtPmt2bSwgZ2ZuLCB3cml0ZSwgd3JpdGFibGUpOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IHRkcF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3BhLCB1MzIgZXJyb3JfY29kZSwKKwkJCSAgYm9vbCBwcmVmYXVsdCkKIHsKIAlwZm5fdCBwZm47CiAJaW50IHI7CiAJaW50IGxldmVsOwogCWdmbl90IGdmbiA9IGdwYSA+PiBQQUdFX1NISUZUOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKKwlpbnQgd3JpdGUgPSBlcnJvcl9jb2RlICYgUEZFUlJfV1JJVEVfTUFTSzsKKwlib29sIG1hcF93cml0YWJsZTsKIAogCUFTU0VSVCh2Y3B1KTsKIAlBU1NFUlQoVkFMSURfUEFHRSh2Y3B1LT5hcmNoLm1tdS5yb290X2hwYSkpOwpAQCAtMjYwOSwxNSArMjY3MywxOSBAQAogCiAJbW11X3NlcSA9IHZjcHUtPmt2bS0+bW11X25vdGlmaWVyX3NlcTsKIAlzbXBfcm1iKCk7Ci0JcGZuID0gZ2ZuX3RvX3Bmbih2Y3B1LT5rdm0sIGdmbik7CisKKwlpZiAodHJ5X2FzeW5jX3BmKHZjcHUsIHByZWZhdWx0LCBnZm4sIGdwYSwgJnBmbiwgd3JpdGUsICZtYXBfd3JpdGFibGUpKQorCQlyZXR1cm4gMDsKKworCS8qIG1taW8gKi8KIAlpZiAoaXNfZXJyb3JfcGZuKHBmbikpCiAJCXJldHVybiBrdm1faGFuZGxlX2JhZF9wYWdlKHZjcHUtPmt2bSwgZ2ZuLCBwZm4pOwogCXNwaW5fbG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAJaWYgKG1tdV9ub3RpZmllcl9yZXRyeSh2Y3B1LCBtbXVfc2VxKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCWt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHZjcHUpOwotCXIgPSBfX2RpcmVjdF9tYXAodmNwdSwgZ3BhLCBlcnJvcl9jb2RlICYgUEZFUlJfV1JJVEVfTUFTSywKLQkJCSBsZXZlbCwgZ2ZuLCBwZm4pOworCXIgPSBfX2RpcmVjdF9tYXAodmNwdSwgZ3BhLCB3cml0ZSwgbWFwX3dyaXRhYmxlLAorCQkJIGxldmVsLCBnZm4sIHBmbiwgcHJlZmF1bHQpOwogCXNwaW5fdW5sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKIAogCXJldHVybiByOwpAQCAtMjY1OSwxOCArMjcyNywxOSBAQAogCiBzdGF0aWMgdm9pZCBwYWdpbmdfbmV3X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcGdwcmludGsoIiVzOiBjcjMgJWx4XG4iLCBfX2Z1bmNfXywgdmNwdS0+YXJjaC5jcjMpOworCXBncHJpbnRrKCIlczogY3IzICVseFxuIiwgX19mdW5jX18sIGt2bV9yZWFkX2NyMyh2Y3B1KSk7CiAJbW11X2ZyZWVfcm9vdHModmNwdSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9jcjMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXJldHVybiB2Y3B1LT5hcmNoLmNyMzsKKwlyZXR1cm4ga3ZtX3JlYWRfY3IzKHZjcHUpOwogfQogCi1zdGF0aWMgdm9pZCBpbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgdm9pZCBpbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZmF1bHQpCiB7Ci0JdmNwdS0+YXJjaC5tbXUuaW5qZWN0X3BhZ2VfZmF1bHQodmNwdSk7CisJdmNwdS0+YXJjaC5tbXUuaW5qZWN0X3BhZ2VfZmF1bHQodmNwdSwgZmF1bHQpOwogfQogCiBzdGF0aWMgdm9pZCBwYWdpbmdfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yODE2LDYgKzI4ODUsNyBAQAogewogCXN0cnVjdCBrdm1fbW11ICpjb250ZXh0ID0gdmNwdS0+YXJjaC53YWxrX21tdTsKIAorCWNvbnRleHQtPmJhc2Vfcm9sZS53b3JkID0gMDsKIAljb250ZXh0LT5uZXdfY3IzID0gbm9ucGFnaW5nX25ld19jcjM7CiAJY29udGV4dC0+cGFnZV9mYXVsdCA9IHRkcF9wYWdlX2ZhdWx0OwogCWNvbnRleHQtPmZyZWUgPSBub25wYWdpbmdfZnJlZTsKQEAgLTMwMDgsOSArMzA3OCw2IEBACiAJCXJldHVybjsKICAgICAgICAgfQogCi0JaWYgKGlzX3JzdmRfYml0c19zZXQoJnZjcHUtPmFyY2gubW11LCAqKHU2NCAqKW5ldywgUFRfUEFHRV9UQUJMRV9MRVZFTCkpCi0JCXJldHVybjsKLQogCSsrdmNwdS0+a3ZtLT5zdGF0Lm1tdV9wdGVfdXBkYXRlZDsKIAlpZiAoIXNwLT5yb2xlLmNyNF9wYWUpCiAJCXBhZ2luZzMyX3VwZGF0ZV9wdGUodmNwdSwgc3AsIHNwdGUsIG5ldyk7CkBAIC0zMjY0LDEyICszMzMxLDEzIEBACiAJfQogfQogCi1pbnQga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgY3IyLCB1MzIgZXJyb3JfY29kZSkKK2ludCBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBjcjIsIHUzMiBlcnJvcl9jb2RlLAorCQkgICAgICAgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKQogewogCWludCByOwogCWVudW0gZW11bGF0aW9uX3Jlc3VsdCBlcjsKIAotCXIgPSB2Y3B1LT5hcmNoLm1tdS5wYWdlX2ZhdWx0KHZjcHUsIGNyMiwgZXJyb3JfY29kZSk7CisJciA9IHZjcHUtPmFyY2gubW11LnBhZ2VfZmF1bHQodmNwdSwgY3IyLCBlcnJvcl9jb2RlLCBmYWxzZSk7CiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKIApAQCAtMzI4Miw3ICszMzUwLDcgQEAKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKLQllciA9IGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgY3IyLCBlcnJvcl9jb2RlLCAwKTsKKwllciA9IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIGNyMiwgMCwgaW5zbiwgaW5zbl9sZW4pOwogCiAJc3dpdGNoIChlcikgewogCWNhc2UgRU1VTEFURV9ET05FOgpAQCAtMzM3NywxMSArMzQ0NSwxNCBAQAogCQlpZiAoIXRlc3RfYml0KHNsb3QsIHNwLT5zbG90X2JpdG1hcCkpCiAJCQljb250aW51ZTsKIAorCQlpZiAoc3AtPnJvbGUubGV2ZWwgIT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkKKwkJCWNvbnRpbnVlOworCiAJCXB0ID0gc3AtPnNwdDsKIAkJZm9yIChpID0gMDsgaSA8IFBUNjRfRU5UX1BFUl9QQUdFOyArK2kpCiAJCQkvKiBhdm9pZCBSTVcgKi8KIAkJCWlmIChpc193cml0YWJsZV9wdGUocHRbaV0pKQotCQkJCXB0W2ldICY9IH5QVF9XUklUQUJMRV9NQVNLOworCQkJCXVwZGF0ZV9zcHRlKCZwdFtpXSwgcHRbaV0gJiB+UFRfV1JJVEFCTEVfTUFTSyk7CiAJfQogCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOwogfQpAQCAtMzQ2MywxMyArMzUzNCw2IEBACiAJCWttZW1fY2FjaGVfZGVzdHJveShtbXVfcGFnZV9oZWFkZXJfY2FjaGUpOwogfQogCi12b2lkIGt2bV9tbXVfbW9kdWxlX2V4aXQodm9pZCkKLXsKLQltbXVfZGVzdHJveV9jYWNoZXMoKTsKLQlwZXJjcHVfY291bnRlcl9kZXN0cm95KCZrdm1fdG90YWxfdXNlZF9tbXVfcGFnZXMpOwotCXVucmVnaXN0ZXJfc2hyaW5rZXIoJm1tdV9zaHJpbmtlcik7Ci19Ci0KIGludCBrdm1fbW11X21vZHVsZV9pbml0KHZvaWQpCiB7CiAJcHRlX2NoYWluX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImt2bV9wdGVfY2hhaW4iLApAQCAtMzU2Niw3ICszNjMwLDcgQEAKIAogc3RhdGljIGludCBrdm1fcHZfbW11X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JKHZvaWQpa3ZtX3NldF9jcjModmNwdSwgdmNwdS0+YXJjaC5jcjMpOworCSh2b2lkKWt2bV9zZXRfY3IzKHZjcHUsIGt2bV9yZWFkX2NyMyh2Y3B1KSk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTM2NjIsMTIgKzM3MjYsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX21tdV9nZXRfc3B0ZV9oaWVyYXJjaHkpOwogCi0jaWZkZWYgQ09ORklHX0tWTV9NTVVfQVVESVQKLSNpbmNsdWRlICJtbXVfYXVkaXQuYyIKLSNlbHNlCi1zdGF0aWMgdm9pZCBtbXVfYXVkaXRfZGlzYWJsZSh2b2lkKSB7IH0KLSNlbmRpZgotCiB2b2lkIGt2bV9tbXVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJQVNTRVJUKHZjcHUpOwpAQCAtMzY3NSw1ICszNzMzLDE4IEBACiAJZGVzdHJveV9rdm1fbW11KHZjcHUpOwogCWZyZWVfbW11X3BhZ2VzKHZjcHUpOwogCW1tdV9mcmVlX21lbW9yeV9jYWNoZXModmNwdSk7Cit9CisKKyNpZmRlZiBDT05GSUdfS1ZNX01NVV9BVURJVAorI2luY2x1ZGUgIm1tdV9hdWRpdC5jIgorI2Vsc2UKK3N0YXRpYyB2b2lkIG1tdV9hdWRpdF9kaXNhYmxlKHZvaWQpIHsgfQorI2VuZGlmCisKK3ZvaWQga3ZtX21tdV9tb2R1bGVfZXhpdCh2b2lkKQoreworCW1tdV9kZXN0cm95X2NhY2hlcygpOworCXBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koJmt2bV90b3RhbF91c2VkX21tdV9wYWdlcyk7CisJdW5yZWdpc3Rlcl9zaHJpbmtlcigmbW11X3Nocmlua2VyKTsKIAltbXVfYXVkaXRfZGlzYWJsZSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdV9hdWRpdC5jIGIvYXJjaC94ODYva3ZtL21tdV9hdWRpdC5jCmluZGV4IGJhMmJjZGQuLjVmNjIyM2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXVfYXVkaXQuYworKysgYi9hcmNoL3g4Ni9rdm0vbW11X2F1ZGl0LmMKQEAgLTE5LDExICsxOSw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9yYXRlbGltaXQuaD4KIAotc3RhdGljIGludCBhdWRpdF9wb2ludDsKLQotI2RlZmluZSBhdWRpdF9wcmludGsoZm10LCBhcmdzLi4uKQkJXAorI2RlZmluZSBhdWRpdF9wcmludGsoa3ZtLCBmbXQsIGFyZ3MuLi4pCQlcCiAJcHJpbnRrKEtFUk5fRVJSICJhdWRpdDogKCVzKSBlcnJvcjogIglcCi0JCWZtdCwgYXVkaXRfcG9pbnRfbmFtZVthdWRpdF9wb2ludF0sICMjYXJncykKKwkJZm10LCBhdWRpdF9wb2ludF9uYW1lW2t2bS0+YXJjaC5hdWRpdF9wb2ludF0sICMjYXJncykKIAogdHlwZWRlZiB2b2lkICgqaW5zcGVjdF9zcHRlX2ZuKSAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnNwdGVwLCBpbnQgbGV2ZWwpOwogCkBAIC05NywxOCArOTUsMjEgQEAKIAogCWlmIChzcC0+dW5zeW5jKSB7CiAJCWlmIChsZXZlbCAhPSBQVF9QQUdFX1RBQkxFX0xFVkVMKSB7Ci0JCQlhdWRpdF9wcmludGsoInVuc3luYyBzcDogJXAgbGV2ZWwgPSAlZFxuIiwgc3AsIGxldmVsKTsKKwkJCWF1ZGl0X3ByaW50ayh2Y3B1LT5rdm0sICJ1bnN5bmMgc3A6ICVwICIKKwkJCQkgICAgICJsZXZlbCA9ICVkXG4iLCBzcCwgbGV2ZWwpOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJaWYgKCpzcHRlcCA9PSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlKSB7Ci0JCQlhdWRpdF9wcmludGsoIm5vdHJhcCBzcHRlIGluIHVuc3luYyBzcDogJXBcbiIsIHNwKTsKKwkJCWF1ZGl0X3ByaW50ayh2Y3B1LT5rdm0sICJub3RyYXAgc3B0ZSBpbiB1bnN5bmMgIgorCQkJCSAgICAgInNwOiAlcFxuIiwgc3ApOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCiAJaWYgKHNwLT5yb2xlLmRpcmVjdCAmJiAqc3B0ZXAgPT0gc2hhZG93X25vdHJhcF9ub25wcmVzZW50X3B0ZSkgewotCQlhdWRpdF9wcmludGsoIm5vdHJhcCBzcHRlIGluIGRpcmVjdCBzcDogJXBcbiIsIHNwKTsKKwkJYXVkaXRfcHJpbnRrKHZjcHUtPmt2bSwgIm5vdHJhcCBzcHRlIGluIGRpcmVjdCBzcDogJXBcbiIsCisJCQkgICAgIHNwKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI1LDggKzEyNiw5IEBACiAKIAlocGEgPSAgcGZuIDw8IFBBR0VfU0hJRlQ7CiAJaWYgKCgqc3B0ZXAgJiBQVDY0X0JBU0VfQUREUl9NQVNLKSAhPSBocGEpCi0JCWF1ZGl0X3ByaW50aygibGV2ZWxzICVkIHBmbiAlbGx4IGhwYSAlbGx4IGVudCAlbGx4biIsCi0JCQkJICAgdmNwdS0+YXJjaC5tbXUucm9vdF9sZXZlbCwgcGZuLCBocGEsICpzcHRlcCk7CisJCWF1ZGl0X3ByaW50ayh2Y3B1LT5rdm0sICJsZXZlbHMgJWQgcGZuICVsbHggaHBhICVsbHggIgorCQkJICAgICAiZW50ICVsbHhuIiwgdmNwdS0+YXJjaC5tbXUucm9vdF9sZXZlbCwgcGZuLAorCQkJICAgICBocGEsICpzcHRlcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGluc3BlY3Rfc3B0ZV9oYXNfcm1hcChzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqc3B0ZXApCkBAIC0xNDIsOCArMTQ0LDggQEAKIAlpZiAoIWdmbl90b19tZW1zbG90KGt2bSwgZ2ZuKSkgewogCQlpZiAoIXByaW50a19yYXRlbGltaXQoKSkKIAkJCXJldHVybjsKLQkJYXVkaXRfcHJpbnRrKCJubyBtZW1zbG90IGZvciBnZm4gJWxseFxuIiwgZ2ZuKTsKLQkJYXVkaXRfcHJpbnRrKCJpbmRleCAlbGQgb2Ygc3AgKGdmbj0lbGx4KVxuIiwKKwkJYXVkaXRfcHJpbnRrKGt2bSwgIm5vIG1lbXNsb3QgZm9yIGdmbiAlbGx4XG4iLCBnZm4pOworCQlhdWRpdF9wcmludGsoa3ZtLCAiaW5kZXggJWxkIG9mIHNwIChnZm49JWxseClcbiIsCiAJCSAgICAgICAobG9uZyBpbnQpKHNwdGVwIC0gcmV2X3NwLT5zcHQpLCByZXZfc3AtPmdmbik7CiAJCWR1bXBfc3RhY2soKTsKIAkJcmV0dXJuOwpAQCAtMTUzLDcgKzE1NSw4IEBACiAJaWYgKCEqcm1hcHApIHsKIAkJaWYgKCFwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlyZXR1cm47Ci0JCWF1ZGl0X3ByaW50aygibm8gcm1hcCBmb3Igd3JpdGFibGUgc3B0ZSAlbGx4XG4iLCAqc3B0ZXApOworCQlhdWRpdF9wcmludGsoa3ZtLCAibm8gcm1hcCBmb3Igd3JpdGFibGUgc3B0ZSAlbGx4XG4iLAorCQkJICAgICAqc3B0ZXApOwogCQlkdW1wX3N0YWNrKCk7CiAJfQogfQpAQCAtMTY4LDggKzE3MSw5IEBACiB7CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGVwKSk7CiAKLQlpZiAoYXVkaXRfcG9pbnQgPT0gQVVESVRfUE9TVF9TWU5DICYmIHNwLT51bnN5bmMpCi0JCWF1ZGl0X3ByaW50aygibWVldCB1bnN5bmMgc3AoJXApIGFmdGVyIHN5bmMgcm9vdC5cbiIsIHNwKTsKKwlpZiAodmNwdS0+a3ZtLT5hcmNoLmF1ZGl0X3BvaW50ID09IEFVRElUX1BPU1RfU1lOQyAmJiBzcC0+dW5zeW5jKQorCQlhdWRpdF9wcmludGsodmNwdS0+a3ZtLCAibWVldCB1bnN5bmMgc3AoJXApIGFmdGVyIHN5bmMgIgorCQkJICAgICAicm9vdC5cbiIsIHNwKTsKIH0KIAogc3RhdGljIHZvaWQgY2hlY2tfbWFwcGluZ3Nfcm1hcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQpAQCAtMjAyLDggKzIwNiw5IEBACiAJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBOVUxMKTsKIAl3aGlsZSAoc3B0ZSkgewogCQlpZiAoaXNfd3JpdGFibGVfcHRlKCpzcHRlKSkKLQkJCWF1ZGl0X3ByaW50aygic2hhZG93IHBhZ2UgaGFzIHdyaXRhYmxlIG1hcHBpbmdzOiBnZm4gIgotCQkJCSAgICAgIiVsbHggcm9sZSAleFxuIiwgc3AtPmdmbiwgc3AtPnJvbGUud29yZCk7CisJCQlhdWRpdF9wcmludGsoa3ZtLCAic2hhZG93IHBhZ2UgaGFzIHdyaXRhYmxlICIKKwkJCQkgICAgICJtYXBwaW5nczogZ2ZuICVsbHggcm9sZSAleFxuIiwKKwkJCQkgICAgIHNwLT5nZm4sIHNwLT5yb2xlLndvcmQpOwogCQlzcHRlID0gcm1hcF9uZXh0KGt2bSwgcm1hcHAsIHNwdGUpOwogCX0KIH0KQEAgLTIzOCw3ICsyNDMsNyBAQAogCWlmICghX19yYXRlbGltaXQoJnJhdGVsaW1pdF9zdGF0ZSkpCiAJCXJldHVybjsKIAotCWF1ZGl0X3BvaW50ID0gcG9pbnQ7CisJdmNwdS0+a3ZtLT5hcmNoLmF1ZGl0X3BvaW50ID0gcG9pbnQ7CiAJYXVkaXRfYWxsX2FjdGl2ZV9zcHModmNwdS0+a3ZtKTsKIAlhdWRpdF92Y3B1X3NwdGUodmNwdSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IGNkN2E4MzMuLjUzMjEwZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC03Miw3ICs3Miw3IEBACiAJdW5zaWduZWQgcHRfYWNjZXNzOwogCXVuc2lnbmVkIHB0ZV9hY2Nlc3M7CiAJZ2ZuX3QgZ2ZuOwotCXUzMiBlcnJvcl9jb2RlOworCXN0cnVjdCB4ODZfZXhjZXB0aW9uIGZhdWx0OwogfTsKIAogc3RhdGljIGdmbl90IGdwdGVfdG9fZ2ZuX2x2bChwdF9lbGVtZW50X3QgZ3B0ZSwgaW50IGx2bCkKQEAgLTI2NiwyMSArMjY2LDIzIEBACiAJcmV0dXJuIDE7CiAKIGVycm9yOgotCXdhbGtlci0+ZXJyb3JfY29kZSA9IDA7CisJd2Fsa2VyLT5mYXVsdC52ZWN0b3IgPSBQRl9WRUNUT1I7CisJd2Fsa2VyLT5mYXVsdC5lcnJvcl9jb2RlX3ZhbGlkID0gdHJ1ZTsKKwl3YWxrZXItPmZhdWx0LmVycm9yX2NvZGUgPSAwOwogCWlmIChwcmVzZW50KQotCQl3YWxrZXItPmVycm9yX2NvZGUgfD0gUEZFUlJfUFJFU0VOVF9NQVNLOworCQl3YWxrZXItPmZhdWx0LmVycm9yX2NvZGUgfD0gUEZFUlJfUFJFU0VOVF9NQVNLOwogCi0Jd2Fsa2VyLT5lcnJvcl9jb2RlIHw9IHdyaXRlX2ZhdWx0IHwgdXNlcl9mYXVsdDsKKwl3YWxrZXItPmZhdWx0LmVycm9yX2NvZGUgfD0gd3JpdGVfZmF1bHQgfCB1c2VyX2ZhdWx0OwogCiAJaWYgKGZldGNoX2ZhdWx0ICYmIG1tdS0+bngpCi0JCXdhbGtlci0+ZXJyb3JfY29kZSB8PSBQRkVSUl9GRVRDSF9NQVNLOworCQl3YWxrZXItPmZhdWx0LmVycm9yX2NvZGUgfD0gUEZFUlJfRkVUQ0hfTUFTSzsKIAlpZiAocnN2ZF9mYXVsdCkKLQkJd2Fsa2VyLT5lcnJvcl9jb2RlIHw9IFBGRVJSX1JTVkRfTUFTSzsKKwkJd2Fsa2VyLT5mYXVsdC5lcnJvcl9jb2RlIHw9IFBGRVJSX1JTVkRfTUFTSzsKIAotCXZjcHUtPmFyY2guZmF1bHQuYWRkcmVzcyAgICA9IGFkZHI7Ci0JdmNwdS0+YXJjaC5mYXVsdC5lcnJvcl9jb2RlID0gd2Fsa2VyLT5lcnJvcl9jb2RlOworCXdhbGtlci0+ZmF1bHQuYWRkcmVzcyA9IGFkZHI7CisJd2Fsa2VyLT5mYXVsdC5uZXN0ZWRfcGFnZV9mYXVsdCA9IG1tdSAhPSB2Y3B1LT5hcmNoLndhbGtfbW11OwogCi0JdHJhY2Vfa3ZtX21tdV93YWxrZXJfZXJyb3Iod2Fsa2VyLT5lcnJvcl9jb2RlKTsKKwl0cmFjZV9rdm1fbW11X3dhbGtlcl9lcnJvcih3YWxrZXItPmZhdWx0LmVycm9yX2NvZGUpOwogCXJldHVybiAwOwogfQogCkBAIC0yOTksMjUgKzMwMSw0MiBAQAogCQkJCQlhZGRyLCBhY2Nlc3MpOwogfQogCitzdGF0aWMgYm9vbCBGTkFNRShwcmVmZXRjaF9pbnZhbGlkX2dwdGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkgICAgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHU2NCAqc3B0ZSwKKwkJCQkgICAgcHRfZWxlbWVudF90IGdwdGUpCit7CisJdTY0IG5vbnByZXNlbnQgPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKKworCWlmIChpc19yc3ZkX2JpdHNfc2V0KCZ2Y3B1LT5hcmNoLm1tdSwgZ3B0ZSwgUFRfUEFHRV9UQUJMRV9MRVZFTCkpCisJCWdvdG8gbm9fcHJlc2VudDsKKworCWlmICghaXNfcHJlc2VudF9ncHRlKGdwdGUpKSB7CisJCWlmICghc3AtPnVuc3luYykKKwkJCW5vbnByZXNlbnQgPSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlOworCQlnb3RvIG5vX3ByZXNlbnQ7CisJfQorCisJaWYgKCEoZ3B0ZSAmIFBUX0FDQ0VTU0VEX01BU0spKQorCQlnb3RvIG5vX3ByZXNlbnQ7CisKKwlyZXR1cm4gZmFsc2U7CisKK25vX3ByZXNlbnQ6CisJZHJvcF9zcHRlKHZjcHUtPmt2bSwgc3B0ZSwgbm9ucHJlc2VudCk7CisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyB2b2lkIEZOQU1FKHVwZGF0ZV9wdGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsCiAJCQkgICAgICB1NjQgKnNwdGUsIGNvbnN0IHZvaWQgKnB0ZSkKIHsKIAlwdF9lbGVtZW50X3QgZ3B0ZTsKIAl1bnNpZ25lZCBwdGVfYWNjZXNzOwogCXBmbl90IHBmbjsKLQl1NjQgbmV3X3NwdGU7CiAKIAlncHRlID0gKihjb25zdCBwdF9lbGVtZW50X3QgKilwdGU7Ci0JaWYgKH5ncHRlICYgKFBUX1BSRVNFTlRfTUFTSyB8IFBUX0FDQ0VTU0VEX01BU0spKSB7Ci0JCWlmICghaXNfcHJlc2VudF9ncHRlKGdwdGUpKSB7Ci0JCQlpZiAoc3AtPnVuc3luYykKLQkJCQluZXdfc3B0ZSA9IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlOwotCQkJZWxzZQotCQkJCW5ld19zcHRlID0gc2hhZG93X25vdHJhcF9ub25wcmVzZW50X3B0ZTsKLQkJCV9fc2V0X3NwdGUoc3B0ZSwgbmV3X3NwdGUpOwotCQl9CisJaWYgKEZOQU1FKHByZWZldGNoX2ludmFsaWRfZ3B0ZSkodmNwdSwgc3AsIHNwdGUsIGdwdGUpKQogCQlyZXR1cm47Ci0JfQorCiAJcGdwcmludGsoIiVzOiBncHRlICVsbHggc3B0ZSAlcFxuIiwgX19mdW5jX18sICh1NjQpZ3B0ZSwgc3B0ZSk7CiAJcHRlX2FjY2VzcyA9IHNwLT5yb2xlLmFjY2VzcyAmIEZOQU1FKGdwdGVfYWNjZXNzKSh2Y3B1LCBncHRlKTsKIAlpZiAoZ3B0ZV90b19nZm4oZ3B0ZSkgIT0gdmNwdS0+YXJjaC51cGRhdGVfcHRlLmdmbikKQEAgLTMyOSw3ICszNDgsNyBAQAogCQlyZXR1cm47CiAJa3ZtX2dldF9wZm4ocGZuKTsKIAkvKgotCSAqIHdlIGNhbGwgbW11X3NldF9zcHRlKCkgd2l0aCByZXNldF9ob3N0X3Byb3RlY3Rpb24gPSB0cnVlIGJlYWN1c2UgdGhhdAorCSAqIHdlIGNhbGwgbW11X3NldF9zcHRlKCkgd2l0aCBob3N0X3dyaXRhYmxlID0gdHJ1ZSBiZWFjdXNlIHRoYXQKIAkgKiB2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUucGZuIHdhcyBmZXRjaGVkIGZyb20gZ2V0X3VzZXJfcGFnZXMod3JpdGUgPSAxKS4KIAkgKi8KIAltbXVfc2V0X3NwdGUodmNwdSwgc3B0ZSwgc3AtPnJvbGUuYWNjZXNzLCBwdGVfYWNjZXNzLCAwLCAwLApAQCAtMzY0LDcgKzM4Myw2IEBACiAJCQkJdTY0ICpzcHRlcCkKIHsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKLQlzdHJ1Y3Qga3ZtX21tdSAqbW11ID0gJnZjcHUtPmFyY2gubW11OwogCXB0X2VsZW1lbnRfdCAqZ3B0ZXAgPSBndy0+cHJlZmV0Y2hfcHRlczsKIAl1NjQgKnNwdGU7CiAJaW50IGk7CkBAIC0zOTUsMTQgKzQxMyw3IEBACiAKIAkJZ3B0ZSA9IGdwdGVwW2ldOwogCi0JCWlmICghaXNfcHJlc2VudF9ncHRlKGdwdGUpIHx8Ci0JCSAgICAgIGlzX3JzdmRfYml0c19zZXQobW11LCBncHRlLCBQVF9QQUdFX1RBQkxFX0xFVkVMKSkgewotCQkJaWYgKCFzcC0+dW5zeW5jKQotCQkJCV9fc2V0X3NwdGUoc3B0ZSwgc2hhZG93X25vdHJhcF9ub25wcmVzZW50X3B0ZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICghKGdwdGUgJiBQVF9BQ0NFU1NFRF9NQVNLKSkKKwkJaWYgKEZOQU1FKHByZWZldGNoX2ludmFsaWRfZ3B0ZSkodmNwdSwgc3AsIHNwdGUsIGdwdGUpKQogCQkJY29udGludWU7CiAKIAkJcHRlX2FjY2VzcyA9IHNwLT5yb2xlLmFjY2VzcyAmIEZOQU1FKGdwdGVfYWNjZXNzKSh2Y3B1LCBncHRlKTsKQEAgLTQyNyw3ICs0MzgsOCBAQAogc3RhdGljIHU2NCAqRk5BTUUoZmV0Y2gpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgYWRkciwKIAkJCSBzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICpndywKIAkJCSBpbnQgdXNlcl9mYXVsdCwgaW50IHdyaXRlX2ZhdWx0LCBpbnQgaGxldmVsLAotCQkJIGludCAqcHR3cml0ZSwgcGZuX3QgcGZuKQorCQkJIGludCAqcHR3cml0ZSwgcGZuX3QgcGZuLCBib29sIG1hcF93cml0YWJsZSwKKwkJCSBib29sIHByZWZhdWx0KQogewogCXVuc2lnbmVkIGFjY2VzcyA9IGd3LT5wdF9hY2Nlc3M7CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AgPSBOVUxMOwpAQCAtNTAxLDcgKzUxMyw3IEBACiAKIAltbXVfc2V0X3NwdGUodmNwdSwgaXQuc3B0ZXAsIGFjY2VzcywgZ3ctPnB0ZV9hY2Nlc3MgJiBhY2Nlc3MsCiAJCSAgICAgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsIGRpcnR5LCBwdHdyaXRlLCBpdC5sZXZlbCwKLQkJICAgICBndy0+Z2ZuLCBwZm4sIGZhbHNlLCB0cnVlKTsKKwkJICAgICBndy0+Z2ZuLCBwZm4sIHByZWZhdWx0LCBtYXBfd3JpdGFibGUpOwogCUZOQU1FKHB0ZV9wcmVmZXRjaCkodmNwdSwgZ3csIGl0LnNwdGVwKTsKIAogCXJldHVybiBpdC5zcHRlcDsKQEAgLTUyNyw4ICs1MzksOCBAQAogICogIFJldHVybnM6IDEgaWYgd2UgbmVlZCB0byBlbXVsYXRlIHRoZSBpbnN0cnVjdGlvbiwgMCBvdGhlcndpc2UsIG9yCiAgKiAgICAgICAgICAgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvci4KICAqLwotc3RhdGljIGludCBGTkFNRShwYWdlX2ZhdWx0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGFkZHIsCi0JCQkgICAgICAgdTMyIGVycm9yX2NvZGUpCitzdGF0aWMgaW50IEZOQU1FKHBhZ2VfZmF1bHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgYWRkciwgdTMyIGVycm9yX2NvZGUsCisJCQkgICAgIGJvb2wgcHJlZmF1bHQpCiB7CiAJaW50IHdyaXRlX2ZhdWx0ID0gZXJyb3JfY29kZSAmIFBGRVJSX1dSSVRFX01BU0s7CiAJaW50IHVzZXJfZmF1bHQgPSBlcnJvcl9jb2RlICYgUEZFUlJfVVNFUl9NQVNLOwpAQCAtNTM5LDYgKzU1MSw3IEBACiAJcGZuX3QgcGZuOwogCWludCBsZXZlbCA9IFBUX1BBR0VfVEFCTEVfTEVWRUw7CiAJdW5zaWduZWQgbG9uZyBtbXVfc2VxOworCWJvb2wgbWFwX3dyaXRhYmxlOwogCiAJcGdwcmludGsoIiVzOiBhZGRyICVseCBlcnIgJXhcbiIsIF9fZnVuY19fLCBhZGRyLCBlcnJvcl9jb2RlKTsKIApAQCAtNTU2LDggKzU2OSwxMSBAQAogCSAqLwogCWlmICghcikgewogCQlwZ3ByaW50aygiJXM6IGd1ZXN0IHBhZ2UgZmF1bHRcbiIsIF9fZnVuY19fKTsKLQkJaW5qZWN0X3BhZ2VfZmF1bHQodmNwdSk7Ci0JCXZjcHUtPmFyY2gubGFzdF9wdF93cml0ZV9jb3VudCA9IDA7IC8qIHJlc2V0IGZvcmsgZGV0ZWN0b3IgKi8KKwkJaWYgKCFwcmVmYXVsdCkgeworCQkJaW5qZWN0X3BhZ2VfZmF1bHQodmNwdSwgJndhbGtlci5mYXVsdCk7CisJCQkvKiByZXNldCBmb3JrIGRldGVjdG9yICovCisJCQl2Y3B1LT5hcmNoLmxhc3RfcHRfd3JpdGVfY291bnQgPSAwOworCQl9CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTY4LDcgKzU4NCwxMCBAQAogCiAJbW11X3NlcSA9IHZjcHUtPmt2bS0+bW11X25vdGlmaWVyX3NlcTsKIAlzbXBfcm1iKCk7Ci0JcGZuID0gZ2ZuX3RvX3Bmbih2Y3B1LT5rdm0sIHdhbGtlci5nZm4pOworCisJaWYgKHRyeV9hc3luY19wZih2Y3B1LCBwcmVmYXVsdCwgd2Fsa2VyLmdmbiwgYWRkciwgJnBmbiwgd3JpdGVfZmF1bHQsCisJCQkgJm1hcF93cml0YWJsZSkpCisJCXJldHVybiAwOwogCiAJLyogbW1pbyAqLwogCWlmIChpc19lcnJvcl9wZm4ocGZuKSkKQEAgLTU4MSw3ICs2MDAsNyBAQAogCXRyYWNlX2t2bV9tbXVfYXVkaXQodmNwdSwgQVVESVRfUFJFX1BBR0VfRkFVTFQpOwogCWt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHZjcHUpOwogCXNwdGVwID0gRk5BTUUoZmV0Y2gpKHZjcHUsIGFkZHIsICZ3YWxrZXIsIHVzZXJfZmF1bHQsIHdyaXRlX2ZhdWx0LAotCQkJICAgICBsZXZlbCwgJndyaXRlX3B0LCBwZm4pOworCQkJICAgICBsZXZlbCwgJndyaXRlX3B0LCBwZm4sIG1hcF93cml0YWJsZSwgcHJlZmF1bHQpOwogCSh2b2lkKXNwdGVwOwogCXBncHJpbnRrKCIlczogc2hhZG93IHB0ZSAlcCAlbGx4IHB0d3JpdGUgJWRcbiIsIF9fZnVuY19fLAogCQkgc3B0ZXAsICpzcHRlcCwgd3JpdGVfcHQpOwpAQCAtNjYxLDcgKzY4MCw3IEBACiB9CiAKIHN0YXRpYyBncGFfdCBGTkFNRShndmFfdG9fZ3BhKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IHZhZGRyLCB1MzIgYWNjZXNzLAotCQkJICAgICAgIHUzMiAqZXJyb3IpCisJCQkgICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbikKIHsKIAlzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyIHdhbGtlcjsKIAlncGFfdCBncGEgPSBVTk1BUFBFRF9HVkE7CkBAIC02NzIsMTQgKzY5MSwxNSBAQAogCWlmIChyKSB7CiAJCWdwYSA9IGdmbl90b19ncGEod2Fsa2VyLmdmbik7CiAJCWdwYSB8PSB2YWRkciAmIH5QQUdFX01BU0s7Ci0JfSBlbHNlIGlmIChlcnJvcikKLQkJKmVycm9yID0gd2Fsa2VyLmVycm9yX2NvZGU7CisJfSBlbHNlIGlmIChleGNlcHRpb24pCisJCSpleGNlcHRpb24gPSB3YWxrZXIuZmF1bHQ7CiAKIAlyZXR1cm4gZ3BhOwogfQogCiBzdGF0aWMgZ3BhX3QgRk5BTUUoZ3ZhX3RvX2dwYV9uZXN0ZWQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgdmFkZHIsCi0JCQkJICAgICAgdTMyIGFjY2VzcywgdTMyICplcnJvcikKKwkJCQkgICAgICB1MzIgYWNjZXNzLAorCQkJCSAgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pCiB7CiAJc3RydWN0IGd1ZXN0X3dhbGtlciB3YWxrZXI7CiAJZ3BhX3QgZ3BhID0gVU5NQVBQRURfR1ZBOwpAQCAtNjkwLDggKzcxMCw4IEBACiAJaWYgKHIpIHsKIAkJZ3BhID0gZ2ZuX3RvX2dwYSh3YWxrZXIuZ2ZuKTsKIAkJZ3BhIHw9IHZhZGRyICYgflBBR0VfTUFTSzsKLQl9IGVsc2UgaWYgKGVycm9yKQotCQkqZXJyb3IgPSB3YWxrZXIuZXJyb3JfY29kZTsKKwl9IGVsc2UgaWYgKGV4Y2VwdGlvbikKKwkJKmV4Y2VwdGlvbiA9IHdhbGtlci5mYXVsdDsKIAogCXJldHVybiBncGE7CiB9CkBAIC03MzAsMTIgKzc1MCwxOSBAQAogICogVXNpbmcgdGhlIGNhY2hlZCBpbmZvcm1hdGlvbiBmcm9tIHNwLT5nZm5zIGlzIHNhZmUgYmVjYXVzZToKICAqIC0gVGhlIHNwdGUgaGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdHJ1Y3QgcGFnZSwgc28gdGhlIHBmbiBmb3IgYSBnaXZlbiBnZm4KICAqICAgY2FuJ3QgY2hhbmdlIHVubGVzcyBhbGwgc3B0ZXMgcG9pbnRpbmcgdG8gaXQgYXJlIG51a2VkIGZpcnN0LgorICoKKyAqIE5vdGU6CisgKiAgIFdlIHNob3VsZCBmbHVzaCBhbGwgdGxicyBpZiBzcHRlIGlzIGRyb3BwZWQgZXZlbiB0aG91Z2ggZ3Vlc3QgaXMKKyAqICAgcmVzcG9uc2libGUgZm9yIGl0LiBTaW5jZSBpZiB3ZSBkb24ndCwga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3BhZ2UKKyAqICAgYW5kIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCBkZXRlY3QgdGhlIG1hcHBpbmcgcGFnZSBpc24ndAorICogICB1c2VkIGJ5IGd1ZXN0IHRoZW4gdGxicyBhcmUgbm90IGZsdXNoZWQsIHNvIGd1ZXN0IGlzIGFsbG93ZWQgdG8gYWNjZXNzIHRoZQorICogICBmcmVlZCBwYWdlcy4KKyAqICAgQW5kIHdlIGluY3JlYXNlIGt2bS0+dGxic19kaXJ0eSB0byBkZWxheSB0bGJzIGZsdXNoIGluIHRoaXMgY2FzZS4KICAqLwotc3RhdGljIGludCBGTkFNRShzeW5jX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsCi0JCQkgICAgYm9vbCBjbGVhcl91bnN5bmMpCitzdGF0aWMgaW50IEZOQU1FKHN5bmNfcGFnZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKIHsKIAlpbnQgaSwgb2Zmc2V0LCBucl9wcmVzZW50OwotCWJvb2wgcmVzZXRfaG9zdF9wcm90ZWN0aW9uOworCWJvb2wgaG9zdF93cml0YWJsZTsKIAlncGFfdCBmaXJzdF9wdGVfZ3BhOwogCiAJb2Zmc2V0ID0gbnJfcHJlc2VudCA9IDA7CkBAIC03NjQsMzEgKzc5MSwyNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJZ2ZuID0gZ3B0ZV90b19nZm4oZ3B0ZSk7Ci0JCWlmIChpc19yc3ZkX2JpdHNfc2V0KCZ2Y3B1LT5hcmNoLm1tdSwgZ3B0ZSwgUFRfUEFHRV9UQUJMRV9MRVZFTCkKLQkJICAgICAgfHwgZ2ZuICE9IHNwLT5nZm5zW2ldIHx8ICFpc19wcmVzZW50X2dwdGUoZ3B0ZSkKLQkJICAgICAgfHwgIShncHRlICYgUFRfQUNDRVNTRURfTUFTSykpIHsKLQkJCXU2NCBub25wcmVzZW50OwogCi0JCQlpZiAoaXNfcHJlc2VudF9ncHRlKGdwdGUpIHx8ICFjbGVhcl91bnN5bmMpCi0JCQkJbm9ucHJlc2VudCA9IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlOwotCQkJZWxzZQotCQkJCW5vbnByZXNlbnQgPSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlOwotCQkJZHJvcF9zcHRlKHZjcHUtPmt2bSwgJnNwLT5zcHRbaV0sIG5vbnByZXNlbnQpOworCQlpZiAoRk5BTUUocHJlZmV0Y2hfaW52YWxpZF9ncHRlKSh2Y3B1LCBzcCwgJnNwLT5zcHRbaV0sIGdwdGUpKSB7CisJCQl2Y3B1LT5rdm0tPnRsYnNfZGlydHkrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGdmbiAhPSBzcC0+Z2Zuc1tpXSkgeworCQkJZHJvcF9zcHRlKHZjcHUtPmt2bSwgJnNwLT5zcHRbaV0sCisJCQkJICAgICAgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQkJdmNwdS0+a3ZtLT50bGJzX2RpcnR5Kys7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCW5yX3ByZXNlbnQrKzsKIAkJcHRlX2FjY2VzcyA9IHNwLT5yb2xlLmFjY2VzcyAmIEZOQU1FKGdwdGVfYWNjZXNzKSh2Y3B1LCBncHRlKTsKLQkJaWYgKCEoc3AtPnNwdFtpXSAmIFNQVEVfSE9TVF9XUklURUFCTEUpKSB7Ci0JCQlwdGVfYWNjZXNzICY9IH5BQ0NfV1JJVEVfTUFTSzsKLQkJCXJlc2V0X2hvc3RfcHJvdGVjdGlvbiA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlyZXNldF9ob3N0X3Byb3RlY3Rpb24gPSAxOwotCQl9CisJCWhvc3Rfd3JpdGFibGUgPSBzcC0+c3B0W2ldICYgU1BURV9IT1NUX1dSSVRFQUJMRTsKKwogCQlzZXRfc3B0ZSh2Y3B1LCAmc3AtPnNwdFtpXSwgcHRlX2FjY2VzcywgMCwgMCwKIAkJCSBpc19kaXJ0eV9ncHRlKGdwdGUpLCBQVF9QQUdFX1RBQkxFX0xFVkVMLCBnZm4sCiAJCQkgc3B0ZV90b19wZm4oc3AtPnNwdFtpXSksIHRydWUsIGZhbHNlLAotCQkJIHJlc2V0X2hvc3RfcHJvdGVjdGlvbik7CisJCQkgaG9zdF93cml0YWJsZSk7CiAJfQogCiAJcmV0dXJuICFucl9wcmVzZW50OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS5jCmluZGV4IGI4MWE5YjcuLjI1YmQxYmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0uYworKysgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9wYXJhLmg+CiAKICNpbmNsdWRlIDxhc20vdmlydGV4dC5oPgogI2luY2x1ZGUgInRyYWNlLmgiCkBAIC01MCw2ICs1MSwxMCBAQAogI2RlZmluZSBTVk1fRkVBVFVSRV9MQlJWICAgICAgICAgICAoMSA8PCAgMSkKICNkZWZpbmUgU1ZNX0ZFQVRVUkVfU1ZNTCAgICAgICAgICAgKDEgPDwgIDIpCiAjZGVmaW5lIFNWTV9GRUFUVVJFX05SSVAgICAgICAgICAgICgxIDw8ICAzKQorI2RlZmluZSBTVk1fRkVBVFVSRV9UU0NfUkFURSAgICAgICAoMSA8PCAgNCkKKyNkZWZpbmUgU1ZNX0ZFQVRVUkVfVk1DQl9DTEVBTiAgICAgKDEgPDwgIDUpCisjZGVmaW5lIFNWTV9GRUFUVVJFX0ZMVVNIX0FTSUQgICAgICgxIDw8ICA2KQorI2RlZmluZSBTVk1fRkVBVFVSRV9ERUNPREVfQVNTSVNUICAoMSA8PCAgNykKICNkZWZpbmUgU1ZNX0ZFQVRVUkVfUEFVU0VfRklMVEVSICAgKDEgPDwgMTApCiAKICNkZWZpbmUgTkVTVEVEX0VYSVRfSE9TVAkwCS8qIEV4aXQgaGFuZGxlZCBvbiBob3N0IGxldmVsICovCkBAIC05NywxMCArMTAyLDggQEAKIAl1bnNpZ25lZCBsb25nIHZtZXhpdF9yYXg7CiAKIAkvKiBjYWNoZSBmb3IgaW50ZXJjZXB0cyBvZiB0aGUgZ3Vlc3QgKi8KLQl1MTYgaW50ZXJjZXB0X2NyX3JlYWQ7Ci0JdTE2IGludGVyY2VwdF9jcl93cml0ZTsKLQl1MTYgaW50ZXJjZXB0X2RyX3JlYWQ7Ci0JdTE2IGludGVyY2VwdF9kcl93cml0ZTsKKwl1MzIgaW50ZXJjZXB0X2NyOworCXUzMiBpbnRlcmNlcHRfZHI7CiAJdTMyIGludGVyY2VwdF9leGNlcHRpb25zOwogCXU2NCBpbnRlcmNlcHQ7CiAKQEAgLTEyMyw3ICsxMjYsMTIgQEAKIAl1NjQgbmV4dF9yaXA7CiAKIAl1NjQgaG9zdF91c2VyX21zcnNbTlJfSE9TVF9TQVZFX1VTRVJfTVNSU107Ci0JdTY0IGhvc3RfZ3NfYmFzZTsKKwlzdHJ1Y3QgeworCQl1MTYgZnM7CisJCXUxNiBnczsKKwkJdTE2IGxkdDsKKwkJdTY0IGdzX2Jhc2U7CisJfSBob3N0OwogCiAJdTMyICptc3JwbTsKIApAQCAtMTMzLDYgKzE0MSw3IEBACiAKIAl1bnNpZ25lZCBpbnQzX2luamVjdGVkOwogCXVuc2lnbmVkIGxvbmcgaW50M19yaXA7CisJdTMyIGFwZl9yZWFzb247CiB9OwogCiAjZGVmaW5lIE1TUl9JTlZBTElECQkJMHhmZmZmZmZmZlUKQEAgLTE4MCwxNCArMTg5LDE1MSBAQAogc3RhdGljIGludCBuZXN0ZWRfc3ZtX2NoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdW5zaWduZWQgbnIsCiAJCQkJICAgICAgYm9vbCBoYXNfZXJyb3JfY29kZSwgdTMyIGVycm9yX2NvZGUpOwogCitlbnVtIHsKKwlWTUNCX0lOVEVSQ0VQVFMsIC8qIEludGVyY2VwdCB2ZWN0b3JzLCBUU0Mgb2Zmc2V0LAorCQkJICAgIHBhdXNlIGZpbHRlciBjb3VudCAqLworCVZNQ0JfUEVSTV9NQVAsICAgLyogSU9QTSBCYXNlIGFuZCBNU1JQTSBCYXNlICovCisJVk1DQl9BU0lELAkgLyogQVNJRCAqLworCVZNQ0JfSU5UUiwJIC8qIGludF9jdGwsIGludF92ZWN0b3IgKi8KKwlWTUNCX05QVCwgICAgICAgIC8qIG5wdF9lbiwgbkNSMywgZ1BBVCAqLworCVZNQ0JfQ1IsCSAvKiBDUjAsIENSMywgQ1I0LCBFRkVSICovCisJVk1DQl9EUiwgICAgICAgICAvKiBEUjYsIERSNyAqLworCVZNQ0JfRFQsICAgICAgICAgLyogR0RULCBJRFQgKi8KKwlWTUNCX1NFRywgICAgICAgIC8qIENTLCBEUywgU1MsIEVTLCBDUEwgKi8KKwlWTUNCX0NSMiwgICAgICAgIC8qIENSMiBvbmx5ICovCisJVk1DQl9MQlIsICAgICAgICAvKiBEQkdDVEwsIEJSX0ZST00sIEJSX1RPLCBMQVNUX0VYX0ZST00sIExBU1RfRVhfVE8gKi8KKwlWTUNCX0RJUlRZX01BWCwKK307CisKKy8qIFRQUiBhbmQgQ1IyIGFyZSBhbHdheXMgd3JpdHRlbiBiZWZvcmUgVk1SVU4gKi8KKyNkZWZpbmUgVk1DQl9BTFdBWVNfRElSVFlfTUFTSwkoKDFVIDw8IFZNQ0JfSU5UUikgfCAoMVUgPDwgVk1DQl9DUjIpKQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya19hbGxfZGlydHkoc3RydWN0IHZtY2IgKnZtY2IpCit7CisJdm1jYi0+Y29udHJvbC5jbGVhbiA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2FsbF9jbGVhbihzdHJ1Y3Qgdm1jYiAqdm1jYikKK3sKKwl2bWNiLT5jb250cm9sLmNsZWFuID0gKCgxIDw8IFZNQ0JfRElSVFlfTUFYKSAtIDEpCisJCQkgICAgICAgJiB+Vk1DQl9BTFdBWVNfRElSVFlfTUFTSzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hcmtfZGlydHkoc3RydWN0IHZtY2IgKnZtY2IsIGludCBiaXQpCit7CisJdm1jYi0+Y29udHJvbC5jbGVhbiAmPSB+KDEgPDwgYml0KTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgdmNwdV9zdm0gKnRvX3N2bShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZih2Y3B1LCBzdHJ1Y3QgdmNwdV9zdm0sIHZjcHUpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQorc3RhdGljIHZvaWQgcmVjYWxjX2ludGVyY2VwdHMoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7Ci0JcmV0dXJuIHN2bS0+bmVzdGVkLnZtY2I7CisJc3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjLCAqaDsKKwlzdHJ1Y3QgbmVzdGVkX3N0YXRlICpnOworCisJbWFya19kaXJ0eShzdm0tPnZtY2IsIFZNQ0JfSU5URVJDRVBUUyk7CisKKwlpZiAoIWlzX2d1ZXN0X21vZGUoJnN2bS0+dmNwdSkpCisJCXJldHVybjsKKworCWMgPSAmc3ZtLT52bWNiLT5jb250cm9sOworCWggPSAmc3ZtLT5uZXN0ZWQuaHNhdmUtPmNvbnRyb2w7CisJZyA9ICZzdm0tPm5lc3RlZDsKKworCWMtPmludGVyY2VwdF9jciA9IGgtPmludGVyY2VwdF9jciB8IGctPmludGVyY2VwdF9jcjsKKwljLT5pbnRlcmNlcHRfZHIgPSBoLT5pbnRlcmNlcHRfZHIgfCBnLT5pbnRlcmNlcHRfZHI7CisJYy0+aW50ZXJjZXB0X2V4Y2VwdGlvbnMgPSBoLT5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8IGctPmludGVyY2VwdF9leGNlcHRpb25zOworCWMtPmludGVyY2VwdCA9IGgtPmludGVyY2VwdCB8IGctPmludGVyY2VwdDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1jYiAqZ2V0X2hvc3Rfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKK3sKKwlpZiAoaXNfZ3Vlc3RfbW9kZSgmc3ZtLT52Y3B1KSkKKwkJcmV0dXJuIHN2bS0+bmVzdGVkLmhzYXZlOworCWVsc2UKKwkJcmV0dXJuIHN2bS0+dm1jYjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9jcl9pbnRlcmNlcHQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBiaXQpCit7CisJc3RydWN0IHZtY2IgKnZtY2IgPSBnZXRfaG9zdF92bWNiKHN2bSk7CisKKwl2bWNiLT5jb250cm9sLmludGVyY2VwdF9jciB8PSAoMVUgPDwgYml0KTsKKworCXJlY2FsY19pbnRlcmNlcHRzKHN2bSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbHJfY3JfaW50ZXJjZXB0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgYml0KQoreworCXN0cnVjdCB2bWNiICp2bWNiID0gZ2V0X2hvc3Rfdm1jYihzdm0pOworCisJdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3IgJj0gfigxVSA8PCBiaXQpOworCisJcmVjYWxjX2ludGVyY2VwdHMoc3ZtKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzX2NyX2ludGVyY2VwdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGJpdCkKK3sKKwlzdHJ1Y3Qgdm1jYiAqdm1jYiA9IGdldF9ob3N0X3ZtY2Ioc3ZtKTsKKworCXJldHVybiB2bWNiLT5jb250cm9sLmludGVyY2VwdF9jciAmICgxVSA8PCBiaXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RyX2ludGVyY2VwdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGJpdCkKK3sKKwlzdHJ1Y3Qgdm1jYiAqdm1jYiA9IGdldF9ob3N0X3ZtY2Ioc3ZtKTsKKworCXZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyIHw9ICgxVSA8PCBiaXQpOworCisJcmVjYWxjX2ludGVyY2VwdHMoc3ZtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNscl9kcl9pbnRlcmNlcHQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBiaXQpCit7CisJc3RydWN0IHZtY2IgKnZtY2IgPSBnZXRfaG9zdF92bWNiKHN2bSk7CisKKwl2bWNiLT5jb250cm9sLmludGVyY2VwdF9kciAmPSB+KDFVIDw8IGJpdCk7CisKKwlyZWNhbGNfaW50ZXJjZXB0cyhzdm0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2V4Y2VwdGlvbl9pbnRlcmNlcHQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBiaXQpCit7CisJc3RydWN0IHZtY2IgKnZtY2IgPSBnZXRfaG9zdF92bWNiKHN2bSk7CisKKwl2bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9ICgxVSA8PCBiaXQpOworCisJcmVjYWxjX2ludGVyY2VwdHMoc3ZtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNscl9leGNlcHRpb25faW50ZXJjZXB0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgYml0KQoreworCXN0cnVjdCB2bWNiICp2bWNiID0gZ2V0X2hvc3Rfdm1jYihzdm0pOworCisJdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyAmPSB+KDFVIDw8IGJpdCk7CisKKwlyZWNhbGNfaW50ZXJjZXB0cyhzdm0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ludGVyY2VwdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGJpdCkKK3sKKwlzdHJ1Y3Qgdm1jYiAqdm1jYiA9IGdldF9ob3N0X3ZtY2Ioc3ZtKTsKKworCXZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0IHw9ICgxVUxMIDw8IGJpdCk7CisKKwlyZWNhbGNfaW50ZXJjZXB0cyhzdm0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xyX2ludGVyY2VwdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGJpdCkKK3sKKwlzdHJ1Y3Qgdm1jYiAqdm1jYiA9IGdldF9ob3N0X3ZtY2Ioc3ZtKTsKKworCXZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0ICY9IH4oMVVMTCA8PCBiaXQpOworCisJcmVjYWxjX2ludGVyY2VwdHMoc3ZtKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9naWYoc3RydWN0IHZjcHVfc3ZtICpzdm0pCkBAIC0yNjQsMTEgKzQxMCw2IEBACiAKICNkZWZpbmUgTUFYX0lOU1RfU0laRSAxNQogCi1zdGF0aWMgaW5saW5lIHUzMiBzdm1faGFzKHUzMiBmZWF0KQotewotCXJldHVybiBzdm1fZmVhdHVyZXMgJiBmZWF0OwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xnaSh2b2lkKQogewogCWFzbSB2b2xhdGlsZSAoX19leChTVk1fQ0xHSSkpOwpAQCAtMjg0LDE2ICs0MjUsNiBAQAogCWFzbSB2b2xhdGlsZSAoX19leChTVk1fSU5WTFBHQSkgOiA6ICJhIihhZGRyKSwgImMiKGFzaWQpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZvcmNlX25ld19hc2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQl0b19zdm0odmNwdSktPmFzaWRfZ2VuZXJhdGlvbi0tOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfZ3Vlc3RfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlmb3JjZV9uZXdfYXNpZCh2Y3B1KTsKLX0KLQogc3RhdGljIGludCBnZXRfbnB0X2xldmVsKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NApAQCAtMzEwLDYgKzQ0MSw3IEBACiAJCWVmZXIgJj0gfkVGRVJfTE1FOwogCiAJdG9fc3ZtKHZjcHUpLT52bWNiLT5zYXZlLmVmZXIgPSBlZmVyIHwgRUZFUl9TVk1FOworCW1hcmtfZGlydHkodG9fc3ZtKHZjcHUpLT52bWNiLCBWTUNCX0NSKTsKIH0KIAogc3RhdGljIGludCBpc19leHRlcm5hbF9pbnRlcnJ1cHQodTMyIGluZm8pCkBAIC0zNDcsNyArNDc5LDcgQEAKIAkJc3ZtLT5uZXh0X3JpcCA9IHN2bS0+dm1jYi0+Y29udHJvbC5uZXh0X3JpcDsKIAogCWlmICghc3ZtLT5uZXh0X3JpcCkgewotCQlpZiAoZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCAwLCBFTVVMVFlQRV9TS0lQKSAhPQorCQlpZiAoZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBFTVVMVFlQRV9TS0lQKSAhPQogCQkJCUVNVUxBVEVfRE9ORSkKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTk9QXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKQEAgLTM3NCw3ICs1MDYsNyBAQAogCSAgICBuZXN0ZWRfc3ZtX2NoZWNrX2V4Y2VwdGlvbihzdm0sIG5yLCBoYXNfZXJyb3JfY29kZSwgZXJyb3JfY29kZSkpCiAJCXJldHVybjsKIAotCWlmIChuciA9PSBCUF9WRUNUT1IgJiYgIXN2bV9oYXMoU1ZNX0ZFQVRVUkVfTlJJUCkpIHsKKwlpZiAobnIgPT0gQlBfVkVDVE9SICYmICFzdGF0aWNfY3B1X2hhcyhYODZfRkVBVFVSRV9OUklQUykpIHsKIAkJdW5zaWduZWQgbG9uZyByaXAsIG9sZF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSk7CiAKIAkJLyoKQEAgLTY3MCw3ICs4MDIsNyBAQAogCiAJc3ZtX2ZlYXR1cmVzID0gY3B1aWRfZWR4KFNWTV9DUFVJRF9GVU5DKTsKIAotCWlmICghc3ZtX2hhcyhTVk1fRkVBVFVSRV9OUFQpKQorCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05QVCkpCiAJCW5wdF9lbmFibGVkID0gZmFsc2U7CiAKIAlpZiAobnB0X2VuYWJsZWQgJiYgIW5wdCkgewpAQCAtNzI1LDEzICs4NTcsMTUgQEAKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAl1NjQgZ190c2Nfb2Zmc2V0ID0gMDsKIAotCWlmIChpc19uZXN0ZWQoc3ZtKSkgeworCWlmIChpc19ndWVzdF9tb2RlKHZjcHUpKSB7CiAJCWdfdHNjX29mZnNldCA9IHN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0IC0KIAkJCSAgICAgICBzdm0tPm5lc3RlZC5oc2F2ZS0+Y29udHJvbC50c2Nfb2Zmc2V0OwogCQlzdm0tPm5lc3RlZC5oc2F2ZS0+Y29udHJvbC50c2Nfb2Zmc2V0ID0gb2Zmc2V0OwogCX0KIAogCXN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0ID0gb2Zmc2V0ICsgZ190c2Nfb2Zmc2V0OworCisJbWFya19kaXJ0eShzdm0tPnZtY2IsIFZNQ0JfSU5URVJDRVBUUyk7CiB9CiAKIHN0YXRpYyB2b2lkIHN2bV9hZGp1c3RfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHM2NCBhZGp1c3RtZW50KQpAQCAtNzM5LDggKzg3Myw5IEBACiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKIAlzdm0tPnZtY2ItPmNvbnRyb2wudHNjX29mZnNldCArPSBhZGp1c3RtZW50OwotCWlmIChpc19uZXN0ZWQoc3ZtKSkKKwlpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSkKIAkJc3ZtLT5uZXN0ZWQuaHNhdmUtPmNvbnRyb2wudHNjX29mZnNldCArPSBhZGp1c3RtZW50OworCW1hcmtfZGlydHkoc3ZtLT52bWNiLCBWTUNCX0lOVEVSQ0VQVFMpOwogfQogCiBzdGF0aWMgdm9pZCBpbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0pCkBAIC03NDksNjIgKzg4NCw2MiBAQAogCXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2F2ZSA9ICZzdm0tPnZtY2ItPnNhdmU7CiAKIAlzdm0tPnZjcHUuZnB1X2FjdGl2ZSA9IDE7CisJc3ZtLT52Y3B1LmFyY2guaGZsYWdzID0gMDsKIAotCWNvbnRyb2wtPmludGVyY2VwdF9jcl9yZWFkID0JSU5URVJDRVBUX0NSMF9NQVNLIHwKLQkJCQkJSU5URVJDRVBUX0NSM19NQVNLIHwKLQkJCQkJSU5URVJDRVBUX0NSNF9NQVNLOworCXNldF9jcl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQ1IwX1JFQUQpOworCXNldF9jcl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQ1IzX1JFQUQpOworCXNldF9jcl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQ1I0X1JFQUQpOworCXNldF9jcl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQ1IwX1dSSVRFKTsKKwlzZXRfY3JfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0NSM19XUklURSk7CisJc2V0X2NyX2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9DUjRfV1JJVEUpOworCXNldF9jcl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQ1I4X1dSSVRFKTsKIAotCWNvbnRyb2wtPmludGVyY2VwdF9jcl93cml0ZSA9CUlOVEVSQ0VQVF9DUjBfTUFTSyB8Ci0JCQkJCUlOVEVSQ0VQVF9DUjNfTUFTSyB8Ci0JCQkJCUlOVEVSQ0VQVF9DUjRfTUFTSyB8Ci0JCQkJCUlOVEVSQ0VQVF9DUjhfTUFTSzsKKwlzZXRfZHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0RSMF9SRUFEKTsKKwlzZXRfZHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0RSMV9SRUFEKTsKKwlzZXRfZHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0RSMl9SRUFEKTsKKwlzZXRfZHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0RSM19SRUFEKTsKKwlzZXRfZHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0RSNF9SRUFEKTsKKwlzZXRfZHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0RSNV9SRUFEKTsKKwlzZXRfZHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0RSNl9SRUFEKTsKKwlzZXRfZHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0RSN19SRUFEKTsKIAotCWNvbnRyb2wtPmludGVyY2VwdF9kcl9yZWFkID0JSU5URVJDRVBUX0RSMF9NQVNLIHwKLQkJCQkJSU5URVJDRVBUX0RSMV9NQVNLIHwKLQkJCQkJSU5URVJDRVBUX0RSMl9NQVNLIHwKLQkJCQkJSU5URVJDRVBUX0RSM19NQVNLIHwKLQkJCQkJSU5URVJDRVBUX0RSNF9NQVNLIHwKLQkJCQkJSU5URVJDRVBUX0RSNV9NQVNLIHwKLQkJCQkJSU5URVJDRVBUX0RSNl9NQVNLIHwKLQkJCQkJSU5URVJDRVBUX0RSN19NQVNLOworCXNldF9kcl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfRFIwX1dSSVRFKTsKKwlzZXRfZHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0RSMV9XUklURSk7CisJc2V0X2RyX2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9EUjJfV1JJVEUpOworCXNldF9kcl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfRFIzX1dSSVRFKTsKKwlzZXRfZHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0RSNF9XUklURSk7CisJc2V0X2RyX2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9EUjVfV1JJVEUpOworCXNldF9kcl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfRFI2X1dSSVRFKTsKKwlzZXRfZHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0RSN19XUklURSk7CiAKLQljb250cm9sLT5pbnRlcmNlcHRfZHJfd3JpdGUgPQlJTlRFUkNFUFRfRFIwX01BU0sgfAotCQkJCQlJTlRFUkNFUFRfRFIxX01BU0sgfAotCQkJCQlJTlRFUkNFUFRfRFIyX01BU0sgfAotCQkJCQlJTlRFUkNFUFRfRFIzX01BU0sgfAotCQkJCQlJTlRFUkNFUFRfRFI0X01BU0sgfAotCQkJCQlJTlRFUkNFUFRfRFI1X01BU0sgfAotCQkJCQlJTlRFUkNFUFRfRFI2X01BU0sgfAotCQkJCQlJTlRFUkNFUFRfRFI3X01BU0s7CisJc2V0X2V4Y2VwdGlvbl9pbnRlcmNlcHQoc3ZtLCBQRl9WRUNUT1IpOworCXNldF9leGNlcHRpb25faW50ZXJjZXB0KHN2bSwgVURfVkVDVE9SKTsKKwlzZXRfZXhjZXB0aW9uX2ludGVyY2VwdChzdm0sIE1DX1ZFQ1RPUik7CiAKLQljb250cm9sLT5pbnRlcmNlcHRfZXhjZXB0aW9ucyA9ICgxIDw8IFBGX1ZFQ1RPUikgfAotCQkJCQkoMSA8PCBVRF9WRUNUT1IpIHwKLQkJCQkJKDEgPDwgTUNfVkVDVE9SKTsKLQotCi0JY29udHJvbC0+aW50ZXJjZXB0ID0JKDFVTEwgPDwgSU5URVJDRVBUX0lOVFIpIHwKLQkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfTk1JKSB8Ci0JCQkJKDFVTEwgPDwgSU5URVJDRVBUX1NNSSkgfAotCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9TRUxFQ1RJVkVfQ1IwKSB8Ci0JCQkJKDFVTEwgPDwgSU5URVJDRVBUX0NQVUlEKSB8Ci0JCQkJKDFVTEwgPDwgSU5URVJDRVBUX0lOVkQpIHwKLQkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfSExUKSB8Ci0JCQkJKDFVTEwgPDwgSU5URVJDRVBUX0lOVkxQRykgfAotCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9JTlZMUEdBKSB8Ci0JCQkJKDFVTEwgPDwgSU5URVJDRVBUX0lPSU9fUFJPVCkgfAotCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9NU1JfUFJPVCkgfAotCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9UQVNLX1NXSVRDSCkgfAotCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9TSFVURE9XTikgfAotCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9WTVJVTikgfAotCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9WTU1DQUxMKSB8Ci0JCQkJKDFVTEwgPDwgSU5URVJDRVBUX1ZNTE9BRCkgfAotCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9WTVNBVkUpIHwKLQkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfU1RHSSkgfAotCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9DTEdJKSB8Ci0JCQkJKDFVTEwgPDwgSU5URVJDRVBUX1NLSU5JVCkgfAotCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9XQklOVkQpIHwKLQkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfTU9OSVRPUikgfAotCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9NV0FJVCk7CisJc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9JTlRSKTsKKwlzZXRfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX05NSSk7CisJc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9TTUkpOworCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfU0VMRUNUSVZFX0NSMCk7CisJc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9DUFVJRCk7CisJc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9JTlZEKTsKKwlzZXRfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0hMVCk7CisJc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9JTlZMUEcpOworCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfSU5WTFBHQSk7CisJc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9JT0lPX1BST1QpOworCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfTVNSX1BST1QpOworCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfVEFTS19TV0lUQ0gpOworCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfU0hVVERPV04pOworCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfVk1SVU4pOworCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfVk1NQ0FMTCk7CisJc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9WTUxPQUQpOworCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfVk1TQVZFKTsKKwlzZXRfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX1NUR0kpOworCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQ0xHSSk7CisJc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9TS0lOSVQpOworCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfV0JJTlZEKTsKKwlzZXRfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX01PTklUT1IpOworCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfTVdBSVQpOworCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfWFNFVEJWKTsKIAogCWNvbnRyb2wtPmlvcG1fYmFzZV9wYSA9IGlvcG1fYmFzZTsKIAljb250cm9sLT5tc3JwbV9iYXNlX3BhID0gX19wYShzdm0tPm1zcnBtKTsKQEAgLTg1NSwyNSArOTkwLDI3IEBACiAJaWYgKG5wdF9lbmFibGVkKSB7CiAJCS8qIFNldHVwIFZNQ0IgZm9yIE5lc3RlZCBQYWdpbmcgKi8KIAkJY29udHJvbC0+bmVzdGVkX2N0bCA9IDE7Ci0JCWNvbnRyb2wtPmludGVyY2VwdCAmPSB+KCgxVUxMIDw8IElOVEVSQ0VQVF9UQVNLX1NXSVRDSCkgfAotCQkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfSU5WTFBHKSk7Ci0JCWNvbnRyb2wtPmludGVyY2VwdF9leGNlcHRpb25zICY9IH4oMSA8PCBQRl9WRUNUT1IpOwotCQljb250cm9sLT5pbnRlcmNlcHRfY3JfcmVhZCAmPSB+SU5URVJDRVBUX0NSM19NQVNLOwotCQljb250cm9sLT5pbnRlcmNlcHRfY3Jfd3JpdGUgJj0gfklOVEVSQ0VQVF9DUjNfTUFTSzsKKwkJY2xyX2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9UQVNLX1NXSVRDSCk7CisJCWNscl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfSU5WTFBHKTsKKwkJY2xyX2V4Y2VwdGlvbl9pbnRlcmNlcHQoc3ZtLCBQRl9WRUNUT1IpOworCQljbHJfY3JfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0NSM19SRUFEKTsKKwkJY2xyX2NyX2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9DUjNfV1JJVEUpOwogCQlzYXZlLT5nX3BhdCA9IDB4MDAwNzA0MDYwMDA3MDQwNlVMTDsKIAkJc2F2ZS0+Y3IzID0gMDsKIAkJc2F2ZS0+Y3I0ID0gMDsKIAl9Ci0JZm9yY2VfbmV3X2FzaWQoJnN2bS0+dmNwdSk7CisJc3ZtLT5hc2lkX2dlbmVyYXRpb24gPSAwOwogCiAJc3ZtLT5uZXN0ZWQudm1jYiA9IDA7CiAJc3ZtLT52Y3B1LmFyY2guaGZsYWdzID0gMDsKIAotCWlmIChzdm1faGFzKFNWTV9GRUFUVVJFX1BBVVNFX0ZJTFRFUikpIHsKKwlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BBVVNFRklMVEVSKSkgewogCQljb250cm9sLT5wYXVzZV9maWx0ZXJfY291bnQgPSAzMDAwOwotCQljb250cm9sLT5pbnRlcmNlcHQgfD0gKDFVTEwgPDwgSU5URVJDRVBUX1BBVVNFKTsKKwkJc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9QQVVTRSk7CiAJfQogCisJbWFya19hbGxfZGlydHkoc3ZtLT52bWNiKTsKKwogCWVuYWJsZV9naWYoc3ZtKTsKIH0KIApAQCAtOTkwLDggKzExMjcsMTYgQEAKIAogCWlmICh1bmxpa2VseShjcHUgIT0gdmNwdS0+Y3B1KSkgewogCQlzdm0tPmFzaWRfZ2VuZXJhdGlvbiA9IDA7CisJCW1hcmtfYWxsX2RpcnR5KHN2bS0+dm1jYik7CiAJfQogCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXJkbXNybChNU1JfR1NfQkFTRSwgdG9fc3ZtKHZjcHUpLT5ob3N0LmdzX2Jhc2UpOworI2VuZGlmCisJc2F2ZXNlZ21lbnQoZnMsIHN2bS0+aG9zdC5mcyk7CisJc2F2ZXNlZ21lbnQoZ3MsIHN2bS0+aG9zdC5ncyk7CisJc3ZtLT5ob3N0LmxkdCA9IGt2bV9yZWFkX2xkdCgpOworCiAJZm9yIChpID0gMDsgaSA8IE5SX0hPU1RfU0FWRV9VU0VSX01TUlM7IGkrKykKIAkJcmRtc3JsKGhvc3Rfc2F2ZV91c2VyX21zcnNbaV0sIHN2bS0+aG9zdF91c2VyX21zcnNbaV0pOwogfQpAQCAtMTAwMiw2ICsxMTQ3LDE0IEBACiAJaW50IGk7CiAKIAkrK3ZjcHUtPnN0YXQuaG9zdF9zdGF0ZV9yZWxvYWQ7CisJa3ZtX2xvYWRfbGR0KHN2bS0+aG9zdC5sZHQpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwlsb2Fkc2VnbWVudChmcywgc3ZtLT5ob3N0LmZzKTsKKwlsb2FkX2dzX2luZGV4KHN2bS0+aG9zdC5ncyk7CisJd3Jtc3JsKE1TUl9LRVJORUxfR1NfQkFTRSwgY3VycmVudC0+dGhyZWFkLmdzKTsKKyNlbHNlCisJbG9hZHNlZ21lbnQoZ3MsIHN2bS0+aG9zdC5ncyk7CisjZW5kaWYKIAlmb3IgKGkgPSAwOyBpIDwgTlJfSE9TVF9TQVZFX1VTRVJfTVNSUzsgaSsrKQogCQl3cm1zcmwoaG9zdF9zYXZlX3VzZXJfbXNyc1tpXSwgc3ZtLT5ob3N0X3VzZXJfbXNyc1tpXSk7CiB9CkBAIC0xMDIxLDcgKzExNzQsNyBAQAogCXN3aXRjaCAocmVnKSB7CiAJY2FzZSBWQ1BVX0VYUkVHX1BEUFRSOgogCQlCVUdfT04oIW5wdF9lbmFibGVkKTsKLQkJbG9hZF9wZHB0cnModmNwdSwgdmNwdS0+YXJjaC53YWxrX21tdSwgdmNwdS0+YXJjaC5jcjMpOworCQlsb2FkX3BkcHRycyh2Y3B1LCB2Y3B1LT5hcmNoLndhbGtfbW11LCBrdm1fcmVhZF9jcjModmNwdSkpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKQEAgLTEwMzAsMTIgKzExODMsMTIgQEAKIAogc3RhdGljIHZvaWQgc3ZtX3NldF92aW50cihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIHsKLQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0IHw9IDFVTEwgPDwgSU5URVJDRVBUX1ZJTlRSOworCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfVklOVFIpOwogfQogCiBzdGF0aWMgdm9pZCBzdm1fY2xlYXJfdmludHIoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7Ci0Jc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCAmPSB+KDFVTEwgPDwgSU5URVJDRVBUX1ZJTlRSKTsKKwljbHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX1ZJTlRSKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2bWNiX3NlZyAqc3ZtX3NlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpCkBAIC0xMTUwLDYgKzEzMDMsNyBAQAogCiAJc3ZtLT52bWNiLT5zYXZlLmlkdHIubGltaXQgPSBkdC0+c2l6ZTsKIAlzdm0tPnZtY2ItPnNhdmUuaWR0ci5iYXNlID0gZHQtPmFkZHJlc3MgOworCW1hcmtfZGlydHkoc3ZtLT52bWNiLCBWTUNCX0RUKTsKIH0KIAogc3RhdGljIHZvaWQgc3ZtX2dldF9nZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY19wdHIgKmR0KQpAQCAtMTE2NiwxOSArMTMyMCwyMyBAQAogCiAJc3ZtLT52bWNiLT5zYXZlLmdkdHIubGltaXQgPSBkdC0+c2l6ZTsKIAlzdm0tPnZtY2ItPnNhdmUuZ2R0ci5iYXNlID0gZHQtPmFkZHJlc3MgOworCW1hcmtfZGlydHkoc3ZtLT52bWNiLCBWTUNCX0RUKTsKIH0KIAogc3RhdGljIHZvaWQgc3ZtX2RlY2FjaGVfY3IwX2d1ZXN0X2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogfQogCitzdGF0aWMgdm9pZCBzdm1fZGVjYWNoZV9jcjMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworfQorCiBzdGF0aWMgdm9pZCBzdm1fZGVjYWNoZV9jcjRfZ3Vlc3RfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9jcjBfaW50ZXJjZXB0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogewotCXN0cnVjdCB2bWNiICp2bWNiID0gc3ZtLT52bWNiOwogCXVsb25nIGdjcjAgPSBzdm0tPnZjcHUuYXJjaC5jcjA7CiAJdTY0ICpoY3IwID0gJnN2bS0+dm1jYi0+c2F2ZS5jcjA7CiAKQEAgLTExODgsMjcgKzEzNDYsMTQgQEAKIAkJKmhjcjAgPSAoKmhjcjAgJiB+U1ZNX0NSMF9TRUxFQ1RJVkVfTUFTSykKIAkJCXwgKGdjcjAgJiBTVk1fQ1IwX1NFTEVDVElWRV9NQVNLKTsKIAorCW1hcmtfZGlydHkoc3ZtLT52bWNiLCBWTUNCX0NSKTsKIAogCWlmIChnY3IwID09ICpoY3IwICYmIHN2bS0+dmNwdS5mcHVfYWN0aXZlKSB7Ci0JCXZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3JlYWQgJj0gfklOVEVSQ0VQVF9DUjBfTUFTSzsKLQkJdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3Jfd3JpdGUgJj0gfklOVEVSQ0VQVF9DUjBfTUFTSzsKLQkJaWYgKGlzX25lc3RlZChzdm0pKSB7Ci0JCQlzdHJ1Y3Qgdm1jYiAqaHNhdmUgPSBzdm0tPm5lc3RlZC5oc2F2ZTsKLQotCQkJaHNhdmUtPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3JlYWQgICY9IH5JTlRFUkNFUFRfQ1IwX01BU0s7Ci0JCQloc2F2ZS0+Y29udHJvbC5pbnRlcmNlcHRfY3Jfd3JpdGUgJj0gfklOVEVSQ0VQVF9DUjBfTUFTSzsKLQkJCXZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3JlYWQgIHw9IHN2bS0+bmVzdGVkLmludGVyY2VwdF9jcl9yZWFkOwotCQkJdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3Jfd3JpdGUgfD0gc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0X2NyX3dyaXRlOwotCQl9CisJCWNscl9jcl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQ1IwX1JFQUQpOworCQljbHJfY3JfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0NSMF9XUklURSk7CiAJfSBlbHNlIHsKLQkJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl9yZWFkIHw9IElOVEVSQ0VQVF9DUjBfTUFTSzsKLQkJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSB8PSBJTlRFUkNFUFRfQ1IwX01BU0s7Ci0JCWlmIChpc19uZXN0ZWQoc3ZtKSkgewotCQkJc3RydWN0IHZtY2IgKmhzYXZlID0gc3ZtLT5uZXN0ZWQuaHNhdmU7Ci0KLQkJCWhzYXZlLT5jb250cm9sLmludGVyY2VwdF9jcl9yZWFkIHw9IElOVEVSQ0VQVF9DUjBfTUFTSzsKLQkJCWhzYXZlLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSB8PSBJTlRFUkNFUFRfQ1IwX01BU0s7Ci0JCX0KKwkJc2V0X2NyX2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9DUjBfUkVBRCk7CisJCXNldF9jcl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQ1IwX1dSSVRFKTsKIAl9CiB9CiAKQEAgLTEyMTYsNyArMTM2MSw3IEBACiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKLQlpZiAoaXNfbmVzdGVkKHN2bSkpIHsKKwlpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSkgewogCQkvKgogCQkgKiBXZSBhcmUgaGVyZSBiZWNhdXNlIHdlIHJ1biBpbiBuZXN0ZWQgbW9kZSwgdGhlIGhvc3Qga3ZtCiAJCSAqIGludGVyY2VwdHMgY3IwIHdyaXRlcyBidXQgdGhlIGwxIGh5cGVydmlzb3IgZG9lcyBub3QuCkBAIC0xMjY4LDYgKzE0MTMsNyBAQAogCSAqLwogCWNyMCAmPSB+KFg4Nl9DUjBfQ0QgfCBYODZfQ1IwX05XKTsKIAlzdm0tPnZtY2ItPnNhdmUuY3IwID0gY3IwOworCW1hcmtfZGlydHkoc3ZtLT52bWNiLCBWTUNCX0NSKTsKIAl1cGRhdGVfY3IwX2ludGVyY2VwdChzdm0pOwogfQogCkBAIC0xMjc3LDEzICsxNDIzLDE0IEBACiAJdW5zaWduZWQgbG9uZyBvbGRfY3I0ID0gdG9fc3ZtKHZjcHUpLT52bWNiLT5zYXZlLmNyNDsKIAogCWlmIChucHRfZW5hYmxlZCAmJiAoKG9sZF9jcjQgXiBjcjQpICYgWDg2X0NSNF9QR0UpKQotCQlmb3JjZV9uZXdfYXNpZCh2Y3B1KTsKKwkJc3ZtX2ZsdXNoX3RsYih2Y3B1KTsKIAogCXZjcHUtPmFyY2guY3I0ID0gY3I0OwogCWlmICghbnB0X2VuYWJsZWQpCiAJCWNyNCB8PSBYODZfQ1I0X1BBRTsKIAljcjQgfD0gaG9zdF9jcjRfbWNlOwogCXRvX3N2bSh2Y3B1KS0+dm1jYi0+c2F2ZS5jcjQgPSBjcjQ7CisJbWFya19kaXJ0eSh0b19zdm0odmNwdSktPnZtY2IsIFZNQ0JfQ1IpOwogfQogCiBzdGF0aWMgdm9pZCBzdm1fc2V0X3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LApAQCAtMTMxMiwyNiArMTQ1OSwyNSBAQAogCQkJPSAoc3ZtLT52bWNiLT5zYXZlLmNzLmF0dHJpYgogCQkJICAgPj4gU1ZNX1NFTEVDVE9SX0RQTF9TSElGVCkgJiAzOwogCisJbWFya19kaXJ0eShzdm0tPnZtY2IsIFZNQ0JfU0VHKTsKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX2RiX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKLQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgJj0KLQkJfigoMSA8PCBEQl9WRUNUT1IpIHwgKDEgPDwgQlBfVkVDVE9SKSk7CisJY2xyX2V4Y2VwdGlvbl9pbnRlcmNlcHQoc3ZtLCBEQl9WRUNUT1IpOworCWNscl9leGNlcHRpb25faW50ZXJjZXB0KHN2bSwgQlBfVkVDVE9SKTsKIAogCWlmIChzdm0tPm5taV9zaW5nbGVzdGVwKQotCQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgfD0gKDEgPDwgREJfVkVDVE9SKTsKKwkJc2V0X2V4Y2VwdGlvbl9pbnRlcmNlcHQoc3ZtLCBEQl9WRUNUT1IpOwogCiAJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX0VOQUJMRSkgewogCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJgogCQkgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpCi0JCQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgfD0KLQkJCQkxIDw8IERCX1ZFQ1RPUjsKKwkJCXNldF9leGNlcHRpb25faW50ZXJjZXB0KHN2bSwgREJfVkVDVE9SKTsKIAkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9TV19CUCkKLQkJCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PQotCQkJCTEgPDwgQlBfVkVDVE9SOworCQkJc2V0X2V4Y2VwdGlvbl9pbnRlcmNlcHQoc3ZtLCBCUF9WRUNUT1IpOwogCX0gZWxzZQogCQl2Y3B1LT5ndWVzdF9kZWJ1ZyA9IDA7CiB9CkBAIC0xMzQ1LDIzICsxNDkxLDExIEBACiAJZWxzZQogCQlzdm0tPnZtY2ItPnNhdmUuZHI3ID0gdmNwdS0+YXJjaC5kcjc7CiAKKwltYXJrX2RpcnR5KHN2bS0+dm1jYiwgVk1DQl9EUik7CisKIAl1cGRhdGVfZGJfaW50ZXJjZXB0KHZjcHUpOwogfQogCi1zdGF0aWMgdm9pZCBsb2FkX2hvc3RfbXNycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXdybXNybChNU1JfR1NfQkFTRSwgdG9fc3ZtKHZjcHUpLT5ob3N0X2dzX2Jhc2UpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHNhdmVfaG9zdF9tc3JzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JcmRtc3JsKE1TUl9HU19CQVNFLCB0b19zdm0odmNwdSktPmhvc3RfZ3NfYmFzZSk7Ci0jZW5kaWYKLX0KLQogc3RhdGljIHZvaWQgbmV3X2FzaWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBzdm1fY3B1X2RhdGEgKnNkKQogewogCWlmIChzZC0+bmV4dF9hc2lkID4gc2QtPm1heF9hc2lkKSB7CkBAIC0xMzcyLDYgKzE1MDYsOCBAQAogCiAJc3ZtLT5hc2lkX2dlbmVyYXRpb24gPSBzZC0+YXNpZF9nZW5lcmF0aW9uOwogCXN2bS0+dm1jYi0+Y29udHJvbC5hc2lkID0gc2QtPm5leHRfYXNpZCsrOworCisJbWFya19kaXJ0eShzdm0tPnZtY2IsIFZNQ0JfQVNJRCk7CiB9CiAKIHN0YXRpYyB2b2lkIHN2bV9zZXRfZHI3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKQEAgLTEzNzksMjAgKzE1MTUsNDAgQEAKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAogCXN2bS0+dm1jYi0+c2F2ZS5kcjcgPSB2YWx1ZTsKKwltYXJrX2RpcnR5KHN2bS0+dm1jYiwgVk1DQl9EUik7CiB9CiAKIHN0YXRpYyBpbnQgcGZfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogewotCXU2NCBmYXVsdF9hZGRyZXNzOworCXU2NCBmYXVsdF9hZGRyZXNzID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18yOwogCXUzMiBlcnJvcl9jb2RlOworCWludCByID0gMTsKIAotCWZhdWx0X2FkZHJlc3MgID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18yOwotCWVycm9yX2NvZGUgPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzE7CisJc3dpdGNoIChzdm0tPmFwZl9yZWFzb24pIHsKKwlkZWZhdWx0OgorCQllcnJvcl9jb2RlID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xOwogCi0JdHJhY2Vfa3ZtX3BhZ2VfZmF1bHQoZmF1bHRfYWRkcmVzcywgZXJyb3JfY29kZSk7Ci0JaWYgKCFucHRfZW5hYmxlZCAmJiBrdm1fZXZlbnRfbmVlZHNfcmVpbmplY3Rpb24oJnN2bS0+dmNwdSkpCi0JCWt2bV9tbXVfdW5wcm90ZWN0X3BhZ2VfdmlydCgmc3ZtLT52Y3B1LCBmYXVsdF9hZGRyZXNzKTsKLQlyZXR1cm4ga3ZtX21tdV9wYWdlX2ZhdWx0KCZzdm0tPnZjcHUsIGZhdWx0X2FkZHJlc3MsIGVycm9yX2NvZGUpOworCQl0cmFjZV9rdm1fcGFnZV9mYXVsdChmYXVsdF9hZGRyZXNzLCBlcnJvcl9jb2RlKTsKKwkJaWYgKCFucHRfZW5hYmxlZCAmJiBrdm1fZXZlbnRfbmVlZHNfcmVpbmplY3Rpb24oJnN2bS0+dmNwdSkpCisJCQlrdm1fbW11X3VucHJvdGVjdF9wYWdlX3ZpcnQoJnN2bS0+dmNwdSwgZmF1bHRfYWRkcmVzcyk7CisJCXIgPSBrdm1fbW11X3BhZ2VfZmF1bHQoJnN2bS0+dmNwdSwgZmF1bHRfYWRkcmVzcywgZXJyb3JfY29kZSwKKwkJCXN2bS0+dm1jYi0+Y29udHJvbC5pbnNuX2J5dGVzLAorCQkJc3ZtLT52bWNiLT5jb250cm9sLmluc25fbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBLVk1fUFZfUkVBU09OX1BBR0VfTk9UX1BSRVNFTlQ6CisJCXN2bS0+YXBmX3JlYXNvbiA9IDA7CisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCWt2bV9hc3luY19wZl90YXNrX3dhaXQoZmF1bHRfYWRkcmVzcyk7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJYnJlYWs7CisJY2FzZSBLVk1fUFZfUkVBU09OX1BBR0VfUkVBRFk6CisJCXN2bS0+YXBmX3JlYXNvbiA9IDA7CisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCWt2bV9hc3luY19wZl90YXNrX3dha2UoZmF1bHRfYWRkcmVzcyk7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByOwogfQogCiBzdGF0aWMgaW50IGRiX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKQEAgLTE0NDAsNyArMTU5Niw3IEBACiB7CiAJaW50IGVyOwogCi0JZXIgPSBlbXVsYXRlX2luc3RydWN0aW9uKCZzdm0tPnZjcHUsIDAsIDAsIEVNVUxUWVBFX1RSQVBfVUQpOworCWVyID0gZW11bGF0ZV9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1LCBFTVVMVFlQRV9UUkFQX1VEKTsKIAlpZiAoZXIgIT0gRU1VTEFURV9ET05FKQogCQlrdm1fcXVldWVfZXhjZXB0aW9uKCZzdm0tPnZjcHUsIFVEX1ZFQ1RPUik7CiAJcmV0dXJuIDE7CkBAIC0xNDQ5LDIxICsxNjA1LDggQEAKIHN0YXRpYyB2b2lkIHN2bV9mcHVfYWN0aXZhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwotCXUzMiBleGNwOwogCi0JaWYgKGlzX25lc3RlZChzdm0pKSB7Ci0JCXUzMiBoX2V4Y3AsIG5fZXhjcDsKLQotCQloX2V4Y3AgID0gc3ZtLT5uZXN0ZWQuaHNhdmUtPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnM7Ci0JCW5fZXhjcCAgPSBzdm0tPm5lc3RlZC5pbnRlcmNlcHRfZXhjZXB0aW9uczsKLQkJaF9leGNwICY9IH4oMSA8PCBOTV9WRUNUT1IpOwotCQlleGNwICAgID0gaF9leGNwIHwgbl9leGNwOwotCX0gZWxzZSB7Ci0JCWV4Y3AgID0gc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zOwotCQlleGNwICY9IH4oMSA8PCBOTV9WRUNUT1IpOwotCX0KLQotCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyA9IGV4Y3A7CisJY2xyX2V4Y2VwdGlvbl9pbnRlcmNlcHQoc3ZtLCBOTV9WRUNUT1IpOwogCiAJc3ZtLT52Y3B1LmZwdV9hY3RpdmUgPSAxOwogCXVwZGF0ZV9jcjBfaW50ZXJjZXB0KHN2bSk7CkBAIC0xNTcwLDcgKzE3MTMsNyBAQAogCXN0cmluZyA9IChpb19pbmZvICYgU1ZNX0lPSU9fU1RSX01BU0spICE9IDA7CiAJaW4gPSAoaW9faW5mbyAmIFNWTV9JT0lPX1RZUEVfTUFTSykgIT0gMDsKIAlpZiAoc3RyaW5nIHx8IGluKQotCQlyZXR1cm4gZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCAwLCAwKSA9PSBFTVVMQVRFX0RPTkU7CisJCXJldHVybiBlbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDApID09IEVNVUxBVEVfRE9ORTsKIAogCXBvcnQgPSBpb19pbmZvID4+IDE2OwogCXNpemUgPSAoaW9faW5mbyAmIFNWTV9JT0lPX1NJWkVfTUFTSykgPj4gU1ZNX0lPSU9fU0laRV9TSElGVDsKQEAgLTE2MjQsMTcgKzE3NjcsMTkgQEAKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAogCXN2bS0+dm1jYi0+Y29udHJvbC5uZXN0ZWRfY3IzID0gcm9vdDsKLQlmb3JjZV9uZXdfYXNpZCh2Y3B1KTsKKwltYXJrX2RpcnR5KHN2bS0+dm1jYiwgVk1DQl9OUFQpOworCXN2bV9mbHVzaF90bGIodmNwdSk7CiB9CiAKLXN0YXRpYyB2b2lkIG5lc3RlZF9zdm1faW5qZWN0X25wZl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyB2b2lkIG5lc3RlZF9zdm1faW5qZWN0X25wZl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkgICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmZhdWx0KQogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCiAJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZSA9IFNWTV9FWElUX05QRjsKIAlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlX2hpID0gMDsKLQlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzEgPSB2Y3B1LT5hcmNoLmZhdWx0LmVycm9yX2NvZGU7Ci0Jc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18yID0gdmNwdS0+YXJjaC5mYXVsdC5hZGRyZXNzOworCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMSA9IGZhdWx0LT5lcnJvcl9jb2RlOworCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMiA9IGZhdWx0LT5hZGRyZXNzOwogCiAJbmVzdGVkX3N2bV92bWV4aXQoc3ZtKTsKIH0KQEAgLTE2ODAsNyArMTgyNSw3IEBACiB7CiAJaW50IHZtZXhpdDsKIAotCWlmICghaXNfbmVzdGVkKHN2bSkpCisJaWYgKCFpc19ndWVzdF9tb2RlKCZzdm0tPnZjcHUpKQogCQlyZXR1cm4gMDsKIAogCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGUgPSBTVk1fRVhJVF9FWENQX0JBU0UgKyBucjsKQEAgLTE2OTgsNyArMTg0Myw3IEBACiAvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBpdCBpcyBzYXZlIHRvIGVuYWJsZSB0aGUgaXJxIHdpbmRvdyAqLwogc3RhdGljIGlubGluZSBib29sIG5lc3RlZF9zdm1faW50cihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIHsKLQlpZiAoIWlzX25lc3RlZChzdm0pKQorCWlmICghaXNfZ3Vlc3RfbW9kZSgmc3ZtLT52Y3B1KSkKIAkJcmV0dXJuIHRydWU7CiAKIAlpZiAoIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9WSU5UUl9NQVNLKSkKQEAgLTE3MzcsNyArMTg4Miw3IEBACiAvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBpdCBpcyBzYXZlIHRvIGVuYWJsZSB0aGUgbm1pIHdpbmRvdyAqLwogc3RhdGljIGlubGluZSBib29sIG5lc3RlZF9zdm1fbm1pKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogewotCWlmICghaXNfbmVzdGVkKHN2bSkpCisJaWYgKCFpc19ndWVzdF9tb2RlKCZzdm0tPnZjcHUpKQogCQlyZXR1cm4gdHJ1ZTsKIAogCWlmICghKHN2bS0+bmVzdGVkLmludGVyY2VwdCAmICgxVUxMIDw8IElOVEVSQ0VQVF9OTUkpKSkKQEAgLTE4MzYsOCArMTk4MSw4IEBACiAJCQlyZXR1cm4gTkVTVEVEX0VYSVRfSE9TVDsKIAkJYnJlYWs7CiAJY2FzZSBTVk1fRVhJVF9FWENQX0JBU0UgKyBQRl9WRUNUT1I6Ci0JCS8qIFdoZW4gd2UncmUgc2hhZG93aW5nLCB0cmFwIFBGcyAqLwotCQlpZiAoIW5wdF9lbmFibGVkKQorCQkvKiBXaGVuIHdlJ3JlIHNoYWRvd2luZywgdHJhcCBQRnMsIGJ1dCBub3QgYXN5bmMgUEYgKi8KKwkJaWYgKCFucHRfZW5hYmxlZCAmJiBzdm0tPmFwZl9yZWFzb24gPT0gMCkKIAkJCXJldHVybiBORVNURURfRVhJVF9IT1NUOwogCQlicmVhazsKIAljYXNlIFNWTV9FWElUX0VYQ1BfQkFTRSArIE5NX1ZFQ1RPUjoKQEAgLTE4NjUsMjcgKzIwMTAsMTUgQEAKIAljYXNlIFNWTV9FWElUX0lPSU86CiAJCXZtZXhpdCA9IG5lc3RlZF9zdm1faW50ZXJjZXB0X2lvaW8oc3ZtKTsKIAkJYnJlYWs7Ci0JY2FzZSBTVk1fRVhJVF9SRUFEX0NSMCAuLi4gU1ZNX0VYSVRfUkVBRF9DUjg6IHsKLQkJdTMyIGNyX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9SRUFEX0NSMCk7Ci0JCWlmIChzdm0tPm5lc3RlZC5pbnRlcmNlcHRfY3JfcmVhZCAmIGNyX2JpdHMpCisJY2FzZSBTVk1fRVhJVF9SRUFEX0NSMCAuLi4gU1ZNX0VYSVRfV1JJVEVfQ1I4OiB7CisJCXUzMiBiaXQgPSAxVSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfUkVBRF9DUjApOworCQlpZiAoc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0X2NyICYgYml0KQogCQkJdm1leGl0ID0gTkVTVEVEX0VYSVRfRE9ORTsKIAkJYnJlYWs7CiAJfQotCWNhc2UgU1ZNX0VYSVRfV1JJVEVfQ1IwIC4uLiBTVk1fRVhJVF9XUklURV9DUjg6IHsKLQkJdTMyIGNyX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9XUklURV9DUjApOwotCQlpZiAoc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0X2NyX3dyaXRlICYgY3JfYml0cykKLQkJCXZtZXhpdCA9IE5FU1RFRF9FWElUX0RPTkU7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNWTV9FWElUX1JFQURfRFIwIC4uLiBTVk1fRVhJVF9SRUFEX0RSNzogewotCQl1MzIgZHJfYml0cyA9IDEgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX1JFQURfRFIwKTsKLQkJaWYgKHN2bS0+bmVzdGVkLmludGVyY2VwdF9kcl9yZWFkICYgZHJfYml0cykKLQkJCXZtZXhpdCA9IE5FU1RFRF9FWElUX0RPTkU7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNWTV9FWElUX1dSSVRFX0RSMCAuLi4gU1ZNX0VYSVRfV1JJVEVfRFI3OiB7Ci0JCXUzMiBkcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfV1JJVEVfRFIwKTsKLQkJaWYgKHN2bS0+bmVzdGVkLmludGVyY2VwdF9kcl93cml0ZSAmIGRyX2JpdHMpCisJY2FzZSBTVk1fRVhJVF9SRUFEX0RSMCAuLi4gU1ZNX0VYSVRfV1JJVEVfRFI3OiB7CisJCXUzMiBiaXQgPSAxVSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfUkVBRF9EUjApOworCQlpZiAoc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0X2RyICYgYml0KQogCQkJdm1leGl0ID0gTkVTVEVEX0VYSVRfRE9ORTsKIAkJYnJlYWs7CiAJfQpAQCAtMTg5Myw2ICsyMDI2LDEwIEBACiAJCXUzMiBleGNwX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9FWENQX0JBU0UpOwogCQlpZiAoc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgJiBleGNwX2JpdHMpCiAJCQl2bWV4aXQgPSBORVNURURfRVhJVF9ET05FOworCQkvKiBhc3luYyBwYWdlIGZhdWx0IGFsd2F5cyBjYXVzZSB2bWV4aXQgKi8KKwkJZWxzZSBpZiAoKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9FWENQX0JBU0UgKyBQRl9WRUNUT1IpICYmCisJCQkgc3ZtLT5hcGZfcmVhc29uICE9IDApCisJCQl2bWV4aXQgPSBORVNURURfRVhJVF9ET05FOwogCQlicmVhazsKIAl9CiAJY2FzZSBTVk1fRVhJVF9FUlI6IHsKQEAgLTE5MjYsMTAgKzIwNjMsOCBAQAogCXN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqZHN0ICA9ICZkc3Rfdm1jYi0+Y29udHJvbDsKIAlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmZyb20gPSAmZnJvbV92bWNiLT5jb250cm9sOwogCi0JZHN0LT5pbnRlcmNlcHRfY3JfcmVhZCAgICA9IGZyb20tPmludGVyY2VwdF9jcl9yZWFkOwotCWRzdC0+aW50ZXJjZXB0X2NyX3dyaXRlICAgPSBmcm9tLT5pbnRlcmNlcHRfY3Jfd3JpdGU7Ci0JZHN0LT5pbnRlcmNlcHRfZHJfcmVhZCAgICA9IGZyb20tPmludGVyY2VwdF9kcl9yZWFkOwotCWRzdC0+aW50ZXJjZXB0X2RyX3dyaXRlICAgPSBmcm9tLT5pbnRlcmNlcHRfZHJfd3JpdGU7CisJZHN0LT5pbnRlcmNlcHRfY3IgICAgICAgICA9IGZyb20tPmludGVyY2VwdF9jcjsKKwlkc3QtPmludGVyY2VwdF9kciAgICAgICAgID0gZnJvbS0+aW50ZXJjZXB0X2RyOwogCWRzdC0+aW50ZXJjZXB0X2V4Y2VwdGlvbnMgPSBmcm9tLT5pbnRlcmNlcHRfZXhjZXB0aW9uczsKIAlkc3QtPmludGVyY2VwdCAgICAgICAgICAgID0gZnJvbS0+aW50ZXJjZXB0OwogCWRzdC0+aW9wbV9iYXNlX3BhICAgICAgICAgPSBmcm9tLT5pb3BtX2Jhc2VfcGE7CkBAIC0xOTcwLDcgKzIxMDUsOCBAQAogCWlmICghbmVzdGVkX3ZtY2IpCiAJCXJldHVybiAxOwogCi0JLyogRXhpdCBuZXN0ZWQgU1ZNIG1vZGUgKi8KKwkvKiBFeGl0IEd1ZXN0LU1vZGUgKi8KKwlsZWF2ZV9ndWVzdF9tb2RlKCZzdm0tPnZjcHUpOwogCXN2bS0+bmVzdGVkLnZtY2IgPSAwOwogCiAJLyogR2l2ZSB0aGUgY3VycmVudCB2bWNiIHRvIHRoZSBndWVzdCAqLwpAQCAtMTk4NCw3ICsyMTIwLDcgQEAKIAluZXN0ZWRfdm1jYi0+c2F2ZS5pZHRyICAgPSB2bWNiLT5zYXZlLmlkdHI7CiAJbmVzdGVkX3ZtY2ItPnNhdmUuZWZlciAgID0gc3ZtLT52Y3B1LmFyY2guZWZlcjsKIAluZXN0ZWRfdm1jYi0+c2F2ZS5jcjAgICAgPSBrdm1fcmVhZF9jcjAoJnN2bS0+dmNwdSk7Ci0JbmVzdGVkX3ZtY2ItPnNhdmUuY3IzICAgID0gc3ZtLT52Y3B1LmFyY2guY3IzOworCW5lc3RlZF92bWNiLT5zYXZlLmNyMyAgICA9IGt2bV9yZWFkX2NyMygmc3ZtLT52Y3B1KTsKIAluZXN0ZWRfdm1jYi0+c2F2ZS5jcjIgICAgPSB2bWNiLT5zYXZlLmNyMjsKIAluZXN0ZWRfdm1jYi0+c2F2ZS5jcjQgICAgPSBzdm0tPnZjcHUuYXJjaC5jcjQ7CiAJbmVzdGVkX3ZtY2ItPnNhdmUucmZsYWdzID0gdm1jYi0+c2F2ZS5yZmxhZ3M7CkBAIC0yMDYxLDYgKzIxOTcsOCBAQAogCXN2bS0+dm1jYi0+c2F2ZS5jcGwgPSAwOwogCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvID0gMDsKIAorCW1hcmtfYWxsX2RpcnR5KHN2bS0+dm1jYik7CisKIAluZXN0ZWRfc3ZtX3VubWFwKHBhZ2UpOwogCiAJbmVzdGVkX3N2bV91bmluaXRfbW11X2NvbnRleHQoJnN2bS0+dmNwdSk7CkBAIC0yMTQ4LDggKzIyODYsOCBAQAogCQkJICAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmV2ZW50X2luaiwKIAkJCSAgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5uZXN0ZWRfY3RsKTsKIAotCXRyYWNlX2t2bV9uZXN0ZWRfaW50ZXJjZXB0cyhuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZCwKLQkJCQkgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlLAorCXRyYWNlX2t2bV9uZXN0ZWRfaW50ZXJjZXB0cyhuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3IgJiAweGZmZmYsCisJCQkJICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jciA+PiAxNiwKIAkJCQkgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMsCiAJCQkJICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdCk7CiAKQEAgLTIxNzcsNyArMjMxNSw3IEBACiAJaWYgKG5wdF9lbmFibGVkKQogCQloc2F2ZS0+c2F2ZS5jcjMgICAgPSB2bWNiLT5zYXZlLmNyMzsKIAllbHNlCi0JCWhzYXZlLT5zYXZlLmNyMyAgICA9IHN2bS0+dmNwdS5hcmNoLmNyMzsKKwkJaHNhdmUtPnNhdmUuY3IzICAgID0ga3ZtX3JlYWRfY3IzKCZzdm0tPnZjcHUpOwogCiAJY29weV92bWNiX2NvbnRyb2xfYXJlYShoc2F2ZSwgdm1jYik7CiAKQEAgLTIyMjksMTQgKzIzNjcsMTIgQEAKIAlzdm0tPm5lc3RlZC52bWNiX2lvcG0gID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW9wbV9iYXNlX3BhICAmIH4weDBmZmZVTEw7CiAKIAkvKiBjYWNoZSBpbnRlcmNlcHRzICovCi0Jc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0X2NyX3JlYWQgICAgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZDsKLQlzdm0tPm5lc3RlZC5pbnRlcmNlcHRfY3Jfd3JpdGUgICA9IG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZTsKLQlzdm0tPm5lc3RlZC5pbnRlcmNlcHRfZHJfcmVhZCAgICA9IG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl9yZWFkOwotCXN2bS0+bmVzdGVkLmludGVyY2VwdF9kcl93cml0ZSAgID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3dyaXRlOworCXN2bS0+bmVzdGVkLmludGVyY2VwdF9jciAgICAgICAgID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyOworCXN2bS0+bmVzdGVkLmludGVyY2VwdF9kciAgICAgICAgID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyOwogCXN2bS0+bmVzdGVkLmludGVyY2VwdF9leGNlcHRpb25zID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnM7CiAJc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0ICAgICAgICAgICAgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQ7CiAKLQlmb3JjZV9uZXdfYXNpZCgmc3ZtLT52Y3B1KTsKKwlzdm1fZmx1c2hfdGxiKCZzdm0tPnZjcHUpOwogCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfY3RsID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCB8IFZfSU5UUl9NQVNLSU5HX01BU0s7CiAJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludF9jdGwgJiBWX0lOVFJfTUFTS0lOR19NQVNLKQogCQlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgfD0gSEZfVklOVFJfTUFTSzsKQEAgLTIyNDUsMjkgKzIzODEsMTIgQEAKIAogCWlmIChzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9WSU5UUl9NQVNLKSB7CiAJCS8qIFdlIG9ubHkgd2FudCB0aGUgY3I4IGludGVyY2VwdCBiaXRzIG9mIHRoZSBndWVzdCAqLwotCQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3JlYWQgJj0gfklOVEVSQ0VQVF9DUjhfTUFTSzsKLQkJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSAmPSB+SU5URVJDRVBUX0NSOF9NQVNLOworCQljbHJfY3JfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0NSOF9SRUFEKTsKKwkJY2xyX2NyX2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9DUjhfV1JJVEUpOwogCX0KIAogCS8qIFdlIGRvbid0IHdhbnQgdG8gc2VlIFZNTUNBTExzIGZyb20gYSBuZXN0ZWQgZ3Vlc3QgKi8KLQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0ICY9IH4oMVVMTCA8PCBJTlRFUkNFUFRfVk1NQ0FMTCk7Ci0KLQkvKgotCSAqIFdlIGRvbid0IHdhbnQgYSBuZXN0ZWQgZ3Vlc3QgdG8gYmUgbW9yZSBwb3dlcmZ1bCB0aGFuIHRoZSBndWVzdCwgc28KLQkgKiBhbGwgaW50ZXJjZXB0cyBhcmUgT1JlZAotCSAqLwotCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZCB8PQotCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZDsKLQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlIHw9Ci0JCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZTsKLQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQgfD0KLQkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQ7Ci0Jc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl93cml0ZSB8PQotCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfd3JpdGU7Ci0Jc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9Ci0JCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zOwotCi0Jc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCB8PSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQ7CisJY2xyX2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9WTU1DQUxMKTsKIAogCXN2bS0+dm1jYi0+Y29udHJvbC5sYnJfY3RsID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wubGJyX2N0bDsKIAlzdm0tPnZtY2ItPmNvbnRyb2wuaW50X3ZlY3RvciA9IG5lc3RlZF92bWNiLT5jb250cm9sLmludF92ZWN0b3I7CkBAIC0yMjc4LDExICsyMzk3LDIxIEBACiAKIAluZXN0ZWRfc3ZtX3VubWFwKHBhZ2UpOwogCi0JLyogbmVzdGVkX3ZtY2IgaXMgb3VyIGluZGljYXRvciBpZiBuZXN0ZWQgU1ZNIGlzIGFjdGl2YXRlZCAqLworCS8qIEVudGVyIEd1ZXN0LU1vZGUgKi8KKwllbnRlcl9ndWVzdF9tb2RlKCZzdm0tPnZjcHUpOworCisJLyoKKwkgKiBNZXJnZSBndWVzdCBhbmQgaG9zdCBpbnRlcmNlcHRzIC0gbXVzdCBiZSBjYWxsZWQgIHdpdGggdmNwdSBpbgorCSAqIGd1ZXN0LW1vZGUgdG8gdGFrZSBhZmZlY3QgaGVyZQorCSAqLworCXJlY2FsY19pbnRlcmNlcHRzKHN2bSk7CisKIAlzdm0tPm5lc3RlZC52bWNiID0gdm1jYl9ncGE7CiAKIAllbmFibGVfZ2lmKHN2bSk7CiAKKwltYXJrX2FsbF9kaXJ0eShzdm0tPnZtY2IpOworCiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI0MDAsNiArMjUyOSw4IEBACiAJc3ZtX2NsZWFyX3ZpbnRyKHN2bSk7CiAJc3ZtLT52bWNiLT5jb250cm9sLmludF9jdGwgJj0gflZfSVJRX01BU0s7CiAKKwltYXJrX2RpcnR5KHN2bS0+dm1jYiwgVk1DQl9JTlRSKTsKKwogCXJldHVybiAxOwogfQogCkBAIC0yNDI2LDYgKzI1NTcsMTkgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCB4c2V0YnZfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXU2NCBuZXdfYnYgPSBrdm1fcmVhZF9lZHhfZWF4KCZzdm0tPnZjcHUpOworCXUzMiBpbmRleCA9IGt2bV9yZWdpc3Rlcl9yZWFkKCZzdm0tPnZjcHUsIFZDUFVfUkVHU19SQ1gpOworCisJaWYgKGt2bV9zZXRfeGNyKCZzdm0tPnZjcHUsIGluZGV4LCBuZXdfYnYpID09IDApIHsKKwkJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDM7CisJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgaW52YWxpZF9vcF9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7CiAJa3ZtX3F1ZXVlX2V4Y2VwdGlvbigmc3ZtLT52Y3B1LCBVRF9WRUNUT1IpOwpAQCAtMjUwNywxOSArMjY1MSw5MiBAQAogc3RhdGljIGludCBpcmV0X2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIHsKIAkrK3N2bS0+dmNwdS5zdGF0Lm5taV93aW5kb3dfZXhpdHM7Ci0Jc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCAmPSB+KDFVTEwgPDwgSU5URVJDRVBUX0lSRVQpOworCWNscl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfSVJFVCk7CiAJc3ZtLT52Y3B1LmFyY2guaGZsYWdzIHw9IEhGX0lSRVRfTUFTSzsKIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCBpbnZscGdfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogewotCXJldHVybiBlbXVsYXRlX2luc3RydWN0aW9uKCZzdm0tPnZjcHUsIDAsIDAsIDApID09IEVNVUxBVEVfRE9ORTsKKwlpZiAoIXN0YXRpY19jcHVfaGFzKFg4Nl9GRUFUVVJFX0RFQ09ERUFTU0lTVFMpKQorCQlyZXR1cm4gZW11bGF0ZV9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1LCAwKSA9PSBFTVVMQVRFX0RPTkU7CisKKwlrdm1fbW11X2ludmxwZygmc3ZtLT52Y3B1LCBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzEpOworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7Ci0JcmV0dXJuIGVtdWxhdGVfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSwgMCwgMCwgMCkgPT0gRU1VTEFURV9ET05FOworCXJldHVybiBlbXVsYXRlX2luc3RydWN0aW9uKCZzdm0tPnZjcHUsIDApID09IEVNVUxBVEVfRE9ORTsKK30KKworI2RlZmluZSBDUl9WQUxJRCAoMVVMTCA8PCA2MykKKworc3RhdGljIGludCBjcl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJaW50IHJlZywgY3I7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGVycjsKKworCWlmICghc3RhdGljX2NwdV9oYXMoWDg2X0ZFQVRVUkVfREVDT0RFQVNTSVNUUykpCisJCXJldHVybiBlbXVsYXRlX29uX2ludGVyY2VwdGlvbihzdm0pOworCisJaWYgKHVubGlrZWx5KChzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzEgJiBDUl9WQUxJRCkgPT0gMCkpCisJCXJldHVybiBlbXVsYXRlX29uX2ludGVyY2VwdGlvbihzdm0pOworCisJcmVnID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xICYgU1ZNX0VYSVRJTkZPX1JFR19NQVNLOworCWNyID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZSAtIFNWTV9FWElUX1JFQURfQ1IwOworCisJZXJyID0gMDsKKwlpZiAoY3IgPj0gMTYpIHsgLyogbW92IHRvIGNyICovCisJCWNyIC09IDE2OworCQl2YWwgPSBrdm1fcmVnaXN0ZXJfcmVhZCgmc3ZtLT52Y3B1LCByZWcpOworCQlzd2l0Y2ggKGNyKSB7CisJCWNhc2UgMDoKKwkJCWVyciA9IGt2bV9zZXRfY3IwKCZzdm0tPnZjcHUsIHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJZXJyID0ga3ZtX3NldF9jcjMoJnN2bS0+dmNwdSwgdmFsKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQllcnIgPSBrdm1fc2V0X2NyNCgmc3ZtLT52Y3B1LCB2YWwpOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCWVyciA9IGt2bV9zZXRfY3I4KCZzdm0tPnZjcHUsIHZhbCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVdBUk4oMSwgInVuaGFuZGxlZCB3cml0ZSB0byBDUiVkIiwgY3IpOworCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbigmc3ZtLT52Y3B1LCBVRF9WRUNUT1IpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9IGVsc2UgeyAvKiBtb3YgZnJvbSBjciAqLworCQlzd2l0Y2ggKGNyKSB7CisJCWNhc2UgMDoKKwkJCXZhbCA9IGt2bV9yZWFkX2NyMCgmc3ZtLT52Y3B1KTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQl2YWwgPSBzdm0tPnZjcHUuYXJjaC5jcjI7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJdmFsID0ga3ZtX3JlYWRfY3IzKCZzdm0tPnZjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCXZhbCA9IGt2bV9yZWFkX2NyNCgmc3ZtLT52Y3B1KTsKKwkJCWJyZWFrOworCQljYXNlIDg6CisJCQl2YWwgPSBrdm1fZ2V0X2NyOCgmc3ZtLT52Y3B1KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJV0FSTigxLCAidW5oYW5kbGVkIHJlYWQgZnJvbSBDUiVkIiwgY3IpOworCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbigmc3ZtLT52Y3B1LCBVRF9WRUNUT1IpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJa3ZtX3JlZ2lzdGVyX3dyaXRlKCZzdm0tPnZjcHUsIHJlZywgdmFsKTsKKwl9CisJa3ZtX2NvbXBsZXRlX2luc25fZ3AoJnN2bS0+dmNwdSwgZXJyKTsKKworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IGNyMF93cml0ZV9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pCkBAIC0yNTI3LDcgKzI3NDQsNyBAQAogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9ICZzdm0tPnZjcHU7CiAJaW50IHI7CiAKLQlyID0gZW11bGF0ZV9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1LCAwLCAwLCAwKTsKKwlyID0gY3JfaW50ZXJjZXB0aW9uKHN2bSk7CiAKIAlpZiAoc3ZtLT5uZXN0ZWQudm1leGl0X3JpcCkgewogCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JJUCwgc3ZtLT5uZXN0ZWQudm1leGl0X3JpcCk7CkBAIC0yNTM2LDIyICsyNzUzLDQ3IEBACiAJCXN2bS0+bmVzdGVkLnZtZXhpdF9yaXAgPSAwOwogCX0KIAotCXJldHVybiByID09IEVNVUxBVEVfRE9ORTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBkcl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJaW50IHJlZywgZHI7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGVycjsKKworCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RFQ09ERUFTU0lTVFMpKQorCQlyZXR1cm4gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24oc3ZtKTsKKworCXJlZyA9IHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMSAmIFNWTV9FWElUSU5GT19SRUdfTUFTSzsKKwlkciA9IHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGUgLSBTVk1fRVhJVF9SRUFEX0RSMDsKKworCWlmIChkciA+PSAxNikgeyAvKiBtb3YgdG8gRFJuICovCisJCXZhbCA9IGt2bV9yZWdpc3Rlcl9yZWFkKCZzdm0tPnZjcHUsIHJlZyk7CisJCWt2bV9zZXRfZHIoJnN2bS0+dmNwdSwgZHIgLSAxNiwgdmFsKTsKKwl9IGVsc2UgeworCQllcnIgPSBrdm1fZ2V0X2RyKCZzdm0tPnZjcHUsIGRyLCAmdmFsKTsKKwkJaWYgKCFlcnIpCisJCQlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgcmVnLCB2YWwpOworCX0KKworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IGNyOF93cml0ZV9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7CiAJc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4gPSBzdm0tPnZjcHUucnVuOworCWludCByOwogCiAJdTggY3I4X3ByZXYgPSBrdm1fZ2V0X2NyOCgmc3ZtLT52Y3B1KTsKIAkvKiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gY2FsbHMga3ZtX3NldF9jcjgoKSAqLwotCWVtdWxhdGVfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSwgMCwgMCwgMCk7CisJciA9IGNyX2ludGVyY2VwdGlvbihzdm0pOwogCWlmIChpcnFjaGlwX2luX2tlcm5lbChzdm0tPnZjcHUua3ZtKSkgewotCQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlICY9IH5JTlRFUkNFUFRfQ1I4X01BU0s7Ci0JCXJldHVybiAxOworCQljbHJfY3JfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0NSOF9XUklURSk7CisJCXJldHVybiByOwogCX0KIAlpZiAoY3I4X3ByZXYgPD0ga3ZtX2dldF9jcjgoJnN2bS0+dmNwdSkpCi0JCXJldHVybiAxOworCQlyZXR1cm4gcjsKIAlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX1NFVF9UUFI7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNTYyLDE0ICsyODA0LDkgQEAKIAogCXN3aXRjaCAoZWN4KSB7CiAJY2FzZSBNU1JfSUEzMl9UU0M6IHsKLQkJdTY0IHRzY19vZmZzZXQ7CisJCXN0cnVjdCB2bWNiICp2bWNiID0gZ2V0X2hvc3Rfdm1jYihzdm0pOwogCi0JCWlmIChpc19uZXN0ZWQoc3ZtKSkKLQkJCXRzY19vZmZzZXQgPSBzdm0tPm5lc3RlZC5oc2F2ZS0+Y29udHJvbC50c2Nfb2Zmc2V0OwotCQllbHNlCi0JCQl0c2Nfb2Zmc2V0ID0gc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQ7Ci0KLQkJKmRhdGEgPSB0c2Nfb2Zmc2V0ICsgbmF0aXZlX3JlYWRfdHNjKCk7CisJCSpkYXRhID0gdm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0ICsgbmF0aXZlX3JlYWRfdHNjKCk7CiAJCWJyZWFrOwogCX0KIAljYXNlIE1TUl9TVEFSOgpAQCAtMjcxNCw3ICsyOTUxLDcgQEAKIAkJc3ZtLT52bWNiLT5zYXZlLnN5c2VudGVyX2VzcCA9IGRhdGE7CiAJCWJyZWFrOwogCWNhc2UgTVNSX0lBMzJfREVCVUdDVExNU1I6Ci0JCWlmICghc3ZtX2hhcyhTVk1fRkVBVFVSRV9MQlJWKSkgeworCQlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9MQlJWKSkgewogCQkJcHJfdW5pbXBsKHZjcHUsICIlczogTVNSX0lBMzJfREVCVUdDVEwgMHglbGx4LCBub3BcbiIsCiAJCQkJCV9fZnVuY19fLCBkYXRhKTsKIAkJCWJyZWFrOwpAQCAtMjcyMyw2ICsyOTYwLDcgQEAKIAkJCXJldHVybiAxOwogCiAJCXN2bS0+dm1jYi0+c2F2ZS5kYmdjdGwgPSBkYXRhOworCQltYXJrX2RpcnR5KHN2bS0+dm1jYiwgVk1DQl9MQlIpOwogCQlpZiAoZGF0YSAmICgxVUxMPDwwKSkKIAkJCXN2bV9lbmFibGVfbGJydihzdm0pOwogCQllbHNlCkBAIC0yNzc1LDYgKzMwMTMsNyBAQAogCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9FVkVOVCwgJnN2bS0+dmNwdSk7CiAJc3ZtX2NsZWFyX3ZpbnRyKHN2bSk7CiAJc3ZtLT52bWNiLT5jb250cm9sLmludF9jdGwgJj0gflZfSVJRX01BU0s7CisJbWFya19kaXJ0eShzdm0tPnZtY2IsIFZNQ0JfSU5UUik7CiAJLyoKIAkgKiBJZiB0aGUgdXNlciBzcGFjZSB3YWl0cyB0byBpbmplY3QgaW50ZXJydXB0cywgZXhpdCBhcyBzb29uIGFzCiAJICogcG9zc2libGUKQEAgLTI3OTcsMzEgKzMwMzYsMzEgQEAKIH0KIAogc3RhdGljIGludCAoKnN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKSA9IHsKLQlbU1ZNX0VYSVRfUkVBRF9DUjBdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfUkVBRF9DUjNdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfUkVBRF9DUjRdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfUkVBRF9DUjhdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfUkVBRF9DUjBdCQkJPSBjcl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1JFQURfQ1IzXQkJCT0gY3JfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9SRUFEX0NSNF0JCQk9IGNyX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfUkVBRF9DUjhdCQkJPSBjcl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0NSMF9TRUxfV1JJVEVdCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9XUklURV9DUjBdCQkJPSBjcjBfd3JpdGVfaW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9XUklURV9DUjNdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfV1JJVEVfQ1I0XQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1dSSVRFX0NSM10JCQk9IGNyX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfV1JJVEVfQ1I0XQkJCT0gY3JfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9XUklURV9DUjhdCQkJPSBjcjhfd3JpdGVfaW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9SRUFEX0RSMF0JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9SRUFEX0RSMV0JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9SRUFEX0RSMl0JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9SRUFEX0RSM10JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9SRUFEX0RSNF0JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9SRUFEX0RSNV0JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9SRUFEX0RSNl0JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9SRUFEX0RSN10JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9XUklURV9EUjBdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfV1JJVEVfRFIxXQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCi0JW1NWTV9FWElUX1dSSVRFX0RSMl0JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9XUklURV9EUjNdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfV1JJVEVfRFI0XQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCi0JW1NWTV9FWElUX1dSSVRFX0RSNV0JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9XUklURV9EUjZdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfV1JJVEVfRFI3XQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1JFQURfRFIwXQkJCT0gZHJfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9SRUFEX0RSMV0JCQk9IGRyX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfUkVBRF9EUjJdCQkJPSBkcl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1JFQURfRFIzXQkJCT0gZHJfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9SRUFEX0RSNF0JCQk9IGRyX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfUkVBRF9EUjVdCQkJPSBkcl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1JFQURfRFI2XQkJCT0gZHJfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9SRUFEX0RSN10JCQk9IGRyX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfV1JJVEVfRFIwXQkJCT0gZHJfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9XUklURV9EUjFdCQkJPSBkcl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1dSSVRFX0RSMl0JCQk9IGRyX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfV1JJVEVfRFIzXQkJCT0gZHJfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9XUklURV9EUjRdCQkJPSBkcl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1dSSVRFX0RSNV0JCQk9IGRyX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfV1JJVEVfRFI2XQkJCT0gZHJfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9XUklURV9EUjddCQkJPSBkcl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0VYQ1BfQkFTRSArIERCX1ZFQ1RPUl0JPSBkYl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0VYQ1BfQkFTRSArIEJQX1ZFQ1RPUl0JPSBicF9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0VYQ1BfQkFTRSArIFVEX1ZFQ1RPUl0JPSB1ZF9pbnRlcmNlcHRpb24sCkBAIC0yODU0LDYgKzMwOTMsNyBAQAogCVtTVk1fRVhJVF9XQklOVkRdICAgICAgICAgICAgICAgICAgICAgICA9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9NT05JVE9SXQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX01XQUlUXQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1hTRVRCVl0JCQk9IHhzZXRidl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX05QRl0JCQkJPSBwZl9pbnRlcmNlcHRpb24sCiB9OwogCkBAIC0yODY0LDEwICszMTA0LDEwIEBACiAJc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzYXZlID0gJnN2bS0+dm1jYi0+c2F2ZTsKIAogCXByX2VycigiVk1DQiBDb250cm9sIEFyZWE6XG4iKTsKLQlwcl9lcnIoImNyX3JlYWQ6ICAgICAgICAgICAgJTA0eFxuIiwgY29udHJvbC0+aW50ZXJjZXB0X2NyX3JlYWQpOwotCXByX2VycigiY3Jfd3JpdGU6ICAgICAgICAgICAlMDR4XG4iLCBjb250cm9sLT5pbnRlcmNlcHRfY3Jfd3JpdGUpOwotCXByX2VycigiZHJfcmVhZDogICAgICAgICAgICAlMDR4XG4iLCBjb250cm9sLT5pbnRlcmNlcHRfZHJfcmVhZCk7Ci0JcHJfZXJyKCJkcl93cml0ZTogICAgICAgICAgICUwNHhcbiIsIGNvbnRyb2wtPmludGVyY2VwdF9kcl93cml0ZSk7CisJcHJfZXJyKCJjcl9yZWFkOiAgICAgICAgICAgICUwNHhcbiIsIGNvbnRyb2wtPmludGVyY2VwdF9jciAmIDB4ZmZmZik7CisJcHJfZXJyKCJjcl93cml0ZTogICAgICAgICAgICUwNHhcbiIsIGNvbnRyb2wtPmludGVyY2VwdF9jciA+PiAxNik7CisJcHJfZXJyKCJkcl9yZWFkOiAgICAgICAgICAgICUwNHhcbiIsIGNvbnRyb2wtPmludGVyY2VwdF9kciAmIDB4ZmZmZik7CisJcHJfZXJyKCJkcl93cml0ZTogICAgICAgICAgICUwNHhcbiIsIGNvbnRyb2wtPmludGVyY2VwdF9kciA+PiAxNik7CiAJcHJfZXJyKCJleGNlcHRpb25zOiAgICAgICAgICUwOHhcbiIsIGNvbnRyb2wtPmludGVyY2VwdF9leGNlcHRpb25zKTsKIAlwcl9lcnIoImludGVyY2VwdHM6ICAgICAgICAgJTAxNmxseFxuIiwgY29udHJvbC0+aW50ZXJjZXB0KTsKIAlwcl9lcnIoInBhdXNlIGZpbHRlciBjb3VudDogJWRcbiIsIGNvbnRyb2wtPnBhdXNlX2ZpbHRlcl9jb3VudCk7CkBAIC0yOTUwLDE1ICszMTkwLDIzIEBACiAKIH0KIAorc3RhdGljIHZvaWQgc3ZtX2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmluZm8xLCB1NjQgKmluZm8yKQoreworCXN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9ICZ0b19zdm0odmNwdSktPnZtY2ItPmNvbnRyb2w7CisKKwkqaW5mbzEgPSBjb250cm9sLT5leGl0X2luZm9fMTsKKwkqaW5mbzIgPSBjb250cm9sLT5leGl0X2luZm9fMjsKK30KKwogc3RhdGljIGludCBoYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAJc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4gPSB2Y3B1LT5ydW47CiAJdTMyIGV4aXRfY29kZSA9IHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGU7CiAKLQl0cmFjZV9rdm1fZXhpdChleGl0X2NvZGUsIHZjcHUpOworCXRyYWNlX2t2bV9leGl0KGV4aXRfY29kZSwgdmNwdSwgS1ZNX0lTQV9TVk0pOwogCi0JaWYgKCEoc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSAmIElOVEVSQ0VQVF9DUjBfTUFTSykpCisJaWYgKCFpc19jcl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQ1IwX1dSSVRFKSkKIAkJdmNwdS0+YXJjaC5jcjAgPSBzdm0tPnZtY2ItPnNhdmUuY3IwOwogCWlmIChucHRfZW5hYmxlZCkKIAkJdmNwdS0+YXJjaC5jcjMgPSBzdm0tPnZtY2ItPnNhdmUuY3IzOwpAQCAtMjk3MCw3ICszMjE4LDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKGlzX25lc3RlZChzdm0pKSB7CisJaWYgKGlzX2d1ZXN0X21vZGUodmNwdSkpIHsKIAkJaW50IHZtZXhpdDsKIAogCQl0cmFjZV9rdm1fbmVzdGVkX3ZtZXhpdChzdm0tPnZtY2ItPnNhdmUucmlwLCBleGl0X2NvZGUsCkBAIC0zMDMzLDcgKzMyODEsNiBAQAogCiAJc3RydWN0IHN2bV9jcHVfZGF0YSAqc2QgPSBwZXJfY3B1KHN2bV9kYXRhLCBjcHUpOwogCi0Jc3ZtLT52bWNiLT5jb250cm9sLnRsYl9jdGwgPSBUTEJfQ09OVFJPTF9ET19OT1RISU5HOwogCS8qIEZJWE1FOiBoYW5kbGUgd3JhcGFyb3VuZCBvZiBhc2lkX2dlbmVyYXRpb24gKi8KIAlpZiAoc3ZtLT5hc2lkX2dlbmVyYXRpb24gIT0gc2QtPmFzaWRfZ2VuZXJhdGlvbikKIAkJbmV3X2FzaWQoc3ZtLCBzZCk7CkBAIC0zMDQ1LDcgKzMyOTIsNyBAQAogCiAJc3ZtLT52bWNiLT5jb250cm9sLmV2ZW50X2luaiA9IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfTk1JOwogCXZjcHUtPmFyY2guaGZsYWdzIHw9IEhGX05NSV9NQVNLOwotCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgfD0gKDFVTEwgPDwgSU5URVJDRVBUX0lSRVQpOworCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfSVJFVCk7CiAJKyt2Y3B1LT5zdGF0Lm5taV9pbmplY3Rpb25zOwogfQogCkBAIC0zMDU4LDYgKzMzMDUsNyBAQAogCWNvbnRyb2wtPmludF9jdGwgJj0gflZfSU5UUl9QUklPX01BU0s7CiAJY29udHJvbC0+aW50X2N0bCB8PSBWX0lSUV9NQVNLIHwKIAkJKCgvKmNvbnRyb2wtPmludF92ZWN0b3IgPj4gNCovIDB4ZikgPDwgVl9JTlRSX1BSSU9fU0hJRlQpOworCW1hcmtfZGlydHkoc3ZtLT52bWNiLCBWTUNCX0lOVFIpOwogfQogCiBzdGF0aWMgdm9pZCBzdm1fc2V0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0zMDc3LDE0ICszMzI1LDE0IEBACiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKLQlpZiAoaXNfbmVzdGVkKHN2bSkgJiYgKHZjcHUtPmFyY2guaGZsYWdzICYgSEZfVklOVFJfTUFTSykpCisJaWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgJiYgKHZjcHUtPmFyY2guaGZsYWdzICYgSEZfVklOVFJfTUFTSykpCiAJCXJldHVybjsKIAogCWlmIChpcnIgPT0gLTEpCiAJCXJldHVybjsKIAogCWlmICh0cHIgPj0gaXJyKQotCQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlIHw9IElOVEVSQ0VQVF9DUjhfTUFTSzsKKwkJc2V0X2NyX2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9DUjhfV1JJVEUpOwogfQogCiBzdGF0aWMgaW50IHN2bV9ubWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0zMTEyLDEwICszMzYwLDEwIEBACiAKIAlpZiAobWFza2VkKSB7CiAJCXN2bS0+dmNwdS5hcmNoLmhmbGFncyB8PSBIRl9OTUlfTUFTSzsKLQkJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCB8PSAoMVVMTCA8PCBJTlRFUkNFUFRfSVJFVCk7CisJCXNldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfSVJFVCk7CiAJfSBlbHNlIHsKIAkJc3ZtLT52Y3B1LmFyY2guaGZsYWdzICY9IH5IRl9OTUlfTUFTSzsKLQkJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCAmPSB+KDFVTEwgPDwgSU5URVJDRVBUX0lSRVQpOworCQljbHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0lSRVQpOwogCX0KIH0KIApAQCAtMzEzMSw3ICszMzc5LDcgQEAKIAogCXJldCA9ICEhKHZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19JRik7CiAKLQlpZiAoaXNfbmVzdGVkKHN2bSkpCisJaWYgKGlzX2d1ZXN0X21vZGUodmNwdSkpCiAJCXJldHVybiByZXQgJiYgIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9WSU5UUl9NQVNLKTsKIAogCXJldHVybiByZXQ7CkBAIC0zMTc3LDcgKzM0MjUsMTIgQEAKIAogc3RhdGljIHZvaWQgc3ZtX2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JZm9yY2VfbmV3X2FzaWQodmNwdSk7CisJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CisKKwlpZiAoc3RhdGljX2NwdV9oYXMoWDg2X0ZFQVRVUkVfRkxVU0hCWUFTSUQpKQorCQlzdm0tPnZtY2ItPmNvbnRyb2wudGxiX2N0bCA9IFRMQl9DT05UUk9MX0ZMVVNIX0FTSUQ7CisJZWxzZQorCQlzdm0tPmFzaWRfZ2VuZXJhdGlvbi0tOwogfQogCiBzdGF0aWMgdm9pZCBzdm1fcHJlcGFyZV9ndWVzdF9zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMzE4OCwxMCArMzQ0MSwxMCBAQAogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCi0JaWYgKGlzX25lc3RlZChzdm0pICYmICh2Y3B1LT5hcmNoLmhmbGFncyAmIEhGX1ZJTlRSX01BU0spKQorCWlmIChpc19ndWVzdF9tb2RlKHZjcHUpICYmICh2Y3B1LT5hcmNoLmhmbGFncyAmIEhGX1ZJTlRSX01BU0spKQogCQlyZXR1cm47CiAKLQlpZiAoIShzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlICYgSU5URVJDRVBUX0NSOF9NQVNLKSkgeworCWlmICghaXNfY3JfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0NSOF9XUklURSkpIHsKIAkJaW50IGNyOCA9IHN2bS0+dm1jYi0+Y29udHJvbC5pbnRfY3RsICYgVl9UUFJfTUFTSzsKIAkJa3ZtX3NldF9jcjgodmNwdSwgY3I4KTsKIAl9CkBAIC0zMjAyLDcgKzM0NTUsNyBAQAogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCXU2NCBjcjg7CiAKLQlpZiAoaXNfbmVzdGVkKHN2bSkgJiYgKHZjcHUtPmFyY2guaGZsYWdzICYgSEZfVklOVFJfTUFTSykpCisJaWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgJiYgKHZjcHUtPmFyY2guaGZsYWdzICYgSEZfVklOVFJfTUFTSykpCiAJCXJldHVybjsKIAogCWNyOCA9IGt2bV9nZXRfY3I4KHZjcHUpOwpAQCAtMzI4OSw5ICszNTQyLDYgQEAKIHN0YXRpYyB2b2lkIHN2bV92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7Ci0JdTE2IGZzX3NlbGVjdG9yOwotCXUxNiBnc19zZWxlY3RvcjsKLQl1MTYgbGR0X3NlbGVjdG9yOwogCiAJc3ZtLT52bWNiLT5zYXZlLnJheCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXTsKIAlzdm0tPnZtY2ItPnNhdmUucnNwID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdOwpAQCAtMzMwOCwxMCArMzU1OCw2IEBACiAKIAlzeW5jX2xhcGljX3RvX2NyOCh2Y3B1KTsKIAotCXNhdmVfaG9zdF9tc3JzKHZjcHUpOwotCXNhdmVzZWdtZW50KGZzLCBmc19zZWxlY3Rvcik7Ci0Jc2F2ZXNlZ21lbnQoZ3MsIGdzX3NlbGVjdG9yKTsKLQlsZHRfc2VsZWN0b3IgPSBrdm1fcmVhZF9sZHQoKTsKIAlzdm0tPnZtY2ItPnNhdmUuY3IyID0gdmNwdS0+YXJjaC5jcjI7CiAKIAljbGdpKCk7CkBAIC0zMzg5LDE5ICszNjM1LDEwIEBACiAjZW5kaWYKIAkJKTsKIAotCXZjcHUtPmFyY2guY3IyID0gc3ZtLT52bWNiLT5zYXZlLmNyMjsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSBzdm0tPnZtY2ItPnNhdmUucmF4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHN2bS0+dm1jYi0+c2F2ZS5yc3A7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SSVBdID0gc3ZtLT52bWNiLT5zYXZlLnJpcDsKLQotCWxvYWRfaG9zdF9tc3JzKHZjcHUpOwotCWt2bV9sb2FkX2xkdChsZHRfc2VsZWN0b3IpOwotCWxvYWRzZWdtZW50KGZzLCBmc19zZWxlY3Rvcik7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCWxvYWRfZ3NfaW5kZXgoZ3Nfc2VsZWN0b3IpOwotCXdybXNybChNU1JfS0VSTkVMX0dTX0JBU0UsIGN1cnJlbnQtPnRocmVhZC5ncyk7CisJd3Jtc3JsKE1TUl9HU19CQVNFLCBzdm0tPmhvc3QuZ3NfYmFzZSk7CiAjZWxzZQotCWxvYWRzZWdtZW50KGdzLCBnc19zZWxlY3Rvcik7CisJbG9hZHNlZ21lbnQoZnMsIHN2bS0+aG9zdC5mcyk7CiAjZW5kaWYKIAogCXJlbG9hZF90c3ModmNwdSk7CkBAIC0zNDEwLDEwICszNjQ3LDIxIEBACiAKIAlzdGdpKCk7CiAKKwl2Y3B1LT5hcmNoLmNyMiA9IHN2bS0+dm1jYi0+c2F2ZS5jcjI7CisJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0gc3ZtLT52bWNiLT5zYXZlLnJheDsKKwl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF0gPSBzdm0tPnZtY2ItPnNhdmUucnNwOworCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUklQXSA9IHN2bS0+dm1jYi0+c2F2ZS5yaXA7CisKIAlzeW5jX2NyOF90b19sYXBpYyh2Y3B1KTsKIAogCXN2bS0+bmV4dF9yaXAgPSAwOwogCisJc3ZtLT52bWNiLT5jb250cm9sLnRsYl9jdGwgPSBUTEJfQ09OVFJPTF9ET19OT1RISU5HOworCisJLyogaWYgZXhpdCBkdWUgdG8gUEYgY2hlY2sgZm9yIGFzeW5jIFBGICovCisJaWYgKHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGUgPT0gU1ZNX0VYSVRfRVhDUF9CQVNFICsgUEZfVkVDVE9SKQorCQlzdm0tPmFwZl9yZWFzb24gPSBrdm1fcmVhZF9hbmRfcmVzZXRfcGZfcmVhc29uKCk7CisKIAlpZiAobnB0X2VuYWJsZWQpIHsKIAkJdmNwdS0+YXJjaC5yZWdzX2F2YWlsICY9IH4oMSA8PCBWQ1BVX0VYUkVHX1BEUFRSKTsKIAkJdmNwdS0+YXJjaC5yZWdzX2RpcnR5ICY9IH4oMSA8PCBWQ1BVX0VYUkVHX1BEUFRSKTsKQEAgLTM0MjYsNiArMzY3NCw4IEBACiAJaWYgKHVubGlrZWx5KHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGUgPT0KIAkJICAgICBTVk1fRVhJVF9FWENQX0JBU0UgKyBNQ19WRUNUT1IpKQogCQlzdm1faGFuZGxlX21jZShzdm0pOworCisJbWFya19hbGxfY2xlYW4oc3ZtLT52bWNiKTsKIH0KIAogI3VuZGVmIFIKQEAgLTM0MzUsNyArMzY4NSw4IEBACiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKIAlzdm0tPnZtY2ItPnNhdmUuY3IzID0gcm9vdDsKLQlmb3JjZV9uZXdfYXNpZCh2Y3B1KTsKKwltYXJrX2RpcnR5KHN2bS0+dm1jYiwgVk1DQl9DUik7CisJc3ZtX2ZsdXNoX3RsYih2Y3B1KTsKIH0KIAogc3RhdGljIHZvaWQgc2V0X3RkcF9jcjMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHJvb3QpCkBAIC0zNDQzLDExICszNjk0LDEzIEBACiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKIAlzdm0tPnZtY2ItPmNvbnRyb2wubmVzdGVkX2NyMyA9IHJvb3Q7CisJbWFya19kaXJ0eShzdm0tPnZtY2IsIFZNQ0JfTlBUKTsKIAogCS8qIEFsc28gc3luYyBndWVzdCBjcjMgaGVyZSBpbiBjYXNlIHdlIGxpdmUgbWlncmF0ZSAqLwotCXN2bS0+dm1jYi0+c2F2ZS5jcjMgPSB2Y3B1LT5hcmNoLmNyMzsKKwlzdm0tPnZtY2ItPnNhdmUuY3IzID0ga3ZtX3JlYWRfY3IzKHZjcHUpOworCW1hcmtfZGlydHkoc3ZtLT52bWNiLCBWTUNCX0NSKTsKIAotCWZvcmNlX25ld19hc2lkKHZjcHUpOworCXN2bV9mbHVzaF90bGIodmNwdSk7CiB9CiAKIHN0YXRpYyBpbnQgaXNfZGlzYWJsZWQodm9pZCkKQEAgLTM0OTQsMTAgKzM3NDcsNiBAQAogc3RhdGljIHZvaWQgc3ZtX3NldF9zdXBwb3J0ZWRfY3B1aWQodTMyIGZ1bmMsIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICplbnRyeSkKIHsKIAlzd2l0Y2ggKGZ1bmMpIHsKLQljYXNlIDB4MDAwMDAwMDE6Ci0JCS8qIE1hc2sgb3V0IHhzYXZlIGJpdCBhcyBsb25nIGFzIGl0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgU1ZNICovCi0JCWVudHJ5LT5lY3ggJj0gfihiaXQoWDg2X0ZFQVRVUkVfWFNBVkUpKTsKLQkJYnJlYWs7CiAJY2FzZSAweDgwMDAwMDAxOgogCQlpZiAobmVzdGVkKQogCQkJZW50cnktPmVjeCB8PSAoMSA8PCAyKTsgLyogU2V0IFNWTSBiaXQgKi8KQEAgLTM1MTEsNyArMzc2MCw3IEBACiAJCQkJICAgYWRkaXRpb25hbCBmZWF0dXJlcyAqLwogCiAJCS8qIFN1cHBvcnQgbmV4dF9yaXAgaWYgaG9zdCBzdXBwb3J0cyBpdCAqLwotCQlpZiAoc3ZtX2hhcyhTVk1fRkVBVFVSRV9OUklQKSkKKwkJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OUklQUykpCiAJCQllbnRyeS0+ZWR4IHw9IFNWTV9GRUFUVVJFX05SSVA7CiAKIAkJLyogU3VwcG9ydCBOUFQgZm9yIHRoZSBndWVzdCBpZiBlbmFibGVkICovCkBAIC0zNTcxLDYgKzM4MjAsNyBAQAogCXsgU1ZNX0VYSVRfV0JJTlZELAkJCSJ3YmludmQiIH0sCiAJeyBTVk1fRVhJVF9NT05JVE9SLAkJCSJtb25pdG9yIiB9LAogCXsgU1ZNX0VYSVRfTVdBSVQsCQkJIm13YWl0IiB9LAorCXsgU1ZNX0VYSVRfWFNFVEJWLAkJCSJ4c2V0YnYiIH0sCiAJeyBTVk1fRVhJVF9OUEYsCQkJCSJucGYiIH0sCiAJeyAtMSwgTlVMTCB9CiB9OwpAQCAtMzU5NCw5ICszODQ0LDcgQEAKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAotCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PSAxIDw8IE5NX1ZFQ1RPUjsKLQlpZiAoaXNfbmVzdGVkKHN2bSkpCi0JCXN2bS0+bmVzdGVkLmhzYXZlLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9IDEgPDwgTk1fVkVDVE9SOworCXNldF9leGNlcHRpb25faW50ZXJjZXB0KHN2bSwgTk1fVkVDVE9SKTsKIAl1cGRhdGVfY3IwX2ludGVyY2VwdChzdm0pOwogfQogCkBAIC0zNjI3LDYgKzM4NzUsNyBAQAogCS5nZXRfY3BsID0gc3ZtX2dldF9jcGwsCiAJLmdldF9jc19kYl9sX2JpdHMgPSBrdm1fZ2V0X2NzX2RiX2xfYml0cywKIAkuZGVjYWNoZV9jcjBfZ3Vlc3RfYml0cyA9IHN2bV9kZWNhY2hlX2NyMF9ndWVzdF9iaXRzLAorCS5kZWNhY2hlX2NyMyA9IHN2bV9kZWNhY2hlX2NyMywKIAkuZGVjYWNoZV9jcjRfZ3Vlc3RfYml0cyA9IHN2bV9kZWNhY2hlX2NyNF9ndWVzdF9iaXRzLAogCS5zZXRfY3IwID0gc3ZtX3NldF9jcjAsCiAJLnNldF9jcjMgPSBzdm1fc2V0X2NyMywKQEAgLTM2NjcsNyArMzkxNiw5IEBACiAJLmdldF90ZHBfbGV2ZWwgPSBnZXRfbnB0X2xldmVsLAogCS5nZXRfbXRfbWFzayA9IHN2bV9nZXRfbXRfbWFzaywKIAorCS5nZXRfZXhpdF9pbmZvID0gc3ZtX2dldF9leGl0X2luZm8sCiAJLmV4aXRfcmVhc29uc19zdHIgPSBzdm1fZXhpdF9yZWFzb25zX3N0ciwKKwogCS5nZXRfbHBhZ2VfbGV2ZWwgPSBzdm1fZ2V0X2xwYWdlX2xldmVsLAogCiAJLmNwdWlkX3VwZGF0ZSA9IHN2bV9jcHVpZF91cGRhdGUsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdHJhY2UuaCBiL2FyY2gveDg2L2t2bS90cmFjZS5oCmluZGV4IGE2NTQ0YjguLjEzNTdkN2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS90cmFjZS5oCisrKyBiL2FyY2gveDg2L2t2bS90cmFjZS5oCkBAIC0xNzgsMjcgKzE3OCwzNiBAQAogI2RlZmluZSB0cmFjZV9rdm1fYXBpY19yZWFkKHJlZywgdmFsKQkJdHJhY2Vfa3ZtX2FwaWMoMCwgcmVnLCB2YWwpCiAjZGVmaW5lIHRyYWNlX2t2bV9hcGljX3dyaXRlKHJlZywgdmFsKQkJdHJhY2Vfa3ZtX2FwaWMoMSwgcmVnLCB2YWwpCiAKKyNkZWZpbmUgS1ZNX0lTQV9WTVggICAxCisjZGVmaW5lIEtWTV9JU0FfU1ZNICAgMgorCiAvKgogICogVHJhY2Vwb2ludCBmb3Iga3ZtIGd1ZXN0IGV4aXQ6CiAgKi8KIFRSQUNFX0VWRU5UKGt2bV9leGl0LAotCVRQX1BST1RPKHVuc2lnbmVkIGludCBleGl0X3JlYXNvbiwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSwKLQlUUF9BUkdTKGV4aXRfcmVhc29uLCB2Y3B1KSwKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgZXhpdF9yZWFzb24sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGlzYSksCisJVFBfQVJHUyhleGl0X3JlYXNvbiwgdmNwdSwgaXNhKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJZXhpdF9yZWFzb24JKQogCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlndWVzdF9yaXAJKQorCQlfX2ZpZWxkKAl1MzIsCSAgICAgICAgaXNhICAgICAgICAgICAgICkKKwkJX19maWVsZCgJdTY0LAkgICAgICAgIGluZm8xICAgICAgICAgICApCisJCV9fZmllbGQoCXU2NCwJICAgICAgICBpbmZvMiAgICAgICAgICAgKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKIAkJX19lbnRyeS0+ZXhpdF9yZWFzb24JPSBleGl0X3JlYXNvbjsKIAkJX19lbnRyeS0+Z3Vlc3RfcmlwCT0ga3ZtX3JpcF9yZWFkKHZjcHUpOworCQlfX2VudHJ5LT5pc2EgICAgICAgICAgICA9IGlzYTsKKwkJa3ZtX3g4Nl9vcHMtPmdldF9leGl0X2luZm8odmNwdSwgJl9fZW50cnktPmluZm8xLAorCQkJCQkgICAmX19lbnRyeS0+aW5mbzIpOwogCSksCiAKLQlUUF9wcmludGsoInJlYXNvbiAlcyByaXAgMHglbHgiLAorCVRQX3ByaW50aygicmVhc29uICVzIHJpcCAweCVseCBpbmZvICVsbHggJWxseCIsCiAJCSBmdHJhY2VfcHJpbnRfc3ltYm9sc19zZXEocCwgX19lbnRyeS0+ZXhpdF9yZWFzb24sCiAJCQkJCSAga3ZtX3g4Nl9vcHMtPmV4aXRfcmVhc29uc19zdHIpLAotCQkgX19lbnRyeS0+Z3Vlc3RfcmlwKQorCQkgX19lbnRyeS0+Z3Vlc3RfcmlwLCBfX2VudHJ5LT5pbmZvMSwgX19lbnRyeS0+aW5mbzIpCiApOwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC5jCmluZGV4IDgxZmNiZTkuLmJmODllYzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXguYworKysgYi9hcmNoL3g4Ni9rdm0vdm14LmMKQEAgLTY5LDYgKzY5LDkgQEAKIHN0YXRpYyBpbnQgX19yZWFkX21vc3RseSB2bW1fZXhjbHVzaXZlID0gMTsKIG1vZHVsZV9wYXJhbSh2bW1fZXhjbHVzaXZlLCBib29sLCBTX0lSVUdPKTsKIAorc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IHlpZWxkX29uX2hsdCA9IDE7Cittb2R1bGVfcGFyYW0oeWllbGRfb25faGx0LCBib29sLCBTX0lSVUdPKTsKKwogI2RlZmluZSBLVk1fR1VFU1RfQ1IwX01BU0tfVU5SRVNUUklDVEVEX0dVRVNUCQkJCVwKIAkoWDg2X0NSMF9XUCB8IFg4Nl9DUjBfTkUgfCBYODZfQ1IwX05XIHwgWDg2X0NSMF9DRCkKICNkZWZpbmUgS1ZNX0dVRVNUX0NSMF9NQVNLCQkJCQkJXApAQCAtMTc3LDYgKzE4MCw3IEBACiBzdGF0aWMgdTY0IGNvbnN0cnVjdF9lcHRwKHVuc2lnbmVkIGxvbmcgcm9vdF9ocGEpOwogc3RhdGljIHZvaWQga3ZtX2NwdV92bXhvbih1NjQgYWRkcik7CiBzdGF0aWMgdm9pZCBrdm1fY3B1X3ZteG9mZih2b2lkKTsKK3N0YXRpYyB2b2lkIHZteF9zZXRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMpOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHZtY3MgKiwgdm14YXJlYSk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHZtY3MgKiwgY3VycmVudF92bWNzKTsKQEAgLTE4OCw2ICsxOTIsOCBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgKnZteF9tc3JfYml0bWFwX2xlZ2FjeTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nICp2bXhfbXNyX2JpdG1hcF9sb25nbW9kZTsKIAorc3RhdGljIGJvb2wgY3B1X2hhc19sb2FkX2lhMzJfZWZlcjsKKwogc3RhdGljIERFQ0xBUkVfQklUTUFQKHZteF92cGlkX2JpdG1hcCwgVk1YX05SX1ZQSURTKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodm14X3ZwaWRfbG9jayk7CiAKQEAgLTQ3Miw3ICs0NzgsNyBAQAogCXU4IGVycm9yOwogCiAJYXNtIHZvbGF0aWxlIChfX2V4KEFTTV9WTVhfVk1DTEVBUl9SQVgpICI7IHNldG5hICUwIgotCQkgICAgICA6ICI9ZyIoZXJyb3IpIDogImEiKCZwaHlzX2FkZHIpLCAibSIocGh5c19hZGRyKQorCQkgICAgICA6ICI9cW0iKGVycm9yKSA6ICJhIigmcGh5c19hZGRyKSwgIm0iKHBoeXNfYWRkcikKIAkJICAgICAgOiAiY2MiLCAibWVtb3J5Iik7CiAJaWYgKGVycm9yKQogCQlwcmludGsoS0VSTl9FUlIgImt2bTogdm1jbGVhciBmYWlsOiAlcC8lbGx4XG4iLApAQCAtNDg1LDcgKzQ5MSw3IEBACiAJdTggZXJyb3I7CiAKIAlhc20gdm9sYXRpbGUgKF9fZXgoQVNNX1ZNWF9WTVBUUkxEX1JBWCkgIjsgc2V0bmEgJTAiCi0JCQk6ICI9ZyIoZXJyb3IpIDogImEiKCZwaHlzX2FkZHIpLCAibSIocGh5c19hZGRyKQorCQkJOiAiPXFtIihlcnJvcikgOiAiYSIoJnBoeXNfYWRkciksICJtIihwaHlzX2FkZHIpCiAJCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlpZiAoZXJyb3IpCiAJCXByaW50ayhLRVJOX0VSUiAia3ZtOiB2bXB0cmxkICVwLyVsbHggZmFpbFxuIiwKQEAgLTU2NSwxMCArNTcxLDEwIEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZtY3NfcmVhZGwodW5zaWduZWQgbG9uZyBmaWVsZCkKIHsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwOwogCiAJYXNtIHZvbGF0aWxlIChfX2V4KEFTTV9WTVhfVk1SRUFEX1JEWF9SQVgpCi0JCSAgICAgIDogIj1hIih2YWx1ZSkgOiAiZCIoZmllbGQpIDogImNjIik7CisJCSAgICAgIDogIithIih2YWx1ZSkgOiAiZCIoZmllbGQpIDogImNjIik7CiAJcmV0dXJuIHZhbHVlOwogfQogCkBAIC02NjEsNiArNjY3LDEyIEBACiAJdW5zaWduZWQgaTsKIAlzdHJ1Y3QgbXNyX2F1dG9sb2FkICptID0gJnZteC0+bXNyX2F1dG9sb2FkOwogCisJaWYgKG1zciA9PSBNU1JfRUZFUiAmJiBjcHVfaGFzX2xvYWRfaWEzMl9lZmVyKSB7CisJCXZtY3NfY2xlYXJfYml0cyhWTV9FTlRSWV9DT05UUk9MUywgVk1fRU5UUllfTE9BRF9JQTMyX0VGRVIpOworCQl2bWNzX2NsZWFyX2JpdHMoVk1fRVhJVF9DT05UUk9MUywgVk1fRVhJVF9MT0FEX0lBMzJfRUZFUik7CisJCXJldHVybjsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgbS0+bnI7ICsraSkKIAkJaWYgKG0tPmd1ZXN0W2ldLmluZGV4ID09IG1zcikKIAkJCWJyZWFrOwpAQCAtNjgwLDYgKzY5MiwxNCBAQAogCXVuc2lnbmVkIGk7CiAJc3RydWN0IG1zcl9hdXRvbG9hZCAqbSA9ICZ2bXgtPm1zcl9hdXRvbG9hZDsKIAorCWlmIChtc3IgPT0gTVNSX0VGRVIgJiYgY3B1X2hhc19sb2FkX2lhMzJfZWZlcikgeworCQl2bWNzX3dyaXRlNjQoR1VFU1RfSUEzMl9FRkVSLCBndWVzdF92YWwpOworCQl2bWNzX3dyaXRlNjQoSE9TVF9JQTMyX0VGRVIsIGhvc3RfdmFsKTsKKwkJdm1jc19zZXRfYml0cyhWTV9FTlRSWV9DT05UUk9MUywgVk1fRU5UUllfTE9BRF9JQTMyX0VGRVIpOworCQl2bWNzX3NldF9iaXRzKFZNX0VYSVRfQ09OVFJPTFMsIFZNX0VYSVRfTE9BRF9JQTMyX0VGRVIpOworCQlyZXR1cm47CisJfQorCiAJZm9yIChpID0gMDsgaSA8IG0tPm5yOyArK2kpCiAJCWlmIChtLT5ndWVzdFtpXS5pbmRleCA9PSBtc3IpCiAJCQlicmVhazsKQEAgLTEwMDksNiArMTAyOSwxNyBAQAogCXZteF9zZXRfaW50ZXJydXB0X3NoYWRvdyh2Y3B1LCAwKTsKIH0KIAorc3RhdGljIHZvaWQgdm14X2NsZWFyX2hsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJLyogRW5zdXJlIHRoYXQgd2UgY2xlYXIgdGhlIEhMVCBzdGF0ZSBpbiB0aGUgVk1DUy4gIFdlIGRvbid0IG5lZWQgdG8KKwkgKiBleHBsaWNpdGx5IHNraXAgdGhlIGluc3RydWN0aW9uIGJlY2F1c2UgaWYgdGhlIEhMVCBzdGF0ZSBpcyBzZXQsIHRoZW4KKwkgKiB0aGUgaW5zdHJ1Y3Rpb24gaXMgYWxyZWFkeSBleGVjdXRpbmcgYW5kIFJJUCBoYXMgYWxyZWFkeSBiZWVuCisJICogYWR2YW5jZWQuICovCisJaWYgKCF5aWVsZF9vbl9obHQgJiYKKwkgICAgdm1jc19yZWFkMzIoR1VFU1RfQUNUSVZJVFlfU1RBVEUpID09IEdVRVNUX0FDVElWSVRZX0hMVCkKKwkJdm1jc193cml0ZTMyKEdVRVNUX0FDVElWSVRZX1NUQVRFLCBHVUVTVF9BQ1RJVklUWV9BQ1RJVkUpOworfQorCiBzdGF0aWMgdm9pZCB2bXhfcXVldWVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbnIsCiAJCQkJYm9vbCBoYXNfZXJyb3JfY29kZSwgdTMyIGVycm9yX2NvZGUsCiAJCQkJYm9vbCByZWluamVjdCkKQEAgLTEwMzUsNiArMTA2Niw3IEBACiAJCWludHJfaW5mbyB8PSBJTlRSX1RZUEVfSEFSRF9FWENFUFRJT047CiAKIAl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELCBpbnRyX2luZm8pOworCXZteF9jbGVhcl9obHQodmNwdSk7CiB9CiAKIHN0YXRpYyBib29sIHZteF9yZHRzY3Bfc3VwcG9ydGVkKHZvaWQpCkBAIC0xMzA1LDggKzEzMzcsMTEgQEAKIAkJCSYmIHRib290X2VuYWJsZWQoKSkKIAkJCXJldHVybiAxOwogCQlpZiAoIShtc3IgJiBGRUFUVVJFX0NPTlRST0xfVk1YT05fRU5BQkxFRF9PVVRTSURFX1NNWCkKLQkJCSYmICF0Ym9vdF9lbmFibGVkKCkpCisJCQkmJiAhdGJvb3RfZW5hYmxlZCgpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJrdm06IGRpc2FibGUgVFhUIGluIHRoZSBCSU9TIG9yICIKKwkJCQkiIGFjdGl2YXRlIFRYVCBiZWZvcmUgZW5hYmxpbmcgS1ZNXG4iKTsKIAkJCXJldHVybiAxOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNDAwLDYgKzE0MzUsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIF9faW5pdCBib29sIGFsbG93XzFfc2V0dGluZyh1MzIgbXNyLCB1MzIgY3RsKQoreworCXUzMiB2bXhfbXNyX2xvdywgdm14X21zcl9oaWdoOworCisJcmRtc3IobXNyLCB2bXhfbXNyX2xvdywgdm14X21zcl9oaWdoKTsKKwlyZXR1cm4gdm14X21zcl9oaWdoICYgY3RsOworfQorCiBzdGF0aWMgX19pbml0IGludCBzZXR1cF92bWNzX2NvbmZpZyhzdHJ1Y3Qgdm1jc19jb25maWcgKnZtY3NfY29uZikKIHsKIAl1MzIgdm14X21zcl9sb3csIHZteF9tc3JfaGlnaDsKQEAgLTE0MTYsNyArMTQ1OSw3IEBACiAJCQkJJl9waW5fYmFzZWRfZXhlY19jb250cm9sKSA8IDApCiAJCXJldHVybiAtRUlPOwogCi0JbWluID0gQ1BVX0JBU0VEX0hMVF9FWElUSU5HIHwKKwltaW4gPQogI2lmZGVmIENPTkZJR19YODZfNjQKIAkgICAgICBDUFVfQkFTRURfQ1I4X0xPQURfRVhJVElORyB8CiAJICAgICAgQ1BVX0JBU0VEX0NSOF9TVE9SRV9FWElUSU5HIHwKQEAgLTE0MjksNiArMTQ3MiwxMCBAQAogCSAgICAgIENQVV9CQVNFRF9NV0FJVF9FWElUSU5HIHwKIAkgICAgICBDUFVfQkFTRURfTU9OSVRPUl9FWElUSU5HIHwKIAkgICAgICBDUFVfQkFTRURfSU5WTFBHX0VYSVRJTkc7CisKKwlpZiAoeWllbGRfb25faGx0KQorCQltaW4gfD0gQ1BVX0JBU0VEX0hMVF9FWElUSU5HOworCiAJb3B0ID0gQ1BVX0JBU0VEX1RQUl9TSEFET1cgfAogCSAgICAgIENQVV9CQVNFRF9VU0VfTVNSX0JJVE1BUFMgfAogCSAgICAgIENQVV9CQVNFRF9BQ1RJVkFURV9TRUNPTkRBUllfQ09OVFJPTFM7CkBAIC0xNTEwLDYgKzE1NTcsMTIgQEAKIAl2bWNzX2NvbmYtPnZtZXhpdF9jdHJsICAgICAgICAgPSBfdm1leGl0X2NvbnRyb2w7CiAJdm1jc19jb25mLT52bWVudHJ5X2N0cmwgICAgICAgID0gX3ZtZW50cnlfY29udHJvbDsKIAorCWNwdV9oYXNfbG9hZF9pYTMyX2VmZXIgPQorCQlhbGxvd18xX3NldHRpbmcoTVNSX0lBMzJfVk1YX0VOVFJZX0NUTFMsCisJCQkJVk1fRU5UUllfTE9BRF9JQTMyX0VGRVIpCisJCSYmIGFsbG93XzFfc2V0dGluZyhNU1JfSUEzMl9WTVhfRVhJVF9DVExTLAorCQkJCSAgIFZNX0VYSVRfTE9BRF9JQTMyX0VGRVIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2ODMsOSArMTczNiwxMyBAQAogCXNhdmUtPmxpbWl0ID0gdm1jc19yZWFkMzIoc2YtPmxpbWl0KTsKIAlzYXZlLT5hciA9IHZtY3NfcmVhZDMyKHNmLT5hcl9ieXRlcyk7CiAJdm1jc193cml0ZTE2KHNmLT5zZWxlY3Rvciwgc2F2ZS0+YmFzZSA+PiA0KTsKLQl2bWNzX3dyaXRlMzIoc2YtPmJhc2UsIHNhdmUtPmJhc2UgJiAweGZmZmZmKTsKKwl2bWNzX3dyaXRlMzIoc2YtPmJhc2UsIHNhdmUtPmJhc2UgJiAweGZmZmYwKTsKIAl2bWNzX3dyaXRlMzIoc2YtPmxpbWl0LCAweGZmZmYpOwogCXZtY3Nfd3JpdGUzMihzZi0+YXJfYnl0ZXMsIDB4ZjMpOworCWlmIChzYXZlLT5iYXNlICYgMHhmKQorCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgImt2bTogc2VnbWVudCBiYXNlIGlzIG5vdCBwYXJhZ3JhcGgiCisJCQkgICAgIiBhbGlnbmVkIHdoZW4gZW50ZXJpbmcgcHJvdGVjdGVkIG1vZGUgKHNlZz0lZCkiLAorCQkJICAgIHNlZyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVudGVyX3Jtb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTE4MTQsNiArMTg3MSwxMyBAQAogCXZjcHUtPmFyY2guY3IwIHw9IHZtY3NfcmVhZGwoR1VFU1RfQ1IwKSAmIGNyMF9ndWVzdF9vd25lZF9iaXRzOwogfQogCitzdGF0aWMgdm9pZCB2bXhfZGVjYWNoZV9jcjMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWlmIChlbmFibGVfZXB0ICYmIGlzX3BhZ2luZyh2Y3B1KSkKKwkJdmNwdS0+YXJjaC5jcjMgPSB2bWNzX3JlYWRsKEdVRVNUX0NSMyk7CisJX19zZXRfYml0KFZDUFVfRVhSRUdfQ1IzLCAodWxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKTsKK30KKwogc3RhdGljIHZvaWQgdm14X2RlY2FjaGVfY3I0X2d1ZXN0X2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVsb25nIGNyNF9ndWVzdF9vd25lZF9iaXRzID0gdmNwdS0+YXJjaC5jcjRfZ3Vlc3Rfb3duZWRfYml0czsKQEAgLTE4NTcsNiArMTkyMSw3IEBACiAJCQkJCXVuc2lnbmVkIGxvbmcgY3IwLAogCQkJCQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CisJdm14X2RlY2FjaGVfY3IzKHZjcHUpOwogCWlmICghKGNyMCAmIFg4Nl9DUjBfUEcpKSB7CiAJCS8qIEZyb20gcGFnaW5nL3N0YXJ0aW5nIHRvIG5vbnBhZ2luZyAqLwogCQl2bWNzX3dyaXRlMzIoQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwKQEAgLTE5MzcsNyArMjAwMiw3IEBACiAJaWYgKGVuYWJsZV9lcHQpIHsKIAkJZXB0cCA9IGNvbnN0cnVjdF9lcHRwKGNyMyk7CiAJCXZtY3Nfd3JpdGU2NChFUFRfUE9JTlRFUiwgZXB0cCk7Ci0JCWd1ZXN0X2NyMyA9IGlzX3BhZ2luZyh2Y3B1KSA/IHZjcHUtPmFyY2guY3IzIDoKKwkJZ3Vlc3RfY3IzID0gaXNfcGFnaW5nKHZjcHUpID8ga3ZtX3JlYWRfY3IzKHZjcHUpIDoKIAkJCXZjcHUtPmt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfbWFwX2FkZHI7CiAJCWVwdF9sb2FkX3BkcHRycyh2Y3B1KTsKIAl9CkBAIC0yNzI1LDcgKzI3OTAsNyBAQAogCXZtY3Nfd3JpdGVsKEdVRVNUX0lEVFJfQkFTRSwgMCk7CiAJdm1jc193cml0ZTMyKEdVRVNUX0lEVFJfTElNSVQsIDB4ZmZmZik7CiAKLQl2bWNzX3dyaXRlMzIoR1VFU1RfQUNUSVZJVFlfU1RBVEUsIDApOworCXZtY3Nfd3JpdGUzMihHVUVTVF9BQ1RJVklUWV9TVEFURSwgR1VFU1RfQUNUSVZJVFlfQUNUSVZFKTsKIAl2bWNzX3dyaXRlMzIoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLCAwKTsKIAl2bWNzX3dyaXRlMzIoR1VFU1RfUEVORElOR19EQkdfRVhDRVBUSU9OUywgMCk7CiAKQEAgLTI3ODcsNiArMjg1MiwxMCBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKHZtY3NfcmVhZDMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTykgJiBHVUVTVF9JTlRSX1NUQVRFX1NUSSkgeworCQllbmFibGVfaXJxX3dpbmRvdyh2Y3B1KTsKKwkJcmV0dXJuOworCX0KIAljcHVfYmFzZWRfdm1fZXhlY19jb250cm9sID0gdm1jc19yZWFkMzIoQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCk7CiAJY3B1X2Jhc2VkX3ZtX2V4ZWNfY29udHJvbCB8PSBDUFVfQkFTRURfVklSVFVBTF9OTUlfUEVORElORzsKIAl2bWNzX3dyaXRlMzIoQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgY3B1X2Jhc2VkX3ZtX2V4ZWNfY29udHJvbCk7CkBAIC0yODE0LDYgKzI4ODMsNyBAQAogCX0gZWxzZQogCQlpbnRyIHw9IElOVFJfVFlQRV9FWFRfSU5UUjsKIAl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELCBpbnRyKTsKKwl2bXhfY2xlYXJfaGx0KHZjcHUpOwogfQogCiBzdGF0aWMgdm9pZCB2bXhfaW5qZWN0X25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yODQxLDYgKzI5MTEsNyBAQAogCX0KIAl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELAogCQkJSU5UUl9UWVBFX05NSV9JTlRSIHwgSU5UUl9JTkZPX1ZBTElEX01BU0sgfCBOTUlfVkVDVE9SKTsKKwl2bXhfY2xlYXJfaGx0KHZjcHUpOwogfQogCiBzdGF0aWMgaW50IHZteF9ubWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yODQ5LDcgKzI5MjAsOCBAQAogCQlyZXR1cm4gMDsKIAogCXJldHVybgkhKHZtY3NfcmVhZDMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTykgJgotCQkJKEdVRVNUX0lOVFJfU1RBVEVfTU9WX1NTIHwgR1VFU1RfSU5UUl9TVEFURV9OTUkpKTsKKwkJICAoR1VFU1RfSU5UUl9TVEFURV9NT1ZfU1MgfCBHVUVTVF9JTlRSX1NUQVRFX1NUSQorCQkgICB8IEdVRVNUX0lOVFJfU1RBVEVfTk1JKSk7CiB9CiAKIHN0YXRpYyBib29sIHZteF9nZXRfbm1pX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMjkxMCw3ICsyOTgyLDcgQEAKIAkgKiBDYXVzZSB0aGUgI1NTIGZhdWx0IHdpdGggMCBlcnJvciBjb2RlIGluIFZNODYgbW9kZS4KIAkgKi8KIAlpZiAoKCh2ZWMgPT0gR1BfVkVDVE9SKSB8fCAodmVjID09IFNTX1ZFQ1RPUikpICYmIGVycl9jb2RlID09IDApCi0JCWlmIChlbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIDAsIDApID09IEVNVUxBVEVfRE9ORSkKKwkJaWYgKGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCkgPT0gRU1VTEFURV9ET05FKQogCQkJcmV0dXJuIDE7CiAJLyoKIAkgKiBGb3J3YXJkIGFsbCBvdGhlciBleGNlcHRpb25zIHRoYXQgYXJlIHZhbGlkIGluIHJlYWwgbW9kZS4KQEAgLTMwMDcsNyArMzA3OSw3IEBACiAJfQogCiAJaWYgKGlzX2ludmFsaWRfb3Bjb2RlKGludHJfaW5mbykpIHsKLQkJZXIgPSBlbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIDAsIEVNVUxUWVBFX1RSQVBfVUQpOworCQllciA9IGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgRU1VTFRZUEVfVFJBUF9VRCk7CiAJCWlmIChlciAhPSBFTVVMQVRFX0RPTkUpCiAJCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7CiAJCXJldHVybiAxOwpAQCAtMzAyNiw3ICszMDk4LDcgQEAKIAogCQlpZiAoa3ZtX2V2ZW50X25lZWRzX3JlaW5qZWN0aW9uKHZjcHUpKQogCQkJa3ZtX21tdV91bnByb3RlY3RfcGFnZV92aXJ0KHZjcHUsIGNyMik7Ci0JCXJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgY3IyLCBlcnJvcl9jb2RlKTsKKwkJcmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBjcjIsIGVycm9yX2NvZGUsIE5VTEwsIDApOwogCX0KIAogCWlmICh2bXgtPnJtb2RlLnZtODZfYWN0aXZlICYmCkBAIC0zMDk4LDcgKzMxNzAsNyBAQAogCSsrdmNwdS0+c3RhdC5pb19leGl0czsKIAogCWlmIChzdHJpbmcgfHwgaW4pCi0JCXJldHVybiBlbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIDAsIDApID09IEVNVUxBVEVfRE9ORTsKKwkJcmV0dXJuIGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCkgPT0gRU1VTEFURV9ET05FOwogCiAJcG9ydCA9IGV4aXRfcXVhbGlmaWNhdGlvbiA+PiAxNjsKIAlzaXplID0gKGV4aXRfcXVhbGlmaWNhdGlvbiAmIDcpICsgMTsKQEAgLTMxMTgsMTQgKzMxOTAsNiBAQAogCWh5cGVyY2FsbFsyXSA9IDB4YzE7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbXBsZXRlX2luc25fZ3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKQotewotCWlmIChlcnIpCi0JCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7Ci0JZWxzZQotCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwotfQotCiBzdGF0aWMgaW50IGhhbmRsZV9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sIHZhbDsKQEAgLTMxNDMsMjEgKzMyMDcsMjEgQEAKIAkJc3dpdGNoIChjcikgewogCQljYXNlIDA6CiAJCQllcnIgPSBrdm1fc2V0X2NyMCh2Y3B1LCB2YWwpOwotCQkJY29tcGxldGVfaW5zbl9ncCh2Y3B1LCBlcnIpOworCQkJa3ZtX2NvbXBsZXRlX2luc25fZ3AodmNwdSwgZXJyKTsKIAkJCXJldHVybiAxOwogCQljYXNlIDM6CiAJCQllcnIgPSBrdm1fc2V0X2NyMyh2Y3B1LCB2YWwpOwotCQkJY29tcGxldGVfaW5zbl9ncCh2Y3B1LCBlcnIpOworCQkJa3ZtX2NvbXBsZXRlX2luc25fZ3AodmNwdSwgZXJyKTsKIAkJCXJldHVybiAxOwogCQljYXNlIDQ6CiAJCQllcnIgPSBrdm1fc2V0X2NyNCh2Y3B1LCB2YWwpOwotCQkJY29tcGxldGVfaW5zbl9ncCh2Y3B1LCBlcnIpOworCQkJa3ZtX2NvbXBsZXRlX2luc25fZ3AodmNwdSwgZXJyKTsKIAkJCXJldHVybiAxOwogCQljYXNlIDg6IHsKIAkJCQl1OCBjcjhfcHJldiA9IGt2bV9nZXRfY3I4KHZjcHUpOwogCQkJCXU4IGNyOCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIHJlZyk7Ci0JCQkJa3ZtX3NldF9jcjgodmNwdSwgY3I4KTsKLQkJCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOworCQkJCWVyciA9IGt2bV9zZXRfY3I4KHZjcHUsIGNyOCk7CisJCQkJa3ZtX2NvbXBsZXRlX2luc25fZ3AodmNwdSwgZXJyKTsKIAkJCQlpZiAoaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0+a3ZtKSkKIAkJCQkJcmV0dXJuIDE7CiAJCQkJaWYgKGNyOF9wcmV2IDw9IGNyOCkKQEAgLTMxNzYsOCArMzI0MCw5IEBACiAJY2FzZSAxOiAvKm1vdiBmcm9tIGNyKi8KIAkJc3dpdGNoIChjcikgewogCQljYXNlIDM6Ci0JCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgcmVnLCB2Y3B1LT5hcmNoLmNyMyk7Ci0JCQl0cmFjZV9rdm1fY3JfcmVhZChjciwgdmNwdS0+YXJjaC5jcjMpOworCQkJdmFsID0ga3ZtX3JlYWRfY3IzKHZjcHUpOworCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIHJlZywgdmFsKTsKKwkJCXRyYWNlX2t2bV9jcl9yZWFkKGNyLCB2YWwpOwogCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAkJCXJldHVybiAxOwogCQljYXNlIDg6CkBAIC0zMzQ5LDYgKzM0MTQsMTEgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBoYW5kbGVfaW52ZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCkgPT0gRU1VTEFURV9ET05FOworfQorCiBzdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pOwpAQCAtMzM3Nyw3ICszNDQ3LDcgQEAKIAogc3RhdGljIGludCBoYW5kbGVfYXBpY19hY2Nlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXJldHVybiBlbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIDAsIDApID09IEVNVUxBVEVfRE9ORTsKKwlyZXR1cm4gZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwKSA9PSBFTVVMQVRFX0RPTkU7CiB9CiAKIHN0YXRpYyBpbnQgaGFuZGxlX3Rhc2tfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTM0NzYsNyArMzU0Niw3IEBACiAKIAlncGEgPSB2bWNzX3JlYWQ2NChHVUVTVF9QSFlTSUNBTF9BRERSRVNTKTsKIAl0cmFjZV9rdm1fcGFnZV9mYXVsdChncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7Ci0JcmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEgJiBQQUdFX01BU0ssIDApOworCXJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBleGl0X3F1YWxpZmljYXRpb24gJiAweDMsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgdTY0IGVwdF9yc3ZkX21hc2sodTY0IHNwdGUsIGludCBsZXZlbCkKQEAgLTM1OTIsNyArMzY2Miw3IEBACiAJCSAgICAmJiAoa3ZtX2dldF9yZmxhZ3MoJnZteC0+dmNwdSkgJiBYODZfRUZMQUdTX0lGKSkKIAkJCXJldHVybiBoYW5kbGVfaW50ZXJydXB0X3dpbmRvdygmdm14LT52Y3B1KTsKIAotCQllcnIgPSBlbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIDAsIDApOworCQllcnIgPSBlbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDApOwogCiAJCWlmIChlcnIgPT0gRU1VTEFURV9ET19NTUlPKSB7CiAJCQlyZXQgPSAwOwpAQCAtMzY0OSw2ICszNzE5LDcgQEAKIAlbRVhJVF9SRUFTT05fTVNSX1dSSVRFXSAgICAgICAgICAgICAgID0gaGFuZGxlX3dybXNyLAogCVtFWElUX1JFQVNPTl9QRU5ESU5HX0lOVEVSUlVQVF0gICAgICAgPSBoYW5kbGVfaW50ZXJydXB0X3dpbmRvdywKIAlbRVhJVF9SRUFTT05fSExUXSAgICAgICAgICAgICAgICAgICAgID0gaGFuZGxlX2hhbHQsCisJW0VYSVRfUkVBU09OX0lOVkRdCQkgICAgICA9IGhhbmRsZV9pbnZkLAogCVtFWElUX1JFQVNPTl9JTlZMUEddCQkgICAgICA9IGhhbmRsZV9pbnZscGcsCiAJW0VYSVRfUkVBU09OX1ZNQ0FMTF0gICAgICAgICAgICAgICAgICA9IGhhbmRsZV92bWNhbGwsCiAJW0VYSVRfUkVBU09OX1ZNQ0xFQVJdCSAgICAgICAgICAgICAgPSBoYW5kbGVfdm14X2luc24sCkBAIC0zNjc2LDYgKzM3NDcsMTIgQEAKIHN0YXRpYyBjb25zdCBpbnQga3ZtX3ZteF9tYXhfZXhpdF9oYW5kbGVycyA9CiAJQVJSQVlfU0laRShrdm1fdm14X2V4aXRfaGFuZGxlcnMpOwogCitzdGF0aWMgdm9pZCB2bXhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqaW5mbzEsIHU2NCAqaW5mbzIpCit7CisJKmluZm8xID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pOworCSppbmZvMiA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9JTkZPKTsKK30KKwogLyoKICAqIFRoZSBndWVzdCBoYXMgZXhpdGVkLiAgU2VlIGlmIHdlIGNhbiBmaXggaXQgb3IgaWYgd2UgbmVlZCB1c2Vyc3BhY2UKICAqIGFzc2lzdGFuY2UuCkBAIC0zNjg2LDE3ICszNzYzLDEyIEBACiAJdTMyIGV4aXRfcmVhc29uID0gdm14LT5leGl0X3JlYXNvbjsKIAl1MzIgdmVjdG9yaW5nX2luZm8gPSB2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbzsKIAotCXRyYWNlX2t2bV9leGl0KGV4aXRfcmVhc29uLCB2Y3B1KTsKKwl0cmFjZV9rdm1fZXhpdChleGl0X3JlYXNvbiwgdmNwdSwgS1ZNX0lTQV9WTVgpOwogCiAJLyogSWYgZ3Vlc3Qgc3RhdGUgaXMgaW52YWxpZCwgc3RhcnQgZW11bGF0aW5nICovCiAJaWYgKHZteC0+ZW11bGF0aW9uX3JlcXVpcmVkICYmIGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSkKIAkJcmV0dXJuIGhhbmRsZV9pbnZhbGlkX2d1ZXN0X3N0YXRlKHZjcHUpOwogCi0JLyogQWNjZXNzIENSMyBkb24ndCBjYXVzZSBWTUV4aXQgaW4gcGFnaW5nIG1vZGUsIHNvIHdlIG5lZWQKLQkgKiB0byBzeW5jIHdpdGggZ3Vlc3QgcmVhbCBDUjMuICovCi0JaWYgKGVuYWJsZV9lcHQgJiYgaXNfcGFnaW5nKHZjcHUpKQotCQl2Y3B1LT5hcmNoLmNyMyA9IHZtY3NfcmVhZGwoR1VFU1RfQ1IzKTsKLQogCWlmIChleGl0X3JlYXNvbiAmIFZNWF9FWElUX1JFQVNPTlNfRkFJTEVEX1ZNRU5UUlkpIHsKIAkJdmNwdS0+cnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0ZBSUxfRU5UUlk7CiAJCXZjcHUtPnJ1bi0+ZmFpbF9lbnRyeS5oYXJkd2FyZV9lbnRyeV9mYWlsdXJlX3JlYXNvbgpAQCAtNDAxMyw3ICs0MDg1LDggQEAKIAkgICAgICApOwogCiAJdmNwdS0+YXJjaC5yZWdzX2F2YWlsID0gfigoMSA8PCBWQ1BVX1JFR1NfUklQKSB8ICgxIDw8IFZDUFVfUkVHU19SU1ApCi0JCQkJICB8ICgxIDw8IFZDUFVfRVhSRUdfUERQVFIpKTsKKwkJCQkgIHwgKDEgPDwgVkNQVV9FWFJFR19QRFBUUikKKwkJCQkgIHwgKDEgPDwgVkNQVV9FWFJFR19DUjMpKTsKIAl2Y3B1LT5hcmNoLnJlZ3NfZGlydHkgPSAwOwogCiAJdm14LT5pZHRfdmVjdG9yaW5nX2luZm8gPSB2bWNzX3JlYWQzMihJRFRfVkVDVE9SSU5HX0lORk9fRklFTEQpOwpAQCAtNDI4MCw2ICs0MzUzLDcgQEAKIAkuZ2V0X2NwbCA9IHZteF9nZXRfY3BsLAogCS5nZXRfY3NfZGJfbF9iaXRzID0gdm14X2dldF9jc19kYl9sX2JpdHMsCiAJLmRlY2FjaGVfY3IwX2d1ZXN0X2JpdHMgPSB2bXhfZGVjYWNoZV9jcjBfZ3Vlc3RfYml0cywKKwkuZGVjYWNoZV9jcjMgPSB2bXhfZGVjYWNoZV9jcjMsCiAJLmRlY2FjaGVfY3I0X2d1ZXN0X2JpdHMgPSB2bXhfZGVjYWNoZV9jcjRfZ3Vlc3RfYml0cywKIAkuc2V0X2NyMCA9IHZteF9zZXRfY3IwLAogCS5zZXRfY3IzID0gdm14X3NldF9jcjMsCkBAIC00MzIwLDcgKzQzOTQsOSBAQAogCS5nZXRfdGRwX2xldmVsID0gZ2V0X2VwdF9sZXZlbCwKIAkuZ2V0X210X21hc2sgPSB2bXhfZ2V0X210X21hc2ssCiAKKwkuZ2V0X2V4aXRfaW5mbyA9IHZteF9nZXRfZXhpdF9pbmZvLAogCS5leGl0X3JlYXNvbnNfc3RyID0gdm14X2V4aXRfcmVhc29uc19zdHIsCisKIAkuZ2V0X2xwYWdlX2xldmVsID0gdm14X2dldF9scGFnZV9sZXZlbCwKIAogCS5jcHVpZF91cGRhdGUgPSB2bXhfY3B1aWRfdXBkYXRlLApAQCAtNDM5Niw4ICs0NDcyLDYgQEAKIAogCWlmIChlbmFibGVfZXB0KSB7CiAJCWJ5cGFzc19ndWVzdF9wZiA9IDA7Ci0JCWt2bV9tbXVfc2V0X2Jhc2VfcHRlcyhWTVhfRVBUX1JFQURBQkxFX01BU0sgfAotCQkJVk1YX0VQVF9XUklUQUJMRV9NQVNLKTsKIAkJa3ZtX21tdV9zZXRfbWFza19wdGVzKDB1bGwsIDB1bGwsIDB1bGwsIDB1bGwsCiAJCQkJVk1YX0VQVF9FWEVDVVRBQkxFX01BU0spOwogCQlrdm1fZW5hYmxlX3RkcCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDQ2YTM2OGMuLmJjYzBlZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2t2bS5oPgogCiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKQEAgLTE1NSw2ICsxNTYsMTMgQEAKIAogdTY0IF9fcmVhZF9tb3N0bHkgaG9zdF94Y3IwOwogCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2FzeW5jX3BmX2hhc2hfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCByb3VuZHVwX3Bvd19vZl90d28oQVNZTkNfUEZfUEVSX1ZDUFUpOyBpKyspCisJCXZjcHUtPmFyY2guYXBmLmdmbnNbaV0gPSB+MDsKK30KKwogc3RhdGljIHZvaWQga3ZtX29uX3VzZXJfcmV0dXJuKHN0cnVjdCB1c2VyX3JldHVybl9ub3RpZmllciAqdXJuKQogewogCXVuc2lnbmVkIHNsb3Q7CkBAIC0zMjYsMjMgKzMzNCwyOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3JlcXVldWVfZXhjZXB0aW9uKTsKIAotdm9pZCBrdm1faW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQordm9pZCBrdm1fY29tcGxldGVfaW5zbl9ncChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlcnIpCiB7Ci0JdW5zaWduZWQgZXJyb3JfY29kZSA9IHZjcHUtPmFyY2guZmF1bHQuZXJyb3JfY29kZTsKKwlpZiAoZXJyKQorCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOworCWVsc2UKKwkJa3ZtX3g4Nl9vcHMtPnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1fY29tcGxldGVfaW5zbl9ncCk7CiAKK3ZvaWQga3ZtX2luamVjdF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHg4Nl9leGNlcHRpb24gKmZhdWx0KQorewogCSsrdmNwdS0+c3RhdC5wZl9ndWVzdDsKLQl2Y3B1LT5hcmNoLmNyMiA9IHZjcHUtPmFyY2guZmF1bHQuYWRkcmVzczsKLQlrdm1fcXVldWVfZXhjZXB0aW9uX2UodmNwdSwgUEZfVkVDVE9SLCBlcnJvcl9jb2RlKTsKKwl2Y3B1LT5hcmNoLmNyMiA9IGZhdWx0LT5hZGRyZXNzOworCWt2bV9xdWV1ZV9leGNlcHRpb25fZSh2Y3B1LCBQRl9WRUNUT1IsIGZhdWx0LT5lcnJvcl9jb2RlKTsKIH0KIAotdm9pZCBrdm1fcHJvcGFnYXRlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3ZvaWQga3ZtX3Byb3BhZ2F0ZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpmYXVsdCkKIHsKLQlpZiAobW11X2lzX25lc3RlZCh2Y3B1KSAmJiAhdmNwdS0+YXJjaC5mYXVsdC5uZXN0ZWQpCi0JCXZjcHUtPmFyY2gubmVzdGVkX21tdS5pbmplY3RfcGFnZV9mYXVsdCh2Y3B1KTsKKwlpZiAobW11X2lzX25lc3RlZCh2Y3B1KSAmJiAhZmF1bHQtPm5lc3RlZF9wYWdlX2ZhdWx0KQorCQl2Y3B1LT5hcmNoLm5lc3RlZF9tbXUuaW5qZWN0X3BhZ2VfZmF1bHQodmNwdSwgZmF1bHQpOwogCWVsc2UKLQkJdmNwdS0+YXJjaC5tbXUuaW5qZWN0X3BhZ2VfZmF1bHQodmNwdSk7Ci0KLQl2Y3B1LT5hcmNoLmZhdWx0Lm5lc3RlZCA9IGZhbHNlOworCQl2Y3B1LT5hcmNoLm1tdS5pbmplY3RfcGFnZV9mYXVsdCh2Y3B1LCBmYXVsdCk7CiB9CiAKIHZvaWQga3ZtX2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtNDYwLDggKzQ3Myw4IEBACiAJCSAgICAgICh1bnNpZ25lZCBsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCkpCiAJCXJldHVybiB0cnVlOwogCi0JZ2ZuID0gKHZjcHUtPmFyY2guY3IzICYgfjMxdSkgPj4gUEFHRV9TSElGVDsKLQlvZmZzZXQgPSAodmNwdS0+YXJjaC5jcjMgJiB+MzF1KSAmIChQQUdFX1NJWkUgLSAxKTsKKwlnZm4gPSAoa3ZtX3JlYWRfY3IzKHZjcHUpICYgfjMxdSkgPj4gUEFHRV9TSElGVDsKKwlvZmZzZXQgPSAoa3ZtX3JlYWRfY3IzKHZjcHUpICYgfjMxdSkgJiAoUEFHRV9TSVpFIC0gMSk7CiAJciA9IGt2bV9yZWFkX25lc3RlZF9ndWVzdF9wYWdlKHZjcHUsIGdmbiwgcGRwdGUsIG9mZnNldCwgc2l6ZW9mKHBkcHRlKSwKIAkJCQkgICAgICAgUEZFUlJfVVNFUl9NQVNLIHwgUEZFUlJfV1JJVEVfTUFTSyk7CiAJaWYgKHIgPCAwKQpAQCAtNTA2LDEyICs1MTksMTUgQEAKIAkJfSBlbHNlCiAjZW5kaWYKIAkJaWYgKGlzX3BhZSh2Y3B1KSAmJiAhbG9hZF9wZHB0cnModmNwdSwgdmNwdS0+YXJjaC53YWxrX21tdSwKLQkJCQkJCSB2Y3B1LT5hcmNoLmNyMykpCisJCQkJCQkga3ZtX3JlYWRfY3IzKHZjcHUpKSkKIAkJCXJldHVybiAxOwogCX0KIAogCWt2bV94ODZfb3BzLT5zZXRfY3IwKHZjcHUsIGNyMCk7CiAKKwlpZiAoKGNyMCBeIG9sZF9jcjApICYgWDg2X0NSMF9QRykKKwkJa3ZtX2NsZWFyX2FzeW5jX3BmX2NvbXBsZXRpb25fcXVldWUodmNwdSk7CisKIAlpZiAoKGNyMCBeIG9sZF9jcjApICYgdXBkYXRlX2JpdHMpCiAJCWt2bV9tbXVfcmVzZXRfY29udGV4dCh2Y3B1KTsKIAlyZXR1cm4gMDsKQEAgLTU5NSw3ICs2MTEsOCBAQAogCQkJcmV0dXJuIDE7CiAJfSBlbHNlIGlmIChpc19wYWdpbmcodmNwdSkgJiYgKGNyNCAmIFg4Nl9DUjRfUEFFKQogCQkgICAmJiAoKGNyNCBeIG9sZF9jcjQpICYgcGRwdHJfYml0cykKLQkJICAgJiYgIWxvYWRfcGRwdHJzKHZjcHUsIHZjcHUtPmFyY2gud2Fsa19tbXUsIHZjcHUtPmFyY2guY3IzKSkKKwkJICAgJiYgIWxvYWRfcGRwdHJzKHZjcHUsIHZjcHUtPmFyY2gud2Fsa19tbXUsCisJCQkJICAga3ZtX3JlYWRfY3IzKHZjcHUpKSkKIAkJcmV0dXJuIDE7CiAKIAlpZiAoY3I0ICYgWDg2X0NSNF9WTVhFKQpAQCAtNjE1LDcgKzYzMiw3IEBACiAKIGludCBrdm1fc2V0X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzKQogewotCWlmIChjcjMgPT0gdmNwdS0+YXJjaC5jcjMgJiYgIXBkcHRyc19jaGFuZ2VkKHZjcHUpKSB7CisJaWYgKGNyMyA9PSBrdm1fcmVhZF9jcjModmNwdSkgJiYgIXBkcHRyc19jaGFuZ2VkKHZjcHUpKSB7CiAJCWt2bV9tbXVfc3luY19yb290cyh2Y3B1KTsKIAkJa3ZtX21tdV9mbHVzaF90bGIodmNwdSk7CiAJCXJldHVybiAwOwpAQCAtNjUwLDEyICs2NjcsMTMgQEAKIAlpZiAodW5saWtlbHkoIWdmbl90b19tZW1zbG90KHZjcHUtPmt2bSwgY3IzID4+IFBBR0VfU0hJRlQpKSkKIAkJcmV0dXJuIDE7CiAJdmNwdS0+YXJjaC5jcjMgPSBjcjM7CisJX19zZXRfYml0KFZDUFVfRVhSRUdfQ1IzLCAodWxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKTsKIAl2Y3B1LT5hcmNoLm1tdS5uZXdfY3IzKHZjcHUpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3NldF9jcjMpOwogCi1pbnQgX19rdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KQoraW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpCiB7CiAJaWYgKGNyOCAmIENSOF9SRVNFUlZFRF9CSVRTKQogCQlyZXR1cm4gMTsKQEAgLTY2NSwxMiArNjgzLDYgQEAKIAkJdmNwdS0+YXJjaC5jcjggPSBjcjg7CiAJcmV0dXJuIDA7CiB9Ci0KLXZvaWQga3ZtX3NldF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyOCkKLXsKLQlpZiAoX19rdm1fc2V0X2NyOCh2Y3B1LCBjcjgpKQotCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOwotfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3NldF9jcjgpOwogCiB1bnNpZ25lZCBsb25nIGt2bV9nZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTc3NSwxMiArNzg3LDEyIEBACiAgKiBrdm0tc3BlY2lmaWMuIFRob3NlIGFyZSBwdXQgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC4KICAqLwogCi0jZGVmaW5lIEtWTV9TQVZFX01TUlNfQkVHSU4JNworI2RlZmluZSBLVk1fU0FWRV9NU1JTX0JFR0lOCTgKIHN0YXRpYyB1MzIgbXNyc190b19zYXZlW10gPSB7CiAJTVNSX0tWTV9TWVNURU1fVElNRSwgTVNSX0tWTV9XQUxMX0NMT0NLLAogCU1TUl9LVk1fU1lTVEVNX1RJTUVfTkVXLCBNU1JfS1ZNX1dBTExfQ0xPQ0tfTkVXLAogCUhWX1g2NF9NU1JfR1VFU1RfT1NfSUQsIEhWX1g2NF9NU1JfSFlQRVJDQUxMLAotCUhWX1g2NF9NU1JfQVBJQ19BU1NJU1RfUEFHRSwKKwlIVl9YNjRfTVNSX0FQSUNfQVNTSVNUX1BBR0UsIE1TUl9LVk1fQVNZTkNfUEZfRU4sCiAJTVNSX0lBMzJfU1lTRU5URVJfQ1MsIE1TUl9JQTMyX1NZU0VOVEVSX0VTUCwgTVNSX0lBMzJfU1lTRU5URVJfRUlQLAogCU1TUl9TVEFSLAogI2lmZGVmIENPTkZJR19YODZfNjQKQEAgLTgzMCw3ICs4NDIsNiBAQAogCWt2bV94ODZfb3BzLT5zZXRfZWZlcih2Y3B1LCBlZmVyKTsKIAogCXZjcHUtPmFyY2gubW11LmJhc2Vfcm9sZS5ueGUgPSAoZWZlciAmIEVGRVJfTlgpICYmICF0ZHBfZW5hYmxlZDsKLQlrdm1fbW11X3Jlc2V0X2NvbnRleHQodmNwdSk7CiAKIAkvKiBVcGRhdGUgcmVzZXJ2ZWQgYml0cyAqLwogCWlmICgoZWZlciBeIG9sZF9lZmVyKSAmIEVGRVJfTlgpCkBAIC0xNDE4LDYgKzE0MjksMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBrdm1fcHZfZW5hYmxlX2FzeW5jX3BmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpCit7CisJZ3BhX3QgZ3BhID0gZGF0YSAmIH4weDNmOworCisJLyogQml0cyAyOjUgYXJlIHJlc3J2ZWQsIFNob3VsZCBiZSB6ZXJvICovCisJaWYgKGRhdGEgJiAweDNjKQorCQlyZXR1cm4gMTsKKworCXZjcHUtPmFyY2guYXBmLm1zcl92YWwgPSBkYXRhOworCisJaWYgKCEoZGF0YSAmIEtWTV9BU1lOQ19QRl9FTkFCTEVEKSkgeworCQlrdm1fY2xlYXJfYXN5bmNfcGZfY29tcGxldGlvbl9xdWV1ZSh2Y3B1KTsKKwkJa3ZtX2FzeW5jX3BmX2hhc2hfcmVzZXQodmNwdSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChrdm1fZ2ZuX3RvX2h2YV9jYWNoZV9pbml0KHZjcHUtPmt2bSwgJnZjcHUtPmFyY2guYXBmLmRhdGEsIGdwYSkpCisJCXJldHVybiAxOworCisJdmNwdS0+YXJjaC5hcGYuc2VuZF91c2VyX29ubHkgPSAhKGRhdGEgJiBLVk1fQVNZTkNfUEZfU0VORF9BTFdBWVMpOworCWt2bV9hc3luY19wZl93YWtldXBfYWxsKHZjcHUpOworCXJldHVybiAwOworfQorCiBpbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEpCiB7CiAJc3dpdGNoIChtc3IpIHsKQEAgLTE0OTksNiArMTUzNCwxMCBAQAogCQl9CiAJCWJyZWFrOwogCX0KKwljYXNlIE1TUl9LVk1fQVNZTkNfUEZfRU46CisJCWlmIChrdm1fcHZfZW5hYmxlX2FzeW5jX3BmKHZjcHUsIGRhdGEpKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOwogCWNhc2UgTVNSX0lBMzJfTUNHX0NUTDoKIAljYXNlIE1TUl9JQTMyX01DR19TVEFUVVM6CiAJY2FzZSBNU1JfSUEzMl9NQzBfQ1RMIC4uLiBNU1JfSUEzMl9NQzBfQ1RMICsgNCAqIEtWTV9NQVhfTUNFX0JBTktTIC0gMToKQEAgLTE3NzUsNiArMTgxNCw5IEBACiAJY2FzZSBNU1JfS1ZNX1NZU1RFTV9USU1FX05FVzoKIAkJZGF0YSA9IHZjcHUtPmFyY2gudGltZTsKIAkJYnJlYWs7CisJY2FzZSBNU1JfS1ZNX0FTWU5DX1BGX0VOOgorCQlkYXRhID0gdmNwdS0+YXJjaC5hcGYubXNyX3ZhbDsKKwkJYnJlYWs7CiAJY2FzZSBNU1JfSUEzMl9QNV9NQ19BRERSOgogCWNhc2UgTVNSX0lBMzJfUDVfTUNfVFlQRToKIAljYXNlIE1TUl9JQTMyX01DR19DQVA6CkBAIC0xOTA0LDYgKzE5NDYsNyBAQAogCWNhc2UgS1ZNX0NBUF9OT1BfSU9fREVMQVk6CiAJY2FzZSBLVk1fQ0FQX01QX1NUQVRFOgogCWNhc2UgS1ZNX0NBUF9TWU5DX01NVToKKwljYXNlIEtWTV9DQVBfVVNFUl9OTUk6CiAJY2FzZSBLVk1fQ0FQX1JFSU5KRUNUX0NPTlRST0w6CiAJY2FzZSBLVk1fQ0FQX0lSUV9JTkpFQ1RfU1RBVFVTOgogCWNhc2UgS1ZNX0NBUF9BU1NJR05fREVWX0lSUToKQEAgLTE5MjIsNiArMTk2NSw3IEBACiAJY2FzZSBLVk1fQ0FQX0RFQlVHUkVHUzoKIAljYXNlIEtWTV9DQVBfWDg2X1JPQlVTVF9TSU5HTEVTVEVQOgogCWNhc2UgS1ZNX0NBUF9YU0FWRToKKwljYXNlIEtWTV9DQVBfQVNZTkNfUEY6CiAJCXIgPSAxOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU86CkBAIC0yMTg1LDYgKzIyMjksMTEgQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIHZvaWQgY3B1aWRfbWFzayh1MzIgKndvcmQsIGludCB3b3JkbnVtKQoreworCSp3b3JkICY9IGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHlbd29yZG51bV07Cit9CisKIHN0YXRpYyB2b2lkIGRvX2NwdWlkXzFfZW50KHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICplbnRyeSwgdTMyIGZ1bmN0aW9uLAogCQkJICAgdTMyIGluZGV4KQogewpAQCAtMjI1OSw3ICsyMzA4LDkgQEAKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQllbnRyeS0+ZWR4ICY9IGt2bV9zdXBwb3J0ZWRfd29yZDBfeDg2X2ZlYXR1cmVzOworCQljcHVpZF9tYXNrKCZlbnRyeS0+ZWR4LCAwKTsKIAkJZW50cnktPmVjeCAmPSBrdm1fc3VwcG9ydGVkX3dvcmQ0X3g4Nl9mZWF0dXJlczsKKwkJY3B1aWRfbWFzaygmZW50cnktPmVjeCwgNCk7CiAJCS8qIHdlIHN1cHBvcnQgeDJhcGljIGVtdWxhdGlvbiBldmVuIGlmIGhvc3QgZG9lcyBub3Qgc3VwcG9ydAogCQkgKiBpdCBzaW5jZSB3ZSBlbXVsYXRlIHgyYXBpYyBpbiBzb2Z0d2FyZSAqLwogCQllbnRyeS0+ZWN4IHw9IEYoWDJBUElDKTsKQEAgLTIzNTAsNyArMjQwMSw5IEBACiAJCWJyZWFrOwogCWNhc2UgMHg4MDAwMDAwMToKIAkJZW50cnktPmVkeCAmPSBrdm1fc3VwcG9ydGVkX3dvcmQxX3g4Nl9mZWF0dXJlczsKKwkJY3B1aWRfbWFzaygmZW50cnktPmVkeCwgMSk7CiAJCWVudHJ5LT5lY3ggJj0ga3ZtX3N1cHBvcnRlZF93b3JkNl94ODZfZmVhdHVyZXM7CisJCWNwdWlkX21hc2soJmVudHJ5LT5lY3gsIDYpOwogCQlicmVhazsKIAl9CiAKQEAgLTMxNjksMjAgKzMyMjIsMTggQEAKIAkJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMsICpvbGRfc2xvdHM7CiAJCXVuc2lnbmVkIGxvbmcgKmRpcnR5X2JpdG1hcDsKIAotCQlyID0gLUVOT01FTTsKLQkJZGlydHlfYml0bWFwID0gdm1hbGxvYyhuKTsKLQkJaWYgKCFkaXJ0eV9iaXRtYXApCi0JCQlnb3RvIG91dDsKKwkJZGlydHlfYml0bWFwID0gbWVtc2xvdC0+ZGlydHlfYml0bWFwX2hlYWQ7CisJCWlmIChtZW1zbG90LT5kaXJ0eV9iaXRtYXAgPT0gZGlydHlfYml0bWFwKQorCQkJZGlydHlfYml0bWFwICs9IG4gLyBzaXplb2YobG9uZyk7CiAJCW1lbXNldChkaXJ0eV9iaXRtYXAsIDAsIG4pOwogCiAJCXIgPSAtRU5PTUVNOwogCQlzbG90cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fbWVtc2xvdHMpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzbG90cykgewotCQkJdmZyZWUoZGlydHlfYml0bWFwKTsKKwkJaWYgKCFzbG90cykKIAkJCWdvdG8gb3V0OwotCQl9CiAJCW1lbWNweShzbG90cywga3ZtLT5tZW1zbG90cywgc2l6ZW9mKHN0cnVjdCBrdm1fbWVtc2xvdHMpKTsKIAkJc2xvdHMtPm1lbXNsb3RzW2xvZy0+c2xvdF0uZGlydHlfYml0bWFwID0gZGlydHlfYml0bWFwOworCQlzbG90cy0+Z2VuZXJhdGlvbisrOwogCiAJCW9sZF9zbG90cyA9IGt2bS0+bWVtc2xvdHM7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihrdm0tPm1lbXNsb3RzLCBzbG90cyk7CkBAIC0zMTk1LDExICszMjQ2LDggQEAKIAkJc3Bpbl91bmxvY2soJmt2bS0+bW11X2xvY2spOwogCiAJCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV90b191c2VyKGxvZy0+ZGlydHlfYml0bWFwLCBkaXJ0eV9iaXRtYXAsIG4pKSB7Ci0JCQl2ZnJlZShkaXJ0eV9iaXRtYXApOworCQlpZiAoY29weV90b191c2VyKGxvZy0+ZGlydHlfYml0bWFwLCBkaXJ0eV9iaXRtYXAsIG4pKQogCQkJZ290byBvdXQ7Ci0JCX0KLQkJdmZyZWUoZGlydHlfYml0bWFwKTsKIAl9IGVsc2UgewogCQlyID0gLUVGQVVMVDsKIAkJaWYgKGNsZWFyX3VzZXIobG9nLT5kaXJ0eV9iaXRtYXAsIG4pKQpAQCAtMzI2Niw4ICszMzE0LDEwIEBACiAJCWlmICh2cGljKSB7CiAJCQlyID0ga3ZtX2lvYXBpY19pbml0KGt2bSk7CiAJCQlpZiAocikgeworCQkJCW11dGV4X2xvY2soJmt2bS0+c2xvdHNfbG9jayk7CiAJCQkJa3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldihrdm0sIEtWTV9QSU9fQlVTLAogCQkJCQkJCSAgJnZwaWMtPmRldik7CisJCQkJbXV0ZXhfdW5sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCQkJCWtmcmVlKHZwaWMpOwogCQkJCWdvdG8gY3JlYXRlX2lycWNoaXBfdW5sb2NrOwogCQkJfQpAQCAtMzI3OCwxMCArMzMyOCwxMiBAQAogCQlzbXBfd21iKCk7CiAJCXIgPSBrdm1fc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhrdm0pOwogCQlpZiAocikgeworCQkJbXV0ZXhfbG9jaygma3ZtLT5zbG90c19sb2NrKTsKIAkJCW11dGV4X2xvY2soJmt2bS0+aXJxX2xvY2spOwogCQkJa3ZtX2lvYXBpY19kZXN0cm95KGt2bSk7CiAJCQlrdm1fZGVzdHJveV9waWMoa3ZtKTsKIAkJCW11dGV4X3VubG9jaygma3ZtLT5pcnFfbG9jayk7CisJCQltdXRleF91bmxvY2soJmt2bS0+c2xvdHNfbG9jayk7CiAJCX0KIAljcmVhdGVfaXJxY2hpcF91bmxvY2s6CiAJCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKQEAgLTM1NTcsNjMgKzM2MDksNjMgQEAKIHN0YXRpYyBncGFfdCB0cmFuc2xhdGVfbmVzdGVkX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTMyIGFjY2VzcykKIHsKIAlncGFfdCB0X2dwYTsKLQl1MzIgZXJyb3I7CisJc3RydWN0IHg4Nl9leGNlcHRpb24gZXhjZXB0aW9uOwogCiAJQlVHX09OKCFtbXVfaXNfbmVzdGVkKHZjcHUpKTsKIAogCS8qIE5QVCB3YWxrcyBhcmUgYWx3YXlzIHVzZXItd2Fsa3MgKi8KIAlhY2Nlc3MgfD0gUEZFUlJfVVNFUl9NQVNLOwotCXRfZ3BhICA9IHZjcHUtPmFyY2gubW11Lmd2YV90b19ncGEodmNwdSwgZ3BhLCBhY2Nlc3MsICZlcnJvcik7Ci0JaWYgKHRfZ3BhID09IFVOTUFQUEVEX0dWQSkKLQkJdmNwdS0+YXJjaC5mYXVsdC5uZXN0ZWQgPSB0cnVlOworCXRfZ3BhICA9IHZjcHUtPmFyY2gubW11Lmd2YV90b19ncGEodmNwdSwgZ3BhLCBhY2Nlc3MsICZleGNlcHRpb24pOwogCiAJcmV0dXJuIHRfZ3BhOwogfQogCi1ncGFfdCBrdm1fbW11X2d2YV90b19ncGFfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdTMyICplcnJvcikKK2dwYV90IGt2bV9tbXVfZ3ZhX3RvX2dwYV9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLAorCQkJICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbikKIHsKIAl1MzIgYWNjZXNzID0gKGt2bV94ODZfb3BzLT5nZXRfY3BsKHZjcHUpID09IDMpID8gUEZFUlJfVVNFUl9NQVNLIDogMDsKLQlyZXR1cm4gdmNwdS0+YXJjaC53YWxrX21tdS0+Z3ZhX3RvX2dwYSh2Y3B1LCBndmEsIGFjY2VzcywgZXJyb3IpOworCXJldHVybiB2Y3B1LT5hcmNoLndhbGtfbW11LT5ndmFfdG9fZ3BhKHZjcHUsIGd2YSwgYWNjZXNzLCBleGNlcHRpb24pOwogfQogCi0gZ3BhX3Qga3ZtX21tdV9ndmFfdG9fZ3BhX2ZldGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MzIgKmVycm9yKQorIGdwYV90IGt2bV9tbXVfZ3ZhX3RvX2dwYV9mZXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwKKwkJCQlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKQogewogCXUzMiBhY2Nlc3MgPSAoa3ZtX3g4Nl9vcHMtPmdldF9jcGwodmNwdSkgPT0gMykgPyBQRkVSUl9VU0VSX01BU0sgOiAwOwogCWFjY2VzcyB8PSBQRkVSUl9GRVRDSF9NQVNLOwotCXJldHVybiB2Y3B1LT5hcmNoLndhbGtfbW11LT5ndmFfdG9fZ3BhKHZjcHUsIGd2YSwgYWNjZXNzLCBlcnJvcik7CisJcmV0dXJuIHZjcHUtPmFyY2gud2Fsa19tbXUtPmd2YV90b19ncGEodmNwdSwgZ3ZhLCBhY2Nlc3MsIGV4Y2VwdGlvbik7CiB9CiAKLWdwYV90IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdTMyICplcnJvcikKK2dwYV90IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwKKwkJCSAgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKQogewogCXUzMiBhY2Nlc3MgPSAoa3ZtX3g4Nl9vcHMtPmdldF9jcGwodmNwdSkgPT0gMykgPyBQRkVSUl9VU0VSX01BU0sgOiAwOwogCWFjY2VzcyB8PSBQRkVSUl9XUklURV9NQVNLOwotCXJldHVybiB2Y3B1LT5hcmNoLndhbGtfbW11LT5ndmFfdG9fZ3BhKHZjcHUsIGd2YSwgYWNjZXNzLCBlcnJvcik7CisJcmV0dXJuIHZjcHUtPmFyY2gud2Fsa19tbXUtPmd2YV90b19ncGEodmNwdSwgZ3ZhLCBhY2Nlc3MsIGV4Y2VwdGlvbik7CiB9CiAKIC8qIHVzZXMgdGhpcyB0byBhY2Nlc3MgYW55IGd1ZXN0J3MgbWFwcGVkIG1lbW9yeSB3aXRob3V0IGNoZWNraW5nIENQTCAqLwotZ3BhX3Qga3ZtX21tdV9ndmFfdG9fZ3BhX3N5c3RlbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdTMyICplcnJvcikKK2dwYV90IGt2bV9tbXVfZ3ZhX3RvX2dwYV9zeXN0ZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsCisJCQkJc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbikKIHsKLQlyZXR1cm4gdmNwdS0+YXJjaC53YWxrX21tdS0+Z3ZhX3RvX2dwYSh2Y3B1LCBndmEsIDAsIGVycm9yKTsKKwlyZXR1cm4gdmNwdS0+YXJjaC53YWxrX21tdS0+Z3ZhX3RvX2dwYSh2Y3B1LCBndmEsIDAsIGV4Y2VwdGlvbik7CiB9CiAKIHN0YXRpYyBpbnQga3ZtX3JlYWRfZ3Vlc3RfdmlydF9oZWxwZXIoZ3ZhX3QgYWRkciwgdm9pZCAqdmFsLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCiAJCQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgYWNjZXNzLAotCQkJCSAgICAgIHUzMiAqZXJyb3IpCisJCQkJICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbikKIHsKIAl2b2lkICpkYXRhID0gdmFsOwogCWludCByID0gWDg2RU1VTF9DT05USU5VRTsKIAogCXdoaWxlIChieXRlcykgewogCQlncGFfdCBncGEgPSB2Y3B1LT5hcmNoLndhbGtfbW11LT5ndmFfdG9fZ3BhKHZjcHUsIGFkZHIsIGFjY2VzcywKLQkJCQkJCQkgICAgZXJyb3IpOworCQkJCQkJCSAgICBleGNlcHRpb24pOwogCQl1bnNpZ25lZCBvZmZzZXQgPSBhZGRyICYgKFBBR0VfU0laRS0xKTsKIAkJdW5zaWduZWQgdG9yZWFkID0gbWluKGJ5dGVzLCAodW5zaWduZWQpUEFHRV9TSVpFIC0gb2Zmc2V0KTsKIAkJaW50IHJldDsKIAotCQlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSkgewotCQkJciA9IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJaWYgKGdwYSA9PSBVTk1BUFBFRF9HVkEpCisJCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiAJCXJldCA9IGt2bV9yZWFkX2d1ZXN0KHZjcHUtPmt2bSwgZ3BhLCBkYXRhLCB0b3JlYWQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJciA9IFg4NkVNVUxfSU9fTkVFREVEOwpAQCAtMzYzMCwzMSArMzY4MiwzNSBAQAogCiAvKiB1c2VkIGZvciBpbnN0cnVjdGlvbiBmZXRjaGluZyAqLwogc3RhdGljIGludCBrdm1fZmV0Y2hfZ3Vlc3RfdmlydChndmFfdCBhZGRyLCB2b2lkICp2YWwsIHVuc2lnbmVkIGludCBieXRlcywKLQkJCQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqZXJyb3IpCisJCQkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCXN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pCiB7CiAJdTMyIGFjY2VzcyA9IChrdm1feDg2X29wcy0+Z2V0X2NwbCh2Y3B1KSA9PSAzKSA/IFBGRVJSX1VTRVJfTUFTSyA6IDA7CiAJcmV0dXJuIGt2bV9yZWFkX2d1ZXN0X3ZpcnRfaGVscGVyKGFkZHIsIHZhbCwgYnl0ZXMsIHZjcHUsCi0JCQkJCSAgYWNjZXNzIHwgUEZFUlJfRkVUQ0hfTUFTSywgZXJyb3IpOworCQkJCQkgIGFjY2VzcyB8IFBGRVJSX0ZFVENIX01BU0ssCisJCQkJCSAgZXhjZXB0aW9uKTsKIH0KIAogc3RhdGljIGludCBrdm1fcmVhZF9ndWVzdF92aXJ0KGd2YV90IGFkZHIsIHZvaWQgKnZhbCwgdW5zaWduZWQgaW50IGJ5dGVzLAotCQkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICplcnJvcikKKwkJCSAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbikKIHsKIAl1MzIgYWNjZXNzID0gKGt2bV94ODZfb3BzLT5nZXRfY3BsKHZjcHUpID09IDMpID8gUEZFUlJfVVNFUl9NQVNLIDogMDsKIAlyZXR1cm4ga3ZtX3JlYWRfZ3Vlc3RfdmlydF9oZWxwZXIoYWRkciwgdmFsLCBieXRlcywgdmNwdSwgYWNjZXNzLAotCQkJCQkgIGVycm9yKTsKKwkJCQkJICBleGNlcHRpb24pOwogfQogCiBzdGF0aWMgaW50IGt2bV9yZWFkX2d1ZXN0X3ZpcnRfc3lzdGVtKGd2YV90IGFkZHIsIHZvaWQgKnZhbCwgdW5zaWduZWQgaW50IGJ5dGVzLAotCQkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICplcnJvcikKKwkJCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbikKIHsKLQlyZXR1cm4ga3ZtX3JlYWRfZ3Vlc3RfdmlydF9oZWxwZXIoYWRkciwgdmFsLCBieXRlcywgdmNwdSwgMCwgZXJyb3IpOworCXJldHVybiBrdm1fcmVhZF9ndWVzdF92aXJ0X2hlbHBlcihhZGRyLCB2YWwsIGJ5dGVzLCB2Y3B1LCAwLCBleGNlcHRpb24pOwogfQogCiBzdGF0aWMgaW50IGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbShndmFfdCBhZGRyLCB2b2lkICp2YWwsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBieXRlcywKIAkJCQkgICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCSAgICAgICB1MzIgKmVycm9yKQorCQkJCSAgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKQogewogCXZvaWQgKmRhdGEgPSB2YWw7CiAJaW50IHIgPSBYODZFTVVMX0NPTlRJTlVFOwpAQCAtMzY2MiwxNSArMzcxOCwxMyBAQAogCXdoaWxlIChieXRlcykgewogCQlncGFfdCBncGEgPSAgdmNwdS0+YXJjaC53YWxrX21tdS0+Z3ZhX3RvX2dwYSh2Y3B1LCBhZGRyLAogCQkJCQkJCSAgICAgUEZFUlJfV1JJVEVfTUFTSywKLQkJCQkJCQkgICAgIGVycm9yKTsKKwkJCQkJCQkgICAgIGV4Y2VwdGlvbik7CiAJCXVuc2lnbmVkIG9mZnNldCA9IGFkZHIgJiAoUEFHRV9TSVpFLTEpOwogCQl1bnNpZ25lZCB0b3dyaXRlID0gbWluKGJ5dGVzLCAodW5zaWduZWQpUEFHRV9TSVpFIC0gb2Zmc2V0KTsKIAkJaW50IHJldDsKIAotCQlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSkgewotCQkJciA9IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJaWYgKGdwYSA9PSBVTk1BUFBFRF9HVkEpCisJCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiAJCXJldCA9IGt2bV93cml0ZV9ndWVzdCh2Y3B1LT5rdm0sIGdwYSwgZGF0YSwgdG93cml0ZSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlyID0gWDg2RU1VTF9JT19ORUVERUQ7CkBAIC0zNjg4LDcgKzM3NDIsNyBAQAogc3RhdGljIGludCBlbXVsYXRvcl9yZWFkX2VtdWxhdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgIHZvaWQgKnZhbCwKIAkJCQkgIHVuc2lnbmVkIGludCBieXRlcywKLQkJCQkgIHVuc2lnbmVkIGludCAqZXJyb3JfY29kZSwKKwkJCQkgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24sCiAJCQkJICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJZ3BhX3QgICAgICAgICAgICAgICAgIGdwYTsKQEAgLTM3MDEsNyArMzc1NSw3IEBACiAJCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwogCX0KIAotCWdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV9yZWFkKHZjcHUsIGFkZHIsIGVycm9yX2NvZGUpOworCWdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV9yZWFkKHZjcHUsIGFkZHIsIGV4Y2VwdGlvbik7CiAKIAlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSkKIAkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwpAQCAtMzcxMCw4ICszNzY0LDggQEAKIAlpZiAoKGdwYSAmIFBBR0VfTUFTSykgPT0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSkKIAkJZ290byBtbWlvOwogCi0JaWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQoYWRkciwgdmFsLCBieXRlcywgdmNwdSwgTlVMTCkKLQkJCQk9PSBYODZFTVVMX0NPTlRJTlVFKQorCWlmIChrdm1fcmVhZF9ndWVzdF92aXJ0KGFkZHIsIHZhbCwgYnl0ZXMsIHZjcHUsIGV4Y2VwdGlvbikKKwkgICAgPT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiAKIG1taW86CkBAIC0zNzM1LDcgKzM3ODksNyBAQAogfQogCiBpbnQgZW11bGF0b3Jfd3JpdGVfcGh5cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwKLQkJCSAgY29uc3Qgdm9pZCAqdmFsLCBpbnQgYnl0ZXMpCisJCQljb25zdCB2b2lkICp2YWwsIGludCBieXRlcykKIHsKIAlpbnQgcmV0OwogCkBAIC0zNzQ5LDEyICszODAzLDEyIEBACiBzdGF0aWMgaW50IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCQkgICBjb25zdCB2b2lkICp2YWwsCiAJCQkJCSAgIHVuc2lnbmVkIGludCBieXRlcywKLQkJCQkJICAgdW5zaWduZWQgaW50ICplcnJvcl9jb2RlLAorCQkJCQkgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uLAogCQkJCQkgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJZ3BhX3QgICAgICAgICAgICAgICAgIGdwYTsKIAotCWdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCBlcnJvcl9jb2RlKTsKKwlncGEgPSBrdm1fbW11X2d2YV90b19ncGFfd3JpdGUodmNwdSwgYWRkciwgZXhjZXB0aW9uKTsKIAogCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKQogCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CkBAIC0zNzg3LDcgKzM4NDEsNyBAQAogaW50IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICBjb25zdCB2b2lkICp2YWwsCiAJCQkgICAgdW5zaWduZWQgaW50IGJ5dGVzLAotCQkJICAgIHVuc2lnbmVkIGludCAqZXJyb3JfY29kZSwKKwkJCSAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uLAogCQkJICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAkvKiBDcm9zc2luZyBhIHBhZ2UgYm91bmRhcnk/ICovCkBAIC0zNzk1LDcgKzM4NDksNyBAQAogCQlpbnQgcmMsIG5vdzsKIAogCQlub3cgPSAtYWRkciAmIH5QQUdFX01BU0s7Ci0JCXJjID0gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWRfb25lcGFnZShhZGRyLCB2YWwsIG5vdywgZXJyb3JfY29kZSwKKwkJcmMgPSBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZF9vbmVwYWdlKGFkZHIsIHZhbCwgbm93LCBleGNlcHRpb24sCiAJCQkJCQkgICAgIHZjcHUpOwogCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJCXJldHVybiByYzsKQEAgLTM4MDMsNyArMzg1Nyw3IEBACiAJCXZhbCArPSBub3c7CiAJCWJ5dGVzIC09IG5vdzsKIAl9Ci0JcmV0dXJuIGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkX29uZXBhZ2UoYWRkciwgdmFsLCBieXRlcywgZXJyb3JfY29kZSwKKwlyZXR1cm4gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWRfb25lcGFnZShhZGRyLCB2YWwsIGJ5dGVzLCBleGNlcHRpb24sCiAJCQkJCSAgICAgICB2Y3B1KTsKIH0KIApAQCAtMzgyMSw3ICszODc1LDcgQEAKIAkJCQkgICAgIGNvbnN0IHZvaWQgKm9sZCwKIAkJCQkgICAgIGNvbnN0IHZvaWQgKm5ldywKIAkJCQkgICAgIHVuc2lnbmVkIGludCBieXRlcywKLQkJCQkgICAgIHVuc2lnbmVkIGludCAqZXJyb3JfY29kZSwKKwkJCQkgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24sCiAJCQkJICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJZ3BhX3QgZ3BhOwpAQCAtMzg3OSw3ICszOTMzLDcgQEAKIGVtdWxfd3JpdGU6CiAJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HICJrdm06IGVtdWxhdGluZyBleGNoYW5nZSBhcyB3cml0ZVxuIik7CiAKLQlyZXR1cm4gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoYWRkciwgbmV3LCBieXRlcywgZXJyb3JfY29kZSwgdmNwdSk7CisJcmV0dXJuIGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKGFkZHIsIG5ldywgYnl0ZXMsIGV4Y2VwdGlvbiwgdmNwdSk7CiB9CiAKIHN0YXRpYyBpbnQga2VybmVsX3BpbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKnBkKQpAQCAtMzkwNCw3ICszOTU4LDcgQEAKIAlpZiAodmNwdS0+YXJjaC5waW8uY291bnQpCiAJCWdvdG8gZGF0YV9hdmFpbDsKIAotCXRyYWNlX2t2bV9waW8oMCwgcG9ydCwgc2l6ZSwgMSk7CisJdHJhY2Vfa3ZtX3BpbygwLCBwb3J0LCBzaXplLCBjb3VudCk7CiAKIAl2Y3B1LT5hcmNoLnBpby5wb3J0ID0gcG9ydDsKIAl2Y3B1LT5hcmNoLnBpby5pbiA9IDE7CkBAIC0zOTMyLDcgKzM5ODYsNyBAQAogCQkJICAgICAgY29uc3Qgdm9pZCAqdmFsLCB1bnNpZ25lZCBpbnQgY291bnQsCiAJCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdHJhY2Vfa3ZtX3BpbygxLCBwb3J0LCBzaXplLCAxKTsKKwl0cmFjZV9rdm1fcGlvKDEsIHBvcnQsIHNpemUsIGNvdW50KTsKIAogCXZjcHUtPmFyY2gucGlvLnBvcnQgPSBwb3J0OwogCXZjcHUtPmFyY2gucGlvLmluID0gMDsKQEAgLTM5NzMsMTMgKzQwMjcsMTUgQEAKIAkJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiAKIAlpZiAoa3ZtX3g4Nl9vcHMtPmhhc193YmludmRfZXhpdCgpKSB7Ci0JCXByZWVtcHRfZGlzYWJsZSgpOworCQlpbnQgY3B1ID0gZ2V0X2NwdSgpOworCisJCWNwdW1hc2tfc2V0X2NwdShjcHUsIHZjcHUtPmFyY2gud2JpbnZkX2RpcnR5X21hc2spOwogCQlzbXBfY2FsbF9mdW5jdGlvbl9tYW55KHZjcHUtPmFyY2gud2JpbnZkX2RpcnR5X21hc2ssCiAJCQkJd2JpbnZkX2lwaSwgTlVMTCwgMSk7Ci0JCXByZWVtcHRfZW5hYmxlKCk7CisJCXB1dF9jcHUoKTsKIAkJY3B1bWFza19jbGVhcih2Y3B1LT5hcmNoLndiaW52ZF9kaXJ0eV9tYXNrKTsKLQl9Ci0Jd2JpbnZkKCk7CisJfSBlbHNlCisJCXdiaW52ZCgpOwogCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2VtdWxhdGVfd2JpbnZkKTsKQEAgLTQwMTksNyArNDA3NSw3IEBACiAJCXZhbHVlID0gdmNwdS0+YXJjaC5jcjI7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQkJdmFsdWUgPSB2Y3B1LT5hcmNoLmNyMzsKKwkJdmFsdWUgPSBrdm1fcmVhZF9jcjModmNwdSk7CiAJCWJyZWFrOwogCWNhc2UgNDoKIAkJdmFsdWUgPSBrdm1fcmVhZF9jcjQodmNwdSk7CkBAIC00MDUzLDcgKzQxMDksNyBAQAogCQlyZXMgPSBrdm1fc2V0X2NyNCh2Y3B1LCBta19jcl82NChrdm1fcmVhZF9jcjQodmNwdSksIHZhbCkpOwogCQlicmVhazsKIAljYXNlIDg6Ci0JCXJlcyA9IF9fa3ZtX3NldF9jcjgodmNwdSwgdmFsICYgMHhmVUwpOworCQlyZXMgPSBrdm1fc2V0X2NyOCh2Y3B1LCB2YWwpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQl2Y3B1X3ByaW50Zih2Y3B1LCAiJXM6IHVuZXhwZWN0ZWQgY3IgJXVcbiIsIF9fZnVuY19fLCBjcik7CkBAIC00MjA2LDEyICs0MjYyLDEzIEBACiBzdGF0aWMgdm9pZCBpbmplY3RfZW11bGF0ZWRfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCA9ICZ2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dDsKLQlpZiAoY3R4dC0+ZXhjZXB0aW9uID09IFBGX1ZFQ1RPUikKLQkJa3ZtX3Byb3BhZ2F0ZV9mYXVsdCh2Y3B1KTsKLQllbHNlIGlmIChjdHh0LT5lcnJvcl9jb2RlX3ZhbGlkKQotCQlrdm1fcXVldWVfZXhjZXB0aW9uX2UodmNwdSwgY3R4dC0+ZXhjZXB0aW9uLCBjdHh0LT5lcnJvcl9jb2RlKTsKKwlpZiAoY3R4dC0+ZXhjZXB0aW9uLnZlY3RvciA9PSBQRl9WRUNUT1IpCisJCWt2bV9wcm9wYWdhdGVfZmF1bHQodmNwdSwgJmN0eHQtPmV4Y2VwdGlvbik7CisJZWxzZSBpZiAoY3R4dC0+ZXhjZXB0aW9uLmVycm9yX2NvZGVfdmFsaWQpCisJCWt2bV9xdWV1ZV9leGNlcHRpb25fZSh2Y3B1LCBjdHh0LT5leGNlcHRpb24udmVjdG9yLAorCQkJCSAgICAgIGN0eHQtPmV4Y2VwdGlvbi5lcnJvcl9jb2RlKTsKIAllbHNlCi0JCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgY3R4dC0+ZXhjZXB0aW9uKTsKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBjdHh0LT5leGNlcHRpb24udmVjdG9yKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9lbXVsYXRlX2N0eHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtNDI2NywxMyArNDMyNCwxOSBAQAogCiBzdGF0aWMgaW50IGhhbmRsZV9lbXVsYXRpb25fZmFpbHVyZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CisJaW50IHIgPSBFTVVMQVRFX0RPTkU7CisKIAkrK3ZjcHUtPnN0YXQuaW5zbl9lbXVsYXRpb25fZmFpbDsKIAl0cmFjZV9rdm1fZW11bGF0ZV9pbnNuX2ZhaWxlZCh2Y3B1KTsKLQl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU5URVJOQUxfRVJST1I7Ci0JdmNwdS0+cnVuLT5pbnRlcm5hbC5zdWJlcnJvciA9IEtWTV9JTlRFUk5BTF9FUlJPUl9FTVVMQVRJT047Ci0JdmNwdS0+cnVuLT5pbnRlcm5hbC5uZGF0YSA9IDA7CisJaWYgKCFpc19ndWVzdF9tb2RlKHZjcHUpKSB7CisJCXZjcHUtPnJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUjsKKwkJdmNwdS0+cnVuLT5pbnRlcm5hbC5zdWJlcnJvciA9IEtWTV9JTlRFUk5BTF9FUlJPUl9FTVVMQVRJT047CisJCXZjcHUtPnJ1bi0+aW50ZXJuYWwubmRhdGEgPSAwOworCQlyID0gRU1VTEFURV9GQUlMOworCX0KIAlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7Ci0JcmV0dXJuIEVNVUxBVEVfRkFJTDsKKworCXJldHVybiByOwogfQogCiBzdGF0aWMgYm9vbCByZWV4ZWN1dGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpCkBAIC00MzAyLDEwICs0MzY1LDExIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1pbnQgZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQl1bnNpZ25lZCBsb25nIGNyMiwKLQkJCXUxNiBlcnJvcl9jb2RlLAotCQkJaW50IGVtdWxhdGlvbl90eXBlKQoraW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGNyMiwKKwkJCSAgICBpbnQgZW11bGF0aW9uX3R5cGUsCisJCQkgICAgdm9pZCAqaW5zbiwKKwkJCSAgICBpbnQgaW5zbl9sZW4pCiB7CiAJaW50IHI7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZ2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5kZWNvZGU7CkBAIC00MzIzLDEwICs0Mzg3LDEwIEBACiAJaWYgKCEoZW11bGF0aW9uX3R5cGUgJiBFTVVMVFlQRV9OT19ERUNPREUpKSB7CiAJCWluaXRfZW11bGF0ZV9jdHh0KHZjcHUpOwogCQl2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5pbnRlcnJ1cHRpYmlsaXR5ID0gMDsKLQkJdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZXhjZXB0aW9uID0gLTE7CisJCXZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmhhdmVfZXhjZXB0aW9uID0gZmFsc2U7CiAJCXZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LnBlcm1fb2sgPSBmYWxzZTsKIAotCQlyID0geDg2X2RlY29kZV9pbnNuKCZ2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dCk7CisJCXIgPSB4ODZfZGVjb2RlX2luc24oJnZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LCBpbnNuLCBpbnNuX2xlbik7CiAJCWlmIChyID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUKQogCQkJZ290byBkb25lOwogCkBAIC00Mzg5LDcgKzQ0NTMsNyBAQAogCX0KIAogZG9uZToKLQlpZiAodmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZXhjZXB0aW9uID49IDApIHsKKwlpZiAodmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuaGF2ZV9leGNlcHRpb24pIHsKIAkJaW5qZWN0X2VtdWxhdGVkX2V4Y2VwdGlvbih2Y3B1KTsKIAkJciA9IEVNVUxBVEVfRE9ORTsKIAl9IGVsc2UgaWYgKHZjcHUtPmFyY2gucGlvLmNvdW50KSB7CkBAIC00NDEzLDcgKzQ0NzcsNyBAQAogCiAJcmV0dXJuIHI7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChlbXVsYXRlX2luc3RydWN0aW9uKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKTsKIAogaW50IGt2bV9mYXN0X3Bpb19vdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2l6ZSwgdW5zaWduZWQgc2hvcnQgcG9ydCkKIHsKQEAgLTQ2NTMsNyArNDcxNyw2IEBACiAKIAlrdm1feDg2X29wcyA9IG9wczsKIAlrdm1fbW11X3NldF9ub25wcmVzZW50X3B0ZXMoMHVsbCwgMHVsbCk7Ci0Ja3ZtX21tdV9zZXRfYmFzZV9wdGVzKFBUX1BSRVNFTlRfTUFTSyk7CiAJa3ZtX21tdV9zZXRfbWFza19wdGVzKFBUX1VTRVJfTUFTSywgUFRfQUNDRVNTRURfTUFTSywKIAkJCVBUX0RJUlRZX01BU0ssIFBUNjRfTlhfTUFTSywgMCk7CiAKQEAgLTUxMTYsNiArNTE3OSwxMiBAQAogCQkJdmNwdS0+ZnB1X2FjdGl2ZSA9IDA7CiAJCQlrdm1feDg2X29wcy0+ZnB1X2RlYWN0aXZhdGUodmNwdSk7CiAJCX0KKwkJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfQVBGX0hBTFQsIHZjcHUpKSB7CisJCQkvKiBQYWdlIGlzIHN3YXBwZWQgb3V0LiBEbyBzeW50aGV0aWMgaGFsdCAqLworCQkJdmNwdS0+YXJjaC5hcGYuaGFsdGVkID0gdHJ1ZTsKKwkJCXIgPSAxOworCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKIAlyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7CkBAIC01MjQ0LDcgKzUzMTMsOCBAQAogCiAJciA9IDE7CiAJd2hpbGUgKHIgPiAwKSB7Ci0JCWlmICh2Y3B1LT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9SVU5OQUJMRSkKKwkJaWYgKHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFICYmCisJCSAgICAhdmNwdS0+YXJjaC5hcGYuaGFsdGVkKQogCQkJciA9IHZjcHVfZW50ZXJfZ3Vlc3QodmNwdSk7CiAJCWVsc2UgewogCQkJc3JjdV9yZWFkX3VubG9jaygma3ZtLT5zcmN1LCB2Y3B1LT5zcmN1X2lkeCk7CkBAIC01MjU3LDYgKzUzMjcsNyBAQAogCQkJCQl2Y3B1LT5hcmNoLm1wX3N0YXRlID0KIAkJCQkJCUtWTV9NUF9TVEFURV9SVU5OQUJMRTsKIAkJCQljYXNlIEtWTV9NUF9TVEFURV9SVU5OQUJMRToKKwkJCQkJdmNwdS0+YXJjaC5hcGYuaGFsdGVkID0gZmFsc2U7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgS1ZNX01QX1NUQVRFX1NJUElfUkVDRUlWRUQ6CiAJCQkJZGVmYXVsdDoKQEAgLTUyNzgsNiArNTM0OSw5IEBACiAJCQl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU5UUjsKIAkJCSsrdmNwdS0+c3RhdC5yZXF1ZXN0X2lycV9leGl0czsKIAkJfQorCisJCWt2bV9jaGVja19hc3luY19wZl9jb21wbGV0aW9uKHZjcHUpOworCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJciA9IC1FSU5UUjsKIAkJCXZjcHUtPnJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSOwpAQCAtNTMwMiw2ICs1Mzc2LDkgQEAKIAlpbnQgcjsKIAlzaWdzZXRfdCBzaWdzYXZlZDsKIAorCWlmICghdHNrX3VzZWRfbWF0aChjdXJyZW50KSAmJiBpbml0X2ZwdShjdXJyZW50KSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlpZiAodmNwdS0+c2lnc2V0X2FjdGl2ZSkKIAkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZ2Y3B1LT5zaWdzZXQsICZzaWdzYXZlZCk7CiAKQEAgLTUzMTMsOCArNTM5MCwxMiBAQAogCX0KIAogCS8qIHJlLXN5bmMgYXBpYydzIHRwciAqLwotCWlmICghaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0+a3ZtKSkKLQkJa3ZtX3NldF9jcjgodmNwdSwga3ZtX3J1bi0+Y3I4KTsKKwlpZiAoIWlycWNoaXBfaW5fa2VybmVsKHZjcHUtPmt2bSkpIHsKKwkJaWYgKGt2bV9zZXRfY3I4KHZjcHUsIGt2bV9ydW4tPmNyOCkgIT0gMCkgeworCQkJciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KIAogCWlmICh2Y3B1LT5hcmNoLnBpby5jb3VudCB8fCB2Y3B1LT5tbWlvX25lZWRlZCkgewogCQlpZiAodmNwdS0+bW1pb19uZWVkZWQpIHsKQEAgLTUzMjMsNyArNTQwNCw3IEBACiAJCQl2Y3B1LT5tbWlvX25lZWRlZCA9IDA7CiAJCX0KIAkJdmNwdS0+c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jaygmdmNwdS0+a3ZtLT5zcmN1KTsKLQkJciA9IGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCwgMCwgRU1VTFRZUEVfTk9fREVDT0RFKTsKKwkJciA9IGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgRU1VTFRZUEVfTk9fREVDT0RFKTsKIAkJc3JjdV9yZWFkX3VubG9jaygmdmNwdS0+a3ZtLT5zcmN1LCB2Y3B1LT5zcmN1X2lkeCk7CiAJCWlmIChyICE9IEVNVUxBVEVfRE9ORSkgewogCQkJciA9IDA7CkBAIC01NDM2LDcgKzU1MTcsNyBAQAogCiAJc3JlZ3MtPmNyMCA9IGt2bV9yZWFkX2NyMCh2Y3B1KTsKIAlzcmVncy0+Y3IyID0gdmNwdS0+YXJjaC5jcjI7Ci0Jc3JlZ3MtPmNyMyA9IHZjcHUtPmFyY2guY3IzOworCXNyZWdzLT5jcjMgPSBrdm1fcmVhZF9jcjModmNwdSk7CiAJc3JlZ3MtPmNyNCA9IGt2bV9yZWFkX2NyNCh2Y3B1KTsKIAlzcmVncy0+Y3I4ID0ga3ZtX2dldF9jcjgodmNwdSk7CiAJc3JlZ3MtPmVmZXIgPSB2Y3B1LT5hcmNoLmVmZXI7CkBAIC01NTA0LDggKzU1ODUsOSBAQAogCWt2bV94ODZfb3BzLT5zZXRfZ2R0KHZjcHUsICZkdCk7CiAKIAl2Y3B1LT5hcmNoLmNyMiA9IHNyZWdzLT5jcjI7Ci0JbW11X3Jlc2V0X25lZWRlZCB8PSB2Y3B1LT5hcmNoLmNyMyAhPSBzcmVncy0+Y3IzOworCW1tdV9yZXNldF9uZWVkZWQgfD0ga3ZtX3JlYWRfY3IzKHZjcHUpICE9IHNyZWdzLT5jcjM7CiAJdmNwdS0+YXJjaC5jcjMgPSBzcmVncy0+Y3IzOworCV9fc2V0X2JpdChWQ1BVX0VYUkVHX0NSMywgKHVsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCk7CiAKIAlrdm1fc2V0X2NyOCh2Y3B1LCBzcmVncy0+Y3I4KTsKIApAQCAtNTUyMiw3ICs1NjA0LDcgQEAKIAlpZiAoc3JlZ3MtPmNyNCAmIFg4Nl9DUjRfT1NYU0FWRSkKIAkJdXBkYXRlX2NwdWlkKHZjcHUpOwogCWlmICghaXNfbG9uZ19tb2RlKHZjcHUpICYmIGlzX3BhZSh2Y3B1KSkgewotCQlsb2FkX3BkcHRycyh2Y3B1LCB2Y3B1LT5hcmNoLndhbGtfbW11LCB2Y3B1LT5hcmNoLmNyMyk7CisJCWxvYWRfcGRwdHJzKHZjcHUsIHZjcHUtPmFyY2gud2Fsa19tbXUsIGt2bV9yZWFkX2NyMyh2Y3B1KSk7CiAJCW1tdV9yZXNldF9uZWVkZWQgPSAxOwogCX0KIApAQCAtNTc3Myw2ICs1ODU1LDggQEAKIAogdm9pZCBrdm1fYXJjaF92Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogeworCXZjcHUtPmFyY2guYXBmLm1zcl92YWwgPSAwOworCiAJdmNwdV9sb2FkKHZjcHUpOwogCWt2bV9tbXVfdW5sb2FkKHZjcHUpOwogCXZjcHVfcHV0KHZjcHUpOwpAQCAtNTc5Miw2ICs1ODc2LDExIEBACiAJdmNwdS0+YXJjaC5kcjcgPSBEUjdfRklYRURfMTsKIAogCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9FVkVOVCwgdmNwdSk7CisJdmNwdS0+YXJjaC5hcGYubXNyX3ZhbCA9IDA7CisKKwlrdm1fY2xlYXJfYXN5bmNfcGZfY29tcGxldGlvbl9xdWV1ZSh2Y3B1KTsKKwlrdm1fYXN5bmNfcGZfaGFzaF9yZXNldCh2Y3B1KTsKKwl2Y3B1LT5hcmNoLmFwZi5oYWx0ZWQgPSBmYWxzZTsKIAogCXJldHVybiBrdm1feDg2X29wcy0+dmNwdV9yZXNldCh2Y3B1KTsKIH0KQEAgLTU4ODEsNiArNTk3MCw4IEBACiAJaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJnZjcHUtPmFyY2gud2JpbnZkX2RpcnR5X21hc2ssIEdGUF9LRVJORUwpKQogCQlnb3RvIGZhaWxfZnJlZV9tY2VfYmFua3M7CiAKKwlrdm1fYXN5bmNfcGZfaGFzaF9yZXNldCh2Y3B1KTsKKwogCXJldHVybiAwOwogZmFpbF9mcmVlX21jZV9iYW5rczoKIAlrZnJlZSh2Y3B1LT5hcmNoLm1jZV9iYW5rcyk7CkBAIC01OTA2LDEzICs1OTk3LDggQEAKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdmNwdS0+YXJjaC5waW9fZGF0YSk7CiB9CiAKLXN0cnVjdCAga3ZtICprdm1fYXJjaF9jcmVhdGVfdm0odm9pZCkKK2ludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKLQlzdHJ1Y3Qga3ZtICprdm0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWt2bSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KIAlJTklUX0xJU1RfSEVBRCgma3ZtLT5hcmNoLmFjdGl2ZV9tbXVfcGFnZXMpOwogCUlOSVRfTElTVF9IRUFEKCZrdm0tPmFyY2guYXNzaWduZWRfZGV2X2hlYWQpOwogCkBAIC01OTIxLDcgKzYwMDcsNyBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJmt2bS0+YXJjaC50c2Nfd3JpdGVfbG9jayk7CiAKLQlyZXR1cm4ga3ZtOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBrdm1fdW5sb2FkX3ZjcHVfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTU5MzksOCArNjAyNSwxMCBAQAogCS8qCiAJICogVW5waW4gYW55IG1tdSBwYWdlcyBmaXJzdC4KIAkgKi8KLQlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pCisJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7CisJCWt2bV9jbGVhcl9hc3luY19wZl9jb21wbGV0aW9uX3F1ZXVlKHZjcHUpOwogCQlrdm1fdW5sb2FkX3ZjcHVfbW11KHZjcHUpOworCX0KIAlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pCiAJCWt2bV9hcmNoX3ZjcHVfZnJlZSh2Y3B1KTsKIApAQCAtNTk2NCwxMyArNjA1MiwxMCBAQAogCWtmcmVlKGt2bS0+YXJjaC52cGljKTsKIAlrZnJlZShrdm0tPmFyY2gudmlvYXBpYyk7CiAJa3ZtX2ZyZWVfdmNwdXMoa3ZtKTsKLQlrdm1fZnJlZV9waHlzbWVtKGt2bSk7CiAJaWYgKGt2bS0+YXJjaC5hcGljX2FjY2Vzc19wYWdlKQogCQlwdXRfcGFnZShrdm0tPmFyY2guYXBpY19hY2Nlc3NfcGFnZSk7CiAJaWYgKGt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfcGFnZXRhYmxlKQogCQlwdXRfcGFnZShrdm0tPmFyY2guZXB0X2lkZW50aXR5X3BhZ2V0YWJsZSk7Ci0JY2xlYW51cF9zcmN1X3N0cnVjdCgma3ZtLT5zcmN1KTsKLQlrZnJlZShrdm0pOwogfQogCiBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTYwNTEsNyArNjEzNiw5IEBACiAKIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gdmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfUlVOTkFCTEUKKwlyZXR1cm4gKHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFICYmCisJCSF2Y3B1LT5hcmNoLmFwZi5oYWx0ZWQpCisJCXx8ICFsaXN0X2VtcHR5X2NhcmVmdWwoJnZjcHUtPmFzeW5jX3BmLmRvbmUpCiAJCXx8IHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1NJUElfUkVDRUlWRUQKIAkJfHwgdmNwdS0+YXJjaC5ubWlfcGVuZGluZyB8fAogCQkoa3ZtX2FyY2hfaW50ZXJydXB0X2FsbG93ZWQodmNwdSkgJiYKQEAgLTYxMTAsNiArNjE5NywxNDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9zZXRfcmZsYWdzKTsKIAordm9pZCBrdm1fYXJjaF9hc3luY19wYWdlX3JlYWR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9hc3luY19wZiAqd29yaykKK3sKKwlpbnQgcjsKKworCWlmICgodmNwdS0+YXJjaC5tbXUuZGlyZWN0X21hcCAhPSB3b3JrLT5hcmNoLmRpcmVjdF9tYXApIHx8CisJICAgICAgaXNfZXJyb3JfcGFnZSh3b3JrLT5wYWdlKSkKKwkJcmV0dXJuOworCisJciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpOworCWlmICh1bmxpa2VseShyKSkKKwkJcmV0dXJuOworCisJaWYgKCF2Y3B1LT5hcmNoLm1tdS5kaXJlY3RfbWFwICYmCisJICAgICAgd29yay0+YXJjaC5jcjMgIT0gdmNwdS0+YXJjaC5tbXUuZ2V0X2NyMyh2Y3B1KSkKKwkJcmV0dXJuOworCisJdmNwdS0+YXJjaC5tbXUucGFnZV9mYXVsdCh2Y3B1LCB3b3JrLT5ndmEsIDAsIHRydWUpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBrdm1fYXN5bmNfcGZfaGFzaF9mbihnZm5fdCBnZm4pCit7CisJcmV0dXJuIGhhc2hfMzIoZ2ZuICYgMHhmZmZmZmZmZiwgb3JkZXJfYmFzZV8yKEFTWU5DX1BGX1BFUl9WQ1BVKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGt2bV9hc3luY19wZl9uZXh0X3Byb2JlKHUzMiBrZXkpCit7CisJcmV0dXJuIChrZXkgKyAxKSAmIChyb3VuZHVwX3Bvd19vZl90d28oQVNZTkNfUEZfUEVSX1ZDUFUpIC0gMSk7Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9hZGRfYXN5bmNfcGZfZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuKQoreworCXUzMiBrZXkgPSBrdm1fYXN5bmNfcGZfaGFzaF9mbihnZm4pOworCisJd2hpbGUgKHZjcHUtPmFyY2guYXBmLmdmbnNba2V5XSAhPSB+MCkKKwkJa2V5ID0ga3ZtX2FzeW5jX3BmX25leHRfcHJvYmUoa2V5KTsKKworCXZjcHUtPmFyY2guYXBmLmdmbnNba2V5XSA9IGdmbjsKK30KKworc3RhdGljIHUzMiBrdm1fYXN5bmNfcGZfZ2ZuX3Nsb3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pCit7CisJaW50IGk7CisJdTMyIGtleSA9IGt2bV9hc3luY19wZl9oYXNoX2ZuKGdmbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgcm91bmR1cF9wb3dfb2ZfdHdvKEFTWU5DX1BGX1BFUl9WQ1BVKSAmJgorCQkgICAgICh2Y3B1LT5hcmNoLmFwZi5nZm5zW2tleV0gIT0gZ2ZuICYmCisJCSAgICAgIHZjcHUtPmFyY2guYXBmLmdmbnNba2V5XSAhPSB+MCk7IGkrKykKKwkJa2V5ID0ga3ZtX2FzeW5jX3BmX25leHRfcHJvYmUoa2V5KTsKKworCXJldHVybiBrZXk7Cit9CisKK2Jvb2wga3ZtX2ZpbmRfYXN5bmNfcGZfZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuKQoreworCXJldHVybiB2Y3B1LT5hcmNoLmFwZi5nZm5zW2t2bV9hc3luY19wZl9nZm5fc2xvdCh2Y3B1LCBnZm4pXSA9PSBnZm47Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9kZWxfYXN5bmNfcGZfZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuKQoreworCXUzMiBpLCBqLCBrOworCisJaSA9IGogPSBrdm1fYXN5bmNfcGZfZ2ZuX3Nsb3QodmNwdSwgZ2ZuKTsKKwl3aGlsZSAodHJ1ZSkgeworCQl2Y3B1LT5hcmNoLmFwZi5nZm5zW2ldID0gfjA7CisJCWRvIHsKKwkJCWogPSBrdm1fYXN5bmNfcGZfbmV4dF9wcm9iZShqKTsKKwkJCWlmICh2Y3B1LT5hcmNoLmFwZi5nZm5zW2pdID09IH4wKQorCQkJCXJldHVybjsKKwkJCWsgPSBrdm1fYXN5bmNfcGZfaGFzaF9mbih2Y3B1LT5hcmNoLmFwZi5nZm5zW2pdKTsKKwkJCS8qCisJCQkgKiBrIGxpZXMgY3ljbGljYWxseSBpbiBdaSxqXQorCQkJICogfCAgICBpLmsuaiB8CisJCQkgKiB8Li4uLmogaS5rLnwgb3IgIHwuay4uaiBpLi4ufAorCQkJICovCisJCX0gd2hpbGUgKChpIDw9IGopID8gKGkgPCBrICYmIGsgPD0gaikgOiAoaSA8IGsgfHwgayA8PSBqKSk7CisJCXZjcHUtPmFyY2guYXBmLmdmbnNbaV0gPSB2Y3B1LT5hcmNoLmFwZi5nZm5zW2pdOworCQlpID0gajsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXBmX3B1dF91c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZhbCkKK3sKKworCXJldHVybiBrdm1fd3JpdGVfZ3Vlc3RfY2FjaGVkKHZjcHUtPmt2bSwgJnZjcHUtPmFyY2guYXBmLmRhdGEsICZ2YWwsCisJCQkJICAgICAgc2l6ZW9mKHZhbCkpOworfQorCit2b2lkIGt2bV9hcmNoX2FzeW5jX3BhZ2Vfbm90X3ByZXNlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgICAgc3RydWN0IGt2bV9hc3luY19wZiAqd29yaykKK3sKKwlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBmYXVsdDsKKworCXRyYWNlX2t2bV9hc3luY19wZl9ub3RfcHJlc2VudCh3b3JrLT5hcmNoLnRva2VuLCB3b3JrLT5ndmEpOworCWt2bV9hZGRfYXN5bmNfcGZfZ2ZuKHZjcHUsIHdvcmstPmFyY2guZ2ZuKTsKKworCWlmICghKHZjcHUtPmFyY2guYXBmLm1zcl92YWwgJiBLVk1fQVNZTkNfUEZfRU5BQkxFRCkgfHwKKwkgICAgKHZjcHUtPmFyY2guYXBmLnNlbmRfdXNlcl9vbmx5ICYmCisJICAgICBrdm1feDg2X29wcy0+Z2V0X2NwbCh2Y3B1KSA9PSAwKSkKKwkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX0FQRl9IQUxULCB2Y3B1KTsKKwllbHNlIGlmICghYXBmX3B1dF91c2VyKHZjcHUsIEtWTV9QVl9SRUFTT05fUEFHRV9OT1RfUFJFU0VOVCkpIHsKKwkJZmF1bHQudmVjdG9yID0gUEZfVkVDVE9SOworCQlmYXVsdC5lcnJvcl9jb2RlX3ZhbGlkID0gdHJ1ZTsKKwkJZmF1bHQuZXJyb3JfY29kZSA9IDA7CisJCWZhdWx0Lm5lc3RlZF9wYWdlX2ZhdWx0ID0gZmFsc2U7CisJCWZhdWx0LmFkZHJlc3MgPSB3b3JrLT5hcmNoLnRva2VuOworCQlrdm1faW5qZWN0X3BhZ2VfZmF1bHQodmNwdSwgJmZhdWx0KTsKKwl9Cit9CisKK3ZvaWQga3ZtX2FyY2hfYXN5bmNfcGFnZV9wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkgc3RydWN0IGt2bV9hc3luY19wZiAqd29yaykKK3sKKwlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBmYXVsdDsKKworCXRyYWNlX2t2bV9hc3luY19wZl9yZWFkeSh3b3JrLT5hcmNoLnRva2VuLCB3b3JrLT5ndmEpOworCWlmIChpc19lcnJvcl9wYWdlKHdvcmstPnBhZ2UpKQorCQl3b3JrLT5hcmNoLnRva2VuID0gfjA7IC8qIGJyb2FkY2FzdCB3YWtldXAgKi8KKwllbHNlCisJCWt2bV9kZWxfYXN5bmNfcGZfZ2ZuKHZjcHUsIHdvcmstPmFyY2guZ2ZuKTsKKworCWlmICgodmNwdS0+YXJjaC5hcGYubXNyX3ZhbCAmIEtWTV9BU1lOQ19QRl9FTkFCTEVEKSAmJgorCSAgICAhYXBmX3B1dF91c2VyKHZjcHUsIEtWTV9QVl9SRUFTT05fUEFHRV9SRUFEWSkpIHsKKwkJZmF1bHQudmVjdG9yID0gUEZfVkVDVE9SOworCQlmYXVsdC5lcnJvcl9jb2RlX3ZhbGlkID0gdHJ1ZTsKKwkJZmF1bHQuZXJyb3JfY29kZSA9IDA7CisJCWZhdWx0Lm5lc3RlZF9wYWdlX2ZhdWx0ID0gZmFsc2U7CisJCWZhdWx0LmFkZHJlc3MgPSB3b3JrLT5hcmNoLnRva2VuOworCQlrdm1faW5qZWN0X3BhZ2VfZmF1bHQodmNwdSwgJmZhdWx0KTsKKwl9CisJdmNwdS0+YXJjaC5hcGYuaGFsdGVkID0gZmFsc2U7Cit9CisKK2Jvb2wga3ZtX2FyY2hfY2FuX2luamVjdF9hc3luY19wYWdlX3ByZXNlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWlmICghKHZjcHUtPmFyY2guYXBmLm1zcl92YWwgJiBLVk1fQVNZTkNfUEZfRU5BQkxFRCkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuICFrdm1fZXZlbnRfbmVlZHNfcmVpbmplY3Rpb24odmNwdSkgJiYKKwkJCWt2bV94ODZfb3BzLT5pbnRlcnJ1cHRfYWxsb3dlZCh2Y3B1KTsKK30KKwogRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChrdm1fZXhpdCk7CiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGt2bV9pbmpfdmlycSk7CiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGt2bV9wYWdlX2ZhdWx0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5XzY0LmMgYi9hcmNoL3g4Ni9tbS9hbWR0b3BvbG9neV82NC5jCmluZGV4IDA4YTAwNjkuLmYyMTk2MmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3lfNjQuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9hbWRfbmIuaD4KIAogc3RhdGljIHN0cnVjdCBib290bm9kZSBfX2luaXRkYXRhIG5vZGVzWzhdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgX19pbml0ZGF0YSBub2RlaWRzWzhdOwogc3RhdGljIG5vZGVtYXNrX3QgX19pbml0ZGF0YSBub2Rlc19wYXJzZWQgPSBOT0RFX01BU0tfTk9ORTsKIAogc3RhdGljIF9faW5pdCBpbnQgZmluZF9ub3J0aGJyaWRnZSh2b2lkKQpAQCAtNjgsMTkgKzY5LDYgQEAKICNlbmRpZgogfQogCi1pbnQgX19pbml0IGFtZF9nZXRfbm9kZXMoc3RydWN0IGJvb3Rub2RlICpwaHlzbm9kZXMpCi17Ci0JaW50IGk7Ci0JaW50IHJldCA9IDA7Ci0KLQlmb3JfZWFjaF9ub2RlX21hc2soaSwgbm9kZXNfcGFyc2VkKSB7Ci0JCXBoeXNub2Rlc1tyZXRdLnN0YXJ0ID0gbm9kZXNbaV0uc3RhcnQ7Ci0JCXBoeXNub2Rlc1tyZXRdLmVuZCA9IG5vZGVzW2ldLmVuZDsKLQkJcmV0Kys7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KIGludCBfX2luaXQgYW1kX251bWFfaW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBQRk5fUEhZUyhzdGFydF9wZm4pOwpAQCAtMTEzLDcgKzEwMSw3IEBACiAJCWJhc2UgPSByZWFkX3BjaV9jb25maWcoMCwgbmIsIDEsIDB4NDAgKyBpKjgpOwogCQlsaW1pdCA9IHJlYWRfcGNpX2NvbmZpZygwLCBuYiwgMSwgMHg0NCArIGkqOCk7CiAKLQkJbm9kZWlkID0gbGltaXQgJiA3OworCQlub2RlaWRzW2ldID0gbm9kZWlkID0gbGltaXQgJiA3OwogCQlpZiAoKGJhc2UgJiAzKSA9PSAwKSB7CiAJCQlpZiAoaSA8IG51bW5vZGVzKQogCQkJCXByX2luZm8oIlNraXBwaW5nIGRpc2FibGVkIG5vZGUgJWRcbiIsIGkpOwpAQCAtMTkzLDYgKzE4MSw3NiBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX05VTUFfRU1VCitzdGF0aWMgczE2IGZha2VfYXBpY2lkX3RvX25vZGVbTUFYX0xPQ0FMX0FQSUNdIF9faW5pdGRhdGEgPSB7CisJWzAgLi4uIE1BWF9MT0NBTF9BUElDLTFdID0gTlVNQV9OT19OT0RFCit9OworCit2b2lkIF9faW5pdCBhbWRfZ2V0X25vZGVzKHN0cnVjdCBib290bm9kZSAqcGh5c25vZGVzKQoreworCWludCBpOworCisJZm9yX2VhY2hfbm9kZV9tYXNrKGksIG5vZGVzX3BhcnNlZCkgeworCQlwaHlzbm9kZXNbaV0uc3RhcnQgPSBub2Rlc1tpXS5zdGFydDsKKwkJcGh5c25vZGVzW2ldLmVuZCA9IG5vZGVzW2ldLmVuZDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGZpbmRfbm9kZV9ieV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpbnQgcmV0ID0gTlVNQV9OT19OT0RFOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJaWYgKGFkZHIgPj0gbm9kZXNbaV0uc3RhcnQgJiYgYWRkciA8IG5vZGVzW2ldLmVuZCkgeworCQkJcmV0ID0gaTsKKwkJCWJyZWFrOworCQl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEZvciBOVU1BIGVtdWxhdGlvbiwgZmFrZSBwcm94aW1pdHkgZG9tYWluIChfUFhNKSB0byBub2RlIGlkIG1hcHBpbmdzIG11c3QgYmUKKyAqIHNldHVwIHRvIHJlcHJlc2VudCB0aGUgcGh5c2ljYWwgdG9wb2xvZ3kgYnV0IHJlZmxlY3QgdGhlIGVtdWxhdGVkCisgKiBlbnZpcm9ubWVudC4gIEZvciBlYWNoIGVtdWxhdGVkIG5vZGUsIHRoZSByZWFsIG5vZGUgd2hpY2ggaXQgYXBwZWFycyBvbiBpcworICogZm91bmQgYW5kIGEgZmFrZSBweG0gdG8gbmlkIG1hcHBpbmcgaXMgY3JlYXRlZCB3aGljaCBtaXJyb3JzIHRoZSBhY3R1YWwKKyAqIGxvY2FsaXR5LiAgbm9kZV9kaXN0YW5jZSgpIHRoZW4gcmVwcmVzZW50cyB0aGUgY29ycmVjdCBkaXN0YW5jZXMgYmV0d2VlbgorICogZW11bGF0ZWQgbm9kZXMgYnkgdXNpbmcgdGhlIGZha2UgYWNwaSBtYXBwaW5ncyB0byBweG1zLgorICovCit2b2lkIF9faW5pdCBhbWRfZmFrZV9ub2Rlcyhjb25zdCBzdHJ1Y3QgYm9vdG5vZGUgKm5vZGVzLCBpbnQgbnJfbm9kZXMpCit7CisJdW5zaWduZWQgaW50IGJpdHM7CisJdW5zaWduZWQgaW50IGNvcmVzOworCXVuc2lnbmVkIGludCBhcGljaWRfYmFzZSA9IDA7CisJaW50IGk7CisKKwliaXRzID0gYm9vdF9jcHVfZGF0YS54ODZfY29yZWlkX2JpdHM7CisJY29yZXMgPSAxIDw8IGJpdHM7CisJZWFybHlfZ2V0X2Jvb3RfY3B1X2lkKCk7CisJaWYgKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA+IDApCisJCWFwaWNpZF9iYXNlID0gYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkOworCisJZm9yIChpID0gMDsgaSA8IG5yX25vZGVzOyBpKyspIHsKKwkJaW50IGluZGV4OworCQlpbnQgbmlkOworCQlpbnQgajsKKworCQluaWQgPSBmaW5kX25vZGVfYnlfYWRkcihub2Rlc1tpXS5zdGFydCk7CisJCWlmIChuaWQgPT0gTlVNQV9OT19OT0RFKQorCQkJY29udGludWU7CisKKwkJaW5kZXggPSBub2RlaWRzW25pZF0gPDwgYml0czsKKwkJaWYgKGZha2VfYXBpY2lkX3RvX25vZGVbaW5kZXggKyBhcGljaWRfYmFzZV0gPT0gTlVNQV9OT19OT0RFKQorCQkJZm9yIChqID0gYXBpY2lkX2Jhc2U7IGogPCBjb3JlcyArIGFwaWNpZF9iYXNlOyBqKyspCisJCQkJZmFrZV9hcGljaWRfdG9fbm9kZVtpbmRleCArIGpdID0gaTsKKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCisJCV9fYWNwaV9tYXBfcHhtX3RvX25vZGUobmlkLCBpKTsKKyNlbmRpZgorCX0KKwltZW1jcHkoYXBpY2lkX3RvX25vZGUsIGZha2VfYXBpY2lkX3RvX25vZGUsIHNpemVvZihhcGljaWRfdG9fbm9kZSkpOworfQorI2VuZGlmIC8qIENPTkZJR19OVU1BX0VNVSAqLworCiBpbnQgX19pbml0IGFtZF9zY2FuX25vZGVzKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGJpdHM7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKaW5kZXggZjg5YjViYi4uYzgyMTA3NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGFzbS9idWdzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9vbHBjX29mdy5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CkBAIC03MTUsNiArNzE2LDcgQEAKIAkvKgogCSAqIE5PVEU6IGF0IHRoaXMgcG9pbnQgdGhlIGJvb3RtZW0gYWxsb2NhdG9yIGlzIGZ1bGx5IGF2YWlsYWJsZS4KIAkgKi8KKwlvbHBjX2R0X2J1aWxkX2RldmljZXRyZWUoKTsKIAlzcGFyc2VfaW5pdCgpOwogCXpvbmVfc2l6ZXNfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYV82NC5jIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCmluZGV4IDc3NjJhNTEuLjFlNzIxMDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWFfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKQEAgLTI2MCwzMCArMjYwLDMwIEBACiAjaWZkZWYgQ09ORklHX05VTUFfRU1VCiAvKiBOdW1hIGVtdWxhdGlvbiAqLwogc3RhdGljIHN0cnVjdCBib290bm9kZSBub2Rlc1tNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7Ci1zdGF0aWMgc3RydWN0IGJvb3Rub2RlIHBoeXNub2Rlc1tNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7CitzdGF0aWMgc3RydWN0IGJvb3Rub2RlIHBoeXNub2Rlc1tNQVhfTlVNTk9ERVNdIF9fY3B1aW5pdGRhdGE7CiBzdGF0aWMgY2hhciAqY21kbGluZSBfX2luaXRkYXRhOwogCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9waHlzbm9kZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQkJCWludCBhY3BpLCBpbnQgYW1kKQogewotCWludCBucl9ub2RlcyA9IDA7CiAJaW50IHJldCA9IDA7CiAJaW50IGk7CiAKKwltZW1zZXQocGh5c25vZGVzLCAwLCBzaXplb2YocGh5c25vZGVzKSk7CiAjaWZkZWYgQ09ORklHX0FDUElfTlVNQQogCWlmIChhY3BpKQotCQlucl9ub2RlcyA9IGFjcGlfZ2V0X25vZGVzKHBoeXNub2Rlcyk7CisJCWFjcGlfZ2V0X25vZGVzKHBoeXNub2Rlcywgc3RhcnQsIGVuZCk7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQU1EX05VTUEKIAlpZiAoYW1kKQotCQlucl9ub2RlcyA9IGFtZF9nZXRfbm9kZXMocGh5c25vZGVzKTsKKwkJYW1kX2dldF9ub2RlcyhwaHlzbm9kZXMpOwogI2VuZGlmCiAJLyoKIAkgKiBCYXNpYyBzYW5pdHkgY2hlY2tpbmcgb24gdGhlIHBoeXNpY2FsIG5vZGUgbWFwOiB0aGVyZSBtYXkgYmUgZXJyb3JzCiAJICogaWYgdGhlIFNSQVQgb3IgQU1EIGNvZGUgaW5jb3JyZWN0bHkgcmVwb3J0ZWQgdGhlIHRvcG9sb2d5IG9yIHRoZSBtZW09CiAJICoga2VybmVsIHBhcmFtZXRlciBpcyB1c2VkLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9ub2RlczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1OT0RFUzsgaSsrKSB7CiAJCWlmIChwaHlzbm9kZXNbaV0uc3RhcnQgPT0gcGh5c25vZGVzW2ldLmVuZCkKIAkJCWNvbnRpbnVlOwogCQlpZiAocGh5c25vZGVzW2ldLnN0YXJ0ID4gZW5kKSB7CkBAIC0yOTgsMTcgKzI5OCw2IEBACiAJCQlwaHlzbm9kZXNbaV0uc3RhcnQgPSBzdGFydDsKIAkJaWYgKHBoeXNub2Rlc1tpXS5lbmQgPiBlbmQpCiAJCQlwaHlzbm9kZXNbaV0uZW5kID0gZW5kOwotCX0KLQotCS8qCi0JICogUmVtb3ZlIGFsbCBub2RlcyB0aGF0IGhhdmUgbm8gbWVtb3J5IG9yIHdlcmUgdHJ1bmNhdGVkIGJlY2F1c2Ugb2YgdGhlCi0JICogbGltaXRlZCBhZGRyZXNzIHJhbmdlLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9ub2RlczsgaSsrKSB7Ci0JCWlmIChwaHlzbm9kZXNbaV0uc3RhcnQgPT0gcGh5c25vZGVzW2ldLmVuZCkKLQkJCWNvbnRpbnVlOwotCQlwaHlzbm9kZXNbcmV0XS5zdGFydCA9IHBoeXNub2Rlc1tpXS5zdGFydDsKLQkJcGh5c25vZGVzW3JldF0uZW5kID0gcGh5c25vZGVzW2ldLmVuZDsKIAkJcmV0Kys7CiAJfQogCkBAIC0zMjQsNiArMzEzLDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGZha2VfcGh5c25vZGVzKGludCBhY3BpLCBpbnQgYW1kLCBpbnQgbnJfbm9kZXMpCit7CisJaW50IGk7CisKKwlCVUdfT04oYWNwaSAmJiBhbWQpOworI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKKwlpZiAoYWNwaSkKKwkJYWNwaV9mYWtlX25vZGVzKG5vZGVzLCBucl9ub2Rlcyk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQU1EX05VTUEKKwlpZiAoYW1kKQorCQlhbWRfZmFrZV9ub2Rlcyhub2RlcywgbnJfbm9kZXMpOworI2VuZGlmCisJaWYgKCFhY3BpICYmICFhbWQpCisJCWZvciAoaSA9IDA7IGkgPCBucl9jcHVfaWRzOyBpKyspCisJCQludW1hX3NldF9ub2RlKGksIDApOworfQorCiAvKgogICogU2V0dXBzIHVwIG5pZCB0byByYW5nZSBmcm9tIGFkZHIgdG8gYWRkciArIHNpemUuICBJZiB0aGUgZW5kCiAgKiBib3VuZGFyeSBpcyBncmVhdGVyIHRoYW4gbWF4X2FkZHIsIHRoZW4gbWF4X2FkZHIgaXMgdXNlZCBpbnN0ZWFkLgpAQCAtMzUyLDggKzM1OSw3IEBACiAgKiBTZXRzIHVwIG5yX25vZGVzIGZha2Ugbm9kZXMgaW50ZXJsZWF2ZWQgb3ZlciBwaHlzaWNhbCBub2RlcyByYW5naW5nIGZyb20gYWRkcgogICogdG8gbWF4X2FkZHIuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2Ygbm9kZXMgYWxsb2NhdGVkLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBzcGxpdF9ub2Rlc19pbnRlcmxlYXZlKHU2NCBhZGRyLCB1NjQgbWF4X2FkZHIsCi0JCQkJCQlpbnQgbnJfcGh5c19ub2RlcywgaW50IG5yX25vZGVzKQorc3RhdGljIGludCBfX2luaXQgc3BsaXRfbm9kZXNfaW50ZXJsZWF2ZSh1NjQgYWRkciwgdTY0IG1heF9hZGRyLCBpbnQgbnJfbm9kZXMpCiB7CiAJbm9kZW1hc2tfdCBwaHlzbm9kZV9tYXNrID0gTk9ERV9NQVNLX05PTkU7CiAJdTY0IHNpemU7CkBAIC0zODQsNyArMzkwLDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBucl9waHlzX25vZGVzOyBpKyspCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1OT0RFUzsgaSsrKQogCQlpZiAocGh5c25vZGVzW2ldLnN0YXJ0ICE9IHBoeXNub2Rlc1tpXS5lbmQpCiAJCQlub2RlX3NldChpLCBwaHlzbm9kZV9tYXNrKTsKIApAQCAtNTUzLDExICs1NTksOSBAQAogewogCXU2NCBhZGRyID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CiAJdTY0IG1heF9hZGRyID0gbGFzdF9wZm4gPDwgUEFHRV9TSElGVDsKLQlpbnQgbnVtX3BoeXNfbm9kZXM7CiAJaW50IG51bV9ub2RlczsKIAlpbnQgaTsKIAotCW51bV9waHlzX25vZGVzID0gc2V0dXBfcGh5c25vZGVzKGFkZHIsIG1heF9hZGRyLCBhY3BpLCBhbWQpOwogCS8qCiAJICogSWYgdGhlIG51bWE9ZmFrZSBjb21tYW5kLWxpbmUgY29udGFpbnMgYSAnTScgb3IgJ0cnLCBpdCByZXByZXNlbnRzCiAJICogdGhlIGZpeGVkIG5vZGUgc2l6ZS4gIE90aGVyd2lzZSwgaWYgaXQgaXMganVzdCBhIHNpbmdsZSBudW1iZXIgTiwKQEAgLTU3Miw3ICs1NzYsNyBAQAogCQl1bnNpZ25lZCBsb25nIG47CiAKIAkJbiA9IHNpbXBsZV9zdHJ0b3VsKGNtZGxpbmUsIE5VTEwsIDApOwotCQludW1fbm9kZXMgPSBzcGxpdF9ub2Rlc19pbnRlcmxlYXZlKGFkZHIsIG1heF9hZGRyLCBudW1fcGh5c19ub2Rlcywgbik7CisJCW51bV9ub2RlcyA9IHNwbGl0X25vZGVzX2ludGVybGVhdmUoYWRkciwgbWF4X2FkZHIsIG4pOwogCX0KIAogCWlmIChudW1fbm9kZXMgPCAwKQpAQCAtNTk1LDcgKzU5OSw4IEBACiAJCQkJCQlub2Rlc1tpXS5lbmQgPj4gUEFHRV9TSElGVCk7CiAJCXNldHVwX25vZGVfYm9vdG1lbShpLCBub2Rlc1tpXS5zdGFydCwgbm9kZXNbaV0uZW5kKTsKIAl9Ci0JYWNwaV9mYWtlX25vZGVzKG5vZGVzLCBudW1fbm9kZXMpOworCXNldHVwX3BoeXNub2RlcyhhZGRyLCBtYXhfYWRkciwgYWNwaSwgYW1kKTsKKwlmYWtlX3BoeXNub2RlcyhhY3BpLCBhbWQsIG51bV9ub2Rlcyk7CiAJbnVtYV9pbml0X2FycmF5KCk7CiAJcmV0dXJuIDA7CiB9CkBAIC02MTAsOCArNjE1LDEyIEBACiAJbm9kZXNfY2xlYXIobm9kZV9vbmxpbmVfbWFwKTsKIAogI2lmZGVmIENPTkZJR19OVU1BX0VNVQorCXNldHVwX3BoeXNub2RlcyhzdGFydF9wZm4gPDwgUEFHRV9TSElGVCwgbGFzdF9wZm4gPDwgUEFHRV9TSElGVCwKKwkJCWFjcGksIGFtZCk7CiAJaWYgKGNtZGxpbmUgJiYgIW51bWFfZW11bGF0aW9uKHN0YXJ0X3BmbiwgbGFzdF9wZm4sIGFjcGksIGFtZCkpCiAJCXJldHVybjsKKwlzZXR1cF9waHlzbm9kZXMoc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQsIGxhc3RfcGZuIDw8IFBBR0VfU0hJRlQsCisJCQlhY3BpLCBhbWQpOwogCW5vZGVzX2NsZWFyKG5vZGVfcG9zc2libGVfbWFwKTsKIAlub2Rlc19jbGVhcihub2RlX29ubGluZV9tYXApOwogI2VuZGlmCkBAIC03NjcsNiArNzc2LDcgQEAKIAogI2lmbmRlZiBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTCiAKKyNpZm5kZWYgQ09ORklHX05VTUFfRU1VCiB2b2lkIF9fY3B1aW5pdCBudW1hX2FkZF9jcHUoaW50IGNwdSkKIHsKIAljcHVtYXNrX3NldF9jcHUoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW2Vhcmx5X2NwdV90b19ub2RlKGNwdSldKTsKQEAgLTc3NiwzNCArNzg2LDExNSBAQAogewogCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtlYXJseV9jcHVfdG9fbm9kZShjcHUpXSk7CiB9CisjZWxzZQordm9pZCBfX2NwdWluaXQgbnVtYV9hZGRfY3B1KGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXUxNiBhcGljaWQ7CisJaW50IHBoeXNuaWQ7CisJaW50IG5pZCA9IE5VTUFfTk9fTk9ERTsKKworCWFwaWNpZCA9IGVhcmx5X3Blcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7CisJaWYgKGFwaWNpZCAhPSBCQURfQVBJQ0lEKQorCQluaWQgPSBhcGljaWRfdG9fbm9kZVthcGljaWRdOworCWlmIChuaWQgPT0gTlVNQV9OT19OT0RFKQorCQluaWQgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUpOworCUJVR19PTihuaWQgPT0gTlVNQV9OT19OT0RFIHx8ICFub2RlX29ubGluZShuaWQpKTsKKworCS8qCisJICogVXNlIHRoZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSBlbXVsYXRlZCBub2RlIHRvIGZpbmQgd2hpY2ggcGh5c2ljYWwKKwkgKiBub2RlIGl0IGlzIGFsbG9jYXRlZCBvbi4KKwkgKi8KKwlhZGRyID0gbm9kZV9zdGFydF9wZm4obmlkKSA8PCBQQUdFX1NISUZUOworCWZvciAocGh5c25pZCA9IDA7IHBoeXNuaWQgPCBNQVhfTlVNTk9ERVM7IHBoeXNuaWQrKykKKwkJaWYgKGFkZHIgPj0gcGh5c25vZGVzW3BoeXNuaWRdLnN0YXJ0ICYmCisJCSAgICBhZGRyIDwgcGh5c25vZGVzW3BoeXNuaWRdLmVuZCkKKwkJCWJyZWFrOworCisJLyoKKwkgKiBNYXAgdGhlIGNwdSB0byBlYWNoIGVtdWxhdGVkIG5vZGUgdGhhdCBpcyBhbGxvY2F0ZWQgb24gdGhlIHBoeXNpY2FsCisJICogbm9kZSBvZiB0aGUgY3B1J3MgYXBpYyBpZC4KKwkgKi8KKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKKwkJYWRkciA9IG5vZGVfc3RhcnRfcGZuKG5pZCkgPDwgUEFHRV9TSElGVDsKKwkJaWYgKGFkZHIgPj0gcGh5c25vZGVzW3BoeXNuaWRdLnN0YXJ0ICYmCisJCSAgICBhZGRyIDwgcGh5c25vZGVzW3BoeXNuaWRdLmVuZCkKKwkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbbmlkXSk7CisJfQorfQorCit2b2lkIF9fY3B1aW5pdCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX29ubGluZV9ub2RlKGkpCisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtpXSk7Cit9CisjZW5kaWYgLyogIUNPTkZJR19OVU1BX0VNVSAqLwogCiAjZWxzZSAvKiBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTICovCi0KLS8qCi0gKiAtLS0tLS0tLS0gZGVidWcgdmVyc2lvbnMgb2YgdGhlIG51bWEgZnVuY3Rpb25zIC0tLS0tLS0tLQotICovCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfY3B1bWFzayhpbnQgY3B1LCBpbnQgZW5hYmxlKQorc3RhdGljIHN0cnVjdCBjcHVtYXNrIF9fY3B1aW5pdCAqZGVidWdfY3B1bWFza19zZXRfY3B1KGludCBjcHUsIGludCBlbmFibGUpCiB7CiAJaW50IG5vZGUgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUpOwogCXN0cnVjdCBjcHVtYXNrICptYXNrOwogCWNoYXIgYnVmWzY0XTsKIAogCW1hc2sgPSBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwotCWlmIChtYXNrID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJub2RlX3RvX2NwdW1hc2tfbWFwWyVpXSBOVUxMXG4iLCBub2RlKTsKKwlpZiAoIW1hc2spIHsKKwkJcHJfZXJyKCJub2RlX3RvX2NwdW1hc2tfbWFwWyVpXSBOVUxMXG4iLCBub2RlKTsKIAkJZHVtcF9zdGFjaygpOwotCQlyZXR1cm47CisJCXJldHVybiBOVUxMOwogCX0KIAorCWNwdWxpc3Rfc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIG1hc2spOworCXByaW50ayhLRVJOX0RFQlVHICIlcyBjcHUgJWQgbm9kZSAlZDogbWFzayBub3cgJXNcbiIsCisJCWVuYWJsZSA/ICJudW1hX2FkZF9jcHUiIDogIm51bWFfcmVtb3ZlX2NwdSIsCisJCWNwdSwgbm9kZSwgYnVmKTsKKwlyZXR1cm4gbWFzazsKK30KKworLyoKKyAqIC0tLS0tLS0tLSBkZWJ1ZyB2ZXJzaW9ucyBvZiB0aGUgbnVtYSBmdW5jdGlvbnMgLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgQ09ORklHX05VTUFfRU1VCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfY3B1bWFzayhpbnQgY3B1LCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBjcHVtYXNrICptYXNrOworCisJbWFzayA9IGRlYnVnX2NwdW1hc2tfc2V0X2NwdShjcHUsIGVuYWJsZSk7CisJaWYgKCFtYXNrKQorCQlyZXR1cm47CisKIAlpZiAoZW5hYmxlKQogCQljcHVtYXNrX3NldF9jcHUoY3B1LCBtYXNrKTsKIAllbHNlCiAJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbWFzayk7Ci0KLQljcHVsaXN0X3NjbnByaW50ZihidWYsIHNpemVvZihidWYpLCBtYXNrKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXMgY3B1ICVkIG5vZGUgJWQ6IG1hc2sgbm93ICVzXG4iLAotCQllbmFibGUgPyAibnVtYV9hZGRfY3B1IiA6ICJudW1hX3JlbW92ZV9jcHUiLCBjcHUsIG5vZGUsIGJ1Zik7CiB9CisjZWxzZQorc3RhdGljIHZvaWQgX19jcHVpbml0IG51bWFfc2V0X2NwdW1hc2soaW50IGNwdSwgaW50IGVuYWJsZSkKK3sKKwlpbnQgbm9kZSA9IGVhcmx5X2NwdV90b19ub2RlKGNwdSk7CisJc3RydWN0IGNwdW1hc2sgKm1hc2s7CisJaW50IGk7CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShpKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCQlhZGRyID0gbm9kZV9zdGFydF9wZm4oaSkgPDwgUEFHRV9TSElGVDsKKwkJaWYgKGFkZHIgPCBwaHlzbm9kZXNbbm9kZV0uc3RhcnQgfHwKKwkJCQkJYWRkciA+PSBwaHlzbm9kZXNbbm9kZV0uZW5kKQorCQkJY29udGludWU7CisJCW1hc2sgPSBkZWJ1Z19jcHVtYXNrX3NldF9jcHUoY3B1LCBlbmFibGUpOworCQlpZiAoIW1hc2spCisJCQlyZXR1cm47CisKKwkJaWYgKGVuYWJsZSkKKwkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIG1hc2spOworCQllbHNlCisJCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1hc2spOworCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfTlVNQV9FTVUgKi8KIAogdm9pZCBfX2NwdWluaXQgbnVtYV9hZGRfY3B1KGludCBjcHUpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMgYi9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMKaW5kZXggMTcxYTBhYS4uNjAzZDI4NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vc3JhdF82NC5jCisrKyBiL2FyY2gveDg2L21tL3NyYXRfNjQuYwpAQCAtMzQ5LDE4ICszNDksMTkgQEAKIAogdm9pZCBfX2luaXQgYWNwaV9udW1hX2FyY2hfZml4dXAodm9pZCkge30KIAotaW50IF9faW5pdCBhY3BpX2dldF9ub2RlcyhzdHJ1Y3QgYm9vdG5vZGUgKnBoeXNub2RlcykKKyNpZmRlZiBDT05GSUdfTlVNQV9FTVUKK3ZvaWQgX19pbml0IGFjcGlfZ2V0X25vZGVzKHN0cnVjdCBib290bm9kZSAqcGh5c25vZGVzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCXVuc2lnbmVkIGxvbmcgZW5kKQogewogCWludCBpOwotCWludCByZXQgPSAwOwogCiAJZm9yX2VhY2hfbm9kZV9tYXNrKGksIG5vZGVzX3BhcnNlZCkgewotCQlwaHlzbm9kZXNbcmV0XS5zdGFydCA9IG5vZGVzW2ldLnN0YXJ0OwotCQlwaHlzbm9kZXNbcmV0XS5lbmQgPSBub2Rlc1tpXS5lbmQ7Ci0JCXJldCsrOworCQljdXRvZmZfbm9kZShpLCBzdGFydCwgZW5kKTsKKwkJcGh5c25vZGVzW2ldLnN0YXJ0ID0gbm9kZXNbaV0uc3RhcnQ7CisJCXBoeXNub2Rlc1tpXS5lbmQgPSBub2Rlc1tpXS5lbmQ7CiAJfQotCXJldHVybiByZXQ7CiB9CisjZW5kaWYgLyogQ09ORklHX05VTUFfRU1VICovCiAKIC8qIFVzZSB0aGUgaW5mb3JtYXRpb24gZGlzY292ZXJlZCBhYm92ZSB0byBhY3R1YWxseSBzZXQgdXAgdGhlIG5vZGVzLiAqLwogaW50IF9faW5pdCBhY3BpX3NjYW5fbm9kZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCkBAIC01MDUsOCArNTA2LDYgQEAKIHsKIAlpbnQgaSwgajsKIAotCXByaW50ayhLRVJOX0lORk8gIkZha2luZyBQWE0gYWZmaW5pdHkgZm9yIGZha2Ugbm9kZXMgb24gcmVhbCAiCi0JCQkgInRvcG9sb2d5LlxuIik7CiAJZm9yIChpID0gMDsgaSA8IG51bV9ub2RlczsgaSsrKSB7CiAJCWludCBuaWQsIHB4bTsKIApAQCAtNTI2LDYgKzUyNSwxNyBAQAogCQkJICAgIGZha2VfYXBpY2lkX3RvX25vZGVbal0gPT0gTlVNQV9OT19OT0RFKQogCQkJCWZha2VfYXBpY2lkX3RvX25vZGVbal0gPSBpOwogCX0KKworCS8qCisJICogSWYgdGhlcmUgYXJlIGFwaWNpZC10by1ub2RlIG1hcHBpbmdzIGZvciBwaHlzaWNhbCBub2RlcyB0aGF0IGRvIG5vdAorCSAqIGhhdmUgYSBjb3JyZXNwb25kaW5nIGVtdWxhdGVkIG5vZGUsIGl0IHNob3VsZCBkZWZhdWx0IHRvIGEgZ3VhcmFudGVlZAorCSAqIHZhbHVlLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfTE9DQUxfQVBJQzsgaSsrKQorCQlpZiAoYXBpY2lkX3RvX25vZGVbaV0gIT0gTlVNQV9OT19OT0RFICYmCisJCSAgICBmYWtlX2FwaWNpZF90b19ub2RlW2ldID09IE5VTUFfTk9fTk9ERSkKKwkJCWZha2VfYXBpY2lkX3RvX25vZGVbaV0gPSAwOworCiAJZm9yIChpID0gMDsgaSA8IG51bV9ub2RlczsgaSsrKQogCQlfX2FjcGlfbWFwX3B4bV90b19ub2RlKGZha2Vfbm9kZV90b19weG1fbWFwW2ldLCBpKTsKIAltZW1jcHkoYXBpY2lkX3RvX25vZGUsIGZha2VfYXBpY2lkX3RvX25vZGUsIHNpemVvZihhcGljaWRfdG9fbm9kZSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCmluZGV4IGYyNGE4NTMuLmUyYjdiMGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMKQEAgLTY1LDcgKzY1LDYgQEAKIAogCXN3aXRjaCAodmFsKSB7CiAJY2FzZSBESUVfTk1JOgotCWNhc2UgRElFX05NSV9JUEk6CiAJCWlmIChjdHJfcnVubmluZykKIAkJCW1vZGVsLT5jaGVja19jdHJzKGFyZ3MtPnJlZ3MsICZfX2dldF9jcHVfdmFyKGNwdV9tc3JzKSk7CiAJCWVsc2UgaWYgKCFubWlfZW5hYmxlZCkKQEAgLTM2MSw3ICszNjAsNyBAQAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwcm9maWxlX2V4Y2VwdGlvbnNfbmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBwcm9maWxlX2V4Y2VwdGlvbnNfbm90aWZ5LAogCS5uZXh0ID0gTlVMTCwKLQkucHJpb3JpdHkgPSAyCisJLnByaW9yaXR5ID0gTk1JX0xPQ0FMX0xPV19QUklPUiwKIH07CiAKIHN0YXRpYyB2b2lkIG5taV9jcHVfcmVzdG9yZV9yZWdpc3RlcnMoc3RydWN0IG9wX21zcnMgKm1zcnMpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfdGltZXJfaW50LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfdGltZXJfaW50LmMKaW5kZXggMDYzNmRkOS4uNzIwYmY1YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX3RpbWVyX2ludC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL25taV90aW1lcl9pbnQuYwpAQCAtMzgsNyArMzgsNyBAQAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwcm9maWxlX3RpbWVyX2V4Y2VwdGlvbnNfbmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBwcm9maWxlX3RpbWVyX2V4Y2VwdGlvbnNfbm90aWZ5LAogCS5uZXh0ID0gTlVMTCwKLQkucHJpb3JpdHkgPSAwCisJLnByaW9yaXR5ID0gTk1JX0xPV19QUklPUiwKIH07CiAKIHN0YXRpYyBpbnQgdGltZXJfc3RhcnQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9hbWRfYnVzLmMgYi9hcmNoL3g4Ni9wY2kvYW1kX2J1cy5jCmluZGV4IGZjMWU4ZmUuLmUyN2RmZmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9hbWRfYnVzLmMKKysrIGIvYXJjaC94ODYvcGNpL2FtZF9idXMuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5nZS5oPgogCisjaW5jbHVkZSA8YXNtL2FtZF9uYi5oPgogI2luY2x1ZGUgPGFzbS9wY2lfeDg2Lmg+CiAKICNpbmNsdWRlIDxhc20vcGNpLWRpcmVjdC5oPgpAQCAtMzc4LDYgKzM3OSwzNCBAQAogCS5ub3RpZmllcl9jYWxsCT0gYW1kX2NwdV9ub3RpZnksCiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgcGNpX2VuYWJsZV9wY2lfaW9fZWNzKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0FNRF9OQgorCXVuc2lnbmVkIGludCBpLCBuOworCisJZm9yIChuID0gaSA9IDA7ICFuICYmIGFtZF9uYl9idXNfZGV2X3Jhbmdlc1tpXS5kZXZfbGltaXQ7ICsraSkgeworCQl1OCBidXMgPSBhbWRfbmJfYnVzX2Rldl9yYW5nZXNbaV0uYnVzOworCQl1OCBzbG90ID0gYW1kX25iX2J1c19kZXZfcmFuZ2VzW2ldLmRldl9iYXNlOworCQl1OCBsaW1pdCA9IGFtZF9uYl9idXNfZGV2X3Jhbmdlc1tpXS5kZXZfbGltaXQ7CisKKwkJZm9yICg7IHNsb3QgPCBsaW1pdDsgKytzbG90KSB7CisJCQl1MzIgdmFsID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgMywgMCk7CisKKwkJCWlmICghZWFybHlfaXNfYW1kX25iKHZhbCkpCisJCQkJY29udGludWU7CisKKwkJCXZhbCA9IHJlYWRfcGNpX2NvbmZpZyhidXMsIHNsb3QsIDMsIDB4OGMpOworCQkJaWYgKCEodmFsICYgKEVOQUJMRV9DRjhfRVhUX0NGRyA+PiAzMikpKSB7CisJCQkJdmFsIHw9IEVOQUJMRV9DRjhfRVhUX0NGRyA+PiAzMjsKKwkJCQl3cml0ZV9wY2lfY29uZmlnKGJ1cywgc2xvdCwgMywgMHg4YywgdmFsKTsKKwkJCX0KKwkJCSsrbjsKKwkJfQorCX0KKwlwcl9pbmZvKCJFeHRlbmRlZCBDb25maWcgU3BhY2UgZW5hYmxlZCBvbiAldSBub2Rlc1xuIiwgbik7CisjZW5kaWYKK30KKwogc3RhdGljIGludCBfX2luaXQgcGNpX2lvX2Vjc19pbml0KHZvaWQpCiB7CiAJaW50IGNwdTsKQEAgLTM4Niw2ICs0MTUsMTAgQEAKICAgICAgICAgaWYgKGJvb3RfY3B1X2RhdGEueDg2IDwgMHgxMCkKIAkJcmV0dXJuIDA7CiAKKwkvKiBUcnkgdGhlIFBDSSBtZXRob2QgZmlyc3QuICovCisJaWYgKGVhcmx5X3BjaV9hbGxvd2VkKCkpCisJCXBjaV9lbmFibGVfcGNpX2lvX2VjcygpOworCiAJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZhbWRfY3B1X25vdGlmaWVyKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKIAkJYW1kX2NwdV9ub3RpZnkoJmFtZF9jcHVfbm90aWZpZXIsICh1bnNpZ25lZCBsb25nKUNQVV9PTkxJTkUsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9tcnN0L2Vhcmx5X3ByaW50a19tcnN0LmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9tcnN0L2Vhcmx5X3ByaW50a19tcnN0LmMKaW5kZXggNjVkZjYwMy4uMjViZmRiYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC9lYXJseV9wcmludGtfbXJzdC5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvZWFybHlfcHJpbnRrX21yc3QuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtcnN0X3NwaV9wYWRkciA9IE1SU1RfUkVHQkFTRV9TUEkwOwogCiBzdGF0aWMgdTMyICpwY2xrX3NwaTA7Ci0vKiBBbHdheXMgY29udGFpbnMgYW4gYWNjZXNzYWJsZSBhZGRyZXNzLCBzdGFydCB3aXRoIDAgKi8KKy8qIEFsd2F5cyBjb250YWlucyBhbiBhY2Nlc3NpYmxlIGFkZHJlc3MsIHN0YXJ0IHdpdGggMCAqLwogc3RhdGljIHN0cnVjdCBkd19zcGlfcmVnICpwc3BpOwogCiBzdGF0aWMgc3RydWN0IGttc2dfZHVtcGVyIGR3X2R1bXBlcjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL29scGMvTWFrZWZpbGUgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL01ha2VmaWxlCmluZGV4IGMzMWI4ZmMuLmU3OTc0MjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL29scGMvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vb2xwYy9NYWtlZmlsZQpAQCAtMSwzICsxLDQgQEAKIG9iai0kKENPTkZJR19PTFBDKQkJKz0gb2xwYy5vCiBvYmotJChDT05GSUdfT0xQQ19YTzEpCQkrPSBvbHBjLXhvMS5vCiBvYmotJChDT05GSUdfT0xQQ19PUEVORklSTVdBUkUpCSs9IG9scGNfb2Z3Lm8KK29iai0kKENPTkZJR19PTFBDX09QRU5GSVJNV0FSRV9EVCkJKz0gb2xwY19kdC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGNfZHQuYyBiL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYjg3NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGNfZHQuYwpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIE9MUEMtc3BlY2lmaWMgT0ZXIGRldmljZSB0cmVlIHN1cHBvcnQgY29kZS4KKyAqCisgKiBQYXVsIE1hY2tlcnJhcwlBdWd1c3QgMTk5Ni4KKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDA1IFBhdWwgTWFja2VycmFzLgorICoKKyAqICBBZGFwdGVkIGZvciA2NGJpdCBQb3dlclBDIGJ5IERhdmUgRW5nZWJyZXRzZW4gYW5kIFBldGVyIEJlcmduZXIuCisgKiAgICB7ZW5nZWJyZXR8YmVyZ25lcn1AdXMuaWJtLmNvbQorICoKKyAqICBBZGFwdGVkIGZvciBzcGFyYyBieSBEYXZpZCBTLiBNaWxsZXIgZGF2ZW1AZGF2ZW1sb2Z0Lm5ldAorICogIEFkYXB0ZWQgZm9yIHg4Ni9PTFBDIGJ5IEFuZHJlcyBTYWxvbW9uIDxkaWxpbmdlckBxdWV1ZWQubmV0PgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGR0Lmg+CisjaW5jbHVkZSA8YXNtL29scGNfb2Z3Lmg+CisKK3N0YXRpYyBwaGFuZGxlIF9faW5pdCBvbHBjX2R0X2dldHNpYmxpbmcocGhhbmRsZSBub2RlKQoreworCWNvbnN0IHZvaWQgKmFyZ3NbXSA9IHsgKHZvaWQgKilub2RlIH07CisJdm9pZCAqcmVzW10gPSB7ICZub2RlIH07CisKKwlpZiAoKHMzMilub2RlID09IC0xKQorCQlyZXR1cm4gMDsKKworCWlmIChvbHBjX29mdygicGVlciIsIGFyZ3MsIHJlcykgfHwgKHMzMilub2RlID09IC0xKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBub2RlOworfQorCitzdGF0aWMgcGhhbmRsZSBfX2luaXQgb2xwY19kdF9nZXRjaGlsZChwaGFuZGxlIG5vZGUpCit7CisJY29uc3Qgdm9pZCAqYXJnc1tdID0geyAodm9pZCAqKW5vZGUgfTsKKwl2b2lkICpyZXNbXSA9IHsgJm5vZGUgfTsKKworCWlmICgoczMyKW5vZGUgPT0gLTEpCisJCXJldHVybiAwOworCisJaWYgKG9scGNfb2Z3KCJjaGlsZCIsIGFyZ3MsIHJlcykgfHwgKHMzMilub2RlID09IC0xKSB7CisJCXByX2VycigiUFJPTTogJXM6IGZldGNoaW5nIGNoaWxkIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG9scGNfZHRfZ2V0cHJvcGxlbihwaGFuZGxlIG5vZGUsIGNvbnN0IGNoYXIgKnByb3ApCit7CisJY29uc3Qgdm9pZCAqYXJnc1tdID0geyAodm9pZCAqKW5vZGUsIHByb3AgfTsKKwlpbnQgbGVuOworCXZvaWQgKnJlc1tdID0geyAmbGVuIH07CisKKwlpZiAoKHMzMilub2RlID09IC0xKQorCQlyZXR1cm4gLTE7CisKKwlpZiAob2xwY19vZncoImdldHByb3BsZW4iLCBhcmdzLCByZXMpKSB7CisJCXByX2VycigiUFJPTTogJXM6IGdldHByb3BsZW4gZmFpbGVkIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBfX2luaXQgb2xwY19kdF9nZXRwcm9wZXJ0eShwaGFuZGxlIG5vZGUsIGNvbnN0IGNoYXIgKnByb3AsCisJCWNoYXIgKmJ1ZiwgaW50IGJ1ZnNpemUpCit7CisJaW50IHBsZW47CisKKwlwbGVuID0gb2xwY19kdF9nZXRwcm9wbGVuKG5vZGUsIHByb3ApOworCWlmIChwbGVuID4gYnVmc2l6ZSB8fCBwbGVuIDwgMSkgeworCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJY29uc3Qgdm9pZCAqYXJnc1tdID0geyAodm9pZCAqKW5vZGUsIHByb3AsIGJ1ZiwgKHZvaWQgKilwbGVuIH07CisJCXZvaWQgKnJlc1tdID0geyAmcGxlbiB9OworCisJCWlmIChvbHBjX29mdygiZ2V0cHJvcCIsIGFyZ3MsIHJlcykpIHsKKwkJCXByX2VycigiUFJPTTogJXM6IGdldHByb3AgZmFpbGVkIVxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIHBsZW47Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG9scGNfZHRfbmV4dHByb3AocGhhbmRsZSBub2RlLCBjaGFyICpwcmV2LCBjaGFyICpidWYpCit7CisJY29uc3Qgdm9pZCAqYXJnc1tdID0geyAodm9pZCAqKW5vZGUsIHByZXYsIGJ1ZiB9OworCWludCBzdWNjZXNzOworCXZvaWQgKnJlc1tdID0geyAmc3VjY2VzcyB9OworCisJYnVmWzBdID0gJ1wwJzsKKworCWlmICgoczMyKW5vZGUgPT0gLTEpCisJCXJldHVybiAtMTsKKworCWlmIChvbHBjX29mdygibmV4dHByb3AiLCBhcmdzLCByZXMpIHx8IHN1Y2Nlc3MgIT0gMSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG9scGNfZHRfcGtnMnBhdGgocGhhbmRsZSBub2RlLCBjaGFyICpidWYsCisJCWNvbnN0IGludCBidWZsZW4sIGludCAqbGVuKQoreworCWNvbnN0IHZvaWQgKmFyZ3NbXSA9IHsgKHZvaWQgKilub2RlLCBidWYsICh2b2lkICopYnVmbGVuIH07CisJdm9pZCAqcmVzW10gPSB7IGxlbiB9OworCisJaWYgKChzMzIpbm9kZSA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJaWYgKG9scGNfb2Z3KCJwYWNrYWdlLXRvLXBhdGgiLCBhcmdzLCByZXMpIHx8ICpsZW4gPCAxKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBwcm9tX2Vhcmx5X2FsbG9jYXRlZCBfX2luaXRkYXRhOworCit2b2lkICogX19pbml0IHByb21fZWFybHlfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0YXRpYyB1OCAqbWVtOworCXN0YXRpYyBzaXplX3QgZnJlZV9tZW07CisJdm9pZCAqcmVzOworCisJaWYgKGZyZWVfbWVtIDwgc2l6ZSkgeworCQljb25zdCBzaXplX3QgY2h1bmtfc2l6ZSA9IG1heChQQUdFX1NJWkUsIHNpemUpOworCisJCS8qCisJCSAqIFRvIG1pbWltaXplIHRoZSBudW1iZXIgb2YgYWxsb2NhdGlvbnMsIGdyYWIgYXQgbGVhc3QKKwkJICogUEFHRV9TSVpFIG9mIG1lbW9yeSAodGhhdCdzIGFuIGFyYml0cmFyeSBjaG9pY2UgdGhhdCdzCisJCSAqIGZhc3QgZW5vdWdoIG9uIHRoZSBwbGF0Zm9ybXMgd2UgY2FyZSBhYm91dCB3aGlsZSBtaW5pbWl6aW5nCisJCSAqIHdhc3RlZCBib290bWVtKSBhbmQgaGFuZCBvZmYgY2h1bmtzIG9mIGl0IHRvIGNhbGxlcnMuCisJCSAqLworCQlyZXMgPSBhbGxvY19ib290bWVtKGNodW5rX3NpemUpOworCQlpZiAoIXJlcykKKwkJCXJldHVybiBOVUxMOworCQlwcm9tX2Vhcmx5X2FsbG9jYXRlZCArPSBjaHVua19zaXplOworCQltZW1zZXQocmVzLCAwLCBjaHVua19zaXplKTsKKwkJZnJlZV9tZW0gPSBjaHVua19zaXplOworCQltZW0gPSByZXM7CisJfQorCisJLyogYWxsb2NhdGUgZnJvbSB0aGUgbG9jYWwgY2FjaGUgKi8KKwlmcmVlX21lbSAtPSBzaXplOworCXJlcyA9IG1lbTsKKwltZW0gKz0gc2l6ZTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgc3RydWN0IG9mX3BkdF9vcHMgcHJvbV9vbHBjX29wcyBfX2luaXRkYXRhID0geworCS5uZXh0cHJvcCA9IG9scGNfZHRfbmV4dHByb3AsCisJLmdldHByb3BsZW4gPSBvbHBjX2R0X2dldHByb3BsZW4sCisJLmdldHByb3BlcnR5ID0gb2xwY19kdF9nZXRwcm9wZXJ0eSwKKwkuZ2V0Y2hpbGQgPSBvbHBjX2R0X2dldGNoaWxkLAorCS5nZXRzaWJsaW5nID0gb2xwY19kdF9nZXRzaWJsaW5nLAorCS5wa2cycGF0aCA9IG9scGNfZHRfcGtnMnBhdGgsCit9OworCit2b2lkIF9faW5pdCBvbHBjX2R0X2J1aWxkX2RldmljZXRyZWUodm9pZCkKK3sKKwlwaGFuZGxlIHJvb3Q7CisKKwlpZiAoIW9scGNfb2Z3X2lzX2luc3RhbGxlZCgpKQorCQlyZXR1cm47CisKKwlyb290ID0gb2xwY19kdF9nZXRzaWJsaW5nKDApOworCWlmICghcm9vdCkgeworCQlwcl9lcnIoIlBST006IHVuYWJsZSB0byBnZXQgcm9vdCBub2RlIGZyb20gT0ZXIVxuIik7CisJCXJldHVybjsKKwl9CisJb2ZfcGR0X2J1aWxkX2RldmljZXRyZWUocm9vdCwgJnByb21fb2xwY19vcHMpOworCisJcHJfaW5mbygiUFJPTSBEVDogQnVpbHQgZGV2aWNlIHRyZWUgd2l0aCAldSBieXRlcyBvZiBtZW1vcnkuXG4iLAorCQkJcHJvbV9lYXJseV9hbGxvY2F0ZWQpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGxhdGZvcm0vb2xwYy9vbHBjX29mdy5jIGIvYXJjaC94ODYvcGxhdGZvcm0vb2xwYy9vbHBjX29mdy5jCmluZGV4IDc4NzMyMDQuLmU3NjA0ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19vZncuYworKysgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGNfb2Z3LmMKQEAgLTExMCwzICsxMTAsOCBAQAogCQkJKHVuc2lnbmVkIGxvbmcpb2xwY19vZndfY2lmLCAoLXN0YXJ0KSA+PiAyMCk7CiAJcmVzZXJ2ZV90b3BfYWRkcmVzcygtc3RhcnQpOwogfQorCitib29sIF9faW5pdCBvbHBjX29md19pc19pbnN0YWxsZWQodm9pZCkKK3sKKwlyZXR1cm4gb2xwY19vZndfY2lmICE9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9ibG9jay9jZnEtaW9zY2hlZC5jIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwppbmRleCA0Y2Q1OWIwLi43OGVlNGIxIDEwMDY0NAotLS0gYS9ibG9jay9jZnEtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKQEAgLTEwMzAsNyArMTAzMCw3IEBACiAKIAkvKgogCSAqIEFkZCBncm91cCBvbnRvIGNncm91cCBsaXN0LiBJdCBtaWdodCBoYXBwZW4gdGhhdCBiZGktPmRldiBpcwotCSAqIG5vdCBpbml0aWxpYXplZCB5ZXQuIEluaXRpYWxpemUgdGhpcyBuZXcgZ3JvdXAgd2l0aG91dCBtYWpvcgorCSAqIG5vdCBpbml0aWFsaXplZCB5ZXQuIEluaXRpYWxpemUgdGhpcyBuZXcgZ3JvdXAgd2l0aG91dCBtYWpvcgogCSAqIGFuZCBtaW5vciBpbmZvIGFuZCB0aGlzIGluZm8gd2lsbCBiZSBmaWxsZWQgaW4gb25jZSBhIG5ldyB0aHJlYWQKIAkgKiBjb21lcyBmb3IgSU8uIFNlZSBjb2RlIGFib3ZlLgogCSAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL0tjb25maWcgYi9jcnlwdG8vS2NvbmZpZwppbmRleCBlNGJhYzI5Li40YjdjYjBlIDEwMDY0NAotLS0gYS9jcnlwdG8vS2NvbmZpZworKysgYi9jcnlwdG8vS2NvbmZpZwpAQCAtMTEwLDcgKzExMCw2IEBACiAKIGNvbmZpZyBDUllQVE9fR0YxMjhNVUwKIAl0cmlzdGF0ZSAiR0YoMl4xMjgpIG11bHRpcGxpY2F0aW9uIGZ1bmN0aW9ucyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIEVmZmljaWVudCB0YWJsZSBkcml2ZW4gaW1wbGVtZW50YXRpb24gb2YgbXVsdGlwbGljYXRpb25zIGluIHRoZQogCSAgZmllbGQgR0YoMl4xMjgpLiAgVGhpcyBpcyBuZWVkZWQgYnkgc29tZSBjeXBoZXIgbW9kZXMuIFRoaXMKQEAgLTUzOSw4ICs1MzgsOSBAQAogCiBjb25maWcgQ1JZUFRPX0FFU19OSV9JTlRFTAogCXRyaXN0YXRlICJBRVMgY2lwaGVyIGFsZ29yaXRobXMgKEFFUy1OSSkiCi0JZGVwZW5kcyBvbiAoWDg2IHx8IFVNTF9YODYpICYmIDY0QklUCi0Jc2VsZWN0IENSWVBUT19BRVNfWDg2XzY0CisJZGVwZW5kcyBvbiAoWDg2IHx8IFVNTF9YODYpCisJc2VsZWN0IENSWVBUT19BRVNfWDg2XzY0IGlmIDY0QklUCisJc2VsZWN0IENSWVBUT19BRVNfNTg2IGlmICE2NEJJVAogCXNlbGVjdCBDUllQVE9fQ1JZUFRECiAJc2VsZWN0IENSWVBUT19BTEdBUEkKIAlzZWxlY3QgQ1JZUFRPX0ZQVQpAQCAtNTYzLDkgKzU2MywxMCBAQAogCiAJICBTZWUgPGh0dHA6Ly9jc3JjLm5pc3QuZ292L2VuY3J5cHRpb24vYWVzLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKLQkgIEluIGFkZGl0aW9uIHRvIEFFUyBjaXBoZXIgYWxnb3JpdGhtIHN1cHBvcnQsIHRoZQotCSAgYWNjZWxlcmF0aW9uIGZvciBzb21lIHBvcHVsYXIgYmxvY2sgY2lwaGVyIG1vZGUgaXMgc3VwcG9ydGVkCi0JICB0b28sIGluY2x1ZGluZyBFQ0IsIENCQywgQ1RSLCBMUlcsIFBDQkMsIFhUUy4KKwkgIEluIGFkZGl0aW9uIHRvIEFFUyBjaXBoZXIgYWxnb3JpdGhtIHN1cHBvcnQsIHRoZSBhY2NlbGVyYXRpb24KKwkgIGZvciBzb21lIHBvcHVsYXIgYmxvY2sgY2lwaGVyIG1vZGUgaXMgc3VwcG9ydGVkIHRvbywgaW5jbHVkaW5nCisJICBFQ0IsIENCQywgTFJXLCBQQ0JDLCBYVFMuIFRoZSA2NCBiaXQgdmVyc2lvbiBoYXMgYWRkaXRpb25hbAorCSAgYWNjZWxlcmF0aW9uIGZvciBDVFIuCiAKIGNvbmZpZyBDUllQVE9fQU5VQklTCiAJdHJpc3RhdGUgIkFudWJpcyBjaXBoZXIgYWxnb3JpdGhtIgpAQCAtODQxLDYgKzg0MiwyNyBAQAogCSAgQU5TSSBYOS4zMSBBLjIuNC4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIG11c3QgYmUgZW5hYmxlZCBpZgogCSAgQ1JZUFRPX0ZJUFMgaXMgc2VsZWN0ZWQKIAorY29uZmlnIENSWVBUT19VU0VSX0FQSQorCXRyaXN0YXRlCisKK2NvbmZpZyBDUllQVE9fVVNFUl9BUElfSEFTSAorCXRyaXN0YXRlICJVc2VyLXNwYWNlIGludGVyZmFjZSBmb3IgaGFzaCBhbGdvcml0aG1zIgorCWRlcGVuZHMgb24gTkVUCisJc2VsZWN0IENSWVBUT19IQVNICisJc2VsZWN0IENSWVBUT19VU0VSX0FQSQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHVzZXItc3BhY2VzIGludGVyZmFjZSBmb3IgaGFzaAorCSAgYWxnb3JpdGhtcy4KKworY29uZmlnIENSWVBUT19VU0VSX0FQSV9TS0NJUEhFUgorCXRyaXN0YXRlICJVc2VyLXNwYWNlIGludGVyZmFjZSBmb3Igc3ltbWV0cmljIGtleSBjaXBoZXIgYWxnb3JpdGhtcyIKKwlkZXBlbmRzIG9uIE5FVAorCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCisJc2VsZWN0IENSWVBUT19VU0VSX0FQSQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHVzZXItc3BhY2VzIGludGVyZmFjZSBmb3Igc3ltbWV0cmljCisJICBrZXkgY2lwaGVyIGFsZ29yaXRobXMuCisKIHNvdXJjZSAiZHJpdmVycy9jcnlwdG8vS2NvbmZpZyIKIAogZW5kaWYJIyBpZiBDUllQVE8KZGlmZiAtLWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZQppbmRleCA0MjNiN2RlLi5lOWEzOTljIDEwMDY0NAotLS0gYS9jcnlwdG8vTWFrZWZpbGUKKysrIGIvY3J5cHRvL01ha2VmaWxlCkBAIC0zLDMyICszLDMyIEBACiAjCiAKIG9iai0kKENPTkZJR19DUllQVE8pICs9IGNyeXB0by5vCi1jcnlwdG8tb2JqcyA6PSBhcGkubyBjaXBoZXIubyBjb21wcmVzcy5vCitjcnlwdG8teSA6PSBhcGkubyBjaXBoZXIubyBjb21wcmVzcy5vCiAKIG9iai0kKENPTkZJR19DUllQVE9fV09SS1FVRVVFKSArPSBjcnlwdG9fd3EubwogCiBvYmotJChDT05GSUdfQ1JZUFRPX0ZJUFMpICs9IGZpcHMubwogCiBjcnlwdG9fYWxnYXBpLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2MubwotY3J5cHRvX2FsZ2FwaS1vYmpzIDo9IGFsZ2FwaS5vIHNjYXR0ZXJ3YWxrLm8gJChjcnlwdG9fYWxnYXBpLXkpCitjcnlwdG9fYWxnYXBpLXkgOj0gYWxnYXBpLm8gc2NhdHRlcndhbGsubyAkKGNyeXB0b19hbGdhcGkteSkKIG9iai0kKENPTkZJR19DUllQVE9fQUxHQVBJMikgKz0gY3J5cHRvX2FsZ2FwaS5vCiAKIG9iai0kKENPTkZJR19DUllQVE9fQUVBRDIpICs9IGFlYWQubwogCi1jcnlwdG9fYmxrY2lwaGVyLW9ianMgOj0gYWJsa2NpcGhlci5vCi1jcnlwdG9fYmxrY2lwaGVyLW9ianMgKz0gYmxrY2lwaGVyLm8KK2NyeXB0b19ibGtjaXBoZXIteSA6PSBhYmxrY2lwaGVyLm8KK2NyeXB0b19ibGtjaXBoZXIteSArPSBibGtjaXBoZXIubwogb2JqLSQoQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyKSArPSBjcnlwdG9fYmxrY2lwaGVyLm8KIG9iai0kKENPTkZJR19DUllQVE9fQkxLQ0lQSEVSMikgKz0gY2hhaW5pdi5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjIpICs9IGVzZXFpdi5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1NFUUlWKSArPSBzZXFpdi5vCiAKLWNyeXB0b19oYXNoLW9ianMgKz0gYWhhc2gubwotY3J5cHRvX2hhc2gtb2JqcyArPSBzaGFzaC5vCitjcnlwdG9faGFzaC15ICs9IGFoYXNoLm8KK2NyeXB0b19oYXNoLXkgKz0gc2hhc2gubwogb2JqLSQoQ09ORklHX0NSWVBUT19IQVNIMikgKz0gY3J5cHRvX2hhc2gubwogCiBvYmotJChDT05GSUdfQ1JZUFRPX1BDT01QMikgKz0gcGNvbXByZXNzLm8KIAotY3J5cHRvbWdyLW9ianMgOj0gYWxnYm9zcy5vIHRlc3RtZ3IubworY3J5cHRvbWdyLXkgOj0gYWxnYm9zcy5vIHRlc3RtZ3IubwogCiBvYmotJChDT05GSUdfQ1JZUFRPX01BTkFHRVIyKSArPSBjcnlwdG9tZ3Iubwogb2JqLSQoQ09ORklHX0NSWVBUT19ITUFDKSArPSBobWFjLm8KQEAgLTg1LDYgKzg1LDkgQEAKIG9iai0kKENPTkZJR19DUllQVE9fQU5TSV9DUFJORykgKz0gYW5zaV9jcHJuZy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1RFU1QpICs9IHRjcnlwdC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0dIQVNIKSArPSBnaGFzaC1nZW5lcmljLm8KK29iai0kKENPTkZJR19DUllQVE9fVVNFUl9BUEkpICs9IGFmX2FsZy5vCitvYmotJChDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX0hBU0gpICs9IGFsZ2lmX2hhc2gubworb2JqLSQoQ09ORklHX0NSWVBUT19VU0VSX0FQSV9TS0NJUEhFUikgKz0gYWxnaWZfc2tjaXBoZXIubwogCiAjCiAjIGdlbmVyaWMgYWxnb3JpdGhtcyBhbmQgdGhlIGFzeW5jX3R4IGFwaQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FmX2FsZy5jIGIvY3J5cHRvL2FmX2FsZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MGQ3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYWZfYWxnLmMKQEAgLTAsMCArMSw0ODMgQEAKKy8qCisgKiBhZl9hbGc6IFVzZXItc3BhY2UgYWxnb3JpdGhtIGludGVyZmFjZQorICoKKyAqIFRoaXMgZmlsZSBwcm92aWRlcyB0aGUgdXNlci1zcGFjZSBBUEkgZm9yIGFsZ29yaXRobXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGNyeXB0by9pZl9hbGcuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisKK3N0cnVjdCBhbGdfdHlwZV9saXN0IHsKKwljb25zdCBzdHJ1Y3QgYWZfYWxnX3R5cGUgKnR5cGU7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RhdGljIGF0b21pY19sb25nX3QgYWxnX21lbW9yeV9hbGxvY2F0ZWQ7CisKK3N0YXRpYyBzdHJ1Y3QgcHJvdG8gYWxnX3Byb3RvID0geworCS5uYW1lCQkJPSAiQUxHIiwKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5tZW1vcnlfYWxsb2NhdGVkCT0gJmFsZ19tZW1vcnlfYWxsb2NhdGVkLAorCS5vYmpfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IGFsZ19zb2NrKSwKK307CisKK3N0YXRpYyBMSVNUX0hFQUQoYWxnX3R5cGVzKTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKGFsZ190eXBlc19zZW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmX2FsZ190eXBlICphbGdfZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgYWZfYWxnX3R5cGUgKnR5cGUgPSBFUlJfUFRSKC1FTk9FTlQpOworCXN0cnVjdCBhbGdfdHlwZV9saXN0ICpub2RlOworCisJZG93bl9yZWFkKCZhbGdfdHlwZXNfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhbGdfdHlwZXMsIGxpc3QpIHsKKwkJaWYgKHN0cmNtcChub2RlLT50eXBlLT5uYW1lLCBuYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0cnlfbW9kdWxlX2dldChub2RlLT50eXBlLT5vd25lcikpCisJCQl0eXBlID0gbm9kZS0+dHlwZTsKKwkJYnJlYWs7CisJfQorCXVwX3JlYWQoJmFsZ190eXBlc19zZW0pOworCisJcmV0dXJuIHR5cGU7Cit9CisKK2ludCBhZl9hbGdfcmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYWZfYWxnX3R5cGUgKnR5cGUpCit7CisJc3RydWN0IGFsZ190eXBlX2xpc3QgKm5vZGU7CisJaW50IGVyciA9IC1FRVhJU1Q7CisKKwlkb3duX3dyaXRlKCZhbGdfdHlwZXNfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhbGdfdHlwZXMsIGxpc3QpIHsKKwkJaWYgKCFzdHJjbXAobm9kZS0+dHlwZS0+bmFtZSwgdHlwZS0+bmFtZSkpCisJCQlnb3RvIHVubG9jazsKKwl9CisKKwlub2RlID0ga21hbGxvYyhzaXplb2YoKm5vZGUpLCBHRlBfS0VSTkVMKTsKKwllcnIgPSAtRU5PTUVNOworCWlmICghbm9kZSkKKwkJZ290byB1bmxvY2s7CisKKwl0eXBlLT5vcHMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJbm9kZS0+dHlwZSA9IHR5cGU7CisJbGlzdF9hZGQoJm5vZGUtPmxpc3QsICZhbGdfdHlwZXMpOworCWVyciA9IDA7CisKK3VubG9jazoKKwl1cF93cml0ZSgmYWxnX3R5cGVzX3NlbSk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWZfYWxnX3JlZ2lzdGVyX3R5cGUpOworCitpbnQgYWZfYWxnX3VucmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYWZfYWxnX3R5cGUgKnR5cGUpCit7CisJc3RydWN0IGFsZ190eXBlX2xpc3QgKm5vZGU7CisJaW50IGVyciA9IC1FTk9FTlQ7CisKKwlkb3duX3dyaXRlKCZhbGdfdHlwZXNfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhbGdfdHlwZXMsIGxpc3QpIHsKKwkJaWYgKHN0cmNtcChub2RlLT50eXBlLT5uYW1lLCB0eXBlLT5uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWxpc3RfZGVsKCZub2RlLT5saXN0KTsKKwkJa2ZyZWUobm9kZSk7CisJCWVyciA9IDA7CisJCWJyZWFrOworCX0KKwl1cF93cml0ZSgmYWxnX3R5cGVzX3NlbSk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWZfYWxnX3VucmVnaXN0ZXJfdHlwZSk7CisKK3N0YXRpYyB2b2lkIGFsZ19kb19yZWxlYXNlKGNvbnN0IHN0cnVjdCBhZl9hbGdfdHlwZSAqdHlwZSwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlpZiAoIXR5cGUpCisJCXJldHVybjsKKworCXR5cGUtPnJlbGVhc2UocHJpdmF0ZSk7CisJbW9kdWxlX3B1dCh0eXBlLT5vd25lcik7Cit9CisKK2ludCBhZl9hbGdfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQoreworCWlmIChzb2NrLT5zaykKKwkJc29ja19wdXQoc29jay0+c2spOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWZfYWxnX3JlbGVhc2UpOworCitzdGF0aWMgaW50IGFsZ19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgYWxnX3NvY2sgKmFzayA9IGFsZ19zayhzayk7CisJc3RydWN0IHNvY2thZGRyX2FsZyAqc2EgPSAodm9pZCAqKXVhZGRyOworCWNvbnN0IHN0cnVjdCBhZl9hbGdfdHlwZSAqdHlwZTsKKwl2b2lkICpwcml2YXRlOworCisJaWYgKHNvY2stPnN0YXRlID09IFNTX0NPTk5FQ1RFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYWRkcl9sZW4gIT0gc2l6ZW9mKCpzYSkpCisJCXJldHVybiAtRUlOVkFMOworCisJc2EtPnNhbGdfdHlwZVtzaXplb2Yoc2EtPnNhbGdfdHlwZSkgLSAxXSA9IDA7CisJc2EtPnNhbGdfbmFtZVtzaXplb2Yoc2EtPnNhbGdfbmFtZSkgLSAxXSA9IDA7CisKKwl0eXBlID0gYWxnX2dldF90eXBlKHNhLT5zYWxnX3R5cGUpOworCWlmIChJU19FUlIodHlwZSkgJiYgUFRSX0VSUih0eXBlKSA9PSAtRU5PRU5UKSB7CisJCXJlcXVlc3RfbW9kdWxlKCJhbGdpZi0lcyIsIHNhLT5zYWxnX3R5cGUpOworCQl0eXBlID0gYWxnX2dldF90eXBlKHNhLT5zYWxnX3R5cGUpOworCX0KKworCWlmIChJU19FUlIodHlwZSkpCisJCXJldHVybiBQVFJfRVJSKHR5cGUpOworCisJcHJpdmF0ZSA9IHR5cGUtPmJpbmQoc2EtPnNhbGdfbmFtZSwgc2EtPnNhbGdfZmVhdCwgc2EtPnNhbGdfbWFzayk7CisJaWYgKElTX0VSUihwcml2YXRlKSkgeworCQltb2R1bGVfcHV0KHR5cGUtPm93bmVyKTsKKwkJcmV0dXJuIFBUUl9FUlIocHJpdmF0ZSk7CisJfQorCisJbG9ja19zb2NrKHNrKTsKKworCXN3YXAoYXNrLT50eXBlLCB0eXBlKTsKKwlzd2FwKGFzay0+cHJpdmF0ZSwgcHJpdmF0ZSk7CisKKwlyZWxlYXNlX3NvY2soc2spOworCisJYWxnX2RvX3JlbGVhc2UodHlwZSwgcHJpdmF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbGdfc2V0a2V5KHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKnVrZXksCisJCSAgICAgIHVuc2lnbmVkIGludCBrZXlsZW4pCit7CisJc3RydWN0IGFsZ19zb2NrICphc2sgPSBhbGdfc2soc2spOworCWNvbnN0IHN0cnVjdCBhZl9hbGdfdHlwZSAqdHlwZSA9IGFzay0+dHlwZTsKKwl1OCAqa2V5OworCWludCBlcnI7CisKKwlrZXkgPSBzb2NrX2ttYWxsb2Moc2ssIGtleWxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrZXkpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyID0gLUVGQVVMVDsKKwlpZiAoY29weV9mcm9tX3VzZXIoa2V5LCB1a2V5LCBrZXlsZW4pKQorCQlnb3RvIG91dDsKKworCWVyciA9IHR5cGUtPnNldGtleShhc2stPnByaXZhdGUsIGtleSwga2V5bGVuKTsKKworb3V0OgorCXNvY2tfa2ZyZWVfcyhzaywga2V5LCBrZXlsZW4pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhbGdfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBhbGdfc29jayAqYXNrID0gYWxnX3NrKHNrKTsKKwljb25zdCBzdHJ1Y3QgYWZfYWxnX3R5cGUgKnR5cGU7CisJaW50IGVyciA9IC1FTk9QUk9UT09QVDsKKworCWxvY2tfc29jayhzayk7CisJdHlwZSA9IGFzay0+dHlwZTsKKworCWlmIChsZXZlbCAhPSBTT0xfQUxHIHx8ICF0eXBlKQorCQlnb3RvIHVubG9jazsKKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgQUxHX1NFVF9LRVk6CisJCWlmIChzb2NrLT5zdGF0ZSA9PSBTU19DT05ORUNURUQpCisJCQlnb3RvIHVubG9jazsKKwkJaWYgKCF0eXBlLT5zZXRrZXkpCisJCQlnb3RvIHVubG9jazsKKworCQllcnIgPSBhbGdfc2V0a2V5KHNrLCBvcHR2YWwsIG9wdGxlbik7CisJfQorCit1bmxvY2s6CisJcmVsZWFzZV9zb2NrKHNrKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBhZl9hbGdfYWNjZXB0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2tldCAqbmV3c29jaykKK3sKKwlzdHJ1Y3QgYWxnX3NvY2sgKmFzayA9IGFsZ19zayhzayk7CisJY29uc3Qgc3RydWN0IGFmX2FsZ190eXBlICp0eXBlOworCXN0cnVjdCBzb2NrICpzazI7CisJaW50IGVycjsKKworCWxvY2tfc29jayhzayk7CisJdHlwZSA9IGFzay0+dHlwZTsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKCF0eXBlKQorCQlnb3RvIHVubG9jazsKKworCXNrMiA9IHNrX2FsbG9jKHNvY2tfbmV0KHNrKSwgUEZfQUxHLCBHRlBfS0VSTkVMLCAmYWxnX3Byb3RvKTsKKwllcnIgPSAtRU5PTUVNOworCWlmICghc2syKQorCQlnb3RvIHVubG9jazsKKworCXNvY2tfaW5pdF9kYXRhKG5ld3NvY2ssIHNrMik7CisJc29ja19ncmFmdChzazIsIG5ld3NvY2spOworCisJZXJyID0gdHlwZS0+YWNjZXB0KGFzay0+cHJpdmF0ZSwgc2syKTsKKwlpZiAoZXJyKSB7CisJCXNrX2ZyZWUoc2syKTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJc2syLT5za19mYW1pbHkgPSBQRl9BTEc7CisKKwlzb2NrX2hvbGQoc2spOworCWFsZ19zayhzazIpLT5wYXJlbnQgPSBzazsKKwlhbGdfc2soc2syKS0+dHlwZSA9IHR5cGU7CisKKwluZXdzb2NrLT5vcHMgPSB0eXBlLT5vcHM7CisJbmV3c29jay0+c3RhdGUgPSBTU19DT05ORUNURUQ7CisKKwllcnIgPSAwOworCit1bmxvY2s6CisJcmVsZWFzZV9zb2NrKHNrKTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhZl9hbGdfYWNjZXB0KTsKKworc3RhdGljIGludCBhbGdfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssIGludCBmbGFncykKK3sKKwlyZXR1cm4gYWZfYWxnX2FjY2VwdChzb2NrLT5zaywgbmV3c29jayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGFsZ19wcm90b19vcHMgPSB7CisJLmZhbWlseQkJPQlQRl9BTEcsCisJLm93bmVyCQk9CVRISVNfTU9EVUxFLAorCisJLmNvbm5lY3QJPQlzb2NrX25vX2Nvbm5lY3QsCisJLnNvY2tldHBhaXIJPQlzb2NrX25vX3NvY2tldHBhaXIsCisJLmdldG5hbWUJPQlzb2NrX25vX2dldG5hbWUsCisJLmlvY3RsCQk9CXNvY2tfbm9faW9jdGwsCisJLmxpc3RlbgkJPQlzb2NrX25vX2xpc3RlbiwKKwkuc2h1dGRvd24JPQlzb2NrX25vX3NodXRkb3duLAorCS5nZXRzb2Nrb3B0CT0Jc29ja19ub19nZXRzb2Nrb3B0LAorCS5tbWFwCQk9CXNvY2tfbm9fbW1hcCwKKwkuc2VuZHBhZ2UJPQlzb2NrX25vX3NlbmRwYWdlLAorCS5zZW5kbXNnCT0Jc29ja19ub19zZW5kbXNnLAorCS5yZWN2bXNnCT0Jc29ja19ub19yZWN2bXNnLAorCS5wb2xsCQk9CXNvY2tfbm9fcG9sbCwKKworCS5iaW5kCQk9CWFsZ19iaW5kLAorCS5yZWxlYXNlCT0JYWZfYWxnX3JlbGVhc2UsCisJLnNldHNvY2tvcHQJPQlhbGdfc2V0c29ja29wdCwKKwkuYWNjZXB0CQk9CWFsZ19hY2NlcHQsCit9OworCitzdGF0aWMgdm9pZCBhbGdfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IGFsZ19zb2NrICphc2sgPSBhbGdfc2soc2spOworCisJYWxnX2RvX3JlbGVhc2UoYXNrLT50eXBlLCBhc2stPnByaXZhdGUpOworfQorCitzdGF0aWMgaW50IGFsZ19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCisJCSAgICAgIGludCBrZXJuKQoreworCXN0cnVjdCBzb2NrICpzazsKKwlpbnQgZXJyOworCisJaWYgKHNvY2stPnR5cGUgIT0gU09DS19TRVFQQUNLRVQpCisJCXJldHVybiAtRVNPQ0tUTk9TVVBQT1JUOworCWlmIChwcm90b2NvbCAhPSAwKQorCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKKworCWVyciA9IC1FTk9NRU07CisJc2sgPSBza19hbGxvYyhuZXQsIFBGX0FMRywgR0ZQX0tFUk5FTCwgJmFsZ19wcm90byk7CisJaWYgKCFzaykKKwkJZ290byBvdXQ7CisKKwlzb2NrLT5vcHMgPSAmYWxnX3Byb3RvX29wczsKKwlzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7CisKKwlzay0+c2tfZmFtaWx5ID0gUEZfQUxHOworCXNrLT5za19kZXN0cnVjdCA9IGFsZ19zb2NrX2Rlc3RydWN0OworCisJcmV0dXJuIDA7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGFsZ19mYW1pbHkgPSB7CisJLmZhbWlseQk9CVBGX0FMRywKKwkuY3JlYXRlCT0JYWxnX2NyZWF0ZSwKKwkub3duZXIJPQlUSElTX01PRFVMRSwKK307CisKK2ludCBhZl9hbGdfbWFrZV9zZyhzdHJ1Y3QgYWZfYWxnX3NnbCAqc2dsLCB2b2lkIF9fdXNlciAqYWRkciwgaW50IGxlbiwKKwkJICAgaW50IHdyaXRlKQoreworCXVuc2lnbmVkIGxvbmcgZnJvbSA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CisJdW5zaWduZWQgbG9uZyBucGFnZXM7CisJdW5zaWduZWQgb2ZmOworCWludCBlcnI7CisJaW50IGk7CisKKwllcnIgPSAtRUZBVUxUOworCWlmICghYWNjZXNzX29rKHdyaXRlID8gVkVSSUZZX1JFQUQgOiBWRVJJRllfV1JJVEUsIGFkZHIsIGxlbikpCisJCWdvdG8gb3V0OworCisJb2ZmID0gZnJvbSAmIH5QQUdFX01BU0s7CisJbnBhZ2VzID0gKG9mZiArIGxlbiArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CisJaWYgKG5wYWdlcyA+IEFMR19NQVhfUEFHRVMpCisJCW5wYWdlcyA9IEFMR19NQVhfUEFHRVM7CisKKwllcnIgPSBnZXRfdXNlcl9wYWdlc19mYXN0KGZyb20sIG5wYWdlcywgd3JpdGUsIHNnbC0+cGFnZXMpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCW5wYWdlcyA9IGVycjsKKwllcnIgPSAtRUlOVkFMOworCWlmIChXQVJOX09OKG5wYWdlcyA9PSAwKSkKKwkJZ290byBvdXQ7CisKKwllcnIgPSAwOworCisJc2dfaW5pdF90YWJsZShzZ2wtPnNnLCBucGFnZXMpOworCisJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CisJCWludCBwbGVuID0gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZik7CisKKwkJc2dfc2V0X3BhZ2Uoc2dsLT5zZyArIGksIHNnbC0+cGFnZXNbaV0sIHBsZW4sIG9mZik7CisKKwkJb2ZmID0gMDsKKwkJbGVuIC09IHBsZW47CisJCWVyciArPSBwbGVuOworCX0KKworb3V0OgorCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhZl9hbGdfbWFrZV9zZyk7CisKK3ZvaWQgYWZfYWxnX2ZyZWVfc2coc3RydWN0IGFmX2FsZ19zZ2wgKnNnbCkKK3sKKwlpbnQgaTsKKworCWkgPSAwOworCWRvIHsKKwkJcHV0X3BhZ2Uoc2dsLT5wYWdlc1tpXSk7CisJfSB3aGlsZSAoIXNnX2lzX2xhc3Qoc2dsLT5zZyArIChpKyspKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhZl9hbGdfZnJlZV9zZyk7CisKK2ludCBhZl9hbGdfY21zZ19zZW5kKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IGFmX2FsZ19jb250cm9sICpjb24pCit7CisJc3RydWN0IGNtc2doZHIgKmNtc2c7CisKKwlmb3IgKGNtc2cgPSBDTVNHX0ZJUlNUSERSKG1zZyk7IGNtc2c7IGNtc2cgPSBDTVNHX05YVEhEUihtc2csIGNtc2cpKSB7CisJCWlmICghQ01TR19PSyhtc2csIGNtc2cpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChjbXNnLT5jbXNnX2xldmVsICE9IFNPTF9BTEcpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2goY21zZy0+Y21zZ190eXBlKSB7CisJCWNhc2UgQUxHX1NFVF9JVjoKKwkJCWlmIChjbXNnLT5jbXNnX2xlbiA8IENNU0dfTEVOKHNpemVvZigqY29uLT5pdikpKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJY29uLT5pdiA9ICh2b2lkICopQ01TR19EQVRBKGNtc2cpOworCQkJaWYgKGNtc2ctPmNtc2dfbGVuIDwgQ01TR19MRU4oY29uLT5pdi0+aXZsZW4gKworCQkJCQkJICAgICAgc2l6ZW9mKCpjb24tPml2KSkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKworCQljYXNlIEFMR19TRVRfT1A6CisJCQlpZiAoY21zZy0+Y21zZ19sZW4gPCBDTVNHX0xFTihzaXplb2YodTMyKSkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQljb24tPm9wID0gKih1MzIgKilDTVNHX0RBVEEoY21zZyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFmX2FsZ19jbXNnX3NlbmQpOworCitpbnQgYWZfYWxnX3dhaXRfZm9yX2NvbXBsZXRpb24oaW50IGVyciwgc3RydWN0IGFmX2FsZ19jb21wbGV0aW9uICpjb21wbGV0aW9uKQoreworCXN3aXRjaCAoZXJyKSB7CisJY2FzZSAtRUlOUFJPR1JFU1M6CisJY2FzZSAtRUJVU1k6CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNvbXBsZXRpb24tPmNvbXBsZXRpb24pOworCQlJTklUX0NPTVBMRVRJT04oY29tcGxldGlvbi0+Y29tcGxldGlvbik7CisJCWVyciA9IGNvbXBsZXRpb24tPmVycjsKKwkJYnJlYWs7CisJfTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhZl9hbGdfd2FpdF9mb3JfY29tcGxldGlvbik7CisKK3ZvaWQgYWZfYWxnX2NvbXBsZXRlKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQoreworCXN0cnVjdCBhZl9hbGdfY29tcGxldGlvbiAqY29tcGxldGlvbiA9IHJlcS0+ZGF0YTsKKworCWNvbXBsZXRpb24tPmVyciA9IGVycjsKKwljb21wbGV0ZSgmY29tcGxldGlvbi0+Y29tcGxldGlvbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhZl9hbGdfY29tcGxldGUpOworCitzdGF0aWMgaW50IF9faW5pdCBhZl9hbGdfaW5pdCh2b2lkKQoreworCWludCBlcnIgPSBwcm90b19yZWdpc3RlcigmYWxnX3Byb3RvLCAwKTsKKworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gc29ja19yZWdpc3RlcigmYWxnX2ZhbWlseSk7CisJaWYgKGVyciAhPSAwKQorCQlnb3RvIG91dF91bnJlZ2lzdGVyX3Byb3RvOworCitvdXQ6CisJcmV0dXJuIGVycjsKKworb3V0X3VucmVnaXN0ZXJfcHJvdG86CisJcHJvdG9fdW5yZWdpc3RlcigmYWxnX3Byb3RvKTsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFmX2FsZ19leGl0KHZvaWQpCit7CisJc29ja191bnJlZ2lzdGVyKFBGX0FMRyk7CisJcHJvdG9fdW5yZWdpc3RlcigmYWxnX3Byb3RvKTsKK30KKworbW9kdWxlX2luaXQoYWZfYWxnX2luaXQpOworbW9kdWxlX2V4aXQoYWZfYWxnX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTX05FVFBST1RPKEFGX0FMRyk7CmRpZmYgLS1naXQgYS9jcnlwdG8vYWxnaWZfaGFzaC5jIGIvY3J5cHRvL2FsZ2lmX2hhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjEyMmExCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2FsZ2lmX2hhc2guYwpAQCAtMCwwICsxLDMxOSBAQAorLyoKKyAqIGFsZ2lmX2hhc2g6IFVzZXItc3BhY2UgaW50ZXJmYWNlIGZvciBoYXNoIGFsZ29yaXRobXMKKyAqCisgKiBUaGlzIGZpbGUgcHJvdmlkZXMgdGhlIHVzZXItc3BhY2UgQVBJIGZvciBoYXNoIGFsZ29yaXRobXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8Y3J5cHRvL2hhc2guaD4KKyNpbmNsdWRlIDxjcnlwdG8vaWZfYWxnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKworc3RydWN0IGhhc2hfY3R4IHsKKwlzdHJ1Y3QgYWZfYWxnX3NnbCBzZ2w7CisKKwl1OCAqcmVzdWx0OworCisJc3RydWN0IGFmX2FsZ19jb21wbGV0aW9uIGNvbXBsZXRpb247CisKKwl1bnNpZ25lZCBpbnQgbGVuOworCWJvb2wgbW9yZTsKKworCXN0cnVjdCBhaGFzaF9yZXF1ZXN0IHJlcTsKK307CisKK3N0YXRpYyBpbnQgaGFzaF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqdW51c2VkLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgaWdub3JlZCkKK3sKKwlpbnQgbGltaXQgPSBBTEdfTUFYX1BBR0VTICogUEFHRV9TSVpFOworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBhbGdfc29jayAqYXNrID0gYWxnX3NrKHNrKTsKKwlzdHJ1Y3QgaGFzaF9jdHggKmN0eCA9IGFzay0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGlvdmxlbjsKKwlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwlsb25nIGNvcGllZCA9IDA7CisJaW50IGVycjsKKworCWlmIChsaW1pdCA+IHNrLT5za19zbmRidWYpCisJCWxpbWl0ID0gc2stPnNrX3NuZGJ1ZjsKKworCWxvY2tfc29jayhzayk7CisJaWYgKCFjdHgtPm1vcmUpIHsKKwkJZXJyID0gY3J5cHRvX2FoYXNoX2luaXQoJmN0eC0+cmVxKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gdW5sb2NrOworCX0KKworCWN0eC0+bW9yZSA9IDA7CisKKwlmb3IgKGlvdiA9IG1zZy0+bXNnX2lvdiwgaW92bGVuID0gbXNnLT5tc2dfaW92bGVuOyBpb3ZsZW4gPiAwOworCSAgICAgaW92bGVuLS0sIGlvdisrKSB7CisJCXVuc2lnbmVkIGxvbmcgc2VnbGVuID0gaW92LT5pb3ZfbGVuOworCQljaGFyIF9fdXNlciAqZnJvbSA9IGlvdi0+aW92X2Jhc2U7CisKKwkJd2hpbGUgKHNlZ2xlbikgeworCQkJaW50IGxlbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHNlZ2xlbiwgbGltaXQpOworCQkJaW50IG5ld2xlbjsKKworCQkJbmV3bGVuID0gYWZfYWxnX21ha2Vfc2coJmN0eC0+c2dsLCBmcm9tLCBsZW4sIDApOworCQkJaWYgKG5ld2xlbiA8IDApCisJCQkJZ290byB1bmxvY2s7CisKKwkJCWFoYXNoX3JlcXVlc3Rfc2V0X2NyeXB0KCZjdHgtPnJlcSwgY3R4LT5zZ2wuc2csIE5VTEwsCisJCQkJCQluZXdsZW4pOworCisJCQllcnIgPSBhZl9hbGdfd2FpdF9mb3JfY29tcGxldGlvbigKKwkJCQljcnlwdG9fYWhhc2hfdXBkYXRlKCZjdHgtPnJlcSksCisJCQkJJmN0eC0+Y29tcGxldGlvbik7CisKKwkJCWFmX2FsZ19mcmVlX3NnKCZjdHgtPnNnbCk7CisKKwkJCWlmIChlcnIpCisJCQkJZ290byB1bmxvY2s7CisKKwkJCXNlZ2xlbiAtPSBuZXdsZW47CisJCQlmcm9tICs9IG5ld2xlbjsKKwkJCWNvcGllZCArPSBuZXdsZW47CisJCX0KKwl9CisKKwllcnIgPSAwOworCisJY3R4LT5tb3JlID0gbXNnLT5tc2dfZmxhZ3MgJiBNU0dfTU9SRTsKKwlpZiAoIWN0eC0+bW9yZSkgeworCQlhaGFzaF9yZXF1ZXN0X3NldF9jcnlwdCgmY3R4LT5yZXEsIE5VTEwsIGN0eC0+cmVzdWx0LCAwKTsKKwkJZXJyID0gYWZfYWxnX3dhaXRfZm9yX2NvbXBsZXRpb24oY3J5cHRvX2FoYXNoX2ZpbmFsKCZjdHgtPnJlcSksCisJCQkJCQkgJmN0eC0+Y29tcGxldGlvbik7CisJfQorCit1bmxvY2s6CisJcmVsZWFzZV9zb2NrKHNrKTsKKworCXJldHVybiBlcnIgPzogY29waWVkOworfQorCitzdGF0aWMgc3NpemVfdCBoYXNoX3NlbmRwYWdlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgICBpbnQgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBhbGdfc29jayAqYXNrID0gYWxnX3NrKHNrKTsKKwlzdHJ1Y3QgaGFzaF9jdHggKmN0eCA9IGFzay0+cHJpdmF0ZTsKKwlpbnQgZXJyOworCisJbG9ja19zb2NrKHNrKTsKKwlzZ19pbml0X3RhYmxlKGN0eC0+c2dsLnNnLCAxKTsKKwlzZ19zZXRfcGFnZShjdHgtPnNnbC5zZywgcGFnZSwgc2l6ZSwgb2Zmc2V0KTsKKworCWFoYXNoX3JlcXVlc3Rfc2V0X2NyeXB0KCZjdHgtPnJlcSwgY3R4LT5zZ2wuc2csIGN0eC0+cmVzdWx0LCBzaXplKTsKKworCWlmICghKGZsYWdzICYgTVNHX01PUkUpKSB7CisJCWlmIChjdHgtPm1vcmUpCisJCQllcnIgPSBjcnlwdG9fYWhhc2hfZmludXAoJmN0eC0+cmVxKTsKKwkJZWxzZQorCQkJZXJyID0gY3J5cHRvX2FoYXNoX2RpZ2VzdCgmY3R4LT5yZXEpOworCX0gZWxzZSB7CisJCWlmICghY3R4LT5tb3JlKSB7CisJCQllcnIgPSBjcnlwdG9fYWhhc2hfaW5pdCgmY3R4LT5yZXEpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIHVubG9jazsKKwkJfQorCisJCWVyciA9IGNyeXB0b19haGFzaF91cGRhdGUoJmN0eC0+cmVxKTsKKwl9CisKKwllcnIgPSBhZl9hbGdfd2FpdF9mb3JfY29tcGxldGlvbihlcnIsICZjdHgtPmNvbXBsZXRpb24pOworCWlmIChlcnIpCisJCWdvdG8gdW5sb2NrOworCisJY3R4LT5tb3JlID0gZmxhZ3MgJiBNU0dfTU9SRTsKKwordW5sb2NrOgorCXJlbGVhc2Vfc29jayhzayk7CisKKwlyZXR1cm4gZXJyID86IHNpemU7Cit9CisKK3N0YXRpYyBpbnQgaGFzaF9yZWN2bXNnKHN0cnVjdCBraW9jYiAqdW51c2VkLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGFsZ19zb2NrICphc2sgPSBhbGdfc2soc2spOworCXN0cnVjdCBoYXNoX2N0eCAqY3R4ID0gYXNrLT5wcml2YXRlOworCXVuc2lnbmVkIGRzID0gY3J5cHRvX2FoYXNoX2RpZ2VzdHNpemUoY3J5cHRvX2FoYXNoX3JlcXRmbSgmY3R4LT5yZXEpKTsKKwlpbnQgZXJyOworCisJaWYgKGxlbiA+IGRzKQorCQlsZW4gPSBkczsKKwllbHNlIGlmIChsZW4gPCBkcykKKwkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOworCisJbG9ja19zb2NrKHNrKTsKKwlpZiAoY3R4LT5tb3JlKSB7CisJCWN0eC0+bW9yZSA9IDA7CisJCWFoYXNoX3JlcXVlc3Rfc2V0X2NyeXB0KCZjdHgtPnJlcSwgTlVMTCwgY3R4LT5yZXN1bHQsIDApOworCQllcnIgPSBhZl9hbGdfd2FpdF9mb3JfY29tcGxldGlvbihjcnlwdG9fYWhhc2hfZmluYWwoJmN0eC0+cmVxKSwKKwkJCQkJCSAmY3R4LT5jb21wbGV0aW9uKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gdW5sb2NrOworCX0KKworCWVyciA9IG1lbWNweV90b2lvdmVjKG1zZy0+bXNnX2lvdiwgY3R4LT5yZXN1bHQsIGxlbik7CisKK3VubG9jazoKKwlyZWxlYXNlX3NvY2soc2spOworCisJcmV0dXJuIGVyciA/OiBsZW47Cit9CisKK3N0YXRpYyBpbnQgaGFzaF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywgaW50IGZsYWdzKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBhbGdfc29jayAqYXNrID0gYWxnX3NrKHNrKTsKKwlzdHJ1Y3QgaGFzaF9jdHggKmN0eCA9IGFzay0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxID0gJmN0eC0+cmVxOworCWNoYXIgc3RhdGVbY3J5cHRvX2FoYXNoX3N0YXRlc2l6ZShjcnlwdG9fYWhhc2hfcmVxdGZtKHJlcSkpXTsKKwlzdHJ1Y3Qgc29jayAqc2syOworCXN0cnVjdCBhbGdfc29jayAqYXNrMjsKKwlzdHJ1Y3QgaGFzaF9jdHggKmN0eDI7CisJaW50IGVycjsKKworCWVyciA9IGNyeXB0b19haGFzaF9leHBvcnQocmVxLCBzdGF0ZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGFmX2FsZ19hY2NlcHQoYXNrLT5wYXJlbnQsIG5ld3NvY2spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzazIgPSBuZXdzb2NrLT5zazsKKwlhc2syID0gYWxnX3NrKHNrMik7CisJY3R4MiA9IGFzazItPnByaXZhdGU7CisJY3R4Mi0+bW9yZSA9IDE7CisKKwllcnIgPSBjcnlwdG9fYWhhc2hfaW1wb3J0KCZjdHgyLT5yZXEsIHN0YXRlKTsKKwlpZiAoZXJyKSB7CisJCXNvY2tfb3JwaGFuKHNrMik7CisJCXNvY2tfcHV0KHNrMik7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBwcm90b19vcHMgYWxnaWZfaGFzaF9vcHMgPSB7CisJLmZhbWlseQkJPQlQRl9BTEcsCisKKwkuY29ubmVjdAk9CXNvY2tfbm9fY29ubmVjdCwKKwkuc29ja2V0cGFpcgk9CXNvY2tfbm9fc29ja2V0cGFpciwKKwkuZ2V0bmFtZQk9CXNvY2tfbm9fZ2V0bmFtZSwKKwkuaW9jdGwJCT0Jc29ja19ub19pb2N0bCwKKwkubGlzdGVuCQk9CXNvY2tfbm9fbGlzdGVuLAorCS5zaHV0ZG93bgk9CXNvY2tfbm9fc2h1dGRvd24sCisJLmdldHNvY2tvcHQJPQlzb2NrX25vX2dldHNvY2tvcHQsCisJLm1tYXAJCT0Jc29ja19ub19tbWFwLAorCS5iaW5kCQk9CXNvY2tfbm9fYmluZCwKKwkuc2V0c29ja29wdAk9CXNvY2tfbm9fc2V0c29ja29wdCwKKwkucG9sbAkJPQlzb2NrX25vX3BvbGwsCisKKwkucmVsZWFzZQk9CWFmX2FsZ19yZWxlYXNlLAorCS5zZW5kbXNnCT0JaGFzaF9zZW5kbXNnLAorCS5zZW5kcGFnZQk9CWhhc2hfc2VuZHBhZ2UsCisJLnJlY3Ztc2cJPQloYXNoX3JlY3Ztc2csCisJLmFjY2VwdAkJPQloYXNoX2FjY2VwdCwKK307CisKK3N0YXRpYyB2b2lkICpoYXNoX2JpbmQoY29uc3QgY2hhciAqbmFtZSwgdTMyIHR5cGUsIHUzMiBtYXNrKQoreworCXJldHVybiBjcnlwdG9fYWxsb2NfYWhhc2gobmFtZSwgdHlwZSwgbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGhhc2hfcmVsZWFzZSh2b2lkICpwcml2YXRlKQoreworCWNyeXB0b19mcmVlX2FoYXNoKHByaXZhdGUpOworfQorCitzdGF0aWMgaW50IGhhc2hfc2V0a2V5KHZvaWQgKnByaXZhdGUsIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCit7CisJcmV0dXJuIGNyeXB0b19haGFzaF9zZXRrZXkocHJpdmF0ZSwga2V5LCBrZXlsZW4pOworfQorCitzdGF0aWMgdm9pZCBoYXNoX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBhbGdfc29jayAqYXNrID0gYWxnX3NrKHNrKTsKKwlzdHJ1Y3QgaGFzaF9jdHggKmN0eCA9IGFzay0+cHJpdmF0ZTsKKworCXNvY2tfa2ZyZWVfcyhzaywgY3R4LT5yZXN1bHQsCisJCSAgICAgY3J5cHRvX2FoYXNoX2RpZ2VzdHNpemUoY3J5cHRvX2FoYXNoX3JlcXRmbSgmY3R4LT5yZXEpKSk7CisJc29ja19rZnJlZV9zKHNrLCBjdHgsIGN0eC0+bGVuKTsKKwlhZl9hbGdfcmVsZWFzZV9wYXJlbnQoc2spOworfQorCitzdGF0aWMgaW50IGhhc2hfYWNjZXB0X3BhcmVudCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IGhhc2hfY3R4ICpjdHg7CisJc3RydWN0IGFsZ19zb2NrICphc2sgPSBhbGdfc2soc2spOworCXVuc2lnbmVkIGxlbiA9IHNpemVvZigqY3R4KSArIGNyeXB0b19haGFzaF9yZXFzaXplKHByaXZhdGUpOworCXVuc2lnbmVkIGRzID0gY3J5cHRvX2FoYXNoX2RpZ2VzdHNpemUocHJpdmF0ZSk7CisKKwljdHggPSBzb2NrX2ttYWxsb2Moc2ssIGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgpCisJCXJldHVybiAtRU5PTUVNOworCisJY3R4LT5yZXN1bHQgPSBzb2NrX2ttYWxsb2Moc2ssIGRzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eC0+cmVzdWx0KSB7CisJCXNvY2tfa2ZyZWVfcyhzaywgY3R4LCBsZW4pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoY3R4LT5yZXN1bHQsIDAsIGRzKTsKKworCWN0eC0+bGVuID0gbGVuOworCWN0eC0+bW9yZSA9IDA7CisJYWZfYWxnX2luaXRfY29tcGxldGlvbigmY3R4LT5jb21wbGV0aW9uKTsKKworCWFzay0+cHJpdmF0ZSA9IGN0eDsKKworCWFoYXNoX3JlcXVlc3Rfc2V0X3RmbSgmY3R4LT5yZXEsIHByaXZhdGUpOworCWFoYXNoX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKCZjdHgtPnJlcSwgQ1JZUFRPX1RGTV9SRVFfTUFZX0JBQ0tMT0csCisJCQkJICAgYWZfYWxnX2NvbXBsZXRlLCAmY3R4LT5jb21wbGV0aW9uKTsKKworCXNrLT5za19kZXN0cnVjdCA9IGhhc2hfc29ja19kZXN0cnVjdDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmX2FsZ190eXBlIGFsZ2lmX3R5cGVfaGFzaCA9IHsKKwkuYmluZAkJPQloYXNoX2JpbmQsCisJLnJlbGVhc2UJPQloYXNoX3JlbGVhc2UsCisJLnNldGtleQkJPQloYXNoX3NldGtleSwKKwkuYWNjZXB0CQk9CWhhc2hfYWNjZXB0X3BhcmVudCwKKwkub3BzCQk9CSZhbGdpZl9oYXNoX29wcywKKwkubmFtZQkJPQkiaGFzaCIsCisJLm93bmVyCQk9CVRISVNfTU9EVUxFCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbGdpZl9oYXNoX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gYWZfYWxnX3JlZ2lzdGVyX3R5cGUoJmFsZ2lmX3R5cGVfaGFzaCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbGdpZl9oYXNoX2V4aXQodm9pZCkKK3sKKwlpbnQgZXJyID0gYWZfYWxnX3VucmVnaXN0ZXJfdHlwZSgmYWxnaWZfdHlwZV9oYXNoKTsKKwlCVUdfT04oZXJyKTsKK30KKworbW9kdWxlX2luaXQoYWxnaWZfaGFzaF9pbml0KTsKK21vZHVsZV9leGl0KGFsZ2lmX2hhc2hfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vYWxnaWZfc2tjaXBoZXIuYyBiL2NyeXB0by9hbGdpZl9za2NpcGhlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNmRmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYWxnaWZfc2tjaXBoZXIuYwpAQCAtMCwwICsxLDYzMiBAQAorLyoKKyAqIGFsZ2lmX3NrY2lwaGVyOiBVc2VyLXNwYWNlIGludGVyZmFjZSBmb3Igc2tjaXBoZXIgYWxnb3JpdGhtcworICoKKyAqIFRoaXMgZmlsZSBwcm92aWRlcyB0aGUgdXNlci1zcGFjZSBBUEkgZm9yIHN5bW1ldHJpYyBrZXkgY2lwaGVycy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxjcnlwdG8vc2NhdHRlcndhbGsuaD4KKyNpbmNsdWRlIDxjcnlwdG8vc2tjaXBoZXIuaD4KKyNpbmNsdWRlIDxjcnlwdG8vaWZfYWxnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKK3N0cnVjdCBza2NpcGhlcl9zZ19saXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwlpbnQgY3VyOworCisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzBdOworfTsKKworc3RydWN0IHNrY2lwaGVyX2N0eCB7CisJc3RydWN0IGxpc3RfaGVhZCB0c2dsOworCXN0cnVjdCBhZl9hbGdfc2dsIHJzZ2w7CisKKwl2b2lkICppdjsKKworCXN0cnVjdCBhZl9hbGdfY29tcGxldGlvbiBjb21wbGV0aW9uOworCisJdW5zaWduZWQgdXNlZDsKKworCXVuc2lnbmVkIGludCBsZW47CisJYm9vbCBtb3JlOworCWJvb2wgbWVyZ2U7CisJYm9vbCBlbmM7CisKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0IHJlcTsKK307CisKKyNkZWZpbmUgTUFYX1NHTF9FTlRTICgoUEFHRV9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBza2NpcGhlcl9zZ19saXN0KSkgLyBcCisJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpIC0gMSkKKworc3RhdGljIGlubGluZSBpbnQgc2tjaXBoZXJfc25kYnVmKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgYWxnX3NvY2sgKmFzayA9IGFsZ19zayhzayk7CisJc3RydWN0IHNrY2lwaGVyX2N0eCAqY3R4ID0gYXNrLT5wcml2YXRlOworCisJcmV0dXJuIG1heF90KGludCwgbWF4X3QoaW50LCBzay0+c2tfc25kYnVmICYgUEFHRV9NQVNLLCBQQUdFX1NJWkUpIC0KKwkJCSAgY3R4LT51c2VkLCAwKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNrY2lwaGVyX3dyaXRhYmxlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gUEFHRV9TSVpFIDw9IHNrY2lwaGVyX3NuZGJ1Zihzayk7Cit9CisKK3N0YXRpYyBpbnQgc2tjaXBoZXJfYWxsb2Nfc2dsKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgYWxnX3NvY2sgKmFzayA9IGFsZ19zayhzayk7CisJc3RydWN0IHNrY2lwaGVyX2N0eCAqY3R4ID0gYXNrLT5wcml2YXRlOworCXN0cnVjdCBza2NpcGhlcl9zZ19saXN0ICpzZ2w7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IE5VTEw7CisKKwlzZ2wgPSBsaXN0X2VudHJ5KGN0eC0+dHNnbC5wcmV2LCBzdHJ1Y3Qgc2tjaXBoZXJfc2dfbGlzdCwgbGlzdCk7CisJaWYgKCFsaXN0X2VtcHR5KCZjdHgtPnRzZ2wpKQorCQlzZyA9IHNnbC0+c2c7CisKKwlpZiAoIXNnIHx8IHNnbC0+Y3VyID49IE1BWF9TR0xfRU5UUykgeworCQlzZ2wgPSBzb2NrX2ttYWxsb2Moc2ssIHNpemVvZigqc2dsKSArCisJCQkJICAgICAgIHNpemVvZihzZ2wtPnNnWzBdKSAqIChNQVhfU0dMX0VOVFMgKyAxKSwKKwkJCQkgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzZ2wpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlzZ19pbml0X3RhYmxlKHNnbC0+c2csIE1BWF9TR0xfRU5UUyArIDEpOworCQlzZ2wtPmN1ciA9IDA7CisKKwkJaWYgKHNnKQorCQkJc2NhdHRlcndhbGtfc2dfY2hhaW4oc2csIE1BWF9TR0xfRU5UUyArIDEsIHNnbC0+c2cpOworCisJCWxpc3RfYWRkX3RhaWwoJnNnbC0+bGlzdCwgJmN0eC0+dHNnbCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNrY2lwaGVyX3B1bGxfc2dsKHN0cnVjdCBzb2NrICpzaywgaW50IHVzZWQpCit7CisJc3RydWN0IGFsZ19zb2NrICphc2sgPSBhbGdfc2soc2spOworCXN0cnVjdCBza2NpcGhlcl9jdHggKmN0eCA9IGFzay0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgc2tjaXBoZXJfc2dfbGlzdCAqc2dsOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IGk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmN0eC0+dHNnbCkpIHsKKwkJc2dsID0gbGlzdF9maXJzdF9lbnRyeSgmY3R4LT50c2dsLCBzdHJ1Y3Qgc2tjaXBoZXJfc2dfbGlzdCwKKwkJCQkgICAgICAgbGlzdCk7CisJCXNnID0gc2dsLT5zZzsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2dsLT5jdXI7IGkrKykgeworCQkJaW50IHBsZW4gPSBtaW5fdChpbnQsIHVzZWQsIHNnW2ldLmxlbmd0aCk7CisKKwkJCWlmICghc2dfcGFnZShzZyArIGkpKQorCQkJCWNvbnRpbnVlOworCisJCQlzZ1tpXS5sZW5ndGggLT0gcGxlbjsKKwkJCXNnW2ldLm9mZnNldCArPSBwbGVuOworCisJCQl1c2VkIC09IHBsZW47CisJCQljdHgtPnVzZWQgLT0gcGxlbjsKKworCQkJaWYgKHNnW2ldLmxlbmd0aCkKKwkJCQlyZXR1cm47CisKKwkJCXB1dF9wYWdlKHNnX3BhZ2Uoc2cgKyBpKSk7CisJCQlzZ19hc3NpZ25fcGFnZShzZyArIGksIE5VTEwpOworCQl9CisKKwkJbGlzdF9kZWwoJnNnbC0+bGlzdCk7CisJCXNvY2tfa2ZyZWVfcyhzaywgc2dsLAorCQkJICAgICBzaXplb2YoKnNnbCkgKyBzaXplb2Yoc2dsLT5zZ1swXSkgKgorCQkJCQkgICAgKE1BWF9TR0xfRU5UUyArIDEpKTsKKwl9CisKKwlpZiAoIWN0eC0+dXNlZCkKKwkJY3R4LT5tZXJnZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNrY2lwaGVyX2ZyZWVfc2dsKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgYWxnX3NvY2sgKmFzayA9IGFsZ19zayhzayk7CisJc3RydWN0IHNrY2lwaGVyX2N0eCAqY3R4ID0gYXNrLT5wcml2YXRlOworCisJc2tjaXBoZXJfcHVsbF9zZ2woc2ssIGN0eC0+dXNlZCk7Cit9CisKK3N0YXRpYyBpbnQgc2tjaXBoZXJfd2FpdF9mb3Jfd21lbShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGZsYWdzKQoreworCWxvbmcgdGltZW91dDsKKwlERUZJTkVfV0FJVCh3YWl0KTsKKwlpbnQgZXJyID0gLUVSRVNUQVJUU1lTOworCisJaWYgKGZsYWdzICYgTVNHX0RPTlRXQUlUKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXNldF9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOworCisJZm9yICg7OykgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlicmVhazsKKwkJcHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXRpbWVvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKKwkJaWYgKHNrX3dhaXRfZXZlbnQoc2ssICZ0aW1lb3V0LCBza2NpcGhlcl93cml0YWJsZShzaykpKSB7CisJCQllcnIgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJZmluaXNoX3dhaXQoc2tfc2xlZXAoc2spLCAmd2FpdCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBza2NpcGhlcl93bWVtX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHNvY2tldF93cSAqd3E7CisKKwlpZiAoIXNrY2lwaGVyX3dyaXRhYmxlKHNrKSkKKwkJcmV0dXJuOworCisJcmN1X3JlYWRfbG9jaygpOworCXdxID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za193cSk7CisJaWYgKHdxX2hhc19zbGVlcGVyKHdxKSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbCgmd3EtPndhaXQsIFBPTExJTiB8CisJCQkJCQkJICAgUE9MTFJETk9STSB8CisJCQkJCQkJICAgUE9MTFJEQkFORCk7CisJc2tfd2FrZV9hc3luYyhzaywgU09DS19XQUtFX1dBSVRELCBQT0xMX0lOKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIGludCBza2NpcGhlcl93YWl0X2Zvcl9kYXRhKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IGFsZ19zb2NrICphc2sgPSBhbGdfc2soc2spOworCXN0cnVjdCBza2NpcGhlcl9jdHggKmN0eCA9IGFzay0+cHJpdmF0ZTsKKwlsb25nIHRpbWVvdXQ7CisJREVGSU5FX1dBSVQod2FpdCk7CisJaW50IGVyciA9IC1FUkVTVEFSVFNZUzsKKworCWlmIChmbGFncyAmIE1TR19ET05UV0FJVCkgeworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlzZXRfYml0KFNPQ0tfQVNZTkNfV0FJVERBVEEsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CisKKwlmb3IgKDs7KSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCWJyZWFrOworCQlwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCQlpZiAoc2tfd2FpdF9ldmVudChzaywgJnRpbWVvdXQsIGN0eC0+dXNlZCkpIHsKKwkJCWVyciA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlmaW5pc2hfd2FpdChza19zbGVlcChzayksICZ3YWl0KTsKKworCWNsZWFyX2JpdChTT0NLX0FTWU5DX1dBSVREQVRBLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgc2tjaXBoZXJfZGF0YV93YWtldXAoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBhbGdfc29jayAqYXNrID0gYWxnX3NrKHNrKTsKKwlzdHJ1Y3Qgc2tjaXBoZXJfY3R4ICpjdHggPSBhc2stPnByaXZhdGU7CisJc3RydWN0IHNvY2tldF93cSAqd3E7CisKKwlpZiAoIWN0eC0+dXNlZCkKKwkJcmV0dXJuOworCisJcmN1X3JlYWRfbG9jaygpOworCXdxID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za193cSk7CisJaWYgKHdxX2hhc19zbGVlcGVyKHdxKSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbCgmd3EtPndhaXQsIFBPTExPVVQgfAorCQkJCQkJCSAgIFBPTExSRE5PUk0gfAorCQkJCQkJCSAgIFBPTExSREJBTkQpOworCXNrX3dha2VfYXN5bmMoc2ssIFNPQ0tfV0FLRV9TUEFDRSwgUE9MTF9PVVQpOworCXJjdV9yZWFkX3VubG9jaygpOworfQorCitzdGF0aWMgaW50IHNrY2lwaGVyX3NlbmRtc2coc3RydWN0IGtpb2NiICp1bnVzZWQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgYWxnX3NvY2sgKmFzayA9IGFsZ19zayhzayk7CisJc3RydWN0IHNrY2lwaGVyX2N0eCAqY3R4ID0gYXNrLT5wcml2YXRlOworCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKCZjdHgtPnJlcSk7CisJdW5zaWduZWQgaXZzaXplID0gY3J5cHRvX2FibGtjaXBoZXJfaXZzaXplKHRmbSk7CisJc3RydWN0IHNrY2lwaGVyX3NnX2xpc3QgKnNnbDsKKwlzdHJ1Y3QgYWZfYWxnX2NvbnRyb2wgY29uID0ge307CisJbG9uZyBjb3BpZWQgPSAwOworCWJvb2wgZW5jID0gMDsKKwlpbnQgZXJyOworCWludCBpOworCisJaWYgKG1zZy0+bXNnX2NvbnRyb2xsZW4pIHsKKwkJZXJyID0gYWZfYWxnX2Ntc2dfc2VuZChtc2csICZjb24pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlzd2l0Y2ggKGNvbi5vcCkgeworCQljYXNlIEFMR19PUF9FTkNSWVBUOgorCQkJZW5jID0gMTsKKwkJCWJyZWFrOworCQljYXNlIEFMR19PUF9ERUNSWVBUOgorCQkJZW5jID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoY29uLml2ICYmIGNvbi5pdi0+aXZsZW4gIT0gaXZzaXplKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXJyID0gLUVJTlZBTDsKKworCWxvY2tfc29jayhzayk7CisJaWYgKCFjdHgtPm1vcmUgJiYgY3R4LT51c2VkKQorCQlnb3RvIHVubG9jazsKKworCWlmICghY3R4LT51c2VkKSB7CisJCWN0eC0+ZW5jID0gZW5jOworCQlpZiAoY29uLml2KQorCQkJbWVtY3B5KGN0eC0+aXYsIGNvbi5pdi0+aXYsIGl2c2l6ZSk7CisJfQorCisJd2hpbGUgKHNpemUpIHsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwkJdW5zaWduZWQgbG9uZyBsZW4gPSBzaXplOworCQlpbnQgcGxlbjsKKworCQlpZiAoY3R4LT5tZXJnZSkgeworCQkJc2dsID0gbGlzdF9lbnRyeShjdHgtPnRzZ2wucHJldiwKKwkJCQkJIHN0cnVjdCBza2NpcGhlcl9zZ19saXN0LCBsaXN0KTsKKwkJCXNnID0gc2dsLT5zZyArIHNnbC0+Y3VyIC0gMTsKKwkJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGxlbiwKKwkJCQkgICAgUEFHRV9TSVpFIC0gc2ctPm9mZnNldCAtIHNnLT5sZW5ndGgpOworCisJCQllcnIgPSBtZW1jcHlfZnJvbWlvdmVjKHBhZ2VfYWRkcmVzcyhzZ19wYWdlKHNnKSkgKworCQkJCQkgICAgICAgc2ctPm9mZnNldCArIHNnLT5sZW5ndGgsCisJCQkJCSAgICAgICBtc2ctPm1zZ19pb3YsIGxlbik7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gdW5sb2NrOworCisJCQlzZy0+bGVuZ3RoICs9IGxlbjsKKwkJCWN0eC0+bWVyZ2UgPSAoc2ctPm9mZnNldCArIHNnLT5sZW5ndGgpICYKKwkJCQkgICAgIChQQUdFX1NJWkUgLSAxKTsKKworCQkJY3R4LT51c2VkICs9IGxlbjsKKwkJCWNvcGllZCArPSBsZW47CisJCQlzaXplIC09IGxlbjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFza2NpcGhlcl93cml0YWJsZShzaykpIHsKKwkJCWVyciA9IHNrY2lwaGVyX3dhaXRfZm9yX3dtZW0oc2ssIG1zZy0+bXNnX2ZsYWdzKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byB1bmxvY2s7CisJCX0KKworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBsZW4sIHNrY2lwaGVyX3NuZGJ1ZihzaykpOworCisJCWVyciA9IHNrY2lwaGVyX2FsbG9jX3NnbChzayk7CisJCWlmIChlcnIpCisJCQlnb3RvIHVubG9jazsKKworCQlzZ2wgPSBsaXN0X2VudHJ5KGN0eC0+dHNnbC5wcmV2LCBzdHJ1Y3Qgc2tjaXBoZXJfc2dfbGlzdCwgbGlzdCk7CisJCXNnID0gc2dsLT5zZzsKKwkJZG8geworCQkJaSA9IHNnbC0+Y3VyOworCQkJcGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUpOworCisJCQlzZ19hc3NpZ25fcGFnZShzZyArIGksIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCkpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWlmICghc2dfcGFnZShzZyArIGkpKQorCQkJCWdvdG8gdW5sb2NrOworCisJCQllcnIgPSBtZW1jcHlfZnJvbWlvdmVjKHBhZ2VfYWRkcmVzcyhzZ19wYWdlKHNnICsgaSkpLAorCQkJCQkgICAgICAgbXNnLT5tc2dfaW92LCBwbGVuKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlfX2ZyZWVfcGFnZShzZ19wYWdlKHNnICsgaSkpOworCQkJCXNnX2Fzc2lnbl9wYWdlKHNnICsgaSwgTlVMTCk7CisJCQkJZ290byB1bmxvY2s7CisJCQl9CisKKwkJCXNnW2ldLmxlbmd0aCA9IHBsZW47CisJCQlsZW4gLT0gcGxlbjsKKwkJCWN0eC0+dXNlZCArPSBwbGVuOworCQkJY29waWVkICs9IHBsZW47CisJCQlzaXplIC09IHBsZW47CisJCQlzZ2wtPmN1cisrOworCQl9IHdoaWxlIChsZW4gJiYgc2dsLT5jdXIgPCBNQVhfU0dMX0VOVFMpOworCisJCWN0eC0+bWVyZ2UgPSBwbGVuICYgKFBBR0VfU0laRSAtIDEpOworCX0KKworCWVyciA9IDA7CisKKwljdHgtPm1vcmUgPSBtc2ctPm1zZ19mbGFncyAmIE1TR19NT1JFOworCWlmICghY3R4LT5tb3JlICYmICFsaXN0X2VtcHR5KCZjdHgtPnRzZ2wpKQorCQlzZ2wgPSBsaXN0X2VudHJ5KGN0eC0+dHNnbC5wcmV2LCBzdHJ1Y3Qgc2tjaXBoZXJfc2dfbGlzdCwgbGlzdCk7CisKK3VubG9jazoKKwlza2NpcGhlcl9kYXRhX3dha2V1cChzayk7CisJcmVsZWFzZV9zb2NrKHNrKTsKKworCXJldHVybiBjb3BpZWQgPzogZXJyOworfQorCitzdGF0aWMgc3NpemVfdCBza2NpcGhlcl9zZW5kcGFnZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgaW50IG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgYWxnX3NvY2sgKmFzayA9IGFsZ19zayhzayk7CisJc3RydWN0IHNrY2lwaGVyX2N0eCAqY3R4ID0gYXNrLT5wcml2YXRlOworCXN0cnVjdCBza2NpcGhlcl9zZ19saXN0ICpzZ2w7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlsb2NrX3NvY2soc2spOworCWlmICghY3R4LT5tb3JlICYmIGN0eC0+dXNlZCkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoIXNpemUpCisJCWdvdG8gZG9uZTsKKworCWlmICghc2tjaXBoZXJfd3JpdGFibGUoc2spKSB7CisJCWVyciA9IHNrY2lwaGVyX3dhaXRfZm9yX3dtZW0oc2ssIGZsYWdzKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gdW5sb2NrOworCX0KKworCWVyciA9IHNrY2lwaGVyX2FsbG9jX3NnbChzayk7CisJaWYgKGVycikKKwkJZ290byB1bmxvY2s7CisKKwljdHgtPm1lcmdlID0gMDsKKwlzZ2wgPSBsaXN0X2VudHJ5KGN0eC0+dHNnbC5wcmV2LCBzdHJ1Y3Qgc2tjaXBoZXJfc2dfbGlzdCwgbGlzdCk7CisKKwlnZXRfcGFnZShwYWdlKTsKKwlzZ19zZXRfcGFnZShzZ2wtPnNnICsgc2dsLT5jdXIsIHBhZ2UsIHNpemUsIG9mZnNldCk7CisJc2dsLT5jdXIrKzsKKwljdHgtPnVzZWQgKz0gc2l6ZTsKKworZG9uZToKKwljdHgtPm1vcmUgPSBmbGFncyAmIE1TR19NT1JFOworCWlmICghY3R4LT5tb3JlICYmICFsaXN0X2VtcHR5KCZjdHgtPnRzZ2wpKQorCQlzZ2wgPSBsaXN0X2VudHJ5KGN0eC0+dHNnbC5wcmV2LCBzdHJ1Y3Qgc2tjaXBoZXJfc2dfbGlzdCwgbGlzdCk7CisKK3VubG9jazoKKwlza2NpcGhlcl9kYXRhX3dha2V1cChzayk7CisJcmVsZWFzZV9zb2NrKHNrKTsKKworCXJldHVybiBlcnIgPzogc2l6ZTsKK30KKworc3RhdGljIGludCBza2NpcGhlcl9yZWN2bXNnKHN0cnVjdCBraW9jYiAqdW51c2VkLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJICAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGlnbm9yZWQsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgYWxnX3NvY2sgKmFzayA9IGFsZ19zayhzayk7CisJc3RydWN0IHNrY2lwaGVyX2N0eCAqY3R4ID0gYXNrLT5wcml2YXRlOworCXVuc2lnbmVkIGJzID0gY3J5cHRvX2FibGtjaXBoZXJfYmxvY2tzaXplKGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbSgKKwkJJmN0eC0+cmVxKSk7CisJc3RydWN0IHNrY2lwaGVyX3NnX2xpc3QgKnNnbDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGxvbmcgaW92bGVuOworCXN0cnVjdCBpb3ZlYyAqaW92OworCWludCBlcnIgPSAtRUFHQUlOOworCWludCB1c2VkOworCWxvbmcgY29waWVkID0gMDsKKworCWxvY2tfc29jayhzayk7CisJZm9yIChpb3YgPSBtc2ctPm1zZ19pb3YsIGlvdmxlbiA9IG1zZy0+bXNnX2lvdmxlbjsgaW92bGVuID4gMDsKKwkgICAgIGlvdmxlbi0tLCBpb3YrKykgeworCQl1bnNpZ25lZCBsb25nIHNlZ2xlbiA9IGlvdi0+aW92X2xlbjsKKwkJY2hhciBfX3VzZXIgKmZyb20gPSBpb3YtPmlvdl9iYXNlOworCisJCXdoaWxlIChzZWdsZW4pIHsKKwkJCXNnbCA9IGxpc3RfZmlyc3RfZW50cnkoJmN0eC0+dHNnbCwKKwkJCQkJICAgICAgIHN0cnVjdCBza2NpcGhlcl9zZ19saXN0LCBsaXN0KTsKKwkJCXNnID0gc2dsLT5zZzsKKworCQkJd2hpbGUgKCFzZy0+bGVuZ3RoKQorCQkJCXNnKys7CisKKwkJCXVzZWQgPSBjdHgtPnVzZWQ7CisJCQlpZiAoIXVzZWQpIHsKKwkJCQllcnIgPSBza2NpcGhlcl93YWl0X2Zvcl9kYXRhKHNrLCBmbGFncyk7CisJCQkJaWYgKGVycikKKwkJCQkJZ290byB1bmxvY2s7CisJCQl9CisKKwkJCXVzZWQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCB1c2VkLCBzZWdsZW4pOworCisJCQl1c2VkID0gYWZfYWxnX21ha2Vfc2coJmN0eC0+cnNnbCwgZnJvbSwgdXNlZCwgMSk7CisJCQllcnIgPSB1c2VkOworCQkJaWYgKGVyciA8IDApCisJCQkJZ290byB1bmxvY2s7CisKKwkJCWlmIChjdHgtPm1vcmUgfHwgdXNlZCA8IGN0eC0+dXNlZCkKKwkJCQl1c2VkIC09IHVzZWQgJSBiczsKKworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWlmICghdXNlZCkKKwkJCQlnb3RvIGZyZWU7CisKKwkJCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQoJmN0eC0+cmVxLCBzZywKKwkJCQkJCSAgICAgY3R4LT5yc2dsLnNnLCB1c2VkLAorCQkJCQkJICAgICBjdHgtPml2KTsKKworCQkJZXJyID0gYWZfYWxnX3dhaXRfZm9yX2NvbXBsZXRpb24oCisJCQkJY3R4LT5lbmMgPworCQkJCQljcnlwdG9fYWJsa2NpcGhlcl9lbmNyeXB0KCZjdHgtPnJlcSkgOgorCQkJCQljcnlwdG9fYWJsa2NpcGhlcl9kZWNyeXB0KCZjdHgtPnJlcSksCisJCQkJJmN0eC0+Y29tcGxldGlvbik7CisKK2ZyZWU6CisJCQlhZl9hbGdfZnJlZV9zZygmY3R4LT5yc2dsKTsKKworCQkJaWYgKGVycikKKwkJCQlnb3RvIHVubG9jazsKKworCQkJY29waWVkICs9IHVzZWQ7CisJCQlmcm9tICs9IHVzZWQ7CisJCQlzZWdsZW4gLT0gdXNlZDsKKwkJCXNrY2lwaGVyX3B1bGxfc2dsKHNrLCB1c2VkKTsKKwkJfQorCX0KKworCWVyciA9IDA7CisKK3VubG9jazoKKwlza2NpcGhlcl93bWVtX3dha2V1cChzayk7CisJcmVsZWFzZV9zb2NrKHNrKTsKKworCXJldHVybiBjb3BpZWQgPzogZXJyOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2tjaXBoZXJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKKwkJCQkgIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGFsZ19zb2NrICphc2sgPSBhbGdfc2soc2spOworCXN0cnVjdCBza2NpcGhlcl9jdHggKmN0eCA9IGFzay0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBpbnQgbWFzazsKKworCXNvY2tfcG9sbF93YWl0KGZpbGUsIHNrX3NsZWVwKHNrKSwgd2FpdCk7CisJbWFzayA9IDA7CisKKwlpZiAoY3R4LT51c2VkKQorCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisKKwlpZiAoc2tjaXBoZXJfd3JpdGFibGUoc2spKQorCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTFdSQkFORDsKKworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgc3RydWN0IHByb3RvX29wcyBhbGdpZl9za2NpcGhlcl9vcHMgPSB7CisJLmZhbWlseQkJPQlQRl9BTEcsCisKKwkuY29ubmVjdAk9CXNvY2tfbm9fY29ubmVjdCwKKwkuc29ja2V0cGFpcgk9CXNvY2tfbm9fc29ja2V0cGFpciwKKwkuZ2V0bmFtZQk9CXNvY2tfbm9fZ2V0bmFtZSwKKwkuaW9jdGwJCT0Jc29ja19ub19pb2N0bCwKKwkubGlzdGVuCQk9CXNvY2tfbm9fbGlzdGVuLAorCS5zaHV0ZG93bgk9CXNvY2tfbm9fc2h1dGRvd24sCisJLmdldHNvY2tvcHQJPQlzb2NrX25vX2dldHNvY2tvcHQsCisJLm1tYXAJCT0Jc29ja19ub19tbWFwLAorCS5iaW5kCQk9CXNvY2tfbm9fYmluZCwKKwkuYWNjZXB0CQk9CXNvY2tfbm9fYWNjZXB0LAorCS5zZXRzb2Nrb3B0CT0Jc29ja19ub19zZXRzb2Nrb3B0LAorCisJLnJlbGVhc2UJPQlhZl9hbGdfcmVsZWFzZSwKKwkuc2VuZG1zZwk9CXNrY2lwaGVyX3NlbmRtc2csCisJLnNlbmRwYWdlCT0Jc2tjaXBoZXJfc2VuZHBhZ2UsCisJLnJlY3Ztc2cJPQlza2NpcGhlcl9yZWN2bXNnLAorCS5wb2xsCQk9CXNrY2lwaGVyX3BvbGwsCit9OworCitzdGF0aWMgdm9pZCAqc2tjaXBoZXJfYmluZChjb25zdCBjaGFyICpuYW1lLCB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJcmV0dXJuIGNyeXB0b19hbGxvY19hYmxrY2lwaGVyKG5hbWUsIHR5cGUsIG1hc2spOworfQorCitzdGF0aWMgdm9pZCBza2NpcGhlcl9yZWxlYXNlKHZvaWQgKnByaXZhdGUpCit7CisJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcihwcml2YXRlKTsKK30KKworc3RhdGljIGludCBza2NpcGhlcl9zZXRrZXkodm9pZCAqcHJpdmF0ZSwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKK3sKKwlyZXR1cm4gY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5KHByaXZhdGUsIGtleSwga2V5bGVuKTsKK30KKworc3RhdGljIHZvaWQgc2tjaXBoZXJfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IGFsZ19zb2NrICphc2sgPSBhbGdfc2soc2spOworCXN0cnVjdCBza2NpcGhlcl9jdHggKmN0eCA9IGFzay0+cHJpdmF0ZTsKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbSgmY3R4LT5yZXEpOworCisJc2tjaXBoZXJfZnJlZV9zZ2woc2spOworCXNvY2tfa2ZyZWVfcyhzaywgY3R4LT5pdiwgY3J5cHRvX2FibGtjaXBoZXJfaXZzaXplKHRmbSkpOworCXNvY2tfa2ZyZWVfcyhzaywgY3R4LCBjdHgtPmxlbik7CisJYWZfYWxnX3JlbGVhc2VfcGFyZW50KHNrKTsKK30KKworc3RhdGljIGludCBza2NpcGhlcl9hY2NlcHRfcGFyZW50KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3Qgc2tjaXBoZXJfY3R4ICpjdHg7CisJc3RydWN0IGFsZ19zb2NrICphc2sgPSBhbGdfc2soc2spOworCXVuc2lnbmVkIGludCBsZW4gPSBzaXplb2YoKmN0eCkgKyBjcnlwdG9fYWJsa2NpcGhlcl9yZXFzaXplKHByaXZhdGUpOworCisJY3R4ID0gc29ja19rbWFsbG9jKHNrLCBsZW4sIEdGUF9LRVJORUwpOworCWlmICghY3R4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWN0eC0+aXYgPSBzb2NrX2ttYWxsb2Moc2ssIGNyeXB0b19hYmxrY2lwaGVyX2l2c2l6ZShwcml2YXRlKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eC0+aXYpIHsKKwkJc29ja19rZnJlZV9zKHNrLCBjdHgsIGxlbik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChjdHgtPml2LCAwLCBjcnlwdG9fYWJsa2NpcGhlcl9pdnNpemUocHJpdmF0ZSkpOworCisJSU5JVF9MSVNUX0hFQUQoJmN0eC0+dHNnbCk7CisJY3R4LT5sZW4gPSBsZW47CisJY3R4LT51c2VkID0gMDsKKwljdHgtPm1vcmUgPSAwOworCWN0eC0+bWVyZ2UgPSAwOworCWN0eC0+ZW5jID0gMDsKKwlhZl9hbGdfaW5pdF9jb21wbGV0aW9uKCZjdHgtPmNvbXBsZXRpb24pOworCisJYXNrLT5wcml2YXRlID0gY3R4OworCisJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0oJmN0eC0+cmVxLCBwcml2YXRlKTsKKwlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKCZjdHgtPnJlcSwgQ1JZUFRPX1RGTV9SRVFfTUFZX0JBQ0tMT0csCisJCQkJCWFmX2FsZ19jb21wbGV0ZSwgJmN0eC0+Y29tcGxldGlvbik7CisKKwlzay0+c2tfZGVzdHJ1Y3QgPSBza2NpcGhlcl9zb2NrX2Rlc3RydWN0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWZfYWxnX3R5cGUgYWxnaWZfdHlwZV9za2NpcGhlciA9IHsKKwkuYmluZAkJPQlza2NpcGhlcl9iaW5kLAorCS5yZWxlYXNlCT0Jc2tjaXBoZXJfcmVsZWFzZSwKKwkuc2V0a2V5CQk9CXNrY2lwaGVyX3NldGtleSwKKwkuYWNjZXB0CQk9CXNrY2lwaGVyX2FjY2VwdF9wYXJlbnQsCisJLm9wcwkJPQkmYWxnaWZfc2tjaXBoZXJfb3BzLAorCS5uYW1lCQk9CSJza2NpcGhlciIsCisJLm93bmVyCQk9CVRISVNfTU9EVUxFCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbGdpZl9za2NpcGhlcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIGFmX2FsZ19yZWdpc3Rlcl90eXBlKCZhbGdpZl90eXBlX3NrY2lwaGVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFsZ2lmX3NrY2lwaGVyX2V4aXQodm9pZCkKK3sKKwlpbnQgZXJyID0gYWZfYWxnX3VucmVnaXN0ZXJfdHlwZSgmYWxnaWZfdHlwZV9za2NpcGhlcik7CisJQlVHX09OKGVycik7Cit9CisKK21vZHVsZV9pbml0KGFsZ2lmX3NrY2lwaGVyX2luaXQpOworbW9kdWxlX2V4aXQoYWxnaWZfc2tjaXBoZXJfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXV0aGVuYy5jIGIvY3J5cHRvL2F1dGhlbmMuYwppbmRleCBhNWEyMmNmLi41ZWY3YmE2IDEwMDY0NAotLS0gYS9jcnlwdG8vYXV0aGVuYy5jCisrKyBiL2NyeXB0by9hdXRoZW5jLmMKQEAgLTEwNywyMCArMTA3LDYgQEAKIAlnb3RvIG91dDsKIH0KIAotc3RhdGljIHZvaWQgYXV0aGVuY19jaGFpbihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmhlYWQsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkgIGludCBjaGFpbikKLXsKLQlpZiAoY2hhaW4pIHsKLQkJaGVhZC0+bGVuZ3RoICs9IHNnLT5sZW5ndGg7Ci0JCXNnID0gc2NhdHRlcndhbGtfc2dfbmV4dChzZyk7Ci0JfQotCi0JaWYgKHNnKQotCQlzY2F0dGVyd2Fsa19zZ19jaGFpbihoZWFkLCAyLCBzZyk7Ci0JZWxzZQotCQlzZ19tYXJrX2VuZChoZWFkKTsKLX0KLQogc3RhdGljIHZvaWQgYXV0aGVuY19nZW5pdl9haGFzaF91cGRhdGVfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsCiAJCQkJCSAgICBpbnQgZXJyKQogewpAQCAtMzQ1LDcgKzMzMSw3IEBACiAJaWYgKGl2c2l6ZSkgewogCQlzZ19pbml0X3RhYmxlKGNpcGhlciwgMik7CiAJCXNnX3NldF9idWYoY2lwaGVyLCBpdiwgaXZzaXplKTsKLQkJYXV0aGVuY19jaGFpbihjaXBoZXIsIGRzdCwgdmRzdCA9PSBpdiArIGl2c2l6ZSk7CisJCXNjYXR0ZXJ3YWxrX2NyeXB0b19jaGFpbihjaXBoZXIsIGRzdCwgdmRzdCA9PSBpdiArIGl2c2l6ZSwgMik7CiAJCWRzdCA9IGNpcGhlcjsKIAkJY3J5cHRsZW4gKz0gaXZzaXplOwogCX0KQEAgLTM1NCw3ICszNDAsNyBAQAogCQlhdXRoZW5jX2FoYXNoX2ZuID0gY3J5cHRvX2F1dGhlbmNfYWhhc2g7CiAJCXNnX2luaXRfdGFibGUoYXNnLCAyKTsKIAkJc2dfc2V0X3BhZ2UoYXNnLCBzZ19wYWdlKGFzc29jKSwgYXNzb2MtPmxlbmd0aCwgYXNzb2MtPm9mZnNldCk7Ci0JCWF1dGhlbmNfY2hhaW4oYXNnLCBkc3QsIDApOworCQlzY2F0dGVyd2Fsa19jcnlwdG9fY2hhaW4oYXNnLCBkc3QsIDAsIDIpOwogCQlkc3QgPSBhc2c7CiAJCWNyeXB0bGVuICs9IHJlcS0+YXNzb2NsZW47CiAJfQpAQCAtNDk5LDcgKzQ4NSw3IEBACiAJaWYgKGl2c2l6ZSkgewogCQlzZ19pbml0X3RhYmxlKGNpcGhlciwgMik7CiAJCXNnX3NldF9idWYoY2lwaGVyLCBpdiwgaXZzaXplKTsKLQkJYXV0aGVuY19jaGFpbihjaXBoZXIsIHNyYywgdnNyYyA9PSBpdiArIGl2c2l6ZSk7CisJCXNjYXR0ZXJ3YWxrX2NyeXB0b19jaGFpbihjaXBoZXIsIHNyYywgdnNyYyA9PSBpdiArIGl2c2l6ZSwgMik7CiAJCXNyYyA9IGNpcGhlcjsKIAkJY3J5cHRsZW4gKz0gaXZzaXplOwogCX0KQEAgLTUwOCw3ICs0OTQsNyBAQAogCQlhdXRoZW5jX2FoYXNoX2ZuID0gY3J5cHRvX2F1dGhlbmNfYWhhc2g7CiAJCXNnX2luaXRfdGFibGUoYXNnLCAyKTsKIAkJc2dfc2V0X3BhZ2UoYXNnLCBzZ19wYWdlKGFzc29jKSwgYXNzb2MtPmxlbmd0aCwgYXNzb2MtPm9mZnNldCk7Ci0JCWF1dGhlbmNfY2hhaW4oYXNnLCBzcmMsIDApOworCQlzY2F0dGVyd2Fsa19jcnlwdG9fY2hhaW4oYXNnLCBzcmMsIDAsIDIpOwogCQlzcmMgPSBhc2c7CiAJCWNyeXB0bGVuICs9IHJlcS0+YXNzb2NsZW47CiAJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Nhc3Q1LmMgYi9jcnlwdG8vY2FzdDUuYwppbmRleCBhMWQyMjk0Li40YTIzMGRkIDEwMDY0NAotLS0gYS9jcnlwdG8vY2FzdDUuYworKysgYi9jcnlwdG8vY2FzdDUuYwpAQCAtNjA0LDM2ICs2MDQsMjMgQEAKIAkgKiBSb3VuZHMgMywgNiwgOSwgMTIsIGFuZCAxNSB1c2UgZiBmdW5jdGlvbiBUeXBlIDMuCiAJICovCiAKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bMF0sIEtyWzBdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bMV0sIEtyWzFdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjMociwgS21bMl0sIEtyWzJdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bM10sIEtyWzNdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bNF0sIEtyWzRdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjMociwgS21bNV0sIEtyWzVdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bNl0sIEtyWzZdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bN10sIEtyWzddKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjMociwgS21bOF0sIEtyWzhdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bOV0sIEtyWzldKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bMTBdLCBLclsxMF0pOworCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMyhyLCBLbVsxMV0sIEtyWzExXSk7CiAJaWYgKCEoYy0+cnIpKSB7Ci0JCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMShyLCBLbVswXSwgS3JbMF0pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bMV0sIEtyWzFdKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYzKHIsIEttWzJdLCBLclsyXSk7Ci0JCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMShyLCBLbVszXSwgS3JbM10pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bNF0sIEtyWzRdKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYzKHIsIEttWzVdLCBLcls1XSk7Ci0JCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMShyLCBLbVs2XSwgS3JbNl0pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bN10sIEtyWzddKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYzKHIsIEttWzhdLCBLcls4XSk7Ci0JCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMShyLCBLbVs5XSwgS3JbOV0pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bMTBdLCBLclsxMF0pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjMociwgS21bMTFdLCBLclsxMV0pOwogCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bMTJdLCBLclsxMl0pOwogCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bMTNdLCBLclsxM10pOwogCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjMociwgS21bMTRdLCBLclsxNF0pOwogCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bMTVdLCBLclsxNV0pOwotCX0gZWxzZSB7Ci0JCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMShyLCBLbVswXSwgS3JbMF0pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bMV0sIEtyWzFdKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYzKHIsIEttWzJdLCBLclsyXSk7Ci0JCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMShyLCBLbVszXSwgS3JbM10pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bNF0sIEtyWzRdKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYzKHIsIEttWzVdLCBLcls1XSk7Ci0JCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMShyLCBLbVs2XSwgS3JbNl0pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bN10sIEtyWzddKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYzKHIsIEttWzhdLCBLcls4XSk7Ci0JCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMShyLCBLbVs5XSwgS3JbOV0pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bMTBdLCBLclsxMF0pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjMociwgS21bMTFdLCBLclsxMV0pOwogCX0KIAogCS8qIGMxLi4uYzY0IDwtLSAoUjE2LEwxNikuICAoRXhjaGFuZ2UgZmluYWwgYmxvY2tzIEwxNiwgUjE2IGFuZApAQCAtNjYzLDMyICs2NTAsMTkgQEAKIAkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYzKHIsIEttWzE0XSwgS3JbMTRdKTsKIAkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYyKHIsIEttWzEzXSwgS3JbMTNdKTsKIAkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYxKHIsIEttWzEyXSwgS3JbMTJdKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYzKHIsIEttWzExXSwgS3JbMTFdKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYyKHIsIEttWzEwXSwgS3JbMTBdKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYxKHIsIEttWzldLCBLcls5XSk7Ci0JCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMyhyLCBLbVs4XSwgS3JbOF0pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bN10sIEtyWzddKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYxKHIsIEttWzZdLCBLcls2XSk7Ci0JCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMyhyLCBLbVs1XSwgS3JbNV0pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bNF0sIEtyWzRdKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYxKHIsIEttWzNdLCBLclszXSk7Ci0JCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMyhyLCBLbVsyXSwgS3JbMl0pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bMV0sIEtyWzFdKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYxKHIsIEttWzBdLCBLclswXSk7Ci0JfSBlbHNlIHsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYzKHIsIEttWzExXSwgS3JbMTFdKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYyKHIsIEttWzEwXSwgS3JbMTBdKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYxKHIsIEttWzldLCBLcls5XSk7Ci0JCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMyhyLCBLbVs4XSwgS3JbOF0pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bN10sIEtyWzddKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYxKHIsIEttWzZdLCBLcls2XSk7Ci0JCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMyhyLCBLbVs1XSwgS3JbNV0pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bNF0sIEtyWzRdKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYxKHIsIEttWzNdLCBLclszXSk7Ci0JCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMyhyLCBLbVsyXSwgS3JbMl0pOwotCQl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bMV0sIEtyWzFdKTsKLQkJdCA9IGw7IGwgPSByOyByID0gdCBeIEYxKHIsIEttWzBdLCBLclswXSk7CiAJfQorCXQgPSBsOyBsID0gcjsgciA9IHQgXiBGMyhyLCBLbVsxMV0sIEtyWzExXSk7CisJdCA9IGw7IGwgPSByOyByID0gdCBeIEYyKHIsIEttWzEwXSwgS3JbMTBdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bOV0sIEtyWzldKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjMociwgS21bOF0sIEtyWzhdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bN10sIEtyWzddKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bNl0sIEtyWzZdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjMociwgS21bNV0sIEtyWzVdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bNF0sIEtyWzRdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bM10sIEtyWzNdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjMociwgS21bMl0sIEtyWzJdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjIociwgS21bMV0sIEtyWzFdKTsKKwl0ID0gbDsgbCA9IHI7IHIgPSB0IF4gRjEociwgS21bMF0sIEtyWzBdKTsKIAogCWRzdFswXSA9IGNwdV90b19iZTMyKHIpOwogCWRzdFsxXSA9IGNwdV90b19iZTMyKGwpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyeXB0b193cS5jIGIvY3J5cHRvL2NyeXB0b193cS5jCmluZGV4IGZkY2Y2MjQuLmI5ODBlZTEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcnlwdG9fd3EuYworKysgYi9jcnlwdG8vY3J5cHRvX3dxLmMKQEAgLTIwLDcgKzIwLDggQEAKIAogc3RhdGljIGludCBfX2luaXQgY3J5cHRvX3dxX2luaXQodm9pZCkKIHsKLQlrY3J5cHRvX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgiY3J5cHRvIik7CisJa2NyeXB0b193cSA9IGFsbG9jX3dvcmtxdWV1ZSgiY3J5cHRvIiwKKwkJCQkgICAgIFdRX01FTV9SRUNMQUlNIHwgV1FfQ1BVX0lOVEVOU0lWRSwgMSk7CiAJaWYgKHVubGlrZWx5KCFrY3J5cHRvX3dxKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9jcnlwdG8vZGVmbGF0ZS5jIGIvY3J5cHRvL2RlZmxhdGUuYwppbmRleCA0NjNkYzg1Li5jYmM3YTMzIDEwMDY0NAotLS0gYS9jcnlwdG8vZGVmbGF0ZS5jCisrKyBiL2NyeXB0by9kZWZsYXRlLmMKQEAgLTQ4LDEyICs0OCwxMSBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5jb21wX3N0cmVhbTsKIAotCXN0cmVhbS0+d29ya3NwYWNlID0gdm1hbGxvYyh6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZSgpKTsKKwlzdHJlYW0tPndvcmtzcGFjZSA9IHZ6YWxsb2MoemxpYl9kZWZsYXRlX3dvcmtzcGFjZXNpemUoKSk7CiAJaWYgKCFzdHJlYW0tPndvcmtzcGFjZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9Ci0JbWVtc2V0KHN0cmVhbS0+d29ya3NwYWNlLCAwLCB6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZSgpKTsKIAlyZXQgPSB6bGliX2RlZmxhdGVJbml0MihzdHJlYW0sIERFRkxBVEVfREVGX0xFVkVMLCBaX0RFRkxBVEVELAogCSAgICAgICAgICAgICAgICAgICAgICAgIC1ERUZMQVRFX0RFRl9XSU5CSVRTLCBERUZMQVRFX0RFRl9NRU1MRVZFTCwKIAkgICAgICAgICAgICAgICAgICAgICAgICBaX0RFRkFVTFRfU1RSQVRFR1kpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VzZXFpdi5jIGIvY3J5cHRvL2VzZXFpdi5jCmluZGV4IDNjYTNiNjYuLjQyY2U5ZjUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lc2VxaXYuYworKysgYi9jcnlwdG8vZXNlcWl2LmMKQEAgLTYyLDIwICs2Miw2IEBACiAJc2tjaXBoZXJfZ2l2Y3J5cHRfY29tcGxldGUocmVxLCBlcnIpOwogfQogCi1zdGF0aWMgdm9pZCBlc2VxaXZfY2hhaW4oc3RydWN0IHNjYXR0ZXJsaXN0ICpoZWFkLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJIGludCBjaGFpbikKLXsKLQlpZiAoY2hhaW4pIHsKLQkJaGVhZC0+bGVuZ3RoICs9IHNnLT5sZW5ndGg7Ci0JCXNnID0gc2NhdHRlcndhbGtfc2dfbmV4dChzZyk7Ci0JfQotCi0JaWYgKHNnKQotCQlzY2F0dGVyd2Fsa19zZ19jaGFpbihoZWFkLCAyLCBzZyk7Ci0JZWxzZQotCQlzZ19tYXJrX2VuZChoZWFkKTsKLX0KLQogc3RhdGljIGludCBlc2VxaXZfZ2l2ZW5jcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfZ2l2Y3J5cHRfcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqZ2VuaXYgPSBza2NpcGhlcl9naXZjcnlwdF9yZXF0Zm0ocmVxKTsKQEAgLTEyNCwxMyArMTEwLDEzIEBACiAKIAlzZ19pbml0X3RhYmxlKHJlcWN0eC0+c3JjLCAyKTsKIAlzZ19zZXRfYnVmKHJlcWN0eC0+c3JjLCBnaXYsIGl2c2l6ZSk7Ci0JZXNlcWl2X2NoYWluKHJlcWN0eC0+c3JjLCBvc3JjLCB2c3JjID09IGdpdiArIGl2c2l6ZSk7CisJc2NhdHRlcndhbGtfY3J5cHRvX2NoYWluKHJlcWN0eC0+c3JjLCBvc3JjLCB2c3JjID09IGdpdiArIGl2c2l6ZSwgMik7CiAKIAlkc3QgPSByZXFjdHgtPnNyYzsKIAlpZiAob3NyYyAhPSBvZHN0KSB7CiAJCXNnX2luaXRfdGFibGUocmVxY3R4LT5kc3QsIDIpOwogCQlzZ19zZXRfYnVmKHJlcWN0eC0+ZHN0LCBnaXYsIGl2c2l6ZSk7Ci0JCWVzZXFpdl9jaGFpbihyZXFjdHgtPmRzdCwgb2RzdCwgdmRzdCA9PSBnaXYgKyBpdnNpemUpOworCQlzY2F0dGVyd2Fsa19jcnlwdG9fY2hhaW4ocmVxY3R4LT5kc3QsIG9kc3QsIHZkc3QgPT0gZ2l2ICsgaXZzaXplLCAyKTsKIAogCQlkc3QgPSByZXFjdHgtPmRzdDsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZ2NtLmMgYi9jcnlwdG8vZ2NtLmMKaW5kZXggMmY1ZmJiYS4uMWEyNTI2MyAxMDA2NDQKLS0tIGEvY3J5cHRvL2djbS5jCisrKyBiL2NyeXB0by9nY20uYwpAQCAtMTEwMiwyMSArMTEwMiw2IEBACiAJcmV0dXJuIGNyeXB0b19hZWFkX3NldGF1dGhzaXplKGN0eC0+Y2hpbGQsIGF1dGhzaXplKTsKIH0KIAotLyogdGhpcyBpcyB0aGUgc2FtZSBhcyBjcnlwdG9fYXV0aGVuY19jaGFpbiAqLwotc3RhdGljIHZvaWQgY3J5cHRvX3JmYzQ1NDNfY2hhaW4oc3RydWN0IHNjYXR0ZXJsaXN0ICpoZWFkLAotCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgY2hhaW4pCi17Ci0JaWYgKGNoYWluKSB7Ci0JCWhlYWQtPmxlbmd0aCArPSBzZy0+bGVuZ3RoOwotCQlzZyA9IHNjYXR0ZXJ3YWxrX3NnX25leHQoc2cpOwotCX0KLQotCWlmIChzZykKLQkJc2NhdHRlcndhbGtfc2dfY2hhaW4oaGVhZCwgMiwgc2cpOwotCWVsc2UKLQkJc2dfbWFya19lbmQoaGVhZCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpjcnlwdG9fcmZjNDU0M19jcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEsCiAJCQkJCQkgaW50IGVuYykKIHsKQEAgLTExNTQsMTMgKzExMzksMTMgQEAKIAogCXNnX2luaXRfdGFibGUocGF5bG9hZCwgMik7CiAJc2dfc2V0X2J1ZihwYXlsb2FkLCByZXEtPml2LCA4KTsKLQljcnlwdG9fcmZjNDU0M19jaGFpbihwYXlsb2FkLCBkc3QsIHZkc3QgPT0gcmVxLT5pdiArIDgpOworCXNjYXR0ZXJ3YWxrX2NyeXB0b19jaGFpbihwYXlsb2FkLCBkc3QsIHZkc3QgPT0gcmVxLT5pdiArIDgsIDIpOwogCWFzc29jbGVuICs9IDggKyByZXEtPmNyeXB0bGVuIC0gKGVuYyA/IDAgOiBhdXRoc2l6ZSk7CiAKIAlzZ19pbml0X3RhYmxlKGFzc29jLCAyKTsKIAlzZ19zZXRfcGFnZShhc3NvYywgc2dfcGFnZShyZXEtPmFzc29jKSwgcmVxLT5hc3NvYy0+bGVuZ3RoLAogCQkgICAgcmVxLT5hc3NvYy0+b2Zmc2V0KTsKLQljcnlwdG9fcmZjNDU0M19jaGFpbihhc3NvYywgcGF5bG9hZCwgMCk7CisJc2NhdHRlcndhbGtfY3J5cHRvX2NoYWluKGFzc29jLCBwYXlsb2FkLCAwLCAyKTsKIAogCWFlYWRfcmVxdWVzdF9zZXRfdGZtKHN1YnJlcSwgY3R4LT5jaGlsZCk7CiAJYWVhZF9yZXF1ZXN0X3NldF9jYWxsYmFjayhzdWJyZXEsIHJlcS0+YmFzZS5mbGFncywgcmVxLT5iYXNlLmNvbXBsZXRlLApkaWZmIC0tZ2l0IGEvY3J5cHRvL3BjcnlwdC5jIGIvY3J5cHRvL3BjcnlwdC5jCmluZGV4IDc1NTg2ZjEuLjI5YTg5ZGEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wY3J5cHQuYworKysgYi9jcnlwdG8vcGNyeXB0LmMKQEAgLTQ1NSw3ICs0NTUsOCBAQAogCiAJZ2V0X29ubGluZV9jcHVzKCk7CiAKLQlwY3J5cHQtPndxID0gY3JlYXRlX3dvcmtxdWV1ZShuYW1lKTsKKwlwY3J5cHQtPndxID0gYWxsb2Nfd29ya3F1ZXVlKG5hbWUsCisJCQkJICAgICBXUV9NRU1fUkVDTEFJTSB8IFdRX0NQVV9JTlRFTlNJVkUsIDEpOwogCWlmICghcGNyeXB0LT53cSkKIAkJZ290byBlcnI7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9ybWQxMjguYyBiL2NyeXB0by9ybWQxMjguYwppbmRleCAxY2ViNjczLi44YTBmNjhiIDEwMDY0NAotLS0gYS9jcnlwdG8vcm1kMTI4LmMKKysrIGIvY3J5cHRvL3JtZDEyOC5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEJhc2VkIG9uIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gYnkgQW50b29uIEJvc3NlbGFlcnMsIEVTQVQtQ09TSUMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQWRyaWFuLUtlbiBSdWVlZ3NlZ2dlciA8cnVlZWdzZWdnZXIgKGF0KSBzd2lzcy1pdC5jaD4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBBZHJpYW4tS2VuIFJ1ZWVnc2VnZ2VyIDxrZW5AY29kZWxhYnMuY2g+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCkBAIC0zMjUsNCArMzI1LDUgQEAKIG1vZHVsZV9leGl0KHJtZDEyOF9tb2RfZmluaSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFkcmlhbi1LZW4gUnVlZWdzZWdnZXIgPGtlbkBjb2RlbGFicy5jaD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUklQRU1ELTEyOCBNZXNzYWdlIERpZ2VzdCIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JtZDE2MC5jIGIvY3J5cHRvL3JtZDE2MC5jCmluZGV4IDQ3MjI2MWYuLjUyNWQ3YmIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ybWQxNjAuYworKysgYi9jcnlwdG8vcm1kMTYwLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogQmFzZWQgb24gdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBieSBBbnRvb24gQm9zc2VsYWVycywgRVNBVC1DT1NJQwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBZHJpYW4tS2VuIFJ1ZWVnc2VnZ2VyIDxydWVlZ3NlZ2dlciAoYXQpIHN3aXNzLWl0LmNoPgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFkcmlhbi1LZW4gUnVlZWdzZWdnZXIgPGtlbkBjb2RlbGFicy5jaD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKQEAgLTM2OSw0ICszNjksNSBAQAogbW9kdWxlX2V4aXQocm1kMTYwX21vZF9maW5pKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQWRyaWFuLUtlbiBSdWVlZ3NlZ2dlciA8a2VuQGNvZGVsYWJzLmNoPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJSSVBFTUQtMTYwIE1lc3NhZ2UgRGlnZXN0Iik7CmRpZmYgLS1naXQgYS9jcnlwdG8vcm1kMjU2LmMgYi9jcnlwdG8vcm1kMjU2LmMKaW5kZXggNzJlYWZhOC4uNjkyOTNkOSAxMDA2NDQKLS0tIGEvY3J5cHRvL3JtZDI1Ni5jCisrKyBiL2NyeXB0by9ybWQyNTYuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBCYXNlZCBvbiB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGJ5IEFudG9vbiBCb3NzZWxhZXJzLCBFU0FULUNPU0lDCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEFkcmlhbi1LZW4gUnVlZWdzZWdnZXIgPHJ1ZWVnc2VnZ2VyIChhdCkgc3dpc3MtaXQuY2g+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQWRyaWFuLUtlbiBSdWVlZ3NlZ2dlciA8a2VuQGNvZGVsYWJzLmNoPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQpAQCAtMzQ0LDQgKzM0NCw1IEBACiBtb2R1bGVfZXhpdChybWQyNTZfbW9kX2ZpbmkpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBZHJpYW4tS2VuIFJ1ZWVnc2VnZ2VyIDxrZW5AY29kZWxhYnMuY2g+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlJJUEVNRC0yNTYgTWVzc2FnZSBEaWdlc3QiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9ybWQzMjAuYyBiL2NyeXB0by9ybWQzMjAuYwppbmRleCA4NmJlY2FiLi4wOWY5N2RmIDEwMDY0NAotLS0gYS9jcnlwdG8vcm1kMzIwLmMKKysrIGIvY3J5cHRvL3JtZDMyMC5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEJhc2VkIG9uIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gYnkgQW50b29uIEJvc3NlbGFlcnMsIEVTQVQtQ09TSUMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQWRyaWFuLUtlbiBSdWVlZ3NlZ2dlciA8cnVlZWdzZWdnZXIgKGF0KSBzd2lzcy1pdC5jaD4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBBZHJpYW4tS2VuIFJ1ZWVnc2VnZ2VyIDxrZW5AY29kZWxhYnMuY2g+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCkBAIC0zOTMsNCArMzkzLDUgQEAKIG1vZHVsZV9leGl0KHJtZDMyMF9tb2RfZmluaSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFkcmlhbi1LZW4gUnVlZWdzZWdnZXIgPGtlbkBjb2RlbGFicy5jaD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUklQRU1ELTMyMCBNZXNzYWdlIERpZ2VzdCIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYXNoLmMgYi9jcnlwdG8vc2hhc2guYwppbmRleCAyMmZkOTQzLi43NmY3NGI5IDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhc2guYworKysgYi9jcnlwdG8vc2hhc2guYwpAQCAtMzEwLDcgKzMxMCwxMyBAQAogCiBzdGF0aWMgaW50IHNoYXNoX2FzeW5jX2ltcG9ydChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxLCBjb25zdCB2b2lkICppbikKIHsKLQlyZXR1cm4gY3J5cHRvX3NoYXNoX2ltcG9ydChhaGFzaF9yZXF1ZXN0X2N0eChyZXEpLCBpbik7CisJc3RydWN0IGNyeXB0b19zaGFzaCAqKmN0eCA9IGNyeXB0b19haGFzaF9jdHgoY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpKTsKKwlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYyA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7CisKKwlkZXNjLT50Zm0gPSAqY3R4OworCWRlc2MtPmZsYWdzID0gcmVxLT5iYXNlLmZsYWdzOworCisJcmV0dXJuIGNyeXB0b19zaGFzaF9pbXBvcnQoZGVzYywgaW4pOwogfQogCiBzdGF0aWMgdm9pZCBjcnlwdG9fZXhpdF9zaGFzaF9vcHNfYXN5bmMoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKZGlmZiAtLWdpdCBhL2NyeXB0by90Y3J5cHQuYyBiL2NyeXB0by90Y3J5cHQuYwppbmRleCAzY2E2OGY5Li45YWFjNWU1IDEwMDY0NAotLS0gYS9jcnlwdG8vdGNyeXB0LmMKKysrIGIvY3J5cHRvL3RjcnlwdC5jCkBAIC04LDYgKzgsMTMgQEAKICAqIENvcHlyaWdodCAoYykgMjAwMiBKZWFuLUZyYW5jb2lzIERpdmUgPGplZkBsaW51eGJlLm9yZz4KICAqIENvcHlyaWdodCAoYykgMjAwNyBOb2tpYSBTaWVtZW5zIE5ldHdvcmtzCiAgKgorICogVXBkYXRlZCBSRkM0MTA2IEFFUy1HQ00gdGVzdGluZy4KKyAqICAgIEF1dGhvcnM6IEFpZGFuIE8nTWFob255IChhaWRhbi5vLm1haG9ueUBpbnRlbC5jb20pCisgKiAgICAgICAgICAgICBBZHJpYW4gSG9iYW4gPGFkcmlhbi5ob2JhbkBpbnRlbC5jb20+CisgKiAgICAgICAgICAgICBHYWJyaWVsZSBQYW9sb25pIDxnYWJyaWVsZS5wYW9sb25pQGludGVsLmNvbT4KKyAqICAgICAgICAgICAgIFRhZGV1c3ogU3RydWsgKHRhZGV1c3ouc3RydWtAaW50ZWwuY29tKQorICogICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKICAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKQEAgLTk4MCw2ICs5ODcsMTAgQEAKIAkJcmV0ICs9IHRjcnlwdF90ZXN0KCJhbnNpX2Nwcm5nIik7CiAJCWJyZWFrOwogCisJY2FzZSAxNTE6CisJCXJldCArPSB0Y3J5cHRfdGVzdCgicmZjNDEwNihnY20oYWVzKSkiKTsKKwkJYnJlYWs7CisKIAljYXNlIDIwMDoKIAkJdGVzdF9jaXBoZXJfc3BlZWQoImVjYihhZXMpIiwgRU5DUllQVCwgc2VjLCBOVUxMLCAwLAogCQkJCXNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTsKZGlmZiAtLWdpdCBhL2NyeXB0by90ZXN0bWdyLmMgYi9jcnlwdG8vdGVzdG1nci5jCmluZGV4IGZhOGM4ZjcuLjI3ZWE5ZmUgMTAwNjQ0Ci0tLSBhL2NyeXB0by90ZXN0bWdyLmMKKysrIGIvY3J5cHRvL3Rlc3RtZ3IuYwpAQCAtNiw2ICs2LDEzIEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDcgTm9raWEgU2llbWVucyBOZXR3b3JrcwogICogQ29weXJpZ2h0IChjKSAyMDA4IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KICAqCisgKiBVcGRhdGVkIFJGQzQxMDYgQUVTLUdDTSB0ZXN0aW5nLgorICogICAgQXV0aG9yczogQWlkYW4gTydNYWhvbnkgKGFpZGFuLm8ubWFob255QGludGVsLmNvbSkKKyAqICAgICAgICAgICAgIEFkcmlhbiBIb2JhbiA8YWRyaWFuLmhvYmFuQGludGVsLmNvbT4KKyAqICAgICAgICAgICAgIEdhYnJpZWxlIFBhb2xvbmkgPGdhYnJpZWxlLnBhb2xvbmlAaW50ZWwuY29tPgorICogICAgICAgICAgICAgVGFkZXVzeiBTdHJ1ayAodGFkZXVzei5zdHJ1a0BpbnRlbC5jb20pCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTAsIEludGVsIENvcnBvcmF0aW9uLgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQogICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQpAQCAtMjI0Miw2ICsyMjQ5LDIzIEBACiAJCQl9CiAJCX0KIAl9LCB7CisJCS5hbGcgPSAicmZjNDEwNihnY20oYWVzKSkiLAorCQkudGVzdCA9IGFsZ190ZXN0X2FlYWQsCisJCS5zdWl0ZSA9IHsKKwkJCS5hZWFkID0geworCQkJCS5lbmMgPSB7CisJCQkJCS52ZWNzID0gYWVzX2djbV9yZmM0MTA2X2VuY190dl90ZW1wbGF0ZSwKKwkJCQkJLmNvdW50ID0gQUVTX0dDTV80MTA2X0VOQ19URVNUX1ZFQ1RPUlMKKwkJCQl9LAorCQkJCS5kZWMgPSB7CisJCQkJCS52ZWNzID0gYWVzX2djbV9yZmM0MTA2X2RlY190dl90ZW1wbGF0ZSwKKwkJCQkJLmNvdW50ID0gQUVTX0dDTV80MTA2X0RFQ19URVNUX1ZFQ1RPUlMKKwkJCQl9CisJCQl9CisJCX0KKwl9LCB7CisKKwogCQkuYWxnID0gInJmYzQzMDkoY2NtKGFlcykpIiwKIAkJLnRlc3QgPSBhbGdfdGVzdF9hZWFkLAogCQkuZmlwc19hbGxvd2VkID0gMSwKZGlmZiAtLWdpdCBhL2NyeXB0by90ZXN0bWdyLmggYi9jcnlwdG8vdGVzdG1nci5oCmluZGV4IDc0ZTM1MzcuLjgzNGFmN2YgMTAwNjQ0Ci0tLSBhL2NyeXB0by90ZXN0bWdyLmgKKysrIGIvY3J5cHRvL3Rlc3RtZ3IuaApAQCAtNiw2ICs2LDE1IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDcgTm9raWEgU2llbWVucyBOZXR3b3JrcwogICogQ29weXJpZ2h0IChjKSAyMDA4IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KICAqCisgKiBVcGRhdGVkIFJGQzQxMDYgQUVTLUdDTSB0ZXN0aW5nLiBTb21lIHRlc3QgdmVjdG9ycyB3ZXJlIHRha2VuIGZyb20KKyAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2dyb3Vwcy9TVC90b29sa2l0L0JDTS9kb2N1bWVudHMvcHJvcG9zZWRtb2Rlcy8KKyAqIGdjbS9nY20tdGVzdC12ZWN0b3JzLnRhci5negorICogICAgIEF1dGhvcnM6IEFpZGFuIE8nTWFob255IChhaWRhbi5vLm1haG9ueUBpbnRlbC5jb20pCisgKiAgICAgICAgICAgICAgQWRyaWFuIEhvYmFuIDxhZHJpYW4uaG9iYW5AaW50ZWwuY29tPgorICogICAgICAgICAgICAgIEdhYnJpZWxlIFBhb2xvbmkgPGdhYnJpZWxlLnBhb2xvbmlAaW50ZWwuY29tPgorICogICAgICAgICAgICAgIFRhZGV1c3ogU3RydWsgKHRhZGV1c3ouc3RydWtAaW50ZWwuY29tKQorICogICAgIENvcHlyaWdodCAoYykgMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCiAgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCkBAIC0yOTQ3LDYgKzI5NTYsOCBAQAogI2RlZmluZSBBRVNfQ1RSXzM2ODZfREVDX1RFU1RfVkVDVE9SUyA2CiAjZGVmaW5lIEFFU19HQ01fRU5DX1RFU1RfVkVDVE9SUyA5CiAjZGVmaW5lIEFFU19HQ01fREVDX1RFU1RfVkVDVE9SUyA4CisjZGVmaW5lIEFFU19HQ01fNDEwNl9FTkNfVEVTVF9WRUNUT1JTIDcKKyNkZWZpbmUgQUVTX0dDTV80MTA2X0RFQ19URVNUX1ZFQ1RPUlMgNwogI2RlZmluZSBBRVNfQ0NNX0VOQ19URVNUX1ZFQ1RPUlMgNwogI2RlZmluZSBBRVNfQ0NNX0RFQ19URVNUX1ZFQ1RPUlMgNwogI2RlZmluZSBBRVNfQ0NNXzQzMDlfRU5DX1RFU1RfVkVDVE9SUyA3CkBAIC01ODI5LDYgKzU4NDAsMzU2IEBACiAJfQogfTsKIAorc3RhdGljIHN0cnVjdCBhZWFkX3Rlc3R2ZWMgYWVzX2djbV9yZmM0MTA2X2VuY190dl90ZW1wbGF0ZVtdID0geworICAgICAgICB7IC8qIEdlbmVyYXRlZCB1c2luZyBDcnlwdG8rKyAqLworCQkua2V5ICAgID0gemVyb2VkX3N0cmluZywKKwkJLmtsZW4JPSAyMCwKKyAgICAgICAgICAgICAgICAuaXYgICAgID0gemVyb2VkX3N0cmluZywKKyAgICAgICAgICAgICAgICAuaW5wdXQgID0gemVyb2VkX3N0cmluZywKKyAgICAgICAgICAgICAgICAuaWxlbiAgID0gMTYsCisgICAgICAgICAgICAgICAgLmFzc29jICA9IHplcm9lZF9zdHJpbmcsCisgICAgICAgICAgICAgICAgLmFsZW4gICA9IDgsCisJCS5yZXN1bHQJPSAiXHgwM1x4ODhceERBXHhDRVx4NjBceEI2XHhBM1x4OTIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceEYzXHgyOFx4QzJceEI5XHg3MVx4QjJceEZFXHg3OCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4OTdceEZFXHg0Q1x4MjNceDM3XHg0Mlx4MDFceEUwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHg4MVx4OUZceDhEXHhDNVx4RDdceDQxXHhBMFx4MUIiLAorCQkucmxlbgk9IDMyLAorICAgICAgICB9LHsKKwkJLmtleSAgICA9ICJceGZlXHhmZlx4ZTlceDkyXHg4Nlx4NjVceDczXHgxYyIKKwkJCSAgIlx4NmRceDZhXHg4Zlx4OTRceDY3XHgzMFx4ODNceDA4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMCIsCisJCS5rbGVuCT0gMjAsCisgICAgICAgICAgICAgICAgLml2ICAgICA9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgICAgICAgICAgIC5pbnB1dCAgPSB6ZXJvZWRfc3RyaW5nLAorICAgICAgICAgICAgICAgIC5pbGVuICAgPSAxNiwKKyAgICAgICAgICAgICAgICAuYXNzb2MgID0gemVyb2VkX3N0cmluZywKKyAgICAgICAgICAgICAgICAuYWxlbiAgID0gOCwKKwkJLnJlc3VsdAk9ICJceEMwXHgwRFx4OEJceDQyXHgwRlx4OEZceDM0XHgxOCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ODhceEIxXHhDNVx4QkNceEM1XHhCNlx4RDZceDI4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHg2QVx4OURceERGXHgxMVx4NUVceEZFXHg1RVx4OUQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDJGXHg3MFx4NDRceDkyXHhGN1x4RjJceEUzXHhFRiIsCisJCS5ybGVuCT0gMzIsCisKKyAgICAgICAgfSwgeworCQkua2V5ICAgID0gIlx4ZmVceGZmXHhlOVx4OTJceDg2XHg2NVx4NzNceDFjIgorCQkJICAiXHg2ZFx4NmFceDhmXHg5NFx4NjdceDMwXHg4M1x4MDgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwIiwKKwkJLmtsZW4JPSAyMCwKKyAgICAgICAgICAgICAgICAuaXYgICAgID0gemVyb2VkX3N0cmluZywKKyAgICAgICAgICAgICAgICAuaW5wdXQgID0gIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiLAorICAgICAgICAgICAgICAgIC5pbGVuICAgPSAxNiwKKyAgICAgICAgICAgICAgICAuYXNzb2MgID0gemVyb2VkX3N0cmluZywKKyAgICAgICAgICAgICAgICAuYWxlbiAgID0gOCwKKwkJLnJlc3VsdAk9ICJceDRCXHhCMVx4QjVceEUzXHgyNVx4NzFceDcwXHhERSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4N0ZceEM5XHg5Q1x4QTVceDE0XHgxOVx4RjJceEFDIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwQlx4OEZceDg4XHg2OVx4MTdceEU2XHhCNFx4M0MiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceEIxXHg2OFx4RkRceDE0XHg1Mlx4NjRceDYxXHhCMiIsCisJCS5ybGVuCT0gMzIsCisgICAgICAgIH0sIHsKKwkJLmtleSAgICA9ICJceGZlXHhmZlx4ZTlceDkyXHg4Nlx4NjVceDczXHgxYyIKKwkJCSAgIlx4NmRceDZhXHg4Zlx4OTRceDY3XHgzMFx4ODNceDA4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMCIsCisJCS5rbGVuCT0gMjAsCisgICAgICAgICAgICAgICAgLml2ICAgICA9IHplcm9lZF9zdHJpbmcsCisgICAgICAgICAgICAgICAgLmlucHV0ICA9ICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIiwKKyAgICAgICAgICAgICAgICAuaWxlbiAgID0gMTYsCisgICAgICAgICAgICAgICAgLmFzc29jICA9ICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIsCisgICAgICAgICAgICAgICAgLmFsZW4gICA9IDgsCisJCS5yZXN1bHQJPSAiXHg0Qlx4QjFceEI1XHhFM1x4MjVceDcxXHg3MFx4REUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDdGXHhDOVx4OUNceEE1XHgxNFx4MTlceEYyXHhBQyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4OTBceDkyXHhCN1x4RTNceDVGXHhBM1x4OUFceDYzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHg3RVx4RDdceDFGXHhEOFx4RDNceDdDXHg0Qlx4RjUiLAorCQkucmxlbgk9IDMyLAorICAgICAgICB9LCB7CisJCS5rZXkgICAgPSAiXHhmZVx4ZmZceGU5XHg5Mlx4ODZceDY1XHg3M1x4MWMiCisJCQkgICJceDZkXHg2YVx4OGZceDk0XHg2N1x4MzBceDgzXHgwOCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDBceDAwXHgwMFx4MDAiLAorCQkua2xlbgk9IDIwLAorICAgICAgICAgICAgICAgIC5pdiAgICAgPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgICAgICAgICAgICAuaW5wdXQgID0gIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiLAorICAgICAgICAgICAgICAgIC5pbGVuICAgPSAxNiwKKyAgICAgICAgICAgICAgICAuYXNzb2MgID0gIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIiwKKyAgICAgICAgICAgICAgICAuYWxlbiAgID0gOCwKKwkJLnJlc3VsdAk9ICJceEMxXHgwQ1x4OEFceDQzXHgwRVx4OEVceDM1XHgxOSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ODlceEIwXHhDNFx4QkRceEM0XHhCN1x4RDdceDI5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHg2NFx4NTBceEY5XHgzMlx4MTNceEZCXHg3NFx4NjEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceEY0XHhFRFx4NTJceEQzXHhDNVx4MTBceDU1XHgzQyIsCisJCS5ybGVuCT0gMzIsCisgICAgICAgIH0sIHsKKwkJLmtleSAgICA9ICJceGZlXHhmZlx4ZTlceDkyXHg4Nlx4NjVceDczXHgxYyIKKwkJCSAgIlx4NmRceDZhXHg4Zlx4OTRceDY3XHgzMFx4ODNceDA4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMCIsCisJCS5rbGVuCT0gMjAsCisgICAgICAgICAgICAgICAgLml2ICAgICA9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgICAgICAgICAgIC5pbnB1dCAgPSAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIsCisgICAgICAgICAgICAgICAgLmlsZW4gICA9IDY0LAorICAgICAgICAgICAgICAgIC5hc3NvYyAgPSAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiLAorICAgICAgICAgICAgICAgIC5hbGVuICAgPSA4LAorCQkucmVzdWx0CT0gIlx4QzFceDBDXHg4QVx4NDNceDBFXHg4RVx4MzVceDE5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHg4OVx4QjBceEM0XHhCRFx4QzRceEI3XHhEN1x4MjkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDk4XHgxNFx4QTFceDQyXHgzN1x4ODBceEZEXHg5MCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4NjhceDEyXHgwMVx4QThceDkxXHg4OVx4QjlceDgzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHg1Qlx4MTFceDc3XHgxMlx4OUJceEZGXHgyNFx4ODkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDk0XHg1Rlx4MThceDEyXHhCQVx4MjdceDA5XHgzOSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4OTlceDk2XHg3Nlx4NDJceDE1XHgxQ1x4Q0RceENCIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhEQ1x4RDNceERBXHg2NVx4NzNceEFGXHg4MFx4Q0QiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceEQyXHhCNlx4QzJceDRBXHg3Nlx4QzJceDkyXHg4NSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4QkRceENGXHg2Mlx4OThceDU4XHgxNFx4RTVceEJEIiwKKwkJLnJsZW4JPSA4MCwKKyAgICAgICAgfSwgeworCQkua2V5ICAgID0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwIiwKKwkJLmtsZW4JPSAyMCwKKyAgICAgICAgICAgICAgICAuaXYgICAgID0gIlx4MDBceDAwXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMCIsCisgICAgICAgICAgICAgICAgLmlucHV0ICA9ICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiLAorICAgICAgICAgICAgICAgIC5pbGVuICAgPSAxOTIsCisgICAgICAgICAgICAgICAgLmFzc29jICA9ICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4YWFceGFhXHhhYVx4YWEiLAorICAgICAgICAgICAgICAgIC5hbGVuICAgPSAxMiwKKwkJLnJlc3VsdAk9ICJceEMxXHg3Nlx4MzNceDg1XHhFMlx4OUJceDVGXHhERSIKKwkJCSAgIlx4REVceDg5XHgzRFx4NDJceEU3XHhDOVx4NjlceDhBIgorCQkJICAiXHg0NFx4NkRceEMzXHg4OFx4NDZceDJFXHhDMlx4MDEiCisJCQkgICJceDVFXHhGNlx4MENceDM5XHhGMFx4QzRceEE1XHg4MiIKKwkJCSAgIlx4Q0RceEU4XHgzMVx4Q0NceDBBXHg0Q1x4RTRceDQ0IgorCQkJICAiXHg0MVx4QTlceDgyXHg2Rlx4MjJceEExXHgyM1x4MUEiCisJCQkgICJceEE4XHhFM1x4MTZceEZEXHgzMVx4NUNceDI3XHgzMSIKKwkJCSAgIlx4RjFceDdGXHgwMVx4NjNceEEzXHhBRlx4NzBceEExIgorCQkJICAiXHhDRlx4MDdceDU3XHg0MVx4NjdceEQwXHhDNFx4NDIiCisJCQkgICJceERCXHgxOFx4QzZceDRDXHg0Q1x4RTBceDNEXHg5RiIKKwkJCSAgIlx4MDVceDA3XHhGQlx4MTNceDdEXHg0QVx4Q0FceDVCIgorCQkJICAiXHhGMFx4QkZceDY0XHg3RVx4MDVceEIxXHg3Mlx4RUUiCisJCQkgICJceDdDXHgzQlx4RDRceENEXHgxNFx4MDNceEIyXHgyQyIKKwkJCSAgIlx4RDNceEE5XHhFRVx4RkFceDE3XHhGQ1x4OUNceERGIgorCQkJICAiXHhDN1x4NzVceDQwXHhGRlx4QUVceEFEXHgxRVx4NTkiCisJCQkgICJceDJGXHgzMFx4MjRceEZCXHhBRFx4NkJceDEwXHhGQSIKKwkJCSAgIlx4NkNceDlGXHg1Qlx4RTdceDI1XHhENVx4RDBceDI1IgorCQkJICAiXHhBQ1x4NEFceDRCXHhEQVx4RkNceDdBXHg4NVx4MUIiCisJCQkgICJceDdFXHgxM1x4MDZceDgyXHgwOFx4MTdceEE0XHgzNSIKKwkJCSAgIlx4RUNceEM1XHg4RFx4NjNceDk2XHg4MVx4MEFceDhGIgorCQkJICAiXHhBM1x4MDVceDM4XHg5NVx4MjBceDFBXHg0N1x4MDQiCisJCQkgICJceDZGXHg2RFx4REFceDhGXHhFRlx4QzFceDc2XHgzNSIKKwkJCSAgIlx4NkJceEM3XHg0RFx4MEZceDk0XHgxMlx4Q0FceDNFIgorCQkJICAiXHgyRVx4RDVceDAzXHgyRVx4ODZceDdFXHhBQVx4M0IiCisJCQkgICJceDM3XHgwOFx4MUNceENGXHhCQVx4NURceDcxXHg0NiIKKwkJCSAgIlx4ODBceDcyXHhCMFx4NENceDgyXHgwRFx4NjBceDNDIiwKKwkJLnJsZW4JPSAyMDgsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBhZWFkX3Rlc3R2ZWMgYWVzX2djbV9yZmM0MTA2X2RlY190dl90ZW1wbGF0ZVtdID0geworICAgICAgICB7IC8qIEdlbmVyYXRlZCB1c2luZyBDcnlwdG8rKyAqLworCQkua2V5ICAgID0gemVyb2VkX3N0cmluZywKKwkJLmtsZW4JPSAyMCwKKyAgICAgICAgICAgICAgICAuaXYgICAgID0gemVyb2VkX3N0cmluZywKKwkJLmlucHV0CT0gIlx4MDNceDg4XHhEQVx4Q0VceDYwXHhCNlx4QTNceDkyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhGM1x4MjhceEMyXHhCOVx4NzFceEIyXHhGRVx4NzgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDk3XHhGRVx4NENceDIzXHgzN1x4NDJceDAxXHhFMCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ODFceDlGXHg4RFx4QzVceEQ3XHg0MVx4QTBceDFCIiwKKwkJLmlsZW4JPSAzMiwKKyAgICAgICAgICAgICAgICAuYXNzb2MgID0gemVyb2VkX3N0cmluZywKKyAgICAgICAgICAgICAgICAuYWxlbiAgID0gOCwKKyAgICAgICAgICAgICAgICAucmVzdWx0ID0gemVyb2VkX3N0cmluZywKKyAgICAgICAgICAgICAgICAucmxlbiAgID0gMTYsCisKKyAgICAgICAgfSx7CisJCS5rZXkgICAgPSAiXHhmZVx4ZmZceGU5XHg5Mlx4ODZceDY1XHg3M1x4MWMiCisJCQkgICJceDZkXHg2YVx4OGZceDk0XHg2N1x4MzBceDgzXHgwOCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDBceDAwXHgwMFx4MDAiLAorCQkua2xlbgk9IDIwLAorICAgICAgICAgICAgICAgIC5pdiAgICAgPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwIiwKKwkJLmlucHV0CT0gIlx4QzBceDBEXHg4Qlx4NDJceDBGXHg4Rlx4MzRceDE4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHg4OFx4QjFceEM1XHhCQ1x4QzVceEI2XHhENlx4MjgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDZBXHg5RFx4REZceDExXHg1RVx4RkVceDVFXHg5RCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MkZceDcwXHg0NFx4OTJceEY3XHhGMlx4RTNceEVGIiwKKwkJLmlsZW4JPSAzMiwKKyAgICAgICAgICAgICAgICAuYXNzb2MgID0gemVyb2VkX3N0cmluZywKKyAgICAgICAgICAgICAgICAuYWxlbiAgID0gOCwKKyAgICAgICAgICAgICAgICAucmVzdWx0ID0gemVyb2VkX3N0cmluZywKKyAgICAgICAgICAgICAgICAucmxlbiAgID0gMTYsCisgICAgICAgIH0sIHsKKwkJLmtleSAgICA9ICJceGZlXHhmZlx4ZTlceDkyXHg4Nlx4NjVceDczXHgxYyIKKwkJCSAgIlx4NmRceDZhXHg4Zlx4OTRceDY3XHgzMFx4ODNceDA4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMCIsCisJCS5rbGVuCT0gMjAsCisgICAgICAgICAgICAgICAgLml2ICAgICA9IHplcm9lZF9zdHJpbmcsCisJCS5pbnB1dAk9ICJceDRCXHhCMVx4QjVceEUzXHgyNVx4NzFceDcwXHhERSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4N0ZceEM5XHg5Q1x4QTVceDE0XHgxOVx4RjJceEFDIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwQlx4OEZceDg4XHg2OVx4MTdceEU2XHhCNFx4M0MiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceEIxXHg2OFx4RkRceDE0XHg1Mlx4NjRceDYxXHhCMiIsCisJCS5pbGVuCT0gMzIsCisgICAgICAgICAgICAgICAgLmFzc29jICA9IHplcm9lZF9zdHJpbmcsCisgICAgICAgICAgICAgICAgLmFsZW4gICA9IDgsCisgICAgICAgICAgICAgICAgLnJlc3VsdCA9ICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIiwKKyAgICAgICAgICAgICAgICAucmxlbiAgID0gMTYsCisgICAgICAgIH0sIHsKKwkJLmtleSAgICA9ICJceGZlXHhmZlx4ZTlceDkyXHg4Nlx4NjVceDczXHgxYyIKKwkJCSAgIlx4NmRceDZhXHg4Zlx4OTRceDY3XHgzMFx4ODNceDA4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMCIsCisJCS5rbGVuCT0gMjAsCisgICAgICAgICAgICAgICAgLml2ICAgICA9IHplcm9lZF9zdHJpbmcsCisJCS5pbnB1dAk9ICJceDRCXHhCMVx4QjVceEUzXHgyNVx4NzFceDcwXHhERSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4N0ZceEM5XHg5Q1x4QTVceDE0XHgxOVx4RjJceEFDIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHg5MFx4OTJceEI3XHhFM1x4NUZceEEzXHg5QVx4NjMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDdFXHhEN1x4MUZceEQ4XHhEM1x4N0NceDRCXHhGNSIsCisJCS5pbGVuCT0gMzIsCisgICAgICAgICAgICAgICAgLmFzc29jICA9ICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIsCisgICAgICAgICAgICAgICAgLmFsZW4gICA9IDgsCisgICAgICAgICAgICAgICAgLnJlc3VsdCA9ICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIiwKKyAgICAgICAgICAgICAgICAucmxlbiAgID0gMTYsCisKKyAgICAgICAgfSwgeworCQkua2V5ICAgID0gIlx4ZmVceGZmXHhlOVx4OTJceDg2XHg2NVx4NzNceDFjIgorCQkJICAiXHg2ZFx4NmFceDhmXHg5NFx4NjdceDMwXHg4M1x4MDgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwIiwKKwkJLmtsZW4JPSAyMCwKKyAgICAgICAgICAgICAgICAuaXYgICAgID0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMCIsCisJCS5pbnB1dAk9ICJceEMxXHgwQ1x4OEFceDQzXHgwRVx4OEVceDM1XHgxOSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ODlceEIwXHhDNFx4QkRceEM0XHhCN1x4RDdceDI5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHg2NFx4NTBceEY5XHgzMlx4MTNceEZCXHg3NFx4NjEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceEY0XHhFRFx4NTJceEQzXHhDNVx4MTBceDU1XHgzQyIsCisJCS5pbGVuCT0gMzIsCisgICAgICAgICAgICAgICAgLmFzc29jICA9ICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIsCisgICAgICAgICAgICAgICAgLmFsZW4gICA9IDgsCisgICAgICAgICAgICAgICAgLnJlc3VsdCA9ICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIiwKKyAgICAgICAgICAgICAgICAucmxlbiAgID0gMTYsCisgICAgICAgIH0sIHsKKwkJLmtleSAgICA9ICJceGZlXHhmZlx4ZTlceDkyXHg4Nlx4NjVceDczXHgxYyIKKwkJCSAgIlx4NmRceDZhXHg4Zlx4OTRceDY3XHgzMFx4ODNceDA4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMCIsCisJCS5rbGVuCT0gMjAsCisgICAgICAgICAgICAgICAgLml2ICAgICA9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDBceDAwXHgwMFx4MDAiLAorCQkuaW5wdXQJPSAiXHhDMVx4MENceDhBXHg0M1x4MEVceDhFXHgzNVx4MTkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDg5XHhCMFx4QzRceEJEXHhDNFx4QjdceEQ3XHgyOSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4OThceDE0XHhBMVx4NDJceDM3XHg4MFx4RkRceDkwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHg2OFx4MTJceDAxXHhBOFx4OTFceDg5XHhCOVx4ODMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDVCXHgxMVx4NzdceDEyXHg5Qlx4RkZceDI0XHg4OSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4OTRceDVGXHgxOFx4MTJceEJBXHgyN1x4MDlceDM5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHg5OVx4OTZceDc2XHg0Mlx4MTVceDFDXHhDRFx4Q0IiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceERDXHhEM1x4REFceDY1XHg3M1x4QUZceDgwXHhDRCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4RDJceEI2XHhDMlx4NEFceDc2XHhDMlx4OTJceDg1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhCRFx4Q0ZceDYyXHg5OFx4NThceDE0XHhFNVx4QkQiLAorCQkuaWxlbgk9IDgwLAorICAgICAgICAgICAgICAgIC5hc3NvYyAgPSAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiLAorICAgICAgICAgICAgICAgIC5hbGVuICAgPSA4LAorICAgICAgICAgICAgICAgIC5yZXN1bHQgPSAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIsCisgICAgICAgICAgICAgICAgLnJsZW4gICA9IDY0LAorICAgICAgICB9LCB7CisJCS5rZXkgICAgPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MDBceDAwXHgwMFx4MDAiLAorCQkua2xlbgk9IDIwLAorICAgICAgICAgICAgICAgIC5pdiAgICAgPSAiXHgwMFx4MDBceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZWYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwIiwKKwkJLmlucHV0CT0gIlx4QzFceDc2XHgzM1x4ODVceEUyXHg5Qlx4NUZceERFIgorCQkJICAiXHhERVx4ODlceDNEXHg0Mlx4RTdceEM5XHg2OVx4OEEiCisJCQkgICJceDQ0XHg2RFx4QzNceDg4XHg0Nlx4MkVceEMyXHgwMSIKKwkJCSAgIlx4NUVceEY2XHgwQ1x4MzlceEYwXHhDNFx4QTVceDgyIgorCQkJICAiXHhDRFx4RThceDMxXHhDQ1x4MEFceDRDXHhFNFx4NDQiCisJCQkgICJceDQxXHhBOVx4ODJceDZGXHgyMlx4QTFceDIzXHgxQSIKKwkJCSAgIlx4QThceEUzXHgxNlx4RkRceDMxXHg1Q1x4MjdceDMxIgorCQkJICAiXHhGMVx4N0ZceDAxXHg2M1x4QTNceEFGXHg3MFx4QTEiCisJCQkgICJceENGXHgwN1x4NTdceDQxXHg2N1x4RDBceEM0XHg0MiIKKwkJCSAgIlx4REJceDE4XHhDNlx4NENceDRDXHhFMFx4M0RceDlGIgorCQkJICAiXHgwNVx4MDdceEZCXHgxM1x4N0RceDRBXHhDQVx4NUIiCisJCQkgICJceEYwXHhCRlx4NjRceDdFXHgwNVx4QjFceDcyXHhFRSIKKwkJCSAgIlx4N0NceDNCXHhENFx4Q0RceDE0XHgwM1x4QjJceDJDIgorCQkJICAiXHhEM1x4QTlceEVFXHhGQVx4MTdceEZDXHg5Q1x4REYiCisJCQkgICJceEM3XHg3NVx4NDBceEZGXHhBRVx4QURceDFFXHg1OSIKKwkJCSAgIlx4MkZceDMwXHgyNFx4RkJceEFEXHg2Qlx4MTBceEZBIgorCQkJICAiXHg2Q1x4OUZceDVCXHhFN1x4MjVceEQ1XHhEMFx4MjUiCisJCQkgICJceEFDXHg0QVx4NEJceERBXHhGQ1x4N0FceDg1XHgxQiIKKwkJCSAgIlx4N0VceDEzXHgwNlx4ODJceDA4XHgxN1x4QTRceDM1IgorCQkJICAiXHhFQ1x4QzVceDhEXHg2M1x4OTZceDgxXHgwQVx4OEYiCisJCQkgICJceEEzXHgwNVx4MzhceDk1XHgyMFx4MUFceDQ3XHgwNCIKKwkJCSAgIlx4NkZceDZEXHhEQVx4OEZceEVGXHhDMVx4NzZceDM1IgorCQkJICAiXHg2Qlx4QzdceDREXHgwRlx4OTRceDEyXHhDQVx4M0UiCisJCQkgICJceDJFXHhENVx4MDNceDJFXHg4Nlx4N0VceEFBXHgzQiIKKwkJCSAgIlx4MzdceDA4XHgxQ1x4Q0ZceEJBXHg1RFx4NzFceDQ2IgorCQkJICAiXHg4MFx4NzJceEIwXHg0Q1x4ODJceDBEXHg2MFx4M0MiLAorCQkuaWxlbgk9IDIwOCwKKyAgICAgICAgICAgICAgICAuYXNzb2MgID0gIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhhYVx4YWFceGFhXHhhYSIsCisgICAgICAgICAgICAgICAgLmFsZW4gICA9IDEyLAorICAgICAgICAgICAgICAgIC5yZXN1bHQgPSAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIiwKKyAgICAgICAgICAgICAgICAucmxlbiAgID0gMTkyLAorCisJfQorfTsKKwogc3RhdGljIHN0cnVjdCBhZWFkX3Rlc3R2ZWMgYWVzX2NjbV9lbmNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7IC8qIEZyb20gUkZDIDM2MTAgKi8KIAkJLmtleQk9ICJceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjNyIKZGlmZiAtLWdpdCBhL2NyeXB0by96bGliLmMgYi9jcnlwdG8vemxpYi5jCmluZGV4IGMzMDE1NzMzLi43MzliOGZjIDEwMDY0NAotLS0gYS9jcnlwdG8vemxpYi5jCisrKyBiL2NyeXB0by96bGliLmMKQEAgLTk1LDExICs5NSwxMCBAQAogCXpsaWJfY29tcF9leGl0KGN0eCk7CiAKIAl3b3Jrc3BhY2VzaXplID0gemxpYl9kZWZsYXRlX3dvcmtzcGFjZXNpemUoKTsKLQlzdHJlYW0tPndvcmtzcGFjZSA9IHZtYWxsb2Mod29ya3NwYWNlc2l6ZSk7CisJc3RyZWFtLT53b3Jrc3BhY2UgPSB2emFsbG9jKHdvcmtzcGFjZXNpemUpOwogCWlmICghc3RyZWFtLT53b3Jrc3BhY2UpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0KHN0cmVhbS0+d29ya3NwYWNlLCAwLCB3b3Jrc3BhY2VzaXplKTsKIAlyZXQgPSB6bGliX2RlZmxhdGVJbml0MihzdHJlYW0sCiAJCQkJdGJbWkxJQl9DT01QX0xFVkVMXQogCQkJCQk/IG5sYV9nZXRfdTMyKHRiW1pMSUJfQ09NUF9MRVZFTF0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL0tjb25maWcgYi9kcml2ZXJzL0tjb25maWcKaW5kZXggM2Q5M2IzYS4uZGQwYTViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtODgsNiArODgsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvbGVkcy9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvbmZjL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9hY2Nlc3NpYmlsaXR5L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCBiZjE1Y2U3Li5lZjUxMzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTQwLDcgKzQwLDcgQEAKIAogb2JqLXkJCQkJKz0gc2VyaWFsLwogb2JqLSQoQ09ORklHX1BBUlBPUlQpCQkrPSBwYXJwb3J0Lwotb2JqLXkJCQkJKz0gYmFzZS8gYmxvY2svIG1pc2MvIG1mZC8KK29iai15CQkJCSs9IGJhc2UvIGJsb2NrLyBtaXNjLyBtZmQvIG5mYy8KIG9iai0kKENPTkZJR19OVUJVUykJCSs9IG51YnVzLwogb2JqLXkJCQkJKz0gbWFjaW50b3NoLwogb2JqLSQoQ09ORklHX0lERSkJCSs9IGlkZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaAppbmRleCBiZGJmYWYyMmIuLjk2MmEzY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmgKQEAgLTkzLDcgKzkzLDcgQEAKIAogI2RlZmluZSBBT1BPQkpfQU1MX0NPTlNUQU5UICAgICAgICAgMHgwMQkvKiBJbnRlZ2VyIGlzIGFuIEFNTCBjb25zdGFudCAqLwogI2RlZmluZSBBT1BPQkpfU1RBVElDX1BPSU5URVIgICAgICAgMHgwMgkvKiBEYXRhIGlzIHBhcnQgb2YgYW4gQUNQSSB0YWJsZSwgZG9uJ3QgZGVsZXRlICovCi0jZGVmaW5lIEFPUE9CSl9EQVRBX1ZBTElEICAgICAgICAgICAweDA0CS8qIE9iamVjdCBpcyBpbnRpYWxpemVkIGFuZCBkYXRhIGlzIHZhbGlkICovCisjZGVmaW5lIEFPUE9CSl9EQVRBX1ZBTElEICAgICAgICAgICAweDA0CS8qIE9iamVjdCBpcyBpbml0aWFsaXplZCBhbmQgZGF0YSBpcyB2YWxpZCAqLwogI2RlZmluZSBBT1BPQkpfT0JKRUNUX0lOSVRJQUxJWkVEICAgMHgwOAkvKiBSZWdpb24gaXMgaW5pdGlhbGl6ZWQsIF9SRUcgd2FzIHJ1biAqLwogI2RlZmluZSBBT1BPQkpfU0VUVVBfQ09NUExFVEUgICAgICAgMHgxMAkvKiBSZWdpb24gc2V0dXAgaXMgY29tcGxldGUgKi8KICNkZWZpbmUgQU9QT0JKX0lOVkFMSUQgICAgICAgICAgICAgIDB4MjAJLyogSG9zdCBPUyB3b24ndCBhbGxvdyBhIFJlZ2lvbiBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYXBlaS9laW5qLmMgYi9kcml2ZXJzL2FjcGkvYXBlaS9laW5qLmMKaW5kZXggY2YyOWRmNi4uMDk2YWViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FwZWkvZWluai5jCisrKyBiL2RyaXZlcnMvYWNwaS9hcGVpL2VpbmouYwpAQCAtMzksNyArMzksNyBAQAogI2RlZmluZSBFSU5KX1BGWCAiRUlOSjogIgogCiAjZGVmaW5lIFNQSU5fVU5JVAkJMTAwCQkJLyogMTAwbnMgKi8KLS8qIEZpcm13YXJlIHNob3VsZCByZXNwb25kIHdpdGhpbiAxIG1pbGlzZWNvbmRzICovCisvKiBGaXJtd2FyZSBzaG91bGQgcmVzcG9uZCB3aXRoaW4gMSBtaWxsaXNlY29uZHMgKi8KICNkZWZpbmUgRklSTVdBUkVfVElNRU9VVAkoMSAqIE5TRUNfUEVSX01TRUMpCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYXBlaS9lcnN0LmMgYi9kcml2ZXJzL2FjcGkvYXBlaS9lcnN0LmMKaW5kZXggNTg1MGQzMi4uY2Y2ZGI2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FwZWkvZXJzdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hcGVpL2Vyc3QuYwpAQCAtNTMsNyArNTMsNyBAQAogCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2Vyc3QpKSkKIAogI2RlZmluZSBTUElOX1VOSVQJCTEwMAkJCS8qIDEwMG5zICovCi0vKiBGaXJtd2FyZSBzaG91bGQgcmVzcG9uZCB3aXRoaW4gMSBtaWxpc2Vjb25kcyAqLworLyogRmlybXdhcmUgc2hvdWxkIHJlc3BvbmQgd2l0aGluIDEgbWlsbGlzZWNvbmRzICovCiAjZGVmaW5lIEZJUk1XQVJFX1RJTUVPVVQJKDEgKiBOU0VDX1BFUl9NU0VDKQogI2RlZmluZSBGSVJNV0FSRV9NQVhfU1RBTEwJNTAJCQkvKiA1MHVzICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jIGIvZHJpdmVycy9hY3BpL3NsZWVwLmMKaW5kZXggZmViYjE1M2IuLmM0MjMyMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCkBAIC0zMTksNyArMzE5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgYWNwaV9zdXNwZW5kX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgYWNwaV9zdXNwZW5kX29wcyA9IHsKIAkudmFsaWQgPSBhY3BpX3N1c3BlbmRfc3RhdGVfdmFsaWQsCiAJLmJlZ2luID0gYWNwaV9zdXNwZW5kX2JlZ2luLAogCS5wcmVwYXJlX2xhdGUgPSBhY3BpX3BtX3ByZXBhcmUsCkBAIC0zNDcsNyArMzQ3LDcgQEAKICAqIFRoZSBmb2xsb3dpbmcgY2FsbGJhY2tzIGFyZSB1c2VkIGlmIHRoZSBwcmUtQUNQSSAyLjAgc3VzcGVuZCBvcmRlcmluZyBoYXMKICAqIGJlZW4gcmVxdWVzdGVkLgogICovCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGFjcGlfc3VzcGVuZF9vcHNfb2xkID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBhY3BpX3N1c3BlbmRfb3BzX29sZCA9IHsKIAkudmFsaWQgPSBhY3BpX3N1c3BlbmRfc3RhdGVfdmFsaWQsCiAJLmJlZ2luID0gYWNwaV9zdXNwZW5kX2JlZ2luX29sZCwKIAkucHJlcGFyZV9sYXRlID0gYWNwaV9wbV9wcmVfc3VzcGVuZCwKQEAgLTUwNiw3ICs1MDYsNyBAQAogCWFjcGlfZW5hYmxlX2FsbF9ydW50aW1lX2dwZXMoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9oaWJlcm5hdGlvbl9vcHMgYWNwaV9oaWJlcm5hdGlvbl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2hpYmVybmF0aW9uX29wcyBhY3BpX2hpYmVybmF0aW9uX29wcyA9IHsKIAkuYmVnaW4gPSBhY3BpX2hpYmVybmF0aW9uX2JlZ2luLAogCS5lbmQgPSBhY3BpX3BtX2VuZCwKIAkucHJlX3NuYXBzaG90ID0gYWNwaV9wbV9wcmVwYXJlLApAQCAtNTQ5LDcgKzU0OSw3IEBACiAgKiBUaGUgZm9sbG93aW5nIGNhbGxiYWNrcyBhcmUgdXNlZCBpZiB0aGUgcHJlLUFDUEkgMi4wIHN1c3BlbmQgb3JkZXJpbmcgaGFzCiAgKiBiZWVuIHJlcXVlc3RlZC4KICAqLwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9oaWJlcm5hdGlvbl9vcHMgYWNwaV9oaWJlcm5hdGlvbl9vcHNfb2xkID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9oaWJlcm5hdGlvbl9vcHMgYWNwaV9oaWJlcm5hdGlvbl9vcHNfb2xkID0gewogCS5iZWdpbiA9IGFjcGlfaGliZXJuYXRpb25fYmVnaW5fb2xkLAogCS5lbmQgPSBhY3BpX3BtX2VuZCwKIAkucHJlX3NuYXBzaG90ID0gYWNwaV9wbV9wcmVfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlby5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKaW5kZXggNWNkMDIyOC4uMTVhMGZkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCQkJCXZkLT5icmlnaHRuZXNzLT5sZXZlbHNbcmVxdWVzdF9sZXZlbF0pOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgYWNwaV9iYWNrbGlnaHRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGFjcGlfYmFja2xpZ2h0X29wcyA9IHsKIAkuZ2V0X2JyaWdodG5lc3MgPSBhY3BpX3ZpZGVvX2dldF9icmlnaHRuZXNzLAogCS51cGRhdGVfc3RhdHVzICA9IGFjcGlfdmlkZW9fc2V0X2JyaWdodG5lc3MsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggMGE2YTk0My4uYTMxZmU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC0yMjQwLDcgKzIyNDAsNyBAQAogCQkJaWYgKGlkW0FUQV9JRF9DRkFfS0VZX01HTVRdICYgMSkKIAkJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fV0FSTklORywKIAkJCQkJICAgICAgICJzdXBwb3J0cyBEUk0gZnVuY3Rpb25zIGFuZCBtYXkgIgotCQkJCQkgICAgICAgIm5vdCBiZSBmdWxseSBhY2Nlc3NhYmxlLlxuIik7CisJCQkJCSAgICAgICAibm90IGJlIGZ1bGx5IGFjY2Vzc2libGUuXG4iKTsKIAkJCXNucHJpbnRmKHJldmJ1ZiwgNywgIkNGQSIpOwogCQl9IGVsc2UgewogCQkJc25wcmludGYocmV2YnVmLCA3LCAiQVRBLSVkIiwgYXRhX2lkX21ham9yX3ZlcnNpb24oaWQpKTsKQEAgLTIyNDgsNyArMjI0OCw3IEBACiAJCQlpZiAoYXRhX2lkX2hhc190cG0oaWQpKQogCQkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9XQVJOSU5HLAogCQkJCQkgICAgICAgInN1cHBvcnRzIERSTSBmdW5jdGlvbnMgYW5kIG1heSAiCi0JCQkJCSAgICAgICAibm90IGJlIGZ1bGx5IGFjY2Vzc2FibGUuXG4iKTsKKwkJCQkJICAgICAgICJub3QgYmUgZnVsbHkgYWNjZXNzaWJsZS5cbiIpOwogCQl9CiAKIAkJZGV2LT5uX3NlY3RvcnMgPSBhdGFfaWRfbl9zZWN0b3JzKGlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3ZzYy5jCmluZGV4IGI3NzcxNzYuLmUwNzljZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV92c2MuYwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBtYXAgSU8gcmVnaW9ucyBhbmQgaW50aWFsaXplIGhvc3QgYWNjb3JkaW5nbHkgKi8KKwkvKiBtYXAgSU8gcmVnaW9ucyBhbmQgaW5pdGlhbGl6ZSBob3N0IGFjY29yZGluZ2x5ICovCiAJcmMgPSBwY2ltX2lvbWFwX3JlZ2lvbnMocGRldiwgMSA8PCBWU0NfTU1JT19CQVIsIERSVl9OQU1FKTsKIAlpZiAocmMgPT0gLUVCVVNZKQogCQlwY2ltX3Bpbl9kZXZpY2UocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmMgYi9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmMKaW5kZXggZmZlOWI2NS4uOWY0N2U4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5jCisrKyBiL2RyaXZlcnMvYXRtL2FtYmFzc2Fkb3IuYwpAQCAtMTkyNiw4ICsxOTI2LDkgQEAKICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKICAgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzOwogICBjb25zdCBzdHJ1Y3QgaWhleF9iaW5yZWMgKnJlYzsKKyAgY29uc3QgY2hhciAqZXJybXNnID0gMDsKICAgaW50IHJlczsKLSAgCisKICAgcmVzID0gcmVxdWVzdF9paGV4X2Zpcm13YXJlKCZmdywgImF0bXNhcjExLmZ3IiwgJmRldi0+cGNpX2Rldi0+ZGV2KTsKICAgaWYgKHJlcykgewogICAgIFBSSU5USyAoS0VSTl9FUlIsICJDYW5ub3QgbG9hZCBtaWNyb2NvZGUgZGF0YSIpOwpAQCAtMTkzNyw4ICsxOTM4LDggQEAKICAgLyogRmlyc3QgcmVjb3JkIGNvbnRhaW5zIGp1c3QgdGhlIHN0YXJ0IGFkZHJlc3MgKi8KICAgcmVjID0gKGNvbnN0IHN0cnVjdCBpaGV4X2JpbnJlYyAqKWZ3LT5kYXRhOwogICBpZiAoYmUxNl90b19jcHUocmVjLT5sZW4pICE9IHNpemVvZihfX2JlMzIpIHx8IGJlMzJfdG9fY3B1KHJlYy0+YWRkcikpIHsKLSAgICBQUklOVEsgKEtFUk5fRVJSLCAiQmFkIG1pY3JvY29kZSBkYXRhIChubyBzdGFydCByZWNvcmQpIik7Ci0gICAgcmV0dXJuIC1FSU5WQUw7CisgICAgZXJybXNnID0gIm5vIHN0YXJ0IHJlY29yZCI7CisgICAgZ290byBmYWlsOwogICB9CiAgIHN0YXJ0X2FkZHJlc3MgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKXJlYy0+ZGF0YSk7CiAKQEAgLTE5NTAsMTIgKzE5NTEsMTIgQEAKICAgICBQUklOVEQgKERCR19MT0FELCAic3RhcnRpbmcgcmVnaW9uICgleCwgJXUpIiwgYmUzMl90b19jcHUocmVjLT5hZGRyKSwKIAkgICAgYmUxNl90b19jcHUocmVjLT5sZW4pKTsKICAgICBpZiAoYmUxNl90b19jcHUocmVjLT5sZW4pID4gNCAqIE1BWF9UUkFOU0ZFUl9EQVRBKSB7Ci0JICAgIFBSSU5USyAoS0VSTl9FUlIsICJCYWQgbWljcm9jb2RlIGRhdGEgKHJlY29yZCB0b28gbG9uZykiKTsKLQkgICAgcmV0dXJuIC1FSU5WQUw7CisJICAgIGVycm1zZyA9ICJyZWNvcmQgdG9vIGxvbmciOworCSAgICBnb3RvIGZhaWw7CiAgICAgfQogICAgIGlmIChiZTE2X3RvX2NwdShyZWMtPmxlbikgJiAzKSB7Ci0JICAgIFBSSU5USyAoS0VSTl9FUlIsICJCYWQgbWljcm9jb2RlIGRhdGEgKG9kZCBudW1iZXIgb2YgYnl0ZXMpIik7Ci0JICAgIHJldHVybiAtRUlOVkFMOworCSAgICBlcnJtc2cgPSAib2RkIG51bWJlciBvZiBieXRlcyI7CisJICAgIGdvdG8gZmFpbDsKICAgICB9CiAgICAgcmVzID0gbG9hZGVyX3dyaXRlKGxiLCBkZXYsIHJlYyk7CiAgICAgaWYgKHJlcykKQEAgLTE5NzAsNiArMTk3MSwxMCBAQAogICAgIHJlcyA9IGxvYWRlcl9zdGFydChsYiwgZGV2LCBzdGFydF9hZGRyZXNzKTsKIAogICByZXR1cm4gcmVzOworZmFpbDoKKyAgcmVsZWFzZV9maXJtd2FyZShmdyk7CisgIFBSSU5USyhLRVJOX0VSUiwgIkJhZCBtaWNyb2NvZGUgZGF0YSAoJXMpIiwgZXJybXNnKTsKKyAgcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qKioqKioqKioqIGdpdmUgYWRhcHRlciBwYXJhbWV0ZXJzICoqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5oIGIvZHJpdmVycy9hdG0vaWR0NzcyNTIuaAppbmRleCA1MDQyYmIyLi5mNTNhNDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5oCisrKyBiL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmgKQEAgLTU3Miw3ICs1NzIsNyBAQAogI2RlZmluZSBTQVJfU1RBVF9UU1FGICAgICAgIDB4MDAwMDEwMDAgLyogVHJhbnNtaXQgU3RhdHVzIFF1ZXVlIGZ1bGwgICAgICAqLwogI2RlZmluZSBTQVJfU1RBVF9UTVJPRiAgICAgIDB4MDAwMDA4MDAgLyogVGltZXIgb3ZlcmZsb3cgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTQVJfU1RBVF9QSFlJICAgICAgIDB4MDAwMDA0MDAgLyogUEhZIGRldmljZSBJbnRlcnJ1cHQgZmxhZyAgICAgICAqLwotI2RlZmluZSBTQVJfU1RBVF9DTURCWiAgICAgIDB4MDAwMDAyMDAgLyogQUJSIFNBUiBDb21hbmQgQnVzeSBGbGFnICAgICAgICAqLworI2RlZmluZSBTQVJfU1RBVF9DTURCWiAgICAgIDB4MDAwMDAyMDAgLyogQUJSIFNBUiBDb21tYW5kIEJ1c3kgRmxhZyAgICAgICAqLwogI2RlZmluZSBTQVJfU1RBVF9GQlEzQSAgICAgIDB4MDAwMDAxMDAgLyogRnJlZSBCdWZmZXIgUXVldWUgMyBBdHRlbnRpb24gICAqLwogI2RlZmluZSBTQVJfU1RBVF9GQlEyQSAgICAgIDB4MDAwMDAwODAgLyogRnJlZSBCdWZmZXIgUXVldWUgMiBBdHRlbnRpb24gICAqLwogI2RlZmluZSBTQVJfU1RBVF9SU1FGICAgICAgIDB4MDAwMDAwNDAgLyogUmVjZWl2ZSBTdGF0dXMgUXVldWUgZnVsbCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaXBoYXNlLmMgYi9kcml2ZXJzL2F0bS9pcGhhc2UuYwppbmRleCA3MjkyNTQwLi5kODBkNTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pcGhhc2UuYworKysgYi9kcml2ZXJzL2F0bS9pcGhhc2UuYwpAQCAtMjA2Myw3ICsyMDYzLDcgQEAKIAkJLSBVQlIgVGFibGUgc2l6ZSBpcyA0SyAgCiAJCS0gVUJSIHdhaXQgcXVldWUgaXMgNEsgIAogCSAgIHNpbmNlIHRoZSB0YWJsZSBhbmQgd2FpdCBxdWV1ZXMgYXJlIGNvbnRpZ3VvdXMsIGFsbCB0aGUgYnl0ZXMgICAKLQkgICBjYW4gYmUgaW5pdGlhbGl6ZWQgYnkgb25lIG1lbWVzZXQuICAKKwkgICBjYW4gYmUgaW5pdGlhbGl6ZWQgYnkgb25lIG1lbWVzZXQuCiAJKi8gIAogICAgICAgICAKICAgICAgICAgdmNzaXplX3NlbCA9IDA7CkBAIC0yMDg5LDcgKzIwODksNyBAQAogCQktIEFCUiBUYWJsZSBzaXplIGlzIDJLICAKIAkJLSBBQlIgd2FpdCBxdWV1ZSBpcyAySyAgCiAJICAgc2luY2UgdGhlIHRhYmxlIGFuZCB3YWl0IHF1ZXVlcyBhcmUgY29udGlndW91cywgYWxsIHRoZSBieXRlcyAgIAotCSAgIGNhbiBiZSBpbnRpYWxpemVkIGJ5IG9uZSBtZW1lc2V0LiAgCisJICAgY2FuIGJlIGluaXRpYWxpemVkIGJ5IG9uZSBtZW1lc2V0LgogCSovICAKICAgICAgICAgaSA9IEFCUl9TQ0hFRF9UQUJMRSAqIGlhZGV2LT5tZW1TaXplOwogICAgICAgICB3cml0ZXcoKGkgPj4gMTEpICYgMHhmZmZmLCBpYWRldi0+c2VnX3JlZytBQlJfU0JQVFJfQkFTRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYnVzLmMgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKaW5kZXggZTI0M2JkNC4uMDAwZTdiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2J1cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9idXMuYwpAQCAtOTc1LDcgKzk3NSw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChidXNfZ2V0X2RldmljZV9rbGlzdCk7CiAKIC8qCi0gKiBZZXMsIHRoaXMgZm9yY2FibHkgYnJlYWtzIHRoZSBrbGlzdCBhYnN0cmFjdGlvbiB0ZW1wb3JhcmlseS4gIEl0CisgKiBZZXMsIHRoaXMgZm9yY2libHkgYnJlYWtzIHRoZSBrbGlzdCBhYnN0cmFjdGlvbiB0ZW1wb3JhcmlseS4gIEl0CiAgKiBqdXN0IHdhbnRzIHRvIHNvcnQgdGhlIGtsaXN0LCBub3QgY2hhbmdlIHJlZmVyZW5jZSBjb3VudHMgYW5kCiAgKiB0YWtlL2Ryb3AgbG9ja3MgcmFwaWRseSBpbiB0aGUgcHJvY2Vzcy4gIEl0IGRvZXMgYWxsIHRoaXMgd2hpbGUKICAqIGhvbGRpbmcgdGhlIGxvY2sgZm9yIHRoZSBsaXN0LCBzbyBvYmplY3RzIGNhbid0IG90aGVyd2lzZSBiZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKaW5kZXggMmE1MjI3MC4uODM0MDQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCkBAIC04LDcgKzgsNyBAQAogICoKICAqCiAgKiBUaGUgZHJpdmVyIG1vZGVsIGNvcmUgY2FsbHMgZGV2aWNlX3BtX2FkZCgpIHdoZW4gYSBkZXZpY2UgaXMgcmVnaXN0ZXJlZC4KLSAqIFRoaXMgd2lsbCBpbnRpYWxpemUgdGhlIGVtYmVkZGVkIGRldmljZV9wbV9pbmZvIG9iamVjdCBpbiB0aGUgZGV2aWNlCisgKiBUaGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgZW1iZWRkZWQgZGV2aWNlX3BtX2luZm8gb2JqZWN0IGluIHRoZSBkZXZpY2UKICAqIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgcG93ZXItY29udHJvbGxlZCBkZXZpY2VzLiBzeXNmcyBlbnRyaWVzIGZvcgogICogY29udHJvbGxpbmcgZGV2aWNlIHBvd2VyIG1hbmFnZW1lbnQgd2lsbCBhbHNvIGJlIGFkZGVkLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svS2NvbmZpZyBiL2RyaXZlcnMvYmxvY2svS2NvbmZpZwppbmRleCA0YjkzNTlhLi44M2MzMmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0tjb25maWcKKysrIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCkBAIC00NjQsNiArNDY0LDcgQEAKIAl0cmlzdGF0ZSAiWGVuIHZpcnR1YWwgYmxvY2sgZGV2aWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBYRU4KIAlkZWZhdWx0IHkKKwlzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIGZyb250LWVuZCBvZiB0aGUgWGVuIHZpcnR1YWwKIAkgIGJsb2NrIGRldmljZSBkcml2ZXIuICBJdCBjb21tdW5pY2F0ZXMgd2l0aCBhIGJhY2stZW5kIGRyaXZlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9yYmQuYyBiL2RyaXZlcnMvYmxvY2svcmJkLmMKaW5kZXggMDA4ZDRhMC4uZTFlMzhiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9yYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3JiZC5jCkBAIC0xNzkwLDE4ICsxNzkwLDI5IEBACiAKIAlyYyA9IHJiZF9idXNfYWRkX2RldihyYmRfZGV2KTsKIAlpZiAocmMpCi0JCWdvdG8gZXJyX291dF9kaXNrOworCQlnb3RvIGVycl9vdXRfYmxrZGV2OworCiAJLyogc2V0IHVwIGFuZCBhbm5vdW5jZSBibGtkZXYgbWFwcGluZyAqLwogCXJjID0gcmJkX2luaXRfZGlzayhyYmRfZGV2KTsKIAlpZiAocmMpCi0JCWdvdG8gZXJyX291dF9ibGtkZXY7CisJCWdvdG8gZXJyX291dF9idXM7CiAKIAlyZXR1cm4gY291bnQ7CiAKK2Vycl9vdXRfYnVzOgorCW11dGV4X2xvY2tfbmVzdGVkKCZjdGxfbXV0ZXgsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKKwlsaXN0X2RlbF9pbml0KCZyYmRfZGV2LT5ub2RlKTsKKwltdXRleF91bmxvY2soJmN0bF9tdXRleCk7CisKKwkvKiB0aGlzIHdpbGwgYWxzbyBjbGVhbiB1cCByZXN0IG9mIHJiZF9kZXYgc3R1ZmYgKi8KKworCXJiZF9idXNfZGVsX2RldihyYmRfZGV2KTsKKwlrZnJlZShvcHRpb25zKTsKKwlrZnJlZShtb25fZGV2X25hbWUpOworCXJldHVybiByYzsKKwogZXJyX291dF9ibGtkZXY6CiAJdW5yZWdpc3Rlcl9ibGtkZXYocmJkX2Rldi0+bWFqb3IsIHJiZF9kZXYtPm5hbWUpOwotZXJyX291dF9kaXNrOgotCXJiZF9mcmVlX2Rpc2socmJkX2Rldik7CiBlcnJfb3V0X2NsaWVudDoKIAlyYmRfcHV0X2NsaWVudChyYmRfZGV2KTsKIAltdXRleF9sb2NrX25lc3RlZCgmY3RsX211dGV4LCBTSU5HTEVfREVQVEhfTkVTVElORyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IGQ0YTc3NzYuLjBmMTc1YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC0xMDQ3LDE1ICsxMDQ3LDYgQEAKIAkgIHBjODczNnhfZ3BpbyBkcml2ZXJzLiAgSWYgdGhvc2UgZHJpdmVycyBhcmUgYnVpbHQgYXMKIAkgIG1vZHVsZXMsIHRoaXMgb25lIHdpbGwgYmUgdG9vLCBuYW1lZCBuc2NfZ3BpbwogCi1jb25maWcgQ1M1NTM1X0dQSU8KLQl0cmlzdGF0ZSAiQU1EIENTNTUzNS9DUzU1MzYgR1BJTyAoR2VvZGUgQ29tcGFuaW9uIERldmljZSkiCi0JZGVwZW5kcyBvbiBYODZfMzIKLQloZWxwCi0JICBHaXZlIHVzZXJzcGFjZSBhY2Nlc3MgdG8gdGhlIEdQSU8gcGlucyBvbiB0aGUgQU1EIENTNTUzNSBhbmQKLQkgIENTNTUzNiBHZW9kZSBjb21wYW5pb24gZGV2aWNlcy4KLQotCSAgSWYgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkIGNzNTUzNV9ncGlvLgotCiBjb25maWcgUkFXX0RSSVZFUgogCXRyaXN0YXRlICJSQVcgZHJpdmVyICgvZGV2L3Jhdy9yYXdOKSIKIAlkZXBlbmRzIG9uIEJMT0NLCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKaW5kZXggZmEwYjgyNC4uMWU5ZGZmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQpAQCAtODIsNyArODIsNiBAQAogb2JqLSQoQ09ORklHX1NDeDIwMF9HUElPKQkrPSBzY3gyMDBfZ3Bpby5vCiBvYmotJChDT05GSUdfUEM4NzM2eF9HUElPKQkrPSBwYzg3MzZ4X2dwaW8ubwogb2JqLSQoQ09ORklHX05TQ19HUElPKQkJKz0gbnNjX2dwaW8ubwotb2JqLSQoQ09ORklHX0NTNTUzNV9HUElPKQkrPSBjczU1MzVfZ3Bpby5vCiBvYmotJChDT05GSUdfR1BJT19UQjAyMTkpCSs9IHRiMDIxOS5vCiBvYmotJChDT05GSUdfVEVMQ0xPQ0spCQkrPSB0bGNsay5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmggYi9kcml2ZXJzL2NoYXIvYWdwL2FncC5oCmluZGV4IDUyNTkwNjUuLjNlNjdkZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmgKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hZ3AuaApAQCAtMTIwLDcgKzEyMCw2IEBACiAJdm9pZCAoKmFncF9kZXN0cm95X3BhZ2UpKHN0cnVjdCBwYWdlICosIGludCBmbGFncyk7CiAJdm9pZCAoKmFncF9kZXN0cm95X3BhZ2VzKShzdHJ1Y3QgYWdwX21lbW9yeSAqKTsKIAlpbnQgKCphZ3BfdHlwZV90b19tYXNrX3R5cGUpIChzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICosIGludCk7Ci0Jdm9pZCAoKmNoaXBzZXRfZmx1c2gpKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKik7CiB9OwogCiBzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvY29tcGF0X2lvY3RsLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2NvbXBhdF9pb2N0bC5jCmluZGV4IDlkMmM5N2EuLmE0OGUwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvY29tcGF0X2lvY3RsLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9jb21wYXRfaW9jdGwuYwpAQCAtMjc2LDcgKzI3Niw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBBR1BJT0NfQ0hJUFNFVF9GTFVTSDMyOgotCQlyZXRfdmFsID0gYWdwaW9jX2NoaXBzZXRfZmx1c2hfd3JhcChjdXJyX3ByaXYpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvY29tcGF0X2lvY3RsLmggYi9kcml2ZXJzL2NoYXIvYWdwL2NvbXBhdF9pb2N0bC5oCmluZGV4IDBjOTY3OGEuLmYzMGUwZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvY29tcGF0X2lvY3RsLmgKKysrIGIvZHJpdmVycy9jaGFyL2FncC9jb21wYXRfaW9jdGwuaApAQCAtMTAyLDYgKzEwMiw1IEBACiBzdHJ1Y3QgYWdwX21lbW9yeSAqYWdwX2FsbG9jYXRlX21lbW9yeV93cmFwKHNpemVfdCBwZ19jb3VudCwgdTMyIHR5cGUpOwogc3RydWN0IGFncF9tZW1vcnkgKmFncF9maW5kX21lbV9ieV9rZXkoaW50IGtleSk7CiBzdHJ1Y3QgYWdwX2NsaWVudCAqYWdwX2ZpbmRfY2xpZW50X2J5X3BpZChwaWRfdCBpZCk7Ci1pbnQgYWdwaW9jX2NoaXBzZXRfZmx1c2hfd3JhcChzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqcHJpdik7CiAKICNlbmRpZiAvKiBfQUdQX0NPTVBBVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2Zyb250ZW5kLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2Zyb250ZW5kLmMKaW5kZXggM2NiNDUzOS4uMmUwNDQzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9mcm9udGVuZC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvZnJvbnRlbmQuYwpAQCAtOTU3LDEzICs5NTcsNiBAQAogCXJldHVybiBhZ3BfdW5iaW5kX21lbW9yeShtZW1vcnkpOwogfQogCi1pbnQgYWdwaW9jX2NoaXBzZXRfZmx1c2hfd3JhcChzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqcHJpdikKLXsKLQlEQkcoIiIpOwotCWFncF9mbHVzaF9jaGlwc2V0KGFncF9icmlkZ2UpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgbG9uZyBhZ3BfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0xMDM5LDcgKzEwMzIsNiBAQAogCQlicmVhazsKIAkgICAgICAgCiAJY2FzZSBBR1BJT0NfQ0hJUFNFVF9GTFVTSDoKLQkJcmV0X3ZhbCA9IGFncGlvY19jaGlwc2V0X2ZsdXNoX3dyYXAoY3Vycl9wcml2KTsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYyBiL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jCmluZGV4IDQ5NTZmMWMuLjAxMmNiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jCkBAIC04MSwxMyArODEsNiBAQAogCXJldHVybiAtMTsKIH0KIAotdm9pZCBhZ3BfZmx1c2hfY2hpcHNldChzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpCi17Ci0JaWYgKGJyaWRnZS0+ZHJpdmVyLT5jaGlwc2V0X2ZsdXNoKQotCQlicmlkZ2UtPmRyaXZlci0+Y2hpcHNldF9mbHVzaChicmlkZ2UpOwotfQotRVhQT1JUX1NZTUJPTChhZ3BfZmx1c2hfY2hpcHNldCk7Ci0KIC8qCiAgKiBVc2Uga21hbGxvYyBpZiBwb3NzaWJsZSBmb3IgdGhlIHBhZ2UgbGlzdC4gT3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICogdm1hbGxvYy4gVGhpcyBzcGVlZHMgdGhpbmdzIHVwIGFuZCBhbHNvIHNhdmVzIG1lbW9yeSBmb3Igc21hbGwgQUdQCkBAIC00ODcsMjYgKzQ4MCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGFncF91bmJpbmRfbWVtb3J5KTsKIAotLyoqCi0gKglhZ3BfcmViaW5kX2VtbW9yeSAgLSAgUmV3cml0ZSB0aGUgZW50aXJlIEdBVFQsIHVzZWZ1bCBvbiByZXN1bWUKLSAqLwotaW50IGFncF9yZWJpbmRfbWVtb3J5KHZvaWQpCi17Ci0Jc3RydWN0IGFncF9tZW1vcnkgKmN1cnI7Ci0JaW50IHJldF92YWwgPSAwOwotCi0Jc3Bpbl9sb2NrKCZhZ3BfYnJpZGdlLT5tYXBwZWRfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjdXJyLCAmYWdwX2JyaWRnZS0+bWFwcGVkX2xpc3QsIG1hcHBlZF9saXN0KSB7Ci0JCXJldF92YWwgPSBjdXJyLT5icmlkZ2UtPmRyaXZlci0+aW5zZXJ0X21lbW9yeShjdXJyLAotCQkJCQkJCSAgICAgIGN1cnItPnBnX3N0YXJ0LAotCQkJCQkJCSAgICAgIGN1cnItPnR5cGUpOwotCQlpZiAocmV0X3ZhbCAhPSAwKQotCQkJYnJlYWs7Ci0JfQotCXNwaW5fdW5sb2NrKCZhZ3BfYnJpZGdlLT5tYXBwZWRfbG9jayk7Ci0JcmV0dXJuIHJldF92YWw7Ci19Ci1FWFBPUlRfU1lNQk9MKGFncF9yZWJpbmRfbWVtb3J5KTsKIAogLyogRW5kIC0gUm91dGluZXMgZm9yIGhhbmRsaW5nIHN3YXBwaW5nIG9mIGFncF9tZW1vcnkgaW50byB0aGUgR0FUVCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCBlNzJmNDlkLi4wN2U5Nzk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTgyOCwxNCArODI4LDkgQEAKIHN0YXRpYyBpbnQgYWdwX2ludGVsX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JaW50IHJldF92YWw7CiAKIAlicmlkZ2UtPmRyaXZlci0+Y29uZmlndXJlKCk7CiAKLQlyZXRfdmFsID0gYWdwX3JlYmluZF9tZW1vcnkoKTsKLQlpZiAocmV0X3ZhbCAhPSAwKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQogCXJldHVybiAwOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5oIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuaAppbmRleCA5MDUzOWRmLi5jMTk1YmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5oCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmgKQEAgLTc1LDYgKzc1LDggQEAKICNkZWZpbmUgSTgxMF9HTVNfRElTQUJMRQkweDAwMDAwMDAwCiAjZGVmaW5lIEk4MTBfUEdFVEJMX0NUTAkJMHgyMDIwCiAjZGVmaW5lIEk4MTBfUEdFVEJMX0VOQUJMRUQJMHgwMDAwMDAwMQorLyogTm90ZTogUEdFVEJMX0NUTDIgaGFzIGEgZGlmZmVyZW50IG9mZnNldCBvbiBHMzMuICovCisjZGVmaW5lIEk5NjVfUEdFVEJMX0NUTDIJMHgyMGM0CiAjZGVmaW5lIEk5NjVfUEdFVEJMX1NJWkVfTUFTSwkweDAwMDAwMDBlCiAjZGVmaW5lIEk5NjVfUEdFVEJMX1NJWkVfNTEyS0IJKDAgPDwgMSkKICNkZWZpbmUgSTk2NV9QR0VUQkxfU0laRV8yNTZLQgkoMSA8PCAxKQpAQCAtODIsOSArODQsMTcgQEAKICNkZWZpbmUgSTk2NV9QR0VUQkxfU0laRV8xTUIJKDMgPDwgMSkKICNkZWZpbmUgSTk2NV9QR0VUQkxfU0laRV8yTUIJKDQgPDwgMSkKICNkZWZpbmUgSTk2NV9QR0VUQkxfU0laRV8xXzVNQgkoNSA8PCAxKQotI2RlZmluZSBHMzNfUEdFVEJMX1NJWkVfTUFTSyAgICAoMyA8PCA4KQotI2RlZmluZSBHMzNfUEdFVEJMX1NJWkVfMU0gICAgICAoMSA8PCA4KQotI2RlZmluZSBHMzNfUEdFVEJMX1NJWkVfMk0gICAgICAoMiA8PCA4KQorI2RlZmluZSBHMzNfR01DSF9TSVpFX01BU0sJKDMgPDwgOCkKKyNkZWZpbmUgRzMzX0dNQ0hfU0laRV8xTQkoMSA8PCA4KQorI2RlZmluZSBHMzNfR01DSF9TSVpFXzJNCSgyIDw8IDgpCisjZGVmaW5lIEc0eF9HTUNIX1NJWkVfTUFTSwkoMHhmIDw8IDgpCisjZGVmaW5lIEc0eF9HTUNIX1NJWkVfMU0JKDB4MSA8PCA4KQorI2RlZmluZSBHNHhfR01DSF9TSVpFXzJNCSgweDMgPDwgOCkKKyNkZWZpbmUgRzR4X0dNQ0hfU0laRV9WVF8xTQkoMHg5IDw8IDgpCisjZGVmaW5lIEc0eF9HTUNIX1NJWkVfVlRfMV81TQkoMHhhIDw8IDgpCisjZGVmaW5lIEc0eF9HTUNIX1NJWkVfVlRfMk0JKDB4YyA8PCA4KQorCisjZGVmaW5lIEdGWF9GTFNIX0NOVEwJCTB4MjE3MCAvKiA5MTUrICovCiAKICNkZWZpbmUgSTgxMF9EUkFNX0NUTAkJMHgzMDAwCiAjZGVmaW5lIEk4MTBfRFJBTV9ST1dfMAkJMHgwMDAwMDAwMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1ndHQuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtZ3R0LmMKaW5kZXggMjlhYzZkNC4uZTkyMWI2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1ndHQuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWd0dC5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgImFncC5oIgogI2luY2x1ZGUgImludGVsLWFncC5oIgotI2luY2x1ZGUgPGxpbnV4L2ludGVsLWd0dC5oPgogI2luY2x1ZGUgPGRybS9pbnRlbC1ndHQuaD4KIAogLyoKQEAgLTM5LDQwICszOCwxMiBAQAogI2RlZmluZSBVU0VfUENJX0RNQV9BUEkgMAogI2VuZGlmCiAKLS8qIE1heCBhbW91bnQgb2Ygc3RvbGVuIHNwYWNlLCBhbnl0aGluZyBhYm92ZSB3aWxsIGJlIHJldHVybmVkIHRvIExpbnV4ICovCi1pbnQgaW50ZWxfbWF4X3N0b2xlbiA9IDMyICogMTAyNCAqIDEwMjQ7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXBlcl9zaXplX2luZm9fZml4ZWQgaW50ZWxfaTgxMF9zaXplc1tdID0KLXsKLQl7NjQsIDE2Mzg0LCA0fSwKLQkvKiBUaGUgMzJNIG1vZGUgc3RpbGwgcmVxdWlyZXMgYSA2NGsgZ2F0dCAqLwotCXszMiwgODE5MiwgNH0KLX07Ci0KLSNkZWZpbmUgQUdQX0RDQUNIRV9NRU1PUlkJMQotI2RlZmluZSBBR1BfUEhZU19NRU1PUlkJCTIKLSNkZWZpbmUgSU5URUxfQUdQX0NBQ0hFRF9NRU1PUlkgMwotCi1zdGF0aWMgc3RydWN0IGdhdHRfbWFzayBpbnRlbF9pODEwX21hc2tzW10gPQotewotCXsubWFzayA9IEk4MTBfUFRFX1ZBTElELCAudHlwZSA9IDB9LAotCXsubWFzayA9IChJODEwX1BURV9WQUxJRCB8IEk4MTBfUFRFX0xPQ0FMKSwgLnR5cGUgPSBBR1BfRENBQ0hFX01FTU9SWX0sCi0Jey5tYXNrID0gSTgxMF9QVEVfVkFMSUQsIC50eXBlID0gMH0sCi0Jey5tYXNrID0gSTgxMF9QVEVfVkFMSUQgfCBJODMwX1BURV9TWVNURU1fQ0FDSEVELAotCSAudHlwZSA9IElOVEVMX0FHUF9DQUNIRURfTUVNT1JZfQotfTsKLQotI2RlZmluZSBJTlRFTF9BR1BfVU5DQUNIRURfTUVNT1JZICAgICAgICAgICAgICAwCi0jZGVmaW5lIElOVEVMX0FHUF9DQUNIRURfTUVNT1JZX0xMQyAgICAgICAgICAgIDEKLSNkZWZpbmUgSU5URUxfQUdQX0NBQ0hFRF9NRU1PUllfTExDX0dGRFQgICAgICAgMgotI2RlZmluZSBJTlRFTF9BR1BfQ0FDSEVEX01FTU9SWV9MTENfTUxDICAgICAgICAzCi0jZGVmaW5lIElOVEVMX0FHUF9DQUNIRURfTUVNT1JZX0xMQ19NTENfR0ZEVCAgIDQKLQogc3RydWN0IGludGVsX2d0dF9kcml2ZXIgewogCXVuc2lnbmVkIGludCBnZW4gOiA4OwogCXVuc2lnbmVkIGludCBpc19nMzMgOiAxOwogCXVuc2lnbmVkIGludCBpc19waW5ldmlldyA6IDE7CiAJdW5zaWduZWQgaW50IGlzX2lyb25sYWtlIDogMTsKKwl1bnNpZ25lZCBpbnQgaGFzX3BndGJsX2VuYWJsZSA6IDE7CiAJdW5zaWduZWQgaW50IGRtYV9tYXNrX3NpemUgOiA4OwogCS8qIENoaXBzZXQgc3BlY2lmaWMgR1RUIHNldHVwICovCiAJaW50ICgqc2V0dXApKHZvaWQpOwpAQCAtOTUsMTMgKzY2LDE0IEBACiAJdTggX19pb21lbSAqcmVnaXN0ZXJzOwogCXBoeXNfYWRkcl90IGd0dF9idXNfYWRkcjsKIAlwaHlzX2FkZHJfdCBnbWFfYnVzX2FkZHI7Ci0JcGh5c19hZGRyX3QgcHRlX2J1c19hZGRyOworCXUzMiBQR0VUQkxfc2F2ZTsKIAl1MzIgX19pb21lbSAqZ3R0OwkJLyogSTkxNUcgKi8KIAlpbnQgbnVtX2RjYWNoZV9lbnRyaWVzOwogCXVuaW9uIHsKIAkJdm9pZCBfX2lvbWVtICppOXh4X2ZsdXNoX3BhZ2U7CiAJCXZvaWQgKmk4eHhfZmx1c2hfcGFnZTsKIAl9OworCWNoYXIgKmk4MXhfZ3R0X3RhYmxlOwogCXN0cnVjdCBwYWdlICppOHh4X3BhZ2U7CiAJc3RydWN0IHJlc291cmNlIGlmcF9yZXNvdXJjZTsKIAlpbnQgcmVzb3VyY2VfdmFsaWQ7CkBAIC0xMTMsNDIgKzg1LDMxIEBACiAjZGVmaW5lIElTX0czMwkJaW50ZWxfcHJpdmF0ZS5kcml2ZXItPmlzX2czMwogI2RlZmluZSBJU19QSU5FVklFVwlpbnRlbF9wcml2YXRlLmRyaXZlci0+aXNfcGluZXZpZXcKICNkZWZpbmUgSVNfSVJPTkxBS0UJaW50ZWxfcHJpdmF0ZS5kcml2ZXItPmlzX2lyb25sYWtlCisjZGVmaW5lIEhBU19QR1RCTF9FTglpbnRlbF9wcml2YXRlLmRyaXZlci0+aGFzX3BndGJsX2VuYWJsZQogCi1zdGF0aWMgdm9pZCBpbnRlbF9hZ3BfZnJlZV9zZ2xpc3Qoc3RydWN0IGFncF9tZW1vcnkgKm1lbSkKLXsKLQlzdHJ1Y3Qgc2dfdGFibGUgc3Q7Ci0KLQlzdC5zZ2wgPSBtZW0tPnNnX2xpc3Q7Ci0Jc3Qub3JpZ19uZW50cyA9IHN0Lm5lbnRzID0gbWVtLT5wYWdlX2NvdW50OwotCi0Jc2dfZnJlZV90YWJsZSgmc3QpOwotCi0JbWVtLT5zZ19saXN0ID0gTlVMTDsKLQltZW0tPm51bV9zZyA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxfYWdwX21hcF9tZW1vcnkoc3RydWN0IGFncF9tZW1vcnkgKm1lbSkKK2ludCBpbnRlbF9ndHRfbWFwX21lbW9yeShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXMsCisJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICoqc2dfbGlzdCwgaW50ICpudW1fc2cpCiB7CiAJc3RydWN0IHNnX3RhYmxlIHN0OwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJaW50IGk7CiAKLQlpZiAobWVtLT5zZ19saXN0KQorCWlmICgqc2dfbGlzdCkKIAkJcmV0dXJuIDA7IC8qIGFscmVhZHkgbWFwcGVkIChmb3IgZS5nLiByZXN1bWUgKi8KIAotCURCRygidHJ5IG1hcHBpbmcgJWx1IHBhZ2VzXG4iLCAodW5zaWduZWQgbG9uZyltZW0tPnBhZ2VfY291bnQpOworCURCRygidHJ5IG1hcHBpbmcgJWx1IHBhZ2VzXG4iLCAodW5zaWduZWQgbG9uZyludW1fZW50cmllcyk7CiAKLQlpZiAoc2dfYWxsb2NfdGFibGUoJnN0LCBtZW0tPnBhZ2VfY291bnQsIEdGUF9LRVJORUwpKQorCWlmIChzZ19hbGxvY190YWJsZSgmc3QsIG51bV9lbnRyaWVzLCBHRlBfS0VSTkVMKSkKIAkJZ290byBlcnI7CiAKLQltZW0tPnNnX2xpc3QgPSBzZyA9IHN0LnNnbDsKKwkqc2dfbGlzdCA9IHNnID0gc3Quc2dsOwogCi0JZm9yIChpID0gMCA7IGkgPCBtZW0tPnBhZ2VfY291bnQ7IGkrKywgc2cgPSBzZ19uZXh0KHNnKSkKLQkJc2dfc2V0X3BhZ2Uoc2csIG1lbS0+cGFnZXNbaV0sIFBBR0VfU0laRSwgMCk7CisJZm9yIChpID0gMCA7IGkgPCBudW1fZW50cmllczsgaSsrLCBzZyA9IHNnX25leHQoc2cpKQorCQlzZ19zZXRfcGFnZShzZywgcGFnZXNbaV0sIFBBR0VfU0laRSwgMCk7CiAKLQltZW0tPm51bV9zZyA9IHBjaV9tYXBfc2coaW50ZWxfcHJpdmF0ZS5wY2lkZXYsIG1lbS0+c2dfbGlzdCwKLQkJCQkgbWVtLT5wYWdlX2NvdW50LCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCWlmICh1bmxpa2VseSghbWVtLT5udW1fc2cpKQorCSpudW1fc2cgPSBwY2lfbWFwX3NnKGludGVsX3ByaXZhdGUucGNpZGV2LCAqc2dfbGlzdCwKKwkJCQkgbnVtX2VudHJpZXMsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKHVubGlrZWx5KCEqbnVtX3NnKSkKIAkJZ290byBlcnI7CiAKIAlyZXR1cm4gMDsKQEAgLTE1Nyw5MCArMTE4LDIyIEBACiAJc2dfZnJlZV90YWJsZSgmc3QpOwogCXJldHVybiAtRU5PTUVNOwogfQorRVhQT1JUX1NZTUJPTChpbnRlbF9ndHRfbWFwX21lbW9yeSk7CiAKLXN0YXRpYyB2b2lkIGludGVsX2FncF91bm1hcF9tZW1vcnkoc3RydWN0IGFncF9tZW1vcnkgKm1lbSkKK3ZvaWQgaW50ZWxfZ3R0X3VubWFwX21lbW9yeShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2xpc3QsIGludCBudW1fc2cpCiB7CisJc3RydWN0IHNnX3RhYmxlIHN0OwogCURCRygidHJ5IHVubWFwcGluZyAlbHUgcGFnZXNcbiIsICh1bnNpZ25lZCBsb25nKW1lbS0+cGFnZV9jb3VudCk7CiAKLQlwY2lfdW5tYXBfc2coaW50ZWxfcHJpdmF0ZS5wY2lkZXYsIG1lbS0+c2dfbGlzdCwKLQkJICAgICBtZW0tPnBhZ2VfY291bnQsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0JaW50ZWxfYWdwX2ZyZWVfc2dsaXN0KG1lbSk7CisJcGNpX3VubWFwX3NnKGludGVsX3ByaXZhdGUucGNpZGV2LCBzZ19saXN0LAorCQkgICAgIG51bV9zZywgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKworCXN0LnNnbCA9IHNnX2xpc3Q7CisJc3Qub3JpZ19uZW50cyA9IHN0Lm5lbnRzID0gbnVtX3NnOworCisJc2dfZnJlZV90YWJsZSgmc3QpOwogfQotCi1zdGF0aWMgaW50IGludGVsX2k4MTBfZmV0Y2hfc2l6ZSh2b2lkKQotewotCXUzMiBzbXJhbV9taXNjYzsKLQlzdHJ1Y3QgYXBlcl9zaXplX2luZm9fZml4ZWQgKnZhbHVlczsKLQotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChpbnRlbF9wcml2YXRlLmJyaWRnZV9kZXYsCi0JCQkgICAgICBJODEwX1NNUkFNX01JU0NDLCAmc21yYW1fbWlzY2MpOwotCXZhbHVlcyA9IEFfU0laRV9GSVgoYWdwX2JyaWRnZS0+ZHJpdmVyLT5hcGVydHVyZV9zaXplcyk7Ci0KLQlpZiAoKHNtcmFtX21pc2NjICYgSTgxMF9HTVMpID09IEk4MTBfR01TX0RJU0FCTEUpIHsKLQkJZGV2X3dhcm4oJmludGVsX3ByaXZhdGUuYnJpZGdlX2Rldi0+ZGV2LCAiaTgxMCBpcyBkaXNhYmxlZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoKHNtcmFtX21pc2NjICYgSTgxMF9HRlhfTUVNX1dJTl9TSVpFKSA9PSBJODEwX0dGWF9NRU1fV0lOXzMyTSkgewotCQlhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemUgPSAodm9pZCAqKSAodmFsdWVzICsgMSk7Ci0JCWFncF9icmlkZ2UtPmFwZXJ0dXJlX3NpemVfaWR4ID0gMTsKLQkJcmV0dXJuIHZhbHVlc1sxXS5zaXplOwotCX0gZWxzZSB7Ci0JCWFncF9icmlkZ2UtPmN1cnJlbnRfc2l6ZSA9ICh2b2lkICopICh2YWx1ZXMpOwotCQlhZ3BfYnJpZGdlLT5hcGVydHVyZV9zaXplX2lkeCA9IDA7Ci0JCXJldHVybiB2YWx1ZXNbMF0uc2l6ZTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpbnRlbF9pODEwX2NvbmZpZ3VyZSh2b2lkKQotewotCXN0cnVjdCBhcGVyX3NpemVfaW5mb19maXhlZCAqY3VycmVudF9zaXplOwotCXUzMiB0ZW1wOwotCWludCBpOwotCi0JY3VycmVudF9zaXplID0gQV9TSVpFX0ZJWChhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemUpOwotCi0JaWYgKCFpbnRlbF9wcml2YXRlLnJlZ2lzdGVycykgewotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoaW50ZWxfcHJpdmF0ZS5wY2lkZXYsIEk4MTBfTU1BRERSLCAmdGVtcCk7Ci0JCXRlbXAgJj0gMHhmZmY4MDAwMDsKLQotCQlpbnRlbF9wcml2YXRlLnJlZ2lzdGVycyA9IGlvcmVtYXAodGVtcCwgMTI4ICogNDA5Nik7Ci0JCWlmICghaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMpIHsKLQkJCWRldl9lcnIoJmludGVsX3ByaXZhdGUucGNpZGV2LT5kZXYsCi0JCQkJImNhbid0IHJlbWFwIG1lbW9yeVxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQotCWlmICgocmVhZGwoaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9EUkFNX0NUTCkKLQkJJiBJODEwX0RSQU1fUk9XXzApID09IEk4MTBfRFJBTV9ST1dfMF9TRFJBTSkgewotCQkvKiBUaGlzIHdpbGwgbmVlZCB0byBiZSBkeW5hbWljYWxseSBhc3NpZ25lZCAqLwotCQlkZXZfaW5mbygmaW50ZWxfcHJpdmF0ZS5wY2lkZXYtPmRldiwKLQkJCSAiZGV0ZWN0ZWQgNE1CIGRlZGljYXRlZCB2aWRlbyByYW1cbiIpOwotCQlpbnRlbF9wcml2YXRlLm51bV9kY2FjaGVfZW50cmllcyA9IDEwMjQ7Ci0JfQotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChpbnRlbF9wcml2YXRlLnBjaWRldiwgSTgxMF9HTUFERFIsICZ0ZW1wKTsKLQlhZ3BfYnJpZGdlLT5nYXJ0X2J1c19hZGRyID0gKHRlbXAgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLKTsKLQl3cml0ZWwoYWdwX2JyaWRnZS0+Z2F0dF9idXNfYWRkciB8IEk4MTBfUEdFVEJMX0VOQUJMRUQsIGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUEdFVEJMX0NUTCk7Ci0JcmVhZGwoaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9QR0VUQkxfQ1RMKTsJLyogUENJIFBvc3RpbmcuICovCi0KLQlpZiAoYWdwX2JyaWRnZS0+ZHJpdmVyLT5uZWVkc19zY3JhdGNoX3BhZ2UpIHsKLQkJZm9yIChpID0gMDsgaSA8IGN1cnJlbnRfc2l6ZS0+bnVtX2VudHJpZXM7IGkrKykgewotCQkJd3JpdGVsKGFncF9icmlkZ2UtPnNjcmF0Y2hfcGFnZSwgaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9QVEVfQkFTRSsoaSo0KSk7Ci0JCX0KLQkJcmVhZGwoaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9QVEVfQkFTRSsoKGktMSkqNCkpOwkvKiBQQ0kgcG9zdGluZy4gKi8KLQl9Ci0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX2k4MTBfY2xlYW51cCh2b2lkKQotewotCXdyaXRlbCgwLCBpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BHRVRCTF9DVEwpOwotCXJlYWRsKGludGVsX3ByaXZhdGUucmVnaXN0ZXJzKTsJLyogUENJIFBvc3RpbmcuICovCi0JaW91bm1hcChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycyk7Ci19CitFWFBPUlRfU1lNQk9MKGludGVsX2d0dF91bm1hcF9tZW1vcnkpOwogCiBzdGF0aWMgdm9pZCBpbnRlbF9mYWtlX2FncF9lbmFibGUoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlLCB1MzIgbW9kZSkKIHsKQEAgLTI3Nyw4MCArMTcwLDY0IEBACiAJYXRvbWljX2RlYygmYWdwX2JyaWRnZS0+Y3VycmVudF9tZW1vcnlfYWdwKTsKIH0KIAotc3RhdGljIGludCBpbnRlbF9pODEwX2luc2VydF9lbnRyaWVzKHN0cnVjdCBhZ3BfbWVtb3J5ICptZW0sIG9mZl90IHBnX3N0YXJ0LAotCQkJCWludCB0eXBlKQorI2RlZmluZSBJODEwX0dUVF9PUkRFUiA0CitzdGF0aWMgaW50IGk4MTBfc2V0dXAodm9pZCkKIHsKLQlpbnQgaSwgaiwgbnVtX2VudHJpZXM7Ci0Jdm9pZCAqdGVtcDsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQlpbnQgbWFza190eXBlOworCXUzMiByZWdfYWRkcjsKKwljaGFyICpndHRfdGFibGU7CiAKLQlpZiAobWVtLT5wYWdlX2NvdW50ID09IDApCi0JCWdvdG8gb3V0OworCS8qIGk4MXggZG9lcyBub3QgcHJlYWxsb2NhdGUgdGhlIGd0dC4gSXQncyBhbHdheXMgNjRrYiBpbiBzaXplLiAqLworCWd0dF90YWJsZSA9IGFsbG9jX2dhdHRfcGFnZXMoSTgxMF9HVFRfT1JERVIpOworCWlmIChndHRfdGFibGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJaW50ZWxfcHJpdmF0ZS5pODF4X2d0dF90YWJsZSA9IGd0dF90YWJsZTsKIAotCXRlbXAgPSBhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemU7Ci0JbnVtX2VudHJpZXMgPSBBX1NJWkVfRklYKHRlbXApLT5udW1fZW50cmllczsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoaW50ZWxfcHJpdmF0ZS5wY2lkZXYsIEk4MTBfTU1BRERSLCAmcmVnX2FkZHIpOworCXJlZ19hZGRyICY9IDB4ZmZmODAwMDA7CiAKLQlpZiAoKHBnX3N0YXJ0ICsgbWVtLT5wYWdlX2NvdW50KSA+IG51bV9lbnRyaWVzKQotCQlnb3RvIG91dF9lcnI7CisJaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMgPSBpb3JlbWFwKHJlZ19hZGRyLCBLQig2NCkpOworCWlmICghaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMpCisJCXJldHVybiAtRU5PTUVNOwogCisJd3JpdGVsKHZpcnRfdG9fcGh5cyhndHRfdGFibGUpIHwgSTgxMF9QR0VUQkxfRU5BQkxFRCwKKwkgICAgICAgaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9QR0VUQkxfQ1RMKTsKIAotCWZvciAoaiA9IHBnX3N0YXJ0OyBqIDwgKHBnX3N0YXJ0ICsgbWVtLT5wYWdlX2NvdW50KTsgaisrKSB7Ci0JCWlmICghUEdFX0VNUFRZKGFncF9icmlkZ2UsIHJlYWRsKGFncF9icmlkZ2UtPmdhdHRfdGFibGUraikpKSB7Ci0JCQlyZXQgPSAtRUJVU1k7Ci0JCQlnb3RvIG91dF9lcnI7Ci0JCX0KKwlpbnRlbF9wcml2YXRlLmd0dF9idXNfYWRkciA9IHJlZ19hZGRyICsgSTgxMF9QVEVfQkFTRTsKKworCWlmICgocmVhZGwoaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9EUkFNX0NUTCkKKwkJJiBJODEwX0RSQU1fUk9XXzApID09IEk4MTBfRFJBTV9ST1dfMF9TRFJBTSkgeworCQlkZXZfaW5mbygmaW50ZWxfcHJpdmF0ZS5wY2lkZXYtPmRldiwKKwkJCSAiZGV0ZWN0ZWQgNE1CIGRlZGljYXRlZCB2aWRlbyByYW1cbiIpOworCQlpbnRlbF9wcml2YXRlLm51bV9kY2FjaGVfZW50cmllcyA9IDEwMjQ7CiAJfQogCi0JaWYgKHR5cGUgIT0gbWVtLT50eXBlKQotCQlnb3RvIG91dF9lcnI7Ci0KLQltYXNrX3R5cGUgPSBhZ3BfYnJpZGdlLT5kcml2ZXItPmFncF90eXBlX3RvX21hc2tfdHlwZShhZ3BfYnJpZGdlLCB0eXBlKTsKLQotCXN3aXRjaCAobWFza190eXBlKSB7Ci0JY2FzZSBBR1BfRENBQ0hFX01FTU9SWToKLQkJaWYgKCFtZW0tPmlzX2ZsdXNoZWQpCi0JCQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKLQkJZm9yIChpID0gcGdfc3RhcnQ7IGkgPCAocGdfc3RhcnQgKyBtZW0tPnBhZ2VfY291bnQpOyBpKyspIHsKLQkJCXdyaXRlbCgoaSo0MDk2KXxJODEwX1BURV9MT0NBTHxJODEwX1BURV9WQUxJRCwKLQkJCSAgICAgICBpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKyhpKjQpKTsKLQkJfQotCQlyZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKygoaS0xKSo0KSk7Ci0JCWJyZWFrOwotCWNhc2UgQUdQX1BIWVNfTUVNT1JZOgotCWNhc2UgQUdQX05PUk1BTF9NRU1PUlk6Ci0JCWlmICghbWVtLT5pc19mbHVzaGVkKQotCQkJZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7Ci0JCWZvciAoaSA9IDAsIGogPSBwZ19zdGFydDsgaSA8IG1lbS0+cGFnZV9jb3VudDsgaSsrLCBqKyspIHsKLQkJCXdyaXRlbChhZ3BfYnJpZGdlLT5kcml2ZXItPm1hc2tfbWVtb3J5KGFncF9icmlkZ2UsCi0JCQkJCXBhZ2VfdG9fcGh5cyhtZW0tPnBhZ2VzW2ldKSwgbWFza190eXBlKSwKLQkJCSAgICAgICBpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKyhqKjQpKTsKLQkJfQotCQlyZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKygoai0xKSo0KSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWdvdG8gb3V0X2VycjsKLQl9Ci0KLW91dDoKLQlyZXQgPSAwOwotb3V0X2VycjoKLQltZW0tPmlzX2ZsdXNoZWQgPSB0cnVlOwotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW50ZWxfaTgxMF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtLCBvZmZfdCBwZ19zdGFydCwKLQkJCQlpbnQgdHlwZSkKK3N0YXRpYyB2b2lkIGk4MTBfY2xlYW51cCh2b2lkKQoreworCXdyaXRlbCgwLCBpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BHRVRCTF9DVEwpOworCWZyZWVfZ2F0dF9wYWdlcyhpbnRlbF9wcml2YXRlLmk4MXhfZ3R0X3RhYmxlLCBJODEwX0dUVF9PUkRFUik7Cit9CisKK3N0YXRpYyBpbnQgaTgxMF9pbnNlcnRfZGNhY2hlX2VudHJpZXMoc3RydWN0IGFncF9tZW1vcnkgKm1lbSwgb2ZmX3QgcGdfc3RhcnQsCisJCQkJICAgICAgaW50IHR5cGUpCiB7CiAJaW50IGk7CiAKLQlpZiAobWVtLT5wYWdlX2NvdW50ID09IDApCi0JCXJldHVybiAwOworCWlmICgocGdfc3RhcnQgKyBtZW0tPnBhZ2VfY291bnQpCisJCQk+IGludGVsX3ByaXZhdGUubnVtX2RjYWNoZV9lbnRyaWVzKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAoaSA9IHBnX3N0YXJ0OyBpIDwgKG1lbS0+cGFnZV9jb3VudCArIHBnX3N0YXJ0KTsgaSsrKSB7Ci0JCXdyaXRlbChhZ3BfYnJpZGdlLT5zY3JhdGNoX3BhZ2UsIGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKGkqNCkpOworCWlmICghbWVtLT5pc19mbHVzaGVkKQorCQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKKworCWZvciAoaSA9IHBnX3N0YXJ0OyBpIDwgKHBnX3N0YXJ0ICsgbWVtLT5wYWdlX2NvdW50KTsgaSsrKSB7CisJCWRtYV9hZGRyX3QgYWRkciA9IGkgPDwgUEFHRV9TSElGVDsKKwkJaW50ZWxfcHJpdmF0ZS5kcml2ZXItPndyaXRlX2VudHJ5KGFkZHIsCisJCQkJCQkgIGksIHR5cGUpOwogCX0KLQlyZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKygoaS0xKSo0KSk7CisJcmVhZGwoaW50ZWxfcHJpdmF0ZS5ndHQraS0xKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzk3LDI5ICsyNzQsNiBAQAogCXJldHVybiBuZXc7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYWdwX21lbW9yeSAqaW50ZWxfaTgxMF9hbGxvY19ieV90eXBlKHNpemVfdCBwZ19jb3VudCwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IGFncF9tZW1vcnkgKm5ldzsKLQotCWlmICh0eXBlID09IEFHUF9EQ0FDSEVfTUVNT1JZKSB7Ci0JCWlmIChwZ19jb3VudCAhPSBpbnRlbF9wcml2YXRlLm51bV9kY2FjaGVfZW50cmllcykKLQkJCXJldHVybiBOVUxMOwotCi0JCW5ldyA9IGFncF9jcmVhdGVfbWVtb3J5KDEpOwotCQlpZiAobmV3ID09IE5VTEwpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQluZXctPnR5cGUgPSBBR1BfRENBQ0hFX01FTU9SWTsKLQkJbmV3LT5wYWdlX2NvdW50ID0gcGdfY291bnQ7Ci0JCW5ldy0+bnVtX3NjcmF0Y2hfcGFnZXMgPSAwOwotCQlhZ3BfZnJlZV9wYWdlX2FycmF5KG5ldyk7Ci0JCXJldHVybiBuZXc7Ci0JfQotCWlmICh0eXBlID09IEFHUF9QSFlTX01FTU9SWSkKLQkJcmV0dXJuIGFsbG9jX2FncHBoeXNtZW1faTh4eChwZ19jb3VudCwgdHlwZSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyB2b2lkIGludGVsX2k4MTBfZnJlZV9ieV90eXBlKHN0cnVjdCBhZ3BfbWVtb3J5ICpjdXJyKQogewogCWFncF9mcmVlX2tleShjdXJyLT5rZXkpOwpAQCAtNDM3LDEzICsyOTEsNiBAQAogCWtmcmVlKGN1cnIpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbnRlbF9pODEwX21hc2tfbWVtb3J5KHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSwKLQkJCQkJICAgIGRtYV9hZGRyX3QgYWRkciwgaW50IHR5cGUpCi17Ci0JLyogVHlwZSBjaGVja2luZyBtdXN0IGJlIGRvbmUgZWxzZXdoZXJlICovCi0JcmV0dXJuIGFkZHIgfCBicmlkZ2UtPmRyaXZlci0+bWFza3NbdHlwZV0ubWFzazsKLX0KLQogc3RhdGljIGludCBpbnRlbF9ndHRfc2V0dXBfc2NyYXRjaF9wYWdlKHZvaWQpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CkBAIC00NTUsNyArMzAyLDcgQEAKIAlnZXRfcGFnZShwYWdlKTsKIAlzZXRfcGFnZXNfdWMocGFnZSwgMSk7CiAKLQlpZiAoVVNFX1BDSV9ETUFfQVBJICYmIElOVEVMX0dUVF9HRU4gPiAyKSB7CisJaWYgKGludGVsX3ByaXZhdGUuYmFzZS5uZWVkc19kbWFyKSB7CiAJCWRtYV9hZGRyID0gcGNpX21hcF9wYWdlKGludGVsX3ByaXZhdGUucGNpZGV2LCBwYWdlLCAwLAogCQkJCSAgICBQQUdFX1NJWkUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoaW50ZWxfcHJpdmF0ZS5wY2lkZXYsIGRtYV9hZGRyKSkKQEAgLTQ3MCwzNCArMzE3LDQ1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXBlcl9zaXplX2luZm9fZml4ZWQgY29uc3QgaW50ZWxfZmFrZV9hZ3Bfc2l6ZXNbXSA9IHsKK3N0YXRpYyB2b2lkIGk4MTBfd3JpdGVfZW50cnkoZG1hX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBpbnQgZW50cnksCisJCQkgICAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwl1MzIgcHRlX2ZsYWdzID0gSTgxMF9QVEVfVkFMSUQ7CisKKwlzd2l0Y2ggKGZsYWdzKSB7CisJY2FzZSBBR1BfRENBQ0hFX01FTU9SWToKKwkJcHRlX2ZsYWdzIHw9IEk4MTBfUFRFX0xPQ0FMOworCQlicmVhazsKKwljYXNlIEFHUF9VU0VSX0NBQ0hFRF9NRU1PUlk6CisJCXB0ZV9mbGFncyB8PSBJODMwX1BURV9TWVNURU1fQ0FDSEVEOworCQlicmVhazsKKwl9CisKKwl3cml0ZWwoYWRkciB8IHB0ZV9mbGFncywgaW50ZWxfcHJpdmF0ZS5ndHQgKyBlbnRyeSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXBlcl9zaXplX2luZm9fZml4ZWQgaW50ZWxfZmFrZV9hZ3Bfc2l6ZXNbXSA9IHsKKwl7MzIsIDgxOTIsIDN9LAorCXs2NCwgMTYzODQsIDR9LAogCXsxMjgsIDMyNzY4LCA1fSwKLQkvKiBUaGUgNjRNIG1vZGUgc3RpbGwgcmVxdWlyZXMgYSAxMjhrIGdhdHQgKi8KLQl7NjQsIDE2Mzg0LCA1fSwKIAl7MjU2LCA2NTUzNiwgNn0sCiAJezUxMiwgMTMxMDcyLCA3fSwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfZ3R0X3N0b2xlbl9lbnRyaWVzKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgaW50IGludGVsX2d0dF9zdG9sZW5fc2l6ZSh2b2lkKQogewogCXUxNiBnbWNoX2N0cmw7CiAJdTggcmRjdDsKIAlpbnQgbG9jYWwgPSAwOwogCXN0YXRpYyBjb25zdCBpbnQgZGR0WzRdID0geyAwLCAxNiwgMzIsIDY0IH07Ci0JdW5zaWduZWQgaW50IG92ZXJoZWFkX2VudHJpZXMsIHN0b2xlbl9lbnRyaWVzOwogCXVuc2lnbmVkIGludCBzdG9sZW5fc2l6ZSA9IDA7CiAKKwlpZiAoSU5URUxfR1RUX0dFTiA9PSAxKQorCQlyZXR1cm4gMDsgLyogbm8gc3RvbGVuIG1lbSBvbiBpODF4ICovCisKIAlwY2lfcmVhZF9jb25maWdfd29yZChpbnRlbF9wcml2YXRlLmJyaWRnZV9kZXYsCiAJCQkgICAgIEk4MzBfR01DSF9DVFJMLCAmZ21jaF9jdHJsKTsKIAotCWlmIChJTlRFTF9HVFRfR0VOID4gNCB8fCBJU19QSU5FVklFVykKLQkJb3ZlcmhlYWRfZW50cmllcyA9IDA7Ci0JZWxzZQotCQlvdmVyaGVhZF9lbnRyaWVzID0gaW50ZWxfcHJpdmF0ZS5iYXNlLmd0dF9tYXBwYWJsZV9lbnRyaWVzCi0JCQkvIDEwMjQ7Ci0KLQlvdmVyaGVhZF9lbnRyaWVzICs9IDE7IC8qIEJJT1MgcG9wdXAgKi8KLQogCWlmIChpbnRlbF9wcml2YXRlLmJyaWRnZV9kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODMwX0hCIHx8CiAJICAgIGludGVsX3ByaXZhdGUuYnJpZGdlX2Rldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NDVHX0hCKSB7CiAJCXN3aXRjaCAoZ21jaF9jdHJsICYgSTgzMF9HTUNIX0dNU19NQVNLKSB7CkBAIC02MjMsMTIgKzQ4MSw3IEBACiAJCX0KIAl9CiAKLQlpZiAoIWxvY2FsICYmIHN0b2xlbl9zaXplID4gaW50ZWxfbWF4X3N0b2xlbikgewotCQlkZXZfaW5mbygmaW50ZWxfcHJpdmF0ZS5icmlkZ2VfZGV2LT5kZXYsCi0JCQkgImRldGVjdGVkICVkSyBzdG9sZW4gbWVtb3J5LCB0cmltbWluZyB0byAlZEtcbiIsCi0JCQkgc3RvbGVuX3NpemUgLyBLQigxKSwgaW50ZWxfbWF4X3N0b2xlbiAvIEtCKDEpKTsKLQkJc3RvbGVuX3NpemUgPSBpbnRlbF9tYXhfc3RvbGVuOwotCX0gZWxzZSBpZiAoc3RvbGVuX3NpemUgPiAwKSB7CisJaWYgKHN0b2xlbl9zaXplID4gMCkgewogCQlkZXZfaW5mbygmaW50ZWxfcHJpdmF0ZS5icmlkZ2VfZGV2LT5kZXYsICJkZXRlY3RlZCAlZEsgJXMgbWVtb3J5XG4iLAogCQkgICAgICAgc3RvbGVuX3NpemUgLyBLQigxKSwgbG9jYWwgPyAibG9jYWwiIDogInN0b2xlbiIpOwogCX0gZWxzZSB7CkBAIC02MzcsNDYgKzQ5MCw4OCBAQAogCQlzdG9sZW5fc2l6ZSA9IDA7CiAJfQogCi0Jc3RvbGVuX2VudHJpZXMgPSBzdG9sZW5fc2l6ZS9LQig0KSAtIG92ZXJoZWFkX2VudHJpZXM7CisJcmV0dXJuIHN0b2xlbl9zaXplOworfQogCi0JcmV0dXJuIHN0b2xlbl9lbnRyaWVzOworc3RhdGljIHZvaWQgaTk2NV9hZGp1c3RfcGdldGJsX3NpemUodW5zaWduZWQgaW50IHNpemVfZmxhZykKK3sKKwl1MzIgcGdldGJsX2N0bCwgcGdldGJsX2N0bDI7CisKKwkvKiBlbnN1cmUgdGhhdCBwcGd0dCBpcyBkaXNhYmxlZCAqLworCXBnZXRibF9jdGwyID0gcmVhZGwoaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTk2NV9QR0VUQkxfQ1RMMik7CisJcGdldGJsX2N0bDIgJj0gfkk4MTBfUEdFVEJMX0VOQUJMRUQ7CisJd3JpdGVsKHBnZXRibF9jdGwyLCBpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJOTY1X1BHRVRCTF9DVEwyKTsKKworCS8qIHdyaXRlIHRoZSBuZXcgZ2d0dCBzaXplICovCisJcGdldGJsX2N0bCA9IHJlYWRsKGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUEdFVEJMX0NUTCk7CisJcGdldGJsX2N0bCAmPSB+STk2NV9QR0VUQkxfU0laRV9NQVNLOworCXBnZXRibF9jdGwgfD0gc2l6ZV9mbGFnOworCXdyaXRlbChwZ2V0YmxfY3RsLCBpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BHRVRCTF9DVEwpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGk5NjVfZ3R0X3RvdGFsX2VudHJpZXModm9pZCkKK3sKKwlpbnQgc2l6ZTsKKwl1MzIgcGdldGJsX2N0bDsKKwl1MTYgZ21jaF9jdGw7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChpbnRlbF9wcml2YXRlLmJyaWRnZV9kZXYsCisJCQkgICAgIEk4MzBfR01DSF9DVFJMLCAmZ21jaF9jdGwpOworCisJaWYgKElOVEVMX0dUVF9HRU4gPT0gNSkgeworCQlzd2l0Y2ggKGdtY2hfY3RsICYgRzR4X0dNQ0hfU0laRV9NQVNLKSB7CisJCWNhc2UgRzR4X0dNQ0hfU0laRV8xTToKKwkJY2FzZSBHNHhfR01DSF9TSVpFX1ZUXzFNOgorCQkJaTk2NV9hZGp1c3RfcGdldGJsX3NpemUoSTk2NV9QR0VUQkxfU0laRV8xTUIpOworCQkJYnJlYWs7CisJCWNhc2UgRzR4X0dNQ0hfU0laRV9WVF8xXzVNOgorCQkJaTk2NV9hZGp1c3RfcGdldGJsX3NpemUoSTk2NV9QR0VUQkxfU0laRV8xXzVNQik7CisJCQlicmVhazsKKwkJY2FzZSBHNHhfR01DSF9TSVpFXzJNOgorCQljYXNlIEc0eF9HTUNIX1NJWkVfVlRfMk06CisJCQlpOTY1X2FkanVzdF9wZ2V0Ymxfc2l6ZShJOTY1X1BHRVRCTF9TSVpFXzJNQik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXBnZXRibF9jdGwgPSByZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BHRVRCTF9DVEwpOworCisJc3dpdGNoIChwZ2V0YmxfY3RsICYgSTk2NV9QR0VUQkxfU0laRV9NQVNLKSB7CisJY2FzZSBJOTY1X1BHRVRCTF9TSVpFXzEyOEtCOgorCQlzaXplID0gS0IoMTI4KTsKKwkJYnJlYWs7CisJY2FzZSBJOTY1X1BHRVRCTF9TSVpFXzI1NktCOgorCQlzaXplID0gS0IoMjU2KTsKKwkJYnJlYWs7CisJY2FzZSBJOTY1X1BHRVRCTF9TSVpFXzUxMktCOgorCQlzaXplID0gS0IoNTEyKTsKKwkJYnJlYWs7CisJLyogR1RUIHBhZ2V0YWJsZSBzaXplcyBiaWdnZXIgdGhhbiA1MTJLQiBhcmUgbm90IHBvc3NpYmxlIG9uIEczMyEgKi8KKwljYXNlIEk5NjVfUEdFVEJMX1NJWkVfMU1COgorCQlzaXplID0gS0IoMTAyNCk7CisJCWJyZWFrOworCWNhc2UgSTk2NV9QR0VUQkxfU0laRV8yTUI6CisJCXNpemUgPSBLQigyMDQ4KTsKKwkJYnJlYWs7CisJY2FzZSBJOTY1X1BHRVRCTF9TSVpFXzFfNU1COgorCQlzaXplID0gS0IoMTAyNCArIDUxMik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9pbmZvKCZpbnRlbF9wcml2YXRlLnBjaWRldi0+ZGV2LAorCQkJICJ1bmtub3duIHBhZ2UgdGFibGUgc2l6ZSwgYXNzdW1pbmcgNTEyS0JcbiIpOworCQlzaXplID0gS0IoNTEyKTsKKwl9CisKKwlyZXR1cm4gc2l6ZS80OwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGludGVsX2d0dF90b3RhbF9lbnRyaWVzKHZvaWQpCiB7CiAJaW50IHNpemU7CiAKLQlpZiAoSVNfRzMzIHx8IElOVEVMX0dUVF9HRU4gPT0gNCB8fCBJTlRFTF9HVFRfR0VOID09IDUpIHsKLQkJdTMyIHBnZXRibF9jdGw7Ci0JCXBnZXRibF9jdGwgPSByZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BHRVRCTF9DVEwpOwotCi0JCXN3aXRjaCAocGdldGJsX2N0bCAmIEk5NjVfUEdFVEJMX1NJWkVfTUFTSykgewotCQljYXNlIEk5NjVfUEdFVEJMX1NJWkVfMTI4S0I6Ci0JCQlzaXplID0gS0IoMTI4KTsKLQkJCWJyZWFrOwotCQljYXNlIEk5NjVfUEdFVEJMX1NJWkVfMjU2S0I6Ci0JCQlzaXplID0gS0IoMjU2KTsKLQkJCWJyZWFrOwotCQljYXNlIEk5NjVfUEdFVEJMX1NJWkVfNTEyS0I6Ci0JCQlzaXplID0gS0IoNTEyKTsKLQkJCWJyZWFrOwotCQljYXNlIEk5NjVfUEdFVEJMX1NJWkVfMU1COgotCQkJc2l6ZSA9IEtCKDEwMjQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSTk2NV9QR0VUQkxfU0laRV8yTUI6Ci0JCQlzaXplID0gS0IoMjA0OCk7Ci0JCQlicmVhazsKLQkJY2FzZSBJOTY1X1BHRVRCTF9TSVpFXzFfNU1COgotCQkJc2l6ZSA9IEtCKDEwMjQgKyA1MTIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkZXZfaW5mbygmaW50ZWxfcHJpdmF0ZS5wY2lkZXYtPmRldiwKLQkJCQkgInVua25vd24gcGFnZSB0YWJsZSBzaXplLCBhc3N1bWluZyA1MTJLQlxuIik7Ci0JCQlzaXplID0gS0IoNTEyKTsKLQkJfQotCi0JCXJldHVybiBzaXplLzQ7Ci0JfSBlbHNlIGlmIChJTlRFTF9HVFRfR0VOID09IDYpIHsKKwlpZiAoSVNfRzMzIHx8IElOVEVMX0dUVF9HRU4gPT0gNCB8fCBJTlRFTF9HVFRfR0VOID09IDUpCisJCXJldHVybiBpOTY1X2d0dF90b3RhbF9lbnRyaWVzKCk7CisJZWxzZSBpZiAoSU5URUxfR1RUX0dFTiA9PSA2KSB7CiAJCXUxNiBzbmJfZ21jaF9jdGw7CiAKIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQoaW50ZWxfcHJpdmF0ZS5wY2lkZXYsIFNOQl9HTUNIX0NUUkwsICZzbmJfZ21jaF9jdGwpOwpAQCAtNzA2LDcgKzYwMSwxOCBAQAogewogCXVuc2lnbmVkIGludCBhcGVydHVyZV9zaXplOwogCi0JaWYgKElOVEVMX0dUVF9HRU4gPT0gMikgeworCWlmIChJTlRFTF9HVFRfR0VOID09IDEpIHsKKwkJdTMyIHNtcmFtX21pc2NjOworCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChpbnRlbF9wcml2YXRlLmJyaWRnZV9kZXYsCisJCQkJICAgICAgSTgxMF9TTVJBTV9NSVNDQywgJnNtcmFtX21pc2NjKTsKKworCQlpZiAoKHNtcmFtX21pc2NjICYgSTgxMF9HRlhfTUVNX1dJTl9TSVpFKQorCQkJCT09IEk4MTBfR0ZYX01FTV9XSU5fMzJNKQorCQkJYXBlcnR1cmVfc2l6ZSA9IE1CKDMyKTsKKwkJZWxzZQorCQkJYXBlcnR1cmVfc2l6ZSA9IE1CKDY0KTsKKwl9IGVsc2UgaWYgKElOVEVMX0dUVF9HRU4gPT0gMikgewogCQl1MTYgZ21jaF9jdHJsOwogCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGludGVsX3ByaXZhdGUuYnJpZGdlX2RldiwKQEAgLTczOSw3ICs2NDUsNyBAQAogCiAJaW91bm1hcChpbnRlbF9wcml2YXRlLmd0dCk7CiAJaW91bm1hcChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycyk7Ci0JCisKIAlpbnRlbF9ndHRfdGVhcmRvd25fc2NyYXRjaF9wYWdlKCk7CiB9CiAKQEAgLTc1NSw2ICs2NjEsMTQgQEAKIAlpbnRlbF9wcml2YXRlLmJhc2UuZ3R0X21hcHBhYmxlX2VudHJpZXMgPSBpbnRlbF9ndHRfbWFwcGFibGVfZW50cmllcygpOwogCWludGVsX3ByaXZhdGUuYmFzZS5ndHRfdG90YWxfZW50cmllcyA9IGludGVsX2d0dF90b3RhbF9lbnRyaWVzKCk7CiAKKwkvKiBzYXZlIHRoZSBQR0VUQkwgcmVnIGZvciByZXN1bWUgKi8KKwlpbnRlbF9wcml2YXRlLlBHRVRCTF9zYXZlID0KKwkJcmVhZGwoaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9QR0VUQkxfQ1RMKQorCQkJJiB+STgxMF9QR0VUQkxfRU5BQkxFRDsKKwkvKiB3ZSBvbmx5IGV2ZXIgcmVzdG9yZSB0aGUgcmVnaXN0ZXIgd2hlbiBlbmFibGluZyB0aGUgUEdUQkwuLi4gKi8KKwlpZiAoSEFTX1BHVEJMX0VOKQorCQlpbnRlbF9wcml2YXRlLlBHRVRCTF9zYXZlIHw9IEk4MTBfUEdFVEJMX0VOQUJMRUQ7CisKIAlkZXZfaW5mbygmaW50ZWxfcHJpdmF0ZS5icmlkZ2VfZGV2LT5kZXYsCiAJCQkiZGV0ZWN0ZWQgZ3R0IHNpemU6ICVkSyB0b3RhbCwgJWRLIG1hcHBhYmxlXG4iLAogCQkJaW50ZWxfcHJpdmF0ZS5iYXNlLmd0dF90b3RhbF9lbnRyaWVzICogNCwKQEAgLTc3MiwxNCArNjg2LDkgQEAKIAogCWdsb2JhbF9jYWNoZV9mbHVzaCgpOyAgIC8qIEZJWE1FOiA/ICovCiAKLQkvKiB3ZSBoYXZlIHRvIGNhbGwgdGhpcyBhcyBlYXJseSBhcyBwb3NzaWJsZSBhZnRlciB0aGUgTU1JTyBiYXNlIGFkZHJlc3MgaXMga25vd24gKi8KLQlpbnRlbF9wcml2YXRlLmJhc2UuZ3R0X3N0b2xlbl9lbnRyaWVzID0gaW50ZWxfZ3R0X3N0b2xlbl9lbnRyaWVzKCk7Ci0JaWYgKGludGVsX3ByaXZhdGUuYmFzZS5ndHRfc3RvbGVuX2VudHJpZXMgPT0gMCkgewotCQlpbnRlbF9wcml2YXRlLmRyaXZlci0+Y2xlYW51cCgpOwotCQlpb3VubWFwKGludGVsX3ByaXZhdGUucmVnaXN0ZXJzKTsKLQkJaW91bm1hcChpbnRlbF9wcml2YXRlLmd0dCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwlpbnRlbF9wcml2YXRlLmJhc2Uuc3RvbGVuX3NpemUgPSBpbnRlbF9ndHRfc3RvbGVuX3NpemUoKTsKKworCWludGVsX3ByaXZhdGUuYmFzZS5uZWVkc19kbWFyID0gVVNFX1BDSV9ETUFfQVBJICYmIElOVEVMX0dUVF9HRU4gPiAyOwogCiAJcmV0ID0gaW50ZWxfZ3R0X3NldHVwX3NjcmF0Y2hfcGFnZSgpOwogCWlmIChyZXQgIT0gMCkgewpAQCAtODYyLDI1ICs3NzEsMTkgQEAKIAkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXUzMiBwdGVfZmxhZ3MgPSBJODEwX1BURV9WQUxJRDsKLQkKLQlzd2l0Y2ggKGZsYWdzKSB7Ci0JY2FzZSBBR1BfRENBQ0hFX01FTU9SWToKLQkJcHRlX2ZsYWdzIHw9IEk4MTBfUFRFX0xPQ0FMOwotCQlicmVhazsKLQljYXNlIEFHUF9VU0VSX0NBQ0hFRF9NRU1PUlk6CisKKwlpZiAoZmxhZ3MgPT0gIEFHUF9VU0VSX0NBQ0hFRF9NRU1PUlkpCiAJCXB0ZV9mbGFncyB8PSBJODMwX1BURV9TWVNURU1fQ0FDSEVEOwotCQlicmVhazsKLQl9CiAKIAl3cml0ZWwoYWRkciB8IHB0ZV9mbGFncywgaW50ZWxfcHJpdmF0ZS5ndHQgKyBlbnRyeSk7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX2VuYWJsZV9ndHQodm9pZCkKK3N0YXRpYyBib29sIGludGVsX2VuYWJsZV9ndHQodm9pZCkKIHsKIAl1MzIgZ21hX2FkZHI7Ci0JdTE2IGdtY2hfY3RybDsKKwl1OCBfX2lvbWVtICpyZWc7CiAKLQlpZiAoSU5URUxfR1RUX0dFTiA9PSAyKQorCWlmIChJTlRFTF9HVFRfR0VOIDw9IDIpCiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChpbnRlbF9wcml2YXRlLnBjaWRldiwgSTgxMF9HTUFERFIsCiAJCQkJICAgICAgJmdtYV9hZGRyKTsKIAllbHNlCkBAIC04ODksMTMgKzc5Miw0NyBAQAogCiAJaW50ZWxfcHJpdmF0ZS5nbWFfYnVzX2FkZHIgPSAoZ21hX2FkZHIgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLKTsKIAotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGludGVsX3ByaXZhdGUuYnJpZGdlX2RldiwgSTgzMF9HTUNIX0NUUkwsICZnbWNoX2N0cmwpOwotCWdtY2hfY3RybCB8PSBJODMwX0dNQ0hfRU5BQkxFRDsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoaW50ZWxfcHJpdmF0ZS5icmlkZ2VfZGV2LCBJODMwX0dNQ0hfQ1RSTCwgZ21jaF9jdHJsKTsKKwlpZiAoSU5URUxfR1RUX0dFTiA+PSA2KQorCSAgICByZXR1cm4gdHJ1ZTsKIAotCXdyaXRlbChpbnRlbF9wcml2YXRlLnB0ZV9idXNfYWRkcnxJODEwX1BHRVRCTF9FTkFCTEVELAotCSAgICAgICBpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BHRVRCTF9DVEwpOwotCXJlYWRsKGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUEdFVEJMX0NUTCk7CS8qIFBDSSBQb3N0aW5nLiAqLworCWlmIChJTlRFTF9HVFRfR0VOID09IDIpIHsKKwkJdTE2IGdtY2hfY3RybDsKKworCQlwY2lfcmVhZF9jb25maWdfd29yZChpbnRlbF9wcml2YXRlLmJyaWRnZV9kZXYsCisJCQkJICAgICBJODMwX0dNQ0hfQ1RSTCwgJmdtY2hfY3RybCk7CisJCWdtY2hfY3RybCB8PSBJODMwX0dNQ0hfRU5BQkxFRDsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGludGVsX3ByaXZhdGUuYnJpZGdlX2RldiwKKwkJCQkgICAgICBJODMwX0dNQ0hfQ1RSTCwgZ21jaF9jdHJsKTsKKworCQlwY2lfcmVhZF9jb25maWdfd29yZChpbnRlbF9wcml2YXRlLmJyaWRnZV9kZXYsCisJCQkJICAgICBJODMwX0dNQ0hfQ1RSTCwgJmdtY2hfY3RybCk7CisJCWlmICgoZ21jaF9jdHJsICYgSTgzMF9HTUNIX0VOQUJMRUQpID09IDApIHsKKwkJCWRldl9lcnIoJmludGVsX3ByaXZhdGUucGNpZGV2LT5kZXYsCisJCQkJImZhaWxlZCB0byBlbmFibGUgdGhlIEdUVDogR01DSF9DVFJMPSV4XG4iLAorCQkJCWdtY2hfY3RybCk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwkvKiBPbiB0aGUgcmVzdW1lIHBhdGggd2UgbWF5IGJlIGFkanVzdGluZyB0aGUgUEdUQkwgdmFsdWUsIHNvCisJICogYmUgcGFyYW5vaWQgYW5kIGZsdXNoIGFsbCBjaGlwc2V0IHdyaXRlIGJ1ZmZlcnMuLi4KKwkgKi8KKwlpZiAoSU5URUxfR1RUX0dFTiA+PSAzKQorCQl3cml0ZWwoMCwgaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrR0ZYX0ZMU0hfQ05UTCk7CisKKwlyZWcgPSBpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BHRVRCTF9DVEw7CisJd3JpdGVsKGludGVsX3ByaXZhdGUuUEdFVEJMX3NhdmUsIHJlZyk7CisJaWYgKEhBU19QR1RCTF9FTiAmJiAocmVhZGwocmVnKSAmIEk4MTBfUEdFVEJMX0VOQUJMRUQpID09IDApIHsKKwkJZGV2X2VycigmaW50ZWxfcHJpdmF0ZS5wY2lkZXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gZW5hYmxlIHRoZSBHVFQ6IFBHRVRCTD0leCBbZXhwZWN0ZWQgJXhdXG4iLAorCQkJcmVhZGwocmVnKSwgaW50ZWxfcHJpdmF0ZS5QR0VUQkxfc2F2ZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoSU5URUxfR1RUX0dFTiA+PSAzKQorCQl3cml0ZWwoMCwgaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrR0ZYX0ZMU0hfQ05UTCk7CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGludCBpODMwX3NldHVwKHZvaWQpCkBAIC05MTAsOCArODQ3LDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpbnRlbF9wcml2YXRlLmd0dF9idXNfYWRkciA9IHJlZ19hZGRyICsgSTgxMF9QVEVfQkFTRTsKLQlpbnRlbF9wcml2YXRlLnB0ZV9idXNfYWRkciA9Ci0JCXJlYWRsKGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUEdFVEJMX0NUTCkgJiAweGZmZmZmMDAwOwogCiAJaW50ZWxfaTgzMF9zZXR1cF9mbHVzaCgpOwogCkBAIC05MzYsMTIgKzg3MSwxMiBAQAogewogCWludCBpOwogCi0JaW50ZWxfZW5hYmxlX2d0dCgpOworCWlmICghaW50ZWxfZW5hYmxlX2d0dCgpKQorCSAgICByZXR1cm4gLUVJTzsKIAogCWFncF9icmlkZ2UtPmdhcnRfYnVzX2FkZHIgPSBpbnRlbF9wcml2YXRlLmdtYV9idXNfYWRkcjsKIAotCWZvciAoaSA9IGludGVsX3ByaXZhdGUuYmFzZS5ndHRfc3RvbGVuX2VudHJpZXM7Ci0JCQlpIDwgaW50ZWxfcHJpdmF0ZS5iYXNlLmd0dF90b3RhbF9lbnRyaWVzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgaW50ZWxfcHJpdmF0ZS5iYXNlLmd0dF90b3RhbF9lbnRyaWVzOyBpKyspIHsKIAkJaW50ZWxfcHJpdmF0ZS5kcml2ZXItPndyaXRlX2VudHJ5KGludGVsX3ByaXZhdGUuc2NyYXRjaF9wYWdlX2RtYSwKIAkJCQkJCSAgaSwgMCk7CiAJfQpAQCAtOTY1LDEwICs5MDAsMTAgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX2d0dF9pbnNlcnRfc2dfZW50cmllcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2xpc3QsCi0JCQkJCXVuc2lnbmVkIGludCBzZ19sZW4sCi0JCQkJCXVuc2lnbmVkIGludCBwZ19zdGFydCwKLQkJCQkJdW5zaWduZWQgaW50IGZsYWdzKQordm9pZCBpbnRlbF9ndHRfaW5zZXJ0X3NnX2VudHJpZXMoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19saXN0LAorCQkJCSB1bnNpZ25lZCBpbnQgc2dfbGVuLAorCQkJCSB1bnNpZ25lZCBpbnQgcGdfc3RhcnQsCisJCQkJIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXVuc2lnbmVkIGludCBsZW4sIG07CkBAIC05ODksMjcgKzkyNCwzNCBAQAogCX0KIAlyZWFkbChpbnRlbF9wcml2YXRlLmd0dCtqLTEpOwogfQorRVhQT1JUX1NZTUJPTChpbnRlbF9ndHRfaW5zZXJ0X3NnX2VudHJpZXMpOworCit2b2lkIGludGVsX2d0dF9pbnNlcnRfcGFnZXModW5zaWduZWQgaW50IGZpcnN0X2VudHJ5LCB1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXMsCisJCQkgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWludCBpLCBqOworCisJZm9yIChpID0gMCwgaiA9IGZpcnN0X2VudHJ5OyBpIDwgbnVtX2VudHJpZXM7IGkrKywgaisrKSB7CisJCWRtYV9hZGRyX3QgYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSk7CisJCWludGVsX3ByaXZhdGUuZHJpdmVyLT53cml0ZV9lbnRyeShhZGRyLAorCQkJCQkJICBqLCBmbGFncyk7CisJfQorCXJlYWRsKGludGVsX3ByaXZhdGUuZ3R0K2otMSk7Cit9CitFWFBPUlRfU1lNQk9MKGludGVsX2d0dF9pbnNlcnRfcGFnZXMpOwogCiBzdGF0aWMgaW50IGludGVsX2Zha2VfYWdwX2luc2VydF9lbnRyaWVzKHN0cnVjdCBhZ3BfbWVtb3J5ICptZW0sCiAJCQkJCSBvZmZfdCBwZ19zdGFydCwgaW50IHR5cGUpCiB7Ci0JaW50IGksIGo7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKKwlpZiAoSU5URUxfR1RUX0dFTiA9PSAxICYmIHR5cGUgPT0gQUdQX0RDQUNIRV9NRU1PUlkpCisJCXJldHVybiBpODEwX2luc2VydF9kY2FjaGVfZW50cmllcyhtZW0sIHBnX3N0YXJ0LCB0eXBlKTsKKwogCWlmIChtZW0tPnBhZ2VfY291bnQgPT0gMCkKIAkJZ290byBvdXQ7CiAKLQlpZiAocGdfc3RhcnQgPCBpbnRlbF9wcml2YXRlLmJhc2UuZ3R0X3N0b2xlbl9lbnRyaWVzKSB7Ci0JCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmludGVsX3ByaXZhdGUucGNpZGV2LT5kZXYsCi0JCQkgICAicGdfc3RhcnQgPT0gMHglLjhseCwgZ3R0X3N0b2xlbl9lbnRyaWVzID09IDB4JS44eFxuIiwKLQkJCSAgIHBnX3N0YXJ0LCBpbnRlbF9wcml2YXRlLmJhc2UuZ3R0X3N0b2xlbl9lbnRyaWVzKTsKLQotCQlkZXZfaW5mbygmaW50ZWxfcHJpdmF0ZS5wY2lkZXYtPmRldiwKLQkJCSAidHJ5aW5nIHRvIGluc2VydCBpbnRvIGxvY2FsL3N0b2xlbiBtZW1vcnlcbiIpOwotCQlnb3RvIG91dF9lcnI7Ci0JfQotCi0JaWYgKChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCkgPiBpbnRlbF9wcml2YXRlLmJhc2UuZ3R0X3RvdGFsX2VudHJpZXMpCisJaWYgKHBnX3N0YXJ0ICsgbWVtLT5wYWdlX2NvdW50ID4gaW50ZWxfcHJpdmF0ZS5iYXNlLmd0dF90b3RhbF9lbnRyaWVzKQogCQlnb3RvIG91dF9lcnI7CiAKIAlpZiAodHlwZSAhPSBtZW0tPnR5cGUpCkBAIC0xMDIxLDIxICs5NjMsMTcgQEAKIAlpZiAoIW1lbS0+aXNfZmx1c2hlZCkKIAkJZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7CiAKLQlpZiAoVVNFX1BDSV9ETUFfQVBJICYmIElOVEVMX0dUVF9HRU4gPiAyKSB7Ci0JCXJldCA9IGludGVsX2FncF9tYXBfbWVtb3J5KG1lbSk7CisJaWYgKGludGVsX3ByaXZhdGUuYmFzZS5uZWVkc19kbWFyKSB7CisJCXJldCA9IGludGVsX2d0dF9tYXBfbWVtb3J5KG1lbS0+cGFnZXMsIG1lbS0+cGFnZV9jb3VudCwKKwkJCQkJICAgJm1lbS0+c2dfbGlzdCwgJm1lbS0+bnVtX3NnKTsKIAkJaWYgKHJldCAhPSAwKQogCQkJcmV0dXJuIHJldDsKIAogCQlpbnRlbF9ndHRfaW5zZXJ0X3NnX2VudHJpZXMobWVtLT5zZ19saXN0LCBtZW0tPm51bV9zZywKIAkJCQkJICAgIHBnX3N0YXJ0LCB0eXBlKTsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwLCBqID0gcGdfc3RhcnQ7IGkgPCBtZW0tPnBhZ2VfY291bnQ7IGkrKywgaisrKSB7Ci0JCQlkbWFfYWRkcl90IGFkZHIgPSBwYWdlX3RvX3BoeXMobWVtLT5wYWdlc1tpXSk7Ci0JCQlpbnRlbF9wcml2YXRlLmRyaXZlci0+d3JpdGVfZW50cnkoYWRkciwKLQkJCQkJCQkgIGosIHR5cGUpOwotCQl9Ci0JCXJlYWRsKGludGVsX3ByaXZhdGUuZ3R0K2otMSk7Ci0JfQorCX0gZWxzZQorCQlpbnRlbF9ndHRfaW5zZXJ0X3BhZ2VzKHBnX3N0YXJ0LCBtZW0tPnBhZ2VfY291bnQsIG1lbS0+cGFnZXMsCisJCQkJICAgICAgIHR5cGUpOwogCiBvdXQ6CiAJcmV0ID0gMDsKQEAgLTEwNDQsNDAgKzk4Miw1NCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaW50ZWxfZmFrZV9hZ3BfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGFncF9tZW1vcnkgKm1lbSwKLQkJCQkJIG9mZl90IHBnX3N0YXJ0LCBpbnQgdHlwZSkKK3ZvaWQgaW50ZWxfZ3R0X2NsZWFyX3JhbmdlKHVuc2lnbmVkIGludCBmaXJzdF9lbnRyeSwgdW5zaWduZWQgaW50IG51bV9lbnRyaWVzKQogewotCWludCBpOworCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKG1lbS0+cGFnZV9jb3VudCA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWlmIChwZ19zdGFydCA8IGludGVsX3ByaXZhdGUuYmFzZS5ndHRfc3RvbGVuX2VudHJpZXMpIHsKLQkJZGV2X2luZm8oJmludGVsX3ByaXZhdGUucGNpZGV2LT5kZXYsCi0JCQkgInRyeWluZyB0byBkaXNhYmxlIGxvY2FsL3N0b2xlbiBtZW1vcnlcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoVVNFX1BDSV9ETUFfQVBJICYmIElOVEVMX0dUVF9HRU4gPiAyKQotCQlpbnRlbF9hZ3BfdW5tYXBfbWVtb3J5KG1lbSk7Ci0KLQlmb3IgKGkgPSBwZ19zdGFydDsgaSA8IChtZW0tPnBhZ2VfY291bnQgKyBwZ19zdGFydCk7IGkrKykgeworCWZvciAoaSA9IGZpcnN0X2VudHJ5OyBpIDwgKGZpcnN0X2VudHJ5ICsgbnVtX2VudHJpZXMpOyBpKyspIHsKIAkJaW50ZWxfcHJpdmF0ZS5kcml2ZXItPndyaXRlX2VudHJ5KGludGVsX3ByaXZhdGUuc2NyYXRjaF9wYWdlX2RtYSwKIAkJCQkJCSAgaSwgMCk7CiAJfQogCXJlYWRsKGludGVsX3ByaXZhdGUuZ3R0K2ktMSk7Cit9CitFWFBPUlRfU1lNQk9MKGludGVsX2d0dF9jbGVhcl9yYW5nZSk7CisKK3N0YXRpYyBpbnQgaW50ZWxfZmFrZV9hZ3BfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGFncF9tZW1vcnkgKm1lbSwKKwkJCQkJIG9mZl90IHBnX3N0YXJ0LCBpbnQgdHlwZSkKK3sKKwlpZiAobWVtLT5wYWdlX2NvdW50ID09IDApCisJCXJldHVybiAwOworCisJaW50ZWxfZ3R0X2NsZWFyX3JhbmdlKHBnX3N0YXJ0LCBtZW0tPnBhZ2VfY291bnQpOworCisJaWYgKGludGVsX3ByaXZhdGUuYmFzZS5uZWVkc19kbWFyKSB7CisJCWludGVsX2d0dF91bm1hcF9tZW1vcnkobWVtLT5zZ19saXN0LCBtZW0tPm51bV9zZyk7CisJCW1lbS0+c2dfbGlzdCA9IE5VTEw7CisJCW1lbS0+bnVtX3NnID0gMDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfZmFrZV9hZ3BfY2hpcHNldF9mbHVzaChzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpCi17Ci0JaW50ZWxfcHJpdmF0ZS5kcml2ZXItPmNoaXBzZXRfZmx1c2goKTsKLX0KLQogc3RhdGljIHN0cnVjdCBhZ3BfbWVtb3J5ICppbnRlbF9mYWtlX2FncF9hbGxvY19ieV90eXBlKHNpemVfdCBwZ19jb3VudCwKIAkJCQkJCSAgICAgICBpbnQgdHlwZSkKIHsKKwlzdHJ1Y3QgYWdwX21lbW9yeSAqbmV3OworCisJaWYgKHR5cGUgPT0gQUdQX0RDQUNIRV9NRU1PUlkgJiYgSU5URUxfR1RUX0dFTiA9PSAxKSB7CisJCWlmIChwZ19jb3VudCAhPSBpbnRlbF9wcml2YXRlLm51bV9kY2FjaGVfZW50cmllcykKKwkJCXJldHVybiBOVUxMOworCisJCW5ldyA9IGFncF9jcmVhdGVfbWVtb3J5KDEpOworCQlpZiAobmV3ID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKworCQluZXctPnR5cGUgPSBBR1BfRENBQ0hFX01FTU9SWTsKKwkJbmV3LT5wYWdlX2NvdW50ID0gcGdfY291bnQ7CisJCW5ldy0+bnVtX3NjcmF0Y2hfcGFnZXMgPSAwOworCQlhZ3BfZnJlZV9wYWdlX2FycmF5KG5ldyk7CisJCXJldHVybiBuZXc7CisJfQogCWlmICh0eXBlID09IEFHUF9QSFlTX01FTU9SWSkKIAkJcmV0dXJuIGFsbG9jX2FncHBoeXNtZW1faTh4eChwZ19jb3VudCwgdHlwZSk7CiAJLyogYWx3YXlzIHJldHVybiBOVUxMIGZvciBvdGhlciBhbGxvY2F0aW9uIHR5cGVzIGZvciBub3cgKi8KQEAgLTEyNzQsNDAgKzEyMjYsMTEgQEAKIAkJaW50ZWxfcHJpdmF0ZS5ndHRfYnVzX2FkZHIgPSByZWdfYWRkciArIGd0dF9vZmZzZXQ7CiAJfQogCi0JaW50ZWxfcHJpdmF0ZS5wdGVfYnVzX2FkZHIgPQotCQlyZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BHRVRCTF9DVEwpICYgMHhmZmZmZjAwMDsKLQogCWludGVsX2k5eHhfc2V0dXBfZmx1c2goKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGludGVsXzgxMF9kcml2ZXIgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkuYXBlcnR1cmVfc2l6ZXMJCT0gaW50ZWxfaTgxMF9zaXplcywKLQkuc2l6ZV90eXBlCQk9IEZJWEVEX0FQRVJfU0laRSwKLQkubnVtX2FwZXJ0dXJlX3NpemVzCT0gMiwKLQkubmVlZHNfc2NyYXRjaF9wYWdlCT0gdHJ1ZSwKLQkuY29uZmlndXJlCQk9IGludGVsX2k4MTBfY29uZmlndXJlLAotCS5mZXRjaF9zaXplCQk9IGludGVsX2k4MTBfZmV0Y2hfc2l6ZSwKLQkuY2xlYW51cAkJPSBpbnRlbF9pODEwX2NsZWFudXAsCi0JLm1hc2tfbWVtb3J5CQk9IGludGVsX2k4MTBfbWFza19tZW1vcnksCi0JLm1hc2tzCQkJPSBpbnRlbF9pODEwX21hc2tzLAotCS5hZ3BfZW5hYmxlCQk9IGludGVsX2Zha2VfYWdwX2VuYWJsZSwKLQkuY2FjaGVfZmx1c2gJCT0gZ2xvYmFsX2NhY2hlX2ZsdXNoLAotCS5jcmVhdGVfZ2F0dF90YWJsZQk9IGFncF9nZW5lcmljX2NyZWF0ZV9nYXR0X3RhYmxlLAotCS5mcmVlX2dhdHRfdGFibGUJPSBhZ3BfZ2VuZXJpY19mcmVlX2dhdHRfdGFibGUsCi0JLmluc2VydF9tZW1vcnkJCT0gaW50ZWxfaTgxMF9pbnNlcnRfZW50cmllcywKLQkucmVtb3ZlX21lbW9yeQkJPSBpbnRlbF9pODEwX3JlbW92ZV9lbnRyaWVzLAotCS5hbGxvY19ieV90eXBlCQk9IGludGVsX2k4MTBfYWxsb2NfYnlfdHlwZSwKLQkuZnJlZV9ieV90eXBlCQk9IGludGVsX2k4MTBfZnJlZV9ieV90eXBlLAotCS5hZ3BfYWxsb2NfcGFnZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19wYWdlLAotCS5hZ3BfYWxsb2NfcGFnZXMgICAgICAgID0gYWdwX2dlbmVyaWNfYWxsb2NfcGFnZXMsCi0JLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCi0JLmFncF9kZXN0cm95X3BhZ2VzICAgICAgPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2VzLAotCS5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGludGVsX2Zha2VfYWdwX2RyaXZlciA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5zaXplX3R5cGUJCT0gRklYRURfQVBFUl9TSVpFLApAQCAtMTMyOCwxNSArMTI1MSwyMCBAQAogCS5hZ3BfYWxsb2NfcGFnZXMgICAgICAgID0gYWdwX2dlbmVyaWNfYWxsb2NfcGFnZXMsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2VzICAgICAgPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2VzLAotCS5jaGlwc2V0X2ZsdXNoCQk9IGludGVsX2Zha2VfYWdwX2NoaXBzZXRfZmx1c2gsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2d0dF9kcml2ZXIgaTgxeF9ndHRfZHJpdmVyID0gewogCS5nZW4gPSAxLAorCS5oYXNfcGd0YmxfZW5hYmxlID0gMSwKIAkuZG1hX21hc2tfc2l6ZSA9IDMyLAorCS5zZXR1cCA9IGk4MTBfc2V0dXAsCisJLmNsZWFudXAgPSBpODEwX2NsZWFudXAsCisJLmNoZWNrX2ZsYWdzID0gaTgzMF9jaGVja19mbGFncywKKwkud3JpdGVfZW50cnkgPSBpODEwX3dyaXRlX2VudHJ5LAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZ3R0X2RyaXZlciBpOHh4X2d0dF9kcml2ZXIgPSB7CiAJLmdlbiA9IDIsCisJLmhhc19wZ3RibF9lbmFibGUgPSAxLAogCS5zZXR1cCA9IGk4MzBfc2V0dXAsCiAJLmNsZWFudXAgPSBpODMwX2NsZWFudXAsCiAJLndyaXRlX2VudHJ5ID0gaTgzMF93cml0ZV9lbnRyeSwKQEAgLTEzNDYsMTAgKzEyNzQsMTEgQEAKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2d0dF9kcml2ZXIgaTkxNV9ndHRfZHJpdmVyID0gewogCS5nZW4gPSAzLAorCS5oYXNfcGd0YmxfZW5hYmxlID0gMSwKIAkuc2V0dXAgPSBpOXh4X3NldHVwLAogCS5jbGVhbnVwID0gaTl4eF9jbGVhbnVwLAogCS8qIGk5NDUgaXMgdGhlIGxhc3QgZ3B1IHRvIG5lZWQgcGh5cyBtZW0gKGZvciBvdmVybGF5IGFuZCBjdXJzb3JzKS4gKi8KLQkud3JpdGVfZW50cnkgPSBpODMwX3dyaXRlX2VudHJ5LCAKKwkud3JpdGVfZW50cnkgPSBpODMwX3dyaXRlX2VudHJ5LAogCS5kbWFfbWFza19zaXplID0gMzIsCiAJLmNoZWNrX2ZsYWdzID0gaTgzMF9jaGVja19mbGFncywKIAkuY2hpcHNldF9mbHVzaCA9IGk5eHhfY2hpcHNldF9mbHVzaCwKQEAgLTEzNzYsNiArMTMwNSw3IEBACiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9ndHRfZHJpdmVyIGk5NjVfZ3R0X2RyaXZlciA9IHsKIAkuZ2VuID0gNCwKKwkuaGFzX3BndGJsX2VuYWJsZSA9IDEsCiAJLnNldHVwID0gaTl4eF9zZXR1cCwKIAkuY2xlYW51cCA9IGk5eHhfY2xlYW51cCwKIAkud3JpdGVfZW50cnkgPSBpOTY1X3dyaXRlX2VudHJ5LApAQCAtMTQxOSw5MyArMTM0OSw5MiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9ndHRfZHJpdmVyX2Rlc2NyaXB0aW9uIHsKIAl1bnNpZ25lZCBpbnQgZ21jaF9jaGlwX2lkOwogCWNoYXIgKm5hbWU7Ci0JY29uc3Qgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyICpnbWNoX2RyaXZlcjsKIAljb25zdCBzdHJ1Y3QgaW50ZWxfZ3R0X2RyaXZlciAqZ3R0X2RyaXZlcjsKIH0gaW50ZWxfZ3R0X2NoaXBzZXRzW10gPSB7Ci0JeyBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODEwX0lHMSwgImk4MTAiLCAmaW50ZWxfODEwX2RyaXZlciwKKwl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTBfSUcxLCAiaTgxMCIsCiAJCSZpODF4X2d0dF9kcml2ZXJ9LAotCXsgUENJX0RFVklDRV9JRF9JTlRFTF84MjgxMF9JRzMsICJpODEwIiwgJmludGVsXzgxMF9kcml2ZXIsCisJeyBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODEwX0lHMywgImk4MTAiLAogCQkmaTgxeF9ndHRfZHJpdmVyfSwKLQl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTBFX0lHLCAiaTgxMCIsICZpbnRlbF84MTBfZHJpdmVyLAorCXsgUENJX0RFVklDRV9JRF9JTlRFTF84MjgxMEVfSUcsICJpODEwIiwKIAkJJmk4MXhfZ3R0X2RyaXZlcn0sCi0JeyBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODE1X0NHQywgImk4MTUiLCAmaW50ZWxfODEwX2RyaXZlciwKKwl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTVfQ0dDLCAiaTgxNSIsCiAJCSZpODF4X2d0dF9kcml2ZXJ9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF84MjgzMF9DR0MsICI4MzBNIiwKLQkJJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJmk4eHhfZ3R0X2RyaXZlcn0sCisJCSZpOHh4X2d0dF9kcml2ZXJ9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0NUdfSUcsICI4MzBNIiwKLQkJJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJmk4eHhfZ3R0X2RyaXZlcn0sCisJCSZpOHh4X2d0dF9kcml2ZXJ9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg1NF9JRywgIjg1NCIsCi0JCSZpbnRlbF9mYWtlX2FncF9kcml2ZXIsICZpOHh4X2d0dF9kcml2ZXJ9LAorCQkmaTh4eF9ndHRfZHJpdmVyfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NTVHTV9JRywgIjg1NUdNIiwKLQkJJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJmk4eHhfZ3R0X2RyaXZlcn0sCisJCSZpOHh4X2d0dF9kcml2ZXJ9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg2NV9JRywgIjg2NSIsCi0JCSZpbnRlbF9mYWtlX2FncF9kcml2ZXIsICZpOHh4X2d0dF9kcml2ZXJ9LAorCQkmaTh4eF9ndHRfZHJpdmVyfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfRTcyMjFfSUcsICJFNzIyMSAoaTkxNSkiLAotCQkmaW50ZWxfZmFrZV9hZ3BfZHJpdmVyLCAmaTkxNV9ndHRfZHJpdmVyIH0sCisJCSZpOTE1X2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI5MTVHX0lHLCAiOTE1RyIsCi0JCSZpbnRlbF9mYWtlX2FncF9kcml2ZXIsICZpOTE1X2d0dF9kcml2ZXIgfSwKKwkJJmk5MTVfZ3R0X2RyaXZlciB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF84MjkxNUdNX0lHLCAiOTE1R00iLAotCQkmaW50ZWxfZmFrZV9hZ3BfZHJpdmVyLCAmaTkxNV9ndHRfZHJpdmVyIH0sCisJCSZpOTE1X2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NDVHX0lHLCAiOTQ1RyIsCi0JCSZpbnRlbF9mYWtlX2FncF9kcml2ZXIsICZpOTE1X2d0dF9kcml2ZXIgfSwKKwkJJmk5MTVfZ3R0X2RyaXZlciB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF84Mjk0NUdNX0lHLCAiOTQ1R00iLAotCQkmaW50ZWxfZmFrZV9hZ3BfZHJpdmVyLCAmaTkxNV9ndHRfZHJpdmVyIH0sCisJCSZpOTE1X2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NDVHTUVfSUcsICI5NDVHTUUiLAotCQkmaW50ZWxfZmFrZV9hZ3BfZHJpdmVyLCAmaTkxNV9ndHRfZHJpdmVyIH0sCisJCSZpOTE1X2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NDZHWl9JRywgIjk0NkdaIiwKLQkJJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJmk5NjVfZ3R0X2RyaXZlciB9LAorCQkmaTk2NV9ndHRfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyRzM1X0lHLCAiRzM1IiwKLQkJJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJmk5NjVfZ3R0X2RyaXZlciB9LAorCQkmaTk2NV9ndHRfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTY1UV9JRywgIjk2NVEiLAotCQkmaW50ZWxfZmFrZV9hZ3BfZHJpdmVyLCAmaTk2NV9ndHRfZHJpdmVyIH0sCisJCSZpOTY1X2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NjVHX0lHLCAiOTY1RyIsCi0JCSZpbnRlbF9mYWtlX2FncF9kcml2ZXIsICZpOTY1X2d0dF9kcml2ZXIgfSwKKwkJJmk5NjVfZ3R0X2RyaXZlciB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF84Mjk2NUdNX0lHLCAiOTY1R00iLAotCQkmaW50ZWxfZmFrZV9hZ3BfZHJpdmVyLCAmaTk2NV9ndHRfZHJpdmVyIH0sCisJCSZpOTY1X2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NjVHTUVfSUcsICI5NjVHTUUvR0xFIiwKLQkJJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJmk5NjVfZ3R0X2RyaXZlciB9LAorCQkmaTk2NV9ndHRfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0czM19JRywgIkczMyIsCi0JCSZpbnRlbF9mYWtlX2FncF9kcml2ZXIsICZnMzNfZ3R0X2RyaXZlciB9LAorCQkmZzMzX2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfUTM1X0lHLCAiUTM1IiwKLQkJJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJmczM19ndHRfZHJpdmVyIH0sCisJCSZnMzNfZ3R0X2RyaXZlciB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9RMzNfSUcsICJRMzMiLAotCQkmaW50ZWxfZmFrZV9hZ3BfZHJpdmVyLCAmZzMzX2d0dF9kcml2ZXIgfSwKKwkJJmczM19ndHRfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX1BJTkVWSUVXX01fSUcsICJHTUEzMTUwIiwKLQkJJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJnBpbmV2aWV3X2d0dF9kcml2ZXIgfSwKKwkJJnBpbmV2aWV3X2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfUElORVZJRVdfSUcsICJHTUEzMTUwIiwKLQkJJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJnBpbmV2aWV3X2d0dF9kcml2ZXIgfSwKKwkJJnBpbmV2aWV3X2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfR000NV9JRywgIkdNNDUiLAotCQkmaW50ZWxfZmFrZV9hZ3BfZHJpdmVyLCAmZzR4X2d0dF9kcml2ZXIgfSwKKwkJJmc0eF9ndHRfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0VBR0xFTEFLRV9JRywgIkVhZ2xlbGFrZSIsCi0JCSZpbnRlbF9mYWtlX2FncF9kcml2ZXIsICZnNHhfZ3R0X2RyaXZlciB9LAorCQkmZzR4X2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfUTQ1X0lHLCAiUTQ1L1E0MyIsCi0JCSZpbnRlbF9mYWtlX2FncF9kcml2ZXIsICZnNHhfZ3R0X2RyaXZlciB9LAorCQkmZzR4X2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfRzQ1X0lHLCAiRzQ1L0c0MyIsCi0JCSZpbnRlbF9mYWtlX2FncF9kcml2ZXIsICZnNHhfZ3R0X2RyaXZlciB9LAorCQkmZzR4X2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfQjQzX0lHLCAiQjQzIiwKLQkJJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJmc0eF9ndHRfZHJpdmVyIH0sCisJCSZnNHhfZ3R0X2RyaXZlciB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9CNDNfMV9JRywgIkI0MyIsCi0JCSZpbnRlbF9mYWtlX2FncF9kcml2ZXIsICZnNHhfZ3R0X2RyaXZlciB9LAorCQkmZzR4X2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfRzQxX0lHLCAiRzQxIiwKLQkJJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJmc0eF9ndHRfZHJpdmVyIH0sCisJCSZnNHhfZ3R0X2RyaXZlciB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9JUk9OTEFLRV9EX0lHLAotCSAgICAiSEQgR3JhcGhpY3MiLCAmaW50ZWxfZmFrZV9hZ3BfZHJpdmVyLCAmaXJvbmxha2VfZ3R0X2RyaXZlciB9LAorCSAgICAiSEQgR3JhcGhpY3MiLCAmaXJvbmxha2VfZ3R0X2RyaXZlciB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9JUk9OTEFLRV9NX0lHLAotCSAgICAiSEQgR3JhcGhpY3MiLCAmaW50ZWxfZmFrZV9hZ3BfZHJpdmVyLCAmaXJvbmxha2VfZ3R0X2RyaXZlciB9LAorCSAgICAiSEQgR3JhcGhpY3MiLCAmaXJvbmxha2VfZ3R0X2RyaXZlciB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9HVDFfSUcsCi0JICAgICJTYW5keWJyaWRnZSIsICZpbnRlbF9mYWtlX2FncF9kcml2ZXIsICZzYW5keWJyaWRnZV9ndHRfZHJpdmVyIH0sCisJICAgICJTYW5keWJyaWRnZSIsICZzYW5keWJyaWRnZV9ndHRfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX0dUMl9JRywKLQkgICAgIlNhbmR5YnJpZGdlIiwgJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJnNhbmR5YnJpZGdlX2d0dF9kcml2ZXIgfSwKKwkgICAgIlNhbmR5YnJpZGdlIiwgJnNhbmR5YnJpZGdlX2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfR1QyX1BMVVNfSUcsCi0JICAgICJTYW5keWJyaWRnZSIsICZpbnRlbF9mYWtlX2FncF9kcml2ZXIsICZzYW5keWJyaWRnZV9ndHRfZHJpdmVyIH0sCisJICAgICJTYW5keWJyaWRnZSIsICZzYW5keWJyaWRnZV9ndHRfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX01fR1QxX0lHLAotCSAgICAiU2FuZHlicmlkZ2UiLCAmaW50ZWxfZmFrZV9hZ3BfZHJpdmVyLCAmc2FuZHlicmlkZ2VfZ3R0X2RyaXZlciB9LAorCSAgICAiU2FuZHlicmlkZ2UiLCAmc2FuZHlicmlkZ2VfZ3R0X2RyaXZlciB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9NX0dUMl9JRywKLQkgICAgIlNhbmR5YnJpZGdlIiwgJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJnNhbmR5YnJpZGdlX2d0dF9kcml2ZXIgfSwKKwkgICAgIlNhbmR5YnJpZGdlIiwgJnNhbmR5YnJpZGdlX2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfTV9HVDJfUExVU19JRywKLQkgICAgIlNhbmR5YnJpZGdlIiwgJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJnNhbmR5YnJpZGdlX2d0dF9kcml2ZXIgfSwKKwkgICAgIlNhbmR5YnJpZGdlIiwgJnNhbmR5YnJpZGdlX2d0dF9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfU19JRywKLQkgICAgIlNhbmR5YnJpZGdlIiwgJmludGVsX2Zha2VfYWdwX2RyaXZlciwgJnNhbmR5YnJpZGdlX2d0dF9kcml2ZXIgfSwKKwkgICAgIlNhbmR5YnJpZGdlIiwgJnNhbmR5YnJpZGdlX2d0dF9kcml2ZXIgfSwKIAl7IDAsIE5VTEwsIE5VTEwgfQogfTsKIApAQCAtMTUzMCwyMSArMTQ1OSwyMCBAQAogCQkJCSAgICAgIHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSkKIHsKIAlpbnQgaSwgbWFzazsKLQlicmlkZ2UtPmRyaXZlciA9IE5VTEw7CisJaW50ZWxfcHJpdmF0ZS5kcml2ZXIgPSBOVUxMOwogCiAJZm9yIChpID0gMDsgaW50ZWxfZ3R0X2NoaXBzZXRzW2ldLm5hbWUgIT0gTlVMTDsgaSsrKSB7CiAJCWlmIChmaW5kX2dtY2goaW50ZWxfZ3R0X2NoaXBzZXRzW2ldLmdtY2hfY2hpcF9pZCkpIHsKLQkJCWJyaWRnZS0+ZHJpdmVyID0KLQkJCQlpbnRlbF9ndHRfY2hpcHNldHNbaV0uZ21jaF9kcml2ZXI7Ci0JCQlpbnRlbF9wcml2YXRlLmRyaXZlciA9IAorCQkJaW50ZWxfcHJpdmF0ZS5kcml2ZXIgPQogCQkJCWludGVsX2d0dF9jaGlwc2V0c1tpXS5ndHRfZHJpdmVyOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQlpZiAoIWJyaWRnZS0+ZHJpdmVyKQorCWlmICghaW50ZWxfcHJpdmF0ZS5kcml2ZXIpCiAJCXJldHVybiAwOwogCisJYnJpZGdlLT5kcml2ZXIgPSAmaW50ZWxfZmFrZV9hZ3BfZHJpdmVyOwogCWJyaWRnZS0+ZGV2X3ByaXZhdGVfZGF0YSA9ICZpbnRlbF9wcml2YXRlOwogCWJyaWRnZS0+ZGV2ID0gcGRldjsKIApAQCAtMTU2MCw4ICsxNDg4LDggQEAKIAkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKGludGVsX3ByaXZhdGUucGNpZGV2LAogCQkJCQkgICAgRE1BX0JJVF9NQVNLKG1hc2spKTsKIAotCWlmIChicmlkZ2UtPmRyaXZlciA9PSAmaW50ZWxfODEwX2RyaXZlcikKLQkJcmV0dXJuIDE7CisJLyppZiAoYnJpZGdlLT5kcml2ZXIgPT0gJmludGVsXzgxMF9kcml2ZXIpCisJCXJldHVybiAxOyovCiAKIAlpZiAoaW50ZWxfZ3R0X2luaXQoKSAhPSAwKQogCQlyZXR1cm4gMDsKQEAgLTE1NzAsMTIgKzE0OTgsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0woaW50ZWxfZ21jaF9wcm9iZSk7CiAKLXN0cnVjdCBpbnRlbF9ndHQgKmludGVsX2d0dF9nZXQodm9pZCkKK2NvbnN0IHN0cnVjdCBpbnRlbF9ndHQgKmludGVsX2d0dF9nZXQodm9pZCkKIHsKIAlyZXR1cm4gJmludGVsX3ByaXZhdGUuYmFzZTsKIH0KIEVYUE9SVF9TWU1CT0woaW50ZWxfZ3R0X2dldCk7CiAKK3ZvaWQgaW50ZWxfZ3R0X2NoaXBzZXRfZmx1c2godm9pZCkKK3sKKwlpZiAoaW50ZWxfcHJpdmF0ZS5kcml2ZXItPmNoaXBzZXRfZmx1c2gpCisJCWludGVsX3ByaXZhdGUuZHJpdmVyLT5jaGlwc2V0X2ZsdXNoKCk7Cit9CitFWFBPUlRfU1lNQk9MKGludGVsX2d0dF9jaGlwc2V0X2ZsdXNoKTsKKwogdm9pZCBpbnRlbF9nbWNoX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlpZiAoaW50ZWxfcHJpdmF0ZS5wY2lkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX3Zpby5jIGIvZHJpdmVycy9jaGFyL2h2Y192aW8uYwppbmRleCAyNzM3MGU5Li41ZTJmNTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX3Zpby5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfdmlvLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAogI2luY2x1ZGUgImh2Y19jb25zb2xlLmgiCiAKLWNoYXIgaHZjX2RyaXZlcl9uYW1lW10gPSAiaHZjX2NvbnNvbGUiOworc3RhdGljIGNvbnN0IGNoYXIgaHZjX2RyaXZlcl9uYW1lW10gPSAiaHZjX2NvbnNvbGUiOwogCiBzdGF0aWMgc3RydWN0IHZpb19kZXZpY2VfaWQgaHZjX2RyaXZlcl90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyJzZXJpYWwiLCAiaHZ0ZXJtMSJ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS92aWEtcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpYS1ybmcuYwppbmRleCA3OTRhYWNiLi5kMDM4N2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpYS1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpYS1ybmcuYwpAQCAtMjQsNiArMjQsNyBAQAogICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKKyNpbmNsdWRlIDxjcnlwdG8vcGFkbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2h3X3JhbmRvbS5oPgpAQCAtMzQsNyArMzUsNiBAQAogI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CiAKIAotI2RlZmluZSBQRlgJS0JVSUxEX01PRE5BTUUgIjogIgogCiAKIGVudW0gewpAQCAtODEsOCArODEsNyBAQAogCXRzX3N0YXRlID0gaXJxX3RzX3NhdmUoKTsKIAogCWFzbSgiLmJ5dGUgMHgwRiwweEE3LDB4QzAgLyogeHN0b3JlICUlZWRpIChhZGRyPSUwKSAqLyIKLQkJOiI9bSIoKmFkZHIpLCAiPWEiKGVheF9vdXQpCi0JCToiRCIoYWRkciksICJkIihlZHhfaW4pKTsKKwkJOiAiPW0iICgqYWRkciksICI9YSIgKGVheF9vdXQpLCAiK2QiIChlZHhfaW4pLCAiK0QiIChhZGRyKSk7CiAKIAlpcnFfdHNfcmVzdG9yZSh0c19zdGF0ZSk7CiAJcmV0dXJuIGVheF9vdXQ7CkBAIC05MCw4ICs4OSwxMCBAQAogCiBzdGF0aWMgaW50IHZpYV9ybmdfZGF0YV9wcmVzZW50KHN0cnVjdCBod3JuZyAqcm5nLCBpbnQgd2FpdCkKIHsKKwljaGFyIGJ1ZlsxNiArIFBBRExPQ0tfQUxJR05NRU5UIC0gU1RBQ0tfQUxJR05dIF9fYXR0cmlidXRlX18KKwkJKChhbGlnbmVkKFNUQUNLX0FMSUdOKSkpOworCXUzMiAqdmlhX3JuZ19kYXR1bSA9ICh1MzIgKilQVFJfQUxJR04oJmJ1ZlswXSwgUEFETE9DS19BTElHTk1FTlQpOwogCXUzMiBieXRlc19vdXQ7Ci0JdTMyICp2aWFfcm5nX2RhdHVtID0gKHUzMiAqKSgmcm5nLT5wcml2KTsKIAlpbnQgaTsKIAogCS8qIFdlIGNob29zZSB0aGUgcmVjb21tZW5kZWQgMS1ieXRlLXBlci1pbnN0cnVjdGlvbiBSTkcgcmF0ZSwKQEAgLTExNSw2ICsxMTYsNyBAQAogCQkJYnJlYWs7CiAJCXVkZWxheSgxMCk7CiAJfQorCXJuZy0+cHJpdiA9ICp2aWFfcm5nX2RhdHVtOwogCXJldHVybiBieXRlc19vdXQgPyAxIDogMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV93YXRjaGRvZy5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV93YXRjaGRvZy5jCmluZGV4IGY0ZDMzNGYuLjMyMDY2OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfd2F0Y2hkb2cuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMKQEAgLTEwODEsNyArMTA4MSw3IEBACiB7CiAJc3RydWN0IGRpZV9hcmdzICphcmdzID0gZGF0YTsKIAotCWlmICh2YWwgIT0gRElFX05NSSkKKwlpZiAodmFsICE9IERJRV9OTUlVTktOT1dOKQogCQlyZXR1cm4gTk9USUZZX09LOwogCiAJLyogSGFjaywgaWYgaXQncyBhIG1lbW9yeSBvciBJL08gZXJyb3IsIGlnbm9yZSBpdC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYW1vb3BzLmMgYi9kcml2ZXJzL2NoYXIvcmFtb29wcy5jCmluZGV4IGQzZDYzYmUuLjFhOWY1ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYW1vb3BzLmMKKysrIGIvZHJpdmVycy9jaGFyL3JhbW9vcHMuYwpAQCAtMzAsNyArMzAsNyBAQAogCiAjZGVmaW5lIFJBTU9PUFNfS0VSTk1TR19IRFIgIj09PT0iCiAKLSNkZWZpbmUgUkVDT1JEX1NJWkUgNDA5NgorI2RlZmluZSBSRUNPUkRfU0laRSA0MDk2VUwKIAogc3RhdGljIHVsb25nIG1lbV9hZGRyZXNzOwogbW9kdWxlX3BhcmFtKG1lbV9hZGRyZXNzLCB1bG9uZywgMDQwMCk7CkBAIC02OCwxMSArNjgsMTYgQEAKIAljaGFyICpidWYsICpidWZfb3JpZzsKIAlzdHJ1Y3QgdGltZXZhbCB0aW1lc3RhbXA7CiAKKwlpZiAocmVhc29uICE9IEtNU0dfRFVNUF9PT1BTICYmCisJICAgIHJlYXNvbiAhPSBLTVNHX0RVTVBfUEFOSUMgJiYKKwkgICAgcmVhc29uICE9IEtNU0dfRFVNUF9LRVhFQykKKwkJcmV0dXJuOworCiAJLyogT25seSBkdW1wIG9vcHNlcyBpZiBkdW1wX29vcHMgaXMgc2V0ICovCiAJaWYgKHJlYXNvbiA9PSBLTVNHX0RVTVBfT09QUyAmJiAhZHVtcF9vb3BzKQogCQlyZXR1cm47CiAKLQlidWYgPSAoY2hhciAqKShjeHQtPnZpcnRfYWRkciArIChjeHQtPmNvdW50ICogUkVDT1JEX1NJWkUpKTsKKwlidWYgPSBjeHQtPnZpcnRfYWRkciArIChjeHQtPmNvdW50ICogUkVDT1JEX1NJWkUpOwogCWJ1Zl9vcmlnID0gYnVmOwogCiAJbWVtc2V0KGJ1ZiwgJ1wwJywgUkVDT1JEX1NJWkUpOwpAQCAtODMsOCArODgsOCBAQAogCWJ1ZiArPSByZXM7CiAKIAloZHJfc2l6ZSA9IGJ1ZiAtIGJ1Zl9vcmlnOwotCWwyX2NweSA9IG1pbihsMiwgKHVuc2lnbmVkIGxvbmcpKFJFQ09SRF9TSVpFIC0gaGRyX3NpemUpKTsKLQlsMV9jcHkgPSBtaW4obDEsICh1bnNpZ25lZCBsb25nKShSRUNPUkRfU0laRSAtIGhkcl9zaXplKSAtIGwyX2NweSk7CisJbDJfY3B5ID0gbWluKGwyLCBSRUNPUkRfU0laRSAtIGhkcl9zaXplKTsKKwlsMV9jcHkgPSBtaW4obDEsIFJFQ09SRF9TSVpFIC0gaGRyX3NpemUgLSBsMl9jcHkpOwogCiAJczJfc3RhcnQgPSBsMiAtIGwyX2NweTsKIAlzMV9zdGFydCA9IGwxIC0gbDFfY3B5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vbXZfY2VzYS5jIGIvZHJpdmVycy9jcnlwdG8vbXZfY2VzYS5jCmluZGV4IDdkMjc5ZTUuLmM5OTMwNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL212X2Nlc2EuYworKysgYi9kcml2ZXJzL2NyeXB0by9tdl9jZXNhLmMKQEAgLTg1Nyw3ICs4NTcsNyBAQAogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBNVl9DRVNBCiAJCQkgICAgICAgIkJhc2UgZHJpdmVyICclcycgY291bGQgbm90IGJlIGxvYWRlZCFcbiIsCiAJCQkgICAgICAgYmFzZV9oYXNoX25hbWUpOwotCQkJZXJyID0gUFRSX0VSUihmYWxsYmFja190Zm0pOworCQkJZXJyID0gUFRSX0VSUihiYXNlX2hhc2gpOwogCQkJZ290byBlcnJfYmFkX2Jhc2U7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9uMl9jb3JlLmMgYi9kcml2ZXJzL2NyeXB0by9uMl9jb3JlLmMKaW5kZXggNzYxNDEyNi4uODBkYzA5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vbjJfY29yZS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL24yX2NvcmUuYwpAQCAtMTU0Miw3ICsxNTQyLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgbjJfdW5yZWdpc3Rlcl9hbGdzKHZvaWQpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbjJfdW5yZWdpc3Rlcl9hbGdzKHZvaWQpCiB7CiAJbXV0ZXhfbG9jaygmc3B1X2xvY2spOwogCWlmICghLS1hbGdzX3JlZ2lzdGVyZWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9vbWFwLWFlcy5jIGIvZHJpdmVycy9jcnlwdG8vb21hcC1hZXMuYwppbmRleCA3OTljYTUxLi5hZGQyYTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9vbWFwLWFlcy5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL29tYXAtYWVzLmMKQEAgLTc0LDExICs3NCw5IEBACiAjZGVmaW5lIEZMQUdTX0NCQwkJQklUKDEpCiAjZGVmaW5lIEZMQUdTX0dJVgkJQklUKDIpCiAKLSNkZWZpbmUgRkxBR1NfTkVXX0tFWQkJQklUKDQpCi0jZGVmaW5lIEZMQUdTX05FV19JVgkJQklUKDUpCi0jZGVmaW5lIEZMQUdTX0lOSVQJCUJJVCg2KQotI2RlZmluZSBGTEFHU19GQVNUCQlCSVQoNykKLSNkZWZpbmUgRkxBR1NfQlVTWQkJOAorI2RlZmluZSBGTEFHU19JTklUCQlCSVQoNCkKKyNkZWZpbmUgRkxBR1NfRkFTVAkJQklUKDUpCisjZGVmaW5lIEZMQUdTX0JVU1kJCUJJVCg2KQogCiBzdHJ1Y3Qgb21hcF9hZXNfY3R4IHsKIAlzdHJ1Y3Qgb21hcF9hZXNfZGV2ICpkZDsKQEAgLTk4LDE5ICs5NiwxOCBAQAogc3RydWN0IG9tYXBfYWVzX2RldiB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXVuc2lnbmVkIGxvbmcJCXBoeXNfYmFzZTsKLQl2b2lkIF9faW9tZW0gCQkqaW9fYmFzZTsKKwl2b2lkIF9faW9tZW0JCSppb19iYXNlOwogCXN0cnVjdCBjbGsJCSppY2xrOwogCXN0cnVjdCBvbWFwX2Flc19jdHgJKmN0eDsKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludAkJCWVycjsKIAotCXUzMgkJCSppdjsKLQl1MzIJCQljdHJsOworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGNyeXB0b19xdWV1ZQlxdWV1ZTsKIAotCXNwaW5sb2NrX3QJCQlsb2NrOwotCXN0cnVjdCBjcnlwdG9fcXVldWUJCXF1ZXVlOwotCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0CQl0YXNrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlkb25lX3Rhc2s7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CXF1ZXVlX3Rhc2s7CiAKIAlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0CSpyZXE7CiAJc2l6ZV90CQkJCXRvdGFsOwpAQCAtMTc5LDkgKzE3NiwxMyBAQAogCiBzdGF0aWMgaW50IG9tYXBfYWVzX2h3X2luaXQoc3RydWN0IG9tYXBfYWVzX2RldiAqZGQpCiB7Ci0JaW50IGVyciA9IDA7Ci0KKwkvKgorCSAqIGNsb2NrcyBhcmUgZW5hYmxlZCB3aGVuIHJlcXVlc3Qgc3RhcnRzIGFuZCBkaXNhYmxlZCB3aGVuIGZpbmlzaGVkLgorCSAqIEl0IG1heSBiZSBsb25nIGRlbGF5cyBiZXR3ZWVuIHJlcXVlc3RzLgorCSAqIERldmljZSBtaWdodCBnbyB0byBvZmYgbW9kZSB0byBzYXZlIHBvd2VyLgorCSAqLwogCWNsa19lbmFibGUoZGQtPmljbGspOworCiAJaWYgKCEoZGQtPmZsYWdzICYgRkxBR1NfSU5JVCkpIHsKIAkJLyogaXMgaXQgbmVjZXNzYXJ5IHRvIHJlc2V0IGJlZm9yZSBldmVyeSBvcGVyYXRpb24/ICovCiAJCW9tYXBfYWVzX3dyaXRlX21hc2soZGQsIEFFU19SRUdfTUFTSywgQUVTX1JFR19NQVNLX1NPRlRSRVNFVCwKQEAgLTE5MywzOSArMTk0LDI2IEBACiAJCV9fYXNtX18gX192b2xhdGlsZV9fKCJub3AiKTsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm5vcCIpOwogCi0JCWVyciA9IG9tYXBfYWVzX3dhaXQoZGQsIEFFU19SRUdfU1lTU1RBVFVTLAotCQkJCUFFU19SRUdfU1lTU1RBVFVTX1JFU0VURE9ORSk7Ci0JCWlmICghZXJyKQotCQkJZGQtPmZsYWdzIHw9IEZMQUdTX0lOSVQ7CisJCWlmIChvbWFwX2Flc193YWl0KGRkLCBBRVNfUkVHX1NZU1NUQVRVUywKKwkJCQlBRVNfUkVHX1NZU1NUQVRVU19SRVNFVERPTkUpKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwkJZGQtPmZsYWdzIHw9IEZMQUdTX0lOSVQ7CisJCWRkLT5lcnIgPSAwOwogCX0KIAotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXBfYWVzX2h3X2NsZWFudXAoc3RydWN0IG9tYXBfYWVzX2RldiAqZGQpCi17Ci0JY2xrX2Rpc2FibGUoZGQtPmljbGspOwotfQotCi1zdGF0aWMgdm9pZCBvbWFwX2Flc193cml0ZV9jdHJsKHN0cnVjdCBvbWFwX2Flc19kZXYgKmRkKQorc3RhdGljIGludCBvbWFwX2Flc193cml0ZV9jdHJsKHN0cnVjdCBvbWFwX2Flc19kZXYgKmRkKQogewogCXVuc2lnbmVkIGludCBrZXkzMjsKLQlpbnQgaTsKKwlpbnQgaSwgZXJyOwogCXUzMiB2YWwsIG1hc2s7CiAKLQl2YWwgPSBGTERfVkFMKCgoZGQtPmN0eC0+a2V5bGVuID4+IDMpIC0gMSksIDQsIDMpOwotCWlmIChkZC0+ZmxhZ3MgJiBGTEFHU19DQkMpCi0JCXZhbCB8PSBBRVNfUkVHX0NUUkxfQ0JDOwotCWlmIChkZC0+ZmxhZ3MgJiBGTEFHU19FTkNSWVBUKQotCQl2YWwgfD0gQUVTX1JFR19DVFJMX0RJUkVDVElPTjsKLQotCWlmIChkZC0+Y3RybCA9PSB2YWwgJiYgIShkZC0+ZmxhZ3MgJiBGTEFHU19ORVdfSVYpICYmCi0JCSAgICEoZGQtPmN0eC0+ZmxhZ3MgJiBGTEFHU19ORVdfS0VZKSkKLQkJZ290byBvdXQ7Ci0KLQkvKiBvbmx5IG5lZWQgdG8gd3JpdGUgY29udHJvbCByZWdpc3RlcnMgZm9yIG5ldyBzZXR0aW5ncyAqLwotCi0JZGQtPmN0cmwgPSB2YWw7CisJZXJyID0gb21hcF9hZXNfaHdfaW5pdChkZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCXZhbCA9IDA7CiAJaWYgKGRkLT5kbWFfbGNoX291dCA+PSAwKQpAQCAtMjM3LDMwICsyMjUsNDMgQEAKIAogCW9tYXBfYWVzX3dyaXRlX21hc2soZGQsIEFFU19SRUdfTUFTSywgdmFsLCBtYXNrKTsKIAotCXByX2RlYnVnKCJTZXQga2V5XG4iKTsKIAlrZXkzMiA9IGRkLT5jdHgtPmtleWxlbiAvIHNpemVvZih1MzIpOwotCS8qIHNldCBhIGtleSAqLworCisJLyogaXQgc2VlbXMgYSBrZXkgc2hvdWxkIGFsd2F5cyBiZSBzZXQgZXZlbiBpZiBpdCBoYXMgbm90IGNoYW5nZWQgKi8KIAlmb3IgKGkgPSAwOyBpIDwga2V5MzI7IGkrKykgewogCQlvbWFwX2Flc193cml0ZShkZCwgQUVTX1JFR19LRVkoaSksCiAJCQlfX2xlMzJfdG9fY3B1KGRkLT5jdHgtPmtleVtpXSkpOwogCX0KLQlkZC0+Y3R4LT5mbGFncyAmPSB+RkxBR1NfTkVXX0tFWTsKIAotCWlmIChkZC0+ZmxhZ3MgJiBGTEFHU19ORVdfSVYpIHsKLQkJcHJfZGVidWcoIlNldCBJVlxuIik7Ci0JCW9tYXBfYWVzX3dyaXRlX24oZGQsIEFFU19SRUdfSVYoMCksIGRkLT5pdiwgNCk7Ci0JCWRkLT5mbGFncyAmPSB+RkxBR1NfTkVXX0lWOwotCX0KKwlpZiAoKGRkLT5mbGFncyAmIEZMQUdTX0NCQykgJiYgZGQtPnJlcS0+aW5mbykKKwkJb21hcF9hZXNfd3JpdGVfbihkZCwgQUVTX1JFR19JVigwKSwgZGQtPnJlcS0+aW5mbywgNCk7CisKKwl2YWwgPSBGTERfVkFMKCgoZGQtPmN0eC0+a2V5bGVuID4+IDMpIC0gMSksIDQsIDMpOworCWlmIChkZC0+ZmxhZ3MgJiBGTEFHU19DQkMpCisJCXZhbCB8PSBBRVNfUkVHX0NUUkxfQ0JDOworCWlmIChkZC0+ZmxhZ3MgJiBGTEFHU19FTkNSWVBUKQorCQl2YWwgfD0gQUVTX1JFR19DVFJMX0RJUkVDVElPTjsKIAogCW1hc2sgPSBBRVNfUkVHX0NUUkxfQ0JDIHwgQUVTX1JFR19DVFJMX0RJUkVDVElPTiB8CiAJCQlBRVNfUkVHX0NUUkxfS0VZX1NJWkU7CiAKLQlvbWFwX2Flc193cml0ZV9tYXNrKGRkLCBBRVNfUkVHX0NUUkwsIGRkLT5jdHJsLCBtYXNrKTsKKwlvbWFwX2Flc193cml0ZV9tYXNrKGRkLCBBRVNfUkVHX0NUUkwsIHZhbCwgbWFzayk7CiAKLW91dDoKLQkvKiBzdGFydCBETUEgb3IgZGlzYWJsZSBpZGxlIG1vZGUgKi8KLQlvbWFwX2Flc193cml0ZV9tYXNrKGRkLCBBRVNfUkVHX01BU0ssIEFFU19SRUdfTUFTS19TVEFSVCwKLQkJCSAgICBBRVNfUkVHX01BU0tfU1RBUlQpOworCS8qIElOICovCisJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGRkLT5kbWFfbGNoX2luLCAwLCBPTUFQX0RNQV9BTU9ERV9DT05TVEFOVCwKKwkJCQkgZGQtPnBoeXNfYmFzZSArIEFFU19SRUdfREFUQSwgMCwgNCk7CisKKwlvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKGRkLT5kbWFfbGNoX2luLCBPTUFQX0RNQV9EQVRBX0JVUlNUXzQpOworCW9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShkZC0+ZG1hX2xjaF9pbiwgT01BUF9ETUFfREFUQV9CVVJTVF80KTsKKworCS8qIE9VVCAqLworCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGRkLT5kbWFfbGNoX291dCwgMCwgT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCisJCQkJZGQtPnBoeXNfYmFzZSArIEFFU19SRUdfREFUQSwgMCwgNCk7CisKKwlvbWFwX3NldF9kbWFfc3JjX2J1cnN0X21vZGUoZGQtPmRtYV9sY2hfb3V0LCBPTUFQX0RNQV9EQVRBX0JVUlNUXzQpOworCW9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUoZGQtPmRtYV9sY2hfb3V0LCBPTUFQX0RNQV9EQVRBX0JVUlNUXzQpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9hZXNfZGV2ICpvbWFwX2Flc19maW5kX2RldihzdHJ1Y3Qgb21hcF9hZXNfY3R4ICpjdHgpCkBAIC0yODgsOCArMjg5LDE2IEBACiB7CiAJc3RydWN0IG9tYXBfYWVzX2RldiAqZGQgPSBkYXRhOwogCi0JaWYgKGxjaCA9PSBkZC0+ZG1hX2xjaF9vdXQpCi0JCXRhc2tsZXRfc2NoZWR1bGUoJmRkLT50YXNrKTsKKwlpZiAoY2hfc3RhdHVzICE9IE9NQVBfRE1BX0JMT0NLX0lSUSkgeworCQlwcl9lcnIoIm9tYXAtYWVzIERNQSBlcnJvciBzdGF0dXM6IDB4JWh4XG4iLCBjaF9zdGF0dXMpOworCQlkZC0+ZXJyID0gLUVJTzsKKwkJZGQtPmZsYWdzICY9IH5GTEFHU19JTklUOyAvKiByZXF1ZXN0IHRvIHJlLWluaXRpYWxpemUgKi8KKwl9IGVsc2UgaWYgKGxjaCA9PSBkZC0+ZG1hX2xjaF9pbikgeworCQlyZXR1cm47CisJfQorCisJLyogZG1hX2xjaF9vdXQgLSBjb21wbGV0ZWQgKi8KKwl0YXNrbGV0X3NjaGVkdWxlKCZkZC0+ZG9uZV90YXNrKTsKIH0KIAogc3RhdGljIGludCBvbWFwX2Flc19kbWFfaW5pdChzdHJ1Y3Qgb21hcF9hZXNfZGV2ICpkZCkKQEAgLTMzOSwxOCArMzQ4LDYgQEAKIAkJZ290byBlcnJfZG1hX291dDsKIAl9CiAKLQlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoZGQtPmRtYV9sY2hfaW4sIDAsIE9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAotCQkJCSBkZC0+cGh5c19iYXNlICsgQUVTX1JFR19EQVRBLCAwLCA0KTsKLQotCW9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUoZGQtPmRtYV9sY2hfaW4sIE9NQVBfRE1BX0RBVEFfQlVSU1RfNCk7Ci0Jb21hcF9zZXRfZG1hX3NyY19idXJzdF9tb2RlKGRkLT5kbWFfbGNoX2luLCBPTUFQX0RNQV9EQVRBX0JVUlNUXzQpOwotCi0Jb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoZGQtPmRtYV9sY2hfb3V0LCAwLCBPTUFQX0RNQV9BTU9ERV9DT05TVEFOVCwKLQkJCQlkZC0+cGh5c19iYXNlICsgQUVTX1JFR19EQVRBLCAwLCA0KTsKLQotCW9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShkZC0+ZG1hX2xjaF9vdXQsIE9NQVBfRE1BX0RBVEFfQlVSU1RfNCk7Ci0Jb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShkZC0+ZG1hX2xjaF9vdXQsIE9NQVBfRE1BX0RBVEFfQlVSU1RfNCk7Ci0KIAlyZXR1cm4gMDsKIAogZXJyX2RtYV9vdXQ6CkBAIC00MDYsNiArNDAzLDExIEBACiAJCWlmICghY291bnQpCiAJCQlyZXR1cm4gb2ZmOwogCisJCS8qCisJCSAqIGJ1ZmxlbiBhbmQgdG90YWwgYXJlIEFFU19CTE9DS19TSVpFIHNpemUgYWxpZ25lZCwKKwkJICogc28gY291bnQgc2hvdWxkIGJlIGFsc28gYWxpZ25lZAorCQkgKi8KKwogCQlzZ19jb3B5X2J1ZihidWYgKyBvZmYsICpzZywgKm9mZnNldCwgY291bnQsIG91dCk7CiAKIAkJb2ZmICs9IGNvdW50OwpAQCAtNDYxLDcgKzQ2Myw5IEBACiAJb21hcF9zdGFydF9kbWEoZGQtPmRtYV9sY2hfaW4pOwogCW9tYXBfc3RhcnRfZG1hKGRkLT5kbWFfbGNoX291dCk7CiAKLQlvbWFwX2Flc193cml0ZV9jdHJsKGRkKTsKKwkvKiBzdGFydCBETUEgb3IgZGlzYWJsZSBpZGxlIG1vZGUgKi8KKwlvbWFwX2Flc193cml0ZV9tYXNrKGRkLCBBRVNfUkVHX01BU0ssIEFFU19SRUdfTUFTS19TVEFSVCwKKwkJCSAgICBBRVNfUkVHX01BU0tfU1RBUlQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00ODgsOCArNDkyLDEwIEBACiAJCWNvdW50ID0gbWluKGRkLT50b3RhbCwgc2dfZG1hX2xlbihkZC0+aW5fc2cpKTsKIAkJY291bnQgPSBtaW4oY291bnQsIHNnX2RtYV9sZW4oZGQtPm91dF9zZykpOwogCi0JCWlmIChjb3VudCAhPSBkZC0+dG90YWwpCisJCWlmIChjb3VudCAhPSBkZC0+dG90YWwpIHsKKwkJCXByX2VycigicmVxdWVzdCBsZW5ndGggIT0gYnVmZmVyIGxlbmd0aFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCiAJCXByX2RlYnVnKCJmYXN0XG4iKTsKIApAQCAtNTI1LDIzICs1MzEsMjUgQEAKIAogCWRkLT50b3RhbCAtPSBjb3VudDsKIAotCWVyciA9IG9tYXBfYWVzX2h3X2luaXQoZGQpOwotCiAJZXJyID0gb21hcF9hZXNfY3J5cHRfZG1hKHRmbSwgYWRkcl9pbiwgYWRkcl9vdXQsIGNvdW50KTsKKwlpZiAoZXJyKSB7CisJCWRtYV91bm1hcF9zZyhkZC0+ZGV2LCBkZC0+aW5fc2csIDEsIERNQV9UT19ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2coZGQtPmRldiwgZGQtPm91dF9zZywgMSwgRE1BX1RPX0RFVklDRSk7CisJfQogCiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgb21hcF9hZXNfZmluaXNoX3JlcShzdHJ1Y3Qgb21hcF9hZXNfZGV2ICpkZCwgaW50IGVycikKIHsKLQlzdHJ1Y3Qgb21hcF9hZXNfY3R4ICpjdHg7CisJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gZGQtPnJlcTsKIAogCXByX2RlYnVnKCJlcnI6ICVkXG4iLCBlcnIpOwogCi0JY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShkZC0+cmVxKSk7CisJY2xrX2Rpc2FibGUoZGQtPmljbGspOworCWRkLT5mbGFncyAmPSB+RkxBR1NfQlVTWTsKIAotCWlmICghZGQtPnRvdGFsKQotCQlkZC0+cmVxLT5iYXNlLmNvbXBsZXRlKCZkZC0+cmVxLT5iYXNlLCBlcnIpOworCXJlcS0+YmFzZS5jb21wbGV0ZSgmcmVxLT5iYXNlLCBlcnIpOwogfQogCiBzdGF0aWMgaW50IG9tYXBfYWVzX2NyeXB0X2RtYV9zdG9wKHN0cnVjdCBvbWFwX2Flc19kZXYgKmRkKQpAQCAtNTUzLDggKzU2MSw2IEBACiAKIAlvbWFwX2Flc193cml0ZV9tYXNrKGRkLCBBRVNfUkVHX01BU0ssIDAsIEFFU19SRUdfTUFTS19TVEFSVCk7CiAKLQlvbWFwX2Flc19od19jbGVhbnVwKGRkKTsKLQogCW9tYXBfc3RvcF9kbWEoZGQtPmRtYV9sY2hfaW4pOwogCW9tYXBfc3RvcF9kbWEoZGQtPmRtYV9sY2hfb3V0KTsKIApAQCAtNTc0LDQwICs1ODAsMzkgQEAKIAkJfQogCX0KIAotCWlmIChlcnIgfHwgIWRkLT50b3RhbCkKLQkJb21hcF9hZXNfZmluaXNoX3JlcShkZCwgZXJyKTsKLQogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgb21hcF9hZXNfaGFuZGxlX3JlcShzdHJ1Y3Qgb21hcF9hZXNfZGV2ICpkZCkKK3N0YXRpYyBpbnQgb21hcF9hZXNfaGFuZGxlX3F1ZXVlKHN0cnVjdCBvbWFwX2Flc19kZXYgKmRkLAorCQkJICAgICAgIHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFzeW5jX3JlcSwgKmJhY2tsb2c7CiAJc3RydWN0IG9tYXBfYWVzX2N0eCAqY3R4OwogCXN0cnVjdCBvbWFwX2Flc19yZXFjdHggKnJjdHg7Ci0Jc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoZGQtPnRvdGFsKQotCQlnb3RvIHN0YXJ0OworCWludCBlcnIsIHJldCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmxvY2ssIGZsYWdzKTsKKwlpZiAocmVxKQorCQlyZXQgPSBhYmxrY2lwaGVyX2VucXVldWVfcmVxdWVzdCgmZGQtPnF1ZXVlLCByZXEpOworCWlmIChkZC0+ZmxhZ3MgJiBGTEFHU19CVVNZKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiByZXQ7CisJfQogCWJhY2tsb2cgPSBjcnlwdG9fZ2V0X2JhY2tsb2coJmRkLT5xdWV1ZSk7CiAJYXN5bmNfcmVxID0gY3J5cHRvX2RlcXVldWVfcmVxdWVzdCgmZGQtPnF1ZXVlKTsKLQlpZiAoIWFzeW5jX3JlcSkKLQkJY2xlYXJfYml0KEZMQUdTX0JVU1ksICZkZC0+ZmxhZ3MpOworCWlmIChhc3luY19yZXEpCisJCWRkLT5mbGFncyB8PSBGTEFHU19CVVNZOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIWFzeW5jX3JlcSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiByZXQ7CiAKIAlpZiAoYmFja2xvZykKIAkJYmFja2xvZy0+Y29tcGxldGUoYmFja2xvZywgLUVJTlBST0dSRVNTKTsKIAogCXJlcSA9IGFibGtjaXBoZXJfcmVxdWVzdF9jYXN0KGFzeW5jX3JlcSk7CiAKLQlwcl9kZWJ1ZygiZ2V0IG5ldyByZXFcbiIpOwotCiAJLyogYXNzaWduIG5ldyByZXF1ZXN0IHRvIGRldmljZSAqLwogCWRkLT5yZXEgPSByZXE7CiAJZGQtPnRvdGFsID0gcmVxLT5uYnl0ZXM7CkBAIC02MjEsMjcgKzYyNiwyMiBAQAogCXJjdHgtPm1vZGUgJj0gRkxBR1NfTU9ERV9NQVNLOwogCWRkLT5mbGFncyA9IChkZC0+ZmxhZ3MgJiB+RkxBR1NfTU9ERV9NQVNLKSB8IHJjdHgtPm1vZGU7CiAKLQlkZC0+aXYgPSByZXEtPmluZm87Ci0JaWYgKChkZC0+ZmxhZ3MgJiBGTEFHU19DQkMpICYmIGRkLT5pdikKLQkJZGQtPmZsYWdzIHw9IEZMQUdTX05FV19JVjsKLQllbHNlCi0JCWRkLT5mbGFncyAmPSB+RkxBR1NfTkVXX0lWOwotCisJZGQtPmN0eCA9IGN0eDsKIAljdHgtPmRkID0gZGQ7Ci0JaWYgKGRkLT5jdHggIT0gY3R4KSB7Ci0JCS8qIGFzc2lnbiBuZXcgY29udGV4dCB0byBkZXZpY2UgKi8KLQkJZGQtPmN0eCA9IGN0eDsKLQkJY3R4LT5mbGFncyB8PSBGTEFHU19ORVdfS0VZOworCisJZXJyID0gb21hcF9hZXNfd3JpdGVfY3RybChkZCk7CisJaWYgKCFlcnIpCisJCWVyciA9IG9tYXBfYWVzX2NyeXB0X2RtYV9zdGFydChkZCk7CisJaWYgKGVycikgeworCQkvKiBhZXNfdGFzayB3aWxsIG5vdCBmaW5pc2ggaXQsIHNvIGRvIGl0IGhlcmUgKi8KKwkJb21hcF9hZXNfZmluaXNoX3JlcShkZCwgZXJyKTsKKwkJdGFza2xldF9zY2hlZHVsZSgmZGQtPnF1ZXVlX3Rhc2spOwogCX0KIAotCWlmICghSVNfQUxJR05FRChyZXEtPm5ieXRlcywgQUVTX0JMT0NLX1NJWkUpKQotCQlwcl9lcnIoInJlcXVlc3Qgc2l6ZSBpcyBub3QgZXhhY3QgYW1vdW50IG9mIEFFUyBibG9ja3NcbiIpOwotCi1zdGFydDoKLQlyZXR1cm4gb21hcF9hZXNfY3J5cHRfZG1hX3N0YXJ0KGRkKTsKKwlyZXR1cm4gcmV0OyAvKiByZXR1cm4gcmV0LCB3aGljaCBpcyBlbnF1ZXVlIHJldHVybiB2YWx1ZSAqLwogfQogCi1zdGF0aWMgdm9pZCBvbWFwX2Flc190YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIG9tYXBfYWVzX2RvbmVfdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IG9tYXBfYWVzX2RldiAqZGQgPSAoc3RydWN0IG9tYXBfYWVzX2RldiAqKWRhdGE7CiAJaW50IGVycjsKQEAgLTY1MCw0MCArNjUwLDUwIEBACiAKIAllcnIgPSBvbWFwX2Flc19jcnlwdF9kbWFfc3RvcChkZCk7CiAKLQllcnIgPSBvbWFwX2Flc19oYW5kbGVfcmVxKGRkKTsKKwllcnIgPSBkZC0+ZXJyID8gOiBlcnI7CisKKwlpZiAoZGQtPnRvdGFsICYmICFlcnIpIHsKKwkJZXJyID0gb21hcF9hZXNfY3J5cHRfZG1hX3N0YXJ0KGRkKTsKKwkJaWYgKCFlcnIpCisJCQlyZXR1cm47IC8qIERNQSBzdGFydGVkLiBOb3QgZmluaW5pc2hpbmcuICovCisJfQorCisJb21hcF9hZXNfZmluaXNoX3JlcShkZCwgZXJyKTsKKwlvbWFwX2Flc19oYW5kbGVfcXVldWUoZGQsIE5VTEwpOwogCiAJcHJfZGVidWcoImV4aXRcbiIpOwogfQogCitzdGF0aWMgdm9pZCBvbWFwX2Flc19xdWV1ZV90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgb21hcF9hZXNfZGV2ICpkZCA9IChzdHJ1Y3Qgb21hcF9hZXNfZGV2ICopZGF0YTsKKworCW9tYXBfYWVzX2hhbmRsZV9xdWV1ZShkZCwgTlVMTCk7Cit9CisKIHN0YXRpYyBpbnQgb21hcF9hZXNfY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxLCB1bnNpZ25lZCBsb25nIG1vZGUpCiB7CiAJc3RydWN0IG9tYXBfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KAogCQkJY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSkpOwogCXN0cnVjdCBvbWFwX2Flc19yZXFjdHggKnJjdHggPSBhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CiAJc3RydWN0IG9tYXBfYWVzX2RldiAqZGQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyOwogCiAJcHJfZGVidWcoIm5ieXRlczogJWQsIGVuYzogJWQsIGNiYzogJWRcbiIsIHJlcS0+bmJ5dGVzLAogCQkgICEhKG1vZGUgJiBGTEFHU19FTkNSWVBUKSwKIAkJICAhIShtb2RlICYgRkxBR1NfQ0JDKSk7CiAKKwlpZiAoIUlTX0FMSUdORUQocmVxLT5uYnl0ZXMsIEFFU19CTE9DS19TSVpFKSkgeworCQlwcl9lcnIoInJlcXVlc3Qgc2l6ZSBpcyBub3QgZXhhY3QgYW1vdW50IG9mIEFFUyBibG9ja3NcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlkZCA9IG9tYXBfYWVzX2ZpbmRfZGV2KGN0eCk7CiAJaWYgKCFkZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyY3R4LT5tb2RlID0gbW9kZTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkZC0+bG9jaywgZmxhZ3MpOwotCWVyciA9IGFibGtjaXBoZXJfZW5xdWV1ZV9yZXF1ZXN0KCZkZC0+cXVldWUsIHJlcSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmxvY2ssIGZsYWdzKTsKLQotCWlmICghdGVzdF9hbmRfc2V0X2JpdChGTEFHU19CVVNZLCAmZGQtPmZsYWdzKSkKLQkJb21hcF9hZXNfaGFuZGxlX3JlcShkZCk7Ci0KLQlwcl9kZWJ1ZygiZXhpdFxuIik7Ci0KLQlyZXR1cm4gZXJyOworCXJldHVybiBvbWFwX2Flc19oYW5kbGVfcXVldWUoZGQsIHJlcSk7CiB9CiAKIC8qICoqKioqKioqKioqKioqKioqKioqKiogQUxHIEFQSSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KQEAgLTcwMSw3ICs3MTEsNiBAQAogCiAJbWVtY3B5KGN0eC0+a2V5LCBrZXksIGtleWxlbik7CiAJY3R4LT5rZXlsZW4gPSBrZXlsZW47Ci0JY3R4LT5mbGFncyB8PSBGTEFHU19ORVdfS0VZOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NTAsNyArNzU5LDcgQEAKIAkuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSIHwgQ1JZUFRPX0FMR19BU1lOQywKIAkuY3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBvbWFwX2Flc19jdHgpLAotCS5jcmFfYWxpZ25tYXNrCSAJPSAwLAorCS5jcmFfYWxpZ25tYXNrCQk9IDAsCiAJLmNyYV90eXBlCQk9ICZjcnlwdG9fYWJsa2NpcGhlcl90eXBlLAogCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAogCS5jcmFfaW5pdAkJPSBvbWFwX2Flc19jcmFfaW5pdCwKQEAgLTc3MCw3ICs3NzksNyBAQAogCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX0FCTEtDSVBIRVIgfCBDUllQVE9fQUxHX0FTWU5DLAogCS5jcmFfYmxvY2tzaXplCQk9IEFFU19CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQkJPSBzaXplb2Yoc3RydWN0IG9tYXBfYWVzX2N0eCksCi0JLmNyYV9hbGlnbm1hc2sJIAk9IDAsCisJLmNyYV9hbGlnbm1hc2sJCT0gMCwKIAkuY3JhX3R5cGUJCT0gJmNyeXB0b19hYmxrY2lwaGVyX3R5cGUsCiAJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCiAJLmNyYV9pbml0CQk9IG9tYXBfYWVzX2NyYV9pbml0LApAQCAtODQ5LDcgKzg1OCw4IEBACiAJCSAocmVnICYgQUVTX1JFR19SRVZfTUFKT1IpID4+IDQsIHJlZyAmIEFFU19SRUdfUkVWX01JTk9SKTsKIAljbGtfZGlzYWJsZShkZC0+aWNsayk7CiAKLQl0YXNrbGV0X2luaXQoJmRkLT50YXNrLCBvbWFwX2Flc190YXNrLCAodW5zaWduZWQgbG9uZylkZCk7CisJdGFza2xldF9pbml0KCZkZC0+ZG9uZV90YXNrLCBvbWFwX2Flc19kb25lX3Rhc2ssICh1bnNpZ25lZCBsb25nKWRkKTsKKwl0YXNrbGV0X2luaXQoJmRkLT5xdWV1ZV90YXNrLCBvbWFwX2Flc19xdWV1ZV90YXNrLCAodW5zaWduZWQgbG9uZylkZCk7CiAKIAllcnIgPSBvbWFwX2Flc19kbWFfaW5pdChkZCk7CiAJaWYgKGVycikKQEAgLTg3Niw3ICs4ODYsOCBAQAogCQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZ3Nbal0pOwogCW9tYXBfYWVzX2RtYV9jbGVhbnVwKGRkKTsKIGVycl9kbWE6Ci0JdGFza2xldF9raWxsKCZkZC0+dGFzayk7CisJdGFza2xldF9raWxsKCZkZC0+ZG9uZV90YXNrKTsKKwl0YXNrbGV0X2tpbGwoJmRkLT5xdWV1ZV90YXNrKTsKIAlpb3VubWFwKGRkLT5pb19iYXNlKTsKIGVycl9pbzoKIAljbGtfcHV0KGRkLT5pY2xrKTsKQEAgLTkwMyw3ICs5MTQsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsZ3MpOyBpKyspCiAJCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnc1tpXSk7CiAKLQl0YXNrbGV0X2tpbGwoJmRkLT50YXNrKTsKKwl0YXNrbGV0X2tpbGwoJmRkLT5kb25lX3Rhc2spOworCXRhc2tsZXRfa2lsbCgmZGQtPnF1ZXVlX3Rhc2spOwogCW9tYXBfYWVzX2RtYV9jbGVhbnVwKGRkKTsKIAlpb3VubWFwKGRkLT5pb19iYXNlKTsKIAljbGtfcHV0KGRkLT5pY2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL29tYXAtc2hhbS5jIGIvZHJpdmVycy9jcnlwdG8vb21hcC1zaGFtLmMKaW5kZXggYTA4MWM3Yy4uMmU3MTEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vb21hcC1zaGFtLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vb21hcC1zaGFtLmMKQEAgLTcyLDEwICs3Miw5IEBACiAKICNkZWZpbmUgREVGQVVMVF9USU1FT1VUX0lOVEVSVkFMCUhaCiAKLSNkZWZpbmUgRkxBR1NfRklSU1QJCTB4MDAwMQogI2RlZmluZSBGTEFHU19GSU5VUAkJMHgwMDAyCiAjZGVmaW5lIEZMQUdTX0ZJTkFMCQkweDAwMDQKLSNkZWZpbmUgRkxBR1NfRkFTVAkJMHgwMDA4CisjZGVmaW5lIEZMQUdTX1NHCQkweDAwMDgKICNkZWZpbmUgRkxBR1NfU0hBMQkJMHgwMDEwCiAjZGVmaW5lIEZMQUdTX0RNQV9BQ1RJVkUJMHgwMDIwCiAjZGVmaW5lIEZMQUdTX09VVFBVVF9SRUFEWQkweDAwNDAKQEAgLTgzLDEzICs4MiwxNyBAQAogI2RlZmluZSBGTEFHU19JTklUCQkweDAxMDAKICNkZWZpbmUgRkxBR1NfQ1BVCQkweDAyMDAKICNkZWZpbmUgRkxBR1NfSE1BQwkJMHgwNDAwCi0KLS8qIDNyZCBieXRlICovCi0jZGVmaW5lIEZMQUdTX0JVU1kJCTE2CisjZGVmaW5lIEZMQUdTX0VSUk9SCQkweDA4MDAKKyNkZWZpbmUgRkxBR1NfQlVTWQkJMHgxMDAwCiAKICNkZWZpbmUgT1BfVVBEQVRFCTEKICNkZWZpbmUgT1BfRklOQUwJMgogCisjZGVmaW5lIE9NQVBfQUxJR05fTUFTSwkJKHNpemVvZih1MzIpLTEpCisjZGVmaW5lIE9NQVBfQUxJR05FRAkJX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YodTMyKSkpKQorCisjZGVmaW5lIEJVRkxFTgkJUEFHRV9TSVpFCisKIHN0cnVjdCBvbWFwX3NoYW1fZGV2OwogCiBzdHJ1Y3Qgb21hcF9zaGFtX3JlcWN0eCB7CkBAIC05Nyw4ICsxMDAsOCBAQAogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCXVuc2lnbmVkIGxvbmcJCW9wOwogCisJdTgJCQlkaWdlc3RbU0hBMV9ESUdFU1RfU0laRV0gT01BUF9BTElHTkVEOwogCXNpemVfdAkJCWRpZ2NudDsKLQl1OAkJCSpidWZmZXI7CiAJc2l6ZV90CQkJYnVmY250OwogCXNpemVfdAkJCWJ1ZmxlbjsKIAlkbWFfYWRkcl90CQlkbWFfYWRkcjsKQEAgLTEwNyw2ICsxMTAsOCBAQAogCXN0cnVjdCBzY2F0dGVybGlzdAkqc2c7CiAJdW5zaWduZWQgaW50CQlvZmZzZXQ7CS8qIG9mZnNldCBpbiBjdXJyZW50IHNnICovCiAJdW5zaWduZWQgaW50CQl0b3RhbDsJLyogdG90YWwgcmVxdWVzdCAqLworCisJdTgJCQlidWZmZXJbMF0gT01BUF9BTElHTkVEOwogfTsKIAogc3RydWN0IG9tYXBfc2hhbV9obWFjX2N0eCB7CkBAIC0xMzYsNiArMTQxLDcgQEAKIAlpbnQJCQlpcnE7CiAJc3RydWN0IGNsawkJKmljbGs7CiAJc3BpbmxvY2tfdAkJbG9jazsKKwlpbnQJCQllcnI7CiAJaW50CQkJZG1hOwogCWludAkJCWRtYV9sY2g7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CWRvbmVfdGFzazsKQEAgLTE5NCw1MyArMjAwLDY4IEBACiBzdGF0aWMgdm9pZCBvbWFwX3NoYW1fY29weV9oYXNoKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIGludCBvdXQpCiB7CiAJc3RydWN0IG9tYXBfc2hhbV9yZXFjdHggKmN0eCA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7CisJdTMyICpoYXNoID0gKHUzMiAqKWN0eC0+ZGlnZXN0OworCWludCBpOworCisJLyogTUQ1IGlzIGFsbW9zdCB1bnVzZWQuIFNvIGNvcHkgc2hhMSBzaXplIHRvIHJlZHVjZSBjb2RlICovCisJZm9yIChpID0gMDsgaSA8IFNIQTFfRElHRVNUX1NJWkUgLyBzaXplb2YodTMyKTsgaSsrKSB7CisJCWlmIChvdXQpCisJCQloYXNoW2ldID0gb21hcF9zaGFtX3JlYWQoY3R4LT5kZCwKKwkJCQkJCVNIQV9SRUdfRElHRVNUKGkpKTsKKwkJZWxzZQorCQkJb21hcF9zaGFtX3dyaXRlKGN0eC0+ZGQsCisJCQkJCVNIQV9SRUdfRElHRVNUKGkpLCBoYXNoW2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfc2hhbV9jb3B5X3JlYWR5X2hhc2goc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3Qgb21hcF9zaGFtX3JlcWN0eCAqY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKKwl1MzIgKmluID0gKHUzMiAqKWN0eC0+ZGlnZXN0OwogCXUzMiAqaGFzaCA9ICh1MzIgKilyZXEtPnJlc3VsdDsKIAlpbnQgaTsKIAorCWlmICghaGFzaCkKKwkJcmV0dXJuOworCiAJaWYgKGxpa2VseShjdHgtPmZsYWdzICYgRkxBR1NfU0hBMSkpIHsKIAkJLyogU0hBMSByZXN1bHRzIGFyZSBpbiBiaWcgZW5kaWFuICovCiAJCWZvciAoaSA9IDA7IGkgPCBTSEExX0RJR0VTVF9TSVpFIC8gc2l6ZW9mKHUzMik7IGkrKykKLQkJCWlmIChvdXQpCi0JCQkJaGFzaFtpXSA9IGJlMzJfdG9fY3B1KG9tYXBfc2hhbV9yZWFkKGN0eC0+ZGQsCi0JCQkJCQkJU0hBX1JFR19ESUdFU1QoaSkpKTsKLQkJCWVsc2UKLQkJCQlvbWFwX3NoYW1fd3JpdGUoY3R4LT5kZCwgU0hBX1JFR19ESUdFU1QoaSksCi0JCQkJCQkJY3B1X3RvX2JlMzIoaGFzaFtpXSkpOworCQkJaGFzaFtpXSA9IGJlMzJfdG9fY3B1KGluW2ldKTsKIAl9IGVsc2UgewogCQkvKiBNRDUgcmVzdWx0cyBhcmUgaW4gbGl0dGxlIGVuZGlhbiAqLwogCQlmb3IgKGkgPSAwOyBpIDwgTUQ1X0RJR0VTVF9TSVpFIC8gc2l6ZW9mKHUzMik7IGkrKykKLQkJCWlmIChvdXQpCi0JCQkJaGFzaFtpXSA9IGxlMzJfdG9fY3B1KG9tYXBfc2hhbV9yZWFkKGN0eC0+ZGQsCi0JCQkJCQkJU0hBX1JFR19ESUdFU1QoaSkpKTsKLQkJCWVsc2UKLQkJCQlvbWFwX3NoYW1fd3JpdGUoY3R4LT5kZCwgU0hBX1JFR19ESUdFU1QoaSksCi0JCQkJCQkJY3B1X3RvX2xlMzIoaGFzaFtpXSkpOworCQkJaGFzaFtpXSA9IGxlMzJfdG9fY3B1KGluW2ldKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgb21hcF9zaGFtX3dyaXRlX2N0cmwoc3RydWN0IG9tYXBfc2hhbV9kZXYgKmRkLCBzaXplX3QgbGVuZ3RoLAorc3RhdGljIGludCBvbWFwX3NoYW1faHdfaW5pdChzdHJ1Y3Qgb21hcF9zaGFtX2RldiAqZGQpCit7CisJY2xrX2VuYWJsZShkZC0+aWNsayk7CisKKwlpZiAoIShkZC0+ZmxhZ3MgJiBGTEFHU19JTklUKSkgeworCQlvbWFwX3NoYW1fd3JpdGVfbWFzayhkZCwgU0hBX1JFR19NQVNLLAorCQkJU0hBX1JFR19NQVNLX1NPRlRSRVNFVCwgU0hBX1JFR19NQVNLX1NPRlRSRVNFVCk7CisKKwkJaWYgKG9tYXBfc2hhbV93YWl0KGRkLCBTSEFfUkVHX1NZU1NUQVRVUywKKwkJCQkJU0hBX1JFR19TWVNTVEFUVVNfUkVTRVRET05FKSkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCisJCWRkLT5mbGFncyB8PSBGTEFHU19JTklUOworCQlkZC0+ZXJyID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcF9zaGFtX3dyaXRlX2N0cmwoc3RydWN0IG9tYXBfc2hhbV9kZXYgKmRkLCBzaXplX3QgbGVuZ3RoLAogCQkJCSBpbnQgZmluYWwsIGludCBkbWEpCiB7CiAJc3RydWN0IG9tYXBfc2hhbV9yZXFjdHggKmN0eCA9IGFoYXNoX3JlcXVlc3RfY3R4KGRkLT5yZXEpOwogCXUzMiB2YWwgPSBsZW5ndGggPDwgNSwgbWFzazsKIAotCWlmICh1bmxpa2VseSghY3R4LT5kaWdjbnQpKSB7Ci0KLQkJY2xrX2VuYWJsZShkZC0+aWNsayk7Ci0KLQkJaWYgKCEoZGQtPmZsYWdzICYgRkxBR1NfSU5JVCkpIHsKLQkJCW9tYXBfc2hhbV93cml0ZV9tYXNrKGRkLCBTSEFfUkVHX01BU0ssCi0JCQkJU0hBX1JFR19NQVNLX1NPRlRSRVNFVCwgU0hBX1JFR19NQVNLX1NPRlRSRVNFVCk7Ci0KLQkJCWlmIChvbWFwX3NoYW1fd2FpdChkZCwgU0hBX1JFR19TWVNTVEFUVVMsCi0JCQkJCQlTSEFfUkVHX1NZU1NUQVRVU19SRVNFVERPTkUpKQotCQkJCXJldHVybiAtRVRJTUVET1VUOwotCi0JCQlkZC0+ZmxhZ3MgfD0gRkxBR1NfSU5JVDsKLQkJfQotCX0gZWxzZSB7CisJaWYgKGxpa2VseShjdHgtPmRpZ2NudCkpCiAJCW9tYXBfc2hhbV93cml0ZShkZCwgU0hBX1JFR19ESUdDTlQsIGN0eC0+ZGlnY250KTsKLQl9CiAKIAlvbWFwX3NoYW1fd3JpdGVfbWFzayhkZCwgU0hBX1JFR19NQVNLLAogCQlTSEFfUkVHX01BU0tfSVRfRU4gfCAoZG1hID8gU0hBX1JFR19NQVNLX0RNQV9FTiA6IDApLApAQCAtMjYwLDI5ICsyODEsMjYgQEAKIAkJCVNIQV9SRUdfQ1RSTF9BTEdPIHwgU0hBX1JFR19DVFJMX0xFTkdUSDsKIAogCW9tYXBfc2hhbV93cml0ZV9tYXNrKGRkLCBTSEFfUkVHX0NUUkwsIHZhbCwgbWFzayk7Ci0KLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBvbWFwX3NoYW1feG1pdF9jcHUoc3RydWN0IG9tYXBfc2hhbV9kZXYgKmRkLCBjb25zdCB1OCAqYnVmLAogCQkJICAgICAgc2l6ZV90IGxlbmd0aCwgaW50IGZpbmFsKQogewogCXN0cnVjdCBvbWFwX3NoYW1fcmVxY3R4ICpjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChkZC0+cmVxKTsKLQlpbnQgZXJyLCBjb3VudCwgbGVuMzI7CisJaW50IGNvdW50LCBsZW4zMjsKIAljb25zdCB1MzIgKmJ1ZmZlciA9IChjb25zdCB1MzIgKilidWY7CiAKIAlkZXZfZGJnKGRkLT5kZXYsICJ4bWl0X2NwdTogZGlnY250OiAlZCwgbGVuZ3RoOiAlZCwgZmluYWw6ICVkXG4iLAogCQkJCQkJY3R4LT5kaWdjbnQsIGxlbmd0aCwgZmluYWwpOwogCi0JZXJyID0gb21hcF9zaGFtX3dyaXRlX2N0cmwoZGQsIGxlbmd0aCwgZmluYWwsIDApOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJb21hcF9zaGFtX3dyaXRlX2N0cmwoZGQsIGxlbmd0aCwgZmluYWwsIDApOworCisJLyogc2hvdWxkIGJlIG5vbi16ZXJvIGJlZm9yZSBuZXh0IGxpbmVzIHRvIGRpc2FibGUgY2xvY2tzIGxhdGVyICovCisJY3R4LT5kaWdjbnQgKz0gbGVuZ3RoOwogCiAJaWYgKG9tYXBfc2hhbV93YWl0KGRkLCBTSEFfUkVHX0NUUkwsIFNIQV9SRUdfQ1RSTF9JTlBVVF9SRUFEWSkpCiAJCXJldHVybiAtRVRJTUVET1VUOwogCi0JY3R4LT5kaWdjbnQgKz0gbGVuZ3RoOwotCiAJaWYgKGZpbmFsKQogCQljdHgtPmZsYWdzIHw9IEZMQUdTX0ZJTkFMOyAvKiBjYXRjaCBsYXN0IGludGVycnVwdCAqLwogCkBAIC0yOTgsMTYgKzMxNiwxMSBAQAogCQkJICAgICAgc2l6ZV90IGxlbmd0aCwgaW50IGZpbmFsKQogewogCXN0cnVjdCBvbWFwX3NoYW1fcmVxY3R4ICpjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChkZC0+cmVxKTsKLQlpbnQgZXJyLCBsZW4zMjsKKwlpbnQgbGVuMzI7CiAKIAlkZXZfZGJnKGRkLT5kZXYsICJ4bWl0X2RtYTogZGlnY250OiAlZCwgbGVuZ3RoOiAlZCwgZmluYWw6ICVkXG4iLAogCQkJCQkJY3R4LT5kaWdjbnQsIGxlbmd0aCwgZmluYWwpOwogCi0JLyogZmx1c2ggY2FjaGUgZW50cmllcyByZWxhdGVkIHRvIG91ciBwYWdlICovCi0JaWYgKGRtYV9hZGRyID09IGN0eC0+ZG1hX2FkZHIpCi0JCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRkLT5kZXYsIGRtYV9hZGRyLCBsZW5ndGgsCi0JCQkJCSAgIERNQV9UT19ERVZJQ0UpOwotCiAJbGVuMzIgPSBESVZfUk9VTkRfVVAobGVuZ3RoLCBzaXplb2YodTMyKSk7CiAKIAlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGRkLT5kbWFfbGNoLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyLCBsZW4zMiwKQEAgLTMxNyw5ICszMzAsNyBAQAogCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGRkLT5kbWFfbGNoLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKIAkJCQlkbWFfYWRkciwgMCwgMCk7CiAKLQllcnIgPSBvbWFwX3NoYW1fd3JpdGVfY3RybChkZCwgbGVuZ3RoLCBmaW5hbCwgMSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlvbWFwX3NoYW1fd3JpdGVfY3RybChkZCwgbGVuZ3RoLCBmaW5hbCwgMSk7CiAKIAljdHgtPmRpZ2NudCArPSBsZW5ndGg7CiAKQEAgLTM3MSwxNSArMzgyLDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgb21hcF9zaGFtX3htaXRfZG1hX21hcChzdHJ1Y3Qgb21hcF9zaGFtX2RldiAqZGQsCisJCQkJCXN0cnVjdCBvbWFwX3NoYW1fcmVxY3R4ICpjdHgsCisJCQkJCXNpemVfdCBsZW5ndGgsIGludCBmaW5hbCkKK3sKKwljdHgtPmRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZGQtPmRldiwgY3R4LT5idWZmZXIsIGN0eC0+YnVmbGVuLAorCQkJCSAgICAgICBETUFfVE9fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGQtPmRldiwgY3R4LT5kbWFfYWRkcikpIHsKKwkJZGV2X2VycihkZC0+ZGV2LCAiZG1hICV1IGJ5dGVzIGVycm9yXG4iLCBjdHgtPmJ1Zmxlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWN0eC0+ZmxhZ3MgJj0gfkZMQUdTX1NHOworCisJLyogbmV4dCBjYWxsIGRvZXMgbm90IGZhaWwuLi4gc28gbm8gdW5tYXAgaW4gdGhlIGNhc2Ugb2YgZXJyb3IgKi8KKwlyZXR1cm4gb21hcF9zaGFtX3htaXRfZG1hKGRkLCBjdHgtPmRtYV9hZGRyLCBsZW5ndGgsIGZpbmFsKTsKK30KKwogc3RhdGljIGludCBvbWFwX3NoYW1fdXBkYXRlX2RtYV9zbG93KHN0cnVjdCBvbWFwX3NoYW1fZGV2ICpkZCkKIHsKIAlzdHJ1Y3Qgb21hcF9zaGFtX3JlcWN0eCAqY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgoZGQtPnJlcSk7CiAJdW5zaWduZWQgaW50IGZpbmFsOwogCXNpemVfdCBjb3VudDsKIAotCWlmICghY3R4LT50b3RhbCkKLQkJcmV0dXJuIDA7Ci0KIAlvbWFwX3NoYW1fYXBwZW5kX3NnKGN0eCk7CiAKIAlmaW5hbCA9IChjdHgtPmZsYWdzICYgRkxBR1NfRklOVVApICYmICFjdHgtPnRvdGFsOwpAQCAtMzkwLDMwICs0MTUsNjggQEAKIAlpZiAoZmluYWwgfHwgKGN0eC0+YnVmY250ID09IGN0eC0+YnVmbGVuICYmIGN0eC0+dG90YWwpKSB7CiAJCWNvdW50ID0gY3R4LT5idWZjbnQ7CiAJCWN0eC0+YnVmY250ID0gMDsKLQkJcmV0dXJuIG9tYXBfc2hhbV94bWl0X2RtYShkZCwgY3R4LT5kbWFfYWRkciwgY291bnQsIGZpbmFsKTsKKwkJcmV0dXJuIG9tYXBfc2hhbV94bWl0X2RtYV9tYXAoZGQsIGN0eCwgY291bnQsIGZpbmFsKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvbWFwX3NoYW1fdXBkYXRlX2RtYV9mYXN0KHN0cnVjdCBvbWFwX3NoYW1fZGV2ICpkZCkKKy8qIFN0YXJ0IGFkZHJlc3MgYWxpZ25tZW50ICovCisjZGVmaW5lIFNHX0FBKHNnKQkoSVNfQUxJR05FRChzZy0+b2Zmc2V0LCBzaXplb2YodTMyKSkpCisvKiBTSEExIGJsb2NrIHNpemUgYWxpZ25tZW50ICovCisjZGVmaW5lIFNHX1NBKHNnKQkoSVNfQUxJR05FRChzZy0+bGVuZ3RoLCBTSEExX01ENV9CTE9DS19TSVpFKSkKKworc3RhdGljIGludCBvbWFwX3NoYW1fdXBkYXRlX2RtYV9zdGFydChzdHJ1Y3Qgb21hcF9zaGFtX2RldiAqZGQpCiB7CiAJc3RydWN0IG9tYXBfc2hhbV9yZXFjdHggKmN0eCA9IGFoYXNoX3JlcXVlc3RfY3R4KGRkLT5yZXEpOwotCXVuc2lnbmVkIGludCBsZW5ndGg7CisJdW5zaWduZWQgaW50IGxlbmd0aCwgZmluYWwsIHRhaWw7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAotCWN0eC0+ZmxhZ3MgfD0gRkxBR1NfRkFTVDsKKwlpZiAoIWN0eC0+dG90YWwpCisJCXJldHVybiAwOwogCi0JbGVuZ3RoID0gbWluKGN0eC0+dG90YWwsIHNnX2RtYV9sZW4oY3R4LT5zZykpOwotCWN0eC0+dG90YWwgPSBsZW5ndGg7CisJaWYgKGN0eC0+YnVmY250IHx8IGN0eC0+b2Zmc2V0KQorCQlyZXR1cm4gb21hcF9zaGFtX3VwZGF0ZV9kbWFfc2xvdyhkZCk7CisKKwlkZXZfZGJnKGRkLT5kZXYsICJmYXN0OiBkaWdjbnQ6ICVkLCBidWZjbnQ6ICV1LCB0b3RhbDogJXVcbiIsCisJCQljdHgtPmRpZ2NudCwgY3R4LT5idWZjbnQsIGN0eC0+dG90YWwpOworCisJc2cgPSBjdHgtPnNnOworCisJaWYgKCFTR19BQShzZykpCisJCXJldHVybiBvbWFwX3NoYW1fdXBkYXRlX2RtYV9zbG93KGRkKTsKKworCWlmICghc2dfaXNfbGFzdChzZykgJiYgIVNHX1NBKHNnKSkKKwkJLyogc2l6ZSBpcyBub3QgU0hBMV9CTE9DS19TSVpFIGFsaWduZWQgKi8KKwkJcmV0dXJuIG9tYXBfc2hhbV91cGRhdGVfZG1hX3Nsb3coZGQpOworCisJbGVuZ3RoID0gbWluKGN0eC0+dG90YWwsIHNnLT5sZW5ndGgpOworCisJaWYgKHNnX2lzX2xhc3Qoc2cpKSB7CisJCWlmICghKGN0eC0+ZmxhZ3MgJiBGTEFHU19GSU5VUCkpIHsKKwkJCS8qIG5vdCBsYXN0IHNnIG11c3QgYmUgU0hBMV9NRDVfQkxPQ0tfU0laRSBhbGlnbmVkICovCisJCQl0YWlsID0gbGVuZ3RoICYgKFNIQTFfTUQ1X0JMT0NLX1NJWkUgLSAxKTsKKwkJCS8qIHdpdGhvdXQgZmludXAoKSB3ZSBuZWVkIG9uZSBibG9jayB0byBjbG9zZSBoYXNoICovCisJCQlpZiAoIXRhaWwpCisJCQkJdGFpbCA9IFNIQTFfTUQ1X0JMT0NLX1NJWkU7CisJCQlsZW5ndGggLT0gdGFpbDsKKwkJfQorCX0KIAogCWlmICghZG1hX21hcF9zZyhkZC0+ZGV2LCBjdHgtPnNnLCAxLCBETUFfVE9fREVWSUNFKSkgewogCQlkZXZfZXJyKGRkLT5kZXYsICJkbWFfbWFwX3NnICBlcnJvclxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWN0eC0+dG90YWwgLT0gbGVuZ3RoOworCWN0eC0+ZmxhZ3MgfD0gRkxBR1NfU0c7CiAKLQlyZXR1cm4gb21hcF9zaGFtX3htaXRfZG1hKGRkLCBzZ19kbWFfYWRkcmVzcyhjdHgtPnNnKSwgbGVuZ3RoLCAxKTsKKwljdHgtPnRvdGFsIC09IGxlbmd0aDsKKwljdHgtPm9mZnNldCA9IGxlbmd0aDsgLyogb2Zmc2V0IHdoZXJlIHRvIHN0YXJ0IHNsb3cgKi8KKworCWZpbmFsID0gKGN0eC0+ZmxhZ3MgJiBGTEFHU19GSU5VUCkgJiYgIWN0eC0+dG90YWw7CisKKwkvKiBuZXh0IGNhbGwgZG9lcyBub3QgZmFpbC4uLiBzbyBubyB1bm1hcCBpbiB0aGUgY2FzZSBvZiBlcnJvciAqLworCXJldHVybiBvbWFwX3NoYW1feG1pdF9kbWEoZGQsIHNnX2RtYV9hZGRyZXNzKGN0eC0+c2cpLCBsZW5ndGgsIGZpbmFsKTsKIH0KIAogc3RhdGljIGludCBvbWFwX3NoYW1fdXBkYXRlX2NwdShzdHJ1Y3Qgb21hcF9zaGFtX2RldiAqZGQpCkBAIC00MzMsOCArNDk2LDE3IEBACiAJc3RydWN0IG9tYXBfc2hhbV9yZXFjdHggKmN0eCA9IGFoYXNoX3JlcXVlc3RfY3R4KGRkLT5yZXEpOwogCiAJb21hcF9zdG9wX2RtYShkZC0+ZG1hX2xjaCk7Ci0JaWYgKGN0eC0+ZmxhZ3MgJiBGTEFHU19GQVNUKQorCWlmIChjdHgtPmZsYWdzICYgRkxBR1NfU0cpIHsKIAkJZG1hX3VubWFwX3NnKGRkLT5kZXYsIGN0eC0+c2csIDEsIERNQV9UT19ERVZJQ0UpOworCQlpZiAoY3R4LT5zZy0+bGVuZ3RoID09IGN0eC0+b2Zmc2V0KSB7CisJCQljdHgtPnNnID0gc2dfbmV4dChjdHgtPnNnKTsKKwkJCWlmIChjdHgtPnNnKQorCQkJCWN0eC0+b2Zmc2V0ID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWRtYV91bm1hcF9zaW5nbGUoZGQtPmRldiwgY3R4LT5kbWFfYWRkciwgY3R4LT5idWZsZW4sCisJCQkJIERNQV9UT19ERVZJQ0UpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtNDU0LDE0ICs1MjYsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoY3R4LT5kaWdjbnQpCi0JCWNsa19kaXNhYmxlKGRkLT5pY2xrKTsKLQotCWlmIChjdHgtPmRtYV9hZGRyKQotCQlkbWFfdW5tYXBfc2luZ2xlKGRkLT5kZXYsIGN0eC0+ZG1hX2FkZHIsIGN0eC0+YnVmbGVuLAotCQkJCSBETUFfVE9fREVWSUNFKTsKLQotCWlmIChjdHgtPmJ1ZmZlcikKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWN0eC0+YnVmZmVyKTsKKwkJb21hcF9zaGFtX2NvcHlfcmVhZHlfaGFzaChyZXEpOwogCiAJZGV2X2RiZyhkZC0+ZGV2LCAiZGlnY250OiAlZCwgYnVmY250OiAlZFxuIiwgY3R4LT5kaWdjbnQsIGN0eC0+YnVmY250KTsKIH0KQEAgLTQ4OSw4ICs1NTQsNiBAQAogCiAJY3R4LT5mbGFncyA9IDA7CiAKLQljdHgtPmZsYWdzIHw9IEZMQUdTX0ZJUlNUOwotCiAJZGV2X2RiZyhkZC0+ZGV2LCAiaW5pdDogZGlnZXN0IHNpemU6ICVkXG4iLAogCQljcnlwdG9fYWhhc2hfZGlnZXN0c2l6ZSh0Zm0pKTsKIApAQCAtNDk5LDIxICs1NjIsNyBAQAogCiAJY3R4LT5idWZjbnQgPSAwOwogCWN0eC0+ZGlnY250ID0gMDsKLQotCWN0eC0+YnVmbGVuID0gUEFHRV9TSVpFOwotCWN0eC0+YnVmZmVyID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoCi0JCQkJKHJlcS0+YmFzZS5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9TTEVFUCkgPwotCQkJCUdGUF9LRVJORUwgOiBHRlBfQVRPTUlDKTsKLQlpZiAoIWN0eC0+YnVmZmVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWN0eC0+ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkZC0+ZGV2LCBjdHgtPmJ1ZmZlciwgY3R4LT5idWZsZW4sCi0JCQkJCURNQV9UT19ERVZJQ0UpOwotCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZC0+ZGV2LCBjdHgtPmRtYV9hZGRyKSkgewotCQlkZXZfZXJyKGRkLT5kZXYsICJkbWEgJXUgYnl0ZXMgZXJyb3JcbiIsIGN0eC0+YnVmbGVuKTsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWN0eC0+YnVmZmVyKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWN0eC0+YnVmbGVuID0gQlVGTEVOOwogCiAJaWYgKHRjdHgtPmZsYWdzICYgRkxBR1NfSE1BQykgewogCQlzdHJ1Y3Qgb21hcF9zaGFtX2htYWNfY3R4ICpiY3R4ID0gdGN0eC0+YmFzZTsKQEAgLTUzOCwxMCArNTg3LDggQEAKIAogCWlmIChjdHgtPmZsYWdzICYgRkxBR1NfQ1BVKQogCQllcnIgPSBvbWFwX3NoYW1fdXBkYXRlX2NwdShkZCk7Ci0JZWxzZSBpZiAoY3R4LT5mbGFncyAmIEZMQUdTX0ZBU1QpCi0JCWVyciA9IG9tYXBfc2hhbV91cGRhdGVfZG1hX2Zhc3QoZGQpOwogCWVsc2UKLQkJZXJyID0gb21hcF9zaGFtX3VwZGF0ZV9kbWFfc2xvdyhkZCk7CisJCWVyciA9IG9tYXBfc2hhbV91cGRhdGVfZG1hX3N0YXJ0KGRkKTsKIAogCS8qIHdhaXQgZm9yIGRtYSBjb21wbGV0aW9uIGJlZm9yZSBjYW4gdGFrZSBtb3JlIGRhdGEgKi8KIAlkZXZfZGJnKGRkLT5kZXYsICJ1cGRhdGU6IGVycjogJWQsIGRpZ2NudDogJWRcbiIsIGVyciwgY3R4LT5kaWdjbnQpOwpAQCAtNTYwLDE1ICs2MDcsMTIgQEAKIAkJdXNlX2RtYSA9IDA7CiAKIAlpZiAodXNlX2RtYSkKLQkJZXJyID0gb21hcF9zaGFtX3htaXRfZG1hKGRkLCBjdHgtPmRtYV9hZGRyLCBjdHgtPmJ1ZmNudCwgMSk7CisJCWVyciA9IG9tYXBfc2hhbV94bWl0X2RtYV9tYXAoZGQsIGN0eCwgY3R4LT5idWZjbnQsIDEpOwogCWVsc2UKIAkJZXJyID0gb21hcF9zaGFtX3htaXRfY3B1KGRkLCBjdHgtPmJ1ZmZlciwgY3R4LT5idWZjbnQsIDEpOwogCiAJY3R4LT5idWZjbnQgPSAwOwogCi0JaWYgKGVyciAhPSAtRUlOUFJPR1JFU1MpCi0JCW9tYXBfc2hhbV9jbGVhbnVwKHJlcSk7Ci0KIAlkZXZfZGJnKGRkLT5kZXYsICJmaW5hbF9yZXE6IGVycjogJWRcbiIsIGVycik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNTc2LDYgKzYyMCw3IEBACiAKIHN0YXRpYyBpbnQgb21hcF9zaGFtX2ZpbmlzaF9yZXFfaG1hYyhzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQogeworCXN0cnVjdCBvbWFwX3NoYW1fcmVxY3R4ICpjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOwogCXN0cnVjdCBvbWFwX3NoYW1fY3R4ICp0Y3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CiAJc3RydWN0IG9tYXBfc2hhbV9obWFjX2N0eCAqYmN0eCA9IHRjdHgtPmJhc2U7CiAJaW50IGJzID0gY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShiY3R4LT5zaGFzaCk7CkBAIC01OTAsNDggKzYzNSw1NiBAQAogCiAJcmV0dXJuIGNyeXB0b19zaGFzaF9pbml0KCZkZXNjLnNoYXNoKSA/OgogCSAgICAgICBjcnlwdG9fc2hhc2hfdXBkYXRlKCZkZXNjLnNoYXNoLCBiY3R4LT5vcGFkLCBicykgPzoKLQkgICAgICAgY3J5cHRvX3NoYXNoX2ZpbnVwKCZkZXNjLnNoYXNoLCByZXEtPnJlc3VsdCwgZHMsIHJlcS0+cmVzdWx0KTsKKwkgICAgICAgY3J5cHRvX3NoYXNoX2ZpbnVwKCZkZXNjLnNoYXNoLCBjdHgtPmRpZ2VzdCwgZHMsIGN0eC0+ZGlnZXN0KTsKIH0KIAogc3RhdGljIHZvaWQgb21hcF9zaGFtX2ZpbmlzaF9yZXEoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSwgaW50IGVycikKIHsKIAlzdHJ1Y3Qgb21hcF9zaGFtX3JlcWN0eCAqY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKKwlzdHJ1Y3Qgb21hcF9zaGFtX2RldiAqZGQgPSBjdHgtPmRkOwogCiAJaWYgKCFlcnIpIHsKIAkJb21hcF9zaGFtX2NvcHlfaGFzaChjdHgtPmRkLT5yZXEsIDEpOwogCQlpZiAoY3R4LT5mbGFncyAmIEZMQUdTX0hNQUMpCiAJCQllcnIgPSBvbWFwX3NoYW1fZmluaXNoX3JlcV9obWFjKHJlcSk7CisJfSBlbHNlIHsKKwkJY3R4LT5mbGFncyB8PSBGTEFHU19FUlJPUjsKIAl9CiAKLQlpZiAoY3R4LT5mbGFncyAmIEZMQUdTX0ZJTkFMKQorCWlmICgoY3R4LT5mbGFncyAmIEZMQUdTX0ZJTkFMKSB8fCBlcnIpCiAJCW9tYXBfc2hhbV9jbGVhbnVwKHJlcSk7CiAKLQljbGVhcl9iaXQoRkxBR1NfQlVTWSwgJmN0eC0+ZGQtPmZsYWdzKTsKKwljbGtfZGlzYWJsZShkZC0+aWNsayk7CisJZGQtPmZsYWdzICY9IH5GTEFHU19CVVNZOwogCiAJaWYgKHJlcS0+YmFzZS5jb21wbGV0ZSkKIAkJcmVxLT5iYXNlLmNvbXBsZXRlKCZyZXEtPmJhc2UsIGVycik7CiB9CiAKLXN0YXRpYyBpbnQgb21hcF9zaGFtX2hhbmRsZV9xdWV1ZShzdHJ1Y3Qgb21hcF9zaGFtX2RldiAqZGQpCitzdGF0aWMgaW50IG9tYXBfc2hhbV9oYW5kbGVfcXVldWUoc3RydWN0IG9tYXBfc2hhbV9kZXYgKmRkLAorCQkJCSAgc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFzeW5jX3JlcSwgKmJhY2tsb2c7CiAJc3RydWN0IG9tYXBfc2hhbV9yZXFjdHggKmN0eDsKLQlzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxLCAqcHJldl9yZXE7CisJc3RydWN0IGFoYXNoX3JlcXVlc3QgKnByZXZfcmVxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAodGVzdF9hbmRfc2V0X2JpdChGTEFHU19CVVNZLCAmZGQtPmZsYWdzKSkKLQkJcmV0dXJuIDA7CisJaW50IGVyciA9IDAsIHJldCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmxvY2ssIGZsYWdzKTsKKwlpZiAocmVxKQorCQlyZXQgPSBhaGFzaF9lbnF1ZXVlX3JlcXVlc3QoJmRkLT5xdWV1ZSwgcmVxKTsKKwlpZiAoZGQtPmZsYWdzICYgRkxBR1NfQlVTWSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmV0OworCX0KIAliYWNrbG9nID0gY3J5cHRvX2dldF9iYWNrbG9nKCZkZC0+cXVldWUpOwogCWFzeW5jX3JlcSA9IGNyeXB0b19kZXF1ZXVlX3JlcXVlc3QoJmRkLT5xdWV1ZSk7Ci0JaWYgKCFhc3luY19yZXEpCi0JCWNsZWFyX2JpdChGTEFHU19CVVNZLCAmZGQtPmZsYWdzKTsKKwlpZiAoYXN5bmNfcmVxKQorCQlkZC0+ZmxhZ3MgfD0gRkxBR1NfQlVTWTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKCFhc3luY19yZXEpCi0JCXJldHVybiAwOworCQlyZXR1cm4gcmV0OwogCiAJaWYgKGJhY2tsb2cpCiAJCWJhY2tsb2ctPmNvbXBsZXRlKGJhY2tsb2csIC1FSU5QUk9HUkVTUyk7CkBAIC02NDYsNyArNjk5LDIyIEBACiAJZGV2X2RiZyhkZC0+ZGV2LCAiaGFuZGxpbmcgbmV3IHJlcSwgb3A6ICVsdSwgbmJ5dGVzOiAlZFxuIiwKIAkJCQkJCWN0eC0+b3AsIHJlcS0+bmJ5dGVzKTsKIAotCWlmIChyZXEgIT0gcHJldl9yZXEgJiYgY3R4LT5kaWdjbnQpCisKKwllcnIgPSBvbWFwX3NoYW1faHdfaW5pdChkZCk7CisJaWYgKGVycikKKwkJZ290byBlcnIxOworCisJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGRkLT5kbWFfbGNoLCAwLAorCQkJT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCisJCQlkZC0+cGh5c19iYXNlICsgU0hBX1JFR19ESU4oMCksIDAsIDE2KTsKKworCW9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUoZGQtPmRtYV9sY2gsCisJCQlPTUFQX0RNQV9EQVRBX0JVUlNUXzE2KTsKKworCW9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShkZC0+ZG1hX2xjaCwKKwkJCU9NQVBfRE1BX0RBVEFfQlVSU1RfNCk7CisKKwlpZiAoY3R4LT5kaWdjbnQpCiAJCS8qIHJlcXVlc3QgaGFzIGNoYW5nZWQgLSByZXN0b3JlIGhhc2ggKi8KIAkJb21hcF9zaGFtX2NvcHlfaGFzaChyZXEsIDApOwogCkBAIC02NTgsNyArNzI2LDcgQEAKIAl9IGVsc2UgaWYgKGN0eC0+b3AgPT0gT1BfRklOQUwpIHsKIAkJZXJyID0gb21hcF9zaGFtX2ZpbmFsX3JlcShkZCk7CiAJfQotCitlcnIxOgogCWlmIChlcnIgIT0gLUVJTlBST0dSRVNTKSB7CiAJCS8qIGRvbmVfdGFzayB3aWxsIG5vdCBmaW5pc2ggaXQsIHNvIGRvIGl0IGhlcmUgKi8KIAkJb21hcF9zaGFtX2ZpbmlzaF9yZXEocmVxLCBlcnIpOwpAQCAtNjY3LDcgKzczNSw3IEBACiAKIAlkZXZfZGJnKGRkLT5kZXYsICJleGl0LCBlcnI6ICVkXG4iLCBlcnIpOwogCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG9tYXBfc2hhbV9lbnF1ZXVlKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIHVuc2lnbmVkIGludCBvcCkKQEAgLTY3NSwxOCArNzQzLDEwIEBACiAJc3RydWN0IG9tYXBfc2hhbV9yZXFjdHggKmN0eCA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7CiAJc3RydWN0IG9tYXBfc2hhbV9jdHggKnRjdHggPSBjcnlwdG9fdGZtX2N0eChyZXEtPmJhc2UudGZtKTsKIAlzdHJ1Y3Qgb21hcF9zaGFtX2RldiAqZGQgPSB0Y3R4LT5kZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnI7CiAKIAljdHgtPm9wID0gb3A7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmxvY2ssIGZsYWdzKTsKLQllcnIgPSBhaGFzaF9lbnF1ZXVlX3JlcXVlc3QoJmRkLT5xdWV1ZSwgcmVxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+bG9jaywgZmxhZ3MpOwotCi0Jb21hcF9zaGFtX2hhbmRsZV9xdWV1ZShkZCk7Ci0KLQlyZXR1cm4gZXJyOworCXJldHVybiBvbWFwX3NoYW1faGFuZGxlX3F1ZXVlKGRkLCByZXEpOwogfQogCiBzdGF0aWMgaW50IG9tYXBfc2hhbV91cGRhdGUoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKQEAgLTcwOSwyMSArNzY5LDEzIEBACiAJCQkqLwogCQkJb21hcF9zaGFtX2FwcGVuZF9zZyhjdHgpOwogCQkJcmV0dXJuIDA7Ci0JCX0gZWxzZSBpZiAoY3R4LT5idWZjbnQgKyBjdHgtPnRvdGFsIDw9IDY0KSB7CisJCX0gZWxzZSBpZiAoY3R4LT5idWZjbnQgKyBjdHgtPnRvdGFsIDw9IFNIQTFfTUQ1X0JMT0NLX1NJWkUpIHsKKwkJCS8qCisJCQkqIGZhc3RlciB0byB1c2UgQ1BVIGZvciBzaG9ydCB0cmFuc2ZlcnMKKwkJCSovCiAJCQljdHgtPmZsYWdzIHw9IEZMQUdTX0NQVTsKLQkJfSBlbHNlIGlmICghY3R4LT5idWZjbnQgJiYgc2dfaXNfbGFzdChjdHgtPnNnKSkgewotCQkJLyogbWF5IGJlIGNhbiB1c2UgZmFzdGVyIGZ1bmN0aW9ucyAqLwotCQkJaW50IGFsaWduZWQgPSBJU19BTElHTkVEKCh1MzIpY3R4LT5zZy0+b2Zmc2V0LAotCQkJCQkJCQlzaXplb2YodTMyKSk7Ci0KLQkJCWlmIChhbGlnbmVkICYmIChjdHgtPmZsYWdzICYgRkxBR1NfRklSU1QpKQotCQkJCS8qIGRpZ2VzdDogZmlyc3QgYW5kIGZpbmFsICovCi0JCQkJY3R4LT5mbGFncyB8PSBGTEFHU19GQVNUOwotCi0JCQljdHgtPmZsYWdzICY9IH5GTEFHU19GSVJTVDsKIAkJfQotCX0gZWxzZSBpZiAoY3R4LT5idWZjbnQgKyBjdHgtPnRvdGFsIDw9IGN0eC0+YnVmbGVuKSB7Ci0JCS8qIGlmIG5vdCBmaW5hdXAgLT4gbm90IGZhc3QgKi8KKwl9IGVsc2UgaWYgKGN0eC0+YnVmY250ICsgY3R4LT50b3RhbCA8IGN0eC0+YnVmbGVuKSB7CiAJCW9tYXBfc2hhbV9hcHBlbmRfc2coY3R4KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNzYxLDEyICs4MTMsMTQgQEAKIAogCWN0eC0+ZmxhZ3MgfD0gRkxBR1NfRklOVVA7CiAKLQkvKiBPTUFQIEhXIGFjY2VsIHdvcmtzIG9ubHkgd2l0aCBidWZmZXJzID49IDkgKi8KLQkvKiBITUFDIGlzIGFsd2F5cyA+PSA5IGJlY2F1c2Ugb2YgaXBhZCAqLwotCWlmICgoY3R4LT5kaWdjbnQgKyBjdHgtPmJ1ZmNudCkgPCA5KQotCQllcnIgPSBvbWFwX3NoYW1fZmluYWxfc2hhc2gocmVxKTsKLQllbHNlIGlmIChjdHgtPmJ1ZmNudCkKLQkJcmV0dXJuIG9tYXBfc2hhbV9lbnF1ZXVlKHJlcSwgT1BfRklOQUwpOworCWlmICghKGN0eC0+ZmxhZ3MgJiBGTEFHU19FUlJPUikpIHsKKwkJLyogT01BUCBIVyBhY2NlbCB3b3JrcyBvbmx5IHdpdGggYnVmZmVycyA+PSA5ICovCisJCS8qIEhNQUMgaXMgYWx3YXlzID49IDkgYmVjYXVzZSBvZiBpcGFkICovCisJCWlmICgoY3R4LT5kaWdjbnQgKyBjdHgtPmJ1ZmNudCkgPCA5KQorCQkJZXJyID0gb21hcF9zaGFtX2ZpbmFsX3NoYXNoKHJlcSk7CisJCWVsc2UgaWYgKGN0eC0+YnVmY250KQorCQkJcmV0dXJuIG9tYXBfc2hhbV9lbnF1ZXVlKHJlcSwgT1BfRklOQUwpOworCX0KIAogCW9tYXBfc2hhbV9jbGVhbnVwKHJlcSk7CiAKQEAgLTgzNiw2ICs4OTAsOCBAQAogCXN0cnVjdCBvbWFwX3NoYW1fY3R4ICp0Y3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAljb25zdCBjaGFyICphbGdfbmFtZSA9IGNyeXB0b190Zm1fYWxnX25hbWUodGZtKTsKIAorCXByX2luZm8oImVudGVyXG4iKTsKKwogCS8qIEFsbG9jYXRlIGEgZmFsbGJhY2sgYW5kIGFib3J0IGlmIGl0IGZhaWxlZC4gKi8KIAl0Y3R4LT5mYWxsYmFjayA9IGNyeXB0b19hbGxvY19zaGFzaChhbGdfbmFtZSwgMCwKIAkJCQkJICAgIENSWVBUT19BTEdfTkVFRF9GQUxMQkFDSyk7CkBAIC04NDYsNyArOTAyLDcgQEAKIAl9CiAKIAljcnlwdG9fYWhhc2hfc2V0X3JlcXNpemUoX19jcnlwdG9fYWhhc2hfY2FzdCh0Zm0pLAotCQkJCSBzaXplb2Yoc3RydWN0IG9tYXBfc2hhbV9yZXFjdHgpKTsKKwkJCQkgc2l6ZW9mKHN0cnVjdCBvbWFwX3NoYW1fcmVxY3R4KSArIEJVRkxFTik7CiAKIAlpZiAoYWxnX2Jhc2UpIHsKIAkJc3RydWN0IG9tYXBfc2hhbV9obWFjX2N0eCAqYmN0eCA9IHRjdHgtPmJhc2U7CkBAIC05MzIsNyArOTg4LDcgQEAKIAkJCQkJCUNSWVBUT19BTEdfTkVFRF9GQUxMQkFDSywKIAkJLmNyYV9ibG9ja3NpemUJCT0gU0hBMV9CTE9DS19TSVpFLAogCQkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBvbWFwX3NoYW1fY3R4KSwKLQkJLmNyYV9hbGlnbm1hc2sJCT0gMCwKKwkJLmNyYV9hbGlnbm1hc2sJCT0gT01BUF9BTElHTl9NQVNLLAogCQkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKIAkJLmNyYV9pbml0CQk9IG9tYXBfc2hhbV9jcmFfaW5pdCwKIAkJLmNyYV9leGl0CQk9IG9tYXBfc2hhbV9jcmFfZXhpdCwKQEAgLTk1Niw3ICsxMDEyLDcgQEAKIAkJLmNyYV9ibG9ja3NpemUJCT0gU0hBMV9CTE9DS19TSVpFLAogCQkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBvbWFwX3NoYW1fY3R4KSArCiAJCQkJCXNpemVvZihzdHJ1Y3Qgb21hcF9zaGFtX2htYWNfY3R4KSwKLQkJLmNyYV9hbGlnbm1hc2sJCT0gMCwKKwkJLmNyYV9hbGlnbm1hc2sJCT0gT01BUF9BTElHTl9NQVNLLAogCQkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKIAkJLmNyYV9pbml0CQk9IG9tYXBfc2hhbV9jcmFfc2hhMV9pbml0LAogCQkuY3JhX2V4aXQJCT0gb21hcF9zaGFtX2NyYV9leGl0LApAQCAtOTgwLDcgKzEwMzYsNyBAQAogCQkuY3JhX2Jsb2Nrc2l6ZQkJPSBTSEExX0JMT0NLX1NJWkUsCiAJCS5jcmFfY3R4c2l6ZQkJPSBzaXplb2Yoc3RydWN0IG9tYXBfc2hhbV9jdHgpICsKIAkJCQkJc2l6ZW9mKHN0cnVjdCBvbWFwX3NoYW1faG1hY19jdHgpLAotCQkuY3JhX2FsaWdubWFzawkJPSAwLAorCQkuY3JhX2FsaWdubWFzawkJPSBPTUFQX0FMSUdOX01BU0ssCiAJCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAogCQkuY3JhX2luaXQJCT0gb21hcF9zaGFtX2NyYV9tZDVfaW5pdCwKIAkJLmNyYV9leGl0CQk9IG9tYXBfc2hhbV9jcmFfZXhpdCwKQEAgLTk5Myw3ICsxMDQ5LDcgQEAKIAlzdHJ1Y3Qgb21hcF9zaGFtX2RldiAqZGQgPSAoc3RydWN0IG9tYXBfc2hhbV9kZXYgKilkYXRhOwogCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEgPSBkZC0+cmVxOwogCXN0cnVjdCBvbWFwX3NoYW1fcmVxY3R4ICpjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOwotCWludCByZWFkeSA9IDE7CisJaW50IHJlYWR5ID0gMCwgZXJyID0gMDsKIAogCWlmIChjdHgtPmZsYWdzICYgRkxBR1NfT1VUUFVUX1JFQURZKSB7CiAJCWN0eC0+ZmxhZ3MgJj0gfkZMQUdTX09VVFBVVF9SRUFEWTsKQEAgLTEwMDMsMTUgKzEwNTksMTggQEAKIAlpZiAoZGQtPmZsYWdzICYgRkxBR1NfRE1BX0FDVElWRSkgewogCQlkZC0+ZmxhZ3MgJj0gfkZMQUdTX0RNQV9BQ1RJVkU7CiAJCW9tYXBfc2hhbV91cGRhdGVfZG1hX3N0b3AoZGQpOwotCQlvbWFwX3NoYW1fdXBkYXRlX2RtYV9zbG93KGRkKTsKKwkJaWYgKCFkZC0+ZXJyKQorCQkJZXJyID0gb21hcF9zaGFtX3VwZGF0ZV9kbWFfc3RhcnQoZGQpOwogCX0KIAotCWlmIChyZWFkeSAmJiAhKGRkLT5mbGFncyAmIEZMQUdTX0RNQV9BQ1RJVkUpKSB7Ci0JCWRldl9kYmcoZGQtPmRldiwgInVwZGF0ZSBkb25lXG4iKTsKKwllcnIgPSBkZC0+ZXJyID8gOiBlcnI7CisKKwlpZiAoZXJyICE9IC1FSU5QUk9HUkVTUyAmJiAocmVhZHkgfHwgZXJyKSkgeworCQlkZXZfZGJnKGRkLT5kZXYsICJ1cGRhdGUgZG9uZTogZXJyOiAlZFxuIiwgZXJyKTsKIAkJLyogZmluaXNoIGN1cmVudCByZXF1ZXN0ICovCi0JCW9tYXBfc2hhbV9maW5pc2hfcmVxKHJlcSwgMCk7CisJCW9tYXBfc2hhbV9maW5pc2hfcmVxKHJlcSwgZXJyKTsKIAkJLyogc3RhcnQgbmV3IHJlcXVlc3QgKi8KLQkJb21hcF9zaGFtX2hhbmRsZV9xdWV1ZShkZCk7CisJCW9tYXBfc2hhbV9oYW5kbGVfcXVldWUoZGQsIE5VTEwpOwogCX0KIH0KIApAQCAtMTAxOSw3ICsxMDc4LDcgQEAKIHsKIAlzdHJ1Y3Qgb21hcF9zaGFtX2RldiAqZGQgPSAoc3RydWN0IG9tYXBfc2hhbV9kZXYgKilkYXRhOwogCi0Jb21hcF9zaGFtX2hhbmRsZV9xdWV1ZShkZCk7CisJb21hcF9zaGFtX2hhbmRsZV9xdWV1ZShkZCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBvbWFwX3NoYW1faXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTEwNDEsNiArMTEwMCw3IEBACiAJb21hcF9zaGFtX3JlYWQoZGQsIFNIQV9SRUdfQ1RSTCk7CiAKIAljdHgtPmZsYWdzIHw9IEZMQUdTX09VVFBVVF9SRUFEWTsKKwlkZC0+ZXJyID0gMDsKIAl0YXNrbGV0X3NjaGVkdWxlKCZkZC0+ZG9uZV90YXNrKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTEwNTAsOCArMTExMCwxMyBAQAogewogCXN0cnVjdCBvbWFwX3NoYW1fZGV2ICpkZCA9IGRhdGE7CiAKLQlpZiAobGlrZWx5KGxjaCA9PSBkZC0+ZG1hX2xjaCkpCi0JCXRhc2tsZXRfc2NoZWR1bGUoJmRkLT5kb25lX3Rhc2spOworCWlmIChjaF9zdGF0dXMgIT0gT01BUF9ETUFfQkxPQ0tfSVJRKSB7CisJCXByX2Vycigib21hcC1zaGFtIERNQSBlcnJvciBzdGF0dXM6IDB4JWh4XG4iLCBjaF9zdGF0dXMpOworCQlkZC0+ZXJyID0gLUVJTzsKKwkJZGQtPmZsYWdzICY9IH5GTEFHU19JTklUOyAvKiByZXF1ZXN0IHRvIHJlLWluaXRpYWxpemUgKi8KKwl9CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZkZC0+ZG9uZV90YXNrKTsKIH0KIAogc3RhdGljIGludCBvbWFwX3NoYW1fZG1hX2luaXQoc3RydWN0IG9tYXBfc2hhbV9kZXYgKmRkKQpAQCAtMTA2NiwxNSArMTEzMSw2IEBACiAJCWRldl9lcnIoZGQtPmRldiwgIlVuYWJsZSB0byByZXF1ZXN0IERNQSBjaGFubmVsXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0Jb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGRkLT5kbWFfbGNoLCAwLAotCQkJT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCi0JCQlkZC0+cGh5c19iYXNlICsgU0hBX1JFR19ESU4oMCksIDAsIDE2KTsKLQotCW9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUoZGQtPmRtYV9sY2gsCi0JCQlPTUFQX0RNQV9EQVRBX0JVUlNUXzE2KTsKLQotCW9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShkZC0+ZG1hX2xjaCwKLQkJCU9NQVBfRE1BX0RBVEFfQlVSU1RfNCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stYWVzLmMgYi9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLWFlcy5jCmluZGV4IDhhNTE1YmEuLmRiMzNkMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stYWVzLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1hZXMuYwpAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KICNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3BhZGxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTIxLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9pMzg3Lmg+Ci0jaW5jbHVkZSAicGFkbG9jay5oIgogCiAvKgogICogTnVtYmVyIG9mIGRhdGEgYmxvY2tzIGFjdHVhbGx5IGZldGNoZWQgZm9yIGVhY2ggeGNyeXB0IGluc24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYwppbmRleCBkM2EyN2UwLi5hZGYwNzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKQEAgLTEzLDYgKzEzLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KKyNpbmNsdWRlIDxjcnlwdG8vcGFkbG9jay5oPgogI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTIyLDEzICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxhc20vaTM4Ny5oPgotI2luY2x1ZGUgInBhZGxvY2suaCIKLQotI2lmZGVmIENPTkZJR182NEJJVAotI2RlZmluZSBTVEFDS19BTElHTiAxNgotI2Vsc2UKLSNkZWZpbmUgU1RBQ0tfQUxJR04gNAotI2VuZGlmCiAKIHN0cnVjdCBwYWRsb2NrX3NoYV9kZXNjIHsKIAlzdHJ1Y3Qgc2hhc2hfZGVzYyBmYWxsYmFjazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGNhL2RjYS1jb3JlLmMgYi9kcml2ZXJzL2RjYS9kY2EtY29yZS5jCmluZGV4IGI5OGM2NzYuLmM0NjFlZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGNhL2RjYS1jb3JlLmMKKysrIGIvZHJpdmVycy9kY2EvZGNhLWNvcmUuYwpAQCAtMTEwLDggKzExMCw2IEBACiAKIAkvKiBhdCB0aGlzIHBvaW50IG9ubHkgb25lIGRvbWFpbiBpbiB0aGUgbGlzdCBpcyBleHBlY3RlZCAqLwogCWRvbWFpbiA9IGxpc3RfZmlyc3RfZW50cnkoJmRjYV9kb21haW5zLCBzdHJ1Y3QgZGNhX2RvbWFpbiwgbm9kZSk7Ci0JaWYgKCFkb21haW4pCi0JCXJldHVybjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkY2EsIF9kY2EsICZkb21haW4tPmRjYV9wcm92aWRlcnMsIG5vZGUpIHsKIAkJbGlzdF9kZWwoJmRjYS0+bm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9LY29uZmlnIGIvZHJpdmVycy9kbWEvS2NvbmZpZwppbmRleCA2ZWUyMzU5Li5lZjEzODczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1hL0tjb25maWcKQEAgLTEwOSw3ICsxMDksNyBAQAogCiBjb25maWcgTVBDNTEyWF9ETUEKIAl0cmlzdGF0ZSAiRnJlZXNjYWxlIE1QQzUxMnggYnVpbHQtaW4gRE1BIGVuZ2luZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gUFBDX01QQzUxMngKKwlkZXBlbmRzIG9uIFBQQ19NUEM1MTJ4IHx8IFBQQ19NUEM4MzF4CiAJc2VsZWN0IERNQV9FTkdJTkUKIAktLS1oZWxwLS0tCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBNUEM1MTJ4IGJ1aWx0LWluIERNQSBlbmdpbmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pbnRlbF9taWRfZG1hLmMgYi9kcml2ZXJzL2RtYS9pbnRlbF9taWRfZG1hLmMKaW5kZXggMzEwOWJkOS4uNzgyNjYzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW50ZWxfbWlkX2RtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2ludGVsX21pZF9kbWEuYwpAQCAtMTA2MCw4ICsxMDYwLDggQEAKICAqIG1pZF9zZXR1cF9kbWEgLQlTZXR1cCB0aGUgRE1BIGNvbnRyb2xsZXIKICAqIEBwZGV2OiBDb250cm9sbGVyIFBDSSBkZXZpY2Ugc3RydWN0dXJlCiAgKgotICogSW5pdGlsaXplIHRoZSBETUEgY29udHJvbGxlciwgY2hhbm5lbHMsIHJlZ2lzdGVycyB3aXRoIERNQSBlbmdpbmUsCi0gKiBJU1IuIEluaXRpbGl6ZSBETUEgY29udHJvbGxlciBjaGFubmVscy4KKyAqIEluaXRpYWxpemUgdGhlIERNQSBjb250cm9sbGVyLCBjaGFubmVscywgcmVnaXN0ZXJzIHdpdGggRE1BIGVuZ2luZSwKKyAqIElTUi4gSW5pdGlhbGl6ZSBETUEgY29udHJvbGxlciBjaGFubmVscy4KICAqLwogc3RhdGljIGludCBtaWRfc2V0dXBfZG1hKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpAQCAtMTIxNyw3ICsxMjE3LDcgQEAKICAqIEBwZGV2OiBDb250cm9sbGVyIFBDSSBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAaWQ6IHBjaSBkZXZpY2UgaWQgc3RydWN0dXJlCiAgKgotICogSW5pdGlsaXplIHRoZSBQQ0kgZGV2aWNlLCBtYXAgQkFScywgcXVlcnkgZHJpdmVyIGRhdGEuCisgKiBJbml0aWFsaXplIHRoZSBQQ0kgZGV2aWNlLCBtYXAgQkFScywgcXVlcnkgZHJpdmVyIGRhdGEuCiAgKiBDYWxsIHNldHVwX2RtYSB0byBjb21wbGV0ZSBjb250b2xsZXIgYW5kIGNoYW4gaW5pdGlsemF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IGludGVsX21pZF9kbWFfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9tcGM1MTJ4X2RtYS5jIGIvZHJpdmVycy9kbWEvbXBjNTEyeF9kbWEuYwppbmRleCA0ZTljYmYzLi41OWMyNzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9tcGM1MTJ4X2RtYS5jCisrKyBiL2RyaXZlcnMvZG1hL21wYzUxMnhfZG1hLmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSBGcmVlc2NhbGUgU2VtaWNvbmR1dG9yLCBJbmMuIDIwMDcsIDIwMDguCiAgKiBDb3B5cmlnaHQgKEMpIFNlbWloYWxmIDIwMDkKKyAqIENvcHlyaWdodCAoQykgSWx5YSBZYW5vaywgRW1jcmFmdCBTeXN0ZW1zIDIwMTAKICAqCiAgKiBXcml0dGVuIGJ5IFBpb3RyIFppZWNpayA8a29zbW9Ac2VtaWhhbGYuY29tPi4gSGFyZHdhcmUgZGVzY3JpcHRpb24KICAqIChkZWZpbmVzLCBzdHJ1Y3R1cmVzIGFuZCBjb21tZW50cykgd2FzIHRha2VuIGZyb20gTVBDNTEyMSBETUEgZHJpdmVyCkBAIC03MCw2ICs3MSw4IEBACiAjZGVmaW5lIE1QQ19ETUFfRE1BRVNfU0JFCSgxIDw8IDEpCiAjZGVmaW5lIE1QQ19ETUFfRE1BRVNfREJFCSgxIDw8IDApCiAKKyNkZWZpbmUgTVBDX0RNQV9ETUFHUE9SX1NOT09QX0VOQUJMRQkoMSA8PCA2KQorCiAjZGVmaW5lIE1QQ19ETUFfVFNJWkVfMQkJMHgwMAogI2RlZmluZSBNUENfRE1BX1RTSVpFXzIJCTB4MDEKICNkZWZpbmUgTVBDX0RNQV9UU0laRV80CQkweDAyCkBAIC0xMDQsNyArMTA3LDEwIEBACiAJLyogMHgzMCAqLwogCXUzMiBkbWFocnNoOwkJLyogRE1BIGh3IHJlcXVlc3Qgc3RhdHVzIGhpZ2goY2g2M34zMikgKi8KIAl1MzIgZG1haHJzbDsJCS8qIERNQSBoYXJkd2FyZSByZXF1ZXN0IHN0YXR1cyBsb3coY2gzMX4wKSAqLwotCXUzMiBkbWFpaHNhOwkJLyogRE1BIGludGVycnVwdCBoaWdoIHNlbGVjdCBBWEUoY2g2M34zMikgKi8KKwl1bmlvbiB7CisJCXUzMiBkbWFpaHNhOwkvKiBETUEgaW50ZXJydXB0IGhpZ2ggc2VsZWN0IEFYRShjaDYzfjMyKSAqLworCQl1MzIgZG1hZ3BvcjsJLyogKEdlbmVyYWwgcHVycG9zZSByZWdpc3RlciBvbiBNUEM4MzA4KSAqLworCX07CiAJdTMyIGRtYWlsc2E7CQkvKiBETUEgaW50ZXJydXB0IGxvdyBzZWxlY3QgQVhFKGNoMzF+MCkgKi8KIAkvKiAweDQwIH4gMHhmZiAqLwogCXUzMiByZXNlcnZlMFs0OF07CS8qIFJlc2VydmVkICovCkBAIC0xOTUsNyArMjAxLDkgQEAKIAlzdHJ1Y3QgbXBjX2RtYV9yZWdzIF9faW9tZW0JKnJlZ3M7CiAJc3RydWN0IG1wY19kbWFfdGNkIF9faW9tZW0JKnRjZDsKIAlpbnQJCQkJaXJxOworCWludAkJCQlpcnEyOwogCXVpbnQJCQkJZXJyb3Jfc3RhdHVzOworCWludAkJCQlpc19tcGM4MzA4OwogCiAJLyogTG9jayBmb3IgZXJyb3Jfc3RhdHVzIGZpZWxkIGluIHRoaXMgc3RydWN0dXJlICovCiAJc3BpbmxvY2tfdAkJCWVycm9yX3N0YXR1c19sb2NrOwpAQCAtMjUyLDExICsyNjAsMTMgQEAKIAkJcHJldiA9IG1kZXNjOwogCX0KIAotCXByZXYtPnRjZC0+c3RhcnQgPSAwOwogCXByZXYtPnRjZC0+aW50X21haiA9IDE7CiAKIAkvKiBTZW5kIGZpcnN0IGRlc2NyaXB0b3IgaW4gY2hhaW4gaW50byBoYXJkd2FyZSAqLwogCW1lbWNweV90b2lvKCZtZG1hLT50Y2RbY2lkXSwgZmlyc3QtPnRjZCwgc2l6ZW9mKHN0cnVjdCBtcGNfZG1hX3RjZCkpOworCisJaWYgKGZpcnN0ICE9IHByZXYpCisJCW1kbWEtPnRjZFtjaWRdLmVfc2cgPSAxOwogCW91dF84KCZtZG1hLT5yZWdzLT5kbWFzc3J0LCBjaWQpOwogfQogCkBAIC0yNzQsNiArMjg0LDkgQEAKIAogCQlzcGluX2xvY2soJm1jaGFuLT5sb2NrKTsKIAorCQlvdXRfOCgmbWRtYS0+cmVncy0+ZG1hY2ludCwgY2ggKyBvZmYpOworCQlvdXRfOCgmbWRtYS0+cmVncy0+ZG1hY2VyciwgY2ggKyBvZmYpOworCiAJCS8qIENoZWNrIGVycm9yIHN0YXR1cyAqLwogCQlpZiAoZXMgJiAoMSA8PCBjaCkpCiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1kZXNjLCAmbWNoYW4tPmFjdGl2ZSwgbm9kZSkKQEAgLTMwMiwzNiArMzE1LDY4IEBACiAJc3Bpbl91bmxvY2soJm1kbWEtPmVycm9yX3N0YXR1c19sb2NrKTsKIAogCS8qIEhhbmRsZSBpbnRlcnJ1cHQgb24gZWFjaCBjaGFubmVsICovCi0JbXBjX2RtYV9pcnFfcHJvY2VzcyhtZG1hLCBpbl9iZTMyKCZtZG1hLT5yZWdzLT5kbWFpbnRoKSwKKwlpZiAobWRtYS0+ZG1hLmNoYW5jbnQgPiAzMikgeworCQltcGNfZG1hX2lycV9wcm9jZXNzKG1kbWEsIGluX2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWludGgpLAogCQkJCQlpbl9iZTMyKCZtZG1hLT5yZWdzLT5kbWFlcnJoKSwgMzIpOworCX0KIAltcGNfZG1hX2lycV9wcm9jZXNzKG1kbWEsIGluX2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWludGwpLAogCQkJCQlpbl9iZTMyKCZtZG1hLT5yZWdzLT5kbWFlcnJsKSwgMCk7CiAKLQkvKiBBY2sgaW50ZXJydXB0IG9uIGFsbCBjaGFubmVscyAqLwotCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFpbnRoLCAweEZGRkZGRkZGKTsKLQlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1haW50bCwgMHhGRkZGRkZGRik7Ci0Jb3V0X2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWVycmgsIDB4RkZGRkZGRkYpOwotCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFlcnJsLCAweEZGRkZGRkZGKTsKLQogCS8qIFNjaGVkdWxlIHRhc2tsZXQgKi8KIAl0YXNrbGV0X3NjaGVkdWxlKCZtZG1hLT50YXNrbGV0KTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotLyogRE1BIFRhc2tsZXQgKi8KLXN0YXRpYyB2b2lkIG1wY19kbWFfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCisvKiBwcm9jY2VzcyBjb21wbGV0ZWQgZGVzY3JpcHRvcnMgKi8KK3N0YXRpYyB2b2lkIG1wY19kbWFfcHJvY2Vzc19jb21wbGV0ZWQoc3RydWN0IG1wY19kbWEgKm1kbWEpCiB7Ci0Jc3RydWN0IG1wY19kbWEgKm1kbWEgPSAodm9pZCAqKWRhdGE7CiAJZG1hX2Nvb2tpZV90IGxhc3RfY29va2llID0gMDsKIAlzdHJ1Y3QgbXBjX2RtYV9jaGFuICptY2hhbjsKIAlzdHJ1Y3QgbXBjX2RtYV9kZXNjICptZGVzYzsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlMSVNUX0hFQUQobGlzdCk7Ci0JdWludCBlczsKIAlpbnQgaTsKIAorCWZvciAoaSA9IDA7IGkgPCBtZG1hLT5kbWEuY2hhbmNudDsgaSsrKSB7CisJCW1jaGFuID0gJm1kbWEtPmNoYW5uZWxzW2ldOworCisJCS8qIEdldCBhbGwgY29tcGxldGVkIGRlc2NyaXB0b3JzICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZtY2hhbi0+bG9jaywgZmxhZ3MpOworCQlpZiAoIWxpc3RfZW1wdHkoJm1jaGFuLT5jb21wbGV0ZWQpKQorCQkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZtY2hhbi0+Y29tcGxldGVkLCAmbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jaGFuLT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKGxpc3RfZW1wdHkoJmxpc3QpKQorCQkJY29udGludWU7CisKKwkJLyogRXhlY3V0ZSBjYWxsYmFja3MgYW5kIHJ1biBkZXBlbmRlbmNpZXMgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShtZGVzYywgJmxpc3QsIG5vZGUpIHsKKwkJCWRlc2MgPSAmbWRlc2MtPmRlc2M7CisKKwkJCWlmIChkZXNjLT5jYWxsYmFjaykKKwkJCQlkZXNjLT5jYWxsYmFjayhkZXNjLT5jYWxsYmFja19wYXJhbSk7CisKKwkJCWxhc3RfY29va2llID0gZGVzYy0+Y29va2llOworCQkJZG1hX3J1bl9kZXBlbmRlbmNpZXMoZGVzYyk7CisJCX0KKworCQkvKiBGcmVlIGRlc2NyaXB0b3JzICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZtY2hhbi0+bG9jaywgZmxhZ3MpOworCQlsaXN0X3NwbGljZV90YWlsX2luaXQoJmxpc3QsICZtY2hhbi0+ZnJlZSk7CisJCW1jaGFuLT5jb21wbGV0ZWRfY29va2llID0gbGFzdF9jb29raWU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jaGFuLT5sb2NrLCBmbGFncyk7CisJfQorfQorCisvKiBETUEgVGFza2xldCAqLworc3RhdGljIHZvaWQgbXBjX2RtYV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbXBjX2RtYSAqbWRtYSA9ICh2b2lkICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVpbnQgZXM7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWRtYS0+ZXJyb3Jfc3RhdHVzX2xvY2ssIGZsYWdzKTsKIAllcyA9IG1kbWEtPmVycm9yX3N0YXR1czsKIAltZG1hLT5lcnJvcl9zdGF0dXMgPSAwOwpAQCAtMzcwLDM1ICs0MTUsNyBAQAogCQkJZGV2X2VycihtZG1hLT5kbWEuZGV2LCAiLSBEZXN0aW5hdGlvbiBCdXMgRXJyb3JcbiIpOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBtZG1hLT5kbWEuY2hhbmNudDsgaSsrKSB7Ci0JCW1jaGFuID0gJm1kbWEtPmNoYW5uZWxzW2ldOwotCi0JCS8qIEdldCBhbGwgY29tcGxldGVkIGRlc2NyaXB0b3JzICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZtY2hhbi0+bG9jaywgZmxhZ3MpOwotCQlpZiAoIWxpc3RfZW1wdHkoJm1jaGFuLT5jb21wbGV0ZWQpKQotCQkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZtY2hhbi0+Y29tcGxldGVkLCAmbGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jaGFuLT5sb2NrLCBmbGFncyk7Ci0KLQkJaWYgKGxpc3RfZW1wdHkoJmxpc3QpKQotCQkJY29udGludWU7Ci0KLQkJLyogRXhlY3V0ZSBjYWxsYmFja3MgYW5kIHJ1biBkZXBlbmRlbmNpZXMgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtZGVzYywgJmxpc3QsIG5vZGUpIHsKLQkJCWRlc2MgPSAmbWRlc2MtPmRlc2M7Ci0KLQkJCWlmIChkZXNjLT5jYWxsYmFjaykKLQkJCQlkZXNjLT5jYWxsYmFjayhkZXNjLT5jYWxsYmFja19wYXJhbSk7Ci0KLQkJCWxhc3RfY29va2llID0gZGVzYy0+Y29va2llOwotCQkJZG1hX3J1bl9kZXBlbmRlbmNpZXMoZGVzYyk7Ci0JCX0KLQotCQkvKiBGcmVlIGRlc2NyaXB0b3JzICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZtY2hhbi0+bG9jaywgZmxhZ3MpOwotCQlsaXN0X3NwbGljZV90YWlsX2luaXQoJmxpc3QsICZtY2hhbi0+ZnJlZSk7Ci0JCW1jaGFuLT5jb21wbGV0ZWRfY29va2llID0gbGFzdF9jb29raWU7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jaGFuLT5sb2NrLCBmbGFncyk7Ci0JfQorCW1wY19kbWFfcHJvY2Vzc19jb21wbGV0ZWQobWRtYSk7CiB9CiAKIC8qIFN1Ym1pdCBkZXNjcmlwdG9yIHRvIGhhcmR3YXJlICovCkBAIC01NjMsNiArNTgwLDcgQEAKIG1wY19kbWFfcHJlcF9tZW1jcHkoc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRzdCwgZG1hX2FkZHJfdCBzcmMsCiAJCQkJCXNpemVfdCBsZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CisJc3RydWN0IG1wY19kbWEgKm1kbWEgPSBkbWFfY2hhbl90b19tcGNfZG1hKGNoYW4pOwogCXN0cnVjdCBtcGNfZG1hX2NoYW4gKm1jaGFuID0gZG1hX2NoYW5fdG9fbXBjX2RtYV9jaGFuKGNoYW4pOwogCXN0cnVjdCBtcGNfZG1hX2Rlc2MgKm1kZXNjID0gTlVMTDsKIAlzdHJ1Y3QgbXBjX2RtYV90Y2QgKnRjZDsKQEAgLTU3Nyw4ICs1OTUsMTEgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNoYW4tPmxvY2ssIGlmbGFncyk7CiAKLQlpZiAoIW1kZXNjKQorCWlmICghbWRlc2MpIHsKKwkJLyogdHJ5IHRvIGZyZWUgY29tcGxldGVkIGRlc2NyaXB0b3JzICovCisJCW1wY19kbWFfcHJvY2Vzc19jb21wbGV0ZWQobWRtYSk7CiAJCXJldHVybiBOVUxMOworCX0KIAogCW1kZXNjLT5lcnJvciA9IDA7CiAJdGNkID0gbWRlc2MtPnRjZDsKQEAgLTU5MSw3ICs2MTIsOCBAQAogCQl0Y2QtPmRzaXplID0gTVBDX0RNQV9UU0laRV8zMjsKIAkJdGNkLT5zb2ZmID0gMzI7CiAJCXRjZC0+ZG9mZiA9IDMyOwotCX0gZWxzZSBpZiAoSVNfQUxJR05FRChzcmMgfCBkc3QgfCBsZW4sIDE2KSkgeworCX0gZWxzZSBpZiAoIW1kbWEtPmlzX21wYzgzMDggJiYgSVNfQUxJR05FRChzcmMgfCBkc3QgfCBsZW4sIDE2KSkgeworCQkvKiBNUEM4MzA4IGRvZXNuJ3Qgc3VwcG9ydCAxNiBieXRlIHRyYW5zZmVycyAqLwogCQl0Y2QtPnNzaXplID0gTVBDX0RNQV9UU0laRV8xNjsKIAkJdGNkLT5kc2l6ZSA9IE1QQ19ETUFfVFNJWkVfMTY7CiAJCXRjZC0+c29mZiA9IDE2OwpAQCAtNjUxLDYgKzY3MywxNSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZG4sICJmc2wsbXBjODMwOC1kbWEiKSkgeworCQltZG1hLT5pc19tcGM4MzA4ID0gMTsKKwkJbWRtYS0+aXJxMiA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRuLCAxKTsKKwkJaWYgKG1kbWEtPmlycTIgPT0gTk9fSVJRKSB7CisJCQlkZXZfZXJyKGRldiwgIkVycm9yIG1hcHBpbmcgSVJRIVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwogCXJldHZhbCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZG4sIDAsICZyZXMpOwogCWlmIChyZXR2YWwpIHsKIAkJZGV2X2VycihkZXYsICJFcnJvciBwYXJzaW5nIG1lbW9yeSByZWdpb24hXG4iKTsKQEAgLTY4MSwxMSArNzEyLDIzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmIChtZG1hLT5pc19tcGM4MzA4KSB7CisJCXJldHZhbCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBtZG1hLT5pcnEyLCAmbXBjX2RtYV9pcnEsIDAsCisJCQkJRFJWX05BTUUsIG1kbWEpOworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfZXJyKGRldiwgIkVycm9yIHJlcXVlc3RpbmcgSVJRMiFcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKIAlzcGluX2xvY2tfaW5pdCgmbWRtYS0+ZXJyb3Jfc3RhdHVzX2xvY2spOwogCiAJZG1hID0gJm1kbWEtPmRtYTsKIAlkbWEtPmRldiA9IGRldjsKLQlkbWEtPmNoYW5jbnQgPSBNUENfRE1BX0NIQU5ORUxTOworCWlmICghbWRtYS0+aXNfbXBjODMwOCkKKwkJZG1hLT5jaGFuY250ID0gTVBDX0RNQV9DSEFOTkVMUzsKKwllbHNlCisJCWRtYS0+Y2hhbmNudCA9IDE2OyAvKiBNUEM4MzA4IERNQSBoYXMgb25seSAxNiBjaGFubmVscyAqLwogCWRtYS0+ZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0gbXBjX2RtYV9hbGxvY19jaGFuX3Jlc291cmNlczsKIAlkbWEtPmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzID0gbXBjX2RtYV9mcmVlX2NoYW5fcmVzb3VyY2VzOwogCWRtYS0+ZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSBtcGNfZG1hX2lzc3VlX3BlbmRpbmc7CkBAIC03MjEsMjYgKzc2NCw0MCBAQAogCSAqIC0gUm91bmQtcm9iaW4gZ3JvdXAgYXJiaXRyYXRpb24sCiAJICogLSBSb3VuZC1yb2JpbiBjaGFubmVsIGFyYml0cmF0aW9uLgogCSAqLwotCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFjciwgTVBDX0RNQV9ETUFDUl9FRENHIHwKLQkJCQlNUENfRE1BX0RNQUNSX0VSR0EgfCBNUENfRE1BX0RNQUNSX0VSQ0EpOworCWlmICghbWRtYS0+aXNfbXBjODMwOCkgeworCQlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1hY3IsIE1QQ19ETUFfRE1BQ1JfRURDRyB8CisJCQkJCU1QQ19ETUFfRE1BQ1JfRVJHQSB8IE1QQ19ETUFfRE1BQ1JfRVJDQSk7CiAKLQkvKiBEaXNhYmxlIGhhcmR3YXJlIERNQSByZXF1ZXN0cyAqLwotCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFlcnFoLCAwKTsKLQlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1hZXJxbCwgMCk7CisJCS8qIERpc2FibGUgaGFyZHdhcmUgRE1BIHJlcXVlc3RzICovCisJCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFlcnFoLCAwKTsKKwkJb3V0X2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWVycWwsIDApOwogCi0JLyogRGlzYWJsZSBlcnJvciBpbnRlcnJ1cHRzICovCi0Jb3V0X2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWVlaWgsIDApOwotCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFlZWlsLCAwKTsKKwkJLyogRGlzYWJsZSBlcnJvciBpbnRlcnJ1cHRzICovCisJCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFlZWloLCAwKTsKKwkJb3V0X2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWVlaWwsIDApOwogCi0JLyogQ2xlYXIgaW50ZXJydXB0cyBzdGF0dXMgKi8KLQlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1haW50aCwgMHhGRkZGRkZGRik7Ci0Jb3V0X2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWludGwsIDB4RkZGRkZGRkYpOwotCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFlcnJoLCAweEZGRkZGRkZGKTsKLQlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1hZXJybCwgMHhGRkZGRkZGRik7CisJCS8qIENsZWFyIGludGVycnVwdHMgc3RhdHVzICovCisJCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFpbnRoLCAweEZGRkZGRkZGKTsKKwkJb3V0X2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWludGwsIDB4RkZGRkZGRkYpOworCQlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1hZXJyaCwgMHhGRkZGRkZGRik7CisJCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFlcnJsLCAweEZGRkZGRkZGKTsKIAotCS8qIFJvdXRlIGludGVycnVwdHMgdG8gSVBJQyAqLwotCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFpaHNhLCAwKTsKLQlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1haWxzYSwgMCk7CisJCS8qIFJvdXRlIGludGVycnVwdHMgdG8gSVBJQyAqLworCQlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1haWhzYSwgMCk7CisJCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFpbHNhLCAwKTsKKwl9IGVsc2UgeworCQkvKiBNUEM4MzA4IGhhcyAxNiBjaGFubmVscyBhbmQgbGFja3Mgc29tZSByZWdpc3RlcnMgKi8KKwkJb3V0X2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWNyLCBNUENfRE1BX0RNQUNSX0VSQ0EpOworCisJCS8qIGVuYWJsZSBzbm9vcGluZyAqLworCQlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1hZ3BvciwgTVBDX0RNQV9ETUFHUE9SX1NOT09QX0VOQUJMRSk7CisJCS8qIERpc2FibGUgZXJyb3IgaW50ZXJydXB0cyAqLworCQlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1hZWVpbCwgMCk7CisKKwkJLyogQ2xlYXIgaW50ZXJydXB0cyBzdGF0dXMgKi8KKwkJb3V0X2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWludGwsIDB4RkZGRik7CisJCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFlcnJsLCAweEZGRkYpOworCX0KIAogCS8qIFJlZ2lzdGVyIERNQSBlbmdpbmUgKi8KIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBtZG1hKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ4MTMxX2VkYWMuaCBiL2RyaXZlcnMvZWRhYy9hbWQ4MTMxX2VkYWMuaAppbmRleCA2MGUwZDFjLi42ZjhiMDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kODEzMV9lZGFjLmgKKysrIGIvZHJpdmVycy9lZGFjL2FtZDgxMzFfZWRhYy5oCkBAIC05OSw3ICs5OSw3IEBACiAKIC8qCiAgKiBBTUQ4MTMxIGNoaXBzZXQgaGFzIHR3byBwYWlycyBvZiBQQ0lYIEJyaWRnZSBhbmQgcmVsYXRlZCBJT0FQSUMKLSAqIENvbnRyb2xlciwgYW5kIEFUQ0EtNjEwMSBoYXMgdHdvIEFNRDgxMzEgY2hpcHNldHMsIHNvIHRoZXJlIGFyZQorICogQ29udHJvbGxlciwgYW5kIEFUQ0EtNjEwMSBoYXMgdHdvIEFNRDgxMzEgY2hpcHNldHMsIHNvIHRoZXJlIGFyZQogICogZm91ciBQQ0lYIEJyaWRnZXMgb24gQVRDQS02MTAxIGFsdG9nZXRoZXIuCiAgKgogICogVGhlc2UgUENJWCBCcmlkZ2VzIHNoYXJlIHRoZSBzYW1lIFBDSSBEZXZpY2UgSUQgYW5kIGFyZSBhbGwgb2YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYwppbmRleCBjOTczMDA0Li5kYjFkZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJb2Zmc2V0ID0gYWRkcmVzcyAmIH5QQUdFX01BU0s7CiAJc3luZHJvbWUgPSAoYXIgJiAweDAwMDAwMDAwMWZlMDAwMDB1bCkgPj4gMjE7CiAKLQkvKiBUT0RPOiBEZWNvZGluZyBvZiB0aGUgZXJyb3IgYWRkcmVzc3MgKi8KKwkvKiBUT0RPOiBEZWNvZGluZyBvZiB0aGUgZXJyb3IgYWRkcmVzcyAqLwogCWVkYWNfbWNfaGFuZGxlX2NlKG1jaSwgY3Nyb3ctPmZpcnN0X3BhZ2UgKyBwZm4sIG9mZnNldCwKIAkJCSAgc3luZHJvbWUsIDAsIGNoYW4sICIiKTsKIH0KQEAgLTY4LDcgKzY4LDcgQEAKIAlwZm4gPSBhZGRyZXNzID4+IFBBR0VfU0hJRlQ7CiAJb2Zmc2V0ID0gYWRkcmVzcyAmIH5QQUdFX01BU0s7CiAKLQkvKiBUT0RPOiBEZWNvZGluZyBvZiB0aGUgZXJyb3IgYWRkcmVzc3MgKi8KKwkvKiBUT0RPOiBEZWNvZGluZyBvZiB0aGUgZXJyb3IgYWRkcmVzcyAqLwogCWVkYWNfbWNfaGFuZGxlX3VlKG1jaSwgY3Nyb3ctPmZpcnN0X3BhZ2UgKyBwZm4sIG9mZnNldCwgMCwgIiIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmggYi9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmgKaW5kZXggZmYxZWI3Yi4uM2Q5NjUzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfY29yZS5oCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX2NvcmUuaApAQCAtMjU5LDcgKzI1OSw3IEBACiAgKgkJCWZvciBzaW5nbGUgY2hhbm5lbCBhcmUgNjQgYml0cywgZm9yIGR1YWwgY2hhbm5lbCAxMjgKICAqCQkJYml0cy4KICAqCi0gKiBTaW5nbGUtUmFua2VkIHN0aWNrOglBIFNpbmdsZS1yYW5rZWQgc3RpY2sgaGFzIDEgY2hpcC1zZWxlY3Qgcm93IG9mIG1lbW1vcnkuCisgKiBTaW5nbGUtUmFua2VkIHN0aWNrOglBIFNpbmdsZS1yYW5rZWQgc3RpY2sgaGFzIDEgY2hpcC1zZWxlY3Qgcm93IG9mIG1lbW9yeS4KICAqCQkJTW90aGVyYm9hcmRzIGNvbW1vbmx5IGRyaXZlIHR3byBjaGlwLXNlbGVjdCBwaW5zIHRvCiAgKgkJCWEgbWVtb3J5IHN0aWNrLiBBIHNpbmdsZS1yYW5rZWQgc3RpY2ssIHdpbGwgb2NjdXB5CiAgKgkJCW9ubHkgb25lIG9mIHRob3NlIHJvd3MuIFRoZSBvdGhlciB3aWxsIGJlIHVudXNlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pN2NvcmVfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k3Y29yZV9lZGFjLmMKaW5kZXggMzYyODYxYy4uODExNTRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k3Y29yZV9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k3Y29yZV9lZGFjLmMKQEAgLTEsNiArMSw2IEBACiAvKiBJbnRlbCBpNyBjb3JlL05laGFsZW0gTWVtb3J5IENvbnRyb2xsZXIga2VybmVsIG1vZHVsZQogICoKLSAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHloZSBtZW1vcnkgY29udHJvbGxlcnMgZm91bmQgb24gdGhlIEludGVsCisgKiBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgbWVtb3J5IGNvbnRyb2xsZXJzIGZvdW5kIG9uIHRoZSBJbnRlbAogICogcHJvY2Vzc29yIGZhbWlsaWVzIGk3Y29yZSwgaTdjb3JlIDd4eC84eHgsIGk1Y29yZSwgWGVvbiAzNXh4LAogICogWGVvbiA1NXh4IGFuZCBYZW9uIDU2eHggYWxzbyBrbm93biBhcyBOZWhhbGVtLCBOZWhhbGVtLUVQLCBMeW5uZmllbGQKICAqIGFuZCBXZXN0bWVyZS1FUC4KQEAgLTEyNzEsNyArMTI3MSw3IEBACiAJaW50IGk7CiAKIAkvKgotCSAqIE9uIFhlb24gNTV4eCwgdGhlIEludGVsIFF1Y2twYXRoIEFyY2ggR2VuZXJpYyBOb24tY29yZSBwY2kgYnVzZXMKKwkgKiBPbiBYZW9uIDU1eHgsIHRoZSBJbnRlbCBRdWljayBQYXRoIEFyY2ggR2VuZXJpYyBOb24tY29yZSBwY2kgYnVzZXMKIAkgKiBhcmVuJ3QgYW5ub3VuY2VkIGJ5IGFjcGkuIFNvLCB3ZSBuZWVkIHRvIHVzZSBhIGxlZ2FjeSBzY2FuIHByb2JpbmcKIAkgKiB0byBkZXRlY3QgdGhlbQogCSAqLwpAQCAtMTg2NCw3ICsxODY0LDcgQEAKIAlpZiAobWNlLT5tY2dzdGF0dXMgJiAxKQogCQlpN2NvcmVfY2hlY2tfZXJyb3IobWNpKTsKIAotCS8qIEFkdmljZSBtY2Vsb2cgdGhhdCB0aGUgZXJyb3Igd2VyZSBoYW5kbGVkICovCisJLyogQWR2aXNlIG1jZWxvZyB0aGF0IHRoZSBlcnJvcnMgd2VyZSBoYW5kbGVkICovCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9wcGM0eHhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmMKaW5kZXggMDcwY2VhNC4uYjlmMGMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmMKQEAgLTg3Myw3ICs4NzMsNyBAQAogfQogCiAvKioKLSAqIHBwYzR4eF9lZGFjX2luaXRfY3Nyb3dzIC0gaW50aWFsaXplIGRyaXZlciBpbnN0YW5jZSByb3dzCisgKiBwcGM0eHhfZWRhY19pbml0X2Nzcm93cyAtIGluaXRpYWxpemUgZHJpdmVyIGluc3RhbmNlIHJvd3MKICAqIEBtY2k6IEEgcG9pbnRlciB0byB0aGUgRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZQogICogICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlciBmb3Igd2hpY2gKICAqICAgICAgIHRoZSBjc3Jvd3MgKGkuZS4gYmFua3MvcmFua3MpIGFyZSBiZWluZyBpbml0aWFsaXplZC4KQEAgLTg4MSw3ICs4ODEsNyBAQAogICogICAgICAgICAgY3VycmVudGx5IHNldCBmb3IgdGhlIGNvbnRyb2xsZXIsIGZyb20gd2hpY2ggYmFuayB3aWR0aAogICogICAgICAgICAgYW5kIG1lbW9yeSB0eXAgaW5mb3JtYXRpb24gaXMgZGVyaXZlZC4KICAqCi0gKiBUaGlzIHJvdXRpbmUgaW50aWFsaXplcyB0aGUgdmlydHVhbCAiY2hpcCBzZWxlY3Qgcm93cyIgYXNzb2NpYXRlZAorICogVGhpcyByb3V0aW5lIGluaXRpYWxpemVzIHRoZSB2aXJ0dWFsICJjaGlwIHNlbGVjdCByb3dzIiBhc3NvY2lhdGVkCiAgKiB3aXRoIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlLiBBbiBpYm0sc2RyYW0tNHh4LWRkcjIKICAqIGNvbnRyb2xsZXIgYmFuay9yYW5rIGlzIG1hcHBlZCB0byBhIHJvdy4KICAqCkBAIC05OTIsNyArOTkyLDcgQEAKIH0KIAogLyoqCi0gKiBwcGM0eHhfZWRhY19tY19pbml0IC0gaW50aWFsaXplIGRyaXZlciBpbnN0YW5jZQorICogcHBjNHh4X2VkYWNfbWNfaW5pdCAtIGluaXRpYWxpemUgZHJpdmVyIGluc3RhbmNlCiAgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UgYmVpbmcKICAqICAgICAgIGluaXRpYWxpemVkLgogICogQG9wOiBBIHBvaW50ZXIgdG8gdGhlIE9wZW5GaXJtd2FyZSBkZXZpY2UgdHJlZSBub2RlIGFzc29jaWF0ZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnIGIvZHJpdmVycy9ncGlvL0tjb25maWcKaW5kZXggMDgyNDk1Yi4uNjY0NjYwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9ncGlvL0tjb25maWcKQEAgLTExOCw3ICsxMTgsNyBAQAogCiBjb25maWcgR1BJT19WWDg1NQogCXRyaXN0YXRlICJWSUEgVlg4NTUvVlg4NzUgR1BJTyIKLQlkZXBlbmRzIG9uIEdQSU9MSUIKKwlkZXBlbmRzIG9uIEdQSU9MSUIgJiYgTUZEX1NVUFBPUlQgJiYgUENJCiAJc2VsZWN0IE1GRF9DT1JFCiAJc2VsZWN0IE1GRF9WWDg1NQogCWhlbHAKQEAgLTI5NSw3ICsyOTUsNyBAQAogCiBjb25maWcgR1BJT19DUzU1MzUKIAl0cmlzdGF0ZSAiQU1EIENTNTUzNS9DUzU1MzYgR1BJTyBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmICFDUzU1MzVfR1BJTworCWRlcGVuZHMgb24gUENJICYmIFg4NiAmJiAhQ1M1NTM1X0dQSU8KIAloZWxwCiAJICBUaGUgQU1EIENTNTUzNSBhbmQgQ1M1NTM2IHNvdXRoYnJpZGdlcyBzdXBwb3J0IDI4IEdQSU8gcGlucyB0aGF0CiAJICBjYW4gYmUgdXNlZCBmb3IgcXVpdGUgYSBudW1iZXIgb2YgdGhpbmdzLiAgVGhlIENTNTUzNS82IGlzIGZvdW5kIG9uCkBAIC0zMzMsNiArMzMzLDE1IEBACiAJICB3aGljaCBpcyBhbiBJT0goSW5wdXQvT3V0cHV0IEh1YikgZm9yIHg4NiBlbWJlZGRlZCBwcm9jZXNzb3IuCiAJICBUaGlzIGRyaXZlciBjYW4gYWNjZXNzIFBDSCBHUElPIGRldmljZS4KIAorY29uZmlnIEdQSU9fTUxfSU9ICisJdHJpc3RhdGUgIk9LSSBTRU1JQ09ORFVDVE9SIE1MNzIxMyBJT0ggR1BJTyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJCisJaGVscAorCSAgTUw3MjEzIGlzIGNvbXBhbmlvbiBjaGlwIGZvciBJbnRlbCBBdG9tIEU2eHggc2VyaWVzLgorCSAgVGhpcyBkcml2ZXIgY2FuIGJlIHVzZWQgZm9yIE9LSSBTRU1JQ09ORFVDVE9SIE1MNzIxMyBJT0goSW5wdXQvT3V0cHV0CisJICBIdWIpIHdoaWNoIGlzIGZvciBJVkkoSW4tVmVoaWNsZSBJbmZvdGFpbm1lbnQpIHVzZS4KKwkgIFRoaXMgZHJpdmVyIGNhbiBhY2Nlc3MgdGhlIElPSCdzIEdQSU8gZGV2aWNlLgorCiBjb25maWcgR1BJT19USU1CRVJEQUxFCiAJYm9vbCAiU3VwcG9ydCBmb3IgdGltYmVyZGFsZSBHUElPIElQIgogCWRlcGVuZHMgb24gTUZEX1RJTUJFUkRBTEUgJiYgR1BJT0xJQiAmJiBIQVNfSU9NRU0KQEAgLTM0Miw2ICszNTEsNyBAQAogY29uZmlnIEdQSU9fUkRDMzIxWAogCXRyaXN0YXRlICJSREMgUi0zMjF4IEdQSU8gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBHUElPTElCCisJc2VsZWN0IE1GRF9TVVBQT1JUCiAJc2VsZWN0IE1GRF9DT1JFCiAJc2VsZWN0IE1GRF9SREMzMjFYCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL01ha2VmaWxlIGIvZHJpdmVycy9ncGlvL01ha2VmaWxlCmluZGV4IDM5YmZkN2EuLjMzNTFjZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKQEAgLTQxLDMgKzQxLDQgQEAKIG9iai0kKENPTkZJR19HUElPX0pBTlpfVFRMKQkrPSBqYW56LXR0bC5vCiBvYmotJChDT05GSUdfR1BJT19TWDE1MFgpCSs9IHN4MTUweC5vCiBvYmotJChDT05GSUdfR1BJT19WWDg1NSkJKz0gdng4NTVfZ3Bpby5vCitvYmotJChDT05GSUdfR1BJT19NTF9JT0gpCSs9IG1sX2lvaF9ncGlvLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9hZHA1NTg4LWdwaW8uYyBiL2RyaXZlcnMvZ3Bpby9hZHA1NTg4LWdwaW8uYwppbmRleCAwODcxZjc4Li4zM2ZjNjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vYWRwNTU4OC1ncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL2FkcDU1ODgtZ3Bpby5jCkBAIC0xNDYsOSArMTQ2LDEwIEBACiAJcmV0dXJuIGRldi0+aXJxX2Jhc2UgKyBvZmY7CiB9CiAKLXN0YXRpYyB2b2lkIGFkcDU1ODhfaXJxX2J1c19sb2NrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBhZHA1NTg4X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGFkcDU1ODhfZ3BpbyAqZGV2ID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlzdHJ1Y3QgYWRwNTU4OF9ncGlvICpkZXYgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwogCW11dGV4X2xvY2soJmRldi0+aXJxX2xvY2spOwogfQogCkBAIC0xNjAsOSArMTYxLDkgQEAKICAgKiBhbmQgdW5sb2NrcyB0aGUgYnVzLgogICAqLwogCi1zdGF0aWMgdm9pZCBhZHA1NTg4X2lycV9idXNfc3luY191bmxvY2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGFkcDU1ODhfaXJxX2J1c19zeW5jX3VubG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGFkcDU1ODhfZ3BpbyAqZGV2ID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlzdHJ1Y3QgYWRwNTU4OF9ncGlvICpkZXYgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPD0gQURQNTU4OF9CQU5LKEFEUDU1ODhfTUFYR1BJTyk7IGkrKykKQEAgLTE3NSwzMSArMTc2LDMxIEBACiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmlycV9sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgYWRwNTU4OF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgYWRwNTU4OF9pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGFkcDU1ODhfZ3BpbyAqZGV2ID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQl1bnNpZ25lZCBncGlvID0gaXJxIC0gZGV2LT5pcnFfYmFzZTsKKwlzdHJ1Y3QgYWRwNTU4OF9ncGlvICpkZXYgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1bnNpZ25lZCBncGlvID0gZC0+aXJxIC0gZGV2LT5pcnFfYmFzZTsKIAogCWRldi0+aXJxX21hc2tbQURQNTU4OF9CQU5LKGdwaW8pXSAmPSB+QURQNTU4OF9CSVQoZ3Bpbyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkcDU1ODhfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgYWRwNTU4OF9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgYWRwNTU4OF9ncGlvICpkZXYgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCXVuc2lnbmVkIGdwaW8gPSBpcnEgLSBkZXYtPmlycV9iYXNlOworCXN0cnVjdCBhZHA1NTg4X2dwaW8gKmRldiA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXVuc2lnbmVkIGdwaW8gPSBkLT5pcnEgLSBkZXYtPmlycV9iYXNlOwogCiAJZGV2LT5pcnFfbWFza1tBRFA1NTg4X0JBTksoZ3BpbyldIHw9IEFEUDU1ODhfQklUKGdwaW8pOwogfQogCi1zdGF0aWMgaW50IGFkcDU1ODhfaXJxX3NldF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQorc3RhdGljIGludCBhZHA1NTg4X2lycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCB0eXBlKQogewotCXN0cnVjdCBhZHA1NTg4X2dwaW8gKmRldiA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JdWludDE2X3QgZ3BpbyA9IGlycSAtIGRldi0+aXJxX2Jhc2U7CisJc3RydWN0IGFkcDU1ODhfZ3BpbyAqZGV2ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdWludDE2X3QgZ3BpbyA9IGQtPmlycSAtIGRldi0+aXJxX2Jhc2U7CiAJdW5zaWduZWQgYmFuaywgYml0OwogCiAJaWYgKCh0eXBlICYgSVJRX1RZUEVfRURHRV9CT1RIKSkgewogCQlkZXZfZXJyKCZkZXYtPmNsaWVudC0+ZGV2LCAiaXJxICVkOiB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLAotCQkJaXJxLCB0eXBlKTsKKwkJCWQtPmlycSwgdHlwZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjIyLDExICsyMjMsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBhZHA1NTg4X2lycV9jaGlwID0gewogCS5uYW1lCQkJPSAiYWRwNTU4OCIsCi0JLm1hc2sJCQk9IGFkcDU1ODhfaXJxX21hc2ssCi0JLnVubWFzawkJCT0gYWRwNTU4OF9pcnFfdW5tYXNrLAotCS5idXNfbG9jawkJPSBhZHA1NTg4X2lycV9idXNfbG9jaywKLQkuYnVzX3N5bmNfdW5sb2NrCT0gYWRwNTU4OF9pcnFfYnVzX3N5bmNfdW5sb2NrLAotCS5zZXRfdHlwZQkJPSBhZHA1NTg4X2lycV9zZXRfdHlwZSwKKwkuaXJxX21hc2sJCT0gYWRwNTU4OF9pcnFfbWFzaywKKwkuaXJxX3VubWFzawkJPSBhZHA1NTg4X2lycV91bm1hc2ssCisJLmlycV9idXNfbG9jawkJPSBhZHA1NTg4X2lycV9idXNfbG9jaywKKwkuaXJxX2J1c19zeW5jX3VubG9jawk9IGFkcDU1ODhfaXJxX2J1c19zeW5jX3VubG9jaywKKwkuaXJxX3NldF90eXBlCQk9IGFkcDU1ODhfaXJxX3NldF90eXBlLAogfTsKIAogc3RhdGljIGludCBhZHA1NTg4X2dwaW9fcmVhZF9pbnRzdGF0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICpidWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vY3M1NTM1LWdwaW8uYyBiL2RyaXZlcnMvZ3Bpby9jczU1MzUtZ3Bpby5jCmluZGV4IGQzZTU1YTAuLjgxNWQ5OGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vY3M1NTM1LWdwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vY3M1NTM1LWdwaW8uYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2NzNTUzNS5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAiY3M1NTM1LWdwaW8iCiAjZGVmaW5lIEdQSU9fQkFSIDEKQEAgLTE0NCw2ICsxNDUsNTcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNzNTUzNV9ncGlvX2lzc2V0KTsKIAoraW50IGNzNTUzNV9ncGlvX3NldF9pcnEodW5zaWduZWQgZ3JvdXAsIHVuc2lnbmVkIGlycSkKK3sKKwl1aW50MzJfdCBsbywgaGk7CisKKwlpZiAoZ3JvdXAgPiA3IHx8IGlycSA+IDE1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJkbXNyKE1TUl9QSUNfWlNFTF9ISUdILCBsbywgaGkpOworCisJbG8gJj0gfigweEYgPDwgKGdyb3VwICogNCkpOworCWxvIHw9IChpcnEgJiAweEYpIDw8IChncm91cCAqIDQpOworCisJd3Jtc3IoTVNSX1BJQ19aU0VMX0hJR0gsIGxvLCBoaSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjczU1MzVfZ3Bpb19zZXRfaXJxKTsKKwordm9pZCBjczU1MzVfZ3Bpb19zZXR1cF9ldmVudCh1bnNpZ25lZCBvZmZzZXQsIGludCBwYWlyLCBpbnQgcG1lKQoreworCXN0cnVjdCBjczU1MzVfZ3Bpb19jaGlwICpjaGlwID0gJmNzNTUzNV9ncGlvX2NoaXA7CisJdWludDMyX3Qgc2hpZnQgPSAob2Zmc2V0ICUgOCkgKiA0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdWludDMyX3QgdmFsOworCisJaWYgKG9mZnNldCA+PSAyNCkKKwkJb2Zmc2V0ID0gR1BJT19NQVBfVzsKKwllbHNlIGlmIChvZmZzZXQgPj0gMTYpCisJCW9mZnNldCA9IEdQSU9fTUFQX1o7CisJZWxzZSBpZiAob2Zmc2V0ID49IDgpCisJCW9mZnNldCA9IEdQSU9fTUFQX1k7CisJZWxzZQorCQlvZmZzZXQgPSBHUElPX01BUF9YOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKwl2YWwgPSBpbmwoY2hpcC0+YmFzZSArIG9mZnNldCk7CisKKwkvKiBDbGVhciB3aGF0ZXZlciB3YXMgdGhlcmUgYmVmb3JlICovCisJdmFsICY9IH4oMHhGIDw8IHNoaWZ0KTsKKworCS8qIFNldCB0aGUgbmV3IHZhbHVlICovCisJdmFsIHw9ICgocGFpciAmIDcpIDw8IHNoaWZ0KTsKKworCS8qIFNldCB0aGUgUE1FIGJpdCBpZiB0aGlzIGlzIGEgUE1FIGV2ZW50ICovCisJaWYgKHBtZSkKKwkJdmFsIHw9ICgxIDw8IChzaGlmdCArIDMpKTsKKworCW91dGwodmFsLCBjaGlwLT5iYXNlICsgb2Zmc2V0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjczU1MzVfZ3Bpb19zZXR1cF9ldmVudCk7CisKIC8qCiAgKiBHZW5lcmljIGdwaW9fY2hpcCBBUEkgc3VwcG9ydC4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby9sYW5nd2VsbF9ncGlvLmMKaW5kZXggNjRkYjlkYy4uZDgxY2M3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vbGFuZ3dlbGxfZ3Bpby5jCkBAIC0xMzQsMTAgKzEzNCwxMCBAQAogCXJldHVybiBsbnctPmlycV9iYXNlICsgb2Zmc2V0OwogfQogCi1zdGF0aWMgaW50IGxud19pcnFfdHlwZSh1bnNpZ25lZCBpcnEsIHVuc2lnbmVkIHR5cGUpCitzdGF0aWMgaW50IGxud19pcnFfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIHR5cGUpCiB7Ci0Jc3RydWN0IGxud19ncGlvICpsbncgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCXUzMiBncGlvID0gaXJxIC0gbG53LT5pcnFfYmFzZTsKKwlzdHJ1Y3QgbG53X2dwaW8gKmxudyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXUzMiBncGlvID0gZC0+aXJxIC0gbG53LT5pcnFfYmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB2YWx1ZTsKIAl2b2lkIF9faW9tZW0gKmdyZXIgPSBncGlvX3JlZygmbG53LT5jaGlwLCBncGlvLCBHUkVSKTsKQEAgLTE2MiwxOSArMTYyLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGxud19pcnFfdW5tYXNrKHVuc2lnbmVkIGlycSkKK3N0YXRpYyB2b2lkIGxud19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIH0KIAotc3RhdGljIHZvaWQgbG53X2lycV9tYXNrKHVuc2lnbmVkIGlycSkKK3N0YXRpYyB2b2lkIGxud19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbG53X2lycWNoaXAgPSB7CiAJLm5hbWUJCT0gIkxOVy1HUElPIiwKLQkubWFzawkJPSBsbndfaXJxX21hc2ssCi0JLnVubWFzawkJPSBsbndfaXJxX3VubWFzaywKLQkuc2V0X3R5cGUJPSBsbndfaXJxX3R5cGUsCisJLmlycV9tYXNrCT0gbG53X2lycV9tYXNrLAorCS5pcnFfdW5tYXNrCT0gbG53X2lycV91bm1hc2ssCisJLmlycV9zZXRfdHlwZQk9IGxud19pcnFfdHlwZSwKIH07CiAKIHN0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShsbndfZ3Bpb19pZHMpID0geyAgIC8qIHBpbiBudW1iZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9tYXg3MzJ4LmMgYi9kcml2ZXJzL2dwaW8vbWF4NzMyeC5jCmluZGV4IDljYWQ2MGYuLjllMWQwMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9tYXg3MzJ4LmMKKysrIGIvZHJpdmVycy9ncGlvL21heDczMnguYwpAQCAtMzI3LDQwICszMjcsNDAgQEAKIAlyZXR1cm4gY2hpcC0+aXJxX2Jhc2UgKyBvZmY7CiB9CiAKLXN0YXRpYyB2b2lkIG1heDczMnhfaXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG1heDczMnhfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAotCWNoaXAtPmlycV9tYXNrX2N1ciAmPSB+KDEgPDwgKGlycSAtIGNoaXAtPmlycV9iYXNlKSk7CisJY2hpcC0+aXJxX21hc2tfY3VyICY9IH4oMSA8PCAoZC0+aXJxIC0gY2hpcC0+aXJxX2Jhc2UpKTsKIH0KIAotc3RhdGljIHZvaWQgbWF4NzMyeF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtYXg3MzJ4X2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAotCWNoaXAtPmlycV9tYXNrX2N1ciB8PSAxIDw8IChpcnEgLSBjaGlwLT5pcnFfYmFzZSk7CisJY2hpcC0+aXJxX21hc2tfY3VyIHw9IDEgPDwgKGQtPmlycSAtIGNoaXAtPmlycV9iYXNlKTsKIH0KIAotc3RhdGljIHZvaWQgbWF4NzMyeF9pcnFfYnVzX2xvY2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG1heDczMnhfaXJxX2J1c19sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgbWF4NzMyeF9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlzdHJ1Y3QgbWF4NzMyeF9jaGlwICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAltdXRleF9sb2NrKCZjaGlwLT5pcnFfbG9jayk7CiAJY2hpcC0+aXJxX21hc2tfY3VyID0gY2hpcC0+aXJxX21hc2s7CiB9CiAKLXN0YXRpYyB2b2lkIG1heDczMnhfaXJxX2J1c19zeW5jX3VubG9jayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbWF4NzMyeF9pcnFfYnVzX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgbWF4NzMyeF9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlzdHJ1Y3QgbWF4NzMyeF9jaGlwICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAltYXg3MzJ4X2lycV91cGRhdGVfbWFzayhjaGlwKTsKIAltdXRleF91bmxvY2soJmNoaXAtPmlycV9sb2NrKTsKIH0KIAotc3RhdGljIGludCBtYXg3MzJ4X2lycV9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3N0YXRpYyBpbnQgbWF4NzMyeF9pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3QgbWF4NzMyeF9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQl1aW50MTZfdCBvZmYgPSBpcnEgLSBjaGlwLT5pcnFfYmFzZTsKKwlzdHJ1Y3QgbWF4NzMyeF9jaGlwICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdWludDE2X3Qgb2ZmID0gZC0+aXJxIC0gY2hpcC0+aXJxX2Jhc2U7CiAJdWludDE2X3QgbWFzayA9IDEgPDwgb2ZmOwogCiAJaWYgKCEobWFzayAmIGNoaXAtPmRpcl9pbnB1dCkpIHsKQEAgLTM3MSw3ICszNzEsNyBAQAogCiAJaWYgKCEodHlwZSAmIElSUV9UWVBFX0VER0VfQk9USCkpIHsKIAkJZGV2X2VycigmY2hpcC0+Y2xpZW50LT5kZXYsICJpcnEgJWQ6IHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCi0JCQlpcnEsIHR5cGUpOworCQkJZC0+aXJxLCB0eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zOTAsMTEgKzM5MCwxMSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1heDczMnhfaXJxX2NoaXAgPSB7CiAJLm5hbWUJCQk9ICJtYXg3MzJ4IiwKLQkubWFzawkJCT0gbWF4NzMyeF9pcnFfbWFzaywKLQkudW5tYXNrCQkJPSBtYXg3MzJ4X2lycV91bm1hc2ssCi0JLmJ1c19sb2NrCQk9IG1heDczMnhfaXJxX2J1c19sb2NrLAotCS5idXNfc3luY191bmxvY2sJPSBtYXg3MzJ4X2lycV9idXNfc3luY191bmxvY2ssCi0JLnNldF90eXBlCQk9IG1heDczMnhfaXJxX3NldF90eXBlLAorCS5pcnFfbWFzawkJPSBtYXg3MzJ4X2lycV9tYXNrLAorCS5pcnFfdW5tYXNrCQk9IG1heDczMnhfaXJxX3VubWFzaywKKwkuaXJxX2J1c19sb2NrCQk9IG1heDczMnhfaXJxX2J1c19sb2NrLAorCS5pcnFfYnVzX3N5bmNfdW5sb2NrCT0gbWF4NzMyeF9pcnFfYnVzX3N5bmNfdW5sb2NrLAorCS5pcnFfc2V0X3R5cGUJCT0gbWF4NzMyeF9pcnFfc2V0X3R5cGUsCiB9OwogCiBzdGF0aWMgdWludDhfdCBtYXg3MzJ4X2lycV9wZW5kaW5nKHN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vbWxfaW9oX2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby9tbF9pb2hfZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYWQ4ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwaW8vbWxfaW9oX2dwaW8uYwpAQCAtMCwwICsxLDM1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBPS0kgU0VNSUNPTkRVQ1RPUiBDby4sIExURC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUk9ITSAgICAgICAgICAgICAweDEwREIKKworc3RydWN0IGlvaF9yZWdfY29tbiB7CisJdTMyCWllbjsKKwl1MzIJaXN0YXR1czsKKwl1MzIJaWRpc3A7CisJdTMyCWljbHI7CisJdTMyCWltYXNrOworCXUzMglpbWFza2NscjsKKwl1MzIJcG87CisJdTMyCXBpOworCXUzMglwbTsKKwl1MzIJaW1fMDsKKwl1MzIJaW1fMTsKKwl1MzIJcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgaW9oX3JlZ3MgeworCXN0cnVjdCBpb2hfcmVnX2NvbW4gcmVnc1s4XTsKKwl1MzIgcmVzZXJ2ZTFbMTZdOworCXUzMiBpb2hfc2VsX3JlZ1s0XTsKKwl1MzIgcmVzZXJ2ZTJbMTFdOworCXUzMiBzcnN0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgaW9oX2dwaW9fcmVnX2RhdGEgLSBUaGUgcmVnaXN0ZXIgc3RvcmUgZGF0YS4KKyAqIEBwb19yZWc6CVRvIHN0b3JlIGNvbnRlbnRzIG9mIFBPIHJlZ2lzdGVyLgorICogQHBtX3JlZzoJVG8gc3RvcmUgY29udGVudHMgb2YgUE0gcmVnaXN0ZXIuCisgKi8KK3N0cnVjdCBpb2hfZ3Bpb19yZWdfZGF0YSB7CisJdTMyIHBvX3JlZzsKKwl1MzIgcG1fcmVnOworfTsKKworLyoqCisgKiBzdHJ1Y3QgaW9oX2dwaW8gLSBHUElPIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAYmFzZToJCQlQQ0kgYmFzZSBhZGRyZXNzIG9mIE1lbW9yeSBtYXBwZWQgSS9PIHJlZ2lzdGVyLgorICogQHJlZzoJCQlNZW1vcnkgbWFwcGVkIElPSCBHUElPIHJlZ2lzdGVyIGxpc3QuCisgKiBAZGV2OgkJCVBvaW50ZXIgdG8gZGV2aWNlIHN0cnVjdHVyZS4KKyAqIEBncGlvOgkJCURhdGEgZm9yIEdQSU8gaW5mcmFzdHJ1Y3R1cmUuCisgKiBAaW9oX2dwaW9fcmVnOgkJTWVtb3J5IG1hcHBlZCBSZWdpc3RlciBkYXRhIGlzIHNhdmVkIGhlcmUKKyAqCQkJCXdoZW4gc3VzcGVuZC4KKyAqIEBjaDoJCQkJSW5kaWNhdGUgR1BJTyBjaGFubmVsCisgKi8KK3N0cnVjdCBpb2hfZ3BpbyB7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCBpb2hfcmVncyBfX2lvbWVtICpyZWc7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBncGlvX2NoaXAgZ3BpbzsKKwlzdHJ1Y3QgaW9oX2dwaW9fcmVnX2RhdGEgaW9oX2dwaW9fcmVnOworCXN0cnVjdCBtdXRleCBsb2NrOworCWludCBjaDsKK307CisKK3N0YXRpYyBjb25zdCBpbnQgbnVtX3BvcnRzW10gPSB7NiwgMTIsIDE2LCAxNiwgMTUsIDE2LCAxNiwgMTJ9OworCitzdGF0aWMgdm9pZCBpb2hfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ3BpbywgdW5zaWduZWQgbnIsIGludCB2YWwpCit7CisJdTMyIHJlZ192YWw7CisJc3RydWN0IGlvaF9ncGlvICpjaGlwID0JY29udGFpbmVyX29mKGdwaW8sIHN0cnVjdCBpb2hfZ3BpbywgZ3Bpbyk7CisKKwltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKKwlyZWdfdmFsID0gaW9yZWFkMzIoJmNoaXAtPnJlZy0+cmVnc1tjaGlwLT5jaF0ucG8pOworCWlmICh2YWwpCisJCXJlZ192YWwgfD0gKDEgPDwgbnIpOworCWVsc2UKKwkJcmVnX3ZhbCAmPSB+KDEgPDwgbnIpOworCisJaW93cml0ZTMyKHJlZ192YWwsICZjaGlwLT5yZWctPnJlZ3NbY2hpcC0+Y2hdLnBvKTsKKwltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOworfQorCitzdGF0aWMgaW50IGlvaF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpncGlvLCB1bnNpZ25lZCBucikKK3sKKwlzdHJ1Y3QgaW9oX2dwaW8gKmNoaXAgPQljb250YWluZXJfb2YoZ3Bpbywgc3RydWN0IGlvaF9ncGlvLCBncGlvKTsKKworCXJldHVybiBpb3JlYWQzMigmY2hpcC0+cmVnLT5yZWdzW2NoaXAtPmNoXS5waSkgJiAoMSA8PCBucik7Cit9CisKK3N0YXRpYyBpbnQgaW9oX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpncGlvLCB1bnNpZ25lZCBuciwKKwkJCQkgICAgIGludCB2YWwpCit7CisJc3RydWN0IGlvaF9ncGlvICpjaGlwID0JY29udGFpbmVyX29mKGdwaW8sIHN0cnVjdCBpb2hfZ3BpbywgZ3Bpbyk7CisJdTMyIHBtOworCXUzMiByZWdfdmFsOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7CisJcG0gPSBpb3JlYWQzMigmY2hpcC0+cmVnLT5yZWdzW2NoaXAtPmNoXS5wbSkgJgorCQkJCQkoKDEgPDwgbnVtX3BvcnRzW2NoaXAtPmNoXSkgLSAxKTsKKwlwbSB8PSAoMSA8PCBucik7CisJaW93cml0ZTMyKHBtLCAmY2hpcC0+cmVnLT5yZWdzW2NoaXAtPmNoXS5wbSk7CisKKwlyZWdfdmFsID0gaW9yZWFkMzIoJmNoaXAtPnJlZy0+cmVnc1tjaGlwLT5jaF0ucG8pOworCWlmICh2YWwpCisJCXJlZ192YWwgfD0gKDEgPDwgbnIpOworCWVsc2UKKwkJcmVnX3ZhbCAmPSB+KDEgPDwgbnIpOworCisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlvaF9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpncGlvLCB1bnNpZ25lZCBucikKK3sKKwlzdHJ1Y3QgaW9oX2dwaW8gKmNoaXAgPQljb250YWluZXJfb2YoZ3Bpbywgc3RydWN0IGlvaF9ncGlvLCBncGlvKTsKKwl1MzIgcG07CisKKwltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKKwlwbSA9IGlvcmVhZDMyKCZjaGlwLT5yZWctPnJlZ3NbY2hpcC0+Y2hdLnBtKSAmCisJCQkJKCgxIDw8IG51bV9wb3J0c1tjaGlwLT5jaF0pIC0gMSk7CisJcG0gJj0gfigxIDw8IG5yKTsKKwlpb3dyaXRlMzIocG0sICZjaGlwLT5yZWctPnJlZ3NbY2hpcC0+Y2hdLnBtKTsKKwltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTYXZlIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gYW5kIGRpc2FibGUgaW50ZXJydXB0cy4KKyAqLworc3RhdGljIHZvaWQgaW9oX2dwaW9fc2F2ZV9yZWdfY29uZihzdHJ1Y3QgaW9oX2dwaW8gKmNoaXApCit7CisJY2hpcC0+aW9oX2dwaW9fcmVnLnBvX3JlZyA9IGlvcmVhZDMyKCZjaGlwLT5yZWctPnJlZ3NbY2hpcC0+Y2hdLnBvKTsKKwljaGlwLT5pb2hfZ3Bpb19yZWcucG1fcmVnID0gaW9yZWFkMzIoJmNoaXAtPnJlZy0+cmVnc1tjaGlwLT5jaF0ucG0pOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXN0b3JlcyB0aGUgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiBvZiB0aGUgR1BJTyBkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIGlvaF9ncGlvX3Jlc3RvcmVfcmVnX2NvbmYoc3RydWN0IGlvaF9ncGlvICpjaGlwKQoreworCS8qIHRvIHN0b3JlIGNvbnRlbnRzIG9mIFBPIHJlZ2lzdGVyICovCisJaW93cml0ZTMyKGNoaXAtPmlvaF9ncGlvX3JlZy5wb19yZWcsICZjaGlwLT5yZWctPnJlZ3NbY2hpcC0+Y2hdLnBvKTsKKwkvKiB0byBzdG9yZSBjb250ZW50cyBvZiBQTSByZWdpc3RlciAqLworCWlvd3JpdGUzMihjaGlwLT5pb2hfZ3Bpb19yZWcucG1fcmVnLCAmY2hpcC0+cmVnLT5yZWdzW2NoaXAtPmNoXS5wbSk7Cit9CisKK3N0YXRpYyB2b2lkIGlvaF9ncGlvX3NldHVwKHN0cnVjdCBpb2hfZ3BpbyAqY2hpcCwgaW50IG51bV9wb3J0KQoreworCXN0cnVjdCBncGlvX2NoaXAgKmdwaW8gPSAmY2hpcC0+Z3BpbzsKKworCWdwaW8tPmxhYmVsID0gZGV2X25hbWUoY2hpcC0+ZGV2KTsKKwlncGlvLT5vd25lciA9IFRISVNfTU9EVUxFOworCWdwaW8tPmRpcmVjdGlvbl9pbnB1dCA9IGlvaF9ncGlvX2RpcmVjdGlvbl9pbnB1dDsKKwlncGlvLT5nZXQgPSBpb2hfZ3Bpb19nZXQ7CisJZ3Bpby0+ZGlyZWN0aW9uX291dHB1dCA9IGlvaF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CisJZ3Bpby0+c2V0ID0gaW9oX2dwaW9fc2V0OworCWdwaW8tPmRiZ19zaG93ID0gTlVMTDsKKwlncGlvLT5iYXNlID0gLTE7CisJZ3Bpby0+bmdwaW8gPSBudW1fcG9ydDsKKwlncGlvLT5jYW5fc2xlZXAgPSAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpb2hfZ3Bpb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJaW50IGk7CisJc3RydWN0IGlvaF9ncGlvICpjaGlwOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwl2b2lkIF9faW9tZW0gKmNoaXBfc2F2ZTsKKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXMgOiBwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQiLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX3BjaV9lbmFibGU7CisJfQorCisJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBLQlVJTERfTU9ETkFNRSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfcmVxdWVzdF9yZWdpb25zIGZhaWxlZC0lZCIsIHJldCk7CisJCWdvdG8gZXJyX3JlcXVlc3RfcmVnaW9uczsKKwl9CisKKwliYXNlID0gcGNpX2lvbWFwKHBkZXYsIDEsIDApOworCWlmIChiYXNlID09IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXMgOiBwY2lfaW9tYXAgZmFpbGVkIiwgX19mdW5jX18pOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9pb21hcDsKKwl9CisKKwljaGlwX3NhdmUgPSBremFsbG9jKHNpemVvZigqY2hpcCkgKiA4LCBHRlBfS0VSTkVMKTsKKwlpZiAoY2hpcF9zYXZlID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXMgOiBremFsbG9jIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfa3phbGxvYzsKKwl9CisKKwljaGlwID0gY2hpcF9zYXZlOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyssIGNoaXArKykgeworCQljaGlwLT5kZXYgPSAmcGRldi0+ZGV2OworCQljaGlwLT5iYXNlID0gYmFzZTsKKwkJY2hpcC0+cmVnID0gY2hpcC0+YmFzZTsKKwkJY2hpcC0+Y2ggPSBpOworCQltdXRleF9pbml0KCZjaGlwLT5sb2NrKTsKKwkJaW9oX2dwaW9fc2V0dXAoY2hpcCwgbnVtX3BvcnRzW2ldKTsKKwkJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZjaGlwLT5ncGlvKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiSU9IIGdwaW86IEZhaWxlZCB0byByZWdpc3RlciBHUElPXG4iKTsKKwkJCWdvdG8gZXJyX2dwaW9jaGlwX2FkZDsKKwkJfQorCX0KKworCWNoaXAgPSBjaGlwX3NhdmU7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGNoaXApOworCisJcmV0dXJuIDA7CisKK2Vycl9ncGlvY2hpcF9hZGQ6CisJZm9yICg7IGkgIT0gMDsgaS0tKSB7CisJCWNoaXAtLTsKKwkJcmV0ID0gZ3Bpb2NoaXBfcmVtb3ZlKCZjaGlwLT5ncGlvKTsKKwkJaWYgKHJldCkKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCBncGlvY2hpcF9yZW1vdmUoJWQpXG4iLCBpKTsKKwl9CisJa2ZyZWUoY2hpcF9zYXZlKTsKKworZXJyX2t6YWxsb2M6CisJcGNpX2lvdW5tYXAocGRldiwgYmFzZSk7CisKK2Vycl9pb21hcDoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCitlcnJfcmVxdWVzdF9yZWdpb25zOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworZXJyX3BjaV9lbmFibGU6CisKKwlkZXZfZXJyKCZwZGV2LT5kZXYsICIlcyBGYWlsZWQgcmV0dXJucyAlZFxuIiwgX19mdW5jX18sIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGlvaF9ncGlvX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgZXJyOworCWludCBpOworCXN0cnVjdCBpb2hfZ3BpbyAqY2hpcCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl2b2lkIF9faW9tZW0gKmNoaXBfc2F2ZTsKKworCWNoaXBfc2F2ZSA9IGNoaXA7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKywgY2hpcCsrKSB7CisJCWVyciA9IGdwaW9jaGlwX3JlbW92ZSgmY2hpcC0+Z3Bpbyk7CisJCWlmIChlcnIpCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgZ3Bpb2NoaXBfcmVtb3ZlXG4iKTsKKwl9CisKKwljaGlwID0gY2hpcF9zYXZlOworCXBjaV9pb3VubWFwKHBkZXYsIGNoaXAtPmJhc2UpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCWtmcmVlKGNoaXApOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGlvaF9ncGlvX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzMzIgcmV0OworCXN0cnVjdCBpb2hfZ3BpbyAqY2hpcCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlvaF9ncGlvX3NhdmVfcmVnX2NvbmYoY2hpcCk7CisJaW9oX2dwaW9fcmVzdG9yZV9yZWdfY29uZihjaGlwKTsKKworCXJldCA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpX3NhdmVfc3RhdGUgRmFpbGVkLSVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXJldCA9IHBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDAsIDEpOworCWlmIChyZXQpCisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaV9lbmFibGVfd2FrZSBGYWlsZWQgLSVkXG4iLCByZXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW9oX2dwaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXMzMiByZXQ7CisJc3RydWN0IGlvaF9ncGlvICpjaGlwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0ID0gcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EMCwgMCk7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfZW5hYmxlX2RldmljZSBGYWlsZWQtJWQgIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwlpb3dyaXRlMzIoMHgwMSwgJmNoaXAtPnJlZy0+c3JzdCk7CisJaW93cml0ZTMyKDB4MDAsICZjaGlwLT5yZWctPnNyc3QpOworCWlvaF9ncGlvX3Jlc3RvcmVfcmVnX2NvbmYoY2hpcCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGlvaF9ncGlvX3N1c3BlbmQgTlVMTAorI2RlZmluZSBpb2hfZ3Bpb19yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShpb2hfZ3Bpb19wY2lkZXZfaWQpID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JPSE0sIDB4ODAyRSkgfSwKKwl7IDAsIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpb2hfZ3Bpb19kcml2ZXIgPSB7CisJLm5hbWUgPSAibWxfaW9oX2dwaW8iLAorCS5pZF90YWJsZSA9IGlvaF9ncGlvX3BjaWRldl9pZCwKKwkucHJvYmUgPSBpb2hfZ3Bpb19wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoaW9oX2dwaW9fcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IGlvaF9ncGlvX3N1c3BlbmQsCisJLnJlc3VtZSA9IGlvaF9ncGlvX3Jlc3VtZQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW9oX2dwaW9fcGNpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaW9oX2dwaW9fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGlvaF9ncGlvX3BjaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGlvaF9ncGlvX3BjaV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpb2hfZ3Bpb19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoaW9oX2dwaW9fcGNpX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIk9LSSBTRU1JQ09ORFVDVE9SIE1MLUlPSCBzZXJpZXMgR1BJTyBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMgYi9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jCmluZGV4IDUwMTg2NjYuLmEyNjE5NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKKysrIGIvZHJpdmVycy9ncGlvL3BjYTk1M3guYwpAQCAtMjI4LDMwICsyMjgsMzAgQEAKIAlyZXR1cm4gY2hpcC0+aXJxX2Jhc2UgKyBvZmY7CiB9CiAKLXN0YXRpYyB2b2lkIHBjYTk1M3hfaXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHBjYTk1M3hfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAotCWNoaXAtPmlycV9tYXNrICY9IH4oMSA8PCAoaXJxIC0gY2hpcC0+aXJxX2Jhc2UpKTsKKwljaGlwLT5pcnFfbWFzayAmPSB+KDEgPDwgKGQtPmlycSAtIGNoaXAtPmlycV9iYXNlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBjYTk1M3hfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgcGNhOTUzeF9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKLQljaGlwLT5pcnFfbWFzayB8PSAxIDw8IChpcnEgLSBjaGlwLT5pcnFfYmFzZSk7CisJY2hpcC0+aXJxX21hc2sgfD0gMSA8PCAoZC0+aXJxIC0gY2hpcC0+aXJxX2Jhc2UpOwogfQogCi1zdGF0aWMgdm9pZCBwY2E5NTN4X2lycV9idXNfbG9jayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgcGNhOTUzeF9pcnFfYnVzX2xvY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAogCW11dGV4X2xvY2soJmNoaXAtPmlycV9sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgcGNhOTUzeF9pcnFfYnVzX3N5bmNfdW5sb2NrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBwY2E5NTN4X2lycV9idXNfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAl1aW50MTZfdCBuZXdfaXJxczsKIAl1aW50MTZfdCBsZXZlbDsKIApAQCAtMjY4LDE1ICsyNjgsMTUgQEAKIAltdXRleF91bmxvY2soJmNoaXAtPmlycV9sb2NrKTsKIH0KIAotc3RhdGljIGludCBwY2E5NTN4X2lycV9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3N0YXRpYyBpbnQgcGNhOTUzeF9pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQl1aW50MTZfdCBsZXZlbCA9IGlycSAtIGNoaXAtPmlycV9iYXNlOworCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1aW50MTZfdCBsZXZlbCA9IGQtPmlycSAtIGNoaXAtPmlycV9iYXNlOwogCXVpbnQxNl90IG1hc2sgPSAxIDw8IGxldmVsOwogCiAJaWYgKCEodHlwZSAmIElSUV9UWVBFX0VER0VfQk9USCkpIHsKIAkJZGV2X2VycigmY2hpcC0+Y2xpZW50LT5kZXYsICJpcnEgJWQ6IHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCi0JCQlpcnEsIHR5cGUpOworCQkJZC0+aXJxLCB0eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yOTUsMTEgKzI5NSwxMSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHBjYTk1M3hfaXJxX2NoaXAgPSB7CiAJLm5hbWUJCQk9ICJwY2E5NTN4IiwKLQkubWFzawkJCT0gcGNhOTUzeF9pcnFfbWFzaywKLQkudW5tYXNrCQkJPSBwY2E5NTN4X2lycV91bm1hc2ssCi0JLmJ1c19sb2NrCQk9IHBjYTk1M3hfaXJxX2J1c19sb2NrLAotCS5idXNfc3luY191bmxvY2sJPSBwY2E5NTN4X2lycV9idXNfc3luY191bmxvY2ssCi0JLnNldF90eXBlCQk9IHBjYTk1M3hfaXJxX3NldF90eXBlLAorCS5pcnFfbWFzawkJPSBwY2E5NTN4X2lycV9tYXNrLAorCS5pcnFfdW5tYXNrCQk9IHBjYTk1M3hfaXJxX3VubWFzaywKKwkuaXJxX2J1c19sb2NrCQk9IHBjYTk1M3hfaXJxX2J1c19sb2NrLAorCS5pcnFfYnVzX3N5bmNfdW5sb2NrCT0gcGNhOTUzeF9pcnFfYnVzX3N5bmNfdW5sb2NrLAorCS5pcnFfc2V0X3R5cGUJCT0gcGNhOTUzeF9pcnFfc2V0X3R5cGUsCiB9OwogCiBzdGF0aWMgdWludDE2X3QgcGNhOTUzeF9pcnFfcGVuZGluZyhzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BsMDYxLmMgYi9kcml2ZXJzL2dwaW8vcGwwNjEuYwppbmRleCA1MDA1OTkwLi4yOTc1ZDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vcGwwNjEuYworKysgYi9kcml2ZXJzL2dwaW8vcGwwNjEuYwpAQCAtMTI5LDEwICsxMjksMTAgQEAKIC8qCiAgKiBQTDA2MSBHUElPIElSUQogICovCi1zdGF0aWMgdm9pZCBwbDA2MV9pcnFfZGlzYWJsZSh1bnNpZ25lZCBpcnEpCitzdGF0aWMgdm9pZCBwbDA2MV9pcnFfZGlzYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHBsMDYxX2dwaW8gKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCWludCBvZmZzZXQgPSBpcnEgLSBjaGlwLT5pcnFfYmFzZTsKKwlzdHJ1Y3QgcGwwNjFfZ3BpbyAqY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCWludCBvZmZzZXQgPSBkLT5pcnEgLSBjaGlwLT5pcnFfYmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IGdwaW9pZTsKIApAQCAtMTQzLDEwICsxNDMsMTAgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5pcnFfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBwbDA2MV9pcnFfZW5hYmxlKHVuc2lnbmVkIGlycSkKK3N0YXRpYyB2b2lkIHBsMDYxX2lycV9lbmFibGUoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBwbDA2MV9ncGlvICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQlpbnQgb2Zmc2V0ID0gaXJxIC0gY2hpcC0+aXJxX2Jhc2U7CisJc3RydWN0IHBsMDYxX2dwaW8gKmNoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlpbnQgb2Zmc2V0ID0gZC0+aXJxIC0gY2hpcC0+aXJxX2Jhc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBncGlvaWU7CiAKQEAgLTE1NywxMCArMTU3LDEwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+aXJxX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBwbDA2MV9pcnFfdHlwZSh1bnNpZ25lZCBpcnEsIHVuc2lnbmVkIHRyaWdnZXIpCitzdGF0aWMgaW50IHBsMDYxX2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgdHJpZ2dlcikKIHsKLQlzdHJ1Y3QgcGwwNjFfZ3BpbyAqY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JaW50IG9mZnNldCA9IGlycSAtIGNoaXAtPmlycV9iYXNlOworCXN0cnVjdCBwbDA2MV9ncGlvICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJaW50IG9mZnNldCA9IGQtPmlycSAtIGNoaXAtPmlycV9iYXNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggZ3Bpb2lzLCBncGlvaWJlLCBncGlvaWV2OwogCkBAIC0yMDMsOSArMjAzLDkgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwbDA2MV9pcnFjaGlwID0gewogCS5uYW1lCQk9ICJHUElPIiwKLQkuZW5hYmxlCQk9IHBsMDYxX2lycV9lbmFibGUsCi0JLmRpc2FibGUJPSBwbDA2MV9pcnFfZGlzYWJsZSwKLQkuc2V0X3R5cGUJPSBwbDA2MV9pcnFfdHlwZSwKKwkuaXJxX2VuYWJsZQk9IHBsMDYxX2lycV9lbmFibGUsCisJLmlycV9kaXNhYmxlCT0gcGwwNjFfaXJxX2Rpc2FibGUsCisJLmlycV9zZXRfdHlwZQk9IHBsMDYxX2lycV90eXBlLAogfTsKIAogc3RhdGljIHZvaWQgcGwwNjFfaXJxX2hhbmRsZXIodW5zaWduZWQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCkBAIC0yMTQsNyArMjE0LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwdHI7CiAJc3RydWN0IHBsMDYxX2dwaW8gKmNoaXA7CiAKLQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKwlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfYWNrKCZkZXNjLT5pcnFfZGF0YSk7CiAJbGlzdF9mb3JfZWFjaChwdHIsIGNoaXBfbGlzdCkgewogCQl1bnNpZ25lZCBsb25nIHBlbmRpbmc7CiAJCWludCBvZmZzZXQ7CkBAIC0yMjksNyArMjI5LDcgQEAKIAkJZm9yX2VhY2hfc2V0X2JpdChvZmZzZXQsICZwZW5kaW5nLCBQTDA2MV9HUElPX05SKQogCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHBsMDYxX3RvX2lycSgmY2hpcC0+Z2MsIG9mZnNldCkpOwogCX0KLQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKKwlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfdW5tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CiB9CiAKIHN0YXRpYyBpbnQgcGwwNjFfcHJvYmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHN0cnVjdCBhbWJhX2lkICppZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9zdG1wZS1ncGlvLmMgYi9kcml2ZXJzL2dwaW8vc3RtcGUtZ3Bpby5jCmluZGV4IDdjOWU2YTAuLmViMjkwMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9zdG1wZS1ncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL3N0bXBlLWdwaW8uYwpAQCAtMTIyLDEwICsxMjIsMTAgQEAKIAkuY2FuX3NsZWVwCQk9IDEsCiB9OwogCi1zdGF0aWMgaW50IHN0bXBlX2dwaW9faXJxX3NldF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQorc3RhdGljIGludCBzdG1wZV9ncGlvX2lycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCB0eXBlKQogewotCXN0cnVjdCBzdG1wZV9ncGlvICpzdG1wZV9ncGlvID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQlpbnQgb2Zmc2V0ID0gaXJxIC0gc3RtcGVfZ3Bpby0+aXJxX2Jhc2U7CisJc3RydWN0IHN0bXBlX2dwaW8gKnN0bXBlX2dwaW8gPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlpbnQgb2Zmc2V0ID0gZC0+aXJxIC0gc3RtcGVfZ3Bpby0+aXJxX2Jhc2U7CiAJaW50IHJlZ29mZnNldCA9IG9mZnNldCAvIDg7CiAJaW50IG1hc2sgPSAxIDw8IChvZmZzZXQgJSA4KTsKIApAQCAtMTQ1LDE2ICsxNDUsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc3RtcGVfZ3Bpb19pcnFfbG9jayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgc3RtcGVfZ3Bpb19pcnFfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHN0bXBlX2dwaW8gKnN0bXBlX2dwaW8gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBzdG1wZV9ncGlvICpzdG1wZV9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAltdXRleF9sb2NrKCZzdG1wZV9ncGlvLT5pcnFfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0bXBlX2dwaW9faXJxX3N5bmNfdW5sb2NrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBzdG1wZV9ncGlvX2lycV9zeW5jX3VubG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHN0bXBlX2dwaW8gKnN0bXBlX2dwaW8gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBzdG1wZV9ncGlvICpzdG1wZV9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJc3RydWN0IHN0bXBlICpzdG1wZSA9IHN0bXBlX2dwaW8tPnN0bXBlOwogCWludCBudW1fYmFua3MgPSBESVZfUk9VTkRfVVAoc3RtcGUtPm51bV9ncGlvcywgOCk7CiAJc3RhdGljIGNvbnN0IHU4IHJlZ21hcFtdID0gewpAQCAtMTgwLDIwICsxODAsMjAgQEAKIAltdXRleF91bmxvY2soJnN0bXBlX2dwaW8tPmlycV9sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgc3RtcGVfZ3Bpb19pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgc3RtcGVfZ3Bpb19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHN0bXBlX2dwaW8gKnN0bXBlX2dwaW8gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCWludCBvZmZzZXQgPSBpcnEgLSBzdG1wZV9ncGlvLT5pcnFfYmFzZTsKKwlzdHJ1Y3Qgc3RtcGVfZ3BpbyAqc3RtcGVfZ3BpbyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCWludCBvZmZzZXQgPSBkLT5pcnEgLSBzdG1wZV9ncGlvLT5pcnFfYmFzZTsKIAlpbnQgcmVnb2Zmc2V0ID0gb2Zmc2V0IC8gODsKIAlpbnQgbWFzayA9IDEgPDwgKG9mZnNldCAlIDgpOwogCiAJc3RtcGVfZ3Bpby0+cmVnc1tSRUdfSUVdW3JlZ29mZnNldF0gJj0gfm1hc2s7CiB9CiAKLXN0YXRpYyB2b2lkIHN0bXBlX2dwaW9faXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgc3RtcGVfZ3Bpb19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3Qgc3RtcGVfZ3BpbyAqc3RtcGVfZ3BpbyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JaW50IG9mZnNldCA9IGlycSAtIHN0bXBlX2dwaW8tPmlycV9iYXNlOworCXN0cnVjdCBzdG1wZV9ncGlvICpzdG1wZV9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJaW50IG9mZnNldCA9IGQtPmlycSAtIHN0bXBlX2dwaW8tPmlycV9iYXNlOwogCWludCByZWdvZmZzZXQgPSBvZmZzZXQgLyA4OwogCWludCBtYXNrID0gMSA8PCAob2Zmc2V0ICUgOCk7CiAKQEAgLTIwMiwxMSArMjAyLDExIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc3RtcGVfZ3Bpb19pcnFfY2hpcCA9IHsKIAkubmFtZQkJCT0gInN0bXBlLWdwaW8iLAotCS5idXNfbG9jawkJPSBzdG1wZV9ncGlvX2lycV9sb2NrLAotCS5idXNfc3luY191bmxvY2sJPSBzdG1wZV9ncGlvX2lycV9zeW5jX3VubG9jaywKLQkubWFzawkJCT0gc3RtcGVfZ3Bpb19pcnFfbWFzaywKLQkudW5tYXNrCQkJPSBzdG1wZV9ncGlvX2lycV91bm1hc2ssCi0JLnNldF90eXBlCQk9IHN0bXBlX2dwaW9faXJxX3NldF90eXBlLAorCS5pcnFfYnVzX2xvY2sJCT0gc3RtcGVfZ3Bpb19pcnFfbG9jaywKKwkuaXJxX2J1c19zeW5jX3VubG9jawk9IHN0bXBlX2dwaW9faXJxX3N5bmNfdW5sb2NrLAorCS5pcnFfbWFzawkJPSBzdG1wZV9ncGlvX2lycV9tYXNrLAorCS5pcnFfdW5tYXNrCQk9IHN0bXBlX2dwaW9faXJxX3VubWFzaywKKwkuaXJxX3NldF90eXBlCQk9IHN0bXBlX2dwaW9faXJxX3NldF90eXBlLAogfTsKIAogc3RhdGljIGlycXJldHVybl90IHN0bXBlX2dwaW9faXJxKGludCBpcnEsIHZvaWQgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9zeDE1MHguYyBiL2RyaXZlcnMvZ3Bpby9zeDE1MHguYwppbmRleCA4MjM1NTlhLi5lNjBiZTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vc3gxNTB4LmMKKysrIGIvZHJpdmVycy9ncGlvL3N4MTUweC5jCkBAIC0zMDQsMzYgKzMwNCwzNiBAQAogCXJldHVybiBjaGlwLT5pcnFfYmFzZSArIG9mZnNldDsKIH0KIAotc3RhdGljIHZvaWQgc3gxNTB4X2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBzeDE1MHhfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBpcnFfY2hpcCAqaWMgPSBnZXRfaXJxX2NoaXAoaXJxKTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmljID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwKGQpOwogCXN0cnVjdCBzeDE1MHhfY2hpcCAqY2hpcDsKIAl1bnNpZ25lZCBuOwogCiAJY2hpcCA9IGNvbnRhaW5lcl9vZihpYywgc3RydWN0IHN4MTUweF9jaGlwLCBpcnFfY2hpcCk7Ci0JbiA9IGlycSAtIGNoaXAtPmlycV9iYXNlOworCW4gPSBkLT5pcnEgLSBjaGlwLT5pcnFfYmFzZTsKIAogCXN4MTUweF93cml0ZV9jZmcoY2hpcCwgbiwgMSwgY2hpcC0+ZGV2X2NmZy0+cmVnX2lycV9tYXNrLCAxKTsKIAlzeDE1MHhfd3JpdGVfY2ZnKGNoaXAsIG4sIDIsIGNoaXAtPmRldl9jZmctPnJlZ19zZW5zZSwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHN4MTUweF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBzeDE1MHhfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGlycV9jaGlwICppYyA9IGdldF9pcnFfY2hpcChpcnEpOworCXN0cnVjdCBpcnFfY2hpcCAqaWMgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXAoZCk7CiAJc3RydWN0IHN4MTUweF9jaGlwICpjaGlwOwogCXVuc2lnbmVkIG47CiAKIAljaGlwID0gY29udGFpbmVyX29mKGljLCBzdHJ1Y3Qgc3gxNTB4X2NoaXAsIGlycV9jaGlwKTsKLQluID0gaXJxIC0gY2hpcC0+aXJxX2Jhc2U7CisJbiA9IGQtPmlycSAtIGNoaXAtPmlycV9iYXNlOwogCiAJc3gxNTB4X3dyaXRlX2NmZyhjaGlwLCBuLCAxLCBjaGlwLT5kZXZfY2ZnLT5yZWdfaXJxX21hc2ssIDApOwogCXN4MTUweF93cml0ZV9jZmcoY2hpcCwgbiwgMiwgY2hpcC0+ZGV2X2NmZy0+cmVnX3NlbnNlLAogCQkJIGNoaXAtPmlycV9zZW5zZSA+PiAobiAqIDIpKTsKIH0KIAotc3RhdGljIGludCBzeDE1MHhfaXJxX3NldF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCitzdGF0aWMgaW50IHN4MTUweF9pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewotCXN0cnVjdCBpcnFfY2hpcCAqaWMgPSBnZXRfaXJxX2NoaXAoaXJxKTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmljID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwKGQpOwogCXN0cnVjdCBzeDE1MHhfY2hpcCAqY2hpcDsKIAl1bnNpZ25lZCBuLCB2YWwgPSAwOwogCkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljaGlwID0gY29udGFpbmVyX29mKGljLCBzdHJ1Y3Qgc3gxNTB4X2NoaXAsIGlycV9jaGlwKTsKLQluID0gaXJxIC0gY2hpcC0+aXJxX2Jhc2U7CisJbiA9IGQtPmlycSAtIGNoaXAtPmlycV9iYXNlOwogCiAJaWYgKGZsb3dfdHlwZSAmIElSUV9UWVBFX0VER0VfUklTSU5HKQogCQl2YWwgfD0gMHgxOwpAQCAtMzg2LDkgKzM4Niw5IEBACiAJcmV0dXJuIChuaGFuZGxlZCA+IDAgPyBJUlFfSEFORExFRCA6IElSUV9OT05FKTsKIH0KIAotc3RhdGljIHZvaWQgc3gxNTB4X2lycV9idXNfbG9jayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgc3gxNTB4X2lycV9idXNfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGlycV9jaGlwICppYyA9IGdldF9pcnFfY2hpcChpcnEpOworCXN0cnVjdCBpcnFfY2hpcCAqaWMgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXAoZCk7CiAJc3RydWN0IHN4MTUweF9jaGlwICpjaGlwOwogCiAJY2hpcCA9IGNvbnRhaW5lcl9vZihpYywgc3RydWN0IHN4MTUweF9jaGlwLCBpcnFfY2hpcCk7CkBAIC0zOTYsOSArMzk2LDkgQEAKIAltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgc3gxNTB4X2lycV9idXNfc3luY191bmxvY2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHN4MTUweF9pcnFfYnVzX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgaXJxX2NoaXAgKmljID0gZ2V0X2lycV9jaGlwKGlycSk7CisJc3RydWN0IGlycV9jaGlwICppYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcChkKTsKIAlzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXA7CiAJdW5zaWduZWQgbjsKIApAQCAtNDM3LDE2ICs0MzcsMTYgQEAKIAlpZiAocGRhdGEtPm9zY2lvX2lzX2dwbykKIAkJKytjaGlwLT5ncGlvX2NoaXAubmdwaW87CiAKLQljaGlwLT5pcnFfY2hpcC5uYW1lICAgICAgICAgICAgPSBjbGllbnQtPm5hbWU7Ci0JY2hpcC0+aXJxX2NoaXAubWFzayAgICAgICAgICAgID0gc3gxNTB4X2lycV9tYXNrOwotCWNoaXAtPmlycV9jaGlwLnVubWFzayAgICAgICAgICA9IHN4MTUweF9pcnFfdW5tYXNrOwotCWNoaXAtPmlycV9jaGlwLnNldF90eXBlICAgICAgICA9IHN4MTUweF9pcnFfc2V0X3R5cGU7Ci0JY2hpcC0+aXJxX2NoaXAuYnVzX2xvY2sgICAgICAgID0gc3gxNTB4X2lycV9idXNfbG9jazsKLQljaGlwLT5pcnFfY2hpcC5idXNfc3luY191bmxvY2sgPSBzeDE1MHhfaXJxX2J1c19zeW5jX3VubG9jazsKLQljaGlwLT5pcnFfc3VtbWFyeSAgICAgICAgICAgICAgPSAtMTsKLQljaGlwLT5pcnFfYmFzZSAgICAgICAgICAgICAgICAgPSAtMTsKLQljaGlwLT5pcnFfc2Vuc2UgICAgICAgICAgICAgICAgPSAwOwotCWNoaXAtPmlycV9zZXRfdHlwZV9wZW5kaW5nICAgICA9IDA7CisJY2hpcC0+aXJxX2NoaXAubmFtZSAgICAgICAgICAgICAgICA9IGNsaWVudC0+bmFtZTsKKwljaGlwLT5pcnFfY2hpcC5pcnFfbWFzayAgICAgICAgICAgID0gc3gxNTB4X2lycV9tYXNrOworCWNoaXAtPmlycV9jaGlwLmlycV91bm1hc2sgICAgICAgICAgPSBzeDE1MHhfaXJxX3VubWFzazsKKwljaGlwLT5pcnFfY2hpcC5pcnFfc2V0X3R5cGUgICAgICAgID0gc3gxNTB4X2lycV9zZXRfdHlwZTsKKwljaGlwLT5pcnFfY2hpcC5pcnFfYnVzX2xvY2sgICAgICAgID0gc3gxNTB4X2lycV9idXNfbG9jazsKKwljaGlwLT5pcnFfY2hpcC5pcnFfYnVzX3N5bmNfdW5sb2NrID0gc3gxNTB4X2lycV9idXNfc3luY191bmxvY2s7CisJY2hpcC0+aXJxX3N1bW1hcnkgICAgICAgICAgICAgICAgICA9IC0xOworCWNoaXAtPmlycV9iYXNlICAgICAgICAgICAgICAgICAgICAgPSAtMTsKKwljaGlwLT5pcnFfc2Vuc2UgICAgICAgICAgICAgICAgICAgID0gMDsKKwljaGlwLT5pcnFfc2V0X3R5cGVfcGVuZGluZyAgICAgICAgID0gMDsKIH0KIAogc3RhdGljIGludCBzeDE1MHhfaW5pdF9pbyhzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXAsIHU4IGJhc2UsIHUxNiBjZmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vdGMzNTg5eC1ncGlvLmMgYi9kcml2ZXJzL2dwaW8vdGMzNTg5eC1ncGlvLmMKaW5kZXggMTgwZDU4NC4uMjcyMDBhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3RjMzU4OXgtZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby90YzM1ODl4LWdwaW8uYwpAQCAtMTEwLDEwICsxMTAsMTAgQEAKIAkuY2FuX3NsZWVwCQk9IDEsCiB9OwogCi1zdGF0aWMgaW50IHRjMzU4OXhfZ3Bpb19pcnFfc2V0X3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCitzdGF0aWMgaW50IHRjMzU4OXhfZ3Bpb19pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3QgdGMzNTg5eF9ncGlvICp0YzM1ODl4X2dwaW8gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCWludCBvZmZzZXQgPSBpcnEgLSB0YzM1ODl4X2dwaW8tPmlycV9iYXNlOworCXN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCWludCBvZmZzZXQgPSBkLT5pcnEgLSB0YzM1ODl4X2dwaW8tPmlycV9iYXNlOwogCWludCByZWdvZmZzZXQgPSBvZmZzZXQgLyA4OwogCWludCBtYXNrID0gMSA8PCAob2Zmc2V0ICUgOCk7CiAKQEAgLTEzNywxNiArMTM3LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHRjMzU4OXhfZ3Bpb19pcnFfbG9jayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgdGMzNTg5eF9ncGlvX2lycV9sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgdGMzNTg5eF9ncGlvICp0YzM1ODl4X2dwaW8gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCiAJbXV0ZXhfbG9jaygmdGMzNTg5eF9ncGlvLT5pcnFfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIHRjMzU4OXhfZ3Bpb19pcnFfc3luY191bmxvY2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHRjMzU4OXhfZ3Bpb19pcnFfc3luY191bmxvY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJc3RydWN0IHRjMzU4OXhfZ3BpbyAqdGMzNTg5eF9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJc3RydWN0IHRjMzU4OXggKnRjMzU4OXggPSB0YzM1ODl4X2dwaW8tPnRjMzU4OXg7CiAJc3RhdGljIGNvbnN0IHU4IHJlZ21hcFtdID0gewogCQlbUkVHX0lCRV0JPSBUQzM1ODl4X0dQSU9JQkUwLApAQCAtMTcyLDIwICsxNzIsMjAgQEAKIAltdXRleF91bmxvY2soJnRjMzU4OXhfZ3Bpby0+aXJxX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCB0YzM1ODl4X2dwaW9faXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHRjMzU4OXhfZ3Bpb19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHRjMzU4OXhfZ3BpbyAqdGMzNTg5eF9ncGlvID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQlpbnQgb2Zmc2V0ID0gaXJxIC0gdGMzNTg5eF9ncGlvLT5pcnFfYmFzZTsKKwlzdHJ1Y3QgdGMzNTg5eF9ncGlvICp0YzM1ODl4X2dwaW8gPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlpbnQgb2Zmc2V0ID0gZC0+aXJxIC0gdGMzNTg5eF9ncGlvLT5pcnFfYmFzZTsKIAlpbnQgcmVnb2Zmc2V0ID0gb2Zmc2V0IC8gODsKIAlpbnQgbWFzayA9IDEgPDwgKG9mZnNldCAlIDgpOwogCiAJdGMzNTg5eF9ncGlvLT5yZWdzW1JFR19JRV1bcmVnb2Zmc2V0XSAmPSB+bWFzazsKIH0KIAotc3RhdGljIHZvaWQgdGMzNTg5eF9ncGlvX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHRjMzU4OXhfZ3Bpb19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgdGMzNTg5eF9ncGlvICp0YzM1ODl4X2dwaW8gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCWludCBvZmZzZXQgPSBpcnEgLSB0YzM1ODl4X2dwaW8tPmlycV9iYXNlOworCXN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCWludCBvZmZzZXQgPSBkLT5pcnEgLSB0YzM1ODl4X2dwaW8tPmlycV9iYXNlOwogCWludCByZWdvZmZzZXQgPSBvZmZzZXQgLyA4OwogCWludCBtYXNrID0gMSA8PCAob2Zmc2V0ICUgOCk7CiAKQEAgLTE5NCwxMSArMTk0LDExIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdGMzNTg5eF9ncGlvX2lycV9jaGlwID0gewogCS5uYW1lCQkJPSAidGMzNTg5eC1ncGlvIiwKLQkuYnVzX2xvY2sJCT0gdGMzNTg5eF9ncGlvX2lycV9sb2NrLAotCS5idXNfc3luY191bmxvY2sJPSB0YzM1ODl4X2dwaW9faXJxX3N5bmNfdW5sb2NrLAotCS5tYXNrCQkJPSB0YzM1ODl4X2dwaW9faXJxX21hc2ssCi0JLnVubWFzawkJCT0gdGMzNTg5eF9ncGlvX2lycV91bm1hc2ssCi0JLnNldF90eXBlCQk9IHRjMzU4OXhfZ3Bpb19pcnFfc2V0X3R5cGUsCisJLmlycV9idXNfbG9jawkJPSB0YzM1ODl4X2dwaW9faXJxX2xvY2ssCisJLmlycV9idXNfc3luY191bmxvY2sJPSB0YzM1ODl4X2dwaW9faXJxX3N5bmNfdW5sb2NrLAorCS5pcnFfbWFzawkJPSB0YzM1ODl4X2dwaW9faXJxX21hc2ssCisJLmlycV91bm1hc2sJCT0gdGMzNTg5eF9ncGlvX2lycV91bm1hc2ssCisJLmlycV9zZXRfdHlwZQkJPSB0YzM1ODl4X2dwaW9faXJxX3NldF90eXBlLAogfTsKIAogc3RhdGljIGlycXJldHVybl90IHRjMzU4OXhfZ3Bpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3RpbWJncGlvLmMgYi9kcml2ZXJzL2dwaW8vdGltYmdwaW8uYwppbmRleCA0NTI5MzY2Li4zNDkxMzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vdGltYmdwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vdGltYmdwaW8uYwpAQCAtMTA5LDEwICsxMDksMTAgQEAKIC8qCiAgKiBHUElPIElSUQogICovCi1zdGF0aWMgdm9pZCB0aW1iZ3Bpb19pcnFfZGlzYWJsZSh1bnNpZ25lZCBpcnEpCitzdGF0aWMgdm9pZCB0aW1iZ3Bpb19pcnFfZGlzYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHRpbWJncGlvICp0Z3BpbyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JaW50IG9mZnNldCA9IGlycSAtIHRncGlvLT5pcnFfYmFzZTsKKwlzdHJ1Y3QgdGltYmdwaW8gKnRncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJaW50IG9mZnNldCA9IGQtPmlycSAtIHRncGlvLT5pcnFfYmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRncGlvLT5sb2NrLCBmbGFncyk7CkBAIC0xMjEsMTAgKzEyMSwxMCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRncGlvLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHRpbWJncGlvX2lycV9lbmFibGUodW5zaWduZWQgaXJxKQorc3RhdGljIHZvaWQgdGltYmdwaW9faXJxX2VuYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHRpbWJncGlvICp0Z3BpbyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JaW50IG9mZnNldCA9IGlycSAtIHRncGlvLT5pcnFfYmFzZTsKKwlzdHJ1Y3QgdGltYmdwaW8gKnRncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJaW50IG9mZnNldCA9IGQtPmlycSAtIHRncGlvLT5pcnFfYmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRncGlvLT5sb2NrLCBmbGFncyk7CkBAIC0xMzMsMTAgKzEzMywxMCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRncGlvLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgdGltYmdwaW9faXJxX3R5cGUodW5zaWduZWQgaXJxLCB1bnNpZ25lZCB0cmlnZ2VyKQorc3RhdGljIGludCB0aW1iZ3Bpb19pcnFfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIHRyaWdnZXIpCiB7Ci0Jc3RydWN0IHRpbWJncGlvICp0Z3BpbyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JaW50IG9mZnNldCA9IGlycSAtIHRncGlvLT5pcnFfYmFzZTsKKwlzdHJ1Y3QgdGltYmdwaW8gKnRncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJaW50IG9mZnNldCA9IGQtPmlycSAtIHRncGlvLT5pcnFfYmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBsdnIsIGZsciwgYmZsciA9IDA7CiAJdTMyIHZlcjsKQEAgLTE5MywxMyArMTkzLDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgdGltYmdwaW9faXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3N0YXRpYyB2b2lkIHRpbWJncGlvX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgdGltYmdwaW8gKnRncGlvID0gZ2V0X2lycV9kYXRhKGlycSk7CisJc3RydWN0IHRpbWJncGlvICp0Z3BpbyA9IGlycV9kYXRhX2dldF9pcnFfZGF0YShkKTsKIAl1bnNpZ25lZCBsb25nIGlwcjsKIAlpbnQgb2Zmc2V0OwogCi0JZGVzYy0+Y2hpcC0+YWNrKGlycSk7CisJZGVzYy0+aXJxX2RhdGEuY2hpcC0+YWNrKGlycV9nZXRfaXJxX2RhdGEoZCkpOwogCWlwciA9IGlvcmVhZDMyKHRncGlvLT5tZW1iYXNlICsgVEdQSU9fSVBSKTsKIAlpb3dyaXRlMzIoaXByLCB0Z3Bpby0+bWVtYmFzZSArIFRHUElPX0lDUik7CiAKQEAgLTIxNyw5ICsyMTcsOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHRpbWJncGlvX2lycWNoaXAgPSB7CiAJLm5hbWUJCT0gIkdQSU8iLAotCS5lbmFibGUJCT0gdGltYmdwaW9faXJxX2VuYWJsZSwKLQkuZGlzYWJsZQk9IHRpbWJncGlvX2lycV9kaXNhYmxlLAotCS5zZXRfdHlwZQk9IHRpbWJncGlvX2lycV90eXBlLAorCS5pcnFfZW5hYmxlCT0gdGltYmdwaW9faXJxX2VuYWJsZSwKKwkuaXJxX2Rpc2FibGUJPSB0aW1iZ3Bpb19pcnFfZGlzYWJsZSwKKwkuaXJxX3NldF90eXBlCT0gdGltYmdwaW9faXJxX3R5cGUsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0aW1iZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3ZyNDF4eF9naXUuYyBiL2RyaXZlcnMvZ3Bpby92cjQxeHhfZ2l1LmMKaW5kZXggYjE2YzlhOC4uY2ZmYTNiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3ZyNDF4eF9naXUuYworKysgYi9kcml2ZXJzL2dwaW8vdnI0MXh4X2dpdS5jCkBAIC0xMTEsNjkgKzExMSw2OSBAQAogCXJldHVybiBkYXRhOwogfQogCi1zdGF0aWMgdm9pZCBhY2tfZ2l1aW50X2xvdyh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgYWNrX2dpdWludF9sb3coc3RydWN0IGlycV9kYXRhICpkKQogewotCWdpdV93cml0ZShHSVVJTlRTVEFUTCwgMSA8PCBHUElPX1BJTl9PRl9JUlEoaXJxKSk7CisJZ2l1X3dyaXRlKEdJVUlOVFNUQVRMLCAxIDw8IEdQSU9fUElOX09GX0lSUShkLT5pcnEpKTsKIH0KIAotc3RhdGljIHZvaWQgbWFza19naXVpbnRfbG93KHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtYXNrX2dpdWludF9sb3coc3RydWN0IGlycV9kYXRhICpkKQogewotCWdpdV9jbGVhcihHSVVJTlRFTkwsIDEgPDwgR1BJT19QSU5fT0ZfSVJRKGlycSkpOworCWdpdV9jbGVhcihHSVVJTlRFTkwsIDEgPDwgR1BJT19QSU5fT0ZfSVJRKGQtPmlycSkpOwogfQogCi1zdGF0aWMgdm9pZCBtYXNrX2Fja19naXVpbnRfbG93KHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtYXNrX2Fja19naXVpbnRfbG93KHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBpbnQgcGluOwogCi0JcGluID0gR1BJT19QSU5fT0ZfSVJRKGlycSk7CisJcGluID0gR1BJT19QSU5fT0ZfSVJRKGQtPmlycSk7CiAJZ2l1X2NsZWFyKEdJVUlOVEVOTCwgMSA8PCBwaW4pOwogCWdpdV93cml0ZShHSVVJTlRTVEFUTCwgMSA8PCBwaW4pOwogfQogCi1zdGF0aWMgdm9pZCB1bm1hc2tfZ2l1aW50X2xvdyh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgdW5tYXNrX2dpdWludF9sb3coc3RydWN0IGlycV9kYXRhICpkKQogewotCWdpdV9zZXQoR0lVSU5URU5MLCAxIDw8IEdQSU9fUElOX09GX0lSUShpcnEpKTsKKwlnaXVfc2V0KEdJVUlOVEVOTCwgMSA8PCBHUElPX1BJTl9PRl9JUlEoZC0+aXJxKSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ2l1aW50X2xvd19pcnFfY2hpcCA9IHsKIAkubmFtZQkJPSAiR0lVSU5UTCIsCi0JLmFjawkJPSBhY2tfZ2l1aW50X2xvdywKLQkubWFzawkJPSBtYXNrX2dpdWludF9sb3csCi0JLm1hc2tfYWNrCT0gbWFza19hY2tfZ2l1aW50X2xvdywKLQkudW5tYXNrCQk9IHVubWFza19naXVpbnRfbG93LAorCS5pcnFfYWNrCT0gYWNrX2dpdWludF9sb3csCisJLmlycV9tYXNrCT0gbWFza19naXVpbnRfbG93LAorCS5pcnFfbWFza19hY2sJPSBtYXNrX2Fja19naXVpbnRfbG93LAorCS5pcnFfdW5tYXNrCT0gdW5tYXNrX2dpdWludF9sb3csCiB9OwogCi1zdGF0aWMgdm9pZCBhY2tfZ2l1aW50X2hpZ2godW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGFja19naXVpbnRfaGlnaChzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJZ2l1X3dyaXRlKEdJVUlOVFNUQVRILAotCQkgIDEgPDwgKEdQSU9fUElOX09GX0lSUShpcnEpIC0gR0lVSU5UX0hJR0hfT0ZGU0VUKSk7CisJCSAgMSA8PCAoR1BJT19QSU5fT0ZfSVJRKGQtPmlycSkgLSBHSVVJTlRfSElHSF9PRkZTRVQpKTsKIH0KIAotc3RhdGljIHZvaWQgbWFza19naXVpbnRfaGlnaCh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbWFza19naXVpbnRfaGlnaChzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JZ2l1X2NsZWFyKEdJVUlOVEVOSCwgMSA8PCAoR1BJT19QSU5fT0ZfSVJRKGlycSkgLSBHSVVJTlRfSElHSF9PRkZTRVQpKTsKKwlnaXVfY2xlYXIoR0lVSU5URU5ILCAxIDw8IChHUElPX1BJTl9PRl9JUlEoZC0+aXJxKSAtIEdJVUlOVF9ISUdIX09GRlNFVCkpOwogfQogCi1zdGF0aWMgdm9pZCBtYXNrX2Fja19naXVpbnRfaGlnaCh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbWFza19hY2tfZ2l1aW50X2hpZ2goc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGludCBwaW47CiAKLQlwaW4gPSBHUElPX1BJTl9PRl9JUlEoaXJxKSAtIEdJVUlOVF9ISUdIX09GRlNFVDsKKwlwaW4gPSBHUElPX1BJTl9PRl9JUlEoZC0+aXJxKSAtIEdJVUlOVF9ISUdIX09GRlNFVDsKIAlnaXVfY2xlYXIoR0lVSU5URU5ILCAxIDw8IHBpbik7CiAJZ2l1X3dyaXRlKEdJVUlOVFNUQVRILCAxIDw8IHBpbik7CiB9CiAKLXN0YXRpYyB2b2lkIHVubWFza19naXVpbnRfaGlnaCh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgdW5tYXNrX2dpdWludF9oaWdoKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlnaXVfc2V0KEdJVUlOVEVOSCwgMSA8PCAoR1BJT19QSU5fT0ZfSVJRKGlycSkgLSBHSVVJTlRfSElHSF9PRkZTRVQpKTsKKwlnaXVfc2V0KEdJVUlOVEVOSCwgMSA8PCAoR1BJT19QSU5fT0ZfSVJRKGQtPmlycSkgLSBHSVVJTlRfSElHSF9PRkZTRVQpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBnaXVpbnRfaGlnaF9pcnFfY2hpcCA9IHsKIAkubmFtZQkJPSAiR0lVSU5USCIsCi0JLmFjawkJPSBhY2tfZ2l1aW50X2hpZ2gsCi0JLm1hc2sJCT0gbWFza19naXVpbnRfaGlnaCwKLQkubWFza19hY2sJPSBtYXNrX2Fja19naXVpbnRfaGlnaCwKLQkudW5tYXNrCQk9IHVubWFza19naXVpbnRfaGlnaCwKKwkuaXJxX2Fjawk9IGFja19naXVpbnRfaGlnaCwKKwkuaXJxX21hc2sJPSBtYXNrX2dpdWludF9oaWdoLAorCS5pcnFfbWFza19hY2sJPSBtYXNrX2Fja19naXVpbnRfaGlnaCwKKwkuaXJxX3VubWFzawk9IHVubWFza19naXVpbnRfaGlnaCwKIH07CiAKIHN0YXRpYyBpbnQgZ2l1X2dldF9pcnEodW5zaWduZWQgaW50IGlycSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby93bTg5OTQtZ3Bpby5jIGIvZHJpdmVycy9ncGlvL3dtODk5NC1ncGlvLmMKaW5kZXggNjE4Mzk4ZS4uYzgyMmJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3dtODk5NC1ncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL3dtODk5NC1ncGlvLmMKQEAgLTM1LDYgKzM1LDI5IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3Qgd204OTk0X2dwaW8sIGdwaW9fY2hpcCk7CiB9CiAKK3N0YXRpYyBpbnQgd204OTk0X2dwaW9fcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHdtODk5NF9ncGlvICp3bTg5OTRfZ3BpbyA9IHRvX3dtODk5NF9ncGlvKGNoaXApOworCXN0cnVjdCB3bTg5OTQgKndtODk5NCA9IHdtODk5NF9ncGlvLT53bTg5OTQ7CisKKwlzd2l0Y2ggKHdtODk5NC0+dHlwZSkgeworCWNhc2UgV004OTU4OgorCQlzd2l0Y2ggKG9mZnNldCkgeworCQljYXNlIDE6CisJCWNhc2UgMjoKKwkJY2FzZSAzOgorCQljYXNlIDQ6CisJCWNhc2UgNjoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHdtODk5NF9ncGlvX2RpcmVjdGlvbl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJc3RydWN0IHdtODk5NF9ncGlvICp3bTg5OTRfZ3BpbyA9IHRvX3dtODk5NF9ncGlvKGNoaXApOwpAQCAtMTM2LDYgKzE1OSw3IEBACiBzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCB0ZW1wbGF0ZV9jaGlwID0gewogCS5sYWJlbAkJCT0gIndtODk5NCIsCiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkucmVxdWVzdAkJPSB3bTg5OTRfZ3Bpb19yZXF1ZXN0LAogCS5kaXJlY3Rpb25faW5wdXQJPSB3bTg5OTRfZ3Bpb19kaXJlY3Rpb25faW4sCiAJLmdldAkJCT0gd204OTk0X2dwaW9fZ2V0LAogCS5kaXJlY3Rpb25fb3V0cHV0CT0gd204OTk0X2dwaW9fZGlyZWN0aW9uX291dCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYWdwc3VwcG9ydC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hZ3BzdXBwb3J0LmMKaW5kZXggMjUyZmRiOS4uMGNiMmJhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9hZ3BzdXBwb3J0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hZ3BzdXBwb3J0LmMKQEAgLTQ2NiwxMCArNDY2LDQgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2FncF9iaW5kX3BhZ2VzKTsKIAotdm9pZCBkcm1fYWdwX2NoaXBzZXRfZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlhZ3BfZmx1c2hfY2hpcHNldChkZXYtPmFncC0+YnJpZGdlKTsKLX0KLUVYUE9SVF9TWU1CT0woZHJtX2FncF9jaGlwc2V0X2ZsdXNoKTsKLQogI2VuZGlmIC8qIF9fT1NfSEFTX0FHUCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCmluZGV4IDJkNGUxN2EuLjk1MmIzZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKQEAgLTMzNiw3ICszMzYsNyBAQAogCQkJICAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUsIHNhdmVkX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUsIHNhdmVkX21vZGUsIHNhdmVkX2h3bW9kZTsKIAlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7CiAJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKIAlpbnQgc2F2ZWRfeCwgc2F2ZWRfeTsKQEAgLTM1MCw2ICszNTAsNyBAQAogCWlmICghY3J0Yy0+ZW5hYmxlZCkKIAkJcmV0dXJuIHRydWU7CiAKKwlzYXZlZF9od21vZGUgPSBjcnRjLT5od21vZGU7CiAJc2F2ZWRfbW9kZSA9IGNydGMtPm1vZGU7CiAJc2F2ZWRfeCA9IGNydGMtPng7CiAJc2F2ZWRfeSA9IGNydGMtPnk7CkBAIC00MjcsMTEgKzQyOCwyMSBAQAogCiAJfQogCisJLyogU3RvcmUgcmVhbCBwb3N0LWFkanVzdG1lbnQgaGFyZHdhcmUgbW9kZS4gKi8KKwljcnRjLT5od21vZGUgPSAqYWRqdXN0ZWRfbW9kZTsKKworCS8qIENhbGN1bGF0ZSBhbmQgc3RvcmUgdmFyaW91cyBjb25zdGFudHMgd2hpY2gKKwkgKiBhcmUgbGF0ZXIgbmVlZGVkIGJ5IHZibGFuayBhbmQgc3dhcC1jb21wbGV0aW9uCisJICogdGltZXN0YW1waW5nLiBUaGV5IGFyZSBkZXJpdmVkIGZyb20gdHJ1ZSBod21vZGUuCisJICovCisJZHJtX2NhbGNfdGltZXN0YW1waW5nX2NvbnN0YW50cyhjcnRjKTsKKwogCS8qIFhYWCBmcmVlIGFkanVzdGVkbW9kZSAqLwogCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBhZGp1c3RlZF9tb2RlKTsKIAkvKiBGSVhNRTogYWRkIHN1YnBpeGVsIG9yZGVyICovCiBkb25lOgogCWlmICghcmV0KSB7CisJCWNydGMtPmh3bW9kZSA9IHNhdmVkX2h3bW9kZTsKIAkJY3J0Yy0+bW9kZSA9IHNhdmVkX21vZGU7CiAJCWNydGMtPnggPSBzYXZlZF94OwogCQljcnRjLT55ID0gc2F2ZWRfeTsKQEAgLTY1MCw2ICs2NjEsNyBAQAogCQkJCQkJICAgICAgb2xkX2ZiKSkgewogCQkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldCBtb2RlIG9uIFtDUlRDOiVkXVxuIiwKIAkJCQkJICBzZXQtPmNydGMtPmJhc2UuaWQpOworCQkJCXNldC0+Y3J0Yy0+ZmIgPSBvbGRfZmI7CiAJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQlnb3RvIGZhaWw7CiAJCQl9CkBAIC02NjQsOCArNjc2LDEwIEBACiAJCQlzZXQtPmNydGMtPmZiID0gc2V0LT5mYjsKIAkJcmV0ID0gY3J0Y19mdW5jcy0+bW9kZV9zZXRfYmFzZShzZXQtPmNydGMsCiAJCQkJCQlzZXQtPngsIHNldC0+eSwgb2xkX2ZiKTsKLQkJaWYgKHJldCAhPSAwKQorCQlpZiAocmV0ICE9IDApIHsKKwkJCXNldC0+Y3J0Yy0+ZmIgPSBvbGRfZmI7CiAJCQlnb3RvIGZhaWw7CisJCX0KIAl9CiAJRFJNX0RFQlVHX0tNUygiU2V0dGluZyBjb25uZWN0b3IgRFBNUyBzdGF0ZSB0byBvblxuIik7CiAJZm9yIChpID0gMDsgaSA8IHNldC0+bnVtX2Nvbm5lY3RvcnM7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKaW5kZXggZDI4NDllNC4uMDMwN2Q2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCkBAIC02MDcsNiArNjA3LDI1IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfZmluaSk7CiAKK3ZvaWQgZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJaW5mby0+Zml4LnZpc3VhbCA9IGZiLT5kZXB0aCA9PSA4ID8gRkJfVklTVUFMX1BTRVVET0NPTE9SIDoKKwkJRkJfVklTVUFMX1RSVUVDT0xPUjsKKwlpbmZvLT5maXgubW1pb19zdGFydCA9IDA7CisJaW5mby0+Zml4Lm1taW9fbGVuID0gMDsKKwlpbmZvLT5maXgudHlwZV9hdXggPSAwOworCWluZm8tPmZpeC54cGFuc3RlcCA9IDE7IC8qIGRvaW5nIGl0IGluIGh3ICovCisJaW5mby0+Zml4LnlwYW5zdGVwID0gMTsgLyogZG9pbmcgaXQgaW4gaHcgKi8KKwlpbmZvLT5maXgueXdyYXBzdGVwID0gMDsKKwlpbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9OT05FOworCWluZm8tPmZpeC50eXBlX2F1eCA9IDA7CisKKwlpbmZvLT5maXgubGluZV9sZW5ndGggPSBmYi0+cGl0Y2g7CisJcmV0dXJuOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2ZpbGxfZml4KTsKKwogc3RhdGljIGludCBzZXRjb2xyZWcoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCiAJCSAgICAgdTE2IGJsdWUsIHUxNiByZWdubywgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CkBAIC04MTYsNiArODM1LDcgQEAKIAkJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CisJCWRybV9mYl9oZWxwZXJfZmlsbF9maXgoaW5mbywgZmJfaGVscGVyLT5mYik7CiAJfQogCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAKQEAgLTk1Myw2ICs5NzMsNyBAQAogCiAJaWYgKG5ld19mYikgewogCQlpbmZvLT52YXIucGl4Y2xvY2sgPSAwOworCQlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGZiX2hlbHBlci0+ZmIpOwogCQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbykgPCAwKSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtOTc5LDI0ICsxMDAwLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUpOwogCi12b2lkIGRybV9mYl9oZWxwZXJfZmlsbF9maXgoc3RydWN0IGZiX2luZm8gKmluZm8sIHVpbnQzMl90IHBpdGNoLAotCQkJICAgIHVpbnQzMl90IGRlcHRoKQotewotCWluZm8tPmZpeC50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOwotCWluZm8tPmZpeC52aXN1YWwgPSBkZXB0aCA9PSA4ID8gRkJfVklTVUFMX1BTRVVET0NPTE9SIDoKLQkJRkJfVklTVUFMX1RSVUVDT0xPUjsKLQlpbmZvLT5maXgudHlwZV9hdXggPSAwOwotCWluZm8tPmZpeC54cGFuc3RlcCA9IDE7IC8qIGRvaW5nIGl0IGluIGh3ICovCi0JaW5mby0+Zml4LnlwYW5zdGVwID0gMTsgLyogZG9pbmcgaXQgaW4gaHcgKi8KLQlpbmZvLT5maXgueXdyYXBzdGVwID0gMDsKLQlpbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9OT05FOwotCWluZm8tPmZpeC50eXBlX2F1eCA9IDA7Ci0KLQlpbmZvLT5maXgubGluZV9sZW5ndGggPSBwaXRjaDsKLQlyZXR1cm47Ci19Ci1FWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfZmlsbF9maXgpOwotCiB2b2lkIGRybV9mYl9oZWxwZXJfZmlsbF92YXIoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJCQkgICAgdWludDMyX3QgZmJfd2lkdGgsIHVpbnQzMl90IGZiX2hlaWdodCkKIHsKQEAgLTEwMDUsNiArMTAwOCw3IEBACiAJaW5mby0+dmFyLnhyZXNfdmlydHVhbCA9IGZiLT53aWR0aDsKIAlpbmZvLT52YXIueXJlc192aXJ0dWFsID0gZmItPmhlaWdodDsKIAlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPSBmYi0+Yml0c19wZXJfcGl4ZWw7CisJaW5mby0+dmFyLmFjY2VsX2ZsYWdzID0gRkJfQUNDRUxGX1RFWFQ7CiAJaW5mby0+dmFyLnhvZmZzZXQgPSAwOwogCWluZm8tPnZhci55b2Zmc2V0ID0gMDsKIAlpbmZvLT52YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CkBAIC0xNTMwLDMgKzE1MzQsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9ob3RwbHVnX2V2ZW50KTsKIAorLyogVGhlIEtjb25maWcgRFJNX0tNU19IRUxQRVIgc2VsZWN0cyBGUkFNRUJVRkZFUl9DT05TT0xFIChpZiAhRU1CRURERUQpCisgKiBidXQgdGhlIG1vZHVsZSBkb2Vzbid0IGRlcGVuZCBvbiBhbnkgZmIgY29uc29sZSBzeW1ib2xzLiAgQXQgbGVhc3QKKyAqIGF0dGVtcHQgdG8gbG9hZCBmYmNvbiB0byBhdm9pZCBsZWF2aW5nIHRoZSBzeXN0ZW0gd2l0aG91dCBhIHVzYWJsZSBjb25zb2xlLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9NT0RVTEUpICYmICFkZWZpbmVkKENPTkZJR19FTUJFRERFRCkKK3N0YXRpYyBpbnQgX19pbml0IGRybV9mYl9oZWxwZXJfbW9kaW5pdCh2b2lkKQoreworCWNvbnN0IGNoYXIgKm5hbWUgPSAiZmJjb24iOworCXN0cnVjdCBtb2R1bGUgKmZiY29uOworCisJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKKwlmYmNvbiA9IGZpbmRfbW9kdWxlKG5hbWUpOworCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKKworCWlmICghZmJjb24pCisJCXJlcXVlc3RfbW9kdWxlX25vd2FpdChuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQoZHJtX2ZiX2hlbHBlcl9tb2Rpbml0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYwppbmRleCBhMzk3OTRiLi4yZWM3ZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYwpAQCAtMjM2LDYgKzIzNiw4IEBACiAJCXJldHVybiAtRUJVU1k7CS8qIE5vIGV4Y2x1c2l2ZSBvcGVucyAqLwogCWlmICghZHJtX2NwdV92YWxpZCgpKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGV2LT5zd2l0Y2hfcG93ZXJfc3RhdGUgIT0gRFJNX1NXSVRDSF9QT1dFUl9PTikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlEUk1fREVCVUcoInBpZCA9ICVkLCBtaW5vciA9ICVkXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgbWlub3JfaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwppbmRleCAxNmQ1MTU1Li4wMDU0ZTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKQEAgLTQwLDYgKzQwLDIyIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8bGludXgvdmdhYXJiLmg+CisKKy8qIEFjY2VzcyBtYWNybyBmb3Igc2xvdHMgaW4gdmJsYW5rIHRpbWVzdGFtcCByaW5nYnVmZmVyLiAqLworI2RlZmluZSB2Ymxhbmt0aW1lc3RhbXAoZGV2LCBjcnRjLCBjb3VudCkgKCBcCisJKGRldiktPl92YmxhbmtfdGltZVsoY3J0YykgKiBEUk1fVkJMQU5LVElNRV9SQlNJWkUgKyBcCisJKChjb3VudCkgJSBEUk1fVkJMQU5LVElNRV9SQlNJWkUpXSkKKworLyogUmV0cnkgdGltZXN0YW1wIGNhbGN1bGF0aW9uIHVwIHRvIDMgdGltZXMgdG8gc2F0aXNmeQorICogZHJtX3RpbWVzdGFtcF9wcmVjaXNpb24gYmVmb3JlIGdpdmluZyB1cC4KKyAqLworI2RlZmluZSBEUk1fVElNRVNUQU1QX01BWFJFVFJJRVMgMworCisvKiBUaHJlc2hvbGQgaW4gbmFub3NlY29uZHMgZm9yIGRldGVjdGlvbiBvZiByZWR1bmRhbnQKKyAqIHZibGFuayBpcnEgaW4gZHJtX2hhbmRsZV92YmxhbmsoKS4gMSBtc2VjIHNob3VsZCBiZSBvay4KKyAqLworI2RlZmluZSBEUk1fUkVEVU5EQU5UX1ZCTElSUV9USFJFU0hfTlMgMTAwMDAwMAorCiAvKioKICAqIEdldCBpbnRlcnJ1cHQgZnJvbSBidXMgaWQuCiAgKgpAQCAtNzcsNiArOTMsODcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIENsZWFyIHZibGFuayB0aW1lc3RhbXAgYnVmZmVyIGZvciBhIGNydGMuCisgKi8KK3N0YXRpYyB2b2lkIGNsZWFyX3ZibGFua190aW1lc3RhbXBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCW1lbXNldCgmZGV2LT5fdmJsYW5rX3RpbWVbY3J0YyAqIERSTV9WQkxBTktUSU1FX1JCU0laRV0sIDAsCisJCURSTV9WQkxBTktUSU1FX1JCU0laRSAqIHNpemVvZihzdHJ1Y3QgdGltZXZhbCkpOworfQorCisvKgorICogRGlzYWJsZSB2YmxhbmsgaXJxJ3Mgb24gY3J0YywgbWFrZSBzdXJlIHRoYXQgbGFzdCB2YmxhbmsgY291bnQKKyAqIG9mIGhhcmR3YXJlIGFuZCBjb3JyZXNwb25kaW5nIGNvbnNpc3RlbnQgc29mdHdhcmUgdmJsYW5rIGNvdW50ZXIKKyAqIGFyZSBwcmVzZXJ2ZWQsIGV2ZW4gaWYgdGhlcmUgYXJlIGFueSBzcHVyaW91cyB2YmxhbmsgaXJxJ3MgYWZ0ZXIKKyAqIGRpc2FibGUuCisgKi8KK3N0YXRpYyB2b2lkIHZibGFua19kaXNhYmxlX2FuZF9zYXZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJdTMyIHZibGNvdW50OworCXM2NCBkaWZmX25zOworCWludCB2YmxyYzsKKwlzdHJ1Y3QgdGltZXZhbCB0dmJsYW5rOworCisJLyogUHJldmVudCB2YmxhbmsgaXJxIHByb2Nlc3Npbmcgd2hpbGUgZGlzYWJsaW5nIHZibGFuayBpcnFzLAorCSAqIHNvIG5vIHVwZGF0ZXMgb2YgdGltZXN0YW1wcyBvciBjb3VudCBjYW4gaGFwcGVuIGFmdGVyIHdlJ3ZlCisJICogZGlzYWJsZWQuIE5lZWRlZCB0byBwcmV2ZW50IHJhY2VzIGluIGNhc2Ugb2YgZGVsYXllZCBpcnEncy4KKwkgKiBEaXNhYmxlIHByZWVtcHRpb24sIHNvIHZibGFua190aW1lX2xvY2sgaXMgaGVsZCBhcyBzaG9ydCBhcworCSAqIHBvc3NpYmxlLCBldmVuIHVuZGVyIGEga2VybmVsIHdpdGggUFJFRU1QVF9SVCBwYXRjaGVzLgorCSAqLworCXByZWVtcHRfZGlzYWJsZSgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibGFua190aW1lX2xvY2ssIGlycWZsYWdzKTsKKworCWRldi0+ZHJpdmVyLT5kaXNhYmxlX3ZibGFuayhkZXYsIGNydGMpOworCWRldi0+dmJsYW5rX2VuYWJsZWRbY3J0Y10gPSAwOworCisJLyogTm8gZnVydGhlciB2YmxhbmsgaXJxJ3Mgd2lsbCBiZSBwcm9jZXNzZWQgYWZ0ZXIKKwkgKiB0aGlzIHBvaW50LiBHZXQgY3VycmVudCBoYXJkd2FyZSB2YmxhbmsgY291bnQgYW5kCisJICogdmJsYW5rIHRpbWVzdGFtcCwgcmVwZWF0IHVudGlsIHRoZXkgYXJlIGNvbnNpc3RlbnQuCisJICoKKwkgKiBGSVhNRTogVGhlcmUgaXMgc3RpbGwgYSByYWNlIGNvbmRpdGlvbiBoZXJlIGFuZCBpbgorCSAqIGRybV91cGRhdGVfdmJsYW5rX2NvdW50KCkgd2hpY2ggY2FuIGNhdXNlIG9mZi1ieS1vbmUKKwkgKiByZWluaXRpYWxpemF0aW9uIG9mIHNvZnR3YXJlIHZibGFuayBjb3VudGVyLiBJZiBncHUKKwkgKiB2YmxhbmsgY291bnRlciBkb2Vzbid0IGluY3JlbWVudCBleGFjdGx5IGF0IHRoZSBsZWFkaW5nCisJICogZWRnZSBvZiBhIHZibGFuayBpbnRlcnZhbCwgdGhlbiB3ZSBjYW4gbG9zZSAxIGNvdW50IGlmCisJICogd2UgaGFwcGVuIHRvIGV4ZWN1dGUgYmV0d2VlbiBzdGFydCBvZiB2YmxhbmsgYW5kIHRoZQorCSAqIGRlbGF5ZWQgZ3B1IGNvdW50ZXIgaW5jcmVtZW50LgorCSAqLworCWRvIHsKKwkJZGV2LT5sYXN0X3ZibGFua1tjcnRjXSA9IGRldi0+ZHJpdmVyLT5nZXRfdmJsYW5rX2NvdW50ZXIoZGV2LCBjcnRjKTsKKwkJdmJscmMgPSBkcm1fZ2V0X2xhc3RfdmJsdGltZXN0YW1wKGRldiwgY3J0YywgJnR2YmxhbmssIDApOworCX0gd2hpbGUgKGRldi0+bGFzdF92YmxhbmtbY3J0Y10gIT0gZGV2LT5kcml2ZXItPmdldF92YmxhbmtfY291bnRlcihkZXYsIGNydGMpKTsKKworCS8qIENvbXB1dGUgdGltZSBkaWZmZXJlbmNlIHRvIHN0b3JlZCB0aW1lc3RhbXAgb2YgbGFzdCB2YmxhbmsKKwkgKiBhcyB1cGRhdGVkIGJ5IGxhc3QgaW52b2NhdGlvbiBvZiBkcm1faGFuZGxlX3ZibGFuaygpIGluIHZibGFuayBpcnEuCisJICovCisJdmJsY291bnQgPSBhdG9taWNfcmVhZCgmZGV2LT5fdmJsYW5rX2NvdW50W2NydGNdKTsKKwlkaWZmX25zID0gdGltZXZhbF90b19ucygmdHZibGFuaykgLQorCQkgIHRpbWV2YWxfdG9fbnMoJnZibGFua3RpbWVzdGFtcChkZXYsIGNydGMsIHZibGNvdW50KSk7CisKKwkvKiBJZiB0aGVyZSBpcyBhdCBsZWFzdCAxIG1zZWMgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBsYXN0IHN0b3JlZAorCSAqIHRpbWVzdGFtcCBhbmQgdHZibGFuaywgdGhlbiB3ZSBhcmUgY3VycmVudGx5IGV4ZWN1dGluZyBvdXIKKwkgKiBkaXNhYmxlIGluc2lkZSBhIG5ldyB2YmxhbmsgaW50ZXJ2YWwsIHRoZSB0dmJsYW5rIHRpbWVzdGFtcAorCSAqIGNvcnJlc3BvbmRzIHRvIHRoaXMgbmV3IHZibGFuayBpbnRlcnZhbCBhbmQgdGhlIGlycSBoYW5kbGVyCisJICogZm9yIHRoaXMgdmJsYW5rIGRpZG4ndCBydW4geWV0IGFuZCB3b24ndCBydW4gZHVlIHRvIG91ciBkaXNhYmxlLgorCSAqIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGRvIHRoZSBqb2Igb2YgZHJtX2hhbmRsZV92YmxhbmsoKSBhbmQKKwkgKiBpbmNyZW1lbnQgdGhlIHZibGFuayBjb3VudGVyIGJ5IG9uZSB0byBhY2NvdW50IGZvciB0aGlzIHZibGFuay4KKwkgKgorCSAqIFNraXAgdGhpcyBzdGVwIGlmIHRoZXJlIGlzbid0IGFueSBoaWdoIHByZWNpc2lvbiB0aW1lc3RhbXAKKwkgKiBhdmFpbGFibGUuIEluIHRoYXQgY2FzZSB3ZSBjYW4ndCBhY2NvdW50IGZvciB0aGlzIGFuZCBqdXN0CisJICogaG9wZSBmb3IgdGhlIGJlc3QuCisJICovCisJaWYgKCh2YmxyYyA+IDApICYmIChhYnMoZGlmZl9ucykgPiAxMDAwMDAwKSkKKwkJYXRvbWljX2luYygmZGV2LT5fdmJsYW5rX2NvdW50W2NydGNdKTsKKworCS8qIEludmFsaWRhdGUgYWxsIHRpbWVzdGFtcHMgd2hpbGUgdmJsYW5rIGlycSdzIGFyZSBvZmYuICovCisJY2xlYXJfdmJsYW5rX3RpbWVzdGFtcHMoZGV2LCBjcnRjKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsYW5rX3RpbWVfbG9jaywgaXJxZmxhZ3MpOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKIHN0YXRpYyB2b2lkIHZibGFua19kaXNhYmxlX2ZuKHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAoc3RydWN0IGRybV9kZXZpY2UgKilhcmc7CkBAIC05MSwxMCArMTg4LDcgQEAKIAkJaWYgKGF0b21pY19yZWFkKCZkZXYtPnZibGFua19yZWZjb3VudFtpXSkgPT0gMCAmJgogCQkgICAgZGV2LT52YmxhbmtfZW5hYmxlZFtpXSkgewogCQkJRFJNX0RFQlVHKCJkaXNhYmxpbmcgdmJsYW5rIG9uIGNydGMgJWRcbiIsIGkpOwotCQkJZGV2LT5sYXN0X3ZibGFua1tpXSA9Ci0JCQkJZGV2LT5kcml2ZXItPmdldF92YmxhbmtfY291bnRlcihkZXYsIGkpOwotCQkJZGV2LT5kcml2ZXItPmRpc2FibGVfdmJsYW5rKGRldiwgaSk7Ci0JCQlkZXYtPnZibGFua19lbmFibGVkW2ldID0gMDsKKwkJCXZibGFua19kaXNhYmxlX2FuZF9zYXZlKGRldiwgaSk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwogCX0KQEAgLTExNyw2ICsyMTEsNyBAQAogCWtmcmVlKGRldi0+bGFzdF92YmxhbmspOwogCWtmcmVlKGRldi0+bGFzdF92Ymxhbmtfd2FpdCk7CiAJa2ZyZWUoZGV2LT52YmxhbmtfaW5tb2Rlc2V0KTsKKwlrZnJlZShkZXYtPl92YmxhbmtfdGltZSk7CiAKIAlkZXYtPm51bV9jcnRjcyA9IDA7CiB9CkBAIC0xMjksNiArMjI0LDggQEAKIAlzZXR1cF90aW1lcigmZGV2LT52YmxhbmtfZGlzYWJsZV90aW1lciwgdmJsYW5rX2Rpc2FibGVfZm4sCiAJCSAgICAodW5zaWduZWQgbG9uZylkZXYpOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPnZibF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT52YmxhbmtfdGltZV9sb2NrKTsKKwogCWRldi0+bnVtX2NydGNzID0gbnVtX2NydGNzOwogCiAJZGV2LT52YmxfcXVldWUgPSBrbWFsbG9jKHNpemVvZih3YWl0X3F1ZXVlX2hlYWRfdCkgKiBudW1fY3J0Y3MsCkBAIC0xNjEsNiArMjU4LDE5IEBACiAJaWYgKCFkZXYtPnZibGFua19pbm1vZGVzZXQpCiAJCWdvdG8gZXJyOwogCisJZGV2LT5fdmJsYW5rX3RpbWUgPSBrY2FsbG9jKG51bV9jcnRjcyAqIERSTV9WQkxBTktUSU1FX1JCU0laRSwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPl92YmxhbmtfdGltZSkKKwkJZ290byBlcnI7CisKKwlEUk1fSU5GTygiU3VwcG9ydHMgdmJsYW5rIHRpbWVzdGFtcCBjYWNoaW5nIFJldiAxICgxMC4xMC4yMDEwKS5cbiIpOworCisJLyogRHJpdmVyIHNwZWNpZmljIGhpZ2gtcHJlY2lzaW9uIHZibGFuayB0aW1lc3RhbXBpbmcgc3VwcG9ydGVkPyAqLworCWlmIChkZXYtPmRyaXZlci0+Z2V0X3ZibGFua190aW1lc3RhbXApCisJCURSTV9JTkZPKCJEcml2ZXIgc3VwcG9ydHMgcHJlY2lzZSB2YmxhbmsgdGltZXN0YW1wIHF1ZXJ5LlxuIik7CisJZWxzZQorCQlEUk1fSU5GTygiTm8gZHJpdmVyIHN1cHBvcnQgZm9yIHZibGFuayB0aW1lc3RhbXAgcXVlcnkuXG4iKTsKKwogCS8qIFplcm8gcGVyLWNydGMgdmJsYW5rIHN0dWZmICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9jcnRjczsgaSsrKSB7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+dmJsX3F1ZXVlW2ldKTsKQEAgLTI3OSw3ICszODksNyBAQAogICoKICAqIENhbGxzIHRoZSBkcml2ZXIncyBcYyBkcm1fZHJpdmVyX2lycV91bmluc3RhbGwoKSBmdW5jdGlvbiwgYW5kIHN0b3BzIHRoZSBpcnEuCiAgKi8KLWludCBkcm1faXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCBkcm1faXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAJaW50IGlycV9lbmFibGVkLCBpOwpAQCAtMzM1LDcgKzQ0NSw5IEBACiB7CiAJc3RydWN0IGRybV9jb250cm9sICpjdGwgPSBkYXRhOwogCi0JLyogaWYgd2UgaGF2ZW4ndCBpcnEgd2UgZmFsbGJhY2sgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucyAtIHRoaXMgdXNlZCB0byBiZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIGluIGRybV9kbWEuaCAqLworCS8qIGlmIHdlIGhhdmVuJ3QgaXJxIHdlIGZhbGxiYWNrIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMgLQorCSAqIHRoaXMgdXNlZCB0byBiZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIGluIGRybV9kbWEuaAorCSAqLwogCiAKIAlzd2l0Y2ggKGN0bC0+ZnVuYykgewpAQCAtMzYwLDYgKzQ3MiwyODcgQEAKIH0KIAogLyoqCisgKiBkcm1fY2FsY190aW1lc3RhbXBpbmdfY29uc3RhbnRzIC0gQ2FsY3VsYXRlIGFuZAorICogc3RvcmUgdmFyaW91cyBjb25zdGFudHMgd2hpY2ggYXJlIGxhdGVyIG5lZWRlZCBieQorICogdmJsYW5rIGFuZCBzd2FwLWNvbXBsZXRpb24gdGltZXN0YW1waW5nLCBlLmcsIGJ5CisgKiBkcm1fY2FsY192Ymx0aW1lc3RhbXBfZnJvbV9zY2Fub3V0cG9zKCkuCisgKiBUaGV5IGFyZSBkZXJpdmVkIGZyb20gY3J0YydzIHRydWUgc2Nhbm91dCB0aW1pbmcsCisgKiBzbyB0aGV5IHRha2UgdGhpbmdzIGxpa2UgcGFuZWwgc2NhbGluZyBvciBvdGhlcgorICogYWRqdXN0bWVudHMgaW50byBhY2NvdW50LgorICoKKyAqIEBjcnRjIGRybV9jcnRjIHdob3NlIHRpbWVzdGFtcCBjb25zdGFudHMgc2hvdWxkIGJlIHVwZGF0ZWQuCisgKgorICovCit2b2lkIGRybV9jYWxjX3RpbWVzdGFtcGluZ19jb25zdGFudHMoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXM2NCBsaW5lZHVyX25zID0gMCwgcGl4ZWxkdXJfbnMgPSAwLCBmcmFtZWR1cl9ucyA9IDA7CisJdTY0IGRvdGNsb2NrOworCisJLyogRG90IGNsb2NrIGluIEh6OiAqLworCWRvdGNsb2NrID0gKHU2NCkgY3J0Yy0+aHdtb2RlLmNsb2NrICogMTAwMDsKKworCS8qIFZhbGlkIGRvdGNsb2NrPyAqLworCWlmIChkb3RjbG9jayA+IDApIHsKKwkJLyogQ29udmVydCBzY2FubGluZSBsZW5ndGggaW4gcGl4ZWxzIGFuZCB2aWRlbyBkb3QgY2xvY2sgdG8KKwkJICogbGluZSBkdXJhdGlvbiwgZnJhbWUgZHVyYXRpb24gYW5kIHBpeGVsIGR1cmF0aW9uIGluCisJCSAqIG5hbm9zZWNvbmRzOgorCQkgKi8KKwkJcGl4ZWxkdXJfbnMgPSAoczY0KSBkaXY2NF91NjQoMTAwMDAwMDAwMCwgZG90Y2xvY2spOworCQlsaW5lZHVyX25zICA9IChzNjQpIGRpdjY0X3U2NCgoKHU2NCkgY3J0Yy0+aHdtb2RlLmNydGNfaHRvdGFsICoKKwkJCQkJICAgICAgMTAwMDAwMDAwMCksIGRvdGNsb2NrKTsKKwkJZnJhbWVkdXJfbnMgPSAoczY0KSBjcnRjLT5od21vZGUuY3J0Y192dG90YWwgKiBsaW5lZHVyX25zOworCX0gZWxzZQorCQlEUk1fRVJST1IoImNydGMgJWQ6IENhbid0IGNhbGN1bGF0ZSBjb25zdGFudHMsIGRvdGNsb2NrID0gMCFcbiIsCisJCQkgIGNydGMtPmJhc2UuaWQpOworCisJY3J0Yy0+cGl4ZWxkdXJfbnMgPSBwaXhlbGR1cl9uczsKKwljcnRjLT5saW5lZHVyX25zICA9IGxpbmVkdXJfbnM7CisJY3J0Yy0+ZnJhbWVkdXJfbnMgPSBmcmFtZWR1cl9uczsKKworCURSTV9ERUJVRygiY3J0YyAlZDogaHdtb2RlOiBodG90YWwgJWQsIHZ0b3RhbCAlZCwgdmRpc3BsYXkgJWRcbiIsCisJCSAgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+aHdtb2RlLmNydGNfaHRvdGFsLAorCQkgIGNydGMtPmh3bW9kZS5jcnRjX3Z0b3RhbCwgY3J0Yy0+aHdtb2RlLmNydGNfdmRpc3BsYXkpOworCURSTV9ERUJVRygiY3J0YyAlZDogY2xvY2sgJWQga0h6IGZyYW1lZHVyICVkIGxpbmVkdXIgJWQsIHBpeGVsZHVyICVkXG4iLAorCQkgIGNydGMtPmJhc2UuaWQsIChpbnQpIGRvdGNsb2NrLzEwMDAsIChpbnQpIGZyYW1lZHVyX25zLAorCQkgIChpbnQpIGxpbmVkdXJfbnMsIChpbnQpIHBpeGVsZHVyX25zKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2NhbGNfdGltZXN0YW1waW5nX2NvbnN0YW50cyk7CisKKy8qKgorICogZHJtX2NhbGNfdmJsdGltZXN0YW1wX2Zyb21fc2Nhbm91dHBvcyAtIGhlbHBlciByb3V0aW5lIGZvciBrbXMKKyAqIGRyaXZlcnMuIEltcGxlbWVudHMgY2FsY3VsYXRpb24gb2YgZXhhY3QgdmJsYW5rIHRpbWVzdGFtcHMgZnJvbQorICogZ2l2ZW4gZHJtX2Rpc3BsYXlfbW9kZSB0aW1pbmdzIGFuZCBjdXJyZW50IHZpZGVvIHNjYW5vdXQgcG9zaXRpb24KKyAqIG9mIGEgY3J0Yy4gVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gd2l0aGluIGdldF92YmxhbmtfdGltZXN0YW1wKCkKKyAqIGltcGxlbWVudGF0aW9uIG9mIGEga21zIGRyaXZlciB0byBpbXBsZW1lbnQgdGhlIGFjdHVhbCB0aW1lc3RhbXBpbmcuCisgKgorICogU2hvdWxkIHJldHVybiB0aW1lc3RhbXBzIGNvbmZvcm1pbmcgdG8gdGhlIE9NTF9zeW5jX2NvbnRyb2wgT3Blbk1MCisgKiBleHRlbnNpb24gc3BlY2lmaWNhdGlvbi4gVGhlIHRpbWVzdGFtcCBjb3JyZXNwb25kcyB0byB0aGUgZW5kIG9mCisgKiB0aGUgdmJsYW5rIGludGVydmFsLCBha2Egc3RhcnQgb2Ygc2Nhbm91dCBvZiB0b3Btb3N0LWxlZnRtb3N0IGRpc3BsYXkKKyAqIHBpeGVsIGluIHRoZSBmb2xsb3dpbmcgdmlkZW8gZnJhbWUuCisgKgorICogUmVxdWlyZXMgc3VwcG9ydCBmb3Igb3B0aW9uYWwgZGV2LT5kcml2ZXItPmdldF9zY2Fub3V0X3Bvc2l0aW9uKCkKKyAqIGluIGttcyBkcml2ZXIsIHBsdXMgYSBiaXQgb2Ygc2V0dXAgY29kZSB0byBwcm92aWRlIGEgZHJtX2Rpc3BsYXlfbW9kZQorICogdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgdHJ1ZSBzY2Fub3V0IHRpbWluZy4KKyAqCisgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvbmx5IGhhbmRsZXMgc3RhbmRhcmQgdmlkZW8gbW9kZXMuIEl0CisgKiByZXR1cm5zIGFzIG5vIG9wZXJhdGlvbiBpZiBhIGRvdWJsZXNjYW4gb3IgaW50ZXJsYWNlZCB2aWRlbyBtb2RlIGlzCisgKiBhY3RpdmUuIEhpZ2hlciBsZXZlbCBjb2RlIGlzIGV4cGVjdGVkIHRvIGhhbmRsZSB0aGlzLgorICoKKyAqIEBkZXY6IERSTSBkZXZpY2UuCisgKiBAY3J0YzogV2hpY2ggY3J0YydzIHZibGFuayB0aW1lc3RhbXAgdG8gcmV0cmlldmUuCisgKiBAbWF4X2Vycm9yOiBEZXNpcmVkIG1heGltdW0gYWxsb3dhYmxlIGVycm9yIGluIHRpbWVzdGFtcHMgKG5hbm9zZWNzKS4KKyAqICAgICAgICAgICAgIE9uIHJldHVybiBjb250YWlucyB0cnVlIG1heGltdW0gZXJyb3Igb2YgdGltZXN0YW1wLgorICogQHZibGFua190aW1lOiBQb2ludGVyIHRvIHN0cnVjdCB0aW1ldmFsIHdoaWNoIHNob3VsZCByZWNlaXZlIHRoZSB0aW1lc3RhbXAuCisgKiBAZmxhZ3M6IEZsYWdzIHRvIHBhc3MgdG8gZHJpdmVyOgorICogICAgICAgICAwID0gRGVmYXVsdC4KKyAqICAgICAgICAgRFJNX0NBTExFRF9GUk9NX1ZCTElSUSA9IElmIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHZibCBpcnEgaGFuZGxlci4KKyAqIEByZWZjcnRjOiBkcm1fY3J0Yyogb2YgY3J0YyB3aGljaCBkZWZpbmVzIHNjYW5vdXQgdGltaW5nLgorICoKKyAqIFJldHVybnMgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IsIGZhaWx1cmUgb3IgaWYgbm90IHN1cHBvcnRlZCBpbiBjdXJyZW50CisgKiB2aWRlbyBtb2RlOgorICoKKyAqIC1FSU5WQUwgICAtIEludmFsaWQgY3J0Yy4KKyAqIC1FQUdBSU4gICAtIFRlbXBvcmFyeSB1bmF2YWlsYWJsZSwgZS5nLiwgY2FsbGVkIGJlZm9yZSBpbml0aWFsIG1vZGVzZXQuCisgKiAtRU5PVFNVUFAgLSBGdW5jdGlvbiBub3Qgc3VwcG9ydGVkIGluIGN1cnJlbnQgZGlzcGxheSBtb2RlLgorICogLUVJTyAgICAgIC0gRmFpbGVkLCBlLmcuLCBkdWUgdG8gZmFpbGVkIHNjYW5vdXQgcG9zaXRpb24gcXVlcnkuCisgKgorICogUmV0dXJucyBvcidlZCBwb3NpdGl2ZSBzdGF0dXMgZmxhZ3Mgb24gc3VjY2VzczoKKyAqCisgKiBEUk1fVkJMQU5LVElNRV9TQ0FOT1VUUE9TX01FVEhPRCAtIFNpZ25hbCB0aGlzIG1ldGhvZCB1c2VkIGZvciB0aW1lc3RhbXBpbmcuCisgKiBEUk1fVkJMQU5LVElNRV9JTlZCTCAtIFRpbWVzdGFtcCB0YWtlbiB3aGlsZSBzY2Fub3V0IHdhcyBpbiB2YmxhbmsgaW50ZXJ2YWwuCisgKgorICovCitpbnQgZHJtX2NhbGNfdmJsdGltZXN0YW1wX2Zyb21fc2Nhbm91dHBvcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKKwkJCQkJICBpbnQgKm1heF9lcnJvciwKKwkJCQkJICBzdHJ1Y3QgdGltZXZhbCAqdmJsYW5rX3RpbWUsCisJCQkJCSAgdW5zaWduZWQgZmxhZ3MsCisJCQkJCSAgc3RydWN0IGRybV9jcnRjICpyZWZjcnRjKQoreworCXN0cnVjdCB0aW1ldmFsIHN0aW1lLCByYXdfdGltZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlpbnQgdmJsX3N0YXR1cywgdnRvdGFsLCB2ZGlzcGxheTsKKwlpbnQgdnBvcywgaHBvcywgaTsKKwlzNjQgZnJhbWVkdXJfbnMsIGxpbmVkdXJfbnMsIHBpeGVsZHVyX25zLCBkZWx0YV9ucywgZHVyYXRpb25fbnM7CisJYm9vbCBpbnZibDsKKworCWlmIChjcnRjIDwgMCB8fCBjcnRjID49IGRldi0+bnVtX2NydGNzKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBjcnRjICVkXG4iLCBjcnRjKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogU2Nhbm91dCBwb3NpdGlvbiBxdWVyeSBub3Qgc3VwcG9ydGVkPyBTaG91bGQgbm90IGhhcHBlbi4gKi8KKwlpZiAoIWRldi0+ZHJpdmVyLT5nZXRfc2Nhbm91dF9wb3NpdGlvbikgeworCQlEUk1fRVJST1IoIkNhbGxlZCBmcm9tIGRyaXZlciB3L28gZ2V0X3NjYW5vdXRfcG9zaXRpb24oKSE/XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJbW9kZSA9ICZyZWZjcnRjLT5od21vZGU7CisJdnRvdGFsID0gbW9kZS0+Y3J0Y192dG90YWw7CisJdmRpc3BsYXkgPSBtb2RlLT5jcnRjX3ZkaXNwbGF5OworCisJLyogRHVyYXRpb25zIG9mIGZyYW1lcywgbGluZXMsIHBpeGVscyBpbiBuYW5vc2Vjb25kcy4gKi8KKwlmcmFtZWR1cl9ucyA9IHJlZmNydGMtPmZyYW1lZHVyX25zOworCWxpbmVkdXJfbnMgID0gcmVmY3J0Yy0+bGluZWR1cl9uczsKKwlwaXhlbGR1cl9ucyA9IHJlZmNydGMtPnBpeGVsZHVyX25zOworCisJLyogSWYgbW9kZSB0aW1pbmcgdW5kZWZpbmVkLCBqdXN0IHJldHVybiBhcyBuby1vcDoKKwkgKiBIYXBwZW5zIGR1cmluZyBpbml0aWFsIG1vZGVzZXR0aW5nIG9mIGEgY3J0Yy4KKwkgKi8KKwlpZiAodnRvdGFsIDw9IDAgfHwgdmRpc3BsYXkgPD0gMCB8fCBmcmFtZWR1cl9ucyA9PSAwKSB7CisJCURSTV9ERUJVRygiY3J0YyAlZDogTm9vcCBkdWUgdG8gdW5pbml0aWFsaXplZCBtb2RlLlxuIiwgY3J0Yyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCS8qIERvbid0IGtub3cgeWV0IGhvdyB0byBoYW5kbGUgaW50ZXJsYWNlZCBvcgorCSAqIGRvdWJsZSBzY2FuIG1vZGVzLiBKdXN0IG5vLW9wIGZvciBub3cuCisJICovCisJaWYgKG1vZGUtPmZsYWdzICYgKERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFIHwgRFJNX01PREVfRkxBR19EQkxTQ0FOKSkgeworCQlEUk1fREVCVUcoImNydGMgJWQ6IE5vb3AgZHVlIHRvIHVuc3VwcG9ydGVkIG1vZGUuXG4iLCBjcnRjKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisKKwkvKiBHZXQgY3VycmVudCBzY2Fub3V0IHBvc2l0aW9uIHdpdGggc3lzdGVtIHRpbWVzdGFtcC4KKwkgKiBSZXBlYXQgcXVlcnkgdXAgdG8gRFJNX1RJTUVTVEFNUF9NQVhSRVRSSUVTIHRpbWVzCisJICogaWYgc2luZ2xlIHF1ZXJ5IHRha2VzIGxvbmdlciB0aGFuIG1heF9lcnJvciBuYW5vc2Vjb25kcy4KKwkgKgorCSAqIFRoaXMgZ3VhcmFudGVlcyBhIHRpZ2h0IGJvdW5kIG9uIG1heGltdW0gZXJyb3IgaWYKKwkgKiBjb2RlIGdldHMgcHJlZW1wdGVkIG9yIGRlbGF5ZWQgZm9yIHNvbWUgcmVhc29uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBEUk1fVElNRVNUQU1QX01BWFJFVFJJRVM7IGkrKykgeworCQkvKiBEaXNhYmxlIHByZWVtcHRpb24gdG8gbWFrZSBpdCB2ZXJ5IGxpa2VseSB0bworCQkgKiBzdWNjZWVkIGluIHRoZSBmaXJzdCBpdGVyYXRpb24gZXZlbiBvbiBQUkVFTVBUX1JUIGtlcm5lbC4KKwkJICovCisJCXByZWVtcHRfZGlzYWJsZSgpOworCisJCS8qIEdldCBzeXN0ZW0gdGltZXN0YW1wIGJlZm9yZSBxdWVyeS4gKi8KKwkJZG9fZ2V0dGltZW9mZGF5KCZzdGltZSk7CisKKwkJLyogR2V0IHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHNjYW5vdXQgcG9zLiB2cG9zLCBocG9zLiAqLworCQl2Ymxfc3RhdHVzID0gZGV2LT5kcml2ZXItPmdldF9zY2Fub3V0X3Bvc2l0aW9uKGRldiwgY3J0YywgJnZwb3MsICZocG9zKTsKKworCQkvKiBHZXQgc3lzdGVtIHRpbWVzdGFtcCBhZnRlciBxdWVyeS4gKi8KKwkJZG9fZ2V0dGltZW9mZGF5KCZyYXdfdGltZSk7CisKKwkJcHJlZW1wdF9lbmFibGUoKTsKKworCQkvKiBSZXR1cm4gYXMgbm8tb3AgaWYgc2Nhbm91dCBxdWVyeSB1bnN1cHBvcnRlZCBvciBmYWlsZWQuICovCisJCWlmICghKHZibF9zdGF0dXMgJiBEUk1fU0NBTk9VVFBPU19WQUxJRCkpIHsKKwkJCURSTV9ERUJVRygiY3J0YyAlZCA6IHNjYW5vdXRwb3MgcXVlcnkgZmFpbGVkIFslZF0uXG4iLAorCQkJCSAgY3J0YywgdmJsX3N0YXR1cyk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWR1cmF0aW9uX25zID0gdGltZXZhbF90b19ucygmcmF3X3RpbWUpIC0gdGltZXZhbF90b19ucygmc3RpbWUpOworCisJCS8qIEFjY2VwdCByZXN1bHQgd2l0aCA8ICBtYXhfZXJyb3IgbnNlY3MgdGltaW5nIHVuY2VydGFpbnR5LiAqLworCQlpZiAoZHVyYXRpb25fbnMgPD0gKHM2NCkgKm1heF9lcnJvcikKKwkJCWJyZWFrOworCX0KKworCS8qIE5vaXN5IHN5c3RlbSB0aW1pbmc/ICovCisJaWYgKGkgPT0gRFJNX1RJTUVTVEFNUF9NQVhSRVRSSUVTKSB7CisJCURSTV9ERUJVRygiY3J0YyAlZDogTm9pc3kgdGltZXN0YW1wICVkIHVzID4gJWQgdXMgWyVkIHJlcHNdLlxuIiwKKwkJCSAgY3J0YywgKGludCkgZHVyYXRpb25fbnMvMTAwMCwgKm1heF9lcnJvci8xMDAwLCBpKTsKKwl9CisKKwkvKiBSZXR1cm4gdXBwZXIgYm91bmQgb2YgdGltZXN0YW1wIHByZWNpc2lvbiBlcnJvci4gKi8KKwkqbWF4X2Vycm9yID0gKGludCkgZHVyYXRpb25fbnM7CisKKwkvKiBDaGVjayBpZiBpbiB2YmxhbmsgYXJlYToKKwkgKiB2cG9zIGlzID49MCBpbiB2aWRlbyBzY2Fub3V0IGFyZWEsIGJ1dCBuZWdhdGl2ZQorCSAqIHdpdGhpbiB2YmxhbmsgYXJlYSwgY291bnRpbmcgZG93biB0aGUgbnVtYmVyIG9mIGxpbmVzIHVudGlsCisJICogc3RhcnQgb2Ygc2Nhbm91dC4KKwkgKi8KKwlpbnZibCA9IHZibF9zdGF0dXMgJiBEUk1fU0NBTk9VVFBPU19JTlZCTDsKKworCS8qIENvbnZlcnQgc2Nhbm91dCBwb3NpdGlvbiBpbnRvIGVsYXBzZWQgdGltZSBhdCByYXdfdGltZSBxdWVyeQorCSAqIHNpbmNlIHN0YXJ0IG9mIHNjYW5vdXQgYXQgZmlyc3QgZGlzcGxheSBzY2FubGluZS4gZGVsdGFfbnMKKwkgKiBjYW4gYmUgbmVnYXRpdmUgaWYgc3RhcnQgb2Ygc2Nhbm91dCBoYXNuJ3QgaGFwcGVuZWQgeWV0LgorCSAqLworCWRlbHRhX25zID0gKHM2NCkgdnBvcyAqIGxpbmVkdXJfbnMgKyAoczY0KSBocG9zICogcGl4ZWxkdXJfbnM7CisKKwkvKiBJcyB2cG9zIG91dHNpZGUgbm9taW5hbCB2YmxhbmsgYXJlYSwgYnV0IGxlc3MgdGhhbgorCSAqIDEvMTAwIG9mIGEgZnJhbWUgaGVpZ2h0IGF3YXkgZnJvbSBzdGFydCBvZiB2Ymxhbms/CisJICogSWYgc28sIGFzc3VtZSB0aGlzIGlzbid0IGEgbWFzc2l2ZWx5IGRlbGF5ZWQgdmJsYW5rCisJICogaW50ZXJydXB0LCBidXQgYSB2YmxhbmsgaW50ZXJydXB0IHRoYXQgZmlyZWQgYSBmZXcKKwkgKiBtaWNyb3NlY29uZHMgYmVmb3JlIHRydWUgc3RhcnQgb2YgdmJsYW5rLiBDb21wZW5zYXRlCisJICogYnkgYWRkaW5nIGEgZnVsbCBmcmFtZSBkdXJhdGlvbiB0byB0aGUgZmluYWwgdGltZXN0YW1wLgorCSAqIEhhcHBlbnMsIGUuZy4sIG9uIEFUSSBSNTAwLCBSNjAwLgorCSAqCisJICogV2Ugb25seSBkbyB0aGlzIGlmIERSTV9DQUxMRURfRlJPTV9WQkxJUlEuCisJICovCisJaWYgKChmbGFncyAmIERSTV9DQUxMRURfRlJPTV9WQkxJUlEpICYmICFpbnZibCAmJgorCSAgICAoKHZkaXNwbGF5IC0gdnBvcykgPCB2dG90YWwgLyAxMDApKSB7CisJCWRlbHRhX25zID0gZGVsdGFfbnMgLSBmcmFtZWR1cl9uczsKKworCQkvKiBTaWduYWwgdGhpcyBjb3JyZWN0aW9uIGFzICJhcHBsaWVkIi4gKi8KKwkJdmJsX3N0YXR1cyB8PSAweDg7CisJfQorCisJLyogU3VidHJhY3QgdGltZSBkZWx0YSBmcm9tIHJhdyB0aW1lc3RhbXAgdG8gZ2V0IGZpbmFsCisJICogdmJsYW5rX3RpbWUgdGltZXN0YW1wIGZvciBlbmQgb2YgdmJsYW5rLgorCSAqLworCSp2YmxhbmtfdGltZSA9IG5zX3RvX3RpbWV2YWwodGltZXZhbF90b19ucygmcmF3X3RpbWUpIC0gZGVsdGFfbnMpOworCisJRFJNX0RFQlVHKCJjcnRjICVkIDogdiAlZCBwKCVkLCVkKUAgJWQuJWQgLT4gJWQuJWQgW2UgJWQgdXMsICVkIHJlcF1cbiIsCisJCSAgY3J0YywgKGludCkgdmJsX3N0YXR1cywgaHBvcywgdnBvcywgcmF3X3RpbWUudHZfc2VjLAorCQkgIHJhd190aW1lLnR2X3VzZWMsIHZibGFua190aW1lLT50dl9zZWMsIHZibGFua190aW1lLT50dl91c2VjLAorCQkgIChpbnQpIGR1cmF0aW9uX25zLzEwMDAsIGkpOworCisJdmJsX3N0YXR1cyA9IERSTV9WQkxBTktUSU1FX1NDQU5PVVRQT1NfTUVUSE9EOworCWlmIChpbnZibCkKKwkJdmJsX3N0YXR1cyB8PSBEUk1fVkJMQU5LVElNRV9JTlZCTDsKKworCXJldHVybiB2Ymxfc3RhdHVzOworfQorRVhQT1JUX1NZTUJPTChkcm1fY2FsY192Ymx0aW1lc3RhbXBfZnJvbV9zY2Fub3V0cG9zKTsKKworLyoqCisgKiBkcm1fZ2V0X2xhc3RfdmJsdGltZXN0YW1wIC0gcmV0cmlldmUgcmF3IHRpbWVzdGFtcCBmb3IgdGhlIG1vc3QgcmVjZW50CisgKiB2YmxhbmsgaW50ZXJ2YWwuCisgKgorICogQGRldjogRFJNIGRldmljZQorICogQGNydGM6IHdoaWNoIGNydGMncyB2YmxhbmsgdGltZXN0YW1wIHRvIHJldHJpZXZlCisgKiBAdHZibGFuazogUG9pbnRlciB0byB0YXJnZXQgc3RydWN0IHRpbWV2YWwgd2hpY2ggc2hvdWxkIHJlY2VpdmUgdGhlIHRpbWVzdGFtcAorICogQGZsYWdzOiBGbGFncyB0byBwYXNzIHRvIGRyaXZlcjoKKyAqICAgICAgICAgMCA9IERlZmF1bHQuCisgKiAgICAgICAgIERSTV9DQUxMRURfRlJPTV9WQkxJUlEgPSBJZiBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB2YmwgaXJxIGhhbmRsZXIuCisgKgorICogRmV0Y2hlcyB0aGUgc3lzdGVtIHRpbWVzdGFtcCBjb3JyZXNwb25kaW5nIHRvIHRoZSB0aW1lIG9mIHRoZSBtb3N0IHJlY2VudAorICogdmJsYW5rIGludGVydmFsIG9uIHNwZWNpZmllZCBjcnRjLiBNYXkgY2FsbCBpbnRvIGttcy1kcml2ZXIgdG8KKyAqIGNvbXB1dGUgdGhlIHRpbWVzdGFtcCB3aXRoIGEgaGlnaC1wcmVjaXNpb24gR1BVIHNwZWNpZmljIG1ldGhvZC4KKyAqCisgKiBSZXR1cm5zIHplcm8gaWYgdGltZXN0YW1wIG9yaWdpbmF0ZXMgZnJvbSB1bmNvcnJlY3RlZCBkb19nZXR0aW1lb2ZkYXkoKQorICogY2FsbCwgaS5lLiwgaXQgaXNuJ3QgdmVyeSBwcmVjaXNlbHkgbG9ja2VkIHRvIHRoZSB0cnVlIHZibGFuay4KKyAqCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHRpbWVzdGFtcCBpcyBjb25zaWRlcmVkIHRvIGJlIHZlcnkgcHJlY2lzZS4KKyAqLwordTMyIGRybV9nZXRfbGFzdF92Ymx0aW1lc3RhbXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMsCisJCQkgICAgICBzdHJ1Y3QgdGltZXZhbCAqdHZibGFuaywgdW5zaWduZWQgZmxhZ3MpCit7CisJaW50IHJldCA9IDA7CisKKwkvKiBEZWZpbmUgcmVxdWVzdGVkIG1heGltdW0gZXJyb3Igb24gdGltZXN0YW1wcyAobmFub3NlY29uZHMpLiAqLworCWludCBtYXhfZXJyb3IgPSAoaW50KSBkcm1fdGltZXN0YW1wX3ByZWNpc2lvbiAqIDEwMDA7CisKKwkvKiBRdWVyeSBkcml2ZXIgaWYgcG9zc2libGUgYW5kIHByZWNpc2lvbiB0aW1lc3RhbXBpbmcgZW5hYmxlZC4gKi8KKwlpZiAoZGV2LT5kcml2ZXItPmdldF92YmxhbmtfdGltZXN0YW1wICYmIChtYXhfZXJyb3IgPiAwKSkgeworCQlyZXQgPSBkZXYtPmRyaXZlci0+Z2V0X3ZibGFua190aW1lc3RhbXAoZGV2LCBjcnRjLCAmbWF4X2Vycm9yLAorCQkJCQkJCXR2YmxhbmssIGZsYWdzKTsKKwkJaWYgKHJldCA+IDApCisJCQlyZXR1cm4gKHUzMikgcmV0OworCX0KKworCS8qIEdQVSBoaWdoIHByZWNpc2lvbiB0aW1lc3RhbXAgcXVlcnkgdW5zdXBwb3J0ZWQgb3IgZmFpbGVkLgorCSAqIFJldHVybiBnZXR0aW1lb2ZkYXkgdGltZXN0YW1wIGFzIGJlc3QgZXN0aW1hdGUuCisJICovCisJZG9fZ2V0dGltZW9mZGF5KHR2YmxhbmspOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZXRfbGFzdF92Ymx0aW1lc3RhbXApOworCisvKioKICAqIGRybV92YmxhbmtfY291bnQgLSByZXRyaWV2ZSAiY29va2VkIiB2YmxhbmsgY291bnRlciB2YWx1ZQogICogQGRldjogRFJNIGRldmljZQogICogQGNydGM6IHdoaWNoIGNvdW50ZXIgdG8gcmV0cmlldmUKQEAgLTM3NSw2ICs3NjgsNDAgQEAKIEVYUE9SVF9TWU1CT0woZHJtX3ZibGFua19jb3VudCk7CiAKIC8qKgorICogZHJtX3ZibGFua19jb3VudF9hbmRfdGltZSAtIHJldHJpZXZlICJjb29rZWQiIHZibGFuayBjb3VudGVyIHZhbHVlCisgKiBhbmQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgY29ycmVzcG9uZGluZyB0byB0aGF0IHZibGFuayBjb3VudGVyIHZhbHVlLgorICoKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBjcnRjOiB3aGljaCBjb3VudGVyIHRvIHJldHJpZXZlCisgKiBAdmJsYW5rdGltZTogUG9pbnRlciB0byBzdHJ1Y3QgdGltZXZhbCB0byByZWNlaXZlIHRoZSB2YmxhbmsgdGltZXN0YW1wLgorICoKKyAqIEZldGNoZXMgdGhlICJjb29rZWQiIHZibGFuayBjb3VudCB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZgorICogdmJsYW5rIGV2ZW50cyBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIGluY2x1ZGluZyBsb3N0IGV2ZW50cyBkdWUgdG8KKyAqIG1vZGVzZXR0aW5nIGFjdGl2aXR5LiBSZXR1cm5zIGNvcnJlc3BvbmRpbmcgc3lzdGVtIHRpbWVzdGFtcCBvZiB0aGUgdGltZQorICogb2YgdGhlIHZibGFuayBpbnRlcnZhbCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IHZhbHVlIHZibGFuayBjb3VudGVyCisgKiB2YWx1ZS4KKyAqLwordTMyIGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMsCisJCQkgICAgICBzdHJ1Y3QgdGltZXZhbCAqdmJsYW5rdGltZSkKK3sKKwl1MzIgY3VyX3ZibGFuazsKKworCS8qIFJlYWQgdGltZXN0YW1wIGZyb20gc2xvdCBvZiBfdmJsYW5rX3RpbWUgcmluZ2J1ZmZlcgorCSAqIHRoYXQgY29ycmVzcG9uZHMgdG8gY3VycmVudCB2YmxhbmsgY291bnQuIFJldHJ5IGlmCisJICogY291bnQgaGFzIGluY3JlbWVudGVkIGR1cmluZyByZWFkb3V0LiBUaGlzIHdvcmtzIGxpa2UKKwkgKiBhIHNlcWxvY2suCisJICovCisJZG8geworCQljdXJfdmJsYW5rID0gYXRvbWljX3JlYWQoJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSk7CisJCSp2Ymxhbmt0aW1lID0gdmJsYW5rdGltZXN0YW1wKGRldiwgY3J0YywgY3VyX3ZibGFuayk7CisJCXNtcF9ybWIoKTsKKwl9IHdoaWxlIChjdXJfdmJsYW5rICE9IGF0b21pY19yZWFkKCZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pKTsKKworCXJldHVybiBjdXJfdmJsYW5rOworfQorRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX2NvdW50X2FuZF90aW1lKTsKKworLyoqCiAgKiBkcm1fdXBkYXRlX3ZibGFua19jb3VudCAtIHVwZGF0ZSB0aGUgbWFzdGVyIHZibGFuayBjb3VudGVyCiAgKiBAZGV2OiBEUk0gZGV2aWNlCiAgKiBAY3J0YzogY291bnRlciB0byB1cGRhdGUKQEAgLTM5Miw3ICs4MTksOCBAQAogICovCiBzdGF0aWMgdm9pZCBkcm1fdXBkYXRlX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKIHsKLQl1MzIgY3VyX3ZibGFuaywgZGlmZjsKKwl1MzIgY3VyX3ZibGFuaywgZGlmZiwgdHNsb3QsIHJjOworCXN0cnVjdCB0aW1ldmFsIHRfdmJsYW5rOwogCiAJLyoKIAkgKiBJbnRlcnJ1cHRzIHdlcmUgZGlzYWJsZWQgcHJpb3IgdG8gdGhpcyBjYWxsLCBzbyBkZWFsIHdpdGggY291bnRlcgpAQCAtNDAwLDggKzgyOCwxOCBAQAogCSAqIE5PVEUhICBJdCdzIHBvc3NpYmxlIHdlIGxvc3QgYSBmdWxsIGRldi0+bWF4X3ZibGFua19jb3VudCBldmVudHMKIAkgKiBoZXJlIGlmIHRoZSByZWdpc3RlciBpcyBzbWFsbCBvciB3ZSBoYWQgdmJsYW5rIGludGVycnVwdHMgb2ZmIGZvcgogCSAqIGEgbG9uZyB0aW1lLgorCSAqCisJICogV2UgcmVwZWF0IHRoZSBoYXJkd2FyZSB2YmxhbmsgY291bnRlciAmIHRpbWVzdGFtcCBxdWVyeSB1bnRpbAorCSAqIHdlIGdldCBjb25zaXN0ZW50IHJlc3VsdHMuIFRoaXMgdG8gcHJldmVudCByYWNlcyBiZXR3ZWVuIGdwdQorCSAqIHVwZGF0aW5nIGl0cyBoYXJkd2FyZSBjb3VudGVyIHdoaWxlIHdlIGFyZSByZXRyaWV2aW5nIHRoZQorCSAqIGNvcnJlc3BvbmRpbmcgdmJsYW5rIHRpbWVzdGFtcC4KIAkgKi8KLQljdXJfdmJsYW5rID0gZGV2LT5kcml2ZXItPmdldF92YmxhbmtfY291bnRlcihkZXYsIGNydGMpOworCWRvIHsKKwkJY3VyX3ZibGFuayA9IGRldi0+ZHJpdmVyLT5nZXRfdmJsYW5rX2NvdW50ZXIoZGV2LCBjcnRjKTsKKwkJcmMgPSBkcm1fZ2V0X2xhc3RfdmJsdGltZXN0YW1wKGRldiwgY3J0YywgJnRfdmJsYW5rLCAwKTsKKwl9IHdoaWxlIChjdXJfdmJsYW5rICE9IGRldi0+ZHJpdmVyLT5nZXRfdmJsYW5rX2NvdW50ZXIoZGV2LCBjcnRjKSk7CisKKwkvKiBEZWFsIHdpdGggY291bnRlciB3cmFwICovCiAJZGlmZiA9IGN1cl92YmxhbmsgLSBkZXYtPmxhc3RfdmJsYW5rW2NydGNdOwogCWlmIChjdXJfdmJsYW5rIDwgZGV2LT5sYXN0X3ZibGFua1tjcnRjXSkgewogCQlkaWZmICs9IGRldi0+bWF4X3ZibGFua19jb3VudDsKQEAgLTQxMyw2ICs4NTEsMTYgQEAKIAlEUk1fREVCVUcoImVuYWJsaW5nIHZibGFuayBpbnRlcnJ1cHRzIG9uIGNydGMgJWQsIG1pc3NlZCAlZFxuIiwKIAkJICBjcnRjLCBkaWZmKTsKIAorCS8qIFJlaW5pdGlhbGl6ZSBjb3JyZXNwb25kaW5nIHZibGFuayB0aW1lc3RhbXAgaWYgaGlnaC1wcmVjaXNpb24gcXVlcnkKKwkgKiBhdmFpbGFibGUuIFNraXAgdGhpcyBzdGVwIGlmIHF1ZXJ5IHVuc3VwcG9ydGVkIG9yIGZhaWxlZC4gV2lsbAorCSAqIHJlaW5pdGlhbGl6ZSBkZWxheWVkIGF0IG5leHQgdmJsYW5rIGludGVycnVwdCBpbiB0aGF0IGNhc2UuCisJICovCisJaWYgKHJjKSB7CisJCXRzbG90ID0gYXRvbWljX3JlYWQoJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSkgKyBkaWZmOworCQl2Ymxhbmt0aW1lc3RhbXAoZGV2LCBjcnRjLCB0c2xvdCkgPSB0X3ZibGFuazsKKwkJc21wX3dtYigpOworCX0KKwogCWF0b21pY19hZGQoZGlmZiwgJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSk7CiB9CiAKQEAgLTQyOSwxNSArODc3LDI3IEBACiAgKi8KIGludCBkcm1fdmJsYW5rX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKIHsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MsIGlycWZsYWdzMjsKIAlpbnQgcmV0ID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CiAJLyogR29pbmcgZnJvbSAwLT4xIG1lYW5zIHdlIGhhdmUgdG8gZW5hYmxlIGludGVycnVwdHMgYWdhaW4gKi8KIAlpZiAoYXRvbWljX2FkZF9yZXR1cm4oMSwgJmRldi0+dmJsYW5rX3JlZmNvdW50W2NydGNdKSA9PSAxKSB7CisJCS8qIERpc2FibGUgcHJlZW1wdGlvbiB3aGlsZSBob2xkaW5nIHZibGFua190aW1lX2xvY2suIERvCisJCSAqIGl0IGV4cGxpY2l0ZWx5IHRvIGd1YXJkIGFnYWluc3QgUFJFRU1QVF9SVCBrZXJuZWwuCisJCSAqLworCQlwcmVlbXB0X2Rpc2FibGUoKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dmJsYW5rX3RpbWVfbG9jaywgaXJxZmxhZ3MyKTsKIAkJaWYgKCFkZXYtPnZibGFua19lbmFibGVkW2NydGNdKSB7CisJCQkvKiBFbmFibGUgdmJsYW5rIGlycXMgdW5kZXIgdmJsYW5rX3RpbWVfbG9jayBwcm90ZWN0aW9uLgorCQkJICogQWxsIHZibGFuayBjb3VudCAmIHRpbWVzdGFtcCB1cGRhdGVzIGFyZSBoZWxkIG9mZgorCQkJICogdW50aWwgd2UgYXJlIGRvbmUgcmVpbml0aWFsaXppbmcgbWFzdGVyIGNvdW50ZXIgYW5kCisJCQkgKiB0aW1lc3RhbXBzLiBGaWx0ZXJjb2RlIGluIGRybV9oYW5kbGVfdmJsYW5rKCkgd2lsbAorCQkJICogcHJldmVudCBkb3VibGUtYWNjb3VudGluZyBvZiBzYW1lIHZibGFuayBpbnRlcnZhbC4KKwkJCSAqLwogCQkJcmV0ID0gZGV2LT5kcml2ZXItPmVuYWJsZV92YmxhbmsoZGV2LCBjcnRjKTsKLQkJCURSTV9ERUJVRygiZW5hYmxpbmcgdmJsYW5rIG9uIGNydGMgJWQsIHJldDogJWRcbiIsIGNydGMsIHJldCk7CisJCQlEUk1fREVCVUcoImVuYWJsaW5nIHZibGFuayBvbiBjcnRjICVkLCByZXQ6ICVkXG4iLAorCQkJCSAgY3J0YywgcmV0KTsKIAkJCWlmIChyZXQpCiAJCQkJYXRvbWljX2RlYygmZGV2LT52YmxhbmtfcmVmY291bnRbY3J0Y10pOwogCQkJZWxzZSB7CkBAIC00NDUsNiArOTA1LDggQEAKIAkJCQlkcm1fdXBkYXRlX3ZibGFua19jb3VudChkZXYsIGNydGMpOwogCQkJfQogCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsYW5rX3RpbWVfbG9jaywgaXJxZmxhZ3MyKTsKKwkJcHJlZW1wdF9lbmFibGUoKTsKIAl9IGVsc2UgewogCQlpZiAoIWRldi0+dmJsYW5rX2VuYWJsZWRbY3J0Y10pIHsKIAkJCWF0b21pY19kZWMoJmRldi0+dmJsYW5rX3JlZmNvdW50W2NydGNdKTsKQEAgLTQ2MywxNSArOTI1LDE3IEBACiAgKiBAY3J0Yzogd2hpY2ggY291bnRlciB0byBnaXZlIHVwCiAgKgogICogUmVsZWFzZSBvd25lcnNoaXAgb2YgYSBnaXZlbiB2YmxhbmsgY291bnRlciwgdHVybmluZyBvZmYgaW50ZXJydXB0cwotICogaWYgcG9zc2libGUuCisgKiBpZiBwb3NzaWJsZS4gRGlzYWJsZSBpbnRlcnJ1cHRzIGFmdGVyIGRybV92Ymxhbmtfb2ZmZGVsYXkgbWlsbGlzZWNvbmRzLgogICovCiB2b2lkIGRybV92YmxhbmtfcHV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewotCUJVR19PTiAoYXRvbWljX3JlYWQgKCZkZXYtPnZibGFua19yZWZjb3VudFtjcnRjXSkgPT0gMCk7CisJQlVHX09OKGF0b21pY19yZWFkKCZkZXYtPnZibGFua19yZWZjb3VudFtjcnRjXSkgPT0gMCk7CiAKIAkvKiBMYXN0IHVzZXIgc2NoZWR1bGVzIGludGVycnVwdCBkaXNhYmxlICovCi0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRldi0+dmJsYW5rX3JlZmNvdW50W2NydGNdKSkKLQkJbW9kX3RpbWVyKCZkZXYtPnZibGFua19kaXNhYmxlX3RpbWVyLCBqaWZmaWVzICsgNSpEUk1fSFopOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPnZibGFua19yZWZjb3VudFtjcnRjXSkgJiYKKwkgICAgKGRybV92Ymxhbmtfb2ZmZGVsYXkgPiAwKSkKKwkJbW9kX3RpbWVyKCZkZXYtPnZibGFua19kaXNhYmxlX3RpbWVyLAorCQkJICBqaWZmaWVzICsgKChkcm1fdmJsYW5rX29mZmRlbGF5ICogRFJNX0haKS8xMDAwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfcHV0KTsKIApAQCAtNDgwLDEwICs5NDQsOCBAQAogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwotCWRldi0+ZHJpdmVyLT5kaXNhYmxlX3ZibGFuayhkZXYsIGNydGMpOworCXZibGFua19kaXNhYmxlX2FuZF9zYXZlKGRldiwgY3J0Yyk7CiAJRFJNX1dBS0VVUCgmZGV2LT52YmxfcXVldWVbY3J0Y10pOwotCWRldi0+dmJsYW5rX2VuYWJsZWRbY3J0Y10gPSAwOwotCWRldi0+bGFzdF92YmxhbmtbY3J0Y10gPSBkZXYtPmRyaXZlci0+Z2V0X3ZibGFua19jb3VudGVyKGRldiwgY3J0Yyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX29mZik7CkBAIC02MDIsNyArMTA2NCw2IEBACiAJZS0+YmFzZS5maWxlX3ByaXYgPSBmaWxlX3ByaXY7CiAJZS0+YmFzZS5kZXN0cm95ID0gKHZvaWQgKCopIChzdHJ1Y3QgZHJtX3BlbmRpbmdfZXZlbnQgKikpIGtmcmVlOwogCi0JZG9fZ2V0dGltZW9mZGF5KCZub3cpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAogCWlmIChmaWxlX3ByaXYtPmV2ZW50X3NwYWNlIDwgc2l6ZW9mIGUtPmV2ZW50KSB7CkBAIC02MTEsNyArMTA3Miw4IEBACiAJfQogCiAJZmlsZV9wcml2LT5ldmVudF9zcGFjZSAtPSBzaXplb2YgZS0+ZXZlbnQ7Ci0Jc2VxID0gZHJtX3ZibGFua19jb3VudChkZXYsIHBpcGUpOworCXNlcSA9IGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUoZGV2LCBwaXBlLCAmbm93KTsKKwogCWlmICgodmJsd2FpdC0+cmVxdWVzdC50eXBlICYgX0RSTV9WQkxBTktfTkVYVE9OTUlTUykgJiYKIAkgICAgKHNlcSAtIHZibHdhaXQtPnJlcXVlc3Quc2VxdWVuY2UpIDw9ICgxIDw8IDIzKSkgewogCQl2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlID0gc2VxICsgMTsKQEAgLTYyNiwxNSArMTA4OCwxOCBAQAogCiAJZS0+ZXZlbnQuc2VxdWVuY2UgPSB2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlOwogCWlmICgoc2VxIC0gdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSB7CisJCWUtPmV2ZW50LnNlcXVlbmNlID0gc2VxOwogCQllLT5ldmVudC50dl9zZWMgPSBub3cudHZfc2VjOwogCQllLT5ldmVudC50dl91c2VjID0gbm93LnR2X3VzZWM7CiAJCWRybV92YmxhbmtfcHV0KGRldiwgcGlwZSk7CiAJCWxpc3RfYWRkX3RhaWwoJmUtPmJhc2UubGluaywgJmUtPmJhc2UuZmlsZV9wcml2LT5ldmVudF9saXN0KTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZlLT5iYXNlLmZpbGVfcHJpdi0+ZXZlbnRfd2FpdCk7CisJCXZibHdhaXQtPnJlcGx5LnNlcXVlbmNlID0gc2VxOwogCQl0cmFjZV9kcm1fdmJsYW5rX2V2ZW50X2RlbGl2ZXJlZChjdXJyZW50LT5waWQsIHBpcGUsCiAJCQkJCQkgdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSk7CiAJfSBlbHNlIHsKIAkJbGlzdF9hZGRfdGFpbCgmZS0+YmFzZS5saW5rLCAmZGV2LT52YmxhbmtfZXZlbnRfbGlzdCk7CisJCXZibHdhaXQtPnJlcGx5LnNlcXVlbmNlID0gdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKQEAgLTcyNywxMSArMTE5MiwxMCBAQAogCWlmIChyZXQgIT0gLUVJTlRSKSB7CiAJCXN0cnVjdCB0aW1ldmFsIG5vdzsKIAotCQlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7Ci0KKwkJdmJsd2FpdC0+cmVwbHkuc2VxdWVuY2UgPSBkcm1fdmJsYW5rX2NvdW50X2FuZF90aW1lKGRldiwgY3J0YywgJm5vdyk7CiAJCXZibHdhaXQtPnJlcGx5LnR2YWxfc2VjID0gbm93LnR2X3NlYzsKIAkJdmJsd2FpdC0+cmVwbHkudHZhbF91c2VjID0gbm93LnR2X3VzZWM7Ci0JCXZibHdhaXQtPnJlcGx5LnNlcXVlbmNlID0gZHJtX3ZibGFua19jb3VudChkZXYsIGNydGMpOworCiAJCURSTV9ERUJVRygicmV0dXJuaW5nICVkIHRvIGNsaWVudFxuIiwKIAkJCSAgdmJsd2FpdC0+cmVwbHkuc2VxdWVuY2UpOwogCX0gZWxzZSB7CkBAIC03NTAsOCArMTIxNCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgc2VxOwogCi0JZG9fZ2V0dGltZW9mZGF5KCZub3cpOwotCXNlcSA9IGRybV92YmxhbmtfY291bnQoZGV2LCBjcnRjKTsKKwlzZXEgPSBkcm1fdmJsYW5rX2NvdW50X2FuZF90aW1lKGRldiwgY3J0YywgJm5vdyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CiAKQEAgLTc4OSwxMSArMTI1Miw2NCBAQAogICovCiB2b2lkIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogeworCXUzMiB2Ymxjb3VudDsKKwlzNjQgZGlmZl9uczsKKwlzdHJ1Y3QgdGltZXZhbCB0dmJsYW5rOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKIAlpZiAoIWRldi0+bnVtX2NydGNzKQogCQlyZXR1cm47CiAKLQlhdG9taWNfaW5jKCZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pOworCS8qIE5lZWQgdGltZXN0YW1wIGxvY2sgdG8gcHJldmVudCBjb25jdXJyZW50IGV4ZWN1dGlvbiB3aXRoCisJICogdmJsYW5rIGVuYWJsZS9kaXNhYmxlLCBhcyB0aGlzIHdvdWxkIGNhdXNlIGluY29uc2lzdGVudAorCSAqIG9yIGNvcnJ1cHRlZCB0aW1lc3RhbXBzIGFuZCB2YmxhbmsgY291bnRzLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibGFua190aW1lX2xvY2ssIGlycWZsYWdzKTsKKworCS8qIFZibGFuayBpcnEgaGFuZGxpbmcgZGlzYWJsZWQuIE5vdGhpbmcgdG8gZG8uICovCisJaWYgKCFkZXYtPnZibGFua19lbmFibGVkW2NydGNdKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsYW5rX3RpbWVfbG9jaywgaXJxZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogRmV0Y2ggY29ycmVzcG9uZGluZyB0aW1lc3RhbXAgZm9yIHRoaXMgdmJsYW5rIGludGVydmFsIGZyb20KKwkgKiBkcml2ZXIgYW5kIHN0b3JlIGl0IGluIHByb3BlciBzbG90IG9mIHRpbWVzdGFtcCByaW5nYnVmZmVyLgorCSAqLworCisJLyogR2V0IGN1cnJlbnQgdGltZXN0YW1wIGFuZCBjb3VudC4gKi8KKwl2Ymxjb3VudCA9IGF0b21pY19yZWFkKCZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pOworCWRybV9nZXRfbGFzdF92Ymx0aW1lc3RhbXAoZGV2LCBjcnRjLCAmdHZibGFuaywgRFJNX0NBTExFRF9GUk9NX1ZCTElSUSk7CisKKwkvKiBDb21wdXRlIHRpbWUgZGlmZmVyZW5jZSB0byB0aW1lc3RhbXAgb2YgbGFzdCB2YmxhbmsgKi8KKwlkaWZmX25zID0gdGltZXZhbF90b19ucygmdHZibGFuaykgLQorCQkgIHRpbWV2YWxfdG9fbnMoJnZibGFua3RpbWVzdGFtcChkZXYsIGNydGMsIHZibGNvdW50KSk7CisKKwkvKiBVcGRhdGUgdmJsYW5rIHRpbWVzdGFtcCBhbmQgY291bnQgaWYgYXQgbGVhc3QKKwkgKiBEUk1fUkVEVU5EQU5UX1ZCTElSUV9USFJFU0hfTlMgbmFub3NlY29uZHMKKwkgKiBkaWZmZXJlbmNlIGJldHdlZW4gbGFzdCBzdG9yZWQgdGltZXN0YW1wIGFuZCBjdXJyZW50CisJICogdGltZXN0YW1wLiBBIHNtYWxsZXIgZGlmZmVyZW5jZSBtZWFucyBiYXNpY2FsbHkKKwkgKiBpZGVudGljYWwgdGltZXN0YW1wcy4gSGFwcGVucyBpZiB0aGlzIHZibGFuayBoYXMKKwkgKiBiZWVuIGFscmVhZHkgcHJvY2Vzc2VkIGFuZCB0aGlzIGlzIGEgcmVkdW5kYW50IGNhbGwsCisJICogZS5nLiwgZHVlIHRvIHNwdXJpb3VzIHZibGFuayBpbnRlcnJ1cHRzLiBXZSBuZWVkIHRvCisJICogaWdub3JlIHRob3NlIGZvciBhY2NvdW50aW5nLgorCSAqLworCWlmIChhYnMoZGlmZl9ucykgPiBEUk1fUkVEVU5EQU5UX1ZCTElSUV9USFJFU0hfTlMpIHsKKwkJLyogU3RvcmUgbmV3IHRpbWVzdGFtcCBpbiByaW5nYnVmZmVyLiAqLworCQl2Ymxhbmt0aW1lc3RhbXAoZGV2LCBjcnRjLCB2Ymxjb3VudCArIDEpID0gdHZibGFuazsKKwkJc21wX3dtYigpOworCisJCS8qIEluY3JlbWVudCBjb29rZWQgdmJsYW5rIGNvdW50LiBUaGlzIGFsc28gYXRvbWljYWxseSBjb21taXRzCisJCSAqIHRoZSB0aW1lc3RhbXAgY29tcHV0ZWQgYWJvdmUuCisJCSAqLworCQlhdG9taWNfaW5jKCZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pOworCX0gZWxzZSB7CisJCURSTV9ERUJVRygiY3J0YyAlZDogUmVkdW5kYW50IHZibGlycSBpZ25vcmVkLiBkaWZmX25zID0gJWRcbiIsCisJCQkgIGNydGMsIChpbnQpIGRpZmZfbnMpOworCX0KKwogCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlW2NydGNdKTsKIAlkcm1faGFuZGxlX3ZibGFua19ldmVudHMoZGV2LCBjcnRjKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsYW5rX3RpbWVfbG9jaywgaXJxZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChkcm1faGFuZGxlX3ZibGFuayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKaW5kZXggYTZiZmMzMC4uYzU5NTE1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYwpAQCAtMzkyLDEwICszOTIsMzYgQEAKIAltbS0+c2Nhbm5lZF9ibG9ja3MgPSAwOwogCW1tLT5zY2FuX2hpdF9zdGFydCA9IDA7CiAJbW0tPnNjYW5faGl0X3NpemUgPSAwOworCW1tLT5zY2FuX2NoZWNrX3JhbmdlID0gMDsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX21tX2luaXRfc2Nhbik7CiAKIC8qKgorICogSW5pdGlhbGl6YSBscnUgc2Nhbm5pbmcuCisgKgorICogVGhpcyBzaW1wbHkgc2V0cyB1cCB0aGUgc2Nhbm5pbmcgcm91dGluZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGRlc2lyZWQKKyAqIGhvbGUuIFRoaXMgdmVyc2lvbiBpcyBmb3IgcmFuZ2UtcmVzdHJpY3RlZCBzY2Fucy4KKyAqCisgKiBXYXJuaW5nOiBBcyBsb25nIGFzIHRoZSBzY2FuIGxpc3QgaXMgbm9uLWVtcHR5LCBubyBvdGhlciBvcGVyYXRpb25zIHRoYW4KKyAqIGFkZGluZy9yZW1vdmluZyBub2RlcyB0by9mcm9tIHRoZSBzY2FuIGxpc3QgYXJlIGFsbG93ZWQuCisgKi8KK3ZvaWQgZHJtX21tX2luaXRfc2Nhbl93aXRoX3JhbmdlKHN0cnVjdCBkcm1fbW0gKm1tLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJIHVuc2lnbmVkIGFsaWdubWVudCwKKwkJCQkgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJbW0tPnNjYW5fYWxpZ25tZW50ID0gYWxpZ25tZW50OworCW1tLT5zY2FuX3NpemUgPSBzaXplOworCW1tLT5zY2FubmVkX2Jsb2NrcyA9IDA7CisJbW0tPnNjYW5faGl0X3N0YXJ0ID0gMDsKKwltbS0+c2Nhbl9oaXRfc2l6ZSA9IDA7CisJbW0tPnNjYW5fc3RhcnQgPSBzdGFydDsKKwltbS0+c2Nhbl9lbmQgPSBlbmQ7CisJbW0tPnNjYW5fY2hlY2tfcmFuZ2UgPSAxOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW1faW5pdF9zY2FuX3dpdGhfcmFuZ2UpOworCisvKioKICAqIEFkZCBhIG5vZGUgdG8gdGhlIHNjYW4gbGlzdCB0aGF0IG1pZ2h0IGJlIGZyZWVkIHRvIG1ha2Ugc3BhY2UgZm9yIHRoZSBkZXNpcmVkCiAgKiBob2xlLgogICoKQEAgLTQwNiw2ICs0MzIsOCBAQAogCXN0cnVjdCBkcm1fbW0gKm1tID0gbm9kZS0+bW07CiAJc3RydWN0IGxpc3RfaGVhZCAqcHJldl9mcmVlLCAqbmV4dF9mcmVlOwogCXN0cnVjdCBkcm1fbW1fbm9kZSAqcHJldl9ub2RlLCAqbmV4dF9ub2RlOworCXVuc2lnbmVkIGxvbmcgYWRqX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgYWRqX2VuZDsKIAogCW1tLT5zY2FubmVkX2Jsb2NrcysrOwogCkBAIC00NTIsNyArNDgwLDE3IEBACiAJbm9kZS0+ZnJlZV9zdGFjay5wcmV2ID0gcHJldl9mcmVlOwogCW5vZGUtPmZyZWVfc3RhY2submV4dCA9IG5leHRfZnJlZTsKIAotCWlmIChjaGVja19mcmVlX2hvbGUobm9kZS0+c3RhcnQsIG5vZGUtPnN0YXJ0ICsgbm9kZS0+c2l6ZSwKKwlpZiAobW0tPnNjYW5fY2hlY2tfcmFuZ2UpIHsKKwkJYWRqX3N0YXJ0ID0gbm9kZS0+c3RhcnQgPCBtbS0+c2Nhbl9zdGFydCA/CisJCQltbS0+c2Nhbl9zdGFydCA6IG5vZGUtPnN0YXJ0OworCQlhZGpfZW5kID0gbm9kZS0+c3RhcnQgKyBub2RlLT5zaXplID4gbW0tPnNjYW5fZW5kID8KKwkJCW1tLT5zY2FuX2VuZCA6IG5vZGUtPnN0YXJ0ICsgbm9kZS0+c2l6ZTsKKwl9IGVsc2UgeworCQlhZGpfc3RhcnQgPSBub2RlLT5zdGFydDsKKwkJYWRqX2VuZCA9IG5vZGUtPnN0YXJ0ICsgbm9kZS0+c2l6ZTsKKwl9CisKKwlpZiAoY2hlY2tfZnJlZV9ob2xlKGFkal9zdGFydCAsIGFkal9lbmQsCiAJCQkgICAgbW0tPnNjYW5fc2l6ZSwgbW0tPnNjYW5fYWxpZ25tZW50KSkgewogCQltbS0+c2Nhbl9oaXRfc3RhcnQgPSBub2RlLT5zdGFydDsKIAkJbW0tPnNjYW5faGl0X3NpemUgPSBub2RlLT5zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYwppbmRleCBjZGM4OWVlLi5kNTllZGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYwpAQCAtNDAsMTIgKzQwLDIyIEBACiB1bnNpZ25lZCBpbnQgZHJtX2RlYnVnID0gMDsJLyogMSB0byBlbmFibGUgZGVidWcgb3V0cHV0ICovCiBFWFBPUlRfU1lNQk9MKGRybV9kZWJ1Zyk7CiAKK3Vuc2lnbmVkIGludCBkcm1fdmJsYW5rX29mZmRlbGF5ID0gNTAwMDsgICAgLyogRGVmYXVsdCB0byA1MDAwIG1zZWNzLiAqLworRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX29mZmRlbGF5KTsKKwordW5zaWduZWQgaW50IGRybV90aW1lc3RhbXBfcHJlY2lzaW9uID0gMjA7ICAvKiBEZWZhdWx0IHRvIDIwIHVzZWNzLiAqLworRVhQT1JUX1NZTUJPTChkcm1fdGltZXN0YW1wX3ByZWNpc2lvbik7CisKIE1PRFVMRV9BVVRIT1IoQ09SRV9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKENPUkVfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1ZyBvdXRwdXQiKTsKK01PRFVMRV9QQVJNX0RFU0ModmJsYW5rb2ZmZGVsYXksICJEZWxheSB1bnRpbCB2YmxhbmsgaXJxIGF1dG8tZGlzYWJsZSBbbXNlY3NdIik7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVzdGFtcF9wcmVjaXNpb25fdXNlYywgIk1heC4gZXJyb3Igb24gdGltZXN0YW1wcyBbdXNlY3NdIik7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZHJtX2RlYnVnLCBpbnQsIDA2MDApOworbW9kdWxlX3BhcmFtX25hbWVkKHZibGFua29mZmRlbGF5LCBkcm1fdmJsYW5rX29mZmRlbGF5LCBpbnQsIDA2MDApOworbW9kdWxlX3BhcmFtX25hbWVkKHRpbWVzdGFtcF9wcmVjaXNpb25fdXNlYywgZHJtX3RpbWVzdGFtcF9wcmVjaXNpb24sIGludCwgMDYwMCk7CiAKIHN0cnVjdCBpZHIgZHJtX21pbm9yc19pZHI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggZmRjODMzZC4uMGFlNmE3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTksNiArOSw4IEBACiAJICBpOTE1X2dlbS5vIFwKIAkgIGk5MTVfZ2VtX2RlYnVnLm8gXAogCSAgaTkxNV9nZW1fZXZpY3QubyBcCisJICBpOTE1X2dlbV9leGVjYnVmZmVyLm8gXAorCSAgaTkxNV9nZW1fZ3R0Lm8gXAogCSAgaTkxNV9nZW1fdGlsaW5nLm8gXAogCSAgaTkxNV90cmFjZV9wb2ludHMubyBcCiAJICBpbnRlbF9kaXNwbGF5Lm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwppbmRleCAxZjRmM2NlLi4xOWEzZDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF9yaW5nYnVmZmVyLmgiCiAjaW5jbHVkZSAiaTkxNV9kcm0uaCIKICNpbmNsdWRlICJpOTE1X2Rydi5oIgogCkBAIC03Miw3ICs3Myw2IEBACiAJQihpc19icm9hZHdhdGVyKTsKIAlCKGlzX2NyZXN0bGluZSk7CiAJQihoYXNfZmJjKTsKLQlCKGhhc19yYzYpOwogCUIoaGFzX3BpcGVfY3hzcik7CiAJQihoYXNfaG90cGx1Zyk7CiAJQihjdXJzb3JfbmVlZHNfcGh5c2ljYWwpOwpAQCAtODYsMTkgKzg2LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICpnZXRfcGluX2ZsYWcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2KQorc3RhdGljIGNvbnN0IGNoYXIgKmdldF9waW5fZmxhZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewotCWlmIChvYmpfcHJpdi0+dXNlcl9waW5fY291bnQgPiAwKQorCWlmIChvYmotPnVzZXJfcGluX2NvdW50ID4gMCkKIAkJcmV0dXJuICJQIjsKLQllbHNlIGlmIChvYmpfcHJpdi0+cGluX2NvdW50ID4gMCkKKwllbHNlIGlmIChvYmotPnBpbl9jb3VudCA+IDApCiAJCXJldHVybiAicCI7CiAJZWxzZQogCQlyZXR1cm4gIiAiOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X3RpbGluZ19mbGFnKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdikKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfdGlsaW5nX2ZsYWcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLSAgICBzd2l0Y2ggKG9ial9wcml2LT50aWxpbmdfbW9kZSkgeworICAgIHN3aXRjaCAob2JqLT50aWxpbmdfbW9kZSkgewogICAgIGRlZmF1bHQ6CiAgICAgY2FzZSBJOTE1X1RJTElOR19OT05FOiByZXR1cm4gIiAiOwogICAgIGNhc2UgSTkxNV9USUxJTkdfWDogcmV0dXJuICJYIjsKQEAgLTEwNiwxMCArMTA2LDE5IEBACiAgICAgfQogfQogCitzdGF0aWMgY29uc3QgY2hhciAqYWdwX3R5cGVfc3RyKGludCB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgMDogcmV0dXJuICIgdW5jYWNoZWQiOworCWNhc2UgMTogcmV0dXJuICIgc25vb3BlZCI7CisJZGVmYXVsdDogcmV0dXJuICIiOworCX0KK30KKwogc3RhdGljIHZvaWQKIGRlc2NyaWJlX29iaihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0Jc2VxX3ByaW50ZihtLCAiJXA6ICVzJXMgJTh6ZCAlMDh4ICUwOHggJWQlcyVzIiwKKwlzZXFfcHJpbnRmKG0sICIlcDogJXMlcyAlOHpkICUwNHggJTA0eCAlZCAlZCVzJXMlcyIsCiAJCSAgICZvYmotPmJhc2UsCiAJCSAgIGdldF9waW5fZmxhZyhvYmopLAogCQkgICBnZXRfdGlsaW5nX2ZsYWcob2JqKSwKQEAgLTExNyw2ICsxMjYsOCBAQAogCQkgICBvYmotPmJhc2UucmVhZF9kb21haW5zLAogCQkgICBvYmotPmJhc2Uud3JpdGVfZG9tYWluLAogCQkgICBvYmotPmxhc3RfcmVuZGVyaW5nX3NlcW5vLAorCQkgICBvYmotPmxhc3RfZmVuY2VkX3NlcW5vLAorCQkgICBhZ3BfdHlwZV9zdHIob2JqLT5hZ3BfdHlwZSA9PSBBR1BfVVNFUl9DQUNIRURfTUVNT1JZKSwKIAkJICAgb2JqLT5kaXJ0eSA/ICIgZGlydHkiIDogIiIsCiAJCSAgIG9iai0+bWFkdiA9PSBJOTE1X01BRFZfRE9OVE5FRUQgPyAiIHB1cmdlYWJsZSIgOiAiIik7CiAJaWYgKG9iai0+YmFzZS5uYW1lKQpAQCAtMTI0LDcgKzEzNSwxNyBAQAogCWlmIChvYmotPmZlbmNlX3JlZyAhPSBJOTE1X0ZFTkNFX1JFR19OT05FKQogCQlzZXFfcHJpbnRmKG0sICIgKGZlbmNlOiAlZCkiLCBvYmotPmZlbmNlX3JlZyk7CiAJaWYgKG9iai0+Z3R0X3NwYWNlICE9IE5VTEwpCi0JCXNlcV9wcmludGYobSwgIiAoZ3R0X29mZnNldDogJTA4eCkiLCBvYmotPmd0dF9vZmZzZXQpOworCQlzZXFfcHJpbnRmKG0sICIgKGd0dCBvZmZzZXQ6ICUwOHgsIHNpemU6ICUwOHgpIiwKKwkJCSAgIG9iai0+Z3R0X29mZnNldCwgKHVuc2lnbmVkIGludClvYmotPmd0dF9zcGFjZS0+c2l6ZSk7CisJaWYgKG9iai0+cGluX21hcHBhYmxlIHx8IG9iai0+ZmF1bHRfbWFwcGFibGUpIHsKKwkJY2hhciBzWzNdLCAqdCA9IHM7CisJCWlmIChvYmotPnBpbl9tYXBwYWJsZSkKKwkJCSp0KysgPSAncCc7CisJCWlmIChvYmotPmZhdWx0X21hcHBhYmxlKQorCQkJKnQrKyA9ICdmJzsKKwkJKnQgPSAnXDAnOworCQlzZXFfcHJpbnRmKG0sICIgKCVzIG1hcHBhYmxlKSIsIHMpOworCX0KIAlpZiAob2JqLT5yaW5nICE9IE5VTEwpCiAJCXNlcV9wcmludGYobSwgIiAoJXMpIiwgb2JqLT5yaW5nLT5uYW1lKTsKIH0KQEAgLTEzNiw3ICsxNTcsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJc2l6ZV90IHRvdGFsX29ial9zaXplLCB0b3RhbF9ndHRfc2l6ZTsKIAlpbnQgY291bnQsIHJldDsKIApAQCAtMTcxLDEyICsxOTIsMTIgQEAKIAl9CiAKIAl0b3RhbF9vYmpfc2l6ZSA9IHRvdGFsX2d0dF9zaXplID0gY291bnQgPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsIGhlYWQsIG1tX2xpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgaGVhZCwgbW1fbGlzdCkgewogCQlzZXFfcHJpbnRmKG0sICIgICAiKTsKLQkJZGVzY3JpYmVfb2JqKG0sIG9ial9wcml2KTsKKwkJZGVzY3JpYmVfb2JqKG0sIG9iaik7CiAJCXNlcV9wcmludGYobSwgIlxuIik7Ci0JCXRvdGFsX29ial9zaXplICs9IG9ial9wcml2LT5iYXNlLnNpemU7Ci0JCXRvdGFsX2d0dF9zaXplICs9IG9ial9wcml2LT5ndHRfc3BhY2UtPnNpemU7CisJCXRvdGFsX29ial9zaXplICs9IG9iai0+YmFzZS5zaXplOworCQl0b3RhbF9ndHRfc2l6ZSArPSBvYmotPmd0dF9zcGFjZS0+c2l6ZTsKIAkJY291bnQrKzsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CkBAIC0xODYsMzAgKzIwNywxMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBjb3VudF9vYmplY3RzKGxpc3QsIG1lbWJlcikgZG8geyBcCisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosIGxpc3QsIG1lbWJlcikgeyBcCisJCXNpemUgKz0gb2JqLT5ndHRfc3BhY2UtPnNpemU7IFwKKwkJKytjb3VudDsgXAorCQlpZiAob2JqLT5tYXBfYW5kX2ZlbmNlYWJsZSkgeyBcCisJCQltYXBwYWJsZV9zaXplICs9IG9iai0+Z3R0X3NwYWNlLT5zaXplOyBcCisJCQkrK21hcHBhYmxlX2NvdW50OyBcCisJCX0gXAorCX0gXAorfSB3aGlsZSgwKQorCiBzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCogZGF0YSkKIHsKIAlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIGNvdW50LCBtYXBwYWJsZV9jb3VudDsKKwlzaXplX3Qgc2l6ZSwgbWFwcGFibGVfc2l6ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCWludCByZXQ7CiAKIAlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+c3RydWN0X211dGV4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0Jc2VxX3ByaW50ZihtLCAiJXUgb2JqZWN0c1xuIiwgZGV2X3ByaXYtPm1tLm9iamVjdF9jb3VudCk7Ci0Jc2VxX3ByaW50ZihtLCAiJXp1IG9iamVjdCBieXRlc1xuIiwgZGV2X3ByaXYtPm1tLm9iamVjdF9tZW1vcnkpOwotCXNlcV9wcmludGYobSwgIiV1IHBpbm5lZFxuIiwgZGV2X3ByaXYtPm1tLnBpbl9jb3VudCk7Ci0Jc2VxX3ByaW50ZihtLCAiJXp1IHBpbiBieXRlc1xuIiwgZGV2X3ByaXYtPm1tLnBpbl9tZW1vcnkpOwotCXNlcV9wcmludGYobSwgIiV1IG9iamVjdHMgaW4gZ3R0XG4iLCBkZXZfcHJpdi0+bW0uZ3R0X2NvdW50KTsKLQlzZXFfcHJpbnRmKG0sICIlenUgZ3R0IGJ5dGVzXG4iLCBkZXZfcHJpdi0+bW0uZ3R0X21lbW9yeSk7Ci0Jc2VxX3ByaW50ZihtLCAiJXp1IGd0dCB0b3RhbFxuIiwgZGV2X3ByaXYtPm1tLmd0dF90b3RhbCk7CisJc2VxX3ByaW50ZihtLCAiJXUgb2JqZWN0cywgJXp1IGJ5dGVzXG4iLAorCQkgICBkZXZfcHJpdi0+bW0ub2JqZWN0X2NvdW50LAorCQkgICBkZXZfcHJpdi0+bW0ub2JqZWN0X21lbW9yeSk7CisKKwlzaXplID0gY291bnQgPSBtYXBwYWJsZV9zaXplID0gbWFwcGFibGVfY291bnQgPSAwOworCWNvdW50X29iamVjdHMoJmRldl9wcml2LT5tbS5ndHRfbGlzdCwgZ3R0X2xpc3QpOworCXNlcV9wcmludGYobSwgIiV1IFsldV0gb2JqZWN0cywgJXp1IFslenVdIGJ5dGVzIGluIGd0dFxuIiwKKwkJICAgY291bnQsIG1hcHBhYmxlX2NvdW50LCBzaXplLCBtYXBwYWJsZV9zaXplKTsKKworCXNpemUgPSBjb3VudCA9IG1hcHBhYmxlX3NpemUgPSBtYXBwYWJsZV9jb3VudCA9IDA7CisJY291bnRfb2JqZWN0cygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LCBtbV9saXN0KTsKKwljb3VudF9vYmplY3RzKCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwgbW1fbGlzdCk7CisJc2VxX3ByaW50ZihtLCAiICAldSBbJXVdIGFjdGl2ZSBvYmplY3RzLCAlenUgWyV6dV0gYnl0ZXNcbiIsCisJCSAgIGNvdW50LCBtYXBwYWJsZV9jb3VudCwgc2l6ZSwgbWFwcGFibGVfc2l6ZSk7CisKKwlzaXplID0gY291bnQgPSBtYXBwYWJsZV9zaXplID0gbWFwcGFibGVfY291bnQgPSAwOworCWNvdW50X29iamVjdHMoJmRldl9wcml2LT5tbS5waW5uZWRfbGlzdCwgbW1fbGlzdCk7CisJc2VxX3ByaW50ZihtLCAiICAldSBbJXVdIHBpbm5lZCBvYmplY3RzLCAlenUgWyV6dV0gYnl0ZXNcbiIsCisJCSAgIGNvdW50LCBtYXBwYWJsZV9jb3VudCwgc2l6ZSwgbWFwcGFibGVfc2l6ZSk7CisKKwlzaXplID0gY291bnQgPSBtYXBwYWJsZV9zaXplID0gbWFwcGFibGVfY291bnQgPSAwOworCWNvdW50X29iamVjdHMoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0LCBtbV9saXN0KTsKKwlzZXFfcHJpbnRmKG0sICIgICV1IFsldV0gaW5hY3RpdmUgb2JqZWN0cywgJXp1IFslenVdIGJ5dGVzXG4iLAorCQkgICBjb3VudCwgbWFwcGFibGVfY291bnQsIHNpemUsIG1hcHBhYmxlX3NpemUpOworCisJc2l6ZSA9IGNvdW50ID0gbWFwcGFibGVfc2l6ZSA9IG1hcHBhYmxlX2NvdW50ID0gMDsKKwljb3VudF9vYmplY3RzKCZkZXZfcHJpdi0+bW0uZGVmZXJyZWRfZnJlZV9saXN0LCBtbV9saXN0KTsKKwlzZXFfcHJpbnRmKG0sICIgICV1IFsldV0gZnJlZWQgb2JqZWN0cywgJXp1IFslenVdIGJ5dGVzXG4iLAorCQkgICBjb3VudCwgbWFwcGFibGVfY291bnQsIHNpemUsIG1hcHBhYmxlX3NpemUpOworCisJc2l6ZSA9IGNvdW50ID0gbWFwcGFibGVfc2l6ZSA9IG1hcHBhYmxlX2NvdW50ID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgJmRldl9wcml2LT5tbS5ndHRfbGlzdCwgZ3R0X2xpc3QpIHsKKwkJaWYgKG9iai0+ZmF1bHRfbWFwcGFibGUpIHsKKwkJCXNpemUgKz0gb2JqLT5ndHRfc3BhY2UtPnNpemU7CisJCQkrK2NvdW50OworCQl9CisJCWlmIChvYmotPnBpbl9tYXBwYWJsZSkgeworCQkJbWFwcGFibGVfc2l6ZSArPSBvYmotPmd0dF9zcGFjZS0+c2l6ZTsKKwkJCSsrbWFwcGFibGVfY291bnQ7CisJCX0KKwl9CisJc2VxX3ByaW50ZihtLCAiJXUgcGlubmVkIG1hcHBhYmxlIG9iamVjdHMsICV6dSBieXRlc1xuIiwKKwkJICAgbWFwcGFibGVfY291bnQsIG1hcHBhYmxlX3NpemUpOworCXNlcV9wcmludGYobSwgIiV1IGZhdWx0IG1hcHBhYmxlIG9iamVjdHMsICV6dSBieXRlc1xuIiwKKwkJICAgY291bnQsIHNpemUpOworCisJc2VxX3ByaW50ZihtLCAiJXp1IFslenVdIGd0dCB0b3RhbFxuIiwKKwkJICAgZGV2X3ByaXYtPm1tLmd0dF90b3RhbCwgZGV2X3ByaXYtPm1tLm1hcHBhYmxlX2d0dF90b3RhbCk7CiAKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGk5MTVfZ2VtX2d0dF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCogZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlzaXplX3QgdG90YWxfb2JqX3NpemUsIHRvdGFsX2d0dF9zaXplOworCWludCBjb3VudCwgcmV0OworCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXRvdGFsX29ial9zaXplID0gdG90YWxfZ3R0X3NpemUgPSBjb3VudCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZkZXZfcHJpdi0+bW0uZ3R0X2xpc3QsIGd0dF9saXN0KSB7CisJCXNlcV9wcmludGYobSwgIiAgICIpOworCQlkZXNjcmliZV9vYmoobSwgb2JqKTsKKwkJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwkJdG90YWxfb2JqX3NpemUgKz0gb2JqLT5iYXNlLnNpemU7CisJCXRvdGFsX2d0dF9zaXplICs9IG9iai0+Z3R0X3NwYWNlLT5zaXplOworCQljb3VudCsrOworCX0KKworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJc2VxX3ByaW50ZihtLCAiVG90YWwgJWQgb2JqZWN0cywgJXp1IGJ5dGVzLCAlenUgR1RUIHNpemVcbiIsCisJCSAgIGNvdW50LCB0b3RhbF9vYmpfc2l6ZSwgdG90YWxfZ3R0X3NpemUpOworCisJcmV0dXJuIDA7Cit9CisKIAogc3RhdGljIGludCBpOTE1X2dlbV9wYWdlZmxpcF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIHsKQEAgLTI0MywxNCArMzUwLDE0IEBACiAJCQlzZXFfcHJpbnRmKG0sICIlZCBwcmVwYXJlc1xuIiwgd29yay0+cGVuZGluZyk7CiAKIAkJCWlmICh3b3JrLT5vbGRfZmJfb2JqKSB7Ci0JCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8od29yay0+b2xkX2ZiX29iaik7Ci0JCQkJaWYob2JqX3ByaXYpCi0JCQkJCXNlcV9wcmludGYobSwgIk9sZCBmcmFtZWJ1ZmZlciBndHRfb2Zmc2V0IDB4JTA4eFxuIiwgb2JqX3ByaXYtPmd0dF9vZmZzZXQgKTsKKwkJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gd29yay0+b2xkX2ZiX29iajsKKwkJCQlpZiAob2JqKQorCQkJCQlzZXFfcHJpbnRmKG0sICJPbGQgZnJhbWVidWZmZXIgZ3R0X29mZnNldCAweCUwOHhcbiIsIG9iai0+Z3R0X29mZnNldCk7CiAJCQl9CiAJCQlpZiAod29yay0+cGVuZGluZ19mbGlwX29iaikgewotCQkJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKHdvcmstPnBlbmRpbmdfZmxpcF9vYmopOwotCQkJCWlmKG9ial9wcml2KQotCQkJCQlzZXFfcHJpbnRmKG0sICJOZXcgZnJhbWVidWZmZXIgZ3R0X29mZnNldCAweCUwOHhcbiIsIG9ial9wcml2LT5ndHRfb2Zmc2V0ICk7CisJCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHdvcmstPnBlbmRpbmdfZmxpcF9vYmo7CisJCQkJaWYgKG9iaikKKwkJCQkJc2VxX3ByaW50ZihtLCAiTmV3IGZyYW1lYnVmZmVyIGd0dF9vZmZzZXQgMHglMDh4XG4iLCBvYmotPmd0dF9vZmZzZXQpOwogCQkJfQogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwpAQCAtMjY1LDQ0ICszNzIsODAgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKmdlbV9yZXF1ZXN0OwotCWludCByZXQ7CisJaW50IHJldCwgY291bnQ7CiAKIAlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+c3RydWN0X211dGV4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0Jc2VxX3ByaW50ZihtLCAiUmVxdWVzdDpcbiIpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2VtX3JlcXVlc3QsICZkZXZfcHJpdi0+cmVuZGVyX3JpbmcucmVxdWVzdF9saXN0LAotCQkJbGlzdCkgewotCQlzZXFfcHJpbnRmKG0sICIgICAgJWQgQCAlZFxuIiwKLQkJCSAgIGdlbV9yZXF1ZXN0LT5zZXFubywKLQkJCSAgIChpbnQpIChqaWZmaWVzIC0gZ2VtX3JlcXVlc3QtPmVtaXR0ZWRfamlmZmllcykpOworCWNvdW50ID0gMDsKKwlpZiAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5yaW5nW1JDU10ucmVxdWVzdF9saXN0KSkgeworCQlzZXFfcHJpbnRmKG0sICJSZW5kZXIgcmVxdWVzdHM6XG4iKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShnZW1fcmVxdWVzdCwKKwkJCQkgICAgJmRldl9wcml2LT5yaW5nW1JDU10ucmVxdWVzdF9saXN0LAorCQkJCSAgICBsaXN0KSB7CisJCQlzZXFfcHJpbnRmKG0sICIgICAgJWQgQCAlZFxuIiwKKwkJCQkgICBnZW1fcmVxdWVzdC0+c2Vxbm8sCisJCQkJICAgKGludCkgKGppZmZpZXMgLSBnZW1fcmVxdWVzdC0+ZW1pdHRlZF9qaWZmaWVzKSk7CisJCX0KKwkJY291bnQrKzsKKwl9CisJaWYgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+cmluZ1tWQ1NdLnJlcXVlc3RfbGlzdCkpIHsKKwkJc2VxX3ByaW50ZihtLCAiQlNEIHJlcXVlc3RzOlxuIik7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2VtX3JlcXVlc3QsCisJCQkJICAgICZkZXZfcHJpdi0+cmluZ1tWQ1NdLnJlcXVlc3RfbGlzdCwKKwkJCQkgICAgbGlzdCkgeworCQkJc2VxX3ByaW50ZihtLCAiICAgICVkIEAgJWRcbiIsCisJCQkJICAgZ2VtX3JlcXVlc3QtPnNlcW5vLAorCQkJCSAgIChpbnQpIChqaWZmaWVzIC0gZ2VtX3JlcXVlc3QtPmVtaXR0ZWRfamlmZmllcykpOworCQl9CisJCWNvdW50Kys7CisJfQorCWlmICghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPnJpbmdbQkNTXS5yZXF1ZXN0X2xpc3QpKSB7CisJCXNlcV9wcmludGYobSwgIkJMVCByZXF1ZXN0czpcbiIpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdlbV9yZXF1ZXN0LAorCQkJCSAgICAmZGV2X3ByaXYtPnJpbmdbQkNTXS5yZXF1ZXN0X2xpc3QsCisJCQkJICAgIGxpc3QpIHsKKwkJCXNlcV9wcmludGYobSwgIiAgICAlZCBAICVkXG4iLAorCQkJCSAgIGdlbV9yZXF1ZXN0LT5zZXFubywKKwkJCQkgICAoaW50KSAoamlmZmllcyAtIGdlbV9yZXF1ZXN0LT5lbWl0dGVkX2ppZmZpZXMpKTsKKwkJfQorCQljb3VudCsrOwogCX0KIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAorCWlmIChjb3VudCA9PSAwKQorCQlzZXFfcHJpbnRmKG0sICJObyByZXF1ZXN0c1xuIik7CisKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaTkxNV9yaW5nX3NlcW5vX2luZm8oc3RydWN0IHNlcV9maWxlICptLAorCQkJCSBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCit7CisJaWYgKHJpbmctPmdldF9zZXFubykgeworCQlzZXFfcHJpbnRmKG0sICJDdXJyZW50IHNlcXVlbmNlICglcyk6ICVkXG4iLAorCQkJICAgcmluZy0+bmFtZSwgcmluZy0+Z2V0X3NlcW5vKHJpbmcpKTsKKwkJc2VxX3ByaW50ZihtLCAiV2FpdGVyIHNlcXVlbmNlICglcyk6ICAlZFxuIiwKKwkJCSAgIHJpbmctPm5hbWUsIHJpbmctPndhaXRpbmdfc2Vxbm8pOworCQlzZXFfcHJpbnRmKG0sICJJUlEgc2VxdWVuY2UgKCVzKTogICAgICVkXG4iLAorCQkJICAgcmluZy0+bmFtZSwgcmluZy0+aXJxX3NlcW5vKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgaTkxNV9nZW1fc2Vxbm9faW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgcmV0OworCWludCByZXQsIGk7CiAKIAlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+c3RydWN0X211dGV4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKGRldl9wcml2LT5yZW5kZXJfcmluZy5zdGF0dXNfcGFnZS5wYWdlX2FkZHIgIT0gTlVMTCkgewotCQlzZXFfcHJpbnRmKG0sICJDdXJyZW50IHNlcXVlbmNlOiAlZFxuIiwKLQkJCSAgIGRldl9wcml2LT5yZW5kZXJfcmluZy5nZXRfc2Vxbm8oZGV2LCAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nKSk7Ci0JfSBlbHNlIHsKLQkJc2VxX3ByaW50ZihtLCAiQ3VycmVudCBzZXF1ZW5jZTogaHdzIHVuaW5pdGlhbGl6ZWRcbiIpOwotCX0KLQlzZXFfcHJpbnRmKG0sICJXYWl0ZXIgc2VxdWVuY2U6ICAlZFxuIiwKLQkJCWRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyk7Ci0Jc2VxX3ByaW50ZihtLCAiSVJRIHNlcXVlbmNlOiAgICAgJWRcbiIsIGRldl9wcml2LT5tbS5pcnFfZ2VtX3NlcW5vKTsKKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykKKwkJaTkxNV9yaW5nX3NlcW5vX2luZm8obSwgJmRldl9wcml2LT5yaW5nW2ldKTsKIAogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCkBAIC0zMTUsNyArNDU4LDcgQEAKIAlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAogCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWlmIChyZXQpCkBAIC0zNTQsMTYgKzQ5NywxNCBAQAogCX0KIAlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHRzIHJlY2VpdmVkOiAlZFxuIiwKIAkJICAgYXRvbWljX3JlYWQoJmRldl9wcml2LT5pcnFfcmVjZWl2ZWQpKTsKLQlpZiAoZGV2X3ByaXYtPnJlbmRlcl9yaW5nLnN0YXR1c19wYWdlLnBhZ2VfYWRkciAhPSBOVUxMKSB7Ci0JCXNlcV9wcmludGYobSwgIkN1cnJlbnQgc2VxdWVuY2U6ICAgICVkXG4iLAotCQkJICAgZGV2X3ByaXYtPnJlbmRlcl9yaW5nLmdldF9zZXFubyhkZXYsICZkZXZfcHJpdi0+cmVuZGVyX3JpbmcpKTsKLQl9IGVsc2UgewotCQlzZXFfcHJpbnRmKG0sICJDdXJyZW50IHNlcXVlbmNlOiAgICBod3MgdW5pbml0aWFsaXplZFxuIik7CisJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspIHsKKwkJaWYgKElTX0dFTjYoZGV2KSkgeworCQkJc2VxX3ByaW50ZihtLCAiR3JhcGhpY3MgSW50ZXJydXB0IG1hc2sgKCVzKToJJTA4eFxuIiwKKwkJCQkgICBkZXZfcHJpdi0+cmluZ1tpXS5uYW1lLAorCQkJCSAgIEk5MTVfUkVBRF9JTVIoJmRldl9wcml2LT5yaW5nW2ldKSk7CisJCX0KKwkJaTkxNV9yaW5nX3NlcW5vX2luZm8obSwgJmRldl9wcml2LT5yaW5nW2ldKTsKIAl9Ci0Jc2VxX3ByaW50ZihtLCAiV2FpdGVyIHNlcXVlbmNlOiAgICAgJWRcbiIsCi0JCSAgIGRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyk7Ci0Jc2VxX3ByaW50ZihtLCAiSVJRIHNlcXVlbmNlOiAgICAgICAgJWRcbiIsCi0JCSAgIGRldl9wcml2LT5tbS5pcnFfZ2VtX3NlcW5vKTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAogCXJldHVybiAwOwpAQCAtMzgzLDI5ICs1MjQsMTcgQEAKIAlzZXFfcHJpbnRmKG0sICJSZXNlcnZlZCBmZW5jZXMgPSAlZFxuIiwgZGV2X3ByaXYtPmZlbmNlX3JlZ19zdGFydCk7CiAJc2VxX3ByaW50ZihtLCAiVG90YWwgZmVuY2VzID0gJWRcbiIsIGRldl9wcml2LT5udW1fZmVuY2VfcmVncyk7CiAJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5udW1fZmVuY2VfcmVnczsgaSsrKSB7Ci0JCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gZGV2X3ByaXYtPmZlbmNlX3JlZ3NbaV0ub2JqOworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gZGV2X3ByaXYtPmZlbmNlX3JlZ3NbaV0ub2JqOwogCi0JCWlmIChvYmogPT0gTlVMTCkgewotCQkJc2VxX3ByaW50ZihtLCAiRmVuY2VkIG9iamVjdFslMmRdID0gdW51c2VkXG4iLCBpKTsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKLQotCQkJb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwotCQkJc2VxX3ByaW50ZihtLCAiRmVuY2VkIG9iamVjdFslMmRdID0gJXA6ICVzICIKLQkJCQkgICAiJTA4eCAlMDh6eCAlMDh4ICVzICUwOHggJTA4eCAlZCIsCi0JCQkJICAgaSwgb2JqLCBnZXRfcGluX2ZsYWcob2JqX3ByaXYpLAotCQkJCSAgIG9ial9wcml2LT5ndHRfb2Zmc2V0LAotCQkJCSAgIG9iai0+c2l6ZSwgb2JqX3ByaXYtPnN0cmlkZSwKLQkJCQkgICBnZXRfdGlsaW5nX2ZsYWcob2JqX3ByaXYpLAotCQkJCSAgIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKLQkJCQkgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOwotCQkJaWYgKG9iai0+bmFtZSkKLQkJCQlzZXFfcHJpbnRmKG0sICIgKG5hbWU6ICVkKSIsIG9iai0+bmFtZSk7Ci0JCQlzZXFfcHJpbnRmKG0sICJcbiIpOwotCQl9CisJCXNlcV9wcmludGYobSwgIkZlbmNlZCBvYmplY3RbJTJkXSA9ICIsIGkpOworCQlpZiAob2JqID09IE5VTEwpCisJCQlzZXFfcHJpbnRmKG0sICJ1bnVzZWQiKTsKKwkJZWxzZQorCQkJZGVzY3JpYmVfb2JqKG0sIG9iaik7CisJCXNlcV9wcmludGYobSwgIlxuIik7CiAJfQotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxNCwxMCArNTQzLDEyIEBACiAJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgaTsKKwlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmc7CiAJdm9sYXRpbGUgdTMyICpod3M7CisJaW50IGk7CiAKLQlod3MgPSAodm9sYXRpbGUgdTMyICopZGV2X3ByaXYtPnJlbmRlcl9yaW5nLnN0YXR1c19wYWdlLnBhZ2VfYWRkcjsKKwlyaW5nID0gJmRldl9wcml2LT5yaW5nWyh1aW50cHRyX3Qpbm9kZS0+aW5mb19lbnQtPmRhdGFdOworCWh3cyA9ICh2b2xhdGlsZSB1MzIgKilyaW5nLT5zdGF0dXNfcGFnZS5wYWdlX2FkZHI7CiAJaWYgKGh3cyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIApAQCAtNDMxLDE0ICs1NjIsMTQgQEAKIAogc3RhdGljIHZvaWQgaTkxNV9kdW1wX29iamVjdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCiAJCQkgICAgIHN0cnVjdCBpb19tYXBwaW5nICptYXBwaW5nLAotCQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYpCisJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7CiAJaW50IHBhZ2UsIHBhZ2VfY291bnQsIGk7CiAKLQlwYWdlX2NvdW50ID0gb2JqX3ByaXYtPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsKKwlwYWdlX2NvdW50ID0gb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkU7CiAJZm9yIChwYWdlID0gMDsgcGFnZSA8IHBhZ2VfY291bnQ7IHBhZ2UrKykgewogCQl1MzIgKm1lbSA9IGlvX21hcHBpbmdfbWFwX3djKG1hcHBpbmcsCi0JCQkJCSAgICAgb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyBwYWdlICogUEFHRV9TSVpFKTsKKwkJCQkJICAgICBvYmotPmd0dF9vZmZzZXQgKyBwYWdlICogUEFHRV9TSVpFKTsKIAkJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRTsgaSArPSA0KQogCQkJc2VxX3ByaW50ZihtLCAiJTA4eCA6ICAlMDh4XG4iLCBpLCBtZW1baSAvIDRdKTsKIAkJaW9fbWFwcGluZ191bm1hcChtZW0pOwpAQCAtNDUwLDI1ICs1ODEsMjEgQEAKIAlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCWludCByZXQ7CiAKIAlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+c3RydWN0X211dGV4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCwgbW1fbGlzdCkgewotCQlvYmogPSAmb2JqX3ByaXYtPmJhc2U7Ci0JCWlmIChvYmotPnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EKSB7Ci0JCSAgICBzZXFfcHJpbnRmKG0sICItLS0gZ3R0X29mZnNldCA9IDB4JTA4eFxuIiwKLQkJCSAgICAgICBvYmpfcHJpdi0+Z3R0X29mZnNldCk7Ci0JCSAgICBpOTE1X2R1bXBfb2JqZWN0KG0sIGRldl9wcml2LT5tbS5ndHRfbWFwcGluZywgb2JqX3ByaXYpOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LCBtbV9saXN0KSB7CisJCWlmIChvYmotPmJhc2UucmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQpIHsKKwkJICAgIHNlcV9wcmludGYobSwgIi0tLSBndHRfb2Zmc2V0ID0gMHglMDh4XG4iLCBvYmotPmd0dF9vZmZzZXQpOworCQkgICAgaTkxNV9kdW1wX29iamVjdChtLCBkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcsIG9iaik7CiAJCX0KIAl9CiAKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQogCXJldHVybiAwOwogfQogCkBAIC00NzcsMTkgKzYwNCwyMSBAQAogCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nOwogCWludCByZXQ7CiAKIAlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+c3RydWN0X211dGV4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKCFkZXZfcHJpdi0+cmVuZGVyX3JpbmcuZ2VtX29iamVjdCkgeworCXJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbKHVpbnRwdHJfdClub2RlLT5pbmZvX2VudC0+ZGF0YV07CisJaWYgKCFyaW5nLT5vYmopIHsKIAkJc2VxX3ByaW50ZihtLCAiTm8gcmluZ2J1ZmZlciBzZXR1cFxuIik7CiAJfSBlbHNlIHsKLQkJdTggKnZpcnQgPSBkZXZfcHJpdi0+cmVuZGVyX3JpbmcudmlydHVhbF9zdGFydDsKKwkJdTggKnZpcnQgPSByaW5nLT52aXJ0dWFsX3N0YXJ0OwogCQl1aW50MzJfdCBvZmY7CiAKLQkJZm9yIChvZmYgPSAwOyBvZmYgPCBkZXZfcHJpdi0+cmVuZGVyX3Jpbmcuc2l6ZTsgb2ZmICs9IDQpIHsKKwkJZm9yIChvZmYgPSAwOyBvZmYgPCByaW5nLT5zaXplOyBvZmYgKz0gNCkgewogCQkJdWludDMyX3QgKnB0ciA9ICh1aW50MzJfdCAqKSh2aXJ0ICsgb2ZmKTsKIAkJCXNlcV9wcmludGYobSwgIiUwOHggOiAgJTA4eFxuIiwgb2ZmLCAqcHRyKTsKIAkJfQpAQCAtNTA0LDE5ICs2MzMsMzggQEAKIAlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGludCBoZWFkLCB0YWlsOworCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZzsKIAotCWhlYWQgPSBJOTE1X1JFQUQoUFJCMF9IRUFEKSAmIEhFQURfQUREUjsKLQl0YWlsID0gSTkxNV9SRUFEKFBSQjBfVEFJTCkgJiBUQUlMX0FERFI7CisJcmluZyA9ICZkZXZfcHJpdi0+cmluZ1sodWludHB0cl90KW5vZGUtPmluZm9fZW50LT5kYXRhXTsKKwlpZiAocmluZy0+c2l6ZSA9PSAwKQorCQlyZXR1cm4gMDsKIAotCXNlcV9wcmludGYobSwgIlJpbmdIZWFkIDogICUwOHhcbiIsIGhlYWQpOwotCXNlcV9wcmludGYobSwgIlJpbmdUYWlsIDogICUwOHhcbiIsIHRhaWwpOwotCXNlcV9wcmludGYobSwgIlJpbmdTaXplIDogICUwOGx4XG4iLCBkZXZfcHJpdi0+cmVuZGVyX3Jpbmcuc2l6ZSk7Ci0Jc2VxX3ByaW50ZihtLCAiQWN0aGQgOiAgICAgJTA4eFxuIiwgSTkxNV9SRUFEKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQgPyBBQ1RIRF9JOTY1IDogQUNUSEQpKTsKKwlzZXFfcHJpbnRmKG0sICJSaW5nICVzOlxuIiwgcmluZy0+bmFtZSk7CisJc2VxX3ByaW50ZihtLCAiICBIZWFkIDogICAgJTA4eFxuIiwgSTkxNV9SRUFEX0hFQUQocmluZykgJiBIRUFEX0FERFIpOworCXNlcV9wcmludGYobSwgIiAgVGFpbCA6ICAgICUwOHhcbiIsIEk5MTVfUkVBRF9UQUlMKHJpbmcpICYgVEFJTF9BRERSKTsKKwlzZXFfcHJpbnRmKG0sICIgIFNpemUgOiAgICAlMDh4XG4iLCByaW5nLT5zaXplKTsKKwlzZXFfcHJpbnRmKG0sICIgIEFjdGl2ZSA6ICAlMDh4XG4iLCBpbnRlbF9yaW5nX2dldF9hY3RpdmVfaGVhZChyaW5nKSk7CisJc2VxX3ByaW50ZihtLCAiICBOT1BJRCA6ICAgJTA4eFxuIiwgSTkxNV9SRUFEX05PUElEKHJpbmcpKTsKKwlpZiAoSVNfR0VONihkZXYpKSB7CisJCXNlcV9wcmludGYobSwgIiAgU3luYyAwIDogICAlMDh4XG4iLCBJOTE1X1JFQURfU1lOQ18wKHJpbmcpKTsKKwkJc2VxX3ByaW50ZihtLCAiICBTeW5jIDEgOiAgICUwOHhcbiIsIEk5MTVfUkVBRF9TWU5DXzEocmluZykpOworCX0KKwlzZXFfcHJpbnRmKG0sICIgIENvbnRyb2wgOiAlMDh4XG4iLCBJOTE1X1JFQURfQ1RMKHJpbmcpKTsKKwlzZXFfcHJpbnRmKG0sICIgIFN0YXJ0IDogICAlMDh4XG4iLCBJOTE1X1JFQURfU1RBUlQocmluZykpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpyaW5nX3N0cihpbnQgcmluZykKK3sKKwlzd2l0Y2ggKHJpbmcpIHsKKwljYXNlIFJJTkdfUkVOREVSOiByZXR1cm4gIiByZW5kZXIiOworCWNhc2UgUklOR19CU0Q6IHJldHVybiAiIGJzZCI7CisJY2FzZSBSSU5HX0JMVDogcmV0dXJuICIgYmx0IjsKKwlkZWZhdWx0OiByZXR1cm4gIiI7CisJfQorfQorCiBzdGF0aWMgY29uc3QgY2hhciAqcGluX2ZsYWcoaW50IHBpbm5lZCkKIHsKIAlpZiAocGlubmVkID4gMCkKQEAgLTU0Nyw2ICs2OTUsMzcgQEAKIAlyZXR1cm4gcHVyZ2VhYmxlID8gIiBwdXJnZWFibGUiIDogIiI7CiB9CiAKK3N0YXRpYyB2b2lkIHByaW50X2Vycm9yX2J1ZmZlcnMoc3RydWN0IHNlcV9maWxlICptLAorCQkJCWNvbnN0IGNoYXIgKm5hbWUsCisJCQkJc3RydWN0IGRybV9pOTE1X2Vycm9yX2J1ZmZlciAqZXJyLAorCQkJCWludCBjb3VudCkKK3sKKwlzZXFfcHJpbnRmKG0sICIlcyBbJWRdOlxuIiwgbmFtZSwgY291bnQpOworCisJd2hpbGUgKGNvdW50LS0pIHsKKwkJc2VxX3ByaW50ZihtLCAiICAlMDh4ICU4emQgJTA0eCAlMDR4ICUwOHglcyVzJXMlcyVzJXMiLAorCQkJICAgZXJyLT5ndHRfb2Zmc2V0LAorCQkJICAgZXJyLT5zaXplLAorCQkJICAgZXJyLT5yZWFkX2RvbWFpbnMsCisJCQkgICBlcnItPndyaXRlX2RvbWFpbiwKKwkJCSAgIGVyci0+c2Vxbm8sCisJCQkgICBwaW5fZmxhZyhlcnItPnBpbm5lZCksCisJCQkgICB0aWxpbmdfZmxhZyhlcnItPnRpbGluZyksCisJCQkgICBkaXJ0eV9mbGFnKGVyci0+ZGlydHkpLAorCQkJICAgcHVyZ2VhYmxlX2ZsYWcoZXJyLT5wdXJnZWFibGUpLAorCQkJICAgcmluZ19zdHIoZXJyLT5yaW5nKSwKKwkJCSAgIGFncF90eXBlX3N0cihlcnItPmFncF90eXBlKSk7CisKKwkJaWYgKGVyci0+bmFtZSkKKwkJCXNlcV9wcmludGYobSwgIiAobmFtZTogJWQpIiwgZXJyLT5uYW1lKTsKKwkJaWYgKGVyci0+ZmVuY2VfcmVnICE9IEk5MTVfRkVOQ0VfUkVHX05PTkUpCisJCQlzZXFfcHJpbnRmKG0sICIgKGZlbmNlOiAlZCkiLCBlcnItPmZlbmNlX3JlZyk7CisKKwkJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwkJZXJyKys7CisJfQorfQorCiBzdGF0aWMgaW50IGk5MTVfZXJyb3Jfc3RhdGUoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiB7CiAJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKQEAgLTU2OCw0NyArNzQ3LDU0IEBACiAJCSAgIGVycm9yLT50aW1lLnR2X3VzZWMpOwogCXNlcV9wcmludGYobSwgIlBDSSBJRDogMHglMDR4XG4iLCBkZXYtPnBjaV9kZXZpY2UpOwogCXNlcV9wcmludGYobSwgIkVJUjogMHglMDh4XG4iLCBlcnJvci0+ZWlyKTsKLQlzZXFfcHJpbnRmKG0sICIgIFBHVEJMX0VSOiAweCUwOHhcbiIsIGVycm9yLT5wZ3RibF9lcik7Ci0Jc2VxX3ByaW50ZihtLCAiICBJTlNUUE06IDB4JTA4eFxuIiwgZXJyb3ItPmluc3RwbSk7CisJc2VxX3ByaW50ZihtLCAiUEdUQkxfRVI6IDB4JTA4eFxuIiwgZXJyb3ItPnBndGJsX2VyKTsKKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNikgeworCQlzZXFfcHJpbnRmKG0sICJFUlJPUjogMHglMDh4XG4iLCBlcnJvci0+ZXJyb3IpOworCQlzZXFfcHJpbnRmKG0sICJCbGl0dGVyIGNvbW1hbmQgc3RyZWFtOlxuIik7CisJCXNlcV9wcmludGYobSwgIiAgQUNUSEQ6ICAgIDB4JTA4eFxuIiwgZXJyb3ItPmJjc19hY3RoZCk7CisJCXNlcV9wcmludGYobSwgIiAgSVBFSVI6ICAgIDB4JTA4eFxuIiwgZXJyb3ItPmJjc19pcGVpcik7CisJCXNlcV9wcmludGYobSwgIiAgSVBFSFI6ICAgIDB4JTA4eFxuIiwgZXJyb3ItPmJjc19pcGVocik7CisJCXNlcV9wcmludGYobSwgIiAgSU5TVERPTkU6IDB4JTA4eFxuIiwgZXJyb3ItPmJjc19pbnN0ZG9uZSk7CisJCXNlcV9wcmludGYobSwgIiAgc2Vxbm86ICAgIDB4JTA4eFxuIiwgZXJyb3ItPmJjc19zZXFubyk7CisJCXNlcV9wcmludGYobSwgIlZpZGVvIChCU0QpIGNvbW1hbmQgc3RyZWFtOlxuIik7CisJCXNlcV9wcmludGYobSwgIiAgQUNUSEQ6ICAgIDB4JTA4eFxuIiwgZXJyb3ItPnZjc19hY3RoZCk7CisJCXNlcV9wcmludGYobSwgIiAgSVBFSVI6ICAgIDB4JTA4eFxuIiwgZXJyb3ItPnZjc19pcGVpcik7CisJCXNlcV9wcmludGYobSwgIiAgSVBFSFI6ICAgIDB4JTA4eFxuIiwgZXJyb3ItPnZjc19pcGVocik7CisJCXNlcV9wcmludGYobSwgIiAgSU5TVERPTkU6IDB4JTA4eFxuIiwgZXJyb3ItPnZjc19pbnN0ZG9uZSk7CisJCXNlcV9wcmludGYobSwgIiAgc2Vxbm86ICAgIDB4JTA4eFxuIiwgZXJyb3ItPnZjc19zZXFubyk7CisJfQorCXNlcV9wcmludGYobSwgIlJlbmRlciBjb21tYW5kIHN0cmVhbTpcbiIpOworCXNlcV9wcmludGYobSwgIiAgQUNUSEQ6IDB4JTA4eFxuIiwgZXJyb3ItPmFjdGhkKTsKIAlzZXFfcHJpbnRmKG0sICIgIElQRUlSOiAweCUwOHhcbiIsIGVycm9yLT5pcGVpcik7CiAJc2VxX3ByaW50ZihtLCAiICBJUEVIUjogMHglMDh4XG4iLCBlcnJvci0+aXBlaHIpOwogCXNlcV9wcmludGYobSwgIiAgSU5TVERPTkU6IDB4JTA4eFxuIiwgZXJyb3ItPmluc3Rkb25lKTsKLQlzZXFfcHJpbnRmKG0sICIgIEFDVEhEOiAweCUwOHhcbiIsIGVycm9yLT5hY3RoZCk7CiAJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQpIHsKLQkJc2VxX3ByaW50ZihtLCAiICBJTlNUUFM6IDB4JTA4eFxuIiwgZXJyb3ItPmluc3Rwcyk7CiAJCXNlcV9wcmludGYobSwgIiAgSU5TVERPTkUxOiAweCUwOHhcbiIsIGVycm9yLT5pbnN0ZG9uZTEpOworCQlzZXFfcHJpbnRmKG0sICIgIElOU1RQUzogMHglMDh4XG4iLCBlcnJvci0+aW5zdHBzKTsKIAl9Ci0Jc2VxX3ByaW50ZihtLCAic2Vxbm86IDB4JTA4eFxuIiwgZXJyb3ItPnNlcW5vKTsKKwlzZXFfcHJpbnRmKG0sICIgIElOU1RQTTogMHglMDh4XG4iLCBlcnJvci0+aW5zdHBtKTsKKwlzZXFfcHJpbnRmKG0sICIgIHNlcW5vOiAweCUwOHhcbiIsIGVycm9yLT5zZXFubyk7CiAKLQlpZiAoZXJyb3ItPmFjdGl2ZV9ib19jb3VudCkgewotCQlzZXFfcHJpbnRmKG0sICJCdWZmZXJzIFslZF06XG4iLCBlcnJvci0+YWN0aXZlX2JvX2NvdW50KTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJc2VxX3ByaW50ZihtLCAiICBmZW5jZVslZF0gPSAlMDhsbHhcbiIsIGksIGVycm9yLT5mZW5jZVtpXSk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGVycm9yLT5hY3RpdmVfYm9fY291bnQ7IGkrKykgewotCQkJc2VxX3ByaW50ZihtLCAiICAlMDh4ICU4emQgJTA4eCAlMDh4ICUwOHglcyVzJXMlcyIsCi0JCQkJICAgZXJyb3ItPmFjdGl2ZV9ib1tpXS5ndHRfb2Zmc2V0LAotCQkJCSAgIGVycm9yLT5hY3RpdmVfYm9baV0uc2l6ZSwKLQkJCQkgICBlcnJvci0+YWN0aXZlX2JvW2ldLnJlYWRfZG9tYWlucywKLQkJCQkgICBlcnJvci0+YWN0aXZlX2JvW2ldLndyaXRlX2RvbWFpbiwKLQkJCQkgICBlcnJvci0+YWN0aXZlX2JvW2ldLnNlcW5vLAotCQkJCSAgIHBpbl9mbGFnKGVycm9yLT5hY3RpdmVfYm9baV0ucGlubmVkKSwKLQkJCQkgICB0aWxpbmdfZmxhZyhlcnJvci0+YWN0aXZlX2JvW2ldLnRpbGluZyksCi0JCQkJICAgZGlydHlfZmxhZyhlcnJvci0+YWN0aXZlX2JvW2ldLmRpcnR5KSwKLQkJCQkgICBwdXJnZWFibGVfZmxhZyhlcnJvci0+YWN0aXZlX2JvW2ldLnB1cmdlYWJsZSkpOworCWlmIChlcnJvci0+YWN0aXZlX2JvKQorCQlwcmludF9lcnJvcl9idWZmZXJzKG0sICJBY3RpdmUiLAorCQkJCSAgICBlcnJvci0+YWN0aXZlX2JvLAorCQkJCSAgICBlcnJvci0+YWN0aXZlX2JvX2NvdW50KTsKIAotCQkJaWYgKGVycm9yLT5hY3RpdmVfYm9baV0ubmFtZSkKLQkJCQlzZXFfcHJpbnRmKG0sICIgKG5hbWU6ICVkKSIsIGVycm9yLT5hY3RpdmVfYm9baV0ubmFtZSk7Ci0JCQlpZiAoZXJyb3ItPmFjdGl2ZV9ib1tpXS5mZW5jZV9yZWcgIT0gSTkxNV9GRU5DRV9SRUdfTk9ORSkKLQkJCQlzZXFfcHJpbnRmKG0sICIgKGZlbmNlOiAlZCkiLCBlcnJvci0+YWN0aXZlX2JvW2ldLmZlbmNlX3JlZyk7Ci0KLQkJCXNlcV9wcmludGYobSwgIlxuIik7Ci0JCX0KLQl9CisJaWYgKGVycm9yLT5waW5uZWRfYm8pCisJCXByaW50X2Vycm9yX2J1ZmZlcnMobSwgIlBpbm5lZCIsCisJCQkJICAgIGVycm9yLT5waW5uZWRfYm8sCisJCQkJICAgIGVycm9yLT5waW5uZWRfYm9fY291bnQpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXJyb3ItPmJhdGNoYnVmZmVyKTsgaSsrKSB7CiAJCWlmIChlcnJvci0+YmF0Y2hidWZmZXJbaV0pIHsKIAkJCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9vYmplY3QgKm9iaiA9IGVycm9yLT5iYXRjaGJ1ZmZlcltpXTsKIAotCQkJc2VxX3ByaW50ZihtLCAiLS0tIGd0dF9vZmZzZXQgPSAweCUwOHhcbiIsIG9iai0+Z3R0X29mZnNldCk7CisJCQlzZXFfcHJpbnRmKG0sICIlcyAtLS0gZ3R0X29mZnNldCA9IDB4JTA4eFxuIiwKKwkJCQkgICBkZXZfcHJpdi0+cmluZ1tpXS5uYW1lLAorCQkJCSAgIG9iai0+Z3R0X29mZnNldCk7CiAJCQlvZmZzZXQgPSAwOwogCQkJZm9yIChwYWdlID0gMDsgcGFnZSA8IG9iai0+cGFnZV9jb3VudDsgcGFnZSsrKSB7CiAJCQkJZm9yIChlbHQgPSAwOyBlbHQgPCBQQUdFX1NJWkUvNDsgZWx0KyspIHsKQEAgLTYzNSw2ICs4MjEsOSBAQAogCWlmIChlcnJvci0+b3ZlcmxheSkKIAkJaW50ZWxfb3ZlcmxheV9wcmludF9lcnJvcl9zdGF0ZShtLCBlcnJvci0+b3ZlcmxheSk7CiAKKwlpZiAoZXJyb3ItPmRpc3BsYXkpCisJCWludGVsX2Rpc3BsYXlfcHJpbnRfZXJyb3Jfc3RhdGUobSwgZGV2LCBlcnJvci0+ZGlzcGxheSk7CisKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+ZXJyb3JfbG9jaywgZmxhZ3MpOwogCkBAIC02NTgsMTUgKzg0Nyw1MSBAQAogCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTE2IHJndnN3Y3RsID0gSTkxNV9SRUFEMTYoTUVNU1dDVEwpOwotCXUxNiByZ3ZzdGF0ID0gSTkxNV9SRUFEMTYoTUVNU1RBVF9JTEspOwogCi0Jc2VxX3ByaW50ZihtLCAiUmVxdWVzdGVkIFAtc3RhdGU6ICVkXG4iLCAocmd2c3djdGwgPj4gOCkgJiAweGYpOwotCXNlcV9wcmludGYobSwgIlJlcXVlc3RlZCBWSUQ6ICVkXG4iLCByZ3Zzd2N0bCAmIDB4M2YpOwotCXNlcV9wcmludGYobSwgIkN1cnJlbnQgVklEOiAlZFxuIiwgKHJndnN0YXQgJiBNRU1TVEFUX1ZJRF9NQVNLKSA+PgotCQkgICBNRU1TVEFUX1ZJRF9TSElGVCk7Ci0Jc2VxX3ByaW50ZihtLCAiQ3VycmVudCBQLXN0YXRlOiAlZFxuIiwKLQkJICAgKHJndnN0YXQgJiBNRU1TVEFUX1BTVEFURV9NQVNLKSA+PiBNRU1TVEFUX1BTVEFURV9TSElGVCk7CisJaWYgKElTX0dFTjUoZGV2KSkgeworCQl1MTYgcmd2c3djdGwgPSBJOTE1X1JFQUQxNihNRU1TV0NUTCk7CisJCXUxNiByZ3ZzdGF0ID0gSTkxNV9SRUFEMTYoTUVNU1RBVF9JTEspOworCisJCXNlcV9wcmludGYobSwgIlJlcXVlc3RlZCBQLXN0YXRlOiAlZFxuIiwgKHJndnN3Y3RsID4+IDgpICYgMHhmKTsKKwkJc2VxX3ByaW50ZihtLCAiUmVxdWVzdGVkIFZJRDogJWRcbiIsIHJndnN3Y3RsICYgMHgzZik7CisJCXNlcV9wcmludGYobSwgIkN1cnJlbnQgVklEOiAlZFxuIiwgKHJndnN0YXQgJiBNRU1TVEFUX1ZJRF9NQVNLKSA+PgorCQkJICAgTUVNU1RBVF9WSURfU0hJRlQpOworCQlzZXFfcHJpbnRmKG0sICJDdXJyZW50IFAtc3RhdGU6ICVkXG4iLAorCQkJICAgKHJndnN0YXQgJiBNRU1TVEFUX1BTVEFURV9NQVNLKSA+PiBNRU1TVEFUX1BTVEFURV9TSElGVCk7CisJfSBlbHNlIGlmIChJU19HRU42KGRldikpIHsKKwkJdTMyIGd0X3BlcmZfc3RhdHVzID0gSTkxNV9SRUFEKEdFTjZfR1RfUEVSRl9TVEFUVVMpOworCQl1MzIgcnBfc3RhdGVfbGltaXRzID0gSTkxNV9SRUFEKEdFTjZfUlBfU1RBVEVfTElNSVRTKTsKKwkJdTMyIHJwX3N0YXRlX2NhcCA9IEk5MTVfUkVBRChHRU42X1JQX1NUQVRFX0NBUCk7CisJCWludCBtYXhfZnJlcTsKKworCQkvKiBSUFNUQVQxIGlzIGluIHRoZSBHVCBwb3dlciB3ZWxsICovCisJCV9fZ2VuNl9mb3JjZV93YWtlX2dldChkZXZfcHJpdik7CisKKwkJc2VxX3ByaW50ZihtLCAiR1RfUEVSRl9TVEFUVVM6IDB4JTA4eFxuIiwgZ3RfcGVyZl9zdGF0dXMpOworCQlzZXFfcHJpbnRmKG0sICJSUFNUQVQxOiAweCUwOHhcbiIsIEk5MTVfUkVBRChHRU42X1JQU1RBVDEpKTsKKwkJc2VxX3ByaW50ZihtLCAiUmVuZGVyIHAtc3RhdGUgcmF0aW86ICVkXG4iLAorCQkJICAgKGd0X3BlcmZfc3RhdHVzICYgMHhmZjAwKSA+PiA4KTsKKwkJc2VxX3ByaW50ZihtLCAiUmVuZGVyIHAtc3RhdGUgVklEOiAlZFxuIiwKKwkJCSAgIGd0X3BlcmZfc3RhdHVzICYgMHhmZik7CisJCXNlcV9wcmludGYobSwgIlJlbmRlciBwLXN0YXRlIGxpbWl0OiAlZFxuIiwKKwkJCSAgIHJwX3N0YXRlX2xpbWl0cyAmIDB4ZmYpOworCisJCW1heF9mcmVxID0gKHJwX3N0YXRlX2NhcCAmIDB4ZmYwMDAwKSA+PiAxNjsKKwkJc2VxX3ByaW50ZihtLCAiTG93ZXN0IChSUE4pIGZyZXF1ZW5jeTogJWRNSHpcbiIsCisJCQkgICBtYXhfZnJlcSAqIDEwMCk7CisKKwkJbWF4X2ZyZXEgPSAocnBfc3RhdGVfY2FwICYgMHhmZjAwKSA+PiA4OworCQlzZXFfcHJpbnRmKG0sICJOb21pbmFsIChSUDEpIGZyZXF1ZW5jeTogJWRNSHpcbiIsCisJCQkgICBtYXhfZnJlcSAqIDEwMCk7CisKKwkJbWF4X2ZyZXEgPSBycF9zdGF0ZV9jYXAgJiAweGZmOworCQlzZXFfcHJpbnRmKG0sICJNYXggbm9uLW92ZXJjbG9ja2VkIChSUDApIGZyZXF1ZW5jeTogJWRNSHpcbiIsCisJCQkgICBtYXhfZnJlcSAqIDEwMCk7CisKKwkJX19nZW42X2ZvcmNlX3dha2VfcHV0KGRldl9wcml2KTsKKwl9IGVsc2UgeworCQlzZXFfcHJpbnRmKG0sICJubyBQLXN0YXRlIGluZm8gYXZhaWxhYmxlXG4iKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcxNSw3ICs5NDAsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiByZ3Ztb2RlY3RsID0gSTkxNV9SRUFEKE1FTU1PREVDVEwpOwotCXUzMiByc3RkYnljdGwgPSBJOTE1X1JFQUQoTUNIQkFSX1JFTkRFUl9TVEFOREJZKTsKKwl1MzIgcnN0ZGJ5Y3RsID0gSTkxNV9SRUFEKFJTVERCWUNUTCk7CiAJdTE2IGNyc3RhbmR2aWQgPSBJOTE1X1JFQUQxNihDUlNUQU5EVklEKTsKIAogCXNlcV9wcmludGYobSwgIkhEIGJvb3N0OiAlc1xuIiwgKHJndm1vZGVjdGwgJiBNRU1NT0RFX0JPT1NUX0VOKSA/CkBAIC03MzgsNiArOTYzLDMwIEBACiAJc2VxX3ByaW50ZihtLCAiUlMyIFZJRDogJWRcbiIsICgoY3JzdGFuZHZpZCA+PiA4KSAmIDB4M2YpKTsKIAlzZXFfcHJpbnRmKG0sICJSZW5kZXIgc3RhbmRieSBlbmFibGVkOiAlc1xuIiwKIAkJICAgKHJzdGRieWN0bCAmIFJDWF9TV19FWElUKSA/ICJubyIgOiAieWVzIik7CisJc2VxX3ByaW50ZihtLCAiQ3VycmVudCBSUyBzdGF0ZTogIik7CisJc3dpdGNoIChyc3RkYnljdGwgJiBSU1hfU1RBVFVTX01BU0spIHsKKwljYXNlIFJTWF9TVEFUVVNfT046CisJCXNlcV9wcmludGYobSwgIm9uXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBSU1hfU1RBVFVTX1JDMToKKwkJc2VxX3ByaW50ZihtLCAiUkMxXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBSU1hfU1RBVFVTX1JDMUU6CisJCXNlcV9wcmludGYobSwgIlJDMUVcbiIpOworCQlicmVhazsKKwljYXNlIFJTWF9TVEFUVVNfUlMxOgorCQlzZXFfcHJpbnRmKG0sICJSUzFcbiIpOworCQlicmVhazsKKwljYXNlIFJTWF9TVEFUVVNfUlMyOgorCQlzZXFfcHJpbnRmKG0sICJSUzIgKFJDNilcbiIpOworCQlicmVhazsKKwljYXNlIFJTWF9TVEFUVVNfUlMzOgorCQlzZXFfcHJpbnRmKG0sICJSQzMgKFJDNispXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc2VxX3ByaW50ZihtLCAidW5rbm93blxuIik7CisJCWJyZWFrOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtNzk0LDcgKzEwNDMsNyBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWJvb2wgc3JfZW5hYmxlZCA9IGZhbHNlOwogCi0JaWYgKElTX0dFTjUoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlzcl9lbmFibGVkID0gSTkxNV9SRUFEKFdNMV9MUF9JTEspICYgV00xX0xQX1NSX0VOOwogCWVsc2UgaWYgKElTX0NSRVNUTElORShkZXYpIHx8IElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikpCiAJCXNyX2VuYWJsZWQgPSBJOTE1X1JFQUQoRldfQkxDX1NFTEYpICYgRldfQkxDX1NFTEZfRU47CkBAIC04ODYsNyArMTEzNSw3IEBACiAJCSAgIGZiLT5iYXNlLmhlaWdodCwKIAkJICAgZmItPmJhc2UuZGVwdGgsCiAJCSAgIGZiLT5iYXNlLmJpdHNfcGVyX3BpeGVsKTsKLQlkZXNjcmliZV9vYmoobSwgdG9faW50ZWxfYm8oZmItPm9iaikpOworCWRlc2NyaWJlX29iaihtLCBmYi0+b2JqKTsKIAlzZXFfcHJpbnRmKG0sICJcbiIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmYiwgJmRldi0+bW9kZV9jb25maWcuZmJfbGlzdCwgYmFzZS5oZWFkKSB7CkBAIC04OTgsNyArMTE0Nyw3IEBACiAJCQkgICBmYi0+YmFzZS5oZWlnaHQsCiAJCQkgICBmYi0+YmFzZS5kZXB0aCwKIAkJCSAgIGZiLT5iYXNlLmJpdHNfcGVyX3BpeGVsKTsKLQkJZGVzY3JpYmVfb2JqKG0sIHRvX2ludGVsX2JvKGZiLT5vYmopKTsKKwkJZGVzY3JpYmVfb2JqKG0sIGZiLT5vYmopOwogCQlzZXFfcHJpbnRmKG0sICJcbiIpOwogCX0KIApAQCAtOTQzLDcgKzExOTIsNiBAQAogCQkgIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWNoYXIgYnVmWzIwXTsKIAlpbnQgdmFsID0gMTsKIApAQCAtOTU5LDEyICsxMjA3LDcgQEAKIAl9CiAKIAlEUk1fSU5GTygiTWFudWFsbHkgc2V0dGluZyB3ZWRnZWQgdG8gJWRcbiIsIHZhbCk7Ci0KLQlhdG9taWNfc2V0KCZkZXZfcHJpdi0+bW0ud2VkZ2VkLCB2YWwpOwotCWlmICh2YWwpIHsKLQkJd2FrZV91cF9hbGwoJmRldl9wcml2LT5pcnFfcXVldWUpOwotCQlxdWV1ZV93b3JrKGRldl9wcml2LT53cSwgJmRldl9wcml2LT5lcnJvcl93b3JrKTsKLQl9CisJaTkxNV9oYW5kbGVfZXJyb3IoZGV2LCB2YWwpOwogCiAJcmV0dXJuIGNudDsKIH0KQEAgLTEwMTgsNiArMTI2MSw3IEBACiBzdGF0aWMgc3RydWN0IGRybV9pbmZvX2xpc3QgaTkxNV9kZWJ1Z2ZzX2xpc3RbXSA9IHsKIAl7Imk5MTVfY2FwYWJpbGl0aWVzIiwgaTkxNV9jYXBhYmlsaXRpZXMsIDAsIDB9LAogCXsiaTkxNV9nZW1fb2JqZWN0cyIsIGk5MTVfZ2VtX29iamVjdF9pbmZvLCAwfSwKKwl7Imk5MTVfZ2VtX2d0dCIsIGk5MTVfZ2VtX2d0dF9pbmZvLCAwfSwKIAl7Imk5MTVfZ2VtX2FjdGl2ZSIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIEFDVElWRV9MSVNUfSwKIAl7Imk5MTVfZ2VtX2ZsdXNoaW5nIiwgaTkxNV9nZW1fb2JqZWN0X2xpc3RfaW5mbywgMCwgKHZvaWQgKikgRkxVU0hJTkdfTElTVH0sCiAJeyJpOTE1X2dlbV9pbmFjdGl2ZSIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIElOQUNUSVZFX0xJU1R9LApAQCAtMTAyOCw5ICsxMjcyLDE1IEBACiAJeyJpOTE1X2dlbV9zZXFubyIsIGk5MTVfZ2VtX3NlcW5vX2luZm8sIDB9LAogCXsiaTkxNV9nZW1fZmVuY2VfcmVncyIsIGk5MTVfZ2VtX2ZlbmNlX3JlZ3NfaW5mbywgMH0sCiAJeyJpOTE1X2dlbV9pbnRlcnJ1cHQiLCBpOTE1X2ludGVycnVwdF9pbmZvLCAwfSwKLQl7Imk5MTVfZ2VtX2h3cyIsIGk5MTVfaHdzX2luZm8sIDB9LAotCXsiaTkxNV9yaW5nYnVmZmVyX2RhdGEiLCBpOTE1X3JpbmdidWZmZXJfZGF0YSwgMH0sCi0JeyJpOTE1X3JpbmdidWZmZXJfaW5mbyIsIGk5MTVfcmluZ2J1ZmZlcl9pbmZvLCAwfSwKKwl7Imk5MTVfZ2VtX2h3cyIsIGk5MTVfaHdzX2luZm8sIDAsICh2b2lkICopUkNTfSwKKwl7Imk5MTVfZ2VtX2h3c19ibHQiLCBpOTE1X2h3c19pbmZvLCAwLCAodm9pZCAqKUJDU30sCisJeyJpOTE1X2dlbV9od3NfYnNkIiwgaTkxNV9od3NfaW5mbywgMCwgKHZvaWQgKilWQ1N9LAorCXsiaTkxNV9yaW5nYnVmZmVyX2RhdGEiLCBpOTE1X3JpbmdidWZmZXJfZGF0YSwgMCwgKHZvaWQgKilSQ1N9LAorCXsiaTkxNV9yaW5nYnVmZmVyX2luZm8iLCBpOTE1X3JpbmdidWZmZXJfaW5mbywgMCwgKHZvaWQgKilSQ1N9LAorCXsiaTkxNV9ic2RfcmluZ2J1ZmZlcl9kYXRhIiwgaTkxNV9yaW5nYnVmZmVyX2RhdGEsIDAsICh2b2lkICopVkNTfSwKKwl7Imk5MTVfYnNkX3JpbmdidWZmZXJfaW5mbyIsIGk5MTVfcmluZ2J1ZmZlcl9pbmZvLCAwLCAodm9pZCAqKVZDU30sCisJeyJpOTE1X2JsdF9yaW5nYnVmZmVyX2RhdGEiLCBpOTE1X3JpbmdidWZmZXJfZGF0YSwgMCwgKHZvaWQgKilCQ1N9LAorCXsiaTkxNV9ibHRfcmluZ2J1ZmZlcl9pbmZvIiwgaTkxNV9yaW5nYnVmZmVyX2luZm8sIDAsICh2b2lkICopQkNTfSwKIAl7Imk5MTVfYmF0Y2hidWZmZXJzIiwgaTkxNV9iYXRjaGJ1ZmZlcl9pbmZvLCAwfSwKIAl7Imk5MTVfZXJyb3Jfc3RhdGUiLCBpOTE1X2Vycm9yX3N0YXRlLCAwfSwKIAl7Imk5MTVfcnN0ZGJ5X2RlbGF5cyIsIGk5MTVfcnN0ZGJ5X2RlbGF5cywgMH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCBjYjkwMGRjLi44NDRmM2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTUwLDYgKzUwLDggQEAKIHN0YXRpYyBpbnQgaTkxNV9pbml0X3BoeXNfaHdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nID0gTFBfUklORyhkZXZfcHJpdik7CisKIAkvKiBQcm9ncmFtIEhhcmR3YXJlIFN0YXR1cyBQYWdlICovCiAJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPQogCQlkcm1fcGNpX2FsbG9jKGRldiwgUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwpAQCAtNTgsMTEgKzYwLDEwIEBACiAJCURSTV9FUlJPUigiQ2FuIG5vdCBhbGxvY2F0ZSBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlkZXZfcHJpdi0+cmVuZGVyX3Jpbmcuc3RhdHVzX3BhZ2UucGFnZV9hZGRyCi0JCT0gZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWgtPnZhZGRyOworCXJpbmctPnN0YXR1c19wYWdlLnBhZ2VfYWRkciA9IGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoLT52YWRkcjsKIAlkZXZfcHJpdi0+ZG1hX3N0YXR1c19wYWdlID0gZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWgtPmJ1c2FkZHI7CiAKLQltZW1zZXQoZGV2X3ByaXYtPnJlbmRlcl9yaW5nLnN0YXR1c19wYWdlLnBhZ2VfYWRkciwgMCwgUEFHRV9TSVpFKTsKKwltZW1zZXQocmluZy0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyLCAwLCBQQUdFX1NJWkUpOwogCiAJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQpCiAJCWRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UgfD0gKGRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UgPj4gMjgpICYKQEAgLTgwLDEzICs4MSwxNSBAQAogc3RhdGljIHZvaWQgaTkxNV9mcmVlX2h3cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyA9IExQX1JJTkcoZGV2X3ByaXYpOworCiAJaWYgKGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKSB7CiAJCWRybV9wY2lfZnJlZShkZXYsIGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKTsKIAkJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPSBOVUxMOwogCX0KIAotCWlmIChkZXZfcHJpdi0+cmVuZGVyX3Jpbmcuc3RhdHVzX3BhZ2UuZ2Z4X2FkZHIpIHsKLQkJZGV2X3ByaXYtPnJlbmRlcl9yaW5nLnN0YXR1c19wYWdlLmdmeF9hZGRyID0gMDsKKwlpZiAocmluZy0+c3RhdHVzX3BhZ2UuZ2Z4X2FkZHIpIHsKKwkJcmluZy0+c3RhdHVzX3BhZ2UuZ2Z4X2FkZHIgPSAwOwogCQlkcm1fY29yZV9pb3JlbWFwZnJlZSgmZGV2X3ByaXYtPmh3c19tYXAsIGRldik7CiAJfQogCkBAIC05OCw3ICsxMDEsNyBAQAogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXY7Ci0Jc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nID0gJmRldl9wcml2LT5yZW5kZXJfcmluZzsKKwlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcgPSBMUF9SSU5HKGRldl9wcml2KTsKIAogCS8qCiAJICogV2Ugc2hvdWxkIG5ldmVyIGxvc2UgY29udGV4dCBvbiB0aGUgcmluZyB3aXRoIG1vZGVzZXR0aW5nCkBAIC0xMDcsOCArMTEwLDggQEAKIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKIAkJcmV0dXJuOwogCi0JcmluZy0+aGVhZCA9IEk5MTVfUkVBRChQUkIwX0hFQUQpICYgSEVBRF9BRERSOwotCXJpbmctPnRhaWwgPSBJOTE1X1JFQUQoUFJCMF9UQUlMKSAmIFRBSUxfQUREUjsKKwlyaW5nLT5oZWFkID0gSTkxNV9SRUFEX0hFQUQocmluZykgJiBIRUFEX0FERFI7CisJcmluZy0+dGFpbCA9IEk5MTVfUkVBRF9UQUlMKHJpbmcpICYgVEFJTF9BRERSOwogCXJpbmctPnNwYWNlID0gcmluZy0+aGVhZCAtIChyaW5nLT50YWlsICsgOCk7CiAJaWYgKHJpbmctPnNwYWNlIDwgMCkKIAkJcmluZy0+c3BhY2UgKz0gcmluZy0+c2l6ZTsKQEAgLTEyNCw2ICsxMjcsOCBAQAogc3RhdGljIGludCBpOTE1X2RtYV9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOworCiAJLyogTWFrZSBzdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGhlcmUgYmVjYXVzZSB0aGUgdW5pbnN0YWxsIGlvY3RsCiAJICogbWF5IG5vdCBoYXZlIGJlZW4gY2FsbGVkIGZyb20gdXNlcnNwYWNlIGFuZCBhZnRlciBkZXZfcHJpdmF0ZQogCSAqIGlzIGZyZWVkLCBpdCdzIHRvbyBsYXRlLgpAQCAtMTMyLDkgKzEzNyw4IEBACiAJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JaW50ZWxfY2xlYW51cF9yaW5nX2J1ZmZlcihkZXYsICZkZXZfcHJpdi0+cmVuZGVyX3JpbmcpOwotCWludGVsX2NsZWFudXBfcmluZ19idWZmZXIoZGV2LCAmZGV2X3ByaXYtPmJzZF9yaW5nKTsKLQlpbnRlbF9jbGVhbnVwX3JpbmdfYnVmZmVyKGRldiwgJmRldl9wcml2LT5ibHRfcmluZyk7CisJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspCisJCWludGVsX2NsZWFudXBfcmluZ19idWZmZXIoJmRldl9wcml2LT5yaW5nW2ldKTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAogCS8qIENsZWFyIHRoZSBIV1MgdmlydHVhbCBhZGRyZXNzIGF0IHRlYXJkb3duICovCkBAIC0xNDgsNiArMTUyLDcgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZGV2LT5wcmltYXJ5LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyA9IExQX1JJTkcoZGV2X3ByaXYpOwogCiAJbWFzdGVyX3ByaXYtPnNhcmVhID0gZHJtX2dldHNhcmVhKGRldik7CiAJaWYgKG1hc3Rlcl9wcml2LT5zYXJlYSkgewpAQCAtMTU4LDI0ICsxNjMsMjQgQEAKIAl9CiAKIAlpZiAoaW5pdC0+cmluZ19zaXplICE9IDApIHsKLQkJaWYgKGRldl9wcml2LT5yZW5kZXJfcmluZy5nZW1fb2JqZWN0ICE9IE5VTEwpIHsKKwkJaWYgKHJpbmctPm9iaiAhPSBOVUxMKSB7CiAJCQlpOTE1X2RtYV9jbGVhbnVwKGRldik7CiAJCQlEUk1fRVJST1IoIkNsaWVudCB0cmllZCB0byBpbml0aWFsaXplIHJpbmdidWZmZXIgaW4gIgogCQkJCSAgIkdFTSBtb2RlXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJZGV2X3ByaXYtPnJlbmRlcl9yaW5nLnNpemUgPSBpbml0LT5yaW5nX3NpemU7CisJCXJpbmctPnNpemUgPSBpbml0LT5yaW5nX3NpemU7CiAKLQkJZGV2X3ByaXYtPnJlbmRlcl9yaW5nLm1hcC5vZmZzZXQgPSBpbml0LT5yaW5nX3N0YXJ0OwotCQlkZXZfcHJpdi0+cmVuZGVyX3JpbmcubWFwLnNpemUgPSBpbml0LT5yaW5nX3NpemU7Ci0JCWRldl9wcml2LT5yZW5kZXJfcmluZy5tYXAudHlwZSA9IDA7Ci0JCWRldl9wcml2LT5yZW5kZXJfcmluZy5tYXAuZmxhZ3MgPSAwOwotCQlkZXZfcHJpdi0+cmVuZGVyX3JpbmcubWFwLm10cnIgPSAwOworCQlyaW5nLT5tYXAub2Zmc2V0ID0gaW5pdC0+cmluZ19zdGFydDsKKwkJcmluZy0+bWFwLnNpemUgPSBpbml0LT5yaW5nX3NpemU7CisJCXJpbmctPm1hcC50eXBlID0gMDsKKwkJcmluZy0+bWFwLmZsYWdzID0gMDsKKwkJcmluZy0+bWFwLm10cnIgPSAwOwogCi0JCWRybV9jb3JlX2lvcmVtYXBfd2MoJmRldl9wcml2LT5yZW5kZXJfcmluZy5tYXAsIGRldik7CisJCWRybV9jb3JlX2lvcmVtYXBfd2MoJnJpbmctPm1hcCwgZGV2KTsKIAotCQlpZiAoZGV2X3ByaXYtPnJlbmRlcl9yaW5nLm1hcC5oYW5kbGUgPT0gTlVMTCkgeworCQlpZiAocmluZy0+bWFwLmhhbmRsZSA9PSBOVUxMKSB7CiAJCQlpOTE1X2RtYV9jbGVhbnVwKGRldik7CiAJCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgogCQkJCSAgIiByaW5nIGJ1ZmZlclxuIik7CkBAIC0xODMsNyArMTg4LDcgQEAKIAkJfQogCX0KIAotCWRldl9wcml2LT5yZW5kZXJfcmluZy52aXJ0dWFsX3N0YXJ0ID0gZGV2X3ByaXYtPnJlbmRlcl9yaW5nLm1hcC5oYW5kbGU7CisJcmluZy0+dmlydHVhbF9zdGFydCA9IHJpbmctPm1hcC5oYW5kbGU7CiAKIAlkZXZfcHJpdi0+Y3BwID0gaW5pdC0+Y3BwOwogCWRldl9wcml2LT5iYWNrX29mZnNldCA9IGluaXQtPmJhY2tfb2Zmc2V0OwpAQCAtMjAyLDEyICsyMDcsMTAgQEAKIHN0YXRpYyBpbnQgaTkxNV9kbWFfcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nID0gTFBfUklORyhkZXZfcHJpdik7CiAKLQlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmc7CiAJRFJNX0RFQlVHX0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKIAotCXJpbmcgPSAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nOwotCiAJaWYgKHJpbmctPm1hcC5oYW5kbGUgPT0gTlVMTCkgewogCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgogCQkJICAiIHJpbmcgYnVmZmVyXG4iKTsKQEAgLTIyMiw3ICsyMjUsNyBAQAogCURSTV9ERUJVR19EUklWRVIoImh3IHN0YXR1cyBwYWdlIEAgJXBcbiIsCiAJCQkJcmluZy0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyKTsKIAlpZiAocmluZy0+c3RhdHVzX3BhZ2UuZ2Z4X2FkZHIgIT0gMCkKLQkJaW50ZWxfcmluZ19zZXR1cF9zdGF0dXNfcGFnZShkZXYsIHJpbmcpOworCQlpbnRlbF9yaW5nX3NldHVwX3N0YXR1c19wYWdlKHJpbmcpOwogCWVsc2UKIAkJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+ZG1hX3N0YXR1c19wYWdlKTsKIApAQCAtMjY0LDcgKzI2Nyw3IEBACiAgKiBpbnN0cnVjdGlvbiBkZXRlY3RlZCB3aWxsIGJlIGdpdmVuIGEgc2l6ZSBvZiB6ZXJvLCB3aGljaCBpcyBhCiAgKiBzaWduYWwgdG8gYWJvcnQgdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlci4KICAqLwotc3RhdGljIGludCBkb192YWxpZGF0ZV9jbWQoaW50IGNtZCkKK3N0YXRpYyBpbnQgdmFsaWRhdGVfY21kKGludCBjbWQpCiB7CiAJc3dpdGNoICgoKGNtZCA+PiAyOSkgJiAweDcpKSB7CiAJY2FzZSAweDA6CkBAIC0zMjIsNDAgKzMyNSwyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZhbGlkYXRlX2NtZChpbnQgY21kKQotewotCWludCByZXQgPSBkb192YWxpZGF0ZV9jbWQoY21kKTsKLQotLyoJcHJpbnRrKCJ2YWxpZGF0ZV9jbWQoICV4ICk6ICVkXG4iLCBjbWQsIHJldCk7ICovCi0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IGk5MTVfZW1pdF9jbWRzKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgKmJ1ZmZlciwgaW50IGR3b3JkcykKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgaTsKKwlpbnQgaSwgcmV0OwogCi0JaWYgKChkd29yZHMrMSkgKiBzaXplb2YoaW50KSA+PSBkZXZfcHJpdi0+cmVuZGVyX3Jpbmcuc2l6ZSAtIDgpCisJaWYgKChkd29yZHMrMSkgKiBzaXplb2YoaW50KSA+PSBMUF9SSU5HKGRldl9wcml2KS0+c2l6ZSAtIDgpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JQkVHSU5fTFBfUklORygoZHdvcmRzKzEpJn4xKTsKLQogCWZvciAoaSA9IDA7IGkgPCBkd29yZHM7KSB7Ci0JCWludCBjbWQsIHN6OwotCi0JCWNtZCA9IGJ1ZmZlcltpXTsKLQotCQlpZiAoKHN6ID0gdmFsaWRhdGVfY21kKGNtZCkpID09IDAgfHwgaSArIHN6ID4gZHdvcmRzKQorCQlpbnQgc3ogPSB2YWxpZGF0ZV9jbWQoYnVmZmVyW2ldKTsKKwkJaWYgKHN6ID09IDAgfHwgaSArIHN6ID4gZHdvcmRzKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJT1VUX1JJTkcoY21kKTsKLQotCQl3aGlsZSAoKytpLCAtLXN6KSB7Ci0JCQlPVVRfUklORyhidWZmZXJbaV0pOwotCQl9CisJCWkgKz0gc3o7CiAJfQogCisJcmV0ID0gQkVHSU5fTFBfUklORygoZHdvcmRzKzEpJn4xKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IGR3b3JkczsgaSsrKQorCQlPVVRfUklORyhidWZmZXJbaV0pOwogCWlmIChkd29yZHMgJiAxKQogCQlPVVRfUklORygwKTsKIApAQCAtMzY2LDM0ICszNTYsNDEgQEAKIAogaW50CiBpOTE1X2VtaXRfYm94KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JICAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmJveGVzLAotCSAgICAgIGludCBpLCBpbnQgRFIxLCBpbnQgRFI0KQorCSAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpib3gsCisJICAgICAgaW50IERSMSwgaW50IERSNCkKIHsKLQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBib3ggPSBib3hlc1tpXTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CiAKLQlpZiAoYm94LnkyIDw9IGJveC55MSB8fCBib3gueDIgPD0gYm94LngxIHx8IGJveC55MiA8PSAwIHx8IGJveC54MiA8PSAwKSB7CisJaWYgKGJveC0+eTIgPD0gYm94LT55MSB8fCBib3gtPngyIDw9IGJveC0+eDEgfHwKKwkgICAgYm94LT55MiA8PSAwIHx8IGJveC0+eDIgPD0gMCkgewogCQlEUk1fRVJST1IoIkJhZCBib3ggJWQsJWQuLiVkLCVkXG4iLAotCQkJICBib3gueDEsIGJveC55MSwgYm94LngyLCBib3gueTIpOworCQkJICBib3gtPngxLCBib3gtPnkxLCBib3gtPngyLCBib3gtPnkyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQpIHsKLQkJQkVHSU5fTFBfUklORyg0KTsKKwkJcmV0ID0gQkVHSU5fTFBfUklORyg0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKIAkJT1VUX1JJTkcoR0ZYX09QX0RSQVdSRUNUX0lORk9fSTk2NSk7Ci0JCU9VVF9SSU5HKChib3gueDEgJiAweGZmZmYpIHwgKGJveC55MSA8PCAxNikpOwotCQlPVVRfUklORygoKGJveC54MiAtIDEpICYgMHhmZmZmKSB8ICgoYm94LnkyIC0gMSkgPDwgMTYpKTsKKwkJT1VUX1JJTkcoKGJveC0+eDEgJiAweGZmZmYpIHwgKGJveC0+eTEgPDwgMTYpKTsKKwkJT1VUX1JJTkcoKChib3gtPngyIC0gMSkgJiAweGZmZmYpIHwgKChib3gtPnkyIC0gMSkgPDwgMTYpKTsKIAkJT1VUX1JJTkcoRFI0KTsKLQkJQURWQU5DRV9MUF9SSU5HKCk7CiAJfSBlbHNlIHsKLQkJQkVHSU5fTFBfUklORyg2KTsKKwkJcmV0ID0gQkVHSU5fTFBfUklORyg2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKIAkJT1VUX1JJTkcoR0ZYX09QX0RSQVdSRUNUX0lORk8pOwogCQlPVVRfUklORyhEUjEpOwotCQlPVVRfUklORygoYm94LngxICYgMHhmZmZmKSB8IChib3gueTEgPDwgMTYpKTsKLQkJT1VUX1JJTkcoKChib3gueDIgLSAxKSAmIDB4ZmZmZikgfCAoKGJveC55MiAtIDEpIDw8IDE2KSk7CisJCU9VVF9SSU5HKChib3gtPngxICYgMHhmZmZmKSB8IChib3gtPnkxIDw8IDE2KSk7CisJCU9VVF9SSU5HKCgoYm94LT54MiAtIDEpICYgMHhmZmZmKSB8ICgoYm94LT55MiAtIDEpIDw8IDE2KSk7CiAJCU9VVF9SSU5HKERSNCk7CiAJCU9VVF9SSU5HKDApOwotCQlBRFZBTkNFX0xQX1JJTkcoKTsKIAl9CisJQURWQU5DRV9MUF9SSU5HKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQxMywxMiArNDEwLDEzIEBACiAJaWYgKG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2KQogCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9lbnF1ZXVlID0gZGV2X3ByaXYtPmNvdW50ZXI7CiAKLQlCRUdJTl9MUF9SSU5HKDQpOwotCU9VVF9SSU5HKE1JX1NUT1JFX0RXT1JEX0lOREVYKTsKLQlPVVRfUklORyhJOTE1X0JSRUFEQ1JVTUJfSU5ERVggPDwgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQpOwotCU9VVF9SSU5HKGRldl9wcml2LT5jb3VudGVyKTsKLQlPVVRfUklORygwKTsKLQlBRFZBTkNFX0xQX1JJTkcoKTsKKwlpZiAoQkVHSU5fTFBfUklORyg0KSA9PSAwKSB7CisJCU9VVF9SSU5HKE1JX1NUT1JFX0RXT1JEX0lOREVYKTsKKwkJT1VUX1JJTkcoSTkxNV9CUkVBRENSVU1CX0lOREVYIDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKKwkJT1VUX1JJTkcoZGV2X3ByaXYtPmNvdW50ZXIpOworCQlPVVRfUklORygwKTsKKwkJQURWQU5DRV9MUF9SSU5HKCk7CisJfQogfQogCiBzdGF0aWMgaW50IGk5MTVfZGlzcGF0Y2hfY21kYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LApAQCAtNDQwLDcgKzQzOCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlpZiAoaSA8IG5ib3gpIHsKLQkJCXJldCA9IGk5MTVfZW1pdF9ib3goZGV2LCBjbGlwcmVjdHMsIGksCisJCQlyZXQgPSBpOTE1X2VtaXRfYm94KGRldiwgJmNsaXByZWN0c1tpXSwKIAkJCQkJICAgIGNtZC0+RFIxLCBjbWQtPkRSNCk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CkBAIC00NTksOCArNDU3LDkgQEAKIAkJCQkgICAgIGRybV9pOTE1X2JhdGNoYnVmZmVyX3QgKiBiYXRjaCwKIAkJCQkgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcmVjdHMpCiB7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgbmJveCA9IGJhdGNoLT5udW1fY2xpcHJlY3RzOwotCWludCBpID0gMCwgY291bnQ7CisJaW50IGksIGNvdW50LCByZXQ7CiAKIAlpZiAoKGJhdGNoLT5zdGFydCB8IGJhdGNoLT51c2VkKSAmIDB4NykgewogCQlEUk1fRVJST1IoImFsaWdubWVudCIpOwpAQCAtNDcwLDE3ICs0NjksMTkgQEAKIAlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKIAogCWNvdW50ID0gbmJveCA/IG5ib3ggOiAxOwotCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJaWYgKGkgPCBuYm94KSB7Ci0JCQlpbnQgcmV0ID0gaTkxNV9lbWl0X2JveChkZXYsIGNsaXByZWN0cywgaSwKLQkJCQkJCWJhdGNoLT5EUjEsIGJhdGNoLT5EUjQpOworCQkJcmV0ID0gaTkxNV9lbWl0X2JveChkZXYsICZjbGlwcmVjdHNbaV0sCisJCQkJCSAgICBiYXRjaC0+RFIxLCBiYXRjaC0+RFI0KTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAkJfQogCiAJCWlmICghSVNfSTgzMChkZXYpICYmICFJU184NDVHKGRldikpIHsKLQkJCUJFR0lOX0xQX1JJTkcoMik7CisJCQlyZXQgPSBCRUdJTl9MUF9SSU5HKDIpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCiAJCQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkgewogCQkJCU9VVF9SSU5HKE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8ICgyIDw8IDYpIHwgTUlfQkFUQ0hfTk9OX1NFQ1VSRV9JOTY1KTsKIAkJCQlPVVRfUklORyhiYXRjaC0+c3RhcnQpOwpAQCAtNDg4LDI2ICs0ODksMjkgQEAKIAkJCQlPVVRfUklORyhNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAoMiA8PCA2KSk7CiAJCQkJT1VUX1JJTkcoYmF0Y2gtPnN0YXJ0IHwgTUlfQkFUQ0hfTk9OX1NFQ1VSRSk7CiAJCQl9Ci0JCQlBRFZBTkNFX0xQX1JJTkcoKTsKIAkJfSBlbHNlIHsKLQkJCUJFR0lOX0xQX1JJTkcoNCk7CisJCQlyZXQgPSBCRUdJTl9MUF9SSU5HKDQpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCiAJCQlPVVRfUklORyhNSV9CQVRDSF9CVUZGRVIpOwogCQkJT1VUX1JJTkcoYmF0Y2gtPnN0YXJ0IHwgTUlfQkFUQ0hfTk9OX1NFQ1VSRSk7CiAJCQlPVVRfUklORyhiYXRjaC0+c3RhcnQgKyBiYXRjaC0+dXNlZCAtIDQpOwogCQkJT1VUX1JJTkcoMCk7Ci0JCQlBRFZBTkNFX0xQX1JJTkcoKTsKIAkJfQorCQlBRFZBTkNFX0xQX1JJTkcoKTsKIAl9CiAKIAogCWlmIChJU19HNFgoZGV2KSB8fCBJU19HRU41KGRldikpIHsKLQkJQkVHSU5fTFBfUklORygyKTsKLQkJT1VUX1JJTkcoTUlfRkxVU0ggfCBNSV9OT19XUklURV9GTFVTSCB8IE1JX0lOVkFMSURBVEVfSVNQKTsKLQkJT1VUX1JJTkcoTUlfTk9PUCk7Ci0JCUFEVkFOQ0VfTFBfUklORygpOworCQlpZiAoQkVHSU5fTFBfUklORygyKSA9PSAwKSB7CisJCQlPVVRfUklORyhNSV9GTFVTSCB8IE1JX05PX1dSSVRFX0ZMVVNIIHwgTUlfSU5WQUxJREFURV9JU1ApOworCQkJT1VUX1JJTkcoTUlfTk9PUCk7CisJCQlBRFZBTkNFX0xQX1JJTkcoKTsKKwkJfQogCX0KLQlpOTE1X2VtaXRfYnJlYWRjcnVtYihkZXYpOwogCisJaTkxNV9lbWl0X2JyZWFkY3J1bWIoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTE2LDYgKzUyMCw3IEBACiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9CiAJCWRldi0+cHJpbWFyeS0+bWFzdGVyLT5kcml2ZXJfcHJpdjsKKwlpbnQgcmV0OwogCiAJaWYgKCFtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MjcsMTIgKzUzMiwxMyBAQAogCiAJaTkxNV9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CiAKLQlCRUdJTl9MUF9SSU5HKDIpOworCXJldCA9IEJFR0lOX0xQX1JJTkcoMTApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlPVVRfUklORyhNSV9GTFVTSCB8IE1JX1JFQURfRkxVU0gpOwogCU9VVF9SSU5HKDApOwotCUFEVkFOQ0VfTFBfUklORygpOwogCi0JQkVHSU5fTFBfUklORyg2KTsKIAlPVVRfUklORyhDTURfT1BfRElTUExBWUJVRkZFUl9JTkZPIHwgQVNZTkNfRkxJUCk7CiAJT1VUX1JJTkcoMCk7CiAJaWYgKGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMCkgewpAQCAtNTQzLDMzICs1NDksMzIgQEAKIAkJZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9IDA7CiAJfQogCU9VVF9SSU5HKDApOwotCUFEVkFOQ0VfTFBfUklORygpOwogCi0JQkVHSU5fTFBfUklORygyKTsKIAlPVVRfUklORyhNSV9XQUlUX0ZPUl9FVkVOVCB8IE1JX1dBSVRfRk9SX1BMQU5FX0FfRkxJUCk7CiAJT1VUX1JJTkcoMCk7CisKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIAogCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2VucXVldWUgPSBkZXZfcHJpdi0+Y291bnRlcisrOwogCi0JQkVHSU5fTFBfUklORyg0KTsKLQlPVVRfUklORyhNSV9TVE9SRV9EV09SRF9JTkRFWCk7Ci0JT1VUX1JJTkcoSTkxNV9CUkVBRENSVU1CX0lOREVYIDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKLQlPVVRfUklORyhkZXZfcHJpdi0+Y291bnRlcik7Ci0JT1VUX1JJTkcoMCk7Ci0JQURWQU5DRV9MUF9SSU5HKCk7CisJaWYgKEJFR0lOX0xQX1JJTkcoNCkgPT0gMCkgeworCQlPVVRfUklORyhNSV9TVE9SRV9EV09SRF9JTkRFWCk7CisJCU9VVF9SSU5HKEk5MTVfQlJFQURDUlVNQl9JTkRFWCA8PCBNSV9TVE9SRV9EV09SRF9JTkRFWF9TSElGVCk7CisJCU9VVF9SSU5HKGRldl9wcml2LT5jb3VudGVyKTsKKwkJT1VUX1JJTkcoMCk7CisJCUFEVkFOQ0VfTFBfUklORygpOworCX0KIAogCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZl9jdXJyZW50X3BhZ2UgPSBkZXZfcHJpdi0+Y3VycmVudF9wYWdlOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGk5MTVfcXVpZXNjZW50KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIGludCBpOTE1X3F1aWVzY2VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyA9IExQX1JJTkcoZGV2LT5kZXZfcHJpdmF0ZSk7CiAKIAlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKLQlyZXR1cm4gaW50ZWxfd2FpdF9yaW5nX2J1ZmZlcihkZXYsICZkZXZfcHJpdi0+cmVuZGVyX3JpbmcsCi0JCQkJICAgICAgZGV2X3ByaXYtPnJlbmRlcl9yaW5nLnNpemUgLSA4KTsKKwlyZXR1cm4gaW50ZWxfd2FpdF9yaW5nX2J1ZmZlcihyaW5nLCByaW5nLT5zaXplIC0gOCk7CiB9CiAKIHN0YXRpYyBpbnQgaTkxNV9mbHVzaF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtNzY4LDkgKzc3MywxNSBAQAogCWNhc2UgSTkxNV9QQVJBTV9IQVNfQkxUOgogCQl2YWx1ZSA9IEhBU19CTFQoZGV2KTsKIAkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19SRUxBWEVEX0ZFTkNJTkc6CisJCXZhbHVlID0gMTsKKwkJYnJlYWs7CiAJY2FzZSBJOTE1X1BBUkFNX0hBU19DT0hFUkVOVF9SSU5HUzoKIAkJdmFsdWUgPSAxOwogCQlicmVhazsKKwljYXNlIEk5MTVfUEFSQU1fSEFTX0VYRUNfQ09OU1RBTlRTOgorCQl2YWx1ZSA9IElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQ7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9ERUJVR19EUklWRVIoIlVua25vd24gcGFyYW1ldGVyICVkXG4iLAogCQkJCSBwYXJhbS0+cGFyYW0pOwpAQCAtODI2LDcgKzgzNyw3IEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k5MTVfaHdzX2FkZHJfdCAqaHdzID0gZGF0YTsKLQlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcgPSAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nOworCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyA9IExQX1JJTkcoZGV2X3ByaXYpOwogCiAJaWYgKCFJOTE1X05FRURfR0ZYX0hXUyhkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwMDUsNzMgKzEwMTYsNDcgQEAKICNkZWZpbmUgUFRFX1ZBTElECQkJKDEgPDwgMCkKIAogLyoqCi0gKiBpOTE1X2d0dF90b19waHlzIC0gdGFrZSBhIEdUVCBhZGRyZXNzIGFuZCB0dXJuIGl0IGludG8gYSBwaHlzaWNhbCBvbmUKKyAqIGk5MTVfc3RvbGVuX3RvX3BoeXMgLSB0YWtlIGFuIG9mZnNldCBpbnRvIHN0b2xlbiBtZW1vcnkgYW5kIHR1cm4gaXQgaW50bworICogICAgICAgICAgICAgICAgICAgICAgIGEgcGh5c2ljYWwgb25lCiAgKiBAZGV2OiBkcm0gZGV2aWNlCi0gKiBAZ3R0X2FkZHI6IGFkZHJlc3MgdG8gdHJhbnNsYXRlCisgKiBAb2Zmc2V0OiBhZGRyZXNzIHRvIHRyYW5zbGF0ZQogICoKLSAqIFNvbWUgY2hpcCBmdW5jdGlvbnMgcmVxdWlyZSBhbGxvY2F0aW9ucyBmcm9tIHN0b2xlbiBzcGFjZSBidXQgbmVlZCB0aGUKLSAqIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBpbiBxdWVzdGlvbi4gIFdlIHVzZSB0aGlzIHJvdXRpbmUKLSAqIHRvIGdldCBhIHBoeXNpY2FsIGFkZHJlc3Mgc3VpdGFibGUgZm9yIHJlZ2lzdGVyIHByb2dyYW1taW5nIGZyb20gYSBnaXZlbgotICogR1RUIGFkZHJlc3MuCisgKiBTb21lIGNoaXAgZnVuY3Rpb25zIHJlcXVpcmUgYWxsb2NhdGlvbnMgZnJvbSBzdG9sZW4gc3BhY2UgYW5kIG5lZWQgdGhlCisgKiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgaW4gcXVlc3Rpb24uCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGk5MTVfZ3R0X3RvX3BoeXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGd0dF9hZGRyKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgaTkxNV9zdG9sZW5fdG9fcGh5cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgb2Zmc2V0KQogewotCXVuc2lnbmVkIGxvbmcgKmd0dDsKLQl1bnNpZ25lZCBsb25nIGVudHJ5LCBwaHlzOwotCWludCBndHRfYmFyID0gSVNfR0VOMihkZXYpID8gMSA6IDA7Ci0JaW50IGd0dF9vZmZzZXQsIGd0dF9zaXplOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXZfcHJpdi0+YnJpZGdlX2RldjsKKwl1MzIgYmFzZTsKIAotCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KSB7Ci0JCWlmIChJU19HNFgoZGV2KSB8fCBJTlRFTF9JTkZPKGRldiktPmdlbiA+IDQpIHsKLQkJCWd0dF9vZmZzZXQgPSAyKjEwMjQqMTAyNDsKLQkJCWd0dF9zaXplID0gMioxMDI0KjEwMjQ7Ci0JCX0gZWxzZSB7Ci0JCQlndHRfb2Zmc2V0ID0gNTEyKjEwMjQ7Ci0JCQlndHRfc2l6ZSA9IDUxMioxMDI0OwotCQl9CisjaWYgMAorCS8qIE9uIHRoZSBtYWNoaW5lcyBJIGhhdmUgdGVzdGVkIHRoZSBHcmFwaGljcyBCYXNlIG9mIFN0b2xlbiBNZW1vcnkKKwkgKiBpcyB1bnJlbGlhYmxlLCBzbyBjb21wdXRlIHRoZSBiYXNlIGJ5IHN1YnRyYWN0aW5nIHRoZSBzdG9sZW4gbWVtb3J5CisJICogZnJvbSB0aGUgVG9wIG9mIExvdyBVc2FibGUgRFJBTSB3aGljaCBpcyB3aGVyZSB0aGUgQklPUyBwbGFjZXMKKwkgKiB0aGUgZ3JhcGhpY3Mgc3RvbGVuIG1lbW9yeS4KKwkgKi8KKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPiAzIHx8IElTX0czMyhkZXYpKSB7CisJCS8qIHRvcCAzMmJpdHMgYXJlIHJlc2VydmVkID0gMCAqLworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHhBNCwgJmJhc2UpOwogCX0gZWxzZSB7Ci0JCWd0dF9iYXIgPSAzOwotCQlndHRfb2Zmc2V0ID0gMDsKLQkJZ3R0X3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgZ3R0X2Jhcik7CisJCS8qIFhYWCBwcmVzdW1lIDh4eCBpcyB0aGUgc2FtZSBhcyBpOTE1ICovCisJCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGRldi0+YnVzLCAyLCAweDVDLCAmYmFzZSk7CiAJfQotCi0JZ3R0ID0gaW9yZW1hcF93YyhwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCBndHRfYmFyKSArIGd0dF9vZmZzZXQsCi0JCQkgZ3R0X3NpemUpOwotCWlmICghZ3R0KSB7Ci0JCURSTV9FUlJPUigiaW9yZW1hcCBvZiBHVFQgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIDA7CisjZWxzZQorCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+IDMgfHwgSVNfRzMzKGRldikpIHsKKwkJdTE2IHZhbDsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgMHhiMCwgJnZhbCk7CisJCWJhc2UgPSB2YWwgPj4gNCA8PCAyMDsKKwl9IGVsc2UgeworCQl1OCB2YWw7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4OWMsICZ2YWwpOworCQliYXNlID0gdmFsID4+IDMgPDwgMjc7CiAJfQorCWJhc2UgLT0gZGV2X3ByaXYtPm1tLmd0dC0+c3RvbGVuX3NpemU7CisjZW5kaWYKIAotCWVudHJ5ID0gKih2b2xhdGlsZSB1MzIgKikoZ3R0ICsgKGd0dF9hZGRyIC8gMTAyNCkpOwotCi0JRFJNX0RFQlVHX0RSSVZFUigiR1RUIGFkZHI6IDB4JTA4bHgsIFBURTogMHglMDhseFxuIiwgZ3R0X2FkZHIsIGVudHJ5KTsKLQotCS8qIE1hc2sgb3V0IHRoZXNlIHJlc2VydmVkIGJpdHMgb24gdGhpcyBoYXJkd2FyZS4gKi8KLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA0ICYmICFJU19HMzMoZGV2KSkKLQkJZW50cnkgJj0gflBURV9BRERSRVNTX01BU0tfSElHSDsKLQotCS8qIElmIGl0J3Mgbm90IGEgbWFwcGluZyB0eXBlIHdlIGtub3csIHRoZW4gYmFpbC4gKi8KLQlpZiAoKGVudHJ5ICYgUFRFX01BUFBJTkdfVFlQRV9NQVNLKSAhPSBQVEVfTUFQUElOR19UWVBFX1VOQ0FDSEVEICYmCi0JICAgIChlbnRyeSAmIFBURV9NQVBQSU5HX1RZUEVfTUFTSykgIT0gUFRFX01BUFBJTkdfVFlQRV9DQUNIRUQpCXsKLQkJaW91bm1hcChndHQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoIShlbnRyeSAmIFBURV9WQUxJRCkpIHsKLQkJRFJNX0VSUk9SKCJiYWQgR1RUIGVudHJ5IGluIHN0b2xlbiBzcGFjZVxuIik7Ci0JCWlvdW5tYXAoZ3R0KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaW91bm1hcChndHQpOwotCi0JcGh5cyA9KGVudHJ5ICYgUFRFX0FERFJFU1NfTUFTSykgfAotCQkoKHVpbnQ2NF90KShlbnRyeSAmIFBURV9BRERSRVNTX01BU0tfSElHSCkgPDwgKDMyIC0gNCkpOwotCi0JRFJNX0RFQlVHX0RSSVZFUigiR1RUIGFkZHI6IDB4JTA4bHgsIHBoeXMgYWRkcjogMHglMDhseFxuIiwgZ3R0X2FkZHIsIHBoeXMpOwotCi0JcmV0dXJuIHBoeXM7CisJcmV0dXJuIGJhc2UgKyBvZmZzZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGk5MTVfd2Fybl9zdG9sZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTEwODcsNTQgKzEwNzIsMzUgQEAKIAl1bnNpZ25lZCBsb25nIGNmYl9iYXNlOwogCXVuc2lnbmVkIGxvbmcgbGxfYmFzZSA9IDA7CiAKLQkvKiBMZWF2ZSAxTSBmb3IgbGluZSBsZW5ndGggYnVmZmVyICYgbWlzYy4gKi8KLQljb21wcmVzc2VkX2ZiID0gZHJtX21tX3NlYXJjaF9mcmVlKCZkZXZfcHJpdi0+bW0udnJhbSwgc2l6ZSwgNDA5NiwgMCk7Ci0JaWYgKCFjb21wcmVzc2VkX2ZiKSB7Ci0JCWRldl9wcml2LT5ub19mYmNfcmVhc29uID0gRkJDX1NUT0xFTl9UT09fU01BTEw7Ci0JCWk5MTVfd2Fybl9zdG9sZW4oZGV2KTsKLQkJcmV0dXJuOwotCX0KKwljb21wcmVzc2VkX2ZiID0gZHJtX21tX3NlYXJjaF9mcmVlKCZkZXZfcHJpdi0+bW0uc3RvbGVuLCBzaXplLCA0MDk2LCAwKTsKKwlpZiAoY29tcHJlc3NlZF9mYikKKwkJY29tcHJlc3NlZF9mYiA9IGRybV9tbV9nZXRfYmxvY2soY29tcHJlc3NlZF9mYiwgc2l6ZSwgNDA5Nik7CisJaWYgKCFjb21wcmVzc2VkX2ZiKQorCQlnb3RvIGVycjsKIAotCWNvbXByZXNzZWRfZmIgPSBkcm1fbW1fZ2V0X2Jsb2NrKGNvbXByZXNzZWRfZmIsIHNpemUsIDQwOTYpOwotCWlmICghY29tcHJlc3NlZF9mYikgewotCQlpOTE1X3dhcm5fc3RvbGVuKGRldik7Ci0JCWRldl9wcml2LT5ub19mYmNfcmVhc29uID0gRkJDX1NUT0xFTl9UT09fU01BTEw7Ci0JCXJldHVybjsKLQl9CisJY2ZiX2Jhc2UgPSBpOTE1X3N0b2xlbl90b19waHlzKGRldiwgY29tcHJlc3NlZF9mYi0+c3RhcnQpOworCWlmICghY2ZiX2Jhc2UpCisJCWdvdG8gZXJyX2ZiOwogCi0JY2ZiX2Jhc2UgPSBpOTE1X2d0dF90b19waHlzKGRldiwgY29tcHJlc3NlZF9mYi0+c3RhcnQpOwotCWlmICghY2ZiX2Jhc2UpIHsKLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IHN0b2xlbiBwaHlzIGFkZHIsIGRpc2FibGluZyBGQkNcbiIpOwotCQlkcm1fbW1fcHV0X2Jsb2NrKGNvbXByZXNzZWRfZmIpOwotCX0KKwlpZiAoIShJU19HTTQ1KGRldikgfHwgSEFTX1BDSF9TUExJVChkZXYpKSkgeworCQljb21wcmVzc2VkX2xsYiA9IGRybV9tbV9zZWFyY2hfZnJlZSgmZGV2X3ByaXYtPm1tLnN0b2xlbiwKKwkJCQkJCSAgICA0MDk2LCA0MDk2LCAwKTsKKwkJaWYgKGNvbXByZXNzZWRfbGxiKQorCQkJY29tcHJlc3NlZF9sbGIgPSBkcm1fbW1fZ2V0X2Jsb2NrKGNvbXByZXNzZWRfbGxiLAorCQkJCQkJCSAgNDA5NiwgNDA5Nik7CisJCWlmICghY29tcHJlc3NlZF9sbGIpCisJCQlnb3RvIGVycl9mYjsKIAotCWlmICghKElTX0dNNDUoZGV2KSB8fCBJU19JUk9OTEFLRV9NKGRldikpKSB7Ci0JCWNvbXByZXNzZWRfbGxiID0gZHJtX21tX3NlYXJjaF9mcmVlKCZkZXZfcHJpdi0+bW0udnJhbSwgNDA5NiwKLQkJCQkJCSAgICA0MDk2LCAwKTsKLQkJaWYgKCFjb21wcmVzc2VkX2xsYikgewotCQkJaTkxNV93YXJuX3N0b2xlbihkZXYpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJY29tcHJlc3NlZF9sbGIgPSBkcm1fbW1fZ2V0X2Jsb2NrKGNvbXByZXNzZWRfbGxiLCA0MDk2LCA0MDk2KTsKLQkJaWYgKCFjb21wcmVzc2VkX2xsYikgewotCQkJaTkxNV93YXJuX3N0b2xlbihkZXYpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJbGxfYmFzZSA9IGk5MTVfZ3R0X3RvX3BoeXMoZGV2LCBjb21wcmVzc2VkX2xsYi0+c3RhcnQpOwotCQlpZiAoIWxsX2Jhc2UpIHsKLQkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBzdG9sZW4gcGh5cyBhZGRyLCBkaXNhYmxpbmcgRkJDXG4iKTsKLQkJCWRybV9tbV9wdXRfYmxvY2soY29tcHJlc3NlZF9mYik7Ci0JCQlkcm1fbW1fcHV0X2Jsb2NrKGNvbXByZXNzZWRfbGxiKTsKLQkJfQorCQlsbF9iYXNlID0gaTkxNV9zdG9sZW5fdG9fcGh5cyhkZXYsIGNvbXByZXNzZWRfbGxiLT5zdGFydCk7CisJCWlmICghbGxfYmFzZSkKKwkJCWdvdG8gZXJyX2xsYjsKIAl9CiAKIAlkZXZfcHJpdi0+Y2ZiX3NpemUgPSBzaXplOwogCiAJaW50ZWxfZGlzYWJsZV9mYmMoZGV2KTsKIAlkZXZfcHJpdi0+Y29tcHJlc3NlZF9mYiA9IGNvbXByZXNzZWRfZmI7Ci0JaWYgKElTX0lST05MQUtFX00oZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlJOTE1X1dSSVRFKElMS19EUEZDX0NCX0JBU0UsIGNvbXByZXNzZWRfZmItPnN0YXJ0KTsKIAllbHNlIGlmIChJU19HTTQ1KGRldikpIHsKIAkJSTkxNV9XUklURShEUEZDX0NCX0JBU0UsIGNvbXByZXNzZWRfZmItPnN0YXJ0KTsKQEAgLTExNDQsOCArMTExMCwxNyBAQAogCQlkZXZfcHJpdi0+Y29tcHJlc3NlZF9sbGIgPSBjb21wcmVzc2VkX2xsYjsKIAl9CiAKLQlEUk1fREVCVUdfS01TKCJGQkMgYmFzZSAweCUwOGx4LCBsbCBiYXNlIDB4JTA4bHgsIHNpemUgJWRNXG4iLCBjZmJfYmFzZSwKLQkJICBsbF9iYXNlLCBzaXplID4+IDIwKTsKKwlEUk1fREVCVUdfS01TKCJGQkMgYmFzZSAweCUwOGx4LCBsbCBiYXNlIDB4JTA4bHgsIHNpemUgJWRNXG4iLAorCQkgICAgICBjZmJfYmFzZSwgbGxfYmFzZSwgc2l6ZSA+PiAyMCk7CisJcmV0dXJuOworCitlcnJfbGxiOgorCWRybV9tbV9wdXRfYmxvY2soY29tcHJlc3NlZF9sbGIpOworZXJyX2ZiOgorCWRybV9tbV9wdXRfYmxvY2soY29tcHJlc3NlZF9mYik7CitlcnI6CisJZGV2X3ByaXYtPm5vX2ZiY19yZWFzb24gPSBGQkNfU1RPTEVOX1RPT19TTUFMTDsKKwlpOTE1X3dhcm5fc3RvbGVuKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGk5MTVfY2xlYW51cF9jb21wcmVzc2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQpAQCAtMTE3NiwxMiArMTE1MSwxNiBAQAogCXBtX21lc3NhZ2VfdCBwbW0gPSB7IC5ldmVudCA9IFBNX0VWRU5UX1NVU1BFTkQgfTsKIAlpZiAoc3RhdGUgPT0gVkdBX1NXSVRDSEVST09fT04pIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaTkxNTogc3dpdGNoZWQgb25cbiIpOworCQlkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9IERSTV9TV0lUQ0hfUE9XRVJfQ0hBTkdJTkc7CiAJCS8qIGk5MTUgcmVzdW1lIGhhbmRsZXIgZG9lc24ndCBzZXQgdG8gRDAgKi8KIAkJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EMCk7CiAJCWk5MTVfcmVzdW1lKGRldik7CisJCWRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID0gRFJNX1NXSVRDSF9QT1dFUl9PTjsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgImk5MTU6IHN3aXRjaGVkIG9mZlxuIik7CisJCWRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID0gRFJNX1NXSVRDSF9QT1dFUl9DSEFOR0lORzsKIAkJaTkxNV9zdXNwZW5kKGRldiwgcG1tKTsKKwkJZGV2LT5zd2l0Y2hfcG93ZXJfc3RhdGUgPSBEUk1fU1dJVENIX1BPV0VSX09GRjsKIAl9CiB9CiAKQEAgLTExOTYsMTcgKzExNzUsMjAgQEAKIAlyZXR1cm4gY2FuX3N3aXRjaDsKIH0KIAotc3RhdGljIGludCBpOTE1X2xvYWRfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICB1bnNpZ25lZCBsb25nIHByZWFsbG9jX3NpemUsCi0JCQkJICB1bnNpZ25lZCBsb25nIGFncF9zaXplKQorc3RhdGljIGludCBpOTE1X2xvYWRfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIHByZWFsbG9jX3NpemUsIGd0dF9zaXplLCBtYXBwYWJsZV9zaXplOwogCWludCByZXQgPSAwOwogCi0JLyogQmFzaWMgbWVtcmFuZ2UgYWxsb2NhdG9yIGZvciBzdG9sZW4gc3BhY2UgKGFrYSBtbS52cmFtKSAqLwotCWRybV9tbV9pbml0KCZkZXZfcHJpdi0+bW0udnJhbSwgMCwgcHJlYWxsb2Nfc2l6ZSk7CisJcHJlYWxsb2Nfc2l6ZSA9IGRldl9wcml2LT5tbS5ndHQtPnN0b2xlbl9zaXplOworCWd0dF9zaXplID0gZGV2X3ByaXYtPm1tLmd0dC0+Z3R0X3RvdGFsX2VudHJpZXMgPDwgUEFHRV9TSElGVDsKKwltYXBwYWJsZV9zaXplID0gZGV2X3ByaXYtPm1tLmd0dC0+Z3R0X21hcHBhYmxlX2VudHJpZXMgPDwgUEFHRV9TSElGVDsKIAotCS8qIExldCBHRU0gTWFuYWdlIGZyb20gZW5kIG9mIHByZWFsbG9jIHNwYWNlIHRvIGVuZCBvZiBhcGVydHVyZS4KKwkvKiBCYXNpYyBtZW1yYW5nZSBhbGxvY2F0b3IgZm9yIHN0b2xlbiBzcGFjZSAqLworCWRybV9tbV9pbml0KCZkZXZfcHJpdi0+bW0uc3RvbGVuLCAwLCBwcmVhbGxvY19zaXplKTsKKworCS8qIExldCBHRU0gTWFuYWdlIGFsbCBvZiB0aGUgYXBlcnR1cmUuCiAJICoKIAkgKiBIb3dldmVyLCBsZWF2ZSBvbmUgcGFnZSBhdCB0aGUgZW5kIHN0aWxsIGJvdW5kIHRvIHRoZSBzY3JhdGNoIHBhZ2UuCiAJICogVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBsYWNlcyB3aGVyZSB0aGUgaGFyZHdhcmUgYXBwYXJlbnRseQpAQCAtMTIxNSw3ICsxMTk3LDcgQEAKIAkgKiBhdCB0aGUgbGFzdCBwYWdlIG9mIHRoZSBhcGVydHVyZS4gIE9uZSBwYWdlIHNob3VsZCBiZSBlbm91Z2ggdG8KIAkgKiBrZWVwIGFueSBwcmVmZXRjaGluZyBpbnNpZGUgb2YgdGhlIGFwZXJ0dXJlLgogCSAqLwotCWk5MTVfZ2VtX2RvX2luaXQoZGV2LCBwcmVhbGxvY19zaXplLCBhZ3Bfc2l6ZSAtIDQwOTYpOworCWk5MTVfZ2VtX2RvX2luaXQoZGV2LCAwLCBtYXBwYWJsZV9zaXplLCBndHRfc2l6ZSAtIFBBR0VfU0laRSk7CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJcmV0ID0gaTkxNV9nZW1faW5pdF9yaW5nYnVmZmVyKGRldik7CkBAIC0xMjI3LDE2ICsxMjA5LDE3IEBACiAJaWYgKEk5MTVfSEFTX0ZCQyhkZXYpICYmIGk5MTVfcG93ZXJzYXZlKSB7CiAJCWludCBjZmJfc2l6ZTsKIAotCQkvKiBUcnkgdG8gZ2V0IGFuIDhNIGJ1ZmZlci4uLiAqLwotCQlpZiAocHJlYWxsb2Nfc2l6ZSA+ICg5KjEwMjQqMTAyNCkpCi0JCQljZmJfc2l6ZSA9IDgqMTAyNCoxMDI0OworCQkvKiBMZWF2ZSAxTSBmb3IgbGluZSBsZW5ndGggYnVmZmVyICYgbWlzYy4gKi8KKworCQkvKiBUcnkgdG8gZ2V0IGEgMzJNIGJ1ZmZlci4uLiAqLworCQlpZiAocHJlYWxsb2Nfc2l6ZSA+ICgzNioxMDI0KjEwMjQpKQorCQkJY2ZiX3NpemUgPSAzMioxMDI0KjEwMjQ7CiAJCWVsc2UgLyogZmFsbCBiYWNrIHRvIDcvOCBvZiB0aGUgc3RvbGVuIHNwYWNlICovCiAJCQljZmJfc2l6ZSA9IHByZWFsbG9jX3NpemUgKiA3IC8gODsKIAkJaTkxNV9zZXR1cF9jb21wcmVzc2lvbihkZXYsIGNmYl9zaXplKTsKIAl9CiAKLQkvKiBBbGxvdyBoYXJkd2FyZSBiYXRjaGJ1ZmZlcnMgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLgotCSAqLworCS8qIEFsbG93IGhhcmR3YXJlIGJhdGNoYnVmZmVycyB1bmxlc3MgdG9sZCBvdGhlcndpc2UuICovCiAJZGV2X3ByaXYtPmFsbG93X2JhdGNoYnVmZmVyID0gMTsKIAogCXJldCA9IGludGVsX3BhcnNlX2Jpb3MoZGV2KTsKQEAgLTEyNTIsNiArMTIzNSw3IEBACiAKIAlyZXQgPSB2Z2Ffc3dpdGNoZXJvb19yZWdpc3Rlcl9jbGllbnQoZGV2LT5wZGV2LAogCQkJCQkgICAgIGk5MTVfc3dpdGNoZXJvb19zZXRfc3RhdGUsCisJCQkJCSAgICAgTlVMTCwKIAkJCQkJICAgICBpOTE1X3N3aXRjaGVyb29fY2FuX3N3aXRjaCk7CiAJaWYgKHJldCkKIAkJZ290byBjbGVhbnVwX3ZnYV9jbGllbnQ7CkBAIC0xNDI2LDE1MiArMTQxMCwxMiBAQAogCX0KIH0KIAotc3RydWN0IHZfdGFibGUgewotCXU4IHZpZDsKLQl1bnNpZ25lZCBsb25nIHZkOyAvKiBpbiAuMSBtaWwgKi8KLQl1bnNpZ25lZCBsb25nIHZtOyAvKiBpbiAuMSBtaWwgKi8KLQl1OCBwdmlkOwotfTsKLQotc3RhdGljIHN0cnVjdCB2X3RhYmxlIHZfdGFibGVbXSA9IHsKLQl7IDAsIDE2MTI1LCAxNTAwMCwgMHg3ZiwgfSwKLQl7IDEsIDE2MDAwLCAxNDg3NSwgMHg3ZSwgfSwKLQl7IDIsIDE1ODc1LCAxNDc1MCwgMHg3ZCwgfSwKLQl7IDMsIDE1NzUwLCAxNDYyNSwgMHg3YywgfSwKLQl7IDQsIDE1NjI1LCAxNDUwMCwgMHg3YiwgfSwKLQl7IDUsIDE1NTAwLCAxNDM3NSwgMHg3YSwgfSwKLQl7IDYsIDE1Mzc1LCAxNDI1MCwgMHg3OSwgfSwKLQl7IDcsIDE1MjUwLCAxNDEyNSwgMHg3OCwgfSwKLQl7IDgsIDE1MTI1LCAxNDAwMCwgMHg3NywgfSwKLQl7IDksIDE1MDAwLCAxMzg3NSwgMHg3NiwgfSwKLQl7IDEwLCAxNDg3NSwgMTM3NTAsIDB4NzUsIH0sCi0JeyAxMSwgMTQ3NTAsIDEzNjI1LCAweDc0LCB9LAotCXsgMTIsIDE0NjI1LCAxMzUwMCwgMHg3MywgfSwKLQl7IDEzLCAxNDUwMCwgMTMzNzUsIDB4NzIsIH0sCi0JeyAxNCwgMTQzNzUsIDEzMjUwLCAweDcxLCB9LAotCXsgMTUsIDE0MjUwLCAxMzEyNSwgMHg3MCwgfSwKLQl7IDE2LCAxNDEyNSwgMTMwMDAsIDB4NmYsIH0sCi0JeyAxNywgMTQwMDAsIDEyODc1LCAweDZlLCB9LAotCXsgMTgsIDEzODc1LCAxMjc1MCwgMHg2ZCwgfSwKLQl7IDE5LCAxMzc1MCwgMTI2MjUsIDB4NmMsIH0sCi0JeyAyMCwgMTM2MjUsIDEyNTAwLCAweDZiLCB9LAotCXsgMjEsIDEzNTAwLCAxMjM3NSwgMHg2YSwgfSwKLQl7IDIyLCAxMzM3NSwgMTIyNTAsIDB4NjksIH0sCi0JeyAyMywgMTMyNTAsIDEyMTI1LCAweDY4LCB9LAotCXsgMjQsIDEzMTI1LCAxMjAwMCwgMHg2NywgfSwKLQl7IDI1LCAxMzAwMCwgMTE4NzUsIDB4NjYsIH0sCi0JeyAyNiwgMTI4NzUsIDExNzUwLCAweDY1LCB9LAotCXsgMjcsIDEyNzUwLCAxMTYyNSwgMHg2NCwgfSwKLQl7IDI4LCAxMjYyNSwgMTE1MDAsIDB4NjMsIH0sCi0JeyAyOSwgMTI1MDAsIDExMzc1LCAweDYyLCB9LAotCXsgMzAsIDEyMzc1LCAxMTI1MCwgMHg2MSwgfSwKLQl7IDMxLCAxMjI1MCwgMTExMjUsIDB4NjAsIH0sCi0JeyAzMiwgMTIxMjUsIDExMDAwLCAweDVmLCB9LAotCXsgMzMsIDEyMDAwLCAxMDg3NSwgMHg1ZSwgfSwKLQl7IDM0LCAxMTg3NSwgMTA3NTAsIDB4NWQsIH0sCi0JeyAzNSwgMTE3NTAsIDEwNjI1LCAweDVjLCB9LAotCXsgMzYsIDExNjI1LCAxMDUwMCwgMHg1YiwgfSwKLQl7IDM3LCAxMTUwMCwgMTAzNzUsIDB4NWEsIH0sCi0JeyAzOCwgMTEzNzUsIDEwMjUwLCAweDU5LCB9LAotCXsgMzksIDExMjUwLCAxMDEyNSwgMHg1OCwgfSwKLQl7IDQwLCAxMTEyNSwgMTAwMDAsIDB4NTcsIH0sCi0JeyA0MSwgMTEwMDAsIDk4NzUsIDB4NTYsIH0sCi0JeyA0MiwgMTA4NzUsIDk3NTAsIDB4NTUsIH0sCi0JeyA0MywgMTA3NTAsIDk2MjUsIDB4NTQsIH0sCi0JeyA0NCwgMTA2MjUsIDk1MDAsIDB4NTMsIH0sCi0JeyA0NSwgMTA1MDAsIDkzNzUsIDB4NTIsIH0sCi0JeyA0NiwgMTAzNzUsIDkyNTAsIDB4NTEsIH0sCi0JeyA0NywgMTAyNTAsIDkxMjUsIDB4NTAsIH0sCi0JeyA0OCwgMTAxMjUsIDkwMDAsIDB4NGYsIH0sCi0JeyA0OSwgMTAwMDAsIDg4NzUsIDB4NGUsIH0sCi0JeyA1MCwgOTg3NSwgODc1MCwgMHg0ZCwgfSwKLQl7IDUxLCA5NzUwLCA4NjI1LCAweDRjLCB9LAotCXsgNTIsIDk2MjUsIDg1MDAsIDB4NGIsIH0sCi0JeyA1MywgOTUwMCwgODM3NSwgMHg0YSwgfSwKLQl7IDU0LCA5Mzc1LCA4MjUwLCAweDQ5LCB9LAotCXsgNTUsIDkyNTAsIDgxMjUsIDB4NDgsIH0sCi0JeyA1NiwgOTEyNSwgODAwMCwgMHg0NywgfSwKLQl7IDU3LCA5MDAwLCA3ODc1LCAweDQ2LCB9LAotCXsgNTgsIDg4NzUsIDc3NTAsIDB4NDUsIH0sCi0JeyA1OSwgODc1MCwgNzYyNSwgMHg0NCwgfSwKLQl7IDYwLCA4NjI1LCA3NTAwLCAweDQzLCB9LAotCXsgNjEsIDg1MDAsIDczNzUsIDB4NDIsIH0sCi0JeyA2MiwgODM3NSwgNzI1MCwgMHg0MSwgfSwKLQl7IDYzLCA4MjUwLCA3MTI1LCAweDQwLCB9LAotCXsgNjQsIDgxMjUsIDcwMDAsIDB4M2YsIH0sCi0JeyA2NSwgODAwMCwgNjg3NSwgMHgzZSwgfSwKLQl7IDY2LCA3ODc1LCA2NzUwLCAweDNkLCB9LAotCXsgNjcsIDc3NTAsIDY2MjUsIDB4M2MsIH0sCi0JeyA2OCwgNzYyNSwgNjUwMCwgMHgzYiwgfSwKLQl7IDY5LCA3NTAwLCA2Mzc1LCAweDNhLCB9LAotCXsgNzAsIDczNzUsIDYyNTAsIDB4MzksIH0sCi0JeyA3MSwgNzI1MCwgNjEyNSwgMHgzOCwgfSwKLQl7IDcyLCA3MTI1LCA2MDAwLCAweDM3LCB9LAotCXsgNzMsIDcwMDAsIDU4NzUsIDB4MzYsIH0sCi0JeyA3NCwgNjg3NSwgNTc1MCwgMHgzNSwgfSwKLQl7IDc1LCA2NzUwLCA1NjI1LCAweDM0LCB9LAotCXsgNzYsIDY2MjUsIDU1MDAsIDB4MzMsIH0sCi0JeyA3NywgNjUwMCwgNTM3NSwgMHgzMiwgfSwKLQl7IDc4LCA2Mzc1LCA1MjUwLCAweDMxLCB9LAotCXsgNzksIDYyNTAsIDUxMjUsIDB4MzAsIH0sCi0JeyA4MCwgNjEyNSwgNTAwMCwgMHgyZiwgfSwKLQl7IDgxLCA2MDAwLCA0ODc1LCAweDJlLCB9LAotCXsgODIsIDU4NzUsIDQ3NTAsIDB4MmQsIH0sCi0JeyA4MywgNTc1MCwgNDYyNSwgMHgyYywgfSwKLQl7IDg0LCA1NjI1LCA0NTAwLCAweDJiLCB9LAotCXsgODUsIDU1MDAsIDQzNzUsIDB4MmEsIH0sCi0JeyA4NiwgNTM3NSwgNDI1MCwgMHgyOSwgfSwKLQl7IDg3LCA1MjUwLCA0MTI1LCAweDI4LCB9LAotCXsgODgsIDUxMjUsIDQwMDAsIDB4MjcsIH0sCi0JeyA4OSwgNTAwMCwgMzg3NSwgMHgyNiwgfSwKLQl7IDkwLCA0ODc1LCAzNzUwLCAweDI1LCB9LAotCXsgOTEsIDQ3NTAsIDM2MjUsIDB4MjQsIH0sCi0JeyA5MiwgNDYyNSwgMzUwMCwgMHgyMywgfSwKLQl7IDkzLCA0NTAwLCAzMzc1LCAweDIyLCB9LAotCXsgOTQsIDQzNzUsIDMyNTAsIDB4MjEsIH0sCi0JeyA5NSwgNDI1MCwgMzEyNSwgMHgyMCwgfSwKLQl7IDk2LCA0MTI1LCAzMDAwLCAweDFmLCB9LAotCXsgOTcsIDQxMjUsIDMwMDAsIDB4MWUsIH0sCi0JeyA5OCwgNDEyNSwgMzAwMCwgMHgxZCwgfSwKLQl7IDk5LCA0MTI1LCAzMDAwLCAweDFjLCB9LAotCXsgMTAwLCA0MTI1LCAzMDAwLCAweDFiLCB9LAotCXsgMTAxLCA0MTI1LCAzMDAwLCAweDFhLCB9LAotCXsgMTAyLCA0MTI1LCAzMDAwLCAweDE5LCB9LAotCXsgMTAzLCA0MTI1LCAzMDAwLCAweDE4LCB9LAotCXsgMTA0LCA0MTI1LCAzMDAwLCAweDE3LCB9LAotCXsgMTA1LCA0MTI1LCAzMDAwLCAweDE2LCB9LAotCXsgMTA2LCA0MTI1LCAzMDAwLCAweDE1LCB9LAotCXsgMTA3LCA0MTI1LCAzMDAwLCAweDE0LCB9LAotCXsgMTA4LCA0MTI1LCAzMDAwLCAweDEzLCB9LAotCXsgMTA5LCA0MTI1LCAzMDAwLCAweDEyLCB9LAotCXsgMTEwLCA0MTI1LCAzMDAwLCAweDExLCB9LAotCXsgMTExLCA0MTI1LCAzMDAwLCAweDEwLCB9LAotCXsgMTEyLCA0MTI1LCAzMDAwLCAweDBmLCB9LAotCXsgMTEzLCA0MTI1LCAzMDAwLCAweDBlLCB9LAotCXsgMTE0LCA0MTI1LCAzMDAwLCAweDBkLCB9LAotCXsgMTE1LCA0MTI1LCAzMDAwLCAweDBjLCB9LAotCXsgMTE2LCA0MTI1LCAzMDAwLCAweDBiLCB9LAotCXsgMTE3LCA0MTI1LCAzMDAwLCAweDBhLCB9LAotCXsgMTE4LCA0MTI1LCAzMDAwLCAweDA5LCB9LAotCXsgMTE5LCA0MTI1LCAzMDAwLCAweDA4LCB9LAotCXsgMTIwLCAxMTI1LCAwLCAweDA3LCB9LAotCXsgMTIxLCAxMDAwLCAwLCAweDA2LCB9LAotCXsgMTIyLCA4NzUsIDAsIDB4MDUsIH0sCi0JeyAxMjMsIDc1MCwgMCwgMHgwNCwgfSwKLQl7IDEyNCwgNjI1LCAwLCAweDAzLCB9LAotCXsgMTI1LCA1MDAsIDAsIDB4MDIsIH0sCi0JeyAxMjYsIDM3NSwgMCwgMHgwMSwgfSwKLQl7IDEyNywgMCwgMCwgMHgwMCwgfSwKLX07Ci0KLXN0cnVjdCBjcGFyYW1zIHsKLQlpbnQgaTsKLQlpbnQgdDsKLQlpbnQgbTsKLQlpbnQgYzsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY3BhcmFtcyBjcGFyYW1zW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwYXJhbXMgeworCXUxNiBpOworCXUxNiB0OworCXUxNiBtOworCXUxNiBjOworfSBjcGFyYW1zW10gPSB7CiAJeyAxLCAxMzMzLCAzMDEsIDI4NjY0IH0sCiAJeyAxLCAxMDY2LCAyOTQsIDI0NDYwIH0sCiAJeyAxLCA4MDAsIDI5NCwgMjUxOTIgfSwKQEAgLTE2MzcsMjEgKzE0ODEsMTQ1IEBACiAJcmV0dXJuICgobSAqIHgpIC8gMTI3KSAtIGI7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHB2aWRfdG9fZXh0dmlkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggcHh2aWQpCitzdGF0aWMgdTE2IHB2aWRfdG9fZXh0dmlkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggcHh2aWQpCiB7Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSAwOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodl90YWJsZSk7IGkrKykgewotCQlpZiAodl90YWJsZVtpXS5wdmlkID09IHB4dmlkKSB7Ci0JCQlpZiAoSVNfTU9CSUxFKGRldl9wcml2LT5kZXYpKQotCQkJCXZhbCA9IHZfdGFibGVbaV0udm07Ci0JCQllbHNlCi0JCQkJdmFsID0gdl90YWJsZVtpXS52ZDsKLQkJfQotCX0KLQotCXJldHVybiB2YWw7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB2X3RhYmxlIHsKKwkJdTE2IHZkOyAvKiBpbiAuMSBtaWwgKi8KKwkJdTE2IHZtOyAvKiBpbiAuMSBtaWwgKi8KKwl9IHZfdGFibGVbXSA9IHsKKwkJeyAwLCAwLCB9LAorCQl7IDM3NSwgMCwgfSwKKwkJeyA1MDAsIDAsIH0sCisJCXsgNjI1LCAwLCB9LAorCQl7IDc1MCwgMCwgfSwKKwkJeyA4NzUsIDAsIH0sCisJCXsgMTAwMCwgMCwgfSwKKwkJeyAxMTI1LCAwLCB9LAorCQl7IDQxMjUsIDMwMDAsIH0sCisJCXsgNDEyNSwgMzAwMCwgfSwKKwkJeyA0MTI1LCAzMDAwLCB9LAorCQl7IDQxMjUsIDMwMDAsIH0sCisJCXsgNDEyNSwgMzAwMCwgfSwKKwkJeyA0MTI1LCAzMDAwLCB9LAorCQl7IDQxMjUsIDMwMDAsIH0sCisJCXsgNDEyNSwgMzAwMCwgfSwKKwkJeyA0MTI1LCAzMDAwLCB9LAorCQl7IDQxMjUsIDMwMDAsIH0sCisJCXsgNDEyNSwgMzAwMCwgfSwKKwkJeyA0MTI1LCAzMDAwLCB9LAorCQl7IDQxMjUsIDMwMDAsIH0sCisJCXsgNDEyNSwgMzAwMCwgfSwKKwkJeyA0MTI1LCAzMDAwLCB9LAorCQl7IDQxMjUsIDMwMDAsIH0sCisJCXsgNDEyNSwgMzAwMCwgfSwKKwkJeyA0MTI1LCAzMDAwLCB9LAorCQl7IDQxMjUsIDMwMDAsIH0sCisJCXsgNDEyNSwgMzAwMCwgfSwKKwkJeyA0MTI1LCAzMDAwLCB9LAorCQl7IDQxMjUsIDMwMDAsIH0sCisJCXsgNDEyNSwgMzAwMCwgfSwKKwkJeyA0MTI1LCAzMDAwLCB9LAorCQl7IDQyNTAsIDMxMjUsIH0sCisJCXsgNDM3NSwgMzI1MCwgfSwKKwkJeyA0NTAwLCAzMzc1LCB9LAorCQl7IDQ2MjUsIDM1MDAsIH0sCisJCXsgNDc1MCwgMzYyNSwgfSwKKwkJeyA0ODc1LCAzNzUwLCB9LAorCQl7IDUwMDAsIDM4NzUsIH0sCisJCXsgNTEyNSwgNDAwMCwgfSwKKwkJeyA1MjUwLCA0MTI1LCB9LAorCQl7IDUzNzUsIDQyNTAsIH0sCisJCXsgNTUwMCwgNDM3NSwgfSwKKwkJeyA1NjI1LCA0NTAwLCB9LAorCQl7IDU3NTAsIDQ2MjUsIH0sCisJCXsgNTg3NSwgNDc1MCwgfSwKKwkJeyA2MDAwLCA0ODc1LCB9LAorCQl7IDYxMjUsIDUwMDAsIH0sCisJCXsgNjI1MCwgNTEyNSwgfSwKKwkJeyA2Mzc1LCA1MjUwLCB9LAorCQl7IDY1MDAsIDUzNzUsIH0sCisJCXsgNjYyNSwgNTUwMCwgfSwKKwkJeyA2NzUwLCA1NjI1LCB9LAorCQl7IDY4NzUsIDU3NTAsIH0sCisJCXsgNzAwMCwgNTg3NSwgfSwKKwkJeyA3MTI1LCA2MDAwLCB9LAorCQl7IDcyNTAsIDYxMjUsIH0sCisJCXsgNzM3NSwgNjI1MCwgfSwKKwkJeyA3NTAwLCA2Mzc1LCB9LAorCQl7IDc2MjUsIDY1MDAsIH0sCisJCXsgNzc1MCwgNjYyNSwgfSwKKwkJeyA3ODc1LCA2NzUwLCB9LAorCQl7IDgwMDAsIDY4NzUsIH0sCisJCXsgODEyNSwgNzAwMCwgfSwKKwkJeyA4MjUwLCA3MTI1LCB9LAorCQl7IDgzNzUsIDcyNTAsIH0sCisJCXsgODUwMCwgNzM3NSwgfSwKKwkJeyA4NjI1LCA3NTAwLCB9LAorCQl7IDg3NTAsIDc2MjUsIH0sCisJCXsgODg3NSwgNzc1MCwgfSwKKwkJeyA5MDAwLCA3ODc1LCB9LAorCQl7IDkxMjUsIDgwMDAsIH0sCisJCXsgOTI1MCwgODEyNSwgfSwKKwkJeyA5Mzc1LCA4MjUwLCB9LAorCQl7IDk1MDAsIDgzNzUsIH0sCisJCXsgOTYyNSwgODUwMCwgfSwKKwkJeyA5NzUwLCA4NjI1LCB9LAorCQl7IDk4NzUsIDg3NTAsIH0sCisJCXsgMTAwMDAsIDg4NzUsIH0sCisJCXsgMTAxMjUsIDkwMDAsIH0sCisJCXsgMTAyNTAsIDkxMjUsIH0sCisJCXsgMTAzNzUsIDkyNTAsIH0sCisJCXsgMTA1MDAsIDkzNzUsIH0sCisJCXsgMTA2MjUsIDk1MDAsIH0sCisJCXsgMTA3NTAsIDk2MjUsIH0sCisJCXsgMTA4NzUsIDk3NTAsIH0sCisJCXsgMTEwMDAsIDk4NzUsIH0sCisJCXsgMTExMjUsIDEwMDAwLCB9LAorCQl7IDExMjUwLCAxMDEyNSwgfSwKKwkJeyAxMTM3NSwgMTAyNTAsIH0sCisJCXsgMTE1MDAsIDEwMzc1LCB9LAorCQl7IDExNjI1LCAxMDUwMCwgfSwKKwkJeyAxMTc1MCwgMTA2MjUsIH0sCisJCXsgMTE4NzUsIDEwNzUwLCB9LAorCQl7IDEyMDAwLCAxMDg3NSwgfSwKKwkJeyAxMjEyNSwgMTEwMDAsIH0sCisJCXsgMTIyNTAsIDExMTI1LCB9LAorCQl7IDEyMzc1LCAxMTI1MCwgfSwKKwkJeyAxMjUwMCwgMTEzNzUsIH0sCisJCXsgMTI2MjUsIDExNTAwLCB9LAorCQl7IDEyNzUwLCAxMTYyNSwgfSwKKwkJeyAxMjg3NSwgMTE3NTAsIH0sCisJCXsgMTMwMDAsIDExODc1LCB9LAorCQl7IDEzMTI1LCAxMjAwMCwgfSwKKwkJeyAxMzI1MCwgMTIxMjUsIH0sCisJCXsgMTMzNzUsIDEyMjUwLCB9LAorCQl7IDEzNTAwLCAxMjM3NSwgfSwKKwkJeyAxMzYyNSwgMTI1MDAsIH0sCisJCXsgMTM3NTAsIDEyNjI1LCB9LAorCQl7IDEzODc1LCAxMjc1MCwgfSwKKwkJeyAxNDAwMCwgMTI4NzUsIH0sCisJCXsgMTQxMjUsIDEzMDAwLCB9LAorCQl7IDE0MjUwLCAxMzEyNSwgfSwKKwkJeyAxNDM3NSwgMTMyNTAsIH0sCisJCXsgMTQ1MDAsIDEzMzc1LCB9LAorCQl7IDE0NjI1LCAxMzUwMCwgfSwKKwkJeyAxNDc1MCwgMTM2MjUsIH0sCisJCXsgMTQ4NzUsIDEzNzUwLCB9LAorCQl7IDE1MDAwLCAxMzg3NSwgfSwKKwkJeyAxNTEyNSwgMTQwMDAsIH0sCisJCXsgMTUyNTAsIDE0MTI1LCB9LAorCQl7IDE1Mzc1LCAxNDI1MCwgfSwKKwkJeyAxNTUwMCwgMTQzNzUsIH0sCisJCXsgMTU2MjUsIDE0NTAwLCB9LAorCQl7IDE1NzUwLCAxNDYyNSwgfSwKKwkJeyAxNTg3NSwgMTQ3NTAsIH0sCisJCXsgMTYwMDAsIDE0ODc1LCB9LAorCQl7IDE2MTI1LCAxNTAwMCwgfSwKKwl9OworCWlmIChkZXZfcHJpdi0+aW5mby0+aXNfbW9iaWxlKQorCQlyZXR1cm4gdl90YWJsZVtweHZpZF0udm07CisJZWxzZQorCQlyZXR1cm4gdl90YWJsZVtweHZpZF0udmQ7CiB9CiAKIHZvaWQgaTkxNV91cGRhdGVfZ2Z4X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCkBAIC0xOTA1LDkgKzE4NzMsOSBAQAogaW50IGk5MTVfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXY7Ci0JcmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHNpemU7CiAJaW50IHJldCA9IDAsIG1taW9fYmFyOwotCXVpbnQzMl90IGFncF9zaXplLCBwcmVhbGxvY19zaXplOworCXVpbnQzMl90IGFncF9zaXplOworCiAJLyogaTkxNSBoYXMgNCBtb3JlIGNvdW50ZXJzICovCiAJZGV2LT5jb3VudGVycyArPSA0OwogCWRldi0+dHlwZXNbNl0gPSBfRFJNX1NUQVRfSVJROwpAQCAtMTkyMywxMSArMTg5MSw2IEBACiAJZGV2X3ByaXYtPmRldiA9IGRldjsKIAlkZXZfcHJpdi0+aW5mbyA9IChzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gKikgZmxhZ3M7CiAKLQkvKiBBZGQgcmVnaXN0ZXIgbWFwIChuZWVkZWQgZm9yIHN1c3BlbmQvcmVzdW1lKSAqLwotCW1taW9fYmFyID0gSVNfR0VOMihkZXYpID8gMSA6IDA7Ci0JYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIG1taW9fYmFyKTsKLQlzaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIG1taW9fYmFyKTsKLQogCWlmIChpOTE1X2dldF9icmlkZ2VfZGV2KGRldikpIHsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBmcmVlX3ByaXY7CkBAIC0xOTM3LDE2ICsxOTAwLDI1IEBACiAJaWYgKElTX0dFTjIoZGV2KSkKIAkJZG1hX3NldF9jb2hlcmVudF9tYXNrKCZkZXYtPnBkZXYtPmRldiwgRE1BX0JJVF9NQVNLKDMwKSk7CiAKLQlkZXZfcHJpdi0+cmVncyA9IGlvcmVtYXAoYmFzZSwgc2l6ZSk7CisJbW1pb19iYXIgPSBJU19HRU4yKGRldikgPyAxIDogMDsKKwlkZXZfcHJpdi0+cmVncyA9IHBjaV9pb21hcChkZXYtPnBkZXYsIG1taW9fYmFyLCAwKTsKIAlpZiAoIWRldl9wcml2LT5yZWdzKSB7CiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCByZWdpc3RlcnNcbiIpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIHB1dF9icmlkZ2U7CiAJfQogCisJZGV2X3ByaXYtPm1tLmd0dCA9IGludGVsX2d0dF9nZXQoKTsKKwlpZiAoIWRldl9wcml2LT5tbS5ndHQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBHVFRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9pb21hcGZyZWU7CisJfQorCisJYWdwX3NpemUgPSBkZXZfcHJpdi0+bW0uZ3R0LT5ndHRfbWFwcGFibGVfZW50cmllcyA8PCBQQUdFX1NISUZUOworCiAgICAgICAgIGRldl9wcml2LT5tbS5ndHRfbWFwcGluZyA9Ci0JCWlvX21hcHBpbmdfY3JlYXRlX3djKGRldi0+YWdwLT5iYXNlLAotCQkJCSAgICAgZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfc2l6ZSAqIDEwMjQqMTAyNCk7CisJCWlvX21hcHBpbmdfY3JlYXRlX3djKGRldi0+YWdwLT5iYXNlLCBhZ3Bfc2l6ZSk7CiAJaWYgKGRldl9wcml2LT5tbS5ndHRfbWFwcGluZyA9PSBOVUxMKSB7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0X3JtbWFwOwpAQCAtMTk1OCwyNCArMTkzMCwxMyBAQAogCSAqIE1UUlIgaWYgcHJlc2VudC4gIEV2ZW4gaWYgYSBVQyBNVFJSIGlzbid0IHByZXNlbnQuCiAJICovCiAJZGV2X3ByaXYtPm1tLmd0dF9tdHJyID0gbXRycl9hZGQoZGV2LT5hZ3AtPmJhc2UsCi0JCQkJCSBkZXYtPmFncC0+YWdwX2luZm8uYXBlcl9zaXplICoKLQkJCQkJIDEwMjQgKiAxMDI0LAorCQkJCQkgYWdwX3NpemUsCiAJCQkJCSBNVFJSX1RZUEVfV1JDT01CLCAxKTsKIAlpZiAoZGV2X3ByaXYtPm1tLmd0dF9tdHJyIDwgMCkgewogCQlEUk1fSU5GTygiTVRSUiBhbGxvY2F0aW9uIGZhaWxlZC4gIEdyYXBoaWNzICIKIAkJCSAicGVyZm9ybWFuY2UgbWF5IHN1ZmZlci5cbiIpOwogCX0KIAotCWRldl9wcml2LT5tbS5ndHQgPSBpbnRlbF9ndHRfZ2V0KCk7Ci0JaWYgKCFkZXZfcHJpdi0+bW0uZ3R0KSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgR1RUXG4iKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXRfaW9tYXBmcmVlOwotCX0KLQotCXByZWFsbG9jX3NpemUgPSBkZXZfcHJpdi0+bW0uZ3R0LT5ndHRfc3RvbGVuX2VudHJpZXMgPDwgUEFHRV9TSElGVDsKLQlhZ3Bfc2l6ZSA9IGRldl9wcml2LT5tbS5ndHQtPmd0dF9tYXBwYWJsZV9lbnRyaWVzIDw8IFBBR0VfU0hJRlQ7Ci0KIAkvKiBUaGUgaTkxNSB3b3JrcXVldWUgaXMgcHJpbWFyaWx5IHVzZWQgZm9yIGJhdGNoZWQgcmV0aXJlbWVudCBvZgogCSAqIHJlcXVlc3RzIChhbmQgdGh1cyBtYW5hZ2luZyBibykgb25jZSB0aGUgdGFzayBoYXMgYmVlbiBjb21wbGV0ZWQKIAkgKiBieSB0aGUgR1BVLiBpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoKSBpcyBjYWxsZWQgZGlyZWN0bHkgd2hlbiB3ZQpAQCAtMTk4Myw3ICsxOTQ0LDcgQEAKIAkgKiBiby4KIAkgKgogCSAqIEl0IGlzIGFsc28gdXNlZCBmb3IgcGVyaW9kaWMgbG93LXByaW9yaXR5IGV2ZW50cywgc3VjaCBhcwotCSAqIGlkbGUtdGltZXJzIGFuZCBoYW5nY2hlY2suCisJICogaWRsZS10aW1lcnMgYW5kIHJlY29yZGluZyBlcnJvciBzdGF0ZS4KIAkgKgogCSAqIEFsbCB0YXNrcyBvbiB0aGUgd29ya3F1ZXVlIGFyZSBleHBlY3RlZCB0byBhY3F1aXJlIHRoZSBkZXYgbXV0ZXgKIAkgKiBzbyB0aGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nIG1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2YgdGhlCkBAIC0yMDAxLDIyICsxOTYyLDYgQEAKIAkvKiBlbmFibGUgR0VNIGJ5IGRlZmF1bHQgKi8KIAlkZXZfcHJpdi0+aGFzX2dlbSA9IDE7CiAKLQlpZiAocHJlYWxsb2Nfc2l6ZSA+IGFncF9zaXplICogMyAvIDQpIHsKLQkJRFJNX0VSUk9SKCJEZXRlY3RlZCBicm9rZW4gdmlkZW8gQklPUyB3aXRoICVkLyVka0Igb2YgdmlkZW8gIgotCQkJICAibWVtb3J5IHN0b2xlbi5cbiIsCi0JCQkgIHByZWFsbG9jX3NpemUgLyAxMDI0LCBhZ3Bfc2l6ZSAvIDEwMjQpOwotCQlEUk1fRVJST1IoIkRpc2FibGluZyBHRU0uICh0cnkgcmVkdWNpbmcgc3RvbGVuIG1lbW9yeSBvciAiCi0JCQkgICJ1cGRhdGluZyB0aGUgQklPUyB0byBmaXgpLlxuIik7Ci0JCWRldl9wcml2LT5oYXNfZ2VtID0gMDsKLQl9Ci0KLQlpZiAoZGV2X3ByaXYtPmhhc19nZW0gPT0gMCAmJgotCSAgICBkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7Ci0JCURSTV9FUlJPUigia2VybmVsIG1vZGVzZXR0aW5nIHJlcXVpcmVzIEdFTSwgZGlzYWJsaW5nIGRyaXZlci5cbiIpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG91dF9pb21hcGZyZWU7Ci0JfQotCiAJZGV2LT5kcml2ZXItPmdldF92YmxhbmtfY291bnRlciA9IGk5MTVfZ2V0X3ZibGFua19jb3VudGVyOwogCWRldi0+bWF4X3ZibGFua19jb3VudCA9IDB4ZmZmZmZmOyAvKiBvbmx5IDI0IGJpdHMgb2YgZnJhbWUgY291bnQgKi8KIAlpZiAoSVNfRzRYKGRldikgfHwgSVNfR0VONShkZXYpIHx8IElTX0dFTjYoZGV2KSkgewpAQCAtMjAzNyw4ICsxOTgyLDggQEAKIAkvKiBJbml0IEhXUyAqLwogCWlmICghSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSkgewogCQlyZXQgPSBpOTE1X2luaXRfcGh5c19od3MoZGV2KTsKLQkJaWYgKHJldCAhPSAwKQotCQkJZ290byBvdXRfd29ya3F1ZXVlX2ZyZWU7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9nZW1fdW5sb2FkOwogCX0KIAogCWlmIChJU19QSU5FVklFVyhkZXYpKQpAQCAtMjA2MCwxNiArMjAwNSwxMyBAQAogCWlmICghSVNfSTk0NUcoZGV2KSAmJiAhSVNfSTk0NUdNKGRldikpCiAJCXBjaV9lbmFibGVfbXNpKGRldi0+cGRldik7CiAKLQlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+aXJxX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+ZXJyb3JfbG9jayk7CiAJZGV2X3ByaXYtPnRyYWNlX2lycV9zZXFubyA9IDA7CiAKIAlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCBJOTE1X05VTV9QSVBFKTsKLQotCWlmIChyZXQpIHsKLQkJKHZvaWQpIGk5MTVfZHJpdmVyX3VubG9hZChkZXYpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0KQorCQlnb3RvIG91dF9nZW1fdW5sb2FkOwogCiAJLyogU3RhcnQgb3V0IHN1c3BlbmRlZCAqLwogCWRldl9wcml2LT5tbS5zdXNwZW5kZWQgPSAxOwpAQCAtMjA3NywxMCArMjAxOSwxMCBAQAogCWludGVsX2RldGVjdF9wY2goZGV2KTsKIAogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7Ci0JCXJldCA9IGk5MTVfbG9hZF9tb2Rlc2V0X2luaXQoZGV2LCBwcmVhbGxvY19zaXplLCBhZ3Bfc2l6ZSk7CisJCXJldCA9IGk5MTVfbG9hZF9tb2Rlc2V0X2luaXQoZGV2KTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXQgbW9kZXNldFxuIik7Ci0JCQlnb3RvIG91dF93b3JrcXVldWVfZnJlZTsKKwkJCWdvdG8gb3V0X2dlbV91bmxvYWQ7CiAJCX0KIAl9CiAKQEAgLTIxMDAsMTIgKzIwNDIsMTcgQEAKIAogCXJldHVybiAwOwogCi1vdXRfd29ya3F1ZXVlX2ZyZWU6CitvdXRfZ2VtX3VubG9hZDoKKwlpZiAoZGV2LT5wZGV2LT5tc2lfZW5hYmxlZCkKKwkJcGNpX2Rpc2FibGVfbXNpKGRldi0+cGRldik7CisKKwlpbnRlbF90ZWFyZG93bl9nbWJ1cyhkZXYpOworCWludGVsX3RlYXJkb3duX21jaGJhcihkZXYpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGRldl9wcml2LT53cSk7CiBvdXRfaW9tYXBmcmVlOgogCWlvX21hcHBpbmdfZnJlZShkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcpOwogb3V0X3JtbWFwOgotCWlvdW5tYXAoZGV2X3ByaXYtPnJlZ3MpOworCXBjaV9pb3VubWFwKGRldi0+cGRldiwgZGV2X3ByaXYtPnJlZ3MpOwogcHV0X2JyaWRnZToKIAlwY2lfZGV2X3B1dChkZXZfcHJpdi0+YnJpZGdlX2Rldik7CiBmcmVlX3ByaXY6CkBAIC0yMTIyLDYgKzIwNjksOSBAQAogCWk5MTVfbWNoX2RldiA9IE5VTEw7CiAJc3Bpbl91bmxvY2soJm1jaGRldl9sb2NrKTsKIAorCWlmIChkZXZfcHJpdi0+bW0uaW5hY3RpdmVfc2hyaW5rZXIuc2hyaW5rKQorCQl1bnJlZ2lzdGVyX3Nocmlua2VyKCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfc2hyaW5rZXIpOworCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJldCA9IGk5MTVfZ3B1X2lkbGUoZGV2KTsKIAlpZiAocmV0KQpAQCAtMjE3OSw3ICsyMTI5LDcgQEAKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJCWlmIChJOTE1X0hBU19GQkMoZGV2KSAmJiBpOTE1X3Bvd2Vyc2F2ZSkKIAkJCWk5MTVfY2xlYW51cF9jb21wcmVzc2lvbihkZXYpOwotCQlkcm1fbW1fdGFrZWRvd24oJmRldl9wcml2LT5tbS52cmFtKTsKKwkJZHJtX21tX3Rha2Vkb3duKCZkZXZfcHJpdi0+bW0uc3RvbGVuKTsKIAogCQlpbnRlbF9jbGVhbnVwX292ZXJsYXkoZGV2KTsKIApAQCAtMjE4OCw3ICsyMTM4LDcgQEAKIAl9CiAKIAlpZiAoZGV2X3ByaXYtPnJlZ3MgIT0gTlVMTCkKLQkJaW91bm1hcChkZXZfcHJpdi0+cmVncyk7CisJCXBjaV9pb3VubWFwKGRldi0+cGRldiwgZGV2X3ByaXYtPnJlZ3MpOwogCiAJaW50ZWxfdGVhcmRvd25fZ21idXMoZGV2KTsKIAlpbnRlbF90ZWFyZG93bl9tY2hiYXIoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IGY3Mzc5NjAuLjBkZTc1YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtNDksNiArNDksOSBAQAogdW5zaWduZWQgaW50IGk5MTVfbHZkc19kb3duY2xvY2sgPSAwOwogbW9kdWxlX3BhcmFtX25hbWVkKGx2ZHNfZG93bmNsb2NrLCBpOTE1X2x2ZHNfZG93bmNsb2NrLCBpbnQsIDA0MDApOwogCitib29sIGk5MTVfdHJ5X3Jlc2V0ID0gdHJ1ZTsKK21vZHVsZV9wYXJhbV9uYW1lZChyZXNldCwgaTkxNV90cnlfcmVzZXQsIGJvb2wsIDA2MDApOworCiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyOwogZXh0ZXJuIGludCBpbnRlbF9hZ3BfZW5hYmxlZDsKIApAQCAtMTExLDcgKzExNCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfaTk2NWdtX2luZm8gPSB7CiAJLmdlbiA9IDQsIC5pc19jcmVzdGxpbmUgPSAxLAotCS5pc19tb2JpbGUgPSAxLCAuaGFzX2ZiYyA9IDEsIC5oYXNfcmM2ID0gMSwgLmhhc19ob3RwbHVnID0gMSwKKwkuaXNfbW9iaWxlID0gMSwgLmhhc19mYmMgPSAxLCAuaGFzX2hvdHBsdWcgPSAxLAogCS5oYXNfb3ZlcmxheSA9IDEsCiAJLnN1cHBvcnRzX3R2ID0gMSwKIH07CkBAIC0xMzAsNyArMTMzLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9nbTQ1X2luZm8gPSB7CiAJLmdlbiA9IDQsIC5pc19nNHggPSAxLAotCS5pc19tb2JpbGUgPSAxLCAubmVlZF9nZnhfaHdzID0gMSwgLmhhc19mYmMgPSAxLCAuaGFzX3JjNiA9IDEsCisJLmlzX21vYmlsZSA9IDEsIC5uZWVkX2dmeF9od3MgPSAxLCAuaGFzX2ZiYyA9IDEsCiAJLmhhc19waXBlX2N4c3IgPSAxLCAuaGFzX2hvdHBsdWcgPSAxLAogCS5zdXBwb3J0c190diA9IDEsCiAJLmhhc19ic2RfcmluZyA9IDEsCkBAIC0xNTAsNyArMTUzLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9pcm9ubGFrZV9tX2luZm8gPSB7CiAJLmdlbiA9IDUsIC5pc19tb2JpbGUgPSAxLAotCS5uZWVkX2dmeF9od3MgPSAxLCAuaGFzX3JjNiA9IDEsIC5oYXNfaG90cGx1ZyA9IDEsCisJLm5lZWRfZ2Z4X2h3cyA9IDEsIC5oYXNfaG90cGx1ZyA9IDEsCiAJLmhhc19mYmMgPSAwLCAvKiBkaXNhYmxlZCBkdWUgdG8gYnVnZ3kgaGFyZHdhcmUgKi8KIAkuaGFzX2JzZF9yaW5nID0gMSwKIH07CkBAIC0xNjUsNiArMTY4LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfc2FuZHlicmlkZ2VfbV9pbmZvID0gewogCS5nZW4gPSA2LCAuaXNfbW9iaWxlID0gMSwKIAkubmVlZF9nZnhfaHdzID0gMSwgLmhhc19ob3RwbHVnID0gMSwKKwkuaGFzX2ZiYyA9IDEsCiAJLmhhc19ic2RfcmluZyA9IDEsCiAJLmhhc19ibHRfcmluZyA9IDEsCiB9OwpAQCAtMjQ0LDEwICsyNDgsMzQgQEAKIAl9CiB9CiAKK3ZvaWQgX19nZW42X2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpbnQgY291bnQ7CisKKwljb3VudCA9IDA7CisJd2hpbGUgKGNvdW50KysgPCA1MCAmJiAoSTkxNV9SRUFEX05PVFJBQ0UoRk9SQ0VXQUtFX0FDSykgJiAxKSkKKwkJdWRlbGF5KDEwKTsKKworCUk5MTVfV1JJVEVfTk9UUkFDRShGT1JDRVdBS0UsIDEpOworCVBPU1RJTkdfUkVBRChGT1JDRVdBS0UpOworCisJY291bnQgPSAwOworCXdoaWxlIChjb3VudCsrIDwgNTAgJiYgKEk5MTVfUkVBRF9OT1RSQUNFKEZPUkNFV0FLRV9BQ0spICYgMSkgPT0gMCkKKwkJdWRlbGF5KDEwKTsKK30KKwordm9pZCBfX2dlbjZfZm9yY2Vfd2FrZV9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCUk5MTVfV1JJVEVfTk9UUkFDRShGT1JDRVdBS0UsIDApOworCVBPU1RJTkdfUkVBRChGT1JDRVdBS0UpOworfQorCiBzdGF0aWMgaW50IGk5MTVfZHJtX2ZyZWV6ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2Rpc2FibGUoZGV2KTsKKwogCXBjaV9zYXZlX3N0YXRlKGRldi0+cGRldik7CiAKIAkvKiBJZiBLTVMgaXMgYWN0aXZlLCB3ZSBkbyB0aGUgbGVhdmV2dCBzdHVmZiBoZXJlICovCkBAIC0yODQsNyArMzEyLDkgQEAKIAlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfUFJFVEhBVykKIAkJcmV0dXJuIDA7CiAKLQlkcm1fa21zX2hlbHBlcl9wb2xsX2Rpc2FibGUoZGV2KTsKKworCWlmIChkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9PSBEUk1fU1dJVENIX1BPV0VSX09GRikKKwkJcmV0dXJuIDA7CiAKIAllcnJvciA9IGk5MTVfZHJtX2ZyZWV6ZShkZXYpOwogCWlmIChlcnJvcikKQEAgLTMwNCw2ICszMzQsMTIgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBlcnJvciA9IDA7CiAKKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgeworCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWk5MTVfZ2VtX3Jlc3RvcmVfZ3R0X21hcHBpbmdzKGRldik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCX0KKwogCWk5MTVfcmVzdG9yZV9zdGF0ZShkZXYpOwogCWludGVsX29wcmVnaW9uX3NldHVwKGRldik7CiAKQEAgLTMxOSw2ICszNTUsOSBAQAogCiAJCS8qIFJlc3VtZSB0aGUgbW9kZXNldCBmb3IgZXZlcnkgYWN0aXZhdGVkIENSVEMgKi8KIAkJZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9kZShkZXYpOworCisJCWlmIChkZXZfcHJpdi0+cmVuZGVyY3R4ICYmIGRldl9wcml2LT5wd3JjdHgpCisJCQlpcm9ubGFrZV9lbmFibGVfcmM2KGRldik7CiAJfQogCiAJaW50ZWxfb3ByZWdpb25faW5pdChkZXYpOwpAQCAtMzMyLDYgKzM3MSw5IEBACiB7CiAJaW50IHJldDsKIAorCWlmIChkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9PSBEUk1fU1dJVENIX1BPV0VSX09GRikKKwkJcmV0dXJuIDA7CisKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2LT5wZGV2KSkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTQwNSw2ICs0NDcsMTQgQEAKIAlyZXR1cm4gd2FpdF9mb3IoSTkxNV9SRUFEKE1DSEJBUl9NSVJST1JfQkFTRSArIElMS19HRFNSKSAmIDB4MSwgNTAwKTsKIH0KIAorc3RhdGljIGludCBnZW42X2RvX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU4IGZsYWdzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlJOTE1X1dSSVRFKEdFTjZfR0RSU1QsIEdFTjZfR1JET01fRlVMTCk7CisJcmV0dXJuIHdhaXRfZm9yKChJOTE1X1JFQUQoR0VONl9HRFJTVCkgJiBHRU42X0dSRE9NX0ZVTEwpID09IDAsIDUwMCk7Cit9CisKIC8qKgogICogaTk2NV9yZXNldCAtIHJlc2V0IGNoaXAgYWZ0ZXIgYSBoYW5nCiAgKiBAZGV2OiBkcm0gZGV2aWNlIHRvIHJlc2V0CkBAIC00MzEsNyArNDgxLDExIEBACiAJYm9vbCBuZWVkX2Rpc3BsYXkgPSB0cnVlOwogCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJaWYgKCFpOTE1X3RyeV9yZXNldCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW11dGV4X3RyeWxvY2soJmRldi0+c3RydWN0X211dGV4KSkKKwkJcmV0dXJuIC1FQlVTWTsKIAogCWk5MTVfZ2VtX3Jlc2V0KGRldik7CiAKQEAgLTQzOSw2ICs0OTMsOSBAQAogCWlmIChnZXRfc2Vjb25kcygpIC0gZGV2X3ByaXYtPmxhc3RfZ3B1X3Jlc2V0IDwgNSkgewogCQlEUk1fRVJST1IoIkdQVSBoYW5naW5nIHRvbyBmYXN0LCBkZWNsYXJpbmcgd2VkZ2VkIVxuIik7CiAJfSBlbHNlIHN3aXRjaCAoSU5URUxfSU5GTyhkZXYpLT5nZW4pIHsKKwljYXNlIDY6CisJCXJldCA9IGdlbjZfZG9fcmVzZXQoZGV2LCBmbGFncyk7CisJCWJyZWFrOwogCWNhc2UgNToKIAkJcmV0ID0gaXJvbmxha2VfZG9fcmVzZXQoZGV2LCBmbGFncyk7CiAJCWJyZWFrOwpAQCAtNDcyLDkgKzUyOSwxNCBAQAogCSAqLwogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpIHx8CiAJCQkhZGV2X3ByaXYtPm1tLnN1c3BlbmRlZCkgewotCQlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcgPSAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nOwogCQlkZXZfcHJpdi0+bW0uc3VzcGVuZGVkID0gMDsKLQkJcmluZy0+aW5pdChkZXYsIHJpbmcpOworCisJCWRldl9wcml2LT5yaW5nW1JDU10uaW5pdCgmZGV2X3ByaXYtPnJpbmdbUkNTXSk7CisJCWlmIChIQVNfQlNEKGRldikpCisJCSAgICBkZXZfcHJpdi0+cmluZ1tWQ1NdLmluaXQoJmRldl9wcml2LT5yaW5nW1ZDU10pOworCQlpZiAoSEFTX0JMVChkZXYpKQorCQkgICAgZGV2X3ByaXYtPnJpbmdbQkNTXS5pbml0KCZkZXZfcHJpdi0+cmluZ1tCQ1NdKTsKKwogCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKIAkJZHJtX2lycV9pbnN0YWxsKGRldik7CkBAIC01MjMsNiArNTg1LDkgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJaWYgKGRybV9kZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9PSBEUk1fU1dJVENIX1BPV0VSX09GRikKKwkJcmV0dXJuIDA7CisKIAllcnJvciA9IGk5MTVfZHJtX2ZyZWV6ZShkcm1fZGV2KTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTYwNiw2ICs2NzEsOCBAQAogCS5kZXZpY2VfaXNfYWdwID0gaTkxNV9kcml2ZXJfZGV2aWNlX2lzX2FncCwKIAkuZW5hYmxlX3ZibGFuayA9IGk5MTVfZW5hYmxlX3ZibGFuaywKIAkuZGlzYWJsZV92YmxhbmsgPSBpOTE1X2Rpc2FibGVfdmJsYW5rLAorCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGk5MTVfZ2V0X3ZibGFua190aW1lc3RhbXAsCisJLmdldF9zY2Fub3V0X3Bvc2l0aW9uID0gaTkxNV9nZXRfY3J0Y19zY2Fub3V0cG9zLAogCS5pcnFfcHJlaW5zdGFsbCA9IGk5MTVfZHJpdmVyX2lycV9wcmVpbnN0YWxsLAogCS5pcnFfcG9zdGluc3RhbGwgPSBpOTE1X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwsCiAJLmlycV91bmluc3RhbGwgPSBpOTE1X2RyaXZlcl9pcnFfdW5pbnN0YWxsLApAQCAtNjYxLDggKzcyOCw2IEBACiAKIAlkcml2ZXIubnVtX2lvY3RscyA9IGk5MTVfbWF4X2lvY3RsOwogCi0JaTkxNV9nZW1fc2hyaW5rZXJfaW5pdCgpOwotCiAJLyoKIAkgKiBJZiBDT05GSUdfRFJNX0k5MTVfS01TIGlzIHNldCwgZGVmYXVsdCB0byBLTVMgdW5sZXNzCiAJICogZXhwbGljaXRseSBkaXNhYmxlZCB3aXRoIHRoZSBtb2R1bGUgcGFyYXJtZXRlci4KQEAgLTY4NCwxNyArNzQ5LDExIEBACiAJCWRyaXZlci5kcml2ZXJfZmVhdHVyZXMgJj0gfkRSSVZFUl9NT0RFU0VUOwogI2VuZGlmCiAKLQlpZiAoIShkcml2ZXIuZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX01PREVTRVQpKSB7Ci0JCWRyaXZlci5zdXNwZW5kID0gaTkxNV9zdXNwZW5kOwotCQlkcml2ZXIucmVzdW1lID0gaTkxNV9yZXN1bWU7Ci0JfQotCiAJcmV0dXJuIGRybV9pbml0KCZkcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaTkxNV9leGl0KHZvaWQpCiB7Ci0JaTkxNV9nZW1fc2hyaW5rZXJfZXhpdCgpOwogCWRybV9leGl0KCZkcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCA0MDk4MjZkLi4zODVmYzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTg5LDcgKzg5LDcgQEAKIAlpbnQgaWQ7CiAJc3RydWN0IHBhZ2UgKipwYWdlX2xpc3Q7CiAJZHJtX2RtYV9oYW5kbGVfdCAqaGFuZGxlOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqY3VyX29iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqY3VyX29iajsKIH07CiAKIHN0cnVjdCBtZW1fYmxvY2sgewpAQCAtMTI0LDkgKzEyNCw5IEBACiAjZGVmaW5lIEk5MTVfRkVOQ0VfUkVHX05PTkUgLTEKIAogc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyB7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CiAJc3RydWN0IGxpc3RfaGVhZCBscnVfbGlzdDsKLQlib29sIGdwdTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXVpbnQzMl90IHNldHVwX3NlcW5vOwogfTsKIAogc3RydWN0IHNkdm9fZGV2aWNlX21hcHBpbmcgewpAQCAtMTM5LDYgKzEzOSw4IEBACiAJdTggZGRjX3BpbjsKIH07CiAKK3N0cnVjdCBpbnRlbF9kaXNwbGF5X2Vycm9yX3N0YXRlOworCiBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGUgewogCXUzMiBlaXI7CiAJdTMyIHBndGJsX2VyOwpAQCAtMTQ4LDMyICsxNTAsNDcgQEAKIAl1MzIgaXBlaHI7CiAJdTMyIGluc3Rkb25lOwogCXUzMiBhY3RoZDsKKwl1MzIgZXJyb3I7IC8qIGdlbjYrICovCisJdTMyIGJjc19hY3RoZDsgLyogZ2VuNisgYmx0IGVuZ2luZSAqLworCXUzMiBiY3NfaXBlaHI7CisJdTMyIGJjc19pcGVpcjsKKwl1MzIgYmNzX2luc3Rkb25lOworCXUzMiBiY3Nfc2Vxbm87CisJdTMyIHZjc19hY3RoZDsgLyogZ2VuNisgYnNkIGVuZ2luZSAqLworCXUzMiB2Y3NfaXBlaHI7CisJdTMyIHZjc19pcGVpcjsKKwl1MzIgdmNzX2luc3Rkb25lOworCXUzMiB2Y3Nfc2Vxbm87CiAJdTMyIGluc3RwbTsKIAl1MzIgaW5zdHBzOwogCXUzMiBpbnN0ZG9uZTE7CiAJdTMyIHNlcW5vOwogCXU2NCBiYmFkZHI7CisJdTY0IGZlbmNlWzE2XTsKIAlzdHJ1Y3QgdGltZXZhbCB0aW1lOwogCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9vYmplY3QgewogCQlpbnQgcGFnZV9jb3VudDsKIAkJdTMyIGd0dF9vZmZzZXQ7CiAJCXUzMiAqcGFnZXNbMF07Ci0JfSAqcmluZ2J1ZmZlciwgKmJhdGNoYnVmZmVyWzJdOworCX0gKnJpbmdidWZmZXIsICpiYXRjaGJ1ZmZlcltJOTE1X05VTV9SSU5HU107CiAJc3RydWN0IGRybV9pOTE1X2Vycm9yX2J1ZmZlciB7Ci0JCXNpemVfdCBzaXplOworCQl1MzIgc2l6ZTsKIAkJdTMyIG5hbWU7CiAJCXUzMiBzZXFubzsKIAkJdTMyIGd0dF9vZmZzZXQ7CiAJCXUzMiByZWFkX2RvbWFpbnM7CiAJCXUzMiB3cml0ZV9kb21haW47Ci0JCXUzMiBmZW5jZV9yZWc7CisJCXMzMiBmZW5jZV9yZWc6NTsKIAkJczMyIHBpbm5lZDoyOwogCQl1MzIgdGlsaW5nOjI7CiAJCXUzMiBkaXJ0eToxOwogCQl1MzIgcHVyZ2VhYmxlOjE7Ci0JfSAqYWN0aXZlX2JvOwotCXUzMiBhY3RpdmVfYm9fY291bnQ7CisJCXUzMiByaW5nOjQ7CisJCXUzMiBhZ3BfdHlwZToxOworCX0gKmFjdGl2ZV9ibywgKnBpbm5lZF9ibzsKKwl1MzIgYWN0aXZlX2JvX2NvdW50LCBwaW5uZWRfYm9fY291bnQ7CiAJc3RydWN0IGludGVsX292ZXJsYXlfZXJyb3Jfc3RhdGUgKm92ZXJsYXk7CisJc3RydWN0IGludGVsX2Rpc3BsYXlfZXJyb3Jfc3RhdGUgKmRpc3BsYXk7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZGlzcGxheV9mdW5jcyB7CkBAIC0yMDcsNyArMjI0LDYgQEAKIAl1OCBpc19icm9hZHdhdGVyIDogMTsKIAl1OCBpc19jcmVzdGxpbmUgOiAxOwogCXU4IGhhc19mYmMgOiAxOwotCXU4IGhhc19yYzYgOiAxOwogCXU4IGhhc19waXBlX2N4c3IgOiAxOwogCXU4IGhhc19ob3RwbHVnIDogMTsKIAl1OCBjdXJzb3JfbmVlZHNfcGh5c2ljYWwgOiAxOwpAQCAtMjQzLDYgKzI1OSw3IEBACiAJY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvICppbmZvOwogCiAJaW50IGhhc19nZW07CisJaW50IHJlbGF0aXZlX2NvbnN0YW50c19tb2RlOwogCiAJdm9pZCBfX2lvbWVtICpyZWdzOwogCkBAIC0yNTMsMjAgKzI3MCwxNSBAQAogCX0gKmdtYnVzOwogCiAJc3RydWN0IHBjaV9kZXYgKmJyaWRnZV9kZXY7Ci0Jc3RydWN0IGludGVsX3JpbmdfYnVmZmVyIHJlbmRlcl9yaW5nOwotCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciBic2RfcmluZzsKLQlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgYmx0X3Jpbmc7CisJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyIHJpbmdbSTkxNV9OVU1fUklOR1NdOwogCXVpbnQzMl90IG5leHRfc2Vxbm87CiAKIAlkcm1fZG1hX2hhbmRsZV90ICpzdGF0dXNfcGFnZV9kbWFoOwotCXZvaWQgKnNlcW5vX3BhZ2U7CiAJZG1hX2FkZHJfdCBkbWFfc3RhdHVzX3BhZ2U7CiAJdWludDMyX3QgY291bnRlcjsKLQl1bnNpZ25lZCBpbnQgc2Vxbm9fZ2Z4X2FkZHI7CiAJZHJtX2xvY2FsX21hcF90IGh3c19tYXA7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpzZXFub19vYmo7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpwd3JjdHg7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpyZW5kZXJjdHg7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnB3cmN0eDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqcmVuZGVyY3R4OwogCiAJc3RydWN0IHJlc291cmNlIG1jaF9yZXM7CiAKQEAgLTI3NSwyNSArMjg3LDE3IEBACiAJaW50IGZyb250X29mZnNldDsKIAlpbnQgY3VycmVudF9wYWdlOwogCWludCBwYWdlX2ZsaXBwaW5nOwotI2RlZmluZSBJOTE1X0RFQlVHX1JFQUQgKDE8PDApCi0jZGVmaW5lIEk5MTVfREVCVUdfV1JJVEUgKDE8PDEpCi0JdW5zaWduZWQgbG9uZyBkZWJ1Z19mbGFnczsKIAotCXdhaXRfcXVldWVfaGVhZF90IGlycV9xdWV1ZTsKIAlhdG9taWNfdCBpcnFfcmVjZWl2ZWQ7Ci0JLyoqIFByb3RlY3RzIHVzZXJfaXJxX3JlZmNvdW50IGFuZCBpcnFfbWFza19yZWcgKi8KLQlzcGlubG9ja190IHVzZXJfaXJxX2xvY2s7CiAJdTMyIHRyYWNlX2lycV9zZXFubzsKKworCS8qIHByb3RlY3RzIHRoZSBpcnEgbWFza3MgKi8KKwlzcGlubG9ja190IGlycV9sb2NrOwogCS8qKiBDYWNoZWQgdmFsdWUgb2YgSU1SIHRvIGF2b2lkIHJlYWRzIGluIHVwZGF0aW5nIHRoZSBiaXRmaWVsZCAqLwotCXUzMiBpcnFfbWFza19yZWc7CiAJdTMyIHBpcGVzdGF0WzJdOwotCS8qKiBzcGxpdHRlZCBpcnEgcmVncyBmb3IgZ3JhcGhpY3MgYW5kIGRpc3BsYXkgZW5naW5lIG9uIElyb25sYWtlLAotCSAgICBpcnFfbWFza19yZWcgaXMgc3RpbGwgdXNlZCBmb3IgZGlzcGxheSBpcnEuICovCi0JdTMyIGd0X2lycV9tYXNrX3JlZzsKLQl1MzIgZ3RfaXJxX2VuYWJsZV9yZWc7Ci0JdTMyIGRlX2lycV9lbmFibGVfcmVnOwotCXUzMiBwY2hfaXJxX21hc2tfcmVnOwotCXUzMiBwY2hfaXJxX2VuYWJsZV9yZWc7CisJdTMyIGlycV9tYXNrOworCXUzMiBndF9pcnFfbWFzazsKKwl1MzIgcGNoX2lycV9tYXNrOwogCiAJdTMyIGhvdHBsdWdfc3VwcG9ydGVkX21hc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IGhvdHBsdWdfd29yazsKQEAgLTMwNiw3ICszMTAsNyBAQAogCWludCBudW1fcGlwZTsKIAogCS8qIEZvciBoYW5nY2hlY2sgdGltZXIgKi8KLSNkZWZpbmUgRFJNX0k5MTVfSEFOR0NIRUNLX1BFUklPRCAyNTAgLyogaW4gbXMgKi8KKyNkZWZpbmUgRFJNX0k5MTVfSEFOR0NIRUNLX1BFUklPRCAxNTAwIC8qIGluIG1zICovCiAJc3RydWN0IHRpbWVyX2xpc3QgaGFuZ2NoZWNrX3RpbWVyOwogCWludCBoYW5nY2hlY2tfY291bnQ7CiAJdWludDMyX3QgbGFzdF9hY3RoZDsKQEAgLTMyOSw2ICszMzMsNyBAQAogCiAJLyogTFZEUyBpbmZvICovCiAJaW50IGJhY2tsaWdodF9sZXZlbDsgIC8qIHJlc3RvcmUgYmFja2xpZ2h0IHRvIHRoaXMgdmFsdWUgKi8KKwlib29sIGJhY2tsaWdodF9lbmFibGVkOwogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpwYW5lbF9maXhlZF9tb2RlOwogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpsZnBfbHZkc192YnRfbW9kZTsgLyogaWYgYW55ICovCiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnNkdm9fbHZkc192YnRfbW9kZTsgLyogaWYgYW55ICovCkBAIC01MzAsMjMgKzUzNSwyMSBAQAogCiAJc3RydWN0IHsKIAkJLyoqIEJyaWRnZSB0byBpbnRlbC1ndHQta28gKi8KLQkJc3RydWN0IGludGVsX2d0dCAqZ3R0OworCQljb25zdCBzdHJ1Y3QgaW50ZWxfZ3R0ICpndHQ7CiAJCS8qKiBNZW1vcnkgYWxsb2NhdG9yIGZvciBHVFQgc3RvbGVuIG1lbW9yeSAqLwotCQlzdHJ1Y3QgZHJtX21tIHZyYW07CisJCXN0cnVjdCBkcm1fbW0gc3RvbGVuOwogCQkvKiogTWVtb3J5IGFsbG9jYXRvciBmb3IgR1RUICovCiAJCXN0cnVjdCBkcm1fbW0gZ3R0X3NwYWNlOworCQkvKiogTGlzdCBvZiBhbGwgb2JqZWN0cyBpbiBndHRfc3BhY2UuIFVzZWQgdG8gcmVzdG9yZSBndHQKKwkJICogbWFwcGluZ3Mgb24gcmVzdW1lICovCisJCXN0cnVjdCBsaXN0X2hlYWQgZ3R0X2xpc3Q7CisJCS8qKiBFbmQgb2YgbWFwcGFibGUgcGFydCBvZiBHVFQgKi8KKwkJdW5zaWduZWQgbG9uZyBndHRfbWFwcGFibGVfZW5kOwogCiAJCXN0cnVjdCBpb19tYXBwaW5nICpndHRfbWFwcGluZzsKIAkJaW50IGd0dF9tdHJyOwogCi0JCS8qKgotCQkgKiBNZW1iZXJzaGlwIG9uIGxpc3Qgb2YgYWxsIGxvYWRlZCBkZXZpY2VzLCB1c2VkIHRvIGV2aWN0Ci0JCSAqIGluYWN0aXZlIGJ1ZmZlcnMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgotCQkgKgotCQkgKiBNb2RpZmljYXRpb25zIHNob3VsZCBvbmx5IGJlIGRvbmUgd2hpbHN0IGhvbGRpbmcgdGhlCi0JCSAqIHNocmlua19saXN0X2xvY2sgc3BpbmxvY2suCi0JCSAqLwotCQlzdHJ1Y3QgbGlzdF9oZWFkIHNocmlua19saXN0OworCQlzdHJ1Y3Qgc2hyaW5rZXIgaW5hY3RpdmVfc2hyaW5rZXI7CiAKIAkJLyoqCiAJCSAqIExpc3Qgb2Ygb2JqZWN0cyBjdXJyZW50bHkgaW52b2x2ZWQgaW4gcmVuZGVyaW5nLgpAQCAtNjA5LDE2ICs2MTIsNiBAQAogCQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJldGlyZV93b3JrOwogCiAJCS8qKgotCQkgKiBXYWl0aW5nIHNlcXVlbmNlIG51bWJlciwgaWYgYW55Ci0JCSAqLwotCQl1aW50MzJfdCB3YWl0aW5nX2dlbV9zZXFubzsKLQotCQkvKioKLQkJICogTGFzdCBzZXEgc2VlbiBhdCBpcnEgdGltZQotCQkgKi8KLQkJdWludDMyX3QgaXJxX2dlbV9zZXFubzsKLQotCQkvKioKIAkJICogRmxhZyBpZiB0aGUgWCBTZXJ2ZXIsIGFuZCB0aHVzIERSTSwgaXMgbm90IGN1cnJlbnRseSBpbgogCQkgKiBjb250cm9sIG9mIHRoZSBkZXZpY2UuCiAJCSAqCkBAIC02NDUsMTYgKzYzOCwxMSBAQAogCQkvKiBzdG9yYWdlIGZvciBwaHlzaWNhbCBvYmplY3RzICovCiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fcGh5c19vYmplY3QgKnBoeXNfb2Jqc1tJOTE1X01BWF9QSFlTX09CSkVDVF07CiAKLQkJdWludDMyX3QgZmx1c2hfcmluZ3M7Ci0KIAkJLyogYWNjb3VudGluZywgdXNlZnVsIGZvciB1c2VybGFuZCBkZWJ1Z2dpbmcgKi8KLQkJc2l6ZV90IG9iamVjdF9tZW1vcnk7Ci0JCXNpemVfdCBwaW5fbWVtb3J5OwotCQlzaXplX3QgZ3R0X21lbW9yeTsKIAkJc2l6ZV90IGd0dF90b3RhbDsKKwkJc2l6ZV90IG1hcHBhYmxlX2d0dF90b3RhbDsKKwkJc2l6ZV90IG9iamVjdF9tZW1vcnk7CiAJCXUzMiBvYmplY3RfY291bnQ7Ci0JCXUzMiBwaW5fY291bnQ7Ci0JCXUzMiBndHRfY291bnQ7CiAJfSBtbTsKIAlzdHJ1Y3Qgc2R2b19kZXZpY2VfbWFwcGluZyBzZHZvX21hcHBpbmdzWzJdOwogCS8qIGluZGljYXRlIHdoZXRoZXIgdGhlIExWRFNfQk9SREVSIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdCAqLwpAQCAtNjg4LDE0ICs2NzYsMTQgQEAKIAl1OCBmbWF4OwogCXU4IGZzdGFydDsKIAotIAl1NjQgbGFzdF9jb3VudDE7Ci0gCXVuc2lnbmVkIGxvbmcgbGFzdF90aW1lMTsKLSAJdTY0IGxhc3RfY291bnQyOwotIAlzdHJ1Y3QgdGltZXNwZWMgbGFzdF90aW1lMjsKLSAJdW5zaWduZWQgbG9uZyBnZnhfcG93ZXI7Ci0gCWludCBjX207Ci0gCWludCByX3Q7Ci0gCXU4IGNvcnI7CisJdTY0IGxhc3RfY291bnQxOworCXVuc2lnbmVkIGxvbmcgbGFzdF90aW1lMTsKKwl1NjQgbGFzdF9jb3VudDI7CisJc3RydWN0IHRpbWVzcGVjIGxhc3RfdGltZTI7CisJdW5zaWduZWQgbG9uZyBnZnhfcG93ZXI7CisJaW50IGNfbTsKKwlpbnQgcl90OworCXU4IGNvcnI7CiAJc3BpbmxvY2tfdCAqbWNoZGV2X2xvY2s7CiAKIAllbnVtIG5vX2ZiY19yZWFzb24gbm9fZmJjX3JlYXNvbjsKQEAgLTcwOSwyMCArNjk3LDIwIEBACiAJc3RydWN0IGludGVsX2ZiZGV2ICpmYmRldjsKIH0gZHJtX2k5MTVfcHJpdmF0ZV90OwogCi0vKiogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlIGF0dGFjaGVkIHRvIGVhY2ggZHJtX2dlbV9vYmplY3QgKi8KIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0IHsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgYmFzZTsKIAogCS8qKiBDdXJyZW50IHNwYWNlIGFsbG9jYXRlZCB0byB0aGlzIG9iamVjdCBpbiB0aGUgR1RULCBpZiBhbnkuICovCiAJc3RydWN0IGRybV9tbV9ub2RlICpndHRfc3BhY2U7CisJc3RydWN0IGxpc3RfaGVhZCBndHRfbGlzdDsKIAogCS8qKiBUaGlzIG9iamVjdCdzIHBsYWNlIG9uIHRoZSBhY3RpdmUvZmx1c2hpbmcvaW5hY3RpdmUgbGlzdHMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHJpbmdfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1tX2xpc3Q7CiAJLyoqIFRoaXMgb2JqZWN0J3MgcGxhY2Ugb24gR1BVIHdyaXRlIGxpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGdwdV93cml0ZV9saXN0OwotCS8qKiBUaGlzIG9iamVjdCdzIHBsYWNlIG9uIGV2aWN0aW9uIGxpc3QgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGV2aWN0X2xpc3Q7CisJLyoqIFRoaXMgb2JqZWN0J3MgcGxhY2UgaW4gdGhlIGJhdGNoYnVmZmVyIG9yIG9uIHRoZSBldmljdGlvbiBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZCBleGVjX2xpc3Q7CiAKIAkvKioKIAkgKiBUaGlzIGlzIHNldCBpZiB0aGUgb2JqZWN0IGlzIG9uIHRoZSBhY3RpdmUgb3IgZmx1c2hpbmcgbGlzdHMKQEAgLTczOCw2ICs3MjYsMTIgQEAKIAl1bnNpZ25lZCBpbnQgZGlydHkgOiAxOwogCiAJLyoqCisJICogVGhpcyBpcyBzZXQgaWYgdGhlIG9iamVjdCBoYXMgYmVlbiB3cml0dGVuIHRvIHNpbmNlIHRoZSBsYXN0CisJICogR1BVIGZsdXNoLgorCSAqLworCXVuc2lnbmVkIGludCBwZW5kaW5nX2dwdV93cml0ZSA6IDE7CisKKwkvKioKIAkgKiBGZW5jZSByZWdpc3RlciBiaXRzIChpZiBhbnkpIGZvciB0aGlzIG9iamVjdC4gIFdpbGwgYmUgc2V0CiAJICogYXMgbmVlZGVkIHdoZW4gbWFwcGVkIGludG8gdGhlIEdUVC4KIAkgKiBQcm90ZWN0ZWQgYnkgZGV2LT5zdHJ1Y3RfbXV0ZXguCkBAIC03NDcsMjkgKzc0MSwxNSBAQAogCXNpZ25lZCBpbnQgZmVuY2VfcmVnIDogNTsKIAogCS8qKgotCSAqIFVzZWQgZm9yIGNoZWNraW5nIHRoZSBvYmplY3QgZG9lc24ndCBhcHBlYXIgbW9yZSB0aGFuIG9uY2UKLQkgKiBpbiBhbiBleGVjYnVmZmVyIG9iamVjdCBsaXN0LgotCSAqLwotCXVuc2lnbmVkIGludCBpbl9leGVjYnVmZmVyIDogMTsKLQotCS8qKgogCSAqIEFkdmljZTogYXJlIHRoZSBiYWNraW5nIHBhZ2VzIHB1cmdlYWJsZT8KIAkgKi8KIAl1bnNpZ25lZCBpbnQgbWFkdiA6IDI7CiAKIAkvKioKLQkgKiBSZWZjb3VudCBmb3IgdGhlIHBhZ2VzIGFycmF5LiBXaXRoIHRoZSBjdXJyZW50IGxvY2tpbmcgc2NoZW1lLCB0aGVyZQotCSAqIGFyZSBhdCBtb3N0IHR3byBjb25jdXJyZW50IHVzZXJzOiBCaW5kaW5nIGEgYm8gdG8gdGhlIGd0dCBhbmQKLQkgKiBwd3JpdGUvcHJlYWQgdXNpbmcgcGh5c2ljYWwgYWRkcmVzc2VzLiBTbyB0d28gYml0cyBmb3IgYSBtYXhpbXVtCi0JICogb2YgdHdvIHVzZXJzIGFyZSBlbm91Z2guCi0JICovCi0JdW5zaWduZWQgaW50IHBhZ2VzX3JlZmNvdW50IDogMjsKLSNkZWZpbmUgRFJNX0k5MTVfR0VNX09CSkVDVF9NQVhfUEFHRVNfUkVGQ09VTlQgMHgzCi0KLQkvKioKIAkgKiBDdXJyZW50IHRpbGluZyBtb2RlIGZvciB0aGUgb2JqZWN0LgogCSAqLwogCXVuc2lnbmVkIGludCB0aWxpbmdfbW9kZSA6IDI7CisJdW5zaWduZWQgaW50IHRpbGluZ19jaGFuZ2VkIDogMTsKIAogCS8qKiBIb3cgbWFueSB1c2VycyBoYXZlIHBpbm5lZCB0aGlzIG9iamVjdCBpbiBHVFQgc3BhY2UuIFRoZSBmb2xsb3dpbmcKIAkgKiB1c2VycyBjYW4gZWFjaCBob2xkIGF0IG1vc3Qgb25lIHJlZmVyZW5jZTogcHdyaXRlL3ByZWFkLCBwaW5faW9jdGwKQEAgLTc4MywyOCArNzYzLDU1IEBACiAJdW5zaWduZWQgaW50IHBpbl9jb3VudCA6IDQ7CiAjZGVmaW5lIERSTV9JOTE1X0dFTV9PQkpFQ1RfTUFYX1BJTl9DT1VOVCAweGYKIAotCS8qKiBBR1AgbWVtb3J5IHN0cnVjdHVyZSBmb3Igb3VyIEdUVCBiaW5kaW5nLiAqLwotCURSTV9BR1BfTUVNICphZ3BfbWVtOworCS8qKgorCSAqIElzIHRoZSBvYmplY3QgYXQgdGhlIGN1cnJlbnQgbG9jYXRpb24gaW4gdGhlIGd0dCBtYXBwYWJsZSBhbmQKKwkgKiBmZW5jZWFibGU/IFVzZWQgdG8gYXZvaWQgY29zdGx5IHJlY2FsY3VsYXRpb25zLgorCSAqLworCXVuc2lnbmVkIGludCBtYXBfYW5kX2ZlbmNlYWJsZSA6IDE7CisKKwkvKioKKwkgKiBXaGV0aGVyIHRoZSBjdXJyZW50IGd0dCBtYXBwaW5nIG5lZWRzIHRvIGJlIG1hcHBhYmxlIChhbmQgaXNuJ3QganVzdAorCSAqIG1hcHBhYmxlIGJ5IGFjY2lkZW50KS4gVHJhY2sgcGluIGFuZCBmYXVsdCBzZXBhcmF0ZSBmb3IgYSBtb3JlCisJICogYWNjdXJhdGUgbWFwcGFibGUgd29ya2luZyBzZXQuCisJICovCisJdW5zaWduZWQgaW50IGZhdWx0X21hcHBhYmxlIDogMTsKKwl1bnNpZ25lZCBpbnQgcGluX21hcHBhYmxlIDogMTsKKworCS8qCisJICogSXMgdGhlIEdQVSBjdXJyZW50bHkgdXNpbmcgYSBmZW5jZSB0byBhY2Nlc3MgdGhpcyBidWZmZXIsCisJICovCisJdW5zaWduZWQgaW50IHBlbmRpbmdfZmVuY2VkX2dwdV9hY2Nlc3M6MTsKKwl1bnNpZ25lZCBpbnQgZmVuY2VkX2dwdV9hY2Nlc3M6MTsKIAogCXN0cnVjdCBwYWdlICoqcGFnZXM7CiAKIAkvKioKKwkgKiBETUFSIHN1cHBvcnQKKwkgKi8KKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2xpc3Q7CisJaW50IG51bV9zZzsKKworCS8qKgorCSAqIFVzZWQgZm9yIHBlcmZvcm1pbmcgcmVsb2NhdGlvbnMgZHVyaW5nIGV4ZWNidWZmZXIgaW5zZXJ0aW9uLgorCSAqLworCXN0cnVjdCBobGlzdF9ub2RlIGV4ZWNfbm9kZTsKKwl1bnNpZ25lZCBsb25nIGV4ZWNfaGFuZGxlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVjX2VudHJ5OworCisJLyoqCiAJICogQ3VycmVudCBvZmZzZXQgb2YgdGhlIG9iamVjdCBpbiBHVFQgc3BhY2UuCiAJICoKIAkgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIGd0dF9zcGFjZS0+c3RhcnQKIAkgKi8KIAl1aW50MzJfdCBndHRfb2Zmc2V0OwogCi0JLyogV2hpY2ggcmluZyBpcyByZWZlcmluZyB0byBpcyB0aGlzIG9iamVjdCAqLwotCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZzsKLQotCS8qKgotCSAqIEZha2Ugb2Zmc2V0IGZvciB1c2UgYnkgbW1hcCgyKQotCSAqLwotCXVpbnQ2NF90IG1tYXBfb2Zmc2V0OwotCiAJLyoqIEJyZWFkY3J1bWIgb2YgbGFzdCByZW5kZXJpbmcgdG8gdGhlIGJ1ZmZlci4gKi8KIAl1aW50MzJfdCBsYXN0X3JlbmRlcmluZ19zZXFubzsKKwlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmc7CisKKwkvKiogQnJlYWRjcnVtYiBvZiBsYXN0IGZlbmNlZCBHUFUgYWNjZXNzIHRvIHRoZSBidWZmZXIuICovCisJdWludDMyX3QgbGFzdF9mZW5jZWRfc2Vxbm87CisJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpsYXN0X2ZlbmNlZF9yaW5nOwogCiAJLyoqIEN1cnJlbnQgdGlsaW5nIHN0cmlkZSBmb3IgdGhlIG9iamVjdCwgaWYgaXQncyB0aWxlZC4gKi8KIAl1aW50MzJfdCBzdHJpZGU7CkBAIC04ODAsNiArODg3LDY4IEBACiAJQ0hJUF9JOTY1ID0gMHgwOCwKIH07CiAKKyNkZWZpbmUgSU5URUxfSU5GTyhkZXYpCSgoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICopIChkZXYpLT5kZXZfcHJpdmF0ZSktPmluZm8pCisKKyNkZWZpbmUgSVNfSTgzMChkZXYpCQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgzNTc3KQorI2RlZmluZSBJU184NDVHKGRldikJCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI1NjIpCisjZGVmaW5lIElTX0k4NVgoZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+aXNfaTg1eCkKKyNkZWZpbmUgSVNfSTg2NUcoZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU3MikKKyNkZWZpbmUgSVNfSTkxNUcoZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+aXNfaTkxNWcpCisjZGVmaW5lIElTX0k5MTVHTShkZXYpCQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyNTkyKQorI2RlZmluZSBJU19JOTQ1RyhkZXYpCQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyNzcyKQorI2RlZmluZSBJU19JOTQ1R00oZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+aXNfaTk0NWdtKQorI2RlZmluZSBJU19CUk9BRFdBVEVSKGRldikJKElOVEVMX0lORk8oZGV2KS0+aXNfYnJvYWR3YXRlcikKKyNkZWZpbmUgSVNfQ1JFU1RMSU5FKGRldikJKElOVEVMX0lORk8oZGV2KS0+aXNfY3Jlc3RsaW5lKQorI2RlZmluZSBJU19HTTQ1KGRldikJCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDJBNDIpCisjZGVmaW5lIElTX0c0WChkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5pc19nNHgpCisjZGVmaW5lIElTX1BJTkVWSUVXX0coZGV2KQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHhhMDAxKQorI2RlZmluZSBJU19QSU5FVklFV19NKGRldikJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4YTAxMSkKKyNkZWZpbmUgSVNfUElORVZJRVcoZGV2KQkoSU5URUxfSU5GTyhkZXYpLT5pc19waW5ldmlldykKKyNkZWZpbmUgSVNfRzMzKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2czMykKKyNkZWZpbmUgSVNfSVJPTkxBS0VfRChkZXYpCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDAwNDIpCisjZGVmaW5lIElTX0lST05MQUtFX00oZGV2KQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgwMDQ2KQorI2RlZmluZSBJU19NT0JJTEUoZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+aXNfbW9iaWxlKQorCisjZGVmaW5lIElTX0dFTjIoZGV2KQkoSU5URUxfSU5GTyhkZXYpLT5nZW4gPT0gMikKKyNkZWZpbmUgSVNfR0VOMyhkZXYpCShJTlRFTF9JTkZPKGRldiktPmdlbiA9PSAzKQorI2RlZmluZSBJU19HRU40KGRldikJKElOVEVMX0lORk8oZGV2KS0+Z2VuID09IDQpCisjZGVmaW5lIElTX0dFTjUoZGV2KQkoSU5URUxfSU5GTyhkZXYpLT5nZW4gPT0gNSkKKyNkZWZpbmUgSVNfR0VONihkZXYpCShJTlRFTF9JTkZPKGRldiktPmdlbiA9PSA2KQorCisjZGVmaW5lIEhBU19CU0QoZGV2KSAgICAgICAgICAgIChJTlRFTF9JTkZPKGRldiktPmhhc19ic2RfcmluZykKKyNkZWZpbmUgSEFTX0JMVChkZXYpICAgICAgICAgICAgKElOVEVMX0lORk8oZGV2KS0+aGFzX2JsdF9yaW5nKQorI2RlZmluZSBJOTE1X05FRURfR0ZYX0hXUyhkZXYpCShJTlRFTF9JTkZPKGRldiktPm5lZWRfZ2Z4X2h3cykKKworI2RlZmluZSBIQVNfT1ZFUkxBWShkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5oYXNfb3ZlcmxheSkKKyNkZWZpbmUgT1ZFUkxBWV9ORUVEU19QSFlTSUNBTChkZXYpCShJTlRFTF9JTkZPKGRldiktPm92ZXJsYXlfbmVlZHNfcGh5c2ljYWwpCisKKy8qIFdpdGggdGhlIDk0NSBhbmQgbGF0ZXIsIFkgdGlsaW5nIGdvdCBhZGp1c3RlZCBzbyB0aGF0IGl0IHdhcyAzMiAxMjgtYnl0ZQorICogcm93cywgd2hpY2ggY2hhbmdlZCB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBhbmQgZmVuY2UgcHJvZ3JhbW1pbmcuCisgKi8KKyNkZWZpbmUgSEFTXzEyOF9CWVRFX1lfVElMSU5HKGRldikgKCFJU19HRU4yKGRldikgJiYgIShJU19JOTE1RyhkZXYpIHx8IFwKKwkJCQkJCSAgICAgIElTX0k5MTVHTShkZXYpKSkKKyNkZWZpbmUgU1VQUE9SVFNfRElHSVRBTF9PVVRQVVRTKGRldikJKCFJU19HRU4yKGRldikgJiYgIUlTX1BJTkVWSUVXKGRldikpCisjZGVmaW5lIFNVUFBPUlRTX0lOVEVHUkFURURfSERNSShkZXYpCShJU19HNFgoZGV2KSB8fCBJU19HRU41KGRldikpCisjZGVmaW5lIFNVUFBPUlRTX0lOVEVHUkFURURfRFAoZGV2KQkoSVNfRzRYKGRldikgfHwgSVNfR0VONShkZXYpKQorI2RlZmluZSBTVVBQT1JUU19FRFAoZGV2KQkJKElTX0lST05MQUtFX00oZGV2KSkKKyNkZWZpbmUgU1VQUE9SVFNfVFYoZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+c3VwcG9ydHNfdHYpCisjZGVmaW5lIEk5MTVfSEFTX0hPVFBMVUcoZGV2KQkJIChJTlRFTF9JTkZPKGRldiktPmhhc19ob3RwbHVnKQorLyogZHNwYXJiIGNvbnRyb2xsZWQgYnkgaHcgb25seSAqLworI2RlZmluZSBEU1BBUkJfSFdDT05UUk9MKGRldikgKElTX0c0WChkZXYpIHx8IElTX0lST05MQUtFKGRldikpCisKKyNkZWZpbmUgSEFTX0ZXX0JMQyhkZXYpIChJTlRFTF9JTkZPKGRldiktPmdlbiA+IDIpCisjZGVmaW5lIEhBU19QSVBFX0NYU1IoZGV2KSAoSU5URUxfSU5GTyhkZXYpLT5oYXNfcGlwZV9jeHNyKQorI2RlZmluZSBJOTE1X0hBU19GQkMoZGV2KSAoSU5URUxfSU5GTyhkZXYpLT5oYXNfZmJjKQorCisjZGVmaW5lIEhBU19QQ0hfU1BMSVQoZGV2KSAoSVNfR0VONShkZXYpIHx8IElTX0dFTjYoZGV2KSkKKyNkZWZpbmUgSEFTX1BJUEVfQ09OVFJPTChkZXYpIChJU19HRU41KGRldikgfHwgSVNfR0VONihkZXYpKQorCisjZGVmaW5lIElOVEVMX1BDSF9UWVBFKGRldikgKCgoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKikoZGV2KS0+ZGV2X3ByaXZhdGUpLT5wY2hfdHlwZSkKKyNkZWZpbmUgSEFTX1BDSF9DUFQoZGV2KSAoSU5URUxfUENIX1RZUEUoZGV2KSA9PSBQQ0hfQ1BUKQorI2RlZmluZSBIQVNfUENIX0lCWChkZXYpIChJTlRFTF9QQ0hfVFlQRShkZXYpID09IFBDSF9JQlgpCisKKyNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCisKIGV4dGVybiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgaTkxNV9pb2N0bHNbXTsKIGV4dGVybiBpbnQgaTkxNV9tYXhfaW9jdGw7CiBleHRlcm4gdW5zaWduZWQgaW50IGk5MTVfZmJwZXJjcnRjOwpAQCAtOTA3LDggKzk3Niw4IEBACiBleHRlcm4gbG9uZyBpOTE1X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKIGV4dGVybiBpbnQgaTkxNV9lbWl0X2JveChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpib3hlcywKLQkJCSBpbnQgaSwgaW50IERSMSwgaW50IERSNCk7CisJCQkgc3RydWN0IGRybV9jbGlwX3JlY3QgKmJveCwKKwkJCSBpbnQgRFIxLCBpbnQgRFI0KTsKIGV4dGVybiBpbnQgaTkxNV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1OCBmbGFncyk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBpOTE1X2NoaXBzZXRfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBpOTE1X21jaF92YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKQEAgLTkxOCw2ICs5ODcsNyBAQAogCiAvKiBpOTE1X2lycS5jICovCiB2b2lkIGk5MTVfaGFuZ2NoZWNrX2VsYXBzZWQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQgaTkxNV9oYW5kbGVfZXJyb3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCB3ZWRnZWQpOwogZXh0ZXJuIGludCBpOTE1X2lycV9lbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCBpOTE1X2lycV93YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC05MzksMTIgKzEwMDksNiBAQAogZXh0ZXJuIHUzMiBnbTQ1X2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gaW50IGk5MTVfdmJsYW5rX3N3YXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Ci1leHRlcm4gdm9pZCBpOTE1X2VuYWJsZV9pcnEoZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIG1hc2spOwotZXh0ZXJuIHZvaWQgaTkxNV9kaXNhYmxlX2lycShkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgbWFzayk7Ci1leHRlcm4gdm9pZCBpcm9ubGFrZV9lbmFibGVfZ3JhcGhpY3NfaXJxKGRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCXUzMiBtYXNrKTsKLWV4dGVybiB2b2lkIGlyb25sYWtlX2Rpc2FibGVfZ3JhcGhpY3NfaXJxKGRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCXUzMiBtYXNrKTsKIAogdm9pZAogaTkxNV9lbmFibGVfcGlwZXN0YXQoZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IHBpcGUsIHUzMiBtYXNrKTsKQEAgLTk1Myw2ICsxMDE3LDEzIEBACiBpOTE1X2Rpc2FibGVfcGlwZXN0YXQoZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IHBpcGUsIHUzMiBtYXNrKTsKIAogdm9pZCBpbnRlbF9lbmFibGVfYXNsZSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgaTkxNV9nZXRfdmJsYW5rX3RpbWVzdGFtcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKKwkJCSAgICAgIGludCAqbWF4X2Vycm9yLAorCQkJICAgICAgc3RydWN0IHRpbWV2YWwgKnZibGFua190aW1lLAorCQkJICAgICAgdW5zaWduZWQgZmxhZ3MpOworCitpbnQgaTkxNV9nZXRfY3J0Y19zY2Fub3V0cG9zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlLAorCQkJICAgICBpbnQgKnZwb3MsIGludCAqaHBvcyk7CiAKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIGV4dGVybiB2b2lkIGk5MTVfZGVzdHJveV9lcnJvcl9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAgLTEwMTcsMTUgKzEwODgsMjggQEAKIAkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiB2b2lkIGk5MTVfZ2VtX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBpbnQgaTkxNV9nZW1faW5pdF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwotc3RydWN0IGRybV9nZW1fb2JqZWN0ICogaTkxNV9nZW1fYWxsb2Nfb2JqZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgIHNpemVfdCBzaXplKTsKK2ludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fZmx1c2hfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAorCQkJCSAgICAgdWludDMyX3QgaW52YWxpZGF0ZV9kb21haW5zLAorCQkJCSAgICAgdWludDMyX3QgZmx1c2hfZG9tYWlucyk7CitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqaTkxNV9nZW1fYWxsb2Nfb2JqZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCQkgIHNpemVfdCBzaXplKTsKIHZvaWQgaTkxNV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwotaW50IGk5MTVfZ2VtX29iamVjdF9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHVpbnQzMl90IGFsaWdubWVudCk7Ci12b2lkIGk5MTVfZ2VtX29iamVjdF91bnBpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Ci1pbnQgaTkxNV9nZW1fb2JqZWN0X3VuYmluZChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Ci12b2lkIGk5MTVfZ2VtX3JlbGVhc2VfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX29iamVjdF9waW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgICAgIHVpbnQzMl90IGFsaWdubWVudCwKKwkJCQkgICAgIGJvb2wgbWFwX2FuZF9mZW5jZWFibGUpOwordm9pZCBpOTE1X2dlbV9vYmplY3RfdW5waW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CitpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX29iamVjdF91bmJpbmQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cit2b2lkIGk5MTVfZ2VtX3JlbGVhc2VfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIHZvaWQgaTkxNV9nZW1fbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCitpbnQgX19tdXN0X2NoZWNrIGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkJCWJvb2wgaW50ZXJydXB0aWJsZSk7Cit2b2lkIGk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCSAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCisJCQkJICAgIHUzMiBzZXFubyk7CisKIC8qKgogICogUmV0dXJucyB0cnVlIGlmIHNlcTEgaXMgbGF0ZXIgdGhhbiBzZXEyLgogICovCkBAIC0xMDM1LDczICsxMTE5LDg4IEBACiAJcmV0dXJuIChpbnQzMl90KShzZXExIC0gc2VxMikgPj0gMDsKIH0KIAotaW50IGk5MTVfZ2VtX29iamVjdF9nZXRfZmVuY2VfcmVnKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAotCQkJCSAgYm9vbCBpbnRlcnJ1cHRpYmxlKTsKLWludCBpOTE1X2dlbV9vYmplY3RfcHV0X2ZlbmNlX3JlZyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKLQkJCQkgIGJvb2wgaW50ZXJydXB0aWJsZSk7CitzdGF0aWMgaW5saW5lIHUzMgoraTkxNV9nZW1fbmV4dF9yZXF1ZXN0X3NlcW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXJldHVybiByaW5nLT5vdXRzdGFuZGluZ19sYXp5X3JlcXVlc3QgPSBkZXZfcHJpdi0+bmV4dF9zZXFubzsKK30KKworaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9vYmplY3RfZ2V0X2ZlbmNlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJCSAgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcGlwZWxpbmVkLAorCQkJCQkgICBib29sIGludGVycnVwdGlibGUpOworaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9vYmplY3RfcHV0X2ZlbmNlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOworCiB2b2lkIGk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgaTkxNV9nZW1fcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci12b2lkIGk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKLWludCBpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKLQkJCSAgICAgICB1aW50MzJfdCByZWFkX2RvbWFpbnMsCi0JCQkgICAgICAgdWludDMyX3Qgd3JpdGVfZG9tYWluKTsKLWludCBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgICAgICBib29sIGludGVycnVwdGlibGUpOwotaW50IGk5MTVfZ2VtX2luaXRfcmluZ2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CitpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJCSAgICB1aW50MzJfdCByZWFkX2RvbWFpbnMsCisJCQkJCSAgICB1aW50MzJfdCB3cml0ZV9kb21haW4pOworaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJCSAgIGJvb2wgaW50ZXJydXB0aWJsZSk7CitpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2luaXRfcmluZ2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotaW50IGk5MTVfZ2VtX2RvX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCk7Ci1pbnQgaTkxNV9ncHVfaWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLWludCBpOTE1X2dlbV9pZGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotdWludDMyX3QgaTkxNV9hZGRfcmVxdWVzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKLQkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0LAotCQkJICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOwotaW50IGk5MTVfZG9fd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgdWludDMyX3Qgc2Vxbm8sCi0JCQkgYm9vbCBpbnRlcnJ1cHRpYmxlLAotCQkJIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyk7Cit2b2lkIGk5MTVfZ2VtX2RvX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBtYXBwYWJsZV9lbmQsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2ludCBfX211c3RfY2hlY2sgaTkxNV9ncHVfaWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBfX211c3RfY2hlY2sgaTkxNV9nZW1faWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBfX211c3RfY2hlY2sgaTkxNV9hZGRfcmVxdWVzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QsCisJCQkJICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOworaW50IF9fbXVzdF9jaGVjayBpOTE1X2RvX3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICAgIHVpbnQzMl90IHNlcW5vLAorCQkJCSAgICAgIGJvb2wgaW50ZXJydXB0aWJsZSwKKwkJCQkgICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOwogaW50IGk5MTVfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7Ci1pbnQgaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAotCQkJCSAgICAgIGludCB3cml0ZSk7Ci1pbnQgaTkxNV9nZW1fb2JqZWN0X3NldF90b19kaXNwbGF5X3BsYW5lKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAotCQkJCQkgYm9vbCBwaXBlbGluZWQpOworaW50IF9fbXVzdF9jaGVjaworaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICBib29sIHdyaXRlKTsKK2ludCBfX211c3RfY2hlY2sKK2k5MTVfZ2VtX29iamVjdF9zZXRfdG9fZGlzcGxheV9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCSAgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpwaXBlbGluZWQpOwogaW50IGk5MTVfZ2VtX2F0dGFjaF9waHlzX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJaW50IGlkLAogCQkJCWludCBhbGlnbik7CiB2b2lkIGk5MTVfZ2VtX2RldGFjaF9waHlzX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CisJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwogdm9pZCBpOTE1X2dlbV9mcmVlX2FsbF9waHlzX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLXZvaWQgaTkxNV9nZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwordm9pZCBpOTE1X2dlbV9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7CiAKLXZvaWQgaTkxNV9nZW1fc2hyaW5rZXJfaW5pdCh2b2lkKTsKLXZvaWQgaTkxNV9nZW1fc2hyaW5rZXJfZXhpdCh2b2lkKTsKKy8qIGk5MTVfZ2VtX2d0dC5jICovCit2b2lkIGk5MTVfZ2VtX3Jlc3RvcmVfZ3R0X21hcHBpbmdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9ndHRfYmluZF9vYmplY3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cit2b2lkIGk5MTVfZ2VtX2d0dF91bmJpbmRfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwogCiAvKiBpOTE1X2dlbV9ldmljdC5jICovCi1pbnQgaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBtaW5fc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KTsKLWludCBpOTE1X2dlbV9ldmljdF9ldmVyeXRoaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotaW50IGk5MTVfZ2VtX2V2aWN0X2luYWN0aXZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG1pbl9zaXplLAorCQkJCQkgIHVuc2lnbmVkIGFsaWdubWVudCwgYm9vbCBtYXBwYWJsZSk7CitpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2V2aWN0X2V2ZXJ5dGhpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgYm9vbCBwdXJnZWFibGVfb25seSk7CitpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2V2aWN0X2luYWN0aXZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSBib29sIHB1cmdlYWJsZV9vbmx5KTsKIAogLyogaTkxNV9nZW1fdGlsaW5nLmMgKi8KIHZvaWQgaTkxNV9nZW1fZGV0ZWN0X2JpdF82X3N3aXp6bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci12b2lkIGk5MTVfZ2VtX29iamVjdF9kb19iaXRfMTdfc3dpenpsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Ci12b2lkIGk5MTVfZ2VtX29iamVjdF9zYXZlX2JpdF8xN19zd2l6emxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKLWJvb2wgaTkxNV90aWxpbmdfb2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHN0cmlkZSwgaW50IHNpemUsCi0JCSAgICBpbnQgdGlsaW5nX21vZGUpOwotYm9vbCBpOTE1X2dlbV9vYmplY3RfZmVuY2Vfb2Zmc2V0X29rKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAotCQkJCSAgICAgaW50IHRpbGluZ19tb2RlKTsKK3ZvaWQgaTkxNV9nZW1fb2JqZWN0X2RvX2JpdF8xN19zd2l6emxlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCBpOTE1X2dlbV9vYmplY3Rfc2F2ZV9iaXRfMTdfc3dpenpsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIAogLyogaTkxNV9nZW1fZGVidWcuYyAqLwotdm9pZCBpOTE1X2dlbV9kdW1wX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGxlbiwKK3ZvaWQgaTkxNV9nZW1fZHVtcF9vYmplY3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgaW50IGxlbiwKIAkJCSAgY29uc3QgY2hhciAqd2hlcmUsIHVpbnQzMl90IG1hcmspOwogI2lmIFdBVENIX0xJU1RTCiBpbnQgaTkxNV92ZXJpZnlfbGlzdHMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAjZWxzZQogI2RlZmluZSBpOTE1X3ZlcmlmeV9saXN0cyhkZXYpIDAKICNlbmRpZgotdm9pZCBpOTE1X2dlbV9vYmplY3RfY2hlY2tfY29oZXJlbmN5KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgaGFuZGxlKTsKLXZvaWQgaTkxNV9nZW1fZHVtcF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBsZW4sCit2b2lkIGk5MTVfZ2VtX29iamVjdF9jaGVja19jb2hlcmVuY3koc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgICAgIGludCBoYW5kbGUpOwordm9pZCBpOTE1X2dlbV9kdW1wX29iamVjdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBpbnQgbGVuLAogCQkJICBjb25zdCBjaGFyICp3aGVyZSwgdWludDMyX3QgbWFyayk7CiAKIC8qIGk5MTVfZGVidWdmcy5jICovCkBAIC0xMTYzLDYgKzEyNjIsOCBAQAogZXh0ZXJuIHZvaWQgaW50ZWxfZW5hYmxlX2ZiYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwpOwogZXh0ZXJuIGJvb2wgaW50ZWxfZmJjX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gYm9vbCBpcm9ubGFrZV9zZXRfZHJwcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1OCB2YWwpOworZXh0ZXJuIHZvaWQgaXJvbmxha2VfZW5hYmxlX3JjNihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGdlbjZfc2V0X3JwcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1OCB2YWwpOwogZXh0ZXJuIHZvaWQgaW50ZWxfZGV0ZWN0X3BjaCAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGludGVsX3RyYW5zX2RwX3BvcnRfc2VsIChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogCkBAIC0xMTcwLDc5ICsxMjcxLDEyMCBAQAogI2lmZGVmIENPTkZJR19ERUJVR19GUwogZXh0ZXJuIHN0cnVjdCBpbnRlbF9vdmVybGF5X2Vycm9yX3N0YXRlICppbnRlbF9vdmVybGF5X2NhcHR1cmVfZXJyb3Jfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBpbnRlbF9vdmVybGF5X3ByaW50X2Vycm9yX3N0YXRlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGludGVsX292ZXJsYXlfZXJyb3Jfc3RhdGUgKmVycm9yKTsKKworZXh0ZXJuIHN0cnVjdCBpbnRlbF9kaXNwbGF5X2Vycm9yX3N0YXRlICppbnRlbF9kaXNwbGF5X2NhcHR1cmVfZXJyb3Jfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpbnRlbF9kaXNwbGF5X3ByaW50X2Vycm9yX3N0YXRlKHN0cnVjdCBzZXFfZmlsZSAqbSwKKwkJCQkJICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAgICBzdHJ1Y3QgaW50ZWxfZGlzcGxheV9lcnJvcl9zdGF0ZSAqZXJyb3IpOwogI2VuZGlmCiAKKyNkZWZpbmUgTFBfUklORyhkKSAoJigoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKikoZCkpLT5yaW5nW1JDU10pCisKKyNkZWZpbmUgQkVHSU5fTFBfUklORyhuKSBcCisJaW50ZWxfcmluZ19iZWdpbihMUF9SSU5HKGRldl9wcml2KSwgKG4pKQorCisjZGVmaW5lIE9VVF9SSU5HKHgpIFwKKwlpbnRlbF9yaW5nX2VtaXQoTFBfUklORyhkZXZfcHJpdiksIHgpCisKKyNkZWZpbmUgQURWQU5DRV9MUF9SSU5HKCkgXAorCWludGVsX3JpbmdfYWR2YW5jZShMUF9SSU5HKGRldl9wcml2KSkKKwogLyoqCiAgKiBMb2NrIHRlc3QgZm9yIHdoZW4gaXQncyBqdXN0IGZvciBzeW5jaHJvbml6YXRpb24gb2YgcmluZyBhY2Nlc3MuCiAgKgogICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGl0IHdoZW4gR0VNIGlzIGluaXRpYWxpemVkIGFzIG5vYm9keSBlbHNlCiAgKiBoYXMgYWNjZXNzIHRvIHRoZSByaW5nLgogICovCi0jZGVmaW5lIFJJTkdfTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KSBkbyB7CQkJXAotCWlmICgoKGRybV9pOTE1X3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGUpLT5yZW5kZXJfcmluZy5nZW1fb2JqZWN0IFwKLQkJCT09IE5VTEwpCQkJCQlcCi0JCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CQkJXAorI2RlZmluZSBSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGUpIGRvIHsJCQlcCisJaWYgKExQX1JJTkcoZGV2LT5kZXZfcHJpdmF0ZSktPm9iaiA9PSBOVUxMKQkJCVwKKwkJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZSk7CQkJXAogfSB3aGlsZSAoMCkKIAotc3RhdGljIGlubGluZSB1MzIgaTkxNV9yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJlZykKKworI2RlZmluZSBfX2k5MTVfcmVhZCh4LCB5KSBcCitzdGF0aWMgaW5saW5lIHUjI3ggaTkxNV9yZWFkIyN4KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJlZykgeyBcCisJdSMjeCB2YWwgPSByZWFkIyN5KGRldl9wcml2LT5yZWdzICsgcmVnKTsgXAorCXRyYWNlX2k5MTVfcmVnX3J3KCdSJywgcmVnLCB2YWwsIHNpemVvZih2YWwpKTsgXAorCXJldHVybiB2YWw7IFwKK30KK19faTkxNV9yZWFkKDgsIGIpCitfX2k5MTVfcmVhZCgxNiwgdykKK19faTkxNV9yZWFkKDMyLCBsKQorX19pOTE1X3JlYWQoNjQsIHEpCisjdW5kZWYgX19pOTE1X3JlYWQKKworI2RlZmluZSBfX2k5MTVfd3JpdGUoeCwgeSkgXAorc3RhdGljIGlubGluZSB2b2lkIGk5MTVfd3JpdGUjI3goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcmVnLCB1IyN4IHZhbCkgeyBcCisJdHJhY2VfaTkxNV9yZWdfcncoJ1cnLCByZWcsIHZhbCwgc2l6ZW9mKHZhbCkpOyBcCisJd3JpdGUjI3kodmFsLCBkZXZfcHJpdi0+cmVncyArIHJlZyk7IFwKK30KK19faTkxNV93cml0ZSg4LCBiKQorX19pOTE1X3dyaXRlKDE2LCB3KQorX19pOTE1X3dyaXRlKDMyLCBsKQorX19pOTE1X3dyaXRlKDY0LCBxKQorI3VuZGVmIF9faTkxNV93cml0ZQorCisjZGVmaW5lIEk5MTVfUkVBRDgocmVnKQkJaTkxNV9yZWFkOChkZXZfcHJpdiwgKHJlZykpCisjZGVmaW5lIEk5MTVfV1JJVEU4KHJlZywgdmFsKQlpOTE1X3dyaXRlOChkZXZfcHJpdiwgKHJlZyksICh2YWwpKQorCisjZGVmaW5lIEk5MTVfUkVBRDE2KHJlZykJaTkxNV9yZWFkMTYoZGV2X3ByaXYsIChyZWcpKQorI2RlZmluZSBJOTE1X1dSSVRFMTYocmVnLCB2YWwpCWk5MTVfd3JpdGUxNihkZXZfcHJpdiwgKHJlZyksICh2YWwpKQorI2RlZmluZSBJOTE1X1JFQUQxNl9OT1RSQUNFKHJlZykJcmVhZHcoZGV2X3ByaXYtPnJlZ3MgKyAocmVnKSkKKyNkZWZpbmUgSTkxNV9XUklURTE2X05PVFJBQ0UocmVnLCB2YWwpCXdyaXRldyh2YWwsIGRldl9wcml2LT5yZWdzICsgKHJlZykpCisKKyNkZWZpbmUgSTkxNV9SRUFEKHJlZykJCWk5MTVfcmVhZDMyKGRldl9wcml2LCAocmVnKSkKKyNkZWZpbmUgSTkxNV9XUklURShyZWcsIHZhbCkJaTkxNV93cml0ZTMyKGRldl9wcml2LCAocmVnKSwgKHZhbCkpCisjZGVmaW5lIEk5MTVfUkVBRF9OT1RSQUNFKHJlZykJCXJlYWRsKGRldl9wcml2LT5yZWdzICsgKHJlZykpCisjZGVmaW5lIEk5MTVfV1JJVEVfTk9UUkFDRShyZWcsIHZhbCkJd3JpdGVsKHZhbCwgZGV2X3ByaXYtPnJlZ3MgKyAocmVnKSkKKworI2RlZmluZSBJOTE1X1dSSVRFNjQocmVnLCB2YWwpCWk5MTVfd3JpdGU2NChkZXZfcHJpdiwgKHJlZyksICh2YWwpKQorI2RlZmluZSBJOTE1X1JFQUQ2NChyZWcpCWk5MTVfcmVhZDY0KGRldl9wcml2LCAocmVnKSkKKworI2RlZmluZSBQT1NUSU5HX1JFQUQocmVnKQkodm9pZClJOTE1X1JFQURfTk9UUkFDRShyZWcpCisjZGVmaW5lIFBPU1RJTkdfUkVBRDE2KHJlZykJKHZvaWQpSTkxNV9SRUFEMTZfTk9UUkFDRShyZWcpCisKKworLyogT24gU05CIHBsYXRmb3JtLCBiZWZvcmUgcmVhZGluZyByaW5nIHJlZ2lzdGVycyBmb3JjZXdha2UgYml0CisgKiBtdXN0IGJlIHNldCB0byBwcmV2ZW50IEdUIGNvcmUgZnJvbSBwb3dlciBkb3duIGFuZCBzdGFsZSB2YWx1ZXMgYmVpbmcKKyAqIHJldHVybmVkLgorICovCit2b2lkIF9fZ2VuNl9mb3JjZV93YWtlX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwordm9pZCBfX2dlbjZfZm9yY2Vfd2FrZV9wdXQgKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CitzdGF0aWMgaW5saW5lIHUzMiBpOTE1X3NhZmVfcmVhZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiByZWcpCiB7CiAJdTMyIHZhbDsKIAotCXZhbCA9IHJlYWRsKGRldl9wcml2LT5yZWdzICsgcmVnKTsKLQlpZiAoZGV2X3ByaXYtPmRlYnVnX2ZsYWdzICYgSTkxNV9ERUJVR19SRUFEKQotCQlwcmludGsoS0VSTl9FUlIgInJlYWQgMHglMDh4IGZyb20gMHglMDh4XG4iLCB2YWwsIHJlZyk7CisJaWYgKGRldl9wcml2LT5pbmZvLT5nZW4gPj0gNikgeworCQlfX2dlbjZfZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYpOworCQl2YWwgPSBJOTE1X1JFQUQocmVnKTsKKwkJX19nZW42X2ZvcmNlX3dha2VfcHV0KGRldl9wcml2KTsKKwl9IGVsc2UKKwkJdmFsID0gSTkxNV9SRUFEKHJlZyk7CisKIAlyZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaTkxNV93cml0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiByZWcsCi0JCQkgICAgICB1MzIgdmFsKQorc3RhdGljIGlubGluZSB2b2lkCitpOTE1X3dyaXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJlZywgdTY0IHZhbCwgaW50IGxlbikKIHsKLQl3cml0ZWwodmFsLCBkZXZfcHJpdi0+cmVncyArIHJlZyk7Ci0JaWYgKGRldl9wcml2LT5kZWJ1Z19mbGFncyAmIEk5MTVfREVCVUdfV1JJVEUpCi0JCXByaW50ayhLRVJOX0VSUiAid3JvdGUgMHglMDh4IHRvIDB4JTA4eFxuIiwgdmFsLCByZWcpOworICAgICAgIC8qIFRyYWNlIGRvd24gdGhlIHdyaXRlIG9wZXJhdGlvbiBiZWZvcmUgdGhlIHJlYWwgd3JpdGUgKi8KKyAgICAgICB0cmFjZV9pOTE1X3JlZ19ydygnVycsIHJlZywgdmFsLCBsZW4pOworICAgICAgIHN3aXRjaCAobGVuKSB7CisgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgICAgd3JpdGVxKHZhbCwgZGV2X3ByaXYtPnJlZ3MgKyByZWcpOworICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgd3JpdGVsKHZhbCwgZGV2X3ByaXYtPnJlZ3MgKyByZWcpOworICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgd3JpdGV3KHZhbCwgZGV2X3ByaXYtPnJlZ3MgKyByZWcpOworICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgd3JpdGViKHZhbCwgZGV2X3ByaXYtPnJlZ3MgKyByZWcpOworICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgfQogfQogCi0jZGVmaW5lIEk5MTVfUkVBRChyZWcpICAgICAgICAgIGk5MTVfcmVhZChkZXZfcHJpdiwgKHJlZykpCi0jZGVmaW5lIEk5MTVfV1JJVEUocmVnLCB2YWwpICAgIGk5MTVfd3JpdGUoZGV2X3ByaXYsIChyZWcpLCAodmFsKSkKLSNkZWZpbmUgSTkxNV9SRUFEMTYocmVnKQlyZWFkdyhkZXZfcHJpdi0+cmVncyArIChyZWcpKQotI2RlZmluZSBJOTE1X1dSSVRFMTYocmVnLCB2YWwpCXdyaXRlbCh2YWwsIGRldl9wcml2LT5yZWdzICsgKHJlZykpCi0jZGVmaW5lIEk5MTVfUkVBRDgocmVnKQkJcmVhZGIoZGV2X3ByaXYtPnJlZ3MgKyAocmVnKSkKLSNkZWZpbmUgSTkxNV9XUklURTgocmVnLCB2YWwpCXdyaXRlYih2YWwsIGRldl9wcml2LT5yZWdzICsgKHJlZykpCi0jZGVmaW5lIEk5MTVfV1JJVEU2NChyZWcsIHZhbCkJd3JpdGVxKHZhbCwgZGV2X3ByaXYtPnJlZ3MgKyAocmVnKSkKLSNkZWZpbmUgSTkxNV9SRUFENjQocmVnKQlyZWFkcShkZXZfcHJpdi0+cmVncyArIChyZWcpKQotI2RlZmluZSBQT1NUSU5HX1JFQUQocmVnKQkodm9pZClJOTE1X1JFQUQocmVnKQotI2RlZmluZSBQT1NUSU5HX1JFQUQxNihyZWcpCSh2b2lkKUk5MTVfUkVBRDE2KHJlZykKLQotI2RlZmluZSBJOTE1X0RFQlVHX0VOQUJMRV9JTygpIChkZXZfcHJpdi0+ZGVidWdfZmxhZ3MgfD0gSTkxNV9ERUJVR19SRUFEIHwgXAotCQkJCUk5MTVfREVCVUdfV1JJVEUpCi0jZGVmaW5lIEk5MTVfREVCVUdfRElTQUJMRV9JTygpIChkZXZfcHJpdi0+ZGVidWdfZmxhZ3MgJj0gfihJOTE1X0RFQlVHX1JFQUQgfCBcCi0JCQkJCQkJICAgIEk5MTVfREVCVUdfV1JJVEUpKQotCi0jZGVmaW5lIEk5MTVfVkVSQk9TRSAwCi0KLSNkZWZpbmUgQkVHSU5fTFBfUklORyhuKSAgZG8geyBcCi0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdl9fID0gZGV2LT5kZXZfcHJpdmF0ZTsgICAgICAgICAgICAgICAgXAotCWlmIChJOTE1X1ZFUkJPU0UpCQkJCQkJXAotCQlEUk1fREVCVUcoIiAgIEJFR0lOX0xQX1JJTkcgJXhcbiIsIChpbnQpKG4pKTsJCVwKLQlpbnRlbF9yaW5nX2JlZ2luKGRldiwgJmRldl9wcml2X18tPnJlbmRlcl9yaW5nLCAobikpOwkJXAotfSB3aGlsZSAoMCkKLQotCi0jZGVmaW5lIE9VVF9SSU5HKHgpIGRvIHsJCQkJCQlcCi0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdl9fID0gZGV2LT5kZXZfcHJpdmF0ZTsJCVwKLQlpZiAoSTkxNV9WRVJCT1NFKQkJCQkJCVwKLQkJRFJNX0RFQlVHKCIgICBPVVRfUklORyAleFxuIiwgKGludCkoeCkpOwkJXAotCWludGVsX3JpbmdfZW1pdChkZXYsICZkZXZfcHJpdl9fLT5yZW5kZXJfcmluZywgeCk7CQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIEFEVkFOQ0VfTFBfUklORygpIGRvIHsJCQkJCQlcCi0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdl9fID0gZGV2LT5kZXZfcHJpdmF0ZTsgICAgICAgICAgICAgICAgXAotCWlmIChJOTE1X1ZFUkJPU0UpCQkJCQkJXAotCQlEUk1fREVCVUcoIkFEVkFOQ0VfTFBfUklORyAleFxuIiwJCQlcCi0JCQkJZGV2X3ByaXZfXy0+cmVuZGVyX3JpbmcudGFpbCk7CQlcCi0JaW50ZWxfcmluZ19hZHZhbmNlKGRldiwgJmRldl9wcml2X18tPnJlbmRlcl9yaW5nKTsJCVwKLX0gd2hpbGUoMCkKLQogLyoqCiAgKiBSZWFkcyBhIGR3b3JkIG91dCBvZiB0aGUgc3RhdHVzIHBhZ2UsIHdoaWNoIGlzIHdyaXR0ZW4gdG8gZnJvbSB0aGUgY29tbWFuZAogICogcXVldWUgYnkgYXV0b21hdGljIHVwZGF0ZXMsIE1JX1JFUE9SVF9IRUFELCBNSV9TVE9SRV9EQVRBX0lOREVYLCBvcgpAQCAtMTI1OSw3MiArMTQwMSw5IEBACiAgKiBUaGUgYXJlYSBmcm9tIGR3b3JkIDB4MjAgdG8gMHgzZmYgaXMgYXZhaWxhYmxlIGZvciBkcml2ZXIgdXNhZ2UuCiAgKi8KICNkZWZpbmUgUkVBRF9IV1NQKGRldl9wcml2LCByZWcpICAoKCh2b2xhdGlsZSB1MzIgKilcCi0JCQkoZGV2X3ByaXYtPnJlbmRlcl9yaW5nLnN0YXR1c19wYWdlLnBhZ2VfYWRkcikpW3JlZ10pCisJCQkoTFBfUklORyhkZXZfcHJpdiktPnN0YXR1c19wYWdlLnBhZ2VfYWRkcikpW3JlZ10pCiAjZGVmaW5lIFJFQURfQlJFQURDUlVNQihkZXZfcHJpdikgUkVBRF9IV1NQKGRldl9wcml2LCBJOTE1X0JSRUFEQ1JVTUJfSU5ERVgpCiAjZGVmaW5lIEk5MTVfR0VNX0hXU19JTkRFWAkJMHgyMAogI2RlZmluZSBJOTE1X0JSRUFEQ1JVTUJfSU5ERVgJCTB4MjEKIAotI2RlZmluZSBJTlRFTF9JTkZPKGRldikJKCgoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKikgKGRldiktPmRldl9wcml2YXRlKS0+aW5mbykKLQotI2RlZmluZSBJU19JODMwKGRldikJCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDM1NzcpCi0jZGVmaW5lIElTXzg0NUcoZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU2MikKLSNkZWZpbmUgSVNfSTg1WChkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5pc19pODV4KQotI2RlZmluZSBJU19JODY1RyhkZXYpCQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyNTcyKQotI2RlZmluZSBJU19JOTE1RyhkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5pc19pOTE1ZykKLSNkZWZpbmUgSVNfSTkxNUdNKGRldikJCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI1OTIpCi0jZGVmaW5lIElTX0k5NDVHKGRldikJCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI3NzIpCi0jZGVmaW5lIElTX0k5NDVHTShkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5pc19pOTQ1Z20pCi0jZGVmaW5lIElTX0JST0FEV0FURVIoZGV2KQkoSU5URUxfSU5GTyhkZXYpLT5pc19icm9hZHdhdGVyKQotI2RlZmluZSBJU19DUkVTVExJTkUoZGV2KQkoSU5URUxfSU5GTyhkZXYpLT5pc19jcmVzdGxpbmUpCi0jZGVmaW5lIElTX0dNNDUoZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkE0MikKLSNkZWZpbmUgSVNfRzRYKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2c0eCkKLSNkZWZpbmUgSVNfUElORVZJRVdfRyhkZXYpCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweGEwMDEpCi0jZGVmaW5lIElTX1BJTkVWSUVXX00oZGV2KQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHhhMDExKQotI2RlZmluZSBJU19QSU5FVklFVyhkZXYpCShJTlRFTF9JTkZPKGRldiktPmlzX3BpbmV2aWV3KQotI2RlZmluZSBJU19HMzMoZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+aXNfZzMzKQotI2RlZmluZSBJU19JUk9OTEFLRV9EKGRldikJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MDA0MikKLSNkZWZpbmUgSVNfSVJPTkxBS0VfTShkZXYpCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDAwNDYpCi0jZGVmaW5lIElTX01PQklMRShkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5pc19tb2JpbGUpCi0KLSNkZWZpbmUgSVNfR0VOMihkZXYpCShJTlRFTF9JTkZPKGRldiktPmdlbiA9PSAyKQotI2RlZmluZSBJU19HRU4zKGRldikJKElOVEVMX0lORk8oZGV2KS0+Z2VuID09IDMpCi0jZGVmaW5lIElTX0dFTjQoZGV2KQkoSU5URUxfSU5GTyhkZXYpLT5nZW4gPT0gNCkKLSNkZWZpbmUgSVNfR0VONShkZXYpCShJTlRFTF9JTkZPKGRldiktPmdlbiA9PSA1KQotI2RlZmluZSBJU19HRU42KGRldikJKElOVEVMX0lORk8oZGV2KS0+Z2VuID09IDYpCi0KLSNkZWZpbmUgSEFTX0JTRChkZXYpICAgICAgICAgICAgKElOVEVMX0lORk8oZGV2KS0+aGFzX2JzZF9yaW5nKQotI2RlZmluZSBIQVNfQkxUKGRldikgICAgICAgICAgICAoSU5URUxfSU5GTyhkZXYpLT5oYXNfYmx0X3JpbmcpCi0jZGVmaW5lIEk5MTVfTkVFRF9HRlhfSFdTKGRldikJKElOVEVMX0lORk8oZGV2KS0+bmVlZF9nZnhfaHdzKQotCi0jZGVmaW5lIEhBU19PVkVSTEFZKGRldikgCQkoSU5URUxfSU5GTyhkZXYpLT5oYXNfb3ZlcmxheSkKLSNkZWZpbmUgT1ZFUkxBWV9ORUVEU19QSFlTSUNBTChkZXYpCShJTlRFTF9JTkZPKGRldiktPm92ZXJsYXlfbmVlZHNfcGh5c2ljYWwpCi0KLS8qIFdpdGggdGhlIDk0NSBhbmQgbGF0ZXIsIFkgdGlsaW5nIGdvdCBhZGp1c3RlZCBzbyB0aGF0IGl0IHdhcyAzMiAxMjgtYnl0ZQotICogcm93cywgd2hpY2ggY2hhbmdlZCB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBhbmQgZmVuY2UgcHJvZ3JhbW1pbmcuCi0gKi8KLSNkZWZpbmUgSEFTXzEyOF9CWVRFX1lfVElMSU5HKGRldikgKCFJU19HRU4yKGRldikgJiYgIShJU19JOTE1RyhkZXYpIHx8IFwKLQkJCQkJCSAgICAgIElTX0k5MTVHTShkZXYpKSkKLSNkZWZpbmUgU1VQUE9SVFNfRElHSVRBTF9PVVRQVVRTKGRldikJKCFJU19HRU4yKGRldikgJiYgIUlTX1BJTkVWSUVXKGRldikpCi0jZGVmaW5lIFNVUFBPUlRTX0lOVEVHUkFURURfSERNSShkZXYpCShJU19HNFgoZGV2KSB8fCBJU19HRU41KGRldikpCi0jZGVmaW5lIFNVUFBPUlRTX0lOVEVHUkFURURfRFAoZGV2KQkoSVNfRzRYKGRldikgfHwgSVNfR0VONShkZXYpKQotI2RlZmluZSBTVVBQT1JUU19FRFAoZGV2KQkJKElTX0lST05MQUtFX00oZGV2KSkKLSNkZWZpbmUgU1VQUE9SVFNfVFYoZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+c3VwcG9ydHNfdHYpCi0jZGVmaW5lIEk5MTVfSEFTX0hPVFBMVUcoZGV2KQkJIChJTlRFTF9JTkZPKGRldiktPmhhc19ob3RwbHVnKQotLyogZHNwYXJiIGNvbnRyb2xsZWQgYnkgaHcgb25seSAqLwotI2RlZmluZSBEU1BBUkJfSFdDT05UUk9MKGRldikgKElTX0c0WChkZXYpIHx8IElTX0lST05MQUtFKGRldikpCi0KLSNkZWZpbmUgSEFTX0ZXX0JMQyhkZXYpIChJTlRFTF9JTkZPKGRldiktPmdlbiA+IDIpCi0jZGVmaW5lIEhBU19QSVBFX0NYU1IoZGV2KSAoSU5URUxfSU5GTyhkZXYpLT5oYXNfcGlwZV9jeHNyKQotI2RlZmluZSBJOTE1X0hBU19GQkMoZGV2KSAoSU5URUxfSU5GTyhkZXYpLT5oYXNfZmJjKQotI2RlZmluZSBJOTE1X0hBU19SQzYoZGV2KSAoSU5URUxfSU5GTyhkZXYpLT5oYXNfcmM2KQotCi0jZGVmaW5lIEhBU19QQ0hfU1BMSVQoZGV2KSAoSVNfR0VONShkZXYpIHx8IElTX0dFTjYoZGV2KSkKLSNkZWZpbmUgSEFTX1BJUEVfQ09OVFJPTChkZXYpIChJU19HRU41KGRldikgfHwgSVNfR0VONihkZXYpKQotCi0jZGVmaW5lIElOVEVMX1BDSF9UWVBFKGRldikgKCgoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKikoZGV2KS0+ZGV2X3ByaXZhdGUpLT5wY2hfdHlwZSkKLSNkZWZpbmUgSEFTX1BDSF9DUFQoZGV2KSAoSU5URUxfUENIX1RZUEUoZGV2KSA9PSBQQ0hfQ1BUKQotI2RlZmluZSBIQVNfUENIX0lCWChkZXYpIChJTlRFTF9QQ0hfVFlQRShkZXYpID09IFBDSF9JQlgpCi0KLSNkZWZpbmUgUFJJTUFSWV9SSU5HQlVGRkVSX1NJWkUgICAgICAgICAoMTI4KjEwMjQpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggMjc1ZWM2ZS4uM2RmYzg0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0zNCwzOCArMzQsMzEgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVsLWd0dC5oPgogCi1zdGF0aWMgdWludDMyX3QgaTkxNV9nZW1fZ2V0X2d0dF9hbGlnbm1lbnQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwotCi1zdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHVfd3JpdGVfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9ndHRfd3JpdGVfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9jcHVfd3JpdGVfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKLXN0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAotCQkJCQkgICAgIGludCB3cml0ZSk7Ci1zdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9zZXRfY3B1X3JlYWRfZG9tYWluX3JhbmdlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAotCQkJCQkJICAgICB1aW50NjRfdCBvZmZzZXQsCi0JCQkJCQkgICAgIHVpbnQ2NF90IHNpemUpOwotc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3NldF90b19mdWxsX2NwdV9yZWFkX2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Ci1zdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKLQkJCQkJICBib29sIGludGVycnVwdGlibGUpOwotc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfYmluZF90b19ndHQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJCSAgIHVuc2lnbmVkIGFsaWdubWVudCk7Ci1zdGF0aWMgdm9pZCBpOTE1X2dlbV9jbGVhcl9mZW5jZV9yZWcoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwotc3RhdGljIGludCBpOTE1X2dlbV9waHlzX3B3cml0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKK3N0YXRpYyBfX211c3RfY2hlY2sgaW50IGk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHVfd3JpdGVfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOworc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2d0dF93cml0ZV9kb21haW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CitzdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfZmx1c2hfY3B1X3dyaXRlX2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKK3N0YXRpYyBfX211c3RfY2hlY2sgaW50IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCQkJCSAgYm9vbCB3cml0ZSk7CitzdGF0aWMgX19tdXN0X2NoZWNrIGludCBpOTE1X2dlbV9vYmplY3Rfc2V0X2NwdV9yZWFkX2RvbWFpbl9yYW5nZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCQkJCQkgIHVpbnQ2NF90IG9mZnNldCwKKwkJCQkJCQkJICB1aW50NjRfdCBzaXplKTsKK3N0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZnVsbF9jcHVfcmVhZF9kb21haW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CitzdGF0aWMgX19tdXN0X2NoZWNrIGludCBpOTE1X2dlbV9vYmplY3RfYmluZF90b19ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkJCSAgICB1bnNpZ25lZCBhbGlnbm1lbnQsCisJCQkJCQkgICAgYm9vbCBtYXBfYW5kX2ZlbmNlYWJsZSk7CitzdGF0aWMgdm9pZCBpOTE1X2dlbV9jbGVhcl9mZW5jZV9yZWcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKnJlZyk7CitzdGF0aWMgaW50IGk5MTVfZ2VtX3BoeXNfcHdyaXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncywKLQkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Ci1zdGF0aWMgdm9pZCBpOTE1X2dlbV9mcmVlX29iamVjdF90YWlsKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKKwkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOworc3RhdGljIHZvaWQgaTkxNV9nZW1fZnJlZV9vYmplY3RfdGFpbChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIAotc3RhdGljIGludAotaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKLQkJCSAgZ2ZwX3QgZ2ZwbWFzayk7CitzdGF0aWMgaW50IGk5MTVfZ2VtX2luYWN0aXZlX3NocmluayhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLAorCQkJCSAgICBpbnQgbnJfdG9fc2NhbiwKKwkJCQkgICAgZ2ZwX3QgZ2ZwX21hc2spOwogCi1zdGF0aWMgdm9pZAotaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Ci0KLXN0YXRpYyBMSVNUX0hFQUQoc2hyaW5rX2xpc3QpOwotc3RhdGljIERFRklORV9TUElOTE9DSyhzaHJpbmtfbGlzdF9sb2NrKTsKIAogLyogc29tZSBib29ra2VlcGluZyAqLwogc3RhdGljIHZvaWQgaTkxNV9nZW1faW5mb19hZGRfb2JqKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKQEAgLTgyLDM0ICs3NSw2IEBACiAJZGV2X3ByaXYtPm1tLm9iamVjdF9tZW1vcnkgLT0gc2l6ZTsKIH0KIAotc3RhdGljIHZvaWQgaTkxNV9nZW1faW5mb19hZGRfZ3R0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkgIHNpemVfdCBzaXplKQotewotCWRldl9wcml2LT5tbS5ndHRfY291bnQrKzsKLQlkZXZfcHJpdi0+bW0uZ3R0X21lbW9yeSArPSBzaXplOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X2dlbV9pbmZvX3JlbW92ZV9ndHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSAgICAgc2l6ZV90IHNpemUpCi17Ci0JZGV2X3ByaXYtPm1tLmd0dF9jb3VudC0tOwotCWRldl9wcml2LT5tbS5ndHRfbWVtb3J5IC09IHNpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX2luZm9fYWRkX3BpbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJICBzaXplX3Qgc2l6ZSkKLXsKLQlkZXZfcHJpdi0+bW0ucGluX2NvdW50Kys7Ci0JZGV2X3ByaXYtPm1tLnBpbl9tZW1vcnkgKz0gc2l6ZTsKLX0KLQotc3RhdGljIHZvaWQgaTkxNV9nZW1faW5mb19yZW1vdmVfcGluKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkgICAgIHNpemVfdCBzaXplKQotewotCWRldl9wcml2LT5tbS5waW5fY291bnQtLTsKLQlkZXZfcHJpdi0+bW0ucGluX21lbW9yeSAtPSBzaXplOwotfQotCiBpbnQKIGk5MTVfZ2VtX2NoZWNrX2lzX3dlZGdlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewpAQCAtMTQwLDcgKzEwNSw3IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKLXN0YXRpYyBpbnQgaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK2ludCBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IHJldDsKQEAgLTE2Myw3NSArMTI4LDc2IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbAotaTkxNV9nZW1fb2JqZWN0X2lzX2luYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdikKK2k5MTVfZ2VtX29iamVjdF9pc19pbmFjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewotCXJldHVybiBvYmpfcHJpdi0+Z3R0X3NwYWNlICYmCi0JCSFvYmpfcHJpdi0+YWN0aXZlICYmCi0JCW9ial9wcml2LT5waW5fY291bnQgPT0gMDsKKwlyZXR1cm4gb2JqLT5ndHRfc3BhY2UgJiYgIW9iai0+YWN0aXZlICYmIG9iai0+cGluX2NvdW50ID09IDA7CiB9CiAKLWludCBpOTE1X2dlbV9kb19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCkKK3ZvaWQgaTkxNV9nZW1fZG9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkgICAgICB1bnNpZ25lZCBsb25nIG1hcHBhYmxlX2VuZCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoc3RhcnQgPj0gZW5kIHx8Ci0JICAgIChzdGFydCAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCB8fAotCSAgICAoZW5kICYgKFBBR0VfU0laRSAtIDEpKSAhPSAwKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWRybV9tbV9pbml0KCZkZXZfcHJpdi0+bW0uZ3R0X3NwYWNlLCBzdGFydCwKIAkJICAgIGVuZCAtIHN0YXJ0KTsKIAogCWRldl9wcml2LT5tbS5ndHRfdG90YWwgPSBlbmQgLSBzdGFydDsKLQotCXJldHVybiAwOworCWRldl9wcml2LT5tbS5tYXBwYWJsZV9ndHRfdG90YWwgPSBtaW4oZW5kLCBtYXBwYWJsZV9lbmQpIC0gc3RhcnQ7CisJZGV2X3ByaXYtPm1tLmd0dF9tYXBwYWJsZV9lbmQgPSBtYXBwYWJsZV9lbmQ7CiB9CiAKIGludAogaTkxNV9nZW1faW5pdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9pbml0ICphcmdzID0gZGF0YTsKLQlpbnQgcmV0OworCisJaWYgKGFyZ3MtPmd0dF9zdGFydCA+PSBhcmdzLT5ndHRfZW5kIHx8CisJICAgIChhcmdzLT5ndHRfZW5kIHwgYXJncy0+Z3R0X3N0YXJ0KSAmIChQQUdFX1NJWkUgLSAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0ID0gaTkxNV9nZW1fZG9faW5pdChkZXYsIGFyZ3MtPmd0dF9zdGFydCwgYXJncy0+Z3R0X2VuZCk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQKLWk5MTVfZ2VtX2dldF9hcGVydHVyZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfYXBlcnR1cmUgKmFyZ3MgPSBkYXRhOwotCi0JaWYgKCEoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlhcmdzLT5hcGVyX3NpemUgPSBkZXZfcHJpdi0+bW0uZ3R0X3RvdGFsOwotCWFyZ3MtPmFwZXJfYXZhaWxhYmxlX3NpemUgPSBhcmdzLT5hcGVyX3NpemUgLSBkZXZfcHJpdi0+bW0ucGluX21lbW9yeTsKKwlpOTE1X2dlbV9kb19pbml0KGRldiwgYXJncy0+Z3R0X3N0YXJ0LCBhcmdzLT5ndHRfZW5kLCBhcmdzLT5ndHRfZW5kKTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAogCXJldHVybiAwOwogfQogCitpbnQKK2k5MTVfZ2VtX2dldF9hcGVydHVyZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZ2V0X2FwZXJ0dXJlICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXNpemVfdCBwaW5uZWQ7CisKKwlpZiAoIShkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkpCisJCXJldHVybiAtRU5PREVWOworCisJcGlubmVkID0gMDsKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZkZXZfcHJpdi0+bW0ucGlubmVkX2xpc3QsIG1tX2xpc3QpCisJCXBpbm5lZCArPSBvYmotPmd0dF9zcGFjZS0+c2l6ZTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWFyZ3MtPmFwZXJfc2l6ZSA9IGRldl9wcml2LT5tbS5ndHRfdG90YWw7CisJYXJncy0+YXBlcl9hdmFpbGFibGVfc2l6ZSA9IGFyZ3MtPmFwZXJfc2l6ZSAtcGlubmVkOworCisJcmV0dXJuIDA7Cit9CiAKIC8qKgogICogQ3JlYXRlcyBhIG5ldyBtbSBvYmplY3QgYW5kIHJldHVybnMgYSBoYW5kbGUgdG8gaXQuCiAgKi8KIGludAogaTkxNV9nZW1fY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQorCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgKmFyZ3MgPSBkYXRhOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJaW50IHJldDsKIAl1MzIgaGFuZGxlOwogCkBAIC0yNDIsNDUgKzIwOCwyOCBAQAogCWlmIChvYmogPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBvYmosICZoYW5kbGUpOworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlLCAmb2JqLT5iYXNlLCAmaGFuZGxlKTsKIAlpZiAocmV0KSB7Ci0JCWRybV9nZW1fb2JqZWN0X3JlbGVhc2Uob2JqKTsKLQkJaTkxNV9nZW1faW5mb19yZW1vdmVfb2JqKGRldi0+ZGV2X3ByaXZhdGUsIG9iai0+c2l6ZSk7CisJCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJm9iai0+YmFzZSk7CisJCWk5MTVfZ2VtX2luZm9fcmVtb3ZlX29iaihkZXYtPmRldl9wcml2YXRlLCBvYmotPmJhc2Uuc2l6ZSk7CiAJCWtmcmVlKG9iaik7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cgKi8KLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9jcmVhdGUob2JqKTsKIAogCWFyZ3MtPmhhbmRsZSA9IGhhbmRsZTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWZhc3Rfc2htZW1fcmVhZChzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAotCQlsb2ZmX3QgcGFnZV9iYXNlLCBpbnQgcGFnZV9vZmZzZXQsCi0JCWNoYXIgX191c2VyICpkYXRhLAotCQlpbnQgbGVuZ3RoKQorc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfbmVlZHNfYml0MTdfc3dpenpsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewotCWNoYXIgKnZhZGRyOwotCWludCByZXQ7Ci0KLQl2YWRkciA9IGttYXBfYXRvbWljKHBhZ2VzW3BhZ2VfYmFzZSA+PiBQQUdFX1NISUZUXSk7Ci0JcmV0ID0gX19jb3B5X3RvX3VzZXJfaW5hdG9taWMoZGF0YSwgdmFkZHIgKyBwYWdlX29mZnNldCwgbGVuZ3RoKTsKLQlrdW5tYXBfYXRvbWljKHZhZGRyKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X25lZWRzX2JpdDE3X3N3aXp6bGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCi17Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBvYmotPmJhc2UuZGV2LT5kZXZfcHJpdmF0ZTsKIAogCXJldHVybiBkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV94ID09IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzE3ICYmCi0JCW9ial9wcml2LT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FOworCQlvYmotPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMzU2LDM4ICszMDUsNTEgQEAKICAqIGZhdWx0LCBpdCBmYWlscyBzbyB3ZSBjYW4gZmFsbCBiYWNrIHRvIGk5MTVfZ2VtX3NobWVtX3B3cml0ZV9zbG93KCkuCiAgKi8KIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX3NobWVtX3ByZWFkX2Zhc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCitpOTE1X2dlbV9zaG1lbV9wcmVhZF9mYXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHJlYWQgKmFyZ3MsCi0JCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQorCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IG9iai0+YmFzZS5maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmc7CiAJc3NpemVfdCByZW1haW47Ci0JbG9mZl90IG9mZnNldCwgcGFnZV9iYXNlOworCWxvZmZfdCBvZmZzZXQ7CiAJY2hhciBfX3VzZXIgKnVzZXJfZGF0YTsKIAlpbnQgcGFnZV9vZmZzZXQsIHBhZ2VfbGVuZ3RoOwogCiAJdXNlcl9kYXRhID0gKGNoYXIgX191c2VyICopICh1aW50cHRyX3QpIGFyZ3MtPmRhdGFfcHRyOwogCXJlbWFpbiA9IGFyZ3MtPnNpemU7CiAKLQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CiAJb2Zmc2V0ID0gYXJncy0+b2Zmc2V0OwogCiAJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCWNoYXIgKnZhZGRyOworCQlpbnQgcmV0OworCiAJCS8qIE9wZXJhdGlvbiBpbiB0aGlzIHBhZ2UKIAkJICoKLQkJICogcGFnZV9iYXNlID0gcGFnZSBvZmZzZXQgd2l0aGluIGFwZXJ0dXJlCiAJCSAqIHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGhpbiBwYWdlCiAJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCiAJCSAqLwotCQlwYWdlX2Jhc2UgPSAob2Zmc2V0ICYgfihQQUdFX1NJWkUtMSkpOwogCQlwYWdlX29mZnNldCA9IG9mZnNldCAmIChQQUdFX1NJWkUtMSk7CiAJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOwogCQlpZiAoKHBhZ2Vfb2Zmc2V0ICsgcmVtYWluKSA+IFBBR0VfU0laRSkKIAkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7CiAKLQkJaWYgKGZhc3Rfc2htZW1fcmVhZChvYmpfcHJpdi0+cGFnZXMsCi0JCQkJICAgIHBhZ2VfYmFzZSwgcGFnZV9vZmZzZXQsCi0JCQkJICAgIHVzZXJfZGF0YSwgcGFnZV9sZW5ndGgpKQorCQlwYWdlID0gcmVhZF9jYWNoZV9wYWdlX2dmcChtYXBwaW5nLCBvZmZzZXQgPj4gUEFHRV9TSElGVCwKKwkJCQkJICAgR0ZQX0hJR0hVU0VSIHwgX19HRlBfUkVDTEFJTUFCTEUpOworCQlpZiAoSVNfRVJSKHBhZ2UpKQorCQkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CisKKwkJdmFkZHIgPSBrbWFwX2F0b21pYyhwYWdlKTsKKwkJcmV0ID0gX19jb3B5X3RvX3VzZXJfaW5hdG9taWModXNlcl9kYXRhLAorCQkJCQkgICAgICB2YWRkciArIHBhZ2Vfb2Zmc2V0LAorCQkJCQkgICAgICBwYWdlX2xlbmd0aCk7CisJCWt1bm1hcF9hdG9taWModmFkZHIpOworCisJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJcmVtYWluIC09IHBhZ2VfbGVuZ3RoOwpAQCAtMzk4LDMwICszNjAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1pOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX29yX2V2aWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaiwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTik7Ci0KLQkvKiBJZiB3ZSd2ZSBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIG1hcCBpbiB0aGUgcGFnZXMsIGF0dGVtcHQKLQkgKiB0byBtYWtlIHNvbWUgc3BhY2UgYnkgdGhyb3dpbmcgb3V0IHNvbWUgb2xkIGJ1ZmZlcnMuCi0JICovCi0JaWYgKHJldCA9PSAtRU5PTUVNKSB7Ci0JCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKLQotCQlyZXQgPSBpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoZGV2LCBvYmotPnNpemUsCi0JCQkJCSAgICAgICBpOTE1X2dlbV9nZXRfZ3R0X2FsaWdubWVudChvYmopKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmosIDApOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KIC8qKgogICogVGhpcyBpcyB0aGUgZmFsbGJhY2sgc2htZW0gcHJlYWQgcGF0aCwgd2hpY2ggYWxsb2NhdGVzIHRlbXBvcmFyeSBzdG9yYWdlCiAgKiBpbiBrZXJuZWwgc3BhY2UgdG8gY29weV90b191c2VyIGludG8gb3V0c2lkZSBvZiB0aGUgc3RydWN0X211dGV4LCBzbyB3ZQpAQCAtNDI5LDE4ICszNjcsMTkgQEAKICAqIGFuZCBub3QgdGFrZSBwYWdlIGZhdWx0cy4KICAqLwogc3RhdGljIGludAotaTkxNV9nZW1fc2htZW1fcHJlYWRfc2xvdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKK2k5MTVfZ2VtX3NobWVtX3ByZWFkX3Nsb3coc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCAqYXJncywKLQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCisJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gb2JqLT5iYXNlLmZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwogCXN0cnVjdCBwYWdlICoqdXNlcl9wYWdlczsKIAlzc2l6ZV90IHJlbWFpbjsKIAlsb2ZmX3Qgb2Zmc2V0LCBwaW5uZWRfcGFnZXMsIGk7CiAJbG9mZl90IGZpcnN0X2RhdGFfcGFnZSwgbGFzdF9kYXRhX3BhZ2UsIG51bV9wYWdlczsKLQlpbnQgc2htZW1fcGFnZV9pbmRleCwgc2htZW1fcGFnZV9vZmZzZXQ7Ci0JaW50IGRhdGFfcGFnZV9pbmRleCwgIGRhdGFfcGFnZV9vZmZzZXQ7CisJaW50IHNobWVtX3BhZ2Vfb2Zmc2V0OworCWludCBkYXRhX3BhZ2VfaW5kZXgsIGRhdGFfcGFnZV9vZmZzZXQ7CiAJaW50IHBhZ2VfbGVuZ3RoOwogCWludCByZXQ7CiAJdWludDY0X3QgZGF0YV9wdHIgPSBhcmdzLT5kYXRhX3B0cjsKQEAgLTQ3OSwxOSArNDE4LDE4IEBACiAKIAlkb19iaXQxN19zd2l6emxpbmcgPSBpOTE1X2dlbV9vYmplY3RfbmVlZHNfYml0MTdfc3dpenpsZShvYmopOwogCi0Jb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwogCW9mZnNldCA9IGFyZ3MtPm9mZnNldDsKIAogCXdoaWxlIChyZW1haW4gPiAwKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCiAJCS8qIE9wZXJhdGlvbiBpbiB0aGlzIHBhZ2UKIAkJICoKLQkJICogc2htZW1fcGFnZV9pbmRleCA9IHBhZ2UgbnVtYmVyIHdpdGhpbiBzaG1lbSBmaWxlCiAJCSAqIHNobWVtX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGhpbiBwYWdlIGluIHNobWVtIGZpbGUKIAkJICogZGF0YV9wYWdlX2luZGV4ID0gcGFnZSBudW1iZXIgaW4gZ2V0X3VzZXJfcGFnZXMgcmV0dXJuCiAJCSAqIGRhdGFfcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aCBkYXRhX3BhZ2VfaW5kZXggcGFnZS4KIAkJICogcGFnZV9sZW5ndGggPSBieXRlcyB0byBjb3B5IGZvciB0aGlzIHBhZ2UKIAkJICovCi0JCXNobWVtX3BhZ2VfaW5kZXggPSBvZmZzZXQgLyBQQUdFX1NJWkU7CiAJCXNobWVtX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgflBBR0VfTUFTSzsKIAkJZGF0YV9wYWdlX2luZGV4ID0gZGF0YV9wdHIgLyBQQUdFX1NJWkUgLSBmaXJzdF9kYXRhX3BhZ2U7CiAJCWRhdGFfcGFnZV9vZmZzZXQgPSBkYXRhX3B0ciAmIH5QQUdFX01BU0s7CkBAIC01MDIsOCArNDQwLDEzIEBACiAJCWlmICgoZGF0YV9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKIAkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gZGF0YV9wYWdlX29mZnNldDsKIAorCQlwYWdlID0gcmVhZF9jYWNoZV9wYWdlX2dmcChtYXBwaW5nLCBvZmZzZXQgPj4gUEFHRV9TSElGVCwKKwkJCQkJICAgR0ZQX0hJR0hVU0VSIHwgX19HRlBfUkVDTEFJTUFCTEUpOworCQlpZiAoSVNfRVJSKHBhZ2UpKQorCQkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CisKIAkJaWYgKGRvX2JpdDE3X3N3aXp6bGluZykgewotCQkJc2xvd19zaG1lbV9iaXQxN19jb3B5KG9ial9wcml2LT5wYWdlc1tzaG1lbV9wYWdlX2luZGV4XSwKKwkJCXNsb3dfc2htZW1fYml0MTdfY29weShwYWdlLAogCQkJCQkgICAgICBzaG1lbV9wYWdlX29mZnNldCwKIAkJCQkJICAgICAgdXNlcl9wYWdlc1tkYXRhX3BhZ2VfaW5kZXhdLAogCQkJCQkgICAgICBkYXRhX3BhZ2Vfb2Zmc2V0LApAQCAtNTEyLDExICs0NTUsMTQgQEAKIAkJfSBlbHNlIHsKIAkJCXNsb3dfc2htZW1fY29weSh1c2VyX3BhZ2VzW2RhdGFfcGFnZV9pbmRleF0sCiAJCQkJCWRhdGFfcGFnZV9vZmZzZXQsCi0JCQkJCW9ial9wcml2LT5wYWdlc1tzaG1lbV9wYWdlX2luZGV4XSwKKwkJCQkJcGFnZSwKIAkJCQkJc2htZW1fcGFnZV9vZmZzZXQsCiAJCQkJCXBhZ2VfbGVuZ3RoKTsKIAkJfQogCisJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCiAJCXJlbWFpbiAtPSBwYWdlX2xlbmd0aDsKIAkJZGF0YV9wdHIgKz0gcGFnZV9sZW5ndGg7CiAJCW9mZnNldCArPSBwYWdlX2xlbmd0aDsKQEAgLTUyNSw2ICs0NzEsNyBAQAogb3V0OgogCWZvciAoaSA9IDA7IGkgPCBwaW5uZWRfcGFnZXM7IGkrKykgewogCQlTZXRQYWdlRGlydHkodXNlcl9wYWdlc1tpXSk7CisJCW1hcmtfcGFnZV9hY2Nlc3NlZCh1c2VyX3BhZ2VzW2ldKTsKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHVzZXJfcGFnZXNbaV0pOwogCX0KIAlkcm1fZnJlZV9sYXJnZSh1c2VyX3BhZ2VzKTsKQEAgLTUzOSwxMSArNDg2LDEwIEBACiAgKi8KIGludAogaTkxNV9nZW1fcHJlYWRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKKwkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCAqYXJncyA9IGRhdGE7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoYXJncy0+c2l6ZSA9PSAwKQpAQCAtNTYzLDM5ICs1MDksMzMgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0Jb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCW9iaiA9IHRvX2ludGVsX2JvKGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUsIGFyZ3MtPmhhbmRsZSkpOwogCWlmIChvYmogPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIHVubG9jazsKIAl9Ci0Jb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwogCiAJLyogQm91bmRzIGNoZWNrIHNvdXJjZS4gICovCi0JaWYgKGFyZ3MtPm9mZnNldCA+IG9iai0+c2l6ZSB8fCBhcmdzLT5zaXplID4gb2JqLT5zaXplIC0gYXJncy0+b2Zmc2V0KSB7CisJaWYgKGFyZ3MtPm9mZnNldCA+IG9iai0+YmFzZS5zaXplIHx8CisJICAgIGFyZ3MtPnNpemUgPiBvYmotPmJhc2Uuc2l6ZSAtIGFyZ3MtPm9mZnNldCkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX29yX2V2aWN0KG9iaik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KIAlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X2NwdV9yZWFkX2RvbWFpbl9yYW5nZShvYmosCiAJCQkJCQkJYXJncy0+b2Zmc2V0LAogCQkJCQkJCWFyZ3MtPnNpemUpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0X3B1dDsKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSAtRUZBVUxUOwogCWlmICghaTkxNV9nZW1fb2JqZWN0X25lZWRzX2JpdDE3X3N3aXp6bGUob2JqKSkKLQkJcmV0ID0gaTkxNV9nZW1fc2htZW1fcHJlYWRfZmFzdChkZXYsIG9iaiwgYXJncywgZmlsZV9wcml2KTsKKwkJcmV0ID0gaTkxNV9nZW1fc2htZW1fcHJlYWRfZmFzdChkZXYsIG9iaiwgYXJncywgZmlsZSk7CiAJaWYgKHJldCA9PSAtRUZBVUxUKQotCQlyZXQgPSBpOTE1X2dlbV9zaG1lbV9wcmVhZF9zbG93KGRldiwgb2JqLCBhcmdzLCBmaWxlX3ByaXYpOworCQlyZXQgPSBpOTE1X2dlbV9zaG1lbV9wcmVhZF9zbG93KGRldiwgb2JqLCBhcmdzLCBmaWxlKTsKIAotb3V0X3B1dDoKLQlpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaik7CiBvdXQ6Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKIHVubG9jazoKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtNjQ1LDMyICs1ODUsMTYgQEAKIAlpb19tYXBwaW5nX3VubWFwKGRzdF92YWRkcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1mYXN0X3NobWVtX3dyaXRlKHN0cnVjdCBwYWdlICoqcGFnZXMsCi0JCSBsb2ZmX3QgcGFnZV9iYXNlLCBpbnQgcGFnZV9vZmZzZXQsCi0JCSBjaGFyIF9fdXNlciAqZGF0YSwKLQkJIGludCBsZW5ndGgpCi17Ci0JY2hhciAqdmFkZHI7Ci0JaW50IHJldDsKLQotCXZhZGRyID0ga21hcF9hdG9taWMocGFnZXNbcGFnZV9iYXNlID4+IFBBR0VfU0hJRlRdKTsKLQlyZXQgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHZhZGRyICsgcGFnZV9vZmZzZXQsIGRhdGEsIGxlbmd0aCk7Ci0Ja3VubWFwX2F0b21pYyh2YWRkcik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiAvKioKICAqIFRoaXMgaXMgdGhlIGZhc3QgcHdyaXRlIHBhdGgsIHdoZXJlIHdlIGNvcHkgdGhlIGRhdGEgZGlyZWN0bHkgZnJvbSB0aGUKICAqIHVzZXIgaW50byB0aGUgR1RULCB1bmNhY2hlZC4KICAqLwogc3RhdGljIGludAotaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAoraTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncywKLQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKKwkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzc2l6ZV90IHJlbWFpbjsKIAlsb2ZmX3Qgb2Zmc2V0LCBwYWdlX2Jhc2U7CkBAIC02ODAsOCArNjA0LDcgQEAKIAl1c2VyX2RhdGEgPSAoY2hhciBfX3VzZXIgKikgKHVpbnRwdHJfdCkgYXJncy0+ZGF0YV9wdHI7CiAJcmVtYWluID0gYXJncy0+c2l6ZTsKIAotCW9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKLQlvZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldCArIGFyZ3MtPm9mZnNldDsKKwlvZmZzZXQgPSBvYmotPmd0dF9vZmZzZXQgKyBhcmdzLT5vZmZzZXQ7CiAKIAl3aGlsZSAocmVtYWluID4gMCkgewogCQkvKiBPcGVyYXRpb24gaW4gdGhpcyBwYWdlCkBAIC03MjEsMTEgKzY0NCwxMSBAQAogICogdGhhbiB1c2luZyBpOTE1X2dlbV9ndHRfcHdyaXRlX2Zhc3Qgb24gYSBHNDUgKDMyLWJpdCkuCiAgKi8KIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX2d0dF9wd3JpdGVfc2xvdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKK2k5MTVfZ2VtX2d0dF9wd3JpdGVfc2xvdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZ3MsCi0JCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCisJCQkgc3RydWN0IGRybV9maWxlICpmaWxlKQogewotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3NpemVfdCByZW1haW47CiAJbG9mZl90IGd0dF9wYWdlX2Jhc2UsIG9mZnNldDsKQEAgLTc2MiwxMiArNjg1LDE1IEBACiAJCWdvdG8gb3V0X3VucGluX3BhZ2VzOwogCX0KIAotCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIDEpOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIHRydWUpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VucGluX3BhZ2VzOwogCi0Jb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwotCW9mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgYXJncy0+b2Zmc2V0OworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2Uob2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bnBpbl9wYWdlczsKKworCW9mZnNldCA9IG9iai0+Z3R0X29mZnNldCArIGFyZ3MtPm9mZnNldDsKIAogCXdoaWxlIChyZW1haW4gPiAwKSB7CiAJCS8qIE9wZXJhdGlvbiBpbiB0aGlzIHBhZ2UKQEAgLTgxMywzOSArNzM5LDU4IEBACiAgKiBjb3B5X2Zyb21fdXNlciBpbnRvIHRoZSBrbWFwcGVkIHBhZ2VzIGJhY2tpbmcgdGhlIG9iamVjdC4KICAqLwogc3RhdGljIGludAotaTkxNV9nZW1fc2htZW1fcHdyaXRlX2Zhc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCitpOTE1X2dlbV9zaG1lbV9wd3JpdGVfZmFzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAotCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCisJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IG9iai0+YmFzZS5maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmc7CiAJc3NpemVfdCByZW1haW47Ci0JbG9mZl90IG9mZnNldCwgcGFnZV9iYXNlOworCWxvZmZfdCBvZmZzZXQ7CiAJY2hhciBfX3VzZXIgKnVzZXJfZGF0YTsKIAlpbnQgcGFnZV9vZmZzZXQsIHBhZ2VfbGVuZ3RoOwogCiAJdXNlcl9kYXRhID0gKGNoYXIgX191c2VyICopICh1aW50cHRyX3QpIGFyZ3MtPmRhdGFfcHRyOwogCXJlbWFpbiA9IGFyZ3MtPnNpemU7CiAKLQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CiAJb2Zmc2V0ID0gYXJncy0+b2Zmc2V0OwotCW9ial9wcml2LT5kaXJ0eSA9IDE7CisJb2JqLT5kaXJ0eSA9IDE7CiAKIAl3aGlsZSAocmVtYWluID4gMCkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJY2hhciAqdmFkZHI7CisJCWludCByZXQ7CisKIAkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQogCQkgKgotCQkgKiBwYWdlX2Jhc2UgPSBwYWdlIG9mZnNldCB3aXRoaW4gYXBlcnR1cmUKIAkJICogcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aGluIHBhZ2UKIAkJICogcGFnZV9sZW5ndGggPSBieXRlcyB0byBjb3B5IGZvciB0aGlzIHBhZ2UKIAkJICovCi0JCXBhZ2VfYmFzZSA9IChvZmZzZXQgJiB+KFBBR0VfU0laRS0xKSk7CiAJCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgKFBBR0VfU0laRS0xKTsKIAkJcGFnZV9sZW5ndGggPSByZW1haW47CiAJCWlmICgocGFnZV9vZmZzZXQgKyByZW1haW4pID4gUEFHRV9TSVpFKQogCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKIAotCQlpZiAoZmFzdF9zaG1lbV93cml0ZShvYmpfcHJpdi0+cGFnZXMsCi0JCQkJICAgICAgIHBhZ2VfYmFzZSwgcGFnZV9vZmZzZXQsCi0JCQkJICAgICAgIHVzZXJfZGF0YSwgcGFnZV9sZW5ndGgpKQorCQlwYWdlID0gcmVhZF9jYWNoZV9wYWdlX2dmcChtYXBwaW5nLCBvZmZzZXQgPj4gUEFHRV9TSElGVCwKKwkJCQkJICAgR0ZQX0hJR0hVU0VSIHwgX19HRlBfUkVDTEFJTUFCTEUpOworCQlpZiAoSVNfRVJSKHBhZ2UpKQorCQkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CisKKwkJdmFkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJCXJldCA9IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWModmFkZHIgKyBwYWdlX29mZnNldCwKKwkJCQkJCXVzZXJfZGF0YSwKKwkJCQkJCXBhZ2VfbGVuZ3RoKTsKKwkJa3VubWFwX2F0b21pYyh2YWRkciwgS01fVVNFUjApOworCisJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOworCQltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKworCQkvKiBJZiB3ZSBnZXQgYSBmYXVsdCB3aGlsZSBjb3B5aW5nIGRhdGEsIHRoZW4gKHByZXN1bWFibHkpIG91cgorCQkgKiBzb3VyY2UgcGFnZSBpc24ndCBhdmFpbGFibGUuICBSZXR1cm4gdGhlIGVycm9yIGFuZCB3ZSdsbAorCQkgKiByZXRyeSBpbiB0aGUgc2xvdyBwYXRoLgorCQkgKi8KKwkJaWYgKHJldCkKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCXJlbWFpbiAtPSBwYWdlX2xlbmd0aDsKQEAgLTg2NCwxNyArODA5LDE4IEBACiAgKiBzdHJ1Y3RfbXV0ZXggaXMgaGVsZC4KICAqLwogc3RhdGljIGludAotaTkxNV9nZW1fc2htZW1fcHdyaXRlX3Nsb3coc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCitpOTE1X2dlbV9zaG1lbV9wd3JpdGVfc2xvdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAotCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCisJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IG9iai0+YmFzZS5maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmc7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKIAlzdHJ1Y3QgcGFnZSAqKnVzZXJfcGFnZXM7CiAJc3NpemVfdCByZW1haW47CiAJbG9mZl90IG9mZnNldCwgcGlubmVkX3BhZ2VzLCBpOwogCWxvZmZfdCBmaXJzdF9kYXRhX3BhZ2UsIGxhc3RfZGF0YV9wYWdlLCBudW1fcGFnZXM7Ci0JaW50IHNobWVtX3BhZ2VfaW5kZXgsIHNobWVtX3BhZ2Vfb2Zmc2V0OworCWludCBzaG1lbV9wYWdlX29mZnNldDsKIAlpbnQgZGF0YV9wYWdlX2luZGV4LCAgZGF0YV9wYWdlX29mZnNldDsKIAlpbnQgcGFnZV9sZW5ndGg7CiAJaW50IHJldDsKQEAgLTkxMiwyMCArODU4LDE5IEBACiAKIAlkb19iaXQxN19zd2l6emxpbmcgPSBpOTE1X2dlbV9vYmplY3RfbmVlZHNfYml0MTdfc3dpenpsZShvYmopOwogCi0Jb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwogCW9mZnNldCA9IGFyZ3MtPm9mZnNldDsKLQlvYmpfcHJpdi0+ZGlydHkgPSAxOworCW9iai0+ZGlydHkgPSAxOwogCiAJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisKIAkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQogCQkgKgotCQkgKiBzaG1lbV9wYWdlX2luZGV4ID0gcGFnZSBudW1iZXIgd2l0aGluIHNobWVtIGZpbGUKIAkJICogc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aGluIHBhZ2UgaW4gc2htZW0gZmlsZQogCQkgKiBkYXRhX3BhZ2VfaW5kZXggPSBwYWdlIG51bWJlciBpbiBnZXRfdXNlcl9wYWdlcyByZXR1cm4KIAkJICogZGF0YV9wYWdlX29mZnNldCA9IG9mZnNldCB3aXRoIGRhdGFfcGFnZV9pbmRleCBwYWdlLgogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KLQkJc2htZW1fcGFnZV9pbmRleCA9IG9mZnNldCAvIFBBR0VfU0laRTsKIAkJc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiB+UEFHRV9NQVNLOwogCQlkYXRhX3BhZ2VfaW5kZXggPSBkYXRhX3B0ciAvIFBBR0VfU0laRSAtIGZpcnN0X2RhdGFfcGFnZTsKIAkJZGF0YV9wYWdlX29mZnNldCA9IGRhdGFfcHRyICYgflBBR0VfTUFTSzsKQEAgLTkzNiwyMSArODgxLDMyIEBACiAJCWlmICgoZGF0YV9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKIAkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gZGF0YV9wYWdlX29mZnNldDsKIAorCQlwYWdlID0gcmVhZF9jYWNoZV9wYWdlX2dmcChtYXBwaW5nLCBvZmZzZXQgPj4gUEFHRV9TSElGVCwKKwkJCQkJICAgR0ZQX0hJR0hVU0VSIHwgX19HRlBfUkVDTEFJTUFCTEUpOworCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHBhZ2UpOworCQkJZ290byBvdXQ7CisJCX0KKwogCQlpZiAoZG9fYml0MTdfc3dpenpsaW5nKSB7Ci0JCQlzbG93X3NobWVtX2JpdDE3X2NvcHkob2JqX3ByaXYtPnBhZ2VzW3NobWVtX3BhZ2VfaW5kZXhdLAorCQkJc2xvd19zaG1lbV9iaXQxN19jb3B5KHBhZ2UsCiAJCQkJCSAgICAgIHNobWVtX3BhZ2Vfb2Zmc2V0LAogCQkJCQkgICAgICB1c2VyX3BhZ2VzW2RhdGFfcGFnZV9pbmRleF0sCiAJCQkJCSAgICAgIGRhdGFfcGFnZV9vZmZzZXQsCiAJCQkJCSAgICAgIHBhZ2VfbGVuZ3RoLAogCQkJCQkgICAgICAwKTsKIAkJfSBlbHNlIHsKLQkJCXNsb3dfc2htZW1fY29weShvYmpfcHJpdi0+cGFnZXNbc2htZW1fcGFnZV9pbmRleF0sCisJCQlzbG93X3NobWVtX2NvcHkocGFnZSwKIAkJCQkJc2htZW1fcGFnZV9vZmZzZXQsCiAJCQkJCXVzZXJfcGFnZXNbZGF0YV9wYWdlX2luZGV4XSwKIAkJCQkJZGF0YV9wYWdlX29mZnNldCwKIAkJCQkJcGFnZV9sZW5ndGgpOwogCQl9CiAKKwkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCiAJCXJlbWFpbiAtPSBwYWdlX2xlbmd0aDsKIAkJZGF0YV9wdHIgKz0gcGFnZV9sZW5ndGg7CiAJCW9mZnNldCArPSBwYWdlX2xlbmd0aDsKQEAgLTk3NCw4ICs5MzAsNyBAQAogCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZ3MgPSBkYXRhOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCWludCByZXQ7CiAKIAlpZiAoYXJncy0+c2l6ZSA9PSAwKQpAQCAtOTk1LDE1ICs5NTAsMTUgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0Jb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgYXJncy0+aGFuZGxlKTsKKwlvYmogPSB0b19pbnRlbF9ibyhkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlLCBhcmdzLT5oYW5kbGUpKTsKIAlpZiAob2JqID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byB1bmxvY2s7CiAJfQotCW9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKIAogCS8qIEJvdW5kcyBjaGVjayBkZXN0aW5hdGlvbi4gKi8KLQlpZiAoYXJncy0+b2Zmc2V0ID4gb2JqLT5zaXplIHx8IGFyZ3MtPnNpemUgPiBvYmotPnNpemUgLSBhcmdzLT5vZmZzZXQpIHsKKwlpZiAoYXJncy0+b2Zmc2V0ID4gb2JqLT5iYXNlLnNpemUgfHwKKwkgICAgYXJncy0+c2l6ZSA+IG9iai0+YmFzZS5zaXplIC0gYXJncy0+b2Zmc2V0KSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEwMTQsMTYgKzk2OSwxOSBAQAogCSAqIHByZWFkL3B3cml0ZSBjdXJyZW50bHkgYXJlIHJlYWRpbmcgYW5kIHdyaXRpbmcgZnJvbSB0aGUgQ1BVCiAJICogcGVyc3BlY3RpdmUsIHJlcXVpcmluZyBtYW51YWwgZGV0aWxpbmcgYnkgdGhlIGNsaWVudC4KIAkgKi8KLQlpZiAob2JqX3ByaXYtPnBoeXNfb2JqKQorCWlmIChvYmotPnBoeXNfb2JqKQogCQlyZXQgPSBpOTE1X2dlbV9waHlzX3B3cml0ZShkZXYsIG9iaiwgYXJncywgZmlsZSk7Ci0JZWxzZSBpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUgJiYKLQkJIG9ial9wcml2LT5ndHRfc3BhY2UgJiYKLQkJIG9iai0+d3JpdGVfZG9tYWluICE9IEk5MTVfR0VNX0RPTUFJTl9DUFUpIHsKLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosIDApOworCWVsc2UgaWYgKG9iai0+Z3R0X3NwYWNlICYmCisJCSBvYmotPmJhc2Uud3JpdGVfZG9tYWluICE9IEk5MTVfR0VNX0RPTUFJTl9DUFUpIHsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosIDAsIHRydWUpOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAKLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgMSk7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIHRydWUpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfdW5waW47CisKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3B1dF9mZW5jZShvYmopOwogCQlpZiAocmV0KQogCQkJZ290byBvdXRfdW5waW47CiAKQEAgLTEwMzQsMjYgKzk5MiwxOSBAQAogb3V0X3VucGluOgogCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKIAl9IGVsc2UgewotCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX29yX2V2aWN0KG9iaik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQogCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4ob2JqLCAxKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gb3V0X3B1dDsKKwkJCWdvdG8gb3V0OwogCiAJCXJldCA9IC1FRkFVTFQ7CiAJCWlmICghaTkxNV9nZW1fb2JqZWN0X25lZWRzX2JpdDE3X3N3aXp6bGUob2JqKSkKIAkJCXJldCA9IGk5MTVfZ2VtX3NobWVtX3B3cml0ZV9mYXN0KGRldiwgb2JqLCBhcmdzLCBmaWxlKTsKIAkJaWYgKHJldCA9PSAtRUZBVUxUKQogCQkJcmV0ID0gaTkxNV9nZW1fc2htZW1fcHdyaXRlX3Nsb3coZGV2LCBvYmosIGFyZ3MsIGZpbGUpOwotCi1vdXRfcHV0OgotCQlpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaik7CiAJfQogCiBvdXQ6Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKIHVubG9jazoKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtMTA2NSwxMiArMTAxNiwxMCBAQAogICovCiBpbnQKIGk5MTVfZ2VtX3NldF9kb21haW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCisJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbiAqYXJncyA9IGRhdGE7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJdWludDMyX3QgcmVhZF9kb21haW5zID0gYXJncy0+cmVhZF9kb21haW5zOwogCXVpbnQzMl90IHdyaXRlX2RvbWFpbiA9IGFyZ3MtPndyaXRlX2RvbWFpbjsKIAlpbnQgcmV0OwpAQCAtMTA5NSwyOCArMTA0NCwxNSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJb2JqID0gdG9faW50ZWxfYm8oZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgYXJncy0+aGFuZGxlKSk7CiAJaWYgKG9iaiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gdW5sb2NrOwogCX0KLQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7Ci0KLQlpbnRlbF9tYXJrX2J1c3koZGV2LCBvYmopOwogCiAJaWYgKHJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9HVFQpIHsKIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgd3JpdGVfZG9tYWluICE9IDApOwogCi0JCS8qIFVwZGF0ZSB0aGUgTFJVIG9uIHRoZSBmZW5jZSBmb3IgdGhlIENQVSBhY2Nlc3MgdGhhdCdzCi0JCSAqIGFib3V0IHRvIG9jY3VyLgotCQkgKi8KLQkJaWYgKG9ial9wcml2LT5mZW5jZV9yZWcgIT0gSTkxNV9GRU5DRV9SRUdfTk9ORSkgewotCQkJc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqcmVnID0KLQkJCQkmZGV2X3ByaXYtPmZlbmNlX3JlZ3Nbb2JqX3ByaXYtPmZlbmNlX3JlZ107Ci0JCQlsaXN0X21vdmVfdGFpbCgmcmVnLT5scnVfbGlzdCwKLQkJCQkgICAgICAgJmRldl9wcml2LT5tbS5mZW5jZV9saXN0KTsKLQkJfQotCiAJCS8qIFNpbGVudGx5IHByb21vdGUgInlvdSdyZSBub3QgYm91bmQsIHRoZXJlIHdhcyBub3RoaW5nIHRvIGRvIgogCQkgKiB0byBzdWNjZXNzLCBzaW5jZSB0aGUgY2xpZW50IHdhcyBqdXN0IGFza2luZyB1cyB0bwogCQkgKiBtYWtlIHN1cmUgZXZlcnl0aGluZyB3YXMgZG9uZS4KQEAgLTExMjcsMTEgKzEwNjMsNyBAQAogCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4ob2JqLCB3cml0ZV9kb21haW4gIT0gMCk7CiAJfQogCi0JLyogTWFpbnRhaW4gTFJVIG9yZGVyIG9mICJpbmFjdGl2ZSIgb2JqZWN0cyAqLwotCWlmIChyZXQgPT0gMCAmJiBpOTE1X2dlbV9vYmplY3RfaXNfaW5hY3RpdmUob2JqX3ByaXYpKQotCQlsaXN0X21vdmVfdGFpbCgmb2JqX3ByaXYtPm1tX2xpc3QsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCk7Ci0KLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogdW5sb2NrOgogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0xMTQyLDEwICsxMDc0LDEwIEBACiAgKi8KIGludAogaTkxNV9nZW1fc3dfZmluaXNoX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3N3X2ZpbmlzaCAqYXJncyA9IGRhdGE7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICghKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSkKQEAgLTExNTUsMTcgKzEwODcsMTcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0Jb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCW9iaiA9IHRvX2ludGVsX2JvKGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUsIGFyZ3MtPmhhbmRsZSkpOwogCWlmIChvYmogPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIHVubG9jazsKIAl9CiAKIAkvKiBQaW5uZWQgYnVmZmVycyBtYXkgYmUgc2Nhbm91dCwgc28gZmx1c2ggdGhlIGNhY2hlICovCi0JaWYgKHRvX2ludGVsX2JvKG9iaiktPnBpbl9jb3VudCkKKwlpZiAob2JqLT5waW5fY291bnQpCiAJCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9jcHVfd3JpdGVfZG9tYWluKG9iaik7CiAKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogdW5sb2NrOgogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0xMTgwLDggKzExMTIsOSBAQAogICovCiBpbnQKIGk5MTVfZ2VtX21tYXBfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiB7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgKmFyZ3MgPSBkYXRhOwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwogCWxvZmZfdCBvZmZzZXQ7CkBAIC0xMTkwLDEwICsxMTIzLDE1IEBACiAJaWYgKCEoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlLCBhcmdzLT5oYW5kbGUpOwogCWlmIChvYmogPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKKwlpZiAob2JqLT5zaXplID4gZGV2X3ByaXYtPm1tLmd0dF9tYXBwYWJsZV9lbmQpIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKKwkJcmV0dXJuIC1FMkJJRzsKKwl9CisKIAlvZmZzZXQgPSBhcmdzLT5vZmZzZXQ7CiAKIAlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwpAQCAtMTIyOCwxMCArMTE2Niw5IEBACiAgKi8KIGludCBpOTE1X2dlbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHRvX2ludGVsX2JvKHZtYS0+dm1fcHJpdmF0ZV9kYXRhKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwogCXBnb2ZmX3QgcGFnZV9vZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBwZm47CiAJaW50IHJldCA9IDA7CkBAIC0xMjQzLDI3ICsxMTgwLDM1IEBACiAKIAkvKiBOb3cgYmluZCBpdCBpbnRvIHRoZSBHVFQgaWYgbmVlZGVkICovCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWlmICghb2JqX3ByaXYtPmd0dF9zcGFjZSkgewotCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfYmluZF90b19ndHQob2JqLCAwKTsKKworCWlmICghb2JqLT5tYXBfYW5kX2ZlbmNlYWJsZSkgeworCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIHVubG9jazsKLQotCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4ob2JqLCB3cml0ZSk7CisJfQorCWlmICghb2JqLT5ndHRfc3BhY2UpIHsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2JpbmRfdG9fZ3R0KG9iaiwgMCwgdHJ1ZSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIHVubG9jazsKIAl9CiAKLQkvKiBOZWVkIGEgbmV3IGZlbmNlIHJlZ2lzdGVyPyAqLwotCWlmIChvYmpfcHJpdi0+dGlsaW5nX21vZGUgIT0gSTkxNV9USUxJTkdfTk9ORSkgewotCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X2ZlbmNlX3JlZyhvYmosIHRydWUpOwotCQlpZiAocmV0KQotCQkJZ290byB1bmxvY2s7Ci0JfQorCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIHdyaXRlKTsKKwlpZiAocmV0KQorCQlnb3RvIHVubG9jazsKIAotCWlmIChpOTE1X2dlbV9vYmplY3RfaXNfaW5hY3RpdmUob2JqX3ByaXYpKQotCQlsaXN0X21vdmVfdGFpbCgmb2JqX3ByaXYtPm1tX2xpc3QsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCk7CisJaWYgKG9iai0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfTk9ORSkKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3B1dF9mZW5jZShvYmopOworCWVsc2UKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZShvYmosIE5VTEwsIHRydWUpOworCWlmIChyZXQpCisJCWdvdG8gdW5sb2NrOwogCi0JcGZuID0gKChkZXYtPmFncC0+YmFzZSArIG9ial9wcml2LT5ndHRfb2Zmc2V0KSA+PiBQQUdFX1NISUZUKSArCisJaWYgKGk5MTVfZ2VtX29iamVjdF9pc19pbmFjdGl2ZShvYmopKQorCQlsaXN0X21vdmVfdGFpbCgmb2JqLT5tbV9saXN0LCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOworCisJb2JqLT5mYXVsdF9tYXBwYWJsZSA9IHRydWU7CisKKwlwZm4gPSAoKGRldi0+YWdwLT5iYXNlICsgb2JqLT5ndHRfb2Zmc2V0KSA+PiBQQUdFX1NISUZUKSArCiAJCXBhZ2Vfb2Zmc2V0OwogCiAJLyogRmluYWxseSwgcmVtYXAgaXQgdXNpbmcgdGhlIG5ldyBHVFQgb2Zmc2V0ICovCkBAIC0xMjcyLDExICsxMjE3LDEyIEBACiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlzd2l0Y2ggKHJldCkgeworCWNhc2UgLUVBR0FJTjoKKwkJc2V0X25lZWRfcmVzY2hlZCgpOwogCWNhc2UgMDoKIAljYXNlIC1FUkVTVEFSVFNZUzoKIAkJcmV0dXJuIFZNX0ZBVUxUX05PUEFHRTsKIAljYXNlIC1FTk9NRU06Ci0JY2FzZSAtRUFHQUlOOgogCQlyZXR1cm4gVk1fRkFVTFRfT09NOwogCWRlZmF1bHQ6CiAJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CkBAIC0xMjk1LDM3ICsxMjQxLDM5IEBACiAgKiBUaGlzIHJvdXRpbmUgYWxsb2NhdGVzIGFuZCBhdHRhY2hlcyBhIGZha2Ugb2Zmc2V0IGZvciBAb2JqLgogICovCiBzdGF0aWMgaW50Ci1pOTE1X2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCitpOTE1X2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7CiAJc3RydWN0IGRybV9nZW1fbW0gKm1tID0gZGV2LT5tbV9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqbGlzdDsKIAlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwOwogCWludCByZXQgPSAwOwogCiAJLyogU2V0IHRoZSBvYmplY3QgdXAgZm9yIG1tYXAnaW5nICovCi0JbGlzdCA9ICZvYmotPm1hcF9saXN0OworCWxpc3QgPSAmb2JqLT5iYXNlLm1hcF9saXN0OwogCWxpc3QtPm1hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1fbWFwX2xpc3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxpc3QtPm1hcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAltYXAgPSBsaXN0LT5tYXA7CiAJbWFwLT50eXBlID0gX0RSTV9HRU07Ci0JbWFwLT5zaXplID0gb2JqLT5zaXplOworCW1hcC0+c2l6ZSA9IG9iai0+YmFzZS5zaXplOwogCW1hcC0+aGFuZGxlID0gb2JqOwogCiAJLyogR2V0IGEgRFJNIEdFTSBtbWFwIG9mZnNldCBhbGxvY2F0ZWQuLi4gKi8KIAlsaXN0LT5maWxlX29mZnNldF9ub2RlID0gZHJtX21tX3NlYXJjaF9mcmVlKCZtbS0+b2Zmc2V0X21hbmFnZXIsCi0JCQkJCQkgICAgb2JqLT5zaXplIC8gUEFHRV9TSVpFLCAwLCAwKTsKKwkJCQkJCSAgICBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRSwKKwkJCQkJCSAgICAwLCAwKTsKIAlpZiAoIWxpc3QtPmZpbGVfb2Zmc2V0X25vZGUpIHsKLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgb2Zmc2V0IGZvciBibyAlZFxuIiwgb2JqLT5uYW1lKTsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgb2Zmc2V0IGZvciBibyAlZFxuIiwKKwkJCSAgb2JqLT5iYXNlLm5hbWUpOwogCQlyZXQgPSAtRU5PU1BDOwogCQlnb3RvIG91dF9mcmVlX2xpc3Q7CiAJfQogCiAJbGlzdC0+ZmlsZV9vZmZzZXRfbm9kZSA9IGRybV9tbV9nZXRfYmxvY2sobGlzdC0+ZmlsZV9vZmZzZXRfbm9kZSwKLQkJCQkJCSAgb2JqLT5zaXplIC8gUEFHRV9TSVpFLCAwKTsKKwkJCQkJCSAgb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkUsCisJCQkJCQkgIDApOwogCWlmICghbGlzdC0+ZmlsZV9vZmZzZXRfbm9kZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX2xpc3Q7CkBAIC0xMzM4LDE2ICsxMjg2LDEzIEBACiAJCWdvdG8gb3V0X2ZyZWVfbW07CiAJfQogCi0JLyogQnkgbm93IHdlIHNob3VsZCBiZSBhbGwgc2V0LCBhbnkgZHJtX21tYXAgcmVxdWVzdCBvbiB0aGUgb2Zmc2V0Ci0JICogYmVsb3cgd2lsbCBnZXQgdG8gb3VyIG1tYXAgJiBmYXVsdCBoYW5kbGVyICovCi0Jb2JqX3ByaXYtPm1tYXBfb2Zmc2V0ID0gKCh1aW50NjRfdCkgbGlzdC0+aGFzaC5rZXkpIDw8IFBBR0VfU0hJRlQ7Ci0KIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWVfbW06CiAJZHJtX21tX3B1dF9ibG9jayhsaXN0LT5maWxlX29mZnNldF9ub2RlKTsKIG91dF9mcmVlX2xpc3Q6CiAJa2ZyZWUobGlzdC0+bWFwKTsKKwlsaXN0LT5tYXAgPSBOVUxMOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEzNjcsMzggKzEzMTIsNTEgQEAKICAqIGZpeHVwIGJ5IGk5MTVfZ2VtX2ZhdWx0KCkuCiAgKi8KIHZvaWQKLWk5MTVfZ2VtX3JlbGVhc2VfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK2k5MTVfZ2VtX3JlbGVhc2VfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOworCWlmICghb2JqLT5mYXVsdF9tYXBwYWJsZSkKKwkJcmV0dXJuOwogCi0JaWYgKGRldi0+ZGV2X21hcHBpbmcpCi0JCXVubWFwX21hcHBpbmdfcmFuZ2UoZGV2LT5kZXZfbWFwcGluZywKLQkJCQkgICAgb2JqX3ByaXYtPm1tYXBfb2Zmc2V0LCBvYmotPnNpemUsIDEpOworCXVubWFwX21hcHBpbmdfcmFuZ2Uob2JqLT5iYXNlLmRldi0+ZGV2X21hcHBpbmcsCisJCQkgICAgKGxvZmZfdClvYmotPmJhc2UubWFwX2xpc3QuaGFzaC5rZXk8PFBBR0VfU0hJRlQsCisJCQkgICAgb2JqLT5iYXNlLnNpemUsIDEpOworCisJb2JqLT5mYXVsdF9tYXBwYWJsZSA9IGZhbHNlOwogfQogCiBzdGF0aWMgdm9pZAotaTkxNV9nZW1fZnJlZV9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK2k5MTVfZ2VtX2ZyZWVfbW1hcF9vZmZzZXQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKIAlzdHJ1Y3QgZHJtX2dlbV9tbSAqbW0gPSBkZXYtPm1tX3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9tYXBfbGlzdCAqbGlzdDsKKwlzdHJ1Y3QgZHJtX21hcF9saXN0ICpsaXN0ID0gJm9iai0+YmFzZS5tYXBfbGlzdDsKIAotCWxpc3QgPSAmb2JqLT5tYXBfbGlzdDsKIAlkcm1faHRfcmVtb3ZlX2l0ZW0oJm1tLT5vZmZzZXRfaGFzaCwgJmxpc3QtPmhhc2gpOworCWRybV9tbV9wdXRfYmxvY2sobGlzdC0+ZmlsZV9vZmZzZXRfbm9kZSk7CisJa2ZyZWUobGlzdC0+bWFwKTsKKwlsaXN0LT5tYXAgPSBOVUxMOworfQogCi0JaWYgKGxpc3QtPmZpbGVfb2Zmc2V0X25vZGUpIHsKLQkJZHJtX21tX3B1dF9ibG9jayhsaXN0LT5maWxlX29mZnNldF9ub2RlKTsKLQkJbGlzdC0+ZmlsZV9vZmZzZXRfbm9kZSA9IE5VTEw7Ci0JfQorc3RhdGljIHVpbnQzMl90CitpOTE1X2dlbV9nZXRfZ3R0X3NpemUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKKwl1aW50MzJfdCBzaXplOwogCi0JaWYgKGxpc3QtPm1hcCkgewotCQlrZnJlZShsaXN0LT5tYXApOwotCQlsaXN0LT5tYXAgPSBOVUxMOwotCX0KKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCB8fAorCSAgICBvYmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUpCisJCXJldHVybiBvYmotPmJhc2Uuc2l6ZTsKIAotCW9ial9wcml2LT5tbWFwX29mZnNldCA9IDA7CisJLyogUHJldmlvdXMgY2hpcHMgbmVlZCBhIHBvd2VyLW9mLXR3byBmZW5jZSByZWdpb24gd2hlbiB0aWxpbmcgKi8KKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPT0gMykKKwkJc2l6ZSA9IDEwMjQqMTAyNDsKKwllbHNlCisJCXNpemUgPSA1MTIqMTAyNDsKKworCXdoaWxlIChzaXplIDwgb2JqLT5iYXNlLnNpemUpCisJCXNpemUgPDw9IDE7CisKKwlyZXR1cm4gc2l6ZTsKIH0KIAogLyoqCkBAIC0xNDA2LDQyICsxMzY0LDY4IEBACiAgKiBAb2JqOiBvYmplY3QgdG8gY2hlY2sKICAqCiAgKiBSZXR1cm4gdGhlIHJlcXVpcmVkIEdUVCBhbGlnbm1lbnQgZm9yIGFuIG9iamVjdCwgdGFraW5nIGludG8gYWNjb3VudAotICogcG90ZW50aWFsIGZlbmNlIHJlZ2lzdGVyIG1hcHBpbmcgaWYgbmVlZGVkLgorICogcG90ZW50aWFsIGZlbmNlIHJlZ2lzdGVyIG1hcHBpbmcuCiAgKi8KIHN0YXRpYyB1aW50MzJfdAotaTkxNV9nZW1fZ2V0X2d0dF9hbGlnbm1lbnQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCitpOTE1X2dlbV9nZXRfZ3R0X2FsaWdubWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwotCWludCBzdGFydCwgaTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKIAogCS8qCiAJICogTWluaW11bSBhbGlnbm1lbnQgaXMgNGsgKEdUVCBwYWdlIHNpemUpLCBidXQgbWlnaHQgYmUgZ3JlYXRlcgogCSAqIGlmIGEgZmVuY2UgcmVnaXN0ZXIgaXMgbmVlZGVkIGZvciB0aGUgb2JqZWN0LgogCSAqLwotCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0IHx8IG9ial9wcml2LT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19OT05FKQorCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0IHx8CisJICAgIG9iai0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfTk9ORSkKIAkJcmV0dXJuIDQwOTY7CiAKIAkvKgogCSAqIFByZXZpb3VzIGNoaXBzIG5lZWQgdG8gYmUgYWxpZ25lZCB0byB0aGUgc2l6ZSBvZiB0aGUgc21hbGxlc3QKIAkgKiBmZW5jZSByZWdpc3RlciB0aGF0IGNhbiBjb250YWluIHRoZSBvYmplY3QuCiAJICovCi0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID09IDMpCi0JCXN0YXJ0ID0gMTAyNCoxMDI0OworCXJldHVybiBpOTE1X2dlbV9nZXRfZ3R0X3NpemUob2JqKTsKK30KKworLyoqCisgKiBpOTE1X2dlbV9nZXRfdW5mZW5jZWRfZ3R0X2FsaWdubWVudCAtIHJldHVybiByZXF1aXJlZCBHVFQgYWxpZ25tZW50IGZvciBhbgorICoJCQkJCSB1bmZlbmNlZCBvYmplY3QKKyAqIEBvYmo6IG9iamVjdCB0byBjaGVjaworICoKKyAqIFJldHVybiB0aGUgcmVxdWlyZWQgR1RUIGFsaWdubWVudCBmb3IgYW4gb2JqZWN0LCBvbmx5IHRha2luZyBpbnRvIGFjY291bnQKKyAqIHVuZmVuY2VkIHRpbGVkIHN1cmZhY2UgcmVxdWlyZW1lbnRzLgorICovCitzdGF0aWMgdWludDMyX3QKK2k5MTVfZ2VtX2dldF91bmZlbmNlZF9ndHRfYWxpZ25tZW50KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7CisJaW50IHRpbGVfaGVpZ2h0OworCisJLyoKKwkgKiBNaW5pbXVtIGFsaWdubWVudCBpcyA0ayAoR1RUIHBhZ2Ugc2l6ZSkgZm9yIHNhbmUgaHcuCisJICovCisJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQgfHwgSVNfRzMzKGRldikgfHwKKwkgICAgb2JqLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19OT05FKQorCQlyZXR1cm4gNDA5NjsKKworCS8qCisJICogT2xkZXIgY2hpcHMgbmVlZCB1bmZlbmNlZCB0aWxlZCBidWZmZXJzIHRvIGJlIGFsaWduZWQgdG8gdGhlIGxlZnQKKwkgKiBlZGdlIG9mIGFuIGV2ZW4gdGlsZSByb3cgKHdoZXJlIHRpbGUgcm93cyBhcmUgY291bnRlZCBhcyBpZiB0aGUgYm8gaXMKKwkgKiBwbGFjZWQgaW4gYSBmZW5jZWQgZ3R0IHJlZ2lvbikuCisJICovCisJaWYgKElTX0dFTjIoZGV2KSB8fAorCSAgICAob2JqLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19ZICYmIEhBU18xMjhfQllURV9ZX1RJTElORyhkZXYpKSkKKwkJdGlsZV9oZWlnaHQgPSAzMjsKIAllbHNlCi0JCXN0YXJ0ID0gNTEyKjEwMjQ7CisJCXRpbGVfaGVpZ2h0ID0gODsKIAotCWZvciAoaSA9IHN0YXJ0OyBpIDwgb2JqLT5zaXplOyBpIDw8PSAxKQotCQk7Ci0KLQlyZXR1cm4gaTsKKwlyZXR1cm4gdGlsZV9oZWlnaHQgKiBvYmotPnN0cmlkZSAqIDI7CiB9CiAKIC8qKgogICogaTkxNV9nZW1fbW1hcF9ndHRfaW9jdGwgLSBwcmVwYXJlIGFuIG9iamVjdCBmb3IgR1RUIG1tYXAnaW5nCiAgKiBAZGV2OiBEUk0gZGV2aWNlCiAgKiBAZGF0YTogR1RUIG1hcHBpbmcgaW9jdGwgZGF0YQotICogQGZpbGVfcHJpdjogR0VNIG9iamVjdCBpbmZvCisgKiBAZmlsZTogR0VNIG9iamVjdCBpbmZvCiAgKgogICogU2ltcGx5IHJldHVybnMgdGhlIGZha2Ugb2Zmc2V0IHRvIHVzZXJzcGFjZSBzbyBpdCBjYW4gbW1hcCBpdC4KICAqIFRoZSBtbWFwIGNhbGwgd2lsbCBlbmQgdXAgaW4gZHJtX2dlbV9tbWFwKCksIHdoaWNoIHdpbGwgc2V0IHRoaW5ncwpAQCAtMTQ1NCwxMSArMTQzOCwxMSBAQAogICovCiBpbnQKIGk5MTVfZ2VtX21tYXBfZ3R0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIHsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcF9ndHQgKmFyZ3MgPSBkYXRhOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCWludCByZXQ7CiAKIAlpZiAoIShkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkpCkBAIC0xNDY4LDEzMCArMTQ1MiwxOTYgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0Jb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCW9iaiA9IHRvX2ludGVsX2JvKGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUsIGFyZ3MtPmhhbmRsZSkpOwogCWlmIChvYmogPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIHVubG9jazsKIAl9Ci0Jb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwogCi0JaWYgKG9ial9wcml2LT5tYWR2ICE9IEk5MTVfTUFEVl9XSUxMTkVFRCkgeworCWlmIChvYmotPmJhc2Uuc2l6ZSA+IGRldl9wcml2LT5tbS5ndHRfbWFwcGFibGVfZW5kKSB7CisJCXJldCA9IC1FMkJJRzsKKwkJZ290byB1bmxvY2s7CisJfQorCisJaWYgKG9iai0+bWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQpIHsKIAkJRFJNX0VSUk9SKCJBdHRlbXB0aW5nIHRvIG1tYXAgYSBwdXJnZWFibGUgYnVmZmVyXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCFvYmpfcHJpdi0+bW1hcF9vZmZzZXQpIHsKKwlpZiAoIW9iai0+YmFzZS5tYXBfbGlzdC5tYXApIHsKIAkJcmV0ID0gaTkxNV9nZW1fY3JlYXRlX21tYXBfb2Zmc2V0KG9iaik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIAl9CiAKLQlhcmdzLT5vZmZzZXQgPSBvYmpfcHJpdi0+bW1hcF9vZmZzZXQ7Ci0KLQkvKgotCSAqIFB1bGwgaXQgaW50byB0aGUgR1RUIHNvIHRoYXQgd2UgaGF2ZSBhIHBhZ2UgbGlzdCAobWFrZXMgdGhlCi0JICogaW5pdGlhbCBmYXVsdCBmYXN0ZXIgYW5kIGFueSBzdWJzZXF1ZW50IGZsdXNoaW5nIHBvc3NpYmxlKS4KLQkgKi8KLQlpZiAoIW9ial9wcml2LT5hZ3BfbWVtKSB7Ci0JCXJldCA9IGk5MTVfZ2VtX29iamVjdF9iaW5kX3RvX2d0dChvYmosIDApOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfQorCWFyZ3MtPm9mZnNldCA9ICh1NjQpb2JqLT5iYXNlLm1hcF9saXN0Lmhhc2gua2V5IDw8IFBBR0VfU0hJRlQ7CiAKIG91dDoKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogdW5sb2NrOgogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkCi1pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQorc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCSAgICAgIGdmcF90IGdmcG1hc2spCiB7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKLQlpbnQgcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKKwlpbnQgcGFnZV9jb3VudCwgaTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJLyogR2V0IHRoZSBsaXN0IG9mIHBhZ2VzIG91dCBvZiBvdXIgc3RydWN0IGZpbGUuICBUaGV5J2xsIGJlIHBpbm5lZAorCSAqIGF0IHRoaXMgcG9pbnQgdW50aWwgd2UgcmVsZWFzZSB0aGVtLgorCSAqLworCXBhZ2VfY291bnQgPSBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsKKwlCVUdfT04ob2JqLT5wYWdlcyAhPSBOVUxMKTsKKwlvYmotPnBhZ2VzID0gZHJtX21hbGxvY19hYihwYWdlX2NvdW50LCBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOworCWlmIChvYmotPnBhZ2VzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5vZGUgPSBvYmotPmJhc2UuZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwltYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKKwlmb3IgKGkgPSAwOyBpIDwgcGFnZV9jb3VudDsgaSsrKSB7CisJCXBhZ2UgPSByZWFkX2NhY2hlX3BhZ2VfZ2ZwKG1hcHBpbmcsIGksCisJCQkJCSAgIEdGUF9ISUdIVVNFUiB8CisJCQkJCSAgIF9fR0ZQX0NPTEQgfAorCQkJCQkgICBfX0dGUF9SRUNMQUlNQUJMRSB8CisJCQkJCSAgIGdmcG1hc2spOworCQlpZiAoSVNfRVJSKHBhZ2UpKQorCQkJZ290byBlcnJfcGFnZXM7CisKKwkJb2JqLT5wYWdlc1tpXSA9IHBhZ2U7CisJfQorCisJaWYgKG9iai0+dGlsaW5nX21vZGUgIT0gSTkxNV9USUxJTkdfTk9ORSkKKwkJaTkxNV9nZW1fb2JqZWN0X2RvX2JpdF8xN19zd2l6emxlKG9iaik7CisKKwlyZXR1cm4gMDsKKworZXJyX3BhZ2VzOgorCXdoaWxlIChpLS0pCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShvYmotPnBhZ2VzW2ldKTsKKworCWRybV9mcmVlX2xhcmdlKG9iai0+cGFnZXMpOworCW9iai0+cGFnZXMgPSBOVUxMOworCXJldHVybiBQVFJfRVJSKHBhZ2UpOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlc19ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlpbnQgcGFnZV9jb3VudCA9IG9iai0+YmFzZS5zaXplIC8gUEFHRV9TSVpFOwogCWludCBpOwogCi0JQlVHX09OKG9ial9wcml2LT5wYWdlc19yZWZjb3VudCA9PSAwKTsKLQlCVUdfT04ob2JqX3ByaXYtPm1hZHYgPT0gX19JOTE1X01BRFZfUFVSR0VEKTsKKwlCVUdfT04ob2JqLT5tYWR2ID09IF9fSTkxNV9NQURWX1BVUkdFRCk7CiAKLQlpZiAoLS1vYmpfcHJpdi0+cGFnZXNfcmVmY291bnQgIT0gMCkKLQkJcmV0dXJuOwotCi0JaWYgKG9ial9wcml2LT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FKQorCWlmIChvYmotPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpCiAJCWk5MTVfZ2VtX29iamVjdF9zYXZlX2JpdF8xN19zd2l6emxlKG9iaik7CiAKLQlpZiAob2JqX3ByaXYtPm1hZHYgPT0gSTkxNV9NQURWX0RPTlRORUVEKQotCQlvYmpfcHJpdi0+ZGlydHkgPSAwOworCWlmIChvYmotPm1hZHYgPT0gSTkxNV9NQURWX0RPTlRORUVEKQorCQlvYmotPmRpcnR5ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspIHsKLQkJaWYgKG9ial9wcml2LT5kaXJ0eSkKLQkJCXNldF9wYWdlX2RpcnR5KG9ial9wcml2LT5wYWdlc1tpXSk7CisJCWlmIChvYmotPmRpcnR5KQorCQkJc2V0X3BhZ2VfZGlydHkob2JqLT5wYWdlc1tpXSk7CiAKLQkJaWYgKG9ial9wcml2LT5tYWR2ID09IEk5MTVfTUFEVl9XSUxMTkVFRCkKLQkJCW1hcmtfcGFnZV9hY2Nlc3NlZChvYmpfcHJpdi0+cGFnZXNbaV0pOworCQlpZiAob2JqLT5tYWR2ID09IEk5MTVfTUFEVl9XSUxMTkVFRCkKKwkJCW1hcmtfcGFnZV9hY2Nlc3NlZChvYmotPnBhZ2VzW2ldKTsKIAotCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2JqX3ByaXYtPnBhZ2VzW2ldKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKG9iai0+cGFnZXNbaV0pOwogCX0KLQlvYmpfcHJpdi0+ZGlydHkgPSAwOworCW9iai0+ZGlydHkgPSAwOwogCi0JZHJtX2ZyZWVfbGFyZ2Uob2JqX3ByaXYtPnBhZ2VzKTsKLQlvYmpfcHJpdi0+cGFnZXMgPSBOVUxMOworCWRybV9mcmVlX2xhcmdlKG9iai0+cGFnZXMpOworCW9iai0+cGFnZXMgPSBOVUxMOwogfQogCi1zdGF0aWMgdWludDMyX3QKLWk5MTVfZ2VtX25leHRfcmVxdWVzdF9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKK3ZvaWQKK2k5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJICAgICAgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKKwkJCSAgICAgICB1MzIgc2Vxbm8pCiB7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlyaW5nLT5vdXRzdGFuZGluZ19sYXp5X3JlcXVlc3QgPSB0cnVlOwotCXJldHVybiBkZXZfcHJpdi0+bmV4dF9zZXFubzsKLX0KLQotc3RhdGljIHZvaWQKLWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2OwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKLQl1aW50MzJfdCBzZXFubyA9IGk5MTVfZ2VtX25leHRfcmVxdWVzdF9zZXFubyhkZXYsIHJpbmcpOwogCiAJQlVHX09OKHJpbmcgPT0gTlVMTCk7Ci0Jb2JqX3ByaXYtPnJpbmcgPSByaW5nOworCW9iai0+cmluZyA9IHJpbmc7CiAKIAkvKiBBZGQgYSByZWZlcmVuY2UgaWYgd2UncmUgbmV3bHkgZW50ZXJpbmcgdGhlIGFjdGl2ZSBsaXN0LiAqLwotCWlmICghb2JqX3ByaXYtPmFjdGl2ZSkgewotCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKLQkJb2JqX3ByaXYtPmFjdGl2ZSA9IDE7CisJaWYgKCFvYmotPmFjdGl2ZSkgeworCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2UoJm9iai0+YmFzZSk7CisJCW9iai0+YWN0aXZlID0gMTsKIAl9CiAKIAkvKiBNb3ZlIGZyb20gd2hhdGV2ZXIgbGlzdCB3ZSB3ZXJlIG9uIHRvIHRoZSB0YWlsIG9mIGV4ZWN1dGlvbi4gKi8KLQlsaXN0X21vdmVfdGFpbCgmb2JqX3ByaXYtPm1tX2xpc3QsICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpOwotCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+cmluZ19saXN0LCAmcmluZy0+YWN0aXZlX2xpc3QpOwotCW9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyA9IHNlcW5vOworCWxpc3RfbW92ZV90YWlsKCZvYmotPm1tX2xpc3QsICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpOworCWxpc3RfbW92ZV90YWlsKCZvYmotPnJpbmdfbGlzdCwgJnJpbmctPmFjdGl2ZV9saXN0KTsKKworCW9iai0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8gPSBzZXFubzsKKwlpZiAob2JqLT5mZW5jZWRfZ3B1X2FjY2VzcykgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpyZWc7CisKKwkJQlVHX09OKG9iai0+ZmVuY2VfcmVnID09IEk5MTVfRkVOQ0VfUkVHX05PTkUpOworCisJCW9iai0+bGFzdF9mZW5jZWRfc2Vxbm8gPSBzZXFubzsKKwkJb2JqLT5sYXN0X2ZlbmNlZF9yaW5nID0gcmluZzsKKworCQlyZWcgPSAmZGV2X3ByaXYtPmZlbmNlX3JlZ3Nbb2JqLT5mZW5jZV9yZWddOworCQlsaXN0X21vdmVfdGFpbCgmcmVnLT5scnVfbGlzdCwgJmRldl9wcml2LT5tbS5mZW5jZV9saXN0KTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCi1pOTE1X2dlbV9vYmplY3RfbW92ZV90b19mbHVzaGluZyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK2k5MTVfZ2VtX29iamVjdF9tb3ZlX29mZl9hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKKwlsaXN0X2RlbF9pbml0KCZvYmotPnJpbmdfbGlzdCk7CisJb2JqLT5sYXN0X3JlbmRlcmluZ19zZXFubyA9IDA7Cit9CiAKLQlCVUdfT04oIW9ial9wcml2LT5hY3RpdmUpOwotCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bW1fbGlzdCwgJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KTsKLQlsaXN0X2RlbF9pbml0KCZvYmpfcHJpdi0+cmluZ19saXN0KTsKLQlvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8gPSAwOworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2ZsdXNoaW5nKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlCVUdfT04oIW9iai0+YWN0aXZlKTsKKwlsaXN0X21vdmVfdGFpbCgmb2JqLT5tbV9saXN0LCAmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QpOworCisJaTkxNV9nZW1fb2JqZWN0X21vdmVfb2ZmX2FjdGl2ZShvYmopOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fb2JqZWN0X21vdmVfdG9faW5hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKG9iai0+cGluX2NvdW50ICE9IDApCisJCWxpc3RfbW92ZV90YWlsKCZvYmotPm1tX2xpc3QsICZkZXZfcHJpdi0+bW0ucGlubmVkX2xpc3QpOworCWVsc2UKKwkJbGlzdF9tb3ZlX3RhaWwoJm9iai0+bW1fbGlzdCwgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KTsKKworCUJVR19PTighbGlzdF9lbXB0eSgmb2JqLT5ncHVfd3JpdGVfbGlzdCkpOworCUJVR19PTighb2JqLT5hY3RpdmUpOworCW9iai0+cmluZyA9IE5VTEw7CisKKwlpOTE1X2dlbV9vYmplY3RfbW92ZV9vZmZfYWN0aXZlKG9iaik7CisJb2JqLT5mZW5jZWRfZ3B1X2FjY2VzcyA9IGZhbHNlOworCisJb2JqLT5hY3RpdmUgPSAwOworCW9iai0+cGVuZGluZ19ncHVfd3JpdGUgPSBmYWxzZTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKworCVdBUk5fT04oaTkxNV92ZXJpZnlfbGlzdHMoZGV2KSk7CiB9CiAKIC8qIEltbWVkaWF0ZWx5IGRpc2NhcmQgdGhlIGJhY2tpbmcgc3RvcmFnZSAqLwogc3RhdGljIHZvaWQKLWk5MTVfZ2VtX29iamVjdF90cnVuY2F0ZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK2k5MTVfZ2VtX29iamVjdF90cnVuY2F0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAogCS8qIE91ciBnb2FsIGhlcmUgaXMgdG8gcmV0dXJuIGFzIG11Y2ggb2YgdGhlIG1lbW9yeSBhcwpAQCAtMTYwMCw0MiArMTY1MCwxOCBAQAogCSAqIGJhY2tpbmcgcGFnZXMsICpub3cqLiBIZXJlIHdlIG1pcnJvciB0aGUgYWN0aW9ucyB0YWtlbgogCSAqIHdoZW4gYnkgc2htZW1fZGVsZXRlX2lub2RlKCkgdG8gcmVsZWFzZSB0aGUgYmFja2luZyBzdG9yZS4KIAkgKi8KLQlpbm9kZSA9IG9iai0+ZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IG9iai0+YmFzZS5maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXRydW5jYXRlX2lub2RlX3BhZ2VzKGlub2RlLT5pX21hcHBpbmcsIDApOwogCWlmIChpbm9kZS0+aV9vcC0+dHJ1bmNhdGVfcmFuZ2UpCiAJCWlub2RlLT5pX29wLT50cnVuY2F0ZV9yYW5nZShpbm9kZSwgMCwgKGxvZmZfdCktMSk7CiAKLQlvYmpfcHJpdi0+bWFkdiA9IF9fSTkxNV9NQURWX1BVUkdFRDsKKwlvYmotPm1hZHYgPSBfX0k5MTVfTUFEVl9QVVJHRUQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1pOTE1X2dlbV9vYmplY3RfaXNfcHVyZ2VhYmxlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdikKK2k5MTVfZ2VtX29iamVjdF9pc19wdXJnZWFibGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLQlyZXR1cm4gb2JqX3ByaXYtPm1hZHYgPT0gSTkxNV9NQURWX0RPTlRORUVEOwotfQotCi1zdGF0aWMgdm9pZAotaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9faW5hY3RpdmUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7Ci0KLQlpZiAob2JqX3ByaXYtPnBpbl9jb3VudCAhPSAwKQotCQlsaXN0X21vdmVfdGFpbCgmb2JqX3ByaXYtPm1tX2xpc3QsICZkZXZfcHJpdi0+bW0ucGlubmVkX2xpc3QpOwotCWVsc2UKLQkJbGlzdF9tb3ZlX3RhaWwoJm9ial9wcml2LT5tbV9saXN0LCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOwotCWxpc3RfZGVsX2luaXQoJm9ial9wcml2LT5yaW5nX2xpc3QpOwotCi0JQlVHX09OKCFsaXN0X2VtcHR5KCZvYmpfcHJpdi0+Z3B1X3dyaXRlX2xpc3QpKTsKLQotCW9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyA9IDA7Ci0Jb2JqX3ByaXYtPnJpbmcgPSBOVUxMOwotCWlmIChvYmpfcHJpdi0+YWN0aXZlKSB7Ci0JCW9ial9wcml2LT5hY3RpdmUgPSAwOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwotCX0KLQlXQVJOX09OKGk5MTVfdmVyaWZ5X2xpc3RzKGRldikpOworCXJldHVybiBvYmotPm1hZHYgPT0gSTkxNV9NQURWX0RPTlRORUVEOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTY0MywzNyArMTY2OSwyNyBAQAogCQkJICAgICAgIHVpbnQzMl90IGZsdXNoX2RvbWFpbnMsCiAJCQkgICAgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQogewotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiwgKm5leHQ7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgKm5leHQ7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2JqX3ByaXYsIG5leHQsCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgbmV4dCwKIAkJCQkgJnJpbmctPmdwdV93cml0ZV9saXN0LAogCQkJCSBncHVfd3JpdGVfbGlzdCkgewotCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZvYmpfcHJpdi0+YmFzZTsKKwkJaWYgKG9iai0+YmFzZS53cml0ZV9kb21haW4gJiBmbHVzaF9kb21haW5zKSB7CisJCQl1aW50MzJfdCBvbGRfd3JpdGVfZG9tYWluID0gb2JqLT5iYXNlLndyaXRlX2RvbWFpbjsKIAotCQlpZiAob2JqLT53cml0ZV9kb21haW4gJiBmbHVzaF9kb21haW5zKSB7Ci0JCQl1aW50MzJfdCBvbGRfd3JpdGVfZG9tYWluID0gb2JqLT53cml0ZV9kb21haW47Ci0KLQkJCW9iai0+d3JpdGVfZG9tYWluID0gMDsKLQkJCWxpc3RfZGVsX2luaXQoJm9ial9wcml2LT5ncHVfd3JpdGVfbGlzdCk7Ci0JCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19hY3RpdmUob2JqLCByaW5nKTsKLQotCQkJLyogdXBkYXRlIHRoZSBmZW5jZSBscnUgbGlzdCAqLwotCQkJaWYgKG9ial9wcml2LT5mZW5jZV9yZWcgIT0gSTkxNV9GRU5DRV9SRUdfTk9ORSkgewotCQkJCXN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKnJlZyA9Ci0JCQkJCSZkZXZfcHJpdi0+ZmVuY2VfcmVnc1tvYmpfcHJpdi0+ZmVuY2VfcmVnXTsKLQkJCQlsaXN0X21vdmVfdGFpbCgmcmVnLT5scnVfbGlzdCwKLQkJCQkJCSZkZXZfcHJpdi0+bW0uZmVuY2VfbGlzdCk7Ci0JCQl9CisJCQlvYmotPmJhc2Uud3JpdGVfZG9tYWluID0gMDsKKwkJCWxpc3RfZGVsX2luaXQoJm9iai0+Z3B1X3dyaXRlX2xpc3QpOworCQkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9fYWN0aXZlKG9iaiwgcmluZywKKwkJCQkJCSAgICAgICBpOTE1X2dlbV9uZXh0X3JlcXVlc3Rfc2Vxbm8oZGV2LCByaW5nKSk7CiAKIAkJCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9jaGFuZ2VfZG9tYWluKG9iaiwKLQkJCQkJCQkgICAgb2JqLT5yZWFkX2RvbWFpbnMsCisJCQkJCQkJICAgIG9iai0+YmFzZS5yZWFkX2RvbWFpbnMsCiAJCQkJCQkJICAgIG9sZF93cml0ZV9kb21haW4pOwogCQl9CiAJfQogfQogCi11aW50MzJfdAoraW50CiBpOTE1X2FkZF9yZXF1ZXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCiAJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QsCkBAIC0xNjgzLDE3ICsxNjk5LDE3IEBACiAJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2ID0gTlVMTDsKIAl1aW50MzJfdCBzZXFubzsKIAlpbnQgd2FzX2VtcHR5OworCWludCByZXQ7CisKKwlCVUdfT04ocmVxdWVzdCA9PSBOVUxMKTsKIAogCWlmIChmaWxlICE9IE5VTEwpCiAJCWZpbGVfcHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2OwogCi0JaWYgKHJlcXVlc3QgPT0gTlVMTCkgewotCQlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2YoKnJlcXVlc3QpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKHJlcXVlc3QgPT0gTlVMTCkKLQkJCXJldHVybiAwOwotCX0KKwlyZXQgPSByaW5nLT5hZGRfcmVxdWVzdChyaW5nLCAmc2Vxbm8pOworCWlmIChyZXQpCisJICAgIHJldHVybiByZXQ7CiAKLQlzZXFubyA9IHJpbmctPmFkZF9yZXF1ZXN0KGRldiwgcmluZywgMCk7CiAJcmluZy0+b3V0c3RhbmRpbmdfbGF6eV9yZXF1ZXN0ID0gZmFsc2U7CiAKIAlyZXF1ZXN0LT5zZXFubyA9IHNlcW5vOwpAQCAtMTcxNywyNiArMTczMyw3IEBACiAJCQlxdWV1ZV9kZWxheWVkX3dvcmsoZGV2X3ByaXYtPndxLAogCQkJCQkgICAmZGV2X3ByaXYtPm1tLnJldGlyZV93b3JrLCBIWik7CiAJfQotCXJldHVybiBzZXFubzsKLX0KLQotLyoqCi0gKiBDb21tYW5kIGV4ZWN1dGlvbiBiYXJyaWVyCi0gKgotICogRW5zdXJlcyB0aGF0IGFsbCBjb21tYW5kcyBpbiB0aGUgcmluZyBhcmUgZmluaXNoZWQKLSAqIGJlZm9yZSBzaWduYWxsaW5nIHRoZSBDUFUKLSAqLwotc3RhdGljIHZvaWQKLWk5MTVfcmV0aXJlX2NvbW1hbmRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKLXsKLQl1aW50MzJfdCBmbHVzaF9kb21haW5zID0gMDsKLQotCS8qIFRoZSBzYW1wbGVyIGFsd2F5cyBnZXRzIGZsdXNoZWQgb24gaTk2NSAoc2lnaCkgKi8KLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkKLQkJZmx1c2hfZG9tYWlucyB8PSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUjsKLQotCXJpbmctPmZsdXNoKGRldiwgcmluZywKLQkJCUk5MTVfR0VNX0RPTUFJTl9DT01NQU5ELCBmbHVzaF9kb21haW5zKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC0xNzY5LDYyICsxNzY2LDc2IEBACiAJfQogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZyaW5nLT5hY3RpdmVfbGlzdCkpIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCi0JCW9ial9wcml2ID0gbGlzdF9maXJzdF9lbnRyeSgmcmluZy0+YWN0aXZlX2xpc3QsCi0JCQkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKLQkJCQkJICAgIHJpbmdfbGlzdCk7CisJCW9iaiA9IGxpc3RfZmlyc3RfZW50cnkoJnJpbmctPmFjdGl2ZV9saXN0LAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKKwkJCQkgICAgICAgcmluZ19saXN0KTsKIAotCQlvYmpfcHJpdi0+YmFzZS53cml0ZV9kb21haW4gPSAwOwotCQlsaXN0X2RlbF9pbml0KCZvYmpfcHJpdi0+Z3B1X3dyaXRlX2xpc3QpOwotCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZSgmb2JqX3ByaXYtPmJhc2UpOworCQlvYmotPmJhc2Uud3JpdGVfZG9tYWluID0gMDsKKwkJbGlzdF9kZWxfaW5pdCgmb2JqLT5ncHVfd3JpdGVfbGlzdCk7CisJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKG9iaik7CisJfQorfQorCitzdGF0aWMgdm9pZCBpOTE1X2dlbV9yZXNldF9mZW5jZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqcmVnID0gJmRldl9wcml2LT5mZW5jZV9yZWdzW2ldOworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gcmVnLT5vYmo7CisKKwkJaWYgKCFvYmopCisJCQljb250aW51ZTsKKworCQlpZiAob2JqLT50aWxpbmdfbW9kZSkKKwkJCWk5MTVfZ2VtX3JlbGVhc2VfbW1hcChvYmopOworCisJCXJlZy0+b2JqLT5mZW5jZV9yZWcgPSBJOTE1X0ZFTkNFX1JFR19OT05FOworCQlyZWctPm9iai0+ZmVuY2VkX2dwdV9hY2Nlc3MgPSBmYWxzZTsKKwkJcmVnLT5vYmotPmxhc3RfZmVuY2VkX3NlcW5vID0gMDsKKwkJcmVnLT5vYmotPmxhc3RfZmVuY2VkX3JpbmcgPSBOVUxMOworCQlpOTE1X2dlbV9jbGVhcl9mZW5jZV9yZWcoZGV2LCByZWcpOwogCX0KIH0KIAogdm9pZCBpOTE1X2dlbV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJaW50IGk7CiAKLQlpOTE1X2dlbV9yZXNldF9yaW5nX2xpc3RzKGRldl9wcml2LCAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nKTsKLQlpOTE1X2dlbV9yZXNldF9yaW5nX2xpc3RzKGRldl9wcml2LCAmZGV2X3ByaXYtPmJzZF9yaW5nKTsKLQlpOTE1X2dlbV9yZXNldF9yaW5nX2xpc3RzKGRldl9wcml2LCAmZGV2X3ByaXYtPmJsdF9yaW5nKTsKKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykKKwkJaTkxNV9nZW1fcmVzZXRfcmluZ19saXN0cyhkZXZfcHJpdiwgJmRldl9wcml2LT5yaW5nW2ldKTsKIAogCS8qIFJlbW92ZSBhbnl0aGluZyBmcm9tIHRoZSBmbHVzaGluZyBsaXN0cy4gVGhlIEdQVSBjYWNoZSBpcyBsaWtlbHkKIAkgKiB0byBiZSBsb3N0IG9uIHJlc2V0IGFsb25nIHdpdGggdGhlIGRhdGEsIHNvIHNpbXBseSBtb3ZlIHRoZQogCSAqIGxvc3QgYm8gdG8gdGhlIGluYWN0aXZlIGxpc3QuCiAJICovCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCkpIHsKLQkJb2JqX3ByaXYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwKLQkJCQkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAotCQkJCQkgICAgbW1fbGlzdCk7CisJCW9iaj0gbGlzdF9maXJzdF9lbnRyeSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QsCisJCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCisJCQkJICAgICAgbW1fbGlzdCk7CiAKLQkJb2JqX3ByaXYtPmJhc2Uud3JpdGVfZG9tYWluID0gMDsKLQkJbGlzdF9kZWxfaW5pdCgmb2JqX3ByaXYtPmdwdV93cml0ZV9saXN0KTsKLQkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9faW5hY3RpdmUoJm9ial9wcml2LT5iYXNlKTsKKwkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IDA7CisJCWxpc3RfZGVsX2luaXQoJm9iai0+Z3B1X3dyaXRlX2xpc3QpOworCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShvYmopOwogCX0KIAogCS8qIE1vdmUgZXZlcnl0aGluZyBvdXQgb2YgdGhlIEdQVSBkb21haW5zIHRvIGVuc3VyZSB3ZSBkbyBhbnkKIAkgKiBuZWNlc3NhcnkgaW52YWxpZGF0aW9uIHVwb24gcmV1c2UuCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwKIAkJCSAgICAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QsCiAJCQkgICAgbW1fbGlzdCkKIAl7Ci0JCW9ial9wcml2LT5iYXNlLnJlYWRfZG9tYWlucyAmPSB+STkxNV9HRU1fR1BVX0RPTUFJTlM7CisJCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgJj0gfkk5MTVfR0VNX0dQVV9ET01BSU5TOwogCX0KIAogCS8qIFRoZSBmZW5jZSByZWdpc3RlcnMgYXJlIGludmFsaWRhdGVkIHNvIGNsZWFyIHRoZW0gb3V0ICovCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqcmVnOwotCi0JCXJlZyA9ICZkZXZfcHJpdi0+ZmVuY2VfcmVnc1tpXTsKLQkJaWYgKCFyZWctPm9iaikKLQkJCWNvbnRpbnVlOwotCi0JCWk5MTVfZ2VtX2NsZWFyX2ZlbmNlX3JlZyhyZWctPm9iaik7Ci0JfQorCWk5MTVfZ2VtX3Jlc2V0X2ZlbmNlcyhkZXYpOwogfQogCiAvKioKQEAgLTE4MzYsNiArMTg0Nyw3IEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdWludDMyX3Qgc2Vxbm87CisJaW50IGk7CiAKIAlpZiAoIXJpbmctPnN0YXR1c19wYWdlLnBhZ2VfYWRkciB8fAogCSAgICBsaXN0X2VtcHR5KCZyaW5nLT5yZXF1ZXN0X2xpc3QpKQpAQCAtMTg0Myw3ICsxODU1LDEyIEBACiAKIAlXQVJOX09OKGk5MTVfdmVyaWZ5X2xpc3RzKGRldikpOwogCi0Jc2Vxbm8gPSByaW5nLT5nZXRfc2Vxbm8oZGV2LCByaW5nKTsKKwlzZXFubyA9IHJpbmctPmdldF9zZXFubyhyaW5nKTsKKworCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKQorCQlpZiAoc2Vxbm8gPj0gcmluZy0+c3luY19zZXFub1tpXSkKKwkJCXJpbmctPnN5bmNfc2Vxbm9baV0gPSAwOworCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZyaW5nLT5yZXF1ZXN0X2xpc3QpKSB7CiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKIApAQCAtMTg2NSwxOCArMTg4MiwxNiBAQAogCSAqIGJ5IHRoZSByaW5nYnVmZmVyIHRvIHRoZSBmbHVzaGluZy9pbmFjdGl2ZSBsaXN0cyBhcyBhcHByb3ByaWF0ZS4KIAkgKi8KIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnJpbmctPmFjdGl2ZV9saXN0KSkgewotCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCi0JCW9ial9wcml2ID0gbGlzdF9maXJzdF9lbnRyeSgmcmluZy0+YWN0aXZlX2xpc3QsCi0JCQkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKLQkJCQkJICAgIHJpbmdfbGlzdCk7CisJCW9iaj0gbGlzdF9maXJzdF9lbnRyeSgmcmluZy0+YWN0aXZlX2xpc3QsCisJCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCisJCQkJICAgICAgcmluZ19saXN0KTsKIAotCQlpZiAoIWk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pKQorCQlpZiAoIWk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCBvYmotPmxhc3RfcmVuZGVyaW5nX3NlcW5vKSkKIAkJCWJyZWFrOwogCi0JCW9iaiA9ICZvYmpfcHJpdi0+YmFzZTsKLQkJaWYgKG9iai0+d3JpdGVfZG9tYWluICE9IDApCisJCWlmIChvYmotPmJhc2Uud3JpdGVfZG9tYWluICE9IDApCiAJCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19mbHVzaGluZyhvYmopOwogCQllbHNlCiAJCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShvYmopOwpAQCAtMTg4NCw3ICsxODk5LDcgQEAKIAogCWlmICh1bmxpa2VseSAoZGV2X3ByaXYtPnRyYWNlX2lycV9zZXFubyAmJgogCQkgICAgICBpOTE1X3NlcW5vX3Bhc3NlZChkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vLCBzZXFubykpKSB7Ci0JCXJpbmctPnVzZXJfaXJxX3B1dChkZXYsIHJpbmcpOworCQlyaW5nLT5pcnFfcHV0KHJpbmcpOwogCQlkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID0gMDsKIAl9CiAKQEAgLTE4OTUsMjQgKzE5MTAsMjQgQEAKIGk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOwogCiAJaWYgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZGVmZXJyZWRfZnJlZV9saXN0KSkgewotCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYsICp0bXA7CisJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosICpuZXh0OwogCiAJICAgIC8qIFdlIG11c3QgYmUgY2FyZWZ1bCB0aGF0IGR1cmluZyB1bmJpbmQoKSB3ZSBkbyBub3QKIAkgICAgICogYWNjaWRlbnRhbGx5IGluZmluaXRlbHkgcmVjdXJzZSBpbnRvIHJldGlyZSByZXF1ZXN0cy4KIAkgICAgICogQ3VycmVudGx5OgogCSAgICAgKiAgIHJldGlyZSAtPiBmcmVlIC0+IHVuYmluZCAtPiB3YWl0IC0+IHJldGlyZV9yaW5nCiAJICAgICAqLwotCSAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2JqX3ByaXYsIHRtcCwKKwkgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgbmV4dCwKIAkJCQkgICAgICZkZXZfcHJpdi0+bW0uZGVmZXJyZWRfZnJlZV9saXN0LAogCQkJCSAgICAgbW1fbGlzdCkKLQkJICAgIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0X3RhaWwoJm9ial9wcml2LT5iYXNlKTsKKwkJICAgIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0X3RhaWwob2JqKTsKIAl9CiAKLQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHNfcmluZyhkZXYsICZkZXZfcHJpdi0+cmVuZGVyX3JpbmcpOwotCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0c19yaW5nKGRldiwgJmRldl9wcml2LT5ic2RfcmluZyk7Ci0JaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzX3JpbmcoZGV2LCAmZGV2X3ByaXYtPmJsdF9yaW5nKTsKKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykKKwkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzX3JpbmcoZGV2LCAmZGV2X3ByaXYtPnJpbmdbaV0pOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTkyMCw2ICsxOTM1LDggQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2OwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisJYm9vbCBpZGxlOworCWludCBpOwogCiAJZGV2X3ByaXYgPSBjb250YWluZXJfb2Yod29yaywgZHJtX2k5MTVfcHJpdmF0ZV90LAogCQkJCW1tLnJldGlyZV93b3JrLndvcmspOwpAQCAtMTkzMywxMSArMTk1MCwzMSBAQAogCiAJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldik7CiAKLQlpZiAoIWRldl9wcml2LT5tbS5zdXNwZW5kZWQgJiYKLQkJKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+cmVuZGVyX3JpbmcucmVxdWVzdF9saXN0KSB8fAotCQkgIWxpc3RfZW1wdHkoJmRldl9wcml2LT5ic2RfcmluZy5yZXF1ZXN0X2xpc3QpIHx8Ci0JCSAhbGlzdF9lbXB0eSgmZGV2X3ByaXYtPmJsdF9yaW5nLnJlcXVlc3RfbGlzdCkpKQorCS8qIFNlbmQgYSBwZXJpb2RpYyBmbHVzaCBkb3duIHRoZSByaW5nIHNvIHdlIGRvbid0IGhvbGQgb250byBHRU0KKwkgKiBvYmplY3RzIGluZGVmaW5pdGVseS4KKwkgKi8KKwlpZGxlID0gdHJ1ZTsKKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykgeworCQlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbaV07CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZyaW5nLT5ncHVfd3JpdGVfbGlzdCkpIHsKKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKKwkJCWludCByZXQ7CisKKwkJCXJldCA9IGk5MTVfZ2VtX2ZsdXNoX3JpbmcoZGV2LCByaW5nLCAwLAorCQkJCQkJICBJOTE1X0dFTV9HUFVfRE9NQUlOUyk7CisJCQlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2YoKnJlcXVlc3QpLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChyZXQgfHwgcmVxdWVzdCA9PSBOVUxMIHx8CisJCQkgICAgaTkxNV9hZGRfcmVxdWVzdChkZXYsIE5VTEwsIHJlcXVlc3QsIHJpbmcpKQorCQkJICAgIGtmcmVlKHJlcXVlc3QpOworCQl9CisKKwkJaWRsZSAmPSBsaXN0X2VtcHR5KCZyaW5nLT5yZXF1ZXN0X2xpc3QpOworCX0KKworCWlmICghZGV2X3ByaXYtPm1tLnN1c3BlbmRlZCAmJiAhaWRsZSkKIAkJcXVldWVfZGVsYXllZF93b3JrKGRldl9wcml2LT53cSwgJmRldl9wcml2LT5tbS5yZXRpcmVfd29yaywgSFopOworCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiB9CiAKQEAgLTE5NTQsMTQgKzE5OTEsMjMgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmRldl9wcml2LT5tbS53ZWRnZWQpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCWlmIChyaW5nLT5vdXRzdGFuZGluZ19sYXp5X3JlcXVlc3QpIHsKLQkJc2Vxbm8gPSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgTlVMTCwgTlVMTCwgcmluZyk7Ci0JCWlmIChzZXFubyA9PSAwKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCUJVR19PTihzZXFubyA9PSBkZXZfcHJpdi0+bmV4dF9zZXFubyk7CisJaWYgKHNlcW5vID09IHJpbmctPm91dHN0YW5kaW5nX2xhenlfcmVxdWVzdCkgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7CiAKLQlpZiAoIWk5MTVfc2Vxbm9fcGFzc2VkKHJpbmctPmdldF9zZXFubyhkZXYsIHJpbmcpLCBzZXFubykpIHsKKwkJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXF1ZXN0ID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlyZXQgPSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgTlVMTCwgcmVxdWVzdCwgcmluZyk7CisJCWlmIChyZXQpIHsKKwkJCWtmcmVlKHJlcXVlc3QpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXNlcW5vID0gcmVxdWVzdC0+c2Vxbm87CisJfQorCisJaWYgKCFpOTE1X3NlcW5vX3Bhc3NlZChyaW5nLT5nZXRfc2Vxbm8ocmluZyksIHNlcW5vKSkgewogCQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQkJaWVyID0gSTkxNV9SRUFEKERFSUVSKSB8IEk5MTVfUkVBRChHVElFUik7CiAJCWVsc2UKQEAgLTE5NzUsMjEgKzIwMjEsMjMgQEAKIAogCQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3dhaXRfYmVnaW4oZGV2LCBzZXFubyk7CiAKLQkJcmluZy0+d2FpdGluZ19nZW1fc2Vxbm8gPSBzZXFubzsKLQkJcmluZy0+dXNlcl9pcnFfZ2V0KGRldiwgcmluZyk7Ci0JCWlmIChpbnRlcnJ1cHRpYmxlKQotCQkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHJpbmctPmlycV9xdWV1ZSwKLQkJCQlpOTE1X3NlcW5vX3Bhc3NlZCgKLQkJCQkJcmluZy0+Z2V0X3NlcW5vKGRldiwgcmluZyksIHNlcW5vKQotCQkJCXx8IGF0b21pY19yZWFkKCZkZXZfcHJpdi0+bW0ud2VkZ2VkKSk7Ci0JCWVsc2UKLQkJCXdhaXRfZXZlbnQocmluZy0+aXJxX3F1ZXVlLAotCQkJCWk5MTVfc2Vxbm9fcGFzc2VkKAotCQkJCQlyaW5nLT5nZXRfc2Vxbm8oZGV2LCByaW5nKSwgc2Vxbm8pCi0JCQkJfHwgYXRvbWljX3JlYWQoJmRldl9wcml2LT5tbS53ZWRnZWQpKTsKKwkJcmluZy0+d2FpdGluZ19zZXFubyA9IHNlcW5vOworCQlpZiAocmluZy0+aXJxX2dldChyaW5nKSkgeworCQkJaWYgKGludGVycnVwdGlibGUpCisJCQkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHJpbmctPmlycV9xdWV1ZSwKKwkJCQkJCQkgICAgICAgaTkxNV9zZXFub19wYXNzZWQocmluZy0+Z2V0X3NlcW5vKHJpbmcpLCBzZXFubykKKwkJCQkJCQkgICAgICAgfHwgYXRvbWljX3JlYWQoJmRldl9wcml2LT5tbS53ZWRnZWQpKTsKKwkJCWVsc2UKKwkJCQl3YWl0X2V2ZW50KHJpbmctPmlycV9xdWV1ZSwKKwkJCQkJICAgaTkxNV9zZXFub19wYXNzZWQocmluZy0+Z2V0X3NlcW5vKHJpbmcpLCBzZXFubykKKwkJCQkJICAgfHwgYXRvbWljX3JlYWQoJmRldl9wcml2LT5tbS53ZWRnZWQpKTsKIAotCQlyaW5nLT51c2VyX2lycV9wdXQoZGV2LCByaW5nKTsKLQkJcmluZy0+d2FpdGluZ19nZW1fc2Vxbm8gPSAwOworCQkJcmluZy0+aXJxX3B1dChyaW5nKTsKKwkJfSBlbHNlIGlmICh3YWl0X2ZvcihpOTE1X3NlcW5vX3Bhc3NlZChyaW5nLT5nZXRfc2Vxbm8ocmluZyksCisJCQkJCQkgICAgICBzZXFubykgfHwKKwkJCQkgICAgYXRvbWljX3JlYWQoJmRldl9wcml2LT5tbS53ZWRnZWQpLCAzMDAwKSkKKwkJCXJldCA9IC1FQlVTWTsKKwkJcmluZy0+d2FpdGluZ19zZXFubyA9IDA7CiAKIAkJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF93YWl0X2VuZChkZXYsIHNlcW5vKTsKIAl9CkBAIC0xOTk4LDcgKzIwNDYsNyBAQAogCiAJaWYgKHJldCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTKQogCQlEUk1fRVJST1IoIiVzIHJldHVybnMgJWQgKGF3YWl0aW5nICVkIGF0ICVkLCBuZXh0ICVkKVxuIiwKLQkJCSAgX19mdW5jX18sIHJldCwgc2Vxbm8sIHJpbmctPmdldF9zZXFubyhkZXYsIHJpbmcpLAorCQkJICBfX2Z1bmNfXywgcmV0LCBzZXFubywgcmluZy0+Z2V0X3NlcW5vKHJpbmcpLAogCQkJICBkZXZfcHJpdi0+bmV4dF9zZXFubyk7CiAKIAkvKiBEaXJlY3RseSBkaXNwYXRjaCByZXF1ZXN0IHJldGlyaW5nLiAgV2hpbGUgd2UgaGF2ZSB0aGUgd29yayBxdWV1ZQpAQCAtMjAyMyw3MCArMjA3MSwzMCBAQAogCXJldHVybiBpOTE1X2RvX3dhaXRfcmVxdWVzdChkZXYsIHNlcW5vLCAxLCByaW5nKTsKIH0KIAotc3RhdGljIHZvaWQKLWk5MTVfZ2VtX2ZsdXNoX3Jpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAotCQkgICAgdWludDMyX3QgaW52YWxpZGF0ZV9kb21haW5zLAotCQkgICAgdWludDMyX3QgZmx1c2hfZG9tYWlucykKLXsKLQlyaW5nLT5mbHVzaChkZXYsIHJpbmcsIGludmFsaWRhdGVfZG9tYWlucywgZmx1c2hfZG9tYWlucyk7Ci0JaTkxNV9nZW1fcHJvY2Vzc19mbHVzaGluZ19saXN0KGRldiwgZmx1c2hfZG9tYWlucywgcmluZyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pOTE1X2dlbV9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKLQkgICAgICAgdWludDMyX3QgaW52YWxpZGF0ZV9kb21haW5zLAotCSAgICAgICB1aW50MzJfdCBmbHVzaF9kb21haW5zLAotCSAgICAgICB1aW50MzJfdCBmbHVzaF9yaW5ncykKLXsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCWlmIChmbHVzaF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkKLQkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoKGRldik7Ci0KLQlpZiAoKGZsdXNoX2RvbWFpbnMgfCBpbnZhbGlkYXRlX2RvbWFpbnMpICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpIHsKLQkJaWYgKGZsdXNoX3JpbmdzICYgUklOR19SRU5ERVIpCi0JCQlpOTE1X2dlbV9mbHVzaF9yaW5nKGRldiwgZmlsZV9wcml2LAotCQkJCQkgICAgJmRldl9wcml2LT5yZW5kZXJfcmluZywKLQkJCQkJICAgIGludmFsaWRhdGVfZG9tYWlucywgZmx1c2hfZG9tYWlucyk7Ci0JCWlmIChmbHVzaF9yaW5ncyAmIFJJTkdfQlNEKQotCQkJaTkxNV9nZW1fZmx1c2hfcmluZyhkZXYsIGZpbGVfcHJpdiwKLQkJCQkJICAgICZkZXZfcHJpdi0+YnNkX3JpbmcsCi0JCQkJCSAgICBpbnZhbGlkYXRlX2RvbWFpbnMsIGZsdXNoX2RvbWFpbnMpOwotCQlpZiAoZmx1c2hfcmluZ3MgJiBSSU5HX0JMVCkKLQkJCWk5MTVfZ2VtX2ZsdXNoX3JpbmcoZGV2LCBmaWxlX3ByaXYsCi0JCQkJCSAgICAmZGV2X3ByaXYtPmJsdF9yaW5nLAotCQkJCQkgICAgaW52YWxpZGF0ZV9kb21haW5zLCBmbHVzaF9kb21haW5zKTsKLQl9Ci19Ci0KIC8qKgogICogRW5zdXJlcyB0aGF0IGFsbCByZW5kZXJpbmcgdG8gdGhlIG9iamVjdCBoYXMgY29tcGxldGVkIGFuZCB0aGUgb2JqZWN0IGlzCiAgKiBzYWZlIHRvIHVuYmluZCBmcm9tIHRoZSBHVFQgb3IgYWNjZXNzIGZyb20gdGhlIENQVS4KICAqLwotc3RhdGljIGludAotaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAoraW50CitpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCSAgICAgICBib29sIGludGVycnVwdGlibGUpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7CiAJaW50IHJldDsKIAogCS8qIFRoaXMgZnVuY3Rpb24gb25seSBleGlzdHMgdG8gc3VwcG9ydCB3YWl0aW5nIGZvciBleGlzdGluZyByZW5kZXJpbmcsCiAJICogbm90IGZvciBlbWl0dGluZyByZXF1aXJlZCBmbHVzaGVzLgogCSAqLwotCUJVR19PTigob2JqLT53cml0ZV9kb21haW4gJiBJOTE1X0dFTV9HUFVfRE9NQUlOUykgIT0gMCk7CisJQlVHX09OKChvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpICE9IDApOwogCiAJLyogSWYgdGhlcmUgaXMgcmVuZGVyaW5nIHF1ZXVlZCBvbiB0aGUgYnVmZmVyIGJlaW5nIGV2aWN0ZWQsIHdhaXQgZm9yCiAJICogaXQuCiAJICovCi0JaWYgKG9ial9wcml2LT5hY3RpdmUpIHsKKwlpZiAob2JqLT5hY3RpdmUpIHsKIAkJcmV0ID0gaTkxNV9kb193YWl0X3JlcXVlc3QoZGV2LAotCQkJCQkgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8sCisJCQkJCSAgIG9iai0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8sCiAJCQkJCSAgIGludGVycnVwdGlibGUsCi0JCQkJCSAgIG9ial9wcml2LT5yaW5nKTsKKwkJCQkJICAgb2JqLT5yaW5nKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMjA5OCwxNyArMjEwNiwxNCBAQAogICogVW5iaW5kcyBhbiBvYmplY3QgZnJvbSB0aGUgR1RUIGFwZXJ0dXJlLgogICovCiBpbnQKLWk5MTVfZ2VtX29iamVjdF91bmJpbmQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCitpOTE1X2dlbV9vYmplY3RfdW5iaW5kKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpCisJaWYgKG9iai0+Z3R0X3NwYWNlID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JaWYgKG9ial9wcml2LT5waW5fY291bnQgIT0gMCkgeworCWlmIChvYmotPnBpbl9jb3VudCAhPSAwKSB7CiAJCURSTV9FUlJPUigiQXR0ZW1wdGluZyB0byB1bmJpbmQgcGlubmVkIGJ1ZmZlclxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTIxMzEsMjcgKzIxMzYsMjcgQEAKIAkgKi8KIAlpZiAocmV0KSB7CiAJCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7Ci0JCW9iai0+cmVhZF9kb21haW5zID0gb2JqLT53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ1BVOworCQlvYmotPmJhc2UucmVhZF9kb21haW5zID0gb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7CiAJfQogCiAJLyogcmVsZWFzZSB0aGUgZmVuY2UgcmVnIF9hZnRlcl8gZmx1c2hpbmcgKi8KLQlpZiAob2JqX3ByaXYtPmZlbmNlX3JlZyAhPSBJOTE1X0ZFTkNFX1JFR19OT05FKQotCQlpOTE1X2dlbV9jbGVhcl9mZW5jZV9yZWcob2JqKTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcHV0X2ZlbmNlKG9iaik7CisJaWYgKHJldCA9PSAtRVJFU1RBUlRTWVMpCisJCXJldHVybiByZXQ7CiAKLQlkcm1fdW5iaW5kX2FncChvYmpfcHJpdi0+YWdwX21lbSk7Ci0JZHJtX2ZyZWVfYWdwKG9ial9wcml2LT5hZ3BfbWVtLCBvYmotPnNpemUgLyBQQUdFX1NJWkUpOworCWk5MTVfZ2VtX2d0dF91bmJpbmRfb2JqZWN0KG9iaik7CisJaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlc19ndHQob2JqKTsKIAotCWk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqKTsKLQlCVUdfT04ob2JqX3ByaXYtPnBhZ2VzX3JlZmNvdW50KTsKKwlsaXN0X2RlbF9pbml0KCZvYmotPmd0dF9saXN0KTsKKwlsaXN0X2RlbF9pbml0KCZvYmotPm1tX2xpc3QpOworCS8qIEF2b2lkIGFuIHVubmVjZXNzYXJ5IGNhbGwgdG8gdW5iaW5kIG9uIHJlYmluZC4gKi8KKwlvYmotPm1hcF9hbmRfZmVuY2VhYmxlID0gdHJ1ZTsKIAotCWk5MTVfZ2VtX2luZm9fcmVtb3ZlX2d0dChkZXZfcHJpdiwgb2JqLT5zaXplKTsKLQlsaXN0X2RlbF9pbml0KCZvYmpfcHJpdi0+bW1fbGlzdCk7CisJZHJtX21tX3B1dF9ibG9jayhvYmotPmd0dF9zcGFjZSk7CisJb2JqLT5ndHRfc3BhY2UgPSBOVUxMOworCW9iai0+Z3R0X29mZnNldCA9IDA7CiAKLQlkcm1fbW1fcHV0X2Jsb2NrKG9ial9wcml2LT5ndHRfc3BhY2UpOwotCW9ial9wcml2LT5ndHRfc3BhY2UgPSBOVUxMOwotCW9ial9wcml2LT5ndHRfb2Zmc2V0ID0gMDsKLQotCWlmIChpOTE1X2dlbV9vYmplY3RfaXNfcHVyZ2VhYmxlKG9ial9wcml2KSkKKwlpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX3B1cmdlYWJsZShvYmopKQogCQlpOTE1X2dlbV9vYmplY3RfdHJ1bmNhdGUob2JqKTsKIAogCXRyYWNlX2k5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKQEAgLTIxNTksMTQgKzIxNjQsMzcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQKK2k5MTVfZ2VtX2ZsdXNoX3Jpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKKwkJICAgIHVpbnQzMl90IGludmFsaWRhdGVfZG9tYWlucywKKwkJICAgIHVpbnQzMl90IGZsdXNoX2RvbWFpbnMpCit7CisJaW50IHJldDsKKworCXJldCA9IHJpbmctPmZsdXNoKHJpbmcsIGludmFsaWRhdGVfZG9tYWlucywgZmx1c2hfZG9tYWlucyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWk5MTVfZ2VtX3Byb2Nlc3NfZmx1c2hpbmdfbGlzdChkZXYsIGZsdXNoX2RvbWFpbnMsIHJpbmcpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGk5MTVfcmluZ19pZGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKIHsKKwlpbnQgcmV0OworCiAJaWYgKGxpc3RfZW1wdHkoJnJpbmctPmdwdV93cml0ZV9saXN0KSAmJiBsaXN0X2VtcHR5KCZyaW5nLT5hY3RpdmVfbGlzdCkpCiAJCXJldHVybiAwOwogCi0JaTkxNV9nZW1fZmx1c2hfcmluZyhkZXYsIE5VTEwsIHJpbmcsCi0JCQkgICAgSTkxNV9HRU1fR1BVX0RPTUFJTlMsIEk5MTVfR0VNX0dQVV9ET01BSU5TKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnJpbmctPmdwdV93cml0ZV9saXN0KSkgeworCQlyZXQgPSBpOTE1X2dlbV9mbHVzaF9yaW5nKGRldiwgcmluZywKKwkJCQkgICAgSTkxNV9HRU1fR1BVX0RPTUFJTlMsIEk5MTVfR0VNX0dQVV9ET01BSU5TKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCiAJcmV0dXJuIGk5MTVfd2FpdF9yZXF1ZXN0KGRldiwKIAkJCQkgaTkxNV9nZW1fbmV4dF9yZXF1ZXN0X3NlcW5vKGRldiwgcmluZyksCiAJCQkJIHJpbmcpOwpAQCAtMjE3Nyw3ICsyMjA1LDcgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlib29sIGxpc3RzX2VtcHR5OwotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAogCWxpc3RzX2VtcHR5ID0gKGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSAmJgogCQkgICAgICAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KSk7CkBAIC0yMTg1LDI1OCArMjIxMywzMDUgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBGbHVzaCBldmVyeXRoaW5nIG9udG8gdGhlIGluYWN0aXZlIGxpc3QuICovCi0JcmV0ID0gaTkxNV9yaW5nX2lkbGUoZGV2LCAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gaTkxNV9yaW5nX2lkbGUoZGV2LCAmZGV2X3ByaXYtPmJzZF9yaW5nKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gaTkxNV9yaW5nX2lkbGUoZGV2LCAmZGV2X3ByaXYtPmJsdF9yaW5nKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKSB7CisJCXJldCA9IGk5MTVfcmluZ19pZGxlKGRldiwgJmRldl9wcml2LT5yaW5nW2ldKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgIGdmcF90IGdmcG1hc2spCitzdGF0aWMgaW50IHNhbmR5YnJpZGdlX3dyaXRlX2ZlbmNlX3JlZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnBpcGVsaW5lZCkKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwotCWludCBwYWdlX2NvdW50LCBpOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQlCVUdfT04ob2JqX3ByaXYtPnBhZ2VzX3JlZmNvdW50Ci0JCQk9PSBEUk1fSTkxNV9HRU1fT0JKRUNUX01BWF9QQUdFU19SRUZDT1VOVCk7Ci0KLQlpZiAob2JqX3ByaXYtPnBhZ2VzX3JlZmNvdW50KysgIT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBHZXQgdGhlIGxpc3Qgb2YgcGFnZXMgb3V0IG9mIG91ciBzdHJ1Y3QgZmlsZS4gIFRoZXknbGwgYmUgcGlubmVkCi0JICogYXQgdGhpcyBwb2ludCB1bnRpbCB3ZSByZWxlYXNlIHRoZW0uCi0JICovCi0JcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKLQlCVUdfT04ob2JqX3ByaXYtPnBhZ2VzICE9IE5VTEwpOwotCW9ial9wcml2LT5wYWdlcyA9IGRybV9jYWxsb2NfbGFyZ2UocGFnZV9jb3VudCwgc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKLQlpZiAob2JqX3ByaXYtPnBhZ2VzID09IE5VTEwpIHsKLQkJb2JqX3ByaXYtPnBhZ2VzX3JlZmNvdW50LS07Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWlub2RlID0gb2JqLT5maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCW1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwotCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspIHsKLQkJcGFnZSA9IHJlYWRfY2FjaGVfcGFnZV9nZnAobWFwcGluZywgaSwKLQkJCQkJICAgR0ZQX0hJR0hVU0VSIHwKLQkJCQkJICAgX19HRlBfQ09MRCB8Ci0JCQkJCSAgIF9fR0ZQX1JFQ0xBSU1BQkxFIHwKLQkJCQkJICAgZ2ZwbWFzayk7Ci0JCWlmIChJU19FUlIocGFnZSkpCi0JCQlnb3RvIGVycl9wYWdlczsKLQotCQlvYmpfcHJpdi0+cGFnZXNbaV0gPSBwYWdlOwotCX0KLQotCWlmIChvYmpfcHJpdi0+dGlsaW5nX21vZGUgIT0gSTkxNV9USUxJTkdfTk9ORSkKLQkJaTkxNV9nZW1fb2JqZWN0X2RvX2JpdF8xN19zd2l6emxlKG9iaik7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX3BhZ2VzOgotCXdoaWxlIChpLS0pCi0JCXBhZ2VfY2FjaGVfcmVsZWFzZShvYmpfcHJpdi0+cGFnZXNbaV0pOwotCi0JZHJtX2ZyZWVfbGFyZ2Uob2JqX3ByaXYtPnBhZ2VzKTsKLQlvYmpfcHJpdi0+cGFnZXMgPSBOVUxMOwotCW9ial9wcml2LT5wYWdlc19yZWZjb3VudC0tOwotCXJldHVybiBQVFJfRVJSKHBhZ2UpOwotfQotCi1zdGF0aWMgdm9pZCBzYW5keWJyaWRnZV93cml0ZV9mZW5jZV9yZWcoc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqcmVnKQotewotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gcmVnLT5vYmo7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2OwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7Ci0JaW50IHJlZ251bSA9IG9ial9wcml2LT5mZW5jZV9yZWc7CisJdTMyIHNpemUgPSBvYmotPmd0dF9zcGFjZS0+c2l6ZTsKKwlpbnQgcmVnbnVtID0gb2JqLT5mZW5jZV9yZWc7CiAJdWludDY0X3QgdmFsOwogCi0JdmFsID0gKHVpbnQ2NF90KSgob2JqX3ByaXYtPmd0dF9vZmZzZXQgKyBvYmotPnNpemUgLSA0MDk2KSAmCi0JCSAgICAweGZmZmZmMDAwKSA8PCAzMjsKLQl2YWwgfD0gb2JqX3ByaXYtPmd0dF9vZmZzZXQgJiAweGZmZmZmMDAwOwotCXZhbCB8PSAodWludDY0X3QpKChvYmpfcHJpdi0+c3RyaWRlIC8gMTI4KSAtIDEpIDw8CisJdmFsID0gKHVpbnQ2NF90KSgob2JqLT5ndHRfb2Zmc2V0ICsgc2l6ZSAtIDQwOTYpICYKKwkJCSAweGZmZmZmMDAwKSA8PCAzMjsKKwl2YWwgfD0gb2JqLT5ndHRfb2Zmc2V0ICYgMHhmZmZmZjAwMDsKKwl2YWwgfD0gKHVpbnQ2NF90KSgob2JqLT5zdHJpZGUgLyAxMjgpIC0gMSkgPDwKIAkJU0FORFlCUklER0VfRkVOQ0VfUElUQ0hfU0hJRlQ7CiAKLQlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kpCisJaWYgKG9iai0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfWSkKIAkJdmFsIHw9IDEgPDwgSTk2NV9GRU5DRV9USUxJTkdfWV9TSElGVDsKIAl2YWwgfD0gSTk2NV9GRU5DRV9SRUdfVkFMSUQ7CiAKLQlJOTE1X1dSSVRFNjQoRkVOQ0VfUkVHX1NBTkRZQlJJREdFXzAgKyAocmVnbnVtICogOCksIHZhbCk7CisJaWYgKHBpcGVsaW5lZCkgeworCQlpbnQgcmV0ID0gaW50ZWxfcmluZ19iZWdpbihwaXBlbGluZWQsIDYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpbnRlbF9yaW5nX2VtaXQocGlwZWxpbmVkLCBNSV9OT09QKTsKKwkJaW50ZWxfcmluZ19lbWl0KHBpcGVsaW5lZCwgTUlfTE9BRF9SRUdJU1RFUl9JTU0oMikpOworCQlpbnRlbF9yaW5nX2VtaXQocGlwZWxpbmVkLCBGRU5DRV9SRUdfU0FORFlCUklER0VfMCArIHJlZ251bSo4KTsKKwkJaW50ZWxfcmluZ19lbWl0KHBpcGVsaW5lZCwgKHUzMil2YWwpOworCQlpbnRlbF9yaW5nX2VtaXQocGlwZWxpbmVkLCBGRU5DRV9SRUdfU0FORFlCUklER0VfMCArIHJlZ251bSo4ICsgNCk7CisJCWludGVsX3JpbmdfZW1pdChwaXBlbGluZWQsICh1MzIpKHZhbCA+PiAzMikpOworCQlpbnRlbF9yaW5nX2FkdmFuY2UocGlwZWxpbmVkKTsKKwl9IGVsc2UKKwkJSTkxNV9XUklURTY0KEZFTkNFX1JFR19TQU5EWUJSSURHRV8wICsgcmVnbnVtICogOCwgdmFsKTsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpOTY1X3dyaXRlX2ZlbmNlX3JlZyhzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpyZWcpCitzdGF0aWMgaW50IGk5NjVfd3JpdGVfZmVuY2VfcmVnKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpwaXBlbGluZWQpCiB7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSByZWctPm9iajsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKLQlpbnQgcmVnbnVtID0gb2JqX3ByaXYtPmZlbmNlX3JlZzsKKwl1MzIgc2l6ZSA9IG9iai0+Z3R0X3NwYWNlLT5zaXplOworCWludCByZWdudW0gPSBvYmotPmZlbmNlX3JlZzsKIAl1aW50NjRfdCB2YWw7CiAKLQl2YWwgPSAodWludDY0X3QpKChvYmpfcHJpdi0+Z3R0X29mZnNldCArIG9iai0+c2l6ZSAtIDQwOTYpICYKKwl2YWwgPSAodWludDY0X3QpKChvYmotPmd0dF9vZmZzZXQgKyBzaXplIC0gNDA5NikgJgogCQkgICAgMHhmZmZmZjAwMCkgPDwgMzI7Ci0JdmFsIHw9IG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgMHhmZmZmZjAwMDsKLQl2YWwgfD0gKChvYmpfcHJpdi0+c3RyaWRlIC8gMTI4KSAtIDEpIDw8IEk5NjVfRkVOQ0VfUElUQ0hfU0hJRlQ7Ci0JaWYgKG9ial9wcml2LT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19ZKQorCXZhbCB8PSBvYmotPmd0dF9vZmZzZXQgJiAweGZmZmZmMDAwOworCXZhbCB8PSAoKG9iai0+c3RyaWRlIC8gMTI4KSAtIDEpIDw8IEk5NjVfRkVOQ0VfUElUQ0hfU0hJRlQ7CisJaWYgKG9iai0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfWSkKIAkJdmFsIHw9IDEgPDwgSTk2NV9GRU5DRV9USUxJTkdfWV9TSElGVDsKIAl2YWwgfD0gSTk2NV9GRU5DRV9SRUdfVkFMSUQ7CiAKLQlJOTE1X1dSSVRFNjQoRkVOQ0VfUkVHXzk2NV8wICsgKHJlZ251bSAqIDgpLCB2YWwpOworCWlmIChwaXBlbGluZWQpIHsKKwkJaW50IHJldCA9IGludGVsX3JpbmdfYmVnaW4ocGlwZWxpbmVkLCA2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaW50ZWxfcmluZ19lbWl0KHBpcGVsaW5lZCwgTUlfTk9PUCk7CisJCWludGVsX3JpbmdfZW1pdChwaXBlbGluZWQsIE1JX0xPQURfUkVHSVNURVJfSU1NKDIpKTsKKwkJaW50ZWxfcmluZ19lbWl0KHBpcGVsaW5lZCwgRkVOQ0VfUkVHXzk2NV8wICsgcmVnbnVtKjgpOworCQlpbnRlbF9yaW5nX2VtaXQocGlwZWxpbmVkLCAodTMyKXZhbCk7CisJCWludGVsX3JpbmdfZW1pdChwaXBlbGluZWQsIEZFTkNFX1JFR185NjVfMCArIHJlZ251bSo4ICsgNCk7CisJCWludGVsX3JpbmdfZW1pdChwaXBlbGluZWQsICh1MzIpKHZhbCA+PiAzMikpOworCQlpbnRlbF9yaW5nX2FkdmFuY2UocGlwZWxpbmVkKTsKKwl9IGVsc2UKKwkJSTkxNV9XUklURTY0KEZFTkNFX1JFR185NjVfMCArIHJlZ251bSAqIDgsIHZhbCk7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaTkxNV93cml0ZV9mZW5jZV9yZWcoc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqcmVnKQorc3RhdGljIGludCBpOTE1X3dyaXRlX2ZlbmNlX3JlZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcGlwZWxpbmVkKQogewotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gcmVnLT5vYmo7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2OwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7Ci0JaW50IHJlZ251bSA9IG9ial9wcml2LT5mZW5jZV9yZWc7CisJdTMyIHNpemUgPSBvYmotPmd0dF9zcGFjZS0+c2l6ZTsKKwl1MzIgZmVuY2VfcmVnLCB2YWwsIHBpdGNoX3ZhbDsKIAlpbnQgdGlsZV93aWR0aDsKLQl1aW50MzJfdCBmZW5jZV9yZWcsIHZhbDsKLQl1aW50MzJfdCBwaXRjaF92YWw7CiAKLQlpZiAoKG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgfkk5MTVfRkVOQ0VfU1RBUlRfTUFTSykgfHwKLQkgICAgKG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgKG9iai0+c2l6ZSAtIDEpKSkgewotCQlXQVJOKDEsICIlczogb2JqZWN0IDB4JTA4eCBub3QgMU0gb3Igc2l6ZSAoMHglengpIGFsaWduZWRcbiIsCi0JCSAgICAgX19mdW5jX18sIG9ial9wcml2LT5ndHRfb2Zmc2V0LCBvYmotPnNpemUpOwotCQlyZXR1cm47Ci0JfQorCWlmIChXQVJOKChvYmotPmd0dF9vZmZzZXQgJiB+STkxNV9GRU5DRV9TVEFSVF9NQVNLKSB8fAorCQkgKHNpemUgJiAtc2l6ZSkgIT0gc2l6ZSB8fAorCQkgKG9iai0+Z3R0X29mZnNldCAmIChzaXplIC0gMSkpLAorCQkgIm9iamVjdCAweCUwOHggW2ZlbmNlYWJsZT8gJWRdIG5vdCAxTSBvciBwb3Qtc2l6ZSAoMHglMDh4KSBhbGlnbmVkXG4iLAorCQkgb2JqLT5ndHRfb2Zmc2V0LCBvYmotPm1hcF9hbmRfZmVuY2VhYmxlLCBzaXplKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kgJiYKLQkgICAgSEFTXzEyOF9CWVRFX1lfVElMSU5HKGRldikpCisJaWYgKG9iai0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfWSAmJiBIQVNfMTI4X0JZVEVfWV9USUxJTkcoZGV2KSkKIAkJdGlsZV93aWR0aCA9IDEyODsKIAllbHNlCiAJCXRpbGVfd2lkdGggPSA1MTI7CiAKIAkvKiBOb3RlOiBwaXRjaCBiZXR0ZXIgYmUgYSBwb3dlciBvZiB0d28gdGlsZSB3aWR0aHMgKi8KLQlwaXRjaF92YWwgPSBvYmpfcHJpdi0+c3RyaWRlIC8gdGlsZV93aWR0aDsKKwlwaXRjaF92YWwgPSBvYmotPnN0cmlkZSAvIHRpbGVfd2lkdGg7CiAJcGl0Y2hfdmFsID0gZmZzKHBpdGNoX3ZhbCkgLSAxOwogCi0JaWYgKG9ial9wcml2LT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19ZICYmCi0JICAgIEhBU18xMjhfQllURV9ZX1RJTElORyhkZXYpKQotCQlXQVJOX09OKHBpdGNoX3ZhbCA+IEk4MzBfRkVOQ0VfTUFYX1BJVENIX1ZBTCk7Ci0JZWxzZQotCQlXQVJOX09OKHBpdGNoX3ZhbCA+IEk5MTVfRkVOQ0VfTUFYX1BJVENIX1ZBTCk7Ci0KLQl2YWwgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKLQlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kpCisJdmFsID0gb2JqLT5ndHRfb2Zmc2V0OworCWlmIChvYmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kpCiAJCXZhbCB8PSAxIDw8IEk4MzBfRkVOQ0VfVElMSU5HX1lfU0hJRlQ7Ci0JdmFsIHw9IEk5MTVfRkVOQ0VfU0laRV9CSVRTKG9iai0+c2l6ZSk7CisJdmFsIHw9IEk5MTVfRkVOQ0VfU0laRV9CSVRTKHNpemUpOwogCXZhbCB8PSBwaXRjaF92YWwgPDwgSTgzMF9GRU5DRV9QSVRDSF9TSElGVDsKIAl2YWwgfD0gSTgzMF9GRU5DRV9SRUdfVkFMSUQ7CiAKLQlpZiAocmVnbnVtIDwgOCkKLQkJZmVuY2VfcmVnID0gRkVOQ0VfUkVHXzgzMF8wICsgKHJlZ251bSAqIDQpOworCWZlbmNlX3JlZyA9IG9iai0+ZmVuY2VfcmVnOworCWlmIChmZW5jZV9yZWcgPCA4KQorCQlmZW5jZV9yZWcgPSBGRU5DRV9SRUdfODMwXzAgKyBmZW5jZV9yZWcgKiA0OwogCWVsc2UKLQkJZmVuY2VfcmVnID0gRkVOQ0VfUkVHXzk0NV84ICsgKChyZWdudW0gLSA4KSAqIDQpOwotCUk5MTVfV1JJVEUoZmVuY2VfcmVnLCB2YWwpOworCQlmZW5jZV9yZWcgPSBGRU5DRV9SRUdfOTQ1XzggKyAoZmVuY2VfcmVnIC0gOCkgKiA0OworCisJaWYgKHBpcGVsaW5lZCkgeworCQlpbnQgcmV0ID0gaW50ZWxfcmluZ19iZWdpbihwaXBlbGluZWQsIDQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpbnRlbF9yaW5nX2VtaXQocGlwZWxpbmVkLCBNSV9OT09QKTsKKwkJaW50ZWxfcmluZ19lbWl0KHBpcGVsaW5lZCwgTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSkpOworCQlpbnRlbF9yaW5nX2VtaXQocGlwZWxpbmVkLCBmZW5jZV9yZWcpOworCQlpbnRlbF9yaW5nX2VtaXQocGlwZWxpbmVkLCB2YWwpOworCQlpbnRlbF9yaW5nX2FkdmFuY2UocGlwZWxpbmVkKTsKKwl9IGVsc2UKKwkJSTkxNV9XUklURShmZW5jZV9yZWcsIHZhbCk7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaTgzMF93cml0ZV9mZW5jZV9yZWcoc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqcmVnKQorc3RhdGljIGludCBpODMwX3dyaXRlX2ZlbmNlX3JlZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcGlwZWxpbmVkKQogewotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gcmVnLT5vYmo7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2OwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7Ci0JaW50IHJlZ251bSA9IG9ial9wcml2LT5mZW5jZV9yZWc7CisJdTMyIHNpemUgPSBvYmotPmd0dF9zcGFjZS0+c2l6ZTsKKwlpbnQgcmVnbnVtID0gb2JqLT5mZW5jZV9yZWc7CiAJdWludDMyX3QgdmFsOwogCXVpbnQzMl90IHBpdGNoX3ZhbDsKLQl1aW50MzJfdCBmZW5jZV9zaXplX2JpdHM7CiAKLQlpZiAoKG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgfkk4MzBfRkVOQ0VfU1RBUlRfTUFTSykgfHwKLQkgICAgKG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgKG9iai0+c2l6ZSAtIDEpKSkgewotCQlXQVJOKDEsICIlczogb2JqZWN0IDB4JTA4eCBub3QgNTEySyBvciBzaXplIGFsaWduZWRcbiIsCi0JCSAgICAgX19mdW5jX18sIG9ial9wcml2LT5ndHRfb2Zmc2V0KTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoV0FSTigob2JqLT5ndHRfb2Zmc2V0ICYgfkk4MzBfRkVOQ0VfU1RBUlRfTUFTSykgfHwKKwkJIChzaXplICYgLXNpemUpICE9IHNpemUgfHwKKwkJIChvYmotPmd0dF9vZmZzZXQgJiAoc2l6ZSAtIDEpKSwKKwkJICJvYmplY3QgMHglMDh4IG5vdCA1MTJLIG9yIHBvdC1zaXplIDB4JTA4eCBhbGlnbmVkXG4iLAorCQkgb2JqLT5ndHRfb2Zmc2V0LCBzaXplKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwaXRjaF92YWwgPSBvYmpfcHJpdi0+c3RyaWRlIC8gMTI4OworCXBpdGNoX3ZhbCA9IG9iai0+c3RyaWRlIC8gMTI4OwogCXBpdGNoX3ZhbCA9IGZmcyhwaXRjaF92YWwpIC0gMTsKLQlXQVJOX09OKHBpdGNoX3ZhbCA+IEk4MzBfRkVOQ0VfTUFYX1BJVENIX1ZBTCk7CiAKLQl2YWwgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKLQlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kpCisJdmFsID0gb2JqLT5ndHRfb2Zmc2V0OworCWlmIChvYmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kpCiAJCXZhbCB8PSAxIDw8IEk4MzBfRkVOQ0VfVElMSU5HX1lfU0hJRlQ7Ci0JZmVuY2Vfc2l6ZV9iaXRzID0gSTgzMF9GRU5DRV9TSVpFX0JJVFMob2JqLT5zaXplKTsKLQlXQVJOX09OKGZlbmNlX3NpemVfYml0cyAmIH4weDAwMDAwZjAwKTsKLQl2YWwgfD0gZmVuY2Vfc2l6ZV9iaXRzOworCXZhbCB8PSBJODMwX0ZFTkNFX1NJWkVfQklUUyhzaXplKTsKIAl2YWwgfD0gcGl0Y2hfdmFsIDw8IEk4MzBfRkVOQ0VfUElUQ0hfU0hJRlQ7CiAJdmFsIHw9IEk4MzBfRkVOQ0VfUkVHX1ZBTElEOwogCi0JSTkxNV9XUklURShGRU5DRV9SRUdfODMwXzAgKyAocmVnbnVtICogNCksIHZhbCk7CisJaWYgKHBpcGVsaW5lZCkgeworCQlpbnQgcmV0ID0gaW50ZWxfcmluZ19iZWdpbihwaXBlbGluZWQsIDQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpbnRlbF9yaW5nX2VtaXQocGlwZWxpbmVkLCBNSV9OT09QKTsKKwkJaW50ZWxfcmluZ19lbWl0KHBpcGVsaW5lZCwgTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSkpOworCQlpbnRlbF9yaW5nX2VtaXQocGlwZWxpbmVkLCBGRU5DRV9SRUdfODMwXzAgKyByZWdudW0qNCk7CisJCWludGVsX3JpbmdfZW1pdChwaXBlbGluZWQsIHZhbCk7CisJCWludGVsX3JpbmdfYWR2YW5jZShwaXBlbGluZWQpOworCX0gZWxzZQorCQlJOTE1X1dSSVRFKEZFTkNFX1JFR184MzBfMCArIHJlZ251bSAqIDQsIHZhbCk7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpOTE1X2ZpbmRfZmVuY2VfcmVnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgICAgYm9vbCBpbnRlcnJ1cHRpYmxlKQorc3RhdGljIGJvb2wgcmluZ19wYXNzZWRfc2Vxbm8oc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLCB1MzIgc2Vxbm8pCiB7Ci0Jc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqcmVnID0gTlVMTDsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBOVUxMOworCXJldHVybiBpOTE1X3NlcW5vX3Bhc3NlZChyaW5nLT5nZXRfc2Vxbm8ocmluZyksIHNlcW5vKTsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2ZlbmNlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpwaXBlbGluZWQsCisJCQkgICAgYm9vbCBpbnRlcnJ1cHRpYmxlKQoreworCWludCByZXQ7CisKKwlpZiAob2JqLT5mZW5jZWRfZ3B1X2FjY2VzcykgeworCQlpZiAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKSB7CisJCQlyZXQgPSBpOTE1X2dlbV9mbHVzaF9yaW5nKG9iai0+YmFzZS5kZXYsCisJCQkJCQkgIG9iai0+bGFzdF9mZW5jZWRfcmluZywKKwkJCQkJCSAgMCwgb2JqLT5iYXNlLndyaXRlX2RvbWFpbik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKworCQlvYmotPmZlbmNlZF9ncHVfYWNjZXNzID0gZmFsc2U7CisJfQorCisJaWYgKG9iai0+bGFzdF9mZW5jZWRfc2Vxbm8gJiYgcGlwZWxpbmVkICE9IG9iai0+bGFzdF9mZW5jZWRfcmluZykgeworCQlpZiAoIXJpbmdfcGFzc2VkX3NlcW5vKG9iai0+bGFzdF9mZW5jZWRfcmluZywKKwkJCQkgICAgICAgb2JqLT5sYXN0X2ZlbmNlZF9zZXFubykpIHsKKwkJCXJldCA9IGk5MTVfZG9fd2FpdF9yZXF1ZXN0KG9iai0+YmFzZS5kZXYsCisJCQkJCQkgICBvYmotPmxhc3RfZmVuY2VkX3NlcW5vLAorCQkJCQkJICAgaW50ZXJydXB0aWJsZSwKKwkJCQkJCSAgIG9iai0+bGFzdF9mZW5jZWRfcmluZyk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKworCQlvYmotPmxhc3RfZmVuY2VkX3NlcW5vID0gMDsKKwkJb2JqLT5sYXN0X2ZlbmNlZF9yaW5nID0gTlVMTDsKKwl9CisKKwkvKiBFbnN1cmUgdGhhdCBhbGwgQ1BVIHJlYWRzIGFyZSBjb21wbGV0ZWQgYmVmb3JlIGluc3RhbGxpbmcgYSBmZW5jZQorCSAqIGFuZCBhbGwgd3JpdGVzIGJlZm9yZSByZW1vdmluZyB0aGUgZmVuY2UuCisJICovCisJaWYgKG9iai0+YmFzZS5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fR1RUKQorCQltYigpOworCisJcmV0dXJuIDA7Cit9CisKK2ludAoraTkxNV9nZW1fb2JqZWN0X3B1dF9mZW5jZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCWludCByZXQ7CisKKwlpZiAob2JqLT50aWxpbmdfbW9kZSkKKwkJaTkxNV9nZW1fcmVsZWFzZV9tbWFwKG9iaik7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZmVuY2Uob2JqLCBOVUxMLCB0cnVlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKG9iai0+ZmVuY2VfcmVnICE9IEk5MTVfRkVOQ0VfUkVHX05PTkUpIHsKKwkJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gb2JqLT5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CisJCWk5MTVfZ2VtX2NsZWFyX2ZlbmNlX3JlZyhvYmotPmJhc2UuZGV2LAorCQkJCQkgJmRldl9wcml2LT5mZW5jZV9yZWdzW29iai0+ZmVuY2VfcmVnXSk7CisKKwkJb2JqLT5mZW5jZV9yZWcgPSBJOTE1X0ZFTkNFX1JFR19OT05FOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqCitpOTE1X2ZpbmRfZmVuY2VfcmVnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnBpcGVsaW5lZCkKK3sKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gTlVMTDsKLQlpbnQgaSwgYXZhaWwsIHJldDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpyZWcsICpmaXJzdCwgKmF2YWlsOworCWludCBpOwogCiAJLyogRmlyc3QgdHJ5IHRvIGZpbmQgYSBmcmVlIHJlZyAqLwotCWF2YWlsID0gMDsKKwlhdmFpbCA9IE5VTEw7CiAJZm9yIChpID0gZGV2X3ByaXYtPmZlbmNlX3JlZ19zdGFydDsgaSA8IGRldl9wcml2LT5udW1fZmVuY2VfcmVnczsgaSsrKSB7CiAJCXJlZyA9ICZkZXZfcHJpdi0+ZmVuY2VfcmVnc1tpXTsKIAkJaWYgKCFyZWctPm9iaikKLQkJCXJldHVybiBpOworCQkJcmV0dXJuIHJlZzsKIAotCQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKHJlZy0+b2JqKTsKLQkJaWYgKCFvYmpfcHJpdi0+cGluX2NvdW50KQotCQkgICAgYXZhaWwrKzsKKwkJaWYgKCFyZWctPm9iai0+cGluX2NvdW50KQorCQkJYXZhaWwgPSByZWc7CiAJfQogCi0JaWYgKGF2YWlsID09IDApCi0JCXJldHVybiAtRU5PU1BDOworCWlmIChhdmFpbCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKIAogCS8qIE5vbmUgYXZhaWxhYmxlLCB0cnkgdG8gc3RlYWwgb25lIG9yIHdhaXQgZm9yIGEgdXNlciB0byBmaW5pc2ggKi8KLQlpID0gSTkxNV9GRU5DRV9SRUdfTk9ORTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlZywgJmRldl9wcml2LT5tbS5mZW5jZV9saXN0LAotCQkJICAgIGxydV9saXN0KSB7Ci0JCW9iaiA9IHJlZy0+b2JqOwotCQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7Ci0KLQkJaWYgKG9ial9wcml2LT5waW5fY291bnQpCisJYXZhaWwgPSBmaXJzdCA9IE5VTEw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsICZkZXZfcHJpdi0+bW0uZmVuY2VfbGlzdCwgbHJ1X2xpc3QpIHsKKwkJaWYgKHJlZy0+b2JqLT5waW5fY291bnQpCiAJCQljb250aW51ZTsKIAotCQkvKiBmb3VuZCBvbmUhICovCi0JCWkgPSBvYmpfcHJpdi0+ZmVuY2VfcmVnOwotCQlicmVhazsKKwkJaWYgKGZpcnN0ID09IE5VTEwpCisJCQlmaXJzdCA9IHJlZzsKKworCQlpZiAoIXBpcGVsaW5lZCB8fAorCQkgICAgIXJlZy0+b2JqLT5sYXN0X2ZlbmNlZF9yaW5nIHx8CisJCSAgICByZWctPm9iai0+bGFzdF9mZW5jZWRfcmluZyA9PSBwaXBlbGluZWQpIHsKKwkJCWF2YWlsID0gcmVnOworCQkJYnJlYWs7CisJCX0KIAl9CiAKLQlCVUdfT04oaSA9PSBJOTE1X0ZFTkNFX1JFR19OT05FKTsKKwlpZiAoYXZhaWwgPT0gTlVMTCkKKwkJYXZhaWwgPSBmaXJzdDsKIAotCS8qIFdlIG9ubHkgaGF2ZSBhIHJlZmVyZW5jZSBvbiBvYmogZnJvbSB0aGUgYWN0aXZlIGxpc3QuIHB1dF9mZW5jZV9yZWcKLQkgKiBtaWdodCBkcm9wIHRoYXQgb25lLCBjYXVzaW5nIGEgdXNlLWFmdGVyLWZyZWUgaW4gaXQuIFNvIGhvbGQgYQotCSAqIHByaXZhdGUgcmVmZXJlbmNlIHRvIG9iaiBsaWtlIHRoZSBvdGhlciBjYWxsZXJzIG9mIHB1dF9mZW5jZV9yZWcKLQkgKiAoc2V0X3RpbGluZyBpb2N0bCkgZG8uICovCi0JZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7Ci0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3B1dF9mZW5jZV9yZWcob2JqLCBpbnRlcnJ1cHRpYmxlKTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwotCWlmIChyZXQgIT0gMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBpOworCXJldHVybiBhdmFpbDsKIH0KIAogLyoqCi0gKiBpOTE1X2dlbV9vYmplY3RfZ2V0X2ZlbmNlX3JlZyAtIHNldCB1cCBhIGZlbmNlIHJlZyBmb3IgYW4gb2JqZWN0CisgKiBpOTE1X2dlbV9vYmplY3RfZ2V0X2ZlbmNlIC0gc2V0IHVwIGEgZmVuY2UgcmVnIGZvciBhbiBvYmplY3QKICAqIEBvYmo6IG9iamVjdCB0byBtYXAgdGhyb3VnaCBhIGZlbmNlIHJlZworICogQHBpcGVsaW5lZDogcmluZyBvbiB3aGljaCB0byBxdWV1ZSB0aGUgY2hhbmdlLCBvciBOVUxMIGZvciBDUFUgYWNjZXNzCisgKiBAaW50ZXJydXB0aWJsZTogbXVzdCB3ZSB3YWl0IHVuaW50ZXJydXB0aWJseSBmb3IgdGhlIHJlZ2lzdGVyIHRvIHJldGlyZT8KICAqCiAgKiBXaGVuIG1hcHBpbmcgb2JqZWN0cyB0aHJvdWdoIHRoZSBHVFQsIHVzZXJzcGFjZSB3YW50cyB0byBiZSBhYmxlIHRvIHdyaXRlCiAgKiB0byB0aGVtIHdpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHN3aXp6bGluZyBpZiB0aGUgb2JqZWN0IGlzIHRpbGVkLgpAQCAtMjQ0OCw3MiArMjUyMywxNDEgQEAKICAqIGFuZCB0aWxpbmcgZm9ybWF0LgogICovCiBpbnQKLWk5MTVfZ2VtX29iamVjdF9nZXRfZmVuY2VfcmVnKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAotCQkJICAgICAgYm9vbCBpbnRlcnJ1cHRpYmxlKQoraTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnBpcGVsaW5lZCwKKwkJCSAgYm9vbCBpbnRlcnJ1cHRpYmxlKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7Ci0Jc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqcmVnID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpyZWc7CiAJaW50IHJldDsKIAotCS8qIEp1c3QgdXBkYXRlIG91ciBwbGFjZSBpbiB0aGUgTFJVIGlmIG91ciBmZW5jZSBpcyBnZXR0aW5nIHVzZWQuICovCi0JaWYgKG9ial9wcml2LT5mZW5jZV9yZWcgIT0gSTkxNV9GRU5DRV9SRUdfTk9ORSkgewotCQlyZWcgPSAmZGV2X3ByaXYtPmZlbmNlX3JlZ3Nbb2JqX3ByaXYtPmZlbmNlX3JlZ107CisJLyogWFhYIGRpc2FibGUgcGlwZWxpbmluZy4gVGhlcmUgYXJlIGJ1Z3MuIFNob2NraW5nLiAqLworCXBpcGVsaW5lZCA9IE5VTEw7CisKKwkvKiBKdXN0IHVwZGF0ZSBvdXIgcGxhY2UgaW4gdGhlIExSVSBpZiBvdXIgZmVuY2UgaXMgZ2V0dGluZyByZXVzZWQuICovCisJaWYgKG9iai0+ZmVuY2VfcmVnICE9IEk5MTVfRkVOQ0VfUkVHX05PTkUpIHsKKwkJcmVnID0gJmRldl9wcml2LT5mZW5jZV9yZWdzW29iai0+ZmVuY2VfcmVnXTsKIAkJbGlzdF9tb3ZlX3RhaWwoJnJlZy0+bHJ1X2xpc3QsICZkZXZfcHJpdi0+bW0uZmVuY2VfbGlzdCk7CisKKwkJaWYgKCFvYmotPmZlbmNlZF9ncHVfYWNjZXNzICYmICFvYmotPmxhc3RfZmVuY2VkX3NlcW5vKQorCQkJcGlwZWxpbmVkID0gTlVMTDsKKworCQlpZiAoIXBpcGVsaW5lZCkgeworCQkJaWYgKHJlZy0+c2V0dXBfc2Vxbm8pIHsKKwkJCQlpZiAoIXJpbmdfcGFzc2VkX3NlcW5vKG9iai0+bGFzdF9mZW5jZWRfcmluZywKKwkJCQkJCSAgICAgICByZWctPnNldHVwX3NlcW5vKSkgeworCQkJCQlyZXQgPSBpOTE1X2RvX3dhaXRfcmVxdWVzdChvYmotPmJhc2UuZGV2LAorCQkJCQkJCQkgICByZWctPnNldHVwX3NlcW5vLAorCQkJCQkJCQkgICBpbnRlcnJ1cHRpYmxlLAorCQkJCQkJCQkgICBvYmotPmxhc3RfZmVuY2VkX3JpbmcpOworCQkJCQlpZiAocmV0KQorCQkJCQkJcmV0dXJuIHJldDsKKwkJCQl9CisKKwkJCQlyZWctPnNldHVwX3NlcW5vID0gMDsKKwkJCX0KKwkJfSBlbHNlIGlmIChvYmotPmxhc3RfZmVuY2VkX3JpbmcgJiYKKwkJCSAgIG9iai0+bGFzdF9mZW5jZWRfcmluZyAhPSBwaXBlbGluZWQpIHsKKwkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9mbHVzaF9mZW5jZShvYmosCisJCQkJCQkJICBwaXBlbGluZWQsCisJCQkJCQkJICBpbnRlcnJ1cHRpYmxlKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIGlmIChvYmotPnRpbGluZ19jaGFuZ2VkKSB7CisJCQlpZiAob2JqLT5mZW5jZWRfZ3B1X2FjY2VzcykgeworCQkJCWlmIChvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpIHsKKwkJCQkJcmV0ID0gaTkxNV9nZW1fZmx1c2hfcmluZyhvYmotPmJhc2UuZGV2LCBvYmotPnJpbmcsCisJCQkJCQkJCSAgMCwgb2JqLT5iYXNlLndyaXRlX2RvbWFpbik7CisJCQkJCWlmIChyZXQpCisJCQkJCQlyZXR1cm4gcmV0OworCQkJCX0KKworCQkJCW9iai0+ZmVuY2VkX2dwdV9hY2Nlc3MgPSBmYWxzZTsKKwkJCX0KKwkJfQorCisJCWlmICghb2JqLT5mZW5jZWRfZ3B1X2FjY2VzcyAmJiAhb2JqLT5sYXN0X2ZlbmNlZF9zZXFubykKKwkJCXBpcGVsaW5lZCA9IE5VTEw7CisJCUJVR19PTighcGlwZWxpbmVkICYmIHJlZy0+c2V0dXBfc2Vxbm8pOworCisJCWlmIChvYmotPnRpbGluZ19jaGFuZ2VkKSB7CisJCQlpZiAocGlwZWxpbmVkKSB7CisJCQkJcmVnLT5zZXR1cF9zZXFubyA9CisJCQkJCWk5MTVfZ2VtX25leHRfcmVxdWVzdF9zZXFubyhkZXYsIHBpcGVsaW5lZCk7CisJCQkJb2JqLT5sYXN0X2ZlbmNlZF9zZXFubyA9IHJlZy0+c2V0dXBfc2Vxbm87CisJCQkJb2JqLT5sYXN0X2ZlbmNlZF9yaW5nID0gcGlwZWxpbmVkOworCQkJfQorCQkJZ290byB1cGRhdGU7CisJCX0KKwogCQlyZXR1cm4gMDsKIAl9CiAKLQlzd2l0Y2ggKG9ial9wcml2LT50aWxpbmdfbW9kZSkgewotCWNhc2UgSTkxNV9USUxJTkdfTk9ORToKLQkJV0FSTigxLCAiYWxsb2NhdGluZyBhIGZlbmNlIGZvciBub24tdGlsZWQgb2JqZWN0P1xuIik7Ci0JCWJyZWFrOwotCWNhc2UgSTkxNV9USUxJTkdfWDoKLQkJaWYgKCFvYmpfcHJpdi0+c3RyaWRlKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCVdBUk4oKG9ial9wcml2LT5zdHJpZGUgJiAoNTEyIC0gMSkpLAotCQkgICAgICJvYmplY3QgMHglMDh4IGlzIFggdGlsZWQgYnV0IGhhcyBub24tNTEyQiBwaXRjaFxuIiwKLQkJICAgICBvYmpfcHJpdi0+Z3R0X29mZnNldCk7Ci0JCWJyZWFrOwotCWNhc2UgSTkxNV9USUxJTkdfWToKLQkJaWYgKCFvYmpfcHJpdi0+c3RyaWRlKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCVdBUk4oKG9ial9wcml2LT5zdHJpZGUgJiAoMTI4IC0gMSkpLAotCQkgICAgICJvYmplY3QgMHglMDh4IGlzIFkgdGlsZWQgYnV0IGhhcyBub24tMTI4QiBwaXRjaFxuIiwKLQkJICAgICBvYmpfcHJpdi0+Z3R0X29mZnNldCk7Ci0JCWJyZWFrOwotCX0KKwlyZWcgPSBpOTE1X2ZpbmRfZmVuY2VfcmVnKGRldiwgcGlwZWxpbmVkKTsKKwlpZiAocmVnID09IE5VTEwpCisJCXJldHVybiAtRU5PU1BDOwogCi0JcmV0ID0gaTkxNV9maW5kX2ZlbmNlX3JlZyhkZXYsIGludGVycnVwdGlibGUpOwotCWlmIChyZXQgPCAwKQorCXJldCA9IGk5MTVfZ2VtX29iamVjdF9mbHVzaF9mZW5jZShvYmosIHBpcGVsaW5lZCwgaW50ZXJydXB0aWJsZSk7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCW9ial9wcml2LT5mZW5jZV9yZWcgPSByZXQ7Ci0JcmVnID0gJmRldl9wcml2LT5mZW5jZV9yZWdzW29ial9wcml2LT5mZW5jZV9yZWddOwotCWxpc3RfYWRkX3RhaWwoJnJlZy0+bHJ1X2xpc3QsICZkZXZfcHJpdi0+bW0uZmVuY2VfbGlzdCk7CisJaWYgKHJlZy0+b2JqKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvbGQgPSByZWctPm9iajsKKworCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2UoJm9sZC0+YmFzZSk7CisKKwkJaWYgKG9sZC0+dGlsaW5nX21vZGUpCisJCQlpOTE1X2dlbV9yZWxlYXNlX21tYXAob2xkKTsKKworCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZmVuY2Uob2xkLAorCQkJCQkJICBwaXBlbGluZWQsCisJCQkJCQkgIGludGVycnVwdGlibGUpOworCQlpZiAocmV0KSB7CisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2xkLT5iYXNlKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlpZiAob2xkLT5sYXN0X2ZlbmNlZF9zZXFubyA9PSAwICYmIG9iai0+bGFzdF9mZW5jZWRfc2Vxbm8gPT0gMCkKKwkJCXBpcGVsaW5lZCA9IE5VTEw7CisKKwkJb2xkLT5mZW5jZV9yZWcgPSBJOTE1X0ZFTkNFX1JFR19OT05FOworCQlvbGQtPmxhc3RfZmVuY2VkX3JpbmcgPSBwaXBlbGluZWQ7CisJCW9sZC0+bGFzdF9mZW5jZWRfc2Vxbm8gPQorCQkJcGlwZWxpbmVkID8gaTkxNV9nZW1fbmV4dF9yZXF1ZXN0X3NlcW5vKGRldiwgcGlwZWxpbmVkKSA6IDA7CisKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9sZC0+YmFzZSk7CisJfSBlbHNlIGlmIChvYmotPmxhc3RfZmVuY2VkX3NlcW5vID09IDApCisJCXBpcGVsaW5lZCA9IE5VTEw7CiAKIAlyZWctPm9iaiA9IG9iajsKKwlsaXN0X21vdmVfdGFpbCgmcmVnLT5scnVfbGlzdCwgJmRldl9wcml2LT5tbS5mZW5jZV9saXN0KTsKKwlvYmotPmZlbmNlX3JlZyA9IHJlZyAtIGRldl9wcml2LT5mZW5jZV9yZWdzOworCW9iai0+bGFzdF9mZW5jZWRfcmluZyA9IHBpcGVsaW5lZDsKIAorCXJlZy0+c2V0dXBfc2Vxbm8gPQorCQlwaXBlbGluZWQgPyBpOTE1X2dlbV9uZXh0X3JlcXVlc3Rfc2Vxbm8oZGV2LCBwaXBlbGluZWQpIDogMDsKKwlvYmotPmxhc3RfZmVuY2VkX3NlcW5vID0gcmVnLT5zZXR1cF9zZXFubzsKKwordXBkYXRlOgorCW9iai0+dGlsaW5nX2NoYW5nZWQgPSBmYWxzZTsKIAlzd2l0Y2ggKElOVEVMX0lORk8oZGV2KS0+Z2VuKSB7CiAJY2FzZSA2OgotCQlzYW5keWJyaWRnZV93cml0ZV9mZW5jZV9yZWcocmVnKTsKKwkJcmV0ID0gc2FuZHlicmlkZ2Vfd3JpdGVfZmVuY2VfcmVnKG9iaiwgcGlwZWxpbmVkKTsKIAkJYnJlYWs7CiAJY2FzZSA1OgogCWNhc2UgNDoKLQkJaTk2NV93cml0ZV9mZW5jZV9yZWcocmVnKTsKKwkJcmV0ID0gaTk2NV93cml0ZV9mZW5jZV9yZWcob2JqLCBwaXBlbGluZWQpOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCWk5MTVfd3JpdGVfZmVuY2VfcmVnKHJlZyk7CisJCXJldCA9IGk5MTVfd3JpdGVfZmVuY2VfcmVnKG9iaiwgcGlwZWxpbmVkKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQlpODMwX3dyaXRlX2ZlbmNlX3JlZyhyZWcpOworCQlyZXQgPSBpODMwX3dyaXRlX2ZlbmNlX3JlZyhvYmosIHBpcGVsaW5lZCk7CiAJCWJyZWFrOwogCX0KIAotCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9nZXRfZmVuY2Uob2JqLCBvYmpfcHJpdi0+ZmVuY2VfcmVnLAotCQkJb2JqX3ByaXYtPnRpbGluZ19tb2RlKTsKLQotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtMjUyMSwxNTQgKzI2NjUsMTI1IEBACiAgKiBAb2JqOiBvYmplY3QgdG8gY2xlYXIKICAqCiAgKiBaZXJvZXMgb3V0IHRoZSBmZW5jZSByZWdpc3RlciBpdHNlbGYgYW5kIGNsZWFycyBvdXQgdGhlIGFzc29jaWF0ZWQKLSAqIGRhdGEgc3RydWN0dXJlcyBpbiBkZXZfcHJpdiBhbmQgb2JqX3ByaXYuCisgKiBkYXRhIHN0cnVjdHVyZXMgaW4gZGV2X3ByaXYgYW5kIG9iai4KICAqLwogc3RhdGljIHZvaWQKLWk5MTVfZ2VtX2NsZWFyX2ZlbmNlX3JlZyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK2k5MTVfZ2VtX2NsZWFyX2ZlbmNlX3JlZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKnJlZykKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpyZWcgPQotCQkmZGV2X3ByaXYtPmZlbmNlX3JlZ3Nbb2JqX3ByaXYtPmZlbmNlX3JlZ107Ci0JdWludDMyX3QgZmVuY2VfcmVnOworCXVpbnQzMl90IGZlbmNlX3JlZyA9IHJlZyAtIGRldl9wcml2LT5mZW5jZV9yZWdzOwogCiAJc3dpdGNoIChJTlRFTF9JTkZPKGRldiktPmdlbikgewogCWNhc2UgNjoKLQkJSTkxNV9XUklURTY0KEZFTkNFX1JFR19TQU5EWUJSSURHRV8wICsKLQkJCSAgICAgKG9ial9wcml2LT5mZW5jZV9yZWcgKiA4KSwgMCk7CisJCUk5MTVfV1JJVEU2NChGRU5DRV9SRUdfU0FORFlCUklER0VfMCArIGZlbmNlX3JlZyo4LCAwKTsKIAkJYnJlYWs7CiAJY2FzZSA1OgogCWNhc2UgNDoKLQkJSTkxNV9XUklURTY0KEZFTkNFX1JFR185NjVfMCArIChvYmpfcHJpdi0+ZmVuY2VfcmVnICogOCksIDApOworCQlJOTE1X1dSSVRFNjQoRkVOQ0VfUkVHXzk2NV8wICsgZmVuY2VfcmVnKjgsIDApOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCWlmIChvYmpfcHJpdi0+ZmVuY2VfcmVnID49IDgpCi0JCQlmZW5jZV9yZWcgPSBGRU5DRV9SRUdfOTQ1XzggKyAob2JqX3ByaXYtPmZlbmNlX3JlZyAtIDgpICogNDsKKwkJaWYgKGZlbmNlX3JlZyA+PSA4KQorCQkJZmVuY2VfcmVnID0gRkVOQ0VfUkVHXzk0NV84ICsgKGZlbmNlX3JlZyAtIDgpICogNDsKIAkJZWxzZQogCWNhc2UgMjoKLQkJCWZlbmNlX3JlZyA9IEZFTkNFX1JFR184MzBfMCArIG9ial9wcml2LT5mZW5jZV9yZWcgKiA0OworCQkJZmVuY2VfcmVnID0gRkVOQ0VfUkVHXzgzMF8wICsgZmVuY2VfcmVnICogNDsKIAogCQlJOTE1X1dSSVRFKGZlbmNlX3JlZywgMCk7CiAJCWJyZWFrOwogCX0KIAotCXJlZy0+b2JqID0gTlVMTDsKLQlvYmpfcHJpdi0+ZmVuY2VfcmVnID0gSTkxNV9GRU5DRV9SRUdfTk9ORTsKIAlsaXN0X2RlbF9pbml0KCZyZWctPmxydV9saXN0KTsKLX0KLQotLyoqCi0gKiBpOTE1X2dlbV9vYmplY3RfcHV0X2ZlbmNlX3JlZyAtIHdhaXRzIG9uIG91dHN0YW5kaW5nIGZlbmNlZCBhY2Nlc3MKLSAqIHRvIHRoZSBidWZmZXIgdG8gZmluaXNoLCBhbmQgdGhlbiByZXNldHMgdGhlIGZlbmNlIHJlZ2lzdGVyLgotICogQG9iajogdGlsZWQgb2JqZWN0IGhvbGRpbmcgYSBmZW5jZSByZWdpc3Rlci4KLSAqIEBib29sOiB3aGV0aGVyIHRoZSB3YWl0IHVwb24gdGhlIGZlbmNlIGlzIGludGVycnVwdGlibGUKLSAqCi0gKiBaZXJvZXMgb3V0IHRoZSBmZW5jZSByZWdpc3RlciBpdHNlbGYgYW5kIGNsZWFycyBvdXQgdGhlIGFzc29jaWF0ZWQKLSAqIGRhdGEgc3RydWN0dXJlcyBpbiBkZXZfcHJpdiBhbmQgb2JqX3ByaXYuCi0gKi8KLWludAotaTkxNV9nZW1fb2JqZWN0X3B1dF9mZW5jZV9yZWcoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgICAgICBib29sIGludGVycnVwdGlibGUpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpyZWc7Ci0KLQlpZiAob2JqX3ByaXYtPmZlbmNlX3JlZyA9PSBJOTE1X0ZFTkNFX1JFR19OT05FKQotCQlyZXR1cm4gMDsKLQotCS8qIElmIHdlJ3ZlIGNoYW5nZWQgdGlsaW5nLCBHVFQtbWFwcGluZ3Mgb2YgdGhlIG9iamVjdAotCSAqIG5lZWQgdG8gcmUtZmF1bHQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgZmVuY2UgcmVnaXN0ZXIKLQkgKiBzZXR1cCBpcyBpbiBwbGFjZS4KLQkgKi8KLQlpOTE1X2dlbV9yZWxlYXNlX21tYXAob2JqKTsKLQotCS8qIE9uIHRoZSBpOTE1LCBHUFUgYWNjZXNzIHRvIHRpbGVkIGJ1ZmZlcnMgaXMgdmlhIGEgZmVuY2UsCi0JICogdGhlcmVmb3JlIHdlIG11c3Qgd2FpdCBmb3IgYW55IG91dHN0YW5kaW5nIGFjY2VzcyB0byBjb21wbGV0ZQotCSAqIGJlZm9yZSBjbGVhcmluZyB0aGUgZmVuY2UuCi0JICovCi0JcmVnID0gJmRldl9wcml2LT5mZW5jZV9yZWdzW29ial9wcml2LT5mZW5jZV9yZWddOwotCWlmIChyZWctPmdwdSkgewotCQlpbnQgcmV0OwotCi0JCXJldCA9IGk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHVfd3JpdGVfZG9tYWluKG9iaik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmosIGludGVycnVwdGlibGUpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQotCQlyZWctPmdwdSA9IGZhbHNlOwotCX0KLQotCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9ndHRfd3JpdGVfZG9tYWluKG9iaik7Ci0JaTkxNV9nZW1fY2xlYXJfZmVuY2VfcmVnKG9iaik7Ci0KLQlyZXR1cm4gMDsKKwlyZWctPm9iaiA9IE5VTEw7CisJcmVnLT5zZXR1cF9zZXFubyA9IDA7CiB9CiAKIC8qKgogICogRmluZHMgZnJlZSBzcGFjZSBpbiB0aGUgR1RUIGFwZXJ0dXJlIGFuZCBiaW5kcyB0aGUgb2JqZWN0IHRoZXJlLgogICovCiBzdGF0aWMgaW50Ci1pOTE1X2dlbV9vYmplY3RfYmluZF90b19ndHQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHVuc2lnbmVkIGFsaWdubWVudCkKK2k5MTVfZ2VtX29iamVjdF9iaW5kX3RvX2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJICAgIHVuc2lnbmVkIGFsaWdubWVudCwKKwkJCSAgICBib29sIG1hcF9hbmRfZmVuY2VhYmxlKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwogCXN0cnVjdCBkcm1fbW1fbm9kZSAqZnJlZV9zcGFjZTsKLQlnZnBfdCBnZnBtYXNrID0gIF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk47CisJZ2ZwX3QgZ2ZwbWFzayA9IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk47CisJdTMyIHNpemUsIGZlbmNlX3NpemUsIGZlbmNlX2FsaWdubWVudCwgdW5mZW5jZWRfYWxpZ25tZW50OworCWJvb2wgbWFwcGFibGUsIGZlbmNlYWJsZTsKIAlpbnQgcmV0OwogCi0JaWYgKG9ial9wcml2LT5tYWR2ICE9IEk5MTVfTUFEVl9XSUxMTkVFRCkgeworCWlmIChvYmotPm1hZHYgIT0gSTkxNV9NQURWX1dJTExORUVEKSB7CiAJCURSTV9FUlJPUigiQXR0ZW1wdGluZyB0byBiaW5kIGEgcHVyZ2VhYmxlIG9iamVjdFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWZlbmNlX3NpemUgPSBpOTE1X2dlbV9nZXRfZ3R0X3NpemUob2JqKTsKKwlmZW5jZV9hbGlnbm1lbnQgPSBpOTE1X2dlbV9nZXRfZ3R0X2FsaWdubWVudChvYmopOworCXVuZmVuY2VkX2FsaWdubWVudCA9IGk5MTVfZ2VtX2dldF91bmZlbmNlZF9ndHRfYWxpZ25tZW50KG9iaik7CisKIAlpZiAoYWxpZ25tZW50ID09IDApCi0JCWFsaWdubWVudCA9IGk5MTVfZ2VtX2dldF9ndHRfYWxpZ25tZW50KG9iaik7Ci0JaWYgKGFsaWdubWVudCAmIChpOTE1X2dlbV9nZXRfZ3R0X2FsaWdubWVudChvYmopIC0gMSkpIHsKKwkJYWxpZ25tZW50ID0gbWFwX2FuZF9mZW5jZWFibGUgPyBmZW5jZV9hbGlnbm1lbnQgOgorCQkJCQkJdW5mZW5jZWRfYWxpZ25tZW50OworCWlmIChtYXBfYW5kX2ZlbmNlYWJsZSAmJiBhbGlnbm1lbnQgJiAoZmVuY2VfYWxpZ25tZW50IC0gMSkpIHsKIAkJRFJNX0VSUk9SKCJJbnZhbGlkIG9iamVjdCBhbGlnbm1lbnQgcmVxdWVzdGVkICV1XG4iLCBhbGlnbm1lbnQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlzaXplID0gbWFwX2FuZF9mZW5jZWFibGUgPyBmZW5jZV9zaXplIDogb2JqLT5iYXNlLnNpemU7CisKIAkvKiBJZiB0aGUgb2JqZWN0IGlzIGJpZ2dlciB0aGFuIHRoZSBlbnRpcmUgYXBlcnR1cmUsIHJlamVjdCBpdCBlYXJseQogCSAqIGJlZm9yZSBldmljdGluZyBldmVyeXRoaW5nIGluIGEgdmFpbiBhdHRlbXB0IHRvIGZpbmQgc3BhY2UuCiAJICovCi0JaWYgKG9iai0+c2l6ZSA+IGRldl9wcml2LT5tbS5ndHRfdG90YWwpIHsKKwlpZiAob2JqLT5iYXNlLnNpemUgPgorCSAgICAobWFwX2FuZF9mZW5jZWFibGUgPyBkZXZfcHJpdi0+bW0uZ3R0X21hcHBhYmxlX2VuZCA6IGRldl9wcml2LT5tbS5ndHRfdG90YWwpKSB7CiAJCURSTV9FUlJPUigiQXR0ZW1wdGluZyB0byBiaW5kIGFuIG9iamVjdCBsYXJnZXIgdGhhbiB0aGUgYXBlcnR1cmVcbiIpOwogCQlyZXR1cm4gLUUyQklHOwogCX0KIAogIHNlYXJjaF9mcmVlOgotCWZyZWVfc3BhY2UgPSBkcm1fbW1fc2VhcmNoX2ZyZWUoJmRldl9wcml2LT5tbS5ndHRfc3BhY2UsCi0JCQkJCW9iai0+c2l6ZSwgYWxpZ25tZW50LCAwKTsKLQlpZiAoZnJlZV9zcGFjZSAhPSBOVUxMKQotCQlvYmpfcHJpdi0+Z3R0X3NwYWNlID0gZHJtX21tX2dldF9ibG9jayhmcmVlX3NwYWNlLCBvYmotPnNpemUsCi0JCQkJCQkgICAgICAgYWxpZ25tZW50KTsKLQlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKSB7CisJaWYgKG1hcF9hbmRfZmVuY2VhYmxlKQorCQlmcmVlX3NwYWNlID0KKwkJCWRybV9tbV9zZWFyY2hfZnJlZV9pbl9yYW5nZSgmZGV2X3ByaXYtPm1tLmd0dF9zcGFjZSwKKwkJCQkJCSAgICBzaXplLCBhbGlnbm1lbnQsIDAsCisJCQkJCQkgICAgZGV2X3ByaXYtPm1tLmd0dF9tYXBwYWJsZV9lbmQsCisJCQkJCQkgICAgMCk7CisJZWxzZQorCQlmcmVlX3NwYWNlID0gZHJtX21tX3NlYXJjaF9mcmVlKCZkZXZfcHJpdi0+bW0uZ3R0X3NwYWNlLAorCQkJCQkJc2l6ZSwgYWxpZ25tZW50LCAwKTsKKworCWlmIChmcmVlX3NwYWNlICE9IE5VTEwpIHsKKwkJaWYgKG1hcF9hbmRfZmVuY2VhYmxlKQorCQkJb2JqLT5ndHRfc3BhY2UgPQorCQkJCWRybV9tbV9nZXRfYmxvY2tfcmFuZ2VfZ2VuZXJpYyhmcmVlX3NwYWNlLAorCQkJCQkJCSAgICAgICBzaXplLCBhbGlnbm1lbnQsIDAsCisJCQkJCQkJICAgICAgIGRldl9wcml2LT5tbS5ndHRfbWFwcGFibGVfZW5kLAorCQkJCQkJCSAgICAgICAwKTsKKwkJZWxzZQorCQkJb2JqLT5ndHRfc3BhY2UgPQorCQkJCWRybV9tbV9nZXRfYmxvY2soZnJlZV9zcGFjZSwgc2l6ZSwgYWxpZ25tZW50KTsKKwl9CisJaWYgKG9iai0+Z3R0X3NwYWNlID09IE5VTEwpIHsKIAkJLyogSWYgdGhlIGd0dCBpcyBlbXB0eSBhbmQgd2UncmUgc3RpbGwgaGF2aW5nIHRyb3VibGUKIAkJICogZml0dGluZyBvdXIgb2JqZWN0IGluLCB3ZSdyZSBvdXQgb2YgbWVtb3J5LgogCQkgKi8KLQkJcmV0ID0gaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKGRldiwgb2JqLT5zaXplLCBhbGlnbm1lbnQpOworCQlyZXQgPSBpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoZGV2LCBzaXplLCBhbGlnbm1lbnQsCisJCQkJCSAgICAgICBtYXBfYW5kX2ZlbmNlYWJsZSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCiAJCWdvdG8gc2VhcmNoX2ZyZWU7CiAJfQogCi0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmosIGdmcG1hc2spOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfZ3R0KG9iaiwgZ2ZwbWFzayk7CiAJaWYgKHJldCkgewotCQlkcm1fbW1fcHV0X2Jsb2NrKG9ial9wcml2LT5ndHRfc3BhY2UpOwotCQlvYmpfcHJpdi0+Z3R0X3NwYWNlID0gTlVMTDsKKwkJZHJtX21tX3B1dF9ibG9jayhvYmotPmd0dF9zcGFjZSk7CisJCW9iai0+Z3R0X3NwYWNlID0gTlVMTDsKIAogCQlpZiAocmV0ID09IC1FTk9NRU0pIHsKLQkJCS8qIGZpcnN0IHRyeSB0byBjbGVhciB1cCBzb21lIHNwYWNlIGZyb20gdGhlIEdUVCAqLwotCQkJcmV0ID0gaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKGRldiwgb2JqLT5zaXplLAotCQkJCQkJICAgICAgIGFsaWdubWVudCk7CisJCQkvKiBmaXJzdCB0cnkgdG8gcmVjbGFpbSBzb21lIG1lbW9yeSBieSBjbGVhcmluZyB0aGUgR1RUICovCisJCQlyZXQgPSBpOTE1X2dlbV9ldmljdF9ldmVyeXRoaW5nKGRldiwgZmFsc2UpOwogCQkJaWYgKHJldCkgewogCQkJCS8qIG5vdyB0cnkgdG8gc2hyaW5rIGV2ZXJ5b25lIGVsc2UgKi8KIAkJCQlpZiAoZ2ZwbWFzaykgewpAQCAtMjY3Niw3ICsyNzkxLDcgQEAKIAkJCQkJZ290byBzZWFyY2hfZnJlZTsKIAkJCQl9CiAKLQkJCQlyZXR1cm4gcmV0OworCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCiAJCQlnb3RvIHNlYXJjaF9mcmVlOwpAQCAtMjY4NSwxMjIgKzI4MDAsMTE2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JLyogQ3JlYXRlIGFuIEFHUCBtZW1vcnkgc3RydWN0dXJlIHBvaW50aW5nIGF0IG91ciBwYWdlcywgYW5kIGJpbmQgaXQKLQkgKiBpbnRvIHRoZSBHVFQuCi0JICovCi0Jb2JqX3ByaXYtPmFncF9tZW0gPSBkcm1fYWdwX2JpbmRfcGFnZXMoZGV2LAotCQkJCQkgICAgICAgb2JqX3ByaXYtPnBhZ2VzLAotCQkJCQkgICAgICAgb2JqLT5zaXplID4+IFBBR0VfU0hJRlQsCi0JCQkJCSAgICAgICBvYmpfcHJpdi0+Z3R0X3NwYWNlLT5zdGFydCwKLQkJCQkJICAgICAgIG9ial9wcml2LT5hZ3BfdHlwZSk7Ci0JaWYgKG9ial9wcml2LT5hZ3BfbWVtID09IE5VTEwpIHsKLQkJaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopOwotCQlkcm1fbW1fcHV0X2Jsb2NrKG9ial9wcml2LT5ndHRfc3BhY2UpOwotCQlvYmpfcHJpdi0+Z3R0X3NwYWNlID0gTlVMTDsKKwlyZXQgPSBpOTE1X2dlbV9ndHRfYmluZF9vYmplY3Qob2JqKTsKKwlpZiAocmV0KSB7CisJCWk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNfZ3R0KG9iaik7CisJCWRybV9tbV9wdXRfYmxvY2sob2JqLT5ndHRfc3BhY2UpOworCQlvYmotPmd0dF9zcGFjZSA9IE5VTEw7CiAKLQkJcmV0ID0gaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKGRldiwgb2JqLT5zaXplLCBhbGlnbm1lbnQpOwotCQlpZiAocmV0KQorCQlpZiAoaTkxNV9nZW1fZXZpY3RfZXZlcnl0aGluZyhkZXYsIGZhbHNlKSkKIAkJCXJldHVybiByZXQ7CiAKIAkJZ290byBzZWFyY2hfZnJlZTsKIAl9CiAKLQkvKiBrZWVwIHRyYWNrIG9mIGJvdW5kcyBvYmplY3QgYnkgYWRkaW5nIGl0IHRvIHRoZSBpbmFjdGl2ZSBsaXN0ICovCi0JbGlzdF9hZGRfdGFpbCgmb2JqX3ByaXYtPm1tX2xpc3QsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCk7Ci0JaTkxNV9nZW1faW5mb19hZGRfZ3R0KGRldl9wcml2LCBvYmotPnNpemUpOworCWxpc3RfYWRkX3RhaWwoJm9iai0+Z3R0X2xpc3QsICZkZXZfcHJpdi0+bW0uZ3R0X2xpc3QpOworCWxpc3RfYWRkX3RhaWwoJm9iai0+bW1fbGlzdCwgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KTsKIAogCS8qIEFzc2VydCB0aGF0IHRoZSBvYmplY3QgaXMgbm90IGN1cnJlbnRseSBpbiBhbnkgR1BVIGRvbWFpbi4gQXMgaXQKIAkgKiB3YXNuJ3QgaW4gdGhlIEdUVCwgdGhlcmUgc2hvdWxkbid0IGJlIGFueSB3YXkgaXQgY291bGQgaGF2ZSBiZWVuIGluCiAJICogYSBHUFUgY2FjaGUKIAkgKi8KLQlCVUdfT04ob2JqLT5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9HUFVfRE9NQUlOUyk7Ci0JQlVHX09OKG9iai0+d3JpdGVfZG9tYWluICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpOworCUJVR19PTihvYmotPmJhc2UucmVhZF9kb21haW5zICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpOworCUJVR19PTihvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpOwogCi0Jb2JqX3ByaXYtPmd0dF9vZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X3NwYWNlLT5zdGFydDsKLQl0cmFjZV9pOTE1X2dlbV9vYmplY3RfYmluZChvYmosIG9ial9wcml2LT5ndHRfb2Zmc2V0KTsKKwlvYmotPmd0dF9vZmZzZXQgPSBvYmotPmd0dF9zcGFjZS0+c3RhcnQ7CiAKKwlmZW5jZWFibGUgPQorCQlvYmotPmd0dF9zcGFjZS0+c2l6ZSA9PSBmZW5jZV9zaXplICYmCisJCShvYmotPmd0dF9zcGFjZS0+c3RhcnQgJiAoZmVuY2VfYWxpZ25tZW50IC0xKSkgPT0gMDsKKworCW1hcHBhYmxlID0KKwkJb2JqLT5ndHRfb2Zmc2V0ICsgb2JqLT5iYXNlLnNpemUgPD0gZGV2X3ByaXYtPm1tLmd0dF9tYXBwYWJsZV9lbmQ7CisKKwlvYmotPm1hcF9hbmRfZmVuY2VhYmxlID0gbWFwcGFibGUgJiYgZmVuY2VhYmxlOworCisJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2JpbmQob2JqLCBvYmotPmd0dF9vZmZzZXQsIG1hcF9hbmRfZmVuY2VhYmxlKTsKIAlyZXR1cm4gMDsKIH0KIAogdm9pZAotaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCitpOTE1X2dlbV9jbGZsdXNoX29iamVjdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0CSpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7Ci0KIAkvKiBJZiB3ZSBkb24ndCBoYXZlIGEgcGFnZSBsaXN0IHNldCB1cCwgdGhlbiB3ZSdyZSBub3QgcGlubmVkCiAJICogdG8gR1BVLCBhbmQgd2UgY2FuIGlnbm9yZSB0aGUgY2FjaGUgZmx1c2ggYmVjYXVzZSBpdCdsbCBoYXBwZW4KIAkgKiBhZ2FpbiBhdCBiaW5kIHRpbWUuCiAJICovCi0JaWYgKG9ial9wcml2LT5wYWdlcyA9PSBOVUxMKQorCWlmIChvYmotPnBhZ2VzID09IE5VTEwpCiAJCXJldHVybjsKIAogCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9jbGZsdXNoKG9iaik7CiAKLQlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZXMsIG9iai0+c2l6ZSAvIFBBR0VfU0laRSk7CisJZHJtX2NsZmx1c2hfcGFnZXMob2JqLT5wYWdlcywgb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkUpOwogfQogCiAvKiogRmx1c2hlcyBhbnkgR1BVIHdyaXRlIGRvbWFpbiBmb3IgdGhlIG9iamVjdCBpZiBpdCdzIGRpcnR5LiAqLwogc3RhdGljIGludAotaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2dwdV93cml0ZV9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCitpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1X3dyaXRlX2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKLQl1aW50MzJfdCBvbGRfd3JpdGVfZG9tYWluOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2OwogCi0JaWYgKChvYmotPndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKSA9PSAwKQorCWlmICgob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKSA9PSAwKQogCQlyZXR1cm4gMDsKIAogCS8qIFF1ZXVlIHRoZSBHUFUgd3JpdGUgY2FjaGUgZmx1c2hpbmcgd2UgbmVlZC4gKi8KLQlvbGRfd3JpdGVfZG9tYWluID0gb2JqLT53cml0ZV9kb21haW47Ci0JaTkxNV9nZW1fZmx1c2hfcmluZyhkZXYsIE5VTEwsCi0JCQkgICAgdG9faW50ZWxfYm8ob2JqKS0+cmluZywKLQkJCSAgICAwLCBvYmotPndyaXRlX2RvbWFpbik7Ci0JQlVHX09OKG9iai0+d3JpdGVfZG9tYWluKTsKLQotCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9jaGFuZ2VfZG9tYWluKG9iaiwKLQkJCQkJICAgIG9iai0+cmVhZF9kb21haW5zLAotCQkJCQkgICAgb2xkX3dyaXRlX2RvbWFpbik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaTkxNV9nZW1fZmx1c2hfcmluZyhkZXYsIG9iai0+cmluZywgMCwgb2JqLT5iYXNlLndyaXRlX2RvbWFpbik7CiB9CiAKIC8qKiBGbHVzaGVzIHRoZSBHVFQgd3JpdGUgZG9tYWluIGZvciB0aGUgb2JqZWN0IGlmIGl0J3MgZGlydHkuICovCiBzdGF0aWMgdm9pZAotaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2d0dF93cml0ZV9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCitpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3R0X3dyaXRlX2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewogCXVpbnQzMl90IG9sZF93cml0ZV9kb21haW47CiAKLQlpZiAob2JqLT53cml0ZV9kb21haW4gIT0gSTkxNV9HRU1fRE9NQUlOX0dUVCkKKwlpZiAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAhPSBJOTE1X0dFTV9ET01BSU5fR1RUKQogCQlyZXR1cm47CiAKLQkvKiBObyBhY3R1YWwgZmx1c2hpbmcgaXMgcmVxdWlyZWQgZm9yIHRoZSBHVFQgd3JpdGUgZG9tYWluLiAgIFdyaXRlcworCS8qIE5vIGFjdHVhbCBmbHVzaGluZyBpcyByZXF1aXJlZCBmb3IgdGhlIEdUVCB3cml0ZSBkb21haW4uICBXcml0ZXMKIAkgKiB0byBpdCBpbW1lZGlhdGVseSBnbyB0byBtYWluIG1lbW9yeSBhcyBmYXIgYXMgd2Uga25vdywgc28gdGhlcmUncwogCSAqIG5vIGNoaXBzZXQgZmx1c2guICBJdCBhbHNvIGRvZXNuJ3QgbGFuZCBpbiByZW5kZXIgY2FjaGUuCisJICoKKwkgKiBIb3dldmVyLCB3ZSBkbyBoYXZlIHRvIGVuZm9yY2UgdGhlIG9yZGVyIHNvIHRoYXQgYWxsIHdyaXRlcyB0aHJvdWdoCisJICogdGhlIEdUVCBsYW5kIGJlZm9yZSBhbnkgd3JpdGVzIHRvIHRoZSBkZXZpY2UsIHN1Y2ggYXMgdXBkYXRlcyB0bworCSAqIHRoZSBHQVRUIGl0c2VsZi4KIAkgKi8KLQlvbGRfd3JpdGVfZG9tYWluID0gb2JqLT53cml0ZV9kb21haW47Ci0Jb2JqLT53cml0ZV9kb21haW4gPSAwOworCXdtYigpOworCisJaTkxNV9nZW1fcmVsZWFzZV9tbWFwKG9iaik7CisKKwlvbGRfd3JpdGVfZG9tYWluID0gb2JqLT5iYXNlLndyaXRlX2RvbWFpbjsKKwlvYmotPmJhc2Uud3JpdGVfZG9tYWluID0gMDsKIAogCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9jaGFuZ2VfZG9tYWluKG9iaiwKLQkJCQkJICAgIG9iai0+cmVhZF9kb21haW5zLAorCQkJCQkgICAgb2JqLT5iYXNlLnJlYWRfZG9tYWlucywKIAkJCQkJICAgIG9sZF93cml0ZV9kb21haW4pOwogfQogCiAvKiogRmx1c2hlcyB0aGUgQ1BVIHdyaXRlIGRvbWFpbiBmb3IgdGhlIG9iamVjdCBpZiBpdCdzIGRpcnR5LiAqLwogc3RhdGljIHZvaWQKLWk5MTVfZ2VtX29iamVjdF9mbHVzaF9jcHVfd3JpdGVfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoraTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2NwdV93cml0ZV9kb21haW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CiAJdWludDMyX3Qgb2xkX3dyaXRlX2RvbWFpbjsKIAotCWlmIChvYmotPndyaXRlX2RvbWFpbiAhPSBJOTE1X0dFTV9ET01BSU5fQ1BVKQorCWlmIChvYmotPmJhc2Uud3JpdGVfZG9tYWluICE9IEk5MTVfR0VNX0RPTUFJTl9DUFUpCiAJCXJldHVybjsKIAogCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7Ci0JZHJtX2FncF9jaGlwc2V0X2ZsdXNoKGRldik7Ci0Jb2xkX3dyaXRlX2RvbWFpbiA9IG9iai0+d3JpdGVfZG9tYWluOwotCW9iai0+d3JpdGVfZG9tYWluID0gMDsKKwlpbnRlbF9ndHRfY2hpcHNldF9mbHVzaCgpOworCW9sZF93cml0ZV9kb21haW4gPSBvYmotPmJhc2Uud3JpdGVfZG9tYWluOworCW9iai0+YmFzZS53cml0ZV9kb21haW4gPSAwOwogCiAJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2NoYW5nZV9kb21haW4ob2JqLAotCQkJCQkgICAgb2JqLT5yZWFkX2RvbWFpbnMsCisJCQkJCSAgICBvYmotPmJhc2UucmVhZF9kb21haW5zLAogCQkJCQkgICAgb2xkX3dyaXRlX2RvbWFpbik7CiB9CiAKQEAgLTI4MTEsMzcgKzI5MjAsMzkgQEAKICAqIGZsdXNoZXMgdG8gb2NjdXIuCiAgKi8KIGludAotaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgd3JpdGUpCitpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgYm9vbCB3cml0ZSkKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwogCXVpbnQzMl90IG9sZF93cml0ZV9kb21haW4sIG9sZF9yZWFkX2RvbWFpbnM7CiAJaW50IHJldDsKIAogCS8qIE5vdCB2YWxpZCB0byBiZSBjYWxsZWQgb24gdW5ib3VuZCBvYmplY3RzLiAqLwotCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpCisJaWYgKG9iai0+Z3R0X3NwYWNlID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2dwdV93cml0ZV9kb21haW4ob2JqKTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiByZXQ7Ci0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaiwgdHJ1ZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCWlmIChvYmotPnBlbmRpbmdfZ3B1X3dyaXRlIHx8IHdyaXRlKSB7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmosIHRydWUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAlpOTE1X2dlbV9vYmplY3RfZmx1c2hfY3B1X3dyaXRlX2RvbWFpbihvYmopOwogCi0Jb2xkX3dyaXRlX2RvbWFpbiA9IG9iai0+d3JpdGVfZG9tYWluOwotCW9sZF9yZWFkX2RvbWFpbnMgPSBvYmotPnJlYWRfZG9tYWluczsKKwlvbGRfd3JpdGVfZG9tYWluID0gb2JqLT5iYXNlLndyaXRlX2RvbWFpbjsKKwlvbGRfcmVhZF9kb21haW5zID0gb2JqLT5iYXNlLnJlYWRfZG9tYWluczsKIAogCS8qIEl0IHNob3VsZCBub3cgYmUgb3V0IG9mIGFueSBvdGhlciB3cml0ZSBkb21haW5zLCBhbmQgd2UgY2FuIHVwZGF0ZQogCSAqIHRoZSBkb21haW4gdmFsdWVzIGZvciBvdXIgY2hhbmdlcy4KIAkgKi8KLQlCVUdfT04oKG9iai0+d3JpdGVfZG9tYWluICYgfkk5MTVfR0VNX0RPTUFJTl9HVFQpICE9IDApOwotCW9iai0+cmVhZF9kb21haW5zIHw9IEk5MTVfR0VNX0RPTUFJTl9HVFQ7CisJQlVHX09OKChvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgfkk5MTVfR0VNX0RPTUFJTl9HVFQpICE9IDApOworCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgfD0gSTkxNV9HRU1fRE9NQUlOX0dUVDsKIAlpZiAod3JpdGUpIHsKLQkJb2JqLT5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fR1RUOwotCQlvYmotPndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9HVFQ7Ci0JCW9ial9wcml2LT5kaXJ0eSA9IDE7CisJCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fR1RUOworCQlvYmotPmJhc2Uud3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0dUVDsKKwkJb2JqLT5kaXJ0eSA9IDE7CiAJfQogCiAJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2NoYW5nZV9kb21haW4ob2JqLApAQCAtMjg1NiwyMyArMjk2NywyMyBAQAogICogd2FpdCwgYXMgaW4gbW9kZXNldHRpbmcgcHJvY2VzcyB3ZSdyZSBub3Qgc3VwcG9zZWQgdG8gYmUgaW50ZXJydXB0ZWQuCiAgKi8KIGludAotaTkxNV9nZW1fb2JqZWN0X3NldF90b19kaXNwbGF5X3BsYW5lKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAotCQkJCSAgICAgYm9vbCBwaXBlbGluZWQpCitpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2Rpc3BsYXlfcGxhbmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgICAgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcGlwZWxpbmVkKQogewotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CiAJdWludDMyX3Qgb2xkX3JlYWRfZG9tYWluczsKIAlpbnQgcmV0OwogCiAJLyogTm90IHZhbGlkIHRvIGJlIGNhbGxlZCBvbiB1bmJvdW5kIG9iamVjdHMuICovCi0JaWYgKG9ial9wcml2LT5ndHRfc3BhY2UgPT0gTlVMTCkKKwlpZiAob2JqLT5ndHRfc3BhY2UgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1X3dyaXRlX2RvbWFpbihvYmopOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwogCS8qIEN1cnJlbnRseSwgd2UgYXJlIGFsd2F5cyBjYWxsZWQgZnJvbSBhbiBub24taW50ZXJydXB0aWJsZSBjb250ZXh0LiAqLwotCWlmICghcGlwZWxpbmVkKSB7CisJaWYgKHBpcGVsaW5lZCAhPSBvYmotPnJpbmcpIHsKIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaiwgZmFsc2UpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKQEAgLTI4ODAsMTIgKzI5OTEsMTIgQEAKIAogCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9jcHVfd3JpdGVfZG9tYWluKG9iaik7CiAKLQlvbGRfcmVhZF9kb21haW5zID0gb2JqLT5yZWFkX2RvbWFpbnM7Ci0Jb2JqLT5yZWFkX2RvbWFpbnMgfD0gSTkxNV9HRU1fRE9NQUlOX0dUVDsKKwlvbGRfcmVhZF9kb21haW5zID0gb2JqLT5iYXNlLnJlYWRfZG9tYWluczsKKwlvYmotPmJhc2UucmVhZF9kb21haW5zIHw9IEk5MTVfR0VNX0RPTUFJTl9HVFQ7CiAKIAl0cmFjZV9pOTE1X2dlbV9vYmplY3RfY2hhbmdlX2RvbWFpbihvYmosCiAJCQkJCSAgICBvbGRfcmVhZF9kb21haW5zLAotCQkJCQkgICAgb2JqLT53cml0ZV9kb21haW4pOworCQkJCQkgICAgb2JqLT5iYXNlLndyaXRlX2RvbWFpbik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI4OTQsMTQgKzMwMDUsMTkgQEAKIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCSAgYm9vbCBpbnRlcnJ1cHRpYmxlKQogeworCWludCByZXQ7CisKIAlpZiAoIW9iai0+YWN0aXZlKQogCQlyZXR1cm4gMDsKIAotCWlmIChvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpCi0JCWk5MTVfZ2VtX2ZsdXNoX3Jpbmcob2JqLT5iYXNlLmRldiwgTlVMTCwgb2JqLT5yaW5nLAotCQkJCSAgICAwLCBvYmotPmJhc2Uud3JpdGVfZG9tYWluKTsKKwlpZiAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKSB7CisJCXJldCA9IGk5MTVfZ2VtX2ZsdXNoX3Jpbmcob2JqLT5iYXNlLmRldiwgb2JqLT5yaW5nLAorCQkJCQkgIDAsIG9iai0+YmFzZS53cml0ZV9kb21haW4pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CiAKLQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKCZvYmotPmJhc2UsIGludGVycnVwdGlibGUpOworCXJldHVybiBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcob2JqLCBpbnRlcnJ1cHRpYmxlKTsKIH0KIAogLyoqCkBAIC0yOTExLDE0ICszMDI3LDE1IEBACiAgKiBmbHVzaGVzIHRvIG9jY3VyLgogICovCiBzdGF0aWMgaW50Ci1pOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCB3cml0ZSkKK2k5MTVfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBib29sIHdyaXRlKQogewogCXVpbnQzMl90IG9sZF93cml0ZV9kb21haW4sIG9sZF9yZWFkX2RvbWFpbnM7CiAJaW50IHJldDsKIAogCXJldCA9IGk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHVfd3JpdGVfZG9tYWluKG9iaik7Ci0JaWYgKHJldCAhPSAwKQorCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CisKIAlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcob2JqLCB0cnVlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMjkzMCwyNyArMzA0NywyNyBAQAogCSAqLwogCWk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZnVsbF9jcHVfcmVhZF9kb21haW4ob2JqKTsKIAotCW9sZF93cml0ZV9kb21haW4gPSBvYmotPndyaXRlX2RvbWFpbjsKLQlvbGRfcmVhZF9kb21haW5zID0gb2JqLT5yZWFkX2RvbWFpbnM7CisJb2xkX3dyaXRlX2RvbWFpbiA9IG9iai0+YmFzZS53cml0ZV9kb21haW47CisJb2xkX3JlYWRfZG9tYWlucyA9IG9iai0+YmFzZS5yZWFkX2RvbWFpbnM7CiAKIAkvKiBGbHVzaCB0aGUgQ1BVIGNhY2hlIGlmIGl0J3Mgc3RpbGwgaW52YWxpZC4gKi8KLQlpZiAoKG9iai0+cmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgPT0gMCkgeworCWlmICgob2JqLT5iYXNlLnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpID09IDApIHsKIAkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKIAotCQlvYmotPnJlYWRfZG9tYWlucyB8PSBJOTE1X0dFTV9ET01BSU5fQ1BVOworCQlvYmotPmJhc2UucmVhZF9kb21haW5zIHw9IEk5MTVfR0VNX0RPTUFJTl9DUFU7CiAJfQogCiAJLyogSXQgc2hvdWxkIG5vdyBiZSBvdXQgb2YgYW55IG90aGVyIHdyaXRlIGRvbWFpbnMsIGFuZCB3ZSBjYW4gdXBkYXRlCiAJICogdGhlIGRvbWFpbiB2YWx1ZXMgZm9yIG91ciBjaGFuZ2VzLgogCSAqLwotCUJVR19PTigob2JqLT53cml0ZV9kb21haW4gJiB+STkxNV9HRU1fRE9NQUlOX0NQVSkgIT0gMCk7CisJQlVHX09OKChvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgfkk5MTVfR0VNX0RPTUFJTl9DUFUpICE9IDApOwogCiAJLyogSWYgd2UncmUgd3JpdGluZyB0aHJvdWdoIHRoZSBDUFUsIHRoZW4gdGhlIEdQVSByZWFkIGRvbWFpbnMgd2lsbAogCSAqIG5lZWQgdG8gYmUgaW52YWxpZGF0ZWQgYXQgbmV4dCB1c2UuCiAJICovCiAJaWYgKHdyaXRlKSB7Ci0JCW9iai0+cmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NQVTsKLQkJb2JqLT53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ1BVOworCQlvYmotPmJhc2UucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NQVTsKKwkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7CiAJfQogCiAJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2NoYW5nZV9kb21haW4ob2JqLApAQCAtMjk2MCwxODQgKzMwNzcsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogU2V0IHRoZSBuZXh0IGRvbWFpbiBmb3IgdGhlIHNwZWNpZmllZCBvYmplY3QuIFRoaXMKLSAqIG1heSBub3QgYWN0dWFsbHkgcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IGZsdXNoaW5nL2ludmFsaWRpbmcgdGhvdWdoLAotICogYXMgdGhhdCBtYXkgd2FudCB0byBiZSBiYXRjaGVkIHdpdGggb3RoZXIgc2V0X2RvbWFpbiBvcGVyYXRpb25zCi0gKgotICogVGhpcyBpcyAod2UgaG9wZSkgdGhlIG9ubHkgcmVhbGx5IHRyaWNreSBwYXJ0IG9mIGdlbS4gVGhlIGdvYWwKLSAqIGlzIGZhaXJseSBzaW1wbGUgLS0gdHJhY2sgd2hpY2ggY2FjaGVzIGhvbGQgYml0cyBvZiB0aGUgb2JqZWN0Ci0gKiBhbmQgbWFrZSBzdXJlIHRoZXkgcmVtYWluIGNvaGVyZW50LiBBIGZldyBjb25jcmV0ZSBleGFtcGxlcyBtYXkKLSAqIGhlbHAgdG8gZXhwbGFpbiBob3cgaXQgd29ya3MuIEZvciBzaG9ydGhhbmQsIHdlIHVzZSB0aGUgbm90YXRpb24KLSAqIChyZWFkX2RvbWFpbnMsIHdyaXRlX2RvbWFpbiksIGUuZy4gKENQVSwgQ1BVKSB0byBpbmRpY2F0ZSB0aGUKLSAqIGEgcGFpciBvZiByZWFkIGFuZCB3cml0ZSBkb21haW4gbWFza3MuCi0gKgotICogQ2FzZSAxOiB0aGUgYmF0Y2ggYnVmZmVyCi0gKgotICoJMS4gQWxsb2NhdGVkCi0gKgkyLiBXcml0dGVuIGJ5IENQVQotICoJMy4gTWFwcGVkIHRvIEdUVAotICoJNC4gUmVhZCBieSBHUFUKLSAqCTUuIFVubWFwcGVkIGZyb20gR1RUCi0gKgk2LiBGcmVlZAotICoKLSAqCUxldCdzIHRha2UgdGhlc2UgYSBzdGVwIGF0IGEgdGltZQotICoKLSAqCTEuIEFsbG9jYXRlZAotICoJCVBhZ2VzIGFsbG9jYXRlZCBmcm9tIHRoZSBrZXJuZWwgbWF5IHN0aWxsIGhhdmUKLSAqCQljYWNoZSBjb250ZW50cywgc28gd2Ugc2V0IHRoZW0gdG8gKENQVSwgQ1BVKSBhbHdheXMuCi0gKgkyLiBXcml0dGVuIGJ5IENQVSAodXNpbmcgcHdyaXRlKQotICoJCVRoZSBwd3JpdGUgZnVuY3Rpb24gY2FsbHMgc2V0X2RvbWFpbiAoQ1BVLCBDUFUpIGFuZAotICoJCXRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nIChhcyBub3RoaW5nIGNoYW5nZXMpCi0gKgkzLiBNYXBwZWQgYnkgR1RUCi0gKgkJVGhpcyBmdW5jdGlvbiBhc3NlcnRzIHRoYXQgdGhlIG9iamVjdCBpcyBub3QKLSAqCQljdXJyZW50bHkgaW4gYW55IEdQVS1iYXNlZCByZWFkIG9yIHdyaXRlIGRvbWFpbnMKLSAqCTQuIFJlYWQgYnkgR1BVCi0gKgkJaTkxNV9nZW1fZXhlY2J1ZmZlciBjYWxscyBzZXRfZG9tYWluIChDT01NQU5ELCAwKS4KLSAqCQlBcyB3cml0ZV9kb21haW4gaXMgemVybywgdGhpcyBmdW5jdGlvbiBhZGRzIGluIHRoZQotICoJCWN1cnJlbnQgcmVhZCBkb21haW5zIChDUFUrQ09NTUFORCwgMCkuCi0gKgkJZmx1c2hfZG9tYWlucyBpcyBzZXQgdG8gQ1BVLgotICoJCWludmFsaWRhdGVfZG9tYWlucyBpcyBzZXQgdG8gQ09NTUFORAotICoJCWNsZmx1c2ggaXMgcnVuIHRvIGdldCBkYXRhIG91dCBvZiB0aGUgQ1BVIGNhY2hlcwotICoJCXRoZW4gaTkxNV9kZXZfc2V0X2RvbWFpbiBjYWxscyBpOTE1X2dlbV9mbHVzaCB0bwotICoJCWVtaXQgYW4gTUlfRkxVU0ggYW5kIGRybV9hZ3BfY2hpcHNldF9mbHVzaAotICoJNS4gVW5tYXBwZWQgZnJvbSBHVFQKLSAqCQlpOTE1X2dlbV9vYmplY3RfdW5iaW5kIGNhbGxzIHNldF9kb21haW4gKENQVSwgQ1BVKQotICoJCWZsdXNoX2RvbWFpbnMgYW5kIGludmFsaWRhdGVfZG9tYWlucyBlbmQgdXAgYm90aCB6ZXJvCi0gKgkJc28gbm8gZmx1c2hpbmcvaW52YWxpZGF0aW5nIGhhcHBlbnMKLSAqCTYuIEZyZWVkCi0gKgkJeWF5LCBkb25lCi0gKgotICogQ2FzZSAyOiBUaGUgc2hhcmVkIHJlbmRlciBidWZmZXIKLSAqCi0gKgkxLiBBbGxvY2F0ZWQKLSAqCTIuIE1hcHBlZCB0byBHVFQKLSAqCTMuIFJlYWQvd3JpdHRlbiBieSBHUFUKLSAqCTQuIHNldF9kb21haW4gdG8gKENQVSxDUFUpCi0gKgk1LiBSZWFkL3dyaXR0ZW4gYnkgQ1BVCi0gKgk2LiBSZWFkL3dyaXR0ZW4gYnkgR1BVCi0gKgotICoJMS4gQWxsb2NhdGVkCi0gKgkJU2FtZSBhcyBsYXN0IGV4YW1wbGUsIChDUFUsIENQVSkKLSAqCTIuIE1hcHBlZCB0byBHVFQKLSAqCQlOb3RoaW5nIGNoYW5nZXMgKGFzc2VydGlvbnMgZmluZCB0aGF0IGl0IGlzIG5vdCBpbiB0aGUgR1BVKQotICoJMy4gUmVhZC93cml0dGVuIGJ5IEdQVQotICoJCWV4ZWNidWZmZXIgY2FsbHMgc2V0X2RvbWFpbiAoUkVOREVSLCBSRU5ERVIpCi0gKgkJZmx1c2hfZG9tYWlucyBnZXRzIENQVQotICoJCWludmFsaWRhdGVfZG9tYWlucyBnZXRzIEdQVQotICoJCWNsZmx1c2ggKG9iaikKLSAqCQlNSV9GTFVTSCBhbmQgZHJtX2FncF9jaGlwc2V0X2ZsdXNoCi0gKgk0LiBzZXRfZG9tYWluIChDUFUsIENQVSkKLSAqCQlmbHVzaF9kb21haW5zIGdldHMgR1BVCi0gKgkJaW52YWxpZGF0ZV9kb21haW5zIGdldHMgQ1BVCi0gKgkJd2FpdF9yZW5kZXJpbmcgKG9iaikgdG8gbWFrZSBzdXJlIGFsbCBkcmF3aW5nIGlzIGNvbXBsZXRlLgotICoJCVRoaXMgd2lsbCBpbmNsdWRlIGFuIE1JX0ZMVVNIIHRvIGdldCB0aGUgZGF0YSBmcm9tIEdQVQotICoJCXRvIG1lbW9yeQotICoJCWNsZmx1c2ggKG9iaikgdG8gaW52YWxpZGF0ZSB0aGUgQ1BVIGNhY2hlCi0gKgkJQW5vdGhlciBNSV9GTFVTSCBpbiBpOTE1X2dlbV9mbHVzaCAoZWxpbWluYXRlIHRoaXMgc29tZWhvdz8pCi0gKgk1LiBSZWFkL3dyaXR0ZW4gYnkgQ1BVCi0gKgkJY2FjaGUgbGluZXMgYXJlIGxvYWRlZCBhbmQgZGlydGllZAotICoJNi4gUmVhZCB3cml0dGVuIGJ5IEdQVQotICoJCVNhbWUgYXMgbGFzdCBHUFUgYWNjZXNzCi0gKgotICogQ2FzZSAzOiBUaGUgY29uc3RhbnQgYnVmZmVyCi0gKgotICoJMS4gQWxsb2NhdGVkCi0gKgkyLiBXcml0dGVuIGJ5IENQVQotICoJMy4gUmVhZCBieSBHUFUKLSAqCTQuIFVwZGF0ZWQgKHdyaXR0ZW4pIGJ5IENQVSBhZ2FpbgotICoJNS4gUmVhZCBieSBHUFUKLSAqCi0gKgkxLiBBbGxvY2F0ZWQKLSAqCQkoQ1BVLCBDUFUpCi0gKgkyLiBXcml0dGVuIGJ5IENQVQotICoJCShDUFUsIENQVSkKLSAqCTMuIFJlYWQgYnkgR1BVCi0gKgkJKENQVStSRU5ERVIsIDApCi0gKgkJZmx1c2hfZG9tYWlucyA9IENQVQotICoJCWludmFsaWRhdGVfZG9tYWlucyA9IFJFTkRFUgotICoJCWNsZmx1c2ggKG9iaikKLSAqCQlNSV9GTFVTSAotICoJCWRybV9hZ3BfY2hpcHNldF9mbHVzaAotICoJNC4gVXBkYXRlZCAod3JpdHRlbikgYnkgQ1BVIGFnYWluCi0gKgkJKENQVSwgQ1BVKQotICoJCWZsdXNoX2RvbWFpbnMgPSAwIChubyBwcmV2aW91cyB3cml0ZSBkb21haW4pCi0gKgkJaW52YWxpZGF0ZV9kb21haW5zID0gMCAobm8gbmV3IHJlYWQgZG9tYWlucykKLSAqCTUuIFJlYWQgYnkgR1BVCi0gKgkJKENQVStSRU5ERVIsIDApCi0gKgkJZmx1c2hfZG9tYWlucyA9IENQVQotICoJCWludmFsaWRhdGVfZG9tYWlucyA9IFJFTkRFUgotICoJCWNsZmx1c2ggKG9iaikKLSAqCQlNSV9GTFVTSAotICoJCWRybV9hZ3BfY2hpcHNldF9mbHVzaAotICovCi1zdGF0aWMgdm9pZAotaTkxNV9nZW1fb2JqZWN0X3NldF90b19ncHVfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAotCQkJCSAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQotewotCXN0cnVjdCBkcm1fZGV2aWNlCQkqZGV2ID0gb2JqLT5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUJCSpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QJKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKLQl1aW50MzJfdAkJCWludmFsaWRhdGVfZG9tYWlucyA9IDA7Ci0JdWludDMyX3QJCQlmbHVzaF9kb21haW5zID0gMDsKLQl1aW50MzJfdAkJCW9sZF9yZWFkX2RvbWFpbnM7Ci0KLQlpbnRlbF9tYXJrX2J1c3koZGV2LCBvYmopOwotCi0JLyoKLQkgKiBJZiB0aGUgb2JqZWN0IGlzbid0IG1vdmluZyB0byBhIG5ldyB3cml0ZSBkb21haW4sCi0JICogbGV0IHRoZSBvYmplY3Qgc3RheSBpbiBtdWx0aXBsZSByZWFkIGRvbWFpbnMKLQkgKi8KLQlpZiAob2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiA9PSAwKQotCQlvYmotPnBlbmRpbmdfcmVhZF9kb21haW5zIHw9IG9iai0+cmVhZF9kb21haW5zOwotCWVsc2UKLQkJb2JqX3ByaXYtPmRpcnR5ID0gMTsKLQotCS8qCi0JICogRmx1c2ggdGhlIGN1cnJlbnQgd3JpdGUgZG9tYWluIGlmCi0JICogdGhlIG5ldyByZWFkIGRvbWFpbnMgZG9uJ3QgbWF0Y2guIEludmFsaWRhdGUKLQkgKiBhbnkgcmVhZCBkb21haW5zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBvbGQKLQkgKiB3cml0ZSBkb21haW4KLQkgKi8KLQlpZiAob2JqLT53cml0ZV9kb21haW4gJiYKLQkgICAgKG9iai0+d3JpdGVfZG9tYWluICE9IG9iai0+cGVuZGluZ19yZWFkX2RvbWFpbnMgfHwKLQkgICAgIG9ial9wcml2LT5yaW5nICE9IHJpbmcpKSB7Ci0JCWZsdXNoX2RvbWFpbnMgfD0gb2JqLT53cml0ZV9kb21haW47Ci0JCWludmFsaWRhdGVfZG9tYWlucyB8PQotCQkJb2JqLT5wZW5kaW5nX3JlYWRfZG9tYWlucyAmIH5vYmotPndyaXRlX2RvbWFpbjsKLQl9Ci0JLyoKLQkgKiBJbnZhbGlkYXRlIGFueSByZWFkIGNhY2hlcyB3aGljaCBtYXkgaGF2ZQotCSAqIHN0YWxlIGRhdGEuIFRoYXQgaXMsIGFueSBuZXcgcmVhZCBkb21haW5zLgotCSAqLwotCWludmFsaWRhdGVfZG9tYWlucyB8PSBvYmotPnBlbmRpbmdfcmVhZF9kb21haW5zICYgfm9iai0+cmVhZF9kb21haW5zOwotCWlmICgoZmx1c2hfZG9tYWlucyB8IGludmFsaWRhdGVfZG9tYWlucykgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKQotCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmopOwotCi0Jb2xkX3JlYWRfZG9tYWlucyA9IG9iai0+cmVhZF9kb21haW5zOwotCi0JLyogVGhlIGFjdHVhbCBvYmotPndyaXRlX2RvbWFpbiB3aWxsIGJlIHVwZGF0ZWQgd2l0aAotCSAqIHBlbmRpbmdfd3JpdGVfZG9tYWluIGFmdGVyIHdlIGVtaXQgdGhlIGFjY3VtdWxhdGVkIGZsdXNoIGZvciBhbGwKLQkgKiBvZiBvdXIgZG9tYWluIGNoYW5nZXMgaW4gZXhlY2J1ZmZlcnMgKHdoaWNoIGNsZWFycyBvYmplY3RzJwotCSAqIHdyaXRlX2RvbWFpbnMpLiAgU28gaWYgd2UgaGF2ZSBhIGN1cnJlbnQgd3JpdGUgZG9tYWluIHRoYXQgd2UKLQkgKiBhcmVuJ3QgY2hhbmdpbmcsIHNldCBwZW5kaW5nX3dyaXRlX2RvbWFpbiB0byB0aGF0LgotCSAqLwotCWlmIChmbHVzaF9kb21haW5zID09IDAgJiYgb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiA9PSAwKQotCQlvYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluID0gb2JqLT53cml0ZV9kb21haW47Ci0Jb2JqLT5yZWFkX2RvbWFpbnMgPSBvYmotPnBlbmRpbmdfcmVhZF9kb21haW5zOwotCi0JZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMgfD0gaW52YWxpZGF0ZV9kb21haW5zOwotCWRldi0+Zmx1c2hfZG9tYWlucyB8PSBmbHVzaF9kb21haW5zOwotCWlmIChmbHVzaF9kb21haW5zICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpCi0JCWRldl9wcml2LT5tbS5mbHVzaF9yaW5ncyB8PSBvYmpfcHJpdi0+cmluZy0+aWQ7Ci0JaWYgKGludmFsaWRhdGVfZG9tYWlucyAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKQotCQlkZXZfcHJpdi0+bW0uZmx1c2hfcmluZ3MgfD0gcmluZy0+aWQ7Ci0KLQl0cmFjZV9pOTE1X2dlbV9vYmplY3RfY2hhbmdlX2RvbWFpbihvYmosCi0JCQkJCSAgICBvbGRfcmVhZF9kb21haW5zLAotCQkJCQkgICAgb2JqLT53cml0ZV9kb21haW4pOwotfQotCiAvKioKICAqIE1vdmVzIHRoZSBvYmplY3QgZnJvbSBhIHBhcnRpYWxseSBDUFUgcmVhZCB0byBhIGZ1bGwgb25lLgogICoKQEAgLTMxNDUsMzAgKzMwODQsMjggQEAKICAqIGFuZCBkb2Vzbid0IGhhbmRsZSB0cmFuc2l0aW9uaW5nIGZyb20gIShyZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKS4KICAqLwogc3RhdGljIHZvaWQKLWk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZnVsbF9jcHVfcmVhZF9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCitpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2Z1bGxfY3B1X3JlYWRfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKLQotCWlmICghb2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkKQorCWlmICghb2JqLT5wYWdlX2NwdV92YWxpZCkKIAkJcmV0dXJuOwogCiAJLyogSWYgd2UncmUgcGFydGlhbGx5IGluIHRoZSBDUFUgcmVhZCBkb21haW4sIGZpbmlzaCBtb3ZpbmcgaXQgaW4uCiAJICovCi0JaWYgKG9iai0+cmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgeworCWlmIChvYmotPmJhc2UucmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgewogCQlpbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDw9IChvYmotPnNpemUgLSAxKSAvIFBBR0VfU0laRTsgaSsrKSB7Ci0JCQlpZiAob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkW2ldKQorCQlmb3IgKGkgPSAwOyBpIDw9IChvYmotPmJhc2Uuc2l6ZSAtIDEpIC8gUEFHRV9TSVpFOyBpKyspIHsKKwkJCWlmIChvYmotPnBhZ2VfY3B1X3ZhbGlkW2ldKQogCQkJCWNvbnRpbnVlOwotCQkJZHJtX2NsZmx1c2hfcGFnZXMob2JqX3ByaXYtPnBhZ2VzICsgaSwgMSk7CisJCQlkcm1fY2xmbHVzaF9wYWdlcyhvYmotPnBhZ2VzICsgaSwgMSk7CiAJCX0KIAl9CiAKIAkvKiBGcmVlIHRoZSBwYWdlX2NwdV92YWxpZCBtYXBwaW5ncyB3aGljaCBhcmUgbm93IHN0YWxlLCB3aGV0aGVyCiAJICogb3Igbm90IHdlJ3ZlIGdvdCBJOTE1X0dFTV9ET01BSU5fQ1BVLgogCSAqLwotCWtmcmVlKG9ial9wcml2LT5wYWdlX2NwdV92YWxpZCk7Ci0Jb2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkID0gTlVMTDsKKwlrZnJlZShvYmotPnBhZ2VfY3B1X3ZhbGlkKTsKKwlvYmotPnBhZ2VfY3B1X3ZhbGlkID0gTlVMTDsKIH0KIAogLyoqCkBAIC0zMTg0LDE5ICszMTIxLDE5IEBACiAgKiBmbHVzaGVzIHRvIG9jY3VyLgogICovCiBzdGF0aWMgaW50Ci1pOTE1X2dlbV9vYmplY3Rfc2V0X2NwdV9yZWFkX2RvbWFpbl9yYW5nZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKK2k5MTVfZ2VtX29iamVjdF9zZXRfY3B1X3JlYWRfZG9tYWluX3JhbmdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJCSAgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplKQogewotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CiAJdWludDMyX3Qgb2xkX3JlYWRfZG9tYWluczsKIAlpbnQgaSwgcmV0OwogCi0JaWYgKG9mZnNldCA9PSAwICYmIHNpemUgPT0gb2JqLT5zaXplKQorCWlmIChvZmZzZXQgPT0gMCAmJiBzaXplID09IG9iai0+YmFzZS5zaXplKQogCQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKG9iaiwgMCk7CiAKIAlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1X3dyaXRlX2RvbWFpbihvYmopOwotCWlmIChyZXQgIT0gMCkKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OworCiAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaiwgdHJ1ZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTMyMDQsNDU3ICszMTQxLDQ1IEBACiAJaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2d0dF93cml0ZV9kb21haW4ob2JqKTsKIAogCS8qIElmIHdlJ3JlIGFscmVhZHkgZnVsbHkgaW4gdGhlIENQVSByZWFkIGRvbWFpbiwgd2UncmUgZG9uZS4gKi8KLQlpZiAob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkID09IE5VTEwgJiYKLQkgICAgKG9iai0+cmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgIT0gMCkKKwlpZiAob2JqLT5wYWdlX2NwdV92YWxpZCA9PSBOVUxMICYmCisJICAgIChvYmotPmJhc2UucmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgIT0gMCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBPdGhlcndpc2UsIGNyZWF0ZS9jbGVhciB0aGUgcGVyLXBhZ2UgQ1BVIHJlYWQgZG9tYWluIGZsYWcgaWYgd2UncmUKIAkgKiBuZXdseSBhZGRpbmcgSTkxNV9HRU1fRE9NQUlOX0NQVQogCSAqLwotCWlmIChvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQgPT0gTlVMTCkgewotCQlvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQgPSBremFsbG9jKG9iai0+c2l6ZSAvIFBBR0VfU0laRSwKLQkJCQkJCSAgIEdGUF9LRVJORUwpOwotCQlpZiAob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkID09IE5VTEwpCisJaWYgKG9iai0+cGFnZV9jcHVfdmFsaWQgPT0gTlVMTCkgeworCQlvYmotPnBhZ2VfY3B1X3ZhbGlkID0ga3phbGxvYyhvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRSwKKwkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmIChvYmotPnBhZ2VfY3B1X3ZhbGlkID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQl9IGVsc2UgaWYgKChvYmotPnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpID09IDApCi0JCW1lbXNldChvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQsIDAsIG9iai0+c2l6ZSAvIFBBR0VfU0laRSk7CisJfSBlbHNlIGlmICgob2JqLT5iYXNlLnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpID09IDApCisJCW1lbXNldChvYmotPnBhZ2VfY3B1X3ZhbGlkLCAwLCBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRSk7CiAKIAkvKiBGbHVzaCB0aGUgY2FjaGUgb24gYW55IHBhZ2VzIHRoYXQgYXJlIHN0aWxsIGludmFsaWQgZnJvbSB0aGUgQ1BVJ3MKIAkgKiBwZXJzcGVjdGl2ZS4KIAkgKi8KIAlmb3IgKGkgPSBvZmZzZXQgLyBQQUdFX1NJWkU7IGkgPD0gKG9mZnNldCArIHNpemUgLSAxKSAvIFBBR0VfU0laRTsKIAkgICAgIGkrKykgewotCQlpZiAob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkW2ldKQorCQlpZiAob2JqLT5wYWdlX2NwdV92YWxpZFtpXSkKIAkJCWNvbnRpbnVlOwogCi0JCWRybV9jbGZsdXNoX3BhZ2VzKG9ial9wcml2LT5wYWdlcyArIGksIDEpOworCQlkcm1fY2xmbHVzaF9wYWdlcyhvYmotPnBhZ2VzICsgaSwgMSk7CiAKLQkJb2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkW2ldID0gMTsKKwkJb2JqLT5wYWdlX2NwdV92YWxpZFtpXSA9IDE7CiAJfQogCiAJLyogSXQgc2hvdWxkIG5vdyBiZSBvdXQgb2YgYW55IG90aGVyIHdyaXRlIGRvbWFpbnMsIGFuZCB3ZSBjYW4gdXBkYXRlCiAJICogdGhlIGRvbWFpbiB2YWx1ZXMgZm9yIG91ciBjaGFuZ2VzLgogCSAqLwotCUJVR19PTigob2JqLT53cml0ZV9kb21haW4gJiB+STkxNV9HRU1fRE9NQUlOX0NQVSkgIT0gMCk7CisJQlVHX09OKChvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgfkk5MTVfR0VNX0RPTUFJTl9DUFUpICE9IDApOwogCi0Jb2xkX3JlYWRfZG9tYWlucyA9IG9iai0+cmVhZF9kb21haW5zOwotCW9iai0+cmVhZF9kb21haW5zIHw9IEk5MTVfR0VNX0RPTUFJTl9DUFU7CisJb2xkX3JlYWRfZG9tYWlucyA9IG9iai0+YmFzZS5yZWFkX2RvbWFpbnM7CisJb2JqLT5iYXNlLnJlYWRfZG9tYWlucyB8PSBJOTE1X0dFTV9ET01BSU5fQ1BVOwogCiAJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2NoYW5nZV9kb21haW4ob2JqLAogCQkJCQkgICAgb2xkX3JlYWRfZG9tYWlucywKLQkJCQkJICAgIG9iai0+d3JpdGVfZG9tYWluKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1pOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX2VudHJ5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmVudHJ5LAotCQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2MpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICp0YXJnZXRfb2JqOwotCXVpbnQzMl90IHRhcmdldF9vZmZzZXQ7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQl0YXJnZXRfb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LAotCQkJCQkgICByZWxvYy0+dGFyZ2V0X2hhbmRsZSk7Ci0JaWYgKHRhcmdldF9vYmogPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQl0YXJnZXRfb2Zmc2V0ID0gdG9faW50ZWxfYm8odGFyZ2V0X29iaiktPmd0dF9vZmZzZXQ7Ci0KLSNpZiBXQVRDSF9SRUxPQwotCURSTV9JTkZPKCIlczogb2JqICVwIG9mZnNldCAlMDh4IHRhcmdldCAlZCAiCi0JCSAicmVhZCAlMDh4IHdyaXRlICUwOHggZ3R0ICUwOHggIgotCQkgInByZXN1bWVkICUwOHggZGVsdGEgJTA4eFxuIiwKLQkJIF9fZnVuY19fLAotCQkgb2JqLAotCQkgKGludCkgcmVsb2MtPm9mZnNldCwKLQkJIChpbnQpIHJlbG9jLT50YXJnZXRfaGFuZGxlLAotCQkgKGludCkgcmVsb2MtPnJlYWRfZG9tYWlucywKLQkJIChpbnQpIHJlbG9jLT53cml0ZV9kb21haW4sCi0JCSAoaW50KSB0YXJnZXRfb2Zmc2V0LAotCQkgKGludCkgcmVsb2MtPnByZXN1bWVkX29mZnNldCwKLQkJIHJlbG9jLT5kZWx0YSk7Ci0jZW5kaWYKLQotCS8qIFRoZSB0YXJnZXQgYnVmZmVyIHNob3VsZCBoYXZlIGFwcGVhcmVkIGJlZm9yZSB1cyBpbiB0aGUKLQkgKiBleGVjX29iamVjdCBsaXN0LCBzbyBpdCBzaG91bGQgaGF2ZSBhIEdUVCBzcGFjZSBib3VuZCBieSBub3cuCi0JICovCi0JaWYgKHRhcmdldF9vZmZzZXQgPT0gMCkgewotCQlEUk1fRVJST1IoIk5vIEdUVCBzcGFjZSBmb3VuZCBmb3Igb2JqZWN0ICVkXG4iLAotCQkJICByZWxvYy0+dGFyZ2V0X2hhbmRsZSk7Ci0JCWdvdG8gZXJyOwotCX0KLQotCS8qIFZhbGlkYXRlIHRoYXQgdGhlIHRhcmdldCBpcyBpbiBhIHZhbGlkIHIvdyBHUFUgZG9tYWluICovCi0JaWYgKHJlbG9jLT53cml0ZV9kb21haW4gJiAocmVsb2MtPndyaXRlX2RvbWFpbiAtIDEpKSB7Ci0JCURSTV9FUlJPUigicmVsb2Mgd2l0aCBtdWx0aXBsZSB3cml0ZSBkb21haW5zOiAiCi0JCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCAiCi0JCQkgICJyZWFkICUwOHggd3JpdGUgJTA4eCIsCi0JCQkgIG9iaiwgcmVsb2MtPnRhcmdldF9oYW5kbGUsCi0JCQkgIChpbnQpIHJlbG9jLT5vZmZzZXQsCi0JCQkgIHJlbG9jLT5yZWFkX2RvbWFpbnMsCi0JCQkgIHJlbG9jLT53cml0ZV9kb21haW4pOwotCQlnb3RvIGVycjsKLQl9Ci0JaWYgKHJlbG9jLT53cml0ZV9kb21haW4gJiBJOTE1X0dFTV9ET01BSU5fQ1BVIHx8Ci0JICAgIHJlbG9jLT5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSB7Ci0JCURSTV9FUlJPUigicmVsb2Mgd2l0aCByZWFkL3dyaXRlIENQVSBkb21haW5zOiAiCi0JCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCAiCi0JCQkgICJyZWFkICUwOHggd3JpdGUgJTA4eCIsCi0JCQkgIG9iaiwgcmVsb2MtPnRhcmdldF9oYW5kbGUsCi0JCQkgIChpbnQpIHJlbG9jLT5vZmZzZXQsCi0JCQkgIHJlbG9jLT5yZWFkX2RvbWFpbnMsCi0JCQkgIHJlbG9jLT53cml0ZV9kb21haW4pOwotCQlnb3RvIGVycjsKLQl9Ci0JaWYgKHJlbG9jLT53cml0ZV9kb21haW4gJiYgdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4gJiYKLQkgICAgcmVsb2MtPndyaXRlX2RvbWFpbiAhPSB0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbikgewotCQlEUk1fRVJST1IoIldyaXRlIGRvbWFpbiBjb25mbGljdDogIgotCQkJICAib2JqICVwIHRhcmdldCAlZCBvZmZzZXQgJWQgIgotCQkJICAibmV3ICUwOHggb2xkICUwOHhcbiIsCi0JCQkgIG9iaiwgcmVsb2MtPnRhcmdldF9oYW5kbGUsCi0JCQkgIChpbnQpIHJlbG9jLT5vZmZzZXQsCi0JCQkgIHJlbG9jLT53cml0ZV9kb21haW4sCi0JCQkgIHRhcmdldF9vYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluKTsKLQkJZ290byBlcnI7Ci0JfQotCi0JdGFyZ2V0X29iai0+cGVuZGluZ19yZWFkX2RvbWFpbnMgfD0gcmVsb2MtPnJlYWRfZG9tYWluczsKLQl0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiB8PSByZWxvYy0+d3JpdGVfZG9tYWluOwotCi0JLyogSWYgdGhlIHJlbG9jYXRpb24gYWxyZWFkeSBoYXMgdGhlIHJpZ2h0IHZhbHVlIGluIGl0LCBubwotCSAqIG1vcmUgd29yayBuZWVkcyB0byBiZSBkb25lLgotCSAqLwotCWlmICh0YXJnZXRfb2Zmc2V0ID09IHJlbG9jLT5wcmVzdW1lZF9vZmZzZXQpCi0JCWdvdG8gb3V0OwotCi0JLyogQ2hlY2sgdGhhdCB0aGUgcmVsb2NhdGlvbiBhZGRyZXNzIGlzIHZhbGlkLi4uICovCi0JaWYgKHJlbG9jLT5vZmZzZXQgPiBvYmotPmJhc2Uuc2l6ZSAtIDQpIHsKLQkJRFJNX0VSUk9SKCJSZWxvY2F0aW9uIGJleW9uZCBvYmplY3QgYm91bmRzOiAiCi0JCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCBzaXplICVkLlxuIiwKLQkJCSAgb2JqLCByZWxvYy0+dGFyZ2V0X2hhbmRsZSwKLQkJCSAgKGludCkgcmVsb2MtPm9mZnNldCwKLQkJCSAgKGludCkgb2JqLT5iYXNlLnNpemUpOwotCQlnb3RvIGVycjsKLQl9Ci0JaWYgKHJlbG9jLT5vZmZzZXQgJiAzKSB7Ci0JCURSTV9FUlJPUigiUmVsb2NhdGlvbiBub3QgNC1ieXRlIGFsaWduZWQ6ICIKLQkJCSAgIm9iaiAlcCB0YXJnZXQgJWQgb2Zmc2V0ICVkLlxuIiwKLQkJCSAgb2JqLCByZWxvYy0+dGFyZ2V0X2hhbmRsZSwKLQkJCSAgKGludCkgcmVsb2MtPm9mZnNldCk7Ci0JCWdvdG8gZXJyOwotCX0KLQotCS8qIGFuZCBwb2ludHMgdG8gc29tZXdoZXJlIHdpdGhpbiB0aGUgdGFyZ2V0IG9iamVjdC4gKi8KLQlpZiAocmVsb2MtPmRlbHRhID49IHRhcmdldF9vYmotPnNpemUpIHsKLQkJRFJNX0VSUk9SKCJSZWxvY2F0aW9uIGJleW9uZCB0YXJnZXQgb2JqZWN0IGJvdW5kczogIgotCQkJICAib2JqICVwIHRhcmdldCAlZCBkZWx0YSAlZCBzaXplICVkLlxuIiwKLQkJCSAgb2JqLCByZWxvYy0+dGFyZ2V0X2hhbmRsZSwKLQkJCSAgKGludCkgcmVsb2MtPmRlbHRhLAotCQkJICAoaW50KSB0YXJnZXRfb2JqLT5zaXplKTsKLQkJZ290byBlcnI7Ci0JfQotCi0JcmVsb2MtPmRlbHRhICs9IHRhcmdldF9vZmZzZXQ7Ci0JaWYgKG9iai0+YmFzZS53cml0ZV9kb21haW4gPT0gSTkxNV9HRU1fRE9NQUlOX0NQVSkgewotCQl1aW50MzJfdCBwYWdlX29mZnNldCA9IHJlbG9jLT5vZmZzZXQgJiB+UEFHRV9NQVNLOwotCQljaGFyICp2YWRkcjsKLQotCQl2YWRkciA9IGttYXBfYXRvbWljKG9iai0+cGFnZXNbcmVsb2MtPm9mZnNldCA+PiBQQUdFX1NISUZUXSk7Ci0JCSoodWludDMyX3QgKikodmFkZHIgKyBwYWdlX29mZnNldCkgPSByZWxvYy0+ZGVsdGE7Ci0JCWt1bm1hcF9hdG9taWModmFkZHIpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JCXVpbnQzMl90IF9faW9tZW0gKnJlbG9jX2VudHJ5OwotCQl2b2lkIF9faW9tZW0gKnJlbG9jX3BhZ2U7Ci0KLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKCZvYmotPmJhc2UsIDEpOwotCQlpZiAocmV0KQotCQkJZ290byBlcnI7Ci0KLQkJLyogTWFwIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIHJlbG9jYXRpb24gd2UncmUgZ29pbmcgdG8gcGVyZm9ybS4gICovCi0JCXJlbG9jLT5vZmZzZXQgKz0gb2JqLT5ndHRfb2Zmc2V0OwotCQlyZWxvY19wYWdlID0gaW9fbWFwcGluZ19tYXBfYXRvbWljX3djKGRldl9wcml2LT5tbS5ndHRfbWFwcGluZywKLQkJCQkJCSAgICAgIHJlbG9jLT5vZmZzZXQgJiBQQUdFX01BU0spOwotCQlyZWxvY19lbnRyeSA9ICh1aW50MzJfdCBfX2lvbWVtICopCi0JCQkocmVsb2NfcGFnZSArIChyZWxvYy0+b2Zmc2V0ICYgflBBR0VfTUFTSykpOwotCQlpb3dyaXRlMzIocmVsb2MtPmRlbHRhLCByZWxvY19lbnRyeSk7Ci0JCWlvX21hcHBpbmdfdW5tYXBfYXRvbWljKHJlbG9jX3BhZ2UpOwotCX0KLQotCS8qIGFuZCB1cGRhdGUgdGhlIHVzZXIncyByZWxvY2F0aW9uIGVudHJ5ICovCi0JcmVsb2MtPnByZXN1bWVkX29mZnNldCA9IHRhcmdldF9vZmZzZXQ7Ci0KLW91dDoKLQlyZXQgPSAwOwotZXJyOgotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50cnkpCi17Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqdXNlcl9yZWxvY3M7Ci0JaW50IGksIHJldDsKLQotCXVzZXJfcmVsb2NzID0gKHZvaWQgX191c2VyICopKHVpbnRwdHJfdCllbnRyeS0+cmVsb2NzX3B0cjsKLQlmb3IgKGkgPSAwOyBpIDwgZW50cnktPnJlbG9jYXRpb25fY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2M7Ci0KLQkJaWYgKF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoJnJlbG9jLAotCQkJCQkgICAgICB1c2VyX3JlbG9jcytpLAotCQkJCQkgICAgICBzaXplb2YocmVsb2MpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfZW50cnkob2JqLCBmaWxlX3ByaXYsIGVudHJ5LCAmcmVsb2MpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQotCQlpZiAoX19jb3B5X3RvX3VzZXJfaW5hdG9taWMoJnVzZXJfcmVsb2NzW2ldLnByZXN1bWVkX29mZnNldCwKLQkJCQkJICAgICZyZWxvYy5wcmVzdW1lZF9vZmZzZXQsCi0JCQkJCSAgICBzaXplb2YocmVsb2MucHJlc3VtZWRfb2Zmc2V0KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZV9vYmplY3Rfc2xvdyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50cnksCi0JCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jcykKLXsKLQlpbnQgaSwgcmV0OwotCi0JZm9yIChpID0gMDsgaSA8IGVudHJ5LT5yZWxvY2F0aW9uX2NvdW50OyBpKyspIHsKLQkJcmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZV9lbnRyeShvYmosIGZpbGVfcHJpdiwgZW50cnksICZyZWxvY3NbaV0pOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCi0JCQkgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9iamVjdF9saXN0LAotCQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlY19saXN0LAotCQkJICAgICBpbnQgY291bnQpCi17Ci0JaW50IGksIHJldDsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB0b19pbnRlbF9ibyhvYmplY3RfbGlzdFtpXSk7Ci0JCW9iai0+YmFzZS5wZW5kaW5nX3JlYWRfZG9tYWlucyA9IDA7Ci0JCW9iai0+YmFzZS5wZW5kaW5nX3dyaXRlX2RvbWFpbiA9IDA7Ci0JCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfb2JqZWN0KG9iaiwgZmlsZSwKLQkJCQkJCQkgICZleGVjX2xpc3RbaV0pOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZXNlcnZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlLAotCQkJICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9iamVjdF9saXN0LAotCQkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVjX2xpc3QsCi0JCQkgICAgaW50IGNvdW50KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IHJldCwgaSwgcmV0cnk7Ci0KLQkvKiBhdHRlbXB0IHRvIHBpbiBhbGwgb2YgdGhlIGJ1ZmZlcnMgaW50byB0aGUgR1RUICovCi0JZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgMjsgcmV0cnkrKykgewotCQlyZXQgPSAwOwotCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmVudHJ5ID0gJmV4ZWNfbGlzdFtpXTsKLQkJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo9IHRvX2ludGVsX2JvKG9iamVjdF9saXN0W2ldKTsKLQkJCWJvb2wgbmVlZF9mZW5jZSA9Ci0JCQkJZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0UgJiYKLQkJCQlvYmotPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkU7Ci0KLQkJCS8qIENoZWNrIGZlbmNlIHJlZyBjb25zdHJhaW50cyBhbmQgcmViaW5kIGlmIG5lY2Vzc2FyeSAqLwotCQkJaWYgKG5lZWRfZmVuY2UgJiYKLQkJCSAgICAhaTkxNV9nZW1fb2JqZWN0X2ZlbmNlX29mZnNldF9vaygmb2JqLT5iYXNlLAotCQkJCQkJCSAgICAgb2JqLT50aWxpbmdfbW9kZSkpIHsKLQkJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKCZvYmotPmJhc2UpOwotCQkJCWlmIChyZXQpCi0JCQkJCWJyZWFrOwotCQkJfQotCi0JCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKCZvYmotPmJhc2UsIGVudHJ5LT5hbGlnbm1lbnQpOwotCQkJaWYgKHJldCkKLQkJCQlicmVhazsKLQotCQkJLyoKLQkJCSAqIFByZS05NjUgY2hpcHMgbmVlZCBhIGZlbmNlIHJlZ2lzdGVyIHNldCB1cCBpbiBvcmRlcgotCQkJICogdG8gcHJvcGVybHkgaGFuZGxlIGJsaXRzIHRvL2Zyb20gdGlsZWQgc3VyZmFjZXMuCi0JCQkgKi8KLQkJCWlmIChuZWVkX2ZlbmNlKSB7Ci0JCQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZV9yZWcoJm9iai0+YmFzZSwgdHJ1ZSk7Ci0JCQkJaWYgKHJldCkgewotCQkJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4oJm9iai0+YmFzZSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWRldl9wcml2LT5mZW5jZV9yZWdzW29iai0+ZmVuY2VfcmVnXS5ncHUgPSB0cnVlOwotCQkJfQotCi0JCQllbnRyeS0+b2Zmc2V0ID0gb2JqLT5ndHRfb2Zmc2V0OwotCQl9Ci0KLQkJd2hpbGUgKGktLSkKLQkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmplY3RfbGlzdFtpXSk7Ci0KLQkJaWYgKHJldCA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHJldCAhPSAtRU5PU1BDIHx8IHJldHJ5KQotCQkJcmV0dXJuIHJldDsKLQotCQlyZXQgPSBpOTE1X2dlbV9ldmljdF9ldmVyeXRoaW5nKGRldik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1pOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX3Nsb3coc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKLQkJCQkgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9iamVjdF9saXN0LAotCQkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWNfbGlzdCwKLQkJCQkgIGludCBjb3VudCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jOwotCWludCBpLCB0b3RhbCwgcmV0OwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHRvX2ludGVsX2JvKG9iamVjdF9saXN0W2ldKTsKLQkJb2JqLT5pbl9leGVjYnVmZmVyID0gZmFsc2U7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0KLQl0b3RhbCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCXRvdGFsICs9IGV4ZWNfbGlzdFtpXS5yZWxvY2F0aW9uX2NvdW50OwotCi0JcmVsb2MgPSBkcm1fbWFsbG9jX2FiKHRvdGFsLCBzaXplb2YoKnJlbG9jKSk7Ci0JaWYgKHJlbG9jID09IE5VTEwpIHsKLQkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQl0b3RhbCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqdXNlcl9yZWxvY3M7Ci0KLQkJdXNlcl9yZWxvY3MgPSAodm9pZCBfX3VzZXIgKikodWludHB0cl90KWV4ZWNfbGlzdFtpXS5yZWxvY3NfcHRyOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcihyZWxvYyt0b3RhbCwgdXNlcl9yZWxvY3MsCi0JCQkJICAgZXhlY19saXN0W2ldLnJlbG9jYXRpb25fY291bnQgKgotCQkJCSAgIHNpemVvZigqcmVsb2MpKSkgewotCQkJcmV0ID0gLUVGQVVMVDsKLQkJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0KLQkJdG90YWwgKz0gZXhlY19saXN0W2ldLnJlbG9jYXRpb25fY291bnQ7Ci0JfQotCi0JcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoZGV2KTsKLQlpZiAocmV0KSB7Ci0JCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJZ290byBlcnI7Ci0JfQotCi0JcmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZXNlcnZlKGRldiwgZmlsZSwKLQkJCQkJICBvYmplY3RfbGlzdCwgZXhlY19saXN0LAotCQkJCQkgIGNvdW50KTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCXRvdGFsID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdG9faW50ZWxfYm8ob2JqZWN0X2xpc3RbaV0pOwotCQlvYmotPmJhc2UucGVuZGluZ19yZWFkX2RvbWFpbnMgPSAwOwotCQlvYmotPmJhc2UucGVuZGluZ193cml0ZV9kb21haW4gPSAwOwotCQlyZXQgPSBpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX29iamVjdF9zbG93KG9iaiwgZmlsZSwKLQkJCQkJCQkgICAgICAgJmV4ZWNfbGlzdFtpXSwKLQkJCQkJCQkgICAgICAgcmVsb2MgKyB0b3RhbCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycjsKLQotCQl0b3RhbCArPSBleGVjX2xpc3RbaV0ucmVsb2NhdGlvbl9jb3VudDsKLQl9Ci0KLQkvKiBMZWF2ZSB0aGUgdXNlciByZWxvY2F0aW9ucyBhcyBhcmUsIHRoaXMgaXMgdGhlIHBhaW5mdWxseSBzbG93IHBhdGgsCi0JICogYW5kIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGNvbXBsaWNhdGlvbiBvZiBkcm9wcGluZyB0aGUgbG9jayB3aGlsc3QKLQkgKiBoYXZpbmcgYnVmZmVycyByZXNlcnZlZCBpbiB0aGUgYXBlcnR1cmUgYW5kIHNvIGNhdXNpbmcgc3B1cmlvdXMKLQkgKiBFTk9TUEMgZm9yIHJhbmRvbSBvcGVyYXRpb25zLgotCSAqLwotCi1lcnI6Ci0JZHJtX2ZyZWVfbGFyZ2UocmVsb2MpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWk5MTVfZ2VtX2V4ZWNidWZmZXJfbW92ZV90b19ncHUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCi0JCQkJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAotCQkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9iamVjdHMsCi0JCQkJaW50IGNvdW50KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IHJldCwgaTsKLQotCS8qIFplcm8gdGhlIGdsb2JhbCBmbHVzaC9pbnZhbGlkYXRlIGZsYWdzLiBUaGVzZQotCSAqIHdpbGwgYmUgbW9kaWZpZWQgYXMgbmV3IGRvbWFpbnMgYXJlIGNvbXB1dGVkCi0JICogZm9yIGVhY2ggb2JqZWN0Ci0JICovCi0JZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMgPSAwOwotCWRldi0+Zmx1c2hfZG9tYWlucyA9IDA7Ci0JZGV2X3ByaXYtPm1tLmZsdXNoX3JpbmdzID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLQkJaTkxNV9nZW1fb2JqZWN0X3NldF90b19ncHVfZG9tYWluKG9iamVjdHNbaV0sIHJpbmcpOwotCi0JaWYgKGRldi0+aW52YWxpZGF0ZV9kb21haW5zIHwgZGV2LT5mbHVzaF9kb21haW5zKSB7Ci0jaWYgV0FUQ0hfRVhFQwotCQlEUk1fSU5GTygiJXM6IGludmFsaWRhdGVfZG9tYWlucyAlMDh4IGZsdXNoX2RvbWFpbnMgJTA4eFxuIiwKLQkJCSAgX19mdW5jX18sCi0JCQkgZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMsCi0JCQkgZGV2LT5mbHVzaF9kb21haW5zKTsKLSNlbmRpZgotCQlpOTE1X2dlbV9mbHVzaChkZXYsIGZpbGUsCi0JCQkgICAgICAgZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMsCi0JCQkgICAgICAgZGV2LT5mbHVzaF9kb21haW5zLAotCQkJICAgICAgIGRldl9wcml2LT5tbS5mbHVzaF9yaW5ncyk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHRvX2ludGVsX2JvKG9iamVjdHNbaV0pOwotCQkvKiBYWFggcmVwbGFjZSB3aXRoIHNlbWFwaG9yZXMgKi8KLQkJaWYgKG9iai0+cmluZyAmJiByaW5nICE9IG9iai0+cmluZykgewotCQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKCZvYmotPmJhc2UsIHRydWUpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQorCQkJCQkgICAgb2JqLT5iYXNlLndyaXRlX2RvbWFpbik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM2OTQsMjAgKzMyMTksMjEgQEAKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSAwOwotCWlmICghaTkxNV9zZXFub19wYXNzZWQocmluZy0+Z2V0X3NlcW5vKGRldiwgcmluZyksIHNlcW5vKSkgeworCWlmICghaTkxNV9zZXFub19wYXNzZWQocmluZy0+Z2V0X3NlcW5vKHJpbmcpLCBzZXFubykpIHsKIAkJLyogQW5kIHdhaXQgZm9yIHRoZSBzZXFubyBwYXNzaW5nIHdpdGhvdXQgaG9sZGluZyBhbnkgbG9ja3MgYW5kCiAJCSAqIGNhdXNpbmcgZXh0cmEgbGF0ZW5jeSBmb3Igb3RoZXJzLiBUaGlzIGlzIHNhZmUgYXMgdGhlIGlycQogCQkgKiBnZW5lcmF0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHJ1biBhdG9taWNhbGx5IGFuZCBzbyBpcwogCQkgKiBsb2NrbGVzcy4KIAkJICovCi0JCXJpbmctPnVzZXJfaXJxX2dldChkZXYsIHJpbmcpOwotCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocmluZy0+aXJxX3F1ZXVlLAotCQkJCQkgICAgICAgaTkxNV9zZXFub19wYXNzZWQocmluZy0+Z2V0X3NlcW5vKGRldiwgcmluZyksIHNlcW5vKQotCQkJCQkgICAgICAgfHwgYXRvbWljX3JlYWQoJmRldl9wcml2LT5tbS53ZWRnZWQpKTsKLQkJcmluZy0+dXNlcl9pcnFfcHV0KGRldiwgcmluZyk7CisJCWlmIChyaW5nLT5pcnFfZ2V0KHJpbmcpKSB7CisJCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocmluZy0+aXJxX3F1ZXVlLAorCQkJCQkJICAgICAgIGk5MTVfc2Vxbm9fcGFzc2VkKHJpbmctPmdldF9zZXFubyhyaW5nKSwgc2Vxbm8pCisJCQkJCQkgICAgICAgfHwgYXRvbWljX3JlYWQoJmRldl9wcml2LT5tbS53ZWRnZWQpKTsKKwkJCXJpbmctPmlycV9wdXQocmluZyk7CiAKLQkJaWYgKHJldCA9PSAwICYmIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+bW0ud2VkZ2VkKSkKLQkJCXJldCA9IC1FSU87CisJCQlpZiAocmV0ID09IDAgJiYgYXRvbWljX3JlYWQoJmRldl9wcml2LT5tbS53ZWRnZWQpKQorCQkJCXJldCA9IC1FSU87CisJCX0KIAl9CiAKIAlpZiAocmV0ID09IDApCkBAIC0zNzE2LDU3NyArMzI0MiwxMDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1pOTE1X2dlbV9jaGVja19leGVjYnVmZmVyKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmV4ZWMsCi0JCQkgIHVpbnQ2NF90IGV4ZWNfb2Zmc2V0KQotewotCXVpbnQzMl90IGV4ZWNfc3RhcnQsIGV4ZWNfbGVuOwotCi0JZXhlY19zdGFydCA9ICh1aW50MzJfdCkgZXhlY19vZmZzZXQgKyBleGVjLT5iYXRjaF9zdGFydF9vZmZzZXQ7Ci0JZXhlY19sZW4gPSAodWludDMyX3QpIGV4ZWMtPmJhdGNoX2xlbjsKLQotCWlmICgoZXhlY19zdGFydCB8IGV4ZWNfbGVuKSAmIDB4NykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWV4ZWNfc3RhcnQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXZhbGlkYXRlX2V4ZWNfbGlzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlYywKLQkJICAgaW50IGNvdW50KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJY2hhciBfX3VzZXIgKnB0ciA9IChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpZXhlY1tpXS5yZWxvY3NfcHRyOwotCQlpbnQgbGVuZ3RoOyAvKiBsaW1pdGVkIGJ5IGZhdWx0X2luX3BhZ2VzX3JlYWRhYmxlKCkgKi8KLQotCQkvKiBGaXJzdCBjaGVjayBmb3IgbWFsaWNpb3VzIGlucHV0IGNhdXNpbmcgb3ZlcmZsb3cgKi8KLQkJaWYgKGV4ZWNbaV0ucmVsb2NhdGlvbl9jb3VudCA+Ci0JCSAgICBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlsZW5ndGggPSBleGVjW2ldLnJlbG9jYXRpb25fY291bnQgKgotCQkJc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSk7Ci0JCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBwdHIsIGxlbmd0aCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQkvKiB3ZSBtYXkgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgcHJlc3VtZWQgb2Zmc2V0cyAqLwotCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHB0ciwgbGVuZ3RoKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCWlmIChmYXVsdF9pbl9wYWdlc19yZWFkYWJsZShwdHIsIGxlbmd0aCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlLAotCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqYXJncywKLQkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVjX2xpc3QpCi17Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqb2JqZWN0X2xpc3QgPSBOVUxMOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYmF0Y2hfb2JqOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKLQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHJlY3RzID0gTlVMTDsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QgPSBOVUxMOwotCWludCByZXQsIGksIGZsaXBzOwotCXVpbnQ2NF90IGV4ZWNfb2Zmc2V0OwotCi0Jc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nID0gTlVMTDsKLQotCXJldCA9IGk5MTVfZ2VtX2NoZWNrX2lzX3dlZGdlZChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB2YWxpZGF0ZV9leGVjX2xpc3QoZXhlY19saXN0LCBhcmdzLT5idWZmZXJfY291bnQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLSNpZiBXQVRDSF9FWEVDCi0JRFJNX0lORk8oImJ1ZmZlcnNfcHRyICVkIGJ1ZmZlcl9jb3VudCAlZCBsZW4gJTA4eFxuIiwKLQkJICAoaW50KSBhcmdzLT5idWZmZXJzX3B0ciwgYXJncy0+YnVmZmVyX2NvdW50LCBhcmdzLT5iYXRjaF9sZW4pOwotI2VuZGlmCi0Jc3dpdGNoIChhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19SSU5HX01BU0spIHsKLQljYXNlIEk5MTVfRVhFQ19ERUZBVUxUOgotCWNhc2UgSTkxNV9FWEVDX1JFTkRFUjoKLQkJcmluZyA9ICZkZXZfcHJpdi0+cmVuZGVyX3Jpbmc7Ci0JCWJyZWFrOwotCWNhc2UgSTkxNV9FWEVDX0JTRDoKLQkJaWYgKCFIQVNfQlNEKGRldikpIHsKLQkJCURSTV9FUlJPUigiZXhlY2J1ZiB3aXRoIGludmFsaWQgcmluZyAoQlNEKVxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlyaW5nID0gJmRldl9wcml2LT5ic2RfcmluZzsKLQkJYnJlYWs7Ci0JY2FzZSBJOTE1X0VYRUNfQkxUOgotCQlpZiAoIUhBU19CTFQoZGV2KSkgewotCQkJRFJNX0VSUk9SKCJleGVjYnVmIHdpdGggaW52YWxpZCByaW5nIChCTFQpXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJpbmcgPSAmZGV2X3ByaXYtPmJsdF9yaW5nOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1IoImV4ZWNidWYgd2l0aCB1bmtub3duIHJpbmc6ICVkXG4iLAotCQkJICAoaW50KShhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19SSU5HX01BU0spKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGFyZ3MtPmJ1ZmZlcl9jb3VudCA8IDEpIHsKLQkJRFJNX0VSUk9SKCJleGVjYnVmIHdpdGggJWQgYnVmZmVyc1xuIiwgYXJncy0+YnVmZmVyX2NvdW50KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCW9iamVjdF9saXN0ID0gZHJtX21hbGxvY19hYihzaXplb2YoKm9iamVjdF9saXN0KSwgYXJncy0+YnVmZmVyX2NvdW50KTsKLQlpZiAob2JqZWN0X2xpc3QgPT0gTlVMTCkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBvYmplY3QgbGlzdCBmb3IgJWQgYnVmZmVyc1xuIiwKLQkJCSAgYXJncy0+YnVmZmVyX2NvdW50KTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBwcmVfbXV0ZXhfZXJyOwotCX0KLQotCWlmIChhcmdzLT5udW1fY2xpcHJlY3RzICE9IDApIHsKLQkJY2xpcHJlY3RzID0ga2NhbGxvYyhhcmdzLT5udW1fY2xpcHJlY3RzLCBzaXplb2YoKmNsaXByZWN0cyksCi0JCQkJICAgIEdGUF9LRVJORUwpOwotCQlpZiAoY2xpcHJlY3RzID09IE5VTEwpIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIHByZV9tdXRleF9lcnI7Ci0JCX0KLQotCQlyZXQgPSBjb3B5X2Zyb21fdXNlcihjbGlwcmVjdHMsCi0JCQkJICAgICAoc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICopCi0JCQkJICAgICAodWludHB0cl90KSBhcmdzLT5jbGlwcmVjdHNfcHRyLAotCQkJCSAgICAgc2l6ZW9mKCpjbGlwcmVjdHMpICogYXJncy0+bnVtX2NsaXByZWN0cyk7Ci0JCWlmIChyZXQgIT0gMCkgewotCQkJRFJNX0VSUk9SKCJjb3B5ICVkIGNsaXByZWN0cyBmYWlsZWQ6ICVkXG4iLAotCQkJCSAgYXJncy0+bnVtX2NsaXByZWN0cywgcmV0KTsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIHByZV9tdXRleF9lcnI7Ci0JCX0KLQl9Ci0KLQlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2YoKnJlcXVlc3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAocmVxdWVzdCA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gcHJlX211dGV4X2VycjsKLQl9Ci0KLQlyZXQgPSBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZShkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gcHJlX211dGV4X2VycjsKLQotCWlmIChkZXZfcHJpdi0+bW0uc3VzcGVuZGVkKSB7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gcHJlX211dGV4X2VycjsKLQl9Ci0KLQkvKiBMb29rIHVwIG9iamVjdCBoYW5kbGVzICovCi0JZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7Ci0JCW9iamVjdF9saXN0W2ldID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwKLQkJCQkJCSAgICAgICBleGVjX2xpc3RbaV0uaGFuZGxlKTsKLQkJaWYgKG9iamVjdF9saXN0W2ldID09IE5VTEwpIHsKLQkJCURSTV9FUlJPUigiSW52YWxpZCBvYmplY3QgaGFuZGxlICVkIGF0IGluZGV4ICVkXG4iLAotCQkJCSAgIGV4ZWNfbGlzdFtpXS5oYW5kbGUsIGkpOwotCQkJLyogcHJldmVudCBlcnJvciBwYXRoIGZyb20gcmVhZGluZyB1bmluaXRpYWxpemVkIGRhdGEgKi8KLQkJCWFyZ3MtPmJ1ZmZlcl9jb3VudCA9IGkgKyAxOwotCQkJcmV0ID0gLUVOT0VOVDsKLQkJCWdvdG8gZXJyOwotCQl9Ci0KLQkJb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmplY3RfbGlzdFtpXSk7Ci0JCWlmIChvYmpfcHJpdi0+aW5fZXhlY2J1ZmZlcikgewotCQkJRFJNX0VSUk9SKCJPYmplY3QgJXAgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBvYmplY3QgbGlzdFxuIiwKLQkJCQkgICBvYmplY3RfbGlzdFtpXSk7Ci0JCQkvKiBwcmV2ZW50IGVycm9yIHBhdGggZnJvbSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSAqLwotCQkJYXJncy0+YnVmZmVyX2NvdW50ID0gaSArIDE7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBlcnI7Ci0JCX0KLQkJb2JqX3ByaXYtPmluX2V4ZWNidWZmZXIgPSB0cnVlOwotCX0KLQotCS8qIE1vdmUgdGhlIG9iamVjdHMgZW4tbWFzc2UgaW50byB0aGUgR1RULCBldmljdGluZyBpZiBuZWNlc3NhcnkuICovCi0JcmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZXNlcnZlKGRldiwgZmlsZSwKLQkJCQkJICBvYmplY3RfbGlzdCwgZXhlY19saXN0LAotCQkJCQkgIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnI7Ci0KLQkvKiBUaGUgb2JqZWN0cyBhcmUgaW4gdGhlaXIgZmluYWwgbG9jYXRpb25zLCBhcHBseSB0aGUgcmVsb2NhdGlvbnMuICovCi0JcmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZShkZXYsIGZpbGUsCi0JCQkJCSAgIG9iamVjdF9saXN0LCBleGVjX2xpc3QsCi0JCQkJCSAgIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7Ci0JaWYgKHJldCkgewotCQlpZiAocmV0ID09IC1FRkFVTFQpIHsKLQkJCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfc2xvdyhkZXYsIGZpbGUsCi0JCQkJCQkJCW9iamVjdF9saXN0LAotCQkJCQkJCQlleGVjX2xpc3QsCi0JCQkJCQkJCWFyZ3MtPmJ1ZmZlcl9jb3VudCk7Ci0JCQlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKLQkJfQotCQlpZiAocmV0KQotCQkJZ290byBlcnI7Ci0JfQotCi0JLyogU2V0IHRoZSBwZW5kaW5nIHJlYWQgZG9tYWlucyBmb3IgdGhlIGJhdGNoIGJ1ZmZlciB0byBDT01NQU5EICovCi0JYmF0Y2hfb2JqID0gb2JqZWN0X2xpc3RbYXJncy0+YnVmZmVyX2NvdW50LTFdOwotCWlmIChiYXRjaF9vYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluKSB7Ci0JCURSTV9FUlJPUigiQXR0ZW1wdGluZyB0byB1c2Ugc2VsZi1tb2RpZnlpbmcgYmF0Y2ggYnVmZmVyXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnI7Ci0JfQotCWJhdGNoX29iai0+cGVuZGluZ19yZWFkX2RvbWFpbnMgfD0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7Ci0KLQkvKiBTYW5pdHkgY2hlY2sgdGhlIGJhdGNoIGJ1ZmZlciAqLwotCWV4ZWNfb2Zmc2V0ID0gdG9faW50ZWxfYm8oYmF0Y2hfb2JqKS0+Z3R0X29mZnNldDsKLQlyZXQgPSBpOTE1X2dlbV9jaGVja19leGVjYnVmZmVyKGFyZ3MsIGV4ZWNfb2Zmc2V0KTsKLQlpZiAocmV0ICE9IDApIHsKLQkJRFJNX0VSUk9SKCJleGVjYnVmIHdpdGggaW52YWxpZCBvZmZzZXQvbGVuZ3RoXG4iKTsKLQkJZ290byBlcnI7Ci0JfQotCi0JcmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9tb3ZlX3RvX2dwdShkZXYsIGZpbGUsIHJpbmcsCi0JCQkJCSAgICAgIG9iamVjdF9saXN0LCBhcmdzLT5idWZmZXJfY291bnQpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCi0JZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqZWN0X2xpc3RbaV07Ci0JCXVpbnQzMl90IG9sZF93cml0ZV9kb21haW4gPSBvYmotPndyaXRlX2RvbWFpbjsKLQkJb2JqLT53cml0ZV9kb21haW4gPSBvYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluOwotCQl0cmFjZV9pOTE1X2dlbV9vYmplY3RfY2hhbmdlX2RvbWFpbihvYmosCi0JCQkJCQkgICAgb2JqLT5yZWFkX2RvbWFpbnMsCi0JCQkJCQkgICAgb2xkX3dyaXRlX2RvbWFpbik7Ci0JfQotCi0jaWYgV0FUQ0hfQ09IRVJFTkNZCi0JZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7Ci0JCWk5MTVfZ2VtX29iamVjdF9jaGVja19jb2hlcmVuY3kob2JqZWN0X2xpc3RbaV0sCi0JCQkJCQlleGVjX2xpc3RbaV0uaGFuZGxlKTsKLQl9Ci0jZW5kaWYKLQotI2lmIFdBVENIX0VYRUMKLQlpOTE1X2dlbV9kdW1wX29iamVjdChiYXRjaF9vYmosCi0JCQkgICAgICBhcmdzLT5iYXRjaF9sZW4sCi0JCQkgICAgICBfX2Z1bmNfXywKLQkJCSAgICAgIH4wKTsKLSNlbmRpZgotCi0JLyogQ2hlY2sgZm9yIGFueSBwZW5kaW5nIGZsaXBzLiBBcyB3ZSBvbmx5IG1haW50YWluIGEgZmxpcCBxdWV1ZSBkZXB0aAotCSAqIG9mIDEsIHdlIGNhbiBzaW1wbHkgaW5zZXJ0IGEgV0FJVCBmb3IgdGhlIG5leHQgZGlzcGxheSBmbGlwIHByaW9yCi0JICogdG8gZXhlY3V0aW5nIHRoZSBiYXRjaCBhbmQgYXZvaWQgc3RhbGxpbmcgdGhlIENQVS4KLQkgKi8KLQlmbGlwcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7Ci0JCWlmIChvYmplY3RfbGlzdFtpXS0+d3JpdGVfZG9tYWluKQotCQkJZmxpcHMgfD0gYXRvbWljX3JlYWQoJnRvX2ludGVsX2JvKG9iamVjdF9saXN0W2ldKS0+cGVuZGluZ19mbGlwKTsKLQl9Ci0JaWYgKGZsaXBzKSB7Ci0JCWludCBwbGFuZSwgZmxpcF9tYXNrOwotCi0JCWZvciAocGxhbmUgPSAwOyBmbGlwcyA+PiBwbGFuZTsgcGxhbmUrKykgewotCQkJaWYgKCgoZmxpcHMgPj4gcGxhbmUpICYgMSkgPT0gMCkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHBsYW5lKQotCQkJCWZsaXBfbWFzayA9IE1JX1dBSVRfRk9SX1BMQU5FX0JfRkxJUDsKLQkJCWVsc2UKLQkJCQlmbGlwX21hc2sgPSBNSV9XQUlUX0ZPUl9QTEFORV9BX0ZMSVA7Ci0KLQkJCWludGVsX3JpbmdfYmVnaW4oZGV2LCByaW5nLCAyKTsKLQkJCWludGVsX3JpbmdfZW1pdChkZXYsIHJpbmcsCi0JCQkJCU1JX1dBSVRfRk9SX0VWRU5UIHwgZmxpcF9tYXNrKTsKLQkJCWludGVsX3JpbmdfZW1pdChkZXYsIHJpbmcsIE1JX05PT1ApOwotCQkJaW50ZWxfcmluZ19hZHZhbmNlKGRldiwgcmluZyk7Ci0JCX0KLQl9Ci0KLQkvKiBFeGVjIHRoZSBiYXRjaGJ1ZmZlciAqLwotCXJldCA9IHJpbmctPmRpc3BhdGNoX2dlbV9leGVjYnVmZmVyKGRldiwgcmluZywgYXJncywKLQkJCQkJICAgIGNsaXByZWN0cywgZXhlY19vZmZzZXQpOwotCWlmIChyZXQpIHsKLQkJRFJNX0VSUk9SKCJkaXNwYXRjaCBmYWlsZWQgJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyOwotCX0KLQotCS8qCi0JICogRW5zdXJlIHRoYXQgdGhlIGNvbW1hbmRzIGluIHRoZSBiYXRjaCBidWZmZXIgYXJlCi0JICogZmluaXNoZWQgYmVmb3JlIHRoZSBpbnRlcnJ1cHQgZmlyZXMKLQkgKi8KLQlpOTE1X3JldGlyZV9jb21tYW5kcyhkZXYsIHJpbmcpOwotCi0JZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqZWN0X2xpc3RbaV07Ci0KLQkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9fYWN0aXZlKG9iaiwgcmluZyk7Ci0JCWlmIChvYmotPndyaXRlX2RvbWFpbikKLQkJCWxpc3RfbW92ZV90YWlsKCZ0b19pbnRlbF9ibyhvYmopLT5ncHVfd3JpdGVfbGlzdCwKLQkJCQkgICAgICAgJnJpbmctPmdwdV93cml0ZV9saXN0KTsKLQl9Ci0KLQlpOTE1X2FkZF9yZXF1ZXN0KGRldiwgZmlsZSwgcmVxdWVzdCwgcmluZyk7Ci0JcmVxdWVzdCA9IE5VTEw7Ci0KLWVycjoKLQlmb3IgKGkgPSAwOyBpIDwgYXJncy0+YnVmZmVyX2NvdW50OyBpKyspIHsKLQkJaWYgKG9iamVjdF9saXN0W2ldKSB7Ci0JCQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iamVjdF9saXN0W2ldKTsKLQkJCW9ial9wcml2LT5pbl9leGVjYnVmZmVyID0gZmFsc2U7Ci0JCX0KLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqZWN0X2xpc3RbaV0pOwotCX0KLQotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCi1wcmVfbXV0ZXhfZXJyOgotCWRybV9mcmVlX2xhcmdlKG9iamVjdF9saXN0KTsKLQlrZnJlZShjbGlwcmVjdHMpOwotCWtmcmVlKHJlcXVlc3QpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIExlZ2FjeSBleGVjYnVmZmVyIGp1c3QgY3JlYXRlcyBhbiBleGVjMiBsaXN0IGZyb20gdGhlIG9yaWdpbmFsIGV4ZWMgb2JqZWN0Ci0gKiBsaXN0IGFycmF5IGFuZCBwYXNzZXMgaXQgdG8gdGhlIHJlYWwgZnVuY3Rpb24uCi0gKi8KIGludAotaTkxNV9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCitpOTE1X2dlbV9vYmplY3RfcGluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCSAgICB1aW50MzJfdCBhbGlnbm1lbnQsCisJCSAgICBib29sIG1hcF9hbmRfZmVuY2VhYmxlKQogewotCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciAqYXJncyA9IGRhdGE7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjMjsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICpleGVjX2xpc3QgPSBOVUxMOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVjMl9saXN0ID0gTlVMTDsKLQlpbnQgcmV0LCBpOwotCi0jaWYgV0FUQ0hfRVhFQwotCURSTV9JTkZPKCJidWZmZXJzX3B0ciAlZCBidWZmZXJfY291bnQgJWQgbGVuICUwOHhcbiIsCi0JCSAgKGludCkgYXJncy0+YnVmZmVyc19wdHIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgYXJncy0+YmF0Y2hfbGVuKTsKLSNlbmRpZgotCi0JaWYgKGFyZ3MtPmJ1ZmZlcl9jb3VudCA8IDEpIHsKLQkJRFJNX0VSUk9SKCJleGVjYnVmIHdpdGggJWQgYnVmZmVyc1xuIiwgYXJncy0+YnVmZmVyX2NvdW50KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogQ29weSBpbiB0aGUgZXhlYyBsaXN0IGZyb20gdXNlcmxhbmQgKi8KLQlleGVjX2xpc3QgPSBkcm1fbWFsbG9jX2FiKHNpemVvZigqZXhlY19saXN0KSwgYXJncy0+YnVmZmVyX2NvdW50KTsKLQlleGVjMl9saXN0ID0gZHJtX21hbGxvY19hYihzaXplb2YoKmV4ZWMyX2xpc3QpLCBhcmdzLT5idWZmZXJfY291bnQpOwotCWlmIChleGVjX2xpc3QgPT0gTlVMTCB8fCBleGVjMl9saXN0ID09IE5VTEwpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXhlYyBsaXN0IGZvciAlZCBidWZmZXJzXG4iLAotCQkJICBhcmdzLT5idWZmZXJfY291bnQpOwotCQlkcm1fZnJlZV9sYXJnZShleGVjX2xpc3QpOwotCQlkcm1fZnJlZV9sYXJnZShleGVjMl9saXN0KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXJldCA9IGNvcHlfZnJvbV91c2VyKGV4ZWNfbGlzdCwKLQkJCSAgICAgKHN0cnVjdCBkcm1faTkxNV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQotCQkJICAgICAodWludHB0cl90KSBhcmdzLT5idWZmZXJzX3B0ciwKLQkJCSAgICAgc2l6ZW9mKCpleGVjX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50KTsKLQlpZiAocmV0ICE9IDApIHsKLQkJRFJNX0VSUk9SKCJjb3B5ICVkIGV4ZWMgZW50cmllcyBmYWlsZWQgJWRcbiIsCi0JCQkgIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgcmV0KTsKLQkJZHJtX2ZyZWVfbGFyZ2UoZXhlY19saXN0KTsKLQkJZHJtX2ZyZWVfbGFyZ2UoZXhlYzJfbGlzdCk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykgewotCQlleGVjMl9saXN0W2ldLmhhbmRsZSA9IGV4ZWNfbGlzdFtpXS5oYW5kbGU7Ci0JCWV4ZWMyX2xpc3RbaV0ucmVsb2NhdGlvbl9jb3VudCA9IGV4ZWNfbGlzdFtpXS5yZWxvY2F0aW9uX2NvdW50OwotCQlleGVjMl9saXN0W2ldLnJlbG9jc19wdHIgPSBleGVjX2xpc3RbaV0ucmVsb2NzX3B0cjsKLQkJZXhlYzJfbGlzdFtpXS5hbGlnbm1lbnQgPSBleGVjX2xpc3RbaV0uYWxpZ25tZW50OwotCQlleGVjMl9saXN0W2ldLm9mZnNldCA9IGV4ZWNfbGlzdFtpXS5vZmZzZXQ7Ci0JCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8IDQpCi0JCQlleGVjMl9saXN0W2ldLmZsYWdzID0gRVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0U7Ci0JCWVsc2UKLQkJCWV4ZWMyX2xpc3RbaV0uZmxhZ3MgPSAwOwotCX0KLQotCWV4ZWMyLmJ1ZmZlcnNfcHRyID0gYXJncy0+YnVmZmVyc19wdHI7Ci0JZXhlYzIuYnVmZmVyX2NvdW50ID0gYXJncy0+YnVmZmVyX2NvdW50OwotCWV4ZWMyLmJhdGNoX3N0YXJ0X29mZnNldCA9IGFyZ3MtPmJhdGNoX3N0YXJ0X29mZnNldDsKLQlleGVjMi5iYXRjaF9sZW4gPSBhcmdzLT5iYXRjaF9sZW47Ci0JZXhlYzIuRFIxID0gYXJncy0+RFIxOwotCWV4ZWMyLkRSNCA9IGFyZ3MtPkRSNDsKLQlleGVjMi5udW1fY2xpcHJlY3RzID0gYXJncy0+bnVtX2NsaXByZWN0czsKLQlleGVjMi5jbGlwcmVjdHNfcHRyID0gYXJncy0+Y2xpcHJlY3RzX3B0cjsKLQlleGVjMi5mbGFncyA9IEk5MTVfRVhFQ19SRU5ERVI7Ci0KLQlyZXQgPSBpOTE1X2dlbV9kb19leGVjYnVmZmVyKGRldiwgZGF0YSwgZmlsZV9wcml2LCAmZXhlYzIsIGV4ZWMyX2xpc3QpOwotCWlmICghcmV0KSB7Ci0JCS8qIENvcHkgdGhlIG5ldyBidWZmZXIgb2Zmc2V0cyBiYWNrIHRvIHRoZSB1c2VyJ3MgZXhlYyBsaXN0LiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgYXJncy0+YnVmZmVyX2NvdW50OyBpKyspCi0JCQlleGVjX2xpc3RbaV0ub2Zmc2V0ID0gZXhlYzJfbGlzdFtpXS5vZmZzZXQ7Ci0JCS8qIC4uLiBhbmQgYmFjayBvdXQgdG8gdXNlcnNwYWNlICovCi0JCXJldCA9IGNvcHlfdG9fdXNlcigoc3RydWN0IGRybV9pOTE1X3JlbG9jYXRpb25fZW50cnkgX191c2VyICopCi0JCQkJICAgKHVpbnRwdHJfdCkgYXJncy0+YnVmZmVyc19wdHIsCi0JCQkJICAgZXhlY19saXN0LAotCQkJCSAgIHNpemVvZigqZXhlY19saXN0KSAqIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7Ci0JCWlmIChyZXQpIHsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlEUk1fRVJST1IoImZhaWxlZCB0byBjb3B5ICVkIGV4ZWMgZW50cmllcyAiCi0JCQkJICAiYmFjayB0byB1c2VyICglZClcbiIsCi0JCQkJICBhcmdzLT5idWZmZXJfY291bnQsIHJldCk7Ci0JCX0KLQl9Ci0KLQlkcm1fZnJlZV9sYXJnZShleGVjX2xpc3QpOwotCWRybV9mcmVlX2xhcmdlKGV4ZWMyX2xpc3QpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludAotaTkxNV9nZW1fZXhlY2J1ZmZlcjIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICphcmdzID0gZGF0YTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlYzJfbGlzdCA9IE5VTEw7Ci0JaW50IHJldDsKLQotI2lmIFdBVENIX0VYRUMKLQlEUk1fSU5GTygiYnVmZmVyc19wdHIgJWQgYnVmZmVyX2NvdW50ICVkIGxlbiAlMDh4XG4iLAotCQkgIChpbnQpIGFyZ3MtPmJ1ZmZlcnNfcHRyLCBhcmdzLT5idWZmZXJfY291bnQsIGFyZ3MtPmJhdGNoX2xlbik7Ci0jZW5kaWYKLQotCWlmIChhcmdzLT5idWZmZXJfY291bnQgPCAxKSB7Ci0JCURSTV9FUlJPUigiZXhlY2J1ZjIgd2l0aCAlZCBidWZmZXJzXG4iLCBhcmdzLT5idWZmZXJfY291bnQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlleGVjMl9saXN0ID0gZHJtX21hbGxvY19hYihzaXplb2YoKmV4ZWMyX2xpc3QpLCBhcmdzLT5idWZmZXJfY291bnQpOwotCWlmIChleGVjMl9saXN0ID09IE5VTEwpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXhlYyBsaXN0IGZvciAlZCBidWZmZXJzXG4iLAotCQkJICBhcmdzLT5idWZmZXJfY291bnQpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JcmV0ID0gY29weV9mcm9tX3VzZXIoZXhlYzJfbGlzdCwKLQkJCSAgICAgKHN0cnVjdCBkcm1faTkxNV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQotCQkJICAgICAodWludHB0cl90KSBhcmdzLT5idWZmZXJzX3B0ciwKLQkJCSAgICAgc2l6ZW9mKCpleGVjMl9saXN0KSAqIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCURSTV9FUlJPUigiY29weSAlZCBleGVjIGVudHJpZXMgZmFpbGVkICVkXG4iLAotCQkJICBhcmdzLT5idWZmZXJfY291bnQsIHJldCk7Ci0JCWRybV9mcmVlX2xhcmdlKGV4ZWMyX2xpc3QpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyZXQgPSBpOTE1X2dlbV9kb19leGVjYnVmZmVyKGRldiwgZGF0YSwgZmlsZV9wcml2LCBhcmdzLCBleGVjMl9saXN0KTsKLQlpZiAoIXJldCkgewotCQkvKiBDb3B5IHRoZSBuZXcgYnVmZmVyIG9mZnNldHMgYmFjayB0byB0aGUgdXNlcidzIGV4ZWMgbGlzdC4gKi8KLQkJcmV0ID0gY29weV90b191c2VyKChzdHJ1Y3QgZHJtX2k5MTVfcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKLQkJCQkgICAodWludHB0cl90KSBhcmdzLT5idWZmZXJzX3B0ciwKLQkJCQkgICBleGVjMl9saXN0LAotCQkJCSAgIHNpemVvZigqZXhlYzJfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQpOwotCQlpZiAocmV0KSB7Ci0JCQlyZXQgPSAtRUZBVUxUOwotCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY29weSAlZCBleGVjIGVudHJpZXMgIgotCQkJCSAgImJhY2sgdG8gdXNlciAoJWQpXG4iLAotCQkJCSAgYXJncy0+YnVmZmVyX2NvdW50LCByZXQpOwotCQl9Ci0JfQotCi0JZHJtX2ZyZWVfbGFyZ2UoZXhlYzJfbGlzdCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50Ci1pOTE1X2dlbV9vYmplY3RfcGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1aW50MzJfdCBhbGlnbm1lbnQpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2OwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKIAlpbnQgcmV0OwogCi0JQlVHX09OKG9ial9wcml2LT5waW5fY291bnQgPT0gRFJNX0k5MTVfR0VNX09CSkVDVF9NQVhfUElOX0NPVU5UKTsKKwlCVUdfT04ob2JqLT5waW5fY291bnQgPT0gRFJNX0k5MTVfR0VNX09CSkVDVF9NQVhfUElOX0NPVU5UKTsKIAlXQVJOX09OKGk5MTVfdmVyaWZ5X2xpc3RzKGRldikpOwogCi0JaWYgKG9ial9wcml2LT5ndHRfc3BhY2UgIT0gTlVMTCkgewotCQlpZiAoYWxpZ25tZW50ID09IDApCi0JCQlhbGlnbm1lbnQgPSBpOTE1X2dlbV9nZXRfZ3R0X2FsaWdubWVudChvYmopOwotCQlpZiAob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiAoYWxpZ25tZW50IC0gMSkpIHsKLQkJCVdBUk4ob2JqX3ByaXYtPnBpbl9jb3VudCwKLQkJCSAgICAgImJvIGlzIGFscmVhZHkgcGlubmVkIHdpdGggaW5jb3JyZWN0IGFsaWdubWVudDogb2Zmc2V0PSV4LCByZXEuYWxpZ25tZW50PSV4XG4iLAotCQkJICAgICBvYmpfcHJpdi0+Z3R0X29mZnNldCwgYWxpZ25tZW50KTsKKwlpZiAob2JqLT5ndHRfc3BhY2UgIT0gTlVMTCkgeworCQlpZiAoKGFsaWdubWVudCAmJiBvYmotPmd0dF9vZmZzZXQgJiAoYWxpZ25tZW50IC0gMSkpIHx8CisJCSAgICAobWFwX2FuZF9mZW5jZWFibGUgJiYgIW9iai0+bWFwX2FuZF9mZW5jZWFibGUpKSB7CisJCQlXQVJOKG9iai0+cGluX2NvdW50LAorCQkJICAgICAiYm8gaXMgYWxyZWFkeSBwaW5uZWQgd2l0aCBpbmNvcnJlY3QgYWxpZ25tZW50OiIKKwkJCSAgICAgIiBvZmZzZXQ9JXgsIHJlcS5hbGlnbm1lbnQ9JXgsIHJlcS5tYXBfYW5kX2ZlbmNlYWJsZT0lZCwiCisJCQkgICAgICIgb2JqLT5tYXBfYW5kX2ZlbmNlYWJsZT0lZFxuIiwKKwkJCSAgICAgb2JqLT5ndHRfb2Zmc2V0LCBhbGlnbm1lbnQsCisJCQkgICAgIG1hcF9hbmRfZmVuY2VhYmxlLAorCQkJICAgICBvYmotPm1hcF9hbmRfZmVuY2VhYmxlKTsKIAkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIAotCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpIHsKLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2JpbmRfdG9fZ3R0KG9iaiwgYWxpZ25tZW50KTsKKwlpZiAob2JqLT5ndHRfc3BhY2UgPT0gTlVMTCkgeworCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfYmluZF90b19ndHQob2JqLCBhbGlnbm1lbnQsCisJCQkJCQkgIG1hcF9hbmRfZmVuY2VhYmxlKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQogCi0Jb2JqX3ByaXYtPnBpbl9jb3VudCsrOwotCi0JLyogSWYgdGhlIG9iamVjdCBpcyBub3QgYWN0aXZlIGFuZCBub3QgcGVuZGluZyBhIGZsdXNoLAotCSAqIHJlbW92ZSBpdCBmcm9tIHRoZSBpbmFjdGl2ZSBsaXN0Ci0JICovCi0JaWYgKG9ial9wcml2LT5waW5fY291bnQgPT0gMSkgewotCQlpOTE1X2dlbV9pbmZvX2FkZF9waW4oZGV2X3ByaXYsIG9iai0+c2l6ZSk7Ci0JCWlmICghb2JqX3ByaXYtPmFjdGl2ZSkKLQkJCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bW1fbGlzdCwKKwlpZiAob2JqLT5waW5fY291bnQrKyA9PSAwKSB7CisJCWlmICghb2JqLT5hY3RpdmUpCisJCQlsaXN0X21vdmVfdGFpbCgmb2JqLT5tbV9saXN0LAogCQkJCSAgICAgICAmZGV2X3ByaXYtPm1tLnBpbm5lZF9saXN0KTsKIAl9CisJb2JqLT5waW5fbWFwcGFibGUgfD0gbWFwX2FuZF9mZW5jZWFibGU7CiAKIAlXQVJOX09OKGk5MTVfdmVyaWZ5X2xpc3RzKGRldikpOwogCXJldHVybiAwOwogfQogCiB2b2lkCi1pOTE1X2dlbV9vYmplY3RfdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCitpOTE1X2dlbV9vYmplY3RfdW5waW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKIAogCVdBUk5fT04oaTkxNV92ZXJpZnlfbGlzdHMoZGV2KSk7Ci0Jb2JqX3ByaXYtPnBpbl9jb3VudC0tOwotCUJVR19PTihvYmpfcHJpdi0+cGluX2NvdW50IDwgMCk7Ci0JQlVHX09OKG9ial9wcml2LT5ndHRfc3BhY2UgPT0gTlVMTCk7CisJQlVHX09OKG9iai0+cGluX2NvdW50ID09IDApOworCUJVR19PTihvYmotPmd0dF9zcGFjZSA9PSBOVUxMKTsKIAotCS8qIElmIHRoZSBvYmplY3QgaXMgbm8gbG9uZ2VyIHBpbm5lZCwgYW5kIGlzCi0JICogbmVpdGhlciBhY3RpdmUgbm9yIGJlaW5nIGZsdXNoZWQsIHRoZW4gc3RpY2sgaXQgb24KLQkgKiB0aGUgaW5hY3RpdmUgbGlzdAotCSAqLwotCWlmIChvYmpfcHJpdi0+cGluX2NvdW50ID09IDApIHsKLQkJaWYgKCFvYmpfcHJpdi0+YWN0aXZlKQotCQkJbGlzdF9tb3ZlX3RhaWwoJm9ial9wcml2LT5tbV9saXN0LAorCWlmICgtLW9iai0+cGluX2NvdW50ID09IDApIHsKKwkJaWYgKCFvYmotPmFjdGl2ZSkKKwkJCWxpc3RfbW92ZV90YWlsKCZvYmotPm1tX2xpc3QsCiAJCQkJICAgICAgICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCk7Ci0JCWk5MTVfZ2VtX2luZm9fcmVtb3ZlX3BpbihkZXZfcHJpdiwgb2JqLT5zaXplKTsKKwkJb2JqLT5waW5fbWFwcGFibGUgPSBmYWxzZTsKIAl9CiAJV0FSTl9PTihpOTE1X3ZlcmlmeV9saXN0cyhkZXYpKTsKIH0KIAogaW50CiBpOTE1X2dlbV9waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCisJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiAqYXJncyA9IGRhdGE7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJaW50IHJldDsKIAogCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlvYmogPSB0b19pbnRlbF9ibyhkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlLCBhcmdzLT5oYW5kbGUpKTsKIAlpZiAob2JqID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byB1bmxvY2s7CiAJfQotCW9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKIAotCWlmIChvYmpfcHJpdi0+bWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQpIHsKKwlpZiAob2JqLT5tYWR2ICE9IEk5MTVfTUFEVl9XSUxMTkVFRCkgewogCQlEUk1fRVJST1IoIkF0dGVtcHRpbmcgdG8gcGluIGEgcHVyZ2VhYmxlIGJ1ZmZlclxuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChvYmpfcHJpdi0+cGluX2ZpbHAgIT0gTlVMTCAmJiBvYmpfcHJpdi0+cGluX2ZpbHAgIT0gZmlsZV9wcml2KSB7CisJaWYgKG9iai0+cGluX2ZpbHAgIT0gTlVMTCAmJiBvYmotPnBpbl9maWxwICE9IGZpbGUpIHsKIAkJRFJNX0VSUk9SKCJBbHJlYWR5IHBpbm5lZCBpbiBpOTE1X2dlbV9waW5faW9jdGwoKTogJWRcbiIsCiAJCQkgIGFyZ3MtPmhhbmRsZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCW9ial9wcml2LT51c2VyX3Bpbl9jb3VudCsrOwotCW9ial9wcml2LT5waW5fZmlscCA9IGZpbGVfcHJpdjsKLQlpZiAob2JqX3ByaXYtPnVzZXJfcGluX2NvdW50ID09IDEpIHsKLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosIGFyZ3MtPmFsaWdubWVudCk7CisJb2JqLT51c2VyX3Bpbl9jb3VudCsrOworCW9iai0+cGluX2ZpbHAgPSBmaWxlOworCWlmIChvYmotPnVzZXJfcGluX2NvdW50ID09IDEpIHsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosIGFyZ3MtPmFsaWdubWVudCwgdHJ1ZSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC00Mjk1LDkgKzMzNTAsOSBAQAogCSAqIGFzIHRoZSBYIHNlcnZlciBkb2Vzbid0IG1hbmFnZSBkb21haW5zIHlldAogCSAqLwogCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9jcHVfd3JpdGVfZG9tYWluKG9iaik7Ci0JYXJncy0+b2Zmc2V0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CisJYXJncy0+b2Zmc2V0ID0gb2JqLT5ndHRfb2Zmc2V0Owogb3V0OgotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJcmV0dXJuIHJldDsKQEAgLTQzMDUsMzggKzMzNjAsMzYgQEAKIAogaW50CiBpOTE1X2dlbV91bnBpbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQorCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiAqYXJncyA9IGRhdGE7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJaW50IHJldDsKIAogCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlvYmogPSB0b19pbnRlbF9ibyhkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlLCBhcmdzLT5oYW5kbGUpKTsKIAlpZiAob2JqID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byB1bmxvY2s7CiAJfQotCW9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKIAotCWlmIChvYmpfcHJpdi0+cGluX2ZpbHAgIT0gZmlsZV9wcml2KSB7CisJaWYgKG9iai0+cGluX2ZpbHAgIT0gZmlsZSkgewogCQlEUk1fRVJST1IoIk5vdCBwaW5uZWQgYnkgY2FsbGVyIGluIGk5MTVfZ2VtX3Bpbl9pb2N0bCgpOiAlZFxuIiwKIAkJCSAgYXJncy0+aGFuZGxlKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQotCW9ial9wcml2LT51c2VyX3Bpbl9jb3VudC0tOwotCWlmIChvYmpfcHJpdi0+dXNlcl9waW5fY291bnQgPT0gMCkgewotCQlvYmpfcHJpdi0+cGluX2ZpbHAgPSBOVUxMOworCW9iai0+dXNlcl9waW5fY291bnQtLTsKKwlpZiAob2JqLT51c2VyX3Bpbl9jb3VudCA9PSAwKSB7CisJCW9iai0+cGluX2ZpbHAgPSBOVUxMOwogCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKIAl9CiAKIG91dDoKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogdW5sb2NrOgogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC00MzQ0LDQ4ICszMzk3LDUwIEBACiAKIGludAogaTkxNV9nZW1fYnVzeV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9idXN5ICphcmdzID0gZGF0YTsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAlpbnQgcmV0OwogCiAJcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0Jb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCW9iaiA9IHRvX2ludGVsX2JvKGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUsIGFyZ3MtPmhhbmRsZSkpOwogCWlmIChvYmogPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIHVubG9jazsKIAl9Ci0Jb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwogCiAJLyogQ291bnQgYWxsIGFjdGl2ZSBvYmplY3RzIGFzIGJ1c3ksIGV2ZW4gaWYgdGhleSBhcmUgY3VycmVudGx5IG5vdCB1c2VkCiAJICogYnkgdGhlIGdwdS4gVXNlcnMgb2YgdGhpcyBpbnRlcmZhY2UgZXhwZWN0IG9iamVjdHMgdG8gZXZlbnR1YWxseQogCSAqIGJlY29tZSBub24tYnVzeSB3aXRob3V0IGFueSBmdXJ0aGVyIGFjdGlvbnMsIHRoZXJlZm9yZSBlbWl0IGFueQogCSAqIG5lY2Vzc2FyeSBmbHVzaGVzIGhlcmUuCiAJICovCi0JYXJncy0+YnVzeSA9IG9ial9wcml2LT5hY3RpdmU7CisJYXJncy0+YnVzeSA9IG9iai0+YWN0aXZlOwogCWlmIChhcmdzLT5idXN5KSB7CiAJCS8qIFVuY29uZGl0aW9uYWxseSBmbHVzaCBvYmplY3RzLCBldmVuIHdoZW4gdGhlIGdwdSBzdGlsbCB1c2VzIHRoaXMKIAkJICogb2JqZWN0LiBVc2Vyc3BhY2UgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGluZGljYXRlcyB0aGF0IGl0IHdhbnRzIHRvCiAJCSAqIHVzZSB0aGlzIGJ1ZmZlciByYXRoZXIgc29vbmVyIHRoYW4gbGF0ZXIsIHNvIGlzc3VpbmcgdGhlIHJlcXVpcmVkCiAJCSAqIGZsdXNoIGVhcmxpZXIgaXMgYmVuZWZpY2lhbC4KIAkJICovCi0JCWlmIChvYmotPndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKSB7Ci0JCQlpOTE1X2dlbV9mbHVzaF9yaW5nKGRldiwgZmlsZV9wcml2LAotCQkJCQkgICAgb2JqX3ByaXYtPnJpbmcsCi0JCQkJCSAgICAwLCBvYmotPndyaXRlX2RvbWFpbik7Ci0JCX0gZWxzZSBpZiAob2JqX3ByaXYtPnJpbmctPm91dHN0YW5kaW5nX2xhenlfcmVxdWVzdCkgeworCQlpZiAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKSB7CisJCQlyZXQgPSBpOTE1X2dlbV9mbHVzaF9yaW5nKGRldiwgb2JqLT5yaW5nLAorCQkJCQkJICAwLCBvYmotPmJhc2Uud3JpdGVfZG9tYWluKTsKKwkJfSBlbHNlIGlmIChvYmotPnJpbmctPm91dHN0YW5kaW5nX2xhenlfcmVxdWVzdCA9PQorCQkJICAgb2JqLT5sYXN0X3JlbmRlcmluZ19zZXFubykgeworCQkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0OworCiAJCQkvKiBUaGlzIHJpbmcgaXMgbm90IGJlaW5nIGNsZWFyZWQgYnkgYWN0aXZlIHVzYWdlLAogCQkJICogc28gZW1pdCBhIHJlcXVlc3QgdG8gZG8gc28uCiAJCQkgKi8KLQkJCXUzMiBzZXFubyA9IGk5MTVfYWRkX3JlcXVlc3QoZGV2LAotCQkJCQkJICAgICBOVUxMLCBOVUxMLAotCQkJCQkJICAgICBvYmpfcHJpdi0+cmluZyk7Ci0JCQlpZiAoc2Vxbm8gPT0gMCkKKwkJCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZigqcmVxdWVzdCksIEdGUF9LRVJORUwpOworCQkJaWYgKHJlcXVlc3QpCisJCQkJcmV0ID0gaTkxNV9hZGRfcmVxdWVzdChkZXYsCisJCQkJCQkgICAgICAgTlVMTCwgcmVxdWVzdCwKKwkJCQkJCSAgICAgICBvYmotPnJpbmcpOworCQkJZWxzZQogCQkJCXJldCA9IC1FTk9NRU07CiAJCX0KIApAQCAtNDM5NCwxMiArMzQ0OSwxMiBAQAogCQkgKiBhcmUgYWN0dWFsbHkgdW5tYXNrZWQsIGFuZCBvdXIgd29ya2luZyBzZXQgZW5kcyB1cCBiZWluZwogCQkgKiBsYXJnZXIgdGhhbiByZXF1aXJlZC4KIAkJICovCi0JCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0c19yaW5nKGRldiwgb2JqX3ByaXYtPnJpbmcpOworCQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHNfcmluZyhkZXYsIG9iai0+cmluZyk7CiAKLQkJYXJncy0+YnVzeSA9IG9ial9wcml2LT5hY3RpdmU7CisJCWFyZ3MtPmJ1c3kgPSBvYmotPmFjdGl2ZTsKIAl9CiAKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogdW5sb2NrOgogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC00NDE3LDggKzM0NzIsNyBAQAogCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9tYWR2aXNlICphcmdzID0gZGF0YTsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAlpbnQgcmV0OwogCiAJc3dpdGNoIChhcmdzLT5tYWR2KSB7CkBAIC00NDMzLDM3ICszNDg3LDM2IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlvYmogPSB0b19pbnRlbF9ibyhkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSkpOwogCWlmIChvYmogPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIHVubG9jazsKIAl9Ci0Jb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwogCi0JaWYgKG9ial9wcml2LT5waW5fY291bnQpIHsKKwlpZiAob2JqLT5waW5fY291bnQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKG9ial9wcml2LT5tYWR2ICE9IF9fSTkxNV9NQURWX1BVUkdFRCkKLQkJb2JqX3ByaXYtPm1hZHYgPSBhcmdzLT5tYWR2OworCWlmIChvYmotPm1hZHYgIT0gX19JOTE1X01BRFZfUFVSR0VEKQorCQlvYmotPm1hZHYgPSBhcmdzLT5tYWR2OwogCiAJLyogaWYgdGhlIG9iamVjdCBpcyBubyBsb25nZXIgYm91bmQsIGRpc2NhcmQgaXRzIGJhY2tpbmcgc3RvcmFnZSAqLwotCWlmIChpOTE1X2dlbV9vYmplY3RfaXNfcHVyZ2VhYmxlKG9ial9wcml2KSAmJgotCSAgICBvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpCisJaWYgKGk5MTVfZ2VtX29iamVjdF9pc19wdXJnZWFibGUob2JqKSAmJgorCSAgICBvYmotPmd0dF9zcGFjZSA9PSBOVUxMKQogCQlpOTE1X2dlbV9vYmplY3RfdHJ1bmNhdGUob2JqKTsKIAotCWFyZ3MtPnJldGFpbmVkID0gb2JqX3ByaXYtPm1hZHYgIT0gX19JOTE1X01BRFZfUFVSR0VEOworCWFyZ3MtPnJldGFpbmVkID0gb2JqLT5tYWR2ICE9IF9fSTkxNV9NQURWX1BVUkdFRDsKIAogb3V0OgotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RydWN0IGRybV9nZW1fb2JqZWN0ICogaTkxNV9nZW1fYWxsb2Nfb2JqZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgIHNpemVfdCBzaXplKQorc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmk5MTVfZ2VtX2FsbG9jX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJICBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CkBAIC00NDg2LDExICszNTM5LDE1IEBACiAJb2JqLT5iYXNlLmRyaXZlcl9wcml2YXRlID0gTlVMTDsKIAlvYmotPmZlbmNlX3JlZyA9IEk5MTVfRkVOQ0VfUkVHX05PTkU7CiAJSU5JVF9MSVNUX0hFQUQoJm9iai0+bW1fbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJm9iai0+Z3R0X2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZvYmotPnJpbmdfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJm9iai0+ZXhlY19saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmb2JqLT5ncHVfd3JpdGVfbGlzdCk7CiAJb2JqLT5tYWR2ID0gSTkxNV9NQURWX1dJTExORUVEOworCS8qIEF2b2lkIGFuIHVubmVjZXNzYXJ5IGNhbGwgdG8gdW5iaW5kIG9uIHRoZSBmaXJzdCBiaW5kLiAqLworCW9iai0+bWFwX2FuZF9mZW5jZWFibGUgPSB0cnVlOwogCi0JcmV0dXJuICZvYmotPmJhc2U7CisJcmV0dXJuIG9iajsKIH0KIAogaW50IGk5MTVfZ2VtX2luaXRfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQpAQCAtNDUwMCw0MiArMzU1Nyw0MSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpOTE1X2dlbV9mcmVlX29iamVjdF90YWlsKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQorc3RhdGljIHZvaWQgaTkxNV9nZW1fZnJlZV9vYmplY3RfdGFpbChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwogCWludCByZXQ7CiAKIAlyZXQgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaik7CiAJaWYgKHJldCA9PSAtRVJFU1RBUlRTWVMpIHsKLQkJbGlzdF9tb3ZlKCZvYmpfcHJpdi0+bW1fbGlzdCwKKwkJbGlzdF9tb3ZlKCZvYmotPm1tX2xpc3QsCiAJCQkgICZkZXZfcHJpdi0+bW0uZGVmZXJyZWRfZnJlZV9saXN0KTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChvYmpfcHJpdi0+bW1hcF9vZmZzZXQpCisJaWYgKG9iai0+YmFzZS5tYXBfbGlzdC5tYXApCiAJCWk5MTVfZ2VtX2ZyZWVfbW1hcF9vZmZzZXQob2JqKTsKIAotCWRybV9nZW1fb2JqZWN0X3JlbGVhc2Uob2JqKTsKLQlpOTE1X2dlbV9pbmZvX3JlbW92ZV9vYmooZGV2X3ByaXYsIG9iai0+c2l6ZSk7CisJZHJtX2dlbV9vYmplY3RfcmVsZWFzZSgmb2JqLT5iYXNlKTsKKwlpOTE1X2dlbV9pbmZvX3JlbW92ZV9vYmooZGV2X3ByaXYsIG9iai0+YmFzZS5zaXplKTsKIAotCWtmcmVlKG9ial9wcml2LT5wYWdlX2NwdV92YWxpZCk7Ci0Ja2ZyZWUob2JqX3ByaXYtPmJpdF8xNyk7Ci0Ja2ZyZWUob2JqX3ByaXYpOworCWtmcmVlKG9iai0+cGFnZV9jcHVfdmFsaWQpOworCWtmcmVlKG9iai0+Yml0XzE3KTsKKwlrZnJlZShvYmopOwogfQogCi12b2lkIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQordm9pZCBpOTE1X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHRvX2ludGVsX2JvKGdlbV9vYmopOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2OwogCiAJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2Rlc3Ryb3kob2JqKTsKIAotCXdoaWxlIChvYmpfcHJpdi0+cGluX2NvdW50ID4gMCkKKwl3aGlsZSAob2JqLT5waW5fY291bnQgPiAwKQogCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKIAotCWlmIChvYmpfcHJpdi0+cGh5c19vYmopCisJaWYgKG9iai0+cGh5c19vYmopCiAJCWk5MTVfZ2VtX2RldGFjaF9waHlzX29iamVjdChkZXYsIG9iaik7CiAKIAlpOTE1X2dlbV9mcmVlX29iamVjdF90YWlsKG9iaik7CkBAIC00NTYyLDEzICszNjE4LDE1IEBACiAKIAkvKiBVbmRlciBVTVMsIGJlIHBhcmFub2lkIGFuZCBldmljdC4gKi8KIAlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKLQkJcmV0ID0gaTkxNV9nZW1fZXZpY3RfaW5hY3RpdmUoZGV2KTsKKwkJcmV0ID0gaTkxNV9nZW1fZXZpY3RfaW5hY3RpdmUoZGV2LCBmYWxzZSk7CiAJCWlmIChyZXQpIHsKIAkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIAorCWk5MTVfZ2VtX3Jlc2V0X2ZlbmNlcyhkZXYpOworCiAJLyogSGFjayEgIERvbid0IGxldCBhbnlib2R5IGRvIGV4ZWNidWYgd2hpbGUgd2UgZG9uJ3QgY29udHJvbCB0aGUgY2hpcC4KIAkgKiBXZSBuZWVkIHRvIHJlcGxhY2UgdGhpcyB3aXRoIGEgc2VtYXBob3JlLCBvciBzb21ldGhpbmcuCiAJICogQW5kIG5vdCBjb25mb3VuZCBtbS5zdXNwZW5kZWQhCkBAIC00NTg3LDgyICszNjQ1LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiA5NjUrIHN1cHBvcnQgUElQRV9DT05UUk9MIGNvbW1hbmRzLCB3aGljaCBwcm92aWRlIGZpbmVyIGdyYWluZWQgY29udHJvbAotICogb3ZlciBjYWNoZSBmbHVzaGluZy4KLSAqLwotc3RhdGljIGludAotaTkxNV9nZW1faW5pdF9waXBlX2NvbnRyb2woc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7Ci0JaW50IHJldDsKLQotCW9iaiA9IGk5MTVfZ2VtX2FsbG9jX29iamVjdChkZXYsIDQwOTYpOwotCWlmIChvYmogPT0gTlVMTCkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBzZXFubyBwYWdlXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnI7Ci0JfQotCW9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKLQlvYmpfcHJpdi0+YWdwX3R5cGUgPSBBR1BfVVNFUl9DQUNIRURfTUVNT1JZOwotCi0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosIDQwOTYpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX3VucmVmOwotCi0JZGV2X3ByaXYtPnNlcW5vX2dmeF9hZGRyID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7Ci0JZGV2X3ByaXYtPnNlcW5vX3BhZ2UgPSAga21hcChvYmpfcHJpdi0+cGFnZXNbMF0pOwotCWlmIChkZXZfcHJpdi0+c2Vxbm9fcGFnZSA9PSBOVUxMKQotCQlnb3RvIGVycl91bnBpbjsKLQotCWRldl9wcml2LT5zZXFub19vYmogPSBvYmo7Ci0JbWVtc2V0KGRldl9wcml2LT5zZXFub19wYWdlLCAwLCBQQUdFX1NJWkUpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl91bnBpbjoKLQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKLWVycl91bnJlZjoKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwotZXJyOgotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWk5MTVfZ2VtX2NsZWFudXBfcGlwZV9jb250cm9sKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwotCi0Jb2JqID0gZGV2X3ByaXYtPnNlcW5vX29iajsKLQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7Ci0Ja3VubWFwKG9ial9wcml2LT5wYWdlc1swXSk7Ci0JaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKLQlkZXZfcHJpdi0+c2Vxbm9fb2JqID0gTlVMTDsKLQotCWRldl9wcml2LT5zZXFub19wYWdlID0gTlVMTDsKLX0KLQogaW50CiBpOTE1X2dlbV9pbml0X3JpbmdidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgcmV0OwogCi0JaWYgKEhBU19QSVBFX0NPTlRST0woZGV2KSkgewotCQlyZXQgPSBpOTE1X2dlbV9pbml0X3BpcGVfY29udHJvbChkZXYpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KIAlyZXQgPSBpbnRlbF9pbml0X3JlbmRlcl9yaW5nX2J1ZmZlcihkZXYpOwogCWlmIChyZXQpCi0JCWdvdG8gY2xlYW51cF9waXBlX2NvbnRyb2w7CisJCXJldHVybiByZXQ7CiAKIAlpZiAoSEFTX0JTRChkZXYpKSB7CiAJCXJldCA9IGludGVsX2luaXRfYnNkX3JpbmdfYnVmZmVyKGRldik7CkBAIC00NjgxLDEyICszNjcyLDkgQEAKIAlyZXR1cm4gMDsKIAogY2xlYW51cF9ic2RfcmluZzoKLQlpbnRlbF9jbGVhbnVwX3JpbmdfYnVmZmVyKGRldiwgJmRldl9wcml2LT5ic2RfcmluZyk7CisJaW50ZWxfY2xlYW51cF9yaW5nX2J1ZmZlcigmZGV2X3ByaXYtPnJpbmdbVkNTXSk7CiBjbGVhbnVwX3JlbmRlcl9yaW5nOgotCWludGVsX2NsZWFudXBfcmluZ19idWZmZXIoZGV2LCAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nKTsKLWNsZWFudXBfcGlwZV9jb250cm9sOgotCWlmIChIQVNfUElQRV9DT05UUk9MKGRldikpCi0JCWk5MTVfZ2VtX2NsZWFudXBfcGlwZV9jb250cm9sKGRldik7CisJaW50ZWxfY2xlYW51cF9yaW5nX2J1ZmZlcigmZGV2X3ByaXYtPnJpbmdbUkNTXSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDY5NCwxMiArMzY4MiwxMCBAQAogaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CiAKLQlpbnRlbF9jbGVhbnVwX3JpbmdfYnVmZmVyKGRldiwgJmRldl9wcml2LT5yZW5kZXJfcmluZyk7Ci0JaW50ZWxfY2xlYW51cF9yaW5nX2J1ZmZlcihkZXYsICZkZXZfcHJpdi0+YnNkX3JpbmcpOwotCWludGVsX2NsZWFudXBfcmluZ19idWZmZXIoZGV2LCAmZGV2X3ByaXYtPmJsdF9yaW5nKTsKLQlpZiAoSEFTX1BJUEVfQ09OVFJPTChkZXYpKQotCQlpOTE1X2dlbV9jbGVhbnVwX3BpcGVfY29udHJvbChkZXYpOworCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKQorCQlpbnRlbF9jbGVhbnVwX3JpbmdfYnVmZmVyKCZkZXZfcHJpdi0+cmluZ1tpXSk7CiB9CiAKIGludApAQCAtNDcwNyw3ICszNjkzLDcgQEAKIAkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQogCQlyZXR1cm4gMDsKQEAgLTQ3MjcsMTQgKzM3MTMsMTIgQEAKIAl9CiAKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpOwotCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPnJlbmRlcl9yaW5nLmFjdGl2ZV9saXN0KSk7Ci0JQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+YnNkX3JpbmcuYWN0aXZlX2xpc3QpKTsKLQlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5ibHRfcmluZy5hY3RpdmVfbGlzdCkpOwogCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QpKTsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSk7Ci0JQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+cmVuZGVyX3JpbmcucmVxdWVzdF9saXN0KSk7Ci0JQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+YnNkX3JpbmcucmVxdWVzdF9saXN0KSk7Ci0JQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+Ymx0X3JpbmcucmVxdWVzdF9saXN0KSk7CisJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspIHsKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+cmluZ1tpXS5hY3RpdmVfbGlzdCkpOworCQlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5yaW5nW2ldLnJlcXVlc3RfbGlzdCkpOworCX0KIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAogCXJldCA9IGRybV9pcnFfaW5zdGFsbChkZXYpOwpAQCAtNDc5NiwxNyArMzc4MCwxNCBAQAogCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+bW0ucGlubmVkX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+bW0uZmVuY2VfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5kZWZlcnJlZF9mcmVlX2xpc3QpOwotCWluaXRfcmluZ19saXN0cygmZGV2X3ByaXYtPnJlbmRlcl9yaW5nKTsKLQlpbml0X3JpbmdfbGlzdHMoJmRldl9wcml2LT5ic2RfcmluZyk7Ci0JaW5pdF9yaW5nX2xpc3RzKCZkZXZfcHJpdi0+Ymx0X3JpbmcpOworCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+bW0uZ3R0X2xpc3QpOworCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKQorCQlpbml0X3JpbmdfbGlzdHMoJmRldl9wcml2LT5yaW5nW2ldKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5mZW5jZV9yZWdzW2ldLmxydV9saXN0KTsKIAlJTklUX0RFTEFZRURfV09SSygmZGV2X3ByaXYtPm1tLnJldGlyZV93b3JrLAogCQkJICBpOTE1X2dlbV9yZXRpcmVfd29ya19oYW5kbGVyKTsKIAlpbml0X2NvbXBsZXRpb24oJmRldl9wcml2LT5lcnJvcl9jb21wbGV0aW9uKTsKLQlzcGluX2xvY2soJnNocmlua19saXN0X2xvY2spOwotCWxpc3RfYWRkKCZkZXZfcHJpdi0+bW0uc2hyaW5rX2xpc3QsICZzaHJpbmtfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJnNocmlua19saXN0X2xvY2spOwogCiAJLyogT24gR0VOMyB3ZSByZWFsbHkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIEFSQiBDMyBMUCBiaXQgaXMgc2V0ICovCiAJaWYgKElTX0dFTjMoZGV2KSkgewpAQCAtNDgxOCw2ICszNzk5LDggQEAKIAkJfQogCX0KIAorCWRldl9wcml2LT5yZWxhdGl2ZV9jb25zdGFudHNfbW9kZSA9IEk5MTVfRVhFQ19DT05TVEFOVFNfUkVMX0dFTkVSQUw7CisKIAkvKiBPbGQgWCBkcml2ZXJzIHdpbGwgdGFrZSAwLTIgZm9yIGZyb250LCBiYWNrLCBkZXB0aCBidWZmZXJzICovCiAJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQogCQlkZXZfcHJpdi0+ZmVuY2VfcmVnX3N0YXJ0ID0gMzsKQEAgLTQ4NDksNiArMzgzMiwxMCBAQAogCX0KIAlpOTE1X2dlbV9kZXRlY3RfYml0XzZfc3dpenpsZShkZXYpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldl9wcml2LT5wZW5kaW5nX2ZsaXBfcXVldWUpOworCisJZGV2X3ByaXYtPm1tLmluYWN0aXZlX3Nocmlua2VyLnNocmluayA9IGk5MTVfZ2VtX2luYWN0aXZlX3NocmluazsKKwlkZXZfcHJpdi0+bW0uaW5hY3RpdmVfc2hyaW5rZXIuc2Vla3MgPSBERUZBVUxUX1NFRUtTOworCXJlZ2lzdGVyX3Nocmlua2VyKCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfc2hyaW5rZXIpOwogfQogCiAvKgpAQCAtNDkxOCw0NyArMzkwNSw0NyBAQAogfQogCiB2b2lkIGk5MTVfZ2VtX2RldGFjaF9waHlzX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKKwkJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBvYmotPmJhc2UuZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nOworCWNoYXIgKnZhZGRyOwogCWludCBpOwotCWludCByZXQ7CiAJaW50IHBhZ2VfY291bnQ7CiAKLQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7Ci0JaWYgKCFvYmpfcHJpdi0+cGh5c19vYmopCisJaWYgKCFvYmotPnBoeXNfb2JqKQogCQlyZXR1cm47CisJdmFkZHIgPSBvYmotPnBoeXNfb2JqLT5oYW5kbGUtPnZhZGRyOwogCi0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmosIDApOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKLQorCXBhZ2VfY291bnQgPSBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZV9jb3VudDsgaSsrKSB7Ci0JCWNoYXIgKmRzdCA9IGttYXBfYXRvbWljKG9ial9wcml2LT5wYWdlc1tpXSk7Ci0JCWNoYXIgKnNyYyA9IG9ial9wcml2LT5waHlzX29iai0+aGFuZGxlLT52YWRkciArIChpICogUEFHRV9TSVpFKTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSByZWFkX2NhY2hlX3BhZ2VfZ2ZwKG1hcHBpbmcsIGksCisJCQkJCQkJR0ZQX0hJR0hVU0VSIHwgX19HRlBfUkVDTEFJTUFCTEUpOworCQlpZiAoIUlTX0VSUihwYWdlKSkgeworCQkJY2hhciAqZHN0ID0ga21hcF9hdG9taWMocGFnZSk7CisJCQltZW1jcHkoZHN0LCB2YWRkciArIGkqUEFHRV9TSVpFLCBQQUdFX1NJWkUpOworCQkJa3VubWFwX2F0b21pYyhkc3QpOwogCi0JCW1lbWNweShkc3QsIHNyYywgUEFHRV9TSVpFKTsKLQkJa3VubWFwX2F0b21pYyhkc3QpOworCQkJZHJtX2NsZmx1c2hfcGFnZXMoJnBhZ2UsIDEpOworCisJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKwkJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJfQogCX0KLQlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZXMsIHBhZ2VfY291bnQpOwotCWRybV9hZ3BfY2hpcHNldF9mbHVzaChkZXYpOworCWludGVsX2d0dF9jaGlwc2V0X2ZsdXNoKCk7CiAKLQlpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaik7Ci1vdXQ6Ci0Jb2JqX3ByaXYtPnBoeXNfb2JqLT5jdXJfb2JqID0gTlVMTDsKLQlvYmpfcHJpdi0+cGh5c19vYmogPSBOVUxMOworCW9iai0+cGh5c19vYmotPmN1cl9vYmogPSBOVUxMOworCW9iai0+cGh5c19vYmogPSBOVUxMOwogfQogCiBpbnQKIGk5MTVfZ2VtX2F0dGFjaF9waHlzX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkgICAgaW50IGlkLAogCQkJICAgIGludCBhbGlnbikKIHsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IG9iai0+YmFzZS5maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmc7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwogCWludCByZXQgPSAwOwogCWludCBwYWdlX2NvdW50OwogCWludCBpOwpAQCAtNDk2NiwxMCArMzk1Myw4IEBACiAJaWYgKGlkID4gSTkxNV9NQVhfUEhZU19PQkpFQ1QpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwotCi0JaWYgKG9ial9wcml2LT5waHlzX29iaikgewotCQlpZiAob2JqX3ByaXYtPnBoeXNfb2JqLT5pZCA9PSBpZCkKKwlpZiAob2JqLT5waHlzX29iaikgeworCQlpZiAob2JqLT5waHlzX29iai0+aWQgPT0gaWQpCiAJCQlyZXR1cm4gMDsKIAkJaTkxNV9nZW1fZGV0YWNoX3BoeXNfb2JqZWN0KGRldiwgb2JqKTsKIAl9CkBAIC00OTc3LDUxICszOTYyLDUwIEBACiAJLyogY3JlYXRlIGEgbmV3IG9iamVjdCAqLwogCWlmICghZGV2X3ByaXYtPm1tLnBoeXNfb2Jqc1tpZCAtIDFdKSB7CiAJCXJldCA9IGk5MTVfZ2VtX2luaXRfcGh5c19vYmplY3QoZGV2LCBpZCwKLQkJCQkJCW9iai0+c2l6ZSwgYWxpZ24pOworCQkJCQkJb2JqLT5iYXNlLnNpemUsIGFsaWduKTsKIAkJaWYgKHJldCkgewotCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBwaHlzIG9iamVjdCAlZCBzaXplOiAlenVcbiIsIGlkLCBvYmotPnNpemUpOwotCQkJZ290byBvdXQ7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0IHBoeXMgb2JqZWN0ICVkIHNpemU6ICV6dVxuIiwKKwkJCQkgIGlkLCBvYmotPmJhc2Uuc2l6ZSk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCiAJLyogYmluZCB0byB0aGUgb2JqZWN0ICovCi0Jb2JqX3ByaXYtPnBoeXNfb2JqID0gZGV2X3ByaXYtPm1tLnBoeXNfb2Jqc1tpZCAtIDFdOwotCW9ial9wcml2LT5waHlzX29iai0+Y3VyX29iaiA9IG9iajsKKwlvYmotPnBoeXNfb2JqID0gZGV2X3ByaXYtPm1tLnBoeXNfb2Jqc1tpZCAtIDFdOworCW9iai0+cGh5c19vYmotPmN1cl9vYmogPSBvYmo7CiAKLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaiwgMCk7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgcGFnZSBsaXN0XG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKKwlwYWdlX2NvdW50ID0gb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZV9jb3VudDsgaSsrKSB7Ci0JCWNoYXIgKnNyYyA9IGttYXBfYXRvbWljKG9ial9wcml2LT5wYWdlc1tpXSk7Ci0JCWNoYXIgKmRzdCA9IG9ial9wcml2LT5waHlzX29iai0+aGFuZGxlLT52YWRkciArIChpICogUEFHRV9TSVpFKTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCWNoYXIgKmRzdCwgKnNyYzsKIAorCQlwYWdlID0gcmVhZF9jYWNoZV9wYWdlX2dmcChtYXBwaW5nLCBpLAorCQkJCQkgICBHRlBfSElHSFVTRVIgfCBfX0dGUF9SRUNMQUlNQUJMRSk7CisJCWlmIChJU19FUlIocGFnZSkpCisJCQlyZXR1cm4gUFRSX0VSUihwYWdlKTsKKworCQlzcmMgPSBrbWFwX2F0b21pYyhwYWdlKTsKKwkJZHN0ID0gb2JqLT5waHlzX29iai0+aGFuZGxlLT52YWRkciArIChpICogUEFHRV9TSVpFKTsKIAkJbWVtY3B5KGRzdCwgc3JjLCBQQUdFX1NJWkUpOwogCQlrdW5tYXBfYXRvbWljKHNyYyk7CisKKwkJbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJfQogCi0JaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopOwotCiAJcmV0dXJuIDA7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludAotaTkxNV9nZW1fcGh5c19wd3JpdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCitpOTE1X2dlbV9waHlzX3B3cml0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCSAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZ3MsCiAJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKLQl2b2lkICp2YWRkciA9IG9ial9wcml2LT5waHlzX29iai0+aGFuZGxlLT52YWRkciArIGFyZ3MtPm9mZnNldDsKKwl2b2lkICp2YWRkciA9IG9iai0+cGh5c19vYmotPmhhbmRsZS0+dmFkZHIgKyBhcmdzLT5vZmZzZXQ7CiAJY2hhciBfX3VzZXIgKnVzZXJfZGF0YSA9IChjaGFyIF9fdXNlciAqKSAodWludHB0cl90KSBhcmdzLT5kYXRhX3B0cjsKIAotCURSTV9ERUJVR19EUklWRVIoInZhZGRyICVwLCAlbGxkXG4iLCB2YWRkciwgYXJncy0+c2l6ZSk7Ci0KIAlpZiAoX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pY19ub2NhY2hlKHZhZGRyLCB1c2VyX2RhdGEsIGFyZ3MtPnNpemUpKSB7CiAJCXVuc2lnbmVkIGxvbmcgdW53cml0dGVuOwogCkBAIC01MDM2LDcgKzQwMjAsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JZHJtX2FncF9jaGlwc2V0X2ZsdXNoKGRldik7CisJaW50ZWxfZ3R0X2NoaXBzZXRfZmx1c2goKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTA3NCwxNDQgKzQwNTgsNjggQEAKIH0KIAogc3RhdGljIGludAotaTkxNV9nZW1fc2hyaW5rKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLCBpbnQgbnJfdG9fc2NhbiwgZ2ZwX3QgZ2ZwX21hc2spCitpOTE1X2dlbV9pbmFjdGl2ZV9zaHJpbmsoc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwKKwkJCSBpbnQgbnJfdG9fc2NhbiwKKwkJCSBnZnBfdCBnZnBfbWFzaykKIHsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2LCAqbmV4dF9kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2LCAqbmV4dF9vYmo7Ci0JaW50IGNudCA9IDA7Ci0JaW50IHdvdWxkX2RlYWRsb2NrID0gMTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQljb250YWluZXJfb2Yoc2hyaW5rZXIsCisJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlLAorCQkJICAgICBtbS5pbmFjdGl2ZV9zaHJpbmtlcik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgKm5leHQ7CisJaW50IGNudDsKKworCWlmICghbXV0ZXhfdHJ5bG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpKQorCQlyZXR1cm4gMDsKIAogCS8qICJmYXN0LXBhdGgiIHRvIGNvdW50IG51bWJlciBvZiBhdmFpbGFibGUgb2JqZWN0cyAqLwogCWlmIChucl90b19zY2FuID09IDApIHsKLQkJc3Bpbl9sb2NrKCZzaHJpbmtfbGlzdF9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXZfcHJpdiwgJnNocmlua19saXN0LCBtbS5zaHJpbmtfbGlzdCkgewotCQkJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7Ci0KLQkJCWlmIChtdXRleF90cnlsb2NrKCZkZXYtPnN0cnVjdF9tdXRleCkpIHsKLQkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LAotCQkJCQkJICAgICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwKLQkJCQkJCSAgICBtbV9saXN0KQotCQkJCQljbnQrKzsKLQkJCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJCX0KLQkJfQotCQlzcGluX3VubG9jaygmc2hyaW5rX2xpc3RfbG9jayk7Ci0KLQkJcmV0dXJuIChjbnQgLyAxMDApICogc3lzY3RsX3Zmc19jYWNoZV9wcmVzc3VyZTsKKwkJY250ID0gMDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosCisJCQkJICAgICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwKKwkJCQkgICAgbW1fbGlzdCkKKwkJCWNudCsrOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIGNudCAvIDEwMCAqIHN5c2N0bF92ZnNfY2FjaGVfcHJlc3N1cmU7CiAJfQogCi0Jc3Bpbl9sb2NrKCZzaHJpbmtfbGlzdF9sb2NrKTsKLQogcmVzY2FuOgogCS8qIGZpcnN0IHNjYW4gZm9yIGNsZWFuIGJ1ZmZlcnMgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2X3ByaXYsIG5leHRfZGV2LAotCQkJCSAmc2hyaW5rX2xpc3QsIG1tLnNocmlua19saXN0KSB7Ci0JCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OworCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOwogCi0JCWlmICghIG11dGV4X3RyeWxvY2soJmRldi0+c3RydWN0X211dGV4KSkKLQkJCWNvbnRpbnVlOwotCi0JCXNwaW5fdW5sb2NrKCZzaHJpbmtfbGlzdF9sb2NrKTsKLQkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldik7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9ial9wcml2LCBuZXh0X29iaiwKLQkJCQkJICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwKLQkJCQkJIG1tX2xpc3QpIHsKLQkJCWlmIChpOTE1X2dlbV9vYmplY3RfaXNfcHVyZ2VhYmxlKG9ial9wcml2KSkgewotCQkJCWk5MTVfZ2VtX29iamVjdF91bmJpbmQoJm9ial9wcml2LT5iYXNlKTsKLQkJCQlpZiAoLS1ucl90b19zY2FuIDw9IDApCi0JCQkJCWJyZWFrOwotCQkJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG5leHQsCisJCQkJICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwKKwkJCQkgbW1fbGlzdCkgeworCQlpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX3B1cmdlYWJsZShvYmopKSB7CisJCQlpZiAoaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopID09IDAgJiYKKwkJCSAgICAtLW5yX3RvX3NjYW4gPT0gMCkKKwkJCQlicmVhazsKIAkJfQotCi0JCXNwaW5fbG9jaygmc2hyaW5rX2xpc3RfbG9jayk7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCi0JCXdvdWxkX2RlYWRsb2NrID0gMDsKLQotCQlpZiAobnJfdG9fc2NhbiA8PSAwKQotCQkJYnJlYWs7CiAJfQogCiAJLyogc2Vjb25kIHBhc3MsIGV2aWN0L2NvdW50IGFueXRoaW5nIHN0aWxsIG9uIHRoZSBpbmFjdGl2ZSBsaXN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldl9wcml2LCBuZXh0X2RldiwKLQkJCQkgJnNocmlua19saXN0LCBtbS5zaHJpbmtfbGlzdCkgewotCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKLQotCQlpZiAoISBtdXRleF90cnlsb2NrKCZkZXYtPnN0cnVjdF9tdXRleCkpCi0JCQljb250aW51ZTsKLQotCQlzcGluX3VubG9jaygmc2hyaW5rX2xpc3RfbG9jayk7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9ial9wcml2LCBuZXh0X29iaiwKLQkJCQkJICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwKLQkJCQkJIG1tX2xpc3QpIHsKLQkJCWlmIChucl90b19zY2FuID4gMCkgewotCQkJCWk5MTVfZ2VtX29iamVjdF91bmJpbmQoJm9ial9wcml2LT5iYXNlKTsKLQkJCQlucl90b19zY2FuLS07Ci0JCQl9IGVsc2UKLQkJCQljbnQrKzsKLQkJfQotCi0JCXNwaW5fbG9jaygmc2hyaW5rX2xpc3RfbG9jayk7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCi0JCXdvdWxkX2RlYWRsb2NrID0gMDsKKwljbnQgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG5leHQsCisJCQkJICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwKKwkJCQkgbW1fbGlzdCkgeworCQlpZiAobnJfdG9fc2NhbiAmJgorCQkgICAgaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopID09IDApCisJCQlucl90b19zY2FuLS07CisJCWVsc2UKKwkJCWNudCsrOwogCX0KIAotCWlmIChucl90b19zY2FuKSB7Ci0JCWludCBhY3RpdmUgPSAwOwotCisJaWYgKG5yX3RvX3NjYW4gJiYgaTkxNV9ncHVfaXNfYWN0aXZlKGRldikpIHsKIAkJLyoKIAkJICogV2UgYXJlIGRlc3BlcmF0ZSBmb3IgcGFnZXMsIHNvIGFzIGEgbGFzdCByZXNvcnQsIHdhaXQKIAkJICogZm9yIHRoZSBHUFUgdG8gZmluaXNoIGFuZCBkaXNjYXJkIHdoYXRldmVyIHdlIGNhbi4KIAkJICogVGhpcyBoYXMgYSBkcmFtYXRpYyBpbXBhY3QgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YKIAkJICogT09NLWtpbGxlciBldmVudHMgd2hpbHN0IHJ1bm5pbmcgdGhlIEdQVSBhZ2dyZXNzaXZlbHkuCiAJCSAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldl9wcml2LCAmc2hyaW5rX2xpc3QsIG1tLnNocmlua19saXN0KSB7Ci0JCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKLQotCQkJaWYgKCFtdXRleF90cnlsb2NrKCZkZXYtPnN0cnVjdF9tdXRleCkpCi0JCQkJY29udGludWU7Ci0KLQkJCXNwaW5fdW5sb2NrKCZzaHJpbmtfbGlzdF9sb2NrKTsKLQotCQkJaWYgKGk5MTVfZ3B1X2lzX2FjdGl2ZShkZXYpKSB7Ci0JCQkJaTkxNV9ncHVfaWRsZShkZXYpOwotCQkJCWFjdGl2ZSsrOwotCQkJfQotCi0JCQlzcGluX2xvY2soJnNocmlua19saXN0X2xvY2spOwotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCX0KLQotCQlpZiAoYWN0aXZlKQorCQlpZiAoaTkxNV9ncHVfaWRsZShkZXYpID09IDApCiAJCQlnb3RvIHJlc2NhbjsKIAl9Ci0KLQlzcGluX3VubG9jaygmc2hyaW5rX2xpc3RfbG9jayk7Ci0KLQlpZiAod291bGRfZGVhZGxvY2spCi0JCXJldHVybiAtMTsKLQllbHNlIGlmIChjbnQgPiAwKQotCQlyZXR1cm4gKGNudCAvIDEwMCkgKiBzeXNjdGxfdmZzX2NhY2hlX3ByZXNzdXJlOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgc2hyaW5rZXIgPSB7Ci0JLnNocmluayA9IGk5MTVfZ2VtX3NocmluaywKLQkuc2Vla3MgPSBERUZBVUxUX1NFRUtTLAotfTsKLQotX19pbml0IHZvaWQKLWk5MTVfZ2VtX3Nocmlua2VyX2luaXQodm9pZCkKLXsKLSAgICByZWdpc3Rlcl9zaHJpbmtlcigmc2hyaW5rZXIpOwotfQotCi1fX2V4aXQgdm9pZAotaTkxNV9nZW1fc2hyaW5rZXJfZXhpdCh2b2lkKQotewotICAgIHVucmVnaXN0ZXJfc2hyaW5rZXIoJnNocmlua2VyKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gY250IC8gMTAwICogc3lzY3RsX3Zmc19jYWNoZV9wcmVzc3VyZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCmluZGV4IDQ4NjQ0YjguLjI5ZDAxNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWcuYwpAQCAtMTUyLDEzICsxNTIsMTIgQEAKIH0KIAogdm9pZAotaTkxNV9nZW1fZHVtcF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBsZW4sCitpOTE1X2dlbV9kdW1wX29iamVjdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBpbnQgbGVuLAogCQkgICAgIGNvbnN0IGNoYXIgKndoZXJlLCB1aW50MzJfdCBtYXJrKQogewotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CiAJaW50IHBhZ2U7CiAKLQlEUk1fSU5GTygiJXM6IG9iamVjdCBhdCBvZmZzZXQgJTA4eFxuIiwgd2hlcmUsIG9ial9wcml2LT5ndHRfb2Zmc2V0KTsKKwlEUk1fSU5GTygiJXM6IG9iamVjdCBhdCBvZmZzZXQgJTA4eFxuIiwgd2hlcmUsIG9iai0+Z3R0X29mZnNldCk7CiAJZm9yIChwYWdlID0gMDsgcGFnZSA8IChsZW4gKyBQQUdFX1NJWkUtMSkgLyBQQUdFX1NJWkU7IHBhZ2UrKykgewogCQlpbnQgcGFnZV9sZW4sIGNodW5rLCBjaHVua19sZW47CiAKQEAgLTE3MCw5ICsxNjksOSBAQAogCQkJY2h1bmtfbGVuID0gcGFnZV9sZW4gLSBjaHVuazsKIAkJCWlmIChjaHVua19sZW4gPiAxMjgpCiAJCQkJY2h1bmtfbGVuID0gMTI4OwotCQkJaTkxNV9nZW1fZHVtcF9wYWdlKG9ial9wcml2LT5wYWdlc1twYWdlXSwKKwkJCWk5MTVfZ2VtX2R1bXBfcGFnZShvYmotPnBhZ2VzW3BhZ2VdLAogCQkJCQkgICBjaHVuaywgY2h1bmsgKyBjaHVua19sZW4sCi0JCQkJCSAgIG9ial9wcml2LT5ndHRfb2Zmc2V0ICsKKwkJCQkJICAgb2JqLT5ndHRfb2Zmc2V0ICsKIAkJCQkJICAgcGFnZSAqIFBBR0VfU0laRSwKIAkJCQkJICAgbWFyayk7CiAJCX0KQEAgLTE4MiwyMSArMTgxLDE5IEBACiAKICNpZiBXQVRDSF9DT0hFUkVOQ1kKIHZvaWQKLWk5MTVfZ2VtX29iamVjdF9jaGVja19jb2hlcmVuY3koc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBoYW5kbGUpCitpOTE1X2dlbV9vYmplY3RfY2hlY2tfY29oZXJlbmN5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGludCBoYW5kbGUpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7CiAJaW50IHBhZ2U7CiAJdWludDMyX3QgKmd0dF9tYXBwaW5nOwogCXVpbnQzMl90ICpiYWNraW5nX21hcCA9IE5VTEw7CiAJaW50IGJhZF9jb3VudCA9IDA7CiAKIAlEUk1fSU5GTygiJXM6IGNoZWNraW5nIGNvaGVyZW5jeSBvZiBvYmplY3QgJXBAMHglMDh4ICglZCwgJXpka2IpOlxuIiwKLQkJIF9fZnVuY19fLCBvYmosIG9ial9wcml2LT5ndHRfb2Zmc2V0LCBoYW5kbGUsCisJCSBfX2Z1bmNfXywgb2JqLCBvYmotPmd0dF9vZmZzZXQsIGhhbmRsZSwKIAkJIG9iai0+c2l6ZSAvIDEwMjQpOwogCi0JZ3R0X21hcHBpbmcgPSBpb3JlbWFwKGRldi0+YWdwLT5iYXNlICsgb2JqX3ByaXYtPmd0dF9vZmZzZXQsCi0JCQkgICAgICBvYmotPnNpemUpOworCWd0dF9tYXBwaW5nID0gaW9yZW1hcChkZXYtPmFncC0+YmFzZSArIG9iai0+Z3R0X29mZnNldCwgb2JqLT5iYXNlLnNpemUpOwogCWlmIChndHRfbWFwcGluZyA9PSBOVUxMKSB7CiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCBHVFQgc3BhY2VcbiIpOwogCQlyZXR1cm47CkBAIC0yMDUsNyArMjAyLDcgQEAKIAlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgb2JqLT5zaXplIC8gUEFHRV9TSVpFOyBwYWdlKyspIHsKIAkJaW50IGk7CiAKLQkJYmFja2luZ19tYXAgPSBrbWFwX2F0b21pYyhvYmpfcHJpdi0+cGFnZXNbcGFnZV0sIEtNX1VTRVIwKTsKKwkJYmFja2luZ19tYXAgPSBrbWFwX2F0b21pYyhvYmotPnBhZ2VzW3BhZ2VdLCBLTV9VU0VSMCk7CiAKIAkJaWYgKGJhY2tpbmdfbWFwID09IE5VTEwpIHsKIAkJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCBiYWNraW5nIHBhZ2VcbiIpOwpAQCAtMjIwLDcgKzIxNyw3IEBACiAJCQlpZiAoY3B1dmFsICE9IGd0dHZhbCkgewogCQkJCURSTV9JTkZPKCJpbmNvaGVyZW50IENQVSB2cyBHUFUgYXQgMHglMDh4OiAiCiAJCQkJCSAiMHglMDh4IHZzIDB4JTA4eFxuIiwKLQkJCQkJIChpbnQpKG9ial9wcml2LT5ndHRfb2Zmc2V0ICsKKwkJCQkJIChpbnQpKG9iai0+Z3R0X29mZnNldCArCiAJCQkJCSAgICAgICBwYWdlICogUEFHRV9TSVpFICsgaSAqIDQpLAogCQkJCQkgY3B1dmFsLCBndHR2YWwpOwogCQkJCWlmIChiYWRfY291bnQrKyA+PSA4KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ldmljdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXZpY3QuYwppbmRleCBkOGFlN2QxLi4zZDM5MDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ldmljdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V2aWN0LmMKQEAgLTMyLDI4ICszMiwzNiBAQAogI2luY2x1ZGUgImk5MTVfZHJtLmgiCiAKIHN0YXRpYyBib29sCi1tYXJrX2ZyZWUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2LAotCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnVud2luZCkKK21hcmtfZnJlZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgbGlzdF9oZWFkICp1bndpbmQpCiB7Ci0JbGlzdF9hZGQoJm9ial9wcml2LT5ldmljdF9saXN0LCB1bndpbmQpOwotCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZSgmb2JqX3ByaXYtPmJhc2UpOwotCXJldHVybiBkcm1fbW1fc2Nhbl9hZGRfYmxvY2sob2JqX3ByaXYtPmd0dF9zcGFjZSk7CisJbGlzdF9hZGQoJm9iai0+ZXhlY19saXN0LCB1bndpbmQpOworCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwlyZXR1cm4gZHJtX21tX3NjYW5fYWRkX2Jsb2NrKG9iai0+Z3R0X3NwYWNlKTsKIH0KIAogaW50Ci1pOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG1pbl9zaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpCitpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG1pbl9zaXplLAorCQkJIHVuc2lnbmVkIGFsaWdubWVudCwgYm9vbCBtYXBwYWJsZSkKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGV2aWN0aW9uX2xpc3QsIHVud2luZF9saXN0OwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCWludCByZXQgPSAwOwogCiAJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldik7CiAKIAkvKiBSZS1jaGVjayBmb3IgZnJlZSBzcGFjZSBhZnRlciByZXRpcmluZyByZXF1ZXN0cyAqLwotCWlmIChkcm1fbW1fc2VhcmNoX2ZyZWUoJmRldl9wcml2LT5tbS5ndHRfc3BhY2UsCi0JCQkgICAgICAgbWluX3NpemUsIGFsaWdubWVudCwgMCkpCi0JCXJldHVybiAwOworCWlmIChtYXBwYWJsZSkgeworCQlpZiAoZHJtX21tX3NlYXJjaF9mcmVlX2luX3JhbmdlKCZkZXZfcHJpdi0+bW0uZ3R0X3NwYWNlLAorCQkJCQkJbWluX3NpemUsIGFsaWdubWVudCwgMCwKKwkJCQkJCWRldl9wcml2LT5tbS5ndHRfbWFwcGFibGVfZW5kLAorCQkJCQkJMCkpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlpZiAoZHJtX21tX3NlYXJjaF9mcmVlKCZkZXZfcHJpdi0+bW0uZ3R0X3NwYWNlLAorCQkJCSAgICAgICBtaW5fc2l6ZSwgYWxpZ25tZW50LCAwKSkKKwkJCXJldHVybiAwOworCX0KIAogCS8qCiAJICogVGhlIGdvYWwgaXMgdG8gZXZpY3Qgb2JqZWN0cyBhbmQgYW1hbGdhbWF0ZSBzcGFjZSBpbiBMUlUgb3JkZXIuCkBAIC03OSw0NSArODcsNTYgQEAKIAkgKi8KIAogCUlOSVRfTElTVF9IRUFEKCZ1bndpbmRfbGlzdCk7Ci0JZHJtX21tX2luaXRfc2NhbigmZGV2X3ByaXYtPm1tLmd0dF9zcGFjZSwgbWluX3NpemUsIGFsaWdubWVudCk7CisJaWYgKG1hcHBhYmxlKQorCQlkcm1fbW1faW5pdF9zY2FuX3dpdGhfcmFuZ2UoJmRldl9wcml2LT5tbS5ndHRfc3BhY2UsIG1pbl9zaXplLAorCQkJCQkgICAgYWxpZ25tZW50LCAwLAorCQkJCQkgICAgZGV2X3ByaXYtPm1tLmd0dF9tYXBwYWJsZV9lbmQpOworCWVsc2UKKwkJZHJtX21tX2luaXRfc2NhbigmZGV2X3ByaXYtPm1tLmd0dF9zcGFjZSwgbWluX3NpemUsIGFsaWdubWVudCk7CiAKIAkvKiBGaXJzdCBzZWUgaWYgdGhlcmUgaXMgYSBsYXJnZSBlbm91Z2ggY29udGlndW91cyBpZGxlIHJlZ2lvbi4uLiAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwgbW1fbGlzdCkgewotCQlpZiAobWFya19mcmVlKG9ial9wcml2LCAmdW53aW5kX2xpc3QpKQorCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QsIG1tX2xpc3QpIHsKKwkJaWYgKG1hcmtfZnJlZShvYmosICZ1bndpbmRfbGlzdCkpCiAJCQlnb3RvIGZvdW5kOwogCX0KIAogCS8qIE5vdyBtZXJnZSBpbiB0aGUgc29vbi10by1iZS1leHBpcmVkIG9iamVjdHMuLi4gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LCBtbV9saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QsIG1tX2xpc3QpIHsKIAkJLyogRG9lcyB0aGUgb2JqZWN0IHJlcXVpcmUgYW4gb3V0c3RhbmRpbmcgZmx1c2g/ICovCi0JCWlmIChvYmpfcHJpdi0+YmFzZS53cml0ZV9kb21haW4gfHwgb2JqX3ByaXYtPnBpbl9jb3VudCkKKwkJaWYgKG9iai0+YmFzZS53cml0ZV9kb21haW4gfHwgb2JqLT5waW5fY291bnQpCiAJCQljb250aW51ZTsKIAotCQlpZiAobWFya19mcmVlKG9ial9wcml2LCAmdW53aW5kX2xpc3QpKQorCQlpZiAobWFya19mcmVlKG9iaiwgJnVud2luZF9saXN0KSkKIAkJCWdvdG8gZm91bmQ7CiAJfQogCiAJLyogRmluYWxseSBhZGQgYW55dGhpbmcgd2l0aCBhIHBlbmRpbmcgZmx1c2ggKGluIG9yZGVyIG9mIHJldGlyZW1lbnQpICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0LCBtbV9saXN0KSB7Ci0JCWlmIChvYmpfcHJpdi0+cGluX2NvdW50KQorCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QsIG1tX2xpc3QpIHsKKwkJaWYgKG9iai0+cGluX2NvdW50KQogCQkJY29udGludWU7CiAKLQkJaWYgKG1hcmtfZnJlZShvYmpfcHJpdiwgJnVud2luZF9saXN0KSkKKwkJaWYgKG1hcmtfZnJlZShvYmosICZ1bndpbmRfbGlzdCkpCiAJCQlnb3RvIGZvdW5kOwogCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LCBtbV9saXN0KSB7Ci0JCWlmICghIG9ial9wcml2LT5iYXNlLndyaXRlX2RvbWFpbiB8fCBvYmpfcHJpdi0+cGluX2NvdW50KQorCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LCBtbV9saXN0KSB7CisJCWlmICghIG9iai0+YmFzZS53cml0ZV9kb21haW4gfHwgb2JqLT5waW5fY291bnQpCiAJCQljb250aW51ZTsKIAotCQlpZiAobWFya19mcmVlKG9ial9wcml2LCAmdW53aW5kX2xpc3QpKQorCQlpZiAobWFya19mcmVlKG9iaiwgJnVud2luZF9saXN0KSkKIAkJCWdvdG8gZm91bmQ7CiAJfQogCiAJLyogTm90aGluZyBmb3VuZCwgY2xlYW4gdXAgYW5kIGJhaWwgb3V0ISAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZ1bndpbmRfbGlzdCwgZXZpY3RfbGlzdCkgewotCQlyZXQgPSBkcm1fbW1fc2Nhbl9yZW1vdmVfYmxvY2sob2JqX3ByaXYtPmd0dF9zcGFjZSk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ1bndpbmRfbGlzdCkpIHsKKwkJb2JqID0gbGlzdF9maXJzdF9lbnRyeSgmdW53aW5kX2xpc3QsCisJCQkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAorCQkJCSAgICAgICBleGVjX2xpc3QpOworCisJCXJldCA9IGRybV9tbV9zY2FuX3JlbW92ZV9ibG9jayhvYmotPmd0dF9zcGFjZSk7CiAJCUJVR19PTihyZXQpOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqX3ByaXYtPmJhc2UpOworCisJCWxpc3RfZGVsX2luaXQoJm9iai0+ZXhlY19saXN0KTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiAJfQogCiAJLyogV2UgZXhwZWN0IHRoZSBjYWxsZXIgdG8gdW5waW4sIGV2aWN0IGFsbCBhbmQgdHJ5IGFnYWluLCBvciBnaXZlIHVwLgpAQCAtMTMxLDMzICsxNTAsMzQgQEAKIAkgKiB0ZW1wb3JhcnkgbGlzdC4gKi8KIAlJTklUX0xJU1RfSEVBRCgmZXZpY3Rpb25fbGlzdCk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZ1bndpbmRfbGlzdCkpIHsKLQkJb2JqX3ByaXYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ1bndpbmRfbGlzdCwKLQkJCQkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAotCQkJCQkgICAgZXZpY3RfbGlzdCk7Ci0JCWlmIChkcm1fbW1fc2Nhbl9yZW1vdmVfYmxvY2sob2JqX3ByaXYtPmd0dF9zcGFjZSkpIHsKLQkJCWxpc3RfbW92ZSgmb2JqX3ByaXYtPmV2aWN0X2xpc3QsICZldmljdGlvbl9saXN0KTsKKwkJb2JqID0gbGlzdF9maXJzdF9lbnRyeSgmdW53aW5kX2xpc3QsCisJCQkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAorCQkJCSAgICAgICBleGVjX2xpc3QpOworCQlpZiAoZHJtX21tX3NjYW5fcmVtb3ZlX2Jsb2NrKG9iai0+Z3R0X3NwYWNlKSkgeworCQkJbGlzdF9tb3ZlKCZvYmotPmV4ZWNfbGlzdCwgJmV2aWN0aW9uX2xpc3QpOwogCQkJY29udGludWU7CiAJCX0KLQkJbGlzdF9kZWwoJm9ial9wcml2LT5ldmljdF9saXN0KTsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9ial9wcml2LT5iYXNlKTsKKwkJbGlzdF9kZWxfaW5pdCgmb2JqLT5leGVjX2xpc3QpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKIAl9CiAKIAkvKiBVbmJpbmRpbmcgd2lsbCBlbWl0IGFueSByZXF1aXJlZCBmbHVzaGVzICovCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZldmljdGlvbl9saXN0KSkgewotCQlvYmpfcHJpdiA9IGxpc3RfZmlyc3RfZW50cnkoJmV2aWN0aW9uX2xpc3QsCi0JCQkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKLQkJCQkJICAgIGV2aWN0X2xpc3QpOworCQlvYmogPSBsaXN0X2ZpcnN0X2VudHJ5KCZldmljdGlvbl9saXN0LAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKKwkJCQkgICAgICAgZXhlY19saXN0KTsKIAkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VuYmluZCgmb2JqX3ByaXYtPmJhc2UpOwotCQlsaXN0X2RlbCgmb2JqX3ByaXYtPmV2aWN0X2xpc3QpOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqX3ByaXYtPmJhc2UpOworCQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOworCisJCWxpc3RfZGVsX2luaXQoJm9iai0+ZXhlY19saXN0KTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAogaW50Ci1pOTE1X2dlbV9ldmljdF9ldmVyeXRoaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitpOTE1X2dlbV9ldmljdF9ldmVyeXRoaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgcHVyZ2VhYmxlX29ubHkpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IHJldDsKQEAgLTE3NiwzNiArMTk2LDIyIEBACiAKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CiAKLQlyZXQgPSBpOTE1X2dlbV9ldmljdF9pbmFjdGl2ZShkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlsaXN0c19lbXB0eSA9IChsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkgJiYKLQkJICAgICAgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSAmJgotCQkgICAgICAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KSk7Ci0JQlVHX09OKCFsaXN0c19lbXB0eSk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaTkxNV9nZW1fZXZpY3RfaW5hY3RpdmUoZGV2LCBwdXJnZWFibGVfb25seSk7CiB9CiAKIC8qKiBVbmJpbmRzIGFsbCBpbmFjdGl2ZSBvYmplY3RzLiAqLwogaW50Ci1pOTE1X2dlbV9ldmljdF9pbmFjdGl2ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoraTkxNV9nZW1fZXZpY3RfaW5hY3RpdmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBwdXJnZWFibGVfb25seSkKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCAqbmV4dDsKIAotCXdoaWxlICghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpKSB7Ci0JCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCQlpbnQgcmV0OwotCi0JCW9iaiA9ICZsaXN0X2ZpcnN0X2VudHJ5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwKLQkJCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCi0JCQkJCW1tX2xpc3QpLT5iYXNlOwotCi0JCXJldCA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKLQkJaWYgKHJldCAhPSAwKSB7Ci0JCQlEUk1fRVJST1IoIkVycm9yIHVuYmluZGluZyBvYmplY3Q6ICVkXG4iLCByZXQpOwotCQkJcmV0dXJuIHJldDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2JqLCBuZXh0LAorCQkJCSAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QsIG1tX2xpc3QpIHsKKwkJaWYgKCFwdXJnZWFibGVfb25seSB8fCBvYmotPm1hZHYgIT0gSTkxNV9NQURWX1dJTExORUVEKSB7CisJCQlpbnQgcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ODM0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwpAQCAtMCwwICsxLDEzNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOCwyMDEwIEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorICogICAgQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CisgKgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKworc3RydWN0IGNoYW5nZV9kb21haW5zIHsKKwl1aW50MzJfdCBpbnZhbGlkYXRlX2RvbWFpbnM7CisJdWludDMyX3QgZmx1c2hfZG9tYWluczsKKwl1aW50MzJfdCBmbHVzaF9yaW5nczsKK307CisKKy8qCisgKiBTZXQgdGhlIG5leHQgZG9tYWluIGZvciB0aGUgc3BlY2lmaWVkIG9iamVjdC4gVGhpcworICogbWF5IG5vdCBhY3R1YWxseSBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgZmx1c2hpbmcvaW52YWxpZGluZyB0aG91Z2gsCisgKiBhcyB0aGF0IG1heSB3YW50IHRvIGJlIGJhdGNoZWQgd2l0aCBvdGhlciBzZXRfZG9tYWluIG9wZXJhdGlvbnMKKyAqCisgKiBUaGlzIGlzICh3ZSBob3BlKSB0aGUgb25seSByZWFsbHkgdHJpY2t5IHBhcnQgb2YgZ2VtLiBUaGUgZ29hbAorICogaXMgZmFpcmx5IHNpbXBsZSAtLSB0cmFjayB3aGljaCBjYWNoZXMgaG9sZCBiaXRzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBtYWtlIHN1cmUgdGhleSByZW1haW4gY29oZXJlbnQuIEEgZmV3IGNvbmNyZXRlIGV4YW1wbGVzIG1heQorICogaGVscCB0byBleHBsYWluIGhvdyBpdCB3b3Jrcy4gRm9yIHNob3J0aGFuZCwgd2UgdXNlIHRoZSBub3RhdGlvbgorICogKHJlYWRfZG9tYWlucywgd3JpdGVfZG9tYWluKSwgZS5nLiAoQ1BVLCBDUFUpIHRvIGluZGljYXRlIHRoZQorICogYSBwYWlyIG9mIHJlYWQgYW5kIHdyaXRlIGRvbWFpbiBtYXNrcy4KKyAqCisgKiBDYXNlIDE6IHRoZSBiYXRjaCBidWZmZXIKKyAqCisgKgkxLiBBbGxvY2F0ZWQKKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVCisgKgkzLiBNYXBwZWQgdG8gR1RUCisgKgk0LiBSZWFkIGJ5IEdQVQorICoJNS4gVW5tYXBwZWQgZnJvbSBHVFQKKyAqCTYuIEZyZWVkCisgKgorICoJTGV0J3MgdGFrZSB0aGVzZSBhIHN0ZXAgYXQgYSB0aW1lCisgKgorICoJMS4gQWxsb2NhdGVkCisgKgkJUGFnZXMgYWxsb2NhdGVkIGZyb20gdGhlIGtlcm5lbCBtYXkgc3RpbGwgaGF2ZQorICoJCWNhY2hlIGNvbnRlbnRzLCBzbyB3ZSBzZXQgdGhlbSB0byAoQ1BVLCBDUFUpIGFsd2F5cy4KKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVICh1c2luZyBwd3JpdGUpCisgKgkJVGhlIHB3cml0ZSBmdW5jdGlvbiBjYWxscyBzZXRfZG9tYWluIChDUFUsIENQVSkgYW5kCisgKgkJdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgKGFzIG5vdGhpbmcgY2hhbmdlcykKKyAqCTMuIE1hcHBlZCBieSBHVFQKKyAqCQlUaGlzIGZ1bmN0aW9uIGFzc2VydHMgdGhhdCB0aGUgb2JqZWN0IGlzIG5vdAorICoJCWN1cnJlbnRseSBpbiBhbnkgR1BVLWJhc2VkIHJlYWQgb3Igd3JpdGUgZG9tYWlucworICoJNC4gUmVhZCBieSBHUFUKKyAqCQlpOTE1X2dlbV9leGVjYnVmZmVyIGNhbGxzIHNldF9kb21haW4gKENPTU1BTkQsIDApLgorICoJCUFzIHdyaXRlX2RvbWFpbiBpcyB6ZXJvLCB0aGlzIGZ1bmN0aW9uIGFkZHMgaW4gdGhlCisgKgkJY3VycmVudCByZWFkIGRvbWFpbnMgKENQVStDT01NQU5ELCAwKS4KKyAqCQlmbHVzaF9kb21haW5zIGlzIHNldCB0byBDUFUuCisgKgkJaW52YWxpZGF0ZV9kb21haW5zIGlzIHNldCB0byBDT01NQU5ECisgKgkJY2xmbHVzaCBpcyBydW4gdG8gZ2V0IGRhdGEgb3V0IG9mIHRoZSBDUFUgY2FjaGVzCisgKgkJdGhlbiBpOTE1X2Rldl9zZXRfZG9tYWluIGNhbGxzIGk5MTVfZ2VtX2ZsdXNoIHRvCisgKgkJZW1pdCBhbiBNSV9GTFVTSCBhbmQgZHJtX2FncF9jaGlwc2V0X2ZsdXNoCisgKgk1LiBVbm1hcHBlZCBmcm9tIEdUVAorICoJCWk5MTVfZ2VtX29iamVjdF91bmJpbmQgY2FsbHMgc2V0X2RvbWFpbiAoQ1BVLCBDUFUpCisgKgkJZmx1c2hfZG9tYWlucyBhbmQgaW52YWxpZGF0ZV9kb21haW5zIGVuZCB1cCBib3RoIHplcm8KKyAqCQlzbyBubyBmbHVzaGluZy9pbnZhbGlkYXRpbmcgaGFwcGVucworICoJNi4gRnJlZWQKKyAqCQl5YXksIGRvbmUKKyAqCisgKiBDYXNlIDI6IFRoZSBzaGFyZWQgcmVuZGVyIGJ1ZmZlcgorICoKKyAqCTEuIEFsbG9jYXRlZAorICoJMi4gTWFwcGVkIHRvIEdUVAorICoJMy4gUmVhZC93cml0dGVuIGJ5IEdQVQorICoJNC4gc2V0X2RvbWFpbiB0byAoQ1BVLENQVSkKKyAqCTUuIFJlYWQvd3JpdHRlbiBieSBDUFUKKyAqCTYuIFJlYWQvd3JpdHRlbiBieSBHUFUKKyAqCisgKgkxLiBBbGxvY2F0ZWQKKyAqCQlTYW1lIGFzIGxhc3QgZXhhbXBsZSwgKENQVSwgQ1BVKQorICoJMi4gTWFwcGVkIHRvIEdUVAorICoJCU5vdGhpbmcgY2hhbmdlcyAoYXNzZXJ0aW9ucyBmaW5kIHRoYXQgaXQgaXMgbm90IGluIHRoZSBHUFUpCisgKgkzLiBSZWFkL3dyaXR0ZW4gYnkgR1BVCisgKgkJZXhlY2J1ZmZlciBjYWxscyBzZXRfZG9tYWluIChSRU5ERVIsIFJFTkRFUikKKyAqCQlmbHVzaF9kb21haW5zIGdldHMgQ1BVCisgKgkJaW52YWxpZGF0ZV9kb21haW5zIGdldHMgR1BVCisgKgkJY2xmbHVzaCAob2JqKQorICoJCU1JX0ZMVVNIIGFuZCBkcm1fYWdwX2NoaXBzZXRfZmx1c2gKKyAqCTQuIHNldF9kb21haW4gKENQVSwgQ1BVKQorICoJCWZsdXNoX2RvbWFpbnMgZ2V0cyBHUFUKKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgZ2V0cyBDUFUKKyAqCQl3YWl0X3JlbmRlcmluZyAob2JqKSB0byBtYWtlIHN1cmUgYWxsIGRyYXdpbmcgaXMgY29tcGxldGUuCisgKgkJVGhpcyB3aWxsIGluY2x1ZGUgYW4gTUlfRkxVU0ggdG8gZ2V0IHRoZSBkYXRhIGZyb20gR1BVCisgKgkJdG8gbWVtb3J5CisgKgkJY2xmbHVzaCAob2JqKSB0byBpbnZhbGlkYXRlIHRoZSBDUFUgY2FjaGUKKyAqCQlBbm90aGVyIE1JX0ZMVVNIIGluIGk5MTVfZ2VtX2ZsdXNoIChlbGltaW5hdGUgdGhpcyBzb21laG93PykKKyAqCTUuIFJlYWQvd3JpdHRlbiBieSBDUFUKKyAqCQljYWNoZSBsaW5lcyBhcmUgbG9hZGVkIGFuZCBkaXJ0aWVkCisgKgk2LiBSZWFkIHdyaXR0ZW4gYnkgR1BVCisgKgkJU2FtZSBhcyBsYXN0IEdQVSBhY2Nlc3MKKyAqCisgKiBDYXNlIDM6IFRoZSBjb25zdGFudCBidWZmZXIKKyAqCisgKgkxLiBBbGxvY2F0ZWQKKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVCisgKgkzLiBSZWFkIGJ5IEdQVQorICoJNC4gVXBkYXRlZCAod3JpdHRlbikgYnkgQ1BVIGFnYWluCisgKgk1LiBSZWFkIGJ5IEdQVQorICoKKyAqCTEuIEFsbG9jYXRlZAorICoJCShDUFUsIENQVSkKKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVCisgKgkJKENQVSwgQ1BVKQorICoJMy4gUmVhZCBieSBHUFUKKyAqCQkoQ1BVK1JFTkRFUiwgMCkKKyAqCQlmbHVzaF9kb21haW5zID0gQ1BVCisgKgkJaW52YWxpZGF0ZV9kb21haW5zID0gUkVOREVSCisgKgkJY2xmbHVzaCAob2JqKQorICoJCU1JX0ZMVVNICisgKgkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoCisgKgk0LiBVcGRhdGVkICh3cml0dGVuKSBieSBDUFUgYWdhaW4KKyAqCQkoQ1BVLCBDUFUpCisgKgkJZmx1c2hfZG9tYWlucyA9IDAgKG5vIHByZXZpb3VzIHdyaXRlIGRvbWFpbikKKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgPSAwIChubyBuZXcgcmVhZCBkb21haW5zKQorICoJNS4gUmVhZCBieSBHUFUKKyAqCQkoQ1BVK1JFTkRFUiwgMCkKKyAqCQlmbHVzaF9kb21haW5zID0gQ1BVCisgKgkJaW52YWxpZGF0ZV9kb21haW5zID0gUkVOREVSCisgKgkJY2xmbHVzaCAob2JqKQorICoJCU1JX0ZMVVNICisgKgkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoCisgKi8KK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2dwdV9kb21haW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKKwkJCQkgIHN0cnVjdCBjaGFuZ2VfZG9tYWlucyAqY2QpCit7CisJdWludDMyX3QgaW52YWxpZGF0ZV9kb21haW5zID0gMCwgZmx1c2hfZG9tYWlucyA9IDA7CisKKwkvKgorCSAqIElmIHRoZSBvYmplY3QgaXNuJ3QgbW92aW5nIHRvIGEgbmV3IHdyaXRlIGRvbWFpbiwKKwkgKiBsZXQgdGhlIG9iamVjdCBzdGF5IGluIG11bHRpcGxlIHJlYWQgZG9tYWlucworCSAqLworCWlmIChvYmotPmJhc2UucGVuZGluZ193cml0ZV9kb21haW4gPT0gMCkKKwkJb2JqLT5iYXNlLnBlbmRpbmdfcmVhZF9kb21haW5zIHw9IG9iai0+YmFzZS5yZWFkX2RvbWFpbnM7CisKKwkvKgorCSAqIEZsdXNoIHRoZSBjdXJyZW50IHdyaXRlIGRvbWFpbiBpZgorCSAqIHRoZSBuZXcgcmVhZCBkb21haW5zIGRvbid0IG1hdGNoLiBJbnZhbGlkYXRlCisJICogYW55IHJlYWQgZG9tYWlucyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgb2xkCisJICogd3JpdGUgZG9tYWluCisJICovCisJaWYgKG9iai0+YmFzZS53cml0ZV9kb21haW4gJiYKKwkgICAgKCgob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAhPSBvYmotPmJhc2UucGVuZGluZ19yZWFkX2RvbWFpbnMgfHwKKwkgICAgICAgb2JqLT5yaW5nICE9IHJpbmcpKSB8fAorCSAgICAgKG9iai0+ZmVuY2VkX2dwdV9hY2Nlc3MgJiYgIW9iai0+cGVuZGluZ19mZW5jZWRfZ3B1X2FjY2VzcykpKSB7CisJCWZsdXNoX2RvbWFpbnMgfD0gb2JqLT5iYXNlLndyaXRlX2RvbWFpbjsKKwkJaW52YWxpZGF0ZV9kb21haW5zIHw9CisJCQlvYmotPmJhc2UucGVuZGluZ19yZWFkX2RvbWFpbnMgJiB+b2JqLT5iYXNlLndyaXRlX2RvbWFpbjsKKwl9CisJLyoKKwkgKiBJbnZhbGlkYXRlIGFueSByZWFkIGNhY2hlcyB3aGljaCBtYXkgaGF2ZQorCSAqIHN0YWxlIGRhdGEuIFRoYXQgaXMsIGFueSBuZXcgcmVhZCBkb21haW5zLgorCSAqLworCWludmFsaWRhdGVfZG9tYWlucyB8PSBvYmotPmJhc2UucGVuZGluZ19yZWFkX2RvbWFpbnMgJiB+b2JqLT5iYXNlLnJlYWRfZG9tYWluczsKKwlpZiAoKGZsdXNoX2RvbWFpbnMgfCBpbnZhbGlkYXRlX2RvbWFpbnMpICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkKKwkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKKworCS8qIGJsb3cgYXdheSBtYXBwaW5ncyBpZiBtYXBwZWQgdGhyb3VnaCBHVFQgKi8KKwlpZiAoKGZsdXNoX2RvbWFpbnMgfCBpbnZhbGlkYXRlX2RvbWFpbnMpICYgSTkxNV9HRU1fRE9NQUlOX0dUVCkKKwkJaTkxNV9nZW1fcmVsZWFzZV9tbWFwKG9iaik7CisKKwkvKiBUaGUgYWN0dWFsIG9iai0+d3JpdGVfZG9tYWluIHdpbGwgYmUgdXBkYXRlZCB3aXRoCisJICogcGVuZGluZ193cml0ZV9kb21haW4gYWZ0ZXIgd2UgZW1pdCB0aGUgYWNjdW11bGF0ZWQgZmx1c2ggZm9yIGFsbAorCSAqIG9mIG91ciBkb21haW4gY2hhbmdlcyBpbiBleGVjYnVmZmVycyAod2hpY2ggY2xlYXJzIG9iamVjdHMnCisJICogd3JpdGVfZG9tYWlucykuICBTbyBpZiB3ZSBoYXZlIGEgY3VycmVudCB3cml0ZSBkb21haW4gdGhhdCB3ZQorCSAqIGFyZW4ndCBjaGFuZ2luZywgc2V0IHBlbmRpbmdfd3JpdGVfZG9tYWluIHRvIHRoYXQuCisJICovCisJaWYgKGZsdXNoX2RvbWFpbnMgPT0gMCAmJiBvYmotPmJhc2UucGVuZGluZ193cml0ZV9kb21haW4gPT0gMCkKKwkJb2JqLT5iYXNlLnBlbmRpbmdfd3JpdGVfZG9tYWluID0gb2JqLT5iYXNlLndyaXRlX2RvbWFpbjsKKworCWNkLT5pbnZhbGlkYXRlX2RvbWFpbnMgfD0gaW52YWxpZGF0ZV9kb21haW5zOworCWNkLT5mbHVzaF9kb21haW5zIHw9IGZsdXNoX2RvbWFpbnM7CisJaWYgKGZsdXNoX2RvbWFpbnMgJiBJOTE1X0dFTV9HUFVfRE9NQUlOUykKKwkJY2QtPmZsdXNoX3JpbmdzIHw9IG9iai0+cmluZy0+aWQ7CisJaWYgKGludmFsaWRhdGVfZG9tYWlucyAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKQorCQljZC0+Zmx1c2hfcmluZ3MgfD0gcmluZy0+aWQ7Cit9CisKK3N0cnVjdCBlYl9vYmplY3RzIHsKKwlpbnQgYW5kOworCXN0cnVjdCBobGlzdF9oZWFkIGJ1Y2tldHNbMF07Cit9OworCitzdGF0aWMgc3RydWN0IGViX29iamVjdHMgKgorZWJfY3JlYXRlKGludCBzaXplKQoreworCXN0cnVjdCBlYl9vYmplY3RzICplYjsKKwlpbnQgY291bnQgPSBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpIC8gMjsKKwl3aGlsZSAoY291bnQgPiBzaXplKQorCQljb3VudCA+Pj0gMTsKKwllYiA9IGt6YWxsb2MoY291bnQqc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSArCisJCSAgICAgc2l6ZW9mKHN0cnVjdCBlYl9vYmplY3RzKSwKKwkJICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoZWIgPT0gTlVMTCkKKwkJcmV0dXJuIGViOworCisJZWItPmFuZCA9IGNvdW50IC0gMTsKKwlyZXR1cm4gZWI7Cit9CisKK3N0YXRpYyB2b2lkCitlYl9yZXNldChzdHJ1Y3QgZWJfb2JqZWN0cyAqZWIpCit7CisJbWVtc2V0KGViLT5idWNrZXRzLCAwLCAoZWItPmFuZCsxKSpzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpKTsKK30KKworc3RhdGljIHZvaWQKK2ViX2FkZF9vYmplY3Qoc3RydWN0IGViX29iamVjdHMgKmViLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCWhsaXN0X2FkZF9oZWFkKCZvYmotPmV4ZWNfbm9kZSwKKwkJICAgICAgICZlYi0+YnVja2V0c1tvYmotPmV4ZWNfaGFuZGxlICYgZWItPmFuZF0pOworfQorCitzdGF0aWMgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKgorZWJfZ2V0X29iamVjdChzdHJ1Y3QgZWJfb2JqZWN0cyAqZWIsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisKKwloZWFkID0gJmViLT5idWNrZXRzW2hhbmRsZSAmIGViLT5hbmRdOworCWhsaXN0X2Zvcl9lYWNoKG5vZGUsIGhlYWQpIHsKKwkJb2JqID0gaGxpc3RfZW50cnkobm9kZSwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsIGV4ZWNfbm9kZSk7CisJCWlmIChvYmotPmV4ZWNfaGFuZGxlID09IGhhbmRsZSkKKwkJCXJldHVybiBvYmo7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitlYl9kZXN0cm95KHN0cnVjdCBlYl9vYmplY3RzICplYikKK3sKKwlrZnJlZShlYik7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfZW50cnkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgICBzdHJ1Y3QgZWJfb2JqZWN0cyAqZWIsCisJCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvYykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnRhcmdldF9vYmo7CisJdWludDMyX3QgdGFyZ2V0X29mZnNldDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCS8qIHdlJ3ZlIGFscmVhZHkgaG9sZCBhIHJlZmVyZW5jZSB0byBhbGwgdmFsaWQgb2JqZWN0cyAqLworCXRhcmdldF9vYmogPSAmZWJfZ2V0X29iamVjdChlYiwgcmVsb2MtPnRhcmdldF9oYW5kbGUpLT5iYXNlOworCWlmICh1bmxpa2VseSh0YXJnZXRfb2JqID09IE5VTEwpKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXRhcmdldF9vZmZzZXQgPSB0b19pbnRlbF9ibyh0YXJnZXRfb2JqKS0+Z3R0X29mZnNldDsKKworI2lmIFdBVENIX1JFTE9DCisJRFJNX0lORk8oIiVzOiBvYmogJXAgb2Zmc2V0ICUwOHggdGFyZ2V0ICVkICIKKwkJICJyZWFkICUwOHggd3JpdGUgJTA4eCBndHQgJTA4eCAiCisJCSAicHJlc3VtZWQgJTA4eCBkZWx0YSAlMDh4XG4iLAorCQkgX19mdW5jX18sCisJCSBvYmosCisJCSAoaW50KSByZWxvYy0+b2Zmc2V0LAorCQkgKGludCkgcmVsb2MtPnRhcmdldF9oYW5kbGUsCisJCSAoaW50KSByZWxvYy0+cmVhZF9kb21haW5zLAorCQkgKGludCkgcmVsb2MtPndyaXRlX2RvbWFpbiwKKwkJIChpbnQpIHRhcmdldF9vZmZzZXQsCisJCSAoaW50KSByZWxvYy0+cHJlc3VtZWRfb2Zmc2V0LAorCQkgcmVsb2MtPmRlbHRhKTsKKyNlbmRpZgorCisJLyogVGhlIHRhcmdldCBidWZmZXIgc2hvdWxkIGhhdmUgYXBwZWFyZWQgYmVmb3JlIHVzIGluIHRoZQorCSAqIGV4ZWNfb2JqZWN0IGxpc3QsIHNvIGl0IHNob3VsZCBoYXZlIGEgR1RUIHNwYWNlIGJvdW5kIGJ5IG5vdy4KKwkgKi8KKwlpZiAodW5saWtlbHkodGFyZ2V0X29mZnNldCA9PSAwKSkgeworCQlEUk1fRVJST1IoIk5vIEdUVCBzcGFjZSBmb3VuZCBmb3Igb2JqZWN0ICVkXG4iLAorCQkJICByZWxvYy0+dGFyZ2V0X2hhbmRsZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogVmFsaWRhdGUgdGhhdCB0aGUgdGFyZ2V0IGlzIGluIGEgdmFsaWQgci93IEdQVSBkb21haW4gKi8KKwlpZiAodW5saWtlbHkocmVsb2MtPndyaXRlX2RvbWFpbiAmIChyZWxvYy0+d3JpdGVfZG9tYWluIC0gMSkpKSB7CisJCURSTV9FUlJPUigicmVsb2Mgd2l0aCBtdWx0aXBsZSB3cml0ZSBkb21haW5zOiAiCisJCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCAiCisJCQkgICJyZWFkICUwOHggd3JpdGUgJTA4eCIsCisJCQkgIG9iaiwgcmVsb2MtPnRhcmdldF9oYW5kbGUsCisJCQkgIChpbnQpIHJlbG9jLT5vZmZzZXQsCisJCQkgIHJlbG9jLT5yZWFkX2RvbWFpbnMsCisJCQkgIHJlbG9jLT53cml0ZV9kb21haW4pOworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAodW5saWtlbHkoKHJlbG9jLT53cml0ZV9kb21haW4gfCByZWxvYy0+cmVhZF9kb21haW5zKSAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpKSB7CisJCURSTV9FUlJPUigicmVsb2Mgd2l0aCByZWFkL3dyaXRlIENQVSBkb21haW5zOiAiCisJCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCAiCisJCQkgICJyZWFkICUwOHggd3JpdGUgJTA4eCIsCisJCQkgIG9iaiwgcmVsb2MtPnRhcmdldF9oYW5kbGUsCisJCQkgIChpbnQpIHJlbG9jLT5vZmZzZXQsCisJCQkgIHJlbG9jLT5yZWFkX2RvbWFpbnMsCisJCQkgIHJlbG9jLT53cml0ZV9kb21haW4pOworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAodW5saWtlbHkocmVsb2MtPndyaXRlX2RvbWFpbiAmJiB0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiAmJgorCQkgICAgIHJlbG9jLT53cml0ZV9kb21haW4gIT0gdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4pKSB7CisJCURSTV9FUlJPUigiV3JpdGUgZG9tYWluIGNvbmZsaWN0OiAiCisJCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCAiCisJCQkgICJuZXcgJTA4eCBvbGQgJTA4eFxuIiwKKwkJCSAgb2JqLCByZWxvYy0+dGFyZ2V0X2hhbmRsZSwKKwkJCSAgKGludCkgcmVsb2MtPm9mZnNldCwKKwkJCSAgcmVsb2MtPndyaXRlX2RvbWFpbiwKKwkJCSAgdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4pOworCQlyZXR1cm4gcmV0OworCX0KKworCXRhcmdldF9vYmotPnBlbmRpbmdfcmVhZF9kb21haW5zIHw9IHJlbG9jLT5yZWFkX2RvbWFpbnM7CisJdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4gfD0gcmVsb2MtPndyaXRlX2RvbWFpbjsKKworCS8qIElmIHRoZSByZWxvY2F0aW9uIGFscmVhZHkgaGFzIHRoZSByaWdodCB2YWx1ZSBpbiBpdCwgbm8KKwkgKiBtb3JlIHdvcmsgbmVlZHMgdG8gYmUgZG9uZS4KKwkgKi8KKwlpZiAodGFyZ2V0X29mZnNldCA9PSByZWxvYy0+cHJlc3VtZWRfb2Zmc2V0KQorCQlyZXR1cm4gMDsKKworCS8qIENoZWNrIHRoYXQgdGhlIHJlbG9jYXRpb24gYWRkcmVzcyBpcyB2YWxpZC4uLiAqLworCWlmICh1bmxpa2VseShyZWxvYy0+b2Zmc2V0ID4gb2JqLT5iYXNlLnNpemUgLSA0KSkgeworCQlEUk1fRVJST1IoIlJlbG9jYXRpb24gYmV5b25kIG9iamVjdCBib3VuZHM6ICIKKwkJCSAgIm9iaiAlcCB0YXJnZXQgJWQgb2Zmc2V0ICVkIHNpemUgJWQuXG4iLAorCQkJICBvYmosIHJlbG9jLT50YXJnZXRfaGFuZGxlLAorCQkJICAoaW50KSByZWxvYy0+b2Zmc2V0LAorCQkJICAoaW50KSBvYmotPmJhc2Uuc2l6ZSk7CisJCXJldHVybiByZXQ7CisJfQorCWlmICh1bmxpa2VseShyZWxvYy0+b2Zmc2V0ICYgMykpIHsKKwkJRFJNX0VSUk9SKCJSZWxvY2F0aW9uIG5vdCA0LWJ5dGUgYWxpZ25lZDogIgorCQkJICAib2JqICVwIHRhcmdldCAlZCBvZmZzZXQgJWQuXG4iLAorCQkJICBvYmosIHJlbG9jLT50YXJnZXRfaGFuZGxlLAorCQkJICAoaW50KSByZWxvYy0+b2Zmc2V0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBhbmQgcG9pbnRzIHRvIHNvbWV3aGVyZSB3aXRoaW4gdGhlIHRhcmdldCBvYmplY3QuICovCisJaWYgKHVubGlrZWx5KHJlbG9jLT5kZWx0YSA+PSB0YXJnZXRfb2JqLT5zaXplKSkgeworCQlEUk1fRVJST1IoIlJlbG9jYXRpb24gYmV5b25kIHRhcmdldCBvYmplY3QgYm91bmRzOiAiCisJCQkgICJvYmogJXAgdGFyZ2V0ICVkIGRlbHRhICVkIHNpemUgJWQuXG4iLAorCQkJICBvYmosIHJlbG9jLT50YXJnZXRfaGFuZGxlLAorCQkJICAoaW50KSByZWxvYy0+ZGVsdGEsCisJCQkgIChpbnQpIHRhcmdldF9vYmotPnNpemUpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlbG9jLT5kZWx0YSArPSB0YXJnZXRfb2Zmc2V0OworCWlmIChvYmotPmJhc2Uud3JpdGVfZG9tYWluID09IEk5MTVfR0VNX0RPTUFJTl9DUFUpIHsKKwkJdWludDMyX3QgcGFnZV9vZmZzZXQgPSByZWxvYy0+b2Zmc2V0ICYgflBBR0VfTUFTSzsKKwkJY2hhciAqdmFkZHI7CisKKwkJdmFkZHIgPSBrbWFwX2F0b21pYyhvYmotPnBhZ2VzW3JlbG9jLT5vZmZzZXQgPj4gUEFHRV9TSElGVF0pOworCQkqKHVpbnQzMl90ICopKHZhZGRyICsgcGFnZV9vZmZzZXQpID0gcmVsb2MtPmRlbHRhOworCQlrdW5tYXBfYXRvbWljKHZhZGRyKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCQl1aW50MzJfdCBfX2lvbWVtICpyZWxvY19lbnRyeTsKKwkJdm9pZCBfX2lvbWVtICpyZWxvY19wYWdlOworCisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBNYXAgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgcmVsb2NhdGlvbiB3ZSdyZSBnb2luZyB0byBwZXJmb3JtLiAgKi8KKwkJcmVsb2MtPm9mZnNldCArPSBvYmotPmd0dF9vZmZzZXQ7CisJCXJlbG9jX3BhZ2UgPSBpb19tYXBwaW5nX21hcF9hdG9taWNfd2MoZGV2X3ByaXYtPm1tLmd0dF9tYXBwaW5nLAorCQkJCQkJICAgICAgcmVsb2MtPm9mZnNldCAmIFBBR0VfTUFTSyk7CisJCXJlbG9jX2VudHJ5ID0gKHVpbnQzMl90IF9faW9tZW0gKikKKwkJCShyZWxvY19wYWdlICsgKHJlbG9jLT5vZmZzZXQgJiB+UEFHRV9NQVNLKSk7CisJCWlvd3JpdGUzMihyZWxvYy0+ZGVsdGEsIHJlbG9jX2VudHJ5KTsKKwkJaW9fbWFwcGluZ191bm1hcF9hdG9taWMocmVsb2NfcGFnZSk7CisJfQorCisJLyogYW5kIHVwZGF0ZSB0aGUgdXNlcidzIHJlbG9jYXRpb24gZW50cnkgKi8KKwlyZWxvYy0+cHJlc3VtZWRfb2Zmc2V0ID0gdGFyZ2V0X29mZnNldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX29iamVjdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCSAgICBzdHJ1Y3QgZWJfb2JqZWN0cyAqZWIpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqdXNlcl9yZWxvY3M7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmVudHJ5ID0gb2JqLT5leGVjX2VudHJ5OworCWludCBpLCByZXQ7CisKKwl1c2VyX3JlbG9jcyA9ICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpZW50cnktPnJlbG9jc19wdHI7CisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5yZWxvY2F0aW9uX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jOworCisJCWlmIChfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKCZyZWxvYywKKwkJCQkJICAgICAgdXNlcl9yZWxvY3MraSwKKwkJCQkJICAgICAgc2l6ZW9mKHJlbG9jKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXQgPSBpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX2VudHJ5KG9iaiwgZWIsICZyZWxvYyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWlmIChfX2NvcHlfdG9fdXNlcl9pbmF0b21pYygmdXNlcl9yZWxvY3NbaV0ucHJlc3VtZWRfb2Zmc2V0LAorCQkJCQkgICAgJnJlbG9jLnByZXN1bWVkX29mZnNldCwKKwkJCQkJICAgIHNpemVvZihyZWxvYy5wcmVzdW1lZF9vZmZzZXQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX29iamVjdF9zbG93KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJCSBzdHJ1Y3QgZWJfb2JqZWN0cyAqZWIsCisJCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jcykKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50cnkgPSBvYmotPmV4ZWNfZW50cnk7CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+cmVsb2NhdGlvbl9jb3VudDsgaSsrKSB7CisJCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfZW50cnkob2JqLCBlYiwgJnJlbG9jc1tpXSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBlYl9vYmplY3RzICplYiwKKwkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqb2JqZWN0cykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgb2JqZWN0cywgZXhlY19saXN0KSB7CisJCW9iai0+YmFzZS5wZW5kaW5nX3JlYWRfZG9tYWlucyA9IDA7CisJCW9iai0+YmFzZS5wZW5kaW5nX3dyaXRlX2RvbWFpbiA9IDA7CisJCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfb2JqZWN0KG9iaiwgZWIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fZXhlY2J1ZmZlcl9yZXNlcnZlKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKKwkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCisJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqb2JqZWN0cykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCWludCByZXQsIHJldHJ5OworCWJvb2wgaGFzX2ZlbmNlZF9ncHVfYWNjZXNzID0gSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5nZW4gPCA0OworCXN0cnVjdCBsaXN0X2hlYWQgb3JkZXJlZF9vYmplY3RzOworCisJSU5JVF9MSVNUX0hFQUQoJm9yZGVyZWRfb2JqZWN0cyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KG9iamVjdHMpKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeTsKKwkJYm9vbCBuZWVkX2ZlbmNlLCBuZWVkX21hcHBhYmxlOworCisJCW9iaiA9IGxpc3RfZmlyc3RfZW50cnkob2JqZWN0cywKKwkJCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCisJCQkJICAgICAgIGV4ZWNfbGlzdCk7CisJCWVudHJ5ID0gb2JqLT5leGVjX2VudHJ5OworCisJCW5lZWRfZmVuY2UgPQorCQkJaGFzX2ZlbmNlZF9ncHVfYWNjZXNzICYmCisJCQllbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9ORUVEU19GRU5DRSAmJgorCQkJb2JqLT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FOworCQluZWVkX21hcHBhYmxlID0KKwkJCWVudHJ5LT5yZWxvY2F0aW9uX2NvdW50ID8gdHJ1ZSA6IG5lZWRfZmVuY2U7CisKKwkJaWYgKG5lZWRfbWFwcGFibGUpCisJCQlsaXN0X21vdmUoJm9iai0+ZXhlY19saXN0LCAmb3JkZXJlZF9vYmplY3RzKTsKKwkJZWxzZQorCQkJbGlzdF9tb3ZlX3RhaWwoJm9iai0+ZXhlY19saXN0LCAmb3JkZXJlZF9vYmplY3RzKTsKKwl9CisJbGlzdF9zcGxpY2UoJm9yZGVyZWRfb2JqZWN0cywgb2JqZWN0cyk7CisKKwkvKiBBdHRlbXB0IHRvIHBpbiBhbGwgb2YgdGhlIGJ1ZmZlcnMgaW50byB0aGUgR1RULgorCSAqIFRoaXMgaXMgZG9uZSBpbiAzIHBoYXNlczoKKwkgKgorCSAqIDFhLiBVbmJpbmQgYWxsIG9iamVjdHMgdGhhdCBkbyBub3QgbWF0Y2ggdGhlIEdUVCBjb25zdHJhaW50cyBmb3IKKwkgKiAgICAgdGhlIGV4ZWNidWZmZXIgKGZlbmNlYWJsZSwgbWFwcGFibGUsIGFsaWdubWVudCBldGMpLgorCSAqIDFiLiBJbmNyZW1lbnQgcGluIGNvdW50IGZvciBhbHJlYWR5IGJvdW5kIG9iamVjdHMuCisJICogMi4gIEJpbmQgbmV3IG9iamVjdHMuCisJICogMy4gIERlY3JlbWVudCBwaW4gY291bnQuCisJICoKKwkgKiBUaGlzIGF2b2lkIHVubmVjZXNzYXJ5IHVuYmluZGluZyBvZiBsYXRlciBvYmplY3RzIGluIG9yZGVyIHRvIG1ha3IKKwkgKiByb29tIGZvciB0aGUgZWFybGllciBvYmplY3RzICp1bmxlc3MqIHdlIG5lZWQgdG8gZGVmcmFnbWVudC4KKwkgKi8KKwlyZXRyeSA9IDA7CisJZG8geworCQlyZXQgPSAwOworCisJCS8qIFVuYmluZCBhbnkgaWxsLWZpdHRpbmcgb2JqZWN0cyBvciBwaW4uICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCBvYmplY3RzLCBleGVjX2xpc3QpIHsKKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeSA9IG9iai0+ZXhlY19lbnRyeTsKKwkJCWJvb2wgbmVlZF9mZW5jZSwgbmVlZF9tYXBwYWJsZTsKKwkJCWlmICghb2JqLT5ndHRfc3BhY2UpCisJCQkJY29udGludWU7CisKKwkJCW5lZWRfZmVuY2UgPQorCQkJCWhhc19mZW5jZWRfZ3B1X2FjY2VzcyAmJgorCQkJCWVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX05FRURTX0ZFTkNFICYmCisJCQkJb2JqLT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FOworCQkJbmVlZF9tYXBwYWJsZSA9CisJCQkJZW50cnktPnJlbG9jYXRpb25fY291bnQgPyB0cnVlIDogbmVlZF9mZW5jZTsKKworCQkJaWYgKChlbnRyeS0+YWxpZ25tZW50ICYmIG9iai0+Z3R0X29mZnNldCAmIChlbnRyeS0+YWxpZ25tZW50IC0gMSkpIHx8CisJCQkgICAgKG5lZWRfbWFwcGFibGUgJiYgIW9iai0+bWFwX2FuZF9mZW5jZWFibGUpKQorCQkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwKKwkJCQkJCQkgIGVudHJ5LT5hbGlnbm1lbnQsCisJCQkJCQkJICBuZWVkX21hcHBhYmxlKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnI7CisKKwkJCWVudHJ5Kys7CisJCX0KKworCQkvKiBCaW5kIGZyZXNoIG9iamVjdHMgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosIG9iamVjdHMsIGV4ZWNfbGlzdCkgeworCQkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmVudHJ5ID0gb2JqLT5leGVjX2VudHJ5OworCQkJYm9vbCBuZWVkX2ZlbmNlOworCisJCQluZWVkX2ZlbmNlID0KKwkJCQloYXNfZmVuY2VkX2dwdV9hY2Nlc3MgJiYKKwkJCQllbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9ORUVEU19GRU5DRSAmJgorCQkJCW9iai0+dGlsaW5nX21vZGUgIT0gSTkxNV9USUxJTkdfTk9ORTsKKworCQkJaWYgKCFvYmotPmd0dF9zcGFjZSkgeworCQkJCWJvb2wgbmVlZF9tYXBwYWJsZSA9CisJCQkJCWVudHJ5LT5yZWxvY2F0aW9uX2NvdW50ID8gdHJ1ZSA6IG5lZWRfZmVuY2U7CisKKwkJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwKKwkJCQkJCQkgIGVudHJ5LT5hbGlnbm1lbnQsCisJCQkJCQkJICBuZWVkX21hcHBhYmxlKTsKKwkJCQlpZiAocmV0KQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKGhhc19mZW5jZWRfZ3B1X2FjY2VzcykgeworCQkJCWlmIChuZWVkX2ZlbmNlKSB7CisJCQkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfZmVuY2Uob2JqLCByaW5nLCAxKTsKKwkJCQkJaWYgKHJldCkKKwkJCQkJCWJyZWFrOworCQkJCX0gZWxzZSBpZiAoZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0UgJiYKKwkJCQkJICAgb2JqLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19OT05FKSB7CisJCQkJCS8qIFhYWCBwaXBlbGluZWQhICovCisJCQkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2Uob2JqKTsKKwkJCQkJaWYgKHJldCkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlvYmotPnBlbmRpbmdfZmVuY2VkX2dwdV9hY2Nlc3MgPSBuZWVkX2ZlbmNlOworCQkJfQorCisJCQllbnRyeS0+b2Zmc2V0ID0gb2JqLT5ndHRfb2Zmc2V0OworCQl9CisKKwkJLyogRGVjcmVtZW50IHBpbiBjb3VudCBmb3IgYm91bmQgb2JqZWN0cyAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgb2JqZWN0cywgZXhlY19saXN0KSB7CisJCQlpZiAob2JqLT5ndHRfc3BhY2UpCisJCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCX0KKworCQlpZiAocmV0ICE9IC1FTk9TUEMgfHwgcmV0cnkgPiAxKQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBGaXJzdCBhdHRlbXB0LCBqdXN0IGNsZWFyIGFueXRoaW5nIHRoYXQgaXMgcHVyZ2VhYmxlLgorCQkgKiBTZWNvbmQgYXR0ZW1wdCwgY2xlYXIgdGhlIGVudGlyZSBHVFQuCisJCSAqLworCQlyZXQgPSBpOTE1X2dlbV9ldmljdF9ldmVyeXRoaW5nKHJpbmctPmRldiwgcmV0cnkgPT0gMCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldHJ5Kys7CisJfSB3aGlsZSAoMSk7CisKK2VycjoKKwlvYmogPSBsaXN0X2VudHJ5KG9iai0+ZXhlY19saXN0LnByZXYsCisJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCisJCQkgZXhlY19saXN0KTsKKwl3aGlsZSAob2JqZWN0cyAhPSAmb2JqLT5leGVjX2xpc3QpIHsKKwkJaWYgKG9iai0+Z3R0X3NwYWNlKQorCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisKKwkJb2JqID0gbGlzdF9lbnRyeShvYmotPmV4ZWNfbGlzdC5wcmV2LAorCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKKwkJCQkgZXhlY19saXN0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX3Nsb3coc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKKwkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKm9iamVjdHMsCisJCQkJICBzdHJ1Y3QgZWJfb2JqZWN0cyAqZWIsCisJCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlYywKKwkJCQkgIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IGksIHRvdGFsLCByZXQ7CisKKwkvKiBXZSBtYXkgcHJvY2VzcyBhbm90aGVyIGV4ZWNidWZmZXIgZHVyaW5nIHRoZSB1bmxvY2suLi4gKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkob2JqZWN0cykpIHsKKwkJb2JqID0gbGlzdF9maXJzdF9lbnRyeShvYmplY3RzLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKKwkJCQkgICAgICAgZXhlY19saXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmb2JqLT5leGVjX2xpc3QpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwl9CisKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXRvdGFsID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJdG90YWwgKz0gZXhlY1tpXS5yZWxvY2F0aW9uX2NvdW50OworCisJcmVsb2MgPSBkcm1fbWFsbG9jX2FiKHRvdGFsLCBzaXplb2YoKnJlbG9jKSk7CisJaWYgKHJlbG9jID09IE5VTEwpIHsKKwkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl0b3RhbCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqdXNlcl9yZWxvY3M7CisKKwkJdXNlcl9yZWxvY3MgPSAodm9pZCBfX3VzZXIgKikodWludHB0cl90KWV4ZWNbaV0ucmVsb2NzX3B0cjsKKworCQlpZiAoY29weV9mcm9tX3VzZXIocmVsb2MrdG90YWwsIHVzZXJfcmVsb2NzLAorCQkJCSAgIGV4ZWNbaV0ucmVsb2NhdGlvbl9jb3VudCAqIHNpemVvZigqcmVsb2MpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJdG90YWwgKz0gZXhlY1tpXS5yZWxvY2F0aW9uX2NvdW50OworCX0KKworCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7CisJaWYgKHJldCkgeworCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWdvdG8gZXJyOworCX0KKworCS8qIHJlYWNxdWlyZSB0aGUgb2JqZWN0cyAqLworCWViX3Jlc2V0KGViKTsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCisJCW9iaiA9IHRvX2ludGVsX2JvKGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUsCisJCQkJCQkJZXhlY1tpXS5oYW5kbGUpKTsKKwkJaWYgKG9iaiA9PSBOVUxMKSB7CisJCQlEUk1fRVJST1IoIkludmFsaWQgb2JqZWN0IGhhbmRsZSAlZCBhdCBpbmRleCAlZFxuIiwKKwkJCQkgICBleGVjW2ldLmhhbmRsZSwgaSk7CisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBlcnI7CisJCX0KKworCQlsaXN0X2FkZF90YWlsKCZvYmotPmV4ZWNfbGlzdCwgb2JqZWN0cyk7CisJCW9iai0+ZXhlY19oYW5kbGUgPSBleGVjW2ldLmhhbmRsZTsKKwkJb2JqLT5leGVjX2VudHJ5ID0gJmV4ZWNbaV07CisJCWViX2FkZF9vYmplY3QoZWIsIG9iaik7CisJfQorCisJcmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZXNlcnZlKHJpbmcsIGZpbGUsIG9iamVjdHMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJdG90YWwgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCBvYmplY3RzLCBleGVjX2xpc3QpIHsKKwkJb2JqLT5iYXNlLnBlbmRpbmdfcmVhZF9kb21haW5zID0gMDsKKwkJb2JqLT5iYXNlLnBlbmRpbmdfd3JpdGVfZG9tYWluID0gMDsKKwkJcmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZV9vYmplY3Rfc2xvdyhvYmosIGViLAorCQkJCQkJCSAgICAgICByZWxvYyArIHRvdGFsKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCisJCXRvdGFsICs9IGV4ZWMtPnJlbG9jYXRpb25fY291bnQ7CisJCWV4ZWMrKzsKKwl9CisKKwkvKiBMZWF2ZSB0aGUgdXNlciByZWxvY2F0aW9ucyBhcyBhcmUsIHRoaXMgaXMgdGhlIHBhaW5mdWxseSBzbG93IHBhdGgsCisJICogYW5kIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGNvbXBsaWNhdGlvbiBvZiBkcm9wcGluZyB0aGUgbG9jayB3aGlsc3QKKwkgKiBoYXZpbmcgYnVmZmVycyByZXNlcnZlZCBpbiB0aGUgYXBlcnR1cmUgYW5kIHNvIGNhdXNpbmcgc3B1cmlvdXMKKwkgKiBFTk9TUEMgZm9yIHJhbmRvbSBvcGVyYXRpb25zLgorCSAqLworCitlcnI6CisJZHJtX2ZyZWVfbGFyZ2UocmVsb2MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2V4ZWNidWZmZXJfZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgdWludDMyX3QgaW52YWxpZGF0ZV9kb21haW5zLAorCQkJICB1aW50MzJfdCBmbHVzaF9kb21haW5zLAorCQkJICB1aW50MzJfdCBmbHVzaF9yaW5ncykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaSwgcmV0OworCisJaWYgKGZsdXNoX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKQorCQlpbnRlbF9ndHRfY2hpcHNldF9mbHVzaCgpOworCisJaWYgKGZsdXNoX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fR1RUKQorCQl3bWIoKTsKKworCWlmICgoZmx1c2hfZG9tYWlucyB8IGludmFsaWRhdGVfZG9tYWlucykgJiBJOTE1X0dFTV9HUFVfRE9NQUlOUykgeworCQlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykKKwkJCWlmIChmbHVzaF9yaW5ncyAmICgxIDw8IGkpKSB7CisJCQkJcmV0ID0gaTkxNV9nZW1fZmx1c2hfcmluZyhkZXYsCisJCQkJCQkJICAmZGV2X3ByaXYtPnJpbmdbaV0sCisJCQkJCQkJICBpbnZhbGlkYXRlX2RvbWFpbnMsCisJCQkJCQkJICBmbHVzaF9kb21haW5zKTsKKwkJCQlpZiAocmV0KQorCQkJCQlyZXR1cm4gcmV0OworCQkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9leGVjYnVmZmVyX3N5bmNfcmluZ3Moc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnRvKQoreworCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqZnJvbSA9IG9iai0+cmluZzsKKwl1MzIgc2Vxbm87CisJaW50IHJldCwgaWR4OworCisJaWYgKGZyb20gPT0gTlVMTCB8fCB0byA9PSBmcm9tKQorCQlyZXR1cm4gMDsKKworCWlmIChJTlRFTF9JTkZPKG9iai0+YmFzZS5kZXYpLT5nZW4gPCA2KQorCQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaiwgdHJ1ZSk7CisKKwlpZHggPSBpbnRlbF9yaW5nX3N5bmNfaW5kZXgoZnJvbSwgdG8pOworCisJc2Vxbm8gPSBvYmotPmxhc3RfcmVuZGVyaW5nX3NlcW5vOworCWlmIChzZXFubyA8PSBmcm9tLT5zeW5jX3NlcW5vW2lkeF0pCisJCXJldHVybiAwOworCisJaWYgKHNlcW5vID09IGZyb20tPm91dHN0YW5kaW5nX2xhenlfcmVxdWVzdCkgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7CisKKwkJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXF1ZXN0ID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlyZXQgPSBpOTE1X2FkZF9yZXF1ZXN0KG9iai0+YmFzZS5kZXYsIE5VTEwsIHJlcXVlc3QsIGZyb20pOworCQlpZiAocmV0KSB7CisJCQlrZnJlZShyZXF1ZXN0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlzZXFubyA9IHJlcXVlc3QtPnNlcW5vOworCX0KKworCWZyb20tPnN5bmNfc2Vxbm9baWR4XSA9IHNlcW5vOworCXJldHVybiBpbnRlbF9yaW5nX3N5bmModG8sIGZyb20sIHNlcW5vIC0gMSk7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2V4ZWNidWZmZXJfbW92ZV90b19ncHUoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKm9iamVjdHMpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgY2hhbmdlX2RvbWFpbnMgY2Q7CisJaW50IHJldDsKKworCWNkLmludmFsaWRhdGVfZG9tYWlucyA9IDA7CisJY2QuZmx1c2hfZG9tYWlucyA9IDA7CisJY2QuZmx1c2hfcmluZ3MgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCBvYmplY3RzLCBleGVjX2xpc3QpCisJCWk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3B1X2RvbWFpbihvYmosIHJpbmcsICZjZCk7CisKKwlpZiAoY2QuaW52YWxpZGF0ZV9kb21haW5zIHwgY2QuZmx1c2hfZG9tYWlucykgeworI2lmIFdBVENIX0VYRUMKKwkJRFJNX0lORk8oIiVzOiBpbnZhbGlkYXRlX2RvbWFpbnMgJTA4eCBmbHVzaF9kb21haW5zICUwOHhcbiIsCisJCQkgIF9fZnVuY19fLAorCQkJIGNkLmludmFsaWRhdGVfZG9tYWlucywKKwkJCSBjZC5mbHVzaF9kb21haW5zKTsKKyNlbmRpZgorCQlyZXQgPSBpOTE1X2dlbV9leGVjYnVmZmVyX2ZsdXNoKHJpbmctPmRldiwKKwkJCQkJCWNkLmludmFsaWRhdGVfZG9tYWlucywKKwkJCQkJCWNkLmZsdXNoX2RvbWFpbnMsCisJCQkJCQljZC5mbHVzaF9yaW5ncyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCBvYmplY3RzLCBleGVjX2xpc3QpIHsKKwkJcmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9zeW5jX3JpbmdzKG9iaiwgcmluZyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbAoraTkxNV9nZW1fY2hlY2tfZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjKQoreworCXJldHVybiAoKGV4ZWMtPmJhdGNoX3N0YXJ0X29mZnNldCB8IGV4ZWMtPmJhdGNoX2xlbikgJiAweDcpID09IDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX2V4ZWNfbGlzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlYywKKwkJICAgaW50IGNvdW50KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJY2hhciBfX3VzZXIgKnB0ciA9IChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpZXhlY1tpXS5yZWxvY3NfcHRyOworCQlpbnQgbGVuZ3RoOyAvKiBsaW1pdGVkIGJ5IGZhdWx0X2luX3BhZ2VzX3JlYWRhYmxlKCkgKi8KKworCQkvKiBGaXJzdCBjaGVjayBmb3IgbWFsaWNpb3VzIGlucHV0IGNhdXNpbmcgb3ZlcmZsb3cgKi8KKwkJaWYgKGV4ZWNbaV0ucmVsb2NhdGlvbl9jb3VudCA+CisJCSAgICBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlsZW5ndGggPSBleGVjW2ldLnJlbG9jYXRpb25fY291bnQgKgorCQkJc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSk7CisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBwdHIsIGxlbmd0aCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkvKiB3ZSBtYXkgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgcHJlc3VtZWQgb2Zmc2V0cyAqLworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHB0ciwgbGVuZ3RoKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChmYXVsdF9pbl9wYWdlc19yZWFkYWJsZShwdHIsIGxlbmd0aCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fZXhlY2J1ZmZlcl93YWl0X2Zvcl9mbGlwcyhzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCisJCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqb2JqZWN0cykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCWludCBmbGlwczsKKworCS8qIENoZWNrIGZvciBhbnkgcGVuZGluZyBmbGlwcy4gQXMgd2Ugb25seSBtYWludGFpbiBhIGZsaXAgcXVldWUgZGVwdGgKKwkgKiBvZiAxLCB3ZSBjYW4gc2ltcGx5IGluc2VydCBhIFdBSVQgZm9yIHRoZSBuZXh0IGRpc3BsYXkgZmxpcCBwcmlvcgorCSAqIHRvIGV4ZWN1dGluZyB0aGUgYmF0Y2ggYW5kIGF2b2lkIHN0YWxsaW5nIHRoZSBDUFUuCisJICovCisJZmxpcHMgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCBvYmplY3RzLCBleGVjX2xpc3QpIHsKKwkJaWYgKG9iai0+YmFzZS53cml0ZV9kb21haW4pCisJCQlmbGlwcyB8PSBhdG9taWNfcmVhZCgmb2JqLT5wZW5kaW5nX2ZsaXApOworCX0KKwlpZiAoZmxpcHMpIHsKKwkJaW50IHBsYW5lLCBmbGlwX21hc2ssIHJldDsKKworCQlmb3IgKHBsYW5lID0gMDsgZmxpcHMgPj4gcGxhbmU7IHBsYW5lKyspIHsKKwkJCWlmICgoKGZsaXBzID4+IHBsYW5lKSAmIDEpID09IDApCisJCQkJY29udGludWU7CisKKwkJCWlmIChwbGFuZSkKKwkJCQlmbGlwX21hc2sgPSBNSV9XQUlUX0ZPUl9QTEFORV9CX0ZMSVA7CisJCQllbHNlCisJCQkJZmxpcF9tYXNrID0gTUlfV0FJVF9GT1JfUExBTkVfQV9GTElQOworCisJCQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDIpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfV0FJVF9GT1JfRVZFTlQgfCBmbGlwX21hc2spOworCQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOworCQkJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9leGVjYnVmZmVyX21vdmVfdG9fYWN0aXZlKHN0cnVjdCBsaXN0X2hlYWQgKm9iamVjdHMsCisJCQkJICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAorCQkJCSAgIHUzMiBzZXFubykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosIG9iamVjdHMsIGV4ZWNfbGlzdCkgeworCQlvYmotPmJhc2UucmVhZF9kb21haW5zID0gb2JqLT5iYXNlLnBlbmRpbmdfcmVhZF9kb21haW5zOworCQlvYmotPmJhc2Uud3JpdGVfZG9tYWluID0gb2JqLT5iYXNlLnBlbmRpbmdfd3JpdGVfZG9tYWluOworCQlvYmotPmZlbmNlZF9ncHVfYWNjZXNzID0gb2JqLT5wZW5kaW5nX2ZlbmNlZF9ncHVfYWNjZXNzOworCisJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShvYmosIHJpbmcsIHNlcW5vKTsKKwkJaWYgKG9iai0+YmFzZS53cml0ZV9kb21haW4pIHsKKwkJCW9iai0+ZGlydHkgPSAxOworCQkJb2JqLT5wZW5kaW5nX2dwdV93cml0ZSA9IHRydWU7CisJCQlsaXN0X21vdmVfdGFpbCgmb2JqLT5ncHVfd3JpdGVfbGlzdCwKKwkJCQkgICAgICAgJnJpbmctPmdwdV93cml0ZV9saXN0KTsKKwkJCWludGVsX21hcmtfYnVzeShyaW5nLT5kZXYsIG9iaik7CisJCX0KKworCQl0cmFjZV9pOTE1X2dlbV9vYmplY3RfY2hhbmdlX2RvbWFpbihvYmosCisJCQkJCQkgICAgb2JqLT5iYXNlLnJlYWRfZG9tYWlucywKKwkJCQkJCSAgICBvYmotPmJhc2Uud3JpdGVfZG9tYWluKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9leGVjYnVmZmVyX3JldGlyZV9jb21tYW5kcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCisJCQkJICAgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7CisJdTMyIGludmFsaWRhdGU7CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IHRoZSBjb21tYW5kcyBpbiB0aGUgYmF0Y2ggYnVmZmVyIGFyZQorCSAqIGZpbmlzaGVkIGJlZm9yZSB0aGUgaW50ZXJydXB0IGZpcmVzLgorCSAqCisJICogVGhlIHNhbXBsZXIgYWx3YXlzIGdldHMgZmx1c2hlZCBvbiBpOTY1IChzaWdoKS4KKwkgKi8KKwlpbnZhbGlkYXRlID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7CisJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQpCisJCWludmFsaWRhdGUgfD0gSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7CisJaWYgKHJpbmctPmZsdXNoKHJpbmcsIGludmFsaWRhdGUsIDApKSB7CisJCWk5MTVfZ2VtX25leHRfcmVxdWVzdF9zZXFubyhkZXYsIHJpbmcpOworCQlyZXR1cm47CisJfQorCisJLyogQWRkIGEgYnJlYWRjcnVtYiBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGJhdGNoIGJ1ZmZlciAqLworCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZigqcmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmIChyZXF1ZXN0ID09IE5VTEwgfHwgaTkxNV9hZGRfcmVxdWVzdChkZXYsIGZpbGUsIHJlcXVlc3QsIHJpbmcpKSB7CisJCWk5MTVfZ2VtX25leHRfcmVxdWVzdF9zZXFubyhkZXYsIHJpbmcpOworCQlrZnJlZShyZXF1ZXN0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmFyZ3MsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlYykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG9iamVjdHM7CisJc3RydWN0IGViX29iamVjdHMgKmViOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpiYXRjaF9vYmo7CisJc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyA9IE5VTEw7CisJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nOworCXUzMiBleGVjX3N0YXJ0LCBleGVjX2xlbjsKKwl1MzIgc2Vxbm87CisJaW50IHJldCwgbW9kZSwgaTsKKworCWlmICghaTkxNV9nZW1fY2hlY2tfZXhlY2J1ZmZlcihhcmdzKSkgeworCQlEUk1fRVJST1IoImV4ZWNidWYgd2l0aCBpbnZhbGlkIG9mZnNldC9sZW5ndGhcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSB2YWxpZGF0ZV9leGVjX2xpc3QoZXhlYywgYXJncy0+YnVmZmVyX2NvdW50KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisjaWYgV0FUQ0hfRVhFQworCURSTV9JTkZPKCJidWZmZXJzX3B0ciAlZCBidWZmZXJfY291bnQgJWQgbGVuICUwOHhcbiIsCisJCSAgKGludCkgYXJncy0+YnVmZmVyc19wdHIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgYXJncy0+YmF0Y2hfbGVuKTsKKyNlbmRpZgorCXN3aXRjaCAoYXJncy0+ZmxhZ3MgJiBJOTE1X0VYRUNfUklOR19NQVNLKSB7CisJY2FzZSBJOTE1X0VYRUNfREVGQVVMVDoKKwljYXNlIEk5MTVfRVhFQ19SRU5ERVI6CisJCXJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbUkNTXTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X0VYRUNfQlNEOgorCQlpZiAoIUhBU19CU0QoZGV2KSkgeworCQkJRFJNX0VSUk9SKCJleGVjYnVmIHdpdGggaW52YWxpZCByaW5nIChCU0QpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbVkNTXTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X0VYRUNfQkxUOgorCQlpZiAoIUhBU19CTFQoZGV2KSkgeworCQkJRFJNX0VSUk9SKCJleGVjYnVmIHdpdGggaW52YWxpZCByaW5nIChCTFQpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbQkNTXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJleGVjYnVmIHdpdGggdW5rbm93biByaW5nOiAlZFxuIiwKKwkJCSAgKGludCkoYXJncy0+ZmxhZ3MgJiBJOTE1X0VYRUNfUklOR19NQVNLKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1vZGUgPSBhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19DT05TVEFOVFNfTUFTSzsKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIEk5MTVfRVhFQ19DT05TVEFOVFNfUkVMX0dFTkVSQUw6CisJY2FzZSBJOTE1X0VYRUNfQ09OU1RBTlRTX0FCU09MVVRFOgorCWNhc2UgSTkxNV9FWEVDX0NPTlNUQU5UU19SRUxfU1VSRkFDRToKKwkJaWYgKHJpbmcgPT0gJmRldl9wcml2LT5yaW5nW1JDU10gJiYKKwkJICAgIG1vZGUgIT0gZGV2X3ByaXYtPnJlbGF0aXZlX2NvbnN0YW50c19tb2RlKSB7CisJCQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA0KQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPiA1ICYmCisJCQkgICAgbW9kZSA9PSBJOTE1X0VYRUNfQ09OU1RBTlRTX1JFTF9TVVJGQUNFKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDQpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7CisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSkpOworCQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIElOU1RQTSk7CisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywKKwkJCQkJSTkxNV9FWEVDX0NPTlNUQU5UU19NQVNLIDw8IDE2IHwgbW9kZSk7CisJCQlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7CisKKwkJCWRldl9wcml2LT5yZWxhdGl2ZV9jb25zdGFudHNfbW9kZSA9IG1vZGU7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJleGVjYnVmIHdpdGggdW5rbm93biBjb25zdGFudHM6ICVkXG4iLCBtb2RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGFyZ3MtPmJ1ZmZlcl9jb3VudCA8IDEpIHsKKwkJRFJNX0VSUk9SKCJleGVjYnVmIHdpdGggJWQgYnVmZmVyc1xuIiwgYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGFyZ3MtPm51bV9jbGlwcmVjdHMgIT0gMCkgeworCQlpZiAocmluZyAhPSAmZGV2X3ByaXYtPnJpbmdbUkNTXSkgeworCQkJRFJNX0VSUk9SKCJjbGlwIHJlY3RhbmdsZXMgYXJlIG9ubHkgdmFsaWQgd2l0aCB0aGUgcmVuZGVyIHJpbmdcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQljbGlwcmVjdHMgPSBrbWFsbG9jKGFyZ3MtPm51bV9jbGlwcmVjdHMgKiBzaXplb2YoKmNsaXByZWN0cyksCisJCQkJICAgIEdGUF9LRVJORUwpOworCQlpZiAoY2xpcHJlY3RzID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIHByZV9tdXRleF9lcnI7CisJCX0KKworCQlpZiAoY29weV9mcm9tX3VzZXIoY2xpcHJlY3RzLAorCQkJCSAgICAgKHN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqKSh1aW50cHRyX3QpCisJCQkJICAgICBhcmdzLT5jbGlwcmVjdHNfcHRyLAorCQkJCSAgICAgc2l6ZW9mKCpjbGlwcmVjdHMpKmFyZ3MtPm51bV9jbGlwcmVjdHMpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBwcmVfbXV0ZXhfZXJyOworCQl9CisJfQorCisJcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIHByZV9tdXRleF9lcnI7CisKKwlpZiAoZGV2X3ByaXYtPm1tLnN1c3BlbmRlZCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIHByZV9tdXRleF9lcnI7CisJfQorCisJZWIgPSBlYl9jcmVhdGUoYXJncy0+YnVmZmVyX2NvdW50KTsKKwlpZiAoZWIgPT0gTlVMTCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBwcmVfbXV0ZXhfZXJyOworCX0KKworCS8qIExvb2sgdXAgb2JqZWN0IGhhbmRsZXMgKi8KKwlJTklUX0xJU1RfSEVBRCgmb2JqZWN0cyk7CisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisKKwkJb2JqID0gdG9faW50ZWxfYm8oZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwKKwkJCQkJCQlleGVjW2ldLmhhbmRsZSkpOworCQlpZiAob2JqID09IE5VTEwpIHsKKwkJCURSTV9FUlJPUigiSW52YWxpZCBvYmplY3QgaGFuZGxlICVkIGF0IGluZGV4ICVkXG4iLAorCQkJCSAgIGV4ZWNbaV0uaGFuZGxlLCBpKTsKKwkJCS8qIHByZXZlbnQgZXJyb3IgcGF0aCBmcm9tIHJlYWRpbmcgdW5pbml0aWFsaXplZCBkYXRhICovCisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBlcnI7CisJCX0KKworCQlpZiAoIWxpc3RfZW1wdHkoJm9iai0+ZXhlY19saXN0KSkgeworCQkJRFJNX0VSUk9SKCJPYmplY3QgJXAgW2hhbmRsZSAlZCwgaW5kZXggJWRdIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gb2JqZWN0IGxpc3RcbiIsCisJCQkJICAgb2JqLCBleGVjW2ldLmhhbmRsZSwgaSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnI7CisJCX0KKworCQlsaXN0X2FkZF90YWlsKCZvYmotPmV4ZWNfbGlzdCwgJm9iamVjdHMpOworCQlvYmotPmV4ZWNfaGFuZGxlID0gZXhlY1tpXS5oYW5kbGU7CisJCW9iai0+ZXhlY19lbnRyeSA9ICZleGVjW2ldOworCQllYl9hZGRfb2JqZWN0KGViLCBvYmopOworCX0KKworCS8qIHRha2Ugbm90ZSBvZiB0aGUgYmF0Y2ggYnVmZmVyIGJlZm9yZSB3ZSBtaWdodCByZW9yZGVyIHRoZSBsaXN0cyAqLworCWJhdGNoX29iaiA9IGxpc3RfZW50cnkob2JqZWN0cy5wcmV2LAorCQkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAorCQkJICAgICAgIGV4ZWNfbGlzdCk7CisKKwkvKiBNb3ZlIHRoZSBvYmplY3RzIGVuLW1hc3NlIGludG8gdGhlIEdUVCwgZXZpY3RpbmcgaWYgbmVjZXNzYXJ5LiAqLworCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVzZXJ2ZShyaW5nLCBmaWxlLCAmb2JqZWN0cyk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwkvKiBUaGUgb2JqZWN0cyBhcmUgaW4gdGhlaXIgZmluYWwgbG9jYXRpb25zLCBhcHBseSB0aGUgcmVsb2NhdGlvbnMuICovCisJcmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZShkZXYsIGViLCAmb2JqZWN0cyk7CisJaWYgKHJldCkgeworCQlpZiAocmV0ID09IC1FRkFVTFQpIHsKKwkJCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfc2xvdyhkZXYsIGZpbGUsIHJpbmcsCisJCQkJCQkJCSZvYmplY3RzLCBlYiwKKwkJCQkJCQkJZXhlYywKKwkJCQkJCQkJYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOworCQl9CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwkvKiBTZXQgdGhlIHBlbmRpbmcgcmVhZCBkb21haW5zIGZvciB0aGUgYmF0Y2ggYnVmZmVyIHRvIENPTU1BTkQgKi8KKwlpZiAoYmF0Y2hfb2JqLT5iYXNlLnBlbmRpbmdfd3JpdGVfZG9tYWluKSB7CisJCURSTV9FUlJPUigiQXR0ZW1wdGluZyB0byB1c2Ugc2VsZi1tb2RpZnlpbmcgYmF0Y2ggYnVmZmVyXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCWJhdGNoX29iai0+YmFzZS5wZW5kaW5nX3JlYWRfZG9tYWlucyB8PSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKKworCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfbW92ZV90b19ncHUocmluZywgJm9iamVjdHMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl93YWl0X2Zvcl9mbGlwcyhyaW5nLCAmb2JqZWN0cyk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlzZXFubyA9IGk5MTVfZ2VtX25leHRfcmVxdWVzdF9zZXFubyhkZXYsIHJpbmcpOworCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUy0xOyBpKyspIHsKKwkJaWYgKHNlcW5vIDwgcmluZy0+c3luY19zZXFub1tpXSkgeworCQkJLyogVGhlIEdQVSBjYW4gbm90IGhhbmRsZSBpdHMgc2VtYXBob3JlIHZhbHVlIHdyYXBwaW5nLAorCQkJICogc28gZXZlcnkgYmlsbGlvbiBvciBzbyBleGVjYnVmZmVycywgd2UgbmVlZCB0byBzdGFsbAorCQkJICogdGhlIEdQVSBpbiBvcmRlciB0byByZXNldCB0aGUgY291bnRlcnMuCisJCQkgKi8KKwkJCXJldCA9IGk5MTVfZ3B1X2lkbGUoZGV2KTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnI7CisKKwkJCUJVR19PTihyaW5nLT5zeW5jX3NlcW5vW2ldKTsKKwkJfQorCX0KKworCWV4ZWNfc3RhcnQgPSBiYXRjaF9vYmotPmd0dF9vZmZzZXQgKyBhcmdzLT5iYXRjaF9zdGFydF9vZmZzZXQ7CisJZXhlY19sZW4gPSBhcmdzLT5iYXRjaF9sZW47CisJaWYgKGNsaXByZWN0cykgeworCQlmb3IgKGkgPSAwOyBpIDwgYXJncy0+bnVtX2NsaXByZWN0czsgaSsrKSB7CisJCQlyZXQgPSBpOTE1X2VtaXRfYm94KGRldiwgJmNsaXByZWN0c1tpXSwKKwkJCQkJICAgIGFyZ3MtPkRSMSwgYXJncy0+RFI0KTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnI7CisKKwkJCXJldCA9IHJpbmctPmRpc3BhdGNoX2V4ZWNidWZmZXIocmluZywKKwkJCQkJCQlleGVjX3N0YXJ0LCBleGVjX2xlbik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyOworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gcmluZy0+ZGlzcGF0Y2hfZXhlY2J1ZmZlcihyaW5nLCBleGVjX3N0YXJ0LCBleGVjX2xlbik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlpOTE1X2dlbV9leGVjYnVmZmVyX21vdmVfdG9fYWN0aXZlKCZvYmplY3RzLCByaW5nLCBzZXFubyk7CisJaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZXRpcmVfY29tbWFuZHMoZGV2LCBmaWxlLCByaW5nKTsKKworZXJyOgorCWViX2Rlc3Ryb3koZWIpOworCXdoaWxlICghbGlzdF9lbXB0eSgmb2JqZWN0cykpIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKworCQlvYmogPSBsaXN0X2ZpcnN0X2VudHJ5KCZvYmplY3RzLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKKwkJCQkgICAgICAgZXhlY19saXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmb2JqLT5leGVjX2xpc3QpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwl9CisKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworcHJlX211dGV4X2VycjoKKwlrZnJlZShjbGlwcmVjdHMpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBMZWdhY3kgZXhlY2J1ZmZlciBqdXN0IGNyZWF0ZXMgYW4gZXhlYzIgbGlzdCBmcm9tIHRoZSBvcmlnaW5hbCBleGVjIG9iamVjdAorICogbGlzdCBhcnJheSBhbmQgcGFzc2VzIGl0IHRvIHRoZSByZWFsIGZ1bmN0aW9uLgorICovCitpbnQKK2k5MTVfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlYzI7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdCAqZXhlY19saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlYzJfbGlzdCA9IE5VTEw7CisJaW50IHJldCwgaTsKKworI2lmIFdBVENIX0VYRUMKKwlEUk1fSU5GTygiYnVmZmVyc19wdHIgJWQgYnVmZmVyX2NvdW50ICVkIGxlbiAlMDh4XG4iLAorCQkgIChpbnQpIGFyZ3MtPmJ1ZmZlcnNfcHRyLCBhcmdzLT5idWZmZXJfY291bnQsIGFyZ3MtPmJhdGNoX2xlbik7CisjZW5kaWYKKworCWlmIChhcmdzLT5idWZmZXJfY291bnQgPCAxKSB7CisJCURSTV9FUlJPUigiZXhlY2J1ZiB3aXRoICVkIGJ1ZmZlcnNcbiIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENvcHkgaW4gdGhlIGV4ZWMgbGlzdCBmcm9tIHVzZXJsYW5kICovCisJZXhlY19saXN0ID0gZHJtX21hbGxvY19hYihzaXplb2YoKmV4ZWNfbGlzdCksIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJZXhlYzJfbGlzdCA9IGRybV9tYWxsb2NfYWIoc2l6ZW9mKCpleGVjMl9saXN0KSwgYXJncy0+YnVmZmVyX2NvdW50KTsKKwlpZiAoZXhlY19saXN0ID09IE5VTEwgfHwgZXhlYzJfbGlzdCA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIGV4ZWMgbGlzdCBmb3IgJWQgYnVmZmVyc1xuIiwKKwkJCSAgYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJZHJtX2ZyZWVfbGFyZ2UoZXhlY19saXN0KTsKKwkJZHJtX2ZyZWVfbGFyZ2UoZXhlYzJfbGlzdCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXQgPSBjb3B5X2Zyb21fdXNlcihleGVjX2xpc3QsCisJCQkgICAgIChzdHJ1Y3QgZHJtX2k5MTVfcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKKwkJCSAgICAgKHVpbnRwdHJfdCkgYXJncy0+YnVmZmVyc19wdHIsCisJCQkgICAgIHNpemVvZigqZXhlY19saXN0KSAqIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJaWYgKHJldCAhPSAwKSB7CisJCURSTV9FUlJPUigiY29weSAlZCBleGVjIGVudHJpZXMgZmFpbGVkICVkXG4iLAorCQkJICBhcmdzLT5idWZmZXJfY291bnQsIHJldCk7CisJCWRybV9mcmVlX2xhcmdlKGV4ZWNfbGlzdCk7CisJCWRybV9mcmVlX2xhcmdlKGV4ZWMyX2xpc3QpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJncy0+YnVmZmVyX2NvdW50OyBpKyspIHsKKwkJZXhlYzJfbGlzdFtpXS5oYW5kbGUgPSBleGVjX2xpc3RbaV0uaGFuZGxlOworCQlleGVjMl9saXN0W2ldLnJlbG9jYXRpb25fY291bnQgPSBleGVjX2xpc3RbaV0ucmVsb2NhdGlvbl9jb3VudDsKKwkJZXhlYzJfbGlzdFtpXS5yZWxvY3NfcHRyID0gZXhlY19saXN0W2ldLnJlbG9jc19wdHI7CisJCWV4ZWMyX2xpc3RbaV0uYWxpZ25tZW50ID0gZXhlY19saXN0W2ldLmFsaWdubWVudDsKKwkJZXhlYzJfbGlzdFtpXS5vZmZzZXQgPSBleGVjX2xpc3RbaV0ub2Zmc2V0OworCQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA0KQorCQkJZXhlYzJfbGlzdFtpXS5mbGFncyA9IEVYRUNfT0JKRUNUX05FRURTX0ZFTkNFOworCQllbHNlCisJCQlleGVjMl9saXN0W2ldLmZsYWdzID0gMDsKKwl9CisKKwlleGVjMi5idWZmZXJzX3B0ciA9IGFyZ3MtPmJ1ZmZlcnNfcHRyOworCWV4ZWMyLmJ1ZmZlcl9jb3VudCA9IGFyZ3MtPmJ1ZmZlcl9jb3VudDsKKwlleGVjMi5iYXRjaF9zdGFydF9vZmZzZXQgPSBhcmdzLT5iYXRjaF9zdGFydF9vZmZzZXQ7CisJZXhlYzIuYmF0Y2hfbGVuID0gYXJncy0+YmF0Y2hfbGVuOworCWV4ZWMyLkRSMSA9IGFyZ3MtPkRSMTsKKwlleGVjMi5EUjQgPSBhcmdzLT5EUjQ7CisJZXhlYzIubnVtX2NsaXByZWN0cyA9IGFyZ3MtPm51bV9jbGlwcmVjdHM7CisJZXhlYzIuY2xpcHJlY3RzX3B0ciA9IGFyZ3MtPmNsaXByZWN0c19wdHI7CisJZXhlYzIuZmxhZ3MgPSBJOTE1X0VYRUNfUkVOREVSOworCisJcmV0ID0gaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihkZXYsIGRhdGEsIGZpbGUsICZleGVjMiwgZXhlYzJfbGlzdCk7CisJaWYgKCFyZXQpIHsKKwkJLyogQ29weSB0aGUgbmV3IGJ1ZmZlciBvZmZzZXRzIGJhY2sgdG8gdGhlIHVzZXIncyBleGVjIGxpc3QuICovCisJCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykKKwkJCWV4ZWNfbGlzdFtpXS5vZmZzZXQgPSBleGVjMl9saXN0W2ldLm9mZnNldDsKKwkJLyogLi4uIGFuZCBiYWNrIG91dCB0byB1c2Vyc3BhY2UgKi8KKwkJcmV0ID0gY29weV90b191c2VyKChzdHJ1Y3QgZHJtX2k5MTVfcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKKwkJCQkgICAodWludHB0cl90KSBhcmdzLT5idWZmZXJzX3B0ciwKKwkJCQkgICBleGVjX2xpc3QsCisJCQkJICAgc2l6ZW9mKCpleGVjX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJaWYgKHJldCkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNvcHkgJWQgZXhlYyBlbnRyaWVzICIKKwkJCQkgICJiYWNrIHRvIHVzZXIgKCVkKVxuIiwKKwkJCQkgIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgcmV0KTsKKwkJfQorCX0KKworCWRybV9mcmVlX2xhcmdlKGV4ZWNfbGlzdCk7CisJZHJtX2ZyZWVfbGFyZ2UoZXhlYzJfbGlzdCk7CisJcmV0dXJuIHJldDsKK30KKworaW50CitpOTE1X2dlbV9leGVjYnVmZmVyMihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlYzJfbGlzdCA9IE5VTEw7CisJaW50IHJldDsKKworI2lmIFdBVENIX0VYRUMKKwlEUk1fSU5GTygiYnVmZmVyc19wdHIgJWQgYnVmZmVyX2NvdW50ICVkIGxlbiAlMDh4XG4iLAorCQkgIChpbnQpIGFyZ3MtPmJ1ZmZlcnNfcHRyLCBhcmdzLT5idWZmZXJfY291bnQsIGFyZ3MtPmJhdGNoX2xlbik7CisjZW5kaWYKKworCWlmIChhcmdzLT5idWZmZXJfY291bnQgPCAxKSB7CisJCURSTV9FUlJPUigiZXhlY2J1ZjIgd2l0aCAlZCBidWZmZXJzXG4iLCBhcmdzLT5idWZmZXJfY291bnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlleGVjMl9saXN0ID0gZHJtX21hbGxvY19hYihzaXplb2YoKmV4ZWMyX2xpc3QpLCBhcmdzLT5idWZmZXJfY291bnQpOworCWlmIChleGVjMl9saXN0ID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXhlYyBsaXN0IGZvciAlZCBidWZmZXJzXG4iLAorCQkJICBhcmdzLT5idWZmZXJfY291bnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0ID0gY29weV9mcm9tX3VzZXIoZXhlYzJfbGlzdCwKKwkJCSAgICAgKHN0cnVjdCBkcm1faTkxNV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQorCQkJICAgICAodWludHB0cl90KSBhcmdzLT5idWZmZXJzX3B0ciwKKwkJCSAgICAgc2l6ZW9mKCpleGVjMl9saXN0KSAqIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJaWYgKHJldCAhPSAwKSB7CisJCURSTV9FUlJPUigiY29weSAlZCBleGVjIGVudHJpZXMgZmFpbGVkICVkXG4iLAorCQkJICBhcmdzLT5idWZmZXJfY291bnQsIHJldCk7CisJCWRybV9mcmVlX2xhcmdlKGV4ZWMyX2xpc3QpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXQgPSBpOTE1X2dlbV9kb19leGVjYnVmZmVyKGRldiwgZGF0YSwgZmlsZSwgYXJncywgZXhlYzJfbGlzdCk7CisJaWYgKCFyZXQpIHsKKwkJLyogQ29weSB0aGUgbmV3IGJ1ZmZlciBvZmZzZXRzIGJhY2sgdG8gdGhlIHVzZXIncyBleGVjIGxpc3QuICovCisJCXJldCA9IGNvcHlfdG9fdXNlcigoc3RydWN0IGRybV9pOTE1X3JlbG9jYXRpb25fZW50cnkgX191c2VyICopCisJCQkJICAgKHVpbnRwdHJfdCkgYXJncy0+YnVmZmVyc19wdHIsCisJCQkJICAgZXhlYzJfbGlzdCwKKwkJCQkgICBzaXplb2YoKmV4ZWMyX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJaWYgKHJldCkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNvcHkgJWQgZXhlYyBlbnRyaWVzICIKKwkJCQkgICJiYWNrIHRvIHVzZXIgKCVkKVxuIiwKKwkJCQkgIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgcmV0KTsKKwkJfQorCX0KKworCWRybV9mcmVlX2xhcmdlKGV4ZWMyX2xpc3QpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNDMzYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTAgRGFuaWVsIFZldHRlcgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgorI2luY2x1ZGUgImludGVsX2Rydi5oIgorCit2b2lkIGk5MTVfZ2VtX3Jlc3RvcmVfZ3R0X21hcHBpbmdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZkZXZfcHJpdi0+bW0uZ3R0X2xpc3QsIGd0dF9saXN0KSB7CisJCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7CisKKwkJaWYgKGRldl9wcml2LT5tbS5ndHQtPm5lZWRzX2RtYXIpIHsKKwkJCUJVR19PTighb2JqLT5zZ19saXN0KTsKKworCQkJaW50ZWxfZ3R0X2luc2VydF9zZ19lbnRyaWVzKG9iai0+c2dfbGlzdCwKKwkJCQkJCSAgICBvYmotPm51bV9zZywKKwkJCQkJCSAgICBvYmotPmd0dF9zcGFjZS0+c3RhcnQKKwkJCQkJCQk+PiBQQUdFX1NISUZULAorCQkJCQkJICAgIG9iai0+YWdwX3R5cGUpOworCQl9IGVsc2UKKwkJCWludGVsX2d0dF9pbnNlcnRfcGFnZXMob2JqLT5ndHRfc3BhY2UtPnN0YXJ0CisJCQkJCQkgICA+PiBQQUdFX1NISUZULAorCQkJCQkgICAgICAgb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVCwKKwkJCQkJICAgICAgIG9iai0+cGFnZXMsCisJCQkJCSAgICAgICBvYmotPmFncF90eXBlKTsKKwl9CisKKwlpbnRlbF9ndHRfY2hpcHNldF9mbHVzaCgpOworfQorCitpbnQgaTkxNV9nZW1fZ3R0X2JpbmRfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJaWYgKGRldl9wcml2LT5tbS5ndHQtPm5lZWRzX2RtYXIpIHsKKwkJcmV0ID0gaW50ZWxfZ3R0X21hcF9tZW1vcnkob2JqLT5wYWdlcywKKwkJCQkJICAgb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVCwKKwkJCQkJICAgJm9iai0+c2dfbGlzdCwKKwkJCQkJICAgJm9iai0+bnVtX3NnKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKworCQlpbnRlbF9ndHRfaW5zZXJ0X3NnX2VudHJpZXMob2JqLT5zZ19saXN0LAorCQkJCQkgICAgb2JqLT5udW1fc2csCisJCQkJCSAgICBvYmotPmd0dF9zcGFjZS0+c3RhcnQgPj4gUEFHRV9TSElGVCwKKwkJCQkJICAgIG9iai0+YWdwX3R5cGUpOworCX0gZWxzZQorCQlpbnRlbF9ndHRfaW5zZXJ0X3BhZ2VzKG9iai0+Z3R0X3NwYWNlLT5zdGFydCA+PiBQQUdFX1NISUZULAorCQkJCSAgICAgICBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZULAorCQkJCSAgICAgICBvYmotPnBhZ2VzLAorCQkJCSAgICAgICBvYmotPmFncF90eXBlKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGk5MTVfZ2VtX2d0dF91bmJpbmRfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJaW50ZWxfZ3R0X2NsZWFyX3JhbmdlKG9iai0+Z3R0X3NwYWNlLT5zdGFydCA+PiBQQUdFX1NISUZULAorCQkJICAgICAgb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVCk7CisKKwlpZiAob2JqLT5zZ19saXN0KSB7CisJCWludGVsX2d0dF91bm1hcF9tZW1vcnkob2JqLT5zZ19saXN0LCBvYmotPm51bV9zZyk7CisJCW9iai0+c2dfbGlzdCA9IE5VTEw7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwppbmRleCBhZjM1MmRlLi4yMmEzMmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiB9CiAKIC8qIENoZWNrIHBpdGNoIGNvbnN0cmlhbnRzIGZvciBhbGwgY2hpcHMgJiB0aWxpbmcgZm9ybWF0cyAqLwotYm9vbAorc3RhdGljIGJvb2wKIGk5MTVfdGlsaW5nX29rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBzdHJpZGUsIGludCBzaXplLCBpbnQgdGlsaW5nX21vZGUpCiB7CiAJaW50IHRpbGVfd2lkdGg7CkBAIC0yMzIsMzIgKzIzMiw0NCBAQAogCXJldHVybiB0cnVlOwogfQogCi1ib29sCi1pOTE1X2dlbV9vYmplY3RfZmVuY2Vfb2Zmc2V0X29rKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgdGlsaW5nX21vZGUpCisvKiBJcyB0aGUgY3VycmVudCBHVFQgYWxsb2NhdGlvbiB2YWxpZCBmb3IgdGhlIGNoYW5nZSBpbiB0aWxpbmc/ICovCitzdGF0aWMgYm9vbAoraTkxNV9nZW1fb2JqZWN0X2ZlbmNlX29rKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGludCB0aWxpbmdfbW9kZSkKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKLQotCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpCi0JCXJldHVybiB0cnVlOworCXUzMiBzaXplOwogCiAJaWYgKHRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUpCiAJCXJldHVybiB0cnVlOwogCi0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQpCisJaWYgKElOVEVMX0lORk8ob2JqLT5iYXNlLmRldiktPmdlbiA+PSA0KQogCQlyZXR1cm4gdHJ1ZTsKIAotCWlmIChvYmpfcHJpdi0+Z3R0X29mZnNldCAmIChvYmotPnNpemUgLSAxKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKElTX0dFTjMoZGV2KSkgewotCQlpZiAob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiB+STkxNV9GRU5DRV9TVEFSVF9NQVNLKQorCWlmIChJTlRFTF9JTkZPKG9iai0+YmFzZS5kZXYpLT5nZW4gPT0gMykgeworCQlpZiAob2JqLT5ndHRfb2Zmc2V0ICYgfkk5MTVfRkVOQ0VfU1RBUlRfTUFTSykKIAkJCXJldHVybiBmYWxzZTsKIAl9IGVsc2UgewotCQlpZiAob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiB+STgzMF9GRU5DRV9TVEFSVF9NQVNLKQorCQlpZiAob2JqLT5ndHRfb2Zmc2V0ICYgfkk4MzBfRkVOQ0VfU1RBUlRfTUFTSykKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAKKwkvKgorCSAqIFByZXZpb3VzIGNoaXBzIG5lZWQgdG8gYmUgYWxpZ25lZCB0byB0aGUgc2l6ZSBvZiB0aGUgc21hbGxlc3QKKwkgKiBmZW5jZSByZWdpc3RlciB0aGF0IGNhbiBjb250YWluIHRoZSBvYmplY3QuCisJICovCisJaWYgKElOVEVMX0lORk8ob2JqLT5iYXNlLmRldiktPmdlbiA9PSAzKQorCQlzaXplID0gMTAyNCoxMDI0OworCWVsc2UKKwkJc2l6ZSA9IDUxMioxMDI0OworCisJd2hpbGUgKHNpemUgPCBvYmotPmJhc2Uuc2l6ZSkKKwkJc2l6ZSA8PD0gMTsKKworCWlmIChvYmotPmd0dF9zcGFjZS0+c2l6ZSAhPSBzaXplKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAob2JqLT5ndHRfb2Zmc2V0ICYgKHNpemUgLSAxKSkKKwkJcmV0dXJuIGZhbHNlOworCiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI2NywzMCArMjc5LDI5IEBACiAgKi8KIGludAogaTkxNV9nZW1fc2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKKwkJICAgc3RydWN0IGRybV9maWxlICpmaWxlKQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X3RpbGluZyAqYXJncyA9IGRhdGE7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJaW50IHJldDsKIAogCXJldCA9IGk5MTVfZ2VtX2NoZWNrX2lzX3dlZGdlZChkZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJb2JqID0gdG9faW50ZWxfYm8oZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgYXJncy0+aGFuZGxlKSk7CiAJaWYgKG9iaiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0VOVDsKLQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CiAKLQlpZiAoIWk5MTVfdGlsaW5nX29rKGRldiwgYXJncy0+c3RyaWRlLCBvYmotPnNpemUsIGFyZ3MtPnRpbGluZ19tb2RlKSkgewotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOworCWlmICghaTkxNV90aWxpbmdfb2soZGV2LAorCQkJICAgIGFyZ3MtPnN0cmlkZSwgb2JqLT5iYXNlLnNpemUsIGFyZ3MtPnRpbGluZ19tb2RlKSkgeworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmb2JqLT5iYXNlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKG9ial9wcml2LT5waW5fY291bnQpIHsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKKwlpZiAob2JqLT5waW5fY291bnQpIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm9iai0+YmFzZSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0zMjQsMzQgKzMzNSwyOCBAQAogCX0KIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlpZiAoYXJncy0+dGlsaW5nX21vZGUgIT0gb2JqX3ByaXYtPnRpbGluZ19tb2RlIHx8Ci0JICAgIGFyZ3MtPnN0cmlkZSAhPSBvYmpfcHJpdi0+c3RyaWRlKSB7CisJaWYgKGFyZ3MtPnRpbGluZ19tb2RlICE9IG9iai0+dGlsaW5nX21vZGUgfHwKKwkgICAgYXJncy0+c3RyaWRlICE9IG9iai0+c3RyaWRlKSB7CiAJCS8qIFdlIG5lZWQgdG8gcmViaW5kIHRoZSBvYmplY3QgaWYgaXRzIGN1cnJlbnQgYWxsb2NhdGlvbgogCQkgKiBubyBsb25nZXIgbWVldHMgdGhlIGFsaWdubWVudCByZXN0cmljdGlvbnMgZm9yIGl0cyBuZXcKIAkJICogdGlsaW5nIG1vZGUuIE90aGVyd2lzZSB3ZSBjYW4ganVzdCBsZWF2ZSBpdCBhbG9uZSwgYnV0CiAJCSAqIG5lZWQgdG8gZW5zdXJlIHRoYXQgYW55IGZlbmNlIHJlZ2lzdGVyIGlzIGNsZWFyZWQuCiAJCSAqLwotCQlpZiAoIWk5MTVfZ2VtX29iamVjdF9mZW5jZV9vZmZzZXRfb2sob2JqLCBhcmdzLT50aWxpbmdfbW9kZSkpCi0JCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaik7Ci0JCWVsc2UgaWYgKG9ial9wcml2LT5mZW5jZV9yZWcgIT0gSTkxNV9GRU5DRV9SRUdfTk9ORSkKLQkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2VfcmVnKG9iaiwgdHJ1ZSk7Ci0JCWVsc2UKLQkJCWk5MTVfZ2VtX3JlbGVhc2VfbW1hcChvYmopOworCQlpOTE1X2dlbV9yZWxlYXNlX21tYXAob2JqKTsKIAotCQlpZiAocmV0ICE9IDApIHsKLQkJCWFyZ3MtPnRpbGluZ19tb2RlID0gb2JqX3ByaXYtPnRpbGluZ19tb2RlOwotCQkJYXJncy0+c3RyaWRlID0gb2JqX3ByaXYtPnN0cmlkZTsKLQkJCWdvdG8gZXJyOwotCQl9CisJCW9iai0+bWFwX2FuZF9mZW5jZWFibGUgPQorCQkJb2JqLT5ndHRfc3BhY2UgPT0gTlVMTCB8fAorCQkJKG9iai0+Z3R0X29mZnNldCArIG9iai0+YmFzZS5zaXplIDw9IGRldl9wcml2LT5tbS5ndHRfbWFwcGFibGVfZW5kICYmCisJCQkgaTkxNV9nZW1fb2JqZWN0X2ZlbmNlX29rKG9iaiwgYXJncy0+dGlsaW5nX21vZGUpKTsKIAotCQlvYmpfcHJpdi0+dGlsaW5nX21vZGUgPSBhcmdzLT50aWxpbmdfbW9kZTsKLQkJb2JqX3ByaXYtPnN0cmlkZSA9IGFyZ3MtPnN0cmlkZTsKKwkJb2JqLT50aWxpbmdfY2hhbmdlZCA9IHRydWU7CisJCW9iai0+dGlsaW5nX21vZGUgPSBhcmdzLT50aWxpbmdfbW9kZTsKKwkJb2JqLT5zdHJpZGUgPSBhcmdzLT5zdHJpZGU7CiAJfQotZXJyOgotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTM1OSwyMiArMzY0LDIwIEBACiAgKi8KIGludAogaTkxNV9nZW1fZ2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKKwkJICAgc3RydWN0IGRybV9maWxlICpmaWxlKQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fZ2V0X3RpbGluZyAqYXJncyA9IGRhdGE7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAKLQlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJb2JqID0gdG9faW50ZWxfYm8oZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgYXJncy0+aGFuZGxlKSk7CiAJaWYgKG9iaiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0VOVDsKLQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlhcmdzLT50aWxpbmdfbW9kZSA9IG9ial9wcml2LT50aWxpbmdfbW9kZTsKLQlzd2l0Y2ggKG9ial9wcml2LT50aWxpbmdfbW9kZSkgeworCWFyZ3MtPnRpbGluZ19tb2RlID0gb2JqLT50aWxpbmdfbW9kZTsKKwlzd2l0Y2ggKG9iai0+dGlsaW5nX21vZGUpIHsKIAljYXNlIEk5MTVfVElMSU5HX1g6CiAJCWFyZ3MtPnN3aXp6bGVfbW9kZSA9IGRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3g7CiAJCWJyZWFrOwpAQCAtMzk0LDcgKzM5Nyw3IEBACiAJaWYgKGFyZ3MtPnN3aXp6bGVfbW9kZSA9PSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMF8xNykKIAkJYXJncy0+c3dpenpsZV9tb2RlID0gSTkxNV9CSVRfNl9TV0laWkxFXzlfMTA7CiAKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC00MjQsNDYgKzQyNyw0NCBAQAogfQogCiB2b2lkCi1pOTE1X2dlbV9vYmplY3RfZG9fYml0XzE3X3N3aXp6bGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCitpOTE1X2dlbV9vYmplY3RfZG9fYml0XzE3X3N3aXp6bGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKLQlpbnQgcGFnZV9jb3VudCA9IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOworCWludCBwYWdlX2NvdW50ID0gb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsKIAlpbnQgaTsKIAogCWlmIChkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV94ICE9IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzE3KQogCQlyZXR1cm47CiAKLQlpZiAob2JqX3ByaXYtPmJpdF8xNyA9PSBOVUxMKQorCWlmIChvYmotPmJpdF8xNyA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZV9jb3VudDsgaSsrKSB7Ci0JCWNoYXIgbmV3X2JpdF8xNyA9IHBhZ2VfdG9fcGh5cyhvYmpfcHJpdi0+cGFnZXNbaV0pID4+IDE3OworCQljaGFyIG5ld19iaXRfMTcgPSBwYWdlX3RvX3BoeXMob2JqLT5wYWdlc1tpXSkgPj4gMTc7CiAJCWlmICgobmV3X2JpdF8xNyAmIDB4MSkgIT0KLQkJICAgICh0ZXN0X2JpdChpLCBvYmpfcHJpdi0+Yml0XzE3KSAhPSAwKSkgewotCQkJaTkxNV9nZW1fc3dpenpsZV9wYWdlKG9ial9wcml2LT5wYWdlc1tpXSk7Ci0JCQlzZXRfcGFnZV9kaXJ0eShvYmpfcHJpdi0+cGFnZXNbaV0pOworCQkgICAgKHRlc3RfYml0KGksIG9iai0+Yml0XzE3KSAhPSAwKSkgeworCQkJaTkxNV9nZW1fc3dpenpsZV9wYWdlKG9iai0+cGFnZXNbaV0pOworCQkJc2V0X3BhZ2VfZGlydHkob2JqLT5wYWdlc1tpXSk7CiAJCX0KIAl9CiB9CiAKIHZvaWQKLWk5MTVfZ2VtX29iamVjdF9zYXZlX2JpdF8xN19zd2l6emxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoraTkxNV9nZW1fb2JqZWN0X3NhdmVfYml0XzE3X3N3aXp6bGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKLQlpbnQgcGFnZV9jb3VudCA9IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOworCWludCBwYWdlX2NvdW50ID0gb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsKIAlpbnQgaTsKIAogCWlmIChkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV94ICE9IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzE3KQogCQlyZXR1cm47CiAKLQlpZiAob2JqX3ByaXYtPmJpdF8xNyA9PSBOVUxMKSB7Ci0JCW9ial9wcml2LT5iaXRfMTcgPSBrbWFsbG9jKEJJVFNfVE9fTE9OR1MocGFnZV9jb3VudCkgKgorCWlmIChvYmotPmJpdF8xNyA9PSBOVUxMKSB7CisJCW9iai0+Yml0XzE3ID0ga21hbGxvYyhCSVRTX1RPX0xPTkdTKHBhZ2VfY291bnQpICoKIAkJCQkJICAgc2l6ZW9mKGxvbmcpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKG9ial9wcml2LT5iaXRfMTcgPT0gTlVMTCkgeworCQlpZiAob2JqLT5iaXRfMTcgPT0gTlVMTCkgewogCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBiaXQgMTcgIgogCQkJCSAgInJlY29yZFxuIik7CiAJCQlyZXR1cm47CkBAIC00NzEsOSArNDcyLDkgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZV9jb3VudDsgaSsrKSB7Ci0JCWlmIChwYWdlX3RvX3BoeXMob2JqX3ByaXYtPnBhZ2VzW2ldKSAmICgxIDw8IDE3KSkKLQkJCV9fc2V0X2JpdChpLCBvYmpfcHJpdi0+Yml0XzE3KTsKKwkJaWYgKHBhZ2VfdG9fcGh5cyhvYmotPnBhZ2VzW2ldKSAmICgxIDw8IDE3KSkKKwkJCV9fc2V0X2JpdChpLCBvYmotPmJpdF8xNyk7CiAJCWVsc2UKLQkJCV9fY2xlYXJfYml0KGksIG9ial9wcml2LT5iaXRfMTcpOworCQkJX19jbGVhcl9iaXQoaSwgb2JqLT5iaXRfMTcpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IDcyOWZkMGMuLmU0MThlOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtNjQsNjQgKzY0LDI0IEBACiAjZGVmaW5lIERSTV9JOTE1X1ZCTEFOS19QSVBFX0FMTAkoRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSB8IFwKIAkJCQkJIERSTV9JOTE1X1ZCTEFOS19QSVBFX0IpCiAKLXZvaWQKLWlyb25sYWtlX2VuYWJsZV9ncmFwaGljc19pcnEoZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIG1hc2spCi17Ci0JaWYgKChkZXZfcHJpdi0+Z3RfaXJxX21hc2tfcmVnICYgbWFzaykgIT0gMCkgewotCQlkZXZfcHJpdi0+Z3RfaXJxX21hc2tfcmVnICY9IH5tYXNrOwotCQlJOTE1X1dSSVRFKEdUSU1SLCBkZXZfcHJpdi0+Z3RfaXJxX21hc2tfcmVnKTsKLQkJKHZvaWQpIEk5MTVfUkVBRChHVElNUik7Ci0JfQotfQotCi12b2lkCi1pcm9ubGFrZV9kaXNhYmxlX2dyYXBoaWNzX2lycShkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgbWFzaykKLXsKLQlpZiAoKGRldl9wcml2LT5ndF9pcnFfbWFza19yZWcgJiBtYXNrKSAhPSBtYXNrKSB7Ci0JCWRldl9wcml2LT5ndF9pcnFfbWFza19yZWcgfD0gbWFzazsKLQkJSTkxNV9XUklURShHVElNUiwgZGV2X3ByaXYtPmd0X2lycV9tYXNrX3JlZyk7Ci0JCSh2b2lkKSBJOTE1X1JFQUQoR1RJTVIpOwotCX0KLX0KLQogLyogRm9yIGRpc3BsYXkgaG90cGx1ZyBpbnRlcnJ1cHQgKi8KIHN0YXRpYyB2b2lkCiBpcm9ubGFrZV9lbmFibGVfZGlzcGxheV9pcnEoZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIG1hc2spCiB7Ci0JaWYgKChkZXZfcHJpdi0+aXJxX21hc2tfcmVnICYgbWFzaykgIT0gMCkgewotCQlkZXZfcHJpdi0+aXJxX21hc2tfcmVnICY9IH5tYXNrOwotCQlJOTE1X1dSSVRFKERFSU1SLCBkZXZfcHJpdi0+aXJxX21hc2tfcmVnKTsKLQkJKHZvaWQpIEk5MTVfUkVBRChERUlNUik7CisJaWYgKChkZXZfcHJpdi0+aXJxX21hc2sgJiBtYXNrKSAhPSAwKSB7CisJCWRldl9wcml2LT5pcnFfbWFzayAmPSB+bWFzazsKKwkJSTkxNV9XUklURShERUlNUiwgZGV2X3ByaXYtPmlycV9tYXNrKTsKKwkJUE9TVElOR19SRUFEKERFSU1SKTsKIAl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogaXJvbmxha2VfZGlzYWJsZV9kaXNwbGF5X2lycShkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgbWFzaykKIHsKLQlpZiAoKGRldl9wcml2LT5pcnFfbWFza19yZWcgJiBtYXNrKSAhPSBtYXNrKSB7Ci0JCWRldl9wcml2LT5pcnFfbWFza19yZWcgfD0gbWFzazsKLQkJSTkxNV9XUklURShERUlNUiwgZGV2X3ByaXYtPmlycV9tYXNrX3JlZyk7Ci0JCSh2b2lkKSBJOTE1X1JFQUQoREVJTVIpOwotCX0KLX0KLQotdm9pZAotaTkxNV9lbmFibGVfaXJxKGRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBtYXNrKQotewotCWlmICgoZGV2X3ByaXYtPmlycV9tYXNrX3JlZyAmIG1hc2spICE9IDApIHsKLQkJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyAmPSB+bWFzazsKLQkJSTkxNV9XUklURShJTVIsIGRldl9wcml2LT5pcnFfbWFza19yZWcpOwotCQkodm9pZCkgSTkxNV9SRUFEKElNUik7Ci0JfQotfQotCi12b2lkCi1pOTE1X2Rpc2FibGVfaXJxKGRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBtYXNrKQotewotCWlmICgoZGV2X3ByaXYtPmlycV9tYXNrX3JlZyAmIG1hc2spICE9IG1hc2spIHsKLQkJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyB8PSBtYXNrOwotCQlJOTE1X1dSSVRFKElNUiwgZGV2X3ByaXYtPmlycV9tYXNrX3JlZyk7Ci0JCSh2b2lkKSBJOTE1X1JFQUQoSU1SKTsKKwlpZiAoKGRldl9wcml2LT5pcnFfbWFzayAmIG1hc2spICE9IG1hc2spIHsKKwkJZGV2X3ByaXYtPmlycV9tYXNrIHw9IG1hc2s7CisJCUk5MTVfV1JJVEUoREVJTVIsIGRldl9wcml2LT5pcnFfbWFzayk7CisJCVBPU1RJTkdfUkVBRChERUlNUik7CiAJfQogfQogCkBAIC0xNDQsNyArMTA0LDcgQEAKIAkJZGV2X3ByaXYtPnBpcGVzdGF0W3BpcGVdIHw9IG1hc2s7CiAJCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0LCBjbGVhciBhbnkgcGVuZGluZyBzdGF0dXMgKi8KIAkJSTkxNV9XUklURShyZWcsIGRldl9wcml2LT5waXBlc3RhdFtwaXBlXSB8IChtYXNrID4+IDE2KSk7Ci0JCSh2b2lkKSBJOTE1X1JFQUQocmVnKTsKKwkJUE9TVElOR19SRUFEKHJlZyk7CiAJfQogfQogCkBAIC0xNTYsMTYgKzExNiwxOSBAQAogCiAJCWRldl9wcml2LT5waXBlc3RhdFtwaXBlXSAmPSB+bWFzazsKIAkJSTkxNV9XUklURShyZWcsIGRldl9wcml2LT5waXBlc3RhdFtwaXBlXSk7Ci0JCSh2b2lkKSBJOTE1X1JFQUQocmVnKTsKKwkJUE9TVElOR19SRUFEKHJlZyk7CiAJfQogfQogCiAvKioKICAqIGludGVsX2VuYWJsZV9hc2xlIC0gZW5hYmxlIEFTTEUgaW50ZXJydXB0IGZvciBPcFJlZ2lvbgogICovCi12b2lkIGludGVsX2VuYWJsZV9hc2xlIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQordm9pZCBpbnRlbF9lbmFibGVfYXNsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKIAogCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCWlyb25sYWtlX2VuYWJsZV9kaXNwbGF5X2lycShkZXZfcHJpdiwgREVfR1NFKTsKQEAgLTE3Niw2ICsxMzksOCBAQAogCQkJaTkxNV9lbmFibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDAsCiAJCQkJCSAgICAgUElQRV9MRUdBQ1lfQkxDX0VWRU5UX0VOQUJMRSk7CiAJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CiB9CiAKIC8qKgpAQCAtMjQzLDYgKzIwOCw5MiBAQAogCXJldHVybiBJOTE1X1JFQUQocmVnKTsKIH0KIAoraW50IGk5MTVfZ2V0X2NydGNfc2Nhbm91dHBvcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSwKKwkJCSAgICAgaW50ICp2cG9zLCBpbnQgKmhwb3MpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgdmJsID0gMCwgcG9zaXRpb24gPSAwOworCWludCB2Ymxfc3RhcnQsIHZibF9lbmQsIGh0b3RhbCwgdnRvdGFsOworCWJvb2wgaW5fdmJsID0gdHJ1ZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghaTkxNV9waXBlX2VuYWJsZWQoZGV2LCBwaXBlKSkgeworCQlEUk1fREVCVUdfRFJJVkVSKCJ0cnlpbmcgdG8gZ2V0IHNjYW5vdXRwb3MgZm9yIGRpc2FibGVkICIKKwkJCQkJInBpcGUgJWRcbiIsIHBpcGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBHZXQgdnRvdGFsLiAqLworCXZ0b3RhbCA9IDEgKyAoKEk5MTVfUkVBRChWVE9UQUwocGlwZSkpID4+IDE2KSAmIDB4MWZmZik7CisKKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkgeworCQkvKiBObyBvYnZpb3VzIHBpeGVsY291bnQgcmVnaXN0ZXIuIE9ubHkgcXVlcnkgdmVydGljYWwKKwkJICogc2Nhbm91dCBwb3NpdGlvbiBmcm9tIERpc3BsYXkgc2NhbiBsaW5lIHJlZ2lzdGVyLgorCQkgKi8KKwkJcG9zaXRpb24gPSBJOTE1X1JFQUQoUElQRURTTChwaXBlKSk7CisKKwkJLyogRGVjb2RlIGludG8gdmVydGljYWwgc2Nhbm91dCBwb3NpdGlvbi4gRG9uJ3QgaGF2ZQorCQkgKiBob3Jpem9udGFsIHNjYW5vdXQgcG9zaXRpb24uCisJCSAqLworCQkqdnBvcyA9IHBvc2l0aW9uICYgMHgxZmZmOworCQkqaHBvcyA9IDA7CisJfSBlbHNlIHsKKwkJLyogSGF2ZSBhY2Nlc3MgdG8gcGl4ZWxjb3VudCBzaW5jZSBzdGFydCBvZiBmcmFtZS4KKwkJICogV2UgY2FuIHNwbGl0IHRoaXMgaW50byB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbAorCQkgKiBzY2Fub3V0IHBvc2l0aW9uLgorCQkgKi8KKwkJcG9zaXRpb24gPSAoSTkxNV9SRUFEKFBJUEVGUkFNRVBJWEVMKHBpcGUpKSAmIFBJUEVfUElYRUxfTUFTSykgPj4gUElQRV9QSVhFTF9TSElGVDsKKworCQlodG90YWwgPSAxICsgKChJOTE1X1JFQUQoSFRPVEFMKHBpcGUpKSA+PiAxNikgJiAweDFmZmYpOworCQkqdnBvcyA9IHBvc2l0aW9uIC8gaHRvdGFsOworCQkqaHBvcyA9IHBvc2l0aW9uIC0gKCp2cG9zICogaHRvdGFsKTsKKwl9CisKKwkvKiBRdWVyeSB2YmxhbmsgYXJlYS4gKi8KKwl2YmwgPSBJOTE1X1JFQUQoVkJMQU5LKHBpcGUpKTsKKworCS8qIFRlc3QgcG9zaXRpb24gYWdhaW5zdCB2YmxhbmsgcmVnaW9uLiAqLworCXZibF9zdGFydCA9IHZibCAmIDB4MWZmZjsKKwl2YmxfZW5kID0gKHZibCA+PiAxNikgJiAweDFmZmY7CisKKwlpZiAoKCp2cG9zIDwgdmJsX3N0YXJ0KSB8fCAoKnZwb3MgPiB2YmxfZW5kKSkKKwkJaW5fdmJsID0gZmFsc2U7CisKKwkvKiBJbnNpZGUgInVwcGVyIHBhcnQiIG9mIHZibGFuayBhcmVhPyBBcHBseSBjb3JyZWN0aXZlIG9mZnNldDogKi8KKwlpZiAoaW5fdmJsICYmICgqdnBvcyA+PSB2Ymxfc3RhcnQpKQorCQkqdnBvcyA9ICp2cG9zIC0gdnRvdGFsOworCisJLyogUmVhZG91dHMgdmFsaWQ/ICovCisJaWYgKHZibCA+IDApCisJCXJldCB8PSBEUk1fU0NBTk9VVFBPU19WQUxJRCB8IERSTV9TQ0FOT1VUUE9TX0FDQ1VSQVRFOworCisJLyogSW4gdmJsYW5rPyAqLworCWlmIChpbl92YmwpCisJCXJldCB8PSBEUk1fU0NBTk9VVFBPU19JTlZCTDsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBpOTE1X2dldF92YmxhbmtfdGltZXN0YW1wKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjLAorCQkJICAgICAgaW50ICptYXhfZXJyb3IsCisJCQkgICAgICBzdHJ1Y3QgdGltZXZhbCAqdmJsYW5rX3RpbWUsCisJCQkgICAgICB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmRybWNydGM7CisKKwlpZiAoY3J0YyA8IDAgfHwgY3J0YyA+PSBkZXYtPm51bV9jcnRjcykgeworCQlEUk1fRVJST1IoIkludmFsaWQgY3J0YyAlZFxuIiwgY3J0Yyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEdldCBkcm1fY3J0YyB0byB0aW1lc3RhbXA6ICovCisJZHJtY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldiwgY3J0Yyk7CisKKwkvKiBIZWxwZXIgcm91dGluZSBpbiBEUk0gY29yZSBkb2VzIGFsbCB0aGUgd29yazogKi8KKwlyZXR1cm4gZHJtX2NhbGNfdmJsdGltZXN0YW1wX2Zyb21fc2Nhbm91dHBvcyhkZXYsIGNydGMsIG1heF9lcnJvciwKKwkJCQkJCSAgICAgdmJsYW5rX3RpbWUsIGZsYWdzLCBkcm1jcnRjKTsKK30KKwogLyoKICAqIEhhbmRsZSBob3RwbHVnIGV2ZW50cyBvdXRzaWRlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBwcm9wZXIuCiAgKi8KQEAgLTI5NywyMCArMzQ4LDEwNSBAQAogCQkJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyIHNlcW5vID0gcmluZy0+Z2V0X3NlcW5vKGRldiwgcmluZyk7Ci0JcmluZy0+aXJxX2dlbV9zZXFubyA9IHNlcW5vOworCXUzMiBzZXFubyA9IHJpbmctPmdldF9zZXFubyhyaW5nKTsKKwogCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGUoZGV2LCBzZXFubyk7CisKKwlyaW5nLT5pcnFfc2Vxbm8gPSBzZXFubzsKIAl3YWtlX3VwX2FsbCgmcmluZy0+aXJxX3F1ZXVlKTsKKwogCWRldl9wcml2LT5oYW5nY2hlY2tfY291bnQgPSAwOwogCW1vZF90aW1lcigmZGV2X3ByaXYtPmhhbmdjaGVja190aW1lciwKIAkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhEUk1fSTkxNV9IQU5HQ0hFQ0tfUEVSSU9EKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGdlbjZfcG1faXJxX2hhbmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXU4IG5ld19kZWxheSA9IGRldl9wcml2LT5jdXJfZGVsYXk7CisJdTMyIHBtX2lpcjsKKworCXBtX2lpciA9IEk5MTVfUkVBRChHRU42X1BNSUlSKTsKKwlpZiAoIXBtX2lpcikKKwkJcmV0dXJuOworCisJaWYgKHBtX2lpciAmIEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEKSB7CisJCWlmIChkZXZfcHJpdi0+Y3VyX2RlbGF5ICE9IGRldl9wcml2LT5tYXhfZGVsYXkpCisJCQluZXdfZGVsYXkgPSBkZXZfcHJpdi0+Y3VyX2RlbGF5ICsgMTsKKwkJaWYgKG5ld19kZWxheSA+IGRldl9wcml2LT5tYXhfZGVsYXkpCisJCQluZXdfZGVsYXkgPSBkZXZfcHJpdi0+bWF4X2RlbGF5OworCX0gZWxzZSBpZiAocG1faWlyICYgKEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQgfCBHRU42X1BNX1JQX0RPV05fVElNRU9VVCkpIHsKKwkJaWYgKGRldl9wcml2LT5jdXJfZGVsYXkgIT0gZGV2X3ByaXYtPm1pbl9kZWxheSkKKwkJCW5ld19kZWxheSA9IGRldl9wcml2LT5jdXJfZGVsYXkgLSAxOworCQlpZiAobmV3X2RlbGF5IDwgZGV2X3ByaXYtPm1pbl9kZWxheSkgeworCQkJbmV3X2RlbGF5ID0gZGV2X3ByaXYtPm1pbl9kZWxheTsKKwkJCUk5MTVfV1JJVEUoR0VONl9SUF9JTlRFUlJVUFRfTElNSVRTLAorCQkJCSAgIEk5MTVfUkVBRChHRU42X1JQX0lOVEVSUlVQVF9MSU1JVFMpIHwKKwkJCQkgICAoKG5ld19kZWxheSA8PCAxNikgJiAweDNmMDAwMCkpOworCQl9IGVsc2UgeworCQkJLyogTWFrZSBzdXJlIHdlIGNvbnRpbnVlIHRvIGdldCBkb3duIGludGVycnVwdHMKKwkJCSAqIHVudGlsIHdlIGhpdCB0aGUgbWluaW11bSBmcmVxdWVuY3kgKi8KKwkJCUk5MTVfV1JJVEUoR0VONl9SUF9JTlRFUlJVUFRfTElNSVRTLAorCQkJCSAgIEk5MTVfUkVBRChHRU42X1JQX0lOVEVSUlVQVF9MSU1JVFMpICYgfjB4M2YwMDAwKTsKKwkJfQorCisJfQorCisJZ2VuNl9zZXRfcnBzKGRldiwgbmV3X2RlbGF5KTsKKwlkZXZfcHJpdi0+Y3VyX2RlbGF5ID0gbmV3X2RlbGF5OworCisJSTkxNV9XUklURShHRU42X1BNSUlSLCBwbV9paXIpOworfQorCitzdGF0aWMgdm9pZCBwY2hfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBwY2hfaWlyOworCisJcGNoX2lpciA9IEk5MTVfUkVBRChTREVJSVIpOworCisJaWYgKHBjaF9paXIgJiBTREVfQVVESU9fUE9XRVJfTUFTSykKKwkJRFJNX0RFQlVHX0RSSVZFUigiUENIIGF1ZGlvIHBvd2VyIGNoYW5nZSBvbiBwb3J0ICVkXG4iLAorCQkJCSAocGNoX2lpciAmIFNERV9BVURJT19QT1dFUl9NQVNLKSA+PgorCQkJCSBTREVfQVVESU9fUE9XRVJfU0hJRlQpOworCisJaWYgKHBjaF9paXIgJiBTREVfR01CVVMpCisJCURSTV9ERUJVR19EUklWRVIoIlBDSCBHTUJVUyBpbnRlcnJ1cHRcbiIpOworCisJaWYgKHBjaF9paXIgJiBTREVfQVVESU9fSERDUF9NQVNLKQorCQlEUk1fREVCVUdfRFJJVkVSKCJQQ0ggSERDUCBhdWRpbyBpbnRlcnJ1cHRcbiIpOworCisJaWYgKHBjaF9paXIgJiBTREVfQVVESU9fVFJBTlNfTUFTSykKKwkJRFJNX0RFQlVHX0RSSVZFUigiUENIIHRyYW5zY29kZXIgYXVkaW8gaW50ZXJydXB0XG4iKTsKKworCWlmIChwY2hfaWlyICYgU0RFX1BPSVNPTikKKwkJRFJNX0VSUk9SKCJQQ0ggcG9pc29uIGludGVycnVwdFxuIik7CisKKwlpZiAocGNoX2lpciAmIFNERV9GRElfTUFTSykgeworCQl1MzIgZmRpYSwgZmRpYjsKKworCQlmZGlhID0gSTkxNV9SRUFEKEZESV9SWEFfSUlSKTsKKwkJZmRpYiA9IEk5MTVfUkVBRChGRElfUlhCX0lJUik7CisJCURSTV9ERUJVR19EUklWRVIoIlBDSCBGREkgUlggaW50ZXJydXB0OyBGREkgUlhBIElJUjogMHglMDh4LCBGREkgUlhCIElJUjogMHglMDh4XG4iLCBmZGlhLCBmZGliKTsKKwl9CisKKwlpZiAocGNoX2lpciAmIChTREVfVFJBTlNCX0NSQ19ET05FIHwgU0RFX1RSQU5TQV9DUkNfRE9ORSkpCisJCURSTV9ERUJVR19EUklWRVIoIlBDSCB0cmFuc2NvZGVyIENSQyBkb25lIGludGVycnVwdFxuIik7CisKKwlpZiAocGNoX2lpciAmIChTREVfVFJBTlNCX0NSQ19FUlIgfCBTREVfVFJBTlNBX0NSQ19FUlIpKQorCQlEUk1fREVCVUdfRFJJVkVSKCJQQ0ggdHJhbnNjb2RlciBDUkMgZXJyb3IgaW50ZXJydXB0XG4iKTsKKworCWlmIChwY2hfaWlyICYgU0RFX1RSQU5TQl9GSUZPX1VOREVSKQorCQlEUk1fREVCVUdfRFJJVkVSKCJQQ0ggdHJhbnNjb2RlciBCIHVuZGVycnVuIGludGVycnVwdFxuIik7CisJaWYgKHBjaF9paXIgJiBTREVfVFJBTlNBX0ZJRk9fVU5ERVIpCisJCURSTV9ERUJVR19EUklWRVIoIlBDSCB0cmFuc2NvZGVyIEEgdW5kZXJydW4gaW50ZXJydXB0XG4iKTsKK30KKwogc3RhdGljIGlycXJldHVybl90IGlyb25sYWtlX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgcmV0ID0gSVJRX05PTkU7Ci0JdTMyIGRlX2lpciwgZ3RfaWlyLCBkZV9pZXIsIHBjaF9paXI7CisJdTMyIGRlX2lpciwgZ3RfaWlyLCBkZV9pZXIsIHBjaF9paXIsIHBtX2lpcjsKIAl1MzIgaG90cGx1Z19tYXNrOwogCXN0cnVjdCBkcm1faTkxNV9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXY7CiAJdTMyIGJzZF91c3JfaW50ZXJydXB0ID0gR1RfQlNEX1VTRVJfSU5URVJSVVBUOwpAQCAtMzIxLDEzICs0NTcsMTUgQEAKIAkvKiBkaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHQgYmVmb3JlIGNsZWFyaW5nIGlpciAgKi8KIAlkZV9pZXIgPSBJOTE1X1JFQUQoREVJRVIpOwogCUk5MTVfV1JJVEUoREVJRVIsIGRlX2llciAmIH5ERV9NQVNURVJfSVJRX0NPTlRST0wpOwotCSh2b2lkKUk5MTVfUkVBRChERUlFUik7CisJUE9TVElOR19SRUFEKERFSUVSKTsKIAogCWRlX2lpciA9IEk5MTVfUkVBRChERUlJUik7CiAJZ3RfaWlyID0gSTkxNV9SRUFEKEdUSUlSKTsKIAlwY2hfaWlyID0gSTkxNV9SRUFEKFNERUlJUik7CisJcG1faWlyID0gSTkxNV9SRUFEKEdFTjZfUE1JSVIpOwogCi0JaWYgKGRlX2lpciA9PSAwICYmIGd0X2lpciA9PSAwICYmIHBjaF9paXIgPT0gMCkKKwlpZiAoZGVfaWlyID09IDAgJiYgZ3RfaWlyID09IDAgJiYgcGNoX2lpciA9PSAwICYmCisJICAgICghSVNfR0VONihkZXYpIHx8IHBtX2lpciA9PSAwKSkKIAkJZ290byBkb25lOwogCiAJaWYgKEhBU19QQ0hfQ1BUKGRldikpCkBAIC0zNDQsMTIgKzQ4MiwxMiBAQAogCQkJCVJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7CiAJfQogCi0JaWYgKGd0X2lpciAmIEdUX1BJUEVfTk9USUZZKQotCQlub3RpZnlfcmluZyhkZXYsICZkZXZfcHJpdi0+cmVuZGVyX3JpbmcpOworCWlmIChndF9paXIgJiAoR1RfVVNFUl9JTlRFUlJVUFQgfCBHVF9QSVBFX05PVElGWSkpCisJCW5vdGlmeV9yaW5nKGRldiwgJmRldl9wcml2LT5yaW5nW1JDU10pOwogCWlmIChndF9paXIgJiBic2RfdXNyX2ludGVycnVwdCkKLQkJbm90aWZ5X3JpbmcoZGV2LCAmZGV2X3ByaXYtPmJzZF9yaW5nKTsKLQlpZiAoSEFTX0JMVChkZXYpICYmIGd0X2lpciAmIEdUX0JMVF9VU0VSX0lOVEVSUlVQVCkKLQkJbm90aWZ5X3JpbmcoZGV2LCAmZGV2X3ByaXYtPmJsdF9yaW5nKTsKKwkJbm90aWZ5X3JpbmcoZGV2LCAmZGV2X3ByaXYtPnJpbmdbVkNTXSk7CisJaWYgKGd0X2lpciAmIEdUX0JMVF9VU0VSX0lOVEVSUlVQVCkKKwkJbm90aWZ5X3JpbmcoZGV2LCAmZGV2X3ByaXYtPnJpbmdbQkNTXSk7CiAKIAlpZiAoZGVfaWlyICYgREVfR1NFKQogCQlpbnRlbF9vcHJlZ2lvbl9nc2VfaW50cihkZXYpOwpAQCAtMzcxLDE0ICs1MDksMjAgQEAKIAkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAxKTsKIAogCS8qIGNoZWNrIGV2ZW50IGZyb20gUENIICovCi0JaWYgKChkZV9paXIgJiBERV9QQ0hfRVZFTlQpICYmIChwY2hfaWlyICYgaG90cGx1Z19tYXNrKSkKLQkJcXVldWVfd29yayhkZXZfcHJpdi0+d3EsICZkZXZfcHJpdi0+aG90cGx1Z193b3JrKTsKKwlpZiAoZGVfaWlyICYgREVfUENIX0VWRU5UKSB7CisJCWlmIChwY2hfaWlyICYgaG90cGx1Z19tYXNrKQorCQkJcXVldWVfd29yayhkZXZfcHJpdi0+d3EsICZkZXZfcHJpdi0+aG90cGx1Z193b3JrKTsKKwkJcGNoX2lycV9oYW5kbGVyKGRldik7CisJfQogCiAJaWYgKGRlX2lpciAmIERFX1BDVV9FVkVOVCkgewogCQlJOTE1X1dSSVRFMTYoTUVNSU5UUlNUUywgSTkxNV9SRUFEKE1FTUlOVFJTVFMpKTsKIAkJaTkxNV9oYW5kbGVfcnBzX2NoYW5nZShkZXYpOwogCX0KIAorCWlmIChJU19HRU42KGRldikpCisJCWdlbjZfcG1faXJxX2hhbmRsZXIoZGV2KTsKKwogCS8qIHNob3VsZCBjbGVhciBQQ0ggaG90cGx1ZyBldmVudCBiZWZvcmUgY2xlYXIgQ1BVIGlycSAqLwogCUk5MTVfV1JJVEUoU0RFSUlSLCBwY2hfaWlyKTsKIAlJOTE1X1dSSVRFKEdUSUlSLCBndF9paXIpOwpAQCAtMzg2LDcgKzUzMCw3IEBACiAKIGRvbmU6CiAJSTkxNV9XUklURShERUlFUiwgZGVfaWVyKTsKLQkodm9pZClJOTE1X1JFQUQoREVJRVIpOworCVBPU1RJTkdfUkVBRChERUlFUik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDIyLDI5ICs1NjYsMjMgQEAKIAogI2lmZGVmIENPTkZJR19ERUJVR19GUwogc3RhdGljIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9vYmplY3QgKgotaTkxNV9lcnJvcl9vYmplY3RfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpzcmMpCitpOTE1X2Vycm9yX29iamVjdF9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpzcmMpCiB7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9pOTE1X2Vycm9yX29iamVjdCAqZHN0OwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpzcmNfcHJpdjsKIAlpbnQgcGFnZSwgcGFnZV9jb3VudDsKIAl1MzIgcmVsb2Nfb2Zmc2V0OwogCi0JaWYgKHNyYyA9PSBOVUxMKQorCWlmIChzcmMgPT0gTlVMTCB8fCBzcmMtPnBhZ2VzID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0Jc3JjX3ByaXYgPSB0b19pbnRlbF9ibyhzcmMpOwotCWlmIChzcmNfcHJpdi0+cGFnZXMgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlwYWdlX2NvdW50ID0gc3JjLT5zaXplIC8gUEFHRV9TSVpFOworCXBhZ2VfY291bnQgPSBzcmMtPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsKIAogCWRzdCA9IGttYWxsb2Moc2l6ZW9mKCpkc3QpICsgcGFnZV9jb3VudCAqIHNpemVvZiAodTMyICopLCBHRlBfQVRPTUlDKTsKIAlpZiAoZHN0ID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JcmVsb2Nfb2Zmc2V0ID0gc3JjX3ByaXYtPmd0dF9vZmZzZXQ7CisJcmVsb2Nfb2Zmc2V0ID0gc3JjLT5ndHRfb2Zmc2V0OwogCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBwYWdlX2NvdW50OyBwYWdlKyspIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJdm9pZCBfX2lvbWVtICpzOwpAQCAtNDY2LDcgKzYwNCw3IEBACiAJCXJlbG9jX29mZnNldCArPSBQQUdFX1NJWkU7CiAJfQogCWRzdC0+cGFnZV9jb3VudCA9IHBhZ2VfY291bnQ7Ci0JZHN0LT5ndHRfb2Zmc2V0ID0gc3JjX3ByaXYtPmd0dF9vZmZzZXQ7CisJZHN0LT5ndHRfb2Zmc2V0ID0gc3JjLT5ndHRfb2Zmc2V0OwogCiAJcmV0dXJuIGRzdDsKIApAQCAtNTAzLDUzICs2NDEsOTggQEAKIAlrZnJlZShlcnJvcik7CiB9CiAKLXN0YXRpYyB1MzIKLWk5MTVfZ2V0X2JiYWRkcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgKnJpbmcpCitzdGF0aWMgdTMyIGNhcHR1cmVfYm9fbGlzdChzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfYnVmZmVyICplcnIsCisJCQkgICBpbnQgY291bnQsCisJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewotCXUzMiBjbWQ7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlpbnQgaSA9IDA7CiAKLQlpZiAoSVNfSTgzMChkZXYpIHx8IElTXzg0NUcoZGV2KSkKLQkJY21kID0gTUlfQkFUQ0hfQlVGRkVSOwotCWVsc2UgaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQpCi0JCWNtZCA9IChNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAoMiA8PCA2KSB8Ci0JCSAgICAgICBNSV9CQVRDSF9OT05fU0VDVVJFX0k5NjUpOwotCWVsc2UKLQkJY21kID0gKE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8ICgyIDw8IDYpKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgaGVhZCwgbW1fbGlzdCkgeworCQllcnItPnNpemUgPSBvYmotPmJhc2Uuc2l6ZTsKKwkJZXJyLT5uYW1lID0gb2JqLT5iYXNlLm5hbWU7CisJCWVyci0+c2Vxbm8gPSBvYmotPmxhc3RfcmVuZGVyaW5nX3NlcW5vOworCQllcnItPmd0dF9vZmZzZXQgPSBvYmotPmd0dF9vZmZzZXQ7CisJCWVyci0+cmVhZF9kb21haW5zID0gb2JqLT5iYXNlLnJlYWRfZG9tYWluczsKKwkJZXJyLT53cml0ZV9kb21haW4gPSBvYmotPmJhc2Uud3JpdGVfZG9tYWluOworCQllcnItPmZlbmNlX3JlZyA9IG9iai0+ZmVuY2VfcmVnOworCQllcnItPnBpbm5lZCA9IDA7CisJCWlmIChvYmotPnBpbl9jb3VudCA+IDApCisJCQllcnItPnBpbm5lZCA9IDE7CisJCWlmIChvYmotPnVzZXJfcGluX2NvdW50ID4gMCkKKwkJCWVyci0+cGlubmVkID0gLTE7CisJCWVyci0+dGlsaW5nID0gb2JqLT50aWxpbmdfbW9kZTsKKwkJZXJyLT5kaXJ0eSA9IG9iai0+ZGlydHk7CisJCWVyci0+cHVyZ2VhYmxlID0gb2JqLT5tYWR2ICE9IEk5MTVfTUFEVl9XSUxMTkVFRDsKKwkJZXJyLT5yaW5nID0gb2JqLT5yaW5nID8gb2JqLT5yaW5nLT5pZCA6IDA7CisJCWVyci0+YWdwX3R5cGUgPSBvYmotPmFncF90eXBlID09IEFHUF9VU0VSX0NBQ0hFRF9NRU1PUlk7CiAKLQlyZXR1cm4gcmluZ1swXSA9PSBjbWQgPyByaW5nWzFdIDogMDsKKwkJaWYgKCsraSA9PSBjb3VudCkKKwkJCWJyZWFrOworCisJCWVycisrOworCX0KKworCXJldHVybiBpOwogfQogCi1zdGF0aWMgdTMyCi1pOTE1X3JpbmdidWZmZXJfbGFzdF9iYXRjaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVjb3JkX2ZlbmNlcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZSAqZXJyb3IpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MzIgaGVhZCwgYmJhZGRyOwotCXUzMiAqcmluZzsKKwlpbnQgaTsKIAotCS8qIExvY2F0ZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgcmluZ2J1ZmZlciBhbmQgd2FsayBiYWNrCi0JICogdG8gZmluZCB0aGUgbW9zdCByZWNlbnRseSBkaXNwYXRjaGVkIGJhdGNoIGJ1ZmZlci4KLQkgKi8KLQliYmFkZHIgPSAwOwotCWhlYWQgPSBJOTE1X1JFQUQoUFJCMF9IRUFEKSAmIEhFQURfQUREUjsKLQlyaW5nID0gKHUzMiAqKShkZXZfcHJpdi0+cmVuZGVyX3JpbmcudmlydHVhbF9zdGFydCArIGhlYWQpOworCS8qIEZlbmNlcyAqLworCXN3aXRjaCAoSU5URUxfSU5GTyhkZXYpLT5nZW4pIHsKKwljYXNlIDY6CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQkJZXJyb3ItPmZlbmNlW2ldID0gSTkxNV9SRUFENjQoRkVOQ0VfUkVHX1NBTkRZQlJJREdFXzAgKyAoaSAqIDgpKTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCWNhc2UgNDoKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCQllcnJvci0+ZmVuY2VbaV0gPSBJOTE1X1JFQUQ2NChGRU5DRV9SRUdfOTY1XzAgKyAoaSAqIDgpKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlpZiAoSVNfSTk0NUcoZGV2KSB8fCBJU19JOTQ1R00oZGV2KSB8fCBJU19HMzMoZGV2KSkKKwkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQkJZXJyb3ItPmZlbmNlW2krOF0gPSBJOTE1X1JFQUQoRkVOQ0VfUkVHXzk0NV84ICsgKGkgKiA0KSk7CisJY2FzZSAyOgorCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJZXJyb3ItPmZlbmNlW2ldID0gSTkxNV9SRUFEKEZFTkNFX1JFR184MzBfMCArIChpICogNCkpOworCQlicmVhazsKIAotCXdoaWxlICgtLXJpbmcgPj0gKHUzMiAqKWRldl9wcml2LT5yZW5kZXJfcmluZy52aXJ0dWFsX3N0YXJ0KSB7Ci0JCWJiYWRkciA9IGk5MTVfZ2V0X2JiYWRkcihkZXYsIHJpbmcpOwotCQlpZiAoYmJhZGRyKQotCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGRybV9pOTE1X2Vycm9yX29iamVjdCAqCitpOTE1X2Vycm9yX2ZpcnN0X2JhdGNoYnVmZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJdTMyIHNlcW5vOworCisJaWYgKCFyaW5nLT5nZXRfc2Vxbm8pCisJCXJldHVybiBOVUxMOworCisJc2Vxbm8gPSByaW5nLT5nZXRfc2Vxbm8ocmluZyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QsIG1tX2xpc3QpIHsKKwkJaWYgKG9iai0+cmluZyAhPSByaW5nKQorCQkJY29udGludWU7CisKKwkJaWYgKCFpOTE1X3NlcW5vX3Bhc3NlZChvYmotPmxhc3RfcmVuZGVyaW5nX3NlcW5vLCBzZXFubykpCisJCQljb250aW51ZTsKKworCQlpZiAoKG9iai0+YmFzZS5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ09NTUFORCkgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIFdlIG5lZWQgdG8gY29weSB0aGVzZSB0byBhbiBhbm9ueW1vdXMgYnVmZmVyIGFzIHRoZSBzaW1wbGVzdAorCQkgKiBtZXRob2QgdG8gYXZvaWQgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgdXNlcnNwYWNlLgorCQkgKi8KKwkJcmV0dXJuIGk5MTVfZXJyb3Jfb2JqZWN0X2NyZWF0ZShkZXZfcHJpdiwgb2JqKTsKIAl9CiAKLQlpZiAoYmJhZGRyID09IDApIHsKLQkJcmluZyA9ICh1MzIgKikoZGV2X3ByaXYtPnJlbmRlcl9yaW5nLnZpcnR1YWxfc3RhcnQKLQkJCQkrIGRldl9wcml2LT5yZW5kZXJfcmluZy5zaXplKTsKLQkJd2hpbGUgKC0tcmluZyA+PSAodTMyICopZGV2X3ByaXYtPnJlbmRlcl9yaW5nLnZpcnR1YWxfc3RhcnQpIHsKLQkJCWJiYWRkciA9IGk5MTVfZ2V0X2JiYWRkcihkZXYsIHJpbmcpOwotCQkJaWYgKGJiYWRkcikKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiBiYmFkZHI7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgpAQCAtNTY0LDEyICs3NDcsMTAgQEAKIHN0YXRpYyB2b2lkIGk5MTVfY2FwdHVyZV9lcnJvcl9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlICplcnJvcjsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJhdGNoYnVmZmVyWzJdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIGJiYWRkcjsKLQlpbnQgY291bnQ7CisJaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmVycm9yX2xvY2ssIGZsYWdzKTsKIAllcnJvciA9IGRldl9wcml2LT5maXJzdF9lcnJvcjsKQEAgLTU4NSwyMCArNzY2LDMzIEBACiAKIAlEUk1fREVCVUdfRFJJVkVSKCJnZW5lcmF0aW5nIGVycm9yIGV2ZW50XG4iKTsKIAotCWVycm9yLT5zZXFubyA9Ci0JCWRldl9wcml2LT5yZW5kZXJfcmluZy5nZXRfc2Vxbm8oZGV2LCAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nKTsKKwllcnJvci0+c2Vxbm8gPSBkZXZfcHJpdi0+cmluZ1tSQ1NdLmdldF9zZXFubygmZGV2X3ByaXYtPnJpbmdbUkNTXSk7CiAJZXJyb3ItPmVpciA9IEk5MTVfUkVBRChFSVIpOwogCWVycm9yLT5wZ3RibF9lciA9IEk5MTVfUkVBRChQR1RCTF9FUik7CiAJZXJyb3ItPnBpcGVhc3RhdCA9IEk5MTVfUkVBRChQSVBFQVNUQVQpOwogCWVycm9yLT5waXBlYnN0YXQgPSBJOTE1X1JFQUQoUElQRUJTVEFUKTsKIAllcnJvci0+aW5zdHBtID0gSTkxNV9SRUFEKElOU1RQTSk7Ci0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgNCkgewotCQllcnJvci0+aXBlaXIgPSBJOTE1X1JFQUQoSVBFSVIpOwotCQllcnJvci0+aXBlaHIgPSBJOTE1X1JFQUQoSVBFSFIpOwotCQllcnJvci0+aW5zdGRvbmUgPSBJOTE1X1JFQUQoSU5TVERPTkUpOwotCQllcnJvci0+YWN0aGQgPSBJOTE1X1JFQUQoQUNUSEQpOwotCQllcnJvci0+YmJhZGRyID0gMDsKLQl9IGVsc2UgeworCWVycm9yLT5lcnJvciA9IDA7CisJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDYpIHsKKwkJZXJyb3ItPmVycm9yID0gSTkxNV9SRUFEKEVSUk9SX0dFTjYpOworCisJCWVycm9yLT5iY3NfYWN0aGQgPSBJOTE1X1JFQUQoQkNTX0FDVEhEKTsKKwkJZXJyb3ItPmJjc19pcGVociA9IEk5MTVfUkVBRChCQ1NfSVBFSFIpOworCQllcnJvci0+YmNzX2lwZWlyID0gSTkxNV9SRUFEKEJDU19JUEVJUik7CisJCWVycm9yLT5iY3NfaW5zdGRvbmUgPSBJOTE1X1JFQUQoQkNTX0lOU1RET05FKTsKKwkJZXJyb3ItPmJjc19zZXFubyA9IDA7CisJCWlmIChkZXZfcHJpdi0+cmluZ1tCQ1NdLmdldF9zZXFubykKKwkJCWVycm9yLT5iY3Nfc2Vxbm8gPSBkZXZfcHJpdi0+cmluZ1tCQ1NdLmdldF9zZXFubygmZGV2X3ByaXYtPnJpbmdbQkNTXSk7CisKKwkJZXJyb3ItPnZjc19hY3RoZCA9IEk5MTVfUkVBRChWQ1NfQUNUSEQpOworCQllcnJvci0+dmNzX2lwZWhyID0gSTkxNV9SRUFEKFZDU19JUEVIUik7CisJCWVycm9yLT52Y3NfaXBlaXIgPSBJOTE1X1JFQUQoVkNTX0lQRUlSKTsKKwkJZXJyb3ItPnZjc19pbnN0ZG9uZSA9IEk5MTVfUkVBRChWQ1NfSU5TVERPTkUpOworCQllcnJvci0+dmNzX3NlcW5vID0gMDsKKwkJaWYgKGRldl9wcml2LT5yaW5nW1ZDU10uZ2V0X3NlcW5vKQorCQkJZXJyb3ItPnZjc19zZXFubyA9IGRldl9wcml2LT5yaW5nW1ZDU10uZ2V0X3NlcW5vKCZkZXZfcHJpdi0+cmluZ1tWQ1NdKTsKKwl9CisJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQpIHsKIAkJZXJyb3ItPmlwZWlyID0gSTkxNV9SRUFEKElQRUlSX0k5NjUpOwogCQllcnJvci0+aXBlaHIgPSBJOTE1X1JFQUQoSVBFSFJfSTk2NSk7CiAJCWVycm9yLT5pbnN0ZG9uZSA9IEk5MTVfUkVBRChJTlNURE9ORV9JOTY1KTsKQEAgLTYwNiwxMTggKzgwMCw2MSBAQAogCQllcnJvci0+aW5zdGRvbmUxID0gSTkxNV9SRUFEKElOU1RET05FMSk7CiAJCWVycm9yLT5hY3RoZCA9IEk5MTVfUkVBRChBQ1RIRF9JOTY1KTsKIAkJZXJyb3ItPmJiYWRkciA9IEk5MTVfUkVBRDY0KEJCX0FERFIpOworCX0gZWxzZSB7CisJCWVycm9yLT5pcGVpciA9IEk5MTVfUkVBRChJUEVJUik7CisJCWVycm9yLT5pcGVociA9IEk5MTVfUkVBRChJUEVIUik7CisJCWVycm9yLT5pbnN0ZG9uZSA9IEk5MTVfUkVBRChJTlNURE9ORSk7CisJCWVycm9yLT5hY3RoZCA9IEk5MTVfUkVBRChBQ1RIRCk7CisJCWVycm9yLT5iYmFkZHIgPSAwOwogCX0KKwlpOTE1X2dlbV9yZWNvcmRfZmVuY2VzKGRldiwgZXJyb3IpOwogCi0JYmJhZGRyID0gaTkxNV9yaW5nYnVmZmVyX2xhc3RfYmF0Y2goZGV2KTsKLQotCS8qIEdyYWIgdGhlIGN1cnJlbnQgYmF0Y2hidWZmZXIsIG1vc3QgbGlrZWx5IHRvIGhhdmUgY3Jhc2hlZC4gKi8KLQliYXRjaGJ1ZmZlclswXSA9IE5VTEw7Ci0JYmF0Y2hidWZmZXJbMV0gPSBOVUxMOwotCWNvdW50ID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LCBtbV9saXN0KSB7Ci0JCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJm9ial9wcml2LT5iYXNlOwotCi0JCWlmIChiYXRjaGJ1ZmZlclswXSA9PSBOVUxMICYmCi0JCSAgICBiYmFkZHIgPj0gb2JqX3ByaXYtPmd0dF9vZmZzZXQgJiYKLQkJICAgIGJiYWRkciA8IG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgb2JqLT5zaXplKQotCQkJYmF0Y2hidWZmZXJbMF0gPSBvYmo7Ci0KLQkJaWYgKGJhdGNoYnVmZmVyWzFdID09IE5VTEwgJiYKLQkJICAgIGVycm9yLT5hY3RoZCA+PSBvYmpfcHJpdi0+Z3R0X29mZnNldCAmJgotCQkgICAgZXJyb3ItPmFjdGhkIDwgb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyBvYmotPnNpemUpCi0JCQliYXRjaGJ1ZmZlclsxXSA9IG9iajsKLQotCQljb3VudCsrOwotCX0KLQkvKiBTY2FuIHRoZSBvdGhlciBsaXN0cyBmb3IgY29tcGxldGVuZXNzIGZvciB0aG9zZSBiaXphcnJlIGVycm9ycy4gKi8KLQlpZiAoYmF0Y2hidWZmZXJbMF0gPT0gTlVMTCB8fCBiYXRjaGJ1ZmZlclsxXSA9PSBOVUxMKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwgbW1fbGlzdCkgewotCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmb2JqX3ByaXYtPmJhc2U7Ci0KLQkJCWlmIChiYXRjaGJ1ZmZlclswXSA9PSBOVUxMICYmCi0JCQkgICAgYmJhZGRyID49IG9ial9wcml2LT5ndHRfb2Zmc2V0ICYmCi0JCQkgICAgYmJhZGRyIDwgb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyBvYmotPnNpemUpCi0JCQkJYmF0Y2hidWZmZXJbMF0gPSBvYmo7Ci0KLQkJCWlmIChiYXRjaGJ1ZmZlclsxXSA9PSBOVUxMICYmCi0JCQkgICAgZXJyb3ItPmFjdGhkID49IG9ial9wcml2LT5ndHRfb2Zmc2V0ICYmCi0JCQkgICAgZXJyb3ItPmFjdGhkIDwgb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyBvYmotPnNpemUpCi0JCQkJYmF0Y2hidWZmZXJbMV0gPSBvYmo7Ci0KLQkJCWlmIChiYXRjaGJ1ZmZlclswXSAmJiBiYXRjaGJ1ZmZlclsxXSkKLQkJCQlicmVhazsKLQkJfQotCX0KLQlpZiAoYmF0Y2hidWZmZXJbMF0gPT0gTlVMTCB8fCBiYXRjaGJ1ZmZlclsxXSA9PSBOVUxMKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwgbW1fbGlzdCkgewotCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmb2JqX3ByaXYtPmJhc2U7Ci0KLQkJCWlmIChiYXRjaGJ1ZmZlclswXSA9PSBOVUxMICYmCi0JCQkgICAgYmJhZGRyID49IG9ial9wcml2LT5ndHRfb2Zmc2V0ICYmCi0JCQkgICAgYmJhZGRyIDwgb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyBvYmotPnNpemUpCi0JCQkJYmF0Y2hidWZmZXJbMF0gPSBvYmo7Ci0KLQkJCWlmIChiYXRjaGJ1ZmZlclsxXSA9PSBOVUxMICYmCi0JCQkgICAgZXJyb3ItPmFjdGhkID49IG9ial9wcml2LT5ndHRfb2Zmc2V0ICYmCi0JCQkgICAgZXJyb3ItPmFjdGhkIDwgb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyBvYmotPnNpemUpCi0JCQkJYmF0Y2hidWZmZXJbMV0gPSBvYmo7Ci0KLQkJCWlmIChiYXRjaGJ1ZmZlclswXSAmJiBiYXRjaGJ1ZmZlclsxXSkKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCS8qIFdlIG5lZWQgdG8gY29weSB0aGVzZSB0byBhbiBhbm9ueW1vdXMgYnVmZmVyIGFzIHRoZSBzaW1wbGVzdAotCSAqIG1ldGhvZCB0byBhdm9pZCBiZWluZyBvdmVyd3JpdHRlbiBieSB1c2Vyc3BhY2UuCi0JICovCi0JZXJyb3ItPmJhdGNoYnVmZmVyWzBdID0gaTkxNV9lcnJvcl9vYmplY3RfY3JlYXRlKGRldiwgYmF0Y2hidWZmZXJbMF0pOwotCWlmIChiYXRjaGJ1ZmZlclsxXSAhPSBiYXRjaGJ1ZmZlclswXSkKLQkJZXJyb3ItPmJhdGNoYnVmZmVyWzFdID0gaTkxNV9lcnJvcl9vYmplY3RfY3JlYXRlKGRldiwgYmF0Y2hidWZmZXJbMV0pOwotCWVsc2UKLQkJZXJyb3ItPmJhdGNoYnVmZmVyWzFdID0gTlVMTDsKKwkvKiBSZWNvcmQgdGhlIGFjdGl2ZSBiYXRjaGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykKKwkJZXJyb3ItPmJhdGNoYnVmZmVyW2ldID0KKwkJCWk5MTVfZXJyb3JfZmlyc3RfYmF0Y2hidWZmZXIoZGV2X3ByaXYsCisJCQkJCQkgICAgICZkZXZfcHJpdi0+cmluZ1tpXSk7CiAKIAkvKiBSZWNvcmQgdGhlIHJpbmdidWZmZXIgKi8KLQllcnJvci0+cmluZ2J1ZmZlciA9IGk5MTVfZXJyb3Jfb2JqZWN0X2NyZWF0ZShkZXYsCi0JCQlkZXZfcHJpdi0+cmVuZGVyX3JpbmcuZ2VtX29iamVjdCk7CisJZXJyb3ItPnJpbmdidWZmZXIgPSBpOTE1X2Vycm9yX29iamVjdF9jcmVhdGUoZGV2X3ByaXYsCisJCQkJCQkgICAgIGRldl9wcml2LT5yaW5nW1JDU10ub2JqKTsKIAotCS8qIFJlY29yZCBidWZmZXJzIG9uIHRoZSBhY3RpdmUgbGlzdC4gKi8KKwkvKiBSZWNvcmQgYnVmZmVycyBvbiB0aGUgYWN0aXZlIGFuZCBwaW5uZWQgbGlzdHMuICovCiAJZXJyb3ItPmFjdGl2ZV9ibyA9IE5VTEw7Ci0JZXJyb3ItPmFjdGl2ZV9ib19jb3VudCA9IDA7CisJZXJyb3ItPnBpbm5lZF9ibyA9IE5VTEw7CiAKLQlpZiAoY291bnQpCi0JCWVycm9yLT5hY3RpdmVfYm8gPSBrbWFsbG9jKHNpemVvZigqZXJyb3ItPmFjdGl2ZV9ibykqY291bnQsCisJaSA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QsIG1tX2xpc3QpCisJCWkrKzsKKwllcnJvci0+YWN0aXZlX2JvX2NvdW50ID0gaTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgJmRldl9wcml2LT5tbS5waW5uZWRfbGlzdCwgbW1fbGlzdCkKKwkJaSsrOworCWVycm9yLT5waW5uZWRfYm9fY291bnQgPSBpIC0gZXJyb3ItPmFjdGl2ZV9ib19jb3VudDsKKworCWlmIChpKSB7CisJCWVycm9yLT5hY3RpdmVfYm8gPSBrbWFsbG9jKHNpemVvZigqZXJyb3ItPmFjdGl2ZV9ibykqaSwKIAkJCQkJICAgR0ZQX0FUT01JQyk7Ci0KLQlpZiAoZXJyb3ItPmFjdGl2ZV9ibykgewotCQlpbnQgaSA9IDA7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QsIG1tX2xpc3QpIHsKLQkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJm9ial9wcml2LT5iYXNlOwotCi0JCQllcnJvci0+YWN0aXZlX2JvW2ldLnNpemUgPSBvYmotPnNpemU7Ci0JCQllcnJvci0+YWN0aXZlX2JvW2ldLm5hbWUgPSBvYmotPm5hbWU7Ci0JCQllcnJvci0+YWN0aXZlX2JvW2ldLnNlcW5vID0gb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vOwotCQkJZXJyb3ItPmFjdGl2ZV9ib1tpXS5ndHRfb2Zmc2V0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7Ci0JCQllcnJvci0+YWN0aXZlX2JvW2ldLnJlYWRfZG9tYWlucyA9IG9iai0+cmVhZF9kb21haW5zOwotCQkJZXJyb3ItPmFjdGl2ZV9ib1tpXS53cml0ZV9kb21haW4gPSBvYmotPndyaXRlX2RvbWFpbjsKLQkJCWVycm9yLT5hY3RpdmVfYm9baV0uZmVuY2VfcmVnID0gb2JqX3ByaXYtPmZlbmNlX3JlZzsKLQkJCWVycm9yLT5hY3RpdmVfYm9baV0ucGlubmVkID0gMDsKLQkJCWlmIChvYmpfcHJpdi0+cGluX2NvdW50ID4gMCkKLQkJCQllcnJvci0+YWN0aXZlX2JvW2ldLnBpbm5lZCA9IDE7Ci0JCQlpZiAob2JqX3ByaXYtPnVzZXJfcGluX2NvdW50ID4gMCkKLQkJCQllcnJvci0+YWN0aXZlX2JvW2ldLnBpbm5lZCA9IC0xOwotCQkJZXJyb3ItPmFjdGl2ZV9ib1tpXS50aWxpbmcgPSBvYmpfcHJpdi0+dGlsaW5nX21vZGU7Ci0JCQllcnJvci0+YWN0aXZlX2JvW2ldLmRpcnR5ID0gb2JqX3ByaXYtPmRpcnR5OwotCQkJZXJyb3ItPmFjdGl2ZV9ib1tpXS5wdXJnZWFibGUgPSBvYmpfcHJpdi0+bWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQ7Ci0KLQkJCWlmICgrK2kgPT0gY291bnQpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJZXJyb3ItPmFjdGl2ZV9ib19jb3VudCA9IGk7CisJCWlmIChlcnJvci0+YWN0aXZlX2JvKQorCQkJZXJyb3ItPnBpbm5lZF9ibyA9CisJCQkJZXJyb3ItPmFjdGl2ZV9ibyArIGVycm9yLT5hY3RpdmVfYm9fY291bnQ7CiAJfQogCisJaWYgKGVycm9yLT5hY3RpdmVfYm8pCisJCWVycm9yLT5hY3RpdmVfYm9fY291bnQgPQorCQkJY2FwdHVyZV9ib19saXN0KGVycm9yLT5hY3RpdmVfYm8sCisJCQkJCWVycm9yLT5hY3RpdmVfYm9fY291bnQsCisJCQkJCSZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpOworCisJaWYgKGVycm9yLT5waW5uZWRfYm8pCisJCWVycm9yLT5waW5uZWRfYm9fY291bnQgPQorCQkJY2FwdHVyZV9ib19saXN0KGVycm9yLT5waW5uZWRfYm8sCisJCQkJCWVycm9yLT5waW5uZWRfYm9fY291bnQsCisJCQkJCSZkZXZfcHJpdi0+bW0ucGlubmVkX2xpc3QpOworCiAJZG9fZ2V0dGltZW9mZGF5KCZlcnJvci0+dGltZSk7CiAKIAllcnJvci0+b3ZlcmxheSA9IGludGVsX292ZXJsYXlfY2FwdHVyZV9lcnJvcl9zdGF0ZShkZXYpOworCWVycm9yLT5kaXNwbGF5ID0gaW50ZWxfZGlzcGxheV9jYXB0dXJlX2Vycm9yX3N0YXRlKGRldik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmVycm9yX2xvY2ssIGZsYWdzKTsKIAlpZiAoZGV2X3ByaXYtPmZpcnN0X2Vycm9yID09IE5VTEwpIHsKQEAgLTc3NSw3ICs5MTIsNyBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICIgIEFDVEhEOiAweCUwOHhcbiIsCiAJCQkgICAgICAgSTkxNV9SRUFEKEFDVEhEX0k5NjUpKTsKIAkJCUk5MTVfV1JJVEUoSVBFSVJfSTk2NSwgaXBlaXIpOwotCQkJKHZvaWQpSTkxNV9SRUFEKElQRUlSX0k5NjUpOworCQkJUE9TVElOR19SRUFEKElQRUlSX0k5NjUpOwogCQl9CiAJCWlmIChlaXIgJiBHTTQ1X0VSUk9SX1BBR0VfVEFCTEUpIHsKIAkJCXUzMiBwZ3RibF9lcnIgPSBJOTE1X1JFQUQoUEdUQkxfRVIpOwpAQCAtNzgzLDcgKzkyMCw3IEBACiAJCQlwcmludGsoS0VSTl9FUlIgIiAgUEdUQkxfRVI6IDB4JTA4eFxuIiwKIAkJCSAgICAgICBwZ3RibF9lcnIpOwogCQkJSTkxNV9XUklURShQR1RCTF9FUiwgcGd0YmxfZXJyKTsKLQkJCSh2b2lkKUk5MTVfUkVBRChQR1RCTF9FUik7CisJCQlQT1NUSU5HX1JFQUQoUEdUQkxfRVIpOwogCQl9CiAJfQogCkBAIC03OTQsNyArOTMxLDcgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiICBQR1RCTF9FUjogMHglMDh4XG4iLAogCQkJICAgICAgIHBndGJsX2Vycik7CiAJCQlJOTE1X1dSSVRFKFBHVEJMX0VSLCBwZ3RibF9lcnIpOwotCQkJKHZvaWQpSTkxNV9SRUFEKFBHVEJMX0VSKTsKKwkJCVBPU1RJTkdfUkVBRChQR1RCTF9FUik7CiAJCX0KIAl9CiAKQEAgLTgyNSw3ICs5NjIsNyBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICIgIEFDVEhEOiAweCUwOHhcbiIsCiAJCQkgICAgICAgSTkxNV9SRUFEKEFDVEhEKSk7CiAJCQlJOTE1X1dSSVRFKElQRUlSLCBpcGVpcik7Ci0JCQkodm9pZClJOTE1X1JFQUQoSVBFSVIpOworCQkJUE9TVElOR19SRUFEKElQRUlSKTsKIAkJfSBlbHNlIHsKIAkJCXUzMiBpcGVpciA9IEk5MTVfUkVBRChJUEVJUl9JOTY1KTsKIApAQCAtODQyLDEyICs5NzksMTIgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiICBBQ1RIRDogMHglMDh4XG4iLAogCQkJICAgICAgIEk5MTVfUkVBRChBQ1RIRF9JOTY1KSk7CiAJCQlJOTE1X1dSSVRFKElQRUlSX0k5NjUsIGlwZWlyKTsKLQkJCSh2b2lkKUk5MTVfUkVBRChJUEVJUl9JOTY1KTsKKwkJCVBPU1RJTkdfUkVBRChJUEVJUl9JOTY1KTsKIAkJfQogCX0KIAogCUk5MTVfV1JJVEUoRUlSLCBlaXIpOwotCSh2b2lkKUk5MTVfUkVBRChFSVIpOworCVBPU1RJTkdfUkVBRChFSVIpOwogCWVpciA9IEk5MTVfUkVBRChFSVIpOwogCWlmIChlaXIpIHsKIAkJLyoKQEAgLTg3MCw3ICsxMDA3LDcgQEAKICAqIHNvIHVzZXJzcGFjZSBrbm93cyBzb21ldGhpbmcgYmFkIGhhcHBlbmVkIChzaG91bGQgdHJpZ2dlciBjb2xsZWN0aW9uCiAgKiBvZiBhIHJpbmcgZHVtcCBldGMuKS4KICAqLwotc3RhdGljIHZvaWQgaTkxNV9oYW5kbGVfZXJyb3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCB3ZWRnZWQpCit2b2lkIGk5MTVfaGFuZGxlX2Vycm9yKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgd2VkZ2VkKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKQEAgLTg4NCwxMSArMTAyMSwxMSBAQAogCQkvKgogCQkgKiBXYWtldXAgd2FpdGluZyBwcm9jZXNzZXMgc28gdGhleSBkb24ndCBoYW5nCiAJCSAqLwotCQl3YWtlX3VwX2FsbCgmZGV2X3ByaXYtPnJlbmRlcl9yaW5nLmlycV9xdWV1ZSk7CisJCXdha2VfdXBfYWxsKCZkZXZfcHJpdi0+cmluZ1tSQ1NdLmlycV9xdWV1ZSk7CiAJCWlmIChIQVNfQlNEKGRldikpCi0JCQl3YWtlX3VwX2FsbCgmZGV2X3ByaXYtPmJzZF9yaW5nLmlycV9xdWV1ZSk7CisJCQl3YWtlX3VwX2FsbCgmZGV2X3ByaXYtPnJpbmdbVkNTXS5pcnFfcXVldWUpOwogCQlpZiAoSEFTX0JMVChkZXYpKQotCQkJd2FrZV91cF9hbGwoJmRldl9wcml2LT5ibHRfcmluZy5pcnFfcXVldWUpOworCQkJd2FrZV91cF9hbGwoJmRldl9wcml2LT5yaW5nW0JDU10uaXJxX3F1ZXVlKTsKIAl9CiAKIAlxdWV1ZV93b3JrKGRldl9wcml2LT53cSwgJmRldl9wcml2LT5lcnJvcl93b3JrKTsKQEAgLTg5OSw3ICsxMDM2LDcgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBkZXZfcHJpdi0+cGlwZV90b19jcnRjX21hcHBpbmdbcGlwZV07CiAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCXN0cnVjdCBpbnRlbF91bnBpbl93b3JrICp3b3JrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJYm9vbCBzdGFsbF9kZXRlY3RlZDsKQEAgLTkxOCwxMyArMTA1NSwxMyBAQAogCX0KIAogCS8qIFBvdGVudGlhbCBzdGFsbCAtIGlmIHdlIHNlZSB0aGF0IHRoZSBmbGlwIGhhcyBoYXBwZW5lZCwgYXNzdW1lIGEgbWlzc2VkIGludGVycnVwdCAqLwotCW9ial9wcml2ID0gdG9faW50ZWxfYm8od29yay0+cGVuZGluZ19mbGlwX29iaik7CisJb2JqID0gd29yay0+cGVuZGluZ19mbGlwX29iajsKIAlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkgewogCQlpbnQgZHNwc3VyZiA9IGludGVsX2NydGMtPnBsYW5lID09IDAgPyBEU1BBU1VSRiA6IERTUEJTVVJGOwotCQlzdGFsbF9kZXRlY3RlZCA9IEk5MTVfUkVBRChkc3BzdXJmKSA9PSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKwkJc3RhbGxfZGV0ZWN0ZWQgPSBJOTE1X1JFQUQoZHNwc3VyZikgPT0gb2JqLT5ndHRfb2Zmc2V0OwogCX0gZWxzZSB7CiAJCWludCBkc3BhZGRyID0gaW50ZWxfY3J0Yy0+cGxhbmUgPT0gMCA/IERTUEFBRERSIDogRFNQQkFERFI7Ci0JCXN0YWxsX2RldGVjdGVkID0gSTkxNV9SRUFEKGRzcGFkZHIpID09IChvYmpfcHJpdi0+Z3R0X29mZnNldCArCisJCXN0YWxsX2RldGVjdGVkID0gSTkxNV9SRUFEKGRzcGFkZHIpID09IChvYmotPmd0dF9vZmZzZXQgKwogCQkJCQkJCWNydGMtPnkgKiBjcnRjLT5mYi0+cGl0Y2ggKwogCQkJCQkJCWNydGMtPnggKiBjcnRjLT5mYi0+Yml0c19wZXJfcGl4ZWwvOCk7CiAJfQpAQCAtOTcwLDcgKzExMDcsNyBAQAogCQkgKiBJdCBkb2Vzbid0IHNldCB0aGUgYml0IGluIGlpciBhZ2FpbiwgYnV0IGl0IHN0aWxsIHByb2R1Y2VzCiAJCSAqIGludGVycnVwdHMgKGZvciBub24tTVNJKS4KIAkJICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CiAJCXBpcGVhX3N0YXRzID0gSTkxNV9SRUFEKFBJUEVBU1RBVCk7CiAJCXBpcGViX3N0YXRzID0gSTkxNV9SRUFEKFBJUEVCU1RBVCk7CiAKQEAgLTk5Myw3ICsxMTMwLDcgQEAKIAkJCUk5MTVfV1JJVEUoUElQRUJTVEFULCBwaXBlYl9zdGF0cyk7CiAJCQlpcnFfcmVjZWl2ZWQgPSAxOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOwogCiAJCWlmICghaXJxX3JlY2VpdmVkKQogCQkJYnJlYWs7CkBAIC0xMDI2LDkgKzExNjMsOSBAQAogCQl9CiAKIAkJaWYgKGlpciAmIEk5MTVfVVNFUl9JTlRFUlJVUFQpCi0JCQlub3RpZnlfcmluZyhkZXYsICZkZXZfcHJpdi0+cmVuZGVyX3JpbmcpOwotCQlpZiAoSEFTX0JTRChkZXYpICYmIChpaXIgJiBJOTE1X0JTRF9VU0VSX0lOVEVSUlVQVCkpCi0JCQlub3RpZnlfcmluZyhkZXYsICZkZXZfcHJpdi0+YnNkX3JpbmcpOworCQkJbm90aWZ5X3JpbmcoZGV2LCAmZGV2X3ByaXYtPnJpbmdbUkNTXSk7CisJCWlmIChpaXIgJiBJOTE1X0JTRF9VU0VSX0lOVEVSUlVQVCkKKwkJCW5vdGlmeV9yaW5nKGRldiwgJmRldl9wcml2LT5yaW5nW1ZDU10pOwogCiAJCWlmIChpaXIgJiBJOTE1X0RJU1BMQVlfUExBTkVfQV9GTElQX1BFTkRJTkdfSU5URVJSVVBUKSB7CiAJCQlpbnRlbF9wcmVwYXJlX3BhZ2VfZmxpcChkZXYsIDApOwpAQCAtMTEwMSwxMiArMTIzOCwxMyBAQAogCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikKIAkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyOwogCi0JQkVHSU5fTFBfUklORyg0KTsKLQlPVVRfUklORyhNSV9TVE9SRV9EV09SRF9JTkRFWCk7Ci0JT1VUX1JJTkcoSTkxNV9CUkVBRENSVU1CX0lOREVYIDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKLQlPVVRfUklORyhkZXZfcHJpdi0+Y291bnRlcik7Ci0JT1VUX1JJTkcoTUlfVVNFUl9JTlRFUlJVUFQpOwotCUFEVkFOQ0VfTFBfUklORygpOworCWlmIChCRUdJTl9MUF9SSU5HKDQpID09IDApIHsKKwkJT1VUX1JJTkcoTUlfU1RPUkVfRFdPUkRfSU5ERVgpOworCQlPVVRfUklORyhJOTE1X0JSRUFEQ1JVTUJfSU5ERVggPDwgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQpOworCQlPVVRfUklORyhkZXZfcHJpdi0+Y291bnRlcik7CisJCU9VVF9SSU5HKE1JX1VTRVJfSU5URVJSVVBUKTsKKwkJQURWQU5DRV9MUF9SSU5HKCk7CisJfQogCiAJcmV0dXJuIGRldl9wcml2LT5jb3VudGVyOwogfQpAQCAtMTExNCwxMiArMTI1MiwxMSBAQAogdm9pZCBpOTE1X3RyYWNlX2lycV9nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHNlcW5vKQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyZW5kZXJfcmluZyA9ICZkZXZfcHJpdi0+cmVuZGVyX3Jpbmc7CisJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nID0gTFBfUklORyhkZXZfcHJpdik7CiAKLQlpZiAoZGV2X3ByaXYtPnRyYWNlX2lycV9zZXFubyA9PSAwKQotCQlyZW5kZXJfcmluZy0+dXNlcl9pcnFfZ2V0KGRldiwgcmVuZGVyX3JpbmcpOwotCi0JZGV2X3ByaXYtPnRyYWNlX2lycV9zZXFubyA9IHNlcW5vOworCWlmIChkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID09IDAgJiYKKwkgICAgcmluZy0+aXJxX2dldChyaW5nKSkKKwkJZGV2X3ByaXYtPnRyYWNlX2lycV9zZXFubyA9IHNlcW5vOwogfQogCiBzdGF0aWMgaW50IGk5MTVfd2FpdF9pcnEoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBpcnFfbnIpCkBAIC0xMTI3LDcgKzEyNjQsNyBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IGRldi0+cHJpbWFyeS0+bWFzdGVyLT5kcml2ZXJfcHJpdjsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJlbmRlcl9yaW5nID0gJmRldl9wcml2LT5yZW5kZXJfcmluZzsKKwlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcgPSBMUF9SSU5HKGRldl9wcml2KTsKIAogCURSTV9ERUJVR19EUklWRVIoImlycV9ucj0lZCBicmVhZGNydW1iPSVkXG4iLCBpcnFfbnIsCiAJCSAgUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSk7CkBAIC0xMTQxLDEwICsxMjc4LDEyIEBACiAJaWYgKG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2KQogCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9XQUlUOwogCi0JcmVuZGVyX3JpbmctPnVzZXJfaXJxX2dldChkZXYsIHJlbmRlcl9yaW5nKTsKLQlEUk1fV0FJVF9PTihyZXQsIGRldl9wcml2LT5yZW5kZXJfcmluZy5pcnFfcXVldWUsIDMgKiBEUk1fSFosCi0JCSAgICBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpID49IGlycV9ucik7Ci0JcmVuZGVyX3JpbmctPnVzZXJfaXJxX3B1dChkZXYsIHJlbmRlcl9yaW5nKTsKKwlyZXQgPSAtRU5PREVWOworCWlmIChyaW5nLT5pcnFfZ2V0KHJpbmcpKSB7CisJCURSTV9XQUlUX09OKHJldCwgcmluZy0+aXJxX3F1ZXVlLCAzICogRFJNX0haLAorCQkJICAgIFJFQURfQlJFQURDUlVNQihkZXZfcHJpdikgPj0gaXJxX25yKTsKKwkJcmluZy0+aXJxX3B1dChyaW5nKTsKKwl9CiAKIAlpZiAocmV0ID09IC1FQlVTWSkgewogCQlEUk1fRVJST1IoIkVCVVNZIC0tIHJlYzogJWQgZW1pdHRlZDogJWRcbiIsCkBAIC0xMTYzLDcgKzEzMDIsNyBAQAogCWRybV9pOTE1X2lycV9lbWl0X3QgKmVtaXQgPSBkYXRhOwogCWludCByZXN1bHQ7CiAKLQlpZiAoIWRldl9wcml2IHx8ICFkZXZfcHJpdi0+cmVuZGVyX3JpbmcudmlydHVhbF9zdGFydCkgeworCWlmICghZGV2X3ByaXYgfHwgIUxQX1JJTkcoZGV2X3ByaXYpLT52aXJ0dWFsX3N0YXJ0KSB7CiAJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMjA5LDkgKzEzNDgsOSBAQAogCWlmICghaTkxNV9waXBlX2VuYWJsZWQoZGV2LCBwaXBlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2ssIGlycWZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CiAJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKLQkJaXJvbmxha2VfZW5hYmxlX2Rpc3BsYXlfaXJxKGRldl9wcml2LCAocGlwZSA9PSAwKSA/IAorCQlpcm9ubGFrZV9lbmFibGVfZGlzcGxheV9pcnEoZGV2X3ByaXYsIChwaXBlID09IDApID8KIAkJCQkJICAgIERFX1BJUEVBX1ZCTEFOSzogREVfUElQRUJfVkJMQU5LKTsKIAllbHNlIGlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KQogCQlpOTE1X2VuYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgcGlwZSwKQEAgLTEyMTksNyArMTM1OCw3IEBACiAJZWxzZQogCQlpOTE1X2VuYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgcGlwZSwKIAkJCQkgICAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMzEsMTUgKzEzNzAsMTUgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2ssIGlycWZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CiAJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKLQkJaXJvbmxha2VfZGlzYWJsZV9kaXNwbGF5X2lycShkZXZfcHJpdiwgKHBpcGUgPT0gMCkgPyAKKwkJaXJvbmxha2VfZGlzYWJsZV9kaXNwbGF5X2lycShkZXZfcHJpdiwgKHBpcGUgPT0gMCkgPwogCQkJCQkgICAgIERFX1BJUEVBX1ZCTEFOSzogREVfUElQRUJfVkJMQU5LKTsKIAllbHNlCiAJCWk5MTVfZGlzYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgcGlwZSwKIAkJCQkgICAgICBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFIHwKIAkJCQkgICAgICBQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOwogfQogCiB2b2lkIGk5MTVfZW5hYmxlX2ludGVycnVwdCAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTEzMDYsMTIgKzE0NDUsNTAgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqCi1pOTE1X2dldF90YWlsX3JlcXVlc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3N0YXRpYyB1MzIKK3JpbmdfbGFzdF9zZXFubyhzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCiB7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JcmV0dXJuIGxpc3RfZW50cnkoZGV2X3ByaXYtPnJlbmRlcl9yaW5nLnJlcXVlc3RfbGlzdC5wcmV2LAotCQkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0LCBsaXN0KTsKKwlyZXR1cm4gbGlzdF9lbnRyeShyaW5nLT5yZXF1ZXN0X2xpc3QucHJldiwKKwkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0LCBsaXN0KS0+c2Vxbm87Cit9CisKK3N0YXRpYyBib29sIGk5MTVfaGFuZ2NoZWNrX3JpbmdfaWRsZShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsIGJvb2wgKmVycikKK3sKKwlpZiAobGlzdF9lbXB0eSgmcmluZy0+cmVxdWVzdF9saXN0KSB8fAorCSAgICBpOTE1X3NlcW5vX3Bhc3NlZChyaW5nLT5nZXRfc2Vxbm8ocmluZyksIHJpbmdfbGFzdF9zZXFubyhyaW5nKSkpIHsKKwkJLyogSXNzdWUgYSB3YWtlLXVwIHRvIGNhdGNoIHN0dWNrIGgvdy4gKi8KKwkJaWYgKHJpbmctPndhaXRpbmdfc2Vxbm8gJiYgd2FpdHF1ZXVlX2FjdGl2ZSgmcmluZy0+aXJxX3F1ZXVlKSkgeworCQkJRFJNX0VSUk9SKCJIYW5nY2hlY2sgdGltZXIgZWxhcHNlZC4uLiAlcyBpZGxlIFt3YWl0aW5nIG9uICVkLCBhdCAlZF0sIG1pc3NlZCBJUlE/XG4iLAorCQkJCSAgcmluZy0+bmFtZSwKKwkJCQkgIHJpbmctPndhaXRpbmdfc2Vxbm8sCisJCQkJICByaW5nLT5nZXRfc2Vxbm8ocmluZykpOworCQkJd2FrZV91cF9hbGwoJnJpbmctPmlycV9xdWV1ZSk7CisJCQkqZXJyID0gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBraWNrX3Jpbmcoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgdG1wID0gSTkxNV9SRUFEX0NUTChyaW5nKTsKKwlpZiAodG1wICYgUklOR19XQUlUKSB7CisJCURSTV9FUlJPUigiS2lja2luZyBzdHVjayB3YWl0IG9uICVzXG4iLAorCQkJICByaW5nLT5uYW1lKTsKKwkJSTkxNV9XUklURV9DVEwocmluZywgdG1wKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCWlmIChJU19HRU42KGRldikgJiYKKwkgICAgKHRtcCAmIFJJTkdfV0FJVF9TRU1BUEhPUkUpKSB7CisJCURSTV9FUlJPUigiS2lja2luZyBzdHVjayBzZW1hcGhvcmUgb24gJXNcbiIsCisJCQkgIHJpbmctPm5hbWUpOworCQlJOTE1X1dSSVRFX0NUTChyaW5nLCB0bXApOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOwogfQogCiAvKioKQEAgLTEzMjUsNiArMTUwMiwxNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAoc3RydWN0IGRybV9kZXZpY2UgKilkYXRhOwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IGFjdGhkLCBpbnN0ZG9uZSwgaW5zdGRvbmUxOworCWJvb2wgZXJyID0gZmFsc2U7CisKKwkvKiBJZiBhbGwgd29yayBpcyBkb25lIHRoZW4gQUNUSEQgY2xlYXJseSBoYXNuJ3QgYWR2YW5jZWQuICovCisJaWYgKGk5MTVfaGFuZ2NoZWNrX3JpbmdfaWRsZSgmZGV2X3ByaXYtPnJpbmdbUkNTXSwgJmVycikgJiYKKwkgICAgaTkxNV9oYW5nY2hlY2tfcmluZ19pZGxlKCZkZXZfcHJpdi0+cmluZ1tWQ1NdLCAmZXJyKSAmJgorCSAgICBpOTE1X2hhbmdjaGVja19yaW5nX2lkbGUoJmRldl9wcml2LT5yaW5nW0JDU10sICZlcnIpKSB7CisJCWRldl9wcml2LT5oYW5nY2hlY2tfY291bnQgPSAwOworCQlpZiAoZXJyKQorCQkJZ290byByZXBlYXQ7CisJCXJldHVybjsKKwl9CiAKIAlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA0KSB7CiAJCWFjdGhkID0gSTkxNV9SRUFEKEFDVEhEKTsKQEAgLTEzMzYsMzggKzE1MjQsNiBAQAogCQlpbnN0ZG9uZTEgPSBJOTE1X1JFQUQoSU5TVERPTkUxKTsKIAl9CiAKLQkvKiBJZiBhbGwgd29yayBpcyBkb25lIHRoZW4gQUNUSEQgY2xlYXJseSBoYXNuJ3QgYWR2YW5jZWQuICovCi0JaWYgKGxpc3RfZW1wdHkoJmRldl9wcml2LT5yZW5kZXJfcmluZy5yZXF1ZXN0X2xpc3QpIHx8Ci0JCWk5MTVfc2Vxbm9fcGFzc2VkKGRldl9wcml2LT5yZW5kZXJfcmluZy5nZXRfc2Vxbm8oZGV2LCAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nKSwKLQkJCQkgIGk5MTVfZ2V0X3RhaWxfcmVxdWVzdChkZXYpLT5zZXFubykpIHsKLQkJYm9vbCBtaXNzZWRfd2FrZXVwID0gZmFsc2U7Ci0KLQkJZGV2X3ByaXYtPmhhbmdjaGVja19jb3VudCA9IDA7Ci0KLQkJLyogSXNzdWUgYSB3YWtlLXVwIHRvIGNhdGNoIHN0dWNrIGgvdy4gKi8KLQkJaWYgKGRldl9wcml2LT5yZW5kZXJfcmluZy53YWl0aW5nX2dlbV9zZXFubyAmJgotCQkgICAgd2FpdHF1ZXVlX2FjdGl2ZSgmZGV2X3ByaXYtPnJlbmRlcl9yaW5nLmlycV9xdWV1ZSkpIHsKLQkJCXdha2VfdXBfYWxsKCZkZXZfcHJpdi0+cmVuZGVyX3JpbmcuaXJxX3F1ZXVlKTsKLQkJCW1pc3NlZF93YWtldXAgPSB0cnVlOwotCQl9Ci0KLQkJaWYgKGRldl9wcml2LT5ic2RfcmluZy53YWl0aW5nX2dlbV9zZXFubyAmJgotCQkgICAgd2FpdHF1ZXVlX2FjdGl2ZSgmZGV2X3ByaXYtPmJzZF9yaW5nLmlycV9xdWV1ZSkpIHsKLQkJCXdha2VfdXBfYWxsKCZkZXZfcHJpdi0+YnNkX3JpbmcuaXJxX3F1ZXVlKTsKLQkJCW1pc3NlZF93YWtldXAgPSB0cnVlOwotCQl9Ci0KLQkJaWYgKGRldl9wcml2LT5ibHRfcmluZy53YWl0aW5nX2dlbV9zZXFubyAmJgotCQkgICAgd2FpdHF1ZXVlX2FjdGl2ZSgmZGV2X3ByaXYtPmJsdF9yaW5nLmlycV9xdWV1ZSkpIHsKLQkJCXdha2VfdXBfYWxsKCZkZXZfcHJpdi0+Ymx0X3JpbmcuaXJxX3F1ZXVlKTsKLQkJCW1pc3NlZF93YWtldXAgPSB0cnVlOwotCQl9Ci0KLQkJaWYgKG1pc3NlZF93YWtldXApCi0JCQlEUk1fRVJST1IoIkhhbmdjaGVjayB0aW1lciBlbGFwc2VkLi4uIEdQVSBpZGxlLCBtaXNzZWQgSVJRLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KIAlpZiAoZGV2X3ByaXYtPmxhc3RfYWN0aGQgPT0gYWN0aGQgJiYKIAkgICAgZGV2X3ByaXYtPmxhc3RfaW5zdGRvbmUgPT0gaW5zdGRvbmUgJiYKIAkgICAgZGV2X3ByaXYtPmxhc3RfaW5zdGRvbmUxID09IGluc3Rkb25lMSkgewpAQCAtMTM4MCwxMiArMTUzNiwxNyBAQAogCQkJCSAqIGFuZCBicmVhayB0aGUgaGFuZy4gVGhpcyBzaG91bGQgd29yayBvbgogCQkJCSAqIGFsbCBidXQgdGhlIHNlY29uZCBnZW5lcmF0aW9uIGNoaXBzZXRzLgogCQkJCSAqLwotCQkJCXUzMiB0bXAgPSBJOTE1X1JFQUQoUFJCMF9DVEwpOwotCQkJCWlmICh0bXAgJiBSSU5HX1dBSVQpIHsKLQkJCQkJSTkxNV9XUklURShQUkIwX0NUTCwgdG1wKTsKLQkJCQkJUE9TVElOR19SRUFEKFBSQjBfQ1RMKTsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJfQorCisJCQkJaWYgKGtpY2tfcmluZygmZGV2X3ByaXYtPnJpbmdbUkNTXSkpCisJCQkJCWdvdG8gcmVwZWF0OworCisJCQkJaWYgKEhBU19CU0QoZGV2KSAmJgorCQkJCSAgICBraWNrX3JpbmcoJmRldl9wcml2LT5yaW5nW1ZDU10pKQorCQkJCQlnb3RvIHJlcGVhdDsKKworCQkJCWlmIChIQVNfQkxUKGRldikgJiYKKwkJCQkgICAga2lja19yaW5nKCZkZXZfcHJpdi0+cmluZ1tCQ1NdKSkKKwkJCQkJZ290byByZXBlYXQ7CiAJCQl9CiAKIAkJCWk5MTVfaGFuZGxlX2Vycm9yKGRldiwgdHJ1ZSk7CkBAIC0xMzk5LDcgKzE1NjAsNyBAQAogCQlkZXZfcHJpdi0+bGFzdF9pbnN0ZG9uZTEgPSBpbnN0ZG9uZTE7CiAJfQogCi1vdXQ6CityZXBlYXQ6CiAJLyogUmVzZXQgdGltZXIgY2FzZSBjaGlwIGhhbmdzIHdpdGhvdXQgYW5vdGhlciByZXF1ZXN0IGJlaW5nIGFkZGVkICovCiAJbW9kX3RpbWVyKCZkZXZfcHJpdi0+aGFuZ2NoZWNrX3RpbWVyLAogCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKERSTV9JOTE1X0hBTkdDSEVDS19QRVJJT0QpKTsKQEAgLTE0MTcsMTcgKzE1NzgsMTcgQEAKIAogCUk5MTVfV1JJVEUoREVJTVIsIDB4ZmZmZmZmZmYpOwogCUk5MTVfV1JJVEUoREVJRVIsIDB4MCk7Ci0JKHZvaWQpIEk5MTVfUkVBRChERUlFUik7CisJUE9TVElOR19SRUFEKERFSUVSKTsKIAogCS8qIGFuZCBHVCAqLwogCUk5MTVfV1JJVEUoR1RJTVIsIDB4ZmZmZmZmZmYpOwogCUk5MTVfV1JJVEUoR1RJRVIsIDB4MCk7Ci0JKHZvaWQpIEk5MTVfUkVBRChHVElFUik7CisJUE9TVElOR19SRUFEKEdUSUVSKTsKIAogCS8qIHNvdXRoIGRpc3BsYXkgaXJxICovCiAJSTkxNV9XUklURShTREVJTVIsIDB4ZmZmZmZmZmYpOwogCUk5MTVfV1JJVEUoU0RFSUVSLCAweDApOwotCSh2b2lkKSBJOTE1X1JFQUQoU0RFSUVSKTsKKwlQT1NUSU5HX1JFQUQoU0RFSUVSKTsKIH0KIAogc3RhdGljIGludCBpcm9ubGFrZV9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTE0MzYsMzggKzE1OTcsMzQgQEAKIAkvKiBlbmFibGUga2luZCBvZiBpbnRlcnJ1cHRzIGFsd2F5cyBlbmFibGVkICovCiAJdTMyIGRpc3BsYXlfbWFzayA9IERFX01BU1RFUl9JUlFfQ09OVFJPTCB8IERFX0dTRSB8IERFX1BDSF9FVkVOVCB8CiAJCQkgICBERV9QTEFORUFfRkxJUF9ET05FIHwgREVfUExBTkVCX0ZMSVBfRE9ORTsKLQl1MzIgcmVuZGVyX21hc2sgPSBHVF9QSVBFX05PVElGWSB8IEdUX0JTRF9VU0VSX0lOVEVSUlVQVDsKKwl1MzIgcmVuZGVyX2lycXM7CiAJdTMyIGhvdHBsdWdfbWFzazsKIAotCWRldl9wcml2LT5pcnFfbWFza19yZWcgPSB+ZGlzcGxheV9tYXNrOwotCWRldl9wcml2LT5kZV9pcnFfZW5hYmxlX3JlZyA9IGRpc3BsYXlfbWFzayB8IERFX1BJUEVBX1ZCTEFOSyB8IERFX1BJUEVCX1ZCTEFOSzsKKwlkZXZfcHJpdi0+aXJxX21hc2sgPSB+ZGlzcGxheV9tYXNrOwogCiAJLyogc2hvdWxkIGFsd2F5cyBjYW4gZ2VuZXJhdGUgaXJxICovCiAJSTkxNV9XUklURShERUlJUiwgSTkxNV9SRUFEKERFSUlSKSk7Ci0JSTkxNV9XUklURShERUlNUiwgZGV2X3ByaXYtPmlycV9tYXNrX3JlZyk7Ci0JSTkxNV9XUklURShERUlFUiwgZGV2X3ByaXYtPmRlX2lycV9lbmFibGVfcmVnKTsKLQkodm9pZCkgSTkxNV9SRUFEKERFSUVSKTsKKwlJOTE1X1dSSVRFKERFSU1SLCBkZXZfcHJpdi0+aXJxX21hc2spOworCUk5MTVfV1JJVEUoREVJRVIsIGRpc3BsYXlfbWFzayB8IERFX1BJUEVBX1ZCTEFOSyB8IERFX1BJUEVCX1ZCTEFOSyk7CisJUE9TVElOR19SRUFEKERFSUVSKTsKIAotCWlmIChJU19HRU42KGRldikpIHsKLQkJcmVuZGVyX21hc2sgPQotCQkJR1RfUElQRV9OT1RJRlkgfAotCQkJR1RfR0VONl9CU0RfVVNFUl9JTlRFUlJVUFQgfAotCQkJR1RfQkxUX1VTRVJfSU5URVJSVVBUOwotCX0KLQotCWRldl9wcml2LT5ndF9pcnFfbWFza19yZWcgPSB+cmVuZGVyX21hc2s7Ci0JZGV2X3ByaXYtPmd0X2lycV9lbmFibGVfcmVnID0gcmVuZGVyX21hc2s7CisJZGV2X3ByaXYtPmd0X2lycV9tYXNrID0gfjA7CiAKIAlJOTE1X1dSSVRFKEdUSUlSLCBJOTE1X1JFQUQoR1RJSVIpKTsKLQlJOTE1X1dSSVRFKEdUSU1SLCBkZXZfcHJpdi0+Z3RfaXJxX21hc2tfcmVnKTsKLQlpZiAoSVNfR0VONihkZXYpKSB7Ci0JCUk5MTVfV1JJVEUoR0VONl9SRU5ERVJfSU1SLCB+R0VONl9SRU5ERVJfUElQRV9DT05UUk9MX05PVElGWV9JTlRFUlJVUFQpOwotCQlJOTE1X1dSSVRFKEdFTjZfQlNEX0lNUiwgfkdFTjZfQlNEX0lNUl9VU0VSX0lOVEVSUlVQVCk7Ci0JCUk5MTVfV1JJVEUoR0VONl9CTElUVEVSX0lNUiwgfkdFTjZfQkxJVFRFUl9VU0VSX0lOVEVSUlVQVCk7Ci0JfQorCUk5MTVfV1JJVEUoR1RJTVIsIGRldl9wcml2LT5ndF9pcnFfbWFzayk7CiAKLQlJOTE1X1dSSVRFKEdUSUVSLCBkZXZfcHJpdi0+Z3RfaXJxX2VuYWJsZV9yZWcpOwotCSh2b2lkKSBJOTE1X1JFQUQoR1RJRVIpOworCWlmIChJU19HRU42KGRldikpCisJCXJlbmRlcl9pcnFzID0KKwkJCUdUX1VTRVJfSU5URVJSVVBUIHwKKwkJCUdUX0dFTjZfQlNEX1VTRVJfSU5URVJSVVBUIHwKKwkJCUdUX0JMVF9VU0VSX0lOVEVSUlVQVDsKKwllbHNlCisJCXJlbmRlcl9pcnFzID0KKwkJCUdUX1VTRVJfSU5URVJSVVBUIHwKKwkJCUdUX1BJUEVfTk9USUZZIHwKKwkJCUdUX0JTRF9VU0VSX0lOVEVSUlVQVDsKKwlJOTE1X1dSSVRFKEdUSUVSLCByZW5kZXJfaXJxcyk7CisJUE9TVElOR19SRUFEKEdUSUVSKTsKIAogCWlmIChIQVNfUENIX0NQVChkZXYpKSB7CiAJCWhvdHBsdWdfbWFzayA9IFNERV9DUlRfSE9UUExVR19DUFQgfCBTREVfUE9SVEJfSE9UUExVR19DUFQgIHwKQEAgLTE0NzUsMTUgKzE2MzIsMTcgQEAKIAl9IGVsc2UgewogCQlob3RwbHVnX21hc2sgPSBTREVfQ1JUX0hPVFBMVUcgfCBTREVfUE9SVEJfSE9UUExVRyB8CiAJCQkgICAgICAgU0RFX1BPUlRDX0hPVFBMVUcgfCBTREVfUE9SVERfSE9UUExVRzsKKwkJaG90cGx1Z19tYXNrIHw9IFNERV9BVVhfTUFTSyB8IFNERV9GRElfTUFTSyB8IFNERV9UUkFOU19NQVNLOworCQlJOTE1X1dSSVRFKEZESV9SWEFfSU1SLCAwKTsKKwkJSTkxNV9XUklURShGRElfUlhCX0lNUiwgMCk7CiAJfQogCi0JZGV2X3ByaXYtPnBjaF9pcnFfbWFza19yZWcgPSB+aG90cGx1Z19tYXNrOwotCWRldl9wcml2LT5wY2hfaXJxX2VuYWJsZV9yZWcgPSBob3RwbHVnX21hc2s7CisJZGV2X3ByaXYtPnBjaF9pcnFfbWFzayA9IH5ob3RwbHVnX21hc2s7CiAKIAlJOTE1X1dSSVRFKFNERUlJUiwgSTkxNV9SRUFEKFNERUlJUikpOwotCUk5MTVfV1JJVEUoU0RFSU1SLCBkZXZfcHJpdi0+cGNoX2lycV9tYXNrX3JlZyk7Ci0JSTkxNV9XUklURShTREVJRVIsIGRldl9wcml2LT5wY2hfaXJxX2VuYWJsZV9yZWcpOwotCSh2b2lkKSBJOTE1X1JFQUQoU0RFSUVSKTsKKwlJOTE1X1dSSVRFKFNERUlNUiwgZGV2X3ByaXYtPnBjaF9pcnFfbWFzayk7CisJSTkxNV9XUklURShTREVJRVIsIGhvdHBsdWdfbWFzayk7CisJUE9TVElOR19SRUFEKFNERUlFUik7CiAKIAlpZiAoSVNfSVJPTkxBS0VfTShkZXYpKSB7CiAJCS8qIENsZWFyICYgZW5hYmxlIFBDVSBldmVudCBpbnRlcnJ1cHRzICovCkBAIC0xNTE5LDcgKzE2NzgsNyBAQAogCUk5MTVfV1JJVEUoUElQRUJTVEFULCAwKTsKIAlJOTE1X1dSSVRFKElNUiwgMHhmZmZmZmZmZik7CiAJSTkxNV9XUklURShJRVIsIDB4MCk7Ci0JKHZvaWQpIEk5MTVfUkVBRChJRVIpOworCVBPU1RJTkdfUkVBRChJRVIpOwogfQogCiAvKgpAQCAtMTUzMiwxMSArMTY5MSwxMSBAQAogCXUzMiBlbmFibGVfbWFzayA9IEk5MTVfSU5URVJSVVBUX0VOQUJMRV9GSVggfCBJOTE1X0lOVEVSUlVQVF9FTkFCTEVfVkFSOwogCXUzMiBlcnJvcl9tYXNrOwogCi0JRFJNX0lOSVRfV0FJVFFVRVVFKCZkZXZfcHJpdi0+cmVuZGVyX3JpbmcuaXJxX3F1ZXVlKTsKKwlEUk1fSU5JVF9XQUlUUVVFVUUoJmRldl9wcml2LT5yaW5nW1JDU10uaXJxX3F1ZXVlKTsKIAlpZiAoSEFTX0JTRChkZXYpKQotCQlEUk1fSU5JVF9XQUlUUVVFVUUoJmRldl9wcml2LT5ic2RfcmluZy5pcnFfcXVldWUpOworCQlEUk1fSU5JVF9XQUlUUVVFVUUoJmRldl9wcml2LT5yaW5nW1ZDU10uaXJxX3F1ZXVlKTsKIAlpZiAoSEFTX0JMVChkZXYpKQotCQlEUk1fSU5JVF9XQUlUUVVFVUUoJmRldl9wcml2LT5ibHRfcmluZy5pcnFfcXVldWUpOworCQlEUk1fSU5JVF9XQUlUUVVFVUUoJmRldl9wcml2LT5yaW5nW0JDU10uaXJxX3F1ZXVlKTsKIAogCWRldl9wcml2LT52YmxhbmtfcGlwZSA9IERSTV9JOTE1X1ZCTEFOS19QSVBFX0EgfCBEUk1fSTkxNV9WQkxBTktfUElQRV9COwogCkBAIC0xNTQ0LDcgKzE3MDMsNyBAQAogCQlyZXR1cm4gaXJvbmxha2VfaXJxX3Bvc3RpbnN0YWxsKGRldik7CiAKIAkvKiBVbm1hc2sgdGhlIGludGVycnVwdHMgdGhhdCB3ZSBhbHdheXMgd2FudCBvbi4gKi8KLQlkZXZfcHJpdi0+aXJxX21hc2tfcmVnID0gfkk5MTVfSU5URVJSVVBUX0VOQUJMRV9GSVg7CisJZGV2X3ByaXYtPmlycV9tYXNrID0gfkk5MTVfSU5URVJSVVBUX0VOQUJMRV9GSVg7CiAKIAlkZXZfcHJpdi0+cGlwZXN0YXRbMF0gPSAwOwogCWRldl9wcml2LT5waXBlc3RhdFsxXSA9IDA7CkBAIC0xNTUzLDcgKzE3MTIsNyBAQAogCQkvKiBFbmFibGUgaW4gSUVSLi4uICovCiAJCWVuYWJsZV9tYXNrIHw9IEk5MTVfRElTUExBWV9QT1JUX0lOVEVSUlVQVDsKIAkJLyogYW5kIHVubWFzayBpbiBJTVIgKi8KLQkJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyAmPSB+STkxNV9ESVNQTEFZX1BPUlRfSU5URVJSVVBUOworCQlkZXZfcHJpdi0+aXJxX21hc2sgJj0gfkk5MTVfRElTUExBWV9QT1JUX0lOVEVSUlVQVDsKIAl9CiAKIAkvKgpAQCAtMTU3MSw5ICsxNzMwLDkgQEAKIAl9CiAJSTkxNV9XUklURShFTVIsIGVycm9yX21hc2spOwogCi0JSTkxNV9XUklURShJTVIsIGRldl9wcml2LT5pcnFfbWFza19yZWcpOworCUk5MTVfV1JJVEUoSU1SLCBkZXZfcHJpdi0+aXJxX21hc2spOwogCUk5MTVfV1JJVEUoSUVSLCBlbmFibGVfbWFzayk7Ci0JKHZvaWQpIEk5MTVfUkVBRChJRVIpOworCVBPU1RJTkdfUkVBRChJRVIpOwogCiAJaWYgKEk5MTVfSEFTX0hPVFBMVUcoZGV2KSkgewogCQl1MzIgaG90cGx1Z19lbiA9IEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggY2I4ZjQzNC4uNDBhNDA3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC03OCw2ICs3OCwxMiBAQAogI2RlZmluZSAgR1JET01fUkVOREVSCSgxPDwyKQogI2RlZmluZSAgR1JET01fTUVESUEJKDM8PDIpCiAKKyNkZWZpbmUgR0VONl9HRFJTVAkweDk0MWMKKyNkZWZpbmUgIEdFTjZfR1JET01fRlVMTAkJKDEgPDwgMCkKKyNkZWZpbmUgIEdFTjZfR1JET01fUkVOREVSCQkoMSA8PCAxKQorI2RlZmluZSAgR0VONl9HUkRPTV9NRURJQQkJKDEgPDwgMikKKyNkZWZpbmUgIEdFTjZfR1JET01fQkxUCQkJKDEgPDwgMykKKwogLyogVkdBIHN0dWZmICovCiAKICNkZWZpbmUgVkdBX1NUMDFfTURBIDB4M2JhCkBAIC0xMzksNiArMTQ1LDggQEAKICNkZWZpbmUgICBNSV9FTkRfU0NFTkUJCSgxIDw8IDQpIC8qIGZsdXNoIGJpbm5lciBhbmQgaW5jciBzY2VuZSBjb3VudCAqLwogI2RlZmluZSAgIE1JX0lOVkFMSURBVEVfSVNQCSgxIDw8IDUpIC8qIGludmFsaWRhdGUgaW5kaXJlY3Qgc3RhdGUgcG9pbnRlcnMgKi8KICNkZWZpbmUgTUlfQkFUQ0hfQlVGRkVSX0VORAlNSV9JTlNUUigweDBhLCAwKQorI2RlZmluZSBNSV9TVVNQRU5EX0ZMVVNICU1JX0lOU1RSKDB4MGIsIDApCisjZGVmaW5lICAgTUlfU1VTUEVORF9GTFVTSF9FTgkoMTw8MCkKICNkZWZpbmUgTUlfUkVQT1JUX0hFQUQJCU1JX0lOU1RSKDB4MDcsIDApCiAjZGVmaW5lIE1JX09WRVJMQVlfRkxJUAkJTUlfSU5TVFIoMHgxMSwwKQogI2RlZmluZSAgIE1JX09WRVJMQVlfQ09OVElOVUUJKDB4MDw8MjEpCkBAIC0xNTMsMTcgKzE2MSwyOSBAQAogI2RlZmluZSAgIE1JX01NX1NQQUNFX1BIWVNJQ0FMCQkoMDw8OCkKICNkZWZpbmUgICBNSV9TQVZFX0VYVF9TVEFURV9FTgkJKDE8PDMpCiAjZGVmaW5lICAgTUlfUkVTVE9SRV9FWFRfU1RBVEVfRU4JKDE8PDIpCisjZGVmaW5lICAgTUlfRk9SQ0VfUkVTVE9SRQkJKDE8PDEpCiAjZGVmaW5lICAgTUlfUkVTVE9SRV9JTkhJQklUCQkoMTw8MCkKICNkZWZpbmUgTUlfU1RPUkVfRFdPUkRfSU1NCU1JX0lOU1RSKDB4MjAsIDEpCiAjZGVmaW5lICAgTUlfTUVNX1ZJUlRVQUwJKDEgPDwgMjIpIC8qIDk2NSsgb25seSAqLwogI2RlZmluZSBNSV9TVE9SRV9EV09SRF9JTkRFWAlNSV9JTlNUUigweDIxLCAxKQogI2RlZmluZSAgIE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUIDIKLSNkZWZpbmUgTUlfTE9BRF9SRUdJU1RFUl9JTU0JTUlfSU5TVFIoMHgyMiwgMSkKKy8qIE9mZmljaWFsIGludGVsIGRvY3MgYXJlIHNvbWV3aGF0IHNsb3BweSBjb25jZXJuaW5nIE1JX0xPQURfUkVHSVNURVJfSU1NOgorICogLSBBbHdheXMgaXNzdWUgYSBNSV9OT09QIF9iZWZvcmVfIHRoZSBNSV9MT0FEX1JFR0lTVEVSX0lNTSAtIG90aGVyd2lzZSBodworICogICBzaW1wbHkgaWdub3JlcyB0aGUgcmVnaXN0ZXIgbG9hZCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuCisgKiAtIE9uZSBjYW4gYWN0dWFsbHkgbG9hZCBhcmJpdHJhcnkgbWFueSBhcmJpdHJhcnkgcmVnaXN0ZXJzOiBTaW1wbHkgaXNzdWUgeAorICogICBhZGRyZXNzL3ZhbHVlIHBhaXJzLiBEb24ndCBvdmVyZHVlIGl0LCB0aG91Z2gsIHggPD0gMl40IG11c3QgaG9sZCEKKyAqLworI2RlZmluZSBNSV9MT0FEX1JFR0lTVEVSX0lNTSh4KQlNSV9JTlNUUigweDIyLCAyKngtMSkKICNkZWZpbmUgTUlfRkxVU0hfRFcJCU1JX0lOU1RSKDB4MjYsIDIpIC8qIGZvciBHRU42ICovCiAjZGVmaW5lIE1JX0JBVENIX0JVRkZFUgkJTUlfSU5TVFIoMHgzMCwgMSkKICNkZWZpbmUgICBNSV9CQVRDSF9OT05fU0VDVVJFCSgxKQogI2RlZmluZSAgIE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSAoMTw8OCkKICNkZWZpbmUgTUlfQkFUQ0hfQlVGRkVSX1NUQVJUCU1JX0lOU1RSKDB4MzEsIDApCisjZGVmaW5lIE1JX1NFTUFQSE9SRV9NQk9YCU1JX0lOU1RSKDB4MTYsIDEpIC8qIGdlbjYrICovCisjZGVmaW5lICBNSV9TRU1BUEhPUkVfR0xPQkFMX0dUVCAgICAoMTw8MjIpCisjZGVmaW5lICBNSV9TRU1BUEhPUkVfVVBEQVRFCSAgICAoMTw8MjEpCisjZGVmaW5lICBNSV9TRU1BUEhPUkVfQ09NUEFSRQkgICAgKDE8PDIwKQorI2RlZmluZSAgTUlfU0VNQVBIT1JFX1JFR0lTVEVSCSAgICAoMTw8MTgpCiAvKgogICogM0QgaW5zdHJ1Y3Rpb25zIHVzZWQgYnkgdGhlIGtlcm5lbAogICovCkBAIC0yNTYsMTAgKzI3Niw2IEBACiAgKiBJbnN0cnVjdGlvbiBhbmQgaW50ZXJydXB0IGNvbnRyb2wgcmVncwogICovCiAjZGVmaW5lIFBHVEJMX0VSCTB4MDIwMjQKLSNkZWZpbmUgUFJCMF9UQUlMCTB4MDIwMzAKLSNkZWZpbmUgUFJCMF9IRUFECTB4MDIwMzQKLSNkZWZpbmUgUFJCMF9TVEFSVAkweDAyMDM4Ci0jZGVmaW5lIFBSQjBfQ1RMCTB4MDIwM2MKICNkZWZpbmUgUkVOREVSX1JJTkdfQkFTRQkweDAyMDAwCiAjZGVmaW5lIEJTRF9SSU5HX0JBU0UJCTB4MDQwMDAKICNkZWZpbmUgR0VONl9CU0RfUklOR19CQVNFCTB4MTIwMDAKQEAgLTI2OCw5ICsyODQsMTQgQEAKICNkZWZpbmUgUklOR19IRUFEKGJhc2UpCQkoKGJhc2UpKzB4MzQpCiAjZGVmaW5lIFJJTkdfU1RBUlQoYmFzZSkJKChiYXNlKSsweDM4KQogI2RlZmluZSBSSU5HX0NUTChiYXNlKQkJKChiYXNlKSsweDNjKQorI2RlZmluZSBSSU5HX1NZTkNfMChiYXNlKQkoKGJhc2UpKzB4NDApCisjZGVmaW5lIFJJTkdfU1lOQ18xKGJhc2UpCSgoYmFzZSkrMHg0NCkKKyNkZWZpbmUgUklOR19NQVhfSURMRShiYXNlKQkoKGJhc2UpKzB4NTQpCiAjZGVmaW5lIFJJTkdfSFdTX1BHQShiYXNlKQkoKGJhc2UpKzB4ODApCiAjZGVmaW5lIFJJTkdfSFdTX1BHQV9HRU42KGJhc2UpCSgoYmFzZSkrMHgyMDgwKQogI2RlZmluZSBSSU5HX0FDVEhEKGJhc2UpCSgoYmFzZSkrMHg3NCkKKyNkZWZpbmUgUklOR19OT1BJRChiYXNlKQkoKGJhc2UpKzB4OTQpCisjZGVmaW5lIFJJTkdfSU1SKGJhc2UpCQkoKGJhc2UpKzB4YTgpCiAjZGVmaW5lICAgVEFJTF9BRERSCQkweDAwMUZGRkY4CiAjZGVmaW5lICAgSEVBRF9XUkFQX0NPVU5UCTB4RkZFMDAwMDAKICNkZWZpbmUgICBIRUFEX1dSQVBfT05FCQkweDAwMjAwMDAwCkBAIC0yODUsMTAgKzMwNiwxNyBAQAogI2RlZmluZSAgIFJJTkdfSU5WQUxJRAkJMHgwMDAwMDAwMAogI2RlZmluZSAgIFJJTkdfV0FJVF9JOFhYCSgxPDwwKSAvKiBnZW4yLCBQUkJ4X0hFQUQgKi8KICNkZWZpbmUgICBSSU5HX1dBSVQJCSgxPDwxMSkgLyogZ2VuMyssIFBSQnhfQ1RMICovCisjZGVmaW5lICAgUklOR19XQUlUX1NFTUFQSE9SRQkoMTw8MTApIC8qIGdlbjYrICovCisjaWYgMAorI2RlZmluZSBQUkIwX1RBSUwJMHgwMjAzMAorI2RlZmluZSBQUkIwX0hFQUQJMHgwMjAzNAorI2RlZmluZSBQUkIwX1NUQVJUCTB4MDIwMzgKKyNkZWZpbmUgUFJCMF9DVEwJMHgwMjAzYwogI2RlZmluZSBQUkIxX1RBSUwJMHgwMjA0MCAvKiA5MTUrIG9ubHkgKi8KICNkZWZpbmUgUFJCMV9IRUFECTB4MDIwNDQgLyogOTE1KyBvbmx5ICovCiAjZGVmaW5lIFBSQjFfU1RBUlQJMHgwMjA0OCAvKiA5MTUrIG9ubHkgKi8KICNkZWZpbmUgUFJCMV9DVEwJMHgwMjA0YyAvKiA5MTUrIG9ubHkgKi8KKyNlbmRpZgogI2RlZmluZSBJUEVJUl9JOTY1CTB4MDIwNjQKICNkZWZpbmUgSVBFSFJfSTk2NQkweDAyMDY4CiAjZGVmaW5lIElOU1RET05FX0k5NjUJMHgwMjA2YwpAQCAtMzA1LDExICszMzMsNDIgQEAKICNkZWZpbmUgSU5TVERPTkUJMHgwMjA5MAogI2RlZmluZSBOT1BJRAkJMHgwMjA5NAogI2RlZmluZSBIV1NUQU0JCTB4MDIwOTgKKyNkZWZpbmUgVkNTX0lOU1RET05FCTB4MTIwNkMKKyNkZWZpbmUgVkNTX0lQRUlSCTB4MTIwNjQKKyNkZWZpbmUgVkNTX0lQRUhSCTB4MTIwNjgKKyNkZWZpbmUgVkNTX0FDVEhECTB4MTIwNzQKKyNkZWZpbmUgQkNTX0lOU1RET05FCTB4MjIwNkMKKyNkZWZpbmUgQkNTX0lQRUlSCTB4MjIwNjQKKyNkZWZpbmUgQkNTX0lQRUhSCTB4MjIwNjgKKyNkZWZpbmUgQkNTX0FDVEhECTB4MjIwNzQKKworI2RlZmluZSBFUlJPUl9HRU42CTB4MDQwYTAKKworLyogR000NSsgY2hpY2tlbiBiaXRzIC0tIGRlYnVnIHdvcmthcm91bmQgYml0cyB0aGF0IG1heSBiZSByZXF1aXJlZAorICogZm9yIHZhcmlvdXMgc29ydHMgb2YgY29ycmVjdCBiZWhhdmlvci4gIFRoZSB0b3AgMTYgYml0cyBvZiBlYWNoIGFyZQorICogdGhlIGVuYWJsZXMgZm9yIHdyaXRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbG93IGJpdC4KKyAqLworI2RlZmluZSBfM0RfQ0hJQ0tFTgkweDAyMDg0CisjZGVmaW5lIF8zRF9DSElDS0VOMgkweDAyMDhjCisvKiBEaXNhYmxlcyBwaXBlbGluaW5nIG9mIHJlYWQgZmx1c2hlcyBwYXN0IHRoZSBTRi1XSVogaW50ZXJmYWNlLgorICogUmVxdWlyZWQgb24gYWxsIElyb25sYWtlIHN0ZXBwaW5ncyBhY2NvcmRpbmcgdG8gdGhlIEItU3BlYywgYnV0IHRoZQorICogcGFydGljdWxhciBkYW5nZXIgb2Ygbm90IGRvaW5nIHNvIGlzIG5vdCBzcGVjaWZpZWQuCisgKi8KKyMgZGVmaW5lIF8zRF9DSElDS0VOMl9XTV9SRUFEX1BJUEVMSU5FRAkJCSgxIDw8IDE0KQorI2RlZmluZSBfM0RfQ0hJQ0tFTjMJMHgwMjA5MAogCiAjZGVmaW5lIE1JX01PREUJCTB4MDIwOWMKICMgZGVmaW5lIFZTX1RJTUVSX0RJU1BBVENICQkJCSgxIDw8IDYpCiAjIGRlZmluZSBNSV9GTFVTSF9FTkFCTEUJCQkJKDEgPDwgMTEpCiAKKyNkZWZpbmUgR0ZYX01PREUJMHgwMjUyMAorI2RlZmluZSAgIEdGWF9SVU5fTElTVF9FTkFCTEUJCSgxPDwxNSkKKyNkZWZpbmUgICBHRlhfVExCX0lOVkFMSURBVEVfQUxXQVlTCSgxPDwxMykKKyNkZWZpbmUgICBHRlhfU1VSRkFDRV9GQVVMVF9FTkFCTEUJKDE8PDEyKQorI2RlZmluZSAgIEdGWF9SRVBMQVlfTU9ERQkJKDE8PDExKQorI2RlZmluZSAgIEdGWF9QU01JX0dSQU5VTEFSSVRZCQkoMTw8MTApCisjZGVmaW5lICAgR0ZYX1BQR1RUX0VOQUJMRQkJKDE8PDkpCisKICNkZWZpbmUgU0NQRDAJCTB4MDIwOWMgLyogOTE1KyBvbmx5ICovCiAjZGVmaW5lIElFUgkJMHgwMjBhMAogI2RlZmluZSBJSVIJCTB4MDIwYTQKQEAgLTQ2MSw3ICs1MjAsNyBAQAogI2RlZmluZSAgIEdFTjZfQlNEX1NMRUVQX1BTTUlfQ09OVFJPTF9JRExFX0lORElDQVRPUgkJCSgxIDw8IDMpCiAKICNkZWZpbmUgR0VONl9CU0RfSU1SCQkJMHgxMjBhOAotI2RlZmluZSAgIEdFTjZfQlNEX0lNUl9VU0VSX0lOVEVSUlVQVAkoMSA8PCAxMikKKyNkZWZpbmUgICBHRU42X0JTRF9VU0VSX0lOVEVSUlVQVAkoMSA8PCAxMikKIAogI2RlZmluZSBHRU42X0JTRF9STkNJRAkJCTB4MTIxOTgKIApAQCAtNTQxLDYgKzYwMCwxOCBAQAogCiAjZGVmaW5lIElMS19ESVNQTEFZX0NISUNLRU4xCTB4NDIwMDAKICNkZWZpbmUgICBJTEtfRkJDUV9ESVMJCSgxPDwyMikKKyNkZWZpbmUgICBJTEtfUEFCU1RSRVRDSF9ESVMgCSgxPDwyMSkKKworCisvKgorICogRnJhbWVidWZmZXIgY29tcHJlc3Npb24gZm9yIFNhbmR5YnJpZGdlCisgKgorICogVGhlIGZvbGxvd2luZyB0d28gcmVnaXN0ZXJzIGFyZSBvZiB0eXBlIEdUVE1NQURSCisgKi8KKyNkZWZpbmUgU05CX0RQRkNfQ1RMX1NBCQkweDEwMDEwMAorI2RlZmluZSAgIFNOQl9DUFVfRkVOQ0VfRU5BQkxFCSgxPDwyOSkKKyNkZWZpbmUgRFBGQ19DUFVfRkVOQ0VfT0ZGU0VUCTB4MTAwMTA0CisKIAogLyoKICAqIEdQSU8gcmVncwpAQCAtOTAwLDYgKzk3MSw4IEBACiAgKi8KICNkZWZpbmUgTUNIQkFSX01JUlJPUl9CQVNFCTB4MTAwMDAKIAorI2RlZmluZSBNQ0hCQVJfTUlSUk9SX0JBU0VfU05CCTB4MTQwMDAwCisKIC8qKiA5MTUtOTQ1IGFuZCBHTTk2NSBNQ0ggcmVnaXN0ZXIgY29udHJvbGxpbmcgRFJBTSBjaGFubmVsIGFjY2VzcyAqLwogI2RlZmluZSBEQ0MJCQkweDEwMjAwCiAjZGVmaW5lIERDQ19BRERSRVNTSU5HX01PREVfU0lOR0xFX0NIQU5ORUwJCSgwIDw8IDApCkBAIC0xMDYxLDkgKzExMzQsNTAgQEAKICNkZWZpbmUgUkNCTUlOQVZHCQkweDExMWEwCiAjZGVmaW5lIFJDVVBFSQkJCTB4MTExYjAKICNkZWZpbmUgUkNETkVJCQkJMHgxMTFiNAotI2RlZmluZSBNQ0hCQVJfUkVOREVSX1NUQU5EQlkJCTB4MTExYjgKLSNkZWZpbmUgICBSQ1hfU1dfRVhJVAkJKDE8PDIzKQotI2RlZmluZSAgIFJTWF9TVEFUVVNfTUFTSwkweDAwNzAwMDAwCisjZGVmaW5lIFJTVERCWUNUTAkJMHgxMTFiOAorI2RlZmluZSAgIFJTMUVOCQkJKDE8PDMxKQorI2RlZmluZSAgIFJTMkVOCQkJKDE8PDMwKQorI2RlZmluZSAgIFJTM0VOCQkJKDE8PDI5KQorI2RlZmluZSAgIEQzUlMzRU4JCSgxPDwyOCkgLyogRGlzcGxheSBEMyBpbWxpZXMgUlMzICovCisjZGVmaW5lICAgU1dQUk9NT1JTWAkJKDE8PDI3KSAvKiBSU3ggcHJvbW90aW9uIHRpbWVycyBpZ25vcmVkICovCisjZGVmaW5lICAgUkNXQUtFUlcJCSgxPDwyNikgLyogUmVzZXR3YXJuIGZyb20gUENIIGNhdXNlcyB3YWtldXAgKi8KKyNkZWZpbmUgICBEUFJTTFBWUkVOCQkoMTw8MjUpIC8qIEZhc3Qgdm9sdGFnZSByYW1wIGVuYWJsZSAqLworI2RlZmluZSAgIEdGWFRHSFlTVAkJKDE8PDI0KSAvKiBIeXN0ZXJlc2lzIHRvIGFsbG93IHRydW5rIGdhdGluZyAqLworI2RlZmluZSAgIFJDWF9TV19FWElUCQkoMTw8MjMpIC8qIExlYXZlIFJTeCBhbmQgcHJldmVudCByZS1lbnRyeSAqLworI2RlZmluZSAgIFJTWF9TVEFUVVNfTUFTSwkoNzw8MjApCisjZGVmaW5lICAgUlNYX1NUQVRVU19PTgkJKDA8PDIwKQorI2RlZmluZSAgIFJTWF9TVEFUVVNfUkMxCSgxPDwyMCkKKyNkZWZpbmUgICBSU1hfU1RBVFVTX1JDMUUJKDI8PDIwKQorI2RlZmluZSAgIFJTWF9TVEFUVVNfUlMxCSgzPDwyMCkKKyNkZWZpbmUgICBSU1hfU1RBVFVTX1JTMgkoNDw8MjApIC8qIGFrYSByYzYgKi8KKyNkZWZpbmUgICBSU1hfU1RBVFVTX1JTVkQJKDU8PDIwKSAvKiBkZWVwIHJjNiB1bnN1cHBvcnRlZCBvbiBpbGsgKi8KKyNkZWZpbmUgICBSU1hfU1RBVFVTX1JTMwkoNjw8MjApIC8qIHJzMyB1bnN1cHBvcnRlZCBvbiBpbGsgKi8KKyNkZWZpbmUgICBSU1hfU1RBVFVTX1JTVkQyCSg3PDwyMCkKKyNkZWZpbmUgICBVV1JDUlNYRQkJKDE8PDE5KSAvKiB3YWtlIGNvdW50ZXIgbGltaXQgcHJldmVudHMgcnN4ICovCisjZGVmaW5lICAgUlNDUlAJCQkoMTw8MTgpIC8qIHJzIHJlcXVlc3RzIGNvbnRyb2wgb24gcnMxLzIgcmVxcyAqLworI2RlZmluZSAgIEpSU0MJCQkoMTw8MTcpIC8qIHJzeCBjb3VwbGVkIHRvIGNwdSBjLXN0YXRlICovCisjZGVmaW5lICAgUlMySU5DMAkJKDE8PDE2KSAvKiBhbGxvdyByczIgaW4gY3B1IGMwICovCisjZGVmaW5lICAgUlMxQ09OVFNBVl9NQVNLCSgzPDwxNCkKKyNkZWZpbmUgICBSUzFDT05UU0FWX05PX1JTMQkoMDw8MTQpIC8qIHJzMSBkb2Vzbid0IHNhdmUvcmVzdG9yZSBjb250ZXh0ICovCisjZGVmaW5lICAgUlMxQ09OVFNBVl9SU1ZECSgxPDwxNCkKKyNkZWZpbmUgICBSUzFDT05UU0FWX1NBVkVfUlMxCSgyPDwxNCkgLyogcnMxIHNhdmVzIGNvbnRleHQgKi8KKyNkZWZpbmUgICBSUzFDT05UU0FWX0ZVTExfUlMxCSgzPDwxNCkgLyogcnMxIHNhdmVzIGFuZCByZXN0b3JlcyBjb250ZXh0ICovCisjZGVmaW5lICAgTk9STVNMRVhMQVRfTUFTSwkoMzw8MTIpCisjZGVmaW5lICAgU0xPV19SUzEyMwkJKDA8PDEyKQorI2RlZmluZSAgIFNMT1dfUlMyMwkJKDE8PDEyKQorI2RlZmluZSAgIFNMT1dfUlMzCQkoMjw8MTIpCisjZGVmaW5lICAgTk9STUFMX1JTMTIzCQkoMzw8MTIpCisjZGVmaW5lICAgUkNNT0RFX1RJTUVPVVQJKDE8PDExKSAvKiAwIGlzIGV2YWwgaW50ZXJ2YWwgbWV0aG9kICovCisjZGVmaW5lICAgSU1QUk9NT0VOCQkoMTw8MTApIC8qIHByb21vIGlzIGltbWVkaWF0ZSBvciBkZWxheWVkIHVudGlsIG5leHQgaWRsZSBpbnRlcnZhbCAob25seSBmb3IgdGltZW91dCBtZXRob2QgYWJvdmUpICovCisjZGVmaW5lICAgUkNFTlRTWU5DCQkoMTw8OSkgLyogcnMgY291cGxlZCB0byBjcHUgYy1zdGF0ZSAoMy82LzcpICovCisjZGVmaW5lICAgU1RBVEVMT0NLCQkoMTw8NykgLyogbG9ja2VkIHRvIHJzX2NzdGF0ZSBpZiAwICovCisjZGVmaW5lICAgUlNfQ1NUQVRFX01BU0sJKDM8PDQpCisjZGVmaW5lICAgUlNfQ1NUQVRFX0MzNjdfUlMxCSgwPDw0KQorI2RlZmluZSAgIFJTX0NTVEFURV9DMzZfUlMxX0M3X1JTMiAoMTw8NCkKKyNkZWZpbmUgICBSU19DU1RBVEVfUlNWRAkoMjw8NCkKKyNkZWZpbmUgICBSU19DU1RBVEVfQzM2N19SUzIJKDM8PDQpCisjZGVmaW5lICAgUkVEU0FWRVMJCSgxPDwzKSAvKiBubyBjb250ZXh0IHNhdmUgaWYgd2FzIGlkbGUgZHVyaW5nIHJzMCAqLworI2RlZmluZSAgIFJFRFJFU1RPUkVTCQkoMTw8MikgLyogbm8gcmVzdG9yZSBpZiB3YXMgaWRsZSBkdXJpbmcgcnMwICovCiAjZGVmaW5lIFZJRENUTAkJCTB4MTExYzAKICNkZWZpbmUgVklEU1RTCQkJMHgxMTFjOAogI2RlZmluZSBWSURTVEFSVAkJMHgxMTFjYyAvKiA4IGJpdHMgKi8KQEAgLTExMTksNiArMTIzMywxMCBAQAogI2RlZmluZSBERFJNUExMMQkJMFgxMmMyMAogI2RlZmluZSBQRUdfQkFORF9HQVBfREFUQQkweDE0ZDY4CiAKKyNkZWZpbmUgR0VONl9HVF9QRVJGX1NUQVRVUwkweDE0NTk0OAorI2RlZmluZSBHRU42X1JQX1NUQVRFX0xJTUlUUwkweDE0NTk5NAorI2RlZmluZSBHRU42X1JQX1NUQVRFX0NBUAkweDE0NTk5OAorCiAvKgogICogTG9naWNhbCBDb250ZXh0IHJlZ3MKICAqLwpAQCAtMTE2OCw3ICsxMjg2LDYgQEAKICNkZWZpbmUgVlRPVEFMKHBpcGUpIF9QSVBFKHBpcGUsIFZUT1RBTF9BLCBWVE9UQUxfQikKICNkZWZpbmUgVkJMQU5LKHBpcGUpIF9QSVBFKHBpcGUsIFZCTEFOS19BLCBWQkxBTktfQikKICNkZWZpbmUgVlNZTkMocGlwZSkgX1BJUEUocGlwZSwgVlNZTkNfQSwgVlNZTkNfQikKLSNkZWZpbmUgUElQRVNSQyhwaXBlKSBfUElQRShwaXBlLCBQSVBFQVNSQywgUElQRUJTUkMpCiAjZGVmaW5lIEJDTFJQQVQocGlwZSkgX1BJUEUocGlwZSwgQkNMUlBBVF9BLCBCQ0xSUEFUX0IpCiAKIC8qIFZHQSBwb3J0IGNvbnRyb2wgKi8KQEAgLTIxODIsOCArMjI5OSwxMCBAQAogI2RlZmluZSAgIFBJUEVfNkJQQwkJCQkoMiA8PCA1KQogI2RlZmluZSAgIFBJUEVfMTJCUEMJCQkJKDMgPDwgNSkKIAorI2RlZmluZSBQSVBFU1JDKHBpcGUpIF9QSVBFKHBpcGUsIFBJUEVBU1JDLCBQSVBFQlNSQykKICNkZWZpbmUgUElQRUNPTkYocGlwZSkgX1BJUEUocGlwZSwgUElQRUFDT05GLCBQSVBFQkNPTkYpCiAjZGVmaW5lIFBJUEVEU0wocGlwZSkgIF9QSVBFKHBpcGUsIFBJUEVBRFNMLCBQSVBFQkRTTCkKKyNkZWZpbmUgUElQRUZSQU1FUElYRUwocGlwZSkgIF9QSVBFKHBpcGUsIFBJUEVBRlJBTUVQSVhFTCwgUElQRUJGUkFNRVBJWEVMKQogCiAjZGVmaW5lIERTUEFSQgkJCTB4NzAwMzAKICNkZWZpbmUgICBEU1BBUkJfQ1NUQVJUX01BU0sJKDB4N2YgPDwgNykKQEAgLTIyNzEsOCArMjM5MCwxMyBAQAogCiAvKiBNZW1vcnkgbGF0ZW5jeSB0aW1lciByZWdpc3RlciAqLwogI2RlZmluZSBNTFRSX0lMSwkJMHgxMTIyMgorI2RlZmluZSAgTUxUUl9XTTFfU0hJRlQJCTAKKyNkZWZpbmUgIE1MVFJfV00yX1NISUZUCQk4CiAvKiB0aGUgdW5pdCBvZiBtZW1vcnkgc2VsZi1yZWZyZXNoIGxhdGVuY3kgdGltZSBpcyAwLjV1cyAqLwogI2RlZmluZSAgSUxLX1NSTFRfTUFTSwkJMHgzZgorI2RlZmluZSBJTEtfTEFURU5DWShzaGlmdCkJKEk5MTVfUkVBRChNTFRSX0lMSykgPj4gKHNoaWZ0KSAmIElMS19TUkxUX01BU0spCisjZGVmaW5lIElMS19SRUFEX1dNMV9MQVRFTkNZKCkJSUxLX0xBVEVOQ1koTUxUUl9XTTFfU0hJRlQpCisjZGVmaW5lIElMS19SRUFEX1dNMl9MQVRFTkNZKCkJSUxLX0xBVEVOQ1koTUxUUl9XTTJfU0hJRlQpCiAKIC8qIGRlZmluZSB0aGUgZmlmbyBzaXplIG9uIElyb25sYWtlICovCiAjZGVmaW5lIElMS19ESVNQTEFZX0ZJRk8JMTI4CkBAIC0yMjkxLDYgKzI0MTUsNDAgQEAKIAogI2RlZmluZSBJTEtfRklGT19MSU5FX1NJWkUJNjQKIAorLyogZGVmaW5lIHRoZSBXTSBpbmZvIG9uIFNhbmR5YnJpZGdlICovCisjZGVmaW5lIFNOQl9ESVNQTEFZX0ZJRk8JMTI4CisjZGVmaW5lIFNOQl9ESVNQTEFZX01BWFdNCTB4N2YJLyogYml0IDE2OjIyICovCisjZGVmaW5lIFNOQl9ESVNQTEFZX0RGVFdNCTgKKyNkZWZpbmUgU05CX0NVUlNPUl9GSUZPCQkzMgorI2RlZmluZSBTTkJfQ1VSU09SX01BWFdNCTB4MWYJLyogYml0IDQ6MCAqLworI2RlZmluZSBTTkJfQ1VSU09SX0RGVFdNCTgKKworI2RlZmluZSBTTkJfRElTUExBWV9TUl9GSUZPCTUxMgorI2RlZmluZSBTTkJfRElTUExBWV9NQVhfU1JXTQkweDFmZgkvKiBiaXQgMTY6OCAqLworI2RlZmluZSBTTkJfRElTUExBWV9ERlRfU1JXTQkweDNmCisjZGVmaW5lIFNOQl9DVVJTT1JfU1JfRklGTwk2NAorI2RlZmluZSBTTkJfQ1VSU09SX01BWF9TUldNCTB4M2YJLyogYml0IDU6MCAqLworI2RlZmluZSBTTkJfQ1VSU09SX0RGVF9TUldNCTgKKworI2RlZmluZSBTTkJfRkJDX01BWF9TUldNCTB4ZgkvKiBiaXQgMjM6MjAgKi8KKworI2RlZmluZSBTTkJfRklGT19MSU5FX1NJWkUJNjQKKworCisvKiB0aGUgYWRkcmVzcyB3aGVyZSB3ZSBnZXQgYWxsIGtpbmRzIG9mIGxhdGVuY3kgdmFsdWUgKi8KKyNkZWZpbmUgU1NLUEQJCQkweDVkMTAKKyNkZWZpbmUgU1NLUERfV01fTUFTSwkJMHgzZgorI2RlZmluZSBTU0tQRF9XTTBfU0hJRlQJCTAKKyNkZWZpbmUgU1NLUERfV00xX1NISUZUCQk4CisjZGVmaW5lIFNTS1BEX1dNMl9TSElGVAkJMTYKKyNkZWZpbmUgU1NLUERfV00zX1NISUZUCQkyNAorCisjZGVmaW5lIFNOQl9MQVRFTkNZKHNoaWZ0KQkoSTkxNV9SRUFEKE1DSEJBUl9NSVJST1JfQkFTRV9TTkIgKyBTU0tQRCkgPj4gKHNoaWZ0KSAmIFNTS1BEX1dNX01BU0spCisjZGVmaW5lIFNOQl9SRUFEX1dNMF9MQVRFTkNZKCkJCVNOQl9MQVRFTkNZKFNTS1BEX1dNMF9TSElGVCkKKyNkZWZpbmUgU05CX1JFQURfV00xX0xBVEVOQ1koKQkJU05CX0xBVEVOQ1koU1NLUERfV00xX1NISUZUKQorI2RlZmluZSBTTkJfUkVBRF9XTTJfTEFURU5DWSgpCQlTTkJfTEFURU5DWShTU0tQRF9XTTJfU0hJRlQpCisjZGVmaW5lIFNOQl9SRUFEX1dNM19MQVRFTkNZKCkJCVNOQl9MQVRFTkNZKFNTS1BEX1dNM19TSElGVCkKKwogLyoKICAqIFRoZSB0d28gcGlwZSBmcmFtZSBjb3VudGVyIHJlZ2lzdGVycyBhcmUgbm90IHN5bmNocm9uaXplZCwgc28KICAqIHJlYWRpbmcgYSBzdGFibGUgdmFsdWUgaXMgc29tZXdoYXQgdHJpY2t5LiBUaGUgZm9sbG93aW5nIGNvZGUKQEAgLTIzNTEsNiArMjUwOSwxMCBAQAogI2RlZmluZSBDVVJCQkFTRQkJMHg3MDBjNAogI2RlZmluZSBDVVJCUE9TCQkJMHg3MDBjOAogCisjZGVmaW5lIENVUkNOVFIocGlwZSkgX1BJUEUocGlwZSwgQ1VSQUNOVFIsIENVUkJDTlRSKQorI2RlZmluZSBDVVJCQVNFKHBpcGUpIF9QSVBFKHBpcGUsIENVUkFCQVNFLCBDVVJCQkFTRSkKKyNkZWZpbmUgQ1VSUE9TKHBpcGUpIF9QSVBFKHBpcGUsIENVUkFQT1MsIENVUkJQT1MpCisKIC8qIERpc3BsYXkgQSBjb250cm9sICovCiAjZGVmaW5lIERTUEFDTlRSICAgICAgICAgICAgICAgIDB4NzAxODAKICNkZWZpbmUgICBESVNQTEFZX1BMQU5FX0VOQUJMRQkJCSgxPDwzMSkKQEAgLTI1ODksNiArMjc1MSw4IEBACiAjZGVmaW5lIEdUSUVSICAgMHg0NDAxYwogCiAjZGVmaW5lIElMS19ESVNQTEFZX0NISUNLRU4yCTB4NDIwMDQKKy8qIFJlcXVpcmVkIG9uIGFsbCBJcm9ubGFrZSBhbmQgU2FuZHlicmlkZ2UgYWNjb3JkaW5nIHRvIHRoZSBCLVNwZWMuICovCisjZGVmaW5lICBJTEtfRUxQSU5fNDA5X1NFTEVDVAkoMSA8PCAyNSkKICNkZWZpbmUgIElMS19EUEFSQl9HQVRFCSgxPDwyMikKICNkZWZpbmUgIElMS19WU0RQRkRfRlVMTAkoMTw8MjEpCiAjZGVmaW5lIElMS19ESVNQTEFZX0NISUNLRU5fRlVTRVMJMHg0MjAxNApAQCAtMjYwMCw2ICsyNzY0LDggQEAKICNkZWZpbmUgIElMS19ERVNLVE9QCQkJKDE8PDIzKQogI2RlZmluZSBJTEtfRFNQQ0xLX0dBVEUJCTB4NDIwMjAKICNkZWZpbmUgIElMS19EUEFSQl9DTEtfR0FURQkoMTw8NSkKKyNkZWZpbmUgIElMS19EUEZEX0NMS19HQVRFCSgxPDw3KQorCiAvKiBBY2NvcmRpbmcgdG8gc3BlYyB0aGlzIGJpdCA3LzgvOSBvZiAweDQyMDIwIHNob3VsZCBiZSBzZXQgdG8gZW5hYmxlIEZCQyAqLwogI2RlZmluZSAgIElMS19DTEtfRkJDCQkoMTw8NykKICNkZWZpbmUgICBJTEtfRFBGQ19ESVMxCQkoMTw8OCkKQEAgLTI2MTIsMTIgKzI3NzgsNDEgQEAKIC8qIFBDSCAqLwogCiAvKiBzb3V0aCBkaXNwbGF5IGVuZ2luZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU0RFX0FVRElPX1BPV0VSX0QJKDEgPDwgMjcpCisjZGVmaW5lIFNERV9BVURJT19QT1dFUl9DCSgxIDw8IDI2KQorI2RlZmluZSBTREVfQVVESU9fUE9XRVJfQgkoMSA8PCAyNSkKKyNkZWZpbmUgU0RFX0FVRElPX1BPV0VSX1NISUZUCSgyNSkKKyNkZWZpbmUgU0RFX0FVRElPX1BPV0VSX01BU0sJKDcgPDwgU0RFX0FVRElPX1BPV0VSX1NISUZUKQorI2RlZmluZSBTREVfR01CVVMJCSgxIDw8IDI0KQorI2RlZmluZSBTREVfQVVESU9fSERDUF9UUkFOU0IJKDEgPDwgMjMpCisjZGVmaW5lIFNERV9BVURJT19IRENQX1RSQU5TQQkoMSA8PCAyMikKKyNkZWZpbmUgU0RFX0FVRElPX0hEQ1BfTUFTSwkoMyA8PCAyMikKKyNkZWZpbmUgU0RFX0FVRElPX1RSQU5TQgkoMSA8PCAyMSkKKyNkZWZpbmUgU0RFX0FVRElPX1RSQU5TQQkoMSA8PCAyMCkKKyNkZWZpbmUgU0RFX0FVRElPX1RSQU5TX01BU0sJKDMgPDwgMjApCisjZGVmaW5lIFNERV9QT0lTT04JCSgxIDw8IDE5KQorLyogMTggcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgU0RFX0ZESV9SWEIJCSgxIDw8IDE3KQorI2RlZmluZSBTREVfRkRJX1JYQQkJKDEgPDwgMTYpCisjZGVmaW5lIFNERV9GRElfTUFTSwkJKDMgPDwgMTYpCisjZGVmaW5lIFNERV9BVVhECQkoMSA8PCAxNSkKKyNkZWZpbmUgU0RFX0FVWEMJCSgxIDw8IDE0KQorI2RlZmluZSBTREVfQVVYQgkJKDEgPDwgMTMpCisjZGVmaW5lIFNERV9BVVhfTUFTSwkJKDcgPDwgMTMpCisvKiAxMiByZXNlcnZlZCAqLwogI2RlZmluZSBTREVfQ1JUX0hPVFBMVUcgICAgICAgICAoMSA8PCAxMSkKICNkZWZpbmUgU0RFX1BPUlREX0hPVFBMVUcgICAgICAgKDEgPDwgMTApCiAjZGVmaW5lIFNERV9QT1JUQ19IT1RQTFVHICAgICAgICgxIDw8IDkpCiAjZGVmaW5lIFNERV9QT1JUQl9IT1RQTFVHICAgICAgICgxIDw8IDgpCiAjZGVmaW5lIFNERV9TRFZPQl9IT1RQTFVHICAgICAgICgxIDw8IDYpCiAjZGVmaW5lIFNERV9IT1RQTFVHX01BU0sJKDB4ZiA8PCA4KQorI2RlZmluZSBTREVfVFJBTlNCX0NSQ19ET05FCSgxIDw8IDUpCisjZGVmaW5lIFNERV9UUkFOU0JfQ1JDX0VSUgkoMSA8PCA0KQorI2RlZmluZSBTREVfVFJBTlNCX0ZJRk9fVU5ERVIJKDEgPDwgMykKKyNkZWZpbmUgU0RFX1RSQU5TQV9DUkNfRE9ORQkoMSA8PCAyKQorI2RlZmluZSBTREVfVFJBTlNBX0NSQ19FUlIJKDEgPDwgMSkKKyNkZWZpbmUgU0RFX1RSQU5TQV9GSUZPX1VOREVSCSgxIDw8IDApCisjZGVmaW5lIFNERV9UUkFOU19NQVNLCQkoMHgzZikKIC8qIENQVCAqLwogI2RlZmluZSBTREVfQ1JUX0hPVFBMVUdfQ1BUCSgxIDw8IDE5KQogI2RlZmluZSBTREVfUE9SVERfSE9UUExVR19DUFQJKDEgPDwgMjMpCkBAIC0yNjc5LDYgKzI4NzQsNyBAQAogI2RlZmluZSBQQ0hfRFBMTChwaXBlKSBfUElQRShwaXBlLCBQQ0hfRFBMTF9BLCBQQ0hfRFBMTF9CKQogCiAjZGVmaW5lIFBDSF9GUEEwICAgICAgICAgICAgICAgIDB4YzYwNDAKKyNkZWZpbmUgIEZQX0NCX1RVTkUJCSgweDM8PDIyKQogI2RlZmluZSBQQ0hfRlBBMSAgICAgICAgICAgICAgICAweGM2MDQ0CiAjZGVmaW5lIFBDSF9GUEIwICAgICAgICAgICAgICAgIDB4YzYwNDgKICNkZWZpbmUgUENIX0ZQQjEgICAgICAgICAgICAgICAgMHhjNjA0YwpAQCAtMzA1NywxMCArMzI1Myw3NCBAQAogI2RlZmluZSAgRURQX0xJTktfVFJBSU5fNjAwTVZfM181REJfU05CX0EJKDB4MDE8PDIyKQogI2RlZmluZSAgRURQX0xJTktfVFJBSU5fODAwTVZfMERCX1NOQl9BCQkoMHgwPDwyMikKIC8qIFNOQiBCLXN0ZXBwaW5nICovCi0jZGVmaW5lICBFRFBfTElOS19UUkFJTl80MDBNVl8wREJfU05CX0IJCSgweDA8PDIyKQotI2RlZmluZSAgRURQX0xJTktfVFJBSU5fNDAwTVZfNkRCX1NOQl9CCQkoMHgzYTw8MjIpCi0jZGVmaW5lICBFRFBfTElOS19UUkFJTl82MDBNVl8zXzVEQl9TTkJfQgkoMHgzOTw8MjIpCi0jZGVmaW5lICBFRFBfTElOS19UUkFJTl84MDBNVl8wREJfU05CX0IJCSgweDM4PDwyMikKKyNkZWZpbmUgIEVEUF9MSU5LX1RSQUlOXzQwMF82MDBNVl8wREJfU05CX0IJKDB4MDw8MjIpCisjZGVmaW5lICBFRFBfTElOS19UUkFJTl80MDBNVl8zXzVEQl9TTkJfQgkoMHgxPDwyMikKKyNkZWZpbmUgIEVEUF9MSU5LX1RSQUlOXzQwMF82MDBNVl82REJfU05CX0IJKDB4M2E8PDIyKQorI2RlZmluZSAgRURQX0xJTktfVFJBSU5fNjAwXzgwME1WXzNfNURCX1NOQl9CCSgweDM5PDwyMikKKyNkZWZpbmUgIEVEUF9MSU5LX1RSQUlOXzgwMF8xMjAwTVZfMERCX1NOQl9CCSgweDM4PDwyMikKICNkZWZpbmUgIEVEUF9MSU5LX1RSQUlOX1ZPTF9FTVBfTUFTS19TTkIJKDB4M2Y8PDIyKQogCisjZGVmaW5lICBGT1JDRVdBS0UJCQkJMHhBMThDCisjZGVmaW5lICBGT1JDRVdBS0VfQUNLCQkJCTB4MTMwMDkwCisKKyNkZWZpbmUgR0VONl9SUE5TV1JFUQkJCQkweEEwMDgKKyNkZWZpbmUgICBHRU42X1RVUkJPX0RJU0FCTEUJCQkoMTw8MzEpCisjZGVmaW5lICAgR0VONl9GUkVRVUVOQ1koeCkJCQkoKHgpPDwyNSkKKyNkZWZpbmUgICBHRU42X09GRlNFVCh4KQkJCSgoeCk8PDE5KQorI2RlZmluZSAgIEdFTjZfQUdHUkVTU0lWRV9UVVJCTwkJCSgwPDwxNSkKKyNkZWZpbmUgR0VONl9SQ19WSURFT19GUkVRCQkJMHhBMDBDCisjZGVmaW5lIEdFTjZfUkNfQ09OVFJPTAkJCQkweEEwOTAKKyNkZWZpbmUgICBHRU42X1JDX0NUTF9SQzZwcF9FTkFCTEUJCSgxPDwxNikKKyNkZWZpbmUgICBHRU42X1JDX0NUTF9SQzZwX0VOQUJMRQkJKDE8PDE3KQorI2RlZmluZSAgIEdFTjZfUkNfQ1RMX1JDNl9FTkFCTEUJCSgxPDwxOCkKKyNkZWZpbmUgICBHRU42X1JDX0NUTF9SQzFlX0VOQUJMRQkJKDE8PDIwKQorI2RlZmluZSAgIEdFTjZfUkNfQ1RMX1JDN19FTkFCTEUJCSgxPDwyMikKKyNkZWZpbmUgICBHRU42X1JDX0NUTF9FSV9NT0RFKHgpCQkoKHgpPDwyNykKKyNkZWZpbmUgICBHRU42X1JDX0NUTF9IV19FTkFCTEUJCQkoMTw8MzEpCisjZGVmaW5lIEdFTjZfUlBfRE9XTl9USU1FT1VUCQkJMHhBMDEwCisjZGVmaW5lIEdFTjZfUlBfSU5URVJSVVBUX0xJTUlUUwkJMHhBMDE0CisjZGVmaW5lIEdFTjZfUlBTVEFUMQkJCQkweEEwMUMKKyNkZWZpbmUgR0VONl9SUF9DT05UUk9MCQkJCTB4QTAyNAorI2RlZmluZSAgIEdFTjZfUlBfTUVESUFfVFVSQk8JCQkoMTw8MTEpCisjZGVmaW5lICAgR0VONl9SUF9VU0VfTk9STUFMX0ZSRVEJCSgxPDw5KQorI2RlZmluZSAgIEdFTjZfUlBfTUVESUFfSVNfR0ZYCQkJKDE8PDgpCisjZGVmaW5lICAgR0VONl9SUF9FTkFCTEUJCQkoMTw8NykKKyNkZWZpbmUgICBHRU42X1JQX1VQX0JVU1lfTUFYCQkJKDB4Mjw8MykKKyNkZWZpbmUgICBHRU42X1JQX0RPV05fQlVTWV9NSU4JCQkoMHgyPDwwKQorI2RlZmluZSBHRU42X1JQX1VQX1RIUkVTSE9MRAkJCTB4QTAyQworI2RlZmluZSBHRU42X1JQX0RPV05fVEhSRVNIT0xECQkJMHhBMDMwCisjZGVmaW5lIEdFTjZfUlBfVVBfRUkJCQkJMHhBMDY4CisjZGVmaW5lIEdFTjZfUlBfRE9XTl9FSQkJCQkweEEwNkMKKyNkZWZpbmUgR0VONl9SUF9JRExFX0hZU1RFUlNJUwkJCTB4QTA3MAorI2RlZmluZSBHRU42X1JDX1NUQVRFCQkJCTB4QTA5NAorI2RlZmluZSBHRU42X1JDMV9XQUtFX1JBVEVfTElNSVQJCTB4QTA5OAorI2RlZmluZSBHRU42X1JDNl9XQUtFX1JBVEVfTElNSVQJCTB4QTA5QworI2RlZmluZSBHRU42X1JDNnBwX1dBS0VfUkFURV9MSU1JVAkJMHhBMEEwCisjZGVmaW5lIEdFTjZfUkNfRVZBTFVBVElPTl9JTlRFUlZBTAkJMHhBMEE4CisjZGVmaW5lIEdFTjZfUkNfSURMRV9IWVNURVJTSVMJCQkweEEwQUMKKyNkZWZpbmUgR0VONl9SQ19TTEVFUAkJCQkweEEwQjAKKyNkZWZpbmUgR0VONl9SQzFlX1RIUkVTSE9MRAkJCTB4QTBCNAorI2RlZmluZSBHRU42X1JDNl9USFJFU0hPTEQJCQkweEEwQjgKKyNkZWZpbmUgR0VONl9SQzZwX1RIUkVTSE9MRAkJCTB4QTBCQworI2RlZmluZSBHRU42X1JDNnBwX1RIUkVTSE9MRAkJCTB4QTBDMAorI2RlZmluZSBHRU42X1BNSU5UUk1TSwkJCQkweEExNjgKKworI2RlZmluZSBHRU42X1BNSVNSCQkJCTB4NDQwMjAKKyNkZWZpbmUgR0VONl9QTUlNUgkJCQkweDQ0MDI0CisjZGVmaW5lIEdFTjZfUE1JSVIJCQkJMHg0NDAyOAorI2RlZmluZSBHRU42X1BNSUVSCQkJCTB4NDQwMkMKKyNkZWZpbmUgIEdFTjZfUE1fTUJPWF9FVkVOVAkJCSgxPDwyNSkKKyNkZWZpbmUgIEdFTjZfUE1fVEhFUk1BTF9FVkVOVAkJCSgxPDwyNCkKKyNkZWZpbmUgIEdFTjZfUE1fUlBfRE9XTl9USU1FT1VUCQkoMTw8NikKKyNkZWZpbmUgIEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xECQkoMTw8NSkKKyNkZWZpbmUgIEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQJCSgxPDw0KQorI2RlZmluZSAgR0VONl9QTV9SUF9VUF9FSV9FWFBJUkVECQkoMTw8MikKKyNkZWZpbmUgIEdFTjZfUE1fUlBfRE9XTl9FSV9FWFBJUkVECQkoMTw8MSkKKworI2RlZmluZSBHRU42X1BDT0RFX01BSUxCT1gJCQkweDEzODEyNAorI2RlZmluZSAgIEdFTjZfUENPREVfUkVBRFkJCQkoMTw8MzEpCisjZGVmaW5lICAgR0VONl9SRUFEX09DX1BBUkFNUwkJCTB4YworI2RlZmluZSAgIEdFTjZfUENPREVfV1JJVEVfTUlOX0ZSRVFfVEFCTEUJMHg5CisjZGVmaW5lIEdFTjZfUENPREVfREFUQQkJCQkweDEzODEyOAorCiAjZW5kaWYgLyogX0k5MTVfUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCmluZGV4IDQyNzI5ZDIuLjA1MjFlY2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYwpAQCAtMjM1LDYgKzIzNSw3IEBACiBzdGF0aWMgdm9pZCBpOTE1X3NhdmVfbW9kZXNldF9yZWcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOwogCiAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCiAJCXJldHVybjsKQEAgLTM2Nyw2ICszNjgsMjggQEAKIAl9CiAJaTkxNV9zYXZlX3BhbGV0dGUoZGV2LCBQSVBFX0IpOwogCWRldl9wcml2LT5zYXZlUElQRUJTVEFUID0gSTkxNV9SRUFEKFBJUEVCU1RBVCk7CisKKwkvKiBGZW5jZXMgKi8KKwlzd2l0Y2ggKElOVEVMX0lORk8oZGV2KS0+Z2VuKSB7CisJY2FzZSA2OgorCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCWRldl9wcml2LT5zYXZlRkVOQ0VbaV0gPSBJOTE1X1JFQUQ2NChGRU5DRV9SRUdfU0FORFlCUklER0VfMCArIChpICogOCkpOworCQlicmVhazsKKwljYXNlIDU6CisJY2FzZSA0OgorCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCWRldl9wcml2LT5zYXZlRkVOQ0VbaV0gPSBJOTE1X1JFQUQ2NChGRU5DRV9SRUdfOTY1XzAgKyAoaSAqIDgpKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlpZiAoSVNfSTk0NUcoZGV2KSB8fCBJU19JOTQ1R00oZGV2KSB8fCBJU19HMzMoZGV2KSkKKwkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQkJZGV2X3ByaXYtPnNhdmVGRU5DRVtpKzhdID0gSTkxNV9SRUFEKEZFTkNFX1JFR185NDVfOCArIChpICogNCkpOworCWNhc2UgMjoKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCWRldl9wcml2LT5zYXZlRkVOQ0VbaV0gPSBJOTE1X1JFQUQoRkVOQ0VfUkVHXzgzMF8wICsgKGkgKiA0KSk7CisJCWJyZWFrOworCX0KKwogCXJldHVybjsKIH0KIApAQCAtMzc1LDEwICszOTgsMzMgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBkcGxsX2FfcmVnLCBmcGEwX3JlZywgZnBhMV9yZWc7CiAJaW50IGRwbGxfYl9yZWcsIGZwYjBfcmVnLCBmcGIxX3JlZzsKKwlpbnQgaTsKIAogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQogCQlyZXR1cm47CiAKKwkvKiBGZW5jZXMgKi8KKwlzd2l0Y2ggKElOVEVMX0lORk8oZGV2KS0+Z2VuKSB7CisJY2FzZSA2OgorCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCUk5MTVfV1JJVEU2NChGRU5DRV9SRUdfU0FORFlCUklER0VfMCArIChpICogOCksIGRldl9wcml2LT5zYXZlRkVOQ0VbaV0pOworCQlicmVhazsKKwljYXNlIDU6CisJY2FzZSA0OgorCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCUk5MTVfV1JJVEU2NChGRU5DRV9SRUdfOTY1XzAgKyAoaSAqIDgpLCBkZXZfcHJpdi0+c2F2ZUZFTkNFW2ldKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCWNhc2UgMjoKKwkJaWYgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikgfHwgSVNfRzMzKGRldikpCisJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJCUk5MTVfV1JJVEUoRkVOQ0VfUkVHXzk0NV84ICsgKGkgKiA0KSwgZGV2X3ByaXYtPnNhdmVGRU5DRVtpKzhdKTsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCUk5MTVfV1JJVEUoRkVOQ0VfUkVHXzgzMF8wICsgKGkgKiA0KSwgZGV2X3ByaXYtPnNhdmVGRU5DRVtpXSk7CisJCWJyZWFrOworCX0KKworCiAJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewogCQlkcGxsX2FfcmVnID0gUENIX0RQTExfQTsKIAkJZHBsbF9iX3JlZyA9IFBDSF9EUExMX0I7CkBAIC02OTQsNyArNzQwLDcgQEAKIAkJSTkxNV9XUklURShQQ0hfUFBfT0ZGX0RFTEFZUywgZGV2X3ByaXYtPnNhdmVQUF9PRkZfREVMQVlTKTsKIAkJSTkxNV9XUklURShQQ0hfUFBfRElWSVNPUiwgZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SKTsKIAkJSTkxNV9XUklURShQQ0hfUFBfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVQUF9DT05UUk9MKTsKLQkJSTkxNV9XUklURShNQ0hCQVJfUkVOREVSX1NUQU5EQlksCisJCUk5MTVfV1JJVEUoUlNUREJZQ1RMLAogCQkJICAgZGV2X3ByaXYtPnNhdmVNQ0hCQVJfUkVOREVSX1NUQU5EQlkpOwogCX0gZWxzZSB7CiAJCUk5MTVfV1JJVEUoUEZJVF9QR01fUkFUSU9TLCBkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyk7CkBAIC03NjUsMTQgKzgxMSwxNiBAQAogCQlkZXZfcHJpdi0+c2F2ZUZESV9SWEFfSU1SID0gSTkxNV9SRUFEKEZESV9SWEFfSU1SKTsKIAkJZGV2X3ByaXYtPnNhdmVGRElfUlhCX0lNUiA9IEk5MTVfUkVBRChGRElfUlhCX0lNUik7CiAJCWRldl9wcml2LT5zYXZlTUNIQkFSX1JFTkRFUl9TVEFOREJZID0KLQkJCUk5MTVfUkVBRChNQ0hCQVJfUkVOREVSX1NUQU5EQlkpOworCQkJSTkxNV9SRUFEKFJTVERCWUNUTCk7CiAJfSBlbHNlIHsKIAkJZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSUVSKTsKIAkJZGV2X3ByaXYtPnNhdmVJTVIgPSBJOTE1X1JFQUQoSU1SKTsKIAl9CiAKLQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQorCWlmIChJU19JUk9OTEFLRV9NKGRldikpCiAJCWlyb25sYWtlX2Rpc2FibGVfZHJwcyhkZXYpOworCWlmIChJU19HRU42KGRldikpCisJCWdlbjZfZGlzYWJsZV9ycHMoZGV2KTsKIAogCS8qIENhY2hlIG1vZGUgc3RhdGUgKi8KIAlkZXZfcHJpdi0+c2F2ZUNBQ0hFX01PREVfMCA9IEk5MTVfUkVBRChDQUNIRV9NT0RFXzApOwpAQCAtNzg4LDI4ICs4MzYsNiBAQAogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCiAJCWRldl9wcml2LT5zYXZlU1dGMltpXSA9IEk5MTVfUkVBRChTV0YzMCArIChpIDw8IDIpKTsKIAotCS8qIEZlbmNlcyAqLwotCXN3aXRjaCAoSU5URUxfSU5GTyhkZXYpLT5nZW4pIHsKLQljYXNlIDY6Ci0JCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQkJZGV2X3ByaXYtPnNhdmVGRU5DRVtpXSA9IEk5MTVfUkVBRDY0KEZFTkNFX1JFR19TQU5EWUJSSURHRV8wICsgKGkgKiA4KSk7Ci0JCWJyZWFrOwotCWNhc2UgNToKLQljYXNlIDQ6Ci0JCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQkJZGV2X3ByaXYtPnNhdmVGRU5DRVtpXSA9IEk5MTVfUkVBRDY0KEZFTkNFX1JFR185NjVfMCArIChpICogOCkpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCWlmIChJU19JOTQ1RyhkZXYpIHx8IElTX0k5NDVHTShkZXYpIHx8IElTX0czMyhkZXYpKQotCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJCQlkZXZfcHJpdi0+c2F2ZUZFTkNFW2krOF0gPSBJOTE1X1JFQUQoRkVOQ0VfUkVHXzk0NV84ICsgKGkgKiA0KSk7Ci0JY2FzZSAyOgotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQkJZGV2X3ByaXYtPnNhdmVGRU5DRVtpXSA9IEk5MTVfUkVBRChGRU5DRV9SRUdfODMwXzAgKyAoaSAqIDQpKTsKLQkJYnJlYWs7Ci0KLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODIzLDI3ICs4NDksNiBAQAogCS8qIEhhcmR3YXJlIHN0YXR1cyBwYWdlICovCiAJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+c2F2ZUhXUyk7CiAKLQkvKiBGZW5jZXMgKi8KLQlzd2l0Y2ggKElOVEVMX0lORk8oZGV2KS0+Z2VuKSB7Ci0JY2FzZSA2OgotCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJCUk5MTVfV1JJVEU2NChGRU5DRV9SRUdfU0FORFlCUklER0VfMCArIChpICogOCksIGRldl9wcml2LT5zYXZlRkVOQ0VbaV0pOwotCQlicmVhazsKLQljYXNlIDU6Ci0JY2FzZSA0OgotCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJCUk5MTVfV1JJVEU2NChGRU5DRV9SRUdfOTY1XzAgKyAoaSAqIDgpLCBkZXZfcHJpdi0+c2F2ZUZFTkNFW2ldKTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCWNhc2UgMjoKLQkJaWYgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikgfHwgSVNfRzMzKGRldikpCi0JCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQkJCUk5MTVfV1JJVEUoRkVOQ0VfUkVHXzk0NV84ICsgKGkgKiA0KSwgZGV2X3ByaXYtPnNhdmVGRU5DRVtpKzhdKTsKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJCUk5MTVfV1JJVEUoRkVOQ0VfUkVHXzgzMF8wICsgKGkgKiA0KSwgZGV2X3ByaXYtPnNhdmVGRU5DRVtpXSk7Ci0JCWJyZWFrOwotCX0KLQogCWk5MTVfcmVzdG9yZV9kaXNwbGF5KGRldik7CiAKIAkvKiBJbnRlcnJ1cHQgc3RhdGUgKi8KQEAgLTg2MCwxMyArODY1LDE2IEBACiAJfQogCiAJLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCi0JaW50ZWxfaW5pdF9jbG9ja19nYXRpbmcoZGV2KTsKKwlpbnRlbF9lbmFibGVfY2xvY2tfZ2F0aW5nKGRldik7CiAKLQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CisJaWYgKElTX0lST05MQUtFX00oZGV2KSkgewogCQlpcm9ubGFrZV9lbmFibGVfZHJwcyhkZXYpOwogCQlpbnRlbF9pbml0X2Vtb24oZGV2KTsKIAl9CiAKKwlpZiAoSVNfR0VONihkZXYpKQorCQlnZW42X2VuYWJsZV9ycHMoZGV2X3ByaXYpOworCiAJLyogQ2FjaGUgbW9kZSBzdGF0ZSAqLwogCUk5MTVfV1JJVEUgKENBQ0hFX01PREVfMCwgZGV2X3ByaXYtPnNhdmVDQUNIRV9NT0RFXzAgfCAweGZmZmYwMDAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90cmFjZS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90cmFjZS5oCmluZGV4IGZlYTk3YTIuLjdmMGZjM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJhY2UuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RyYWNlLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgogCiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlICJpOTE1X2Rydi5oIgogCiAjdW5kZWYgVFJBQ0VfU1lTVEVNCiAjZGVmaW5lIFRSQUNFX1NZU1RFTSBpOTE1CkBAIC0xNiwxOCArMTcsMTggQEAKIAogVFJBQ0VfRVZFTlQoaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZSwKIAotCSAgICBUUF9QUk9UTyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiksCisJICAgIFRQX1BST1RPKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopLAogCiAJICAgIFRQX0FSR1Mob2JqKSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAotCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqLCBvYmopCisJCQkgICAgIF9fZmllbGQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKiwgb2JqKQogCQkJICAgICBfX2ZpZWxkKHUzMiwgc2l6ZSkKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKIAkJCSAgIF9fZW50cnktPm9iaiA9IG9iajsKLQkJCSAgIF9fZW50cnktPnNpemUgPSBvYmotPnNpemU7CisJCQkgICBfX2VudHJ5LT5zaXplID0gb2JqLT5iYXNlLnNpemU7CiAJCQkgICApLAogCiAJICAgIFRQX3ByaW50aygib2JqPSVwLCBzaXplPSV1IiwgX19lbnRyeS0+b2JqLCBfX2VudHJ5LT5zaXplKQpAQCAtMzUsNDAgKzM2LDQzIEBACiAKIFRSQUNFX0VWRU5UKGk5MTVfZ2VtX29iamVjdF9iaW5kLAogCi0JICAgIFRQX1BST1RPKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1MzIgZ3R0X29mZnNldCksCisJICAgIFRQX1BST1RPKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIHUzMiBndHRfb2Zmc2V0LCBib29sIG1hcHBhYmxlKSwKIAotCSAgICBUUF9BUkdTKG9iaiwgZ3R0X29mZnNldCksCisJICAgIFRQX0FSR1Mob2JqLCBndHRfb2Zmc2V0LCBtYXBwYWJsZSksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKiwgb2JqKQorCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICosIG9iaikKIAkJCSAgICAgX19maWVsZCh1MzIsIGd0dF9vZmZzZXQpCisJCQkgICAgIF9fZmllbGQoYm9vbCwgbWFwcGFibGUpCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCiAJCQkgICBfX2VudHJ5LT5vYmogPSBvYmo7CiAJCQkgICBfX2VudHJ5LT5ndHRfb2Zmc2V0ID0gZ3R0X29mZnNldDsKKwkJCSAgIF9fZW50cnktPm1hcHBhYmxlID0gbWFwcGFibGU7CiAJCQkgICApLAogCi0JICAgIFRQX3ByaW50aygib2JqPSVwLCBndHRfb2Zmc2V0PSUwOHgiLAotCQkgICAgICBfX2VudHJ5LT5vYmosIF9fZW50cnktPmd0dF9vZmZzZXQpCisJICAgIFRQX3ByaW50aygib2JqPSVwLCBndHRfb2Zmc2V0PSUwOHglcyIsCisJCSAgICAgIF9fZW50cnktPm9iaiwgX19lbnRyeS0+Z3R0X29mZnNldCwKKwkJICAgICAgX19lbnRyeS0+bWFwcGFibGUgPyAiLCBtYXBwYWJsZSIgOiAiIikKICk7CiAKIFRSQUNFX0VWRU5UKGk5MTVfZ2VtX29iamVjdF9jaGFuZ2VfZG9tYWluLAogCi0JICAgIFRQX1BST1RPKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1aW50MzJfdCBvbGRfcmVhZF9kb21haW5zLCB1aW50MzJfdCBvbGRfd3JpdGVfZG9tYWluKSwKKwkgICAgVFBfUFJPVE8oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgdWludDMyX3Qgb2xkX3JlYWRfZG9tYWlucywgdWludDMyX3Qgb2xkX3dyaXRlX2RvbWFpbiksCiAKIAkgICAgVFBfQVJHUyhvYmosIG9sZF9yZWFkX2RvbWFpbnMsIG9sZF93cml0ZV9kb21haW4pLAogCiAJICAgIFRQX1NUUlVDVF9fZW50cnkoCi0JCQkgICAgIF9fZmllbGQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICosIG9iaikKKwkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqLCBvYmopCiAJCQkgICAgIF9fZmllbGQodTMyLCByZWFkX2RvbWFpbnMpCiAJCQkgICAgIF9fZmllbGQodTMyLCB3cml0ZV9kb21haW4pCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCiAJCQkgICBfX2VudHJ5LT5vYmogPSBvYmo7Ci0JCQkgICBfX2VudHJ5LT5yZWFkX2RvbWFpbnMgPSBvYmotPnJlYWRfZG9tYWlucyB8IChvbGRfcmVhZF9kb21haW5zIDw8IDE2KTsKLQkJCSAgIF9fZW50cnktPndyaXRlX2RvbWFpbiA9IG9iai0+d3JpdGVfZG9tYWluIHwgKG9sZF93cml0ZV9kb21haW4gPDwgMTYpOworCQkJICAgX19lbnRyeS0+cmVhZF9kb21haW5zID0gb2JqLT5iYXNlLnJlYWRfZG9tYWlucyB8IChvbGRfcmVhZF9kb21haW5zIDw8IDE2KTsKKwkJCSAgIF9fZW50cnktPndyaXRlX2RvbWFpbiA9IG9iai0+YmFzZS53cml0ZV9kb21haW4gfCAob2xkX3dyaXRlX2RvbWFpbiA8PCAxNik7CiAJCQkgICApLAogCiAJICAgIFRQX3ByaW50aygib2JqPSVwLCByZWFkPSUwNHgsIHdyaXRlPSUwNHgiLApAQCAtNzYsMzYgKzgwLDE0IEBACiAJCSAgICAgIF9fZW50cnktPnJlYWRfZG9tYWlucywgX19lbnRyeS0+d3JpdGVfZG9tYWluKQogKTsKIAotVFJBQ0VfRVZFTlQoaTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZSwKLQotCSAgICBUUF9QUk9UTyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGZlbmNlLCBpbnQgdGlsaW5nX21vZGUpLAotCi0JICAgIFRQX0FSR1Mob2JqLCBmZW5jZSwgdGlsaW5nX21vZGUpLAotCi0JICAgIFRQX1NUUlVDVF9fZW50cnkoCi0JCQkgICAgIF9fZmllbGQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICosIG9iaikKLQkJCSAgICAgX19maWVsZChpbnQsIGZlbmNlKQotCQkJICAgICBfX2ZpZWxkKGludCwgdGlsaW5nX21vZGUpCi0JCQkgICAgICksCi0KLQkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5vYmogPSBvYmo7Ci0JCQkgICBfX2VudHJ5LT5mZW5jZSA9IGZlbmNlOwotCQkJICAgX19lbnRyeS0+dGlsaW5nX21vZGUgPSB0aWxpbmdfbW9kZTsKLQkJCSAgICksCi0KLQkgICAgVFBfcHJpbnRrKCJvYmo9JXAsIGZlbmNlPSVkLCB0aWxpbmc9JWQiLAotCQkgICAgICBfX2VudHJ5LT5vYmosIF9fZW50cnktPmZlbmNlLCBfX2VudHJ5LT50aWxpbmdfbW9kZSkKLSk7Ci0KIERFQ0xBUkVfRVZFTlRfQ0xBU1MoaTkxNV9nZW1fb2JqZWN0LAogCi0JICAgIFRQX1BST1RPKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKSwKKwkgICAgVFBfUFJPVE8oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiksCiAKIAkgICAgVFBfQVJHUyhvYmopLAogCiAJICAgIFRQX1NUUlVDVF9fZW50cnkoCi0JCQkgICAgIF9fZmllbGQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICosIG9iaikKKwkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqLCBvYmopCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCkBAIC0xMTcsMjEgKzk5LDIxIEBACiAKIERFRklORV9FVkVOVChpOTE1X2dlbV9vYmplY3QsIGk5MTVfZ2VtX29iamVjdF9jbGZsdXNoLAogCi0JICAgIFRQX1BST1RPKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKSwKKwkgICAgVFBfUFJPVE8oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiksCiAKIAkgICAgVFBfQVJHUyhvYmopCiApOwogCiBERUZJTkVfRVZFTlQoaTkxNV9nZW1fb2JqZWN0LCBpOTE1X2dlbV9vYmplY3RfdW5iaW5kLAogCi0JICAgIFRQX1BST1RPKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKSwKKwkgICAgVFBfUFJPVE8oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiksCiAKIAkgICAgVFBfQVJHUyhvYmopCiApOwogCiBERUZJTkVfRVZFTlQoaTkxNV9nZW1fb2JqZWN0LCBpOTE1X2dlbV9vYmplY3RfZGVzdHJveSwKIAotCSAgICBUUF9QUk9UTyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiksCisJICAgIFRQX1BST1RPKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopLAogCiAJICAgIFRQX0FSR1Mob2JqKQogKTsKQEAgLTI2MywxMyArMjQ1LDEzIEBACiApOwogCiBUUkFDRV9FVkVOVChpOTE1X2ZsaXBfcmVxdWVzdCwKLQkgICAgVFBfUFJPVE8oaW50IHBsYW5lLCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiksCisJICAgIFRQX1BST1RPKGludCBwbGFuZSwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiksCiAKIAkgICAgVFBfQVJHUyhwbGFuZSwgb2JqKSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAogCQkgICAgX19maWVsZChpbnQsIHBsYW5lKQotCQkgICAgX19maWVsZChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKiwgb2JqKQorCQkgICAgX19maWVsZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqLCBvYmopCiAJCSAgICApLAogCiAJICAgIFRQX2Zhc3RfYXNzaWduKApAQCAtMjgxLDEzICsyNjMsMTMgQEAKICk7CiAKIFRSQUNFX0VWRU5UKGk5MTVfZmxpcF9jb21wbGV0ZSwKLQkgICAgVFBfUFJPVE8oaW50IHBsYW5lLCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiksCisJICAgIFRQX1BST1RPKGludCBwbGFuZSwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiksCiAKIAkgICAgVFBfQVJHUyhwbGFuZSwgb2JqKSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAogCQkgICAgX19maWVsZChpbnQsIHBsYW5lKQotCQkgICAgX19maWVsZChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKiwgb2JqKQorCQkgICAgX19maWVsZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqLCBvYmopCiAJCSAgICApLAogCiAJICAgIFRQX2Zhc3RfYXNzaWduKApAQCAtMjk4LDYgKzI4MCwyOSBAQAogCSAgICBUUF9wcmludGsoInBsYW5lPSVkLCBvYmo9JXAiLCBfX2VudHJ5LT5wbGFuZSwgX19lbnRyeS0+b2JqKQogKTsKIAorVFJBQ0VfRVZFTlQoaTkxNV9yZWdfcncsCisgICAgICAgICAgIFRQX1BST1RPKGludCBjbWQsIHVpbnQzMl90IHJlZywgdWludDY0X3QgdmFsLCBpbnQgbGVuKSwKKworICAgICAgICAgICBUUF9BUkdTKGNtZCwgcmVnLCB2YWwsIGxlbiksCisKKyAgICAgICAgICAgVFBfU1RSVUNUX19lbnRyeSgKKyAgICAgICAgICAgICAgICAgICBfX2ZpZWxkKGludCwgY21kKQorICAgICAgICAgICAgICAgICAgIF9fZmllbGQodWludDMyX3QsIHJlZykKKyAgICAgICAgICAgICAgICAgICBfX2ZpZWxkKHVpbnQ2NF90LCB2YWwpCisgICAgICAgICAgICAgICAgICAgX19maWVsZChpbnQsIGxlbikKKyAgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgICAgIFRQX2Zhc3RfYXNzaWduKAorICAgICAgICAgICAgICAgICAgIF9fZW50cnktPmNtZCA9IGNtZDsKKyAgICAgICAgICAgICAgICAgICBfX2VudHJ5LT5yZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgX19lbnRyeS0+dmFsID0gKHVpbnQ2NF90KXZhbDsKKyAgICAgICAgICAgICAgICAgICBfX2VudHJ5LT5sZW4gPSBsZW47CisgICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgICBUUF9wcmludGsoImNtZD0lYywgcmVnPTB4JXgsIHZhbD0weCVsbHgsIGxlbj0lZCIsCisgICAgICAgICAgICAgICAgICAgICBfX2VudHJ5LT5jbWQsIF9fZW50cnktPnJlZywgX19lbnRyeS0+dmFsLCBfX2VudHJ5LT5sZW4pCispOworCiAjZW5kaWYgLyogX0k5MTVfVFJBQ0VfSF8gKi8KIAogLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCmluZGV4IDhkZjU3NDMuLjE3MDM1YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAiZHJtX2NydGMuaCIKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fZWRpZC5oIgogI2luY2x1ZGUgImludGVsX2Rydi5oIgogI2luY2x1ZGUgImk5MTVfZHJtLmgiCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKQEAgLTI4Nyw4ICsyODgsOSBAQAogCXJldHVybiBpMmNfdHJhbnNmZXIoJmRldl9wcml2LT5nbWJ1c1tkZGNfYnVzXS5hZGFwdGVyLCBtc2dzLCAxKSA9PSAxOwogfQogCi1zdGF0aWMgYm9vbCBpbnRlbF9jcnRfZGV0ZWN0X2RkYyhzdHJ1Y3QgaW50ZWxfY3J0ICpjcnQpCitzdGF0aWMgYm9vbCBpbnRlbF9jcnRfZGV0ZWN0X2RkYyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogeworCXN0cnVjdCBpbnRlbF9jcnQgKmNydCA9IGludGVsX2F0dGFjaGVkX2NydChjb25uZWN0b3IpOwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGNydC0+YmFzZS5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CiAKIAkvKiBDUlQgc2hvdWxkIGFsd2F5cyBiZSBhdCAwLCBidXQgY2hlY2sgYW55d2F5ICovCkBAIC0zMDEsOCArMzAzLDI2IEBACiAJfQogCiAJaWYgKGludGVsX2RkY19wcm9iZSgmY3J0LT5iYXNlLCBkZXZfcHJpdi0+Y3J0X2RkY19waW4pKSB7Ci0JCURSTV9ERUJVR19LTVMoIkNSVCBkZXRlY3RlZCB2aWEgRERDOjB4NTAgW0VESURdXG4iKTsKLQkJcmV0dXJuIHRydWU7CisJCXN0cnVjdCBlZGlkICplZGlkOworCQlib29sIGlzX2RpZ2l0YWwgPSBmYWxzZTsKKworCQllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3RvciwKKwkJCSZkZXZfcHJpdi0+Z21idXNbZGV2X3ByaXYtPmNydF9kZGNfcGluXS5hZGFwdGVyKTsKKwkJLyoKKwkJICogVGhpcyBtYXkgYmUgYSBEVkktSSBjb25uZWN0b3Igd2l0aCBhIHNoYXJlZCBEREMKKwkJICogbGluayBiZXR3ZWVuIGFuYWxvZyBhbmQgZGlnaXRhbCBvdXRwdXRzLCBzbyB3ZQorCQkgKiBoYXZlIHRvIGNoZWNrIHRoZSBFRElEIGlucHV0IHNwZWMgb2YgdGhlIGF0dGFjaGVkIGRldmljZS4KKwkJICovCisJCWlmIChlZGlkICE9IE5VTEwpIHsKKwkJCWlzX2RpZ2l0YWwgPSBlZGlkLT5pbnB1dCAmIERSTV9FRElEX0lOUFVUX0RJR0lUQUw7CisJCQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5yYXdfZWRpZCA9IE5VTEw7CisJCQlrZnJlZShlZGlkKTsKKwkJfQorCisJCWlmICghaXNfZGlnaXRhbCkgeworCQkJRFJNX0RFQlVHX0tNUygiQ1JUIGRldGVjdGVkIHZpYSBEREM6MHg1MCBbRURJRF1cbiIpOworCQkJcmV0dXJuIHRydWU7CisJCX0KIAl9CiAKIAlyZXR1cm4gZmFsc2U7CkBAIC00NTgsNyArNDc4LDcgQEAKIAkJfQogCX0KIAotCWlmIChpbnRlbF9jcnRfZGV0ZWN0X2RkYyhjcnQpKQorCWlmIChpbnRlbF9jcnRfZGV0ZWN0X2RkYyhjb25uZWN0b3IpKQogCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAKIAlpZiAoIWZvcmNlKQpAQCAtNDcyLDcgKzQ5Miw3IEBACiAJCWNydGMgPSBpbnRlbF9nZXRfbG9hZF9kZXRlY3RfcGlwZSgmY3J0LT5iYXNlLCBjb25uZWN0b3IsCiAJCQkJCQkgIE5VTEwsICZkcG1zX21vZGUpOwogCQlpZiAoY3J0YykgewotCQkJaWYgKGludGVsX2NydF9kZXRlY3RfZGRjKGNydCkpCisJCQlpZiAoaW50ZWxfY3J0X2RldGVjdF9kZGMoY29ubmVjdG9yKSkKIAkJCQlzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKIAkJCWVsc2UKIAkJCQlzdGF0dXMgPSBpbnRlbF9jcnRfbG9hZF9kZXRlY3QoY3J0YywgY3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCBmY2E1MjMyLi4yNWQ5Njg4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtNjQyLDI2ICs2NDIsMjMgQEAKICAgICAgICAgLmZpbmRfcGxsID0gaW50ZWxfZmluZF9wbGxfaXJvbmxha2VfZHAsCiB9OwogCi1zdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCAqaW50ZWxfaXJvbmxha2VfbGltaXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQorc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgKmludGVsX2lyb25sYWtlX2xpbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkJCWludCByZWZjbGspCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0OwotCWludCByZWZjbGsgPSAxMjA7CiAKIAlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKLQkJaWYgKGRldl9wcml2LT5sdmRzX3VzZV9zc2MgJiYgZGV2X3ByaXYtPmx2ZHNfc3NjX2ZyZXEgPT0gMTAwKQotCQkJcmVmY2xrID0gMTAwOwotCiAJCWlmICgoSTkxNV9SRUFEKFBDSF9MVkRTKSAmIExWRFNfQ0xLQl9QT1dFUl9NQVNLKSA9PQogCQkgICAgTFZEU19DTEtCX1BPV0VSX1VQKSB7CiAJCQkvKiBMVkRTIGR1YWwgY2hhbm5lbCAqLwotCQkJaWYgKHJlZmNsayA9PSAxMDApCisJCQlpZiAocmVmY2xrID09IDEwMDAwMCkKIAkJCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaXJvbmxha2VfZHVhbF9sdmRzXzEwMG07CiAJCQllbHNlCiAJCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX2R1YWxfbHZkczsKIAkJfSBlbHNlIHsKLQkJCWlmIChyZWZjbGsgPT0gMTAwKQorCQkJaWYgKHJlZmNsayA9PSAxMDAwMDApCiAJCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX3NpbmdsZV9sdmRzXzEwMG07CiAJCQllbHNlCiAJCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX3NpbmdsZV9sdmRzOwpAQCAtNzAyLDEzICs2OTksMTMgQEAKIAlyZXR1cm4gbGltaXQ7CiB9CiAKLXN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90ICppbnRlbF9saW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCitzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCAqaW50ZWxfbGltaXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgcmVmY2xrKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQ7CiAKIAlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQotCQlsaW1pdCA9IGludGVsX2lyb25sYWtlX2xpbWl0KGNydGMpOworCQlsaW1pdCA9IGludGVsX2lyb25sYWtlX2xpbWl0KGNydGMsIHJlZmNsayk7CiAJZWxzZSBpZiAoSVNfRzRYKGRldikpIHsKIAkJbGltaXQgPSBpbnRlbF9nNHhfbGltaXQoY3J0Yyk7CiAJfSBlbHNlIGlmIChJU19QSU5FVklFVyhkZXYpKSB7CkBAIC03NzMsMTEgKzc3MCwxMCBAQAogICogdGhlIGdpdmVuIGNvbm5lY3RvcnMuCiAgKi8KIAotc3RhdGljIGJvb2wgaW50ZWxfUExMX2lzX3ZhbGlkKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50ZWxfY2xvY2tfdCAqY2xvY2spCitzdGF0aWMgYm9vbCBpbnRlbF9QTExfaXNfdmFsaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBjb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCwKKwkJCSAgICAgICBjb25zdCBpbnRlbF9jbG9ja190ICpjbG9jaykKIHsKLQljb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCA9IGludGVsX2xpbWl0IChjcnRjKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCiAJaWYgKGNsb2NrLT5wMSAgPCBsaW1pdC0+cDEubWluICB8fCBsaW1pdC0+cDEubWF4ICA8IGNsb2NrLT5wMSkKIAkJSU5URUxQbGxJbnZhbGlkICgicDEgb3V0IG9mIHJhbmdlXG4iKTsKIAlpZiAoY2xvY2stPnAgICA8IGxpbWl0LT5wLm1pbiAgIHx8IGxpbWl0LT5wLm1heCAgIDwgY2xvY2stPnApCkBAIC04NDksOCArODQ1LDggQEAKIAkJCQkJaW50IHRoaXNfZXJyOwogCiAJCQkJCWludGVsX2Nsb2NrKGRldiwgcmVmY2xrLCAmY2xvY2spOwotCi0JCQkJCWlmICghaW50ZWxfUExMX2lzX3ZhbGlkKGNydGMsICZjbG9jaykpCisJCQkJCWlmICghaW50ZWxfUExMX2lzX3ZhbGlkKGRldiwgbGltaXQsCisJCQkJCQkJCSZjbG9jaykpCiAJCQkJCQljb250aW51ZTsKIAogCQkJCQl0aGlzX2VyciA9IGFicyhjbG9jay5kb3QgLSB0YXJnZXQpOwpAQCAtOTEyLDkgKzkwOCwxMSBAQAogCQkJCQlpbnQgdGhpc19lcnI7CiAKIAkJCQkJaW50ZWxfY2xvY2soZGV2LCByZWZjbGssICZjbG9jayk7Ci0JCQkJCWlmICghaW50ZWxfUExMX2lzX3ZhbGlkKGNydGMsICZjbG9jaykpCisJCQkJCWlmICghaW50ZWxfUExMX2lzX3ZhbGlkKGRldiwgbGltaXQsCisJCQkJCQkJCSZjbG9jaykpCiAJCQkJCQljb250aW51ZTsKLQkJCQkJdGhpc19lcnIgPSBhYnMoY2xvY2suZG90IC0gdGFyZ2V0KSA7CisKKwkJCQkJdGhpc19lcnIgPSBhYnMoY2xvY2suZG90IC0gdGFyZ2V0KTsKIAkJCQkJaWYgKHRoaXNfZXJyIDwgZXJyX21vc3QpIHsKIAkJCQkJCSpiZXN0X2Nsb2NrID0gY2xvY2s7CiAJCQkJCQllcnJfbW9zdCA9IHRoaXNfZXJyOwpAQCAtMTA2NiwxMyArMTA2NCwxMyBAQAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBjcnRjLT5mYjsKIAlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IHRvX2ludGVsX2JvKGludGVsX2ZiLT5vYmopOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYi0+b2JqOwogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAlpbnQgcGxhbmUsIGk7CiAJdTMyIGZiY19jdGwsIGZiY19jdGwyOwogCiAJaWYgKGZiLT5waXRjaCA9PSBkZXZfcHJpdi0+Y2ZiX3BpdGNoICYmCi0JICAgIG9ial9wcml2LT5mZW5jZV9yZWcgPT0gZGV2X3ByaXYtPmNmYl9mZW5jZSAmJgorCSAgICBvYmotPmZlbmNlX3JlZyA9PSBkZXZfcHJpdi0+Y2ZiX2ZlbmNlICYmCiAJICAgIGludGVsX2NydGMtPnBsYW5lID09IGRldl9wcml2LT5jZmJfcGxhbmUgJiYKIAkgICAgSTkxNV9SRUFEKEZCQ19DT05UUk9MKSAmIEZCQ19DVExfRU4pCiAJCXJldHVybjsKQEAgLTEwODYsNyArMTA4NCw3IEBACiAKIAkvKiBGQkNfQ1RMIHdhbnRzIDY0QiB1bml0cyAqLwogCWRldl9wcml2LT5jZmJfcGl0Y2ggPSAoZGV2X3ByaXYtPmNmYl9waXRjaCAvIDY0KSAtIDE7Ci0JZGV2X3ByaXYtPmNmYl9mZW5jZSA9IG9ial9wcml2LT5mZW5jZV9yZWc7CisJZGV2X3ByaXYtPmNmYl9mZW5jZSA9IG9iai0+ZmVuY2VfcmVnOwogCWRldl9wcml2LT5jZmJfcGxhbmUgPSBpbnRlbF9jcnRjLT5wbGFuZTsKIAlwbGFuZSA9IGRldl9wcml2LT5jZmJfcGxhbmUgPT0gMCA/IEZCQ19DVExfUExBTkVBIDogRkJDX0NUTF9QTEFORUI7CiAKQEAgLTEwOTYsNyArMTA5NCw3IEBACiAKIAkvKiBTZXQgaXQgdXAuLi4gKi8KIAlmYmNfY3RsMiA9IEZCQ19DVExfRkVOQ0VfREJMIHwgRkJDX0NUTF9JRExFX0lNTSB8IHBsYW5lOwotCWlmIChvYmpfcHJpdi0+dGlsaW5nX21vZGUgIT0gSTkxNV9USUxJTkdfTk9ORSkKKwlpZiAob2JqLT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FKQogCQlmYmNfY3RsMiB8PSBGQkNfQ1RMX0NQVV9GRU5DRTsKIAlJOTE1X1dSSVRFKEZCQ19DT05UUk9MMiwgZmJjX2N0bDIpOwogCUk5MTVfV1JJVEUoRkJDX0ZFTkNFX09GRiwgY3J0Yy0+eSk7CkBAIC0xMTA3LDcgKzExMDUsNyBAQAogCQlmYmNfY3RsIHw9IEZCQ19DVExfQzNfSURMRTsgLyogOTQ1IG5lZWRzIHNwZWNpYWwgU1IgaGFuZGxpbmcgKi8KIAlmYmNfY3RsIHw9IChkZXZfcHJpdi0+Y2ZiX3BpdGNoICYgMHhmZikgPDwgRkJDX0NUTF9TVFJJREVfU0hJRlQ7CiAJZmJjX2N0bCB8PSAoaW50ZXJ2YWwgJiAweDJmZmYpIDw8IEZCQ19DVExfSU5URVJWQUxfU0hJRlQ7Ci0JaWYgKG9ial9wcml2LT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FKQorCWlmIChvYmotPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpCiAJCWZiY19jdGwgfD0gZGV2X3ByaXYtPmNmYl9mZW5jZTsKIAlJOTE1X1dSSVRFKEZCQ19DT05UUk9MLCBmYmNfY3RsKTsKIApAQCAtMTE1MCw3ICsxMTQ4LDcgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gY3J0Yy0+ZmI7CiAJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhpbnRlbF9mYi0+b2JqKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmItPm9iajsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CiAJaW50IHBsYW5lID0gaW50ZWxfY3J0Yy0+cGxhbmUgPT0gMCA/IERQRkNfQ1RMX1BMQU5FQSA6IERQRkNfQ1RMX1BMQU5FQjsKIAl1bnNpZ25lZCBsb25nIHN0YWxsX3dhdGVybWFyayA9IDIwMDsKQEAgLTExNTksNyArMTE1Nyw3IEBACiAJZHBmY19jdGwgPSBJOTE1X1JFQUQoRFBGQ19DT05UUk9MKTsKIAlpZiAoZHBmY19jdGwgJiBEUEZDX0NUTF9FTikgewogCQlpZiAoZGV2X3ByaXYtPmNmYl9waXRjaCA9PSBkZXZfcHJpdi0+Y2ZiX3BpdGNoIC8gNjQgLSAxICYmCi0JCSAgICBkZXZfcHJpdi0+Y2ZiX2ZlbmNlID09IG9ial9wcml2LT5mZW5jZV9yZWcgJiYKKwkJICAgIGRldl9wcml2LT5jZmJfZmVuY2UgPT0gb2JqLT5mZW5jZV9yZWcgJiYKIAkJICAgIGRldl9wcml2LT5jZmJfcGxhbmUgPT0gaW50ZWxfY3J0Yy0+cGxhbmUgJiYKIAkJICAgIGRldl9wcml2LT5jZmJfeSA9PSBjcnRjLT55KQogCQkJcmV0dXJuOwpAQCAtMTE3MCwxMiArMTE2OCwxMiBAQAogCX0KIAogCWRldl9wcml2LT5jZmJfcGl0Y2ggPSAoZGV2X3ByaXYtPmNmYl9waXRjaCAvIDY0KSAtIDE7Ci0JZGV2X3ByaXYtPmNmYl9mZW5jZSA9IG9ial9wcml2LT5mZW5jZV9yZWc7CisJZGV2X3ByaXYtPmNmYl9mZW5jZSA9IG9iai0+ZmVuY2VfcmVnOwogCWRldl9wcml2LT5jZmJfcGxhbmUgPSBpbnRlbF9jcnRjLT5wbGFuZTsKIAlkZXZfcHJpdi0+Y2ZiX3kgPSBjcnRjLT55OwogCiAJZHBmY19jdGwgPSBwbGFuZSB8IERQRkNfU1JfRU4gfCBEUEZDX0NUTF9MSU1JVF8xWDsKLQlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpIHsKKwlpZiAob2JqLT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FKSB7CiAJCWRwZmNfY3RsIHw9IERQRkNfQ1RMX0ZFTkNFX0VOIHwgZGV2X3ByaXYtPmNmYl9mZW5jZTsKIAkJSTkxNV9XUklURShEUEZDX0NISUNLRU4sIERQRkNfSFRfTU9ESUZZKTsKIAl9IGVsc2UgewpAQCAtMTIyMSw3ICsxMjE5LDcgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gY3J0Yy0+ZmI7CiAJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhpbnRlbF9mYi0+b2JqKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmItPm9iajsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CiAJaW50IHBsYW5lID0gaW50ZWxfY3J0Yy0+cGxhbmUgPT0gMCA/IERQRkNfQ1RMX1BMQU5FQSA6IERQRkNfQ1RMX1BMQU5FQjsKIAl1bnNpZ25lZCBsb25nIHN0YWxsX3dhdGVybWFyayA9IDIwMDsKQEAgLTEyMzAsOSArMTIyOCw5IEBACiAJZHBmY19jdGwgPSBJOTE1X1JFQUQoSUxLX0RQRkNfQ09OVFJPTCk7CiAJaWYgKGRwZmNfY3RsICYgRFBGQ19DVExfRU4pIHsKIAkJaWYgKGRldl9wcml2LT5jZmJfcGl0Y2ggPT0gZGV2X3ByaXYtPmNmYl9waXRjaCAvIDY0IC0gMSAmJgotCQkgICAgZGV2X3ByaXYtPmNmYl9mZW5jZSA9PSBvYmpfcHJpdi0+ZmVuY2VfcmVnICYmCisJCSAgICBkZXZfcHJpdi0+Y2ZiX2ZlbmNlID09IG9iai0+ZmVuY2VfcmVnICYmCiAJCSAgICBkZXZfcHJpdi0+Y2ZiX3BsYW5lID09IGludGVsX2NydGMtPnBsYW5lICYmCi0JCSAgICBkZXZfcHJpdi0+Y2ZiX29mZnNldCA9PSBvYmpfcHJpdi0+Z3R0X29mZnNldCAmJgorCQkgICAgZGV2X3ByaXYtPmNmYl9vZmZzZXQgPT0gb2JqLT5ndHRfb2Zmc2V0ICYmCiAJCSAgICBkZXZfcHJpdi0+Y2ZiX3kgPT0gY3J0Yy0+eSkKIAkJCXJldHVybjsKIApAQCAtMTI0MiwxNCArMTI0MCwxNCBAQAogCX0KIAogCWRldl9wcml2LT5jZmJfcGl0Y2ggPSAoZGV2X3ByaXYtPmNmYl9waXRjaCAvIDY0KSAtIDE7Ci0JZGV2X3ByaXYtPmNmYl9mZW5jZSA9IG9ial9wcml2LT5mZW5jZV9yZWc7CisJZGV2X3ByaXYtPmNmYl9mZW5jZSA9IG9iai0+ZmVuY2VfcmVnOwogCWRldl9wcml2LT5jZmJfcGxhbmUgPSBpbnRlbF9jcnRjLT5wbGFuZTsKLQlkZXZfcHJpdi0+Y2ZiX29mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OworCWRldl9wcml2LT5jZmJfb2Zmc2V0ID0gb2JqLT5ndHRfb2Zmc2V0OwogCWRldl9wcml2LT5jZmJfeSA9IGNydGMtPnk7CiAKIAlkcGZjX2N0bCAmPSBEUEZDX1JFU0VSVkVEOwogCWRwZmNfY3RsIHw9IChwbGFuZSB8IERQRkNfQ1RMX0xJTUlUXzFYKTsKLQlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpIHsKKwlpZiAob2JqLT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FKSB7CiAJCWRwZmNfY3RsIHw9IChEUEZDX0NUTF9GRU5DRV9FTiB8IGRldl9wcml2LT5jZmJfZmVuY2UpOwogCQlJOTE1X1dSSVRFKElMS19EUEZDX0NISUNLRU4sIERQRkNfSFRfTU9ESUZZKTsKIAl9IGVsc2UgewpAQCAtMTI2MCwxMCArMTI1OCwxNiBAQAogCQkgICAoc3RhbGxfd2F0ZXJtYXJrIDw8IERQRkNfUkVDT01QX1NUQUxMX1dNX1NISUZUKSB8CiAJCSAgIChpbnRlcnZhbCA8PCBEUEZDX1JFQ09NUF9USU1FUl9DT1VOVF9TSElGVCkpOwogCUk5MTVfV1JJVEUoSUxLX0RQRkNfRkVOQ0VfWU9GRiwgY3J0Yy0+eSk7Ci0JSTkxNV9XUklURShJTEtfRkJDX1JUX0JBU0UsIG9ial9wcml2LT5ndHRfb2Zmc2V0IHwgSUxLX0ZCQ19SVF9WQUxJRCk7CisJSTkxNV9XUklURShJTEtfRkJDX1JUX0JBU0UsIG9iai0+Z3R0X29mZnNldCB8IElMS19GQkNfUlRfVkFMSUQpOwogCS8qIGVuYWJsZSBpdC4uLiAqLwogCUk5MTVfV1JJVEUoSUxLX0RQRkNfQ09OVFJPTCwgZHBmY19jdGwgfCBEUEZDX0NUTF9FTik7CiAKKwlpZiAoSVNfR0VONihkZXYpKSB7CisJCUk5MTVfV1JJVEUoU05CX0RQRkNfQ1RMX1NBLAorCQkJICAgU05CX0NQVV9GRU5DRV9FTkFCTEUgfCBkZXZfcHJpdi0+Y2ZiX2ZlbmNlKTsKKwkJSTkxNV9XUklURShEUEZDX0NQVV9GRU5DRV9PRkZTRVQsIGNydGMtPnkpOworCX0KKwogCURSTV9ERUJVR19LTVMoImVuYWJsZWQgZmJjIG9uIHBsYW5lICVkXG4iLCBpbnRlbF9jcnRjLT5wbGFuZSk7CiB9CiAKQEAgLTEzNDUsNyArMTM0OSw3IEBACiAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7CiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CiAJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYjsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAogCURSTV9ERUJVR19LTVMoIlxuIik7CiAKQEAgLTEzODQsOSArMTM4OCw5IEBACiAJaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CiAJZmIgPSBjcnRjLT5mYjsKIAlpbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKLQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKGludGVsX2ZiLT5vYmopOworCW9iaiA9IGludGVsX2ZiLT5vYmo7CiAKLQlpZiAoaW50ZWxfZmItPm9iai0+c2l6ZSA+IGRldl9wcml2LT5jZmJfc2l6ZSkgeworCWlmIChpbnRlbF9mYi0+b2JqLT5iYXNlLnNpemUgPiBkZXZfcHJpdi0+Y2ZiX3NpemUpIHsKIAkJRFJNX0RFQlVHX0tNUygiZnJhbWVidWZmZXIgdG9vIGxhcmdlLCBkaXNhYmxpbmcgIgogCQkJICAgICAgImNvbXByZXNzaW9uXG4iKTsKIAkJZGV2X3ByaXYtPm5vX2ZiY19yZWFzb24gPSBGQkNfU1RPTEVOX1RPT19TTUFMTDsKQEAgLTE0MTAsNyArMTQxNCw3IEBACiAJCWRldl9wcml2LT5ub19mYmNfcmVhc29uID0gRkJDX0JBRF9QTEFORTsKIAkJZ290byBvdXRfZGlzYWJsZTsKIAl9Ci0JaWYgKG9ial9wcml2LT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19YKSB7CisJaWYgKG9iai0+dGlsaW5nX21vZGUgIT0gSTkxNV9USUxJTkdfWCkgewogCQlEUk1fREVCVUdfS01TKCJmcmFtZWJ1ZmZlciBub3QgdGlsZWQsIGRpc2FibGluZyBjb21wcmVzc2lvblxuIik7CiAJCWRldl9wcml2LT5ub19mYmNfcmVhc29uID0gRkJDX05PVF9USUxFRDsKIAkJZ290byBvdXRfZGlzYWJsZTsKQEAgLTE0MzMsMTQgKzE0MzcsMTMgQEAKIAogaW50CiBpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgICBib29sIHBpcGVsaW5lZCkKKwkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnBpcGVsaW5lZCkKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwogCXUzMiBhbGlnbm1lbnQ7CiAJaW50IHJldDsKIAotCXN3aXRjaCAob2JqX3ByaXYtPnRpbGluZ19tb2RlKSB7CisJc3dpdGNoIChvYmotPnRpbGluZ19tb2RlKSB7CiAJY2FzZSBJOTE1X1RJTElOR19OT05FOgogCQlpZiAoSVNfQlJPQURXQVRFUihkZXYpIHx8IElTX0NSRVNUTElORShkZXYpKQogCQkJYWxpZ25tZW50ID0gMTI4ICogMTAyNDsKQEAgLTE0NjEsNyArMTQ2NCw3IEBACiAJCUJVRygpOwogCX0KIAotCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ob2JqLCBhbGlnbm1lbnQpOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ob2JqLCBhbGlnbm1lbnQsIHRydWUpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTE0NzQsOSArMTQ3Nyw4IEBACiAJICogZnJhbWVidWZmZXIgY29tcHJlc3Npb24uICBGb3Igc2ltcGxpY2l0eSwgd2UgYWx3YXlzIGluc3RhbGwKIAkgKiBhIGZlbmNlIGFzIHRoZSBjb3N0IGlzIG5vdCB0aGF0IG9uZXJvdXMuCiAJICovCi0JaWYgKG9ial9wcml2LT5mZW5jZV9yZWcgPT0gSTkxNV9GRU5DRV9SRUdfTk9ORSAmJgotCSAgICBvYmpfcHJpdi0+dGlsaW5nX21vZGUgIT0gSTkxNV9USUxJTkdfTk9ORSkgewotCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X2ZlbmNlX3JlZyhvYmosIGZhbHNlKTsKKwlpZiAob2JqLT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FKSB7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfZmVuY2Uob2JqLCBwaXBlbGluZWQsIGZhbHNlKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyX3VucGluOwogCX0KQEAgLTE0OTcsOCArMTQ5OSw3IEBACiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CiAJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYjsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAlpbnQgcGxhbmUgPSBpbnRlbF9jcnRjLT5wbGFuZTsKIAl1bnNpZ25lZCBsb25nIFN0YXJ0LCBPZmZzZXQ7CiAJdTMyIGRzcGNudHI7CkBAIC0xNTE1LDcgKzE1MTYsNiBAQAogCiAJaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7CiAJb2JqID0gaW50ZWxfZmItPm9iajsKLQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7CiAKIAlyZWcgPSBEU1BDTlRSKHBsYW5lKTsKIAlkc3BjbnRyID0gSTkxNV9SRUFEKHJlZyk7CkBAIC0xNTQwLDcgKzE1NDAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQpIHsKLQkJaWYgKG9ial9wcml2LT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FKQorCQlpZiAob2JqLT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FKQogCQkJZHNwY250ciB8PSBESVNQUExBTkVfVElMRUQ7CiAJCWVsc2UKIAkJCWRzcGNudHIgJj0gfkRJU1BQTEFORV9USUxFRDsKQEAgLTE1NTIsNyArMTU1Miw3IEBACiAKIAlJOTE1X1dSSVRFKHJlZywgZHNwY250cik7CiAKLQlTdGFydCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OworCVN0YXJ0ID0gb2JqLT5ndHRfb2Zmc2V0OwogCU9mZnNldCA9IHkgKiBmYi0+cGl0Y2ggKyB4ICogKGZiLT5iaXRzX3Blcl9waXhlbCAvIDgpOwogCiAJRFJNX0RFQlVHX0tNUygiV3JpdGluZyBiYXNlICUwOGxYICUwOGxYICVkICVkICVkXG4iLApAQCAtMTU5OCw3ICsxNTk4LDcgQEAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJcmV0ID0gaW50ZWxfcGluX2FuZF9mZW5jZV9mYl9vYmooZGV2LAogCQkJCQkgdG9faW50ZWxfZnJhbWVidWZmZXIoY3J0Yy0+ZmIpLT5vYmosCi0JCQkJCSBmYWxzZSk7CisJCQkJCSBOVUxMKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJCXJldHVybiByZXQ7CkBAIC0xNjA2LDE4ICsxNjA2LDE3IEBACiAKIAlpZiAob2xkX2ZiKSB7CiAJCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdG9faW50ZWxfZnJhbWVidWZmZXIob2xkX2ZiKS0+b2JqOwotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdG9faW50ZWxfZnJhbWVidWZmZXIob2xkX2ZiKS0+b2JqOwogCiAJCXdhaXRfZXZlbnQoZGV2X3ByaXYtPnBlbmRpbmdfZmxpcF9xdWV1ZSwKLQkJCSAgIGF0b21pY19yZWFkKCZvYmpfcHJpdi0+cGVuZGluZ19mbGlwKSA9PSAwKTsKKwkJCSAgIGF0b21pY19yZWFkKCZvYmotPnBlbmRpbmdfZmxpcCkgPT0gMCk7CiAKIAkJLyogQmlnIEhhbW1lciwgd2UgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IGFueSBwZW5kaW5nCiAJCSAqIE1JX1dBSVRfRk9SX0VWRU5UIGluc2lkZSBhIHVzZXIgYmF0Y2ggYnVmZmVyIG9uIHRoZQogCQkgKiBjdXJyZW50IHNjYW5vdXQgaXMgcmV0aXJlZCBiZWZvcmUgdW5waW5uaW5nIHRoZSBvbGQKIAkJICogZnJhbWVidWZmZXIuCiAJCSAqLwotCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1KG9ial9wcml2LCBmYWxzZSk7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHUob2JqLCBmYWxzZSk7CiAJCWlmIChyZXQpIHsKIAkJCWk5MTVfZ2VtX29iamVjdF91bnBpbih0b19pbnRlbF9mcmFtZWJ1ZmZlcihjcnRjLT5mYiktPm9iaik7CiAJCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKQEAgLTE2MzMsOCArMTYzMiwxMCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChvbGRfZmIpCisJaWYgKG9sZF9mYikgeworCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2LCBpbnRlbF9jcnRjLT5waXBlKTsKIAkJaTkxNV9nZW1fb2JqZWN0X3VucGluKHRvX2ludGVsX2ZyYW1lYnVmZmVyKG9sZF9mYiktPm9iaik7CisJfQogCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKQEAgLTE5OTYsMzEgKzE5OTcsMzEgQEAKIHN0YXRpYyB2b2lkIGludGVsX2NsZWFyX3NjYW5saW5lX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZzsKIAl1MzIgdG1wOwogCiAJaWYgKElTX0dFTjIoZGV2KSkKIAkJLyogQ2FuJ3QgYnJlYWsgdGhlIGhhbmcgb24gaTh4eCAqLwogCQlyZXR1cm47CiAKLQl0bXAgPSBJOTE1X1JFQUQoUFJCMF9DVEwpOwotCWlmICh0bXAgJiBSSU5HX1dBSVQpIHsKLQkJSTkxNV9XUklURShQUkIwX0NUTCwgdG1wKTsKLQkJUE9TVElOR19SRUFEKFBSQjBfQ1RMKTsKLQl9CisJcmluZyA9IExQX1JJTkcoZGV2X3ByaXYpOworCXRtcCA9IEk5MTVfUkVBRF9DVEwocmluZyk7CisJaWYgKHRtcCAmIFJJTkdfV0FJVCkKKwkJSTkxNV9XUklURV9DVEwocmluZywgdG1wKTsKIH0KIAogc3RhdGljIHZvaWQgaW50ZWxfY3J0Y193YWl0X2Zvcl9wZW5kaW5nX2ZsaXBzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXY7CiAKIAlpZiAoY3J0Yy0+ZmIgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0Jb2JqX3ByaXYgPSB0b19pbnRlbF9ibyh0b19pbnRlbF9mcmFtZWJ1ZmZlcihjcnRjLT5mYiktPm9iaik7CisJb2JqID0gdG9faW50ZWxfZnJhbWVidWZmZXIoY3J0Yy0+ZmIpLT5vYmo7CiAJZGV2X3ByaXYgPSBjcnRjLT5kZXYtPmRldl9wcml2YXRlOwogCXdhaXRfZXZlbnQoZGV2X3ByaXYtPnBlbmRpbmdfZmxpcF9xdWV1ZSwKLQkJICAgYXRvbWljX3JlYWQoJm9ial9wcml2LT5wZW5kaW5nX2ZsaXApID09IDApOworCQkgICBhdG9taWNfcmVhZCgmb2JqLT5wZW5kaW5nX2ZsaXApID09IDApOwogfQogCiBzdGF0aWMgdm9pZCBpcm9ubGFrZV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCkBAIC0yODUwLDYgKzI4NTEsMzkgQEAKIAlJTEtfRklGT19MSU5FX1NJWkUKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyBzYW5keWJyaWRnZV9kaXNwbGF5X3dtX2luZm8gPSB7CisJU05CX0RJU1BMQVlfRklGTywKKwlTTkJfRElTUExBWV9NQVhXTSwKKwlTTkJfRElTUExBWV9ERlRXTSwKKwkyLAorCVNOQl9GSUZPX0xJTkVfU0laRQorfTsKKworc3RhdGljIHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zIHNhbmR5YnJpZGdlX2N1cnNvcl93bV9pbmZvID0geworCVNOQl9DVVJTT1JfRklGTywKKwlTTkJfQ1VSU09SX01BWFdNLAorCVNOQl9DVVJTT1JfREZUV00sCisJMiwKKwlTTkJfRklGT19MSU5FX1NJWkUKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyBzYW5keWJyaWRnZV9kaXNwbGF5X3Nyd21faW5mbyA9IHsKKwlTTkJfRElTUExBWV9TUl9GSUZPLAorCVNOQl9ESVNQTEFZX01BWF9TUldNLAorCVNOQl9ESVNQTEFZX0RGVF9TUldNLAorCTIsCisJU05CX0ZJRk9fTElORV9TSVpFCit9OworCitzdGF0aWMgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgc2FuZHlicmlkZ2VfY3Vyc29yX3Nyd21faW5mbyA9IHsKKwlTTkJfQ1VSU09SX1NSX0ZJRk8sCisJU05CX0NVUlNPUl9NQVhfU1JXTSwKKwlTTkJfQ1VSU09SX0RGVF9TUldNLAorCTIsCisJU05CX0ZJRk9fTElORV9TSVpFCit9OworCisKIC8qKgogICogaW50ZWxfY2FsY3VsYXRlX3dtIC0gY2FsY3VsYXRlIHdhdGVybWFyayBsZXZlbAogICogQGNsb2NrX2luX2toejogcGl4ZWwgY2xvY2sKQEAgLTMzODMsMTIgKzM0MTcsMTcgQEAKIAogc3RhdGljIGJvb2wgaXJvbmxha2VfY29tcHV0ZV93bTAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgaW50IHBpcGUsCisJCQkJIGNvbnN0IHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zICpkaXNwbGF5LAorCQkJCSBpbnQgZGlzcGxheV9sYXRlbmN5X25zLAorCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyAqY3Vyc29yLAorCQkJCSBpbnQgY3Vyc29yX2xhdGVuY3lfbnMsCiAJCQkJIGludCAqcGxhbmVfd20sCiAJCQkJIGludCAqY3Vyc29yX3dtKQogewogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQlpbnQgaHRvdGFsLCBoZGlzcGxheSwgY2xvY2ssIHBpeGVsX3NpemUgPSAwOwotCWludCBsaW5lX3RpbWVfdXMsIGxpbmVfY291bnQsIGVudHJpZXM7CisJaW50IGh0b3RhbCwgaGRpc3BsYXksIGNsb2NrLCBwaXhlbF9zaXplOworCWludCBsaW5lX3RpbWVfdXMsIGxpbmVfY291bnQ7CisJaW50IGVudHJpZXMsIHRsYl9taXNzOwogCiAJY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldiwgcGlwZSk7CiAJaWYgKGNydGMtPmZiID09IE5VTEwgfHwgIWNydGMtPmVuYWJsZWQpCkBAIC0zNDAwLDM3ICszNDM5LDE0MSBAQAogCXBpeGVsX3NpemUgPSBjcnRjLT5mYi0+Yml0c19wZXJfcGl4ZWwgLyA4OwogCiAJLyogVXNlIHRoZSBzbWFsbCBidWZmZXIgbWV0aG9kIHRvIGNhbGN1bGF0ZSBwbGFuZSB3YXRlcm1hcmsgKi8KLQllbnRyaWVzID0gKChjbG9jayAqIHBpeGVsX3NpemUgLyAxMDAwKSAqIElMS19MUDBfUExBTkVfTEFURU5DWSkgLyAxMDAwOwotCWVudHJpZXMgPSBESVZfUk9VTkRfVVAoZW50cmllcywKLQkJCSAgICAgICBpcm9ubGFrZV9kaXNwbGF5X3dtX2luZm8uY2FjaGVsaW5lX3NpemUpOwotCSpwbGFuZV93bSA9IGVudHJpZXMgKyBpcm9ubGFrZV9kaXNwbGF5X3dtX2luZm8uZ3VhcmRfc2l6ZTsKLQlpZiAoKnBsYW5lX3dtID4gKGludClpcm9ubGFrZV9kaXNwbGF5X3dtX2luZm8ubWF4X3dtKQotCQkqcGxhbmVfd20gPSBpcm9ubGFrZV9kaXNwbGF5X3dtX2luZm8ubWF4X3dtOworCWVudHJpZXMgPSAoKGNsb2NrICogcGl4ZWxfc2l6ZSAvIDEwMDApICogZGlzcGxheV9sYXRlbmN5X25zKSAvIDEwMDA7CisJdGxiX21pc3MgPSBkaXNwbGF5LT5maWZvX3NpemUqZGlzcGxheS0+Y2FjaGVsaW5lX3NpemUgLSBoZGlzcGxheSAqIDg7CisJaWYgKHRsYl9taXNzID4gMCkKKwkJZW50cmllcyArPSB0bGJfbWlzczsKKwllbnRyaWVzID0gRElWX1JPVU5EX1VQKGVudHJpZXMsIGRpc3BsYXktPmNhY2hlbGluZV9zaXplKTsKKwkqcGxhbmVfd20gPSBlbnRyaWVzICsgZGlzcGxheS0+Z3VhcmRfc2l6ZTsKKwlpZiAoKnBsYW5lX3dtID4gKGludClkaXNwbGF5LT5tYXhfd20pCisJCSpwbGFuZV93bSA9IGRpc3BsYXktPm1heF93bTsKIAogCS8qIFVzZSB0aGUgbGFyZ2UgYnVmZmVyIG1ldGhvZCB0byBjYWxjdWxhdGUgY3Vyc29yIHdhdGVybWFyayAqLwogCWxpbmVfdGltZV91cyA9ICgoaHRvdGFsICogMTAwMCkgLyBjbG9jayk7Ci0JbGluZV9jb3VudCA9IChJTEtfTFAwX0NVUlNPUl9MQVRFTkNZIC8gbGluZV90aW1lX3VzICsgMTAwMCkgLyAxMDAwOworCWxpbmVfY291bnQgPSAoY3Vyc29yX2xhdGVuY3lfbnMgLyBsaW5lX3RpbWVfdXMgKyAxMDAwKSAvIDEwMDA7CiAJZW50cmllcyA9IGxpbmVfY291bnQgKiA2NCAqIHBpeGVsX3NpemU7Ci0JZW50cmllcyA9IERJVl9ST1VORF9VUChlbnRyaWVzLAotCQkJICAgICAgIGlyb25sYWtlX2N1cnNvcl93bV9pbmZvLmNhY2hlbGluZV9zaXplKTsKLQkqY3Vyc29yX3dtID0gZW50cmllcyArIGlyb25sYWtlX2N1cnNvcl93bV9pbmZvLmd1YXJkX3NpemU7Ci0JaWYgKCpjdXJzb3Jfd20gPiBpcm9ubGFrZV9jdXJzb3Jfd21faW5mby5tYXhfd20pCi0JCSpjdXJzb3Jfd20gPSBpcm9ubGFrZV9jdXJzb3Jfd21faW5mby5tYXhfd207CisJdGxiX21pc3MgPSBjdXJzb3ItPmZpZm9fc2l6ZSpjdXJzb3ItPmNhY2hlbGluZV9zaXplIC0gaGRpc3BsYXkgKiA4OworCWlmICh0bGJfbWlzcyA+IDApCisJCWVudHJpZXMgKz0gdGxiX21pc3M7CisJZW50cmllcyA9IERJVl9ST1VORF9VUChlbnRyaWVzLCBjdXJzb3ItPmNhY2hlbGluZV9zaXplKTsKKwkqY3Vyc29yX3dtID0gZW50cmllcyArIGN1cnNvci0+Z3VhcmRfc2l6ZTsKKwlpZiAoKmN1cnNvcl93bSA+IChpbnQpY3Vyc29yLT5tYXhfd20pCisJCSpjdXJzb3Jfd20gPSAoaW50KWN1cnNvci0+bWF4X3dtOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qCisgKiBDaGVjayB0aGUgd20gcmVzdWx0LgorICoKKyAqIElmIGFueSBjYWxjdWxhdGVkIHdhdGVybWFyayB2YWx1ZXMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgdGhhdAorICogY2FuIGJlIHByb2dyYW1tZWQgaW50byB0aGUgYXNzb2NpYXRlZCB3YXRlcm1hcmsgcmVnaXN0ZXIsIHRoYXQgd2F0ZXJtYXJrCisgKiBtdXN0IGJlIGRpc2FibGVkLgorICovCitzdGF0aWMgYm9vbCBpcm9ubGFrZV9jaGVja19zcndtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBsZXZlbCwKKwkJCQlpbnQgZmJjX3dtLCBpbnQgZGlzcGxheV93bSwgaW50IGN1cnNvcl93bSwKKwkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyAqZGlzcGxheSwKKwkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyAqY3Vyc29yKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlEUk1fREVCVUdfS01TKCJ3YXRlcm1hcmsgJWQ6IGRpc3BsYXkgcGxhbmUgJWQsIGZiYyBsaW5lcyAlZCwiCisJCSAgICAgICIgY3Vyc29yICVkXG4iLCBsZXZlbCwgZGlzcGxheV93bSwgZmJjX3dtLCBjdXJzb3Jfd20pOworCisJaWYgKGZiY193bSA+IFNOQl9GQkNfTUFYX1NSV00pIHsKKwkJRFJNX0RFQlVHX0tNUygiZmJjIHdhdGVybWFyayglZCkgaXMgdG9vIGxhcmdlKCVkKSwgZGlzYWJsaW5nIHdtJWQrXG4iLAorCQkJICAgICAgZmJjX3dtLCBTTkJfRkJDX01BWF9TUldNLCBsZXZlbCk7CisKKwkJLyogZmJjIGhhcyBpdCdzIG93biB3YXkgdG8gZGlzYWJsZSBGQkMgV00gKi8KKwkJSTkxNV9XUklURShESVNQX0FSQl9DVEwsCisJCQkgICBJOTE1X1JFQUQoRElTUF9BUkJfQ1RMKSB8IERJU1BfRkJDX1dNX0RJUyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoZGlzcGxheV93bSA+IGRpc3BsYXktPm1heF93bSkgeworCQlEUk1fREVCVUdfS01TKCJkaXNwbGF5IHdhdGVybWFyayglZCkgaXMgdG9vIGxhcmdlKCVkKSwgZGlzYWJsaW5nIHdtJWQrXG4iLAorCQkJICAgICAgZGlzcGxheV93bSwgU05CX0RJU1BMQVlfTUFYX1NSV00sIGxldmVsKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChjdXJzb3Jfd20gPiBjdXJzb3ItPm1heF93bSkgeworCQlEUk1fREVCVUdfS01TKCJjdXJzb3Igd2F0ZXJtYXJrKCVkKSBpcyB0b28gbGFyZ2UoJWQpLCBkaXNhYmxpbmcgd20lZCtcbiIsCisJCQkgICAgICBjdXJzb3Jfd20sIFNOQl9DVVJTT1JfTUFYX1NSV00sIGxldmVsKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICghKGZiY193bSB8fCBkaXNwbGF5X3dtIHx8IGN1cnNvcl93bSkpIHsKKwkJRFJNX0RFQlVHX0tNUygibGF0ZW5jeSAlZCBpcyAwLCBkaXNhYmxpbmcgd20lZCtcbiIsIGxldmVsLCBsZXZlbCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIENvbXB1dGUgd2F0ZXJtYXJrIHZhbHVlcyBvZiBXTVsxLTNdLAorICovCitzdGF0aWMgYm9vbCBpcm9ubGFrZV9jb21wdXRlX3Nyd20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGxldmVsLAorCQkJCSAgaW50IGhkaXNwbGF5LCBpbnQgaHRvdGFsLAorCQkJCSAgaW50IHBpeGVsX3NpemUsIGludCBjbG9jaywgaW50IGxhdGVuY3lfbnMsCisJCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyAqZGlzcGxheSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zICpjdXJzb3IsCisJCQkJICBpbnQgKmZiY193bSwgaW50ICpkaXNwbGF5X3dtLCBpbnQgKmN1cnNvcl93bSkKK3sKKworCXVuc2lnbmVkIGxvbmcgbGluZV90aW1lX3VzOworCWludCBsaW5lX2NvdW50LCBsaW5lX3NpemU7CisJaW50IHNtYWxsLCBsYXJnZTsKKwlpbnQgZW50cmllczsKKworCWlmICghbGF0ZW5jeV9ucykgeworCQkqZmJjX3dtID0gKmRpc3BsYXlfd20gPSAqY3Vyc29yX3dtID0gMDsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWxpbmVfdGltZV91cyA9IChodG90YWwgKiAxMDAwKSAvIGNsb2NrOworCWxpbmVfY291bnQgPSAobGF0ZW5jeV9ucyAvIGxpbmVfdGltZV91cyArIDEwMDApIC8gMTAwMDsKKwlsaW5lX3NpemUgPSBoZGlzcGxheSAqIHBpeGVsX3NpemU7CisKKwkvKiBVc2UgdGhlIG1pbmltdW0gb2YgdGhlIHNtYWxsIGFuZCBsYXJnZSBidWZmZXIgbWV0aG9kIGZvciBwcmltYXJ5ICovCisJc21hbGwgPSAoKGNsb2NrICogcGl4ZWxfc2l6ZSAvIDEwMDApICogbGF0ZW5jeV9ucykgLyAxMDAwOworCWxhcmdlID0gbGluZV9jb3VudCAqIGxpbmVfc2l6ZTsKKworCWVudHJpZXMgPSBESVZfUk9VTkRfVVAobWluKHNtYWxsLCBsYXJnZSksIGRpc3BsYXktPmNhY2hlbGluZV9zaXplKTsKKwkqZGlzcGxheV93bSA9IGVudHJpZXMgKyBkaXNwbGF5LT5ndWFyZF9zaXplOworCisJLyoKKwkgKiBTcGVjIHNheXM6CisJICogRkJDIFdNID0gKChGaW5hbCBQcmltYXJ5IFdNICogNjQpIC8gbnVtYmVyIG9mIGJ5dGVzIHBlciBsaW5lKSArIDIKKwkgKi8KKwkqZmJjX3dtID0gRElWX1JPVU5EX1VQKCpkaXNwbGF5X3dtICogNjQsIGxpbmVfc2l6ZSkgKyAyOworCisJLyogY2FsY3VsYXRlIHRoZSBzZWxmLXJlZnJlc2ggd2F0ZXJtYXJrIGZvciBkaXNwbGF5IGN1cnNvciAqLworCWVudHJpZXMgPSBsaW5lX2NvdW50ICogcGl4ZWxfc2l6ZSAqIDY0OworCWVudHJpZXMgPSBESVZfUk9VTkRfVVAoZW50cmllcywgY3Vyc29yLT5jYWNoZWxpbmVfc2l6ZSk7CisJKmN1cnNvcl93bSA9IGVudHJpZXMgKyBjdXJzb3ItPmd1YXJkX3NpemU7CisKKwlyZXR1cm4gaXJvbmxha2VfY2hlY2tfc3J3bShkZXYsIGxldmVsLAorCQkJCSAgICpmYmNfd20sICpkaXNwbGF5X3dtLCAqY3Vyc29yX3dtLAorCQkJCSAgIGRpc3BsYXksIGN1cnNvcik7Cit9CisKIHN0YXRpYyB2b2lkIGlyb25sYWtlX3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICAgIGludCBwbGFuZWFfY2xvY2ssIGludCBwbGFuZWJfY2xvY2ssCi0JCQkgICAgICAgaW50IHNyX2hkaXNwbGF5LCBpbnQgc3JfaHRvdGFsLAorCQkJICAgICAgIGludCBoZGlzcGxheSwgaW50IGh0b3RhbCwKIAkJCSAgICAgICBpbnQgcGl4ZWxfc2l6ZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBwbGFuZV93bSwgY3Vyc29yX3dtLCBlbmFibGVkOwotCWludCB0bXA7CisJaW50IGZiY193bSwgcGxhbmVfd20sIGN1cnNvcl93bSwgZW5hYmxlZDsKKwlpbnQgY2xvY2s7CiAKIAllbmFibGVkID0gMDsKLQlpZiAoaXJvbmxha2VfY29tcHV0ZV93bTAoZGV2LCAwLCAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CisJaWYgKGlyb25sYWtlX2NvbXB1dGVfd20wKGRldiwgMCwKKwkJCQkgJmlyb25sYWtlX2Rpc3BsYXlfd21faW5mbywKKwkJCQkgSUxLX0xQMF9QTEFORV9MQVRFTkNZLAorCQkJCSAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCisJCQkJIElMS19MUDBfQ1VSU09SX0xBVEVOQ1ksCisJCQkJICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKIAkJSTkxNV9XUklURShXTTBfUElQRUFfSUxLLAogCQkJICAgKHBsYW5lX3dtIDw8IFdNMF9QSVBFX1BMQU5FX1NISUZUKSB8IGN1cnNvcl93bSk7CiAJCURSTV9ERUJVR19LTVMoIkZJRk8gd2F0ZXJtYXJrcyBGb3IgcGlwZSBBIC0iCkBAIC0zNDM5LDcgKzM1ODIsMTIgQEAKIAkJZW5hYmxlZCsrOwogCX0KIAotCWlmIChpcm9ubGFrZV9jb21wdXRlX3dtMChkZXYsIDEsICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKKwlpZiAoaXJvbmxha2VfY29tcHV0ZV93bTAoZGV2LCAxLAorCQkJCSAmaXJvbmxha2VfZGlzcGxheV93bV9pbmZvLAorCQkJCSBJTEtfTFAwX1BMQU5FX0xBVEVOQ1ksCisJCQkJICZpcm9ubGFrZV9jdXJzb3Jfd21faW5mbywKKwkJCQkgSUxLX0xQMF9DVVJTT1JfTEFURU5DWSwKKwkJCQkgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgewogCQlJOTE1X1dSSVRFKFdNMF9QSVBFQl9JTEssCiAJCQkgICAocGxhbmVfd20gPDwgV00wX1BJUEVfUExBTkVfU0hJRlQpIHwgY3Vyc29yX3dtKTsKIAkJRFJNX0RFQlVHX0tNUygiRklGTyB3YXRlcm1hcmtzIEZvciBwaXBlIEIgLSIKQEAgLTM0NTIsNTcgKzM2MDAsMTUxIEBACiAJICogQ2FsY3VsYXRlIGFuZCB1cGRhdGUgdGhlIHNlbGYtcmVmcmVzaCB3YXRlcm1hcmsgb25seSB3aGVuIG9uZQogCSAqIGRpc3BsYXkgcGxhbmUgaXMgdXNlZC4KIAkgKi8KLQl0bXAgPSAwOwotCWlmIChlbmFibGVkID09IDEgJiYgLyogWFhYIGRpc2FibGVkIGR1ZSB0byBidWdneSBpbXBsbWVudGF0aW9uPyAqLyAwKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbGluZV90aW1lX3VzOwotCQlpbnQgc21hbGwsIGxhcmdlLCBwbGFuZV9mYmM7Ci0JCWludCBzcl9jbG9jaywgZW50cmllczsKLQkJaW50IGxpbmVfY291bnQsIGxpbmVfc2l6ZTsKLQkJLyogUmVhZCB0aGUgc2VsZi1yZWZyZXNoIGxhdGVuY3kuIFRoZSB1bml0IGlzIDAuNXVzICovCi0JCWludCBpbGtfc3JfbGF0ZW5jeSA9IEk5MTVfUkVBRChNTFRSX0lMSykgJiBJTEtfU1JMVF9NQVNLOworCUk5MTVfV1JJVEUoV00zX0xQX0lMSywgMCk7CisJSTkxNV9XUklURShXTTJfTFBfSUxLLCAwKTsKKwlJOTE1X1dSSVRFKFdNMV9MUF9JTEssIDApOwogCi0JCXNyX2Nsb2NrID0gcGxhbmVhX2Nsb2NrID8gcGxhbmVhX2Nsb2NrIDogcGxhbmViX2Nsb2NrOwotCQlsaW5lX3RpbWVfdXMgPSAoc3JfaHRvdGFsICogMTAwMCkgLyBzcl9jbG9jazsKKwlpZiAoZW5hYmxlZCAhPSAxKQorCQlyZXR1cm47CiAKLQkJLyogVXNlIG5zL3VzIHRoZW4gZGl2aWRlIHRvIHByZXNlcnZlIHByZWNpc2lvbiAqLwotCQlsaW5lX2NvdW50ID0gKChpbGtfc3JfbGF0ZW5jeSAqIDUwMCkgLyBsaW5lX3RpbWVfdXMgKyAxMDAwKQotCQkJLyAxMDAwOwotCQlsaW5lX3NpemUgPSBzcl9oZGlzcGxheSAqIHBpeGVsX3NpemU7CisJY2xvY2sgPSBwbGFuZWFfY2xvY2sgPyBwbGFuZWFfY2xvY2sgOiBwbGFuZWJfY2xvY2s7CiAKLQkJLyogVXNlIHRoZSBtaW5pbXVtIG9mIHRoZSBzbWFsbCBhbmQgbGFyZ2UgYnVmZmVyIG1ldGhvZCBmb3IgcHJpbWFyeSAqLwotCQlzbWFsbCA9ICgoc3JfY2xvY2sgKiBwaXhlbF9zaXplIC8gMTAwMCkgKiAoaWxrX3NyX2xhdGVuY3kgKiA1MDApKSAvIDEwMDA7Ci0JCWxhcmdlID0gbGluZV9jb3VudCAqIGxpbmVfc2l6ZTsKKwkvKiBXTTEgKi8KKwlpZiAoIWlyb25sYWtlX2NvbXB1dGVfc3J3bShkZXYsIDEsIGhkaXNwbGF5LCBodG90YWwsIHBpeGVsX3NpemUsCisJCQkJICAgY2xvY2ssIElMS19SRUFEX1dNMV9MQVRFTkNZKCkgKiA1MDAsCisJCQkJICAgJmlyb25sYWtlX2Rpc3BsYXlfc3J3bV9pbmZvLAorCQkJCSAgICZpcm9ubGFrZV9jdXJzb3Jfc3J3bV9pbmZvLAorCQkJCSAgICZmYmNfd20sICZwbGFuZV93bSwgJmN1cnNvcl93bSkpCisJCXJldHVybjsKIAotCQllbnRyaWVzID0gRElWX1JPVU5EX1VQKG1pbihzbWFsbCwgbGFyZ2UpLAotCQkJCSAgICAgICBpcm9ubGFrZV9kaXNwbGF5X3Nyd21faW5mby5jYWNoZWxpbmVfc2l6ZSk7CisJSTkxNV9XUklURShXTTFfTFBfSUxLLAorCQkgICBXTTFfTFBfU1JfRU4gfAorCQkgICAoSUxLX1JFQURfV00xX0xBVEVOQ1koKSA8PCBXTTFfTFBfTEFURU5DWV9TSElGVCkgfAorCQkgICAoZmJjX3dtIDw8IFdNMV9MUF9GQkNfU0hJRlQpIHwKKwkJICAgKHBsYW5lX3dtIDw8IFdNMV9MUF9TUl9TSElGVCkgfAorCQkgICBjdXJzb3Jfd20pOwogCi0JCXBsYW5lX2ZiYyA9IGVudHJpZXMgKiA2NDsKLQkJcGxhbmVfZmJjID0gRElWX1JPVU5EX1VQKHBsYW5lX2ZiYywgbGluZV9zaXplKTsKKwkvKiBXTTIgKi8KKwlpZiAoIWlyb25sYWtlX2NvbXB1dGVfc3J3bShkZXYsIDIsIGhkaXNwbGF5LCBodG90YWwsIHBpeGVsX3NpemUsCisJCQkJICAgY2xvY2ssIElMS19SRUFEX1dNMl9MQVRFTkNZKCkgKiA1MDAsCisJCQkJICAgJmlyb25sYWtlX2Rpc3BsYXlfc3J3bV9pbmZvLAorCQkJCSAgICZpcm9ubGFrZV9jdXJzb3Jfc3J3bV9pbmZvLAorCQkJCSAgICZmYmNfd20sICZwbGFuZV93bSwgJmN1cnNvcl93bSkpCisJCXJldHVybjsKIAotCQlwbGFuZV93bSA9IGVudHJpZXMgKyBpcm9ubGFrZV9kaXNwbGF5X3Nyd21faW5mby5ndWFyZF9zaXplOwotCQlpZiAocGxhbmVfd20gPiAoaW50KWlyb25sYWtlX2Rpc3BsYXlfc3J3bV9pbmZvLm1heF93bSkKLQkJCXBsYW5lX3dtID0gaXJvbmxha2VfZGlzcGxheV9zcndtX2luZm8ubWF4X3dtOworCUk5MTVfV1JJVEUoV00yX0xQX0lMSywKKwkJICAgV00yX0xQX0VOIHwKKwkJICAgKElMS19SRUFEX1dNMl9MQVRFTkNZKCkgPDwgV00xX0xQX0xBVEVOQ1lfU0hJRlQpIHwKKwkJICAgKGZiY193bSA8PCBXTTFfTFBfRkJDX1NISUZUKSB8CisJCSAgIChwbGFuZV93bSA8PCBXTTFfTFBfU1JfU0hJRlQpIHwKKwkJICAgY3Vyc29yX3dtKTsKIAotCQkvKiBjYWxjdWxhdGUgdGhlIHNlbGYtcmVmcmVzaCB3YXRlcm1hcmsgZm9yIGRpc3BsYXkgY3Vyc29yICovCi0JCWVudHJpZXMgPSBsaW5lX2NvdW50ICogcGl4ZWxfc2l6ZSAqIDY0OwotCQllbnRyaWVzID0gRElWX1JPVU5EX1VQKGVudHJpZXMsCi0JCQkJICAgICAgIGlyb25sYWtlX2N1cnNvcl9zcndtX2luZm8uY2FjaGVsaW5lX3NpemUpOworCS8qCisJICogV00zIGlzIHVuc3VwcG9ydGVkIG9uIElMSywgcHJvYmFibHkgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGxhdGVuY3kKKwkgKiBkYXRhIGZvciB0aGF0IHBvd2VyIHN0YXRlCisJICovCit9CiAKLQkJY3Vyc29yX3dtID0gZW50cmllcyArIGlyb25sYWtlX2N1cnNvcl9zcndtX2luZm8uZ3VhcmRfc2l6ZTsKLQkJaWYgKGN1cnNvcl93bSA+IChpbnQpaXJvbmxha2VfY3Vyc29yX3Nyd21faW5mby5tYXhfd20pCi0JCQljdXJzb3Jfd20gPSBpcm9ubGFrZV9jdXJzb3Jfc3J3bV9pbmZvLm1heF93bTsKK3N0YXRpYyB2b2lkIHNhbmR5YnJpZGdlX3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgIGludCBwbGFuZWFfY2xvY2ssIGludCBwbGFuZWJfY2xvY2ssCisJCQkgICAgICAgaW50IGhkaXNwbGF5LCBpbnQgaHRvdGFsLAorCQkJICAgICAgIGludCBwaXhlbF9zaXplKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGxhdGVuY3kgPSBTTkJfUkVBRF9XTTBfTEFURU5DWSgpICogMTAwOwkvKiBJbiB1bml0IDAuMXVzICovCisJaW50IGZiY193bSwgcGxhbmVfd20sIGN1cnNvcl93bSwgZW5hYmxlZDsKKwlpbnQgY2xvY2s7CiAKLQkJLyogY29uZmlndXJlIHdhdGVybWFyayBhbmQgZW5hYmxlIHNlbGYtcmVmcmVzaCAqLwotCQl0bXAgPSAoV00xX0xQX1NSX0VOIHwKLQkJICAgICAgIChpbGtfc3JfbGF0ZW5jeSA8PCBXTTFfTFBfTEFURU5DWV9TSElGVCkgfAotCQkgICAgICAgKHBsYW5lX2ZiYyA8PCBXTTFfTFBfRkJDX1NISUZUKSB8Ci0JCSAgICAgICAocGxhbmVfd20gPDwgV00xX0xQX1NSX1NISUZUKSB8Ci0JCSAgICAgICBjdXJzb3Jfd20pOwotCQlEUk1fREVCVUdfS01TKCJzZWxmLXJlZnJlc2ggd2F0ZXJtYXJrOiBkaXNwbGF5IHBsYW5lICVkLCBmYmMgbGluZXMgJWQsIgotCQkJICAgICAgIiBjdXJzb3IgJWRcbiIsIHBsYW5lX3dtLCBwbGFuZV9mYmMsIGN1cnNvcl93bSk7CisJZW5hYmxlZCA9IDA7CisJaWYgKGlyb25sYWtlX2NvbXB1dGVfd20wKGRldiwgMCwKKwkJCQkgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfd21faW5mbywgbGF0ZW5jeSwKKwkJCQkgJnNhbmR5YnJpZGdlX2N1cnNvcl93bV9pbmZvLCBsYXRlbmN5LAorCQkJCSAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CisJCUk5MTVfV1JJVEUoV00wX1BJUEVBX0lMSywKKwkJCSAgIChwbGFuZV93bSA8PCBXTTBfUElQRV9QTEFORV9TSElGVCkgfCBjdXJzb3Jfd20pOworCQlEUk1fREVCVUdfS01TKCJGSUZPIHdhdGVybWFya3MgRm9yIHBpcGUgQSAtIgorCQkJICAgICAgIiBwbGFuZSAlZCwgIiAiY3Vyc29yOiAlZFxuIiwKKwkJCSAgICAgIHBsYW5lX3dtLCBjdXJzb3Jfd20pOworCQllbmFibGVkKys7CiAJfQotCUk5MTVfV1JJVEUoV00xX0xQX0lMSywgdG1wKTsKLQkvKiBYWFggc2V0dXAgV00yIGFuZCBXTTMgKi8KKworCWlmIChpcm9ubGFrZV9jb21wdXRlX3dtMChkZXYsIDEsCisJCQkJICZzYW5keWJyaWRnZV9kaXNwbGF5X3dtX2luZm8sIGxhdGVuY3ksCisJCQkJICZzYW5keWJyaWRnZV9jdXJzb3Jfd21faW5mbywgbGF0ZW5jeSwKKwkJCQkgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgeworCQlJOTE1X1dSSVRFKFdNMF9QSVBFQl9JTEssCisJCQkgICAocGxhbmVfd20gPDwgV00wX1BJUEVfUExBTkVfU0hJRlQpIHwgY3Vyc29yX3dtKTsKKwkJRFJNX0RFQlVHX0tNUygiRklGTyB3YXRlcm1hcmtzIEZvciBwaXBlIEIgLSIKKwkJCSAgICAgICIgcGxhbmUgJWQsIGN1cnNvcjogJWRcbiIsCisJCQkgICAgICBwbGFuZV93bSwgY3Vyc29yX3dtKTsKKwkJZW5hYmxlZCsrOworCX0KKworCS8qCisJICogQ2FsY3VsYXRlIGFuZCB1cGRhdGUgdGhlIHNlbGYtcmVmcmVzaCB3YXRlcm1hcmsgb25seSB3aGVuIG9uZQorCSAqIGRpc3BsYXkgcGxhbmUgaXMgdXNlZC4KKwkgKgorCSAqIFNOQiBzdXBwb3J0IDMgbGV2ZWxzIG9mIHdhdGVybWFyay4KKwkgKgorCSAqIFdNMS9XTTIvV00yIHdhdGVybWFya3MgaGF2ZSB0byBiZSBlbmFibGVkIGluIHRoZSBhc2NlbmRpbmcgb3JkZXIsCisJICogYW5kIGRpc2FibGVkIGluIHRoZSBkZXNjZW5kaW5nIG9yZGVyCisJICoKKwkgKi8KKwlJOTE1X1dSSVRFKFdNM19MUF9JTEssIDApOworCUk5MTVfV1JJVEUoV00yX0xQX0lMSywgMCk7CisJSTkxNV9XUklURShXTTFfTFBfSUxLLCAwKTsKKworCWlmIChlbmFibGVkICE9IDEpCisJCXJldHVybjsKKworCWNsb2NrID0gcGxhbmVhX2Nsb2NrID8gcGxhbmVhX2Nsb2NrIDogcGxhbmViX2Nsb2NrOworCisJLyogV00xICovCisJaWYgKCFpcm9ubGFrZV9jb21wdXRlX3Nyd20oZGV2LCAxLCBoZGlzcGxheSwgaHRvdGFsLCBwaXhlbF9zaXplLAorCQkJCSAgIGNsb2NrLCBTTkJfUkVBRF9XTTFfTEFURU5DWSgpICogNTAwLAorCQkJCSAgICZzYW5keWJyaWRnZV9kaXNwbGF5X3Nyd21faW5mbywKKwkJCQkgICAmc2FuZHlicmlkZ2VfY3Vyc29yX3Nyd21faW5mbywKKwkJCQkgICAmZmJjX3dtLCAmcGxhbmVfd20sICZjdXJzb3Jfd20pKQorCQlyZXR1cm47CisKKwlJOTE1X1dSSVRFKFdNMV9MUF9JTEssCisJCSAgIFdNMV9MUF9TUl9FTiB8CisJCSAgIChTTkJfUkVBRF9XTTFfTEFURU5DWSgpIDw8IFdNMV9MUF9MQVRFTkNZX1NISUZUKSB8CisJCSAgIChmYmNfd20gPDwgV00xX0xQX0ZCQ19TSElGVCkgfAorCQkgICAocGxhbmVfd20gPDwgV00xX0xQX1NSX1NISUZUKSB8CisJCSAgIGN1cnNvcl93bSk7CisKKwkvKiBXTTIgKi8KKwlpZiAoIWlyb25sYWtlX2NvbXB1dGVfc3J3bShkZXYsIDIsCisJCQkJICAgaGRpc3BsYXksIGh0b3RhbCwgcGl4ZWxfc2l6ZSwKKwkJCQkgICBjbG9jaywgU05CX1JFQURfV00yX0xBVEVOQ1koKSAqIDUwMCwKKwkJCQkgICAmc2FuZHlicmlkZ2VfZGlzcGxheV9zcndtX2luZm8sCisJCQkJICAgJnNhbmR5YnJpZGdlX2N1cnNvcl9zcndtX2luZm8sCisJCQkJICAgJmZiY193bSwgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkKKwkJcmV0dXJuOworCisJSTkxNV9XUklURShXTTJfTFBfSUxLLAorCQkgICBXTTJfTFBfRU4gfAorCQkgICAoU05CX1JFQURfV00yX0xBVEVOQ1koKSA8PCBXTTFfTFBfTEFURU5DWV9TSElGVCkgfAorCQkgICAoZmJjX3dtIDw8IFdNMV9MUF9GQkNfU0hJRlQpIHwKKwkJICAgKHBsYW5lX3dtIDw8IFdNMV9MUF9TUl9TSElGVCkgfAorCQkgICBjdXJzb3Jfd20pOworCisJLyogV00zICovCisJaWYgKCFpcm9ubGFrZV9jb21wdXRlX3Nyd20oZGV2LCAzLAorCQkJCSAgIGhkaXNwbGF5LCBodG90YWwsIHBpeGVsX3NpemUsCisJCQkJICAgY2xvY2ssIFNOQl9SRUFEX1dNM19MQVRFTkNZKCkgKiA1MDAsCisJCQkJICAgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfc3J3bV9pbmZvLAorCQkJCSAgICZzYW5keWJyaWRnZV9jdXJzb3Jfc3J3bV9pbmZvLAorCQkJCSAgICZmYmNfd20sICZwbGFuZV93bSwgJmN1cnNvcl93bSkpCisJCXJldHVybjsKKworCUk5MTVfV1JJVEUoV00zX0xQX0lMSywKKwkJICAgV00zX0xQX0VOIHwKKwkJICAgKFNOQl9SRUFEX1dNM19MQVRFTkNZKCkgPDwgV00xX0xQX0xBVEVOQ1lfU0hJRlQpIHwKKwkJICAgKGZiY193bSA8PCBXTTFfTFBfRkJDX1NISUZUKSB8CisJCSAgIChwbGFuZV93bSA8PCBXTTFfTFBfU1JfU0hJRlQpIHwKKwkJICAgY3Vyc29yX3dtKTsKIH0KIAogLyoqCkBAIC0zNjYwLDcgKzM5MDIsNyBAQAogCSAqIHJlZmNsaywgb3IgRkFMU0UuICBUaGUgcmV0dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246CiAJICogcmVmbGNrICogKDUgKiAobTEgKyAyKSArIChtMiArIDIpKSAvIChuICsgMikgLyBwMSAvIHAyLgogCSAqLwotCWxpbWl0ID0gaW50ZWxfbGltaXQoY3J0Yyk7CisJbGltaXQgPSBpbnRlbF9saW1pdChjcnRjLCByZWZjbGspOwogCW9rID0gbGltaXQtPmZpbmRfcGxsKGxpbWl0LCBjcnRjLCBhZGp1c3RlZF9tb2RlLT5jbG9jaywgcmVmY2xrLCAmY2xvY2spOwogCWlmICghb2spIHsKIAkJRFJNX0VSUk9SKCJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFcbiIpOwpAQCAtMzcxNCw3ICszOTU2LDcgQEAKIAkJaW50IGxhbmUgPSAwLCBsaW5rX2J3LCBicHA7CiAJCS8qIENQVSBlRFAgZG9lc24ndCByZXF1aXJlIEZESSBsaW5rLCBzbyBqdXN0IHNldCBEUCBNL04KIAkJICAgYWNjb3JkaW5nIHRvIGN1cnJlbnQgbGluayBjb25maWcgKi8KLQkJaWYgKGhhc19lZHBfZW5jb2RlciAmJiAhaW50ZWxfZW5jb2Rlcl9pc19wY2hfZWRwKCZlbmNvZGVyLT5iYXNlKSkgeworCQlpZiAoaGFzX2VkcF9lbmNvZGVyICYmICFpbnRlbF9lbmNvZGVyX2lzX3BjaF9lZHAoJmhhc19lZHBfZW5jb2Rlci0+YmFzZSkpIHsKIAkJCXRhcmdldF9jbG9jayA9IG1vZGUtPmNsb2NrOwogCQkJaW50ZWxfZWRwX2xpbmtfY29uZmlnKGhhc19lZHBfZW5jb2RlciwKIAkJCQkJICAgICAgJmxhbmUsICZsaW5rX2J3KTsKQEAgLTM4NTcsNiArNDA5OSwyMiBAQAogCQkJCXJlZHVjZWRfY2xvY2subTI7CiAJfQogCisJLyogRW5hYmxlIGF1dG90dW5pbmcgb2YgdGhlIFBMTCBjbG9jayAoaWYgcGVybWlzc2libGUpICovCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgeworCQlpbnQgZmFjdG9yID0gMjE7CisKKwkJaWYgKGlzX2x2ZHMpIHsKKwkJCWlmICgoZGV2X3ByaXYtPmx2ZHNfdXNlX3NzYyAmJgorCQkJICAgICBkZXZfcHJpdi0+bHZkc19zc2NfZnJlcSA9PSAxMDApIHx8CisJCQkgICAgKEk5MTVfUkVBRChQQ0hfTFZEUykgJiBMVkRTX0NMS0JfUE9XRVJfTUFTSykgPT0gTFZEU19DTEtCX1BPV0VSX1VQKQorCQkJCWZhY3RvciA9IDI1OworCQl9IGVsc2UgaWYgKGlzX3Nkdm8gJiYgaXNfdHYpCisJCQlmYWN0b3IgPSAyMDsKKworCQlpZiAoY2xvY2subTEgPCBmYWN0b3IgKiBjbG9jay5uKQorCQkJZnAgfD0gRlBfQ0JfVFVORTsKKwl9CisKIAlkcGxsID0gMDsKIAlpZiAoIUhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJZHBsbCA9IERQTExfVkdBX01PREVfRElTOwpAQCAtNDA3MSw3ICs0MzI5LDYgQEAKIAl9CiAKIAlpZiAoIWhhc19lZHBfZW5jb2RlciB8fCBpbnRlbF9lbmNvZGVyX2lzX3BjaF9lZHAoJmhhc19lZHBfZW5jb2Rlci0+YmFzZSkpIHsKLQkJSTkxNV9XUklURShmcF9yZWcsIGZwKTsKIAkJSTkxNV9XUklURShkcGxsX3JlZywgZHBsbCk7CiAKIAkJLyogV2FpdCBmb3IgdGhlIGNsb2NrcyB0byBzdGFiaWxpemUuICovCkBAIC00MDg5LDEzICs0MzQ2LDEzIEBACiAJCQl9CiAJCQlJOTE1X1dSSVRFKERQTExfTUQocGlwZSksIHRlbXApOwogCQl9IGVsc2UgewotCQkJLyogd3JpdGUgaXQgYWdhaW4gLS0gdGhlIEJJT1MgZG9lcywgYWZ0ZXIgYWxsICovCisJCQkvKiBUaGUgcGl4ZWwgbXVsdGlwbGllciBjYW4gb25seSBiZSB1cGRhdGVkIG9uY2UgdGhlCisJCQkgKiBEUExMIGlzIGVuYWJsZWQgYW5kIHRoZSBjbG9ja3MgYXJlIHN0YWJsZS4KKwkJCSAqCisJCQkgKiBTbyB3cml0ZSBpdCBhZ2Fpbi4KKwkJCSAqLwogCQkJSTkxNV9XUklURShkcGxsX3JlZywgZHBsbCk7CiAJCX0KLQotCQkvKiBXYWl0IGZvciB0aGUgY2xvY2tzIHRvIHN0YWJpbGl6ZS4gKi8KLQkJUE9TVElOR19SRUFEKGRwbGxfcmVnKTsKLQkJdWRlbGF5KDE1MCk7CiAJfQogCiAJaW50ZWxfY3J0Yy0+bG93ZnJlcV9hdmFpbCA9IGZhbHNlOwpAQCAtNDMzMSwxNSArNDU4OCwxNCBAQAogfQogCiBzdGF0aWMgaW50IGludGVsX2NydGNfY3Vyc29yX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCiAJCQkJIHVpbnQzMl90IGhhbmRsZSwKIAkJCQkgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYm87Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJdWludDMyX3QgYWRkcjsKIAlpbnQgcmV0OwogCkBAIC00MzQ5LDcgKzQ2MDUsNyBAQAogCWlmICghaGFuZGxlKSB7CiAJCURSTV9ERUJVR19LTVMoImN1cnNvciBvZmZcbiIpOwogCQlhZGRyID0gMDsKLQkJYm8gPSBOVUxMOworCQlvYmogPSBOVUxMOwogCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJCWdvdG8gZmluaXNoOwogCX0KQEAgLTQzNjAsMTMgKzQ2MTYsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYm8gPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7Ci0JaWYgKCFibykKKwlvYmogPSB0b19pbnRlbF9ibyhkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlLCBoYW5kbGUpKTsKKwlpZiAoIW9iaikKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKGJvKTsKLQotCWlmIChiby0+c2l6ZSA8IHdpZHRoICogaGVpZ2h0ICogNCkgeworCWlmIChvYmotPmJhc2Uuc2l6ZSA8IHdpZHRoICogaGVpZ2h0ICogNCkgewogCQlEUk1fRVJST1IoImJ1ZmZlciBpcyB0byBzbWFsbFxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKQEAgLTQzNzUsMjkgKzQ2MjksNDEgQEAKIAkvKiB3ZSBvbmx5IG5lZWQgdG8gcGluIGluc2lkZSBHVFQgaWYgY3Vyc29yIGlzIG5vbi1waHkgKi8KIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJaWYgKCFkZXZfcHJpdi0+aW5mby0+Y3Vyc29yX25lZWRzX3BoeXNpY2FsKSB7Ci0JCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4oYm8sIFBBR0VfU0laRSk7CisJCWlmIChvYmotPnRpbGluZ19tb2RlKSB7CisJCQlEUk1fRVJST1IoImN1cnNvciBjYW5ub3QgYmUgdGlsZWRcbiIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZmFpbF9sb2NrZWQ7CisJCX0KKworCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgUEFHRV9TSVpFLCB0cnVlKTsKIAkJaWYgKHJldCkgewogCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGluIGN1cnNvciBib1xuIik7CiAJCQlnb3RvIGZhaWxfbG9ja2VkOwogCQl9CiAKLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKGJvLCAwKTsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgMCk7CiAJCWlmIChyZXQpIHsKIAkJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1vdmUgY3Vyc29yIGJvIGludG8gdGhlIEdUVFxuIik7CiAJCQlnb3RvIGZhaWxfdW5waW47CiAJCX0KIAotCQlhZGRyID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2Uob2JqKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbW92ZSBjdXJzb3IgYm8gaW50byB0aGUgR1RUXG4iKTsKKwkJCWdvdG8gZmFpbF91bnBpbjsKKwkJfQorCisJCWFkZHIgPSBvYmotPmd0dF9vZmZzZXQ7CiAJfSBlbHNlIHsKIAkJaW50IGFsaWduID0gSVNfSTgzMChkZXYpID8gMTYgKiAxMDI0IDogMjU2OwotCQlyZXQgPSBpOTE1X2dlbV9hdHRhY2hfcGh5c19vYmplY3QoZGV2LCBibywKKwkJcmV0ID0gaTkxNV9nZW1fYXR0YWNoX3BoeXNfb2JqZWN0KGRldiwgb2JqLAogCQkJCQkJICAoaW50ZWxfY3J0Yy0+cGlwZSA9PSAwKSA/IEk5MTVfR0VNX1BIWVNfQ1VSU09SXzAgOiBJOTE1X0dFTV9QSFlTX0NVUlNPUl8xLAogCQkJCQkJICBhbGlnbik7CiAJCWlmIChyZXQpIHsKIAkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGF0dGFjaCBwaHlzIG9iamVjdFxuIik7CiAJCQlnb3RvIGZhaWxfbG9ja2VkOwogCQl9Ci0JCWFkZHIgPSBvYmpfcHJpdi0+cGh5c19vYmotPmhhbmRsZS0+YnVzYWRkcjsKKwkJYWRkciA9IG9iai0+cGh5c19vYmotPmhhbmRsZS0+YnVzYWRkcjsKIAl9CiAKIAlpZiAoSVNfR0VOMihkZXYpKQpAQCAtNDQwNiwxNyArNDY3MiwxNyBAQAogIGZpbmlzaDoKIAlpZiAoaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvKSB7CiAJCWlmIChkZXZfcHJpdi0+aW5mby0+Y3Vyc29yX25lZWRzX3BoeXNpY2FsKSB7Ci0JCQlpZiAoaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvICE9IGJvKQorCQkJaWYgKGludGVsX2NydGMtPmN1cnNvcl9ibyAhPSBvYmopCiAJCQkJaTkxNV9nZW1fZGV0YWNoX3BoeXNfb2JqZWN0KGRldiwgaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvKTsKIAkJfSBlbHNlCiAJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4oaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvKTsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJmludGVsX2NydGMtPmN1cnNvcl9iby0+YmFzZSk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlpbnRlbF9jcnRjLT5jdXJzb3JfYWRkciA9IGFkZHI7Ci0JaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvID0gYm87CisJaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvID0gb2JqOwogCWludGVsX2NydGMtPmN1cnNvcl93aWR0aCA9IHdpZHRoOwogCWludGVsX2NydGMtPmN1cnNvcl9oZWlnaHQgPSBoZWlnaHQ7CiAKQEAgLTQ0MjQsMTEgKzQ2OTAsMTEgQEAKIAogCXJldHVybiAwOwogZmFpbF91bnBpbjoKLQlpOTE1X2dlbV9vYmplY3RfdW5waW4oYm8pOworCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwogZmFpbF9sb2NrZWQ6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiBmYWlsOgotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGJvKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmb2JqLT5iYXNlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00NzM5LDggKzUwMDUsMTQgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopYXJnOwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JZGV2X3ByaXYtPmJ1c3kgPSBmYWxzZTsKKwlpZiAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpIHsKKwkJLyogU3RpbGwgcHJvY2Vzc2luZyByZXF1ZXN0cywgc28ganVzdCByZS1hcm0gdGhlIHRpbWVyLiAqLworCQltb2RfdGltZXIoJmRldl9wcml2LT5pZGxlX3RpbWVyLCBqaWZmaWVzICsKKwkJCSAgbXNlY3NfdG9famlmZmllcyhHUFVfSURMRV9USU1FT1VUKSk7CisJCXJldHVybjsKKwl9CiAKKwlkZXZfcHJpdi0+YnVzeSA9IGZhbHNlOwogCXF1ZXVlX3dvcmsoZGV2X3ByaXYtPndxLCAmZGV2X3ByaXYtPmlkbGVfd29yayk7CiB9CiAKQEAgLTQ3NTEsOSArNTAyMywxNyBAQAogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gKHN0cnVjdCBpbnRlbF9jcnRjICopYXJnOwogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZpbnRlbF9jcnRjLT5iYXNlOwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBjcnRjLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7CisKKwlpbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGNydGMtPmZiKTsKKwlpZiAoaW50ZWxfZmIgJiYgaW50ZWxfZmItPm9iai0+YWN0aXZlKSB7CisJCS8qIFRoZSBmcmFtZWJ1ZmZlciBpcyBzdGlsbCBiZWluZyBhY2Nlc3NlZCBieSB0aGUgR1BVLiAqLworCQltb2RfdGltZXIoJmludGVsX2NydGMtPmlkbGVfdGltZXIsIGppZmZpZXMgKworCQkJICBtc2Vjc190b19qaWZmaWVzKENSVENfSURMRV9USU1FT1VUKSk7CisJCXJldHVybjsKKwl9CiAKIAlpbnRlbF9jcnRjLT5idXN5ID0gZmFsc2U7Ci0KIAlxdWV1ZV93b3JrKGRldl9wcml2LT53cSwgJmRldl9wcml2LT5pZGxlX3dvcmspOwogfQogCkBAIC00NzYzLDggKzUwNDMsOCBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAlpbnQgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Ci0JaW50IGRwbGxfcmVnID0gKHBpcGUgPT0gMCkgPyBEUExMX0EgOiBEUExMX0I7Ci0JaW50IGRwbGwgPSBJOTE1X1JFQUQoZHBsbF9yZWcpOworCWludCBkcGxsX3JlZyA9IERQTEwocGlwZSk7CisJaW50IGRwbGw7CiAKIAlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlyZXR1cm47CkBAIC00NzcyLDE3ICs1MDUyLDE5IEBACiAJaWYgKCFkZXZfcHJpdi0+bHZkc19kb3duY2xvY2tfYXZhaWwpCiAJCXJldHVybjsKIAorCWRwbGwgPSBJOTE1X1JFQUQoZHBsbF9yZWcpOwogCWlmICghSEFTX1BJUEVfQ1hTUihkZXYpICYmIChkcGxsICYgRElTUExBWV9SQVRFX1NFTEVDVF9GUEExKSkgewogCQlEUk1fREVCVUdfRFJJVkVSKCJ1cGNsb2NraW5nIExWRFNcbiIpOwogCiAJCS8qIFVubG9jayBwYW5lbCByZWdzICovCi0JCUk5MTVfV1JJVEUoUFBfQ09OVFJPTCwgSTkxNV9SRUFEKFBQX0NPTlRST0wpIHwKLQkJCSAgIFBBTkVMX1VOTE9DS19SRUdTKTsKKwkJSTkxNV9XUklURShQUF9DT05UUk9MLAorCQkJICAgSTkxNV9SRUFEKFBQX0NPTlRST0wpIHwgUEFORUxfVU5MT0NLX1JFR1MpOwogCiAJCWRwbGwgJj0gfkRJU1BMQVlfUkFURV9TRUxFQ1RfRlBBMTsKIAkJSTkxNV9XUklURShkcGxsX3JlZywgZHBsbCk7Ci0JCWRwbGwgPSBJOTE1X1JFQUQoZHBsbF9yZWcpOworCQlQT1NUSU5HX1JFQUQoZHBsbF9yZWcpOwogCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2LCBwaXBlKTsKKwogCQlkcGxsID0gSTkxNV9SRUFEKGRwbGxfcmVnKTsKIAkJaWYgKGRwbGwgJiBESVNQTEFZX1JBVEVfU0VMRUNUX0ZQQTEpCiAJCQlEUk1fREVCVUdfRFJJVkVSKCJmYWlsZWQgdG8gdXBjbG9jayBMVkRTIVxuIik7CkBAIC00ODg4LDcgKzUxNzAsNyBAQAogICogYnVmZmVyKSwgd2UnbGwgYWxzbyBtYXJrIHRoZSBkaXNwbGF5IGFzIGJ1c3ksIHNvIHdlIGtub3cgdG8gaW5jcmVhc2UgaXRzCiAgKiBjbG9jayBmcmVxdWVuY3kuCiAgKi8KLXZvaWQgaW50ZWxfbWFya19idXN5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQordm9pZCBpbnRlbF9tYXJrX2J1c3koc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBOVUxMOwpAQCAtNDk2OSw4ICs1MjUxLDkgQEAKIAogCW11dGV4X2xvY2soJndvcmstPmRldi0+c3RydWN0X211dGV4KTsKIAlpOTE1X2dlbV9vYmplY3RfdW5waW4od29yay0+b2xkX2ZiX29iaik7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uod29yay0+cGVuZGluZ19mbGlwX29iaik7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uod29yay0+b2xkX2ZiX29iaik7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJndvcmstPnBlbmRpbmdfZmxpcF9vYmotPmJhc2UpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZ3b3JrLT5vbGRfZmJfb2JqLT5iYXNlKTsKKwogCW11dGV4X3VubG9jaygmd29yay0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWtmcmVlKHdvcmspOwogfQpAQCAtNDk4MSwxNSArNTI2NCwxNyBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgaW50ZWxfdW5waW5fd29yayAqd29yazsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplOwotCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlzdHJ1Y3QgdGltZXZhbCB0bm93LCB0dmJsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBJZ25vcmUgZWFybHkgdmJsYW5rIGlycXMgKi8KIAlpZiAoaW50ZWxfY3J0YyA9PSBOVUxMKQogCQlyZXR1cm47CiAKKwlkb19nZXR0aW1lb2ZkYXkoJnRub3cpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCXdvcmsgPSBpbnRlbF9jcnRjLT51bnBpbl93b3JrOwogCWlmICh3b3JrID09IE5VTEwgfHwgIXdvcmstPnBlbmRpbmcpIHsKQEAgLTQ5OTgsMjYgKzUyODMsNDkgQEAKIAl9CiAKIAlpbnRlbF9jcnRjLT51bnBpbl93b3JrID0gTlVMTDsKLQlkcm1fdmJsYW5rX3B1dChkZXYsIGludGVsX2NydGMtPnBpcGUpOwogCiAJaWYgKHdvcmstPmV2ZW50KSB7CiAJCWUgPSB3b3JrLT5ldmVudDsKLQkJZG9fZ2V0dGltZW9mZGF5KCZub3cpOwotCQllLT5ldmVudC5zZXF1ZW5jZSA9IGRybV92YmxhbmtfY291bnQoZGV2LCBpbnRlbF9jcnRjLT5waXBlKTsKLQkJZS0+ZXZlbnQudHZfc2VjID0gbm93LnR2X3NlYzsKLQkJZS0+ZXZlbnQudHZfdXNlYyA9IG5vdy50dl91c2VjOworCQllLT5ldmVudC5zZXF1ZW5jZSA9IGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUoZGV2LCBpbnRlbF9jcnRjLT5waXBlLCAmdHZibCk7CisKKwkJLyogQ2FsbGVkIGJlZm9yZSB2YmxhbmsgY291bnQgYW5kIHRpbWVzdGFtcHMgaGF2ZQorCQkgKiBiZWVuIHVwZGF0ZWQgZm9yIHRoZSB2YmxhbmsgaW50ZXJ2YWwgb2YgZmxpcAorCQkgKiBjb21wbGV0aW9uPyBOZWVkIHRvIGluY3JlbWVudCB2YmxhbmsgY291bnQgYW5kCisJCSAqIGFkZCBvbmUgdmlkZW9yZWZyZXNoIGR1cmF0aW9uIHRvIHJldHVybmVkIHRpbWVzdGFtcAorCQkgKiB0byBhY2NvdW50IGZvciB0aGlzLiBXZSBhc3N1bWUgdGhpcyBoYXBwZW5lZCBpZiB3ZQorCQkgKiBnZXQgY2FsbGVkIG92ZXIgMC45IGZyYW1lIGR1cmF0aW9ucyBhZnRlciB0aGUgbGFzdAorCQkgKiB0aW1lc3RhbXBlZCB2YmxhbmsuCisJCSAqCisJCSAqIFRoaXMgY2FsY3VsYXRpb24gY2FuIG5vdCBiZSB1c2VkIHdpdGggdnJlZnJlc2ggcmF0ZXMKKwkJICogYmVsb3cgNUh6ICgxMEh6IHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUpIHdpdGhvdXQKKwkJICogcHJvbW90aW5nIHRvIDY0IGludGVnZXJzLgorCQkgKi8KKwkJaWYgKDEwICogKHRpbWV2YWxfdG9fbnMoJnRub3cpIC0gdGltZXZhbF90b19ucygmdHZibCkpID4KKwkJICAgIDkgKiBjcnRjLT5mcmFtZWR1cl9ucykgeworCQkJZS0+ZXZlbnQuc2VxdWVuY2UrKzsKKwkJCXR2YmwgPSBuc190b190aW1ldmFsKHRpbWV2YWxfdG9fbnMoJnR2YmwpICsKKwkJCQkJICAgICBjcnRjLT5mcmFtZWR1cl9ucyk7CisJCX0KKworCQllLT5ldmVudC50dl9zZWMgPSB0dmJsLnR2X3NlYzsKKwkJZS0+ZXZlbnQudHZfdXNlYyA9IHR2YmwudHZfdXNlYzsKKwogCQlsaXN0X2FkZF90YWlsKCZlLT5iYXNlLmxpbmssCiAJCQkgICAgICAmZS0+YmFzZS5maWxlX3ByaXYtPmV2ZW50X2xpc3QpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmUtPmJhc2UuZmlsZV9wcml2LT5ldmVudF93YWl0KTsKIAl9CiAKKwlkcm1fdmJsYW5rX3B1dChkZXYsIGludGVsX2NydGMtPnBpcGUpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CiAKLQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKHdvcmstPm9sZF9mYl9vYmopOworCW9iaiA9IHdvcmstPm9sZF9mYl9vYmo7CisKIAlhdG9taWNfY2xlYXJfbWFzaygxIDw8IGludGVsX2NydGMtPnBsYW5lLAotCQkJICAmb2JqX3ByaXYtPnBlbmRpbmdfZmxpcC5jb3VudGVyKTsKLQlpZiAoYXRvbWljX3JlYWQoJm9ial9wcml2LT5wZW5kaW5nX2ZsaXApID09IDApCisJCQkgICZvYmotPnBlbmRpbmdfZmxpcC5jb3VudGVyKTsKKwlpZiAoYXRvbWljX3JlYWQoJm9iai0+cGVuZGluZ19mbGlwKSA9PSAwKQogCQl3YWtlX3VwKCZkZXZfcHJpdi0+cGVuZGluZ19mbGlwX3F1ZXVlKTsKKwogCXNjaGVkdWxlX3dvcmsoJndvcmstPndvcmspOwogCiAJdHJhY2VfaTkxNV9mbGlwX2NvbXBsZXRlKGludGVsX2NydGMtPnBsYW5lLCB3b3JrLT5wZW5kaW5nX2ZsaXBfb2JqKTsKQEAgLTUwNjMsOCArNTM3MSw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwogCXN0cnVjdCBpbnRlbF91bnBpbl93b3JrICp3b3JrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG9mZnNldDsKQEAgLTUwOTgsMTMgKzU0MDUsMTMgQEAKIAlvYmogPSBpbnRlbF9mYi0+b2JqOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldCA9IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKGRldiwgb2JqLCB0cnVlKTsKKwlyZXQgPSBpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihkZXYsIG9iaiwgTFBfUklORyhkZXZfcHJpdikpOwogCWlmIChyZXQpCiAJCWdvdG8gY2xlYW51cF93b3JrOwogCiAJLyogUmVmZXJlbmNlIHRoZSBvYmplY3RzIGZvciB0aGUgc2NoZWR1bGVkIHdvcmsuICovCi0JZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKHdvcmstPm9sZF9mYl9vYmopOwotCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZShvYmopOworCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZSgmd29yay0+b2xkX2ZiX29iai0+YmFzZSk7CisJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKCZvYmotPmJhc2UpOwogCiAJY3J0Yy0+ZmIgPSBmYjsKIApAQCAtNTExMiwyMiArNTQxOSwxNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gY2xlYW51cF9vYmpzOwogCi0JLyogQmxvY2sgY2xpZW50cyBmcm9tIHJlbmRlcmluZyB0byB0aGUgbmV3IGJhY2sgYnVmZmVyIHVudGlsCi0JICogdGhlIGZsaXAgb2NjdXJzIGFuZCB0aGUgb2JqZWN0IGlzIG5vIGxvbmdlciB2aXNpYmxlLgotCSAqLwotCWF0b21pY19hZGQoMSA8PCBpbnRlbF9jcnRjLT5wbGFuZSwKLQkJICAgJnRvX2ludGVsX2JvKHdvcmstPm9sZF9mYl9vYmopLT5wZW5kaW5nX2ZsaXApOwotCi0Jd29yay0+cGVuZGluZ19mbGlwX29iaiA9IG9iajsKLQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7Ci0KIAlpZiAoSVNfR0VOMyhkZXYpIHx8IElTX0dFTjIoZGV2KSkgewogCQl1MzIgZmxpcF9tYXNrOwogCiAJCS8qIENhbid0IHF1ZXVlIG11bHRpcGxlIGZsaXBzLCBzbyB3YWl0IGZvciB0aGUgcHJldmlvdXMKIAkJICogb25lIHRvIGZpbmlzaCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBuZXh0LgogCQkgKi8KLQkJQkVHSU5fTFBfUklORygyKTsKKwkJcmV0ID0gQkVHSU5fTFBfUklORygyKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gY2xlYW51cF9vYmpzOworCiAJCWlmIChpbnRlbF9jcnRjLT5wbGFuZSkKIAkJCWZsaXBfbWFzayA9IE1JX1dBSVRfRk9SX1BMQU5FX0JfRkxJUDsKIAkJZWxzZQpAQCAtNTEzNywxOCArNTQzOCwyOCBAQAogCQlBRFZBTkNFX0xQX1JJTkcoKTsKIAl9CiAKKwl3b3JrLT5wZW5kaW5nX2ZsaXBfb2JqID0gb2JqOworCiAJd29yay0+ZW5hYmxlX3N0YWxsX2NoZWNrID0gdHJ1ZTsKIAogCS8qIE9mZnNldCBpbnRvIHRoZSBuZXcgYnVmZmVyIGZvciBjYXNlcyBvZiBzaGFyZWQgZmJzIGJldHdlZW4gQ1JUQ3MgKi8KIAlvZmZzZXQgPSBjcnRjLT55ICogZmItPnBpdGNoICsgY3J0Yy0+eCAqIGZiLT5iaXRzX3Blcl9waXhlbC84OwogCi0JQkVHSU5fTFBfUklORyg0KTsKLQlzd2l0Y2goSU5URUxfSU5GTyhkZXYpLT5nZW4pIHsKKwlyZXQgPSBCRUdJTl9MUF9SSU5HKDQpOworCWlmIChyZXQpCisJCWdvdG8gY2xlYW51cF9vYmpzOworCisJLyogQmxvY2sgY2xpZW50cyBmcm9tIHJlbmRlcmluZyB0byB0aGUgbmV3IGJhY2sgYnVmZmVyIHVudGlsCisJICogdGhlIGZsaXAgb2NjdXJzIGFuZCB0aGUgb2JqZWN0IGlzIG5vIGxvbmdlciB2aXNpYmxlLgorCSAqLworCWF0b21pY19hZGQoMSA8PCBpbnRlbF9jcnRjLT5wbGFuZSwgJndvcmstPm9sZF9mYl9vYmotPnBlbmRpbmdfZmxpcCk7CisKKwlzd2l0Y2ggKElOVEVMX0lORk8oZGV2KS0+Z2VuKSB7CiAJY2FzZSAyOgogCQlPVVRfUklORyhNSV9ESVNQTEFZX0ZMSVAgfAogCQkJIE1JX0RJU1BMQVlfRkxJUF9QTEFORShpbnRlbF9jcnRjLT5wbGFuZSkpOwogCQlPVVRfUklORyhmYi0+cGl0Y2gpOwotCQlPVVRfUklORyhvYmpfcHJpdi0+Z3R0X29mZnNldCArIG9mZnNldCk7CisJCU9VVF9SSU5HKG9iai0+Z3R0X29mZnNldCArIG9mZnNldCk7CiAJCU9VVF9SSU5HKE1JX05PT1ApOwogCQlicmVhazsKIApAQCAtNTE1Niw3ICs1NDY3LDcgQEAKIAkJT1VUX1JJTkcoTUlfRElTUExBWV9GTElQX0k5MTUgfAogCQkJIE1JX0RJU1BMQVlfRkxJUF9QTEFORShpbnRlbF9jcnRjLT5wbGFuZSkpOwogCQlPVVRfUklORyhmYi0+cGl0Y2gpOwotCQlPVVRfUklORyhvYmpfcHJpdi0+Z3R0X29mZnNldCArIG9mZnNldCk7CisJCU9VVF9SSU5HKG9iai0+Z3R0X29mZnNldCArIG9mZnNldCk7CiAJCU9VVF9SSU5HKE1JX05PT1ApOwogCQlicmVhazsKIApAQCAtNTE2OSw3ICs1NDgwLDcgQEAKIAkJT1VUX1JJTkcoTUlfRElTUExBWV9GTElQIHwKIAkJCSBNSV9ESVNQTEFZX0ZMSVBfUExBTkUoaW50ZWxfY3J0Yy0+cGxhbmUpKTsKIAkJT1VUX1JJTkcoZmItPnBpdGNoKTsKLQkJT1VUX1JJTkcob2JqX3ByaXYtPmd0dF9vZmZzZXQgfCBvYmpfcHJpdi0+dGlsaW5nX21vZGUpOworCQlPVVRfUklORyhvYmotPmd0dF9vZmZzZXQgfCBvYmotPnRpbGluZ19tb2RlKTsKIAogCQkvKiBYWFggRW5hYmxpbmcgdGhlIHBhbmVsLWZpdHRlciBhY3Jvc3MgcGFnZS1mbGlwIGlzIHNvIGZhcgogCQkgKiB1bnRlc3RlZCBvbiBub24tbmF0aXZlIG1vZGVzLCBzbyBpZ25vcmUgaXQgZm9yIG5vdy4KQEAgLTUxODMsOCArNTQ5NCw4IEBACiAJY2FzZSA2OgogCQlPVVRfUklORyhNSV9ESVNQTEFZX0ZMSVAgfAogCQkJIE1JX0RJU1BMQVlfRkxJUF9QTEFORShpbnRlbF9jcnRjLT5wbGFuZSkpOwotCQlPVVRfUklORyhmYi0+cGl0Y2ggfCBvYmpfcHJpdi0+dGlsaW5nX21vZGUpOwotCQlPVVRfUklORyhvYmpfcHJpdi0+Z3R0X29mZnNldCk7CisJCU9VVF9SSU5HKGZiLT5waXRjaCB8IG9iai0+dGlsaW5nX21vZGUpOworCQlPVVRfUklORyhvYmotPmd0dF9vZmZzZXQpOwogCiAJCXBmID0gSTkxNV9SRUFEKHBpcGUgPT0gMCA/IFBGQV9DVExfMSA6IFBGQl9DVExfMSkgJiBQRl9FTkFCTEU7CiAJCXBpcGVzcmMgPSBJOTE1X1JFQUQocGlwZSA9PSAwID8gUElQRUFTUkMgOiBQSVBFQlNSQykgJiAweDBmZmYwZmZmOwpAQCAtNTIwMCw4ICs1NTExLDggQEAKIAlyZXR1cm4gMDsKIAogY2xlYW51cF9vYmpzOgotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHdvcmstPm9sZF9mYl9vYmopOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJndvcmstPm9sZF9mYl9vYmotPmJhc2UpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogY2xlYW51cF93b3JrOgogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCkBAIC01MzM4LDcgKzU2NDksNyBAQAogfQogCiBpbnQgaW50ZWxfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCisJCQkJc3RydWN0IGRybV9maWxlICpmaWxlKQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9nZXRfcGlwZV9mcm9tX2NydGNfaWQgKnBpcGVfZnJvbV9jcnRjX2lkID0gZGF0YTsKQEAgLTU0OTgsNiArNTgwOSw4IEBACiAJCWVuY29kZXItPmJhc2UucG9zc2libGVfY2xvbmVzID0KIAkJCWludGVsX2VuY29kZXJfY2xvbmVzKGRldiwgZW5jb2Rlci0+Y2xvbmVfbWFzayk7CiAJfQorCisJaW50ZWxfcGFuZWxfc2V0dXBfYmFja2xpZ2h0KGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGludGVsX3VzZXJfZnJhbWVidWZmZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKQEAgLTU1MDUsMTkgKzU4MTgsMTkgQEAKIAlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOwogCiAJZHJtX2ZyYW1lYnVmZmVyX2NsZWFudXAoZmIpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGludGVsX2ZiLT5vYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZpbnRlbF9mYi0+b2JqLT5iYXNlKTsKIAogCWtmcmVlKGludGVsX2ZiKTsKIH0KIAogc3RhdGljIGludCBpbnRlbF91c2VyX2ZyYW1lYnVmZmVyX2NyZWF0ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKIAkJCQkJCXVuc2lnbmVkIGludCAqaGFuZGxlKQogewogCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmplY3QgPSBpbnRlbF9mYi0+b2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYi0+b2JqOwogCi0JcmV0dXJuIGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsIG9iamVjdCwgaGFuZGxlKTsKKwlyZXR1cm4gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGUsICZvYmotPmJhc2UsIGhhbmRsZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIGludGVsX2ZiX2Z1bmNzID0gewpAQCAtNTUyOCwxMiArNTg0MSwxMSBAQAogaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIsCiAJCQkgICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kICptb2RlX2NtZCwKLQkJCSAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQorCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwogCWludCByZXQ7CiAKLQlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kpCisJaWYgKG9iai0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfWSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobW9kZV9jbWQtPnBpdGNoICYgNjMpCkBAIC01NTY1LDExICs1ODc3LDExIEBACiAJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCiAJCQkgICAgICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kICptb2RlX2NtZCkKIHsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7CiAJaW50IHJldDsKIAotCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbHAsIG1vZGVfY21kLT5oYW5kbGUpOworCW9iaiA9IHRvX2ludGVsX2JvKGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbHAsIG1vZGVfY21kLT5oYW5kbGUpKTsKIAlpZiAoIW9iaikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAKQEAgLTU1NzcsMTAgKzU4ODksOSBAQAogCWlmICghaW50ZWxfZmIpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JcmV0ID0gaW50ZWxfZnJhbWVidWZmZXJfaW5pdChkZXYsIGludGVsX2ZiLAotCQkJCSAgICAgbW9kZV9jbWQsIG9iaik7CisJcmV0ID0gaW50ZWxfZnJhbWVidWZmZXJfaW5pdChkZXYsIGludGVsX2ZiLCBtb2RlX2NtZCwgb2JqKTsKIAlpZiAocmV0KSB7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZvYmotPmJhc2UpOwogCQlrZnJlZShpbnRlbF9mYik7CiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJfQpAQCAtNTU5MywxMCArNTkwNCwxMCBAQAogCS5vdXRwdXRfcG9sbF9jaGFuZ2VkID0gaW50ZWxfZmJfb3V0cHV0X3BvbGxfY2hhbmdlZCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgorc3RhdGljIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICoKIGludGVsX2FsbG9jX2NvbnRleHRfcGFnZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqY3R4OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpjdHg7CiAJaW50IHJldDsKIAogCWN0eCA9IGk5MTVfZ2VtX2FsbG9jX29iamVjdChkZXYsIDQwOTYpOwpAQCAtNTYwNiw3ICs1OTE3LDcgQEAKIAl9CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihjdHgsIDQwOTYpOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4oY3R4LCA0MDk2LCB0cnVlKTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBpbiBwb3dlciBjb250ZXh0OiAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnJfdW5yZWY7CkBAIC01NjI0LDcgKzU5MzUsNyBAQAogZXJyX3VucGluOgogCWk5MTVfZ2VtX29iamVjdF91bnBpbihjdHgpOwogZXJyX3VucmVmOgotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGN0eCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJmN0eC0+YmFzZSk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC01NzM2LDYgKzYwNDcsMjUgQEAKIAogfQogCit2b2lkIGdlbjZfc2V0X3JwcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1OCB2YWwpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgc3dyZXE7CisKKwlzd3JlcSA9ICh2YWwgJiAweDNmZikgPDwgMjU7CisJSTkxNV9XUklURShHRU42X1JQTlNXUkVRLCBzd3JlcSk7Cit9CisKK3ZvaWQgZ2VuNl9kaXNhYmxlX3JwcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlJOTE1X1dSSVRFKEdFTjZfUlBOU1dSRVEsIDEgPDwgMzEpOworCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ssIDB4ZmZmZmZmZmYpOworCUk5MTVfV1JJVEUoR0VONl9QTUlFUiwgMCk7CisJSTkxNV9XUklURShHRU42X1BNSUlSLCBJOTE1X1JFQUQoR0VONl9QTUlJUikpOworfQorCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnRlbF9weGZyZXEodTMyIHZpZGZyZXEpCiB7CiAJdW5zaWduZWQgbG9uZyBmcmVxOwpAQCAtNTgyMiw3ICs2MTUyLDEyMyBAQAogCWRldl9wcml2LT5jb3JyID0gKGxjZnVzZSAmIExDRlVTRV9ISVZfTUFTSyk7CiB9CiAKLXZvaWQgaW50ZWxfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3ZvaWQgZ2VuNl9lbmFibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwl1MzIgcnBfc3RhdGVfY2FwID0gSTkxNV9SRUFEKEdFTjZfUlBfU1RBVEVfQ0FQKTsKKwl1MzIgZ3RfcGVyZl9zdGF0dXMgPSBJOTE1X1JFQUQoR0VONl9HVF9QRVJGX1NUQVRVUyk7CisJdTMyIHBjdV9tYm94OworCWludCBjdXJfZnJlcSwgbWluX2ZyZXEsIG1heF9mcmVxOworCWludCBpOworCisJLyogSGVyZSBiZWdpbnMgYSBtYWdpYyBzZXF1ZW5jZSBvZiByZWdpc3RlciB3cml0ZXMgdG8gZW5hYmxlCisJICogYXV0by1kb3duY2xvY2tpbmcuCisJICoKKwkgKiBQZXJoYXBzIHRoZXJlIG1pZ2h0IGJlIHNvbWUgdmFsdWUgaW4gZXhwb3NpbmcgdGhlc2UgdG8KKwkgKiB1c2Vyc3BhY2UuLi4KKwkgKi8KKwlJOTE1X1dSSVRFKEdFTjZfUkNfU1RBVEUsIDApOworCV9fZ2VuNl9mb3JjZV93YWtlX2dldChkZXZfcHJpdik7CisKKwkvKiBkaXNhYmxlIHRoZSBjb3VudGVycyBhbmQgc2V0IGRldGVybWluaXN0aWMgdGhyZXNob2xkcyAqLworCUk5MTVfV1JJVEUoR0VONl9SQ19DT05UUk9MLCAwKTsKKworCUk5MTVfV1JJVEUoR0VONl9SQzFfV0FLRV9SQVRFX0xJTUlULCAxMDAwIDw8IDE2KTsKKwlJOTE1X1dSSVRFKEdFTjZfUkM2X1dBS0VfUkFURV9MSU1JVCwgNDAgPDwgMTYgfCAzMCk7CisJSTkxNV9XUklURShHRU42X1JDNnBwX1dBS0VfUkFURV9MSU1JVCwgMzApOworCUk5MTVfV1JJVEUoR0VONl9SQ19FVkFMVUFUSU9OX0lOVEVSVkFMLCAxMjUwMDApOworCUk5MTVfV1JJVEUoR0VONl9SQ19JRExFX0hZU1RFUlNJUywgMjUpOworCisJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspCisJCUk5MTVfV1JJVEUoUklOR19NQVhfSURMRShkZXZfcHJpdi0+cmluZ1tpXS5tbWlvX2Jhc2UpLCAxMCk7CisKKwlJOTE1X1dSSVRFKEdFTjZfUkNfU0xFRVAsIDApOworCUk5MTVfV1JJVEUoR0VONl9SQzFlX1RIUkVTSE9MRCwgMTAwMCk7CisJSTkxNV9XUklURShHRU42X1JDNl9USFJFU0hPTEQsIDUwMDAwKTsKKwlJOTE1X1dSSVRFKEdFTjZfUkM2cF9USFJFU0hPTEQsIDEwMDAwMCk7CisJSTkxNV9XUklURShHRU42X1JDNnBwX1RIUkVTSE9MRCwgNjQwMDApOyAvKiB1bnVzZWQgKi8KKworCUk5MTVfV1JJVEUoR0VONl9SQ19DT05UUk9MLAorCQkgICBHRU42X1JDX0NUTF9SQzZwX0VOQUJMRSB8CisJCSAgIEdFTjZfUkNfQ1RMX1JDNl9FTkFCTEUgfAorCQkgICBHRU42X1JDX0NUTF9FSV9NT0RFKDEpIHwKKwkJICAgR0VONl9SQ19DVExfSFdfRU5BQkxFKTsKKworCUk5MTVfV1JJVEUoR0VONl9SUE5TV1JFUSwKKwkJICAgR0VONl9GUkVRVUVOQ1koMTApIHwKKwkJICAgR0VONl9PRkZTRVQoMCkgfAorCQkgICBHRU42X0FHR1JFU1NJVkVfVFVSQk8pOworCUk5MTVfV1JJVEUoR0VONl9SQ19WSURFT19GUkVRLAorCQkgICBHRU42X0ZSRVFVRU5DWSgxMikpOworCisJSTkxNV9XUklURShHRU42X1JQX0RPV05fVElNRU9VVCwgMTAwMDAwMCk7CisJSTkxNV9XUklURShHRU42X1JQX0lOVEVSUlVQVF9MSU1JVFMsCisJCSAgIDE4IDw8IDI0IHwKKwkJICAgNiA8PCAxNik7CisJSTkxNV9XUklURShHRU42X1JQX1VQX1RIUkVTSE9MRCwgOTAwMDApOworCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RIUkVTSE9MRCwgMTAwMDAwKTsKKwlJOTE1X1dSSVRFKEdFTjZfUlBfVVBfRUksIDEwMDAwMCk7CisJSTkxNV9XUklURShHRU42X1JQX0RPV05fRUksIDMwMDAwMCk7CisJSTkxNV9XUklURShHRU42X1JQX0lETEVfSFlTVEVSU0lTLCAxMCk7CisJSTkxNV9XUklURShHRU42X1JQX0NPTlRST0wsCisJCSAgIEdFTjZfUlBfTUVESUFfVFVSQk8gfAorCQkgICBHRU42X1JQX1VTRV9OT1JNQUxfRlJFUSB8CisJCSAgIEdFTjZfUlBfTUVESUFfSVNfR0ZYIHwKKwkJICAgR0VONl9SUF9FTkFCTEUgfAorCQkgICBHRU42X1JQX1VQX0JVU1lfTUFYIHwKKwkJICAgR0VONl9SUF9ET1dOX0JVU1lfTUlOKTsKKworCWlmICh3YWl0X2ZvcigoSTkxNV9SRUFEKEdFTjZfUENPREVfTUFJTEJPWCkgJiBHRU42X1BDT0RFX1JFQURZKSA9PSAwLAorCQkgICAgIDUwMCkpCisJCURSTV9FUlJPUigidGltZW91dCB3YWl0aW5nIGZvciBwY29kZSBtYWlsYm94IHRvIGJlY29tZSBpZGxlXG4iKTsKKworCUk5MTVfV1JJVEUoR0VONl9QQ09ERV9EQVRBLCAwKTsKKwlJOTE1X1dSSVRFKEdFTjZfUENPREVfTUFJTEJPWCwKKwkJICAgR0VONl9QQ09ERV9SRUFEWSB8CisJCSAgIEdFTjZfUENPREVfV1JJVEVfTUlOX0ZSRVFfVEFCTEUpOworCWlmICh3YWl0X2ZvcigoSTkxNV9SRUFEKEdFTjZfUENPREVfTUFJTEJPWCkgJiBHRU42X1BDT0RFX1JFQURZKSA9PSAwLAorCQkgICAgIDUwMCkpCisJCURSTV9FUlJPUigidGltZW91dCB3YWl0aW5nIGZvciBwY29kZSBtYWlsYm94IHRvIGZpbmlzaFxuIik7CisKKwltaW5fZnJlcSA9IChycF9zdGF0ZV9jYXAgJiAweGZmMDAwMCkgPj4gMTY7CisJbWF4X2ZyZXEgPSBycF9zdGF0ZV9jYXAgJiAweGZmOworCWN1cl9mcmVxID0gKGd0X3BlcmZfc3RhdHVzICYgMHhmZjAwKSA+PiA4OworCisJLyogQ2hlY2sgZm9yIG92ZXJjbG9jayBzdXBwb3J0ICovCisJaWYgKHdhaXRfZm9yKChJOTE1X1JFQUQoR0VONl9QQ09ERV9NQUlMQk9YKSAmIEdFTjZfUENPREVfUkVBRFkpID09IDAsCisJCSAgICAgNTAwKSkKKwkJRFJNX0VSUk9SKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHBjb2RlIG1haWxib3ggdG8gYmVjb21lIGlkbGVcbiIpOworCUk5MTVfV1JJVEUoR0VONl9QQ09ERV9NQUlMQk9YLCBHRU42X1JFQURfT0NfUEFSQU1TKTsKKwlwY3VfbWJveCA9IEk5MTVfUkVBRChHRU42X1BDT0RFX0RBVEEpOworCWlmICh3YWl0X2ZvcigoSTkxNV9SRUFEKEdFTjZfUENPREVfTUFJTEJPWCkgJiBHRU42X1BDT0RFX1JFQURZKSA9PSAwLAorCQkgICAgIDUwMCkpCisJCURSTV9FUlJPUigidGltZW91dCB3YWl0aW5nIGZvciBwY29kZSBtYWlsYm94IHRvIGZpbmlzaFxuIik7CisJaWYgKHBjdV9tYm94ICYgKDE8PDMxKSkgeyAvKiBPQyBzdXBwb3J0ZWQgKi8KKwkJbWF4X2ZyZXEgPSBwY3VfbWJveCAmIDB4ZmY7CisJCURSTV9ERUJVR19EUklWRVIoIm92ZXJjbG9ja2luZyBzdXBwb3J0ZWQsIGFkanVzdGluZyBmcmVxdWVuY3kgbWF4IHRvICVkTUh6XG4iLCBwY3VfbWJveCAqIDEwMCk7CisJfQorCisJLyogSW4gdW5pdHMgb2YgMTAwTUh6ICovCisJZGV2X3ByaXYtPm1heF9kZWxheSA9IG1heF9mcmVxOworCWRldl9wcml2LT5taW5fZGVsYXkgPSBtaW5fZnJlcTsKKwlkZXZfcHJpdi0+Y3VyX2RlbGF5ID0gY3VyX2ZyZXE7CisKKwkvKiByZXF1aXJlcyBNU0kgZW5hYmxlZCAqLworCUk5MTVfV1JJVEUoR0VONl9QTUlFUiwKKwkJICAgR0VONl9QTV9NQk9YX0VWRU5UIHwKKwkJICAgR0VONl9QTV9USEVSTUFMX0VWRU5UIHwKKwkJICAgR0VONl9QTV9SUF9ET1dOX1RJTUVPVVQgfAorCQkgICBHRU42X1BNX1JQX1VQX1RIUkVTSE9MRCB8CisJCSAgIEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQgfAorCQkgICBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQgfAorCQkgICBHRU42X1BNX1JQX0RPV05fRUlfRVhQSVJFRCk7CisJSTkxNV9XUklURShHRU42X1BNSU1SLCAwKTsKKwkvKiBlbmFibGUgYWxsIFBNIGludGVycnVwdHMgKi8KKwlJOTE1X1dSSVRFKEdFTjZfUE1JTlRSTVNLLCAwKTsKKworCV9fZ2VuNl9mb3JjZV93YWtlX3B1dChkZXZfcHJpdik7Cit9CisKK3ZvaWQgaW50ZWxfZW5hYmxlX2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKQEAgLTU4NzIsOSArNjMxOCw5IEBACiAJCQlJOTE1X1dSSVRFKERJU1BfQVJCX0NUTCwKIAkJCQkJKEk5MTVfUkVBRChESVNQX0FSQl9DVEwpIHwKIAkJCQkJCURJU1BfRkJDX1dNX0RJUykpOwotCQlJOTE1X1dSSVRFKFdNM19MUF9JTEssIDApOwotCQlJOTE1X1dSSVRFKFdNMl9MUF9JTEssIDApOwotCQlJOTE1X1dSSVRFKFdNMV9MUF9JTEssIDApOworCQkJSTkxNV9XUklURShXTTNfTFBfSUxLLCAwKTsKKwkJCUk5MTVfV1JJVEUoV00yX0xQX0lMSywgMCk7CisJCQlJOTE1X1dSSVRFKFdNMV9MUF9JTEssIDApOwogCQl9CiAJCS8qCiAJCSAqIEJhc2VkIG9uIHRoZSBkb2N1bWVudCBmcm9tIGhhcmR3YXJlIGd1eXMgdGhlIGZvbGxvd2luZyBiaXRzCkBAIC01ODk2LDcgKzYzNDIsNDkgQEAKIAkJCQkgICBJTEtfRFBGQ19ESVMyIHwKIAkJCQkgICBJTEtfQ0xLX0ZCQyk7CiAJCX0KLQkJcmV0dXJuOworCisJCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCisJCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIpIHwKKwkJCSAgIElMS19FTFBJTl80MDlfU0VMRUNUKTsKKworCQlpZiAoSVNfR0VONShkZXYpKSB7CisJCQlJOTE1X1dSSVRFKF8zRF9DSElDS0VOMiwKKwkJCQkgICBfM0RfQ0hJQ0tFTjJfV01fUkVBRF9QSVBFTElORUQgPDwgMTYgfAorCQkJCSAgIF8zRF9DSElDS0VOMl9XTV9SRUFEX1BJUEVMSU5FRCk7CisJCX0KKworCQlpZiAoSVNfR0VONihkZXYpKSB7CisJCQlJOTE1X1dSSVRFKFdNM19MUF9JTEssIDApOworCQkJSTkxNV9XUklURShXTTJfTFBfSUxLLCAwKTsKKwkJCUk5MTVfV1JJVEUoV00xX0xQX0lMSywgMCk7CisKKwkJCS8qCisJCQkgKiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgdGhlIGZvbGxvd2luZyBiaXRzIHNob3VsZCBiZQorCQkJICogc2V0IGluIG9yZGVyIHRvIGVuYWJsZSBtZW1vcnkgc2VsZi1yZWZyZXNoIGFuZCBmYmM6CisJCQkgKiBUaGUgYml0MjEgYW5kIGJpdDIyIG9mIDB4NDIwMDAKKwkJCSAqIFRoZSBiaXQyMSBhbmQgYml0MjIgb2YgMHg0MjAwNAorCQkJICogVGhlIGJpdDUgYW5kIGJpdDcgb2YgMHg0MjAyMAorCQkJICogVGhlIGJpdDE0IG9mIDB4NzAxODAKKwkJCSAqIFRoZSBiaXQxNCBvZiAweDcxMTgwCisJCQkgKi8KKwkJCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjEsCisJCQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4xKSB8CisJCQkJICAgSUxLX0ZCQ1FfRElTIHwgSUxLX1BBQlNUUkVUQ0hfRElTKTsKKwkJCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCisJCQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8CisJCQkJICAgSUxLX0RQQVJCX0dBVEUgfCBJTEtfVlNEUEZEX0ZVTEwpOworCQkJSTkxNV9XUklURShJTEtfRFNQQ0xLX0dBVEUsCisJCQkJICAgSTkxNV9SRUFEKElMS19EU1BDTEtfR0FURSkgfAorCQkJCSAgIElMS19EUEFSQl9DTEtfR0FURSAgfAorCQkJCSAgIElMS19EUEZEX0NMS19HQVRFKTsKKworCQkJSTkxNV9XUklURShEU1BBQ05UUiwKKwkJCQkgICBJOTE1X1JFQUQoRFNQQUNOVFIpIHwKKwkJCQkgICBESVNQUExBTkVfVFJJQ0tMRV9GRUVEX0RJU0FCTEUpOworCQkJSTkxNV9XUklURShEU1BCQ05UUiwKKwkJCQkgICBJOTE1X1JFQUQoRFNQQkNOVFIpIHwKKwkJCQkgICBESVNQUExBTkVfVFJJQ0tMRV9GRUVEX0RJU0FCTEUpOworCQl9CiAJfSBlbHNlIGlmIChJU19HNFgoZGV2KSkgewogCQl1aW50MzJfdCBkc3BjbGtfZ2F0ZTsKIAkJSTkxNV9XUklURShSRU5DTEtfR0FURV9EMSwgMCk7CkBAIC01OTM0LDU1ICs2NDIyLDg0IEBACiAJfSBlbHNlIGlmIChJU19JODMwKGRldikpIHsKIAkJSTkxNV9XUklURShEU1BDTEtfR0FURV9ELCBPVlJVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7CiAJfQorfQorCit2b2lkIGludGVsX2Rpc2FibGVfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+cmVuZGVyY3R4KSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBkZXZfcHJpdi0+cmVuZGVyY3R4OworCisJCUk5MTVfV1JJVEUoQ0NJRCwgMCk7CisJCVBPU1RJTkdfUkVBRChDQ0lEKTsKKworCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CisJCWRldl9wcml2LT5yZW5kZXJjdHggPSBOVUxMOworCX0KKworCWlmIChkZXZfcHJpdi0+cHdyY3R4KSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBkZXZfcHJpdi0+cHdyY3R4OworCisJCUk5MTVfV1JJVEUoUFdSQ1RYQSwgMCk7CisJCVBPU1RJTkdfUkVBRChQV1JDVFhBKTsKKworCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CisJCWRldl9wcml2LT5wd3JjdHggPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgaXJvbmxha2VfZGlzYWJsZV9yYzYoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJLyogV2FrZSB0aGUgR1BVLCBwcmV2ZW50IFJDNiwgdGhlbiByZXN0b3JlIFJTVERCWUNUTCAqLworCUk5MTVfV1JJVEUoUlNUREJZQ1RMLCBJOTE1X1JFQUQoUlNUREJZQ1RMKSB8IFJDWF9TV19FWElUKTsKKwl3YWl0X2ZvcigoKEk5MTVfUkVBRChSU1REQllDVEwpICYgUlNYX1NUQVRVU19NQVNLKSA9PSBSU1hfU1RBVFVTX09OKSwKKwkJIDEwKTsKKwlQT1NUSU5HX1JFQUQoQ0NJRCk7CisJSTkxNV9XUklURShQV1JDVFhBLCAwKTsKKwlQT1NUSU5HX1JFQUQoUFdSQ1RYQSk7CisJSTkxNV9XUklURShSU1REQllDVEwsIEk5MTVfUkVBRChSU1REQllDVEwpICYgflJDWF9TV19FWElUKTsKKwlQT1NUSU5HX1JFQUQoUlNUREJZQ1RMKTsKKwlpOTE1X2dlbV9vYmplY3RfdW5waW4oZGV2X3ByaXYtPnJlbmRlcmN0eCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJmRldl9wcml2LT5yZW5kZXJjdHgtPmJhc2UpOworCWRldl9wcml2LT5yZW5kZXJjdHggPSBOVUxMOworCWk5MTVfZ2VtX29iamVjdF91bnBpbihkZXZfcHJpdi0+cHdyY3R4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmZGV2X3ByaXYtPnB3cmN0eC0+YmFzZSk7CisJZGV2X3ByaXYtPnB3cmN0eCA9IE5VTEw7Cit9CisKK3ZvaWQgaXJvbmxha2VfZW5hYmxlX3JjNihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldDsKIAogCS8qCiAJICogR1BVIGNhbiBhdXRvbWF0aWNhbGx5IHBvd2VyIGRvd24gdGhlIHJlbmRlciB1bml0IGlmIGdpdmVuIGEgcGFnZQogCSAqIHRvIHNhdmUgc3RhdGUuCiAJICovCi0JaWYgKElTX0lST05MQUtFX00oZGV2KSkgewotCQlpZiAoZGV2X3ByaXYtPnJlbmRlcmN0eCA9PSBOVUxMKQotCQkJZGV2X3ByaXYtPnJlbmRlcmN0eCA9IGludGVsX2FsbG9jX2NvbnRleHRfcGFnZShkZXYpOwotCQlpZiAoZGV2X3ByaXYtPnJlbmRlcmN0eCkgewotCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwotCQkJb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhkZXZfcHJpdi0+cmVuZGVyY3R4KTsKLQkJCWlmIChvYmpfcHJpdikgewotCQkJCUJFR0lOX0xQX1JJTkcoNCk7Ci0JCQkJT1VUX1JJTkcoTUlfU0VUX0NPTlRFWFQpOwotCQkJCU9VVF9SSU5HKG9ial9wcml2LT5ndHRfb2Zmc2V0IHwKLQkJCQkJCU1JX01NX1NQQUNFX0dUVCB8Ci0JCQkJCQlNSV9TQVZFX0VYVF9TVEFURV9FTiB8Ci0JCQkJCQlNSV9SRVNUT1JFX0VYVF9TVEFURV9FTiB8Ci0JCQkJCQlNSV9SRVNUT1JFX0lOSElCSVQpOwotCQkJCU9VVF9SSU5HKE1JX05PT1ApOwotCQkJCU9VVF9SSU5HKE1JX0ZMVVNIKTsKLQkJCQlBRFZBTkNFX0xQX1JJTkcoKTsKLQkJCX0KLQkJfSBlbHNlCi0JCQlEUk1fREVCVUdfS01TKCJGYWlsZWQgdG8gYWxsb2NhdGUgcmVuZGVyIGNvbnRleHQuIgotCQkJCSAgICAgICAiRGlzYWJsZSBSQzZcbiIpOworCXJldCA9IEJFR0lOX0xQX1JJTkcoNik7CisJaWYgKHJldCkgeworCQlpcm9ubGFrZV9kaXNhYmxlX3JjNihkZXYpOworCQlyZXR1cm47CiAJfQorCU9VVF9SSU5HKE1JX1NVU1BFTkRfRkxVU0ggfCBNSV9TVVNQRU5EX0ZMVVNIX0VOKTsKKwlPVVRfUklORyhNSV9TRVRfQ09OVEVYVCk7CisJT1VUX1JJTkcoZGV2X3ByaXYtPnJlbmRlcmN0eC0+Z3R0X29mZnNldCB8CisJCSBNSV9NTV9TUEFDRV9HVFQgfAorCQkgTUlfU0FWRV9FWFRfU1RBVEVfRU4gfAorCQkgTUlfUkVTVE9SRV9FWFRfU1RBVEVfRU4gfAorCQkgTUlfUkVTVE9SRV9JTkhJQklUKTsKKwlPVVRfUklORyhNSV9TVVNQRU5EX0ZMVVNIKTsKKwlPVVRfUklORyhNSV9OT09QKTsKKwlPVVRfUklORyhNSV9GTFVTSCk7CisJQURWQU5DRV9MUF9SSU5HKCk7CiAKLQlpZiAoSTkxNV9IQVNfUkM2KGRldikgJiYgZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBOVUxMOwotCi0JCWlmIChkZXZfcHJpdi0+cHdyY3R4KSB7Ci0JCQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKGRldl9wcml2LT5wd3JjdHgpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpwd3JjdHg7Ci0KLQkJCXB3cmN0eCA9IGludGVsX2FsbG9jX2NvbnRleHRfcGFnZShkZXYpOwotCQkJaWYgKHB3cmN0eCkgewotCQkJCWRldl9wcml2LT5wd3JjdHggPSBwd3JjdHg7Ci0JCQkJb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhwd3JjdHgpOwotCQkJfQotCQl9Ci0KLQkJaWYgKG9ial9wcml2KSB7Ci0JCQlJOTE1X1dSSVRFKFBXUkNUWEEsIG9ial9wcml2LT5ndHRfb2Zmc2V0IHwgUFdSQ1RYX0VOKTsKLQkJCUk5MTVfV1JJVEUoTUNIQkFSX1JFTkRFUl9TVEFOREJZLAotCQkJCSAgIEk5MTVfUkVBRChNQ0hCQVJfUkVOREVSX1NUQU5EQlkpICYgflJDWF9TV19FWElUKTsKLQkJfQotCX0KKwlJOTE1X1dSSVRFKFBXUkNUWEEsIGRldl9wcml2LT5wd3JjdHgtPmd0dF9vZmZzZXQgfCBQV1JDVFhfRU4pOworCUk5MTVfV1JJVEUoUlNUREJZQ1RMLCBJOTE1X1JFQUQoUlNUREJZQ1RMKSAmIH5SQ1hfU1dfRVhJVCk7CiB9CiAKIC8qIFNldCB1cCBjaGlwIHNwZWNpZmljIGRpc3BsYXkgZnVuY3Rpb25zICovCkBAIC01OTk3LDcgKzY1MTQsNyBAQAogCQlkZXZfcHJpdi0+ZGlzcGxheS5kcG1zID0gaTl4eF9jcnRjX2RwbXM7CiAKIAlpZiAoSTkxNV9IQVNfRkJDKGRldikpIHsKLQkJaWYgKElTX0lST05MQUtFX00oZGV2KSkgeworCQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCQlkZXZfcHJpdi0+ZGlzcGxheS5mYmNfZW5hYmxlZCA9IGlyb25sYWtlX2ZiY19lbmFibGVkOwogCQkJZGV2X3ByaXYtPmRpc3BsYXkuZW5hYmxlX2ZiYyA9IGlyb25sYWtlX2VuYWJsZV9mYmM7CiAJCQlkZXZfcHJpdi0+ZGlzcGxheS5kaXNhYmxlX2ZiYyA9IGlyb25sYWtlX2Rpc2FibGVfZmJjOwpAQCAtNjA0Niw2ICs2NTYzLDE0IEBACiAJCQkJCSAgICAgICJEaXNhYmxlIEN4U1JcbiIpOwogCQkJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IE5VTEw7CiAJCQl9CisJCX0gZWxzZSBpZiAoSVNfR0VONihkZXYpKSB7CisJCQlpZiAoU05CX1JFQURfV00wX0xBVEVOQ1koKSkgeworCQkJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IHNhbmR5YnJpZGdlX3VwZGF0ZV93bTsKKwkJCX0gZWxzZSB7CisJCQkJRFJNX0RFQlVHX0tNUygiRmFpbGVkIHRvIHJlYWQgZGlzcGxheSBwbGFuZSBsYXRlbmN5LiAiCisJCQkJCSAgICAgICJEaXNhYmxlIEN4U1JcbiIpOworCQkJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IE5VTEw7CisJCQl9CiAJCX0gZWxzZQogCQkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gTlVMTDsKIAl9IGVsc2UgaWYgKElTX1BJTkVWSUVXKGRldikpIHsKQEAgLTYxOTEsMTIgKzY3MTYsNyBAQAogCQlkZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IDgxOTI7CiAJCWRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDgxOTI7CiAJfQotCi0JLyogc2V0IG1lbW9yeSBiYXNlICovCi0JaWYgKElTX0dFTjIoZGV2KSkKLQkJZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMCk7Ci0JZWxzZQotCQlkZXYtPm1vZGVfY29uZmlnLmZiX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAyKTsKKwlkZXYtPm1vZGVfY29uZmlnLmZiX2Jhc2UgPSBkZXYtPmFncC0+YmFzZTsKIAogCWlmIChJU19NT0JJTEUoZGV2KSB8fCAhSVNfR0VOMihkZXYpKQogCQlkZXZfcHJpdi0+bnVtX3BpcGUgPSAyOwpAQCAtNjIxMSw3ICs2NzMxLDcgQEAKIAogCWludGVsX3NldHVwX291dHB1dHMoZGV2KTsKIAotCWludGVsX2luaXRfY2xvY2tfZ2F0aW5nKGRldik7CisJaW50ZWxfZW5hYmxlX2Nsb2NrX2dhdGluZyhkZXYpOwogCiAJLyogSnVzdCBkaXNhYmxlIGl0IG9uY2UgYXQgc3RhcnR1cCAqLwogCWk5MTVfZGlzYWJsZV92Z2EoZGV2KTsKQEAgLTYyMjEsNiArNjc0MSwyNCBAQAogCQlpbnRlbF9pbml0X2Vtb24oZGV2KTsKIAl9CiAKKwlpZiAoSVNfR0VONihkZXYpKQorCQlnZW42X2VuYWJsZV9ycHMoZGV2X3ByaXYpOworCisJaWYgKElTX0lST05MQUtFX00oZGV2KSkgeworCQlkZXZfcHJpdi0+cmVuZGVyY3R4ID0gaW50ZWxfYWxsb2NfY29udGV4dF9wYWdlKGRldik7CisJCWlmICghZGV2X3ByaXYtPnJlbmRlcmN0eCkKKwkJCWdvdG8gc2tpcF9yYzY7CisJCWRldl9wcml2LT5wd3JjdHggPSBpbnRlbF9hbGxvY19jb250ZXh0X3BhZ2UoZGV2KTsKKwkJaWYgKCFkZXZfcHJpdi0+cHdyY3R4KSB7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4oZGV2X3ByaXYtPnJlbmRlcmN0eCk7CisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmZGV2X3ByaXYtPnJlbmRlcmN0eC0+YmFzZSk7CisJCQlkZXZfcHJpdi0+cmVuZGVyY3R4ID0gTlVMTDsKKwkJCWdvdG8gc2tpcF9yYzY7CisJCX0KKwkJaXJvbmxha2VfZW5hYmxlX3JjNihkZXYpOworCX0KKworc2tpcF9yYzY6CiAJSU5JVF9XT1JLKCZkZXZfcHJpdi0+aWRsZV93b3JrLCBpbnRlbF9pZGxlX3VwZGF0ZSk7CiAJc2V0dXBfdGltZXIoJmRldl9wcml2LT5pZGxlX3RpbWVyLCBpbnRlbF9ncHVfaWRsZV90aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKWRldik7CkBAIC02MjUyLDI4ICs2NzkwLDEzIEBACiAJaWYgKGRldl9wcml2LT5kaXNwbGF5LmRpc2FibGVfZmJjKQogCQlkZXZfcHJpdi0+ZGlzcGxheS5kaXNhYmxlX2ZiYyhkZXYpOwogCi0JaWYgKGRldl9wcml2LT5yZW5kZXJjdHgpIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwotCi0JCW9ial9wcml2ID0gdG9faW50ZWxfYm8oZGV2X3ByaXYtPnJlbmRlcmN0eCk7Ci0JCUk5MTVfV1JJVEUoQ0NJRCwgb2JqX3ByaXYtPmd0dF9vZmZzZXQgJn4gQ0NJRF9FTik7Ci0JCUk5MTVfUkVBRChDQ0lEKTsKLQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKGRldl9wcml2LT5yZW5kZXJjdHgpOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShkZXZfcHJpdi0+cmVuZGVyY3R4KTsKLQl9Ci0KLQlpZiAoZGV2X3ByaXYtPnB3cmN0eCkgewotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7Ci0KLQkJb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhkZXZfcHJpdi0+cHdyY3R4KTsKLQkJSTkxNV9XUklURShQV1JDVFhBLCBvYmpfcHJpdi0+Z3R0X29mZnNldCAmfiBQV1JDVFhfRU4pOwotCQlJOTE1X1JFQUQoUFdSQ1RYQSk7Ci0JCWk5MTVfZ2VtX29iamVjdF91bnBpbihkZXZfcHJpdi0+cHdyY3R4KTsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZGV2X3ByaXYtPnB3cmN0eCk7Ci0JfQotCiAJaWYgKElTX0lST05MQUtFX00oZGV2KSkKIAkJaXJvbmxha2VfZGlzYWJsZV9kcnBzKGRldik7CisJaWYgKElTX0dFTjYoZGV2KSkKKwkJZ2VuNl9kaXNhYmxlX3JwcyhkZXYpOworCisJaWYgKElTX0lST05MQUtFX00oZGV2KSkKKwkJaXJvbmxha2VfZGlzYWJsZV9yYzYoZGV2KTsKIAogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCkBAIC02MzI1LDMgKzY4NDgsMTEzIEBACiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBJTlRFTF9HTUNIX0NUUkwsIGdtY2hfY3RybCk7CiAJcmV0dXJuIDA7CiB9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCitzdHJ1Y3QgaW50ZWxfZGlzcGxheV9lcnJvcl9zdGF0ZSB7CisJc3RydWN0IGludGVsX2N1cnNvcl9lcnJvcl9zdGF0ZSB7CisJCXUzMiBjb250cm9sOworCQl1MzIgcG9zaXRpb247CisJCXUzMiBiYXNlOworCQl1MzIgc2l6ZTsKKwl9IGN1cnNvclsyXTsKKworCXN0cnVjdCBpbnRlbF9waXBlX2Vycm9yX3N0YXRlIHsKKwkJdTMyIGNvbmY7CisJCXUzMiBzb3VyY2U7CisKKwkJdTMyIGh0b3RhbDsKKwkJdTMyIGhibGFuazsKKwkJdTMyIGhzeW5jOworCQl1MzIgdnRvdGFsOworCQl1MzIgdmJsYW5rOworCQl1MzIgdnN5bmM7CisJfSBwaXBlWzJdOworCisJc3RydWN0IGludGVsX3BsYW5lX2Vycm9yX3N0YXRlIHsKKwkJdTMyIGNvbnRyb2w7CisJCXUzMiBzdHJpZGU7CisJCXUzMiBzaXplOworCQl1MzIgcG9zOworCQl1MzIgYWRkcjsKKwkJdTMyIHN1cmZhY2U7CisJCXUzMiB0aWxlX29mZnNldDsKKwl9IHBsYW5lWzJdOworfTsKKworc3RydWN0IGludGVsX2Rpc3BsYXlfZXJyb3Jfc3RhdGUgKgoraW50ZWxfZGlzcGxheV9jYXB0dXJlX2Vycm9yX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisgICAgICAgIGRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9kaXNwbGF5X2Vycm9yX3N0YXRlICplcnJvcjsKKwlpbnQgaTsKKworCWVycm9yID0ga21hbGxvYyhzaXplb2YoKmVycm9yKSwgR0ZQX0FUT01JQyk7CisJaWYgKGVycm9yID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQllcnJvci0+Y3Vyc29yW2ldLmNvbnRyb2wgPSBJOTE1X1JFQUQoQ1VSQ05UUihpKSk7CisJCWVycm9yLT5jdXJzb3JbaV0ucG9zaXRpb24gPSBJOTE1X1JFQUQoQ1VSUE9TKGkpKTsKKwkJZXJyb3ItPmN1cnNvcltpXS5iYXNlID0gSTkxNV9SRUFEKENVUkJBU0UoaSkpOworCisJCWVycm9yLT5wbGFuZVtpXS5jb250cm9sID0gSTkxNV9SRUFEKERTUENOVFIoaSkpOworCQllcnJvci0+cGxhbmVbaV0uc3RyaWRlID0gSTkxNV9SRUFEKERTUFNUUklERShpKSk7CisJCWVycm9yLT5wbGFuZVtpXS5zaXplID0gSTkxNV9SRUFEKERTUFNJWkUoaSkpOworCQllcnJvci0+cGxhbmVbaV0ucG9zPSBJOTE1X1JFQUQoRFNQUE9TKGkpKTsKKwkJZXJyb3ItPnBsYW5lW2ldLmFkZHIgPSBJOTE1X1JFQUQoRFNQQUREUihpKSk7CisJCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KSB7CisJCQllcnJvci0+cGxhbmVbaV0uc3VyZmFjZSA9IEk5MTVfUkVBRChEU1BTVVJGKGkpKTsKKwkJCWVycm9yLT5wbGFuZVtpXS50aWxlX29mZnNldCA9IEk5MTVfUkVBRChEU1BUSUxFT0ZGKGkpKTsKKwkJfQorCisJCWVycm9yLT5waXBlW2ldLmNvbmYgPSBJOTE1X1JFQUQoUElQRUNPTkYoaSkpOworCQllcnJvci0+cGlwZVtpXS5zb3VyY2UgPSBJOTE1X1JFQUQoUElQRVNSQyhpKSk7CisJCWVycm9yLT5waXBlW2ldLmh0b3RhbCA9IEk5MTVfUkVBRChIVE9UQUwoaSkpOworCQllcnJvci0+cGlwZVtpXS5oYmxhbmsgPSBJOTE1X1JFQUQoSEJMQU5LKGkpKTsKKwkJZXJyb3ItPnBpcGVbaV0uaHN5bmMgPSBJOTE1X1JFQUQoSFNZTkMoaSkpOworCQllcnJvci0+cGlwZVtpXS52dG90YWwgPSBJOTE1X1JFQUQoVlRPVEFMKGkpKTsKKwkJZXJyb3ItPnBpcGVbaV0udmJsYW5rID0gSTkxNV9SRUFEKFZCTEFOSyhpKSk7CisJCWVycm9yLT5waXBlW2ldLnZzeW5jID0gSTkxNV9SRUFEKFZTWU5DKGkpKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQKK2ludGVsX2Rpc3BsYXlfcHJpbnRfZXJyb3Jfc3RhdGUoc3RydWN0IHNlcV9maWxlICptLAorCQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGludGVsX2Rpc3BsYXlfZXJyb3Jfc3RhdGUgKmVycm9yKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlzZXFfcHJpbnRmKG0sICJQaXBlIFslZF06XG4iLCBpKTsKKwkJc2VxX3ByaW50ZihtLCAiICBDT05GOiAlMDh4XG4iLCBlcnJvci0+cGlwZVtpXS5jb25mKTsKKwkJc2VxX3ByaW50ZihtLCAiICBTUkM6ICUwOHhcbiIsIGVycm9yLT5waXBlW2ldLnNvdXJjZSk7CisJCXNlcV9wcmludGYobSwgIiAgSFRPVEFMOiAlMDh4XG4iLCBlcnJvci0+cGlwZVtpXS5odG90YWwpOworCQlzZXFfcHJpbnRmKG0sICIgIEhCTEFOSzogJTA4eFxuIiwgZXJyb3ItPnBpcGVbaV0uaGJsYW5rKTsKKwkJc2VxX3ByaW50ZihtLCAiICBIU1lOQzogJTA4eFxuIiwgZXJyb3ItPnBpcGVbaV0uaHN5bmMpOworCQlzZXFfcHJpbnRmKG0sICIgIFZUT1RBTDogJTA4eFxuIiwgZXJyb3ItPnBpcGVbaV0udnRvdGFsKTsKKwkJc2VxX3ByaW50ZihtLCAiICBWQkxBTks6ICUwOHhcbiIsIGVycm9yLT5waXBlW2ldLnZibGFuayk7CisJCXNlcV9wcmludGYobSwgIiAgVlNZTkM6ICUwOHhcbiIsIGVycm9yLT5waXBlW2ldLnZzeW5jKTsKKworCQlzZXFfcHJpbnRmKG0sICJQbGFuZSBbJWRdOlxuIiwgaSk7CisJCXNlcV9wcmludGYobSwgIiAgQ05UUjogJTA4eFxuIiwgZXJyb3ItPnBsYW5lW2ldLmNvbnRyb2wpOworCQlzZXFfcHJpbnRmKG0sICIgIFNUUklERTogJTA4eFxuIiwgZXJyb3ItPnBsYW5lW2ldLnN0cmlkZSk7CisJCXNlcV9wcmludGYobSwgIiAgU0laRTogJTA4eFxuIiwgZXJyb3ItPnBsYW5lW2ldLnNpemUpOworCQlzZXFfcHJpbnRmKG0sICIgIFBPUzogJTA4eFxuIiwgZXJyb3ItPnBsYW5lW2ldLnBvcyk7CisJCXNlcV9wcmludGYobSwgIiAgQUREUjogJTA4eFxuIiwgZXJyb3ItPnBsYW5lW2ldLmFkZHIpOworCQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkgeworCQkJc2VxX3ByaW50ZihtLCAiICBTVVJGOiAlMDh4XG4iLCBlcnJvci0+cGxhbmVbaV0uc3VyZmFjZSk7CisJCQlzZXFfcHJpbnRmKG0sICIgIFRJTEVPRkY6ICUwOHhcbiIsIGVycm9yLT5wbGFuZVtpXS50aWxlX29mZnNldCk7CisJCX0KKworCQlzZXFfcHJpbnRmKG0sICJDdXJzb3IgWyVkXTpcbiIsIGkpOworCQlzZXFfcHJpbnRmKG0sICIgIENOVFI6ICUwOHhcbiIsIGVycm9yLT5jdXJzb3JbaV0uY29udHJvbCk7CisJCXNlcV9wcmludGYobSwgIiAgUE9TOiAlMDh4XG4iLCBlcnJvci0+Y3Vyc29yW2ldLnBvc2l0aW9uKTsKKwkJc2VxX3ByaW50ZihtLCAiICBCQVNFOiAlMDh4XG4iLCBlcnJvci0+Y3Vyc29yW2ldLmJhc2UpOworCX0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggODY0NDE3Yy4uMWY0MjQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCkBAIC0xMTUzLDE4ICsxMTUzLDI3IEBACiBzdGF0aWMgdWludDMyX3QKIGludGVsX2dlbjZfZWRwX3NpZ25hbF9sZXZlbHModWludDhfdCB0cmFpbl9zZXQpCiB7Ci0Jc3dpdGNoICh0cmFpbl9zZXQgJiAoRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLfERQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVNLKSkgeworCWludCBzaWduYWxfbGV2ZWxzID0gdHJhaW5fc2V0ICYgKERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSyB8CisJCQkJCSBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFTSyk7CisJc3dpdGNoIChzaWduYWxfbGV2ZWxzKSB7CiAJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HXzQwMCB8IERQX1RSQUlOX1BSRV9FTVBIQVNJU18wOgotCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAwTVZfMERCX1NOQl9COworCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR182MDAgfCBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfMDoKKwkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzQwMF82MDBNVl8wREJfU05CX0I7CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HXzQwMCB8IERQX1RSQUlOX1BSRV9FTVBIQVNJU18zXzU6CisJCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBNVl8zXzVEQl9TTkJfQjsKIAljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfNDAwIHwgRFBfVFJBSU5fUFJFX0VNUEhBU0lTXzY6Ci0JCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBNVl82REJfU05CX0I7CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HXzYwMCB8IERQX1RSQUlOX1BSRV9FTVBIQVNJU182OgorCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAwXzYwME1WXzZEQl9TTkJfQjsKIAljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfNjAwIHwgRFBfVFJBSU5fUFJFX0VNUEhBU0lTXzNfNToKLQkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzYwME1WXzNfNURCX1NOQl9COworCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR184MDAgfCBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfM181OgorCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNjAwXzgwME1WXzNfNURCX1NOQl9COwogCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR184MDAgfCBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfMDoKLQkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzgwME1WXzBEQl9TTkJfQjsKKwljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfMTIwMCB8IERQX1RSQUlOX1BSRV9FTVBIQVNJU18wOgorCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fODAwXzEyMDBNVl8wREJfU05CX0I7CiAJZGVmYXVsdDoKLQkJRFJNX0RFQlVHX0tNUygiVW5zdXBwb3J0ZWQgdm9sdGFnZSBzd2luZy9wcmUtZW1waGFzaXMgbGV2ZWxcbiIpOwotCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAwTVZfMERCX1NOQl9COworCQlEUk1fREVCVUdfS01TKCJVbnN1cHBvcnRlZCB2b2x0YWdlIHN3aW5nL3ByZS1lbXBoYXNpcyBsZXZlbDoiCisJCQkgICAgICAiMHgleFxuIiwgc2lnbmFsX2xldmVscyk7CisJCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBfNjAwTVZfMERCX1NOQl9COwogCX0KIH0KIApAQCAtMTMzNCwxNyArMTM0MywyNCBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9kcC0+YmFzZS5iYXNlLmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWJvb2wgY2hhbm5lbF9lcSA9IGZhbHNlOwotCWludCB0cmllczsKKwlpbnQgdHJpZXMsIGNyX3RyaWVzOwogCXUzMiByZWc7CiAJdWludDMyX3QgRFAgPSBpbnRlbF9kcC0+RFA7CiAKIAkvKiBjaGFubmVsIGVxdWFsaXphdGlvbiAqLwogCXRyaWVzID0gMDsKKwljcl90cmllcyA9IDA7CiAJY2hhbm5lbF9lcSA9IGZhbHNlOwogCWZvciAoOzspIHsKIAkJLyogVXNlIGludGVsX2RwLT50cmFpbl9zZXRbMF0gdG8gc2V0IHRoZSB2b2x0YWdlIGFuZCBwcmUgZW1waGFzaXMgdmFsdWVzICovCiAJCXVpbnQzMl90ICAgIHNpZ25hbF9sZXZlbHM7CiAKKwkJaWYgKGNyX3RyaWVzID4gNSkgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdHJhaW4gRFAsIGFib3J0aW5nXG4iKTsKKwkJCWludGVsX2RwX2xpbmtfZG93bihpbnRlbF9kcCk7CisJCQlicmVhazsKKwkJfQorCiAJCWlmIChJU19HRU42KGRldikgJiYgaXNfZWRwKGludGVsX2RwKSkgewogCQkJc2lnbmFsX2xldmVscyA9IGludGVsX2dlbjZfZWRwX3NpZ25hbF9sZXZlbHMoaW50ZWxfZHAtPnRyYWluX3NldFswXSk7CiAJCQlEUCA9IChEUCAmIH5FRFBfTElOS19UUkFJTl9WT0xfRU1QX01BU0tfU05CKSB8IHNpZ25hbF9sZXZlbHM7CkBAIC0xMzY3LDE0ICsxMzgzLDI2IEBACiAJCWlmICghaW50ZWxfZHBfZ2V0X2xpbmtfc3RhdHVzKGludGVsX2RwKSkKIAkJCWJyZWFrOwogCisJCS8qIE1ha2Ugc3VyZSBjbG9jayBpcyBzdGlsbCBvayAqLworCQlpZiAoIWludGVsX2Nsb2NrX3JlY292ZXJ5X29rKGludGVsX2RwLT5saW5rX3N0YXR1cywgaW50ZWxfZHAtPmxhbmVfY291bnQpKSB7CisJCQlpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKGludGVsX2RwKTsKKwkJCWNyX3RyaWVzKys7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWlmIChpbnRlbF9jaGFubmVsX2VxX29rKGludGVsX2RwKSkgewogCQkJY2hhbm5lbF9lcSA9IHRydWU7CiAJCQlicmVhazsKIAkJfQogCi0JCS8qIFRyeSA1IHRpbWVzICovCi0JCWlmICh0cmllcyA+IDUpCi0JCQlicmVhazsKKwkJLyogVHJ5IDUgdGltZXMsIHRoZW4gdHJ5IGNsb2NrIHJlY292ZXJ5IGlmIHRoYXQgZmFpbHMgKi8KKwkJaWYgKHRyaWVzID4gNSkgeworCQkJaW50ZWxfZHBfbGlua19kb3duKGludGVsX2RwKTsKKwkJCWludGVsX2RwX3N0YXJ0X2xpbmtfdHJhaW4oaW50ZWxfZHApOworCQkJdHJpZXMgPSAwOworCQkJY3JfdHJpZXMrKzsKKwkJCWNvbnRpbnVlOworCQl9CiAKIAkJLyogQ29tcHV0ZSBuZXcgaW50ZWxfZHAtPnRyYWluX3NldCBhcyByZXF1ZXN0ZWQgYnkgdGFyZ2V0ICovCiAJCWludGVsX2dldF9hZGp1c3RfdHJhaW4oaW50ZWxfZHApOwpAQCAtMTQ0Miw4ICsxNDcwLDcgQEAKIAkJLyogQ2hhbmdlcyB0byBlbmFibGUgb3Igc2VsZWN0IHRha2UgcGxhY2UgdGhlIHZibGFuawogCQkgKiBhZnRlciBiZWluZyB3cml0dGVuLgogCQkgKi8KLQkJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGludGVsX2RwLT5iYXNlLmJhc2UuZGV2LAotCQkJCSAgICAgIGludGVsX2NydGMtPnBpcGUpOworCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2LCBpbnRlbF9jcnRjLT5waXBlKTsKIAl9CiAKIAlJOTE1X1dSSVRFKGludGVsX2RwLT5vdXRwdXRfcmVnLCBEUCAmIH5EUF9QT1JUX0VOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggZTUyYzYxMi4uNzRkYjI1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiBzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgewogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgYmFzZTsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogfTsKIAogc3RydWN0IGludGVsX2ZiZGV2IHsKQEAgLTE2Niw3ICsxNjYsNyBAQAogCXN0cnVjdCBpbnRlbF91bnBpbl93b3JrICp1bnBpbl93b3JrOwogCWludCBmZGlfbGFuZXM7CiAKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmN1cnNvcl9ibzsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqY3Vyc29yX2JvOwogCXVpbnQzMl90IGN1cnNvcl9hZGRyOwogCWludDE2X3QgY3Vyc29yX3gsIGN1cnNvcl95OwogCWludDE2X3QgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0OwpAQCAtMjIwLDggKzIyMCw4IEBACiBzdHJ1Y3QgaW50ZWxfdW5waW5fd29yayB7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9sZF9mYl9vYmo7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpwZW5kaW5nX2ZsaXBfb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvbGRfZmJfb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpwZW5kaW5nX2ZsaXBfb2JqOwogCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50OwogCWludCBwZW5kaW5nOwogCWJvb2wgZW5hYmxlX3N0YWxsX2NoZWNrOwpAQCAtMjM2LDcgKzIzNiw4IEBACiBleHRlcm4gYm9vbCBpbnRlbF9zZHZvX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG91dHB1dF9kZXZpY2UpOwogZXh0ZXJuIHZvaWQgaW50ZWxfZHZvX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBpbnRlbF90dl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgaW50ZWxfbWFya19idXN5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK2V4dGVybiB2b2lkIGludGVsX21hcmtfYnVzeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwogZXh0ZXJuIGJvb2wgaW50ZWxfbHZkc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaW50ZWxfZHBfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZHBfcmVnKTsKIHZvaWQKQEAgLTI1Niw2ICsyNTcsOSBAQAogZXh0ZXJuIHUzMiBpbnRlbF9wYW5lbF9nZXRfbWF4X2JhY2tsaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB1MzIgaW50ZWxfcGFuZWxfZ2V0X2JhY2tsaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGludGVsX3BhbmVsX3NldF9iYWNrbGlnaHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIGxldmVsKTsKK2V4dGVybiB2b2lkIGludGVsX3BhbmVsX3NldHVwX2JhY2tsaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGludGVsX3BhbmVsX2VuYWJsZV9iYWNrbGlnaHQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpbnRlbF9wYW5lbF9kaXNhYmxlX2JhY2tsaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogZXh0ZXJuIHZvaWQgaW50ZWxfY3J0Y19sb2FkX2x1dChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogZXh0ZXJuIHZvaWQgaW50ZWxfZW5jb2Rlcl9wcmVwYXJlIChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwpAQCAtMjkzLDE5ICsyOTcsMjIgQEAKIAkJCQkgICAgdTE2IGJsdWUsIGludCByZWdubyk7CiBleHRlcm4gdm9pZCBpbnRlbF9jcnRjX2ZiX2dhbW1hX2dldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAogCQkJCSAgICB1MTYgKmJsdWUsIGludCByZWdubyk7Ci1leHRlcm4gdm9pZCBpbnRlbF9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGludGVsX2VuYWJsZV9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpbnRlbF9kaXNhYmxlX2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGlyb25sYWtlX2VuYWJsZV9kcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaXJvbmxha2VfZGlzYWJsZV9kcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZ2VuNl9lbmFibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CitleHRlcm4gdm9pZCBnZW42X2Rpc2FibGVfcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaW50ZWxfaW5pdF9lbW9uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCiBleHRlcm4gaW50IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJICAgICAgYm9vbCBwaXBlbGluZWQpOworCQkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICAgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpwaXBlbGluZWQpOwogCiBleHRlcm4gaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaWZiLAogCQkJCSAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZCAqbW9kZV9jbWQsCi0JCQkJICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CisJCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIGV4dGVybiBpbnQgaW50ZWxfZmJkZXZfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGludGVsX2ZiZGV2X2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCmluZGV4IGFmMmExZGQuLmVlMTQ1YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYwpAQCAtNjIsMTMgKzYyLDEzIEBACiAJCQkgIHN0cnVjdCBkcm1fZmJfaGVscGVyX3N1cmZhY2Vfc2l6ZSAqc2l6ZXMpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGlmYmRldi0+aGVscGVyLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwogCXN0cnVjdCBkcm1fbW9kZV9mYl9jbWQgbW9kZV9jbWQ7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpmYm8gPSBOVUxMOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZkZXYtPnBkZXYtPmRldjsKLQlpbnQgc2l6ZSwgcmV0LCBtbWlvX2JhciA9IElTX0dFTjIoZGV2KSA/IDEgOiAwOworCWludCBzaXplLCByZXQ7CiAKIAkvKiB3ZSBkb24ndCBkbyBwYWNrZWQgMjRicHAgKi8KIAlpZiAoc2l6ZXMtPnN1cmZhY2VfYnBwID09IDI0KQpAQCAtNzgsMjMgKzc4LDIyIEBACiAJbW9kZV9jbWQuaGVpZ2h0ID0gc2l6ZXMtPnN1cmZhY2VfaGVpZ2h0OwogCiAJbW9kZV9jbWQuYnBwID0gc2l6ZXMtPnN1cmZhY2VfYnBwOwotCW1vZGVfY21kLnBpdGNoID0gQUxJR04obW9kZV9jbWQud2lkdGggKiAoKG1vZGVfY21kLmJwcCArIDEpIC8gOCksIDY0KTsKKwltb2RlX2NtZC5waXRjaCA9IEFMSUdOKG1vZGVfY21kLndpZHRoICogKChtb2RlX2NtZC5icHAgKyA3KSAvIDgpLCA2NCk7CiAJbW9kZV9jbWQuZGVwdGggPSBzaXplcy0+c3VyZmFjZV9kZXB0aDsKIAogCXNpemUgPSBtb2RlX2NtZC5waXRjaCAqIG1vZGVfY21kLmhlaWdodDsKIAlzaXplID0gQUxJR04oc2l6ZSwgUEFHRV9TSVpFKTsKLQlmYm8gPSBpOTE1X2dlbV9hbGxvY19vYmplY3QoZGV2LCBzaXplKTsKLQlpZiAoIWZibykgeworCW9iaiA9IGk5MTVfZ2VtX2FsbG9jX29iamVjdChkZXYsIHNpemUpOworCWlmICghb2JqKSB7CiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIGZyYW1lYnVmZmVyXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCW9ial9wcml2ID0gdG9faW50ZWxfYm8oZmJvKTsKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAogCS8qIEZsdXNoIGV2ZXJ5dGhpbmcgb3V0LCB3ZSdsbCBiZSBkb2luZyBHVFQgb25seSBmcm9tIG5vdyBvbiAqLwotCXJldCA9IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKGRldiwgZmJvLCBmYWxzZSk7CisJcmV0ID0gaW50ZWxfcGluX2FuZF9mZW5jZV9mYl9vYmooZGV2LCBvYmosIGZhbHNlKTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBpbiBmYjogJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0X3VucmVmOwpAQCAtMTA4LDcgKzEwNyw3IEBACiAKIAlpbmZvLT5wYXIgPSBpZmJkZXY7CiAKLQlyZXQgPSBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgJmlmYmRldi0+aWZiLCAmbW9kZV9jbWQsIGZibyk7CisJcmV0ID0gaW50ZWxfZnJhbWVidWZmZXJfaW5pdChkZXYsICZpZmJkZXYtPmlmYiwgJm1vZGVfY21kLCBvYmopOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VucGluOwogCkBAIC0xMjIsNiArMTIxLDExIEBACiAJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVCB8IEZCSU5GT19DQU5fRk9SQ0VfT1VUUFVUOwogCWluZm8tPmZib3BzID0gJmludGVsZmJfb3BzOwogCisJcmV0ID0gZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKTsKKwlpZiAocmV0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VucGluOworCX0KIAkvKiBzZXR1cCBhcGVydHVyZSBiYXNlL3NpemUgZm9yIHZlc2FmYiB0YWtlb3ZlciAqLwogCWluZm8tPmFwZXJ0dXJlcyA9IGFsbG9jX2FwZXJ0dXJlcygxKTsKIAlpZiAoIWluZm8tPmFwZXJ0dXJlcykgewpAQCAtMTI5LDM3ICsxMzMsMjMgQEAKIAkJZ290byBvdXRfdW5waW47CiAJfQogCWluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLmJhc2UgPSBkZXYtPm1vZGVfY29uZmlnLmZiX2Jhc2U7Ci0JaWYgKCFJU19HRU4yKGRldikpCi0JCWluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLnNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMik7Ci0JZWxzZQotCQlpbmZvLT5hcGVydHVyZXMtPnJhbmdlc1swXS5zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIDApOworCWluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLnNpemUgPQorCQlkZXZfcHJpdi0+bW0uZ3R0LT5ndHRfbWFwcGFibGVfZW50cmllcyA8PCBQQUdFX1NISUZUOwogCi0JaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBkZXYtPm1vZGVfY29uZmlnLmZiX2Jhc2UgKyBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKwlpbmZvLT5maXguc21lbV9zdGFydCA9IGRldi0+bW9kZV9jb25maWcuZmJfYmFzZSArIG9iai0+Z3R0X29mZnNldDsKIAlpbmZvLT5maXguc21lbV9sZW4gPSBzaXplOwogCi0JaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwX3djKGRldi0+YWdwLT5iYXNlICsgb2JqX3ByaXYtPmd0dF9vZmZzZXQsCi0JCQkJICAgICAgIHNpemUpOworCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcF93YyhkZXYtPmFncC0+YmFzZSArIG9iai0+Z3R0X29mZnNldCwgc2l6ZSk7CiAJaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgewogCQlyZXQgPSAtRU5PU1BDOwogCQlnb3RvIG91dF91bnBpbjsKIAl9Ci0KLQlyZXQgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApOwotCWlmIChyZXQpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfdW5waW47Ci0JfQogCWluZm8tPnNjcmVlbl9zaXplID0gc2l6ZTsKIAogLy8JbWVtc2V0KGluZm8tPnNjcmVlbl9iYXNlLCAwLCBzaXplKTsKIAotCWRybV9mYl9oZWxwZXJfZmlsbF9maXgoaW5mbywgZmItPnBpdGNoLCBmYi0+ZGVwdGgpOwogCWRybV9mYl9oZWxwZXJfZmlsbF92YXIoaW5mbywgJmlmYmRldi0+aGVscGVyLCBzaXplcy0+ZmJfd2lkdGgsIHNpemVzLT5mYl9oZWlnaHQpOwogCi0JLyogRklYTUU6IHdlIHJlYWxseSBzaG91bGRuJ3QgZXhwb3NlIG1taW8gc3BhY2UgYXQgYWxsICovCi0JaW5mby0+Zml4Lm1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCBtbWlvX2Jhcik7Ci0JaW5mby0+Zml4Lm1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIG1taW9fYmFyKTsKLQogCWluZm8tPnBpeG1hcC5zaXplID0gNjQqMTAyNDsKIAlpbmZvLT5waXhtYXAuYnVmX2FsaWduID0gODsKIAlpbmZvLT5waXhtYXAuYWNjZXNzX2FsaWduID0gMzI7CkBAIC0xNjgsNyArMTU4LDcgQEAKIAogCURSTV9ERUJVR19LTVMoImFsbG9jYXRlZCAlZHglZCBmYjogMHglMDh4LCBibyAlcFxuIiwKIAkJICAgICAgZmItPndpZHRoLCBmYi0+aGVpZ2h0LAotCQkgICAgICBvYmpfcHJpdi0+Z3R0X29mZnNldCwgZmJvKTsKKwkJICAgICAgb2JqLT5ndHRfb2Zmc2V0LCBvYmopOwogCiAKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKQEAgLTE3Niw5ICsxNjYsOSBAQAogCXJldHVybiAwOwogCiBvdXRfdW5waW46Ci0JaTkxNV9nZW1fb2JqZWN0X3VucGluKGZibyk7CisJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CiBvdXRfdW5yZWY6Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZmJvKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtMjI1LDcgKzIxNSw3IEBACiAKIAlkcm1fZnJhbWVidWZmZXJfY2xlYW51cCgmaWZiLT5iYXNlKTsKIAlpZiAoaWZiLT5vYmopIHsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoaWZiLT5vYmopOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmaWZiLT5vYmotPmJhc2UpOwogCQlpZmItPm9iaiA9IE5VTEw7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYwppbmRleCAzZGJhMDg2Li41ODA0MGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYwpAQCAtODUsOCArODUsOSBAQAogCiAJLyogT24gbW9zdCBjaGlwcywgdGhlc2UgYml0cyBtdXN0IGJlIHByZXNlcnZlZCBpbiBzb2Z0d2FyZS4gKi8KIAlpZiAoIUlTX0k4MzAoZGV2KSAmJiAhSVNfODQ1RyhkZXYpKQotCQlyZXNlcnZlZCA9IEk5MTVfUkVBRChncGlvLT5yZWcpICYgKEdQSU9fREFUQV9QVUxMVVBfRElTQUJMRSB8Ci0JCQkJCQkgICBHUElPX0NMT0NLX1BVTExVUF9ESVNBQkxFKTsKKwkJcmVzZXJ2ZWQgPSBJOTE1X1JFQURfTk9UUkFDRShncGlvLT5yZWcpICYKKwkJCQkJICAgICAoR1BJT19EQVRBX1BVTExVUF9ESVNBQkxFIHwKKwkJCQkJICAgICAgR1BJT19DTE9DS19QVUxMVVBfRElTQUJMRSk7CiAKIAlyZXR1cm4gcmVzZXJ2ZWQ7CiB9CkBAIC05Niw5ICs5Nyw5IEBACiAJc3RydWN0IGludGVsX2dwaW8gKmdwaW8gPSBkYXRhOwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGdwaW8tPmRldl9wcml2OwogCXUzMiByZXNlcnZlZCA9IGdldF9yZXNlcnZlZChncGlvKTsKLQlJOTE1X1dSSVRFKGdwaW8tPnJlZywgcmVzZXJ2ZWQgfCBHUElPX0NMT0NLX0RJUl9NQVNLKTsKLQlJOTE1X1dSSVRFKGdwaW8tPnJlZywgcmVzZXJ2ZWQpOwotCXJldHVybiAoSTkxNV9SRUFEKGdwaW8tPnJlZykgJiBHUElPX0NMT0NLX1ZBTF9JTikgIT0gMDsKKwlJOTE1X1dSSVRFX05PVFJBQ0UoZ3Bpby0+cmVnLCByZXNlcnZlZCB8IEdQSU9fQ0xPQ0tfRElSX01BU0spOworCUk5MTVfV1JJVEVfTk9UUkFDRShncGlvLT5yZWcsIHJlc2VydmVkKTsKKwlyZXR1cm4gKEk5MTVfUkVBRF9OT1RSQUNFKGdwaW8tPnJlZykgJiBHUElPX0NMT0NLX1ZBTF9JTikgIT0gMDsKIH0KIAogc3RhdGljIGludCBnZXRfZGF0YSh2b2lkICpkYXRhKQpAQCAtMTA2LDkgKzEwNyw5IEBACiAJc3RydWN0IGludGVsX2dwaW8gKmdwaW8gPSBkYXRhOwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGdwaW8tPmRldl9wcml2OwogCXUzMiByZXNlcnZlZCA9IGdldF9yZXNlcnZlZChncGlvKTsKLQlJOTE1X1dSSVRFKGdwaW8tPnJlZywgcmVzZXJ2ZWQgfCBHUElPX0RBVEFfRElSX01BU0spOwotCUk5MTVfV1JJVEUoZ3Bpby0+cmVnLCByZXNlcnZlZCk7Ci0JcmV0dXJuIChJOTE1X1JFQUQoZ3Bpby0+cmVnKSAmIEdQSU9fREFUQV9WQUxfSU4pICE9IDA7CisJSTkxNV9XUklURV9OT1RSQUNFKGdwaW8tPnJlZywgcmVzZXJ2ZWQgfCBHUElPX0RBVEFfRElSX01BU0spOworCUk5MTVfV1JJVEVfTk9UUkFDRShncGlvLT5yZWcsIHJlc2VydmVkKTsKKwlyZXR1cm4gKEk5MTVfUkVBRF9OT1RSQUNFKGdwaW8tPnJlZykgJiBHUElPX0RBVEFfVkFMX0lOKSAhPSAwOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfY2xvY2sodm9pZCAqZGF0YSwgaW50IHN0YXRlX2hpZ2gpCkBAIC0xMjQsNyArMTI1LDcgQEAKIAkJY2xvY2tfYml0cyA9IEdQSU9fQ0xPQ0tfRElSX09VVCB8IEdQSU9fQ0xPQ0tfRElSX01BU0sgfAogCQkJR1BJT19DTE9DS19WQUxfTUFTSzsKIAotCUk5MTVfV1JJVEUoZ3Bpby0+cmVnLCByZXNlcnZlZCB8IGNsb2NrX2JpdHMpOworCUk5MTVfV1JJVEVfTk9UUkFDRShncGlvLT5yZWcsIHJlc2VydmVkIHwgY2xvY2tfYml0cyk7CiAJUE9TVElOR19SRUFEKGdwaW8tPnJlZyk7CiB9CiAKQEAgLTE0MSw3ICsxNDIsNyBAQAogCQlkYXRhX2JpdHMgPSBHUElPX0RBVEFfRElSX09VVCB8IEdQSU9fREFUQV9ESVJfTUFTSyB8CiAJCQlHUElPX0RBVEFfVkFMX01BU0s7CiAKLQlJOTE1X1dSSVRFKGdwaW8tPnJlZywgcmVzZXJ2ZWQgfCBkYXRhX2JpdHMpOworCUk5MTVfV1JJVEVfTk9UUkFDRShncGlvLT5yZWcsIHJlc2VydmVkIHwgZGF0YV9iaXRzKTsKIAlQT1NUSU5HX1JFQUQoZ3Bpby0+cmVnKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCmluZGV4IDI1YmNlZGYuLjhmNGY2YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCUk5MTVfV1JJVEUoY3RsX3JlZywgSTkxNV9SRUFEKGN0bF9yZWcpIHwgUE9XRVJfVEFSR0VUX09OKTsKIAlQT1NUSU5HX1JFQUQobHZkc19yZWcpOwogCi0JaW50ZWxfcGFuZWxfc2V0X2JhY2tsaWdodChkZXYsIGRldl9wcml2LT5iYWNrbGlnaHRfbGV2ZWwpOworCWludGVsX3BhbmVsX2VuYWJsZV9iYWNrbGlnaHQoZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgaW50ZWxfbHZkc19kaXNhYmxlKHN0cnVjdCBpbnRlbF9sdmRzICppbnRlbF9sdmRzKQpAQCAtMTIzLDggKzEyMyw3IEBACiAJCWx2ZHNfcmVnID0gTFZEUzsKIAl9CiAKLQlkZXZfcHJpdi0+YmFja2xpZ2h0X2xldmVsID0gaW50ZWxfcGFuZWxfZ2V0X2JhY2tsaWdodChkZXYpOwotCWludGVsX3BhbmVsX3NldF9iYWNrbGlnaHQoZGV2LCAwKTsKKwlpbnRlbF9wYW5lbF9kaXNhYmxlX2JhY2tsaWdodChkZXYpOwogCiAJSTkxNV9XUklURShjdGxfcmVnLCBJOTE1X1JFQUQoY3RsX3JlZykgJiB+UE9XRVJfVEFSR0VUX09OKTsKIApAQCAtMzA0LDE0ICszMDMsMTMgQEAKIAkJCXUzMiBzY2FsZWRfd2lkdGggPSBhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSAqIG1vZGUtPnZkaXNwbGF5OwogCQkJdTMyIHNjYWxlZF9oZWlnaHQgPSBtb2RlLT5oZGlzcGxheSAqIGFkanVzdGVkX21vZGUtPnZkaXNwbGF5OwogCi0JCQlwZml0X2NvbnRyb2wgfD0gUEZJVF9FTkFCTEU7CiAJCQkvKiA5NjUrIGlzIGVhc3ksIGl0IGRvZXMgZXZlcnl0aGluZyBpbiBodyAqLwogCQkJaWYgKHNjYWxlZF93aWR0aCA+IHNjYWxlZF9oZWlnaHQpCi0JCQkJcGZpdF9jb250cm9sIHw9IFBGSVRfU0NBTElOR19QSUxMQVI7CisJCQkJcGZpdF9jb250cm9sIHw9IFBGSVRfRU5BQkxFIHwgUEZJVF9TQ0FMSU5HX1BJTExBUjsKIAkJCWVsc2UgaWYgKHNjYWxlZF93aWR0aCA8IHNjYWxlZF9oZWlnaHQpCi0JCQkJcGZpdF9jb250cm9sIHw9IFBGSVRfU0NBTElOR19MRVRURVI7Ci0JCQllbHNlCi0JCQkJcGZpdF9jb250cm9sIHw9IFBGSVRfU0NBTElOR19BVVRPOworCQkJCXBmaXRfY29udHJvbCB8PSBQRklUX0VOQUJMRSB8IFBGSVRfU0NBTElOR19MRVRURVI7CisJCQllbHNlIGlmIChhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSAhPSBtb2RlLT5oZGlzcGxheSkKKwkJCQlwZml0X2NvbnRyb2wgfD0gUEZJVF9FTkFCTEUgfCBQRklUX1NDQUxJTkdfQVVUTzsKIAkJfSBlbHNlIHsKIAkJCXUzMiBzY2FsZWRfd2lkdGggPSBhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSAqIG1vZGUtPnZkaXNwbGF5OwogCQkJdTMyIHNjYWxlZF9oZWlnaHQgPSBtb2RlLT5oZGlzcGxheSAqIGFkanVzdGVkX21vZGUtPnZkaXNwbGF5OwpAQCAtMzU4LDEzICszNTYsMTcgQEAKIAkJICogRnVsbCBzY2FsaW5nLCBldmVuIGlmIGl0IGNoYW5nZXMgdGhlIGFzcGVjdCByYXRpby4KIAkJICogRm9ydHVuYXRlbHkgdGhpcyBpcyBhbGwgZG9uZSBmb3IgdXMgaW4gaHcuCiAJCSAqLwotCQlwZml0X2NvbnRyb2wgfD0gUEZJVF9FTkFCTEU7Ci0JCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KQotCQkJcGZpdF9jb250cm9sIHw9IFBGSVRfU0NBTElOR19BVVRPOwotCQllbHNlCi0JCQlwZml0X2NvbnRyb2wgfD0gKFZFUlRfQVVUT19TQ0FMRSB8IEhPUklaX0FVVE9fU0NBTEUgfAotCQkJCQkgVkVSVF9JTlRFUlBfQklMSU5FQVIgfAotCQkJCQkgSE9SSVpfSU5URVJQX0JJTElORUFSKTsKKwkJaWYgKG1vZGUtPnZkaXNwbGF5ICE9IGFkanVzdGVkX21vZGUtPnZkaXNwbGF5IHx8CisJCSAgICBtb2RlLT5oZGlzcGxheSAhPSBhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSkgeworCQkJcGZpdF9jb250cm9sIHw9IFBGSVRfRU5BQkxFOworCQkJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQpCisJCQkJcGZpdF9jb250cm9sIHw9IFBGSVRfU0NBTElOR19BVVRPOworCQkJZWxzZQorCQkJCXBmaXRfY29udHJvbCB8PSAoVkVSVF9BVVRPX1NDQUxFIHwKKwkJCQkJCSBWRVJUX0lOVEVSUF9CSUxJTkVBUiB8CisJCQkJCQkgSE9SSVpfQVVUT19TQ0FMRSB8CisJCQkJCQkgSE9SSVpfSU5URVJQX0JJTElORUFSKTsKKwkJfQogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0zNzIsNiArMzc0LDEwIEBACiAJfQogCiBvdXQ6CisJaWYgKChwZml0X2NvbnRyb2wgJiBQRklUX0VOQUJMRSkgPT0gMCkgeworCQlwZml0X2NvbnRyb2wgPSAwOworCQlwZml0X3BnbV9yYXRpb3MgPSAwOworCX0KIAlpZiAocGZpdF9jb250cm9sICE9IGludGVsX2x2ZHMtPnBmaXRfY29udHJvbCB8fAogCSAgICBwZml0X3BnbV9yYXRpb3MgIT0gaW50ZWxfbHZkcy0+cGZpdF9wZ21fcmF0aW9zKSB7CiAJCWludGVsX2x2ZHMtPnBmaXRfY29udHJvbCA9IHBmaXRfY29udHJvbDsKQEAgLTM5NSw4ICs0MDEsNiBAQAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGludGVsX2x2ZHMgKmludGVsX2x2ZHMgPSB0b19pbnRlbF9sdmRzKGVuY29kZXIpOwogCi0JZGV2X3ByaXYtPmJhY2tsaWdodF9sZXZlbCA9IGludGVsX3BhbmVsX2dldF9iYWNrbGlnaHQoZGV2KTsKLQogCS8qIFdlIHRyeSB0byBkbyB0aGUgbWluaW11bSB0aGF0IGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byB1bmxvY2sKIAkgKiB0aGUgcmVnaXN0ZXJzIGZvciBtb2RlIHNldHRpbmcuCiAJICoKQEAgLTQyNyw5ICs0MzEsNiBAQAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGludGVsX2x2ZHMgKmludGVsX2x2ZHMgPSB0b19pbnRlbF9sdmRzKGVuY29kZXIpOwogCi0JaWYgKGRldl9wcml2LT5iYWNrbGlnaHRfbGV2ZWwgPT0gMCkKLQkJZGV2X3ByaXYtPmJhY2tsaWdodF9sZXZlbCA9IGludGVsX3BhbmVsX2dldF9tYXhfYmFja2xpZ2h0KGRldik7Ci0KIAkvKiBVbmRvIGFueSB1bmxvY2tpbmcgZG9uZSBpbiBwcmVwYXJlIHRvIHByZXZlbnQgYWNjaWRlbnRhbAogCSAqIGFkanVzdG1lbnQgb2YgdGhlIHJlZ2lzdGVycy4KIAkgKi8KQEAgLTkxNCw2ICs5MTUsOCBAQAogCiAJaW50ZWxfZW5jb2Rlci0+Y2xvbmVfbWFzayA9ICgxIDw8IElOVEVMX0xWRFNfQ0xPTkVfQklUKTsKIAlpbnRlbF9lbmNvZGVyLT5jcnRjX21hc2sgPSAoMSA8PCAxKTsKKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNSkKKwkJaW50ZWxfZW5jb2Rlci0+Y3J0Y19tYXNrIHw9ICgxIDw8IDApOwogCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgJmludGVsX2x2ZHNfaGVscGVyX2Z1bmNzKTsKIAlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmaW50ZWxfbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKIAljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5zdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKQEAgLTEwMTksMTAgKzEwMjIsMTggQEAKIG91dDoKIAlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCXUzMiBwd207Ci0JCS8qIG1ha2Ugc3VyZSBQV00gaXMgZW5hYmxlZCAqLworCisJCXBpcGUgPSAoSTkxNV9SRUFEKFBDSF9MVkRTKSAmIExWRFNfUElQRUJfU0VMRUNUKSA/IDEgOiAwOworCisJCS8qIG1ha2Ugc3VyZSBQV00gaXMgZW5hYmxlZCBhbmQgbG9ja2VkIHRvIHRoZSBMVkRTIHBpcGUgKi8KIAkJcHdtID0gSTkxNV9SRUFEKEJMQ19QV01fQ1BVX0NUTDIpOwotCQlwd20gfD0gKFBXTV9FTkFCTEUgfCBQV01fUElQRV9CKTsKLQkJSTkxNV9XUklURShCTENfUFdNX0NQVV9DVEwyLCBwd20pOworCQlpZiAocGlwZSA9PSAwICYmIChwd20gJiBQV01fUElQRV9CKSkKKwkJCUk5MTVfV1JJVEUoQkxDX1BXTV9DUFVfQ1RMMiwgcHdtICYgflBXTV9FTkFCTEUpOworCQlpZiAocGlwZSkKKwkJCXB3bSB8PSBQV01fUElQRV9COworCQllbHNlCisJCQlwd20gJj0gflBXTV9QSVBFX0I7CisJCUk5MTVfV1JJVEUoQkxDX1BXTV9DUFVfQ1RMMiwgcHdtIHwgUFdNX0VOQUJMRSk7CiAKIAkJcHdtID0gSTkxNV9SRUFEKEJMQ19QV01fUENIX0NUTDEpOwogCQlwd20gfD0gUFdNX1BDSF9FTkFCTEU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ByZWdpb24uYwppbmRleCA5YjBkOWE4Li5mMjk1YTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX29wcmVnaW9uLmMKQEAgLTI3MywxNCArMjczLDggQEAKIAlzdHJ1Y3Qgb3ByZWdpb25fYXNsZSAqYXNsZSA9IGRldl9wcml2LT5vcHJlZ2lvbi5hc2xlOwogCiAJaWYgKGFzbGUpIHsKLQkJaWYgKElTX01PQklMRShkZXYpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2ssIGlycWZsYWdzKTsKKwkJaWYgKElTX01PQklMRShkZXYpKQogCQkJaW50ZWxfZW5hYmxlX2FzbGUoZGV2KTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLAotCQkJCQkgICAgICAgaXJxZmxhZ3MpOwotCQl9CiAKIAkJYXNsZS0+dGNoZSA9IEFTTEVfQUxTX0VOIHwgQVNMRV9CTENfRU4gfCBBU0xFX1BGSVRfRU4gfAogCQkJQVNMRV9QRk1CX0VOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jCmluZGV4IDAyZmYwYTQuLjNmYmI5OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX292ZXJsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vdmVybGF5LmMKQEAgLTIyMSwxNSArMjIxLDE2IEBACiAJaW50IHJldDsKIAogCUJVR19PTihvdmVybGF5LT5sYXN0X2ZsaXBfcmVxKTsKLQlvdmVybGF5LT5sYXN0X2ZsaXBfcmVxID0KLQkJaTkxNV9hZGRfcmVxdWVzdChkZXYsIE5VTEwsIHJlcXVlc3QsICZkZXZfcHJpdi0+cmVuZGVyX3JpbmcpOwotCWlmIChvdmVybGF5LT5sYXN0X2ZsaXBfcmVxID09IDApCi0JCXJldHVybiAtRU5PTUVNOwotCisJcmV0ID0gaTkxNV9hZGRfcmVxdWVzdChkZXYsIE5VTEwsIHJlcXVlc3QsIExQX1JJTkcoZGV2X3ByaXYpKTsKKwlpZiAocmV0KSB7CisJICAgIGtmcmVlKHJlcXVlc3QpOworCSAgICByZXR1cm4gcmV0OworCX0KKwlvdmVybGF5LT5sYXN0X2ZsaXBfcmVxID0gcmVxdWVzdC0+c2Vxbm87CiAJb3ZlcmxheS0+ZmxpcF90YWlsID0gdGFpbDsKIAlyZXQgPSBpOTE1X2RvX3dhaXRfcmVxdWVzdChkZXYsCiAJCQkJICAgb3ZlcmxheS0+bGFzdF9mbGlwX3JlcSwgdHJ1ZSwKLQkJCQkgICAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nKTsKKwkJCQkgICBMUF9SSU5HKGRldl9wcml2KSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMjg5LDYgKzI5MCw3IEBACiBzdGF0aWMgaW50IGludGVsX292ZXJsYXlfb24oc3RydWN0IGludGVsX292ZXJsYXkgKm92ZXJsYXkpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG92ZXJsYXktPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKIAlpbnQgcGlwZV9hX3F1aXJrID0gMDsKIAlpbnQgcmV0OwpAQCAtMzA4LDcgKzMxMCwxMiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlCRUdJTl9MUF9SSU5HKDQpOworCXJldCA9IEJFR0lOX0xQX1JJTkcoNCk7CisJaWYgKHJldCkgeworCQlrZnJlZShyZXF1ZXN0KTsKKwkJZ290byBvdXQ7CisJfQorCiAJT1VUX1JJTkcoTUlfT1ZFUkxBWV9GTElQIHwgTUlfT1ZFUkxBWV9PTik7CiAJT1VUX1JJTkcob3ZlcmxheS0+ZmxpcF9hZGRyIHwgT0ZDX1VQREFURSk7CiAJT1VUX1JJTkcoTUlfV0FJVF9GT1JfRVZFTlQgfCBNSV9XQUlUX0ZPUl9PVkVSTEFZX0ZMSVApOwpAQCAtMzMyLDYgKzMzOSw3IEBACiAJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0OwogCXUzMiBmbGlwX2FkZHIgPSBvdmVybGF5LT5mbGlwX2FkZHI7CiAJdTMyIHRtcDsKKwlpbnQgcmV0OwogCiAJQlVHX09OKCFvdmVybGF5LT5hY3RpdmUpOwogCkBAIC0zNDcsMzYgKzM1NSw0NCBAQAogCWlmICh0bXAgJiAoMSA8PCAxNykpCiAJCURSTV9ERUJVRygib3ZlcmxheSB1bmRlcnJ1biwgRE9WU1RBOiAleFxuIiwgdG1wKTsKIAotCUJFR0lOX0xQX1JJTkcoMik7CisJcmV0ID0gQkVHSU5fTFBfUklORygyKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKHJlcXVlc3QpOworCQlyZXR1cm4gcmV0OworCX0KIAlPVVRfUklORyhNSV9PVkVSTEFZX0ZMSVAgfCBNSV9PVkVSTEFZX0NPTlRJTlVFKTsKIAlPVVRfUklORyhmbGlwX2FkZHIpOwogICAgICAgICBBRFZBTkNFX0xQX1JJTkcoKTsKIAotCW92ZXJsYXktPmxhc3RfZmxpcF9yZXEgPQotCQlpOTE1X2FkZF9yZXF1ZXN0KGRldiwgTlVMTCwgcmVxdWVzdCwgJmRldl9wcml2LT5yZW5kZXJfcmluZyk7CisJcmV0ID0gaTkxNV9hZGRfcmVxdWVzdChkZXYsIE5VTEwsIHJlcXVlc3QsIExQX1JJTkcoZGV2X3ByaXYpKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKHJlcXVlc3QpOworCQlyZXR1cm4gcmV0OworCX0KKworCW92ZXJsYXktPmxhc3RfZmxpcF9yZXEgPSByZXF1ZXN0LT5zZXFubzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaW50ZWxfb3ZlcmxheV9yZWxlYXNlX29sZF92aWRfdGFpbChzdHJ1Y3QgaW50ZWxfb3ZlcmxheSAqb3ZlcmxheSkKIHsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZvdmVybGF5LT5vbGRfdmlkX2JvLT5iYXNlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBvdmVybGF5LT5vbGRfdmlkX2JvOwogCiAJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKIAogCW92ZXJsYXktPm9sZF92aWRfYm8gPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBpbnRlbF9vdmVybGF5X29mZl90YWlsKHN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5KQogewotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBvdmVybGF5LT52aWRfYm87CiAKIAkvKiBuZXZlciBoYXZlIHRoZSBvdmVybGF5IGh3IG9uIHdpdGhvdXQgc2hvd2luZyBhIGZyYW1lICovCiAJQlVHX09OKCFvdmVybGF5LT52aWRfYm8pOwotCW9iaiA9ICZvdmVybGF5LT52aWRfYm8tPmJhc2U7CiAKIAlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogCW92ZXJsYXktPnZpZF9ibyA9IE5VTEw7CiAKIAlvdmVybGF5LT5jcnRjLT5vdmVybGF5ID0gTlVMTDsKQEAgLTM4OSw4ICs0MDUsMTAgQEAKIAkJCSAgICAgYm9vbCBpbnRlcnJ1cHRpYmxlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvdmVybGF5LT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgZmxpcF9hZGRyID0gb3ZlcmxheS0+ZmxpcF9hZGRyOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKKwlpbnQgcmV0OwogCiAJQlVHX09OKCFvdmVybGF5LT5hY3RpdmUpOwogCkBAIC00MDQsNyArNDIyLDExIEBACiAJICogb2YgdGhlIGh3LiBEbyBpdCBpbiBib3RoIGNhc2VzICovCiAJZmxpcF9hZGRyIHw9IE9GQ19VUERBVEU7CiAKLQlCRUdJTl9MUF9SSU5HKDYpOworCXJldCA9IEJFR0lOX0xQX1JJTkcoNik7CisJaWYgKHJldCkgeworCQlrZnJlZShyZXF1ZXN0KTsKKwkJcmV0dXJuIHJldDsKKwl9CiAJLyogd2FpdCBmb3Igb3ZlcmxheSB0byBnbyBpZGxlICovCiAJT1VUX1JJTkcoTUlfT1ZFUkxBWV9GTElQIHwgTUlfT1ZFUkxBWV9DT05USU5VRSk7CiAJT1VUX1JJTkcoZmxpcF9hZGRyKTsKQEAgLTQzMiw3ICs0NTQsNyBAQAogCQlyZXR1cm4gMDsKIAogCXJldCA9IGk5MTVfZG9fd2FpdF9yZXF1ZXN0KGRldiwgb3ZlcmxheS0+bGFzdF9mbGlwX3JlcSwKLQkJCQkgICBpbnRlcnJ1cHRpYmxlLCAmZGV2X3ByaXYtPnJlbmRlcl9yaW5nKTsKKwkJCQkgICBpbnRlcnJ1cHRpYmxlLCBMUF9SSU5HKGRldl9wcml2KSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNDY3LDcgKzQ4OSwxMiBAQAogCQlpZiAocmVxdWVzdCA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKLQkJQkVHSU5fTFBfUklORygyKTsKKwkJcmV0ID0gQkVHSU5fTFBfUklORygyKTsKKwkJaWYgKHJldCkgeworCQkJa2ZyZWUocmVxdWVzdCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKIAkJT1VUX1JJTkcoTUlfV0FJVF9GT1JfRVZFTlQgfCBNSV9XQUlUX0ZPUl9PVkVSTEFZX0ZMSVApOwogCQlPVVRfUklORyhNSV9OT09QKTsKIAkJQURWQU5DRV9MUF9SSU5HKCk7CkBAIC03MzYsMTMgKzc2MywxMiBAQAogfQogCiBzdGF0aWMgaW50IGludGVsX292ZXJsYXlfZG9fcHV0X2ltYWdlKHN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5LAotCQkJCSAgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqbmV3X2JvLAorCQkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpuZXdfYm8sCiAJCQkJICAgICAgc3RydWN0IHB1dF9pbWFnZV9wYXJhbXMgKnBhcmFtcykKIHsKIAlpbnQgcmV0LCB0bXBfd2lkdGg7CiAJc3RydWN0IG92ZXJsYXlfcmVnaXN0ZXJzICpyZWdzOwogCWJvb2wgc2NhbGVfY2hhbmdlZCA9IGZhbHNlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpib19wcml2ID0gdG9faW50ZWxfYm8obmV3X2JvKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb3ZlcmxheS0+ZGV2OwogCiAJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211dGV4KSk7CkBAIC03NTMsNyArNzc5LDcgQEAKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG5ld19ibywgUEFHRV9TSVpFKTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG5ld19ibywgUEFHRV9TSVpFLCB0cnVlKTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTc2MSw2ICs3ODcsMTAgQEAKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gb3V0X3VucGluOwogCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3B1dF9mZW5jZShuZXdfYm8pOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VucGluOworCiAJaWYgKCFvdmVybGF5LT5hY3RpdmUpIHsKIAkJcmVncyA9IGludGVsX292ZXJsYXlfbWFwX3JlZ3Mob3ZlcmxheSk7CiAJCWlmICghcmVncykgewpAQCAtNzk3LDcgKzgyNyw3IEBACiAJcmVncy0+U1dJRFRIU1cgPSBjYWxjX3N3aWR0aHN3KG92ZXJsYXktPmRldiwKIAkJCQkgICAgICAgcGFyYW1zLT5vZmZzZXRfWSwgdG1wX3dpZHRoKTsKIAlyZWdzLT5TSEVJR0hUID0gcGFyYW1zLT5zcmNfaDsKLQlyZWdzLT5PQlVGXzBZID0gYm9fcHJpdi0+Z3R0X29mZnNldCArIHBhcmFtcy0+IG9mZnNldF9ZOworCXJlZ3MtPk9CVUZfMFkgPSBuZXdfYm8tPmd0dF9vZmZzZXQgKyBwYXJhbXMtPiBvZmZzZXRfWTsKIAlyZWdzLT5PU1RSSURFID0gcGFyYW1zLT5zdHJpZGVfWTsKIAogCWlmIChwYXJhbXMtPmZvcm1hdCAmIEk5MTVfT1ZFUkxBWV9ZVVZfUExBTkFSKSB7CkBAIC04MTEsOCArODQxLDggQEAKIAkJCQkgICAgICBwYXJhbXMtPnNyY193L3V2X2hzY2FsZSk7CiAJCXJlZ3MtPlNXSURUSFNXIHw9IG1heF90KHUzMiwgdG1wX1UsIHRtcF9WKSA8PCAxNjsKIAkJcmVncy0+U0hFSUdIVCB8PSAocGFyYW1zLT5zcmNfaC91dl92c2NhbGUpIDw8IDE2OwotCQlyZWdzLT5PQlVGXzBVID0gYm9fcHJpdi0+Z3R0X29mZnNldCArIHBhcmFtcy0+b2Zmc2V0X1U7Ci0JCXJlZ3MtPk9CVUZfMFYgPSBib19wcml2LT5ndHRfb2Zmc2V0ICsgcGFyYW1zLT5vZmZzZXRfVjsKKwkJcmVncy0+T0JVRl8wVSA9IG5ld19iby0+Z3R0X29mZnNldCArIHBhcmFtcy0+b2Zmc2V0X1U7CisJCXJlZ3MtPk9CVUZfMFYgPSBuZXdfYm8tPmd0dF9vZmZzZXQgKyBwYXJhbXMtPm9mZnNldF9WOwogCQlyZWdzLT5PU1RSSURFIHw9IHBhcmFtcy0+c3RyaWRlX1VWIDw8IDE2OwogCX0KIApAQCAtODI5LDcgKzg1OSw3IEBACiAJCWdvdG8gb3V0X3VucGluOwogCiAJb3ZlcmxheS0+b2xkX3ZpZF9ibyA9IG92ZXJsYXktPnZpZF9ibzsKLQlvdmVybGF5LT52aWRfYm8gPSB0b19pbnRlbF9ibyhuZXdfYm8pOworCW92ZXJsYXktPnZpZF9ibyA9IG5ld19ibzsKIAogCXJldHVybiAwOwogCkBAIC05NDIsNyArOTcyLDcgQEAKIAogc3RhdGljIGludCBjaGVja19vdmVybGF5X3NyYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgZHJtX2ludGVsX292ZXJsYXlfcHV0X2ltYWdlICpyZWMsCi0JCQkgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqbmV3X2JvKQorCQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqbmV3X2JvKQogewogCWludCB1dl9oc2NhbGUgPSB1dl9oc3Vic2FtcGxpbmcocmVjLT5mbGFncyk7CiAJaW50IHV2X3ZzY2FsZSA9IHV2X3ZzdWJzYW1wbGluZyhyZWMtPmZsYWdzKTsKQEAgLTEwMjcsNyArMTA1Nyw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQl0bXAgPSByZWMtPnN0cmlkZV9ZKnJlYy0+c3JjX2hlaWdodDsKLQkJaWYgKHJlYy0+b2Zmc2V0X1kgKyB0bXAgPiBuZXdfYm8tPnNpemUpCisJCWlmIChyZWMtPm9mZnNldF9ZICsgdG1wID4gbmV3X2JvLT5iYXNlLnNpemUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAKQEAgLTEwMzgsMTIgKzEwNjgsMTIgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCXRtcCA9IHJlYy0+c3RyaWRlX1kgKiByZWMtPnNyY19oZWlnaHQ7Ci0JCWlmIChyZWMtPm9mZnNldF9ZICsgdG1wID4gbmV3X2JvLT5zaXplKQorCQlpZiAocmVjLT5vZmZzZXRfWSArIHRtcCA+IG5ld19iby0+YmFzZS5zaXplKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJdG1wID0gcmVjLT5zdHJpZGVfVVYgKiAocmVjLT5zcmNfaGVpZ2h0IC8gdXZfdnNjYWxlKTsKLQkJaWYgKHJlYy0+b2Zmc2V0X1UgKyB0bXAgPiBuZXdfYm8tPnNpemUgfHwKLQkJICAgIHJlYy0+b2Zmc2V0X1YgKyB0bXAgPiBuZXdfYm8tPnNpemUpCisJCWlmIChyZWMtPm9mZnNldF9VICsgdG1wID4gbmV3X2JvLT5iYXNlLnNpemUgfHwKKwkJICAgIHJlYy0+b2Zmc2V0X1YgKyB0bXAgPiBuZXdfYm8tPmJhc2Uuc2l6ZSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAl9CkBAIC0xMDg2LDcgKzExMTYsNyBAQAogCXN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5OwogCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKmRybW1vZGVfb2JqOwogCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqbmV3X2JvOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpuZXdfYm87CiAJc3RydWN0IHB1dF9pbWFnZV9wYXJhbXMgKnBhcmFtczsKIAlpbnQgcmV0OwogCkBAIC0xMTI1LDggKzExNTUsOCBAQAogCX0KIAljcnRjID0gdG9faW50ZWxfY3J0YyhvYmpfdG9fY3J0Yyhkcm1tb2RlX29iaikpOwogCi0JbmV3X2JvID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LAotCQkJCSAgICAgICBwdXRfaW1hZ2VfcmVjLT5ib19oYW5kbGUpOworCW5ld19ibyA9IHRvX2ludGVsX2JvKGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwKKwkJCQkJCSAgIHB1dF9pbWFnZV9yZWMtPmJvX2hhbmRsZSkpOwogCWlmICghbmV3X2JvKSB7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0xMTM1LDYgKzExNjUsMTIgQEAKIAltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKKwlpZiAobmV3X2JvLT50aWxpbmdfbW9kZSkgeworCQlEUk1fRVJST1IoImJ1ZmZlciB1c2VkIGZvciBvdmVybGF5IGltYWdlIGNhbiBub3QgYmUgdGlsZWRcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCiAJcmV0ID0gaW50ZWxfb3ZlcmxheV9yZWNvdmVyX2Zyb21faW50ZXJydXB0KG92ZXJsYXksIHRydWUpOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTIxNyw3ICsxMjUzLDcgQEAKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChuZXdfYm8pOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZuZXdfYm8tPmJhc2UpOwogb3V0X2ZyZWU6CiAJa2ZyZWUocGFyYW1zKTsKIApAQCAtMTM3MCw3ICsxNDA2LDcgQEAKIHsKICAgICAgICAgZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGludGVsX292ZXJsYXkgKm92ZXJsYXk7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpyZWdfYm87CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnJlZ19ibzsKIAlzdHJ1Y3Qgb3ZlcmxheV9yZWdpc3RlcnMgKnJlZ3M7CiAJaW50IHJldDsKIApAQCAtMTM4NSw3ICsxNDIxLDcgQEAKIAlyZWdfYm8gPSBpOTE1X2dlbV9hbGxvY19vYmplY3QoZGV2LCBQQUdFX1NJWkUpOwogCWlmICghcmVnX2JvKQogCQlnb3RvIG91dF9mcmVlOwotCW92ZXJsYXktPnJlZ19ibyA9IHRvX2ludGVsX2JvKHJlZ19ibyk7CisJb3ZlcmxheS0+cmVnX2JvID0gcmVnX2JvOwogCiAJaWYgKE9WRVJMQVlfTkVFRFNfUEhZU0lDQUwoZGV2KSkgewogCQlyZXQgPSBpOTE1X2dlbV9hdHRhY2hfcGh5c19vYmplY3QoZGV2LCByZWdfYm8sCkBAIC0xMzk1LDE0ICsxNDMxLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBEUk1fRVJST1IoImZhaWxlZCB0byBhdHRhY2ggcGh5cyBvdmVybGF5IHJlZ3NcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfZnJlZV9ibzsKICAgICAgICAgICAgICAgICB9Ci0JCW92ZXJsYXktPmZsaXBfYWRkciA9IG92ZXJsYXktPnJlZ19iby0+cGh5c19vYmotPmhhbmRsZS0+YnVzYWRkcjsKKwkJb3ZlcmxheS0+ZmxpcF9hZGRyID0gcmVnX2JvLT5waHlzX29iai0+aGFuZGxlLT5idXNhZGRyOwogCX0gZWxzZSB7Ci0JCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ocmVnX2JvLCBQQUdFX1NJWkUpOworCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKHJlZ19ibywgUEFHRV9TSVpFLCB0cnVlKTsKIAkJaWYgKHJldCkgewogICAgICAgICAgICAgICAgICAgICAgICAgRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGluIG92ZXJsYXkgcmVnaXN0ZXIgYm9cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfZnJlZV9ibzsKICAgICAgICAgICAgICAgICB9Ci0JCW92ZXJsYXktPmZsaXBfYWRkciA9IG92ZXJsYXktPnJlZ19iby0+Z3R0X29mZnNldDsKKwkJb3ZlcmxheS0+ZmxpcF9hZGRyID0gcmVnX2JvLT5ndHRfb2Zmc2V0OwogCiAJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihyZWdfYm8sIHRydWUpOwogCQlpZiAocmV0KSB7CkBAIC0xNDM0LDcgKzE0NzAsNyBAQAogb3V0X3VucGluX2JvOgogCWk5MTVfZ2VtX29iamVjdF91bnBpbihyZWdfYm8pOwogb3V0X2ZyZWVfYm86Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UocmVnX2JvKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmcmVnX2JvLT5iYXNlKTsKIG91dF9mcmVlOgogCWtmcmVlKG92ZXJsYXkpOwogCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jCmluZGV4IDkyZmY4ZjMuLmUwMGQyMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYwpAQCAtMTI1LDE1ICsxMjUsNTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHUzMiBpOTE1X3JlYWRfYmxjX3B3bV9jdGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXUzMiB2YWw7CisKKwkvKiBSZXN0b3JlIHRoZSBDVEwgdmFsdWUgaWYgaXQgbG9zdCwgZS5nLiBHUFUgcmVzZXQgKi8KKworCWlmIChIQVNfUENIX1NQTElUKGRldl9wcml2LT5kZXYpKSB7CisJCXZhbCA9IEk5MTVfUkVBRChCTENfUFdNX1BDSF9DVEwyKTsKKwkJaWYgKGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwyID09IDApIHsKKwkJCWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwyID0gdmFsOworCQl9IGVsc2UgaWYgKHZhbCA9PSAwKSB7CisJCQlJOTE1X1dSSVRFKEJMQ19QV01fUENIX0NUTDIsCisJCQkJICAgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCk7CisJCQl2YWwgPSBkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMOworCQl9CisJfSBlbHNlIHsKKwkJdmFsID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKKwkJaWYgKGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgPT0gMCkgeworCQkJZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCA9IHZhbDsKKwkJCWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwyID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMMik7CisJCX0gZWxzZSBpZiAodmFsID09IDApIHsKKwkJCUk5MTVfV1JJVEUoQkxDX1BXTV9DVEwsCisJCQkJICAgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCk7CisJCQlJOTE1X1dSSVRFKEJMQ19QV01fQ1RMMiwKKwkJCQkgICBkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMik7CisJCQl2YWwgPSBkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMOworCQl9CisJfQorCisJcmV0dXJuIHZhbDsKK30KKwogdTMyIGludGVsX3BhbmVsX2dldF9tYXhfYmFja2xpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgbWF4OwogCisJbWF4ID0gaTkxNV9yZWFkX2JsY19wd21fY3RsKGRldl9wcml2KTsKKwlpZiAobWF4ID09IDApIHsKKwkJLyogWFhYIGFkZCBjb2RlIGhlcmUgdG8gcXVlcnkgbW9kZSBjbG9jayBvciBoYXJkd2FyZSBjbG9jaworCQkgKiBhbmQgcHJvZ3JhbSBtYXggUFdNIGFwcHJvcHJpYXRlbHkuCisJCSAqLworCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgImZpeG1lOiBtYXggUFdNIGlzIHplcm8uXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCiAJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewotCQltYXggPSBJOTE1X1JFQUQoQkxDX1BXTV9QQ0hfQ1RMMikgPj4gMTY7CisJCW1heCA+Pj0gMTY7CiAJfSBlbHNlIHsKLQkJbWF4ID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKIAkJaWYgKElTX1BJTkVWSUVXKGRldikpIHsKIAkJCW1heCA+Pj0gMTc7CiAJCX0gZWxzZSB7CkBAIC0xNDYsMTQgKzE4Niw2IEBACiAJCQltYXggKj0gMHhmZjsKIAl9CiAKLQlpZiAobWF4ID09IDApIHsKLQkJLyogWFhYIGFkZCBjb2RlIGhlcmUgdG8gcXVlcnkgbW9kZSBjbG9jayBvciBoYXJkd2FyZSBjbG9jawotCQkgKiBhbmQgcHJvZ3JhbSBtYXggUFdNIGFwcHJvcHJpYXRlbHkuCi0JCSAqLwotCQlEUk1fRVJST1IoImZpeG1lOiBtYXggUFdNIGlzIHplcm8uXG4iKTsKLQkJbWF4ID0gMTsKLQl9Ci0KIAlEUk1fREVCVUdfRFJJVkVSKCJtYXggYmFja2xpZ2h0IFBXTSA9ICVkXG4iLCBtYXgpOwogCXJldHVybiBtYXg7CiB9CkBAIC0yMTgsMyArMjUwLDM0IEBACiAJCXRtcCAmPSB+QkFDS0xJR0hUX0RVVFlfQ1lDTEVfTUFTSzsKIAlJOTE1X1dSSVRFKEJMQ19QV01fQ1RMLCB0bXAgfCBsZXZlbCk7CiB9CisKK3ZvaWQgaW50ZWxfcGFuZWxfZGlzYWJsZV9iYWNrbGlnaHQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9wcml2LT5iYWNrbGlnaHRfZW5hYmxlZCkgeworCQlkZXZfcHJpdi0+YmFja2xpZ2h0X2xldmVsID0gaW50ZWxfcGFuZWxfZ2V0X2JhY2tsaWdodChkZXYpOworCQlkZXZfcHJpdi0+YmFja2xpZ2h0X2VuYWJsZWQgPSBmYWxzZTsKKwl9CisKKwlpbnRlbF9wYW5lbF9zZXRfYmFja2xpZ2h0KGRldiwgMCk7Cit9CisKK3ZvaWQgaW50ZWxfcGFuZWxfZW5hYmxlX2JhY2tsaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoZGV2X3ByaXYtPmJhY2tsaWdodF9sZXZlbCA9PSAwKQorCQlkZXZfcHJpdi0+YmFja2xpZ2h0X2xldmVsID0gaW50ZWxfcGFuZWxfZ2V0X21heF9iYWNrbGlnaHQoZGV2KTsKKworCWludGVsX3BhbmVsX3NldF9iYWNrbGlnaHQoZGV2LCBkZXZfcHJpdi0+YmFja2xpZ2h0X2xldmVsKTsKKwlkZXZfcHJpdi0+YmFja2xpZ2h0X2VuYWJsZWQgPSB0cnVlOworfQorCit2b2lkIGludGVsX3BhbmVsX3NldHVwX2JhY2tsaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkZXZfcHJpdi0+YmFja2xpZ2h0X2xldmVsID0gaW50ZWxfcGFuZWxfZ2V0X21heF9iYWNrbGlnaHQoZGV2KTsKKwlkZXZfcHJpdi0+YmFja2xpZ2h0X2VuYWJsZWQgPSBkZXZfcHJpdi0+YmFja2xpZ2h0X2xldmVsICE9IDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKaW5kZXggMzFjZDdlMy4uMDNlMzM3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpAQCAtNDgsMTQgKzQ4LDE1IEBACiAJcmV0dXJuIHNlcW5vOwogfQogCi1zdGF0aWMgdm9pZAotcmVuZGVyX3JpbmdfZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCitzdGF0aWMgaW50CityZW5kZXJfcmluZ19mbHVzaChzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCiAJCSAgdTMyCWludmFsaWRhdGVfZG9tYWlucywKIAkJICB1MzIJZmx1c2hfZG9tYWlucykKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2OwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiBjbWQ7CisJaW50IHJldDsKIAogI2lmIFdBVENIX0VYRUMKIAlEUk1fSU5GTygiJXM6IGludmFsaWRhdGUgJTA4eCBmbHVzaCAlMDh4XG4iLCBfX2Z1bmNfXywKQEAgLTEwOSw0OSArMTEwLDU0IEBACiAJCWlmIChpbnZhbGlkYXRlX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04pCiAJCQljbWQgfD0gTUlfRVhFX0ZMVVNIOwogCisJCWlmIChpbnZhbGlkYXRlX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ09NTUFORCAmJgorCQkgICAgKElTX0c0WChkZXYpIHx8IElTX0dFTjUoZGV2KSkpCisJCQljbWQgfD0gTUlfSU5WQUxJREFURV9JU1A7CisKICNpZiBXQVRDSF9FWEVDCiAJCURSTV9JTkZPKCIlczogcXVldWUgZmx1c2ggJTA4eCB0byByaW5nXG4iLCBfX2Z1bmNfXywgY21kKTsKICNlbmRpZgotCQlpbnRlbF9yaW5nX2JlZ2luKGRldiwgcmluZywgMik7Ci0JCWludGVsX3JpbmdfZW1pdChkZXYsIHJpbmcsIGNtZCk7Ci0JCWludGVsX3JpbmdfZW1pdChkZXYsIHJpbmcsIE1JX05PT1ApOwotCQlpbnRlbF9yaW5nX2FkdmFuY2UoZGV2LCByaW5nKTsKKwkJcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCAyKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIGNtZCk7CisJCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKKwkJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwogCX0KKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCByaW5nX3dyaXRlX3RhaWwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCitzdGF0aWMgdm9pZCByaW5nX3dyaXRlX3RhaWwoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAogCQkJICAgIHUzMiB2YWx1ZSkKIHsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAlJOTE1X1dSSVRFX1RBSUwocmluZywgdmFsdWUpOwogfQogCi11MzIgaW50ZWxfcmluZ19nZXRfYWN0aXZlX2hlYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCit1MzIgaW50ZWxfcmluZ19nZXRfYWN0aXZlX2hlYWQoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQogewotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXUzMiBhY3RoZF9yZWcgPSBJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0ID8KKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgYWN0aGRfcmVnID0gSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5nZW4gPj0gNCA/CiAJCQlSSU5HX0FDVEhEKHJpbmctPm1taW9fYmFzZSkgOiBBQ1RIRDsKIAogCXJldHVybiBJOTE1X1JFQUQoYWN0aGRfcmVnKTsKIH0KIAotc3RhdGljIGludCBpbml0X3JpbmdfY29tbW9uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQorc3RhdGljIGludCBpbml0X3JpbmdfY29tbW9uKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKIHsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gcmluZy0+b2JqOwogCXUzMiBoZWFkOwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKLQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKHJpbmctPmdlbV9vYmplY3QpOwogCiAJLyogU3RvcCB0aGUgcmluZyBpZiBpdCdzIHJ1bm5pbmcuICovCiAJSTkxNV9XUklURV9DVEwocmluZywgMCk7CiAJSTkxNV9XUklURV9IRUFEKHJpbmcsIDApOwotCXJpbmctPndyaXRlX3RhaWwoZGV2LCByaW5nLCAwKTsKKwlyaW5nLT53cml0ZV90YWlsKHJpbmcsIDApOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgcmluZy4gKi8KLQlJOTE1X1dSSVRFX1NUQVJUKHJpbmcsIG9ial9wcml2LT5ndHRfb2Zmc2V0KTsKKwlJOTE1X1dSSVRFX1NUQVJUKHJpbmcsIG9iai0+Z3R0X29mZnNldCk7CiAJaGVhZCA9IEk5MTVfUkVBRF9IRUFEKHJpbmcpICYgSEVBRF9BRERSOwogCiAJLyogRzQ1IHJpbmcgaW5pdGlhbGl6YXRpb24gZmFpbHMgdG8gcmVzZXQgaGVhZCB0byB6ZXJvICovCkBAIC0xNzgsMTIgKzE4NCwxMyBAQAogCX0KIAogCUk5MTVfV1JJVEVfQ1RMKHJpbmcsCi0JCQkoKHJpbmctPmdlbV9vYmplY3QtPnNpemUgLSBQQUdFX1NJWkUpICYgUklOR19OUl9QQUdFUykKKwkJCSgocmluZy0+c2l6ZSAtIFBBR0VfU0laRSkgJiBSSU5HX05SX1BBR0VTKQogCQkJfCBSSU5HX1JFUE9SVF82NEsgfCBSSU5HX1ZBTElEKTsKIAotCWhlYWQgPSBJOTE1X1JFQURfSEVBRChyaW5nKSAmIEhFQURfQUREUjsKIAkvKiBJZiB0aGUgaGVhZCBpcyBzdGlsbCBub3QgemVybywgdGhlIHJpbmcgaXMgZGVhZCAqLwotCWlmIChoZWFkICE9IDApIHsKKwlpZiAoKEk5MTVfUkVBRF9DVEwocmluZykgJiBSSU5HX1ZBTElEKSA9PSAwIHx8CisJICAgIEk5MTVfUkVBRF9TVEFSVChyaW5nKSAhPSBvYmotPmd0dF9vZmZzZXQgfHwKKwkgICAgKEk5MTVfUkVBRF9IRUFEKHJpbmcpICYgSEVBRF9BRERSKSAhPSAwKSB7CiAJCURSTV9FUlJPUigiJXMgaW5pdGlhbGl6YXRpb24gZmFpbGVkICIKIAkJCQkiY3RsICUwOHggaGVhZCAlMDh4IHRhaWwgJTA4eCBzdGFydCAlMDh4XG4iLAogCQkJCXJpbmctPm5hbWUsCkBAIC0xOTQsOCArMjAxLDggQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQotCQlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUocmluZy0+ZGV2LCBEUklWRVJfTU9ERVNFVCkpCisJCWk5MTVfa2VybmVsX2xvc3RfY29udGV4dChyaW5nLT5kZXYpOwogCWVsc2UgewogCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEX0hFQUQocmluZykgJiBIRUFEX0FERFI7CiAJCXJpbmctPnRhaWwgPSBJOTE1X1JFQURfVEFJTChyaW5nKSAmIFRBSUxfQUREUjsKQEAgLTIwMywzMzUgKzIxMCw1NjIgQEAKIAkJaWYgKHJpbmctPnNwYWNlIDwgMCkKIAkJCXJpbmctPnNwYWNlICs9IHJpbmctPnNpemU7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW5pdF9yZW5kZXJfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKKy8qCisgKiA5NjUrIHN1cHBvcnQgUElQRV9DT05UUk9MIGNvbW1hbmRzLCB3aGljaCBwcm92aWRlIGZpbmVyIGdyYWluZWQgY29udHJvbAorICogb3ZlciBjYWNoZSBmbHVzaGluZy4KKyAqLworc3RydWN0IHBpcGVfY29udHJvbCB7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwl2b2xhdGlsZSB1MzIgKmNwdV9wYWdlOworCXUzMiBndHRfb2Zmc2V0OworfTsKKworc3RhdGljIGludAoraW5pdF9waXBlX2NvbnRyb2woc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQogewotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCByZXQgPSBpbml0X3JpbmdfY29tbW9uKGRldiwgcmluZyk7Ci0JaW50IG1vZGU7CisJc3RydWN0IHBpcGVfY29udHJvbCAqcGM7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJaWYgKHJpbmctPnByaXZhdGUpCisJCXJldHVybiAwOworCisJcGMgPSBrbWFsbG9jKHNpemVvZigqcGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW9iaiA9IGk5MTVfZ2VtX2FsbG9jX29iamVjdChyaW5nLT5kZXYsIDQwOTYpOworCWlmIChvYmogPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBzZXFubyBwYWdlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCW9iai0+YWdwX3R5cGUgPSBBR1BfVVNFUl9DQUNIRURfTUVNT1JZOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosIDQwOTYsIHRydWUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3VucmVmOworCisJcGMtPmd0dF9vZmZzZXQgPSBvYmotPmd0dF9vZmZzZXQ7CisJcGMtPmNwdV9wYWdlID0gIGttYXAob2JqLT5wYWdlc1swXSk7CisJaWYgKHBjLT5jcHVfcGFnZSA9PSBOVUxMKQorCQlnb3RvIGVycl91bnBpbjsKKworCXBjLT5vYmogPSBvYmo7CisJcmluZy0+cHJpdmF0ZSA9IHBjOworCXJldHVybiAwOworCitlcnJfdW5waW46CisJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CitlcnJfdW5yZWY6CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CitlcnI6CisJa2ZyZWUocGMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhbnVwX3BpcGVfY29udHJvbChzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCit7CisJc3RydWN0IHBpcGVfY29udHJvbCAqcGMgPSByaW5nLT5wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisKKwlpZiAoIXJpbmctPnByaXZhdGUpCisJCXJldHVybjsKKworCW9iaiA9IHBjLT5vYmo7CisJa3VubWFwKG9iai0+cGFnZXNbMF0pOworCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOworCisJa2ZyZWUocGMpOworCXJpbmctPnByaXZhdGUgPSBOVUxMOworfQorCitzdGF0aWMgaW50IGluaXRfcmVuZGVyX3Jpbmcoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0ID0gaW5pdF9yaW5nX2NvbW1vbihyaW5nKTsKIAogCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+IDMpIHsKLQkJbW9kZSA9IFZTX1RJTUVSX0RJU1BBVENIIDw8IDE2IHwgVlNfVElNRVJfRElTUEFUQ0g7CisJCWludCBtb2RlID0gVlNfVElNRVJfRElTUEFUQ0ggPDwgMTYgfCBWU19USU1FUl9ESVNQQVRDSDsKIAkJaWYgKElTX0dFTjYoZGV2KSkKIAkJCW1vZGUgfD0gTUlfRkxVU0hfRU5BQkxFIDw8IDE2IHwgTUlfRkxVU0hfRU5BQkxFOwogCQlJOTE1X1dSSVRFKE1JX01PREUsIG1vZGUpOwogCX0KKworCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA2KSB7CisJfSBlbHNlIGlmIChJU19HRU41KGRldikpIHsKKwkJcmV0ID0gaW5pdF9waXBlX2NvbnRyb2wocmluZyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwogCXJldHVybiByZXQ7CiB9CiAKLSNkZWZpbmUgUElQRV9DT05UUk9MX0ZMVVNIKGFkZHIpCQkJCQlcCitzdGF0aWMgdm9pZCByZW5kZXJfcmluZ19jbGVhbnVwKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKK3sKKwlpZiAoIXJpbmctPnByaXZhdGUpCisJCXJldHVybjsKKworCWNsZWFudXBfcGlwZV9jb250cm9sKHJpbmcpOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlX3NlbWFwaG9yZShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsIGludCBpLCB1MzIgc2Vxbm8pCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpZDsKKworCS8qCisJICogY3MgLT4gMSA9IHZjcywgMCA9IGJjcworCSAqIHZjcyAtPiAxID0gYmNzLCAwID0gY3MsCisJICogYmNzIC0+IDEgPSBjcywgMCA9IHZjcy4KKwkgKi8KKwlpZCA9IHJpbmcgLSBkZXZfcHJpdi0+cmluZzsKKwlpZCArPSAyIC0gaTsKKwlpZCAlPSAzOworCisJaW50ZWxfcmluZ19lbWl0KHJpbmcsCisJCQlNSV9TRU1BUEhPUkVfTUJPWCB8CisJCQlNSV9TRU1BUEhPUkVfUkVHSVNURVIgfAorCQkJTUlfU0VNQVBIT1JFX1VQREFURSk7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIHNlcW5vKTsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywKKwkJCVJJTkdfU1lOQ18wKGRldl9wcml2LT5yaW5nW2lkXS5tbWlvX2Jhc2UpICsgNCppKTsKK30KKworc3RhdGljIGludAorZ2VuNl9hZGRfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCisJCSB1MzIgKnJlc3VsdCkKK3sKKwl1MzIgc2Vxbm87CisJaW50IHJldDsKKworCXJldCA9IGludGVsX3JpbmdfYmVnaW4ocmluZywgMTApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzZXFubyA9IGk5MTVfZ2VtX2dldF9zZXFubyhyaW5nLT5kZXYpOworCXVwZGF0ZV9zZW1hcGhvcmUocmluZywgMCwgc2Vxbm8pOworCXVwZGF0ZV9zZW1hcGhvcmUocmluZywgMSwgc2Vxbm8pOworCisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX1NUT1JFX0RXT1JEX0lOREVYKTsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgSTkxNV9HRU1fSFdTX0lOREVYIDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgc2Vxbm8pOworCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9VU0VSX0lOVEVSUlVQVCk7CisJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOworCisJKnJlc3VsdCA9IHNlcW5vOworCXJldHVybiAwOworfQorCitpbnQKK2ludGVsX3Jpbmdfc3luYyhzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCisJCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqdG8sCisJCXUzMiBzZXFubykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCA0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaW50ZWxfcmluZ19lbWl0KHJpbmcsCisJCQlNSV9TRU1BUEhPUkVfTUJPWCB8CisJCQlNSV9TRU1BUEhPUkVfUkVHSVNURVIgfAorCQkJaW50ZWxfcmluZ19zeW5jX2luZGV4KHJpbmcsIHRvKSA8PCAxNyB8CisJCQlNSV9TRU1BUEhPUkVfQ09NUEFSRSk7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIHNlcW5vKTsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOworCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFBJUEVfQ09OVFJPTF9GTFVTSChyaW5nX18sIGFkZHJfXykJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCi0JT1VUX1JJTkcoR0ZYX09QX1BJUEVfQ09OVFJPTCB8IFBJUEVfQ09OVFJPTF9RV19XUklURSB8CQlcCisJaW50ZWxfcmluZ19lbWl0KHJpbmdfXywgR0ZYX09QX1BJUEVfQ09OVFJPTCB8IFBJUEVfQ09OVFJPTF9RV19XUklURSB8CQlcCiAJCSBQSVBFX0NPTlRST0xfREVQVEhfU1RBTEwgfCAyKTsJCQkJXAotCU9VVF9SSU5HKGFkZHIgfCBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVCk7CQkJXAotCU9VVF9SSU5HKDApOwkJCQkJCQlcCi0JT1VUX1JJTkcoMCk7CQkJCQkJCVwKKwlpbnRlbF9yaW5nX2VtaXQocmluZ19fLCAoYWRkcl9fKSB8IFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUKTsJCQlcCisJaW50ZWxfcmluZ19lbWl0KHJpbmdfXywgMCk7CQkJCQkJCVwKKwlpbnRlbF9yaW5nX2VtaXQocmluZ19fLCAwKTsJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAotLyoqCi0gKiBDcmVhdGVzIGEgbmV3IHNlcXVlbmNlIG51bWJlciwgZW1pdHRpbmcgYSB3cml0ZSBvZiBpdCB0byB0aGUgc3RhdHVzIHBhZ2UKLSAqIHBsdXMgYW4gaW50ZXJydXB0LCB3aGljaCB3aWxsIHRyaWdnZXIgaTkxNV91c2VyX2ludGVycnVwdF9oYW5kbGVyLgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggc3RydWN0X2xvY2sgaGVsZC4KLSAqCi0gKiBSZXR1cm5lZCBzZXF1ZW5jZSBudW1iZXJzIGFyZSBub256ZXJvIG9uIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyB1MzIKLXJlbmRlcl9yaW5nX2FkZF9yZXF1ZXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCi0JCQl1MzIgZmx1c2hfZG9tYWlucykKK3N0YXRpYyBpbnQKK3BjX3JlbmRlcl9hZGRfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCisJCSAgICAgIHUzMiAqcmVzdWx0KQogewotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXUzMiBzZXFubzsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2OworCXUzMiBzZXFubyA9IGk5MTVfZ2VtX2dldF9zZXFubyhkZXYpOworCXN0cnVjdCBwaXBlX2NvbnRyb2wgKnBjID0gcmluZy0+cHJpdmF0ZTsKKwl1MzIgc2NyYXRjaF9hZGRyID0gcGMtPmd0dF9vZmZzZXQgKyAxMjg7CisJaW50IHJldDsKIAotCXNlcW5vID0gaTkxNV9nZW1fZ2V0X3NlcW5vKGRldik7CisJLyogRm9yIElyb25sYWtlLCBNSV9VU0VSX0lOVEVSUlVQVCB3YXMgZGVwcmVjYXRlZCBhbmQgYXBwYXJlbnRseQorCSAqIGluY29oZXJlbnQgd2l0aCB3cml0ZXMgdG8gbWVtb3J5LCBpLmUuIGNvbXBsZXRlbHkgZnViYXIsCisJICogc28gd2UgbmVlZCB0byB1c2UgUElQRV9OT1RJRlkgaW5zdGVhZC4KKwkgKgorCSAqIEhvd2V2ZXIsIHdlIGFsc28gbmVlZCB0byB3b3JrYXJvdW5kIHRoZSBxd29yZCB3cml0ZQorCSAqIGluY29oZXJlbmNlIGJ5IGZsdXNoaW5nIHRoZSA2IFBJUEVfTk9USUZZIGJ1ZmZlcnMgb3V0IHRvCisJICogbWVtb3J5IGJlZm9yZSByZXF1ZXN0aW5nIGFuIGludGVycnVwdC4KKwkgKi8KKwlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDMyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0JaWYgKElTX0dFTjYoZGV2KSkgewotCQlCRUdJTl9MUF9SSU5HKDYpOwotCQlPVVRfUklORyhHRlhfT1BfUElQRV9DT05UUk9MIHwgMyk7Ci0JCU9VVF9SSU5HKFBJUEVfQ09OVFJPTF9RV19XUklURSB8Ci0JCQkgUElQRV9DT05UUk9MX1dDX0ZMVVNIIHwgUElQRV9DT05UUk9MX0lTX0ZMVVNIIHwKLQkJCSBQSVBFX0NPTlRST0xfTk9USUZZKTsKLQkJT1VUX1JJTkcoZGV2X3ByaXYtPnNlcW5vX2dmeF9hZGRyIHwgUElQRV9DT05UUk9MX0dMT0JBTF9HVFQpOwotCQlPVVRfUklORyhzZXFubyk7Ci0JCU9VVF9SSU5HKDApOwotCQlPVVRfUklORygwKTsKLQkJQURWQU5DRV9MUF9SSU5HKCk7Ci0JfSBlbHNlIGlmIChIQVNfUElQRV9DT05UUk9MKGRldikpIHsKLQkJdTMyIHNjcmF0Y2hfYWRkciA9IGRldl9wcml2LT5zZXFub19nZnhfYWRkciArIDEyODsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgR0ZYX09QX1BJUEVfQ09OVFJPTCB8IFBJUEVfQ09OVFJPTF9RV19XUklURSB8CisJCQlQSVBFX0NPTlRST0xfV0NfRkxVU0ggfCBQSVBFX0NPTlRST0xfVENfRkxVU0gpOworCWludGVsX3JpbmdfZW1pdChyaW5nLCBwYy0+Z3R0X29mZnNldCB8IFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUKTsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgc2Vxbm8pOworCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKKwlQSVBFX0NPTlRST0xfRkxVU0gocmluZywgc2NyYXRjaF9hZGRyKTsKKwlzY3JhdGNoX2FkZHIgKz0gMTI4OyAvKiB3cml0ZSB0byBzZXBhcmF0ZSBjYWNoZWxpbmVzICovCisJUElQRV9DT05UUk9MX0ZMVVNIKHJpbmcsIHNjcmF0Y2hfYWRkcik7CisJc2NyYXRjaF9hZGRyICs9IDEyODsKKwlQSVBFX0NPTlRST0xfRkxVU0gocmluZywgc2NyYXRjaF9hZGRyKTsKKwlzY3JhdGNoX2FkZHIgKz0gMTI4OworCVBJUEVfQ09OVFJPTF9GTFVTSChyaW5nLCBzY3JhdGNoX2FkZHIpOworCXNjcmF0Y2hfYWRkciArPSAxMjg7CisJUElQRV9DT05UUk9MX0ZMVVNIKHJpbmcsIHNjcmF0Y2hfYWRkcik7CisJc2NyYXRjaF9hZGRyICs9IDEyODsKKwlQSVBFX0NPTlRST0xfRkxVU0gocmluZywgc2NyYXRjaF9hZGRyKTsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgR0ZYX09QX1BJUEVfQ09OVFJPTCB8IFBJUEVfQ09OVFJPTF9RV19XUklURSB8CisJCQlQSVBFX0NPTlRST0xfV0NfRkxVU0ggfCBQSVBFX0NPTlRST0xfVENfRkxVU0ggfAorCQkJUElQRV9DT05UUk9MX05PVElGWSk7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIHBjLT5ndHRfb2Zmc2V0IHwgUElQRV9DT05UUk9MX0dMT0JBTF9HVFQpOworCWludGVsX3JpbmdfZW1pdChyaW5nLCBzZXFubyk7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOworCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKIAotCQkvKgotCQkgKiBXb3JrYXJvdW5kIHF3b3JkIHdyaXRlIGluY29oZXJlbmNlIGJ5IGZsdXNoaW5nIHRoZQotCQkgKiBQSVBFX05PVElGWSBidWZmZXJzIG91dCB0byBtZW1vcnkgYmVmb3JlIHJlcXVlc3RpbmcKLQkJICogYW4gaW50ZXJydXB0LgotCQkgKi8KLQkJQkVHSU5fTFBfUklORygzMik7Ci0JCU9VVF9SSU5HKEdGWF9PUF9QSVBFX0NPTlRST0wgfCBQSVBFX0NPTlRST0xfUVdfV1JJVEUgfAotCQkJIFBJUEVfQ09OVFJPTF9XQ19GTFVTSCB8IFBJUEVfQ09OVFJPTF9UQ19GTFVTSCk7Ci0JCU9VVF9SSU5HKGRldl9wcml2LT5zZXFub19nZnhfYWRkciB8IFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUKTsKLQkJT1VUX1JJTkcoc2Vxbm8pOwotCQlPVVRfUklORygwKTsKLQkJUElQRV9DT05UUk9MX0ZMVVNIKHNjcmF0Y2hfYWRkcik7Ci0JCXNjcmF0Y2hfYWRkciArPSAxMjg7IC8qIHdyaXRlIHRvIHNlcGFyYXRlIGNhY2hlbGluZXMgKi8KLQkJUElQRV9DT05UUk9MX0ZMVVNIKHNjcmF0Y2hfYWRkcik7Ci0JCXNjcmF0Y2hfYWRkciArPSAxMjg7Ci0JCVBJUEVfQ09OVFJPTF9GTFVTSChzY3JhdGNoX2FkZHIpOwotCQlzY3JhdGNoX2FkZHIgKz0gMTI4OwotCQlQSVBFX0NPTlRST0xfRkxVU0goc2NyYXRjaF9hZGRyKTsKLQkJc2NyYXRjaF9hZGRyICs9IDEyODsKLQkJUElQRV9DT05UUk9MX0ZMVVNIKHNjcmF0Y2hfYWRkcik7Ci0JCXNjcmF0Y2hfYWRkciArPSAxMjg7Ci0JCVBJUEVfQ09OVFJPTF9GTFVTSChzY3JhdGNoX2FkZHIpOwotCQlPVVRfUklORyhHRlhfT1BfUElQRV9DT05UUk9MIHwgUElQRV9DT05UUk9MX1FXX1dSSVRFIHwKLQkJCSBQSVBFX0NPTlRST0xfV0NfRkxVU0ggfCBQSVBFX0NPTlRST0xfVENfRkxVU0ggfAotCQkJIFBJUEVfQ09OVFJPTF9OT1RJRlkpOwotCQlPVVRfUklORyhkZXZfcHJpdi0+c2Vxbm9fZ2Z4X2FkZHIgfCBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVCk7Ci0JCU9VVF9SSU5HKHNlcW5vKTsKLQkJT1VUX1JJTkcoMCk7Ci0JCUFEVkFOQ0VfTFBfUklORygpOwotCX0gZWxzZSB7Ci0JCUJFR0lOX0xQX1JJTkcoNCk7Ci0JCU9VVF9SSU5HKE1JX1NUT1JFX0RXT1JEX0lOREVYKTsKLQkJT1VUX1JJTkcoSTkxNV9HRU1fSFdTX0lOREVYIDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKLQkJT1VUX1JJTkcoc2Vxbm8pOworCSpyZXN1bHQgPSBzZXFubzsKKwlyZXR1cm4gMDsKK30KIAotCQlPVVRfUklORyhNSV9VU0VSX0lOVEVSUlVQVCk7Ci0JCUFEVkFOQ0VfTFBfUklORygpOwotCX0KLQlyZXR1cm4gc2Vxbm87CitzdGF0aWMgaW50CityZW5kZXJfcmluZ19hZGRfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCisJCQl1MzIgKnJlc3VsdCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2OworCXUzMiBzZXFubyA9IGk5MTVfZ2VtX2dldF9zZXFubyhkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfU1RPUkVfRFdPUkRfSU5ERVgpOworCWludGVsX3JpbmdfZW1pdChyaW5nLCBJOTE1X0dFTV9IV1NfSU5ERVggPDwgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQpOworCWludGVsX3JpbmdfZW1pdChyaW5nLCBzZXFubyk7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX1VTRVJfSU5URVJSVVBUKTsKKwlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7CisKKwkqcmVzdWx0ID0gc2Vxbm87CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1MzIKLXJlbmRlcl9yaW5nX2dldF9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkgICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKLQlpZiAoSEFTX1BJUEVfQ09OVFJPTChkZXYpKQotCQlyZXR1cm4gKCh2b2xhdGlsZSB1MzIgKikoZGV2X3ByaXYtPnNlcW5vX3BhZ2UpKVswXTsKLQllbHNlCi0JCXJldHVybiBpbnRlbF9yZWFkX3N0YXR1c19wYWdlKHJpbmcsIEk5MTVfR0VNX0hXU19JTkRFWCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZW5kZXJfcmluZ19nZXRfdXNlcl9pcnEoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7Ci0JaWYgKGRldi0+aXJxX2VuYWJsZWQgJiYgKCsrcmluZy0+dXNlcl9pcnFfcmVmY291bnQgPT0gMSkpIHsKLQkJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKLQkJCWlyb25sYWtlX2VuYWJsZV9ncmFwaGljc19pcnEoZGV2X3ByaXYsIEdUX1BJUEVfTk9USUZZKTsKLQkJZWxzZQotCQkJaTkxNV9lbmFibGVfaXJxKGRldl9wcml2LCBJOTE1X1VTRVJfSU5URVJSVVBUKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2ssIGlycWZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLXJlbmRlcl9yaW5nX3B1dF91c2VyX2lycShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2ssIGlycWZsYWdzKTsKLQlCVUdfT04oZGV2LT5pcnFfZW5hYmxlZCAmJiByaW5nLT51c2VyX2lycV9yZWZjb3VudCA8PSAwKTsKLQlpZiAoZGV2LT5pcnFfZW5hYmxlZCAmJiAoLS1yaW5nLT51c2VyX2lycV9yZWZjb3VudCA9PSAwKSkgewotCQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQotCQkJaXJvbmxha2VfZGlzYWJsZV9ncmFwaGljc19pcnEoZGV2X3ByaXYsIEdUX1BJUEVfTk9USUZZKTsKLQkJZWxzZQotCQkJaTkxNV9kaXNhYmxlX2lycShkZXZfcHJpdiwgSTkxNV9VU0VSX0lOVEVSUlVQVCk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7Ci19Ci0KLXZvaWQgaW50ZWxfcmluZ19zZXR1cF9zdGF0dXNfcGFnZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQotewotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWlmIChJU19HRU42KGRldikpIHsKLQkJSTkxNV9XUklURShSSU5HX0hXU19QR0FfR0VONihyaW5nLT5tbWlvX2Jhc2UpLAotCQkJICAgcmluZy0+c3RhdHVzX3BhZ2UuZ2Z4X2FkZHIpOwotCQlJOTE1X1JFQUQoUklOR19IV1NfUEdBX0dFTjYocmluZy0+bW1pb19iYXNlKSk7IC8qIHBvc3RpbmcgcmVhZCAqLwotCX0gZWxzZSB7Ci0JCUk5MTVfV1JJVEUoUklOR19IV1NfUEdBKHJpbmctPm1taW9fYmFzZSksCi0JCQkgICByaW5nLT5zdGF0dXNfcGFnZS5nZnhfYWRkcik7Ci0JCUk5MTVfUkVBRChSSU5HX0hXU19QR0EocmluZy0+bW1pb19iYXNlKSk7IC8qIHBvc3RpbmcgcmVhZCAqLwotCX0KLQotfQotCi1zdGF0aWMgdm9pZAotYnNkX3JpbmdfZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAotCQl1MzIgICAgIGludmFsaWRhdGVfZG9tYWlucywKLQkJdTMyICAgICBmbHVzaF9kb21haW5zKQotewotCWludGVsX3JpbmdfYmVnaW4oZGV2LCByaW5nLCAyKTsKLQlpbnRlbF9yaW5nX2VtaXQoZGV2LCByaW5nLCBNSV9GTFVTSCk7Ci0JaW50ZWxfcmluZ19lbWl0KGRldiwgcmluZywgTUlfTk9PUCk7Ci0JaW50ZWxfcmluZ19hZHZhbmNlKGRldiwgcmluZyk7Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdF9ic2RfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlyZXR1cm4gaW5pdF9yaW5nX2NvbW1vbihkZXYsIHJpbmcpOwotfQotCi1zdGF0aWMgdTMyCi1yaW5nX2FkZF9yZXF1ZXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCSBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCi0JCSB1MzIgZmx1c2hfZG9tYWlucykKLXsKLQl1MzIgc2Vxbm87Ci0KLQlzZXFubyA9IGk5MTVfZ2VtX2dldF9zZXFubyhkZXYpOwotCi0JaW50ZWxfcmluZ19iZWdpbihkZXYsIHJpbmcsIDQpOwotCWludGVsX3JpbmdfZW1pdChkZXYsIHJpbmcsIE1JX1NUT1JFX0RXT1JEX0lOREVYKTsKLQlpbnRlbF9yaW5nX2VtaXQoZGV2LCByaW5nLAotCQkJSTkxNV9HRU1fSFdTX0lOREVYIDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKLQlpbnRlbF9yaW5nX2VtaXQoZGV2LCByaW5nLCBzZXFubyk7Ci0JaW50ZWxfcmluZ19lbWl0KGRldiwgcmluZywgTUlfVVNFUl9JTlRFUlJVUFQpOwotCWludGVsX3JpbmdfYWR2YW5jZShkZXYsIHJpbmcpOwotCi0JRFJNX0RFQlVHX0RSSVZFUigiJXMgJWRcbiIsIHJpbmctPm5hbWUsIHNlcW5vKTsKLQotCXJldHVybiBzZXFubzsKLX0KLQotc3RhdGljIHZvaWQKLWJzZF9yaW5nX2dldF91c2VyX2lycShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkgICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JLyogZG8gbm90aGluZyAqLwotfQotc3RhdGljIHZvaWQKLWJzZF9yaW5nX3B1dF91c2VyX2lycShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkgICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JLyogZG8gbm90aGluZyAqLwotfQotCi1zdGF0aWMgdTMyCi1yaW5nX3N0YXR1c19wYWdlX2dldF9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQorcmluZ19nZXRfc2Vxbm8oc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQogewogCXJldHVybiBpbnRlbF9yZWFkX3N0YXR1c19wYWdlKHJpbmcsIEk5MTVfR0VNX0hXU19JTkRFWCk7CiB9CiAKLXN0YXRpYyBpbnQKLXJpbmdfZGlzcGF0Y2hfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAotCQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjLAotCQkJICAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHJlY3RzLAotCQkJICAgICB1aW50NjRfdCBleGVjX29mZnNldCkKK3N0YXRpYyB1MzIKK3BjX3JlbmRlcl9nZXRfc2Vxbm8oc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQogewotCXVpbnQzMl90IGV4ZWNfc3RhcnQ7Ci0JZXhlY19zdGFydCA9ICh1aW50MzJfdCkgZXhlY19vZmZzZXQgKyBleGVjLT5iYXRjaF9zdGFydF9vZmZzZXQ7Ci0JaW50ZWxfcmluZ19iZWdpbihkZXYsIHJpbmcsIDIpOwotCWludGVsX3JpbmdfZW1pdChkZXYsIHJpbmcsIE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8Ci0JCQkoMiA8PCA2KSB8IE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSk7Ci0JaW50ZWxfcmluZ19lbWl0KGRldiwgcmluZywgZXhlY19zdGFydCk7Ci0JaW50ZWxfcmluZ19hZHZhbmNlKGRldiwgcmluZyk7CisJc3RydWN0IHBpcGVfY29udHJvbCAqcGMgPSByaW5nLT5wcml2YXRlOworCXJldHVybiBwYy0+Y3B1X3BhZ2VbMF07Cit9CisKK3N0YXRpYyB2b2lkCitpcm9ubGFrZV9lbmFibGVfaXJxKGRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBtYXNrKQoreworCWRldl9wcml2LT5ndF9pcnFfbWFzayAmPSB+bWFzazsKKwlJOTE1X1dSSVRFKEdUSU1SLCBkZXZfcHJpdi0+Z3RfaXJxX21hc2spOworCVBPU1RJTkdfUkVBRChHVElNUik7Cit9CisKK3N0YXRpYyB2b2lkCitpcm9ubGFrZV9kaXNhYmxlX2lycShkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgbWFzaykKK3sKKwlkZXZfcHJpdi0+Z3RfaXJxX21hc2sgfD0gbWFzazsKKwlJOTE1X1dSSVRFKEdUSU1SLCBkZXZfcHJpdi0+Z3RfaXJxX21hc2spOworCVBPU1RJTkdfUkVBRChHVElNUik7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2VuYWJsZV9pcnEoZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIG1hc2spCit7CisJZGV2X3ByaXYtPmlycV9tYXNrICY9IH5tYXNrOworCUk5MTVfV1JJVEUoSU1SLCBkZXZfcHJpdi0+aXJxX21hc2spOworCVBPU1RJTkdfUkVBRChJTVIpOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9kaXNhYmxlX2lycShkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgbWFzaykKK3sKKwlkZXZfcHJpdi0+aXJxX21hc2sgfD0gbWFzazsKKwlJOTE1X1dSSVRFKElNUiwgZGV2X3ByaXYtPmlycV9tYXNrKTsKKwlQT1NUSU5HX1JFQUQoSU1SKTsKK30KKworc3RhdGljIGJvb2wKK3JlbmRlcl9yaW5nX2dldF9pcnEoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoIWRldi0+aXJxX2VuYWJsZWQpCisJCXJldHVybiBmYWxzZTsKKworCXNwaW5fbG9jaygmcmluZy0+aXJxX2xvY2spOworCWlmIChyaW5nLT5pcnFfcmVmY291bnQrKyA9PSAwKSB7CisJCWlmIChIQVNfUENIX1NQTElUKGRldikpCisJCQlpcm9ubGFrZV9lbmFibGVfaXJxKGRldl9wcml2LAorCQkJCQkgICAgR1RfUElQRV9OT1RJRlkgfCBHVF9VU0VSX0lOVEVSUlVQVCk7CisJCWVsc2UKKwkJCWk5MTVfZW5hYmxlX2lycShkZXZfcHJpdiwgSTkxNV9VU0VSX0lOVEVSUlVQVCk7CisJfQorCXNwaW5fdW5sb2NrKCZyaW5nLT5pcnFfbG9jayk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQKK3JlbmRlcl9yaW5nX3B1dF9pcnEoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzcGluX2xvY2soJnJpbmctPmlycV9sb2NrKTsKKwlpZiAoLS1yaW5nLT5pcnFfcmVmY291bnQgPT0gMCkgeworCQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQorCQkJaXJvbmxha2VfZGlzYWJsZV9pcnEoZGV2X3ByaXYsCisJCQkJCSAgICAgR1RfVVNFUl9JTlRFUlJVUFQgfAorCQkJCQkgICAgIEdUX1BJUEVfTk9USUZZKTsKKwkJZWxzZQorCQkJaTkxNV9kaXNhYmxlX2lycShkZXZfcHJpdiwgSTkxNV9VU0VSX0lOVEVSUlVQVCk7CisJfQorCXNwaW5fdW5sb2NrKCZyaW5nLT5pcnFfbG9jayk7Cit9CisKK3ZvaWQgaW50ZWxfcmluZ19zZXR1cF9zdGF0dXNfcGFnZShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIG1taW8gPSBJU19HRU42KHJpbmctPmRldikgPworCQlSSU5HX0hXU19QR0FfR0VONihyaW5nLT5tbWlvX2Jhc2UpIDoKKwkJUklOR19IV1NfUEdBKHJpbmctPm1taW9fYmFzZSk7CisJSTkxNV9XUklURShtbWlvLCAodTMyKXJpbmctPnN0YXR1c19wYWdlLmdmeF9hZGRyKTsKKwlQT1NUSU5HX1JFQUQobW1pbyk7Cit9CisKK3N0YXRpYyBpbnQKK2JzZF9yaW5nX2ZsdXNoKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKKwkgICAgICAgdTMyICAgICBpbnZhbGlkYXRlX2RvbWFpbnMsCisJICAgICAgIHUzMiAgICAgZmx1c2hfZG9tYWlucykKK3sKKwlpbnQgcmV0OworCisJaWYgKChmbHVzaF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUikgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfRkxVU0gpOworCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKKwlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLXJlbmRlcl9yaW5nX2Rpc3BhdGNoX2dlbV9leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKLQkJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZXhlYywKLQkJCQkgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cywKLQkJCQkgICAgdWludDY0X3QgZXhlY19vZmZzZXQpCityaW5nX2FkZF9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKKwkJIHUzMiAqcmVzdWx0KQogeworCXUzMiBzZXFubzsKKwlpbnQgcmV0OworCisJcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCA0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc2Vxbm8gPSBpOTE1X2dlbV9nZXRfc2Vxbm8ocmluZy0+ZGV2KTsKKworCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9TVE9SRV9EV09SRF9JTkRFWCk7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIEk5MTVfR0VNX0hXU19JTkRFWCA8PCBNSV9TVE9SRV9EV09SRF9JTkRFWF9TSElGVCk7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIHNlcW5vKTsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfVVNFUl9JTlRFUlJVUFQpOworCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzICVkXG4iLCByaW5nLT5uYW1lLCBzZXFubyk7CisJKnJlc3VsdCA9IHNlcW5vOworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbAorcmluZ19nZXRfaXJxKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywgdTMyIGZsYWcpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgbmJveCA9IGV4ZWMtPm51bV9jbGlwcmVjdHM7Ci0JaW50IGkgPSAwLCBjb3VudDsKLQl1aW50MzJfdCBleGVjX3N0YXJ0LCBleGVjX2xlbjsKLQlleGVjX3N0YXJ0ID0gKHVpbnQzMl90KSBleGVjX29mZnNldCArIGV4ZWMtPmJhdGNoX3N0YXJ0X29mZnNldDsKLQlleGVjX2xlbiA9ICh1aW50MzJfdCkgZXhlYy0+YmF0Y2hfbGVuOworCisJaWYgKCFkZXYtPmlycV9lbmFibGVkKQorCSAgICAgICByZXR1cm4gZmFsc2U7CisKKwlzcGluX2xvY2soJnJpbmctPmlycV9sb2NrKTsKKwlpZiAocmluZy0+aXJxX3JlZmNvdW50KysgPT0gMCkKKwkJaXJvbmxha2VfZW5hYmxlX2lycShkZXZfcHJpdiwgZmxhZyk7CisJc3Bpbl91bmxvY2soJnJpbmctPmlycV9sb2NrKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZAorcmluZ19wdXRfaXJxKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywgdTMyIGZsYWcpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXNwaW5fbG9jaygmcmluZy0+aXJxX2xvY2spOworCWlmICgtLXJpbmctPmlycV9yZWZjb3VudCA9PSAwKQorCQlpcm9ubGFrZV9kaXNhYmxlX2lycShkZXZfcHJpdiwgZmxhZyk7CisJc3Bpbl91bmxvY2soJnJpbmctPmlycV9sb2NrKTsKK30KKworc3RhdGljIGJvb2wKK2dlbjZfcmluZ19nZXRfaXJxKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywgdTMyIGdmbGFnLCB1MzIgcmZsYWcpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmICghZGV2LT5pcnFfZW5hYmxlZCkKKwkgICAgICAgcmV0dXJuIGZhbHNlOworCisJc3Bpbl9sb2NrKCZyaW5nLT5pcnFfbG9jayk7CisJaWYgKHJpbmctPmlycV9yZWZjb3VudCsrID09IDApIHsKKwkJcmluZy0+aXJxX21hc2sgJj0gfnJmbGFnOworCQlJOTE1X1dSSVRFX0lNUihyaW5nLCByaW5nLT5pcnFfbWFzayk7CisJCWlyb25sYWtlX2VuYWJsZV9pcnEoZGV2X3ByaXYsIGdmbGFnKTsKKwl9CisJc3Bpbl91bmxvY2soJnJpbmctPmlycV9sb2NrKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZAorZ2VuNl9yaW5nX3B1dF9pcnEoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLCB1MzIgZ2ZsYWcsIHUzMiByZmxhZykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJc3Bpbl9sb2NrKCZyaW5nLT5pcnFfbG9jayk7CisJaWYgKC0tcmluZy0+aXJxX3JlZmNvdW50ID09IDApIHsKKwkJcmluZy0+aXJxX21hc2sgfD0gcmZsYWc7CisJCUk5MTVfV1JJVEVfSU1SKHJpbmcsIHJpbmctPmlycV9tYXNrKTsKKwkJaXJvbmxha2VfZGlzYWJsZV9pcnEoZGV2X3ByaXYsIGdmbGFnKTsKKwl9CisJc3Bpbl91bmxvY2soJnJpbmctPmlycV9sb2NrKTsKK30KKworc3RhdGljIGJvb2wKK2JzZF9yaW5nX2dldF9pcnEoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQoreworCXJldHVybiByaW5nX2dldF9pcnEocmluZywgR1RfQlNEX1VTRVJfSU5URVJSVVBUKTsKK30KK3N0YXRpYyB2b2lkCitic2RfcmluZ19wdXRfaXJxKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKK3sKKwlyaW5nX3B1dF9pcnEocmluZywgR1RfQlNEX1VTRVJfSU5URVJSVVBUKTsKK30KKworc3RhdGljIGludAorcmluZ19kaXNwYXRjaF9leGVjYnVmZmVyKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywgdTMyIG9mZnNldCwgdTMyIGxlbmd0aCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCAyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaW50ZWxfcmluZ19lbWl0KHJpbmcsCisJCQlNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAoMiA8PCA2KSB8CisJCQlNSV9CQVRDSF9OT05fU0VDVVJFX0k5NjUpOworCWludGVsX3JpbmdfZW1pdChyaW5nLCBvZmZzZXQpOworCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CityZW5kZXJfcmluZ19kaXNwYXRjaF9leGVjYnVmZmVyKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKKwkJCQl1MzIgb2Zmc2V0LCB1MzIgbGVuKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldDsKIAogCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfc3VibWl0KGRldiwgZGV2X3ByaXYtPm5leHRfc2Vxbm8gKyAxKTsKIAotCWNvdW50ID0gbmJveCA/IG5ib3ggOiAxOworCWlmIChJU19JODMwKGRldikgfHwgSVNfODQ1RyhkZXYpKSB7CisJCXJldCA9IGludGVsX3JpbmdfYmVnaW4ocmluZywgNCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJaWYgKGkgPCBuYm94KSB7Ci0JCQlpbnQgcmV0ID0gaTkxNV9lbWl0X2JveChkZXYsIGNsaXByZWN0cywgaSwKLQkJCQkJCWV4ZWMtPkRSMSwgZXhlYy0+RFI0KTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJfQorCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfQkFUQ0hfQlVGRkVSKTsKKwkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIG9mZnNldCB8IE1JX0JBVENIX05PTl9TRUNVUkUpOworCQlpbnRlbF9yaW5nX2VtaXQocmluZywgb2Zmc2V0ICsgbGVuIC0gOCk7CisJCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKKwl9IGVsc2UgeworCQlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAotCQlpZiAoSVNfSTgzMChkZXYpIHx8IElTXzg0NUcoZGV2KSkgewotCQkJaW50ZWxfcmluZ19iZWdpbihkZXYsIHJpbmcsIDQpOwotCQkJaW50ZWxfcmluZ19lbWl0KGRldiwgcmluZywgTUlfQkFUQ0hfQlVGRkVSKTsKLQkJCWludGVsX3JpbmdfZW1pdChkZXYsIHJpbmcsCi0JCQkJCWV4ZWNfc3RhcnQgfCBNSV9CQVRDSF9OT05fU0VDVVJFKTsKLQkJCWludGVsX3JpbmdfZW1pdChkZXYsIHJpbmcsIGV4ZWNfc3RhcnQgKyBleGVjX2xlbiAtIDQpOwotCQkJaW50ZWxfcmluZ19lbWl0KGRldiwgcmluZywgMCk7CisJCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KSB7CisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywKKwkJCQkJTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgKDIgPDwgNikgfAorCQkJCQlNSV9CQVRDSF9OT05fU0VDVVJFX0k5NjUpOworCQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIG9mZnNldCk7CiAJCX0gZWxzZSB7Ci0JCQlpbnRlbF9yaW5nX2JlZ2luKGRldiwgcmluZywgMik7Ci0JCQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkgewotCQkJCWludGVsX3JpbmdfZW1pdChkZXYsIHJpbmcsCi0JCQkJCQlNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAoMiA8PCA2KQotCQkJCQkJfCBNSV9CQVRDSF9OT05fU0VDVVJFX0k5NjUpOwotCQkJCWludGVsX3JpbmdfZW1pdChkZXYsIHJpbmcsIGV4ZWNfc3RhcnQpOwotCQkJfSBlbHNlIHsKLQkJCQlpbnRlbF9yaW5nX2VtaXQoZGV2LCByaW5nLCBNSV9CQVRDSF9CVUZGRVJfU1RBUlQKLQkJCQkJCXwgKDIgPDwgNikpOwotCQkJCWludGVsX3JpbmdfZW1pdChkZXYsIHJpbmcsIGV4ZWNfc3RhcnQgfAotCQkJCQkJTUlfQkFUQ0hfTk9OX1NFQ1VSRSk7Ci0JCQl9CisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywKKwkJCQkJTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgKDIgPDwgNikpOworCQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIG9mZnNldCB8IE1JX0JBVENIX05PTl9TRUNVUkUpOwogCQl9Ci0JCWludGVsX3JpbmdfYWR2YW5jZShkZXYsIHJpbmcpOwogCX0KLQotCWlmIChJU19HNFgoZGV2KSB8fCBJU19HRU41KGRldikpIHsKLQkJaW50ZWxfcmluZ19iZWdpbihkZXYsIHJpbmcsIDIpOwotCQlpbnRlbF9yaW5nX2VtaXQoZGV2LCByaW5nLCBNSV9GTFVTSCB8Ci0JCQkJTUlfTk9fV1JJVEVfRkxVU0ggfAotCQkJCU1JX0lOVkFMSURBVEVfSVNQICk7Ci0JCWludGVsX3JpbmdfZW1pdChkZXYsIHJpbmcsIE1JX05PT1ApOwotCQlpbnRlbF9yaW5nX2FkdmFuY2UoZGV2LCByaW5nKTsKLQl9Ci0JLyogWFhYIGJyZWFkY3J1bWIgKi8KKwlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY2xlYW51cF9zdGF0dXNfcGFnZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKK3N0YXRpYyB2b2lkIGNsZWFudXBfc3RhdHVzX3BhZ2Uoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQogewotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCiAJb2JqID0gcmluZy0+c3RhdHVzX3BhZ2Uub2JqOwogCWlmIChvYmogPT0gTlVMTCkKIAkJcmV0dXJuOwotCW9ial9wcml2ID0gdG9faW50ZWxfYm8ob2JqKTsKIAotCWt1bm1hcChvYmpfcHJpdi0+cGFnZXNbMF0pOworCWt1bm1hcChvYmotPnBhZ2VzWzBdKTsKIAlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogCXJpbmctPnN0YXR1c19wYWdlLm9iaiA9IE5VTEw7CiAKIAltZW1zZXQoJmRldl9wcml2LT5od3NfbWFwLCAwLCBzaXplb2YoZGV2X3ByaXYtPmh3c19tYXApKTsKIH0KIAotc3RhdGljIGludCBpbml0X3N0YXR1c19wYWdlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQorc3RhdGljIGludCBpbml0X3N0YXR1c19wYWdlKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2OwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCWludCByZXQ7CiAKIAlvYmogPSBpOTE1X2dlbV9hbGxvY19vYmplY3QoZGV2LCA0MDk2KTsKQEAgLTU0MCwxNiArNzc0LDE1IEBACiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOwogCX0KLQlvYmpfcHJpdiA9IHRvX2ludGVsX2JvKG9iaik7Ci0Jb2JqX3ByaXYtPmFncF90eXBlID0gQUdQX1VTRVJfQ0FDSEVEX01FTU9SWTsKKwlvYmotPmFncF90eXBlID0gQUdQX1VTRVJfQ0FDSEVEX01FTU9SWTsKIAotCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ob2JqLCA0MDk2KTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgNDA5NiwgdHJ1ZSk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWdvdG8gZXJyX3VucmVmOwogCX0KIAotCXJpbmctPnN0YXR1c19wYWdlLmdmeF9hZGRyID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7Ci0JcmluZy0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyID0ga21hcChvYmpfcHJpdi0+cGFnZXNbMF0pOworCXJpbmctPnN0YXR1c19wYWdlLmdmeF9hZGRyID0gb2JqLT5ndHRfb2Zmc2V0OworCXJpbmctPnN0YXR1c19wYWdlLnBhZ2VfYWRkciA9IGttYXAob2JqLT5wYWdlc1swXSk7CiAJaWYgKHJpbmctPnN0YXR1c19wYWdlLnBhZ2VfYWRkciA9PSBOVUxMKSB7CiAJCW1lbXNldCgmZGV2X3ByaXYtPmh3c19tYXAsIDAsIHNpemVvZihkZXZfcHJpdi0+aHdzX21hcCkpOwogCQlnb3RvIGVycl91bnBpbjsKQEAgLTU1Nyw3ICs3OTAsNyBAQAogCXJpbmctPnN0YXR1c19wYWdlLm9iaiA9IG9iajsKIAltZW1zZXQocmluZy0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyLCAwLCBQQUdFX1NJWkUpOwogCi0JaW50ZWxfcmluZ19zZXR1cF9zdGF0dXNfcGFnZShkZXYsIHJpbmcpOworCWludGVsX3Jpbmdfc2V0dXBfc3RhdHVzX3BhZ2UocmluZyk7CiAJRFJNX0RFQlVHX0RSSVZFUigiJXMgaHdzIG9mZnNldDogMHglMDh4XG4iLAogCQkJcmluZy0+bmFtZSwgcmluZy0+c3RhdHVzX3BhZ2UuZ2Z4X2FkZHIpOwogCkBAIC01NjYsNyArNzk5LDcgQEAKIGVycl91bnBpbjoKIAlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKIGVycl91bnJlZjoKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogZXJyOgogCXJldHVybiByZXQ7CiB9CkBAIC01NzQsOSArODA3LDcgQEAKIGludCBpbnRlbF9pbml0X3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAlpbnQgcmV0OwogCiAJcmluZy0+ZGV2ID0gZGV2OwpAQCAtNTg0LDggKzgxNSwxMSBAQAogCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5yZXF1ZXN0X2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5ncHVfd3JpdGVfbGlzdCk7CiAKKwlzcGluX2xvY2tfaW5pdCgmcmluZy0+aXJxX2xvY2spOworCXJpbmctPmlycV9tYXNrID0gfjA7CisKIAlpZiAoSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSkgewotCQlyZXQgPSBpbml0X3N0YXR1c19wYWdlKGRldiwgcmluZyk7CisJCXJldCA9IGluaXRfc3RhdHVzX3BhZ2UocmluZyk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTU5NywxNSArODMxLDE0IEBACiAJCWdvdG8gZXJyX2h3czsKIAl9CiAKLQlyaW5nLT5nZW1fb2JqZWN0ID0gb2JqOworCXJpbmctPm9iaiA9IG9iajsKIAotCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ob2JqLCBQQUdFX1NJWkUpOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ob2JqLCBQQUdFX1NJWkUsIHRydWUpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3VucmVmOwogCi0Jb2JqX3ByaXYgPSB0b19pbnRlbF9ibyhvYmopOwogCXJpbmctPm1hcC5zaXplID0gcmluZy0+c2l6ZTsKLQlyaW5nLT5tYXAub2Zmc2V0ID0gZGV2LT5hZ3AtPmJhc2UgKyBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKwlyaW5nLT5tYXAub2Zmc2V0ID0gZGV2LT5hZ3AtPmJhc2UgKyBvYmotPmd0dF9vZmZzZXQ7CiAJcmluZy0+bWFwLnR5cGUgPSAwOwogCXJpbmctPm1hcC5mbGFncyA9IDA7CiAJcmluZy0+bWFwLm10cnIgPSAwOwpAQCAtNjE4LDYwICs4NTEsNjQgQEAKIAl9CiAKIAlyaW5nLT52aXJ0dWFsX3N0YXJ0ID0gcmluZy0+bWFwLmhhbmRsZTsKLQlyZXQgPSByaW5nLT5pbml0KGRldiwgcmluZyk7CisJcmV0ID0gcmluZy0+aW5pdChyaW5nKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl91bm1hcDsKIAotCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKLQkJaTkxNV9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7Ci0JZWxzZSB7Ci0JCXJpbmctPmhlYWQgPSBJOTE1X1JFQURfSEVBRChyaW5nKSAmIEhFQURfQUREUjsKLQkJcmluZy0+dGFpbCA9IEk5MTVfUkVBRF9UQUlMKHJpbmcpICYgVEFJTF9BRERSOwotCQlyaW5nLT5zcGFjZSA9IHJpbmctPmhlYWQgLSAocmluZy0+dGFpbCArIDgpOwotCQlpZiAocmluZy0+c3BhY2UgPCAwKQotCQkJcmluZy0+c3BhY2UgKz0gcmluZy0+c2l6ZTsKLQl9Ci0JcmV0dXJuIHJldDsKKwkvKiBXb3JrYXJvdW5kIGFuIGVycmF0dW0gb24gdGhlIGk4MzAgd2hpY2ggY2F1c2VzIGEgaGFuZyBpZgorCSAqIHRoZSBUQUlMIHBvaW50ZXIgcG9pbnRzIHRvIHdpdGhpbiB0aGUgbGFzdCAyIGNhY2hlbGluZXMKKwkgKiBvZiB0aGUgYnVmZmVyLgorCSAqLworCXJpbmctPmVmZmVjdGl2ZV9zaXplID0gcmluZy0+c2l6ZTsKKwlpZiAoSVNfSTgzMChyaW5nLT5kZXYpKQorCQlyaW5nLT5lZmZlY3RpdmVfc2l6ZSAtPSAxMjg7CisKKwlyZXR1cm4gMDsKIAogZXJyX3VubWFwOgogCWRybV9jb3JlX2lvcmVtYXBmcmVlKCZyaW5nLT5tYXAsIGRldik7CiBlcnJfdW5waW46CiAJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CiBlcnJfdW5yZWY6Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKLQlyaW5nLT5nZW1fb2JqZWN0ID0gTlVMTDsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwlyaW5nLT5vYmogPSBOVUxMOwogZXJyX2h3czoKLQljbGVhbnVwX3N0YXR1c19wYWdlKGRldiwgcmluZyk7CisJY2xlYW51cF9zdGF0dXNfcGFnZShyaW5nKTsKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIGludGVsX2NsZWFudXBfcmluZ19idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCit2b2lkIGludGVsX2NsZWFudXBfcmluZ19idWZmZXIoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQogewotCWlmIChyaW5nLT5nZW1fb2JqZWN0ID09IE5VTEwpCisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2OworCWludCByZXQ7CisKKwlpZiAocmluZy0+b2JqID09IE5VTEwpCiAJCXJldHVybjsKIAotCWRybV9jb3JlX2lvcmVtYXBmcmVlKCZyaW5nLT5tYXAsIGRldik7CisJLyogRGlzYWJsZSB0aGUgcmluZyBidWZmZXIuIFRoZSByaW5nIG11c3QgYmUgaWRsZSBhdCB0aGlzIHBvaW50ICovCisJZGV2X3ByaXYgPSByaW5nLT5kZXYtPmRldl9wcml2YXRlOworCXJldCA9IGludGVsX3dhaXRfcmluZ19idWZmZXIocmluZywgcmluZy0+c2l6ZSAtIDgpOworCUk5MTVfV1JJVEVfQ1RMKHJpbmcsIDApOwogCi0JaTkxNV9nZW1fb2JqZWN0X3VucGluKHJpbmctPmdlbV9vYmplY3QpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHJpbmctPmdlbV9vYmplY3QpOwotCXJpbmctPmdlbV9vYmplY3QgPSBOVUxMOworCWRybV9jb3JlX2lvcmVtYXBmcmVlKCZyaW5nLT5tYXAsIHJpbmctPmRldik7CisKKwlpOTE1X2dlbV9vYmplY3RfdW5waW4ocmluZy0+b2JqKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmcmluZy0+b2JqLT5iYXNlKTsKKwlyaW5nLT5vYmogPSBOVUxMOwogCiAJaWYgKHJpbmctPmNsZWFudXApCiAJCXJpbmctPmNsZWFudXAocmluZyk7CiAKLQljbGVhbnVwX3N0YXR1c19wYWdlKGRldiwgcmluZyk7CisJY2xlYW51cF9zdGF0dXNfcGFnZShyaW5nKTsKIH0KIAotc3RhdGljIGludCBpbnRlbF93cmFwX3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCitzdGF0aWMgaW50IGludGVsX3dyYXBfcmluZ19idWZmZXIoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQogewogCXVuc2lnbmVkIGludCAqdmlydDsKLQlpbnQgcmVtOwotCXJlbSA9IHJpbmctPnNpemUgLSByaW5nLT50YWlsOworCWludCByZW0gPSByaW5nLT5zaXplIC0gcmluZy0+dGFpbDsKIAogCWlmIChyaW5nLT5zcGFjZSA8IHJlbSkgewotCQlpbnQgcmV0ID0gaW50ZWxfd2FpdF9yaW5nX2J1ZmZlcihkZXYsIHJpbmcsIHJlbSk7CisJCWludCByZXQgPSBpbnRlbF93YWl0X3JpbmdfYnVmZmVyKHJpbmcsIHJlbSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTY4OSwxMSArOTI2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpbnRlbF93YWl0X3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsIGludCBuKQoraW50IGludGVsX3dhaXRfcmluZ19idWZmZXIoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLCBpbnQgbikKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdW5zaWduZWQgbG9uZyBlbmQ7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdTMyIGhlYWQ7CiAKIAl0cmFjZV9pOTE1X3Jpbmdfd2FpdF9iZWdpbiAoZGV2KTsKQEAgLTcxMSw3ICs5NDgsNyBAQAogCQlpZiAocmluZy0+c3BhY2UgPCAwKQogCQkJcmluZy0+c3BhY2UgKz0gcmluZy0+c2l6ZTsKIAkJaWYgKHJpbmctPnNwYWNlID49IG4pIHsKLQkJCXRyYWNlX2k5MTVfcmluZ193YWl0X2VuZCAoZGV2KTsKKwkJCXRyYWNlX2k5MTVfcmluZ193YWl0X2VuZChkZXYpOwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtNzIyLDI5ICs5NTksMzkgQEAKIAkJfQogCiAJCW1zbGVlcCgxKTsKKwkJaWYgKGF0b21pY19yZWFkKCZkZXZfcHJpdi0+bW0ud2VkZ2VkKSkKKwkJCXJldHVybiAtRUFHQUlOOwogCX0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIGVuZCkpOwogCXRyYWNlX2k5MTVfcmluZ193YWl0X2VuZCAoZGV2KTsKIAlyZXR1cm4gLUVCVVNZOwogfQogCi12b2lkIGludGVsX3JpbmdfYmVnaW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJICAgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAotCQkgICAgICBpbnQgbnVtX2R3b3JkcykKK2ludCBpbnRlbF9yaW5nX2JlZ2luKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKKwkJICAgICBpbnQgbnVtX2R3b3JkcykKIHsKIAlpbnQgbiA9IDQqbnVtX2R3b3JkczsKLQlpZiAodW5saWtlbHkocmluZy0+dGFpbCArIG4gPiByaW5nLT5zaXplKSkKLQkJaW50ZWxfd3JhcF9yaW5nX2J1ZmZlcihkZXYsIHJpbmcpOwotCWlmICh1bmxpa2VseShyaW5nLT5zcGFjZSA8IG4pKQotCQlpbnRlbF93YWl0X3JpbmdfYnVmZmVyKGRldiwgcmluZywgbik7CisJaW50IHJldDsKKworCWlmICh1bmxpa2VseShyaW5nLT50YWlsICsgbiA+IHJpbmctPmVmZmVjdGl2ZV9zaXplKSkgeworCQlyZXQgPSBpbnRlbF93cmFwX3JpbmdfYnVmZmVyKHJpbmcpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHVubGlrZWx5KHJpbmctPnNwYWNlIDwgbikpIHsKKwkJcmV0ID0gaW50ZWxfd2FpdF9yaW5nX2J1ZmZlcihyaW5nLCBuKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlyZXR1cm4gcmV0OworCX0KIAogCXJpbmctPnNwYWNlIC09IG47CisJcmV0dXJuIDA7CiB9CiAKLXZvaWQgaW50ZWxfcmluZ19hZHZhbmNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCit2b2lkIGludGVsX3JpbmdfYWR2YW5jZShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCiB7CiAJcmluZy0+dGFpbCAmPSByaW5nLT5zaXplIC0gMTsKLQlyaW5nLT53cml0ZV90YWlsKGRldiwgcmluZywgcmluZy0+dGFpbCk7CisJcmluZy0+d3JpdGVfdGFpbChyaW5nLCByaW5nLT50YWlsKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciByZW5kZXJfcmluZyA9IHsKQEAgLTc1NiwxMCArMTAwMywxMSBAQAogCS53cml0ZV90YWlsCQk9IHJpbmdfd3JpdGVfdGFpbCwKIAkuZmx1c2gJCQk9IHJlbmRlcl9yaW5nX2ZsdXNoLAogCS5hZGRfcmVxdWVzdAkJPSByZW5kZXJfcmluZ19hZGRfcmVxdWVzdCwKLQkuZ2V0X3NlcW5vCQk9IHJlbmRlcl9yaW5nX2dldF9zZXFubywKLQkudXNlcl9pcnFfZ2V0CQk9IHJlbmRlcl9yaW5nX2dldF91c2VyX2lycSwKLQkudXNlcl9pcnFfcHV0CQk9IHJlbmRlcl9yaW5nX3B1dF91c2VyX2lycSwKLQkuZGlzcGF0Y2hfZ2VtX2V4ZWNidWZmZXIgPSByZW5kZXJfcmluZ19kaXNwYXRjaF9nZW1fZXhlY2J1ZmZlciwKKwkuZ2V0X3NlcW5vCQk9IHJpbmdfZ2V0X3NlcW5vLAorCS5pcnFfZ2V0CQk9IHJlbmRlcl9yaW5nX2dldF9pcnEsCisJLmlycV9wdXQJCT0gcmVuZGVyX3JpbmdfcHV0X2lycSwKKwkuZGlzcGF0Y2hfZXhlY2J1ZmZlcgk9IHJlbmRlcl9yaW5nX2Rpc3BhdGNoX2V4ZWNidWZmZXIsCisgICAgICAgLmNsZWFudXAJCQk9IHJlbmRlcl9yaW5nX2NsZWFudXAsCiB9OwogCiAvKiByaW5nIGJ1ZmZlciBmb3IgYml0LXN0cmVhbSBkZWNvZGVyICovCkBAIC03NjksMjIgKzEwMTcsMjEgQEAKIAkuaWQJCQk9IFJJTkdfQlNELAogCS5tbWlvX2Jhc2UJCT0gQlNEX1JJTkdfQkFTRSwKIAkuc2l6ZQkJCT0gMzIgKiBQQUdFX1NJWkUsCi0JLmluaXQJCQk9IGluaXRfYnNkX3JpbmcsCisJLmluaXQJCQk9IGluaXRfcmluZ19jb21tb24sCiAJLndyaXRlX3RhaWwJCT0gcmluZ193cml0ZV90YWlsLAogCS5mbHVzaAkJCT0gYnNkX3JpbmdfZmx1c2gsCiAJLmFkZF9yZXF1ZXN0CQk9IHJpbmdfYWRkX3JlcXVlc3QsCi0JLmdldF9zZXFubwkJPSByaW5nX3N0YXR1c19wYWdlX2dldF9zZXFubywKLQkudXNlcl9pcnFfZ2V0CQk9IGJzZF9yaW5nX2dldF91c2VyX2lycSwKLQkudXNlcl9pcnFfcHV0CQk9IGJzZF9yaW5nX3B1dF91c2VyX2lycSwKLQkuZGlzcGF0Y2hfZ2VtX2V4ZWNidWZmZXIgPSByaW5nX2Rpc3BhdGNoX2dlbV9leGVjYnVmZmVyLAorCS5nZXRfc2Vxbm8JCT0gcmluZ19nZXRfc2Vxbm8sCisJLmlycV9nZXQJCT0gYnNkX3JpbmdfZ2V0X2lycSwKKwkuaXJxX3B1dAkJPSBic2RfcmluZ19wdXRfaXJxLAorCS5kaXNwYXRjaF9leGVjYnVmZmVyCT0gcmluZ19kaXNwYXRjaF9leGVjYnVmZmVyLAogfTsKIAogCi1zdGF0aWMgdm9pZCBnZW42X2JzZF9yaW5nX3dyaXRlX3RhaWwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKK3N0YXRpYyB2b2lkIGdlbjZfYnNkX3Jpbmdfd3JpdGVfdGFpbChzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCiAJCQkJICAgICB1MzIgdmFsdWUpCiB7Ci0gICAgICAgZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisgICAgICAgZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7CiAKICAgICAgICAvKiBFdmVyeSB0YWlsIG1vdmUgbXVzdCBmb2xsb3cgdGhlIHNlcXVlbmNlIGJlbG93ICovCiAgICAgICAgSTkxNV9XUklURShHRU42X0JTRF9TTEVFUF9QU01JX0NPTlRST0wsCkBAIC04MDMsNjkgKzEwNTAsMTA5IEBACiAJICAgICAgIEdFTjZfQlNEX1NMRUVQX1BTTUlfQ09OVFJPTF9SQ19JTERMX01FU1NBR0VfRU5BQkxFKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuNl9yaW5nX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAotCQkJICAgIHUzMiBpbnZhbGlkYXRlX2RvbWFpbnMsCi0JCQkgICAgdTMyIGZsdXNoX2RvbWFpbnMpCitzdGF0aWMgaW50IGdlbjZfcmluZ19mbHVzaChzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCisJCQkgICB1MzIgaW52YWxpZGF0ZV9kb21haW5zLAorCQkJICAgdTMyIGZsdXNoX2RvbWFpbnMpCiB7Ci0gICAgICAgaW50ZWxfcmluZ19iZWdpbihkZXYsIHJpbmcsIDQpOwotICAgICAgIGludGVsX3JpbmdfZW1pdChkZXYsIHJpbmcsIE1JX0ZMVVNIX0RXKTsKLSAgICAgICBpbnRlbF9yaW5nX2VtaXQoZGV2LCByaW5nLCAwKTsKLSAgICAgICBpbnRlbF9yaW5nX2VtaXQoZGV2LCByaW5nLCAwKTsKLSAgICAgICBpbnRlbF9yaW5nX2VtaXQoZGV2LCByaW5nLCAwKTsKLSAgICAgICBpbnRlbF9yaW5nX2FkdmFuY2UoZGV2LCByaW5nKTsKKwlpbnQgcmV0OworCisJaWYgKChmbHVzaF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUikgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfRkxVU0hfRFcpOworCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOworCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotZ2VuNl9yaW5nX2Rpc3BhdGNoX2dlbV9leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCi0JCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjLAotCQkJCSAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cywKLQkJCQkgIHVpbnQ2NF90IGV4ZWNfb2Zmc2V0KQorZ2VuNl9yaW5nX2Rpc3BhdGNoX2V4ZWNidWZmZXIoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAorCQkJICAgICAgdTMyIG9mZnNldCwgdTMyIGxlbikKIHsKLSAgICAgICB1aW50MzJfdCBleGVjX3N0YXJ0OworICAgICAgIGludCByZXQ7CiAKLSAgICAgICBleGVjX3N0YXJ0ID0gKHVpbnQzMl90KSBleGVjX29mZnNldCArIGV4ZWMtPmJhdGNoX3N0YXJ0X29mZnNldDsKKyAgICAgICByZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDIpOworICAgICAgIGlmIChyZXQpCisJICAgICAgIHJldHVybiByZXQ7CiAKLSAgICAgICBpbnRlbF9yaW5nX2JlZ2luKGRldiwgcmluZywgMik7Ci0gICAgICAgaW50ZWxfcmluZ19lbWl0KGRldiwgcmluZywKLQkJICAgICAgIE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSk7CisgICAgICAgaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSk7CiAgICAgICAgLyogYml0MC03IGlzIHRoZSBsZW5ndGggb24gR0VONisgKi8KLSAgICAgICBpbnRlbF9yaW5nX2VtaXQoZGV2LCByaW5nLCBleGVjX3N0YXJ0KTsKLSAgICAgICBpbnRlbF9yaW5nX2FkdmFuY2UoZGV2LCByaW5nKTsKKyAgICAgICBpbnRlbF9yaW5nX2VtaXQocmluZywgb2Zmc2V0KTsKKyAgICAgICBpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7CiAKICAgICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGJvb2wKK2dlbjZfcmVuZGVyX3JpbmdfZ2V0X2lycShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCit7CisJcmV0dXJuIGdlbjZfcmluZ19nZXRfaXJxKHJpbmcsCisJCQkJIEdUX1VTRVJfSU5URVJSVVBULAorCQkJCSBHRU42X1JFTkRFUl9VU0VSX0lOVEVSUlVQVCk7Cit9CisKK3N0YXRpYyB2b2lkCitnZW42X3JlbmRlcl9yaW5nX3B1dF9pcnEoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQoreworCXJldHVybiBnZW42X3JpbmdfcHV0X2lycShyaW5nLAorCQkJCSBHVF9VU0VSX0lOVEVSUlVQVCwKKwkJCQkgR0VONl9SRU5ERVJfVVNFUl9JTlRFUlJVUFQpOworfQorCitzdGF0aWMgYm9vbAorZ2VuNl9ic2RfcmluZ19nZXRfaXJxKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKK3sKKwlyZXR1cm4gZ2VuNl9yaW5nX2dldF9pcnEocmluZywKKwkJCQkgR1RfR0VONl9CU0RfVVNFUl9JTlRFUlJVUFQsCisJCQkJIEdFTjZfQlNEX1VTRVJfSU5URVJSVVBUKTsKK30KKworc3RhdGljIHZvaWQKK2dlbjZfYnNkX3JpbmdfcHV0X2lycShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCit7CisJcmV0dXJuIGdlbjZfcmluZ19wdXRfaXJxKHJpbmcsCisJCQkJIEdUX0dFTjZfQlNEX1VTRVJfSU5URVJSVVBULAorCQkJCSBHRU42X0JTRF9VU0VSX0lOVEVSUlVQVCk7Cit9CisKIC8qIHJpbmcgYnVmZmVyIGZvciBWaWRlbyBDb2RlYyBmb3IgR2VuNisgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgZ2VuNl9ic2RfcmluZyA9IHsKLSAgICAgICAubmFtZQkJCT0gImdlbjYgYnNkIHJpbmciLAotICAgICAgIC5pZAkJCT0gUklOR19CU0QsCi0gICAgICAgLm1taW9fYmFzZQkJPSBHRU42X0JTRF9SSU5HX0JBU0UsCi0gICAgICAgLnNpemUJCQk9IDMyICogUEFHRV9TSVpFLAotICAgICAgIC5pbml0CQkJPSBpbml0X2JzZF9yaW5nLAotICAgICAgIC53cml0ZV90YWlsCQk9IGdlbjZfYnNkX3Jpbmdfd3JpdGVfdGFpbCwKLSAgICAgICAuZmx1c2gJCQk9IGdlbjZfcmluZ19mbHVzaCwKLSAgICAgICAuYWRkX3JlcXVlc3QJCT0gcmluZ19hZGRfcmVxdWVzdCwKLSAgICAgICAuZ2V0X3NlcW5vCQk9IHJpbmdfc3RhdHVzX3BhZ2VfZ2V0X3NlcW5vLAotICAgICAgIC51c2VyX2lycV9nZXQJCT0gYnNkX3JpbmdfZ2V0X3VzZXJfaXJxLAotICAgICAgIC51c2VyX2lycV9wdXQJCT0gYnNkX3JpbmdfcHV0X3VzZXJfaXJxLAotICAgICAgIC5kaXNwYXRjaF9nZW1fZXhlY2J1ZmZlcgk9IGdlbjZfcmluZ19kaXNwYXRjaF9nZW1fZXhlY2J1ZmZlciwKKwkubmFtZQkJCT0gImdlbjYgYnNkIHJpbmciLAorCS5pZAkJCT0gUklOR19CU0QsCisJLm1taW9fYmFzZQkJPSBHRU42X0JTRF9SSU5HX0JBU0UsCisJLnNpemUJCQk9IDMyICogUEFHRV9TSVpFLAorCS5pbml0CQkJPSBpbml0X3JpbmdfY29tbW9uLAorCS53cml0ZV90YWlsCQk9IGdlbjZfYnNkX3Jpbmdfd3JpdGVfdGFpbCwKKwkuZmx1c2gJCQk9IGdlbjZfcmluZ19mbHVzaCwKKwkuYWRkX3JlcXVlc3QJCT0gZ2VuNl9hZGRfcmVxdWVzdCwKKwkuZ2V0X3NlcW5vCQk9IHJpbmdfZ2V0X3NlcW5vLAorCS5pcnFfZ2V0CQk9IGdlbjZfYnNkX3JpbmdfZ2V0X2lycSwKKwkuaXJxX3B1dAkJPSBnZW42X2JzZF9yaW5nX3B1dF9pcnEsCisJLmRpc3BhdGNoX2V4ZWNidWZmZXIJPSBnZW42X3JpbmdfZGlzcGF0Y2hfZXhlY2J1ZmZlciwKIH07CiAKIC8qIEJsaXR0ZXIgc3VwcG9ydCAoU2FuZHlCcmlkZ2UrKSAqLwogCi1zdGF0aWMgdm9pZAotYmx0X3JpbmdfZ2V0X3VzZXJfaXJxKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCSAgICAgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKK3N0YXRpYyBib29sCitibHRfcmluZ19nZXRfaXJxKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKIHsKLQkvKiBkbyBub3RoaW5nICovCisJcmV0dXJuIGdlbjZfcmluZ19nZXRfaXJxKHJpbmcsCisJCQkJIEdUX0JMVF9VU0VSX0lOVEVSUlVQVCwKKwkJCQkgR0VONl9CTElUVEVSX1VTRVJfSU5URVJSVVBUKTsKIH0KKwogc3RhdGljIHZvaWQKLWJsdF9yaW5nX3B1dF91c2VyX2lycShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkgICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCitibHRfcmluZ19wdXRfaXJxKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZykKIHsKLQkvKiBkbyBub3RoaW5nICovCisJZ2VuNl9yaW5nX3B1dF9pcnEocmluZywKKwkJCSAgR1RfQkxUX1VTRVJfSU5URVJSVVBULAorCQkJICBHRU42X0JMSVRURVJfVVNFUl9JTlRFUlJVUFQpOwogfQogCiAKQEAgLTg4MywzMiArMTE3MCwzMSBAQAogCXJldHVybiByaW5nLT5wcml2YXRlOwogfQogCi1zdGF0aWMgaW50IGJsdF9yaW5nX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCitzdGF0aWMgaW50IGJsdF9yaW5nX2luaXQoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQogewotCWlmIChORUVEX0JMVF9XT1JLQVJPVU5EKGRldikpIHsKKwlpZiAoTkVFRF9CTFRfV09SS0FST1VORChyaW5nLT5kZXYpKSB7CiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Ci0JCXUzMiBfX2lvbWVtICpwdHI7CisJCXUzMiAqcHRyOwogCQlpbnQgcmV0OwogCi0JCW9iaiA9IHRvX2ludGVsX2JvKGk5MTVfZ2VtX2FsbG9jX29iamVjdChkZXYsIDQwOTYpKTsKKwkJb2JqID0gaTkxNV9nZW1fYWxsb2Nfb2JqZWN0KHJpbmctPmRldiwgNDA5Nik7CiAJCWlmIChvYmogPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4oJm9iai0+YmFzZSwgNDA5Nik7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ob2JqLCA0MDk2LCB0cnVlKTsKIAkJaWYgKHJldCkgewogCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKIAkJcHRyID0ga21hcChvYmotPnBhZ2VzWzBdKTsKLQkJaW93cml0ZTMyKE1JX0JBVENIX0JVRkZFUl9FTkQsIHB0cik7Ci0JCWlvd3JpdGUzMihNSV9OT09QLCBwdHIrMSk7CisJCSpwdHIrKyA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7CisJCSpwdHIrKyA9IE1JX05PT1A7CiAJCWt1bm1hcChvYmotPnBhZ2VzWzBdKTsKIAotCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4oJm9iai0+YmFzZSwgZmFsc2UpOworCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4ob2JqLCBmYWxzZSk7CiAJCWlmIChyZXQpIHsKLQkJCWk5MTVfZ2VtX29iamVjdF91bnBpbigmb2JqLT5iYXNlKTsKKwkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwogCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CkBAIC05MTYsNTEgKzEyMDIsNDQgQEAKIAkJcmluZy0+cHJpdmF0ZSA9IG9iajsKIAl9CiAKLQlyZXR1cm4gaW5pdF9yaW5nX2NvbW1vbihkZXYsIHJpbmcpOworCXJldHVybiBpbml0X3JpbmdfY29tbW9uKHJpbmcpOwogfQogCi1zdGF0aWMgdm9pZCBibHRfcmluZ19iZWdpbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAorc3RhdGljIGludCBibHRfcmluZ19iZWdpbihzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCiAJCQkgIGludCBudW1fZHdvcmRzKQogewogCWlmIChyaW5nLT5wcml2YXRlKSB7Ci0JCWludGVsX3JpbmdfYmVnaW4oZGV2LCByaW5nLCBudW1fZHdvcmRzKzIpOwotCQlpbnRlbF9yaW5nX2VtaXQoZGV2LCByaW5nLCBNSV9CQVRDSF9CVUZGRVJfU1RBUlQpOwotCQlpbnRlbF9yaW5nX2VtaXQoZGV2LCByaW5nLCB0b19ibHRfd29ya2Fyb3VuZChyaW5nKS0+Z3R0X29mZnNldCk7CisJCWludCByZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIG51bV9kd29yZHMrMik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9CQVRDSF9CVUZGRVJfU1RBUlQpOworCQlpbnRlbF9yaW5nX2VtaXQocmluZywgdG9fYmx0X3dvcmthcm91bmQocmluZyktPmd0dF9vZmZzZXQpOworCisJCXJldHVybiAwOwogCX0gZWxzZQotCQlpbnRlbF9yaW5nX2JlZ2luKGRldiwgcmluZywgNCk7CisJCXJldHVybiBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDQpOwogfQogCi1zdGF0aWMgdm9pZCBibHRfcmluZ19mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAorc3RhdGljIGludCBibHRfcmluZ19mbHVzaChzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCiAJCQkgICB1MzIgaW52YWxpZGF0ZV9kb21haW5zLAogCQkJICAgdTMyIGZsdXNoX2RvbWFpbnMpCiB7Ci0JYmx0X3JpbmdfYmVnaW4oZGV2LCByaW5nLCA0KTsKLQlpbnRlbF9yaW5nX2VtaXQoZGV2LCByaW5nLCBNSV9GTFVTSF9EVyk7Ci0JaW50ZWxfcmluZ19lbWl0KGRldiwgcmluZywgMCk7Ci0JaW50ZWxfcmluZ19lbWl0KGRldiwgcmluZywgMCk7Ci0JaW50ZWxfcmluZ19lbWl0KGRldiwgcmluZywgMCk7Ci0JaW50ZWxfcmluZ19hZHZhbmNlKGRldiwgcmluZyk7Ci19CisJaW50IHJldDsKIAotc3RhdGljIHUzMgotYmx0X3JpbmdfYWRkX3JlcXVlc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCi0JCSAgICAgdTMyIGZsdXNoX2RvbWFpbnMpCi17Ci0JdTMyIHNlcW5vID0gaTkxNV9nZW1fZ2V0X3NlcW5vKGRldik7CisJaWYgKChmbHVzaF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUikgPT0gMCkKKwkJcmV0dXJuIDA7CiAKLQlibHRfcmluZ19iZWdpbihkZXYsIHJpbmcsIDQpOwotCWludGVsX3JpbmdfZW1pdChkZXYsIHJpbmcsIE1JX1NUT1JFX0RXT1JEX0lOREVYKTsKLQlpbnRlbF9yaW5nX2VtaXQoZGV2LCByaW5nLAotCQkJSTkxNV9HRU1fSFdTX0lOREVYIDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKLQlpbnRlbF9yaW5nX2VtaXQoZGV2LCByaW5nLCBzZXFubyk7Ci0JaW50ZWxfcmluZ19lbWl0KGRldiwgcmluZywgTUlfVVNFUl9JTlRFUlJVUFQpOwotCWludGVsX3JpbmdfYWR2YW5jZShkZXYsIHJpbmcpOworCXJldCA9IGJsdF9yaW5nX2JlZ2luKHJpbmcsIDQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxuIiwgcmluZy0+bmFtZSwgc2Vxbm8pOwotCXJldHVybiBzZXFubzsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfRkxVU0hfRFcpOworCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOworCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgYmx0X3JpbmdfY2xlYW51cChzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCkBAIC05ODEsNDcgKzEyNjAsNTYgQEAKICAgICAgICAuaW5pdAkJCT0gYmx0X3JpbmdfaW5pdCwKICAgICAgICAud3JpdGVfdGFpbAkJPSByaW5nX3dyaXRlX3RhaWwsCiAgICAgICAgLmZsdXNoCQkJPSBibHRfcmluZ19mbHVzaCwKLSAgICAgICAuYWRkX3JlcXVlc3QJCT0gYmx0X3JpbmdfYWRkX3JlcXVlc3QsCi0gICAgICAgLmdldF9zZXFubwkJPSByaW5nX3N0YXR1c19wYWdlX2dldF9zZXFubywKLSAgICAgICAudXNlcl9pcnFfZ2V0CQk9IGJsdF9yaW5nX2dldF91c2VyX2lycSwKLSAgICAgICAudXNlcl9pcnFfcHV0CQk9IGJsdF9yaW5nX3B1dF91c2VyX2lycSwKLSAgICAgICAuZGlzcGF0Y2hfZ2VtX2V4ZWNidWZmZXIJPSBnZW42X3JpbmdfZGlzcGF0Y2hfZ2VtX2V4ZWNidWZmZXIsCisgICAgICAgLmFkZF9yZXF1ZXN0CQk9IGdlbjZfYWRkX3JlcXVlc3QsCisgICAgICAgLmdldF9zZXFubwkJPSByaW5nX2dldF9zZXFubywKKyAgICAgICAuaXJxX2dldAkJCT0gYmx0X3JpbmdfZ2V0X2lycSwKKyAgICAgICAuaXJxX3B1dAkJCT0gYmx0X3JpbmdfcHV0X2lycSwKKyAgICAgICAuZGlzcGF0Y2hfZXhlY2J1ZmZlcgk9IGdlbjZfcmluZ19kaXNwYXRjaF9leGVjYnVmZmVyLAogICAgICAgIC5jbGVhbnVwCQkJPSBibHRfcmluZ19jbGVhbnVwLAogfTsKIAogaW50IGludGVsX2luaXRfcmVuZGVyX3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nID0gJmRldl9wcml2LT5yaW5nW1JDU107CiAKLQlkZXZfcHJpdi0+cmVuZGVyX3JpbmcgPSByZW5kZXJfcmluZzsKLQotCWlmICghSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSkgewotCQlkZXZfcHJpdi0+cmVuZGVyX3Jpbmcuc3RhdHVzX3BhZ2UucGFnZV9hZGRyCi0JCQk9IGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoLT52YWRkcjsKLQkJbWVtc2V0KGRldl9wcml2LT5yZW5kZXJfcmluZy5zdGF0dXNfcGFnZS5wYWdlX2FkZHIsCi0JCQkJMCwgUEFHRV9TSVpFKTsKKwkqcmluZyA9IHJlbmRlcl9yaW5nOworCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA2KSB7CisJCXJpbmctPmFkZF9yZXF1ZXN0ID0gZ2VuNl9hZGRfcmVxdWVzdDsKKwkJcmluZy0+aXJxX2dldCA9IGdlbjZfcmVuZGVyX3JpbmdfZ2V0X2lycTsKKwkJcmluZy0+aXJxX3B1dCA9IGdlbjZfcmVuZGVyX3JpbmdfcHV0X2lycTsKKwl9IGVsc2UgaWYgKElTX0dFTjUoZGV2KSkgeworCQlyaW5nLT5hZGRfcmVxdWVzdCA9IHBjX3JlbmRlcl9hZGRfcmVxdWVzdDsKKwkJcmluZy0+Z2V0X3NlcW5vID0gcGNfcmVuZGVyX2dldF9zZXFubzsKIAl9CiAKLQlyZXR1cm4gaW50ZWxfaW5pdF9yaW5nX2J1ZmZlcihkZXYsICZkZXZfcHJpdi0+cmVuZGVyX3JpbmcpOworCWlmICghSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSkgeworCQlyaW5nLT5zdGF0dXNfcGFnZS5wYWdlX2FkZHIgPSBkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haC0+dmFkZHI7CisJCW1lbXNldChyaW5nLT5zdGF0dXNfcGFnZS5wYWdlX2FkZHIsIDAsIFBBR0VfU0laRSk7CisJfQorCisJcmV0dXJuIGludGVsX2luaXRfcmluZ19idWZmZXIoZGV2LCByaW5nKTsKIH0KIAogaW50IGludGVsX2luaXRfYnNkX3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nID0gJmRldl9wcml2LT5yaW5nW1ZDU107CiAKIAlpZiAoSVNfR0VONihkZXYpKQotCQlkZXZfcHJpdi0+YnNkX3JpbmcgPSBnZW42X2JzZF9yaW5nOworCQkqcmluZyA9IGdlbjZfYnNkX3Jpbmc7CiAJZWxzZQotCQlkZXZfcHJpdi0+YnNkX3JpbmcgPSBic2RfcmluZzsKKwkJKnJpbmcgPSBic2RfcmluZzsKIAotCXJldHVybiBpbnRlbF9pbml0X3JpbmdfYnVmZmVyKGRldiwgJmRldl9wcml2LT5ic2RfcmluZyk7CisJcmV0dXJuIGludGVsX2luaXRfcmluZ19idWZmZXIoZGV2LCByaW5nKTsKIH0KIAogaW50IGludGVsX2luaXRfYmx0X3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nID0gJmRldl9wcml2LT5yaW5nW0JDU107CiAKLQlkZXZfcHJpdi0+Ymx0X3JpbmcgPSBnZW42X2JsdF9yaW5nOworCSpyaW5nID0gZ2VuNl9ibHRfcmluZzsKIAotCXJldHVybiBpbnRlbF9pbml0X3JpbmdfYnVmZmVyKGRldiwgJmRldl9wcml2LT5ibHRfcmluZyk7CisJcmV0dXJuIGludGVsX2luaXRfcmluZ19idWZmZXIoZGV2LCByaW5nKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAppbmRleCBkMmNkMGYxLi5iZTkwODdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCkBAIC0xLDIyICsxLDQwIEBACiAjaWZuZGVmIF9JTlRFTF9SSU5HQlVGRkVSX0hfCiAjZGVmaW5lIF9JTlRFTF9SSU5HQlVGRkVSX0hfCiAKLXN0cnVjdCAgaW50ZWxfaHdfc3RhdHVzX3BhZ2UgewotCXZvaWQJCSpwYWdlX2FkZHI7Ci0JdW5zaWduZWQgaW50CWdmeF9hZGRyOwotCXN0cnVjdAkJZHJtX2dlbV9vYmplY3QgKm9iajsKK2VudW0geworICAgIFJDUyA9IDB4MCwKKyAgICBWQ1MsCisgICAgQkNTLAorICAgIEk5MTVfTlVNX1JJTkdTLAogfTsKIAotI2RlZmluZSBJOTE1X1JFQURfVEFJTChyaW5nKSBJOTE1X1JFQUQoUklOR19UQUlMKHJpbmctPm1taW9fYmFzZSkpCi0jZGVmaW5lIEk5MTVfV1JJVEVfVEFJTChyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklOR19UQUlMKHJpbmctPm1taW9fYmFzZSksIHZhbCkKLSNkZWZpbmUgSTkxNV9SRUFEX1NUQVJUKHJpbmcpIEk5MTVfUkVBRChSSU5HX1NUQVJUKHJpbmctPm1taW9fYmFzZSkpCi0jZGVmaW5lIEk5MTVfV1JJVEVfU1RBUlQocmluZywgdmFsKSBJOTE1X1dSSVRFKFJJTkdfU1RBUlQocmluZy0+bW1pb19iYXNlKSwgdmFsKQotI2RlZmluZSBJOTE1X1JFQURfSEVBRChyaW5nKSBJOTE1X1JFQUQoUklOR19IRUFEKHJpbmctPm1taW9fYmFzZSkpCi0jZGVmaW5lIEk5MTVfV1JJVEVfSEVBRChyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklOR19IRUFEKHJpbmctPm1taW9fYmFzZSksIHZhbCkKLSNkZWZpbmUgSTkxNV9SRUFEX0NUTChyaW5nKSBJOTE1X1JFQUQoUklOR19DVEwocmluZy0+bW1pb19iYXNlKSkKLSNkZWZpbmUgSTkxNV9XUklURV9DVEwocmluZywgdmFsKSBJOTE1X1dSSVRFKFJJTkdfQ1RMKHJpbmctPm1taW9fYmFzZSksIHZhbCkKK3N0cnVjdCAgaW50ZWxfaHdfc3RhdHVzX3BhZ2UgeworCXUzMglfX2lvbWVtCSpwYWdlX2FkZHI7CisJdW5zaWduZWQgaW50CWdmeF9hZGRyOworCXN0cnVjdAkJZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworfTsKIAotc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMjsKKyNkZWZpbmUgSTkxNV9SSU5HX1JFQUQocmVnKSBpOTE1X3NhZmVfcmVhZChkZXZfcHJpdiwgcmVnKQorCisjZGVmaW5lIEk5MTVfUkVBRF9UQUlMKHJpbmcpIEk5MTVfUklOR19SRUFEKFJJTkdfVEFJTCgocmluZyktPm1taW9fYmFzZSkpCisjZGVmaW5lIEk5MTVfV1JJVEVfVEFJTChyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklOR19UQUlMKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQorCisjZGVmaW5lIEk5MTVfUkVBRF9TVEFSVChyaW5nKSBJOTE1X1JJTkdfUkVBRChSSU5HX1NUQVJUKChyaW5nKS0+bW1pb19iYXNlKSkKKyNkZWZpbmUgSTkxNV9XUklURV9TVEFSVChyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklOR19TVEFSVCgocmluZyktPm1taW9fYmFzZSksIHZhbCkKKworI2RlZmluZSBJOTE1X1JFQURfSEVBRChyaW5nKSAgSTkxNV9SSU5HX1JFQUQoUklOR19IRUFEKChyaW5nKS0+bW1pb19iYXNlKSkKKyNkZWZpbmUgSTkxNV9XUklURV9IRUFEKHJpbmcsIHZhbCkgSTkxNV9XUklURShSSU5HX0hFQUQoKHJpbmcpLT5tbWlvX2Jhc2UpLCB2YWwpCisKKyNkZWZpbmUgSTkxNV9SRUFEX0NUTChyaW5nKSBJOTE1X1JJTkdfUkVBRChSSU5HX0NUTCgocmluZyktPm1taW9fYmFzZSkpCisjZGVmaW5lIEk5MTVfV1JJVEVfQ1RMKHJpbmcsIHZhbCkgSTkxNV9XUklURShSSU5HX0NUTCgocmluZyktPm1taW9fYmFzZSksIHZhbCkKKworI2RlZmluZSBJOTE1X1dSSVRFX0lNUihyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklOR19JTVIoKHJpbmcpLT5tbWlvX2Jhc2UpLCB2YWwpCisjZGVmaW5lIEk5MTVfUkVBRF9JTVIocmluZykgSTkxNV9SSU5HX1JFQUQoUklOR19JTVIoKHJpbmcpLT5tbWlvX2Jhc2UpKQorCisjZGVmaW5lIEk5MTVfUkVBRF9OT1BJRChyaW5nKSBJOTE1X1JJTkdfUkVBRChSSU5HX05PUElEKChyaW5nKS0+bW1pb19iYXNlKSkKKyNkZWZpbmUgSTkxNV9SRUFEX1NZTkNfMChyaW5nKSBJOTE1X1JJTkdfUkVBRChSSU5HX1NZTkNfMCgocmluZyktPm1taW9fYmFzZSkpCisjZGVmaW5lIEk5MTVfUkVBRF9TWU5DXzEocmluZykgSTkxNV9SSU5HX1JFQUQoUklOR19TWU5DXzEoKHJpbmcpLT5tbWlvX2Jhc2UpKQorCiBzdHJ1Y3QgIGludGVsX3JpbmdfYnVmZmVyIHsKIAljb25zdCBjaGFyCSpuYW1lOwogCWVudW0gaW50ZWxfcmluZ19pZCB7CkBAIC0yNSw0NSArNDMsMzkgQEAKIAkJUklOR19CTFQgPSAweDQsCiAJfSBpZDsKIAl1MzIJCW1taW9fYmFzZTsKLQl1bnNpZ25lZCBsb25nCXNpemU7CiAJdm9pZAkJKnZpcnR1YWxfc3RhcnQ7CiAJc3RydWN0CQlkcm1fZGV2aWNlICpkZXY7Ci0Jc3RydWN0CQlkcm1fZ2VtX29iamVjdCAqZ2VtX29iamVjdDsKKwlzdHJ1Y3QJCWRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAogCXUzMgkJYWN0dWFsX2hlYWQ7CiAJdTMyCQloZWFkOwogCXUzMgkJdGFpbDsKIAlpbnQJCXNwYWNlOworCWludAkJc2l6ZTsKKwlpbnQJCWVmZmVjdGl2ZV9zaXplOwogCXN0cnVjdCBpbnRlbF9od19zdGF0dXNfcGFnZSBzdGF0dXNfcGFnZTsKIAotCXUzMgkJaXJxX2dlbV9zZXFubzsJCS8qIGxhc3Qgc2VxIHNlZW0gYXQgaXJxIHRpbWUgKi8KLQl1MzIJCXdhaXRpbmdfZ2VtX3NlcW5vOwotCWludAkJdXNlcl9pcnFfcmVmY291bnQ7Ci0Jdm9pZAkJKCp1c2VyX2lycV9nZXQpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOwotCXZvaWQJCSgqdXNlcl9pcnFfcHV0KShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKTsKKwlzcGlubG9ja190CWlycV9sb2NrOworCXUzMgkJaXJxX3JlZmNvdW50OworCXUzMgkJaXJxX21hc2s7CisJdTMyCQlpcnFfc2Vxbm87CQkvKiBsYXN0IHNlcSBzZWVtIGF0IGlycSB0aW1lICovCisJdTMyCQl3YWl0aW5nX3NlcW5vOworCXUzMgkJc3luY19zZXFub1tJOTE1X05VTV9SSU5HUy0xXTsKKwlib29sIF9fbXVzdF9jaGVjayAoKmlycV9nZXQpKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyk7CisJdm9pZAkJKCppcnFfcHV0KShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOwogCi0JaW50CQkoKmluaXQpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOworCWludAkJKCppbml0KShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOwogCi0Jdm9pZAkJKCp3cml0ZV90YWlsKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCSAgICAgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKKwl2b2lkCQkoKndyaXRlX3RhaWwpKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKIAkJCQkgICAgICB1MzIgdmFsdWUpOwotCXZvaWQJCSgqZmx1c2gpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCi0JCQl1MzIJaW52YWxpZGF0ZV9kb21haW5zLAotCQkJdTMyCWZsdXNoX2RvbWFpbnMpOwotCXUzMgkJKCphZGRfcmVxdWVzdCkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKLQkJCXUzMiBmbHVzaF9kb21haW5zKTsKLQl1MzIJCSgqZ2V0X3NlcW5vKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKTsKLQlpbnQJCSgqZGlzcGF0Y2hfZ2VtX2V4ZWNidWZmZXIpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCi0JCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjLAotCQkJc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cywKLQkJCXVpbnQ2NF90IGV4ZWNfb2Zmc2V0KTsKKwlpbnQgX19tdXN0X2NoZWNrICgqZmx1c2gpKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKKwkJCQkgIHUzMglpbnZhbGlkYXRlX2RvbWFpbnMsCisJCQkJICB1MzIJZmx1c2hfZG9tYWlucyk7CisJaW50CQkoKmFkZF9yZXF1ZXN0KShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCisJCQkJICAgICAgIHUzMiAqc2Vxbm8pOworCXUzMgkJKCpnZXRfc2Vxbm8pKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyk7CisJaW50CQkoKmRpc3BhdGNoX2V4ZWNidWZmZXIpKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKKwkJCQkJICAgICAgIHUzMiBvZmZzZXQsIHUzMiBsZW5ndGgpOwogCXZvaWQJCSgqY2xlYW51cCkoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKTsKIAogCS8qKgpAQCAtOTYsNyArMTA4LDcgQEAKIAkvKioKIAkgKiBEbyB3ZSBoYXZlIHNvbWUgbm90IHlldCBlbWl0dGVkIHJlcXVlc3RzIG91dHN0YW5kaW5nPwogCSAqLwotCWJvb2wgb3V0c3RhbmRpbmdfbGF6eV9yZXF1ZXN0OworCXUzMiBvdXRzdGFuZGluZ19sYXp5X3JlcXVlc3Q7CiAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBpcnFfcXVldWU7CiAJZHJtX2xvY2FsX21hcF90IG1hcDsKQEAgLTEwNSw0NCArMTE3LDU0IEBACiB9OwogCiBzdGF0aWMgaW5saW5lIHUzMgotaW50ZWxfcmVhZF9zdGF0dXNfcGFnZShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCi0JCWludCByZWcpCitpbnRlbF9yaW5nX3N5bmNfaW5kZXgoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAorCQkgICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKm90aGVyKQogewotCXUzMiAqcmVncyA9IHJpbmctPnN0YXR1c19wYWdlLnBhZ2VfYWRkcjsKLQlyZXR1cm4gcmVnc1tyZWddOworCWludCBpZHg7CisKKwkvKgorCSAqIGNzIC0+IDAgPSB2Y3MsIDEgPSBiY3MKKwkgKiB2Y3MgLT4gMCA9IGJjcywgMSA9IGNzLAorCSAqIGJjcyAtPiAwID0gY3MsIDEgPSB2Y3MuCisJICovCisKKwlpZHggPSAob3RoZXIgLSByaW5nKSAtIDE7CisJaWYgKGlkeCA8IDApCisJCWlkeCArPSBJOTE1X05VTV9SSU5HUzsKKworCXJldHVybiBpZHg7CiB9CiAKLWludCBpbnRlbF9pbml0X3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOwotdm9pZCBpbnRlbF9jbGVhbnVwX3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKTsKLWludCBpbnRlbF93YWl0X3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsIGludCBuKTsKLXZvaWQgaW50ZWxfcmluZ19iZWdpbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkgICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsIGludCBuKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGludGVsX3JpbmdfZW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKLQkJCQkgICB1bnNpZ25lZCBpbnQgZGF0YSkKK3N0YXRpYyBpbmxpbmUgdTMyCitpbnRlbF9yZWFkX3N0YXR1c19wYWdlKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKKwkJICAgICAgIGludCByZWcpCiB7Ci0JdW5zaWduZWQgaW50ICp2aXJ0ID0gcmluZy0+dmlydHVhbF9zdGFydCArIHJpbmctPnRhaWw7Ci0JKnZpcnQgPSBkYXRhOworCXJldHVybiBpb3JlYWQzMihyaW5nLT5zdGF0dXNfcGFnZS5wYWdlX2FkZHIgKyByZWcpOworfQorCit2b2lkIGludGVsX2NsZWFudXBfcmluZ19idWZmZXIoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKTsKK2ludCBfX211c3RfY2hlY2sgaW50ZWxfd2FpdF9yaW5nX2J1ZmZlcihzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsIGludCBuKTsKK2ludCBfX211c3RfY2hlY2sgaW50ZWxfcmluZ19iZWdpbihzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsIGludCBuKTsKKworc3RhdGljIGlubGluZSB2b2lkIGludGVsX3JpbmdfZW1pdChzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCisJCQkJICAgdTMyIGRhdGEpCit7CisJaW93cml0ZTMyKGRhdGEsIHJpbmctPnZpcnR1YWxfc3RhcnQgKyByaW5nLT50YWlsKTsKIAlyaW5nLT50YWlsICs9IDQ7CiB9CiAKLXZvaWQgaW50ZWxfcmluZ19hZHZhbmNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyk7Cit2b2lkIGludGVsX3JpbmdfYWR2YW5jZShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOwogCi11MzIgaW50ZWxfcmluZ19nZXRfc2Vxbm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKTsKK3UzMiBpbnRlbF9yaW5nX2dldF9zZXFubyhzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOworaW50IGludGVsX3Jpbmdfc3luYyhzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCisJCSAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnRvLAorCQkgICAgdTMyIHNlcW5vKTsKIAogaW50IGludGVsX2luaXRfcmVuZGVyX3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogaW50IGludGVsX2luaXRfYnNkX3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogaW50IGludGVsX2luaXRfYmx0X3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCi11MzIgaW50ZWxfcmluZ19nZXRfYWN0aXZlX2hlYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOwotdm9pZCBpbnRlbF9yaW5nX3NldHVwX3N0YXR1c19wYWdlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOwordTMyIGludGVsX3JpbmdfZ2V0X2FjdGl2ZV9oZWFkKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyk7Cit2b2lkIGludGVsX3Jpbmdfc2V0dXBfc3RhdHVzX3BhZ2Uoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKTsKIAogI2VuZGlmIC8qIF9JTlRFTF9SSU5HQlVGRkVSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKaW5kZXggNmJjNDJmYS4uNDVjZDM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwpAQCAtMTAyNCw5ICsxMDI0LDEzIEBACiAJaWYgKCFpbnRlbF9zZHZvX3NldF90YXJnZXRfaW5wdXQoaW50ZWxfc2R2bykpCiAJCXJldHVybjsKIAotCWlmIChpbnRlbF9zZHZvLT5oYXNfaGRtaV9tb25pdG9yICYmCi0JICAgICFpbnRlbF9zZHZvX3NldF9hdmlfaW5mb2ZyYW1lKGludGVsX3Nkdm8pKQotCQlyZXR1cm47CisJaWYgKGludGVsX3Nkdm8tPmhhc19oZG1pX21vbml0b3IpIHsKKwkJaW50ZWxfc2R2b19zZXRfZW5jb2RlKGludGVsX3Nkdm8sIFNEVk9fRU5DT0RFX0hETUkpOworCQlpbnRlbF9zZHZvX3NldF9jb2xvcmltZXRyeShpbnRlbF9zZHZvLAorCQkJCQkgICBTRFZPX0NPTE9SSU1FVFJZX1JHQjI1Nik7CisJCWludGVsX3Nkdm9fc2V0X2F2aV9pbmZvZnJhbWUoaW50ZWxfc2R2byk7CisJfSBlbHNlCisJCWludGVsX3Nkdm9fc2V0X2VuY29kZShpbnRlbF9zZHZvLCBTRFZPX0VOQ09ERV9EVkkpOwogCiAJaWYgKGludGVsX3Nkdm8tPmlzX3R2ICYmCiAJICAgICFpbnRlbF9zZHZvX3NldF90dl9mb3JtYXQoaW50ZWxfc2R2bykpCkBAIC0xMDQ1LDcgKzEwNDksOSBAQAogCiAJLyogU2V0IHRoZSBTRFZPIGNvbnRyb2wgcmVncy4gKi8KIAlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkgewotCQlzZHZveCA9IFNEVk9fQk9SREVSX0VOQUJMRTsKKwkJc2R2b3ggPSAwOworCQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA1KQorCQkJc2R2b3ggfD0gU0RWT19CT1JERVJfRU5BQkxFOwogCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykKIAkJCXNkdm94IHw9IFNEVk9fVlNZTkNfQUNUSVZFX0hJR0g7CiAJCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQpAQCAtMTA3NSw3ICsxMDgxLDggQEAKIAkJc2R2b3ggfD0gKHBpeGVsX211bHRpcGxpZXIgLSAxKSA8PCBTRFZPX1BPUlRfTVVMVElQTFlfU0hJRlQ7CiAJfQogCi0JaWYgKGlucHV0X2R0ZC5wYXJ0Mi5zZHZvX2ZsYWdzICYgU0RWT19ORUVEX1RPX1NUQUxMKQorCWlmIChpbnB1dF9kdGQucGFydDIuc2R2b19mbGFncyAmIFNEVk9fTkVFRF9UT19TVEFMTCAmJgorCSAgICBJTlRFTF9JTkZPKGRldiktPmdlbiA8IDUpCiAJCXNkdm94IHw9IFNEVk9fU1RBTExfU0VMRUNUOwogCWludGVsX3Nkdm9fd3JpdGVfc2R2b3goaW50ZWxfc2R2bywgc2R2b3gpOwogfQpAQCAtMTM5NSw2ICsxNDAyLDkgQEAKIAogCWludGVsX3Nkdm8tPmF0dGFjaGVkX291dHB1dCA9IHJlc3BvbnNlOwogCisJaW50ZWxfc2R2by0+aGFzX2hkbWlfbW9uaXRvciA9IGZhbHNlOworCWludGVsX3Nkdm8tPmhhc19oZG1pX2F1ZGlvID0gZmFsc2U7CisKIAlpZiAoKGludGVsX3Nkdm9fY29ubmVjdG9yLT5vdXRwdXRfZmxhZyAmIHJlc3BvbnNlKSA9PSAwKQogCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAllbHNlIGlmIChyZXNwb25zZSAmIFNEVk9fVE1EU19NQVNLKQpAQCAtMTkxOSwyMCArMTkyOSw3IEBACiBzdGF0aWMgYm9vbAogaW50ZWxfc2R2b19pc19oZG1pX2Nvbm5lY3RvcihzdHJ1Y3QgaW50ZWxfc2R2byAqaW50ZWxfc2R2bywgaW50IGRldmljZSkKIHsKLQlpbnQgaXNfaGRtaTsKLQotCWlmICghaW50ZWxfc2R2b19jaGVja19zdXBwX2VuY29kZShpbnRlbF9zZHZvKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKCFpbnRlbF9zZHZvX3NldF90YXJnZXRfb3V0cHV0KGludGVsX3Nkdm8sCi0JCQkJCSAgZGV2aWNlID09IDAgPyBTRFZPX09VVFBVVF9UTURTMCA6IFNEVk9fT1VUUFVUX1RNRFMxKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaXNfaGRtaSA9IDA7Ci0JaWYgKCFpbnRlbF9zZHZvX2dldF92YWx1ZShpbnRlbF9zZHZvLCBTRFZPX0NNRF9HRVRfRU5DT0RFLCAmaXNfaGRtaSwgMSkpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiAhIWlzX2hkbWk7CisJcmV0dXJuIGludGVsX3Nkdm9fY2hlY2tfc3VwcF9lbmNvZGUoaW50ZWxfc2R2byk7CiB9CiAKIHN0YXRpYyB1OApAQCAtMjAzNCwxMiArMjAzMSw3IEBACiAJY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOwogCiAJaWYgKGludGVsX3Nkdm9faXNfaGRtaV9jb25uZWN0b3IoaW50ZWxfc2R2bywgZGV2aWNlKSkgewotCQkvKiBlbmFibGUgaGRtaSBlbmNvZGluZyBtb2RlIGlmIHN1cHBvcnRlZCAqLwotCQlpbnRlbF9zZHZvX3NldF9lbmNvZGUoaW50ZWxfc2R2bywgU0RWT19FTkNPREVfSERNSSk7Ci0JCWludGVsX3Nkdm9fc2V0X2NvbG9yaW1ldHJ5KGludGVsX3Nkdm8sCi0JCQkJCSAgIFNEVk9fQ09MT1JJTUVUUllfUkdCMjU2KTsKIAkJY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQTsKLQogCQlpbnRlbF9zZHZvLT5pc19oZG1pID0gdHJ1ZTsKIAl9CiAJaW50ZWxfc2R2by0+YmFzZS5jbG9uZV9tYXNrID0gKCgxIDw8IElOVEVMX1NEVk9fTk9OX1RWX0NMT05FX0JJVCkgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKaW5kZXggMmY3NjgxOS4uOTMyMDZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCkBAIC0xMjQ1LDEwICsxMjQ1LDExIEBACiAJaW50IHR5cGU7CiAKIAkvKiBEaXNhYmxlIFRWIGludGVycnVwdHMgYXJvdW5kIGxvYWQgZGV0ZWN0IG9yIHdlJ2xsIHJlY3Vyc2UgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2ssIGlycWZsYWdzKTsKLQlpOTE1X2Rpc2FibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDAsIFBJUEVfSE9UUExVR19JTlRFUlJVUFRfRU5BQkxFIHwKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CisJaTkxNV9kaXNhYmxlX3BpcGVzdGF0KGRldl9wcml2LCAwLAorCQkJICAgICAgUElQRV9IT1RQTFVHX0lOVEVSUlVQVF9FTkFCTEUgfAogCQkJICAgICAgUElQRV9IT1RQTFVHX1RWX0lOVEVSUlVQVF9FTkFCTEUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CiAKIAlzYXZlX3R2X2RhYyA9IHR2X2RhYyA9IEk5MTVfUkVBRChUVl9EQUMpOwogCXNhdmVfdHZfY3RsID0gdHZfY3RsID0gSTkxNV9SRUFEKFRWX0NUTCk7CkBAIC0xMzAxLDEwICsxMzAyLDExIEBACiAJSTkxNV9XUklURShUVl9DVEwsIHNhdmVfdHZfY3RsKTsKIAogCS8qIFJlc3RvcmUgaW50ZXJydXB0IGNvbmZpZyAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOwotCWk5MTVfZW5hYmxlX3BpcGVzdGF0KGRldl9wcml2LCAwLCBQSVBFX0hPVFBMVUdfSU5URVJSVVBUX0VOQUJMRSB8CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCWk5MTVfZW5hYmxlX3BpcGVzdGF0KGRldl9wcml2LCAwLAorCQkJICAgICBQSVBFX0hPVFBMVUdfSU5URVJSVVBUX0VOQUJMRSB8CiAJCQkgICAgIFBJUEVfSE9UUExVR19UVl9JTlRFUlJVUFRfRU5BQkxFKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOwogCiAJcmV0dXJuIHR5cGU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZwppbmRleCA3MjczMGU5Li4yMWQ2YzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcKQEAgLTEwLDcgKzEwLDcgQEAKIAlzZWxlY3QgRkIKIAlzZWxlY3QgRlJBTUVCVUZGRVJfQ09OU09MRSBpZiAhRU1CRURERUQKIAlzZWxlY3QgRkJfQkFDS0xJR0hUIGlmIERSTV9OT1VWRUFVX0JBQ0tMSUdIVAotCXNlbGVjdCBBQ1BJX1ZJREVPIGlmIEFDUEkKKwlzZWxlY3QgQUNQSV9WSURFTyBpZiBBQ1BJICYmIFg4NiAmJiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFICYmIFZJREVPX09VVFBVVF9DT05UUk9MICYmIElOUFVUCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGZvciBvcGVuLXNvdXJjZSBuVmlkaWEgc3VwcG9ydC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9NYWtlZmlsZQppbmRleCAyM2ZhODJkLi5lMTJjOTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9NYWtlZmlsZQpAQCAtNSwyNyArNSwzMiBAQAogY2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0KIG5vdXZlYXUteSA6PSBub3V2ZWF1X2Rydi5vIG5vdXZlYXVfc3RhdGUubyBub3V2ZWF1X2NoYW5uZWwubyBub3V2ZWF1X21lbS5vIFwKICAgICAgICAgICAgICBub3V2ZWF1X29iamVjdC5vIG5vdXZlYXVfaXJxLm8gbm91dmVhdV9ub3RpZmllci5vIFwKLSAgICAgICAgICAgICBub3V2ZWF1X3NnZG1hLm8gbm91dmVhdV9kbWEubyBcCisgICAgICAgICAgICAgbm91dmVhdV9zZ2RtYS5vIG5vdXZlYXVfZG1hLm8gbm91dmVhdV91dGlsLm8gXAogICAgICAgICAgICAgIG5vdXZlYXVfYm8ubyBub3V2ZWF1X2ZlbmNlLm8gbm91dmVhdV9nZW0ubyBub3V2ZWF1X3R0bS5vIFwKICAgICAgICAgICAgICBub3V2ZWF1X2h3Lm8gbm91dmVhdV9jYWxjLm8gbm91dmVhdV9iaW9zLm8gbm91dmVhdV9pMmMubyBcCiAgICAgICAgICAgICAgbm91dmVhdV9kaXNwbGF5Lm8gbm91dmVhdV9jb25uZWN0b3IubyBub3V2ZWF1X2ZiY29uLm8gXAogICAgICAgICAgICAgIG5vdXZlYXVfZHAubyBub3V2ZWF1X3JhbWh0Lm8gXAogCSAgICAgbm91dmVhdV9wbS5vIG5vdXZlYXVfdm9sdC5vIG5vdXZlYXVfcGVyZi5vIG5vdXZlYXVfdGVtcC5vIFwKKwkgICAgIG5vdXZlYXVfbW0ubyBub3V2ZWF1X3ZtLm8gXAogICAgICAgICAgICAgIG52MDRfdGltZXIubyBcCiAgICAgICAgICAgICAgbnYwNF9tYy5vIG52NDBfbWMubyBudjUwX21jLm8gXAogICAgICAgICAgICAgIG52MDRfZmIubyBudjEwX2ZiLm8gbnYzMF9mYi5vIG52NDBfZmIubyBudjUwX2ZiLm8gbnZjMF9mYi5vIFwKICAgICAgICAgICAgICBudjA0X2ZpZm8ubyBudjEwX2ZpZm8ubyBudjQwX2ZpZm8ubyBudjUwX2ZpZm8ubyBudmMwX2ZpZm8ubyBcCiAgICAgICAgICAgICAgbnYwNF9ncmFwaC5vIG52MTBfZ3JhcGgubyBudjIwX2dyYXBoLm8gXAogICAgICAgICAgICAgIG52NDBfZ3JhcGgubyBudjUwX2dyYXBoLm8gbnZjMF9ncmFwaC5vIFwKLSAgICAgICAgICAgICBudjQwX2dyY3R4Lm8gbnY1MF9ncmN0eC5vIFwKKyAgICAgICAgICAgICBudjQwX2dyY3R4Lm8gbnY1MF9ncmN0eC5vIG52YzBfZ3JjdHgubyBcCisgICAgICAgICAgICAgbnY4NF9jcnlwdC5vIFwKICAgICAgICAgICAgICBudjA0X2luc3RtZW0ubyBudjUwX2luc3RtZW0ubyBudmMwX2luc3RtZW0ubyBcCi0gICAgICAgICAgICAgbnY1MF9jcnRjLm8gbnY1MF9kYWMubyBudjUwX3Nvci5vIFwKLSAgICAgICAgICAgICBudjUwX2N1cnNvci5vIG52NTBfZGlzcGxheS5vIG52NTBfZmJjb24ubyBcCisgICAgICAgICAgICAgbnY1MF9ldm8ubyBudjUwX2NydGMubyBudjUwX2RhYy5vIG52NTBfc29yLm8gXAorICAgICAgICAgICAgIG52NTBfY3Vyc29yLm8gbnY1MF9kaXNwbGF5Lm8gXAogICAgICAgICAgICAgIG52MDRfZGFjLm8gbnYwNF9kZnAubyBudjA0X3R2Lm8gbnYxN190di5vIG52MTdfdHZfbW9kZXMubyBcCi0gICAgICAgICAgICAgbnYwNF9jcnRjLm8gbnYwNF9kaXNwbGF5Lm8gbnYwNF9jdXJzb3IubyBudjA0X2ZiY29uLm8gXAorICAgICAgICAgICAgIG52MDRfY3J0Yy5vIG52MDRfZGlzcGxheS5vIG52MDRfY3Vyc29yLm8gXAorICAgICAgICAgICAgIG52MDRfZmJjb24ubyBudjUwX2ZiY29uLm8gbnZjMF9mYmNvbi5vIFwKICAgICAgICAgICAgICBudjEwX2dwaW8ubyBudjUwX2dwaW8ubyBcCiAJICAgICBudjUwX2NhbGMubyBcCi0JICAgICBudjA0X3BtLm8gbnY1MF9wbS5vIG52YTNfcG0ubworCSAgICAgbnYwNF9wbS5vIG52NTBfcG0ubyBudmEzX3BtLm8gXAorCSAgICAgbnY1MF92cmFtLm8gbnZjMF92cmFtLm8gXAorCSAgICAgbnY1MF92bS5vIG52YzBfdm0ubwogCiBub3V2ZWF1LSQoQ09ORklHX0RSTV9OT1VWRUFVX0RFQlVHKSArPSBub3V2ZWF1X2RlYnVnZnMubwogbm91dmVhdS0kKENPTkZJR19DT01QQVQpICs9IG5vdXZlYXVfaW9jMzIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9hY3BpLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2FjcGkuYwppbmRleCAxMTkxNTI2Li5hNTQyMzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2FjcGkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2FjcGkuYwpAQCAtMTMwLDEwICsxMzAsMTUgQEAKIAogc3RhdGljIGludCBub3V2ZWF1X2RzbV9nZXRfY2xpZW50X2lkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCWlmIChub3V2ZWF1X2RzbV9wcml2LmRoYW5kbGUgPT0gREVWSUNFX0FDUElfSEFORExFKCZwZGV2LT5kZXYpKQorCS8qIGVhc3kgb3B0aW9uIG9uZSAtIGludGVsIHZlbmRvciBJRCBtZWFucyBJbnRlZ3JhdGVkICovCisJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lOVEVMKQogCQlyZXR1cm4gVkdBX1NXSVRDSEVST09fSUdEOwotCWVsc2UKLQkJcmV0dXJuIFZHQV9TV0lUQ0hFUk9PX0RJUzsKKworCS8qIGlzIHRoaXMgZGV2aWNlIG9uIEJ1cyAwPyAtIHRoaXMgbWF5IG5lZWQgaW1wcm92aW5nICovCisJaWYgKHBkZXYtPmJ1cy0+bnVtYmVyID09IDApCisJCXJldHVybiBWR0FfU1dJVENIRVJPT19JR0Q7CisKKwlyZXR1cm4gVkdBX1NXSVRDSEVST09fRElTOwogfQogCiBzdGF0aWMgc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2hhbmRsZXIgbm91dmVhdV9kc21faGFuZGxlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmFja2xpZ2h0LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JhY2tsaWdodC5jCmluZGV4IGIxNGM4MTEuLmQzYTljNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iYWNrbGlnaHQuYwpAQCAtNTksNyArNTksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgbnY0MF9ibF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgbnY0MF9ibF9vcHMgPSB7CiAJLm9wdGlvbnMgPSBCTF9DT1JFX1NVU1BFTkRSRVNVTUUsCiAJLmdldF9icmlnaHRuZXNzID0gbnY0MF9nZXRfaW50ZW5zaXR5LAogCS51cGRhdGVfc3RhdHVzID0gbnY0MF9zZXRfaW50ZW5zaXR5LApAQCAtODIsNyArODIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgbnY1MF9ibF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgbnY1MF9ibF9vcHMgPSB7CiAJLm9wdGlvbnMgPSBCTF9DT1JFX1NVU1BFTkRSRVNVTUUsCiAJLmdldF9icmlnaHRuZXNzID0gbnY1MF9nZXRfaW50ZW5zaXR5LAogCS51cGRhdGVfc3RhdHVzID0gbnY1MF9zZXRfaW50ZW5zaXR5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYwppbmRleCBiMjI5MzU3Li4yYWVmNWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYwpAQCAtMTkyNyw3ICsxOTI3LDcgQEAKIAkgKiBvZmZzZXQgICAgICAoOCAgYml0KTogb3Bjb2RlCiAJICogb2Zmc2V0ICsgMSAgKDE2IGJpdCk6IHRpbWUKIAkgKgotCSAqIFNsZWVwIGZvciAidGltZSIgbWlsaXNlY29uZHMuCisJICogU2xlZXAgZm9yICJ0aW1lIiBtaWxsaXNlY29uZHMuCiAJICovCiAKIAl1bnNpZ25lZCB0aW1lID0gUk9NMTYoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXSk7CkBAIC0xOTM1LDcgKzE5MzUsNyBAQAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCiAJCXJldHVybiAzOwogCi0JQklPU0xPRyhiaW9zLCAiMHglMDRYOiBTbGVlcGluZyBmb3IgMHglMDRYIG1pbGlzZWNvbmRzXG4iLAorCUJJT1NMT0coYmlvcywgIjB4JTA0WDogU2xlZXBpbmcgZm9yIDB4JTA0WCBtaWxsaXNlY29uZHNcbiIsCiAJCW9mZnNldCwgdGltZSk7CiAKIAltc2xlZXAodGltZSk7CkBAIC02MDUzLDUyICs2MDUzLDE3IEBACiAJcmV0dXJuIGVudHJ5OwogfQogCi1zdGF0aWMgdm9pZCBmYWJyaWNhdGVfdmdhX291dHB1dChzdHJ1Y3QgZGNiX3RhYmxlICpkY2IsIGludCBpMmMsIGludCBoZWFkcykKK3N0YXRpYyB2b2lkIGZhYnJpY2F0ZV9kY2Jfb3V0cHV0KHN0cnVjdCBkY2JfdGFibGUgKmRjYiwgaW50IHR5cGUsIGludCBpMmMsCisJCQkJIGludCBoZWFkcywgaW50IG9yKQogewogCXN0cnVjdCBkY2JfZW50cnkgKmVudHJ5ID0gbmV3X2RjYl9lbnRyeShkY2IpOwogCi0JZW50cnktPnR5cGUgPSAwOworCWVudHJ5LT50eXBlID0gdHlwZTsKIAllbnRyeS0+aTJjX2luZGV4ID0gaTJjOwogCWVudHJ5LT5oZWFkcyA9IGhlYWRzOwotCWVudHJ5LT5sb2NhdGlvbiA9IERDQl9MT0NfT05fQ0hJUDsKLQllbnRyeS0+b3IgPSAxOwotfQotCi1zdGF0aWMgdm9pZCBmYWJyaWNhdGVfZHZpX2lfb3V0cHV0KHN0cnVjdCBkY2JfdGFibGUgKmRjYiwgYm9vbCB0d29IZWFkcykKLXsKLQlzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSA9IG5ld19kY2JfZW50cnkoZGNiKTsKLQotCWVudHJ5LT50eXBlID0gMjsKLQllbnRyeS0+aTJjX2luZGV4ID0gTEVHQUNZX0kyQ19QQU5FTDsKLQllbnRyeS0+aGVhZHMgPSB0d29IZWFkcyA/IDMgOiAxOwotCWVudHJ5LT5sb2NhdGlvbiA9ICFEQ0JfTE9DX09OX0NISVA7CS8qIGllIE9GRiBDSElQICovCi0JZW50cnktPm9yID0gMTsJLyogbWVhbnMgfDB4MTAgZ2V0cyBzZXQgb24gQ1JFX0xDRF9fSU5ERVggKi8KLQllbnRyeS0+ZHVhbGxpbmtfcG9zc2libGUgPSBmYWxzZTsgLyogU2lJMTY0IGFuZCBjby4gYXJlIHNpbmdsZSBsaW5rICovCi0KLSNpZiAwCi0JLyoKLQkgKiBGb3IgZHZpLWEgZWl0aGVyIGNydGMgcHJvYmFibHkgd29ya3MsIGJ1dCBteSBjYXJkIGFwcGVhcnMgdG8gb25seQotCSAqIHN1cHBvcnQgZHZpLWQuICAibnZpZGlhIiBzdGlsbCBhdHRlbXB0cyB0byBwcm9ncmFtIGl0IGZvciBkdmktYSwKLQkgKiBkb2luZyB0aGUgZnVsbCBmcCBvdXRwdXQgc2V0dXAgKHByb2dyYW0gMHg2ODA4Li4gZnAgZGltZW5zaW9uIHJlZ3MsCi0JICogc2V0dGluZyAweDY4MDg0OCB0byAweDEwMDAwMTExIHRvIGVuYWJsZSwgbWF5YmUgc2V0dGluZyAweDY4MDg4MCk7Ci0JICogdGhlIG1vbml0b3IgcGlja3MgdXAgdGhlIG1vZGUgcmVzIG9rIGFuZCBsaWdodHMgdXAsIGJ1dCBubyBwaXhlbAotCSAqIGRhdGEgYXBwZWFycywgc28gdGhlIGJvYXJkIG1hbnVmYWN0dXJlciBwcm9iYWJseSBjb25uZWN0ZWQgdXAgdGhlCi0JICogc3luYyBsaW5lcywgYnV0IG1pc3NlZCB0aGUgdmlkZW8gdHJhY2VzIC8gY29tcG9uZW50cwotCSAqCi0JICogd2l0aCB0aGlzIGludHJvZHVjdGlvbiwgZHZpLWEgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci4KLQkgKi8KLQlmYWJyaWNhdGVfdmdhX291dHB1dChkY2IsIExFR0FDWV9JMkNfUEFORUwsIGVudHJ5LT5oZWFkcyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgZmFicmljYXRlX3R2X291dHB1dChzdHJ1Y3QgZGNiX3RhYmxlICpkY2IsIGJvb2wgdHdvSGVhZHMpCi17Ci0Jc3RydWN0IGRjYl9lbnRyeSAqZW50cnkgPSBuZXdfZGNiX2VudHJ5KGRjYik7Ci0KLQllbnRyeS0+dHlwZSA9IDE7Ci0JZW50cnktPmkyY19pbmRleCA9IExFR0FDWV9JMkNfVFY7Ci0JZW50cnktPmhlYWRzID0gdHdvSGVhZHMgPyAzIDogMTsKLQllbnRyeS0+bG9jYXRpb24gPSAhRENCX0xPQ19PTl9DSElQOwkvKiBpZSBPRkYgQ0hJUCAqLworCWlmICh0eXBlICE9IE9VVFBVVF9BTkFMT0cpCisJCWVudHJ5LT5sb2NhdGlvbiA9ICFEQ0JfTE9DX09OX0NISVA7IC8qIGllIE9GRiBDSElQICovCisJZW50cnktPm9yID0gb3I7CiB9CiAKIHN0YXRpYyBib29sCkBAIC02MzY1LDggKzYzMzAsMzYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQKK2ZhYnJpY2F0ZV9kY2JfZW5jb2Rlcl90YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgbnZiaW9zICpiaW9zKQoreworCXN0cnVjdCBkY2JfdGFibGUgKmRjYiA9ICZiaW9zLT5kY2I7CisJaW50IGFsbF9oZWFkcyA9IChudl90d29faGVhZHMoZGV2KSA/IDMgOiAxKTsKKworI2lmZGVmIF9fcG93ZXJwY19fCisJLyogQXBwbGUgaU1hYyBHNCBOVjE3ICovCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDUiKSkgeworCQlmYWJyaWNhdGVfZGNiX291dHB1dChkY2IsIE9VVFBVVF9UTURTLCAwLCBhbGxfaGVhZHMsIDEpOworCQlmYWJyaWNhdGVfZGNiX291dHB1dChkY2IsIE9VVFBVVF9BTkFMT0csIDEsIGFsbF9oZWFkcywgMik7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKworCS8qIE1ha2UgdXAgc29tZSBzYW5lIGRlZmF1bHRzICovCisJZmFicmljYXRlX2RjYl9vdXRwdXQoZGNiLCBPVVRQVVRfQU5BTE9HLCBMRUdBQ1lfSTJDX0NSVCwgMSwgMSk7CisKKwlpZiAobnYwNF90dl9pZGVudGlmeShkZXYsIGJpb3MtPmxlZ2FjeS5pMmNfaW5kaWNlcy50dikgPj0gMCkKKwkJZmFicmljYXRlX2RjYl9vdXRwdXQoZGNiLCBPVVRQVVRfVFYsIExFR0FDWV9JMkNfVFYsCisJCQkJICAgICBhbGxfaGVhZHMsIDApOworCisJZWxzZSBpZiAoYmlvcy0+dG1kcy5vdXRwdXQwX3NjcmlwdF9wdHIgfHwKKwkJIGJpb3MtPnRtZHMub3V0cHV0MV9zY3JpcHRfcHRyKQorCQlmYWJyaWNhdGVfZGNiX291dHB1dChkY2IsIE9VVFBVVF9UTURTLCBMRUdBQ1lfSTJDX1BBTkVMLAorCQkJCSAgICAgYWxsX2hlYWRzLCAxKTsKK30KKwogc3RhdGljIGludAotcGFyc2VfZGNiX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBudmJpb3MgKmJpb3MsIGJvb2wgdHdvSGVhZHMpCitwYXJzZV9kY2JfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG52YmlvcyAqYmlvcykKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkY2JfdGFibGUgKmRjYiA9ICZiaW9zLT5kY2I7CkBAIC02Mzg2LDEyICs2Mzc5LDcgQEAKIAogCS8qIHRoaXMgc2l0dWF0aW9uIGxpa2VseSBtZWFucyBhIHJlYWxseSBvbGQgY2FyZCwgcHJlIERDQiAqLwogCWlmIChkY2JwdHIgPT0gMHgwKSB7Ci0JCU5WX0lORk8oZGV2LCAiQXNzdW1pbmcgYSBDUlQgb3V0cHV0IGV4aXN0c1xuIik7Ci0JCWZhYnJpY2F0ZV92Z2Ffb3V0cHV0KGRjYiwgTEVHQUNZX0kyQ19DUlQsIDEpOwotCi0JCWlmIChudjA0X3R2X2lkZW50aWZ5KGRldiwgYmlvcy0+bGVnYWN5LmkyY19pbmRpY2VzLnR2KSA+PSAwKQotCQkJZmFicmljYXRlX3R2X291dHB1dChkY2IsIHR3b0hlYWRzKTsKLQorCQlmYWJyaWNhdGVfZGNiX2VuY29kZXJfdGFibGUoZGV2LCBiaW9zKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC02NDUxLDIxICs2NDM5LDcgQEAKIAkJICovCiAJCU5WX1RSQUNFV0FSTihkZXYsICJObyB1c2VmdWwgaW5mb3JtYXRpb24gaW4gQklPUyBvdXRwdXQgdGFibGU7ICIKIAkJCQkgICJhZGRpbmcgYWxsIHBvc3NpYmxlIG91dHB1dHNcbiIpOwotCQlmYWJyaWNhdGVfdmdhX291dHB1dChkY2IsIExFR0FDWV9JMkNfQ1JULCAxKTsKLQotCQkvKgotCQkgKiBBdHRlbXB0IHRvIGRldGVjdCBUViBiZWZvcmUgRFZJIGJlY2F1c2UgdGhlIHRlc3QKLQkJICogZm9yIHRoZSBmb3JtZXIgaXMgbW9yZSBhY2N1cmF0ZSBhbmQgaXQgcnVsZXMgdGhlCi0JCSAqIGxhdHRlciBvdXQuCi0JCSAqLwotCQlpZiAobnYwNF90dl9pZGVudGlmeShkZXYsCi0JCQkJICAgICBiaW9zLT5sZWdhY3kuaTJjX2luZGljZXMudHYpID49IDApCi0JCQlmYWJyaWNhdGVfdHZfb3V0cHV0KGRjYiwgdHdvSGVhZHMpOwotCi0JCWVsc2UgaWYgKGJpb3MtPnRtZHMub3V0cHV0MF9zY3JpcHRfcHRyIHx8Ci0JCQkgYmlvcy0+dG1kcy5vdXRwdXQxX3NjcmlwdF9wdHIpCi0JCQlmYWJyaWNhdGVfZHZpX2lfb3V0cHV0KGRjYiwgdHdvSGVhZHMpOwotCisJCWZhYnJpY2F0ZV9kY2JfZW5jb2Rlcl90YWJsZShkZXYsIGJpb3MpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTY4NTksNyArNjgzMyw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHBhcnNlX2RjYl90YWJsZShkZXYsIGJpb3MsIG52X3R3b19oZWFkcyhkZXYpKTsKKwlyZXQgPSBwYXJzZV9kY2JfdGFibGUoZGV2LCBiaW9zKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKaW5kZXggYzQxZTFjMi4uYTdmYWUyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYwpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIm5vdXZlYXVfZHJtLmgiCiAjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKICNpbmNsdWRlICJub3V2ZWF1X2RtYS5oIgorI2luY2x1ZGUgIm5vdXZlYXVfbW0uaCIKKyNpbmNsdWRlICJub3V2ZWF1X3ZtLmgiCiAKICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNDYsODIgKzQ4LDUxIEBACiAJaWYgKHVubGlrZWx5KG52Ym8tPmdlbSkpCiAJCURSTV9FUlJPUigiYm8gJXAgc3RpbGwgYXR0YWNoZWQgdG8gR0VNIG9iamVjdFxuIiwgYm8pOwogCi0JaWYgKG52Ym8tPnRpbGUpCi0JCW52MTBfbWVtX2V4cGlyZV90aWxpbmcoZGV2LCBudmJvLT50aWxlLCBOVUxMKTsKLQorCW52MTBfbWVtX3B1dF90aWxlX3JlZ2lvbihkZXYsIG52Ym8tPnRpbGUsIE5VTEwpOworCW5vdXZlYXVfdm1fcHV0KCZudmJvLT52bWEpOwogCWtmcmVlKG52Ym8pOwogfQogCiBzdGF0aWMgdm9pZAotbm91dmVhdV9ib19maXh1cF9hbGlnbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkgICAgICAgdWludDMyX3QgdGlsZV9tb2RlLCB1aW50MzJfdCB0aWxlX2ZsYWdzLAotCQkgICAgICAgaW50ICphbGlnbiwgaW50ICpzaXplKQorbm91dmVhdV9ib19maXh1cF9hbGlnbihzdHJ1Y3Qgbm91dmVhdV9ibyAqbnZibywgaW50ICphbGlnbiwgaW50ICpzaXplLAorCQkgICAgICAgaW50ICpwYWdlX3NoaWZ0KQogewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gbm91dmVhdV9iZGV2KG52Ym8tPmJvLmJkZXYpOwogCi0JLyoKLQkgKiBTb21lIG9mIHRoZSB0aWxlX2ZsYWdzIGhhdmUgYSBwZXJpb2RpYyBzdHJ1Y3R1cmUgb2YgTio0MDk2IGJ5dGVzLAotCSAqIGFsaWduIHRvIHRvIHRoYXQgYXMgd2VsbCBhcyB0aGUgcGFnZSBzaXplLiBBbGlnbiB0aGUgc2l6ZSB0byB0aGUKLQkgKiBhcHByb3ByaWF0ZSBib3VuZGFyaWVzLiBUaGlzIGRvZXMgaW1wbHkgdGhhdCBzaXplcyBhcmUgcm91bmRlZCB1cAotCSAqIDMtNyBwYWdlcywgc28gYmUgYXdhcmUgb2YgdGhpcyBhbmQgZG8gbm90IHdhc3RlIG1lbW9yeSBieSBhbGxvY2F0aW5nCi0JICogbWFueSBzbWFsbCBidWZmZXJzLgotCSAqLwotCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID09IE5WXzUwKSB7Ci0JCXVpbnQzMl90IGJsb2NrX3NpemUgPSBkZXZfcHJpdi0+dnJhbV9zaXplID4+IDE1OwotCQlpbnQgaTsKLQotCQlzd2l0Y2ggKHRpbGVfZmxhZ3MpIHsKLQkJY2FzZSAweDE4MDA6Ci0JCWNhc2UgMHgyODAwOgotCQljYXNlIDB4NDgwMDoKLQkJY2FzZSAweDdhMDA6Ci0JCQlpZiAoaXNfcG93ZXJfb2ZfMihibG9ja19zaXplKSkgewotCQkJCWZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKSB7Ci0JCQkJCSphbGlnbiA9IDEyICogaSAqIGJsb2NrX3NpemU7Ci0JCQkJCWlmICghKCphbGlnbiAlIDY1NTM2KSkKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJZm9yIChpID0gMTsgaSA8IDEwOyBpKyspIHsKLQkJCQkJKmFsaWduID0gOCAqIGkgKiBibG9ja19zaXplOwotCQkJCQlpZiAoISgqYWxpZ24gJSA2NTUzNikpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQkqc2l6ZSA9IHJvdW5kdXAoKnNpemUsICphbGlnbik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0KLQl9IGVsc2UgewotCQlpZiAodGlsZV9tb2RlKSB7CisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkgeworCQlpZiAobnZiby0+dGlsZV9tb2RlKSB7CiAJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHg0MCkgewogCQkJCSphbGlnbiA9IDY1NTM2OwotCQkJCSpzaXplID0gcm91bmR1cCgqc2l6ZSwgNjQgKiB0aWxlX21vZGUpOworCQkJCSpzaXplID0gcm91bmR1cCgqc2l6ZSwgNjQgKiBudmJvLT50aWxlX21vZGUpOwogCiAJCQl9IGVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4MzApIHsKIAkJCQkqYWxpZ24gPSAzMjc2ODsKLQkJCQkqc2l6ZSA9IHJvdW5kdXAoKnNpemUsIDY0ICogdGlsZV9tb2RlKTsKKwkJCQkqc2l6ZSA9IHJvdW5kdXAoKnNpemUsIDY0ICogbnZiby0+dGlsZV9tb2RlKTsKIAogCQkJfSBlbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDIwKSB7CiAJCQkJKmFsaWduID0gMTYzODQ7Ci0JCQkJKnNpemUgPSByb3VuZHVwKCpzaXplLCA2NCAqIHRpbGVfbW9kZSk7CisJCQkJKnNpemUgPSByb3VuZHVwKCpzaXplLCA2NCAqIG52Ym8tPnRpbGVfbW9kZSk7CiAKIAkJCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHgxMCkgewogCQkJCSphbGlnbiA9IDE2Mzg0OwotCQkJCSpzaXplID0gcm91bmR1cCgqc2l6ZSwgMzIgKiB0aWxlX21vZGUpOworCQkJCSpzaXplID0gcm91bmR1cCgqc2l6ZSwgMzIgKiBudmJvLT50aWxlX21vZGUpOwogCQkJfQogCQl9CisJfSBlbHNlIHsKKwkJaWYgKGxpa2VseShkZXZfcHJpdi0+Y2hhbl92bSkpIHsKKwkJCWlmICgqc2l6ZSA+IDI1NiAqIDEwMjQpCisJCQkJKnBhZ2Vfc2hpZnQgPSBkZXZfcHJpdi0+Y2hhbl92bS0+bHBnX3NoaWZ0OworCQkJZWxzZQorCQkJCSpwYWdlX3NoaWZ0ID0gZGV2X3ByaXYtPmNoYW5fdm0tPnNwZ19zaGlmdDsKKwkJfSBlbHNlIHsKKwkJCSpwYWdlX3NoaWZ0ID0gMTI7CisJCX0KKworCQkqc2l6ZSA9IHJvdW5kdXAoKnNpemUsICgxIDw8ICpwYWdlX3NoaWZ0KSk7CisJCSphbGlnbiA9IG1heCgoMSA8PCAqcGFnZV9zaGlmdCksICphbGlnbik7CiAJfQogCi0JLyogQUxJR04gd29ya3Mgb25seSBvbiBwb3dlcnMgb2YgdHdvLiAqLwogCSpzaXplID0gcm91bmR1cCgqc2l6ZSwgUEFHRV9TSVpFKTsKLQotCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID09IE5WXzUwKSB7Ci0JCSpzaXplID0gcm91bmR1cCgqc2l6ZSwgNjU1MzYpOwotCQkqYWxpZ24gPSBtYXgoNjU1MzYsICphbGlnbik7Ci0JfQogfQogCiBpbnQKQEAgLTEzMiw3ICsxMDMsNyBAQAogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfYm8gKm52Ym87Ci0JaW50IHJldCA9IDA7CisJaW50IHJldCA9IDAsIHBhZ2Vfc2hpZnQgPSAwOwogCiAJbnZibyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBub3V2ZWF1X2JvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFudmJvKQpAQCAtMTQ1LDEwICsxMTYsMTggQEAKIAludmJvLT50aWxlX2ZsYWdzID0gdGlsZV9mbGFnczsKIAludmJvLT5iby5iZGV2ID0gJmRldl9wcml2LT50dG0uYmRldjsKIAotCW5vdXZlYXVfYm9fZml4dXBfYWxpZ24oZGV2LCB0aWxlX21vZGUsIG5vdXZlYXVfYm9fdGlsZV9sYXlvdXQobnZibyksCi0JCQkgICAgICAgJmFsaWduLCAmc2l6ZSk7CisJbm91dmVhdV9ib19maXh1cF9hbGlnbihudmJvLCAmYWxpZ24sICZzaXplLCAmcGFnZV9zaGlmdCk7CiAJYWxpZ24gPj49IFBBR0VfU0hJRlQ7CiAKKwlpZiAoIW52Ym8tPm5vX3ZtICYmIGRldl9wcml2LT5jaGFuX3ZtKSB7CisJCXJldCA9IG5vdXZlYXVfdm1fZ2V0KGRldl9wcml2LT5jaGFuX3ZtLCBzaXplLCBwYWdlX3NoaWZ0LAorCQkJCSAgICAgTlZfTUVNX0FDQ0VTU19SVywgJm52Ym8tPnZtYSk7CisJCWlmIChyZXQpIHsKKwkJCWtmcmVlKG52Ym8pOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwogCW5vdXZlYXVfYm9fcGxhY2VtZW50X3NldChudmJvLCBmbGFncywgMCk7CiAKIAludmJvLT5jaGFubmVsID0gY2hhbjsKQEAgLTE2MSw2ICsxNDAsMTEgQEAKIAl9CiAJbnZiby0+Y2hhbm5lbCA9IE5VTEw7CiAKKwlpZiAobnZiby0+dm1hLm5vZGUpIHsKKwkJaWYgKG52Ym8tPmJvLm1lbS5tZW1fdHlwZSA9PSBUVE1fUExfVlJBTSkKKwkJCW52Ym8tPmJvLm9mZnNldCA9IG52Ym8tPnZtYS5vZmZzZXQ7CisJfQorCiAJKnBudmJvID0gbnZibzsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0NCw3ICsyMjgsNyBAQAogCiAJbm91dmVhdV9ib19wbGFjZW1lbnRfc2V0KG52Ym8sIG1lbXR5cGUsIDApOwogCi0JcmV0ID0gdHRtX2JvX3ZhbGlkYXRlKGJvLCAmbnZiby0+cGxhY2VtZW50LCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKwlyZXQgPSBub3V2ZWF1X2JvX3ZhbGlkYXRlKG52Ym8sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCWlmIChyZXQgPT0gMCkgewogCQlzd2l0Y2ggKGJvLT5tZW0ubWVtX3R5cGUpIHsKIAkJY2FzZSBUVE1fUExfVlJBTToKQEAgLTI4MCw3ICsyNjQsNyBAQAogCiAJbm91dmVhdV9ib19wbGFjZW1lbnRfc2V0KG52Ym8sIGJvLT5tZW0ucGxhY2VtZW50LCAwKTsKIAotCXJldCA9IHR0bV9ib192YWxpZGF0ZShibywgJm52Ym8tPnBsYWNlbWVudCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJcmV0ID0gbm91dmVhdV9ib192YWxpZGF0ZShudmJvLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAlpZiAocmV0ID09IDApIHsKIAkJc3dpdGNoIChiby0+bWVtLm1lbV90eXBlKSB7CiAJCWNhc2UgVFRNX1BMX1ZSQU06CkBAIC0zMTksNiArMzAzLDI1IEBACiAJCXR0bV9ib19rdW5tYXAoJm52Ym8tPmttYXApOwogfQogCitpbnQKK25vdXZlYXVfYm9fdmFsaWRhdGUoc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8sIGJvb2wgaW50ZXJydXB0aWJsZSwKKwkJICAgIGJvb2wgbm9fd2FpdF9yZXNlcnZlLCBib29sIG5vX3dhaXRfZ3B1KQoreworCWludCByZXQ7CisKKwlyZXQgPSB0dG1fYm9fdmFsaWRhdGUoJm52Ym8tPmJvLCAmbnZiby0+cGxhY2VtZW50LCBpbnRlcnJ1cHRpYmxlLAorCQkJICAgICAgbm9fd2FpdF9yZXNlcnZlLCBub193YWl0X2dwdSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChudmJvLT52bWEubm9kZSkgeworCQlpZiAobnZiby0+Ym8ubWVtLm1lbV90eXBlID09IFRUTV9QTF9WUkFNKQorCQkJbnZiby0+Ym8ub2Zmc2V0ID0gbnZiby0+dm1hLm9mZnNldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogdTE2CiBub3V2ZWF1X2JvX3JkMTYoc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8sIHVuc2lnbmVkIGluZGV4KQogewpAQCAtNDEwLDM3ICs0MTMsNDAgQEAKIAkJbWFuLT5kZWZhdWx0X2NhY2hpbmcgPSBUVE1fUExfRkxBR19DQUNIRUQ7CiAJCWJyZWFrOwogCWNhc2UgVFRNX1BMX1ZSQU06Ci0JCW1hbi0+ZnVuYyA9ICZ0dG1fYm9fbWFuYWdlcl9mdW5jOworCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgeworCQkJbWFuLT5mdW5jID0gJm5vdXZlYXVfdnJhbV9tYW5hZ2VyOworCQkJbWFuLT5pb19yZXNlcnZlX2Zhc3RwYXRoID0gZmFsc2U7CisJCQltYW4tPnVzZV9pb19yZXNlcnZlX2xydSA9IHRydWU7CisJCX0gZWxzZSB7CisJCQltYW4tPmZ1bmMgPSAmdHRtX2JvX21hbmFnZXJfZnVuYzsKKwkJfQogCQltYW4tPmZsYWdzID0gVFRNX01FTVRZUEVfRkxBR19GSVhFRCB8CiAJCQkgICAgIFRUTV9NRU1UWVBFX0ZMQUdfTUFQUEFCTEU7CiAJCW1hbi0+YXZhaWxhYmxlX2NhY2hpbmcgPSBUVE1fUExfRkxBR19VTkNBQ0hFRCB8CiAJCQkJCSBUVE1fUExfRkxBR19XQzsKIAkJbWFuLT5kZWZhdWx0X2NhY2hpbmcgPSBUVE1fUExfRkxBR19XQzsKLQkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNTApCi0JCQltYW4tPmdwdV9vZmZzZXQgPSAweDQwMDAwMDAwOwotCQllbHNlCi0JCQltYW4tPmdwdV9vZmZzZXQgPSAwOwogCQlicmVhazsKIAljYXNlIFRUTV9QTF9UVDoKIAkJbWFuLT5mdW5jID0gJnR0bV9ib19tYW5hZ2VyX2Z1bmM7CiAJCXN3aXRjaCAoZGV2X3ByaXYtPmdhcnRfaW5mby50eXBlKSB7CiAJCWNhc2UgTk9VVkVBVV9HQVJUX0FHUDoKIAkJCW1hbi0+ZmxhZ3MgPSBUVE1fTUVNVFlQRV9GTEFHX01BUFBBQkxFOwotCQkJbWFuLT5hdmFpbGFibGVfY2FjaGluZyA9IFRUTV9QTF9GTEFHX1VOQ0FDSEVEOwotCQkJbWFuLT5kZWZhdWx0X2NhY2hpbmcgPSBUVE1fUExfRkxBR19VTkNBQ0hFRDsKKwkJCW1hbi0+YXZhaWxhYmxlX2NhY2hpbmcgPSBUVE1fUExfRkxBR19VTkNBQ0hFRCB8CisJCQkJVFRNX1BMX0ZMQUdfV0M7CisJCQltYW4tPmRlZmF1bHRfY2FjaGluZyA9IFRUTV9QTF9GTEFHX1dDOwogCQkJYnJlYWs7CiAJCWNhc2UgTk9VVkVBVV9HQVJUX1NHRE1BOgogCQkJbWFuLT5mbGFncyA9IFRUTV9NRU1UWVBFX0ZMQUdfTUFQUEFCTEUgfAogCQkJCSAgICAgVFRNX01FTVRZUEVfRkxBR19DTUE7CiAJCQltYW4tPmF2YWlsYWJsZV9jYWNoaW5nID0gVFRNX1BMX01BU0tfQ0FDSElORzsKIAkJCW1hbi0+ZGVmYXVsdF9jYWNoaW5nID0gVFRNX1BMX0ZMQUdfQ0FDSEVEOworCQkJbWFuLT5ncHVfb2Zmc2V0ID0gZGV2X3ByaXYtPmdhcnRfaW5mby5hcGVyX2Jhc2U7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCU5WX0VSUk9SKGRldiwgIlVua25vd24gR0FSVCB0eXBlOiAlZFxuIiwKIAkJCQkgZGV2X3ByaXYtPmdhcnRfaW5mby50eXBlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCW1hbi0+Z3B1X29mZnNldCA9IGRldl9wcml2LT52bV9nYXJ0X2Jhc2U7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCU5WX0VSUk9SKGRldiwgIlVuc3VwcG9ydGVkIG1lbW9yeSB0eXBlICV1XG4iLCAodW5zaWduZWQpdHlwZSk7CkBAIC00ODUsMTYgKzQ5MSw5IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChudmJvLT5jaGFubmVsKSB7Ci0JCXJldCA9IG5vdXZlYXVfZmVuY2Vfc3luYyhmZW5jZSwgbnZiby0+Y2hhbm5lbCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQl9Ci0KIAlyZXQgPSB0dG1fYm9fbW92ZV9hY2NlbF9jbGVhbnVwKCZudmJvLT5ibywgZmVuY2UsIE5VTEwsIGV2aWN0LAogCQkJCQlub193YWl0X3Jlc2VydmUsIG5vX3dhaXRfZ3B1LCBuZXdfbWVtKTsKLW91dDoKLQlub3V2ZWF1X2ZlbmNlX3VucmVmKCh2b2lkICopJmZlbmNlKTsKKwlub3V2ZWF1X2ZlbmNlX3VucmVmKCZmZW5jZSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTE2LDYgKzUxNSw1OCBAQAogfQogCiBzdGF0aWMgaW50CitudmMwX2JvX21vdmVfbTJtZihzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAorCQkgIHN0cnVjdCB0dG1fbWVtX3JlZyAqb2xkX21lbSwgc3RydWN0IHR0bV9tZW1fcmVnICpuZXdfbWVtKQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IG5vdXZlYXVfYmRldihiby0+YmRldik7CisJc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSBub3V2ZWF1X2JvKGJvKTsKKwl1NjQgc3JjX29mZnNldCA9IG9sZF9tZW0tPnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CisJdTY0IGRzdF9vZmZzZXQgPSBuZXdfbWVtLT5zdGFydCA8PCBQQUdFX1NISUZUOworCXUzMiBwYWdlX2NvdW50ID0gbmV3X21lbS0+bnVtX3BhZ2VzOworCWludCByZXQ7CisKKwlpZiAoIW52Ym8tPm5vX3ZtKSB7CisJCWlmIChvbGRfbWVtLT5tZW1fdHlwZSA9PSBUVE1fUExfVlJBTSkKKwkJCXNyY19vZmZzZXQgID0gbnZiby0+dm1hLm9mZnNldDsKKwkJZWxzZQorCQkJc3JjX29mZnNldCArPSBkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfYmFzZTsKKworCQlpZiAobmV3X21lbS0+bWVtX3R5cGUgPT0gVFRNX1BMX1ZSQU0pCisJCQlkc3Rfb2Zmc2V0ICA9IG52Ym8tPnZtYS5vZmZzZXQ7CisJCWVsc2UKKwkJCWRzdF9vZmZzZXQgKz0gZGV2X3ByaXYtPmdhcnRfaW5mby5hcGVyX2Jhc2U7CisJfQorCisJcGFnZV9jb3VudCA9IG5ld19tZW0tPm51bV9wYWdlczsKKwl3aGlsZSAocGFnZV9jb3VudCkgeworCQlpbnQgbGluZV9jb3VudCA9IChwYWdlX2NvdW50ID4gMjA0NykgPyAyMDQ3IDogcGFnZV9jb3VudDsKKworCQlyZXQgPSBSSU5HX1NQQUNFKGNoYW4sIDEyKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJQkVHSU5fTlZDMChjaGFuLCAyLCBOdlN1Yk0yTUYsIDB4MDIzOCwgMik7CisJCU9VVF9SSU5HICAoY2hhbiwgdXBwZXJfMzJfYml0cyhkc3Rfb2Zmc2V0KSk7CisJCU9VVF9SSU5HICAoY2hhbiwgbG93ZXJfMzJfYml0cyhkc3Rfb2Zmc2V0KSk7CisJCUJFR0lOX05WQzAoY2hhbiwgMiwgTnZTdWJNMk1GLCAweDAzMGMsIDYpOworCQlPVVRfUklORyAgKGNoYW4sIHVwcGVyXzMyX2JpdHMoc3JjX29mZnNldCkpOworCQlPVVRfUklORyAgKGNoYW4sIGxvd2VyXzMyX2JpdHMoc3JjX29mZnNldCkpOworCQlPVVRfUklORyAgKGNoYW4sIFBBR0VfU0laRSk7IC8qIHNyY19waXRjaCAqLworCQlPVVRfUklORyAgKGNoYW4sIFBBR0VfU0laRSk7IC8qIGRzdF9waXRjaCAqLworCQlPVVRfUklORyAgKGNoYW4sIFBBR0VfU0laRSk7IC8qIGxpbmVfbGVuZ3RoICovCisJCU9VVF9SSU5HICAoY2hhbiwgbGluZV9jb3VudCk7CisJCUJFR0lOX05WQzAoY2hhbiwgMiwgTnZTdWJNMk1GLCAweDAzMDAsIDEpOworCQlPVVRfUklORyAgKGNoYW4sIDB4MDAxMDAxMTApOworCisJCXBhZ2VfY291bnQgLT0gbGluZV9jb3VudDsKKwkJc3JjX29mZnNldCArPSAoUEFHRV9TSVpFICogbGluZV9jb3VudCk7CisJCWRzdF9vZmZzZXQgKz0gKFBBR0VfU0laRSAqIGxpbmVfY291bnQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBudjUwX2JvX21vdmVfbTJtZihzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogCQkgIHN0cnVjdCB0dG1fbWVtX3JlZyAqb2xkX21lbSwgc3RydWN0IHR0bV9tZW1fcmVnICpuZXdfbWVtKQogewpAQCAtNTI5LDE0ICs1ODAsMTQgQEAKIAlkc3Rfb2Zmc2V0ID0gbmV3X21lbS0+c3RhcnQgPDwgUEFHRV9TSElGVDsKIAlpZiAoIW52Ym8tPm5vX3ZtKSB7CiAJCWlmIChvbGRfbWVtLT5tZW1fdHlwZSA9PSBUVE1fUExfVlJBTSkKLQkJCXNyY19vZmZzZXQgKz0gZGV2X3ByaXYtPnZtX3ZyYW1fYmFzZTsKKwkJCXNyY19vZmZzZXQgID0gbnZiby0+dm1hLm9mZnNldDsKIAkJZWxzZQotCQkJc3JjX29mZnNldCArPSBkZXZfcHJpdi0+dm1fZ2FydF9iYXNlOworCQkJc3JjX29mZnNldCArPSBkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfYmFzZTsKIAogCQlpZiAobmV3X21lbS0+bWVtX3R5cGUgPT0gVFRNX1BMX1ZSQU0pCi0JCQlkc3Rfb2Zmc2V0ICs9IGRldl9wcml2LT52bV92cmFtX2Jhc2U7CisJCQlkc3Rfb2Zmc2V0ICA9IG52Ym8tPnZtYS5vZmZzZXQ7CiAJCWVsc2UKLQkJCWRzdF9vZmZzZXQgKz0gZGV2X3ByaXYtPnZtX2dhcnRfYmFzZTsKKwkJCWRzdF9vZmZzZXQgKz0gZGV2X3ByaXYtPmdhcnRfaW5mby5hcGVyX2Jhc2U7CiAJfQogCiAJcmV0ID0gUklOR19TUEFDRShjaGFuLCAzKTsKQEAgLTY4MywxNyArNzM0LDI3IEBACiAJaW50IHJldDsKIAogCWNoYW4gPSBudmJvLT5jaGFubmVsOwotCWlmICghY2hhbiB8fCBudmJvLT5ub192bSkKKwlpZiAoIWNoYW4gfHwgbnZiby0+bm9fdm0pIHsKIAkJY2hhbiA9IGRldl9wcml2LT5jaGFubmVsOworCQltdXRleF9sb2NrX25lc3RlZCgmY2hhbi0+bXV0ZXgsIE5PVVZFQVVfS0NIQU5ORUxfTVVURVgpOworCX0KIAogCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNTApCiAJCXJldCA9IG52MDRfYm9fbW92ZV9tMm1mKGNoYW4sIGJvLCAmYm8tPm1lbSwgbmV3X21lbSk7CiAJZWxzZQorCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfQzApCiAJCXJldCA9IG52NTBfYm9fbW92ZV9tMm1mKGNoYW4sIGJvLCAmYm8tPm1lbSwgbmV3X21lbSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwllbHNlCisJCXJldCA9IG52YzBfYm9fbW92ZV9tMm1mKGNoYW4sIGJvLCAmYm8tPm1lbSwgbmV3X21lbSk7CisJaWYgKHJldCA9PSAwKSB7CisJCXJldCA9IG5vdXZlYXVfYm9fbW92ZV9hY2NlbF9jbGVhbnVwKGNoYW4sIG52Ym8sIGV2aWN0LAorCQkJCQkJICAgIG5vX3dhaXRfcmVzZXJ2ZSwKKwkJCQkJCSAgICBub193YWl0X2dwdSwgbmV3X21lbSk7CisJfQogCi0JcmV0dXJuIG5vdXZlYXVfYm9fbW92ZV9hY2NlbF9jbGVhbnVwKGNoYW4sIG52Ym8sIGV2aWN0LCBub193YWl0X3Jlc2VydmUsIG5vX3dhaXRfZ3B1LCBuZXdfbWVtKTsKKwlpZiAoY2hhbiA9PSBkZXZfcHJpdi0+Y2hhbm5lbCkKKwkJbXV0ZXhfdW5sb2NrKCZjaGFuLT5tdXRleCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludApAQCAtNzcxLDcgKzgzMiw2IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSBub3V2ZWF1X2JvKGJvKTsKIAl1aW50NjRfdCBvZmZzZXQ7Ci0JaW50IHJldDsKIAogCWlmIChudmJvLT5ub192bSB8fCBuZXdfbWVtLT5tZW1fdHlwZSAhPSBUVE1fUExfVlJBTSkgewogCQkvKiBOb3RoaW5nIHRvIGRvLiAqLwpAQCAtNzgxLDE4ICs4NDEsMTIgQEAKIAogCW9mZnNldCA9IG5ld19tZW0tPnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CiAKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl81MCkgewotCQlyZXQgPSBudjUwX21lbV92bV9iaW5kX2xpbmVhcihkZXYsCi0JCQkJCSAgICAgIG9mZnNldCArIGRldl9wcml2LT52bV92cmFtX2Jhc2UsCi0JCQkJCSAgICAgIG5ld19tZW0tPnNpemUsCi0JCQkJCSAgICAgIG5vdXZlYXVfYm9fdGlsZV9sYXlvdXQobnZibyksCi0JCQkJCSAgICAgIG9mZnNldCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCisJaWYgKGRldl9wcml2LT5jaGFuX3ZtKSB7CisJCW5vdXZlYXVfdm1fbWFwKCZudmJvLT52bWEsIG5ld19tZW0tPm1tX25vZGUpOwogCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl8xMCkgewogCQkqbmV3X3RpbGUgPSBudjEwX21lbV9zZXRfdGlsaW5nKGRldiwgb2Zmc2V0LCBuZXdfbWVtLT5zaXplLAotCQkJCQkJbnZiby0+dGlsZV9tb2RlKTsKKwkJCQkJCW52Ym8tPnRpbGVfbW9kZSwKKwkJCQkJCW52Ym8tPnRpbGVfZmxhZ3MpOwogCX0KIAogCXJldHVybiAwOwpAQCAtODA4LDkgKzg2Miw3IEBACiAKIAlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl8xMCAmJgogCSAgICBkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNTApIHsKLQkJaWYgKCpvbGRfdGlsZSkKLQkJCW52MTBfbWVtX2V4cGlyZV90aWxpbmcoZGV2LCAqb2xkX3RpbGUsIGJvLT5zeW5jX29iaik7Ci0KKwkJbnYxMF9tZW1fcHV0X3RpbGVfcmVnaW9uKGRldiwgKm9sZF90aWxlLCBiby0+c3luY19vYmopOwogCQkqb2xkX3RpbGUgPSBuZXdfdGlsZTsKIAl9CiB9CkBAIC04NzksNiArOTMxLDcgQEAKIAlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiA9ICZiZGV2LT5tYW5bbWVtLT5tZW1fdHlwZV07CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gbm91dmVhdV9iZGV2KGJkZXYpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OworCWludCByZXQ7CiAKIAltZW0tPmJ1cy5hZGRyID0gTlVMTDsKIAltZW0tPmJ1cy5vZmZzZXQgPSAwOwpAQCAtOTAxLDkgKzk1NCw0MCBAQAogI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgVFRNX1BMX1ZSQU06Ci0JCW1lbS0+YnVzLm9mZnNldCA9IG1lbS0+c3RhcnQgPDwgUEFHRV9TSElGVDsKKwl7CisJCXN0cnVjdCBub3V2ZWF1X3ZyYW0gKnZyYW0gPSBtZW0tPm1tX25vZGU7CisJCXU4IHBhZ2Vfc2hpZnQ7CisKKwkJaWYgKCFkZXZfcHJpdi0+YmFyMV92bSkgeworCQkJbWVtLT5idXMub2Zmc2V0ID0gbWVtLT5zdGFydCA8PCBQQUdFX1NISUZUOworCQkJbWVtLT5idXMuYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDEpOworCQkJbWVtLT5idXMuaXNfaW9tZW0gPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl9DMCkKKwkJCXBhZ2Vfc2hpZnQgPSB2cmFtLT5wYWdlX3NoaWZ0OworCQllbHNlCisJCQlwYWdlX3NoaWZ0ID0gMTI7CisKKwkJcmV0ID0gbm91dmVhdV92bV9nZXQoZGV2X3ByaXYtPmJhcjFfdm0sIG1lbS0+YnVzLnNpemUsCisJCQkJICAgICBwYWdlX3NoaWZ0LCBOVl9NRU1fQUNDRVNTX1JXLAorCQkJCSAgICAgJnZyYW0tPmJhcl92bWEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlub3V2ZWF1X3ZtX21hcCgmdnJhbS0+YmFyX3ZtYSwgdnJhbSk7CisJCWlmIChyZXQpIHsKKwkJCW5vdXZlYXVfdm1fcHV0KCZ2cmFtLT5iYXJfdm1hKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQltZW0tPmJ1cy5vZmZzZXQgPSB2cmFtLT5iYXJfdm1hLm9mZnNldDsKKwkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNTApIC8qWFhYKi8KKwkJCW1lbS0+YnVzLm9mZnNldCAtPSAweDAwMjAwMDAwMDBVTEw7CiAJCW1lbS0+YnVzLmJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAxKTsKIAkJbWVtLT5idXMuaXNfaW9tZW0gPSB0cnVlOworCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC05MTQsNiArOTk4LDE3IEBACiBzdGF0aWMgdm9pZAogbm91dmVhdV90dG1faW9fbWVtX2ZyZWUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQogeworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IG5vdXZlYXVfYmRldihiZGV2KTsKKwlzdHJ1Y3Qgbm91dmVhdV92cmFtICp2cmFtID0gbWVtLT5tbV9ub2RlOworCisJaWYgKCFkZXZfcHJpdi0+YmFyMV92bSB8fCBtZW0tPm1lbV90eXBlICE9IFRUTV9QTF9WUkFNKQorCQlyZXR1cm47CisKKwlpZiAoIXZyYW0tPmJhcl92bWEubm9kZSkKKwkJcmV0dXJuOworCisJbm91dmVhdV92bV91bm1hcCgmdnJhbS0+YmFyX3ZtYSk7CisJbm91dmVhdV92bV9wdXQoJnZyYW0tPmJhcl92bWEpOwogfQogCiBzdGF0aWMgaW50CkBAIC05MzksNyArMTAzNCwyMyBAQAogCW52Ym8tPnBsYWNlbWVudC5mcGZuID0gMDsKIAludmJvLT5wbGFjZW1lbnQubHBmbiA9IGRldl9wcml2LT5mYl9tYXBwYWJsZV9wYWdlczsKIAlub3V2ZWF1X2JvX3BsYWNlbWVudF9zZXQobnZibywgVFRNX1BMX1ZSQU0sIDApOwotCXJldHVybiB0dG1fYm9fdmFsaWRhdGUoYm8sICZudmJvLT5wbGFjZW1lbnQsIGZhbHNlLCB0cnVlLCBmYWxzZSk7CisJcmV0dXJuIG5vdXZlYXVfYm9fdmFsaWRhdGUobnZibywgZmFsc2UsIHRydWUsIGZhbHNlKTsKK30KKwordm9pZAorbm91dmVhdV9ib19mZW5jZShzdHJ1Y3Qgbm91dmVhdV9ibyAqbnZibywgc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlKQoreworCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpvbGRfZmVuY2U7CisKKwlpZiAobGlrZWx5KGZlbmNlKSkKKwkJbm91dmVhdV9mZW5jZV9yZWYoZmVuY2UpOworCisJc3Bpbl9sb2NrKCZudmJvLT5iby5iZGV2LT5mZW5jZV9sb2NrKTsKKwlvbGRfZmVuY2UgPSBudmJvLT5iby5zeW5jX29iajsKKwludmJvLT5iby5zeW5jX29iaiA9IGZlbmNlOworCXNwaW5fdW5sb2NrKCZudmJvLT5iby5iZGV2LT5mZW5jZV9sb2NrKTsKKworCW5vdXZlYXVfZmVuY2VfdW5yZWYoJm9sZF9mZW5jZSk7CiB9CiAKIHN0cnVjdCB0dG1fYm9fZHJpdmVyIG5vdXZlYXVfYm9fZHJpdmVyID0gewpAQCAtOTQ5LDExICsxMDYwLDExIEBACiAJLmV2aWN0X2ZsYWdzID0gbm91dmVhdV9ib19ldmljdF9mbGFncywKIAkubW92ZSA9IG5vdXZlYXVfYm9fbW92ZSwKIAkudmVyaWZ5X2FjY2VzcyA9IG5vdXZlYXVfYm9fdmVyaWZ5X2FjY2VzcywKLQkuc3luY19vYmpfc2lnbmFsZWQgPSBub3V2ZWF1X2ZlbmNlX3NpZ25hbGxlZCwKLQkuc3luY19vYmpfd2FpdCA9IG5vdXZlYXVfZmVuY2Vfd2FpdCwKLQkuc3luY19vYmpfZmx1c2ggPSBub3V2ZWF1X2ZlbmNlX2ZsdXNoLAotCS5zeW5jX29ial91bnJlZiA9IG5vdXZlYXVfZmVuY2VfdW5yZWYsCi0JLnN5bmNfb2JqX3JlZiA9IG5vdXZlYXVfZmVuY2VfcmVmLAorCS5zeW5jX29ial9zaWduYWxlZCA9IF9fbm91dmVhdV9mZW5jZV9zaWduYWxsZWQsCisJLnN5bmNfb2JqX3dhaXQgPSBfX25vdXZlYXVfZmVuY2Vfd2FpdCwKKwkuc3luY19vYmpfZmx1c2ggPSBfX25vdXZlYXVfZmVuY2VfZmx1c2gsCisJLnN5bmNfb2JqX3VucmVmID0gX19ub3V2ZWF1X2ZlbmNlX3VucmVmLAorCS5zeW5jX29ial9yZWYgPSBfX25vdXZlYXVfZmVuY2VfcmVmLAogCS5mYXVsdF9yZXNlcnZlX25vdGlmeSA9ICZub3V2ZWF1X3R0bV9mYXVsdF9yZXNlcnZlX25vdGlmeSwKIAkuaW9fbWVtX3Jlc2VydmUgPSAmbm91dmVhdV90dG1faW9fbWVtX3Jlc2VydmUsCiAJLmlvX21lbV9mcmVlID0gJm5vdXZlYXVfdHRtX2lvX21lbV9mcmVlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jaGFubmVsLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NoYW5uZWwuYwppbmRleCAzNzM5NTBlLi4zOTYwZDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NoYW5uZWwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NoYW5uZWwuYwpAQCAtMzgsMjMgKzM4LDI4IEBACiAJaW50IHJldDsKIAogCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKSB7Ci0JCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2RtYV9uZXcoY2hhbiwgTlZfQ0xBU1NfRE1BX0lOX01FTU9SWSwgMCwKLQkJCQkJICAgICBkZXZfcHJpdi0+dm1fZW5kLCBOVl9ETUFfQUNDRVNTX1JPLAotCQkJCQkgICAgIE5WX0RNQV9UQVJHRVRfQUdQLCAmcHVzaGJ1Zik7CisJCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfQzApIHsKKwkJCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2RtYV9uZXcoY2hhbiwKKwkJCQkJCSAgICAgTlZfQ0xBU1NfRE1BX0lOX01FTU9SWSwgMCwKKwkJCQkJCSAgICAgKDFVTEwgPDwgNDApLAorCQkJCQkJICAgICBOVl9NRU1fQUNDRVNTX1JPLAorCQkJCQkJICAgICBOVl9NRU1fVEFSR0VUX1ZNLAorCQkJCQkJICAgICAmcHVzaGJ1Zik7CisJCX0KIAkJY2hhbi0+cHVzaGJ1Zl9iYXNlID0gcGItPmJvLm9mZnNldDsKIAl9IGVsc2UKIAlpZiAocGItPmJvLm1lbS5tZW1fdHlwZSA9PSBUVE1fUExfVFQpIHsKLQkJcmV0ID0gbm91dmVhdV9ncHVvYmpfZ2FydF9kbWFfbmV3KGNoYW4sIDAsCi0JCQkJCQkgIGRldl9wcml2LT5nYXJ0X2luZm8uYXBlcl9zaXplLAotCQkJCQkJICBOVl9ETUFfQUNDRVNTX1JPLCAmcHVzaGJ1ZiwKLQkJCQkJCSAgTlVMTCk7CisJCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2RtYV9uZXcoY2hhbiwgTlZfQ0xBU1NfRE1BX0lOX01FTU9SWSwgMCwKKwkJCQkJICAgICBkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfc2l6ZSwKKwkJCQkJICAgICBOVl9NRU1fQUNDRVNTX1JPLAorCQkJCQkgICAgIE5WX01FTV9UQVJHRVRfR0FSVCwgJnB1c2hidWYpOwogCQljaGFuLT5wdXNoYnVmX2Jhc2UgPSBwYi0+Ym8ubWVtLnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CiAJfSBlbHNlCiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgIT0gTlZfMDQpIHsKIAkJcmV0ID0gbm91dmVhdV9ncHVvYmpfZG1hX25ldyhjaGFuLCBOVl9DTEFTU19ETUFfSU5fTUVNT1JZLCAwLAogCQkJCQkgICAgIGRldl9wcml2LT5mYl9hdmFpbGFibGVfc2l6ZSwKLQkJCQkJICAgICBOVl9ETUFfQUNDRVNTX1JPLAotCQkJCQkgICAgIE5WX0RNQV9UQVJHRVRfVklETUVNLCAmcHVzaGJ1Zik7CisJCQkJCSAgICAgTlZfTUVNX0FDQ0VTU19STywKKwkJCQkJICAgICBOVl9NRU1fVEFSR0VUX1ZSQU0sICZwdXNoYnVmKTsKIAkJY2hhbi0+cHVzaGJ1Zl9iYXNlID0gcGItPmJvLm1lbS5zdGFydCA8PCBQQUdFX1NISUZUOwogCX0gZWxzZSB7CiAJCS8qIE5WMDQgY21kYnVmIGhhY2ssIGZyb20gb3JpZ2luYWwgZGR4Li4gbm90IHN1cmUgb2YgaXQncwpAQCAtNjIsMTcgKzY3LDE2IEBACiAJCSAqIFZSQU0uCiAJCSAqLwogCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9kbWFfbmV3KGNoYW4sIE5WX0NMQVNTX0RNQV9JTl9NRU1PUlksCi0JCQkJCSAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwKLQkJCQkJICAgICAxKSwKKwkJCQkJICAgICBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAxKSwKIAkJCQkJICAgICBkZXZfcHJpdi0+ZmJfYXZhaWxhYmxlX3NpemUsCi0JCQkJCSAgICAgTlZfRE1BX0FDQ0VTU19STywKLQkJCQkJICAgICBOVl9ETUFfVEFSR0VUX1BDSSwgJnB1c2hidWYpOworCQkJCQkgICAgIE5WX01FTV9BQ0NFU1NfUk8sCisJCQkJCSAgICAgTlZfTUVNX1RBUkdFVF9QQ0ksICZwdXNoYnVmKTsKIAkJY2hhbi0+cHVzaGJ1Zl9iYXNlID0gcGItPmJvLm1lbS5zdGFydCA8PCBQQUdFX1NISUZUOwogCX0KIAogCW5vdXZlYXVfZ3B1b2JqX3JlZihwdXNoYnVmLCAmY2hhbi0+cHVzaGJ1Zik7CiAJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZwdXNoYnVmKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3RydWN0IG5vdXZlYXVfYm8gKgpAQCAtMTAwLDYgKzEwNCwxMyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwlyZXQgPSBub3V2ZWF1X2JvX21hcChwdXNoYnVmKTsKKwlpZiAocmV0KSB7CisJCW5vdXZlYXVfYm9fdW5waW4ocHVzaGJ1Zik7CisJCW5vdXZlYXVfYm9fcmVmKE5VTEwsICZwdXNoYnVmKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJcmV0dXJuIHB1c2hidWY7CiB9CiAKQEAgLTEwNyw3NCArMTE4LDU5IEBACiBpbnQKIG5vdXZlYXVfY2hhbm5lbF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICoqY2hhbl9yZXQsCiAJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkgICAgICB1aW50MzJfdCB2cmFtX2hhbmRsZSwgdWludDMyX3QgdHRfaGFuZGxlKQorCQkgICAgICB1aW50MzJfdCB2cmFtX2hhbmRsZSwgdWludDMyX3QgZ2FydF9oYW5kbGUpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKIAlzdHJ1Y3Qgbm91dmVhdV9maWZvX2VuZ2luZSAqcGZpZm8gPSAmZGV2X3ByaXYtPmVuZ2luZS5maWZvOwogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47Ci0JaW50IGNoYW5uZWwsIHVzZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0JLyoKLQkgKiBBbHJpZ2h0LCBoZXJlIGlzIHRoZSBmdWxsIHN0b3J5Ci0JICogTnZpZGlhIGNhcmRzIGhhdmUgbXVsdGlwbGUgaHcgZmlmbyBjb250ZXh0cyAocHJhaXNlIHRoZW0gZm9yIHRoYXQsCi0JICogbm8gY29tcGxpY2F0ZWQgY3Jhc2gtcHJvbmUgY29udGV4dCBzd2l0Y2hlcykKLQkgKiBXZSBhbGxvY2F0ZSBhIG5ldyBjb250ZXh0IGZvciBlYWNoIGFwcCBhbmQgbGV0IGl0IHdyaXRlIHRvIGl0Ci0JICogZGlyZWN0bHkgKHdvbywgZnVsbCB1c2Vyc3BhY2UgY29tbWFuZCBzdWJtaXNzaW9uICEpCi0JICogV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBjb250ZXh0cywgeW91IGxvc3QKLQkgKi8KLQlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgcGZpZm8tPmNoYW5uZWxzOyBjaGFubmVsKyspIHsKLQkJaWYgKGRldl9wcml2LT5maWZvc1tjaGFubmVsXSA9PSBOVUxMKQotCQkJYnJlYWs7Ci0JfQotCi0JLyogbm8gbW9yZSBmaWZvcy4geW91IGxvc3QuICovCi0JaWYgKGNoYW5uZWwgPT0gcGZpZm8tPmNoYW5uZWxzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRldl9wcml2LT5maWZvc1tjaGFubmVsXSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwpLAotCQkJCQkgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWRldl9wcml2LT5maWZvc1tjaGFubmVsXSkKKwkvKiBhbGxvY2F0ZSBhbmQgbG9jayBjaGFubmVsIHN0cnVjdHVyZSAqLworCWNoYW4gPSBremFsbG9jKHNpemVvZigqY2hhbiksIEdGUF9LRVJORUwpOworCWlmICghY2hhbikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JY2hhbiA9IGRldl9wcml2LT5maWZvc1tjaGFubmVsXTsKLQlJTklUX0xJU1RfSEVBRCgmY2hhbi0+bnZzdy52Ymxfd2FpdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNoYW4tPmZlbmNlLnBlbmRpbmcpOwogCWNoYW4tPmRldiA9IGRldjsKLQljaGFuLT5pZCA9IGNoYW5uZWw7CiAJY2hhbi0+ZmlsZV9wcml2ID0gZmlsZV9wcml2OwogCWNoYW4tPnZyYW1faGFuZGxlID0gdnJhbV9oYW5kbGU7Ci0JY2hhbi0+Z2FydF9oYW5kbGUgPSB0dF9oYW5kbGU7CisJY2hhbi0+Z2FydF9oYW5kbGUgPSBnYXJ0X2hhbmRsZTsKIAotCU5WX0lORk8oZGV2LCAiQWxsb2NhdGluZyBGSUZPIG51bWJlciAlZFxuIiwgY2hhbm5lbCk7CisJa3JlZl9pbml0KCZjaGFuLT5yZWYpOworCWF0b21pY19zZXQoJmNoYW4tPnVzZXJzLCAxKTsKKwltdXRleF9pbml0KCZjaGFuLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hhbi0+bXV0ZXgpOworCisJLyogYWxsb2NhdGUgaHcgY2hhbm5lbCBpZCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y2hhbm5lbHMubG9jaywgZmxhZ3MpOworCWZvciAoY2hhbi0+aWQgPSAwOyBjaGFuLT5pZCA8IHBmaWZvLT5jaGFubmVsczsgY2hhbi0+aWQrKykgeworCQlpZiAoIWRldl9wcml2LT5jaGFubmVscy5wdHJbY2hhbi0+aWRdKSB7CisJCQlub3V2ZWF1X2NoYW5uZWxfcmVmKGNoYW4sICZkZXZfcHJpdi0+Y2hhbm5lbHMucHRyW2NoYW4tPmlkXSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y2hhbm5lbHMubG9jaywgZmxhZ3MpOworCisJaWYgKGNoYW4tPmlkID09IHBmaWZvLT5jaGFubmVscykgeworCQltdXRleF91bmxvY2soJmNoYW4tPm11dGV4KTsKKwkJa2ZyZWUoY2hhbik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCU5WX0RFQlVHKGRldiwgImluaXRpYWxpc2luZyBjaGFubmVsICVkXG4iLCBjaGFuLT5pZCk7CisJSU5JVF9MSVNUX0hFQUQoJmNoYW4tPm52c3cudmJsX3dhaXQpOworCUlOSVRfTElTVF9IRUFEKCZjaGFuLT5udnN3LmZsaXApOworCUlOSVRfTElTVF9IRUFEKCZjaGFuLT5mZW5jZS5wZW5kaW5nKTsKIAogCS8qIEFsbG9jYXRlIERNQSBwdXNoIGJ1ZmZlciAqLwogCWNoYW4tPnB1c2hidWZfYm8gPSBub3V2ZWF1X2NoYW5uZWxfdXNlcl9wdXNoYnVmX2FsbG9jKGRldik7CiAJaWYgKCFjaGFuLT5wdXNoYnVmX2JvKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCU5WX0VSUk9SKGRldiwgInB1c2hidWYgJWRcbiIsIHJldCk7Ci0JCW5vdXZlYXVfY2hhbm5lbF9mcmVlKGNoYW4pOworCQlub3V2ZWF1X2NoYW5uZWxfcHV0KCZjaGFuKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlub3V2ZWF1X2RtYV9wcmVfaW5pdChjaGFuKTsKLQotCS8qIExvY2F0ZSBjaGFubmVsJ3MgdXNlciBjb250cm9sIHJlZ3MgKi8KLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzQwKQotCQl1c2VyID0gTlYwM19VU0VSKGNoYW5uZWwpOwotCWVsc2UKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzUwKQotCQl1c2VyID0gTlY0MF9VU0VSKGNoYW5uZWwpOwotCWVsc2UKLQkJdXNlciA9IE5WNTBfVVNFUihjaGFubmVsKTsKLQotCWNoYW4tPnVzZXIgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDApICsgdXNlciwKLQkJCQkJCQkJUEFHRV9TSVpFKTsKLQlpZiAoIWNoYW4tPnVzZXIpIHsKLQkJTlZfRVJST1IoZGV2LCAiaW9yZW1hcCBvZiByZWdzIGZhaWxlZC5cbiIpOwotCQlub3V2ZWF1X2NoYW5uZWxfZnJlZShjaGFuKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWNoYW4tPnVzZXJfcHV0ID0gMHg0MDsKIAljaGFuLT51c2VyX2dldCA9IDB4NDQ7CiAKQEAgLTE4MiwxNSArMTc4LDE1IEBACiAJcmV0ID0gbm91dmVhdV9ub3RpZmllcl9pbml0X2NoYW5uZWwoY2hhbik7CiAJaWYgKHJldCkgewogCQlOVl9FUlJPUihkZXYsICJudGZ5ICVkXG4iLCByZXQpOwotCQlub3V2ZWF1X2NoYW5uZWxfZnJlZShjaGFuKTsKKwkJbm91dmVhdV9jaGFubmVsX3B1dCgmY2hhbik7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJLyogU2V0dXAgY2hhbm5lbCdzIGRlZmF1bHQgb2JqZWN0cyAqLwotCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2NoYW5uZWxfaW5pdChjaGFuLCB2cmFtX2hhbmRsZSwgdHRfaGFuZGxlKTsKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9jaGFubmVsX2luaXQoY2hhbiwgdnJhbV9oYW5kbGUsIGdhcnRfaGFuZGxlKTsKIAlpZiAocmV0KSB7CiAJCU5WX0VSUk9SKGRldiwgImdwdW9iaiAlZFxuIiwgcmV0KTsKLQkJbm91dmVhdV9jaGFubmVsX2ZyZWUoY2hhbik7CisJCW5vdXZlYXVfY2hhbm5lbF9wdXQoJmNoYW4pOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTk4LDI0ICsxOTQsMTcgQEAKIAlyZXQgPSBub3V2ZWF1X2NoYW5uZWxfcHVzaGJ1Zl9jdHhkbWFfaW5pdChjaGFuKTsKIAlpZiAocmV0KSB7CiAJCU5WX0VSUk9SKGRldiwgInBiY3R4ZG1hICVkXG4iLCByZXQpOwotCQlub3V2ZWF1X2NoYW5uZWxfZnJlZShjaGFuKTsKKwkJbm91dmVhdV9jaGFubmVsX3B1dCgmY2hhbik7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJLyogZGlzYWJsZSB0aGUgZmlmbyBjYWNoZXMgKi8KIAlwZmlmby0+cmVhc3NpZ24oZGV2LCBmYWxzZSk7CiAKLQkvKiBDcmVhdGUgYSBncmFwaGljcyBjb250ZXh0IGZvciBuZXcgY2hhbm5lbCAqLwotCXJldCA9IHBncmFwaC0+Y3JlYXRlX2NvbnRleHQoY2hhbik7Ci0JaWYgKHJldCkgewotCQlub3V2ZWF1X2NoYW5uZWxfZnJlZShjaGFuKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KIAkvKiBDb25zdHJ1Y3QgaW5pdGFsIFJBTUZDIGZvciBuZXcgY2hhbm5lbCAqLwogCXJldCA9IHBmaWZvLT5jcmVhdGVfY29udGV4dChjaGFuKTsKIAlpZiAocmV0KSB7Ci0JCW5vdXZlYXVfY2hhbm5lbF9mcmVlKGNoYW4pOworCQlub3V2ZWF1X2NoYW5uZWxfcHV0KCZjaGFuKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTIyNSw4MyArMjE0LDExMSBAQAogCWlmICghcmV0KQogCQlyZXQgPSBub3V2ZWF1X2ZlbmNlX2NoYW5uZWxfaW5pdChjaGFuKTsKIAlpZiAocmV0KSB7Ci0JCW5vdXZlYXVfY2hhbm5lbF9mcmVlKGNoYW4pOworCQlub3V2ZWF1X2NoYW5uZWxfcHV0KCZjaGFuKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlub3V2ZWF1X2RlYnVnZnNfY2hhbm5lbF9pbml0KGNoYW4pOwogCi0JTlZfSU5GTyhkZXYsICIlczogaW5pdGlhbGlzZWQgRklGTyAlZFxuIiwgX19mdW5jX18sIGNoYW5uZWwpOworCU5WX0RFQlVHKGRldiwgImNoYW5uZWwgJWQgaW5pdGlhbGlzZWRcbiIsIGNoYW4tPmlkKTsKIAkqY2hhbl9yZXQgPSBjaGFuOwogCXJldHVybiAwOwogfQogCi0vKiBzdG9wcyBhIGZpZm8gKi8KLXZvaWQKLW5vdXZlYXVfY2hhbm5lbF9mcmVlKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCitzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICoKK25vdXZlYXVfY2hhbm5lbF9nZXRfdW5sb2NrZWQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqcmVmKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CisJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiA9IE5VTEw7CisKKwlpZiAobGlrZWx5KHJlZiAmJiBhdG9taWNfaW5jX25vdF96ZXJvKCZyZWYtPnVzZXJzKSkpCisJCW5vdXZlYXVfY2hhbm5lbF9yZWYocmVmLCAmY2hhbik7CisKKwlyZXR1cm4gY2hhbjsKK30KKworc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqCitub3V2ZWF1X2NoYW5uZWxfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBpbnQgaWQpCit7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKLQlzdHJ1Y3Qgbm91dmVhdV9maWZvX2VuZ2luZSAqcGZpZm8gPSAmZGV2X3ByaXYtPmVuZ2luZS5maWZvOworCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0OwogCi0JTlZfSU5GTyhkZXYsICIlczogZnJlZWluZyBmaWZvICVkXG4iLCBfX2Z1bmNfXywgY2hhbi0+aWQpOworCWlmICh1bmxpa2VseShpZCA8IDAgfHwgaWQgPj0gTk9VVkVBVV9NQVhfQ0hBTk5FTF9OUikpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0Jbm91dmVhdV9kZWJ1Z2ZzX2NoYW5uZWxfZmluaShjaGFuKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmNoYW5uZWxzLmxvY2ssIGZsYWdzKTsKKwljaGFuID0gbm91dmVhdV9jaGFubmVsX2dldF91bmxvY2tlZChkZXZfcHJpdi0+Y2hhbm5lbHMucHRyW2lkXSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmNoYW5uZWxzLmxvY2ssIGZsYWdzKTsKIAotCS8qIEdpdmUgb3V0c3RhbmRpbmcgcHVzaCBidWZmZXJzIGEgY2hhbmNlIHRvIGNvbXBsZXRlICovCi0Jbm91dmVhdV9mZW5jZV91cGRhdGUoY2hhbik7Ci0JaWYgKGNoYW4tPmZlbmNlLnNlcXVlbmNlICE9IGNoYW4tPmZlbmNlLnNlcXVlbmNlX2FjaykgewotCQlzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2UgPSBOVUxMOworCWlmICh1bmxpa2VseSghY2hhbikpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JCXJldCA9IG5vdXZlYXVfZmVuY2VfbmV3KGNoYW4sICZmZW5jZSwgdHJ1ZSk7Ci0JCWlmIChyZXQgPT0gMCkgewotCQkJcmV0ID0gbm91dmVhdV9mZW5jZV93YWl0KGZlbmNlLCBOVUxMLCBmYWxzZSwgZmFsc2UpOwotCQkJbm91dmVhdV9mZW5jZV91bnJlZigodm9pZCAqKSZmZW5jZSk7Ci0JCX0KLQotCQlpZiAocmV0KQotCQkJTlZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGlkbGUgY2hhbm5lbCAlZC5cbiIsIGNoYW4tPmlkKTsKKwlpZiAodW5saWtlbHkoZmlsZV9wcml2ICYmIGNoYW4tPmZpbGVfcHJpdiAhPSBmaWxlX3ByaXYpKSB7CisJCW5vdXZlYXVfY2hhbm5lbF9wdXRfdW5sb2NrZWQoJmNoYW4pOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKLQkvKiBFbnN1cmUgYWxsIG91dHN0YW5kaW5nIGZlbmNlcyBhcmUgc2lnbmFsZWQuICBUaGV5IHNob3VsZCBiZSBpZiB0aGUKKwltdXRleF9sb2NrKCZjaGFuLT5tdXRleCk7CisJcmV0dXJuIGNoYW47Cit9CisKK3ZvaWQKK25vdXZlYXVfY2hhbm5lbF9wdXRfdW5sb2NrZWQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKnBjaGFuKQoreworCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSAqcGNoYW47CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2ZpZm9fZW5naW5lICpwZmlmbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmZpZm87CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CisJc3RydWN0IG5vdXZlYXVfY3J5cHRfZW5naW5lICpwY3J5cHQgPSAmZGV2X3ByaXYtPmVuZ2luZS5jcnlwdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogZGVjcmVtZW50IHRoZSByZWZjb3VudCwgYW5kIHdlJ3JlIGRvbmUgaWYgdGhlcmUncyBzdGlsbCByZWZzICovCisJaWYgKGxpa2VseSghYXRvbWljX2RlY19hbmRfdGVzdCgmY2hhbi0+dXNlcnMpKSkgeworCQlub3V2ZWF1X2NoYW5uZWxfcmVmKE5VTEwsIHBjaGFuKTsKKwkJcmV0dXJuOworCX0KKworCS8qIG5vb25lIHdhbnRzIHRoZSBjaGFubmVsIGFueW1vcmUgKi8KKwlOVl9ERUJVRyhkZXYsICJmcmVlaW5nIGNoYW5uZWwgJWRcbiIsIGNoYW4tPmlkKTsKKwlub3V2ZWF1X2RlYnVnZnNfY2hhbm5lbF9maW5pKGNoYW4pOworCisJLyogZ2l2ZSBpdCBjaGFuY2UgdG8gaWRsZSAqLworCW5vdXZlYXVfY2hhbm5lbF9pZGxlKGNoYW4pOworCisJLyogZW5zdXJlIGFsbCBvdXRzdGFuZGluZyBmZW5jZXMgYXJlIHNpZ25hbGVkLiAgdGhleSBzaG91bGQgYmUgaWYgdGhlCiAJICogYWJvdmUgYXR0ZW1wdHMgYXQgaWRsaW5nIHdlcmUgT0ssIGJ1dCBpZiB3ZSBmYWlsZWQgdGhpcydsbCB0ZWxsIFRUTQogCSAqIHdlJ3JlIGRvbmUgd2l0aCB0aGUgYnVmZmVycy4KIAkgKi8KIAlub3V2ZWF1X2ZlbmNlX2NoYW5uZWxfZmluaShjaGFuKTsKIAotCS8qIFRoaXMgd2lsbCBwcmV2ZW50IHBmaWZvIGZyb20gc3dpdGNoaW5nIGNoYW5uZWxzLiAqLworCS8qIGJvb3QgaXQgb2ZmIHRoZSBoYXJkd2FyZSAqLwogCXBmaWZvLT5yZWFzc2lnbihkZXYsIGZhbHNlKTsKIAotCS8qIFdlIHdhbnQgdG8gZ2l2ZSBwZ3JhcGggYSBjaGFuY2UgdG8gaWRsZSBhbmQgZ2V0IHJpZCBvZiBhbGwgcG90ZW50aWFsCi0JICogZXJyb3JzLiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIHRoZSBsb2NrLCBvdGhlcndpc2UgdGhlIGlycSBoYW5kbGVyCi0JICogaXMgdW5hYmxlIHRvIHByb2Nlc3MgdGhlbS4KKwkvKiBXZSB3YW50IHRvIGdpdmUgcGdyYXBoIGEgY2hhbmNlIHRvIGlkbGUgYW5kIGdldCByaWQgb2YgYWxsCisJICogcG90ZW50aWFsIGVycm9ycy4gV2UgbmVlZCB0byBkbyB0aGlzIHdpdGhvdXQgdGhlIGNvbnRleHQKKwkgKiBzd2l0Y2ggbG9jayBoZWxkLCBvdGhlcndpc2UgdGhlIGlycSBoYW5kbGVyIGlzIHVuYWJsZSB0bworCSAqIHByb2Nlc3MgdGhlbS4KIAkgKi8KIAlpZiAocGdyYXBoLT5jaGFubmVsKGRldikgPT0gY2hhbikKIAkJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKLQotCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCBmYWxzZSk7Ci0JaWYgKHBncmFwaC0+Y2hhbm5lbChkZXYpID09IGNoYW4pCi0JCXBncmFwaC0+dW5sb2FkX2NvbnRleHQoZGV2KTsKLQlwZ3JhcGgtPmRlc3Ryb3lfY29udGV4dChjaGFuKTsKLQlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgdHJ1ZSk7Ci0KLQlpZiAocGZpZm8tPmNoYW5uZWxfaWQoZGV2KSA9PSBjaGFuLT5pZCkgewotCQlwZmlmby0+ZGlzYWJsZShkZXYpOwotCQlwZmlmby0+dW5sb2FkX2NvbnRleHQoZGV2KTsKLQkJcGZpZm8tPmVuYWJsZShkZXYpOwotCX0KKwkvKiBkZXN0cm95IHRoZSBlbmdpbmUgc3BlY2lmaWMgY29udGV4dHMgKi8KIAlwZmlmby0+ZGVzdHJveV9jb250ZXh0KGNoYW4pOworCXBncmFwaC0+ZGVzdHJveV9jb250ZXh0KGNoYW4pOworCWlmIChwY3J5cHQtPmRlc3Ryb3lfY29udGV4dCkKKwkJcGNyeXB0LT5kZXN0cm95X2NvbnRleHQoY2hhbik7CiAKIAlwZmlmby0+cmVhc3NpZ24oZGV2LCB0cnVlKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisJLyogYXNpZGUgZnJvbSBpdHMgcmVzb3VyY2VzLCB0aGUgY2hhbm5lbCBzaG91bGQgbm93IGJlIGRlYWQsCisJICogcmVtb3ZlIGl0IGZyb20gdGhlIGNoYW5uZWwgbGlzdAorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y2hhbm5lbHMubG9jaywgZmxhZ3MpOworCW5vdXZlYXVfY2hhbm5lbF9yZWYoTlVMTCwgJmRldl9wcml2LT5jaGFubmVscy5wdHJbY2hhbi0+aWRdKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y2hhbm5lbHMubG9jaywgZmxhZ3MpOwogCi0JLyogUmVsZWFzZSB0aGUgY2hhbm5lbCdzIHJlc291cmNlcyAqLworCS8qIGRlc3Ryb3kgYW55IHJlc291cmNlcyB0aGUgY2hhbm5lbCBvd25lZCAqLwogCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmY2hhbi0+cHVzaGJ1Zik7CiAJaWYgKGNoYW4tPnB1c2hidWZfYm8pIHsKIAkJbm91dmVhdV9ib191bm1hcChjaGFuLT5wdXNoYnVmX2JvKTsKQEAgLTMxMCw0NCArMzI3LDgwIEBACiAJfQogCW5vdXZlYXVfZ3B1b2JqX2NoYW5uZWxfdGFrZWRvd24oY2hhbik7CiAJbm91dmVhdV9ub3RpZmllcl90YWtlZG93bl9jaGFubmVsKGNoYW4pOwotCWlmIChjaGFuLT51c2VyKQotCQlpb3VubWFwKGNoYW4tPnVzZXIpOwogCi0JZGV2X3ByaXYtPmZpZm9zW2NoYW4tPmlkXSA9IE5VTEw7CisJbm91dmVhdV9jaGFubmVsX3JlZihOVUxMLCBwY2hhbik7Cit9CisKK3ZvaWQKK25vdXZlYXVfY2hhbm5lbF9wdXQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKnBjaGFuKQoreworCW11dGV4X3VubG9jaygmKCpwY2hhbiktPm11dGV4KTsKKwlub3V2ZWF1X2NoYW5uZWxfcHV0X3VubG9ja2VkKHBjaGFuKTsKK30KKworc3RhdGljIHZvaWQKK25vdXZlYXVfY2hhbm5lbF9kZWwoc3RydWN0IGtyZWYgKnJlZikKK3sKKwlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0KKwkJY29udGFpbmVyX29mKHJlZiwgc3RydWN0IG5vdXZlYXVfY2hhbm5lbCwgcmVmKTsKKwogCWtmcmVlKGNoYW4pOwogfQogCit2b2lkCitub3V2ZWF1X2NoYW5uZWxfcmVmKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sCisJCSAgICBzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICoqcGNoYW4pCit7CisJaWYgKGNoYW4pCisJCWtyZWZfZ2V0KCZjaGFuLT5yZWYpOworCisJaWYgKCpwY2hhbikKKwkJa3JlZl9wdXQoJigqcGNoYW4pLT5yZWYsIG5vdXZlYXVfY2hhbm5lbF9kZWwpOworCisJKnBjaGFuID0gY2hhbjsKK30KKwordm9pZAorbm91dmVhdV9jaGFubmVsX2lkbGUoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZSA9IE5VTEw7CisJaW50IHJldDsKKworCW5vdXZlYXVfZmVuY2VfdXBkYXRlKGNoYW4pOworCisJaWYgKGNoYW4tPmZlbmNlLnNlcXVlbmNlICE9IGNoYW4tPmZlbmNlLnNlcXVlbmNlX2FjaykgeworCQlyZXQgPSBub3V2ZWF1X2ZlbmNlX25ldyhjaGFuLCAmZmVuY2UsIHRydWUpOworCQlpZiAoIXJldCkgeworCQkJcmV0ID0gbm91dmVhdV9mZW5jZV93YWl0KGZlbmNlLCBmYWxzZSwgZmFsc2UpOworCQkJbm91dmVhdV9mZW5jZV91bnJlZigmZmVuY2UpOworCQl9CisKKwkJaWYgKHJldCkKKwkJCU5WX0VSUk9SKGRldiwgIkZhaWxlZCB0byBpZGxlIGNoYW5uZWwgJWQuXG4iLCBjaGFuLT5pZCk7CisJfQorfQorCiAvKiBjbGVhbnMgdXAgYWxsIHRoZSBmaWZvcyBmcm9tIGZpbGVfcHJpdiAqLwogdm9pZAogbm91dmVhdV9jaGFubmVsX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgKmVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lOworCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47CiAJaW50IGk7CiAKIAlOVl9ERUJVRyhkZXYsICJjbGVhcmluZyBGSUZPIGVuYWJsZXMgZnJvbSBmaWxlX3ByaXZcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBlbmdpbmUtPmZpZm8uY2hhbm5lbHM7IGkrKykgewotCQlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZGV2X3ByaXYtPmZpZm9zW2ldOworCQljaGFuID0gbm91dmVhdV9jaGFubmVsX2dldChkZXYsIGZpbGVfcHJpdiwgaSk7CisJCWlmIChJU19FUlIoY2hhbikpCisJCQljb250aW51ZTsKIAotCQlpZiAoY2hhbiAmJiBjaGFuLT5maWxlX3ByaXYgPT0gZmlsZV9wcml2KQotCQkJbm91dmVhdV9jaGFubmVsX2ZyZWUoY2hhbik7CisJCWF0b21pY19kZWMoJmNoYW4tPnVzZXJzKTsKKwkJbm91dmVhdV9jaGFubmVsX3B1dCgmY2hhbik7CiAJfQogfQogCi1pbnQKLW5vdXZlYXVfY2hhbm5lbF9vd25lcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKLQkJICAgICAgaW50IGNoYW5uZWwpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgKmVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lOwotCi0JaWYgKGNoYW5uZWwgPj0gZW5naW5lLT5maWZvLmNoYW5uZWxzKQotCQlyZXR1cm4gMDsKLQlpZiAoZGV2X3ByaXYtPmZpZm9zW2NoYW5uZWxdID09IE5VTEwpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIChkZXZfcHJpdi0+Zmlmb3NbY2hhbm5lbF0tPmZpbGVfcHJpdiA9PSBmaWxlX3ByaXYpOwotfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIGlvY3RscyB3cmFwcGluZyB0aGUgZnVuY3Rpb25zCkBAIC0zODMsMzYgKzQzNiw0NCBAQAogCWVsc2UKIAkJaW5pdC0+cHVzaGJ1Zl9kb21haW5zID0gTk9VVkVBVV9HRU1fRE9NQUlOX0dBUlQ7CiAKLQlpbml0LT5zdWJjaGFuWzBdLmhhbmRsZSA9IE52TTJNRjsKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzUwKQotCQlpbml0LT5zdWJjaGFuWzBdLmdyY2xhc3MgPSAweDAwMzk7Ci0JZWxzZQotCQlpbml0LT5zdWJjaGFuWzBdLmdyY2xhc3MgPSAweDUwMzk7Ci0JaW5pdC0+c3ViY2hhblsxXS5oYW5kbGUgPSBOdlN3OwotCWluaXQtPnN1YmNoYW5bMV0uZ3JjbGFzcyA9IE5WX1NXOwotCWluaXQtPm5yX3N1YmNoYW4gPSAyOworCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfQzApIHsKKwkJaW5pdC0+c3ViY2hhblswXS5oYW5kbGUgPSBOdk0yTUY7CisJCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNTApCisJCQlpbml0LT5zdWJjaGFuWzBdLmdyY2xhc3MgPSAweDAwMzk7CisJCWVsc2UKKwkJCWluaXQtPnN1YmNoYW5bMF0uZ3JjbGFzcyA9IDB4NTAzOTsKKwkJaW5pdC0+c3ViY2hhblsxXS5oYW5kbGUgPSBOdlN3OworCQlpbml0LT5zdWJjaGFuWzFdLmdyY2xhc3MgPSBOVl9TVzsKKwkJaW5pdC0+bnJfc3ViY2hhbiA9IDI7CisJfSBlbHNlIHsKKwkJaW5pdC0+c3ViY2hhblswXS5oYW5kbGUgID0gMHg5MDM5OworCQlpbml0LT5zdWJjaGFuWzBdLmdyY2xhc3MgPSAweDkwMzk7CisJCWluaXQtPm5yX3N1YmNoYW4gPSAxOworCX0KIAogCS8qIE5hbWVkIG1lbW9yeSBvYmplY3QgYXJlYSAqLwogCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsIGNoYW4tPm5vdGlmaWVyX2JvLT5nZW0sCiAJCQkJICAgICZpbml0LT5ub3RpZmllcl9oYW5kbGUpOwotCWlmIChyZXQpIHsKLQkJbm91dmVhdV9jaGFubmVsX2ZyZWUoY2hhbik7Ci0JCXJldHVybiByZXQ7Ci0JfQogCi0JcmV0dXJuIDA7CisJaWYgKHJldCA9PSAwKQorCQlhdG9taWNfaW5jKCZjaGFuLT51c2Vycyk7IC8qIHVzZXJzcGFjZSByZWZlcmVuY2UgKi8KKwlub3V2ZWF1X2NoYW5uZWxfcHV0KCZjaGFuKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CiBub3V2ZWF1X2lvY3RsX2ZpZm9fZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X2NoYW5uZWxfZnJlZSAqY2ZyZWUgPSBkYXRhOworCXN0cnVjdCBkcm1fbm91dmVhdV9jaGFubmVsX2ZyZWUgKnJlcSA9IGRhdGE7CiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbjsKIAotCU5PVVZFQVVfR0VUX1VTRVJfQ0hBTk5FTF9XSVRIX1JFVFVSTihjZnJlZS0+Y2hhbm5lbCwgZmlsZV9wcml2LCBjaGFuKTsKKwljaGFuID0gbm91dmVhdV9jaGFubmVsX2dldChkZXYsIGZpbGVfcHJpdiwgcmVxLT5jaGFubmVsKTsKKwlpZiAoSVNfRVJSKGNoYW4pKQorCQlyZXR1cm4gUFRSX0VSUihjaGFuKTsKIAotCW5vdXZlYXVfY2hhbm5lbF9mcmVlKGNoYW4pOworCWF0b21pY19kZWMoJmNoYW4tPnVzZXJzKTsKKwlub3V2ZWF1X2NoYW5uZWxfcHV0KCZjaGFuKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDIxLDE4ICs0ODIsMTggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RydWN0IGRybV9pb2N0bF9kZXNjIG5vdXZlYXVfaW9jdGxzW10gPSB7Ci0JRFJNX0lPQ1RMX0RFRl9EUlYoTk9VVkVBVV9HRVRQQVJBTSwgbm91dmVhdV9pb2N0bF9nZXRwYXJhbSwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUZfRFJWKE5PVVZFQVVfU0VUUEFSQU0sIG5vdXZlYXVfaW9jdGxfc2V0cGFyYW0sIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCi0JRFJNX0lPQ1RMX0RFRl9EUlYoTk9VVkVBVV9DSEFOTkVMX0FMTE9DLCBub3V2ZWF1X2lvY3RsX2ZpZm9fYWxsb2MsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGX0RSVihOT1VWRUFVX0NIQU5ORUxfRlJFRSwgbm91dmVhdV9pb2N0bF9maWZvX2ZyZWUsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGX0RSVihOT1VWRUFVX0dST0JKX0FMTE9DLCBub3V2ZWF1X2lvY3RsX2dyb2JqX2FsbG9jLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRl9EUlYoTk9VVkVBVV9OT1RJRklFUk9CSl9BTExPQywgbm91dmVhdV9pb2N0bF9ub3RpZmllcl9hbGxvYywgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUZfRFJWKE5PVVZFQVVfR1BVT0JKX0ZSRUUsIG5vdXZlYXVfaW9jdGxfZ3B1b2JqX2ZyZWUsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGX0RSVihOT1VWRUFVX0dFTV9ORVcsIG5vdXZlYXVfZ2VtX2lvY3RsX25ldywgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUZfRFJWKE5PVVZFQVVfR0VNX1BVU0hCVUYsIG5vdXZlYXVfZ2VtX2lvY3RsX3B1c2hidWYsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGX0RSVihOT1VWRUFVX0dFTV9DUFVfUFJFUCwgbm91dmVhdV9nZW1faW9jdGxfY3B1X3ByZXAsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGX0RSVihOT1VWRUFVX0dFTV9DUFVfRklOSSwgbm91dmVhdV9nZW1faW9jdGxfY3B1X2ZpbmksIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGX0RSVihOT1VWRUFVX0dFTV9JTkZPLCBub3V2ZWF1X2dlbV9pb2N0bF9pbmZvLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoTk9VVkVBVV9HRVRQQVJBTSwgbm91dmVhdV9pb2N0bF9nZXRwYXJhbSwgRFJNX1VOTE9DS0VEfERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGX0RSVihOT1VWRUFVX1NFVFBBUkFNLCBub3V2ZWF1X2lvY3RsX3NldHBhcmFtLCBEUk1fVU5MT0NLRUR8RFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGX0RSVihOT1VWRUFVX0NIQU5ORUxfQUxMT0MsIG5vdXZlYXVfaW9jdGxfZmlmb19hbGxvYywgRFJNX1VOTE9DS0VEfERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGX0RSVihOT1VWRUFVX0NIQU5ORUxfRlJFRSwgbm91dmVhdV9pb2N0bF9maWZvX2ZyZWUsIERSTV9VTkxPQ0tFRHxEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoTk9VVkVBVV9HUk9CSl9BTExPQywgbm91dmVhdV9pb2N0bF9ncm9ial9hbGxvYywgRFJNX1VOTE9DS0VEfERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGX0RSVihOT1VWRUFVX05PVElGSUVST0JKX0FMTE9DLCBub3V2ZWF1X2lvY3RsX25vdGlmaWVyX2FsbG9jLCBEUk1fVU5MT0NLRUR8RFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUZfRFJWKE5PVVZFQVVfR1BVT0JKX0ZSRUUsIG5vdXZlYXVfaW9jdGxfZ3B1b2JqX2ZyZWUsIERSTV9VTkxPQ0tFRHxEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoTk9VVkVBVV9HRU1fTkVXLCBub3V2ZWF1X2dlbV9pb2N0bF9uZXcsIERSTV9VTkxPQ0tFRHxEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoTk9VVkVBVV9HRU1fUFVTSEJVRiwgbm91dmVhdV9nZW1faW9jdGxfcHVzaGJ1ZiwgRFJNX1VOTE9DS0VEfERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGX0RSVihOT1VWRUFVX0dFTV9DUFVfUFJFUCwgbm91dmVhdV9nZW1faW9jdGxfY3B1X3ByZXAsIERSTV9VTkxPQ0tFRHxEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoTk9VVkVBVV9HRU1fQ1BVX0ZJTkksIG5vdXZlYXVfZ2VtX2lvY3RsX2NwdV9maW5pLCBEUk1fVU5MT0NLRUR8RFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUZfRFJWKE5PVVZFQVVfR0VNX0lORk8sIG5vdXZlYXVfZ2VtX2lvY3RsX2luZm8sIERSTV9VTkxPQ0tFRHxEUk1fQVVUSCksCiB9OwogCiBpbnQgbm91dmVhdV9tYXhfaW9jdGwgPSBEUk1fQVJSQVlfU0laRShub3V2ZWF1X2lvY3Rscyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYwppbmRleCA1MmMzNTZlLi5hMjFlMDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlICJub3V2ZWF1X2Nvbm5lY3Rvci5oIgogI2luY2x1ZGUgIm5vdXZlYXVfaHcuaCIKIAorc3RhdGljIHZvaWQgbm91dmVhdV9jb25uZWN0b3JfaG90cGx1Zyh2b2lkICosIGludCk7CisKIHN0YXRpYyBzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICoKIGZpbmRfZW5jb2Rlcl9ieV90eXBlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGludCB0eXBlKQogewpAQCAtOTQsMjIgKzk2LDMwIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1ub3V2ZWF1X2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpkcm1fY29ubmVjdG9yKQorbm91dmVhdV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewotCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqbnZfY29ubmVjdG9yID0KLQkJbm91dmVhdV9jb25uZWN0b3IoZHJtX2Nvbm5lY3Rvcik7CisJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpudl9jb25uZWN0b3IgPSBub3V2ZWF1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdjsKKwlzdHJ1Y3Qgbm91dmVhdV9ncGlvX2VuZ2luZSAqcGdwaW87CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIAogCWlmICghbnZfY29ubmVjdG9yKQogCQlyZXR1cm47CiAKIAlkZXYgPSBudl9jb25uZWN0b3ItPmJhc2UuZGV2OworCWRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAorCXBncGlvID0gJmRldl9wcml2LT5lbmdpbmUuZ3BpbzsKKwlpZiAocGdwaW8tPmlycV91bnJlZ2lzdGVyKSB7CisJCXBncGlvLT5pcnFfdW5yZWdpc3RlcihkZXYsIG52X2Nvbm5lY3Rvci0+ZGNiLT5ncGlvX3RhZywKKwkJCQkgICAgICBub3V2ZWF1X2Nvbm5lY3Rvcl9ob3RwbHVnLCBjb25uZWN0b3IpOworCX0KKwogCWtmcmVlKG52X2Nvbm5lY3Rvci0+ZWRpZCk7Ci0JZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9yZW1vdmUoZHJtX2Nvbm5lY3Rvcik7Ci0JZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGRybV9jb25uZWN0b3IpOwotCWtmcmVlKGRybV9jb25uZWN0b3IpOworCWRybV9zeXNmc19jb25uZWN0b3JfcmVtb3ZlKGNvbm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CisJa2ZyZWUoY29ubmVjdG9yKTsKIH0KIAogc3RhdGljIHN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICoKQEAgLTc2MCw2ICs3NzAsNyBAQAogewogCWNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzICpmdW5jcyA9ICZub3V2ZWF1X2Nvbm5lY3Rvcl9mdW5jczsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2dwaW9fZW5naW5lICpwZ3BpbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmdwaW87CiAJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpudl9jb25uZWN0b3IgPSBOVUxMOwogCXN0cnVjdCBkY2JfY29ubmVjdG9yX3RhYmxlX2VudHJ5ICpkY2IgPSBOVUxMOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CkBAIC04NzYsNiArODg3LDExIEBACiAJCWJyZWFrOwogCX0KIAorCWlmIChwZ3Bpby0+aXJxX3JlZ2lzdGVyKSB7CisJCXBncGlvLT5pcnFfcmVnaXN0ZXIoZGV2LCBudl9jb25uZWN0b3ItPmRjYi0+Z3Bpb190YWcsCisJCQkJICAgIG5vdXZlYXVfY29ubmVjdG9yX2hvdHBsdWcsIGNvbm5lY3Rvcik7CisJfQorCiAJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQoY29ubmVjdG9yKTsKIAlkY2ItPmRybSA9IGNvbm5lY3RvcjsKIAlyZXR1cm4gZGNiLT5kcm07CkBAIC04ODYsMyArOTAyLDI5IEBACiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAogfQorCitzdGF0aWMgdm9pZAorbm91dmVhdV9jb25uZWN0b3JfaG90cGx1Zyh2b2lkICpkYXRhLCBpbnQgcGx1Z2dlZCkKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisKKwlOVl9JTkZPKGRldiwgIiVzcGx1Z2dlZCAlc1xuIiwgcGx1Z2dlZCA/ICIiIDogInVuIiwKKwkJZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKworCWlmIChjb25uZWN0b3ItPmVuY29kZXIgJiYgY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRjICYmCisJICAgIGNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0Yy0+ZW5hYmxlZCkgeworCQlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGNvbm5lY3Rvci0+ZW5jb2Rlcik7CisJCXN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmhlbHBlciA9CisJCQljb25uZWN0b3ItPmVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCisJCWlmIChudl9lbmNvZGVyLT5kY2ItPnR5cGUgPT0gT1VUUFVUX0RQKSB7CisJCQlpZiAocGx1Z2dlZCkKKwkJCQloZWxwZXItPmRwbXMoY29ubmVjdG9yLT5lbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09OKTsKKwkJCWVsc2UKKwkJCQloZWxwZXItPmRwbXMoY29ubmVjdG9yLT5lbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7CisJCX0KKwl9CisKKwlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZGV2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kaXNwbGF5LmMKaW5kZXggMmUxMWZkNi4uNTA1YzZiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kaXNwbGF5LmMKQEAgLTI5LDYgKzI5LDkgQEAKICNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgogI2luY2x1ZGUgIm5vdXZlYXVfZmIuaCIKICNpbmNsdWRlICJub3V2ZWF1X2ZiY29uLmgiCisjaW5jbHVkZSAibm91dmVhdV9ody5oIgorI2luY2x1ZGUgIm5vdXZlYXVfY3J0Yy5oIgorI2luY2x1ZGUgIm5vdXZlYXVfZG1hLmgiCiAKIHN0YXRpYyB2b2lkCiBub3V2ZWF1X3VzZXJfZnJhbWVidWZmZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpkcm1fZmIpCkBAIC0xMDQsMyArMTA3LDIwNyBAQAogCS5vdXRwdXRfcG9sbF9jaGFuZ2VkID0gbm91dmVhdV9mYmNvbl9vdXRwdXRfcG9sbF9jaGFuZ2VkLAogfTsKIAoraW50Citub3V2ZWF1X3ZibGFua19lbmFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKQorCQludl9tYXNrKGRldiwgTlY1MF9QRElTUExBWV9JTlRSX0VOXzEsIDAsCisJCQlOVjUwX1BESVNQTEFZX0lOVFJfRU5fMV9WQkxBTktfQ1JUQ18oY3J0YykpOworCWVsc2UKKwkJTlZXcml0ZUNSVEMoZGV2LCBjcnRjLCBOVl9QQ1JUQ19JTlRSX0VOXzAsCisJCQkgICAgTlZfUENSVENfSU5UUl8wX1ZCTEFOSyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAorbm91dmVhdV92YmxhbmtfZGlzYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApCisJCW52X21hc2soZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfRU5fMSwKKwkJCU5WNTBfUERJU1BMQVlfSU5UUl9FTl8xX1ZCTEFOS19DUlRDXyhjcnRjKSwgMCk7CisJZWxzZQorCQlOVldyaXRlQ1JUQyhkZXYsIGNydGMsIE5WX1BDUlRDX0lOVFJfRU5fMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK25vdXZlYXVfcGFnZV9mbGlwX3Jlc2VydmUoc3RydWN0IG5vdXZlYXVfYm8gKm9sZF9ibywKKwkJCSAgc3RydWN0IG5vdXZlYXVfYm8gKm5ld19ibykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbm91dmVhdV9ib19waW4obmV3X2JvLCBUVE1fUExfRkxBR19WUkFNKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdHRtX2JvX3Jlc2VydmUoJm5ld19iby0+Ym8sIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDApOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IHR0bV9ib19yZXNlcnZlKCZvbGRfYm8tPmJvLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfdW5yZXNlcnZlOworCisJcmV0dXJuIDA7CisKK2ZhaWxfdW5yZXNlcnZlOgorCXR0bV9ib191bnJlc2VydmUoJm5ld19iby0+Ym8pOworZmFpbDoKKwlub3V2ZWF1X2JvX3VucGluKG5ld19ibyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK25vdXZlYXVfcGFnZV9mbGlwX3VucmVzZXJ2ZShzdHJ1Y3Qgbm91dmVhdV9ibyAqb2xkX2JvLAorCQkJICAgIHN0cnVjdCBub3V2ZWF1X2JvICpuZXdfYm8sCisJCQkgICAgc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlKQoreworCW5vdXZlYXVfYm9fZmVuY2UobmV3X2JvLCBmZW5jZSk7CisJdHRtX2JvX3VucmVzZXJ2ZSgmbmV3X2JvLT5ibyk7CisKKwlub3V2ZWF1X2JvX2ZlbmNlKG9sZF9ibywgZmVuY2UpOworCXR0bV9ib191bnJlc2VydmUoJm9sZF9iby0+Ym8pOworCisJbm91dmVhdV9ib191bnBpbihvbGRfYm8pOworfQorCitzdGF0aWMgaW50Citub3V2ZWF1X3BhZ2VfZmxpcF9lbWl0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sCisJCSAgICAgICBzdHJ1Y3Qgbm91dmVhdV9ibyAqb2xkX2JvLAorCQkgICAgICAgc3RydWN0IG5vdXZlYXVfYm8gKm5ld19ibywKKwkJICAgICAgIHN0cnVjdCBub3V2ZWF1X3BhZ2VfZmxpcF9zdGF0ZSAqcywKKwkJICAgICAgIHN0cnVjdCBub3V2ZWF1X2ZlbmNlICoqcGZlbmNlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJLyogUXVldWUgaXQgdG8gdGhlIHBlbmRpbmcgbGlzdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZzLT5oZWFkLCAmY2hhbi0+bnZzdy5mbGlwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKworCS8qIFN5bmNocm9uaXplIHdpdGggdGhlIG9sZCBmcmFtZWJ1ZmZlciAqLworCXJldCA9IG5vdXZlYXVfZmVuY2Vfc3luYyhvbGRfYm8tPmJvLnN5bmNfb2JqLCBjaGFuKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwkvKiBFbWl0IHRoZSBwYWdlZmxpcCAqLworCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgMik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJQkVHSU5fUklORyhjaGFuLCBOdlN1YlN3LCBOVl9TV19QQUdFX0ZMSVAsIDEpOworCU9VVF9SSU5HKGNoYW4sIDApOworCUZJUkVfUklORyhjaGFuKTsKKworCXJldCA9IG5vdXZlYXVfZmVuY2VfbmV3KGNoYW4sIHBmZW5jZSwgdHJ1ZSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJcmV0dXJuIDA7CitmYWlsOgorCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmcy0+aGVhZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworaW50Citub3V2ZWF1X2NydGNfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCSAgICAgICBzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfYm8gKm9sZF9ibyA9IG5vdXZlYXVfZnJhbWVidWZmZXIoY3J0Yy0+ZmIpLT5udmJvOworCXN0cnVjdCBub3V2ZWF1X2JvICpuZXdfYm8gPSBub3V2ZWF1X2ZyYW1lYnVmZmVyKGZiKS0+bnZibzsKKwlzdHJ1Y3Qgbm91dmVhdV9wYWdlX2ZsaXBfc3RhdGUgKnM7CisJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbjsKKwlzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2U7CisJaW50IHJldDsKKworCWlmIChkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmFjY2VsX2Jsb2NrZWQpCisJCXJldHVybiAtRU5PREVWOworCisJcyA9IGt6YWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIERvbid0IGxldCB0aGUgYnVmZmVycyBnbyBhd2F5IHdoaWxlIHdlIGZsaXAgKi8KKwlyZXQgPSBub3V2ZWF1X3BhZ2VfZmxpcF9yZXNlcnZlKG9sZF9ibywgbmV3X2JvKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfZnJlZTsKKworCS8qIEluaXRpYWxpemUgYSBwYWdlIGZsaXAgc3RydWN0ICovCisJKnMgPSAoc3RydWN0IG5vdXZlYXVfcGFnZV9mbGlwX3N0YXRlKQorCQl7IHsgfSwgcy0+ZXZlbnQsIG5vdXZlYXVfY3J0YyhjcnRjKS0+aW5kZXgsCisJCSAgZmItPmJpdHNfcGVyX3BpeGVsLCBmYi0+cGl0Y2gsIGNydGMtPngsIGNydGMtPnksCisJCSAgbmV3X2JvLT5iby5vZmZzZXQgfTsKKworCS8qIENob29zZSB0aGUgY2hhbm5lbCB0aGUgZmxpcCB3aWxsIGJlIGhhbmRsZWQgaW4gKi8KKwljaGFuID0gbm91dmVhdV9mZW5jZV9jaGFubmVsKG5ld19iby0+Ym8uc3luY19vYmopOworCWlmICghY2hhbikKKwkJY2hhbiA9IG5vdXZlYXVfY2hhbm5lbF9nZXRfdW5sb2NrZWQoZGV2X3ByaXYtPmNoYW5uZWwpOworCW11dGV4X2xvY2soJmNoYW4tPm11dGV4KTsKKworCS8qIEVtaXQgYSBwYWdlIGZsaXAgKi8KKwlyZXQgPSBub3V2ZWF1X3BhZ2VfZmxpcF9lbWl0KGNoYW4sIG9sZF9ibywgbmV3X2JvLCBzLCAmZmVuY2UpOworCW5vdXZlYXVfY2hhbm5lbF9wdXQoJmNoYW4pOworCWlmIChyZXQpCisJCWdvdG8gZmFpbF91bnJlc2VydmU7CisKKwkvKiBVcGRhdGUgdGhlIGNydGMgc3RydWN0IGFuZCBjbGVhbnVwICovCisJY3J0Yy0+ZmIgPSBmYjsKKworCW5vdXZlYXVfcGFnZV9mbGlwX3VucmVzZXJ2ZShvbGRfYm8sIG5ld19ibywgZmVuY2UpOworCW5vdXZlYXVfZmVuY2VfdW5yZWYoJmZlbmNlKTsKKwlyZXR1cm4gMDsKKworZmFpbF91bnJlc2VydmU6CisJbm91dmVhdV9wYWdlX2ZsaXBfdW5yZXNlcnZlKG9sZF9ibywgbmV3X2JvLCBOVUxMKTsKK2ZhaWxfZnJlZToKKwlrZnJlZShzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK25vdXZlYXVfZmluaXNoX3BhZ2VfZmxpcChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLAorCQkJIHN0cnVjdCBub3V2ZWF1X3BhZ2VfZmxpcF9zdGF0ZSAqcHMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3Qgbm91dmVhdV9wYWdlX2ZsaXBfc3RhdGUgKnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKworCWlmIChsaXN0X2VtcHR5KCZjaGFuLT5udnN3LmZsaXApKSB7CisJCU5WX0VSUk9SKGRldiwgIlVuZXhwZWN0ZWQgcGFnZWZsaXAgaW4gY2hhbm5lbCAlZC5cbiIsIGNoYW4tPmlkKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXMgPSBsaXN0X2ZpcnN0X2VudHJ5KCZjaGFuLT5udnN3LmZsaXAsCisJCQkgICAgIHN0cnVjdCBub3V2ZWF1X3BhZ2VfZmxpcF9zdGF0ZSwgaGVhZCk7CisJaWYgKHMtPmV2ZW50KSB7CisJCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmUgPSBzLT5ldmVudDsKKwkJc3RydWN0IHRpbWV2YWwgbm93OworCisJCWRvX2dldHRpbWVvZmRheSgmbm93KTsKKwkJZS0+ZXZlbnQuc2VxdWVuY2UgPSAwOworCQllLT5ldmVudC50dl9zZWMgPSBub3cudHZfc2VjOworCQllLT5ldmVudC50dl91c2VjID0gbm93LnR2X3VzZWM7CisJCWxpc3RfYWRkX3RhaWwoJmUtPmJhc2UubGluaywgJmUtPmJhc2UuZmlsZV9wcml2LT5ldmVudF9saXN0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZlLT5iYXNlLmZpbGVfcHJpdi0+ZXZlbnRfd2FpdCk7CisJfQorCisJbGlzdF9kZWwoJnMtPmhlYWQpOworCSpwcyA9ICpzOworCWtmcmVlKHMpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuYwppbmRleCA4MjU4MWU2Li42NTY5OWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjaGFuLT5kZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2JvICpwdXNoYnVmID0gY2hhbi0+cHVzaGJ1Zl9ibzsKIAotCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID09IE5WXzUwKSB7CisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApIHsKIAkJY29uc3QgaW50IGliX3NpemUgPSBwdXNoYnVmLT5iby5tZW0uc2l6ZSAvIDI7CiAKIAkJY2hhbi0+ZG1hLmliX2Jhc2UgPSAocHVzaGJ1Zi0+Ym8ubWVtLnNpemUgLSBpYl9zaXplKSA+PiAyOwpAQCAtNTksMTcgKzU5LDI2IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqb2JqID0gTlVMTDsKIAlpbnQgcmV0LCBpOwogCi0JLyogQ3JlYXRlIE5WX01FTU9SWV9UT19NRU1PUllfRk9STUFUIGZvciBidWZmZXIgbW92ZXMgKi8KLQlyZXQgPSBub3V2ZWF1X2dwdW9ial9ncl9uZXcoY2hhbiwgZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzUwID8KLQkJCQkgICAgMHgwMDM5IDogMHg1MDM5LCAmb2JqKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WX0MwKSB7CisJCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2dyX25ldyhjaGFuLCAweDkwMzksIDB4OTAzOSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gbm91dmVhdV9yYW1odF9pbnNlcnQoY2hhbiwgTnZNMk1GLCBvYmopOwotCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmb2JqKTsKKwkJcmV0ID0gUklOR19TUEFDRShjaGFuLCAyKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJQkVHSU5fTlZDMChjaGFuLCAyLCBOdlN1Yk0yTUYsIDB4MDAwMCwgMSk7CisJCU9VVF9SSU5HICAoY2hhbiwgMHgwMDAwOTAzOSk7CisJCUZJUkVfUklORyAoY2hhbik7CisJCXJldHVybiAwOworCX0KKworCS8qIENyZWF0ZSBOVl9NRU1PUllfVE9fTUVNT1JZX0ZPUk1BVCBmb3IgYnVmZmVyIG1vdmVzICovCisJcmV0ID0gbm91dmVhdV9ncHVvYmpfZ3JfbmV3KGNoYW4sIE52TTJNRiwgZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzUwID8KKwkJCQkgICAgMHgwMDM5IDogMHg1MDM5KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC03OCwxMSArODcsNiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQkvKiBNYXAgcHVzaCBidWZmZXIgKi8KLQlyZXQgPSBub3V2ZWF1X2JvX21hcChjaGFuLT5wdXNoYnVmX2JvKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJLyogSW5zZXJ0IE5PUFMgZm9yIE5PVVZFQVVfRE1BX1NLSVBTICovCiAJcmV0ID0gUklOR19TUEFDRShjaGFuLCBOT1VWRUFVX0RNQV9TS0lQUyk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5oCmluZGV4IGQ1NzhjMjEuLmMzNmYxNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuaApAQCAtNzcsNyArNzcsOCBAQAogCS8qIEc4MCsgZGlzcGxheSBvYmplY3RzICovCiAJTnZFdm9WUkFNCT0gMHgwMTAwMDAwMCwKIAlOdkV2b0ZCMTYJPSAweDAxMDAwMDAxLAotCU52RXZvRkIzMgk9IDB4MDEwMDAwMDIKKwlOdkV2b0ZCMzIJPSAweDAxMDAwMDAyLAorCU52RXZvVlJBTV9MUAk9IDB4MDEwMDAwMDMKIH07CiAKICNkZWZpbmUgTlZfTUVNT1JZX1RPX01FTU9SWV9GT1JNQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM5CkBAIC0xMjUsNiArMTI2LDEyIEBACiBPVVRfUklOR3Aoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbnJfZHdvcmRzKTsKIAogc3RhdGljIGlubGluZSB2b2lkCitCRUdJTl9OVkMwKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBvcCwgaW50IHN1YmMsIGludCBtdGhkLCBpbnQgc2l6ZSkKK3sKKwlPVVRfUklORyhjaGFuLCAob3AgPDwgMjgpIHwgKHNpemUgPDwgMTYpIHwgKHN1YmMgPDwgMTMpIHwgKG10aGQgPj4gMikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKIEJFR0lOX1JJTkcoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IHN1YmMsIGludCBtdGhkLCBpbnQgc2l6ZSkKIHsKIAlPVVRfUklORyhjaGFuLCAoc3ViYyA8PCAxMykgfCAoc2l6ZSA8PCAxOCkgfCBtdGhkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYwppbmRleCA0NTYyZjMwLi4zOGQ1OTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcC5jCkBAIC0yNzksNyArMjc5LDcgQEAKIAlzdHJ1Y3QgYml0X2Rpc3BsYXlwb3J0X2VuY29kZXJfdGFibGUgKmRwZTsKIAlpbnQgZHBlX2hlYWRlcmxlbjsKIAl1aW50OF90IGNvbmZpZ1s0XSwgc3RhdHVzWzNdOwotCWJvb2wgY3JfZG9uZSwgY3JfbWF4X3ZzLCBlcV9kb25lOworCWJvb2wgY3JfZG9uZSwgY3JfbWF4X3ZzLCBlcV9kb25lLCBocGRfc3RhdGU7CiAJaW50IHJldCA9IDAsIGksIHRyaWVzLCB2b2x0YWdlOwogCiAJTlZfREVCVUdfS01TKGRldiwgImxpbmsgdHJhaW5pbmchIVxuIik7CkBAIC0yOTcsNyArMjk3LDcgQEAKIAkvKiBkaXNhYmxlIGhvdHBsdWcgZGV0ZWN0LCB0aGlzIGZsaXBzIGFyb3VuZCBvbiBzb21lIHBhbmVscyBkdXJpbmcKIAkgKiBsaW5rIHRyYWluaW5nLgogCSAqLwotCXBncGlvLT5pcnFfZW5hYmxlKGRldiwgbnZfY29ubmVjdG9yLT5kY2ItPmdwaW9fdGFnLCBmYWxzZSk7CisJaHBkX3N0YXRlID0gcGdwaW8tPmlycV9lbmFibGUoZGV2LCBudl9jb25uZWN0b3ItPmRjYi0+Z3Bpb190YWcsIGZhbHNlKTsKIAogCWlmIChkcGUtPnNjcmlwdDApIHsKIAkJTlZfREVCVUdfS01TKGRldiwgIlNPUi0lZDogcnVubmluZyBEUCBzY3JpcHQgMFxuIiwgbnZfZW5jb2Rlci0+b3IpOwpAQCAtNDM5LDcgKzQzOSw3IEBACiAJfQogCiAJLyogcmUtZW5hYmxlIGhvdHBsdWcgZGV0ZWN0ICovCi0JcGdwaW8tPmlycV9lbmFibGUoZGV2LCBudl9jb25uZWN0b3ItPmRjYi0+Z3Bpb190YWcsIHRydWUpOworCXBncGlvLT5pcnFfZW5hYmxlKGRldiwgbnZfY29ubmVjdG9yLT5kY2ItPmdwaW9fdGFnLCBocGRfc3RhdGUpOwogCiAJcmV0dXJuIGVxX2RvbmU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYwppbmRleCA5MDg3NTQ5Li4xM2JiNjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKQEAgLTExNSw2ICsxMTUsMTAgQEAKIGludCBub3V2ZWF1X3BlcmZsdmxfd3I7CiBtb2R1bGVfcGFyYW1fbmFtZWQocGVyZmx2bF93ciwgbm91dmVhdV9wZXJmbHZsX3dyLCBpbnQsIDA0MDApOwogCitNT0RVTEVfUEFSTV9ERVNDKG1zaSwgIkVuYWJsZSBNU0kgKGRlZmF1bHQ6IG9mZilcbiIpOworaW50IG5vdXZlYXVfbXNpOworbW9kdWxlX3BhcmFtX25hbWVkKG1zaSwgbm91dmVhdV9tc2ksIGludCwgMDQwMCk7CisKIGludCBub3V2ZWF1X2ZicGVyY3J0YzsKICNpZiAwCiBtb2R1bGVfcGFyYW1fbmFtZWQoZmJwZXJjcnRjLCBub3V2ZWF1X2ZicGVyY3J0YywgaW50LCAwNDAwKTsKQEAgLTE2Nyw2ICsxNzEsOSBAQAogCWlmIChwbV9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9QUkVUSEFXKQogCQlyZXR1cm4gMDsKIAorCWlmIChkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9PSBEUk1fU1dJVENIX1BPV0VSX09GRikKKwkJcmV0dXJuIDA7CisKIAlOVl9JTkZPKGRldiwgIkRpc2FibGluZyBmYmNvbiBhY2NlbGVyYXRpb24uLi5cbiIpOwogCW5vdXZlYXVfZmJjb25fc2F2ZV9kaXNhYmxlX2FjY2VsKGRldik7CiAKQEAgLTE5MywyMyArMjAwLDEwIEBACiAKIAlOVl9JTkZPKGRldiwgIklkbGluZyBjaGFubmVscy4uLlxuIik7CiAJZm9yIChpID0gMDsgaSA8IHBmaWZvLT5jaGFubmVsczsgaSsrKSB7Ci0JCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZSA9IE5VTEw7CisJCWNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbHMucHRyW2ldOwogCi0JCWNoYW4gPSBkZXZfcHJpdi0+Zmlmb3NbaV07Ci0JCWlmICghY2hhbiB8fCAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCAmJgotCQkJICAgICAgY2hhbiA9PSBkZXZfcHJpdi0+Zmlmb3NbMF0pKQotCQkJY29udGludWU7Ci0KLQkJcmV0ID0gbm91dmVhdV9mZW5jZV9uZXcoY2hhbiwgJmZlbmNlLCB0cnVlKTsKLQkJaWYgKHJldCA9PSAwKSB7Ci0JCQlyZXQgPSBub3V2ZWF1X2ZlbmNlX3dhaXQoZmVuY2UsIE5VTEwsIGZhbHNlLCBmYWxzZSk7Ci0JCQlub3V2ZWF1X2ZlbmNlX3VucmVmKCh2b2lkICopJmZlbmNlKTsKLQkJfQotCi0JCWlmIChyZXQpIHsKLQkJCU5WX0VSUk9SKGRldiwgIkZhaWxlZCB0byBpZGxlIGNoYW5uZWwgJWQgZm9yIHN1c3BlbmRcbiIsCi0JCQkJIGNoYW4tPmlkKTsKLQkJfQorCQlpZiAoY2hhbiAmJiBjaGFuLT5wdXNoYnVmX2JvKQorCQkJbm91dmVhdV9jaGFubmVsX2lkbGUoY2hhbik7CiAJfQogCiAJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIGZhbHNlKTsKQEAgLTIxOSwxNyArMjEzLDE3IEBACiAJcGZpZm8tPnVubG9hZF9jb250ZXh0KGRldik7CiAJcGdyYXBoLT51bmxvYWRfY29udGV4dChkZXYpOwogCi0JTlZfSU5GTyhkZXYsICJTdXNwZW5kaW5nIEdQVSBvYmplY3RzLi4uXG4iKTsKLQlyZXQgPSBub3V2ZWF1X2dwdW9ial9zdXNwZW5kKGRldik7CisJcmV0ID0gcGluc3RtZW0tPnN1c3BlbmQoZGV2KTsKIAlpZiAocmV0KSB7CiAJCU5WX0VSUk9SKGRldiwgIi4uLiBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlnb3RvIG91dF9hYm9ydDsKIAl9CiAKLQlyZXQgPSBwaW5zdG1lbS0+c3VzcGVuZChkZXYpOworCU5WX0lORk8oZGV2LCAiU3VzcGVuZGluZyBHUFUgb2JqZWN0cy4uLlxuIik7CisJcmV0ID0gbm91dmVhdV9ncHVvYmpfc3VzcGVuZChkZXYpOwogCWlmIChyZXQpIHsKIAkJTlZfRVJST1IoZGV2LCAiLi4uIGZhaWxlZDogJWRcbiIsIHJldCk7Ci0JCW5vdXZlYXVfZ3B1b2JqX3N1c3BlbmRfY2xlYW51cChkZXYpOworCQlwaW5zdG1lbS0+cmVzdW1lKGRldik7CiAJCWdvdG8gb3V0X2Fib3J0OwogCX0KIApAQCAtMjYzLDYgKzI1Nyw5IEBACiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCWludCByZXQsIGk7CiAKKwlpZiAoZGV2LT5zd2l0Y2hfcG93ZXJfc3RhdGUgPT0gRFJNX1NXSVRDSF9QT1dFUl9PRkYpCisJCXJldHVybiAwOworCiAJbm91dmVhdV9mYmNvbl9zYXZlX2Rpc2FibGVfYWNjZWwoZGV2KTsKIAogCU5WX0lORk8oZGV2LCAiV2UncmUgYmFjaywgZW5hYmxpbmcgZGV2aWNlLi4uXG4iKTsKQEAgLTI5NCwxNyArMjkxLDE4IEBACiAJCX0KIAl9CiAKKwlOVl9JTkZPKGRldiwgIlJlc3RvcmluZyBHUFUgb2JqZWN0cy4uLlxuIik7CisJbm91dmVhdV9ncHVvYmpfcmVzdW1lKGRldik7CisKIAlOVl9JTkZPKGRldiwgIlJlaW5pdGlhbGlzaW5nIGVuZ2luZXMuLi5cbiIpOwogCWVuZ2luZS0+aW5zdG1lbS5yZXN1bWUoZGV2KTsKIAllbmdpbmUtPm1jLmluaXQoZGV2KTsKIAllbmdpbmUtPnRpbWVyLmluaXQoZGV2KTsKIAllbmdpbmUtPmZiLmluaXQoZGV2KTsKIAllbmdpbmUtPmdyYXBoLmluaXQoZGV2KTsKKwllbmdpbmUtPmNyeXB0LmluaXQoZGV2KTsKIAllbmdpbmUtPmZpZm8uaW5pdChkZXYpOwogCi0JTlZfSU5GTyhkZXYsICJSZXN0b3JpbmcgR1BVIG9iamVjdHMuLi5cbiIpOwotCW5vdXZlYXVfZ3B1b2JqX3Jlc3VtZShkZXYpOwotCiAJbm91dmVhdV9pcnFfcG9zdGluc3RhbGwoZGV2KTsKIAogCS8qIFJlLXdyaXRlIFNLSVBTLCB0aGV5J2xsIGhhdmUgYmVlbiBsb3N0IG92ZXIgdGhlIHN1c3BlbmQgKi8KQEAgLTMxMyw3ICszMTEsNyBAQAogCQlpbnQgajsKIAogCQlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPmVuZ2luZS5maWZvLmNoYW5uZWxzOyBpKyspIHsKLQkJCWNoYW4gPSBkZXZfcHJpdi0+Zmlmb3NbaV07CisJCQljaGFuID0gZGV2X3ByaXYtPmNoYW5uZWxzLnB0cltpXTsKIAkJCWlmICghY2hhbiB8fCAhY2hhbi0+cHVzaGJ1Zl9ibykKIAkJCQljb250aW51ZTsKIApAQCAtMzQ3LDEzICszNDUsMTEgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CiAJCXN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMgPSBub3V2ZWF1X2NydGMoY3J0Yyk7CisJCXUzMiBvZmZzZXQgPSBudl9jcnRjLT5jdXJzb3IubnZiby0+Ym8ubWVtLnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CiAKLQkJbnZfY3J0Yy0+Y3Vyc29yLnNldF9vZmZzZXQobnZfY3J0YywKLQkJCQkJbnZfY3J0Yy0+Y3Vyc29yLm52Ym8tPmJvLm9mZnNldCAtCi0JCQkJCWRldl9wcml2LT52bV92cmFtX2Jhc2UpOwotCisJCW52X2NydGMtPmN1cnNvci5zZXRfb2Zmc2V0KG52X2NydGMsIG9mZnNldCk7CiAJCW52X2NydGMtPmN1cnNvci5zZXRfcG9zKG52X2NydGMsIG52X2NydGMtPmN1cnNvcl9zYXZlZF94LAotCQkJbnZfY3J0Yy0+Y3Vyc29yX3NhdmVkX3kpOworCQkJCQkJIG52X2NydGMtPmN1cnNvcl9zYXZlZF95KTsKIAl9CiAKIAkvKiBGb3JjZSBDTFVUIHRvIGdldCByZS1sb2FkZWQgZHVyaW5nIG1vZGVzZXQgKi8KQEAgLTM5Myw2ICszODksOSBAQAogCS5pcnFfcG9zdGluc3RhbGwgPSBub3V2ZWF1X2lycV9wb3N0aW5zdGFsbCwKIAkuaXJxX3VuaW5zdGFsbCA9IG5vdXZlYXVfaXJxX3VuaW5zdGFsbCwKIAkuaXJxX2hhbmRsZXIgPSBub3V2ZWF1X2lycV9oYW5kbGVyLAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBkcm1fdmJsYW5rX2NvdW50LAorCS5lbmFibGVfdmJsYW5rID0gbm91dmVhdV92YmxhbmtfZW5hYmxlLAorCS5kaXNhYmxlX3ZibGFuayA9IG5vdXZlYXVfdmJsYW5rX2Rpc2FibGUsCiAJLnJlY2xhaW1fYnVmZmVycyA9IGRybV9jb3JlX3JlY2xhaW1fYnVmZmVycywKIAkuaW9jdGxzID0gbm91dmVhdV9pb2N0bHMsCiAJLmZvcHMgPSB7CkBAIC00MDMsNiArNDAyLDcgQEAKIAkJLm1tYXAgPSBub3V2ZWF1X3R0bV9tbWFwLAogCQkucG9sbCA9IGRybV9wb2xsLAogCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKKwkJLnJlYWQgPSBkcm1fcmVhZCwKICNpZiBkZWZpbmVkKENPTkZJR19DT01QQVQpCiAJCS5jb21wYXRfaW9jdGwgPSBub3V2ZWF1X2NvbXBhdF9pb2N0bCwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKaW5kZXggMWM3ZGI2NC4uNDZlMzI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCkBAIC01NCwyMiArNTQsMzcgQEAKICNpbmNsdWRlICJub3V2ZWF1X2RybS5oIgogI2luY2x1ZGUgIm5vdXZlYXVfcmVnLmgiCiAjaW5jbHVkZSAibm91dmVhdV9iaW9zLmgiCisjaW5jbHVkZSAibm91dmVhdV91dGlsLmgiCisKIHN0cnVjdCBub3V2ZWF1X2dyY3R4Oworc3RydWN0IG5vdXZlYXVfdnJhbTsKKyNpbmNsdWRlICJub3V2ZWF1X3ZtLmgiCiAKICNkZWZpbmUgTUFYX05VTV9EQ0JfRU5UUklFUyAxNgogCiAjZGVmaW5lIE5PVVZFQVVfTUFYX0NIQU5ORUxfTlIgMTI4CiAjZGVmaW5lIE5PVVZFQVVfTUFYX1RJTEVfTlIgMTUKIAotI2RlZmluZSBOVjUwX1ZNX01BWF9WUkFNICgyKjEwMjQqMTAyNCoxMDI0VUxMKQotI2RlZmluZSBOVjUwX1ZNX0JMT0NLICAgICg1MTIqMTAyNCoxMDI0VUxMKQotI2RlZmluZSBOVjUwX1ZNX1ZSQU1fTlIgIChOVjUwX1ZNX01BWF9WUkFNIC8gTlY1MF9WTV9CTE9DSykKK3N0cnVjdCBub3V2ZWF1X3ZyYW0geworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisKKwlzdHJ1Y3Qgbm91dmVhdV92bWEgYmFyX3ZtYTsKKwl1OCAgcGFnZV9zaGlmdDsKKworCXN0cnVjdCBsaXN0X2hlYWQgcmVnaW9uczsKKwl1MzIgbWVtdHlwZTsKKwl1NjQgb2Zmc2V0OworCXU2NCBzaXplOworfTsKIAogc3RydWN0IG5vdXZlYXVfdGlsZV9yZWcgewotCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZTsKLQl1aW50MzJfdCBhZGRyOwotCXVpbnQzMl90IHNpemU7CiAJYm9vbCB1c2VkOworCXVpbnQzMl90IGFkZHI7CisJdWludDMyX3QgbGltaXQ7CisJdWludDMyX3QgcGl0Y2g7CisJdWludDMyX3QgemNvbXA7CisJc3RydWN0IGRybV9tbV9ub2RlICp0YWdfbWVtOworCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZTsKIH07CiAKIHN0cnVjdCBub3V2ZWF1X2JvIHsKQEAgLTg4LDYgKzEwMyw3IEBACiAKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFubmVsOwogCisJc3RydWN0IG5vdXZlYXVfdm1hIHZtYTsKIAlib29sIG1hcHBhYmxlOwogCWJvb2wgbm9fdm07CiAKQEAgLTk2LDcgKzExMiw2IEBACiAJc3RydWN0IG5vdXZlYXVfdGlsZV9yZWcgKnRpbGU7CiAKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKLQlzdHJ1Y3QgZHJtX2ZpbGUgKmNwdV9maWxwOwogCWludCBwaW5fcmVmY250OwogfTsKIApAQCAtMTMzLDIwICsxNDgsMjggQEAKIAogI2RlZmluZSBOVk9CSl9FTkdJTkVfU1cJCTAKICNkZWZpbmUgTlZPQkpfRU5HSU5FX0dSCQkxCi0jZGVmaW5lIE5WT0JKX0VOR0lORV9ESVNQTEFZCTIKKyNkZWZpbmUgTlZPQkpfRU5HSU5FX1BQUAkyCisjZGVmaW5lIE5WT0JKX0VOR0lORV9DT1BZCTMKKyNkZWZpbmUgTlZPQkpfRU5HSU5FX1ZQCQk0CisjZGVmaW5lIE5WT0JKX0VOR0lORV9DUllQVCAgICAgIDUKKyNkZWZpbmUgTlZPQkpfRU5HSU5FX0JTUAk2CisjZGVmaW5lIE5WT0JKX0VOR0lORV9ESVNQTEFZCTB4Y2FmZTAwMDEKICNkZWZpbmUgTlZPQkpfRU5HSU5FX0lOVAkweGRlYWRiZWVmCiAKKyNkZWZpbmUgTlZPQkpfRkxBR19ET05UX01BUCAgICAgICAgICAgICAoMSA8PCAwKQogI2RlZmluZSBOVk9CSl9GTEFHX1pFUk9fQUxMT0MJCSgxIDw8IDEpCiAjZGVmaW5lIE5WT0JKX0ZMQUdfWkVST19GUkVFCQkoMSA8PCAyKQorI2RlZmluZSBOVk9CSl9GTEFHX1ZNCQkJKDEgPDwgMykKKworI2RlZmluZSBOVk9CSl9DSU5TVF9HTE9CQUwJMHhkZWFkYmVlZgorCiBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiAJc3RydWN0IGtyZWYgcmVmY291bnQ7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCi0Jc3RydWN0IGRybV9tbV9ub2RlICppbV9wcmFtaW47Ci0Jc3RydWN0IG5vdXZlYXVfYm8gKmltX2JhY2tpbmc7Ci0JdWludDMyX3QgKmltX2JhY2tpbmdfc3VzcGVuZDsKLQlpbnQgaW1fYm91bmQ7CisJdm9pZCAqbm9kZTsKKwl1MzIgKnN1c3BlbmQ7CiAKIAl1aW50MzJfdCBmbGFnczsKIApAQCAtMTYyLDEwICsxODUsMjkgQEAKIAl2b2lkICpwcml2OwogfTsKIAorc3RydWN0IG5vdXZlYXVfcGFnZV9mbGlwX3N0YXRlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQ7CisJaW50IGNydGMsIGJwcCwgcGl0Y2gsIHgsIHk7CisJdWludDY0X3Qgb2Zmc2V0OworfTsKKworZW51bSBub3V2ZWF1X2NoYW5uZWxfbXV0ZXhfY2xhc3MgeworCU5PVVZFQVVfVUNIQU5ORUxfTVVURVgsCisJTk9VVkVBVV9LQ0hBTk5FTF9NVVRFWAorfTsKKwogc3RydWN0IG5vdXZlYXVfY2hhbm5lbCB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIAlpbnQgaWQ7CiAKKwkvKiByZWZlcmVuY2VzIHRvIHRoZSBjaGFubmVsIGRhdGEgc3RydWN0dXJlICovCisJc3RydWN0IGtyZWYgcmVmOworCS8qIHVzZXJzIG9mIHRoZSBoYXJkd2FyZSBjaGFubmVsIHJlc291cmNlcywgdGhlIGhhcmR3YXJlCisJICogY29udGV4dCB3aWxsIGJlIGtpY2tlZCBvZmYgd2hlbiBpdCByZWFjaGVzIHplcm8uICovCisJYXRvbWljX3QgdXNlcnM7CisJc3RydWN0IG11dGV4IG11dGV4OworCiAJLyogb3duZXIgb2YgdGhpcyBmaWZvICovCiAJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXY7CiAJLyogbWFwcGluZyBvZiB0aGUgZmlmbyBpdHNlbGYgKi8KQEAgLTE5OCwxNiArMjQwLDE3IEBACiAJLyogUEZJRk8gY29udGV4dCAqLwogCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcmFtZmM7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpjYWNoZTsKKwl2b2lkICpmaWZvX3ByaXY7CiAKIAkvKiBQR1JBUEggY29udGV4dCAqLwogCS8qIFhYWCBtYXkgYmUgbWVyZ2UgMiBwb2ludGVycyBhcyBwcml2YXRlIGRhdGEgPz8/ICovCiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpyYW1pbl9ncmN0eDsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmNyeXB0X2N0eDsKIAl2b2lkICpwZ3JhcGhfY3R4OwogCiAJLyogTlY1MCBWTSAqLworCXN0cnVjdCBub3V2ZWF1X3ZtICAgICAqdm07CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICp2bV9wZDsKLQlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnZtX2dhcnRfcHQ7Ci0Jc3RydWN0IG5vdXZlYXVfZ3B1b2JqICp2bV92cmFtX3B0W05WNTBfVk1fVlJBTV9OUl07CiAKIAkvKiBPYmplY3RzICovCiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpyYW1pbjsgLyogUHJpdmF0ZSBpbnN0bWVtICovCkBAIC0yMzgsOSArMjgxLDExIEBACiAKIAlzdHJ1Y3QgewogCQlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnZibHNlbTsKKwkJdWludDMyX3QgdmJsc2VtX2hlYWQ7CiAJCXVpbnQzMl90IHZibHNlbV9vZmZzZXQ7CiAJCXVpbnQzMl90IHZibHNlbV9ydmFsOwogCQlzdHJ1Y3QgbGlzdF9oZWFkIHZibF93YWl0OworCQlzdHJ1Y3QgbGlzdF9oZWFkIGZsaXA7CiAJfSBudnN3OwogCiAJc3RydWN0IHsKQEAgLTI1OCwxMSArMzAzLDExIEBACiAJaW50CSgqc3VzcGVuZCkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAJdm9pZAkoKnJlc3VtZSkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKLQlpbnQJKCpwb3B1bGF0ZSkoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICosCi0JCQkgICAgdWludDMyX3QgKnNpemUpOwotCXZvaWQJKCpjbGVhcikoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICopOwotCWludAkoKmJpbmQpKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKTsKLQlpbnQJKCp1bmJpbmQpKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKTsKKwlpbnQJKCpnZXQpKHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqLCB1MzIgc2l6ZSwgdTMyIGFsaWduKTsKKwl2b2lkCSgqcHV0KShzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7CisJaW50CSgqbWFwKShzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7CisJdm9pZAkoKnVubWFwKShzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7CisKIAl2b2lkCSgqZmx1c2gpKHN0cnVjdCBkcm1fZGV2aWNlICopOwogfTsKIApAQCAtMjc5LDE1ICszMjQsMjEgQEAKIAogc3RydWN0IG5vdXZlYXVfZmJfZW5naW5lIHsKIAlpbnQgbnVtX3RpbGVzOworCXN0cnVjdCBkcm1fbW0gdGFnX2hlYXA7CisJdm9pZCAqcHJpdjsKIAogCWludCAgKCppbml0KShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAl2b2lkICgqdGFrZWRvd24pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCi0Jdm9pZCAoKnNldF9yZWdpb25fdGlsaW5nKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSwgdWludDMyX3QgYWRkciwKLQkJCQkgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgcGl0Y2gpOworCXZvaWQgKCppbml0X3RpbGVfcmVnaW9uKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSwKKwkJCQkgdWludDMyX3QgYWRkciwgdWludDMyX3Qgc2l6ZSwKKwkJCQkgdWludDMyX3QgcGl0Y2gsIHVpbnQzMl90IGZsYWdzKTsKKwl2b2lkICgqc2V0X3RpbGVfcmVnaW9uKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSk7CisJdm9pZCAoKmZyZWVfdGlsZV9yZWdpb24pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpKTsKIH07CiAKIHN0cnVjdCBub3V2ZWF1X2ZpZm9fZW5naW5lIHsKKwl2b2lkICpwcml2OwogCWludCAgY2hhbm5lbHM7CiAKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnBsYXlsaXN0WzJdOwpAQCAtMzEwLDIyICszNjEsMTEgQEAKIAl2b2lkICgqdGxiX2ZsdXNoKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIH07CiAKLXN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfbWV0aG9kIHsKLQlpbnQgaWQ7Ci0JaW50ICgqZXhlYykoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGdyY2xhc3MsIGludCBtdGhkLAotCQkgICAgICB1aW50MzJfdCBkYXRhKTsKLX07Ci0KLXN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfY2xhc3MgewotCWludCBpZDsKLQlib29sIHNvZnR3YXJlOwotCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfbWV0aG9kICptZXRob2RzOwotfTsKLQogc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSB7Ci0Jc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9jbGFzcyAqZ3JjbGFzczsKIAlib29sIGFjY2VsX2Jsb2NrZWQ7CisJYm9vbCByZWdpc3RlcmVkOwogCWludCBncmN0eF9zaXplOworCXZvaWQgKnByaXY7CiAKIAkvKiBOVjJ4L05WM3ggY29udGV4dCB0YWJsZSAoMHg0MDA3ODApICovCiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpjdHhfdGFibGU7CkBAIC0zNDIsOCArMzgyLDcgQEAKIAlpbnQgICgqdW5sb2FkX2NvbnRleHQpKHN0cnVjdCBkcm1fZGV2aWNlICopOwogCXZvaWQgKCp0bGJfZmx1c2gpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCi0Jdm9pZCAoKnNldF9yZWdpb25fdGlsaW5nKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSwgdWludDMyX3QgYWRkciwKLQkJCQkgIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IHBpdGNoKTsKKwl2b2lkICgqc2V0X3RpbGVfcmVnaW9uKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSk7CiB9OwogCiBzdHJ1Y3Qgbm91dmVhdV9kaXNwbGF5X2VuZ2luZSB7CkBAIC0zNTUsMTMgKzM5NCwxOSBAQAogfTsKIAogc3RydWN0IG5vdXZlYXVfZ3Bpb19lbmdpbmUgeworCXZvaWQgKnByaXY7CisKIAlpbnQgICgqaW5pdCkoc3RydWN0IGRybV9kZXZpY2UgKik7CiAJdm9pZCAoKnRha2Vkb3duKShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIAogCWludCAgKCpnZXQpKHN0cnVjdCBkcm1fZGV2aWNlICosIGVudW0gZGNiX2dwaW9fdGFnKTsKIAlpbnQgICgqc2V0KShzdHJ1Y3QgZHJtX2RldmljZSAqLCBlbnVtIGRjYl9ncGlvX3RhZywgaW50IHN0YXRlKTsKIAotCXZvaWQgKCppcnFfZW5hYmxlKShzdHJ1Y3QgZHJtX2RldmljZSAqLCBlbnVtIGRjYl9ncGlvX3RhZywgYm9vbCBvbik7CisJaW50ICAoKmlycV9yZWdpc3Rlcikoc3RydWN0IGRybV9kZXZpY2UgKiwgZW51bSBkY2JfZ3Bpb190YWcsCisJCQkgICAgIHZvaWQgKCopKHZvaWQgKiwgaW50KSwgdm9pZCAqKTsKKwl2b2lkICgqaXJxX3VucmVnaXN0ZXIpKHN0cnVjdCBkcm1fZGV2aWNlICosIGVudW0gZGNiX2dwaW9fdGFnLAorCQkJICAgICAgIHZvaWQgKCopKHZvaWQgKiwgaW50KSwgdm9pZCAqKTsKKwlib29sICgqaXJxX2VuYWJsZSkoc3RydWN0IGRybV9kZXZpY2UgKiwgZW51bSBkY2JfZ3Bpb190YWcsIGJvb2wgb24pOwogfTsKIAogc3RydWN0IG5vdXZlYXVfcG1fdm9sdGFnZV9sZXZlbCB7CkBAIC00MzcsNiArNDgyLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9wbV9sZXZlbCAqY3VyOwogCiAJc3RydWN0IGRldmljZSAqaHdtb247CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGFjcGlfbmI7CiAKIAlpbnQgKCpjbG9ja19nZXQpKHN0cnVjdCBkcm1fZGV2aWNlICosIHUzMiBpZCk7CiAJdm9pZCAqKCpjbG9ja19wcmUpKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBub3V2ZWF1X3BtX2xldmVsICosCkBAIC00NDksNiArNDk1LDI1IEBACiAJaW50ICgqdGVtcF9nZXQpKHN0cnVjdCBkcm1fZGV2aWNlICopOwogfTsKIAorc3RydWN0IG5vdXZlYXVfY3J5cHRfZW5naW5lIHsKKwlib29sIHJlZ2lzdGVyZWQ7CisKKwlpbnQgICgqaW5pdCkoc3RydWN0IGRybV9kZXZpY2UgKik7CisJdm9pZCAoKnRha2Vkb3duKShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKKwlpbnQgICgqY3JlYXRlX2NvbnRleHQpKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CisJdm9pZCAoKmRlc3Ryb3lfY29udGV4dCkoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKTsKKwl2b2lkICgqdGxiX2ZsdXNoKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK307CisKK3N0cnVjdCBub3V2ZWF1X3ZyYW1fZW5naW5lIHsKKwlpbnQgICgqaW5pdCkoc3RydWN0IGRybV9kZXZpY2UgKik7CisJaW50ICAoKmdldCkoc3RydWN0IGRybV9kZXZpY2UgKiwgdTY0LCB1MzIgYWxpZ24sIHUzMiBzaXplX25jLAorCQkgICAgdTMyIHR5cGUsIHN0cnVjdCBub3V2ZWF1X3ZyYW0gKiopOworCXZvaWQgKCpwdXQpKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBub3V2ZWF1X3ZyYW0gKiopOworCisJYm9vbCAoKmZsYWdzX3ZhbGlkKShzdHJ1Y3QgZHJtX2RldmljZSAqLCB1MzIgdGlsZV9mbGFncyk7Cit9OworCiBzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgewogCXN0cnVjdCBub3V2ZWF1X2luc3RtZW1fZW5naW5lIGluc3RtZW07CiAJc3RydWN0IG5vdXZlYXVfbWNfZW5naW5lICAgICAgbWM7CkBAIC00NTksNiArNTI0LDggQEAKIAlzdHJ1Y3Qgbm91dmVhdV9kaXNwbGF5X2VuZ2luZSBkaXNwbGF5OwogCXN0cnVjdCBub3V2ZWF1X2dwaW9fZW5naW5lICAgIGdwaW87CiAJc3RydWN0IG5vdXZlYXVfcG1fZW5naW5lICAgICAgcG07CisJc3RydWN0IG5vdXZlYXVfY3J5cHRfZW5naW5lICAgY3J5cHQ7CisJc3RydWN0IG5vdXZlYXVfdnJhbV9lbmdpbmUgICAgdnJhbTsKIH07CiAKIHN0cnVjdCBub3V2ZWF1X3BsbF92YWxzIHsKQEAgLTU3NywxOCArNjQ0LDE1IEBACiAJYm9vbCByYW1pbl9hdmFpbGFibGU7CiAJc3RydWN0IGRybV9tbSByYW1pbl9oZWFwOwogCXN0cnVjdCBsaXN0X2hlYWQgZ3B1b2JqX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBjbGFzc2VzOwogCiAJc3RydWN0IG5vdXZlYXVfYm8gKnZnYV9yYW07CiAKKwkvKiBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KKwl2b2lkICgqaXJxX2hhbmRsZXJbMzJdKShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKKwlib29sIG1zaV9lbmFibGVkOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaXJxX3dvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGhwZF93b3JrOwotCi0Jc3RydWN0IHsKLQkJc3BpbmxvY2tfdCBsb2NrOwotCQl1aW50MzJfdCBocGQwX2JpdHM7Ci0JCXVpbnQzMl90IGhwZDFfYml0czsKLQl9IGhwZF9zdGF0ZTsKIAogCXN0cnVjdCBsaXN0X2hlYWQgdmJsX3dhaXRpbmc7CiAKQEAgLTYwNSw4ICs2NjksMTAgQEAKIAkJc3RydWN0IG5vdXZlYXVfYm8gKmJvOwogCX0gZmVuY2U7CiAKLQlpbnQgZmlmb19hbGxvY19jb3VudDsKLQlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpmaWZvc1tOT1VWRUFVX01BWF9DSEFOTkVMX05SXTsKKwlzdHJ1Y3QgeworCQlzcGlubG9ja190IGxvY2s7CisJCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKnB0cltOT1VWRUFVX01BWF9DSEFOTkVMX05SXTsKKwl9IGNoYW5uZWxzOwogCiAJc3RydWN0IG5vdXZlYXVfZW5naW5lIGVuZ2luZTsKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFubmVsOwpAQCAtNjMyLDEyICs2OTgsMTQgQEAKIAkJdWludDY0X3QgYXBlcl9mcmVlOwogCiAJCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqc2dfY3R4ZG1hOwotCQlzdHJ1Y3QgcGFnZSAqc2dfZHVtbXlfcGFnZTsKLQkJZG1hX2FkZHJfdCBzZ19kdW1teV9idXM7CisJCXN0cnVjdCBub3V2ZWF1X3ZtYSB2bWE7CiAJfSBnYXJ0X2luZm87CiAKIAkvKiBudjEwLW52NDAgdGlsaW5nIHJlZ2lvbnMgKi8KLQlzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyB0aWxlW05PVVZFQVVfTUFYX1RJTEVfTlJdOworCXN0cnVjdCB7CisJCXN0cnVjdCBub3V2ZWF1X3RpbGVfcmVnIHJlZ1tOT1VWRUFVX01BWF9USUxFX05SXTsKKwkJc3BpbmxvY2tfdCBsb2NrOworCX0gdGlsZTsKIAogCS8qIFZSQU0vZmIgY29uZmlndXJhdGlvbiAqLwogCXVpbnQ2NF90IHZyYW1fc2l6ZTsKQEAgLTY1MCwxNCArNzE4LDEyIEBACiAJdWludDY0X3QgZmJfYXBlcl9mcmVlOwogCWludCBmYl9tdHJyOwogCisJLyogQkFSIGNvbnRyb2wgKE5WNTAtKSAqLworCXN0cnVjdCBub3V2ZWF1X3ZtICpiYXIxX3ZtOworCXN0cnVjdCBub3V2ZWF1X3ZtICpiYXIzX3ZtOworCiAJLyogRzh4L0c5eCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgKi8KLQl1aW50NjRfdCB2bV9nYXJ0X2Jhc2U7Ci0JdWludDY0X3Qgdm1fZ2FydF9zaXplOwotCXVpbnQ2NF90IHZtX3ZyYW1fYmFzZTsKLQl1aW50NjRfdCB2bV92cmFtX3NpemU7Ci0JdWludDY0X3Qgdm1fZW5kOwotCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqdm1fdnJhbV9wdFtOVjUwX1ZNX1ZSQU1fTlJdOwotCWludCB2bV92cmFtX3B0X25yOworCXN0cnVjdCBub3V2ZWF1X3ZtICpjaGFuX3ZtOwogCiAJc3RydWN0IG52YmlvcyB2YmlvczsKIApAQCAtNjc0LDYgKzc0MCw3IEBACiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodDsKIAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmV2bzsKKwl1MzIgZXZvX2FsbG9jOwogCXN0cnVjdCB7CiAJCXN0cnVjdCBkY2JfZW50cnkgKmRjYjsKIAkJdTE2IHNjcmlwdDsKQEAgLTY4Niw2ICs3NTMsOCBAQAogCiAJc3RydWN0IG5vdXZlYXVfZmJkZXYgKm5mYmRldjsKIAlzdHJ1Y3QgYXBlcnR1cmVzX3N0cnVjdCAqYXBlcnR1cmVzOworCisJYm9vbCBwb3dlcmVkX2Rvd247CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICoKQEAgLTcxOSwxNiArNzg4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBOT1VWRUFVX0dFVF9VU0VSX0NIQU5ORUxfV0lUSF9SRVRVUk4oaWQsIGNsLCBjaCkgZG8geyAgICBcCi0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKm52ID0gZGV2LT5kZXZfcHJpdmF0ZTsgICAgICAgXAotCWlmICghbm91dmVhdV9jaGFubmVsX293bmVyKGRldiwgKGNsKSwgKGlkKSkpIHsgICAgICAgICAgIFwKLQkJTlZfRVJST1IoZGV2LCAicGlkICVkIGRvZXNuJ3Qgb3duIGNoYW5uZWwgJWRcbiIsIFwKLQkJCSBEUk1fQ1VSUkVOVFBJRCwgKGlkKSk7ICAgICAgICAgICAgICAgICAgXAotCQlyZXR1cm4gLUVQRVJNOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkoY2gpID0gbnYtPmZpZm9zWyhpZCldOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlICgwKQotCiAvKiBub3V2ZWF1X2Rydi5jICovCiBleHRlcm4gaW50IG5vdXZlYXVfYWdwbW9kZTsKIGV4dGVybiBpbnQgbm91dmVhdV9kdWFsbGluazsKQEAgLTc0OCw2ICs4MDcsNyBAQAogZXh0ZXJuIGludCBub3V2ZWF1X292ZXJyaWRlX2Nvbm50eXBlOwogZXh0ZXJuIGNoYXIgKm5vdXZlYXVfcGVyZmx2bDsKIGV4dGVybiBpbnQgbm91dmVhdV9wZXJmbHZsX3dyOworZXh0ZXJuIGludCBub3V2ZWF1X21zaTsKIAogZXh0ZXJuIGludCBub3V2ZWF1X3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3QgcG1fc3RhdGUpOwogZXh0ZXJuIGludCBub3V2ZWF1X3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwpAQCAtNzYyLDggKzgyMiwxMCBAQAogCQkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqKTsKIGV4dGVybiBpbnQgIG5vdXZlYXVfaW9jdGxfc2V0cGFyYW0oc3RydWN0IGRybV9kZXZpY2UgKiwgdm9pZCAqZGF0YSwKIAkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKik7Ci1leHRlcm4gYm9vbCBub3V2ZWF1X3dhaXRfdW50aWwoc3RydWN0IGRybV9kZXZpY2UgKiwgdWludDY0X3QgdGltZW91dCwKLQkJCSAgICAgICB1aW50MzJfdCByZWcsIHVpbnQzMl90IG1hc2ssIHVpbnQzMl90IHZhbCk7CitleHRlcm4gYm9vbCBub3V2ZWF1X3dhaXRfZXEoc3RydWN0IGRybV9kZXZpY2UgKiwgdWludDY0X3QgdGltZW91dCwKKwkJCSAgICB1aW50MzJfdCByZWcsIHVpbnQzMl90IG1hc2ssIHVpbnQzMl90IHZhbCk7CitleHRlcm4gYm9vbCBub3V2ZWF1X3dhaXRfbmUoc3RydWN0IGRybV9kZXZpY2UgKiwgdWludDY0X3QgdGltZW91dCwKKwkJCSAgICB1aW50MzJfdCByZWcsIHVpbnQzMl90IG1hc2ssIHVpbnQzMl90IHZhbCk7CiBleHRlcm4gYm9vbCBub3V2ZWF1X3dhaXRfZm9yX2lkbGUoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gaW50ICBub3V2ZWF1X2NhcmRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIApAQCAtNzc1LDE4ICs4MzcsMTggQEAKIGV4dGVybiBpbnQgIG5vdXZlYXVfbWVtX2luaXRfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIGludCAgbm91dmVhdV9tZW1fcmVzZXRfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgbm91dmVhdV9tZW1fY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKik7Ci1leHRlcm4gc3RydWN0IG5vdXZlYXVfdGlsZV9yZWcgKm52MTBfbWVtX3NldF90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkJCSAgICB1aW50MzJfdCBhZGRyLAotCQkJCQkJICAgIHVpbnQzMl90IHNpemUsCi0JCQkJCQkgICAgdWludDMyX3QgcGl0Y2gpOwotZXh0ZXJuIHZvaWQgbnYxMF9tZW1fZXhwaXJlX3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBub3V2ZWF1X3RpbGVfcmVnICp0aWxlLAotCQkJCSAgIHN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZSk7Ci1leHRlcm4gaW50ICBudjUwX21lbV92bV9iaW5kX2xpbmVhcihzdHJ1Y3QgZHJtX2RldmljZSAqLCB1aW50NjRfdCB2aXJ0LAotCQkJCSAgICB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBmbGFncywKLQkJCQkgICAgdWludDY0X3QgcGh5cyk7Ci1leHRlcm4gdm9pZCBudjUwX21lbV92bV91bmJpbmQoc3RydWN0IGRybV9kZXZpY2UgKiwgdWludDY0X3QgdmlydCwKLQkJCSAgICAgICB1aW50MzJfdCBzaXplKTsKK2V4dGVybiBpbnQgIG5vdXZlYXVfbWVtX2RldGVjdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK2V4dGVybiBib29sIG5vdXZlYXVfbWVtX2ZsYWdzX3ZhbGlkKHN0cnVjdCBkcm1fZGV2aWNlICosIHUzMiB0aWxlX2ZsYWdzKTsKK2V4dGVybiBzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqbnYxMF9tZW1fc2V0X3RpbGluZygKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCBzaXplLAorCXVpbnQzMl90IHBpdGNoLCB1aW50MzJfdCBmbGFncyk7CitleHRlcm4gdm9pZCBudjEwX21lbV9wdXRfdGlsZV9yZWdpb24oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBub3V2ZWF1X3RpbGVfcmVnICp0aWxlLAorCQkJCSAgICAgc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXJfZnVuYyBub3V2ZWF1X3ZyYW1fbWFuYWdlcjsKKworLyogbnZjMF92cmFtLmMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXJfZnVuYyBudmMwX3ZyYW1fbWFuYWdlcjsKIAogLyogbm91dmVhdV9ub3RpZmllci5jICovCiBleHRlcm4gaW50ICBub3V2ZWF1X25vdGlmaWVyX2luaXRfY2hhbm5lbChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwpAQCAtODAzLDIxICs4NjUsNDQgQEAKIGV4dGVybiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2Mgbm91dmVhdV9pb2N0bHNbXTsKIGV4dGVybiBpbnQgbm91dmVhdV9tYXhfaW9jdGw7CiBleHRlcm4gdm9pZCBub3V2ZWF1X2NoYW5uZWxfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3QgZHJtX2ZpbGUgKik7Ci1leHRlcm4gaW50ICBub3V2ZWF1X2NoYW5uZWxfb3duZXIoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IGRybV9maWxlICosCi0JCQkJICBpbnQgY2hhbm5lbCk7CiBleHRlcm4gaW50ICBub3V2ZWF1X2NoYW5uZWxfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKipjaGFuLAogCQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCiAJCQkJICB1aW50MzJfdCBmYl9jdHhkbWEsIHVpbnQzMl90IHR0X2N0eGRtYSk7Ci1leHRlcm4gdm9pZCBub3V2ZWF1X2NoYW5uZWxfZnJlZShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOworZXh0ZXJuIHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKgorbm91dmVhdV9jaGFubmVsX2dldF91bmxvY2tlZChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOworZXh0ZXJuIHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKgorbm91dmVhdV9jaGFubmVsX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3QgZHJtX2ZpbGUgKiwgaW50IGlkKTsKK2V4dGVybiB2b2lkIG5vdXZlYXVfY2hhbm5lbF9wdXRfdW5sb2NrZWQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKik7CitleHRlcm4gdm9pZCBub3V2ZWF1X2NoYW5uZWxfcHV0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKiopOworZXh0ZXJuIHZvaWQgbm91dmVhdV9jaGFubmVsX3JlZihzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLAorCQkJCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKipwY2hhbik7CitleHRlcm4gdm9pZCBub3V2ZWF1X2NoYW5uZWxfaWRsZShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKTsKIAogLyogbm91dmVhdV9vYmplY3QuYyAqLworI2RlZmluZSBOVk9CSl9DTEFTUyhkLGMsZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpbnQgcmV0ID0gbm91dmVhdV9ncHVvYmpfY2xhc3NfbmV3KChkKSwgKGMpLCBOVk9CSl9FTkdJTkVfIyNlKTsgICAgICAgIFwKKwlpZiAocmV0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJcmV0dXJuIHJldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIE5WT0JKX01USEQoZCxjLG0sZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWludCByZXQgPSBub3V2ZWF1X2dwdW9ial9tdGhkX25ldygoZCksIChjKSwgKG0pLCAoZSkpOyAgICAgICAgICAgICAgICAgXAorCWlmIChyZXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlyZXR1cm4gcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlKDApCisKIGV4dGVybiBpbnQgIG5vdXZlYXVfZ3B1b2JqX2Vhcmx5X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gaW50ICBub3V2ZWF1X2dwdW9ial9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgbm91dmVhdV9ncHVvYmpfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gaW50ICBub3V2ZWF1X2dwdW9ial9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgbm91dmVhdV9ncHVvYmpfc3VzcGVuZF9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgbm91dmVhdV9ncHVvYmpfcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCAgbm91dmVhdV9ncHVvYmpfY2xhc3NfbmV3KHN0cnVjdCBkcm1fZGV2aWNlICosIHUzMiBjbGFzcywgdTMyIGVuZyk7CitleHRlcm4gaW50ICBub3V2ZWF1X2dwdW9ial9tdGhkX25ldyhzdHJ1Y3QgZHJtX2RldmljZSAqLCB1MzIgY2xhc3MsIHUzMiBtdGhkLAorCQkJCSAgICBpbnQgKCpleGVjKShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosCisJCQkJCSAgICAgICAgdTMyIGNsYXNzLCB1MzIgbXRoZCwgdTMyIGRhdGEpKTsKK2V4dGVybiBpbnQgIG5vdXZlYXVfZ3B1b2JqX210aGRfY2FsbChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosIHUzMiwgdTMyLCB1MzIpOworZXh0ZXJuIGludCAgbm91dmVhdV9ncHVvYmpfbXRoZF9jYWxsMihzdHJ1Y3QgZHJtX2RldmljZSAqLCBpbnQsIHUzMiwgdTMyLCB1MzIpOwogZXh0ZXJuIGludCBub3V2ZWF1X2dwdW9ial9jaGFubmVsX2luaXQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqLAogCQkJCSAgICAgICB1aW50MzJfdCB2cmFtX2gsIHVpbnQzMl90IHR0X2gpOwogZXh0ZXJuIHZvaWQgbm91dmVhdV9ncHVvYmpfY2hhbm5lbF90YWtlZG93bihzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwpAQCAtODMyLDIxICs5MTcsMjUgQEAKIGV4dGVybiBpbnQgbm91dmVhdV9ncHVvYmpfZG1hX25ldyhzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosIGludCBjbGFzcywKIAkJCQkgIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSwgaW50IGFjY2VzcywKIAkJCQkgIGludCB0YXJnZXQsIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKik7Ci1leHRlcm4gaW50IG5vdXZlYXVfZ3B1b2JqX2dhcnRfZG1hX25ldyhzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosCi0JCQkJICAgICAgIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSwKLQkJCQkgICAgICAgaW50IGFjY2Vzcywgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICoqLAotCQkJCSAgICAgICB1aW50MzJfdCAqb19yZXQpOwotZXh0ZXJuIGludCBub3V2ZWF1X2dwdW9ial9ncl9uZXcoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqLCBpbnQgY2xhc3MsCi0JCQkJIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKik7Ci1leHRlcm4gaW50IG5vdXZlYXVfZ3B1b2JqX3N3X25ldyhzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosIGludCBjbGFzcywKLQkJCQkgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICoqKTsKK2V4dGVybiBpbnQgbm91dmVhdV9ncHVvYmpfZ3JfbmV3KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKiwgdTMyIGhhbmRsZSwgaW50IGNsYXNzKTsKK2V4dGVybiBpbnQgbnY1MF9ncHVvYmpfZG1hX25ldyhzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosIGludCBjbGFzcywgdTY0IGJhc2UsCisJCQkgICAgICAgdTY0IHNpemUsIGludCB0YXJnZXQsIGludCBhY2Nlc3MsIHUzMiB0eXBlLAorCQkJICAgICAgIHUzMiBjb21wLCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKipwb2JqKTsKK2V4dGVybiB2b2lkIG52NTBfZ3B1b2JqX2RtYV9pbml0KHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqLCB1MzIgb2Zmc2V0LAorCQkJCSBpbnQgY2xhc3MsIHU2NCBiYXNlLCB1NjQgc2l6ZSwgaW50IHRhcmdldCwKKwkJCQkgaW50IGFjY2VzcywgdTMyIHR5cGUsIHUzMiBjb21wKTsKIGV4dGVybiBpbnQgbm91dmVhdV9pb2N0bF9ncm9ial9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqLCB2b2lkICpkYXRhLAogCQkJCSAgICAgc3RydWN0IGRybV9maWxlICopOwogZXh0ZXJuIGludCBub3V2ZWF1X2lvY3RsX2dwdW9ial9mcmVlKHN0cnVjdCBkcm1fZGV2aWNlICosIHZvaWQgKmRhdGEsCiAJCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKik7CiAKIC8qIG5vdXZlYXVfaXJxLmMgKi8KK2V4dGVybiBpbnQgICAgICAgICBub3V2ZWF1X2lycV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOworZXh0ZXJuIHZvaWQgICAgICAgIG5vdXZlYXVfaXJxX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gaXJxcmV0dXJuX3Qgbm91dmVhdV9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOworZXh0ZXJuIHZvaWQgICAgICAgIG5vdXZlYXVfaXJxX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICosIGludCBzdGF0dXNfYml0LAorCQkJCQl2b2lkICgqKShzdHJ1Y3QgZHJtX2RldmljZSAqKSk7CitleHRlcm4gdm9pZCAgICAgICAgbm91dmVhdV9pcnFfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqLCBpbnQgc3RhdHVzX2JpdCk7CiBleHRlcm4gdm9pZCAgICAgICAgbm91dmVhdV9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiBpbnQgICAgICAgICBub3V2ZWF1X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkICAgICAgICBub3V2ZWF1X2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKik7CkBAIC04NTQsOCArOTQzLDggQEAKIC8qIG5vdXZlYXVfc2dkbWEuYyAqLwogZXh0ZXJuIGludCBub3V2ZWF1X3NnZG1hX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gdm9pZCBub3V2ZWF1X3NnZG1hX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIGludCBub3V2ZWF1X3NnZG1hX2dldF9wYWdlKHN0cnVjdCBkcm1fZGV2aWNlICosIHVpbnQzMl90IG9mZnNldCwKLQkJCQkgIHVpbnQzMl90ICpwYWdlKTsKK2V4dGVybiB1aW50MzJfdCBub3V2ZWF1X3NnZG1hX2dldF9waHlzaWNhbChzdHJ1Y3QgZHJtX2RldmljZSAqLAorCQkJCQkgICB1aW50MzJfdCBvZmZzZXQpOwogZXh0ZXJuIHN0cnVjdCB0dG1fYmFja2VuZCAqbm91dmVhdV9zZ2RtYV9pbml0X3R0bShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIAogLyogbm91dmVhdV9kZWJ1Z2ZzLmMgKi8KQEAgLTk2NiwxOCArMTA1NSwyNSBAQAogLyogbnYxMF9mYi5jICovCiBleHRlcm4gaW50ICBudjEwX2ZiX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gdm9pZCBudjEwX2ZiX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIHZvaWQgbnYxMF9mYl9zZXRfcmVnaW9uX3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqLCBpbnQsIHVpbnQzMl90LAotCQkJCSAgICAgIHVpbnQzMl90LCB1aW50MzJfdCk7CitleHRlcm4gdm9pZCBudjEwX2ZiX2luaXRfdGlsZV9yZWdpb24oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGksCisJCQkJICAgICB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCBzaXplLAorCQkJCSAgICAgdWludDMyX3QgcGl0Y2gsIHVpbnQzMl90IGZsYWdzKTsKK2V4dGVybiB2b2lkIG52MTBfZmJfc2V0X3RpbGVfcmVnaW9uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpKTsKK2V4dGVybiB2b2lkIG52MTBfZmJfZnJlZV90aWxlX3JlZ2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSk7CiAKIC8qIG52MzBfZmIuYyAqLwogZXh0ZXJuIGludCAgbnYzMF9mYl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgbnYzMF9mYl90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK2V4dGVybiB2b2lkIG52MzBfZmJfaW5pdF90aWxlX3JlZ2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSwKKwkJCQkgICAgIHVpbnQzMl90IGFkZHIsIHVpbnQzMl90IHNpemUsCisJCQkJICAgICB1aW50MzJfdCBwaXRjaCwgdWludDMyX3QgZmxhZ3MpOworZXh0ZXJuIHZvaWQgbnYzMF9mYl9mcmVlX3RpbGVfcmVnaW9uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpKTsKIAogLyogbnY0MF9mYi5jICovCiBleHRlcm4gaW50ICBudjQwX2ZiX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gdm9pZCBudjQwX2ZiX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIHZvaWQgbnY0MF9mYl9zZXRfcmVnaW9uX3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqLCBpbnQsIHVpbnQzMl90LAotCQkJCSAgICAgIHVpbnQzMl90LCB1aW50MzJfdCk7CitleHRlcm4gdm9pZCBudjQwX2ZiX3NldF90aWxlX3JlZ2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSk7CisKIC8qIG52NTBfZmIuYyAqLwogZXh0ZXJuIGludCAgbnY1MF9mYl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgbnY1MF9mYl90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKQEAgLTk4OSw2ICsxMDg1LDcgQEAKIAogLyogbnYwNF9maWZvLmMgKi8KIGV4dGVybiBpbnQgIG52MDRfZmlmb19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOworZXh0ZXJuIHZvaWQgbnYwNF9maWZvX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gdm9pZCBudjA0X2ZpZm9fZGlzYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52MDRfZmlmb19lbmFibGUoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gYm9vbCBudjA0X2ZpZm9fcmVhc3NpZ24oc3RydWN0IGRybV9kZXZpY2UgKiwgYm9vbCk7CkBAIC05OTgsMTkgKzEwOTUsMTggQEAKIGV4dGVybiB2b2lkIG52MDRfZmlmb19kZXN0cm95X2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKTsKIGV4dGVybiBpbnQgIG52MDRfZmlmb19sb2FkX2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKTsKIGV4dGVybiBpbnQgIG52MDRfZmlmb191bmxvYWRfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK2V4dGVybiB2b2lkIG52MDRfZmlmb19pc3Ioc3RydWN0IGRybV9kZXZpY2UgKik7CiAKIC8qIG52MTBfZmlmby5jICovCiBleHRlcm4gaW50ICBudjEwX2ZpZm9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiBpbnQgIG52MTBfZmlmb19jaGFubmVsX2lkKHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIGludCAgbnYxMF9maWZvX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7Ci1leHRlcm4gdm9pZCBudjEwX2ZpZm9fZGVzdHJveV9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CiBleHRlcm4gaW50ICBudjEwX2ZpZm9fbG9hZF9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CiBleHRlcm4gaW50ICBudjEwX2ZpZm9fdW5sb2FkX2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKik7CiAKIC8qIG52NDBfZmlmby5jICovCiBleHRlcm4gaW50ICBudjQwX2ZpZm9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiBpbnQgIG52NDBfZmlmb19jcmVhdGVfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwotZXh0ZXJuIHZvaWQgbnY0MF9maWZvX2Rlc3Ryb3lfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIGludCAgbnY0MF9maWZvX2xvYWRfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIGludCAgbnY0MF9maWZvX3VubG9hZF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICopOwogCkBAIC0xMDM4LDcgKzExMzQsNiBAQAogZXh0ZXJuIGludCAgbnZjMF9maWZvX3VubG9hZF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICopOwogCiAvKiBudjA0X2dyYXBoLmMgKi8KLWV4dGVybiBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X2NsYXNzIG52MDRfZ3JhcGhfZ3JjbGFzc1tdOwogZXh0ZXJuIGludCAgbnYwNF9ncmFwaF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgbnYwNF9ncmFwaF90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52MDRfZ3JhcGhfZmlmb19hY2Nlc3Moc3RydWN0IGRybV9kZXZpY2UgKiwgYm9vbCk7CkBAIC0xMDQ3LDEwICsxMTQyLDExIEBACiBleHRlcm4gdm9pZCBudjA0X2dyYXBoX2Rlc3Ryb3lfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIGludCAgbnYwNF9ncmFwaF9sb2FkX2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKTsKIGV4dGVybiBpbnQgIG52MDRfZ3JhcGhfdW5sb2FkX2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKik7Ci1leHRlcm4gdm9pZCBudjA0X2dyYXBoX2NvbnRleHRfc3dpdGNoKHN0cnVjdCBkcm1fZGV2aWNlICopOworZXh0ZXJuIGludCAgbnYwNF9ncmFwaF9tdGhkX3BhZ2VfZmxpcChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLAorCQkJCSAgICAgIHUzMiBjbGFzcywgdTMyIG10aGQsIHUzMiBkYXRhKTsKK2V4dGVybiBzdHJ1Y3Qgbm91dmVhdV9iaXRmaWVsZCBudjA0X2dyYXBoX25zb3VyY2VbXTsKIAogLyogbnYxMF9ncmFwaC5jICovCi1leHRlcm4gc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9jbGFzcyBudjEwX2dyYXBoX2dyY2xhc3NbXTsKIGV4dGVybiBpbnQgIG52MTBfZ3JhcGhfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52MTBfZ3JhcGhfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqbnYxMF9ncmFwaF9jaGFubmVsKHN0cnVjdCBkcm1fZGV2aWNlICopOwpAQCAtMTA1OCwxMyArMTE1NCwxMSBAQAogZXh0ZXJuIHZvaWQgbnYxMF9ncmFwaF9kZXN0cm95X2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKTsKIGV4dGVybiBpbnQgIG52MTBfZ3JhcGhfbG9hZF9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CiBleHRlcm4gaW50ICBudjEwX2dyYXBoX3VubG9hZF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIHZvaWQgbnYxMF9ncmFwaF9jb250ZXh0X3N3aXRjaChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKLWV4dGVybiB2b2lkIG52MTBfZ3JhcGhfc2V0X3JlZ2lvbl90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKiwgaW50LCB1aW50MzJfdCwKLQkJCQkJIHVpbnQzMl90LCB1aW50MzJfdCk7CitleHRlcm4gdm9pZCBudjEwX2dyYXBoX3NldF90aWxlX3JlZ2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSk7CitleHRlcm4gc3RydWN0IG5vdXZlYXVfYml0ZmllbGQgbnYxMF9ncmFwaF9pbnRyW107CitleHRlcm4gc3RydWN0IG5vdXZlYXVfYml0ZmllbGQgbnYxMF9ncmFwaF9uc3RhdHVzW107CiAKIC8qIG52MjBfZ3JhcGguYyAqLwotZXh0ZXJuIHN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfY2xhc3MgbnYyMF9ncmFwaF9ncmNsYXNzW107Ci1leHRlcm4gc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9jbGFzcyBudjMwX2dyYXBoX2dyY2xhc3NbXTsKIGV4dGVybiBpbnQgIG52MjBfZ3JhcGhfY3JlYXRlX2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKTsKIGV4dGVybiB2b2lkIG52MjBfZ3JhcGhfZGVzdHJveV9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CiBleHRlcm4gaW50ICBudjIwX2dyYXBoX2xvYWRfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwpAQCAtMTA3MiwxMSArMTE2Niw5IEBACiBleHRlcm4gaW50ICBudjIwX2dyYXBoX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gdm9pZCBudjIwX2dyYXBoX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIGludCAgbnYzMF9ncmFwaF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIHZvaWQgbnYyMF9ncmFwaF9zZXRfcmVnaW9uX3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqLCBpbnQsIHVpbnQzMl90LAotCQkJCQkgdWludDMyX3QsIHVpbnQzMl90KTsKK2V4dGVybiB2b2lkIG52MjBfZ3JhcGhfc2V0X3RpbGVfcmVnaW9uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpKTsKIAogLyogbnY0MF9ncmFwaC5jICovCi1leHRlcm4gc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9jbGFzcyBudjQwX2dyYXBoX2dyY2xhc3NbXTsKIGV4dGVybiBpbnQgIG52NDBfZ3JhcGhfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52NDBfZ3JhcGhfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqbnY0MF9ncmFwaF9jaGFubmVsKHN0cnVjdCBkcm1fZGV2aWNlICopOwpAQCAtMTA4NSwxMSArMTE3Nyw5IEBACiBleHRlcm4gaW50ICBudjQwX2dyYXBoX2xvYWRfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIGludCAgbnY0MF9ncmFwaF91bmxvYWRfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52NDBfZ3JjdHhfaW5pdChzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqKTsKLWV4dGVybiB2b2lkIG52NDBfZ3JhcGhfc2V0X3JlZ2lvbl90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKiwgaW50LCB1aW50MzJfdCwKLQkJCQkJIHVpbnQzMl90LCB1aW50MzJfdCk7CitleHRlcm4gdm9pZCBudjQwX2dyYXBoX3NldF90aWxlX3JlZ2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSk7CiAKIC8qIG52NTBfZ3JhcGguYyAqLwotZXh0ZXJuIHN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfY2xhc3MgbnY1MF9ncmFwaF9ncmNsYXNzW107CiBleHRlcm4gaW50ICBudjUwX2dyYXBoX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gdm9pZCBudjUwX2dyYXBoX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgbnY1MF9ncmFwaF9maWZvX2FjY2VzcyhzdHJ1Y3QgZHJtX2RldmljZSAqLCBib29sKTsKQEAgLTEwOTgsMTAgKzExODgsMTAgQEAKIGV4dGVybiB2b2lkIG52NTBfZ3JhcGhfZGVzdHJveV9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CiBleHRlcm4gaW50ICBudjUwX2dyYXBoX2xvYWRfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIGludCAgbnY1MF9ncmFwaF91bmxvYWRfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKLWV4dGVybiB2b2lkIG52NTBfZ3JhcGhfY29udGV4dF9zd2l0Y2goc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gaW50ICBudjUwX2dyY3R4X2luaXQoc3RydWN0IG5vdXZlYXVfZ3JjdHggKik7CiBleHRlcm4gdm9pZCBudjUwX2dyYXBoX3RsYl9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIG52ODZfZ3JhcGhfdGxiX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHN0cnVjdCBub3V2ZWF1X2VudW0gbnY1MF9kYXRhX2Vycm9yX25hbWVzW107CiAKIC8qIG52YzBfZ3JhcGguYyAqLwogZXh0ZXJuIGludCAgbnZjMF9ncmFwaF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOwpAQCAtMTExMywxNiArMTIwMywyMiBAQAogZXh0ZXJuIGludCAgbnZjMF9ncmFwaF9sb2FkX2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKTsKIGV4dGVybiBpbnQgIG52YzBfZ3JhcGhfdW5sb2FkX2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKik7CiAKKy8qIG52ODRfY3J5cHQuYyAqLworZXh0ZXJuIGludCAgbnY4NF9jcnlwdF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgbnY4NF9jcnlwdF9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCAgbnY4NF9jcnlwdF9jcmVhdGVfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOworZXh0ZXJuIHZvaWQgbnY4NF9jcnlwdF9kZXN0cm95X2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKTsKK2V4dGVybiB2b2lkIG52ODRfY3J5cHRfdGxiX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCiAvKiBudjA0X2luc3RtZW0uYyAqLwogZXh0ZXJuIGludCAgbnYwNF9pbnN0bWVtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gdm9pZCBudjA0X2luc3RtZW1fdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gaW50ICBudjA0X2luc3RtZW1fc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52MDRfaW5zdG1lbV9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKik7Ci1leHRlcm4gaW50ICBudjA0X2luc3RtZW1fcG9wdWxhdGUoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICosCi0JCQkJICB1aW50MzJfdCAqc2l6ZSk7Ci1leHRlcm4gdm9pZCBudjA0X2luc3RtZW1fY2xlYXIoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICopOwotZXh0ZXJuIGludCAgbnYwNF9pbnN0bWVtX2JpbmQoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICopOwotZXh0ZXJuIGludCAgbnYwNF9pbnN0bWVtX3VuYmluZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7CitleHRlcm4gaW50ICBudjA0X2luc3RtZW1fZ2V0KHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqLCB1MzIgc2l6ZSwgdTMyIGFsaWduKTsKK2V4dGVybiB2b2lkIG52MDRfaW5zdG1lbV9wdXQoc3RydWN0IG5vdXZlYXVfZ3B1b2JqICopOworZXh0ZXJuIGludCAgbnYwNF9pbnN0bWVtX21hcChzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7CitleHRlcm4gdm9pZCBudjA0X2luc3RtZW1fdW5tYXAoc3RydWN0IG5vdXZlYXVfZ3B1b2JqICopOwogZXh0ZXJuIHZvaWQgbnYwNF9pbnN0bWVtX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICopOwogCiAvKiBudjUwX2luc3RtZW0uYyAqLwpAQCAtMTEzMCwyNiArMTIyNiwxOCBAQAogZXh0ZXJuIHZvaWQgbnY1MF9pbnN0bWVtX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIGludCAgbnY1MF9pbnN0bWVtX3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gdm9pZCBudjUwX2luc3RtZW1fcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIGludCAgbnY1MF9pbnN0bWVtX3BvcHVsYXRlKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqLAotCQkJCSAgdWludDMyX3QgKnNpemUpOwotZXh0ZXJuIHZvaWQgbnY1MF9pbnN0bWVtX2NsZWFyKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKTsKLWV4dGVybiBpbnQgIG52NTBfaW5zdG1lbV9iaW5kKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKTsKLWV4dGVybiBpbnQgIG52NTBfaW5zdG1lbV91bmJpbmQoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICopOworZXh0ZXJuIGludCAgbnY1MF9pbnN0bWVtX2dldChzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKiwgdTMyIHNpemUsIHUzMiBhbGlnbik7CitleHRlcm4gdm9pZCBudjUwX2luc3RtZW1fcHV0KHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKTsKK2V4dGVybiBpbnQgIG52NTBfaW5zdG1lbV9tYXAoc3RydWN0IG5vdXZlYXVfZ3B1b2JqICopOworZXh0ZXJuIHZvaWQgbnY1MF9pbnN0bWVtX3VubWFwKHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKTsKIGV4dGVybiB2b2lkIG52NTBfaW5zdG1lbV9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52ODRfaW5zdG1lbV9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKLWV4dGVybiB2b2lkIG52NTBfdm1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKiwgaW50IGVuZ2luZSk7CiAKIC8qIG52YzBfaW5zdG1lbS5jICovCiBleHRlcm4gaW50ICBudmMwX2luc3RtZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52YzBfaW5zdG1lbV90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiBpbnQgIG52YzBfaW5zdG1lbV9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgbnZjMF9pbnN0bWVtX3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKLWV4dGVybiBpbnQgIG52YzBfaW5zdG1lbV9wb3B1bGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKiwKLQkJCQkgIHVpbnQzMl90ICpzaXplKTsKLWV4dGVybiB2b2lkIG52YzBfaW5zdG1lbV9jbGVhcihzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7Ci1leHRlcm4gaW50ICBudmMwX2luc3RtZW1fYmluZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7Ci1leHRlcm4gaW50ICBudmMwX2luc3RtZW1fdW5iaW5kKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKTsKLWV4dGVybiB2b2lkIG52YzBfaW5zdG1lbV9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIAogLyogbnYwNF9tYy5jICovCiBleHRlcm4gaW50ICBudjA0X21jX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7CkBAIC0xMjE5LDYgKzEzMDcsOSBAQAogZXh0ZXJuIHZvaWQgbm91dmVhdV9ib193cjE2KHN0cnVjdCBub3V2ZWF1X2JvICpudmJvLCB1bnNpZ25lZCBpbmRleCwgdTE2IHZhbCk7CiBleHRlcm4gdTMyIG5vdXZlYXVfYm9fcmQzMihzdHJ1Y3Qgbm91dmVhdV9ibyAqbnZibywgdW5zaWduZWQgaW5kZXgpOwogZXh0ZXJuIHZvaWQgbm91dmVhdV9ib193cjMyKHN0cnVjdCBub3V2ZWF1X2JvICpudmJvLCB1bnNpZ25lZCBpbmRleCwgdTMyIHZhbCk7CitleHRlcm4gdm9pZCBub3V2ZWF1X2JvX2ZlbmNlKHN0cnVjdCBub3V2ZWF1X2JvICosIHN0cnVjdCBub3V2ZWF1X2ZlbmNlICopOworZXh0ZXJuIGludCBub3V2ZWF1X2JvX3ZhbGlkYXRlKHN0cnVjdCBub3V2ZWF1X2JvICosIGJvb2wgaW50ZXJydXB0aWJsZSwKKwkJCSAgICAgICBib29sIG5vX3dhaXRfcmVzZXJ2ZSwgYm9vbCBub193YWl0X2dwdSk7CiAKIC8qIG5vdXZlYXVfZmVuY2UuYyAqLwogc3RydWN0IG5vdXZlYXVfZmVuY2U7CkBAIC0xMjM0LDEyICsxMzI1LDM1IEBACiAJCQkgICAgICAgdm9pZCAoKndvcmspKHZvaWQgKnByaXYsIGJvb2wgc2lnbmFsbGVkKSwKIAkJCSAgICAgICB2b2lkICpwcml2KTsKIHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKm5vdXZlYXVfZmVuY2VfY2hhbm5lbChzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqKTsKLWV4dGVybiBib29sIG5vdXZlYXVfZmVuY2Vfc2lnbmFsbGVkKHZvaWQgKm9iaiwgdm9pZCAqYXJnKTsKLWV4dGVybiBpbnQgbm91dmVhdV9mZW5jZV93YWl0KHZvaWQgKm9iaiwgdm9pZCAqYXJnLCBib29sIGxhenksIGJvb2wgaW50cik7CisKK2V4dGVybiBib29sIF9fbm91dmVhdV9mZW5jZV9zaWduYWxsZWQodm9pZCAqb2JqLCB2b2lkICphcmcpOworZXh0ZXJuIGludCBfX25vdXZlYXVfZmVuY2Vfd2FpdCh2b2lkICpvYmosIHZvaWQgKmFyZywgYm9vbCBsYXp5LCBib29sIGludHIpOworZXh0ZXJuIGludCBfX25vdXZlYXVfZmVuY2VfZmx1c2godm9pZCAqb2JqLCB2b2lkICphcmcpOworZXh0ZXJuIHZvaWQgX19ub3V2ZWF1X2ZlbmNlX3VucmVmKHZvaWQgKipvYmopOworZXh0ZXJuIHZvaWQgKl9fbm91dmVhdV9mZW5jZV9yZWYodm9pZCAqb2JqKTsKKworc3RhdGljIGlubGluZSBib29sIG5vdXZlYXVfZmVuY2Vfc2lnbmFsbGVkKHN0cnVjdCBub3V2ZWF1X2ZlbmNlICpvYmopCit7CisJcmV0dXJuIF9fbm91dmVhdV9mZW5jZV9zaWduYWxsZWQob2JqLCBOVUxMKTsKK30KK3N0YXRpYyBpbmxpbmUgaW50Citub3V2ZWF1X2ZlbmNlX3dhaXQoc3RydWN0IG5vdXZlYXVfZmVuY2UgKm9iaiwgYm9vbCBsYXp5LCBib29sIGludHIpCit7CisJcmV0dXJuIF9fbm91dmVhdV9mZW5jZV93YWl0KG9iaiwgTlVMTCwgbGF6eSwgaW50cik7Cit9CiBleHRlcm4gaW50IG5vdXZlYXVfZmVuY2Vfc3luYyhzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqLCBzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwotZXh0ZXJuIGludCBub3V2ZWF1X2ZlbmNlX2ZsdXNoKHZvaWQgKm9iaiwgdm9pZCAqYXJnKTsKLWV4dGVybiB2b2lkIG5vdXZlYXVfZmVuY2VfdW5yZWYodm9pZCAqKm9iaik7Ci1leHRlcm4gdm9pZCAqbm91dmVhdV9mZW5jZV9yZWYodm9pZCAqb2JqKTsKK3N0YXRpYyBpbmxpbmUgaW50IG5vdXZlYXVfZmVuY2VfZmx1c2goc3RydWN0IG5vdXZlYXVfZmVuY2UgKm9iaikKK3sKKwlyZXR1cm4gX19ub3V2ZWF1X2ZlbmNlX2ZsdXNoKG9iaiwgTlVMTCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbm91dmVhdV9mZW5jZV91bnJlZihzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqKm9iaikKK3sKKwlfX25vdXZlYXVfZmVuY2VfdW5yZWYoKHZvaWQgKiopb2JqKTsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5vdXZlYXVfZmVuY2UgKm5vdXZlYXVfZmVuY2VfcmVmKHN0cnVjdCBub3V2ZWF1X2ZlbmNlICpvYmopCit7CisJcmV0dXJuIF9fbm91dmVhdV9mZW5jZV9yZWYob2JqKTsKK30KIAogLyogbm91dmVhdV9nZW0uYyAqLwogZXh0ZXJuIGludCBub3V2ZWF1X2dlbV9uZXcoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqLApAQCAtMTI1OSwxNSArMTM3MywyOCBAQAogZXh0ZXJuIGludCBub3V2ZWF1X2dlbV9pb2N0bF9pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICosIHZvaWQgKiwKIAkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqKTsKIAorLyogbm91dmVhdV9kaXNwbGF5LmMgKi8KK2ludCBub3V2ZWF1X3ZibGFua19lbmFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwordm9pZCBub3V2ZWF1X3ZibGFua19kaXNhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2ludCBub3V2ZWF1X2NydGNfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkgICBzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudCk7CitpbnQgbm91dmVhdV9maW5pc2hfcGFnZV9mbGlwKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKiwKKwkJCSAgICAgc3RydWN0IG5vdXZlYXVfcGFnZV9mbGlwX3N0YXRlICopOworCiAvKiBudjEwX2dwaW8uYyAqLwogaW50IG52MTBfZ3Bpb19nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBkY2JfZ3Bpb190YWcgdGFnKTsKIGludCBudjEwX2dwaW9fc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gZGNiX2dwaW9fdGFnIHRhZywgaW50IHN0YXRlKTsKIAogLyogbnY1MF9ncGlvLmMgKi8KIGludCBudjUwX2dwaW9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgbnY1MF9ncGlvX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBpbnQgbnY1MF9ncGlvX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIGRjYl9ncGlvX3RhZyB0YWcpOwogaW50IG52NTBfZ3Bpb19zZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBkY2JfZ3Bpb190YWcgdGFnLCBpbnQgc3RhdGUpOwotdm9pZCBudjUwX2dwaW9faXJxX2VuYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqLCBlbnVtIGRjYl9ncGlvX3RhZywgYm9vbCBvbik7CitpbnQgIG52NTBfZ3Bpb19pcnFfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKiwgZW51bSBkY2JfZ3Bpb190YWcsCisJCQkgICAgdm9pZCAoKikodm9pZCAqLCBpbnQpLCB2b2lkICopOwordm9pZCBudjUwX2dwaW9faXJxX3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKiwgZW51bSBkY2JfZ3Bpb190YWcsCisJCQkgICAgICB2b2lkICgqKSh2b2lkICosIGludCksIHZvaWQgKik7Citib29sIG52NTBfZ3Bpb19pcnFfZW5hYmxlKHN0cnVjdCBkcm1fZGV2aWNlICosIGVudW0gZGNiX2dwaW9fdGFnLCBib29sIG9uKTsKIAogLyogbnY1MF9jYWxjLiAqLwogaW50IG52NTBfY2FsY19wbGwoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IHBsbF9saW1zICosIGludCBjbGssCkBAIC0xMzM0LDcgKzE0NjEsOSBAQAogfQogCiAjZGVmaW5lIG52X3dhaXQoZGV2LCByZWcsIG1hc2ssIHZhbCkgXAotCW5vdXZlYXVfd2FpdF91bnRpbChkZXYsIDIwMDAwMDAwMDBVTEwsIChyZWcpLCAobWFzayksICh2YWwpKQorCW5vdXZlYXVfd2FpdF9lcShkZXYsIDIwMDAwMDAwMDBVTEwsIChyZWcpLCAobWFzayksICh2YWwpKQorI2RlZmluZSBudl93YWl0X25lKGRldiwgcmVnLCBtYXNrLCB2YWwpIFwKKwlub3V2ZWF1X3dhaXRfbmUoZGV2LCAyMDAwMDAwMDAwVUxMLCAocmVnKSwgKG1hc2spLCAodmFsKSkKIAogLyogUFJBTUlOIGFjY2VzcyAqLwogc3RhdGljIGlubGluZSB1MzIgbnZfcmkzMihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBvZmZzZXQpCkBAIC0xNDQ3LDYgKzE1NzYsMjMgQEAKIAkJZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IHN1Yl9kZXZpY2U7CiB9CiAKKy8qIG1lbW9yeSB0eXBlL2FjY2VzcyBmbGFncywgZG8gbm90IG1hdGNoIGhhcmR3YXJlIHZhbHVlcyAqLworI2RlZmluZSBOVl9NRU1fQUNDRVNTX1JPICAxCisjZGVmaW5lIE5WX01FTV9BQ0NFU1NfV08gIDIKKyNkZWZpbmUgTlZfTUVNX0FDQ0VTU19SVyAoTlZfTUVNX0FDQ0VTU19STyB8IE5WX01FTV9BQ0NFU1NfV08pCisjZGVmaW5lIE5WX01FTV9BQ0NFU1NfU1lTIDQKKyNkZWZpbmUgTlZfTUVNX0FDQ0VTU19WTSAgOAorCisjZGVmaW5lIE5WX01FTV9UQVJHRVRfVlJBTSAgICAgICAgMAorI2RlZmluZSBOVl9NRU1fVEFSR0VUX1BDSSAgICAgICAgIDEKKyNkZWZpbmUgTlZfTUVNX1RBUkdFVF9QQ0lfTk9TTk9PUCAyCisjZGVmaW5lIE5WX01FTV9UQVJHRVRfVk0gICAgICAgICAgMworI2RlZmluZSBOVl9NRU1fVEFSR0VUX0dBUlQgICAgICAgIDQKKworI2RlZmluZSBOVl9NRU1fVFlQRV9WTSAweDdmCisjZGVmaW5lIE5WX01FTV9DT01QX1ZNIDB4MDMKKworLyogTlZfU1cgb2JqZWN0IGNsYXNzICovCiAjZGVmaW5lIE5WX1NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA1MDZlCiAjZGVmaW5lIE5WX1NXX0RNQV9TRU1BUEhPUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCiAjZGVmaW5lIE5WX1NXX1NFTUFQSE9SRV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0CkBAIC0xNDU3LDUgKzE2MDMsNiBAQAogI2RlZmluZSBOVl9TV19WQkxTRU1fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAogI2RlZmluZSBOVl9TV19WQkxTRU1fUkVMRUFTRV9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwNAogI2RlZmluZSBOVl9TV19WQkxTRU1fUkVMRUFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwOAorI2RlZmluZSBOVl9TV19QQUdFX0ZMSVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwMAogCiAjZW5kaWYgLyogX19OT1VWRUFVX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYwppbmRleCAwMmE0ZDFmLi5hMjZkMDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCkBAIC00OSw2ICs0OSwxMDIgQEAKICNpbmNsdWRlICJub3V2ZWF1X2ZiY29uLmgiCiAjaW5jbHVkZSAibm91dmVhdV9kbWEuaCIKIAorc3RhdGljIHZvaWQKK25vdXZlYXVfZmJjb25fZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwlzdHJ1Y3Qgbm91dmVhdV9mYmRldiAqbmZiZGV2ID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBuZmJkZXYtPmRldjsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CisKKwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJCXJldHVybjsKKworCXJldCA9IC1FTk9ERVY7CisJaWYgKCFpbl9pbnRlcnJ1cHQoKSAmJiAhKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpICYmCisJICAgIG11dGV4X3RyeWxvY2soJmRldl9wcml2LT5jaGFubmVsLT5tdXRleCkpIHsKKwkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkKKwkJCXJldCA9IG52MDRfZmJjb25fZmlsbHJlY3QoaW5mbywgcmVjdCk7CisJCWVsc2UKKwkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl9DMCkKKwkJCXJldCA9IG52NTBfZmJjb25fZmlsbHJlY3QoaW5mbywgcmVjdCk7CisJCWVsc2UKKwkJCXJldCA9IG52YzBfZmJjb25fZmlsbHJlY3QoaW5mbywgcmVjdCk7CisJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmNoYW5uZWwtPm11dGV4KTsKKwl9CisKKwlpZiAocmV0ID09IDApCisJCXJldHVybjsKKworCWlmIChyZXQgIT0gLUVOT0RFVikKKwkJbm91dmVhdV9mYmNvbl9ncHVfbG9ja3VwKGluZm8pOworCWNmYl9maWxscmVjdChpbmZvLCByZWN0KTsKK30KKworc3RhdGljIHZvaWQKK25vdXZlYXVfZmJjb25fY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqaW1hZ2UpCit7CisJc3RydWN0IG5vdXZlYXVfZmJkZXYgKm5mYmRldiA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbmZiZGV2LT5kZXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQlyZXR1cm47CisKKwlyZXQgPSAtRU5PREVWOworCWlmICghaW5faW50ZXJydXB0KCkgJiYgIShpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSAmJgorCSAgICBtdXRleF90cnlsb2NrKCZkZXZfcHJpdi0+Y2hhbm5lbC0+bXV0ZXgpKSB7CisJCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNTApCisJCQlyZXQgPSBudjA0X2ZiY29uX2NvcHlhcmVhKGluZm8sIGltYWdlKTsKKwkJZWxzZQorCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WX0MwKQorCQkJcmV0ID0gbnY1MF9mYmNvbl9jb3B5YXJlYShpbmZvLCBpbWFnZSk7CisJCWVsc2UKKwkJCXJldCA9IG52YzBfZmJjb25fY29weWFyZWEoaW5mbywgaW1hZ2UpOworCQltdXRleF91bmxvY2soJmRldl9wcml2LT5jaGFubmVsLT5tdXRleCk7CisJfQorCisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAocmV0ICE9IC1FTk9ERVYpCisJCW5vdXZlYXVfZmJjb25fZ3B1X2xvY2t1cChpbmZvKTsKKwljZmJfY29weWFyZWEoaW5mbywgaW1hZ2UpOworfQorCitzdGF0aWMgdm9pZAorbm91dmVhdV9mYmNvbl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJc3RydWN0IG5vdXZlYXVfZmJkZXYgKm5mYmRldiA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbmZiZGV2LT5kZXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQlyZXR1cm47CisKKwlyZXQgPSAtRU5PREVWOworCWlmICghaW5faW50ZXJydXB0KCkgJiYgIShpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSAmJgorCSAgICBtdXRleF90cnlsb2NrKCZkZXZfcHJpdi0+Y2hhbm5lbC0+bXV0ZXgpKSB7CisJCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNTApCisJCQlyZXQgPSBudjA0X2ZiY29uX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7CisJCWVsc2UKKwkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl9DMCkKKwkJCXJldCA9IG52NTBfZmJjb25faW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKwkJZWxzZQorCQkJcmV0ID0gbnZjMF9mYmNvbl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCQltdXRleF91bmxvY2soJmRldl9wcml2LT5jaGFubmVsLT5tdXRleCk7CisJfQorCisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAocmV0ICE9IC1FTk9ERVYpCisJCW5vdXZlYXVfZmJjb25fZ3B1X2xvY2t1cChpbmZvKTsKKwljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKK30KKwogc3RhdGljIGludAogbm91dmVhdV9mYmNvbl9zeW5jKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewpAQCAtNTgsMjIgKzE1NCwzNiBAQAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbDsKIAlpbnQgcmV0LCBpOwogCi0JaWYgKCFjaGFuIHx8ICFjaGFuLT5hY2NlbF9kb25lIHx8CisJaWYgKCFjaGFuIHx8ICFjaGFuLT5hY2NlbF9kb25lIHx8IGluX2ludGVycnVwdCgpIHx8CiAJICAgIGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HIHx8CiAJICAgIGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpCiAJCXJldHVybiAwOwogCi0JaWYgKFJJTkdfU1BBQ0UoY2hhbiwgNCkpIHsKKwlpZiAoIW11dGV4X3RyeWxvY2soJmNoYW4tPm11dGV4KSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBSSU5HX1NQQUNFKGNoYW4sIDQpOworCWlmIChyZXQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjaGFuLT5tdXRleCk7CiAJCW5vdXZlYXVfZmJjb25fZ3B1X2xvY2t1cChpbmZvKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JQkVHSU5fUklORyhjaGFuLCAwLCAweDAxMDQsIDEpOwotCU9VVF9SSU5HKGNoYW4sIDApOwotCUJFR0lOX1JJTkcoY2hhbiwgMCwgMHgwMTAwLCAxKTsKLQlPVVRfUklORyhjaGFuLCAwKTsKKwlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl9DMCkgeworCQlCRUdJTl9OVkMwKGNoYW4sIDIsIE52U3ViMkQsIDB4MDEwYywgMSk7CisJCU9VVF9SSU5HICAoY2hhbiwgMCk7CisJCUJFR0lOX05WQzAoY2hhbiwgMiwgTnZTdWIyRCwgMHgwMTAwLCAxKTsKKwkJT1VUX1JJTkcgIChjaGFuLCAwKTsKKwl9IGVsc2UgeworCQlCRUdJTl9SSU5HKGNoYW4sIDAsIDB4MDEwNCwgMSk7CisJCU9VVF9SSU5HICAoY2hhbiwgMCk7CisJCUJFR0lOX1JJTkcoY2hhbiwgMCwgMHgwMTAwLCAxKTsKKwkJT1VUX1JJTkcgIChjaGFuLCAwKTsKKwl9CisKIAlub3V2ZWF1X2JvX3dyMzIoY2hhbi0+bm90aWZpZXJfYm8sIGNoYW4tPm0ybWZfbnRmeSArIDMsIDB4ZmZmZmZmZmYpOwogCUZJUkVfUklORyhjaGFuKTsKKwltdXRleF91bmxvY2soJmNoYW4tPm11dGV4KTsKIAogCXJldCA9IC1FQlVTWTsKIAlmb3IgKGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKQEAgLTk3LDQwICsyMDcsMjQgQEAKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuZmJfY2hlY2tfdmFyID0gZHJtX2ZiX2hlbHBlcl9jaGVja192YXIsCiAJLmZiX3NldF9wYXIgPSBkcm1fZmJfaGVscGVyX3NldF9wYXIsCisJLmZiX2ZpbGxyZWN0ID0gbm91dmVhdV9mYmNvbl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEgPSBub3V2ZWF1X2ZiY29uX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQgPSBub3V2ZWF1X2ZiY29uX2ltYWdlYmxpdCwKKwkuZmJfc3luYyA9IG5vdXZlYXVfZmJjb25fc3luYywKKwkuZmJfcGFuX2Rpc3BsYXkgPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAorCS5mYl9ibGFuayA9IGRybV9mYl9oZWxwZXJfYmxhbmssCisJLmZiX3NldGNtYXAgPSBkcm1fZmJfaGVscGVyX3NldGNtYXAsCisJLmZiX2RlYnVnX2VudGVyID0gZHJtX2ZiX2hlbHBlcl9kZWJ1Z19lbnRlciwKKwkuZmJfZGVidWdfbGVhdmUgPSBkcm1fZmJfaGVscGVyX2RlYnVnX2xlYXZlLAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9vcHMgbm91dmVhdV9mYmNvbl9zd19vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmZiX2NoZWNrX3ZhciA9IGRybV9mYl9oZWxwZXJfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyID0gZHJtX2ZiX2hlbHBlcl9zZXRfcGFyLAogCS5mYl9maWxscmVjdCA9IGNmYl9maWxscmVjdCwKIAkuZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWEsCiAJLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQsCi0JLmZiX3N5bmMgPSBub3V2ZWF1X2ZiY29uX3N5bmMsCi0JLmZiX3Bhbl9kaXNwbGF5ID0gZHJtX2ZiX2hlbHBlcl9wYW5fZGlzcGxheSwKLQkuZmJfYmxhbmsgPSBkcm1fZmJfaGVscGVyX2JsYW5rLAotCS5mYl9zZXRjbWFwID0gZHJtX2ZiX2hlbHBlcl9zZXRjbWFwLAotCS5mYl9kZWJ1Z19lbnRlciA9IGRybV9mYl9oZWxwZXJfZGVidWdfZW50ZXIsCi0JLmZiX2RlYnVnX2xlYXZlID0gZHJtX2ZiX2hlbHBlcl9kZWJ1Z19sZWF2ZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfb3BzIG52MDRfZmJjb25fb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5mYl9jaGVja192YXIgPSBkcm1fZmJfaGVscGVyX2NoZWNrX3ZhciwKLQkuZmJfc2V0X3BhciA9IGRybV9mYl9oZWxwZXJfc2V0X3BhciwKLQkuZmJfZmlsbHJlY3QgPSBudjA0X2ZiY29uX2ZpbGxyZWN0LAotCS5mYl9jb3B5YXJlYSA9IG52MDRfZmJjb25fY29weWFyZWEsCi0JLmZiX2ltYWdlYmxpdCA9IG52MDRfZmJjb25faW1hZ2VibGl0LAotCS5mYl9zeW5jID0gbm91dmVhdV9mYmNvbl9zeW5jLAotCS5mYl9wYW5fZGlzcGxheSA9IGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXksCi0JLmZiX2JsYW5rID0gZHJtX2ZiX2hlbHBlcl9ibGFuaywKLQkuZmJfc2V0Y21hcCA9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKLQkuZmJfZGVidWdfZW50ZXIgPSBkcm1fZmJfaGVscGVyX2RlYnVnX2VudGVyLAotCS5mYl9kZWJ1Z19sZWF2ZSA9IGRybV9mYl9oZWxwZXJfZGVidWdfbGVhdmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGZiX29wcyBudjUwX2ZiY29uX29wcyA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkuZmJfY2hlY2tfdmFyID0gZHJtX2ZiX2hlbHBlcl9jaGVja192YXIsCi0JLmZiX3NldF9wYXIgPSBkcm1fZmJfaGVscGVyX3NldF9wYXIsCi0JLmZiX2ZpbGxyZWN0ID0gbnY1MF9mYmNvbl9maWxscmVjdCwKLQkuZmJfY29weWFyZWEgPSBudjUwX2ZiY29uX2NvcHlhcmVhLAotCS5mYl9pbWFnZWJsaXQgPSBudjUwX2ZiY29uX2ltYWdlYmxpdCwKLQkuZmJfc3luYyA9IG5vdXZlYXVfZmJjb25fc3luYywKIAkuZmJfcGFuX2Rpc3BsYXkgPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAogCS5mYl9ibGFuayA9IGRybV9mYl9oZWxwZXJfYmxhbmssCiAJLmZiX3NldGNtYXAgPSBkcm1fZmJfaGVscGVyX3NldGNtYXAsCkBAIC0yNTcsMjEgKzM1MSwxNiBAQAogCQkJICAgICAgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QgfAogCQkJICAgICAgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUOwogCWluZm8tPmZsYWdzIHw9IEZCSU5GT19DQU5fRk9SQ0VfT1VUUFVUOwotCWluZm8tPmZib3BzID0gJm5vdXZlYXVfZmJjb25fb3BzOwotCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlICsgbnZiby0+Ym8ub2Zmc2V0IC0KLQkJCSAgICAgICBkZXZfcHJpdi0+dm1fdnJhbV9iYXNlOworCWluZm8tPmZib3BzID0gJm5vdXZlYXVfZmJjb25fc3dfb3BzOworCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlICsKKwkJCSAgICAgICAobnZiby0+Ym8ubWVtLnN0YXJ0IDw8IFBBR0VfU0hJRlQpOwogCWluZm8tPmZpeC5zbWVtX2xlbiA9IHNpemU7CiAKIAlpbmZvLT5zY3JlZW5fYmFzZSA9IG52Ym9fa21hcF9vYmpfaW92aXJ0dWFsKG5vdXZlYXVfZmItPm52Ym8pOwogCWluZm8tPnNjcmVlbl9zaXplID0gc2l6ZTsKIAotCWRybV9mYl9oZWxwZXJfZmlsbF9maXgoaW5mbywgZmItPnBpdGNoLCBmYi0+ZGVwdGgpOwogCWRybV9mYl9oZWxwZXJfZmlsbF92YXIoaW5mbywgJm5mYmRldi0+aGVscGVyLCBzaXplcy0+ZmJfd2lkdGgsIHNpemVzLT5mYl9oZWlnaHQpOwogCi0JLyogRklYTUU6IHdlIHJlYWxseSBzaG91bGRuJ3QgZXhwb3NlIG1taW8gc3BhY2UgYXQgYWxsICovCi0JaW5mby0+Zml4Lm1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7Ci0JaW5mby0+Zml4Lm1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKTsKLQogCS8qIFNldCBhcGVydHVyZSBiYXNlL3NpemUgZm9yIHZlc2FmYiB0YWtlb3ZlciAqLwogCWluZm8tPmFwZXJ0dXJlcyA9IGRldl9wcml2LT5hcGVydHVyZXM7CiAJaWYgKCFpbmZvLT5hcGVydHVyZXMpIHsKQEAgLTI4NSwxOSArMzc0LDIwIEBACiAJaW5mby0+cGl4bWFwLmZsYWdzID0gRkJfUElYTUFQX1NZU1RFTTsKIAlpbmZvLT5waXhtYXAuc2Nhbl9hbGlnbiA9IDE7CiAKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwogCWlmIChkZXZfcHJpdi0+Y2hhbm5lbCAmJiAhbm91dmVhdV9ub2ZiYWNjZWwpIHsKLQkJc3dpdGNoIChkZXZfcHJpdi0+Y2FyZF90eXBlKSB7Ci0JCWNhc2UgTlZfQzA6Ci0JCQlicmVhazsKLQkJY2FzZSBOVl81MDoKLQkJCW52NTBfZmJjb25fYWNjZWxfaW5pdChpbmZvKTsKLQkJCWluZm8tPmZib3BzID0gJm52NTBfZmJjb25fb3BzOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQludjA0X2ZiY29uX2FjY2VsX2luaXQoaW5mbyk7Ci0JCQlpbmZvLT5mYm9wcyA9ICZudjA0X2ZiY29uX29wczsKLQkJCWJyZWFrOwotCQl9OworCQlyZXQgPSAtRU5PREVWOworCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzUwKQorCQkJcmV0ID0gbnYwNF9mYmNvbl9hY2NlbF9pbml0KGluZm8pOworCQllbHNlCisJCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfQzApCisJCQlyZXQgPSBudjUwX2ZiY29uX2FjY2VsX2luaXQoaW5mbyk7CisJCWVsc2UKKwkJCXJldCA9IG52YzBfZmJjb25fYWNjZWxfaW5pdChpbmZvKTsKKworCQlpZiAocmV0ID09IDApCisJCQlpbmZvLT5mYm9wcyA9ICZub3V2ZWF1X2ZiY29uX29wczsKIAl9CiAKIAlub3V2ZWF1X2ZiY29uX3pmaWxsKGRldiwgbmZiZGV2KTsKQEAgLTMwOCw3ICszOTgsNiBAQAogCQkJCQkJbm91dmVhdV9mYi0+YmFzZS5oZWlnaHQsCiAJCQkJCQludmJvLT5iby5vZmZzZXQsIG52Ym8pOwogCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJdmdhX3N3aXRjaGVyb29fY2xpZW50X2ZiX3NldChkZXYtPnBkZXYsIGluZm8pOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmgKaW5kZXggZTdlMTI2OC4uYjczYzI5ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmgKQEAgLTQwLDE1ICs0MCwyMSBAQAogCiB2b2lkIG5vdXZlYXVfZmJjb25fcmVzdG9yZSh2b2lkKTsKIAotdm9pZCBudjA0X2ZiY29uX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKnJlZ2lvbik7Ci12b2lkIG52MDRfZmJjb25fZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCk7Ci12b2lkIG52MDRfZmJjb25faW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKTsKK2ludCBudjA0X2ZiY29uX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKnJlZ2lvbik7CitpbnQgbnYwNF9mYmNvbl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KTsKK2ludCBudjA0X2ZiY29uX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSk7CiBpbnQgbnYwNF9mYmNvbl9hY2NlbF9pbml0KHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXZvaWQgbnY1MF9mYmNvbl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KTsKLXZvaWQgbnY1MF9mYmNvbl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICpyZWdpb24pOwotdm9pZCBudjUwX2ZiY29uX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSk7CisKK2ludCBudjUwX2ZiY29uX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpOworaW50IG52NTBfZmJjb25fY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqcmVnaW9uKTsKK2ludCBudjUwX2ZiY29uX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSk7CiBpbnQgbnY1MF9mYmNvbl9hY2NlbF9pbml0KHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIAoraW50IG52YzBfZmJjb25fZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCk7CitpbnQgbnZjMF9mYmNvbl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICpyZWdpb24pOworaW50IG52YzBfZmJjb25faW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKTsKK2ludCBudmMwX2ZiY29uX2FjY2VsX2luaXQoc3RydWN0IGZiX2luZm8gKmluZm8pOworCiB2b2lkIG5vdXZlYXVfZmJjb25fZ3B1X2xvY2t1cChzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKIGludCBub3V2ZWF1X2ZiY29uX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmMKaW5kZXggYWIxYmJmYi4uMjIxYjg0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mZW5jZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmVuY2UuYwpAQCAtMzIsNyArMzIsOCBAQAogI2luY2x1ZGUgIm5vdXZlYXVfZG1hLmgiCiAKICNkZWZpbmUgVVNFX1JFRkNOVChkZXYpIChub3V2ZWF1X3ByaXZhdGUoZGV2KS0+Y2hpcHNldCA+PSAweDEwKQotI2RlZmluZSBVU0VfU0VNQShkZXYpIChub3V2ZWF1X3ByaXZhdGUoZGV2KS0+Y2hpcHNldCA+PSAweDE3KQorI2RlZmluZSBVU0VfU0VNQShkZXYpIChub3V2ZWF1X3ByaXZhdGUoZGV2KS0+Y2hpcHNldCA+PSAweDE3ICYmIFwKKwkJICAgICAgIG5vdXZlYXVfcHJpdmF0ZShkZXYpLT5jYXJkX3R5cGUgPCBOVl9DMCkKIAogc3RydWN0IG5vdXZlYXVfZmVuY2UgewogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW5uZWw7CkBAIC02NCw2ICs2NSw3IEBACiAJc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlID0KIAkJY29udGFpbmVyX29mKHJlZiwgc3RydWN0IG5vdXZlYXVfZmVuY2UsIHJlZmNvdW50KTsKIAorCW5vdXZlYXVfY2hhbm5lbF9yZWYoTlVMTCwgJmZlbmNlLT5jaGFubmVsKTsKIAlrZnJlZShmZW5jZSk7CiB9CiAKQEAgLTc2LDE0ICs3OCwxNyBAQAogCiAJc3Bpbl9sb2NrKCZjaGFuLT5mZW5jZS5sb2NrKTsKIAotCWlmIChVU0VfUkVGQ05UKGRldikpCi0JCXNlcXVlbmNlID0gbnZjaGFuX3JkMzIoY2hhbiwgMHg0OCk7Ci0JZWxzZQotCQlzZXF1ZW5jZSA9IGF0b21pY19yZWFkKCZjaGFuLT5mZW5jZS5sYXN0X3NlcXVlbmNlX2lycSk7CisJLyogRmV0Y2ggdGhlIGxhc3Qgc2VxdWVuY2UgaWYgdGhlIGNoYW5uZWwgaXMgc3RpbGwgdXAgYW5kIHJ1bm5pbmcgKi8KKwlpZiAobGlrZWx5KCFsaXN0X2VtcHR5KCZjaGFuLT5mZW5jZS5wZW5kaW5nKSkpIHsKKwkJaWYgKFVTRV9SRUZDTlQoZGV2KSkKKwkJCXNlcXVlbmNlID0gbnZjaGFuX3JkMzIoY2hhbiwgMHg0OCk7CisJCWVsc2UKKwkJCXNlcXVlbmNlID0gYXRvbWljX3JlYWQoJmNoYW4tPmZlbmNlLmxhc3Rfc2VxdWVuY2VfaXJxKTsKIAotCWlmIChjaGFuLT5mZW5jZS5zZXF1ZW5jZV9hY2sgPT0gc2VxdWVuY2UpCi0JCWdvdG8gb3V0OwotCWNoYW4tPmZlbmNlLnNlcXVlbmNlX2FjayA9IHNlcXVlbmNlOworCQlpZiAoY2hhbi0+ZmVuY2Uuc2VxdWVuY2VfYWNrID09IHNlcXVlbmNlKQorCQkJZ290byBvdXQ7CisJCWNoYW4tPmZlbmNlLnNlcXVlbmNlX2FjayA9IHNlcXVlbmNlOworCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmZW5jZSwgdG1wLCAmY2hhbi0+ZmVuY2UucGVuZGluZywgZW50cnkpIHsKIAkJc2VxdWVuY2UgPSBmZW5jZS0+c2VxdWVuY2U7CkBAIC0xMTMsMTMgKzExOCwxMyBAQAogCWlmICghZmVuY2UpCiAJCXJldHVybiAtRU5PTUVNOwogCWtyZWZfaW5pdCgmZmVuY2UtPnJlZmNvdW50KTsKLQlmZW5jZS0+Y2hhbm5lbCA9IGNoYW47CisJbm91dmVhdV9jaGFubmVsX3JlZihjaGFuLCAmZmVuY2UtPmNoYW5uZWwpOwogCiAJaWYgKGVtaXQpCiAJCXJldCA9IG5vdXZlYXVfZmVuY2VfZW1pdChmZW5jZSk7CiAKIAlpZiAocmV0KQotCQlub3V2ZWF1X2ZlbmNlX3VucmVmKCh2b2lkICopJmZlbmNlKTsKKwkJbm91dmVhdV9mZW5jZV91bnJlZigmZmVuY2UpOwogCSpwZmVuY2UgPSBmZW5jZTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTI3LDcgKzEzMiw3IEBACiBzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICoKIG5vdXZlYXVfZmVuY2VfY2hhbm5lbChzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2UpCiB7Ci0JcmV0dXJuIGZlbmNlID8gZmVuY2UtPmNoYW5uZWwgOiBOVUxMOworCXJldHVybiBmZW5jZSA/IG5vdXZlYXVfY2hhbm5lbF9nZXRfdW5sb2NrZWQoZmVuY2UtPmNoYW5uZWwpIDogTlVMTDsKIH0KIAogaW50CkBAIC0xMzUsNiArMTQwLDcgQEAKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZmVuY2UtPmNoYW5uZWw7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCByZXQ7CiAKIAlyZXQgPSBSSU5HX1NQQUNFKGNoYW4sIDIpOwpAQCAtMTU1LDggKzE2MSwxNSBAQAogCWxpc3RfYWRkX3RhaWwoJmZlbmNlLT5lbnRyeSwgJmNoYW4tPmZlbmNlLnBlbmRpbmcpOwogCXNwaW5fdW5sb2NrKCZjaGFuLT5mZW5jZS5sb2NrKTsKIAotCUJFR0lOX1JJTkcoY2hhbiwgTnZTdWJTdywgVVNFX1JFRkNOVChkZXYpID8gMHgwMDUwIDogMHgwMTUwLCAxKTsKLQlPVVRfUklORyhjaGFuLCBmZW5jZS0+c2VxdWVuY2UpOworCWlmIChVU0VfUkVGQ05UKGRldikpIHsKKwkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl9DMCkKKwkJCUJFR0lOX1JJTkcoY2hhbiwgTnZTdWJTdywgMHgwMDUwLCAxKTsKKwkJZWxzZQorCQkJQkVHSU5fTlZDMChjaGFuLCAyLCBOdlN1Yk0yTUYsIDB4MDA1MCwgMSk7CisJfSBlbHNlIHsKKwkJQkVHSU5fUklORyhjaGFuLCBOdlN1YlN3LCAweDAxNTAsIDEpOworCX0KKwlPVVRfUklORyAoY2hhbiwgZmVuY2UtPnNlcXVlbmNlKTsKIAlGSVJFX1JJTkcoY2hhbik7CiAKIAlyZXR1cm4gMDsKQEAgLTE4Miw3ICsxOTUsNyBAQAogfQogCiB2b2lkCi1ub3V2ZWF1X2ZlbmNlX3VucmVmKHZvaWQgKipzeW5jX29iaikKK19fbm91dmVhdV9mZW5jZV91bnJlZih2b2lkICoqc3luY19vYmopCiB7CiAJc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlID0gbm91dmVhdV9mZW5jZSgqc3luY19vYmopOwogCkBAIC0xOTIsNyArMjA1LDcgQEAKIH0KIAogdm9pZCAqCi1ub3V2ZWF1X2ZlbmNlX3JlZih2b2lkICpzeW5jX29iaikKK19fbm91dmVhdV9mZW5jZV9yZWYodm9pZCAqc3luY19vYmopCiB7CiAJc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlID0gbm91dmVhdV9mZW5jZShzeW5jX29iaik7CiAKQEAgLTIwMSw3ICsyMTQsNyBAQAogfQogCiBib29sCi1ub3V2ZWF1X2ZlbmNlX3NpZ25hbGxlZCh2b2lkICpzeW5jX29iaiwgdm9pZCAqc3luY19hcmcpCitfX25vdXZlYXVfZmVuY2Vfc2lnbmFsbGVkKHZvaWQgKnN5bmNfb2JqLCB2b2lkICpzeW5jX2FyZykKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2UgPSBub3V2ZWF1X2ZlbmNlKHN5bmNfb2JqKTsKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZmVuY2UtPmNoYW5uZWw7CkBAIC0yMTQsMTMgKzIyNywxNCBAQAogfQogCiBpbnQKLW5vdXZlYXVfZmVuY2Vfd2FpdCh2b2lkICpzeW5jX29iaiwgdm9pZCAqc3luY19hcmcsIGJvb2wgbGF6eSwgYm9vbCBpbnRyKQorX19ub3V2ZWF1X2ZlbmNlX3dhaXQodm9pZCAqc3luY19vYmosIHZvaWQgKnN5bmNfYXJnLCBib29sIGxhenksIGJvb2wgaW50cikKIHsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgKDMgKiBEUk1fSFopOworCXVuc2lnbmVkIGxvbmcgc2xlZXBfdGltZSA9IGppZmZpZXMgKyAxOwogCWludCByZXQgPSAwOwogCiAJd2hpbGUgKDEpIHsKLQkJaWYgKG5vdXZlYXVfZmVuY2Vfc2lnbmFsbGVkKHN5bmNfb2JqLCBzeW5jX2FyZykpCisJCWlmIChfX25vdXZlYXVfZmVuY2Vfc2lnbmFsbGVkKHN5bmNfb2JqLCBzeW5jX2FyZykpCiAJCQlicmVhazsKIAogCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkgewpAQCAtMjMwLDcgKzI0NCw3IEBACiAKIAkJX19zZXRfY3VycmVudF9zdGF0ZShpbnRyID8gVEFTS19JTlRFUlJVUFRJQkxFCiAJCQk6IFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJaWYgKGxhenkpCisJCWlmIChsYXp5ICYmIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgc2xlZXBfdGltZSkpCiAJCQlzY2hlZHVsZV90aW1lb3V0KDEpOwogCiAJCWlmIChpbnRyICYmIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CkBAIC0zNjgsNyArMzgyLDcgQEAKIAogCWtyZWZfZ2V0KCZzZW1hLT5yZWYpOwogCW5vdXZlYXVfZmVuY2Vfd29yayhmZW5jZSwgc2VtYXBob3JlX3dvcmssIHNlbWEpOwotCW5vdXZlYXVfZmVuY2VfdW5yZWYoKHZvaWQgKikmZmVuY2UpOworCW5vdXZlYXVfZmVuY2VfdW5yZWYoJmZlbmNlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzgwLDMzICszOTQsNDkgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gbm91dmVhdV9mZW5jZV9jaGFubmVsKGZlbmNlKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gd2NoYW4tPmRldjsKIAlzdHJ1Y3Qgbm91dmVhdV9zZW1hcGhvcmUgKnNlbWE7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAotCWlmIChsaWtlbHkoIWZlbmNlIHx8IGNoYW4gPT0gd2NoYW4gfHwKLQkJICAgbm91dmVhdV9mZW5jZV9zaWduYWxsZWQoZmVuY2UsIE5VTEwpKSkKLQkJcmV0dXJuIDA7CisJaWYgKGxpa2VseSghY2hhbiB8fCBjaGFuID09IHdjaGFuIHx8CisJCSAgIG5vdXZlYXVfZmVuY2Vfc2lnbmFsbGVkKGZlbmNlKSkpCisJCWdvdG8gb3V0OwogCiAJc2VtYSA9IGFsbG9jX3NlbWFwaG9yZShkZXYpOwogCWlmICghc2VtYSkgewogCQkvKiBFYXJseSBjYXJkIG9yIGJyb2tlbiB1c2Vyc3BhY2UsIGZhbGwgYmFjayB0bwogCQkgKiBzb2Z0d2FyZSBzeW5jLiAqLwotCQlyZXR1cm4gbm91dmVhdV9mZW5jZV93YWl0KGZlbmNlLCBOVUxMLCBmYWxzZSwgZmFsc2UpOworCQlyZXQgPSBub3V2ZWF1X2ZlbmNlX3dhaXQoZmVuY2UsIHRydWUsIGZhbHNlKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogdHJ5IHRvIHRha2UgY2hhbidzIG11dGV4LCBpZiB3ZSBjYW4ndCB0YWtlIGl0IHJpZ2h0IGF3YXkKKwkgKiB3ZSBoYXZlIHRvIGZhbGxiYWNrIHRvIHNvZnR3YXJlIHN5bmMgdG8gcHJldmVudCBsb2NraW5nCisJICogb3JkZXIgaXNzdWVzCisJICovCisJaWYgKCFtdXRleF90cnlsb2NrKCZjaGFuLT5tdXRleCkpIHsKKwkJcmV0ID0gbm91dmVhdV9mZW5jZV93YWl0KGZlbmNlLCB0cnVlLCBmYWxzZSk7CisJCWdvdG8gb3V0X3VucmVmOwogCX0KIAogCS8qIE1ha2Ugd2NoYW4gd2FpdCB1bnRpbCBpdCBnZXRzIHNpZ25hbGxlZCAqLwogCXJldCA9IGVtaXRfc2VtYXBob3JlKHdjaGFuLCBOVl9TV19TRU1BUEhPUkVfQUNRVUlSRSwgc2VtYSk7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qIFNpZ25hbCB0aGUgc2VtYXBob3JlIGZyb20gY2hhbiAqLwogCXJldCA9IGVtaXRfc2VtYXBob3JlKGNoYW4sIE5WX1NXX1NFTUFQSE9SRV9SRUxFQVNFLCBzZW1hKTsKLW91dDoKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmNoYW4tPm11dGV4KTsKK291dF91bnJlZjoKIAlrcmVmX3B1dCgmc2VtYS0+cmVmLCBmcmVlX3NlbWFwaG9yZSk7CitvdXQ6CisJaWYgKGNoYW4pCisJCW5vdXZlYXVfY2hhbm5lbF9wdXRfdW5sb2NrZWQoJmNoYW4pOwogCXJldHVybiByZXQ7CiB9CiAKIGludAotbm91dmVhdV9mZW5jZV9mbHVzaCh2b2lkICpzeW5jX29iaiwgdm9pZCAqc3luY19hcmcpCitfX25vdXZlYXVfZmVuY2VfZmx1c2godm9pZCAqc3luY19vYmosIHZvaWQgKnN5bmNfYXJnKQogewogCXJldHVybiAwOwogfQpAQCAtNDIwLDMwICs0NTAsMjcgQEAKIAlpbnQgcmV0OwogCiAJLyogQ3JlYXRlIGFuIE5WX1NXIG9iamVjdCBmb3IgdmFyaW91cyBzeW5jIHB1cnBvc2VzICovCi0JcmV0ID0gbm91dmVhdV9ncHVvYmpfc3dfbmV3KGNoYW4sIE5WX1NXLCAmb2JqKTsKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9ncl9uZXcoY2hhbiwgTnZTdywgTlZfU1cpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBub3V2ZWF1X3JhbWh0X2luc2VydChjaGFuLCBOdlN3LCBvYmopOwotCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmb2JqKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gUklOR19TUEFDRShjaGFuLCAyKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCUJFR0lOX1JJTkcoY2hhbiwgTnZTdWJTdywgMCwgMSk7Ci0JT1VUX1JJTkcoY2hhbiwgTnZTdyk7CisJLyogd2UgbGVhdmUgc3ViY2hhbm5lbCBlbXB0eSBmb3IgbnZjMCAqLworCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfQzApIHsKKwkJcmV0ID0gUklOR19TUEFDRShjaGFuLCAyKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCUJFR0lOX1JJTkcoY2hhbiwgTnZTdWJTdywgMCwgMSk7CisJCU9VVF9SSU5HKGNoYW4sIE52U3cpOworCX0KIAogCS8qIENyZWF0ZSBhIERNQSBvYmplY3QgZm9yIHRoZSBzaGFyZWQgY3Jvc3MtY2hhbm5lbCBzeW5jIGFyZWEuICovCiAJaWYgKFVTRV9TRU1BKGRldikpIHsKLQkJc3RydWN0IGRybV9tbV9ub2RlICptZW0gPSBkZXZfcHJpdi0+ZmVuY2UuYm8tPmJvLm1lbS5tbV9ub2RlOworCQlzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSA9ICZkZXZfcHJpdi0+ZmVuY2UuYm8tPmJvLm1lbTsKIAogCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9kbWFfbmV3KGNoYW4sIE5WX0NMQVNTX0RNQV9JTl9NRU1PUlksCiAJCQkJCSAgICAgbWVtLT5zdGFydCA8PCBQQUdFX1NISUZULAotCQkJCQkgICAgIG1lbS0+c2l6ZSA8PCBQQUdFX1NISUZULAotCQkJCQkgICAgIE5WX0RNQV9BQ0NFU1NfUlcsCi0JCQkJCSAgICAgTlZfRE1BX1RBUkdFVF9WSURNRU0sICZvYmopOworCQkJCQkgICAgIG1lbS0+c2l6ZSwgTlZfTUVNX0FDQ0VTU19SVywKKwkJCQkJICAgICBOVl9NRU1fVEFSR0VUX1ZSQU0sICZvYmopOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIApAQCAtNDczLDYgKzUwMCw4IEBACiB7CiAJc3RydWN0IG5vdXZlYXVfZmVuY2UgKnRtcCwgKmZlbmNlOwogCisJc3Bpbl9sb2NrKCZjaGFuLT5mZW5jZS5sb2NrKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmZW5jZSwgdG1wLCAmY2hhbi0+ZmVuY2UucGVuZGluZywgZW50cnkpIHsKIAkJZmVuY2UtPnNpZ25hbGxlZCA9IHRydWU7CiAJCWxpc3RfZGVsKCZmZW5jZS0+ZW50cnkpOwpAQCAtNDgyLDYgKzUxMSw4IEBACiAKIAkJa3JlZl9wdXQoJmZlbmNlLT5yZWZjb3VudCwgbm91dmVhdV9mZW5jZV9kZWwpOwogCX0KKworCXNwaW5fdW5sb2NrKCZjaGFuLT5mZW5jZS5sb2NrKTsKIH0KIAogaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYwppbmRleCA5YTFmZGNmLi41MDZjNTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKQEAgLTQ4LDkgKzQ4LDYgQEAKIAkJcmV0dXJuOwogCW52Ym8tPmdlbSA9IE5VTEw7CiAKLQlpZiAodW5saWtlbHkobnZiby0+Y3B1X2ZpbHApKQotCQl0dG1fYm9fc3luY2NwdV93cml0ZV9yZWxlYXNlKGJvKTsKLQogCWlmICh1bmxpa2VseShudmJvLT5waW5fcmVmY250KSkgewogCQludmJvLT5waW5fcmVmY250ID0gMTsKIAkJbm91dmVhdV9ib191bnBpbihudmJvKTsKQEAgLTEwNiwzMiArMTAzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGJvb2wKLW5vdXZlYXVfZ2VtX3RpbGVfZmxhZ3NfdmFsaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgdGlsZV9mbGFncykKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApIHsKLQkJc3dpdGNoICh0aWxlX2ZsYWdzICYgTk9VVkVBVV9HRU1fVElMRV9MQVlPVVRfTUFTSykgewotCQljYXNlIDB4MDAwMDoKLQkJY2FzZSAweDE4MDA6Ci0JCWNhc2UgMHgyODAwOgotCQljYXNlIDB4NDgwMDoKLQkJY2FzZSAweDcwMDA6Ci0JCWNhc2UgMHg3NDAwOgotCQljYXNlIDB4N2EwMDoKLQkJY2FzZSAweGUwMDA6Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICghKHRpbGVfZmxhZ3MgJiBOT1VWRUFVX0dFTV9USUxFX0xBWU9VVF9NQVNLKSkKLQkJCXJldHVybiB0cnVlOwotCX0KLQotCU5WX0VSUk9SKGRldiwgImJhZCBwYWdlIGZsYWdzOiAweCUwOHhcbiIsIHRpbGVfZmxhZ3MpOwotCXJldHVybiBmYWxzZTsKLX0KLQogaW50CiBub3V2ZWF1X2dlbV9pb2N0bF9uZXcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCkBAIC0xNDYsMTEgKzExNyw2IEBACiAJaWYgKHVubGlrZWx5KGRldl9wcml2LT50dG0uYmRldi5kZXZfbWFwcGluZyA9PSBOVUxMKSkKIAkJZGV2X3ByaXYtPnR0bS5iZGV2LmRldl9tYXBwaW5nID0gZGV2X3ByaXYtPmRldi0+ZGV2X21hcHBpbmc7CiAKLQlpZiAocmVxLT5jaGFubmVsX2hpbnQpIHsKLQkJTk9VVkVBVV9HRVRfVVNFUl9DSEFOTkVMX1dJVEhfUkVUVVJOKHJlcS0+Y2hhbm5lbF9oaW50LAotCQkJCQkJICAgICBmaWxlX3ByaXYsIGNoYW4pOwotCX0KLQogCWlmIChyZXEtPmluZm8uZG9tYWluICYgTk9VVkVBVV9HRU1fRE9NQUlOX1ZSQU0pCiAJCWZsYWdzIHw9IFRUTV9QTF9GTEFHX1ZSQU07CiAJaWYgKHJlcS0+aW5mby5kb21haW4gJiBOT1VWRUFVX0dFTV9ET01BSU5fR0FSVCkKQEAgLTE1OCwxMyArMTI0LDIzIEBACiAJaWYgKCFmbGFncyB8fCByZXEtPmluZm8uZG9tYWluICYgTk9VVkVBVV9HRU1fRE9NQUlOX0NQVSkKIAkJZmxhZ3MgfD0gVFRNX1BMX0ZMQUdfU1lTVEVNOwogCi0JaWYgKCFub3V2ZWF1X2dlbV90aWxlX2ZsYWdzX3ZhbGlkKGRldiwgcmVxLT5pbmZvLnRpbGVfZmxhZ3MpKQorCWlmICghZGV2X3ByaXYtPmVuZ2luZS52cmFtLmZsYWdzX3ZhbGlkKGRldiwgcmVxLT5pbmZvLnRpbGVfZmxhZ3MpKSB7CisJCU5WX0VSUk9SKGRldiwgImJhZCBwYWdlIGZsYWdzOiAweCUwOHhcbiIsIHJlcS0+aW5mby50aWxlX2ZsYWdzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHJlcS0+Y2hhbm5lbF9oaW50KSB7CisJCWNoYW4gPSBub3V2ZWF1X2NoYW5uZWxfZ2V0KGRldiwgZmlsZV9wcml2LCByZXEtPmNoYW5uZWxfaGludCk7CisJCWlmIChJU19FUlIoY2hhbikpCisJCQlyZXR1cm4gUFRSX0VSUihjaGFuKTsKKwl9CiAKIAlyZXQgPSBub3V2ZWF1X2dlbV9uZXcoZGV2LCBjaGFuLCByZXEtPmluZm8uc2l6ZSwgcmVxLT5hbGlnbiwgZmxhZ3MsCiAJCQkgICAgICByZXEtPmluZm8udGlsZV9tb2RlLCByZXEtPmluZm8udGlsZV9mbGFncywgZmFsc2UsCiAJCQkgICAgICAocmVxLT5pbmZvLmRvbWFpbiAmIE5PVVZFQVVfR0VNX0RPTUFJTl9NQVBQQUJMRSksCiAJCQkgICAgICAmbnZibyk7CisJaWYgKGNoYW4pCisJCW5vdXZlYXVfY2hhbm5lbF9wdXQoJmNoYW4pOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIzMSwxNSArMjA3LDggQEAKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgdG1wLCBsaXN0KSB7CiAJCW52Ym8gPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3Qgbm91dmVhdV9ibywgZW50cnkpOwotCQlpZiAobGlrZWx5KGZlbmNlKSkgewotCQkJc3RydWN0IG5vdXZlYXVfZmVuY2UgKnByZXZfZmVuY2U7CiAKLQkJCXNwaW5fbG9jaygmbnZiby0+Ym8ubG9jayk7Ci0JCQlwcmV2X2ZlbmNlID0gbnZiby0+Ym8uc3luY19vYmo7Ci0JCQludmJvLT5iby5zeW5jX29iaiA9IG5vdXZlYXVfZmVuY2VfcmVmKGZlbmNlKTsKLQkJCXNwaW5fdW5sb2NrKCZudmJvLT5iby5sb2NrKTsKLQkJCW5vdXZlYXVfZmVuY2VfdW5yZWYoKHZvaWQgKikmcHJldl9mZW5jZSk7Ci0JCX0KKwkJbm91dmVhdV9ib19mZW5jZShudmJvLCBmZW5jZSk7CiAKIAkJaWYgKHVubGlrZWx5KG52Ym8tPnZhbGlkYXRlX21hcHBlZCkpIHsKIAkJCXR0bV9ib19rdW5tYXAoJm52Ym8tPmttYXApOwpAQCAtMjk5LDE0ICsyNjgsMTUgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJcmV0ID0gdHRtX2JvX3Jlc2VydmUoJm52Ym8tPmJvLCBmYWxzZSwgZmFsc2UsIHRydWUsIHNlcXVlbmNlKTsKKwkJcmV0ID0gdHRtX2JvX3Jlc2VydmUoJm52Ym8tPmJvLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgc2VxdWVuY2UpOwogCQlpZiAocmV0KSB7CiAJCQl2YWxpZGF0ZV9maW5pKG9wLCBOVUxMKTsKLQkJCWlmIChyZXQgPT0gLUVBR0FJTikKLQkJCQlyZXQgPSB0dG1fYm9fd2FpdF91bnJlc2VydmVkKCZudmJvLT5ibywgZmFsc2UpOworCQkJaWYgKHVubGlrZWx5KHJldCA9PSAtRUFHQUlOKSkKKwkJCQlyZXQgPSB0dG1fYm9fd2FpdF91bnJlc2VydmVkKCZudmJvLT5ibywgdHJ1ZSk7CiAJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnZW0pOwotCQkJaWYgKHJldCkgewotCQkJCU5WX0VSUk9SKGRldiwgImZhaWwgcmVzZXJ2ZVxuIik7CisJCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJCWlmIChyZXQgIT0gLUVSRVNUQVJUU1lTKQorCQkJCQlOVl9FUlJPUihkZXYsICJmYWlsIHJlc2VydmVcbiIpOwogCQkJCXJldHVybiByZXQ7CiAJCQl9CiAJCQlnb3RvIHJldHJ5OwpAQCAtMzMxLDI1ICszMDEsNiBAQAogCQkJdmFsaWRhdGVfZmluaShvcCwgTlVMTCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCi0JCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmbnZiby0+Ym8uY3B1X3dyaXRlcnMpID4gMCkpIHsKLQkJCXZhbGlkYXRlX2Zpbmkob3AsIE5VTEwpOwotCi0JCQlpZiAobnZiby0+Y3B1X2ZpbHAgPT0gZmlsZV9wcml2KSB7Ci0JCQkJTlZfRVJST1IoZGV2LCAiYm8gJXAgbWFwcGVkIGJ5IHByb2Nlc3MgdHJ5aW5nICIKLQkJCQkJICAgICAgInRvIHZhbGlkYXRlIGl0IVxuIiwgbnZibyk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCW11dGV4X3VubG9jaygmZHJtX2dsb2JhbF9tdXRleCk7Ci0JCQlyZXQgPSB0dG1fYm9fd2FpdF9jcHUoJm52Ym8tPmJvLCBmYWxzZSk7Ci0JCQltdXRleF9sb2NrKCZkcm1fZ2xvYmFsX211dGV4KTsKLQkJCWlmIChyZXQpIHsKLQkJCQlOVl9FUlJPUihkZXYsICJmYWlsIHdhaXRfY3B1XG4iKTsKLQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCQkJZ290byByZXRyeTsKLQkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtMzgzLDExICszMzQsMTEgQEAKIAkJfQogCiAJCW52Ym8tPmNoYW5uZWwgPSAoYi0+cmVhZF9kb21haW5zICYgKDEgPDwgMzEpKSA/IE5VTEwgOiBjaGFuOwotCQlyZXQgPSB0dG1fYm9fdmFsaWRhdGUoJm52Ym8tPmJvLCAmbnZiby0+cGxhY2VtZW50LAotCQkJCSAgICAgIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCQlyZXQgPSBub3V2ZWF1X2JvX3ZhbGlkYXRlKG52Ym8sIHRydWUsIGZhbHNlLCBmYWxzZSk7CiAJCW52Ym8tPmNoYW5uZWwgPSBOVUxMOwogCQlpZiAodW5saWtlbHkocmV0KSkgewotCQkJTlZfRVJST1IoZGV2LCAiZmFpbCB0dG1fdmFsaWRhdGVcbiIpOworCQkJaWYgKHJldCAhPSAtRVJFU1RBUlRTWVMpCisJCQkJTlZfRVJST1IoZGV2LCAiZmFpbCB0dG1fdmFsaWRhdGVcbiIpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCkBAIC00MzksMTMgKzM5MCwxNSBAQAogCiAJcmV0ID0gdmFsaWRhdGVfaW5pdChjaGFuLCBmaWxlX3ByaXYsIHBiYm8sIG5yX2J1ZmZlcnMsIG9wKTsKIAlpZiAodW5saWtlbHkocmV0KSkgewotCQlOVl9FUlJPUihkZXYsICJ2YWxpZGF0ZV9pbml0XG4iKTsKKwkJaWYgKHJldCAhPSAtRVJFU1RBUlRTWVMpCisJCQlOVl9FUlJPUihkZXYsICJ2YWxpZGF0ZV9pbml0XG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSB2YWxpZGF0ZV9saXN0KGNoYW4sICZvcC0+dnJhbV9saXN0LCBwYmJvLCB1c2VyX2J1ZmZlcnMpOwogCWlmICh1bmxpa2VseShyZXQgPCAwKSkgewotCQlOVl9FUlJPUihkZXYsICJ2YWxpZGF0ZSB2cmFtX2xpc3RcbiIpOworCQlpZiAocmV0ICE9IC1FUkVTVEFSVFNZUykKKwkJCU5WX0VSUk9SKGRldiwgInZhbGlkYXRlIHZyYW1fbGlzdFxuIik7CiAJCXZhbGlkYXRlX2Zpbmkob3AsIE5VTEwpOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTQ1Myw3ICs0MDYsOCBAQAogCiAJcmV0ID0gdmFsaWRhdGVfbGlzdChjaGFuLCAmb3AtPmdhcnRfbGlzdCwgcGJibywgdXNlcl9idWZmZXJzKTsKIAlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKLQkJTlZfRVJST1IoZGV2LCAidmFsaWRhdGUgZ2FydF9saXN0XG4iKTsKKwkJaWYgKHJldCAhPSAtRVJFU1RBUlRTWVMpCisJCQlOVl9FUlJPUihkZXYsICJ2YWxpZGF0ZSBnYXJ0X2xpc3RcbiIpOwogCQl2YWxpZGF0ZV9maW5pKG9wLCBOVUxMKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC00NjEsNyArNDE1LDggQEAKIAogCXJldCA9IHZhbGlkYXRlX2xpc3QoY2hhbiwgJm9wLT5ib3RoX2xpc3QsIHBiYm8sIHVzZXJfYnVmZmVycyk7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7Ci0JCU5WX0VSUk9SKGRldiwgInZhbGlkYXRlIGJvdGhfbGlzdFxuIik7CisJCWlmIChyZXQgIT0gLUVSRVNUQVJUU1lTKQorCQkJTlZfRVJST1IoZGV2LCAidmFsaWRhdGUgYm90aF9saXN0XG4iKTsKIAkJdmFsaWRhdGVfZmluaShvcCwgTlVMTCk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtNTU3LDkgKzUxMiw5IEBACiAJCQkJZGF0YSB8PSByLT52b3I7CiAJCX0KIAotCQlzcGluX2xvY2soJm52Ym8tPmJvLmxvY2spOworCQlzcGluX2xvY2soJm52Ym8tPmJvLmJkZXYtPmZlbmNlX2xvY2spOwogCQlyZXQgPSB0dG1fYm9fd2FpdCgmbnZiby0+Ym8sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotCQlzcGluX3VubG9jaygmbnZiby0+Ym8ubG9jayk7CisJCXNwaW5fdW5sb2NrKCZudmJvLT5iby5iZGV2LT5mZW5jZV9sb2NrKTsKIAkJaWYgKHJldCkgewogCQkJTlZfRVJST1IoZGV2LCAicmVsb2Mgd2FpdF9pZGxlIGZhaWxlZDogJWRcbiIsIHJldCk7CiAJCQlicmVhazsKQEAgLTU4NSw3ICs1NDAsOSBAQAogCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZSA9IE5VTEw7CiAJaW50IGksIGosIHJldCA9IDAsIGRvX3JlbG9jID0gMDsKIAotCU5PVVZFQVVfR0VUX1VTRVJfQ0hBTk5FTF9XSVRIX1JFVFVSTihyZXEtPmNoYW5uZWwsIGZpbGVfcHJpdiwgY2hhbik7CisJY2hhbiA9IG5vdXZlYXVfY2hhbm5lbF9nZXQoZGV2LCBmaWxlX3ByaXYsIHJlcS0+Y2hhbm5lbCk7CisJaWYgKElTX0VSUihjaGFuKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2hhbik7CiAKIAlyZXEtPnZyYW1fYXZhaWxhYmxlID0gZGV2X3ByaXYtPmZiX2FwZXJfZnJlZTsKIAlyZXEtPmdhcnRfYXZhaWxhYmxlID0gZGV2X3ByaXYtPmdhcnRfaW5mby5hcGVyX2ZyZWU7CkBAIC01OTUsMjggKzU1MiwzNCBAQAogCWlmICh1bmxpa2VseShyZXEtPm5yX3B1c2ggPiBOT1VWRUFVX0dFTV9NQVhfUFVTSCkpIHsKIAkJTlZfRVJST1IoZGV2LCAicHVzaGJ1ZiBwdXNoIGNvdW50IGV4Y2VlZHMgbGltaXQ6ICVkIG1heCAlZFxuIiwKIAkJCSByZXEtPm5yX3B1c2gsIE5PVVZFQVVfR0VNX01BWF9QVVNIKTsKKwkJbm91dmVhdV9jaGFubmVsX3B1dCgmY2hhbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICh1bmxpa2VseShyZXEtPm5yX2J1ZmZlcnMgPiBOT1VWRUFVX0dFTV9NQVhfQlVGRkVSUykpIHsKIAkJTlZfRVJST1IoZGV2LCAicHVzaGJ1ZiBibyBjb3VudCBleGNlZWRzIGxpbWl0OiAlZCBtYXggJWRcbiIsCiAJCQkgcmVxLT5ucl9idWZmZXJzLCBOT1VWRUFVX0dFTV9NQVhfQlVGRkVSUyk7CisJCW5vdXZlYXVfY2hhbm5lbF9wdXQoJmNoYW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAodW5saWtlbHkocmVxLT5ucl9yZWxvY3MgPiBOT1VWRUFVX0dFTV9NQVhfUkVMT0NTKSkgewogCQlOVl9FUlJPUihkZXYsICJwdXNoYnVmIHJlbG9jIGNvdW50IGV4Y2VlZHMgbGltaXQ6ICVkIG1heCAlZFxuIiwKIAkJCSByZXEtPm5yX3JlbG9jcywgTk9VVkVBVV9HRU1fTUFYX1JFTE9DUyk7CisJCW5vdXZlYXVfY2hhbm5lbF9wdXQoJmNoYW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlwdXNoID0gdV9tZW1jcHlhKHJlcS0+cHVzaCwgcmVxLT5ucl9wdXNoLCBzaXplb2YoKnB1c2gpKTsKLQlpZiAoSVNfRVJSKHB1c2gpKQorCWlmIChJU19FUlIocHVzaCkpIHsKKwkJbm91dmVhdV9jaGFubmVsX3B1dCgmY2hhbik7CiAJCXJldHVybiBQVFJfRVJSKHB1c2gpOworCX0KIAogCWJvID0gdV9tZW1jcHlhKHJlcS0+YnVmZmVycywgcmVxLT5ucl9idWZmZXJzLCBzaXplb2YoKmJvKSk7CiAJaWYgKElTX0VSUihibykpIHsKIAkJa2ZyZWUocHVzaCk7CisJCW5vdXZlYXVfY2hhbm5lbF9wdXQoJmNoYW4pOwogCQlyZXR1cm4gUFRSX0VSUihibyk7CiAJfQogCkBAIC02MzksNyArNjAyLDggQEAKIAlyZXQgPSBub3V2ZWF1X2dlbV9wdXNoYnVmX3ZhbGlkYXRlKGNoYW4sIGZpbGVfcHJpdiwgYm8sIHJlcS0+YnVmZmVycywKIAkJCQkJICAgcmVxLT5ucl9idWZmZXJzLCAmb3AsICZkb19yZWxvYyk7CiAJaWYgKHJldCkgewotCQlOVl9FUlJPUihkZXYsICJ2YWxpZGF0ZTogJWRcbiIsIHJldCk7CisJCWlmIChyZXQgIT0gLUVSRVNUQVJUU1lTKQorCQkJTlZfRVJST1IoZGV2LCAidmFsaWRhdGU6ICVkXG4iLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTczMiw3ICs2OTYsNyBAQAogCiBvdXQ6CiAJdmFsaWRhdGVfZmluaSgmb3AsIGZlbmNlKTsKLQlub3V2ZWF1X2ZlbmNlX3VucmVmKCh2b2lkKiopJmZlbmNlKTsKKwlub3V2ZWF1X2ZlbmNlX3VucmVmKCZmZW5jZSk7CiAJa2ZyZWUoYm8pOwogCWtmcmVlKHB1c2gpOwogCkBAIC03NTAsNiArNzE0LDcgQEAKIAkJcmVxLT5zdWZmaXgxID0gMHgwMDAwMDAwMDsKIAl9CiAKKwlub3V2ZWF1X2NoYW5uZWxfcHV0KCZjaGFuKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03ODEsMjYgKzc0Niw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCW52Ym8gPSBub3V2ZWF1X2dlbV9vYmplY3QoZ2VtKTsKIAotCWlmIChudmJvLT5jcHVfZmlscCkgewotCQlpZiAobnZiby0+Y3B1X2ZpbHAgPT0gZmlsZV9wcml2KQotCQkJZ290byBvdXQ7Ci0KLQkJcmV0ID0gdHRtX2JvX3dhaXRfY3B1KCZudmJvLT5ibywgbm9fd2FpdCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAocmVxLT5mbGFncyAmIE5PVVZFQVVfR0VNX0NQVV9QUkVQX05PQkxPQ0spIHsKLQkJc3Bpbl9sb2NrKCZudmJvLT5iby5sb2NrKTsKLQkJcmV0ID0gdHRtX2JvX3dhaXQoJm52Ym8tPmJvLCBmYWxzZSwgZmFsc2UsIG5vX3dhaXQpOwotCQlzcGluX3VubG9jaygmbnZiby0+Ym8ubG9jayk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gdHRtX2JvX3N5bmNjcHVfd3JpdGVfZ3JhYigmbnZiby0+Ym8sIG5vX3dhaXQpOwotCQlpZiAocmV0ID09IDApCi0JCQludmJvLT5jcHVfZmlscCA9IGZpbGVfcHJpdjsKLQl9Ci0KLW91dDoKKwlzcGluX2xvY2soJm52Ym8tPmJvLmJkZXYtPmZlbmNlX2xvY2spOworCXJldCA9IHR0bV9ib193YWl0KCZudmJvLT5ibywgdHJ1ZSwgdHJ1ZSwgbm9fd2FpdCk7CisJc3Bpbl91bmxvY2soJm52Ym8tPmJvLmJkZXYtPmZlbmNlX2xvY2spOwogCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTgwOSwyNiArNzU3LDcgQEAKIG5vdXZlYXVfZ2VtX2lvY3RsX2NwdV9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX2NwdV9wcmVwICpyZXEgPSBkYXRhOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOwotCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvOwotCWludCByZXQgPSAtRUlOVkFMOwotCi0JZ2VtID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCByZXEtPmhhbmRsZSk7Ci0JaWYgKCFnZW0pCi0JCXJldHVybiAtRU5PRU5UOwotCW52Ym8gPSBub3V2ZWF1X2dlbV9vYmplY3QoZ2VtKTsKLQotCWlmIChudmJvLT5jcHVfZmlscCAhPSBmaWxlX3ByaXYpCi0JCWdvdG8gb3V0OwotCW52Ym8tPmNwdV9maWxwID0gTlVMTDsKLQotCXR0bV9ib19zeW5jY3B1X3dyaXRlX3JlbGVhc2UoJm52Ym8tPmJvKTsKLQlyZXQgPSAwOwotCi1vdXQ6Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaHcuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaHcuYwppbmRleCBiOTY3MmEwLi4wNTNlZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2h3LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ody5jCkBAIC05NTMsNyArOTUzLDcgQEAKIAkJCU5WV3JpdGVDUlRDKGRldiwgaGVhZCwgTlZfUENSVENfODUwLCByZWdwLT5jcnRjXzg1MCk7CiAKIAkJCXJlZzkwMCA9IE5WUmVhZFJBTURBQyhkZXYsIGhlYWQsIE5WX1BSQU1EQUNfOTAwKTsKLQkJCWlmIChyZWdwLT5jcnRjX2NmZyA9PSBOVl9QQ1JUQ19DT05GSUdfU1RBUlRfQUREUkVTU19IU1lOQykKKwkJCWlmIChyZWdwLT5jcnRjX2NmZyA9PSBOVjEwX1BDUlRDX0NPTkZJR19TVEFSVF9BRERSRVNTX0hTWU5DKQogCQkJCU5WV3JpdGVSQU1EQUMoZGV2LCBoZWFkLCBOVl9QUkFNREFDXzkwMCwgcmVnOTAwIHwgMHgxMDAwMCk7CiAJCQllbHNlCiAJCQkJTlZXcml0ZVJBTURBQyhkZXYsIGhlYWQsIE5WX1BSQU1EQUNfOTAwLCByZWc5MDAgJiB+MHgxMDAwMCk7CkBAIC05OTksOCArOTk5LDggQEAKIAkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfMTApIHsKIAkJCS8qIE5vdCB3YWl0aW5nIGZvciB2ZXJ0aWNhbCByZXRyYWNlIGJlZm9yZSBtb2RpZnlpbmcKIAkJCSAgIENSRV81My9DUkVfNTQgY2F1c2VzIGxvY2t1cHMuICovCi0JCQlub3V2ZWF1X3dhaXRfdW50aWwoZGV2LCA2NTAwMDAwMDAsIE5WX1BSTUNJT19JTlAwX19DT0xPUiwgMHg4LCAweDgpOwotCQkJbm91dmVhdV93YWl0X3VudGlsKGRldiwgNjUwMDAwMDAwLCBOVl9QUk1DSU9fSU5QMF9fQ09MT1IsIDB4OCwgMHgwKTsKKwkJCW5vdXZlYXVfd2FpdF9lcShkZXYsIDY1MDAwMDAwMCwgTlZfUFJNQ0lPX0lOUDBfX0NPTE9SLCAweDgsIDB4OCk7CisJCQlub3V2ZWF1X3dhaXRfZXEoZGV2LCA2NTAwMDAwMDAsIE5WX1BSTUNJT19JTlAwX19DT0xPUiwgMHg4LCAweDApOwogCQl9CiAKIAkJd3JfY2lvX3N0YXRlKGRldiwgaGVhZCwgcmVncCwgTlZfQ0lPX0NSRV81Myk7CkBAIC0xMDE3LDggKzEwMTcsOSBAQAogCiAJTlZXcml0ZUNSVEMoZGV2LCBoZWFkLCBOVl9QQ1JUQ19TVEFSVCwgcmVncC0+ZmJfc3RhcnQpOwogCi0JLyogU2V0dGluZyAxIG9uIHRoaXMgdmFsdWUgZ2l2ZXMgeW91IGludGVycnVwdHMgZm9yIGV2ZXJ5IHZibGFuayBwZXJpb2QuICovCi0JTlZXcml0ZUNSVEMoZGV2LCBoZWFkLCBOVl9QQ1JUQ19JTlRSX0VOXzAsIDApOworCS8qIEVuYWJsZSB2YmxhbmsgaW50ZXJydXB0cy4gKi8KKwlOVldyaXRlQ1JUQyhkZXYsIGhlYWQsIE5WX1BDUlRDX0lOVFJfRU5fMCwKKwkJICAgIChkZXYtPnZibGFua19lbmFibGVkW2hlYWRdID8gMSA6IDApKTsKIAlOVldyaXRlQ1JUQyhkZXYsIGhlYWQsIE5WX1BDUlRDX0lOVFJfMCwgTlZfUENSVENfSU5UUl8wX1ZCTEFOSyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2lycS5jCmluZGV4IDdiZmQ5ZTYuLjJiYTcyNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pcnEuYwpAQCAtMzYsMTggKzM2LDcgQEAKICNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgogI2luY2x1ZGUgIm5vdXZlYXVfcmVnLmgiCiAjaW5jbHVkZSAibm91dmVhdV9yYW1odC5oIgotI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgotCi0vKiBuZWVkZWQgZm9yIGhvdHBsdWcgaXJxICovCi0jaW5jbHVkZSAibm91dmVhdV9jb25uZWN0b3IuaCIKLSNpbmNsdWRlICJudjUwX2Rpc3BsYXkuaCIKLQotc3RhdGljIERFRklORV9SQVRFTElNSVRfU1RBVEUobm91dmVhdV9yYXRlbGltaXRfc3RhdGUsIDMgKiBIWiwgMjApOwotCi1zdGF0aWMgaW50IG5vdXZlYXVfcmF0ZWxpbWl0KHZvaWQpCi17Ci0JcmV0dXJuIF9fcmF0ZWxpbWl0KCZub3V2ZWF1X3JhdGVsaW1pdF9zdGF0ZSk7Ci19CisjaW5jbHVkZSAibm91dmVhdV91dGlsLmgiCiAKIHZvaWQKIG5vdXZlYXVfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTU3LDE5ICs0NiwxOSBAQAogCS8qIE1hc3RlciBkaXNhYmxlICovCiAJbnZfd3IzMihkZXYsIE5WMDNfUE1DX0lOVFJfRU5fMCwgMCk7CiAKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgewotCQlJTklUX1dPUksoJmRldl9wcml2LT5pcnFfd29yaywgbnY1MF9kaXNwbGF5X2lycV9oYW5kbGVyX2JoKTsKLQkJSU5JVF9XT1JLKCZkZXZfcHJpdi0+aHBkX3dvcmssIG52NTBfZGlzcGxheV9pcnFfaG90cGx1Z19iaCk7Ci0JCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+aHBkX3N0YXRlLmxvY2spOwotCQlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPnZibF93YWl0aW5nKTsKLQl9CisJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT52Ymxfd2FpdGluZyk7CiB9CiAKIGludAogbm91dmVhdV9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCiAJLyogTWFzdGVyIGVuYWJsZSAqLwogCW52X3dyMzIoZGV2LCBOVjAzX1BNQ19JTlRSX0VOXzAsIE5WX1BNQ19JTlRSX0VOXzBfTUFTVEVSX0VOQUJMRSk7CisJaWYgKGRldl9wcml2LT5tc2lfZW5hYmxlZCkKKwkJbnZfd3IwOChkZXYsIDB4MDAwODgwNjgsIDB4ZmYpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgwLDExNzggKzY5LDgzIEBACiAJbnZfd3IzMihkZXYsIE5WMDNfUE1DX0lOVFJfRU5fMCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQKLW5vdXZlYXVfY2FsbF9tZXRob2Qoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGNsYXNzLCBpbnQgbXRoZCwgaW50IGRhdGEpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY2hhbi0+ZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X21ldGhvZCAqZ3JtOwotCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfY2xhc3MgKmdyYzsKLQotCWdyYyA9IGRldl9wcml2LT5lbmdpbmUuZ3JhcGguZ3JjbGFzczsKLQl3aGlsZSAoZ3JjLT5pZCkgewotCQlpZiAoZ3JjLT5pZCA9PSBjbGFzcykKLQkJCWJyZWFrOwotCQlncmMrKzsKLQl9Ci0KLQlpZiAoZ3JjLT5pZCAhPSBjbGFzcyB8fCAhZ3JjLT5tZXRob2RzKQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCWdybSA9IGdyYy0+bWV0aG9kczsKLQl3aGlsZSAoZ3JtLT5pZCkgewotCQlpZiAoZ3JtLT5pZCA9PSBtdGhkKQotCQkJcmV0dXJuIGdybS0+ZXhlYyhjaGFuLCBjbGFzcywgbXRoZCwgZGF0YSk7Ci0JCWdybSsrOwotCX0KLQotCXJldHVybiAtRU5PRU5UOwotfQotCi1zdGF0aWMgYm9vbAotbm91dmVhdV9maWZvX3N3bXRoZChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCBkYXRhKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7Ci0JY29uc3QgaW50IHN1YmMgPSAoYWRkciA+PiAxMykgJiAweDc7Ci0JY29uc3QgaW50IG10aGQgPSBhZGRyICYgMHgxZmZjOwotCi0JaWYgKG10aGQgPT0gMHgwMDAwKSB7Ci0JCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqOwotCi0JCWdwdW9iaiA9IG5vdXZlYXVfcmFtaHRfZmluZChjaGFuLCBkYXRhKTsKLQkJaWYgKCFncHVvYmopCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJaWYgKGdwdW9iai0+ZW5naW5lICE9IE5WT0JKX0VOR0lORV9TVykKLQkJCXJldHVybiBmYWxzZTsKLQotCQljaGFuLT5zd19zdWJjaGFubmVsW3N1YmNdID0gZ3B1b2JqLT5jbGFzczsKLQkJbnZfd3IzMihkZXYsIE5WMDRfUEZJRk9fQ0FDSEUxX0VOR0lORSwgbnZfcmQzMihkZXYsCi0JCQlOVjA0X1BGSUZPX0NBQ0hFMV9FTkdJTkUpICYgfigweGYgPDwgc3ViYyAqIDQpKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyogaHcgb2JqZWN0ICovCi0JaWYgKG52X3JkMzIoZGV2LCBOVjA0X1BGSUZPX0NBQ0hFMV9FTkdJTkUpICYgKDEgPDwgKHN1YmMqNCkpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAobm91dmVhdV9jYWxsX21ldGhvZChjaGFuLCBjaGFuLT5zd19zdWJjaGFubmVsW3N1YmNdLCBtdGhkLCBkYXRhKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ub3V2ZWF1X2ZpZm9faXJxX2hhbmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X2VuZ2luZSAqZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmU7Ci0JdWludDMyX3Qgc3RhdHVzLCByZWFzc2lnbjsKLQlpbnQgY250ID0gMDsKLQotCXJlYXNzaWduID0gbnZfcmQzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEVTKSAmIDE7Ci0Jd2hpbGUgKChzdGF0dXMgPSBudl9yZDMyKGRldiwgTlYwM19QRklGT19JTlRSXzApKSAmJiAoY250KysgPCAxMDApKSB7Ci0JCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBOVUxMOwotCQl1aW50MzJfdCBjaGlkLCBnZXQ7Ci0KLQkJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEVTLCAwKTsKLQotCQljaGlkID0gZW5naW5lLT5maWZvLmNoYW5uZWxfaWQoZGV2KTsKLQkJaWYgKGNoaWQgPj0gMCAmJiBjaGlkIDwgZW5naW5lLT5maWZvLmNoYW5uZWxzKQotCQkJY2hhbiA9IGRldl9wcml2LT5maWZvc1tjaGlkXTsKLQkJZ2V0ICA9IG52X3JkMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFMV9HRVQpOwotCi0JCWlmIChzdGF0dXMgJiBOVl9QRklGT19JTlRSX0NBQ0hFX0VSUk9SKSB7Ci0JCQl1aW50MzJfdCBtdGhkLCBkYXRhOwotCQkJaW50IHB0cjsKLQotCQkJLyogTlZfUEZJRk9fQ0FDSEUxX0dFVCBhY3R1YWxseSBnb2VzIHRvIDB4ZmZjIGJlZm9yZQotCQkJICogd3JhcHBpbmcgb24gbXkgRzgwIGNoaXBzLCBidXQgQ0FDSEUxIGlzbid0IGJpZwotCQkJICogZW5vdWdoIGZvciB0aGlzIG11Y2ggZGF0YS4uIFRlc3RzIHNob3cgdGhhdCBpdAotCQkJICogd3JhcHMgYXJvdW5kIHRvIHRoZSBzdGFydCBhdCBHRVQ9MHg4MDAuLiBObyBjbHVlCi0JCQkgKiBhcyB0byB3aHkuLgotCQkJICovCi0JCQlwdHIgPSAoZ2V0ICYgMHg3ZmYpID4+IDI7Ci0KLQkJCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNDApIHsKLQkJCQltdGhkID0gbnZfcmQzMihkZXYsCi0JCQkJCU5WMDRfUEZJRk9fQ0FDSEUxX01FVEhPRChwdHIpKTsKLQkJCQlkYXRhID0gbnZfcmQzMihkZXYsCi0JCQkJCU5WMDRfUEZJRk9fQ0FDSEUxX0RBVEEocHRyKSk7Ci0JCQl9IGVsc2UgewotCQkJCW10aGQgPSBudl9yZDMyKGRldiwKLQkJCQkJTlY0MF9QRklGT19DQUNIRTFfTUVUSE9EKHB0cikpOwotCQkJCWRhdGEgPSBudl9yZDMyKGRldiwKLQkJCQkJTlY0MF9QRklGT19DQUNIRTFfREFUQShwdHIpKTsKLQkJCX0KLQotCQkJaWYgKCFjaGFuIHx8ICFub3V2ZWF1X2ZpZm9fc3dtdGhkKGNoYW4sIG10aGQsIGRhdGEpKSB7Ci0JCQkJTlZfSU5GTyhkZXYsICJQRklGT19DQUNIRV9FUlJPUiAtIENoICVkLyVkICIKLQkJCQkJICAgICAiTXRoZCAweCUwNHggRGF0YSAweCUwOHhcbiIsCi0JCQkJCWNoaWQsIChtdGhkID4+IDEzKSAmIDcsIG10aGQgJiAweDFmZmMsCi0JCQkJCWRhdGEpOwotCQkJfQotCi0JCQludl93cjMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfRE1BX1BVU0gsIDApOwotCQkJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fSU5UUl8wLAotCQkJCQkJTlZfUEZJRk9fSU5UUl9DQUNIRV9FUlJPUik7Ci0KLQkJCW52X3dyMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFMV9QVVNIMCwKLQkJCQludl9yZDMyKGRldiwgTlYwM19QRklGT19DQUNIRTFfUFVTSDApICYgfjEpOwotCQkJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEUxX0dFVCwgZ2V0ICsgNCk7Ci0JCQludl93cjMyKGRldiwgTlYwM19QRklGT19DQUNIRTFfUFVTSDAsCi0JCQkJbnZfcmQzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEUxX1BVU0gwKSB8IDEpOwotCQkJbnZfd3IzMihkZXYsIE5WMDRfUEZJRk9fQ0FDSEUxX0hBU0gsIDApOwotCi0JCQludl93cjMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfRE1BX1BVU0gsCi0JCQkJbnZfcmQzMihkZXYsIE5WMDRfUEZJRk9fQ0FDSEUxX0RNQV9QVVNIKSB8IDEpOwotCQkJbnZfd3IzMihkZXYsIE5WMDRfUEZJRk9fQ0FDSEUxX1BVTEwwLCAxKTsKLQotCQkJc3RhdHVzICY9IH5OVl9QRklGT19JTlRSX0NBQ0hFX0VSUk9SOwotCQl9Ci0KLQkJaWYgKHN0YXR1cyAmIE5WX1BGSUZPX0lOVFJfRE1BX1BVU0hFUikgewotCQkJdTMyIGRtYV9nZXQgPSBudl9yZDMyKGRldiwgMHgwMDMyNDQpOwotCQkJdTMyIGRtYV9wdXQgPSBudl9yZDMyKGRldiwgMHgwMDMyNDApOwotCQkJdTMyIHB1c2ggPSBudl9yZDMyKGRldiwgMHgwMDMyMjApOwotCQkJdTMyIHN0YXRlID0gbnZfcmQzMihkZXYsIDB4MDAzMjI4KTsKLQotCQkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNTApIHsKLQkJCQl1MzIgaG9fZ2V0ID0gbnZfcmQzMihkZXYsIDB4MDAzMzI4KTsKLQkJCQl1MzIgaG9fcHV0ID0gbnZfcmQzMihkZXYsIDB4MDAzMzIwKTsKLQkJCQl1MzIgaWJfZ2V0ID0gbnZfcmQzMihkZXYsIDB4MDAzMzM0KTsKLQkJCQl1MzIgaWJfcHV0ID0gbnZfcmQzMihkZXYsIDB4MDAzMzMwKTsKLQotCQkJCWlmIChub3V2ZWF1X3JhdGVsaW1pdCgpKQotCQkJCQlOVl9JTkZPKGRldiwgIlBGSUZPX0RNQV9QVVNIRVIgLSBDaCAlZCBHZXQgMHglMDJ4JTA4eCAiCi0JCQkJCSAgICAgIlB1dCAweCUwMnglMDh4IEliR2V0IDB4JTA4eCBJYlB1dCAweCUwOHggIgotCQkJCQkgICAgICJTdGF0ZSAweCUwOHggUHVzaCAweCUwOHhcbiIsCi0JCQkJCQljaGlkLCBob19nZXQsIGRtYV9nZXQsIGhvX3B1dCwKLQkJCQkJCWRtYV9wdXQsIGliX2dldCwgaWJfcHV0LCBzdGF0ZSwKLQkJCQkJCXB1c2gpOwotCi0JCQkJLyogTUVUSE9EX0NPVU5ULCBpbiBETUFfU1RBVEUgb24gZWFybGllciBjaGlwc2V0cyAqLwotCQkJCW52X3dyMzIoZGV2LCAweDAwMzM2NCwgMHgwMDAwMDAwMCk7Ci0JCQkJaWYgKGRtYV9nZXQgIT0gZG1hX3B1dCB8fCBob19nZXQgIT0gaG9fcHV0KSB7Ci0JCQkJCW52X3dyMzIoZGV2LCAweDAwMzI0NCwgZG1hX3B1dCk7Ci0JCQkJCW52X3dyMzIoZGV2LCAweDAwMzMyOCwgaG9fcHV0KTsKLQkJCQl9IGVsc2UKLQkJCQlpZiAoaWJfZ2V0ICE9IGliX3B1dCkgewotCQkJCQludl93cjMyKGRldiwgMHgwMDMzMzQsIGliX3B1dCk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlOVl9JTkZPKGRldiwgIlBGSUZPX0RNQV9QVVNIRVIgLSBDaCAlZCBHZXQgMHglMDh4ICIKLQkJCQkJICAgICAiUHV0IDB4JTA4eCBTdGF0ZSAweCUwOHggUHVzaCAweCUwOHhcbiIsCi0JCQkJCWNoaWQsIGRtYV9nZXQsIGRtYV9wdXQsIHN0YXRlLCBwdXNoKTsKLQotCQkJCWlmIChkbWFfZ2V0ICE9IGRtYV9wdXQpCi0JCQkJCW52X3dyMzIoZGV2LCAweDAwMzI0NCwgZG1hX3B1dCk7Ci0JCQl9Ci0KLQkJCW52X3dyMzIoZGV2LCAweDAwMzIyOCwgMHgwMDAwMDAwMCk7Ci0JCQludl93cjMyKGRldiwgMHgwMDMyMjAsIDB4MDAwMDAwMDEpOwotCQkJbnZfd3IzMihkZXYsIDB4MDAyMTAwLCBOVl9QRklGT19JTlRSX0RNQV9QVVNIRVIpOwotCQkJc3RhdHVzICY9IH5OVl9QRklGT19JTlRSX0RNQV9QVVNIRVI7Ci0JCX0KLQotCQlpZiAoc3RhdHVzICYgTlZfUEZJRk9fSU5UUl9TRU1BUEhPUkUpIHsKLQkJCXVpbnQzMl90IHNlbTsKLQotCQkJc3RhdHVzICY9IH5OVl9QRklGT19JTlRSX1NFTUFQSE9SRTsKLQkJCW52X3dyMzIoZGV2LCBOVjAzX1BGSUZPX0lOVFJfMCwKLQkJCQlOVl9QRklGT19JTlRSX1NFTUFQSE9SRSk7Ci0KLQkJCXNlbSA9IG52X3JkMzIoZGV2LCBOVjEwX1BGSUZPX0NBQ0hFMV9TRU1BUEhPUkUpOwotCQkJbnZfd3IzMihkZXYsIE5WMTBfUEZJRk9fQ0FDSEUxX1NFTUFQSE9SRSwgc2VtIHwgMHgxKTsKLQotCQkJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEUxX0dFVCwgZ2V0ICsgNCk7Ci0JCQludl93cjMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfUFVMTDAsIDEpOwotCQl9Ci0KLQkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNTApIHsKLQkJCWlmIChzdGF0dXMgJiAweDAwMDAwMDEwKSB7Ci0JCQkJbnY1MF9mYl92bV90cmFwKGRldiwgMSwgIlBGSUZPX0JBUl9GQVVMVCIpOwotCQkJCXN0YXR1cyAmPSB+MHgwMDAwMDAxMDsKLQkJCQludl93cjMyKGRldiwgMHgwMDIxMDAsIDB4MDAwMDAwMTApOwotCQkJfQotCQl9Ci0KLQkJaWYgKHN0YXR1cykgewotCQkJaWYgKG5vdXZlYXVfcmF0ZWxpbWl0KCkpCi0JCQkJTlZfSU5GTyhkZXYsICJQRklGT19JTlRSIDB4JTA4eCAtIENoICVkXG4iLAotCQkJCQlzdGF0dXMsIGNoaWQpOwotCQkJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fSU5UUl8wLCBzdGF0dXMpOwotCQkJc3RhdHVzID0gMDsKLQkJfQotCi0JCW52X3dyMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFUywgcmVhc3NpZ24pOwotCX0KLQotCWlmIChzdGF0dXMpIHsKLQkJTlZfSU5GTyhkZXYsICJQRklGTyBzdGlsbCBhbmdyeSBhZnRlciAlZCBzcGlucywgaGFsdFxuIiwgY250KTsKLQkJbnZfd3IzMihkZXYsIDB4MjE0MCwgMCk7Ci0JCW52X3dyMzIoZGV2LCAweDE0MCwgMCk7Ci0JfQotCi0JbnZfd3IzMihkZXYsIE5WMDNfUE1DX0lOVFJfMCwgTlZfUE1DX0lOVFJfMF9QRklGT19QRU5ESU5HKTsKLX0KLQotc3RydWN0IG5vdXZlYXVfYml0ZmllbGRfbmFtZXMgewotCXVpbnQzMl90IG1hc2s7Ci0JY29uc3QgY2hhciAqbmFtZTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm91dmVhdV9iaXRmaWVsZF9uYW1lcyBuc3RhdHVzX25hbWVzW10gPQotewotCXsgTlYwNF9QR1JBUEhfTlNUQVRVU19TVEFURV9JTl9VU0UsICAgICAgICJTVEFURV9JTl9VU0UiIH0sCi0JeyBOVjA0X1BHUkFQSF9OU1RBVFVTX0lOVkFMSURfU1RBVEUsICAgICAgIklOVkFMSURfU1RBVEUiIH0sCi0JeyBOVjA0X1BHUkFQSF9OU1RBVFVTX0JBRF9BUkdVTUVOVCwgICAgICAgIkJBRF9BUkdVTUVOVCIgfSwKLQl7IE5WMDRfUEdSQVBIX05TVEFUVVNfUFJPVEVDVElPTl9GQVVMVCwgICAiUFJPVEVDVElPTl9GQVVMVCIgfQotfTsKLQotc3RhdGljIHN0cnVjdCBub3V2ZWF1X2JpdGZpZWxkX25hbWVzIG5zdGF0dXNfbmFtZXNfbnYxMFtdID0KLXsKLQl7IE5WMTBfUEdSQVBIX05TVEFUVVNfU1RBVEVfSU5fVVNFLCAgICAgICAiU1RBVEVfSU5fVVNFIiB9LAotCXsgTlYxMF9QR1JBUEhfTlNUQVRVU19JTlZBTElEX1NUQVRFLCAgICAgICJJTlZBTElEX1NUQVRFIiB9LAotCXsgTlYxMF9QR1JBUEhfTlNUQVRVU19CQURfQVJHVU1FTlQsICAgICAgICJCQURfQVJHVU1FTlQiIH0sCi0JeyBOVjEwX1BHUkFQSF9OU1RBVFVTX1BST1RFQ1RJT05fRkFVTFQsICAgIlBST1RFQ1RJT05fRkFVTFQiIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm91dmVhdV9iaXRmaWVsZF9uYW1lcyBuc291cmNlX25hbWVzW10gPQotewotCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9OT1RJRklDQVRJT04sICAgICAgICJOT1RJRklDQVRJT04iIH0sCi0JeyBOVjAzX1BHUkFQSF9OU09VUkNFX0RBVEFfRVJST1IsICAgICAgICAgIkRBVEFfRVJST1IiIH0sCi0JeyBOVjAzX1BHUkFQSF9OU09VUkNFX1BST1RFQ1RJT05fRVJST1IsICAgIlBST1RFQ1RJT05fRVJST1IiIH0sCi0JeyBOVjAzX1BHUkFQSF9OU09VUkNFX1JBTkdFX0VYQ0VQVElPTiwgICAgIlJBTkdFX0VYQ0VQVElPTiIgfSwKLQl7IE5WMDNfUEdSQVBIX05TT1VSQ0VfTElNSVRfQ09MT1IsICAgICAgICAiTElNSVRfQ09MT1IiIH0sCi0JeyBOVjAzX1BHUkFQSF9OU09VUkNFX0xJTUlUX1pFVEEsICAgICAgICAgIkxJTUlUX1pFVEEiIH0sCi0JeyBOVjAzX1BHUkFQSF9OU09VUkNFX0lMTEVHQUxfTVRIRCwgICAgICAgIklMTEVHQUxfTVRIRCIgfSwKLQl7IE5WMDNfUEdSQVBIX05TT1VSQ0VfRE1BX1JfUFJPVEVDVElPTiwgICAiRE1BX1JfUFJPVEVDVElPTiIgfSwKLQl7IE5WMDNfUEdSQVBIX05TT1VSQ0VfRE1BX1dfUFJPVEVDVElPTiwgICAiRE1BX1dfUFJPVEVDVElPTiIgfSwKLQl7IE5WMDNfUEdSQVBIX05TT1VSQ0VfRk9STUFUX0VYQ0VQVElPTiwgICAiRk9STUFUX0VYQ0VQVElPTiIgfSwKLQl7IE5WMDNfUEdSQVBIX05TT1VSQ0VfUEFUQ0hfRVhDRVBUSU9OLCAgICAiUEFUQ0hfRVhDRVBUSU9OIiB9LAotCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9TVEFURV9JTlZBTElELCAgICAgICJTVEFURV9JTlZBTElEIiB9LAotCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9ET1VCTEVfTk9USUZZLCAgICAgICJET1VCTEVfTk9USUZZIiB9LAotCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9OT1RJRllfSU5fVVNFLCAgICAgICJOT1RJRllfSU5fVVNFIiB9LAotCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9NRVRIT0RfQ05ULCAgICAgICAgICJNRVRIT0RfQ05UIiB9LAotCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9CRlJfTk9USUZJQ0FUSU9OLCAgICJCRlJfTk9USUZJQ0FUSU9OIiB9LAotCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9ETUFfVlRYX1BST1RFQ1RJT04sICJETUFfVlRYX1BST1RFQ1RJT04iIH0sCi0JeyBOVjAzX1BHUkFQSF9OU09VUkNFX0RNQV9XSURUSF9BLCAgICAgICAgIkRNQV9XSURUSF9BIiB9LAotCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9ETUFfV0lEVEhfQiwgICAgICAgICJETUFfV0lEVEhfQiIgfSwKLX07Ci0KLXN0YXRpYyB2b2lkCi1ub3V2ZWF1X3ByaW50X2JpdGZpZWxkX25hbWVzXyh1aW50MzJfdCB2YWx1ZSwKLQkJCQljb25zdCBzdHJ1Y3Qgbm91dmVhdV9iaXRmaWVsZF9uYW1lcyAqbmFtZWxpc3QsCi0JCQkJY29uc3QgaW50IG5hbWVsaXN0X2xlbikKLXsKLQkvKgotCSAqIENhbGxlciBtdXN0IGhhdmUgYWxyZWFkeSBwcmludGVkIHRoZSBLRVJOXyogbG9nIGxldmVsIGZvciB1cy4KLQkgKiBBbHNvIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGFkZGluZyB0aGUgbmV3bGluZS4KLQkgKi8KLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgbmFtZWxpc3RfbGVuOyArK2kpIHsKLQkJdWludDMyX3QgbWFzayA9IG5hbWVsaXN0W2ldLm1hc2s7Ci0JCWlmICh2YWx1ZSAmIG1hc2spIHsKLQkJCXByaW50aygiICVzIiwgbmFtZWxpc3RbaV0ubmFtZSk7Ci0JCQl2YWx1ZSAmPSB+bWFzazsKLQkJfQotCX0KLQlpZiAodmFsdWUpCi0JCXByaW50aygiICh1bmtub3duIGJpdHMgMHglMDh4KSIsIHZhbHVlKTsKLX0KLSNkZWZpbmUgbm91dmVhdV9wcmludF9iaXRmaWVsZF9uYW1lcyh2YWwsIG5hbWVsaXN0KSBcCi0Jbm91dmVhdV9wcmludF9iaXRmaWVsZF9uYW1lc18oKHZhbCksIChuYW1lbGlzdCksIEFSUkFZX1NJWkUobmFtZWxpc3QpKQotCi1zdHJ1Y3Qgbm91dmVhdV9lbnVtX25hbWVzIHsKLQl1aW50MzJfdCB2YWx1ZTsKLQljb25zdCBjaGFyICpuYW1lOwotfTsKLQotc3RhdGljIHZvaWQKLW5vdXZlYXVfcHJpbnRfZW51bV9uYW1lc18odWludDMyX3QgdmFsdWUsCi0JCQkJY29uc3Qgc3RydWN0IG5vdXZlYXVfZW51bV9uYW1lcyAqbmFtZWxpc3QsCi0JCQkJY29uc3QgaW50IG5hbWVsaXN0X2xlbikKLXsKLQkvKgotCSAqIENhbGxlciBtdXN0IGhhdmUgYWxyZWFkeSBwcmludGVkIHRoZSBLRVJOXyogbG9nIGxldmVsIGZvciB1cy4KLQkgKiBBbHNvIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGFkZGluZyB0aGUgbmV3bGluZS4KLQkgKi8KLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgbmFtZWxpc3RfbGVuOyArK2kpIHsKLQkJaWYgKHZhbHVlID09IG5hbWVsaXN0W2ldLnZhbHVlKSB7Ci0JCQlwcmludGsoIiVzIiwgbmFtZWxpc3RbaV0ubmFtZSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0JcHJpbnRrKCJ1bmtub3duIHZhbHVlIDB4JTA4eCIsIHZhbHVlKTsKLX0KLSNkZWZpbmUgbm91dmVhdV9wcmludF9lbnVtX25hbWVzKHZhbCwgbmFtZWxpc3QpIFwKLQlub3V2ZWF1X3ByaW50X2VudW1fbmFtZXNfKCh2YWwpLCAobmFtZWxpc3QpLCBBUlJBWV9TSVpFKG5hbWVsaXN0KSkKLQotc3RhdGljIGludAotbm91dmVhdV9ncmFwaF9jaGlkX2Zyb21fZ3JjdHgoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVpbnQzMl90IGluc3Q7Ci0JaW50IGk7Ci0KLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzQwKQotCQlyZXR1cm4gZGV2X3ByaXYtPmVuZ2luZS5maWZvLmNoYW5uZWxzOwotCWVsc2UKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzUwKSB7Ci0JCWluc3QgPSAobnZfcmQzMihkZXYsIDB4NDAwMzJjKSAmIDB4ZmZmZmYpIDw8IDQ7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVsczsgaSsrKSB7Ci0JCQlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZGV2X3ByaXYtPmZpZm9zW2ldOwotCi0JCQlpZiAoIWNoYW4gfHwgIWNoYW4tPnJhbWluX2dyY3R4KQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAoaW5zdCA9PSBjaGFuLT5yYW1pbl9ncmN0eC0+cGluc3QpCi0JCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQlpbnN0ID0gKG52X3JkMzIoZGV2LCAweDQwMDMyYykgJiAweGZmZmZmKSA8PCAxMjsKLQotCQlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPmVuZ2luZS5maWZvLmNoYW5uZWxzOyBpKyspIHsKLQkJCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Zmlmb3NbaV07Ci0KLQkJCWlmICghY2hhbiB8fCAhY2hhbi0+cmFtaW4pCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChpbnN0ID09IGNoYW4tPnJhbWluLT52aW5zdCkKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCi0JcmV0dXJuIGk7Ci19Ci0KLXN0YXRpYyBpbnQKLW5vdXZlYXVfZ3JhcGhfdHJhcHBlZF9jaGFubmVsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCAqY2hhbm5lbF9yZXQpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgKmVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lOwotCWludCBjaGFubmVsOwotCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl8xMCkKLQkJY2hhbm5lbCA9IChudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfVFJBUFBFRF9BRERSKSA+PiAyNCkgJiAweGY7Ci0JZWxzZQotCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNDApCi0JCWNoYW5uZWwgPSAobnZfcmQzMihkZXYsIE5WMDRfUEdSQVBIX1RSQVBQRURfQUREUikgPj4gMjApICYgMHgxZjsKLQllbHNlCi0JCWNoYW5uZWwgPSBub3V2ZWF1X2dyYXBoX2NoaWRfZnJvbV9ncmN0eChkZXYpOwotCi0JaWYgKGNoYW5uZWwgPj0gZW5naW5lLT5maWZvLmNoYW5uZWxzIHx8ICFkZXZfcHJpdi0+Zmlmb3NbY2hhbm5lbF0pIHsKLQkJTlZfRVJST1IoZGV2LCAiQUlJSSwgaW52YWxpZC9pbmFjdGl2ZSBjaGFubmVsIGlkICVkXG4iLCBjaGFubmVsKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JKmNoYW5uZWxfcmV0ID0gY2hhbm5lbDsKLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IG5vdXZlYXVfcGdyYXBoX3RyYXAgewotCWludCBjaGFubmVsOwotCWludCBjbGFzczsKLQlpbnQgc3ViYywgbXRoZCwgc2l6ZTsKLQl1aW50MzJfdCBkYXRhLCBkYXRhMjsKLQl1aW50MzJfdCBuc291cmNlLCBuc3RhdHVzOwotfTsKLQotc3RhdGljIHZvaWQKLW5vdXZlYXVfZ3JhcGhfdHJhcF9pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfdHJhcCAqdHJhcCkKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVpbnQzMl90IGFkZHJlc3M7Ci0KLQl0cmFwLT5uc291cmNlID0gdHJhcC0+bnN0YXR1cyA9IDA7Ci0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkgewotCQl0cmFwLT5uc291cmNlID0gbnZfcmQzMihkZXYsIE5WMDNfUEdSQVBIX05TT1VSQ0UpOwotCQl0cmFwLT5uc3RhdHVzID0gbnZfcmQzMihkZXYsIE5WMDNfUEdSQVBIX05TVEFUVVMpOwotCX0KLQotCWlmIChub3V2ZWF1X2dyYXBoX3RyYXBwZWRfY2hhbm5lbChkZXYsICZ0cmFwLT5jaGFubmVsKSkKLQkJdHJhcC0+Y2hhbm5lbCA9IC0xOwotCWFkZHJlc3MgPSBudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfVFJBUFBFRF9BRERSKTsKLQotCXRyYXAtPm10aGQgPSBhZGRyZXNzICYgMHgxRkZDOwotCXRyYXAtPmRhdGEgPSBudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfVFJBUFBFRF9EQVRBKTsKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzEwKSB7Ci0JCXRyYXAtPnN1YmMgID0gKGFkZHJlc3MgPj4gMTMpICYgMHg3OwotCX0gZWxzZSB7Ci0JCXRyYXAtPnN1YmMgID0gKGFkZHJlc3MgPj4gMTYpICYgMHg3OwotCQl0cmFwLT5kYXRhMiA9IG52X3JkMzIoZGV2LCBOVjEwX1BHUkFQSF9UUkFQUEVEX0RBVEFfSElHSCk7Ci0JfQotCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl8xMCkKLQkJdHJhcC0+Y2xhc3MgPSBudl9yZDMyKGRldiwgMHg0MDAxODAgKyB0cmFwLT5zdWJjKjQpICYgMHhGRjsKLQllbHNlIGlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNDApCi0JCXRyYXAtPmNsYXNzID0gbnZfcmQzMihkZXYsIDB4NDAwMTYwICsgdHJhcC0+c3ViYyo0KSAmIDB4RkZGOwotCWVsc2UgaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkKLQkJdHJhcC0+Y2xhc3MgPSBudl9yZDMyKGRldiwgMHg0MDAxNjAgKyB0cmFwLT5zdWJjKjQpICYgMHhGRkZGOwotCWVsc2UKLQkJdHJhcC0+Y2xhc3MgPSBudl9yZDMyKGRldiwgMHg0MDA4MTQpOwotfQotCi1zdGF0aWMgdm9pZAotbm91dmVhdV9ncmFwaF9kdW1wX3RyYXBfaW5mbyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCwKLQkJCSAgICAgc3RydWN0IG5vdXZlYXVfcGdyYXBoX3RyYXAgKnRyYXApCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1aW50MzJfdCBuc291cmNlID0gdHJhcC0+bnNvdXJjZSwgbnN0YXR1cyA9IHRyYXAtPm5zdGF0dXM7Ci0KLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzUwKSB7Ci0JCU5WX0lORk8oZGV2LCAiJXMgLSBuU291cmNlOiIsIGlkKTsKLQkJbm91dmVhdV9wcmludF9iaXRmaWVsZF9uYW1lcyhuc291cmNlLCBuc291cmNlX25hbWVzKTsKLQkJcHJpbnRrKCIsIG5TdGF0dXM6Iik7Ci0JCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfMTApCi0JCQlub3V2ZWF1X3ByaW50X2JpdGZpZWxkX25hbWVzKG5zdGF0dXMsIG5zdGF0dXNfbmFtZXMpOwotCQllbHNlCi0JCQlub3V2ZWF1X3ByaW50X2JpdGZpZWxkX25hbWVzKG5zdGF0dXMsIG5zdGF0dXNfbmFtZXNfbnYxMCk7Ci0JCXByaW50aygiXG4iKTsKLQl9Ci0KLQlOVl9JTkZPKGRldiwgIiVzIC0gQ2ggJWQvJWQgQ2xhc3MgMHglMDR4IE10aGQgMHglMDR4ICIKLQkJCQkJIkRhdGEgMHglMDh4OjB4JTA4eFxuIiwKLQkJCQkJaWQsIHRyYXAtPmNoYW5uZWwsIHRyYXAtPnN1YmMsCi0JCQkJCXRyYXAtPmNsYXNzLCB0cmFwLT5tdGhkLAotCQkJCQl0cmFwLT5kYXRhMiwgdHJhcC0+ZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbnQKLW5vdXZlYXVfcGdyYXBoX2ludHJfc3dtdGhkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfdHJhcCAqdHJhcCkKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKHRyYXAtPmNoYW5uZWwgPCAwIHx8Ci0JICAgIHRyYXAtPmNoYW5uZWwgPj0gZGV2X3ByaXYtPmVuZ2luZS5maWZvLmNoYW5uZWxzIHx8Ci0JICAgICFkZXZfcHJpdi0+Zmlmb3NbdHJhcC0+Y2hhbm5lbF0pCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmV0dXJuIG5vdXZlYXVfY2FsbF9tZXRob2QoZGV2X3ByaXYtPmZpZm9zW3RyYXAtPmNoYW5uZWxdLAotCQkJCSAgIHRyYXAtPmNsYXNzLCB0cmFwLT5tdGhkLCB0cmFwLT5kYXRhKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1ub3V2ZWF1X3BncmFwaF9pbnRyX25vdGlmeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBuc291cmNlKQotewotCXN0cnVjdCBub3V2ZWF1X3BncmFwaF90cmFwIHRyYXA7Ci0JaW50IHVuaGFuZGxlZCA9IDA7Ci0KLQlub3V2ZWF1X2dyYXBoX3RyYXBfaW5mbyhkZXYsICZ0cmFwKTsKLQotCWlmIChuc291cmNlICYgTlYwM19QR1JBUEhfTlNPVVJDRV9JTExFR0FMX01USEQpIHsKLQkJaWYgKG5vdXZlYXVfcGdyYXBoX2ludHJfc3dtdGhkKGRldiwgJnRyYXApKQotCQkJdW5oYW5kbGVkID0gMTsKLQl9IGVsc2UgewotCQl1bmhhbmRsZWQgPSAxOwotCX0KLQotCWlmICh1bmhhbmRsZWQpCi0JCW5vdXZlYXVfZ3JhcGhfZHVtcF90cmFwX2luZm8oZGV2LCAiUEdSQVBIX05PVElGWSIsICZ0cmFwKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLW5vdXZlYXVfcGdyYXBoX2ludHJfZXJyb3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgbnNvdXJjZSkKLXsKLQlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfdHJhcCB0cmFwOwotCWludCB1bmhhbmRsZWQgPSAwOwotCi0Jbm91dmVhdV9ncmFwaF90cmFwX2luZm8oZGV2LCAmdHJhcCk7Ci0JdHJhcC5uc291cmNlID0gbnNvdXJjZTsKLQotCWlmIChuc291cmNlICYgTlYwM19QR1JBUEhfTlNPVVJDRV9JTExFR0FMX01USEQpIHsKLQkJaWYgKG5vdXZlYXVfcGdyYXBoX2ludHJfc3dtdGhkKGRldiwgJnRyYXApKQotCQkJdW5oYW5kbGVkID0gMTsKLQl9IGVsc2UgaWYgKG5zb3VyY2UgJiBOVjAzX1BHUkFQSF9OU09VUkNFX0RNQV9WVFhfUFJPVEVDVElPTikgewotCQl1aW50MzJfdCB2ID0gbnZfcmQzMihkZXYsIDB4NDAyMDAwKTsKLQkJbnZfd3IzMihkZXYsIDB4NDAyMDAwLCB2KTsKLQotCQkvKiBkdW1wIHRoZSBlcnJvciBhbnl3YXkgZm9yIG5vdzogaXQncyB1c2VmdWwgZm9yCi0JCSAgIEdhbGxpdW0gZGV2ZWxvcG1lbnQgKi8KLQkJdW5oYW5kbGVkID0gMTsKLQl9IGVsc2UgewotCQl1bmhhbmRsZWQgPSAxOwotCX0KLQotCWlmICh1bmhhbmRsZWQgJiYgbm91dmVhdV9yYXRlbGltaXQoKSkKLQkJbm91dmVhdV9ncmFwaF9kdW1wX3RyYXBfaW5mbyhkZXYsICJQR1JBUEhfRVJST1IiLCAmdHJhcCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbm91dmVhdV9wZ3JhcGhfaW50cl9jb250ZXh0X3N3aXRjaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfZW5naW5lICplbmdpbmUgPSAmZGV2X3ByaXYtPmVuZ2luZTsKLQl1aW50MzJfdCBjaGlkOwotCi0JY2hpZCA9IGVuZ2luZS0+Zmlmby5jaGFubmVsX2lkKGRldik7Ci0JTlZfREVCVUcoZGV2LCAiUEdSQVBIIGNvbnRleHQgc3dpdGNoIGludGVycnVwdCBjaGFubmVsICV4XG4iLCBjaGlkKTsKLQotCXN3aXRjaCAoZGV2X3ByaXYtPmNhcmRfdHlwZSkgewotCWNhc2UgTlZfMDQ6Ci0JCW52MDRfZ3JhcGhfY29udGV4dF9zd2l0Y2goZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBOVl8xMDoKLQkJbnYxMF9ncmFwaF9jb250ZXh0X3N3aXRjaChkZXYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlOVl9FUlJPUihkZXYsICJDb250ZXh0IHN3aXRjaCBub3QgaW1wbGVtZW50ZWRcbiIpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1ub3V2ZWF1X3BncmFwaF9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXVpbnQzMl90IHN0YXR1czsKLQotCXdoaWxlICgoc3RhdHVzID0gbnZfcmQzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIpKSkgewotCQl1aW50MzJfdCBuc291cmNlID0gbnZfcmQzMihkZXYsIE5WMDNfUEdSQVBIX05TT1VSQ0UpOwotCi0JCWlmIChzdGF0dXMgJiBOVl9QR1JBUEhfSU5UUl9OT1RJRlkpIHsKLQkJCW5vdXZlYXVfcGdyYXBoX2ludHJfbm90aWZ5KGRldiwgbnNvdXJjZSk7Ci0KLQkJCXN0YXR1cyAmPSB+TlZfUEdSQVBIX0lOVFJfTk9USUZZOwotCQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIE5WX1BHUkFQSF9JTlRSX05PVElGWSk7Ci0JCX0KLQotCQlpZiAoc3RhdHVzICYgTlZfUEdSQVBIX0lOVFJfRVJST1IpIHsKLQkJCW5vdXZlYXVfcGdyYXBoX2ludHJfZXJyb3IoZGV2LCBuc291cmNlKTsKLQotCQkJc3RhdHVzICY9IH5OVl9QR1JBUEhfSU5UUl9FUlJPUjsKLQkJCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSLCBOVl9QR1JBUEhfSU5UUl9FUlJPUik7Ci0JCX0KLQotCQlpZiAoc3RhdHVzICYgTlZfUEdSQVBIX0lOVFJfQ09OVEVYVF9TV0lUQ0gpIHsKLQkJCXN0YXR1cyAmPSB+TlZfUEdSQVBIX0lOVFJfQ09OVEVYVF9TV0lUQ0g7Ci0JCQludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwKLQkJCQkgTlZfUEdSQVBIX0lOVFJfQ09OVEVYVF9TV0lUQ0gpOwotCi0JCQlub3V2ZWF1X3BncmFwaF9pbnRyX2NvbnRleHRfc3dpdGNoKGRldik7Ci0JCX0KLQotCQlpZiAoc3RhdHVzKSB7Ci0JCQlOVl9JTkZPKGRldiwgIlVuaGFuZGxlZCBQR1JBUEhfSU5UUiAtIDB4JTA4eFxuIiwgc3RhdHVzKTsKLQkJCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSLCBzdGF0dXMpOwotCQl9Ci0KLQkJaWYgKChudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfRklGTykgJiAoMSA8PCAwKSkgPT0gMCkKLQkJCW52X3dyMzIoZGV2LCBOVjA0X1BHUkFQSF9GSUZPLCAxKTsKLQl9Ci0KLQludl93cjMyKGRldiwgTlYwM19QTUNfSU5UUl8wLCBOVl9QTUNfSU5UUl8wX1BHUkFQSF9QRU5ESU5HKTsKLX0KLQotc3RhdGljIHN0cnVjdCBub3V2ZWF1X2VudW1fbmFtZXMgbnY1MF9tcF9leGVjX2Vycm9yX25hbWVzW10gPQotewotCXsgMywgIlNUQUNLX1VOREVSRkxPVyIgfSwKLQl7IDQsICJRVUFET05fQUNUSVZFIiB9LAotCXsgOCwgIlRJTUVPVVQiIH0sCi0JeyAweDEwLCAiSU5WQUxJRF9PUENPREUiIH0sCi0JeyAweDQwLCAiQlJFQUtQT0lOVCIgfSwKLX07Ci0KLXN0YXRpYyB2b2lkCi1udjUwX3BncmFwaF9tcF90cmFwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCB0cGlkLCBpbnQgZGlzcGxheSkKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVpbnQzMl90IHVuaXRzID0gbnZfcmQzMihkZXYsIDB4MTU0MCk7Ci0JdWludDMyX3QgYWRkciwgbXAxMCwgc3RhdHVzLCBwYywgb3Bsb3csIG9waGlnaDsKLQlpbnQgaTsKLQlpbnQgbXBzID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWlmICghKHVuaXRzICYgMSA8PCAoaSsyNCkpKQotCQkJY29udGludWU7Ci0JCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCi0JCQlhZGRyID0gMHg0MDgyMDAgKyAodHBpZCA8PCAxMikgKyAoaSA8PCA3KTsKLQkJZWxzZQotCQkJYWRkciA9IDB4NDA4MTAwICsgKHRwaWQgPDwgMTEpICsgKGkgPDwgNyk7Ci0JCW1wMTAgPSBudl9yZDMyKGRldiwgYWRkciArIDB4MTApOwotCQlzdGF0dXMgPSBudl9yZDMyKGRldiwgYWRkciArIDB4MTQpOwotCQlpZiAoIXN0YXR1cykKLQkJCWNvbnRpbnVlOwotCQlpZiAoZGlzcGxheSkgewotCQkJbnZfcmQzMihkZXYsIGFkZHIgKyAweDIwKTsKLQkJCXBjID0gbnZfcmQzMihkZXYsIGFkZHIgKyAweDI0KTsKLQkJCW9wbG93ID0gbnZfcmQzMihkZXYsIGFkZHIgKyAweDcwKTsKLQkJCW9waGlnaD0gbnZfcmQzMihkZXYsIGFkZHIgKyAweDc0KTsKLQkJCU5WX0lORk8oZGV2LCAiUEdSQVBIX1RSQVBfTVBfRVhFQyAtICIKLQkJCQkJIlRQICVkIE1QICVkOiAiLCB0cGlkLCBpKTsKLQkJCW5vdXZlYXVfcHJpbnRfZW51bV9uYW1lcyhzdGF0dXMsCi0JCQkJCW52NTBfbXBfZXhlY19lcnJvcl9uYW1lcyk7Ci0JCQlwcmludGsoIiBhdCAlMDZ4IHdhcnAgJWQsIG9wY29kZSAlMDh4ICUwOHhcbiIsCi0JCQkJCXBjJjB4ZmZmZmZmLCBwYyA+PiAyNCwKLQkJCQkJb3Bsb3csIG9waGlnaCk7Ci0JCX0KLQkJbnZfd3IzMihkZXYsIGFkZHIgKyAweDEwLCBtcDEwKTsKLQkJbnZfd3IzMihkZXYsIGFkZHIgKyAweDE0LCAwKTsKLQkJbXBzKys7Ci0JfQotCWlmICghbXBzICYmIGRpc3BsYXkpCi0JCU5WX0lORk8oZGV2LCAiUEdSQVBIX1RSQVBfTVBfRVhFQyAtIFRQICVkOiAiCi0JCQkJIk5vIE1QcyBjbGFpbWluZyBlcnJvcnM/XG4iLCB0cGlkKTsKLX0KLQotc3RhdGljIHZvaWQKLW52NTBfcGdyYXBoX3RwX3RyYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHR5cGUsIHVpbnQzMl90IHVzdGF0dXNfb2xkLAotCQl1aW50MzJfdCB1c3RhdHVzX25ldywgaW50IGRpc3BsYXksIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgdHBzID0gMDsKLQl1aW50MzJfdCB1bml0cyA9IG52X3JkMzIoZGV2LCAweDE1NDApOwotCWludCBpLCByOwotCXVpbnQzMl90IHVzdGF0dXNfYWRkciwgdXN0YXR1czsKLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlpZiAoISh1bml0cyAmICgxIDw8IGkpKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEwKQotCQkJdXN0YXR1c19hZGRyID0gdXN0YXR1c19vbGQgKyAoaSA8PCAxMik7Ci0JCWVsc2UKLQkJCXVzdGF0dXNfYWRkciA9IHVzdGF0dXNfbmV3ICsgKGkgPDwgMTEpOwotCQl1c3RhdHVzID0gbnZfcmQzMihkZXYsIHVzdGF0dXNfYWRkcikgJiAweDdmZmZmZmZmOwotCQlpZiAoIXVzdGF0dXMpCi0JCQljb250aW51ZTsKLQkJdHBzKys7Ci0JCXN3aXRjaCAodHlwZSkgewotCQljYXNlIDY6IC8qIHRleHR1cmUgZXJyb3IuLi4gdW5rbm93biBmb3Igbm93ICovCi0JCQludjUwX2ZiX3ZtX3RyYXAoZGV2LCBkaXNwbGF5LCBuYW1lKTsKLQkJCWlmIChkaXNwbGF5KSB7Ci0JCQkJTlZfRVJST1IoZGV2LCAibWFnaWMgc2V0ICVkOlxuIiwgaSk7Ci0JCQkJZm9yIChyID0gdXN0YXR1c19hZGRyICsgNDsgciA8PSB1c3RhdHVzX2FkZHIgKyAweDEwOyByICs9IDQpCi0JCQkJCU5WX0VSUk9SKGRldiwgIlx0MHglMDh4OiAweCUwOHhcbiIsIHIsCi0JCQkJCQludl9yZDMyKGRldiwgcikpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgNzogLyogTVAgZXJyb3IgKi8KLQkJCWlmICh1c3RhdHVzICYgMHgwMDAxMDAwMCkgewotCQkJCW52NTBfcGdyYXBoX21wX3RyYXAoZGV2LCBpLCBkaXNwbGF5KTsKLQkJCQl1c3RhdHVzICY9IH4weDAwMDEwMDAwOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgODogLyogVFBETUEgZXJyb3IgKi8KLQkJCXsKLQkJCXVpbnQzMl90IGUwYyA9IG52X3JkMzIoZGV2LCB1c3RhdHVzX2FkZHIgKyA0KTsKLQkJCXVpbnQzMl90IGUxMCA9IG52X3JkMzIoZGV2LCB1c3RhdHVzX2FkZHIgKyA4KTsKLQkJCXVpbnQzMl90IGUxNCA9IG52X3JkMzIoZGV2LCB1c3RhdHVzX2FkZHIgKyAweGMpOwotCQkJdWludDMyX3QgZTE4ID0gbnZfcmQzMihkZXYsIHVzdGF0dXNfYWRkciArIDB4MTApOwotCQkJdWludDMyX3QgZTFjID0gbnZfcmQzMihkZXYsIHVzdGF0dXNfYWRkciArIDB4MTQpOwotCQkJdWludDMyX3QgZTIwID0gbnZfcmQzMihkZXYsIHVzdGF0dXNfYWRkciArIDB4MTgpOwotCQkJdWludDMyX3QgZTI0ID0gbnZfcmQzMihkZXYsIHVzdGF0dXNfYWRkciArIDB4MWMpOwotCQkJbnY1MF9mYl92bV90cmFwKGRldiwgZGlzcGxheSwgbmFtZSk7Ci0JCQkvKiAyZCBlbmdpbmUgZGVzdGluYXRpb24gKi8KLQkJCWlmICh1c3RhdHVzICYgMHgwMDAwMDAxMCkgewotCQkJCWlmIChkaXNwbGF5KSB7Ci0JCQkJCU5WX0lORk8oZGV2LCAiUEdSQVBIX1RSQVBfVFBETUFfMkQgLSBUUCAlZCAtIFVua25vd24gZmF1bHQgYXQgYWRkcmVzcyAlMDJ4JTA4eFxuIiwKLQkJCQkJCQlpLCBlMTQsIGUxMCk7Ci0JCQkJCU5WX0lORk8oZGV2LCAiUEdSQVBIX1RSQVBfVFBETUFfMkQgLSBUUCAlZCAtIGUwYzogJTA4eCwgZTE4OiAlMDh4LCBlMWM6ICUwOHgsIGUyMDogJTA4eCwgZTI0OiAlMDh4XG4iLAotCQkJCQkJCWksIGUwYywgZTE4LCBlMWMsIGUyMCwgZTI0KTsKLQkJCQl9Ci0JCQkJdXN0YXR1cyAmPSB+MHgwMDAwMDAxMDsKLQkJCX0KLQkJCS8qIFJlbmRlciB0YXJnZXQgKi8KLQkJCWlmICh1c3RhdHVzICYgMHgwMDAwMDA0MCkgewotCQkJCWlmIChkaXNwbGF5KSB7Ci0JCQkJCU5WX0lORk8oZGV2LCAiUEdSQVBIX1RSQVBfVFBETUFfUlQgLSBUUCAlZCAtIFVua25vd24gZmF1bHQgYXQgYWRkcmVzcyAlMDJ4JTA4eFxuIiwKLQkJCQkJCQlpLCBlMTQsIGUxMCk7Ci0JCQkJCU5WX0lORk8oZGV2LCAiUEdSQVBIX1RSQVBfVFBETUFfUlQgLSBUUCAlZCAtIGUwYzogJTA4eCwgZTE4OiAlMDh4LCBlMWM6ICUwOHgsIGUyMDogJTA4eCwgZTI0OiAlMDh4XG4iLAotCQkJCQkJCWksIGUwYywgZTE4LCBlMWMsIGUyMCwgZTI0KTsKLQkJCQl9Ci0JCQkJdXN0YXR1cyAmPSB+MHgwMDAwMDA0MDsKLQkJCX0KLQkJCS8qIENVREEgbWVtb3J5OiBsW10sIGdbXSBvciBzdGFjay4gKi8KLQkJCWlmICh1c3RhdHVzICYgMHgwMDAwMDA4MCkgewotCQkJCWlmIChkaXNwbGF5KSB7Ci0JCQkJCWlmIChlMTggJiAweDgwMDAwMDAwKSB7Ci0JCQkJCQkvKiBnW10gcmVhZCBmYXVsdD8gKi8KLQkJCQkJCU5WX0lORk8oZGV2LCAiUEdSQVBIX1RSQVBfVFBETUEgLSBUUCAlZCAtIEdsb2JhbCByZWFkIGZhdWx0IGF0IGFkZHJlc3MgJTAyeCUwOHhcbiIsCi0JCQkJCQkJCWksIGUxNCwgZTEwIHwgKChlMTggPj4gMjQpICYgMHgxZikpOwotCQkJCQkJZTE4ICY9IH4weDFmMDAwMDAwOwotCQkJCQl9IGVsc2UgaWYgKGUxOCAmIDB4YykgewotCQkJCQkJLyogZ1tdIHdyaXRlIGZhdWx0PyAqLwotCQkJCQkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9UUERNQSAtIFRQICVkIC0gR2xvYmFsIHdyaXRlIGZhdWx0IGF0IGFkZHJlc3MgJTAyeCUwOHhcbiIsCi0JCQkJCQkJCWksIGUxNCwgZTEwIHwgKChlMTggPj4gNykgJiAweDFmKSk7Ci0JCQkJCQllMTggJj0gfjB4MDAwMDBmODA7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlOVl9JTkZPKGRldiwgIlBHUkFQSF9UUkFQX1RQRE1BIC0gVFAgJWQgLSBVbmtub3duIENVREEgZmF1bHQgYXQgYWRkcmVzcyAlMDJ4JTA4eFxuIiwKLQkJCQkJCQkJaSwgZTE0LCBlMTApOwotCQkJCQl9Ci0JCQkJCU5WX0lORk8oZGV2LCAiUEdSQVBIX1RSQVBfVFBETUEgLSBUUCAlZCAtIGUwYzogJTA4eCwgZTE4OiAlMDh4LCBlMWM6ICUwOHgsIGUyMDogJTA4eCwgZTI0OiAlMDh4XG4iLAotCQkJCQkJCWksIGUwYywgZTE4LCBlMWMsIGUyMCwgZTI0KTsKLQkJCQl9Ci0JCQkJdXN0YXR1cyAmPSB+MHgwMDAwMDA4MDsKLQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCWlmICh1c3RhdHVzKSB7Ci0JCQlpZiAoZGlzcGxheSkKLQkJCQlOVl9JTkZPKGRldiwgIiVzIC0gVFAlZDogVW5oYW5kbGVkIHVzdGF0dXMgMHglMDh4XG4iLCBuYW1lLCBpLCB1c3RhdHVzKTsKLQkJfQotCQludl93cjMyKGRldiwgdXN0YXR1c19hZGRyLCAweGMwMDAwMDAwKTsKLQl9Ci0KLQlpZiAoIXRwcyAmJiBkaXNwbGF5KQotCQlOVl9JTkZPKGRldiwgIiVzIC0gTm8gVFBzIGNsYWltaW5nIGVycm9ycz9cbiIsIG5hbWUpOwotfQotCi1zdGF0aWMgdm9pZAotbnY1MF9wZ3JhcGhfdHJhcF9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG5vdXZlYXVfcGdyYXBoX3RyYXAgdHJhcDsKLQl1aW50MzJfdCBzdGF0dXMgPSBudl9yZDMyKGRldiwgMHg0MDAxMDgpOwotCXVpbnQzMl90IHVzdGF0dXM7Ci0JaW50IGRpc3BsYXkgPSBub3V2ZWF1X3JhdGVsaW1pdCgpOwotCi0KLQlpZiAoIXN0YXR1cyAmJiBkaXNwbGF5KSB7Ci0JCW5vdXZlYXVfZ3JhcGhfdHJhcF9pbmZvKGRldiwgJnRyYXApOwotCQlub3V2ZWF1X2dyYXBoX2R1bXBfdHJhcF9pbmZvKGRldiwgIlBHUkFQSF9UUkFQIiwgJnRyYXApOwotCQlOVl9JTkZPKGRldiwgIlBHUkFQSF9UUkFQIC0gbm8gdW5pdHMgcmVwb3J0aW5nIHRyYXBzP1xuIik7Ci0JfQotCi0JLyogRElTUEFUQ0g6IFJlbGF5cyBjb21tYW5kcyB0byBvdGhlciB1bml0cyBhbmQgaGFuZGxlcyBOT1RJRlksCi0JICogQ09ORCwgUVVFUlkuIElmIHlvdSBnZXQgYSB0cmFwIGZyb20gaXQsIHRoZSBjb21tYW5kIGlzIHN0aWxsIHN0dWNrCi0JICogaW4gRElTUEFUQ0ggYW5kIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBhYm91dCBpdC4gKi8KLQlpZiAoc3RhdHVzICYgMHgwMDEpIHsKLQkJdXN0YXR1cyA9IG52X3JkMzIoZGV2LCAweDQwMDgwNCkgJiAweDdmZmZmZmZmOwotCQlpZiAoIXVzdGF0dXMgJiYgZGlzcGxheSkgewotCQkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9ESVNQQVRDSCAtIG5vIHVzdGF0dXM/XG4iKTsKLQkJfQotCi0JCS8qIEtub3duIHRvIGJlIHRyaWdnZXJlZCBieSBzY3Jld2VkIHVwIE5PVElGWSBhbmQgQ09ORC4uLiAqLwotCQlpZiAodXN0YXR1cyAmIDB4MDAwMDAwMDEpIHsKLQkJCW52NTBfZmJfdm1fdHJhcChkZXYsIGRpc3BsYXksICJQR1JBUEhfVFJBUF9ESVNQQVRDSF9GQVVMVCIpOwotCQkJbnZfd3IzMihkZXYsIDB4NDAwNTAwLCAwKTsKLQkJCWlmIChudl9yZDMyKGRldiwgMHg0MDA4MDgpICYgMHg4MDAwMDAwMCkgewotCQkJCWlmIChkaXNwbGF5KSB7Ci0JCQkJCWlmIChub3V2ZWF1X2dyYXBoX3RyYXBwZWRfY2hhbm5lbChkZXYsICZ0cmFwLmNoYW5uZWwpKQotCQkJCQkJdHJhcC5jaGFubmVsID0gLTE7Ci0JCQkJCXRyYXAuY2xhc3MgPSBudl9yZDMyKGRldiwgMHg0MDA4MTQpOwotCQkJCQl0cmFwLm10aGQgPSBudl9yZDMyKGRldiwgMHg0MDA4MDgpICYgMHgxZmZjOwotCQkJCQl0cmFwLnN1YmMgPSAobnZfcmQzMihkZXYsIDB4NDAwODA4KSA+PiAxNikgJiAweDc7Ci0JCQkJCXRyYXAuZGF0YSA9IG52X3JkMzIoZGV2LCAweDQwMDgwYyk7Ci0JCQkJCXRyYXAuZGF0YTIgPSBudl9yZDMyKGRldiwgMHg0MDA4MTApOwotCQkJCQlub3V2ZWF1X2dyYXBoX2R1bXBfdHJhcF9pbmZvKGRldiwKLQkJCQkJCQkiUEdSQVBIX1RSQVBfRElTUEFUQ0hfRkFVTFQiLCAmdHJhcCk7Ci0JCQkJCU5WX0lORk8oZGV2LCAiUEdSQVBIX1RSQVBfRElTUEFUQ0hfRkFVTFQgLSA0MDA4MDg6ICUwOHhcbiIsIG52X3JkMzIoZGV2LCAweDQwMDgwOCkpOwotCQkJCQlOVl9JTkZPKGRldiwgIlBHUkFQSF9UUkFQX0RJU1BBVENIX0ZBVUxUIC0gNDAwODQ4OiAlMDh4XG4iLCBudl9yZDMyKGRldiwgMHg0MDA4NDgpKTsKLQkJCQl9Ci0JCQkJbnZfd3IzMihkZXYsIDB4NDAwODA4LCAwKTsKLQkJCX0gZWxzZSBpZiAoZGlzcGxheSkgewotCQkJCU5WX0lORk8oZGV2LCAiUEdSQVBIX1RSQVBfRElTUEFUQ0hfRkFVTFQgLSBObyBzdHVjayBjb21tYW5kP1xuIik7Ci0JCQl9Ci0JCQludl93cjMyKGRldiwgMHg0MDA4ZTgsIG52X3JkMzIoZGV2LCAweDQwMDhlOCkgJiAzKTsKLQkJCW52X3dyMzIoZGV2LCAweDQwMDg0OCwgMCk7Ci0JCQl1c3RhdHVzICY9IH4weDAwMDAwMDAxOwotCQl9Ci0JCWlmICh1c3RhdHVzICYgMHgwMDAwMDAwMikgewotCQkJbnY1MF9mYl92bV90cmFwKGRldiwgZGlzcGxheSwgIlBHUkFQSF9UUkFQX0RJU1BBVENIX1FVRVJZIik7Ci0JCQludl93cjMyKGRldiwgMHg0MDA1MDAsIDApOwotCQkJaWYgKG52X3JkMzIoZGV2LCAweDQwMDg0YykgJiAweDgwMDAwMDAwKSB7Ci0JCQkJaWYgKGRpc3BsYXkpIHsKLQkJCQkJaWYgKG5vdXZlYXVfZ3JhcGhfdHJhcHBlZF9jaGFubmVsKGRldiwgJnRyYXAuY2hhbm5lbCkpCi0JCQkJCQl0cmFwLmNoYW5uZWwgPSAtMTsKLQkJCQkJdHJhcC5jbGFzcyA9IG52X3JkMzIoZGV2LCAweDQwMDgxNCk7Ci0JCQkJCXRyYXAubXRoZCA9IG52X3JkMzIoZGV2LCAweDQwMDg0YykgJiAweDFmZmM7Ci0JCQkJCXRyYXAuc3ViYyA9IChudl9yZDMyKGRldiwgMHg0MDA4NGMpID4+IDE2KSAmIDB4NzsKLQkJCQkJdHJhcC5kYXRhID0gbnZfcmQzMihkZXYsIDB4NDAwODVjKTsKLQkJCQkJdHJhcC5kYXRhMiA9IDA7Ci0JCQkJCW5vdXZlYXVfZ3JhcGhfZHVtcF90cmFwX2luZm8oZGV2LAotCQkJCQkJCSJQR1JBUEhfVFJBUF9ESVNQQVRDSF9RVUVSWSIsICZ0cmFwKTsKLQkJCQkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9ESVNQQVRDSF9RVUVSWSAtIDQwMDg0YzogJTA4eFxuIiwgbnZfcmQzMihkZXYsIDB4NDAwODRjKSk7Ci0JCQkJfQotCQkJCW52X3dyMzIoZGV2LCAweDQwMDg0YywgMCk7Ci0JCQl9IGVsc2UgaWYgKGRpc3BsYXkpIHsKLQkJCQlOVl9JTkZPKGRldiwgIlBHUkFQSF9UUkFQX0RJU1BBVENIX1FVRVJZIC0gTm8gc3R1Y2sgY29tbWFuZD9cbiIpOwotCQkJfQotCQkJdXN0YXR1cyAmPSB+MHgwMDAwMDAwMjsKLQkJfQotCQlpZiAodXN0YXR1cyAmJiBkaXNwbGF5KQotCQkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9ESVNQQVRDSCAtIFVuaGFuZGxlZCB1c3RhdHVzIDB4JTA4eFxuIiwgdXN0YXR1cyk7Ci0JCW52X3dyMzIoZGV2LCAweDQwMDgwNCwgMHhjMDAwMDAwMCk7Ci0JCW52X3dyMzIoZGV2LCAweDQwMDEwOCwgMHgwMDEpOwotCQlzdGF0dXMgJj0gfjB4MDAxOwotCX0KLQotCS8qIFRSQVBzIG90aGVyIHRoYW4gZGlzcGF0Y2ggdXNlIHRoZSAibm9ybWFsIiB0cmFwIHJlZ3MuICovCi0JaWYgKHN0YXR1cyAmJiBkaXNwbGF5KSB7Ci0JCW5vdXZlYXVfZ3JhcGhfdHJhcF9pbmZvKGRldiwgJnRyYXApOwotCQlub3V2ZWF1X2dyYXBoX2R1bXBfdHJhcF9pbmZvKGRldiwKLQkJCQkiUEdSQVBIX1RSQVAiLCAmdHJhcCk7Ci0JfQotCi0JLyogTTJNRjogTWVtb3J5IHRvIG1lbW9yeSBjb3B5IGVuZ2luZS4gKi8KLQlpZiAoc3RhdHVzICYgMHgwMDIpIHsKLQkJdXN0YXR1cyA9IG52X3JkMzIoZGV2LCAweDQwNjgwMCkgJiAweDdmZmZmZmZmOwotCQlpZiAoIXVzdGF0dXMgJiYgZGlzcGxheSkgewotCQkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9NMk1GIC0gbm8gdXN0YXR1cz9cbiIpOwotCQl9Ci0JCWlmICh1c3RhdHVzICYgMHgwMDAwMDAwMSkgewotCQkJbnY1MF9mYl92bV90cmFwKGRldiwgZGlzcGxheSwgIlBHUkFQSF9UUkFQX00yTUZfTk9USUZZIik7Ci0JCQl1c3RhdHVzICY9IH4weDAwMDAwMDAxOwotCQl9Ci0JCWlmICh1c3RhdHVzICYgMHgwMDAwMDAwMikgewotCQkJbnY1MF9mYl92bV90cmFwKGRldiwgZGlzcGxheSwgIlBHUkFQSF9UUkFQX00yTUZfSU4iKTsKLQkJCXVzdGF0dXMgJj0gfjB4MDAwMDAwMDI7Ci0JCX0KLQkJaWYgKHVzdGF0dXMgJiAweDAwMDAwMDA0KSB7Ci0JCQludjUwX2ZiX3ZtX3RyYXAoZGV2LCBkaXNwbGF5LCAiUEdSQVBIX1RSQVBfTTJNRl9PVVQiKTsKLQkJCXVzdGF0dXMgJj0gfjB4MDAwMDAwMDQ7Ci0JCX0KLQkJTlZfSU5GTyAoZGV2LCAiUEdSQVBIX1RSQVBfTTJNRiAtICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCi0JCQkJbnZfcmQzMihkZXYsIDB4NDA2ODA0KSwKLQkJCQludl9yZDMyKGRldiwgMHg0MDY4MDgpLAotCQkJCW52X3JkMzIoZGV2LCAweDQwNjgwYyksCi0JCQkJbnZfcmQzMihkZXYsIDB4NDA2ODEwKSk7Ci0JCWlmICh1c3RhdHVzICYmIGRpc3BsYXkpCi0JCQlOVl9JTkZPKGRldiwgIlBHUkFQSF9UUkFQX00yTUYgLSBVbmhhbmRsZWQgdXN0YXR1cyAweCUwOHhcbiIsIHVzdGF0dXMpOwotCQkvKiBObyBzYW5lIHdheSBmb3VuZCB5ZXQgLS0ganVzdCByZXNldCB0aGUgYnVnZ2VyLiAqLwotCQludl93cjMyKGRldiwgMHg0MDAwNDAsIDIpOwotCQludl93cjMyKGRldiwgMHg0MDAwNDAsIDApOwotCQludl93cjMyKGRldiwgMHg0MDY4MDAsIDB4YzAwMDAwMDApOwotCQludl93cjMyKGRldiwgMHg0MDAxMDgsIDB4MDAyKTsKLQkJc3RhdHVzICY9IH4weDAwMjsKLQl9Ci0KLQkvKiBWRkVUQ0g6IEZldGNoZXMgZGF0YSBmcm9tIHZlcnRleCBidWZmZXJzLiAqLwotCWlmIChzdGF0dXMgJiAweDAwNCkgewotCQl1c3RhdHVzID0gbnZfcmQzMihkZXYsIDB4NDAwYzA0KSAmIDB4N2ZmZmZmZmY7Ci0JCWlmICghdXN0YXR1cyAmJiBkaXNwbGF5KSB7Ci0JCQlOVl9JTkZPKGRldiwgIlBHUkFQSF9UUkFQX1ZGRVRDSCAtIG5vIHVzdGF0dXM/XG4iKTsKLQkJfQotCQlpZiAodXN0YXR1cyAmIDB4MDAwMDAwMDEpIHsKLQkJCW52NTBfZmJfdm1fdHJhcChkZXYsIGRpc3BsYXksICJQR1JBUEhfVFJBUF9WRkVUQ0hfRkFVTFQiKTsKLQkJCU5WX0lORk8gKGRldiwgIlBHUkFQSF9UUkFQX1ZGRVRDSF9GQVVMVCAtICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCi0JCQkJCW52X3JkMzIoZGV2LCAweDQwMGMwMCksCi0JCQkJCW52X3JkMzIoZGV2LCAweDQwMGMwOCksCi0JCQkJCW52X3JkMzIoZGV2LCAweDQwMGMwYyksCi0JCQkJCW52X3JkMzIoZGV2LCAweDQwMGMxMCkpOwotCQkJdXN0YXR1cyAmPSB+MHgwMDAwMDAwMTsKLQkJfQotCQlpZiAodXN0YXR1cyAmJiBkaXNwbGF5KQotCQkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9WRkVUQ0ggLSBVbmhhbmRsZWQgdXN0YXR1cyAweCUwOHhcbiIsIHVzdGF0dXMpOwotCQludl93cjMyKGRldiwgMHg0MDBjMDQsIDB4YzAwMDAwMDApOwotCQludl93cjMyKGRldiwgMHg0MDAxMDgsIDB4MDA0KTsKLQkJc3RhdHVzICY9IH4weDAwNDsKLQl9Ci0KLQkvKiBTVFJNT1VUOiBEaXJlY3RYIHN0cmVhbW91dCAvIE9wZW5HTCB0cmFuc2Zvcm0gZmVlZGJhY2suICovCi0JaWYgKHN0YXR1cyAmIDB4MDA4KSB7Ci0JCXVzdGF0dXMgPSBudl9yZDMyKGRldiwgMHg0MDE4MDApICYgMHg3ZmZmZmZmZjsKLQkJaWYgKCF1c3RhdHVzICYmIGRpc3BsYXkpIHsKLQkJCU5WX0lORk8oZGV2LCAiUEdSQVBIX1RSQVBfU1RSTU9VVCAtIG5vIHVzdGF0dXM/XG4iKTsKLQkJfQotCQlpZiAodXN0YXR1cyAmIDB4MDAwMDAwMDEpIHsKLQkJCW52NTBfZmJfdm1fdHJhcChkZXYsIGRpc3BsYXksICJQR1JBUEhfVFJBUF9TVFJNT1VUX0ZBVUxUIik7Ci0JCQlOVl9JTkZPIChkZXYsICJQR1JBUEhfVFJBUF9TVFJNT1VUX0ZBVUxUIC0gJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCQkJbnZfcmQzMihkZXYsIDB4NDAxODA0KSwKLQkJCQkJbnZfcmQzMihkZXYsIDB4NDAxODA4KSwKLQkJCQkJbnZfcmQzMihkZXYsIDB4NDAxODBjKSwKLQkJCQkJbnZfcmQzMihkZXYsIDB4NDAxODEwKSk7Ci0JCQl1c3RhdHVzICY9IH4weDAwMDAwMDAxOwotCQl9Ci0JCWlmICh1c3RhdHVzICYmIGRpc3BsYXkpCi0JCQlOVl9JTkZPKGRldiwgIlBHUkFQSF9UUkFQX1NUUk1PVVQgLSBVbmhhbmRsZWQgdXN0YXR1cyAweCUwOHhcbiIsIHVzdGF0dXMpOwotCQkvKiBObyBzYW5lIHdheSBmb3VuZCB5ZXQgLS0ganVzdCByZXNldCB0aGUgYnVnZ2VyLiAqLwotCQludl93cjMyKGRldiwgMHg0MDAwNDAsIDB4ODApOwotCQludl93cjMyKGRldiwgMHg0MDAwNDAsIDApOwotCQludl93cjMyKGRldiwgMHg0MDE4MDAsIDB4YzAwMDAwMDApOwotCQludl93cjMyKGRldiwgMHg0MDAxMDgsIDB4MDA4KTsKLQkJc3RhdHVzICY9IH4weDAwODsKLQl9Ci0KLQkvKiBDQ0FDSEU6IEhhbmRsZXMgY29kZSBhbmQgY1tdIGNhY2hlcyBhbmQgZmlsbHMgdGhlbS4gKi8KLQlpZiAoc3RhdHVzICYgMHgwMTApIHsKLQkJdXN0YXR1cyA9IG52X3JkMzIoZGV2LCAweDQwNTAxOCkgJiAweDdmZmZmZmZmOwotCQlpZiAoIXVzdGF0dXMgJiYgZGlzcGxheSkgewotCQkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9DQ0FDSEUgLSBubyB1c3RhdHVzP1xuIik7Ci0JCX0KLQkJaWYgKHVzdGF0dXMgJiAweDAwMDAwMDAxKSB7Ci0JCQludjUwX2ZiX3ZtX3RyYXAoZGV2LCBkaXNwbGF5LCAiUEdSQVBIX1RSQVBfQ0NBQ0hFX0ZBVUxUIik7Ci0JCQlOVl9JTkZPIChkZXYsICJQR1JBUEhfVFJBUF9DQ0FDSEVfRkFVTFQgLSAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAotCQkJCQludl9yZDMyKGRldiwgMHg0MDU4MDApLAotCQkJCQludl9yZDMyKGRldiwgMHg0MDU4MDQpLAotCQkJCQludl9yZDMyKGRldiwgMHg0MDU4MDgpLAotCQkJCQludl9yZDMyKGRldiwgMHg0MDU4MGMpLAotCQkJCQludl9yZDMyKGRldiwgMHg0MDU4MTApLAotCQkJCQludl9yZDMyKGRldiwgMHg0MDU4MTQpLAotCQkJCQludl9yZDMyKGRldiwgMHg0MDU4MWMpKTsKLQkJCXVzdGF0dXMgJj0gfjB4MDAwMDAwMDE7Ci0JCX0KLQkJaWYgKHVzdGF0dXMgJiYgZGlzcGxheSkKLQkJCU5WX0lORk8oZGV2LCAiUEdSQVBIX1RSQVBfQ0NBQ0hFIC0gVW5oYW5kbGVkIHVzdGF0dXMgMHglMDh4XG4iLCB1c3RhdHVzKTsKLQkJbnZfd3IzMihkZXYsIDB4NDA1MDE4LCAweGMwMDAwMDAwKTsKLQkJbnZfd3IzMihkZXYsIDB4NDAwMTA4LCAweDAxMCk7Ci0JCXN0YXR1cyAmPSB+MHgwMTA7Ci0JfQotCi0JLyogVW5rbm93biwgbm90IHNlZW4geWV0Li4uIDB4NDAyMDAwIGlzIHRoZSBvbmx5IHRyYXAgc3RhdHVzIHJlZwotCSAqIHJlbWFpbmluZywgc28gdHJ5IHRvIGhhbmRsZSBpdCBhbnl3YXkuIFBlcmhhcHMgcmVsYXRlZCB0byB0aGF0Ci0JICogdW5rbm93biBETUEgc2xvdCBvbiB0ZXNsYT8gKi8KLQlpZiAoc3RhdHVzICYgMHgyMCkgewotCQludjUwX2ZiX3ZtX3RyYXAoZGV2LCBkaXNwbGF5LCAiUEdSQVBIX1RSQVBfVU5LQzA0Iik7Ci0JCXVzdGF0dXMgPSBudl9yZDMyKGRldiwgMHg0MDIwMDApICYgMHg3ZmZmZmZmZjsKLQkJaWYgKGRpc3BsYXkpCi0JCQlOVl9JTkZPKGRldiwgIlBHUkFQSF9UUkFQX1VOS0MwNCAtIFVuaGFuZGxlZCB1c3RhdHVzIDB4JTA4eFxuIiwgdXN0YXR1cyk7Ci0JCW52X3dyMzIoZGV2LCAweDQwMjAwMCwgMHhjMDAwMDAwMCk7Ci0JCS8qIG5vIHN0YXR1cyBtb2RpZmljdGlvbiBvbiBwdXJwb3NlICovCi0JfQotCi0JLyogVEVYVFVSRTogQ1VEQSB0ZXh0dXJpbmcgdW5pdHMgKi8KLQlpZiAoc3RhdHVzICYgMHgwNDApIHsKLQkJbnY1MF9wZ3JhcGhfdHBfdHJhcCAoZGV2LCA2LCAweDQwODkwMCwgMHg0MDg2MDAsIGRpc3BsYXksCi0JCQkJIlBHUkFQSF9UUkFQX1RFWFRVUkUiKTsKLQkJbnZfd3IzMihkZXYsIDB4NDAwMTA4LCAweDA0MCk7Ci0JCXN0YXR1cyAmPSB+MHgwNDA7Ci0JfQotCi0JLyogTVA6IENVREEgZXhlY3V0aW9uIGVuZ2luZXMuICovCi0JaWYgKHN0YXR1cyAmIDB4MDgwKSB7Ci0JCW52NTBfcGdyYXBoX3RwX3RyYXAgKGRldiwgNywgMHg0MDgzMTQsIDB4NDA4MzFjLCBkaXNwbGF5LAotCQkJCSJQR1JBUEhfVFJBUF9NUCIpOwotCQludl93cjMyKGRldiwgMHg0MDAxMDgsIDB4MDgwKTsKLQkJc3RhdHVzICY9IH4weDA4MDsKLQl9Ci0KLQkvKiBUUERNQTogIEhhbmRsZXMgVFAtaW5pdGlhdGVkIHVuY2FjaGVkIG1lbW9yeSBhY2Nlc3NlczoKLQkgKiBsW10sIGdbXSwgc3RhY2ssIDJkIHN1cmZhY2VzLCByZW5kZXIgdGFyZ2V0cy4gKi8KLQlpZiAoc3RhdHVzICYgMHgxMDApIHsKLQkJbnY1MF9wZ3JhcGhfdHBfdHJhcCAoZGV2LCA4LCAweDQwOGUwOCwgMHg0MDg3MDgsIGRpc3BsYXksCi0JCQkJIlBHUkFQSF9UUkFQX1RQRE1BIik7Ci0JCW52X3dyMzIoZGV2LCAweDQwMDEwOCwgMHgxMDApOwotCQlzdGF0dXMgJj0gfjB4MTAwOwotCX0KLQotCWlmIChzdGF0dXMpIHsKLQkJaWYgKGRpc3BsYXkpCi0JCQlOVl9JTkZPKGRldiwgIlBHUkFQSF9UUkFQIC0gVW5rbm93biB0cmFwIDB4JTA4eFxuIiwKLQkJCQlzdGF0dXMpOwotCQludl93cjMyKGRldiwgMHg0MDAxMDgsIHN0YXR1cyk7Ci0JfQotfQotCi0vKiBUaGVyZSBtdXN0IGJlIGEgKmxvdCogb2YgdGhlc2UuIFdpbGwgdGFrZSBzb21lIHRpbWUgdG8gZ2F0aGVyIHRoZW0gdXAuICovCi1zdGF0aWMgc3RydWN0IG5vdXZlYXVfZW51bV9uYW1lcyBudjUwX2RhdGFfZXJyb3JfbmFtZXNbXSA9Ci17Ci0JeyA0LAkiSU5WQUxJRF9WQUxVRSIgfSwKLQl7IDUsCSJJTlZBTElEX0VOVU0iIH0sCi0JeyA4LAkiSU5WQUxJRF9PQkpFQ1QiIH0sCi0JeyAweGMsCSJJTlZBTElEX0JJVEZJRUxEIiB9LAotCXsgMHgyOCwJIk1QX05PX1JFR19TUEFDRSIgfSwKLQl7IDB4MmIsCSJNUF9CTE9DS19TSVpFX01JU01BVENIIiB9LAotfTsKLQotc3RhdGljIHZvaWQKLW52NTBfcGdyYXBoX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG5vdXZlYXVfcGdyYXBoX3RyYXAgdHJhcDsKLQlpbnQgdW5oYW5kbGVkID0gMDsKLQl1aW50MzJfdCBzdGF0dXM7Ci0KLQl3aGlsZSAoKHN0YXR1cyA9IG52X3JkMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSKSkpIHsKLQkJLyogTk9USUZZOiBZb3UndmUgc2V0IGEgTk9USUZZIGFuIGEgY29tbWFuZCBhbmQgaXQncyBkb25lLiAqLwotCQlpZiAoc3RhdHVzICYgMHgwMDAwMDAwMSkgewotCQkJbm91dmVhdV9ncmFwaF90cmFwX2luZm8oZGV2LCAmdHJhcCk7Ci0JCQlpZiAobm91dmVhdV9yYXRlbGltaXQoKSkKLQkJCQlub3V2ZWF1X2dyYXBoX2R1bXBfdHJhcF9pbmZvKGRldiwKLQkJCQkJCSJQR1JBUEhfTk9USUZZIiwgJnRyYXApOwotCQkJc3RhdHVzICY9IH4weDAwMDAwMDAxOwotCQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIDB4MDAwMDAwMDEpOwotCQl9Ci0KLQkJLyogQ09NUFVURV9RVUVSWTogUHVycG9zZSBhbmQgZXhhY3QgY2F1c2UgdW5rbm93biwgaGFwcGVucwotCQkgKiB3aGVuIHlvdSB3cml0ZSAweDIwMCB0byAweDUwYzAgbWV0aG9kIDB4MzFjLiAqLwotCQlpZiAoc3RhdHVzICYgMHgwMDAwMDAwMikgewotCQkJbm91dmVhdV9ncmFwaF90cmFwX2luZm8oZGV2LCAmdHJhcCk7Ci0JCQlpZiAobm91dmVhdV9yYXRlbGltaXQoKSkKLQkJCQlub3V2ZWF1X2dyYXBoX2R1bXBfdHJhcF9pbmZvKGRldiwKLQkJCQkJCSJQR1JBUEhfQ09NUFVURV9RVUVSWSIsICZ0cmFwKTsKLQkJCXN0YXR1cyAmPSB+MHgwMDAwMDAwMjsKLQkJCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSLCAweDAwMDAwMDAyKTsKLQkJfQotCi0JCS8qIFVua25vd24sIG5ldmVyIHNlZW46IDB4NCAqLwotCi0JCS8qIElMTEVHQUxfTVRIRDogWW91IHVzZWQgYSB3cm9uZyBtZXRob2QgZm9yIHRoaXMgY2xhc3MuICovCi0JCWlmIChzdGF0dXMgJiAweDAwMDAwMDEwKSB7Ci0JCQlub3V2ZWF1X2dyYXBoX3RyYXBfaW5mbyhkZXYsICZ0cmFwKTsKLQkJCWlmIChub3V2ZWF1X3BncmFwaF9pbnRyX3N3bXRoZChkZXYsICZ0cmFwKSkKLQkJCQl1bmhhbmRsZWQgPSAxOwotCQkJaWYgKHVuaGFuZGxlZCAmJiBub3V2ZWF1X3JhdGVsaW1pdCgpKQotCQkJCW5vdXZlYXVfZ3JhcGhfZHVtcF90cmFwX2luZm8oZGV2LAotCQkJCQkJIlBHUkFQSF9JTExFR0FMX01USEQiLCAmdHJhcCk7Ci0JCQlzdGF0dXMgJj0gfjB4MDAwMDAwMTA7Ci0JCQludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwgMHgwMDAwMDAxMCk7Ci0JCX0KLQotCQkvKiBJTExFR0FMX0NMQVNTOiBZb3UgdXNlZCBhIHdyb25nIGNsYXNzLiAqLwotCQlpZiAoc3RhdHVzICYgMHgwMDAwMDAyMCkgewotCQkJbm91dmVhdV9ncmFwaF90cmFwX2luZm8oZGV2LCAmdHJhcCk7Ci0JCQlpZiAobm91dmVhdV9yYXRlbGltaXQoKSkKLQkJCQlub3V2ZWF1X2dyYXBoX2R1bXBfdHJhcF9pbmZvKGRldiwKLQkJCQkJCSJQR1JBUEhfSUxMRUdBTF9DTEFTUyIsICZ0cmFwKTsKLQkJCXN0YXR1cyAmPSB+MHgwMDAwMDAyMDsKLQkJCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSLCAweDAwMDAwMDIwKTsKLQkJfQotCi0JCS8qIERPVUJMRV9OT1RJRlk6IFlvdSB0cmllZCB0byBzZXQgYSBOT1RJRlkgb24gYW5vdGhlciBOT1RJRlkuICovCi0JCWlmIChzdGF0dXMgJiAweDAwMDAwMDQwKSB7Ci0JCQlub3V2ZWF1X2dyYXBoX3RyYXBfaW5mbyhkZXYsICZ0cmFwKTsKLQkJCWlmIChub3V2ZWF1X3JhdGVsaW1pdCgpKQotCQkJCW5vdXZlYXVfZ3JhcGhfZHVtcF90cmFwX2luZm8oZGV2LAotCQkJCQkJIlBHUkFQSF9ET1VCTEVfTk9USUZZIiwgJnRyYXApOwotCQkJc3RhdHVzICY9IH4weDAwMDAwMDQwOwotCQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIDB4MDAwMDAwNDApOwotCQl9Ci0KLQkJLyogQ09OVEVYVF9TV0lUQ0g6IFBHUkFQSCBuZWVkcyB1cyB0byBsb2FkIGEgbmV3IGNvbnRleHQgKi8KLQkJaWYgKHN0YXR1cyAmIDB4MDAwMDEwMDApIHsKLQkJCW52X3dyMzIoZGV2LCAweDQwMDUwMCwgMHgwMDAwMDAwMCk7Ci0JCQludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwKLQkJCQlOVl9QR1JBUEhfSU5UUl9DT05URVhUX1NXSVRDSCk7Ci0JCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfSU5UUl9FTiwgbnZfcmQzMihkZXYsCi0JCQkJTlY0MF9QR1JBUEhfSU5UUl9FTikgJgotCQkJCX5OVl9QR1JBUEhfSU5UUl9DT05URVhUX1NXSVRDSCk7Ci0JCQludl93cjMyKGRldiwgMHg0MDA1MDAsIDB4MDAwMTAwMDEpOwotCi0JCQludjUwX2dyYXBoX2NvbnRleHRfc3dpdGNoKGRldik7Ci0KLQkJCXN0YXR1cyAmPSB+TlZfUEdSQVBIX0lOVFJfQ09OVEVYVF9TV0lUQ0g7Ci0JCX0KLQotCQkvKiBCVUZGRVJfTk9USUZZOiBZb3VyIG0ybWYgdHJhbnNmZXIgZmluaXNoZWQgKi8KLQkJaWYgKHN0YXR1cyAmIDB4MDAwMTAwMDApIHsKLQkJCW5vdXZlYXVfZ3JhcGhfdHJhcF9pbmZvKGRldiwgJnRyYXApOwotCQkJaWYgKG5vdXZlYXVfcmF0ZWxpbWl0KCkpCi0JCQkJbm91dmVhdV9ncmFwaF9kdW1wX3RyYXBfaW5mbyhkZXYsCi0JCQkJCQkiUEdSQVBIX0JVRkZFUl9OT1RJRlkiLCAmdHJhcCk7Ci0JCQlzdGF0dXMgJj0gfjB4MDAwMTAwMDA7Ci0JCQludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwgMHgwMDAxMDAwMCk7Ci0JCX0KLQotCQkvKiBEQVRBX0VSUk9SOiBJbnZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCwgb3IgaW52YWxpZAotCQkgKiBzdGF0ZSBpbiBjdXJyZW50IFBHUkFQSCBjb250ZXh0IGZvciB0aGlzIG9wZXJhdGlvbiAqLwotCQlpZiAoc3RhdHVzICYgMHgwMDEwMDAwMCkgewotCQkJbm91dmVhdV9ncmFwaF90cmFwX2luZm8oZGV2LCAmdHJhcCk7Ci0JCQlpZiAobm91dmVhdV9yYXRlbGltaXQoKSkgewotCQkJCW5vdXZlYXVfZ3JhcGhfZHVtcF90cmFwX2luZm8oZGV2LAotCQkJCQkJIlBHUkFQSF9EQVRBX0VSUk9SIiwgJnRyYXApOwotCQkJCU5WX0lORk8gKGRldiwgIlBHUkFQSF9EQVRBX0VSUk9SIC0gIik7Ci0JCQkJbm91dmVhdV9wcmludF9lbnVtX25hbWVzKG52X3JkMzIoZGV2LCAweDQwMDExMCksCi0JCQkJCQludjUwX2RhdGFfZXJyb3JfbmFtZXMpOwotCQkJCXByaW50aygiXG4iKTsKLQkJCX0KLQkJCXN0YXR1cyAmPSB+MHgwMDEwMDAwMDsKLQkJCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSLCAweDAwMTAwMDAwKTsKLQkJfQotCi0JCS8qIFRSQVA6IFNvbWV0aGluZyBiYWQgaGFwcGVuZWQgaW4gdGhlIG1pZGRsZSBvZiBjb21tYW5kCi0JCSAqIGV4ZWN1dGlvbi4gIEhhcyBhIGJpbGxpb24gdHlwZXMsIHN1YnR5cGVzLCBhbmQgZXZlbgotCQkgKiBzdWJzdWJ0eXBlcy4gKi8KLQkJaWYgKHN0YXR1cyAmIDB4MDAyMDAwMDApIHsKLQkJCW52NTBfcGdyYXBoX3RyYXBfaGFuZGxlcihkZXYpOwotCQkJc3RhdHVzICY9IH4weDAwMjAwMDAwOwotCQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIDB4MDAyMDAwMDApOwotCQl9Ci0KLQkJLyogVW5rbm93biwgbmV2ZXIgc2VlbjogMHgwMDQwMDAwMCAqLwotCi0JCS8qIFNJTkdMRV9TVEVQOiBIYXBwZW5zIG9uIGV2ZXJ5IG1ldGhvZCBpZiB5b3UgdHVybmVkIG9uCi0JCSAqIHNpbmdsZSBzdGVwcGluZyBpbiA0MDAwOGMgKi8KLQkJaWYgKHN0YXR1cyAmIDB4MDEwMDAwMDApIHsKLQkJCW5vdXZlYXVfZ3JhcGhfdHJhcF9pbmZvKGRldiwgJnRyYXApOwotCQkJaWYgKG5vdXZlYXVfcmF0ZWxpbWl0KCkpCi0JCQkJbm91dmVhdV9ncmFwaF9kdW1wX3RyYXBfaW5mbyhkZXYsCi0JCQkJCQkiUEdSQVBIX1NJTkdMRV9TVEVQIiwgJnRyYXApOwotCQkJc3RhdHVzICY9IH4weDAxMDAwMDAwOwotCQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIDB4MDEwMDAwMDApOwotCQl9Ci0KLQkJLyogMHgwMjAwMDAwMCBoYXBwZW5zIHdoZW4geW91IHBhdXNlIGEgY3R4cHJvZy4uLgotCQkgKiBidXQgdGhlIG9ubHkgd2F5IHRoaXMgY2FuIGhhcHBlbiB0aGF0IEkga25vdyBpcyBieQotCQkgKiBwb2tpbmcgdGhlIHJlbGV2YW50IE1NSU8gcmVnaXN0ZXIsIGFuZCB3ZSBkb24ndAotCQkgKiBkbyB0aGF0LiAqLwotCi0JCWlmIChzdGF0dXMpIHsKLQkJCU5WX0lORk8oZGV2LCAiVW5oYW5kbGVkIFBHUkFQSF9JTlRSIC0gMHglMDh4XG4iLAotCQkJCXN0YXR1cyk7Ci0JCQludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwgc3RhdHVzKTsKLQkJfQotCi0JCXsKLQkJCWNvbnN0IGludCBpc2IgPSAoMSA8PCAxNikgfCAoMSA8PCAwKTsKLQotCQkJaWYgKChudl9yZDMyKGRldiwgMHg0MDA1MDApICYgaXNiKSAhPSBpc2IpCi0JCQkJbnZfd3IzMihkZXYsIDB4NDAwNTAwLAotCQkJCQludl9yZDMyKGRldiwgMHg0MDA1MDApIHwgaXNiKTsKLQkJfQotCX0KLQotCW52X3dyMzIoZGV2LCBOVjAzX1BNQ19JTlRSXzAsIE5WX1BNQ19JTlRSXzBfUEdSQVBIX1BFTkRJTkcpOwotCWlmIChudl9yZDMyKGRldiwgMHg0MDA4MjQpICYgKDEgPDwgMzEpKQotCQludl93cjMyKGRldiwgMHg0MDA4MjQsIG52X3JkMzIoZGV2LCAweDQwMDgyNCkgJiB+KDEgPDwgMzEpKTsKLX0KLQotc3RhdGljIHZvaWQKLW5vdXZlYXVfY3J0Y19pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKLXsKLQlpZiAoY3J0YyAmIDEpCi0JCW52X3dyMzIoZGV2LCBOVl9DUlRDMF9JTlRTVEFULCBOVl9DUlRDX0lOVFJfVkJMQU5LKTsKLQotCWlmIChjcnRjICYgMikKLQkJbnZfd3IzMihkZXYsIE5WX0NSVEMxX0lOVFNUQVQsIE5WX0NSVENfSU5UUl9WQkxBTkspOwotfQotCiBpcnFyZXR1cm5fdAogbm91dmVhdV9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKWFyZzsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVpbnQzMl90IHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBzdGF0OworCWludCBpOwogCi0Jc3RhdHVzID0gbnZfcmQzMihkZXYsIE5WMDNfUE1DX0lOVFJfMCk7Ci0JaWYgKCFzdGF0dXMpCisJc3RhdCA9IG52X3JkMzIoZGV2LCBOVjAzX1BNQ19JTlRSXzApOworCWlmICghc3RhdCkKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IDMyICYmIHN0YXQ7IGkrKykgeworCQlpZiAoIShzdGF0ICYgKDEgPDwgaSkpIHx8ICFkZXZfcHJpdi0+aXJxX2hhbmRsZXJbaV0pCisJCQljb250aW51ZTsKIAotCWlmIChzdGF0dXMgJiBOVl9QTUNfSU5UUl8wX1BGSUZPX1BFTkRJTkcpIHsKLQkJbm91dmVhdV9maWZvX2lycV9oYW5kbGVyKGRldik7Ci0JCXN0YXR1cyAmPSB+TlZfUE1DX0lOVFJfMF9QRklGT19QRU5ESU5HOworCQlkZXZfcHJpdi0+aXJxX2hhbmRsZXJbaV0oZGV2KTsKKwkJc3RhdCAmPSB+KDEgPDwgaSk7CiAJfQogCi0JaWYgKHN0YXR1cyAmIE5WX1BNQ19JTlRSXzBfUEdSQVBIX1BFTkRJTkcpIHsKLQkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApCi0JCQludjUwX3BncmFwaF9pcnFfaGFuZGxlcihkZXYpOwotCQllbHNlCi0JCQlub3V2ZWF1X3BncmFwaF9pcnFfaGFuZGxlcihkZXYpOwotCi0JCXN0YXR1cyAmPSB+TlZfUE1DX0lOVFJfMF9QR1JBUEhfUEVORElORzsKLQl9Ci0KLQlpZiAoc3RhdHVzICYgTlZfUE1DX0lOVFJfMF9DUlRDbl9QRU5ESU5HKSB7Ci0JCW5vdXZlYXVfY3J0Y19pcnFfaGFuZGxlcihkZXYsIChzdGF0dXM+PjI0KSYzKTsKLQkJc3RhdHVzICY9IH5OVl9QTUNfSU5UUl8wX0NSVENuX1BFTkRJTkc7Ci0JfQotCi0JaWYgKHN0YXR1cyAmIChOVl9QTUNfSU5UUl8wX05WNTBfRElTUExBWV9QRU5ESU5HIHwKLQkJICAgICAgTlZfUE1DX0lOVFJfMF9OVjUwX0kyQ19QRU5ESU5HKSkgewotCQludjUwX2Rpc3BsYXlfaXJxX2hhbmRsZXIoZGV2KTsKLQkJc3RhdHVzICY9IH4oTlZfUE1DX0lOVFJfMF9OVjUwX0RJU1BMQVlfUEVORElORyB8Ci0JCQkgICAgTlZfUE1DX0lOVFJfMF9OVjUwX0kyQ19QRU5ESU5HKTsKLQl9Ci0KLQlpZiAoc3RhdHVzKQotCQlOVl9FUlJPUihkZXYsICJVbmhhbmRsZWQgUE1DIElOVFIgc3RhdHVzIGJpdHMgMHglMDh4XG4iLCBzdGF0dXMpOwotCisJaWYgKGRldl9wcml2LT5tc2lfZW5hYmxlZCkKKwkJbnZfd3IwOChkZXYsIDB4MDAwODgwNjgsIDB4ZmYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CiAKKwlpZiAoc3RhdCAmJiBub3V2ZWF1X3JhdGVsaW1pdCgpKQorCQlOVl9FUlJPUihkZXYsICJQTUMgLSB1bmhhbmRsZWQgSU5UUiAweCUwOHhcbiIsIHN0YXQpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KKworaW50Citub3V2ZWF1X2lycV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJaWYgKG5vdXZlYXVfbXNpICE9IDAgJiYgZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgeworCQlyZXQgPSBwY2lfZW5hYmxlX21zaShkZXYtPnBkZXYpOworCQlpZiAocmV0ID09IDApIHsKKwkJCU5WX0lORk8oZGV2LCAiZW5hYmxlZCBNU0lcbiIpOworCQkJZGV2X3ByaXYtPm1zaV9lbmFibGVkID0gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBkcm1faXJxX2luc3RhbGwoZGV2KTsKK30KKwordm9pZAorbm91dmVhdV9pcnFfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworCWlmIChkZXZfcHJpdi0+bXNpX2VuYWJsZWQpCisJCXBjaV9kaXNhYmxlX21zaShkZXYtPnBkZXYpOworfQorCit2b2lkCitub3V2ZWF1X2lycV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgc3RhdHVzX2JpdCwKKwkJICAgICB2b2lkICgqaGFuZGxlcikoc3RydWN0IGRybV9kZXZpY2UgKikpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisJZGV2X3ByaXYtPmlycV9oYW5kbGVyW3N0YXR1c19iaXRdID0gaGFuZGxlcjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOworfQorCit2b2lkCitub3V2ZWF1X2lycV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBzdGF0dXNfYml0KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOworCWRldl9wcml2LT5pcnFfaGFuZGxlcltzdGF0dXNfYml0XSA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCmluZGV4IGZlNGEzMGQuLjY5MDQ0ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYwpAQCAtMzYsMTgzICszNiwxMTIgQEAKIAogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCiAjaW5jbHVkZSAibm91dmVhdV9wbS5oIgorI2luY2x1ZGUgIm5vdXZlYXVfbW0uaCIKKyNpbmNsdWRlICJub3V2ZWF1X3ZtLmgiCiAKIC8qCiAgKiBOVjEwLU5WNDAgdGlsaW5nIGhlbHBlcnMKICAqLwogCiBzdGF0aWMgdm9pZAotbnYxMF9tZW1fc2V0X3JlZ2lvbl90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGksIHVpbnQzMl90IGFkZHIsCi0JCQkgICB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBwaXRjaCkKK252MTBfbWVtX3VwZGF0ZV90aWxlX3JlZ2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBub3V2ZWF1X3RpbGVfcmVnICp0aWxlLCB1aW50MzJfdCBhZGRyLAorCQkJICAgIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IHBpdGNoLCB1aW50MzJfdCBmbGFncykKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2ZpZm9fZW5naW5lICpwZmlmbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmZpZm87CiAJc3RydWN0IG5vdXZlYXVfZmJfZW5naW5lICpwZmIgPSAmZGV2X3ByaXYtPmVuZ2luZS5mYjsKIAlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKLQlzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqdGlsZSA9ICZkZXZfcHJpdi0+dGlsZVtpXTsKKwlpbnQgaSA9IHRpbGUgLSBkZXZfcHJpdi0+dGlsZS5yZWc7CisJdW5zaWduZWQgbG9uZyBzYXZlOwogCi0JdGlsZS0+YWRkciA9IGFkZHI7Ci0JdGlsZS0+c2l6ZSA9IHNpemU7Ci0JdGlsZS0+dXNlZCA9ICEhcGl0Y2g7Ci0Jbm91dmVhdV9mZW5jZV91bnJlZigodm9pZCAqKikmdGlsZS0+ZmVuY2UpOworCW5vdXZlYXVfZmVuY2VfdW5yZWYoJnRpbGUtPmZlbmNlKTsKIAorCWlmICh0aWxlLT5waXRjaCkKKwkJcGZiLT5mcmVlX3RpbGVfcmVnaW9uKGRldiwgaSk7CisKKwlpZiAocGl0Y2gpCisJCXBmYi0+aW5pdF90aWxlX3JlZ2lvbihkZXYsIGksIGFkZHIsIHNpemUsIHBpdGNoLCBmbGFncyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIHNhdmUpOwogCXBmaWZvLT5yZWFzc2lnbihkZXYsIGZhbHNlKTsKIAlwZmlmby0+Y2FjaGVfcHVsbChkZXYsIGZhbHNlKTsKIAogCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOwogCi0JcGdyYXBoLT5zZXRfcmVnaW9uX3RpbGluZyhkZXYsIGksIGFkZHIsIHNpemUsIHBpdGNoKTsKLQlwZmItPnNldF9yZWdpb25fdGlsaW5nKGRldiwgaSwgYWRkciwgc2l6ZSwgcGl0Y2gpOworCXBmYi0+c2V0X3RpbGVfcmVnaW9uKGRldiwgaSk7CisJcGdyYXBoLT5zZXRfdGlsZV9yZWdpb24oZGV2LCBpKTsKIAogCXBmaWZvLT5jYWNoZV9wdWxsKGRldiwgdHJ1ZSk7CiAJcGZpZm8tPnJlYXNzaWduKGRldiwgdHJ1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIHNhdmUpOworfQorCitzdGF0aWMgc3RydWN0IG5vdXZlYXVfdGlsZV9yZWcgKgorbnYxMF9tZW1fZ2V0X3RpbGVfcmVnaW9uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpKQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfdGlsZV9yZWcgKnRpbGUgPSAmZGV2X3ByaXYtPnRpbGUucmVnW2ldOworCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+dGlsZS5sb2NrKTsKKworCWlmICghdGlsZS0+dXNlZCAmJgorCSAgICAoIXRpbGUtPmZlbmNlIHx8IG5vdXZlYXVfZmVuY2Vfc2lnbmFsbGVkKHRpbGUtPmZlbmNlKSkpCisJCXRpbGUtPnVzZWQgPSB0cnVlOworCWVsc2UKKwkJdGlsZSA9IE5VTEw7CisKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnRpbGUubG9jayk7CisJcmV0dXJuIHRpbGU7Cit9CisKK3ZvaWQKK252MTBfbWVtX3B1dF90aWxlX3JlZ2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqdGlsZSwKKwkJCSBzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2UpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmICh0aWxlKSB7CisJCXNwaW5fbG9jaygmZGV2X3ByaXYtPnRpbGUubG9jayk7CisJCWlmIChmZW5jZSkgeworCQkJLyogTWFyayBpdCBhcyBwZW5kaW5nLiAqLworCQkJdGlsZS0+ZmVuY2UgPSBmZW5jZTsKKwkJCW5vdXZlYXVfZmVuY2VfcmVmKGZlbmNlKTsKKwkJfQorCisJCXRpbGUtPnVzZWQgPSBmYWxzZTsKKwkJc3Bpbl91bmxvY2soJmRldl9wcml2LT50aWxlLmxvY2spOworCX0KIH0KIAogc3RydWN0IG5vdXZlYXVfdGlsZV9yZWcgKgogbnYxMF9tZW1fc2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCBzaXplLAotCQkgICAgdWludDMyX3QgcGl0Y2gpCisJCSAgICB1aW50MzJfdCBwaXRjaCwgdWludDMyX3QgZmxhZ3MpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9mYl9lbmdpbmUgKnBmYiA9ICZkZXZfcHJpdi0+ZW5naW5lLmZiOwotCXN0cnVjdCBub3V2ZWF1X3RpbGVfcmVnICpmb3VuZCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBpLCBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSA8IHBmYi0+bnVtX3RpbGVzOyBpKyspIHsKLQkJc3RydWN0IG5vdXZlYXVfdGlsZV9yZWcgKnRpbGUgPSAmZGV2X3ByaXYtPnRpbGVbaV07Ci0KLQkJaWYgKHRpbGUtPnVzZWQpCi0JCQkvKiBUaWxlIHJlZ2lvbiBpbiB1c2UuICovCi0JCQljb250aW51ZTsKLQotCQlpZiAodGlsZS0+ZmVuY2UgJiYKLQkJICAgICFub3V2ZWF1X2ZlbmNlX3NpZ25hbGxlZCh0aWxlLT5mZW5jZSwgTlVMTCkpCi0JCQkvKiBQZW5kaW5nIHRpbGUgcmVnaW9uLiAqLwotCQkJY29udGludWU7Ci0KLQkJaWYgKG1heCh0aWxlLT5hZGRyLCBhZGRyKSA8Ci0JCSAgICBtaW4odGlsZS0+YWRkciArIHRpbGUtPnNpemUsIGFkZHIgKyBzaXplKSkKLQkJCS8qIEtpbGwgYW4gaW50ZXJzZWN0aW5nIHRpbGUgcmVnaW9uLiAqLwotCQkJbnYxMF9tZW1fc2V0X3JlZ2lvbl90aWxpbmcoZGV2LCBpLCAwLCAwLCAwKTsKLQotCQlpZiAocGl0Y2ggJiYgIWZvdW5kKSB7Ci0JCQkvKiBGcmVlIHRpbGUgcmVnaW9uLiAqLwotCQkJbnYxMF9tZW1fc2V0X3JlZ2lvbl90aWxpbmcoZGV2LCBpLCBhZGRyLCBzaXplLCBwaXRjaCk7Ci0JCQlmb3VuZCA9IHRpbGU7Ci0JCX0KLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIGZvdW5kOwotfQotCi12b2lkCi1udjEwX21lbV9leHBpcmVfdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBub3V2ZWF1X3RpbGVfcmVnICp0aWxlLAotCQkgICAgICAgc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlKQotewotCWlmIChmZW5jZSkgewotCQkvKiBNYXJrIGl0IGFzIHBlbmRpbmcuICovCi0JCXRpbGUtPmZlbmNlID0gZmVuY2U7Ci0JCW5vdXZlYXVfZmVuY2VfcmVmKGZlbmNlKTsKLQl9Ci0KLQl0aWxlLT51c2VkID0gZmFsc2U7Ci19Ci0KLS8qCi0gKiBOVjUwIFZNIGhlbHBlcnMKLSAqLwotaW50Ci1udjUwX21lbV92bV9iaW5kX2xpbmVhcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50NjRfdCB2aXJ0LCB1aW50MzJfdCBzaXplLAotCQkJdWludDMyX3QgZmxhZ3MsIHVpbnQ2NF90IHBoeXMpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnBndDsKLQl1bnNpZ25lZCBibG9jazsKKwlzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqdGlsZSwgKmZvdW5kID0gTlVMTDsKIAlpbnQgaTsKIAotCXZpcnQgPSAoKHZpcnQgLSBkZXZfcHJpdi0+dm1fdnJhbV9iYXNlKSA+PiAxNikgPDwgMTsKLQlzaXplID0gKHNpemUgPj4gMTYpIDw8IDE7CisJZm9yIChpID0gMDsgaSA8IHBmYi0+bnVtX3RpbGVzOyBpKyspIHsKKwkJdGlsZSA9IG52MTBfbWVtX2dldF90aWxlX3JlZ2lvbihkZXYsIGkpOwogCi0JcGh5cyB8PSAoKHVpbnQ2NF90KWZsYWdzIDw8IDMyKTsKLQlwaHlzIHw9IDE7Ci0JaWYgKGRldl9wcml2LT52cmFtX3N5c19iYXNlKSB7Ci0JCXBoeXMgKz0gZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2U7Ci0JCXBoeXMgfD0gMHgzMDsKKwkJaWYgKHBpdGNoICYmICFmb3VuZCkgeworCQkJZm91bmQgPSB0aWxlOworCQkJY29udGludWU7CisKKwkJfSBlbHNlIGlmICh0aWxlICYmIHRpbGUtPnBpdGNoKSB7CisJCQkvKiBLaWxsIGFuIHVudXNlZCB0aWxlIHJlZ2lvbi4gKi8KKwkJCW52MTBfbWVtX3VwZGF0ZV90aWxlX3JlZ2lvbihkZXYsIHRpbGUsIDAsIDAsIDAsIDApOworCQl9CisKKwkJbnYxMF9tZW1fcHV0X3RpbGVfcmVnaW9uKGRldiwgdGlsZSwgTlVMTCk7CiAJfQogCi0Jd2hpbGUgKHNpemUpIHsKLQkJdW5zaWduZWQgb2Zmc2V0X2ggPSB1cHBlcl8zMl9iaXRzKHBoeXMpOwotCQl1bnNpZ25lZCBvZmZzZXRfbCA9IGxvd2VyXzMyX2JpdHMocGh5cyk7Ci0JCXVuc2lnbmVkIHB0ZSwgZW5kOwotCi0JCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7Ci0JCQlibG9jayA9IDEgPDwgKGkgKyAxKTsKLQkJCWlmIChzaXplID49IGJsb2NrICYmICEodmlydCAmIChibG9jayAtIDEpKSkKLQkJCQlicmVhazsKLQkJfQotCQlvZmZzZXRfbCB8PSAoaSA8PCA3KTsKLQotCQlwaHlzICs9IGJsb2NrIDw8IDE1OwotCQlzaXplIC09IGJsb2NrOwotCi0JCXdoaWxlIChibG9jaykgewotCQkJcGd0ID0gZGV2X3ByaXYtPnZtX3ZyYW1fcHRbdmlydCA+PiAxNF07Ci0JCQlwdGUgPSB2aXJ0ICYgMHgzZmZlOwotCi0JCQllbmQgPSBwdGUgKyBibG9jazsKLQkJCWlmIChlbmQgPiAxNjM4NCkKLQkJCQllbmQgPSAxNjM4NDsKLQkJCWJsb2NrIC09IChlbmQgLSBwdGUpOwotCQkJdmlydCAgKz0gKGVuZCAtIHB0ZSk7Ci0KLQkJCXdoaWxlIChwdGUgPCBlbmQpIHsKLQkJCQludl93bzMyKHBndCwgKHB0ZSAqIDQpICsgMCwgb2Zmc2V0X2wpOwotCQkJCW52X3dvMzIocGd0LCAocHRlICogNCkgKyA0LCBvZmZzZXRfaCk7Ci0JCQkJcHRlICs9IDI7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKLQlkZXZfcHJpdi0+ZW5naW5lLmZpZm8udGxiX2ZsdXNoKGRldik7Ci0JZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC50bGJfZmx1c2goZGV2KTsKLQludjUwX3ZtX2ZsdXNoKGRldiwgNik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLW52NTBfbWVtX3ZtX3VuYmluZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50NjRfdCB2aXJ0LCB1aW50MzJfdCBzaXplKQotewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwZ3Q7Ci0JdW5zaWduZWQgcGFnZXMsIHB0ZSwgZW5kOwotCi0JdmlydCAtPSBkZXZfcHJpdi0+dm1fdnJhbV9iYXNlOwotCXBhZ2VzID0gKHNpemUgPj4gMTYpIDw8IDE7Ci0KLQl3aGlsZSAocGFnZXMpIHsKLQkJcGd0ID0gZGV2X3ByaXYtPnZtX3ZyYW1fcHRbdmlydCA+PiAyOV07Ci0JCXB0ZSA9ICh2aXJ0ICYgMHgxZmZlMDAwMFVMTCkgPj4gMTU7Ci0KLQkJZW5kID0gcHRlICsgcGFnZXM7Ci0JCWlmIChlbmQgPiAxNjM4NCkKLQkJCWVuZCA9IDE2Mzg0OwotCQlwYWdlcyAtPSAoZW5kIC0gcHRlKTsKLQkJdmlydCAgKz0gKGVuZCAtIHB0ZSkgPDwgMTU7Ci0KLQkJd2hpbGUgKHB0ZSA8IGVuZCkgewotCQkJbnZfd28zMihwZ3QsIChwdGUgKiA0KSwgMCk7Ci0JCQlwdGUrKzsKLQkJfQotCX0KLQotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwotCWRldl9wcml2LT5lbmdpbmUuZmlmby50bGJfZmx1c2goZGV2KTsKLQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLnRsYl9mbHVzaChkZXYpOwotCW52NTBfdm1fZmx1c2goZGV2LCA2KTsKKwlpZiAoZm91bmQpCisJCW52MTBfbWVtX3VwZGF0ZV90aWxlX3JlZ2lvbihkZXYsIGZvdW5kLCBhZGRyLCBzaXplLAorCQkJCQkgICAgcGl0Y2gsIGZsYWdzKTsKKwlyZXR1cm4gZm91bmQ7CiB9CiAKIC8qCkBAIC0zMTIsNjIgKzI0MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkCi1udjUwX3ZyYW1fcHJlaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IGksIHBhcnRzLCBjb2xiaXRzLCByb3diaXRzYSwgcm93Yml0c2IsIGJhbmtzOwotCXU2NCByb3dzaXplLCBwcmVkaWN0ZWQ7Ci0JdTMyIHIwLCByNCwgcnQsIHJ1OwotCi0JcjAgPSBudl9yZDMyKGRldiwgMHgxMDAyMDApOwotCXI0ID0gbnZfcmQzMihkZXYsIDB4MTAwMjA0KTsKLQlydCA9IG52X3JkMzIoZGV2LCAweDEwMDI1MCk7Ci0JcnUgPSBudl9yZDMyKGRldiwgMHgwMDE1NDApOwotCU5WX0RFQlVHKGRldiwgIm1lbWNmZyAweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsIHIwLCByNCwgcnQsIHJ1KTsKLQotCWZvciAoaSA9IDAsIHBhcnRzID0gMDsgaSA8IDg7IGkrKykgewotCQlpZiAocnUgJiAoMHgwMDAxMDAwMCA8PCBpKSkKLQkJCXBhcnRzKys7Ci0JfQotCi0JY29sYml0cyAgPSAgKHI0ICYgMHgwMDAwZjAwMCkgPj4gMTI7Ci0Jcm93Yml0c2EgPSAoKHI0ICYgMHgwMDBmMDAwMCkgPj4gMTYpICsgODsKLQlyb3diaXRzYiA9ICgocjQgJiAweDAwZjAwMDAwKSA+PiAyMCkgKyA4OwotCWJhbmtzICAgID0gKChyNCAmIDB4MDEwMDAwMDApID8gOCA6IDQpOwotCi0Jcm93c2l6ZSA9IHBhcnRzICogYmFua3MgKiAoMSA8PCBjb2xiaXRzKSAqIDg7Ci0JcHJlZGljdGVkID0gcm93c2l6ZSA8PCByb3diaXRzYTsKLQlpZiAocjAgJiAweDAwMDAwMDA0KQotCQlwcmVkaWN0ZWQgKz0gcm93c2l6ZSA8PCByb3diaXRzYjsKLQotCWlmIChwcmVkaWN0ZWQgIT0gZGV2X3ByaXYtPnZyYW1fc2l6ZSkgewotCQlOVl9XQVJOKGRldiwgIm1lbW9yeSBjb250cm9sbGVyIHJlcG9ydHMgJWRNaUIgVlJBTVxuIiwKLQkJCSh1MzIpKGRldl9wcml2LT52cmFtX3NpemUgPj4gMjApKTsKLQkJTlZfV0FSTihkZXYsICJ3ZSBjYWxjdWxhdGVkICVkTWlCIFZSQU1cbiIsCi0JCQkodTMyKShwcmVkaWN0ZWQgPj4gMjApKTsKLQl9Ci0KLQlkZXZfcHJpdi0+dnJhbV9yYmxvY2tfc2l6ZSA9IHJvd3NpemUgPj4gMTI7Ci0JaWYgKHJ0ICYgMSkKLQkJZGV2X3ByaXYtPnZyYW1fcmJsb2NrX3NpemUgKj0gMzsKLQotCU5WX0RFQlVHKGRldiwgInJibG9jayAlbGxkIGJ5dGVzXG4iLAotCQkgKHU2NClkZXZfcHJpdi0+dnJhbV9yYmxvY2tfc2l6ZSA8PCAxMik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1udmFhX3ZyYW1fcHJlaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQkvKiBUbyBvdXIga25vd2xlZGdlLCB0aGVyZSdzIG5vIGxhcmdlIHNjYWxlIHJlb3JkZXJpbmcgb2YgcGFnZXMKLQkgKiB0aGF0IG9jY3VycyBvbiBJR1AgY2hpcHNldHMuCi0JICovCi0JZGV2X3ByaXYtPnZyYW1fcmJsb2NrX3NpemUgPSAxOwotfQotCi1zdGF0aWMgaW50CitpbnQKIG5vdXZlYXVfbWVtX2RldGVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0zODEsMzMgKzI1NSw2IEBACiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkgewogCQlkZXZfcHJpdi0+dnJhbV9zaXplICA9IG52X3JkMzIoZGV2LCBOVjA0X1BGQl9GSUZPX0RBVEEpOwogCQlkZXZfcHJpdi0+dnJhbV9zaXplICY9IE5WMTBfUEZCX0ZJRk9fREFUQV9SQU1fQU1PVU5UX01CX01BU0s7Ci0JfSBlbHNlCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl9DMCkgewotCQlkZXZfcHJpdi0+dnJhbV9zaXplID0gbnZfcmQzMihkZXYsIE5WMDRfUEZCX0ZJRk9fREFUQSk7Ci0JCWRldl9wcml2LT52cmFtX3NpemUgfD0gKGRldl9wcml2LT52cmFtX3NpemUgJiAweGZmKSA8PCAzMjsKLQkJZGV2X3ByaXYtPnZyYW1fc2l6ZSAmPSAweGZmZmZmZmZmMDBsbDsKLQotCQlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7Ci0JCWNhc2UgMHhhYToKLQkJY2FzZSAweGFjOgotCQljYXNlIDB4YWY6Ci0JCQlkZXZfcHJpdi0+dnJhbV9zeXNfYmFzZSA9IG52X3JkMzIoZGV2LCAweDEwMGUxMCk7Ci0JCQlkZXZfcHJpdi0+dnJhbV9zeXNfYmFzZSA8PD0gMTI7Ci0JCQludmFhX3ZyYW1fcHJlaW5pdChkZXYpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQludjUwX3ZyYW1fcHJlaW5pdChkZXYpOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQlkZXZfcHJpdi0+dnJhbV9zaXplICA9IG52X3JkMzIoZGV2LCAweDEwZjIwYykgPDwgMjA7Ci0JCWRldl9wcml2LT52cmFtX3NpemUgKj0gbnZfcmQzMihkZXYsIDB4MTIxYzc0KTsKLQl9Ci0KLQlOVl9JTkZPKGRldiwgIkRldGVjdGVkICVkTWlCIFZSQU1cbiIsIChpbnQpKGRldl9wcml2LT52cmFtX3NpemUgPj4gMjApKTsKLQlpZiAoZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2UpIHsKLQkJTlZfSU5GTyhkZXYsICJTdG9sZW4gc3lzdGVtIG1lbW9yeSBhdDogMHglMDEwbGx4XG4iLAotCQkJZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2UpOwogCX0KIAogCWlmIChkZXZfcHJpdi0+dnJhbV9zaXplKQpAQCAtNDE1LDYgKzI2MiwxNSBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCitib29sCitub3V2ZWF1X21lbV9mbGFnc192YWxpZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgdGlsZV9mbGFncykKK3sKKwlpZiAoISh0aWxlX2ZsYWdzICYgTk9VVkVBVV9HRU1fVElMRV9MQVlPVVRfTUFTSykpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCiAjaWYgX19PU19IQVNfQUdQCiBzdGF0aWMgdW5zaWduZWQgbG9uZwogZ2V0X2FncF9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbW9kZSkKQEAgLTU0NywxMCArNDAzLDYgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gbm91dmVhdV9tZW1fZGV0ZWN0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQogCWRldl9wcml2LT5mYl9waHlzID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMSk7CiAKIAlyZXQgPSBub3V2ZWF1X3R0bV9nbG9iYWxfaW5pdChkZXZfcHJpdik7CkBAIC01NjYsMTMgKzQxOCw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JZGV2X3ByaXYtPmZiX2F2YWlsYWJsZV9zaXplID0gZGV2X3ByaXYtPnZyYW1fc2l6ZTsKLQlkZXZfcHJpdi0+ZmJfbWFwcGFibGVfcGFnZXMgPSBkZXZfcHJpdi0+ZmJfYXZhaWxhYmxlX3NpemU7Ci0JaWYgKGRldl9wcml2LT5mYl9tYXBwYWJsZV9wYWdlcyA+IHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAxKSkKLQkJZGV2X3ByaXYtPmZiX21hcHBhYmxlX3BhZ2VzID0KLQkJCXBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAxKTsKLQlkZXZfcHJpdi0+ZmJfbWFwcGFibGVfcGFnZXMgPj49IFBBR0VfU0hJRlQ7Ci0KIAkvKiByZXNlcnZlIHNwYWNlIGF0IGVuZCBvZiBWUkFNIGZvciBQUkFNSU4gKi8KIAlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCB8fCBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQ3IHx8CiAJICAgIGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDkgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0YikKQEAgLTU4Myw2ICs0MjgsMjIgQEAKIAllbHNlCiAJCWRldl9wcml2LT5yYW1pbl9yc3ZkX3ZyYW0gPSAoNTEyICogMTAyNCk7CiAKKwlyZXQgPSBkZXZfcHJpdi0+ZW5naW5lLnZyYW0uaW5pdChkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlOVl9JTkZPKGRldiwgIkRldGVjdGVkICVkTWlCIFZSQU1cbiIsIChpbnQpKGRldl9wcml2LT52cmFtX3NpemUgPj4gMjApKTsKKwlpZiAoZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2UpIHsKKwkJTlZfSU5GTyhkZXYsICJTdG9sZW4gc3lzdGVtIG1lbW9yeSBhdDogMHglMDEwbGx4XG4iLAorCQkJZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2UpOworCX0KKworCWRldl9wcml2LT5mYl9hdmFpbGFibGVfc2l6ZSA9IGRldl9wcml2LT52cmFtX3NpemU7CisJZGV2X3ByaXYtPmZiX21hcHBhYmxlX3BhZ2VzID0gZGV2X3ByaXYtPmZiX2F2YWlsYWJsZV9zaXplOworCWlmIChkZXZfcHJpdi0+ZmJfbWFwcGFibGVfcGFnZXMgPiBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMSkpCisJCWRldl9wcml2LT5mYl9tYXBwYWJsZV9wYWdlcyA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAxKTsKKwlkZXZfcHJpdi0+ZmJfbWFwcGFibGVfcGFnZXMgPj49IFBBR0VfU0hJRlQ7CisKIAlkZXZfcHJpdi0+ZmJfYXZhaWxhYmxlX3NpemUgLT0gZGV2X3ByaXYtPnJhbWluX3JzdmRfdnJhbTsKIAlkZXZfcHJpdi0+ZmJfYXBlcl9mcmVlID0gZGV2X3ByaXYtPmZiX2F2YWlsYWJsZV9zaXplOwogCkBAIC03OTksMyArNjYwLDExOCBAQAogCiAJa2ZyZWUobWVtLT50aW1pbmcpOwogfQorCitzdGF0aWMgaW50Citub3V2ZWF1X3ZyYW1fbWFuYWdlcl9pbml0KHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLCB1bnNpZ25lZCBsb25nIHBfc2l6ZSkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub3V2ZWF1X2JkZXYobWFuLT5iZGV2KTsKKwlzdHJ1Y3Qgbm91dmVhdV9tbSAqbW07CisJdTMyIGJfc2l6ZTsKKwlpbnQgcmV0OworCisJcF9zaXplID0gKHBfc2l6ZSA8PCBQQUdFX1NISUZUKSA+PiAxMjsKKwliX3NpemUgPSBkZXZfcHJpdi0+dnJhbV9yYmxvY2tfc2l6ZSA+PiAxMjsKKworCXJldCA9IG5vdXZlYXVfbW1faW5pdCgmbW0sIDAsIHBfc2l6ZSwgYl9zaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbWFuLT5wcml2ID0gbW07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25vdXZlYXVfdnJhbV9tYW5hZ2VyX2Zpbmkoc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4pCit7CisJc3RydWN0IG5vdXZlYXVfbW0gKm1tID0gbWFuLT5wcml2OworCWludCByZXQ7CisKKwlyZXQgPSBub3V2ZWF1X21tX2ZpbmkoJm1tKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbWFuLT5wcml2ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK25vdXZlYXVfdnJhbV9tYW5hZ2VyX2RlbChzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiwKKwkJCSBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub3V2ZWF1X2JkZXYobWFuLT5iZGV2KTsKKwlzdHJ1Y3Qgbm91dmVhdV92cmFtX2VuZ2luZSAqdnJhbSA9ICZkZXZfcHJpdi0+ZW5naW5lLnZyYW07CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisKKwl2cmFtLT5wdXQoZGV2LCAoc3RydWN0IG5vdXZlYXVfdnJhbSAqKikmbWVtLT5tbV9ub2RlKTsKK30KKworc3RhdGljIGludAorbm91dmVhdV92cmFtX21hbmFnZXJfbmV3KHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLAorCQkJIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCisJCQkgc3RydWN0IHR0bV9wbGFjZW1lbnQgKnBsYWNlbWVudCwKKwkJCSBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub3V2ZWF1X2JkZXYobWFuLT5iZGV2KTsKKwlzdHJ1Y3Qgbm91dmVhdV92cmFtX2VuZ2luZSAqdnJhbSA9ICZkZXZfcHJpdi0+ZW5naW5lLnZyYW07CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisJc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSBub3V2ZWF1X2JvKGJvKTsKKwlzdHJ1Y3Qgbm91dmVhdV92cmFtICpub2RlOworCXUzMiBzaXplX25jID0gMDsKKwlpbnQgcmV0OworCisJaWYgKG52Ym8tPnRpbGVfZmxhZ3MgJiBOT1VWRUFVX0dFTV9USUxFX05PTkNPTlRJRykKKwkJc2l6ZV9uYyA9IDEgPDwgbnZiby0+dm1hLm5vZGUtPnR5cGU7CisKKwlyZXQgPSB2cmFtLT5nZXQoZGV2LCBtZW0tPm51bV9wYWdlcyA8PCBQQUdFX1NISUZULAorCQkJbWVtLT5wYWdlX2FsaWdubWVudCA8PCBQQUdFX1NISUZULCBzaXplX25jLAorCQkJKG52Ym8tPnRpbGVfZmxhZ3MgPj4gOCkgJiAweGZmLCAmbm9kZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW5vZGUtPnBhZ2Vfc2hpZnQgPSAxMjsKKwlpZiAobnZiby0+dm1hLm5vZGUpCisJCW5vZGUtPnBhZ2Vfc2hpZnQgPSBudmJvLT52bWEubm9kZS0+dHlwZTsKKworCW1lbS0+bW1fbm9kZSA9IG5vZGU7CisJbWVtLT5zdGFydCAgID0gbm9kZS0+b2Zmc2V0ID4+IFBBR0VfU0hJRlQ7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK25vdXZlYXVfdnJhbV9tYW5hZ2VyX2RlYnVnKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG5vdXZlYXVfbW0gKm1tID0gbWFuLT5wcml2OworCXN0cnVjdCBub3V2ZWF1X21tX25vZGUgKnI7CisJdTY0IHRvdGFsID0gMCwgdHRvdGFsWzNdID0ge30sIHR1c2VkWzNdID0ge30sIHRmcmVlWzNdID0ge307CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZtbS0+bXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkociwgJm1tLT5ub2RlcywgbmxfZW50cnkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzICVzLSVkOiAweCUwMTBsbHggMHglMDEwbGx4XG4iLAorCQkgICAgICAgcHJlZml4LCByLT5mcmVlID8gImZyZWUiIDogInVzZWQiLCByLT50eXBlLAorCQkgICAgICAgKCh1NjQpci0+b2Zmc2V0IDw8IDEyKSwKKwkJICAgICAgICgoKHU2NClyLT5vZmZzZXQgKyByLT5sZW5ndGgpIDw8IDEyKSk7CisJCXRvdGFsICs9IHItPmxlbmd0aDsKKwkJdHRvdGFsW3ItPnR5cGVdICs9IHItPmxlbmd0aDsKKwkJaWYgKHItPmZyZWUpCisJCQl0ZnJlZVtyLT50eXBlXSArPSByLT5sZW5ndGg7CisJCWVsc2UKKwkJCXR1c2VkW3ItPnR5cGVdICs9IHItPmxlbmd0aDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZtbS0+bXV0ZXgpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzICB0b3RhbDogMHglMDEwbGx4XG4iLCBwcmVmaXgsIHRvdGFsIDw8IDEyKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlcyB0eXBlICVkOiAweCUwMTBsbHgsICIKKwkJCQkgICJ1c2VkIDB4JTAxMGxseCwgZnJlZSAweCUwMTBsbHhcbiIsIHByZWZpeCwKKwkJICAgICAgIGksIHR0b3RhbFtpXSA8PCAxMiwgdHVzZWRbaV0gPDwgMTIsIHRmcmVlW2ldIDw8IDEyKTsKKwl9Cit9CisKK2NvbnN0IHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlcl9mdW5jIG5vdXZlYXVfdnJhbV9tYW5hZ2VyID0geworCW5vdXZlYXVfdnJhbV9tYW5hZ2VyX2luaXQsCisJbm91dmVhdV92cmFtX21hbmFnZXJfZmluaSwKKwlub3V2ZWF1X3ZyYW1fbWFuYWdlcl9uZXcsCisJbm91dmVhdV92cmFtX21hbmFnZXJfZGVsLAorCW5vdXZlYXVfdnJhbV9tYW5hZ2VyX2RlYnVnCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYmIxMWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21tLmMKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBCZW4gU2tlZ2dzCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgorI2luY2x1ZGUgIm5vdXZlYXVfbW0uaCIKKworc3RhdGljIGlubGluZSB2b2lkCityZWdpb25fcHV0KHN0cnVjdCBub3V2ZWF1X21tICpybW0sIHN0cnVjdCBub3V2ZWF1X21tX25vZGUgKmEpCit7CisJbGlzdF9kZWwoJmEtPm5sX2VudHJ5KTsKKwlsaXN0X2RlbCgmYS0+ZmxfZW50cnkpOworCWtmcmVlKGEpOworfQorCitzdGF0aWMgc3RydWN0IG5vdXZlYXVfbW1fbm9kZSAqCityZWdpb25fc3BsaXQoc3RydWN0IG5vdXZlYXVfbW0gKnJtbSwgc3RydWN0IG5vdXZlYXVfbW1fbm9kZSAqYSwgdTMyIHNpemUpCit7CisJc3RydWN0IG5vdXZlYXVfbW1fbm9kZSAqYjsKKworCWlmIChhLT5sZW5ndGggPT0gc2l6ZSkKKwkJcmV0dXJuIGE7CisKKwliID0ga21hbGxvYyhzaXplb2YoKmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoYiA9PSBOVUxMKSkKKwkJcmV0dXJuIE5VTEw7CisKKwliLT5vZmZzZXQgPSBhLT5vZmZzZXQ7CisJYi0+bGVuZ3RoID0gc2l6ZTsKKwliLT5mcmVlICAgPSBhLT5mcmVlOworCWItPnR5cGUgICA9IGEtPnR5cGU7CisJYS0+b2Zmc2V0ICs9IHNpemU7CisJYS0+bGVuZ3RoIC09IHNpemU7CisJbGlzdF9hZGRfdGFpbCgmYi0+bmxfZW50cnksICZhLT5ubF9lbnRyeSk7CisJaWYgKGItPmZyZWUpCisJCWxpc3RfYWRkX3RhaWwoJmItPmZsX2VudHJ5LCAmYS0+ZmxfZW50cnkpOworCXJldHVybiBiOworfQorCitzdGF0aWMgc3RydWN0IG5vdXZlYXVfbW1fbm9kZSAqCitub3V2ZWF1X21tX21lcmdlKHN0cnVjdCBub3V2ZWF1X21tICpybW0sIHN0cnVjdCBub3V2ZWF1X21tX25vZGUgKnRoaXMpCit7CisJc3RydWN0IG5vdXZlYXVfbW1fbm9kZSAqcHJldiwgKm5leHQ7CisKKwkvKiB0cnkgdG8gbWVyZ2Ugd2l0aCBmcmVlIGFkamFjZW50IGVudHJpZXMgb2Ygc2FtZSB0eXBlICovCisJcHJldiA9IGxpc3RfZW50cnkodGhpcy0+bmxfZW50cnkucHJldiwgc3RydWN0IG5vdXZlYXVfbW1fbm9kZSwgbmxfZW50cnkpOworCWlmICh0aGlzLT5ubF9lbnRyeS5wcmV2ICE9ICZybW0tPm5vZGVzKSB7CisJCWlmIChwcmV2LT5mcmVlICYmIHByZXYtPnR5cGUgPT0gdGhpcy0+dHlwZSkgeworCQkJcHJldi0+bGVuZ3RoICs9IHRoaXMtPmxlbmd0aDsKKwkJCXJlZ2lvbl9wdXQocm1tLCB0aGlzKTsKKwkJCXRoaXMgPSBwcmV2OworCQl9CisJfQorCisJbmV4dCA9IGxpc3RfZW50cnkodGhpcy0+bmxfZW50cnkubmV4dCwgc3RydWN0IG5vdXZlYXVfbW1fbm9kZSwgbmxfZW50cnkpOworCWlmICh0aGlzLT5ubF9lbnRyeS5uZXh0ICE9ICZybW0tPm5vZGVzKSB7CisJCWlmIChuZXh0LT5mcmVlICYmIG5leHQtPnR5cGUgPT0gdGhpcy0+dHlwZSkgeworCQkJbmV4dC0+b2Zmc2V0ICA9IHRoaXMtPm9mZnNldDsKKwkJCW5leHQtPmxlbmd0aCArPSB0aGlzLT5sZW5ndGg7CisJCQlyZWdpb25fcHV0KHJtbSwgdGhpcyk7CisJCQl0aGlzID0gbmV4dDsKKwkJfQorCX0KKworCXJldHVybiB0aGlzOworfQorCit2b2lkCitub3V2ZWF1X21tX3B1dChzdHJ1Y3Qgbm91dmVhdV9tbSAqcm1tLCBzdHJ1Y3Qgbm91dmVhdV9tbV9ub2RlICp0aGlzKQoreworCXUzMiBibG9ja19zLCBibG9ja19sOworCisJdGhpcy0+ZnJlZSA9IHRydWU7CisJbGlzdF9hZGQoJnRoaXMtPmZsX2VudHJ5LCAmcm1tLT5mcmVlKTsKKwl0aGlzID0gbm91dmVhdV9tbV9tZXJnZShybW0sIHRoaXMpOworCisJLyogYW55IGVudGlyZWx5IGZyZWUgYmxvY2tzIG5vdz8gIHdlJ2xsIHdhbnQgdG8gcmVtb3ZlIHR5cGluZworCSAqIG9uIHRoZW0gbm93IHNvIHRoZXkgY2FuIGJlIHVzZSBmb3IgYW55IG1lbW9yeSBhbGxvY2F0aW9uCisJICovCisJYmxvY2tfcyA9IHJvdW5kdXAodGhpcy0+b2Zmc2V0LCBybW0tPmJsb2NrX3NpemUpOworCWlmIChibG9ja19zICsgcm1tLT5ibG9ja19zaXplID4gdGhpcy0+b2Zmc2V0ICsgdGhpcy0+bGVuZ3RoKQorCQlyZXR1cm47CisKKwkvKiBzcGxpdCBvZmYgYW55IHN0aWxsLXR5cGVkIHJlZ2lvbiBhdCB0aGUgc3RhcnQgKi8KKwlpZiAoYmxvY2tfcyAhPSB0aGlzLT5vZmZzZXQpIHsKKwkJaWYgKCFyZWdpb25fc3BsaXQocm1tLCB0aGlzLCBibG9ja19zIC0gdGhpcy0+b2Zmc2V0KSkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBzcGxpdCBvZmYgdGhlIHNvb24tdG8tYmUtdW50eXBlZCBibG9jayhzKSAqLworCWJsb2NrX2wgPSByb3VuZGRvd24odGhpcy0+bGVuZ3RoLCBybW0tPmJsb2NrX3NpemUpOworCWlmIChibG9ja19sICE9IHRoaXMtPmxlbmd0aCkgeworCQl0aGlzID0gcmVnaW9uX3NwbGl0KHJtbSwgdGhpcywgYmxvY2tfbCk7CisJCWlmICghdGhpcykKKwkJCXJldHVybjsKKwl9CisKKwkvKiBtYXJrIGFzIGhhdmluZyBubyB0eXBlLCBhbmQgcmV0cnkgbWVyZ2Ugd2l0aCBhbnkgYWRqYWNlbnQKKwkgKiB1bnR5cGVkIGJsb2NrcworCSAqLworCXRoaXMtPnR5cGUgPSAwOworCW5vdXZlYXVfbW1fbWVyZ2Uocm1tLCB0aGlzKTsKK30KKworaW50Citub3V2ZWF1X21tX2dldChzdHJ1Y3Qgbm91dmVhdV9tbSAqcm1tLCBpbnQgdHlwZSwgdTMyIHNpemUsIHUzMiBzaXplX25jLAorCSAgICAgICB1MzIgYWxpZ24sIHN0cnVjdCBub3V2ZWF1X21tX25vZGUgKipwbm9kZSkKK3sKKwlzdHJ1Y3Qgbm91dmVhdV9tbV9ub2RlICp0aGlzLCAqdG1wLCAqbmV4dDsKKwl1MzIgc3BsaXRvZmYsIGF2YWlsLCBhbGxvYzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0aGlzLCB0bXAsICZybW0tPmZyZWUsIGZsX2VudHJ5KSB7CisJCW5leHQgPSBsaXN0X2VudHJ5KHRoaXMtPm5sX2VudHJ5Lm5leHQsIHN0cnVjdCBub3V2ZWF1X21tX25vZGUsIG5sX2VudHJ5KTsKKwkJaWYgKHRoaXMtPm5sX2VudHJ5Lm5leHQgPT0gJnJtbS0+bm9kZXMpCisJCQluZXh0ID0gTlVMTDsKKworCQkvKiBza2lwIHdyb25nbHkgdHlwZWQgYmxvY2tzICovCisJCWlmICh0aGlzLT50eXBlICYmIHRoaXMtPnR5cGUgIT0gdHlwZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGFjY291bnQgZm9yIGFsaWdubWVudCAqLworCQlzcGxpdG9mZiA9IHRoaXMtPm9mZnNldCAmIChhbGlnbiAtIDEpOworCQlpZiAoc3BsaXRvZmYpCisJCQlzcGxpdG9mZiA9IGFsaWduIC0gc3BsaXRvZmY7CisKKwkJaWYgKHRoaXMtPmxlbmd0aCA8PSBzcGxpdG9mZikKKwkJCWNvbnRpbnVlOworCisJCS8qIGRldGVybWluZSB0b3RhbCBtZW1vcnkgYXZhaWxhYmxlIGZyb20gdGhpcywgYW5kCisJCSAqIHRoZSBuZXh0IGJsb2NrIChpZiBhcHByb3ByaWF0ZSkKKwkJICovCisJCWF2YWlsID0gdGhpcy0+bGVuZ3RoOworCQlpZiAobmV4dCAmJiBuZXh0LT5mcmVlICYmICghbmV4dC0+dHlwZSB8fCBuZXh0LT50eXBlID09IHR5cGUpKQorCQkJYXZhaWwgKz0gbmV4dC0+bGVuZ3RoOworCisJCWF2YWlsIC09IHNwbGl0b2ZmOworCisJCS8qIGRldGVybWluZSBhbGxvY2F0aW9uIHNpemUgKi8KKwkJaWYgKHNpemVfbmMpIHsKKwkJCWFsbG9jID0gbWluKGF2YWlsLCBzaXplKTsKKwkJCWFsbG9jID0gcm91bmRkb3duKGFsbG9jLCBzaXplX25jKTsKKwkJCWlmIChhbGxvYyA9PSAwKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJYWxsb2MgPSBzaXplOworCQkJaWYgKGF2YWlsIDwgYWxsb2MpCisJCQkJY29udGludWU7CisJCX0KKworCQkvKiB1bnR5cGVkIGJsb2NrLCBzcGxpdCBvZmYgYSBjaHVuayB0aGF0J3MgYSBtdWx0aXBsZQorCQkgKiBvZiBibG9ja19zaXplIGFuZCB0eXBlIGl0CisJCSAqLworCQlpZiAoIXRoaXMtPnR5cGUpIHsKKwkJCXUzMiBibG9jayA9IHJvdW5kdXAoYWxsb2MgKyBzcGxpdG9mZiwgcm1tLT5ibG9ja19zaXplKTsKKwkJCWlmICh0aGlzLT5sZW5ndGggPCBibG9jaykKKwkJCQljb250aW51ZTsKKworCQkJdGhpcyA9IHJlZ2lvbl9zcGxpdChybW0sIHRoaXMsIGJsb2NrKTsKKwkJCWlmICghdGhpcykKKwkJCQlyZXR1cm4gLUVOT01FTTsKKworCQkJdGhpcy0+dHlwZSA9IHR5cGU7CisJCX0KKworCQkvKiBzdGVhbGluZyBtZW1vcnkgZnJvbSBhZGphY2VudCBibG9jayAqLworCQlpZiAoYWxsb2MgPiB0aGlzLT5sZW5ndGgpIHsKKwkJCXUzMiBhbW91bnQgPSBhbGxvYyAtICh0aGlzLT5sZW5ndGggLSBzcGxpdG9mZik7CisKKwkJCWlmICghbmV4dC0+dHlwZSkgeworCQkJCWFtb3VudCA9IHJvdW5kdXAoYW1vdW50LCBybW0tPmJsb2NrX3NpemUpOworCisJCQkJbmV4dCA9IHJlZ2lvbl9zcGxpdChybW0sIG5leHQsIGFtb3VudCk7CisJCQkJaWYgKCFuZXh0KQorCQkJCQlyZXR1cm4gLUVOT01FTTsKKworCQkJCW5leHQtPnR5cGUgPSB0eXBlOworCQkJfQorCisJCQl0aGlzLT5sZW5ndGggKz0gYW1vdW50OworCQkJbmV4dC0+b2Zmc2V0ICs9IGFtb3VudDsKKwkJCW5leHQtPmxlbmd0aCAtPSBhbW91bnQ7CisJCQlpZiAoIW5leHQtPmxlbmd0aCkgeworCQkJCWxpc3RfZGVsKCZuZXh0LT5ubF9lbnRyeSk7CisJCQkJbGlzdF9kZWwoJm5leHQtPmZsX2VudHJ5KTsKKwkJCQlrZnJlZShuZXh0KTsKKwkJCX0KKwkJfQorCisJCWlmIChzcGxpdG9mZikgeworCQkJaWYgKCFyZWdpb25fc3BsaXQocm1tLCB0aGlzLCBzcGxpdG9mZikpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQl0aGlzID0gcmVnaW9uX3NwbGl0KHJtbSwgdGhpcywgYWxsb2MpOworCQlpZiAodGhpcyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJdGhpcy0+ZnJlZSA9IGZhbHNlOworCQlsaXN0X2RlbCgmdGhpcy0+ZmxfZW50cnkpOworCQkqcG5vZGUgPSB0aGlzOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworaW50Citub3V2ZWF1X21tX2luaXQoc3RydWN0IG5vdXZlYXVfbW0gKipwcm1tLCB1MzIgb2Zmc2V0LCB1MzIgbGVuZ3RoLCB1MzIgYmxvY2spCit7CisJc3RydWN0IG5vdXZlYXVfbW0gKnJtbTsKKwlzdHJ1Y3Qgbm91dmVhdV9tbV9ub2RlICpoZWFwOworCisJaGVhcCA9IGt6YWxsb2Moc2l6ZW9mKCpoZWFwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoZWFwKQorCQlyZXR1cm4gLUVOT01FTTsKKwloZWFwLT5mcmVlID0gdHJ1ZTsKKwloZWFwLT5vZmZzZXQgPSByb3VuZHVwKG9mZnNldCwgYmxvY2spOworCWhlYXAtPmxlbmd0aCA9IHJvdW5kZG93bihvZmZzZXQgKyBsZW5ndGgsIGJsb2NrKSAtIGhlYXAtPm9mZnNldDsKKworCXJtbSA9IGt6YWxsb2Moc2l6ZW9mKCpybW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJtbSkgeworCQlrZnJlZShoZWFwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJtbS0+YmxvY2tfc2l6ZSA9IGJsb2NrOworCW11dGV4X2luaXQoJnJtbS0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZybW0tPm5vZGVzKTsKKwlJTklUX0xJU1RfSEVBRCgmcm1tLT5mcmVlKTsKKwlsaXN0X2FkZCgmaGVhcC0+bmxfZW50cnksICZybW0tPm5vZGVzKTsKKwlsaXN0X2FkZCgmaGVhcC0+ZmxfZW50cnksICZybW0tPmZyZWUpOworCisJKnBybW0gPSBybW07CisJcmV0dXJuIDA7Cit9CisKK2ludAorbm91dmVhdV9tbV9maW5pKHN0cnVjdCBub3V2ZWF1X21tICoqcHJtbSkKK3sKKwlzdHJ1Y3Qgbm91dmVhdV9tbSAqcm1tID0gKnBybW07CisJc3RydWN0IG5vdXZlYXVfbW1fbm9kZSAqaGVhcCA9CisJCWxpc3RfZmlyc3RfZW50cnkoJnJtbS0+bm9kZXMsIHN0cnVjdCBub3V2ZWF1X21tX25vZGUsIG5sX2VudHJ5KTsKKworCWlmICghbGlzdF9pc19zaW5ndWxhcigmcm1tLT5ub2RlcykpCisJCXJldHVybiAtRUJVU1k7CisKKwlrZnJlZShoZWFwKTsKKwlrZnJlZShybW0pOworCSpwcm1tID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjM4NDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tbS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBCZW4gU2tlZ2dzCisgKi8KKworI2lmbmRlZiBfX05PVVZFQVVfUkVHSU9OX0hfXworI2RlZmluZSBfX05PVVZFQVVfUkVHSU9OX0hfXworCitzdHJ1Y3Qgbm91dmVhdV9tbV9ub2RlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5sX2VudHJ5OworCXN0cnVjdCBsaXN0X2hlYWQgZmxfZW50cnk7CisJc3RydWN0IGxpc3RfaGVhZCBybF9lbnRyeTsKKworCWJvb2wgZnJlZTsKKwlpbnQgIHR5cGU7CisKKwl1MzIgb2Zmc2V0OworCXUzMiBsZW5ndGg7Cit9OworCitzdHJ1Y3Qgbm91dmVhdV9tbSB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWU7CisKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisKKwl1MzIgYmxvY2tfc2l6ZTsKK307CisKK2ludCAgbm91dmVhdV9tbV9pbml0KHN0cnVjdCBub3V2ZWF1X21tICoqLCB1MzIgb2Zmc2V0LCB1MzIgbGVuZ3RoLCB1MzIgYmxvY2spOworaW50ICBub3V2ZWF1X21tX2Zpbmkoc3RydWN0IG5vdXZlYXVfbW0gKiopOworaW50ICBub3V2ZWF1X21tX3ByZShzdHJ1Y3Qgbm91dmVhdV9tbSAqKTsKK2ludCAgbm91dmVhdV9tbV9nZXQoc3RydWN0IG5vdXZlYXVfbW0gKiwgaW50IHR5cGUsIHUzMiBzaXplLCB1MzIgc2l6ZV9uYywKKwkJICAgIHUzMiBhbGlnbiwgc3RydWN0IG5vdXZlYXVfbW1fbm9kZSAqKik7Cit2b2lkIG5vdXZlYXVfbW1fcHV0KHN0cnVjdCBub3V2ZWF1X21tICosIHN0cnVjdCBub3V2ZWF1X21tX25vZGUgKik7CisKK2ludCAgbnY1MF92cmFtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7CitpbnQgIG52NTBfdnJhbV9uZXcoc3RydWN0IGRybV9kZXZpY2UgKiwgdTY0IHNpemUsIHUzMiBhbGlnbiwgdTMyIHNpemVfbmMsCisJCSAgICB1MzIgbWVtdHlwZSwgc3RydWN0IG5vdXZlYXVfdnJhbSAqKik7Cit2b2lkIG52NTBfdnJhbV9kZWwoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfdnJhbSAqKik7Citib29sIG52NTBfdnJhbV9mbGFnc192YWxpZChzdHJ1Y3QgZHJtX2RldmljZSAqLCB1MzIgdGlsZV9mbGFncyk7CisKK2ludCAgbnZjMF92cmFtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7CitpbnQgIG52YzBfdnJhbV9uZXcoc3RydWN0IGRybV9kZXZpY2UgKiwgdTY0IHNpemUsIHUzMiBhbGlnbiwgdTMyIG5jbWluLAorCQkgICAgdTMyIG1lbXR5cGUsIHN0cnVjdCBub3V2ZWF1X3ZyYW0gKiopOworYm9vbCBudmMwX3ZyYW1fZmxhZ3NfdmFsaWQoc3RydWN0IGRybV9kZXZpY2UgKiwgdTMyIHRpbGVfZmxhZ3MpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbm90aWZpZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbm90aWZpZXIuYwppbmRleCAyY2M1OWY4Li5mZTI5ZDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jCkBAIC05OSw3ICs5OSw2IEBACiAJCSAgICAgICBpbnQgc2l6ZSwgdWludDMyX3QgKmJfb2Zmc2V0KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKm5vYmogPSBOVUxMOwogCXN0cnVjdCBkcm1fbW1fbm9kZSAqbWVtOwogCXVpbnQzMl90IG9mZnNldDsKQEAgLTExMywzMSArMTEyLDE1IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCW9mZnNldCA9IGNoYW4tPm5vdGlmaWVyX2JvLT5iby5tZW0uc3RhcnQgPDwgUEFHRV9TSElGVDsKLQlpZiAoY2hhbi0+bm90aWZpZXJfYm8tPmJvLm1lbS5tZW1fdHlwZSA9PSBUVE1fUExfVlJBTSkgewotCQl0YXJnZXQgPSBOVl9ETUFfVEFSR0VUX1ZJRE1FTTsKLQl9IGVsc2UKLQlpZiAoY2hhbi0+bm90aWZpZXJfYm8tPmJvLm1lbS5tZW1fdHlwZSA9PSBUVE1fUExfVFQpIHsKLQkJaWYgKGRldl9wcml2LT5nYXJ0X2luZm8udHlwZSA9PSBOT1VWRUFVX0dBUlRfU0dETUEgJiYKLQkJICAgIGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkgewotCQkJcmV0ID0gbm91dmVhdV9zZ2RtYV9nZXRfcGFnZShkZXYsIG9mZnNldCwgJm9mZnNldCk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0JCQl0YXJnZXQgPSBOVl9ETUFfVEFSR0VUX1BDSTsKLQkJfSBlbHNlIHsKLQkJCXRhcmdldCA9IE5WX0RNQV9UQVJHRVRfQUdQOwotCQkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApCi0JCQkJb2Zmc2V0ICs9IGRldl9wcml2LT52bV9nYXJ0X2Jhc2U7Ci0JCX0KLQl9IGVsc2UgewotCQlOVl9FUlJPUihkZXYsICJCYWQgRE1BIHRhcmdldCwgbWVtX3R5cGUgJWQhXG4iLAotCQkJIGNoYW4tPm5vdGlmaWVyX2JvLT5iby5tZW0ubWVtX3R5cGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJaWYgKGNoYW4tPm5vdGlmaWVyX2JvLT5iby5tZW0ubWVtX3R5cGUgPT0gVFRNX1BMX1ZSQU0pCisJCXRhcmdldCA9IE5WX01FTV9UQVJHRVRfVlJBTTsKKwllbHNlCisJCXRhcmdldCA9IE5WX01FTV9UQVJHRVRfR0FSVDsKKwlvZmZzZXQgID0gY2hhbi0+bm90aWZpZXJfYm8tPmJvLm1lbS5zdGFydCA8PCBQQUdFX1NISUZUOwogCW9mZnNldCArPSBtZW0tPnN0YXJ0OwogCiAJcmV0ID0gbm91dmVhdV9ncHVvYmpfZG1hX25ldyhjaGFuLCBOVl9DTEFTU19ETUFfSU5fTUVNT1JZLCBvZmZzZXQsCi0JCQkJICAgICBtZW0tPnNpemUsIE5WX0RNQV9BQ0NFU1NfUlcsIHRhcmdldCwKKwkJCQkgICAgIG1lbS0+c2l6ZSwgTlZfTUVNX0FDQ0VTU19SVywgdGFyZ2V0LAogCQkJCSAgICAgJm5vYmopOwogCWlmIChyZXQpIHsKIAkJZHJtX21tX3B1dF9ibG9jayhtZW0pOwpAQCAtMTgxLDE1ICsxNjQsMjAgQEAKIG5vdXZlYXVfaW9jdGxfbm90aWZpZXJfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfbm90aWZpZXJvYmpfYWxsb2MgKm5hID0gZGF0YTsKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuOwogCWludCByZXQ7CiAKLQlOT1VWRUFVX0dFVF9VU0VSX0NIQU5ORUxfV0lUSF9SRVRVUk4obmEtPmNoYW5uZWwsIGZpbGVfcHJpdiwgY2hhbik7CisJLyogY29tcGxldGVseSB1bm5lY2Vzc2FyeSBmb3IgdGhlc2UgY2hpcHNldHMuLi4gKi8KKwlpZiAodW5saWtlbHkoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl9DMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJY2hhbiA9IG5vdXZlYXVfY2hhbm5lbF9nZXQoZGV2LCBmaWxlX3ByaXYsIG5hLT5jaGFubmVsKTsKKwlpZiAoSVNfRVJSKGNoYW4pKQorCQlyZXR1cm4gUFRSX0VSUihjaGFuKTsKIAogCXJldCA9IG5vdXZlYXVfbm90aWZpZXJfYWxsb2MoY2hhbiwgbmEtPmhhbmRsZSwgbmEtPnNpemUsICZuYS0+b2Zmc2V0KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7CisJbm91dmVhdV9jaGFubmVsX3B1dCgmY2hhbik7CisJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X29iamVjdC5jCmluZGV4IGRkNTcyYWQuLjMwYjY1NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9vYmplY3QuYwpAQCAtMzUsNiArMzUsMTAyIEBACiAjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKICNpbmNsdWRlICJub3V2ZWF1X2RybS5oIgogI2luY2x1ZGUgIm5vdXZlYXVfcmFtaHQuaCIKKyNpbmNsdWRlICJub3V2ZWF1X3ZtLmgiCisKK3N0cnVjdCBub3V2ZWF1X2dwdW9ial9tZXRob2QgeworCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKKwl1MzIgbXRoZDsKKwlpbnQgKCpleGVjKShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosIHUzMiBjbGFzcywgdTMyIG10aGQsIHUzMiBkYXRhKTsKK307CisKK3N0cnVjdCBub3V2ZWF1X2dwdW9ial9jbGFzcyB7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworCXN0cnVjdCBsaXN0X2hlYWQgbWV0aG9kczsKKwl1MzIgaWQ7CisJdTMyIGVuZ2luZTsKK307CisKK2ludAorbm91dmVhdV9ncHVvYmpfY2xhc3NfbmV3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBjbGFzcywgdTMyIGVuZ2luZSkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2dwdW9ial9jbGFzcyAqb2M7CisKKwlvYyA9IGt6YWxsb2Moc2l6ZW9mKCpvYyksIEdGUF9LRVJORUwpOworCWlmICghb2MpCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9MSVNUX0hFQUQoJm9jLT5tZXRob2RzKTsKKwlvYy0+aWQgPSBjbGFzczsKKwlvYy0+ZW5naW5lID0gZW5naW5lOworCWxpc3RfYWRkKCZvYy0+aGVhZCwgJmRldl9wcml2LT5jbGFzc2VzKTsKKwlyZXR1cm4gMDsKK30KKworaW50Citub3V2ZWF1X2dwdW9ial9tdGhkX25ldyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgY2xhc3MsIHUzMiBtdGhkLAorCQkJaW50ICgqZXhlYykoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqLCB1MzIsIHUzMiwgdTMyKSkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2dwdW9ial9tZXRob2QgKm9tOworCXN0cnVjdCBub3V2ZWF1X2dwdW9ial9jbGFzcyAqb2M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9jLCAmZGV2X3ByaXYtPmNsYXNzZXMsIGhlYWQpIHsKKwkJaWYgKG9jLT5pZCA9PSBjbGFzcykKKwkJCWdvdG8gZm91bmQ7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7CisKK2ZvdW5kOgorCW9tID0ga3phbGxvYyhzaXplb2YoKm9tKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvbS0+bXRoZCA9IG10aGQ7CisJb20tPmV4ZWMgPSBleGVjOworCWxpc3RfYWRkKCZvbS0+aGVhZCwgJm9jLT5tZXRob2RzKTsKKwlyZXR1cm4gMDsKK30KKworaW50Citub3V2ZWF1X2dwdW9ial9tdGhkX2NhbGwoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwKKwkJCSB1MzIgY2xhc3MsIHUzMiBtdGhkLCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjaGFuLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2dwdW9ial9tZXRob2QgKm9tOworCXN0cnVjdCBub3V2ZWF1X2dwdW9ial9jbGFzcyAqb2M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9jLCAmZGV2X3ByaXYtPmNsYXNzZXMsIGhlYWQpIHsKKwkJaWYgKG9jLT5pZCAhPSBjbGFzcykKKwkJCWNvbnRpbnVlOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkob20sICZvYy0+bWV0aG9kcywgaGVhZCkgeworCQkJaWYgKG9tLT5tdGhkID09IG10aGQpCisJCQkJcmV0dXJuIG9tLT5leGVjKGNoYW4sIGNsYXNzLCBtdGhkLCBkYXRhKTsKKwkJfQorCX0KKworCXJldHVybiAtRU5PRU5UOworfQorCitpbnQKK25vdXZlYXVfZ3B1b2JqX210aGRfY2FsbDIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNoaWQsCisJCQkgIHUzMiBjbGFzcywgdTMyIG10aGQsIHUzMiBkYXRhKQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y2hhbm5lbHMubG9jaywgZmxhZ3MpOworCWlmIChjaGlkID4gMCAmJiBjaGlkIDwgZGV2X3ByaXYtPmVuZ2luZS5maWZvLmNoYW5uZWxzKQorCQljaGFuID0gZGV2X3ByaXYtPmNoYW5uZWxzLnB0cltjaGlkXTsKKwlpZiAoY2hhbikKKwkJcmV0ID0gbm91dmVhdV9ncHVvYmpfbXRoZF9jYWxsKGNoYW4sIGNsYXNzLCBtdGhkLCBkYXRhKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y2hhbm5lbHMubG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CiAKIC8qIE5WaWRpYSB1c2VzIGNvbnRleHQgb2JqZWN0cyB0byBkcml2ZSBkcmF3aW5nIG9wZXJhdGlvbnMuCiAKQEAgLTczLDE3ICsxNjksMTQgQEAKIAkJICAgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICoqZ3B1b2JqX3JldCkKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X2VuZ2luZSAqZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmU7CisJc3RydWN0IG5vdXZlYXVfaW5zdG1lbV9lbmdpbmUgKmluc3RtZW0gPSAmZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtOwogCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqOwogCXN0cnVjdCBkcm1fbW1fbm9kZSAqcmFtaW4gPSBOVUxMOwotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAogCU5WX0RFQlVHKGRldiwgImNoJWQgc2l6ZT0ldSBhbGlnbj0lZCBmbGFncz0weCUwOHhcbiIsCiAJCSBjaGFuID8gY2hhbi0+aWQgOiAtMSwgc2l6ZSwgYWxpZ24sIGZsYWdzKTsKIAotCWlmICghZGV2X3ByaXYgfHwgIWdwdW9ial9yZXQgfHwgKmdwdW9ial9yZXQgIT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlncHVvYmogPSBremFsbG9jKHNpemVvZigqZ3B1b2JqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFncHVvYmopCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtOTgsODggKzE5MSw0MSBAQAogCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CiAKIAlpZiAoY2hhbikgewotCQlOVl9ERUJVRyhkZXYsICJjaGFubmVsIGhlYXBcbiIpOwotCiAJCXJhbWluID0gZHJtX21tX3NlYXJjaF9mcmVlKCZjaGFuLT5yYW1pbl9oZWFwLCBzaXplLCBhbGlnbiwgMCk7CiAJCWlmIChyYW1pbikKIAkJCXJhbWluID0gZHJtX21tX2dldF9ibG9jayhyYW1pbiwgc2l6ZSwgYWxpZ24pOwotCiAJCWlmICghcmFtaW4pIHsKIAkJCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmZ3B1b2JqKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JfSBlbHNlIHsKLQkJTlZfREVCVUcoZGV2LCAiZ2xvYmFsIGhlYXBcbiIpOwogCi0JCS8qIGFsbG9jYXRlIGJhY2tpbmcgcGFnZXMsIHNldHMgdmluc3QgKi8KLQkJcmV0ID0gZW5naW5lLT5pbnN0bWVtLnBvcHVsYXRlKGRldiwgZ3B1b2JqLCAmc2l6ZSk7Ci0JCWlmIChyZXQpIHsKLQkJCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmZ3B1b2JqKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQkvKiB0cnkgYW5kIGdldCBhcGVydHVyZSBzcGFjZSAqLwotCQlkbyB7Ci0JCQlpZiAoZHJtX21tX3ByZV9nZXQoJmRldl9wcml2LT5yYW1pbl9oZWFwKSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7Ci0JCQlyYW1pbiA9IGRybV9tbV9zZWFyY2hfZnJlZSgmZGV2X3ByaXYtPnJhbWluX2hlYXAsIHNpemUsCi0JCQkJCQkgICBhbGlnbiwgMCk7Ci0JCQlpZiAocmFtaW4gPT0gTlVMTCkgewotCQkJCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7Ci0JCQkJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZncHVvYmopOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCi0JCQlyYW1pbiA9IGRybV9tbV9nZXRfYmxvY2tfYXRvbWljKHJhbWluLCBzaXplLCBhbGlnbik7Ci0JCQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOwotCQl9IHdoaWxlIChyYW1pbiA9PSBOVUxMKTsKLQotCQkvKiBvbiBudjUwIGl0J3Mgb2sgdG8gZmFpbCwgd2UgaGF2ZSBhIGZhbGxiYWNrIHBhdGggKi8KLQkJaWYgKCFyYW1pbiAmJiBkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNTApIHsKLQkJCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmZ3B1b2JqKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfQotCi0JLyogaWYgd2UgZ290IGEgY2h1bmsgb2YgdGhlIGFwZXJ0dXJlLCBtYXAgcGFnZXMgaW50byBpdCAqLwotCWdwdW9iai0+aW1fcHJhbWluID0gcmFtaW47Ci0JaWYgKCFjaGFuICYmIGdwdW9iai0+aW1fcHJhbWluICYmIGRldl9wcml2LT5yYW1pbl9hdmFpbGFibGUpIHsKLQkJcmV0ID0gZW5naW5lLT5pbnN0bWVtLmJpbmQoZGV2LCBncHVvYmopOwotCQlpZiAocmV0KSB7Ci0JCQlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmdwdW9iaik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JLyogY2FsY3VsYXRlIHRoZSB2YXJpb3VzIGRpZmZlcmVudCBhZGRyZXNzZXMgZm9yIHRoZSBvYmplY3QgKi8KLQlpZiAoY2hhbikgewogCQlncHVvYmotPnBpbnN0ID0gY2hhbi0+cmFtaW4tPnBpbnN0OwogCQlpZiAoZ3B1b2JqLT5waW5zdCAhPSB+MCkKLQkJCWdwdW9iai0+cGluc3QgKz0gZ3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0OworCQkJZ3B1b2JqLT5waW5zdCArPSByYW1pbi0+c3RhcnQ7CiAKLQkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkgewotCQkJZ3B1b2JqLT5jaW5zdCA9IGdwdW9iai0+cGluc3Q7Ci0JCX0gZWxzZSB7Ci0JCQlncHVvYmotPmNpbnN0ID0gZ3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0OwotCQkJZ3B1b2JqLT52aW5zdCA9IGdwdW9iai0+aW1fcHJhbWluLT5zdGFydCArCi0JCQkJCWNoYW4tPnJhbWluLT52aW5zdDsKLQkJfQorCQlncHVvYmotPmNpbnN0ID0gcmFtaW4tPnN0YXJ0OworCQlncHVvYmotPnZpbnN0ID0gcmFtaW4tPnN0YXJ0ICsgY2hhbi0+cmFtaW4tPnZpbnN0OworCQlncHVvYmotPm5vZGUgID0gcmFtaW47CiAJfSBlbHNlIHsKLQkJaWYgKGdwdW9iai0+aW1fcHJhbWluKQotCQkJZ3B1b2JqLT5waW5zdCA9IGdwdW9iai0+aW1fcHJhbWluLT5zdGFydDsKLQkJZWxzZQorCQlyZXQgPSBpbnN0bWVtLT5nZXQoZ3B1b2JqLCBzaXplLCBhbGlnbik7CisJCWlmIChyZXQpIHsKKwkJCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmZ3B1b2JqKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSAtRU5PU1lTOworCQlpZiAoIShmbGFncyAmIE5WT0JKX0ZMQUdfRE9OVF9NQVApKQorCQkJcmV0ID0gaW5zdG1lbS0+bWFwKGdwdW9iaik7CisJCWlmIChyZXQpCiAJCQlncHVvYmotPnBpbnN0ID0gfjA7Ci0JCWdwdW9iai0+Y2luc3QgPSAweGRlYWRiZWVmOworCisJCWdwdW9iai0+Y2luc3QgPSBOVk9CSl9DSU5TVF9HTE9CQUw7CiAJfQogCiAJaWYgKGdwdW9iai0+ZmxhZ3MgJiBOVk9CSl9GTEFHX1pFUk9fQUxMT0MpIHsKLQkJaW50IGk7Ci0KIAkJZm9yIChpID0gMDsgaSA8IGdwdW9iai0+c2l6ZTsgaSArPSA0KQogCQkJbnZfd28zMihncHVvYmosIGksIDApOwotCQllbmdpbmUtPmluc3RtZW0uZmx1c2goZGV2KTsKKwkJaW5zdG1lbS0+Zmx1c2goZGV2KTsKIAl9CiAKIApAQCAtMTk1LDYgKzI0MSw3IEBACiAJTlZfREVCVUcoZGV2LCAiXG4iKTsKIAogCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+Z3B1b2JqX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+Y2xhc3Nlcyk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKIAlkZXZfcHJpdi0+cmFtaW5fYmFzZSA9IH4wOwogCkBAIC0yMDUsOSArMjUyLDIwIEBACiBub3V2ZWF1X2dwdW9ial90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfZ3B1b2JqX21ldGhvZCAqb20sICp0bTsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmpfY2xhc3MgKm9jLCAqdGM7CiAKIAlOVl9ERUJVRyhkZXYsICJcbiIpOwogCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9jLCB0YywgJmRldl9wcml2LT5jbGFzc2VzLCBoZWFkKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvbSwgdG0sICZvYy0+bWV0aG9kcywgaGVhZCkgeworCQkJbGlzdF9kZWwoJm9tLT5oZWFkKTsKKwkJCWtmcmVlKG9tKTsKKwkJfQorCQlsaXN0X2RlbCgmb2MtPmhlYWQpOworCQlrZnJlZShvYyk7CisJfQorCiAJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+Z3B1b2JqX2xpc3QpKTsKIH0KIApAQCAtMjE5LDI2ICsyNzcsMzQgQEAKIAkJY29udGFpbmVyX29mKHJlZiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqLCByZWZjb3VudCk7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGdwdW9iai0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfZW5naW5lICplbmdpbmUgPSAmZGV2X3ByaXYtPmVuZ2luZTsKKwlzdHJ1Y3Qgbm91dmVhdV9pbnN0bWVtX2VuZ2luZSAqaW5zdG1lbSA9ICZkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW07CiAJaW50IGk7CiAKIAlOVl9ERUJVRyhkZXYsICJncHVvYmogJXBcbiIsIGdwdW9iaik7CiAKLQlpZiAoZ3B1b2JqLT5pbV9wcmFtaW4gJiYgKGdwdW9iai0+ZmxhZ3MgJiBOVk9CSl9GTEFHX1pFUk9fRlJFRSkpIHsKKwlpZiAoZ3B1b2JqLT5ub2RlICYmIChncHVvYmotPmZsYWdzICYgTlZPQkpfRkxBR19aRVJPX0ZSRUUpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBncHVvYmotPnNpemU7IGkgKz0gNCkKIAkJCW52X3dvMzIoZ3B1b2JqLCBpLCAwKTsKLQkJZW5naW5lLT5pbnN0bWVtLmZsdXNoKGRldik7CisJCWluc3RtZW0tPmZsdXNoKGRldik7CiAJfQogCiAJaWYgKGdwdW9iai0+ZHRvcikKIAkJZ3B1b2JqLT5kdG9yKGRldiwgZ3B1b2JqKTsKIAotCWlmIChncHVvYmotPmltX2JhY2tpbmcpCi0JCWVuZ2luZS0+aW5zdG1lbS5jbGVhcihkZXYsIGdwdW9iaik7CisJaWYgKGdwdW9iai0+Y2luc3QgPT0gTlZPQkpfQ0lOU1RfR0xPQkFMKSB7CisJCWlmIChncHVvYmotPm5vZGUpIHsKKwkJCWluc3RtZW0tPnVubWFwKGdwdW9iaik7CisJCQlpbnN0bWVtLT5wdXQoZ3B1b2JqKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChncHVvYmotPm5vZGUpIHsKKwkJCXNwaW5fbG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCQkJZHJtX21tX3B1dF9ibG9jayhncHVvYmotPm5vZGUpOworCQkJc3Bpbl91bmxvY2soJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKKwkJfQorCX0KIAogCXNwaW5fbG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOwotCWlmIChncHVvYmotPmltX3ByYW1pbikKLQkJZHJtX21tX3B1dF9ibG9jayhncHVvYmotPmltX3ByYW1pbik7CiAJbGlzdF9kZWwoJmdwdW9iai0+bGlzdCk7CiAJc3Bpbl91bmxvY2soJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKIApAQCAtMjc4LDcgKzM0NCw3IEBACiAJa3JlZl9pbml0KCZncHVvYmotPnJlZmNvdW50KTsKIAlncHVvYmotPnNpemUgID0gc2l6ZTsKIAlncHVvYmotPnBpbnN0ID0gcGluc3Q7Ci0JZ3B1b2JqLT5jaW5zdCA9IDB4ZGVhZGJlZWY7CisJZ3B1b2JqLT5jaW5zdCA9IE5WT0JKX0NJTlNUX0dMT0JBTDsKIAlncHVvYmotPnZpbnN0ID0gdmluc3Q7CiAKIAlpZiAoZ3B1b2JqLT5mbGFncyAmIE5WT0JKX0ZMQUdfWkVST19BTExPQykgewpAQCAtMzM1LDExNSArNDAxLDE1MiBAQAogICAgVGhlIG1ldGhvZCBiZWxvdyBjcmVhdGVzIGEgRE1BIG9iamVjdCBpbiBpbnN0YW5jZSBSQU0gYW5kIHJldHVybnMgYSBoYW5kbGUKICAgIHRvIGl0IHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IHVwIGNvbnRleHQgb2JqZWN0cy4KICovCi1pbnQKLW5vdXZlYXVfZ3B1b2JqX2RtYV9uZXcoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGNsYXNzLAotCQkgICAgICAgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplLCBpbnQgYWNjZXNzLAotCQkgICAgICAgaW50IHRhcmdldCwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICoqZ3B1b2JqKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9pbnN0bWVtX2VuZ2luZSAqaW5zdG1lbSA9ICZkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW07Ci0JaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgImNoJWQgY2xhc3M9MHglMDR4IG9mZnNldD0weCVsbHggc2l6ZT0weCVsbHhcbiIsCi0JCSBjaGFuLT5pZCwgY2xhc3MsIG9mZnNldCwgc2l6ZSk7Ci0JTlZfREVCVUcoZGV2LCAiYWNjZXNzPSVkIHRhcmdldD0lZFxuIiwgYWNjZXNzLCB0YXJnZXQpOwordm9pZAorbnY1MF9ncHVvYmpfZG1hX2luaXQoc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpvYmosIHUzMiBvZmZzZXQsIGludCBjbGFzcywKKwkJICAgICB1NjQgYmFzZSwgdTY0IHNpemUsIGludCB0YXJnZXQsIGludCBhY2Nlc3MsCisJCSAgICAgdTMyIHR5cGUsIHUzMiBjb21wKQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9pbnN0bWVtX2VuZ2luZSAqcGluc3RtZW0gPSAmZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtOworCXUzMiBmbGFnczA7CisKKwlmbGFnczAgID0gKGNvbXAgPDwgMjkpIHwgKHR5cGUgPDwgMjIpIHwgY2xhc3M7CisJZmxhZ3MwIHw9IDB4MDAxMDAwMDA7CisKKwlzd2l0Y2ggKGFjY2VzcykgeworCWNhc2UgTlZfTUVNX0FDQ0VTU19STzogZmxhZ3MwIHw9IDB4MDAwNDAwMDA7IGJyZWFrOworCWNhc2UgTlZfTUVNX0FDQ0VTU19SVzoKKwljYXNlIE5WX01FTV9BQ0NFU1NfV086IGZsYWdzMCB8PSAweDAwMDgwMDAwOyBicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAKIAlzd2l0Y2ggKHRhcmdldCkgewotCWNhc2UgTlZfRE1BX1RBUkdFVF9BR1A6Ci0JCW9mZnNldCArPSBkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfYmFzZTsKKwljYXNlIE5WX01FTV9UQVJHRVRfVlJBTToKKwkJZmxhZ3MwIHw9IDB4MDAwMTAwMDA7CisJCWJyZWFrOworCWNhc2UgTlZfTUVNX1RBUkdFVF9QQ0k6CisJCWZsYWdzMCB8PSAweDAwMDIwMDAwOworCQlicmVhazsKKwljYXNlIE5WX01FTV9UQVJHRVRfUENJX05PU05PT1A6CisJCWZsYWdzMCB8PSAweDAwMDMwMDAwOworCQlicmVhazsKKwljYXNlIE5WX01FTV9UQVJHRVRfR0FSVDoKKwkJYmFzZSArPSBkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfYmFzZTsKKwlkZWZhdWx0OgorCQlmbGFnczAgJj0gfjB4MDAxMDAwMDA7CisJCWJyZWFrOworCX0KKworCS8qIGNvbnZlcnQgdG8gYmFzZSArIGxpbWl0ICovCisJc2l6ZSA9IChiYXNlICsgc2l6ZSkgLSAxOworCisJbnZfd28zMihvYmosIG9mZnNldCArIDB4MDAsIGZsYWdzMCk7CisJbnZfd28zMihvYmosIG9mZnNldCArIDB4MDQsIGxvd2VyXzMyX2JpdHMoc2l6ZSkpOworCW52X3dvMzIob2JqLCBvZmZzZXQgKyAweDA4LCBsb3dlcl8zMl9iaXRzKGJhc2UpKTsKKwludl93bzMyKG9iaiwgb2Zmc2V0ICsgMHgwYywgdXBwZXJfMzJfYml0cyhzaXplKSA8PCAyNCB8CisJCQkJICAgIHVwcGVyXzMyX2JpdHMoYmFzZSkpOworCW52X3dvMzIob2JqLCBvZmZzZXQgKyAweDEwLCAweDAwMDAwMDAwKTsKKwludl93bzMyKG9iaiwgb2Zmc2V0ICsgMHgxNCwgMHgwMDAwMDAwMCk7CisKKwlwaW5zdG1lbS0+Zmx1c2gob2JqLT5kZXYpOworfQorCitpbnQKK252NTBfZ3B1b2JqX2RtYV9uZXcoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGNsYXNzLCB1NjQgYmFzZSwgdTY0IHNpemUsCisJCSAgICBpbnQgdGFyZ2V0LCBpbnQgYWNjZXNzLCB1MzIgdHlwZSwgdTMyIGNvbXAsCisJCSAgICBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKipwb2JqKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CisJaW50IHJldDsKKworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ldyhkZXYsIGNoYW4sIDI0LCAxNiwgTlZPQkpfRkxBR19aRVJPX0ZSRUUsIHBvYmopOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwludjUwX2dwdW9ial9kbWFfaW5pdCgqcG9iaiwgMCwgY2xhc3MsIGJhc2UsIHNpemUsIHRhcmdldCwKKwkJCSAgICAgYWNjZXNzLCB0eXBlLCBjb21wKTsKKwlyZXR1cm4gMDsKK30KKworaW50Citub3V2ZWF1X2dwdW9ial9kbWFfbmV3KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBjbGFzcywgdTY0IGJhc2UsCisJCSAgICAgICB1NjQgc2l6ZSwgaW50IGFjY2VzcywgaW50IHRhcmdldCwKKwkJICAgICAgIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKnBvYmopCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY2hhbi0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqb2JqOworCXUzMiBmbGFnczAsIGZsYWdzMjsKKwlpbnQgcmV0OworCisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApIHsKKwkJdTMyIGNvbXAgPSAodGFyZ2V0ID09IE5WX01FTV9UQVJHRVRfVk0pID8gTlZfTUVNX0NPTVBfVk0gOiAwOworCQl1MzIgdHlwZSA9ICh0YXJnZXQgPT0gTlZfTUVNX1RBUkdFVF9WTSkgPyBOVl9NRU1fVFlQRV9WTSA6IDA7CisKKwkJcmV0dXJuIG52NTBfZ3B1b2JqX2RtYV9uZXcoY2hhbiwgY2xhc3MsIGJhc2UsIHNpemUsCisJCQkJCSAgIHRhcmdldCwgYWNjZXNzLCB0eXBlLCBjb21wLCBwb2JqKTsKKwl9CisKKwlpZiAodGFyZ2V0ID09IE5WX01FTV9UQVJHRVRfR0FSVCkgeworCQlpZiAoZGV2X3ByaXYtPmdhcnRfaW5mby50eXBlID09IE5PVVZFQVVfR0FSVF9BR1ApIHsKKwkJCXRhcmdldCA9IE5WX01FTV9UQVJHRVRfUENJX05PU05PT1A7CisJCQliYXNlICArPSBkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfYmFzZTsKKwkJfSBlbHNlCisJCWlmIChiYXNlICE9IDApIHsKKwkJCWJhc2UgPSBub3V2ZWF1X3NnZG1hX2dldF9waHlzaWNhbChkZXYsIGJhc2UpOworCQkJdGFyZ2V0ID0gTlZfTUVNX1RBUkdFVF9QQ0k7CisJCX0gZWxzZSB7CisJCQlub3V2ZWF1X2dwdW9ial9yZWYoZGV2X3ByaXYtPmdhcnRfaW5mby5zZ19jdHhkbWEsIHBvYmopOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlmbGFnczAgID0gY2xhc3M7CisJZmxhZ3MwIHw9IDB4MDAwMDMwMDA7IC8qIFBUIHByZXNlbnQsIFBUIGxpbmVhciAqLworCWZsYWdzMiAgPSAwOworCisJc3dpdGNoICh0YXJnZXQpIHsKKwljYXNlIE5WX01FTV9UQVJHRVRfUENJOgorCQlmbGFnczAgfD0gMHgwMDAyMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBOVl9NRU1fVEFSR0VUX1BDSV9OT1NOT09QOgorCQlmbGFnczAgfD0gMHgwMDAzMDAwMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQogCi0JcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3KGRldiwgY2hhbiwKLQkJCQkgbm91dmVhdV9ncHVvYmpfY2xhc3NfaW5zdG1lbV9zaXplKGRldiwgY2xhc3MpLAotCQkJCSAxNiwgTlZPQkpfRkxBR19aRVJPX0FMTE9DIHwKLQkJCQkgTlZPQkpfRkxBR19aRVJPX0ZSRUUsIGdwdW9iaik7Ci0JaWYgKHJldCkgewotCQlOVl9FUlJPUihkZXYsICJFcnJvciBjcmVhdGluZyBncHVvYmo6ICVkXG4iLCByZXQpOworCXN3aXRjaCAoYWNjZXNzKSB7CisJY2FzZSBOVl9NRU1fQUNDRVNTX1JPOgorCQlmbGFnczAgfD0gMHgwMDAwNDAwMDsKKwkJYnJlYWs7CisJY2FzZSBOVl9NRU1fQUNDRVNTX1dPOgorCQlmbGFnczAgfD0gMHgwMDAwODAwMDsKKwlkZWZhdWx0OgorCQlmbGFnczIgfD0gMHgwMDAwMDAwMjsKKwkJYnJlYWs7CisJfQorCisJZmxhZ3MwIHw9IChiYXNlICYgMHgwMDAwMGZmZikgPDwgMjA7CisJZmxhZ3MyIHw9IChiYXNlICYgMHhmZmZmZjAwMCk7CisKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBjaGFuLCAxNiwgMTYsIE5WT0JKX0ZMQUdfWkVST19GUkVFLCAmb2JqKTsKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCX0KIAotCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNTApIHsKLQkJdWludDMyX3QgZnJhbWUsIGFkanVzdCwgcHRlX2ZsYWdzID0gMDsKKwludl93bzMyKG9iaiwgMHgwMCwgZmxhZ3MwKTsKKwludl93bzMyKG9iaiwgMHgwNCwgc2l6ZSAtIDEpOworCW52X3dvMzIob2JqLCAweDA4LCBmbGFnczIpOworCW52X3dvMzIob2JqLCAweDBjLCBmbGFnczIpOwogCi0JCWlmIChhY2Nlc3MgIT0gTlZfRE1BX0FDQ0VTU19STykKLQkJCXB0ZV9mbGFncyB8PSAoMTw8MSk7Ci0JCWFkanVzdCA9IG9mZnNldCAmICAweDAwMDAwZmZmOwotCQlmcmFtZSAgPSBvZmZzZXQgJiB+MHgwMDAwMGZmZjsKLQotCQludl93bzMyKCpncHVvYmosICAwLCAoKDE8PDEyKSB8ICgxPDwxMykgfCAoYWRqdXN0IDw8IDIwKSB8Ci0JCQkJICAgICAgKGFjY2VzcyA8PCAxNCkgfCAodGFyZ2V0IDw8IDE2KSB8Ci0JCQkJICAgICAgY2xhc3MpKTsKLQkJbnZfd28zMigqZ3B1b2JqLCAgNCwgc2l6ZSAtIDEpOwotCQludl93bzMyKCpncHVvYmosICA4LCBmcmFtZSB8IHB0ZV9mbGFncyk7Ci0JCW52X3dvMzIoKmdwdW9iaiwgMTIsIGZyYW1lIHwgcHRlX2ZsYWdzKTsKLQl9IGVsc2UgewotCQl1aW50NjRfdCBsaW1pdCA9IG9mZnNldCArIHNpemUgLSAxOwotCQl1aW50MzJfdCBmbGFnczAsIGZsYWdzNTsKLQotCQlpZiAodGFyZ2V0ID09IE5WX0RNQV9UQVJHRVRfVklETUVNKSB7Ci0JCQlmbGFnczAgPSAweDAwMTkwMDAwOwotCQkJZmxhZ3M1ID0gMHgwMDAxMDAwMDsKLQkJfSBlbHNlIHsKLQkJCWZsYWdzMCA9IDB4N2ZjMDAwMDA7Ci0JCQlmbGFnczUgPSAweDAwMDgwMDAwOwotCQl9Ci0KLQkJbnZfd28zMigqZ3B1b2JqLCAgMCwgZmxhZ3MwIHwgY2xhc3MpOwotCQludl93bzMyKCpncHVvYmosICA0LCBsb3dlcl8zMl9iaXRzKGxpbWl0KSk7Ci0JCW52X3dvMzIoKmdwdW9iaiwgIDgsIGxvd2VyXzMyX2JpdHMob2Zmc2V0KSk7Ci0JCW52X3dvMzIoKmdwdW9iaiwgMTIsICgodXBwZXJfMzJfYml0cyhsaW1pdCkgJiAweGZmKSA8PCAyNCkgfAotCQkJCSAgICAgICh1cHBlcl8zMl9iaXRzKG9mZnNldCkgJiAweGZmKSk7Ci0JCW52X3dvMzIoKmdwdW9iaiwgMjAsIGZsYWdzNSk7Ci0JfQotCi0JaW5zdG1lbS0+Zmx1c2goZGV2KTsKLQotCSgqZ3B1b2JqKS0+ZW5naW5lID0gTlZPQkpfRU5HSU5FX1NXOwotCSgqZ3B1b2JqKS0+Y2xhc3MgID0gY2xhc3M7CisJb2JqLT5lbmdpbmUgPSBOVk9CSl9FTkdJTkVfU1c7CisJb2JqLT5jbGFzcyAgPSBjbGFzczsKKwkqcG9iaiA9IG9iajsKIAlyZXR1cm4gMDsKIH0KIAotaW50Ci1ub3V2ZWF1X2dwdW9ial9nYXJ0X2RtYV9uZXcoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwKLQkJCSAgICB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUsIGludCBhY2Nlc3MsCi0JCQkgICAgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICoqZ3B1b2JqLAotCQkJICAgIHVpbnQzMl90ICpvX3JldCkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IHJldDsKLQotCWlmIChkZXZfcHJpdi0+Z2FydF9pbmZvLnR5cGUgPT0gTk9VVkVBVV9HQVJUX0FHUCB8fAotCSAgICAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCAmJgotCSAgICAgZGV2X3ByaXYtPmdhcnRfaW5mby50eXBlID09IE5PVVZFQVVfR0FSVF9TR0RNQSkpIHsKLQkJcmV0ID0gbm91dmVhdV9ncHVvYmpfZG1hX25ldyhjaGFuLCBOVl9DTEFTU19ETUFfSU5fTUVNT1JZLAotCQkJCQkgICAgIG9mZnNldCArIGRldl9wcml2LT52bV9nYXJ0X2Jhc2UsCi0JCQkJCSAgICAgc2l6ZSwgYWNjZXNzLCBOVl9ETUFfVEFSR0VUX0FHUCwKLQkJCQkJICAgICBncHVvYmopOwotCQlpZiAob19yZXQpCi0JCQkqb19yZXQgPSAwOwotCX0gZWxzZQotCWlmIChkZXZfcHJpdi0+Z2FydF9pbmZvLnR5cGUgPT0gTk9VVkVBVV9HQVJUX1NHRE1BKSB7Ci0JCW5vdXZlYXVfZ3B1b2JqX3JlZihkZXZfcHJpdi0+Z2FydF9pbmZvLnNnX2N0eGRtYSwgZ3B1b2JqKTsKLQkJaWYgKG9mZnNldCAmIH4weGZmZmZmZmZmVUxMKSB7Ci0JCQlOVl9FUlJPUihkZXYsICJvYmogb2Zmc2V0IGV4Y2VlZHMgMzItYml0c1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAob19yZXQpCi0JCQkqb19yZXQgPSAodWludDMyX3Qpb2Zmc2V0OwotCQlyZXQgPSAoKmdwdW9iaiAhPSBOVUxMKSA/IDAgOiAtRUlOVkFMOwotCX0gZWxzZSB7Ci0JCU5WX0VSUk9SKGRldiwgIkludmFsaWQgR0FSVCB0eXBlICVkXG4iLCBkZXZfcHJpdi0+Z2FydF9pbmZvLnR5cGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCiAvKiBDb250ZXh0IG9iamVjdHMgaW4gdGhlIGluc3RhbmNlIFJBTSBoYXZlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlLgogICogT24gTlY0MCB0aGV5IGFyZSAzMiBieXRlIGxvbmcsIG9uIE5WMzAgYW5kIHNtYWxsZXIgMTYgYnl0ZXMuCiAKQEAgLTQ5NSw2OCArNTk4LDEzIEBACiAgICBlbnRyeVs1XToKICAgIHNldCB0byAwPwogKi8KLWludAotbm91dmVhdV9ncHVvYmpfZ3JfbmV3KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBjbGFzcywKLQkJICAgICAgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICoqZ3B1b2JqKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgcmV0OwotCi0JTlZfREVCVUcoZGV2LCAiY2glZCBjbGFzcz0weCUwNHhcbiIsIGNoYW4tPmlkLCBjbGFzcyk7Ci0KLQlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBjaGFuLAotCQkJCSBub3V2ZWF1X2dwdW9ial9jbGFzc19pbnN0bWVtX3NpemUoZGV2LCBjbGFzcyksCi0JCQkJIDE2LAotCQkJCSBOVk9CSl9GTEFHX1pFUk9fQUxMT0MgfCBOVk9CSl9GTEFHX1pFUk9fRlJFRSwKLQkJCQkgZ3B1b2JqKTsKLQlpZiAocmV0KSB7Ci0JCU5WX0VSUk9SKGRldiwgIkVycm9yIGNyZWF0aW5nIGdwdW9iajogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApIHsKLQkJbnZfd28zMigqZ3B1b2JqLCAgMCwgY2xhc3MpOwotCQludl93bzMyKCpncHVvYmosIDIwLCAweDAwMDEwMDAwKTsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKGNsYXNzKSB7Ci0JCWNhc2UgTlZfQ0xBU1NfTlVMTDoKLQkJCW52X3dvMzIoKmdwdW9iaiwgMCwgMHgwMDAwMTAzMCk7Ci0JCQludl93bzMyKCpncHVvYmosIDQsIDB4RkZGRkZGRkYpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl80MCkgewotCQkJCW52X3dvMzIoKmdwdW9iaiwgMCwgY2xhc3MpOwotI2lmZGVmIF9fQklHX0VORElBTgotCQkJCW52X3dvMzIoKmdwdW9iaiwgOCwgMHgwMTAwMDAwMCk7Ci0jZW5kaWYKLQkJCX0gZWxzZSB7Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JCQkJbnZfd28zMigqZ3B1b2JqLCAwLCBjbGFzcyB8IDB4MDAwODAwMDApOwotI2Vsc2UKLQkJCQludl93bzMyKCpncHVvYmosIDAsIGNsYXNzKTsKLSNlbmRpZgotCQkJfQotCQl9Ci0JfQotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwotCi0JKCpncHVvYmopLT5lbmdpbmUgPSBOVk9CSl9FTkdJTkVfR1I7Ci0JKCpncHVvYmopLT5jbGFzcyAgPSBjbGFzczsKLQlyZXR1cm4gMDsKLX0KLQotaW50CitzdGF0aWMgaW50CiBub3V2ZWF1X2dwdW9ial9zd19uZXcoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGNsYXNzLAogCQkgICAgICBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKipncHVvYmpfcmV0KQogewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdjsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjaGFuLT5kZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqOwogCi0JaWYgKCFjaGFuIHx8ICFncHVvYmpfcmV0IHx8ICpncHVvYmpfcmV0ICE9IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCWRldl9wcml2ID0gY2hhbi0+ZGV2LT5kZXZfcHJpdmF0ZTsKLQogCWdwdW9iaiA9IGt6YWxsb2Moc2l6ZW9mKCpncHVvYmopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWdwdW9iaikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC01NzMsNiArNjIxLDEwOSBAQAogCXJldHVybiAwOwogfQogCitpbnQKK25vdXZlYXVfZ3B1b2JqX2dyX25ldyhzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCB1MzIgaGFuZGxlLCBpbnQgY2xhc3MpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY2hhbi0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBub3V2ZWF1X2dwdW9ial9jbGFzcyAqb2M7CisJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpncHVvYmo7CisJaW50IHJldDsKKworCU5WX0RFQlVHKGRldiwgImNoJWQgY2xhc3M9MHglMDR4XG4iLCBjaGFuLT5pZCwgY2xhc3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYywgJmRldl9wcml2LT5jbGFzc2VzLCBoZWFkKSB7CisJCWlmIChvYy0+aWQgPT0gY2xhc3MpCisJCQlnb3RvIGZvdW5kOworCX0KKworCU5WX0VSUk9SKGRldiwgImlsbGVnYWwgb2JqZWN0IGNsYXNzOiAweCV4XG4iLCBjbGFzcyk7CisJcmV0dXJuIC1FSU5WQUw7CisKK2ZvdW5kOgorCXN3aXRjaCAob2MtPmVuZ2luZSkgeworCWNhc2UgTlZPQkpfRU5HSU5FX1NXOgorCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WX0MwKSB7CisJCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9zd19uZXcoY2hhbiwgY2xhc3MsICZncHVvYmopOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJZ290byBpbnNlcnQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBOVk9CSl9FTkdJTkVfR1I6CisJCWlmICgoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl8yMCAmJiAhY2hhbi0+cmFtaW5fZ3JjdHgpIHx8CisJCSAgICAoZGV2X3ByaXYtPmNhcmRfdHlwZSAgPCBOVl8yMCAmJiAhY2hhbi0+cGdyYXBoX2N0eCkpIHsKKwkJCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9CisJCQkJJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CisKKwkJCXJldCA9IHBncmFwaC0+Y3JlYXRlX2NvbnRleHQoY2hhbik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBOVk9CSl9FTkdJTkVfQ1JZUFQ6CisJCWlmICghY2hhbi0+Y3J5cHRfY3R4KSB7CisJCQlzdHJ1Y3Qgbm91dmVhdV9jcnlwdF9lbmdpbmUgKnBjcnlwdCA9CisJCQkJJmRldl9wcml2LT5lbmdpbmUuY3J5cHQ7CisKKwkJCXJldCA9IHBjcnlwdC0+Y3JlYXRlX2NvbnRleHQoY2hhbik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJYnJlYWs7CisJfQorCisJLyogd2UncmUgZG9uZSBpZiB0aGlzIGlzIGZlcm1pICovCisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfQzApCisJCXJldHVybiAwOworCisJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3KGRldiwgY2hhbiwKKwkJCQkgbm91dmVhdV9ncHVvYmpfY2xhc3NfaW5zdG1lbV9zaXplKGRldiwgY2xhc3MpLAorCQkJCSAxNiwKKwkJCQkgTlZPQkpfRkxBR19aRVJPX0FMTE9DIHwgTlZPQkpfRkxBR19aRVJPX0ZSRUUsCisJCQkJICZncHVvYmopOworCWlmIChyZXQpIHsKKwkJTlZfRVJST1IoZGV2LCAiZXJyb3IgY3JlYXRpbmcgZ3B1b2JqOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgeworCQludl93bzMyKGdwdW9iaiwgIDAsIGNsYXNzKTsKKwkJbnZfd28zMihncHVvYmosIDIwLCAweDAwMDEwMDAwKTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGNsYXNzKSB7CisJCWNhc2UgTlZfQ0xBU1NfTlVMTDoKKwkJCW52X3dvMzIoZ3B1b2JqLCAwLCAweDAwMDAxMDMwKTsKKwkJCW52X3dvMzIoZ3B1b2JqLCA0LCAweEZGRkZGRkZGKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNDApIHsKKwkJCQludl93bzMyKGdwdW9iaiwgMCwgY2xhc3MpOworI2lmZGVmIF9fQklHX0VORElBTgorCQkJCW52X3dvMzIoZ3B1b2JqLCA4LCAweDAxMDAwMDAwKTsKKyNlbmRpZgorCQkJfSBlbHNlIHsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCQludl93bzMyKGdwdW9iaiwgMCwgY2xhc3MgfCAweDAwMDgwMDAwKTsKKyNlbHNlCisJCQkJbnZfd28zMihncHVvYmosIDAsIGNsYXNzKTsKKyNlbmRpZgorCQkJfQorCQl9CisJfQorCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOworCisJZ3B1b2JqLT5lbmdpbmUgPSBvYy0+ZW5naW5lOworCWdwdW9iai0+Y2xhc3MgID0gb2MtPmlkOworCitpbnNlcnQ6CisJcmV0ID0gbm91dmVhdV9yYW1odF9pbnNlcnQoY2hhbiwgaGFuZGxlLCBncHVvYmopOworCWlmIChyZXQpCisJCU5WX0VSUk9SKGRldiwgImVycm9yIGFkZGluZyBncHVvYmogdG8gUkFNSFQ6ICVkXG4iLCByZXQpOworCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmZ3B1b2JqKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50CiBub3V2ZWF1X2dwdW9ial9jaGFubmVsX2luaXRfcHJhbWluKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCiB7CkBAIC01ODUsNyArNzM2LDcgQEAKIAlOVl9ERUJVRyhkZXYsICJjaCVkXG4iLCBjaGFuLT5pZCk7CiAKIAkvKiBCYXNlIGFtb3VudCBmb3Igb2JqZWN0IHN0b3JhZ2UgKDRLaUIgZW5vdWdoPykgKi8KLQlzaXplID0gMHgxMDAwOworCXNpemUgPSAweDIwMDA7CiAJYmFzZSA9IDA7CiAKIAkvKiBQR1JBUEggY29udGV4dCAqLwpAQCAtNjI0LDEyICs3NzUsMzAgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfaW5zdG1lbV9lbmdpbmUgKmluc3RtZW0gPSAmZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtOwogCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqdnJhbSA9IE5VTEwsICp0dCA9IE5VTEw7Ci0JaW50IHJldCwgaTsKKwlpbnQgcmV0OwogCiAJTlZfREVCVUcoZGV2LCAiY2glZCB2cmFtPTB4JTA4eCB0dD0weCUwOHhcbiIsIGNoYW4tPmlkLCB2cmFtX2gsIHR0X2gpOwogCisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfQzApIHsKKwkJc3RydWN0IG5vdXZlYXVfdm0gKnZtID0gZGV2X3ByaXYtPmNoYW5fdm07CisJCXN0cnVjdCBub3V2ZWF1X3ZtX3BnZCAqdnBnZDsKKworCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBOVUxMLCA0MDk2LCAweDEwMDAsIDAsCisJCQkJCSAmY2hhbi0+cmFtaW4pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlub3V2ZWF1X3ZtX3JlZih2bSwgJmNoYW4tPnZtLCBOVUxMKTsKKworCQl2cGdkID0gbGlzdF9maXJzdF9lbnRyeSgmdm0tPnBnZF9saXN0LCBzdHJ1Y3Qgbm91dmVhdV92bV9wZ2QsIGhlYWQpOworCQludl93bzMyKGNoYW4tPnJhbWluLCAweDAyMDAsIGxvd2VyXzMyX2JpdHModnBnZC0+b2JqLT52aW5zdCkpOworCQludl93bzMyKGNoYW4tPnJhbWluLCAweDAyMDQsIHVwcGVyXzMyX2JpdHModnBnZC0+b2JqLT52aW5zdCkpOworCQludl93bzMyKGNoYW4tPnJhbWluLCAweDAyMDgsIDB4ZmZmZmZmZmYpOworCQludl93bzMyKGNoYW4tPnJhbWluLCAweDAyMGMsIDB4MDAwMDAwZmYpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKiBBbGxvY2F0ZSBhIGNodW5rIG9mIG1lbW9yeSBmb3IgcGVyLWNoYW5uZWwgb2JqZWN0IHN0b3JhZ2UgKi8KIAlyZXQgPSBub3V2ZWF1X2dwdW9ial9jaGFubmVsX2luaXRfcHJhbWluKGNoYW4pOwogCWlmIChyZXQpIHsKQEAgLTYzOSwxNCArODA4LDEyIEBACiAKIAkvKiBOVjUwIFZNCiAJICogIC0gQWxsb2NhdGUgcGVyLWNoYW5uZWwgcGFnZS1kaXJlY3RvcnkKLQkgKiAgLSBNYXAgR0FSVCBhbmQgVlJBTSBpbnRvIHRoZSBjaGFubmVsJ3MgYWRkcmVzcyBzcGFjZSBhdCB0aGUKLQkgKiAgICBsb2NhdGlvbnMgZGV0ZXJtaW5lZCBkdXJpbmcgaW5pdC4KKwkgKiAgLSBMaW5rIHdpdGggc2hhcmVkIGNoYW5uZWwgVk0KIAkgKi8KLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgeworCWlmIChkZXZfcHJpdi0+Y2hhbl92bSkgewogCQl1MzIgcGdkX29mZnMgPSAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkgPyAweDE0MDAgOiAweDAyMDA7CiAJCXU2NCB2bV92aW5zdCA9IGNoYW4tPnJhbWluLT52aW5zdCArIHBnZF9vZmZzOwogCQl1MzIgdm1fcGluc3QgPSBjaGFuLT5yYW1pbi0+cGluc3Q7Ci0JCXUzMiBwZGU7CiAKIAkJaWYgKHZtX3BpbnN0ICE9IH4wKQogCQkJdm1fcGluc3QgKz0gcGdkX29mZnM7CkBAIC02NTUsMjkgKzgyMiw4IEBACiAJCQkJCSAgICAgIDAsICZjaGFuLT52bV9wZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCQlmb3IgKGkgPSAwOyBpIDwgMHg0MDAwOyBpICs9IDgpIHsKLQkJCW52X3dvMzIoY2hhbi0+dm1fcGQsIGkgKyAwLCAweDAwMDAwMDAwKTsKLQkJCW52X3dvMzIoY2hhbi0+dm1fcGQsIGkgKyA0LCAweGRlYWRjYWZlKTsKLQkJfQogCi0JCW5vdXZlYXVfZ3B1b2JqX3JlZihkZXZfcHJpdi0+Z2FydF9pbmZvLnNnX2N0eGRtYSwKLQkJCQkgICAmY2hhbi0+dm1fZ2FydF9wdCk7Ci0JCXBkZSA9IChkZXZfcHJpdi0+dm1fZ2FydF9iYXNlIC8gKDUxMioxMDI0KjEwMjQpKSAqIDg7Ci0JCW52X3dvMzIoY2hhbi0+dm1fcGQsIHBkZSArIDAsIGNoYW4tPnZtX2dhcnRfcHQtPnZpbnN0IHwgMyk7Ci0JCW52X3dvMzIoY2hhbi0+dm1fcGQsIHBkZSArIDQsIDB4MDAwMDAwMDApOwotCi0JCXBkZSA9IChkZXZfcHJpdi0+dm1fdnJhbV9iYXNlIC8gKDUxMioxMDI0KjEwMjQpKSAqIDg7Ci0JCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+dm1fdnJhbV9wdF9ucjsgaSsrKSB7Ci0JCQlub3V2ZWF1X2dwdW9ial9yZWYoZGV2X3ByaXYtPnZtX3ZyYW1fcHRbaV0sCi0JCQkJCSAgICZjaGFuLT52bV92cmFtX3B0W2ldKTsKLQotCQkJbnZfd28zMihjaGFuLT52bV9wZCwgcGRlICsgMCwKLQkJCQljaGFuLT52bV92cmFtX3B0W2ldLT52aW5zdCB8IDB4NjEpOwotCQkJbnZfd28zMihjaGFuLT52bV9wZCwgcGRlICsgNCwgMHgwMDAwMDAwMCk7Ci0JCQlwZGUgKz0gODsKLQkJfQotCi0JCWluc3RtZW0tPmZsdXNoKGRldik7CisJCW5vdXZlYXVfdm1fcmVmKGRldl9wcml2LT5jaGFuX3ZtLCAmY2hhbi0+dm0sIGNoYW4tPnZtX3BkKTsKIAl9CiAKIAkvKiBSQU1IVCAqLwpAQCAtNzAwLDkgKzg0Niw4IEBACiAJLyogVlJBTSBjdHhkbWEgKi8KIAlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgewogCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9kbWFfbmV3KGNoYW4sIE5WX0NMQVNTX0RNQV9JTl9NRU1PUlksCi0JCQkJCSAgICAgMCwgZGV2X3ByaXYtPnZtX2VuZCwKLQkJCQkJICAgICBOVl9ETUFfQUNDRVNTX1JXLAotCQkJCQkgICAgIE5WX0RNQV9UQVJHRVRfQUdQLCAmdnJhbSk7CisJCQkJCSAgICAgMCwgKDFVTEwgPDwgNDApLCBOVl9NRU1fQUNDRVNTX1JXLAorCQkJCQkgICAgIE5WX01FTV9UQVJHRVRfVk0sICZ2cmFtKTsKIAkJaWYgKHJldCkgewogCQkJTlZfRVJST1IoZGV2LCAiRXJyb3IgY3JlYXRpbmcgVlJBTSBjdHhkbWE6ICVkXG4iLCByZXQpOwogCQkJcmV0dXJuIHJldDsKQEAgLTcxMCw4ICs4NTUsOCBAQAogCX0gZWxzZSB7CiAJCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2RtYV9uZXcoY2hhbiwgTlZfQ0xBU1NfRE1BX0lOX01FTU9SWSwKIAkJCQkJICAgICAwLCBkZXZfcHJpdi0+ZmJfYXZhaWxhYmxlX3NpemUsCi0JCQkJCSAgICAgTlZfRE1BX0FDQ0VTU19SVywKLQkJCQkJICAgICBOVl9ETUFfVEFSR0VUX1ZJRE1FTSwgJnZyYW0pOworCQkJCQkgICAgIE5WX01FTV9BQ0NFU1NfUlcsCisJCQkJCSAgICAgTlZfTUVNX1RBUkdFVF9WUkFNLCAmdnJhbSk7CiAJCWlmIChyZXQpIHsKIAkJCU5WX0VSUk9SKGRldiwgIkVycm9yIGNyZWF0aW5nIFZSQU0gY3R4ZG1hOiAlZFxuIiwgcmV0KTsKIAkJCXJldHVybiByZXQ7CkBAIC03MjgsMjEgKzg3MywxMyBAQAogCS8qIFRUIG1lbW9yeSBjdHhkbWEgKi8KIAlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgewogCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9kbWFfbmV3KGNoYW4sIE5WX0NMQVNTX0RNQV9JTl9NRU1PUlksCi0JCQkJCSAgICAgMCwgZGV2X3ByaXYtPnZtX2VuZCwKLQkJCQkJICAgICBOVl9ETUFfQUNDRVNTX1JXLAotCQkJCQkgICAgIE5WX0RNQV9UQVJHRVRfQUdQLCAmdHQpOwotCQlpZiAocmV0KSB7Ci0JCQlOVl9FUlJPUihkZXYsICJFcnJvciBjcmVhdGluZyBWUkFNIGN0eGRtYTogJWRcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfSBlbHNlCi0JaWYgKGRldl9wcml2LT5nYXJ0X2luZm8udHlwZSAhPSBOT1VWRUFVX0dBUlRfTk9ORSkgewotCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9nYXJ0X2RtYV9uZXcoY2hhbiwgMCwKLQkJCQkJCSAgZGV2X3ByaXYtPmdhcnRfaW5mby5hcGVyX3NpemUsCi0JCQkJCQkgIE5WX0RNQV9BQ0NFU1NfUlcsICZ0dCwgTlVMTCk7CisJCQkJCSAgICAgMCwgKDFVTEwgPDwgNDApLCBOVl9NRU1fQUNDRVNTX1JXLAorCQkJCQkgICAgIE5WX01FTV9UQVJHRVRfVk0sICZ0dCk7CiAJfSBlbHNlIHsKLQkJTlZfRVJST1IoZGV2LCAiSW52YWxpZCBHQVJUIHR5cGUgJWRcbiIsIGRldl9wcml2LT5nYXJ0X2luZm8udHlwZSk7Ci0JCXJldCA9IC1FSU5WQUw7CisJCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2RtYV9uZXcoY2hhbiwgTlZfQ0xBU1NfRE1BX0lOX01FTU9SWSwKKwkJCQkJICAgICAwLCBkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfc2l6ZSwKKwkJCQkJICAgICBOVl9NRU1fQUNDRVNTX1JXLAorCQkJCQkgICAgIE5WX01FTV9UQVJHRVRfR0FSVCwgJnR0KTsKIAl9CiAKIAlpZiAocmV0KSB7CkBAIC03NjMsMjEgKzkwMCwxNCBAQAogdm9pZAogbm91dmVhdV9ncHVvYmpfY2hhbm5lbF90YWtlZG93bihzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGNoYW4tPmRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKLQlpbnQgaTsKIAogCU5WX0RFQlVHKGRldiwgImNoJWRcbiIsIGNoYW4tPmlkKTsKIAotCWlmICghY2hhbi0+cmFtaHQpCi0JCXJldHVybjsKLQogCW5vdXZlYXVfcmFtaHRfcmVmKE5VTEwsICZjaGFuLT5yYW1odCwgY2hhbik7CiAKKwlub3V2ZWF1X3ZtX3JlZihOVUxMLCAmY2hhbi0+dm0sIGNoYW4tPnZtX3BkKTsKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmNoYW4tPnZtX3BkKTsKLQlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmNoYW4tPnZtX2dhcnRfcHQpOwotCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+dm1fdnJhbV9wdF9ucjsgaSsrKQotCQlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmNoYW4tPnZtX3ZyYW1fcHRbaV0pOwogCiAJaWYgKGNoYW4tPnJhbWluX2hlYXAuZnJlZV9zdGFjay5uZXh0KQogCQlkcm1fbW1fdGFrZWRvd24oJmNoYW4tPnJhbWluX2hlYXApOwpAQCAtNzkxLDE0NyArOTIxLDkxIEBACiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpncHVvYmo7CiAJaW50IGk7CiAKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzUwKSB7Ci0JCWRldl9wcml2LT5zdXNyZXMucmFtaW5fY29weSA9IHZtYWxsb2MoZGV2X3ByaXYtPnJhbWluX3JzdmRfdnJhbSk7Ci0JCWlmICghZGV2X3ByaXYtPnN1c3Jlcy5yYW1pbl9jb3B5KQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5yYW1pbl9yc3ZkX3ZyYW07IGkgKz0gNCkKLQkJCWRldl9wcml2LT5zdXNyZXMucmFtaW5fY29weVtpLzRdID0gbnZfcmkzMihkZXYsIGkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdwdW9iaiwgJmRldl9wcml2LT5ncHVvYmpfbGlzdCwgbGlzdCkgewotCQlpZiAoIWdwdW9iai0+aW1fYmFja2luZykKKwkJaWYgKGdwdW9iai0+Y2luc3QgIT0gTlZPQkpfQ0lOU1RfR0xPQkFMKQogCQkJY29udGludWU7CiAKLQkJZ3B1b2JqLT5pbV9iYWNraW5nX3N1c3BlbmQgPSB2bWFsbG9jKGdwdW9iai0+c2l6ZSk7Ci0JCWlmICghZ3B1b2JqLT5pbV9iYWNraW5nX3N1c3BlbmQpIHsKKwkJZ3B1b2JqLT5zdXNwZW5kID0gdm1hbGxvYyhncHVvYmotPnNpemUpOworCQlpZiAoIWdwdW9iai0+c3VzcGVuZCkgewogCQkJbm91dmVhdV9ncHVvYmpfcmVzdW1lKGRldik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCiAJCWZvciAoaSA9IDA7IGkgPCBncHVvYmotPnNpemU7IGkgKz0gNCkKLQkJCWdwdW9iai0+aW1fYmFja2luZ19zdXNwZW5kW2kvNF0gPSBudl9ybzMyKGdwdW9iaiwgaSk7CisJCQlncHVvYmotPnN1c3BlbmRbaS80XSA9IG52X3JvMzIoZ3B1b2JqLCBpKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAogdm9pZAotbm91dmVhdV9ncHVvYmpfc3VzcGVuZF9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmdwdW9iajsKLQotCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNTApIHsKLQkJdmZyZWUoZGV2X3ByaXYtPnN1c3Jlcy5yYW1pbl9jb3B5KTsKLQkJZGV2X3ByaXYtPnN1c3Jlcy5yYW1pbl9jb3B5ID0gTlVMTDsKLQkJcmV0dXJuOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZ3B1b2JqLCAmZGV2X3ByaXYtPmdwdW9ial9saXN0LCBsaXN0KSB7Ci0JCWlmICghZ3B1b2JqLT5pbV9iYWNraW5nX3N1c3BlbmQpCi0JCQljb250aW51ZTsKLQotCQl2ZnJlZShncHVvYmotPmltX2JhY2tpbmdfc3VzcGVuZCk7Ci0JCWdwdW9iai0+aW1fYmFja2luZ19zdXNwZW5kID0gTlVMTDsKLQl9Ci19Ci0KLXZvaWQKIG5vdXZlYXVfZ3B1b2JqX3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpncHVvYmo7CiAJaW50IGk7CiAKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzUwKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+cmFtaW5fcnN2ZF92cmFtOyBpICs9IDQpCi0JCQludl93aTMyKGRldiwgaSwgZGV2X3ByaXYtPnN1c3Jlcy5yYW1pbl9jb3B5W2kvNF0pOwotCQlub3V2ZWF1X2dwdW9ial9zdXNwZW5kX2NsZWFudXAoZGV2KTsKLQkJcmV0dXJuOwotCX0KLQogCWxpc3RfZm9yX2VhY2hfZW50cnkoZ3B1b2JqLCAmZGV2X3ByaXYtPmdwdW9ial9saXN0LCBsaXN0KSB7Ci0JCWlmICghZ3B1b2JqLT5pbV9iYWNraW5nX3N1c3BlbmQpCisJCWlmICghZ3B1b2JqLT5zdXNwZW5kKQogCQkJY29udGludWU7CiAKIAkJZm9yIChpID0gMDsgaSA8IGdwdW9iai0+c2l6ZTsgaSArPSA0KQotCQkJbnZfd28zMihncHVvYmosIGksIGdwdW9iai0+aW1fYmFja2luZ19zdXNwZW5kW2kvNF0pOwotCQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKKwkJCW52X3dvMzIoZ3B1b2JqLCBpLCBncHVvYmotPnN1c3BlbmRbaS80XSk7CisKKwkJdmZyZWUoZ3B1b2JqLT5zdXNwZW5kKTsKKwkJZ3B1b2JqLT5zdXNwZW5kID0gTlVMTDsKIAl9CiAKLQlub3V2ZWF1X2dwdW9ial9zdXNwZW5kX2NsZWFudXAoZGV2KTsKKwlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKIH0KIAogaW50IG5vdXZlYXVfaW9jdGxfZ3JvYmpfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9ub3V2ZWF1X2dyb2JqX2FsbG9jICppbml0ID0gZGF0YTsKLQlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKLQlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X2NsYXNzICpncmM7Ci0Jc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpnciA9IE5VTEw7CiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbjsKIAlpbnQgcmV0OwogCi0JTk9VVkVBVV9HRVRfVVNFUl9DSEFOTkVMX1dJVEhfUkVUVVJOKGluaXQtPmNoYW5uZWwsIGZpbGVfcHJpdiwgY2hhbik7Ci0KIAlpZiAoaW5pdC0+aGFuZGxlID09IH4wKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWdyYyA9IHBncmFwaC0+Z3JjbGFzczsKLQl3aGlsZSAoZ3JjLT5pZCkgewotCQlpZiAoZ3JjLT5pZCA9PSBpbml0LT5jbGFzcykKLQkJCWJyZWFrOwotCQlncmMrKzsKKwljaGFuID0gbm91dmVhdV9jaGFubmVsX2dldChkZXYsIGZpbGVfcHJpdiwgaW5pdC0+Y2hhbm5lbCk7CisJaWYgKElTX0VSUihjaGFuKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2hhbik7CisKKwlpZiAobm91dmVhdV9yYW1odF9maW5kKGNoYW4sIGluaXQtPmhhbmRsZSkpIHsKKwkJcmV0ID0gLUVFWElTVDsKKwkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCFncmMtPmlkKSB7Ci0JCU5WX0VSUk9SKGRldiwgIklsbGVnYWwgb2JqZWN0IGNsYXNzOiAweCV4XG4iLCBpbml0LT5jbGFzcyk7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0JaWYgKG5vdXZlYXVfcmFtaHRfZmluZChjaGFuLCBpbml0LT5oYW5kbGUpKQotCQlyZXR1cm4gLUVFWElTVDsKLQotCWlmICghZ3JjLT5zb2Z0d2FyZSkKLQkJcmV0ID0gbm91dmVhdV9ncHVvYmpfZ3JfbmV3KGNoYW4sIGdyYy0+aWQsICZncik7Ci0JZWxzZQotCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9zd19uZXcoY2hhbiwgZ3JjLT5pZCwgJmdyKTsKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9ncl9uZXcoY2hhbiwgaW5pdC0+aGFuZGxlLCBpbml0LT5jbGFzcyk7CiAJaWYgKHJldCkgewogCQlOVl9FUlJPUihkZXYsICJFcnJvciBjcmVhdGluZyBvYmplY3Q6ICVkICglZC8weCUwOHgpXG4iLAogCQkJIHJldCwgaW5pdC0+Y2hhbm5lbCwgaW5pdC0+aGFuZGxlKTsKLQkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBub3V2ZWF1X3JhbWh0X2luc2VydChjaGFuLCBpbml0LT5oYW5kbGUsIGdyKTsKLQlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmdyKTsKLQlpZiAocmV0KSB7Ci0JCU5WX0VSUk9SKGRldiwgIkVycm9yIHJlZmVyZW5jaW5nIG9iamVjdDogJWQgKCVkLzB4JTA4eClcbiIsCi0JCQkgcmV0LCBpbml0LT5jaGFubmVsLCBpbml0LT5oYW5kbGUpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOworb3V0OgorCW5vdXZlYXVfY2hhbm5lbF9wdXQoJmNoYW4pOworCXJldHVybiByZXQ7CiB9CiAKIGludCBub3V2ZWF1X2lvY3RsX2dwdW9ial9mcmVlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfZ3B1b2JqX2ZyZWUgKm9iamZyZWUgPSBkYXRhOwotCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqOwogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47CisJaW50IHJldDsKIAotCU5PVVZFQVVfR0VUX1VTRVJfQ0hBTk5FTF9XSVRIX1JFVFVSTihvYmpmcmVlLT5jaGFubmVsLCBmaWxlX3ByaXYsIGNoYW4pOworCWNoYW4gPSBub3V2ZWF1X2NoYW5uZWxfZ2V0KGRldiwgZmlsZV9wcml2LCBvYmpmcmVlLT5jaGFubmVsKTsKKwlpZiAoSVNfRVJSKGNoYW4pKQorCQlyZXR1cm4gUFRSX0VSUihjaGFuKTsKIAotCWdwdW9iaiA9IG5vdXZlYXVfcmFtaHRfZmluZChjaGFuLCBvYmpmcmVlLT5oYW5kbGUpOwotCWlmICghZ3B1b2JqKQotCQlyZXR1cm4gLUVOT0VOVDsKKwkvKiBTeW5jaHJvbml6ZSB3aXRoIHRoZSB1c2VyIGNoYW5uZWwgKi8KKwlub3V2ZWF1X2NoYW5uZWxfaWRsZShjaGFuKTsKIAotCW5vdXZlYXVfcmFtaHRfcmVtb3ZlKGNoYW4sIG9iamZyZWUtPmhhbmRsZSk7Ci0JcmV0dXJuIDA7CisJcmV0ID0gbm91dmVhdV9yYW1odF9yZW1vdmUoY2hhbiwgb2JqZnJlZS0+aGFuZGxlKTsKKwlub3V2ZWF1X2NoYW5uZWxfcHV0KCZjaGFuKTsKKwlyZXR1cm4gcmV0OwogfQogCiB1MzIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcG0uYwppbmRleCA5ZjdiMTU4Li5mYjg0NmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wbS5jCkBAIC0yNyw2ICsyNywxMCBAQAogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCiAjaW5jbHVkZSAibm91dmVhdV9wbS5oIgogCisjaWZkZWYgQ09ORklHX0FDUEkKKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CiAKQEAgLTQxOCw4ICs0MjIsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAlkZXZfc2V0X2RydmRhdGEoaHdtb25fZGV2LCBkZXYpOwotCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaHdtb25fZGV2LT5rb2JqLAotCQkJCQkmaHdtb25fYXR0cmdyb3VwKTsKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+cGRldi0+ZGV2LmtvYmosICZod21vbl9hdHRyZ3JvdXApOwogCWlmIChyZXQpIHsKIAkJTlZfRVJST1IoZGV2LAogCQkJIlVuYWJsZSB0byBjcmVhdGUgaHdtb24gc3lzZnMgZmlsZTogJWRcbiIsIHJldCk7CkBAIC00NDYsNiArNDQ5LDI1IEBACiAjZW5kaWYKIH0KIAorI2lmZGVmIENPTkZJR19BQ1BJCitzdGF0aWMgaW50Citub3V2ZWF1X3BtX2FjcGlfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSwgZW5naW5lLnBtLmFjcGlfbmIpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OworCXN0cnVjdCBhY3BpX2J1c19ldmVudCAqZW50cnkgPSAoc3RydWN0IGFjcGlfYnVzX2V2ZW50ICopZGF0YTsKKworCWlmIChzdHJjbXAoZW50cnktPmRldmljZV9jbGFzcywgImFjX2FkYXB0ZXIiKSA9PSAwKSB7CisJCWJvb2wgYWMgPSBwb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKCk7CisKKwkJTlZfREVCVUcoZGV2LCAicG93ZXIgc3VwcGx5IGNoYW5nZWQ6ICVzXG4iLCBhYyA/ICJBQyIgOiAiREMiKTsKKwl9CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorI2VuZGlmCisKIGludAogbm91dmVhdV9wbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CkBAIC00ODUsNiArNTA3LDEwIEBACiAKIAlub3V2ZWF1X3N5c2ZzX2luaXQoZGV2KTsKIAlub3V2ZWF1X2h3bW9uX2luaXQoZGV2KTsKKyNpZmRlZiBDT05GSUdfQUNQSQorCXBtLT5hY3BpX25iLm5vdGlmaWVyX2NhbGwgPSBub3V2ZWF1X3BtX2FjcGlfZXZlbnQ7CisJcmVnaXN0ZXJfYWNwaV9ub3RpZmllcigmcG0tPmFjcGlfbmIpOworI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUwMyw2ICs1MjksOSBAQAogCW5vdXZlYXVfcGVyZl9maW5pKGRldik7CiAJbm91dmVhdV92b2x0X2ZpbmkoZGV2KTsKIAorI2lmZGVmIENPTkZJR19BQ1BJCisJdW5yZWdpc3Rlcl9hY3BpX25vdGlmaWVyKCZwbS0+YWNwaV9uYik7CisjZW5kaWYKIAlub3V2ZWF1X2h3bW9uX2ZpbmkoZGV2KTsKIAlub3V2ZWF1X3N5c2ZzX2ZpbmkoZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcmFtaHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcmFtaHQuYwppbmRleCAyZDg1ODA5Li5iZWYzZTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3JhbWh0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9yYW1odC5jCkBAIC0xMDQsMTcgKzEwNCwxNyBAQAogCW5vdXZlYXVfZ3B1b2JqX3JlZihncHVvYmosICZlbnRyeS0+Z3B1b2JqKTsKIAogCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNDApIHsKLQkJY3R4ID0gTlZfUkFNSFRfQ09OVEVYVF9WQUxJRCB8IChncHVvYmotPmNpbnN0ID4+IDQpIHwKKwkJY3R4ID0gTlZfUkFNSFRfQ09OVEVYVF9WQUxJRCB8IChncHVvYmotPnBpbnN0ID4+IDQpIHwKIAkJICAgICAgKGNoYW4tPmlkIDw8IE5WX1JBTUhUX0NPTlRFWFRfQ0hBTk5FTF9TSElGVCkgfAogCQkgICAgICAoZ3B1b2JqLT5lbmdpbmUgPDwgTlZfUkFNSFRfQ09OVEVYVF9FTkdJTkVfU0hJRlQpOwogCX0gZWxzZQogCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNTApIHsKLQkJY3R4ID0gKGdwdW9iai0+Y2luc3QgPj4gNCkgfAorCQljdHggPSAoZ3B1b2JqLT5waW5zdCA+PiA0KSB8CiAJCSAgICAgIChjaGFuLT5pZCA8PCBOVjQwX1JBTUhUX0NPTlRFWFRfQ0hBTk5FTF9TSElGVCkgfAogCQkgICAgICAoZ3B1b2JqLT5lbmdpbmUgPDwgTlY0MF9SQU1IVF9DT05URVhUX0VOR0lORV9TSElGVCk7CiAJfSBlbHNlIHsKIAkJaWYgKGdwdW9iai0+ZW5naW5lID09IE5WT0JKX0VOR0lORV9ESVNQTEFZKSB7Ci0JCQljdHggPSAoZ3B1b2JqLT5jaW5zdCA8PCAxMCkgfCAyOworCQkJY3R4ID0gKGdwdW9iai0+Y2luc3QgPDwgMTApIHwgY2hhbi0+aWQ7CiAJCX0gZWxzZSB7CiAJCQljdHggPSAoZ3B1b2JqLT5jaW5zdCA+PiA0KSB8CiAJCQkgICAgICAoKGdwdW9iai0+ZW5naW5lIDw8CkBAIC0yMTQsMTggKzIxNCwxOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPnJhbWh0LT5sb2NrLCBmbGFncyk7CiB9CiAKLXZvaWQKK2ludAogbm91dmVhdV9yYW1odF9yZW1vdmUoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgdTMyIGhhbmRsZSkKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9yYW1odF9lbnRyeSAqZW50cnk7CiAKIAllbnRyeSA9IG5vdXZlYXVfcmFtaHRfcmVtb3ZlX2VudHJ5KGNoYW4sIGhhbmRsZSk7CiAJaWYgKCFlbnRyeSkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0VOVDsKIAogCW5vdXZlYXVfcmFtaHRfcmVtb3ZlX2hhc2goY2hhbiwgZW50cnktPmhhbmRsZSk7CiAJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZlbnRyeS0+Z3B1b2JqKTsKIAlrZnJlZShlbnRyeSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3JhbWh0LmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3JhbWh0LmgKaW5kZXggYjc5Y2I1ZS4uYzgyZGU5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9yYW1odC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcmFtaHQuaApAQCAtNDgsNyArNDgsNyBAQAogCiBleHRlcm4gaW50ICBub3V2ZWF1X3JhbWh0X2luc2VydChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosIHUzMiBoYW5kbGUsCiAJCQkJIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKTsKLWV4dGVybiB2b2lkIG5vdXZlYXVfcmFtaHRfcmVtb3ZlKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKiwgdTMyIGhhbmRsZSk7CitleHRlcm4gaW50ICBub3V2ZWF1X3JhbWh0X3JlbW92ZShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosIHUzMiBoYW5kbGUpOwogZXh0ZXJuIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqCiBub3V2ZWF1X3JhbWh0X2ZpbmQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgdTMyIGhhbmRsZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3JlZy5oCmluZGV4IDFiNDI1NDEuLjA0ZThmYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9yZWcuaApAQCAtNDUsNiArNDUsMTEgQEAKICMJZGVmaW5lIE5WMDRfUEZCX1JFRl9DTURfUkVGUkVTSAkJCQkoMSA8PCAwKQogI2RlZmluZSBOVjA0X1BGQl9QUkUJCQkJCQkweDAwMTAwMmQ0CiAjCWRlZmluZSBOVjA0X1BGQl9QUkVfQ01EX1BSRUNIQVJHRQkJCSgxIDw8IDApCisjZGVmaW5lIE5WMjBfUEZCX1pDT01QKGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAxMDAzMDAgKyA0KihpKSkKKyMJZGVmaW5lIE5WMjBfUEZCX1pDT01QX01PREVfMzIJCQkJKDQgPDwgMjQpCisjCWRlZmluZSBOVjIwX1BGQl9aQ09NUF9FTgkJCQkoMSA8PCAzMSkKKyMJZGVmaW5lIE5WMjVfUEZCX1pDT01QX01PREVfMTYJCQkJKDEgPDwgMjApCisjCWRlZmluZSBOVjI1X1BGQl9aQ09NUF9NT0RFXzMyCQkJCSgyIDw8IDIwKQogI2RlZmluZSBOVjEwX1BGQl9DTE9TRV9QQUdFMgkJCQkJMHgwMDEwMDMzYwogI2RlZmluZSBOVjA0X1BGQl9TQ1JBTUJMRShpKSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDEwMDQwMCArIDQgKiAoaSkpCiAjZGVmaW5lIE5WNDBfUEZCX1RJTEUoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDEwMDYwMCArIChpKjE2KSkKQEAgLTc0LDE3ICs3OSw2IEBACiAjICAgIGRlZmluZSBOVjQwX1JBTUhUX0NPTlRFWFRfRU5HSU5FX1NISUZUICAgICAgICAgICAgICAgIDIwCiAjICAgIGRlZmluZSBOVjQwX1JBTUhUX0NPTlRFWFRfSU5TVEFOQ0VfU0hJRlQgICAgICAgICAgICAgIDAKIAotLyogRE1BIG9iamVjdCBkZWZpbmVzICovCi0jZGVmaW5lIE5WX0RNQV9BQ0NFU1NfUlcgMAotI2RlZmluZSBOVl9ETUFfQUNDRVNTX1JPIDEKLSNkZWZpbmUgTlZfRE1BX0FDQ0VTU19XTyAyCi0jZGVmaW5lIE5WX0RNQV9UQVJHRVRfVklETUVNIDAKLSNkZWZpbmUgTlZfRE1BX1RBUkdFVF9QQ0kgICAgMgotI2RlZmluZSBOVl9ETUFfVEFSR0VUX0FHUCAgICAzCi0vKiBUaGUgZm9sbG93aW5nIGlzIG5vdCBhIHJlYWwgdmFsdWUgdXNlZCBieSB0aGUgY2FyZCwgaXQncyBjaGFuZ2VkIGJ5Ci0gKiBub3V2ZWF1X29iamVjdF9kbWFfY3JlYXRlICovCi0jZGVmaW5lIE5WX0RNQV9UQVJHRVRfUENJX05PTkxJTkVBUiA4Ci0KIC8qIFNvbWUgb2JqZWN0IGNsYXNzZXMgd2UgY2FyZSBhYm91dCBpbiB0aGUgZHJtICovCiAjZGVmaW5lIE5WX0NMQVNTX0RNQV9GUk9NX01FTU9SWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKICNkZWZpbmUgTlZfQ0xBU1NfRE1BX1RPX01FTU9SWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwpAQCAtMzMyLDYgKzMyNiw3IEBACiAjZGVmaW5lIE5WMDRfUEdSQVBIX0JTV0laWkxFNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDA2QTAKICNkZWZpbmUgTlYwM19QR1JBUEhfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDZCMAogI2RlZmluZSBOVjA0X1BHUkFQSF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzAwCisjICAgIGRlZmluZSBOVjQwX1BHUkFQSF9TVEFUVVNfU1lOQ19TVEFMTCAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKICNkZWZpbmUgTlYwNF9QR1JBUEhfVFJBUFBFRF9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDcwNAogI2RlZmluZSBOVjA0X1BHUkFQSF9UUkFQUEVEX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzA4CiAjZGVmaW5lIE5WMDRfUEdSQVBIX1NVUkZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDA3MEMKQEAgLTM3OCw2ICszNzMsNyBAQAogI2RlZmluZSBOVjIwX1BHUkFQSF9UTElNSVQoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDQwMDkwNCArIChpKjE2KSkKICNkZWZpbmUgTlYyMF9QR1JBUEhfVFNJWkUoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0MDA5MDggKyAoaSoxNikpCiAjZGVmaW5lIE5WMjBfUEdSQVBIX1RTVEFUVVMoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwNDAwOTBDICsgKGkqMTYpKQorI2RlZmluZSBOVjIwX1BHUkFQSF9aQ09NUChpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDQwMDk4MCArIDQqKGkpKQogI2RlZmluZSBOVjEwX1BHUkFQSF9USUxFKGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDQwMEIwMCArIChpKjE2KSkKICNkZWZpbmUgTlYxMF9QR1JBUEhfVExJTUlUKGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0MDBCMDQgKyAoaSoxNikpCiAjZGVmaW5lIE5WMTBfUEdSQVBIX1RTSVpFKGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwNDAwQjA4ICsgKGkqMTYpKQpAQCAtNzE0LDMxICs3MTAsMzIgQEAKICNkZWZpbmUgTlY1MF9QRElTUExBWV9JTlRSXzFfQ0xLX1VOSzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKICNkZWZpbmUgTlY1MF9QRElTUExBWV9JTlRSXzFfQ0xLX1VOSzIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKICNkZWZpbmUgTlY1MF9QRElTUExBWV9JTlRSXzFfQ0xLX1VOSzQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9JTlRSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MTAwMmMKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9JTlRSX0VOX1ZCTEFOS19DUlRDICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9JTlRSX0VOX1ZCTEFOS19DUlRDXyhuKSAgICAgICAgICAgICAgICAgICAoMSA8PCAoKG4pICsgMikpCi0jZGVmaW5lIE5WNTBfUERJU1BMQVlfSU5UUl9FTl9WQkxBTktfQ1JUQ18wICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIE5WNTBfUERJU1BMQVlfSU5UUl9FTl9WQkxBTktfQ1JUQ18xICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIE5WNTBfUERJU1BMQVlfSU5UUl9FTl9DTEtfVU5LMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIE5WNTBfUERJU1BMQVlfSU5UUl9FTl9DTEtfVU5LMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIE5WNTBfUERJU1BMQVlfSU5UUl9FTl9DTEtfVU5LNDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIE5WNTBfUERJU1BMQVlfSU5UUl9FTl8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNjEwMDI4CisjZGVmaW5lIE5WNTBfUERJU1BMQVlfSU5UUl9FTl8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNjEwMDJjCisjZGVmaW5lIE5WNTBfUERJU1BMQVlfSU5UUl9FTl8xX1ZCTEFOS19DUlRDICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCisjZGVmaW5lIE5WNTBfUERJU1BMQVlfSU5UUl9FTl8xX1ZCTEFOS19DUlRDXyhuKSAgICAgICAgICAgICAgICAgKDEgPDwgKChuKSArIDIpKQorI2RlZmluZSBOVjUwX1BESVNQTEFZX0lOVFJfRU5fMV9WQkxBTktfQ1JUQ18wICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBOVjUwX1BESVNQTEFZX0lOVFJfRU5fMV9WQkxBTktfQ1JUQ18xICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBOVjUwX1BESVNQTEFZX0lOVFJfRU5fMV9DTEtfVU5LMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBOVjUwX1BESVNQTEFZX0lOVFJfRU5fMV9DTEtfVU5LMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBOVjUwX1BESVNQTEFZX0lOVFJfRU5fMV9DTEtfVU5LNDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAogI2RlZmluZSBOVjUwX1BESVNQTEFZX1VOSzMwX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDYxMDAzMAogI2RlZmluZSBOVjUwX1BESVNQTEFZX1VOSzMwX0NUUkxfVVBEQVRFX1ZDTEswICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAogI2RlZmluZSBOVjUwX1BESVNQTEFZX1VOSzMwX0NUUkxfVVBEQVRFX1ZDTEsxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAogI2RlZmluZSBOVjUwX1BESVNQTEFZX1VOSzMwX0NUUkxfUEVORElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBOVjUwX1BESVNQTEFZX1RSQVBQRURfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDYxMDA4MAotI2RlZmluZSBOVjUwX1BESVNQTEFZX1RSQVBQRURfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDYxMDA4NAotI2RlZmluZSBOVjUwX1BESVNQTEFZX0NIQU5ORUxfU1RBVChpKSAgICAgICAgICAgICAgICAgICgoaSkgKiAweDEwICsgMHgwMDYxMDIwMCkKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9DSEFOTkVMX1NUQVRfRE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9DSEFOTkVMX1NUQVRfRE1BX0RJU0FCTEVEICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9DSEFOTkVMX1NUQVRfRE1BX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9DSEFOTkVMX0RNQV9DQihpKSAgICAgICAgICAgICAgICAoKGkpICogMHgxMCArIDB4MDA2MTAyMDQpCi0jZGVmaW5lIE5WNTBfUERJU1BMQVlfQ0hBTk5FTF9ETUFfQ0JfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIE5WNTBfUERJU1BMQVlfQ0hBTk5FTF9ETUFfQ0JfTE9DQVRJT05fVlJBTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIE5WNTBfUERJU1BMQVlfQ0hBTk5FTF9ETUFfQ0JfTE9DQVRJT05fU1lTVEVNICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIE5WNTBfUERJU1BMQVlfQ0hBTk5FTF9ETUFfQ0JfVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE5WNTBfUERJU1BMQVlfQ0hBTk5FTF9VTksyKGkpICAgICAgICAgICAgICAgICAgKChpKSAqIDB4MTAgKyAweDAwNjEwMjA4KQotI2RlZmluZSBOVjUwX1BESVNQTEFZX0NIQU5ORUxfVU5LMyhpKSAgICAgICAgICAgICAgICAgICgoaSkgKiAweDEwICsgMHgwMDYxMDIwYykKKyNkZWZpbmUgTlY1MF9QRElTUExBWV9UUkFQUEVEX0FERFIoaSkgICAgICAgICAgICAgICAgICAoKGkpICogMHgwOCArIDB4MDA2MTAwODApCisjZGVmaW5lIE5WNTBfUERJU1BMQVlfVFJBUFBFRF9EQVRBKGkpICAgICAgICAgICAgICAgICAgKChpKSAqIDB4MDggKyAweDAwNjEwMDg0KQorI2RlZmluZSBOVjUwX1BESVNQTEFZX0VWT19DVFJMKGkpICAgICAgICAgICAgICAgICAgICAgICgoaSkgKiAweDEwICsgMHgwMDYxMDIwMCkKKyNkZWZpbmUgTlY1MF9QRElTUExBWV9FVk9fQ1RSTF9ETUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTlY1MF9QRElTUExBWV9FVk9fQ1RSTF9ETUFfRElTQUJMRUQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgTlY1MF9QRElTUExBWV9FVk9fQ1RSTF9ETUFfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTlY1MF9QRElTUExBWV9FVk9fRE1BX0NCKGkpICAgICAgICAgICAgICAgICAgICAoKGkpICogMHgxMCArIDB4MDA2MTAyMDQpCisjZGVmaW5lIE5WNTBfUERJU1BMQVlfRVZPX0RNQV9DQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE5WNTBfUERJU1BMQVlfRVZPX0RNQV9DQl9MT0NBVElPTl9WUkFNICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIE5WNTBfUERJU1BMQVlfRVZPX0RNQV9DQl9MT0NBVElPTl9TWVNURU0gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE5WNTBfUERJU1BMQVlfRVZPX0RNQV9DQl9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE5WNTBfUERJU1BMQVlfRVZPX1VOSzIoaSkgICAgICAgICAgICAgICAgICAgICAgKChpKSAqIDB4MTAgKyAweDAwNjEwMjA4KQorI2RlZmluZSBOVjUwX1BESVNQTEFZX0VWT19IQVNIX1RBRyhpKSAgICAgICAgICAgICAgICAgICgoaSkgKiAweDEwICsgMHgwMDYxMDIwYykKIAogI2RlZmluZSBOVjUwX1BESVNQTEFZX0NVUlNPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDYxMDI3MAogI2RlZmluZSBOVjUwX1BESVNQTEFZX0NVUlNPUl9DVVJTT1JfQ1RSTDIoaSkgICAgICAgICAgICgoaSkgKiAweDEwICsgMHgwMDYxMDI3MCkKQEAgLTc0NiwxNSArNzQzLDExIEBACiAjZGVmaW5lIE5WNTBfUERJU1BMQVlfQ1VSU09SX0NVUlNPUl9DVFJMMl9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCiAjZGVmaW5lIE5WNTBfUERJU1BMQVlfQ1VSU09SX0NVUlNPUl9DVFJMMl9TVEFUVVNfQUNUSVZFICAgICAgICAgICAgICAweDAwMDEwMDAwCiAKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9DVFJMX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MTAzMDAKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9DVFJMX1NUQVRFX1BFTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9DVFJMX1NUQVRFX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFmZmMKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9DVFJMX1NUQVRFX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9DVFJMX1ZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MTAzMDQKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9VTktfMzgwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MTAzODAKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9SQU1fQU1PVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MTAzODQKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9VTktfMzg4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MTAzODgKLSNkZWZpbmUgTlY1MF9QRElTUExBWV9VTktfMzhDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MTAzOGMKKyNkZWZpbmUgTlY1MF9QRElTUExBWV9QSU9fQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MTAzMDAKKyNkZWZpbmUgTlY1MF9QRElTUExBWV9QSU9fQ1RSTF9QRU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgTlY1MF9QRElTUExBWV9QSU9fQ1RSTF9NVEhEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFmZmMKKyNkZWZpbmUgTlY1MF9QRElTUExBWV9QSU9fQ1RSTF9FTkFCTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTlY1MF9QRElTUExBWV9QSU9fREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MTAzMDQKIAogI2RlZmluZSBOVjUwX1BESVNQTEFZX0NSVENfUChpLCByKSAgICAgICAgKChpKSAqIDB4NTQwICsgTlY1MF9QRElTUExBWV9DUlRDXyMjcikKICNkZWZpbmUgTlY1MF9QRElTUExBWV9DUlRDX0MoaSwgcikgICAgKDQgKyAoaSkgKiAweDU0MCArIE5WNTBfUERJU1BMQVlfQ1JUQ18jI3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMKaW5kZXggZDRhYzk3MC4uOWEyNTBlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYwpAQCAtMTQsNyArMTQsNyBAQAogCWRtYV9hZGRyX3QgKnBhZ2VzOwogCXVuc2lnbmVkIG5yX3BhZ2VzOwogCi0JdW5zaWduZWQgcHRlX3N0YXJ0OworCXU2NCBvZmZzZXQ7CiAJYm9vbCBib3VuZDsKIH07CiAKQEAgLTc0LDE4ICs3NCw2IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkCi1ub3V2ZWF1X3NnZG1hX3B0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50NjRfdCBvZmZzZXQpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1bnNpZ25lZCBwdGUgPSAob2Zmc2V0ID4+IE5WX0NUWERNQV9QQUdFX1NISUZUKTsKLQotCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNTApCi0JCXJldHVybiBwdGUgKyAyOwotCi0JcmV0dXJuIHB0ZSA8PCAxOwotfQotCiBzdGF0aWMgaW50CiBub3V2ZWF1X3NnZG1hX2JpbmQoc3RydWN0IHR0bV9iYWNrZW5kICpiZSwgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pCiB7CkBAIC05NywzMiArODUsMTcgQEAKIAogCU5WX0RFQlVHKGRldiwgInBnPTB4JWx4XG4iLCBtZW0tPnN0YXJ0KTsKIAotCXB0ZSA9IG5vdXZlYXVfc2dkbWFfcHRlKG52YmUtPmRldiwgbWVtLT5zdGFydCA8PCBQQUdFX1NISUZUKTsKLQludmJlLT5wdGVfc3RhcnQgPSBwdGU7CisJbnZiZS0+b2Zmc2V0ID0gbWVtLT5zdGFydCA8PCBQQUdFX1NISUZUOworCXB0ZSA9IChudmJlLT5vZmZzZXQgPj4gTlZfQ1RYRE1BX1BBR0VfU0hJRlQpICsgMjsKIAlmb3IgKGkgPSAwOyBpIDwgbnZiZS0+bnJfcGFnZXM7IGkrKykgewogCQlkbWFfYWRkcl90IGRtYV9vZmZzZXQgPSBudmJlLT5wYWdlc1tpXTsKIAkJdWludDMyX3Qgb2Zmc2V0X2wgPSBsb3dlcl8zMl9iaXRzKGRtYV9vZmZzZXQpOwotCQl1aW50MzJfdCBvZmZzZXRfaCA9IHVwcGVyXzMyX2JpdHMoZG1hX29mZnNldCk7CiAKLQkJZm9yIChqID0gMDsgaiA8IFBBR0VfU0laRSAvIE5WX0NUWERNQV9QQUdFX1NJWkU7IGorKykgewotCQkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkgewotCQkJCW52X3dvMzIoZ3B1b2JqLCAocHRlICogNCkgKyAwLCBvZmZzZXRfbCB8IDMpOwotCQkJCXB0ZSArPSAxOwotCQkJfSBlbHNlIHsKLQkJCQludl93bzMyKGdwdW9iaiwgKHB0ZSAqIDQpICsgMCwgb2Zmc2V0X2wgfCAweDIxKTsKLQkJCQludl93bzMyKGdwdW9iaiwgKHB0ZSAqIDQpICsgNCwgb2Zmc2V0X2ggJiAweGZmKTsKLQkJCQlwdGUgKz0gMjsKLQkJCX0KLQorCQlmb3IgKGogPSAwOyBqIDwgUEFHRV9TSVpFIC8gTlZfQ1RYRE1BX1BBR0VfU0laRTsgaisrLCBwdGUrKykgeworCQkJbnZfd28zMihncHVvYmosIChwdGUgKiA0KSArIDAsIG9mZnNldF9sIHwgMyk7CiAJCQlkbWFfb2Zmc2V0ICs9IE5WX0NUWERNQV9QQUdFX1NJWkU7CiAJCX0KIAl9Ci0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZsdXNoKG52YmUtPmRldik7Ci0KLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl81MCkgewotCQlkZXZfcHJpdi0+ZW5naW5lLmZpZm8udGxiX2ZsdXNoKGRldik7Ci0JCWRldl9wcml2LT5lbmdpbmUuZ3JhcGgudGxiX2ZsdXNoKGRldik7Ci0JfQogCiAJbnZiZS0+Ym91bmQgPSB0cnVlOwogCXJldHVybiAwOwpAQCAtMTQyLDI4ICsxMTUsMTAgQEAKIAlpZiAoIW52YmUtPmJvdW5kKQogCQlyZXR1cm4gMDsKIAotCXB0ZSA9IG52YmUtPnB0ZV9zdGFydDsKKwlwdGUgPSAobnZiZS0+b2Zmc2V0ID4+IE5WX0NUWERNQV9QQUdFX1NISUZUKSArIDI7CiAJZm9yIChpID0gMDsgaSA8IG52YmUtPm5yX3BhZ2VzOyBpKyspIHsKLQkJZG1hX2FkZHJfdCBkbWFfb2Zmc2V0ID0gZGV2X3ByaXYtPmdhcnRfaW5mby5zZ19kdW1teV9idXM7Ci0KLQkJZm9yIChqID0gMDsgaiA8IFBBR0VfU0laRSAvIE5WX0NUWERNQV9QQUdFX1NJWkU7IGorKykgewotCQkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkgewotCQkJCW52X3dvMzIoZ3B1b2JqLCAocHRlICogNCkgKyAwLCBkbWFfb2Zmc2V0IHwgMyk7Ci0JCQkJcHRlICs9IDE7Ci0JCQl9IGVsc2UgewotCQkJCW52X3dvMzIoZ3B1b2JqLCAocHRlICogNCkgKyAwLCAweDAwMDAwMDAwKTsKLQkJCQludl93bzMyKGdwdW9iaiwgKHB0ZSAqIDQpICsgNCwgMHgwMDAwMDAwMCk7Ci0JCQkJcHRlICs9IDI7Ci0JCQl9Ci0KLQkJCWRtYV9vZmZzZXQgKz0gTlZfQ1RYRE1BX1BBR0VfU0laRTsKLQkJfQotCX0KLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2gobnZiZS0+ZGV2KTsKLQotCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID09IE5WXzUwKSB7Ci0JCWRldl9wcml2LT5lbmdpbmUuZmlmby50bGJfZmx1c2goZGV2KTsKLQkJZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC50bGJfZmx1c2goZGV2KTsKKwkJZm9yIChqID0gMDsgaiA8IFBBR0VfU0laRSAvIE5WX0NUWERNQV9QQUdFX1NJWkU7IGorKywgcHRlKyspCisJCQludl93bzMyKGdwdW9iaiwgKHB0ZSAqIDQpICsgMCwgMHgwMDAwMDAwMCk7CiAJfQogCiAJbnZiZS0+Ym91bmQgPSBmYWxzZTsKQEAgLTE4Niw2ICsxNDEsMzUgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQKK252NTBfc2dkbWFfYmluZChzdHJ1Y3QgdHRtX2JhY2tlbmQgKmJlLCBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSkKK3sKKwlzdHJ1Y3Qgbm91dmVhdV9zZ2RtYV9iZSAqbnZiZSA9IChzdHJ1Y3Qgbm91dmVhdV9zZ2RtYV9iZSAqKWJlOworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IG52YmUtPmRldi0+ZGV2X3ByaXZhdGU7CisKKwludmJlLT5vZmZzZXQgPSBtZW0tPnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CisKKwlub3V2ZWF1X3ZtX21hcF9zZygmZGV2X3ByaXYtPmdhcnRfaW5mby52bWEsIG52YmUtPm9mZnNldCwKKwkJCSAgbnZiZS0+bnJfcGFnZXMgPDwgUEFHRV9TSElGVCwgbnZiZS0+cGFnZXMpOworCW52YmUtPmJvdW5kID0gdHJ1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbnY1MF9zZ2RtYV91bmJpbmQoc3RydWN0IHR0bV9iYWNrZW5kICpiZSkKK3sKKwlzdHJ1Y3Qgbm91dmVhdV9zZ2RtYV9iZSAqbnZiZSA9IChzdHJ1Y3Qgbm91dmVhdV9zZ2RtYV9iZSAqKWJlOworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IG52YmUtPmRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoIW52YmUtPmJvdW5kKQorCQlyZXR1cm4gMDsKKworCW5vdXZlYXVfdm1fdW5tYXBfYXQoJmRldl9wcml2LT5nYXJ0X2luZm8udm1hLCBudmJlLT5vZmZzZXQsCisJCQkgICAgbnZiZS0+bnJfcGFnZXMgPDwgUEFHRV9TSElGVCk7CisJbnZiZS0+Ym91bmQgPSBmYWxzZTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCB0dG1fYmFja2VuZF9mdW5jIG5vdXZlYXVfc2dkbWFfYmFja2VuZCA9IHsKIAkucG9wdWxhdGUJCT0gbm91dmVhdV9zZ2RtYV9wb3B1bGF0ZSwKIAkuY2xlYXIJCQk9IG5vdXZlYXVfc2dkbWFfY2xlYXIsCkBAIC0xOTQsMjMgKzE3OCwzMCBAQAogCS5kZXN0cm95CQk9IG5vdXZlYXVfc2dkbWFfZGVzdHJveQogfTsKIAorc3RhdGljIHN0cnVjdCB0dG1fYmFja2VuZF9mdW5jIG52NTBfc2dkbWFfYmFja2VuZCA9IHsKKwkucG9wdWxhdGUJCT0gbm91dmVhdV9zZ2RtYV9wb3B1bGF0ZSwKKwkuY2xlYXIJCQk9IG5vdXZlYXVfc2dkbWFfY2xlYXIsCisJLmJpbmQJCQk9IG52NTBfc2dkbWFfYmluZCwKKwkudW5iaW5kCQkJPSBudjUwX3NnZG1hX3VuYmluZCwKKwkuZGVzdHJveQkJPSBub3V2ZWF1X3NnZG1hX2Rlc3Ryb3kKK307CisKIHN0cnVjdCB0dG1fYmFja2VuZCAqCiBub3V2ZWF1X3NnZG1hX2luaXRfdHRtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9zZ2RtYV9iZSAqbnZiZTsKIAotCWlmICghZGV2X3ByaXYtPmdhcnRfaW5mby5zZ19jdHhkbWEpCi0JCXJldHVybiBOVUxMOwotCiAJbnZiZSA9IGt6YWxsb2Moc2l6ZW9mKCpudmJlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFudmJlKQogCQlyZXR1cm4gTlVMTDsKIAogCW52YmUtPmRldiA9IGRldjsKIAotCW52YmUtPmJhY2tlbmQuZnVuYwk9ICZub3V2ZWF1X3NnZG1hX2JhY2tlbmQ7Ci0KKwlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WXzUwKQorCQludmJlLT5iYWNrZW5kLmZ1bmMgPSAmbm91dmVhdV9zZ2RtYV9iYWNrZW5kOworCWVsc2UKKwkJbnZiZS0+YmFja2VuZC5mdW5jID0gJm52NTBfc2dkbWFfYmFja2VuZDsKIAlyZXR1cm4gJm52YmUtPmJhY2tlbmQ7CiB9CiAKQEAgLTIxOCw3ICsyMDksNiBAQAogbm91dmVhdV9zZ2RtYV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldi0+cGRldjsKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmdwdW9iaiA9IE5VTEw7CiAJdWludDMyX3QgYXBlcl9zaXplLCBvYmpfc2l6ZTsKIAlpbnQgaSwgcmV0OwpAQCAtMjMxLDY4ICsyMjEsNDAgQEAKIAogCQlvYmpfc2l6ZSAgPSAoYXBlcl9zaXplID4+IE5WX0NUWERNQV9QQUdFX1NISUZUKSAqIDQ7CiAJCW9ial9zaXplICs9IDg7IC8qIGN0eGRtYSBoZWFkZXIgKi8KLQl9IGVsc2UgewotCQkvKiAxIGVudGlyZSBWTSBwYWdlIHRhYmxlICovCi0JCWFwZXJfc2l6ZSA9ICg1MTIgKiAxMDI0ICogMTAyNCk7Ci0JCW9ial9zaXplICA9IChhcGVyX3NpemUgPj4gTlZfQ1RYRE1BX1BBR0VfU0hJRlQpICogODsKLQl9CiAKLQlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBOVUxMLCBvYmpfc2l6ZSwgMTYsCi0JCQkJICAgICAgTlZPQkpfRkxBR19aRVJPX0FMTE9DIHwKLQkJCQkgICAgICBOVk9CSl9GTEFHX1pFUk9fRlJFRSwgJmdwdW9iaik7Ci0JaWYgKHJldCkgewotCQlOVl9FUlJPUihkZXYsICJFcnJvciBjcmVhdGluZyBzZ2RtYSBvYmplY3Q6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KKwkJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3KGRldiwgTlVMTCwgb2JqX3NpemUsIDE2LAorCQkJCQkgICAgICBOVk9CSl9GTEFHX1pFUk9fQUxMT0MgfAorCQkJCQkgICAgICBOVk9CSl9GTEFHX1pFUk9fRlJFRSwgJmdwdW9iaik7CisJCWlmIChyZXQpIHsKKwkJCU5WX0VSUk9SKGRldiwgIkVycm9yIGNyZWF0aW5nIHNnZG1hIG9iamVjdDogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CiAKLQlkZXZfcHJpdi0+Z2FydF9pbmZvLnNnX2R1bW15X3BhZ2UgPQotCQlhbGxvY19wYWdlKEdGUF9LRVJORUx8X19HRlBfRE1BMzJ8X19HRlBfWkVSTyk7Ci0JaWYgKCFkZXZfcHJpdi0+Z2FydF9pbmZvLnNnX2R1bW15X3BhZ2UpIHsKLQkJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZncHVvYmopOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlzZXRfYml0KFBHX2xvY2tlZCwgJmRldl9wcml2LT5nYXJ0X2luZm8uc2dfZHVtbXlfcGFnZS0+ZmxhZ3MpOwotCWRldl9wcml2LT5nYXJ0X2luZm8uc2dfZHVtbXlfYnVzID0KLQkJcGNpX21hcF9wYWdlKHBkZXYsIGRldl9wcml2LT5nYXJ0X2luZm8uc2dfZHVtbXlfcGFnZSwgMCwKLQkJCSAgICAgUEFHRV9TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgZGV2X3ByaXYtPmdhcnRfaW5mby5zZ19kdW1teV9idXMpKSB7Ci0JCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmZ3B1b2JqKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkgewotCQkvKiBzcGVjaWFsIGNhc2UsIGFsbG9jYXRlZCBmcm9tIGdsb2JhbCBpbnN0bWVtIGhlYXAgc28KLQkJICogY2luc3QgaXMgaW52YWxpZCwgd2UgdXNlIGl0IG9uIGFsbCBjaGFubmVscyB0aG91Z2ggc28KLQkJICogY2luc3QgbmVlZHMgdG8gYmUgdmFsaWQsIHNldCBpdCB0aGUgc2FtZSBhcyBwaW5zdAotCQkgKi8KLQkJZ3B1b2JqLT5jaW5zdCA9IGdwdW9iai0+cGluc3Q7Ci0KLQkJLyogTWF5YmUgdXNlIE5WX0RNQV9UQVJHRVRfQUdQIGZvciBQQ0lFPyBOVklESUEgZG8gdGhpcywgYW5kCi0JCSAqIGNvbmZpcm1lZCB0byB3b3JrIG9uIGM1MS4gIFBlcmhhcHMgbWVhbnMgTlZfRE1BX1RBUkdFVF9QQ0lFCi0JCSAqIG9uIHRob3NlIGNhcmRzPyAqLwogCQludl93bzMyKGdwdW9iaiwgMCwgTlZfQ0xBU1NfRE1BX0lOX01FTU9SWSB8CiAJCQkJICAgKDEgPDwgMTIpIC8qIFBUIHByZXNlbnQgKi8gfAogCQkJCSAgICgwIDw8IDEzKSAvKiBQVCAqbm90KiBsaW5lYXIgKi8gfAotCQkJCSAgIChOVl9ETUFfQUNDRVNTX1JXICA8PCAxNCkgfAotCQkJCSAgIChOVl9ETUFfVEFSR0VUX1BDSSA8PCAxNikpOworCQkJCSAgICgwIDw8IDE0KSAvKiBSVyAqLyB8CisJCQkJICAgKDIgPDwgMTYpIC8qIFBDSSAqLyk7CiAJCW52X3dvMzIoZ3B1b2JqLCA0LCBhcGVyX3NpemUgLSAxKTsKLQkJZm9yIChpID0gMjsgaSA8IDIgKyAoYXBlcl9zaXplID4+IDEyKTsgaSsrKSB7Ci0JCQludl93bzMyKGdwdW9iaiwgaSAqIDQsCi0JCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5zZ19kdW1teV9idXMgfCAzKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBvYmpfc2l6ZTsgaSArPSA4KSB7Ci0JCQludl93bzMyKGdwdW9iaiwgaSArIDAsIDB4MDAwMDAwMDApOwotCQkJbnZfd28zMihncHVvYmosIGkgKyA0LCAweDAwMDAwMDAwKTsKLQkJfQorCQlmb3IgKGkgPSAyOyBpIDwgMiArIChhcGVyX3NpemUgPj4gMTIpOyBpKyspCisJCQludl93bzMyKGdwdW9iaiwgaSAqIDQsIDB4MDAwMDAwMDApOworCisJCWRldl9wcml2LT5nYXJ0X2luZm8uc2dfY3R4ZG1hID0gZ3B1b2JqOworCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfYmFzZSA9IDA7CisJCWRldl9wcml2LT5nYXJ0X2luZm8uYXBlcl9zaXplID0gYXBlcl9zaXplOworCX0gZWxzZQorCWlmIChkZXZfcHJpdi0+Y2hhbl92bSkgeworCQlyZXQgPSBub3V2ZWF1X3ZtX2dldChkZXZfcHJpdi0+Y2hhbl92bSwgNTEyICogMTAyNCAqIDEwMjQsCisJCQkJICAgICAxMiwgTlZfTUVNX0FDQ0VTU19SVywKKwkJCQkgICAgICZkZXZfcHJpdi0+Z2FydF9pbmZvLnZtYSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWRldl9wcml2LT5nYXJ0X2luZm8uYXBlcl9iYXNlID0gZGV2X3ByaXYtPmdhcnRfaW5mby52bWEub2Zmc2V0OworCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfc2l6ZSA9IDUxMiAqIDEwMjQgKiAxMDI0OwogCX0KLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKIAogCWRldl9wcml2LT5nYXJ0X2luZm8udHlwZSAgICAgID0gTk9VVkVBVV9HQVJUX1NHRE1BOwotCWRldl9wcml2LT5nYXJ0X2luZm8uYXBlcl9iYXNlID0gMDsKLQlkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfc2l6ZSA9IGFwZXJfc2l6ZTsKLQlkZXZfcHJpdi0+Z2FydF9pbmZvLnNnX2N0eGRtYSA9IGdwdW9iajsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzAxLDMxICsyNjMsMTkgQEAKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKGRldl9wcml2LT5nYXJ0X2luZm8uc2dfZHVtbXlfcGFnZSkgewotCQlwY2lfdW5tYXBfcGFnZShkZXYtPnBkZXYsIGRldl9wcml2LT5nYXJ0X2luZm8uc2dfZHVtbXlfYnVzLAotCQkJICAgICAgIE5WX0NUWERNQV9QQUdFX1NJWkUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0JCXVubG9ja19wYWdlKGRldl9wcml2LT5nYXJ0X2luZm8uc2dfZHVtbXlfcGFnZSk7Ci0JCV9fZnJlZV9wYWdlKGRldl9wcml2LT5nYXJ0X2luZm8uc2dfZHVtbXlfcGFnZSk7Ci0JCWRldl9wcml2LT5nYXJ0X2luZm8uc2dfZHVtbXlfcGFnZSA9IE5VTEw7Ci0JCWRldl9wcml2LT5nYXJ0X2luZm8uc2dfZHVtbXlfYnVzID0gMDsKLQl9Ci0KIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmRldl9wcml2LT5nYXJ0X2luZm8uc2dfY3R4ZG1hKTsKKwlub3V2ZWF1X3ZtX3B1dCgmZGV2X3ByaXYtPmdhcnRfaW5mby52bWEpOwogfQogCi1pbnQKLW5vdXZlYXVfc2dkbWFfZ2V0X3BhZ2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCAqcGFnZSkKK3VpbnQzMl90Citub3V2ZWF1X3NnZG1hX2dldF9waHlzaWNhbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBvZmZzZXQpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmdwdW9iaiA9IGRldl9wcml2LT5nYXJ0X2luZm8uc2dfY3R4ZG1hOwotCWludCBwdGU7CisJaW50IHB0ZSA9IChvZmZzZXQgPj4gTlZfQ1RYRE1BX1BBR0VfU0hJRlQpICsgMjsKIAotCXB0ZSA9IChvZmZzZXQgPj4gTlZfQ1RYRE1BX1BBR0VfU0hJRlQpIDw8IDI7Ci0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkgewotCQkqcGFnZSA9IG52X3JvMzIoZ3B1b2JqLCAocHRlICsgOCkpICYgfk5WX0NUWERNQV9QQUdFX01BU0s7Ci0JCXJldHVybiAwOwotCX0KKwlCVUdfT04oZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCk7CiAKLQlOVl9FUlJPUihkZXYsICJVbmltcGxlbWVudGVkIG9uIE5WNTBcbiIpOwotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAobnZfcm8zMihncHVvYmosIDQgKiBwdGUpICYgfk5WX0NUWERNQV9QQUdFX01BU0spIHwKKwkJKG9mZnNldCAmIE5WX0NUWERNQV9QQUdFX01BU0spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCmluZGV4IDA0OWY3NTUuLmE1NGZjNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKQEAgLTUzLDEwICs1MywxMCBAQAogCQllbmdpbmUtPmluc3RtZW0udGFrZWRvd24JPSBudjA0X2luc3RtZW1fdGFrZWRvd247CiAJCWVuZ2luZS0+aW5zdG1lbS5zdXNwZW5kCQk9IG52MDRfaW5zdG1lbV9zdXNwZW5kOwogCQllbmdpbmUtPmluc3RtZW0ucmVzdW1lCQk9IG52MDRfaW5zdG1lbV9yZXN1bWU7Ci0JCWVuZ2luZS0+aW5zdG1lbS5wb3B1bGF0ZQk9IG52MDRfaW5zdG1lbV9wb3B1bGF0ZTsKLQkJZW5naW5lLT5pbnN0bWVtLmNsZWFyCQk9IG52MDRfaW5zdG1lbV9jbGVhcjsKLQkJZW5naW5lLT5pbnN0bWVtLmJpbmQJCT0gbnYwNF9pbnN0bWVtX2JpbmQ7Ci0JCWVuZ2luZS0+aW5zdG1lbS51bmJpbmQJCT0gbnYwNF9pbnN0bWVtX3VuYmluZDsKKwkJZW5naW5lLT5pbnN0bWVtLmdldAkJPSBudjA0X2luc3RtZW1fZ2V0OworCQllbmdpbmUtPmluc3RtZW0ucHV0CQk9IG52MDRfaW5zdG1lbV9wdXQ7CisJCWVuZ2luZS0+aW5zdG1lbS5tYXAJCT0gbnYwNF9pbnN0bWVtX21hcDsKKwkJZW5naW5lLT5pbnN0bWVtLnVubWFwCQk9IG52MDRfaW5zdG1lbV91bm1hcDsKIAkJZW5naW5lLT5pbnN0bWVtLmZsdXNoCQk9IG52MDRfaW5zdG1lbV9mbHVzaDsKIAkJZW5naW5lLT5tYy5pbml0CQkJPSBudjA0X21jX2luaXQ7CiAJCWVuZ2luZS0+bWMudGFrZWRvd24JCT0gbnYwNF9tY190YWtlZG93bjsKQEAgLTY1LDcgKzY1LDYgQEAKIAkJZW5naW5lLT50aW1lci50YWtlZG93bgkJPSBudjA0X3RpbWVyX3Rha2Vkb3duOwogCQllbmdpbmUtPmZiLmluaXQJCQk9IG52MDRfZmJfaW5pdDsKIAkJZW5naW5lLT5mYi50YWtlZG93bgkJPSBudjA0X2ZiX3Rha2Vkb3duOwotCQllbmdpbmUtPmdyYXBoLmdyY2xhc3MJCT0gbnYwNF9ncmFwaF9ncmNsYXNzOwogCQllbmdpbmUtPmdyYXBoLmluaXQJCT0gbnYwNF9ncmFwaF9pbml0OwogCQllbmdpbmUtPmdyYXBoLnRha2Vkb3duCQk9IG52MDRfZ3JhcGhfdGFrZWRvd247CiAJCWVuZ2luZS0+Z3JhcGguZmlmb19hY2Nlc3MJPSBudjA0X2dyYXBoX2ZpZm9fYWNjZXNzOwpAQCAtNzYsNyArNzUsNyBAQAogCQllbmdpbmUtPmdyYXBoLnVubG9hZF9jb250ZXh0CT0gbnYwNF9ncmFwaF91bmxvYWRfY29udGV4dDsKIAkJZW5naW5lLT5maWZvLmNoYW5uZWxzCQk9IDE2OwogCQllbmdpbmUtPmZpZm8uaW5pdAkJPSBudjA0X2ZpZm9faW5pdDsKLQkJZW5naW5lLT5maWZvLnRha2Vkb3duCQk9IG5vdXZlYXVfc3R1Yl90YWtlZG93bjsKKwkJZW5naW5lLT5maWZvLnRha2Vkb3duCQk9IG52MDRfZmlmb19maW5pOwogCQllbmdpbmUtPmZpZm8uZGlzYWJsZQkJPSBudjA0X2ZpZm9fZGlzYWJsZTsKIAkJZW5naW5lLT5maWZvLmVuYWJsZQkJPSBudjA0X2ZpZm9fZW5hYmxlOwogCQllbmdpbmUtPmZpZm8ucmVhc3NpZ24JCT0gbnYwNF9maWZvX3JlYXNzaWduOwpAQCAtOTksMTYgKzk4LDIwIEBACiAJCWVuZ2luZS0+cG0uY2xvY2tfZ2V0CQk9IG52MDRfcG1fY2xvY2tfZ2V0OwogCQllbmdpbmUtPnBtLmNsb2NrX3ByZQkJPSBudjA0X3BtX2Nsb2NrX3ByZTsKIAkJZW5naW5lLT5wbS5jbG9ja19zZXQJCT0gbnYwNF9wbV9jbG9ja19zZXQ7CisJCWVuZ2luZS0+Y3J5cHQuaW5pdAkJPSBub3V2ZWF1X3N0dWJfaW5pdDsKKwkJZW5naW5lLT5jcnlwdC50YWtlZG93bgkJPSBub3V2ZWF1X3N0dWJfdGFrZWRvd247CisJCWVuZ2luZS0+dnJhbS5pbml0CQk9IG5vdXZlYXVfbWVtX2RldGVjdDsKKwkJZW5naW5lLT52cmFtLmZsYWdzX3ZhbGlkCT0gbm91dmVhdV9tZW1fZmxhZ3NfdmFsaWQ7CiAJCWJyZWFrOwogCWNhc2UgMHgxMDoKIAkJZW5naW5lLT5pbnN0bWVtLmluaXQJCT0gbnYwNF9pbnN0bWVtX2luaXQ7CiAJCWVuZ2luZS0+aW5zdG1lbS50YWtlZG93bgk9IG52MDRfaW5zdG1lbV90YWtlZG93bjsKIAkJZW5naW5lLT5pbnN0bWVtLnN1c3BlbmQJCT0gbnYwNF9pbnN0bWVtX3N1c3BlbmQ7CiAJCWVuZ2luZS0+aW5zdG1lbS5yZXN1bWUJCT0gbnYwNF9pbnN0bWVtX3Jlc3VtZTsKLQkJZW5naW5lLT5pbnN0bWVtLnBvcHVsYXRlCT0gbnYwNF9pbnN0bWVtX3BvcHVsYXRlOwotCQllbmdpbmUtPmluc3RtZW0uY2xlYXIJCT0gbnYwNF9pbnN0bWVtX2NsZWFyOwotCQllbmdpbmUtPmluc3RtZW0uYmluZAkJPSBudjA0X2luc3RtZW1fYmluZDsKLQkJZW5naW5lLT5pbnN0bWVtLnVuYmluZAkJPSBudjA0X2luc3RtZW1fdW5iaW5kOworCQllbmdpbmUtPmluc3RtZW0uZ2V0CQk9IG52MDRfaW5zdG1lbV9nZXQ7CisJCWVuZ2luZS0+aW5zdG1lbS5wdXQJCT0gbnYwNF9pbnN0bWVtX3B1dDsKKwkJZW5naW5lLT5pbnN0bWVtLm1hcAkJPSBudjA0X2luc3RtZW1fbWFwOworCQllbmdpbmUtPmluc3RtZW0udW5tYXAJCT0gbnYwNF9pbnN0bWVtX3VubWFwOwogCQllbmdpbmUtPmluc3RtZW0uZmx1c2gJCT0gbnYwNF9pbnN0bWVtX2ZsdXNoOwogCQllbmdpbmUtPm1jLmluaXQJCQk9IG52MDRfbWNfaW5pdDsKIAkJZW5naW5lLT5tYy50YWtlZG93bgkJPSBudjA0X21jX3Rha2Vkb3duOwpAQCAtMTE3LDggKzEyMCw5IEBACiAJCWVuZ2luZS0+dGltZXIudGFrZWRvd24JCT0gbnYwNF90aW1lcl90YWtlZG93bjsKIAkJZW5naW5lLT5mYi5pbml0CQkJPSBudjEwX2ZiX2luaXQ7CiAJCWVuZ2luZS0+ZmIudGFrZWRvd24JCT0gbnYxMF9mYl90YWtlZG93bjsKLQkJZW5naW5lLT5mYi5zZXRfcmVnaW9uX3RpbGluZwk9IG52MTBfZmJfc2V0X3JlZ2lvbl90aWxpbmc7Ci0JCWVuZ2luZS0+Z3JhcGguZ3JjbGFzcwkJPSBudjEwX2dyYXBoX2dyY2xhc3M7CisJCWVuZ2luZS0+ZmIuaW5pdF90aWxlX3JlZ2lvbgk9IG52MTBfZmJfaW5pdF90aWxlX3JlZ2lvbjsKKwkJZW5naW5lLT5mYi5zZXRfdGlsZV9yZWdpb24JPSBudjEwX2ZiX3NldF90aWxlX3JlZ2lvbjsKKwkJZW5naW5lLT5mYi5mcmVlX3RpbGVfcmVnaW9uCT0gbnYxMF9mYl9mcmVlX3RpbGVfcmVnaW9uOwogCQllbmdpbmUtPmdyYXBoLmluaXQJCT0gbnYxMF9ncmFwaF9pbml0OwogCQllbmdpbmUtPmdyYXBoLnRha2Vkb3duCQk9IG52MTBfZ3JhcGhfdGFrZWRvd247CiAJCWVuZ2luZS0+Z3JhcGguY2hhbm5lbAkJPSBudjEwX2dyYXBoX2NoYW5uZWw7CkBAIC0xMjcsMTcgKzEzMSwxNyBAQAogCQllbmdpbmUtPmdyYXBoLmZpZm9fYWNjZXNzCT0gbnYwNF9ncmFwaF9maWZvX2FjY2VzczsKIAkJZW5naW5lLT5ncmFwaC5sb2FkX2NvbnRleHQJPSBudjEwX2dyYXBoX2xvYWRfY29udGV4dDsKIAkJZW5naW5lLT5ncmFwaC51bmxvYWRfY29udGV4dAk9IG52MTBfZ3JhcGhfdW5sb2FkX2NvbnRleHQ7Ci0JCWVuZ2luZS0+Z3JhcGguc2V0X3JlZ2lvbl90aWxpbmcJPSBudjEwX2dyYXBoX3NldF9yZWdpb25fdGlsaW5nOworCQllbmdpbmUtPmdyYXBoLnNldF90aWxlX3JlZ2lvbgk9IG52MTBfZ3JhcGhfc2V0X3RpbGVfcmVnaW9uOwogCQllbmdpbmUtPmZpZm8uY2hhbm5lbHMJCT0gMzI7CiAJCWVuZ2luZS0+Zmlmby5pbml0CQk9IG52MTBfZmlmb19pbml0OwotCQllbmdpbmUtPmZpZm8udGFrZWRvd24JCT0gbm91dmVhdV9zdHViX3Rha2Vkb3duOworCQllbmdpbmUtPmZpZm8udGFrZWRvd24JCT0gbnYwNF9maWZvX2Zpbmk7CiAJCWVuZ2luZS0+Zmlmby5kaXNhYmxlCQk9IG52MDRfZmlmb19kaXNhYmxlOwogCQllbmdpbmUtPmZpZm8uZW5hYmxlCQk9IG52MDRfZmlmb19lbmFibGU7CiAJCWVuZ2luZS0+Zmlmby5yZWFzc2lnbgkJPSBudjA0X2ZpZm9fcmVhc3NpZ247CiAJCWVuZ2luZS0+Zmlmby5jYWNoZV9wdWxsCQk9IG52MDRfZmlmb19jYWNoZV9wdWxsOwogCQllbmdpbmUtPmZpZm8uY2hhbm5lbF9pZAkJPSBudjEwX2ZpZm9fY2hhbm5lbF9pZDsKIAkJZW5naW5lLT5maWZvLmNyZWF0ZV9jb250ZXh0CT0gbnYxMF9maWZvX2NyZWF0ZV9jb250ZXh0OwotCQllbmdpbmUtPmZpZm8uZGVzdHJveV9jb250ZXh0CT0gbnYxMF9maWZvX2Rlc3Ryb3lfY29udGV4dDsKKwkJZW5naW5lLT5maWZvLmRlc3Ryb3lfY29udGV4dAk9IG52MDRfZmlmb19kZXN0cm95X2NvbnRleHQ7CiAJCWVuZ2luZS0+Zmlmby5sb2FkX2NvbnRleHQJPSBudjEwX2ZpZm9fbG9hZF9jb250ZXh0OwogCQllbmdpbmUtPmZpZm8udW5sb2FkX2NvbnRleHQJPSBudjEwX2ZpZm9fdW5sb2FkX2NvbnRleHQ7CiAJCWVuZ2luZS0+ZGlzcGxheS5lYXJseV9pbml0CT0gbnYwNF9kaXNwbGF5X2Vhcmx5X2luaXQ7CkBAIC0xNTMsMTYgKzE1NywyMCBAQAogCQllbmdpbmUtPnBtLmNsb2NrX2dldAkJPSBudjA0X3BtX2Nsb2NrX2dldDsKIAkJZW5naW5lLT5wbS5jbG9ja19wcmUJCT0gbnYwNF9wbV9jbG9ja19wcmU7CiAJCWVuZ2luZS0+cG0uY2xvY2tfc2V0CQk9IG52MDRfcG1fY2xvY2tfc2V0OworCQllbmdpbmUtPmNyeXB0LmluaXQJCT0gbm91dmVhdV9zdHViX2luaXQ7CisJCWVuZ2luZS0+Y3J5cHQudGFrZWRvd24JCT0gbm91dmVhdV9zdHViX3Rha2Vkb3duOworCQllbmdpbmUtPnZyYW0uaW5pdAkJPSBub3V2ZWF1X21lbV9kZXRlY3Q7CisJCWVuZ2luZS0+dnJhbS5mbGFnc192YWxpZAk9IG5vdXZlYXVfbWVtX2ZsYWdzX3ZhbGlkOwogCQlicmVhazsKIAljYXNlIDB4MjA6CiAJCWVuZ2luZS0+aW5zdG1lbS5pbml0CQk9IG52MDRfaW5zdG1lbV9pbml0OwogCQllbmdpbmUtPmluc3RtZW0udGFrZWRvd24JPSBudjA0X2luc3RtZW1fdGFrZWRvd247CiAJCWVuZ2luZS0+aW5zdG1lbS5zdXNwZW5kCQk9IG52MDRfaW5zdG1lbV9zdXNwZW5kOwogCQllbmdpbmUtPmluc3RtZW0ucmVzdW1lCQk9IG52MDRfaW5zdG1lbV9yZXN1bWU7Ci0JCWVuZ2luZS0+aW5zdG1lbS5wb3B1bGF0ZQk9IG52MDRfaW5zdG1lbV9wb3B1bGF0ZTsKLQkJZW5naW5lLT5pbnN0bWVtLmNsZWFyCQk9IG52MDRfaW5zdG1lbV9jbGVhcjsKLQkJZW5naW5lLT5pbnN0bWVtLmJpbmQJCT0gbnYwNF9pbnN0bWVtX2JpbmQ7Ci0JCWVuZ2luZS0+aW5zdG1lbS51bmJpbmQJCT0gbnYwNF9pbnN0bWVtX3VuYmluZDsKKwkJZW5naW5lLT5pbnN0bWVtLmdldAkJPSBudjA0X2luc3RtZW1fZ2V0OworCQllbmdpbmUtPmluc3RtZW0ucHV0CQk9IG52MDRfaW5zdG1lbV9wdXQ7CisJCWVuZ2luZS0+aW5zdG1lbS5tYXAJCT0gbnYwNF9pbnN0bWVtX21hcDsKKwkJZW5naW5lLT5pbnN0bWVtLnVubWFwCQk9IG52MDRfaW5zdG1lbV91bm1hcDsKIAkJZW5naW5lLT5pbnN0bWVtLmZsdXNoCQk9IG52MDRfaW5zdG1lbV9mbHVzaDsKIAkJZW5naW5lLT5tYy5pbml0CQkJPSBudjA0X21jX2luaXQ7CiAJCWVuZ2luZS0+bWMudGFrZWRvd24JCT0gbnYwNF9tY190YWtlZG93bjsKQEAgLTE3MSw4ICsxNzksOSBAQAogCQllbmdpbmUtPnRpbWVyLnRha2Vkb3duCQk9IG52MDRfdGltZXJfdGFrZWRvd247CiAJCWVuZ2luZS0+ZmIuaW5pdAkJCT0gbnYxMF9mYl9pbml0OwogCQllbmdpbmUtPmZiLnRha2Vkb3duCQk9IG52MTBfZmJfdGFrZWRvd247Ci0JCWVuZ2luZS0+ZmIuc2V0X3JlZ2lvbl90aWxpbmcJPSBudjEwX2ZiX3NldF9yZWdpb25fdGlsaW5nOwotCQllbmdpbmUtPmdyYXBoLmdyY2xhc3MJCT0gbnYyMF9ncmFwaF9ncmNsYXNzOworCQllbmdpbmUtPmZiLmluaXRfdGlsZV9yZWdpb24JPSBudjEwX2ZiX2luaXRfdGlsZV9yZWdpb247CisJCWVuZ2luZS0+ZmIuc2V0X3RpbGVfcmVnaW9uCT0gbnYxMF9mYl9zZXRfdGlsZV9yZWdpb247CisJCWVuZ2luZS0+ZmIuZnJlZV90aWxlX3JlZ2lvbgk9IG52MTBfZmJfZnJlZV90aWxlX3JlZ2lvbjsKIAkJZW5naW5lLT5ncmFwaC5pbml0CQk9IG52MjBfZ3JhcGhfaW5pdDsKIAkJZW5naW5lLT5ncmFwaC50YWtlZG93bgkJPSBudjIwX2dyYXBoX3Rha2Vkb3duOwogCQllbmdpbmUtPmdyYXBoLmNoYW5uZWwJCT0gbnYxMF9ncmFwaF9jaGFubmVsOwpAQCAtMTgxLDE3ICsxOTAsMTcgQEAKIAkJZW5naW5lLT5ncmFwaC5maWZvX2FjY2Vzcwk9IG52MDRfZ3JhcGhfZmlmb19hY2Nlc3M7CiAJCWVuZ2luZS0+Z3JhcGgubG9hZF9jb250ZXh0CT0gbnYyMF9ncmFwaF9sb2FkX2NvbnRleHQ7CiAJCWVuZ2luZS0+Z3JhcGgudW5sb2FkX2NvbnRleHQJPSBudjIwX2dyYXBoX3VubG9hZF9jb250ZXh0OwotCQllbmdpbmUtPmdyYXBoLnNldF9yZWdpb25fdGlsaW5nCT0gbnYyMF9ncmFwaF9zZXRfcmVnaW9uX3RpbGluZzsKKwkJZW5naW5lLT5ncmFwaC5zZXRfdGlsZV9yZWdpb24JPSBudjIwX2dyYXBoX3NldF90aWxlX3JlZ2lvbjsKIAkJZW5naW5lLT5maWZvLmNoYW5uZWxzCQk9IDMyOwogCQllbmdpbmUtPmZpZm8uaW5pdAkJPSBudjEwX2ZpZm9faW5pdDsKLQkJZW5naW5lLT5maWZvLnRha2Vkb3duCQk9IG5vdXZlYXVfc3R1Yl90YWtlZG93bjsKKwkJZW5naW5lLT5maWZvLnRha2Vkb3duCQk9IG52MDRfZmlmb19maW5pOwogCQllbmdpbmUtPmZpZm8uZGlzYWJsZQkJPSBudjA0X2ZpZm9fZGlzYWJsZTsKIAkJZW5naW5lLT5maWZvLmVuYWJsZQkJPSBudjA0X2ZpZm9fZW5hYmxlOwogCQllbmdpbmUtPmZpZm8ucmVhc3NpZ24JCT0gbnYwNF9maWZvX3JlYXNzaWduOwogCQllbmdpbmUtPmZpZm8uY2FjaGVfcHVsbAkJPSBudjA0X2ZpZm9fY2FjaGVfcHVsbDsKIAkJZW5naW5lLT5maWZvLmNoYW5uZWxfaWQJCT0gbnYxMF9maWZvX2NoYW5uZWxfaWQ7CiAJCWVuZ2luZS0+Zmlmby5jcmVhdGVfY29udGV4dAk9IG52MTBfZmlmb19jcmVhdGVfY29udGV4dDsKLQkJZW5naW5lLT5maWZvLmRlc3Ryb3lfY29udGV4dAk9IG52MTBfZmlmb19kZXN0cm95X2NvbnRleHQ7CisJCWVuZ2luZS0+Zmlmby5kZXN0cm95X2NvbnRleHQJPSBudjA0X2ZpZm9fZGVzdHJveV9jb250ZXh0OwogCQllbmdpbmUtPmZpZm8ubG9hZF9jb250ZXh0CT0gbnYxMF9maWZvX2xvYWRfY29udGV4dDsKIAkJZW5naW5lLT5maWZvLnVubG9hZF9jb250ZXh0CT0gbnYxMF9maWZvX3VubG9hZF9jb250ZXh0OwogCQllbmdpbmUtPmRpc3BsYXkuZWFybHlfaW5pdAk9IG52MDRfZGlzcGxheV9lYXJseV9pbml0OwpAQCAtMjA3LDE2ICsyMTYsMjAgQEAKIAkJZW5naW5lLT5wbS5jbG9ja19nZXQJCT0gbnYwNF9wbV9jbG9ja19nZXQ7CiAJCWVuZ2luZS0+cG0uY2xvY2tfcHJlCQk9IG52MDRfcG1fY2xvY2tfcHJlOwogCQllbmdpbmUtPnBtLmNsb2NrX3NldAkJPSBudjA0X3BtX2Nsb2NrX3NldDsKKwkJZW5naW5lLT5jcnlwdC5pbml0CQk9IG5vdXZlYXVfc3R1Yl9pbml0OworCQllbmdpbmUtPmNyeXB0LnRha2Vkb3duCQk9IG5vdXZlYXVfc3R1Yl90YWtlZG93bjsKKwkJZW5naW5lLT52cmFtLmluaXQJCT0gbm91dmVhdV9tZW1fZGV0ZWN0OworCQllbmdpbmUtPnZyYW0uZmxhZ3NfdmFsaWQJPSBub3V2ZWF1X21lbV9mbGFnc192YWxpZDsKIAkJYnJlYWs7CiAJY2FzZSAweDMwOgogCQllbmdpbmUtPmluc3RtZW0uaW5pdAkJPSBudjA0X2luc3RtZW1faW5pdDsKIAkJZW5naW5lLT5pbnN0bWVtLnRha2Vkb3duCT0gbnYwNF9pbnN0bWVtX3Rha2Vkb3duOwogCQllbmdpbmUtPmluc3RtZW0uc3VzcGVuZAkJPSBudjA0X2luc3RtZW1fc3VzcGVuZDsKIAkJZW5naW5lLT5pbnN0bWVtLnJlc3VtZQkJPSBudjA0X2luc3RtZW1fcmVzdW1lOwotCQllbmdpbmUtPmluc3RtZW0ucG9wdWxhdGUJPSBudjA0X2luc3RtZW1fcG9wdWxhdGU7Ci0JCWVuZ2luZS0+aW5zdG1lbS5jbGVhcgkJPSBudjA0X2luc3RtZW1fY2xlYXI7Ci0JCWVuZ2luZS0+aW5zdG1lbS5iaW5kCQk9IG52MDRfaW5zdG1lbV9iaW5kOwotCQllbmdpbmUtPmluc3RtZW0udW5iaW5kCQk9IG52MDRfaW5zdG1lbV91bmJpbmQ7CisJCWVuZ2luZS0+aW5zdG1lbS5nZXQJCT0gbnYwNF9pbnN0bWVtX2dldDsKKwkJZW5naW5lLT5pbnN0bWVtLnB1dAkJPSBudjA0X2luc3RtZW1fcHV0OworCQllbmdpbmUtPmluc3RtZW0ubWFwCQk9IG52MDRfaW5zdG1lbV9tYXA7CisJCWVuZ2luZS0+aW5zdG1lbS51bm1hcAkJPSBudjA0X2luc3RtZW1fdW5tYXA7CiAJCWVuZ2luZS0+aW5zdG1lbS5mbHVzaAkJPSBudjA0X2luc3RtZW1fZmx1c2g7CiAJCWVuZ2luZS0+bWMuaW5pdAkJCT0gbnYwNF9tY19pbml0OwogCQllbmdpbmUtPm1jLnRha2Vkb3duCQk9IG52MDRfbWNfdGFrZWRvd247CkBAIC0yMjUsOCArMjM4LDkgQEAKIAkJZW5naW5lLT50aW1lci50YWtlZG93bgkJPSBudjA0X3RpbWVyX3Rha2Vkb3duOwogCQllbmdpbmUtPmZiLmluaXQJCQk9IG52MzBfZmJfaW5pdDsKIAkJZW5naW5lLT5mYi50YWtlZG93bgkJPSBudjMwX2ZiX3Rha2Vkb3duOwotCQllbmdpbmUtPmZiLnNldF9yZWdpb25fdGlsaW5nCT0gbnYxMF9mYl9zZXRfcmVnaW9uX3RpbGluZzsKLQkJZW5naW5lLT5ncmFwaC5ncmNsYXNzCQk9IG52MzBfZ3JhcGhfZ3JjbGFzczsKKwkJZW5naW5lLT5mYi5pbml0X3RpbGVfcmVnaW9uCT0gbnYzMF9mYl9pbml0X3RpbGVfcmVnaW9uOworCQllbmdpbmUtPmZiLnNldF90aWxlX3JlZ2lvbgk9IG52MTBfZmJfc2V0X3RpbGVfcmVnaW9uOworCQllbmdpbmUtPmZiLmZyZWVfdGlsZV9yZWdpb24JPSBudjMwX2ZiX2ZyZWVfdGlsZV9yZWdpb247CiAJCWVuZ2luZS0+Z3JhcGguaW5pdAkJPSBudjMwX2dyYXBoX2luaXQ7CiAJCWVuZ2luZS0+Z3JhcGgudGFrZWRvd24JCT0gbnYyMF9ncmFwaF90YWtlZG93bjsKIAkJZW5naW5lLT5ncmFwaC5maWZvX2FjY2Vzcwk9IG52MDRfZ3JhcGhfZmlmb19hY2Nlc3M7CkBAIC0yMzUsMTcgKzI0OSwxNyBAQAogCQllbmdpbmUtPmdyYXBoLmRlc3Ryb3lfY29udGV4dAk9IG52MjBfZ3JhcGhfZGVzdHJveV9jb250ZXh0OwogCQllbmdpbmUtPmdyYXBoLmxvYWRfY29udGV4dAk9IG52MjBfZ3JhcGhfbG9hZF9jb250ZXh0OwogCQllbmdpbmUtPmdyYXBoLnVubG9hZF9jb250ZXh0CT0gbnYyMF9ncmFwaF91bmxvYWRfY29udGV4dDsKLQkJZW5naW5lLT5ncmFwaC5zZXRfcmVnaW9uX3RpbGluZwk9IG52MjBfZ3JhcGhfc2V0X3JlZ2lvbl90aWxpbmc7CisJCWVuZ2luZS0+Z3JhcGguc2V0X3RpbGVfcmVnaW9uCT0gbnYyMF9ncmFwaF9zZXRfdGlsZV9yZWdpb247CiAJCWVuZ2luZS0+Zmlmby5jaGFubmVscwkJPSAzMjsKIAkJZW5naW5lLT5maWZvLmluaXQJCT0gbnYxMF9maWZvX2luaXQ7Ci0JCWVuZ2luZS0+Zmlmby50YWtlZG93bgkJPSBub3V2ZWF1X3N0dWJfdGFrZWRvd247CisJCWVuZ2luZS0+Zmlmby50YWtlZG93bgkJPSBudjA0X2ZpZm9fZmluaTsKIAkJZW5naW5lLT5maWZvLmRpc2FibGUJCT0gbnYwNF9maWZvX2Rpc2FibGU7CiAJCWVuZ2luZS0+Zmlmby5lbmFibGUJCT0gbnYwNF9maWZvX2VuYWJsZTsKIAkJZW5naW5lLT5maWZvLnJlYXNzaWduCQk9IG52MDRfZmlmb19yZWFzc2lnbjsKIAkJZW5naW5lLT5maWZvLmNhY2hlX3B1bGwJCT0gbnYwNF9maWZvX2NhY2hlX3B1bGw7CiAJCWVuZ2luZS0+Zmlmby5jaGFubmVsX2lkCQk9IG52MTBfZmlmb19jaGFubmVsX2lkOwogCQllbmdpbmUtPmZpZm8uY3JlYXRlX2NvbnRleHQJPSBudjEwX2ZpZm9fY3JlYXRlX2NvbnRleHQ7Ci0JCWVuZ2luZS0+Zmlmby5kZXN0cm95X2NvbnRleHQJPSBudjEwX2ZpZm9fZGVzdHJveV9jb250ZXh0OworCQllbmdpbmUtPmZpZm8uZGVzdHJveV9jb250ZXh0CT0gbnYwNF9maWZvX2Rlc3Ryb3lfY29udGV4dDsKIAkJZW5naW5lLT5maWZvLmxvYWRfY29udGV4dAk9IG52MTBfZmlmb19sb2FkX2NvbnRleHQ7CiAJCWVuZ2luZS0+Zmlmby51bmxvYWRfY29udGV4dAk9IG52MTBfZmlmb191bmxvYWRfY29udGV4dDsKIAkJZW5naW5lLT5kaXNwbGF5LmVhcmx5X2luaXQJPSBudjA0X2Rpc3BsYXlfZWFybHlfaW5pdDsKQEAgLTI2Myw2ICsyNzcsMTAgQEAKIAkJZW5naW5lLT5wbS5jbG9ja19zZXQJCT0gbnYwNF9wbV9jbG9ja19zZXQ7CiAJCWVuZ2luZS0+cG0udm9sdGFnZV9nZXQJCT0gbm91dmVhdV92b2x0YWdlX2dwaW9fZ2V0OwogCQllbmdpbmUtPnBtLnZvbHRhZ2Vfc2V0CQk9IG5vdXZlYXVfdm9sdGFnZV9ncGlvX3NldDsKKwkJZW5naW5lLT5jcnlwdC5pbml0CQk9IG5vdXZlYXVfc3R1Yl9pbml0OworCQllbmdpbmUtPmNyeXB0LnRha2Vkb3duCQk9IG5vdXZlYXVfc3R1Yl90YWtlZG93bjsKKwkJZW5naW5lLT52cmFtLmluaXQJCT0gbm91dmVhdV9tZW1fZGV0ZWN0OworCQllbmdpbmUtPnZyYW0uZmxhZ3NfdmFsaWQJPSBub3V2ZWF1X21lbV9mbGFnc192YWxpZDsKIAkJYnJlYWs7CiAJY2FzZSAweDQwOgogCWNhc2UgMHg2MDoKQEAgLTI3MCwxMCArMjg4LDEwIEBACiAJCWVuZ2luZS0+aW5zdG1lbS50YWtlZG93bgk9IG52MDRfaW5zdG1lbV90YWtlZG93bjsKIAkJZW5naW5lLT5pbnN0bWVtLnN1c3BlbmQJCT0gbnYwNF9pbnN0bWVtX3N1c3BlbmQ7CiAJCWVuZ2luZS0+aW5zdG1lbS5yZXN1bWUJCT0gbnYwNF9pbnN0bWVtX3Jlc3VtZTsKLQkJZW5naW5lLT5pbnN0bWVtLnBvcHVsYXRlCT0gbnYwNF9pbnN0bWVtX3BvcHVsYXRlOwotCQllbmdpbmUtPmluc3RtZW0uY2xlYXIJCT0gbnYwNF9pbnN0bWVtX2NsZWFyOwotCQllbmdpbmUtPmluc3RtZW0uYmluZAkJPSBudjA0X2luc3RtZW1fYmluZDsKLQkJZW5naW5lLT5pbnN0bWVtLnVuYmluZAkJPSBudjA0X2luc3RtZW1fdW5iaW5kOworCQllbmdpbmUtPmluc3RtZW0uZ2V0CQk9IG52MDRfaW5zdG1lbV9nZXQ7CisJCWVuZ2luZS0+aW5zdG1lbS5wdXQJCT0gbnYwNF9pbnN0bWVtX3B1dDsKKwkJZW5naW5lLT5pbnN0bWVtLm1hcAkJPSBudjA0X2luc3RtZW1fbWFwOworCQllbmdpbmUtPmluc3RtZW0udW5tYXAJCT0gbnYwNF9pbnN0bWVtX3VubWFwOwogCQllbmdpbmUtPmluc3RtZW0uZmx1c2gJCT0gbnYwNF9pbnN0bWVtX2ZsdXNoOwogCQllbmdpbmUtPm1jLmluaXQJCQk9IG52NDBfbWNfaW5pdDsKIAkJZW5naW5lLT5tYy50YWtlZG93bgkJPSBudjQwX21jX3Rha2Vkb3duOwpAQCAtMjgyLDggKzMwMCw5IEBACiAJCWVuZ2luZS0+dGltZXIudGFrZWRvd24JCT0gbnYwNF90aW1lcl90YWtlZG93bjsKIAkJZW5naW5lLT5mYi5pbml0CQkJPSBudjQwX2ZiX2luaXQ7CiAJCWVuZ2luZS0+ZmIudGFrZWRvd24JCT0gbnY0MF9mYl90YWtlZG93bjsKLQkJZW5naW5lLT5mYi5zZXRfcmVnaW9uX3RpbGluZwk9IG52NDBfZmJfc2V0X3JlZ2lvbl90aWxpbmc7Ci0JCWVuZ2luZS0+Z3JhcGguZ3JjbGFzcwkJPSBudjQwX2dyYXBoX2dyY2xhc3M7CisJCWVuZ2luZS0+ZmIuaW5pdF90aWxlX3JlZ2lvbgk9IG52MzBfZmJfaW5pdF90aWxlX3JlZ2lvbjsKKwkJZW5naW5lLT5mYi5zZXRfdGlsZV9yZWdpb24JPSBudjQwX2ZiX3NldF90aWxlX3JlZ2lvbjsKKwkJZW5naW5lLT5mYi5mcmVlX3RpbGVfcmVnaW9uCT0gbnYzMF9mYl9mcmVlX3RpbGVfcmVnaW9uOwogCQllbmdpbmUtPmdyYXBoLmluaXQJCT0gbnY0MF9ncmFwaF9pbml0OwogCQllbmdpbmUtPmdyYXBoLnRha2Vkb3duCQk9IG52NDBfZ3JhcGhfdGFrZWRvd247CiAJCWVuZ2luZS0+Z3JhcGguZmlmb19hY2Nlc3MJPSBudjA0X2dyYXBoX2ZpZm9fYWNjZXNzOwpAQCAtMjkyLDE3ICszMTEsMTcgQEAKIAkJZW5naW5lLT5ncmFwaC5kZXN0cm95X2NvbnRleHQJPSBudjQwX2dyYXBoX2Rlc3Ryb3lfY29udGV4dDsKIAkJZW5naW5lLT5ncmFwaC5sb2FkX2NvbnRleHQJPSBudjQwX2dyYXBoX2xvYWRfY29udGV4dDsKIAkJZW5naW5lLT5ncmFwaC51bmxvYWRfY29udGV4dAk9IG52NDBfZ3JhcGhfdW5sb2FkX2NvbnRleHQ7Ci0JCWVuZ2luZS0+Z3JhcGguc2V0X3JlZ2lvbl90aWxpbmcJPSBudjQwX2dyYXBoX3NldF9yZWdpb25fdGlsaW5nOworCQllbmdpbmUtPmdyYXBoLnNldF90aWxlX3JlZ2lvbgk9IG52NDBfZ3JhcGhfc2V0X3RpbGVfcmVnaW9uOwogCQllbmdpbmUtPmZpZm8uY2hhbm5lbHMJCT0gMzI7CiAJCWVuZ2luZS0+Zmlmby5pbml0CQk9IG52NDBfZmlmb19pbml0OwotCQllbmdpbmUtPmZpZm8udGFrZWRvd24JCT0gbm91dmVhdV9zdHViX3Rha2Vkb3duOworCQllbmdpbmUtPmZpZm8udGFrZWRvd24JCT0gbnYwNF9maWZvX2Zpbmk7CiAJCWVuZ2luZS0+Zmlmby5kaXNhYmxlCQk9IG52MDRfZmlmb19kaXNhYmxlOwogCQllbmdpbmUtPmZpZm8uZW5hYmxlCQk9IG52MDRfZmlmb19lbmFibGU7CiAJCWVuZ2luZS0+Zmlmby5yZWFzc2lnbgkJPSBudjA0X2ZpZm9fcmVhc3NpZ247CiAJCWVuZ2luZS0+Zmlmby5jYWNoZV9wdWxsCQk9IG52MDRfZmlmb19jYWNoZV9wdWxsOwogCQllbmdpbmUtPmZpZm8uY2hhbm5lbF9pZAkJPSBudjEwX2ZpZm9fY2hhbm5lbF9pZDsKIAkJZW5naW5lLT5maWZvLmNyZWF0ZV9jb250ZXh0CT0gbnY0MF9maWZvX2NyZWF0ZV9jb250ZXh0OwotCQllbmdpbmUtPmZpZm8uZGVzdHJveV9jb250ZXh0CT0gbnY0MF9maWZvX2Rlc3Ryb3lfY29udGV4dDsKKwkJZW5naW5lLT5maWZvLmRlc3Ryb3lfY29udGV4dAk9IG52MDRfZmlmb19kZXN0cm95X2NvbnRleHQ7CiAJCWVuZ2luZS0+Zmlmby5sb2FkX2NvbnRleHQJPSBudjQwX2ZpZm9fbG9hZF9jb250ZXh0OwogCQllbmdpbmUtPmZpZm8udW5sb2FkX2NvbnRleHQJPSBudjQwX2ZpZm9fdW5sb2FkX2NvbnRleHQ7CiAJCWVuZ2luZS0+ZGlzcGxheS5lYXJseV9pbml0CT0gbnYwNF9kaXNwbGF5X2Vhcmx5X2luaXQ7CkBAIC0zMjEsNiArMzQwLDEwIEBACiAJCWVuZ2luZS0+cG0udm9sdGFnZV9nZXQJCT0gbm91dmVhdV92b2x0YWdlX2dwaW9fZ2V0OwogCQllbmdpbmUtPnBtLnZvbHRhZ2Vfc2V0CQk9IG5vdXZlYXVfdm9sdGFnZV9ncGlvX3NldDsKIAkJZW5naW5lLT5wbS50ZW1wX2dldAkJPSBudjQwX3RlbXBfZ2V0OworCQllbmdpbmUtPmNyeXB0LmluaXQJCT0gbm91dmVhdV9zdHViX2luaXQ7CisJCWVuZ2luZS0+Y3J5cHQudGFrZWRvd24JCT0gbm91dmVhdV9zdHViX3Rha2Vkb3duOworCQllbmdpbmUtPnZyYW0uaW5pdAkJPSBub3V2ZWF1X21lbV9kZXRlY3Q7CisJCWVuZ2luZS0+dnJhbS5mbGFnc192YWxpZAk9IG5vdXZlYXVfbWVtX2ZsYWdzX3ZhbGlkOwogCQlicmVhazsKIAljYXNlIDB4NTA6CiAJY2FzZSAweDgwOiAvKiBnb3R0YSBsb3ZlIE5WSURJQSdzIGNvbnNpc3RlbmN5Li4gKi8KQEAgLTMzMCwxMCArMzUzLDEwIEBACiAJCWVuZ2luZS0+aW5zdG1lbS50YWtlZG93bgk9IG52NTBfaW5zdG1lbV90YWtlZG93bjsKIAkJZW5naW5lLT5pbnN0bWVtLnN1c3BlbmQJCT0gbnY1MF9pbnN0bWVtX3N1c3BlbmQ7CiAJCWVuZ2luZS0+aW5zdG1lbS5yZXN1bWUJCT0gbnY1MF9pbnN0bWVtX3Jlc3VtZTsKLQkJZW5naW5lLT5pbnN0bWVtLnBvcHVsYXRlCT0gbnY1MF9pbnN0bWVtX3BvcHVsYXRlOwotCQllbmdpbmUtPmluc3RtZW0uY2xlYXIJCT0gbnY1MF9pbnN0bWVtX2NsZWFyOwotCQllbmdpbmUtPmluc3RtZW0uYmluZAkJPSBudjUwX2luc3RtZW1fYmluZDsKLQkJZW5naW5lLT5pbnN0bWVtLnVuYmluZAkJPSBudjUwX2luc3RtZW1fdW5iaW5kOworCQllbmdpbmUtPmluc3RtZW0uZ2V0CQk9IG52NTBfaW5zdG1lbV9nZXQ7CisJCWVuZ2luZS0+aW5zdG1lbS5wdXQJCT0gbnY1MF9pbnN0bWVtX3B1dDsKKwkJZW5naW5lLT5pbnN0bWVtLm1hcAkJPSBudjUwX2luc3RtZW1fbWFwOworCQllbmdpbmUtPmluc3RtZW0udW5tYXAJCT0gbnY1MF9pbnN0bWVtX3VubWFwOwogCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKIAkJCWVuZ2luZS0+aW5zdG1lbS5mbHVzaAk9IG52NTBfaW5zdG1lbV9mbHVzaDsKIAkJZWxzZQpAQCAtMzQ1LDcgKzM2OCw2IEBACiAJCWVuZ2luZS0+dGltZXIudGFrZWRvd24JCT0gbnYwNF90aW1lcl90YWtlZG93bjsKIAkJZW5naW5lLT5mYi5pbml0CQkJPSBudjUwX2ZiX2luaXQ7CiAJCWVuZ2luZS0+ZmIudGFrZWRvd24JCT0gbnY1MF9mYl90YWtlZG93bjsKLQkJZW5naW5lLT5ncmFwaC5ncmNsYXNzCQk9IG52NTBfZ3JhcGhfZ3JjbGFzczsKIAkJZW5naW5lLT5ncmFwaC5pbml0CQk9IG52NTBfZ3JhcGhfaW5pdDsKIAkJZW5naW5lLT5ncmFwaC50YWtlZG93bgkJPSBudjUwX2dyYXBoX3Rha2Vkb3duOwogCQllbmdpbmUtPmdyYXBoLmZpZm9fYWNjZXNzCT0gbnY1MF9ncmFwaF9maWZvX2FjY2VzczsKQEAgLTM4MSwyNCArNDAzLDMyIEBACiAJCWVuZ2luZS0+ZGlzcGxheS5pbml0CQk9IG52NTBfZGlzcGxheV9pbml0OwogCQllbmdpbmUtPmRpc3BsYXkuZGVzdHJveQkJPSBudjUwX2Rpc3BsYXlfZGVzdHJveTsKIAkJZW5naW5lLT5ncGlvLmluaXQJCT0gbnY1MF9ncGlvX2luaXQ7Ci0JCWVuZ2luZS0+Z3Bpby50YWtlZG93bgkJPSBub3V2ZWF1X3N0dWJfdGFrZWRvd247CisJCWVuZ2luZS0+Z3Bpby50YWtlZG93bgkJPSBudjUwX2dwaW9fZmluaTsKIAkJZW5naW5lLT5ncGlvLmdldAkJPSBudjUwX2dwaW9fZ2V0OwogCQllbmdpbmUtPmdwaW8uc2V0CQk9IG52NTBfZ3Bpb19zZXQ7CisJCWVuZ2luZS0+Z3Bpby5pcnFfcmVnaXN0ZXIJPSBudjUwX2dwaW9faXJxX3JlZ2lzdGVyOworCQllbmdpbmUtPmdwaW8uaXJxX3VucmVnaXN0ZXIJPSBudjUwX2dwaW9faXJxX3VucmVnaXN0ZXI7CiAJCWVuZ2luZS0+Z3Bpby5pcnFfZW5hYmxlCQk9IG52NTBfZ3Bpb19pcnFfZW5hYmxlOwogCQlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7Ci0JCWNhc2UgMHhhMzoKLQkJY2FzZSAweGE1OgotCQljYXNlIDB4YTg6Ci0JCWNhc2UgMHhhZjoKLQkJCWVuZ2luZS0+cG0uY2xvY2tfZ2V0CT0gbnZhM19wbV9jbG9ja19nZXQ7Ci0JCQllbmdpbmUtPnBtLmNsb2NrX3ByZQk9IG52YTNfcG1fY2xvY2tfcHJlOwotCQkJZW5naW5lLT5wbS5jbG9ja19zZXQJPSBudmEzX3BtX2Nsb2NrX3NldDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgorCQljYXNlIDB4ODQ6CisJCWNhc2UgMHg4NjoKKwkJY2FzZSAweDkyOgorCQljYXNlIDB4OTQ6CisJCWNhc2UgMHg5NjoKKwkJY2FzZSAweDk4OgorCQljYXNlIDB4YTA6CisJCWNhc2UgMHhhYToKKwkJY2FzZSAweGFjOgorCQljYXNlIDB4NTA6CiAJCQllbmdpbmUtPnBtLmNsb2NrX2dldAk9IG52NTBfcG1fY2xvY2tfZ2V0OwogCQkJZW5naW5lLT5wbS5jbG9ja19wcmUJPSBudjUwX3BtX2Nsb2NrX3ByZTsKIAkJCWVuZ2luZS0+cG0uY2xvY2tfc2V0CT0gbnY1MF9wbV9jbG9ja19zZXQ7CiAJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVuZ2luZS0+cG0uY2xvY2tfZ2V0CT0gbnZhM19wbV9jbG9ja19nZXQ7CisJCQllbmdpbmUtPnBtLmNsb2NrX3ByZQk9IG52YTNfcG1fY2xvY2tfcHJlOworCQkJZW5naW5lLT5wbS5jbG9ja19zZXQJPSBudmEzX3BtX2Nsb2NrX3NldDsKKwkJCWJyZWFrOwogCQl9CiAJCWVuZ2luZS0+cG0udm9sdGFnZV9nZXQJCT0gbm91dmVhdV92b2x0YWdlX2dwaW9fZ2V0OwogCQllbmdpbmUtPnBtLnZvbHRhZ2Vfc2V0CQk9IG5vdXZlYXVfdm9sdGFnZV9ncGlvX3NldDsKQEAgLTQwNiwxNyArNDM2LDM5IEBACiAJCQllbmdpbmUtPnBtLnRlbXBfZ2V0CT0gbnY4NF90ZW1wX2dldDsKIAkJZWxzZQogCQkJZW5naW5lLT5wbS50ZW1wX2dldAk9IG52NDBfdGVtcF9nZXQ7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJY2FzZSAweDg0OgorCQljYXNlIDB4ODY6CisJCWNhc2UgMHg5MjoKKwkJY2FzZSAweDk0OgorCQljYXNlIDB4OTY6CisJCWNhc2UgMHhhMDoKKwkJCWVuZ2luZS0+Y3J5cHQuaW5pdAk9IG52ODRfY3J5cHRfaW5pdDsKKwkJCWVuZ2luZS0+Y3J5cHQudGFrZWRvd24JPSBudjg0X2NyeXB0X2Zpbmk7CisJCQllbmdpbmUtPmNyeXB0LmNyZWF0ZV9jb250ZXh0ID0gbnY4NF9jcnlwdF9jcmVhdGVfY29udGV4dDsKKwkJCWVuZ2luZS0+Y3J5cHQuZGVzdHJveV9jb250ZXh0ID0gbnY4NF9jcnlwdF9kZXN0cm95X2NvbnRleHQ7CisJCQllbmdpbmUtPmNyeXB0LnRsYl9mbHVzaAk9IG52ODRfY3J5cHRfdGxiX2ZsdXNoOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbmdpbmUtPmNyeXB0LmluaXQJPSBub3V2ZWF1X3N0dWJfaW5pdDsKKwkJCWVuZ2luZS0+Y3J5cHQudGFrZWRvd24JPSBub3V2ZWF1X3N0dWJfdGFrZWRvd247CisJCQlicmVhazsKKwkJfQorCQllbmdpbmUtPnZyYW0uaW5pdAkJPSBudjUwX3ZyYW1faW5pdDsKKwkJZW5naW5lLT52cmFtLmdldAkJPSBudjUwX3ZyYW1fbmV3OworCQllbmdpbmUtPnZyYW0ucHV0CQk9IG52NTBfdnJhbV9kZWw7CisJCWVuZ2luZS0+dnJhbS5mbGFnc192YWxpZAk9IG52NTBfdnJhbV9mbGFnc192YWxpZDsKIAkJYnJlYWs7CiAJY2FzZSAweEMwOgogCQllbmdpbmUtPmluc3RtZW0uaW5pdAkJPSBudmMwX2luc3RtZW1faW5pdDsKIAkJZW5naW5lLT5pbnN0bWVtLnRha2Vkb3duCT0gbnZjMF9pbnN0bWVtX3Rha2Vkb3duOwogCQllbmdpbmUtPmluc3RtZW0uc3VzcGVuZAkJPSBudmMwX2luc3RtZW1fc3VzcGVuZDsKIAkJZW5naW5lLT5pbnN0bWVtLnJlc3VtZQkJPSBudmMwX2luc3RtZW1fcmVzdW1lOwotCQllbmdpbmUtPmluc3RtZW0ucG9wdWxhdGUJPSBudmMwX2luc3RtZW1fcG9wdWxhdGU7Ci0JCWVuZ2luZS0+aW5zdG1lbS5jbGVhcgkJPSBudmMwX2luc3RtZW1fY2xlYXI7Ci0JCWVuZ2luZS0+aW5zdG1lbS5iaW5kCQk9IG52YzBfaW5zdG1lbV9iaW5kOwotCQllbmdpbmUtPmluc3RtZW0udW5iaW5kCQk9IG52YzBfaW5zdG1lbV91bmJpbmQ7Ci0JCWVuZ2luZS0+aW5zdG1lbS5mbHVzaAkJPSBudmMwX2luc3RtZW1fZmx1c2g7CisJCWVuZ2luZS0+aW5zdG1lbS5nZXQJCT0gbnY1MF9pbnN0bWVtX2dldDsKKwkJZW5naW5lLT5pbnN0bWVtLnB1dAkJPSBudjUwX2luc3RtZW1fcHV0OworCQllbmdpbmUtPmluc3RtZW0ubWFwCQk9IG52NTBfaW5zdG1lbV9tYXA7CisJCWVuZ2luZS0+aW5zdG1lbS51bm1hcAkJPSBudjUwX2luc3RtZW1fdW5tYXA7CisJCWVuZ2luZS0+aW5zdG1lbS5mbHVzaAkJPSBudjg0X2luc3RtZW1fZmx1c2g7CiAJCWVuZ2luZS0+bWMuaW5pdAkJCT0gbnY1MF9tY19pbml0OwogCQllbmdpbmUtPm1jLnRha2Vkb3duCQk9IG52NTBfbWNfdGFrZWRvd247CiAJCWVuZ2luZS0+dGltZXIuaW5pdAkJPSBudjA0X3RpbWVyX2luaXQ7CkBAIC00MjQsNyArNDc2LDYgQEAKIAkJZW5naW5lLT50aW1lci50YWtlZG93bgkJPSBudjA0X3RpbWVyX3Rha2Vkb3duOwogCQllbmdpbmUtPmZiLmluaXQJCQk9IG52YzBfZmJfaW5pdDsKIAkJZW5naW5lLT5mYi50YWtlZG93bgkJPSBudmMwX2ZiX3Rha2Vkb3duOwotCQllbmdpbmUtPmdyYXBoLmdyY2xhc3MJCT0gTlVMTDsgIC8vbnZjMF9ncmFwaF9ncmNsYXNzOwogCQllbmdpbmUtPmdyYXBoLmluaXQJCT0gbnZjMF9ncmFwaF9pbml0OwogCQllbmdpbmUtPmdyYXBoLnRha2Vkb3duCQk9IG52YzBfZ3JhcGhfdGFrZWRvd247CiAJCWVuZ2luZS0+Z3JhcGguZmlmb19hY2Nlc3MJPSBudmMwX2dyYXBoX2ZpZm9fYWNjZXNzOwpAQCAtNDUzLDcgKzUwNCwxNSBAQAogCQllbmdpbmUtPmdwaW8udGFrZWRvd24JCT0gbm91dmVhdV9zdHViX3Rha2Vkb3duOwogCQllbmdpbmUtPmdwaW8uZ2V0CQk9IG52NTBfZ3Bpb19nZXQ7CiAJCWVuZ2luZS0+Z3Bpby5zZXQJCT0gbnY1MF9ncGlvX3NldDsKKwkJZW5naW5lLT5ncGlvLmlycV9yZWdpc3Rlcgk9IG52NTBfZ3Bpb19pcnFfcmVnaXN0ZXI7CisJCWVuZ2luZS0+Z3Bpby5pcnFfdW5yZWdpc3Rlcgk9IG52NTBfZ3Bpb19pcnFfdW5yZWdpc3RlcjsKIAkJZW5naW5lLT5ncGlvLmlycV9lbmFibGUJCT0gbnY1MF9ncGlvX2lycV9lbmFibGU7CisJCWVuZ2luZS0+Y3J5cHQuaW5pdAkJPSBub3V2ZWF1X3N0dWJfaW5pdDsKKwkJZW5naW5lLT5jcnlwdC50YWtlZG93bgkJPSBub3V2ZWF1X3N0dWJfdGFrZWRvd247CisJCWVuZ2luZS0+dnJhbS5pbml0CQk9IG52YzBfdnJhbV9pbml0OworCQllbmdpbmUtPnZyYW0uZ2V0CQk9IG52YzBfdnJhbV9uZXc7CisJCWVuZ2luZS0+dnJhbS5wdXQJCT0gbnY1MF92cmFtX2RlbDsKKwkJZW5naW5lLT52cmFtLmZsYWdzX3ZhbGlkCT0gbnZjMF92cmFtX2ZsYWdzX3ZhbGlkOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlOVl9FUlJPUihkZXYsICJOViUwMnggdW5zdXBwb3J0ZWRcbiIsIGRldl9wcml2LT5jaGlwc2V0KTsKQEAgLTQ5Myw5ICs1NTIsMTMgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJLyogbm8gZG1hIG9iamVjdHMgb24gZmVybWkuLi4gKi8KKwlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl9DMCkKKwkJZ290byBvdXRfZG9uZTsKKwogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2RtYV9uZXcoZGV2X3ByaXYtPmNoYW5uZWwsIE5WX0NMQVNTX0RNQV9JTl9NRU1PUlksCiAJCQkJICAgICAwLCBkZXZfcHJpdi0+dnJhbV9zaXplLAotCQkJCSAgICAgTlZfRE1BX0FDQ0VTU19SVywgTlZfRE1BX1RBUkdFVF9WSURNRU0sCisJCQkJICAgICBOVl9NRU1fQUNDRVNTX1JXLCBOVl9NRU1fVEFSR0VUX1ZSQU0sCiAJCQkJICAgICAmZ3B1b2JqKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9lcnI7CkBAIC01MDUsOSArNTY4LDEwIEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfZXJyOwogCi0JcmV0ID0gbm91dmVhdV9ncHVvYmpfZ2FydF9kbWFfbmV3KGRldl9wcml2LT5jaGFubmVsLCAwLAotCQkJCQkgIGRldl9wcml2LT5nYXJ0X2luZm8uYXBlcl9zaXplLAotCQkJCQkgIE5WX0RNQV9BQ0NFU1NfUlcsICZncHVvYmosIE5VTEwpOworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2RtYV9uZXcoZGV2X3ByaXYtPmNoYW5uZWwsIE5WX0NMQVNTX0RNQV9JTl9NRU1PUlksCisJCQkJICAgICAwLCBkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfc2l6ZSwKKwkJCQkgICAgIE5WX01FTV9BQ0NFU1NfUlcsIE5WX01FTV9UQVJHRVRfR0FSVCwKKwkJCQkgICAgICZncHVvYmopOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VycjsKIApAQCAtNTE2LDExICs1ODAsMTIgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF9lcnI7CiAKK291dF9kb25lOgorCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmNoYW5uZWwtPm11dGV4KTsKIAlyZXR1cm4gMDsKIAogb3V0X2VycjoKLQlub3V2ZWF1X2NoYW5uZWxfZnJlZShkZXZfcHJpdi0+Y2hhbm5lbCk7Ci0JZGV2X3ByaXYtPmNoYW5uZWwgPSBOVUxMOworCW5vdXZlYXVfY2hhbm5lbF9wdXQoJmRldl9wcml2LT5jaGFubmVsKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01MzEsMTUgKzU5NiwyNSBAQAogCXBtX21lc3NhZ2VfdCBwbW0gPSB7IC5ldmVudCA9IFBNX0VWRU5UX1NVU1BFTkQgfTsKIAlpZiAoc3RhdGUgPT0gVkdBX1NXSVRDSEVST09fT04pIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJWR0Egc3dpdGNoZXJvbzogc3dpdGNoZWQgbm91dmVhdSBvblxuIik7CisJCWRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID0gRFJNX1NXSVRDSF9QT1dFUl9DSEFOR0lORzsKIAkJbm91dmVhdV9wY2lfcmVzdW1lKHBkZXYpOwogCQlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShkZXYpOworCQlkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9IERSTV9TV0lUQ0hfUE9XRVJfT047CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJWR0Egc3dpdGNoZXJvbzogc3dpdGNoZWQgbm91dmVhdSBvZmZcbiIpOworCQlkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9IERSTV9TV0lUQ0hfUE9XRVJfQ0hBTkdJTkc7CiAJCWRybV9rbXNfaGVscGVyX3BvbGxfZGlzYWJsZShkZXYpOwogCQlub3V2ZWF1X3BjaV9zdXNwZW5kKHBkZXYsIHBtbSk7CisJCWRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID0gRFJNX1NXSVRDSF9QT1dFUl9PRkY7CiAJfQogfQogCitzdGF0aWMgdm9pZCBub3V2ZWF1X3N3aXRjaGVyb29fcmVwcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCW5vdXZlYXVfZmJjb25fb3V0cHV0X3BvbGxfY2hhbmdlZChkZXYpOworfQorCiBzdGF0aWMgYm9vbCBub3V2ZWF1X3N3aXRjaGVyb29fY2FuX3N3aXRjaChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwpAQCAtNTYwLDYgKzYzNSw3IEBACiAKIAl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgZGV2LCBOVUxMLCBub3V2ZWF1X3ZnYV9zZXRfZGVjb2RlKTsKIAl2Z2Ffc3dpdGNoZXJvb19yZWdpc3Rlcl9jbGllbnQoZGV2LT5wZGV2LCBub3V2ZWF1X3N3aXRjaGVyb29fc2V0X3N0YXRlLAorCQkJCSAgICAgICBub3V2ZWF1X3N3aXRjaGVyb29fcmVwcm9iZSwKIAkJCQkgICAgICAgbm91dmVhdV9zd2l0Y2hlcm9vX2Nhbl9zd2l0Y2gpOwogCiAJLyogSW5pdGlhbGlzZSBpbnRlcm5hbCBkcml2ZXIgQVBJIGhvb2tzICovCkBAIC01NjcsNiArNjQzLDggQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAllbmdpbmUgPSAmZGV2X3ByaXYtPmVuZ2luZTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPmNoYW5uZWxzLmxvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+dGlsZS5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2spOwogCiAJLyogTWFrZSB0aGUgQ1JUQ3MgYW5kIEkyQyBidXNlcyBhY2Nlc3NpYmxlICovCkBAIC02MjUsMjYgKzcwMywyOCBAQAogCQlpZiAocmV0KQogCQkJZ290byBvdXRfZmI7CiAKKwkJLyogUENSWVBUICovCisJCXJldCA9IGVuZ2luZS0+Y3J5cHQuaW5pdChkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZ3JhcGg7CisKIAkJLyogUEZJRk8gKi8KIAkJcmV0ID0gZW5naW5lLT5maWZvLmluaXQoZGV2KTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gb3V0X2dyYXBoOworCQkJZ290byBvdXRfY3J5cHQ7CiAJfQogCiAJcmV0ID0gZW5naW5lLT5kaXNwbGF5LmNyZWF0ZShkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2ZpZm87CiAKLQkvKiB0aGlzIGNhbGwgaXJxX3ByZWluc3RhbGwsIHJlZ2lzdGVyIGlycSBoYW5kbGVyIGFuZAotCSAqIGNhbGwgaXJxX3Bvc3RpbnN0YWxsCi0JICovCi0JcmV0ID0gZHJtX2lycV9pbnN0YWxsKGRldik7CisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRldiwgbnZfdHdvX2hlYWRzKGRldikgPyAyIDogMSk7CiAJaWYgKHJldCkKLQkJZ290byBvdXRfZGlzcGxheTsKKwkJZ290byBvdXRfdmJsYW5rOwogCi0JcmV0ID0gZHJtX3ZibGFua19pbml0KGRldiwgMCk7CisJcmV0ID0gbm91dmVhdV9pcnFfaW5pdChkZXYpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0X2lycTsKKwkJZ290byBvdXRfdmJsYW5rOwogCiAJLyogd2hhdCBhYm91dCBQVklERU8vUENSVEMvUFJBTURBQyBldGM/ICovCiAKQEAgLTY2OSwxMiArNzQ5LDE2IEBACiBvdXRfZmVuY2U6CiAJbm91dmVhdV9mZW5jZV9maW5pKGRldik7CiBvdXRfaXJxOgotCWRybV9pcnFfdW5pbnN0YWxsKGRldik7Ci1vdXRfZGlzcGxheToKKwlub3V2ZWF1X2lycV9maW5pKGRldik7CitvdXRfdmJsYW5rOgorCWRybV92YmxhbmtfY2xlYW51cChkZXYpOwogCWVuZ2luZS0+ZGlzcGxheS5kZXN0cm95KGRldik7CiBvdXRfZmlmbzoKIAlpZiAoIW5vdXZlYXVfbm9hY2NlbCkKIAkJZW5naW5lLT5maWZvLnRha2Vkb3duKGRldik7CitvdXRfY3J5cHQ6CisJaWYgKCFub3V2ZWF1X25vYWNjZWwpCisJCWVuZ2luZS0+Y3J5cHQudGFrZWRvd24oZGV2KTsKIG91dF9ncmFwaDoKIAlpZiAoIW5vdXZlYXVfbm9hY2NlbCkKIAkJZW5naW5lLT5ncmFwaC50YWtlZG93bihkZXYpOwpAQCAtNzEzLDEyICs3OTcsMTIgQEAKIAogCWlmICghZW5naW5lLT5ncmFwaC5hY2NlbF9ibG9ja2VkKSB7CiAJCW5vdXZlYXVfZmVuY2VfZmluaShkZXYpOwotCQlub3V2ZWF1X2NoYW5uZWxfZnJlZShkZXZfcHJpdi0+Y2hhbm5lbCk7Ci0JCWRldl9wcml2LT5jaGFubmVsID0gTlVMTDsKKwkJbm91dmVhdV9jaGFubmVsX3B1dF91bmxvY2tlZCgmZGV2X3ByaXYtPmNoYW5uZWwpOwogCX0KIAogCWlmICghbm91dmVhdV9ub2FjY2VsKSB7CiAJCWVuZ2luZS0+Zmlmby50YWtlZG93bihkZXYpOworCQllbmdpbmUtPmNyeXB0LnRha2Vkb3duKGRldik7CiAJCWVuZ2luZS0+Z3JhcGgudGFrZWRvd24oZGV2KTsKIAl9CiAJZW5naW5lLT5mYi50YWtlZG93bihkZXYpOwpAQCAtNzM3LDcgKzgyMSw4IEBACiAJbm91dmVhdV9ncHVvYmpfdGFrZWRvd24oZGV2KTsKIAlub3V2ZWF1X21lbV92cmFtX2ZpbmkoZGV2KTsKIAotCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CisJbm91dmVhdV9pcnFfZmluaShkZXYpOworCWRybV92YmxhbmtfY2xlYW51cChkZXYpOwogCiAJbm91dmVhdV9wbV9maW5pKGRldik7CiAJbm91dmVhdV9iaW9zX3Rha2Vkb3duKGRldik7CkBAIC05ODAsNiArMTA2NSw3IEBACiAKIHZvaWQgbm91dmVhdV9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwl2Z2Ffc3dpdGNoZXJvb19wcm9jZXNzX2RlbGF5ZWRfc3dpdGNoKCk7CiB9CiAKIGludCBub3V2ZWF1X3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQpAQCAtMTAyNCwyMSArMTExMCw2IEBACiAJCWVsc2UKIAkJCWdldHBhcmFtLT52YWx1ZSA9IE5WX1BDSTsKIAkJYnJlYWs7Ci0JY2FzZSBOT1VWRUFVX0dFVFBBUkFNX0ZCX1BIWVNJQ0FMOgotCQlnZXRwYXJhbS0+dmFsdWUgPSBkZXZfcHJpdi0+ZmJfcGh5czsKLQkJYnJlYWs7Ci0JY2FzZSBOT1VWRUFVX0dFVFBBUkFNX0FHUF9QSFlTSUNBTDoKLQkJZ2V0cGFyYW0tPnZhbHVlID0gZGV2X3ByaXYtPmdhcnRfaW5mby5hcGVyX2Jhc2U7Ci0JCWJyZWFrOwotCWNhc2UgTk9VVkVBVV9HRVRQQVJBTV9QQ0lfUEhZU0lDQUw6Ci0JCWlmIChkZXYtPnNnKSB7Ci0JCQlnZXRwYXJhbS0+dmFsdWUgPSAodW5zaWduZWQgbG9uZylkZXYtPnNnLT52aXJ0dWFsOwotCQl9IGVsc2UgewotCQkJTlZfRVJST1IoZGV2LCAiUmVxdWVzdGVkIFBDSUdBUlQgYWRkcmVzcywgIgotCQkJCQkid2hpbGUgbm8gUENJR0FSVCB3YXMgY3JlYXRlZFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKIAljYXNlIE5PVVZFQVVfR0VUUEFSQU1fRkJfU0laRToKIAkJZ2V0cGFyYW0tPnZhbHVlID0gZGV2X3ByaXYtPmZiX2F2YWlsYWJsZV9zaXplOwogCQlicmVhazsKQEAgLTEwNDYsNyArMTExNyw3IEBACiAJCWdldHBhcmFtLT52YWx1ZSA9IGRldl9wcml2LT5nYXJ0X2luZm8uYXBlcl9zaXplOwogCQlicmVhazsKIAljYXNlIE5PVVZFQVVfR0VUUEFSQU1fVk1fVlJBTV9CQVNFOgotCQlnZXRwYXJhbS0+dmFsdWUgPSBkZXZfcHJpdi0+dm1fdnJhbV9iYXNlOworCQlnZXRwYXJhbS0+dmFsdWUgPSAwOyAvKiBkZXByZWNhdGVkICovCiAJCWJyZWFrOwogCWNhc2UgTk9VVkVBVV9HRVRQQVJBTV9QVElNRVJfVElNRToKIAkJZ2V0cGFyYW0tPnZhbHVlID0gZGV2X3ByaXYtPmVuZ2luZS50aW1lci5yZWFkKGRldik7CkBAIC0xMDU0LDYgKzExMjUsOSBAQAogCWNhc2UgTk9VVkVBVV9HRVRQQVJBTV9IQVNfQk9fVVNBR0U6CiAJCWdldHBhcmFtLT52YWx1ZSA9IDE7CiAJCWJyZWFrOworCWNhc2UgTk9VVkVBVV9HRVRQQVJBTV9IQVNfUEFHRUZMSVA6CisJCWdldHBhcmFtLT52YWx1ZSA9IChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNTApOworCQlicmVhazsKIAljYXNlIE5PVVZFQVVfR0VUUEFSQU1fR1JBUEhfVU5JVFM6CiAJCS8qIE5WNDAgYW5kIE5WNTAgdmVyc2lvbnMgYXJlIHF1aXRlIGRpZmZlcmVudCwgYnV0IHJlZ2lzdGVyCiAJCSAqIGFkZHJlc3MgaXMgdGhlIHNhbWUuIFVzZXIgaXMgc3VwcG9zZWQgdG8ga25vdyB0aGUgY2FyZApAQCAtMTA4Nyw4ICsxMTYxLDkgQEAKIH0KIAogLyogV2FpdCB1bnRpbCAodmFsdWUocmVnKSAmIG1hc2spID09IHZhbCwgdXAgdW50aWwgdGltZW91dCBoYXMgaGl0ICovCi1ib29sIG5vdXZlYXVfd2FpdF91bnRpbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50NjRfdCB0aW1lb3V0LAotCQkJdWludDMyX3QgcmVnLCB1aW50MzJfdCBtYXNrLCB1aW50MzJfdCB2YWwpCitib29sCitub3V2ZWF1X3dhaXRfZXEoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDY0X3QgdGltZW91dCwKKwkJdWludDMyX3QgcmVnLCB1aW50MzJfdCBtYXNrLCB1aW50MzJfdCB2YWwpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV90aW1lcl9lbmdpbmUgKnB0aW1lciA9ICZkZXZfcHJpdi0+ZW5naW5lLnRpbWVyOwpAQCAtMTEwMiwxMCArMTE3NywzMyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorLyogV2FpdCB1bnRpbCAodmFsdWUocmVnKSAmIG1hc2spICE9IHZhbCwgdXAgdW50aWwgdGltZW91dCBoYXMgaGl0ICovCitib29sCitub3V2ZWF1X3dhaXRfbmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDY0X3QgdGltZW91dCwKKwkJdWludDMyX3QgcmVnLCB1aW50MzJfdCBtYXNrLCB1aW50MzJfdCB2YWwpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV90aW1lcl9lbmdpbmUgKnB0aW1lciA9ICZkZXZfcHJpdi0+ZW5naW5lLnRpbWVyOworCXVpbnQ2NF90IHN0YXJ0ID0gcHRpbWVyLT5yZWFkKGRldik7CisKKwlkbyB7CisJCWlmICgobnZfcmQzMihkZXYsIHJlZykgJiBtYXNrKSAhPSB2YWwpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9IHdoaWxlIChwdGltZXItPnJlYWQoZGV2KSAtIHN0YXJ0IDwgdGltZW91dCk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qIFdhaXRzIGZvciBQR1JBUEggdG8gZ28gY29tcGxldGVseSBpZGxlICovCiBib29sIG5vdXZlYXVfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCWlmICghbnZfd2FpdChkZXYsIE5WMDRfUEdSQVBIX1NUQVRVUywgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCkpIHsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IG1hc2sgPSB+MDsKKworCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID09IE5WXzQwKQorCQltYXNrICY9IH5OVjQwX1BHUkFQSF9TVEFUVVNfU1lOQ19TVEFMTDsKKworCWlmICghbnZfd2FpdChkZXYsIE5WMDRfUEdSQVBIX1NUQVRVUywgbWFzaywgMCkpIHsKIAkJTlZfRVJST1IoZGV2LCAiUEdSQVBIIGlkbGUgdGltZWQgb3V0IHdpdGggc3RhdHVzIDB4JTA4eFxuIiwKIAkJCSBudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfU1RBVFVTKSk7CiAJCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdXRpbC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlMGZiMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdXRpbC5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm91dmVhdSBQcm9qZWN0CisgKgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwKKyAqIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUihTKSBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgorCisjaW5jbHVkZSAibm91dmVhdV91dGlsLmgiCisKK3N0YXRpYyBERUZJTkVfUkFURUxJTUlUX1NUQVRFKG5vdXZlYXVfcmF0ZWxpbWl0X3N0YXRlLCAzICogSFosIDIwKTsKKwordm9pZAorbm91dmVhdV9iaXRmaWVsZF9wcmludChjb25zdCBzdHJ1Y3Qgbm91dmVhdV9iaXRmaWVsZCAqYmYsIHUzMiB2YWx1ZSkKK3sKKwl3aGlsZSAoYmYtPm5hbWUpIHsKKwkJaWYgKHZhbHVlICYgYmYtPm1hc2spIHsKKwkJCXByaW50aygiICVzIiwgYmYtPm5hbWUpOworCQkJdmFsdWUgJj0gfmJmLT5tYXNrOworCQl9CisKKwkJYmYrKzsKKwl9CisKKwlpZiAodmFsdWUpCisJCXByaW50aygiICh1bmtub3duIGJpdHMgMHglMDh4KSIsIHZhbHVlKTsKK30KKwordm9pZAorbm91dmVhdV9lbnVtX3ByaW50KGNvbnN0IHN0cnVjdCBub3V2ZWF1X2VudW0gKmVuLCB1MzIgdmFsdWUpCit7CisJd2hpbGUgKGVuLT5uYW1lKSB7CisJCWlmICh2YWx1ZSA9PSBlbi0+dmFsdWUpIHsKKwkJCXByaW50aygiJXMiLCBlbi0+bmFtZSk7CisJCQlyZXR1cm47CisJCX0KKworCQllbisrOworCX0KKworCXByaW50aygiKHVua25vd24gZW51bSAweCUwOHgpIiwgdmFsdWUpOworfQorCitpbnQKK25vdXZlYXVfcmF0ZWxpbWl0KHZvaWQpCit7CisJcmV0dXJuIF9fcmF0ZWxpbWl0KCZub3V2ZWF1X3JhdGVsaW1pdF9zdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V0aWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5Y2VhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V0aWwuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5vdXZlYXUgUHJvamVjdAorICoKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCisgKiBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX19OT1VWRUFVX1VUSUxfSF9fCisjZGVmaW5lIF9fTk9VVkVBVV9VVElMX0hfXworCitzdHJ1Y3Qgbm91dmVhdV9iaXRmaWVsZCB7CisJdTMyIG1hc2s7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKK3N0cnVjdCBub3V2ZWF1X2VudW0geworCXUzMiB2YWx1ZTsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKwordm9pZCBub3V2ZWF1X2JpdGZpZWxkX3ByaW50KGNvbnN0IHN0cnVjdCBub3V2ZWF1X2JpdGZpZWxkICosIHUzMiB2YWx1ZSk7Cit2b2lkIG5vdXZlYXVfZW51bV9wcmludChjb25zdCBzdHJ1Y3Qgbm91dmVhdV9lbnVtICosIHUzMiB2YWx1ZSk7CitpbnQgbm91dmVhdV9yYXRlbGltaXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV92bS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV92bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZDgyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ZtLmMKQEAgLTAsMCArMSw0MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBCZW4gU2tlZ2dzCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgorI2luY2x1ZGUgIm5vdXZlYXVfbW0uaCIKKyNpbmNsdWRlICJub3V2ZWF1X3ZtLmgiCisKK3ZvaWQKK25vdXZlYXVfdm1fbWFwX2F0KHN0cnVjdCBub3V2ZWF1X3ZtYSAqdm1hLCB1NjQgZGVsdGEsIHN0cnVjdCBub3V2ZWF1X3ZyYW0gKnZyYW0pCit7CisJc3RydWN0IG5vdXZlYXVfdm0gKnZtID0gdm1hLT52bTsKKwlzdHJ1Y3Qgbm91dmVhdV9tbV9ub2RlICpyOworCWludCBiaWcgPSB2bWEtPm5vZGUtPnR5cGUgIT0gdm0tPnNwZ19zaGlmdDsKKwl1MzIgb2Zmc2V0ID0gdm1hLT5ub2RlLT5vZmZzZXQgKyAoZGVsdGEgPj4gMTIpOworCXUzMiBiaXRzID0gdm1hLT5ub2RlLT50eXBlIC0gMTI7CisJdTMyIHBkZSAgPSAob2Zmc2V0ID4+IHZtLT5wZ3RfYml0cykgLSB2bS0+ZnBkZTsKKwl1MzIgcHRlICA9IChvZmZzZXQgJiAoKDEgPDwgdm0tPnBndF9iaXRzKSAtIDEpKSA+PiBiaXRzOworCXUzMiBtYXggID0gMSA8PCAodm0tPnBndF9iaXRzIC0gYml0cyk7CisJdTMyIGVuZCwgbGVuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyLCAmdnJhbS0+cmVnaW9ucywgcmxfZW50cnkpIHsKKwkJdTY0IHBoeXMgPSAodTY0KXItPm9mZnNldCA8PCAxMjsKKwkJdTMyIG51bSAgPSByLT5sZW5ndGggPj4gYml0czsKKworCQl3aGlsZSAobnVtKSB7CisJCQlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnBndCA9IHZtLT5wZ3RbcGRlXS5vYmpbYmlnXTsKKworCQkJZW5kID0gKHB0ZSArIG51bSk7CisJCQlpZiAodW5saWtlbHkoZW5kID49IG1heCkpCisJCQkJZW5kID0gbWF4OworCQkJbGVuID0gZW5kIC0gcHRlOworCisJCQl2bS0+bWFwKHZtYSwgcGd0LCB2cmFtLCBwdGUsIGxlbiwgcGh5cyk7CisKKwkJCW51bSAtPSBsZW47CisJCQlwdGUgKz0gbGVuOworCQkJaWYgKHVubGlrZWx5KGVuZCA+PSBtYXgpKSB7CisJCQkJcGRlKys7CisJCQkJcHRlID0gMDsKKwkJCX0KKwkJfQorCX0KKworCXZtLT5mbHVzaCh2bSk7Cit9CisKK3ZvaWQKK25vdXZlYXVfdm1fbWFwKHN0cnVjdCBub3V2ZWF1X3ZtYSAqdm1hLCBzdHJ1Y3Qgbm91dmVhdV92cmFtICp2cmFtKQoreworCW5vdXZlYXVfdm1fbWFwX2F0KHZtYSwgMCwgdnJhbSk7Cit9CisKK3ZvaWQKK25vdXZlYXVfdm1fbWFwX3NnKHN0cnVjdCBub3V2ZWF1X3ZtYSAqdm1hLCB1NjQgZGVsdGEsIHU2NCBsZW5ndGgsCisJCSAgZG1hX2FkZHJfdCAqbGlzdCkKK3sKKwlzdHJ1Y3Qgbm91dmVhdV92bSAqdm0gPSB2bWEtPnZtOworCWludCBiaWcgPSB2bWEtPm5vZGUtPnR5cGUgIT0gdm0tPnNwZ19zaGlmdDsKKwl1MzIgb2Zmc2V0ID0gdm1hLT5ub2RlLT5vZmZzZXQgKyAoZGVsdGEgPj4gMTIpOworCXUzMiBiaXRzID0gdm1hLT5ub2RlLT50eXBlIC0gMTI7CisJdTMyIG51bSAgPSBsZW5ndGggPj4gdm1hLT5ub2RlLT50eXBlOworCXUzMiBwZGUgID0gKG9mZnNldCA+PiB2bS0+cGd0X2JpdHMpIC0gdm0tPmZwZGU7CisJdTMyIHB0ZSAgPSAob2Zmc2V0ICYgKCgxIDw8IHZtLT5wZ3RfYml0cykgLSAxKSkgPj4gYml0czsKKwl1MzIgbWF4ICA9IDEgPDwgKHZtLT5wZ3RfYml0cyAtIGJpdHMpOworCXUzMiBlbmQsIGxlbjsKKworCXdoaWxlIChudW0pIHsKKwkJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwZ3QgPSB2bS0+cGd0W3BkZV0ub2JqW2JpZ107CisKKwkJZW5kID0gKHB0ZSArIG51bSk7CisJCWlmICh1bmxpa2VseShlbmQgPj0gbWF4KSkKKwkJCWVuZCA9IG1heDsKKwkJbGVuID0gZW5kIC0gcHRlOworCisJCXZtLT5tYXBfc2codm1hLCBwZ3QsIHB0ZSwgbGlzdCwgbGVuKTsKKworCQludW0gIC09IGxlbjsKKwkJcHRlICArPSBsZW47CisJCWxpc3QgKz0gbGVuOworCQlpZiAodW5saWtlbHkoZW5kID49IG1heCkpIHsKKwkJCXBkZSsrOworCQkJcHRlID0gMDsKKwkJfQorCX0KKworCXZtLT5mbHVzaCh2bSk7Cit9CisKK3ZvaWQKK25vdXZlYXVfdm1fdW5tYXBfYXQoc3RydWN0IG5vdXZlYXVfdm1hICp2bWEsIHU2NCBkZWx0YSwgdTY0IGxlbmd0aCkKK3sKKwlzdHJ1Y3Qgbm91dmVhdV92bSAqdm0gPSB2bWEtPnZtOworCWludCBiaWcgPSB2bWEtPm5vZGUtPnR5cGUgIT0gdm0tPnNwZ19zaGlmdDsKKwl1MzIgb2Zmc2V0ID0gdm1hLT5ub2RlLT5vZmZzZXQgKyAoZGVsdGEgPj4gMTIpOworCXUzMiBiaXRzID0gdm1hLT5ub2RlLT50eXBlIC0gMTI7CisJdTMyIG51bSAgPSBsZW5ndGggPj4gdm1hLT5ub2RlLT50eXBlOworCXUzMiBwZGUgID0gKG9mZnNldCA+PiB2bS0+cGd0X2JpdHMpIC0gdm0tPmZwZGU7CisJdTMyIHB0ZSAgPSAob2Zmc2V0ICYgKCgxIDw8IHZtLT5wZ3RfYml0cykgLSAxKSkgPj4gYml0czsKKwl1MzIgbWF4ICA9IDEgPDwgKHZtLT5wZ3RfYml0cyAtIGJpdHMpOworCXUzMiBlbmQsIGxlbjsKKworCXdoaWxlIChudW0pIHsKKwkJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwZ3QgPSB2bS0+cGd0W3BkZV0ub2JqW2JpZ107CisKKwkJZW5kID0gKHB0ZSArIG51bSk7CisJCWlmICh1bmxpa2VseShlbmQgPj0gbWF4KSkKKwkJCWVuZCA9IG1heDsKKwkJbGVuID0gZW5kIC0gcHRlOworCisJCXZtLT51bm1hcChwZ3QsIHB0ZSwgbGVuKTsKKworCQludW0gLT0gbGVuOworCQlwdGUgKz0gbGVuOworCQlpZiAodW5saWtlbHkoZW5kID49IG1heCkpIHsKKwkJCXBkZSsrOworCQkJcHRlID0gMDsKKwkJfQorCX0KKworCXZtLT5mbHVzaCh2bSk7Cit9CisKK3ZvaWQKK25vdXZlYXVfdm1fdW5tYXAoc3RydWN0IG5vdXZlYXVfdm1hICp2bWEpCit7CisJbm91dmVhdV92bV91bm1hcF9hdCh2bWEsIDAsICh1NjQpdm1hLT5ub2RlLT5sZW5ndGggPDwgMTIpOworfQorCitzdGF0aWMgdm9pZAorbm91dmVhdV92bV91bm1hcF9wZ3Qoc3RydWN0IG5vdXZlYXVfdm0gKnZtLCBpbnQgYmlnLCB1MzIgZnBkZSwgdTMyIGxwZGUpCit7CisJc3RydWN0IG5vdXZlYXVfdm1fcGdkICp2cGdkOworCXN0cnVjdCBub3V2ZWF1X3ZtX3BndCAqdnBndDsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnBndDsKKwl1MzIgcGRlOworCisJZm9yIChwZGUgPSBmcGRlOyBwZGUgPD0gbHBkZTsgcGRlKyspIHsKKwkJdnBndCA9ICZ2bS0+cGd0W3BkZSAtIHZtLT5mcGRlXTsKKwkJaWYgKC0tdnBndC0+cmVmY291bnRbYmlnXSkKKwkJCWNvbnRpbnVlOworCisJCXBndCA9IHZwZ3QtPm9ialtiaWddOworCQl2cGd0LT5vYmpbYmlnXSA9IE5VTEw7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2cGdkLCAmdm0tPnBnZF9saXN0LCBoZWFkKSB7CisJCQl2bS0+bWFwX3BndCh2cGdkLT5vYmosIHBkZSwgdnBndC0+b2JqKTsKKwkJfQorCisJCW11dGV4X3VubG9jaygmdm0tPm1tLT5tdXRleCk7CisJCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmcGd0KTsKKwkJbXV0ZXhfbG9jaygmdm0tPm1tLT5tdXRleCk7CisJfQorfQorCitzdGF0aWMgaW50Citub3V2ZWF1X3ZtX21hcF9wZ3Qoc3RydWN0IG5vdXZlYXVfdm0gKnZtLCB1MzIgcGRlLCB1MzIgdHlwZSkKK3sKKwlzdHJ1Y3Qgbm91dmVhdV92bV9wZ3QgKnZwZ3QgPSAmdm0tPnBndFtwZGUgLSB2bS0+ZnBkZV07CisJc3RydWN0IG5vdXZlYXVfdm1fcGdkICp2cGdkOworCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGd0OworCWludCBiaWcgPSAodHlwZSAhPSB2bS0+c3BnX3NoaWZ0KTsKKwl1MzIgcGd0X3NpemU7CisJaW50IHJldDsKKworCXBndF9zaXplICA9ICgxIDw8ICh2bS0+cGd0X2JpdHMgKyAxMikpID4+IHR5cGU7CisJcGd0X3NpemUgKj0gODsKKworCW11dGV4X3VubG9jaygmdm0tPm1tLT5tdXRleCk7CisJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3KHZtLT5kZXYsIE5VTEwsIHBndF9zaXplLCAweDEwMDAsCisJCQkJIE5WT0JKX0ZMQUdfWkVST19BTExPQywgJnBndCk7CisJbXV0ZXhfbG9jaygmdm0tPm1tLT5tdXRleCk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCXJldHVybiByZXQ7CisKKwkvKiBzb21lb25lIGJlYXQgdXMgdG8gZmlsbGluZyB0aGUgUERFIHdoaWxlIHdlIGRpZG4ndCBoYXZlIHRoZSBsb2NrICovCisJaWYgKHVubGlrZWx5KHZwZ3QtPnJlZmNvdW50W2JpZ10rKykpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ2bS0+bW0tPm11dGV4KTsKKwkJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZwZ3QpOworCQltdXRleF9sb2NrKCZ2bS0+bW0tPm11dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorCisJdnBndC0+b2JqW2JpZ10gPSBwZ3Q7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh2cGdkLCAmdm0tPnBnZF9saXN0LCBoZWFkKSB7CisJCXZtLT5tYXBfcGd0KHZwZ2QtPm9iaiwgcGRlLCB2cGd0LT5vYmopOworCX0KKworCXJldHVybiAwOworfQorCitpbnQKK25vdXZlYXVfdm1fZ2V0KHN0cnVjdCBub3V2ZWF1X3ZtICp2bSwgdTY0IHNpemUsIHUzMiBwYWdlX3NoaWZ0LAorCSAgICAgICB1MzIgYWNjZXNzLCBzdHJ1Y3Qgbm91dmVhdV92bWEgKnZtYSkKK3sKKwl1MzIgYWxpZ24gPSAoMSA8PCBwYWdlX3NoaWZ0KSA+PiAxMjsKKwl1MzIgbXNpemUgPSBzaXplID4+IDEyOworCXUzMiBmcGRlLCBscGRlLCBwZGU7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnZtLT5tbS0+bXV0ZXgpOworCXJldCA9IG5vdXZlYXVfbW1fZ2V0KHZtLT5tbSwgcGFnZV9zaGlmdCwgbXNpemUsIDAsIGFsaWduLCAmdm1hLT5ub2RlKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCW11dGV4X3VubG9jaygmdm0tPm1tLT5tdXRleCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZnBkZSA9ICh2bWEtPm5vZGUtPm9mZnNldCA+PiB2bS0+cGd0X2JpdHMpOworCWxwZGUgPSAodm1hLT5ub2RlLT5vZmZzZXQgKyB2bWEtPm5vZGUtPmxlbmd0aCAtIDEpID4+IHZtLT5wZ3RfYml0czsKKwlmb3IgKHBkZSA9IGZwZGU7IHBkZSA8PSBscGRlOyBwZGUrKykgeworCQlzdHJ1Y3Qgbm91dmVhdV92bV9wZ3QgKnZwZ3QgPSAmdm0tPnBndFtwZGUgLSB2bS0+ZnBkZV07CisJCWludCBiaWcgPSAodm1hLT5ub2RlLT50eXBlICE9IHZtLT5zcGdfc2hpZnQpOworCisJCWlmIChsaWtlbHkodnBndC0+cmVmY291bnRbYmlnXSkpIHsKKwkJCXZwZ3QtPnJlZmNvdW50W2JpZ10rKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0ID0gbm91dmVhdV92bV9tYXBfcGd0KHZtLCBwZGUsIHZtYS0+bm9kZS0+dHlwZSk7CisJCWlmIChyZXQpIHsKKwkJCWlmIChwZGUgIT0gZnBkZSkKKwkJCQlub3V2ZWF1X3ZtX3VubWFwX3BndCh2bSwgYmlnLCBmcGRlLCBwZGUgLSAxKTsKKwkJCW5vdXZlYXVfbW1fcHV0KHZtLT5tbSwgdm1hLT5ub2RlKTsKKwkJCW11dGV4X3VubG9jaygmdm0tPm1tLT5tdXRleCk7CisJCQl2bWEtPm5vZGUgPSBOVUxMOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJnZtLT5tbS0+bXV0ZXgpOworCisJdm1hLT52bSAgICAgPSB2bTsKKwl2bWEtPm9mZnNldCA9ICh1NjQpdm1hLT5ub2RlLT5vZmZzZXQgPDwgMTI7CisJdm1hLT5hY2Nlc3MgPSBhY2Nlc3M7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK25vdXZlYXVfdm1fcHV0KHN0cnVjdCBub3V2ZWF1X3ZtYSAqdm1hKQoreworCXN0cnVjdCBub3V2ZWF1X3ZtICp2bSA9IHZtYS0+dm07CisJdTMyIGZwZGUsIGxwZGU7CisKKwlpZiAodW5saWtlbHkodm1hLT5ub2RlID09IE5VTEwpKQorCQlyZXR1cm47CisJZnBkZSA9ICh2bWEtPm5vZGUtPm9mZnNldCA+PiB2bS0+cGd0X2JpdHMpOworCWxwZGUgPSAodm1hLT5ub2RlLT5vZmZzZXQgKyB2bWEtPm5vZGUtPmxlbmd0aCAtIDEpID4+IHZtLT5wZ3RfYml0czsKKworCW11dGV4X2xvY2soJnZtLT5tbS0+bXV0ZXgpOworCW5vdXZlYXVfdm1fdW5tYXBfcGd0KHZtLCB2bWEtPm5vZGUtPnR5cGUgIT0gdm0tPnNwZ19zaGlmdCwgZnBkZSwgbHBkZSk7CisJbm91dmVhdV9tbV9wdXQodm0tPm1tLCB2bWEtPm5vZGUpOworCXZtYS0+bm9kZSA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZ2bS0+bW0tPm11dGV4KTsKK30KKworaW50Citub3V2ZWF1X3ZtX25ldyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1NjQgb2Zmc2V0LCB1NjQgbGVuZ3RoLCB1NjQgbW1fb2Zmc2V0LAorCSAgICAgICBzdHJ1Y3Qgbm91dmVhdV92bSAqKnB2bSkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3ZtICp2bTsKKwl1NjQgbW1fbGVuZ3RoID0gKG9mZnNldCArIGxlbmd0aCkgLSBtbV9vZmZzZXQ7CisJdTMyIGJsb2NrLCBwZ3RfYml0czsKKwlpbnQgcmV0OworCisJdm0gPSBremFsbG9jKHNpemVvZigqdm0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID09IE5WXzUwKSB7CisJCXZtLT5tYXBfcGd0ID0gbnY1MF92bV9tYXBfcGd0OworCQl2bS0+bWFwID0gbnY1MF92bV9tYXA7CisJCXZtLT5tYXBfc2cgPSBudjUwX3ZtX21hcF9zZzsKKwkJdm0tPnVubWFwID0gbnY1MF92bV91bm1hcDsKKwkJdm0tPmZsdXNoID0gbnY1MF92bV9mbHVzaDsKKwkJdm0tPnNwZ19zaGlmdCA9IDEyOworCQl2bS0+bHBnX3NoaWZ0ID0gMTY7CisKKwkJcGd0X2JpdHMgPSAyOTsKKwkJYmxvY2sgPSAoMSA8PCBwZ3RfYml0cyk7CisJCWlmIChsZW5ndGggPCBibG9jaykKKwkJCWJsb2NrID0gbGVuZ3RoOworCisJfSBlbHNlCisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfQzApIHsKKwkJdm0tPm1hcF9wZ3QgPSBudmMwX3ZtX21hcF9wZ3Q7CisJCXZtLT5tYXAgPSBudmMwX3ZtX21hcDsKKwkJdm0tPm1hcF9zZyA9IG52YzBfdm1fbWFwX3NnOworCQl2bS0+dW5tYXAgPSBudmMwX3ZtX3VubWFwOworCQl2bS0+Zmx1c2ggPSBudmMwX3ZtX2ZsdXNoOworCQl2bS0+c3BnX3NoaWZ0ID0gMTI7CisJCXZtLT5scGdfc2hpZnQgPSAxNzsKKwkJcGd0X2JpdHMgPSAyNzsKKworCQkvKiBTaG91bGQgYmUgNDA5NiBldmVyeXdoZXJlLCB0aGlzIGlzIGEgaGFjayB0aGF0J3MKKwkJICogY3VycmVudGx5IG5lY2Vzc2FyeSB0byBhdm9pZCBhbiBlbHVzaXZlIGJ1ZyB0aGF0CisJCSAqIGNhdXNlcyBjb3JydXB0aW9uIHdoZW4gbWl4aW5nIHNtYWxsL2xhcmdlIHBhZ2VzCisJCSAqLworCQlpZiAobGVuZ3RoIDwgKDFVTEwgPDwgNDApKQorCQkJYmxvY2sgPSA0MDk2OworCQllbHNlIHsKKwkJCWJsb2NrID0gKDEgPDwgcGd0X2JpdHMpOworCQkJaWYgKGxlbmd0aCA8IGJsb2NrKQorCQkJCWJsb2NrID0gbGVuZ3RoOworCQl9CisJfSBlbHNlIHsKKwkJa2ZyZWUodm0pOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwl2bS0+ZnBkZSAgID0gb2Zmc2V0ID4+IHBndF9iaXRzOworCXZtLT5scGRlICAgPSAob2Zmc2V0ICsgbGVuZ3RoIC0gMSkgPj4gcGd0X2JpdHM7CisJdm0tPnBndCA9IGtjYWxsb2Modm0tPmxwZGUgLSB2bS0+ZnBkZSArIDEsIHNpemVvZigqdm0tPnBndCksIEdGUF9LRVJORUwpOworCWlmICghdm0tPnBndCkgeworCQlrZnJlZSh2bSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZ2bS0+cGdkX2xpc3QpOworCXZtLT5kZXYgPSBkZXY7CisJdm0tPnJlZmNvdW50ID0gMTsKKwl2bS0+cGd0X2JpdHMgPSBwZ3RfYml0cyAtIDEyOworCisJcmV0ID0gbm91dmVhdV9tbV9pbml0KCZ2bS0+bW0sIG1tX29mZnNldCA+PiAxMiwgbW1fbGVuZ3RoID4+IDEyLAorCQkJICAgICAgYmxvY2sgPj4gMTIpOworCWlmIChyZXQpIHsKKwkJa2ZyZWUodm0pOworCQlyZXR1cm4gcmV0OworCX0KKworCSpwdm0gPSB2bTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbm91dmVhdV92bV9saW5rKHN0cnVjdCBub3V2ZWF1X3ZtICp2bSwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwZ2QpCit7CisJc3RydWN0IG5vdXZlYXVfdm1fcGdkICp2cGdkOworCWludCBpOworCisJaWYgKCFwZ2QpCisJCXJldHVybiAwOworCisJdnBnZCA9IGt6YWxsb2Moc2l6ZW9mKCp2cGdkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2cGdkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW5vdXZlYXVfZ3B1b2JqX3JlZihwZ2QsICZ2cGdkLT5vYmopOworCisJbXV0ZXhfbG9jaygmdm0tPm1tLT5tdXRleCk7CisJZm9yIChpID0gdm0tPmZwZGU7IGkgPD0gdm0tPmxwZGU7IGkrKykKKwkJdm0tPm1hcF9wZ3QocGdkLCBpLCB2bS0+cGd0W2kgLSB2bS0+ZnBkZV0ub2JqKTsKKwlsaXN0X2FkZCgmdnBnZC0+aGVhZCwgJnZtLT5wZ2RfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZ2bS0+bW0tPm11dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK25vdXZlYXVfdm1fdW5saW5rKHN0cnVjdCBub3V2ZWF1X3ZtICp2bSwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwZ2QpCit7CisJc3RydWN0IG5vdXZlYXVfdm1fcGdkICp2cGdkLCAqdG1wOworCisJaWYgKCFwZ2QpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnZtLT5tbS0+bXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2cGdkLCB0bXAsICZ2bS0+cGdkX2xpc3QsIGhlYWQpIHsKKwkJaWYgKHZwZ2QtPm9iaiAhPSBwZ2QpCisJCQljb250aW51ZTsKKworCQlsaXN0X2RlbCgmdnBnZC0+aGVhZCk7CisJCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmdnBnZC0+b2JqKTsKKwkJa2ZyZWUodnBnZCk7CisJfQorCW11dGV4X3VubG9jaygmdm0tPm1tLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkCitub3V2ZWF1X3ZtX2RlbChzdHJ1Y3Qgbm91dmVhdV92bSAqdm0pCit7CisJc3RydWN0IG5vdXZlYXVfdm1fcGdkICp2cGdkLCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZwZ2QsIHRtcCwgJnZtLT5wZ2RfbGlzdCwgaGVhZCkgeworCQlub3V2ZWF1X3ZtX3VubGluayh2bSwgdnBnZC0+b2JqKTsKKwl9CisJV0FSTl9PTihub3V2ZWF1X21tX2ZpbmkoJnZtLT5tbSkgIT0gMCk7CisKKwlrZnJlZSh2bS0+cGd0KTsKKwlrZnJlZSh2bSk7Cit9CisKK2ludAorbm91dmVhdV92bV9yZWYoc3RydWN0IG5vdXZlYXVfdm0gKnJlZiwgc3RydWN0IG5vdXZlYXVfdm0gKipwdHIsCisJICAgICAgIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGdkKQoreworCXN0cnVjdCBub3V2ZWF1X3ZtICp2bTsKKwlpbnQgcmV0OworCisJdm0gPSByZWY7CisJaWYgKHZtKSB7CisJCXJldCA9IG5vdXZlYXVfdm1fbGluayh2bSwgcGdkKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJdm0tPnJlZmNvdW50Kys7CisJfQorCisJdm0gPSAqcHRyOworCSpwdHIgPSByZWY7CisKKwlpZiAodm0pIHsKKwkJbm91dmVhdV92bV91bmxpbmsodm0sIHBnZCk7CisKKwkJaWYgKC0tdm0tPnJlZmNvdW50ID09IDApCisJCQlub3V2ZWF1X3ZtX2RlbCh2bSk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ZtLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExOTM1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdm0uaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEJlbiBTa2VnZ3MKKyAqLworCisjaWZuZGVmIF9fTk9VVkVBVV9WTV9IX18KKyNkZWZpbmUgX19OT1VWRUFVX1ZNX0hfXworCisjaW5jbHVkZSAiZHJtUC5oIgorCisjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKKyNpbmNsdWRlICJub3V2ZWF1X21tLmgiCisKK3N0cnVjdCBub3V2ZWF1X3ZtX3BndCB7CisJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpvYmpbMl07CisJdTMyIHJlZmNvdW50WzJdOworfTsKKworc3RydWN0IG5vdXZlYXVfdm1fcGdkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpvYmo7Cit9OworCitzdHJ1Y3Qgbm91dmVhdV92bWEgeworCXN0cnVjdCBub3V2ZWF1X3ZtICp2bTsKKwlzdHJ1Y3Qgbm91dmVhdV9tbV9ub2RlICpub2RlOworCXU2NCBvZmZzZXQ7CisJdTMyIGFjY2VzczsKK307CisKK3N0cnVjdCBub3V2ZWF1X3ZtIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBub3V2ZWF1X21tICptbTsKKwlpbnQgcmVmY291bnQ7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBnZF9saXN0OworCWF0b21pY190IHBncmFwaF9yZWZzOworCWF0b21pY190IHBjcnlwdF9yZWZzOworCisJc3RydWN0IG5vdXZlYXVfdm1fcGd0ICpwZ3Q7CisJdTMyIGZwZGU7CisJdTMyIGxwZGU7CisKKwl1MzIgcGd0X2JpdHM7CisJdTggIHNwZ19zaGlmdDsKKwl1OCAgbHBnX3NoaWZ0OworCisJdm9pZCAoKm1hcF9wZ3QpKHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGdkLCB1MzIgcGRlLAorCQkJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwZ3RbMl0pOworCXZvaWQgKCptYXApKHN0cnVjdCBub3V2ZWF1X3ZtYSAqLCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKiwKKwkJICAgIHN0cnVjdCBub3V2ZWF1X3ZyYW0gKiwgdTMyIHB0ZSwgdTMyIGNudCwgdTY0IHBoeXMpOworCXZvaWQgKCptYXBfc2cpKHN0cnVjdCBub3V2ZWF1X3ZtYSAqLCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKiwKKwkJICAgICAgIHUzMiBwdGUsIGRtYV9hZGRyX3QgKiwgdTMyIGNudCk7CisJdm9pZCAoKnVubWFwKShzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnBndCwgdTMyIHB0ZSwgdTMyIGNudCk7CisJdm9pZCAoKmZsdXNoKShzdHJ1Y3Qgbm91dmVhdV92bSAqKTsKK307CisKKy8qIG5vdXZlYXVfdm0uYyAqLworaW50ICBub3V2ZWF1X3ZtX25ldyhzdHJ1Y3QgZHJtX2RldmljZSAqLCB1NjQgb2Zmc2V0LCB1NjQgbGVuZ3RoLCB1NjQgbW1fb2Zmc2V0LAorCQkgICAgc3RydWN0IG5vdXZlYXVfdm0gKiopOworaW50ICBub3V2ZWF1X3ZtX3JlZihzdHJ1Y3Qgbm91dmVhdV92bSAqLCBzdHJ1Y3Qgbm91dmVhdV92bSAqKiwKKwkJICAgIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGdkKTsKK2ludCAgbm91dmVhdV92bV9nZXQoc3RydWN0IG5vdXZlYXVfdm0gKiwgdTY0IHNpemUsIHUzMiBwYWdlX3NoaWZ0LAorCQkgICAgdTMyIGFjY2Vzcywgc3RydWN0IG5vdXZlYXVfdm1hICopOwordm9pZCBub3V2ZWF1X3ZtX3B1dChzdHJ1Y3Qgbm91dmVhdV92bWEgKik7Cit2b2lkIG5vdXZlYXVfdm1fbWFwKHN0cnVjdCBub3V2ZWF1X3ZtYSAqLCBzdHJ1Y3Qgbm91dmVhdV92cmFtICopOwordm9pZCBub3V2ZWF1X3ZtX21hcF9hdChzdHJ1Y3Qgbm91dmVhdV92bWEgKiwgdTY0IG9mZnNldCwgc3RydWN0IG5vdXZlYXVfdnJhbSAqKTsKK3ZvaWQgbm91dmVhdV92bV91bm1hcChzdHJ1Y3Qgbm91dmVhdV92bWEgKik7Cit2b2lkIG5vdXZlYXVfdm1fdW5tYXBfYXQoc3RydWN0IG5vdXZlYXVfdm1hICosIHU2NCBvZmZzZXQsIHU2NCBsZW5ndGgpOwordm9pZCBub3V2ZWF1X3ZtX21hcF9zZyhzdHJ1Y3Qgbm91dmVhdV92bWEgKiwgdTY0IG9mZnNldCwgdTY0IGxlbmd0aCwKKwkJICAgICAgIGRtYV9hZGRyX3QgKik7CisKKy8qIG52NTBfdm0uYyAqLwordm9pZCBudjUwX3ZtX21hcF9wZ3Qoc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwZ2QsIHUzMiBwZGUsCisJCSAgICAgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwZ3RbMl0pOwordm9pZCBudjUwX3ZtX21hcChzdHJ1Y3Qgbm91dmVhdV92bWEgKiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICosCisJCSBzdHJ1Y3Qgbm91dmVhdV92cmFtICosIHUzMiBwdGUsIHUzMiBjbnQsIHU2NCBwaHlzKTsKK3ZvaWQgbnY1MF92bV9tYXBfc2coc3RydWN0IG5vdXZlYXVfdm1hICosIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqLAorCQkgICAgdTMyIHB0ZSwgZG1hX2FkZHJfdCAqLCB1MzIgY250KTsKK3ZvaWQgbnY1MF92bV91bm1hcChzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKiwgdTMyIHB0ZSwgdTMyIGNudCk7Cit2b2lkIG52NTBfdm1fZmx1c2goc3RydWN0IG5vdXZlYXVfdm0gKik7Cit2b2lkIG52NTBfdm1fZmx1c2hfZW5naW5lKHN0cnVjdCBkcm1fZGV2aWNlICosIGludCBlbmdpbmUpOworCisvKiBudmMwX3ZtLmMgKi8KK3ZvaWQgbnZjMF92bV9tYXBfcGd0KHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGdkLCB1MzIgcGRlLAorCQkgICAgIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGd0WzJdKTsKK3ZvaWQgbnZjMF92bV9tYXAoc3RydWN0IG5vdXZlYXVfdm1hICosIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqLAorCQkgc3RydWN0IG5vdXZlYXVfdnJhbSAqLCB1MzIgcHRlLCB1MzIgY250LCB1NjQgcGh5cyk7Cit2b2lkIG52YzBfdm1fbWFwX3NnKHN0cnVjdCBub3V2ZWF1X3ZtYSAqLCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKiwKKwkJICAgIHUzMiBwdGUsIGRtYV9hZGRyX3QgKiwgdTMyIGNudCk7Cit2b2lkIG52YzBfdm1fdW5tYXAoc3RydWN0IG5vdXZlYXVfZ3B1b2JqICosIHUzMiBwdGUsIHUzMiBjbnQpOwordm9pZCBudmMwX3ZtX2ZsdXNoKHN0cnVjdCBub3V2ZWF1X3ZtICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKaW5kZXggNDBlMTgwNy4uMjk3NTA1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKQEAgLTU1MSw3ICs1NTEsMTAgQEAKIAlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl8zMCkKIAkJcmVncC0+Z3Bpb19leHQgPSBOVlJlYWRDUlRDKGRldiwgMCwgTlZfUENSVENfR1BJT19FWFQpOwogCi0JcmVncC0+Y3J0Y19jZmcgPSBOVl9QQ1JUQ19DT05GSUdfU1RBUlRfQUREUkVTU19IU1lOQzsKKwlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl8xMCkKKwkJcmVncC0+Y3J0Y19jZmcgPSBOVjEwX1BDUlRDX0NPTkZJR19TVEFSVF9BRERSRVNTX0hTWU5DOworCWVsc2UKKwkJcmVncC0+Y3J0Y19jZmcgPSBOVjA0X1BDUlRDX0NPTkZJR19TVEFSVF9BRERSRVNTX0hTWU5DOwogCiAJLyogU29tZSBtaXNjIHJlZ3MgKi8KIAlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl80MCkgewpAQCAtNjY5LDYgKzY3Miw3IEBACiAJaWYgKG52X3R3b19oZWFkcyhkZXYpKQogCQlOVlNldE93bmVyKGRldiwgbnZfY3J0Yy0+aW5kZXgpOwogCisJZHJtX3ZibGFua19wcmVfbW9kZXNldChkZXYsIG52X2NydGMtPmluZGV4KTsKIAlmdW5jcy0+ZHBtcyhjcnRjLCBEUk1fTU9ERV9EUE1TX09GRik7CiAKIAlOVkJsYW5rU2NyZWVuKGRldiwgbnZfY3J0Yy0+aW5kZXgsIHRydWUpOwpAQCAtNzAxLDYgKzcwNSw3IEBACiAjZW5kaWYKIAogCWZ1bmNzLT5kcG1zKGNydGMsIERSTV9NT0RFX0RQTVNfT04pOworCWRybV92YmxhbmtfcG9zdF9tb2Rlc2V0KGRldiwgbnZfY3J0Yy0+aW5kZXgpOwogfQogCiBzdGF0aWMgdm9pZCBudl9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQpAQCAtOTg2LDYgKzk5MSw3IEBACiAJLmN1cnNvcl9tb3ZlID0gbnYwNF9jcnRjX2N1cnNvcl9tb3ZlLAogCS5nYW1tYV9zZXQgPSBudl9jcnRjX2dhbW1hX3NldCwKIAkuc2V0X2NvbmZpZyA9IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnLAorCS5wYWdlX2ZsaXAgPSBub3V2ZWF1X2NydGNfcGFnZV9mbGlwLAogCS5kZXN0cm95ID0gbnZfY3J0Y19kZXN0cm95LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGFjLmMKaW5kZXggYmE2NDIzZi4uZTAwMDQ1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RhYy5jCkBAIC03NCwxNCArNzQsMTQgQEAKIAkJICogdXNlIGEgMTBtcyB0aW1lb3V0IChndWFyZHMgYWdhaW5zdCBjcnRjIGJlaW5nIGluYWN0aXZlLCBpbgogCQkgKiB3aGljaCBjYXNlIGJsYW5rIHN0YXRlIHdvdWxkIG5ldmVyIGNoYW5nZSkKIAkJICovCi0JCWlmICghbm91dmVhdV93YWl0X3VudGlsKGRldiwgMTAwMDAwMDAsIE5WX1BSTUNJT19JTlAwX19DT0xPUiwKLQkJCQkJMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCkpCisJCWlmICghbm91dmVhdV93YWl0X2VxKGRldiwgMTAwMDAwMDAsIE5WX1BSTUNJT19JTlAwX19DT0xPUiwKKwkJCQkgICAgIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKQogCQkJcmV0dXJuIC1FQlVTWTsKLQkJaWYgKCFub3V2ZWF1X3dhaXRfdW50aWwoZGV2LCAxMDAwMDAwMCwgTlZfUFJNQ0lPX0lOUDBfX0NPTE9SLAotCQkJCQkweDAwMDAwMDAxLCAweDAwMDAwMDAxKSkKKwkJaWYgKCFub3V2ZWF1X3dhaXRfZXEoZGV2LCAxMDAwMDAwMCwgTlZfUFJNQ0lPX0lOUDBfX0NPTE9SLAorCQkJCSAgICAgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSkpCiAJCQlyZXR1cm4gLUVCVVNZOwotCQlpZiAoIW5vdXZlYXVfd2FpdF91bnRpbChkZXYsIDEwMDAwMDAwLCBOVl9QUk1DSU9fSU5QMF9fQ09MT1IsCi0JCQkJCTB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKQorCQlpZiAoIW5vdXZlYXVfd2FpdF9lcShkZXYsIDEwMDAwMDAwLCBOVl9QUk1DSU9fSU5QMF9fQ09MT1IsCisJCQkJICAgICAweDAwMDAwMDAxLCAweDAwMDAwMDAwKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKIAkJdWRlbGF5KDEwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGlzcGxheS5jCmluZGV4IDllMjhjZjcuLjE3MTVlMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGlzcGxheS5jCkBAIC0zMiw2ICszMiw5IEBACiAjaW5jbHVkZSAibm91dmVhdV9lbmNvZGVyLmgiCiAjaW5jbHVkZSAibm91dmVhdV9jb25uZWN0b3IuaCIKIAorc3RhdGljIHZvaWQgbnYwNF92YmxhbmtfY3J0YzBfaXNyKHN0cnVjdCBkcm1fZGV2aWNlICopOworc3RhdGljIHZvaWQgbnYwNF92YmxhbmtfY3J0YzFfaXNyKHN0cnVjdCBkcm1fZGV2aWNlICopOworCiBzdGF0aWMgdm9pZAogbnYwNF9kaXNwbGF5X3N0b3JlX2luaXRpYWxfaGVhZF9vd25lcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewpAQCAtMTk3LDYgKzIwMCw4IEBACiAJCWZ1bmMtPnNhdmUoZW5jb2Rlcik7CiAJfQogCisJbm91dmVhdV9pcnFfcmVnaXN0ZXIoZGV2LCAyNCwgbnYwNF92YmxhbmtfY3J0YzBfaXNyKTsKKwlub3V2ZWF1X2lycV9yZWdpc3RlcihkZXYsIDI1LCBudjA0X3ZibGFua19jcnRjMV9pc3IpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDgsNiArMjEzLDkgQEAKIAogCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCisJbm91dmVhdV9pcnFfdW5yZWdpc3RlcihkZXYsIDI0KTsKKwlub3V2ZWF1X2lycV91bnJlZ2lzdGVyKGRldiwgMjUpOworCiAJLyogVHVybiBldmVyeSBDUlRDIG9mZi4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlzdHJ1Y3QgZHJtX21vZGVfc2V0IG1vZGVzZXQgPSB7CkBAIC0yNTgsMyArMjY2LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCitudjA0X3ZibGFua19jcnRjMF9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwludl93cjMyKGRldiwgTlZfQ1JUQzBfSU5UU1RBVCwgTlZfQ1JUQ19JTlRSX1ZCTEFOSyk7CisJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKK30KKworc3RhdGljIHZvaWQKK252MDRfdmJsYW5rX2NydGMxX2lzcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCW52X3dyMzIoZGV2LCBOVl9DUlRDMV9JTlRTVEFULCBOVl9DUlRDX0lOVFJfVkJMQU5LKTsKKwlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDEpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9mYmNvbi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9mYmNvbi5jCmluZGV4IDMzZTRjOTMuLjdhMTE4OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZmJjb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2ZiY29uLmMKQEAgLTI4LDUyICsyOCwzOSBAQAogI2luY2x1ZGUgIm5vdXZlYXVfcmFtaHQuaCIKICNpbmNsdWRlICJub3V2ZWF1X2ZiY29uLmgiCiAKLXZvaWQKK2ludAogbnYwNF9mYmNvbl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICpyZWdpb24pCiB7CiAJc3RydWN0IG5vdXZlYXVfZmJkZXYgKm5mYmRldiA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbmZiZGV2LT5kZXY7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZGV2X3ByaXYtPmNoYW5uZWw7CisJaW50IHJldDsKIAotCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORykKLQkJcmV0dXJuOwotCi0JaWYgKCEoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgJiYgUklOR19TUEFDRShjaGFuLCA0KSkgewotCQlub3V2ZWF1X2ZiY29uX2dwdV9sb2NrdXAoaW5mbyk7Ci0JfQotCi0JaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpIHsKLQkJY2ZiX2NvcHlhcmVhKGluZm8sIHJlZ2lvbik7Ci0JCXJldHVybjsKLQl9CisJcmV0ID0gUklOR19TUEFDRShjaGFuLCA0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJQkVHSU5fUklORyhjaGFuLCBOdlN1YkltYWdlQmxpdCwgMHgwMzAwLCAzKTsKIAlPVVRfUklORyhjaGFuLCAocmVnaW9uLT5zeSA8PCAxNikgfCByZWdpb24tPnN4KTsKIAlPVVRfUklORyhjaGFuLCAocmVnaW9uLT5keSA8PCAxNikgfCByZWdpb24tPmR4KTsKIAlPVVRfUklORyhjaGFuLCAocmVnaW9uLT5oZWlnaHQgPDwgMTYpIHwgcmVnaW9uLT53aWR0aCk7CiAJRklSRV9SSU5HKGNoYW4pOworCXJldHVybiAwOwogfQogCi12b2lkCitpbnQKIG52MDRfZmJjb25fZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9mYmRldiAqbmZiZGV2ID0gaW5mby0+cGFyOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBuZmJkZXYtPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbDsKKwlpbnQgcmV0OwogCi0JaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQotCQlyZXR1cm47Ci0KLQlpZiAoIShpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSAmJiBSSU5HX1NQQUNFKGNoYW4sIDcpKSB7Ci0JCW5vdXZlYXVfZmJjb25fZ3B1X2xvY2t1cChpbmZvKTsKLQl9Ci0KLQlpZiAoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgewotCQljZmJfZmlsbHJlY3QoaW5mbywgcmVjdCk7Ci0JCXJldHVybjsKLQl9CisJcmV0ID0gUklOR19TUEFDRShjaGFuLCA3KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJQkVHSU5fUklORyhjaGFuLCBOdlN1YkdkaVJlY3QsIDB4MDJmYywgMSk7CiAJT1VUX1JJTkcoY2hhbiwgKHJlY3QtPnJvcCAhPSBST1BfQ09QWSkgPyAxIDogMyk7CkBAIC04Nyw5ICs3NCwxMCBAQAogCU9VVF9SSU5HKGNoYW4sIChyZWN0LT5keCA8PCAxNikgfCByZWN0LT5keSk7CiAJT1VUX1JJTkcoY2hhbiwgKHJlY3QtPndpZHRoIDw8IDE2KSB8IHJlY3QtPmhlaWdodCk7CiAJRklSRV9SSU5HKGNoYW4pOworCXJldHVybiAwOwogfQogCi12b2lkCitpbnQKIG52MDRfZmJjb25faW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQogewogCXN0cnVjdCBub3V2ZWF1X2ZiZGV2ICpuZmJkZXYgPSBpbmZvLT5wYXI7CkBAIC0xMDEsMjMgKzg5LDE0IEBACiAJdWludDMyX3QgZHNpemU7CiAJdWludDMyX3Qgd2lkdGg7CiAJdWludDMyX3QgKmRhdGEgPSAodWludDMyX3QgKilpbWFnZS0+ZGF0YTsKKwlpbnQgcmV0OwogCi0JaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQotCQlyZXR1cm47CisJaWYgKGltYWdlLT5kZXB0aCAhPSAxKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChpbWFnZS0+ZGVwdGggIT0gMSkgewotCQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpICYmIFJJTkdfU1BBQ0UoY2hhbiwgOCkpIHsKLQkJbm91dmVhdV9mYmNvbl9ncHVfbG9ja3VwKGluZm8pOwotCX0KLQotCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSB7Ci0JCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwotCQlyZXR1cm47Ci0JfQorCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgOCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCXdpZHRoID0gQUxJR04oaW1hZ2UtPndpZHRoLCA4KTsKIAlkc2l6ZSA9IEFMSUdOKHdpZHRoICogaW1hZ2UtPmhlaWdodCwgMzIpID4+IDU7CkBAIC0xNDQsMTEgKzEyMyw5IEBACiAJd2hpbGUgKGRzaXplKSB7CiAJCWludCBpdGVyX2xlbiA9IGRzaXplID4gMTI4ID8gMTI4IDogZHNpemU7CiAKLQkJaWYgKFJJTkdfU1BBQ0UoY2hhbiwgaXRlcl9sZW4gKyAxKSkgewotCQkJbm91dmVhdV9mYmNvbl9ncHVfbG9ja3VwKGluZm8pOwotCQkJY2ZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7Ci0JCQlyZXR1cm47Ci0JCX0KKwkJcmV0ID0gUklOR19TUEFDRShjaGFuLCBpdGVyX2xlbiArIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAogCQlCRUdJTl9SSU5HKGNoYW4sIE52U3ViR2RpUmVjdCwgMHgwYzAwLCBpdGVyX2xlbik7CiAJCU9VVF9SSU5HcChjaGFuLCBkYXRhLCBpdGVyX2xlbik7CkBAIC0xNTcsMjIgKzEzNCw3IEBACiAJfQogCiAJRklSRV9SSU5HKGNoYW4pOwotfQotCi1zdGF0aWMgaW50Ci1udjA0X2ZiY29uX2dyb2JqX25ldyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY2xhc3MsIHVpbnQzMl90IGhhbmRsZSkKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqb2JqID0gTlVMTDsKLQlpbnQgcmV0OwotCi0JcmV0ID0gbm91dmVhdV9ncHVvYmpfZ3JfbmV3KGRldl9wcml2LT5jaGFubmVsLCBjbGFzcywgJm9iaik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IG5vdXZlYXVfcmFtaHRfaW5zZXJ0KGRldl9wcml2LT5jaGFubmVsLCBoYW5kbGUsIG9iaik7Ci0Jbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZvYmopOwotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIGludApAQCAtMjE0LDI5ICsxNzYsMzEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0ID0gbnYwNF9mYmNvbl9ncm9ial9uZXcoZGV2LCBkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzEwID8KLQkJCQkgICAweDAwNjIgOiAweDAwNDIsIE52Q3R4U3VyZjJEKTsKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9ncl9uZXcoY2hhbiwgTnZDdHhTdXJmMkQsCisJCQkJICAgIGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfMTAgPworCQkJCSAgICAweDAwNjIgOiAweDAwNDIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBudjA0X2ZiY29uX2dyb2JqX25ldyhkZXYsIDB4MDAxOSwgTnZDbGlwUmVjdCk7CisJcmV0ID0gbm91dmVhdV9ncHVvYmpfZ3JfbmV3KGNoYW4sIE52Q2xpcFJlY3QsIDB4MDAxOSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IG52MDRfZmJjb25fZ3JvYmpfbmV3KGRldiwgMHgwMDQzLCBOdlJvcCk7CisJcmV0ID0gbm91dmVhdV9ncHVvYmpfZ3JfbmV3KGNoYW4sIE52Um9wLCAweDAwNDMpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBudjA0X2ZiY29uX2dyb2JqX25ldyhkZXYsIDB4MDA0NCwgTnZJbWFnZVBhdHQpOworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2dyX25ldyhjaGFuLCBOdkltYWdlUGF0dCwgMHgwMDQ0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gbnYwNF9mYmNvbl9ncm9ial9uZXcoZGV2LCAweDAwNGEsIE52R2RpUmVjdCk7CisJcmV0ID0gbm91dmVhdV9ncHVvYmpfZ3JfbmV3KGNoYW4sIE52R2RpUmVjdCwgMHgwMDRhKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gbnYwNF9mYmNvbl9ncm9ial9uZXcoZGV2LCBkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDExID8KLQkJCQkgICAweDAwOWYgOiAweDAwNWYsIE52SW1hZ2VCbGl0KTsKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9ncl9uZXcoY2hhbiwgTnZJbWFnZUJsaXQsCisJCQkJICAgIGRldl9wcml2LT5jaGlwc2V0ID49IDB4MTEgPworCQkJCSAgICAweDAwOWYgOiAweDAwNWYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZmlmby5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9maWZvLmMKaW5kZXggNzA4MjkzYi4uZjg5ZDEwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9maWZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9maWZvLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgogI2luY2x1ZGUgIm5vdXZlYXVfcmFtaHQuaCIKKyNpbmNsdWRlICJub3V2ZWF1X3V0aWwuaCIKIAogI2RlZmluZSBOVjA0X1JBTUZDKGMpIChkZXZfcHJpdi0+cmFtZmMtPnBpbnN0ICsgKChjKSAqIE5WMDRfUkFNRkNfX1NJWkUpKQogI2RlZmluZSBOVjA0X1JBTUZDX19TSVpFIDMyCkBAIC0xMjgsNiArMTI5LDExIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCWNoYW4tPnVzZXIgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDApICsKKwkJCSAgICAgTlYwM19VU0VSKGNoYW4tPmlkKSwgUEFHRV9TSVpFKTsKKwlpZiAoIWNoYW4tPnVzZXIpCisJCXJldHVybiAtRU5PTUVNOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CiAKIAkvKiBTZXR1cCBpbml0aWFsIHN0YXRlICovCkBAIC0xNTEsMTAgKzE1NywzMSBAQAogbnYwNF9maWZvX2Rlc3Ryb3lfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9maWZvX2VuZ2luZSAqcGZpZm8gPSAmZGV2X3ByaXYtPmVuZ2luZS5maWZvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQludl93cjMyKGRldiwgTlYwNF9QRklGT19NT0RFLAotCQludl9yZDMyKGRldiwgTlYwNF9QRklGT19NT0RFKSAmIH4oMSA8PCBjaGFuLT5pZCkpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOworCXBmaWZvLT5yZWFzc2lnbihkZXYsIGZhbHNlKTsKIAorCS8qIFVubG9hZCB0aGUgY29udGV4dCBpZiBpdCdzIHRoZSBjdXJyZW50bHkgYWN0aXZlIG9uZSAqLworCWlmIChwZmlmby0+Y2hhbm5lbF9pZChkZXYpID09IGNoYW4tPmlkKSB7CisJCXBmaWZvLT5kaXNhYmxlKGRldik7CisJCXBmaWZvLT51bmxvYWRfY29udGV4dChkZXYpOworCQlwZmlmby0+ZW5hYmxlKGRldik7CisJfQorCisJLyogS2VlcCBpdCBmcm9tIGJlaW5nIHJlc2NoZWR1bGVkICovCisJbnZfbWFzayhkZXYsIE5WMDRfUEZJRk9fTU9ERSwgMSA8PCBjaGFuLT5pZCwgMCk7CisKKwlwZmlmby0+cmVhc3NpZ24oZGV2LCB0cnVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOworCisJLyogRnJlZSB0aGUgY2hhbm5lbCByZXNvdXJjZXMgKi8KKwlpZiAoY2hhbi0+dXNlcikgeworCQlpb3VubWFwKGNoYW4tPnVzZXIpOworCQljaGFuLT51c2VyID0gTlVMTDsKKwl9CiAJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZjaGFuLT5yYW1mYyk7CiB9CiAKQEAgLTIwOCw3ICsyMzUsNyBAQAogCWlmIChjaGlkIDwgMCB8fCBjaGlkID49IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVscykKIAkJcmV0dXJuIDA7CiAKLQljaGFuID0gZGV2X3ByaXYtPmZpZm9zW2NoaWRdOworCWNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbHMucHRyW2NoaWRdOwogCWlmICghY2hhbikgewogCQlOVl9FUlJPUihkZXYsICJJbmFjdGl2ZSBjaGFubmVsIG9uIFBGSUZPOiAlZFxuIiwgY2hpZCk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjY3LDYgKzI5NCw3IEBACiBzdGF0aWMgdm9pZAogbnYwNF9maWZvX2luaXRfaW50cihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCW5vdXZlYXVfaXJxX3JlZ2lzdGVyKGRldiwgOCwgbnYwNF9maWZvX2lzcik7CiAJbnZfd3IzMihkZXYsIDB4MDAyMTAwLCAweGZmZmZmZmZmKTsKIAludl93cjMyKGRldiwgMHgwMDIxNDAsIDB4ZmZmZmZmZmYpOwogfQpAQCAtMjg5LDcgKzMxNyw3IEBACiAJcGZpZm8tPnJlYXNzaWduKGRldiwgdHJ1ZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPmVuZ2luZS5maWZvLmNoYW5uZWxzOyBpKyspIHsKLQkJaWYgKGRldl9wcml2LT5maWZvc1tpXSkgeworCQlpZiAoZGV2X3ByaXYtPmNoYW5uZWxzLnB0cltpXSkgewogCQkJdWludDMyX3QgbW9kZSA9IG52X3JkMzIoZGV2LCBOVjA0X1BGSUZPX01PREUpOwogCQkJbnZfd3IzMihkZXYsIE5WMDRfUEZJRk9fTU9ERSwgbW9kZSB8ICgxIDw8IGkpKTsKIAkJfQpAQCAtMjk4LDMgKzMyNiwyMDcgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZAorbnYwNF9maWZvX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwludl93cjMyKGRldiwgMHgyMTQwLCAweDAwMDAwMDAwKTsKKwlub3V2ZWF1X2lycV91bnJlZ2lzdGVyKGRldiwgOCk7Cit9CisKK3N0YXRpYyBib29sCitub3V2ZWF1X2ZpZm9fc3dtdGhkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBjaGlkLCB1MzIgYWRkciwgdTMyIGRhdGEpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gTlVMTDsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKm9iajsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNvbnN0IGludCBzdWJjID0gKGFkZHIgPj4gMTMpICYgMHg3OworCWNvbnN0IGludCBtdGhkID0gYWRkciAmIDB4MWZmYzsKKwlib29sIGhhbmRsZWQgPSBmYWxzZTsKKwl1MzIgZW5naW5lOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5jaGFubmVscy5sb2NrLCBmbGFncyk7CisJaWYgKGxpa2VseShjaGlkID49IDAgJiYgY2hpZCA8IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVscykpCisJCWNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbHMucHRyW2NoaWRdOworCWlmICh1bmxpa2VseSghY2hhbikpCisJCWdvdG8gb3V0OworCisJc3dpdGNoIChtdGhkKSB7CisJY2FzZSAweDAwMDA6IC8qIGJpbmQgb2JqZWN0IHRvIHN1YmNoYW5uZWwgKi8KKwkJb2JqID0gbm91dmVhdV9yYW1odF9maW5kKGNoYW4sIGRhdGEpOworCQlpZiAodW5saWtlbHkoIW9iaiB8fCBvYmotPmVuZ2luZSAhPSBOVk9CSl9FTkdJTkVfU1cpKQorCQkJYnJlYWs7CisKKwkJY2hhbi0+c3dfc3ViY2hhbm5lbFtzdWJjXSA9IG9iai0+Y2xhc3M7CisJCWVuZ2luZSA9IDB4MDAwMDAwMGYgPDwgKHN1YmMgKiA0KTsKKworCQludl9tYXNrKGRldiwgTlYwNF9QRklGT19DQUNIRTFfRU5HSU5FLCBlbmdpbmUsIDB4MDAwMDAwMDApOworCQloYW5kbGVkID0gdHJ1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZW5naW5lID0gbnZfcmQzMihkZXYsIE5WMDRfUEZJRk9fQ0FDSEUxX0VOR0lORSk7CisJCWlmICh1bmxpa2VseSgoKGVuZ2luZSA+PiAoc3ViYyAqIDQpKSAmIDB4ZikgIT0gMCkpCisJCQlicmVhazsKKworCQlpZiAoIW5vdXZlYXVfZ3B1b2JqX210aGRfY2FsbChjaGFuLCBjaGFuLT5zd19zdWJjaGFubmVsW3N1YmNdLAorCQkJCQkgICAgICBtdGhkLCBkYXRhKSkKKwkJCWhhbmRsZWQgPSB0cnVlOworCQlicmVhazsKKwl9CisKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y2hhbm5lbHMubG9jaywgZmxhZ3MpOworCXJldHVybiBoYW5kbGVkOworfQorCit2b2lkCitudjA0X2ZpZm9faXNyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgKmVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lOworCXVpbnQzMl90IHN0YXR1cywgcmVhc3NpZ247CisJaW50IGNudCA9IDA7CisKKwlyZWFzc2lnbiA9IG52X3JkMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFUykgJiAxOworCXdoaWxlICgoc3RhdHVzID0gbnZfcmQzMihkZXYsIE5WMDNfUEZJRk9fSU5UUl8wKSkgJiYgKGNudCsrIDwgMTAwKSkgeworCQl1aW50MzJfdCBjaGlkLCBnZXQ7CisKKwkJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEVTLCAwKTsKKworCQljaGlkID0gZW5naW5lLT5maWZvLmNoYW5uZWxfaWQoZGV2KTsKKwkJZ2V0ICA9IG52X3JkMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFMV9HRVQpOworCisJCWlmIChzdGF0dXMgJiBOVl9QRklGT19JTlRSX0NBQ0hFX0VSUk9SKSB7CisJCQl1aW50MzJfdCBtdGhkLCBkYXRhOworCQkJaW50IHB0cjsKKworCQkJLyogTlZfUEZJRk9fQ0FDSEUxX0dFVCBhY3R1YWxseSBnb2VzIHRvIDB4ZmZjIGJlZm9yZQorCQkJICogd3JhcHBpbmcgb24gbXkgRzgwIGNoaXBzLCBidXQgQ0FDSEUxIGlzbid0IGJpZworCQkJICogZW5vdWdoIGZvciB0aGlzIG11Y2ggZGF0YS4uIFRlc3RzIHNob3cgdGhhdCBpdAorCQkJICogd3JhcHMgYXJvdW5kIHRvIHRoZSBzdGFydCBhdCBHRVQ9MHg4MDAuLiBObyBjbHVlCisJCQkgKiBhcyB0byB3aHkuLgorCQkJICovCisJCQlwdHIgPSAoZ2V0ICYgMHg3ZmYpID4+IDI7CisKKwkJCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfNDApIHsKKwkJCQltdGhkID0gbnZfcmQzMihkZXYsCisJCQkJCU5WMDRfUEZJRk9fQ0FDSEUxX01FVEhPRChwdHIpKTsKKwkJCQlkYXRhID0gbnZfcmQzMihkZXYsCisJCQkJCU5WMDRfUEZJRk9fQ0FDSEUxX0RBVEEocHRyKSk7CisJCQl9IGVsc2UgeworCQkJCW10aGQgPSBudl9yZDMyKGRldiwKKwkJCQkJTlY0MF9QRklGT19DQUNIRTFfTUVUSE9EKHB0cikpOworCQkJCWRhdGEgPSBudl9yZDMyKGRldiwKKwkJCQkJTlY0MF9QRklGT19DQUNIRTFfREFUQShwdHIpKTsKKwkJCX0KKworCQkJaWYgKCFub3V2ZWF1X2ZpZm9fc3dtdGhkKGRldiwgY2hpZCwgbXRoZCwgZGF0YSkpIHsKKwkJCQlOVl9JTkZPKGRldiwgIlBGSUZPX0NBQ0hFX0VSUk9SIC0gQ2ggJWQvJWQgIgorCQkJCQkgICAgICJNdGhkIDB4JTA0eCBEYXRhIDB4JTA4eFxuIiwKKwkJCQkJY2hpZCwgKG10aGQgPj4gMTMpICYgNywgbXRoZCAmIDB4MWZmYywKKwkJCQkJZGF0YSk7CisJCQl9CisKKwkJCW52X3dyMzIoZGV2LCBOVjA0X1BGSUZPX0NBQ0hFMV9ETUFfUFVTSCwgMCk7CisJCQludl93cjMyKGRldiwgTlYwM19QRklGT19JTlRSXzAsCisJCQkJCQlOVl9QRklGT19JTlRSX0NBQ0hFX0VSUk9SKTsKKworCQkJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEUxX1BVU0gwLAorCQkJCW52X3JkMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFMV9QVVNIMCkgJiB+MSk7CisJCQludl93cjMyKGRldiwgTlYwM19QRklGT19DQUNIRTFfR0VULCBnZXQgKyA0KTsKKwkJCW52X3dyMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFMV9QVVNIMCwKKwkJCQludl9yZDMyKGRldiwgTlYwM19QRklGT19DQUNIRTFfUFVTSDApIHwgMSk7CisJCQludl93cjMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfSEFTSCwgMCk7CisKKwkJCW52X3dyMzIoZGV2LCBOVjA0X1BGSUZPX0NBQ0hFMV9ETUFfUFVTSCwKKwkJCQludl9yZDMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfRE1BX1BVU0gpIHwgMSk7CisJCQludl93cjMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfUFVMTDAsIDEpOworCisJCQlzdGF0dXMgJj0gfk5WX1BGSUZPX0lOVFJfQ0FDSEVfRVJST1I7CisJCX0KKworCQlpZiAoc3RhdHVzICYgTlZfUEZJRk9fSU5UUl9ETUFfUFVTSEVSKSB7CisJCQl1MzIgZG1hX2dldCA9IG52X3JkMzIoZGV2LCAweDAwMzI0NCk7CisJCQl1MzIgZG1hX3B1dCA9IG52X3JkMzIoZGV2LCAweDAwMzI0MCk7CisJCQl1MzIgcHVzaCA9IG52X3JkMzIoZGV2LCAweDAwMzIyMCk7CisJCQl1MzIgc3RhdGUgPSBudl9yZDMyKGRldiwgMHgwMDMyMjgpOworCisJCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl81MCkgeworCQkJCXUzMiBob19nZXQgPSBudl9yZDMyKGRldiwgMHgwMDMzMjgpOworCQkJCXUzMiBob19wdXQgPSBudl9yZDMyKGRldiwgMHgwMDMzMjApOworCQkJCXUzMiBpYl9nZXQgPSBudl9yZDMyKGRldiwgMHgwMDMzMzQpOworCQkJCXUzMiBpYl9wdXQgPSBudl9yZDMyKGRldiwgMHgwMDMzMzApOworCisJCQkJaWYgKG5vdXZlYXVfcmF0ZWxpbWl0KCkpCisJCQkJCU5WX0lORk8oZGV2LCAiUEZJRk9fRE1BX1BVU0hFUiAtIENoICVkIEdldCAweCUwMnglMDh4ICIKKwkJCQkJICAgICAiUHV0IDB4JTAyeCUwOHggSWJHZXQgMHglMDh4IEliUHV0IDB4JTA4eCAiCisJCQkJCSAgICAgIlN0YXRlIDB4JTA4eCBQdXNoIDB4JTA4eFxuIiwKKwkJCQkJCWNoaWQsIGhvX2dldCwgZG1hX2dldCwgaG9fcHV0LAorCQkJCQkJZG1hX3B1dCwgaWJfZ2V0LCBpYl9wdXQsIHN0YXRlLAorCQkJCQkJcHVzaCk7CisKKwkJCQkvKiBNRVRIT0RfQ09VTlQsIGluIERNQV9TVEFURSBvbiBlYXJsaWVyIGNoaXBzZXRzICovCisJCQkJbnZfd3IzMihkZXYsIDB4MDAzMzY0LCAweDAwMDAwMDAwKTsKKwkJCQlpZiAoZG1hX2dldCAhPSBkbWFfcHV0IHx8IGhvX2dldCAhPSBob19wdXQpIHsKKwkJCQkJbnZfd3IzMihkZXYsIDB4MDAzMjQ0LCBkbWFfcHV0KTsKKwkJCQkJbnZfd3IzMihkZXYsIDB4MDAzMzI4LCBob19wdXQpOworCQkJCX0gZWxzZQorCQkJCWlmIChpYl9nZXQgIT0gaWJfcHV0KSB7CisJCQkJCW52X3dyMzIoZGV2LCAweDAwMzMzNCwgaWJfcHV0KTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCU5WX0lORk8oZGV2LCAiUEZJRk9fRE1BX1BVU0hFUiAtIENoICVkIEdldCAweCUwOHggIgorCQkJCQkgICAgICJQdXQgMHglMDh4IFN0YXRlIDB4JTA4eCBQdXNoIDB4JTA4eFxuIiwKKwkJCQkJY2hpZCwgZG1hX2dldCwgZG1hX3B1dCwgc3RhdGUsIHB1c2gpOworCisJCQkJaWYgKGRtYV9nZXQgIT0gZG1hX3B1dCkKKwkJCQkJbnZfd3IzMihkZXYsIDB4MDAzMjQ0LCBkbWFfcHV0KTsKKwkJCX0KKworCQkJbnZfd3IzMihkZXYsIDB4MDAzMjI4LCAweDAwMDAwMDAwKTsKKwkJCW52X3dyMzIoZGV2LCAweDAwMzIyMCwgMHgwMDAwMDAwMSk7CisJCQludl93cjMyKGRldiwgMHgwMDIxMDAsIE5WX1BGSUZPX0lOVFJfRE1BX1BVU0hFUik7CisJCQlzdGF0dXMgJj0gfk5WX1BGSUZPX0lOVFJfRE1BX1BVU0hFUjsKKwkJfQorCisJCWlmIChzdGF0dXMgJiBOVl9QRklGT19JTlRSX1NFTUFQSE9SRSkgeworCQkJdWludDMyX3Qgc2VtOworCisJCQlzdGF0dXMgJj0gfk5WX1BGSUZPX0lOVFJfU0VNQVBIT1JFOworCQkJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fSU5UUl8wLAorCQkJCU5WX1BGSUZPX0lOVFJfU0VNQVBIT1JFKTsKKworCQkJc2VtID0gbnZfcmQzMihkZXYsIE5WMTBfUEZJRk9fQ0FDSEUxX1NFTUFQSE9SRSk7CisJCQludl93cjMyKGRldiwgTlYxMF9QRklGT19DQUNIRTFfU0VNQVBIT1JFLCBzZW0gfCAweDEpOworCisJCQludl93cjMyKGRldiwgTlYwM19QRklGT19DQUNIRTFfR0VULCBnZXQgKyA0KTsKKwkJCW52X3dyMzIoZGV2LCBOVjA0X1BGSUZPX0NBQ0hFMV9QVUxMMCwgMSk7CisJCX0KKworCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl81MCkgeworCQkJaWYgKHN0YXR1cyAmIDB4MDAwMDAwMTApIHsKKwkJCQludjUwX2ZiX3ZtX3RyYXAoZGV2LCAxLCAiUEZJRk9fQkFSX0ZBVUxUIik7CisJCQkJc3RhdHVzICY9IH4weDAwMDAwMDEwOworCQkJCW52X3dyMzIoZGV2LCAweDAwMjEwMCwgMHgwMDAwMDAxMCk7CisJCQl9CisJCX0KKworCQlpZiAoc3RhdHVzKSB7CisJCQlpZiAobm91dmVhdV9yYXRlbGltaXQoKSkKKwkJCQlOVl9JTkZPKGRldiwgIlBGSUZPX0lOVFIgMHglMDh4IC0gQ2ggJWRcbiIsCisJCQkJCXN0YXR1cywgY2hpZCk7CisJCQludl93cjMyKGRldiwgTlYwM19QRklGT19JTlRSXzAsIHN0YXR1cyk7CisJCQlzdGF0dXMgPSAwOworCQl9CisKKwkJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEVTLCByZWFzc2lnbik7CisJfQorCisJaWYgKHN0YXR1cykgeworCQlOVl9JTkZPKGRldiwgIlBGSUZPIHN0aWxsIGFuZ3J5IGFmdGVyICVkIHNwaW5zLCBoYWx0XG4iLCBjbnQpOworCQludl93cjMyKGRldiwgMHgyMTQwLCAwKTsKKwkJbnZfd3IzMihkZXYsIDB4MTQwLCAwKTsKKwl9CisKKwludl93cjMyKGRldiwgTlYwM19QTUNfSU5UUl8wLCBOVl9QTUNfSU5UUl8wX1BGSUZPX1BFTkRJTkcpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9ncmFwaC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9ncmFwaC5jCmluZGV4IGM4OTczNDIuLmFmNzUwMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZ3JhcGguYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2dyYXBoLmMKQEAgLTI2LDYgKzI2LDExIEBACiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAibm91dmVhdV9kcm0uaCIKICNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgorI2luY2x1ZGUgIm5vdXZlYXVfaHcuaCIKKyNpbmNsdWRlICJub3V2ZWF1X3V0aWwuaCIKKworc3RhdGljIGludCAgbnYwNF9ncmFwaF9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIG52MDRfZ3JhcGhfaXNyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgdWludDMyX3QgbnYwNF9ncmFwaF9jdHhfcmVnc1tdID0gewogCTB4MDA0MDA1M2MsCkBAIC0zNTcsMTAgKzM2MiwxMCBAQAogCWlmIChjaGlkID49IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVscykKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gZGV2X3ByaXYtPmZpZm9zW2NoaWRdOworCXJldHVybiBkZXZfcHJpdi0+Y2hhbm5lbHMucHRyW2NoaWRdOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogbnYwNF9ncmFwaF9jb250ZXh0X3N3aXRjaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0zNjgsNyArMzczLDYgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gTlVMTDsKIAlpbnQgY2hpZDsKIAotCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCBmYWxzZSk7CiAJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CiAKIAkvKiBJZiBwcmV2aW91cyBjb250ZXh0IGlzIHZhbGlkLCB3ZSBuZWVkIHRvIHNhdmUgaXQgKi8KQEAgLTM3NiwxMSArMzgwLDkgQEAKIAogCS8qIExvYWQgY29udGV4dCBmb3IgbmV4dCBjaGFubmVsICovCiAJY2hpZCA9IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVsX2lkKGRldik7Ci0JY2hhbiA9IGRldl9wcml2LT5maWZvc1tjaGlkXTsKKwljaGFuID0gZGV2X3ByaXYtPmNoYW5uZWxzLnB0cltjaGlkXTsKIAlpZiAoY2hhbikKIAkJbnYwNF9ncmFwaF9sb2FkX2NvbnRleHQoY2hhbik7Ci0KLQlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB1aW50MzJfdCAqY3R4X3JlZyhzdHJ1Y3QgZ3JhcGhfc3RhdGUgKmN0eCwgdWludDMyX3QgcmVnKQpAQCAtNDEyLDEwICs0MTQsMjUgQEAKIAogdm9pZCBudjA0X2dyYXBoX2Rlc3Ryb3lfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKIAlzdHJ1Y3QgZ3JhcGhfc3RhdGUgKnBncmFwaF9jdHggPSBjaGFuLT5wZ3JhcGhfY3R4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKKwlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgZmFsc2UpOworCisJLyogVW5sb2FkIHRoZSBjb250ZXh0IGlmIGl0J3MgdGhlIGN1cnJlbnRseSBhY3RpdmUgb25lICovCisJaWYgKHBncmFwaC0+Y2hhbm5lbChkZXYpID09IGNoYW4pCisJCXBncmFwaC0+dW5sb2FkX2NvbnRleHQoZGV2KTsKKworCS8qIEZyZWUgdGhlIGNvbnRleHQgcmVzb3VyY2VzICovCiAJa2ZyZWUocGdyYXBoX2N0eCk7CiAJY2hhbi0+cGdyYXBoX2N0eCA9IE5VTEw7CisKKwlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgdHJ1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKIH0KIAogaW50IG52MDRfZ3JhcGhfbG9hZF9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCkBAIC00NjgsMTMgKzQ4NSwxOSBAQAogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdWludDMyX3QgdG1wOworCWludCByZXQ7CiAKIAludl93cjMyKGRldiwgTlYwM19QTUNfRU5BQkxFLCBudl9yZDMyKGRldiwgTlYwM19QTUNfRU5BQkxFKSAmCiAJCQl+TlZfUE1DX0VOQUJMRV9QR1JBUEgpOwogCW52X3dyMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUsIG52X3JkMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUpIHwKIAkJCSBOVl9QTUNfRU5BQkxFX1BHUkFQSCk7CiAKKwlyZXQgPSBudjA0X2dyYXBoX3JlZ2lzdGVyKGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCS8qIEVuYWJsZSBQR1JBUEggaW50ZXJydXB0cyAqLworCW5vdXZlYXVfaXJxX3JlZ2lzdGVyKGRldiwgMTIsIG52MDRfZ3JhcGhfaXNyKTsKIAludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwgMHhGRkZGRkZGRik7CiAJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFJfRU4sIDB4RkZGRkZGRkYpOwogCkBAIC01MTAsNiArNTMzLDggQEAKIAogdm9pZCBudjA0X2dyYXBoX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CisJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFJfRU4sIDB4MDAwMDAwMDApOworCW5vdXZlYXVfaXJxX3VucmVnaXN0ZXIoZGV2LCAxMik7CiB9CiAKIHZvaWQKQEAgLTUyNCwxMyArNTQ5LDI3IEBACiB9CiAKIHN0YXRpYyBpbnQKLW52MDRfZ3JhcGhfbXRoZF9zZXRfcmVmKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBncmNsYXNzLAotCQkJaW50IG10aGQsIHVpbnQzMl90IGRhdGEpCitudjA0X2dyYXBoX210aGRfc2V0X3JlZihzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLAorCQkJdTMyIGNsYXNzLCB1MzIgbXRoZCwgdTMyIGRhdGEpCiB7CiAJYXRvbWljX3NldCgmY2hhbi0+ZmVuY2UubGFzdF9zZXF1ZW5jZV9pcnEsIGRhdGEpOwogCXJldHVybiAwOwogfQogCitpbnQKK252MDRfZ3JhcGhfbXRoZF9wYWdlX2ZsaXAoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwKKwkJCSAgdTMyIGNsYXNzLCB1MzIgbXRoZCwgdTMyIGRhdGEpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3Qgbm91dmVhdV9wYWdlX2ZsaXBfc3RhdGUgczsKKworCWlmICghbm91dmVhdV9maW5pc2hfcGFnZV9mbGlwKGNoYW4sICZzKSkKKwkJbnZfc2V0X2NydGNfYmFzZShkZXYsIHMuY3J0YywKKwkJCQkgcy5vZmZzZXQgKyBzLnkgKiBzLnBpdGNoICsgcy54ICogcy5icHAgLyA4KTsKKworCXJldHVybiAwOworfQorCiAvKgogICogU29mdHdhcmUgbWV0aG9kcywgd2h5IHRoZXkgYXJlIG5lZWRlZCwgYW5kIGhvdyB0aGV5IGFsbCB3b3JrOgogICoKQEAgLTYwNiwxMiArNjQ1LDEyIEBACiAgKi8KIAogc3RhdGljIHZvaWQKLW52MDRfZ3JhcGhfc2V0X2N0eDEoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgdWludDMyX3QgbWFzaywgdWludDMyX3QgdmFsdWUpCitudjA0X2dyYXBoX3NldF9jdHgxKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIHUzMiBtYXNrLCB1MzIgdmFsdWUpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKLQl1aW50MzJfdCBpbnN0YW5jZSA9IChudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfQ1RYX1NXSVRDSDQpICYgMHhmZmZmKSA8PCA0OworCXUzMiBpbnN0YW5jZSA9IChudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfQ1RYX1NXSVRDSDQpICYgMHhmZmZmKSA8PCA0OwogCWludCBzdWJjID0gKG52X3JkMzIoZGV2LCBOVjA0X1BHUkFQSF9UUkFQUEVEX0FERFIpID4+IDEzKSAmIDB4NzsKLQl1aW50MzJfdCB0bXA7CisJdTMyIHRtcDsKIAogCXRtcCAgPSBudl9yaTMyKGRldiwgaW5zdGFuY2UpOwogCXRtcCAmPSB+bWFzazsKQEAgLTYyMywxMSArNjYyLDExIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1udjA0X2dyYXBoX3NldF9jdHhfdmFsKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIHVpbnQzMl90IG1hc2ssIHVpbnQzMl90IHZhbHVlKQorbnYwNF9ncmFwaF9zZXRfY3R4X3ZhbChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCB1MzIgbWFzaywgdTMyIHZhbHVlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7Ci0JdWludDMyX3QgaW5zdGFuY2UgPSAobnZfcmQzMihkZXYsIE5WMDRfUEdSQVBIX0NUWF9TV0lUQ0g0KSAmIDB4ZmZmZikgPDwgNDsKLQl1aW50MzJfdCB0bXAsIGN0eDE7CisJdTMyIGluc3RhbmNlID0gKG52X3JkMzIoZGV2LCBOVjA0X1BHUkFQSF9DVFhfU1dJVENINCkgJiAweGZmZmYpIDw8IDQ7CisJdTMyIHRtcCwgY3R4MTsKIAlpbnQgY2xhc3MsIG9wLCB2YWxpZCA9IDE7CiAKIAljdHgxID0gbnZfcmkzMihkZXYsIGluc3RhbmNlKTsKQEAgLTY3MiwxMyArNzExLDEzIEBACiB9CiAKIHN0YXRpYyBpbnQKLW52MDRfZ3JhcGhfbXRoZF9zZXRfb3BlcmF0aW9uKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBncmNsYXNzLAotCQkJICAgICAgaW50IG10aGQsIHVpbnQzMl90IGRhdGEpCitudjA0X2dyYXBoX210aGRfc2V0X29wZXJhdGlvbihzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLAorCQkJICAgICAgdTMyIGNsYXNzLCB1MzIgbXRoZCwgdTMyIGRhdGEpCiB7CiAJaWYgKGRhdGEgPiA1KQogCQlyZXR1cm4gMTsKIAkvKiBPbGQgdmVyc2lvbnMgb2YgdGhlIG9iamVjdHMgb25seSBhY2NlcHQgZmlyc3QgdGhyZWUgb3BlcmF0aW9ucy4gKi8KLQlpZiAoZGF0YSA+IDIgJiYgZ3JjbGFzcyA8IDB4NDApCisJaWYgKGRhdGEgPiAyICYmIGNsYXNzIDwgMHg0MCkKIAkJcmV0dXJuIDE7CiAJbnYwNF9ncmFwaF9zZXRfY3R4MShjaGFuLCAweDAwMDM4MDAwLCBkYXRhIDw8IDE1KTsKIAkvKiBjaGFuZ2luZyBvcGVyYXRpb24gY2hhbmdlcyBzZXQgb2Ygb2JqZWN0cyBuZWVkZWQgZm9yIHZhbGlkYXRpb24gKi8KQEAgLTY4Nyw4ICs3MjYsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1udjA0X2dyYXBoX210aGRfc3VyZjNkX2NsaXBfaChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBpbnQgZ3JjbGFzcywKLQkJCSAgICAgIGludCBtdGhkLCB1aW50MzJfdCBkYXRhKQorbnYwNF9ncmFwaF9tdGhkX3N1cmYzZF9jbGlwX2goc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwKKwkJCSAgICAgIHUzMiBjbGFzcywgdTMyIG10aGQsIHUzMiBkYXRhKQogewogCXVpbnQzMl90IG1pbiA9IGRhdGEgJiAweGZmZmYsIG1heDsKIAl1aW50MzJfdCB3ID0gZGF0YSA+PiAxNjsKQEAgLTcwNiw4ICs3NDUsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1udjA0X2dyYXBoX210aGRfc3VyZjNkX2NsaXBfdihzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBpbnQgZ3JjbGFzcywKLQkJCSAgICAgIGludCBtdGhkLCB1aW50MzJfdCBkYXRhKQorbnYwNF9ncmFwaF9tdGhkX3N1cmYzZF9jbGlwX3Yoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwKKwkJCSAgICAgIHUzMiBjbGFzcywgdTMyIG10aGQsIHUzMiBkYXRhKQogewogCXVpbnQzMl90IG1pbiA9IGRhdGEgJiAweGZmZmYsIG1heDsKIAl1aW50MzJfdCB3ID0gZGF0YSA+PiAxNjsKQEAgLTcyNSw4ICs3NjQsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1udjA0X2dyYXBoX210aGRfYmluZF9zdXJmMmQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGdyY2xhc3MsCi0JCQkgICAgICBpbnQgbXRoZCwgdWludDMyX3QgZGF0YSkKK252MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmYyZChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLAorCQkJICAgIHUzMiBjbGFzcywgdTMyIG10aGQsIHUzMiBkYXRhKQogewogCXN3aXRjaCAobnZfcmkzMihjaGFuLT5kZXYsIGRhdGEgPDwgNCkgJiAweGZmKSB7CiAJY2FzZSAweDMwOgpAQCAtNzQyLDggKzc4MSw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLW52MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmYyZF9zd3pzdXJmKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBncmNsYXNzLAotCQkJICAgICAgaW50IG10aGQsIHVpbnQzMl90IGRhdGEpCitudjA0X2dyYXBoX210aGRfYmluZF9zdXJmMmRfc3d6c3VyZihzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLAorCQkJCSAgICB1MzIgY2xhc3MsIHUzMiBtdGhkLCB1MzIgZGF0YSkKIHsKIAlzd2l0Y2ggKG52X3JpMzIoY2hhbi0+ZGV2LCBkYXRhIDw8IDQpICYgMHhmZikgewogCWNhc2UgMHgzMDoKQEAgLTc2Myw4ICs4MDIsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1udjA0X2dyYXBoX210aGRfYmluZF9udjAxX3BhdHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGdyY2xhc3MsCi0JCQkgICAgICBpbnQgbXRoZCwgdWludDMyX3QgZGF0YSkKK252MDRfZ3JhcGhfbXRoZF9iaW5kX252MDFfcGF0dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLAorCQkJICAgICAgIHUzMiBjbGFzcywgdTMyIG10aGQsIHUzMiBkYXRhKQogewogCXN3aXRjaCAobnZfcmkzMihjaGFuLT5kZXYsIGRhdGEgPDwgNCkgJiAweGZmKSB7CiAJY2FzZSAweDMwOgpAQCAtNzc4LDggKzgxNyw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLW52MDRfZ3JhcGhfbXRoZF9iaW5kX252MDRfcGF0dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBpbnQgZ3JjbGFzcywKLQkJCSAgICAgIGludCBtdGhkLCB1aW50MzJfdCBkYXRhKQorbnYwNF9ncmFwaF9tdGhkX2JpbmRfbnYwNF9wYXR0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sCisJCQkgICAgICAgdTMyIGNsYXNzLCB1MzIgbXRoZCwgdTMyIGRhdGEpCiB7CiAJc3dpdGNoIChudl9yaTMyKGNoYW4tPmRldiwgZGF0YSA8PCA0KSAmIDB4ZmYpIHsKIAljYXNlIDB4MzA6CkBAIC03OTMsOCArODMyLDggQEAKIH0KIAogc3RhdGljIGludAotbnYwNF9ncmFwaF9tdGhkX2JpbmRfcm9wKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBncmNsYXNzLAotCQkJICAgICAgaW50IG10aGQsIHVpbnQzMl90IGRhdGEpCitudjA0X2dyYXBoX210aGRfYmluZF9yb3Aoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwKKwkJCSB1MzIgY2xhc3MsIHUzMiBtdGhkLCB1MzIgZGF0YSkKIHsKIAlzd2l0Y2ggKG52X3JpMzIoY2hhbi0+ZGV2LCBkYXRhIDw8IDQpICYgMHhmZikgewogCWNhc2UgMHgzMDoKQEAgLTgwOCw4ICs4NDcsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1udjA0X2dyYXBoX210aGRfYmluZF9iZXRhMShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBpbnQgZ3JjbGFzcywKLQkJCSAgICAgIGludCBtdGhkLCB1aW50MzJfdCBkYXRhKQorbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTEoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwKKwkJCSAgIHUzMiBjbGFzcywgdTMyIG10aGQsIHUzMiBkYXRhKQogewogCXN3aXRjaCAobnZfcmkzMihjaGFuLT5kZXYsIGRhdGEgPDwgNCkgJiAweGZmKSB7CiAJY2FzZSAweDMwOgpAQCAtODIzLDggKzg2Miw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLW52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGE0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBncmNsYXNzLAotCQkJICAgICAgaW50IG10aGQsIHVpbnQzMl90IGRhdGEpCitudjA0X2dyYXBoX210aGRfYmluZF9iZXRhNChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLAorCQkJICAgdTMyIGNsYXNzLCB1MzIgbXRoZCwgdTMyIGRhdGEpCiB7CiAJc3dpdGNoIChudl9yaTMyKGNoYW4tPmRldiwgZGF0YSA8PCA0KSAmIDB4ZmYpIHsKIAljYXNlIDB4MzA6CkBAIC04MzgsOCArODc3LDggQEAKIH0KIAogc3RhdGljIGludAotbnYwNF9ncmFwaF9tdGhkX2JpbmRfc3VyZl9kc3Qoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGdyY2xhc3MsCi0JCQkgICAgICBpbnQgbXRoZCwgdWludDMyX3QgZGF0YSkKK252MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmZfZHN0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sCisJCQkgICAgICB1MzIgY2xhc3MsIHUzMiBtdGhkLCB1MzIgZGF0YSkKIHsKIAlzd2l0Y2ggKG52X3JpMzIoY2hhbi0+ZGV2LCBkYXRhIDw8IDQpICYgMHhmZikgewogCWNhc2UgMHgzMDoKQEAgLTg1Myw4ICs4OTIsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1udjA0X2dyYXBoX210aGRfYmluZF9zdXJmX3NyYyhzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBpbnQgZ3JjbGFzcywKLQkJCSAgICAgIGludCBtdGhkLCB1aW50MzJfdCBkYXRhKQorbnYwNF9ncmFwaF9tdGhkX2JpbmRfc3VyZl9zcmMoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwKKwkJCSAgICAgIHUzMiBjbGFzcywgdTMyIG10aGQsIHUzMiBkYXRhKQogewogCXN3aXRjaCAobnZfcmkzMihjaGFuLT5kZXYsIGRhdGEgPDwgNCkgJiAweGZmKSB7CiAJY2FzZSAweDMwOgpAQCAtODY4LDggKzkwNyw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLW52MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmZfY29sb3Ioc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGdyY2xhc3MsCi0JCQkgICAgICBpbnQgbXRoZCwgdWludDMyX3QgZGF0YSkKK252MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmZfY29sb3Ioc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwKKwkJCQl1MzIgY2xhc3MsIHUzMiBtdGhkLCB1MzIgZGF0YSkKIHsKIAlzd2l0Y2ggKG52X3JpMzIoY2hhbi0+ZGV2LCBkYXRhIDw8IDQpICYgMHhmZikgewogCWNhc2UgMHgzMDoKQEAgLTg4Myw4ICs5MjIsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1udjA0X2dyYXBoX210aGRfYmluZF9zdXJmX3pldGEoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGdyY2xhc3MsCi0JCQkgICAgICBpbnQgbXRoZCwgdWludDMyX3QgZGF0YSkKK252MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmZfemV0YShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLAorCQkJICAgICAgIHUzMiBjbGFzcywgdTMyIG10aGQsIHUzMiBkYXRhKQogewogCXN3aXRjaCAobnZfcmkzMihjaGFuLT5kZXYsIGRhdGEgPDwgNCkgJiAweGZmKSB7CiAJY2FzZSAweDMwOgpAQCAtODk4LDggKzkzNyw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLW52MDRfZ3JhcGhfbXRoZF9iaW5kX2NsaXAoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGdyY2xhc3MsCi0JCQkgICAgICBpbnQgbXRoZCwgdWludDMyX3QgZGF0YSkKK252MDRfZ3JhcGhfbXRoZF9iaW5kX2NsaXAoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwKKwkJCSAgdTMyIGNsYXNzLCB1MzIgbXRoZCwgdTMyIGRhdGEpCiB7CiAJc3dpdGNoIChudl9yaTMyKGNoYW4tPmRldiwgZGF0YSA8PCA0KSAmIDB4ZmYpIHsKIAljYXNlIDB4MzA6CkBAIC05MTMsOCArOTUyLDggQEAKIH0KIAogc3RhdGljIGludAotbnYwNF9ncmFwaF9tdGhkX2JpbmRfY2hyb21hKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBncmNsYXNzLAotCQkJICAgICAgaW50IG10aGQsIHVpbnQzMl90IGRhdGEpCitudjA0X2dyYXBoX210aGRfYmluZF9jaHJvbWEoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwKKwkJCSAgICB1MzIgY2xhc3MsIHUzMiBtdGhkLCB1MzIgZGF0YSkKIHsKIAlzd2l0Y2ggKG52X3JpMzIoY2hhbi0+ZGV2LCBkYXRhIDw8IDQpICYgMHhmZikgewogCWNhc2UgMHgzMDoKQEAgLTkzMCwxOTQgKzk2OSwzNDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfbWV0aG9kIG52MDRfZ3JhcGhfbXRoZHNfc3dbXSA9IHsKLQl7IDB4MDE1MCwgbnYwNF9ncmFwaF9tdGhkX3NldF9yZWYgfSwKK3N0YXRpYyBpbnQKK252MDRfZ3JhcGhfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9wcml2LT5lbmdpbmUuZ3JhcGgucmVnaXN0ZXJlZCkKKwkJcmV0dXJuIDA7CisKKwkvKiBkdmQgc3VicGljdHVyZSAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDM4LCBHUik7CisKKwkvKiBtMm1mICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwMzksIEdSKTsKKworCS8qIG52MDMgZ2RpcmVjdCAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDRiLCBHUik7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNGIsIDB4MDE4NCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfbnYwMV9wYXR0KTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA0YiwgMHgwMTg4LCBudjA0X2dyYXBoX210aGRfYmluZF9yb3ApOworCU5WT0JKX01USEQgKGRldiwgMHgwMDRiLCAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGExKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA0YiwgMHgwMTkwLCBudjA0X2dyYXBoX210aGRfYmluZF9zdXJmX2RzdCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNGIsIDB4MDJmYywgbnYwNF9ncmFwaF9tdGhkX3NldF9vcGVyYXRpb24pOworCisJLyogbnYwNCBnZGlyZWN0ICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNGEsIEdSKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA0YSwgMHgwMTg4LCBudjA0X2dyYXBoX210aGRfYmluZF9udjA0X3BhdHQpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDRhLCAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3JvcCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNGEsIDB4MDE5MCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTEpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDRhLCAweDAxOTQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGE0KTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA0YSwgMHgwMTk4LCBudjA0X2dyYXBoX210aGRfYmluZF9zdXJmMmQpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDRhLCAweDAyZmMsIG52MDRfZ3JhcGhfbXRoZF9zZXRfb3BlcmF0aW9uKTsKKworCS8qIG52MDEgaW1hZ2VibGl0ICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwMWYsIEdSKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDAxZiwgMHgwMTg0LCBudjA0X2dyYXBoX210aGRfYmluZF9jaHJvbWEpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDFmLCAweDAxODgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2NsaXApOworCU5WT0JKX01USEQgKGRldiwgMHgwMDFmLCAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX252MDFfcGF0dCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwMWYsIDB4MDE5MCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfcm9wKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDAxZiwgMHgwMTk0LCBudjA0X2dyYXBoX210aGRfYmluZF9iZXRhMSk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwMWYsIDB4MDE5OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfc3VyZl9kc3QpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDFmLCAweDAxOWMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmZfc3JjKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDAxZiwgMHgwMmZjLCBudjA0X2dyYXBoX210aGRfc2V0X29wZXJhdGlvbik7CisKKwkvKiBudjA0IGltYWdlYmxpdCAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDVmLCBHUik7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNWYsIDB4MDE4NCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfY2hyb21hKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA1ZiwgMHgwMTg4LCBudjA0X2dyYXBoX210aGRfYmluZF9jbGlwKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA1ZiwgMHgwMThjLCBudjA0X2dyYXBoX210aGRfYmluZF9udjA0X3BhdHQpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDVmLCAweDAxOTAsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3JvcCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNWYsIDB4MDE5NCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTEpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDVmLCAweDAxOTgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGE0KTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA1ZiwgMHgwMTljLCBudjA0X2dyYXBoX210aGRfYmluZF9zdXJmMmQpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDVmLCAweDAyZmMsIG52MDRfZ3JhcGhfbXRoZF9zZXRfb3BlcmF0aW9uKTsKKworCS8qIG52MDQgaWlmYyAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDYwLCBHUik7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNjAsIDB4MDE4OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfY2hyb21hKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA2MCwgMHgwMThjLCBudjA0X2dyYXBoX210aGRfYmluZF9jbGlwKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA2MCwgMHgwMTkwLCBudjA0X2dyYXBoX210aGRfYmluZF9udjA0X3BhdHQpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDYwLCAweDAxOTQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3JvcCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNjAsIDB4MDE5OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTEpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDYwLCAweDAxOWMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGE0KTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA2MCwgMHgwMWEwLCBudjA0X2dyYXBoX210aGRfYmluZF9zdXJmMmRfc3d6c3VyZik7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNjAsIDB4MDNlNCwgbnYwNF9ncmFwaF9tdGhkX3NldF9vcGVyYXRpb24pOworCisJLyogbnYwNSBpaWZjICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNjQsIEdSKTsKKworCS8qIG52MDEgaWZjICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwMjEsIEdSKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDAyMSwgMHgwMTg0LCBudjA0X2dyYXBoX210aGRfYmluZF9jaHJvbWEpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDIxLCAweDAxODgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2NsaXApOworCU5WT0JKX01USEQgKGRldiwgMHgwMDIxLCAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX252MDFfcGF0dCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwMjEsIDB4MDE5MCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfcm9wKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDAyMSwgMHgwMTk0LCBudjA0X2dyYXBoX210aGRfYmluZF9iZXRhMSk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwMjEsIDB4MDE5OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfc3VyZl9kc3QpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDIxLCAweDAyZmMsIG52MDRfZ3JhcGhfbXRoZF9zZXRfb3BlcmF0aW9uKTsKKworCS8qIG52MDQgaWZjICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNjEsIEdSKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA2MSwgMHgwMTg0LCBudjA0X2dyYXBoX210aGRfYmluZF9jaHJvbWEpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDYxLCAweDAxODgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2NsaXApOworCU5WT0JKX01USEQgKGRldiwgMHgwMDYxLCAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX252MDRfcGF0dCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNjEsIDB4MDE5MCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfcm9wKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA2MSwgMHgwMTk0LCBudjA0X2dyYXBoX210aGRfYmluZF9iZXRhMSk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNjEsIDB4MDE5OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTQpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDYxLCAweDAxOWMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmYyZCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNjEsIDB4MDJmYywgbnYwNF9ncmFwaF9tdGhkX3NldF9vcGVyYXRpb24pOworCisJLyogbnYwNSBpZmMgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA2NSwgR1IpOworCisJLyogbnYwMyBzaWZjICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwMzYsIEdSKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDAzNiwgMHgwMTg0LCBudjA0X2dyYXBoX210aGRfYmluZF9jaHJvbWEpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDM2LCAweDAxODgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX252MDFfcGF0dCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwMzYsIDB4MDE4YywgbnYwNF9ncmFwaF9tdGhkX2JpbmRfcm9wKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDAzNiwgMHgwMTkwLCBudjA0X2dyYXBoX210aGRfYmluZF9iZXRhMSk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwMzYsIDB4MDE5NCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfc3VyZl9kc3QpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDM2LCAweDAyZmMsIG52MDRfZ3JhcGhfbXRoZF9zZXRfb3BlcmF0aW9uKTsKKworCS8qIG52MDQgc2lmYyAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDc2LCBHUik7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNzYsIDB4MDE4NCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfY2hyb21hKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA3NiwgMHgwMTg4LCBudjA0X2dyYXBoX210aGRfYmluZF9udjA0X3BhdHQpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDc2LCAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3JvcCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNzYsIDB4MDE5MCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTEpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDc2LCAweDAxOTQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGE0KTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA3NiwgMHgwMTk4LCBudjA0X2dyYXBoX210aGRfYmluZF9zdXJmMmQpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDc2LCAweDAyZmMsIG52MDRfZ3JhcGhfbXRoZF9zZXRfb3BlcmF0aW9uKTsKKworCS8qIG52MDUgc2lmYyAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDY2LCBHUik7CisKKwkvKiBudjAzIHNpZm0gKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDAzNywgR1IpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDM3LCAweDAxODgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX252MDFfcGF0dCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwMzcsIDB4MDE4YywgbnYwNF9ncmFwaF9tdGhkX2JpbmRfcm9wKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDAzNywgMHgwMTkwLCBudjA0X2dyYXBoX210aGRfYmluZF9iZXRhMSk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwMzcsIDB4MDE5NCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfc3VyZl9kc3QpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDM3LCAweDAzMDQsIG52MDRfZ3JhcGhfbXRoZF9zZXRfb3BlcmF0aW9uKTsKKworCS8qIG52MDQgc2lmbSAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDc3LCBHUik7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNzcsIDB4MDE4OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfbnYwNF9wYXR0KTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA3NywgMHgwMThjLCBudjA0X2dyYXBoX210aGRfYmluZF9yb3ApOworCU5WT0JKX01USEQgKGRldiwgMHgwMDc3LCAweDAxOTAsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGExKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA3NywgMHgwMTk0LCBudjA0X2dyYXBoX210aGRfYmluZF9iZXRhNCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNzcsIDB4MDE5OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfc3VyZjJkX3N3enN1cmYpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDc3LCAweDAzMDQsIG52MDRfZ3JhcGhfbXRoZF9zZXRfb3BlcmF0aW9uKTsKKworCS8qIG51bGwgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDAzMCwgR1IpOworCisJLyogc3VyZjJkICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNDIsIEdSKTsKKworCS8qIHJvcCAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDQzLCBHUik7CisKKwkvKiBiZXRhMSAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDEyLCBHUik7CisKKwkvKiBiZXRhNCAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDcyLCBHUik7CisKKwkvKiBjbGlwcmVjdCAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDE5LCBHUik7CisKKwkvKiBudjAxIHBhdHRlcm4gKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDAxOCwgR1IpOworCisJLyogbnYwNCBwYXR0ZXJuICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNDQsIEdSKTsKKworCS8qIHN3enN1cmYgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA1MiwgR1IpOworCisJLyogc3VyZjNkICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNTMsIEdSKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA1MywgMHgwMmY4LCBudjA0X2dyYXBoX210aGRfc3VyZjNkX2NsaXBfaCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNTMsIDB4MDJmYywgbnYwNF9ncmFwaF9tdGhkX3N1cmYzZF9jbGlwX3YpOworCisJLyogbnYwMyB0ZXhfdHJpICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNDgsIEdSKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA0OCwgMHgwMTg4LCBudjA0X2dyYXBoX210aGRfYmluZF9jbGlwKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA0OCwgMHgwMThjLCBudjA0X2dyYXBoX210aGRfYmluZF9zdXJmX2NvbG9yKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA0OCwgMHgwMTkwLCBudjA0X2dyYXBoX210aGRfYmluZF9zdXJmX3pldGEpOworCisJLyogdGV4X3RyaSAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDU0LCBHUik7CisKKwkvKiBtdWx0aXRleF90cmkgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA1NSwgR1IpOworCisJLyogbnYwMSBjaHJvbWEgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDAxNywgR1IpOworCisJLyogbnYwNCBjaHJvbWEgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA1NywgR1IpOworCisJLyogc3VyZl9kc3QgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA1OCwgR1IpOworCisJLyogc3VyZl9zcmMgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA1OSwgR1IpOworCisJLyogc3VyZl9jb2xvciAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDVhLCBHUik7CisKKwkvKiBzdXJmX3pldGEgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA1YiwgR1IpOworCisJLyogbnYwMSBsaW5lICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwMWMsIEdSKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDAxYywgMHgwMTg0LCBudjA0X2dyYXBoX210aGRfYmluZF9jbGlwKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDAxYywgMHgwMTg4LCBudjA0X2dyYXBoX210aGRfYmluZF9udjAxX3BhdHQpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDFjLCAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3JvcCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwMWMsIDB4MDE5MCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTEpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDFjLCAweDAxOTQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmZfZHN0KTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDAxYywgMHgwMmZjLCBudjA0X2dyYXBoX210aGRfc2V0X29wZXJhdGlvbik7CisKKwkvKiBudjA0IGxpbmUgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA1YywgR1IpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDVjLCAweDAxODQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2NsaXApOworCU5WT0JKX01USEQgKGRldiwgMHgwMDVjLCAweDAxODgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX252MDRfcGF0dCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNWMsIDB4MDE4YywgbnYwNF9ncmFwaF9tdGhkX2JpbmRfcm9wKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA1YywgMHgwMTkwLCBudjA0X2dyYXBoX210aGRfYmluZF9iZXRhMSk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNWMsIDB4MDE5NCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTQpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDVjLCAweDAxOTgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmYyZCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNWMsIDB4MDJmYywgbnYwNF9ncmFwaF9tdGhkX3NldF9vcGVyYXRpb24pOworCisJLyogbnYwMSB0cmkgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDAxZCwgR1IpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDFkLCAweDAxODQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2NsaXApOworCU5WT0JKX01USEQgKGRldiwgMHgwMDFkLCAweDAxODgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX252MDFfcGF0dCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwMWQsIDB4MDE4YywgbnYwNF9ncmFwaF9tdGhkX2JpbmRfcm9wKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDAxZCwgMHgwMTkwLCBudjA0X2dyYXBoX210aGRfYmluZF9iZXRhMSk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwMWQsIDB4MDE5NCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfc3VyZl9kc3QpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDFkLCAweDAyZmMsIG52MDRfZ3JhcGhfbXRoZF9zZXRfb3BlcmF0aW9uKTsKKworCS8qIG52MDQgdHJpICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNWQsIEdSKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA1ZCwgMHgwMTg0LCBudjA0X2dyYXBoX210aGRfYmluZF9jbGlwKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA1ZCwgMHgwMTg4LCBudjA0X2dyYXBoX210aGRfYmluZF9udjA0X3BhdHQpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDVkLCAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3JvcCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNWQsIDB4MDE5MCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTEpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDVkLCAweDAxOTQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGE0KTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA1ZCwgMHgwMTk4LCBudjA0X2dyYXBoX210aGRfYmluZF9zdXJmMmQpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDVkLCAweDAyZmMsIG52MDRfZ3JhcGhfbXRoZF9zZXRfb3BlcmF0aW9uKTsKKworCS8qIG52MDEgcmVjdCAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDFlLCBHUik7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwMWUsIDB4MDE4NCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfY2xpcCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwMWUsIDB4MDE4OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfbnYwMV9wYXR0KTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDAxZSwgMHgwMThjLCBudjA0X2dyYXBoX210aGRfYmluZF9yb3ApOworCU5WT0JKX01USEQgKGRldiwgMHgwMDFlLCAweDAxOTAsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGExKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDAxZSwgMHgwMTk0LCBudjA0X2dyYXBoX210aGRfYmluZF9zdXJmX2RzdCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwMWUsIDB4MDJmYywgbnYwNF9ncmFwaF9tdGhkX3NldF9vcGVyYXRpb24pOworCisJLyogbnYwNCByZWN0ICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNWUsIEdSKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA1ZSwgMHgwMTg0LCBudjA0X2dyYXBoX210aGRfYmluZF9jbGlwKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA1ZSwgMHgwMTg4LCBudjA0X2dyYXBoX210aGRfYmluZF9udjA0X3BhdHQpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDVlLCAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3JvcCk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDAwNWUsIDB4MDE5MCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTEpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDVlLCAweDAxOTQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGE0KTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4MDA1ZSwgMHgwMTk4LCBudjA0X2dyYXBoX210aGRfYmluZF9zdXJmMmQpOworCU5WT0JKX01USEQgKGRldiwgMHgwMDVlLCAweDAyZmMsIG52MDRfZ3JhcGhfbXRoZF9zZXRfb3BlcmF0aW9uKTsKKworCS8qIG52c3cgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4NTA2ZSwgU1cpOworCU5WT0JKX01USEQgKGRldiwgMHg1MDZlLCAweDAxNTAsIG52MDRfZ3JhcGhfbXRoZF9zZXRfcmVmKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4NTA2ZSwgMHgwNTAwLCBudjA0X2dyYXBoX210aGRfcGFnZV9mbGlwKTsKKworCWRldl9wcml2LT5lbmdpbmUuZ3JhcGgucmVnaXN0ZXJlZCA9IHRydWU7CisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgc3RydWN0IG5vdXZlYXVfYml0ZmllbGQgbnYwNF9ncmFwaF9pbnRyW10gPSB7CisJeyBOVl9QR1JBUEhfSU5UUl9OT1RJRlksICJOT1RJRlkiIH0sCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X21ldGhvZCBudjA0X2dyYXBoX210aGRzX252MDNfZ2RpcmVjdFtdID0gewotCXsgMHgwMTg0LCBudjA0X2dyYXBoX210aGRfYmluZF9udjAxX3BhdHQgfSwKLQl7IDB4MDE4OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfcm9wIH0sCi0JeyAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGExIH0sCi0JeyAweDAxOTAsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmZfZHN0IH0sCi0JeyAweDAyZmMsIG52MDRfZ3JhcGhfbXRoZF9zZXRfb3BlcmF0aW9uIH0sCi0Je30sCi19OwotCi1zdGF0aWMgc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9tZXRob2QgbnYwNF9ncmFwaF9tdGhkc19udjA0X2dkaXJlY3RbXSA9IHsKLQl7IDB4MDE4OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfbnYwNF9wYXR0IH0sCi0JeyAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3JvcCB9LAotCXsgMHgwMTkwLCBudjA0X2dyYXBoX210aGRfYmluZF9iZXRhMSB9LAotCXsgMHgwMTk0LCBudjA0X2dyYXBoX210aGRfYmluZF9iZXRhNCB9LAotCXsgMHgwMTk4LCBudjA0X2dyYXBoX210aGRfYmluZF9zdXJmMmQgfSwKLQl7IDB4MDJmYywgbnYwNF9ncmFwaF9tdGhkX3NldF9vcGVyYXRpb24gfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X21ldGhvZCBudjA0X2dyYXBoX210aGRzX252MDFfaW1hZ2VibGl0W10gPSB7Ci0JeyAweDAxODQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2Nocm9tYSB9LAotCXsgMHgwMTg4LCBudjA0X2dyYXBoX210aGRfYmluZF9jbGlwIH0sCi0JeyAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX252MDFfcGF0dCB9LAotCXsgMHgwMTkwLCBudjA0X2dyYXBoX210aGRfYmluZF9yb3AgfSwKLQl7IDB4MDE5NCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTEgfSwKLQl7IDB4MDE5OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfc3VyZl9kc3QgfSwKLQl7IDB4MDE5YywgbnYwNF9ncmFwaF9tdGhkX2JpbmRfc3VyZl9zcmMgfSwKLQl7IDB4MDJmYywgbnYwNF9ncmFwaF9tdGhkX3NldF9vcGVyYXRpb24gfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X21ldGhvZCBudjA0X2dyYXBoX210aGRzX252MDRfaW1hZ2VibGl0X2lmY1tdID0gewotCXsgMHgwMTg0LCBudjA0X2dyYXBoX210aGRfYmluZF9jaHJvbWEgfSwKLQl7IDB4MDE4OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfY2xpcCB9LAotCXsgMHgwMThjLCBudjA0X2dyYXBoX210aGRfYmluZF9udjA0X3BhdHQgfSwKLQl7IDB4MDE5MCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfcm9wIH0sCi0JeyAweDAxOTQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGExIH0sCi0JeyAweDAxOTgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGE0IH0sCi0JeyAweDAxOWMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmYyZCB9LAotCXsgMHgwMmZjLCBudjA0X2dyYXBoX210aGRfc2V0X29wZXJhdGlvbiB9LAotCXt9LAotfTsKLQotc3RhdGljIHN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfbWV0aG9kIG52MDRfZ3JhcGhfbXRoZHNfbnYwNF9paWZjW10gPSB7Ci0JeyAweDAxODgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2Nocm9tYSB9LAotCXsgMHgwMThjLCBudjA0X2dyYXBoX210aGRfYmluZF9jbGlwIH0sCi0JeyAweDAxOTAsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX252MDRfcGF0dCB9LAotCXsgMHgwMTk0LCBudjA0X2dyYXBoX210aGRfYmluZF9yb3AgfSwKLQl7IDB4MDE5OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTEgfSwKLQl7IDB4MDE5YywgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTQgfSwKLQl7IDB4MDFhMCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfc3VyZjJkX3N3enN1cmYgfSwKLQl7IDB4MDNlNCwgbnYwNF9ncmFwaF9tdGhkX3NldF9vcGVyYXRpb24gfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X21ldGhvZCBudjA0X2dyYXBoX210aGRzX252MDFfaWZjW10gPSB7Ci0JeyAweDAxODQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2Nocm9tYSB9LAotCXsgMHgwMTg4LCBudjA0X2dyYXBoX210aGRfYmluZF9jbGlwIH0sCi0JeyAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX252MDFfcGF0dCB9LAotCXsgMHgwMTkwLCBudjA0X2dyYXBoX210aGRfYmluZF9yb3AgfSwKLQl7IDB4MDE5NCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTEgfSwKLQl7IDB4MDE5OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfc3VyZl9kc3QgfSwKLQl7IDB4MDJmYywgbnYwNF9ncmFwaF9tdGhkX3NldF9vcGVyYXRpb24gfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X21ldGhvZCBudjA0X2dyYXBoX210aGRzX252MDNfc2lmY1tdID0gewotCXsgMHgwMTg0LCBudjA0X2dyYXBoX210aGRfYmluZF9jaHJvbWEgfSwKLQl7IDB4MDE4OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfbnYwMV9wYXR0IH0sCi0JeyAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3JvcCB9LAotCXsgMHgwMTkwLCBudjA0X2dyYXBoX210aGRfYmluZF9iZXRhMSB9LAotCXsgMHgwMTk0LCBudjA0X2dyYXBoX210aGRfYmluZF9zdXJmX2RzdCB9LAotCXsgMHgwMmZjLCBudjA0X2dyYXBoX210aGRfc2V0X29wZXJhdGlvbiB9LAotCXt9LAotfTsKLQotc3RhdGljIHN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfbWV0aG9kIG52MDRfZ3JhcGhfbXRoZHNfbnYwNF9zaWZjW10gPSB7Ci0JeyAweDAxODQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2Nocm9tYSB9LAotCXsgMHgwMTg4LCBudjA0X2dyYXBoX210aGRfYmluZF9udjA0X3BhdHQgfSwKLQl7IDB4MDE4YywgbnYwNF9ncmFwaF9tdGhkX2JpbmRfcm9wIH0sCi0JeyAweDAxOTAsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGExIH0sCi0JeyAweDAxOTQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGE0IH0sCi0JeyAweDAxOTgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmYyZCB9LAotCXsgMHgwMmZjLCBudjA0X2dyYXBoX210aGRfc2V0X29wZXJhdGlvbiB9LAotCXt9LAotfTsKLQotc3RhdGljIHN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfbWV0aG9kIG52MDRfZ3JhcGhfbXRoZHNfbnYwM19zaWZtW10gPSB7Ci0JeyAweDAxODgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX252MDFfcGF0dCB9LAotCXsgMHgwMThjLCBudjA0X2dyYXBoX210aGRfYmluZF9yb3AgfSwKLQl7IDB4MDE5MCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTEgfSwKLQl7IDB4MDE5NCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfc3VyZl9kc3QgfSwKLQl7IDB4MDMwNCwgbnYwNF9ncmFwaF9tdGhkX3NldF9vcGVyYXRpb24gfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X21ldGhvZCBudjA0X2dyYXBoX210aGRzX252MDRfc2lmbVtdID0gewotCXsgMHgwMTg4LCBudjA0X2dyYXBoX210aGRfYmluZF9udjA0X3BhdHQgfSwKLQl7IDB4MDE4YywgbnYwNF9ncmFwaF9tdGhkX2JpbmRfcm9wIH0sCi0JeyAweDAxOTAsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGExIH0sCi0JeyAweDAxOTQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2JldGE0IH0sCi0JeyAweDAxOTgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmYyZF9zd3pzdXJmIH0sCi0JeyAweDAzMDQsIG52MDRfZ3JhcGhfbXRoZF9zZXRfb3BlcmF0aW9uIH0sCi0Je30sCi19OwotCi1zdGF0aWMgc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9tZXRob2QgbnYwNF9ncmFwaF9tdGhkc19udjAxX3NoYXBlW10gPSB7Ci0JeyAweDAxODQsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX2NsaXAgfSwKLQl7IDB4MDE4OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfbnYwMV9wYXR0IH0sCi0JeyAweDAxOGMsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3JvcCB9LAotCXsgMHgwMTkwLCBudjA0X2dyYXBoX210aGRfYmluZF9iZXRhMSB9LAotCXsgMHgwMTk0LCBudjA0X2dyYXBoX210aGRfYmluZF9zdXJmX2RzdCB9LAotCXsgMHgwMmZjLCBudjA0X2dyYXBoX210aGRfc2V0X29wZXJhdGlvbiB9LAotCXt9LAotfTsKLQotc3RhdGljIHN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfbWV0aG9kIG52MDRfZ3JhcGhfbXRoZHNfbnYwNF9zaGFwZVtdID0gewotCXsgMHgwMTg0LCBudjA0X2dyYXBoX210aGRfYmluZF9jbGlwIH0sCi0JeyAweDAxODgsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX252MDRfcGF0dCB9LAotCXsgMHgwMThjLCBudjA0X2dyYXBoX210aGRfYmluZF9yb3AgfSwKLQl7IDB4MDE5MCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTEgfSwKLQl7IDB4MDE5NCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfYmV0YTQgfSwKLQl7IDB4MDE5OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfc3VyZjJkIH0sCi0JeyAweDAyZmMsIG52MDRfZ3JhcGhfbXRoZF9zZXRfb3BlcmF0aW9uIH0sCi0Je30sCi19OwotCi1zdGF0aWMgc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9tZXRob2QgbnYwNF9ncmFwaF9tdGhkc19udjAzX3RleF90cmlbXSA9IHsKLQl7IDB4MDE4OCwgbnYwNF9ncmFwaF9tdGhkX2JpbmRfY2xpcCB9LAotCXsgMHgwMThjLCBudjA0X2dyYXBoX210aGRfYmluZF9zdXJmX2NvbG9yIH0sCi0JeyAweDAxOTAsIG52MDRfZ3JhcGhfbXRoZF9iaW5kX3N1cmZfemV0YSB9LAotCXt9LAotfTsKLQotc3RhdGljIHN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfbWV0aG9kIG52MDRfZ3JhcGhfbXRoZHNfc3VyZjNkW10gPSB7Ci0JeyAweDAyZjgsIG52MDRfZ3JhcGhfbXRoZF9zdXJmM2RfY2xpcF9oIH0sCi0JeyAweDAyZmMsIG52MDRfZ3JhcGhfbXRoZF9zdXJmM2RfY2xpcF92IH0sCi0Je30sCi19OwotCi1zdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X2NsYXNzIG52MDRfZ3JhcGhfZ3JjbGFzc1tdID0gewotCXsgMHgwMDM4LCBmYWxzZSwgTlVMTCB9LCAvKiBkdmQgc3VicGljdHVyZSAqLwotCXsgMHgwMDM5LCBmYWxzZSwgTlVMTCB9LCAvKiBtMm1mICovCi0JeyAweDAwNGIsIGZhbHNlLCBudjA0X2dyYXBoX210aGRzX252MDNfZ2RpcmVjdCB9LCAvKiBudjAzIGdkaXJlY3QgKi8KLQl7IDB4MDA0YSwgZmFsc2UsIG52MDRfZ3JhcGhfbXRoZHNfbnYwNF9nZGlyZWN0IH0sIC8qIG52MDQgZ2RpcmVjdCAqLwotCXsgMHgwMDFmLCBmYWxzZSwgbnYwNF9ncmFwaF9tdGhkc19udjAxX2ltYWdlYmxpdCB9LCAvKiBudjAxIGltYWdlYmxpdCAqLwotCXsgMHgwMDVmLCBmYWxzZSwgbnYwNF9ncmFwaF9tdGhkc19udjA0X2ltYWdlYmxpdF9pZmMgfSwgLyogbnYwNCBpbWFnZWJsaXQgKi8KLQl7IDB4MDA2MCwgZmFsc2UsIG52MDRfZ3JhcGhfbXRoZHNfbnYwNF9paWZjIH0sIC8qIG52MDQgaWlmYyAqLwotCXsgMHgwMDY0LCBmYWxzZSwgTlVMTCB9LCAvKiBudjA1IGlpZmMgKi8KLQl7IDB4MDAyMSwgZmFsc2UsIG52MDRfZ3JhcGhfbXRoZHNfbnYwMV9pZmMgfSwgLyogbnYwMSBpZmMgKi8KLQl7IDB4MDA2MSwgZmFsc2UsIG52MDRfZ3JhcGhfbXRoZHNfbnYwNF9pbWFnZWJsaXRfaWZjIH0sIC8qIG52MDQgaWZjICovCi0JeyAweDAwNjUsIGZhbHNlLCBOVUxMIH0sIC8qIG52MDUgaWZjICovCi0JeyAweDAwMzYsIGZhbHNlLCBudjA0X2dyYXBoX210aGRzX252MDNfc2lmYyB9LCAvKiBudjAzIHNpZmMgKi8KLQl7IDB4MDA3NiwgZmFsc2UsIG52MDRfZ3JhcGhfbXRoZHNfbnYwNF9zaWZjIH0sIC8qIG52MDQgc2lmYyAqLwotCXsgMHgwMDY2LCBmYWxzZSwgTlVMTCB9LCAvKiBudjA1IHNpZmMgKi8KLQl7IDB4MDAzNywgZmFsc2UsIG52MDRfZ3JhcGhfbXRoZHNfbnYwM19zaWZtIH0sIC8qIG52MDMgc2lmbSAqLwotCXsgMHgwMDc3LCBmYWxzZSwgbnYwNF9ncmFwaF9tdGhkc19udjA0X3NpZm0gfSwgLyogbnYwNCBzaWZtICovCi0JeyAweDAwMzAsIGZhbHNlLCBOVUxMIH0sIC8qIG51bGwgKi8KLQl7IDB4MDA0MiwgZmFsc2UsIE5VTEwgfSwgLyogc3VyZjJkICovCi0JeyAweDAwNDMsIGZhbHNlLCBOVUxMIH0sIC8qIHJvcCAqLwotCXsgMHgwMDEyLCBmYWxzZSwgTlVMTCB9LCAvKiBiZXRhMSAqLwotCXsgMHgwMDcyLCBmYWxzZSwgTlVMTCB9LCAvKiBiZXRhNCAqLwotCXsgMHgwMDE5LCBmYWxzZSwgTlVMTCB9LCAvKiBjbGlwcmVjdCAqLwotCXsgMHgwMDE4LCBmYWxzZSwgTlVMTCB9LCAvKiBudjAxIHBhdHRlcm4gKi8KLQl7IDB4MDA0NCwgZmFsc2UsIE5VTEwgfSwgLyogbnYwNCBwYXR0ZXJuICovCi0JeyAweDAwNTIsIGZhbHNlLCBOVUxMIH0sIC8qIHN3enN1cmYgKi8KLQl7IDB4MDA1MywgZmFsc2UsIG52MDRfZ3JhcGhfbXRoZHNfc3VyZjNkIH0sIC8qIHN1cmYzZCAqLwotCXsgMHgwMDQ4LCBmYWxzZSwgbnYwNF9ncmFwaF9tdGhkc19udjAzX3RleF90cmkgfSwgLyogbnYwMyB0ZXhfdHJpICovCi0JeyAweDAwNTQsIGZhbHNlLCBOVUxMIH0sIC8qIHRleF90cmkgKi8KLQl7IDB4MDA1NSwgZmFsc2UsIE5VTEwgfSwgLyogbXVsdGl0ZXhfdHJpICovCi0JeyAweDAwMTcsIGZhbHNlLCBOVUxMIH0sIC8qIG52MDEgY2hyb21hICovCi0JeyAweDAwNTcsIGZhbHNlLCBOVUxMIH0sIC8qIG52MDQgY2hyb21hICovCi0JeyAweDAwNTgsIGZhbHNlLCBOVUxMIH0sIC8qIHN1cmZfZHN0ICovCi0JeyAweDAwNTksIGZhbHNlLCBOVUxMIH0sIC8qIHN1cmZfc3JjICovCi0JeyAweDAwNWEsIGZhbHNlLCBOVUxMIH0sIC8qIHN1cmZfY29sb3IgKi8KLQl7IDB4MDA1YiwgZmFsc2UsIE5VTEwgfSwgLyogc3VyZl96ZXRhICovCi0JeyAweDAwMWMsIGZhbHNlLCBudjA0X2dyYXBoX210aGRzX252MDFfc2hhcGUgfSwgLyogbnYwMSBsaW5lICovCi0JeyAweDAwNWMsIGZhbHNlLCBudjA0X2dyYXBoX210aGRzX252MDRfc2hhcGUgfSwgLyogbnYwNCBsaW5lICovCi0JeyAweDAwMWQsIGZhbHNlLCBudjA0X2dyYXBoX210aGRzX252MDFfc2hhcGUgfSwgLyogbnYwMSB0cmkgKi8KLQl7IDB4MDA1ZCwgZmFsc2UsIG52MDRfZ3JhcGhfbXRoZHNfbnYwNF9zaGFwZSB9LCAvKiBudjA0IHRyaSAqLwotCXsgMHgwMDFlLCBmYWxzZSwgbnYwNF9ncmFwaF9tdGhkc19udjAxX3NoYXBlIH0sIC8qIG52MDEgcmVjdCAqLwotCXsgMHgwMDVlLCBmYWxzZSwgbnYwNF9ncmFwaF9tdGhkc19udjA0X3NoYXBlIH0sIC8qIG52MDQgcmVjdCAqLwotCXsgMHg1MDZlLCB0cnVlLCBudjA0X2dyYXBoX210aGRzX3N3IH0sCitzdGF0aWMgc3RydWN0IG5vdXZlYXVfYml0ZmllbGQgbnYwNF9ncmFwaF9uc3RhdHVzW10gPQoreworCXsgTlYwNF9QR1JBUEhfTlNUQVRVU19TVEFURV9JTl9VU0UsICAgICAgICJTVEFURV9JTl9VU0UiIH0sCisJeyBOVjA0X1BHUkFQSF9OU1RBVFVTX0lOVkFMSURfU1RBVEUsICAgICAgIklOVkFMSURfU1RBVEUiIH0sCisJeyBOVjA0X1BHUkFQSF9OU1RBVFVTX0JBRF9BUkdVTUVOVCwgICAgICAgIkJBRF9BUkdVTUVOVCIgfSwKKwl7IE5WMDRfUEdSQVBIX05TVEFUVVNfUFJPVEVDVElPTl9GQVVMVCwgICAiUFJPVEVDVElPTl9GQVVMVCIgfSwKIAl7fQogfTsKIAorc3RydWN0IG5vdXZlYXVfYml0ZmllbGQgbnYwNF9ncmFwaF9uc291cmNlW10gPQoreworCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9OT1RJRklDQVRJT04sICAgICAgICJOT1RJRklDQVRJT04iIH0sCisJeyBOVjAzX1BHUkFQSF9OU09VUkNFX0RBVEFfRVJST1IsICAgICAgICAgIkRBVEFfRVJST1IiIH0sCisJeyBOVjAzX1BHUkFQSF9OU09VUkNFX1BST1RFQ1RJT05fRVJST1IsICAgIlBST1RFQ1RJT05fRVJST1IiIH0sCisJeyBOVjAzX1BHUkFQSF9OU09VUkNFX1JBTkdFX0VYQ0VQVElPTiwgICAgIlJBTkdFX0VYQ0VQVElPTiIgfSwKKwl7IE5WMDNfUEdSQVBIX05TT1VSQ0VfTElNSVRfQ09MT1IsICAgICAgICAiTElNSVRfQ09MT1IiIH0sCisJeyBOVjAzX1BHUkFQSF9OU09VUkNFX0xJTUlUX1pFVEEsICAgICAgICAgIkxJTUlUX1pFVEEiIH0sCisJeyBOVjAzX1BHUkFQSF9OU09VUkNFX0lMTEVHQUxfTVRIRCwgICAgICAgIklMTEVHQUxfTVRIRCIgfSwKKwl7IE5WMDNfUEdSQVBIX05TT1VSQ0VfRE1BX1JfUFJPVEVDVElPTiwgICAiRE1BX1JfUFJPVEVDVElPTiIgfSwKKwl7IE5WMDNfUEdSQVBIX05TT1VSQ0VfRE1BX1dfUFJPVEVDVElPTiwgICAiRE1BX1dfUFJPVEVDVElPTiIgfSwKKwl7IE5WMDNfUEdSQVBIX05TT1VSQ0VfRk9STUFUX0VYQ0VQVElPTiwgICAiRk9STUFUX0VYQ0VQVElPTiIgfSwKKwl7IE5WMDNfUEdSQVBIX05TT1VSQ0VfUEFUQ0hfRVhDRVBUSU9OLCAgICAiUEFUQ0hfRVhDRVBUSU9OIiB9LAorCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9TVEFURV9JTlZBTElELCAgICAgICJTVEFURV9JTlZBTElEIiB9LAorCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9ET1VCTEVfTk9USUZZLCAgICAgICJET1VCTEVfTk9USUZZIiB9LAorCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9OT1RJRllfSU5fVVNFLCAgICAgICJOT1RJRllfSU5fVVNFIiB9LAorCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9NRVRIT0RfQ05ULCAgICAgICAgICJNRVRIT0RfQ05UIiB9LAorCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9CRlJfTk9USUZJQ0FUSU9OLCAgICJCRlJfTk9USUZJQ0FUSU9OIiB9LAorCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9ETUFfVlRYX1BST1RFQ1RJT04sICJETUFfVlRYX1BST1RFQ1RJT04iIH0sCisJeyBOVjAzX1BHUkFQSF9OU09VUkNFX0RNQV9XSURUSF9BLCAgICAgICAgIkRNQV9XSURUSF9BIiB9LAorCXsgTlYwM19QR1JBUEhfTlNPVVJDRV9ETUFfV0lEVEhfQiwgICAgICAgICJETUFfV0lEVEhfQiIgfSwKKwl7fQorfTsKKworc3RhdGljIHZvaWQKK252MDRfZ3JhcGhfaXNyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJdTMyIHN0YXQ7CisKKwl3aGlsZSAoKHN0YXQgPSBudl9yZDMyKGRldiwgTlYwM19QR1JBUEhfSU5UUikpKSB7CisJCXUzMiBuc291cmNlID0gbnZfcmQzMihkZXYsIE5WMDNfUEdSQVBIX05TT1VSQ0UpOworCQl1MzIgbnN0YXR1cyA9IG52X3JkMzIoZGV2LCBOVjAzX1BHUkFQSF9OU1RBVFVTKTsKKwkJdTMyIGFkZHIgPSBudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfVFJBUFBFRF9BRERSKTsKKwkJdTMyIGNoaWQgPSAoYWRkciAmIDB4MGYwMDAwMDApID4+IDI0OworCQl1MzIgc3ViYyA9IChhZGRyICYgMHgwMDAwZTAwMCkgPj4gMTM7CisJCXUzMiBtdGhkID0gKGFkZHIgJiAweDAwMDAxZmZjKTsKKwkJdTMyIGRhdGEgPSBudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfVFJBUFBFRF9EQVRBKTsKKwkJdTMyIGNsYXNzID0gbnZfcmQzMihkZXYsIDB4NDAwMTgwICsgc3ViYyAqIDQpICYgMHhmZjsKKwkJdTMyIHNob3cgPSBzdGF0OworCisJCWlmIChzdGF0ICYgTlZfUEdSQVBIX0lOVFJfTk9USUZZKSB7CisJCQlpZiAobnNvdXJjZSAmIE5WMDNfUEdSQVBIX05TT1VSQ0VfSUxMRUdBTF9NVEhEKSB7CisJCQkJaWYgKCFub3V2ZWF1X2dwdW9ial9tdGhkX2NhbGwyKGRldiwgY2hpZCwgY2xhc3MsIG10aGQsIGRhdGEpKQorCQkJCQlzaG93ICY9IH5OVl9QR1JBUEhfSU5UUl9OT1RJRlk7CisJCQl9CisJCX0KKworCQlpZiAoc3RhdCAmIE5WX1BHUkFQSF9JTlRSX0NPTlRFWFRfU1dJVENIKSB7CisJCQludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwgTlZfUEdSQVBIX0lOVFJfQ09OVEVYVF9TV0lUQ0gpOworCQkJc3RhdCAmPSB+TlZfUEdSQVBIX0lOVFJfQ09OVEVYVF9TV0lUQ0g7CisJCQlzaG93ICY9IH5OVl9QR1JBUEhfSU5UUl9DT05URVhUX1NXSVRDSDsKKwkJCW52MDRfZ3JhcGhfY29udGV4dF9zd2l0Y2goZGV2KTsKKwkJfQorCisJCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSLCBzdGF0KTsKKwkJbnZfd3IzMihkZXYsIE5WMDRfUEdSQVBIX0ZJRk8sIDB4MDAwMDAwMDEpOworCisJCWlmIChzaG93ICYmIG5vdXZlYXVfcmF0ZWxpbWl0KCkpIHsKKwkJCU5WX0lORk8oZGV2LCAiUEdSQVBIIC0iKTsKKwkJCW5vdXZlYXVfYml0ZmllbGRfcHJpbnQobnYwNF9ncmFwaF9pbnRyLCBzaG93KTsKKwkJCXByaW50aygiIG5zb3VyY2U6Iik7CisJCQlub3V2ZWF1X2JpdGZpZWxkX3ByaW50KG52MDRfZ3JhcGhfbnNvdXJjZSwgbnNvdXJjZSk7CisJCQlwcmludGsoIiBuc3RhdHVzOiIpOworCQkJbm91dmVhdV9iaXRmaWVsZF9wcmludChudjA0X2dyYXBoX25zdGF0dXMsIG5zdGF0dXMpOworCQkJcHJpbnRrKCJcbiIpOworCQkJTlZfSU5GTyhkZXYsICJQR1JBUEggLSBjaCAlZC8lZCBjbGFzcyAweCUwNHggIgorCQkJCSAgICAgIm10aGQgMHglMDR4IGRhdGEgMHglMDh4XG4iLAorCQkJCWNoaWQsIHN1YmMsIGNsYXNzLCBtdGhkLCBkYXRhKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfaW5zdG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9pbnN0bWVtLmMKaW5kZXggMGI1YWUyOS4uYjhlM2VkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9pbnN0bWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9pbnN0bWVtLmMKQEAgLTk4LDM1ICs5OCw2IEBACiB9CiAKIGludAotbnYwNF9pbnN0bWVtX3BvcHVsYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqLAotCQkgICAgICB1aW50MzJfdCAqc3opCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLW52MDRfaW5zdG1lbV9jbGVhcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmdwdW9iaikKLXsKLX0KLQotaW50Ci1udjA0X2luc3RtZW1fYmluZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmdwdW9iaikKLXsKLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1udjA0X2luc3RtZW1fdW5iaW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqKQotewotCXJldHVybiAwOwotfQotCi12b2lkCi1udjA0X2luc3RtZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLX0KLQotaW50CiBudjA0X2luc3RtZW1fc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXJldHVybiAwOwpAQCAtMTM3LDMgKzEwOCw1NiBAQAogewogfQogCitpbnQKK252MDRfaW5zdG1lbV9nZXQoc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpncHVvYmosIHUzMiBzaXplLCB1MzIgYWxpZ24pCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3B1b2JqLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fbW1fbm9kZSAqcmFtaW4gPSBOVUxMOworCisJZG8geworCQlpZiAoZHJtX21tX3ByZV9nZXQoJmRldl9wcml2LT5yYW1pbl9oZWFwKSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXNwaW5fbG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCQlyYW1pbiA9IGRybV9tbV9zZWFyY2hfZnJlZSgmZGV2X3ByaXYtPnJhbWluX2hlYXAsIHNpemUsIGFsaWduLCAwKTsKKwkJaWYgKHJhbWluID09IE5VTEwpIHsKKwkJCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXJhbWluID0gZHJtX21tX2dldF9ibG9ja19hdG9taWMocmFtaW4sIHNpemUsIGFsaWduKTsKKwkJc3Bpbl91bmxvY2soJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKKwl9IHdoaWxlIChyYW1pbiA9PSBOVUxMKTsKKworCWdwdW9iai0+bm9kZSAgPSByYW1pbjsKKwlncHVvYmotPnZpbnN0ID0gcmFtaW4tPnN0YXJ0OworCXJldHVybiAwOworfQorCit2b2lkCitudjA0X2luc3RtZW1fcHV0KHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqKQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGdwdW9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCXNwaW5fbG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCWRybV9tbV9wdXRfYmxvY2soZ3B1b2JqLT5ub2RlKTsKKwlncHVvYmotPm5vZGUgPSBOVUxMOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7Cit9CisKK2ludAorbnYwNF9pbnN0bWVtX21hcChzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmdwdW9iaikKK3sKKwlncHVvYmotPnBpbnN0ID0gZ3B1b2JqLT52aW5zdDsKKwlyZXR1cm4gMDsKK30KKwordm9pZAorbnYwNF9pbnN0bWVtX3VubWFwKHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqKQoreworfQorCit2b2lkCitudjA0X2luc3RtZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTBfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTBfZmIuYwppbmRleCBjYzVjZGE0Li5mNzgxODFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjEwX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxMF9mYi5jCkBAIC0zLDIzICszLDEwOSBAQAogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCiAjaW5jbHVkZSAibm91dmVhdV9kcm0uaCIKIAotdm9pZAotbnYxMF9mYl9zZXRfcmVnaW9uX3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSwgdWludDMyX3QgYWRkciwKLQkJCSAgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgcGl0Y2gpCitzdGF0aWMgc3RydWN0IGRybV9tbV9ub2RlICoKK252MjBfZmJfYWxsb2NfdGFnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IHNpemUpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1aW50MzJfdCBsaW1pdCA9IG1heCgxdSwgYWRkciArIHNpemUpIC0gMTsKKwlzdHJ1Y3Qgbm91dmVhdV9mYl9lbmdpbmUgKnBmYiA9ICZkZXZfcHJpdi0+ZW5naW5lLmZiOworCXN0cnVjdCBkcm1fbW1fbm9kZSAqbWVtOworCWludCByZXQ7CiAKLQlpZiAocGl0Y2gpIHsKLQkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfMjApCi0JCQlhZGRyIHw9IDE7Ci0JCWVsc2UKLQkJCWFkZHIgfD0gMSA8PCAzMTsKKwlyZXQgPSBkcm1fbW1fcHJlX2dldCgmcGZiLT50YWdfaGVhcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT50aWxlLmxvY2spOworCW1lbSA9IGRybV9tbV9zZWFyY2hfZnJlZSgmcGZiLT50YWdfaGVhcCwgc2l6ZSwgMCwgMCk7CisJaWYgKG1lbSkKKwkJbWVtID0gZHJtX21tX2dldF9ibG9ja19hdG9taWMobWVtLCBzaXplLCAwKTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnRpbGUubG9jayk7CisKKwlyZXR1cm4gbWVtOworfQorCitzdGF0aWMgdm9pZAorbnYyMF9mYl9mcmVlX3RhZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21tX25vZGUgKm1lbSkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+dGlsZS5sb2NrKTsKKwlkcm1fbW1fcHV0X2Jsb2NrKG1lbSk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT50aWxlLmxvY2spOworfQorCit2b2lkCitudjEwX2ZiX2luaXRfdGlsZV9yZWdpb24oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGksIHVpbnQzMl90IGFkZHIsCisJCQkgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgcGl0Y2gsIHVpbnQzMl90IGZsYWdzKQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfdGlsZV9yZWcgKnRpbGUgPSAmZGV2X3ByaXYtPnRpbGUucmVnW2ldOworCWludCBicHAgPSAoZmxhZ3MgJiBOT1VWRUFVX0dFTV9USUxFXzMyQlBQID8gMzIgOiAxNik7CisKKwl0aWxlLT5hZGRyID0gYWRkcjsKKwl0aWxlLT5saW1pdCA9IG1heCgxdSwgYWRkciArIHNpemUpIC0gMTsKKwl0aWxlLT5waXRjaCA9IHBpdGNoOworCisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfMjApIHsKKwkJaWYgKGZsYWdzICYgTk9VVkVBVV9HRU1fVElMRV9aRVRBKSB7CisJCQkvKgorCQkJICogQWxsb2NhdGUgc29tZSBvZiB0aGUgb24tZGllIHRhZyBtZW1vcnksCisJCQkgKiB1c2VkIHRvIHN0b3JlIFogY29tcHJlc3Npb24gbWV0YS1kYXRhIChtb3N0CisJCQkgKiBsaWtlbHkganVzdCBhIGJpdG1hcCBkZXRlcm1pbmluZyBpZiBhIGdpdmVuCisJCQkgKiB0aWxlIGlzIGNvbXByZXNzZWQgb3Igbm90KS4KKwkJCSAqLworCQkJdGlsZS0+dGFnX21lbSA9IG52MjBfZmJfYWxsb2NfdGFnKGRldiwgc2l6ZSAvIDI1Nik7CisKKwkJCWlmICh0aWxlLT50YWdfbWVtKSB7CisJCQkJLyogRW5hYmxlIFogY29tcHJlc3Npb24gKi8KKwkJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHgyNSkKKwkJCQkJdGlsZS0+emNvbXAgPSB0aWxlLT50YWdfbWVtLT5zdGFydCB8CisJCQkJCQkoYnBwID09IDE2ID8KKwkJCQkJCSBOVjI1X1BGQl9aQ09NUF9NT0RFXzE2IDoKKwkJCQkJCSBOVjI1X1BGQl9aQ09NUF9NT0RFXzMyKTsKKwkJCQllbHNlCisJCQkJCXRpbGUtPnpjb21wID0gdGlsZS0+dGFnX21lbS0+c3RhcnQgfAorCQkJCQkJTlYyMF9QRkJfWkNPTVBfRU4gfAorCQkJCQkJKGJwcCA9PSAxNiA/IDAgOgorCQkJCQkJIE5WMjBfUEZCX1pDT01QX01PREVfMzIpOworCQkJfQorCisJCQl0aWxlLT5hZGRyIHw9IDM7CisJCX0gZWxzZSB7CisJCQl0aWxlLT5hZGRyIHw9IDE7CisJCX0KKworCX0gZWxzZSB7CisJCXRpbGUtPmFkZHIgfD0gMSA8PCAzMTsKKwl9Cit9CisKK3ZvaWQKK252MTBfZmJfZnJlZV90aWxlX3JlZ2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3RpbGVfcmVnICp0aWxlID0gJmRldl9wcml2LT50aWxlLnJlZ1tpXTsKKworCWlmICh0aWxlLT50YWdfbWVtKSB7CisJCW52MjBfZmJfZnJlZV90YWcoZGV2LCB0aWxlLT50YWdfbWVtKTsKKwkJdGlsZS0+dGFnX21lbSA9IE5VTEw7CiAJfQogCi0JbnZfd3IzMihkZXYsIE5WMTBfUEZCX1RMSU1JVChpKSwgbGltaXQpOwotCW52X3dyMzIoZGV2LCBOVjEwX1BGQl9UU0laRShpKSwgcGl0Y2gpOwotCW52X3dyMzIoZGV2LCBOVjEwX1BGQl9USUxFKGkpLCBhZGRyKTsKKwl0aWxlLT5hZGRyID0gdGlsZS0+bGltaXQgPSB0aWxlLT5waXRjaCA9IHRpbGUtPnpjb21wID0gMDsKK30KKwordm9pZAorbnYxMF9mYl9zZXRfdGlsZV9yZWdpb24oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGkpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqdGlsZSA9ICZkZXZfcHJpdi0+dGlsZS5yZWdbaV07CisKKwludl93cjMyKGRldiwgTlYxMF9QRkJfVExJTUlUKGkpLCB0aWxlLT5saW1pdCk7CisJbnZfd3IzMihkZXYsIE5WMTBfUEZCX1RTSVpFKGkpLCB0aWxlLT5waXRjaCk7CisJbnZfd3IzMihkZXYsIE5WMTBfUEZCX1RJTEUoaSksIHRpbGUtPmFkZHIpOworCisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfMjApCisJCW52X3dyMzIoZGV2LCBOVjIwX1BGQl9aQ09NUChpKSwgdGlsZS0+emNvbXApOwogfQogCiBpbnQKQEAgLTMxLDkgKzExNywxNCBAQAogCiAJcGZiLT5udW1fdGlsZXMgPSBOVjEwX1BGQl9USUxFX19TSVpFOwogCisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfMjApCisJCWRybV9tbV9pbml0KCZwZmItPnRhZ19oZWFwLCAwLAorCQkJICAgIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDI1ID8KKwkJCSAgICAgNjQgKiAxMDI0IDogMzIgKiAxMDI0KSk7CisKIAkvKiBUdXJuIGFsbCB0aGUgdGlsaW5nIHJlZ2lvbnMgb2ZmLiAqLwogCWZvciAoaSA9IDA7IGkgPCBwZmItPm51bV90aWxlczsgaSsrKQotCQlwZmItPnNldF9yZWdpb25fdGlsaW5nKGRldiwgaSwgMCwgMCwgMCk7CisJCXBmYi0+c2V0X3RpbGVfcmVnaW9uKGRldiwgaSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQxLDQgKzEzMiwxMyBAQAogdm9pZAogbnYxMF9mYl90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfZmJfZW5naW5lICpwZmIgPSAmZGV2X3ByaXYtPmVuZ2luZS5mYjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwZmItPm51bV90aWxlczsgaSsrKQorCQlwZmItPmZyZWVfdGlsZV9yZWdpb24oZGV2LCBpKTsKKworCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID09IE5WXzIwKQorCQlkcm1fbW1fdGFrZWRvd24oJnBmYi0+dGFnX2hlYXApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxMF9maWZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjEwX2ZpZm8uYwppbmRleCBmMWIwM2FkLi5kMmVjYmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjEwX2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjEwX2ZpZm8uYwpAQCAtNTMsNiArNTMsMTEgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJY2hhbi0+dXNlciA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMCkgKworCQkJICAgICBOVjAzX1VTRVIoY2hhbi0+aWQpLCBQQUdFX1NJWkUpOworCWlmICghY2hhbi0+dXNlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAkvKiBGaWxsIGVudHJpZXMgdGhhdCBhcmUgc2VlbiBmaWxsZWQgaW4gZHVtcHMgb2YgbnZpZGlhIGRyaXZlciBqdXN0CiAJICogYWZ0ZXIgY2hhbm5lbCdzIGlzIHB1dCBpbnRvIERNQSBtb2RlCiAJICovCkBAIC03MywxNyArNzgsNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkCi1udjEwX2ZpZm9fZGVzdHJveV9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKLQotCW52X3dyMzIoZGV2LCBOVjA0X1BGSUZPX01PREUsCi0JCQludl9yZDMyKGRldiwgTlYwNF9QRklGT19NT0RFKSAmIH4oMSA8PCBjaGFuLT5pZCkpOwotCi0Jbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZjaGFuLT5yYW1mYyk7Ci19Ci0KIHN0YXRpYyB2b2lkCiBudjEwX2ZpZm9fZG9fbG9hZF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjaGlkKQogewpAQCAtMjE5LDYgKzIxMyw3IEBACiBzdGF0aWMgdm9pZAogbnYxMF9maWZvX2luaXRfaW50cihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCW5vdXZlYXVfaXJxX3JlZ2lzdGVyKGRldiwgOCwgbnYwNF9maWZvX2lzcik7CiAJbnZfd3IzMihkZXYsIDB4MDAyMTAwLCAweGZmZmZmZmZmKTsKIAludl93cjMyKGRldiwgMHgwMDIxNDAsIDB4ZmZmZmZmZmYpOwogfQpAQCAtMjQxLDcgKzIzNiw3IEBACiAJcGZpZm8tPnJlYXNzaWduKGRldiwgdHJ1ZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPmVuZ2luZS5maWZvLmNoYW5uZWxzOyBpKyspIHsKLQkJaWYgKGRldl9wcml2LT5maWZvc1tpXSkgeworCQlpZiAoZGV2X3ByaXYtPmNoYW5uZWxzLnB0cltpXSkgewogCQkJdWludDMyX3QgbW9kZSA9IG52X3JkMzIoZGV2LCBOVjA0X1BGSUZPX01PREUpOwogCQkJbnZfd3IzMihkZXYsIE5WMDRfUEZJRk9fTU9ERSwgbW9kZSB8ICgxIDw8IGkpKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxMF9ncmFwaC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxMF9ncmFwaC5jCmluZGV4IDhlNjhjOTcuLjhjOTJlZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTBfZ3JhcGguYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjEwX2dyYXBoLmMKQEAgLTI2LDYgKzI2LDEwIEBACiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAibm91dmVhdV9kcm0uaCIKICNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgorI2luY2x1ZGUgIm5vdXZlYXVfdXRpbC5oIgorCitzdGF0aWMgaW50ICBudjEwX2dyYXBoX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICopOworc3RhdGljIHZvaWQgbnYxMF9ncmFwaF9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKik7CiAKICNkZWZpbmUgTlYxMF9GSUZPX05VTUJFUiAzMgogCkBAIC03ODYsMTUgKzc5MCwxMyBAQAogCXJldHVybiAwOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogbnYxMF9ncmFwaF9jb250ZXh0X3N3aXRjaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiA9IE5VTEw7CiAJaW50IGNoaWQ7CiAKLQlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgZmFsc2UpOwogCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOwogCiAJLyogSWYgcHJldmlvdXMgY29udGV4dCBpcyB2YWxpZCwgd2UgbmVlZCB0byBzYXZlIGl0ICovCkBAIC04MDIsMTEgKzgwNCw5IEBACiAKIAkvKiBMb2FkIGNvbnRleHQgZm9yIG5leHQgY2hhbm5lbCAqLwogCWNoaWQgPSAobnZfcmQzMihkZXYsIE5WMDRfUEdSQVBIX1RSQVBQRURfQUREUikgPj4gMjApICYgMHgxZjsKLQljaGFuID0gZGV2X3ByaXYtPmZpZm9zW2NoaWRdOworCWNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbHMucHRyW2NoaWRdOwogCWlmIChjaGFuICYmIGNoYW4tPnBncmFwaF9jdHgpCiAJCW52MTBfZ3JhcGhfbG9hZF9jb250ZXh0KGNoYW4pOwotCi0JcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIHRydWUpOwogfQogCiAjZGVmaW5lIE5WX1dSSVRFX0NUWChyZWcsIHZhbCkgZG8geyBcCkBAIC04MzMsNyArODMzLDcgQEAKIAlpZiAoY2hpZCA+PSBkZXZfcHJpdi0+ZW5naW5lLmZpZm8uY2hhbm5lbHMpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIGRldl9wcml2LT5maWZvc1tjaGlkXTsKKwlyZXR1cm4gZGV2X3ByaXYtPmNoYW5uZWxzLnB0cltjaGlkXTsKIH0KIAogaW50IG52MTBfZ3JhcGhfY3JlYXRlX2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKQEAgLTg3NSwzNyArODc1LDU0IEBACiAKIHZvaWQgbnYxMF9ncmFwaF9kZXN0cm95X2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CiAJc3RydWN0IGdyYXBoX3N0YXRlICpwZ3JhcGhfY3R4ID0gY2hhbi0+cGdyYXBoX2N0eDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIGZhbHNlKTsKKworCS8qIFVubG9hZCB0aGUgY29udGV4dCBpZiBpdCdzIHRoZSBjdXJyZW50bHkgYWN0aXZlIG9uZSAqLworCWlmIChwZ3JhcGgtPmNoYW5uZWwoZGV2KSA9PSBjaGFuKQorCQlwZ3JhcGgtPnVubG9hZF9jb250ZXh0KGRldik7CisKKwkvKiBGcmVlIHRoZSBjb250ZXh0IHJlc291cmNlcyAqLwogCWtmcmVlKHBncmFwaF9jdHgpOwogCWNoYW4tPnBncmFwaF9jdHggPSBOVUxMOworCisJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIHRydWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQKLW52MTBfZ3JhcGhfc2V0X3JlZ2lvbl90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGksIHVpbnQzMl90IGFkZHIsCi0JCQkgICAgIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IHBpdGNoKQorbnYxMF9ncmFwaF9zZXRfdGlsZV9yZWdpb24oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGkpCiB7Ci0JdWludDMyX3QgbGltaXQgPSBtYXgoMXUsIGFkZHIgKyBzaXplKSAtIDE7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqdGlsZSA9ICZkZXZfcHJpdi0+dGlsZS5yZWdbaV07CiAKLQlpZiAocGl0Y2gpCi0JCWFkZHIgfD0gMSA8PCAzMTsKLQotCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9UTElNSVQoaSksIGxpbWl0KTsKLQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfVFNJWkUoaSksIHBpdGNoKTsKLQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfVElMRShpKSwgYWRkcik7CisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1RMSU1JVChpKSwgdGlsZS0+bGltaXQpOworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9UU0laRShpKSwgdGlsZS0+cGl0Y2gpOworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9USUxFKGkpLCB0aWxlLT5hZGRyKTsKIH0KIAogaW50IG52MTBfZ3JhcGhfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdWludDMyX3QgdG1wOwotCWludCBpOworCWludCByZXQsIGk7CiAKIAludl93cjMyKGRldiwgTlYwM19QTUNfRU5BQkxFLCBudl9yZDMyKGRldiwgTlYwM19QTUNfRU5BQkxFKSAmCiAJCQl+TlZfUE1DX0VOQUJMRV9QR1JBUEgpOwogCW52X3dyMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUsIG52X3JkMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUpIHwKIAkJCSBOVl9QTUNfRU5BQkxFX1BHUkFQSCk7CiAKKwlyZXQgPSBudjEwX2dyYXBoX3JlZ2lzdGVyKGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW5vdXZlYXVfaXJxX3JlZ2lzdGVyKGRldiwgMTIsIG52MTBfZ3JhcGhfaXNyKTsKIAludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiAgICwgMHhGRkZGRkZGRik7CiAJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFJfRU4sIDB4RkZGRkZGRkYpOwogCkBAIC05MjgsNyArOTQ1LDcgQEAKIAogCS8qIFR1cm4gYWxsIHRoZSB0aWxpbmcgcmVnaW9ucyBvZmYuICovCiAJZm9yIChpID0gMDsgaSA8IE5WMTBfUEZCX1RJTEVfX1NJWkU7IGkrKykKLQkJbnYxMF9ncmFwaF9zZXRfcmVnaW9uX3RpbGluZyhkZXYsIGksIDAsIDAsIDApOworCQludjEwX2dyYXBoX3NldF90aWxlX3JlZ2lvbihkZXYsIGkpOwogCiAJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX0NUWF9TV0lUQ0goMCksIDB4MDAwMDAwMDApOwogCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9DVFhfU1dJVENIKDEpLCAweDAwMDAwMDAwKTsKQEAgLTk0OCwxNyArOTY1LDE3IEBACiAKIHZvaWQgbnYxMF9ncmFwaF90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSX0VOLCAweDAwMDAwMDAwKTsKKwlub3V2ZWF1X2lycV91bnJlZ2lzdGVyKGRldiwgMTIpOwogfQogCiBzdGF0aWMgaW50Ci1udjE3X2dyYXBoX210aGRfbG1hX3dpbmRvdyhzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBpbnQgZ3JjbGFzcywKLQkJCSAgIGludCBtdGhkLCB1aW50MzJfdCBkYXRhKQorbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3coc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwKKwkJCSAgIHUzMiBjbGFzcywgdTMyIG10aGQsIHUzMiBkYXRhKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IGdyYXBoX3N0YXRlICpjdHggPSBjaGFuLT5wZ3JhcGhfY3R4OwogCXN0cnVjdCBwaXBlX3N0YXRlICpwaXBlID0gJmN0eC0+cGlwZV9zdGF0ZTsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOwogCXVpbnQzMl90IHBpcGVfMHgwMDQwWzFdLCBwaXBlXzB4NjRjMFs4XSwgcGlwZV8weDZhODBbM10sIHBpcGVfMHg2YWIwWzNdOwogCXVpbnQzMl90IHhmbW9kZTAsIHhmbW9kZTE7CiAJaW50IGk7CkBAIC0xMDI1LDE4ICsxMDQyLDE0IEBACiAKIAlub3V2ZWF1X3dhaXRfZm9yX2lkbGUoZGV2KTsKIAotCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCB0cnVlKTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50Ci1udjE3X2dyYXBoX210aGRfbG1hX2VuYWJsZShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBpbnQgZ3JjbGFzcywKLQkJCSAgIGludCBtdGhkLCB1aW50MzJfdCBkYXRhKQorbnYxN19ncmFwaF9tdGhkX2xtYV9lbmFibGUoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwKKwkJCSAgIHUzMiBjbGFzcywgdTMyIG10aGQsIHUzMiBkYXRhKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKIAogCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOwogCkBAIC0xMDQ1LDQwICsxMDU4LDExOCBAQAogCW52X3dyMzIoZGV2LCAweDAwNDAwNmIwLAogCQludl9yZDMyKGRldiwgMHgwMDQwMDZiMCkgfCAweDggPDwgMjQpOwogCi0JcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIHRydWUpOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X21ldGhvZCBudjE3X2dyYXBoX2NlbHNpdXNfbXRoZHNbXSA9IHsKLQl7IDB4MTYzOCwgbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3cgfSwKLQl7IDB4MTYzYywgbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3cgfSwKLQl7IDB4MTY0MCwgbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3cgfSwKLQl7IDB4MTY0NCwgbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3cgfSwKLQl7IDB4MTY1OCwgbnYxN19ncmFwaF9tdGhkX2xtYV9lbmFibGUgfSwKK3N0YXRpYyBpbnQKK252MTBfZ3JhcGhfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9wcml2LT5lbmdpbmUuZ3JhcGgucmVnaXN0ZXJlZCkKKwkJcmV0dXJuIDA7CisKKwlOVk9CSl9DTEFTUyhkZXYsIDB4NTA2ZSwgU1cpOyAvKiBudnN3ICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwMzAsIEdSKTsgLyogbnVsbCAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDM5LCBHUik7IC8qIG0ybWYgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA0YSwgR1IpOyAvKiBnZGlyZWN0ICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNWYsIEdSKTsgLyogaW1hZ2VibGl0ICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwOWYsIEdSKTsgLyogaW1hZ2VibGl0IChudjEyKSAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDhhLCBHUik7IC8qIGlmYyAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDg5LCBHUik7IC8qIHNpZm0gKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA2MiwgR1IpOyAvKiBzdXJmMmQgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA0MywgR1IpOyAvKiByb3AgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDAxMiwgR1IpOyAvKiBiZXRhMSAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDcyLCBHUik7IC8qIGJldGE0ICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwMTksIEdSKTsgLyogY2xpcHJlY3QgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA0NCwgR1IpOyAvKiBwYXR0ZXJuICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNTIsIEdSKTsgLyogc3d6c3VyZiAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDkzLCBHUik7IC8qIHN1cmYzZCAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDk0LCBHUik7IC8qIHRleF90cmkgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA5NSwgR1IpOyAvKiBtdWx0aXRleF90cmkgKi8KKworCS8qIGNlbGNpdXMgKi8KKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPD0gMHgxMCkgeworCQlOVk9CSl9DTEFTUyhkZXYsIDB4MDA1NiwgR1IpOworCX0gZWxzZQorCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4MTcgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHgxYSkgeworCQlOVk9CSl9DTEFTUyhkZXYsIDB4MDA5NiwgR1IpOworCX0gZWxzZSB7CisJCU5WT0JKX0NMQVNTKGRldiwgMHgwMDk5LCBHUik7CisJCU5WT0JKX01USEQgKGRldiwgMHgwMDk5LCAweDE2MzgsIG52MTdfZ3JhcGhfbXRoZF9sbWFfd2luZG93KTsKKwkJTlZPQkpfTVRIRCAoZGV2LCAweDAwOTksIDB4MTYzYywgbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3cpOworCQlOVk9CSl9NVEhEIChkZXYsIDB4MDA5OSwgMHgxNjQwLCBudjE3X2dyYXBoX210aGRfbG1hX3dpbmRvdyk7CisJCU5WT0JKX01USEQgKGRldiwgMHgwMDk5LCAweDE2NDQsIG52MTdfZ3JhcGhfbXRoZF9sbWFfd2luZG93KTsKKwkJTlZPQkpfTVRIRCAoZGV2LCAweDAwOTksIDB4MTY1OCwgbnYxN19ncmFwaF9tdGhkX2xtYV9lbmFibGUpOworCX0KKworCS8qIG52c3cgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4NTA2ZSwgU1cpOworCU5WT0JKX01USEQgKGRldiwgMHg1MDZlLCAweDA1MDAsIG52MDRfZ3JhcGhfbXRoZF9wYWdlX2ZsaXApOworCisJZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5yZWdpc3RlcmVkID0gdHJ1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IG5vdXZlYXVfYml0ZmllbGQgbnYxMF9ncmFwaF9pbnRyW10gPSB7CisJeyBOVl9QR1JBUEhfSU5UUl9OT1RJRlksICJOT1RJRlkiIH0sCisJeyBOVl9QR1JBUEhfSU5UUl9FUlJPUiwgICJFUlJPUiIgIH0sCiAJe30KIH07CiAKLXN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfY2xhc3MgbnYxMF9ncmFwaF9ncmNsYXNzW10gPSB7Ci0JeyAweDAwMzAsIGZhbHNlLCBOVUxMIH0sIC8qIG51bGwgKi8KLQl7IDB4MDAzOSwgZmFsc2UsIE5VTEwgfSwgLyogbTJtZiAqLwotCXsgMHgwMDRhLCBmYWxzZSwgTlVMTCB9LCAvKiBnZGlyZWN0ICovCi0JeyAweDAwNWYsIGZhbHNlLCBOVUxMIH0sIC8qIGltYWdlYmxpdCAqLwotCXsgMHgwMDlmLCBmYWxzZSwgTlVMTCB9LCAvKiBpbWFnZWJsaXQgKG52MTIpICovCi0JeyAweDAwOGEsIGZhbHNlLCBOVUxMIH0sIC8qIGlmYyAqLwotCXsgMHgwMDg5LCBmYWxzZSwgTlVMTCB9LCAvKiBzaWZtICovCi0JeyAweDAwNjIsIGZhbHNlLCBOVUxMIH0sIC8qIHN1cmYyZCAqLwotCXsgMHgwMDQzLCBmYWxzZSwgTlVMTCB9LCAvKiByb3AgKi8KLQl7IDB4MDAxMiwgZmFsc2UsIE5VTEwgfSwgLyogYmV0YTEgKi8KLQl7IDB4MDA3MiwgZmFsc2UsIE5VTEwgfSwgLyogYmV0YTQgKi8KLQl7IDB4MDAxOSwgZmFsc2UsIE5VTEwgfSwgLyogY2xpcHJlY3QgKi8KLQl7IDB4MDA0NCwgZmFsc2UsIE5VTEwgfSwgLyogcGF0dGVybiAqLwotCXsgMHgwMDUyLCBmYWxzZSwgTlVMTCB9LCAvKiBzd3pzdXJmICovCi0JeyAweDAwOTMsIGZhbHNlLCBOVUxMIH0sIC8qIHN1cmYzZCAqLwotCXsgMHgwMDk0LCBmYWxzZSwgTlVMTCB9LCAvKiB0ZXhfdHJpICovCi0JeyAweDAwOTUsIGZhbHNlLCBOVUxMIH0sIC8qIG11bHRpdGV4X3RyaSAqLwotCXsgMHgwMDU2LCBmYWxzZSwgTlVMTCB9LCAvKiBjZWxjaXVzIChudjEwKSAqLwotCXsgMHgwMDk2LCBmYWxzZSwgTlVMTCB9LCAvKiBjZWxjaXVzIChudjExKSAqLwotCXsgMHgwMDk5LCBmYWxzZSwgbnYxN19ncmFwaF9jZWxzaXVzX210aGRzIH0sIC8qIGNlbGNpdXMgKG52MTcpICovCitzdHJ1Y3Qgbm91dmVhdV9iaXRmaWVsZCBudjEwX2dyYXBoX25zdGF0dXNbXSA9Cit7CisJeyBOVjEwX1BHUkFQSF9OU1RBVFVTX1NUQVRFX0lOX1VTRSwgICAgICAgIlNUQVRFX0lOX1VTRSIgfSwKKwl7IE5WMTBfUEdSQVBIX05TVEFUVVNfSU5WQUxJRF9TVEFURSwgICAgICAiSU5WQUxJRF9TVEFURSIgfSwKKwl7IE5WMTBfUEdSQVBIX05TVEFUVVNfQkFEX0FSR1VNRU5ULCAgICAgICAiQkFEX0FSR1VNRU5UIiB9LAorCXsgTlYxMF9QR1JBUEhfTlNUQVRVU19QUk9URUNUSU9OX0ZBVUxULCAgICJQUk9URUNUSU9OX0ZBVUxUIiB9LAogCXt9CiB9OworCitzdGF0aWMgdm9pZAorbnYxMF9ncmFwaF9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwl1MzIgc3RhdDsKKworCXdoaWxlICgoc3RhdCA9IG52X3JkMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSKSkpIHsKKwkJdTMyIG5zb3VyY2UgPSBudl9yZDMyKGRldiwgTlYwM19QR1JBUEhfTlNPVVJDRSk7CisJCXUzMiBuc3RhdHVzID0gbnZfcmQzMihkZXYsIE5WMDNfUEdSQVBIX05TVEFUVVMpOworCQl1MzIgYWRkciA9IG52X3JkMzIoZGV2LCBOVjA0X1BHUkFQSF9UUkFQUEVEX0FERFIpOworCQl1MzIgY2hpZCA9IChhZGRyICYgMHgwMWYwMDAwMCkgPj4gMjA7CisJCXUzMiBzdWJjID0gKGFkZHIgJiAweDAwMDcwMDAwKSA+PiAxNjsKKwkJdTMyIG10aGQgPSAoYWRkciAmIDB4MDAwMDFmZmMpOworCQl1MzIgZGF0YSA9IG52X3JkMzIoZGV2LCBOVjA0X1BHUkFQSF9UUkFQUEVEX0RBVEEpOworCQl1MzIgY2xhc3MgPSBudl9yZDMyKGRldiwgMHg0MDAxNjAgKyBzdWJjICogNCkgJiAweGZmZjsKKwkJdTMyIHNob3cgPSBzdGF0OworCisJCWlmIChzdGF0ICYgTlZfUEdSQVBIX0lOVFJfRVJST1IpIHsKKwkJCWlmIChuc291cmNlICYgTlYwM19QR1JBUEhfTlNPVVJDRV9JTExFR0FMX01USEQpIHsKKwkJCQlpZiAoIW5vdXZlYXVfZ3B1b2JqX210aGRfY2FsbDIoZGV2LCBjaGlkLCBjbGFzcywgbXRoZCwgZGF0YSkpCisJCQkJCXNob3cgJj0gfk5WX1BHUkFQSF9JTlRSX0VSUk9SOworCQkJfQorCQl9CisKKwkJaWYgKHN0YXQgJiBOVl9QR1JBUEhfSU5UUl9DT05URVhUX1NXSVRDSCkgeworCQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIE5WX1BHUkFQSF9JTlRSX0NPTlRFWFRfU1dJVENIKTsKKwkJCXN0YXQgJj0gfk5WX1BHUkFQSF9JTlRSX0NPTlRFWFRfU1dJVENIOworCQkJc2hvdyAmPSB+TlZfUEdSQVBIX0lOVFJfQ09OVEVYVF9TV0lUQ0g7CisJCQludjEwX2dyYXBoX2NvbnRleHRfc3dpdGNoKGRldik7CisJCX0KKworCQludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwgc3RhdCk7CisJCW52X3dyMzIoZGV2LCBOVjA0X1BHUkFQSF9GSUZPLCAweDAwMDAwMDAxKTsKKworCQlpZiAoc2hvdyAmJiBub3V2ZWF1X3JhdGVsaW1pdCgpKSB7CisJCQlOVl9JTkZPKGRldiwgIlBHUkFQSCAtIik7CisJCQlub3V2ZWF1X2JpdGZpZWxkX3ByaW50KG52MTBfZ3JhcGhfaW50ciwgc2hvdyk7CisJCQlwcmludGsoIiBuc291cmNlOiIpOworCQkJbm91dmVhdV9iaXRmaWVsZF9wcmludChudjA0X2dyYXBoX25zb3VyY2UsIG5zb3VyY2UpOworCQkJcHJpbnRrKCIgbnN0YXR1czoiKTsKKwkJCW5vdXZlYXVfYml0ZmllbGRfcHJpbnQobnYxMF9ncmFwaF9uc3RhdHVzLCBuc3RhdHVzKTsKKwkJCXByaW50aygiXG4iKTsKKwkJCU5WX0lORk8oZGV2LCAiUEdSQVBIIC0gY2ggJWQvJWQgY2xhc3MgMHglMDR4ICIKKwkJCQkgICAgICJtdGhkIDB4JTA0eCBkYXRhIDB4JTA4eFxuIiwKKwkJCQljaGlkLCBzdWJjLCBjbGFzcywgbXRoZCwgZGF0YSk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjIwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjIwX2dyYXBoLmMKaW5kZXggMTJhYjljZC4uODQ2NGI3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYyMF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MjBfZ3JhcGguYwpAQCAtMzIsNiArMzIsMTAgQEAKICNkZWZpbmUgTlYzNF9HUkNUWF9TSVpFICAgICgxODE0MCkKICNkZWZpbmUgTlYzNV8zNl9HUkNUWF9TSVpFICgyMjM5NikKIAorc3RhdGljIGludCBudjIwX2dyYXBoX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICopOworc3RhdGljIGludCBudjMwX2dyYXBoX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICopOworc3RhdGljIHZvaWQgbnYyMF9ncmFwaF9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKik7CisKIHN0YXRpYyB2b2lkCiBudjIwX2dyYXBoX2NvbnRleHRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmN0eCkKIHsKQEAgLTQyNSw5ICs0MjksMjEgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmY2hhbi0+cmFtaW5fZ3JjdHgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOworCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCBmYWxzZSk7CisKKwkvKiBVbmxvYWQgdGhlIGNvbnRleHQgaWYgaXQncyB0aGUgY3VycmVudGx5IGFjdGl2ZSBvbmUgKi8KKwlpZiAocGdyYXBoLT5jaGFubmVsKGRldikgPT0gY2hhbikKKwkJcGdyYXBoLT51bmxvYWRfY29udGV4dChkZXYpOworCisJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIHRydWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisKKwkvKiBGcmVlIHRoZSBjb250ZXh0IHJlc291cmNlcyAqLwogCW52X3dvMzIocGdyYXBoLT5jdHhfdGFibGUsIGNoYW4tPmlkICogNCwgMCk7CisJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZjaGFuLT5yYW1pbl9ncmN0eCk7CiB9CiAKIGludApAQCAtNDk2LDI0ICs1MTIsMjcgQEAKIH0KIAogdm9pZAotbnYyMF9ncmFwaF9zZXRfcmVnaW9uX3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSwgdWludDMyX3QgYWRkciwKLQkJCSAgICAgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgcGl0Y2gpCitudjIwX2dyYXBoX3NldF90aWxlX3JlZ2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSkKIHsKLQl1aW50MzJfdCBsaW1pdCA9IG1heCgxdSwgYWRkciArIHNpemUpIC0gMTsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3RpbGVfcmVnICp0aWxlID0gJmRldl9wcml2LT50aWxlLnJlZ1tpXTsKIAotCWlmIChwaXRjaCkKLQkJYWRkciB8PSAxOwotCi0JbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RMSU1JVChpKSwgbGltaXQpOwotCW52X3dyMzIoZGV2LCBOVjIwX1BHUkFQSF9UU0laRShpKSwgcGl0Y2gpOwotCW52X3dyMzIoZGV2LCBOVjIwX1BHUkFQSF9USUxFKGkpLCBhZGRyKTsKKwludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVExJTUlUKGkpLCB0aWxlLT5saW1pdCk7CisJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RTSVpFKGkpLCB0aWxlLT5waXRjaCk7CisJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RJTEUoaSksIHRpbGUtPmFkZHIpOwogCiAJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1JESV9JTkRFWCwgMHgwMEVBMDAzMCArIDQgKiBpKTsKLQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUkRJX0RBVEEsIGxpbWl0KTsKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUkRJX0RBVEEsIHRpbGUtPmxpbWl0KTsKIAludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUkRJX0lOREVYLCAweDAwRUEwMDUwICsgNCAqIGkpOwotCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9SRElfREFUQSwgcGl0Y2gpOworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9SRElfREFUQSwgdGlsZS0+cGl0Y2gpOwogCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9SRElfSU5ERVgsIDB4MDBFQTAwMTAgKyA0ICogaSk7Ci0JbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1JESV9EQVRBLCBhZGRyKTsKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUkRJX0RBVEEsIHRpbGUtPmFkZHIpOworCisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfMjApIHsKKwkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1pDT01QKGkpLCB0aWxlLT56Y29tcCk7CisJCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9SRElfSU5ERVgsIDB4MDBlYTAwOTAgKyA0ICogaSk7CisJCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9SRElfREFUQSwgdGlsZS0+emNvbXApOworCX0KIH0KIAogaW50CkBAIC01NjAsNiArNTc5LDEzIEBACiAKIAludjIwX2dyYXBoX3JkaShkZXYpOwogCisJcmV0ID0gbnYyMF9ncmFwaF9yZWdpc3RlcihkZXYpOworCWlmIChyZXQpIHsKKwkJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZwZ3JhcGgtPmN0eF90YWJsZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJbm91dmVhdV9pcnFfcmVnaXN0ZXIoZGV2LCAxMiwgbnYyMF9ncmFwaF9pc3IpOwogCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSICAgLCAweEZGRkZGRkZGKTsKIAludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUl9FTiwgMHhGRkZGRkZGRik7CiAKQEAgLTU3MSwxNiArNTk3LDE3IEBACiAJbnZfd3IzMihkZXYsIDB4NDAwMDlDICAgICAgICAgICAsIDB4MDAwMDAwNDApOwogCiAJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4MjUpIHsKLQkJbnZfd3IzMihkZXYsIDB4NDAwODkwLCAweDAwMDgwMDAwKTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwODkwLCAweDAwYThjZmZmKTsKIAkJbnZfd3IzMihkZXYsIDB4NDAwNjEwLCAweDMwNEIxRkI2KTsKLQkJbnZfd3IzMihkZXYsIDB4NDAwQjgwLCAweDE4QjgyODgwKTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwQjgwLCAweDFjYmQzODgzKTsKIAkJbnZfd3IzMihkZXYsIDB4NDAwQjg0LCAweDQ0MDAwMDAwKTsKIAkJbnZfd3IzMihkZXYsIDB4NDAwMDk4LCAweDQwMDAwMDgwKTsKIAkJbnZfd3IzMihkZXYsIDB4NDAwQjg4LCAweDAwMDAwMGZmKTsKKwogCX0gZWxzZSB7Ci0JCW52X3dyMzIoZGV2LCAweDQwMDg4MCwgMHgwMDA4MDAwMCk7IC8qIDB4MDAwOGM3ZGYgKi8KKwkJbnZfd3IzMihkZXYsIDB4NDAwODgwLCAweDAwMDhjN2RmKTsKIAkJbnZfd3IzMihkZXYsIDB4NDAwMDk0LCAweDAwMDAwMDA1KTsKLQkJbnZfd3IzMihkZXYsIDB4NDAwQjgwLCAweDQ1Q0FBMjA4KTsgLyogMHg0NWVhZTIwZSAqLworCQludl93cjMyKGRldiwgMHg0MDBCODAsIDB4NDVlYWUyMGUpOwogCQludl93cjMyKGRldiwgMHg0MDBCODQsIDB4MjQwMDAwMDApOwogCQludl93cjMyKGRldiwgMHg0MDAwOTgsIDB4MDAwMDAwNDApOwogCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUkRJX0lOREVYLCAweDAwRTAwMDM4KTsKQEAgLTU5MSwxNCArNjE4LDggQEAKIAogCS8qIFR1cm4gYWxsIHRoZSB0aWxpbmcgcmVnaW9ucyBvZmYuICovCiAJZm9yIChpID0gMDsgaSA8IE5WMTBfUEZCX1RJTEVfX1NJWkU7IGkrKykKLQkJbnYyMF9ncmFwaF9zZXRfcmVnaW9uX3RpbGluZyhkZXYsIGksIDAsIDAsIDApOworCQludjIwX2dyYXBoX3NldF90aWxlX3JlZ2lvbihkZXYsIGkpOwogCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQludl93cjMyKGRldiwgMHg0MDA5ODAgKyBpICogNCwgbnZfcmQzMihkZXYsIDB4MTAwMzAwICsgaSAqIDQpKTsKLQkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1JESV9JTkRFWCwgMHgwMEVBMDA5MCArIGkgKiA0KTsKLQkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1JESV9EQVRBLAotCQkJCQludl9yZDMyKGRldiwgMHgxMDAzMDAgKyBpICogNCkpOwotCX0KIAludl93cjMyKGRldiwgMHg0MDA5YTAsIG52X3JkMzIoZGV2LCAweDEwMDMyNCkpOwogCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9SRElfSU5ERVgsIDB4MDBFQTAwMEMpOwogCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9SRElfREFUQSwgbnZfcmQzMihkZXYsIDB4MTAwMzI0KSk7CkBAIC02NDIsNiArNjYzLDkgQEAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOwogCisJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFJfRU4sIDB4MDAwMDAwMDApOworCW5vdXZlYXVfaXJxX3VucmVnaXN0ZXIoZGV2LCAxMik7CisKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJnBncmFwaC0+Y3R4X3RhYmxlKTsKIH0KIApAQCAtNjg0LDkgKzcwOCwxNiBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKKwlyZXQgPSBudjMwX2dyYXBoX3JlZ2lzdGVyKGRldik7CisJaWYgKHJldCkgeworCQlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJnBncmFwaC0+Y3R4X3RhYmxlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfQ0hBTk5FTF9DVFhfVEFCTEUsCiAJCSAgICAgcGdyYXBoLT5jdHhfdGFibGUtPnBpbnN0ID4+IDQpOwogCisJbm91dmVhdV9pcnFfcmVnaXN0ZXIoZGV2LCAxMiwgbnYyMF9ncmFwaF9pc3IpOwogCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSICAgLCAweEZGRkZGRkZGKTsKIAludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUl9FTiwgMHhGRkZGRkZGRik7CiAKQEAgLTcyNCw3ICs3NTUsNyBAQAogCiAJLyogVHVybiBhbGwgdGhlIHRpbGluZyByZWdpb25zIG9mZi4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlYxMF9QRkJfVElMRV9fU0laRTsgaSsrKQotCQludjIwX2dyYXBoX3NldF9yZWdpb25fdGlsaW5nKGRldiwgaSwgMCwgMCwgMCk7CisJCW52MjBfZ3JhcGhfc2V0X3RpbGVfcmVnaW9uKGRldiwgaSk7CiAKIAludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfQ1RYX0NPTlRST0wsIDB4MTAwMDAxMDApOwogCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9TVEFURSAgICAgICwgMHhGRkZGRkZGRik7CkBAIC03NDQsNDYgKzc3NSwxMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9jbGFzcyBudjIwX2dyYXBoX2dyY2xhc3NbXSA9IHsKLQl7IDB4MDAzMCwgZmFsc2UsIE5VTEwgfSwgLyogbnVsbCAqLwotCXsgMHgwMDM5LCBmYWxzZSwgTlVMTCB9LCAvKiBtMm1mICovCi0JeyAweDAwNGEsIGZhbHNlLCBOVUxMIH0sIC8qIGdkaXJlY3QgKi8KLQl7IDB4MDA5ZiwgZmFsc2UsIE5VTEwgfSwgLyogaW1hZ2VibGl0IChudjEyKSAqLwotCXsgMHgwMDhhLCBmYWxzZSwgTlVMTCB9LCAvKiBpZmMgKi8KLQl7IDB4MDA4OSwgZmFsc2UsIE5VTEwgfSwgLyogc2lmbSAqLwotCXsgMHgwMDYyLCBmYWxzZSwgTlVMTCB9LCAvKiBzdXJmMmQgKi8KLQl7IDB4MDA0MywgZmFsc2UsIE5VTEwgfSwgLyogcm9wICovCi0JeyAweDAwMTIsIGZhbHNlLCBOVUxMIH0sIC8qIGJldGExICovCi0JeyAweDAwNzIsIGZhbHNlLCBOVUxMIH0sIC8qIGJldGE0ICovCi0JeyAweDAwMTksIGZhbHNlLCBOVUxMIH0sIC8qIGNsaXByZWN0ICovCi0JeyAweDAwNDQsIGZhbHNlLCBOVUxMIH0sIC8qIHBhdHRlcm4gKi8KLQl7IDB4MDA5ZSwgZmFsc2UsIE5VTEwgfSwgLyogc3d6c3VyZiAqLwotCXsgMHgwMDk2LCBmYWxzZSwgTlVMTCB9LCAvKiBjZWxjaXVzICovCi0JeyAweDAwOTcsIGZhbHNlLCBOVUxMIH0sIC8qIGtlbHZpbiAobnYyMCkgKi8KLQl7IDB4MDU5NywgZmFsc2UsIE5VTEwgfSwgLyoga2VsdmluIChudjI1KSAqLwotCXt9Ci19Oworc3RhdGljIGludAorbnYyMF9ncmFwaF9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLXN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfY2xhc3MgbnYzMF9ncmFwaF9ncmNsYXNzW10gPSB7Ci0JeyAweDAwMzAsIGZhbHNlLCBOVUxMIH0sIC8qIG51bGwgKi8KLQl7IDB4MDAzOSwgZmFsc2UsIE5VTEwgfSwgLyogbTJtZiAqLwotCXsgMHgwMDRhLCBmYWxzZSwgTlVMTCB9LCAvKiBnZGlyZWN0ICovCi0JeyAweDAwOWYsIGZhbHNlLCBOVUxMIH0sIC8qIGltYWdlYmxpdCAobnYxMikgKi8KLQl7IDB4MDA4YSwgZmFsc2UsIE5VTEwgfSwgLyogaWZjICovCi0JeyAweDAzOGEsIGZhbHNlLCBOVUxMIH0sIC8qIGlmYyAobnYzMCkgKi8KLQl7IDB4MDA4OSwgZmFsc2UsIE5VTEwgfSwgLyogc2lmbSAqLwotCXsgMHgwMzg5LCBmYWxzZSwgTlVMTCB9LCAvKiBzaWZtIChudjMwKSAqLwotCXsgMHgwMDYyLCBmYWxzZSwgTlVMTCB9LCAvKiBzdXJmMmQgKi8KLQl7IDB4MDM2MiwgZmFsc2UsIE5VTEwgfSwgLyogc3VyZjJkIChudjMwKSAqLwotCXsgMHgwMDQzLCBmYWxzZSwgTlVMTCB9LCAvKiByb3AgKi8KLQl7IDB4MDAxMiwgZmFsc2UsIE5VTEwgfSwgLyogYmV0YTEgKi8KLQl7IDB4MDA3MiwgZmFsc2UsIE5VTEwgfSwgLyogYmV0YTQgKi8KLQl7IDB4MDAxOSwgZmFsc2UsIE5VTEwgfSwgLyogY2xpcHJlY3QgKi8KLQl7IDB4MDA0NCwgZmFsc2UsIE5VTEwgfSwgLyogcGF0dGVybiAqLwotCXsgMHgwMzllLCBmYWxzZSwgTlVMTCB9LCAvKiBzd3pzdXJmICovCi0JeyAweDAzOTcsIGZhbHNlLCBOVUxMIH0sIC8qIHJhbmtpbmUgKG52MzApICovCi0JeyAweDA0OTcsIGZhbHNlLCBOVUxMIH0sIC8qIHJhbmtpbmUgKG52MzUpICovCi0JeyAweDA2OTcsIGZhbHNlLCBOVUxMIH0sIC8qIHJhbmtpbmUgKG52MzQpICovCi0Je30KLX07CisJaWYgKGRldl9wcml2LT5lbmdpbmUuZ3JhcGgucmVnaXN0ZXJlZCkKKwkJcmV0dXJuIDA7CiAKKwlOVk9CSl9DTEFTUyhkZXYsIDB4NTA2ZSwgU1cpOyAvKiBudnN3ICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwMzAsIEdSKTsgLyogbnVsbCAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDM5LCBHUik7IC8qIG0ybWYgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA0YSwgR1IpOyAvKiBnZGlyZWN0ICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwOWYsIEdSKTsgLyogaW1hZ2VibGl0IChudjEyKSAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDhhLCBHUik7IC8qIGlmYyAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDg5LCBHUik7IC8qIHNpZm0gKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA2MiwgR1IpOyAvKiBzdXJmMmQgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA0MywgR1IpOyAvKiByb3AgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDAxMiwgR1IpOyAvKiBiZXRhMSAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDcyLCBHUik7IC8qIGJldGE0ICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwMTksIEdSKTsgLyogY2xpcHJlY3QgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA0NCwgR1IpOyAvKiBwYXR0ZXJuICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwOWUsIEdSKTsgLyogc3d6c3VyZiAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDk2LCBHUik7IC8qIGNlbGNpdXMgKi8KKworCS8qIGtlbHZpbiAqLworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4MjUpCisJCU5WT0JKX0NMQVNTKGRldiwgMHgwMDk3LCBHUik7CisJZWxzZQorCQlOVk9CSl9DTEFTUyhkZXYsIDB4MDU5NywgR1IpOworCisJLyogbnZzdyAqLworCU5WT0JKX0NMQVNTKGRldiwgMHg1MDZlLCBTVyk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDUwNmUsIDB4MDUwMCwgbnYwNF9ncmFwaF9tdGhkX3BhZ2VfZmxpcCk7CisKKwlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLnJlZ2lzdGVyZWQgPSB0cnVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitudjMwX2dyYXBoX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLnJlZ2lzdGVyZWQpCisJCXJldHVybiAwOworCisJTlZPQkpfQ0xBU1MoZGV2LCAweDUwNmUsIFNXKTsgLyogbnZzdyAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDMwLCBHUik7IC8qIG51bGwgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDAzOSwgR1IpOyAvKiBtMm1mICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNGEsIEdSKTsgLyogZ2RpcmVjdCAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDlmLCBHUik7IC8qIGltYWdlYmxpdCAobnYxMikgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA4YSwgR1IpOyAvKiBpZmMgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDM4YSwgR1IpOyAvKiBpZmMgKG52MzApICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwODksIEdSKTsgLyogc2lmbSAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMzg5LCBHUik7IC8qIHNpZm0gKG52MzApICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNjIsIEdSKTsgLyogc3VyZjJkICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAzNjIsIEdSKTsgLyogc3VyZjJkIChudjMwKSAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDQzLCBHUik7IC8qIHJvcCAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDEyLCBHUik7IC8qIGJldGExICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNzIsIEdSKTsgLyogYmV0YTQgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDAxOSwgR1IpOyAvKiBjbGlwcmVjdCAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDQ0LCBHUik7IC8qIHBhdHRlcm4gKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDM5ZSwgR1IpOyAvKiBzd3pzdXJmICovCisKKwkvKiByYW5raW5lICovCisJaWYgKDB4MDAwMDAwMDMgJiAoMSA8PCAoZGV2X3ByaXYtPmNoaXBzZXQgJiAweDBmKSkpCisJCU5WT0JKX0NMQVNTKGRldiwgMHgwMzk3LCBHUik7CisJZWxzZQorCWlmICgweDAwMDAwMDEwICYgKDEgPDwgKGRldl9wcml2LT5jaGlwc2V0ICYgMHgwZikpKQorCQlOVk9CSl9DTEFTUyhkZXYsIDB4MDY5NywgR1IpOworCWVsc2UKKwlpZiAoMHgwMDAwMDFlMCAmICgxIDw8IChkZXZfcHJpdi0+Y2hpcHNldCAmIDB4MGYpKSkKKwkJTlZPQkpfQ0xBU1MoZGV2LCAweDA0OTcsIEdSKTsKKworCS8qIG52c3cgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4NTA2ZSwgU1cpOworCU5WT0JKX01USEQgKGRldiwgMHg1MDZlLCAweDA1MDAsIG52MDRfZ3JhcGhfbXRoZF9wYWdlX2ZsaXApOworCisJZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5yZWdpc3RlcmVkID0gdHJ1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK252MjBfZ3JhcGhfaXNyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJdTMyIHN0YXQ7CisKKwl3aGlsZSAoKHN0YXQgPSBudl9yZDMyKGRldiwgTlYwM19QR1JBUEhfSU5UUikpKSB7CisJCXUzMiBuc291cmNlID0gbnZfcmQzMihkZXYsIE5WMDNfUEdSQVBIX05TT1VSQ0UpOworCQl1MzIgbnN0YXR1cyA9IG52X3JkMzIoZGV2LCBOVjAzX1BHUkFQSF9OU1RBVFVTKTsKKwkJdTMyIGFkZHIgPSBudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfVFJBUFBFRF9BRERSKTsKKwkJdTMyIGNoaWQgPSAoYWRkciAmIDB4MDFmMDAwMDApID4+IDIwOworCQl1MzIgc3ViYyA9IChhZGRyICYgMHgwMDA3MDAwMCkgPj4gMTY7CisJCXUzMiBtdGhkID0gKGFkZHIgJiAweDAwMDAxZmZjKTsKKwkJdTMyIGRhdGEgPSBudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfVFJBUFBFRF9EQVRBKTsKKwkJdTMyIGNsYXNzID0gbnZfcmQzMihkZXYsIDB4NDAwMTYwICsgc3ViYyAqIDQpICYgMHhmZmY7CisJCXUzMiBzaG93ID0gc3RhdDsKKworCQlpZiAoc3RhdCAmIE5WX1BHUkFQSF9JTlRSX0VSUk9SKSB7CisJCQlpZiAobnNvdXJjZSAmIE5WMDNfUEdSQVBIX05TT1VSQ0VfSUxMRUdBTF9NVEhEKSB7CisJCQkJaWYgKCFub3V2ZWF1X2dwdW9ial9tdGhkX2NhbGwyKGRldiwgY2hpZCwgY2xhc3MsIG10aGQsIGRhdGEpKQorCQkJCQlzaG93ICY9IH5OVl9QR1JBUEhfSU5UUl9FUlJPUjsKKwkJCX0KKwkJfQorCisJCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSLCBzdGF0KTsKKwkJbnZfd3IzMihkZXYsIE5WMDRfUEdSQVBIX0ZJRk8sIDB4MDAwMDAwMDEpOworCisJCWlmIChzaG93ICYmIG5vdXZlYXVfcmF0ZWxpbWl0KCkpIHsKKwkJCU5WX0lORk8oZGV2LCAiUEdSQVBIIC0iKTsKKwkJCW5vdXZlYXVfYml0ZmllbGRfcHJpbnQobnYxMF9ncmFwaF9pbnRyLCBzaG93KTsKKwkJCXByaW50aygiIG5zb3VyY2U6Iik7CisJCQlub3V2ZWF1X2JpdGZpZWxkX3ByaW50KG52MDRfZ3JhcGhfbnNvdXJjZSwgbnNvdXJjZSk7CisJCQlwcmludGsoIiBuc3RhdHVzOiIpOworCQkJbm91dmVhdV9iaXRmaWVsZF9wcmludChudjEwX2dyYXBoX25zdGF0dXMsIG5zdGF0dXMpOworCQkJcHJpbnRrKCJcbiIpOworCQkJTlZfSU5GTyhkZXYsICJQR1JBUEggLSBjaCAlZC8lZCBjbGFzcyAweCUwNHggIgorCQkJCSAgICAgIm10aGQgMHglMDR4IGRhdGEgMHglMDh4XG4iLAorCQkJCWNoaWQsIHN1YmMsIGNsYXNzLCBtdGhkLCBkYXRhKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MzBfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MzBfZmIuYwppbmRleCA0YTNmMmYwLi5lMDEzNWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjMwX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYzMF9mYi5jCkBAIC0yOSw2ICsyOSwyNyBAQAogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCiAjaW5jbHVkZSAibm91dmVhdV9kcm0uaCIKIAordm9pZAorbnYzMF9mYl9pbml0X3RpbGVfcmVnaW9uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpLCB1aW50MzJfdCBhZGRyLAorCQkJIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IHBpdGNoLCB1aW50MzJfdCBmbGFncykKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3RpbGVfcmVnICp0aWxlID0gJmRldl9wcml2LT50aWxlLnJlZ1tpXTsKKworCXRpbGUtPmFkZHIgPSBhZGRyIHwgMTsKKwl0aWxlLT5saW1pdCA9IG1heCgxdSwgYWRkciArIHNpemUpIC0gMTsKKwl0aWxlLT5waXRjaCA9IHBpdGNoOworfQorCit2b2lkCitudjMwX2ZiX2ZyZWVfdGlsZV9yZWdpb24oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGkpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqdGlsZSA9ICZkZXZfcHJpdi0+dGlsZS5yZWdbaV07CisKKwl0aWxlLT5hZGRyID0gdGlsZS0+bGltaXQgPSB0aWxlLT5waXRjaCA9IDA7Cit9CisKIHN0YXRpYyBpbnQKIGNhbGNfYmlhcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaywgaW50IGksIGludCBqKQogewpAQCAtNjUsNyArODYsNyBAQAogCiAJLyogVHVybiBhbGwgdGhlIHRpbGluZyByZWdpb25zIG9mZi4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgcGZiLT5udW1fdGlsZXM7IGkrKykKLQkJcGZiLT5zZXRfcmVnaW9uX3RpbGluZyhkZXYsIGksIDAsIDAsIDApOworCQlwZmItPnNldF90aWxlX3JlZ2lvbihkZXYsIGkpOwogCiAJLyogSW5pdCB0aGUgbWVtb3J5IHRpbWluZyByZWdzIGF0IDB4MTAwMzdjLzB4MTAwM2FjICovCiAJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4MzAgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZmIuYwppbmRleCAzY2QwN2Q4Li5mM2Q5YzA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9mYi5jCkBAIC00LDI2ICs0LDIyIEBACiAjaW5jbHVkZSAibm91dmVhdV9kcm0uaCIKIAogdm9pZAotbnY0MF9mYl9zZXRfcmVnaW9uX3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSwgdWludDMyX3QgYWRkciwKLQkJCSAgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgcGl0Y2gpCitudjQwX2ZiX3NldF90aWxlX3JlZ2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSkKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVpbnQzMl90IGxpbWl0ID0gbWF4KDF1LCBhZGRyICsgc2l6ZSkgLSAxOwotCi0JaWYgKHBpdGNoKQotCQlhZGRyIHw9IDE7CisJc3RydWN0IG5vdXZlYXVfdGlsZV9yZWcgKnRpbGUgPSAmZGV2X3ByaXYtPnRpbGUucmVnW2ldOwogCiAJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewogCWNhc2UgMHg0MDoKLQkJbnZfd3IzMihkZXYsIE5WMTBfUEZCX1RMSU1JVChpKSwgbGltaXQpOwotCQludl93cjMyKGRldiwgTlYxMF9QRkJfVFNJWkUoaSksIHBpdGNoKTsKLQkJbnZfd3IzMihkZXYsIE5WMTBfUEZCX1RJTEUoaSksIGFkZHIpOworCQludl93cjMyKGRldiwgTlYxMF9QRkJfVExJTUlUKGkpLCB0aWxlLT5saW1pdCk7CisJCW52X3dyMzIoZGV2LCBOVjEwX1BGQl9UU0laRShpKSwgdGlsZS0+cGl0Y2gpOworCQludl93cjMyKGRldiwgTlYxMF9QRkJfVElMRShpKSwgdGlsZS0+YWRkcik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJbnZfd3IzMihkZXYsIE5WNDBfUEZCX1RMSU1JVChpKSwgbGltaXQpOwotCQludl93cjMyKGRldiwgTlY0MF9QRkJfVFNJWkUoaSksIHBpdGNoKTsKLQkJbnZfd3IzMihkZXYsIE5WNDBfUEZCX1RJTEUoaSksIGFkZHIpOworCQludl93cjMyKGRldiwgTlY0MF9QRkJfVExJTUlUKGkpLCB0aWxlLT5saW1pdCk7CisJCW52X3dyMzIoZGV2LCBOVjQwX1BGQl9UU0laRShpKSwgdGlsZS0+cGl0Y2gpOworCQludl93cjMyKGRldiwgTlY0MF9QRkJfVElMRShpKSwgdGlsZS0+YWRkcik7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTY0LDcgKzYwLDcgQEAKIAogCS8qIFR1cm4gYWxsIHRoZSB0aWxpbmcgcmVnaW9ucyBvZmYuICovCiAJZm9yIChpID0gMDsgaSA8IHBmYi0+bnVtX3RpbGVzOyBpKyspCi0JCXBmYi0+c2V0X3JlZ2lvbl90aWxpbmcoZGV2LCBpLCAwLCAwLCAwKTsKKwkJcGZiLT5zZXRfdGlsZV9yZWdpb24oZGV2LCBpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9maWZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2ZpZm8uYwppbmRleCBkMzM3YjhiLi40OWI5YTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2ZpZm8uYwpAQCAtNDcsNiArNDcsMTEgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJY2hhbi0+dXNlciA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMCkgKworCQkJICAgICBOVjQwX1VTRVIoY2hhbi0+aWQpLCBQQUdFX1NJWkUpOworCWlmICghY2hhbi0+dXNlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKIAogCW52X3dpMzIoZGV2LCBmYyArICAwLCBjaGFuLT5wdXNoYnVmX2Jhc2UpOwpAQCAtNTksNyArNjQsNiBAQAogCQkJICAgICAgTlZfUEZJRk9fQ0FDSEUxX0JJR19FTkRJQU4gfAogI2VuZGlmCiAJCQkgICAgICAweDMwMDAwMDAwIC8qIG5vIGlkZWEuLiAqLyk7Ci0JbnZfd2kzMihkZXYsIGZjICsgNTYsIGNoYW4tPnJhbWluX2dyY3R4LT5waW5zdCA+PiA0KTsKIAludl93aTMyKGRldiwgZmMgKyA2MCwgMHgwMDAxRkZGRik7CiAKIAkvKiBlbmFibGUgdGhlIGZpZm8gZG1hIG9wZXJhdGlvbiAqLwpAQCAtNzAsMTcgKzc0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZAotbnY0MF9maWZvX2Rlc3Ryb3lfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7Ci0KLQludl93cjMyKGRldiwgTlYwNF9QRklGT19NT0RFLAotCQludl9yZDMyKGRldiwgTlYwNF9QRklGT19NT0RFKSAmIH4oMSA8PCBjaGFuLT5pZCkpOwotCi0Jbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZjaGFuLT5yYW1mYyk7Ci19Ci0KIHN0YXRpYyB2b2lkCiBudjQwX2ZpZm9fZG9fbG9hZF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjaGlkKQogewpAQCAtMjc5LDYgKzI3Miw3IEBACiBzdGF0aWMgdm9pZAogbnY0MF9maWZvX2luaXRfaW50cihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCW5vdXZlYXVfaXJxX3JlZ2lzdGVyKGRldiwgOCwgbnYwNF9maWZvX2lzcik7CiAJbnZfd3IzMihkZXYsIDB4MDAyMTAwLCAweGZmZmZmZmZmKTsKIAludl93cjMyKGRldiwgMHgwMDIxNDAsIDB4ZmZmZmZmZmYpOwogfQpAQCAtMzAxLDcgKzI5NSw3IEBACiAJcGZpZm8tPnJlYXNzaWduKGRldiwgdHJ1ZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPmVuZ2luZS5maWZvLmNoYW5uZWxzOyBpKyspIHsKLQkJaWYgKGRldl9wcml2LT5maWZvc1tpXSkgeworCQlpZiAoZGV2X3ByaXYtPmNoYW5uZWxzLnB0cltpXSkgewogCQkJdWludDMyX3QgbW9kZSA9IG52X3JkMzIoZGV2LCBOVjA0X1BGSUZPX01PREUpOwogCQkJbnZfd3IzMihkZXYsIE5WMDRfUEZJRk9fTU9ERSwgbW9kZSB8ICgxIDw8IGkpKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmFwaC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmFwaC5jCmluZGV4IDdlZTFiOTEuLjE5ZWY5MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMKQEAgLTI5LDYgKzI5LDkgQEAKICNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgogI2luY2x1ZGUgIm5vdXZlYXVfZ3JjdHguaCIKIAorc3RhdGljIGludCBudjQwX2dyYXBoX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICopOworc3RhdGljIHZvaWQgbnY0MF9ncmFwaF9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKik7CisKIHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKgogbnY0MF9ncmFwaF9jaGFubmVsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CkBAIC00Miw3ICs0NSw3IEBACiAJaW5zdCA9IChpbnN0ICYgTlY0MF9QR1JBUEhfQ1RYQ1RMX0NVUl9JTlNUQU5DRSkgPDwgNDsKIAogCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+ZW5naW5lLmZpZm8uY2hhbm5lbHM7IGkrKykgewotCQlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZGV2X3ByaXYtPmZpZm9zW2ldOworCQlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZGV2X3ByaXYtPmNoYW5uZWxzLnB0cltpXTsKIAogCQlpZiAoY2hhbiAmJiBjaGFuLT5yYW1pbl9ncmN0eCAmJgogCQkgICAgY2hhbi0+cmFtaW5fZ3JjdHgtPnBpbnN0ID09IGluc3QpCkBAIC01OSw2ICs2Miw3IEBACiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKIAlzdHJ1Y3Qgbm91dmVhdV9ncmN0eCBjdHggPSB7fTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKIAlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBjaGFuLCBwZ3JhcGgtPmdyY3R4X3NpemUsIDE2LApAQCAtNzMsMTIgKzc3LDM5IEBACiAJbnY0MF9ncmN0eF9pbml0KCZjdHgpOwogCiAJbnZfd28zMihjaGFuLT5yYW1pbl9ncmN0eCwgMCwgY2hhbi0+cmFtaW5fZ3JjdHgtPnBpbnN0KTsKKworCS8qIGluaXQgZ3JjdHggcG9pbnRlciBpbiByYW1mYywgYW5kIG9uIFBGSUZPIGlmIGNoYW5uZWwgaXMKKwkgKiBhbHJlYWR5IGFjdGl2ZSB0aGVyZQorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOworCW52X3dvMzIoY2hhbi0+cmFtZmMsIDB4MzgsIGNoYW4tPnJhbWluX2dyY3R4LT5waW5zdCA+PiA0KTsKKwludl9tYXNrKGRldiwgMHgwMDI1MDAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApOworCWlmICgobnZfcmQzMihkZXYsIDB4MDAzMjA0KSAmIDB4MDAwMDAwMWYpID09IGNoYW4tPmlkKQorCQludl93cjMyKGRldiwgMHgwMDMyZTAsIGNoYW4tPnJhbWluX2dyY3R4LT5waW5zdCA+PiA0KTsKKwludl9tYXNrKGRldiwgMHgwMDI1MDAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQKIG52NDBfZ3JhcGhfZGVzdHJveV9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKKwlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgZmFsc2UpOworCisJLyogVW5sb2FkIHRoZSBjb250ZXh0IGlmIGl0J3MgdGhlIGN1cnJlbnRseSBhY3RpdmUgb25lICovCisJaWYgKHBncmFwaC0+Y2hhbm5lbChkZXYpID09IGNoYW4pCisJCXBncmFwaC0+dW5sb2FkX2NvbnRleHQoZGV2KTsKKworCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCB0cnVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOworCisJLyogRnJlZSB0aGUgY29udGV4dCByZXNvdXJjZXMgKi8KIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmNoYW4tPnJhbWluX2dyY3R4KTsKIH0KIApAQCAtMTc0LDQzICsyMDUsMzkgQEAKIH0KIAogdm9pZAotbnY0MF9ncmFwaF9zZXRfcmVnaW9uX3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSwgdWludDMyX3QgYWRkciwKLQkJCSAgICAgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgcGl0Y2gpCitudjQwX2dyYXBoX3NldF90aWxlX3JlZ2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaSkKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVpbnQzMl90IGxpbWl0ID0gbWF4KDF1LCBhZGRyICsgc2l6ZSkgLSAxOwotCi0JaWYgKHBpdGNoKQotCQlhZGRyIHw9IDE7CisJc3RydWN0IG5vdXZlYXVfdGlsZV9yZWcgKnRpbGUgPSAmZGV2X3ByaXYtPnRpbGUucmVnW2ldOwogCiAJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewogCWNhc2UgMHg0NDoKIAljYXNlIDB4NGE6CiAJY2FzZSAweDRlOgotCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVFNJWkUoaSksIHBpdGNoKTsKLQkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RMSU1JVChpKSwgbGltaXQpOwotCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVElMRShpKSwgYWRkcik7CisJCW52X3dyMzIoZGV2LCBOVjIwX1BHUkFQSF9UU0laRShpKSwgdGlsZS0+cGl0Y2gpOworCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVExJTUlUKGkpLCB0aWxlLT5saW1pdCk7CisJCW52X3dyMzIoZGV2LCBOVjIwX1BHUkFQSF9USUxFKGkpLCB0aWxlLT5hZGRyKTsKIAkJYnJlYWs7CiAKIAljYXNlIDB4NDY6CiAJY2FzZSAweDQ3OgogCWNhc2UgMHg0OToKIAljYXNlIDB4NGI6Ci0JCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9UU0laRShpKSwgcGl0Y2gpOwotCQludl93cjMyKGRldiwgTlY0N19QR1JBUEhfVExJTUlUKGkpLCBsaW1pdCk7Ci0JCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9USUxFKGkpLCBhZGRyKTsKLQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RTSVpFMShpKSwgcGl0Y2gpOwotCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVExJTUlUMShpKSwgbGltaXQpOwotCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVElMRTEoaSksIGFkZHIpOworCQludl93cjMyKGRldiwgTlY0N19QR1JBUEhfVFNJWkUoaSksIHRpbGUtPnBpdGNoKTsKKwkJbnZfd3IzMihkZXYsIE5WNDdfUEdSQVBIX1RMSU1JVChpKSwgdGlsZS0+bGltaXQpOworCQludl93cjMyKGRldiwgTlY0N19QR1JBUEhfVElMRShpKSwgdGlsZS0+YWRkcik7CisJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UU0laRTEoaSksIHRpbGUtPnBpdGNoKTsKKwkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RMSU1JVDEoaSksIHRpbGUtPmxpbWl0KTsKKwkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RJTEUxKGkpLCB0aWxlLT5hZGRyKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVFNJWkUoaSksIHBpdGNoKTsKLQkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RMSU1JVChpKSwgbGltaXQpOwotCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVElMRShpKSwgYWRkcik7Ci0JCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UU0laRTEoaSksIHBpdGNoKTsKLQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RMSU1JVDEoaSksIGxpbWl0KTsKLQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RJTEUxKGkpLCBhZGRyKTsKKwkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RTSVpFKGkpLCB0aWxlLT5waXRjaCk7CisJCW52X3dyMzIoZGV2LCBOVjIwX1BHUkFQSF9UTElNSVQoaSksIHRpbGUtPmxpbWl0KTsKKwkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RJTEUoaSksIHRpbGUtPmFkZHIpOworCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVFNJWkUxKGkpLCB0aWxlLT5waXRjaCk7CisJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UTElNSVQxKGkpLCB0aWxlLT5saW1pdCk7CisJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9USUxFMShpKSwgdGlsZS0+YWRkcik7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTIzMiw3ICsyNTksNyBAQAogCXN0cnVjdCBub3V2ZWF1X2ZiX2VuZ2luZSAqcGZiID0gJmRldl9wcml2LT5lbmdpbmUuZmI7CiAJc3RydWN0IG5vdXZlYXVfZ3JjdHggY3R4ID0ge307CiAJdWludDMyX3QgdnJhbXN6LCAqY3A7Ci0JaW50IGksIGo7CisJaW50IHJldCwgaSwgajsKIAogCW52X3dyMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUsIG52X3JkMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUpICYKIAkJCX5OVl9QTUNfRU5BQkxFX1BHUkFQSCk7CkBAIC0yNTYsOSArMjgzLDE0IEBACiAKIAlrZnJlZShjcCk7CiAKKwlyZXQgPSBudjQwX2dyYXBoX3JlZ2lzdGVyKGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCS8qIE5vIGNvbnRleHQgcHJlc2VudCBjdXJyZW50bHkgKi8KIAludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX0NVUiwgMHgwMDAwMDAwMCk7CiAKKwlub3V2ZWF1X2lycV9yZWdpc3RlcihkZXYsIDEyLCBudjQwX2dyYXBoX2lzcik7CiAJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIgICAsIDB4RkZGRkZGRkYpOwogCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9JTlRSX0VOLCAweEZGRkZGRkZGKTsKIApAQCAtMzQ3LDcgKzM3OSw3IEBACiAKIAkvKiBUdXJuIGFsbCB0aGUgdGlsaW5nIHJlZ2lvbnMgb2ZmLiAqLwogCWZvciAoaSA9IDA7IGkgPCBwZmItPm51bV90aWxlczsgaSsrKQotCQludjQwX2dyYXBoX3NldF9yZWdpb25fdGlsaW5nKGRldiwgaSwgMCwgMCwgMCk7CisJCW52NDBfZ3JhcGhfc2V0X3RpbGVfcmVnaW9uKGRldiwgaSk7CiAKIAkvKiBiZWdpbiBSQU0gY29uZmlnICovCiAJdnJhbXN6ID0gcGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIDApIC0gMTsKQEAgLTM5MCwyNiArNDIyLDExMSBAQAogCiB2b2lkIG52NDBfZ3JhcGhfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlub3V2ZWF1X2lycV91bnJlZ2lzdGVyKGRldiwgMTIpOwogfQogCi1zdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X2NsYXNzIG52NDBfZ3JhcGhfZ3JjbGFzc1tdID0gewotCXsgMHgwMDMwLCBmYWxzZSwgTlVMTCB9LCAvKiBudWxsICovCi0JeyAweDAwMzksIGZhbHNlLCBOVUxMIH0sIC8qIG0ybWYgKi8KLQl7IDB4MDA0YSwgZmFsc2UsIE5VTEwgfSwgLyogZ2RpcmVjdCAqLwotCXsgMHgwMDlmLCBmYWxzZSwgTlVMTCB9LCAvKiBpbWFnZWJsaXQgKG52MTIpICovCi0JeyAweDAwOGEsIGZhbHNlLCBOVUxMIH0sIC8qIGlmYyAqLwotCXsgMHgwMDg5LCBmYWxzZSwgTlVMTCB9LCAvKiBzaWZtICovCi0JeyAweDMwODksIGZhbHNlLCBOVUxMIH0sIC8qIHNpZm0gKG52NDApICovCi0JeyAweDAwNjIsIGZhbHNlLCBOVUxMIH0sIC8qIHN1cmYyZCAqLwotCXsgMHgzMDYyLCBmYWxzZSwgTlVMTCB9LCAvKiBzdXJmMmQgKG52NDApICovCi0JeyAweDAwNDMsIGZhbHNlLCBOVUxMIH0sIC8qIHJvcCAqLwotCXsgMHgwMDEyLCBmYWxzZSwgTlVMTCB9LCAvKiBiZXRhMSAqLwotCXsgMHgwMDcyLCBmYWxzZSwgTlVMTCB9LCAvKiBiZXRhNCAqLwotCXsgMHgwMDE5LCBmYWxzZSwgTlVMTCB9LCAvKiBjbGlwcmVjdCAqLwotCXsgMHgwMDQ0LCBmYWxzZSwgTlVMTCB9LCAvKiBwYXR0ZXJuICovCi0JeyAweDMwOWUsIGZhbHNlLCBOVUxMIH0sIC8qIHN3enN1cmYgKi8KLQl7IDB4NDA5NywgZmFsc2UsIE5VTEwgfSwgLyogY3VyaWUgKG52NDApICovCi0JeyAweDQ0OTcsIGZhbHNlLCBOVUxMIH0sIC8qIGN1cmllIChudjQ0KSAqLwotCXt9Ci19Oworc3RhdGljIGludAorbnY0MF9ncmFwaF9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKKwlpZiAoZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5yZWdpc3RlcmVkKQorCQlyZXR1cm4gMDsKKworCU5WT0JKX0NMQVNTKGRldiwgMHg1MDZlLCBTVyk7IC8qIG52c3cgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDAzMCwgR1IpOyAvKiBudWxsICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwMzksIEdSKTsgLyogbTJtZiAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDRhLCBHUik7IC8qIGdkaXJlY3QgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDA5ZiwgR1IpOyAvKiBpbWFnZWJsaXQgKG52MTIpICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwOGEsIEdSKTsgLyogaWZjICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwODksIEdSKTsgLyogc2lmbSAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgzMDg5LCBHUik7IC8qIHNpZm0gKG52NDApICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNjIsIEdSKTsgLyogc3VyZjJkICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDMwNjIsIEdSKTsgLyogc3VyZjJkIChudjQwKSAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDQzLCBHUik7IC8qIHJvcCAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDEyLCBHUik7IC8qIGJldGExICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDAwNzIsIEdSKTsgLyogYmV0YTQgKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDAxOSwgR1IpOyAvKiBjbGlwcmVjdCAqLworCU5WT0JKX0NMQVNTKGRldiwgMHgwMDQ0LCBHUik7IC8qIHBhdHRlcm4gKi8KKwlOVk9CSl9DTEFTUyhkZXYsIDB4MzA5ZSwgR1IpOyAvKiBzd3pzdXJmICovCisKKwkvKiBjdXJpZSAqLworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDYwIHx8CisJICAgIDB4MDAwMDU0NTAgJiAoMSA8PCAoZGV2X3ByaXYtPmNoaXBzZXQgJiAweDBmKSkpCisJCU5WT0JKX0NMQVNTKGRldiwgMHg0NDk3LCBHUik7CisJZWxzZQorCQlOVk9CSl9DTEFTUyhkZXYsIDB4NDA5NywgR1IpOworCisJLyogbnZzdyAqLworCU5WT0JKX0NMQVNTKGRldiwgMHg1MDZlLCBTVyk7CisJTlZPQkpfTVRIRCAoZGV2LCAweDUwNmUsIDB4MDUwMCwgbnYwNF9ncmFwaF9tdGhkX3BhZ2VfZmxpcCk7CisKKwlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLnJlZ2lzdGVyZWQgPSB0cnVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitudjQwX2dyYXBoX2lzcl9jaGlkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBpbnN0KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5jaGFubmVscy5sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVsczsgaSsrKSB7CisJCWNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbHMucHRyW2ldOworCQlpZiAoIWNoYW4gfHwgIWNoYW4tPnJhbWluX2dyY3R4KQorCQkJY29udGludWU7CisKKwkJaWYgKGluc3QgPT0gY2hhbi0+cmFtaW5fZ3JjdHgtPnBpbnN0KQorCQkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jaGFubmVscy5sb2NrLCBmbGFncyk7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB2b2lkCitudjQwX2dyYXBoX2lzcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXUzMiBzdGF0OworCisJd2hpbGUgKChzdGF0ID0gbnZfcmQzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIpKSkgeworCQl1MzIgbnNvdXJjZSA9IG52X3JkMzIoZGV2LCBOVjAzX1BHUkFQSF9OU09VUkNFKTsKKwkJdTMyIG5zdGF0dXMgPSBudl9yZDMyKGRldiwgTlYwM19QR1JBUEhfTlNUQVRVUyk7CisJCXUzMiBpbnN0ID0gKG52X3JkMzIoZGV2LCAweDQwMDMyYykgJiAweDAwMGZmZmZmKSA8PCA0OworCQl1MzIgY2hpZCA9IG52NDBfZ3JhcGhfaXNyX2NoaWQoZGV2LCBpbnN0KTsKKwkJdTMyIGFkZHIgPSBudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfVFJBUFBFRF9BRERSKTsKKwkJdTMyIHN1YmMgPSAoYWRkciAmIDB4MDAwNzAwMDApID4+IDE2OworCQl1MzIgbXRoZCA9IChhZGRyICYgMHgwMDAwMWZmYyk7CisJCXUzMiBkYXRhID0gbnZfcmQzMihkZXYsIE5WMDRfUEdSQVBIX1RSQVBQRURfREFUQSk7CisJCXUzMiBjbGFzcyA9IG52X3JkMzIoZGV2LCAweDQwMDE2MCArIHN1YmMgKiA0KSAmIDB4ZmZmZjsKKwkJdTMyIHNob3cgPSBzdGF0OworCisJCWlmIChzdGF0ICYgTlZfUEdSQVBIX0lOVFJfRVJST1IpIHsKKwkJCWlmIChuc291cmNlICYgTlYwM19QR1JBUEhfTlNPVVJDRV9JTExFR0FMX01USEQpIHsKKwkJCQlpZiAoIW5vdXZlYXVfZ3B1b2JqX210aGRfY2FsbDIoZGV2LCBjaGlkLCBjbGFzcywgbXRoZCwgZGF0YSkpCisJCQkJCXNob3cgJj0gfk5WX1BHUkFQSF9JTlRSX0VSUk9SOworCQkJfSBlbHNlCisJCQlpZiAobnNvdXJjZSAmIE5WMDNfUEdSQVBIX05TT1VSQ0VfRE1BX1ZUWF9QUk9URUNUSU9OKSB7CisJCQkJbnZfbWFzayhkZXYsIDB4NDAyMDAwLCAwLCAwKTsKKwkJCX0KKwkJfQorCisJCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSLCBzdGF0KTsKKwkJbnZfd3IzMihkZXYsIE5WMDRfUEdSQVBIX0ZJRk8sIDB4MDAwMDAwMDEpOworCisJCWlmIChzaG93ICYmIG5vdXZlYXVfcmF0ZWxpbWl0KCkpIHsKKwkJCU5WX0lORk8oZGV2LCAiUEdSQVBIIC0iKTsKKwkJCW5vdXZlYXVfYml0ZmllbGRfcHJpbnQobnYxMF9ncmFwaF9pbnRyLCBzaG93KTsKKwkJCXByaW50aygiIG5zb3VyY2U6Iik7CisJCQlub3V2ZWF1X2JpdGZpZWxkX3ByaW50KG52MDRfZ3JhcGhfbnNvdXJjZSwgbnNvdXJjZSk7CisJCQlwcmludGsoIiBuc3RhdHVzOiIpOworCQkJbm91dmVhdV9iaXRmaWVsZF9wcmludChudjEwX2dyYXBoX25zdGF0dXMsIG5zdGF0dXMpOworCQkJcHJpbnRrKCJcbiIpOworCQkJTlZfSU5GTyhkZXYsICJQR1JBUEggLSBjaCAlZCAoMHglMDh4KSBzdWJjICVkICIKKwkJCQkgICAgICJjbGFzcyAweCUwNHggbXRoZCAweCUwNHggZGF0YSAweCUwOHhcbiIsCisJCQkJY2hpZCwgaW5zdCwgc3ViYywgY2xhc3MsIG10aGQsIGRhdGEpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2NydGMuYwppbmRleCA1NjQ3NmQwLi45MDIzYzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2NydGMuYwpAQCAtMTE1LDE1ICsxMTUsMTYgQEAKIAkJT1VUX1JJTkcoZXZvLCAwKTsKIAkJQkVHSU5fUklORyhldm8sIDAsIE5WNTBfRVZPX0NSVEMoaW5kZXgsIEZCX0RNQSksIDEpOwogCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg1MCkKLQkJCWlmIChudl9jcnRjLT5mYi50aWxlX2ZsYWdzID09IDB4N2EwMCkKKwkJCWlmIChudl9jcnRjLT5mYi50aWxlX2ZsYWdzID09IDB4N2EwMCB8fAorCQkJICAgIG52X2NydGMtPmZiLnRpbGVfZmxhZ3MgPT0gMHhmZTAwKQogCQkJCU9VVF9SSU5HKGV2bywgTnZFdm9GQjMyKTsKIAkJCWVsc2UKIAkJCWlmIChudl9jcnRjLT5mYi50aWxlX2ZsYWdzID09IDB4NzAwMCkKIAkJCQlPVVRfUklORyhldm8sIE52RXZvRkIxNik7CiAJCQllbHNlCi0JCQkJT1VUX1JJTkcoZXZvLCBOdkV2b1ZSQU0pOworCQkJCU9VVF9SSU5HKGV2bywgTnZFdm9WUkFNX0xQKTsKIAkJZWxzZQotCQkJT1VUX1JJTkcoZXZvLCBOdkV2b1ZSQU0pOworCQkJT1VUX1JJTkcoZXZvLCBOdkV2b1ZSQU1fTFApOwogCX0KIAogCW52X2NydGMtPmZiLmJsYW5rZWQgPSBibGFua2VkOwpAQCAtMzQ1LDcgKzM0Niw2IEBACiAJCSAgICAgdWludDMyX3QgYnVmZmVyX2hhbmRsZSwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfY3J0YyAqbnZfY3J0YyA9IG5vdXZlYXVfY3J0YyhjcnRjKTsKIAlzdHJ1Y3Qgbm91dmVhdV9ibyAqY3Vyc29yID0gTlVMTDsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKQEAgLTM3NCw4ICszNzQsNyBAQAogCiAJbm91dmVhdV9ib191bm1hcChjdXJzb3IpOwogCi0JbnZfY3J0Yy0+Y3Vyc29yLnNldF9vZmZzZXQobnZfY3J0YywgbnZfY3J0Yy0+Y3Vyc29yLm52Ym8tPmJvLm9mZnNldCAtCi0JCQkJCSAgICBkZXZfcHJpdi0+dm1fdnJhbV9iYXNlKTsKKwludl9jcnRjLT5jdXJzb3Iuc2V0X29mZnNldChudl9jcnRjLCBudl9jcnRjLT5jdXJzb3IubnZiby0+Ym8ubWVtLnN0YXJ0IDw8IFBBR0VfU0hJRlQpOwogCW52X2NydGMtPmN1cnNvci5zaG93KG52X2NydGMsIHRydWUpOwogCiBvdXQ6CkBAIC00MzcsNiArNDM2LDcgQEAKIAkuY3Vyc29yX21vdmUgPSBudjUwX2NydGNfY3Vyc29yX21vdmUsCiAJLmdhbW1hX3NldCA9IG52NTBfY3J0Y19nYW1tYV9zZXQsCiAJLnNldF9jb25maWcgPSBkcm1fY3J0Y19oZWxwZXJfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlwID0gbm91dmVhdV9jcnRjX3BhZ2VfZmxpcCwKIAkuZGVzdHJveSA9IG52NTBfY3J0Y19kZXN0cm95LAogfTsKIApAQCAtNDUzLDYgKzQ1Myw3IEBACiAKIAlOVl9ERUJVR19LTVMoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKIAorCWRybV92YmxhbmtfcHJlX21vZGVzZXQoZGV2LCBudl9jcnRjLT5pbmRleCk7CiAJbnY1MF9jcnRjX2JsYW5rKG52X2NydGMsIHRydWUpOwogfQogCkBAIC00NjgsNiArNDY5LDcgQEAKIAlOVl9ERUJVR19LTVMoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKIAogCW52NTBfY3J0Y19ibGFuayhudl9jcnRjLCBmYWxzZSk7CisJZHJtX3ZibGFua19wb3N0X21vZGVzZXQoZGV2LCBudl9jcnRjLT5pbmRleCk7CiAKIAlyZXQgPSBSSU5HX1NQQUNFKGV2bywgMik7CiAJaWYgKHJldCkgewpAQCAtNTQ1LDcgKzU0Nyw3IEBACiAJCSByZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQludl9jcnRjLT5mYi5vZmZzZXQgPSBmYi0+bnZiby0+Ym8ub2Zmc2V0IC0gZGV2X3ByaXYtPnZtX3ZyYW1fYmFzZTsKKwludl9jcnRjLT5mYi5vZmZzZXQgPSBmYi0+bnZiby0+Ym8ubWVtLnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CiAJbnZfY3J0Yy0+ZmIudGlsZV9mbGFncyA9IG5vdXZlYXVfYm9fdGlsZV9sYXlvdXQoZmItPm52Ym8pOwogCW52X2NydGMtPmZiLmNwcCA9IGRybV9mYi0+Yml0c19wZXJfcGl4ZWwgLyA4OwogCWlmICghbnZfY3J0Yy0+ZmIuYmxhbmtlZCAmJiBkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDUwKSB7CkBAIC01NTQsMTMgKzU1NiwxNCBAQAogCQkJcmV0dXJuIHJldDsKIAogCQlCRUdJTl9SSU5HKGV2bywgMCwgTlY1MF9FVk9fQ1JUQyhudl9jcnRjLT5pbmRleCwgRkJfRE1BKSwgMSk7Ci0JCWlmIChudl9jcnRjLT5mYi50aWxlX2ZsYWdzID09IDB4N2EwMCkKKwkJaWYgKG52X2NydGMtPmZiLnRpbGVfZmxhZ3MgPT0gMHg3YTAwIHx8CisJCSAgICBudl9jcnRjLT5mYi50aWxlX2ZsYWdzID09IDB4ZmUwMCkKIAkJCU9VVF9SSU5HKGV2bywgTnZFdm9GQjMyKTsKIAkJZWxzZQogCQlpZiAobnZfY3J0Yy0+ZmIudGlsZV9mbGFncyA9PSAweDcwMDApCiAJCQlPVVRfUklORyhldm8sIE52RXZvRkIxNik7CiAJCWVsc2UKLQkJCU9VVF9SSU5HKGV2bywgTnZFdm9WUkFNKTsKKwkJCU9VVF9SSU5HKGV2bywgTnZFdm9WUkFNX0xQKTsKIAl9CiAKIAlyZXQgPSBSSU5HX1NQQUNFKGV2bywgMTIpOwpAQCAtNTc0LDggKzU3NywxMCBAQAogCWlmICghbnZfY3J0Yy0+ZmIudGlsZV9mbGFncykgewogCQlPVVRfUklORyhldm8sIGRybV9mYi0+cGl0Y2ggfCAoMSA8PCAyMCkpOwogCX0gZWxzZSB7Ci0JCU9VVF9SSU5HKGV2bywgKChkcm1fZmItPnBpdGNoIC8gNCkgPDwgNCkgfAotCQkJCSAgZmItPm52Ym8tPnRpbGVfbW9kZSk7CisJCXUzMiB0aWxlX21vZGUgPSBmYi0+bnZiby0+dGlsZV9tb2RlOworCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl9DMCkKKwkJCXRpbGVfbW9kZSA+Pj0gNDsKKwkJT1VUX1JJTkcoZXZvLCAoKGRybV9mYi0+cGl0Y2ggLyA0KSA8PCA0KSB8IHRpbGVfbW9kZSk7CiAJfQogCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQogCQlPVVRfUklORyhldm8sIChudl9jcnRjLT5mYi50aWxlX2ZsYWdzIDw8IDgpIHwgZm9ybWF0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kaXNwbGF5LmMKaW5kZXggZjYyNGM2MS4uN2NjOTRlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kaXNwbGF5LmMKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJub3V2ZWF1X3JhbWh0LmgiCiAjaW5jbHVkZSAiZHJtX2NydGNfaGVscGVyLmgiCiAKK3N0YXRpYyB2b2lkIG52NTBfZGlzcGxheV9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKik7CisKIHN0YXRpYyBpbmxpbmUgaW50CiBudjUwX3Nvcl9ucihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewpAQCAtNDYsMTU5ICs0OCw2IEBACiAJcmV0dXJuIDQ7CiB9CiAKLXN0YXRpYyB2b2lkCi1udjUwX2V2b19jaGFubmVsX2RlbChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICoqcGNoYW4pCi17Ci0Jc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiA9ICpwY2hhbjsKLQotCWlmICghY2hhbikKLQkJcmV0dXJuOwotCSpwY2hhbiA9IE5VTEw7Ci0KLQlub3V2ZWF1X2dwdW9ial9jaGFubmVsX3Rha2Vkb3duKGNoYW4pOwotCW5vdXZlYXVfYm9fdW5tYXAoY2hhbi0+cHVzaGJ1Zl9ibyk7Ci0Jbm91dmVhdV9ib19yZWYoTlVMTCwgJmNoYW4tPnB1c2hidWZfYm8pOwotCi0JaWYgKGNoYW4tPnVzZXIpCi0JCWlvdW5tYXAoY2hhbi0+dXNlcik7Ci0KLQlrZnJlZShjaGFuKTsKLX0KLQotc3RhdGljIGludAotbnY1MF9ldm9fZG1hb2JqX25ldyhzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpldm8sIHVpbnQzMl90IGNsYXNzLCB1aW50MzJfdCBuYW1lLAotCQkgICAgdWludDMyX3QgdGlsZV9mbGFncywgdWludDMyX3QgbWFnaWNfZmxhZ3MsCi0JCSAgICB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxpbWl0KQotewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGV2by0+ZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZXZvLT5kZXY7Ci0Jc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpvYmogPSBOVUxMOwotCWludCByZXQ7Ci0KLQlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBldm8sIDYqNCwgMzIsIDAsICZvYmopOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0Jb2JqLT5lbmdpbmUgPSBOVk9CSl9FTkdJTkVfRElTUExBWTsKLQotCW52X3dvMzIob2JqLCAgMCwgKHRpbGVfZmxhZ3MgPDwgMjIpIHwgKG1hZ2ljX2ZsYWdzIDw8IDE2KSB8IGNsYXNzKTsKLQludl93bzMyKG9iaiwgIDQsIGxpbWl0KTsKLQludl93bzMyKG9iaiwgIDgsIG9mZnNldCk7Ci0JbnZfd28zMihvYmosIDEyLCAweDAwMDAwMDAwKTsKLQludl93bzMyKG9iaiwgMTYsIDB4MDAwMDAwMDApOwotCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlIDwgTlZfQzApCi0JCW52X3dvMzIob2JqLCAyMCwgMHgwMDAxMDAwMCk7Ci0JZWxzZQotCQludl93bzMyKG9iaiwgMjAsIDB4MDAwMjAwMDApOwotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwotCi0JcmV0ID0gbm91dmVhdV9yYW1odF9pbnNlcnQoZXZvLCBuYW1lLCBvYmopOwotCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmb2JqKTsKLQlpZiAocmV0KSB7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW52NTBfZXZvX2NoYW5uZWxfbmV3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKipwY2hhbikKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcmFtaHQgPSBOVUxMOwotCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47Ci0JaW50IHJldDsKLQotCWNoYW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjaGFuKQotCQlyZXR1cm4gLUVOT01FTTsKLQkqcGNoYW4gPSBjaGFuOwotCi0JY2hhbi0+aWQgPSAtMTsKLQljaGFuLT5kZXYgPSBkZXY7Ci0JY2hhbi0+dXNlcl9nZXQgPSA0OwotCWNoYW4tPnVzZXJfcHV0ID0gMDsKLQotCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ldyhkZXYsIE5VTEwsIDMyNzY4LCAweDEwMDAsCi0JCQkJIE5WT0JKX0ZMQUdfWkVST19BTExPQywgJmNoYW4tPnJhbWluKTsKLQlpZiAocmV0KSB7Ci0JCU5WX0VSUk9SKGRldiwgIkVycm9yIGFsbG9jYXRpbmcgRVZPIGNoYW5uZWwgbWVtb3J5OiAlZFxuIiwgcmV0KTsKLQkJbnY1MF9ldm9fY2hhbm5lbF9kZWwocGNoYW4pOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldCA9IGRybV9tbV9pbml0KCZjaGFuLT5yYW1pbl9oZWFwLCAwLCAzMjc2OCk7Ci0JaWYgKHJldCkgewotCQlOVl9FUlJPUihkZXYsICJFcnJvciBpbml0aWFsaXNpbmcgRVZPIFBSQU1JTiBoZWFwOiAlZFxuIiwgcmV0KTsKLQkJbnY1MF9ldm9fY2hhbm5lbF9kZWwocGNoYW4pOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ldyhkZXYsIGNoYW4sIDQwOTYsIDE2LCAwLCAmcmFtaHQpOwotCWlmIChyZXQpIHsKLQkJTlZfRVJST1IoZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIEVWTyBSQU1IVDogJWRcbiIsIHJldCk7Ci0JCW52NTBfZXZvX2NoYW5uZWxfZGVsKHBjaGFuKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXQgPSBub3V2ZWF1X3JhbWh0X25ldyhkZXYsIHJhbWh0LCAmY2hhbi0+cmFtaHQpOwotCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmcmFtaHQpOwotCWlmIChyZXQpIHsKLQkJbnY1MF9ldm9fY2hhbm5lbF9kZWwocGNoYW4pOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDUwKSB7Ci0JCXJldCA9IG52NTBfZXZvX2RtYW9ial9uZXcoY2hhbiwgMHgzZCwgTnZFdm9GQjE2LCAweDcwLCAweDE5LAotCQkJCQkgIDAsIDB4ZmZmZmZmZmYpOwotCQlpZiAocmV0KSB7Ci0JCQludjUwX2V2b19jaGFubmVsX2RlbChwY2hhbik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQotCQlyZXQgPSBudjUwX2V2b19kbWFvYmpfbmV3KGNoYW4sIDB4M2QsIE52RXZvRkIzMiwgMHg3YSwgMHgxOSwKLQkJCQkJICAwLCAweGZmZmZmZmZmKTsKLQkJaWYgKHJldCkgewotCQkJbnY1MF9ldm9fY2hhbm5lbF9kZWwocGNoYW4pOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCXJldCA9IG52NTBfZXZvX2RtYW9ial9uZXcoY2hhbiwgMHgzZCwgTnZFdm9WUkFNLCAwLCAweDE5LAotCQkJCSAgMCwgZGV2X3ByaXYtPnZyYW1fc2l6ZSk7Ci0JaWYgKHJldCkgewotCQludjUwX2V2b19jaGFubmVsX2RlbChwY2hhbik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gbm91dmVhdV9ib19uZXcoZGV2LCBOVUxMLCA0MDk2LCAwLCBUVE1fUExfRkxBR19WUkFNLCAwLCAwLAotCQkJICAgICBmYWxzZSwgdHJ1ZSwgJmNoYW4tPnB1c2hidWZfYm8pOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gbm91dmVhdV9ib19waW4oY2hhbi0+cHVzaGJ1Zl9ibywgVFRNX1BMX0ZMQUdfVlJBTSk7Ci0JaWYgKHJldCkgewotCQlOVl9FUlJPUihkZXYsICJFcnJvciBjcmVhdGluZyBFVk8gRE1BIHB1c2ggYnVmZmVyOiAlZFxuIiwgcmV0KTsKLQkJbnY1MF9ldm9fY2hhbm5lbF9kZWwocGNoYW4pOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldCA9IG5vdXZlYXVfYm9fbWFwKGNoYW4tPnB1c2hidWZfYm8pOwotCWlmIChyZXQpIHsKLQkJTlZfRVJST1IoZGV2LCAiRXJyb3IgbWFwcGluZyBFVk8gRE1BIHB1c2ggYnVmZmVyOiAlZFxuIiwgcmV0KTsKLQkJbnY1MF9ldm9fY2hhbm5lbF9kZWwocGNoYW4pOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWNoYW4tPnVzZXIgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDApICsKLQkJCQkJTlY1MF9QRElTUExBWV9VU0VSKDApLCBQQUdFX1NJWkUpOwotCWlmICghY2hhbi0+dXNlcikgewotCQlOVl9FUlJPUihkZXYsICJFcnJvciBtYXBwaW5nIEVWTyBjb250cm9sIHJlZ3MuXG4iKTsKLQkJbnY1MF9ldm9fY2hhbm5lbF9kZWwocGNoYW4pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogaW50CiBudjUwX2Rpc3BsYXlfZWFybHlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewpAQCAtMjE0LDE3ICs2MywxNiBAQAogbnY1MF9kaXNwbGF5X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X3RpbWVyX2VuZ2luZSAqcHRpbWVyID0gJmRldl9wcml2LT5lbmdpbmUudGltZXI7CiAJc3RydWN0IG5vdXZlYXVfZ3Bpb19lbmdpbmUgKnBncGlvID0gJmRldl9wcml2LT5lbmdpbmUuZ3BpbzsKLQlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpldm8gPSBkZXZfcHJpdi0+ZXZvOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0JdWludDMyX3QgdmFsLCByYW1fYW1vdW50OwotCXVpbnQ2NF90IHN0YXJ0OworCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmV2bzsKIAlpbnQgcmV0LCBpOworCXUzMiB2YWw7CiAKIAlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCW52X3dyMzIoZGV2LCAweDAwNjEwMTg0LCBudl9yZDMyKGRldiwgMHgwMDYxNDAwNCkpOworCiAJLyoKIAkgKiBJIHRoaW5rIHRoZSAweDAwNjEwMVhYIHJhbmdlIGlzIHNvbWUga2luZCBvZiBtYWluIGNvbnRyb2wgYXJlYQogCSAqIHRoYXQgZW5hYmxlcyB0aGluZ3MuCkBAIC0yNDAsMTYgKzg4LDE5IEBACiAJCXZhbCA9IG52X3JkMzIoZGV2LCAweDAwNjE2MTBjICsgKGkgKiAweDgwMCkpOwogCQludl93cjMyKGRldiwgMHgwMDYxMDE5YyArIChpICogMHgxMCksIHZhbCk7CiAJfQorCiAJLyogREFDICovCiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewogCQl2YWwgPSBudl9yZDMyKGRldiwgMHgwMDYxYTAwMCArIChpICogMHg4MDApKTsKIAkJbnZfd3IzMihkZXYsIDB4MDA2MTAxZDAgKyAoaSAqIDB4MDQpLCB2YWwpOwogCX0KKwogCS8qIFNPUiAqLwogCWZvciAoaSA9IDA7IGkgPCBudjUwX3Nvcl9ucihkZXYpOyBpKyspIHsKIAkJdmFsID0gbnZfcmQzMihkZXYsIDB4MDA2MWMwMDAgKyAoaSAqIDB4ODAwKSk7CiAJCW52X3dyMzIoZGV2LCAweDAwNjEwMWUwICsgKGkgKiAweDA0KSwgdmFsKTsKIAl9CisKIAkvKiBFWFQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAJCXZhbCA9IG52X3JkMzIoZGV2LCAweDAwNjFlMDAwICsgKGkgKiAweDgwMCkpOwpAQCAtMjYyLDE3ICsxMTMsNiBAQAogCQludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9EQUNfQ0xLX0NUUkwxKGkpLCAweDAwMDAwMDAxKTsKIAl9CiAKLQkvKiBUaGlzIHVzZWQgdG8gYmUgaW4gY3J0YyB1bmJsYW5rLCBidXQgc2VlbXMgb3V0IG9mIHBsYWNlIHRoZXJlLiAqLwotCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX1VOS18zODAsIDApOwotCS8qIFJBTSBpcyBjbGFtcGVkIHRvIDI1NiBNaUIuICovCi0JcmFtX2Ftb3VudCA9IGRldl9wcml2LT52cmFtX3NpemU7Ci0JTlZfREVCVUdfS01TKGRldiwgInJhbV9hbW91bnQgJWRcbiIsIHJhbV9hbW91bnQpOwotCWlmIChyYW1fYW1vdW50ID4gMjU2KjEwMjQqMTAyNCkKLQkJcmFtX2Ftb3VudCA9IDI1NioxMDI0KjEwMjQ7Ci0JbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfUkFNX0FNT1VOVCwgcmFtX2Ftb3VudCAtIDEpOwotCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX1VOS18zODgsIDB4MTUwMDAwKTsKLQludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9VTktfMzhDLCAwKTsKLQogCS8qIFRoZSBwcmVjaXNlIHB1cnBvc2UgaXMgdW5rbm93biwgaSBzdXNwZWN0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8KIAkgKiB3aXRoIHRleHQgbW9kZS4KIAkgKi8KQEAgLTI4NywzNyArMTI3LDYgQEAKIAkJfQogCX0KIAotCS8qIHRha2VuIGZyb20gbnYgYnVnICMxMjYzNywgYXR0ZW1wdHMgdG8gdW4td2VkZ2UgdGhlIGh3IGlmIGl0J3MKLQkgKiBzdHVjayBpbiBzb21lIHVuc3BlY2lmaWVkIHN0YXRlCi0JICovCi0Jc3RhcnQgPSBwdGltZXItPnJlYWQoZGV2KTsKLQludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9DSEFOTkVMX1NUQVQoMCksIDB4MmIwMCk7Ci0Jd2hpbGUgKCh2YWwgPSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9DSEFOTkVMX1NUQVQoMCkpKSAmIDB4MWUwMDAwKSB7Ci0JCWlmICgodmFsICYgMHg5ZjAwMDApID09IDB4MjAwMDApCi0JCQludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9DSEFOTkVMX1NUQVQoMCksCi0JCQkJCQkJdmFsIHwgMHg4MDAwMDApOwotCi0JCWlmICgodmFsICYgMHgzZjAwMDApID09IDB4MzAwMDApCi0JCQludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9DSEFOTkVMX1NUQVQoMCksCi0JCQkJCQkJdmFsIHwgMHgyMDAwMDApOwotCi0JCWlmIChwdGltZXItPnJlYWQoZGV2KSAtIHN0YXJ0ID4gMTAwMDAwMDAwMFVMTCkgewotCQkJTlZfRVJST1IoZGV2LCAidGltZW91dDogKDB4NjEwMjAwICYgMHgxZTAwMDApICE9IDBcbiIpOwotCQkJTlZfRVJST1IoZGV2LCAiMHg2MTAyMDAgPSAweCUwOHhcbiIsIHZhbCk7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0JfQotCi0JbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfQ1RSTF9TVEFURSwgTlY1MF9QRElTUExBWV9DVFJMX1NUQVRFX0VOQUJMRSk7Ci0JbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfQ0hBTk5FTF9TVEFUKDApLCAweDEwMDBiMDMpOwotCWlmICghbnZfd2FpdChkZXYsIE5WNTBfUERJU1BMQVlfQ0hBTk5FTF9TVEFUKDApLAotCQkgICAgIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDApKSB7Ci0JCU5WX0VSUk9SKGRldiwgInRpbWVvdXQ6ICgweDYxMDIwMCAmIDB4NDAwMDAwMDApID09IDB4NDAwMDAwMDBcbiIpOwotCQlOVl9FUlJPUihkZXYsICIweDYxMDIwMCA9IDB4JTA4eFxuIiwKLQkJCSAgbnZfcmQzMihkZXYsIE5WNTBfUERJU1BMQVlfQ0hBTk5FTF9TVEFUKDApKSk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9DVVJTT1JfQ1VSU09SX0NUUkwyKGkpLCAweDIwMDApOwogCQlpZiAoIW52X3dhaXQoZGV2LCBOVjUwX1BESVNQTEFZX0NVUlNPUl9DVVJTT1JfQ1RSTDIoaSksCkBAIC0zNDEsMzkgKzE1MCwzMSBAQAogCQl9CiAJfQogCi0JbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfT0JKRUNUUywgKGV2by0+cmFtaW4tPnZpbnN0ID4+IDgpIHwgOSk7CisJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfUElPX0NUUkwsIDB4MDAwMDAwMDApOworCW52X21hc2soZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfSU5UUl9FTl8wLCAweDAwMDAwMDAwKTsKKwludl9tYXNrKGRldiwgTlY1MF9QRElTUExBWV9JTlRSXzEsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfRU5fMSwKKwkJICAgICBOVjUwX1BESVNQTEFZX0lOVFJfRU5fMV9DTEtfVU5LMTAgfAorCQkgICAgIE5WNTBfUERJU1BMQVlfSU5UUl9FTl8xX0NMS19VTksyMCB8CisJCSAgICAgTlY1MF9QRElTUExBWV9JTlRSX0VOXzFfQ0xLX1VOSzQwKTsKIAotCS8qIGluaXRpYWxpc2UgZmlmbyAqLwotCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0NIQU5ORUxfRE1BX0NCKDApLAotCQkoKGV2by0+cHVzaGJ1Zl9iby0+Ym8ubWVtLnN0YXJ0IDw8IFBBR0VfU0hJRlQpID4+IDgpIHwKLQkJTlY1MF9QRElTUExBWV9DSEFOTkVMX0RNQV9DQl9MT0NBVElPTl9WUkFNIHwKLQkJTlY1MF9QRElTUExBWV9DSEFOTkVMX0RNQV9DQl9WQUxJRCk7Ci0JbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfQ0hBTk5FTF9VTksyKDApLCAweDAwMDEwMDAwKTsKLQludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9DSEFOTkVMX1VOSzMoMCksIDB4MDAwMDAwMDIpOwotCWlmICghbnZfd2FpdChkZXYsIDB4NjEwMjAwLCAweDgwMDAwMDAwLCAweDAwMDAwMDAwKSkgewotCQlOVl9FUlJPUihkZXYsICJ0aW1lb3V0OiAoMHg2MTAyMDAgJiAweDgwMDAwMDAwKSA9PSAwXG4iKTsKLQkJTlZfRVJST1IoZGV2LCAiMHg2MTAyMDAgPSAweCUwOHhcbiIsIG52X3JkMzIoZGV2LCAweDYxMDIwMCkpOwotCQlyZXR1cm4gLUVCVVNZOworCS8qIGVuYWJsZSBob3RwbHVnIGludGVycnVwdHMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpjb25uID0gbm91dmVhdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKKworCQlpZiAoY29ubi0+ZGNiLT5ncGlvX3RhZyA9PSAweGZmKQorCQkJY29udGludWU7CisKKwkJcGdwaW8tPmlycV9lbmFibGUoZGV2LCBjb25uLT5kY2ItPmdwaW9fdGFnLCB0cnVlKTsKIAl9Ci0JbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfQ0hBTk5FTF9TVEFUKDApLAotCQkobnZfcmQzMihkZXYsIE5WNTBfUERJU1BMQVlfQ0hBTk5FTF9TVEFUKDApKSAmIH4weDAwMDAwMDAzKSB8Ci0JCSBOVjUwX1BESVNQTEFZX0NIQU5ORUxfU1RBVF9ETUFfRU5BQkxFRCk7Ci0JbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfVVNFUl9QVVQoMCksIDApOwotCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0NIQU5ORUxfU1RBVCgwKSwgMHgwMTAwMDAwMyB8Ci0JCU5WNTBfUERJU1BMQVlfQ0hBTk5FTF9TVEFUX0RNQV9FTkFCTEVEKTsKLQludl93cjMyKGRldiwgMHg2MTAzMDAsIG52X3JkMzIoZGV2LCAweDYxMDMwMCkgJiB+MSk7CiAKLQlldm8tPmRtYS5tYXggPSAoNDA5Ni80KSAtIDI7Ci0JZXZvLT5kbWEucHV0ID0gMDsKLQlldm8tPmRtYS5jdXIgPSBldm8tPmRtYS5wdXQ7Ci0JZXZvLT5kbWEuZnJlZSA9IGV2by0+ZG1hLm1heCAtIGV2by0+ZG1hLmN1cjsKLQotCXJldCA9IFJJTkdfU1BBQ0UoZXZvLCBOT1VWRUFVX0RNQV9TS0lQUyk7CisJcmV0ID0gbnY1MF9ldm9faW5pdChkZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CisJZXZvID0gZGV2X3ByaXYtPmV2bzsKIAotCWZvciAoaSA9IDA7IGkgPCBOT1VWRUFVX0RNQV9TS0lQUzsgaSsrKQotCQlPVVRfUklORyhldm8sIDApOworCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX09CSkVDVFMsIChldm8tPnJhbWluLT52aW5zdCA+PiA4KSB8IDkpOwogCiAJcmV0ID0gUklOR19TUEFDRShldm8sIDExKTsKIAlpZiAocmV0KQpAQCAtMzkzLDIxICsxOTQsNiBAQAogCWlmICghbnZfd2FpdChkZXYsIDB4NjQwMDA0LCAweGZmZmZmZmZmLCBldm8tPmRtYS5wdXQgPDwgMikpCiAJCU5WX0VSUk9SKGRldiwgImV2byBwdXNoYnVmIHN0YWxsZWRcbiIpOwogCi0JLyogZW5hYmxlIGNsb2NrIGNoYW5nZSBpbnRlcnJ1cHRzLiAqLwotCW52X3dyMzIoZGV2LCAweDYxMDAyOCwgMHgwMDAxMDAwMSk7Ci0JbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfSU5UUl9FTiwgKE5WNTBfUERJU1BMQVlfSU5UUl9FTl9DTEtfVU5LMTAgfAotCQkJCQkgICAgIE5WNTBfUERJU1BMQVlfSU5UUl9FTl9DTEtfVU5LMjAgfAotCQkJCQkgICAgIE5WNTBfUERJU1BMQVlfSU5UUl9FTl9DTEtfVU5LNDApKTsKLQotCS8qIGVuYWJsZSBob3RwbHVnIGludGVycnVwdHMgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKLQkJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpjb25uID0gbm91dmVhdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQotCQlpZiAoY29ubi0+ZGNiLT5ncGlvX3RhZyA9PSAweGZmKQotCQkJY29udGludWU7Ci0KLQkJcGdwaW8tPmlycV9lbmFibGUoZGV2LCBjb25uLT5kY2ItPmdwaW9fdGFnLCB0cnVlKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1MiwxMyArMjM4LDcgQEAKIAkJfQogCX0KIAotCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0NIQU5ORUxfU1RBVCgwKSwgMCk7Ci0JbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfQ1RSTF9TVEFURSwgMCk7Ci0JaWYgKCFudl93YWl0KGRldiwgTlY1MF9QRElTUExBWV9DSEFOTkVMX1NUQVQoMCksIDB4MWUwMDAwLCAwKSkgewotCQlOVl9FUlJPUihkZXYsICJ0aW1lb3V0OiAoMHg2MTAyMDAgJiAweDFlMDAwMCkgPT0gMFxuIik7Ci0JCU5WX0VSUk9SKGRldiwgIjB4NjEwMjAwID0gMHglMDh4XG4iLAotCQkJICBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9DSEFOTkVMX1NUQVQoMCkpKTsKLQl9CisJbnY1MF9ldm9fZmluaShkZXYpOwogCiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewogCQlpZiAoIW52X3dhaXQoZGV2LCBOVjUwX1BESVNQTEFZX1NPUl9EUE1TX1NUQVRFKGkpLApAQCAtNDcwLDcgKzI1MCw3IEBACiAJfQogCiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzLiAqLwotCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfRU4sIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfRU5fMSwgMHgwMDAwMDAwMCk7CiAKIAkvKiBkaXNhYmxlIGhvdHBsdWcgaW50ZXJydXB0cyAqLwogCW52X3dyMzIoZGV2LCAweGUwNTQsIDB4ZmZmZmZmZmYpOwpAQCAtNTA4LDEzICsyODgsNiBAQAogCiAJZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlID0gZGV2X3ByaXYtPmZiX3BoeXM7CiAKLQkvKiBDcmVhdGUgRVZPIGNoYW5uZWwgKi8KLQlyZXQgPSBudjUwX2V2b19jaGFubmVsX25ldyhkZXYsICZkZXZfcHJpdi0+ZXZvKTsKLQlpZiAocmV0KSB7Ci0JCU5WX0VSUk9SKGRldiwgIkVycm9yIGNyZWF0aW5nIEVWTyBjaGFubmVsOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KIAkvKiBDcmVhdGUgQ1JUQyBvYmplY3RzICovCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKIAkJbnY1MF9jcnRjX2NyZWF0ZShkZXYsIGkpOwpAQCAtNTU3LDYgKzMzMCw5IEBACiAJCX0KIAl9CiAKKwlJTklUX1dPUksoJmRldl9wcml2LT5pcnFfd29yaywgbnY1MF9kaXNwbGF5X2lycV9oYW5kbGVyX2JoKTsKKwlub3V2ZWF1X2lycV9yZWdpc3RlcihkZXYsIDI2LCBudjUwX2Rpc3BsYXlfaXNyKTsKKwogCXJldCA9IG52NTBfZGlzcGxheV9pbml0KGRldik7CiAJaWYgKHJldCkgewogCQludjUwX2Rpc3BsYXlfZGVzdHJveShkZXYpOwpAQCAtNTY5LDE0ICszNDUsMTIgQEAKIHZvaWQKIG52NTBfZGlzcGxheV9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQogCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGV2KTsKIAogCW52NTBfZGlzcGxheV9kaXNhYmxlKGRldik7Ci0JbnY1MF9ldm9fY2hhbm5lbF9kZWwoJmRldl9wcml2LT5ldm8pOworCW5vdXZlYXVfaXJxX3VucmVnaXN0ZXIoZGV2LCAyNik7CiB9CiAKIHN0YXRpYyB1MTYKQEAgLTY2MCwzMiArNDM0LDMyIEBACiBudjUwX2Rpc3BsYXlfdmJsYW5rX2NydGNfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47Ci0Jc3RydWN0IGxpc3RfaGVhZCAqZW50cnksICp0bXA7CisJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgKnRtcDsKIAotCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgdG1wLCAmZGV2X3ByaXYtPnZibF93YWl0aW5nKSB7Ci0JCWNoYW4gPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsLCBudnN3LnZibF93YWl0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hhbiwgdG1wLCAmZGV2X3ByaXYtPnZibF93YWl0aW5nLAorCQkJCSBudnN3LnZibF93YWl0KSB7CisJCWlmIChjaGFuLT5udnN3LnZibHNlbV9oZWFkICE9IGNydGMpCisJCQljb250aW51ZTsKIAogCQlub3V2ZWF1X2JvX3dyMzIoY2hhbi0+bm90aWZpZXJfYm8sIGNoYW4tPm52c3cudmJsc2VtX29mZnNldCwKIAkJCQkJCWNoYW4tPm52c3cudmJsc2VtX3J2YWwpOwogCQlsaXN0X2RlbCgmY2hhbi0+bnZzdy52Ymxfd2FpdCk7CisJCWRybV92YmxhbmtfcHV0KGRldiwgY3J0Yyk7CiAJfQorCisJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCBjcnRjKTsKIH0KIAogc3RhdGljIHZvaWQKIG52NTBfZGlzcGxheV92YmxhbmtfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBpbnRyKQogewotCWludHIgJj0gTlY1MF9QRElTUExBWV9JTlRSXzFfVkJMQU5LX0NSVEM7Ci0KIAlpZiAoaW50ciAmIE5WNTBfUERJU1BMQVlfSU5UUl8xX1ZCTEFOS19DUlRDXzApCiAJCW52NTBfZGlzcGxheV92YmxhbmtfY3J0Y19oYW5kbGVyKGRldiwgMCk7CiAKIAlpZiAoaW50ciAmIE5WNTBfUERJU1BMQVlfSU5UUl8xX1ZCTEFOS19DUlRDXzEpCiAJCW52NTBfZGlzcGxheV92YmxhbmtfY3J0Y19oYW5kbGVyKGRldiwgMSk7CiAKLQludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9JTlRSX0VOLCBudl9yZDMyKGRldiwKLQkJICAgICBOVjUwX1BESVNQTEFZX0lOVFJfRU4pICYgfmludHIpOwotCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfMSwgaW50cik7CisJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfSU5UUl8xLCBOVjUwX1BESVNQTEFZX0lOVFJfMV9WQkxBTktfQ1JUQyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMDExLDEwOCArNzg1LDMxIEBACiBzdGF0aWMgdm9pZAogbnY1MF9kaXNwbGF5X2Vycm9yX2hhbmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQl1aW50MzJfdCBhZGRyLCBkYXRhOworCXUzMiBjaGFubmVscyA9IChudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9JTlRSXzApICYgMHgwMDFmMDAwMCkgPj4gMTY7CisJdTMyIGFkZHIsIGRhdGE7CisJaW50IGNoaWQ7CiAKLQludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9JTlRSXzAsIDB4MDAwMTAwMDApOwotCWFkZHIgPSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9UUkFQUEVEX0FERFIpOwotCWRhdGEgPSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9UUkFQUEVEX0RBVEEpOwotCi0JTlZfRVJST1IoZGV2LCAiRXZvQ2ggJWQgTXRoZCAweCUwNHggRGF0YSAweCUwOHggKDB4JTA0eCAweCUwMngpXG4iLAotCQkgMCwgYWRkciAmIDB4ZmZjLCBkYXRhLCBhZGRyID4+IDE2LCAoYWRkciA+PiAxMikgJiAweGYpOwotCi0JbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfVFJBUFBFRF9BRERSLCAweDkwMDAwMDAwKTsKLX0KLQotdm9pZAotbnY1MF9kaXNwbGF5X2lycV9ob3RwbHVnX2JoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUsIGhwZF93b3JrKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCWNvbnN0IHVpbnQzMl90IGdwaW9fcmVnWzRdID0geyAweGUxMDQsIDB4ZTEwOCwgMHhlMjgwLCAweGUyODQgfTsKLQl1aW50MzJfdCB1bnBsdWdfbWFzaywgcGx1Z19tYXNrLCBjaGFuZ2VfbWFzazsKLQl1aW50MzJfdCBocGQwLCBocGQxOwotCi0Jc3Bpbl9sb2NrX2lycSgmZGV2X3ByaXYtPmhwZF9zdGF0ZS5sb2NrKTsKLQlocGQwID0gZGV2X3ByaXYtPmhwZF9zdGF0ZS5ocGQwX2JpdHM7Ci0JZGV2X3ByaXYtPmhwZF9zdGF0ZS5ocGQwX2JpdHMgPSAwOwotCWhwZDEgPSBkZXZfcHJpdi0+aHBkX3N0YXRlLmhwZDFfYml0czsKLQlkZXZfcHJpdi0+aHBkX3N0YXRlLmhwZDFfYml0cyA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZkZXZfcHJpdi0+aHBkX3N0YXRlLmxvY2spOwotCi0JaHBkMCAmPSBudl9yZDMyKGRldiwgMHhlMDUwKTsKLQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHg5MCkKLQkJaHBkMSAmPSBudl9yZDMyKGRldiwgMHhlMDcwKTsKLQotCXBsdWdfbWFzayAgID0gKGhwZDAgJiAweDAwMDBmZmZmKSB8IChocGQxIDw8IDE2KTsKLQl1bnBsdWdfbWFzayA9IChocGQwID4+IDE2KSB8IChocGQxICYgMHhmZmZmMDAwMCk7Ci0JY2hhbmdlX21hc2sgPSBwbHVnX21hc2sgfCB1bnBsdWdfbWFzazsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgewotCQlzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICpoZWxwZXI7Ci0JCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqbnZfY29ubmVjdG9yID0KLQkJCW5vdXZlYXVfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0JCXN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXI7Ci0JCXN0cnVjdCBkY2JfZ3Bpb19lbnRyeSAqZ3BpbzsKLQkJdWludDMyX3QgcmVnOwotCQlib29sIHBsdWdnZWQ7Ci0KLQkJaWYgKCFudl9jb25uZWN0b3ItPmRjYikKKwlmb3IgKGNoaWQgPSAwOyBjaGlkIDwgNTsgY2hpZCsrKSB7CisJCWlmICghKGNoYW5uZWxzICYgKDEgPDwgY2hpZCkpKQogCQkJY29udGludWU7CiAKLQkJZ3BpbyA9IG5vdXZlYXVfYmlvc19ncGlvX2VudHJ5KGRldiwgbnZfY29ubmVjdG9yLT5kY2ItPmdwaW9fdGFnKTsKLQkJaWYgKCFncGlvIHx8ICEoY2hhbmdlX21hc2sgJiAoMSA8PCBncGlvLT5saW5lKSkpCi0JCQljb250aW51ZTsKKwkJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfSU5UUl8wLCAweDAwMDEwMDAwIDw8IGNoaWQpOworCQlhZGRyID0gbnZfcmQzMihkZXYsIE5WNTBfUERJU1BMQVlfVFJBUFBFRF9BRERSKGNoaWQpKTsKKwkJZGF0YSA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX1RSQVBQRURfREFUQShjaGlkKSk7CisJCU5WX0VSUk9SKGRldiwgIkV2b0NoICVkIE10aGQgMHglMDR4IERhdGEgMHglMDh4ICIKKwkJCSAgICAgICIoMHglMDR4IDB4JTAyeClcbiIsIGNoaWQsCisJCQkgYWRkciAmIDB4ZmZjLCBkYXRhLCBhZGRyID4+IDE2LCAoYWRkciA+PiAxMikgJiAweGYpOwogCi0JCXJlZyA9IG52X3JkMzIoZGV2LCBncGlvX3JlZ1tncGlvLT5saW5lID4+IDNdKTsKLQkJcGx1Z2dlZCA9ICEhKHJlZyAmICg0IDw8ICgoZ3Bpby0+bGluZSAmIDcpIDw8IDIpKSk7Ci0JCU5WX0lORk8oZGV2LCAiJXNwbHVnZ2VkICVzXG4iLCBwbHVnZ2VkID8gIiIgOiAidW4iLAotCQkJZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKSA7Ci0KLQkJaWYgKCFjb25uZWN0b3ItPmVuY29kZXIgfHwgIWNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YyB8fAotCQkgICAgIWNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0Yy0+ZW5hYmxlZCkKLQkJCWNvbnRpbnVlOwotCQludl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGNvbm5lY3Rvci0+ZW5jb2Rlcik7Ci0JCWhlbHBlciA9IGNvbm5lY3Rvci0+ZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7Ci0KLQkJaWYgKG52X2VuY29kZXItPmRjYi0+dHlwZSAhPSBPVVRQVVRfRFApCi0JCQljb250aW51ZTsKLQotCQlpZiAocGx1Z2dlZCkKLQkJCWhlbHBlci0+ZHBtcyhjb25uZWN0b3ItPmVuY29kZXIsIERSTV9NT0RFX0RQTVNfT04pOwotCQllbHNlCi0JCQloZWxwZXItPmRwbXMoY29ubmVjdG9yLT5lbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7CisJCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX1RSQVBQRURfQUREUihjaGlkKSwgMHg5MDAwMDAwMCk7CiAJfQotCi0JZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGRldik7CiB9CiAKLXZvaWQKLW52NTBfZGlzcGxheV9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQKK252NTBfZGlzcGxheV9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IGRlbGF5ZWQgPSAwOwogCi0JaWYgKG52X3JkMzIoZGV2LCBOVjUwX1BNQ19JTlRSXzApICYgTlY1MF9QTUNfSU5UUl8wX0hPVFBMVUcpIHsKLQkJdWludDMyX3QgaHBkMF9iaXRzLCBocGQxX2JpdHMgPSAwOwotCi0JCWhwZDBfYml0cyA9IG52X3JkMzIoZGV2LCAweGUwNTQpOwotCQludl93cjMyKGRldiwgMHhlMDU0LCBocGQwX2JpdHMpOwotCi0JCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDkwKSB7Ci0JCQlocGQxX2JpdHMgPSBudl9yZDMyKGRldiwgMHhlMDc0KTsKLQkJCW52X3dyMzIoZGV2LCAweGUwNzQsIGhwZDFfYml0cyk7Ci0JCX0KLQotCQlzcGluX2xvY2soJmRldl9wcml2LT5ocGRfc3RhdGUubG9jayk7Ci0JCWRldl9wcml2LT5ocGRfc3RhdGUuaHBkMF9iaXRzIHw9IGhwZDBfYml0czsKLQkJZGV2X3ByaXYtPmhwZF9zdGF0ZS5ocGQxX2JpdHMgfD0gaHBkMV9iaXRzOwotCQlzcGluX3VubG9jaygmZGV2X3ByaXYtPmhwZF9zdGF0ZS5sb2NrKTsKLQotCQlxdWV1ZV93b3JrKGRldl9wcml2LT53cSwgJmRldl9wcml2LT5ocGRfd29yayk7Ci0JfQotCiAJd2hpbGUgKG52X3JkMzIoZGV2LCBOVjUwX1BNQ19JTlRSXzApICYgTlY1MF9QTUNfSU5UUl8wX0RJU1BMQVkpIHsKIAkJdWludDMyX3QgaW50cjAgPSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9JTlRSXzApOwogCQl1aW50MzJfdCBpbnRyMSA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfMSk7CkBAIC0xMTIzLDkgKzgyMCw5IEBACiAJCWlmICghaW50cjAgJiYgIShpbnRyMSAmIH5kZWxheWVkKSkKIAkJCWJyZWFrOwogCi0JCWlmIChpbnRyMCAmIDB4MDAwMTAwMDApIHsKKwkJaWYgKGludHIwICYgMHgwMDFmMDAwMCkgewogCQkJbnY1MF9kaXNwbGF5X2Vycm9yX2hhbmRsZXIoZGV2KTsKLQkJCWludHIwICY9IH4weDAwMDEwMDAwOworCQkJaW50cjAgJj0gfjB4MDAxZjAwMDA7CiAJCX0KIAogCQlpZiAoaW50cjEgJiBOVjUwX1BESVNQTEFZX0lOVFJfMV9WQkxBTktfQ1JUQykgewpAQCAtMTE1Niw0ICs4NTMsMyBAQAogCQl9CiAJfQogfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGlzcGxheS5oCmluZGV4IGM1NTFmMGIuLmYwZTMwYjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuaApAQCAtMzUsOSArMzUsNyBAQAogI2luY2x1ZGUgIm5vdXZlYXVfY3J0Yy5oIgogI2luY2x1ZGUgIm52NTBfZXZvLmgiCiAKLXZvaWQgbnY1MF9kaXNwbGF5X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBudjUwX2Rpc3BsYXlfaXJxX2hhbmRsZXJfYmgoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXZvaWQgbnY1MF9kaXNwbGF5X2lycV9ob3RwbHVnX2JoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBpbnQgbnY1MF9kaXNwbGF5X2Vhcmx5X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIG52NTBfZGlzcGxheV9sYXRlX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogaW50IG52NTBfZGlzcGxheV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2V2by5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ldm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGUyNGU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ldm8uYwpAQCAtMCwwICsxLDM0NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEJlbiBTa2VnZ3MKKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorCisjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKKyNpbmNsdWRlICJub3V2ZWF1X2RtYS5oIgorI2luY2x1ZGUgIm5vdXZlYXVfcmFtaHQuaCIKKworc3RhdGljIHZvaWQKK252NTBfZXZvX2NoYW5uZWxfZGVsKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKipwZXZvKQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdjsKKwlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpldm8gPSAqcGV2bzsKKworCWlmICghZXZvKQorCQlyZXR1cm47CisJKnBldm8gPSBOVUxMOworCisJZGV2X3ByaXYgPSBldm8tPmRldi0+ZGV2X3ByaXZhdGU7CisJZGV2X3ByaXYtPmV2b19hbGxvYyAmPSB+KDEgPDwgZXZvLT5pZCk7CisKKwlub3V2ZWF1X2dwdW9ial9jaGFubmVsX3Rha2Vkb3duKGV2byk7CisJbm91dmVhdV9ib191bm1hcChldm8tPnB1c2hidWZfYm8pOworCW5vdXZlYXVfYm9fcmVmKE5VTEwsICZldm8tPnB1c2hidWZfYm8pOworCisJaWYgKGV2by0+dXNlcikKKwkJaW91bm1hcChldm8tPnVzZXIpOworCisJa2ZyZWUoZXZvKTsKK30KKworaW50CitudjUwX2V2b19kbWFvYmpfbmV3KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmV2bywgdTMyIGNsYXNzLCB1MzIgbmFtZSwKKwkJICAgIHUzMiB0aWxlX2ZsYWdzLCB1MzIgbWFnaWNfZmxhZ3MsIHUzMiBvZmZzZXQsIHUzMiBsaW1pdCwKKwkJICAgIHUzMiBmbGFnczUpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZXZvLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBldm8tPmRldjsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKm9iaiA9IE5VTEw7CisJaW50IHJldDsKKworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ldyhkZXYsIGRldl9wcml2LT5ldm8sIDYqNCwgMzIsIDAsICZvYmopOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJb2JqLT5lbmdpbmUgPSBOVk9CSl9FTkdJTkVfRElTUExBWTsKKworCW52X3dvMzIob2JqLCAgMCwgKHRpbGVfZmxhZ3MgPDwgMjIpIHwgKG1hZ2ljX2ZsYWdzIDw8IDE2KSB8IGNsYXNzKTsKKwludl93bzMyKG9iaiwgIDQsIGxpbWl0KTsKKwludl93bzMyKG9iaiwgIDgsIG9mZnNldCk7CisJbnZfd28zMihvYmosIDEyLCAweDAwMDAwMDAwKTsKKwludl93bzMyKG9iaiwgMTYsIDB4MDAwMDAwMDApOworCW52X3dvMzIob2JqLCAyMCwgZmxhZ3M1KTsKKwlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKKworCXJldCA9IG5vdXZlYXVfcmFtaHRfaW5zZXJ0KGV2bywgbmFtZSwgb2JqKTsKKwlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJm9iaik7CisJaWYgKHJldCkgeworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitudjUwX2V2b19jaGFubmVsX25ldyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICoqcGV2bykKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmV2bzsKKwlpbnQgcmV0OworCisJZXZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCksIEdGUF9LRVJORUwpOworCWlmICghZXZvKQorCQlyZXR1cm4gLUVOT01FTTsKKwkqcGV2byA9IGV2bzsKKworCWZvciAoZXZvLT5pZCA9IDA7IGV2by0+aWQgPCA1OyBldm8tPmlkKyspIHsKKwkJaWYgKGRldl9wcml2LT5ldm9fYWxsb2MgJiAoMSA8PCBldm8tPmlkKSkKKwkJCWNvbnRpbnVlOworCisJCWRldl9wcml2LT5ldm9fYWxsb2MgfD0gKDEgPDwgZXZvLT5pZCk7CisJCWJyZWFrOworCX0KKworCWlmIChldm8tPmlkID09IDUpIHsKKwkJa2ZyZWUoZXZvKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZXZvLT5kZXYgPSBkZXY7CisJZXZvLT51c2VyX2dldCA9IDQ7CisJZXZvLT51c2VyX3B1dCA9IDA7CisKKwlyZXQgPSBub3V2ZWF1X2JvX25ldyhkZXYsIE5VTEwsIDQwOTYsIDAsIFRUTV9QTF9GTEFHX1ZSQU0sIDAsIDAsCisJCQkgICAgIGZhbHNlLCB0cnVlLCAmZXZvLT5wdXNoYnVmX2JvKTsKKwlpZiAocmV0ID09IDApCisJCXJldCA9IG5vdXZlYXVfYm9fcGluKGV2by0+cHVzaGJ1Zl9ibywgVFRNX1BMX0ZMQUdfVlJBTSk7CisJaWYgKHJldCkgeworCQlOVl9FUlJPUihkZXYsICJFcnJvciBjcmVhdGluZyBFVk8gRE1BIHB1c2ggYnVmZmVyOiAlZFxuIiwgcmV0KTsKKwkJbnY1MF9ldm9fY2hhbm5lbF9kZWwocGV2byk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbm91dmVhdV9ib19tYXAoZXZvLT5wdXNoYnVmX2JvKTsKKwlpZiAocmV0KSB7CisJCU5WX0VSUk9SKGRldiwgIkVycm9yIG1hcHBpbmcgRVZPIERNQSBwdXNoIGJ1ZmZlcjogJWRcbiIsIHJldCk7CisJCW52NTBfZXZvX2NoYW5uZWxfZGVsKHBldm8pOworCQlyZXR1cm4gcmV0OworCX0KKworCWV2by0+dXNlciA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMCkgKworCQkJICAgIE5WNTBfUERJU1BMQVlfVVNFUihldm8tPmlkKSwgUEFHRV9TSVpFKTsKKwlpZiAoIWV2by0+dXNlcikgeworCQlOVl9FUlJPUihkZXYsICJFcnJvciBtYXBwaW5nIEVWTyBjb250cm9sIHJlZ3MuXG4iKTsKKwkJbnY1MF9ldm9fY2hhbm5lbF9kZWwocGV2byk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIGJpbmQgcHJpbWFyeSBldm8gY2hhbm5lbCdzIHJhbWh0IHRvIHRoZSBjaGFubmVsICovCisJaWYgKGRldl9wcml2LT5ldm8gJiYgZXZvICE9IGRldl9wcml2LT5ldm8pCisJCW5vdXZlYXVfcmFtaHRfcmVmKGRldl9wcml2LT5ldm8tPnJhbWh0LCAmZXZvLT5yYW1odCwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbnY1MF9ldm9fY2hhbm5lbF9pbml0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmV2bykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZXZvLT5kZXY7CisJaW50IGlkID0gZXZvLT5pZCwgcmV0LCBpOworCXU2NCBwdXNoYnVmID0gZXZvLT5wdXNoYnVmX2JvLT5iby5tZW0uc3RhcnQgPDwgUEFHRV9TSElGVDsKKwl1MzIgdG1wOworCisJdG1wID0gbnZfcmQzMihkZXYsIE5WNTBfUERJU1BMQVlfRVZPX0NUUkwoaWQpKTsKKwlpZiAoKHRtcCAmIDB4MDA5ZjAwMDApID09IDB4MDAwMjAwMDApCisJCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0VWT19DVFJMKGlkKSwgdG1wIHwgMHgwMDgwMDAwMCk7CisKKwl0bXAgPSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9FVk9fQ1RSTChpZCkpOworCWlmICgodG1wICYgMHgwMDNmMDAwMCkgPT0gMHgwMDAzMDAwMCkKKwkJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfRVZPX0NUUkwoaWQpLCB0bXAgfCAweDAwNjAwMDAwKTsKKworCS8qIGluaXRpYWxpc2UgZmlmbyAqLworCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0VWT19ETUFfQ0IoaWQpLCBwdXNoYnVmID4+IDggfAorCQkgICAgIE5WNTBfUERJU1BMQVlfRVZPX0RNQV9DQl9MT0NBVElPTl9WUkFNIHwKKwkJICAgICBOVjUwX1BESVNQTEFZX0VWT19ETUFfQ0JfVkFMSUQpOworCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0VWT19VTksyKGlkKSwgMHgwMDAxMDAwMCk7CisJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfRVZPX0hBU0hfVEFHKGlkKSwgaWQpOworCW52X21hc2soZGV2LCBOVjUwX1BESVNQTEFZX0VWT19DVFJMKGlkKSwgTlY1MF9QRElTUExBWV9FVk9fQ1RSTF9ETUEsCisJCSAgICAgTlY1MF9QRElTUExBWV9FVk9fQ1RSTF9ETUFfRU5BQkxFRCk7CisKKwludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9VU0VSX1BVVChpZCksIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0VWT19DVFJMKGlkKSwgMHgwMTAwMDAwMyB8CisJCSAgICAgTlY1MF9QRElTUExBWV9FVk9fQ1RSTF9ETUFfRU5BQkxFRCk7CisJaWYgKCFudl93YWl0KGRldiwgTlY1MF9QRElTUExBWV9FVk9fQ1RSTChpZCksIDB4ODAwMDAwMDAsIDB4MDAwMDAwMDApKSB7CisJCU5WX0VSUk9SKGRldiwgIkV2b0NoICVkIGluaXQgdGltZW91dDogMHglMDh4XG4iLCBpZCwKKwkJCSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9FVk9fQ1RSTChpZCkpKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBlbmFibGUgZXJyb3IgcmVwb3J0aW5nIG9uIHRoZSBjaGFubmVsICovCisJbnZfbWFzayhkZXYsIDB4NjEwMDI4LCAweDAwMDAwMDAwLCAweDAwMDEwMDAxIDw8IGlkKTsKKworCWV2by0+ZG1hLm1heCA9ICg0MDk2LzQpIC0gMjsKKwlldm8tPmRtYS5wdXQgPSAwOworCWV2by0+ZG1hLmN1ciA9IGV2by0+ZG1hLnB1dDsKKwlldm8tPmRtYS5mcmVlID0gZXZvLT5kbWEubWF4IC0gZXZvLT5kbWEuY3VyOworCisJcmV0ID0gUklOR19TUEFDRShldm8sIE5PVVZFQVVfRE1BX1NLSVBTKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IE5PVVZFQVVfRE1BX1NLSVBTOyBpKyspCisJCU9VVF9SSU5HKGV2bywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK252NTBfZXZvX2NoYW5uZWxfZmluaShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpldm8pCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGV2by0+ZGV2OworCWludCBpZCA9IGV2by0+aWQ7CisKKwludl9tYXNrKGRldiwgMHg2MTAwMjgsIDB4MDAwMTAwMDEgPDwgaWQsIDB4MDAwMDAwMDApOworCW52X21hc2soZGV2LCBOVjUwX1BESVNQTEFZX0VWT19DVFJMKGlkKSwgMHgwMDAwMTAxMCwgMHgwMDAwMTAwMCk7CisJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfSU5UUl8wLCAoMSA8PCBpZCkpOworCW52X21hc2soZGV2LCBOVjUwX1BESVNQTEFZX0VWT19DVFJMKGlkKSwgMHgwMDAwMDAwMywgMHgwMDAwMDAwMCk7CisJaWYgKCFudl93YWl0KGRldiwgTlY1MF9QRElTUExBWV9FVk9fQ1RSTChpZCksIDB4MDAxZTAwMDAsIDB4MDAwMDAwMDApKSB7CisJCU5WX0VSUk9SKGRldiwgIkV2b0NoICVkIHRha2Vkb3duIHRpbWVvdXQ6IDB4JTA4eFxuIiwgaWQsCisJCQkgbnZfcmQzMihkZXYsIE5WNTBfUERJU1BMQVlfRVZPX0NUUkwoaWQpKSk7CisJfQorfQorCitzdGF0aWMgaW50CitudjUwX2V2b19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcmFtaHQgPSBOVUxMOworCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmV2bzsKKwlpbnQgcmV0OworCisJLyogY3JlYXRlIHByaW1hcnkgZXZvIGNoYW5uZWwsIHRoZSBvbmUgd2UgdXNlIGZvciBtb2Rlc2V0dGluZworCSAqIHB1cnBvcnNlcworCSAqLworCXJldCA9IG52NTBfZXZvX2NoYW5uZWxfbmV3KGRldiwgJmRldl9wcml2LT5ldm8pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJZXZvID0gZGV2X3ByaXYtPmV2bzsKKworCS8qIHNldHVwIG9iamVjdCBtYW5hZ2VtZW50IG9uIGl0LCBhbnkgb3RoZXIgZXZvIGNoYW5uZWwgd2lsbAorCSAqIHVzZSB0aGlzIGFsc28gYXMgdGhlcmUncyBubyBwZXItY2hhbm5lbCBzdXBwb3J0IG9uIHRoZQorCSAqIGhhcmR3YXJlCisJICovCisJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3KGRldiwgTlVMTCwgMzI3NjgsIDY1NTM2LAorCQkJCSBOVk9CSl9GTEFHX1pFUk9fQUxMT0MsICZldm8tPnJhbWluKTsKKwlpZiAocmV0KSB7CisJCU5WX0VSUk9SKGRldiwgIkVycm9yIGFsbG9jYXRpbmcgRVZPIGNoYW5uZWwgbWVtb3J5OiAlZFxuIiwgcmV0KTsKKwkJbnY1MF9ldm9fY2hhbm5lbF9kZWwoJmRldl9wcml2LT5ldm8pOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGRybV9tbV9pbml0KCZldm8tPnJhbWluX2hlYXAsIDAsIDMyNzY4KTsKKwlpZiAocmV0KSB7CisJCU5WX0VSUk9SKGRldiwgIkVycm9yIGluaXRpYWxpc2luZyBFVk8gUFJBTUlOIGhlYXA6ICVkXG4iLCByZXQpOworCQludjUwX2V2b19jaGFubmVsX2RlbCgmZGV2X3ByaXYtPmV2byk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3KGRldiwgZXZvLCA0MDk2LCAxNiwgMCwgJnJhbWh0KTsKKwlpZiAocmV0KSB7CisJCU5WX0VSUk9SKGRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBFVk8gUkFNSFQ6ICVkXG4iLCByZXQpOworCQludjUwX2V2b19jaGFubmVsX2RlbCgmZGV2X3ByaXYtPmV2byk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbm91dmVhdV9yYW1odF9uZXcoZGV2LCByYW1odCwgJmV2by0+cmFtaHQpOworCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmcmFtaHQpOworCWlmIChyZXQpIHsKKwkJbnY1MF9ldm9fY2hhbm5lbF9kZWwoJmRldl9wcml2LT5ldm8pOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIGNyZWF0ZSBzb21lIGRlZmF1bHQgb2JqZWN0cyBmb3IgdGhlIHNjYW5vdXQgbWVtdHlwZXMgd2Ugc3VwcG9ydCAqLworCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WX0MwKSB7CisJCXJldCA9IG52NTBfZXZvX2RtYW9ial9uZXcoZXZvLCAweDNkLCBOdkV2b0ZCMzIsIDB4ZmUsIDB4MTksCisJCQkJCSAgMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCk7CisJCWlmIChyZXQpIHsKKwkJCW52NTBfZXZvX2NoYW5uZWxfZGVsKCZkZXZfcHJpdi0+ZXZvKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSBudjUwX2V2b19kbWFvYmpfbmV3KGV2bywgMHgzZCwgTnZFdm9WUkFNLCAwLCAweDE5LAorCQkJCQkgIDAsIGRldl9wcml2LT52cmFtX3NpemUsIDB4MDAwMjAwMDApOworCQlpZiAocmV0KSB7CisJCQludjUwX2V2b19jaGFubmVsX2RlbCgmZGV2X3ByaXYtPmV2byk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0ID0gbnY1MF9ldm9fZG1hb2JqX25ldyhldm8sIDB4M2QsIE52RXZvVlJBTV9MUCwgMCwgMHgxOSwKKwkJCQkJICAwLCBkZXZfcHJpdi0+dnJhbV9zaXplLCAweDAwMDAwMDAwKTsKKwkJaWYgKHJldCkgeworCQkJbnY1MF9ldm9fY2hhbm5lbF9kZWwoJmRldl9wcml2LT5ldm8pOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gZWxzZQorCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDUwKSB7CisJCXJldCA9IG52NTBfZXZvX2RtYW9ial9uZXcoZXZvLCAweDNkLCBOdkV2b0ZCMTYsIDB4NzAsIDB4MTksCisJCQkJCSAgMCwgMHhmZmZmZmZmZiwgMHgwMDAxMDAwMCk7CisJCWlmIChyZXQpIHsKKwkJCW52NTBfZXZvX2NoYW5uZWxfZGVsKCZkZXZfcHJpdi0+ZXZvKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCisJCXJldCA9IG52NTBfZXZvX2RtYW9ial9uZXcoZXZvLCAweDNkLCBOdkV2b0ZCMzIsIDB4N2EsIDB4MTksCisJCQkJCSAgMCwgMHhmZmZmZmZmZiwgMHgwMDAxMDAwMCk7CisJCWlmIChyZXQpIHsKKwkJCW52NTBfZXZvX2NoYW5uZWxfZGVsKCZkZXZfcHJpdi0+ZXZvKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSBudjUwX2V2b19kbWFvYmpfbmV3KGV2bywgMHgzZCwgTnZFdm9WUkFNLCAwLCAweDE5LAorCQkJCQkgIDAsIGRldl9wcml2LT52cmFtX3NpemUsIDB4MDAwMTAwMDApOworCQlpZiAocmV0KSB7CisJCQludjUwX2V2b19jaGFubmVsX2RlbCgmZGV2X3ByaXYtPmV2byk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0ID0gbnY1MF9ldm9fZG1hb2JqX25ldyhldm8sIDB4M2QsIE52RXZvVlJBTV9MUCwgMCwgMHgxOSwKKwkJCQkJICAwLCBkZXZfcHJpdi0+dnJhbV9zaXplLCAweDAwMDEwMDAwKTsKKwkJaWYgKHJldCkgeworCQkJbnY1MF9ldm9fY2hhbm5lbF9kZWwoJmRldl9wcml2LT5ldm8pOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQKK252NTBfZXZvX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CisKKwlpZiAoIWRldl9wcml2LT5ldm8pIHsKKwkJcmV0ID0gbnY1MF9ldm9fY3JlYXRlKGRldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBudjUwX2V2b19jaGFubmVsX2luaXQoZGV2X3ByaXYtPmV2byk7Cit9CisKK3ZvaWQKK252NTBfZXZvX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9wcml2LT5ldm8pIHsKKwkJbnY1MF9ldm9fY2hhbm5lbF9maW5pKGRldl9wcml2LT5ldm8pOworCQludjUwX2V2b19jaGFubmVsX2RlbCgmZGV2X3ByaXYtPmV2byk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ldm8uaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmgKaW5kZXggYWFlMTMzNC4uYWE0ZjBkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ldm8uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2V2by5oCkBAIC0yNCw2ICsyNCwxNSBAQAogICoKICAqLwogCisjaWZuZGVmIF9fTlY1MF9FVk9fSF9fCisjZGVmaW5lIF9fTlY1MF9FVk9fSF9fCisKK2ludCAgbnY1MF9ldm9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgbnY1MF9ldm9fZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCAgbnY1MF9ldm9fZG1hb2JqX25ldyhzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosIHUzMiBjbGFzcywgdTMyIG5hbWUsCisJCQkgdTMyIHRpbGVfZmxhZ3MsIHUzMiBtYWdpY19mbGFncywKKwkJCSB1MzIgb2Zmc2V0LCB1MzIgbGltaXQpOworCiAjZGVmaW5lIE5WNTBfRVZPX1VQREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCiAjZGVmaW5lIE5WNTBfRVZPX1VOSzg0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDg0CiAjZGVmaW5lIE5WNTBfRVZPX1VOSzg0X05PVElGWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCkBAIC0xMTEsMyArMTIwLDQgQEAKICNkZWZpbmUgTlY1MF9FVk9fQ1JUQ19TQ0FMRV9SRVMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4ZDgKICNkZWZpbmUgTlY1MF9FVk9fQ1JUQ19TQ0FMRV9SRVMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4ZGMKIAorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZiLmMKaW5kZXggY2QxOTg4Yi4uNTAyOTBkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmIuYwpAQCAtMywzMCArMyw3NSBAQAogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCiAjaW5jbHVkZSAibm91dmVhdV9kcm0uaCIKIAorc3RydWN0IG52NTBfZmJfcHJpdiB7CisJc3RydWN0IHBhZ2UgKnIxMDBjMDhfcGFnZTsKKwlkbWFfYWRkcl90IHIxMDBjMDg7Cit9OworCitzdGF0aWMgaW50CitudjUwX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG52NTBfZmJfcHJpdiAqcHJpdjsKKworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5yMTAwYzA4X3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwlpZiAoIXByaXYtPnIxMDBjMDhfcGFnZSkgeworCQlrZnJlZShwcml2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcHJpdi0+cjEwMGMwOCA9IHBjaV9tYXBfcGFnZShkZXYtPnBkZXYsIHByaXYtPnIxMDBjMDhfcGFnZSwgMCwKKwkJCQkgICAgIFBBR0VfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRldi0+cGRldiwgcHJpdi0+cjEwMGMwOCkpIHsKKwkJX19mcmVlX3BhZ2UocHJpdi0+cjEwMGMwOF9wYWdlKTsKKwkJa2ZyZWUocHJpdik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWRldl9wcml2LT5lbmdpbmUuZmIucHJpdiA9IHByaXY7CisJcmV0dXJuIDA7Cit9CisKIGludAogbnY1MF9mYl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbnY1MF9mYl9wcml2ICpwcml2OworCWludCByZXQ7CisKKwlpZiAoIWRldl9wcml2LT5lbmdpbmUuZmIucHJpdikgeworCQlyZXQgPSBudjUwX2ZiX2NyZWF0ZShkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJcHJpdiA9IGRldl9wcml2LT5lbmdpbmUuZmIucHJpdjsKIAogCS8qIE5vdCBhIGNsdWUgd2hhdCB0aGlzIGlzIGV4YWN0bHkuICBXaXRob3V0IHBvaW50aW5nIGl0IGF0IGEKIAkgKiBzY3JhdGNoIHBhZ2UsIFZSQU0tPkdBUlQgYmxpdHMgd2l0aCBNMk1GIChhcyBpbiBERFggREZTKQogCSAqIGNhdXNlIElPTU1VICJyZWFkIGZyb20gYWRkcmVzcyAwIiBlcnJvcnMgKHJoIzU2MTI2NykKIAkgKi8KLQludl93cjMyKGRldiwgMHgxMDBjMDgsIGRldl9wcml2LT5nYXJ0X2luZm8uc2dfZHVtbXlfYnVzID4+IDgpOworCW52X3dyMzIoZGV2LCAweDEwMGMwOCwgcHJpdi0+cjEwMGMwOCA+PiA4KTsKIAogCS8qIFRoaXMgaXMgbmVlZGVkIHRvIGdldCBtZWFuaW5nZnVsIGluZm9ybWF0aW9uIGZyb20gMTAwYzkwCiAJICogb24gdHJhcHMuIE5vIGlkZWEgd2hhdCB0aGVzZSB2YWx1ZXMgbWVhbiBleGFjdGx5LiAqLwogCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKIAljYXNlIDB4NTA6Ci0JCW52X3dyMzIoZGV2LCAweDEwMGM5MCwgMHgwNzA3ZmYpOworCQludl93cjMyKGRldiwgMHgxMDBjOTAsIDB4MDAwNzA3ZmYpOwogCQlicmVhazsKIAljYXNlIDB4YTM6CiAJY2FzZSAweGE1OgogCWNhc2UgMHhhODoKLQkJbnZfd3IzMihkZXYsIDB4MTAwYzkwLCAweDBkMGZmZik7CisJCW52X3dyMzIoZGV2LCAweDEwMGM5MCwgMHgwMDBkMGZmZik7CisJCWJyZWFrOworCWNhc2UgMHhhZjoKKwkJbnZfd3IzMihkZXYsIDB4MTAwYzkwLCAweDA4OWQxZmZmKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJbnZfd3IzMihkZXYsIDB4MTAwYzkwLCAweDFkMDdmZik7CisJCW52X3dyMzIoZGV2LCAweDEwMGM5MCwgMHgwMDFkMDdmZik7CiAJCWJyZWFrOwogCX0KIApAQCAtMzYsMTIgKzgxLDI1IEBACiB2b2lkCiBudjUwX2ZiX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbnY1MF9mYl9wcml2ICpwcml2OworCisJcHJpdiA9IGRldl9wcml2LT5lbmdpbmUuZmIucHJpdjsKKwlpZiAoIXByaXYpCisJCXJldHVybjsKKwlkZXZfcHJpdi0+ZW5naW5lLmZiLnByaXYgPSBOVUxMOworCisJcGNpX3VubWFwX3BhZ2UoZGV2LT5wZGV2LCBwcml2LT5yMTAwYzA4LCBQQUdFX1NJWkUsCisJCSAgICAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCV9fZnJlZV9wYWdlKHByaXYtPnIxMDBjMDhfcGFnZSk7CisJa2ZyZWUocHJpdik7CiB9CiAKIHZvaWQKIG52NTBfZmJfdm1fdHJhcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZGlzcGxheSwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRyYXBbNl0sIGlkeCwgY2hpbnN0OwogCWludCBpLCBjaDsKIApAQCAtNjAsOCArMTE4LDEwIEBACiAJCXJldHVybjsKIAogCWNoaW5zdCA9ICh0cmFwWzJdIDw8IDE2KSB8IHRyYXBbMV07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmNoYW5uZWxzLmxvY2ssIGZsYWdzKTsKIAlmb3IgKGNoID0gMDsgY2ggPCBkZXZfcHJpdi0+ZW5naW5lLmZpZm8uY2hhbm5lbHM7IGNoKyspIHsKLQkJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiA9IGRldl9wcml2LT5maWZvc1tjaF07CisJCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbHMucHRyW2NoXTsKIAogCQlpZiAoIWNoYW4gfHwgIWNoYW4tPnJhbWluKQogCQkJY29udGludWU7CkBAIC02OSw2ICsxMjksNyBAQAogCQlpZiAoY2hpbnN0ID09IGNoYW4tPnJhbWluLT52aW5zdCA+PiAxMikKIAkJCWJyZWFrOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y2hhbm5lbHMubG9jaywgZmxhZ3MpOwogCiAJTlZfSU5GTyhkZXYsICIlcyAtIFZNOiBUcmFwcGVkICVzIGF0ICUwMnglMDR4JTA0eCBzdGF0dXMgJTA4eCAiCiAJCSAgICAgImNoYW5uZWwgJWQgKDB4JTA4eClcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZiY29uLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZiY29uLmMKaW5kZXggNmRjZjA0OC4uNzkxZGVkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9mYmNvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmJjb24uYwpAQCAtMSwyOSArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEJlbiBTa2VnZ3MKKyAqLworCiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCiAjaW5jbHVkZSAibm91dmVhdV9kbWEuaCIKICNpbmNsdWRlICJub3V2ZWF1X3JhbWh0LmgiCiAjaW5jbHVkZSAibm91dmVhdV9mYmNvbi5oIgorI2luY2x1ZGUgIm5vdXZlYXVfbW0uaCIKIAotdm9pZAoraW50CiBudjUwX2ZiY29uX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCiB7CiAJc3RydWN0IG5vdXZlYXVfZmJkZXYgKm5mYmRldiA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbmZiZGV2LT5kZXY7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZGV2X3ByaXYtPmNoYW5uZWw7CisJaW50IHJldDsKIAotCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORykKLQkJcmV0dXJuOwotCi0JaWYgKCEoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgJiYKLQkgICAgIFJJTkdfU1BBQ0UoY2hhbiwgcmVjdC0+cm9wID09IFJPUF9DT1BZID8gNyA6IDExKSkgewotCQlub3V2ZWF1X2ZiY29uX2dwdV9sb2NrdXAoaW5mbyk7Ci0JfQotCi0JaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpIHsKLQkJY2ZiX2ZpbGxyZWN0KGluZm8sIHJlY3QpOwotCQlyZXR1cm47Ci0JfQorCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgcmVjdC0+cm9wID09IFJPUF9DT1BZID8gNyA6IDExKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJaWYgKHJlY3QtPnJvcCAhPSBST1BfQ09QWSkgewogCQlCRUdJTl9SSU5HKGNoYW4sIE52U3ViMkQsIDB4MDJhYywgMSk7CkBAIC00NSwyNyArNjIsMjEgQEAKIAkJT1VUX1JJTkcoY2hhbiwgMyk7CiAJfQogCUZJUkVfUklORyhjaGFuKTsKKwlyZXR1cm4gMDsKIH0KIAotdm9pZAoraW50CiBudjUwX2ZiY29uX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKnJlZ2lvbikKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9mYmRldiAqbmZiZGV2ID0gaW5mby0+cGFyOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBuZmJkZXYtPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbDsKKwlpbnQgcmV0OwogCi0JaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQotCQlyZXR1cm47Ci0KLQlpZiAoIShpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSAmJiBSSU5HX1NQQUNFKGNoYW4sIDEyKSkgewotCQlub3V2ZWF1X2ZiY29uX2dwdV9sb2NrdXAoaW5mbyk7Ci0JfQotCi0JaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpIHsKLQkJY2ZiX2NvcHlhcmVhKGluZm8sIHJlZ2lvbik7Ci0JCXJldHVybjsKLQl9CisJcmV0ID0gUklOR19TUEFDRShjaGFuLCAxMik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCUJFR0lOX1JJTkcoY2hhbiwgTnZTdWIyRCwgMHgwMTEwLCAxKTsKIAlPVVRfUklORyhjaGFuLCAwKTsKQEAgLTgwLDkgKzkxLDEwIEBACiAJT1VUX1JJTkcoY2hhbiwgMCk7CiAJT1VUX1JJTkcoY2hhbiwgcmVnaW9uLT5zeSk7CiAJRklSRV9SSU5HKGNoYW4pOworCXJldHVybiAwOwogfQogCi12b2lkCitpbnQKIG52NTBfZmJjb25faW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQogewogCXN0cnVjdCBub3V2ZWF1X2ZiZGV2ICpuZmJkZXYgPSBpbmZvLT5wYXI7CkBAIC05MiwyMyArMTA0LDE0IEBACiAJdWludDMyX3Qgd2lkdGgsIGR3b3JkcywgKmRhdGEgPSAodWludDMyX3QgKilpbWFnZS0+ZGF0YTsKIAl1aW50MzJfdCBtYXNrID0gfih+MCA+PiAoMzIgLSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpKTsKIAl1aW50MzJfdCAqcGFsZXR0ZSA9IGluZm8tPnBzZXVkb19wYWxldHRlOworCWludCByZXQ7CiAKLQlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCi0JCXJldHVybjsKKwlpZiAoaW1hZ2UtPmRlcHRoICE9IDEpCisJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGltYWdlLT5kZXB0aCAhPSAxKSB7Ci0JCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCEoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgJiYgUklOR19TUEFDRShjaGFuLCAxMSkpIHsKLQkJbm91dmVhdV9mYmNvbl9ncHVfbG9ja3VwKGluZm8pOwotCX0KLQotCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSB7Ci0JCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwotCQlyZXR1cm47Ci0JfQorCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgMTEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAl3aWR0aCA9IEFMSUdOKGltYWdlLT53aWR0aCwgMzIpOwogCWR3b3JkcyA9ICh3aWR0aCAqIGltYWdlLT5oZWlnaHQpID4+IDU7CkBAIC0xMzQsMTEgKzEzNyw5IEBACiAJd2hpbGUgKGR3b3JkcykgewogCQlpbnQgcHVzaCA9IGR3b3JkcyA+IDIwNDcgPyAyMDQ3IDogZHdvcmRzOwogCi0JCWlmIChSSU5HX1NQQUNFKGNoYW4sIHB1c2ggKyAxKSkgewotCQkJbm91dmVhdV9mYmNvbl9ncHVfbG9ja3VwKGluZm8pOwotCQkJY2ZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7Ci0JCQlyZXR1cm47Ci0JCX0KKwkJcmV0ID0gUklOR19TUEFDRShjaGFuLCBwdXNoICsgMSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCiAJCWR3b3JkcyAtPSBwdXNoOwogCkBAIC0xNDgsNiArMTQ5LDcgQEAKIAl9CiAKIAlGSVJFX1JJTkcoY2hhbik7CisJcmV0dXJuIDA7CiB9CiAKIGludApAQCAtMTU3LDEyICsxNTksOSBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBuZmJkZXYtPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbDsKLQlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmVuZzJkID0gTlVMTDsKLQl1aW50NjRfdCBmYjsKKwlzdHJ1Y3Qgbm91dmVhdV9ibyAqbnZibyA9IG5mYmRldi0+bm91dmVhdV9mYi5udmJvOwogCWludCByZXQsIGZvcm1hdDsKIAotCWZiID0gaW5mby0+Zml4LnNtZW1fc3RhcnQgLSBkZXZfcHJpdi0+ZmJfcGh5cyArIGRldl9wcml2LT52bV92cmFtX2Jhc2U7Ci0KIAlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgewogCWNhc2UgODoKIAkJZm9ybWF0ID0gMHhmMzsKQEAgLTE5MCwxMiArMTg5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0ID0gbm91dmVhdV9ncHVvYmpfZ3JfbmV3KGRldl9wcml2LT5jaGFubmVsLCAweDUwMmQsICZlbmcyZCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IG5vdXZlYXVfcmFtaHRfaW5zZXJ0KGRldl9wcml2LT5jaGFubmVsLCBOdjJELCBlbmcyZCk7Ci0Jbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZlbmcyZCk7CisJcmV0ID0gbm91dmVhdV9ncHVvYmpfZ3JfbmV3KGRldl9wcml2LT5jaGFubmVsLCBOdjJELCAweDUwMmQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTI1Myw4ICsyNDcsOCBAQAogCU9VVF9SSU5HKGNoYW4sIGluZm8tPmZpeC5saW5lX2xlbmd0aCk7CiAJT1VUX1JJTkcoY2hhbiwgaW5mby0+dmFyLnhyZXNfdmlydHVhbCk7CiAJT1VUX1JJTkcoY2hhbiwgaW5mby0+dmFyLnlyZXNfdmlydHVhbCk7Ci0JT1VUX1JJTkcoY2hhbiwgdXBwZXJfMzJfYml0cyhmYikpOwotCU9VVF9SSU5HKGNoYW4sIGxvd2VyXzMyX2JpdHMoZmIpKTsKKwlPVVRfUklORyhjaGFuLCB1cHBlcl8zMl9iaXRzKG52Ym8tPnZtYS5vZmZzZXQpKTsKKwlPVVRfUklORyhjaGFuLCBsb3dlcl8zMl9iaXRzKG52Ym8tPnZtYS5vZmZzZXQpKTsKIAlCRUdJTl9SSU5HKGNoYW4sIE52U3ViMkQsIDB4MDIzMCwgMik7CiAJT1VUX1JJTkcoY2hhbiwgZm9ybWF0KTsKIAlPVVRfUklORyhjaGFuLCAxKTsKQEAgLTI2Miw4ICsyNTYsOCBAQAogCU9VVF9SSU5HKGNoYW4sIGluZm8tPmZpeC5saW5lX2xlbmd0aCk7CiAJT1VUX1JJTkcoY2hhbiwgaW5mby0+dmFyLnhyZXNfdmlydHVhbCk7CiAJT1VUX1JJTkcoY2hhbiwgaW5mby0+dmFyLnlyZXNfdmlydHVhbCk7Ci0JT1VUX1JJTkcoY2hhbiwgdXBwZXJfMzJfYml0cyhmYikpOwotCU9VVF9SSU5HKGNoYW4sIGxvd2VyXzMyX2JpdHMoZmIpKTsKKwlPVVRfUklORyhjaGFuLCB1cHBlcl8zMl9iaXRzKG52Ym8tPnZtYS5vZmZzZXQpKTsKKwlPVVRfUklORyhjaGFuLCBsb3dlcl8zMl9iaXRzKG52Ym8tPnZtYS5vZmZzZXQpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9maWZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYwppbmRleCAxZGE2NWJkLi44ZGQwNGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCiAjaW5jbHVkZSAibm91dmVhdV9yYW1odC5oIgorI2luY2x1ZGUgIm5vdXZlYXVfdm0uaCIKIAogc3RhdGljIHZvaWQKIG52NTBfZmlmb19wbGF5bGlzdF91cGRhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTQ0LDcgKzQ1LDggQEAKIAogCS8qIFdlIG5ldmVyIHNjaGVkdWxlIGNoYW5uZWwgMCBvciAxMjcgKi8KIAlmb3IgKGkgPSAxLCBuciA9IDA7IGkgPCAxMjc7IGkrKykgewotCQlpZiAoZGV2X3ByaXYtPmZpZm9zW2ldICYmIGRldl9wcml2LT5maWZvc1tpXS0+cmFtZmMpIHsKKwkJaWYgKGRldl9wcml2LT5jaGFubmVscy5wdHJbaV0gJiYKKwkJICAgIGRldl9wcml2LT5jaGFubmVscy5wdHJbaV0tPnJhbWZjKSB7CiAJCQludl93bzMyKGN1ciwgKG5yICogNCksIGkpOwogCQkJbnIrKzsKIAkJfQpAQCAtNjAsNyArNjIsNyBAQAogbnY1MF9maWZvX2NoYW5uZWxfZW5hYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjaGFubmVsKQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiA9IGRldl9wcml2LT5maWZvc1tjaGFubmVsXTsKKwlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZGV2X3ByaXYtPmNoYW5uZWxzLnB0cltjaGFubmVsXTsKIAl1aW50MzJfdCBpbnN0OwogCiAJTlZfREVCVUcoZGV2LCAiY2glZFxuIiwgY2hhbm5lbCk7CkBAIC0xMDUsNiArMTA3LDcgQEAKIHsKIAlOVl9ERUJVRyhkZXYsICJcbiIpOwogCisJbm91dmVhdV9pcnFfcmVnaXN0ZXIoZGV2LCA4LCBudjA0X2ZpZm9faXNyKTsKIAludl93cjMyKGRldiwgTlYwM19QRklGT19JTlRSXzAsIDB4RkZGRkZGRkYpOwogCW52X3dyMzIoZGV2LCBOVjAzX1BGSUZPX0lOVFJfRU5fMCwgMHhGRkZGRkZGRik7CiB9CkBAIC0xMTgsNyArMTIxLDcgQEAKIAlOVl9ERUJVRyhkZXYsICJcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IE5WNTBfUEZJRk9fQ1RYX1RBQkxFX19TSVpFOyBpKyspIHsKLQkJaWYgKGRldl9wcml2LT5maWZvc1tpXSkKKwkJaWYgKGRldl9wcml2LT5jaGFubmVscy5wdHJbaV0pCiAJCQludjUwX2ZpZm9fY2hhbm5lbF9lbmFibGUoZGV2LCBpKTsKIAkJZWxzZQogCQkJbnY1MF9maWZvX2NoYW5uZWxfZGlzYWJsZShkZXYsIGkpOwpAQCAtMjA2LDYgKzIwOSw5IEBACiAJaWYgKCFwZmlmby0+cGxheWxpc3RbMF0pCiAJCXJldHVybjsKIAorCW52X3dyMzIoZGV2LCAweDIxNDAsIDB4MDAwMDAwMDApOworCW5vdXZlYXVfaXJxX3VucmVnaXN0ZXIoZGV2LCA4KTsKKwogCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmcGZpZm8tPnBsYXlsaXN0WzBdKTsKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJnBmaWZvLT5wbGF5bGlzdFsxXSk7CiB9CkBAIC0yNTYsNiArMjYyLDExIEBACiAJfQogCXJhbWZjID0gY2hhbi0+cmFtZmM7CiAKKwljaGFuLT51c2VyID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAwKSArCisJCQkgICAgIE5WNTBfVVNFUihjaGFuLT5pZCksIFBBR0VfU0laRSk7CisJaWYgKCFjaGFuLT51c2VyKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOwogCiAJbnZfd28zMihyYW1mYywgMHg0OCwgY2hhbi0+cHVzaGJ1Zi0+Y2luc3QgPj4gNCk7CkBAIC0yOTEsMTAgKzMwMiwyMyBAQAogbnY1MF9maWZvX2Rlc3Ryb3lfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9maWZvX2VuZ2luZSAqcGZpZm8gPSAmZGV2X3ByaXYtPmVuZ2luZS5maWZvOwogCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcmFtZmMgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlOVl9ERUJVRyhkZXYsICJjaCVkXG4iLCBjaGFuLT5pZCk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKKwlwZmlmby0+cmVhc3NpZ24oZGV2LCBmYWxzZSk7CisKKwkvKiBVbmxvYWQgdGhlIGNvbnRleHQgaWYgaXQncyB0aGUgY3VycmVudGx5IGFjdGl2ZSBvbmUgKi8KKwlpZiAocGZpZm8tPmNoYW5uZWxfaWQoZGV2KSA9PSBjaGFuLT5pZCkgeworCQlwZmlmby0+ZGlzYWJsZShkZXYpOworCQlwZmlmby0+dW5sb2FkX2NvbnRleHQoZGV2KTsKKwkJcGZpZm8tPmVuYWJsZShkZXYpOworCX0KKwogCS8qIFRoaXMgd2lsbCBlbnN1cmUgdGhlIGNoYW5uZWwgaXMgc2VlbiBhcyBkaXNhYmxlZC4gKi8KIAlub3V2ZWF1X2dwdW9ial9yZWYoY2hhbi0+cmFtZmMsICZyYW1mYyk7CiAJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZjaGFuLT5yYW1mYyk7CkBAIC0zMDUsNiArMzI5LDE0IEBACiAJCW52NTBfZmlmb19jaGFubmVsX2Rpc2FibGUoZGV2LCAxMjcpOwogCW52NTBfZmlmb19wbGF5bGlzdF91cGRhdGUoZGV2KTsKIAorCXBmaWZvLT5yZWFzc2lnbihkZXYsIHRydWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisKKwkvKiBGcmVlIHRoZSBjaGFubmVsIHJlc291cmNlcyAqLworCWlmIChjaGFuLT51c2VyKSB7CisJCWlvdW5tYXAoY2hhbi0+dXNlcik7CisJCWNoYW4tPnVzZXIgPSBOVUxMOworCX0KIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJnJhbWZjKTsKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmNoYW4tPmNhY2hlKTsKIH0KQEAgLTM5Miw3ICs0MjQsNyBAQAogCWlmIChjaGlkIDwgMSB8fCBjaGlkID49IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVscyAtIDEpCiAJCXJldHVybiAwOwogCi0JY2hhbiA9IGRldl9wcml2LT5maWZvc1tjaGlkXTsKKwljaGFuID0gZGV2X3ByaXYtPmNoYW5uZWxzLnB0cltjaGlkXTsKIAlpZiAoIWNoYW4pIHsKIAkJTlZfRVJST1IoZGV2LCAiSW5hY3RpdmUgY2hhbm5lbCBvbiBQRklGTzogJWRcbiIsIGNoaWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ2Nyw1ICs0OTksNSBAQAogdm9pZAogbnY1MF9maWZvX3RsYl9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCW52NTBfdm1fZmx1c2goZGV2LCA1KTsKKwludjUwX3ZtX2ZsdXNoX2VuZ2luZShkZXYsIDUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncGlvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dwaW8uYwppbmRleCBiMmZhYjJiLi42YjE0OWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dwaW8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dwaW8uYwpAQCAtMjYsNiArMjYsMjggQEAKICNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgogI2luY2x1ZGUgIm5vdXZlYXVfaHcuaCIKIAorI2luY2x1ZGUgIm52NTBfZGlzcGxheS5oIgorCitzdGF0aWMgdm9pZCBudjUwX2dwaW9faXNyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgbnY1MF9ncGlvX2lzcl9iaChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCitzdHJ1Y3QgbnY1MF9ncGlvX3ByaXYgeworCXN0cnVjdCBsaXN0X2hlYWQgaGFuZGxlcnM7CisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworc3RydWN0IG52NTBfZ3Bpb19oYW5kbGVyIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlib29sIGluaGliaXQ7CisKKwlzdHJ1Y3QgZGNiX2dwaW9fZW50cnkgKmdwaW87CisKKwl2b2lkICgqaGFuZGxlcikodm9pZCAqZGF0YSwgaW50IHN0YXRlKTsKKwl2b2lkICpkYXRhOworfTsKKwogc3RhdGljIGludAogbnY1MF9ncGlvX2xvY2F0aW9uKHN0cnVjdCBkY2JfZ3Bpb19lbnRyeSAqZ3BpbywgdWludDMyX3QgKnJlZywgdWludDMyX3QgKnNoaWZ0KQogewpAQCAtNzUsMjkgKzk3LDEyMyBAQAogCXJldHVybiAwOwogfQogCitpbnQKK252NTBfZ3Bpb19pcnFfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBkY2JfZ3Bpb190YWcgdGFnLAorCQkgICAgICAgdm9pZCAoKmhhbmRsZXIpKHZvaWQgKiwgaW50KSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2dwaW9fZW5naW5lICpwZ3BpbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmdwaW87CisJc3RydWN0IG52NTBfZ3Bpb19wcml2ICpwcml2ID0gcGdwaW8tPnByaXY7CisJc3RydWN0IG52NTBfZ3Bpb19oYW5kbGVyICpncGlvaDsKKwlzdHJ1Y3QgZGNiX2dwaW9fZW50cnkgKmdwaW87CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWdwaW8gPSBub3V2ZWF1X2Jpb3NfZ3Bpb19lbnRyeShkZXYsIHRhZyk7CisJaWYgKCFncGlvKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWdwaW9oID0ga3phbGxvYyhzaXplb2YoKmdwaW9oKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFncGlvaCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX1dPUksoJmdwaW9oLT53b3JrLCBudjUwX2dwaW9faXNyX2JoKTsKKwlncGlvaC0+ZGV2ICA9IGRldjsKKwlncGlvaC0+Z3BpbyA9IGdwaW87CisJZ3Bpb2gtPmhhbmRsZXIgPSBoYW5kbGVyOworCWdwaW9oLT5kYXRhID0gZGF0YTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJmdwaW9oLT5oZWFkLCAmcHJpdi0+aGFuZGxlcnMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKwogdm9pZAorbnY1MF9ncGlvX2lycV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gZGNiX2dwaW9fdGFnIHRhZywKKwkJCSB2b2lkICgqaGFuZGxlcikodm9pZCAqLCBpbnQpLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfZ3Bpb19lbmdpbmUgKnBncGlvID0gJmRldl9wcml2LT5lbmdpbmUuZ3BpbzsKKwlzdHJ1Y3QgbnY1MF9ncGlvX3ByaXYgKnByaXYgPSBwZ3Bpby0+cHJpdjsKKwlzdHJ1Y3QgbnY1MF9ncGlvX2hhbmRsZXIgKmdwaW9oLCAqdG1wOworCXN0cnVjdCBkY2JfZ3Bpb19lbnRyeSAqZ3BpbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZ3BpbyA9IG5vdXZlYXVfYmlvc19ncGlvX2VudHJ5KGRldiwgdGFnKTsKKwlpZiAoIWdwaW8pCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGdwaW9oLCB0bXAsICZwcml2LT5oYW5kbGVycywgaGVhZCkgeworCQlpZiAoZ3Bpb2gtPmdwaW8gIT0gZ3BpbyB8fAorCQkgICAgZ3Bpb2gtPmhhbmRsZXIgIT0gaGFuZGxlciB8fAorCQkgICAgZ3Bpb2gtPmRhdGEgIT0gZGF0YSkKKwkJCWNvbnRpbnVlOworCQlsaXN0X2RlbCgmZ3Bpb2gtPmhlYWQpOworCQlrZnJlZShncGlvaCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30KKworYm9vbAogbnY1MF9ncGlvX2lycV9lbmFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBkY2JfZ3Bpb190YWcgdGFnLCBib29sIG9uKQogewogCXN0cnVjdCBkY2JfZ3Bpb19lbnRyeSAqZ3BpbzsKIAl1MzIgcmVnLCBtYXNrOwogCiAJZ3BpbyA9IG5vdXZlYXVfYmlvc19ncGlvX2VudHJ5KGRldiwgdGFnKTsKLQlpZiAoIWdwaW8pIHsKLQkJTlZfRVJST1IoZGV2LCAiZ3BpbyB0YWcgMHglMDJ4IG5vdCBmb3VuZFxuIiwgdGFnKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoIWdwaW8pCisJCXJldHVybiBmYWxzZTsKIAogCXJlZyAgPSBncGlvLT5saW5lIDwgMTYgPyAweGUwNTAgOiAweGUwNzA7CiAJbWFzayA9IDB4MDAwMTAwMDEgPDwgKGdwaW8tPmxpbmUgJiAweGYpOwogCiAJbnZfd3IzMihkZXYsIHJlZyArIDQsIG1hc2spOwotCW52X21hc2soZGV2LCByZWcgKyAwLCBtYXNrLCBvbiA/IG1hc2sgOiAwKTsKKwlyZWcgPSBudl9tYXNrKGRldiwgcmVnICsgMCwgbWFzaywgb24gPyBtYXNrIDogMCk7CisJcmV0dXJuIChyZWcgJiBtYXNrKSA9PSBtYXNrOworfQorCitzdGF0aWMgaW50CitudjUwX2dwaW9fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9ncGlvX2VuZ2luZSAqcGdwaW8gPSAmZGV2X3ByaXYtPmVuZ2luZS5ncGlvOworCXN0cnVjdCBudjUwX2dwaW9fcHJpdiAqcHJpdjsKKworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+aGFuZGxlcnMpOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlwZ3Bpby0+cHJpdiA9IHByaXY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dwaW9fZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfZ3Bpb19lbmdpbmUgKnBncGlvID0gJmRldl9wcml2LT5lbmdpbmUuZ3BpbzsKKworCWtmcmVlKHBncGlvLT5wcml2KTsKKwlwZ3Bpby0+cHJpdiA9IE5VTEw7CiB9CiAKIGludAogbnY1MF9ncGlvX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2dwaW9fZW5naW5lICpwZ3BpbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmdwaW87CisJc3RydWN0IG52NTBfZ3Bpb19wcml2ICpwcml2OworCWludCByZXQ7CisKKwlpZiAoIXBncGlvLT5wcml2KSB7CisJCXJldCA9IG52NTBfZ3Bpb19jcmVhdGUoZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCXByaXYgPSBwZ3Bpby0+cHJpdjsKIAogCS8qIGRpc2FibGUsIGFuZCBhY2sgYW55IHBlbmRpbmcgZ3BpbyBpbnRlcnJ1cHRzICovCiAJbnZfd3IzMihkZXYsIDB4ZTA1MCwgMHgwMDAwMDAwMCk7CkBAIC0xMDcsNSArMjIzLDc3IEBACiAJCW52X3dyMzIoZGV2LCAweGUwNzQsIDB4ZmZmZmZmZmYpOwogCX0KIAorCW5vdXZlYXVfaXJxX3JlZ2lzdGVyKGRldiwgMjEsIG52NTBfZ3Bpb19pc3IpOwogCXJldHVybiAwOwogfQorCit2b2lkCitudjUwX2dwaW9fZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwludl93cjMyKGRldiwgMHhlMDUwLCAweDAwMDAwMDAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHg5MCkKKwkJbnZfd3IzMihkZXYsIDB4ZTA3MCwgMHgwMDAwMDAwMCk7CisJbm91dmVhdV9pcnFfdW5yZWdpc3RlcihkZXYsIDIxKTsKKworCW52NTBfZ3Bpb19kZXN0cm95KGRldik7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dwaW9faXNyX2JoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbnY1MF9ncGlvX2hhbmRsZXIgKmdwaW9oID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBudjUwX2dwaW9faGFuZGxlciwgd29yayk7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3Bpb2gtPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfZ3Bpb19lbmdpbmUgKnBncGlvID0gJmRldl9wcml2LT5lbmdpbmUuZ3BpbzsKKwlzdHJ1Y3QgbnY1MF9ncGlvX3ByaXYgKnByaXYgPSBwZ3Bpby0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdGF0ZTsKKworCXN0YXRlID0gcGdwaW8tPmdldChncGlvaC0+ZGV2LCBncGlvaC0+Z3Bpby0+dGFnKTsKKwlpZiAoc3RhdGUgPCAwKQorCQlyZXR1cm47CisKKwlncGlvaC0+aGFuZGxlcihncGlvaC0+ZGF0YSwgc3RhdGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlncGlvaC0+aW5oaWJpdCA9IGZhbHNlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK252NTBfZ3Bpb19pc3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2dwaW9fZW5naW5lICpwZ3BpbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmdwaW87CisJc3RydWN0IG52NTBfZ3Bpb19wcml2ICpwcml2ID0gcGdwaW8tPnByaXY7CisJc3RydWN0IG52NTBfZ3Bpb19oYW5kbGVyICpncGlvaDsKKwl1MzIgaW50cjAsIGludHIxID0gMDsKKwl1MzIgaGksIGxvLCBjaDsKKworCWludHIwID0gbnZfcmQzMihkZXYsIDB4ZTA1NCkgJiBudl9yZDMyKGRldiwgMHhlMDUwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHg5MCkKKwkJaW50cjEgPSBudl9yZDMyKGRldiwgMHhlMDc0KSAmIG52X3JkMzIoZGV2LCAweGUwNzApOworCisJaGkgPSAoaW50cjAgJiAweDAwMDBmZmZmKSB8IChpbnRyMSA8PCAxNik7CisJbG8gPSAoaW50cjAgPj4gMTYpIHwgKGludHIxICYgMHhmZmZmMDAwMCk7CisJY2ggPSBoaSB8IGxvOworCisJbnZfd3IzMihkZXYsIDB4ZTA1NCwgaW50cjApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDkwKQorCQludl93cjMyKGRldiwgMHhlMDc0LCBpbnRyMSk7CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZ3Bpb2gsICZwcml2LT5oYW5kbGVycywgaGVhZCkgeworCQlpZiAoIShjaCAmICgxIDw8IGdwaW9oLT5ncGlvLT5saW5lKSkpCisJCQljb250aW51ZTsKKworCQlpZiAoZ3Bpb2gtPmluaGliaXQpCisJCQljb250aW51ZTsKKwkJZ3Bpb2gtPmluaGliaXQgPSB0cnVlOworCisJCXF1ZXVlX3dvcmsoZGV2X3ByaXYtPndxLCAmZ3Bpb2gtPndvcmspOworCX0KKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKaW5kZXggOGI2NjlkMC4uMmQ3ZWE3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwpAQCAtMjksNiArMjksMTIgQEAKICNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgogI2luY2x1ZGUgIm5vdXZlYXVfcmFtaHQuaCIKICNpbmNsdWRlICJub3V2ZWF1X2dyY3R4LmgiCisjaW5jbHVkZSAibm91dmVhdV9kbWEuaCIKKyNpbmNsdWRlICJub3V2ZWF1X3ZtLmgiCisjaW5jbHVkZSAibnY1MF9ldm8uaCIKKworc3RhdGljIGludCAgbnY1MF9ncmFwaF9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIG52NTBfZ3JhcGhfaXNyKHN0cnVjdCBkcm1fZGV2aWNlICopOwogCiBzdGF0aWMgdm9pZAogbnY1MF9ncmFwaF9pbml0X3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCkBAIC00Niw2ICs1Miw3IEBACiB7CiAJTlZfREVCVUcoZGV2LCAiXG4iKTsKIAorCW5vdXZlYXVfaXJxX3JlZ2lzdGVyKGRldiwgMTIsIG52NTBfZ3JhcGhfaXNyKTsKIAludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwgMHhmZmZmZmZmZik7CiAJbnZfd3IzMihkZXYsIDB4NDAwMTM4LCAweGZmZmZmZmZmKTsKIAludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfSU5UUl9FTiwgMHhmZmZmZmZmZik7CkBAIC0xNDUsMTIgKzE1MiwxNSBAQAogCW52NTBfZ3JhcGhfaW5pdF9yZXNldChkZXYpOwogCW52NTBfZ3JhcGhfaW5pdF9yZWdzX19udihkZXYpOwogCW52NTBfZ3JhcGhfaW5pdF9yZWdzKGRldik7Ci0JbnY1MF9ncmFwaF9pbml0X2ludHIoZGV2KTsKIAogCXJldCA9IG52NTBfZ3JhcGhfaW5pdF9jdHhjdGwoZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJcmV0ID0gbnY1MF9ncmFwaF9yZWdpc3RlcihkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJbnY1MF9ncmFwaF9pbml0X2ludHIoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU4LDYgKzE2OCw4IEBACiBudjUwX2dyYXBoX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJTlZfREVCVUcoZGV2LCAiXG4iKTsKKwludl93cjMyKGRldiwgMHg0MDAxM2MsIDB4MDAwMDAwMDApOworCW5vdXZlYXVfaXJxX3VucmVnaXN0ZXIoZGV2LCAxMik7CiB9CiAKIHZvaWQKQEAgLTE5MCw3ICsyMDIsNyBAQAogCWluc3QgPSAoaW5zdCAmIE5WNTBfUEdSQVBIX0NUWENUTF9DVVJfSU5TVEFOQ0UpIDw8IDEyOwogCiAJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVsczsgaSsrKSB7Ci0JCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Zmlmb3NbaV07CisJCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbHMucHRyW2ldOwogCiAJCWlmIChjaGFuICYmIGNoYW4tPnJhbWluICYmIGNoYW4tPnJhbWluLT52aW5zdCA9PSBpbnN0KQogCQkJcmV0dXJuIGNoYW47CkBAIC0yMTEsNyArMjIzLDcgQEAKIAogCU5WX0RFQlVHKGRldiwgImNoJWRcbiIsIGNoYW4tPmlkKTsKIAotCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ldyhkZXYsIGNoYW4sIHBncmFwaC0+Z3JjdHhfc2l6ZSwgMHgxMDAwLAorCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ldyhkZXYsIGNoYW4sIHBncmFwaC0+Z3JjdHhfc2l6ZSwgMCwKIAkJCQkgTlZPQkpfRkxBR19aRVJPX0FMTE9DIHwKIAkJCQkgTlZPQkpfRkxBR19aRVJPX0ZSRUUsICZjaGFuLT5yYW1pbl9ncmN0eCk7CiAJaWYgKHJldCkKQEAgLTIzNCw2ICsyNDYsNyBAQAogCW52X3dvMzIoY2hhbi0+cmFtaW5fZ3JjdHgsIDB4MDAwMDAsIGNoYW4tPnJhbWluLT52aW5zdCA+PiAxMik7CiAKIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKKwlhdG9taWNfaW5jKCZjaGFuLT52bS0+cGdyYXBoX3JlZnMpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDIsMTggKzI1NSwzMSBAQAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKIAlpbnQgaSwgaGRyID0gKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApID8gMHgyMDAgOiAweDIwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlOVl9ERUJVRyhkZXYsICJjaCVkXG4iLCBjaGFuLT5pZCk7CiAKIAlpZiAoIWNoYW4tPnJhbWluKQogCQlyZXR1cm47CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKKwlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgZmFsc2UpOworCisJaWYgKHBncmFwaC0+Y2hhbm5lbChkZXYpID09IGNoYW4pCisJCXBncmFwaC0+dW5sb2FkX2NvbnRleHQoZGV2KTsKKwogCWZvciAoaSA9IGhkcjsgaSA8IGhkciArIDI0OyBpICs9IDQpCiAJCW52X3dvMzIoY2hhbi0+cmFtaW4sIGksIDApOwogCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwogCisJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIHRydWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmNoYW4tPnJhbWluX2dyY3R4KTsKKworCWF0b21pY19kZWMoJmNoYW4tPnZtLT5wZ3JhcGhfcmVmcyk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTMwNiw3ICszMzIsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogbnY1MF9ncmFwaF9jb250ZXh0X3N3aXRjaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXVpbnQzMl90IGluc3Q7CkBAIC0zMjIsOCArMzQ4LDggQEAKIH0KIAogc3RhdGljIGludAotbnY1MF9ncmFwaF9udnN3X2RtYV92YmxzZW0oc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGdyY2xhc3MsCi0JCQkgICBpbnQgbXRoZCwgdWludDMyX3QgZGF0YSkKK252NTBfZ3JhcGhfbnZzd19kbWFfdmJsc2VtKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sCisJCQkgICB1MzIgY2xhc3MsIHUzMiBtdGhkLCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmdwdW9iajsKIApAQCAtMzQwLDggKzM2Niw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLW52NTBfZ3JhcGhfbnZzd192YmxzZW1fb2Zmc2V0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBncmNsYXNzLAotCQkJICAgICAgaW50IG10aGQsIHVpbnQzMl90IGRhdGEpCitudjUwX2dyYXBoX252c3dfdmJsc2VtX29mZnNldChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLAorCQkJICAgICAgdTMyIGNsYXNzLCB1MzIgbXRoZCwgdTMyIGRhdGEpCiB7CiAJaWYgKG5vdXZlYXVfbm90aWZpZXJfb2Zmc2V0KGNoYW4tPm52c3cudmJsc2VtLCAmZGF0YSkpCiAJCXJldHVybiAtRVJBTkdFOwpAQCAtMzUxLDE2ICszNzcsMTYgQEAKIH0KIAogc3RhdGljIGludAotbnY1MF9ncmFwaF9udnN3X3ZibHNlbV9yZWxlYXNlX3ZhbChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBpbnQgZ3JjbGFzcywKLQkJCQkgICBpbnQgbXRoZCwgdWludDMyX3QgZGF0YSkKK252NTBfZ3JhcGhfbnZzd192YmxzZW1fcmVsZWFzZV92YWwoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICB1MzIgY2xhc3MsIHUzMiBtdGhkLCB1MzIgZGF0YSkKIHsKIAljaGFuLT5udnN3LnZibHNlbV9ydmFsID0gZGF0YTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotbnY1MF9ncmFwaF9udnN3X3ZibHNlbV9yZWxlYXNlKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBncmNsYXNzLAotCQkJICAgICAgIGludCBtdGhkLCB1aW50MzJfdCBkYXRhKQorbnY1MF9ncmFwaF9udnN3X3ZibHNlbV9yZWxlYXNlKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sCisJCQkgICAgICAgdTMyIGNsYXNzLCB1MzIgbXRoZCwgdTMyIGRhdGEpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMzY4LDQ1ICszOTQsODUgQEAKIAlpZiAoIWNoYW4tPm52c3cudmJsc2VtIHx8IGNoYW4tPm52c3cudmJsc2VtX29mZnNldCA9PSB+MCB8fCBkYXRhID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIShudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9JTlRSX0VOKSAmCi0JCSAgICAgIE5WNTBfUERJU1BMQVlfSU5UUl9FTl9WQkxBTktfQ1JUQ18oZGF0YSkpKSB7Ci0JCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfMSwKLQkJCU5WNTBfUERJU1BMQVlfSU5UUl8xX1ZCTEFOS19DUlRDXyhkYXRhKSk7Ci0JCW52X3dyMzIoZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfRU4sIG52X3JkMzIoZGV2LAotCQkJTlY1MF9QRElTUExBWV9JTlRSX0VOKSB8Ci0JCQlOVjUwX1BESVNQTEFZX0lOVFJfRU5fVkJMQU5LX0NSVENfKGRhdGEpKTsKLQl9CisJZHJtX3ZibGFua19nZXQoZGV2LCBkYXRhKTsKIAorCWNoYW4tPm52c3cudmJsc2VtX2hlYWQgPSBkYXRhOwogCWxpc3RfYWRkKCZjaGFuLT5udnN3LnZibF93YWl0LCAmZGV2X3ByaXYtPnZibF93YWl0aW5nKTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9tZXRob2QgbnY1MF9ncmFwaF9udnN3X21ldGhvZHNbXSA9IHsKLQl7IDB4MDE4YywgbnY1MF9ncmFwaF9udnN3X2RtYV92YmxzZW0gfSwKLQl7IDB4MDQwMCwgbnY1MF9ncmFwaF9udnN3X3ZibHNlbV9vZmZzZXQgfSwKLQl7IDB4MDQwNCwgbnY1MF9ncmFwaF9udnN3X3ZibHNlbV9yZWxlYXNlX3ZhbCB9LAotCXsgMHgwNDA4LCBudjUwX2dyYXBoX252c3dfdmJsc2VtX3JlbGVhc2UgfSwKLQl7fQotfTsKK3N0YXRpYyBpbnQKK252NTBfZ3JhcGhfbnZzd19tdGhkX3BhZ2VfZmxpcChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLAorCQkJICAgICAgIHUzMiBjbGFzcywgdTMyIG10aGQsIHUzMiBkYXRhKQoreworCXN0cnVjdCBub3V2ZWF1X3BhZ2VfZmxpcF9zdGF0ZSBzOwogCi1zdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X2NsYXNzIG52NTBfZ3JhcGhfZ3JjbGFzc1tdID0gewotCXsgMHg1MDZlLCB0cnVlLCBudjUwX2dyYXBoX252c3dfbWV0aG9kcyB9LCAvKiBudnN3ICovCi0JeyAweDAwMzAsIGZhbHNlLCBOVUxMIH0sIC8qIG51bGwgKi8KLQl7IDB4NTAzOSwgZmFsc2UsIE5VTEwgfSwgLyogbTJtZiAqLwotCXsgMHg1MDJkLCBmYWxzZSwgTlVMTCB9LCAvKiAyZCAqLwotCXsgMHg1MGMwLCBmYWxzZSwgTlVMTCB9LCAvKiBjb21wdXRlICovCi0JeyAweDg1YzAsIGZhbHNlLCBOVUxMIH0sIC8qIGNvbXB1dGUgKG52YTMsIG52YTUsIG52YTgpICovCi0JeyAweDUwOTcsIGZhbHNlLCBOVUxMIH0sIC8qIHRlc2xhIChudjUwKSAqLwotCXsgMHg4Mjk3LCBmYWxzZSwgTlVMTCB9LCAvKiB0ZXNsYSAobnY4eC9udjl4KSAqLwotCXsgMHg4Mzk3LCBmYWxzZSwgTlVMTCB9LCAvKiB0ZXNsYSAobnZhMCwgbnZhYSwgbnZhYykgKi8KLQl7IDB4ODU5NywgZmFsc2UsIE5VTEwgfSwgLyogdGVzbGEgKG52YTMsIG52YTUsIG52YTgpICovCi0Je30KLX07CisJaWYgKCFub3V2ZWF1X2ZpbmlzaF9wYWdlX2ZsaXAoY2hhbiwgJnMpKSB7CisJCS8qIFhYWCAtIERvIHNvbWV0aGluZyBoZXJlICovCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK252NTBfZ3JhcGhfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9wcml2LT5lbmdpbmUuZ3JhcGgucmVnaXN0ZXJlZCkKKwkJcmV0dXJuIDA7CisKKwlOVk9CSl9DTEFTUyhkZXYsIDB4NTA2ZSwgU1cpOyAvKiBudnN3ICovCisJTlZPQkpfTVRIRCAoZGV2LCAweDUwNmUsIDB4MDE4YywgbnY1MF9ncmFwaF9udnN3X2RtYV92YmxzZW0pOworCU5WT0JKX01USEQgKGRldiwgMHg1MDZlLCAweDA0MDAsIG52NTBfZ3JhcGhfbnZzd192YmxzZW1fb2Zmc2V0KTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4NTA2ZSwgMHgwNDA0LCBudjUwX2dyYXBoX252c3dfdmJsc2VtX3JlbGVhc2VfdmFsKTsKKwlOVk9CSl9NVEhEIChkZXYsIDB4NTA2ZSwgMHgwNDA4LCBudjUwX2dyYXBoX252c3dfdmJsc2VtX3JlbGVhc2UpOworCU5WT0JKX01USEQgKGRldiwgMHg1MDZlLCAweDA1MDAsIG52NTBfZ3JhcGhfbnZzd19tdGhkX3BhZ2VfZmxpcCk7CisKKwlOVk9CSl9DTEFTUyhkZXYsIDB4MDAzMCwgR1IpOyAvKiBudWxsICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDUwMzksIEdSKTsgLyogbTJtZiAqLworCU5WT0JKX0NMQVNTKGRldiwgMHg1MDJkLCBHUik7IC8qIDJkICovCisKKwkvKiB0ZXNsYSAqLworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQlOVk9CSl9DTEFTUyhkZXYsIDB4NTA5NywgR1IpOyAvKiB0ZXNsYSAobnY1MCkgKi8KKwllbHNlCisJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJTlZPQkpfQ0xBU1MoZGV2LCAweDgyOTcsIEdSKTsgLyogdGVzbGEgKG52OHgvbnY5eCkgKi8KKwllbHNlIHsKKwkJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCQljYXNlIDB4YTA6CisJCWNhc2UgMHhhYToKKwkJY2FzZSAweGFjOgorCQkJTlZPQkpfQ0xBU1MoZGV2LCAweDgzOTcsIEdSKTsKKwkJCWJyZWFrOworCQljYXNlIDB4YTM6CisJCWNhc2UgMHhhNToKKwkJY2FzZSAweGE4OgorCQkJTlZPQkpfQ0xBU1MoZGV2LCAweDg1OTcsIEdSKTsKKwkJCWJyZWFrOworCQljYXNlIDB4YWY6CisJCQlOVk9CSl9DTEFTUyhkZXYsIDB4ODY5NywgR1IpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBjb21wdXRlICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDUwYzAsIEdSKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgID4gMHhhMCAmJgorCSAgICBkZXZfcHJpdi0+Y2hpcHNldCAhPSAweGFhICYmCisJICAgIGRldl9wcml2LT5jaGlwc2V0ICE9IDB4YWMpCisJCU5WT0JKX0NMQVNTKGRldiwgMHg4NWMwLCBHUik7CisKKwlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLnJlZ2lzdGVyZWQgPSB0cnVlOworCXJldHVybiAwOworfQogCiB2b2lkCiBudjUwX2dyYXBoX3RsYl9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCW52NTBfdm1fZmx1c2goZGV2LCAwKTsKKwludjUwX3ZtX2ZsdXNoX2VuZ2luZShkZXYsIDApOwogfQogCiB2b2lkCkBAIC00NDksOCArNTE1LDUzNSBAQAogCQkJIG52X3JkMzIoZGV2LCAweDQwMDM4NCksIG52X3JkMzIoZGV2LCAweDQwMDM4OCkpOwogCX0KIAotCW52NTBfdm1fZmx1c2goZGV2LCAwKTsKKwludjUwX3ZtX2ZsdXNoX2VuZ2luZShkZXYsIDApOwogCiAJbnZfbWFzayhkZXYsIDB4NDAwNTAwLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOwogfQorCitzdGF0aWMgc3RydWN0IG5vdXZlYXVfZW51bSBudjUwX21wX2V4ZWNfZXJyb3JfbmFtZXNbXSA9Cit7CisJeyAzLCAiU1RBQ0tfVU5ERVJGTE9XIiB9LAorCXsgNCwgIlFVQURPTl9BQ1RJVkUiIH0sCisJeyA4LCAiVElNRU9VVCIgfSwKKwl7IDB4MTAsICJJTlZBTElEX09QQ09ERSIgfSwKKwl7IDB4NDAsICJCUkVBS1BPSU5UIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IG5vdXZlYXVfYml0ZmllbGQgbnY1MF9ncmFwaF90cmFwX20ybWZbXSA9IHsKKwl7IDB4MDAwMDAwMDEsICJOT1RJRlkiIH0sCisJeyAweDAwMDAwMDAyLCAiSU4iIH0sCisJeyAweDAwMDAwMDA0LCAiT1VUIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IG5vdXZlYXVfYml0ZmllbGQgbnY1MF9ncmFwaF90cmFwX3ZmZXRjaFtdID0geworCXsgMHgwMDAwMDAwMSwgIkZBVUxUIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IG5vdXZlYXVfYml0ZmllbGQgbnY1MF9ncmFwaF90cmFwX3N0cm1vdXRbXSA9IHsKKwl7IDB4MDAwMDAwMDEsICJGQVVMVCIgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBub3V2ZWF1X2JpdGZpZWxkIG52NTBfZ3JhcGhfdHJhcF9jY2FjaGVbXSA9IHsKKwl7IDB4MDAwMDAwMDEsICJGQVVMVCIgfSwKKwl7fQorfTsKKworLyogVGhlcmUgbXVzdCBiZSBhICpsb3QqIG9mIHRoZXNlLiBXaWxsIHRha2Ugc29tZSB0aW1lIHRvIGdhdGhlciB0aGVtIHVwLiAqLworc3RydWN0IG5vdXZlYXVfZW51bSBudjUwX2RhdGFfZXJyb3JfbmFtZXNbXSA9IHsKKwl7IDB4MDAwMDAwMDMsICJJTlZBTElEX1FVRVJZX09SX1RFWFRVUkUiIH0sCisJeyAweDAwMDAwMDA0LCAiSU5WQUxJRF9WQUxVRSIgfSwKKwl7IDB4MDAwMDAwMDUsICJJTlZBTElEX0VOVU0iIH0sCisJeyAweDAwMDAwMDA4LCAiSU5WQUxJRF9PQkpFQ1QiIH0sCisJeyAweDAwMDAwMDA5LCAiUkVBRF9PTkxZX09CSkVDVCIgfSwKKwl7IDB4MDAwMDAwMGEsICJTVVBFUlZJU09SX09CSkVDVCIgfSwKKwl7IDB4MDAwMDAwMGIsICJJTlZBTElEX0FERFJFU1NfQUxJR05NRU5UIiB9LAorCXsgMHgwMDAwMDAwYywgIklOVkFMSURfQklURklFTEQiIH0sCisJeyAweDAwMDAwMDBkLCAiQkVHSU5fRU5EX0FDVElWRSIgfSwKKwl7IDB4MDAwMDAwMGUsICJTRU1BTlRJQ19DT0xPUl9CQUNLX09WRVJfTElNSVQiIH0sCisJeyAweDAwMDAwMDBmLCAiVklFV1BPUlRfSURfTkVFRFNfR1AiIH0sCisJeyAweDAwMDAwMDEwLCAiUlRfRE9VQkxFX0JJTkQiIH0sCisJeyAweDAwMDAwMDExLCAiUlRfVFlQRVNfTUlTTUFUQ0giIH0sCisJeyAweDAwMDAwMDEyLCAiUlRfTElORUFSX1dJVEhfWkVUQSIgfSwKKwl7IDB4MDAwMDAwMTUsICJGUF9UT09fRkVXX1JFR1MiIH0sCisJeyAweDAwMDAwMDE2LCAiWkVUQV9GT1JNQVRfQ1NBQV9NSVNNQVRDSCIgfSwKKwl7IDB4MDAwMDAwMTcsICJSVF9MSU5FQVJfV0lUSF9NU0FBIiB9LAorCXsgMHgwMDAwMDAxOCwgIkZQX0lOVEVSUE9MQU5UX1NUQVJUX09WRVJfTElNSVQiIH0sCisJeyAweDAwMDAwMDE5LCAiU0VNQU5USUNfTEFZRVJfT1ZFUl9MSU1JVCIgfSwKKwl7IDB4MDAwMDAwMWEsICJSVF9JTlZBTElEX0FMSUdOTUVOVCIgfSwKKwl7IDB4MDAwMDAwMWIsICJTQU1QTEVSX09WRVJfTElNSVQiIH0sCisJeyAweDAwMDAwMDFjLCAiVEVYVFVSRV9PVkVSX0xJTUlUIiB9LAorCXsgMHgwMDAwMDAxZSwgIkdQX1RPT19NQU5ZX09VVFBVVFMiIH0sCisJeyAweDAwMDAwMDFmLCAiUlRfQlBQMTI4X1dJVEhfTVM4IiB9LAorCXsgMHgwMDAwMDAyMSwgIlpfT1VUX09GX0JPVU5EUyIgfSwKKwl7IDB4MDAwMDAwMjMsICJYWV9PVVRfT0ZfQk9VTkRTIiB9LAorCXsgMHgwMDAwMDAyNywgIkNQX01PUkVfUEFSQU1TX1RIQU5fU0hBUkVEIiB9LAorCXsgMHgwMDAwMDAyOCwgIkNQX05PX1JFR19TUEFDRV9TVFJJUEVEIiB9LAorCXsgMHgwMDAwMDAyOSwgIkNQX05PX1JFR19TUEFDRV9QQUNLRUQiIH0sCisJeyAweDAwMDAwMDJhLCAiQ1BfTk9UX0VOT1VHSF9XQVJQUyIgfSwKKwl7IDB4MDAwMDAwMmIsICJDUF9CTE9DS19TSVpFX01JU01BVENIIiB9LAorCXsgMHgwMDAwMDAyYywgIkNQX05PVF9FTk9VR0hfTE9DQUxfV0FSUFMiIH0sCisJeyAweDAwMDAwMDJkLCAiQ1BfTk9UX0VOT1VHSF9TVEFDS19XQVJQUyIgfSwKKwl7IDB4MDAwMDAwMmUsICJDUF9OT19CTE9DS0RJTV9MQVRDSCIgfSwKKwl7IDB4MDAwMDAwMzEsICJFTkcyRF9GT1JNQVRfTUlTTUFUQ0giIH0sCisJeyAweDAwMDAwMDNmLCAiUFJJTUlUSVZFX0lEX05FRURTX0dQIiB9LAorCXsgMHgwMDAwMDA0NCwgIlNFTUFOVElDX1ZJRVdQT1JUX09WRVJfTElNSVQiIH0sCisJeyAweDAwMDAwMDQ1LCAiU0VNQU5USUNfQ09MT1JfRlJPTlRfT1ZFUl9MSU1JVCIgfSwKKwl7IDB4MDAwMDAwNDYsICJMQVlFUl9JRF9ORUVEU19HUCIgfSwKKwl7IDB4MDAwMDAwNDcsICJTRU1BTlRJQ19DTElQX09WRVJfTElNSVQiIH0sCisJeyAweDAwMDAwMDQ4LCAiU0VNQU5USUNfUFRTWl9PVkVSX0xJTUlUIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IG5vdXZlYXVfYml0ZmllbGQgbnY1MF9ncmFwaF9pbnRyW10gPSB7CisJeyAweDAwMDAwMDAxLCAiTk9USUZZIiB9LAorCXsgMHgwMDAwMDAwMiwgIkNPTVBVVEVfUVVFUlkiIH0sCisJeyAweDAwMDAwMDEwLCAiSUxMRUdBTF9NVEhEIiB9LAorCXsgMHgwMDAwMDAyMCwgIklMTEVHQUxfQ0xBU1MiIH0sCisJeyAweDAwMDAwMDQwLCAiRE9VQkxFX05PVElGWSIgfSwKKwl7IDB4MDAwMDEwMDAsICJDT05URVhUX1NXSVRDSCIgfSwKKwl7IDB4MDAwMTAwMDAsICJCVUZGRVJfTk9USUZZIiB9LAorCXsgMHgwMDEwMDAwMCwgIkRBVEFfRVJST1IiIH0sCisJeyAweDAwMjAwMDAwLCAiVFJBUCIgfSwKKwl7IDB4MDEwMDAwMDAsICJTSU5HTEVfU1RFUCIgfSwKKwl7fQorfTsKKworc3RhdGljIHZvaWQKK252NTBfcGdyYXBoX21wX3RyYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHRwaWQsIGludCBkaXNwbGF5KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgdW5pdHMgPSBudl9yZDMyKGRldiwgMHgxNTQwKTsKKwl1aW50MzJfdCBhZGRyLCBtcDEwLCBzdGF0dXMsIHBjLCBvcGxvdywgb3BoaWdoOworCWludCBpOworCWludCBtcHMgPSAwOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKCEodW5pdHMgJiAxIDw8IChpKzI0KSkpCisJCQljb250aW51ZTsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJCWFkZHIgPSAweDQwODIwMCArICh0cGlkIDw8IDEyKSArIChpIDw8IDcpOworCQllbHNlCisJCQlhZGRyID0gMHg0MDgxMDAgKyAodHBpZCA8PCAxMSkgKyAoaSA8PCA3KTsKKwkJbXAxMCA9IG52X3JkMzIoZGV2LCBhZGRyICsgMHgxMCk7CisJCXN0YXR1cyA9IG52X3JkMzIoZGV2LCBhZGRyICsgMHgxNCk7CisJCWlmICghc3RhdHVzKQorCQkJY29udGludWU7CisJCWlmIChkaXNwbGF5KSB7CisJCQludl9yZDMyKGRldiwgYWRkciArIDB4MjApOworCQkJcGMgPSBudl9yZDMyKGRldiwgYWRkciArIDB4MjQpOworCQkJb3Bsb3cgPSBudl9yZDMyKGRldiwgYWRkciArIDB4NzApOworCQkJb3BoaWdoPSBudl9yZDMyKGRldiwgYWRkciArIDB4NzQpOworCQkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9NUF9FWEVDIC0gIgorCQkJCQkiVFAgJWQgTVAgJWQ6ICIsIHRwaWQsIGkpOworCQkJbm91dmVhdV9lbnVtX3ByaW50KG52NTBfbXBfZXhlY19lcnJvcl9uYW1lcywgc3RhdHVzKTsKKwkJCXByaW50aygiIGF0ICUwNnggd2FycCAlZCwgb3Bjb2RlICUwOHggJTA4eFxuIiwKKwkJCQkJcGMmMHhmZmZmZmYsIHBjID4+IDI0LAorCQkJCQlvcGxvdywgb3BoaWdoKTsKKwkJfQorCQludl93cjMyKGRldiwgYWRkciArIDB4MTAsIG1wMTApOworCQludl93cjMyKGRldiwgYWRkciArIDB4MTQsIDApOworCQltcHMrKzsKKwl9CisJaWYgKCFtcHMgJiYgZGlzcGxheSkKKwkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9NUF9FWEVDIC0gVFAgJWQ6ICIKKwkJCQkiTm8gTVBzIGNsYWltaW5nIGVycm9ycz9cbiIsIHRwaWQpOworfQorCitzdGF0aWMgdm9pZAorbnY1MF9wZ3JhcGhfdHBfdHJhcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgdHlwZSwgdWludDMyX3QgdXN0YXR1c19vbGQsCisJCXVpbnQzMl90IHVzdGF0dXNfbmV3LCBpbnQgZGlzcGxheSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCB0cHMgPSAwOworCXVpbnQzMl90IHVuaXRzID0gbnZfcmQzMihkZXYsIDB4MTU0MCk7CisJaW50IGksIHI7CisJdWludDMyX3QgdXN0YXR1c19hZGRyLCB1c3RhdHVzOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWlmICghKHVuaXRzICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQl1c3RhdHVzX2FkZHIgPSB1c3RhdHVzX29sZCArIChpIDw8IDEyKTsKKwkJZWxzZQorCQkJdXN0YXR1c19hZGRyID0gdXN0YXR1c19uZXcgKyAoaSA8PCAxMSk7CisJCXVzdGF0dXMgPSBudl9yZDMyKGRldiwgdXN0YXR1c19hZGRyKSAmIDB4N2ZmZmZmZmY7CisJCWlmICghdXN0YXR1cykKKwkJCWNvbnRpbnVlOworCQl0cHMrKzsKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgNjogLyogdGV4dHVyZSBlcnJvci4uLiB1bmtub3duIGZvciBub3cgKi8KKwkJCW52NTBfZmJfdm1fdHJhcChkZXYsIGRpc3BsYXksIG5hbWUpOworCQkJaWYgKGRpc3BsYXkpIHsKKwkJCQlOVl9FUlJPUihkZXYsICJtYWdpYyBzZXQgJWQ6XG4iLCBpKTsKKwkJCQlmb3IgKHIgPSB1c3RhdHVzX2FkZHIgKyA0OyByIDw9IHVzdGF0dXNfYWRkciArIDB4MTA7IHIgKz0gNCkKKwkJCQkJTlZfRVJST1IoZGV2LCAiXHQweCUwOHg6IDB4JTA4eFxuIiwgciwKKwkJCQkJCW52X3JkMzIoZGV2LCByKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSA3OiAvKiBNUCBlcnJvciAqLworCQkJaWYgKHVzdGF0dXMgJiAweDAwMDEwMDAwKSB7CisJCQkJbnY1MF9wZ3JhcGhfbXBfdHJhcChkZXYsIGksIGRpc3BsYXkpOworCQkJCXVzdGF0dXMgJj0gfjB4MDAwMTAwMDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSA4OiAvKiBUUERNQSBlcnJvciAqLworCQkJeworCQkJdWludDMyX3QgZTBjID0gbnZfcmQzMihkZXYsIHVzdGF0dXNfYWRkciArIDQpOworCQkJdWludDMyX3QgZTEwID0gbnZfcmQzMihkZXYsIHVzdGF0dXNfYWRkciArIDgpOworCQkJdWludDMyX3QgZTE0ID0gbnZfcmQzMihkZXYsIHVzdGF0dXNfYWRkciArIDB4Yyk7CisJCQl1aW50MzJfdCBlMTggPSBudl9yZDMyKGRldiwgdXN0YXR1c19hZGRyICsgMHgxMCk7CisJCQl1aW50MzJfdCBlMWMgPSBudl9yZDMyKGRldiwgdXN0YXR1c19hZGRyICsgMHgxNCk7CisJCQl1aW50MzJfdCBlMjAgPSBudl9yZDMyKGRldiwgdXN0YXR1c19hZGRyICsgMHgxOCk7CisJCQl1aW50MzJfdCBlMjQgPSBudl9yZDMyKGRldiwgdXN0YXR1c19hZGRyICsgMHgxYyk7CisJCQludjUwX2ZiX3ZtX3RyYXAoZGV2LCBkaXNwbGF5LCBuYW1lKTsKKwkJCS8qIDJkIGVuZ2luZSBkZXN0aW5hdGlvbiAqLworCQkJaWYgKHVzdGF0dXMgJiAweDAwMDAwMDEwKSB7CisJCQkJaWYgKGRpc3BsYXkpIHsKKwkJCQkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9UUERNQV8yRCAtIFRQICVkIC0gVW5rbm93biBmYXVsdCBhdCBhZGRyZXNzICUwMnglMDh4XG4iLAorCQkJCQkJCWksIGUxNCwgZTEwKTsKKwkJCQkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9UUERNQV8yRCAtIFRQICVkIC0gZTBjOiAlMDh4LCBlMTg6ICUwOHgsIGUxYzogJTA4eCwgZTIwOiAlMDh4LCBlMjQ6ICUwOHhcbiIsCisJCQkJCQkJaSwgZTBjLCBlMTgsIGUxYywgZTIwLCBlMjQpOworCQkJCX0KKwkJCQl1c3RhdHVzICY9IH4weDAwMDAwMDEwOworCQkJfQorCQkJLyogUmVuZGVyIHRhcmdldCAqLworCQkJaWYgKHVzdGF0dXMgJiAweDAwMDAwMDQwKSB7CisJCQkJaWYgKGRpc3BsYXkpIHsKKwkJCQkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9UUERNQV9SVCAtIFRQICVkIC0gVW5rbm93biBmYXVsdCBhdCBhZGRyZXNzICUwMnglMDh4XG4iLAorCQkJCQkJCWksIGUxNCwgZTEwKTsKKwkJCQkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9UUERNQV9SVCAtIFRQICVkIC0gZTBjOiAlMDh4LCBlMTg6ICUwOHgsIGUxYzogJTA4eCwgZTIwOiAlMDh4LCBlMjQ6ICUwOHhcbiIsCisJCQkJCQkJaSwgZTBjLCBlMTgsIGUxYywgZTIwLCBlMjQpOworCQkJCX0KKwkJCQl1c3RhdHVzICY9IH4weDAwMDAwMDQwOworCQkJfQorCQkJLyogQ1VEQSBtZW1vcnk6IGxbXSwgZ1tdIG9yIHN0YWNrLiAqLworCQkJaWYgKHVzdGF0dXMgJiAweDAwMDAwMDgwKSB7CisJCQkJaWYgKGRpc3BsYXkpIHsKKwkJCQkJaWYgKGUxOCAmIDB4ODAwMDAwMDApIHsKKwkJCQkJCS8qIGdbXSByZWFkIGZhdWx0PyAqLworCQkJCQkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9UUERNQSAtIFRQICVkIC0gR2xvYmFsIHJlYWQgZmF1bHQgYXQgYWRkcmVzcyAlMDJ4JTA4eFxuIiwKKwkJCQkJCQkJaSwgZTE0LCBlMTAgfCAoKGUxOCA+PiAyNCkgJiAweDFmKSk7CisJCQkJCQllMTggJj0gfjB4MWYwMDAwMDA7CisJCQkJCX0gZWxzZSBpZiAoZTE4ICYgMHhjKSB7CisJCQkJCQkvKiBnW10gd3JpdGUgZmF1bHQ/ICovCisJCQkJCQlOVl9JTkZPKGRldiwgIlBHUkFQSF9UUkFQX1RQRE1BIC0gVFAgJWQgLSBHbG9iYWwgd3JpdGUgZmF1bHQgYXQgYWRkcmVzcyAlMDJ4JTA4eFxuIiwKKwkJCQkJCQkJaSwgZTE0LCBlMTAgfCAoKGUxOCA+PiA3KSAmIDB4MWYpKTsKKwkJCQkJCWUxOCAmPSB+MHgwMDAwMGY4MDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCU5WX0lORk8oZGV2LCAiUEdSQVBIX1RSQVBfVFBETUEgLSBUUCAlZCAtIFVua25vd24gQ1VEQSBmYXVsdCBhdCBhZGRyZXNzICUwMnglMDh4XG4iLAorCQkJCQkJCQlpLCBlMTQsIGUxMCk7CisJCQkJCX0KKwkJCQkJTlZfSU5GTyhkZXYsICJQR1JBUEhfVFJBUF9UUERNQSAtIFRQICVkIC0gZTBjOiAlMDh4LCBlMTg6ICUwOHgsIGUxYzogJTA4eCwgZTIwOiAlMDh4LCBlMjQ6ICUwOHhcbiIsCisJCQkJCQkJaSwgZTBjLCBlMTgsIGUxYywgZTIwLCBlMjQpOworCQkJCX0KKwkJCQl1c3RhdHVzICY9IH4weDAwMDAwMDgwOworCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJaWYgKHVzdGF0dXMpIHsKKwkJCWlmIChkaXNwbGF5KQorCQkJCU5WX0lORk8oZGV2LCAiJXMgLSBUUCVkOiBVbmhhbmRsZWQgdXN0YXR1cyAweCUwOHhcbiIsIG5hbWUsIGksIHVzdGF0dXMpOworCQl9CisJCW52X3dyMzIoZGV2LCB1c3RhdHVzX2FkZHIsIDB4YzAwMDAwMDApOworCX0KKworCWlmICghdHBzICYmIGRpc3BsYXkpCisJCU5WX0lORk8oZGV2LCAiJXMgLSBObyBUUHMgY2xhaW1pbmcgZXJyb3JzP1xuIiwgbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK252NTBfcGdyYXBoX3RyYXBfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgZGlzcGxheSwgdTY0IGluc3QsIHUzMiBjaGlkKQoreworCXUzMiBzdGF0dXMgPSBudl9yZDMyKGRldiwgMHg0MDAxMDgpOworCXUzMiB1c3RhdHVzOworCisJaWYgKCFzdGF0dXMgJiYgZGlzcGxheSkgeworCQlOVl9JTkZPKGRldiwgIlBHUkFQSCAtIFRSQVA6IG5vIHVuaXRzIHJlcG9ydGluZyB0cmFwcz9cbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBESVNQQVRDSDogUmVsYXlzIGNvbW1hbmRzIHRvIG90aGVyIHVuaXRzIGFuZCBoYW5kbGVzIE5PVElGWSwKKwkgKiBDT05ELCBRVUVSWS4gSWYgeW91IGdldCBhIHRyYXAgZnJvbSBpdCwgdGhlIGNvbW1hbmQgaXMgc3RpbGwgc3R1Y2sKKwkgKiBpbiBESVNQQVRDSCBhbmQgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIGFib3V0IGl0LiAqLworCWlmIChzdGF0dXMgJiAweDAwMSkgeworCQl1c3RhdHVzID0gbnZfcmQzMihkZXYsIDB4NDAwODA0KSAmIDB4N2ZmZmZmZmY7CisJCWlmICghdXN0YXR1cyAmJiBkaXNwbGF5KSB7CisJCQlOVl9JTkZPKGRldiwgIlBHUkFQSF9UUkFQX0RJU1BBVENIIC0gbm8gdXN0YXR1cz9cbiIpOworCQl9CisKKwkJbnZfd3IzMihkZXYsIDB4NDAwNTAwLCAweDAwMDAwMDAwKTsKKworCQkvKiBLbm93biB0byBiZSB0cmlnZ2VyZWQgYnkgc2NyZXdlZCB1cCBOT1RJRlkgYW5kIENPTkQuLi4gKi8KKwkJaWYgKHVzdGF0dXMgJiAweDAwMDAwMDAxKSB7CisJCQl1MzIgYWRkciA9IG52X3JkMzIoZGV2LCAweDQwMDgwOCk7CisJCQl1MzIgc3ViYyA9IChhZGRyICYgMHgwMDA3MDAwMCkgPj4gMTY7CisJCQl1MzIgbXRoZCA9IChhZGRyICYgMHgwMDAwMWZmYyk7CisJCQl1MzIgZGF0YWwgPSBudl9yZDMyKGRldiwgMHg0MDA4MGMpOworCQkJdTMyIGRhdGFoID0gbnZfcmQzMihkZXYsIDB4NDAwODEwKTsKKwkJCXUzMiBjbGFzcyA9IG52X3JkMzIoZGV2LCAweDQwMDgxNCk7CisJCQl1MzIgcjg0OCA9IG52X3JkMzIoZGV2LCAweDQwMDg0OCk7CisKKwkJCU5WX0lORk8oZGV2LCAiUEdSQVBIIC0gVFJBUCBESVNQQVRDSF9GQVVMVFxuIik7CisJCQlpZiAoZGlzcGxheSAmJiAoYWRkciAmIDB4ODAwMDAwMDApKSB7CisJCQkJTlZfSU5GTyhkZXYsICJQR1JBUEggLSBjaCAlZCAoMHglMDEwbGx4KSAiCisJCQkJCSAgICAgInN1YmMgJWQgY2xhc3MgMHglMDR4IG10aGQgMHglMDR4ICIKKwkJCQkJICAgICAiZGF0YSAweCUwOHglMDh4ICIKKwkJCQkJICAgICAiNDAwODA4IDB4JTA4eCA0MDA4NDggMHglMDh4XG4iLAorCQkJCQljaGlkLCBpbnN0LCBzdWJjLCBjbGFzcywgbXRoZCwgZGF0YWgsCisJCQkJCWRhdGFsLCBhZGRyLCByODQ4KTsKKwkJCX0gZWxzZQorCQkJaWYgKGRpc3BsYXkpIHsKKwkJCQlOVl9JTkZPKGRldiwgIlBHUkFQSCAtIG5vIHN0dWNrIGNvbW1hbmQ/XG4iKTsKKwkJCX0KKworCQkJbnZfd3IzMihkZXYsIDB4NDAwODA4LCAwKTsKKwkJCW52X3dyMzIoZGV2LCAweDQwMDhlOCwgbnZfcmQzMihkZXYsIDB4NDAwOGU4KSAmIDMpOworCQkJbnZfd3IzMihkZXYsIDB4NDAwODQ4LCAwKTsKKwkJCXVzdGF0dXMgJj0gfjB4MDAwMDAwMDE7CisJCX0KKworCQlpZiAodXN0YXR1cyAmIDB4MDAwMDAwMDIpIHsKKwkJCXUzMiBhZGRyID0gbnZfcmQzMihkZXYsIDB4NDAwODRjKTsKKwkJCXUzMiBzdWJjID0gKGFkZHIgJiAweDAwMDcwMDAwKSA+PiAxNjsKKwkJCXUzMiBtdGhkID0gKGFkZHIgJiAweDAwMDAxZmZjKTsKKwkJCXUzMiBkYXRhID0gbnZfcmQzMihkZXYsIDB4NDAwODVjKTsKKwkJCXUzMiBjbGFzcyA9IG52X3JkMzIoZGV2LCAweDQwMDgxNCk7CisKKwkJCU5WX0lORk8oZGV2LCAiUEdSQVBIIC0gVFJBUCBESVNQQVRDSF9RVUVSWVxuIik7CisJCQlpZiAoZGlzcGxheSAmJiAoYWRkciAmIDB4ODAwMDAwMDApKSB7CisJCQkJTlZfSU5GTyhkZXYsICJQR1JBUEggLSBjaCAlZCAoMHglMDEwbGx4KSAiCisJCQkJCSAgICAgInN1YmMgJWQgY2xhc3MgMHglMDR4IG10aGQgMHglMDR4ICIKKwkJCQkJICAgICAiZGF0YSAweCUwOHggNDAwODRjIDB4JTA4eFxuIiwKKwkJCQkJY2hpZCwgaW5zdCwgc3ViYywgY2xhc3MsIG10aGQsCisJCQkJCWRhdGEsIGFkZHIpOworCQkJfSBlbHNlCisJCQlpZiAoZGlzcGxheSkgeworCQkJCU5WX0lORk8oZGV2LCAiUEdSQVBIIC0gbm8gc3R1Y2sgY29tbWFuZD9cbiIpOworCQkJfQorCisJCQludl93cjMyKGRldiwgMHg0MDA4NGMsIDApOworCQkJdXN0YXR1cyAmPSB+MHgwMDAwMDAwMjsKKwkJfQorCisJCWlmICh1c3RhdHVzICYmIGRpc3BsYXkpIHsKKwkJCU5WX0lORk8oZGV2LCAiUEdSQVBIIC0gVFJBUF9ESVNQQVRDSCAodW5rbm93biAiCisJCQkJICAgICAgIjB4JTA4eClcbiIsIHVzdGF0dXMpOworCQl9CisKKwkJbnZfd3IzMihkZXYsIDB4NDAwODA0LCAweGMwMDAwMDAwKTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwMTA4LCAweDAwMSk7CisJCXN0YXR1cyAmPSB+MHgwMDE7CisJCWlmICghc3RhdHVzKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogTTJNRjogTWVtb3J5IHRvIG1lbW9yeSBjb3B5IGVuZ2luZS4gKi8KKwlpZiAoc3RhdHVzICYgMHgwMDIpIHsKKwkJdTMyIHVzdGF0dXMgPSBudl9yZDMyKGRldiwgMHg0MDY4MDApICYgMHg3ZmZmZmZmZjsKKwkJaWYgKGRpc3BsYXkpIHsKKwkJCU5WX0lORk8oZGV2LCAiUEdSQVBIIC0gVFJBUF9NMk1GIik7CisJCQlub3V2ZWF1X2JpdGZpZWxkX3ByaW50KG52NTBfZ3JhcGhfdHJhcF9tMm1mLCB1c3RhdHVzKTsKKwkJCXByaW50aygiXG4iKTsKKwkJCU5WX0lORk8oZGV2LCAiUEdSQVBIIC0gVFJBUF9NMk1GICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCisJCQkJbnZfcmQzMihkZXYsIDB4NDA2ODA0KSwgbnZfcmQzMihkZXYsIDB4NDA2ODA4KSwKKwkJCQludl9yZDMyKGRldiwgMHg0MDY4MGMpLCBudl9yZDMyKGRldiwgMHg0MDY4MTApKTsKKworCQl9CisKKwkJLyogTm8gc2FuZSB3YXkgZm91bmQgeWV0IC0tIGp1c3QgcmVzZXQgdGhlIGJ1Z2dlci4gKi8KKwkJbnZfd3IzMihkZXYsIDB4NDAwMDQwLCAyKTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwMDQwLCAwKTsKKwkJbnZfd3IzMihkZXYsIDB4NDA2ODAwLCAweGMwMDAwMDAwKTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwMTA4LCAweDAwMik7CisJCXN0YXR1cyAmPSB+MHgwMDI7CisJfQorCisJLyogVkZFVENIOiBGZXRjaGVzIGRhdGEgZnJvbSB2ZXJ0ZXggYnVmZmVycy4gKi8KKwlpZiAoc3RhdHVzICYgMHgwMDQpIHsKKwkJdTMyIHVzdGF0dXMgPSBudl9yZDMyKGRldiwgMHg0MDBjMDQpICYgMHg3ZmZmZmZmZjsKKwkJaWYgKGRpc3BsYXkpIHsKKwkJCU5WX0lORk8oZGV2LCAiUEdSQVBIIC0gVFJBUF9WRkVUQ0giKTsKKwkJCW5vdXZlYXVfYml0ZmllbGRfcHJpbnQobnY1MF9ncmFwaF90cmFwX3ZmZXRjaCwgdXN0YXR1cyk7CisJCQlwcmludGsoIlxuIik7CisJCQlOVl9JTkZPKGRldiwgIlBHUkFQSCAtIFRSQVBfVkZFVENIICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCisJCQkJbnZfcmQzMihkZXYsIDB4NDAwYzAwKSwgbnZfcmQzMihkZXYsIDB4NDAwYzA4KSwKKwkJCQludl9yZDMyKGRldiwgMHg0MDBjMGMpLCBudl9yZDMyKGRldiwgMHg0MDBjMTApKTsKKwkJfQorCisJCW52X3dyMzIoZGV2LCAweDQwMGMwNCwgMHhjMDAwMDAwMCk7CisJCW52X3dyMzIoZGV2LCAweDQwMDEwOCwgMHgwMDQpOworCQlzdGF0dXMgJj0gfjB4MDA0OworCX0KKworCS8qIFNUUk1PVVQ6IERpcmVjdFggc3RyZWFtb3V0IC8gT3BlbkdMIHRyYW5zZm9ybSBmZWVkYmFjay4gKi8KKwlpZiAoc3RhdHVzICYgMHgwMDgpIHsKKwkJdXN0YXR1cyA9IG52X3JkMzIoZGV2LCAweDQwMTgwMCkgJiAweDdmZmZmZmZmOworCQlpZiAoZGlzcGxheSkgeworCQkJTlZfSU5GTyhkZXYsICJQR1JBUEggLSBUUkFQX1NUUk1PVVQiKTsKKwkJCW5vdXZlYXVfYml0ZmllbGRfcHJpbnQobnY1MF9ncmFwaF90cmFwX3N0cm1vdXQsIHVzdGF0dXMpOworCQkJcHJpbnRrKCJcbiIpOworCQkJTlZfSU5GTyhkZXYsICJQR1JBUEggLSBUUkFQX1NUUk1PVVQgJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKKwkJCQludl9yZDMyKGRldiwgMHg0MDE4MDQpLCBudl9yZDMyKGRldiwgMHg0MDE4MDgpLAorCQkJCW52X3JkMzIoZGV2LCAweDQwMTgwYyksIG52X3JkMzIoZGV2LCAweDQwMTgxMCkpOworCisJCX0KKworCQkvKiBObyBzYW5lIHdheSBmb3VuZCB5ZXQgLS0ganVzdCByZXNldCB0aGUgYnVnZ2VyLiAqLworCQludl93cjMyKGRldiwgMHg0MDAwNDAsIDB4ODApOworCQludl93cjMyKGRldiwgMHg0MDAwNDAsIDApOworCQludl93cjMyKGRldiwgMHg0MDE4MDAsIDB4YzAwMDAwMDApOworCQludl93cjMyKGRldiwgMHg0MDAxMDgsIDB4MDA4KTsKKwkJc3RhdHVzICY9IH4weDAwODsKKwl9CisKKwkvKiBDQ0FDSEU6IEhhbmRsZXMgY29kZSBhbmQgY1tdIGNhY2hlcyBhbmQgZmlsbHMgdGhlbS4gKi8KKwlpZiAoc3RhdHVzICYgMHgwMTApIHsKKwkJdXN0YXR1cyA9IG52X3JkMzIoZGV2LCAweDQwNTAxOCkgJiAweDdmZmZmZmZmOworCQlpZiAoZGlzcGxheSkgeworCQkJTlZfSU5GTyhkZXYsICJQR1JBUEggLSBUUkFQX0NDQUNIRSIpOworCQkJbm91dmVhdV9iaXRmaWVsZF9wcmludChudjUwX2dyYXBoX3RyYXBfY2NhY2hlLCB1c3RhdHVzKTsKKwkJCXByaW50aygiXG4iKTsKKwkJCU5WX0lORk8oZGV2LCAiUEdSQVBIIC0gVFJBUF9DQ0FDSEUgJTA4eCAlMDh4ICUwOHggJTA4eCIKKwkJCQkgICAgICIgJTA4eCAlMDh4ICUwOHhcbiIsCisJCQkJbnZfcmQzMihkZXYsIDB4NDA1ODAwKSwgbnZfcmQzMihkZXYsIDB4NDA1ODA0KSwKKwkJCQludl9yZDMyKGRldiwgMHg0MDU4MDgpLCBudl9yZDMyKGRldiwgMHg0MDU4MGMpLAorCQkJCW52X3JkMzIoZGV2LCAweDQwNTgxMCksIG52X3JkMzIoZGV2LCAweDQwNTgxNCksCisJCQkJbnZfcmQzMihkZXYsIDB4NDA1ODFjKSk7CisKKwkJfQorCisJCW52X3dyMzIoZGV2LCAweDQwNTAxOCwgMHhjMDAwMDAwMCk7CisJCW52X3dyMzIoZGV2LCAweDQwMDEwOCwgMHgwMTApOworCQlzdGF0dXMgJj0gfjB4MDEwOworCX0KKworCS8qIFVua25vd24sIG5vdCBzZWVuIHlldC4uLiAweDQwMjAwMCBpcyB0aGUgb25seSB0cmFwIHN0YXR1cyByZWcKKwkgKiByZW1haW5pbmcsIHNvIHRyeSB0byBoYW5kbGUgaXQgYW55d2F5LiBQZXJoYXBzIHJlbGF0ZWQgdG8gdGhhdAorCSAqIHVua25vd24gRE1BIHNsb3Qgb24gdGVzbGE/ICovCisJaWYgKHN0YXR1cyAmIDB4MjApIHsKKwkJdXN0YXR1cyA9IG52X3JkMzIoZGV2LCAweDQwMjAwMCkgJiAweDdmZmZmZmZmOworCQlpZiAoZGlzcGxheSkKKwkJCU5WX0lORk8oZGV2LCAiUEdSQVBIIC0gVFJBUF9VTktDMDQgMHglMDh4XG4iLCB1c3RhdHVzKTsKKwkJbnZfd3IzMihkZXYsIDB4NDAyMDAwLCAweGMwMDAwMDAwKTsKKwkJLyogbm8gc3RhdHVzIG1vZGlmaWN0aW9uIG9uIHB1cnBvc2UgKi8KKwl9CisKKwkvKiBURVhUVVJFOiBDVURBIHRleHR1cmluZyB1bml0cyAqLworCWlmIChzdGF0dXMgJiAweDA0MCkgeworCQludjUwX3BncmFwaF90cF90cmFwKGRldiwgNiwgMHg0MDg5MDAsIDB4NDA4NjAwLCBkaXNwbGF5LAorCQkJCSAgICAiUEdSQVBIIC0gVFJBUF9URVhUVVJFIik7CisJCW52X3dyMzIoZGV2LCAweDQwMDEwOCwgMHgwNDApOworCQlzdGF0dXMgJj0gfjB4MDQwOworCX0KKworCS8qIE1QOiBDVURBIGV4ZWN1dGlvbiBlbmdpbmVzLiAqLworCWlmIChzdGF0dXMgJiAweDA4MCkgeworCQludjUwX3BncmFwaF90cF90cmFwKGRldiwgNywgMHg0MDgzMTQsIDB4NDA4MzFjLCBkaXNwbGF5LAorCQkJCSAgICAiUEdSQVBIIC0gVFJBUF9NUCIpOworCQludl93cjMyKGRldiwgMHg0MDAxMDgsIDB4MDgwKTsKKwkJc3RhdHVzICY9IH4weDA4MDsKKwl9CisKKwkvKiBUUERNQTogIEhhbmRsZXMgVFAtaW5pdGlhdGVkIHVuY2FjaGVkIG1lbW9yeSBhY2Nlc3NlczoKKwkgKiBsW10sIGdbXSwgc3RhY2ssIDJkIHN1cmZhY2VzLCByZW5kZXIgdGFyZ2V0cy4gKi8KKwlpZiAoc3RhdHVzICYgMHgxMDApIHsKKwkJbnY1MF9wZ3JhcGhfdHBfdHJhcChkZXYsIDgsIDB4NDA4ZTA4LCAweDQwODcwOCwgZGlzcGxheSwKKwkJCQkgICAgIlBHUkFQSCAtIFRSQVBfVFBETUEiKTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwMTA4LCAweDEwMCk7CisJCXN0YXR1cyAmPSB+MHgxMDA7CisJfQorCisJaWYgKHN0YXR1cykgeworCQlpZiAoZGlzcGxheSkKKwkJCU5WX0lORk8oZGV2LCAiUEdSQVBIIC0gVFJBUDogdW5rbm93biAweCUwOHhcbiIsIHN0YXR1cyk7CisJCW52X3dyMzIoZGV2LCAweDQwMDEwOCwgc3RhdHVzKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbnY1MF9ncmFwaF9pc3JfY2hpZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1NjQgaW5zdCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y2hhbm5lbHMubG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+ZW5naW5lLmZpZm8uY2hhbm5lbHM7IGkrKykgeworCQljaGFuID0gZGV2X3ByaXYtPmNoYW5uZWxzLnB0cltpXTsKKwkJaWYgKCFjaGFuIHx8ICFjaGFuLT5yYW1pbikKKwkJCWNvbnRpbnVlOworCisJCWlmIChpbnN0ID09IGNoYW4tPnJhbWluLT52aW5zdCkKKwkJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y2hhbm5lbHMubG9jaywgZmxhZ3MpOworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwl1MzIgc3RhdDsKKworCXdoaWxlICgoc3RhdCA9IG52X3JkMzIoZGV2LCAweDQwMDEwMCkpKSB7CisJCXU2NCBpbnN0ID0gKHU2NCkobnZfcmQzMihkZXYsIDB4NDAwMzJjKSAmIDB4MGZmZmZmZmYpIDw8IDEyOworCQl1MzIgY2hpZCA9IG52NTBfZ3JhcGhfaXNyX2NoaWQoZGV2LCBpbnN0KTsKKwkJdTMyIGFkZHIgPSBudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfVFJBUFBFRF9BRERSKTsKKwkJdTMyIHN1YmMgPSAoYWRkciAmIDB4MDAwNzAwMDApID4+IDE2OworCQl1MzIgbXRoZCA9IChhZGRyICYgMHgwMDAwMWZmYyk7CisJCXUzMiBkYXRhID0gbnZfcmQzMihkZXYsIE5WMDRfUEdSQVBIX1RSQVBQRURfREFUQSk7CisJCXUzMiBjbGFzcyA9IG52X3JkMzIoZGV2LCAweDQwMDgxNCk7CisJCXUzMiBzaG93ID0gc3RhdDsKKworCQlpZiAoc3RhdCAmIDB4MDAwMDAwMTApIHsKKwkJCWlmICghbm91dmVhdV9ncHVvYmpfbXRoZF9jYWxsMihkZXYsIGNoaWQsIGNsYXNzLAorCQkJCQkJICAgICAgIG10aGQsIGRhdGEpKQorCQkJCXNob3cgJj0gfjB4MDAwMDAwMTA7CisJCX0KKworCQlpZiAoc3RhdCAmIDB4MDAwMDEwMDApIHsKKwkJCW52X3dyMzIoZGV2LCAweDQwMDUwMCwgMHgwMDAwMDAwMCk7CisJCQludl93cjMyKGRldiwgMHg0MDAxMDAsIDB4MDAwMDEwMDApOworCQkJbnZfbWFzayhkZXYsIDB4NDAwMTNjLCAweDAwMDAxMDAwLCAweDAwMDAwMDAwKTsKKwkJCW52NTBfZ3JhcGhfY29udGV4dF9zd2l0Y2goZGV2KTsKKwkJCXN0YXQgJj0gfjB4MDAwMDEwMDA7CisJCQlzaG93ICY9IH4weDAwMDAxMDAwOworCQl9CisKKwkJc2hvdyA9IChzaG93ICYmIG5vdXZlYXVfcmF0ZWxpbWl0KCkpID8gc2hvdyA6IDA7CisKKwkJaWYgKHNob3cgJiAweDAwMTAwMDAwKSB7CisJCQl1MzIgZWNvZGUgPSBudl9yZDMyKGRldiwgMHg0MDAxMTApOworCQkJTlZfSU5GTyhkZXYsICJQR1JBUEggLSBEQVRBX0VSUk9SICIpOworCQkJbm91dmVhdV9lbnVtX3ByaW50KG52NTBfZGF0YV9lcnJvcl9uYW1lcywgZWNvZGUpOworCQkJcHJpbnRrKCJcbiIpOworCQl9CisKKwkJaWYgKHN0YXQgJiAweDAwMjAwMDAwKSB7CisJCQlpZiAoIW52NTBfcGdyYXBoX3RyYXBfaGFuZGxlcihkZXYsIHNob3csIGluc3QsIGNoaWQpKQorCQkJCXNob3cgJj0gfjB4MDAyMDAwMDA7CisJCX0KKworCQludl93cjMyKGRldiwgMHg0MDAxMDAsIHN0YXQpOworCQludl93cjMyKGRldiwgMHg0MDA1MDAsIDB4MDAwMTAwMDEpOworCisJCWlmIChzaG93KSB7CisJCQlOVl9JTkZPKGRldiwgIlBHUkFQSCAtIik7CisJCQlub3V2ZWF1X2JpdGZpZWxkX3ByaW50KG52NTBfZ3JhcGhfaW50ciwgc2hvdyk7CisJCQlwcmludGsoIlxuIik7CisJCQlOVl9JTkZPKGRldiwgIlBHUkFQSCAtIGNoICVkICgweCUwMTBsbHgpIHN1YmMgJWQgIgorCQkJCSAgICAgImNsYXNzIDB4JTA0eCBtdGhkIDB4JTA0eCBkYXRhIDB4JTA4eFxuIiwKKwkJCQljaGlkLCBpbnN0LCBzdWJjLCBjbGFzcywgbXRoZCwgZGF0YSk7CisJCX0KKwl9CisKKwlpZiAobnZfcmQzMihkZXYsIDB4NDAwODI0KSAmICgxIDw8IDMxKSkKKwkJbnZfd3IzMihkZXYsIDB4NDAwODI0LCBudl9yZDMyKGRldiwgMHg0MDA4MjQpICYgfigxIDw8IDMxKSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2luc3RtZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jCmluZGV4IGI3NzMyMjkuLjJlMWIxY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jCkBAIC0yNywxNCArMjcsMjAgQEAKIAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKKwogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCisjaW5jbHVkZSAibm91dmVhdV92bS5oIgorCisjZGVmaW5lIEJBUjFfVk1fQkFTRSAweDAwMjAwMDAwMDBVTEwKKyNkZWZpbmUgQkFSMV9WTV9TSVpFIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAxKQorI2RlZmluZSBCQVIzX1ZNX0JBU0UgMHgwMDAwMDAwMDAwVUxMCisjZGVmaW5lIEJBUjNfVk1fU0laRSBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMykKIAogc3RydWN0IG52NTBfaW5zdG1lbV9wcml2IHsKIAl1aW50MzJfdCBzYXZlMTcwMFs1XTsgLyogMHgxNzAwLT4weDE3MTAgKi8KIAotCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcHJhbWluX3B0OwotCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcHJhbWluX2JhcjsKLQlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmZiX2JhcjsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmJhcjFfZG1hb2JqOworCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqYmFyM19kbWFvYmo7CiB9OwogCiBzdGF0aWMgdm9pZApAQCAtNDgsNiArNTQsNyBAQAogCQlyZXR1cm47CiAKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmNoYW4tPnJhbWZjKTsKKwlub3V2ZWF1X3ZtX3JlZihOVUxMLCAmY2hhbi0+dm0sIGNoYW4tPnZtX3BkKTsKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmNoYW4tPnZtX3BkKTsKIAlpZiAoY2hhbi0+cmFtaW5faGVhcC5mcmVlX3N0YWNrLm5leHQpCiAJCWRybV9tbV90YWtlZG93bigmY2hhbi0+cmFtaW5faGVhcCk7CkBAIC01NiwxNCArNjMsMTQgQEAKIH0KIAogc3RhdGljIGludAotbnY1MF9jaGFubmVsX25ldyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2l6ZSwKK252NTBfY2hhbm5lbF9uZXcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHNpemUsIHN0cnVjdCBub3V2ZWF1X3ZtICp2bSwKIAkJIHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKipwY2hhbikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiBwZ2QgPSAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkgPyAweDE0MDAgOiAweDAyMDA7CiAJdTMyICBmYyA9IChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKSA/IDB4MDAwMCA6IDB4NDIwMDsKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuOwotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAogCWNoYW4gPSBremFsbG9jKHNpemVvZigqY2hhbiksIEdGUF9LRVJORUwpOwogCWlmICghY2hhbikKQEAgLTkyLDYgKzk5LDE3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJZm9yIChpID0gMDsgaSA8IDB4NDAwMDsgaSArPSA4KSB7CisJCW52X3dvMzIoY2hhbi0+dm1fcGQsIGkgKyAwLCAweDAwMDAwMDAwKTsKKwkJbnZfd28zMihjaGFuLT52bV9wZCwgaSArIDQsIDB4ZGVhZGNhZmUpOworCX0KKworCXJldCA9IG5vdXZlYXVfdm1fcmVmKHZtLCAmY2hhbi0+dm0sIGNoYW4tPnZtX3BkKTsKKwlpZiAocmV0KSB7CisJCW52NTBfY2hhbm5lbF9kZWwoJmNoYW4pOworCQlyZXR1cm4gcmV0OworCX0KKwogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19mYWtlKGRldiwgY2hhbi0+cmFtaW4tPnBpbnN0ID09IH4wID8gfjAgOgogCQkJCSAgICAgIGNoYW4tPnJhbWluLT5waW5zdCArIGZjLAogCQkJCSAgICAgIGNoYW4tPnJhbWluLT52aW5zdCArIGZjLCAweDEwMCwKQEAgLTExMSw2ICsxMjksNyBAQAogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG52NTBfaW5zdG1lbV9wcml2ICpwcml2OwogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47CisJc3RydWN0IG5vdXZlYXVfdm0gKnZtOwogCWludCByZXQsIGk7CiAJdTMyIHRtcDsKIApAQCAtMTI3LDExMiArMTQ2LDg3IEBACiAJcmV0ID0gZHJtX21tX2luaXQoJmRldl9wcml2LT5yYW1pbl9oZWFwLCAwLCBkZXZfcHJpdi0+cmFtaW5fc2l6ZSk7CiAJaWYgKHJldCkgewogCQlOVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gaW5pdCBSQU1JTiBoZWFwXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CiAJfQogCi0JLyogd2UgbmVlZCBhIGNoYW5uZWwgdG8gcGx1ZyBpbnRvIHRoZSBodyB0byBjb250cm9sIHRoZSBCQVJzICovCi0JcmV0ID0gbnY1MF9jaGFubmVsX25ldyhkZXYsIDEyOCoxMDI0LCAmZGV2X3ByaXYtPmZpZm9zWzBdKTsKKwkvKiBCQVIzICovCisJcmV0ID0gbm91dmVhdV92bV9uZXcoZGV2LCBCQVIzX1ZNX0JBU0UsIEJBUjNfVk1fU0laRSwgQkFSM19WTV9CQVNFLAorCQkJICAgICAmZGV2X3ByaXYtPmJhcjNfdm0pOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JY2hhbiA9IGRldl9wcml2LT5maWZvc1sxMjddID0gZGV2X3ByaXYtPmZpZm9zWzBdOworCQlnb3RvIGVycm9yOwogCi0JLyogYWxsb2NhdGUgcGFnZSB0YWJsZSBmb3IgUFJBTUlOIEJBUiAqLwotCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ldyhkZXYsIGNoYW4sIChkZXZfcHJpdi0+cmFtaW5fc2l6ZSA+PiAxMikgKiA4LAotCQkJCSAweDEwMDAsIE5WT0JKX0ZMQUdfWkVST19BTExPQywKLQkJCQkgJnByaXYtPnByYW1pbl9wdCk7CisJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3KGRldiwgTlVMTCwgKEJBUjNfVk1fU0laRSA+PiAxMikgKiA4LAorCQkJCSAweDEwMDAsIE5WT0JKX0ZMQUdfRE9OVF9NQVAgfAorCQkJCSBOVk9CSl9GTEFHX1pFUk9fQUxMT0MsCisJCQkJICZkZXZfcHJpdi0+YmFyM192bS0+cGd0WzBdLm9ialswXSk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnJvcjsKKwlkZXZfcHJpdi0+YmFyM192bS0+cGd0WzBdLnJlZmNvdW50WzBdID0gMTsKIAotCW52X3dvMzIoY2hhbi0+dm1fcGQsIDB4MDAwMCwgcHJpdi0+cHJhbWluX3B0LT52aW5zdCB8IDB4NjMpOwotCW52X3dvMzIoY2hhbi0+dm1fcGQsIDB4MDAwNCwgMCk7CisJbnY1MF9pbnN0bWVtX21hcChkZXZfcHJpdi0+YmFyM192bS0+cGd0WzBdLm9ialswXSk7CiAKLQkvKiBETUEgb2JqZWN0IGZvciBQUkFNSU4gQkFSICovCi0JcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3KGRldiwgY2hhbiwgNio0LCAxNiwgMCwgJnByaXYtPnByYW1pbl9iYXIpOworCXJldCA9IG52NTBfY2hhbm5lbF9uZXcoZGV2LCAxMjggKiAxMDI0LCBkZXZfcHJpdi0+YmFyM192bSwgJmNoYW4pOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JbnZfd28zMihwcml2LT5wcmFtaW5fYmFyLCAweDAwLCAweDdmYzAwMDAwKTsKLQludl93bzMyKHByaXYtPnByYW1pbl9iYXIsIDB4MDQsIGRldl9wcml2LT5yYW1pbl9zaXplIC0gMSk7Ci0JbnZfd28zMihwcml2LT5wcmFtaW5fYmFyLCAweDA4LCAweDAwMDAwMDAwKTsKLQludl93bzMyKHByaXYtPnByYW1pbl9iYXIsIDB4MGMsIDB4MDAwMDAwMDApOwotCW52X3dvMzIocHJpdi0+cHJhbWluX2JhciwgMHgxMCwgMHgwMDAwMDAwMCk7Ci0JbnZfd28zMihwcml2LT5wcmFtaW5fYmFyLCAweDE0LCAweDAwMDAwMDAwKTsKKwkJZ290byBlcnJvcjsKKwlkZXZfcHJpdi0+Y2hhbm5lbHMucHRyWzBdID0gZGV2X3ByaXYtPmNoYW5uZWxzLnB0clsxMjddID0gY2hhbjsKIAotCS8qIG1hcCBjaGFubmVsIGludG8gUFJBTUlOLCBncHVvYmogZGlkbid0IGRvIGl0IGZvciB1cyAqLwotCXJldCA9IG52NTBfaW5zdG1lbV9iaW5kKGRldiwgY2hhbi0+cmFtaW4pOworCXJldCA9IG52NTBfZ3B1b2JqX2RtYV9uZXcoY2hhbiwgMHgwMDAwLCBCQVIzX1ZNX0JBU0UsIEJBUjNfVk1fU0laRSwKKwkJCQkgIE5WX01FTV9UQVJHRVRfVk0sIE5WX01FTV9BQ0NFU1NfVk0sCisJCQkJICBOVl9NRU1fVFlQRV9WTSwgTlZfTUVNX0NPTVBfVk0sCisJCQkJICAmcHJpdi0+YmFyM19kbWFvYmopOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyb3I7CiAKLQkvKiBwb2tlIHJlZ3MuLi4gKi8KIAludl93cjMyKGRldiwgMHgwMDE3MDQsIDB4MDAwMDAwMDAgfCAoY2hhbi0+cmFtaW4tPnZpbnN0ID4+IDEyKSk7CiAJbnZfd3IzMihkZXYsIDB4MDAxNzA0LCAweDQwMDAwMDAwIHwgKGNoYW4tPnJhbWluLT52aW5zdCA+PiAxMikpOwotCW52X3dyMzIoZGV2LCAweDAwMTcwYywgMHg4MDAwMDAwMCB8IChwcml2LT5wcmFtaW5fYmFyLT5jaW5zdCA+PiA0KSk7Ci0KLQl0bXAgPSBudl9yaTMyKGRldiwgMCk7Ci0JbnZfd2kzMihkZXYsIDAsIH50bXApOwotCWlmIChudl9yaTMyKGRldiwgMCkgIT0gfnRtcCkgewotCQlOVl9FUlJPUihkZXYsICJQUkFNSU4gcmVhZGJhY2sgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCW52X3dpMzIoZGV2LCAwLCB0bXApOwotCi0JZGV2X3ByaXYtPnJhbWluX2F2YWlsYWJsZSA9IHRydWU7Ci0KLQkvKiBEZXRlcm1pbmUgVk0gbGF5b3V0ICovCi0JZGV2X3ByaXYtPnZtX2dhcnRfYmFzZSA9IHJvdW5kdXAoTlY1MF9WTV9CTE9DSywgTlY1MF9WTV9CTE9DSyk7Ci0JZGV2X3ByaXYtPnZtX2dhcnRfc2l6ZSA9IE5WNTBfVk1fQkxPQ0s7Ci0KLQlkZXZfcHJpdi0+dm1fdnJhbV9iYXNlID0gZGV2X3ByaXYtPnZtX2dhcnRfYmFzZSArIGRldl9wcml2LT52bV9nYXJ0X3NpemU7Ci0JZGV2X3ByaXYtPnZtX3ZyYW1fc2l6ZSA9IGRldl9wcml2LT52cmFtX3NpemU7Ci0JaWYgKGRldl9wcml2LT52bV92cmFtX3NpemUgPiBOVjUwX1ZNX01BWF9WUkFNKQotCQlkZXZfcHJpdi0+dm1fdnJhbV9zaXplID0gTlY1MF9WTV9NQVhfVlJBTTsKLQlkZXZfcHJpdi0+dm1fdnJhbV9zaXplID0gcm91bmR1cChkZXZfcHJpdi0+dm1fdnJhbV9zaXplLCBOVjUwX1ZNX0JMT0NLKTsKLQlkZXZfcHJpdi0+dm1fdnJhbV9wdF9uciA9IGRldl9wcml2LT52bV92cmFtX3NpemUgLyBOVjUwX1ZNX0JMT0NLOwotCi0JZGV2X3ByaXYtPnZtX2VuZCA9IGRldl9wcml2LT52bV92cmFtX2Jhc2UgKyBkZXZfcHJpdi0+dm1fdnJhbV9zaXplOwotCi0JTlZfREVCVUcoZGV2LCAiTlY1MFZNOiBHQVJUIDB4JTAxNmxseC0weCUwMTZsbHhcbiIsCi0JCSBkZXZfcHJpdi0+dm1fZ2FydF9iYXNlLAotCQkgZGV2X3ByaXYtPnZtX2dhcnRfYmFzZSArIGRldl9wcml2LT52bV9nYXJ0X3NpemUgLSAxKTsKLQlOVl9ERUJVRyhkZXYsICJOVjUwVk06IFZSQU0gMHglMDE2bGx4LTB4JTAxNmxseFxuIiwKLQkJIGRldl9wcml2LT52bV92cmFtX2Jhc2UsCi0JCSBkZXZfcHJpdi0+dm1fdnJhbV9iYXNlICsgZGV2X3ByaXYtPnZtX3ZyYW1fc2l6ZSAtIDEpOwotCi0JLyogVlJBTSBwYWdlIHRhYmxlKHMpLCBtYXBwZWQgaW50byBWTSBhdCArMUdpQiAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPnZtX3ZyYW1fcHRfbnI7IGkrKykgewotCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBOVUxMLCBOVjUwX1ZNX0JMT0NLIC8gMHgxMDAwMCAqIDgsCi0JCQkJCSAwLCBOVk9CSl9GTEFHX1pFUk9fQUxMT0MsCi0JCQkJCSAmY2hhbi0+dm1fdnJhbV9wdFtpXSk7Ci0JCWlmIChyZXQpIHsKLQkJCU5WX0VSUk9SKGRldiwgIkVycm9yIGNyZWF0aW5nIFZSQU0gUEdUOiAlZFxuIiwgcmV0KTsKLQkJCWRldl9wcml2LT52bV92cmFtX3B0X25yID0gaTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJZGV2X3ByaXYtPnZtX3ZyYW1fcHRbaV0gPSBjaGFuLT52bV92cmFtX3B0W2ldOwotCi0JCW52X3dvMzIoY2hhbi0+dm1fcGQsIDB4MTAgKyAoaSo4KSwKLQkJCWNoYW4tPnZtX3ZyYW1fcHRbaV0tPnZpbnN0IHwgMHg2MSk7Ci0JCW52X3dvMzIoY2hhbi0+dm1fcGQsIDB4MTQgKyAoaSo4KSwgMCk7Ci0JfQotCi0JLyogRE1BIG9iamVjdCBmb3IgRkIgQkFSICovCi0JcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3KGRldiwgY2hhbiwgNio0LCAxNiwgMCwgJnByaXYtPmZiX2Jhcik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQludl93bzMyKHByaXYtPmZiX2JhciwgMHgwMCwgMHg3ZmMwMDAwMCk7Ci0JbnZfd28zMihwcml2LT5mYl9iYXIsIDB4MDQsIDB4NDAwMDAwMDAgKwotCQkJCSAgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMSkgLSAxKTsKLQludl93bzMyKHByaXYtPmZiX2JhciwgMHgwOCwgMHg0MDAwMDAwMCk7Ci0JbnZfd28zMihwcml2LT5mYl9iYXIsIDB4MGMsIDB4MDAwMDAwMDApOwotCW52X3dvMzIocHJpdi0+ZmJfYmFyLCAweDEwLCAweDAwMDAwMDAwKTsKLQludl93bzMyKHByaXYtPmZiX2JhciwgMHgxNCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4MDAxNzBjLCAweDgwMDAwMDAwIHwgKHByaXYtPmJhcjNfZG1hb2JqLT5jaW5zdCA+PiA0KSk7CiAKIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKKwlkZXZfcHJpdi0+cmFtaW5fYXZhaWxhYmxlID0gdHJ1ZTsKIAotCW52X3dyMzIoZGV2LCAweDAwMTcwOCwgMHg4MDAwMDAwMCB8IChwcml2LT5mYl9iYXItPmNpbnN0ID4+IDQpKTsKKwl0bXAgPSBudl9ybzMyKGNoYW4tPnJhbWluLCAwKTsKKwludl93bzMyKGNoYW4tPnJhbWluLCAwLCB+dG1wKTsKKwlpZiAobnZfcm8zMihjaGFuLT5yYW1pbiwgMCkgIT0gfnRtcCkgeworCQlOVl9FUlJPUihkZXYsICJQUkFNSU4gcmVhZGJhY2sgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisJbnZfd28zMihjaGFuLT5yYW1pbiwgMCwgdG1wKTsKKworCS8qIEJBUjEgKi8KKwlyZXQgPSBub3V2ZWF1X3ZtX25ldyhkZXYsIEJBUjFfVk1fQkFTRSwgQkFSMV9WTV9TSVpFLCBCQVIxX1ZNX0JBU0UsICZ2bSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IG5vdXZlYXVfdm1fcmVmKHZtLCAmZGV2X3ByaXYtPmJhcjFfdm0sIGNoYW4tPnZtX3BkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCW5vdXZlYXVfdm1fcmVmKE5VTEwsICZ2bSwgTlVMTCk7CisKKwlyZXQgPSBudjUwX2dwdW9ial9kbWFfbmV3KGNoYW4sIDB4MDAwMCwgQkFSMV9WTV9CQVNFLCBCQVIxX1ZNX1NJWkUsCisJCQkJICBOVl9NRU1fVEFSR0VUX1ZNLCBOVl9NRU1fQUNDRVNTX1ZNLAorCQkJCSAgTlZfTUVNX1RZUEVfVk0sIE5WX01FTV9DT01QX1ZNLAorCQkJCSAgJnByaXYtPmJhcjFfZG1hb2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJbnZfd3IzMihkZXYsIDB4MDAxNzA4LCAweDgwMDAwMDAwIHwgKHByaXYtPmJhcjFfZG1hb2JqLT5jaW5zdCA+PiA0KSk7CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAkJbnZfd3IzMihkZXYsIDB4MTkwMCArIChpKjQpLCAwKTsKIAorCS8qIENyZWF0ZSBzaGFyZWQgY2hhbm5lbCBWTSwgc3BhY2UgaXMgcmVzZXJ2ZWQgYXQgdGhlIGJlZ2lubmluZworCSAqIHRvIGNhdGNoICJOVUxMIHBvaW50ZXIiIHJlZmVyZW5jZXMKKwkgKi8KKwlyZXQgPSBub3V2ZWF1X3ZtX25ldyhkZXYsIDAsICgxVUxMIDw8IDQwKSwgMHgwMDIwMDAwMDAwVUxMLAorCQkJICAgICAmZGV2X3ByaXYtPmNoYW5fdm0pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlyZXR1cm4gMDsKKworZXJyb3I6CisJbnY1MF9pbnN0bWVtX3Rha2Vkb3duKGRldik7CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZApAQCAtMjQwLDcgKzIzNCw3IEBACiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgbnY1MF9pbnN0bWVtX3ByaXYgKnByaXYgPSBkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJpdjsKLQlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZGV2X3ByaXYtPmZpZm9zWzBdOworCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbHMucHRyWzBdOwogCWludCBpOwogCiAJTlZfREVCVUcoZGV2LCAiXG4iKTsKQEAgLTI1MCwyMyArMjQ0LDIzIEBACiAKIAlkZXZfcHJpdi0+cmFtaW5fYXZhaWxhYmxlID0gZmFsc2U7CiAKLQkvKiBSZXN0b3JlIHN0YXRlIGZyb20gYmVmb3JlIGluaXQgKi8KKwlub3V2ZWF1X3ZtX3JlZihOVUxMLCAmZGV2X3ByaXYtPmNoYW5fdm0sIE5VTEwpOworCiAJZm9yIChpID0gMHgxNzAwOyBpIDw9IDB4MTcxMDsgaSArPSA0KQogCQludl93cjMyKGRldiwgaSwgcHJpdi0+c2F2ZTE3MDBbKGkgLSAweDE3MDApIC8gNF0pOwogCi0Jbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZwcml2LT5mYl9iYXIpOwotCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmcHJpdi0+cHJhbWluX2Jhcik7Ci0Jbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZwcml2LT5wcmFtaW5fcHQpOworCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmcHJpdi0+YmFyM19kbWFvYmopOworCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmcHJpdi0+YmFyMV9kbWFvYmopOwogCi0JLyogRGVzdHJveSBkdW1teSBjaGFubmVsICovCi0JaWYgKGNoYW4pIHsKLQkJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT52bV92cmFtX3B0X25yOyBpKyspCi0JCQlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmNoYW4tPnZtX3ZyYW1fcHRbaV0pOwotCQlkZXZfcHJpdi0+dm1fdnJhbV9wdF9uciA9IDA7CisJbm91dmVhdV92bV9yZWYoTlVMTCwgJmRldl9wcml2LT5iYXIxX3ZtLCBjaGFuLT52bV9wZCk7CisJZGV2X3ByaXYtPmNoYW5uZWxzLnB0clsxMjddID0gMDsKKwludjUwX2NoYW5uZWxfZGVsKCZkZXZfcHJpdi0+Y2hhbm5lbHMucHRyWzBdKTsKIAotCQludjUwX2NoYW5uZWxfZGVsKCZkZXZfcHJpdi0+Zmlmb3NbMF0pOwotCQlkZXZfcHJpdi0+Zmlmb3NbMTI3XSA9IE5VTEw7Ci0JfQorCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmZGV2X3ByaXYtPmJhcjNfdm0tPnBndFswXS5vYmpbMF0pOworCW5vdXZlYXVfdm1fcmVmKE5VTEwsICZkZXZfcHJpdi0+YmFyM192bSwgTlVMTCk7CisKKwlpZiAoZGV2X3ByaXYtPnJhbWluX2hlYXAuZnJlZV9zdGFjay5uZXh0KQorCQlkcm1fbW1fdGFrZWRvd24oJmRldl9wcml2LT5yYW1pbl9oZWFwKTsKIAogCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcml2ID0gTlVMTDsKIAlrZnJlZShwcml2KTsKQEAgLTI3NiwxNiArMjcwLDggQEAKIG52NTBfaW5zdG1lbV9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZGV2X3ByaXYtPmZpZm9zWzBdOwotCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcmFtaW4gPSBjaGFuLT5yYW1pbjsKLQlpbnQgaTsKIAotCXJhbWluLT5pbV9iYWNraW5nX3N1c3BlbmQgPSB2bWFsbG9jKHJhbWluLT5zaXplKTsKLQlpZiAoIXJhbWluLT5pbV9iYWNraW5nX3N1c3BlbmQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZm9yIChpID0gMDsgaSA8IHJhbWluLT5zaXplOyBpICs9IDQpCi0JCXJhbWluLT5pbV9iYWNraW5nX3N1c3BlbmRbaS80XSA9IG52X3JpMzIoZGV2LCBpKTsKKwlkZXZfcHJpdi0+cmFtaW5fYXZhaWxhYmxlID0gZmFsc2U7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5NCwxNDYgKzI4MCwxMjEgQEAKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBudjUwX2luc3RtZW1fcHJpdiAqcHJpdiA9IGRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcml2OwotCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Zmlmb3NbMF07Ci0Jc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpyYW1pbiA9IGNoYW4tPnJhbWluOworCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbHMucHRyWzBdOwogCWludCBpOwogCi0JZGV2X3ByaXYtPnJhbWluX2F2YWlsYWJsZSA9IGZhbHNlOwotCWRldl9wcml2LT5yYW1pbl9iYXNlID0gfjA7Ci0JZm9yIChpID0gMDsgaSA8IHJhbWluLT5zaXplOyBpICs9IDQpCi0JCW52X3dvMzIocmFtaW4sIGksIHJhbWluLT5pbV9iYWNraW5nX3N1c3BlbmRbaS80XSk7Ci0JZGV2X3ByaXYtPnJhbWluX2F2YWlsYWJsZSA9IHRydWU7Ci0JdmZyZWUocmFtaW4tPmltX2JhY2tpbmdfc3VzcGVuZCk7Ci0JcmFtaW4tPmltX2JhY2tpbmdfc3VzcGVuZCA9IE5VTEw7Ci0KIAkvKiBQb2tlIHRoZSByZWxldmFudCByZWdzLCBhbmQgcHJheSBpdCB3b3JrcyA6KSAqLwogCW52X3dyMzIoZGV2LCBOVjUwX1BVTktfQkFSX0NGR19CQVNFLCAoY2hhbi0+cmFtaW4tPnZpbnN0ID4+IDEyKSk7CiAJbnZfd3IzMihkZXYsIE5WNTBfUFVOS19VTksxNzEwLCAwKTsKIAludl93cjMyKGRldiwgTlY1MF9QVU5LX0JBUl9DRkdfQkFTRSwgKGNoYW4tPnJhbWluLT52aW5zdCA+PiAxMikgfAogCQkJCQkgTlY1MF9QVU5LX0JBUl9DRkdfQkFTRV9WQUxJRCk7Ci0JbnZfd3IzMihkZXYsIE5WNTBfUFVOS19CQVIxX0NUWERNQSwgKHByaXYtPmZiX2Jhci0+Y2luc3QgPj4gNCkgfAorCW52X3dyMzIoZGV2LCBOVjUwX1BVTktfQkFSMV9DVFhETUEsIChwcml2LT5iYXIxX2RtYW9iai0+Y2luc3QgPj4gNCkgfAogCQkJCQlOVjUwX1BVTktfQkFSMV9DVFhETUFfVkFMSUQpOwotCW52X3dyMzIoZGV2LCBOVjUwX1BVTktfQkFSM19DVFhETUEsIChwcml2LT5wcmFtaW5fYmFyLT5jaW5zdCA+PiA0KSB8CisJbnZfd3IzMihkZXYsIE5WNTBfUFVOS19CQVIzX0NUWERNQSwgKHByaXYtPmJhcjNfZG1hb2JqLT5jaW5zdCA+PiA0KSB8CiAJCQkJCU5WNTBfUFVOS19CQVIzX0NUWERNQV9WQUxJRCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQludl93cjMyKGRldiwgMHgxOTAwICsgKGkqNCksIDApOworCisJZGV2X3ByaXYtPnJhbWluX2F2YWlsYWJsZSA9IHRydWU7CiB9CiAKK3N0cnVjdCBudjUwX2dwdW9ial9ub2RlIHsKKwlzdHJ1Y3Qgbm91dmVhdV92cmFtICp2cmFtOworCXN0cnVjdCBub3V2ZWF1X3ZtYSBjaGFuX3ZtYTsKKwl1MzIgYWxpZ247Cit9OworCisKIGludAotbnY1MF9pbnN0bWVtX3BvcHVsYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqLAotCQkgICAgICB1aW50MzJfdCAqc3opCitudjUwX2luc3RtZW1fZ2V0KHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqLCB1MzIgc2l6ZSwgdTMyIGFsaWduKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBncHVvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3ZyYW1fZW5naW5lICp2cmFtID0gJmRldl9wcml2LT5lbmdpbmUudnJhbTsKKwlzdHJ1Y3QgbnY1MF9ncHVvYmpfbm9kZSAqbm9kZSA9IE5VTEw7CiAJaW50IHJldDsKIAotCWlmIChncHVvYmotPmltX2JhY2tpbmcpCi0JCXJldHVybiAtRUlOVkFMOworCW5vZGUgPSBremFsbG9jKHNpemVvZigqbm9kZSksIEdGUF9LRVJORUwpOworCWlmICghbm9kZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbm9kZS0+YWxpZ24gPSBhbGlnbjsKIAotCSpzeiA9IEFMSUdOKCpzeiwgNDA5Nik7Ci0JaWYgKCpzeiA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlzaXplICA9IChzaXplICsgNDA5NSkgJiB+NDA5NTsKKwlhbGlnbiA9IG1heChhbGlnbiwgKHUzMik0MDk2KTsKIAotCXJldCA9IG5vdXZlYXVfYm9fbmV3KGRldiwgTlVMTCwgKnN6LCAwLCBUVE1fUExfRkxBR19WUkFNLCAwLCAweDAwMDAsCi0JCQkgICAgIHRydWUsIGZhbHNlLCAmZ3B1b2JqLT5pbV9iYWNraW5nKTsKKwlyZXQgPSB2cmFtLT5nZXQoZGV2LCBzaXplLCBhbGlnbiwgMCwgMCwgJm5vZGUtPnZyYW0pOwogCWlmIChyZXQpIHsKLQkJTlZfRVJST1IoZGV2LCAiZXJyb3IgZ2V0dGluZyBQUkFNSU4gYmFja2luZyBwYWdlczogJWRcbiIsIHJldCk7CisJCWtmcmVlKG5vZGUpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IG5vdXZlYXVfYm9fcGluKGdwdW9iai0+aW1fYmFja2luZywgVFRNX1BMX0ZMQUdfVlJBTSk7Ci0JaWYgKHJldCkgewotCQlOVl9FUlJPUihkZXYsICJlcnJvciBwaW5uaW5nIFBSQU1JTiBiYWNraW5nIFZSQU06ICVkXG4iLCByZXQpOwotCQlub3V2ZWF1X2JvX3JlZihOVUxMLCAmZ3B1b2JqLT5pbV9iYWNraW5nKTsKLQkJcmV0dXJuIHJldDsKKwlncHVvYmotPnZpbnN0ID0gbm9kZS0+dnJhbS0+b2Zmc2V0OworCisJaWYgKGdwdW9iai0+ZmxhZ3MgJiBOVk9CSl9GTEFHX1ZNKSB7CisJCXJldCA9IG5vdXZlYXVfdm1fZ2V0KGRldl9wcml2LT5jaGFuX3ZtLCBzaXplLCAxMiwKKwkJCQkgICAgIE5WX01FTV9BQ0NFU1NfUlcgfCBOVl9NRU1fQUNDRVNTX1NZUywKKwkJCQkgICAgICZub2RlLT5jaGFuX3ZtYSk7CisJCWlmIChyZXQpIHsKKwkJCXZyYW0tPnB1dChkZXYsICZub2RlLT52cmFtKTsKKwkJCWtmcmVlKG5vZGUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCW5vdXZlYXVfdm1fbWFwKCZub2RlLT5jaGFuX3ZtYSwgbm9kZS0+dnJhbSk7CisJCWdwdW9iai0+dmluc3QgPSBub2RlLT5jaGFuX3ZtYS5vZmZzZXQ7CiAJfQogCi0JZ3B1b2JqLT52aW5zdCA9IGdwdW9iai0+aW1fYmFja2luZy0+Ym8ubWVtLnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CisJZ3B1b2JqLT5zaXplID0gc2l6ZTsKKwlncHVvYmotPm5vZGUgPSBub2RlOwogCXJldHVybiAwOwogfQogCiB2b2lkCi1udjUwX2luc3RtZW1fY2xlYXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpncHVvYmopCitudjUwX2luc3RtZW1fcHV0KHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBncHVvYmotPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3ZyYW1fZW5naW5lICp2cmFtID0gJmRldl9wcml2LT5lbmdpbmUudnJhbTsKKwlzdHJ1Y3QgbnY1MF9ncHVvYmpfbm9kZSAqbm9kZTsKIAotCWlmIChncHVvYmogJiYgZ3B1b2JqLT5pbV9iYWNraW5nKSB7Ci0JCWlmIChncHVvYmotPmltX2JvdW5kKQotCQkJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnVuYmluZChkZXYsIGdwdW9iaik7Ci0JCW5vdXZlYXVfYm9fdW5waW4oZ3B1b2JqLT5pbV9iYWNraW5nKTsKLQkJbm91dmVhdV9ib19yZWYoTlVMTCwgJmdwdW9iai0+aW1fYmFja2luZyk7Ci0JCWdwdW9iai0+aW1fYmFja2luZyA9IE5VTEw7CisJbm9kZSA9IGdwdW9iai0+bm9kZTsKKwlncHVvYmotPm5vZGUgPSBOVUxMOworCisJaWYgKG5vZGUtPmNoYW5fdm1hLm5vZGUpIHsKKwkJbm91dmVhdV92bV91bm1hcCgmbm9kZS0+Y2hhbl92bWEpOworCQlub3V2ZWF1X3ZtX3B1dCgmbm9kZS0+Y2hhbl92bWEpOwogCX0KKwl2cmFtLT5wdXQoZGV2LCAmbm9kZS0+dnJhbSk7CisJa2ZyZWUobm9kZSk7CiB9CiAKIGludAotbnY1MF9pbnN0bWVtX2JpbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpncHVvYmopCitudjUwX2luc3RtZW1fbWFwKHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqKQogewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52NTBfaW5zdG1lbV9wcml2ICpwcml2ID0gZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByaXY7Ci0Jc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwcmFtaW5fcHQgPSBwcml2LT5wcmFtaW5fcHQ7Ci0JdWludDMyX3QgcHRlLCBwdGVfZW5kOwotCXVpbnQ2NF90IHZyYW07CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3B1b2JqLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBudjUwX2dwdW9ial9ub2RlICpub2RlID0gZ3B1b2JqLT5ub2RlOworCWludCByZXQ7CiAKLQlpZiAoIWdwdW9iai0+aW1fYmFja2luZyB8fCAhZ3B1b2JqLT5pbV9wcmFtaW4gfHwgZ3B1b2JqLT5pbV9ib3VuZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0ID0gbm91dmVhdV92bV9nZXQoZGV2X3ByaXYtPmJhcjNfdm0sIGdwdW9iai0+c2l6ZSwgMTIsCisJCQkgICAgIE5WX01FTV9BQ0NFU1NfUlcsICZub2RlLT52cmFtLT5iYXJfdm1hKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0JTlZfREVCVUcoZGV2LCAic3Q9MHglbHggc3o9MHglbHhcbiIsCi0JCSBncHVvYmotPmltX3ByYW1pbi0+c3RhcnQsIGdwdW9iai0+aW1fcHJhbWluLT5zaXplKTsKLQotCXB0ZSAgICAgPSAoZ3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0ID4+IDEyKSA8PCAxOwotCXB0ZV9lbmQgPSAoKGdwdW9iai0+aW1fcHJhbWluLT5zaXplID4+IDEyKSA8PCAxKSArIHB0ZTsKLQl2cmFtICAgID0gZ3B1b2JqLT52aW5zdDsKLQotCU5WX0RFQlVHKGRldiwgInByYW1pbj0weCVseCwgcHRlPSVkLCBwdGVfZW5kPSVkXG4iLAotCQkgZ3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0LCBwdGUsIHB0ZV9lbmQpOwotCU5WX0RFQlVHKGRldiwgImZpcnN0IHZyYW0gcGFnZTogMHglMDEwbGx4XG4iLCBncHVvYmotPnZpbnN0KTsKLQotCXZyYW0gfD0gMTsKLQlpZiAoZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2UpIHsKLQkJdnJhbSArPSBkZXZfcHJpdi0+dnJhbV9zeXNfYmFzZTsKLQkJdnJhbSB8PSAweDMwOwotCX0KLQotCXdoaWxlIChwdGUgPCBwdGVfZW5kKSB7Ci0JCW52X3dvMzIocHJhbWluX3B0LCAocHRlICogNCkgKyAwLCBsb3dlcl8zMl9iaXRzKHZyYW0pKTsKLQkJbnZfd28zMihwcmFtaW5fcHQsIChwdGUgKiA0KSArIDQsIHVwcGVyXzMyX2JpdHModnJhbSkpOwotCQl2cmFtICs9IDB4MTAwMDsKLQkJcHRlICs9IDI7Ci0JfQotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwotCi0JbnY1MF92bV9mbHVzaChkZXYsIDYpOwotCi0JZ3B1b2JqLT5pbV9ib3VuZCA9IDE7CisJbm91dmVhdV92bV9tYXAoJm5vZGUtPnZyYW0tPmJhcl92bWEsIG5vZGUtPnZyYW0pOworCWdwdW9iai0+cGluc3QgPSBub2RlLT52cmFtLT5iYXJfdm1hLm9mZnNldDsKIAlyZXR1cm4gMDsKIH0KIAotaW50Ci1udjUwX2luc3RtZW1fdW5iaW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqKQordm9pZAorbnY1MF9pbnN0bWVtX3VubWFwKHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqKQogewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52NTBfaW5zdG1lbV9wcml2ICpwcml2ID0gZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByaXY7Ci0JdWludDMyX3QgcHRlLCBwdGVfZW5kOworCXN0cnVjdCBudjUwX2dwdW9ial9ub2RlICpub2RlID0gZ3B1b2JqLT5ub2RlOwogCi0JaWYgKGdwdW9iai0+aW1fYm91bmQgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBjYW4gaGFwcGVuIGR1cmluZyBsYXRlIHRha2Vkb3duICovCi0JaWYgKHVubGlrZWx5KCFkZXZfcHJpdi0+cmFtaW5fYXZhaWxhYmxlKSkKLQkJcmV0dXJuIDA7Ci0KLQlwdGUgICAgID0gKGdwdW9iai0+aW1fcHJhbWluLT5zdGFydCA+PiAxMikgPDwgMTsKLQlwdGVfZW5kID0gKChncHVvYmotPmltX3ByYW1pbi0+c2l6ZSA+PiAxMikgPDwgMSkgKyBwdGU7Ci0KLQl3aGlsZSAocHRlIDwgcHRlX2VuZCkgewotCQludl93bzMyKHByaXYtPnByYW1pbl9wdCwgKHB0ZSAqIDQpICsgMCwgMHgwMDAwMDAwMCk7Ci0JCW52X3dvMzIocHJpdi0+cHJhbWluX3B0LCAocHRlICogNCkgKyA0LCAweDAwMDAwMDAwKTsKLQkJcHRlICs9IDI7CisJaWYgKG5vZGUtPnZyYW0tPmJhcl92bWEubm9kZSkgeworCQlub3V2ZWF1X3ZtX3VubWFwKCZub2RlLT52cmFtLT5iYXJfdm1hKTsKKwkJbm91dmVhdV92bV9wdXQoJm5vZGUtPnZyYW0tPmJhcl92bWEpOwogCX0KLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmx1c2goZGV2KTsKLQotCWdwdW9iai0+aW1fYm91bmQgPSAwOwotCXJldHVybiAwOwogfQogCiB2b2lkCkBAIC00NTIsMTEgKzQxMywzIEBACiAJCU5WX0VSUk9SKGRldiwgIlBSQU1JTiBmbHVzaCB0aW1lb3V0XG4iKTsKIH0KIAotdm9pZAotbnY1MF92bV9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZW5naW5lKQotewotCW52X3dyMzIoZGV2LCAweDEwMGM4MCwgKGVuZ2luZSA8PCAxNikgfCAxKTsKLQlpZiAoIW52X3dhaXQoZGV2LCAweDEwMGM4MCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCkpCi0JCU5WX0VSUk9SKGRldiwgInZtIGZsdXNoIHRpbWVvdXQ6IGVuZ2luZSAlZFxuIiwgZW5naW5lKTsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92bS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZTUyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBCZW4gU2tlZ2dzCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKworI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCisjaW5jbHVkZSAibm91dmVhdV92bS5oIgorCit2b2lkCitudjUwX3ZtX21hcF9wZ3Qoc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwZ2QsIHUzMiBwZGUsCisJCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGd0WzJdKQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IHBnZC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwl1NjQgcGh5cyA9IDB4ZGVhZGNhZmUwMDAwMDAwMFVMTDsKKwl1MzIgY292ZXJhZ2UgPSAwOworCisJaWYgKHBndFswXSkgeworCQlwaHlzID0gMHgwMDAwMDAwMyB8IHBndFswXS0+dmluc3Q7IC8qIHByZXNlbnQsIDRLaUIgcGFnZXMgKi8KKwkJY292ZXJhZ2UgPSAocGd0WzBdLT5zaXplID4+IDMpIDw8IDEyOworCX0gZWxzZQorCWlmIChwZ3RbMV0pIHsKKwkJcGh5cyA9IDB4MDAwMDAwMDEgfCBwZ3RbMV0tPnZpbnN0OyAvKiBwcmVzZW50ICovCisJCWNvdmVyYWdlID0gKHBndFsxXS0+c2l6ZSA+PiAzKSA8PCAxNjsKKwl9CisKKwlpZiAocGh5cyAmIDEpIHsKKwkJaWYgKGRldl9wcml2LT52cmFtX3N5c19iYXNlKSB7CisJCQlwaHlzICs9IGRldl9wcml2LT52cmFtX3N5c19iYXNlOworCQkJcGh5cyB8PSAweDMwOworCQl9CisKKwkJaWYgKGNvdmVyYWdlIDw9IDMyICogMTAyNCAqIDEwMjQpCisJCQlwaHlzIHw9IDB4NjA7CisJCWVsc2UgaWYgKGNvdmVyYWdlIDw9IDY0ICogMTAyNCAqIDEwMjQpCisJCQlwaHlzIHw9IDB4NDA7CisJCWVsc2UgaWYgKGNvdmVyYWdlIDwgMTI4ICogMTAyNCAqIDEwMjQpCisJCQlwaHlzIHw9IDB4MjA7CisJfQorCisJbnZfd28zMihwZ2QsIChwZGUgKiA4KSArIDAsIGxvd2VyXzMyX2JpdHMocGh5cykpOworCW52X3dvMzIocGdkLCAocGRlICogOCkgKyA0LCB1cHBlcl8zMl9iaXRzKHBoeXMpKTsKK30KKworc3RhdGljIGlubGluZSB1NjQKK252NTBfdm1fYWRkcihzdHJ1Y3Qgbm91dmVhdV92bWEgKnZtYSwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwZ3QsCisJICAgICB1NjQgcGh5cywgdTMyIG1lbXR5cGUsIHUzMiB0YXJnZXQpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gcGd0LT5kZXYtPmRldl9wcml2YXRlOworCisJcGh5cyB8PSAxOyAvKiBwcmVzZW50ICovCisJcGh5cyB8PSAodTY0KW1lbXR5cGUgPDwgNDA7CisKKwkvKiBJR1BzIGRvbid0IGhhdmUgcmVhbCBWUkFNLCByZS10YXJnZXQgdG8gc3RvbGVuIHN5c3RlbSBtZW1vcnkgKi8KKwlpZiAodGFyZ2V0ID09IDAgJiYgZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2UpIHsKKwkJcGh5cyAgKz0gZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2U7CisJCXRhcmdldCA9IDM7CisJfQorCisJcGh5cyB8PSB0YXJnZXQgPDwgNDsKKworCWlmICh2bWEtPmFjY2VzcyAmIE5WX01FTV9BQ0NFU1NfU1lTKQorCQlwaHlzIHw9ICgxIDw8IDYpOworCisJaWYgKCEodm1hLT5hY2Nlc3MgJiBOVl9NRU1fQUNDRVNTX1dPKSkKKwkJcGh5cyB8PSAoMSA8PCAzKTsKKworCXJldHVybiBwaHlzOworfQorCit2b2lkCitudjUwX3ZtX21hcChzdHJ1Y3Qgbm91dmVhdV92bWEgKnZtYSwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwZ3QsCisJICAgIHN0cnVjdCBub3V2ZWF1X3ZyYW0gKm1lbSwgdTMyIHB0ZSwgdTMyIGNudCwgdTY0IHBoeXMpCit7CisJdTMyIGJsb2NrOworCWludCBpOworCisJcGh5cyAgPSBudjUwX3ZtX2FkZHIodm1hLCBwZ3QsIHBoeXMsIG1lbS0+bWVtdHlwZSwgMCk7CisJcHRlIDw8PSAzOworCWNudCA8PD0gMzsKKworCXdoaWxlIChjbnQpIHsKKwkJdTMyIG9mZnNldF9oID0gdXBwZXJfMzJfYml0cyhwaHlzKTsKKwkJdTMyIG9mZnNldF9sID0gbG93ZXJfMzJfYml0cyhwaHlzKTsKKworCQlmb3IgKGkgPSA3OyBpID49IDA7IGktLSkgeworCQkJYmxvY2sgPSAxIDw8IChpICsgMyk7CisJCQlpZiAoY250ID49IGJsb2NrICYmICEocHRlICYgKGJsb2NrIC0gMSkpKQorCQkJCWJyZWFrOworCQl9CisJCW9mZnNldF9sIHw9IChpIDw8IDcpOworCisJCXBoeXMgKz0gYmxvY2sgPDwgKHZtYS0+bm9kZS0+dHlwZSAtIDMpOworCQljbnQgIC09IGJsb2NrOworCisJCXdoaWxlIChibG9jaykgeworCQkJbnZfd28zMihwZ3QsIHB0ZSArIDAsIG9mZnNldF9sKTsKKwkJCW52X3dvMzIocGd0LCBwdGUgKyA0LCBvZmZzZXRfaCk7CisJCQlwdGUgKz0gODsKKwkJCWJsb2NrIC09IDg7CisJCX0KKwl9Cit9CisKK3ZvaWQKK252NTBfdm1fbWFwX3NnKHN0cnVjdCBub3V2ZWF1X3ZtYSAqdm1hLCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnBndCwKKwkgICAgICAgdTMyIHB0ZSwgZG1hX2FkZHJfdCAqbGlzdCwgdTMyIGNudCkKK3sKKwlwdGUgPDw9IDM7CisJd2hpbGUgKGNudC0tKSB7CisJCXU2NCBwaHlzID0gbnY1MF92bV9hZGRyKHZtYSwgcGd0LCAodTY0KSpsaXN0KyssIDAsIDIpOworCQludl93bzMyKHBndCwgcHRlICsgMCwgbG93ZXJfMzJfYml0cyhwaHlzKSk7CisJCW52X3dvMzIocGd0LCBwdGUgKyA0LCB1cHBlcl8zMl9iaXRzKHBoeXMpKTsKKwkJcHRlICs9IDg7CisJfQorfQorCit2b2lkCitudjUwX3ZtX3VubWFwKHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGd0LCB1MzIgcHRlLCB1MzIgY250KQoreworCXB0ZSA8PD0gMzsKKwl3aGlsZSAoY250LS0pIHsKKwkJbnZfd28zMihwZ3QsIHB0ZSArIDAsIDB4MDAwMDAwMDApOworCQludl93bzMyKHBndCwgcHRlICsgNCwgMHgwMDAwMDAwMCk7CisJCXB0ZSArPSA4OworCX0KK30KKwordm9pZAorbnY1MF92bV9mbHVzaChzdHJ1Y3Qgbm91dmVhdV92bSAqdm0pCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gdm0tPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfaW5zdG1lbV9lbmdpbmUgKnBpbnN0bWVtID0gJmRldl9wcml2LT5lbmdpbmUuaW5zdG1lbTsKKwlzdHJ1Y3Qgbm91dmVhdV9maWZvX2VuZ2luZSAqcGZpZm8gPSAmZGV2X3ByaXYtPmVuZ2luZS5maWZvOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCXN0cnVjdCBub3V2ZWF1X2NyeXB0X2VuZ2luZSAqcGNyeXB0ID0gJmRldl9wcml2LT5lbmdpbmUuY3J5cHQ7CisKKwlwaW5zdG1lbS0+Zmx1c2godm0tPmRldik7CisKKwkvKiBCQVIgKi8KKwlpZiAodm0gIT0gZGV2X3ByaXYtPmNoYW5fdm0pIHsKKwkJbnY1MF92bV9mbHVzaF9lbmdpbmUodm0tPmRldiwgNik7CisJCXJldHVybjsKKwl9CisKKwlwZmlmby0+dGxiX2ZsdXNoKHZtLT5kZXYpOworCisJaWYgKGF0b21pY19yZWFkKCZ2bS0+cGdyYXBoX3JlZnMpKQorCQlwZ3JhcGgtPnRsYl9mbHVzaCh2bS0+ZGV2KTsKKwlpZiAoYXRvbWljX3JlYWQoJnZtLT5wY3J5cHRfcmVmcykpCisJCXBjcnlwdC0+dGxiX2ZsdXNoKHZtLT5kZXYpOworfQorCit2b2lkCitudjUwX3ZtX2ZsdXNoX2VuZ2luZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZW5naW5lKQoreworCW52X3dyMzIoZGV2LCAweDEwMGM4MCwgKGVuZ2luZSA8PCAxNikgfCAxKTsKKwlpZiAoIW52X3dhaXQoZGV2LCAweDEwMGM4MCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCkpCisJCU5WX0VSUk9SKGRldiwgInZtIGZsdXNoIHRpbWVvdXQ6IGVuZ2luZSAlZFxuIiwgZW5naW5lKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfdnJhbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92cmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThlOThhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfdnJhbS5jCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgUmVkIEhhdCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQmVuIFNrZWdncworICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKKyNpbmNsdWRlICJub3V2ZWF1X21tLmgiCisKK3N0YXRpYyBpbnQgdHlwZXNbMHg4MF0gPSB7CisJMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAyLCAyLCAyLCAyLCAwLCAwLCAwLCAwLAorCTEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkxLCAxLCAxLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAwLCAwLAorCTAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwKKwkxLCAwLCAyLCAwLCAxLCAwLCAyLCAwLCAxLCAxLCAyLCAyLCAxLCAxLCAwLCAwCit9OworCitib29sCitudjUwX3ZyYW1fZmxhZ3NfdmFsaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHRpbGVfZmxhZ3MpCit7CisJaW50IHR5cGUgPSAodGlsZV9mbGFncyAmIE5PVVZFQVVfR0VNX1RJTEVfTEFZT1VUX01BU0spID4+IDg7CisKKwlpZiAobGlrZWx5KHR5cGUgPCBBUlJBWV9TSVpFKHR5cGVzKSAmJiB0eXBlc1t0eXBlXSkpCisJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKwordm9pZAorbnY1MF92cmFtX2RlbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV92cmFtICoqcHZyYW0pCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9ICZkZXZfcHJpdi0+dHRtLmJkZXY7CisJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4gPSAmYmRldi0+bWFuW1RUTV9QTF9WUkFNXTsKKwlzdHJ1Y3Qgbm91dmVhdV9tbSAqbW0gPSBtYW4tPnByaXY7CisJc3RydWN0IG5vdXZlYXVfbW1fbm9kZSAqdGhpczsKKwlzdHJ1Y3Qgbm91dmVhdV92cmFtICp2cmFtOworCisJdnJhbSA9ICpwdnJhbTsKKwkqcHZyYW0gPSBOVUxMOworCWlmICh1bmxpa2VseSh2cmFtID09IE5VTEwpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZtbS0+bXV0ZXgpOworCXdoaWxlICghbGlzdF9lbXB0eSgmdnJhbS0+cmVnaW9ucykpIHsKKwkJdGhpcyA9IGxpc3RfZmlyc3RfZW50cnkoJnZyYW0tPnJlZ2lvbnMsIHN0cnVjdCBub3V2ZWF1X21tX25vZGUsIHJsX2VudHJ5KTsKKworCQlsaXN0X2RlbCgmdGhpcy0+cmxfZW50cnkpOworCQlub3V2ZWF1X21tX3B1dChtbSwgdGhpcyk7CisJfQorCW11dGV4X3VubG9jaygmbW0tPm11dGV4KTsKKworCWtmcmVlKHZyYW0pOworfQorCitpbnQKK252NTBfdnJhbV9uZXcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTY0IHNpemUsIHUzMiBhbGlnbiwgdTMyIHNpemVfbmMsCisJICAgICAgdTMyIHR5cGUsIHN0cnVjdCBub3V2ZWF1X3ZyYW0gKipwdnJhbSkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gJmRldl9wcml2LT50dG0uYmRldjsKKwlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiA9ICZiZGV2LT5tYW5bVFRNX1BMX1ZSQU1dOworCXN0cnVjdCBub3V2ZWF1X21tICptbSA9IG1hbi0+cHJpdjsKKwlzdHJ1Y3Qgbm91dmVhdV9tbV9ub2RlICpyOworCXN0cnVjdCBub3V2ZWF1X3ZyYW0gKnZyYW07CisJaW50IHJldDsKKworCWlmICghdHlwZXNbdHlwZV0pCisJCXJldHVybiAtRUlOVkFMOworCXNpemUgPj49IDEyOworCWFsaWduID4+PSAxMjsKKwlzaXplX25jID4+PSAxMjsKKworCXZyYW0gPSBremFsbG9jKHNpemVvZigqdnJhbSksIEdGUF9LRVJORUwpOworCWlmICghdnJhbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmdnJhbS0+cmVnaW9ucyk7CisJdnJhbS0+ZGV2ID0gZGV2X3ByaXYtPmRldjsKKwl2cmFtLT5tZW10eXBlID0gdHlwZTsKKwl2cmFtLT5zaXplID0gc2l6ZTsKKworCW11dGV4X2xvY2soJm1tLT5tdXRleCk7CisJZG8geworCQlyZXQgPSBub3V2ZWF1X21tX2dldChtbSwgdHlwZXNbdHlwZV0sIHNpemUsIHNpemVfbmMsIGFsaWduLCAmcik7CisJCWlmIChyZXQpIHsKKwkJCW11dGV4X3VubG9jaygmbW0tPm11dGV4KTsKKwkJCW52NTBfdnJhbV9kZWwoZGV2LCAmdnJhbSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJbGlzdF9hZGRfdGFpbCgmci0+cmxfZW50cnksICZ2cmFtLT5yZWdpb25zKTsKKwkJc2l6ZSAtPSByLT5sZW5ndGg7CisJfSB3aGlsZSAoc2l6ZSk7CisJbXV0ZXhfdW5sb2NrKCZtbS0+bXV0ZXgpOworCisJciA9IGxpc3RfZmlyc3RfZW50cnkoJnZyYW0tPnJlZ2lvbnMsIHN0cnVjdCBub3V2ZWF1X21tX25vZGUsIHJsX2VudHJ5KTsKKwl2cmFtLT5vZmZzZXQgPSAodTY0KXItPm9mZnNldCA8PCAxMjsKKwkqcHZyYW0gPSB2cmFtOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyCitudjUwX3ZyYW1fcmJsb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaSwgcGFydHMsIGNvbGJpdHMsIHJvd2JpdHNhLCByb3diaXRzYiwgYmFua3M7CisJdTY0IHJvd3NpemUsIHByZWRpY3RlZDsKKwl1MzIgcjAsIHI0LCBydCwgcnUsIHJibG9ja19zaXplOworCisJcjAgPSBudl9yZDMyKGRldiwgMHgxMDAyMDApOworCXI0ID0gbnZfcmQzMihkZXYsIDB4MTAwMjA0KTsKKwlydCA9IG52X3JkMzIoZGV2LCAweDEwMDI1MCk7CisJcnUgPSBudl9yZDMyKGRldiwgMHgwMDE1NDApOworCU5WX0RFQlVHKGRldiwgIm1lbWNmZyAweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsIHIwLCByNCwgcnQsIHJ1KTsKKworCWZvciAoaSA9IDAsIHBhcnRzID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAocnUgJiAoMHgwMDAxMDAwMCA8PCBpKSkKKwkJCXBhcnRzKys7CisJfQorCisJY29sYml0cyAgPSAgKHI0ICYgMHgwMDAwZjAwMCkgPj4gMTI7CisJcm93Yml0c2EgPSAoKHI0ICYgMHgwMDBmMDAwMCkgPj4gMTYpICsgODsKKwlyb3diaXRzYiA9ICgocjQgJiAweDAwZjAwMDAwKSA+PiAyMCkgKyA4OworCWJhbmtzICAgID0gKChyNCAmIDB4MDEwMDAwMDApID8gOCA6IDQpOworCisJcm93c2l6ZSA9IHBhcnRzICogYmFua3MgKiAoMSA8PCBjb2xiaXRzKSAqIDg7CisJcHJlZGljdGVkID0gcm93c2l6ZSA8PCByb3diaXRzYTsKKwlpZiAocjAgJiAweDAwMDAwMDA0KQorCQlwcmVkaWN0ZWQgKz0gcm93c2l6ZSA8PCByb3diaXRzYjsKKworCWlmIChwcmVkaWN0ZWQgIT0gZGV2X3ByaXYtPnZyYW1fc2l6ZSkgeworCQlOVl9XQVJOKGRldiwgIm1lbW9yeSBjb250cm9sbGVyIHJlcG9ydHMgJWRNaUIgVlJBTVxuIiwKKwkJCSh1MzIpKGRldl9wcml2LT52cmFtX3NpemUgPj4gMjApKTsKKwkJTlZfV0FSTihkZXYsICJ3ZSBjYWxjdWxhdGVkICVkTWlCIFZSQU1cbiIsCisJCQkodTMyKShwcmVkaWN0ZWQgPj4gMjApKTsKKwl9CisKKwlyYmxvY2tfc2l6ZSA9IHJvd3NpemU7CisJaWYgKHJ0ICYgMSkKKwkJcmJsb2NrX3NpemUgKj0gMzsKKworCU5WX0RFQlVHKGRldiwgInJibG9jayAlZCBieXRlc1xuIiwgcmJsb2NrX3NpemUpOworCXJldHVybiByYmxvY2tfc2l6ZTsKK30KKworaW50CitudjUwX3ZyYW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkZXZfcHJpdi0+dnJhbV9zaXplICA9IG52X3JkMzIoZGV2LCAweDEwMDIwYyk7CisJZGV2X3ByaXYtPnZyYW1fc2l6ZSB8PSAoZGV2X3ByaXYtPnZyYW1fc2l6ZSAmIDB4ZmYpIDw8IDMyOworCWRldl9wcml2LT52cmFtX3NpemUgJj0gMHhmZmZmZmZmZjAwVUxMOworCisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHhhYToKKwljYXNlIDB4YWM6CisJY2FzZSAweGFmOgorCQlkZXZfcHJpdi0+dnJhbV9zeXNfYmFzZSA9ICh1NjQpbnZfcmQzMihkZXYsIDB4MTAwZTEwKSA8PCAxMjsKKwkJZGV2X3ByaXYtPnZyYW1fcmJsb2NrX3NpemUgPSA0MDk2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfcHJpdi0+dnJhbV9yYmxvY2tfc2l6ZSA9IG52NTBfdnJhbV9yYmxvY2soZGV2KTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjg0X2NyeXB0LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjg0X2NyeXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMxOGFlMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252ODRfY3J5cHQuYwpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEJlbiBTa2VnZ3MKKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCisjaW5jbHVkZSAibm91dmVhdV91dGlsLmgiCisjaW5jbHVkZSAibm91dmVhdV92bS5oIgorCitzdGF0aWMgdm9pZCBudjg0X2NyeXB0X2lzcihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKKworaW50Citudjg0X2NyeXB0X2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcmFtaW4gPSBjaGFuLT5yYW1pbjsKKwlpbnQgcmV0OworCisJTlZfREVCVUcoZGV2LCAiY2glZFxuIiwgY2hhbi0+aWQpOworCisJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3KGRldiwgY2hhbiwgMjU2LCAwLAorCQkJCSBOVk9CSl9GTEFHX1pFUk9fQUxMT0MgfCBOVk9CSl9GTEFHX1pFUk9fRlJFRSwKKwkJCQkgJmNoYW4tPmNyeXB0X2N0eCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW52X3dvMzIocmFtaW4sIDB4YTAsIDB4MDAxOTAwMDApOworCW52X3dvMzIocmFtaW4sIDB4YTQsIGNoYW4tPmNyeXB0X2N0eC0+dmluc3QgKyAweGZmKTsKKwludl93bzMyKHJhbWluLCAweGE4LCBjaGFuLT5jcnlwdF9jdHgtPnZpbnN0KTsKKwludl93bzMyKHJhbWluLCAweGFjLCAwKTsKKwludl93bzMyKHJhbWluLCAweGIwLCAwKTsKKwludl93bzMyKHJhbWluLCAweGI0LCAwKTsKKworCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOworCWF0b21pY19pbmMoJmNoYW4tPnZtLT5wY3J5cHRfcmVmcyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK252ODRfY3J5cHRfZGVzdHJveV9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKKwl1MzIgaW5zdDsKKworCWlmICghY2hhbi0+Y3J5cHRfY3R4KQorCQlyZXR1cm47CisKKwlpbnN0ICA9IChjaGFuLT5yYW1pbi0+dmluc3QgPj4gMTIpOworCWluc3QgfD0gMHg4MDAwMDAwMDsKKworCS8qIG1hcmsgY29udGV4dCBhcyBpbnZhbGlkIGlmIHN0aWxsIG9uIHRoZSBoYXJkd2FyZSwgbm90CisJICogZG9pbmcgdGhpcyBjYXVzZXMgaXNzdWVzIHRoZSBuZXh0IHRpbWUgUENSWVBUIGlzIHVzZWQsCisJICogdW5zdXJwcmlzaW5nbHkgOikKKwkgKi8KKwludl93cjMyKGRldiwgMHgxMDIwMGMsIDB4MDAwMDAwMDApOworCWlmIChudl9yZDMyKGRldiwgMHgxMDIxODgpID09IGluc3QpCisJCW52X21hc2soZGV2LCAweDEwMjE4OCwgMHg4MDAwMDAwMCwgMHgwMDAwMDAwMCk7CisJaWYgKG52X3JkMzIoZGV2LCAweDEwMjE4YykgPT0gaW5zdCkKKwkJbnZfbWFzayhkZXYsIDB4MTAyMThjLCAweDgwMDAwMDAwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHgxMDIwMGMsIDB4MDAwMDAwMTApOworCisJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZjaGFuLT5jcnlwdF9jdHgpOworCWF0b21pY19kZWMoJmNoYW4tPnZtLT5wY3J5cHRfcmVmcyk7Cit9CisKK3ZvaWQKK252ODRfY3J5cHRfdGxiX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJbnY1MF92bV9mbHVzaF9lbmdpbmUoZGV2LCAweDBhKTsKK30KKworaW50Citudjg0X2NyeXB0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2NyeXB0X2VuZ2luZSAqcGNyeXB0ID0gJmRldl9wcml2LT5lbmdpbmUuY3J5cHQ7CisKKwlpZiAoIXBjcnlwdC0+cmVnaXN0ZXJlZCkgeworCQlOVk9CSl9DTEFTUyhkZXYsIDB4NzRjMSwgQ1JZUFQpOworCQlwY3J5cHQtPnJlZ2lzdGVyZWQgPSB0cnVlOworCX0KKworCW52X21hc2soZGV2LCAweDAwMDIwMCwgMHgwMDAwNDAwMCwgMHgwMDAwMDAwMCk7CisJbnZfbWFzayhkZXYsIDB4MDAwMjAwLCAweDAwMDA0MDAwLCAweDAwMDA0MDAwKTsKKworCW5vdXZlYXVfaXJxX3JlZ2lzdGVyKGRldiwgMTQsIG52ODRfY3J5cHRfaXNyKTsKKwludl93cjMyKGRldiwgMHgxMDIxMzAsIDB4ZmZmZmZmZmYpOworCW52X3dyMzIoZGV2LCAweDEwMjE0MCwgMHhmZmZmZmZiZik7CisKKwludl93cjMyKGRldiwgMHgxMDIwMGMsIDB4MDAwMDAwMTApOworCXJldHVybiAwOworfQorCit2b2lkCitudjg0X2NyeXB0X2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwludl93cjMyKGRldiwgMHgxMDIxNDAsIDB4MDAwMDAwMDApOworCW5vdXZlYXVfaXJxX3VucmVnaXN0ZXIoZGV2LCAxNCk7Cit9CisKK3N0YXRpYyB2b2lkCitudjg0X2NyeXB0X2lzcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXUzMiBzdGF0ID0gbnZfcmQzMihkZXYsIDB4MTAyMTMwKTsKKwl1MzIgbXRoZCA9IG52X3JkMzIoZGV2LCAweDEwMjE5MCk7CisJdTMyIGRhdGEgPSBudl9yZDMyKGRldiwgMHgxMDIxOTQpOworCXUzMiBpbnN0ID0gbnZfcmQzMihkZXYsIDB4MTAyMTg4KSAmIDB4N2ZmZmZmZmY7CisJaW50IHNob3cgPSBub3V2ZWF1X3JhdGVsaW1pdCgpOworCisJaWYgKHNob3cpIHsKKwkJTlZfSU5GTyhkZXYsICJQQ1JZUFRfSU5UUjogMHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4XG4iLAorCQkJICAgICBzdGF0LCBtdGhkLCBkYXRhLCBpbnN0KTsKKwl9CisKKwludl93cjMyKGRldiwgMHgxMDIxMzAsIHN0YXQpOworCW52X3dyMzIoZGV2LCAweDEwMjAwYywgMHgxMCk7CisKKwludjUwX2ZiX3ZtX3RyYXAoZGV2LCBzaG93LCAiUENSWVBUIik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2ZiY29uLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2ZiY29uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1ZDRjMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZmJjb24uYwpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEJlbiBTa2VnZ3MKKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCisjaW5jbHVkZSAibm91dmVhdV9kbWEuaCIKKyNpbmNsdWRlICJub3V2ZWF1X3JhbWh0LmgiCisjaW5jbHVkZSAibm91dmVhdV9mYmNvbi5oIgorI2luY2x1ZGUgIm5vdXZlYXVfbW0uaCIKKworaW50CitudmMwX2ZiY29uX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCit7CisJc3RydWN0IG5vdXZlYXVfZmJkZXYgKm5mYmRldiA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbmZiZGV2LT5kZXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZGV2X3ByaXYtPmNoYW5uZWw7CisJaW50IHJldDsKKworCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgcmVjdC0+cm9wID09IFJPUF9DT1BZID8gNyA6IDExKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJlY3QtPnJvcCAhPSBST1BfQ09QWSkgeworCQlCRUdJTl9OVkMwKGNoYW4sIDIsIE52U3ViMkQsIDB4MDJhYywgMSk7CisJCU9VVF9SSU5HICAoY2hhbiwgMSk7CisJfQorCUJFR0lOX05WQzAoY2hhbiwgMiwgTnZTdWIyRCwgMHgwNTg4LCAxKTsKKwlpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfVFJVRUNPTE9SIHx8CisJICAgIGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX0RJUkVDVENPTE9SKQorCQlPVVRfUklORyAgKGNoYW4sICgodWludDMyX3QgKilpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVjdC0+Y29sb3JdKTsKKwllbHNlCisJCU9VVF9SSU5HICAoY2hhbiwgcmVjdC0+Y29sb3IpOworCUJFR0lOX05WQzAoY2hhbiwgMiwgTnZTdWIyRCwgMHgwNjAwLCA0KTsKKwlPVVRfUklORyAgKGNoYW4sIHJlY3QtPmR4KTsKKwlPVVRfUklORyAgKGNoYW4sIHJlY3QtPmR5KTsKKwlPVVRfUklORyAgKGNoYW4sIHJlY3QtPmR4ICsgcmVjdC0+d2lkdGgpOworCU9VVF9SSU5HICAoY2hhbiwgcmVjdC0+ZHkgKyByZWN0LT5oZWlnaHQpOworCWlmIChyZWN0LT5yb3AgIT0gUk9QX0NPUFkpIHsKKwkJQkVHSU5fTlZDMChjaGFuLCAyLCBOdlN1YjJELCAweDAyYWMsIDEpOworCQlPVVRfUklORyAgKGNoYW4sIDMpOworCX0KKwlGSVJFX1JJTkcoY2hhbik7CisJcmV0dXJuIDA7Cit9CisKK2ludAorbnZjMF9mYmNvbl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICpyZWdpb24pCit7CisJc3RydWN0IG5vdXZlYXVfZmJkZXYgKm5mYmRldiA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbmZiZGV2LT5kZXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZGV2X3ByaXYtPmNoYW5uZWw7CisJaW50IHJldDsKKworCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgMTIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlCRUdJTl9OVkMwKGNoYW4sIDIsIE52U3ViMkQsIDB4MDExMCwgMSk7CisJT1VUX1JJTkcgIChjaGFuLCAwKTsKKwlCRUdJTl9OVkMwKGNoYW4sIDIsIE52U3ViMkQsIDB4MDhiMCwgNCk7CisJT1VUX1JJTkcgIChjaGFuLCByZWdpb24tPmR4KTsKKwlPVVRfUklORyAgKGNoYW4sIHJlZ2lvbi0+ZHkpOworCU9VVF9SSU5HICAoY2hhbiwgcmVnaW9uLT53aWR0aCk7CisJT1VUX1JJTkcgIChjaGFuLCByZWdpb24tPmhlaWdodCk7CisJQkVHSU5fTlZDMChjaGFuLCAyLCBOdlN1YjJELCAweDA4ZDAsIDQpOworCU9VVF9SSU5HICAoY2hhbiwgMCk7CisJT1VUX1JJTkcgIChjaGFuLCByZWdpb24tPnN4KTsKKwlPVVRfUklORyAgKGNoYW4sIDApOworCU9VVF9SSU5HICAoY2hhbiwgcmVnaW9uLT5zeSk7CisJRklSRV9SSU5HKGNoYW4pOworCXJldHVybiAwOworfQorCitpbnQKK252YzBfZmJjb25faW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQoreworCXN0cnVjdCBub3V2ZWF1X2ZiZGV2ICpuZmJkZXYgPSBpbmZvLT5wYXI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5mYmRldi0+ZGV2OworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiA9IGRldl9wcml2LT5jaGFubmVsOworCXVpbnQzMl90IHdpZHRoLCBkd29yZHMsICpkYXRhID0gKHVpbnQzMl90ICopaW1hZ2UtPmRhdGE7CisJdWludDMyX3QgbWFzayA9IH4ofjAgPj4gKDMyIC0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSk7CisJdWludDMyX3QgKnBhbGV0dGUgPSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZTsKKwlpbnQgcmV0OworCisJaWYgKGltYWdlLT5kZXB0aCAhPSAxKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgMTEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl3aWR0aCA9IEFMSUdOKGltYWdlLT53aWR0aCwgMzIpOworCWR3b3JkcyA9ICh3aWR0aCAqIGltYWdlLT5oZWlnaHQpID4+IDU7CisKKwlCRUdJTl9OVkMwKGNoYW4sIDIsIE52U3ViMkQsIDB4MDgxNCwgMik7CisJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUiB8fAorCSAgICBpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUikgeworCQlPVVRfUklORyAgKGNoYW4sIHBhbGV0dGVbaW1hZ2UtPmJnX2NvbG9yXSB8IG1hc2spOworCQlPVVRfUklORyAgKGNoYW4sIHBhbGV0dGVbaW1hZ2UtPmZnX2NvbG9yXSB8IG1hc2spOworCX0gZWxzZSB7CisJCU9VVF9SSU5HICAoY2hhbiwgaW1hZ2UtPmJnX2NvbG9yKTsKKwkJT1VUX1JJTkcgIChjaGFuLCBpbWFnZS0+ZmdfY29sb3IpOworCX0KKwlCRUdJTl9OVkMwKGNoYW4sIDIsIE52U3ViMkQsIDB4MDgzOCwgMik7CisJT1VUX1JJTkcgIChjaGFuLCBpbWFnZS0+d2lkdGgpOworCU9VVF9SSU5HICAoY2hhbiwgaW1hZ2UtPmhlaWdodCk7CisJQkVHSU5fTlZDMChjaGFuLCAyLCBOdlN1YjJELCAweDA4NTAsIDQpOworCU9VVF9SSU5HICAoY2hhbiwgMCk7CisJT1VUX1JJTkcgIChjaGFuLCBpbWFnZS0+ZHgpOworCU9VVF9SSU5HICAoY2hhbiwgMCk7CisJT1VUX1JJTkcgIChjaGFuLCBpbWFnZS0+ZHkpOworCisJd2hpbGUgKGR3b3JkcykgeworCQlpbnQgcHVzaCA9IGR3b3JkcyA+IDIwNDcgPyAyMDQ3IDogZHdvcmRzOworCisJCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgcHVzaCArIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlkd29yZHMgLT0gcHVzaDsKKworCQlCRUdJTl9OVkMwKGNoYW4sIDYsIE52U3ViMkQsIDB4MDg2MCwgcHVzaCk7CisJCU9VVF9SSU5HcChjaGFuLCBkYXRhLCBwdXNoKTsKKwkJZGF0YSArPSBwdXNoOworCX0KKworCUZJUkVfUklORyhjaGFuKTsKKwlyZXR1cm4gMDsKK30KKworaW50CitudmMwX2ZiY29uX2FjY2VsX2luaXQoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IG5vdXZlYXVfZmJkZXYgKm5mYmRldiA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbmZiZGV2LT5kZXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZGV2X3ByaXYtPmNoYW5uZWw7CisJc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSBuZmJkZXYtPm5vdXZlYXVfZmIubnZibzsKKwlpbnQgcmV0LCBmb3JtYXQ7CisKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9ncl9uZXcoY2hhbiwgMHg5MDJkLCAweDkwMmQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJZm9ybWF0ID0gMHhmMzsKKwkJYnJlYWs7CisJY2FzZSAxNToKKwkJZm9ybWF0ID0gMHhmODsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJZm9ybWF0ID0gMHhlODsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJc3dpdGNoIChpbmZvLT52YXIudHJhbnNwLmxlbmd0aCkgeworCQljYXNlIDA6IC8qIGRlcHRoIDI0ICovCisJCWNhc2UgODogLyogZGVwdGggMzIsIGp1c3QgdXNlIDI0Li4gKi8KKwkJCWZvcm1hdCA9IDB4ZTY7CisJCQlicmVhazsKKwkJY2FzZSAyOiAvKiBkZXB0aCAzMCAqLworCQkJZm9ybWF0ID0gMHhkMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gUklOR19TUEFDRShjaGFuLCA2MCk7CisJaWYgKHJldCkgeworCQlXQVJOX09OKDEpOworCQlub3V2ZWF1X2ZiY29uX2dwdV9sb2NrdXAoaW5mbyk7CisJCXJldHVybiByZXQ7CisJfQorCisJQkVHSU5fTlZDMChjaGFuLCAyLCBOdlN1YjJELCAweDAwMDAsIDEpOworCU9VVF9SSU5HICAoY2hhbiwgMHgwMDAwOTAyZCk7CisJQkVHSU5fTlZDMChjaGFuLCAyLCBOdlN1YjJELCAweDAxMDQsIDIpOworCU9VVF9SSU5HICAoY2hhbiwgdXBwZXJfMzJfYml0cyhjaGFuLT5ub3RpZmllcl9iby0+Ym8ub2Zmc2V0KSk7CisJT1VUX1JJTkcgIChjaGFuLCBsb3dlcl8zMl9iaXRzKGNoYW4tPm5vdGlmaWVyX2JvLT5iby5vZmZzZXQpKTsKKwlCRUdJTl9OVkMwKGNoYW4sIDIsIE52U3ViMkQsIDB4MDI5MCwgMSk7CisJT1VUX1JJTkcgIChjaGFuLCAwKTsKKwlCRUdJTl9OVkMwKGNoYW4sIDIsIE52U3ViMkQsIDB4MDg4OCwgMSk7CisJT1VUX1JJTkcgIChjaGFuLCAxKTsKKwlCRUdJTl9OVkMwKGNoYW4sIDIsIE52U3ViMkQsIDB4MDJhYywgMSk7CisJT1VUX1JJTkcgIChjaGFuLCAzKTsKKwlCRUdJTl9OVkMwKGNoYW4sIDIsIE52U3ViMkQsIDB4MDJhMCwgMSk7CisJT1VUX1JJTkcgIChjaGFuLCAweDU1KTsKKwlCRUdJTl9OVkMwKGNoYW4sIDIsIE52U3ViMkQsIDB4MDhjMCwgNCk7CisJT1VUX1JJTkcgIChjaGFuLCAwKTsKKwlPVVRfUklORyAgKGNoYW4sIDEpOworCU9VVF9SSU5HICAoY2hhbiwgMCk7CisJT1VUX1JJTkcgIChjaGFuLCAxKTsKKwlCRUdJTl9OVkMwKGNoYW4sIDIsIE52U3ViMkQsIDB4MDU4MCwgMik7CisJT1VUX1JJTkcgIChjaGFuLCA0KTsKKwlPVVRfUklORyAgKGNoYW4sIGZvcm1hdCk7CisJQkVHSU5fTlZDMChjaGFuLCAyLCBOdlN1YjJELCAweDAyZTgsIDIpOworCU9VVF9SSU5HICAoY2hhbiwgMik7CisJT1VUX1JJTkcgIChjaGFuLCAxKTsKKworCUJFR0lOX05WQzAoY2hhbiwgMiwgTnZTdWIyRCwgMHgwODA0LCAxKTsKKwlPVVRfUklORyAgKGNoYW4sIGZvcm1hdCk7CisJQkVHSU5fTlZDMChjaGFuLCAyLCBOdlN1YjJELCAweDA4MDAsIDEpOworCU9VVF9SSU5HICAoY2hhbiwgMSk7CisJQkVHSU5fTlZDMChjaGFuLCAyLCBOdlN1YjJELCAweDA4MDgsIDMpOworCU9VVF9SSU5HICAoY2hhbiwgMCk7CisJT1VUX1JJTkcgIChjaGFuLCAwKTsKKwlPVVRfUklORyAgKGNoYW4sIDEpOworCUJFR0lOX05WQzAoY2hhbiwgMiwgTnZTdWIyRCwgMHgwODFjLCAxKTsKKwlPVVRfUklORyAgKGNoYW4sIDEpOworCUJFR0lOX05WQzAoY2hhbiwgMiwgTnZTdWIyRCwgMHgwODQwLCA0KTsKKwlPVVRfUklORyAgKGNoYW4sIDApOworCU9VVF9SSU5HICAoY2hhbiwgMSk7CisJT1VUX1JJTkcgIChjaGFuLCAwKTsKKwlPVVRfUklORyAgKGNoYW4sIDEpOworCUJFR0lOX05WQzAoY2hhbiwgMiwgTnZTdWIyRCwgMHgwMjAwLCAxMCk7CisJT1VUX1JJTkcgIChjaGFuLCBmb3JtYXQpOworCU9VVF9SSU5HICAoY2hhbiwgMSk7CisJT1VUX1JJTkcgIChjaGFuLCAwKTsKKwlPVVRfUklORyAgKGNoYW4sIDEpOworCU9VVF9SSU5HICAoY2hhbiwgMCk7CisJT1VUX1JJTkcgIChjaGFuLCBpbmZvLT5maXgubGluZV9sZW5ndGgpOworCU9VVF9SSU5HICAoY2hhbiwgaW5mby0+dmFyLnhyZXNfdmlydHVhbCk7CisJT1VUX1JJTkcgIChjaGFuLCBpbmZvLT52YXIueXJlc192aXJ0dWFsKTsKKwlPVVRfUklORyAgKGNoYW4sIHVwcGVyXzMyX2JpdHMobnZiby0+dm1hLm9mZnNldCkpOworCU9VVF9SSU5HICAoY2hhbiwgbG93ZXJfMzJfYml0cyhudmJvLT52bWEub2Zmc2V0KSk7CisJQkVHSU5fTlZDMChjaGFuLCAyLCBOdlN1YjJELCAweDAyMzAsIDEwKTsKKwlPVVRfUklORyAgKGNoYW4sIGZvcm1hdCk7CisJT1VUX1JJTkcgIChjaGFuLCAxKTsKKwlPVVRfUklORyAgKGNoYW4sIDApOworCU9VVF9SSU5HICAoY2hhbiwgMSk7CisJT1VUX1JJTkcgIChjaGFuLCAwKTsKKwlPVVRfUklORyAgKGNoYW4sIGluZm8tPmZpeC5saW5lX2xlbmd0aCk7CisJT1VUX1JJTkcgIChjaGFuLCBpbmZvLT52YXIueHJlc192aXJ0dWFsKTsKKwlPVVRfUklORyAgKGNoYW4sIGluZm8tPnZhci55cmVzX3ZpcnR1YWwpOworCU9VVF9SSU5HICAoY2hhbiwgdXBwZXJfMzJfYml0cyhudmJvLT52bWEub2Zmc2V0KSk7CisJT1VUX1JJTkcgIChjaGFuLCBsb3dlcl8zMl9iaXRzKG52Ym8tPnZtYS5vZmZzZXQpKTsKKwlGSVJFX1JJTkcgKGNoYW4pOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZmlmby5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9maWZvLmMKaW5kZXggODkwYzJiOS4uZTZmOTJjNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZmlmby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZmlmby5jCkBAIC0yNSw2ICsyNSw0OSBAQAogI2luY2x1ZGUgImRybVAuaCIKIAogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCisjaW5jbHVkZSAibm91dmVhdV9tbS5oIgorCitzdGF0aWMgdm9pZCBudmMwX2ZpZm9faXNyKHN0cnVjdCBkcm1fZGV2aWNlICopOworCitzdHJ1Y3QgbnZjMF9maWZvX3ByaXYgeworCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGxheWxpc3RbMl07CisJaW50IGN1cl9wbGF5bGlzdDsKKwlzdHJ1Y3Qgbm91dmVhdV92bWEgdXNlcl92bWE7CisJaW50IHNwb29uX25yOworfTsKKworc3RydWN0IG52YzBfZmlmb19jaGFuIHsKKwlzdHJ1Y3Qgbm91dmVhdV9ibyAqdXNlcjsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnJhbWZjOworfTsKKworc3RhdGljIHZvaWQKK252YzBfZmlmb19wbGF5bGlzdF91cGRhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2luc3RtZW1fZW5naW5lICpwaW5zdG1lbSA9ICZkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW07CisJc3RydWN0IG5vdXZlYXVfZmlmb19lbmdpbmUgKnBmaWZvID0gJmRldl9wcml2LT5lbmdpbmUuZmlmbzsKKwlzdHJ1Y3QgbnZjMF9maWZvX3ByaXYgKnByaXYgPSBwZmlmby0+cHJpdjsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmN1cjsKKwlpbnQgaSwgcDsKKworCWN1ciA9IHByaXYtPnBsYXlsaXN0W3ByaXYtPmN1cl9wbGF5bGlzdF07CisJcHJpdi0+Y3VyX3BsYXlsaXN0ID0gIXByaXYtPmN1cl9wbGF5bGlzdDsKKworCWZvciAoaSA9IDAsIHAgPSAwOyBpIDwgMTI4OyBpKyspIHsKKwkJaWYgKCEobnZfcmQzMihkZXYsIDB4MzAwNCArIChpICogOCkpICYgMSkpCisJCQljb250aW51ZTsKKwkJbnZfd28zMihjdXIsIHAgKyAwLCBpKTsKKwkJbnZfd28zMihjdXIsIHAgKyA0LCAweDAwMDAwMDA0KTsKKwkJcCArPSA4OworCX0KKwlwaW5zdG1lbS0+Zmx1c2goZGV2KTsKKworCW52X3dyMzIoZGV2LCAweDAwMjI3MCwgY3VyLT52aW5zdCA+PiAxMik7CisJbnZfd3IzMihkZXYsIDB4MDAyMjc0LCAweDAxZjAwMDAwIHwgKHAgPj4gMykpOworCWlmICghbnZfd2FpdChkZXYsIDB4MDAyMjdjLCAweDAwMTAwMDAwLCAweDAwMDAwMDAwKSkKKwkJTlZfRVJST1IoZGV2LCAiUEZJRk8gLSBwbGF5bGlzdCB1cGRhdGUgZmFpbGVkXG4iKTsKK30KIAogdm9pZAogbnZjMF9maWZvX2Rpc2FibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTU3LDEyICsxMDAsMTM1IEBACiBpbnQKIG52YzBfZmlmb19jcmVhdGVfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9pbnN0bWVtX2VuZ2luZSAqcGluc3RtZW0gPSAmZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtOworCXN0cnVjdCBub3V2ZWF1X2ZpZm9fZW5naW5lICpwZmlmbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmZpZm87CisJc3RydWN0IG52YzBfZmlmb19wcml2ICpwcml2ID0gcGZpZm8tPnByaXY7CisJc3RydWN0IG52YzBfZmlmb19jaGFuICpmaWZvY2g7CisJdTY0IGliX3ZpcnQsIHVzZXJfdmluc3Q7CisJaW50IHJldDsKKworCWNoYW4tPmZpZm9fcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpmaWZvY2gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoYW4tPmZpZm9fcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisJZmlmb2NoID0gY2hhbi0+Zmlmb19wcml2OworCisJLyogYWxsb2NhdGUgdnJhbSBmb3IgY29udHJvbCByZWdzLCBtYXAgaW50byBwb2xsaW5nIGFyZWEgKi8KKwlyZXQgPSBub3V2ZWF1X2JvX25ldyhkZXYsIE5VTEwsIDB4MTAwMCwgMCwgVFRNX1BMX0ZMQUdfVlJBTSwKKwkJCSAgICAgMCwgMCwgdHJ1ZSwgdHJ1ZSwgJmZpZm9jaC0+dXNlcik7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IG5vdXZlYXVfYm9fcGluKGZpZm9jaC0+dXNlciwgVFRNX1BMX0ZMQUdfVlJBTSk7CisJaWYgKHJldCkgeworCQlub3V2ZWF1X2JvX3JlZihOVUxMLCAmZmlmb2NoLT51c2VyKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwl1c2VyX3ZpbnN0ID0gZmlmb2NoLT51c2VyLT5iby5tZW0uc3RhcnQgPDwgUEFHRV9TSElGVDsKKworCXJldCA9IG5vdXZlYXVfYm9fbWFwKGZpZm9jaC0+dXNlcik7CisJaWYgKHJldCkgeworCQlub3V2ZWF1X2JvX3VucGluKGZpZm9jaC0+dXNlcik7CisJCW5vdXZlYXVfYm9fcmVmKE5VTEwsICZmaWZvY2gtPnVzZXIpOworCQlnb3RvIGVycm9yOworCX0KKworCW5vdXZlYXVfdm1fbWFwX2F0KCZwcml2LT51c2VyX3ZtYSwgY2hhbi0+aWQgKiAweDEwMDAsCisJCQkgIGZpZm9jaC0+dXNlci0+Ym8ubWVtLm1tX25vZGUpOworCisJY2hhbi0+dXNlciA9IGlvcmVtYXBfd2MocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMSkgKworCQkJCXByaXYtPnVzZXJfdm1hLm9mZnNldCArIChjaGFuLT5pZCAqIDB4MTAwMCksCisJCQkJUEFHRV9TSVpFKTsKKwlpZiAoIWNoYW4tPnVzZXIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpYl92aXJ0ID0gY2hhbi0+cHVzaGJ1Zl9iYXNlICsgY2hhbi0+ZG1hLmliX2Jhc2UgKiA0OworCisJLyogemVybyBjaGFubmVsIHJlZ3MgKi8KKwlub3V2ZWF1X2JvX3dyMzIoZmlmb2NoLT51c2VyLCAweDAwNDAvNCwgMCk7CisJbm91dmVhdV9ib193cjMyKGZpZm9jaC0+dXNlciwgMHgwMDQ0LzQsIDApOworCW5vdXZlYXVfYm9fd3IzMihmaWZvY2gtPnVzZXIsIDB4MDA0OC80LCAwKTsKKwlub3V2ZWF1X2JvX3dyMzIoZmlmb2NoLT51c2VyLCAweDAwNGMvNCwgMCk7CisJbm91dmVhdV9ib193cjMyKGZpZm9jaC0+dXNlciwgMHgwMDUwLzQsIDApOworCW5vdXZlYXVfYm9fd3IzMihmaWZvY2gtPnVzZXIsIDB4MDA1OC80LCAwKTsKKwlub3V2ZWF1X2JvX3dyMzIoZmlmb2NoLT51c2VyLCAweDAwNWMvNCwgMCk7CisJbm91dmVhdV9ib193cjMyKGZpZm9jaC0+dXNlciwgMHgwMDYwLzQsIDApOworCW5vdXZlYXVfYm9fd3IzMihmaWZvY2gtPnVzZXIsIDB4MDA4OC80LCAwKTsKKwlub3V2ZWF1X2JvX3dyMzIoZmlmb2NoLT51c2VyLCAweDAwOGMvNCwgMCk7CisKKwkvKiByYW1mYyAqLworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19mYWtlKGRldiwgY2hhbi0+cmFtaW4tPnBpbnN0LAorCQkJCSAgICAgIGNoYW4tPnJhbWluLT52aW5zdCwgMHgxMDAsCisJCQkJICAgICAgTlZPQkpfRkxBR19aRVJPX0FMTE9DLCAmZmlmb2NoLT5yYW1mYyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCW52X3dvMzIoZmlmb2NoLT5yYW1mYywgMHgwOCwgbG93ZXJfMzJfYml0cyh1c2VyX3ZpbnN0KSk7CisJbnZfd28zMihmaWZvY2gtPnJhbWZjLCAweDBjLCB1cHBlcl8zMl9iaXRzKHVzZXJfdmluc3QpKTsKKwludl93bzMyKGZpZm9jaC0+cmFtZmMsIDB4MTAsIDB4MDAwMGZhY2UpOworCW52X3dvMzIoZmlmb2NoLT5yYW1mYywgMHgzMCwgMHhmZmZmZjkwMik7CisJbnZfd28zMihmaWZvY2gtPnJhbWZjLCAweDQ4LCBsb3dlcl8zMl9iaXRzKGliX3ZpcnQpKTsKKwludl93bzMyKGZpZm9jaC0+cmFtZmMsIDB4NGMsIGRybV9vcmRlcihjaGFuLT5kbWEuaWJfbWF4ICsgMSkgPDwgMTYgfAorCQkJCSAgIHVwcGVyXzMyX2JpdHMoaWJfdmlydCkpOworCW52X3dvMzIoZmlmb2NoLT5yYW1mYywgMHg1NCwgMHgwMDAwMDAwMik7CisJbnZfd28zMihmaWZvY2gtPnJhbWZjLCAweDg0LCAweDIwNDAwMDAwKTsKKwludl93bzMyKGZpZm9jaC0+cmFtZmMsIDB4OTQsIDB4MzAwMDAwMDEpOworCW52X3dvMzIoZmlmb2NoLT5yYW1mYywgMHg5YywgMHgwMDAwMDEwMCk7CisJbnZfd28zMihmaWZvY2gtPnJhbWZjLCAweGE0LCAweDFmMWYxZjFmKTsKKwludl93bzMyKGZpZm9jaC0+cmFtZmMsIDB4YTgsIDB4MWYxZjFmMWYpOworCW52X3dvMzIoZmlmb2NoLT5yYW1mYywgMHhhYywgMHgwMDAwMDAxZik7CisJbnZfd28zMihmaWZvY2gtPnJhbWZjLCAweGI4LCAweGY4MDAwMDAwKTsKKwludl93bzMyKGZpZm9jaC0+cmFtZmMsIDB4ZjgsIDB4MTAwMDMwODApOyAvKiAweDAwMjMxMCAqLworCW52X3dvMzIoZmlmb2NoLT5yYW1mYywgMHhmYywgMHgxMDAwMDAxMCk7IC8qIDB4MDAyMzUwICovCisJcGluc3RtZW0tPmZsdXNoKGRldik7CisKKwludl93cjMyKGRldiwgMHgwMDMwMDAgKyAoY2hhbi0+aWQgKiA4KSwgMHhjMDAwMDAwMCB8CisJCQkJCQkoY2hhbi0+cmFtaW4tPnZpbnN0ID4+IDEyKSk7CisJbnZfd3IzMihkZXYsIDB4MDAzMDA0ICsgKGNoYW4tPmlkICogOCksIDB4MDAxZjAwMDEpOworCW52YzBfZmlmb19wbGF5bGlzdF91cGRhdGUoZGV2KTsKIAlyZXR1cm4gMDsKKworZXJyb3I6CisJcGZpZm8tPmRlc3Ryb3lfY29udGV4dChjaGFuKTsKKwlyZXR1cm4gcmV0OwogfQogCiB2b2lkCiBudmMwX2ZpZm9fZGVzdHJveV9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgbnZjMF9maWZvX2NoYW4gKmZpZm9jaDsKKworCW52X21hc2soZGV2LCAweDAwMzAwNCArIChjaGFuLT5pZCAqIDgpLCAweDAwMDAwMDAxLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHgwMDI2MzQsIGNoYW4tPmlkKTsKKwlpZiAoIW52X3dhaXQoZGV2LCAweDAwMDI2MzQsIDB4ZmZmZmZmZmYsIGNoYW4tPmlkKSkKKwkJTlZfV0FSTihkZXYsICIweDI2MzQgIT0gY2hpZDogMHglMDh4XG4iLCBudl9yZDMyKGRldiwgMHgyNjM0KSk7CisKKwludmMwX2ZpZm9fcGxheWxpc3RfdXBkYXRlKGRldik7CisKKwludl93cjMyKGRldiwgMHgwMDMwMDAgKyAoY2hhbi0+aWQgKiA4KSwgMHgwMDAwMDAwMCk7CisKKwlpZiAoY2hhbi0+dXNlcikgeworCQlpb3VubWFwKGNoYW4tPnVzZXIpOworCQljaGFuLT51c2VyID0gTlVMTDsKKwl9CisKKwlmaWZvY2ggPSBjaGFuLT5maWZvX3ByaXY7CisJY2hhbi0+Zmlmb19wcml2ID0gTlVMTDsKKwlpZiAoIWZpZm9jaCkKKwkJcmV0dXJuOworCisJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZmaWZvY2gtPnJhbWZjKTsKKwlpZiAoZmlmb2NoLT51c2VyKSB7CisJCW5vdXZlYXVfYm9fdW5tYXAoZmlmb2NoLT51c2VyKTsKKwkJbm91dmVhdV9ib191bnBpbihmaWZvY2gtPnVzZXIpOworCQlub3V2ZWF1X2JvX3JlZihOVUxMLCAmZmlmb2NoLT51c2VyKTsKKwl9CisJa2ZyZWUoZmlmb2NoKTsKIH0KIAogaW50CkBAIC03NywxNCArMjQzLDIxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorbnZjMF9maWZvX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2ZpZm9fZW5naW5lICpwZmlmbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmZpZm87CisJc3RydWN0IG52YzBfZmlmb19wcml2ICpwcml2OworCisJcHJpdiA9IHBmaWZvLT5wcml2OworCWlmICghcHJpdikKKwkJcmV0dXJuOworCisJbm91dmVhdV92bV9wdXQoJnByaXYtPnVzZXJfdm1hKTsKKwlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJnByaXYtPnBsYXlsaXN0WzFdKTsKKwlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJnByaXYtPnBsYXlsaXN0WzBdKTsKKwlrZnJlZShwcml2KTsKK30KKwogdm9pZAogbnZjMF9maWZvX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CisJbnZfd3IzMihkZXYsIDB4MDAyMTQwLCAweDAwMDAwMDAwKTsKKwludmMwX2ZpZm9fZGVzdHJveShkZXYpOworfQorCitzdGF0aWMgaW50CitudmMwX2ZpZm9fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9maWZvX2VuZ2luZSAqcGZpZm8gPSAmZGV2X3ByaXYtPmVuZ2luZS5maWZvOworCXN0cnVjdCBudmMwX2ZpZm9fcHJpdiAqcHJpdjsKKwlpbnQgcmV0OworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKwlwZmlmby0+cHJpdiA9IHByaXY7CisKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBOVUxMLCAweDEwMDAsIDB4MTAwMCwgMCwKKwkJCQkgJnByaXYtPnBsYXlsaXN0WzBdKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3KGRldiwgTlVMTCwgMHgxMDAwLCAweDEwMDAsIDAsCisJCQkJICZwcml2LT5wbGF5bGlzdFsxXSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IG5vdXZlYXVfdm1fZ2V0KGRldl9wcml2LT5iYXIxX3ZtLCBwZmlmby0+Y2hhbm5lbHMgKiAweDEwMDAsCisJCQkgICAgIDEyLCBOVl9NRU1fQUNDRVNTX1JXLCAmcHJpdi0+dXNlcl92bWEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwlub3V2ZWF1X2lycV9yZWdpc3RlcihkZXYsIDgsIG52YzBfZmlmb19pc3IpOworCU5WT0JKX0NMQVNTKGRldiwgMHg1MDZlLCBTVyk7IC8qIG52c3cgKi8KKwlyZXR1cm4gMDsKKworZXJyb3I6CisJbnZjMF9maWZvX2Rlc3Ryb3koZGV2KTsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQKIG52YzBfZmlmb19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9maWZvX2VuZ2luZSAqcGZpZm8gPSAmZGV2X3ByaXYtPmVuZ2luZS5maWZvOworCXN0cnVjdCBudmMwX2ZpZm9fcHJpdiAqcHJpdjsKKwlpbnQgcmV0LCBpOworCisJaWYgKCFwZmlmby0+cHJpdikgeworCQlyZXQgPSBudmMwX2ZpZm9fY3JlYXRlKGRldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlwcml2ID0gcGZpZm8tPnByaXY7CisKKwkvKiByZXNldCBQRklGTywgZW5hYmxlIGFsbCBhdmFpbGFibGUgUFNVQkZJRk8gYXJlYXMgKi8KKwludl9tYXNrKGRldiwgMHgwMDAyMDAsIDB4MDAwMDAxMDAsIDB4MDAwMDAwMDApOworCW52X21hc2soZGV2LCAweDAwMDIwMCwgMHgwMDAwMDEwMCwgMHgwMDAwMDEwMCk7CisJbnZfd3IzMihkZXYsIDB4MDAwMjA0LCAweGZmZmZmZmZmKTsKKwludl93cjMyKGRldiwgMHgwMDIyMDQsIDB4ZmZmZmZmZmYpOworCisJcHJpdi0+c3Bvb25fbnIgPSBod2VpZ2h0MzIobnZfcmQzMihkZXYsIDB4MDAyMjA0KSk7CisJTlZfREVCVUcoZGV2LCAiUEZJRk86ICVkIHN1YmZpZm8ocylcbiIsIHByaXYtPnNwb29uX25yKTsKKworCS8qIGFzc2lnbiBlbmdpbmVzIHRvIHN1YmZpZm9zICovCisJaWYgKHByaXYtPnNwb29uX25yID49IDMpIHsKKwkJbnZfd3IzMihkZXYsIDB4MDAyMjA4LCB+KDEgPDwgMCkpOyAvKiBQR1JBUEggKi8KKwkJbnZfd3IzMihkZXYsIDB4MDAyMjBjLCB+KDEgPDwgMSkpOyAvKiBQVlAgKi8KKwkJbnZfd3IzMihkZXYsIDB4MDAyMjEwLCB+KDEgPDwgMSkpOyAvKiBQUFAgKi8KKwkJbnZfd3IzMihkZXYsIDB4MDAyMjE0LCB+KDEgPDwgMSkpOyAvKiBQQlNQICovCisJCW52X3dyMzIoZGV2LCAweDAwMjIxOCwgfigxIDw8IDIpKTsgLyogUENFMCAqLworCQludl93cjMyKGRldiwgMHgwMDIyMWMsIH4oMSA8PCAxKSk7IC8qIFBDRTEgKi8KKwl9CisKKwkvKiBQU1VCRklGT1tuXSAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJbnZfbWFzayhkZXYsIDB4MDQwMTNjICsgKGkgKiAweDIwMDApLCAweDEwMDAwMTAwLCAweDAwMDAwMDAwKTsKKwkJbnZfd3IzMihkZXYsIDB4MDQwMTA4ICsgKGkgKiAweDIwMDApLCAweGZmZmZmZmZmKTsgLyogSU5UUiAqLworCQludl93cjMyKGRldiwgMHgwNDAxMGMgKyAoaSAqIDB4MjAwMCksIDB4ZmZmZmZlZmYpOyAvKiBJTlRSX0VOICovCisJfQorCisJbnZfbWFzayhkZXYsIDB4MDAyMjAwLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxKTsKKwludl93cjMyKGRldiwgMHgwMDIyNTQsIDB4MTAwMDAwMDAgfCBwcml2LT51c2VyX3ZtYS5vZmZzZXQgPj4gMTIpOworCisJbnZfd3IzMihkZXYsIDB4MDAyYTAwLCAweGZmZmZmZmZmKTsgLyogY2xlYXJzIFBGSUZPLklOVFIgYml0IDMwICovCisJbnZfd3IzMihkZXYsIDB4MDAyMTAwLCAweGZmZmZmZmZmKTsKKwludl93cjMyKGRldiwgMHgwMDIxNDAsIDB4YmZmZmZmZmYpOwogCXJldHVybiAwOwogfQogCitzdHJ1Y3Qgbm91dmVhdV9lbnVtIG52YzBfZmlmb19mYXVsdF91bml0W10gPSB7CisJeyAwLCAiUEdSQVBIIiB9LAorCXsgMywgIlBFRVBIT0xFIiB9LAorCXsgNCwgIkJBUjEiIH0sCisJeyA1LCAiQkFSMyIgfSwKKwl7IDcsICJQRklGTyIgfSwKKwl7fQorfTsKKworc3RydWN0IG5vdXZlYXVfZW51bSBudmMwX2ZpZm9fZmF1bHRfcmVhc29uW10gPSB7CisJeyAwLCAiUFRfTk9UX1BSRVNFTlQiIH0sCisJeyAxLCAiUFRfVE9PX1NIT1JUIiB9LAorCXsgMiwgIlBBR0VfTk9UX1BSRVNFTlQiIH0sCisJeyAzLCAiVk1fTElNSVRfRVhDRUVERUQiIH0sCisJe30KK307CisKK3N0cnVjdCBub3V2ZWF1X2JpdGZpZWxkIG52YzBfZmlmb19zdWJmaWZvX2ludHJbXSA9IHsKKy8qCXsgMHgwMDAwODAwMCwgIiIgfQlzZWVuIHdpdGggbnVsbCBpYiBwdXNoICovCisJeyAweDAwMjAwMDAwLCAiSUxMRUdBTF9NVEhEIiB9LAorCXsgMHgwMDgwMDAwMCwgIkVNUFRZX1NVQkMiIH0sCisJe30KK307CisKK3N0YXRpYyB2b2lkCitudmMwX2ZpZm9faXNyX3ZtX2ZhdWx0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCB1bml0KQoreworCXUzMiBpbnN0ID0gbnZfcmQzMihkZXYsIDB4MjgwMCArICh1bml0ICogMHgxMCkpOworCXUzMiB2YWxvID0gbnZfcmQzMihkZXYsIDB4MjgwNCArICh1bml0ICogMHgxMCkpOworCXUzMiB2YWhpID0gbnZfcmQzMihkZXYsIDB4MjgwOCArICh1bml0ICogMHgxMCkpOworCXUzMiBzdGF0ID0gbnZfcmQzMihkZXYsIDB4MjgwYyArICh1bml0ICogMHgxMCkpOworCisJTlZfSU5GTyhkZXYsICJQRklGTzogJXMgZmF1bHQgYXQgMHglMDEwbGx4IFsiLAorCQkoc3RhdCAmIDB4MDAwMDAwODApID8gIndyaXRlIiA6ICJyZWFkIiwgKHU2NCl2YWhpIDw8IDMyIHwgdmFsbyk7CisJbm91dmVhdV9lbnVtX3ByaW50KG52YzBfZmlmb19mYXVsdF9yZWFzb24sIHN0YXQgJiAweDAwMDAwMDBmKTsKKwlwcmludGsoIl0gZnJvbSAiKTsKKwlub3V2ZWF1X2VudW1fcHJpbnQobnZjMF9maWZvX2ZhdWx0X3VuaXQsIHVuaXQpOworCXByaW50aygiIG9uIGNoYW5uZWwgMHglMDEwbGx4XG4iLCAodTY0KWluc3QgPDwgMTIpOworfQorCitzdGF0aWMgdm9pZAorbnZjMF9maWZvX2lzcl9zdWJmaWZvX2ludHIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHVuaXQpCit7CisJdTMyIHN0YXQgPSBudl9yZDMyKGRldiwgMHgwNDAxMDggKyAodW5pdCAqIDB4MjAwMCkpOworCXUzMiBhZGRyID0gbnZfcmQzMihkZXYsIDB4MDQwMGMwICsgKHVuaXQgKiAweDIwMDApKTsKKwl1MzIgZGF0YSA9IG52X3JkMzIoZGV2LCAweDA0MDBjNCArICh1bml0ICogMHgyMDAwKSk7CisJdTMyIGNoaWQgPSBudl9yZDMyKGRldiwgMHgwNDAxMjAgKyAodW5pdCAqIDB4MjAwMCkpICYgMHg3ZjsKKwl1MzIgc3ViYyA9IChhZGRyICYgMHgwMDA3MDAwMCk7CisJdTMyIG10aGQgPSAoYWRkciAmIDB4MDAwMDNmZmMpOworCisJTlZfSU5GTyhkZXYsICJQU1VCRklGTyAlZDoiLCB1bml0KTsKKwlub3V2ZWF1X2JpdGZpZWxkX3ByaW50KG52YzBfZmlmb19zdWJmaWZvX2ludHIsIHN0YXQpOworCU5WX0lORk8oZGV2LCAiUFNVQkZJRk8gJWQ6IGNoICVkIHN1YmMgJWQgbXRoZCAweCUwNHggZGF0YSAweCUwOHhcbiIsCisJCXVuaXQsIGNoaWQsIHN1YmMsIG10aGQsIGRhdGEpOworCisJbnZfd3IzMihkZXYsIDB4MDQwMGMwICsgKHVuaXQgKiAweDIwMDApLCAweDgwNjAwMDA4KTsKKwludl93cjMyKGRldiwgMHgwNDAxMDggKyAodW5pdCAqIDB4MjAwMCksIHN0YXQpOworfQorCitzdGF0aWMgdm9pZAorbnZjMF9maWZvX2lzcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXUzMiBzdGF0ID0gbnZfcmQzMihkZXYsIDB4MDAyMTAwKTsKKworCWlmIChzdGF0ICYgMHgxMDAwMDAwMCkgeworCQl1MzIgdW5pdHMgPSBudl9yZDMyKGRldiwgMHgwMDI1OWMpOworCQl1MzIgdSA9IHVuaXRzOworCisJCXdoaWxlICh1KSB7CisJCQlpbnQgaSA9IGZmcyh1KSAtIDE7CisJCQludmMwX2ZpZm9faXNyX3ZtX2ZhdWx0KGRldiwgaSk7CisJCQl1ICY9IH4oMSA8PCBpKTsKKwkJfQorCisJCW52X3dyMzIoZGV2LCAweDAwMjU5YywgdW5pdHMpOworCQlzdGF0ICY9IH4weDEwMDAwMDAwOworCX0KKworCWlmIChzdGF0ICYgMHgyMDAwMDAwMCkgeworCQl1MzIgdW5pdHMgPSBudl9yZDMyKGRldiwgMHgwMDI1YTApOworCQl1MzIgdSA9IHVuaXRzOworCisJCXdoaWxlICh1KSB7CisJCQlpbnQgaSA9IGZmcyh1KSAtIDE7CisJCQludmMwX2ZpZm9faXNyX3N1YmZpZm9faW50cihkZXYsIGkpOworCQkJdSAmPSB+KDEgPDwgaSk7CisJCX0KKworCQludl93cjMyKGRldiwgMHgwMDI1YTAsIHVuaXRzKTsKKwkJc3RhdCAmPSB+MHgyMDAwMDAwMDsKKwl9CisKKwlpZiAoc3RhdCkgeworCQlOVl9JTkZPKGRldiwgIlBGSUZPOiB1bmhhbmRsZWQgc3RhdHVzIDB4JTA4eFxuIiwgc3RhdCk7CisJCW52X3dyMzIoZGV2LCAweDAwMjEwMCwgc3RhdCk7CisJfQorCisJbnZfd3IzMihkZXYsIDB4MjE0MCwgMCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyYXBoLmMKaW5kZXggNzE3YTUxNy4uNWZlYWNkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JhcGguYwpAQCAtMjIsOSArMjIsMTYgQEAKICAqIEF1dGhvcnM6IEJlbiBTa2VnZ3MKICAqLwogCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKwogI2luY2x1ZGUgImRybVAuaCIKIAogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCisjaW5jbHVkZSAibm91dmVhdV9tbS5oIgorI2luY2x1ZGUgIm52YzBfZ3JhcGguaCIKKworc3RhdGljIHZvaWQgbnZjMF9ncmFwaF9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKik7CitzdGF0aWMgaW50ICBudmMwX2dyYXBoX3VubG9hZF9jb250ZXh0X3RvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU2NCBjaGFuKTsKIAogdm9pZAogbnZjMF9ncmFwaF9maWZvX2FjY2VzcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIGVuYWJsZWQpCkBAIC0zNywzOSArNDQsNzM1IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQKK252YzBfZ3JhcGhfY29uc3RydWN0X2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjaGFuLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBudmMwX2dyYXBoX3ByaXYgKnByaXYgPSBkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLnByaXY7CisJc3RydWN0IG52YzBfZ3JhcGhfY2hhbiAqZ3JjaCA9IGNoYW4tPnBncmFwaF9jdHg7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKKwlpbnQgcmV0LCBpOworCXUzMiAqY3R4OworCisJY3R4ID0ga21hbGxvYyhwcml2LT5ncmN0eF9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwludmMwX2dyYXBoX2xvYWRfY29udGV4dChjaGFuKTsKKworCW52X3dvMzIoZ3JjaC0+Z3JjdHgsIDB4MWMsIDEpOworCW52X3dvMzIoZ3JjaC0+Z3JjdHgsIDB4MjAsIDApOworCW52X3dvMzIoZ3JjaC0+Z3JjdHgsIDB4MjgsIDApOworCW52X3dvMzIoZ3JjaC0+Z3JjdHgsIDB4MmMsIDApOworCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOworCisJcmV0ID0gbnZjMF9ncmN0eF9nZW5lcmF0ZShjaGFuKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKGN0eCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbnZjMF9ncmFwaF91bmxvYWRfY29udGV4dF90byhkZXYsIGNoYW4tPnJhbWluLT52aW5zdCk7CisJaWYgKHJldCkgeworCQlrZnJlZShjdHgpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5ncmN0eF9zaXplOyBpICs9IDQpCisJCWN0eFtpIC8gNF0gPSBudl9ybzMyKGdyY2gtPmdyY3R4LCBpKTsKKworCXByaXYtPmdyY3R4X3ZhbHMgPSBjdHg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK252YzBfZ3JhcGhfY3JlYXRlX2NvbnRleHRfbW1pb19saXN0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY2hhbi0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbnZjMF9ncmFwaF9wcml2ICpwcml2ID0gZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5wcml2OworCXN0cnVjdCBudmMwX2dyYXBoX2NoYW4gKmdyY2ggPSBjaGFuLT5wZ3JhcGhfY3R4OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CisJaW50IGkgPSAwLCBncGMsIHRwLCByZXQ7CisJdTMyIG1hZ2ljOworCisJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3KGRldiwgTlVMTCwgMHgyMDAwLCAyNTYsIE5WT0JKX0ZMQUdfVk0sCisJCQkJICZncmNoLT51bms0MDgwMDQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBOVUxMLCAweDgwMDAsIDI1NiwgTlZPQkpfRkxBR19WTSwKKwkJCQkgJmdyY2gtPnVuazQwODAwYyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ldyhkZXYsIE5VTEwsIDM4NCAqIDEwMjQsIDQwOTYsIE5WT0JKX0ZMQUdfVk0sCisJCQkJICZncmNoLT51bms0MTg4MTApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBOVUxMLCAweDEwMDAsIDAsIE5WT0JKX0ZMQUdfVk0sCisJCQkJICZncmNoLT5tbWlvKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisKKwludl93bzMyKGdyY2gtPm1taW8sIGkrKyAqIDQsIDB4MDA0MDgwMDQpOworCW52X3dvMzIoZ3JjaC0+bW1pbywgaSsrICogNCwgZ3JjaC0+dW5rNDA4MDA0LT52aW5zdCA+PiA4KTsKKwludl93bzMyKGdyY2gtPm1taW8sIGkrKyAqIDQsIDB4MDA0MDgwMDgpOworCW52X3dvMzIoZ3JjaC0+bW1pbywgaSsrICogNCwgMHg4MDAwMDAxOCk7CisKKwludl93bzMyKGdyY2gtPm1taW8sIGkrKyAqIDQsIDB4MDA0MDgwMGMpOworCW52X3dvMzIoZ3JjaC0+bW1pbywgaSsrICogNCwgZ3JjaC0+dW5rNDA4MDBjLT52aW5zdCA+PiA4KTsKKwludl93bzMyKGdyY2gtPm1taW8sIGkrKyAqIDQsIDB4MDA0MDgwMTApOworCW52X3dvMzIoZ3JjaC0+bW1pbywgaSsrICogNCwgMHg4MDAwMDAwMCk7CisKKwludl93bzMyKGdyY2gtPm1taW8sIGkrKyAqIDQsIDB4MDA0MTg4MTApOworCW52X3dvMzIoZ3JjaC0+bW1pbywgaSsrICogNCwgMHg4MDAwMDAwMCB8IGdyY2gtPnVuazQxODgxMC0+dmluc3QgPj4gMTIpOworCW52X3dvMzIoZ3JjaC0+bW1pbywgaSsrICogNCwgMHgwMDQxOTg0OCk7CisJbnZfd28zMihncmNoLT5tbWlvLCBpKysgKiA0LCAweDEwMDAwMDAwIHwgZ3JjaC0+dW5rNDE4ODEwLT52aW5zdCA+PiAxMik7CisKKwludl93bzMyKGdyY2gtPm1taW8sIGkrKyAqIDQsIDB4MDA0MTkwMDQpOworCW52X3dvMzIoZ3JjaC0+bW1pbywgaSsrICogNCwgZ3JjaC0+dW5rNDA4MDBjLT52aW5zdCA+PiA4KTsKKwludl93bzMyKGdyY2gtPm1taW8sIGkrKyAqIDQsIDB4MDA0MTkwMDgpOworCW52X3dvMzIoZ3JjaC0+bW1pbywgaSsrICogNCwgMHgwMDAwMDAwMCk7CisKKwludl93bzMyKGdyY2gtPm1taW8sIGkrKyAqIDQsIDB4MDA0MTg4MDgpOworCW52X3dvMzIoZ3JjaC0+bW1pbywgaSsrICogNCwgZ3JjaC0+dW5rNDA4MDA0LT52aW5zdCA+PiA4KTsKKwludl93bzMyKGdyY2gtPm1taW8sIGkrKyAqIDQsIDB4MDA0MTg4MGMpOworCW52X3dvMzIoZ3JjaC0+bW1pbywgaSsrICogNCwgMHg4MDAwMDAxOCk7CisKKwltYWdpYyA9IDB4MDIxODAwMDA7CisJbnZfd28zMihncmNoLT5tbWlvLCBpKysgKiA0LCAweDAwNDA1ODMwKTsKKwludl93bzMyKGdyY2gtPm1taW8sIGkrKyAqIDQsIG1hZ2ljKTsKKwlmb3IgKGdwYyA9IDA7IGdwYyA8IHByaXYtPmdwY19ucjsgZ3BjKyspIHsKKwkJZm9yICh0cCA9IDA7IHRwIDwgcHJpdi0+dHBfbnJbZ3BjXTsgdHArKywgbWFnaWMgKz0gMHgwMmZjKSB7CisJCQl1MzIgcmVnID0gMHg1MDQ1MjAgKyAoZ3BjICogMHg4MDAwKSArICh0cCAqIDB4MDgwMCk7CisJCQludl93bzMyKGdyY2gtPm1taW8sIGkrKyAqIDQsIHJlZyk7CisJCQludl93bzMyKGdyY2gtPm1taW8sIGkrKyAqIDQsIG1hZ2ljKTsKKwkJfQorCX0KKworCWdyY2gtPm1taW9fbnIgPSBpIC8gMjsKKwlyZXR1cm4gMDsKK30KKwogaW50CiBudmMwX2dyYXBoX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCiB7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY2hhbi0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9pbnN0bWVtX2VuZ2luZSAqcGluc3RtZW0gPSAmZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCXN0cnVjdCBudmMwX2dyYXBoX3ByaXYgKnByaXYgPSBwZ3JhcGgtPnByaXY7CisJc3RydWN0IG52YzBfZ3JhcGhfY2hhbiAqZ3JjaDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3JjdHg7CisJaW50IHJldCwgaTsKKworCWNoYW4tPnBncmFwaF9jdHggPSBremFsbG9jKHNpemVvZigqZ3JjaCksIEdGUF9LRVJORUwpOworCWlmICghY2hhbi0+cGdyYXBoX2N0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZ3JjaCA9IGNoYW4tPnBncmFwaF9jdHg7CisKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBOVUxMLCBwcml2LT5ncmN0eF9zaXplLCAyNTYsCisJCQkJIE5WT0JKX0ZMQUdfVk0gfCBOVk9CSl9GTEFHX1pFUk9fQUxMT0MsCisJCQkJICZncmNoLT5ncmN0eCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwljaGFuLT5yYW1pbl9ncmN0eCA9IGdyY2gtPmdyY3R4OworCWdyY3R4ID0gZ3JjaC0+Z3JjdHg7CisKKwlyZXQgPSBudmMwX2dyYXBoX2NyZWF0ZV9jb250ZXh0X21taW9fbGlzdChjaGFuKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJbnZfd28zMihjaGFuLT5yYW1pbiwgMHgwMjEwLCBsb3dlcl8zMl9iaXRzKGdyY3R4LT52aW5zdCkgfCA0KTsKKwludl93bzMyKGNoYW4tPnJhbWluLCAweDAyMTQsIHVwcGVyXzMyX2JpdHMoZ3JjdHgtPnZpbnN0KSk7CisJcGluc3RtZW0tPmZsdXNoKGRldik7CisKKwlpZiAoIXByaXYtPmdyY3R4X3ZhbHMpIHsKKwkJcmV0ID0gbnZjMF9ncmFwaF9jb25zdHJ1Y3RfY29udGV4dChjaGFuKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHByaXYtPmdyY3R4X3NpemU7IGkgKz0gNCkKKwkJbnZfd28zMihncmN0eCwgaSwgcHJpdi0+Z3JjdHhfdmFsc1tpIC8gNF0pOworCisgICAgICAgIG52X3dvMzIoZ3JjdHgsIDB4ZjQsIDApOworICAgICAgICBudl93bzMyKGdyY3R4LCAweGY4LCAwKTsKKyAgICAgICAgbnZfd28zMihncmN0eCwgMHgxMCwgZ3JjaC0+bW1pb19ucik7CisgICAgICAgIG52X3dvMzIoZ3JjdHgsIDB4MTQsIGxvd2VyXzMyX2JpdHMoZ3JjaC0+bW1pby0+dmluc3QpKTsKKyAgICAgICAgbnZfd28zMihncmN0eCwgMHgxOCwgdXBwZXJfMzJfYml0cyhncmNoLT5tbWlvLT52aW5zdCkpOworICAgICAgICBudl93bzMyKGdyY3R4LCAweDFjLCAxKTsKKyAgICAgICAgbnZfd28zMihncmN0eCwgMHgyMCwgMCk7CisgICAgICAgIG52X3dvMzIoZ3JjdHgsIDB4MjgsIDApOworICAgICAgICBudl93bzMyKGdyY3R4LCAweDJjLCAwKTsKKwlwaW5zdG1lbS0+Zmx1c2goZGV2KTsKIAlyZXR1cm4gMDsKKworZXJyb3I6CisJcGdyYXBoLT5kZXN0cm95X2NvbnRleHQoY2hhbik7CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZAogbnZjMF9ncmFwaF9kZXN0cm95X2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKIHsKKwlzdHJ1Y3QgbnZjMF9ncmFwaF9jaGFuICpncmNoOworCisJZ3JjaCA9IGNoYW4tPnBncmFwaF9jdHg7CisJY2hhbi0+cGdyYXBoX2N0eCA9IE5VTEw7CisJaWYgKCFncmNoKQorCQlyZXR1cm47CisKKwlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmdyY2gtPm1taW8pOworCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmZ3JjaC0+dW5rNDE4ODEwKTsKKwlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmdyY2gtPnVuazQwODAwYyk7CisJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZncmNoLT51bms0MDgwMDQpOworCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmZ3JjaC0+Z3JjdHgpOworCWNoYW4tPnJhbWluX2dyY3R4ID0gTlVMTDsKIH0KIAogaW50CiBudmMwX2dyYXBoX2xvYWRfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CisKKwludl93cjMyKGRldiwgMHg0MDk4NDAsIDB4MDAwMDAwMzApOworCW52X3dyMzIoZGV2LCAweDQwOTUwMCwgMHg4MDAwMDAwMCB8IGNoYW4tPnJhbWluLT52aW5zdCA+PiAxMik7CisJbnZfd3IzMihkZXYsIDB4NDA5NTA0LCAweDAwMDAwMDAzKTsKKwlpZiAoIW52X3dhaXQoZGV2LCAweDQwOTgwMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCkpCisJCU5WX0VSUk9SKGRldiwgIlBHUkFQSDogbG9hZF9jdHggdGltZW91dFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbnZjMF9ncmFwaF91bmxvYWRfY29udGV4dF90byhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1NjQgY2hhbikKK3sKKwludl93cjMyKGRldiwgMHg0MDk4NDAsIDB4MDAwMDAwMDMpOworCW52X3dyMzIoZGV2LCAweDQwOTUwMCwgMHg4MDAwMDAwMCB8IGNoYW4gPj4gMTIpOworCW52X3dyMzIoZGV2LCAweDQwOTUwNCwgMHgwMDAwMDAwOSk7CisJaWYgKCFudl93YWl0KGRldiwgMHg0MDk4MDAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKSB7CisJCU5WX0VSUk9SKGRldiwgIlBHUkFQSDogdW5sb2FkX2N0eCB0aW1lb3V0XG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAogaW50CiBudmMwX2dyYXBoX3VubG9hZF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIDA7CisJdTY0IGluc3QgPSAodTY0KShudl9yZDMyKGRldiwgMHg0MDliMDApICYgMHgwZmZmZmZmZikgPDwgMTI7CisJcmV0dXJuIG52YzBfZ3JhcGhfdW5sb2FkX2NvbnRleHRfdG8oZGV2LCBpbnN0KTsKK30KKworc3RhdGljIHZvaWQKK252YzBfZ3JhcGhfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CisJc3RydWN0IG52YzBfZ3JhcGhfcHJpdiAqcHJpdjsKKworCXByaXYgPSBwZ3JhcGgtPnByaXY7CisJaWYgKCFwcml2KQorCQlyZXR1cm47CisKKwlub3V2ZWF1X2lycV91bnJlZ2lzdGVyKGRldiwgMTIpOworCisJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZwcml2LT51bms0MTg4YjgpOworCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmcHJpdi0+dW5rNDE4OGI0KTsKKworCWlmIChwcml2LT5ncmN0eF92YWxzKQorCQlrZnJlZShwcml2LT5ncmN0eF92YWxzKTsKKwlrZnJlZShwcml2KTsKIH0KIAogdm9pZAogbnZjMF9ncmFwaF90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCW52YzBfZ3JhcGhfZGVzdHJveShkZXYpOworfQorCitzdGF0aWMgaW50CitudmMwX2dyYXBoX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CisJc3RydWN0IG52YzBfZ3JhcGhfcHJpdiAqcHJpdjsKKwlpbnQgcmV0LCBncGMsIGk7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCXBncmFwaC0+cHJpdiA9IHByaXY7CisKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBOVUxMLCAweDEwMDAsIDI1NiwgMCwgJnByaXYtPnVuazQxODhiNCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ldyhkZXYsIE5VTEwsIDB4MTAwMCwgMjU2LCAwLCAmcHJpdi0+dW5rNDE4OGI4KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJZm9yIChpID0gMDsgaSA8IDB4MTAwMDsgaSArPSA0KSB7CisJCW52X3dvMzIocHJpdi0+dW5rNDE4OGI0LCBpLCAweDAwMDAwMDEwKTsKKwkJbnZfd28zMihwcml2LT51bms0MTg4YjgsIGksIDB4MDAwMDAwMTApOworCX0KKworCXByaXYtPmdwY19uciAgPSAgbnZfcmQzMihkZXYsIDB4NDA5NjA0KSAmIDB4MDAwMDAwMWY7CisJcHJpdi0+cm9wX25yID0gKG52X3JkMzIoZGV2LCAweDQwOTYwNCkgJiAweDAwMWYwMDAwKSA+PiAxNjsKKwlmb3IgKGdwYyA9IDA7IGdwYyA8IHByaXYtPmdwY19ucjsgZ3BjKyspIHsKKwkJcHJpdi0+dHBfbnJbZ3BjXSA9IG52X3JkMzIoZGV2LCBHUENfVU5JVChncGMsIDB4MjYwOCkpOworCQlwcml2LT50cF90b3RhbCArPSBwcml2LT50cF9ucltncGNdOworCX0KKworCS8qWFhYOiB0aGVzZSBuZWVkIGZpZ3VyaW5nIG91dC4uLiAqLworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4YzA6CisJCWlmIChwcml2LT50cF90b3RhbCA9PSAxMSkgeyAvKiA0NjUsIDMvNC80LzAsIDQgKi8KKwkJCXByaXYtPm1hZ2ljX25vdF9yb3BfbnIgPSAweDA3OworCQkJLyogZmlsbGVkIHZhbHVlcyB1cCB0byB0cF90b3RhbCwgdGhlIHJlc3QgMCAqLworCQkJcHJpdi0+bWFnaWNncGM5ODBbMF0gICA9IDB4MjIxMTEwMDA7CisJCQlwcml2LT5tYWdpY2dwYzk4MFsxXSAgID0gMHgwMDAwMDIzMzsKKwkJCXByaXYtPm1hZ2ljZ3BjOTgwWzJdICAgPSAweDAwMDAwMDAwOworCQkJcHJpdi0+bWFnaWNncGM5ODBbM10gICA9IDB4MDAwMDAwMDA7CisJCQlwcml2LT5tYWdpY2dwYzkxOCAgICAgID0gMHgwMDBiYTJlOTsKKwkJfSBlbHNlCisJCWlmIChwcml2LT50cF90b3RhbCA9PSAxNCkgeyAvKiA0NzAsIDMvMy80LzQsIDUgKi8KKwkJCXByaXYtPm1hZ2ljX25vdF9yb3BfbnIgPSAweDA1OworCQkJcHJpdi0+bWFnaWNncGM5ODBbMF0gICA9IDB4MTExMTAwMDA7CisJCQlwcml2LT5tYWdpY2dwYzk4MFsxXSAgID0gMHgwMDIzMzIyMjsKKwkJCXByaXYtPm1hZ2ljZ3BjOTgwWzJdICAgPSAweDAwMDAwMDAwOworCQkJcHJpdi0+bWFnaWNncGM5ODBbM10gICA9IDB4MDAwMDAwMDA7CisJCQlwcml2LT5tYWdpY2dwYzkxOCAgICAgID0gMHgwMDA5MjQ5MzsKKwkJfSBlbHNlCisJCWlmIChwcml2LT50cF90b3RhbCA9PSAxNSkgeyAvKiA0ODAsIDMvNC80LzQsIDYgKi8KKwkJCXByaXYtPm1hZ2ljX25vdF9yb3BfbnIgPSAweDA2OworCQkJcHJpdi0+bWFnaWNncGM5ODBbMF0gICA9IDB4MTExMTAwMDA7CisJCQlwcml2LT5tYWdpY2dwYzk4MFsxXSAgID0gMHgwMzMzMjIyMjsKKwkJCXByaXYtPm1hZ2ljZ3BjOTgwWzJdICAgPSAweDAwMDAwMDAwOworCQkJcHJpdi0+bWFnaWNncGM5ODBbM10gICA9IDB4MDAwMDAwMDA7CisJCQlwcml2LT5tYWdpY2dwYzkxOCAgICAgID0gMHgwMDA4ODg4OTsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4YzM6IC8qIDQ1MCwgNC8wLzAvMCwgMiAqLworCQlwcml2LT5tYWdpY19ub3Rfcm9wX25yID0gMHgwMzsKKwkJcHJpdi0+bWFnaWNncGM5ODBbMF0gICA9IDB4MDAwMDMyMTA7CisJCXByaXYtPm1hZ2ljZ3BjOTgwWzFdICAgPSAweDAwMDAwMDAwOworCQlwcml2LT5tYWdpY2dwYzk4MFsyXSAgID0gMHgwMDAwMDAwMDsKKwkJcHJpdi0+bWFnaWNncGM5ODBbM10gICA9IDB4MDAwMDAwMDA7CisJCXByaXYtPm1hZ2ljZ3BjOTE4ICAgICAgPSAweDAwMjAwMDAwOworCQlicmVhazsKKwljYXNlIDB4YzQ6IC8qIDQ2MCwgMy80LzAvMCwgNCAqLworCQlwcml2LT5tYWdpY19ub3Rfcm9wX25yID0gMHgwMTsKKwkJcHJpdi0+bWFnaWNncGM5ODBbMF0gICA9IDB4MDIzMjExMDA7CisJCXByaXYtPm1hZ2ljZ3BjOTgwWzFdICAgPSAweDAwMDAwMDAwOworCQlwcml2LT5tYWdpY2dwYzk4MFsyXSAgID0gMHgwMDAwMDAwMDsKKwkJcHJpdi0+bWFnaWNncGM5ODBbM10gICA9IDB4MDAwMDAwMDA7CisJCXByaXYtPm1hZ2ljZ3BjOTE4ICAgICAgPSAweDAwMTI0OTI1OworCQlicmVhazsKKwl9CisKKwlpZiAoIXByaXYtPm1hZ2ljX25vdF9yb3BfbnIpIHsKKwkJTlZfRVJST1IoZGV2LCAiUEdSQVBIOiB1bmtub3duIGNvbmZpZzogJWQvJWQvJWQvJWQsICVkXG4iLAorCQkJIHByaXYtPnRwX25yWzBdLCBwcml2LT50cF9uclsxXSwgcHJpdi0+dHBfbnJbMl0sCisJCQkgcHJpdi0+dHBfbnJbM10sIHByaXYtPnJvcF9ucik7CisJCS8qIHVzZSAweGMzJ3MgdmFsdWVzLi4uICovCisJCXByaXYtPm1hZ2ljX25vdF9yb3BfbnIgPSAweDAzOworCQlwcml2LT5tYWdpY2dwYzk4MFswXSAgID0gMHgwMDAwMzIxMDsKKwkJcHJpdi0+bWFnaWNncGM5ODBbMV0gICA9IDB4MDAwMDAwMDA7CisJCXByaXYtPm1hZ2ljZ3BjOTgwWzJdICAgPSAweDAwMDAwMDAwOworCQlwcml2LT5tYWdpY2dwYzk4MFszXSAgID0gMHgwMDAwMDAwMDsKKwkJcHJpdi0+bWFnaWNncGM5MTggICAgICA9IDB4MDAyMDAwMDA7CisJfQorCisJbm91dmVhdV9pcnFfcmVnaXN0ZXIoZGV2LCAxMiwgbnZjMF9ncmFwaF9pc3IpOworCU5WT0JKX0NMQVNTKGRldiwgMHg5MDJkLCBHUik7IC8qIDJEICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDkwMzksIEdSKTsgLyogTTJNRiAqLworCU5WT0JKX0NMQVNTKGRldiwgMHg5MDk3LCBHUik7IC8qIDNEICovCisJTlZPQkpfQ0xBU1MoZGV2LCAweDkwYzAsIEdSKTsgLyogQ09NUFVURSAqLworCXJldHVybiAwOworCitlcnJvcjoKKwludmMwX2dyYXBoX2Rlc3Ryb3koZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorbnZjMF9ncmFwaF9pbml0X29iajQxODg4MChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CisJc3RydWN0IG52YzBfZ3JhcGhfcHJpdiAqcHJpdiA9IHBncmFwaC0+cHJpdjsKKwlpbnQgaTsKKworCW52X3dyMzIoZGV2LCBHUENfQkNBU1QoMHgwODgwKSwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIEdQQ19CQ0FTVCgweDA4YTQpLCAweDAwMDAwMDAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQludl93cjMyKGRldiwgR1BDX0JDQVNUKDB4MDg4OCkgKyAoaSAqIDQpLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgR1BDX0JDQVNUKDB4MDhiNCksIHByaXYtPnVuazQxODhiNC0+dmluc3QgPj4gOCk7CisJbnZfd3IzMihkZXYsIEdQQ19CQ0FTVCgweDA4YjgpLCBwcml2LT51bms0MTg4YjgtPnZpbnN0ID4+IDgpOworfQorCitzdGF0aWMgdm9pZAorbnZjMF9ncmFwaF9pbml0X3JlZ3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwludl93cjMyKGRldiwgMHg0MDAwODAsIDB4MDAzMDgzYzIpOworCW52X3dyMzIoZGV2LCAweDQwMDA4OCwgMHgwMDAwNmZlNyk7CisJbnZfd3IzMihkZXYsIDB4NDAwMDhjLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDAwOTAsIDB4MDAwMDAwMzApOworCW52X3dyMzIoZGV2LCAweDQwMDEzYywgMHgwMTM5MDFmNyk7CisJbnZfd3IzMihkZXYsIDB4NDAwMTQwLCAweDAwMDAwMTAwKTsKKwludl93cjMyKGRldiwgMHg0MDAxNDQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwMDE0OCwgMHgwMDAwMDExMCk7CisJbnZfd3IzMihkZXYsIDB4NDAwMTM4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDAxMzAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwMDEzNCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDAwMTI0LCAweDAwMDAwMDAyKTsKK30KKworc3RhdGljIHZvaWQKK252YzBfZ3JhcGhfaW5pdF9ncGNfMChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG52YzBfZ3JhcGhfcHJpdiAqcHJpdiA9IGRldl9wcml2LT5lbmdpbmUuZ3JhcGgucHJpdjsKKwlpbnQgZ3BjOworCQorCS8vICAgICAgVFAgICAgICBST1AgVU5LVkFMKG1hZ2ljX25vdF9yb3BfbnIpCisJLy8gNDUwOiA0LzAvMC8wIDIgICAgICAgIDMKKwkvLyA0NjA6IDMvNC8wLzAgNCAgICAgICAgMQorCS8vIDQ2NTogMy80LzQvMCA0ICAgICAgICA3CisJLy8gNDcwOiAzLzMvNC80IDUgICAgICAgIDUKKwkvLyA0ODA6IDMvNC80LzQgNiAgICAgICAgNgorCisJLy8gbWFnaWNncGM5MTgKKwkvLyA0NTA6IDAwMjAwMDAwIDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisJLy8gNDYwOiAwMDEyNDkyNSAwMDAwMDAwMDAwMDEwMDEwMDEwMDEwMDEwMDEwMDEwMQorCS8vIDQ2NTogMDAwYmEyZTkgMDAwMDAwMDAwMDAwMTAxMTEwMTAwMDEwMTExMDEwMDEKKwkvLyA0NzA6IDAwMDkyNDkzIDAwMDAwMDAwMDAwMDEwMDEwMDEwMDEwMDEwMDEwMDExCisJLy8gNDgwOiAwMDA4ODg4OSAwMDAwMDAwMDAwMDAxMDAwMTAwMDEwMDAxMDAwMTAwMQorCisJLyogZmlsbGVkIHZhbHVlcyB1cCB0byB0cF90b3RhbCwgcmVtYWluZGVyIDAgKi8KKwkvLyA0NTA6IDAwMDAzMjEwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwCisJLy8gNDYwOiAwMjMyMTEwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMAorCS8vIDQ2NTogMjIxMTEwMDAgMDAwMDAyMzMgMDAwMDAwMDAgMDAwMDAwMDAKKwkvLyA0NzA6IDExMTEwMDAwIDAwMjMzMjIyIDAwMDAwMDAwIDAwMDAwMDAwCisJLy8gNDgwOiAxMTExMDAwMCAwMzMzMjIyMiAwMDAwMDAwMCAwMDAwMDAwMAorCQorCW52X3dyMzIoZGV2LCBHUENfQkNBU1QoMHgwOTgwKSwgcHJpdi0+bWFnaWNncGM5ODBbMF0pOworCW52X3dyMzIoZGV2LCBHUENfQkNBU1QoMHgwOTg0KSwgcHJpdi0+bWFnaWNncGM5ODBbMV0pOworCW52X3dyMzIoZGV2LCBHUENfQkNBU1QoMHgwOTg4KSwgcHJpdi0+bWFnaWNncGM5ODBbMl0pOworCW52X3dyMzIoZGV2LCBHUENfQkNBU1QoMHgwOThjKSwgcHJpdi0+bWFnaWNncGM5ODBbM10pOworCisJZm9yIChncGMgPSAwOyBncGMgPCBwcml2LT5ncGNfbnI7IGdwYysrKSB7CisJCW52X3dyMzIoZGV2LCBHUENfVU5JVChncGMsIDB4MDkxNCksIHByaXYtPm1hZ2ljX25vdF9yb3BfbnIgPDwgOCB8CisJCQkJCQkgIHByaXYtPnRwX25yW2dwY10pOworCQludl93cjMyKGRldiwgR1BDX1VOSVQoZ3BjLCAweDA5MTApLCAweDAwMDQwMDAwIHwgcHJpdi0+dHBfdG90YWwpOworCQludl93cjMyKGRldiwgR1BDX1VOSVQoZ3BjLCAweDA5MTgpLCBwcml2LT5tYWdpY2dwYzkxOCk7CisJfQorCisJbnZfd3IzMihkZXYsIEdQQ19CQ0FTVCgweDFiZDQpLCBwcml2LT5tYWdpY2dwYzkxOCk7CisJbnZfd3IzMihkZXYsIEdQQ19CQ0FTVCgweDA4YWMpLCBwcml2LT5yb3BfbnIpOworfQorCitzdGF0aWMgdm9pZAorbnZjMF9ncmFwaF9pbml0X3VuaXRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJbnZfd3IzMihkZXYsIDB4NDA5YzI0LCAweDAwMGYwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQwMDAsIDB4YzAwMDAwMDApOyAvKiBESVNQQVRDSCAqLworCW52X3dyMzIoZGV2LCAweDQwNDYwMCwgMHhjMDAwMDAwMCk7IC8qIE0yTUYgKi8KKwludl93cjMyKGRldiwgMHg0MDgwMzAsIDB4YzAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNjAxYywgMHhjMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NDkwLCAweGMwMDAwMDAwKTsgLyogTUFDUk8gKi8KKwludl93cjMyKGRldiwgMHg0MDYwMTgsIDB4YzAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNTg0MCwgMHhjMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA1ODQ0LCAweDAwZmZmZmZmKTsKKwludl9tYXNrKGRldiwgMHg0MTljYzAsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgpOworCW52X21hc2soZGV2LCAweDQxOWViNCwgMHgwMDAwMTAwMCwgMHgwMDAwMTAwMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudmMwX2dyYXBoX2luaXRfZ3BjXzEoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBudmMwX2dyYXBoX3ByaXYgKnByaXYgPSBkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLnByaXY7CisJaW50IGdwYywgdHA7CisKKwlmb3IgKGdwYyA9IDA7IGdwYyA8IHByaXYtPmdwY19ucjsgZ3BjKyspIHsKKwkJbnZfd3IzMihkZXYsIEdQQ19VTklUKGdwYywgMHgwNDIwKSwgMHhjMDAwMDAwMCk7CisJCW52X3dyMzIoZGV2LCBHUENfVU5JVChncGMsIDB4MDkwMCksIDB4YzAwMDAwMDApOworCQludl93cjMyKGRldiwgR1BDX1VOSVQoZ3BjLCAweDEwMjgpLCAweGMwMDAwMDAwKTsKKwkJbnZfd3IzMihkZXYsIEdQQ19VTklUKGdwYywgMHgwODI0KSwgMHhjMDAwMDAwMCk7CisJCWZvciAodHAgPSAwOyB0cCA8IHByaXYtPnRwX25yW2dwY107IHRwKyspIHsKKwkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4NTA4KSwgMHhmZmZmZmZmZik7CisJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDUwYyksIDB4ZmZmZmZmZmYpOworCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHgyMjQpLCAweGMwMDAwMDAwKTsKKwkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4NDhjKSwgMHhjMDAwMDAwMCk7CisJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDA4NCksIDB4YzAwMDAwMDApOworCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHhlNDQpLCAweDAwMWZmZmZlKTsKKwkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4ZTRjKSwgMHgwMDAwMDAwZik7CisJCX0KKwkJbnZfd3IzMihkZXYsIEdQQ19VTklUKGdwYywgMHgyYzkwKSwgMHhmZmZmZmZmZik7CisJCW52X3dyMzIoZGV2LCBHUENfVU5JVChncGMsIDB4MmM5NCksIDB4ZmZmZmZmZmYpOworCX0KK30KKworc3RhdGljIHZvaWQKK252YzBfZ3JhcGhfaW5pdF9yb3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBudmMwX2dyYXBoX3ByaXYgKnByaXYgPSBkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLnByaXY7CisJaW50IHJvcDsKKworCWZvciAocm9wID0gMDsgcm9wIDwgcHJpdi0+cm9wX25yOyByb3ArKykgeworCQludl93cjMyKGRldiwgUk9QX1VOSVQocm9wLCAweDE0NCksIDB4YzAwMDAwMDApOworCQludl93cjMyKGRldiwgUk9QX1VOSVQocm9wLCAweDA3MCksIDB4YzAwMDAwMDApOworCQludl93cjMyKGRldiwgUk9QX1VOSVQocm9wLCAweDIwNCksIDB4ZmZmZmZmZmYpOworCQludl93cjMyKGRldiwgUk9QX1VOSVQocm9wLCAweDIwOCksIDB4ZmZmZmZmZmYpOworCX0KK30KKworc3RhdGljIGludAorbnZjMF9mdWNfbG9hZF9mdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgZnVjX2Jhc2UsCisJCSBjb25zdCBjaGFyICpjb2RlX2Z3LCBjb25zdCBjaGFyICpkYXRhX2Z3KQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJY2hhciBuYW1lWzMyXTsKKwlpbnQgcmV0LCBpOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAibm91dmVhdS8lcyIsIGRhdGFfZncpOworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBuYW1lLCAmZGV2LT5wZGV2LT5kZXYpOworCWlmIChyZXQpIHsKKwkJTlZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIGxvYWQgJXNcbiIsIGRhdGFfZncpOworCQlyZXR1cm4gcmV0OworCX0KKworCW52X3dyMzIoZGV2LCBmdWNfYmFzZSArIDB4MDFjMCwgMHgwMTAwMDAwMCk7CisJZm9yIChpID0gMDsgaSA8IGZ3LT5zaXplIC8gNDsgaSsrKQorCQludl93cjMyKGRldiwgZnVjX2Jhc2UgKyAweDAxYzQsICgodTMyICopZnctPmRhdGEpW2ldKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIm5vdXZlYXUvJXMiLCBjb2RlX2Z3KTsKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgbmFtZSwgJmRldi0+cGRldi0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCU5WX0VSUk9SKGRldiwgImZhaWxlZCB0byBsb2FkICVzXG4iLCBjb2RlX2Z3KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwludl93cjMyKGRldiwgZnVjX2Jhc2UgKyAweDAxODAsIDB4MDEwMDAwMDApOworCWZvciAoaSA9IDA7IGkgPCBmdy0+c2l6ZSAvIDQ7IGkrKykgeworCQlpZiAoKGkgJiAweDNmKSA9PSAwKQorCQkJbnZfd3IzMihkZXYsIGZ1Y19iYXNlICsgMHgwMTg4LCBpID4+IDYpOworCQludl93cjMyKGRldiwgZnVjX2Jhc2UgKyAweDAxODQsICgodTMyICopZnctPmRhdGEpW2ldKTsKKwl9CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbnZjMF9ncmFwaF9pbml0X2N0eGN0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG52YzBfZ3JhcGhfcHJpdiAqcHJpdiA9IGRldl9wcml2LT5lbmdpbmUuZ3JhcGgucHJpdjsKKwl1MzIgcjAwMDI2MDsKKwlpbnQgcmV0OworCisJLyogbG9hZCBmdWMgbWljcm9jb2RlICovCisJcjAwMDI2MCA9IG52X21hc2soZGV2LCAweDAwMDI2MCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCk7CisJcmV0ID0gbnZjMF9mdWNfbG9hZF9mdyhkZXYsIDB4NDA5MDAwLCAiZnVjNDA5YyIsICJmdWM0MDlkIik7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBudmMwX2Z1Y19sb2FkX2Z3KGRldiwgMHg0MWEwMDAsICJmdWM0MWFjIiwgImZ1YzQxYWQiKTsKKwludl93cjMyKGRldiwgMHgwMDAyNjAsIHIwMDAyNjApOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHN0YXJ0IGJvdGggb2YgdGhlbSBydW5uaW5nICovCisJbnZfd3IzMihkZXYsIDB4NDA5ODQwLCAweGZmZmZmZmZmKTsKKwludl93cjMyKGRldiwgMHg0MWExMGMsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwOTEwYywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDFhMTAwLCAweDAwMDAwMDAyKTsKKwludl93cjMyKGRldiwgMHg0MDkxMDAsIDB4MDAwMDAwMDIpOworCWlmICghbnZfd2FpdChkZXYsIDB4NDA5ODAwLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxKSkKKwkJTlZfSU5GTyhkZXYsICIweDQwOTgwMCB3YWl0IGZhaWxlZFxuIik7CisKKwludl93cjMyKGRldiwgMHg0MDk4NDAsIDB4ZmZmZmZmZmYpOworCW52X3dyMzIoZGV2LCAweDQwOTUwMCwgMHg3ZmZmZmZmZik7CisJbnZfd3IzMihkZXYsIDB4NDA5NTA0LCAweDAwMDAwMDIxKTsKKworCW52X3dyMzIoZGV2LCAweDQwOTg0MCwgMHhmZmZmZmZmZik7CisJbnZfd3IzMihkZXYsIDB4NDA5NTAwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDk1MDQsIDB4MDAwMDAwMTApOworCWlmICghbnZfd2FpdF9uZShkZXYsIDB4NDA5ODAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwKSkgeworCQlOVl9FUlJPUihkZXYsICJmdWMwOSByZXEgMHgxMCB0aW1lb3V0XG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcHJpdi0+Z3JjdHhfc2l6ZSA9IG52X3JkMzIoZGV2LCAweDQwOTgwMCk7CisKKwludl93cjMyKGRldiwgMHg0MDk4NDAsIDB4ZmZmZmZmZmYpOworCW52X3dyMzIoZGV2LCAweDQwOTUwMCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA5NTA0LCAweDAwMDAwMDE2KTsKKwlpZiAoIW52X3dhaXRfbmUoZGV2LCAweDQwOTgwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCkpIHsKKwkJTlZfRVJST1IoZGV2LCAiZnVjMDkgcmVxIDB4MTYgdGltZW91dFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJbnZfd3IzMihkZXYsIDB4NDA5ODQwLCAweGZmZmZmZmZmKTsKKwludl93cjMyKGRldiwgMHg0MDk1MDAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwOTUwNCwgMHgwMDAwMDAyNSk7CisJaWYgKCFudl93YWl0X25lKGRldiwgMHg0MDk4MDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDApKSB7CisJCU5WX0VSUk9SKGRldiwgImZ1YzA5IHJlcSAweDI1IHRpbWVvdXRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiAwOwogfQogCiBpbnQKIG52YzBfZ3JhcGhfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CisJc3RydWN0IG52YzBfZ3JhcGhfcHJpdiAqcHJpdjsKKwlpbnQgcmV0OworCiAJZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5hY2NlbF9ibG9ja2VkID0gdHJ1ZTsKKworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4YzA6CisJY2FzZSAweGMzOgorCWNhc2UgMHhjNDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJTlZfRVJST1IoZGV2LCAiUEdSQVBIOiB1bnN1cHBvcnRlZCBjaGlwc2V0LCBwbGVhc2UgcmVwb3J0IVxuIik7CisJCWlmIChub3V2ZWF1X25vYWNjZWwgIT0gMCkKKwkJCXJldHVybiAwOworCQlicmVhazsKKwl9CisKKwludl9tYXNrKGRldiwgMHgwMDAyMDAsIDB4MTgwMDEwMDAsIDB4MDAwMDAwMDApOworCW52X21hc2soZGV2LCAweDAwMDIwMCwgMHgxODAwMTAwMCwgMHgxODAwMTAwMCk7CisKKwlpZiAoIXBncmFwaC0+cHJpdikgeworCQlyZXQgPSBudmMwX2dyYXBoX2NyZWF0ZShkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJcHJpdiA9IHBncmFwaC0+cHJpdjsKKworCW52YzBfZ3JhcGhfaW5pdF9vYmo0MTg4ODAoZGV2KTsKKwludmMwX2dyYXBoX2luaXRfcmVncyhkZXYpOworCS8vbnZjMF9ncmFwaF9pbml0X3VuaXRwbGVtZW50ZWRfbWFnaWNzKGRldik7CisJbnZjMF9ncmFwaF9pbml0X2dwY18wKGRldik7CisJLy9udmMwX2dyYXBoX2luaXRfdW5pdHBsZW1lbnRlZF9jMjQyKGRldik7CisKKwludl93cjMyKGRldiwgMHg0MDA1MDAsIDB4MDAwMTAwMDEpOworCW52X3dyMzIoZGV2LCAweDQwMDEwMCwgMHhmZmZmZmZmZik7CisJbnZfd3IzMihkZXYsIDB4NDAwMTNjLCAweGZmZmZmZmZmKTsKKworCW52YzBfZ3JhcGhfaW5pdF91bml0cyhkZXYpOworCW52YzBfZ3JhcGhfaW5pdF9ncGNfMShkZXYpOworCW52YzBfZ3JhcGhfaW5pdF9yb3AoZGV2KTsKKworCW52X3dyMzIoZGV2LCAweDQwMDEwOCwgMHhmZmZmZmZmZik7CisJbnZfd3IzMihkZXYsIDB4NDAwMTM4LCAweGZmZmZmZmZmKTsKKwludl93cjMyKGRldiwgMHg0MDAxMTgsIDB4ZmZmZmZmZmYpOworCW52X3dyMzIoZGV2LCAweDQwMDEzMCwgMHhmZmZmZmZmZik7CisJbnZfd3IzMihkZXYsIDB4NDAwMTFjLCAweGZmZmZmZmZmKTsKKwludl93cjMyKGRldiwgMHg0MDAxMzQsIDB4ZmZmZmZmZmYpOworCW52X3dyMzIoZGV2LCAweDQwMDA1NCwgMHgzNGNlMzQ2NCk7CisKKwlyZXQgPSBudmMwX2dyYXBoX2luaXRfY3R4Y3RsKGRldik7CisJaWYgKHJldCA9PSAwKQorCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmFjY2VsX2Jsb2NrZWQgPSBmYWxzZTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorbnZjMF9ncmFwaF9pc3JfY2hpZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1NjQgaW5zdCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Y2hhbm5lbHMubG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+ZW5naW5lLmZpZm8uY2hhbm5lbHM7IGkrKykgeworCQljaGFuID0gZGV2X3ByaXYtPmNoYW5uZWxzLnB0cltpXTsKKwkJaWYgKCFjaGFuIHx8ICFjaGFuLT5yYW1pbikKKwkJCWNvbnRpbnVlOworCisJCWlmIChpbnN0ID09IGNoYW4tPnJhbWluLT52aW5zdCkKKwkJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y2hhbm5lbHMubG9jaywgZmxhZ3MpOworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZAorbnZjMF9ncmFwaF9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwl1NjQgaW5zdCA9ICh1NjQpKG52X3JkMzIoZGV2LCAweDQwOWIwMCkgJiAweDBmZmZmZmZmKSA8PCAxMjsKKwl1MzIgY2hpZCA9IG52YzBfZ3JhcGhfaXNyX2NoaWQoZGV2LCBpbnN0KTsKKwl1MzIgc3RhdCA9IG52X3JkMzIoZGV2LCAweDQwMDEwMCk7CisJdTMyIGFkZHIgPSBudl9yZDMyKGRldiwgMHg0MDA3MDQpOworCXUzMiBtdGhkID0gKGFkZHIgJiAweDAwMDAzZmZjKTsKKwl1MzIgc3ViYyA9IChhZGRyICYgMHgwMDA3MDAwMCkgPj4gMTY7CisJdTMyIGRhdGEgPSBudl9yZDMyKGRldiwgMHg0MDA3MDgpOworCXUzMiBjb2RlID0gbnZfcmQzMihkZXYsIDB4NDAwMTEwKTsKKwl1MzIgY2xhc3MgPSBudl9yZDMyKGRldiwgMHg0MDQyMDAgKyAoc3ViYyAqIDQpKTsKKworCWlmIChzdGF0ICYgMHgwMDAwMDAxMCkgeworCQlOVl9JTkZPKGRldiwgIlBHUkFQSDogSUxMRUdBTF9NVEhEIGNoICVkIFsweCUwMTBsbHhdIHN1YmMgJWQgIgorCQkJICAgICAiY2xhc3MgMHglMDR4IG10aGQgMHglMDR4IGRhdGEgMHglMDh4XG4iLAorCQkJY2hpZCwgaW5zdCwgc3ViYywgY2xhc3MsIG10aGQsIGRhdGEpOworCQludl93cjMyKGRldiwgMHg0MDAxMDAsIDB4MDAwMDAwMTApOworCQlzdGF0ICY9IH4weDAwMDAwMDEwOworCX0KKworCWlmIChzdGF0ICYgMHgwMDAwMDAyMCkgeworCQlOVl9JTkZPKGRldiwgIlBHUkFQSDogSUxMRUdBTF9DTEFTUyBjaCAlZCBbMHglMDEwbGx4XSBzdWJjICVkICIKKwkJCSAgICAgImNsYXNzIDB4JTA0eCBtdGhkIDB4JTA0eCBkYXRhIDB4JTA4eFxuIiwKKwkJCWNoaWQsIGluc3QsIHN1YmMsIGNsYXNzLCBtdGhkLCBkYXRhKTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwMTAwLCAweDAwMDAwMDIwKTsKKwkJc3RhdCAmPSB+MHgwMDAwMDAyMDsKKwl9CisKKwlpZiAoc3RhdCAmIDB4MDAxMDAwMDApIHsKKwkJTlZfSU5GTyhkZXYsICJQR1JBUEg6IERBVEFfRVJST1IgWyIpOworCQlub3V2ZWF1X2VudW1fcHJpbnQobnY1MF9kYXRhX2Vycm9yX25hbWVzLCBjb2RlKTsKKwkJcHJpbnRrKCJdIGNoICVkIFsweCUwMTBsbHhdIHN1YmMgJWQgY2xhc3MgMHglMDR4ICIKKwkJICAgICAgICJtdGhkIDB4JTA0eCBkYXRhIDB4JTA4eFxuIiwKKwkJICAgICAgIGNoaWQsIGluc3QsIHN1YmMsIGNsYXNzLCBtdGhkLCBkYXRhKTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwMTAwLCAweDAwMTAwMDAwKTsKKwkJc3RhdCAmPSB+MHgwMDEwMDAwMDsKKwl9CisKKwlpZiAoc3RhdCAmIDB4MDAyMDAwMDApIHsKKwkJdTMyIHRyYXAgPSBudl9yZDMyKGRldiwgMHg0MDAxMDgpOworCQlOVl9JTkZPKGRldiwgIlBHUkFQSDogVFJBUCBjaCAlZCBzdGF0dXMgMHglMDh4XG4iLCBjaGlkLCB0cmFwKTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwMTA4LCB0cmFwKTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwMTAwLCAweDAwMjAwMDAwKTsKKwkJc3RhdCAmPSB+MHgwMDIwMDAwMDsKKwl9CisKKwlpZiAoc3RhdCAmIDB4MDAwODAwMDApIHsKKwkJdTMyIHVzdGF0ID0gbnZfcmQzMihkZXYsIDB4NDA5YzE4KTsKKworCQlOVl9JTkZPKGRldiwgIlBHUkFQSDogQ1RYQ1RSTCB1c3RhdCAweCUwOHhcbiIsIHVzdGF0KTsKKworCQludl93cjMyKGRldiwgMHg0MDljMjAsIHVzdGF0KTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwMTAwLCAweDAwMDgwMDAwKTsKKwkJc3RhdCAmPSB+MHgwMDA4MDAwMDsKKwl9CisKKwlpZiAoc3RhdCkgeworCQlOVl9JTkZPKGRldiwgIlBHUkFQSDogdW5rbm93biBzdGF0IDB4JTA4eFxuIiwgc3RhdCk7CisJCW52X3dyMzIoZGV2LCAweDQwMDEwMCwgc3RhdCk7CisJfQorCisJbnZfd3IzMihkZXYsIDB4NDAwNTAwLCAweDAwMDEwMDAxKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JhcGguaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JhcGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGUyNmY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmFwaC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBCZW4gU2tlZ2dzCisgKi8KKworI2lmbmRlZiBfX05WQzBfR1JBUEhfSF9fCisjZGVmaW5lIF9fTlZDMF9HUkFQSF9IX18KKworI2RlZmluZSBHUENfTUFYIDQKKyNkZWZpbmUgVFBfTUFYIDMyCisKKyNkZWZpbmUgUk9QX0JDQVNUKHIpICAgKDB4NDA4ODAwICsgKHIpKQorI2RlZmluZSBST1BfVU5JVCh1LHIpICAoMHg0MTAwMDAgKyAodSkgKiAweDQwMCArIChyKSkKKyNkZWZpbmUgR1BDX0JDQVNUKHIpICAgKDB4NDE4MDAwICsgKHIpKQorI2RlZmluZSBHUENfVU5JVCh0LHIpICAoMHg1MDAwMDAgKyAodCkgKiAweDgwMDAgKyAocikpCisjZGVmaW5lIFRQX1VOSVQodCxtLHIpICgweDUwNDAwMCArICh0KSAqIDB4ODAwMCArIChtKSAqIDB4ODAwICsgKHIpKQorCitzdHJ1Y3QgbnZjMF9ncmFwaF9wcml2IHsKKwl1OCBncGNfbnI7CisJdTggcm9wX25yOworCXU4IHRwX25yW0dQQ19NQVhdOworCXU4IHRwX3RvdGFsOworCisJdTMyICBncmN0eF9zaXplOworCXUzMiAqZ3JjdHhfdmFsczsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnVuazQxODhiNDsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnVuazQxODhiODsKKworCXU4ICBtYWdpY19ub3Rfcm9wX25yOworCXUzMiBtYWdpY2dwYzk4MFs0XTsKKwl1MzIgbWFnaWNncGM5MTg7Cit9OworCitzdHJ1Y3QgbnZjMF9ncmFwaF9jaGFuIHsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmdyY3R4OworCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqdW5rNDA4MDA0OyAvLyAweDQxODgxMCB0b28KKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnVuazQwODAwYzsgLy8gMHg0MTkwMDQgdG9vCisJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICp1bms0MTg4MTA7IC8vIDB4NDE5ODQ4IHRvbworCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqbW1pbzsKKwlpbnQgbW1pb19ucjsKK307CisKK2ludCBudmMwX2dyY3R4X2dlbmVyYXRlKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmN0eC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmN0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZTY4YjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyY3R4LmMKQEAgLTAsMCArMSwyODc0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgUmVkIEhhdCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQmVuIFNrZWdncworICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKKyNpbmNsdWRlICJub3V2ZWF1X21tLmgiCisjaW5jbHVkZSAibnZjMF9ncmFwaC5oIgorCitzdGF0aWMgdm9pZAorbnZfaWNtZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgaWNtZCwgdTMyIGRhdGEpCit7CisJbnZfd3IzMihkZXYsIDB4NDAwMjA0LCBkYXRhKTsKKwludl93cjMyKGRldiwgMHg0MDAyMDAsIGljbWQpOworCXdoaWxlIChudl9yZDMyKGRldiwgMHg0MDA3MDApICYgMikge30KK30KKworc3RhdGljIHZvaWQKK252X210aGQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIGNsYXNzLCB1MzIgbXRoZCwgdTMyIGRhdGEpCit7CisJbnZfd3IzMihkZXYsIDB4NDA0NDhjLCBkYXRhKTsKKwludl93cjMyKGRldiwgMHg0MDQ0ODgsIDB4ODAwMDAwMDAgfCAobXRoZCA8PCAxNCkgfCBjbGFzcyk7Cit9CisKK3N0YXRpYyB2b2lkCitudmMwX2dyY3R4X2dlbmVyYXRlXzkwOTcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA4MDAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDg0MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwODgwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA4YzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDkwMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOTQwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA5ODAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDljMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwODA0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA4NDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDg4NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOGM0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA5MDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDk0NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOTg0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA5YzQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDgwOCwgMHgwMDAwMDQwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwODQ4LCAweDAwMDAwNDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA4ODgsIDB4MDAwMDA0MDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDhjOCwgMHgwMDAwMDQwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOTA4LCAweDAwMDAwNDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA5NDgsIDB4MDAwMDA0MDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDk4OCwgMHgwMDAwMDQwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOWM4LCAweDAwMDAwNDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA4MGMsIDB4MDAwMDAzMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDg0YywgMHgwMDAwMDMwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwODhjLCAweDAwMDAwMzAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA4Y2MsIDB4MDAwMDAzMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDkwYywgMHgwMDAwMDMwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOTRjLCAweDAwMDAwMzAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA5OGMsIDB4MDAwMDAzMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDljYywgMHgwMDAwMDMwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwODEwLCAweDAwMDAwMGNmKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA4NTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDg5MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOGQwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA5MTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDk1MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOTkwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA5ZDAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDgxNCwgMHgwMDAwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwODU0LCAweDAwMDAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA4OTQsIDB4MDAwMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDhkNCwgMHgwMDAwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOTE0LCAweDAwMDAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA5NTQsIDB4MDAwMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDk5NCwgMHgwMDAwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOWQ0LCAweDAwMDAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA4MTgsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDg1OCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwODk4LCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA4ZDgsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDkxOCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOTU4LCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA5OTgsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDlkOCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwODFjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA4NWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDg5YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOGRjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA5MWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDk1YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOTljLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA5ZGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDgyMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwODYwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA4YTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDhlMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOTIwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA5NjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDlhMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwOWUwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3MDAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjcyMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyNzQwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3NjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjc4MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyN2EwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3YzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjdlMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyNzA0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3MjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjc0NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyNzY0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3ODQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjdhNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyN2M0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3ZTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjcwOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyNzI4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3NDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjc2OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyNzg4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3YTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjdjOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyN2U4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3MGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjcyYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyNzRjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3NmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjc4YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyN2FjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3Y2MsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjdlYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyNzEwLCAweDAwMDE0MDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3MzAsIDB4MDAwMTQwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjc1MCwgMHgwMDAxNDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyNzcwLCAweDAwMDE0MDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3OTAsIDB4MDAwMTQwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjdiMCwgMHgwMDAxNDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyN2QwLCAweDAwMDE0MDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3ZjAsIDB4MDAwMTQwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjcxNCwgMHgwMDAwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyNzM0LCAweDAwMDAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3NTQsIDB4MDAwMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjc3NCwgMHgwMDAwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyNzk0LCAweDAwMDAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI3YjQsIDB4MDAwMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjdkNCwgMHgwMDAwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyN2Y0LCAweDAwMDAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjMDAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWMxMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYzIwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjMzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWM0MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYzUwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjNjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWM3MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYzgwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjOTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWNhMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxY2IwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjYzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWNkMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxY2UwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjZjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWMwNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYzE0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjMjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWMzNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYzQ0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjNTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWM2NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYzc0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjODQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWM5NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxY2E0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjYjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWNjNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxY2Q0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjZTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWNmNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYzA4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjMTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWMyOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYzM4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjNDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWM1OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYzY4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjNzgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWM4OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYzk4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjYTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWNiOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxY2M4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjZDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWNlOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxY2Y4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjMGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWMxYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYzJjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjM2MsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWM0YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYzVjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjNmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWM3YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYzhjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjOWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWNhYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxY2JjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjY2MsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWNkYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxY2VjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFjZmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWQwMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZDEwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkMjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWQzMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZDQwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkNTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWQ2MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZDcwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkODAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWQ5MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZGEwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkYjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWRjMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZGQwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkZTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWRmMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZDA0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkMTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWQyNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZDM0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkNDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWQ1NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZDY0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkNzQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWQ4NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZDk0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkYTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWRiNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZGM0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkZDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWRlNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZGY0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkMDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWQxOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZDI4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkMzgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWQ0OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZDU4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkNjgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWQ3OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZDg4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkOTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWRhOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZGI4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkYzgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWRkOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZGU4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkZjgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWQwYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZDFjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkMmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWQzYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZDRjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkNWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWQ2YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZDdjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkOGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWQ5YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZGFjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkYmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWRjYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZGRjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFkZWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWRmYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZjAwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmMDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWYxMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZjE4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmMjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWYyOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZjMwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmMzgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWY0MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZjQ4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmNTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWY1OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZjYwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmNjgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWY3MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZjc4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmMDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWYwYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZjE0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmMWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWYyNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZjJjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmMzQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWYzYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZjQ0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmNGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWY1NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZjVjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmNjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWY2YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZjc0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmN2MsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWY4MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZjg4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmOTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWY5OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZmEwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmYTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWZiMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZmI4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmYzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWZjOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZmQwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmZDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWZlMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZmU4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmZjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWZmOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZjg0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmOGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWY5NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZjljLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmYTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWZhYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZmI0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmYmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWZjNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZmNjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmZDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWZkYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZmU0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFmZWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWZmNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZmZjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDIyMDAsIDB4MDAwMDAwMjIpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjIxMCwgMHgwMDAwMDAyMik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyMjIwLCAweDAwMDAwMDIyKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDIyMzAsIDB4MDAwMDAwMjIpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjI0MCwgMHgwMDAwMDAyMik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyMDAwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDIwNDAsIDB4MDAwMDAwMTEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjA4MCwgMHgwMDAwMDAyMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyMGMwLCAweDAwMDAwMDMwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDIxMDAsIDB4MDAwMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjE0MCwgMHgwMDAwMDA1MSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyMDBjLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDIwNGMsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjA4YywgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyMGNjLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDIxMGMsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjE0YywgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyMDEwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDIwNTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjA5MCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyMGQwLCAweDAwMDAwMDAyKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDIxMTAsIDB4MDAwMDAwMDMpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjE1MCwgMHgwMDAwMDAwNCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwMzgwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAzYTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDNjMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwM2UwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAzODQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDNhNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwM2M0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAzZTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDM4OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwM2E4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAzYzgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDNlOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwMzhjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAzYWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDNjYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwM2VjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3MDAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDcxMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwNzIwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3MzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDcwNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwNzE0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3MjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDczNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwNzA4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3MTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDcyOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwNzM4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4MDAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjgwNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyODA4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4MGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjgxMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyODE0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4MTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjgxYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyODIwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4MjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjgyOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyODJjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4MzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjgzNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyODM4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4M2MsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjg0MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyODQ0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4NDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjg0YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyODUwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4NTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjg1OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyODVjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4NjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjg2NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyODY4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4NmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjg3MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyODc0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4NzgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjg3YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyODgwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4ODQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjg4OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyODhjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4OTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjg5NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyODk4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4OWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjhhMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOGE0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4YTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjhhYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOGIwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4YjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjhiOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOGJjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4YzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjhjNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOGM4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4Y2MsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjhkMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOGQ0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4ZDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjhkYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOGUwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4ZTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjhlOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOGVjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4ZjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjhmNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOGY4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI4ZmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjkwMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOTA0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5MDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjkwYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOTEwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5MTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjkxOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOTFjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5MjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjkyNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOTI4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5MmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjkzMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOTM0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5MzgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjkzYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOTQwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5NDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjk0OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOTRjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5NTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjk1NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOTU4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5NWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjk2MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOTY0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5NjgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjk2YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOTcwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5NzQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjk3OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOTdjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5ODAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjk4NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOTg4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5OGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjk5MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOTk0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5OTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4Mjk5YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOWEwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5YTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjlhOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOWFjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5YjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjliNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOWI4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5YmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjljMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOWM0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5YzgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjljYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOWQwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5ZDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjlkOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOWRjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5ZTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjllNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOWU4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5ZWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjlmMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgyOWY0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDI5ZjgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjlmYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYTAwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhMjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGE0MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYTYwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhODAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGFhMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYWMwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhZTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGIwMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYjIwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiNDAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGI2MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYjgwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiYTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGJjMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYmUwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhMDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGEyNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYTQ0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhNjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGE4NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYWE0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhYzQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGFlNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYjA0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiMjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGI0NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYjY0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiODQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGJhNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYmM0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiZTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGEwOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYTI4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhNDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGE2OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYTg4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhYTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGFjOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYWU4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiMDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGIyOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYjQ4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiNjgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGI4OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYmE4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiYzgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGJlOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYTBjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhMmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGE0YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYTZjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhOGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGFhYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYWNjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhZWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGIwYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYjJjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiNGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGI2YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYjhjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiYWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGJjYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYmVjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhMTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGEzMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYTUwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhNzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGE5MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYWIwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhZDAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGFmMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYjEwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiMzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGI1MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYjcwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiOTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGJiMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYmQwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiZjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGExNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYTM0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhNTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGE3NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYTk0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBhYjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGFkNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYWY0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiMTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGIzNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYjU0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiNzQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGI5NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYmI0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBiZDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGJmNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYzAwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjMTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGMyMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYzMwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjNDAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGM1MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYzYwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjNzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGM4MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYzkwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjYTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGNiMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwY2MwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjZDAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGNlMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwY2YwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjMDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGMxNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYzI0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjMzQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGM0NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYzU0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjNjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGM3NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYzg0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjOTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGNhNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwY2I0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjYzQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGNkNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwY2U0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjZjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGMwOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYzE4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjMjgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGMzOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYzQ4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjNTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGM2OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYzc4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjODgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGM5OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwY2E4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjYjgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGNjOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwY2Q4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjZTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGNmOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYzBjLCAweDNmODAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjMWMsIDB4M2Y4MDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGMyYywgMHgzZjgwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYzNjLCAweDNmODAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjNGMsIDB4M2Y4MDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGM1YywgMHgzZjgwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYzZjLCAweDNmODAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjN2MsIDB4M2Y4MDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGM4YywgMHgzZjgwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwYzljLCAweDNmODAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjYWMsIDB4M2Y4MDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGNiYywgMHgzZjgwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwY2NjLCAweDNmODAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBjZGMsIDB4M2Y4MDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGNlYywgMHgzZjgwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwY2ZjLCAweDNmODAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkMDAsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGQwOCwgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZDEwLCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkMTgsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGQyMCwgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZDI4LCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkMzAsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGQzOCwgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZDA0LCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkMGMsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGQxNCwgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZDFjLCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkMjQsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGQyYywgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZDM0LCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkM2MsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGUwMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZTEwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlMjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGUzMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZTQwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlNTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGU2MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZTcwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlODAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGU5MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZWEwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlYjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGVjMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZWQwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlZTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGVmMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZTA0LCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlMTQsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGUyNCwgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZTM0LCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlNDQsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGU1NCwgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZTY0LCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlNzQsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGU4NCwgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZTk0LCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlYTQsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGViNCwgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZWM0LCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlZDQsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGVlNCwgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZWY0LCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlMDgsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGUxOCwgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZTI4LCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlMzgsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGU0OCwgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZTU4LCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlNjgsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGU3OCwgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZTg4LCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlOTgsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGVhOCwgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZWI4LCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlYzgsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGVkOCwgMHhmZmZmMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZWU4LCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBlZjgsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGQ0MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZDQ4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkNTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGQ1OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZDQ0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkNGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGQ1NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZDVjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlMDAsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWUyMCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZTQwLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlNjAsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWU4MCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZWEwLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlYzAsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWVlMCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZTA0LCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlMjQsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWU0NCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZTY0LCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlODQsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWVhNCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZWM0LCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlZTQsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWUwOCwgMHgwMDAwMDAwMik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZTI4LCAweDAwMDAwMDAyKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlNDgsIDB4MDAwMDAwMDIpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWU2OCwgMHgwMDAwMDAwMik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZTg4LCAweDAwMDAwMDAyKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlYTgsIDB4MDAwMDAwMDIpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWVjOCwgMHgwMDAwMDAwMik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZWU4LCAweDAwMDAwMDAyKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlMGMsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWUyYywgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZTRjLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlNmMsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWU4YywgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZWFjLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlY2MsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWVlYywgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZTEwLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlMzAsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWU1MCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZTcwLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlOTAsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWViMCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZWQwLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlZjAsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWUxNCwgMHgwMDAwMDAwMik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZTM0LCAweDAwMDAwMDAyKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlNTQsIDB4MDAwMDAwMDIpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWU3NCwgMHgwMDAwMDAwMik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZTk0LCAweDAwMDAwMDAyKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlYjQsIDB4MDAwMDAwMDIpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWVkNCwgMHgwMDAwMDAwMik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZWY0LCAweDAwMDAwMDAyKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlMTgsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWUzOCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZTU4LCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlNzgsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWU5OCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxZWI4LCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFlZDgsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWVmOCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNDAwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0MDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzQwOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNDBjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0MTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzQxNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNDE4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0MWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzQyMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNDI0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0MjgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzQyYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNDMwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0MzQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzQzOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNDNjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0NDAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzQ0NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNDQ4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0NGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzQ1MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNDU0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0NTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzQ1YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNDYwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0NjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzQ2OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNDZjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0NzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzQ3NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNDc4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0N2MsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzQ4MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNDg0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0ODgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzQ4YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNDkwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0OTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzQ5OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNDljLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0YTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzRhNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNGE4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0YWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzRiMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNGI0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0YjgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzRiYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNGMwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0YzQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzRjOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNGNjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0ZDAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzRkNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNGQ4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0ZGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzRlMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNGU0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0ZTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzRlYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNGYwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0ZjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzRmOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNGZjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1MDAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzUwNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNTA4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1MGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzUxMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNTE0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1MTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzUxYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNTIwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1MjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzUyOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNTJjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1MzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzUzNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNTM4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1M2MsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzU0MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNTQ0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1NDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzU0YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNTUwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1NTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzU1OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNTVjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1NjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzU2NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNTY4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1NmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzU3MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNTc0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1NzgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzU3YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNTgwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1ODQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzU4OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNThjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1OTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzU5NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNTk4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1OWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzVhMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNWE0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1YTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzVhYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNWIwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1YjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzViOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNWJjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1YzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzVjNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNWM4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1Y2MsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzVkMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNWQ0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1ZDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzVkYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNWUwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1ZTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzVlOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNWVjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1ZjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MzVmNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgzNWY4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM1ZmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDMwYywgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOTQ0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE1MTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGQ2OCwgMHgwMDAwZmZmZik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMjFjLCAweDBmYWM2ODgxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBmYWMsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTUzOCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZmUwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBmZTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGZlOCwgMHgwMDAwMDAxNCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZmVjLCAweDAwMDAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBmZjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTc5YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMjI4LCAweDAwMDAwNDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEyMmMsIDB4MDAwMDAzMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTIzMCwgMHgwMDAxMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwN2Y4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE1YjQsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTVjYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNTM0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBmYjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTVkMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNTNjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE2YjQsIDB4MDAwMDAwMDMpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGZiYywgMHgwMDAwZmZmZik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZmMwLCAweDAwMDBmZmZmKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBmYzQsIDB4MDAwMGZmZmYpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGZjOCwgMHgwMDAwZmZmZik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZGY4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkZmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTk0OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOTcwLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE2MWMsIDB4MDAwMDA5ZjApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGRjYywgMHgwMDAwMDAxMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNjNjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE1ZTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTE2MCwgMHgyNWUwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMTY0LCAweDI1ZTAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDExNjgsIDB4MjVlMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTE2YywgMHgyNWUwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMTcwLCAweDI1ZTAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDExNzQsIDB4MjVlMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTE3OCwgMHgyNWUwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMTdjLCAweDI1ZTAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDExODAsIDB4MjVlMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTE4NCwgMHgyNWUwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMTg4LCAweDI1ZTAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDExOGMsIDB4MjVlMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTE5MCwgMHgyNWUwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMTk0LCAweDI1ZTAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDExOTgsIDB4MjVlMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTE5YywgMHgyNWUwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMWEwLCAweDI1ZTAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDExYTQsIDB4MjVlMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTFhOCwgMHgyNWUwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMWFjLCAweDI1ZTAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDExYjAsIDB4MjVlMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTFiNCwgMHgyNWUwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMWI4LCAweDI1ZTAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDExYmMsIDB4MjVlMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTFjMCwgMHgyNWUwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMWM0LCAweDI1ZTAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDExYzgsIDB4MjVlMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTFjYywgMHgyNWUwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMWQwLCAweDI1ZTAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDExZDQsIDB4MjVlMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTFkOCwgMHgyNWUwMDA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMWRjLCAweDI1ZTAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE4ODAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTg4NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxODg4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE4OGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTg5MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxODk0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE4OTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTg5YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOGEwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE4YTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MThhOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOGFjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE4YjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MThiNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOGI4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE4YmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MThjMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOGM0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE4YzgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MThjYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOGQwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE4ZDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MThkOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOGRjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE4ZTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MThlNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOGU4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE4ZWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MThmMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOGY0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE4ZjgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MThmYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZjg0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBmODgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTdjOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxN2NjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE3ZDAsIDB4MDAwMDAwZmYpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTdkNCwgMHhmZmZmZmZmZik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxN2Q4LCAweDAwMDAwMDAyKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE3ZGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTVmNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNWY4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE0MzQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTQzOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZDc0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkZWMsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTNhNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMzE4LCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE2NDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDc0OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZGU4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE2NDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTJhNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMTIwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDExMjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTEyOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMTJjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDExMTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTY0YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNjU4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE5MTAsIDB4MDAwMDAyOTApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTUxOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNjVjLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE1MjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTYwNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNTcwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEzYjAsIDB4M2Y4MDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTNiNCwgMHgzZjgwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwMjBjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE2NzAsIDB4MzAyMDEwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTY3NCwgMHg3MDYwNTA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNjc4LCAweGI4YTg5ODg4KTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE2N2MsIDB4ZjhlOGQ4YzgpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTY2YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNjgwLCAweDAwZmZmZjAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEyZDAsIDB4MDAwMDAwMDMpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTJkNCwgMHgwMDAwMDAwMik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNjg0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE2ODgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGRhYywgMHgwMDAwMWIwMik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZGIwLCAweDAwMDAxYjAyKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkYjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTY4YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNWJjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE1NmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTg3YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMTEwLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkYzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGRjNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZGM4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEyMzQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTY5MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMmFjLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAyYzQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDc5MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwNzk0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3OTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDc5YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwN2EwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3N2MsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTAwMCwgMHgwMDAwMDAxMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMGZjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEyOTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDIxOCwgMHgwMDAwMDAxMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMmQ4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEyZGMsIDB4MDAwMDAwMTApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGQ5NCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNTVjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE1NjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTU2NCwgMHgwMDAwMWZmZik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNTc0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE1NzgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTU3YywgMHgwMDNmZmZmZik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMzU0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE2NjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTYxMCwgMHgwMDAwMDAxMik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNjA4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE2MGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTYyYywgMHgwMDAwMDAwMyk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwMjEwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAzMjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDMyNCwgMHgzZjgwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwMzI4LCAweDNmODAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAzMmMsIDB4M2Y4MDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDMzMCwgMHgzZjgwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwMzM0LCAweDNmODAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAzMzgsIDB4M2Y4MDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDc1MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwNzYwLCAweDM5MjkxOTA5KTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3NjQsIDB4Nzk2OTU5NDkpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDc2OCwgMHhiOWE5OTk4OSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwNzZjLCAweGY5ZTlkOWM5KTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3NzAsIDB4MzAyMDEwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDc3NCwgMHg3MDYwNTA0MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwNzc4LCAweDAwMDA5MDgwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3ODAsIDB4MzkyOTE5MDkpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDc4NCwgMHg3OTY5NTk0OSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwNzg4LCAweGI5YTk5OTg5KTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3OGMsIDB4ZjllOWQ5YzkpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDdkMCwgMHgzMDIwMTAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwN2Q0LCAweDcwNjA1MDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3ZDgsIDB4MDAwMDkwODApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDM3YywgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwNzQwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3NDQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MjYwMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOTE4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE5MWMsIDB4MDAwMDA5MDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTkyMCwgMHgwMDAwMDQwNSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMzA4LCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE5MjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTNhYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOTJjLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE5M2MsIDB4MDAwMDJjMWMpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGQ3YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZjhjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAyYzAsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTUxMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOTQwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBmZjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGZmOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOTRjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE5NTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTk2OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNTkwLCAweDAwMDAwMDNmKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3ZTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDdlYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwN2YwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3ZjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTk2YywgMHgwMDAwMDAxMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOTdjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBmY2MsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGZkMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwMmQ4LCAweDAwMDAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE5ODAsIDB4MDAwMDAwODApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTUwNCwgMHgwMDAwMDA4MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOTg0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAzMDAsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTNhOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMmVjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEzMTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTMxNCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMzgwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEzODQsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTM4OCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMzhjLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEzOTAsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTM5NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMzljLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEzOTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTU5NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNTk4LCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE1OWMsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTVhMCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNWE0LCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBmNTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGY1OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZjVjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE5YmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGY5YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZmEwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEyY2MsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTJlOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMzBjLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEzNjAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTM2NCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMzY4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEzNmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTM3MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMzc0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEzNzgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTM3YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMzNjLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEzNDAsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTM0NCwgMHgwMDAwMDAwMik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMzQ4LCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEzNGMsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTM1MCwgMHgwMDAwMDAwMik7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMzU4LCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEyZTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTMxYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMzIwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEzMjQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTMyOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOWMwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDExNDAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTljNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOWM4LCAweDAwMDAxNTAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEzNWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGY5MCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOWUwLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE5ZTQsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTllOCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOWVjLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE5ZjAsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTlmNCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxOWY4LCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE5ZmMsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTljYywgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNWI4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFhMDAsIDB4MDAwMDExMTEpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWEwNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYTA4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFhMGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWExMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxYTE0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDFhMTgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MWExYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZDZjLCAweGZmZmYwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkNzAsIDB4ZmZmZjAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTBmOCwgMHgwMDAwMTAxMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZDgwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkODQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGQ4OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZDhjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBkOTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGRhMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNTA4LCAweDgwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE1MGMsIDB4NDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTY2OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwMzE4LCAweDAwMDAwMDA4KTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAzMWMsIDB4MDAwMDAwMDgpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MGQ5YywgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwN2RjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3NGMsIDB4MDAwMDAwNTUpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTQyMCwgMHgwMDAwMDAwMyk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxN2JjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE3YzAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTdjNCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMDA4LCAweDAwMDAwMDA4KTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEwMGMsIDB4MDAwMDAwNDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTAxMCwgMHgwMDAwMDEyYyk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZDYwLCAweDAwMDAwMDQwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDA3NWMsIDB4MDAwMDAwMDMpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTAxOCwgMHgwMDAwMDAyMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxMDFjLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDEwMjAsIDB4MDAwMDAwMjApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTAyNCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNDQ0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE0NDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTQ0YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwMzYwLCAweDIwMTY0MDEwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAzNjQsIDB4MDAwMDAwMjApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDM2OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZGU0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAyMDQsIDB4MDAwMDAwMDYpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDIwOCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwMmNjLCAweDAwM2ZmZmZmKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDAyZDAsIDB4MDAwMDBjNDgpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTIyMCwgMHgwMDAwMDAwNSk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgwZmRjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDBmOTgsIDB4MDAzMDAwMDgpOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MTI4NCwgMHgwNDAwMDA4MCk7CisJbnZfbXRoZChkZXYsIDB4OTA5NywgMHgxNDUwLCAweDAwMzAwMDA4KTsKKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDE0NTQsIDB4MDQwMDAwODApOworCW52X210aGQoZGV2LCAweDkwOTcsIDB4MDIxNCwgMHgwMDAwMDAwMCk7CisJLyogaW4gdHJhY2UsIHJpZ2h0IGFmdGVyIDB4OTBjMCwgbm90IGhlcmUgKi8KKwludl9tdGhkKGRldiwgMHg5MDk3LCAweDM0MTAsIDB4ODAwMDIwMDYpOworfQorCitzdGF0aWMgdm9pZAorbnZjMF9ncmN0eF9nZW5lcmF0ZV85MDJkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJbnZfbXRoZChkZXYsIDB4OTAyZCwgMHgwMjAwLCAweDAwMDAwMGNmKTsKKwludl9tdGhkKGRldiwgMHg5MDJkLCAweDAyMDQsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwMmQsIDB4MDIwOCwgMHgwMDAwMDAyMCk7CisJbnZfbXRoZChkZXYsIDB4OTAyZCwgMHgwMjBjLCAweDAwMDAwMDAxKTsKKwludl9tdGhkKGRldiwgMHg5MDJkLCAweDAyMTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwMmQsIDB4MDIxNCwgMHgwMDAwMDA4MCk7CisJbnZfbXRoZChkZXYsIDB4OTAyZCwgMHgwMjE4LCAweDAwMDAwMTAwKTsKKwludl9tdGhkKGRldiwgMHg5MDJkLCAweDAyMWMsIDB4MDAwMDAxMDApOworCW52X210aGQoZGV2LCAweDkwMmQsIDB4MDIyMCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTAyZCwgMHgwMjI0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDJkLCAweDAyMzAsIDB4MDAwMDAwY2YpOworCW52X210aGQoZGV2LCAweDkwMmQsIDB4MDIzNCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTAyZCwgMHgwMjM4LCAweDAwMDAwMDIwKTsKKwludl9tdGhkKGRldiwgMHg5MDJkLCAweDAyM2MsIDB4MDAwMDAwMDEpOworCW52X210aGQoZGV2LCAweDkwMmQsIDB4MDI0NCwgMHgwMDAwMDA4MCk7CisJbnZfbXRoZChkZXYsIDB4OTAyZCwgMHgwMjQ4LCAweDAwMDAwMTAwKTsKKwludl9tdGhkKGRldiwgMHg5MDJkLCAweDAyNGMsIDB4MDAwMDAxMDApOworfQorCitzdGF0aWMgdm9pZAorbnZjMF9ncmN0eF9nZW5lcmF0ZV85MDM5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJbnZfbXRoZChkZXYsIDB4OTAzOSwgMHgwMzBjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDM5LCAweDAzMTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwMzksIDB4MDMxNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTAzOSwgMHgwMzIwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDM5LCAweDAyMzgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwMzksIDB4MDIzYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTAzOSwgMHgwMzE4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MDM5LCAweDAzMWMsIDB4MDAwMDAwMDApOworfQorCitzdGF0aWMgdm9pZAorbnZjMF9ncmN0eF9nZW5lcmF0ZV85MGMwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJbnZfbXRoZChkZXYsIDB4OTBjMCwgMHgyNzBjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MGMwLCAweDI3MmMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwYzAsIDB4Mjc0YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTBjMCwgMHgyNzZjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MGMwLCAweDI3OGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwYzAsIDB4MjdhYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTBjMCwgMHgyN2NjLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MGMwLCAweDI3ZWMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwYzAsIDB4MDMwYywgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTBjMCwgMHgxOTQ0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MGMwLCAweDA3NTgsIDB4MDAwMDAxMDApOworCW52X210aGQoZGV2LCAweDkwYzAsIDB4MDJjNCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTBjMCwgMHgwNzkwLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MGMwLCAweDA3OTQsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwYzAsIDB4MDc5OCwgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTBjMCwgMHgwNzljLCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MGMwLCAweDA3YTAsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwYzAsIDB4MDc3YywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTBjMCwgMHgwMjA0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MGMwLCAweDAyMDgsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwYzAsIDB4MDIwYywgMHgwMDAwMDAwMCk7CisJbnZfbXRoZChkZXYsIDB4OTBjMCwgMHgwMjE0LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MGMwLCAweDAyNGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwYzAsIDB4MGQ5NCwgMHgwMDAwMDAwMSk7CisJbnZfbXRoZChkZXYsIDB4OTBjMCwgMHgxNjA4LCAweDAwMDAwMDAwKTsKKwludl9tdGhkKGRldiwgMHg5MGMwLCAweDE2MGMsIDB4MDAwMDAwMDApOworCW52X210aGQoZGV2LCAweDkwYzAsIDB4MTY2NCwgMHgwMDAwMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudmMwX2dyY3R4X2dlbmVyYXRlX2Rpc3BhdGNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisKKwludl93cjMyKGRldiwgMHg0MDQwMDQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDAwOCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0MDBjLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQwMTAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDAxNCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0MDE4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQwMWMsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDAyMCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0MDI0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQwMjgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDAyYywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0MDQ0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQwOTQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDA5OCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0MDljLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQwYTAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDBhNCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0MGE4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQwYWMsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDBiMCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0MGI0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQwYjgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDBiYywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0MGMwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQwYzQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDBjOCwgMHhmMDAwMDA4Nyk7CisJbnZfd3IzMihkZXYsIDB4NDA0MGQ0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQwZDgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDBkYywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0MGUwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQwZTQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDBlOCwgMHgwMDAwMTAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0MGY4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQxMzAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDEzNCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0MTM4LCAweDIwMDAwMDQwKTsKKwludl93cjMyKGRldiwgMHg0MDQxNTAsIDB4MDAwMDAwMmUpOworCW52X3dyMzIoZGV2LCAweDQwNDE1NCwgMHgwMDAwMDQwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0MTU4LCAweDAwMDAwMjAwKTsKKwludl93cjMyKGRldiwgMHg0MDQxNjQsIDB4MDAwMDAwNTUpOworCW52X3dyMzIoZGV2LCAweDQwNDE2OCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0MTc0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQxNzgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDE3YywgMHgwMDAwMDAwMCk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJbnZfd3IzMihkZXYsIDB4NDA0MjAwICsgKGkgKiA0KSwgMHgwMDAwMDAwMCk7IC8qIHN1YmMgKi8KK30KKworc3RhdGljIHZvaWQKK252YzBfZ3JjdHhfZ2VuZXJhdGVfbWFjcm8oc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwludl93cjMyKGRldiwgMHg0MDQ0MDQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDQwOCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NDBjLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ0MTAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDQxNCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NDE4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ0MWMsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDQyMCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NDI0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ0MjgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDQyYywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NDMwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ0MzQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDQzOCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NDYwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ0NjQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDQ2OCwgMHgwMGZmZmZmZik7CisJbnZfd3IzMihkZXYsIDB4NDA0NDZjLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ0ODAsIDB4MDAwMDAwMDEpOworCW52X3dyMzIoZGV2LCAweDQwNDQ5OCwgMHgwMDAwMDAwMSk7Cit9CisKK3N0YXRpYyB2b2lkCitudmMwX2dyY3R4X2dlbmVyYXRlX20ybWYoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwludl93cjMyKGRldiwgMHg0MDQ2MDQsIDB4MDAwMDAwMTUpOworCW52X3dyMzIoZGV2LCAweDQwNDYwOCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NjBjLCAweDAwMDAyZTAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2MTAsIDB4MDAwMDAxMDApOworCW52X3dyMzIoZGV2LCAweDQwNDYxOCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NjFjLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2MjAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDYyNCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NjI4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2MmMsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDYzMCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NjM0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2MzgsIDB4MDAwMDAwMDQpOworCW52X3dyMzIoZGV2LCAweDQwNDYzYywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NjQwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2NDQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDY0OCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NjRjLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2NTAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDY1NCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NjU4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2NWMsIDB4MDA3ZjAxMDApOworCW52X3dyMzIoZGV2LCAweDQwNDY2MCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NjY0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2NjgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDY2YywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NjcwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2NzQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDY3OCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NjdjLCAweDAwMDAwMDAyKTsKKwludl93cjMyKGRldiwgMHg0MDQ2ODAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDY4NCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0Njg4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2OGMsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDY5MCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0Njk0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2OTgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDY5YywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NmEwLCAweDAwN2YwMDgwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2YTQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDZhOCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NmFjLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2YjAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDZiNCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NmI4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2YmMsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDZjMCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NmM0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2YzgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDZjYywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NmQwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2ZDQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDZkOCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NmRjLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2ZTAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDZlNCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NmU4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ2ZjAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDZmNCwgMHgwMDAwMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudmMwX2dyY3R4X2dlbmVyYXRlX3VuazQ3eHgoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwludl93cjMyKGRldiwgMHg0MDQ3MDAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDcwNCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NzA4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ3MGMsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDcxMCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NzE0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ3MTgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDcxYywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NzIwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ3MjQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDcyOCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NzJjLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ3MzAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDczNCwgMHgwMDAwMDEwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NzM4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ3M2MsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDc0MCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NzQ0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ3NDgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNDc0YywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0NzUwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDQ3NTQsIDB4MDAwMDAwMDApOworfQorCitzdGF0aWMgdm9pZAorbnZjMF9ncmN0eF9nZW5lcmF0ZV9zaGFkZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJbnZfd3IzMihkZXYsIDB4NDA1ODAwLCAweDA3ODAwMGJmKTsKKwludl93cjMyKGRldiwgMHg0MDU4MzAsIDB4MDIxODAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNTgzNCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA1ODM4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDU4NTQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNTg3MCwgMHgwMDAwMDAwMSk7CisJbnZfd3IzMihkZXYsIDB4NDA1ODc0LCAweDAwMDAwMDAxKTsKKwludl93cjMyKGRldiwgMHg0MDU4NzgsIDB4MDAwMDAwMDEpOworCW52X3dyMzIoZGV2LCAweDQwNTg3YywgMHgwMDAwMDAwMSk7CisJbnZfd3IzMihkZXYsIDB4NDA1YTAwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDVhMDQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNWExOCwgMHgwMDAwMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudmMwX2dyY3R4X2dlbmVyYXRlX3VuazYweHgoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwludl93cjMyKGRldiwgMHg0MDYwMjAsIDB4MDAwMTAzYzEpOworCW52X3dyMzIoZGV2LCAweDQwNjAyOCwgMHgwMDAwMDAwMSk7CisJbnZfd3IzMihkZXYsIDB4NDA2MDJjLCAweDAwMDAwMDAxKTsKKwludl93cjMyKGRldiwgMHg0MDYwMzAsIDB4MDAwMDAwMDEpOworCW52X3dyMzIoZGV2LCAweDQwNjAzNCwgMHgwMDAwMDAwMSk7Cit9CisKK3N0YXRpYyB2b2lkCitudmMwX2dyY3R4X2dlbmVyYXRlX3VuazY0eHgoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwludl93cjMyKGRldiwgMHg0MDY0YTgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNjRhYywgMHgwMDAwM2ZmZik7CisJbnZfd3IzMihkZXYsIDB4NDA2NGI0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDY0YjgsIDB4MDAwMDAwMDApOworfQorCitzdGF0aWMgdm9pZAorbnZjMF9ncmN0eF9nZW5lcmF0ZV90cGJ1cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCW52X3dyMzIoZGV2LCAweDQwNzgwNCwgMHgwMDAwMDAyMyk7CisJbnZfd3IzMihkZXYsIDB4NDA3ODBjLCAweDBhNDE4ODIwKTsKKwludl93cjMyKGRldiwgMHg0MDc4MTAsIDB4MDYyMDgwZTYpOworCW52X3dyMzIoZGV2LCAweDQwNzgxNCwgMHgwMjAzOThhNCk7CisJbnZfd3IzMihkZXYsIDB4NDA3ODE4LCAweDBlNjI5MDYyKTsKKwludl93cjMyKGRldiwgMHg0MDc4MWMsIDB4MGE0MTg4MjApOworCW52X3dyMzIoZGV2LCAweDQwNzgyMCwgMHgwMDAwMDBlNik7CisJbnZfd3IzMihkZXYsIDB4NDA3OGJjLCAweDAwMDAwMTAzKTsKK30KKworc3RhdGljIHZvaWQKK252YzBfZ3JjdHhfZ2VuZXJhdGVfY2NhY2hlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJbnZfd3IzMihkZXYsIDB4NDA4MDAwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDgwMDQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwODAwOCwgMHgwMDAwMDAxOCk7CisJbnZfd3IzMihkZXYsIDB4NDA4MDBjLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDgwMTAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwODAxNCwgMHgwMDAwMDA2OSk7CisJbnZfd3IzMihkZXYsIDB4NDA4MDE4LCAweGUxMDBlMTAwKTsKKwludl93cjMyKGRldiwgMHg0MDgwNjQsIDB4MDAwMDAwMDApOworfQorCitzdGF0aWMgdm9pZAorbnZjMF9ncmN0eF9nZW5lcmF0ZV9yb3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJLy8gUk9QQ19CUk9BRENBU1QKKwludl93cjMyKGRldiwgMHg0MDg4MDAsIDB4MDI4MDJhM2MpOworCW52X3dyMzIoZGV2LCAweDQwODgwNCwgMHgwMDAwMDA0MCk7CisJbnZfd3IzMihkZXYsIDB4NDA4ODA4LCAweDAwMDNlMDBkKTsKKwlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJY2FzZSAweGMwOgorCQludl93cjMyKGRldiwgMHg0MDg5MDAsIDB4MDA4MGI4MDEpOworCQlicmVhazsKKwljYXNlIDB4YzM6CisJY2FzZSAweGM0OgorCQludl93cjMyKGRldiwgMHg0MDg5MDAsIDB4MzA4MGI4MDEpOworCQlicmVhazsKKwl9CisJbnZfd3IzMihkZXYsIDB4NDA4OTA0LCAweDAyMDAwMDAxKTsKKwludl93cjMyKGRldiwgMHg0MDg5MDgsIDB4MDBjODA5MjkpOworCW52X3dyMzIoZGV2LCAweDQwODkwYywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA4OTgwLCAweDAwMDAwMTFkKTsKK30KKworc3RhdGljIHZvaWQKK252YzBfZ3JjdHhfZ2VuZXJhdGVfZ3BjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisKKwkvLyBHUENfQlJPQURDQVNUCisJbnZfd3IzMihkZXYsIDB4NDE4MzgwLCAweDAwMDAwMDE2KTsKKwludl93cjMyKGRldiwgMHg0MTg0MDAsIDB4MzgwMDRlMDApOworCW52X3dyMzIoZGV2LCAweDQxODQwNCwgMHg3MWUwZmZmZik7CisJbnZfd3IzMihkZXYsIDB4NDE4NDA4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTg0MGMsIDB4MDAwMDEwMDgpOworCW52X3dyMzIoZGV2LCAweDQxODQxMCwgMHgwZmZmMGZmZik7CisJbnZfd3IzMihkZXYsIDB4NDE4NDE0LCAweDAwMjAwZmZmKTsKKwludl93cjMyKGRldiwgMHg0MTg0NTAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxODQ1NCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE4NDU4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTg0NWMsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxODQ2MCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE4NDY0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTg0NjgsIDB4MDAwMDAwMDEpOworCW52X3dyMzIoZGV2LCAweDQxODQ2YywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE4NDcwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTg2MDAsIDB4MDAwMDAwMWYpOworCW52X3dyMzIoZGV2LCAweDQxODY4NCwgMHgwMDAwMDAwZik7CisJbnZfd3IzMihkZXYsIDB4NDE4NzAwLCAweDAwMDAwMDAyKTsKKwludl93cjMyKGRldiwgMHg0MTg3MDQsIDB4MDAwMDAwODApOworCW52X3dyMzIoZGV2LCAweDQxODcwOCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE4NzBjLCAweDA3YzgwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTg3MTAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxODgwMCwgMHgwMDA2ODYwYSk7CisJbnZfd3IzMihkZXYsIDB4NDE4ODA4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTg4MGMsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxODgxMCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE4ODI4LCAweDAwMDA4NDQyKTsKKwludl93cjMyKGRldiwgMHg0MTg4MzAsIDB4MDAwMDAwMDEpOworCW52X3dyMzIoZGV2LCAweDQxODhkOCwgMHgwMDAwMDAwOCk7CisJbnZfd3IzMihkZXYsIDB4NDE4OGUwLCAweDAxMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTg4ZTgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxODhlYywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE4OGYwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTg4ZjQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxODhmOCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE4OGZjLCAweDAwMTAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTg5MWMsIDB4MDBmZjAwZmYpOworCW52X3dyMzIoZGV2LCAweDQxODkyNCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE4OTI4LCAweDAwZmZmZjAwKTsKKwludl93cjMyKGRldiwgMHg0MTg5MmMsIDB4MDAwMGZmMDApOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJbnZfd3IzMihkZXYsIDB4NDE4YTAwICsgKGkgKiAweDIwKSwgMHgwMDAwMDAwMCk7CisJCW52X3dyMzIoZGV2LCAweDQxOGEwNCArIChpICogMHgyMCksIDB4MDAwMDAwMDApOworCQludl93cjMyKGRldiwgMHg0MThhMDggKyAoaSAqIDB4MjApLCAweDAwMDAwMDAwKTsKKwkJbnZfd3IzMihkZXYsIDB4NDE4YTBjICsgKGkgKiAweDIwKSwgMHgwMDAxMDAwMCk7CisJCW52X3dyMzIoZGV2LCAweDQxOGExMCArIChpICogMHgyMCksIDB4MDAwMDAwMDApOworCQludl93cjMyKGRldiwgMHg0MThhMTQgKyAoaSAqIDB4MjApLCAweDAwMDAwMDAwKTsKKwkJbnZfd3IzMihkZXYsIDB4NDE4YTE4ICsgKGkgKiAweDIwKSwgMHgwMDAwMDAwMCk7CisJfQorCW52X3dyMzIoZGV2LCAweDQxOGIwMCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE4YjA4LCAweDBhNDE4ODIwKTsKKwludl93cjMyKGRldiwgMHg0MThiMGMsIDB4MDYyMDgwZTYpOworCW52X3dyMzIoZGV2LCAweDQxOGIxMCwgMHgwMjAzOThhNCk7CisJbnZfd3IzMihkZXYsIDB4NDE4YjE0LCAweDBlNjI5MDYyKTsKKwludl93cjMyKGRldiwgMHg0MThiMTgsIDB4MGE0MTg4MjApOworCW52X3dyMzIoZGV2LCAweDQxOGIxYywgMHgwMDAwMDBlNik7CisJbnZfd3IzMihkZXYsIDB4NDE4YmI4LCAweDAwMDAwMTAzKTsKKwludl93cjMyKGRldiwgMHg0MThjMDgsIDB4MDAwMDAwMDEpOworCW52X3dyMzIoZGV2LCAweDQxOGMxMCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE4YzE0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MThjMTgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOGMxYywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE4YzIwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MThjMjQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOGMyOCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE4YzJjLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MThjODAsIDB4MjAyMDAwMDQpOworCW52X3dyMzIoZGV2LCAweDQxOGM4YywgMHgwMDAwMDAwMSk7CisJbnZfd3IzMihkZXYsIDB4NDE5MDAwLCAweDAwMDAwNzgwKTsKKwludl93cjMyKGRldiwgMHg0MTkwMDQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOTAwOCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE5MDE0LCAweDAwMDAwMDA0KTsKK30KKworc3RhdGljIHZvaWQKK252YzBfZ3JjdHhfZ2VuZXJhdGVfdHAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJLy8gR1BDX0JST0FEQ0FTVC5UUF9CUk9BRENBU1QKKwludl93cjMyKGRldiwgMHg0MTk4NDgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOTg2NCwgMHgwMDAwMDEyYSk7CisJbnZfd3IzMihkZXYsIDB4NDE5ODg4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTlhMDAsIDB4MDAwMDAxZjApOworCW52X3dyMzIoZGV2LCAweDQxOWEwNCwgMHgwMDAwMDAwMSk7CisJbnZfd3IzMihkZXYsIDB4NDE5YTA4LCAweDAwMDAwMDIzKTsKKwludl93cjMyKGRldiwgMHg0MTlhMGMsIDB4MDAwMjAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOWExMCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE5YTE0LCAweDAwMDAwMjAwKTsKKwludl93cjMyKGRldiwgMHg0MTlhMWMsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOWEyMCwgMHgwMDAwMDgwMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4YzApCisJCW52X3dyMzIoZGV2LCAweDAwNDE5YWM0LCAweDAwMDdmNDQwKTsgLy8gMHhjMworCW52X3dyMzIoZGV2LCAweDQxOWIwMCwgMHgwYTQxODgyMCk7CisJbnZfd3IzMihkZXYsIDB4NDE5YjA0LCAweDA2MjA4MGU2KTsKKwludl93cjMyKGRldiwgMHg0MTliMDgsIDB4MDIwMzk4YTQpOworCW52X3dyMzIoZGV2LCAweDQxOWIwYywgMHgwZTYyOTA2Mik7CisJbnZfd3IzMihkZXYsIDB4NDE5YjEwLCAweDBhNDE4ODIwKTsKKwludl93cjMyKGRldiwgMHg0MTliMTQsIDB4MDAwMDAwZTYpOworCW52X3dyMzIoZGV2LCAweDQxOWJkMCwgMHgwMDkwMDEwMyk7CisJbnZfd3IzMihkZXYsIDB4NDE5YmUwLCAweDAwMDAwMDAxKTsKKwludl93cjMyKGRldiwgMHg0MTliZTQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOWMwMCwgMHgwMDAwMDAwMik7CisJbnZfd3IzMihkZXYsIDB4NDE5YzA0LCAweDAwMDAwMDA2KTsKKwludl93cjMyKGRldiwgMHg0MTljMDgsIDB4MDAwMDAwMDIpOworCW52X3dyMzIoZGV2LCAweDQxOWMyMCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE5Y2JjLCAweDI4MTM3NjA2KTsKKwludl93cjMyKGRldiwgMHg0MTljZTgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOWNmNCwgMHgwMDAwMDE4Myk7CisJbnZfd3IzMihkZXYsIDB4NDE5ZDIwLCAweDAyMTgwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTlkMjQsIDB4MDAwMDFmZmYpOworCW52X3dyMzIoZGV2LCAweDQxOWUwNCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE5ZTA4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTllMGMsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOWUxMCwgMHgwMDAwMDAwMik7CisJbnZfd3IzMihkZXYsIDB4NDE5ZTQ0LCAweDAwMWJlZmYyKTsKKwludl93cjMyKGRldiwgMHg0MTllNDgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOWU0YywgMHgwMDAwMDAwZik7CisJbnZfd3IzMihkZXYsIDB4NDE5ZTUwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTllNTQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOWU1OCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE5ZTVjLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTllNjAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOWU2NCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE5ZTY4LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTllNmMsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOWU3MCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE5ZTc0LCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTllNzgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOWU3YywgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE5ZTgwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTllODQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOWU4OCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDE5ZThjLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTllOTAsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQxOWU5OCwgMHgwMDAwMDAwMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4YzApCisJCW52X3dyMzIoZGV2LCAweDQxOWVlMCwgMHgwMDAxMTExMCk7CisJbnZfd3IzMihkZXYsIDB4NDE5ZjUwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MTlmNTQsIDB4MDAwMDAwMDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweGMwKQorCQludl93cjMyKGRldiwgMHg0MTlmNTgsIDB4MDAwMDAwMDApOworfQorCitpbnQKK252YzBfZ3JjdHhfZ2VuZXJhdGUoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjaGFuLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBudmMwX2dyYXBoX3ByaXYgKnByaXYgPSBkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLnByaXY7CisJc3RydWN0IG52YzBfZ3JhcGhfY2hhbiAqZ3JjaCA9IGNoYW4tPnBncmFwaF9jdHg7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKKwlpbnQgaSwgZ3BjLCB0cCwgaWQ7CisJdTMyIHIwMDAyNjAsIHRtcDsKKworCXIwMDAyNjAgPSBudl9yZDMyKGRldiwgMHgwMDAyNjApOworCW52X3dyMzIoZGV2LCAweDAwMDI2MCwgcjAwMDI2MCAmIH4xKTsKKwludl93cjMyKGRldiwgMHg0MDAyMDgsIDB4MDAwMDAwMDApOworCisJbnZjMF9ncmN0eF9nZW5lcmF0ZV9kaXNwYXRjaChkZXYpOworCW52YzBfZ3JjdHhfZ2VuZXJhdGVfbWFjcm8oZGV2KTsKKwludmMwX2dyY3R4X2dlbmVyYXRlX20ybWYoZGV2KTsKKwludmMwX2dyY3R4X2dlbmVyYXRlX3VuazQ3eHgoZGV2KTsKKwludmMwX2dyY3R4X2dlbmVyYXRlX3NoYWRlcnMoZGV2KTsKKwludmMwX2dyY3R4X2dlbmVyYXRlX3VuazYweHgoZGV2KTsKKwludmMwX2dyY3R4X2dlbmVyYXRlX3VuazY0eHgoZGV2KTsKKwludmMwX2dyY3R4X2dlbmVyYXRlX3RwYnVzKGRldik7CisJbnZjMF9ncmN0eF9nZW5lcmF0ZV9jY2FjaGUoZGV2KTsKKwludmMwX2dyY3R4X2dlbmVyYXRlX3JvcChkZXYpOworCW52YzBfZ3JjdHhfZ2VuZXJhdGVfZ3BjKGRldik7CisJbnZjMF9ncmN0eF9nZW5lcmF0ZV90cChkZXYpOworCisJbnZfd3IzMihkZXYsIDB4NDA0MTU0LCAweDAwMDAwMDAwKTsKKworCS8qIGZ1YyAibW1pbyBsaXN0IiB3cml0ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ3JjaC0+bW1pb19uciAqIDg7IGkgKz0gOCkgeworCQl1MzIgcmVnID0gbnZfcm8zMihncmNoLT5tbWlvLCBpICsgMCk7CisJCW52X3dyMzIoZGV2LCByZWcsIG52X3JvMzIoZ3JjaC0+bW1pbywgaSArIDQpKTsKKwl9CisKKwlmb3IgKHRwID0gMCwgaWQgPSAwOyB0cCA8IDQ7IHRwKyspIHsKKwkJZm9yIChncGMgPSAwOyBncGMgPCBwcml2LT5ncGNfbnI7IGdwYysrKSB7CisJCQlpZiAodHAgPD0gcHJpdi0+dHBfbnJbZ3BjXSkgeworCQkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4Njk4KSwgaWQpOworCQkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4NGU4KSwgaWQpOworCQkJCW52X3dyMzIoZGV2LCBHUENfVU5JVChncGMsIDB4MGMxMCArIHRwICogNCksIGlkKTsKKwkJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDA4OCksIGlkKTsKKwkJCQlpZCsrOworCQkJfQorCisJCQludl93cjMyKGRldiwgR1BDX1VOSVQoZ3BjLCAweDBjMDgpLCBwcml2LT50cF9ucltncGNdKTsKKwkJCW52X3dyMzIoZGV2LCBHUENfVU5JVChncGMsIDB4MGM4YyksIHByaXYtPnRwX25yW2dwY10pOworCQl9CisJfQorCisJdG1wID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+Z3BjX25yOyBpKyspCisJCXRtcCB8PSBwcml2LT50cF9ucltpXSA8PCAoaSAqIDQpOworCW52X3dyMzIoZGV2LCAweDQwNjAyOCwgdG1wKTsKKwludl93cjMyKGRldiwgMHg0MDU4NzAsIHRtcCk7CisKKwludl93cjMyKGRldiwgMHg0MDYwMmMsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNTg3NCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA2MDMwLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgMHg0MDU4NzgsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDQwNjAzNCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA1ODdjLCAweDAwMDAwMDAwKTsKKworCWlmICgxKSB7CisJCWNvbnN0IHU4IGNoaXBzZXRfdHBfbWF4W10gPSB7IDE2LCAwLCAwLCA0LCA4IH07CisJCXU4IG1heCA9IGNoaXBzZXRfdHBfbWF4W2Rldl9wcml2LT5jaGlwc2V0ICYgMHgwZl07CisJCXU4IHRwbnJbR1BDX01BWF07CisJCXU4IGRhdGFbMzJdOworCisJCW1lbWNweSh0cG5yLCBwcml2LT50cF9uciwgc2l6ZW9mKHByaXYtPnRwX25yKSk7CisJCW1lbXNldChkYXRhLCAweDFmLCBzaXplb2YoZGF0YSkpOworCisJCWdwYyA9IC0xOworCQlmb3IgKHRwID0gMDsgdHAgPCBwcml2LT50cF90b3RhbDsgdHArKykgeworCQkJZG8geworCQkJCWdwYyA9IChncGMgKyAxKSAlIHByaXYtPmdwY19ucjsKKwkJCX0gd2hpbGUgKCF0cG5yW2dwY10pOworCQkJdHBucltncGNdLS07CisJCQlkYXRhW3RwXSA9IGdwYzsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBtYXggLyA0OyBpKyspCisJCQludl93cjMyKGRldiwgMHg0MDYwYTggKyAoaSAqIDQpLCAoKHUzMiAqKWRhdGEpW2ldKTsKKwl9CisKKwlpZiAoMSkgeworCQl1MzIgZGF0YVs2XSA9IHt9LCBkYXRhMlsyXSA9IHt9OworCQl1OCB0cG5yW0dQQ19NQVhdOworCQl1OCBzaGlmdCwgbnRwY3Y7CisKKwkJLyogY2FsY3VsYXRlIGZpcnN0IHNldCBvZiBtYWdpY3MgKi8KKwkJbWVtY3B5KHRwbnIsIHByaXYtPnRwX25yLCBzaXplb2YocHJpdi0+dHBfbnIpKTsKKworCQlmb3IgKHRwID0gMDsgdHAgPCBwcml2LT50cF90b3RhbDsgdHArKykgeworCQkJZG8geworCQkJCWdwYyA9IChncGMgKyAxKSAlIHByaXYtPmdwY19ucjsKKwkJCX0gd2hpbGUgKCF0cG5yW2dwY10pOworCQkJdHBucltncGNdLS07CisKKwkJCWRhdGFbdHAgLyA2XSB8PSBncGMgPDwgKCh0cCAlIDYpICogNSk7CisJCX0KKworCQlmb3IgKDsgdHAgPCAzMjsgdHArKykKKwkJCWRhdGFbdHAgLyA2XSB8PSA3IDw8ICgodHAgJSA2KSAqIDUpOworCisJCS8qIGFuZCB0aGUgc2Vjb25kLi4uICovCisJCXNoaWZ0ID0gMDsKKwkJbnRwY3YgPSBwcml2LT50cF90b3RhbDsKKwkJd2hpbGUgKCEobnRwY3YgJiAoMSA8PCA0KSkpIHsKKwkJCW50cGN2IDw8PSAxOworCQkJc2hpZnQrKzsKKwkJfQorCisJCWRhdGEyWzBdICA9IChudHBjdiA8PCAxNik7CisJCWRhdGEyWzBdIHw9IChzaGlmdCA8PCAyMSk7CisJCWRhdGEyWzBdIHw9ICgoKDEgPDwgKDAgKyA1KSkgJSBudHBjdikgPDwgMjQpOworCQlmb3IgKGkgPSAxOyBpIDwgNzsgaSsrKQorCQkJZGF0YTJbMV0gfD0gKCgxIDw8IChpICsgNSkpICUgbnRwY3YpIDw8ICgoaSAtIDEpICogNSk7CisKKwkJLy8gR1BDX0JST0FEQ0FTVAorCQludl93cjMyKGRldiwgMHg0MThiYjgsIChwcml2LT50cF90b3RhbCA8PCA4KSB8CisJCQkJCXByaXYtPm1hZ2ljX25vdF9yb3BfbnIpOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJbnZfd3IzMihkZXYsIDB4NDE4YjA4ICsgKGkgKiA0KSwgZGF0YVtpXSk7CisKKwkJLy8gR1BDX0JST0FEQ0FTVC5UUF9CUk9BRENBU1QKKwkJbnZfd3IzMihkZXYsIDB4NDE5YmQwLCAocHJpdi0+dHBfdG90YWwgPDwgOCkgfAorCQkJCSAgICAgICBwcml2LT5tYWdpY19ub3Rfcm9wX25yIHwKKwkJCQkgICAgICAgZGF0YTJbMF0pOworCQludl93cjMyKGRldiwgMHg0MTliZTQsIGRhdGEyWzFdKTsKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCW52X3dyMzIoZGV2LCAweDQxOWIwMCArIChpICogNCksIGRhdGFbaV0pOworCisJCS8vIFVOSzc4eHgKKwkJbnZfd3IzMihkZXYsIDB4NDA3OGJjLCAocHJpdi0+dHBfdG90YWwgPDwgOCkgfAorCQkJCQlwcml2LT5tYWdpY19ub3Rfcm9wX25yKTsKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCW52X3dyMzIoZGV2LCAweDQwNzgwYyArIChpICogNCksIGRhdGFbaV0pOworCX0KKworCWlmICgxKSB7CisJCXUzMiB0cF9tYXNrID0gMCwgdHBfc2V0ID0gMDsKKwkJdTggIHRwbnJbR1BDX01BWF07CisKKwkJbWVtY3B5KHRwbnIsIHByaXYtPnRwX25yLCBzaXplb2YocHJpdi0+dHBfbnIpKTsKKwkJZm9yIChncGMgPSAwOyBncGMgPCBwcml2LT5ncGNfbnI7IGdwYysrKQorCQkJdHBfbWFzayB8PSAoKDEgPDwgcHJpdi0+dHBfbnJbZ3BjXSkgLSAxKSA8PCAoZ3BjICogOCk7CisKKwkJZ3BjID0gLTE7CisJCWZvciAoaSA9IDAsIGdwYyA9IC0xOyBpIDwgMzI7IGkrKykgeworCQkJaW50IGx0cCA9IGkgKiAocHJpdi0+dHBfdG90YWwgLSAxKSAvIDMyOworCQkJCisJCQlkbyB7CisJCQkJZ3BjID0gKGdwYyArIDEpICUgcHJpdi0+Z3BjX25yOworCQkJfSB3aGlsZSAoIXRwbnJbZ3BjXSk7CisJCQl0cCA9IHByaXYtPnRwX25yW2dwY10gLSB0cG5yW2dwY10tLTsKKworCQkJdHBfc2V0IHw9IDEgPDwgKChncGMgKiA4KSArIHRwKTsKKworCQkJZG8geworCQkJCW52X3dyMzIoZGV2LCAweDQwNjgwMCArIChpICogMHgyMCksIHRwX3NldCk7CisJCQkJdHBfc2V0IF49IHRwX21hc2s7CisJCQkJbnZfd3IzMihkZXYsIDB4NDA2YzAwICsgKGkgKiAweDIwKSwgdHBfc2V0KTsKKwkJCQl0cF9zZXQgXj0gdHBfbWFzazsKKwkJCX0gd2hpbGUgKGx0cCA9PSAoKytpICogKHByaXYtPnRwX3RvdGFsIC0gMSkgLyAzMikpOworCQkJaS0tOworCQl9CisJfQorCisJbnZfd3IzMihkZXYsIDB4NDAwMjA4LCAweDgwMDAwMDAwKTsKKworCW52X2ljbWQoZGV2LCAweDAwMDAxMDAwLCAweDAwMDAwMDA0KTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBhOSwgMHgwMDAwZmZmZik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwMzgsIDB4MGZhYzY4ODEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMDNkLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBlOCwgMHgwMDAwMDQwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwZTksIDB4MDAwMDA0MDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGVhLCAweDAwMDAwNDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBlYiwgMHgwMDAwMDQwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwZWMsIDB4MDAwMDA0MDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGVkLCAweDAwMDAwNDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBlZSwgMHgwMDAwMDQwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwZWYsIDB4MDAwMDA0MDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMDc4LCAweDAwMDAwMzAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDA3OSwgMHgwMDAwMDMwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwN2EsIDB4MDAwMDAzMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMDdiLCAweDAwMDAwMzAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDA3YywgMHgwMDAwMDMwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwN2QsIDB4MDAwMDAzMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMDdlLCAweDAwMDAwMzAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDA3ZiwgMHgwMDAwMDMwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwNTAsIDB4MDAwMDAwMTEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMDU4LCAweDAwMDAwMDA4KTsKKwludl9pY21kKGRldiwgMHgwMDAwMDA1OSwgMHgwMDAwMDAwOCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwNWEsIDB4MDAwMDAwMDgpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMDViLCAweDAwMDAwMDA4KTsKKwludl9pY21kKGRldiwgMHgwMDAwMDA1YywgMHgwMDAwMDAwOCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwNWQsIDB4MDAwMDAwMDgpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMDVlLCAweDAwMDAwMDA4KTsKKwludl9pY21kKGRldiwgMHgwMDAwMDA1ZiwgMHgwMDAwMDAwOCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyMDgsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMjA5LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDIwYSwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyMGIsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMjBjLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDIwZCwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyMGUsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMjBmLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDA4MSwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwODUsIDB4MDAwMDAwMDQpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMDg4LCAweDAwMDAwNDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDA5MCwgMHgwMDAwMDMwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwOTgsIDB4MDAwMDEwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGUzLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBkYSwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwZjgsIDB4MDAwMDAwMDMpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGZhLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDA5ZiwgMHgwMDAwZmZmZik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwYTAsIDB4MDAwMGZmZmYpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGExLCAweDAwMDBmZmZmKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBhMiwgMHgwMDAwZmZmZik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwYjEsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGIyLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBiMywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwYjQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGI1LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBiNiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwYjcsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGI4LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBiOSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwYmEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGJiLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBiYywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwYmQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGJlLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBiZiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwYzAsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGMxLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBjMiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwYzMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGM0LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBjNSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwYzYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGM3LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBjOCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwYzksIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGNhLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBjYiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwY2MsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGNkLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBjZSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwY2YsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGQwLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBkMSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwZDIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGQzLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBkNCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwZDUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGQ2LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDBkNywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwZDgsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGQ5LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDIxMCwgMHgwMDAwMDA0MCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyMTEsIDB4MDAwMDAwNDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMjEyLCAweDAwMDAwMDQwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDIxMywgMHgwMDAwMDA0MCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyMTQsIDB4MDAwMDAwNDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMjE1LCAweDAwMDAwMDQwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDIxNiwgMHgwMDAwMDA0MCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyMTcsIDB4MDAwMDAwNDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMjE4LCAweDAwMDBjMDgwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDIxOSwgMHgwMDAwYzA4MCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyMWEsIDB4MDAwMGMwODApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMjFiLCAweDAwMDBjMDgwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDIxYywgMHgwMDAwYzA4MCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyMWQsIDB4MDAwMGMwODApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMjFlLCAweDAwMDBjMDgwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDIxZiwgMHgwMDAwYzA4MCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAwYWQsIDB4MDAwMDAxM2UpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMGUxLCAweDAwMDAwMDEwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDI5MCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyOTEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMjkyLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDI5MywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyOTQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMjk1LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDI5NiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyOTcsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMjk4LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDI5OSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyOWEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMjliLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDI5YywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyOWQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMjllLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDI5ZiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAzYjAsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwM2IxLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDNiMiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAzYjMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwM2I0LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDNiNSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAzYjYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwM2I3LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDNiOCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAzYjksIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwM2JhLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDNiYiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAzYmMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwM2JkLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDNiZSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAzYmYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmEwLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJhMSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyYTIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmEzLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJhNCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyYTUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmE2LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJhNywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyYTgsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmE5LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJhYSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyYWIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmFjLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJhZCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyYWUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmFmLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQyMCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0MjEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDIyLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQyMywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0MjQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDI1LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQyNiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0MjcsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDI4LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQyOSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0MmEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDJiLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQyYywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0MmQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDJlLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQyZiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyYjAsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmIxLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJiMiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyYjMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmI0LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJiNSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyYjYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmI3LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJiOCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyYjksIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmJhLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJiYiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyYmMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmJkLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJiZSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyYmYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDMwLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQzMSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0MzIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDMzLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQzNCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0MzUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDM2LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQzNywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0MzgsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDM5LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQzYSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0M2IsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDNjLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQzZCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0M2UsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDNmLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJjMCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyYzEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmMyLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJjMywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyYzQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmM1LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJjNiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyYzcsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmM4LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJjOSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyY2EsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmNiLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJjYywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyY2QsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmNlLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDJjZiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0ZDAsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGQxLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRkMiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0ZDMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGQ0LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRkNSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0ZDYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGQ3LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRkOCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0ZDksIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGRhLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRkYiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0ZGMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGRkLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRkZSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0ZGYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNzIwLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDcyMSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3MjIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNzIzLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDcyNCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3MjUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNzI2LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDcyNywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3MjgsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNzI5LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDcyYSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3MmIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNzJjLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDcyZCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3MmUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNzJmLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhjMCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4YzEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGMyLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhjMywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4YzQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGM1LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhjNiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4YzcsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGM4LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhjOSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4Y2EsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGNiLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhjYywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4Y2QsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGNlLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhjZiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4OTAsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODkxLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDg5MiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4OTMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODk0LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDg5NSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4OTYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODk3LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDg5OCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4OTksIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODlhLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDg5YiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4OWMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODlkLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDg5ZSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4OWYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGUwLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhlMSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4ZTIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGUzLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhlNCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4ZTUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGU2LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhlNywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4ZTgsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGU5LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhlYSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4ZWIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGVjLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhlZCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4ZWUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGVmLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhhMCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4YTEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGEyLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhhMywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4YTQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGE1LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhhNiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4YTcsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGE4LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhhOSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4YWEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGFiLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhhYywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4YWQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGFlLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhhZiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4ZjAsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGYxLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhmMiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4ZjMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGY0LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhmNSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4ZjYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGY3LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhmOCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4ZjksIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGZhLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhmYiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4ZmMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGZkLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhmZSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4ZmYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTRjLCAweDAwMDAwMGZmKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk0ZCwgMHhmZmZmZmZmZik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5NGUsIDB4MDAwMDAwMDIpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMmVjLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDMwMywgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAyZTYsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDY2LCAweDAwMDAwMDUyKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDMwMSwgMHgzZjgwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAzMDQsIDB4MzAyMDEwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMzA1LCAweDcwNjA1MDQwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDMwNiwgMHhiOGE4OTg4OCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAzMDcsIDB4ZjhlOGQ4YzgpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMzBhLCAweDAwZmZmZjAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDMwYiwgMHgwMDAwMDAxYSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAzMGMsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMzE4LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDM0MCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAzNzUsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMzUxLCAweDAwMDAwMTAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDM3ZCwgMHgwMDAwMDAwNik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAzYTAsIDB4MDAwMDAwMDIpOworCW52X2ljbWQoZGV2LCAweDAwMDAwM2FhLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDNhOSwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAzODAsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwMzYwLCAweDAwMDAwMDQwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDM2NiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAzNjcsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMzY4LCAweDAwMDAxZmZmKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDM3MCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDAzNzEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwMzcyLCAweDAwM2ZmZmZmKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDM3YSwgMHgwMDAwMDAxMik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1ZTAsIDB4MDAwMDAwMjIpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNWUxLCAweDAwMDAwMDIyKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDVlMiwgMHgwMDAwMDAyMik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1ZTMsIDB4MDAwMDAwMjIpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNWU0LCAweDAwMDAwMDIyKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDYxOSwgMHgwMDAwMDAwMyk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MTEsIDB4MDAwMDAwMDMpOworCW52X2ljbWQoZGV2LCAweDAwMDAwODEyLCAweDAwMDAwMDA0KTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgxMywgMHgwMDAwMDAwNik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MTQsIDB4MDAwMDAwMDgpOworCW52X2ljbWQoZGV2LCAweDAwMDAwODE1LCAweDAwMDAwMDBiKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgwMCwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MDEsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwODAyLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgwMywgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MDQsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwODA1LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDYzMiwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA2MzMsIDB4MDAwMDAwMDIpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNjM0LCAweDAwMDAwMDAzKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDYzNSwgMHgwMDAwMDAwNCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA2NTQsIDB4M2Y4MDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNjU3LCAweDNmODAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDY1NSwgMHgzZjgwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA2NTYsIDB4M2Y4MDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNmNkLCAweDNmODAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDdmNSwgMHgzZjgwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3ZGMsIDB4MzkyOTE5MDkpOworCW52X2ljbWQoZGV2LCAweDAwMDAwN2RkLCAweDc5Njk1OTQ5KTsKKwludl9pY21kKGRldiwgMHgwMDAwMDdkZSwgMHhiOWE5OTk4OSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3ZGYsIDB4ZjllOWQ5YzkpOworCW52X2ljbWQoZGV2LCAweDAwMDAwN2U4LCAweDAwMDAzMjEwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDdlOSwgMHgwMDAwNzY1NCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3ZWEsIDB4MDAwMDAwOTgpOworCW52X2ljbWQoZGV2LCAweDAwMDAwN2VjLCAweDM5MjkxOTA5KTsKKwludl9pY21kKGRldiwgMHgwMDAwMDdlZCwgMHg3OTY5NTk0OSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3ZWUsIDB4YjlhOTk5ODkpOworCW52X2ljbWQoZGV2LCAweDAwMDAwN2VmLCAweGY5ZTlkOWM5KTsKKwludl9pY21kKGRldiwgMHgwMDAwMDdmMCwgMHgwMDAwMzIxMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3ZjEsIDB4MDAwMDc2NTQpOworCW52X2ljbWQoZGV2LCAweDAwMDAwN2YyLCAweDAwMDAwMDk4KTsKKwludl9pY21kKGRldiwgMHgwMDAwMDVhNSwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ODAsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTgxLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk4MiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ODMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTg0LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk4NSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ODYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTg3LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk4OCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ODksIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOThhLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk4YiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5OGMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOThkLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk4ZSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5OGYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTkwLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk5MSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5OTIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTkzLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk5NCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5OTUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTk2LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk5NywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5OTgsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTk5LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk5YSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5OWIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTljLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk5ZCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5OWUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTlmLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlhMCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5YTEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWEyLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlhMywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5YTQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWE1LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlhNiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5YTcsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWE4LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlhOSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5YWEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWFiLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlhYywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5YWQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWFlLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlhZiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5YjAsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWIxLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDliMiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5YjMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWI0LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDliNSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5YjYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWI3LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDliOCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5YjksIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWJhLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDliYiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5YmMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWJkLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDliZSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5YmYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWMwLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDljMSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5YzIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWMzLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDljNCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5YzUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWM2LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDljNywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5YzgsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWM5LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDljYSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5Y2IsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWNjLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDljZCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5Y2UsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWNmLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlkMCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZDEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWQyLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlkMywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZDQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWQ1LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlkNiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZDcsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWQ4LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlkOSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZGEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWRiLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlkYywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZGQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWRlLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlkZiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZTAsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWUxLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDllMiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZTMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWU0LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDllNSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZTYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWU3LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDllOCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZTksIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWVhLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDllYiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZWMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWVkLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDllZSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZWYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWYwLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlmMSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZjIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWYzLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlmNCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZjUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWY2LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlmNywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZjgsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWY5LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlmYSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZmIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWZjLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDlmZCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5ZmUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOWZmLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ2OCwgMHgwMDAwMDAwNCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0NmMsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDcwLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ3MSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0NzIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDczLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ3NCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0NzUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDc2LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ3NywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0NzgsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDc5LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ3YSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0N2IsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDdjLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ3ZCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0N2UsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDdmLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ4MCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0ODEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDgyLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ4MywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0ODQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDg1LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ4NiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0ODcsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDg4LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ4OSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0OGEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDhiLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ4YywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0OGQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDhlLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ4ZiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0OTAsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDkxLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ5MiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0OTMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDk0LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ5NSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0OTYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDk3LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ5OCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0OTksIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDlhLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ5YiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0OWMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNDlkLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDQ5ZSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0OWYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGEwLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRhMSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0YTIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGEzLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRhNCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0YTUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGE2LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRhNywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0YTgsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGE5LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRhYSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0YWIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGFjLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRhZCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0YWUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGFmLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRiMCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0YjEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGIyLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRiMywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0YjQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGI1LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRiNiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0YjcsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGI4LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRiOSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0YmEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGJiLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRiYywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0YmQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGJlLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRiZiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0YzAsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGMxLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRjMiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0YzMsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGM0LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRjNSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0YzYsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGM3LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRjOCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0YzksIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGNhLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRjYiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0Y2MsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNGNkLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDRjZSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA0Y2YsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNTEwLCAweDNmODAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDUxMSwgMHgzZjgwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1MTIsIDB4M2Y4MDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNTEzLCAweDNmODAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDUxNCwgMHgzZjgwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1MTUsIDB4M2Y4MDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNTE2LCAweDNmODAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDUxNywgMHgzZjgwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1MTgsIDB4M2Y4MDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNTE5LCAweDNmODAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDUxYSwgMHgzZjgwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1MWIsIDB4M2Y4MDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNTFjLCAweDNmODAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDUxZCwgMHgzZjgwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1MWUsIDB4M2Y4MDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNTFmLCAweDNmODAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDUyMCwgMHgwMDAwMDJiNik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1MjksIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNTMwLCAweGZmZmYwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDUzMSwgMHhmZmZmMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1MzIsIDB4ZmZmZjAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNTMzLCAweGZmZmYwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDUzNCwgMHhmZmZmMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1MzUsIDB4ZmZmZjAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNTM2LCAweGZmZmYwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDUzNywgMHhmZmZmMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1MzgsIDB4ZmZmZjAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNTM5LCAweGZmZmYwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDUzYSwgMHhmZmZmMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1M2IsIDB4ZmZmZjAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNTNjLCAweGZmZmYwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDUzZCwgMHhmZmZmMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1M2UsIDB4ZmZmZjAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNTNmLCAweGZmZmYwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDU4NSwgMHgwMDAwMDAzZik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1NzYsIDB4MDAwMDAwMDMpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNTg2LCAweDAwMDAwMDQwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDU4MiwgMHgwMDAwMDA4MCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA1ODMsIDB4MDAwMDAwODApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNWMyLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDYzOCwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA2MzksIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNjNhLCAweDAwMDAwMDAyKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDYzYiwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA2M2MsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNjNkLCAweDAwMDAwMDAyKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDYzZSwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4YjgsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGI5LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhiYSwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4YmIsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGJjLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDhiZCwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4YmUsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOGJmLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkwMCwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MDEsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTAyLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkwMywgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MDQsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTA1LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkwNiwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MDcsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTA4LCAweDAwMDAwMDAyKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkwOSwgMHgwMDAwMDAwMik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MGEsIDB4MDAwMDAwMDIpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTBiLCAweDAwMDAwMDAyKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkwYywgMHgwMDAwMDAwMik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MGQsIDB4MDAwMDAwMDIpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTBlLCAweDAwMDAwMDAyKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkwZiwgMHgwMDAwMDAwMik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MTAsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTExLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkxMiwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MTMsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTE0LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkxNSwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MTYsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTE3LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkxOCwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MTksIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTFhLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkxYiwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MWMsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTFkLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkxZSwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MWYsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTIwLCAweDAwMDAwMDAyKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkyMSwgMHgwMDAwMDAwMik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MjIsIDB4MDAwMDAwMDIpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTIzLCAweDAwMDAwMDAyKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkyNCwgMHgwMDAwMDAwMik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MjUsIDB4MDAwMDAwMDIpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTI2LCAweDAwMDAwMDAyKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkyNywgMHgwMDAwMDAwMik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MjgsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTI5LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkyYSwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MmIsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTJjLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDkyZCwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5MmUsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTJmLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDY0OCwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA2NDksIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNjRhLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDY0YiwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA2NGMsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNjRkLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDY0ZSwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA2NGYsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNjUwLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDY1OCwgMHgwMDAwMDAwZik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3ZmYsIDB4MDAwMDAwMGEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNjZhLCAweDQwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDY2YiwgMHgxMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA2NmMsIDB4ZmZmZjAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNjZkLCAweGZmZmYwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDdhZiwgMHgwMDAwMDAwOCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3YjAsIDB4MDAwMDAwMDgpOworCW52X2ljbWQoZGV2LCAweDAwMDAwN2Y2LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDZiMiwgMHgwMDAwMDA1NSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3YWQsIDB4MDAwMDAwMDMpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTM3LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk3MSwgMHgwMDAwMDAwOCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5NzIsIDB4MDAwMDAwNDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTczLCAweDAwMDAwMTJjKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk3YywgMHgwMDAwMDA0MCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5NzksIDB4MDAwMDAwMDMpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTc1LCAweDAwMDAwMDIwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk3NiwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5NzcsIDB4MDAwMDAwMjApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTc4LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk1NywgMHgwMDAwMDAwMyk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5NWUsIDB4MjAxNjQwMTApOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTVmLCAweDAwMDAwMDIwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDY4MywgMHgwMDAwMDAwNik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA2ODUsIDB4MDAzZmZmZmYpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNjg3LCAweDAwMDAwYzQ4KTsKKwludl9pY21kKGRldiwgMHgwMDAwMDZhMCwgMHgwMDAwMDAwNSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4NDAsIDB4MDAzMDAwMDgpOworCW52X2ljbWQoZGV2LCAweDAwMDAwODQxLCAweDA0MDAwMDgwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDg0MiwgMHgwMDMwMDAwOCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4NDMsIDB4MDQwMDAwODApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODE4LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgxOSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MWEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODFiLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgxYywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MWQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODFlLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgxZiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4NDgsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODQ5LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDg0YSwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4NGIsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODRjLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDg0ZCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4NGUsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODRmLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDg1MCwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4NTEsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODUyLCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDg1MywgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4NTQsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODU1LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDg1NiwgMHgwMDAwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4NTcsIDB4MDAwMDAwMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNzM4LCAweDAwMDAwMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDZhYSwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA2YWIsIDB4MDAwMDAwMDIpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNmFjLCAweDAwMDAwMDgwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDZhZCwgMHgwMDAwMDEwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA2YWUsIDB4MDAwMDAxMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNmIxLCAweDAwMDAwMDExKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDZiYiwgMHgwMDAwMDBjZik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA2Y2UsIDB4MmE3MTI0ODgpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNzM5LCAweDQwODVjMDAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDczYSwgMHgwMDAwMDA4MCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3ODYsIDB4ODAwMDAxMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNzNjLCAweDAwMDEwMTAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDczZCwgMHgwMjgwMDAwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3ODcsIDB4MDAwMDAwY2YpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNzhjLCAweDAwMDAwMDA4KTsKKwludl9pY21kKGRldiwgMHgwMDAwMDc5MiwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3OTQsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNzk1LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDc5NiwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3OTcsIDB4MDAwMDAwY2YpOworCW52X2ljbWQoZGV2LCAweDAwMDAwODM2LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDc5YSwgMHgwMDAwMDAwMik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MzMsIDB4MDQ0NDQ0ODApOworCW52X2ljbWQoZGV2LCAweDAwMDAwN2ExLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDdhMywgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3YTQsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwN2E1LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgzMSwgMHgwMDAwMDAwNCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MGMsIDB4MDAwMDAwMDIpOworCW52X2ljbWQoZGV2LCAweDAwMDAwODBkLCAweDAwMDAwMTAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgwZSwgMHgwMDAwMDEwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MGYsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwODIzLCAweDAwMDAwMDAyKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgyNCwgMHgwMDAwMDEwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MjUsIDB4MDAwMDAxMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODI2LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk1ZCwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MmIsIDB4MDAwMDAwMDQpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTQyLCAweDAwMDEwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDk0MywgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5NDQsIDB4MDAwMDAwMjIpOworCW52X2ljbWQoZGV2LCAweDAwMDAwN2M1LCAweDAwMDEwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgzNCwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3YzcsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDBjMWIwLCAweDAwMDAwMDBmKTsKKwludl9pY21kKGRldiwgMHgwMDAwYzFiMSwgMHgwMDAwMDAwZik7CisJbnZfaWNtZChkZXYsIDB4MDAwMGMxYjIsIDB4MDAwMDAwMGYpOworCW52X2ljbWQoZGV2LCAweDAwMDBjMWIzLCAweDAwMDAwMDBmKTsKKwludl9pY21kKGRldiwgMHgwMDAwYzFiNCwgMHgwMDAwMDAwZik7CisJbnZfaWNtZChkZXYsIDB4MDAwMGMxYjUsIDB4MDAwMDAwMGYpOworCW52X2ljbWQoZGV2LCAweDAwMDBjMWI2LCAweDAwMDAwMDBmKTsKKwludl9pY21kKGRldiwgMHgwMDAwYzFiNywgMHgwMDAwMDAwZik7CisJbnZfaWNtZChkZXYsIDB4MDAwMGMxYjgsIDB4MGZhYzY4ODEpOworCW52X2ljbWQoZGV2LCAweDAwMDBjMWI5LCAweDAwZmFjNjg4KTsKKwludl9pY21kKGRldiwgMHgwMDAxZTEwMCwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDEwMDAsIDB4MDAwMDAwMDIpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNmFhLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDZhZCwgMHgwMDAwMDEwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA2YWUsIDB4MDAwMDAxMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwNmIxLCAweDAwMDAwMDExKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDc4YywgMHgwMDAwMDAwOCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3OTIsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNzk0LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDc5NSwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3OTYsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwNzk3LCAweDAwMDAwMGNmKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDc5YSwgMHgwMDAwMDAwMik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MzMsIDB4MDQ0NDQ0ODApOworCW52X2ljbWQoZGV2LCAweDAwMDAwN2ExLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDdhMywgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA3YTQsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwN2E1LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgzMSwgMHgwMDAwMDAwNCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMWUxMDAsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAxMDAwLCAweDAwMDAwMDE0KTsKKwludl9pY21kKGRldiwgMHgwMDAwMDM1MSwgMHgwMDAwMDEwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5NTcsIDB4MDAwMDAwMDMpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTVkLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgyYiwgMHgwMDAwMDAwNCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA5NDIsIDB4MDAwMTAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwOTQzLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDdjNSwgMHgwMDAxMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MzQsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwN2M3LCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAxZTEwMCwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDEwMDAsIDB4MDAwMDAwMDEpOworCW52X2ljbWQoZGV2LCAweDAwMDAwODBjLCAweDAwMDAwMDAyKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgwZCwgMHgwMDAwMDEwMCk7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MGUsIDB4MDAwMDAxMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODBmLCAweDAwMDAwMDAxKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgyMywgMHgwMDAwMDAwMik7CisJbnZfaWNtZChkZXYsIDB4MDAwMDA4MjQsIDB4MDAwMDAxMDApOworCW52X2ljbWQoZGV2LCAweDAwMDAwODI1LCAweDAwMDAwMTAwKTsKKwludl9pY21kKGRldiwgMHgwMDAwMDgyNiwgMHgwMDAwMDAwMSk7CisJbnZfaWNtZChkZXYsIDB4MDAwMWUxMDAsIDB4MDAwMDAwMDEpOworCW52X3dyMzIoZGV2LCAweDQwMDIwOCwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIDB4NDA0MTU0LCAweDAwMDAwNDAwKTsKKworCW52YzBfZ3JjdHhfZ2VuZXJhdGVfOTA5NyhkZXYpOworCW52YzBfZ3JjdHhfZ2VuZXJhdGVfOTAyZChkZXYpOworCW52YzBfZ3JjdHhfZ2VuZXJhdGVfOTAzOShkZXYpOworCW52YzBfZ3JjdHhfZ2VuZXJhdGVfOTBjMChkZXYpOworCisJbnZfd3IzMihkZXYsIDB4MDAwMjYwLCByMDAwMjYwKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfaW5zdG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9pbnN0bWVtLmMKaW5kZXggMTNhMGY3OC4uYzA5MDkxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9pbnN0bWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9pbnN0bWVtLmMKQEAgLTI1LDEzMiArMjUsMjIgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAKICNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgorI2luY2x1ZGUgIm5vdXZlYXVfdm0uaCIKIAotaW50Ci1udmMwX2luc3RtZW1fcG9wdWxhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpncHVvYmosCi0JCSAgICAgIHVpbnQzMl90ICpzaXplKQotewotCWludCByZXQ7Ci0KLQkqc2l6ZSA9IEFMSUdOKCpzaXplLCA0MDk2KTsKLQlpZiAoKnNpemUgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBub3V2ZWF1X2JvX25ldyhkZXYsIE5VTEwsICpzaXplLCAwLCBUVE1fUExfRkxBR19WUkFNLCAwLCAweDAwMDAsCi0JCQkgICAgIHRydWUsIGZhbHNlLCAmZ3B1b2JqLT5pbV9iYWNraW5nKTsKLQlpZiAocmV0KSB7Ci0JCU5WX0VSUk9SKGRldiwgImVycm9yIGdldHRpbmcgUFJBTUlOIGJhY2tpbmcgcGFnZXM6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldCA9IG5vdXZlYXVfYm9fcGluKGdwdW9iai0+aW1fYmFja2luZywgVFRNX1BMX0ZMQUdfVlJBTSk7Ci0JaWYgKHJldCkgewotCQlOVl9FUlJPUihkZXYsICJlcnJvciBwaW5uaW5nIFBSQU1JTiBiYWNraW5nIFZSQU06ICVkXG4iLCByZXQpOwotCQlub3V2ZWF1X2JvX3JlZihOVUxMLCAmZ3B1b2JqLT5pbV9iYWNraW5nKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlncHVvYmotPnZpbnN0ID0gZ3B1b2JqLT5pbV9iYWNraW5nLT5iby5tZW0uc3RhcnQgPDwgUEFHRV9TSElGVDsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZAotbnZjMF9pbnN0bWVtX2NsZWFyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqZ3B1b2JqKQotewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlpZiAoZ3B1b2JqICYmIGdwdW9iai0+aW1fYmFja2luZykgewotCQlpZiAoZ3B1b2JqLT5pbV9ib3VuZCkKLQkJCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS51bmJpbmQoZGV2LCBncHVvYmopOwotCQlub3V2ZWF1X2JvX3VucGluKGdwdW9iai0+aW1fYmFja2luZyk7Ci0JCW5vdXZlYXVfYm9fcmVmKE5VTEwsICZncHVvYmotPmltX2JhY2tpbmcpOwotCQlncHVvYmotPmltX2JhY2tpbmcgPSBOVUxMOwotCX0KLX0KLQotaW50Ci1udmMwX2luc3RtZW1fYmluZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmdwdW9iaikKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVpbnQzMl90IHB0ZSwgcHRlX2VuZDsKLQl1aW50NjRfdCB2cmFtOwotCi0JaWYgKCFncHVvYmotPmltX2JhY2tpbmcgfHwgIWdwdW9iai0+aW1fcHJhbWluIHx8IGdwdW9iai0+aW1fYm91bmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JTlZfREVCVUcoZGV2LCAic3Q9MHglbHggc3o9MHglbHhcbiIsCi0JCSBncHVvYmotPmltX3ByYW1pbi0+c3RhcnQsIGdwdW9iai0+aW1fcHJhbWluLT5zaXplKTsKLQotCXB0ZSAgICAgPSBncHVvYmotPmltX3ByYW1pbi0+c3RhcnQgPj4gMTI7Ci0JcHRlX2VuZCA9IChncHVvYmotPmltX3ByYW1pbi0+c2l6ZSA+PiAxMikgKyBwdGU7Ci0JdnJhbSAgICA9IGdwdW9iai0+dmluc3Q7Ci0KLQlOVl9ERUJVRyhkZXYsICJwcmFtaW49MHglbHgsIHB0ZT0lZCwgcHRlX2VuZD0lZFxuIiwKLQkJIGdwdW9iai0+aW1fcHJhbWluLT5zdGFydCwgcHRlLCBwdGVfZW5kKTsKLQlOVl9ERUJVRyhkZXYsICJmaXJzdCB2cmFtIHBhZ2U6IDB4JTAxMGxseFxuIiwgZ3B1b2JqLT52aW5zdCk7Ci0KLQl3aGlsZSAocHRlIDwgcHRlX2VuZCkgewotCQludl93cjMyKGRldiwgMHg3MDIwMDAgKyAocHRlICogOCksICh2cmFtID4+IDgpIHwgMSk7Ci0JCW52X3dyMzIoZGV2LCAweDcwMjAwNCArIChwdGUgKiA4KSwgMCk7Ci0JCXZyYW0gKz0gNDA5NjsKLQkJcHRlKys7Ci0JfQotCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwotCi0JaWYgKDEpIHsKLQkJdTMyIGNoYW4gPSBudl9yZDMyKGRldiwgMHgxNzAwKSA8PCAxNjsKLQkJbnZfd3IzMihkZXYsIDB4MTAwY2I4LCAoY2hhbiArIDB4MTAwMCkgPj4gOCk7Ci0JCW52X3dyMzIoZGV2LCAweDEwMGNiYywgMHg4MDAwMDAwNSk7Ci0JfQotCi0JZ3B1b2JqLT5pbV9ib3VuZCA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludAotbnZjMF9pbnN0bWVtX3VuYmluZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmdwdW9iaikKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVpbnQzMl90IHB0ZSwgcHRlX2VuZDsKLQotCWlmIChncHVvYmotPmltX2JvdW5kID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcHRlICAgICA9IGdwdW9iai0+aW1fcHJhbWluLT5zdGFydCA+PiAxMjsKLQlwdGVfZW5kID0gKGdwdW9iai0+aW1fcHJhbWluLT5zaXplID4+IDEyKSArIHB0ZTsKLQl3aGlsZSAocHRlIDwgcHRlX2VuZCkgewotCQludl93cjMyKGRldiwgMHg3MDIwMDAgKyAocHRlICogOCksIDApOwotCQludl93cjMyKGRldiwgMHg3MDIwMDQgKyAocHRlICogOCksIDApOwotCQlwdGUrKzsKLQl9Ci0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZsdXNoKGRldik7Ci0KLQlncHVvYmotPmltX2JvdW5kID0gMDsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZAotbnZjMF9pbnN0bWVtX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0JbnZfd3IzMihkZXYsIDB4MDcwMDAwLCAxKTsKLQlpZiAoIW52X3dhaXQoZGV2LCAweDA3MDAwMCwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMCkpCi0JCU5WX0VSUk9SKGRldiwgIlBSQU1JTiBmbHVzaCB0aW1lb3V0XG4iKTsKLX0KK3N0cnVjdCBudmMwX2luc3RtZW1fcHJpdiB7CisJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICAqYmFyMV9wZ2Q7CisJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqYmFyMTsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogICpiYXIzX3BnZDsKKwlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpiYXIzOworCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAgKmNoYW5fcGdkOworfTsKIAogaW50CiBudmMwX2luc3RtZW1fc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyICpidWY7Ci0JaW50IGk7CiAKLQlkZXZfcHJpdi0+c3VzcmVzLnJhbWluX2NvcHkgPSB2bWFsbG9jKDY1NTM2KTsKLQlpZiAoIWRldl9wcml2LT5zdXNyZXMucmFtaW5fY29weSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JYnVmID0gZGV2X3ByaXYtPnN1c3Jlcy5yYW1pbl9jb3B5OwotCi0JZm9yIChpID0gMDsgaSA8IDY1NTM2OyBpICs9IDQpCi0JCWJ1ZltpLzRdID0gbnZfcmQzMihkZXYsIE5WMDRfUFJBTUlOICsgaSk7CisJZGV2X3ByaXYtPnJhbWluX2F2YWlsYWJsZSA9IGZhbHNlOwogCXJldHVybiAwOwogfQogCkBAIC0xNTgsNzMgKzQ4LDE4NCBAQAogbnZjMF9pbnN0bWVtX3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyICpidWYgPSBkZXZfcHJpdi0+c3VzcmVzLnJhbWluX2NvcHk7Ci0JdTY0IGNoYW47Ci0JaW50IGk7CisJc3RydWN0IG52YzBfaW5zdG1lbV9wcml2ICpwcml2ID0gZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByaXY7CiAKLQljaGFuID0gZGV2X3ByaXYtPnZyYW1fc2l6ZSAtIGRldl9wcml2LT5yYW1pbl9yc3ZkX3ZyYW07Ci0JbnZfd3IzMihkZXYsIDB4MDAxNzAwLCBjaGFuID4+IDE2KTsKKwludl9tYXNrKGRldiwgMHgxMDBjODAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDAwMTcwNCwgMHg4MDAwMDAwMCB8IHByaXYtPmJhcjEtPnJhbWluLT52aW5zdCA+PiAxMik7CisJbnZfd3IzMihkZXYsIDB4MDAxNzE0LCAweGMwMDAwMDAwIHwgcHJpdi0+YmFyMy0+cmFtaW4tPnZpbnN0ID4+IDEyKTsKKwlkZXZfcHJpdi0+cmFtaW5fYXZhaWxhYmxlID0gdHJ1ZTsKK30KIAotCWZvciAoaSA9IDA7IGkgPCA2NTUzNjsgaSArPSA0KQotCQludl93cjMyKGRldiwgTlYwNF9QUkFNSU4gKyBpLCBidWZbaS80XSk7Ci0JdmZyZWUoZGV2X3ByaXYtPnN1c3Jlcy5yYW1pbl9jb3B5KTsKLQlkZXZfcHJpdi0+c3VzcmVzLnJhbWluX2NvcHkgPSBOVUxMOworc3RhdGljIHZvaWQKK252YzBfY2hhbm5lbF9kZWwoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKnBjaGFuKQoreworCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW47CiAKLQludl93cjMyKGRldiwgMHgwMDE3MTQsIDB4YzAwMDAwMDAgfCAoY2hhbiA+PiAxMikpOworCWNoYW4gPSAqcGNoYW47CisJKnBjaGFuID0gTlVMTDsKKwlpZiAoIWNoYW4pCisJCXJldHVybjsKKworCW5vdXZlYXVfdm1fcmVmKE5VTEwsICZjaGFuLT52bSwgTlVMTCk7CisJaWYgKGNoYW4tPnJhbWluX2hlYXAuZnJlZV9zdGFjay5uZXh0KQorCQlkcm1fbW1fdGFrZWRvd24oJmNoYW4tPnJhbWluX2hlYXApOworCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmY2hhbi0+cmFtaW4pOworCWtmcmVlKGNoYW4pOworfQorCitzdGF0aWMgaW50CitudmMwX2NoYW5uZWxfbmV3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBzaXplLCBzdHJ1Y3Qgbm91dmVhdV92bSAqdm0sCisJCSBzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICoqcGNoYW4sCisJCSBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnBnZCwgdTY0IHZtX3NpemUpCit7CisJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbjsKKwlpbnQgcmV0OworCisJY2hhbiA9IGt6YWxsb2Moc2l6ZW9mKCpjaGFuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaGFuKQorCQlyZXR1cm4gLUVOT01FTTsKKwljaGFuLT5kZXYgPSBkZXY7CisKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBOVUxMLCBzaXplLCAweDEwMDAsIDAsICZjaGFuLT5yYW1pbik7CisJaWYgKHJldCkgeworCQludmMwX2NoYW5uZWxfZGVsKCZjaGFuKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkcm1fbW1faW5pdCgmY2hhbi0+cmFtaW5faGVhcCwgMHgxMDAwLCBzaXplIC0gMHgxMDAwKTsKKwlpZiAocmV0KSB7CisJCW52YzBfY2hhbm5lbF9kZWwoJmNoYW4pOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG5vdXZlYXVfdm1fcmVmKHZtLCAmY2hhbi0+dm0sIE5VTEwpOworCWlmIChyZXQpIHsKKwkJbnZjMF9jaGFubmVsX2RlbCgmY2hhbik7CisJCXJldHVybiByZXQ7CisJfQorCisJbnZfd28zMihjaGFuLT5yYW1pbiwgMHgwMjAwLCBsb3dlcl8zMl9iaXRzKHBnZC0+dmluc3QpKTsKKwludl93bzMyKGNoYW4tPnJhbWluLCAweDAyMDQsIHVwcGVyXzMyX2JpdHMocGdkLT52aW5zdCkpOworCW52X3dvMzIoY2hhbi0+cmFtaW4sIDB4MDIwOCwgbG93ZXJfMzJfYml0cyh2bV9zaXplIC0gMSkpOworCW52X3dvMzIoY2hhbi0+cmFtaW4sIDB4MDIwYywgdXBwZXJfMzJfYml0cyh2bV9zaXplIC0gMSkpOworCisJKnBjaGFuID0gY2hhbjsKKwlyZXR1cm4gMDsKIH0KIAogaW50CiBudmMwX2luc3RtZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTY0IGNoYW4sIHBndDMsIGltZW0sIGxpbTMgPSBkZXZfcHJpdi0+cmFtaW5fc2l6ZSAtIDE7Ci0JaW50IHJldCwgaTsKKwlzdHJ1Y3Qgbm91dmVhdV9pbnN0bWVtX2VuZ2luZSAqcGluc3RtZW0gPSAmZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2LT5wZGV2OworCXN0cnVjdCBudmMwX2luc3RtZW1fcHJpdiAqcHJpdjsKKwlzdHJ1Y3Qgbm91dmVhdV92bSAqdm0gPSBOVUxMOworCWludCByZXQ7CiAKLQlkZXZfcHJpdi0+cmFtaW5fcnN2ZF92cmFtID0gMSAqIDEwMjQgKiAxMDI0OwotCWNoYW4gPSBkZXZfcHJpdi0+dnJhbV9zaXplIC0gZGV2X3ByaXYtPnJhbWluX3JzdmRfdnJhbTsKLQlpbWVtID0gNDA5NiArIDQwOTYgKyAzMjc2ODsKLQotCW52X3dyMzIoZGV2LCAweDAwMTcwMCwgY2hhbiA+PiAxNik7Ci0KLQkvKiBjaGFubmVsIHNldHVwICovCi0JbnZfd3IzMihkZXYsIDB4NzAwMjAwLCBsb3dlcl8zMl9iaXRzKGNoYW4gKyAweDEwMDApKTsKLQludl93cjMyKGRldiwgMHg3MDAyMDQsIHVwcGVyXzMyX2JpdHMoY2hhbiArIDB4MTAwMCkpOwotCW52X3dyMzIoZGV2LCAweDcwMDIwOCwgbG93ZXJfMzJfYml0cyhsaW0zKSk7Ci0JbnZfd3IzMihkZXYsIDB4NzAwMjBjLCB1cHBlcl8zMl9iaXRzKGxpbTMpKTsKLQotCS8qIHBvaW50IHBnZCAtPiBwZ3QgKi8KLQludl93cjMyKGRldiwgMHg3MDEwMDAsIDApOwotCW52X3dyMzIoZGV2LCAweDcwMTAwNCwgKChjaGFuICsgMHgyMDAwKSA+PiA4KSB8IDEpOwotCi0JLyogcG9pbnQgcGd0IC0+IHBoeXNpY2FsIHZyYW0gZm9yIGNoYW5uZWwgKi8KLQlwZ3QzID0gMHgyMDAwOwotCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+cmFtaW5fcnN2ZF92cmFtOyBpICs9IDQwOTYsIHBndDMgKz0gOCkgewotCQludl93cjMyKGRldiwgMHg3MDAwMDAgKyBwZ3QzLCAoKGNoYW4gKyBpKSA+PiA4KSB8IDEpOwotCQludl93cjMyKGRldiwgMHg3MDAwMDQgKyBwZ3QzLCAwKTsKLQl9Ci0KLQkvKiBjbGVhciByZXN0IG9mIHBndCAqLwotCWZvciAoOyBpIDwgZGV2X3ByaXYtPnJhbWluX3NpemU7IGkgKz0gNDA5NiwgcGd0MyArPSA4KSB7Ci0JCW52X3dyMzIoZGV2LCAweDcwMDAwMCArIHBndDMsIDApOwotCQludl93cjMyKGRldiwgMHg3MDAwMDQgKyBwZ3QzLCAwKTsKLQl9Ci0KLQkvKiBwb2ludCBiYXIzIGF0IHRoZSBjaGFubmVsICovCi0JbnZfd3IzMihkZXYsIDB4MDAxNzE0LCAweGMwMDAwMDAwIHwgKGNoYW4gPj4gMTIpKTsKLQotCS8qIEdsb2JhbCBQUkFNSU4gaGVhcCAqLwotCXJldCA9IGRybV9tbV9pbml0KCZkZXZfcHJpdi0+cmFtaW5faGVhcCwgaW1lbSwKLQkJCSAgZGV2X3ByaXYtPnJhbWluX3NpemUgLSBpbWVtKTsKLQlpZiAocmV0KSB7Ci0JCU5WX0VSUk9SKGRldiwgIkZhaWxlZCB0byBpbml0IFJBTUlOIGhlYXBcbiIpOworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCXBpbnN0bWVtLT5wcml2ID0gcHJpdjsKIAorCS8qIEJBUjMgVk0gKi8KKwlyZXQgPSBub3V2ZWF1X3ZtX25ldyhkZXYsIDAsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMyksIDAsCisJCQkgICAgICZkZXZfcHJpdi0+YmFyM192bSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ldyhkZXYsIE5VTEwsCisJCQkJIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDMpID4+IDEyKSAqIDgsIDAsCisJCQkJIE5WT0JKX0ZMQUdfRE9OVF9NQVAgfAorCQkJCSBOVk9CSl9GTEFHX1pFUk9fQUxMT0MsCisJCQkJICZkZXZfcHJpdi0+YmFyM192bS0+cGd0WzBdLm9ialswXSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlkZXZfcHJpdi0+YmFyM192bS0+cGd0WzBdLnJlZmNvdW50WzBdID0gMTsKKworCW52NTBfaW5zdG1lbV9tYXAoZGV2X3ByaXYtPmJhcjNfdm0tPnBndFswXS5vYmpbMF0pOworCisJcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3KGRldiwgTlVMTCwgMHg4MDAwLCA0MDk2LAorCQkJCSBOVk9CSl9GTEFHX1pFUk9fQUxMT0MsICZwcml2LT5iYXIzX3BnZCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IG5vdXZlYXVfdm1fcmVmKGRldl9wcml2LT5iYXIzX3ZtLCAmdm0sIHByaXYtPmJhcjNfcGdkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCW5vdXZlYXVfdm1fcmVmKE5VTEwsICZ2bSwgTlVMTCk7CisKKwlyZXQgPSBudmMwX2NoYW5uZWxfbmV3KGRldiwgODE5MiwgZGV2X3ByaXYtPmJhcjNfdm0sICZwcml2LT5iYXIzLAorCQkJICAgICAgIHByaXYtPmJhcjNfcGdkLCBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMykpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBCQVIxIFZNICovCisJcmV0ID0gbm91dmVhdV92bV9uZXcoZGV2LCAwLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpLCAwLCAmdm0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBOVUxMLCAweDgwMDAsIDQwOTYsCisJCQkJIE5WT0JKX0ZMQUdfWkVST19BTExPQywgJnByaXYtPmJhcjFfcGdkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gbm91dmVhdV92bV9yZWYodm0sICZkZXZfcHJpdi0+YmFyMV92bSwgcHJpdi0+YmFyMV9wZ2QpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJbm91dmVhdV92bV9yZWYoTlVMTCwgJnZtLCBOVUxMKTsKKworCXJldCA9IG52YzBfY2hhbm5lbF9uZXcoZGV2LCA4MTkyLCBkZXZfcHJpdi0+YmFyMV92bSwgJnByaXYtPmJhcjEsCisJCQkgICAgICAgcHJpdi0+YmFyMV9wZ2QsIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAxKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIGNoYW5uZWwgdm0gKi8KKwlyZXQgPSBub3V2ZWF1X3ZtX25ldyhkZXYsIDAsICgxVUxMIDw8IDQwKSwgMHgwMDA4MDAwMDAwVUxMLCAmdm0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXcoZGV2LCBOVUxMLCAweDgwMDAsIDQwOTYsIDAsICZwcml2LT5jaGFuX3BnZCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCW5vdXZlYXVfdm1fcmVmKHZtLCAmZGV2X3ByaXYtPmNoYW5fdm0sIHByaXYtPmNoYW5fcGdkKTsKKwlub3V2ZWF1X3ZtX3JlZihOVUxMLCAmdm0sIE5VTEwpOworCisJbnZjMF9pbnN0bWVtX3Jlc3VtZShkZXYpOwogCXJldHVybiAwOworZXJyb3I6CisJbnZjMF9pbnN0bWVtX3Rha2Vkb3duKGRldik7CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZAogbnZjMF9pbnN0bWVtX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbnZjMF9pbnN0bWVtX3ByaXYgKnByaXYgPSBkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJpdjsKKwlzdHJ1Y3Qgbm91dmVhdV92bSAqdm0gPSBOVUxMOworCisJbnZjMF9pbnN0bWVtX3N1c3BlbmQoZGV2KTsKKworCW52X3dyMzIoZGV2LCAweDE3MDQsIDB4MDAwMDAwMDApOworCW52X3dyMzIoZGV2LCAweDE3MTQsIDB4MDAwMDAwMDApOworCisJbm91dmVhdV92bV9yZWYoTlVMTCwgJmRldl9wcml2LT5jaGFuX3ZtLCBwcml2LT5jaGFuX3BnZCk7CisJbm91dmVhdV9ncHVvYmpfcmVmKE5VTEwsICZwcml2LT5jaGFuX3BnZCk7CisKKwludmMwX2NoYW5uZWxfZGVsKCZwcml2LT5iYXIxKTsKKwlub3V2ZWF1X3ZtX3JlZihOVUxMLCAmZGV2X3ByaXYtPmJhcjFfdm0sIHByaXYtPmJhcjFfcGdkKTsKKwlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJnByaXYtPmJhcjFfcGdkKTsKKworCW52YzBfY2hhbm5lbF9kZWwoJnByaXYtPmJhcjMpOworCW5vdXZlYXVfdm1fcmVmKGRldl9wcml2LT5iYXIzX3ZtLCAmdm0sIE5VTEwpOworCW5vdXZlYXVfdm1fcmVmKE5VTEwsICZ2bSwgcHJpdi0+YmFyM19wZ2QpOworCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmcHJpdi0+YmFyM19wZ2QpOworCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmZGV2X3ByaXYtPmJhcjNfdm0tPnBndFswXS5vYmpbMF0pOworCW5vdXZlYXVfdm1fcmVmKE5VTEwsICZkZXZfcHJpdi0+YmFyM192bSwgTlVMTCk7CisKKwlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJpdiA9IE5VTEw7CisJa2ZyZWUocHJpdik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfdm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjkyNTFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF92bS5jCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgUmVkIEhhdCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQmVuIFNrZWdncworICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisKKyNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgorI2luY2x1ZGUgIm5vdXZlYXVfdm0uaCIKKwordm9pZAorbnZjMF92bV9tYXBfcGd0KHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGdkLCB1MzIgaW5kZXgsCisJCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGd0WzJdKQoreworCXUzMiBwZGVbMl0gPSB7IDAsIDAgfTsKKworCWlmIChwZ3RbMF0pCisJCXBkZVsxXSA9IDB4MDAwMDAwMDEgfCAocGd0WzBdLT52aW5zdCA+PiA4KTsKKwlpZiAocGd0WzFdKQorCQlwZGVbMF0gPSAweDAwMDAwMDAxIHwgKHBndFsxXS0+dmluc3QgPj4gOCk7CisKKwludl93bzMyKHBnZCwgKGluZGV4ICogOCkgKyAwLCBwZGVbMF0pOworCW52X3dvMzIocGdkLCAoaW5kZXggKiA4KSArIDQsIHBkZVsxXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0CitudmMwX3ZtX2FkZHIoc3RydWN0IG5vdXZlYXVfdm1hICp2bWEsIHU2NCBwaHlzLCB1MzIgbWVtdHlwZSwgdTMyIHRhcmdldCkKK3sKKwlwaHlzID4+PSA4OworCisJcGh5cyB8PSAweDAwMDAwMDAxOyAvKiBwcmVzZW50ICovCisvLwlpZiAodm1hLT5hY2Nlc3MgJiBOVl9NRU1fQUNDRVNTX1NZUykKKy8vCQlwaHlzIHw9IDB4MDAwMDAwMDI7CisKKwlwaHlzIHw9ICgodTY0KXRhcmdldCAgPDwgMzIpOworCXBoeXMgfD0gKCh1NjQpbWVtdHlwZSA8PCAzNik7CisKKwlyZXR1cm4gcGh5czsKK30KKwordm9pZAorbnZjMF92bV9tYXAoc3RydWN0IG5vdXZlYXVfdm1hICp2bWEsIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGd0LAorCSAgICBzdHJ1Y3Qgbm91dmVhdV92cmFtICptZW0sIHUzMiBwdGUsIHUzMiBjbnQsIHU2NCBwaHlzKQoreworCXUzMiBuZXh0ID0gMSA8PCAodm1hLT5ub2RlLT50eXBlIC0gOCk7CisKKwlwaHlzICA9IG52YzBfdm1fYWRkcih2bWEsIHBoeXMsIG1lbS0+bWVtdHlwZSwgMCk7CisJcHRlIDw8PSAzOworCXdoaWxlIChjbnQtLSkgeworCQludl93bzMyKHBndCwgcHRlICsgMCwgbG93ZXJfMzJfYml0cyhwaHlzKSk7CisJCW52X3dvMzIocGd0LCBwdGUgKyA0LCB1cHBlcl8zMl9iaXRzKHBoeXMpKTsKKwkJcGh5cyArPSBuZXh0OworCQlwdGUgICs9IDg7CisJfQorfQorCit2b2lkCitudmMwX3ZtX21hcF9zZyhzdHJ1Y3Qgbm91dmVhdV92bWEgKnZtYSwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwZ3QsCisJICAgICAgIHUzMiBwdGUsIGRtYV9hZGRyX3QgKmxpc3QsIHUzMiBjbnQpCit7CisJcHRlIDw8PSAzOworCXdoaWxlIChjbnQtLSkgeworCQl1NjQgcGh5cyA9IG52YzBfdm1fYWRkcih2bWEsICpsaXN0KyssIDAsIDUpOworCQludl93bzMyKHBndCwgcHRlICsgMCwgbG93ZXJfMzJfYml0cyhwaHlzKSk7CisJCW52X3dvMzIocGd0LCBwdGUgKyA0LCB1cHBlcl8zMl9iaXRzKHBoeXMpKTsKKwkJcHRlICs9IDg7CisJfQorfQorCit2b2lkCitudmMwX3ZtX3VubWFwKHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGd0LCB1MzIgcHRlLCB1MzIgY250KQoreworCXB0ZSA8PD0gMzsKKwl3aGlsZSAoY250LS0pIHsKKwkJbnZfd28zMihwZ3QsIHB0ZSArIDAsIDB4MDAwMDAwMDApOworCQludl93bzMyKHBndCwgcHRlICsgNCwgMHgwMDAwMDAwMCk7CisJCXB0ZSArPSA4OworCX0KK30KKwordm9pZAorbnZjMF92bV9mbHVzaChzdHJ1Y3Qgbm91dmVhdV92bSAqdm0pCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gdm0tPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfaW5zdG1lbV9lbmdpbmUgKnBpbnN0bWVtID0gJmRldl9wcml2LT5lbmdpbmUuaW5zdG1lbTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdm0tPmRldjsKKwlzdHJ1Y3Qgbm91dmVhdV92bV9wZ2QgKnZwZ2Q7CisJdTMyIHIxMDBjODAsIGVuZ2luZTsKKworCXBpbnN0bWVtLT5mbHVzaCh2bS0+ZGV2KTsKKworCWlmICh2bSA9PSBkZXZfcHJpdi0+Y2hhbl92bSkKKwkJZW5naW5lID0gMTsKKwllbHNlCisJCWVuZ2luZSA9IDU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZwZ2QsICZ2bS0+cGdkX2xpc3QsIGhlYWQpIHsKKwkJcjEwMGM4MCA9IG52X3JkMzIoZGV2LCAweDEwMGM4MCk7CisJCW52X3dyMzIoZGV2LCAweDEwMGNiOCwgdnBnZC0+b2JqLT52aW5zdCA+PiA4KTsKKwkJbnZfd3IzMihkZXYsIDB4MTAwY2JjLCAweDgwMDAwMDAwIHwgZW5naW5lKTsKKwkJaWYgKCFudl93YWl0KGRldiwgMHgxMDBjODAsIDB4ZmZmZmZmZmYsIHIxMDBjODApKQorCQkJTlZfRVJST1IoZGV2LCAidm0gZmx1c2ggdGltZW91dCBlbmcgJWRcbiIsIGVuZ2luZSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF92cmFtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX3ZyYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NThlZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF92cmFtLmMKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEJlbiBTa2VnZ3MKKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCisjaW5jbHVkZSAibm91dmVhdV9tbS5oIgorCitib29sCitudmMwX3ZyYW1fZmxhZ3NfdmFsaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHRpbGVfZmxhZ3MpCit7CisJc3dpdGNoICh0aWxlX2ZsYWdzICYgTk9VVkVBVV9HRU1fVElMRV9MQVlPVVRfTUFTSykgeworCWNhc2UgMHgwMDAwOgorCWNhc2UgMHhmZTAwOgorCWNhc2UgMHhkYjAwOgorCWNhc2UgMHgxMTAwOgorCQlyZXR1cm4gdHJ1ZTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2ludAorbnZjMF92cmFtX25ldyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1NjQgc2l6ZSwgdTMyIGFsaWduLCB1MzIgbmNtaW4sCisJICAgICAgdTMyIHR5cGUsIHN0cnVjdCBub3V2ZWF1X3ZyYW0gKipwdnJhbSkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gJmRldl9wcml2LT50dG0uYmRldjsKKwlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiA9ICZiZGV2LT5tYW5bVFRNX1BMX1ZSQU1dOworCXN0cnVjdCBub3V2ZWF1X21tICptbSA9IG1hbi0+cHJpdjsKKwlzdHJ1Y3Qgbm91dmVhdV9tbV9ub2RlICpyOworCXN0cnVjdCBub3V2ZWF1X3ZyYW0gKnZyYW07CisJaW50IHJldDsKKworCXNpemUgID4+PSAxMjsKKwlhbGlnbiA+Pj0gMTI7CisJbmNtaW4gPj49IDEyOworCisJdnJhbSA9IGt6YWxsb2Moc2l6ZW9mKCp2cmFtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2cmFtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZ2cmFtLT5yZWdpb25zKTsKKwl2cmFtLT5kZXYgPSBkZXZfcHJpdi0+ZGV2OworCXZyYW0tPm1lbXR5cGUgPSB0eXBlOworCXZyYW0tPnNpemUgPSBzaXplOworCisJbXV0ZXhfbG9jaygmbW0tPm11dGV4KTsKKwlkbyB7CisJCXJldCA9IG5vdXZlYXVfbW1fZ2V0KG1tLCAxLCBzaXplLCBuY21pbiwgYWxpZ24sICZyKTsKKwkJaWYgKHJldCkgeworCQkJbXV0ZXhfdW5sb2NrKCZtbS0+bXV0ZXgpOworCQkJbnY1MF92cmFtX2RlbChkZXYsICZ2cmFtKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlsaXN0X2FkZF90YWlsKCZyLT5ybF9lbnRyeSwgJnZyYW0tPnJlZ2lvbnMpOworCQlzaXplIC09IHItPmxlbmd0aDsKKwl9IHdoaWxlIChzaXplKTsKKwltdXRleF91bmxvY2soJm1tLT5tdXRleCk7CisKKwlyID0gbGlzdF9maXJzdF9lbnRyeSgmdnJhbS0+cmVnaW9ucywgc3RydWN0IG5vdXZlYXVfbW1fbm9kZSwgcmxfZW50cnkpOworCXZyYW0tPm9mZnNldCA9ICh1NjQpci0+b2Zmc2V0IDw8IDEyOworCSpwdnJhbSA9IHZyYW07CisJcmV0dXJuIDA7Cit9CisKK2ludAorbnZjMF92cmFtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJZGV2X3ByaXYtPnZyYW1fc2l6ZSAgPSBudl9yZDMyKGRldiwgMHgxMGYyMGMpIDw8IDIwOworCWRldl9wcml2LT52cmFtX3NpemUgKj0gbnZfcmQzMihkZXYsIDB4MTIxYzc0KTsKKwlkZXZfcHJpdi0+dnJhbV9yYmxvY2tfc2l6ZSA9IDQwOTY7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udnJlZy5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZyZWcuaAppbmRleCA4ODFmOGE1Li5mZTBmMjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udnJlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252cmVnLmgKQEAgLTE1Myw3ICsxNTMsOCBAQAogI2RlZmluZSBOVl9QQ1JUQ19TVEFSVAkJCQkJMHgwMDYwMDgwMAogI2RlZmluZSBOVl9QQ1JUQ19DT05GSUcJCQkJCTB4MDA2MDA4MDQKICMJZGVmaW5lIE5WX1BDUlRDX0NPTkZJR19TVEFSVF9BRERSRVNTX05PTl9WR0EJCSgxIDw8IDApCi0jCWRlZmluZSBOVl9QQ1JUQ19DT05GSUdfU1RBUlRfQUREUkVTU19IU1lOQwkJKDIgPDwgMCkKKyMJZGVmaW5lIE5WMDRfUENSVENfQ09ORklHX1NUQVJUX0FERFJFU1NfSFNZTkMJCSg0IDw8IDApCisjCWRlZmluZSBOVjEwX1BDUlRDX0NPTkZJR19TVEFSVF9BRERSRVNTX0hTWU5DCQkoMiA8PCAwKQogI2RlZmluZSBOVl9QQ1JUQ19DVVJTT1JfQ09ORklHCQkJCTB4MDA2MDA4MTAKICMJZGVmaW5lIE5WX1BDUlRDX0NVUlNPUl9DT05GSUdfRU5BQkxFX0VOQUJMRQkJKDEgPDwgMCkKICMJZGVmaW5lIE5WX1BDUlRDX0NVUlNPUl9DT05GSUdfRE9VQkxFX1NDQU5fRU5BQkxFCSgxIDw8IDQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQppbmRleCA2Y2FlNGYyLi5lNDdlZWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKQEAgLTY1LDEwICs2NSwxMyBAQAogCXJzNDAwLm8gcnM2MDAubyByczY5MC5vIHJ2NTE1Lm8gcjUyMC5vIHI2MDAubyBydjc3MC5vIHJhZGVvbl90ZXN0Lm8gXAogCXIyMDAubyByYWRlb25fbGVnYWN5X3R2Lm8gcjYwMF9jcy5vIHI2MDBfYmxpdC5vIHI2MDBfYmxpdF9zaGFkZXJzLm8gXAogCXI2MDBfYmxpdF9rbXMubyByYWRlb25fcG0ubyBhdG9tYmlvc19kcC5vIHI2MDBfYXVkaW8ubyByNjAwX2hkbWkubyBcCi0JZXZlcmdyZWVuLm8gZXZlcmdyZWVuX2NzLm8gZXZlcmdyZWVuX2JsaXRfc2hhZGVycy5vIGV2ZXJncmVlbl9ibGl0X2ttcy5vCisJZXZlcmdyZWVuLm8gZXZlcmdyZWVuX2NzLm8gZXZlcmdyZWVuX2JsaXRfc2hhZGVycy5vIGV2ZXJncmVlbl9ibGl0X2ttcy5vIFwKKwlyYWRlb25fdHJhY2VfcG9pbnRzLm8gbmkubwogCiByYWRlb24tJChDT05GSUdfQ09NUEFUKSArPSByYWRlb25faW9jMzIubwogcmFkZW9uLSQoQ09ORklHX1ZHQV9TV0lUQ0hFUk9PKSArPSByYWRlb25fYXRweF9oYW5kbGVyLm8KIHJhZGVvbi0kKENPTkZJR19BQ1BJKSArPSByYWRlb25fYWNwaS5vCiAKIG9iai0kKENPTkZJR19EUk1fUkFERU9OKSs9IHJhZGVvbi5vCisKK0NGTEFHU19yYWRlb25fdHJhY2VfcG9pbnRzLm8gOj0gLUkkKHNyYykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL09iamVjdElELmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL09iamVjdElELmgKaW5kZXggYzcxNDE3OS4uYzYxYzNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9PYmplY3RJRC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vT2JqZWN0SUQuaApAQCAtMzcsNiArMzcsOCBAQAogI2RlZmluZSBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgICAgICAgICAgICAgICAweDMKICNkZWZpbmUgR1JBUEhfT0JKRUNUX1RZUEVfUk9VVEVSICAgICAgICAgICAgICAgICAgMHg0CiAvKiBkZWxldGVkICovCisjZGVmaW5lIEdSQVBIX09CSkVDVF9UWVBFX0RJU1BMQVlfUEFUSCAgICAgICAgICAgIDB4NiAgCisjZGVmaW5lIEdSQVBIX09CSkVDVF9UWVBFX0dFTkVSSUMgICAgICAgICAgICAgICAgIDB4NwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEVuY29kZXIgT2JqZWN0IElEIERlZmluaXRpb24gICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNjQsNiArNjYsOSBAQAogI2RlZmluZSBFTkNPREVSX09CSkVDVF9JRF9WVDE2MjMgICAgICAgICAgICAgICAgICAweDEwCiAjZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX0hETUlfU0kxOTMwICAgICAgICAgICAgIDB4MTEKICNkZWZpbmUgRU5DT0RFUl9PQkpFQ1RfSURfSERNSV9JTlRFUk5BTCAgICAgICAgICAgMHgxMgorI2RlZmluZSBFTkNPREVSX09CSkVDVF9JRF9BTE1PTkQgICAgICAgICAgICAgICAgICAweDIyCisjZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX1RSQVZJUyAgICAgICAgICAgICAgICAgIDB4MjMKKyNkZWZpbmUgRU5DT0RFUl9PQkpFQ1RfSURfTlVUTUVHICAgICAgICAgICAgICAgICAgMHgyMgogLyogS2FsZWlkb3Njb3BlIChLTERTQ1ApIENsYXNzIERpc3BsYXkgSGFyZHdhcmUgKGludGVybmFsKSAqLwogI2RlZmluZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfVE1EUzEgICAweDEzCiAjZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EVk8xICAgIDB4MTQKQEAgLTEwOCw2ICsxMTMsNyBAQAogI2RlZmluZSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUICAgICAgICAgICAweDEzCiAjZGVmaW5lIENPTk5FQ1RPUl9PQkpFQ1RfSURfZURQICAgICAgICAgICAgICAgICAgIDB4MTQKICNkZWZpbmUgQ09OTkVDVE9SX09CSkVDVF9JRF9NWE0gICAgICAgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFNfZURQICAgICAgICAgICAgICAweDE2CiAKIC8qIGRlbGV0ZWQgKi8KIApAQCAtMTI0LDYgKzEzMCw3IEBACiAjZGVmaW5lIEdFTkVSSUNfT0JKRUNUX0lEX0dMU1lOQyAgICAgICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgR0VORVJJQ19PQkpFQ1RfSURfUFgyX05PTl9EUklWQUJMRSAgICAgICAgMHgwMgogI2RlZmluZSBHRU5FUklDX09CSkVDVF9JRF9NWE1fT1BNICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIEdFTkVSSUNfT0JKRUNUX0lEX1NURVJFT19QSU4gICAgICAgICAgICAgIDB4MDQgICAgICAgIC8vVGhpcyBvYmplY3QgY291bGQgc2hvdyB1cCBmcm9tIE1pc2MgT2JqZWN0IHRhYmxlLCBpdCBmb2xsb3dzIEFUT01fT0JKRUNUIGZvcm1hdCwgYW5kIGNvbnRhaW5zIG9uZSBBVE9NX09CSkVDVF9HUElPX0NOVExfUkVDT1JEIGZvciB0aGUgc3RlcmVvIHBpbgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEdyYXBoaWNzIE9iamVjdCBFTlVNIElEIERlZmluaXRpb24gICAgICAgICAgICAgICAqLwpAQCAtMzYwLDYgKzM2NywyNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9HRU5FUkFMX0VYVEVSTkFMX0RWTyA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKKyNkZWZpbmUgRU5DT0RFUl9BTE1PTkRfRU5VTV9JRDEgICAgICAgICAgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfQUxNT05EIDw8IE9CSkVDVF9JRF9TSElGVCkKKworI2RlZmluZSBFTkNPREVSX0FMTU9ORF9FTlVNX0lEMiAgICAgICAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDIgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9BTE1PTkQgPDwgT0JKRUNUX0lEX1NISUZUKQorCisjZGVmaW5lIEVOQ09ERVJfVFJBVklTX0VOVU1fSUQxICAgICAgICAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ09ERVJfT0JKRUNUX0lEX1RSQVZJUyA8PCBPQkpFQ1RfSURfU0hJRlQpCisKKyNkZWZpbmUgRU5DT0RFUl9UUkFWSVNfRU5VTV9JRDIgICAgICAgICAgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfVFJBVklTIDw8IE9CSkVDVF9JRF9TSElGVCkKKworI2RlZmluZSBFTkNPREVSX05VVE1FR19FTlVNX0lEMSAgICAgICAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9OVVRNRUcgPDwgT0JKRUNUX0lEX1NISUZUKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIENvbm5lY3RvciBPYmplY3QgSUQgZGVmaW5pdGlvbiAtIFNoYXJlZCB3aXRoIEJJT1MgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDIxLDYgKzQ0OCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfRCA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKKyNkZWZpbmUgQ09OTkVDVE9SX1NJTkdMRV9MSU5LX0RWSV9EX0VOVU1fSUQzICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDMgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0QgPDwgT0JKRUNUX0lEX1NISUZUKQorCisjZGVmaW5lIENPTk5FQ1RPUl9TSU5HTEVfTElOS19EVklfRF9FTlVNX0lENCAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQ0IDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EIDw8IE9CSkVDVF9JRF9TSElGVCkKKwogI2RlZmluZSBDT05ORUNUT1JfRFVBTF9MSU5LX0RWSV9EX0VOVU1fSUQxICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0QgPDwgT0JKRUNUX0lEX1NISUZUKQpAQCAtNTEyLDYgKzU0Nyw3IEBACiAjZGVmaW5lIENPTk5FQ1RPUl83UElOX0RJTl9FTlVNX0lEMSAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEXzdQSU5fRElOIDw8IE9CSkVDVF9JRF9TSElGVCkKKwogI2RlZmluZSBDT05ORUNUT1JfN1BJTl9ESU5fRU5VTV9JRDIgICAgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF83UElOX0RJTiA8PCBPQkpFQ1RfSURfU0hJRlQpCkBAIC01OTMsNiArNjI5LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQ3IDw8IEVOVU1fSURfU0hJRlQgfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX01YTSA8PCBPQkpFQ1RfSURfU0hJRlQpICAgICAgICAgIC8vTWFwcGluZyB0byBNWE1fREFDCiAKKyNkZWZpbmUgQ09OTkVDVE9SX0xWRFNfZURQX0VOVU1fSUQxICAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEU19lRFAgPDwgT0JKRUNUX0lEX1NISUZUKQorCisjZGVmaW5lIENPTk5FQ1RPUl9MVkRTX2VEUF9FTlVNX0lEMiAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFNfZURQIDw8IE9CSkVDVF9JRF9TSElGVCkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBSb3V0ZXIgT2JqZWN0IElEIGRlZmluaXRpb24gLSBTaGFyZWQgd2l0aCBCSU9TICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjIxLDYgKzY2NSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VORVJJQ19PQkpFQ1RfSURfTVhNX09QTSA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKKyNkZWZpbmUgR0VORVJJQ09CSkVDVF9TVEVSRU9fUElOX0VOVU1fSUQxICAgICAgICAoR1JBUEhfT0JKRUNUX1RZUEVfR0VORVJJQyA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VORVJJQ19PQkpFQ1RfSURfU1RFUkVPX1BJTiA8PCBPQkpFQ1RfSURfU0hJRlQpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogT2JqZWN0IENhcCBkZWZpbml0aW9uIC0gU2hhcmVkIHdpdGggQklPUyAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMKaW5kZXggMDVlZmI1Yi4uMjU4ZmE1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMKQEAgLTczNCwxNiArNzM0LDE2IEBACiBzdGF0aWMgdm9pZCBhdG9tX29wX21hc2soYXRvbV9leGVjX2NvbnRleHQgKmN0eCwgaW50ICpwdHIsIGludCBhcmcpCiB7CiAJdWludDhfdCBhdHRyID0gVTgoKCpwdHIpKyspOwotCXVpbnQzMl90IGRzdCwgc3JjMSwgc3JjMiwgc2F2ZWQ7CisJdWludDMyX3QgZHN0LCBtYXNrLCBzcmMsIHNhdmVkOwogCWludCBkcHRyID0gKnB0cjsKIAlTREVCVUcoIiAgIGRzdDogIik7CiAJZHN0ID0gYXRvbV9nZXRfZHN0KGN0eCwgYXJnLCBhdHRyLCBwdHIsICZzYXZlZCwgMSk7Ci0JU0RFQlVHKCIgICBzcmMxOiAiKTsKLQlzcmMxID0gYXRvbV9nZXRfc3JjX2RpcmVjdChjdHgsICgoYXR0ciA+PiAzKSAmIDcpLCBwdHIpOwotCVNERUJVRygiICAgc3JjMjogIik7Ci0Jc3JjMiA9IGF0b21fZ2V0X3NyYyhjdHgsIGF0dHIsIHB0cik7Ci0JZHN0ICY9IHNyYzE7Ci0JZHN0IHw9IHNyYzI7CisJbWFzayA9IGF0b21fZ2V0X3NyY19kaXJlY3QoY3R4LCAoKGF0dHIgPj4gMykgJiA3KSwgcHRyKTsKKwlTREVCVUcoIiAgIG1hc2s6IDB4JTA4eCIsIG1hc2spOworCVNERUJVRygiICAgc3JjOiAiKTsKKwlzcmMgPSBhdG9tX2dldF9zcmMoY3R4LCBhdHRyLCBwdHIpOworCWRzdCAmPSBtYXNrOworCWRzdCB8PSBzcmM7CiAJU0RFQlVHKCIgICBkc3Q6ICIpOwogCWF0b21fcHV0X2RzdChjdHgsIGFyZywgYXR0ciwgJmRwdHIsIGRzdCwgc2F2ZWQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCmluZGV4IGZlMzU5YTIuLjA0YjI2OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKQEAgLTczLDggKzczLDE4IEBACiAjZGVmaW5lIEFUT01fUFBMTDEgICAgICAgICAgICAwCiAjZGVmaW5lIEFUT01fUFBMTDIgICAgICAgICAgICAxCiAjZGVmaW5lIEFUT01fRENQTEwgICAgICAgICAgICAyCisjZGVmaW5lIEFUT01fUFBMTDAgICAgICAgICAgICAyCisjZGVmaW5lIEFUT01fRVhUX1BMTDEgICAgICAgICA4CisjZGVmaW5lIEFUT01fRVhUX1BMTDIgICAgICAgICA5CisjZGVmaW5lIEFUT01fRVhUX0NMT0NLICAgICAgICAxMAogI2RlZmluZSBBVE9NX1BQTExfSU5WQUxJRCAgICAgMHhGRgogCisjZGVmaW5lIEVOQ09ERVJfUkVGQ0xLX1NSQ19QMVBMTCAgICAgICAwICAgICAgIAorI2RlZmluZSBFTkNPREVSX1JFRkNMS19TUkNfUDJQTEwgICAgICAgMQorI2RlZmluZSBFTkNPREVSX1JFRkNMS19TUkNfRENQTEwgICAgICAgMgorI2RlZmluZSBFTkNPREVSX1JFRkNMS19TUkNfRVhUQ0xLICAgICAgMworI2RlZmluZSBFTkNPREVSX1JFRkNMS19TUkNfSU5WQUxJRCAgICAgMHhGRgorCiAjZGVmaW5lIEFUT01fU0NBTEVSMSAgICAgICAgICAwCiAjZGVmaW5lIEFUT01fU0NBTEVSMiAgICAgICAgICAxCiAKQEAgLTE5Miw2ICsyMDIsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qSW1hZ2UgY2FuJ3QgYmUgdXBkYXRlZCwgd2hpbGUgRHJpdmVyIG5lZWRzIHRvIGNhcnJ5IHRoZSBuZXcgdGFibGUhICovCiB9QVRPTV9DT01NT05fVEFCTEVfSEVBREVSOwogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmUgc3RvcmVzIHRoZSBST00gaGVhZGVyLgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQogdHlwZWRlZiBzdHJ1Y3QgX0FUT01fUk9NX0hFQURFUgogewogICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJCXNIZWFkZXI7CkBAIC0yMjEsNiArMjM0LDkgQEAKIAkjZGVmaW5lCVVTSE9SVAl2b2lkKgogI2VuZGlmCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZXMgdXNlZCBpbiBDb21tYW5kLm10YiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKIHR5cGVkZWYgc3RydWN0IF9BVE9NX01BU1RFUl9MSVNUX09GX0NPTU1BTkRfVEFCTEVTewogICBVU0hPUlQgQVNJQ19Jbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRnVuY3Rpb24gVGFibGUsIHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMQogICBVU0hPUlQgR2V0RGlzcGxheVN1cmZhY2VTaXplOyAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgVXNlZCBieSBCaW9zIHdoZW4gZW5hYmxpbmcgSFcgSUNPTgpAQCAtMzEyLDYgKzMyOCw3IEBACiAjZGVmaW5lIFNldFVuaXBoeUluc3RhbmNlICAgICAgICAgICAgICAgICAgICAgICAgQVNJQ19TdGF0aWNQd3JNZ3RTdGF0dXNDaGFuZ2UKICNkZWZpbmUgSFBESW50ZXJydXB0U2VydmljZSAgICAgICAgICAgICAgICAgICAgICBSZWFkSFdBc3Npc3RlZEkyQ1N0YXR1cwogI2RlZmluZSBFbmFibGVWR0FfQWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgIEdldFNDTEtPdmVyTUNMS1JhdGlvCisjZGVmaW5lIEdldERpc3BPYmplY3RJbmZvICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlWVVWIAogCiB0eXBlZGVmIHN0cnVjdCBfQVRPTV9NQVNURVJfQ09NTUFORF9UQUJMRQogewpAQCAtMzU3LDYgKzM3NCwyNCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQogI2RlZmluZSBDT01QVVRFX01FTU9SWV9QTExfUEFSQU0gICAgICAgIDEKICNkZWZpbmUgQ09NUFVURV9FTkdJTkVfUExMX1BBUkFNICAgICAgICAyCisjZGVmaW5lIEFESlVTVF9NQ19TRVRUSU5HX1BBUkFNICAgICAgICAgMworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgQWRqdXN0TWVtb3J5Q29udHJvbGxlclRhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9BREpVU1RfTUVNT1JZX0NMT0NLX0ZSRVEKK3sKKyNpZiBBVE9NX0JJR19FTkRJQU4KKyAgVUxPTkcgdWxQb2ludGVyUmV0dXJuRmxhZzoxOyAgICAgIC8vIEJZVEVfM1s3XT0xIC0gUmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSByaWdodCBEYXRhIEJsb2NrOyBCWVRFXzNbN109MCAtIFByb2dyYW0gdGhlIHJpZ2h0IERhdGEgQmxvY2sgCisgIFVMT05HIHVsTWVtb3J5TW9kdWxlTnVtYmVyOjc7ICAgICAvLyBCWVRFXzNbNjowXQorICBVTE9ORyB1bENsb2NrRnJlcToyNDsKKyNlbHNlCisgIFVMT05HIHVsQ2xvY2tGcmVxOjI0OworICBVTE9ORyB1bE1lbW9yeU1vZHVsZU51bWJlcjo3OyAgICAgLy8gQllURV8zWzY6MF0KKyAgVUxPTkcgdWxQb2ludGVyUmV0dXJuRmxhZzoxOyAgICAgIC8vIEJZVEVfM1s3XT0xIC0gUmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSByaWdodCBEYXRhIEJsb2NrOyBCWVRFXzNbN109MCAtIFByb2dyYW0gdGhlIHJpZ2h0IERhdGEgQmxvY2sgCisjZW5kaWYKK31BVE9NX0FESlVTVF9NRU1PUllfQ0xPQ0tfRlJFUTsKKyNkZWZpbmUgUE9JTlRFUl9SRVRVUk5fRkxBRyAgICAgICAgICAgICAweDgwCiAKIHR5cGVkZWYgc3RydWN0IF9DT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlMKIHsKQEAgLTQ0MCw2ICs0NzUsMjYgQEAKICNlbmRpZgogfUNPTVBVVEVfTUVNT1JZX0VOR0lORV9QTExfUEFSQU1FVEVSU19WNDsKIAordHlwZWRlZiBzdHJ1Y3QgX0NPTVBVVEVfTUVNT1JZX0VOR0lORV9QTExfUEFSQU1FVEVSU19WNQoreworICB1bmlvbgorICB7CisgICAgQVRPTV9DT01QVVRFX0NMT0NLX0ZSRVEgIHVsQ2xvY2s7ICAgICAgICAgLy9JbnB1dCBQYXJhbWV0ZXIKKyAgICBBVE9NX1NfTVBMTF9GQl9ESVZJREVSICAgdWxGYkRpdjsgICAgICAgICAvL091dHB1dCBQYXJhbWV0ZXIKKyAgfTsKKyAgVUNIQVIgICB1Y1JlZkRpdjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvL091dHB1dCBQYXJhbWV0ZXIgICAgICAKKyAgVUNIQVIgICB1Y1Bvc3REaXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAvL091dHB1dCBQYXJhbWV0ZXIgICAgICAKKyAgdW5pb24KKyAgeworICAgIFVDSEFSICAgdWNDbnRsRmxhZzsgICAgICAgICAgICAgICAgICAgICAgIC8vT3V0cHV0IEZsYWdzCisgICAgVUNIQVIgICB1Y0lucHV0RmxhZzsgICAgICAgICAgICAgICAgICAgICAgLy9JbnB1dCBGbGFncy4gdWNJbnB1dEZsYWdbMF0gLSBTdHJvYmUoMSkvUGVyZm9ybWFuY2UoMCkgbW9kZQorICB9OworICBVQ0hBUiAgIHVjUmVzZXJ2ZWQ7ICAgICAgICAgICAgICAgICAgICAgICAKK31DT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlNfVjU7CisKKy8vIHVjSW5wdXRGbGFnCisjZGVmaW5lIEFUT01fUExMX0lOUFVUX0ZMQUdfUExMX1NUUk9CRV9NT0RFX0VOICAxICAgLy8gMS1TdHJvYmVNb2RlLCAwLVBlcmZvcm1hbmNlTW9kZQorCiB0eXBlZGVmIHN0cnVjdCBfRFlOQU1JQ0VfTUVNT1JZX1NFVFRJTkdTX1BBUkFNRVRFUgogewogICBBVE9NX0NPTVBVVEVfQ0xPQ0tfRlJFUSB1bENsb2NrOwpAQCAtNTgzLDYgKzYzOCw3IEBACiAjZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfRFBMSU5LUkFURV9NQVNLCQkJCTB4MDEKICNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19EUExJTktSQVRFXzFfNjJHSFoJCTB4MDAKICNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19EUExJTktSQVRFXzJfNzBHSFoJCTB4MDEKKyNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19EUExJTktSQVRFXzVfNDBHSFoJCTB4MDIKICNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19MSU5LX1NFTF9NQVNLCQkJCSAgMHgwNAogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX0xJTktBCQkJCQkJCQkgIDB4MDAKICNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19MSU5LQgkJCQkJCQkJICAweDA0CkBAIC02MDgsNiArNjY0LDkgQEAKICNkZWZpbmUgQVRPTV9FTkNPREVSX01PREVfVFYJCQkJCQkJCQkJCTEzCiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0NWCQkJCQkJCQkJCQkxNAogI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9DUlQJCQkJCQkJCQkJCTE1CisjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0RWTwkJCQkJCQkJCQkJMTYKKyNkZWZpbmUgQVRPTV9FTkNPREVSX01PREVfRFBfU1NUICAgICAgICAgICAgICAgICAgQVRPTV9FTkNPREVSX01PREVfRFAgICAgLy8gRm9yIERQMS4yCisjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0RQX01TVCAgICAgICAgICAgICAgICAgIDUgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBEUDEuMgogCiB0eXBlZGVmIHN0cnVjdCBfQVRPTV9ESUdfRU5DT0RFUl9DT05GSUdfVjIKIHsKQEAgLTY2MSw2ICs3MjAsNyBAQAogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ01EX0RQX0xJTktfVFJBSU5JTkdfU1RBUlQgICAgICAgMHgwOAogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ01EX0RQX0xJTktfVFJBSU5JTkdfUEFUVEVSTjEgICAgMHgwOQogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ01EX0RQX0xJTktfVFJBSU5JTkdfUEFUVEVSTjIgICAgMHgwYQorI2RlZmluZSBBVE9NX0VOQ09ERVJfQ01EX0RQX0xJTktfVFJBSU5JTkdfUEFUVEVSTjMgICAgMHgxMwogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ01EX0RQX0xJTktfVFJBSU5JTkdfQ09NUExFVEUgICAgMHgwYgogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ01EX0RQX1ZJREVPX09GRiAgICAgICAgICAgICAgICAgMHgwYwogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ01EX0RQX1ZJREVPX09OICAgICAgICAgICAgICAgICAgMHgwZApAQCAtNjcxLDI0ICs3MzEsMzQgQEAKICNkZWZpbmUgQVRPTV9FTkNPREVSX1NUQVRVU19MSU5LX1RSQUlOSU5HX0NPTVBMRVRFICAgIDB4MTAKICNkZWZpbmUgQVRPTV9FTkNPREVSX1NUQVRVU19MSU5LX1RSQUlOSU5HX0lOQ09NUExFVEUgIDB4MDAKIAorLy91Y1RhYmxlRm9ybWF0UmV2aXNpb249MQorLy91Y1RhYmxlQ29udGVudFJldmlzaW9uPTMKIC8vIEZvbGxvd2luZyBmdW5jdGlvbiBFTkFCTEUgc3ViLWZ1bmN0aW9uIHdpbGwgYmUgdXNlZCBieSBkcml2ZXIgd2hlbiBUTURTL0hETUkvTFZEUyBpcyB1c2VkLCBkaXNhYmxlIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCBieSBkcml2ZXIKIHR5cGVkZWYgc3RydWN0IF9BVE9NX0RJR19FTkNPREVSX0NPTkZJR19WMwogewogI2lmIEFUT01fQklHX0VORElBTgogICAgIFVDSEFSIHVjUmVzZXJ2ZWQxOjE7Ci0gICAgVUNIQVIgdWNEaWdTZWw6MzsgICAgICAgICAgICAgLy8gPTA6IERJR0EvQi9DL0QvRS9GCisgICAgVUNIQVIgdWNEaWdTZWw6MzsgICAgICAgICAgICAgLy8gPTAvMS8yLzMvNC81OiBESUcwLzEvMi8zLzQvNSAoSW4gcmVnaXN0ZXIgc3BlYyBhbHNvIHJlZmVyZWQgYXMgRElHQS9CL0MvRC9FL0YpCiAgICAgVUNIQVIgdWNSZXNlcnZlZDozOwogICAgIFVDSEFSIHVjRFBMaW5rUmF0ZToxOyAgICAgICAgIC8vID0wOiAxLjYyR2h6LCA9MTogMi43R2h6CiAjZWxzZQogICAgIFVDSEFSIHVjRFBMaW5rUmF0ZToxOyAgICAgICAgIC8vID0wOiAxLjYyR2h6LCA9MTogMi43R2h6CiAgICAgVUNIQVIgdWNSZXNlcnZlZDozOwotICAgIFVDSEFSIHVjRGlnU2VsOjM7ICAgICAgICAgICAgIC8vID0wOiBESUdBL0IvQy9EL0UvRgorICAgIFVDSEFSIHVjRGlnU2VsOjM7ICAgICAgICAgICAgIC8vID0wLzEvMi8zLzQvNTogRElHMC8xLzIvMy80LzUgKEluIHJlZ2lzdGVyIHNwZWMgYWxzbyByZWZlcmVkIGFzIERJR0EvQi9DL0QvRS9GKQogICAgIFVDSEFSIHVjUmVzZXJ2ZWQxOjE7CiAjZW5kaWYKIH1BVE9NX0RJR19FTkNPREVSX0NPTkZJR19WMzsKIAorI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1YzX0RQTElOS1JBVEVfTUFTSwkJCQkweDAzCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfVjNfRFBMSU5LUkFURV8xXzYyR0haCQkgIDB4MDAKKyNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19WM19EUExJTktSQVRFXzJfNzBHSFoJCSAgMHgwMQogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1YzX0VOQ09ERVJfU0VMCQkJCQkgIDB4NzAKLQorI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1YzX0RJRzBfRU5DT0RFUgkJCQkJICAweDAwCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfVjNfRElHMV9FTkNPREVSCQkJCQkgIDB4MTAKKyNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19WM19ESUcyX0VOQ09ERVIJCQkJCSAgMHgyMAorI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1YzX0RJRzNfRU5DT0RFUgkJCQkJICAweDMwCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfVjNfRElHNF9FTkNPREVSCQkJCQkgIDB4NDAKKyNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19WM19ESUc1X0VOQ09ERVIJCQkJCSAgMHg1MAogCiB0eXBlZGVmIHN0cnVjdCBfRElHX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzCiB7CkBAIC03MDcsNiArNzc3LDU2IEBACiAgIFVDSEFSIHVjUmVzZXJ2ZWQ7CiB9RElHX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzOwogCisvL3VjVGFibGVGb3JtYXRSZXZpc2lvbj0xCisvL3VjVGFibGVDb250ZW50UmV2aXNpb249NAorLy8gc3RhcnQgZnJvbSBOSSAgICAgICAgICAgCisvLyBGb2xsb3dpbmcgZnVuY3Rpb24gRU5BQkxFIHN1Yi1mdW5jdGlvbiB3aWxsIGJlIHVzZWQgYnkgZHJpdmVyIHdoZW4gVE1EUy9IRE1JL0xWRFMgaXMgdXNlZCwgZGlzYWJsZSBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgYnkgZHJpdmVyCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9ESUdfRU5DT0RFUl9DT05GSUdfVjQKK3sKKyNpZiBBVE9NX0JJR19FTkRJQU4KKyAgICBVQ0hBUiB1Y1Jlc2VydmVkMToxOworICAgIFVDSEFSIHVjRGlnU2VsOjM7ICAgICAgICAgICAgIC8vID0wLzEvMi8zLzQvNTogRElHMC8xLzIvMy80LzUgKEluIHJlZ2lzdGVyIHNwZWMgYWxzbyByZWZlcmVkIGFzIERJR0EvQi9DL0QvRS9GKQorICAgIFVDSEFSIHVjUmVzZXJ2ZWQ6MjsKKyAgICBVQ0hBUiB1Y0RQTGlua1JhdGU6MjsgICAgICAgICAvLyA9MDogMS42MkdoeiwgPTE6IDIuN0doeiwgMj01LjRHaHogICAgPD0gQ2hhbmdlZCBjb21wYXJpbmcgdG8gcHJldmlvdXMgdmVyc2lvbgorI2Vsc2UKKyAgICBVQ0hBUiB1Y0RQTGlua1JhdGU6MjsgICAgICAgICAvLyA9MDogMS42MkdoeiwgPTE6IDIuN0doeiwgMj01LjRHaHogICAgPD0gQ2hhbmdlZCBjb21wYXJpbmcgdG8gcHJldmlvdXMgdmVyc2lvbgorICAgIFVDSEFSIHVjUmVzZXJ2ZWQ6MjsKKyAgICBVQ0hBUiB1Y0RpZ1NlbDozOyAgICAgICAgICAgICAvLyA9MC8xLzIvMy80LzU6IERJRzAvMS8yLzMvNC81IChJbiByZWdpc3RlciBzcGVjIGFsc28gcmVmZXJlZCBhcyBESUdBL0IvQy9EL0UvRikKKyAgICBVQ0hBUiB1Y1Jlc2VydmVkMToxOworI2VuZGlmCit9QVRPTV9ESUdfRU5DT0RFUl9DT05GSUdfVjQ7CisKKyNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19WNF9EUExJTktSQVRFX01BU0sJCQkJMHgwMworI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1Y0X0RQTElOS1JBVEVfMV82MkdIWgkJICAweDAwCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfVjRfRFBMSU5LUkFURV8yXzcwR0haCQkgIDB4MDEKKyNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19WNF9EUExJTktSQVRFXzVfNDBHSFoJCSAgMHgwMgorI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1Y0X0VOQ09ERVJfU0VMCQkJCQkgIDB4NzAKKyNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19WNF9ESUcwX0VOQ09ERVIJCQkJCSAgMHgwMAorI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1Y0X0RJRzFfRU5DT0RFUgkJCQkJICAweDEwCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfVjRfRElHMl9FTkNPREVSCQkJCQkgIDB4MjAKKyNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19WNF9ESUczX0VOQ09ERVIJCQkJCSAgMHgzMAorI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1Y0X0RJRzRfRU5DT0RFUgkJCQkJICAweDQwCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfVjRfRElHNV9FTkNPREVSCQkJCQkgIDB4NTAKKwordHlwZWRlZiBzdHJ1Y3QgX0RJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WNAoreworICBVU0hPUlQgdXNQaXhlbENsb2NrOyAgICAgIC8vIGluIDEwS0h6OyBmb3IgYmlvcyBjb252ZW5pZW50CisgIHVuaW9ueworICBBVE9NX0RJR19FTkNPREVSX0NPTkZJR19WNCBhY0NvbmZpZzsKKyAgVUNIQVIgdWNDb25maWc7CisgIH07CisgIFVDSEFSIHVjQWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBVQ0hBUiB1Y0VuY29kZXJNb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0wOiBEUCAgIGVuY29kZXIgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MTogTFZEUyBlbmNvZGVyICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0yOiBEVkkgIGVuY29kZXIgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0zOiBIRE1JIGVuY29kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9NDogU0RWTyBlbmNvZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTU6IERQIGF1ZGlvCisgIFVDSEFSIHVjTGFuZU51bTsgICAgICAgICAgLy8gaG93IG1hbnkgbGFuZXMgdG8gZW5hYmxlCisgIFVDSEFSIHVjQml0UGVyQ29sb3I7ICAgICAgLy8gb25seSB2YWxpZCBmb3IgRFAgbW9kZSB3aGVuIHVjQWN0aW9uID0gQVRPTV9FTkNPREVSX0NNRF9TRVRVUAorICBVQ0hBUiB1Y0hQRF9JRDsgICAgICAgICAgIC8vIEhQRCBJRCAoMS02KS4gPTAgbWVhbnMgdG8gc2tpcCBIRFAgcHJvZ3JhbW1pbmcuIE5ldyBjb21wYXJpbmcgdG8gcHJldmlvdXMgdmVyc2lvbgorfURJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WNDsKIAogLy8gZGVmaW5lIHVjQml0UGVyQ29sb3I6IAogI2RlZmluZSBQQU5FTF9CUENfVU5ERUZJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMApAQCAtODkzLDYgKzEwMTMsNyBAQAogI2VuZGlmCiB9QVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1YzOwogCisKIHR5cGVkZWYgc3RydWN0IF9ESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzCiB7CiAJdW5pb24KQEAgLTkzNiw2ICsxMDU3LDE0OSBAQAogI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WM19UUkFOU01JVFRFUjIgICAgICAgICAgIAkweDQwCS8vQ0QKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjNfVFJBTlNNSVRURVIzICAgICAgICAgICAJMHg4MAkvL0VGCiAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IFVOSVBIWVRyYW5zbWl0dGVyQ29udHJvbFRhYmxlIFYxLjQKKy8vIEFTSUMgRmFtaWxpZXM6IE5JCisvLyB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MQorLy8gdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj00CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9EUF9WU19NT0RFX1Y0Cit7CisgIFVDSEFSIHVjTGFuZVNlbDsKKyAJdW5pb24KKyAJeyAgCisgCSAgVUNIQVIgdWNMYW5lU2V0OworIAkgIHN0cnVjdCB7CisjaWYgQVRPTV9CSUdfRU5ESUFOCisgCQkgIFVDSEFSIHVjUE9TVF9DVVJTT1IyOjI7ICAgICAgICAgLy9CaXRbNzo2XSBQb3N0IEN1cnNvcjIgTGV2ZWwgICAgICA8PSBOZXcgaW4gVjQKKyAJCSAgVUNIQVIgdWNQUkVfRU1QSEFTSVM6MzsgICAgICAgICAvL0JpdFs1OjNdIFByZS1lbXBoYXNpcyBMZXZlbAorIAkJICBVQ0hBUiB1Y1ZPTFRBR0VfU1dJTkc6MzsgICAgICAgIC8vQml0WzI6MF0gVm9sdGFnZSBTd2luZyBMZXZlbAorI2Vsc2UKKyAJCSAgVUNIQVIgdWNWT0xUQUdFX1NXSU5HOjM7ICAgICAgICAvL0JpdFsyOjBdIFZvbHRhZ2UgU3dpbmcgTGV2ZWwKKyAJCSAgVUNIQVIgdWNQUkVfRU1QSEFTSVM6MzsgICAgICAgICAvL0JpdFs1OjNdIFByZS1lbXBoYXNpcyBMZXZlbAorIAkJICBVQ0hBUiB1Y1BPU1RfQ1VSU09SMjoyOyAgICAgICAgIC8vQml0Wzc6Nl0gUG9zdCBDdXJzb3IyIExldmVsICAgICAgPD0gTmV3IGluIFY0CisjZW5kaWYKKyAJCX07CisgCX07IAorfUFUT01fRFBfVlNfTU9ERV9WNDsKKyAKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RJR19UUkFOU01JVFRFUl9DT05GSUdfVjQKK3sKKyNpZiBBVE9NX0JJR19FTkRJQU4KKyAgVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOyAgICAgICAgIC8vYml0Nzo2OiA9MCBEaWcgVHJhbnNtaXR0ZXIgMSAoIFVuaXBoeSBBQiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgPTEgRGlnIFRyYW5zbWl0dGVyIDIgKCBVbmlwaHkgQ0QgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgID0yIERpZyBUcmFuc21pdHRlciAzICggVW5pcGh5IEVGICkKKyAgVUNIQVIgdWNSZWZDbGtTb3VyY2U6MjsgICAgICAgICAgIC8vYml0NTo0OiBQUExMMSA9MCwgUFBMTDI9MSwgRENQTEw9MiwgRVhUX0NMSz0zICAgPD0gTmV3CisgIFVDSEFSIHVjRW5jb2RlclNlbDoxOyAgICAgICAgICAgICAvL2JpdDM9MDogRGF0YS9DbGsgcGF0aCBzb3VyY2UgZnJvbSBESUdBL0MvRS4gPTE6IERhdGEvY2xrIHBhdGggc291cmNlIGZyb20gRElHQi9EL0YKKyAgVUNIQVIgdWNMaW5rU2VsOjE7ICAgICAgICAgICAgICAgIC8vYml0Mj0wOiBVbmlwaHkgTElOS0Egb3IgQyBvciBFIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTAuIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTEsIGl0IG1lYW5zIG1hc3RlciBsaW5rIG9mIGR1YWwgbGluayBpcyBBIG9yIEMgb3IgRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgPTE6IFVuaXBoeSBMSU5LQiBvciBEIG9yIEYgd2hlbiBmRHVhbExpbmtDb25uZWN0b3I9MC4gd2hlbiBmRHVhbExpbmtDb25uZWN0b3I9MSwgaXQgbWVhbnMgbWFzdGVyIGxpbmsgb2YgZHVhbCBsaW5rIGlzIEIgb3IgRCBvciBGCisgIFVDSEFSIGZDb2hlcmVudE1vZGU6MTsgICAgICAgICAgICAvL2JpdDE9MTogQ29oZXJlbnQgTW9kZSAoIGZvciBEVkkvSERNSSBtb2RlICkKKyAgVUNIQVIgZkR1YWxMaW5rQ29ubmVjdG9yOjE7ICAgICAgIC8vYml0MD0xOiBEdWFsIExpbmsgRFZJIGNvbm5lY3RvcgorI2Vsc2UKKyAgVUNIQVIgZkR1YWxMaW5rQ29ubmVjdG9yOjE7ICAgICAgIC8vYml0MD0xOiBEdWFsIExpbmsgRFZJIGNvbm5lY3RvcgorICBVQ0hBUiBmQ29oZXJlbnRNb2RlOjE7ICAgICAgICAgICAgLy9iaXQxPTE6IENvaGVyZW50IE1vZGUgKCBmb3IgRFZJL0hETUkgbW9kZSApCisgIFVDSEFSIHVjTGlua1NlbDoxOyAgICAgICAgICAgICAgICAvL2JpdDI9MDogVW5pcGh5IExJTktBIG9yIEMgb3IgRSB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0wLiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0xLCBpdCBtZWFucyBtYXN0ZXIgbGluayBvZiBkdWFsIGxpbmsgaXMgQSBvciBDIG9yIEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgID0xOiBVbmlwaHkgTElOS0Igb3IgRCBvciBGIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTAuIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTEsIGl0IG1lYW5zIG1hc3RlciBsaW5rIG9mIGR1YWwgbGluayBpcyBCIG9yIEQgb3IgRgorICBVQ0hBUiB1Y0VuY29kZXJTZWw6MTsgICAgICAgICAgICAgLy9iaXQzPTA6IERhdGEvQ2xrIHBhdGggc291cmNlIGZyb20gRElHQS9DL0UuID0xOiBEYXRhL2NsayBwYXRoIHNvdXJjZSBmcm9tIERJR0IvRC9GCisgIFVDSEFSIHVjUmVmQ2xrU291cmNlOjI7ICAgICAgICAgICAvL2JpdDU6NDogUFBMTDEgPTAsIFBQTEwyPTEsIERDUExMPTIsIEVYVF9DTEs9MyAgIDw9IE5ldworICBVQ0hBUiB1Y1RyYW5zbWl0dGVyU2VsOjI7ICAgICAgICAgLy9iaXQ3OjY6ID0wIERpZyBUcmFuc21pdHRlciAxICggVW5pcGh5IEFCICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICA9MSBEaWcgVHJhbnNtaXR0ZXIgMiAoIFVuaXBoeSBDRCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgPTIgRGlnIFRyYW5zbWl0dGVyIDMgKCBVbmlwaHkgRUYgKQorI2VuZGlmCit9QVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1Y0OworCit0eXBlZGVmIHN0cnVjdCBfRElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUEFSQU1FVEVSU19WNAoreworICB1bmlvbgorICB7CisgICAgVVNIT1JUIHVzUGl4ZWxDbG9jazsJCS8vIGluIDEwS0h6OyBmb3IgYmlvcyBjb252ZW5pZW50CisgICAgVVNIT1JUIHVzSW5pdEluZm87CQkJLy8gd2hlbiBpbml0IHVuaXBoeSxsb3dlciA4Yml0IGlzIHVzZWQgZm9yIGNvbm5lY3RvciB0eXBlIGRlZmluZWQgaW4gb2JqZWN0aWQuaAorICAgIEFUT01fRFBfVlNfTU9ERV9WNCBhc01vZGU7IC8vIERQIFZvbHRhZ2Ugc3dpbmcgbW9kZSAgICAgUmVkZWZpbmVkIGNvbXBhcmluZyB0byBwcmV2aW91cyB2ZXJzaW9uCisgIH07CisgIHVuaW9uCisgIHsKKyAgQVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1Y0IGFjQ29uZmlnOworICBVQ0hBUiB1Y0NvbmZpZzsKKyAgfTsKKyAgVUNIQVIgdWNBY3Rpb247CQkJCSAgICAvLyBkZWZpbmUgYXMgQVRPTV9UUkFOU01JVEVSX0FDVElPTl9YWFgJICAgICAgICAgICAgICAgICAgICAgICAgCisgIFVDSEFSIHVjTGFuZU51bTsKKyAgVUNIQVIgdWNSZXNlcnZlZFszXTsKK31ESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QQVJBTUVURVJTX1Y0OworCisvL3VjQ29uZmlnIAorLy9CaXQwCisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1Y0X0RVQUxfTElOS19DT05ORUNUT1IJCQkweDAxCisvL0JpdDEKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjRfQ09IRVJFTlQJCQkJICAgICAgICAgIDB4MDIKKy8vQml0MgorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WNF9MSU5LX1NFTF9NQVNLCQkgICAgICAgIDB4MDQKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjRfTElOS0EgIAkJCSAgICAgICAgICAgIDB4MDAJCQkKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjRfTElOS0IJCQkJICAgICAgICAgICAgMHgwNAorLy8gQml0MworI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WNF9FTkNPREVSX1NFTF9NQVNLCSAgICAgICAgMHgwOAorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WNF9ESUcxX0VOQ09ERVIJCSAgICAgICAgICAweDAwCQkJCSAKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjRfRElHMl9FTkNPREVSCQkgICAgICAgICAgMHgwOAkJCQkKKy8vIEJpdDU6NAorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WNF9SRUZDTEtfU0VMX01BU0sgCSAgICAgICAgMHgzMAorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WNF9QMVBMTCAgICAgICAgIAkJICAgICAgICAweDAwCisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1Y0X1AyUExMCQkgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WNF9EQ1BMTAkJICAgICAgICAgICAgICAgIDB4MjAgICAvLyBOZXcgaW4gX1Y0CisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1Y0X1JFRkNMS19TUkNfRVhUICAgICAgICAgICAweDMwICAgLy8gQ2hhbmdlZCBjb21wYXJpbmcgdG8gVjMKKy8vIEJpdDc6NgorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WNF9UUkFOU01JVFRFUl9TRUxfTUFTSyAgICAgMHhDMAorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WNF9UUkFOU01JVFRFUjEgICAgICAgICAgIAkweDAwCS8vQUIKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjRfVFJBTlNNSVRURVIyICAgICAgICAgICAJMHg0MAkvL0NECisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1Y0X1RSQU5TTUlUVEVSMyAgICAgICAgICAgCTB4ODAJLy9FRgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZXMgdXNlZCBieSBFeHRlcm5hbEVuY29kZXJDb250cm9sVGFibGUgVjEuMworLy8gQVNJQyBGYW1pbGllczogRXZlcmdyZWVuLCBMbGFubywgTkkKKy8vIHVjVGFibGVGb3JtYXRSZXZpc2lvbj0xCisvLyB1Y1RhYmxlQ29udGVudFJldmlzaW9uPTMKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKwordHlwZWRlZiBzdHJ1Y3QgX0VYVEVSTkFMX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzCit7CisgIHVuaW9ueworICBVU0hPUlQgdXNQaXhlbENsb2NrOyAgICAgIC8vIHBpeGVsIGNsb2NrIGluIDEwS2h6LCB2YWxpZCB3aGVuIHVjQWN0aW9uPVNFVFVQL0VOQUJMRV9PVVRQVVQgCisgIFVTSE9SVCB1c0Nvbm5lY3RvcklkOyAgICAgLy8gY29ubmVjdG9yIGlkLCB2YWxpZCB3aGVuIHVjQWN0aW9uID0gSU5JVAorICB9OworICBVQ0hBUiAgdWNDb25maWc7ICAgICAgICAgIC8vIGluZGljYXRlIHdoaWNoIGVuY29kZXIsIGFuZCBEUCBsaW5rIHJhdGUgd2hlbiB1Y0FjdGlvbiA9IFNFVFVQL0VOQUJMRV9PVVRQVVQgIAorICBVQ0hBUiAgdWNBY3Rpb247ICAgICAgICAgIC8vIAorICBVQ0hBUiAgdWNFbmNvZGVyTW9kZTsgICAgIC8vIGVuY29kZXIgbW9kZSwgb25seSB1c2VkIHdoZW4gdWNBY3Rpb24gPSBTRVRVUC9FTkFCTEVfT1VUUFVUCisgIFVDSEFSICB1Y0xhbmVOdW07ICAgICAgICAgLy8gbGFuZSBudW1iZXIsIG9ubHkgdXNlZCB3aGVuIHVjQWN0aW9uID0gU0VUVVAvRU5BQkxFX09VVFBVVCAgCisgIFVDSEFSICB1Y0JpdFBlckNvbG9yOyAgICAgLy8gb3V0cHV0IGJpdCBwZXIgY29sb3IsIG9ubHkgdmFsaWQgd2hlbiB1Y0FjdGlvbiA9IFNFVFVQL0VOQUJMRV9PVVRQVVQgYW5kIHVjRW5jb2RlTW9kZT0gRFAKKyAgVUNIQVIgIHVjUmVzZXJ2ZWQ7ICAgICAgICAKK31FWFRFUk5BTF9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMzsKKworLy8gdWNBY3Rpb24KKyNkZWZpbmUgRVhURVJOQUxfRU5DT0RFUl9BQ1RJT05fVjNfRElTQUJMRV9PVVRQVVQgICAgICAgICAweDAwCisjZGVmaW5lIEVYVEVSTkFMX0VOQ09ERVJfQUNUSU9OX1YzX0VOQUJMRV9PVVRQVVQgICAgICAgICAgMHgwMQorI2RlZmluZSBFWFRFUk5BTF9FTkNPREVSX0FDVElPTl9WM19FTkNPREVSX0lOSVQgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgRVhURVJOQUxfRU5DT0RFUl9BQ1RJT05fVjNfRU5DT0RFUl9TRVRVUCAgICAgICAgICAweDBmCisjZGVmaW5lIEVYVEVSTkFMX0VOQ09ERVJfQUNUSU9OX1YzX0VOQ09ERVJfQkxBTktJTkdfT0ZGICAgMHgxMAorI2RlZmluZSBFWFRFUk5BTF9FTkNPREVSX0FDVElPTl9WM19FTkNPREVSX0JMQU5LSU5HICAgICAgIDB4MTEKKyNkZWZpbmUgRVhURVJOQUxfRU5DT0RFUl9BQ1RJT05fVjNfREFDTE9BRF9ERVRFQ1RJT04gICAgICAweDEyCisKKy8vIHVjQ29uZmlnCisjZGVmaW5lIEVYVEVSTkFMX0VOQ09ERVJfQ09ORklHX1YzX0RQTElOS1JBVEVfTUFTSwkJCQkweDAzCisjZGVmaW5lIEVYVEVSTkFMX0VOQ09ERVJfQ09ORklHX1YzX0RQTElOS1JBVEVfMV82MkdIWgkJICAweDAwCisjZGVmaW5lIEVYVEVSTkFMX0VOQ09ERVJfQ09ORklHX1YzX0RQTElOS1JBVEVfMl83MEdIWgkJICAweDAxCisjZGVmaW5lIEVYVEVSTkFMX0VOQ09ERVJfQ09ORklHX1YzX0RQTElOS1JBVEVfNV80MEdIWgkJICAweDAyCisjZGVmaW5lIEVYVEVSTkFMX0VOQ09ERVJfQ09ORklHX1YzX0VOQ09ERVJfU0VMX01BU0sJCSAgICAweDcwCisjZGVmaW5lIEVYVEVSTkFMX0VOQ09ERVJfQ09ORklHX1YzX0VOQ09ERVIxCQkgICAgICAgICAgICAweDAwCisjZGVmaW5lIEVYVEVSTkFMX0VOQ09ERVJfQ09ORklHX1YzX0VOQ09ERVIyCQkgICAgICAgICAgICAweDEwCisjZGVmaW5lIEVYVEVSTkFMX0VOQ09ERVJfQ09ORklHX1YzX0VOQ09ERVIzCQkgICAgICAgICAgICAweDIwCisKK3R5cGVkZWYgc3RydWN0IF9FWFRFUk5BTF9FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTl9WMworeworICBFWFRFUk5BTF9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMyBzRXh0RW5jb2RlcjsKKyAgVUxPTkcgdWxSZXNlcnZlZFsyXTsKK31FWFRFUk5BTF9FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTl9WMzsKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCiAvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgREFDMU91cHV0Q29udHJvbFRhYmxlCiAvLyAgICAgICAgICAgICAgICAgICAgREFDMk91cHV0Q29udHJvbFRhYmxlCkBAIC0xMTQyLDYgKzE0MDYsNyBAQAogI2RlZmluZSBQSVhFTF9DTE9DS19WNF9NSVNDX1NTX0VOQUJMRSAgICAgICAgICAgICAgIDB4MTAKICNkZWZpbmUgUElYRUxfQ0xPQ0tfVjRfTUlTQ19DT0hFUkVOVF9NT0RFICAgICAgICAgICAweDIwCiAKKwogdHlwZWRlZiBzdHJ1Y3QgX1BJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjMKIHsKICAgVVNIT1JUIHVzUGl4ZWxDbG9jazsgICAgICAgICAgICAgICAgLy8gaW4gMTBrSHogdW5pdDsgZm9yIGJpb3MgY29udmVuaWVudCA9IChSZWZDbGsqRkJfRGl2KS8oUmVmX0RpdipQb3N0X0RpdikKQEAgLTEyMDIsNiArMTQ2Nyw1NSBAQAogI2RlZmluZSBQSVhFTF9DTE9DS19WNV9NSVNDX0hETUlfMzJCUFAgICAgICAgICAgICAgIDB4MDgKICNkZWZpbmUgUElYRUxfQ0xPQ0tfVjVfTUlTQ19SRUZfRElWX1NSQyAgICAgICAgICAgICAweDEwCiAKK3R5cGVkZWYgc3RydWN0IF9DUlRDX1BJWEVMX0NMT0NLX0ZSRVEKK3sKKyNpZiBBVE9NX0JJR19FTkRJQU4KKyAgVUxPTkcgIHVjQ1JUQzo4OyAgICAgICAgICAgIC8vIEFUT01fQ1JUQzF+NiwgaW5kaWNhdGUgdGhlIENSVEMgY29udHJvbGxlciB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyaXZlIHRoZSBwaXhlbCBjbG9jay4gbm90IHVzZWQgZm9yIERDUExMIGNhc2UuCisgIFVMT05HICB1bFBpeGVsQ2xvY2s6MjQ7ICAgICAvLyB0YXJnZXQgdGhlIHBpeGVsIGNsb2NrIHRvIGRyaXZlIHRoZSBDUlRDIHRpbWluZy4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIG1lYW5zIGRpc2FibGUgUFBMTC9EQ1BMTC4gRXhwYW5kZWQgdG8gMjQgYml0cyBjb21wYXJpbmcgdG8gcHJldmlvdXMgdmVyc2lvbi4KKyNlbHNlCisgIFVMT05HICB1bFBpeGVsQ2xvY2s6MjQ7ICAgICAvLyB0YXJnZXQgdGhlIHBpeGVsIGNsb2NrIHRvIGRyaXZlIHRoZSBDUlRDIHRpbWluZy4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIG1lYW5zIGRpc2FibGUgUFBMTC9EQ1BMTC4gRXhwYW5kZWQgdG8gMjQgYml0cyBjb21wYXJpbmcgdG8gcHJldmlvdXMgdmVyc2lvbi4KKyAgVUxPTkcgIHVjQ1JUQzo4OyAgICAgICAgICAgIC8vIEFUT01fQ1JUQzF+NiwgaW5kaWNhdGUgdGhlIENSVEMgY29udHJvbGxlciB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyaXZlIHRoZSBwaXhlbCBjbG9jay4gbm90IHVzZWQgZm9yIERDUExMIGNhc2UuCisjZW5kaWYKK31DUlRDX1BJWEVMX0NMT0NLX0ZSRVE7CisKK3R5cGVkZWYgc3RydWN0IF9QSVhFTF9DTE9DS19QQVJBTUVURVJTX1Y2Cit7CisgIHVuaW9ueworICAgIENSVENfUElYRUxfQ0xPQ0tfRlJFUSB1bENydGNQY2xrRnJlcTsgICAgLy8gcGl4ZWwgY2xvY2sgYW5kIENSVEMgaWQgZnJlcXVlbmN5IAorICAgIFVMT05HIHVsRGlzcEVuZ0Nsa0ZyZXE7ICAgICAgICAgICAgICAgICAgLy8gZGlzcGNsayBmcmVxdWVuY3kKKyAgfTsKKyAgVVNIT1JUIHVzRmJEaXY7ICAgICAgICAgICAgLy8gZmVlZGJhY2sgZGl2aWRlciBpbnRlZ2VyIHBhcnQuIAorICBVQ0hBUiAgdWNQb3N0RGl2OyAgICAgICAgICAvLyBwb3N0IGRpdmlkZXIuIAorICBVQ0hBUiAgdWNSZWZEaXY7ICAgICAgICAgICAvLyBSZWZlcmVuY2UgZGl2aWRlcgorICBVQ0hBUiAgdWNQcGxsOyAgICAgICAgICAgICAvLyBBVE9NX1BQTEwxL0FUT01fUFBMTDIvQVRPTV9EQ1BMTAorICBVQ0hBUiAgdWNUcmFuc21pdHRlcklEOyAgICAvLyBBU0lDIGVuY29kZXIgaWQgZGVmaW5lZCBpbiBvYmplY3RJZC5oLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5kaWNhdGUgd2hpY2ggZ3JhcGhpYyBlbmNvZGVyIHdpbGwgYmUgdXNlZC4gCisgIFVDSEFSICB1Y0VuY29kZXJNb2RlOyAgICAgIC8vIEVuY29kZXIgbW9kZTogCisgIFVDSEFSICB1Y01pc2NJbmZvOyAgICAgICAgIC8vIGJpdFswXT0gRm9yY2UgcHJvZ3JhbSBQUExMIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXRbMV09IHdoZW4gVkdBIHRpbWluZyBpcyB1c2VkLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0WzM6Ml09IEhETUkgcGFuZWwgYml0IGRlcHRoOiA9MDogMjRicHAgPTE6MzBicHAsID0yOjMyYnBwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdFs0XT0gUmVmQ2xvY2sgc291cmNlIGZvciBQUExMLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTA6IFhUTEFJTiggZGVmYXVsdCBtb2RlICkKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MTogb3RoZXIgZXh0ZXJuYWwgY2xvY2sgc291cmNlLCB3aGljaCBpcyBwcmUtZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBieSBWQklPUyBkZXBlbmQgb24gdGhlIGZlYXR1cmUgcmVxdWlyZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdFs3OjVdOiByZXNlcnZlZC4KKyAgVUxPTkcgIHVsRmJEaXZEZWNGcmFjOyAgICAgLy8gMjAgYml0IGZlZWRiYWNrIGRpdmlkZXIgZGVjaW1hbCBmcmFjdGlvbiBwYXJ0LCByYW5nZSBmcm9tIDF+OTk5OTk5ICggMC4wMDAwMDEgdG8gMC45OTk5OTkgKQorCit9UElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19WNjsKKworI2RlZmluZSBQSVhFTF9DTE9DS19WNl9NSVNDX0ZPUkNFX1BST0dfUFBMTAkJCQkJMHgwMQorI2RlZmluZSBQSVhFTF9DTE9DS19WNl9NSVNDX1ZHQV9NT0RFCQkJCQkJCQkweDAyCisjZGVmaW5lIFBJWEVMX0NMT0NLX1Y2X01JU0NfSERNSV9CUFBfTUFTSyAgICAgICAgICAgMHgwYworI2RlZmluZSBQSVhFTF9DTE9DS19WNl9NSVNDX0hETUlfMjRCUFAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgUElYRUxfQ0xPQ0tfVjZfTUlTQ19IRE1JXzM2QlBQICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFBJWEVMX0NMT0NLX1Y2X01JU0NfSERNSV8zMEJQUCAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBQSVhFTF9DTE9DS19WNl9NSVNDX0hETUlfNDhCUFAgICAgICAgICAgICAgIDB4MGMKKyNkZWZpbmUgUElYRUxfQ0xPQ0tfVjZfTUlTQ19SRUZfRElWX1NSQyAgICAgICAgICAgICAweDEwCisKIHR5cGVkZWYgc3RydWN0IF9HRVRfRElTUF9QTExfU1RBVFVTX0lOUFVUX1BBUkFNRVRFUlNfVjIKIHsKICAgUElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19WMyBzRGlzcENsa0lucHV0OwpAQCAtMTI0MSwxMCArMTU1NSwxMSBAQAogdHlwZWRlZiBzdHJ1Y3QgX0FESlVTVF9ESVNQTEFZX1BMTF9JTlBVVF9QQVJBTUVURVJTX1YzCiB7CiAJVVNIT1JUIHVzUGl4ZWxDbG9jazsgICAgICAgICAgICAgICAgICAgIC8vIHRhcmdldCBwaXhlbCBjbG9jawotCVVDSEFSIHVjVHJhbnNtaXR0ZXJJRDsgICAgICAgICAgICAgICAgICAvLyB0cmFuc21pdHRlciBpZCBkZWZpbmVkIGluIG9iamVjdGlkLmgKKwlVQ0hBUiB1Y1RyYW5zbWl0dGVySUQ7ICAgICAgICAgICAgICAgICAgLy8gR1BVIHRyYW5zbWl0dGVyIGlkIGRlZmluZWQgaW4gb2JqZWN0aWQuaAogCVVDSEFSIHVjRW5jb2RlTW9kZTsgICAgICAgICAgICAgICAgICAgICAvLyBlbmNvZGVyIG1vZGU6IENSVCwgTFZEUywgRFAsIFRNRFMgb3IgSERNSQogICBVQ0hBUiB1Y0Rpc3BQbGxDb25maWc7ICAgICAgICAgICAgICAgICAvLyBkaXNwbGF5IHBsbCBjb25maWd1cmUgcGFyYW1ldGVyIGRlZmluZWQgYXMgZm9sbG93aW5nIERJU1BQTExfQ09ORklHX1hYWFgKLQlVQ0hBUiB1Y1Jlc2VydmVkWzNdOworICBVQ0hBUiB1Y0V4dFRyYW5zbWl0dGVySUQ7ICAgICAgICAgICAgICAgLy8gZXh0ZXJuYWwgZW5jb2RlciBpZC4KKwlVQ0hBUiB1Y1Jlc2VydmVkWzJdOwogfUFESlVTVF9ESVNQTEFZX1BMTF9JTlBVVF9QQVJBTUVURVJTX1YzOwogCiAvLyB1c0Rpc3BQbGxDb25maWcgdjEuMiBmb3IgUm9hZFJ1bm5lcgpAQCAtMTMxNCw3ICsxNjI5LDcgQEAKIHR5cGVkZWYgc3RydWN0IF9SRUFEX0VESURfRlJPTV9IV19JMkNfREFUQV9QQVJBTUVURVJTCiB7CiAgIFVTSE9SVCAgICB1c1ByZXNjYWxlOyAgICAgICAgIC8vUmF0aW8gYmV0d2VlbiBFbmdpbmUgY2xvY2sgYW5kIEkyQyBjbG9jawotICBVU0hPUlQgICAgdXNWUkFNQWRkcmVzczsgICAgICAvL0FkcmVzcyBpbiBGcmFtZSBCdWZmZXIgd2hlcmUgdG8gcGFjZSByYXcgRURJRAorICBVU0hPUlQgICAgdXNWUkFNQWRkcmVzczsgICAgICAvL0FkZHJlc3MgaW4gRnJhbWUgQnVmZmVyIHdoZXJlIHRvIHBhY2UgcmF3IEVESUQKICAgVVNIT1JUICAgIHVzU3RhdHVzOyAgICAgICAgICAgLy9XaGVuIHVzZSBvdXRwdXQ6IGxvd2VyIGJ5dGUgRURJRCBjaGVja3N1bSwgaGlnaCBieXRlIGhhcmR3YXJlIHN0YXR1cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1dIZW4gdXNlIGlucHV0OiAgbG93ZXIgYnl0ZSBhcyAnYnl0ZSB0byByZWFkJzpjdXJyZW50bHkgbGltaXRlZCB0byAxMjhieXRlIG9yIDFieXRlCiAgIFVDSEFSICAgICB1Y1NsYXZlQWRkcjsgICAgICAgIC8vUmVhZCBmcm9tIHdoaWNoIHNsYXZlCkBAIC0xMzU4LDYgKzE2NzMsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBTUEVFRF9GQU5fQ09OVFJPTF9QU19BTExPQ0FUSU9OICAgV1JJVEVfT05FX0JZVEVfSFdfSTJDX0RBVEFfUEFSQU1FVEVSUwogCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKIC8vIFN0cnVjdHVyZXMgdXNlZCBieSBQb3dlckNvbm5lY3RvckRldGVjdGlvblRhYmxlCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCkBAIC0xNDM4LDYgKzE3NTQsMzEgQEAKICNkZWZpbmUgQVRPTV9QUExMX1NTX0FNT1VOVF9WMl9ORlJBQ19NQVNLICAgICAweDBGMDAKICNkZWZpbmUgQVRPTV9QUExMX1NTX0FNT1VOVF9WMl9ORlJBQ19TSElGVCAgICA4CiAKKy8vIFVzZWQgYnkgRENFNS4wCisgdHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9TUFJFQURfU1BFQ1RSVU1fT05fUFBMTF9WMworeworICBVU0hPUlQgIHVzU3ByZWFkU3BlY3RydW1BbW91bnRGcmFjOyAgIC8vIFNTX0FNT1VOVF9EU0ZSQUMgTmV3IGluIERDRTUuMAorICBVQ0hBUiAgIHVjU3ByZWFkU3BlY3RydW1UeXBlOwkgICAgICAgIC8vIEJpdFswXTogMC1Eb3duIFNwcmVhZCwxLUNlbnRlciBTcHJlYWQuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpdFsxXTogMS1FeHQuIDAtSW50LiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXRbMzoyXTogPTAgUDFQTEwgPTEgUDJQTEwgPTIgRENQTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXRzWzc6NF0gcmVzZXJ2ZWQKKyAgVUNIQVIgICB1Y0VuYWJsZTsJICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX0VOQUJMRSBvciBBVE9NX0RJU0FCTEUKKyAgVVNIT1JUICB1c1NwcmVhZFNwZWN0cnVtQW1vdW50OyAgICAgIAkvLyBJbmNsdWRlcyBTU19BTU9VTlRfRkJESVZbNzowXSBhbmQgU1NfQU1PVU5UX05GUkFDX1NMSVBbMTE6OF0gICAgCisgIFVTSE9SVCAgdXNTcHJlYWRTcGVjdHJ1bVN0ZXA7CSAgICAgICAgLy8gU1NfU1RFUF9TSVpFX0RTRlJBQworfUVOQUJMRV9TUFJFQURfU1BFQ1RSVU1fT05fUFBMTF9WMzsKKyAgICAKKyNkZWZpbmUgQVRPTV9QUExMX1NTX1RZUEVfVjNfRE9XTl9TUFJFQUQgICAgICAweDAwCisjZGVmaW5lIEFUT01fUFBMTF9TU19UWVBFX1YzX0NFTlRSRV9TUFJFQUQgICAgMHgwMQorI2RlZmluZSBBVE9NX1BQTExfU1NfVFlQRV9WM19FWFRfU1BSRUFEICAgICAgIDB4MDIKKyNkZWZpbmUgQVRPTV9QUExMX1NTX1RZUEVfVjNfUFBMTF9TRUxfTUFTSyAgICAweDBjCisjZGVmaW5lIEFUT01fUFBMTF9TU19UWVBFX1YzX1AxUExMICAgICAgICAgICAgMHgwMAorI2RlZmluZSBBVE9NX1BQTExfU1NfVFlQRV9WM19QMlBMTCAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVRPTV9QUExMX1NTX1RZUEVfVjNfRENQTEwgICAgICAgICAgICAweDA4CisjZGVmaW5lIEFUT01fUFBMTF9TU19BTU9VTlRfVjNfRkJESVZfTUFTSyAgICAgMHgwMEZGCisjZGVmaW5lIEFUT01fUFBMTF9TU19BTU9VTlRfVjNfRkJESVZfU0hJRlQgICAgMAorI2RlZmluZSBBVE9NX1BQTExfU1NfQU1PVU5UX1YzX05GUkFDX01BU0sgICAgIDB4MEYwMAorI2RlZmluZSBBVE9NX1BQTExfU1NfQU1PVU5UX1YzX05GUkFDX1NISUZUICAgIDgKKwogI2RlZmluZSBFTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTExfUFNfQUxMT0NBVElPTiAgRU5BQkxFX1NQUkVBRF9TUEVDVFJVTV9PTl9QUExMCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE3MDYsNyArMjA0Nyw3IEBACiAgIFVTSE9SVCAgICAgICAgU3RhbmRhcmRWRVNBX1RpbWluZzsgICAgICAvLyBPbmx5IHVzZWQgYnkgQmlvcwogICBVU0hPUlQgICAgICAgIEZpcm13YXJlSW5mbzsgICAgICAgICAgICAgLy8gU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjQKICAgVVNIT1JUICAgICAgICBEQUNfSW5mbzsgICAgICAgICAgICAgICAgIC8vIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwCi0gIFVTSE9SVCAgICAgICAgTFZEU19JbmZvOyAgICAgICAgICAgICAgICAvLyBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAKKyAgVVNIT1JUICAgICAgICBMQ0RfSW5mbzsgICAgICAgICAgICAgICAgIC8vIFNoYXJlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4zLCB3YXMgY2FsbGVkIExWRFNfSW5mbyAKICAgVVNIT1JUICAgICAgICBUTURTX0luZm87ICAgICAgICAgICAgICAgIC8vIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwCiAgIFVTSE9SVCAgICAgICAgQW5hbG9nVFZfSW5mbzsgICAgICAgICAgICAvLyBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAKICAgVVNIT1JUICAgICAgICBTdXBwb3J0ZWREZXZpY2VzSW5mbzsgICAgIC8vIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwCkBAIC0xNzM2LDEyICsyMDc3LDE2IEBACiAJVVNIT1JUCQkJCVBvd2VyU291cmNlSW5mbzsJCQkJCS8vIFNoYXJlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsIGxhdGVzdCB2ZXJzb2luIDEuMQogfUFUT01fTUFTVEVSX0xJU1RfT0ZfREFUQV9UQUJMRVM7CiAKKy8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmxlIAorI2RlZmluZSBMVkRTX0luZm8gICAgICAgICAgICAgICAgTENEX0luZm8KKwogdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUFTVEVSX0RBVEFfVEFCTEUKIHsgCiAgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOyAgCiAgIEFUT01fTUFTVEVSX0xJU1RfT0ZfREFUQV9UQUJMRVMgICBMaXN0T2ZEYXRhVGFibGVzOwogfUFUT01fTUFTVEVSX0RBVEFfVEFCTEU7CiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQogLy8gU3RydWN0dXJlIHVzZWQgaW4gTXVsdGltZWRpYUNhcGFiaWxpdHlJbmZvVGFibGUKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKQEAgLTE3NzYsNiArMjEyMSw3IEBACiAgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y1ZpZGVvSW5wdXQ0SW5mbzsvLyBWaWRlbyBJbnB1dCA0IFR5cGUgKDE6MCkgRi9CIHNldHRpbmcgKDIpIHBoeXNpY2FsIGNvbm5lY3RvciBJRCAoNTozKSByZXNlcnZlZCAoNzo2KQogfUFUT01fTVVMVElNRURJQV9DT05GSUdfSU5GTzsKIAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCiAvLyBTdHJ1Y3R1cmVzIHVzZWQgaW4gRmlybXdhcmVJbmZvVGFibGUKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKQEAgLTIwMzEsOCArMjM3Nyw0NyBAQAogICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjUmVzZXJ2ZWQ0WzNdOwogfUFUT01fRklSTVdBUkVfSU5GT19WMl8xOwogCisvL3RoZSBzdHJ1Y3R1cmUgYmVsb3cgdG8gYmUgdXNlZCBmcm9tIE5JCisvL3VjVGFibGVGb3JtYXRSZXZpc2lvbj0yCisvL3VjVGFibGVDb250ZW50UmV2aXNpb249MgordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRklSTVdBUkVfSU5GT19WMl8yCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgICAgICAgc0hlYWRlcjsgCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxGaXJtd2FyZVJldmlzaW9uOworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRGVmYXVsdEVuZ2luZUNsb2NrOyAgICAgICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bERlZmF1bHRNZW1vcnlDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxSZXNlcnZlZFsyXTsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bFJlc2VydmVkMTsgICAgICAgICAgICAgICAgLy9XYXMgdWxNYXhFbmdpbmVDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdCoKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bFJlc2VydmVkMjsgICAgICAgICAgICAgICAgLy9XYXMgdWxNYXhNZW1vcnlDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdCoKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxCaW5hcnlBbHRlcmVkSW5mbzsgICAgICAgIC8vV2FzIHVsQVNJQ01heEVuZ2luZUNsb2NrICA/CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxEZWZhdWx0RGlzcEVuZ2luZUNsa0ZyZXE7IC8vSW4gMTBLaHogdW5pdC4gVGhpcyBpcyB0aGUgZnJlcXVlbmN5IGJlZm9yZSBEQ0RUTywgY29ycmVzcG9uZGluZyB0byB1c0Jvb3RVcFZERENWb2x0YWdlLiAgICAgICAgICAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkMzsgICAgICAgICAgICAgICAgLy9XYXMgdWNBU0lDTWF4VGVtcGVyYXR1cmU7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNNaW5BbGxvd2VkQkxfTGV2ZWw7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNCb290VXBWRERDVm9sdGFnZTsgICAgICAgIC8vSW4gTVYgdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTGNkTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7IC8vIEluIE1IeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNMY2RNYXhQaXhlbENsb2NrUExMX091dHB1dDsgLy8gSW4gTUh6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bFJlc2VydmVkNDsgICAgICAgICAgICAgICAgLy9XYXMgdWxBc2ljTWF4aW11bVZvbHRhZ2UKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxSZXNlcnZlZDU7ICAgICAgICAgICAgICAgIC8vV2FzIHVzTWluRW5naW5lQ2xvY2tQTExfSW5wdXQgYW5kIHVzTWF4RW5naW5lQ2xvY2tQTExfSW5wdXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bFJlc2VydmVkNjsgICAgICAgICAgICAgICAgLy9XYXMgdXNNaW5FbmdpbmVDbG9ja1BMTF9PdXRwdXQgYW5kIHVzTWluTWVtb3J5Q2xvY2tQTExfSW5wdXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bFJlc2VydmVkNzsgICAgICAgICAgICAgICAgLy9XYXMgdXNNYXhNZW1vcnlDbG9ja1BMTF9JbnB1dCBhbmQgdXNNaW5NZW1vcnlDbG9ja1BMTF9PdXRwdXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c1Jlc2VydmVkMTE7ICAgICAgICAgICAgICAgLy9XYXMgdXNNYXhQaXhlbENsb2NrOyAgLy9JbiAxMEtoeiB1bml0LCBNYXguICBQY2xrIHVzZWQgb25seSBmb3IgREFDCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5QaXhlbENsb2NrUExMX0lucHV0OyAgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4UGl4ZWxDbG9ja1BMTF9JbnB1dDsgICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c0Jvb3RVcFZERENJVm9sdGFnZTsgICAgICAgLy9JbiB1bml0IG9mIG12OyBXYXMgdXNNaW5QaXhlbENsb2NrUExMX091dHB1dDsKKyAgQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUyB1c0Zpcm13YXJlQ2FwYWJpbGl0eTsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c0NvcmVSZWZlcmVuY2VDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CQorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWVtb3J5UmVmZXJlbmNlQ2xvY2s7ICAgICAvL0luIDEwS2h6IHVuaXQJCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNVbmlwaHlEUE1vZGVFeHRDbGtGcmVxOyAgIC8vSW4gMTBLaHogdW5pdCwgaWYgaXQgaXMgMCwgSW4gRFAgTW9kZSBVbmlwaHkgSW5wdXQgY2xvY2sgZnJvbSBpbnRlcm5hbCBQUExMLCBvdGhlcndpc2UgSW5wdXQgY2xvY2sgZnJvbSBleHRlcm5hbCBTcHJlYWQgY2xvY2sKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01lbW9yeU1vZHVsZV9JRDsgICAgICAgICAgLy9JbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24KKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkOVszXTsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c0Jvb3RVcE1WRERDVm9sdGFnZTsgICAgICAgLy9JbiB1bml0IG9mIG12OyBXYXMgdXNNaW5QaXhlbENsb2NrUExMX091dHB1dDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c1Jlc2VydmVkMTI7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxSZXNlcnZlZDEwWzNdOyAgICAgICAgICAgIC8vIE5ldyBhZGRlZCBjb21wYXJpbmcgdG8gcHJldmlvdXMgdmVyc2lvbgorfUFUT01fRklSTVdBUkVfSU5GT19WMl8yOwogCi0jZGVmaW5lIEFUT01fRklSTVdBUkVfSU5GT19MQVNUICBBVE9NX0ZJUk1XQVJFX0lORk9fVjJfMQorI2RlZmluZSBBVE9NX0ZJUk1XQVJFX0lORk9fTEFTVCAgQVRPTV9GSVJNV0FSRV9JTkZPX1YyXzIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQogLy8gU3RydWN0dXJlcyB1c2VkIGluIEludGVncmF0ZWRTeXN0ZW1JbmZvVGFibGUKQEAgLTIyMTIsNyArMjU5Nyw3IEBACiB1Y0RvY2tpbmdQaW5CaXQ6ICAgICB3aGljaCBiaXQgaW4gdGhpcyByZWdpc3RlciB0byByZWFkIHRoZSBwaW4gc3RhdHVzOwogdWNEb2NraW5nUGluUG9sYXJpdHk6UG9sYXJpdHkgb2YgdGhlIHBpbiB3aGVuIGRvY2tlZDsKIAotdWxDUFVDYXBJbmZvOiAgICAgICAgWzc6MF09MTpHcmlmZmluO1s3OjBdPTI6R3JleWhvdW5kO1s3OjBdPTM6SzgsIG90aGVyIGJpdHMgcmVzZXJ2ZWQgZm9yIG5vdyBhbmQgbXVzdCBiZSAweDAKK3VsQ1BVQ2FwSW5mbzogICAgICAgIFs3OjBdPTE6R3JpZmZpbjtbNzowXT0yOkdyZXlob3VuZDtbNzowXT0zOks4LCBbNzowXT00OlBoYXJhb2gsIG90aGVyIGJpdHMgcmVzZXJ2ZWQgZm9yIG5vdyBhbmQgbXVzdCBiZSAweDAKIAogdXNOdW1iZXJPZkN5Y2xlc0luUGVyaW9kOkluZGljYXRlIGhvdyBtYW55IGN5Y2xlcyB3aGVuIFBXTSBkdXR5IGlzIDEwMCUuCiAKQEAgLTIyNTAsNiArMjYzNSwxNCBAQAogdXNNaW5Eb3duU3RyZWFtSFRMaW5rV2lkdGg6ICBzYW1lIGFzIGFib3ZlLgogKi8KIAorLy8gQVRPTV9JTlRFR1JBVEVEX1NZU1RFTV9JTkZPOjp1bENQVUNhcEluZm8gIC0gQ1BVIHR5cGUgZGVmaW5pdGlvbiAKKyNkZWZpbmUgICAgSU5URUdSQVRFRF9TWVNURU1fSU5GT19fVU5LTk9XTl9DUFUgICAgICAgICAgICAgMAorI2RlZmluZSAgICBJTlRFR1JBVEVEX1NZU1RFTV9JTkZPX19BTURfQ1BVX19HUklGRklOICAgICAgICAxCisjZGVmaW5lICAgIElOVEVHUkFURURfU1lTVEVNX0lORk9fX0FNRF9DUFVfX0dSRVlIT1VORCAgICAgIDIKKyNkZWZpbmUgICAgSU5URUdSQVRFRF9TWVNURU1fSU5GT19fQU1EX0NQVV9fSzggICAgICAgICAgICAgMworI2RlZmluZSAgICBJTlRFR1JBVEVEX1NZU1RFTV9JTkZPX19BTURfQ1BVX19QSEFSQU9IICAgICAgICA0CisKKyNkZWZpbmUgICAgSU5URUdSQVRFRF9TWVNURU1fSU5GT19fQU1EX0NQVV9fTUFYX0NPREUgICAgICAgSU5URUdSQVRFRF9TWVNURU1fSU5GT19fQU1EX0NQVV9fUEhBUkFPSCAgICAvLyB0aGlzIGRlZmYgcmVmbGVjdHMgbWF4IGRlZmluZWQgQ1BVIGNvZGUKIAogI2RlZmluZSBTWVNURU1fQ09ORklHX1BPV0VSRVhQUkVTU19FTkFCTEUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgU1lTVEVNX0NPTkZJR19SVU5fQVRfT1ZFUkRSSVZFX0VOR0lORSAgICAgICAgICAgICAweDAwMDAwMDAyCkBAIC0yNzc4LDggKzMxNzEsODggQEAKICNkZWZpbmUgUEFORUxfUkFORE9NX0RJVEhFUiAgIDB4ODAKICNkZWZpbmUgUEFORUxfUkFORE9NX0RJVEhFUl9NQVNLICAgMHg4MAogCisjZGVmaW5lIEFUT01fTFZEU19JTkZPX0xBU1QgIEFUT01fTFZEU19JTkZPX1YxMiAgIC8vIG5vIG5lZWQgdG8gY2hhbmdlIHRoaXMgCiAKLSNkZWZpbmUgQVRPTV9MVkRTX0lORk9fTEFTVCAgQVRPTV9MVkRTX0lORk9fVjEyCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgTENEX0luZm9UYWJsZSBWMS4zICAgIE5vdGU6IHByZXZpb3VzIHZlcnNpb24gd2FzIGNhbGxlZCBBVE9NX0xWRFNfSU5GT19WMTIKKy8vIEFTSUMgRmFtaWxpZXM6ICBOSQorLy8gdWNUYWJsZUZvcm1hdFJldmlzaW9uPTEKKy8vIHVjVGFibGVDb250ZW50UmV2aXNpb249MworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX0FUT01fTENEX0lORk9fVjEzCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOyAgCisgIEFUT01fRFREX0ZPUk1BVCAgICAgc0xDRFRpbWluZzsKKyAgVVNIT1JUICAgICAgICAgICAgICB1c0V4dEluZm9UYWJsZU9mZnNldDsKKyAgVVNIT1JUICAgICAgICAgICAgICB1c1N1cHBvcnRlZFJlZnJlc2hSYXRlOyAgICAgLy9SZWZlciB0byBwYW5lbCBpbmZvIHRhYmxlIGluIEFUT01CSU9TIGV4dGVuc2lvbiBTcGVjLgorICBVTE9ORyAgICAgICAgICAgICAgIHVsUmVzZXJ2ZWQwOworICBVQ0hBUiAgICAgICAgICAgICAgIHVjTENEX01pc2M7ICAgICAgICAgICAgICAgIC8vIFJlb3JnYW5pemVkIGluIFYxMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpdDA6IHs9MDpzaW5nbGUsID0xOmR1YWx9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpdDE6IHs9MDpMREkgZm9ybWF0IGZvciBSR0I4ODgsID0xIEZQREkgZm9ybWF0IGZvciBSR0I4ODh9ICAvLyB3YXMgez0wOjY2NlJHQiwgPTE6ODg4UkdCfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXQzOjI6IHtHcmV5IGxldmVsfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpdDY6NCBDb2xvciBCaXQgRGVwdGggZGVmaW5pdGlvbiAoc2VlIGJlbG93IGRlZmluaXRpb24gaW4gRURJRCBWMS40IEBCWVRFIDE0aCkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQml0NyAgIFJlc2VydmVkLiAgd2FzIGZvciBBVE9NX1BBTkVMX01JU0NfQVBJX0VOQUJMRUQsIHN0aWxsIG5lZWQgaXQ/ICAKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1BhbmVsRGVmYXVsdFJlZnJlc2hSYXRlOworICBVQ0hBUiAgICAgICAgICAgICAgIHVjUGFuZWxJZGVudGlmaWNhdGlvbjsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1NTX0lkOworICBVU0hPUlQgICAgICAgICAgICAgIHVzTENEVmVuZGVySUQ7CisgIFVTSE9SVCAgICAgICAgICAgICAgdXNMQ0RQcm9kdWN0SUQ7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNMQ0RQYW5lbF9TcGVjaWFsSGFuZGxpbmdDYXA7ICAvLyBSZW9yZ2FuaXplZCBpbiBWMTMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQml0MDogT25jZSBEQUwgc2VlcyB0aGlzIENBUCBpcyBzZXQsIGl0IHdpbGwgcmVhZCBFRElEIGZyb20gTENEIG9uIGl0cyBvd24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXQxOiBTZWUgTENEUEFORUxfQ0FQX0RSUl9TVVBQT1JURUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXQyOiBhIHF1aWNrIHJlZmVyZW5jZSB3aGV0aGVyIGFuIGVtYmFkZGVkIHBhbmVsIChMQ0QxICkgaXMgTFZEUyAoMCkgb3IgZURQICgxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpdDctMzogUmVzZXJ2ZWQgCisgIFVDSEFSICAgICAgICAgICAgICAgdWNQYW5lbEluZm9TaXplOwkJCQkJIC8vICBzdGFydCBmcm9tIEFUT01fRFREX0ZPUk1BVCB0byBlbmQgb2YgcGFuZWwgaW5mbywgaW5jbHVkZSBFeHRJbmZvVGFibGUKKyAgVVNIT1JUICAgICAgICAgICAgICB1c0JhY2tsaWdodFBXTTsgICAgICAgICAgICAvLyAgQmFja2xpZ2h0IFBXTSBpbiBIei4gTmV3IGluIF9WMTMKKworICBVQ0hBUiAgICAgICAgICAgICAgIHVjUG93ZXJTZXF1ZW5jZURJR09OdG9ERV9pbjRNczsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1Bvd2VyU2VxdWVuY2VERXRvVkFSWV9CTF9pbjRNczsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1Bvd2VyU2VxdWVuY2VERXRvRElHT05faW40TXM7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNQb3dlclNlcXVlbmNlVkFSWV9CTHRvREVfaW40TXM7CisKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y09mZkRlbGF5X2luNE1zOworICBVQ0hBUiAgICAgICAgICAgICAgIHVjUG93ZXJTZXF1ZW5jZVZBUllfQkx0b0JMT05faW40TXM7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNQb3dlclNlcXVlbmNlQkxPTnRvVkFSWV9CTF9pbjRNczsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1Jlc2VydmVkMTsKKworICBVTE9ORyAgICAgICAgICAgICAgIHVsUmVzZXJ2ZWRbNF07Cit9QVRPTV9MQ0RfSU5GT19WMTM7ICAKKworI2RlZmluZSBBVE9NX0xDRF9JTkZPX0xBU1QgIEFUT01fTENEX0lORk9fVjEzICAgIAorCisvL0RlZmluaXRpb25zIGZvciB1Y0xDRF9NaXNjCisjZGVmaW5lIEFUT01fUEFORUxfTUlTQ19WMTNfRFVBTCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFUT01fUEFORUxfTUlTQ19WMTNfRlBESSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFUT01fUEFORUxfTUlTQ19WMTNfR1JFWV9MRVZFTCAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFUT01fUEFORUxfTUlTQ19WMTNfR1JFWV9MRVZFTF9TSElGVCAgICAgICAyCisjZGVmaW5lIEFUT01fUEFORUxfTUlTQ19WMTNfQ09MT1JfQklUX0RFUFRIX01BU0sgICAweDcwCisjZGVmaW5lIEFUT01fUEFORUxfTUlTQ19WMTNfNkJJVF9QRVJfQ09MT1IgICAgICAgICAweDEwCisjZGVmaW5lIEFUT01fUEFORUxfTUlTQ19WMTNfOEJJVF9QRVJfQ09MT1IgICAgICAgICAweDIwCisKKy8vQ29sb3IgQml0IERlcHRoIGRlZmluaXRpb24gaW4gRURJRCBWMS40IEBCWVRFIDE0aAorLy9CaXQgNiAgNSAgNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAwICAwICAwICAtICBDb2xvciBiaXQgZGVwdGggaXMgdW5kZWZpbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIDAgIDAgIDEgIC0gIDYgQml0cyBwZXIgUHJpbWFyeSBDb2xvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAwICAxICAwICAtICA4IEJpdHMgcGVyIFByaW1hcnkgQ29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgMCAgMSAgMSAgLSAxMCBCaXRzIHBlciBQcmltYXJ5IENvbG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIDEgIDAgIDAgIC0gMTIgQml0cyBwZXIgUHJpbWFyeSBDb2xvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAxICAwICAxICAtIDE0IEJpdHMgcGVyIFByaW1hcnkgQ29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgMSAgMSAgMCAgLSAxNiBCaXRzIHBlciBQcmltYXJ5IENvbG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIDEgIDEgIDEgIC0gUmVzZXJ2ZWQKKyAKKy8vRGVmaW5pdGlvbnMgZm9yIHVjTENEUGFuZWxfU3BlY2lhbEhhbmRsaW5nQ2FwOgorCisvL09uY2UgREFMIHNlZXMgdGhpcyBDQVAgaXMgc2V0LCBpdCB3aWxsIHJlYWQgRURJRCBmcm9tIExDRCBvbiBpdHMgb3duIGluc3RlYWQgb2YgdXNpbmcgc0xDRFRpbWluZyBpbiBBVE9NX0xWRFNfSU5GT19WMTIuIAorLy9PdGhlciBlbnRyaWVzIGluIEFUT01fTFZEU19JTkZPX1YxMiBhcmUgc3RpbGwgdmFsaWQvdXNlZnVsIHRvIERBTCAKKyNkZWZpbmUJTENEUEFORUxfQ0FQX1YxM19SRUFEX0VESUQgICAgICAgICAgICAgIDB4MSAgICAgICAgLy8gPSBMQ0RQQU5FTF9DQVBfUkVBRF9FRElEIG5vIGNoYW5nZSBjb21wYXJpbmcgdG8gcHJldmlvdXMgdmVyc2lvbgorCisvL0lmIGEgZGVzaWduIHN1cHBvcnRzIERSUiAoZHluYW1pYyByZWZyZXNoIHJhdGUpIG9uIGludGVybmFsIHBhbmVscyAoTFZEUyBvciBFRFApLCB0aGlzIGNhcCBpcyBzZXQgaW4gdWNMQ0RQYW5lbF9TcGVjaWFsSGFuZGxpbmdDYXAgdG9nZXRoZXIKKy8vd2l0aCBtdWx0aXBsZSBzdXBwb3J0ZWQgcmVmcmVzaCByYXRlc0B1c1N1cHBvcnRlZFJlZnJlc2hSYXRlLiBUaGlzIGNhcCBzaG91bGQgbm90IGJlIHNldCB3aGVuIG9ubHkgc2xvdyByZWZyZXNoIHJhdGUgaXMgc3VwcG9ydGVkIChzdGF0aWMKKy8vcmVmcmVzaCByYXRlIHN3aXRjaCBieSBTVy4gVGhpcyBpcyBvbmx5IHZhbGlkIGZyb20gQVRPTV9MVkRTX0lORk9fVjEyCisjZGVmaW5lCUxDRFBBTkVMX0NBUF9WMTNfRFJSX1NVUFBPUlRFRCAgICAgICAgICAweDIgICAgICAgIC8vID0gTENEUEFORUxfQ0FQX0RSUl9TVVBQT1JURUQgbm8gY2hhbmdlIGNvbXBhcmluZyB0byBwcmV2aW91cyB2ZXJzaW9uCisKKy8vVXNlIHRoaXMgY2FwIGJpdCBmb3IgYSBxdWljayByZWZlcmVuY2Ugd2hldGhlciBhbiBlbWJhZGRlZCBwYW5lbCAoTENEMSApIGlzIExWRFMgb3IgZURQLgorI2RlZmluZQlMQ0RQQU5FTF9DQVBfVjEzX2VEUCAgICAgICAgICAgICAgICAgICAgMHg0ICAgICAgICAvLyA9IExDRFBBTkVMX0NBUF9lRFAgbm8gY2hhbmdlIGNvbXBhcmluZyB0byBwcmV2aW91cyB2ZXJzaW9uCiAKIHR5cGVkZWYgc3RydWN0ICBfQVRPTV9QQVRDSF9SRUNPUkRfTU9ERQogewpAQCAtMjk0NCw5ICszNDE3LDkgQEAKICNkZWZpbmUgTUFYX0RURF9NT0RFX0lOX1ZSQU0gICAgICAgICAgICA2CiAjZGVmaW5lIEFUT01fRFREX01PREVfU1VQUE9SVF9UQkxfU0laRSAgKE1BWF9EVERfTU9ERV9JTl9WUkFNKjI4KSAgICAvLzI4PSAoU0laRU9GIEFUT01fRFREX0ZPUk1BVCkgCiAjZGVmaW5lIEFUT01fU1REX01PREVfU1VQUE9SVF9UQkxfU0laRSAgMzIqOCAgICAgICAgICAgICAgICAgICAgICAgICAvLzMyIGlzIGEgcHJlZGVmaW5lZCBudW1iZXIsOD0gKFNJWkVPRiBBVE9NX1NURF9GT1JNQVQpCi0jZGVmaW5lIERGUF9FTkNPREVSX1RZUEVfT0ZGU0VUCQkJCQkweDgwCi0jZGVmaW5lIERQX0VOQ09ERVJfTEFORV9OVU1fT0ZGU0VUCQkJMHg4NAotI2RlZmluZSBEUF9FTkNPREVSX0xJTktfUkFURV9PRkZTRVQJCQkweDg4CisvLzIwIGJ5dGVzIGZvciBFbmNvZGVyIFR5cGUgYW5kIERQQ0QgaW4gU1REIEVESUQgYXJlYQorI2RlZmluZSBERlBfRU5DT0RFUl9UWVBFX09GRlNFVCAgICAgICAgIChBVE9NX0VESURfUkFXX0RBVEFTSVpFICsgQVRPTV9EVERfTU9ERV9TVVBQT1JUX1RCTF9TSVpFICsgQVRPTV9TVERfTU9ERV9TVVBQT1JUX1RCTF9TSVpFIC0gMjApICAgIAorI2RlZmluZSBBVE9NX0RQX0RQQ0RfT0ZGU0VUICAgICAgICAgICAgIChERlBfRU5DT0RFUl9UWVBFX09GRlNFVCArIDQgKSAgICAgICAgCiAKICNkZWZpbmUgQVRPTV9IV0lDT04xX1NVUkZBQ0VfQUREUiAgICAgICAwCiAjZGVmaW5lIEFUT01fSFdJQ09OMl9TVVJGQUNFX0FERFIgICAgICAgKEFUT01fSFdJQ09OMV9TVVJGQUNFX0FERFIgKyBBVE9NX0hXSUNPTl9TVVJGQUNFX1NJWkUpCkBAIC0yOTk3LDE0ICszNDcwLDE2IEBACiAjZGVmaW5lIEFUT01fREZQNV9EVERfTU9ERV9UQkxfQUREUiAgICAgKEFUT01fREZQNV9FRElEX0FERFIgKyBBVE9NX0VESURfUkFXX0RBVEFTSVpFKQogI2RlZmluZSBBVE9NX0RGUDVfU1REX01PREVfVEJMX0FERFIgICAgIChBVE9NX0RGUDVfRFREX01PREVfVEJMX0FERFIgKyBBVE9NX0RURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpCiAKLSNkZWZpbmUgQVRPTV9EUF9UUkFJTklOR19UQkxfQUREUgkJCQkoQVRPTV9ERlA1X1NURF9NT0RFX1RCTF9BRERSK0FUT01fU1REX01PREVfU1VQUE9SVF9UQkxfU0laRSkgICAgICAgCisjZGVmaW5lIEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgICAgICAgKEFUT01fREZQNV9TVERfTU9ERV9UQkxfQUREUiArIEFUT01fU1REX01PREVfU1VQUE9SVF9UQkxfU0laRSkKIAotI2RlZmluZSBBVE9NX1NUQUNLX1NUT1JBR0VfU1RBUlQgICAgICAgIChBVE9NX0RQX1RSQUlOSU5HX1RCTF9BRERSKzI1NikgICAgICAgCi0jZGVmaW5lIEFUT01fU1RBQ0tfU1RPUkFHRV9FTkQgICAgICAgICAgQVRPTV9TVEFDS19TVE9SQUdFX1NUQVJUKzUxMiAgICAgICAgCisjZGVmaW5lIEFUT01fU1RBQ0tfU1RPUkFHRV9TVEFSVCAgICAgICAgKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyAxMDI0KSAgICAgICAKKyNkZWZpbmUgQVRPTV9TVEFDS19TVE9SQUdFX0VORCAgICAgICAgICBBVE9NX1NUQUNLX1NUT1JBR0VfU1RBUlQgKyA1MTIgICAgICAgIAogCiAvL1RoZSBzaXplIGJlbG93IGlzIGluIEtiIQogI2RlZmluZSBBVE9NX1ZSQU1fUkVTRVJWRV9TSVpFICAgICAgICAgKCgoKEFUT01fU1RBQ0tfU1RPUkFHRV9FTkQgLSBBVE9NX0hXSUNPTjFfU1VSRkFDRV9BRERSKT4+MTApKzQpJjB4RkZGQykKICAgIAorI2RlZmluZSBBVE9NX1ZSQU1fUkVTRVJWRV9WMl9TSVpFICAgICAgMzIKKwogI2RlZmluZQlBVE9NX1ZSQU1fT1BFUkFUSU9OX0ZMQUdTX01BU0sgICAgICAgICAweEMwMDAwMDAwTAogI2RlZmluZSBBVE9NX1ZSQU1fT1BFUkFUSU9OX0ZMQUdTX1NISUZUICAgICAgICAzMAogI2RlZmluZQlBVE9NX1ZSQU1fQkxPQ0tfTkVFRFNfTk9fUkVTRVJWQVRJT04gICAweDEKQEAgLTMyMDYsNiArMzY4MSwxNSBAQAogICBVU0hPUlQgICAgdXNHcmFwaGljT2JqSWRzWzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8xc3QgRW5jb2RlciBPYmogc291cmNlIGZyb20gR1BVIHRvIGxhc3QgR3JhcGhpYyBPYmogZGVzdGluYXRlIHRvIGNvbm5lY3Rvci4KIH1BVE9NX0RJU1BMQVlfT0JKRUNUX1BBVEg7CiAKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9ESVNQTEFZX0VYVEVSTkFMX09CSkVDVF9QQVRICit7CisgIFVTSE9SVCAgICB1c0RldmljZVRhZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc3VwcG9ydGVkIGRldmljZSAKKyAgVVNIT1JUICAgIHVzU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgc2l6ZSBvZiBBVE9NX0RJU1BMQVlfT0JKRUNUX1BBVEgKKyAgVVNIT1JUICAgIHVzQ29ubk9iamVjdElkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Db25uZWN0b3IgT2JqZWN0IElEIAorICBVU0hPUlQgICAgdXNHUFVPYmplY3RJZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0dQVSBJRCAKKyAgVVNIT1JUICAgIHVzR3JhcGhpY09iaklkc1syXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91c0dyYXBoaWNPYmpJZHNbMF09IEdQVSBpbnRlcm5hbCBlbmNvZGVyLCB1c0dyYXBoaWNPYmpJZHNbMV09IGV4dGVybmFsIGVuY29kZXIgCit9QVRPTV9ESVNQTEFZX0VYVEVSTkFMX09CSkVDVF9QQVRIOworCiB0eXBlZGVmIHN0cnVjdCBfQVRPTV9ESVNQTEFZX09CSkVDVF9QQVRIX1RBQkxFCiB7CiAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNOdW1PZkRpc3BQYXRoOwpAQCAtMzI2MSw2ICszNzQ1LDQ3IEBACiAjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfNyAgICAgICAgICAgICAgICAgICA3CiAjZGVmaW5lIE1BWF9OVU1CRVJfT0ZfRVhUX0FVWEREQ19MVVRfRU5UUklFUyAgIChFWFRfQVVYRERDX0xVVElOREVYXzcrMSkKIAorLy91Y0NoYW5uZWxNYXBwaW5nIGFyZSBkZWZpbmVkIGFzIGZvbGxvd2luZworLy9mb3IgRFAgY29ubmVjdG9yLCBlRFAsIERQIHRvIFZHQS9MVkRTIAorLy9CaXRbMTowXTogRGVmaW5lIHdoaWNoIHBpbiBjb25uZWN0IHRvIERQIGNvbm5lY3RvciBEUF9MYW5lMCwgPTA6IHNvdXJjZSBmcm9tIEdQVSBwaW4gVFgwLCA9MTogZnJvbSBHUFUgcGluIFRYMSwgPTI6IGZyb20gR1BVIHBpbiBUWDIsID0zIGZyb20gR1BVIHBpbiBUWDMKKy8vQml0WzM6Ml06IERlZmluZSB3aGljaCBwaW4gY29ubmVjdCB0byBEUCBjb25uZWN0b3IgRFBfTGFuZTEsID0wOiBzb3VyY2UgZnJvbSBHUFUgcGluIFRYMCwgPTE6IGZyb20gR1BVIHBpbiBUWDEsID0yOiBmcm9tIEdQVSBwaW4gVFgyLCA9MyBmcm9tIEdQVSBwaW4gVFgzCisvL0JpdFs1OjRdOiBEZWZpbmUgd2hpY2ggcGluIGNvbm5lY3QgdG8gRFAgY29ubmVjdG9yIERQX0xhbmUyLCA9MDogc291cmNlIGZyb20gR1BVIHBpbiBUWDAsID0xOiBmcm9tIEdQVSBwaW4gVFgxLCA9MjogZnJvbSBHUFUgcGluIFRYMiwgPTMgZnJvbSBHUFUgcGluIFRYMworLy9CaXRbNzo2XTogRGVmaW5lIHdoaWNoIHBpbiBjb25uZWN0IHRvIERQIGNvbm5lY3RvciBEUF9MYW5lMywgPTA6IHNvdXJjZSBmcm9tIEdQVSBwaW4gVFgwLCA9MTogZnJvbSBHUFUgcGluIFRYMSwgPTI6IGZyb20gR1BVIHBpbiBUWDIsID0zIGZyb20gR1BVIHBpbiBUWDMKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RQX0NPTk5fQ0hBTk5FTF9NQVBQSU5HCit7CisjaWYgQVRPTV9CSUdfRU5ESUFOCisgIFVDSEFSIHVjRFBfTGFuZTNfU291cmNlOjI7CisgIFVDSEFSIHVjRFBfTGFuZTJfU291cmNlOjI7CisgIFVDSEFSIHVjRFBfTGFuZTFfU291cmNlOjI7CisgIFVDSEFSIHVjRFBfTGFuZTBfU291cmNlOjI7CisjZWxzZQorICBVQ0hBUiB1Y0RQX0xhbmUwX1NvdXJjZToyOworICBVQ0hBUiB1Y0RQX0xhbmUxX1NvdXJjZToyOworICBVQ0hBUiB1Y0RQX0xhbmUyX1NvdXJjZToyOworICBVQ0hBUiB1Y0RQX0xhbmUzX1NvdXJjZToyOworI2VuZGlmCit9QVRPTV9EUF9DT05OX0NIQU5ORUxfTUFQUElORzsKKworLy9mb3IgRFZJL0hETUksIGluIGR1YWwgbGluayBjYXNlLCBib3RoIGxpbmtzIGhhdmUgdG8gaGF2ZSBzYW1lIG1hcHBpbmcuIAorLy9CaXRbMTowXTogRGVmaW5lIHdoaWNoIHBpbiBjb25uZWN0IHRvIERWSSBjb25uZWN0b3IgZGF0YSBMYW5lMiwgPTA6IHNvdXJjZSBmcm9tIEdQVSBwaW4gVFgwLCA9MTogZnJvbSBHUFUgcGluIFRYMSwgPTI6IGZyb20gR1BVIHBpbiBUWDIsID0zIGZyb20gR1BVIHBpbiBUWDMKKy8vQml0WzM6Ml06IERlZmluZSB3aGljaCBwaW4gY29ubmVjdCB0byBEVkkgY29ubmVjdG9yIGRhdGEgTGFuZTEsID0wOiBzb3VyY2UgZnJvbSBHUFUgcGluIFRYMCwgPTE6IGZyb20gR1BVIHBpbiBUWDEsID0yOiBmcm9tIEdQVSBwaW4gVFgyLCA9MyBmcm9tIEdQVSBwaW4gVFgzCisvL0JpdFs1OjRdOiBEZWZpbmUgd2hpY2ggcGluIGNvbm5lY3QgdG8gRFZJIGNvbm5lY3RvciBkYXRhIExhbmUwLCA9MDogc291cmNlIGZyb20gR1BVIHBpbiBUWDAsID0xOiBmcm9tIEdQVSBwaW4gVFgxLCA9MjogZnJvbSBHUFUgcGluIFRYMiwgPTMgZnJvbSBHUFUgcGluIFRYMworLy9CaXRbNzo2XTogRGVmaW5lIHdoaWNoIHBpbiBjb25uZWN0IHRvIERWSSBjb25uZWN0b3IgY2xvY2sgbGFuZSwgPTA6IHNvdXJjZSBmcm9tIEdQVSBwaW4gVFgwLCA9MTogZnJvbSBHUFUgcGluIFRYMSwgPTI6IGZyb20gR1BVIHBpbiBUWDIsID0zIGZyb20gR1BVIHBpbiBUWDMKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RWSV9DT05OX0NIQU5ORUxfTUFQUElORworeworI2lmIEFUT01fQklHX0VORElBTgorICBVQ0hBUiB1Y0RWSV9DTEtfU291cmNlOjI7CisgIFVDSEFSIHVjRFZJX0RBVEEwX1NvdXJjZToyOworICBVQ0hBUiB1Y0RWSV9EQVRBMV9Tb3VyY2U6MjsKKyAgVUNIQVIgdWNEVklfREFUQTJfU291cmNlOjI7CisjZWxzZQorICBVQ0hBUiB1Y0RWSV9EQVRBMl9Tb3VyY2U6MjsKKyAgVUNIQVIgdWNEVklfREFUQTFfU291cmNlOjI7CisgIFVDSEFSIHVjRFZJX0RBVEEwX1NvdXJjZToyOworICBVQ0hBUiB1Y0RWSV9DTEtfU291cmNlOjI7CisjZW5kaWYKK31BVE9NX0RWSV9DT05OX0NIQU5ORUxfTUFQUElORzsKKwogdHlwZWRlZiBzdHJ1Y3QgX0VYVF9ESVNQTEFZX1BBVEgKIHsKICAgVVNIT1JUICB1c0RldmljZVRhZzsgICAgICAgICAgICAgICAgICAgIC8vQSBiaXQgdmVjdG9yIHRvIHNob3cgd2hhdCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgCkBAIC0zMjY5LDcgKzM3OTQsMTMgQEAKICAgVUNIQVIgICB1Y0V4dEFVWEREQ0x1dEluZGV4OyAgICAgICAgICAgIC8vQW4gaW5kZXggaW50byBleHRlcm5hbCBBVVgvRERDIGNoYW5uZWwgTFVUCiAgIFVDSEFSICAgdWNFeHRIUERQSU5MdXRJbmRleDsgICAgICAgICAgICAvL0FuIGluZGV4IGludG8gZXh0ZXJuYWwgSFBEIHBpbiBMVVQKICAgVVNIT1JUICB1c0V4dEVuY29kZXJPYmpJZDsgICAgICAgICAgICAgIC8vZXh0ZXJuYWwgZW5jb2RlciBvYmplY3QgaWQKLSAgVVNIT1JUICB1c1Jlc2VydmVkWzNdOyAKKyAgdW5pb257CisgICAgVUNIQVIgICB1Y0NoYW5uZWxNYXBwaW5nOyAgICAgICAgICAgICAgICAgIC8vIGlmIHVjQ2hhbm5lbE1hcHBpbmc9MCwgdXNpbmcgZGVmYXVsdCBvbmUgdG8gb25lIG1hcHBpbmcKKyAgICBBVE9NX0RQX0NPTk5fQ0hBTk5FTF9NQVBQSU5HIGFzRFBNYXBwaW5nOworICAgIEFUT01fRFZJX0NPTk5fQ0hBTk5FTF9NQVBQSU5HIGFzRFZJTWFwcGluZzsKKyAgfTsKKyAgVUNIQVIgICB1Y1Jlc2VydmVkOworICBVU0hPUlQgIHVzUmVzZXJ2ZWRbMl07IAogfUVYVF9ESVNQTEFZX1BBVEg7CiAgICAKICNkZWZpbmUgTlVNQkVSX09GX1VDSEFSX0ZPUl9HVUlEICAgICAgICAgIDE2CkBAIC0zMjgxLDcgKzM4MTIsOCBAQAogICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNHdWlkIFtOVU1CRVJfT0ZfVUNIQVJfRk9SX0dVSURdOyAgICAgLy8gYSBHVUlEIGlzIGEgMTYgYnl0ZSBsb25nIHN0cmluZwogICBFWFRfRElTUExBWV9QQVRIICAgICAgICAgc1BhdGhbTUFYX05VTUJFUl9PRl9FWFRfRElTUExBWV9QQVRIXTsgLy8gdG90YWwgb2YgZml4ZWQgNyBlbnRyaWVzLgogICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNDaGVja3N1bTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSAgc2ltcGxlIENoZWNrc3VtIG9mIHRoZSBzdW0gb2Ygd2hvbGUgc3RydWN0dXJlIGVxdWFsIHRvIDB4MC4gCi0gIFVDSEFSICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZCBbN107ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgcG90ZW50aWFsIGV4cGFuc2lvbgorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWMzRFN0ZXJlb1BpbklkOyAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGZvciBlRFAgcGFuZWwKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkIFs2XTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBwb3RlbnRpYWwgZXhwYW5zaW9uCiB9QVRPTV9FWFRFUk5BTF9ESVNQTEFZX0NPTk5FQ1RJT05fSU5GTzsKIAogLy9SZWxhdGVkIGRlZmluaXRpb25zLCBhbGwgcmVjb3JkcyBhcmUgZGlmZmVybnQgYnV0IHRoZXkgaGF2ZSBhIGNvbW1vbmQgaGVhZGVyCkBAIC0zMzExLDEwICszODQzLDExIEBACiAjZGVmaW5lIEFUT01fQ09OTkVDVE9SX0FVWEREQ19MVVRfUkVDT1JEX1RZUEUgICAgICAgICAgMTcgLy9UaGlzIGlzIGZvciB0aGUgY2FzZSB3aGVuIGNvbm5lY3RvcnMgYXJlIG5vdCBrbm93biB0byBvYmplY3QgdGFibGUKICNkZWZpbmUgQVRPTV9PQkpFQ1RfTElOS19SRUNPUkRfVFlQRSAgICAgICAgICAgICAgICAgICAxOCAvL09uY2UgdGhpcyByZWNvcmQgaXMgcHJlc2VudCB1bmRlciBvbmUgb2JqZWN0LCBpdCBpbmRpY2F0cyB0aGUgb29iamVjdCBpcyBsaW5rZWQgdG8gYW5vdGhlciBvYmogZGVzY3JpYmVkIGJ5IHRoZSByZWNvcmQKICNkZWZpbmUgQVRPTV9DT05ORUNUT1JfUkVNT1RFX0NBUF9SRUNPUkRfVFlQRSAgICAgICAgICAxOQorI2RlZmluZSBBVE9NX0VOQ09ERVJfQ0FQX1JFQ09SRF9UWVBFICAgICAgICAgICAgICAgICAgIDIwCiAKIAogLy9NdXN0IGJlIHVwZGF0ZWQgd2hlbiBuZXcgcmVjb3JkIHR5cGUgaXMgYWRkZWQsZXF1YWwgdG8gdGhhdCByZWNvcmQgZGVmaW5pdGlvbiEKLSNkZWZpbmUgQVRPTV9NQVhfT0JKRUNUX1JFQ09SRF9OVU1CRVIgICAgICAgICAgICAgQVRPTV9DT05ORUNUT1JfUkVNT1RFX0NBUF9SRUNPUkRfVFlQRQorI2RlZmluZSBBVE9NX01BWF9PQkpFQ1RfUkVDT1JEX05VTUJFUiAgICAgICAgICAgICBBVE9NX0VOQ09ERVJfQ0FQX1JFQ09SRF9UWVBFCiAKIHR5cGVkZWYgc3RydWN0ICBfQVRPTV9JMkNfUkVDT1JECiB7CkBAIC0zNDQxLDYgKzM5NzQsMjYgQEAKICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjUGFkZGluZ1syXTsKIH1BVE9NX0VOQ09ERVJfRFZPX0NGX1JFQ09SRDsKIAorLy8gQml0IG1hcHMgZm9yIEFUT01fRU5DT0RFUl9DQVBfUkVDT1JELnVjRW5jb2RlckNhcAorI2RlZmluZSBBVE9NX0VOQ09ERVJfQ0FQX1JFQ09SRF9IQlIyICAgICAweDAxICAgICAgICAgLy8gRFAxLjIgSEJSMiBpcyBzdXBwb3J0ZWQgYnkgdGhpcyBwYXRoCisKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9FTkNPREVSX0NBUF9SRUNPUkQKK3sKKyAgQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiAgIHNoZWFkZXI7CisgIHVuaW9uIHsKKyAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzRW5jb2RlckNhcDsgICAgICAgICAKKyAgICBzdHJ1Y3QgeworI2lmIEFUT01fQklHX0VORElBTgorICAgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgdXNSZXNlcnZlZDoxNTsgICAgICAgIC8vIEJpdDEtMTUgbWF5IGJlIGRlZmluZWQgZm9yIG90aGVyIGNhcGFiaWxpdHkgaW4gZnV0dXJlCisgICAgICBVU0hPUlQgICAgICAgICAgICAgICAgICB1c0hCUjJDYXA6MTsgICAgICAgICAgLy8gQml0MCBpcyBmb3IgRFAxLjIgSEJSMiBjYXBhYmlsaXR5LiAKKyNlbHNlCisgICAgICBVU0hPUlQgICAgICAgICAgICAgICAgICB1c0hCUjJDYXA6MTsgICAgICAgICAgLy8gQml0MCBpcyBmb3IgRFAxLjIgSEJSMiBjYXBhYmlsaXR5LiAKKyAgICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgIHVzUmVzZXJ2ZWQ6MTU7ICAgICAgICAvLyBCaXQxLTE1IG1heSBiZSBkZWZpbmVkIGZvciBvdGhlciBjYXBhYmlsaXR5IGluIGZ1dHVyZQorI2VuZGlmCisgICAgfTsKKyAgfTsgCit9QVRPTV9FTkNPREVSX0NBUF9SRUNPUkQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogLy8gdmFsdWUgZm9yIEFUT01fQ09OTkVDVE9SX0NGX1JFQ09SRC51Y0Nvbm5lY3RlZER2b0J1bmRsZQogI2RlZmluZSBBVE9NX0NPTk5FQ1RPUl9DRl9SRUNPUkRfQ09OTkVDVEVEX1VQUEVSMTJCSVRCVU5ETEVBICAgMQogI2RlZmluZSBBVE9NX0NPTk5FQ1RPUl9DRl9SRUNPUkRfQ09OTkVDVEVEX0xPV0VSMTJCSVRCVU5ETEVCICAgMgpAQCAtMzU4MCw2ICs0MTMzLDExIEBACiAjZGVmaW5lCVZPTFRBR0VfQ09OVFJPTF9JRF9EQUMJCQkJCQkJCTB4MDIJCQkJCQkJCQkvL0kyQyBjb250cm9sLCB1c2VkIGZvciBSNXh4L1I2eHggTVZEREMsTVZERFEgb3IgVkREQ0kKICNkZWZpbmUJVk9MVEFHRV9DT05UUk9MX0lEX1ZUMTE2eE0JCQkJCQkweDAzCQkJCQkJCQkJLy9JMkMgY29udHJvbCwgdXNlZCBmb3IgUjZ4eCBDb3JlIFZvbHRhZ2UKICNkZWZpbmUgVk9MVEFHRV9DT05UUk9MX0lEX0RTNDQwMgkJCQkJCQkweDA0CQkJCQkJCQkJCisjZGVmaW5lIFZPTFRBR0VfQ09OVFJPTF9JRF9VUDYyNjYgCQkJCQkJMHgwNQkJCQkJCQkJCQorI2RlZmluZSBWT0xUQUdFX0NPTlRST0xfSURfU0NPUlBJTwkJCQkJCTB4MDYKKyNkZWZpbmUJVk9MVEFHRV9DT05UUk9MX0lEX1ZUMTU1Nk0JCQkJCQkweDA3CQkJCQkJCQkJCisjZGVmaW5lCVZPTFRBR0VfQ09OVFJPTF9JRF9DSEw4MjJ4CQkJCQkJMHgwOAkJCQkJCQkJCQorI2RlZmluZQlWT0xUQUdFX0NPTlRST0xfSURfVlQxNTg2TQkJCQkJCTB4MDkKIAogdHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX1ZPTFRBR0VfT0JKRUNUCiB7CkBAIC0zNjcwLDY2ICs0MjI4LDE1NyBAQAogI2RlZmluZSBQT1dFUl9TRU5TT1JfR1BJTwkJCQkJCQkJMHgwMQogI2RlZmluZSBQT1dFUl9TRU5TT1JfSTJDCQkJCQkJCQkweDAyCiAKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0NMS19WT0xUX0NBUEFCSUxJVFkKK3sKKyAgVUxPTkcgICAgICB1bFZvbHRhZ2VJbmRleDsgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIFZvbHRhZ2UgSW5kZXggaW5kaWNhdGVkIGJ5IEZVU0UsIHNhbWUgdm9sdGFnZSBpbmRleCBzaGFyZWQgd2l0aCBTQ0xLIERQTSBmdXNlIHRhYmxlICAgICAgICAKKyAgVUxPTkcgICAgICB1bE1heGltdW1TdXBwb3J0ZWRDTEs7ICAgICAgICAgICAgICAgLy8gTWF4aW11bSBjbG9jayBzdXBwb3J0ZWQgd2l0aCBzcGVjaWZpZWQgdm9sdGFnZSBpbmRleCwgdW5pdCBpbiAxMGtIegorfUFUT01fQ0xLX1ZPTFRfQ0FQQUJJTElUWTsKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQVZBSUxBQkxFX1NDTEtfTElTVAoreworICBVTE9ORyAgICAgIHVsU3VwcG9ydGVkU0NMSzsgICAgICAgICAgICAgICAvLyBNYXhpbXVtIGNsb2NrIHN1cHBvcnRlZCB3aXRoIHNwZWNpZmllZCB2b2x0YWdlIGluZGV4LCAgdW5pdCBpbiAxMGtIegorICBVU0hPUlQgICAgIHVzVm9sdGFnZUluZGV4OyAgICAgICAgICAgICAgICAvLyBUaGUgVm9sdGFnZSBJbmRleCBpbmRpY2F0ZWQgYnkgRlVTRSBmb3Igc3BlY2lmaWVkIFNDTEsgIAorICBVU0hPUlQgICAgIHVzVm9sdGFnZUlEOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgVm9sdGFnZSBJRCBpbmRpY2F0ZWQgYnkgRlVTRSBmb3Igc3BlY2lmaWVkIFNDTEsgCit9QVRPTV9BVkFJTEFCTEVfU0NMS19MSVNUOworCisvLyBBVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk9fVjYgdWxTeXN0ZW1Db25maWcgY2FwIGRlZmluaXRpb24KKyNkZWZpbmUgQVRPTV9JR1BfSU5GT19WNl9TWVNURU1fQ09ORklHX19QQ0lFX1BPV0VSX0dBVElOR19FTkFCTEUgICAgICAgICAgICAgMSAgICAgICAvLyByZWZlciB0byB1bFN5c3RlbUNvbmZpZyBiaXRbMF0KKworLy8gdGhpcyBJbnRlZ3JhdGVTeXN0ZW1JbmZvVGFibGUgaXMgdXNlZCBmb3IgTGlhbm8vT250YXJpbyBBUFUKIHR5cGVkZWYgc3RydWN0IF9BVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk9fVjYKIHsKICAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSICAgc0hlYWRlcjsKICAgVUxPTkcgIHVsQm9vdFVwRW5naW5lQ2xvY2s7CiAgIFVMT05HICB1bERlbnRpc3RWQ09GcmVxOyAgICAgICAgICAKICAgVUxPTkcgIHVsQm9vdFVwVU1BQ2xvY2s7ICAgICAgICAgIAotICBVTE9ORyAgdWxSZXNlcnZlZDFbOF07ICAgICAgICAgICAgCisgIEFUT01fQ0xLX1ZPTFRfQ0FQQUJJTElUWSAgIHNESVNQQ0xLX1ZvbHRhZ2VbNF07ICAgICAgICAgICAgCiAgIFVMT05HICB1bEJvb3RVcFJlcURpc3BsYXlWZWN0b3I7CiAgIFVMT05HICB1bE90aGVyRGlzcGxheU1pc2M7CiAgIFVMT05HICB1bEdQVUNhcEluZm87Ci0gIFVMT05HICB1bFJlc2VydmVkMlszXTsgICAgICAgICAgICAKKyAgVUxPTkcgIHVsU0JfTU1JT19CYXNlX0FkZHI7CisgIFVTSE9SVCB1c1JlcXVlc3RlZFBXTUZyZXFJbkh6OworICBVQ0hBUiAgdWNIdGNUbXBMbXQ7ICAgCisgIFVDSEFSICB1Y0h0Y0h5c3RMbXQ7CisgIFVMT05HICB1bE1pbkVuZ2luZUNsb2NrOyAgICAgICAgICAgCiAgIFVMT05HICB1bFN5c3RlbUNvbmZpZzsgICAgICAgICAgICAKICAgVUxPTkcgIHVsQ1BVQ2FwSW5mbzsgICAgICAgICAgICAgIAotICBVU0hPUlQgdXNNYXhOQlZvbHRhZ2U7ICAKLSAgVVNIT1JUIHVzTWluTkJWb2x0YWdlOyAgCi0gIFVTSE9SVCB1c0Jvb3RVcE5CVm9sdGFnZTsgICAgICAgICAKLSAgVVNIT1JUIHVzRXh0RGlzcENvbm5JbmZvT2Zmc2V0OyAgCi0gIFVDSEFSICB1Y0h0Y1RtcExtdDsgICAKLSAgVUNIQVIgIHVjVGpPZmZzZXQ7ICAgIAorICBVU0hPUlQgdXNOQlAwVm9sdGFnZTsgICAgICAgICAgICAgICAKKyAgVVNIT1JUIHVzTkJQMVZvbHRhZ2U7CisgIFVTSE9SVCB1c0Jvb3RVcE5CVm9sdGFnZTsgICAgICAgICAgICAgICAgICAgICAgIAorICBVU0hPUlQgdXNFeHREaXNwQ29ubkluZm9PZmZzZXQ7CisgIFVTSE9SVCB1c1BhbmVsUmVmcmVzaFJhdGVSYW5nZTsgICAgIAogICBVQ0hBUiAgdWNNZW1vcnlUeXBlOyAgCiAgIFVDSEFSICB1Y1VNQUNoYW5uZWxOdW1iZXI7CiAgIFVMT05HICB1bENTUl9NM19BUkJfQ05UTF9ERUZBVUxUWzEwXTsgIAogICBVTE9ORyAgdWxDU1JfTTNfQVJCX0NOVExfVVZEWzEwXTsgCiAgIFVMT05HICB1bENTUl9NM19BUkJfQ05UTF9GUzNEWzEwXTsKLSAgVUxPTkcgIHVsUmVzZXJ2ZWQzWzQyXTsgCisgIEFUT01fQVZBSUxBQkxFX1NDTEtfTElTVCAgIHNBdmFpbF9TQ0xLWzVdOworICBVTE9ORyAgdWxHTUNSZXN0b3JlUmVzZXRUaW1lOworICBVTE9ORyAgdWxNaW5pbXVtTkNsazsKKyAgVUxPTkcgIHVsSWRsZU5DbGs7CisgIFVMT05HICB1bEREUl9ETExfUG93ZXJVcFRpbWU7CisgIFVMT05HICB1bEREUl9QTExfUG93ZXJVcFRpbWU7CisgIFVTSE9SVCB1c1BDSUVDbGtTU1BlcmNlbnRhZ2U7CisgIFVTSE9SVCB1c1BDSUVDbGtTU1R5cGU7CisgIFVTSE9SVCB1c0x2ZHNTU1BlcmNlbnRhZ2U7CisgIFVTSE9SVCB1c0x2ZHNTU3ByZWFkUmF0ZUluMTBIejsKKyAgVVNIT1JUIHVzSERNSVNTUGVyY2VudGFnZTsKKyAgVVNIT1JUIHVzSERNSVNTcHJlYWRSYXRlSW4xMEh6OworICBVU0hPUlQgdXNEVklTU1BlcmNlbnRhZ2U7CisgIFVTSE9SVCB1c0RWSVNTcHJlYWRSYXRlSW4xMEh6OworICBVTE9ORyAgdWxSZXNlcnZlZDNbMjFdOyAKICAgQVRPTV9FWFRFUk5BTF9ESVNQTEFZX0NPTk5FQ1RJT05fSU5GTyBzRXh0RGlzcENvbm5JbmZvOyAgIAogfUFUT01fSU5URUdSQVRFRF9TWVNURU1fSU5GT19WNjsgICAKIAorLy8gdWxHUFVDYXBJbmZvCisjZGVmaW5lIElOVEVHUkFURURfU1lTVEVNX0lORk9fVjZfR1BVQ0FQSU5GT19fVE1EU0hETUlfQ09IRVJFTlRfU0lOR0xFUExMX01PREUgICAgICAgMHgwMQorI2RlZmluZSBJTlRFR1JBVEVEX1NZU1RFTV9JTkZPX1Y2X0dQVUNBUElORk9fX0RJU0FCTEVfQVVYX0hXX01PREVfREVURUNUSU9OICAgICAgICAgIDB4MDgKKworLy8gdWxPdGhlckRpc3BsYXlNaXNjCisjZGVmaW5lIElOVEVHUkFURURfU1lTVEVNX0lORk9fX0dFVF9FRElEX0NBTExCQUNLX0ZVTkNfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyBBVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk9fVjYgRGVzY3JpcHRpb24KLS8vdWxCb290VXBFbmdpbmVDbG9jazogICAgICAgICAgICAgIFZCSU9TIGJvb3R1cCBFbmdpbmUgY2xvY2sgZnJlcXVlbmN5LCBpbiAxMGtIeiB1bml0LiAKLS8vdWxEZW50aXN0VkNPRnJlcTogICAgICAgICAgICAgICAgIERlbnRpc3QgVkNPIGNsb2NrIGluIDEwa0h6IHVuaXQuIAotLy91bEJvb3RVcFVNQUNsb2NrOiAgICAgICAgICAgICAgICAgU3lzdGVtIG1lbW9yeSBib290IHVwIGNsb2NrIGZyZXF1ZW5jeSBpbiAxMEtoeiB1bml0LiAKLS8vdWxSZXNlcnZlZDFbOF0gICAgICAgICAgICAgICAgICAgIFJlc2VydmVkIGJ5IG5vdywgbXVzdCBiZSAweDAuIAotLy91bEJvb3RVcFJlcURpc3BsYXlWZWN0b3IJICAgICAgICBWQklPUyBib290IHVwIGRpc3BsYXkgSURzCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDAwMDEKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCAgICAgICAgICAgICAgICAgIDB4MDAxMAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwMDA4IAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfREZQNl9TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwMDQwIAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwMDgwICAgICAgIAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfREZQM19TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwMjAwICAgICAgIAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfREZQNF9TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwNDAwICAgICAgICAKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUT01fREVWSUNFX0RGUDVfU1VQUE9SVCAgICAgICAgICAgICAgICAgIDB4MDgwMAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwMDAyCi0vL3VsT3RoZXJEaXNwbGF5TWlzYyAgICAgIAkgICAgICAgIE90aGVyIGRpc3BsYXkgcmVsYXRlZCBmbGFncywgbm90IGRlZmluZWQgeWV0LiAKLS8vdWxHUFVDYXBJbmZvICAgICAgICAgICAgICAgICAgICAgIFRCRAotLy91bFJlc2VydmVkMlszXSAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSAweDAgZm9yIHRoZSByZXNlcnZlZC4KLS8vdWxTeXN0ZW1Db25maWcgICAgICAgICAgICAgICAgICAgIFRCRAotLy91bENQVUNhcEluZm8gICAgICAgICAgICAgICAgICAgICAgVEJECi0vL3VzTWF4TkJWb2x0YWdlICAgICAgICAgICAgICAgICAgICBIaWdoIE5CIHZvbHRhZ2UgaW4gdW5pdCBvZiBtdiwgY2FsY3VsYXRlZCB1c2luZyBjdXJyZW50IFZERE5CIChEMjRGMnhEQykgYW5kIFZERE5CIG9mZnNldCBmdXNlLiAKLS8vdXNNaW5OQlZvbHRhZ2UgICAgICAgICAgICAgICAgICAgIExvdyBOQiB2b2x0YWdlIGluIHVuaXQgb2YgbXYsIGNhbGN1bGF0ZWQgdXNpbmcgY3VycmVudCBWREROQiAoRDI0RjJ4REMpIGFuZCBWREROQiBvZmZzZXQgZnVzZS4KLS8vdXNCb290VXBOQlZvbHRhZ2UgICAgICAgICAgICAgICAgIEJvb3QgdXAgTkIgdm9sdGFnZSBpbiB1bml0IG9mIG12LgotLy91Y0h0Y1RtcExtdCAgICAgICAgICAgICAgICAgICAgICAgQml0IFsyMjoxNl0gb2YgRDI0RjN4NjQgVGhlcm1hbCBDb250cm9sIChIVEMpIFJlZ2lzdGVyLgotLy91Y1RqT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgQml0IFsyODoyMl0gb2YgRDI0RjN4RTQgVGhlcm10cmlwIFN0YXR1cyBSZWdpc3RlcixtYXkgbm90IGJlIG5lZWRlZC4KLS8vdWNNZW1vcnlUeXBlICAgICAgICAgICAgICAgICAgICAgIFszOjBdPTE6RERSMTs9MjpERFIyOz0zOkREUjMuWzc6NF0gaXMgcmVzZXJ2ZWQuCi0vL3VjVU1BQ2hhbm5lbE51bWJlciAgICAgIAkgICAgICAgIFN5c3RlbSBtZW1vcnkgY2hhbm5lbCBudW1iZXJzLiAKLS8vdXNFeHREaXNwQ29ubmVjdGlvbkluZm9PZmZzZXQgICAgIEFUT01fRVhURVJOQUxfRElTUExBWV9DT05ORUNUSU9OX0lORk8gb2Zmc2V0IHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiB0aGlzIHRhYmxlLiAKLS8vdWxDU1JfTTNfQVJCX0NOVExfREVGQVVMVFsxMF0gICAgIEFycmF5cyB3aXRoIHZhbHVlcyBmb3IgQ1NSIE0zIGFyYml0ZXIgZm9yIGRlZmF1bHQKLS8vdWxDU1JfTTNfQVJCX0NOVExfVVZEWzEwXSAgICAgICAgIEFycmF5cyB3aXRoIHZhbHVlcyBmb3IgQ1NSIE0zIGFyYml0ZXIgZm9yIFVWRCBwbGF5YmFjay4KLS8vdWxDU1JfTTNfQVJCX0NOVExfRlMzRFsxMF0gICAgICAgIEFycmF5cyB3aXRoIHZhbHVlcyBmb3IgQ1NSIE0zIGFyYml0ZXIgZm9yIEZ1bGwgU2NyZWVuIDNEIGFwcGxpY2F0aW9ucy4KKyAgQVRPTV9JTlRFR1JBVEVEX1NZU1RFTV9JTkZPX1Y2IERlc2NyaXB0aW9uCit1bEJvb3RVcEVuZ2luZUNsb2NrOiAgICAgICAgICAgICAgVkJJT1MgYm9vdHVwIEVuZ2luZSBjbG9jayBmcmVxdWVuY3ksIGluIDEwa0h6IHVuaXQuIGlmIGl0IGlzIGVxdWFsIDAsIHRoZW4gVkJJT1MgdXNlIHByZS1kZWZpbmVkIGJvb3R1cCBlbmdpbmUgY2xvY2sKK3VsRGVudGlzdFZDT0ZyZXE6ICAgICAgICAgICAgICAgICBEZW50aXN0IFZDTyBjbG9jayBpbiAxMGtIeiB1bml0LiAKK3VsQm9vdFVwVU1BQ2xvY2s6ICAgICAgICAgICAgICAgICBTeXN0ZW0gbWVtb3J5IGJvb3QgdXAgY2xvY2sgZnJlcXVlbmN5IGluIDEwS2h6IHVuaXQuIAorc0RJU1BDTEtfVm9sdGFnZTogICAgICAgICAgICAgICAgIFJlcG9ydCBEaXNwbGF5IGNsb2NrIHZvbHRhZ2UgcmVxdWlyZW1lbnQuCisgCit1bEJvb3RVcFJlcURpc3BsYXlWZWN0b3I6ICAgICAgICAgVkJJT1MgYm9vdCB1cCBkaXNwbGF5IElEcywgZm9sbG93aW5nIGFyZSBzdXBwb3J0ZWQgZGV2aWNlcyBpbiBMaWFuby9PbnRhaW8gcHJvamVjdHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwMDAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwMDEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwMDA4IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUT01fREVWSUNFX0RGUDZfU1VQUE9SVCAgICAgICAgICAgICAgICAgIDB4MDA0MCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDAwODAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfREZQM19TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwMjAwICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUT01fREVWSUNFX0RGUDRfU1VQUE9SVCAgICAgICAgICAgICAgICAgIDB4MDQwMCAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfREZQNV9TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwODAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwMDAyCit1bE90aGVyRGlzcGxheU1pc2M6ICAgICAgCSAgICAgICAgT3RoZXIgZGlzcGxheSByZWxhdGVkIGZsYWdzLCBub3QgZGVmaW5lZCB5ZXQuIAordWxHUFVDYXBJbmZvOiAgICAgICAgICAgICAgICAgICAgIGJpdFswXT0wOiBUTURTL0hETUkgQ29oZXJlbnQgTW9kZSB1c2UgY2FzY2FkZSBQTEwgbW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9MTogVE1EUy9IRE1JIENvaGVyZW50IE1vZGUgdXNlIHNpZ25lbCBQTEwgbW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRbM109MDogRW5hYmxlIEhXIEFVWCBtb2RlIGRldGVjdGlvbiBsb2dpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0xOiBEaXNhYmxlIEhXIEFVWCBtb2RlIGRldHRpb24gbG9naWMKK3VsU0JfTU1JT19CYXNlX0FkZHI6ICAgICAgICAgICAgICBQaHlzaWNhbCBCYXNlIGFkZHJlc3MgdG8gU0IgTU1JTyBzcGFjZS4gRHJpdmVyIG5lZWRzIHRvIGluaXRpYWxpemUgaXQgZm9yIFNNVSB1c2FnZS4KKwordXNSZXF1ZXN0ZWRQV01GcmVxSW5IejogICAgICAgICAgIFdoZW4gaXQncyBzZXQgdG8gMHgwIGJ5IFNCSU9TOiB0aGUgTENEIEJhY2tMaWdodCBpcyBub3QgY29udHJvbGxlZCBieSBHUFUoU1cpLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnkgYXR0ZW1wdCB0byBjaGFuZ2UgQkwgdXNpbmcgVkJJT1MgZnVuY3Rpb24gb3IgZW5hYmxlIFZhcmlCcmkgZnJvbSBQUCB0YWJsZSBpcyBub3QgZWZmZWN0aXZlIHNpbmNlIEFUT01fQklPU19JTkZPX0JMX0NPTlRST0xMRURfQllfR1BVPT0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gaXQncyBzZXQgdG8gYSBub24temVybyBmcmVxdWVuY3ksIHRoZSBCYWNrTGlnaHQgaXMgY29udHJvbGxlZCBieSBHUFUgKFNXKSBpbiBvbmUgb2YgdHdvIHdheXMgYmVsb3c6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4gU1cgdXNlcyB0aGUgR1BVIEJMIFBXTSBvdXRwdXQgdG8gY29udHJvbCB0aGUgQkwsIGluIGNoaXMgY2FzZSwgdGhpcyBub24temVybyBmcmVxdWVuY3kgZGV0ZXJtaW5lcyB3aGF0IGZyZXEgR1BVIHNob3VsZCB1c2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkJJT1Mgd2lsbCBzZXQgdXAgcHJvcGVyIFBXTSBmcmVxdWVuY3kgYW5kIEFUT01fQklPU19JTkZPX0JMX0NPTlRST0xMRURfQllfR1BVPT0xLGFzIHRoZSByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdpbmcgQkwgdXNpbmcgVkJJT1MgZnVuY3Rpb24gaXMgZnVuY3Rpb25hbCBpbiBib3RoIGRyaXZlciBhbmQgbm9uLWRyaXZlciBwcmVzZW50IGVudmlyb25tZW50OyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZW5hYmxpbmcgVmFyaUJyaSB1bmRlciB0aGUgZHJpdmVyIGVudmlyb25tZW50IGZyb20gUFAgdGFibGUgaXMgb3B0aW9uYWwuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLiBTVyB1c2VzIG90aGVyIG1lYW5zIHRvIGNvbnRyb2wgQkwgKGxpa2UgRFBDRCksdGhpcyBub24temVybyBmcmVxdWVuY3kgc2VydmVzIGFzIGEgZmxhZyBvbmx5IGluZGljYXRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IEJMIGNvbnRyb2wgZnJvbSBHUFUgaXMgZXhwZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkJJT1Mgd2lsbCBOT1Qgc2V0IHVwIFBXTSBmcmVxdWVuY3kgYnV0IG1ha2UgQVRPTV9CSU9TX0lORk9fQkxfQ09OVFJPTExFRF9CWV9HUFU9PTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2luZyBCTCB1c2luZyBWQklPUyBmdW5jdGlvbiBjb3VsZCBiZSBmdW5jdGlvbmFsIGluIGJvdGggZHJpdmVyIGFuZCBub24tZHJpdmVyIHByZXNlbnQgZW52aXJvbm1lbnQsYnV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQncyBwZXIgcGxhdGZvcm0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGVuYWJsaW5nIFZhcmlCcmkgdW5kZXIgdGhlIGRyaXZlciBlbnZpcm9ubWVudCBmcm9tIFBQIHRhYmxlIGlzIG9wdGlvbmFsLgorCit1Y0h0Y1RtcExtdDogICAgICAgICAgICAgICAgICAgICAgUmVmZXIgdG8gRDE4RjN4NjQgYml0WzIyOjE2XSwgSHRjVG1wTG10LiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlc2hvbGQgb24gdmFsdWUgdG8gZW50ZXIgSFRDX2FjdGl2ZSBzdGF0ZS4KK3VjSHRjSHlzdExtdDogICAgICAgICAgICAgICAgICAgICBSZWZlciB0byBEMThGM3g2NCBiaXRbMjc6MjRdLCBIdGNIeXN0TG10LiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBjYWxjdWxhdGUgdGhyZXNob2xkIG9mZiB2YWx1ZSB0byBleGl0IEhUQ19hY3RpdmUgc3RhdGUsIHdoaWNoIGlzIFRocmVzaG9sZCBvbiB2bGF1ZSBtaW51cyB1Y0h0Y0h5c3RMbXQuCit1bE1pbkVuZ2luZUNsb2NrOiAgICAgICAgICAgICAgICAgTWluaW11bSBTQ0xLIGFsbG93ZWQgaW4gMTBrSHogdW5pdC4gVGhpcyBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIFdSQ0sgRnVzZSBzZXR0aW5ncy4KK3VsU3lzdGVtQ29uZmlnOiAgICAgICAgICAgICAgICAgICBCaXRbMF09MDogUENJRSBQb3dlciBHYXRpbmcgRGlzYWJsZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPTE6IFBDSUUgUG93ZXIgR2F0aW5nIEVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRbMV09MDogRERSLURMTCBzaHV0LWRvd24gZmVhdHVyZSBkaXNhYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTogRERSLURMTCBzaHV0LWRvd24gZmVhdHVyZSBlbmFibGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdFsyXT0wOiBERFItUExMIFBvd2VyIGRvd24gZmVhdHVyZSBkaXNhYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTogRERSLVBMTCBQb3dlciBkb3duIGZlYXR1cmUgZW5hYmxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK3VsQ1BVQ2FwSW5mbzogICAgICAgICAgICAgICAgICAgICBUQkQKK3VzTkJQMFZvbHRhZ2U6ICAgICAgICAgICAgICAgICAgICBWSUQgZm9yIHZvbHRhZ2Ugb24gTkIgUDAgU3RhdGUKK3VzTkJQMVZvbHRhZ2U6ICAgICAgICAgICAgICAgICAgICBWSUQgZm9yIHZvbHRhZ2Ugb24gTkIgUDEgU3RhdGUgIAordXNCb290VXBOQlZvbHRhZ2U6ICAgICAgICAgICAgICAgIFZvbHRhZ2UgSW5kZXggb2YgR05CIHZvbHRhZ2UgY29uZmlndXJlZCBieSBTQklPUywgd2hpY2ggaXMgc3VmZmNpZW50IHRvIHN1cHBvcnQgVkJJT1MgRElTUENMSyByZXF1aXJlbWVudC4KK3VzRXh0RGlzcENvbm5JbmZvT2Zmc2V0OiAgICAgICAgICBPZmZzZXQgdG8gc0V4dERpc3BDb25uSW5mbyBpbnNpZGUgdGhlIHN0cnVjdHVyZQordXNQYW5lbFJlZnJlc2hSYXRlUmFuZ2U6ICAgICAgICAgIEJpdCB2ZWN0b3IgZm9yIExDRCBzdXBwb3J0ZWQgcmVmcmVzaCByYXRlIHJhbmdlLiBJZiBEUlIgaXMgcmVxdWVzdGQgYnkgdGhlIHBsYXRmb3JtLCBhdCBsZWFzdCB0d28gYml0cyBuZWVkIHRvIGJlIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGluZGljYXRlIGEgcmFuZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VQUE9SVEVEX0xDRF9SRUZSRVNIUkFURV8zMEh6ICAgICAgICAgIDB4MDAwNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVUFBPUlRFRF9MQ0RfUkVGUkVTSFJBVEVfNDBIeiAgICAgICAgICAweDAwMDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVVBQT1JURURfTENEX1JFRlJFU0hSQVRFXzUwSHogICAgICAgICAgMHgwMDEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VQUE9SVEVEX0xDRF9SRUZSRVNIUkFURV82MEh6ICAgICAgICAgIDB4MDAyMAordWNNZW1vcnlUeXBlOiAgICAgICAgICAgICAgICAgICAgIFszOjBdPTE6RERSMTs9MjpERFIyOz0zOkREUjMuWzc6NF0gaXMgcmVzZXJ2ZWQuCit1Y1VNQUNoYW5uZWxOdW1iZXI6ICAgICAgCSAgICAgICAgU3lzdGVtIG1lbW9yeSBjaGFubmVsIG51bWJlcnMuIAordWxDU1JfTTNfQVJCX0NOVExfREVGQVVMVFsxMF06ICAgIEFycmF5cyB3aXRoIHZhbHVlcyBmb3IgQ1NSIE0zIGFyYml0ZXIgZm9yIGRlZmF1bHQKK3VsQ1NSX00zX0FSQl9DTlRMX1VWRFsxMF06ICAgICAgICBBcnJheXMgd2l0aCB2YWx1ZXMgZm9yIENTUiBNMyBhcmJpdGVyIGZvciBVVkQgcGxheWJhY2suCit1bENTUl9NM19BUkJfQ05UTF9GUzNEWzEwXTogICAgICAgQXJyYXlzIHdpdGggdmFsdWVzIGZvciBDU1IgTTMgYXJiaXRlciBmb3IgRnVsbCBTY3JlZW4gM0QgYXBwbGljYXRpb25zLgorc0F2YWlsX1NDTEtbNV06ICAgICAgICAgICAgICAgICAgIEFycmF5cyB0byBwcm92aWRlIGF2YWlsYWJlIGxpc3Qgb2YgU0xDSyBhbmQgY29ycmVzcG9uZGluZyB2b2x0YWdlLCBvcmRlciBmcm9tIGxvdyB0byBoaWdoICAKK3VsR01DUmVzdG9yZVJlc2V0VGltZTogICAgICAgICAgICBHTUMgcG93ZXIgcmVzdG9yZSBhbmQgR01DIHJlc2V0IHRpbWUgdG8gY2FsY3VsYXRlIGRhdGEgcmVjb25uZWN0aW9uIGxhdGVuY3kuIFVuaXQgaW4gbnMuIAordWxNaW5pbXVtTkNsazogICAgICAgICAgICAgICAgICAgIE1pbmltdW0gTkNMSyBzcGVlZCBhbW9uZyBhbGwgTkItUHN0YXRlcyB0byBjYWxjdWFsdGUgZGF0YSByZWNvbm5lY3Rpb24gbGF0ZW5jeS4gVW5pdCBpbiAxMGtIei4gCit1bElkbGVOQ2xrOiAgICAgICAgICAgICAgICAgICAgICAgTkNMSyBzcGVlZCB3aGlsZSBtZW1vcnkgcnVucyBpbiBzZWxmLXJlZnJlc2ggc3RhdGUuIFVuaXQgaW4gMTBrSHouCit1bEREUl9ETExfUG93ZXJVcFRpbWU6ICAgICAgICAgICAgRERSIFBIWSBETEwgcG93ZXIgdXAgdGltZS4gVW5pdCBpbiBucy4KK3VsRERSX1BMTF9Qb3dlclVwVGltZTogICAgICAgICAgICBERFIgUEhZIFBMTCBwb3dlciB1cCB0aW1lLiBVbml0IGluIG5zLgordXNQQ0lFQ2xrU1NQZXJjZW50YWdlOiAgICAgICAgICAgIFBDSUUgQ2xvY2sgU3ByZWQgU3BlY3RydW0gUGVyY2VudGFnZSBpbiB1bml0IDAuMDElOyAxMDAgbWVhbiAxJS4KK3VzUENJRUNsa1NTVHlwZTogICAgICAgICAgICAgICAgICBQQ0lFIENsb2NrIFNwcmVkIFNwZWN0cnVtIFR5cGUuIDAgZm9yIERvd24gc3ByZWFkKGRlZmF1bHQpOyAxIGZvciBDZW50ZXIgc3ByZWFkLgordXNMdmRzU1NQZXJjZW50YWdlOiAgICAgICAgICAgICAgIExWRFMgcGFuZWwgKCBub3QgaW5jbHVkZSBlRFAgKSBTcHJlYWQgU3BlY3RydW0gUGVyY2VudGFnZSBpbiB1bml0IG9mIDAuMDElLCA9MCwgdXNlIFZCSU9TIGRlZmF1bHQgc2V0dGluZy4gCit1c0x2ZHNTU3ByZWFkUmF0ZUluMTBIejogICAgICAgICAgTFZEUyBwYW5lbCAoIG5vdCBpbmNsdWRlIGVEUCApIFNwcmVhZCBTcGVjdHJ1bSBmcmVxdWVuY3kgaW4gdW5pdCBvZiAxMEh6LCA9MCwgdXNlIFZCSU9TIGRlZmF1bHQgc2V0dGluZy4gCit1c0hETUlTU1BlcmNlbnRhZ2U6ICAgICAgICAgICAgICAgSERNSSBTcHJlYWQgU3BlY3RydW0gUGVyY2VudGFnZSBpbiB1bml0IDAuMDElOyAxMDAgbWVhbiAxJSwgID0wLCB1c2UgVkJJT1MgZGVmYXVsdCBzZXR0aW5nLiAKK3VzSERNSVNTcHJlYWRSYXRlSW4xMEh6OiAgICAgICAgICBIRE1JIFNwcmVhZCBTcGVjdHJ1bSBmcmVxdWVuY3kgaW4gdW5pdCBvZiAxMEh6LCAgPTAsIHVzZSBWQklPUyBkZWZhdWx0IHNldHRpbmcuIAordXNEVklTU1BlcmNlbnRhZ2U6ICAgICAgICAgICAgICAgIERWSSBTcHJlYWQgU3BlY3RydW0gUGVyY2VudGFnZSBpbiB1bml0IDAuMDElOyAxMDAgbWVhbiAxJSwgID0wLCB1c2UgVkJJT1MgZGVmYXVsdCBzZXR0aW5nLiAKK3VzRFZJU1NwcmVhZFJhdGVJbjEwSHo6ICAgICAgICAgICBEVkkgU3ByZWFkIFNwZWN0cnVtIGZyZXF1ZW5jeSBpbiB1bml0IG9mIDEwSHosICA9MCwgdXNlIFZCSU9TIGRlZmF1bHQgc2V0dGluZy4gCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zNzkwLDYgKzQ0MzksNyBAQAogI2RlZmluZSBBU0lDX0lOVEVSTkFMX1NTX09OX0xWRFMgICAgNgogI2RlZmluZSBBU0lDX0lOVEVSTkFMX1NTX09OX0RQICAgICAgNwogI2RlZmluZSBBU0lDX0lOVEVSTkFMX1NTX09OX0RDUExMICAgOAorI2RlZmluZSBBU0lDX0VYVEVSTkFMX1NTX09OX0RQX0NMT0NLIDkKIAogdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQVNJQ19TU19BU1NJR05NRU5UX1YyCiB7CkBAIC0zOTAzLDYgKzQ1NTMsNyBAQAogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9WQUxVRV9BQyAgICAgMQogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9WQUxVRV9EQyAgICAgMgogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9WQUxVRV9MSVRFQUMgMworI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9WQUxVRV9MSVQyQUMgNAogCiAvL0J5dGUgYWxpZ25lZCBkZWZpbnRpb24gZm9yIEJJT1MgdXNhZ2UKICNkZWZpbmUgQVRPTV9TMF9DUlQxX01PTk9iMCAgICAgICAgICAgICAweDAxCkBAIC00NTI5LDcgKzUxODAsOCBAQAogI2RlZmluZSBJTkRFWF9BQ0NFU1NfUkFOR0VfQkVHSU4JICAgIChWQUxVRV9EV09SRCArIDEpCiAjZGVmaW5lIElOREVYX0FDQ0VTU19SQU5HRV9FTkQJCSAgICAoSU5ERVhfQUNDRVNTX1JBTkdFX0JFR0lOICsgMSkKICNkZWZpbmUgVkFMVUVfSU5ERVhfQUNDRVNTX1NJTkdMRQkgICAgKElOREVYX0FDQ0VTU19SQU5HRV9FTkQgKyAxKQotCisvLyNkZWZpbmUgQUNDRVNTX01DSU9ERUJVR0lORCAgICAgICAgICAgIDB4NDAgICAgICAgLy9kZWZpbmVkIGluIEJJT1MgY29kZQorI2RlZmluZSBBQ0NFU1NfUExBQ0VIT0xERVIgICAgICAgICAgICAgMHg4MAogCiB0eXBlZGVmIHN0cnVjdCBfQVRPTV9NQ19JTklUX1BBUkFNX1RBQkxFCiB7IApAQCAtNDU1NCw2ICs1MjA2LDEwIEBACiAjZGVmaW5lIF8zMk14MzIgICAgICAgICAgICAgMHgzMwogI2RlZmluZSBfNjRNeDggICAgICAgICAgICAgIDB4NDEKICNkZWZpbmUgXzY0TXgxNiAgICAgICAgICAgICAweDQyCisjZGVmaW5lIF82NE14MzIgICAgICAgICAgICAgMHg0MworI2RlZmluZSBfMTI4TXg4ICAgICAgICAgICAgIDB4NTEKKyNkZWZpbmUgXzEyOE14MTYgICAgICAgICAgICAweDUyCisjZGVmaW5lIF8yNTZNeDggICAgICAgICAgICAgMHg2MQogCiAjZGVmaW5lIFNBTVNVTkcgICAgICAgICAgICAgMHgxCiAjZGVmaW5lIElORklORU9OICAgICAgICAgICAgMHgyCkBAIC00NTY5LDEwICs1MjI1LDExIEBACiAjZGVmaW5lIFFJTU9OREEgICAgICAgICAgICAgSU5GSU5FT04KICNkZWZpbmUgUFJPTU9TICAgICAgICAgICAgICBNT1NFTAogI2RlZmluZSBLUkVUT04gICAgICAgICAgICAgIElORklORU9OCisjZGVmaW5lIEVMSVhJUiAgICAgICAgICAgICAgTkFOWUEKIAogLy8vLy8vLy8vLy8vL1N1cHBvcnQgZm9yIEdERFI1IE1DIHVDb2RlIHRvIHJlc2lkZSBpbiB1cHBlciA2NEsgb2YgUk9NLy8vLy8vLy8vLy8vLwogCi0jZGVmaW5lIFVDT0RFX1JPTV9TVEFSVF9BRERSRVNTCQkweDFjMDAwCisjZGVmaW5lIFVDT0RFX1JPTV9TVEFSVF9BRERSRVNTCQkweDFiODAwCiAjZGVmaW5lCVVDT0RFX1NJR05BVFVSRQkJCTB4NDM3NTQzNGQgLy8gJ01DdUMnIC0gTUMgdUNvZGUKIAogLy91Q29kZSBibG9jayBoZWFkZXIgZm9yIHJlZmVyZW5jZQpAQCAtNDkwMyw3ICs1NTYwLDM0IEBACiAgIEFUT01fTUVNT1JZX1RJTUlOR19GT1JNQVRfVjIgIGFzTWVtVGltaW5nWzVdOy8vTWVtb3J5IFRpbWluZyBibG9jayBzb3J0IGZyb20gbG93ZXIgY2xvY2sgdG8gaGlnaGVyIGNsb2NrCiB9QVRPTV9WUkFNX01PRFVMRV9WNjsKIAotCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX01PRFVMRV9WNworeworLy8gRGVzaWduIFNwZWNpZmljIFZhbHVlcworICBVTE9ORwkgIHVsQ2hhbm5lbE1hcENmZzsJICAgICAgICAgICAgICAgIC8vIG1tTUNfU0hBUkVEX0NIUkVNQVAKKyAgVVNIT1JUICB1c01vZHVsZVNpemU7ICAgICAgICAgICAgICAgICAgICAgLy8gU2l6ZSBvZiBBVE9NX1ZSQU1fTU9EVUxFX1Y3CisgIFVTSE9SVCAgdXNQcml2YXRlUmVzZXJ2ZWQ7ICAgICAgICAgICAgICAgIC8vIE1DX0FSQl9SQU1DRkcgKGluY2x1ZGVzIE5PT0ZCQU5LLE5PT0ZSQU5LUyxOT09GUk9XUyxOT09GQ09MUykKKyAgVVNIT1JUICB1c1Jlc2VydmVkOworICBVQ0hBUiAgIHVjRXh0TWVtb3J5SUQ7ICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50IG1lbW9yeSBtb2R1bGUgSUQKKyAgVUNIQVIgICB1Y01lbW9yeVR5cGU7ICAgICAgICAgICAgICAgICAgICAgLy8gTUVNX1RZUEVfRERSMi9ERFIzL0dERFIzL0dERFI1CisgIFVDSEFSICAgdWNDaGFubmVsTnVtOyAgICAgICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBtZW0uIGNoYW5uZWxzIHN1cHBvcnRlZCBpbiB0aGlzIG1vZHVsZQorICBVQ0hBUiAgIHVjQ2hhbm5lbFdpZHRoOyAgICAgICAgICAgICAgICAgICAvLyBDSEFOTkVMXzE2QklUL0NIQU5ORUxfMzJCSVQvQ0hBTk5FTF82NEJJVAorICBVQ0hBUiAgIHVjRGVuc2l0eTsgICAgICAgICAgICAgICAgICAgICAgICAvLyBfOE14MzIsIF8xNk14MzIsIF8xNk14MTYsIF8zMk14MTYKKyAgVUNIQVIJICB1Y1Jlc2VydmU7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWVyIGNvbnRhaW5lciBmb3IgTXhfRkxBR1MgbGlrZSBEQklfQUNfTU9ERV9FTkFCTEVfQVNJQyBmb3IgR0REUjQuIE5vdCB1c2VkIG5vdy4KKyAgVUNIQVIJICB1Y01pc2M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUkFOS19PRl9USElTTUVNT1JZIGV0Yy4KKyAgVUNIQVIJICB1Y1ZSRUZJOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90IHVzZWQuCisgIFVDSEFSICAgdWNOUExfUlQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJvdW5kIHRyaXAgZGVsYXkgKE1DX1NFUV9DQVNfVElNSU5HIFsyODoyNF06VENMPUNMK05QTF9SVC0yKS4gQWx3YXlzIDIuCisgIFVDSEFSCSAgdWNQcmVhbWJsZTsgICAgICAgICAgICAgICAgICAgICAgIC8vIFs3OjRdIFdyaXRlIFByZWFtYmxlLCBbMzowXSBSZWFkIFByZWFtYmxlCisgIFVDSEFSICAgdWNNZW1vcnlTaXplOyAgICAgICAgICAgICAgICAgICAgIC8vIFRvdGFsIG1lbW9yeSBzaXplIGluIHVuaXQgb2YgMTZNQiBmb3IgQ09ORklHX01FTVNJWkUgLSBiaXRbMjM6MF0gemVyb3MKKyAgVUNIQVIgICB1Y1Jlc2VydmVkWzNdOworLy8gTWVtb3J5IE1vZHVsZSBzcGVjaWZpYyB2YWx1ZXMKKyAgVVNIT1JUICB1c0VNUlMyVmFsdWU7ICAgICAgICAgICAgICAgICAgICAgLy8gRU1SUzIvTVIyIFZhbHVlLiAKKyAgVVNIT1JUICB1c0VNUlMzVmFsdWU7ICAgICAgICAgICAgICAgICAgICAgLy8gRU1SUzMvTVIzIFZhbHVlLgorICBVQ0hBUiAgIHVjTWVtb3J5VmVuZGVySUQ7ICAgICAgICAgICAgICAgICAvLyBbNzo0XSBSZXZpc2lvbiwgWzM6MF0gVmVuZG9yIGNvZGUKKyAgVUNIQVIJICB1Y1JlZnJlc2hSYXRlRmFjdG9yOyAgICAgICAgICAgICAgLy8gWzE6MF09UmVmcmVzaEZhY3RvciAoMDA9OG1zLCAwMT0xNm1zLCAxMD0zMm1zLDExPTY0bXMpCisgIFVDSEFSCSAgdWNGSUZPRGVwdGg7ICAgICAgICAgICAgICAgICAgICAgIC8vIEZJRk8gZGVwdGggY2FuIGJlIGRldGVjdGVkIGR1cmluZyB2ZW5kb3IgZGV0ZWN0aW9uLCBoZXJlIGlzIGhhcmRjb2RlZCBwZXIgbWVtb3J5CisgIFVDSEFSICAgdWNDRFJfQmFuZHdpZHRoOyAgICAgICAgICAgICAgICAgIC8vIFswOjNdPVJlYWQgQ0RSIGJhbmR3aWR0aCwgWzQ6N10gLSBXcml0ZSBDRFIgQmFuZHdpZHRoCisgIGNoYXIgICAgc3RyTWVtUE5TdHJpbmdbMjBdOyAgICAgICAgICAgICAgIC8vIHBhcnQgbnVtYmVyIGVuZCB3aXRoICcwJy4gCit9QVRPTV9WUkFNX01PRFVMRV9WNzsKIAogdHlwZWRlZiBzdHJ1Y3QgX0FUT01fVlJBTV9JTkZPX1YyCiB7CkBAIC00OTQyLDYgKzU2MjYsMjAgQEAKIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJIC8vCUFUT01fSU5JVF9SRUdfQkxPQ0sJCQkJIGFNZW1BZGp1c3Q7CiB9QVRPTV9WUkFNX0lORk9fVjQ7CiAKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1ZSQU1fSU5GT19IRUFERVJfVjJfMQoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgICBzSGVhZGVyOworCVVTSE9SVAkJCQkJCQkJCQkgdXNNZW1BZGp1c3RUYmxPZmZzZXQ7CQkJCQkJCQkJCQkJCSAvLyBvZmZzZXQgb2YgQVRPTV9JTklUX1JFR19CTE9DSyBzdHJ1Y3R1cmUgZm9yIG1lbW9yeSB2ZW5kb3Igc3BlY2lmaWMgTUMgYWRqdXN0IHNldHRpbmcKKwlVU0hPUlQJCQkJCQkJCQkJIHVzTWVtQ2xrUGF0Y2hUYmxPZmZzZXQ7CQkJCQkJCQkJCQkJIC8vCW9mZnNldCBvZiBBVE9NX0lOSVRfUkVHX0JMT0NLIHN0cnVjdHVyZSBmb3IgbWVtb3J5IGNsb2NrIHNwZWNpZmljIE1DIHNldHRpbmcKKwlVU0hPUlQJCQkJCQkJCQkJIHVzUmVzZXJ2ZWRbNF07CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTnVtT2ZWUkFNTW9kdWxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZGljYXRlIG51bWJlciBvZiBWUkFNIG1vZHVsZQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y01lbW9yeUNsa1BhdGNoVGJsVmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2ZXJzaW9uIG9mIG1lbW9yeSBBQyB0aW1pbmcgcmVnaXN0ZXIgbGlzdAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y1ZyYW1Nb2R1bGVWZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmRpY2F0ZSBBVE9NX1ZSQU1fTU9EVUUgdmVyc2lvbgorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkOyAKKyAgQVRPTV9WUkFNX01PRFVMRV9WNwkJICAgICBhVnJhbUluZm9bQVRPTV9NQVhfTlVNQkVSX09GX1ZSQU1fTU9EVUxFXTsgICAgICAvLyBqdXN0IGZvciBhbGxvY2F0aW9uLCByZWFsIG51bWJlciBvZiBibG9ja3MgaXMgaW4gdWNOdW1PZlZSQU1Nb2R1bGU7Cit9QVRPTV9WUkFNX0lORk9fSEVBREVSX1YyXzE7CisKKwogdHlwZWRlZiBzdHJ1Y3QgX0FUT01fVlJBTV9HUElPX0RFVEVDVElPTl9JTkZPCiB7CiAgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgIHNIZWFkZXI7CkBAIC01MTgyLDYgKzU4ODAsMTYgQEAKIAlVQ0hBUiAgdWNSZXNlcnZlZDsKIH1BU0lDX1RSQU5TTUlUVEVSX0lORk87CiAKKyNkZWZpbmUgQVNJQ19UUkFOU01JVFRFUl9JTkZPX0NPTkZJR19fRFZPX1NEUl9NT0RFICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQVNJQ19UUkFOU01JVFRFUl9JTkZPX0NPTkZJR19fQ09IRVJFTlRfTU9ERSAgICAgICAgIDB4MDIKKyNkZWZpbmUgQVNJQ19UUkFOU01JVFRFUl9JTkZPX0NPTkZJR19fRU5DT0RFUk9CSl9JRF9NQVNLICAgIDB4YzQKKyNkZWZpbmUgQVNJQ19UUkFOU01JVFRFUl9JTkZPX0NPTkZJR19fRU5DT0RFUl9BICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQVNJQ19UUkFOU01JVFRFUl9JTkZPX0NPTkZJR19fRU5DT0RFUl9CICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVNJQ19UUkFOU01JVFRFUl9JTkZPX0NPTkZJR19fRU5DT0RFUl9DICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgQVNJQ19UUkFOU01JVFRFUl9JTkZPX0NPTkZJR19fRU5DT0RFUl9EICAgICAgICAgICAgIDB4NDQKKyNkZWZpbmUgQVNJQ19UUkFOU01JVFRFUl9JTkZPX0NPTkZJR19fRU5DT0RFUl9FICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgQVNJQ19UUkFOU01JVFRFUl9JTkZPX0NPTkZJR19fRU5DT0RFUl9GICAgICAgICAgICAgIDB4ODQKKwogdHlwZWRlZiBzdHJ1Y3QgX0FTSUNfRU5DT0RFUl9JTkZPCiB7CiAJVUNIQVIgdWNFbmNvZGVySUQ7CkBAIC01Mjg0LDYgKzU5OTIsMjggQEAKIC8qIC9vYnNlbGV0ZSAqLwogI2RlZmluZSBEUF9FTkNPREVSX1NFUlZJQ0VfUFNfQUxMT0NBVElPTgkJCQlXUklURV9PTkVfQllURV9IV19JMkNfREFUQV9QQVJBTUVURVJTCiAKKwordHlwZWRlZiBzdHJ1Y3QgX0RQX0VOQ09ERVJfU0VSVklDRV9QQVJBTUVURVJTX1YyCit7CisJVVNIT1JUIHVzRXh0RW5jb2Rlck9iaklkOyAgIC8vIEV4dGVybmFsIEVuY29kZXIgT2JqZWN0IElkLCBvdXRwdXQgcGFyYW1ldGVyIG9ubHksIHVzZSB3aGVuIHVjQWN0aW9uID0gRFBfU0VSVklDRV9WMl9BQ1RJT05fREVUX0VYVF9DT05ORUNUSU9OCisgIFVDSEFSICB1Y0F1eElkOworICBVQ0hBUiAgdWNBY3Rpb247CisgIFVDSEFSICB1Y1NpbmtUeXBlOyAgICAgICAgICAvLyBJcHV0IGFuZCBPdXRwdXQgcGFyYW1ldGVycy4gCisgIFVDSEFSICB1Y0hQRElkOyAgICAgICAgICAgICAvLyBJbnB1dCBwYXJhbWV0ZXIsIHVzZWQgd2hlbiB1Y0FjdGlvbiA9IERQX1NFUlZJQ0VfVjJfQUNUSU9OX0RFVF9FWFRfQ09OTkVDVElPTgorCVVDSEFSICB1Y1Jlc2VydmVkWzJdOworfURQX0VOQ09ERVJfU0VSVklDRV9QQVJBTUVURVJTX1YyOworCit0eXBlZGVmIHN0cnVjdCBfRFBfRU5DT0RFUl9TRVJWSUNFX1BTX0FMTE9DQVRJT05fVjIKK3sKKyAgRFBfRU5DT0RFUl9TRVJWSUNFX1BBUkFNRVRFUlNfVjIgYXNEUFNlcnZpY2VQYXJhbTsKKyAgUFJPQ0VTU19BVVhfQ0hBTk5FTF9UUkFOU0FDVElPTl9QQVJBTUVURVJTX1YyIGFzQXV4UGFyYW07Cit9RFBfRU5DT0RFUl9TRVJWSUNFX1BTX0FMTE9DQVRJT05fVjI7CisKKy8vIHVjQWN0aW9uCisjZGVmaW5lIERQX1NFUlZJQ0VfVjJfQUNUSU9OX0dFVF9TSU5LX1RZUEUJCQkJCQkJMHgwMQorI2RlZmluZSBEUF9TRVJWSUNFX1YyX0FDVElPTl9ERVRfTENEX0NPTk5FQ1RJT04JCQkgICAgMHgwMgorCisKIC8vIERQX1RSQUlOSU5HX1RBQkxFCiAjZGVmaW5lIERQQ0RfU0VUX0xJTktSQVRFX0xBTkVOVU1fUEFUVEVSTjFfVEJMX0FERFIJCQkJQVRPTV9EUF9UUkFJTklOR19UQkxfQUREUgkJCiAjZGVmaW5lIERQQ0RfU0VUX1NTX0NOVExfVEJMX0FERFIJCQkJCQkJCQkJCQkJKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyA4ICkKQEAgLTUzMzksNiArNjA2OSw3IEBACiAjZGVmaW5lIFNFTEVDVF9EQ0lPX0lNUENBTCAgICAgICAgICAgIDQKICNkZWZpbmUgU0VMRUNUX0RDSU9fRElHICAgICAgICAgICAgICAgNgogI2RlZmluZSBTRUxFQ1RfQ1JUQ19QSVhFTF9SQVRFICAgICAgICA3CisjZGVmaW5lIFNFTEVDVF9WR0FfQkxLICAgICAgICAgICAgICAgIDgKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQogLy9Qb3J0aW9uIFZJOiBEZWZpbml0aW5vcyBmb3IgdmJpb3MgTUMgc2NyYXRjaCByZWdpc3RlcnMgdGhhdCBkcml2ZXIgdXNlZApAQCAtNTc0NCw3ICs2NDc1LDE3IEBACiAjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfQURUNzQ3MyAgIDkKICNkZWZpbmUgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9FWFRFUk5BTF9HUElPICAgICAxMQogI2RlZmluZSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX0VWRVJHUkVFTiAxMgorI2RlZmluZSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX0VNQzIxMDMgICAxMyAgLyogMHgwRCAqLyAvLyBPbmx5IGZhbiBjb250cm9sIHdpbGwgYmUgaW1wbGVtZW50ZWQsIGRvIE5PVCBzaG93IHRoaXMgaW4gUFBHZW4uCisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfU1VNTyAgICAgIDE0ICAvKiAweDBFICovIC8vIFN1bW8gdHlwZSwgdXNlZCBpbnRlcm5hbGx5CisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfTklTTEFORFMgIDE1CisKKy8vIFRoZXJtYWwgY29udHJvbGxlciAnY29tYm8gdHlwZScgdG8gdXNlIGFuIGV4dGVybmFsIGNvbnRyb2xsZXIgZm9yIEZhbiBjb250cm9sIGFuZCBhbiBpbnRlcm5hbCBjb250cm9sbGVyIGZvciB0aGVybWFsLgorLy8gV2UgcHJvYmFibHkgc2hvdWxkIHJlc2VydmUgdGhlIGJpdCAweDgwIGZvciB0aGlzIHVzZS4KKy8vIFRvIGtlZXAgdGhlIG51bWJlciBvZiB0aGVzZSB0eXBlcyBsb3cgd2Ugc2hvdWxkIGFsc28gdXNlIHRoZSBzYW1lIGNvZGUgZm9yIGFsbCBBU0lDcyAoaS5lLiBkbyBub3QgZGlzdGluZ3Vpc2ggUlY2eHggYW5kIFJWN3h4IEludGVybmFsIGhlcmUpLgorLy8gVGhlIGRyaXZlciBjYW4gcGljayB0aGUgY29ycmVjdCBpbnRlcm5hbCBjb250cm9sbGVyIGJhc2VkIG9uIHRoZSBBU0lDLgorCiAjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfQURUNzQ3M19XSVRIX0lOVEVSTkFMICAgMHg4OSAgICAvLyBBRFQ3NDczIEZhbiBDb250cm9sICsgSW50ZXJuYWwgVGhlcm1hbCBDb250cm9sbGVyCisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfRU1DMjEwM19XSVRIX0lOVEVSTkFMICAgMHg4RCAgICAvLyBFTUMyMTAzIEZhbiBDb250cm9sICsgSW50ZXJuYWwgVGhlcm1hbCBDb250cm9sbGVyCiAKIHR5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX1NUQVRFCiB7CkBAIC01ODQxLDYgKzY1ODIsMjkgQEAKICAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c0V4dGVuZGVuZGVkSGVhZGVyT2Zmc2V0OwogfSBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFMywgKkxQQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTM7CiAKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFNAoreworICAgIEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEUzIGJhc2ljVGFibGUzOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsR29sZGVuUFBJRDsgICAgICAgICAgICAgICAgICAgIC8vIFBQR2VuIHVzZSBvbmx5ICAgICAKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bEdvbGRlblJldmlzaW9uOyAgICAgICAgICAgICAgICAvLyBQUEdlbiB1c2Ugb25seQorICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzVmRkY0RlcGVuZGVuY3lPblNDTEtPZmZzZXQ7CisgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNWZGRjaURlcGVuZGVuY3lPbk1DTEtPZmZzZXQ7CisgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNWZGRjRGVwZW5kZW5jeU9uTUNMS09mZnNldDsKKyAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c01heENsb2NrVm9sdGFnZU9uRENPZmZzZXQ7CisgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNSZXNlcnZlZFsyXTsgIAorfSBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFNCwgKkxQQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTQ7CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFNQoreworICAgIEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEU0IGJhc2ljVGFibGU0OworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsVERQTGltaXQ7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxOZWFyVERQTGltaXQ7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxTUVJhbXBpbmdUaHJlc2hvbGQ7CisgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNDQUNMZWFrYWdlVGFibGVPZmZzZXQ7ICAgICAgICAgLy8gUG9pbnRzIHRvIEFUT01fUFBMSUJfQ0FDX0xlYWthZ2VfVGFibGUKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bENBQ0xlYWthZ2U7ICAgICAgICAgICAgICAgICAgICAvLyBUQkQsIHRoaXMgcGFyYW1ldGVyIGlzIHN0aWxsIHVuZGVyIGRpc2N1c3Npb24uICBDaGFuZ2UgdG8gdWxSZXNlcnZlZCBpZiBub3QgbmVlZGVkLgorICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsUmVzZXJ2ZWQ7Cit9IEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEU1LCAqTFBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFNTsKKwogLy8vLyBBVE9NX1BQTElCX05PTkNMT0NLX0lORk86OnVzQ2xhc3NpZmljYXRpb24KICNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VSV9NQVNLICAgICAgICAgIDB4MDAwNwogI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX1NISUZUICAgICAgICAgMApAQCAtNTg2NCw2ICs2NjI4LDEwIEBACiAjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fSERTVEFURSAgICAgICAgICAgICAgICAweDQwMDAKICNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9TRFNUQVRFICAgICAgICAgICAgICAgIDB4ODAwMAogCisvLy8vIEFUT01fUFBMSUJfTk9OQ0xPQ0tfSU5GTzo6dXNDbGFzc2lmaWNhdGlvbjIKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTjJfTElNSVRFRFBPV0VSU09VUkNFXzIgICAgIDB4MDAwMQorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OMl9VTFYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisKIC8vLy8gQVRPTV9QUExJQl9OT05DTE9DS19JTkZPOjp1bENhcHNBbmRTZXR0aW5ncwogI2RlZmluZSBBVE9NX1BQTElCX1NJTkdMRV9ESVNQTEFZX09OTFkgICAgICAgICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgQVRPTV9QUExJQl9TVVBQT1JUU19WSURFT19QTEFZQkFDSyAgICAgICAgIDB4MDAwMDAwMDIKQEAgLTU4OTYsOSArNjY2NCwyMSBAQAogI2RlZmluZSBBVE9NX1BQTElCX00zQVJCX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNjAwMDAKICNkZWZpbmUgQVRPTV9QUExJQl9NM0FSQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxNwogCisjZGVmaW5lIEFUT01fUFBMSUJfRU5BQkxFX0RSUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorCisvLyByZW1haW5pbmcgMTYgYml0cyBhcmUgcmVzZXJ2ZWQKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX1RIRVJNQUxfU1RBVEUKK3sKKyAgICBVQ0hBUiAgIHVjTWluVGVtcGVyYXR1cmU7CisgICAgVUNIQVIgICB1Y01heFRlbXBlcmF0dXJlOworICAgIFVDSEFSICAgdWNUaGVybWFsQWN0aW9uOworfUFUT01fUFBMSUJfVEhFUk1BTF9TVEFURSwgKkxQQVRPTV9QUExJQl9USEVSTUFMX1NUQVRFOworCiAvLyBDb250YWluZWQgaW4gYW4gYXJyYXkgc3RhcnRpbmcgYXQgdGhlIG9mZnNldAogLy8gaW4gQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTo6dXNOb25DbG9ja0luZm9BcnJheU9mZnNldC4KIC8vIHJlZmVyZW5jZWQgZnJvbSBBVE9NX1BQTElCX1NUQVRFX0lORk86OnVjTm9uQ2xvY2tTdGF0ZUluZGV4CisjZGVmaW5lIEFUT01fUFBMSUJfTk9OQ0xPQ0tJTkZPX1ZFUjEgICAgICAxMgorI2RlZmluZSBBVE9NX1BQTElCX05PTkNMT0NLSU5GT19WRVIyICAgICAgMjQKIHR5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX05PTkNMT0NLX0lORk8KIHsKICAgICAgIFVTSE9SVCB1c0NsYXNzaWZpY2F0aW9uOwpAQCAtNTkwNiwxNSArNjY4NiwxNSBAQAogICAgICAgVUNIQVIgIHVjTWF4VGVtcGVyYXR1cmU7CiAgICAgICBVTE9ORyAgdWxDYXBzQW5kU2V0dGluZ3M7CiAgICAgICBVQ0hBUiAgdWNSZXF1aXJlZFBvd2VyOwotICAgICAgVUNIQVIgIHVjVW51c2VkMVszXTsKKyAgICAgIFVTSE9SVCB1c0NsYXNzaWZpY2F0aW9uMjsKKyAgICAgIFVMT05HICB1bFZDTEs7CisgICAgICBVTE9ORyAgdWxEQ0xLOworICAgICAgVUNIQVIgIHVjVW51c2VkWzVdOwogfSBBVE9NX1BQTElCX05PTkNMT0NLX0lORk87CiAKIC8vIENvbnRhaW5lZCBpbiBhbiBhcnJheSBzdGFydGluZyBhdCB0aGUgb2Zmc2V0CiAvLyBpbiBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFOjp1c0Nsb2NrSW5mb0FycmF5T2Zmc2V0LgogLy8gcmVmZXJlbmNlZCBmcm9tIEFUT01fUFBMSUJfU1RBVEU6OnVjQ2xvY2tTdGF0ZUluZGljZXMKLSNkZWZpbmUgQVRPTV9QUExJQl9OT05DTE9DS0lORk9fVkVSMSAgICAgIDEyCi0jZGVmaW5lIEFUT01fUFBMSUJfTk9OQ0xPQ0tJTkZPX1ZFUjIgICAgICAyNAotCiB0eXBlZGVmIHN0cnVjdCBfQVRPTV9QUExJQl9SNjAwX0NMT0NLX0lORk8KIHsKICAgICAgIFVTSE9SVCB1c0VuZ2luZUNsb2NrTG93OwpAQCAtNTk4NSw2ICs2NzY1LDkzIEBACiAjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfSFRMSU5LRlJFUV9MT1cgICAgICAgIDEgCiAjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfSFRMSU5LRlJFUV9ISUdIICAgICAgIDIgCiAKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX1NVTU9fQ0xPQ0tfSU5GT3sKKyAgICAgIFVTSE9SVCB1c0VuZ2luZUNsb2NrTG93OyAgLy9jbG9ja2ZyZXF1ZW5jeSAmIDB4RkZGRi4gVGhlIHVuaXQgaXMgaW4gMTBraHoKKyAgICAgIFVDSEFSICB1Y0VuZ2luZUNsb2NrSGlnaDsgLy9jbG9ja2ZyZXF1ZW5jeSA+PiAxNi4gCisgICAgICBVQ0hBUiAgdmRkY0luZGV4OyAgICAgICAgIC8vMi1iaXQgdmRkYyBpbmRleDsKKyAgICAgIFVDSEFSICBsZWFrYWdlOyAgICAgICAgICAvL3BsZWFzZSB1c2UgOC1iaXQgYWJzb2x1dGUgdmFsdWUsIG5vdCB0aGUgNi1iaXQgJSB2YWx1ZSAKKyAgICAgIC8vcGxlYXNlIGluaXRhbGl6ZSB0byAwCisgICAgICBVQ0hBUiAgcnN2OworICAgICAgLy9wbGVhc2UgaW5pdGFsaXplIHRvIDAKKyAgICAgIFVTSE9SVCByc3YxOworICAgICAgLy9wbGVhc2UgaW5pdGlhbGl6ZSB0byAwcworICAgICAgVUxPTkcgcnN2MlsyXTsKK31BVE9NX1BQTElCX1NVTU9fQ0xPQ0tfSU5GTzsKKworCisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX1NUQVRFX1YyCit7CisgICAgICAvL251bWJlciBvZiB2YWxpZCBkcG0gbGV2ZWxzIGluIHRoaXMgc3RhdGU7IERyaXZlciB1c2VzIGl0IHRvIGNhbGN1bGF0ZSB0aGUgd2hvbGUgCisgICAgICAvL3NpemUgb2YgdGhlIHN0YXRlOiBzaXplb2YoQVRPTV9QUExJQl9TVEFURV9WMikgKyAodWNOdW1EUE1MZXZlbHMgLSAxKSAqIHNpemVvZihVQ0hBUikKKyAgICAgIFVDSEFSIHVjTnVtRFBNTGV2ZWxzOworICAgICAgCisgICAgICAvL2EgaW5kZXggdG8gdGhlIGFycmF5IG9mIG5vbkNsb2NrSW5mb3MKKyAgICAgIFVDSEFSIG5vbkNsb2NrSW5mb0luZGV4OworICAgICAgLyoqCisgICAgICAqIERyaXZlciB3aWxsIHJlYWQgdGhlIGZpcnN0IHVjTnVtRFBNTGV2ZWxzIGluIHRoaXMgYXJyYXkKKyAgICAgICovCisgICAgICBVQ0hBUiBjbG9ja0luZm9JbmRleFsxXTsKK30gQVRPTV9QUExJQl9TVEFURV9WMjsKKwordHlwZWRlZiBzdHJ1Y3QgU3RhdGVBcnJheXsKKyAgICAvL2hvdyBtYW55IHN0YXRlcyB3ZSBoYXZlIAorICAgIFVDSEFSIHVjTnVtRW50cmllczsKKyAgICAKKyAgICBBVE9NX1BQTElCX1NUQVRFX1YyIHN0YXRlc1sxXTsKK31TdGF0ZUFycmF5OworCisKK3R5cGVkZWYgc3RydWN0IENsb2NrSW5mb0FycmF5eworICAgIC8vaG93IG1hbnkgY2xvY2sgbGV2ZWxzIHdlIGhhdmUKKyAgICBVQ0hBUiB1Y051bUVudHJpZXM7CisgICAgCisgICAgLy9zaXplb2YoQVRPTV9QUExJQl9TVU1PX0NMT0NLX0lORk8pCisgICAgVUNIQVIgdWNFbnRyeVNpemU7CisgICAgCisgICAgLy90aGlzIGlzIGZvciBTdW1vCisgICAgQVRPTV9QUExJQl9TVU1PX0NMT0NLX0lORk8gY2xvY2tJbmZvWzFdOworfUNsb2NrSW5mb0FycmF5OworCit0eXBlZGVmIHN0cnVjdCBOb25DbG9ja0luZm9BcnJheXsKKworICAgIC8vaG93IG1hbnkgbm9uLWNsb2NrIGxldmVscyB3ZSBoYXZlLiBub3JtYWxseSBzaG91bGQgYmUgc2FtZSBhcyBudW1iZXIgb2Ygc3RhdGVzCisgICAgVUNIQVIgdWNOdW1FbnRyaWVzOworICAgIC8vc2l6ZW9mKEFUT01fUFBMSUJfTk9OQ0xPQ0tfSU5GTykKKyAgICBVQ0hBUiB1Y0VudHJ5U2l6ZTsKKyAgICAKKyAgICBBVE9NX1BQTElCX05PTkNMT0NLX0lORk8gbm9uQ2xvY2tJbmZvWzFdOworfU5vbkNsb2NrSW5mb0FycmF5OworCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9QUExJQl9DbG9ja19Wb2x0YWdlX0RlcGVuZGVuY3lfUmVjb3JkCit7CisgICAgVVNIT1JUIHVzQ2xvY2tMb3c7CisgICAgVUNIQVIgIHVjQ2xvY2tIaWdoOworICAgIFVTSE9SVCB1c1ZvbHRhZ2U7Cit9QVRPTV9QUExJQl9DbG9ja19Wb2x0YWdlX0RlcGVuZGVuY3lfUmVjb3JkOworCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9QUExJQl9DbG9ja19Wb2x0YWdlX0RlcGVuZGVuY3lfVGFibGUKK3sKKyAgICBVQ0hBUiB1Y051bUVudHJpZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIGVudHJpZXMuCisgICAgQVRPTV9QUExJQl9DbG9ja19Wb2x0YWdlX0RlcGVuZGVuY3lfUmVjb3JkIGVudHJpZXNbMV07ICAgICAgICAgICAgIC8vIER5bmFtaWNhbGx5IGFsbG9jYXRlIGVudHJpZXMuCit9QVRPTV9QUExJQl9DbG9ja19Wb2x0YWdlX0RlcGVuZGVuY3lfVGFibGU7CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX0Nsb2NrX1ZvbHRhZ2VfTGltaXRfUmVjb3JkCit7CisgICAgVVNIT1JUIHVzU2Nsa0xvdzsKKyAgICBVQ0hBUiAgdWNTY2xrSGlnaDsKKyAgICBVU0hPUlQgdXNNY2xrTG93OworICAgIFVDSEFSICB1Y01jbGtIaWdoOworICAgIFVTSE9SVCB1c1ZkZGM7CisgICAgVVNIT1JUIHVzVmRkY2k7Cit9QVRPTV9QUExJQl9DbG9ja19Wb2x0YWdlX0xpbWl0X1JlY29yZDsKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fUFBMSUJfQ2xvY2tfVm9sdGFnZV9MaW1pdF9UYWJsZQoreworICAgIFVDSEFSIHVjTnVtRW50cmllczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2YgZW50cmllcy4KKyAgICBBVE9NX1BQTElCX0Nsb2NrX1ZvbHRhZ2VfTGltaXRfUmVjb3JkIGVudHJpZXNbMV07ICAgICAgICAgICAgICAgICAgLy8gRHluYW1pY2FsbHkgYWxsb2NhdGUgZW50cmllcy4KK31BVE9NX1BQTElCX0Nsb2NrX1ZvbHRhZ2VfTGltaXRfVGFibGU7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IDlmYmFiYWEuLmIwYWIxODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCkBAIC00MDMsNiArNDAzLDcgQEAKIAlFTkFCTEVfTFZEU19TU19QQVJBTUVURVJTX1YyIGx2ZHNfc3NfMjsKIAlFTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTExfUFNfQUxMT0NBVElPTiB2MTsKIAlFTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTExfVjIgdjI7CisJRU5BQkxFX1NQUkVBRF9TUEVDVFJVTV9PTl9QUExMX1YzIHYzOwogfTsKIAogc3RhdGljIHZvaWQgYXRvbWJpb3NfY3J0Y19wcm9ncmFtX3NzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKQEAgLTQxNyw3ICs0MTgsMzAgQEAKIAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAotCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKKwlpZiAoQVNJQ19JU19EQ0U1KHJkZXYpKSB7CisJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bUFtb3VudEZyYWMgPSAwOworCQlhcmdzLnYzLnVjU3ByZWFkU3BlY3RydW1UeXBlID0gc3MtPnR5cGU7CisJCXN3aXRjaCAocGxsX2lkKSB7CisJCWNhc2UgQVRPTV9QUExMMToKKwkJCWFyZ3MudjMudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjNfUDFQTEw7CisJCQlhcmdzLnYzLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSBzcy0+YW1vdW50OworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IHNzLT5zdGVwOworCQkJYnJlYWs7CisJCWNhc2UgQVRPTV9QUExMMjoKKwkJCWFyZ3MudjMudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjNfUDJQTEw7CisJCQlhcmdzLnYzLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSBzcy0+YW1vdW50OworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IHNzLT5zdGVwOworCQkJYnJlYWs7CisJCWNhc2UgQVRPTV9EQ1BMTDoKKwkJCWFyZ3MudjMudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjNfRENQTEw7CisJCQlhcmdzLnYzLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSAwOworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBBVE9NX1BQTExfSU5WQUxJRDoKKwkJCXJldHVybjsKKwkJfQorCQlhcmdzLnYyLnVjRW5hYmxlID0gZW5hYmxlOworCX0gZWxzZSBpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CiAJCWFyZ3MudjIudXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2UgPSBjcHVfdG9fbGUxNihzcy0+cGVyY2VudGFnZSk7CiAJCWFyZ3MudjIudWNTcHJlYWRTcGVjdHJ1bVR5cGUgPSBzcy0+dHlwZTsKIAkJc3dpdGNoIChwbGxfaWQpIHsKQEAgLTY3Myw5ICs2OTcsMTQgQEAKIAlQSVhFTF9DTE9DS19QQVJBTUVURVJTX1YyIHYyOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjMgdjM7CiAJUElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19WNSB2NTsKKwlQSVhFTF9DTE9DS19QQVJBTUVURVJTX1Y2IHY2OwogfTsKIAotc3RhdGljIHZvaWQgYXRvbWJpb3NfY3J0Y19zZXRfZGNwbGwoc3RydWN0IGRybV9jcnRjICpjcnRjKQorLyogb24gRENFNSwgbWFrZSBzdXJlIHRoZSB2b2x0YWdlIGlzIGhpZ2ggZW5vdWdoIHRvIHN1cHBvcnQgdGhlCisgKiByZXF1aXJlZCBkaXNwIGNsay4KKyAqLworc3RhdGljIHZvaWQgYXRvbWJpb3NfY3J0Y19zZXRfZGNwbGwoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICB1MzIgZGlzcGNsaykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTY5OCw5ICs3MjcsMTYgQEAKIAkJCSAqIFNldFBpeGVsQ2xvY2sgcHJvdmlkZXMgdGhlIGRpdmlkZXJzCiAJCQkgKi8KIAkJCWFyZ3MudjUudWNDUlRDID0gQVRPTV9DUlRDX0lOVkFMSUQ7Ci0JCQlhcmdzLnY1LnVzUGl4ZWxDbG9jayA9IHJkZXYtPmNsb2NrLmRlZmF1bHRfZGlzcGNsazsKKwkJCWFyZ3MudjUudXNQaXhlbENsb2NrID0gZGlzcGNsazsKIAkJCWFyZ3MudjUudWNQcGxsID0gQVRPTV9EQ1BMTDsKIAkJCWJyZWFrOworCQljYXNlIDY6CisJCQkvKiBpZiB0aGUgZGVmYXVsdCBkY3BsbCBjbG9jayBpcyBzcGVjaWZpZWQsCisJCQkgKiBTZXRQaXhlbENsb2NrIHByb3ZpZGVzIHRoZSBkaXZpZGVycworCQkJICovCisJCQlhcmdzLnY2LnVsRGlzcEVuZ0Nsa0ZyZXEgPSBkaXNwY2xrOworCQkJYXJncy52Ni51Y1BwbGwgPSBBVE9NX0RDUExMOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoIlVua25vd24gdGFibGUgdmVyc2lvbiAlZCAlZFxuIiwgZnJldiwgY3Jldik7CiAJCQlyZXR1cm47CkBAIC03ODQsNiArODIwLDE4IEBACiAJCQlhcmdzLnY1LnVjRW5jb2Rlck1vZGUgPSBlbmNvZGVyX21vZGU7CiAJCQlhcmdzLnY1LnVjUHBsbCA9IHBsbF9pZDsKIAkJCWJyZWFrOworCQljYXNlIDY6CisJCQlhcmdzLnY2LnVsQ3J0Y1BjbGtGcmVxLnVjQ1JUQyA9IGNydGNfaWQ7CisJCQlhcmdzLnY2LnVsQ3J0Y1BjbGtGcmVxLnVsUGl4ZWxDbG9jayA9IGNwdV90b19sZTMyKGNsb2NrIC8gMTApOworCQkJYXJncy52Ni51Y1JlZkRpdiA9IHJlZl9kaXY7CisJCQlhcmdzLnY2LnVzRmJEaXYgPSBjcHVfdG9fbGUxNihmYl9kaXYpOworCQkJYXJncy52Ni51bEZiRGl2RGVjRnJhYyA9IGNwdV90b19sZTMyKGZyYWNfZmJfZGl2ICogMTAwMDAwKTsKKwkJCWFyZ3MudjYudWNQb3N0RGl2ID0gcG9zdF9kaXY7CisJCQlhcmdzLnY2LnVjTWlzY0luZm8gPSAwOyAvKiBIRE1JIGRlcHRoLCBldGMuICovCisJCQlhcmdzLnY2LnVjVHJhbnNtaXR0ZXJJRCA9IGVuY29kZXJfaWQ7CisJCQlhcmdzLnY2LnVjRW5jb2Rlck1vZGUgPSBlbmNvZGVyX21vZGU7CisJCQlhcmdzLnY2LnVjUHBsbCA9IHBsbF9pZDsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJVbmtub3duIHRhYmxlIHZlcnNpb24gJWQgJWRcbiIsIGZyZXYsIGNyZXYpOwogCQkJcmV0dXJuOwpAQCAtMTM3Nyw3ICsxNDI1LDggQEAKIAkJCQkJCQkJICAgcmRldi0+Y2xvY2suZGVmYXVsdF9kaXNwY2xrKTsKIAkJaWYgKHNzX2VuYWJsZWQpCiAJCQlhdG9tYmlvc19jcnRjX3Byb2dyYW1fc3MoY3J0YywgQVRPTV9ESVNBQkxFLCBBVE9NX0RDUExMLCAmc3MpOwotCQlhdG9tYmlvc19jcnRjX3NldF9kY3BsbChjcnRjKTsKKwkJLyogWFhYOiBEQ0U1LCBtYWtlIHN1cmUgdm9sdGFnZSwgZGlzcGNsayBpcyBoaWdoIGVub3VnaCAqLworCQlhdG9tYmlvc19jcnRjX3NldF9kY3BsbChjcnRjLCByZGV2LT5jbG9jay5kZWZhdWx0X2Rpc3BjbGspOwogCQlpZiAoc3NfZW5hYmxlZCkKIAkJCWF0b21iaW9zX2NydGNfcHJvZ3JhbV9zcyhjcnRjLCBBVE9NX0VOQUJMRSwgQVRPTV9EQ1BMTCwgJnNzKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwppbmRleCA3YjMzN2MzLi43ZmU4ZWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKQEAgLTM5LDYgKzM5LDYyIEBACiAKIHN0YXRpYyB2b2lkIGV2ZXJncmVlbl9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIGV2ZXJncmVlbl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3N0YXRpYyB2b2lkIGV2ZXJncmVlbl9wY2llX2dlbjJfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwordm9pZCBldmVyZ3JlZW5fcHJlX3BhZ2VfZmxpcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpCit7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHJkZXYtPm1vZGVfaW5mby5jcnRjc1tjcnRjXTsKKwl1MzIgdG1wOworCisJLyogbWFrZSBzdXJlIGZsaXAgaXMgYXQgdmIgcmF0aGVyIHRoYW4gaGIgKi8KKwl0bXAgPSBSUkVHMzIoRVZFUkdSRUVOX0dSUEhfRkxJUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0KTsKKwl0bXAgJj0gfkVWRVJHUkVFTl9HUlBIX1NVUkZBQ0VfVVBEQVRFX0hfUkVUUkFDRV9FTjsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfRkxJUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCB0bXApOworCisJLyogc2V0IHBhZ2VmbGlwIHRvIGhhcHBlbiBhbnl3aGVyZSBpbiB2YmxhbmsgaW50ZXJ2YWwgKi8KKwlXUkVHMzIoRVZFUkdSRUVOX01BU1RFUl9VUERBVEVfTU9ERSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisKKwkvKiBlbmFibGUgdGhlIHBmbGlwIGludCAqLworCXJhZGVvbl9pcnFfa21zX3BmbGlwX2lycV9nZXQocmRldiwgY3J0Yyk7Cit9CisKK3ZvaWQgZXZlcmdyZWVuX3Bvc3RfcGFnZV9mbGlwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0YykKK3sKKwkvKiBkaXNhYmxlIHRoZSBwZmxpcCBpbnQgKi8KKwlyYWRlb25faXJxX2ttc19wZmxpcF9pcnFfcHV0KHJkZXYsIGNydGMpOworfQorCit1MzIgZXZlcmdyZWVuX3BhZ2VfZmxpcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGNfaWQsIHU2NCBjcnRjX2Jhc2UpCit7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHJkZXYtPm1vZGVfaW5mby5jcnRjc1tjcnRjX2lkXTsKKwl1MzIgdG1wID0gUlJFRzMyKEVWRVJHUkVFTl9HUlBIX1VQREFURSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCk7CisKKwkvKiBMb2NrIHRoZSBncmFwaGljcyB1cGRhdGUgbG9jayAqLworCXRtcCB8PSBFVkVSR1JFRU5fR1JQSF9VUERBVEVfTE9DSzsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfVVBEQVRFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCB0bXApOworCisJLyogdXBkYXRlIHRoZSBzY2Fub3V0IGFkZHJlc3NlcyAqLworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJICAgICAgIHVwcGVyXzMyX2JpdHMoY3J0Y19iYXNlKSk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJICAgICAgICh1MzIpY3J0Y19iYXNlKTsKKworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCSAgICAgICB1cHBlcl8zMl9iaXRzKGNydGNfYmFzZSkpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKKwkgICAgICAgKHUzMiljcnRjX2Jhc2UpOworCisJLyogV2FpdCBmb3IgdXBkYXRlX3BlbmRpbmcgdG8gZ28gaGlnaC4gKi8KKwl3aGlsZSAoIShSUkVHMzIoRVZFUkdSRUVOX0dSUEhfVVBEQVRFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0KSAmIEVWRVJHUkVFTl9HUlBIX1NVUkZBQ0VfVVBEQVRFX1BFTkRJTkcpKTsKKwlEUk1fREVCVUcoIlVwZGF0ZSBwZW5kaW5nIG5vdyBoaWdoLiBVbmxvY2tpbmcgdnVwZGF0ZV9sb2NrLlxuIik7CisKKwkvKiBVbmxvY2sgdGhlIGxvY2ssIHNvIGRvdWJsZS1idWZmZXJpbmcgY2FuIHRha2UgcGxhY2UgaW5zaWRlIHZibGFuayAqLworCXRtcCAmPSB+RVZFUkdSRUVOX0dSUEhfVVBEQVRFX0xPQ0s7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1VQREFURSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgdG1wKTsKKworCS8qIFJldHVybiBjdXJyZW50IHVwZGF0ZV9wZW5kaW5nIHN0YXR1czogKi8KKwlyZXR1cm4gUlJFRzMyKEVWRVJHUkVFTl9HUlBIX1VQREFURSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCkgJiBFVkVSR1JFRU5fR1JQSF9TVVJGQUNFX1VQREFURV9QRU5ESU5HOworfQogCiAvKiBnZXQgdGVtcGVyYXR1cmUgaW4gbWlsbGlkZWdyZWVzICovCiB1MzIgZXZlcmdyZWVuX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtNTcsNiArMTEzLDE0IEBACiAJcmV0dXJuIGFjdHVhbF90ZW1wICogMTAwMDsKIH0KIAordTMyIHN1bW9fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIHRlbXAgPSBSUkVHMzIoQ0dfVEhFUk1BTF9TVEFUVVMpICYgMHhmZjsKKwl1MzIgYWN0dWFsX3RlbXAgPSAodGVtcCA+PiAxKSAmIDB4ZmY7CisKKwlyZXR1cm4gYWN0dWFsX3RlbXAgKiAxMDAwOworfQorCiB2b2lkIGV2ZXJncmVlbl9wbV9taXNjKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCByZXFfcHNfaWR4ID0gcmRldi0+cG0ucmVxdWVzdGVkX3Bvd2VyX3N0YXRlX2luZGV4OwpAQCAtMzM3LDE2ICs0MDEsMjggQEAKIAljYXNlIDA6CiAJY2FzZSA0OgogCWRlZmF1bHQ6Ci0JCXJldHVybiAzODQwICogMjsKKwkJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkKKwkJCXJldHVybiA0MDk2ICogMjsKKwkJZWxzZQorCQkJcmV0dXJuIDM4NDAgKiAyOwogCWNhc2UgMToKIAljYXNlIDU6Ci0JCXJldHVybiA1NzYwICogMjsKKwkJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkKKwkJCXJldHVybiA2MTQ0ICogMjsKKwkJZWxzZQorCQkJcmV0dXJuIDU3NjAgKiAyOwogCWNhc2UgMjoKIAljYXNlIDY6Ci0JCXJldHVybiA3NjgwICogMjsKKwkJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkKKwkJCXJldHVybiA4MTkyICogMjsKKwkJZWxzZQorCQkJcmV0dXJuIDc2ODAgKiAyOwogCWNhc2UgMzoKIAljYXNlIDc6Ci0JCXJldHVybiAxOTIwICogMjsKKwkJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkKKwkJCXJldHVybiAyMDQ4ICogMjsKKwkJZWxzZQorCQkJcmV0dXJuIDE5MjAgKiAyOwogCX0KIH0KIApAQCAtODkwLDMxICs5NjYsMzkgQEAKIAlzYXZlLT52Z2FfaGRwX2NvbnRyb2wgPSBSUkVHMzIoVkdBX0hEUF9DT05UUk9MKTsKIAlzYXZlLT5jcnRjX2NvbnRyb2xbMF0gPSBSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQpOwogCXNhdmUtPmNydGNfY29udHJvbFsxXSA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCk7Ci0Jc2F2ZS0+Y3J0Y19jb250cm9sWzJdID0gUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VUKTsKLQlzYXZlLT5jcnRjX2NvbnRyb2xbM10gPSBSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQpOwotCXNhdmUtPmNydGNfY29udHJvbFs0XSA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCk7Ci0Jc2F2ZS0+Y3J0Y19jb250cm9sWzVdID0gUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VUKTsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApKSB7CisJCXNhdmUtPmNydGNfY29udHJvbFsyXSA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCk7CisJCXNhdmUtPmNydGNfY29udHJvbFszXSA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCk7CisJCXNhdmUtPmNydGNfY29udHJvbFs0XSA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCk7CisJCXNhdmUtPmNydGNfY29udHJvbFs1XSA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCk7CisJfQogCiAJLyogU3RvcCBhbGwgdmlkZW8gKi8KIAlXUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MLCAwKTsKIAlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VULCAxKTsKIAlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULCAxKTsKLQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULCAxKTsKLQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULCAxKTsKLQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCAxKTsKLQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULCAxKTsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApKSB7CisJCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIDEpOworCQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULCAxKTsKKwkJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgMSk7CisJCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsIDEpOworCX0KIAlXUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsIDApOwogCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwgMCk7Ci0JV1JFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULCAwKTsKLQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsIDApOwotCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgMCk7Ci0JV1JFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApKSB7CisJCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgMCk7CisJCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgMCk7CisJfQogCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsIDApOwogCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQsIDApOwotCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIDApOwotCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsIDApOwotCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsIDApOwotCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsIDApOworCWlmICghKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkpIHsKKwkJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsIDApOworCQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwkJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgMCk7CisJfQogCiAJV1JFRzMyKEQxVkdBX0NPTlRST0wsIDApOwogCVdSRUczMihEMlZHQV9DT05UUk9MLCAwKTsKQEAgLTk0NCw0MSArMTAyOCw0MyBAQAogCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwKIAkgICAgICAgKHUzMilyZGV2LT5tYy52cmFtX3N0YXJ0KTsKIAotCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwKLQkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7Ci0JV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsCi0JICAgICAgIHVwcGVyXzMyX2JpdHMocmRldi0+bWMudnJhbV9zdGFydCkpOwotCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsCi0JICAgICAgICh1MzIpcmRldi0+bWMudnJhbV9zdGFydCk7Ci0JV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULAotCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOworCWlmICghKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkpIHsKKwkJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULAorCQkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7CisJCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULAorCQkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7CisJCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsCisJCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOworCQlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsCisJCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOwogCi0JV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULAotCSAgICAgICB1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLnZyYW1fc3RhcnQpKTsKLQlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwKLQkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7Ci0JV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwKLQkgICAgICAgKHUzMilyZGV2LT5tYy52cmFtX3N0YXJ0KTsKLQlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsCi0JICAgICAgICh1MzIpcmRldi0+bWMudnJhbV9zdGFydCk7CisJCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwKKwkJICAgICAgIHVwcGVyXzMyX2JpdHMocmRldi0+bWMudnJhbV9zdGFydCkpOworCQlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwKKwkJICAgICAgIHVwcGVyXzMyX2JpdHMocmRldi0+bWMudnJhbV9zdGFydCkpOworCQlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULAorCQkgICAgICAgKHUzMilyZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwkJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULAorCQkgICAgICAgKHUzMilyZGV2LT5tYy52cmFtX3N0YXJ0KTsKIAotCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwKLQkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7Ci0JV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsCi0JICAgICAgIHVwcGVyXzMyX2JpdHMocmRldi0+bWMudnJhbV9zdGFydCkpOwotCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsCi0JICAgICAgICh1MzIpcmRldi0+bWMudnJhbV9zdGFydCk7Ci0JV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULAotCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOworCQlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsCisJCSAgICAgICB1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLnZyYW1fc3RhcnQpKTsKKwkJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsCisJCSAgICAgICB1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLnZyYW1fc3RhcnQpKTsKKwkJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwKKwkJICAgICAgICh1MzIpcmRldi0+bWMudnJhbV9zdGFydCk7CisJCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwKKwkJICAgICAgICh1MzIpcmRldi0+bWMudnJhbV9zdGFydCk7CiAKLQlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsCi0JICAgICAgIHVwcGVyXzMyX2JpdHMocmRldi0+bWMudnJhbV9zdGFydCkpOwotCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULAotCSAgICAgICB1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLnZyYW1fc3RhcnQpKTsKLQlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULAotCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOwotCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwKLQkgICAgICAgKHUzMilyZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwkJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULAorCQkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7CisJCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULAorCQkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7CisJCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsCisJCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOworCQlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsCisJCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOworCX0KIAogCVdSRUczMihFVkVSR1JFRU5fVkdBX01FTU9SWV9CQVNFX0FERFJFU1NfSElHSCwgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7CiAJV1JFRzMyKEVWRVJHUkVFTl9WR0FfTUVNT1JZX0JBU0VfQUREUkVTUywgKHUzMilyZGV2LT5tYy52cmFtX3N0YXJ0KTsKQEAgLTk5NCwyMiArMTA4MCwyOCBAQAogCVdSRUczMihFVkVSR1JFRU5fRDZWR0FfQ09OVFJPTCwgc2F2ZS0+dmdhX2NvbnRyb2xbNV0pOwogCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsIDEpOwogCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQsIDEpOwotCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIDEpOwotCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsIDEpOwotCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsIDEpOwotCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsIDEpOworCWlmICghKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkpIHsKKwkJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgMSk7CisJCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsIDEpOworCQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCAxKTsKKwkJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgMSk7CisJfQogCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCwgc2F2ZS0+Y3J0Y19jb250cm9sWzBdKTsKIAlXUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQsIHNhdmUtPmNydGNfY29udHJvbFsxXSk7Ci0JV1JFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULCBzYXZlLT5jcnRjX2NvbnRyb2xbMl0pOwotCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgc2F2ZS0+Y3J0Y19jb250cm9sWzNdKTsKLQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsIHNhdmUtPmNydGNfY29udHJvbFs0XSk7Ci0JV1JFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULCBzYXZlLT5jcnRjX2NvbnRyb2xbNV0pOworCWlmICghKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkpIHsKKwkJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULCBzYXZlLT5jcnRjX2NvbnRyb2xbMl0pOworCQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsIHNhdmUtPmNydGNfY29udHJvbFszXSk7CisJCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgc2F2ZS0+Y3J0Y19jb250cm9sWzRdKTsKKwkJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULCBzYXZlLT5jcnRjX2NvbnRyb2xbNV0pOworCX0KIAlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VULCAwKTsKIAlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULCAwKTsKLQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULCAwKTsKLQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULCAwKTsKLQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCAwKTsKLQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApKSB7CisJCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIDApOworCQlXUkVHMzIoRVZFUkdSRUVOX0NSVENfVVBEQVRFX0xPQ0sgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwkJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgMCk7CisJCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsIDApOworCX0KIAlXUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MLCBzYXZlLT52Z2FfcmVuZGVyX2NvbnRyb2wpOwogfQogCkBAIC0xMDU3LDExICsxMTQ5LDE3IEBACiAJCQlyZGV2LT5tYy52cmFtX2VuZCA+PiAxMik7CiAJfQogCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfREVGQVVMVF9BRERSLCAwKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJCXRtcCA9IFJSRUczMihNQ19GVVNfVk1fRkJfT0ZGU0VUKSAmIDB4MDAwRkZGRkY7CisJCXRtcCB8PSAoKHJkZXYtPm1jLnZyYW1fZW5kID4+IDIwKSAmIDB4RikgPDwgMjQ7CisJCXRtcCB8PSAoKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMjApICYgMHhGKSA8PCAyMDsKKwkJV1JFRzMyKE1DX0ZVU19WTV9GQl9PRkZTRVQsIHRtcCk7CisJfQogCXRtcCA9ICgocmRldi0+bWMudnJhbV9lbmQgPj4gMjQpICYgMHhGRkZGKSA8PCAxNjsKIAl0bXAgfD0gKChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDI0KSAmIDB4RkZGRik7CiAJV1JFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OLCB0bXApOwogCVdSRUczMihIRFBfTk9OU1VSRkFDRV9CQVNFLCAocmRldi0+bWMudnJhbV9zdGFydCA+PiA4KSk7Ci0JV1JFRzMyKEhEUF9OT05TVVJGQUNFX0lORk8sICgyIDw8IDcpKTsKKwlXUkVHMzIoSERQX05PTlNVUkZBQ0VfSU5GTywgKDIgPDwgNykgfCAoMSA8PCAzMCkpOwogCVdSRUczMihIRFBfTk9OU1VSRkFDRV9TSVpFLCAweDNGRkZGRkZGKTsKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CiAJCVdSRUczMihNQ19WTV9BR1BfVE9QLCByZGV2LT5tYy5ndHRfZW5kID4+IDE2KTsKQEAgLTEyODUsMTEgKzEzODMsMTUgQEAKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9DRURBUjoKIAljYXNlIENISVBfUkVEV09PRDoKKwljYXNlIENISVBfUEFMTToKKwljYXNlIENISVBfVFVSS1M6CisJY2FzZSBDSElQX0NBSUNPUzoKIAkJZm9yY2Vfbm9fc3dpenpsZSA9IGZhbHNlOwogCQlicmVhazsKIAljYXNlIENISVBfQ1lQUkVTUzoKIAljYXNlIENISVBfSEVNTE9DSzoKIAljYXNlIENISVBfSlVOSVBFUjoKKwljYXNlIENISVBfQkFSVFM6CiAJZGVmYXVsdDoKIAkJZm9yY2Vfbm9fc3dpenpsZSA9IHRydWU7CiAJCWJyZWFrOwpAQCAtMTM4NCw2ICsxNDg2LDQ2IEBACiAJcmV0dXJuIGJhY2tlbmRfbWFwOwogfQogCitzdGF0aWMgdm9pZCBldmVyZ3JlZW5fcHJvZ3JhbV9jaGFubmVsX3JlbWFwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0Y3BfY2hhbl9zdGVlcl9sbywgdGNwX2NoYW5fc3RlZXJfaGksIG1jX3NoYXJlZF9jaHJlbWFwLCB0bXA7CisKKwl0bXAgPSBSUkVHMzIoTUNfU0hBUkVEX0NITUFQKTsKKwlzd2l0Y2ggKCh0bXAgJiBOT09GQ0hBTl9NQVNLKSA+PiBOT09GQ0hBTl9TSElGVCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgMzoKKwlkZWZhdWx0OgorCQkvKiBkZWZhdWx0IG1hcHBpbmcgKi8KKwkJbWNfc2hhcmVkX2NocmVtYXAgPSAweDAwZmFjNjg4OworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCWNhc2UgQ0hJUF9IRU1MT0NLOgorCWNhc2UgQ0hJUF9DWVBSRVNTOgorCWNhc2UgQ0hJUF9CQVJUUzoKKwkJdGNwX2NoYW5fc3RlZXJfbG8gPSAweDU0NzYzMjEwOworCQl0Y3BfY2hhbl9zdGVlcl9oaSA9IDB4MDAwMGJhOTg7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9KVU5JUEVSOgorCWNhc2UgQ0hJUF9SRURXT09EOgorCWNhc2UgQ0hJUF9DRURBUjoKKwljYXNlIENISVBfUEFMTToKKwljYXNlIENISVBfVFVSS1M6CisJY2FzZSBDSElQX0NBSUNPUzoKKwlkZWZhdWx0OgorCQl0Y3BfY2hhbl9zdGVlcl9sbyA9IDB4NzY1NDMyMTA7CisJCXRjcF9jaGFuX3N0ZWVyX2hpID0gMHgwMDAwYmE5ODsKKwkJYnJlYWs7CisJfQorCisJV1JFRzMyKFRDUF9DSEFOX1NURUVSX0xPLCB0Y3BfY2hhbl9zdGVlcl9sbyk7CisJV1JFRzMyKFRDUF9DSEFOX1NURUVSX0hJLCB0Y3BfY2hhbl9zdGVlcl9oaSk7CisJV1JFRzMyKE1DX1NIQVJFRF9DSFJFTUFQLCBtY19zaGFyZWRfY2hyZW1hcCk7Cit9CisKIHN0YXRpYyB2b2lkIGV2ZXJncmVlbl9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1MzIgY2NfcmJfYmFja2VuZF9kaXNhYmxlID0gMDsKQEAgLTE0OTUsNiArMTYzNyw5MCBAQAogCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2hpel90aWxlX2ZpZm9fc2l6ZSA9IDB4MzA7CiAJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfZWFybHl6X3RpbGVfZmlmb19zaXplID0gMHgxMzA7CiAJCWJyZWFrOworCWNhc2UgQ0hJUF9QQUxNOgorCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm51bV9zZXMgPSAxOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9waXBlcyA9IDI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3RpbGVfcGlwZXMgPSAyOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9zaW1kcyA9IDI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2JhY2tlbmRzID0gMSAqIHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubnVtX3NlczsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfZ3BycyA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfdGhyZWFkcyA9IDE5MjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfZ3NfdGhyZWFkcyA9IDE2OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9zdGFja19lbnRyaWVzID0gMjU2OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X251bV9vZl9zZXRzID0gNDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3NpemUgPSAxMjg7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDMyOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc214X3NpemUgPSA5NjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfaHdfY29udGV4dHMgPSA0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNxX251bV9jZl9pbnN0cyA9IDE7CisKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19wcmltX2ZpZm9fc2l6ZSA9IDB4NDA7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfaGl6X3RpbGVfZmlmb19zaXplID0gMHgzMDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19lYXJseXpfdGlsZV9maWZvX3NpemUgPSAweDEzMDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX0JBUlRTOgorCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm51bV9zZXMgPSAyOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9waXBlcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3RpbGVfcGlwZXMgPSA4OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9zaW1kcyA9IDc7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2JhY2tlbmRzID0gNCAqIHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubnVtX3NlczsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfZ3BycyA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfdGhyZWFkcyA9IDI0ODsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfZ3NfdGhyZWFkcyA9IDMyOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9zdGFja19lbnRyaWVzID0gNTEyOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X251bV9vZl9zZXRzID0gNDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3NpemUgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDY0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc214X3NpemUgPSAxOTI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2h3X2NvbnRleHRzID0gODsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zcV9udW1fY2ZfaW5zdHMgPSAyOworCisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfcHJpbV9maWZvX3NpemUgPSAweDEwMDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2Vhcmx5el90aWxlX2ZpZm9fc2l6ZSA9IDB4MTMwOworCQlicmVhazsKKwljYXNlIENISVBfVFVSS1M6CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubnVtX3NlcyA9IDE7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3BpcGVzID0gNDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfdGlsZV9waXBlcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3NpbWRzID0gNjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfYmFja2VuZHMgPSAyICogcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5udW1fc2VzOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9ncHJzID0gMjU2OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aHJlYWRzID0gMjQ4OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9nc190aHJlYWRzID0gMzI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbnVtX29mX3NldHMgPSA0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc2l6ZSA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gNjQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDE5MjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfaHdfY29udGV4dHMgPSA4OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNxX251bV9jZl9pbnN0cyA9IDI7CisKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19wcmltX2ZpZm9fc2l6ZSA9IDB4MTAwOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2hpel90aWxlX2ZpZm9fc2l6ZSA9IDB4MzA7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfZWFybHl6X3RpbGVfZmlmb19zaXplID0gMHgxMzA7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9DQUlDT1M6CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubnVtX3NlcyA9IDE7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3BpcGVzID0gNDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfdGlsZV9waXBlcyA9IDI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3NpbWRzID0gMjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfYmFja2VuZHMgPSAxICogcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5udW1fc2VzOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9ncHJzID0gMjU2OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aHJlYWRzID0gMTkyOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9nc190aHJlYWRzID0gMTY7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbnVtX29mX3NldHMgPSA0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc2l6ZSA9IDEyODsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gMzI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDk2OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9od19jb250ZXh0cyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3FfbnVtX2NmX2luc3RzID0gMTsKKworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX3ByaW1fZmlmb19zaXplID0gMHg0MDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2Vhcmx5el90aWxlX2ZpZm9fc2l6ZSA9IDB4MTMwOworCQlicmVhazsKIAl9CiAKIAkvKiBJbml0aWFsaXplIEhEUCAqLwpAQCAtMTYzNiw2ICsxODYyLDcgQEAKIAkJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKIAkJY2FzZSBDSElQX0NZUFJFU1M6CiAJCWNhc2UgQ0hJUF9IRU1MT0NLOgorCQljYXNlIENISVBfQkFSVFM6CiAJCQlnYl9iYWNrZW5kX21hcCA9IDB4NjY0NDIyMDA7CiAJCQlicmVhazsKIAkJY2FzZSBDSElQX0pVTklQRVI6CkBAIC0xNjg3LDYgKzE5MTQsOCBAQAogCVdSRUczMihETUlGX0FERFJfQ09ORklHLCBnYl9hZGRyX2NvbmZpZyk7CiAJV1JFRzMyKEhEUF9BRERSX0NPTkZJRywgZ2JfYWRkcl9jb25maWcpOwogCisJZXZlcmdyZWVuX3Byb2dyYW1fY2hhbm5lbF9yZW1hcChyZGV2KTsKKwogCW51bV9zaGFkZXJfZW5naW5lcyA9ICgoUlJFRzMyKEdCX0FERFJfQ09ORklHKSAmIE5VTV9TSEFERVJfRU5HSU5FUygzKSkgPj4gMTIpICsgMTsKIAlncmJtX2dmeF9pbmRleCA9IElOU1RBTkNFX0JST0FEQ0FTVF9XUklURVM7CiAKQEAgLTE3NjksOSArMTk5OCwxNiBAQAogCQkgICAgICBHU19QUklPKDIpIHwKIAkJICAgICAgRVNfUFJJTygzKSk7CiAKLQlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfQ0VEQVIpCisJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwljYXNlIENISVBfQ0VEQVI6CisJY2FzZSBDSElQX1BBTE06CisJY2FzZSBDSElQX0NBSUNPUzoKIAkJLyogbm8gdmVydGV4IGNhY2hlICovCiAJCXNxX2NvbmZpZyAmPSB+VkNfRU5BQkxFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAKIAlzcV9sZHNfcmVzb3VyY2VfbWdtdCA9IFJSRUczMihTUV9MRFNfUkVTT1VSQ0VfTUdNVCk7CiAKQEAgLTE3ODMsMTAgKzIwMTksMTUgQEAKIAlzcV9ncHJfcmVzb3VyY2VfbWdtdF8zID0gTlVNX0hTX0dQUlMoKHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2dwcnMgLSAoNCAqIDIpKSAqIDMgLyAzMik7CiAJc3FfZ3ByX3Jlc291cmNlX21nbXRfMyB8PSBOVU1fTFNfR1BSUygocmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfZ3BycyAtICg0ICogMikpICogMyAvIDMyKTsKIAotCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DRURBUikKKwlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCWNhc2UgQ0hJUF9DRURBUjoKKwljYXNlIENISVBfUEFMTToKIAkJcHNfdGhyZWFkX2NvdW50ID0gOTY7Ci0JZWxzZQorCQlicmVhazsKKwlkZWZhdWx0OgogCQlwc190aHJlYWRfY291bnQgPSAxMjg7CisJCWJyZWFrOworCX0KIAogCXNxX3RocmVhZF9yZXNvdXJjZV9tZ210ID0gTlVNX1BTX1RIUkVBRFMocHNfdGhyZWFkX2NvdW50KTsKIAlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCB8PSBOVU1fVlNfVEhSRUFEUygoKChyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aHJlYWRzIC0gcHNfdGhyZWFkX2NvdW50KSAvIDYpIC8gOCkgKiA4KTsKQEAgLTE4MTcsMTAgKzIwNTgsMTYgQEAKIAlXUkVHMzIoUEFfU0NfRk9SQ0VfRU9WX01BWF9DTlRTLCAoRk9SQ0VfRU9WX01BWF9DTEtfQ05UKDQwOTUpIHwKIAkJCQkJICBGT1JDRV9FT1ZfTUFYX1JFWl9DTlQoMjU1KSkpOwogCi0JaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX0NFREFSKQorCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CisJY2FzZSBDSElQX0NFREFSOgorCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9DQUlDT1M6CiAJCXZndF9jYWNoZV9pbnZhbGlkYXRpb24gPSBDQUNIRV9JTlZBTElEQVRJT04oVENfT05MWSk7Ci0JZWxzZQorCQlicmVhazsKKwlkZWZhdWx0OgogCQl2Z3RfY2FjaGVfaW52YWxpZGF0aW9uID0gQ0FDSEVfSU5WQUxJREFUSU9OKFZDX0FORF9UQyk7CisJCWJyZWFrOworCX0KIAl2Z3RfY2FjaGVfaW52YWxpZGF0aW9uIHw9IEFVVE9fSU5WTERfRU4oRVNfQU5EX0dTX0FVVE8pOwogCVdSRUczMihWR1RfQ0FDSEVfSU5WQUxJREFUSU9OLCB2Z3RfY2FjaGVfaW52YWxpZGF0aW9uKTsKIApAQCAtMTkwNCwxMiArMjE1MSwxOCBAQAogCXJkZXYtPm1jLmFwZXJfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChyZGV2LT5wZGV2LCAwKTsKIAlyZGV2LT5tYy5hcGVyX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHJkZXYtPnBkZXYsIDApOwogCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQkvKiBzaXplIGluIE1CIG9uIGV2ZXJncmVlbiAqLwotCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSkgKiAxMDI0ICogMTAyNDsKLQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSkgKiAxMDI0ICogMTAyNDsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJCS8qIHNpemUgaW4gYnl0ZXMgb24gZnVzaW9uICovCisJCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CisJCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gUlJFRzMyKENPTkZJR19NRU1TSVpFKTsKKwl9IGVsc2UgeworCQkvKiBzaXplIGluIE1CIG9uIGV2ZXJncmVlbiAqLworCQlyZGV2LT5tYy5tY192cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpICogMTAyNCAqIDEwMjQ7CisJCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gUlJFRzMyKENPTkZJR19NRU1TSVpFKSAqIDEwMjQgKiAxMDI0OworCX0KIAlyZGV2LT5tYy52aXNpYmxlX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKIAlyZGV2LT5tYy5hY3RpdmVfdnJhbV9zaXplID0gcmRldi0+bWMudmlzaWJsZV92cmFtX3NpemU7Ci0JcjYwMF92cmFtX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOworCXI3MDBfdnJhbV9ndHRfbG9jYXRpb24ocmRldiwgJnJkZXYtPm1jKTsKIAlyYWRlb25fdXBkYXRlX2JhbmR3aWR0aF9pbmZvKHJkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0xOTE3LDggKzIxNzAsMzAgQEAKIAogYm9vbCBldmVyZ3JlZW5fZ3B1X2lzX2xvY2t1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQkvKiBGSVhNRTogaW1wbGVtZW50IGZvciBldmVyZ3JlZW4gKi8KLQlyZXR1cm4gZmFsc2U7CisJdTMyIHNyYm1fc3RhdHVzOworCXUzMiBncmJtX3N0YXR1czsKKwl1MzIgZ3JibV9zdGF0dXNfc2UwLCBncmJtX3N0YXR1c19zZTE7CisJc3RydWN0IHIxMDBfZ3B1X2xvY2t1cCAqbG9ja3VwID0gJnJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubG9ja3VwOworCWludCByOworCisJc3JibV9zdGF0dXMgPSBSUkVHMzIoU1JCTV9TVEFUVVMpOworCWdyYm1fc3RhdHVzID0gUlJFRzMyKEdSQk1fU1RBVFVTKTsKKwlncmJtX3N0YXR1c19zZTAgPSBSUkVHMzIoR1JCTV9TVEFUVVNfU0UwKTsKKwlncmJtX3N0YXR1c19zZTEgPSBSUkVHMzIoR1JCTV9TVEFUVVNfU0UxKTsKKwlpZiAoIShncmJtX3N0YXR1cyAmIEdVSV9BQ1RJVkUpKSB7CisJCXIxMDBfZ3B1X2xvY2t1cF91cGRhdGUobG9ja3VwLCAmcmRldi0+Y3ApOworCQlyZXR1cm4gZmFsc2U7CisJfQorCS8qIGZvcmNlIENQIGFjdGl2aXRpZXMgKi8KKwlyID0gcmFkZW9uX3JpbmdfbG9jayhyZGV2LCAyKTsKKwlpZiAoIXIpIHsKKwkJLyogUEFDS0VUMiBOT1AgKi8KKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHg4MDAwMDAwMCk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDB4ODAwMDAwMDApOworCQlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOworCX0KKwlyZGV2LT5jcC5ycHRyID0gUlJFRzMyKENQX1JCX1JQVFIpOworCXJldHVybiByMTAwX2dwdV9jcF9pc19sb2NrdXAocmRldiwgbG9ja3VwLCAmcmRldi0+Y3ApOwogfQogCiBzdGF0aWMgaW50IGV2ZXJncmVlbl9ncHVfc29mdF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTIwMTEsMTcgKzIyODYsMjEgQEAKIAlXUkVHMzIoR1JCTV9JTlRfQ05UTCwgMCk7CiAJV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCwgMCk7CiAJV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwgMCk7Ci0JV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgMCk7Ci0JV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgMCk7Ci0JV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgMCk7Ci0JV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgMCk7CisJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSkgeworCQlXUkVHMzIoSU5UX01BU0sgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwkJV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJCVdSRUczMihJTlRfTUFTSyArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsIDApOworCQlXUkVHMzIoSU5UX01BU0sgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwl9CiAKIAlXUkVHMzIoR1JQSF9JTlRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsIDApOwogCVdSRUczMihHUlBIX0lOVF9DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwgMCk7Ci0JV1JFRzMyKEdSUEhfSU5UX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULCAwKTsKLQlXUkVHMzIoR1JQSF9JTlRfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsIDApOwotCVdSRUczMihHUlBIX0lOVF9DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgMCk7Ci0JV1JFRzMyKEdSUEhfSU5UX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApKSB7CisJCVdSRUczMihHUlBIX0lOVF9DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJCVdSRUczMihHUlBIX0lOVF9DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJCVdSRUczMihHUlBIX0lOVF9DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgMCk7CisJCVdSRUczMihHUlBIX0lOVF9DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgMCk7CisJfQogCiAJV1JFRzMyKERBQ0FfQVVUT0RFVEVDVF9JTlRfQ09OVFJPTCwgMCk7CiAJV1JFRzMyKERBQ0JfQVVUT0RFVEVDVF9JTlRfQ09OVFJPTCwgMCk7CkBAIC0yMDQ3LDYgKzIzMjYsNyBAQAogCXUzMiBjcnRjMSA9IDAsIGNydGMyID0gMCwgY3J0YzMgPSAwLCBjcnRjNCA9IDAsIGNydGM1ID0gMCwgY3J0YzYgPSAwOwogCXUzMiBocGQxLCBocGQyLCBocGQzLCBocGQ0LCBocGQ1LCBocGQ2OwogCXUzMiBncmJtX2ludF9jbnRsID0gMDsKKwl1MzIgZ3JwaDEgPSAwLCBncnBoMiA9IDAsIGdycGgzID0gMCwgZ3JwaDQgPSAwLCBncnBoNSA9IDAsIGdycGg2ID0gMDsKIAogCWlmICghcmRldi0+aXJxLmluc3RhbGxlZCkgewogCQlXQVJOKDEsICJDYW4ndCBlbmFibGUgSVJRL01TSSBiZWNhdXNlIG5vIGhhbmRsZXIgaXMgaW5zdGFsbGVkXG4iKTsKQEAgLTIwNzIsMjcgKzIzNTIsMzMgQEAKIAkJY3BfaW50X2NudGwgfD0gUkJfSU5UX0VOQUJMRTsKIAkJY3BfaW50X2NudGwgfD0gVElNRV9TVEFNUF9JTlRfRU5BQkxFOwogCX0KLQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFswXSkgeworCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzBdIHx8CisJICAgIHJkZXYtPmlycS5wZmxpcFswXSkgewogCQlEUk1fREVCVUcoImV2ZXJncmVlbl9pcnFfc2V0OiB2YmxhbmsgMFxuIik7CiAJCWNydGMxIHw9IFZCTEFOS19JTlRfTUFTSzsKIAl9Ci0JaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbMV0pIHsKKwlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFsxXSB8fAorCSAgICByZGV2LT5pcnEucGZsaXBbMV0pIHsKIAkJRFJNX0RFQlVHKCJldmVyZ3JlZW5faXJxX3NldDogdmJsYW5rIDFcbiIpOwogCQljcnRjMiB8PSBWQkxBTktfSU5UX01BU0s7CiAJfQotCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzJdKSB7CisJaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbMl0gfHwKKwkgICAgcmRldi0+aXJxLnBmbGlwWzJdKSB7CiAJCURSTV9ERUJVRygiZXZlcmdyZWVuX2lycV9zZXQ6IHZibGFuayAyXG4iKTsKIAkJY3J0YzMgfD0gVkJMQU5LX0lOVF9NQVNLOwogCX0KLQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFszXSkgeworCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzNdIHx8CisJICAgIHJkZXYtPmlycS5wZmxpcFszXSkgewogCQlEUk1fREVCVUcoImV2ZXJncmVlbl9pcnFfc2V0OiB2YmxhbmsgM1xuIik7CiAJCWNydGM0IHw9IFZCTEFOS19JTlRfTUFTSzsKIAl9Ci0JaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbNF0pIHsKKwlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFs0XSB8fAorCSAgICByZGV2LT5pcnEucGZsaXBbNF0pIHsKIAkJRFJNX0RFQlVHKCJldmVyZ3JlZW5faXJxX3NldDogdmJsYW5rIDRcbiIpOwogCQljcnRjNSB8PSBWQkxBTktfSU5UX01BU0s7CiAJfQotCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzVdKSB7CisJaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbNV0gfHwKKwkgICAgcmRldi0+aXJxLnBmbGlwWzVdKSB7CiAJCURSTV9ERUJVRygiZXZlcmdyZWVuX2lycV9zZXQ6IHZibGFuayA1XG4iKTsKIAkJY3J0YzYgfD0gVkJMQU5LX0lOVF9NQVNLOwogCX0KQEAgLTIxMzAsMTAgKzI0MTYsMTkgQEAKIAogCVdSRUczMihJTlRfTUFTSyArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsIGNydGMxKTsKIAlXUkVHMzIoSU5UX01BU0sgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULCBjcnRjMik7Ci0JV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgY3J0YzMpOwotCVdSRUczMihJTlRfTUFTSyArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsIGNydGM0KTsKLQlXUkVHMzIoSU5UX01BU0sgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCBjcnRjNSk7Ci0JV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgY3J0YzYpOworCWlmICghKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkpIHsKKwkJV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgY3J0YzMpOworCQlXUkVHMzIoSU5UX01BU0sgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULCBjcnRjNCk7CisJCVdSRUczMihJTlRfTUFTSyArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsIGNydGM1KTsKKwkJV1JFRzMyKElOVF9NQVNLICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgY3J0YzYpOworCX0KKworCVdSRUczMihHUlBIX0lOVF9DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCwgZ3JwaDEpOworCVdSRUczMihHUlBIX0lOVF9DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwgZ3JwaDIpOworCVdSRUczMihHUlBIX0lOVF9DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgZ3JwaDMpOworCVdSRUczMihHUlBIX0lOVF9DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgZ3JwaDQpOworCVdSRUczMihHUlBIX0lOVF9DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgZ3JwaDUpOworCVdSRUczMihHUlBIX0lOVF9DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgZ3JwaDYpOwogCiAJV1JFRzMyKERDX0hQRDFfSU5UX0NPTlRST0wsIGhwZDEpOwogCVdSRUczMihEQ19IUEQyX0lOVF9DT05UUk9MLCBocGQyKTsKQEAgLTIxNDUsNzkgKzI0NDAsOTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGV2ZXJncmVlbl9pcnFfYWNrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAotCQkJCSAgICAgdTMyICpkaXNwX2ludCwKLQkJCQkgICAgIHUzMiAqZGlzcF9pbnRfY29udCwKLQkJCQkgICAgIHUzMiAqZGlzcF9pbnRfY29udDIsCi0JCQkJICAgICB1MzIgKmRpc3BfaW50X2NvbnQzLAotCQkJCSAgICAgdTMyICpkaXNwX2ludF9jb250NCwKLQkJCQkgICAgIHUzMiAqZGlzcF9pbnRfY29udDUpCitzdGF0aWMgaW5saW5lIHZvaWQgZXZlcmdyZWVuX2lycV9hY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdTMyIHRtcDsKIAotCSpkaXNwX2ludCA9IFJSRUczMihESVNQX0lOVEVSUlVQVF9TVEFUVVMpOwotCSpkaXNwX2ludF9jb250ID0gUlJFRzMyKERJU1BfSU5URVJSVVBUX1NUQVRVU19DT05USU5VRSk7Ci0JKmRpc3BfaW50X2NvbnQyID0gUlJFRzMyKERJU1BfSU5URVJSVVBUX1NUQVRVU19DT05USU5VRTIpOwotCSpkaXNwX2ludF9jb250MyA9IFJSRUczMihESVNQX0lOVEVSUlVQVF9TVEFUVVNfQ09OVElOVUUzKTsKLQkqZGlzcF9pbnRfY29udDQgPSBSUkVHMzIoRElTUF9JTlRFUlJVUFRfU1RBVFVTX0NPTlRJTlVFNCk7Ci0JKmRpc3BfaW50X2NvbnQ1ID0gUlJFRzMyKERJU1BfSU5URVJSVVBUX1NUQVRVU19DT05USU5VRTUpOworCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50ID0gUlJFRzMyKERJU1BfSU5URVJSVVBUX1NUQVRVUyk7CisJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udCA9IFJSRUczMihESVNQX0lOVEVSUlVQVF9TVEFUVVNfQ09OVElOVUUpOworCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQyID0gUlJFRzMyKERJU1BfSU5URVJSVVBUX1NUQVRVU19DT05USU5VRTIpOworCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQzID0gUlJFRzMyKERJU1BfSU5URVJSVVBUX1NUQVRVU19DT05USU5VRTMpOworCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ0ID0gUlJFRzMyKERJU1BfSU5URVJSVVBUX1NUQVRVU19DT05USU5VRTQpOworCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ1ID0gUlJFRzMyKERJU1BfSU5URVJSVVBUX1NUQVRVU19DT05USU5VRTUpOworCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmQxZ3JwaF9pbnQgPSBSUkVHMzIoR1JQSF9JTlRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCk7CisJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZDJncnBoX2ludCA9IFJSRUczMihHUlBIX0lOVF9TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VUKTsKKwlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kM2dycGhfaW50ID0gUlJFRzMyKEdSUEhfSU5UX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQpOworCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmQ0Z3JwaF9pbnQgPSBSUkVHMzIoR1JQSF9JTlRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCk7CisJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZDVncnBoX2ludCA9IFJSRUczMihHUlBIX0lOVF9TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VUKTsKKwlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kNmdycGhfaW50ID0gUlJFRzMyKEdSUEhfSU5UX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQpOwogCi0JaWYgKCpkaXNwX2ludCAmIExCX0QxX1ZCTEFOS19JTlRFUlJVUFQpCisJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmQxZ3JwaF9pbnQgJiBHUlBIX1BGTElQX0lOVF9PQ0NVUlJFRCkKKwkJV1JFRzMyKEdSUEhfSU5UX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsIEdSUEhfUEZMSVBfSU5UX0NMRUFSKTsKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZDJncnBoX2ludCAmIEdSUEhfUEZMSVBfSU5UX09DQ1VSUkVEKQorCQlXUkVHMzIoR1JQSF9JTlRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwgR1JQSF9QRkxJUF9JTlRfQ0xFQVIpOworCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kM2dycGhfaW50ICYgR1JQSF9QRkxJUF9JTlRfT0NDVVJSRUQpCisJCVdSRUczMihHUlBIX0lOVF9TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULCBHUlBIX1BGTElQX0lOVF9DTEVBUik7CisJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmQ0Z3JwaF9pbnQgJiBHUlBIX1BGTElQX0lOVF9PQ0NVUlJFRCkKKwkJV1JFRzMyKEdSUEhfSU5UX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsIEdSUEhfUEZMSVBfSU5UX0NMRUFSKTsKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZDVncnBoX2ludCAmIEdSUEhfUEZMSVBfSU5UX09DQ1VSUkVEKQorCQlXUkVHMzIoR1JQSF9JTlRfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgR1JQSF9QRkxJUF9JTlRfQ0xFQVIpOworCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kNmdycGhfaW50ICYgR1JQSF9QRkxJUF9JTlRfT0NDVVJSRUQpCisJCVdSRUczMihHUlBIX0lOVF9TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULCBHUlBIX1BGTElQX0lOVF9DTEVBUik7CisKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnQgJiBMQl9EMV9WQkxBTktfSU5URVJSVVBUKQogCQlXUkVHMzIoVkJMQU5LX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsIFZCTEFOS19BQ0spOwotCWlmICgqZGlzcF9pbnQgJiBMQl9EMV9WTElORV9JTlRFUlJVUFQpCisJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50ICYgTEJfRDFfVkxJTkVfSU5URVJSVVBUKQogCQlXUkVHMzIoVkxJTkVfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCwgVkxJTkVfQUNLKTsKIAotCWlmICgqZGlzcF9pbnRfY29udCAmIExCX0QyX1ZCTEFOS19JTlRFUlJVUFQpCisJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQgJiBMQl9EMl9WQkxBTktfSU5URVJSVVBUKQogCQlXUkVHMzIoVkJMQU5LX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQsIFZCTEFOS19BQ0spOwotCWlmICgqZGlzcF9pbnRfY29udCAmIExCX0QyX1ZMSU5FX0lOVEVSUlVQVCkKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udCAmIExCX0QyX1ZMSU5FX0lOVEVSUlVQVCkKIAkJV1JFRzMyKFZMSU5FX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQsIFZMSU5FX0FDSyk7CiAKLQlpZiAoKmRpc3BfaW50X2NvbnQyICYgTEJfRDNfVkJMQU5LX0lOVEVSUlVQVCkKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDIgJiBMQl9EM19WQkxBTktfSU5URVJSVVBUKQogCQlXUkVHMzIoVkJMQU5LX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIFZCTEFOS19BQ0spOwotCWlmICgqZGlzcF9pbnRfY29udDIgJiBMQl9EM19WTElORV9JTlRFUlJVUFQpCisJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQyICYgTEJfRDNfVkxJTkVfSU5URVJSVVBUKQogCQlXUkVHMzIoVkxJTkVfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgVkxJTkVfQUNLKTsKIAotCWlmICgqZGlzcF9pbnRfY29udDMgJiBMQl9ENF9WQkxBTktfSU5URVJSVVBUKQorCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250MyAmIExCX0Q0X1ZCTEFOS19JTlRFUlJVUFQpCiAJCVdSRUczMihWQkxBTktfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgVkJMQU5LX0FDSyk7Ci0JaWYgKCpkaXNwX2ludF9jb250MyAmIExCX0Q0X1ZMSU5FX0lOVEVSUlVQVCkKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDMgJiBMQl9ENF9WTElORV9JTlRFUlJVUFQpCiAJCVdSRUczMihWTElORV9TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULCBWTElORV9BQ0spOwogCi0JaWYgKCpkaXNwX2ludF9jb250NCAmIExCX0Q1X1ZCTEFOS19JTlRFUlJVUFQpCisJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ0ICYgTEJfRDVfVkJMQU5LX0lOVEVSUlVQVCkKIAkJV1JFRzMyKFZCTEFOS19TVEFUVVMgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCBWQkxBTktfQUNLKTsKLQlpZiAoKmRpc3BfaW50X2NvbnQ0ICYgTEJfRDVfVkxJTkVfSU5URVJSVVBUKQorCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NCAmIExCX0Q1X1ZMSU5FX0lOVEVSUlVQVCkKIAkJV1JFRzMyKFZMSU5FX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsIFZMSU5FX0FDSyk7CiAKLQlpZiAoKmRpc3BfaW50X2NvbnQ1ICYgTEJfRDZfVkJMQU5LX0lOVEVSUlVQVCkKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDUgJiBMQl9ENl9WQkxBTktfSU5URVJSVVBUKQogCQlXUkVHMzIoVkJMQU5LX1NUQVRVUyArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsIFZCTEFOS19BQ0spOwotCWlmICgqZGlzcF9pbnRfY29udDUgJiBMQl9ENl9WTElORV9JTlRFUlJVUFQpCisJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ1ICYgTEJfRDZfVkxJTkVfSU5URVJSVVBUKQogCQlXUkVHMzIoVkxJTkVfU1RBVFVTICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgVkxJTkVfQUNLKTsKIAotCWlmICgqZGlzcF9pbnQgJiBEQ19IUEQxX0lOVEVSUlVQVCkgeworCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludCAmIERDX0hQRDFfSU5URVJSVVBUKSB7CiAJCXRtcCA9IFJSRUczMihEQ19IUEQxX0lOVF9DT05UUk9MKTsKIAkJdG1wIHw9IERDX0hQRHhfSU5UX0FDSzsKIAkJV1JFRzMyKERDX0hQRDFfSU5UX0NPTlRST0wsIHRtcCk7CiAJfQotCWlmICgqZGlzcF9pbnRfY29udCAmIERDX0hQRDJfSU5URVJSVVBUKSB7CisJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQgJiBEQ19IUEQyX0lOVEVSUlVQVCkgewogCQl0bXAgPSBSUkVHMzIoRENfSFBEMl9JTlRfQ09OVFJPTCk7CiAJCXRtcCB8PSBEQ19IUER4X0lOVF9BQ0s7CiAJCVdSRUczMihEQ19IUEQyX0lOVF9DT05UUk9MLCB0bXApOwogCX0KLQlpZiAoKmRpc3BfaW50X2NvbnQyICYgRENfSFBEM19JTlRFUlJVUFQpIHsKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDIgJiBEQ19IUEQzX0lOVEVSUlVQVCkgewogCQl0bXAgPSBSUkVHMzIoRENfSFBEM19JTlRfQ09OVFJPTCk7CiAJCXRtcCB8PSBEQ19IUER4X0lOVF9BQ0s7CiAJCVdSRUczMihEQ19IUEQzX0lOVF9DT05UUk9MLCB0bXApOwogCX0KLQlpZiAoKmRpc3BfaW50X2NvbnQzICYgRENfSFBENF9JTlRFUlJVUFQpIHsKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDMgJiBEQ19IUEQ0X0lOVEVSUlVQVCkgewogCQl0bXAgPSBSUkVHMzIoRENfSFBENF9JTlRfQ09OVFJPTCk7CiAJCXRtcCB8PSBEQ19IUER4X0lOVF9BQ0s7CiAJCVdSRUczMihEQ19IUEQ0X0lOVF9DT05UUk9MLCB0bXApOwogCX0KLQlpZiAoKmRpc3BfaW50X2NvbnQ0ICYgRENfSFBENV9JTlRFUlJVUFQpIHsKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDQgJiBEQ19IUEQ1X0lOVEVSUlVQVCkgewogCQl0bXAgPSBSUkVHMzIoRENfSFBENV9JTlRfQ09OVFJPTCk7CiAJCXRtcCB8PSBEQ19IUER4X0lOVF9BQ0s7CiAJCVdSRUczMihEQ19IUEQ1X0lOVF9DT05UUk9MLCB0bXApOwogCX0KLQlpZiAoKmRpc3BfaW50X2NvbnQ1ICYgRENfSFBENl9JTlRFUlJVUFQpIHsKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDUgJiBEQ19IUEQ2X0lOVEVSUlVQVCkgewogCQl0bXAgPSBSUkVHMzIoRENfSFBENV9JTlRfQ09OVFJPTCk7CiAJCXRtcCB8PSBEQ19IUER4X0lOVF9BQ0s7CiAJCVdSRUczMihEQ19IUEQ2X0lOVF9DT05UUk9MLCB0bXApOwpAQCAtMjIyNiwxNCArMjUzNCwxMCBAQAogCiB2b2lkIGV2ZXJncmVlbl9pcnFfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQl1MzIgZGlzcF9pbnQsIGRpc3BfaW50X2NvbnQsIGRpc3BfaW50X2NvbnQyOwotCXUzMiBkaXNwX2ludF9jb250MywgZGlzcF9pbnRfY29udDQsIGRpc3BfaW50X2NvbnQ1OwotCiAJcjYwMF9kaXNhYmxlX2ludGVycnVwdHMocmRldik7CiAJLyogV2FpdCBhbmQgYWNrbm93bGVkZ2UgaXJxICovCiAJbWRlbGF5KDEpOwotCWV2ZXJncmVlbl9pcnFfYWNrKHJkZXYsICZkaXNwX2ludCwgJmRpc3BfaW50X2NvbnQsICZkaXNwX2ludF9jb250MiwKLQkJCSAgJmRpc3BfaW50X2NvbnQzLCAmZGlzcF9pbnRfY29udDQsICZkaXNwX2ludF9jb250NSk7CisJZXZlcmdyZWVuX2lycV9hY2socmRldik7CiAJZXZlcmdyZWVuX2Rpc2FibGVfaW50ZXJydXB0X3N0YXRlKHJkZXYpOwogfQogCkBAIC0yMjczLDggKzI1NzcsNiBAQAogCXUzMiBycHRyID0gcmRldi0+aWgucnB0cjsKIAl1MzIgc3JjX2lkLCBzcmNfZGF0YTsKIAl1MzIgcmluZ19pbmRleDsKLQl1MzIgZGlzcF9pbnQsIGRpc3BfaW50X2NvbnQsIGRpc3BfaW50X2NvbnQyOwotCXUzMiBkaXNwX2ludF9jb250MywgZGlzcF9pbnRfY29udDQsIGRpc3BfaW50X2NvbnQ1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJYm9vbCBxdWV1ZV9ob3RwbHVnID0gZmFsc2U7CiAKQEAgLTIyOTUsOCArMjU5Nyw3IEBACiAKIHJlc3RhcnRfaWg6CiAJLyogZGlzcGxheSBpbnRlcnJ1cHRzICovCi0JZXZlcmdyZWVuX2lycV9hY2socmRldiwgJmRpc3BfaW50LCAmZGlzcF9pbnRfY29udCwgJmRpc3BfaW50X2NvbnQyLAotCQkJICAmZGlzcF9pbnRfY29udDMsICZkaXNwX2ludF9jb250NCwgJmRpc3BfaW50X2NvbnQ1KTsKKwlldmVyZ3JlZW5faXJxX2FjayhyZGV2KTsKIAogCXJkZXYtPmloLndwdHIgPSB3cHRyOwogCXdoaWxlIChycHRyICE9IHdwdHIpIHsKQEAgLTIzMDksMTcgKzI2MTAsMjEgQEAKIAkJY2FzZSAxOiAvKiBEMSB2YmxhbmsvdmxpbmUgKi8KIAkJCXN3aXRjaCAoc3JjX2RhdGEpIHsKIAkJCWNhc2UgMDogLyogRDEgdmJsYW5rICovCi0JCQkJaWYgKGRpc3BfaW50ICYgTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCkgewotCQkJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAwKTsKLQkJCQkJcmRldi0+cG0udmJsYW5rX3N5bmMgPSB0cnVlOwotCQkJCQl3YWtlX3VwKCZyZGV2LT5pcnEudmJsYW5rX3F1ZXVlKTsKLQkJCQkJZGlzcF9pbnQgJj0gfkxCX0QxX1ZCTEFOS19JTlRFUlJVUFQ7CisJCQkJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50ICYgTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCkgeworCQkJCQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFswXSkgeworCQkJCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgMCk7CisJCQkJCQlyZGV2LT5wbS52Ymxhbmtfc3luYyA9IHRydWU7CisJCQkJCQl3YWtlX3VwKCZyZGV2LT5pcnEudmJsYW5rX3F1ZXVlKTsKKwkJCQkJfQorCQkJCQlpZiAocmRldi0+aXJxLnBmbGlwWzBdKQorCQkJCQkJcmFkZW9uX2NydGNfaGFuZGxlX2ZsaXAocmRldiwgMCk7CisJCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50ICY9IH5MQl9EMV9WQkxBTktfSU5URVJSVVBUOwogCQkJCQlEUk1fREVCVUcoIklIOiBEMSB2YmxhbmtcbiIpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWNhc2UgMTogLyogRDEgdmxpbmUgKi8KLQkJCQlpZiAoZGlzcF9pbnQgJiBMQl9EMV9WTElORV9JTlRFUlJVUFQpIHsKLQkJCQkJZGlzcF9pbnQgJj0gfkxCX0QxX1ZMSU5FX0lOVEVSUlVQVDsKKwkJCQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnQgJiBMQl9EMV9WTElORV9JTlRFUlJVUFQpIHsKKwkJCQkJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnQgJj0gfkxCX0QxX1ZMSU5FX0lOVEVSUlVQVDsKIAkJCQkJRFJNX0RFQlVHKCJJSDogRDEgdmxpbmVcbiIpOwogCQkJCX0KIAkJCQlicmVhazsKQEAgLTIzMzEsMTcgKzI2MzYsMjEgQEAKIAkJY2FzZSAyOiAvKiBEMiB2YmxhbmsvdmxpbmUgKi8KIAkJCXN3aXRjaCAoc3JjX2RhdGEpIHsKIAkJCWNhc2UgMDogLyogRDIgdmJsYW5rICovCi0JCQkJaWYgKGRpc3BfaW50X2NvbnQgJiBMQl9EMl9WQkxBTktfSU5URVJSVVBUKSB7Ci0JCQkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDEpOwotCQkJCQlyZGV2LT5wbS52Ymxhbmtfc3luYyA9IHRydWU7Ci0JCQkJCXdha2VfdXAoJnJkZXYtPmlycS52YmxhbmtfcXVldWUpOwotCQkJCQlkaXNwX2ludF9jb250ICY9IH5MQl9EMl9WQkxBTktfSU5URVJSVVBUOworCQkJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250ICYgTEJfRDJfVkJMQU5LX0lOVEVSUlVQVCkgeworCQkJCQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFsxXSkgeworCQkJCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgMSk7CisJCQkJCQlyZGV2LT5wbS52Ymxhbmtfc3luYyA9IHRydWU7CisJCQkJCQl3YWtlX3VwKCZyZGV2LT5pcnEudmJsYW5rX3F1ZXVlKTsKKwkJCQkJfQorCQkJCQlpZiAocmRldi0+aXJxLnBmbGlwWzFdKQorCQkJCQkJcmFkZW9uX2NydGNfaGFuZGxlX2ZsaXAocmRldiwgMSk7CisJCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQgJj0gfkxCX0QyX1ZCTEFOS19JTlRFUlJVUFQ7CiAJCQkJCURSTV9ERUJVRygiSUg6IEQyIHZibGFua1xuIik7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSAxOiAvKiBEMiB2bGluZSAqLwotCQkJCWlmIChkaXNwX2ludF9jb250ICYgTEJfRDJfVkxJTkVfSU5URVJSVVBUKSB7Ci0JCQkJCWRpc3BfaW50X2NvbnQgJj0gfkxCX0QyX1ZMSU5FX0lOVEVSUlVQVDsKKwkJCQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udCAmIExCX0QyX1ZMSU5FX0lOVEVSUlVQVCkgeworCQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250ICY9IH5MQl9EMl9WTElORV9JTlRFUlJVUFQ7CiAJCQkJCURSTV9ERUJVRygiSUg6IEQyIHZsaW5lXG4iKTsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC0yMzUzLDE3ICsyNjYyLDIxIEBACiAJCWNhc2UgMzogLyogRDMgdmJsYW5rL3ZsaW5lICovCiAJCQlzd2l0Y2ggKHNyY19kYXRhKSB7CiAJCQljYXNlIDA6IC8qIEQzIHZibGFuayAqLwotCQkJCWlmIChkaXNwX2ludF9jb250MiAmIExCX0QzX1ZCTEFOS19JTlRFUlJVUFQpIHsKLQkJCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgMik7Ci0JCQkJCXJkZXYtPnBtLnZibGFua19zeW5jID0gdHJ1ZTsKLQkJCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7Ci0JCQkJCWRpc3BfaW50X2NvbnQyICY9IH5MQl9EM19WQkxBTktfSU5URVJSVVBUOworCQkJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250MiAmIExCX0QzX1ZCTEFOS19JTlRFUlJVUFQpIHsKKwkJCQkJaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbMl0pIHsKKwkJCQkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDIpOworCQkJCQkJcmRldi0+cG0udmJsYW5rX3N5bmMgPSB0cnVlOworCQkJCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7CisJCQkJCX0KKwkJCQkJaWYgKHJkZXYtPmlycS5wZmxpcFsyXSkKKwkJCQkJCXJhZGVvbl9jcnRjX2hhbmRsZV9mbGlwKHJkZXYsIDIpOworCQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250MiAmPSB+TEJfRDNfVkJMQU5LX0lOVEVSUlVQVDsKIAkJCQkJRFJNX0RFQlVHKCJJSDogRDMgdmJsYW5rXG4iKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6IC8qIEQzIHZsaW5lICovCi0JCQkJaWYgKGRpc3BfaW50X2NvbnQyICYgTEJfRDNfVkxJTkVfSU5URVJSVVBUKSB7Ci0JCQkJCWRpc3BfaW50X2NvbnQyICY9IH5MQl9EM19WTElORV9JTlRFUlJVUFQ7CisJCQkJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQyICYgTEJfRDNfVkxJTkVfSU5URVJSVVBUKSB7CisJCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQyICY9IH5MQl9EM19WTElORV9JTlRFUlJVUFQ7CiAJCQkJCURSTV9ERUJVRygiSUg6IEQzIHZsaW5lXG4iKTsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC0yMzc1LDE3ICsyNjg4LDIxIEBACiAJCWNhc2UgNDogLyogRDQgdmJsYW5rL3ZsaW5lICovCiAJCQlzd2l0Y2ggKHNyY19kYXRhKSB7CiAJCQljYXNlIDA6IC8qIEQ0IHZibGFuayAqLwotCQkJCWlmIChkaXNwX2ludF9jb250MyAmIExCX0Q0X1ZCTEFOS19JTlRFUlJVUFQpIHsKLQkJCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgMyk7Ci0JCQkJCXJkZXYtPnBtLnZibGFua19zeW5jID0gdHJ1ZTsKLQkJCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7Ci0JCQkJCWRpc3BfaW50X2NvbnQzICY9IH5MQl9ENF9WQkxBTktfSU5URVJSVVBUOworCQkJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250MyAmIExCX0Q0X1ZCTEFOS19JTlRFUlJVUFQpIHsKKwkJCQkJaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbM10pIHsKKwkJCQkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDMpOworCQkJCQkJcmRldi0+cG0udmJsYW5rX3N5bmMgPSB0cnVlOworCQkJCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7CisJCQkJCX0KKwkJCQkJaWYgKHJkZXYtPmlycS5wZmxpcFszXSkKKwkJCQkJCXJhZGVvbl9jcnRjX2hhbmRsZV9mbGlwKHJkZXYsIDMpOworCQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250MyAmPSB+TEJfRDRfVkJMQU5LX0lOVEVSUlVQVDsKIAkJCQkJRFJNX0RFQlVHKCJJSDogRDQgdmJsYW5rXG4iKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6IC8qIEQ0IHZsaW5lICovCi0JCQkJaWYgKGRpc3BfaW50X2NvbnQzICYgTEJfRDRfVkxJTkVfSU5URVJSVVBUKSB7Ci0JCQkJCWRpc3BfaW50X2NvbnQzICY9IH5MQl9ENF9WTElORV9JTlRFUlJVUFQ7CisJCQkJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQzICYgTEJfRDRfVkxJTkVfSU5URVJSVVBUKSB7CisJCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQzICY9IH5MQl9ENF9WTElORV9JTlRFUlJVUFQ7CiAJCQkJCURSTV9ERUJVRygiSUg6IEQ0IHZsaW5lXG4iKTsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC0yMzk3LDE3ICsyNzE0LDIxIEBACiAJCWNhc2UgNTogLyogRDUgdmJsYW5rL3ZsaW5lICovCiAJCQlzd2l0Y2ggKHNyY19kYXRhKSB7CiAJCQljYXNlIDA6IC8qIEQ1IHZibGFuayAqLwotCQkJCWlmIChkaXNwX2ludF9jb250NCAmIExCX0Q1X1ZCTEFOS19JTlRFUlJVUFQpIHsKLQkJCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgNCk7Ci0JCQkJCXJkZXYtPnBtLnZibGFua19zeW5jID0gdHJ1ZTsKLQkJCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7Ci0JCQkJCWRpc3BfaW50X2NvbnQ0ICY9IH5MQl9ENV9WQkxBTktfSU5URVJSVVBUOworCQkJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NCAmIExCX0Q1X1ZCTEFOS19JTlRFUlJVUFQpIHsKKwkJCQkJaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbNF0pIHsKKwkJCQkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDQpOworCQkJCQkJcmRldi0+cG0udmJsYW5rX3N5bmMgPSB0cnVlOworCQkJCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7CisJCQkJCX0KKwkJCQkJaWYgKHJkZXYtPmlycS5wZmxpcFs0XSkKKwkJCQkJCXJhZGVvbl9jcnRjX2hhbmRsZV9mbGlwKHJkZXYsIDQpOworCQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NCAmPSB+TEJfRDVfVkJMQU5LX0lOVEVSUlVQVDsKIAkJCQkJRFJNX0RFQlVHKCJJSDogRDUgdmJsYW5rXG4iKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6IC8qIEQ1IHZsaW5lICovCi0JCQkJaWYgKGRpc3BfaW50X2NvbnQ0ICYgTEJfRDVfVkxJTkVfSU5URVJSVVBUKSB7Ci0JCQkJCWRpc3BfaW50X2NvbnQ0ICY9IH5MQl9ENV9WTElORV9JTlRFUlJVUFQ7CisJCQkJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ0ICYgTEJfRDVfVkxJTkVfSU5URVJSVVBUKSB7CisJCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ0ICY9IH5MQl9ENV9WTElORV9JTlRFUlJVUFQ7CiAJCQkJCURSTV9ERUJVRygiSUg6IEQ1IHZsaW5lXG4iKTsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC0yNDE5LDE3ICsyNzQwLDIxIEBACiAJCWNhc2UgNjogLyogRDYgdmJsYW5rL3ZsaW5lICovCiAJCQlzd2l0Y2ggKHNyY19kYXRhKSB7CiAJCQljYXNlIDA6IC8qIEQ2IHZibGFuayAqLwotCQkJCWlmIChkaXNwX2ludF9jb250NSAmIExCX0Q2X1ZCTEFOS19JTlRFUlJVUFQpIHsKLQkJCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgNSk7Ci0JCQkJCXJkZXYtPnBtLnZibGFua19zeW5jID0gdHJ1ZTsKLQkJCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7Ci0JCQkJCWRpc3BfaW50X2NvbnQ1ICY9IH5MQl9ENl9WQkxBTktfSU5URVJSVVBUOworCQkJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NSAmIExCX0Q2X1ZCTEFOS19JTlRFUlJVUFQpIHsKKwkJCQkJaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbNV0pIHsKKwkJCQkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDUpOworCQkJCQkJcmRldi0+cG0udmJsYW5rX3N5bmMgPSB0cnVlOworCQkJCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7CisJCQkJCX0KKwkJCQkJaWYgKHJkZXYtPmlycS5wZmxpcFs1XSkKKwkJCQkJCXJhZGVvbl9jcnRjX2hhbmRsZV9mbGlwKHJkZXYsIDUpOworCQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NSAmPSB+TEJfRDZfVkJMQU5LX0lOVEVSUlVQVDsKIAkJCQkJRFJNX0RFQlVHKCJJSDogRDYgdmJsYW5rXG4iKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6IC8qIEQ2IHZsaW5lICovCi0JCQkJaWYgKGRpc3BfaW50X2NvbnQ1ICYgTEJfRDZfVkxJTkVfSU5URVJSVVBUKSB7Ci0JCQkJCWRpc3BfaW50X2NvbnQ1ICY9IH5MQl9ENl9WTElORV9JTlRFUlJVUFQ7CisJCQkJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ1ICYgTEJfRDZfVkxJTkVfSU5URVJSVVBUKSB7CisJCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ1ICY9IH5MQl9ENl9WTElORV9JTlRFUlJVUFQ7CiAJCQkJCURSTV9ERUJVRygiSUg6IEQ2IHZsaW5lXG4iKTsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC0yNDQxLDQzICsyNzY2LDQzIEBACiAJCWNhc2UgNDI6IC8qIEhQRCBob3RwbHVnICovCiAJCQlzd2l0Y2ggKHNyY19kYXRhKSB7CiAJCQljYXNlIDA6Ci0JCQkJaWYgKGRpc3BfaW50ICYgRENfSFBEMV9JTlRFUlJVUFQpIHsKLQkJCQkJZGlzcF9pbnQgJj0gfkRDX0hQRDFfSU5URVJSVVBUOworCQkJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludCAmIERDX0hQRDFfSU5URVJSVVBUKSB7CisJCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50ICY9IH5EQ19IUEQxX0lOVEVSUlVQVDsKIAkJCQkJcXVldWVfaG90cGx1ZyA9IHRydWU7CiAJCQkJCURSTV9ERUJVRygiSUg6IEhQRDFcbiIpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWNhc2UgMToKLQkJCQlpZiAoZGlzcF9pbnRfY29udCAmIERDX0hQRDJfSU5URVJSVVBUKSB7Ci0JCQkJCWRpc3BfaW50X2NvbnQgJj0gfkRDX0hQRDJfSU5URVJSVVBUOworCQkJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250ICYgRENfSFBEMl9JTlRFUlJVUFQpIHsKKwkJCQkJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udCAmPSB+RENfSFBEMl9JTlRFUlJVUFQ7CiAJCQkJCXF1ZXVlX2hvdHBsdWcgPSB0cnVlOwogCQkJCQlEUk1fREVCVUcoIklIOiBIUEQyXG4iKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIDI6Ci0JCQkJaWYgKGRpc3BfaW50X2NvbnQyICYgRENfSFBEM19JTlRFUlJVUFQpIHsKLQkJCQkJZGlzcF9pbnRfY29udDIgJj0gfkRDX0hQRDNfSU5URVJSVVBUOworCQkJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250MiAmIERDX0hQRDNfSU5URVJSVVBUKSB7CisJCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQyICY9IH5EQ19IUEQzX0lOVEVSUlVQVDsKIAkJCQkJcXVldWVfaG90cGx1ZyA9IHRydWU7CiAJCQkJCURSTV9ERUJVRygiSUg6IEhQRDNcbiIpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWNhc2UgMzoKLQkJCQlpZiAoZGlzcF9pbnRfY29udDMgJiBEQ19IUEQ0X0lOVEVSUlVQVCkgewotCQkJCQlkaXNwX2ludF9jb250MyAmPSB+RENfSFBENF9JTlRFUlJVUFQ7CisJCQkJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQzICYgRENfSFBENF9JTlRFUlJVUFQpIHsKKwkJCQkJcmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDMgJj0gfkRDX0hQRDRfSU5URVJSVVBUOwogCQkJCQlxdWV1ZV9ob3RwbHVnID0gdHJ1ZTsKIAkJCQkJRFJNX0RFQlVHKCJJSDogSFBENFxuIik7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSA0OgotCQkJCWlmIChkaXNwX2ludF9jb250NCAmIERDX0hQRDVfSU5URVJSVVBUKSB7Ci0JCQkJCWRpc3BfaW50X2NvbnQ0ICY9IH5EQ19IUEQ1X0lOVEVSUlVQVDsKKwkJCQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5ldmVyZ3JlZW4uZGlzcF9pbnRfY29udDQgJiBEQ19IUEQ1X0lOVEVSUlVQVCkgeworCQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NCAmPSB+RENfSFBENV9JTlRFUlJVUFQ7CiAJCQkJCXF1ZXVlX2hvdHBsdWcgPSB0cnVlOwogCQkJCQlEUk1fREVCVUcoIklIOiBIUEQ1XG4iKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIDU6Ci0JCQkJaWYgKGRpc3BfaW50X2NvbnQ1ICYgRENfSFBENl9JTlRFUlJVUFQpIHsKLQkJCQkJZGlzcF9pbnRfY29udDUgJj0gfkRDX0hQRDZfSU5URVJSVVBUOworCQkJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLmV2ZXJncmVlbi5kaXNwX2ludF9jb250NSAmIERDX0hQRDZfSU5URVJSVVBUKSB7CisJCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MuZXZlcmdyZWVuLmRpc3BfaW50X2NvbnQ1ICY9IH5EQ19IUEQ2X0lOVEVSUlVQVDsKIAkJCQkJcXVldWVfaG90cGx1ZyA9IHRydWU7CiAJCQkJCURSTV9ERUJVRygiSUg6IEhQRDZcbiIpOwogCQkJCX0KQEAgLTI1MTYsNyArMjg0MSw3IEBACiAJaWYgKHdwdHIgIT0gcmRldi0+aWgud3B0cikKIAkJZ290byByZXN0YXJ0X2loOwogCWlmIChxdWV1ZV9ob3RwbHVnKQotCQlxdWV1ZV93b3JrKHJkZXYtPndxLCAmcmRldi0+aG90cGx1Z193b3JrKTsKKwkJc2NoZWR1bGVfd29yaygmcmRldi0+aG90cGx1Z193b3JrKTsKIAlyZGV2LT5paC5ycHRyID0gcnB0cjsKIAlXUkVHMzIoSUhfUkJfUlBUUiwgcmRldi0+aWgucnB0cik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRldi0+aWgubG9jaywgZmxhZ3MpOwpAQCAtMjUyNywxMiArMjg1MiwzMSBAQAogewogCWludCByOwogCi0JaWYgKCFyZGV2LT5tZV9mdyB8fCAhcmRldi0+cGZwX2Z3IHx8ICFyZGV2LT5ybGNfZncpIHsKLQkJciA9IHI2MDBfaW5pdF9taWNyb2NvZGUocmRldik7CisJLyogZW5hYmxlIHBjaWUgZ2VuMiBsaW5rICovCisJaWYgKCFBU0lDX0lTX0RDRTUocmRldikpCisJCWV2ZXJncmVlbl9wY2llX2dlbjJfZW5hYmxlKHJkZXYpOworCisJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkgeworCQlpZiAoIXJkZXYtPm1lX2Z3IHx8ICFyZGV2LT5wZnBfZncgfHwgIXJkZXYtPnJsY19mdyB8fCAhcmRldi0+bWNfZncpIHsKKwkJCXIgPSBuaV9pbml0X21pY3JvY29kZShyZGV2KTsKKwkJCWlmIChyKSB7CisJCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSFcbiIpOworCQkJCXJldHVybiByOworCQkJfQorCQl9CisJCXIgPSBidGNfbWNfbG9hZF9taWNyb2NvZGUocmRldik7CiAJCWlmIChyKSB7Ci0JCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlIVxuIik7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb2FkIE1DIGZpcm13YXJlIVxuIik7CiAJCQlyZXR1cm4gcjsKIAkJfQorCX0gZWxzZSB7CisJCWlmICghcmRldi0+bWVfZncgfHwgIXJkZXYtPnBmcF9mdyB8fCAhcmRldi0+cmxjX2Z3KSB7CisJCQlyID0gcjYwMF9pbml0X21pY3JvY29kZShyZGV2KTsKKwkJCWlmIChyKSB7CisJCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSFcbiIpOworCQkJCXJldHVybiByOworCQkJfQorCQl9CiAJfQogCiAJZXZlcmdyZWVuX21jX3Byb2dyYW0ocmRldik7CkBAIC0yNTUxLDYgKzI4OTUsMTEgQEAKIAkJcmRldi0+YXNpYy0+Y29weSA9IE5VTEw7CiAJCWRldl93YXJuKHJkZXYtPmRldiwgImZhaWxlZCBibGl0dGVyICglZCkgZmFsbGluZyBiYWNrIHRvIG1lbWNweVxuIiwgcik7CiAJfQorCS8qIFhYWDogb250YXJpbyBoYXMgcHJvYmxlbXMgYmxpdHRpbmcgdG8gZ2FydCBhdCB0aGUgbW9tZW50ICovCisJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1BBTE0pIHsKKwkJcmRldi0+YXNpYy0+Y29weSA9IE5VTEw7CisJCXJkZXYtPm1jLmFjdGl2ZV92cmFtX3NpemUgPSByZGV2LT5tYy52aXNpYmxlX3ZyYW1fc2l6ZTsKKwl9CiAKIAkvKiBhbGxvY2F0ZSB3YiBidWZmZXIgKi8KIAlyID0gcmFkZW9uX3diX2luaXQocmRldik7CkBAIC0yNjU4LDEyICszMDA3LDE2IEBACiAJdTMyIHJlZzsKIAogCS8qIGZpcnN0IGNoZWNrIENSVENzICovCi0JcmVnID0gUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VUKSB8Ci0JCVJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCkgfAotCQlSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQpIHwKLQkJUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VUKSB8Ci0JCVJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCkgfAotCQlSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApCisJCXJlZyA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCkgfAorCQkJUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VUKTsKKwllbHNlCisJCXJlZyA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCkgfAorCQkJUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VUKSB8CisJCQlSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQpIHwKKwkJCVJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCkgfAorCQkJUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VUKSB8CisJCQlSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQpOwogCWlmIChyZWcgJiBFVkVSR1JFRU5fQ1JUQ19NQVNURVJfRU4pCiAJCXJldHVybiB0cnVlOwogCkBAIC0yODAwLDMgKzMxNTMsNTIgQEAKIAlyZGV2LT5iaW9zID0gTlVMTDsKIAlyYWRlb25fZHVtbXlfcGFnZV9maW5pKHJkZXYpOwogfQorCitzdGF0aWMgdm9pZCBldmVyZ3JlZW5fcGNpZV9nZW4yX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgbGlua193aWR0aF9jbnRsLCBzcGVlZF9jbnRsOworCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkKKwkJcmV0dXJuOworCisJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkpCisJCXJldHVybjsKKworCS8qIHgyIGNhcmRzIGhhdmUgYSBzcGVjaWFsIHNlcXVlbmNlICovCisJaWYgKEFTSUNfSVNfWDIocmRldikpCisJCXJldHVybjsKKworCXNwZWVkX2NudGwgPSBSUkVHMzJfUENJRV9QKFBDSUVfTENfU1BFRURfQ05UTCk7CisJaWYgKChzcGVlZF9jbnRsICYgTENfT1RIRVJfU0lERV9FVkVSX1NFTlRfR0VOMikgfHwKKwkgICAgKHNwZWVkX2NudGwgJiBMQ19PVEhFUl9TSURFX1NVUFBPUlRTX0dFTjIpKSB7CisKKwkJbGlua193aWR0aF9jbnRsID0gUlJFRzMyX1BDSUVfUChQQ0lFX0xDX0xJTktfV0lEVEhfQ05UTCk7CisJCWxpbmtfd2lkdGhfY250bCAmPSB+TENfVVBDT05GSUdVUkVfRElTOworCQlXUkVHMzJfUENJRV9QKFBDSUVfTENfTElOS19XSURUSF9DTlRMLCBsaW5rX3dpZHRoX2NudGwpOworCisJCXNwZWVkX2NudGwgPSBSUkVHMzJfUENJRV9QKFBDSUVfTENfU1BFRURfQ05UTCk7CisJCXNwZWVkX2NudGwgJj0gfkxDX1RBUkdFVF9MSU5LX1NQRUVEX09WRVJSSURFX0VOOworCQlXUkVHMzJfUENJRV9QKFBDSUVfTENfU1BFRURfQ05UTCwgc3BlZWRfY250bCk7CisKKwkJc3BlZWRfY250bCA9IFJSRUczMl9QQ0lFX1AoUENJRV9MQ19TUEVFRF9DTlRMKTsKKwkJc3BlZWRfY250bCB8PSBMQ19DTFJfRkFJTEVEX1NQRF9DSEFOR0VfQ05UOworCQlXUkVHMzJfUENJRV9QKFBDSUVfTENfU1BFRURfQ05UTCwgc3BlZWRfY250bCk7CisKKwkJc3BlZWRfY250bCA9IFJSRUczMl9QQ0lFX1AoUENJRV9MQ19TUEVFRF9DTlRMKTsKKwkJc3BlZWRfY250bCAmPSB+TENfQ0xSX0ZBSUxFRF9TUERfQ0hBTkdFX0NOVDsKKwkJV1JFRzMyX1BDSUVfUChQQ0lFX0xDX1NQRUVEX0NOVEwsIHNwZWVkX2NudGwpOworCisJCXNwZWVkX2NudGwgPSBSUkVHMzJfUENJRV9QKFBDSUVfTENfU1BFRURfQ05UTCk7CisJCXNwZWVkX2NudGwgfD0gTENfR0VOMl9FTl9TVFJBUDsKKwkJV1JFRzMyX1BDSUVfUChQQ0lFX0xDX1NQRUVEX0NOVEwsIHNwZWVkX2NudGwpOworCisJfSBlbHNlIHsKKwkJbGlua193aWR0aF9jbnRsID0gUlJFRzMyX1BDSUVfUChQQ0lFX0xDX0xJTktfV0lEVEhfQ05UTCk7CisJCS8qIFhYWDogb25seSBkaXNhYmxlIGl0IGlmIGdlbjEgYnJpZGdlIHZlbmRvciA9PSAweDExMWQgb3IgMHgxMTA2ICovCisJCWlmICgxKQorCQkJbGlua193aWR0aF9jbnRsIHw9IExDX1VQQ09ORklHVVJFX0RJUzsKKwkJZWxzZQorCQkJbGlua193aWR0aF9jbnRsICY9IH5MQ19VUENPTkZJR1VSRV9ESVM7CisJCVdSRUczMl9QQ0lFX1AoUENJRV9MQ19MSU5LX1dJRFRIX0NOVEwsIGxpbmtfd2lkdGhfY250bCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMKaW5kZXggZTBlNTkwMS4uYjc1OGRjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jCkBAIC0xNDcsNyArMTQ3LDkgQEAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBTUV9URVhfVlRYX1ZBTElEX0JVRkZFUiA8PCAzMCk7CiAKLQlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfQ0VEQVIpCisJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DRURBUikgfHwKKwkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1BBTE0pIHx8CisJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DQUlDT1MpKQogCQljcF9zZXRfc3VyZmFjZV9zeW5jKHJkZXYsCiAJCQkJICAgIFBBQ0tFVDNfVENfQUNUSU9OX0VOQSwgNDgsIGdwdV9hZGRyKTsKIAllbHNlCkBAIC0zMzEsOSArMzMzLDk1IEBACiAJCW51bV9oc19zdGFja19lbnRyaWVzID0gODU7CiAJCW51bV9sc19zdGFja19lbnRyaWVzID0gODU7CiAJCWJyZWFrOworCWNhc2UgQ0hJUF9QQUxNOgorCQludW1fcHNfZ3BycyA9IDkzOworCQludW1fdnNfZ3BycyA9IDQ2OworCQludW1fdGVtcF9ncHJzID0gNDsKKwkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJbnVtX3BzX3RocmVhZHMgPSA5NjsKKwkJbnVtX3ZzX3RocmVhZHMgPSAxNjsKKwkJbnVtX2dzX3RocmVhZHMgPSAxNjsKKwkJbnVtX2VzX3RocmVhZHMgPSAxNjsKKwkJbnVtX2hzX3RocmVhZHMgPSAxNjsKKwkJbnVtX2xzX3RocmVhZHMgPSAxNjsKKwkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX0JBUlRTOgorCQludW1fcHNfZ3BycyA9IDkzOworCQludW1fdnNfZ3BycyA9IDQ2OworCQludW1fdGVtcF9ncHJzID0gNDsKKwkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJbnVtX3BzX3RocmVhZHMgPSAxMjg7CisJCW51bV92c190aHJlYWRzID0gMjA7CisJCW51bV9nc190aHJlYWRzID0gMjA7CisJCW51bV9lc190aHJlYWRzID0gMjA7CisJCW51bV9oc190aHJlYWRzID0gMjA7CisJCW51bV9sc190aHJlYWRzID0gMjA7CisJCW51bV9wc19zdGFja19lbnRyaWVzID0gODU7CisJCW51bV92c19zdGFja19lbnRyaWVzID0gODU7CisJCW51bV9nc19zdGFja19lbnRyaWVzID0gODU7CisJCW51bV9lc19zdGFja19lbnRyaWVzID0gODU7CisJCW51bV9oc19zdGFja19lbnRyaWVzID0gODU7CisJCW51bV9sc19zdGFja19lbnRyaWVzID0gODU7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9UVVJLUzoKKwkJbnVtX3BzX2dwcnMgPSA5MzsKKwkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCW51bV9nc19ncHJzID0gMzE7CisJCW51bV9lc19ncHJzID0gMzE7CisJCW51bV9oc19ncHJzID0gMjM7CisJCW51bV9sc19ncHJzID0gMjM7CisJCW51bV9wc190aHJlYWRzID0gMTI4OworCQludW1fdnNfdGhyZWFkcyA9IDIwOworCQludW1fZ3NfdGhyZWFkcyA9IDIwOworCQludW1fZXNfdGhyZWFkcyA9IDIwOworCQludW1faHNfdGhyZWFkcyA9IDIwOworCQludW1fbHNfdGhyZWFkcyA9IDIwOworCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOworCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOworCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOworCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOworCQlicmVhazsKKwljYXNlIENISVBfQ0FJQ09TOgorCQludW1fcHNfZ3BycyA9IDkzOworCQludW1fdnNfZ3BycyA9IDQ2OworCQludW1fdGVtcF9ncHJzID0gNDsKKwkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJbnVtX3BzX3RocmVhZHMgPSAxMjg7CisJCW51bV92c190aHJlYWRzID0gMTA7CisJCW51bV9nc190aHJlYWRzID0gMTA7CisJCW51bV9lc190aHJlYWRzID0gMTA7CisJCW51bV9oc190aHJlYWRzID0gMTA7CisJCW51bV9sc190aHJlYWRzID0gMTA7CisJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7CisJCW51bV92c19zdGFja19lbnRyaWVzID0gNDI7CisJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7CisJCW51bV9oc19zdGFja19lbnRyaWVzID0gNDI7CisJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCWJyZWFrOwogCX0KIAotCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DRURBUikKKwlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX0NFREFSKSB8fAorCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUEFMTSkgfHwKKwkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX0NBSUNPUykpCiAJCXNxX2NvbmZpZyA9IDA7CiAJZWxzZQogCQlzcV9jb25maWcgPSBWQ19FTkFCTEU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX3JlZy5oCmluZGV4IDIzMzBmM2EzNi4uYzc4MWM5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fcmVnLmgKQEAgLTEwNSw2ICsxMDUsMTEgQEAKICNkZWZpbmUgRVZFUkdSRUVOX0dSUEhfWV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2ODMwCiAjZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1hfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjgzNAogI2RlZmluZSBFVkVSR1JFRU5fR1JQSF9ZX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY4MzgKKyNkZWZpbmUgRVZFUkdSRUVOX0dSUEhfVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2ODQ0CisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9TVVJGQUNFX1VQREFURV9QRU5ESU5HICAgICgxIDw8IDIpCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9VUERBVEVfTE9DSyAgICAgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBFVkVSR1JFRU5fR1JQSF9GTElQX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAweDY4NDgKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1NVUkZBQ0VfVVBEQVRFX0hfUkVUUkFDRV9FTiAoMSA8PCAwKQogCiAvKiBDVVIgYmxvY2tzIGF0IDB4Njk5OCwgMHg3NTk4LCAweDEwMTk4LCAweDEwZDk4LCAweDExOTk4LCAweDEyNTk4ICovCiAjZGVmaW5lIEVWRVJHUkVFTl9DVVJfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Njk5OApAQCAtMTc4LDYgKzE4Myw3IEBACiAjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1JUQ19ESVNQX1JFQURfUkVRVUVTVF9ESVNBQkxFICgxIDw8IDI0KQogI2RlZmluZSBFVkVSR1JFRU5fQ1JUQ19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDZlOGMKICNkZWZpbmUgRVZFUkdSRUVOX0NSVENfU1RBVFVTX1BPU0lUSU9OICAgICAgICAgICAgICAgICAgMHg2ZTkwCisjZGVmaW5lIEVWRVJHUkVFTl9NQVNURVJfVVBEQVRFX01PREUgICAgICAgICAgICAgICAgICAgIDB4NmVmOAogI2RlZmluZSBFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyAgICAgICAgICAgICAgICAgICAgICAweDZlZDQKIAogI2RlZmluZSBFVkVSR1JFRU5fRENfR1BJT19IUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDY0YjAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKaW5kZXggYTczYjUzYy4uMzZkMzJkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKQEAgLTE2NCwxMSArMTY0LDEzIEBACiAjZGVmaW5lCQlTRV9TQ19CVVNZCQkJCQkoMSA8PCAyOSkKICNkZWZpbmUJCVNFX0RCX0JVU1kJCQkJCSgxIDw8IDMwKQogI2RlZmluZQkJU0VfQ0JfQlVTWQkJCQkJKDEgPDwgMzEpCi0KKy8qIGV2ZXJncmVlbiAqLwogI2RlZmluZQlDR19NVUxUX1RIRVJNQUxfU1RBVFVTCQkJCTB4NzQwCiAjZGVmaW5lCQlBU0lDX1QoeCkJCQkgICAgICAgICgoeCkgPDwgMTYpCiAjZGVmaW5lCQlBU0lDX1RfTUFTSwkJCSAgICAgICAgMHg3RkYwMDAwCiAjZGVmaW5lCQlBU0lDX1RfU0hJRlQJCQkgICAgICAgIDE2CisvKiBBUFUgKi8KKyNkZWZpbmUJQ0dfVEhFUk1BTF9TVEFUVVMJCQkgICAgICAgIDB4Njc4CiAKICNkZWZpbmUJSERQX0hPU1RfUEFUSF9DTlRMCQkJCTB4MkMwMAogI2RlZmluZQlIRFBfTk9OU1VSRkFDRV9CQVNFCQkJCTB4MkMwNApAQCAtMTgxLDYgKzE4Myw3IEBACiAjZGVmaW5lIE1DX1NIQVJFRF9DSE1BUAkJCQkJCTB4MjAwNAogI2RlZmluZQkJTk9PRkNIQU5fU0hJRlQJCQkJCTEyCiAjZGVmaW5lCQlOT09GQ0hBTl9NQVNLCQkJCQkweDAwMDAzMDAwCisjZGVmaW5lIE1DX1NIQVJFRF9DSFJFTUFQCQkJCQkweDIwMDgKIAogI2RlZmluZQlNQ19BUkJfUkFNQ0ZHCQkJCQkweDI3NjAKICNkZWZpbmUJCU5PT0ZCQU5LX1NISUZUCQkJCQkwCkBAIC0yMDAsNiArMjAzLDcgQEAKICNkZWZpbmUJTUNfVk1fQUdQX0JPVAkJCQkJMHgyMDJDCiAjZGVmaW5lCU1DX1ZNX0FHUF9CQVNFCQkJCQkweDIwMzAKICNkZWZpbmUJTUNfVk1fRkJfTE9DQVRJT04JCQkJMHgyMDI0CisjZGVmaW5lCU1DX0ZVU19WTV9GQl9PRkZTRVQJCQkJMHgyODk4CiAjZGVmaW5lCU1DX1ZNX01CX0wxX1RMQjBfQ05UTAkJCQkweDIyMzQKICNkZWZpbmUJTUNfVk1fTUJfTDFfVExCMV9DTlRMCQkJCTB4MjIzOAogI2RlZmluZQlNQ19WTV9NQl9MMV9UTEIyX0NOVEwJCQkJMHgyMjNDCkBAIC0zNDksNiArMzUzLDkgQEAKICNkZWZpbmUJCVNZTkNfV0FMS0VSCQkJCQkoMSA8PCAyNSkKICNkZWZpbmUJCVNZTkNfQUxJR05FUgkJCQkJKDEgPDwgMjYpCiAKKyNkZWZpbmUJVENQX0NIQU5fU1RFRVJfTE8JCQkJMHg5NjBjCisjZGVmaW5lCVRDUF9DSEFOX1NURUVSX0hJCQkJCTB4OTYxMAorCiAjZGVmaW5lCVZHVF9DQUNIRV9JTlZBTElEQVRJT04JCQkJMHg4OEM0CiAjZGVmaW5lCQlDQUNIRV9JTlZBTElEQVRJT04oeCkJCQkJKCh4KSA8PCAwKQogI2RlZmluZQkJCVZDX09OTFkJCQkJCQkwCkBAIC01NzQsNiArNTgxLDQ0IEBACiAjICAgICAgIGRlZmluZSBEQ19IUER4X1JYX0lOVF9USU1FUih4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKICMgICAgICAgZGVmaW5lIERDX0hQRHhfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKIAorLyogUENJRSBsaW5rIHN0dWZmICovCisjZGVmaW5lIFBDSUVfTENfVFJBSU5JTkdfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMSAvKiBQQ0lFX1AgKi8KKyNkZWZpbmUgUENJRV9MQ19MSU5LX1dJRFRIX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweGEyIC8qIFBDSUVfUCAqLworIyAgICAgICBkZWZpbmUgTENfTElOS19XSURUSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKyMgICAgICAgZGVmaW5lIExDX0xJTktfV0lEVEhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDcKKyMgICAgICAgZGVmaW5lIExDX0xJTktfV0lEVEhfWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjICAgICAgIGRlZmluZSBMQ19MSU5LX1dJRFRIX1gxICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorIyAgICAgICBkZWZpbmUgTENfTElOS19XSURUSF9YMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIExDX0xJTktfV0lEVEhfWDQgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjICAgICAgIGRlZmluZSBMQ19MSU5LX1dJRFRIX1g4ICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorIyAgICAgICBkZWZpbmUgTENfTElOS19XSURUSF9YMTYgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyMgICAgICAgZGVmaW5lIExDX0xJTktfV0lEVEhfUkRfU0hJRlQgICAgICAgICAgICAgICAgICAgICA0CisjICAgICAgIGRlZmluZSBMQ19MSU5LX1dJRFRIX1JEX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHg3MAorIyAgICAgICBkZWZpbmUgTENfUkVDT05GSUdfQVJDX01JU1NJTkdfRVNDQVBFICAgICAgICAgICAgICgxIDw8IDcpCisjICAgICAgIGRlZmluZSBMQ19SRUNPTkZJR19OT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKKyMgICAgICAgZGVmaW5lIExDX1JFTkVHT1RJQVRJT05fU1VQUE9SVCAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQorIyAgICAgICBkZWZpbmUgTENfUkVORUdPVElBVEVfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQorIyAgICAgICBkZWZpbmUgTENfU0hPUlRfUkVDT05GSUdfRU4gICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQorIyAgICAgICBkZWZpbmUgTENfVVBDT05GSUdVUkVfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQorIyAgICAgICBkZWZpbmUgTENfVVBDT05GSUdVUkVfRElTICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQorI2RlZmluZSBQQ0lFX0xDX1NQRUVEX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YTQgLyogUENJRV9QICovCisjICAgICAgIGRlZmluZSBMQ19HRU4yX0VOX1NUUkFQICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIExDX1RBUkdFVF9MSU5LX1NQRUVEX09WRVJSSURFX0VOICAgICAgICAgICAoMSA8PCAxKQorIyAgICAgICBkZWZpbmUgTENfRk9SQ0VfRU5fSFdfU1BFRURfQ0hBTkdFICAgICAgICAgICAgICAgICgxIDw8IDUpCisjICAgICAgIGRlZmluZSBMQ19GT1JDRV9ESVNfSFdfU1BFRURfQ0hBTkdFICAgICAgICAgICAgICAgKDEgPDwgNikKKyMgICAgICAgZGVmaW5lIExDX1NQRUVEX0NIQU5HRV9BVFRFTVBUU19BTExPV0VEX01BU0sgICAgICAoMHgzIDw8IDgpCisjICAgICAgIGRlZmluZSBMQ19TUEVFRF9DSEFOR0VfQVRURU1QVFNfQUxMT1dFRF9TSElGVCAgICAgMworIyAgICAgICBkZWZpbmUgTENfQ1VSUkVOVF9EQVRBX1JBVEUgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQorIyAgICAgICBkZWZpbmUgTENfVk9MVEFHRV9USU1FUl9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICgweGYgPDwgMTQpCisjICAgICAgIGRlZmluZSBMQ19DTFJfRkFJTEVEX1NQRF9DSEFOR0VfQ05UICAgICAgICAgICAgICAgKDEgPDwgMjEpCisjICAgICAgIGRlZmluZSBMQ19PVEhFUl9TSURFX0VWRVJfU0VOVF9HRU4yICAgICAgICAgICAgICAgKDEgPDwgMjMpCisjICAgICAgIGRlZmluZSBMQ19PVEhFUl9TSURFX1NVUFBPUlRTX0dFTjIgICAgICAgICAgICAgICAgKDEgPDwgMjQpCisjZGVmaW5lIE1NX0NGR1JFR1NfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1NDRjCisjICAgICAgIGRlZmluZSBNTV9XUl9UT19DRkdfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgTElOS19DTlRMMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4IC8qIEYwICovCisjICAgICAgIGRlZmluZSBUQVJHRVRfTElOS19TUEVFRF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4ZiA8PCAwKQorIyAgICAgICBkZWZpbmUgU0VMRUNUQUJMRV9ERUVNUEhBU0lTICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCisKIC8qCiAgKiBQTTQKICAqLwpAQCAtNjAzLDcgKzY0OCw3IEBACiAjZGVmaW5lCVBBQ0tFVDNfTk9QCQkJCQkweDEwCiAjZGVmaW5lCVBBQ0tFVDNfU0VUX0JBU0UJCQkJMHgxMQogI2RlZmluZQlQQUNLRVQzX0NMRUFSX1NUQVRFCQkJCTB4MTIKLSNkZWZpbmUJUEFDS0VUM19JTkRJUkVDVF9CVUZGRVJfU0laRQkJCTB4MTMKKyNkZWZpbmUJUEFDS0VUM19JTkRFWF9CVUZGRVJfU0laRQkJCTB4MTMKICNkZWZpbmUJUEFDS0VUM19ESVNQQVRDSF9ESVJFQ1QJCQkJMHgxNQogI2RlZmluZQlQQUNLRVQzX0RJU1BBVENIX0lORElSRUNUCQkJMHgxNgogI2RlZmluZQlQQUNLRVQzX0lORElSRUNUX0JVRkZFUl9FTkQJCQkweDE3CkBAIC02NDQsMTQgKzY4OSwxNCBAQAogIyAgICAgICAgICAgICAgZGVmaW5lIFBBQ0tFVDNfQ0I4X0RFU1RfQkFTRV9FTkEgICAgKDEgPDwgMTUpCiAjICAgICAgICAgICAgICBkZWZpbmUgUEFDS0VUM19DQjlfREVTVF9CQVNFX0VOQSAgICAoMSA8PCAxNikKICMgICAgICAgICAgICAgIGRlZmluZSBQQUNLRVQzX0NCMTBfREVTVF9CQVNFX0VOQSAgICgxIDw8IDE3KQotIyAgICAgICAgICAgICAgZGVmaW5lIFBBQ0tFVDNfQ0IxMV9ERVNUX0JBU0VfRU5BICAgKDEgPDwgMTcpCisjICAgICAgICAgICAgICBkZWZpbmUgUEFDS0VUM19DQjExX0RFU1RfQkFTRV9FTkEgICAoMSA8PCAxOCkKICMgICAgICAgICAgICAgIGRlZmluZSBQQUNLRVQzX0ZVTExfQ0FDSEVfRU5BICAgICAgICgxIDw8IDIwKQogIyAgICAgICAgICAgICAgZGVmaW5lIFBBQ0tFVDNfVENfQUNUSU9OX0VOQSAgICAgICAgKDEgPDwgMjMpCiAjICAgICAgICAgICAgICBkZWZpbmUgUEFDS0VUM19WQ19BQ1RJT05fRU5BICAgICAgICAoMSA8PCAyNCkKICMgICAgICAgICAgICAgIGRlZmluZSBQQUNLRVQzX0NCX0FDVElPTl9FTkEgICAgICAgICgxIDw8IDI1KQogIyAgICAgICAgICAgICAgZGVmaW5lIFBBQ0tFVDNfREJfQUNUSU9OX0VOQSAgICAgICAgKDEgPDwgMjYpCiAjICAgICAgICAgICAgICBkZWZpbmUgUEFDS0VUM19TSF9BQ1RJT05fRU5BICAgICAgICAoMSA8PCAyNykKLSMgICAgICAgICAgICAgIGRlZmluZSBQQUNLRVQzX1NNWF9BQ1RJT05fRU5BICAgICAgICgxIDw8IDI4KQorIyAgICAgICAgICAgICAgZGVmaW5lIFBBQ0tFVDNfU1hfQUNUSU9OX0VOQSAgICAgICAgKDEgPDwgMjgpCiAjZGVmaW5lCVBBQ0tFVDNfTUVfSU5JVElBTElaRQkJCQkweDQ0CiAjZGVmaW5lCQlQQUNLRVQzX01FX0lOSVRJQUxJWkVfREVWSUNFX0lEKHgpICgoeCkgPDwgMTYpCiAjZGVmaW5lCVBBQ0tFVDNfQ09ORF9XUklURQkJCQkweDQ1CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUwYmVmOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYwpAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBBbGV4IERldWNoZXIKKyAqLworI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJyYWRlb24uaCIKKyNpbmNsdWRlICJyYWRlb25fYXNpYy5oIgorI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKKyNpbmNsdWRlICJuaWQuaCIKKyNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAibmlfcmVnLmgiCisKKyNkZWZpbmUgRVZFUkdSRUVOX1BGUF9VQ09ERV9TSVpFIDExMjAKKyNkZWZpbmUgRVZFUkdSRUVOX1BNNF9VQ09ERV9TSVpFIDEzNzYKKyNkZWZpbmUgRVZFUkdSRUVOX1JMQ19VQ09ERV9TSVpFIDc2OAorI2RlZmluZSBCVENfTUNfVUNPREVfU0laRSA2MDI0CisKKy8qIEZpcm13YXJlIE5hbWVzICovCitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9CQVJUU19wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9CQVJUU19tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL0JBUlRTX21jLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vQlRDX3JsYy5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1RVUktTX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1RVUktTX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vVFVSS1NfbWMuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9DQUlDT1NfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vQ0FJQ09TX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vQ0FJQ09TX21jLmJpbiIpOworCisjZGVmaW5lIEJUQ19JT19NQ19SRUdTX1NJWkUgMjkKKworc3RhdGljIGNvbnN0IHUzMiBiYXJ0c19pb19tY19yZWdzW0JUQ19JT19NQ19SRUdTX1NJWkVdWzJdID0geworCXsweDAwMDAwMDc3LCAweGZmMDEwMTAwfSwKKwl7MHgwMDAwMDA3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwNzksIDB4MDAwMDE0MzR9LAorCXsweDAwMDAwMDdhLCAweGNjMDhlYzA4fSwKKwl7MHgwMDAwMDA3YiwgMHgwMDA0MDAwMH0sCisJezB4MDAwMDAwN2MsIDB4MDAwMDgwYzB9LAorCXsweDAwMDAwMDdkLCAweDA5MDAwMDAwfSwKKwl7MHgwMDAwMDA3ZSwgMHgwMDIxMDQwNH0sCisJezB4MDAwMDAwODEsIDB4MDhhOGU4MDB9LAorCXsweDAwMDAwMDgyLCAweDAwMDMwNDQ0fSwKKwl7MHgwMDAwMDA4MywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwODUsIDB4MDAwMDAwMDF9LAorCXsweDAwMDAwMDg2LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMDA4NywgMHg0ODQ5MDAwMH0sCisJezB4MDAwMDAwODgsIDB4MjAyNDQ2NDd9LAorCXsweDAwMDAwMDg5LCAweDAwMDAwMDA1fSwKKwl7MHgwMDAwMDA4YiwgMHg2NjAzMDAwMH0sCisJezB4MDAwMDAwOGMsIDB4MDAwMDY2MDN9LAorCXsweDAwMDAwMDhkLCAweDAwMDAwMTAwfSwKKwl7MHgwMDAwMDA4ZiwgMHgwMDAwMWMwYX0sCisJezB4MDAwMDAwOTAsIDB4ZmYwMDAwMDF9LAorCXsweDAwMDAwMDk0LCAweDAwMTAxMTAxfSwKKwl7MHgwMDAwMDA5NSwgMHgwMDAwMGZmZn0sCisJezB4MDAwMDAwOTYsIDB4MDAxMTZmZmZ9LAorCXsweDAwMDAwMDk3LCAweDYwMDEwMDAwfSwKKwl7MHgwMDAwMDA5OCwgMHgxMDAxMDAwMH0sCisJezB4MDAwMDAwOTksIDB4MDAwMDYwMDB9LAorCXsweDAwMDAwMDlhLCAweDAwMDAxMDAwfSwKKwl7MHgwMDAwMDA5ZiwgMHgwMDk0NmEwMH0KK307CisKK3N0YXRpYyBjb25zdCB1MzIgdHVya3NfaW9fbWNfcmVnc1tCVENfSU9fTUNfUkVHU19TSVpFXVsyXSA9IHsKKwl7MHgwMDAwMDA3NywgMHhmZjAxMDEwMH0sCisJezB4MDAwMDAwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwMDc5LCAweDAwMDAxNDM0fSwKKwl7MHgwMDAwMDA3YSwgMHhjYzA4ZWMwOH0sCisJezB4MDAwMDAwN2IsIDB4MDAwNDAwMDB9LAorCXsweDAwMDAwMDdjLCAweDAwMDA4MGMwfSwKKwl7MHgwMDAwMDA3ZCwgMHgwOTAwMDAwMH0sCisJezB4MDAwMDAwN2UsIDB4MDAyMTA0MDR9LAorCXsweDAwMDAwMDgxLCAweDA4YThlODAwfSwKKwl7MHgwMDAwMDA4MiwgMHgwMDAzMDQ0NH0sCisJezB4MDAwMDAwODMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwMDg1LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwMDA4NiwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDAwODcsIDB4NDg0OTAwMDB9LAorCXsweDAwMDAwMDg4LCAweDIwMjQ0NjQ3fSwKKwl7MHgwMDAwMDA4OSwgMHgwMDAwMDAwNX0sCisJezB4MDAwMDAwOGIsIDB4NjYwMzAwMDB9LAorCXsweDAwMDAwMDhjLCAweDAwMDA2NjAzfSwKKwl7MHgwMDAwMDA4ZCwgMHgwMDAwMDEwMH0sCisJezB4MDAwMDAwOGYsIDB4MDAwMDFjMGF9LAorCXsweDAwMDAwMDkwLCAweGZmMDAwMDAxfSwKKwl7MHgwMDAwMDA5NCwgMHgwMDEwMTEwMX0sCisJezB4MDAwMDAwOTUsIDB4MDAwMDBmZmZ9LAorCXsweDAwMDAwMDk2LCAweDAwMTE2ZmZmfSwKKwl7MHgwMDAwMDA5NywgMHg2MDAxMDAwMH0sCisJezB4MDAwMDAwOTgsIDB4MTAwMTAwMDB9LAorCXsweDAwMDAwMDk5LCAweDAwMDA2MDAwfSwKKwl7MHgwMDAwMDA5YSwgMHgwMDAwMTAwMH0sCisJezB4MDAwMDAwOWYsIDB4MDA5MzZhMDB9Cit9OworCitzdGF0aWMgY29uc3QgdTMyIGNhaWNvc19pb19tY19yZWdzW0JUQ19JT19NQ19SRUdTX1NJWkVdWzJdID0geworCXsweDAwMDAwMDc3LCAweGZmMDEwMTAwfSwKKwl7MHgwMDAwMDA3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwNzksIDB4MDAwMDE0MzR9LAorCXsweDAwMDAwMDdhLCAweGNjMDhlYzA4fSwKKwl7MHgwMDAwMDA3YiwgMHgwMDA0MDAwMH0sCisJezB4MDAwMDAwN2MsIDB4MDAwMDgwYzB9LAorCXsweDAwMDAwMDdkLCAweDA5MDAwMDAwfSwKKwl7MHgwMDAwMDA3ZSwgMHgwMDIxMDQwNH0sCisJezB4MDAwMDAwODEsIDB4MDhhOGU4MDB9LAorCXsweDAwMDAwMDgyLCAweDAwMDMwNDQ0fSwKKwl7MHgwMDAwMDA4MywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwODUsIDB4MDAwMDAwMDF9LAorCXsweDAwMDAwMDg2LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMDA4NywgMHg0ODQ5MDAwMH0sCisJezB4MDAwMDAwODgsIDB4MjAyNDQ2NDd9LAorCXsweDAwMDAwMDg5LCAweDAwMDAwMDA1fSwKKwl7MHgwMDAwMDA4YiwgMHg2NjAzMDAwMH0sCisJezB4MDAwMDAwOGMsIDB4MDAwMDY2MDN9LAorCXsweDAwMDAwMDhkLCAweDAwMDAwMTAwfSwKKwl7MHgwMDAwMDA4ZiwgMHgwMDAwMWMwYX0sCisJezB4MDAwMDAwOTAsIDB4ZmYwMDAwMDF9LAorCXsweDAwMDAwMDk0LCAweDAwMTAxMTAxfSwKKwl7MHgwMDAwMDA5NSwgMHgwMDAwMGZmZn0sCisJezB4MDAwMDAwOTYsIDB4MDAxMTZmZmZ9LAorCXsweDAwMDAwMDk3LCAweDYwMDEwMDAwfSwKKwl7MHgwMDAwMDA5OCwgMHgxMDAxMDAwMH0sCisJezB4MDAwMDAwOTksIDB4MDAwMDYwMDB9LAorCXsweDAwMDAwMDlhLCAweDAwMDAxMDAwfSwKKwl7MHgwMDAwMDA5ZiwgMHgwMDkxNmEwMH0KK307CisKK2ludCBidGNfbWNfbG9hZF9taWNyb2NvZGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJY29uc3QgX19iZTMyICpmd19kYXRhOworCXUzMiBtZW1fdHlwZSwgcnVubmluZywgYmxhY2tvdXQgPSAwOworCXUzMiAqaW9fbWNfcmVnczsKKwlpbnQgaTsKKworCWlmICghcmRldi0+bWNfZncpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwljYXNlIENISVBfQkFSVFM6CisJCWlvX21jX3JlZ3MgPSAodTMyICopJmJhcnRzX2lvX21jX3JlZ3M7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9UVVJLUzoKKwkJaW9fbWNfcmVncyA9ICh1MzIgKikmdHVya3NfaW9fbWNfcmVnczsKKwkJYnJlYWs7CisJY2FzZSBDSElQX0NBSUNPUzoKKwlkZWZhdWx0OgorCQlpb19tY19yZWdzID0gKHUzMiAqKSZjYWljb3NfaW9fbWNfcmVnczsKKwkJYnJlYWs7CisJfQorCisJbWVtX3R5cGUgPSAoUlJFRzMyKE1DX1NFUV9NSVNDMCkgJiBNQ19TRVFfTUlTQzBfR0REUjVfTUFTSykgPj4gTUNfU0VRX01JU0MwX0dERFI1X1NISUZUOworCXJ1bm5pbmcgPSBSUkVHMzIoTUNfU0VRX1NVUF9DTlRMKSAmIFJVTl9NQVNLOworCisJaWYgKChtZW1fdHlwZSA9PSBNQ19TRVFfTUlTQzBfR0REUjVfVkFMVUUpICYmIChydW5uaW5nID09IDApKSB7CisJCWlmIChydW5uaW5nKSB7CisJCQlibGFja291dCA9IFJSRUczMihNQ19TSEFSRURfQkxBQ0tPVVRfQ05UTCk7CisJCQlXUkVHMzIoTUNfU0hBUkVEX0JMQUNLT1VUX0NOVEwsIDEpOworCQl9CisKKwkJLyogcmVzZXQgdGhlIGVuZ2luZSBhbmQgc2V0IHRvIHdyaXRhYmxlICovCisJCVdSRUczMihNQ19TRVFfU1VQX0NOVEwsIDB4MDAwMDAwMDgpOworCQlXUkVHMzIoTUNfU0VRX1NVUF9DTlRMLCAweDAwMDAwMDEwKTsKKworCQkvKiBsb2FkIG1jIGlvIHJlZ3MgKi8KKwkJZm9yIChpID0gMDsgaSA8IEJUQ19JT19NQ19SRUdTX1NJWkU7IGkrKykgeworCQkJV1JFRzMyKE1DX1NFUV9JT19ERUJVR19JTkRFWCwgaW9fbWNfcmVnc1soaSA8PCAxKV0pOworCQkJV1JFRzMyKE1DX1NFUV9JT19ERUJVR19EQVRBLCBpb19tY19yZWdzWyhpIDw8IDEpICsgMV0pOworCQl9CisJCS8qIGxvYWQgdGhlIE1DIHVjb2RlICovCisJCWZ3X2RhdGEgPSAoY29uc3QgX19iZTMyICopcmRldi0+bWNfZnctPmRhdGE7CisJCWZvciAoaSA9IDA7IGkgPCBCVENfTUNfVUNPREVfU0laRTsgaSsrKQorCQkJV1JFRzMyKE1DX1NFUV9TVVBfUEdNLCBiZTMyX3RvX2NwdXAoZndfZGF0YSsrKSk7CisKKwkJLyogcHV0IHRoZSBlbmdpbmUgYmFjayBpbnRvIHRoZSBhY3RpdmUgc3RhdGUgKi8KKwkJV1JFRzMyKE1DX1NFUV9TVVBfQ05UTCwgMHgwMDAwMDAwOCk7CisJCVdSRUczMihNQ19TRVFfU1VQX0NOVEwsIDB4MDAwMDAwMDQpOworCQlXUkVHMzIoTUNfU0VRX1NVUF9DTlRMLCAweDAwMDAwMDAxKTsKKworCQkvKiB3YWl0IGZvciB0cmFpbmluZyB0byBjb21wbGV0ZSAqLworCQl3aGlsZSAoIShSUkVHMzIoTUNfSU9fUEFEX0NOVExfRDApICYgTUVNX0ZBTExfT1VUX0NNRCkpCisJCQl1ZGVsYXkoMTApOworCisJCWlmIChydW5uaW5nKQorCQkJV1JFRzMyKE1DX1NIQVJFRF9CTEFDS09VVF9DTlRMLCBibGFja291dCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBuaV9pbml0X21pY3JvY29kZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWNvbnN0IGNoYXIgKmNoaXBfbmFtZTsKKwljb25zdCBjaGFyICpybGNfY2hpcF9uYW1lOworCXNpemVfdCBwZnBfcmVxX3NpemUsIG1lX3JlcV9zaXplLCBybGNfcmVxX3NpemUsIG1jX3JlcV9zaXplOworCWNoYXIgZndfbmFtZVszMF07CisJaW50IGVycjsKKworCURSTV9ERUJVRygiXG4iKTsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJyYWRlb25fY3AiLCAwLCBOVUxMLCAwKTsKKwllcnIgPSBJU19FUlIocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInJhZGVvbl9jcDogRmFpbGVkIHRvIHJlZ2lzdGVyIGZpcm13YXJlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwljYXNlIENISVBfQkFSVFM6CisJCWNoaXBfbmFtZSA9ICJCQVJUUyI7CisJCXJsY19jaGlwX25hbWUgPSAiQlRDIjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1RVUktTOgorCQljaGlwX25hbWUgPSAiVFVSS1MiOworCQlybGNfY2hpcF9uYW1lID0gIkJUQyI7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9DQUlDT1M6CisJCWNoaXBfbmFtZSA9ICJDQUlDT1MiOworCQlybGNfY2hpcF9uYW1lID0gIkJUQyI7CisJCWJyZWFrOworCWRlZmF1bHQ6IEJVRygpOworCX0KKworCXBmcF9yZXFfc2l6ZSA9IEVWRVJHUkVFTl9QRlBfVUNPREVfU0laRSAqIDQ7CisJbWVfcmVxX3NpemUgPSBFVkVSR1JFRU5fUE00X1VDT0RFX1NJWkUgKiA0OworCXJsY19yZXFfc2l6ZSA9IEVWRVJHUkVFTl9STENfVUNPREVfU0laRSAqIDQ7CisJbWNfcmVxX3NpemUgPSBCVENfTUNfVUNPREVfU0laRSAqIDQ7CisKKwlEUk1fSU5GTygiTG9hZGluZyAlcyBNaWNyb2NvZGVcbiIsIGNoaXBfbmFtZSk7CisKKwlzbnByaW50Zihmd19uYW1lLCBzaXplb2YoZndfbmFtZSksICJyYWRlb24vJXNfcGZwLmJpbiIsIGNoaXBfbmFtZSk7CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmcmRldi0+cGZwX2Z3LCBmd19uYW1lLCAmcGRldi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwlpZiAocmRldi0+cGZwX2Z3LT5zaXplICE9IHBmcF9yZXFfc2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJuaV9jcDogQm9ndXMgbGVuZ3RoICV6dSBpbiBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCSAgICAgICByZGV2LT5wZnBfZnctPnNpemUsIGZ3X25hbWUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlzbnByaW50Zihmd19uYW1lLCBzaXplb2YoZndfbmFtZSksICJyYWRlb24vJXNfbWUuYmluIiwgY2hpcF9uYW1lKTsKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZyZGV2LT5tZV9mdywgZndfbmFtZSwgJnBkZXYtPmRldik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisJaWYgKHJkZXYtPm1lX2Z3LT5zaXplICE9IG1lX3JlcV9zaXplKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm5pX2NwOiBCb2d1cyBsZW5ndGggJXp1IGluIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJICAgICAgIHJkZXYtPm1lX2Z3LT5zaXplLCBmd19uYW1lKTsKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKKwlzbnByaW50Zihmd19uYW1lLCBzaXplb2YoZndfbmFtZSksICJyYWRlb24vJXNfcmxjLmJpbiIsIHJsY19jaGlwX25hbWUpOworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJnJkZXYtPnJsY19mdywgZndfbmFtZSwgJnBkZXYtPmRldik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisJaWYgKHJkZXYtPnJsY19mdy0+c2l6ZSAhPSBybGNfcmVxX3NpemUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibmlfcmxjOiBCb2d1cyBsZW5ndGggJXp1IGluIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJICAgICAgIHJkZXYtPnJsY19mdy0+c2l6ZSwgZndfbmFtZSk7CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJc25wcmludGYoZndfbmFtZSwgc2l6ZW9mKGZ3X25hbWUpLCAicmFkZW9uLyVzX21jLmJpbiIsIGNoaXBfbmFtZSk7CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmcmRldi0+bWNfZncsIGZ3X25hbWUsICZwZGV2LT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWlmIChyZGV2LT5tY19mdy0+c2l6ZSAhPSBtY19yZXFfc2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJuaV9tYzogQm9ndXMgbGVuZ3RoICV6dSBpbiBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCSAgICAgICByZGV2LT5tY19mdy0+c2l6ZSwgZndfbmFtZSk7CisJCWVyciA9IC1FSU5WQUw7CisJfQorb3V0OgorCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCisJaWYgKGVycikgeworCQlpZiAoZXJyICE9IC1FSU5WQUwpCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAibmlfY3A6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJCSAgICAgICBmd19uYW1lKTsKKwkJcmVsZWFzZV9maXJtd2FyZShyZGV2LT5wZnBfZncpOworCQlyZGV2LT5wZnBfZncgPSBOVUxMOworCQlyZWxlYXNlX2Zpcm13YXJlKHJkZXYtPm1lX2Z3KTsKKwkJcmRldi0+bWVfZncgPSBOVUxMOworCQlyZWxlYXNlX2Zpcm13YXJlKHJkZXYtPnJsY19mdyk7CisJCXJkZXYtPnJsY19mdyA9IE5VTEw7CisJCXJlbGVhc2VfZmlybXdhcmUocmRldi0+bWNfZncpOworCQlyZGV2LT5tY19mdyA9IE5VTEw7CisJfQorCXJldHVybiBlcnI7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmlfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYjdiN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pX3JlZy5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQWxleCBEZXVjaGVyCisgKi8KKyNpZm5kZWYgX19OSV9SRUdfSF9fCisjZGVmaW5lIF9fTklfUkVHX0hfXworCisvKiBub3J0aGVybiBpc2xhbmRzIC0gRENFNSAqLworCisjZGVmaW5lIE5JX0lOUFVUX0dBTU1BX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgMHg2ODQwCisjICAgICAgIGRlZmluZSBOSV9HUlBIX0lOUFVUX0dBTU1BX01PREUoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDApCisjICAgICAgIGRlZmluZSBOSV9JTlBVVF9HQU1NQV9VU0VfTFVUICAgICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgTklfSU5QVVRfR0FNTUFfQllQQVNTICAgICAgICAgICAgICAgICAgIDEKKyMgICAgICAgZGVmaW5lIE5JX0lOUFVUX0dBTU1BX1NSR0JfMjQgICAgICAgICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBOSV9JTlBVVF9HQU1NQV9YVllDQ18yMjIgICAgICAgICAgICAgICAgMworIyAgICAgICBkZWZpbmUgTklfT1ZMX0lOUFVUX0dBTU1BX01PREUoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCA0KQorCisjZGVmaW5lIE5JX1BSRVNDQUxFX0dSUEhfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgMHg2OGI0CisjICAgICAgIGRlZmluZSBOSV9HUlBIX1BSRVNDQUxFX0JZUEFTUyAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKworI2RlZmluZSBOSV9QUkVTQ0FMRV9PVkxfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgIDB4NjhjNAorIyAgICAgICBkZWZpbmUgTklfT1ZMX1BSRVNDQUxFX0JZUEFTUyAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisKKyNkZWZpbmUgTklfSU5QVVRfQ1NDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY4ZDQKKyMgICAgICAgZGVmaW5lIE5JX0lOUFVUX0NTQ19HUlBIX01PREUoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMCkKKyMgICAgICAgZGVmaW5lIE5JX0lOUFVUX0NTQ19CWVBBU1MgICAgICAgICAgICAgICAgICAgICAwCisjICAgICAgIGRlZmluZSBOSV9JTlBVVF9DU0NfUFJPR19DT0VGRiAgICAgICAgICAgICAgICAgMQorIyAgICAgICBkZWZpbmUgTklfSU5QVVRfQ1NDX1BST0dfU0hBUkVEX01BVFJJWEEgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIE5JX0lOUFVUX0NTQ19PVkxfTU9ERSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgNCkKKworI2RlZmluZSBOSV9PVVRQVVRfQ1NDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjhmMAorIyAgICAgICBkZWZpbmUgTklfT1VUUFVUX0NTQ19HUlBIX01PREUoeCkgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAwKQorIyAgICAgICBkZWZpbmUgTklfT1VUUFVUX0NTQ19CWVBBU1MgICAgICAgICAgICAgICAgICAgIDAKKyMgICAgICAgZGVmaW5lIE5JX09VVFBVVF9DU0NfVFZfUkdCICAgICAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBOSV9PVVRQVVRfQ1NDX1lDQkNSXzYwMSAgICAgICAgICAgICAgICAgMgorIyAgICAgICBkZWZpbmUgTklfT1VUUFVUX0NTQ19ZQ0JDUl83MDkgICAgICAgICAgICAgICAgIDMKKyMgICAgICAgZGVmaW5lIE5JX09VVFBVVF9DU0NfUFJPR19DT0VGRiAgICAgICAgICAgICAgICA0CisjICAgICAgIGRlZmluZSBOSV9PVVRQVVRfQ1NDX1BST0dfU0hBUkVEX01BVFJJWEIgICAgICAgNQorIyAgICAgICBkZWZpbmUgTklfT1VUUFVUX0NTQ19PVkxfTU9ERSh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCA0KQorCisjZGVmaW5lIE5JX0RFR0FNTUFfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2OTYwCisjICAgICAgIGRlZmluZSBOSV9HUlBIX0RFR0FNTUFfTU9ERSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDApCisjICAgICAgIGRlZmluZSBOSV9ERUdBTU1BX0JZUEFTUyAgICAgICAgICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgTklfREVHQU1NQV9TUkdCXzI0ICAgICAgICAgICAgICAgICAgICAgIDEKKyMgICAgICAgZGVmaW5lIE5JX0RFR0FNTUFfWFZZQ0NfMjIyICAgICAgICAgICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBOSV9PVkxfREVHQU1NQV9NT0RFKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDQpCisjICAgICAgIGRlZmluZSBOSV9JQ09OX0RFR0FNTUFfTU9ERSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDgpCisjICAgICAgIGRlZmluZSBOSV9DVVJTT1JfREVHQU1NQV9NT0RFKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDEyKQorCisjZGVmaW5lIE5JX0dBTVVUX1JFTUFQX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgMHg2OTY0CisjICAgICAgIGRlZmluZSBOSV9HUlBIX0dBTVVUX1JFTUFQX01PREUoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDApCisjICAgICAgIGRlZmluZSBOSV9HQU1VVF9SRU1BUF9CWVBBU1MgICAgICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgTklfR0FNVVRfUkVNQVBfUFJPR19DT0VGRiAgICAgICAgICAgICAgIDEKKyMgICAgICAgZGVmaW5lIE5JX0dBTVVUX1JFTUFQX1BST0dfU0hBUkVEX01BVFJJWEEgICAgICAyCisjICAgICAgIGRlZmluZSBOSV9HQU1VVF9SRU1BUF9QUk9HX1NIQVJFRF9NQVRSSVhCICAgICAgMworIyAgICAgICBkZWZpbmUgTklfT1ZMX0dBTVVUX1JFTUFQX01PREUoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCA0KQorCisjZGVmaW5lIE5JX1JFR0FNTUFfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2YTgwCisjICAgICAgIGRlZmluZSBOSV9HUlBIX1JFR0FNTUFfTU9ERSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDApCisjICAgICAgIGRlZmluZSBOSV9SRUdBTU1BX0JZUEFTUyAgICAgICAgICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgTklfUkVHQU1NQV9TUkdCXzI0ICAgICAgICAgICAgICAgICAgICAgIDEKKyMgICAgICAgZGVmaW5lIE5JX1JFR0FNTUFfWFZZQ0NfMjIyICAgICAgICAgICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBOSV9SRUdBTU1BX1BST0dfQSAgICAgICAgICAgICAgICAgICAgICAgMworIyAgICAgICBkZWZpbmUgTklfUkVHQU1NQV9QUk9HX0IgICAgICAgICAgICAgICAgICAgICAgIDQKKyMgICAgICAgZGVmaW5lIE5JX09WTF9SRUdBTU1BX01PREUoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgNCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2I0NDUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaWQuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEFsZXggRGV1Y2hlcgorICovCisjaWZuZGVmIE5JX0gKKyNkZWZpbmUgTklfSAorCisjZGVmaW5lIE1DX1NIQVJFRF9CTEFDS09VVF9DTlRMICAgICAgICAgICAJCTB4MjBhYworI2RlZmluZSBNQ19TRVFfU1VQX0NOVEwgICAgICAgICAgIAkJCTB4MjhjOAorI2RlZmluZQkJUlVOX01BU0sgICAgICAJCQkJKDEgPDwgMCkKKyNkZWZpbmUgTUNfU0VRX1NVUF9QR00gICAgICAgICAgIAkJCTB4MjhjYworI2RlZmluZSBNQ19JT19QQURfQ05UTF9EMCAgICAgICAgICAgCQkJMHgyOWQwCisjZGVmaW5lCQlNRU1fRkFMTF9PVVRfQ01EICAgICAgCQkJKDEgPDwgOCkKKyNkZWZpbmUgTUNfU0VRX01JU0MwICAgICAgICAgICAJCQkJMHgyYTAwCisjZGVmaW5lCQlNQ19TRVFfTUlTQzBfR0REUjVfU0hJRlQgICAgICAJCTI4CisjZGVmaW5lCQlNQ19TRVFfTUlTQzBfR0REUjVfTUFTSyAgICAgIAkJMHhmMDAwMDAwMAorI2RlZmluZQkJTUNfU0VRX01JU0MwX0dERFI1X1ZBTFVFICAgICAgCQk1CisjZGVmaW5lIE1DX1NFUV9JT19ERUJVR19JTkRFWCAgICAgICAgICAgCQkweDJhNDQKKyNkZWZpbmUgTUNfU0VRX0lPX0RFQlVHX0RBVEEgICAgICAgICAgIAkJCTB4MmE0OAorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwppbmRleCA4ZTEwYWE5Li5mNjM3NTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwpAQCAtNjgsNiArNjgsNTYgQEAKICAqIHIxMDAscnYxMDAscnMxMDAscnYyMDAscnMyMDAscjIwMCxydjI1MCxyczMwMCxydjI4MAogICovCiAKK3ZvaWQgcjEwMF9wcmVfcGFnZV9mbGlwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0YykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gcmRldi0+bW9kZV9pbmZvLmNydGNzW2NydGNdOworCXUzMiB0bXA7CisKKwkvKiBtYWtlIHN1cmUgZmxpcCBpcyBhdCB2YiByYXRoZXIgdGhhbiBoYiAqLworCXRtcCA9IFJSRUczMihSQURFT05fQ1JUQ19PRkZTRVRfQ05UTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCk7CisJdG1wICY9IH5SQURFT05fQ1JUQ19PRkZTRVRfRkxJUF9DTlRMOworCS8qIG1ha2Ugc3VyZSBwZW5kaW5nIGJpdCBpcyBhc3NlcnRlZCAqLworCXRtcCB8PSBSQURFT05fQ1JUQ19HVUlfVFJJR19PRkZTRVRfTEVGVF9FTjsKKwlXUkVHMzIoUkFERU9OX0NSVENfT0ZGU0VUX0NOVEwgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIHRtcCk7CisKKwkvKiBzZXQgcGFnZWZsaXAgdG8gaGFwcGVuIGFzIGxhdGUgYXMgcG9zc2libGUgaW4gdGhlIHZibGFuayBpbnRlcnZhbC4KKwkgKiBzYW1lIGZpZWxkIGZvciBjcnRjMS8yCisJICovCisJdG1wID0gUlJFRzMyKFJBREVPTl9DUlRDX0dFTl9DTlRMKTsKKwl0bXAgJj0gflJBREVPTl9DUlRDX1ZTVEFUX01PREVfTUFTSzsKKwlXUkVHMzIoUkFERU9OX0NSVENfR0VOX0NOVEwsIHRtcCk7CisKKwkvKiBlbmFibGUgdGhlIHBmbGlwIGludCAqLworCXJhZGVvbl9pcnFfa21zX3BmbGlwX2lycV9nZXQocmRldiwgY3J0Yyk7Cit9CisKK3ZvaWQgcjEwMF9wb3N0X3BhZ2VfZmxpcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpCit7CisJLyogZGlzYWJsZSB0aGUgcGZsaXAgaW50ICovCisJcmFkZW9uX2lycV9rbXNfcGZsaXBfaXJxX3B1dChyZGV2LCBjcnRjKTsKK30KKwordTMyIHIxMDBfcGFnZV9mbGlwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Y19pZCwgdTY0IGNydGNfYmFzZSkKK3sKKwlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gcmRldi0+bW9kZV9pbmZvLmNydGNzW2NydGNfaWRdOworCXUzMiB0bXAgPSAoKHUzMiljcnRjX2Jhc2UpIHwgUkFERU9OX0NSVENfT0ZGU0VUX19PRkZTRVRfTE9DSzsKKworCS8qIExvY2sgdGhlIGdyYXBoaWNzIHVwZGF0ZSBsb2NrICovCisJLyogdXBkYXRlIHRoZSBzY2Fub3V0IGFkZHJlc3NlcyAqLworCVdSRUczMihSQURFT05fQ1JUQ19PRkZTRVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIHRtcCk7CisKKwkvKiBXYWl0IGZvciB1cGRhdGVfcGVuZGluZyB0byBnbyBoaWdoLiAqLworCXdoaWxlICghKFJSRUczMihSQURFT05fQ1JUQ19PRkZTRVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQpICYgUkFERU9OX0NSVENfT0ZGU0VUX19HVUlfVFJJR19PRkZTRVQpKTsKKwlEUk1fREVCVUcoIlVwZGF0ZSBwZW5kaW5nIG5vdyBoaWdoLiBVbmxvY2tpbmcgdnVwZGF0ZV9sb2NrLlxuIik7CisKKwkvKiBVbmxvY2sgdGhlIGxvY2ssIHNvIGRvdWJsZS1idWZmZXJpbmcgY2FuIHRha2UgcGxhY2UgaW5zaWRlIHZibGFuayAqLworCXRtcCAmPSB+UkFERU9OX0NSVENfT0ZGU0VUX19PRkZTRVRfTE9DSzsKKwlXUkVHMzIoUkFERU9OX0NSVENfT0ZGU0VUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCB0bXApOworCisJLyogUmV0dXJuIGN1cnJlbnQgdXBkYXRlX3BlbmRpbmcgc3RhdHVzOiAqLworCXJldHVybiBSUkVHMzIoUkFERU9OX0NSVENfT0ZGU0VUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0KSAmIFJBREVPTl9DUlRDX09GRlNFVF9fR1VJX1RSSUdfT0ZGU0VUOworfQorCiB2b2lkIHIxMDBfcG1fZ2V0X2R5bnBtX3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCBpOwpAQCAtNTI2LDEwICs1NzYsMTIgQEAKIAlpZiAocmRldi0+aXJxLmd1aV9pZGxlKSB7CiAJCXRtcCB8PSBSQURFT05fR1VJX0lETEVfTUFTSzsKIAl9Ci0JaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbMF0pIHsKKwlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFswXSB8fAorCSAgICByZGV2LT5pcnEucGZsaXBbMF0pIHsKIAkJdG1wIHw9IFJBREVPTl9DUlRDX1ZCTEFOS19NQVNLOwogCX0KLQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFsxXSkgeworCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzFdIHx8CisJICAgIHJkZXYtPmlycS5wZmxpcFsxXSkgewogCQl0bXAgfD0gUkFERU9OX0NSVEMyX1ZCTEFOS19NQVNLOwogCX0KIAlpZiAocmRldi0+aXJxLmhwZFswXSkgewpAQCAtNjAwLDE0ICs2NTIsMjIgQEAKIAkJfQogCQkvKiBWZXJ0aWNhbCBibGFuayBpbnRlcnJ1cHRzICovCiAJCWlmIChzdGF0dXMgJiBSQURFT05fQ1JUQ19WQkxBTktfU1RBVCkgewotCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgMCk7Ci0JCQlyZGV2LT5wbS52Ymxhbmtfc3luYyA9IHRydWU7Ci0JCQl3YWtlX3VwKCZyZGV2LT5pcnEudmJsYW5rX3F1ZXVlKTsKKwkJCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzBdKSB7CisJCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgMCk7CisJCQkJcmRldi0+cG0udmJsYW5rX3N5bmMgPSB0cnVlOworCQkJCXdha2VfdXAoJnJkZXYtPmlycS52YmxhbmtfcXVldWUpOworCQkJfQorCQkJaWYgKHJkZXYtPmlycS5wZmxpcFswXSkKKwkJCQlyYWRlb25fY3J0Y19oYW5kbGVfZmxpcChyZGV2LCAwKTsKIAkJfQogCQlpZiAoc3RhdHVzICYgUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUKSB7Ci0JCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAxKTsKLQkJCXJkZXYtPnBtLnZibGFua19zeW5jID0gdHJ1ZTsKLQkJCXdha2VfdXAoJnJkZXYtPmlycS52YmxhbmtfcXVldWUpOworCQkJaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbMV0pIHsKKwkJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAxKTsKKwkJCQlyZGV2LT5wbS52Ymxhbmtfc3luYyA9IHRydWU7CisJCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7CisJCQl9CisJCQlpZiAocmRldi0+aXJxLnBmbGlwWzFdKQorCQkJCXJhZGVvbl9jcnRjX2hhbmRsZV9mbGlwKHJkZXYsIDEpOwogCQl9CiAJCWlmIChzdGF0dXMgJiBSQURFT05fRlBfREVURUNUX1NUQVQpIHsKIAkJCXF1ZXVlX2hvdHBsdWcgPSB0cnVlOwpAQCAtNjIyLDcgKzY4Miw3IEBACiAJLyogcmVzZXQgZ3VpIGlkbGUgYWNrLiAgdGhlIHN0YXR1cyBiaXQgaXMgYnJva2VuICovCiAJcmRldi0+aXJxLmd1aV9pZGxlX2Fja2VkID0gZmFsc2U7CiAJaWYgKHF1ZXVlX2hvdHBsdWcpCi0JCXF1ZXVlX3dvcmsocmRldi0+d3EsICZyZGV2LT5ob3RwbHVnX3dvcmspOworCQlzY2hlZHVsZV93b3JrKCZyZGV2LT5ob3RwbHVnX3dvcmspOwogCWlmIChyZGV2LT5tc2lfZW5hYmxlZCkgewogCQlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCQljYXNlIENISVBfUlM0MDA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBkLmgKaW5kZXggYjEyMWI2Yy4uZWFiOTE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMGQuaApAQCAtNTUxLDcgKzU1MSw3IEBACiAjZGVmaW5lICAgU18wMDAzNjBfQ1VSMl9MT0NLKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQogI2RlZmluZSAgIEdfMDAwMzYwX0NVUjJfTE9DSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDM2MF9DVVIyX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCi0jZGVmaW5lIFJfMDAwM0MyX0dFTk1PX1dUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0MwCisjZGVmaW5lIFJfMDAwM0MyX0dFTk1PX1dUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0MyCiAjZGVmaW5lICAgU18wMDAzQzJfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCiAjZGVmaW5lICAgR18wMDAzQzJfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAzQzJfR0VOTU9fTU9OT19BRERSRVNTX0IgICAgICAgICAgICAgICAgMHhGRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwppbmRleCBjZGUxZDM0Li5mYWU1ZTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwpAQCAtNTU4LDEwICs1NTgsNyBAQAogCiAJLyogRklYTUUgd2FpdCBmb3IgaWRsZSAqLwogCi0JaWYgKHJkZXYtPmZhbWlseSA8IENISVBfUjYwMCkKLQkJbGlua193aWR0aF9jbnRsID0gUlJFRzMyX1BDSUUoUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9DTlRMKTsKLQllbHNlCi0JCWxpbmtfd2lkdGhfY250bCA9IFJSRUczMl9QQ0lFX1AoUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9DTlRMKTsKKwlsaW5rX3dpZHRoX2NudGwgPSBSUkVHMzJfUENJRShSQURFT05fUENJRV9MQ19MSU5LX1dJRFRIX0NOVEwpOwogCiAJc3dpdGNoICgobGlua193aWR0aF9jbnRsICYgUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9SRF9NQVNLKSA+PiBSQURFT05fUENJRV9MQ19MSU5LX1dJRFRIX1JEX1NISUZUKSB7CiAJY2FzZSBSQURFT05fUENJRV9MQ19MSU5LX1dJRFRIX1gwOgpAQCAtNzQ1LDYgKzc0MiwxMSBAQAogCQlicmVhazsKIAljYXNlIDB4NEUwMDoKIAkJLyogUkIzRF9DQ1RMICovCisJCWlmICgoaWR4X3ZhbHVlICYgKDEgPDwgMTApKSAmJiAvKiBDTUFTS19FTkFCTEUgKi8KKwkJICAgIHAtPnJkZXYtPmNtYXNrX2ZpbHAgIT0gcC0+ZmlscCkgeworCQkJRFJNX0VSUk9SKCJJbnZhbGlkIFJCM0RfQ0NUTDogQ2Fubm90IGVuYWJsZSBDTUFTSy5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAkJdHJhY2stPm51bV9jYiA9ICgoaWR4X3ZhbHVlID4+IDUpICYgMHgzKSArIDE7CiAJCWJyZWFrOwogCWNhc2UgMHg0RTM4OgpAQCAtNzg3LDYgKzc4OSwxMyBAQAogCQljYXNlIDE1OgogCQkJdHJhY2stPmNiW2ldLmNwcCA9IDI7CiAJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJaWYgKHAtPnJkZXYtPmZhbWlseSA8IENISVBfUlY1MTUpIHsKKwkJCQlEUk1fRVJST1IoIkludmFsaWQgY29sb3IgYnVmZmVyIGZvcm1hdCAoJWQpIVxuIiwKKwkJCQkJICAoKGlkeF92YWx1ZSA+PiAyMSkgJiAweEYpKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCS8qIFBhc3MgdGhyb3VnaC4gKi8KIAkJY2FzZSA2OgogCQkJdHJhY2stPmNiW2ldLmNwcCA9IDQ7CiAJCQlicmVhazsKQEAgLTExOTksNiArMTIwOCwxMCBAQAogCQlpZiAocC0+cmRldi0+aHlwZXJ6X2ZpbHAgIT0gcC0+ZmlscCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfM0RfQ0xFQVJfQ01BU0s6CisJCWlmIChwLT5yZGV2LT5jbWFza19maWxwICE9IHAtPmZpbHApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX05PUDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMGQuaAppbmRleCAwYzAzNmM2Li4xZjUxOWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwZC5oCkBAIC01NCw2ICs1NCw3IEBACiAjZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfSU1NRF8yCQkweDM1CiAjZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfSU5EWF8yCQkweDM2CiAjZGVmaW5lCQlQQUNLRVQzXzNEX0NMRUFSX0hJWgkJMHgzNworI2RlZmluZQkJUEFDS0VUM18zRF9DTEVBUl9DTUFTSwkJMHgzOAogI2RlZmluZQkJUEFDS0VUM19CSVRCTFRfTVVMVEkJCTB4OUIKIAogI2RlZmluZSBQQUNLRVQwKHJlZywgbikJKENQX1BBQ0tFVDAgfAkJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oCmluZGV4IDZhYzFmNjAuLmZjNDM3MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUwMF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MDBfcmVnLmgKQEAgLTM1NSw2ICszNTUsOCBAQAogI2RlZmluZSBBVklWT19EMUNSVENfRlJBTUVfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjBhNAogI2RlZmluZSBBVklWT19EMUNSVENfU1RFUkVPX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjBjNAogCisjZGVmaW5lIEFWSVZPX0QxTU9ERV9NQVNURVJfVVBEQVRFX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MGU0CisKIC8qIG1hc3RlciBjb250cm9scyAqLwogI2RlZmluZSBBVklWT19EQ19DUlRDX01BU1RFUl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjBmOAogI2RlZmluZSBBVklWT19EQ19DUlRDX1RWX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjBmYwpAQCAtNDA5LDggKzQxMSwxMCBAQAogI2RlZmluZSBBVklWT19EMUdSUEhfWF9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEzNAogI2RlZmluZSBBVklWT19EMUdSUEhfWV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEzOAogI2RlZmluZSBBVklWT19EMUdSUEhfVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjE0NAorIyAgICAgICBkZWZpbmUgQVZJVk9fRDFHUlBIX1NVUkZBQ0VfVVBEQVRFX1BFTkRJTkcgICAgICAgICAgICAgICgxIDw8IDIpCiAjICAgICAgIGRlZmluZSBBVklWT19EMUdSUEhfVVBEQVRFX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCiAjZGVmaW5lIEFWSVZPX0QxR1JQSF9GTElQX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MTQ4CisjICAgICAgIGRlZmluZSBBVklWT19EMUdSUEhfU1VSRkFDRV9VUERBVEVfSF9SRVRSQUNFX0VOICAgICAgICAgKDEgPDwgMCkKIAogI2RlZmluZSBBVklWT19EMUNVUl9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHg2NDAwCiAjICAgICAgIGRlZmluZSBBVklWT19EMUNVUlNPUl9FTiAgICAgICAgICAgICAgICAoMSA8PCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwppbmRleCA5YzkyZGI3Li42YjUwNzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwpAQCAtODMsNiArODMsOSBAQAogTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vQ1lQUkVTU19wZnAuYmluIik7CiBNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9DWVBSRVNTX21lLmJpbiIpOwogTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vQ1lQUkVTU19ybGMuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9QQUxNX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1BBTE1fbWUuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9TVU1PX3JsYy5iaW4iKTsKIAogaW50IHI2MDBfZGVidWdmc19tY19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCkBAIC05MSw2ICs5NCw3IEBACiB2b2lkIHI2MDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByNjAwX2lycV9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3N0YXRpYyB2b2lkIHI2MDBfcGNpZV9nZW4yX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qIGdldCB0ZW1wZXJhdHVyZSBpbiBtaWxsaWRlZ3JlZXMgKi8KIHUzMiBydjZ4eF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTExNjQsNyArMTE2OCw3IEBACiAgKiBOb3RlOiBHVFQgc3RhcnQsIGVuZCwgc2l6ZSBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGNhbGxpbmcgdGhpcwogICogZnVuY3Rpb24gb24gQUdQIHBsYXRmb3JtLgogICovCi12b2lkIHI2MDBfdnJhbV9ndHRfbG9jYXRpb24oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fbWMgKm1jKQorc3RhdGljIHZvaWQgcjYwMF92cmFtX2d0dF9sb2NhdGlvbihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9tYyAqbWMpCiB7CiAJdTY0IHNpemVfYmYsIHNpemVfYWY7CiAKQEAgLTIwMDksNiArMjAxMywxMCBAQAogCQljaGlwX25hbWUgPSAiQ1lQUkVTUyI7CiAJCXJsY19jaGlwX25hbWUgPSAiQ1lQUkVTUyI7CiAJCWJyZWFrOworCWNhc2UgQ0hJUF9QQUxNOgorCQljaGlwX25hbWUgPSAiUEFMTSI7CisJCXJsY19jaGlwX25hbWUgPSAiU1VNTyI7CisJCWJyZWFrOwogCWRlZmF1bHQ6IEJVRygpOwogCX0KIApAQCAtMjM3Miw2ICsyMzgwLDkgQEAKIHsKIAlpbnQgcjsKIAorCS8qIGVuYWJsZSBwY2llIGdlbjIgbGluayAqLworCXI2MDBfcGNpZV9nZW4yX2VuYWJsZShyZGV2KTsKKwogCWlmICghcmRldi0+bWVfZncgfHwgIXJkZXYtPnBmcF9mdyB8fCAhcmRldi0+cmxjX2Z3KSB7CiAJCXIgPSByNjAwX2luaXRfbWljcm9jb2RlKHJkZXYpOwogCQlpZiAocikgewpAQCAtMjg3NCw2ICsyODg1LDggQEAKIAlXUkVHMzIoQ1BfSU5UX0NOVEwsIENOVFhfQlVTWV9JTlRfRU5BQkxFIHwgQ05UWF9FTVBUWV9JTlRfRU5BQkxFKTsKIAlXUkVHMzIoR1JCTV9JTlRfQ05UTCwgMCk7CiAJV1JFRzMyKER4TU9ERV9JTlRfTUFTSywgMCk7CisJV1JFRzMyKEQxR1JQSF9JTlRFUlJVUFRfQ09OVFJPTCwgMCk7CisJV1JFRzMyKEQyR1JQSF9JTlRFUlJVUFRfQ09OVFJPTCwgMCk7CiAJaWYgKEFTSUNfSVNfRENFMyhyZGV2KSkgewogCQlXUkVHMzIoRENFM19EQUNBX0FVVE9ERVRFQ1RfSU5UX0NPTlRST0wsIDApOwogCQlXUkVHMzIoRENFM19EQUNCX0FVVE9ERVRFQ1RfSU5UX0NPTlRST0wsIDApOwpAQCAtMjk5OCw2ICszMDExLDcgQEAKIAl1MzIgaHBkMSwgaHBkMiwgaHBkMywgaHBkNCA9IDAsIGhwZDUgPSAwLCBocGQ2ID0gMDsKIAl1MzIgZ3JibV9pbnRfY250bCA9IDA7CiAJdTMyIGhkbWkxLCBoZG1pMjsKKwl1MzIgZDFncnBoID0gMCwgZDJncnBoID0gMDsKIAogCWlmICghcmRldi0+aXJxLmluc3RhbGxlZCkgewogCQlXQVJOKDEsICJDYW4ndCBlbmFibGUgSVJRL01TSSBiZWNhdXNlIG5vIGhhbmRsZXIgaXMgaW5zdGFsbGVkXG4iKTsKQEAgLTMwMzQsMTEgKzMwNDgsMTMgQEAKIAkJY3BfaW50X2NudGwgfD0gUkJfSU5UX0VOQUJMRTsKIAkJY3BfaW50X2NudGwgfD0gVElNRV9TVEFNUF9JTlRfRU5BQkxFOwogCX0KLQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFswXSkgeworCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzBdIHx8CisJICAgIHJkZXYtPmlycS5wZmxpcFswXSkgewogCQlEUk1fREVCVUcoInI2MDBfaXJxX3NldDogdmJsYW5rIDBcbiIpOwogCQltb2RlX2ludCB8PSBEMU1PREVfVkJMQU5LX0lOVF9NQVNLOwogCX0KLQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFsxXSkgeworCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzFdIHx8CisJICAgIHJkZXYtPmlycS5wZmxpcFsxXSkgewogCQlEUk1fREVCVUcoInI2MDBfaXJxX3NldDogdmJsYW5rIDFcbiIpOwogCQltb2RlX2ludCB8PSBEMk1PREVfVkJMQU5LX0lOVF9NQVNLOwogCX0KQEAgLTMwODEsNiArMzA5Nyw4IEBACiAKIAlXUkVHMzIoQ1BfSU5UX0NOVEwsIGNwX2ludF9jbnRsKTsKIAlXUkVHMzIoRHhNT0RFX0lOVF9NQVNLLCBtb2RlX2ludCk7CisJV1JFRzMyKEQxR1JQSF9JTlRFUlJVUFRfQ09OVFJPTCwgZDFncnBoKTsKKwlXUkVHMzIoRDJHUlBIX0lOVEVSUlVQVF9DT05UUk9MLCBkMmdycGgpOwogCVdSRUczMihHUkJNX0lOVF9DTlRMLCBncmJtX2ludF9jbnRsKTsKIAlXUkVHMzIoUjYwMF9IRE1JX0JMT0NLMSArIFI2MDBfSERNSV9DTlRMLCBoZG1pMSk7CiAJaWYgKEFTSUNfSVNfRENFMyhyZGV2KSkgewpAQCAtMzEwMywzMiArMzEyMSwzNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcjYwMF9pcnFfYWNrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAotCQkJCXUzMiAqZGlzcF9pbnQsCi0JCQkJdTMyICpkaXNwX2ludF9jb250LAotCQkJCXUzMiAqZGlzcF9pbnRfY29udDIpCitzdGF0aWMgaW5saW5lIHZvaWQgcjYwMF9pcnFfYWNrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiB0bXA7CiAKIAlpZiAoQVNJQ19JU19EQ0UzKHJkZXYpKSB7Ci0JCSpkaXNwX2ludCA9IFJSRUczMihEQ0UzX0RJU1BfSU5URVJSVVBUX1NUQVRVUyk7Ci0JCSpkaXNwX2ludF9jb250ID0gUlJFRzMyKERDRTNfRElTUF9JTlRFUlJVUFRfU1RBVFVTX0NPTlRJTlVFKTsKLQkJKmRpc3BfaW50X2NvbnQyID0gUlJFRzMyKERDRTNfRElTUF9JTlRFUlJVUFRfU1RBVFVTX0NPTlRJTlVFMik7CisJCXJkZXYtPmlycS5zdGF0X3JlZ3MucjYwMC5kaXNwX2ludCA9IFJSRUczMihEQ0UzX0RJU1BfSU5URVJSVVBUX1NUQVRVUyk7CisJCXJkZXYtPmlycS5zdGF0X3JlZ3MucjYwMC5kaXNwX2ludF9jb250ID0gUlJFRzMyKERDRTNfRElTUF9JTlRFUlJVUFRfU1RBVFVTX0NPTlRJTlVFKTsKKwkJcmRldi0+aXJxLnN0YXRfcmVncy5yNjAwLmRpc3BfaW50X2NvbnQyID0gUlJFRzMyKERDRTNfRElTUF9JTlRFUlJVUFRfU1RBVFVTX0NPTlRJTlVFMik7CiAJfSBlbHNlIHsKLQkJKmRpc3BfaW50ID0gUlJFRzMyKERJU1BfSU5URVJSVVBUX1NUQVRVUyk7Ci0JCSpkaXNwX2ludF9jb250ID0gUlJFRzMyKERJU1BfSU5URVJSVVBUX1NUQVRVU19DT05USU5VRSk7Ci0JCSpkaXNwX2ludF9jb250MiA9IDA7CisJCXJkZXYtPmlycS5zdGF0X3JlZ3MucjYwMC5kaXNwX2ludCA9IFJSRUczMihESVNQX0lOVEVSUlVQVF9TVEFUVVMpOworCQlyZGV2LT5pcnEuc3RhdF9yZWdzLnI2MDAuZGlzcF9pbnRfY29udCA9IFJSRUczMihESVNQX0lOVEVSUlVQVF9TVEFUVVNfQ09OVElOVUUpOworCQlyZGV2LT5pcnEuc3RhdF9yZWdzLnI2MDAuZGlzcF9pbnRfY29udDIgPSAwOwogCX0KKwlyZGV2LT5pcnEuc3RhdF9yZWdzLnI2MDAuZDFncnBoX2ludCA9IFJSRUczMihEMUdSUEhfSU5URVJSVVBUX1NUQVRVUyk7CisJcmRldi0+aXJxLnN0YXRfcmVncy5yNjAwLmQyZ3JwaF9pbnQgPSBSUkVHMzIoRDJHUlBIX0lOVEVSUlVQVF9TVEFUVVMpOwogCi0JaWYgKCpkaXNwX2ludCAmIExCX0QxX1ZCTEFOS19JTlRFUlJVUFQpCisJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MucjYwMC5kMWdycGhfaW50ICYgRHhHUlBIX1BGTElQX0lOVF9PQ0NVUlJFRCkKKwkJV1JFRzMyKEQxR1JQSF9JTlRFUlJVUFRfU1RBVFVTLCBEeEdSUEhfUEZMSVBfSU5UX0NMRUFSKTsKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5yNjAwLmQyZ3JwaF9pbnQgJiBEeEdSUEhfUEZMSVBfSU5UX09DQ1VSUkVEKQorCQlXUkVHMzIoRDJHUlBIX0lOVEVSUlVQVF9TVEFUVVMsIER4R1JQSF9QRkxJUF9JTlRfQ0xFQVIpOworCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLnI2MDAuZGlzcF9pbnQgJiBMQl9EMV9WQkxBTktfSU5URVJSVVBUKQogCQlXUkVHMzIoRDFNT0RFX1ZCTEFOS19TVEFUVVMsIER4TU9ERV9WQkxBTktfQUNLKTsKLQlpZiAoKmRpc3BfaW50ICYgTEJfRDFfVkxJTkVfSU5URVJSVVBUKQorCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLnI2MDAuZGlzcF9pbnQgJiBMQl9EMV9WTElORV9JTlRFUlJVUFQpCiAJCVdSRUczMihEMU1PREVfVkxJTkVfU1RBVFVTLCBEeE1PREVfVkxJTkVfQUNLKTsKLQlpZiAoKmRpc3BfaW50ICYgTEJfRDJfVkJMQU5LX0lOVEVSUlVQVCkKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5yNjAwLmRpc3BfaW50ICYgTEJfRDJfVkJMQU5LX0lOVEVSUlVQVCkKIAkJV1JFRzMyKEQyTU9ERV9WQkxBTktfU1RBVFVTLCBEeE1PREVfVkJMQU5LX0FDSyk7Ci0JaWYgKCpkaXNwX2ludCAmIExCX0QyX1ZMSU5FX0lOVEVSUlVQVCkKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5yNjAwLmRpc3BfaW50ICYgTEJfRDJfVkxJTkVfSU5URVJSVVBUKQogCQlXUkVHMzIoRDJNT0RFX1ZMSU5FX1NUQVRVUywgRHhNT0RFX1ZMSU5FX0FDSyk7Ci0JaWYgKCpkaXNwX2ludCAmIERDX0hQRDFfSU5URVJSVVBUKSB7CisJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MucjYwMC5kaXNwX2ludCAmIERDX0hQRDFfSU5URVJSVVBUKSB7CiAJCWlmIChBU0lDX0lTX0RDRTMocmRldikpIHsKIAkJCXRtcCA9IFJSRUczMihEQ19IUEQxX0lOVF9DT05UUk9MKTsKIAkJCXRtcCB8PSBEQ19IUER4X0lOVF9BQ0s7CkBAIC0zMTM5LDcgKzMxNjAsNyBAQAogCQkJV1JFRzMyKERDX0hPVF9QTFVHX0RFVEVDVDFfSU5UX0NPTlRST0wsIHRtcCk7CiAJCX0KIAl9Ci0JaWYgKCpkaXNwX2ludCAmIERDX0hQRDJfSU5URVJSVVBUKSB7CisJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MucjYwMC5kaXNwX2ludCAmIERDX0hQRDJfSU5URVJSVVBUKSB7CiAJCWlmIChBU0lDX0lTX0RDRTMocmRldikpIHsKIAkJCXRtcCA9IFJSRUczMihEQ19IUEQyX0lOVF9DT05UUk9MKTsKIAkJCXRtcCB8PSBEQ19IUER4X0lOVF9BQ0s7CkBAIC0zMTUwLDcgKzMxNzEsNyBAQAogCQkJV1JFRzMyKERDX0hPVF9QTFVHX0RFVEVDVDJfSU5UX0NPTlRST0wsIHRtcCk7CiAJCX0KIAl9Ci0JaWYgKCpkaXNwX2ludF9jb250ICYgRENfSFBEM19JTlRFUlJVUFQpIHsKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5yNjAwLmRpc3BfaW50X2NvbnQgJiBEQ19IUEQzX0lOVEVSUlVQVCkgewogCQlpZiAoQVNJQ19JU19EQ0UzKHJkZXYpKSB7CiAJCQl0bXAgPSBSUkVHMzIoRENfSFBEM19JTlRfQ09OVFJPTCk7CiAJCQl0bXAgfD0gRENfSFBEeF9JTlRfQUNLOwpAQCAtMzE2MSwxOCArMzE4MiwxOCBAQAogCQkJV1JFRzMyKERDX0hPVF9QTFVHX0RFVEVDVDNfSU5UX0NPTlRST0wsIHRtcCk7CiAJCX0KIAl9Ci0JaWYgKCpkaXNwX2ludF9jb250ICYgRENfSFBENF9JTlRFUlJVUFQpIHsKKwlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5yNjAwLmRpc3BfaW50X2NvbnQgJiBEQ19IUEQ0X0lOVEVSUlVQVCkgewogCQl0bXAgPSBSUkVHMzIoRENfSFBENF9JTlRfQ09OVFJPTCk7CiAJCXRtcCB8PSBEQ19IUER4X0lOVF9BQ0s7CiAJCVdSRUczMihEQ19IUEQ0X0lOVF9DT05UUk9MLCB0bXApOwogCX0KIAlpZiAoQVNJQ19JU19EQ0UzMihyZGV2KSkgewotCQlpZiAoKmRpc3BfaW50X2NvbnQyICYgRENfSFBENV9JTlRFUlJVUFQpIHsKKwkJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MucjYwMC5kaXNwX2ludF9jb250MiAmIERDX0hQRDVfSU5URVJSVVBUKSB7CiAJCQl0bXAgPSBSUkVHMzIoRENfSFBENV9JTlRfQ09OVFJPTCk7CiAJCQl0bXAgfD0gRENfSFBEeF9JTlRfQUNLOwogCQkJV1JFRzMyKERDX0hQRDVfSU5UX0NPTlRST0wsIHRtcCk7CiAJCX0KLQkJaWYgKCpkaXNwX2ludF9jb250MiAmIERDX0hQRDZfSU5URVJSVVBUKSB7CisJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLnI2MDAuZGlzcF9pbnRfY29udDIgJiBEQ19IUEQ2X0lOVEVSUlVQVCkgewogCQkJdG1wID0gUlJFRzMyKERDX0hQRDVfSU5UX0NPTlRST0wpOwogCQkJdG1wIHw9IERDX0hQRHhfSU5UX0FDSzsKIAkJCVdSRUczMihEQ19IUEQ2X0lOVF9DT05UUk9MLCB0bXApOwpAQCAtMzE5NCwxMiArMzIxNSwxMCBAQAogCiB2b2lkIHI2MDBfaXJxX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdTMyIGRpc3BfaW50LCBkaXNwX2ludF9jb250LCBkaXNwX2ludF9jb250MjsKLQogCXI2MDBfZGlzYWJsZV9pbnRlcnJ1cHRzKHJkZXYpOwogCS8qIFdhaXQgYW5kIGFja25vd2xlZGdlIGlycSAqLwogCW1kZWxheSgxKTsKLQlyNjAwX2lycV9hY2socmRldiwgJmRpc3BfaW50LCAmZGlzcF9pbnRfY29udCwgJmRpc3BfaW50X2NvbnQyKTsKKwlyNjAwX2lycV9hY2socmRldik7CiAJcjYwMF9kaXNhYmxlX2ludGVycnVwdF9zdGF0ZShyZGV2KTsKIH0KIApAQCAtMzI2Miw3ICszMjgxLDcgQEAKIAl1MzIgd3B0ciA9IHI2MDBfZ2V0X2loX3dwdHIocmRldik7CiAJdTMyIHJwdHIgPSByZGV2LT5paC5ycHRyOwogCXUzMiBzcmNfaWQsIHNyY19kYXRhOwotCXUzMiByaW5nX2luZGV4LCBkaXNwX2ludCwgZGlzcF9pbnRfY29udCwgZGlzcF9pbnRfY29udDI7CisJdTMyIHJpbmdfaW5kZXg7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlib29sIHF1ZXVlX2hvdHBsdWcgPSBmYWxzZTsKIApAQCAtMzI4Myw3ICszMzAyLDcgQEAKIAogcmVzdGFydF9paDoKIAkvKiBkaXNwbGF5IGludGVycnVwdHMgKi8KLQlyNjAwX2lycV9hY2socmRldiwgJmRpc3BfaW50LCAmZGlzcF9pbnRfY29udCwgJmRpc3BfaW50X2NvbnQyKTsKKwlyNjAwX2lycV9hY2socmRldik7CiAKIAlyZGV2LT5paC53cHRyID0gd3B0cjsKIAl3aGlsZSAocnB0ciAhPSB3cHRyKSB7CkBAIC0zMjk2LDE3ICszMzE1LDIxIEBACiAJCWNhc2UgMTogLyogRDEgdmJsYW5rL3ZsaW5lICovCiAJCQlzd2l0Y2ggKHNyY19kYXRhKSB7CiAJCQljYXNlIDA6IC8qIEQxIHZibGFuayAqLwotCQkJCWlmIChkaXNwX2ludCAmIExCX0QxX1ZCTEFOS19JTlRFUlJVUFQpIHsKLQkJCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgMCk7Ci0JCQkJCXJkZXYtPnBtLnZibGFua19zeW5jID0gdHJ1ZTsKLQkJCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7Ci0JCQkJCWRpc3BfaW50ICY9IH5MQl9EMV9WQkxBTktfSU5URVJSVVBUOworCQkJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLnI2MDAuZGlzcF9pbnQgJiBMQl9EMV9WQkxBTktfSU5URVJSVVBUKSB7CisJCQkJCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzBdKSB7CisJCQkJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAwKTsKKwkJCQkJCXJkZXYtPnBtLnZibGFua19zeW5jID0gdHJ1ZTsKKwkJCQkJCXdha2VfdXAoJnJkZXYtPmlycS52YmxhbmtfcXVldWUpOworCQkJCQl9CisJCQkJCWlmIChyZGV2LT5pcnEucGZsaXBbMF0pCisJCQkJCQlyYWRlb25fY3J0Y19oYW5kbGVfZmxpcChyZGV2LCAwKTsKKwkJCQkJcmRldi0+aXJxLnN0YXRfcmVncy5yNjAwLmRpc3BfaW50ICY9IH5MQl9EMV9WQkxBTktfSU5URVJSVVBUOwogCQkJCQlEUk1fREVCVUcoIklIOiBEMSB2YmxhbmtcbiIpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWNhc2UgMTogLyogRDEgdmxpbmUgKi8KLQkJCQlpZiAoZGlzcF9pbnQgJiBMQl9EMV9WTElORV9JTlRFUlJVUFQpIHsKLQkJCQkJZGlzcF9pbnQgJj0gfkxCX0QxX1ZMSU5FX0lOVEVSUlVQVDsKKwkJCQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5yNjAwLmRpc3BfaW50ICYgTEJfRDFfVkxJTkVfSU5URVJSVVBUKSB7CisJCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MucjYwMC5kaXNwX2ludCAmPSB+TEJfRDFfVkxJTkVfSU5URVJSVVBUOwogCQkJCQlEUk1fREVCVUcoIklIOiBEMSB2bGluZVxuIik7CiAJCQkJfQogCQkJCWJyZWFrOwpAQCAtMzMxOCwxNyArMzM0MSwyMSBAQAogCQljYXNlIDU6IC8qIEQyIHZibGFuay92bGluZSAqLwogCQkJc3dpdGNoIChzcmNfZGF0YSkgewogCQkJY2FzZSAwOiAvKiBEMiB2YmxhbmsgKi8KLQkJCQlpZiAoZGlzcF9pbnQgJiBMQl9EMl9WQkxBTktfSU5URVJSVVBUKSB7Ci0JCQkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDEpOwotCQkJCQlyZGV2LT5wbS52Ymxhbmtfc3luYyA9IHRydWU7Ci0JCQkJCXdha2VfdXAoJnJkZXYtPmlycS52YmxhbmtfcXVldWUpOwotCQkJCQlkaXNwX2ludCAmPSB+TEJfRDJfVkJMQU5LX0lOVEVSUlVQVDsKKwkJCQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5yNjAwLmRpc3BfaW50ICYgTEJfRDJfVkJMQU5LX0lOVEVSUlVQVCkgeworCQkJCQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFsxXSkgeworCQkJCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgMSk7CisJCQkJCQlyZGV2LT5wbS52Ymxhbmtfc3luYyA9IHRydWU7CisJCQkJCQl3YWtlX3VwKCZyZGV2LT5pcnEudmJsYW5rX3F1ZXVlKTsKKwkJCQkJfQorCQkJCQlpZiAocmRldi0+aXJxLnBmbGlwWzFdKQorCQkJCQkJcmFkZW9uX2NydGNfaGFuZGxlX2ZsaXAocmRldiwgMSk7CisJCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MucjYwMC5kaXNwX2ludCAmPSB+TEJfRDJfVkJMQU5LX0lOVEVSUlVQVDsKIAkJCQkJRFJNX0RFQlVHKCJJSDogRDIgdmJsYW5rXG4iKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6IC8qIEQxIHZsaW5lICovCi0JCQkJaWYgKGRpc3BfaW50ICYgTEJfRDJfVkxJTkVfSU5URVJSVVBUKSB7Ci0JCQkJCWRpc3BfaW50ICY9IH5MQl9EMl9WTElORV9JTlRFUlJVUFQ7CisJCQkJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MucjYwMC5kaXNwX2ludCAmIExCX0QyX1ZMSU5FX0lOVEVSUlVQVCkgeworCQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLnI2MDAuZGlzcF9pbnQgJj0gfkxCX0QyX1ZMSU5FX0lOVEVSUlVQVDsKIAkJCQkJRFJNX0RFQlVHKCJJSDogRDIgdmxpbmVcbiIpOwogCQkJCX0KIAkJCQlicmVhazsKQEAgLTMzNDAsNDMgKzMzNjcsNDMgQEAKIAkJY2FzZSAxOTogLyogSFBEL0RBQyBob3RwbHVnICovCiAJCQlzd2l0Y2ggKHNyY19kYXRhKSB7CiAJCQljYXNlIDA6Ci0JCQkJaWYgKGRpc3BfaW50ICYgRENfSFBEMV9JTlRFUlJVUFQpIHsKLQkJCQkJZGlzcF9pbnQgJj0gfkRDX0hQRDFfSU5URVJSVVBUOworCQkJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLnI2MDAuZGlzcF9pbnQgJiBEQ19IUEQxX0lOVEVSUlVQVCkgeworCQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLnI2MDAuZGlzcF9pbnQgJj0gfkRDX0hQRDFfSU5URVJSVVBUOwogCQkJCQlxdWV1ZV9ob3RwbHVnID0gdHJ1ZTsKIAkJCQkJRFJNX0RFQlVHKCJJSDogSFBEMVxuIik7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSAxOgotCQkJCWlmIChkaXNwX2ludCAmIERDX0hQRDJfSU5URVJSVVBUKSB7Ci0JCQkJCWRpc3BfaW50ICY9IH5EQ19IUEQyX0lOVEVSUlVQVDsKKwkJCQlpZiAocmRldi0+aXJxLnN0YXRfcmVncy5yNjAwLmRpc3BfaW50ICYgRENfSFBEMl9JTlRFUlJVUFQpIHsKKwkJCQkJcmRldi0+aXJxLnN0YXRfcmVncy5yNjAwLmRpc3BfaW50ICY9IH5EQ19IUEQyX0lOVEVSUlVQVDsKIAkJCQkJcXVldWVfaG90cGx1ZyA9IHRydWU7CiAJCQkJCURSTV9ERUJVRygiSUg6IEhQRDJcbiIpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWNhc2UgNDoKLQkJCQlpZiAoZGlzcF9pbnRfY29udCAmIERDX0hQRDNfSU5URVJSVVBUKSB7Ci0JCQkJCWRpc3BfaW50X2NvbnQgJj0gfkRDX0hQRDNfSU5URVJSVVBUOworCQkJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLnI2MDAuZGlzcF9pbnRfY29udCAmIERDX0hQRDNfSU5URVJSVVBUKSB7CisJCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MucjYwMC5kaXNwX2ludF9jb250ICY9IH5EQ19IUEQzX0lOVEVSUlVQVDsKIAkJCQkJcXVldWVfaG90cGx1ZyA9IHRydWU7CiAJCQkJCURSTV9ERUJVRygiSUg6IEhQRDNcbiIpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWNhc2UgNToKLQkJCQlpZiAoZGlzcF9pbnRfY29udCAmIERDX0hQRDRfSU5URVJSVVBUKSB7Ci0JCQkJCWRpc3BfaW50X2NvbnQgJj0gfkRDX0hQRDRfSU5URVJSVVBUOworCQkJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLnI2MDAuZGlzcF9pbnRfY29udCAmIERDX0hQRDRfSU5URVJSVVBUKSB7CisJCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MucjYwMC5kaXNwX2ludF9jb250ICY9IH5EQ19IUEQ0X0lOVEVSUlVQVDsKIAkJCQkJcXVldWVfaG90cGx1ZyA9IHRydWU7CiAJCQkJCURSTV9ERUJVRygiSUg6IEhQRDRcbiIpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWNhc2UgMTA6Ci0JCQkJaWYgKGRpc3BfaW50X2NvbnQyICYgRENfSFBENV9JTlRFUlJVUFQpIHsKLQkJCQkJZGlzcF9pbnRfY29udDIgJj0gfkRDX0hQRDVfSU5URVJSVVBUOworCQkJCWlmIChyZGV2LT5pcnEuc3RhdF9yZWdzLnI2MDAuZGlzcF9pbnRfY29udDIgJiBEQ19IUEQ1X0lOVEVSUlVQVCkgeworCQkJCQlyZGV2LT5pcnEuc3RhdF9yZWdzLnI2MDAuZGlzcF9pbnRfY29udDIgJj0gfkRDX0hQRDVfSU5URVJSVVBUOwogCQkJCQlxdWV1ZV9ob3RwbHVnID0gdHJ1ZTsKIAkJCQkJRFJNX0RFQlVHKCJJSDogSFBENVxuIik7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSAxMjoKLQkJCQlpZiAoZGlzcF9pbnRfY29udDIgJiBEQ19IUEQ2X0lOVEVSUlVQVCkgewotCQkJCQlkaXNwX2ludF9jb250MiAmPSB+RENfSFBENl9JTlRFUlJVUFQ7CisJCQkJaWYgKHJkZXYtPmlycS5zdGF0X3JlZ3MucjYwMC5kaXNwX2ludF9jb250MiAmIERDX0hQRDZfSU5URVJSVVBUKSB7CisJCQkJCXJkZXYtPmlycS5zdGF0X3JlZ3MucjYwMC5kaXNwX2ludF9jb250MiAmPSB+RENfSFBENl9JTlRFUlJVUFQ7CiAJCQkJCXF1ZXVlX2hvdHBsdWcgPSB0cnVlOwogCQkJCQlEUk1fREVCVUcoIklIOiBIUEQ2XG4iKTsKIAkJCQl9CkBAIC0zNDE5LDcgKzM0NDYsNyBAQAogCWlmICh3cHRyICE9IHJkZXYtPmloLndwdHIpCiAJCWdvdG8gcmVzdGFydF9paDsKIAlpZiAocXVldWVfaG90cGx1ZykKLQkJcXVldWVfd29yayhyZGV2LT53cSwgJnJkZXYtPmhvdHBsdWdfd29yayk7CisJCXNjaGVkdWxlX3dvcmsoJnJkZXYtPmhvdHBsdWdfd29yayk7CiAJcmRldi0+aWgucnB0ciA9IHJwdHI7CiAJV1JFRzMyKElIX1JCX1JQVFIsIHJkZXYtPmloLnJwdHIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkZXYtPmloLmxvY2ssIGZsYWdzKTsKQEAgLTM1MDgsMyArMzUzNSwyMTkgQEAKIAl9IGVsc2UKIAkJV1JFRzMyKFJfMDA1NDgwX0hEUF9NRU1fQ09IRVJFTkNZX0ZMVVNIX0NOVEwsIDB4MSk7CiB9CisKK3ZvaWQgcjYwMF9zZXRfcGNpZV9sYW5lcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGxhbmVzKQoreworCXUzMiBsaW5rX3dpZHRoX2NudGwsIG1hc2ssIHRhcmdldF9yZWc7CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKQorCQlyZXR1cm47CisKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSkKKwkJcmV0dXJuOworCisJLyogeDIgY2FyZHMgaGF2ZSBhIHNwZWNpYWwgc2VxdWVuY2UgKi8KKwlpZiAoQVNJQ19JU19YMihyZGV2KSkKKwkJcmV0dXJuOworCisJLyogRklYTUUgd2FpdCBmb3IgaWRsZSAqLworCisJc3dpdGNoIChsYW5lcykgeworCWNhc2UgMDoKKwkJbWFzayA9IFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfWDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbWFzayA9IFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfWDE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbWFzayA9IFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfWDI7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJbWFzayA9IFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfWDQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJbWFzayA9IFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfWDg7CisJCWJyZWFrOworCWNhc2UgMTI6CisJCW1hc2sgPSBSQURFT05fUENJRV9MQ19MSU5LX1dJRFRIX1gxMjsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwlkZWZhdWx0OgorCQltYXNrID0gUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9YMTY7CisJCWJyZWFrOworCX0KKworCWxpbmtfd2lkdGhfY250bCA9IFJSRUczMl9QQ0lFX1AoUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9DTlRMKTsKKworCWlmICgobGlua193aWR0aF9jbnRsICYgUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9SRF9NQVNLKSA9PQorCSAgICAobWFzayA8PCBSQURFT05fUENJRV9MQ19MSU5LX1dJRFRIX1JEX1NISUZUKSkKKwkJcmV0dXJuOworCisJaWYgKGxpbmtfd2lkdGhfY250bCAmIFI2MDBfUENJRV9MQ19VUENPTkZJR1VSRV9ESVMpCisJCXJldHVybjsKKworCWxpbmtfd2lkdGhfY250bCAmPSB+KFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfTUFTSyB8CisJCQkgICAgIFJBREVPTl9QQ0lFX0xDX1JFQ09ORklHX05PVyB8CisJCQkgICAgIFI2MDBfUENJRV9MQ19SRU5FR09USUFURV9FTiB8CisJCQkgICAgIFI2MDBfUENJRV9MQ19SRUNPTkZJR19BUkNfTUlTU0lOR19FU0NBUEUpOworCWxpbmtfd2lkdGhfY250bCB8PSBtYXNrOworCisJV1JFRzMyX1BDSUVfUChSQURFT05fUENJRV9MQ19MSU5LX1dJRFRIX0NOVEwsIGxpbmtfd2lkdGhfY250bCk7CisKKyAgICAgICAgLyogc29tZSBub3J0aGJyaWRnZXMgY2FuIHJlbmVnb3RpYXRlIHRoZSBsaW5rIHJhdGhlciB0aGFuIHJlcXVpcmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICogYSBjb21wbGV0ZSByZS1jb25maWcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICogZS5nLiwgQU1EIDc4MC83OTAgbm9ydGhicmlkZ2VzIChwY2kgaWRzOiAweDU5NTYsIDB4NTk1NywgMHg1OTU4LCBldGMuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICovCisgICAgICAgIGlmIChsaW5rX3dpZHRoX2NudGwgJiBSNjAwX1BDSUVfTENfUkVORUdPVElBVElPTl9TVVBQT1JUKQorCQlsaW5rX3dpZHRoX2NudGwgfD0gUjYwMF9QQ0lFX0xDX1JFTkVHT1RJQVRFX0VOIHwgUjYwMF9QQ0lFX0xDX1VQQ09ORklHVVJFX1NVUFBPUlQ7CisgICAgICAgIGVsc2UKKwkJbGlua193aWR0aF9jbnRsIHw9IFI2MDBfUENJRV9MQ19SRUNPTkZJR19BUkNfTUlTU0lOR19FU0NBUEU7CisKKwlXUkVHMzJfUENJRV9QKFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfQ05UTCwgKGxpbmtfd2lkdGhfY250bCB8CisJCQkJCQkgICAgICAgUkFERU9OX1BDSUVfTENfUkVDT05GSUdfTk9XKSk7CisKKyAgICAgICAgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNzcwKQorCQl0YXJnZXRfcmVnID0gUjcwMF9UQVJHRVRfQU5EX0NVUlJFTlRfUFJPRklMRV9JTkRFWDsKKyAgICAgICAgZWxzZQorCQl0YXJnZXRfcmVnID0gUjYwMF9UQVJHRVRfQU5EX0NVUlJFTlRfUFJPRklMRV9JTkRFWDsKKworICAgICAgICAvKiB3YWl0IGZvciBsYW5lIHNldCB0byBjb21wbGV0ZSAqLworICAgICAgICBsaW5rX3dpZHRoX2NudGwgPSBSUkVHMzIodGFyZ2V0X3JlZyk7CisgICAgICAgIHdoaWxlIChsaW5rX3dpZHRoX2NudGwgPT0gMHhmZmZmZmZmZikKKwkJbGlua193aWR0aF9jbnRsID0gUlJFRzMyKHRhcmdldF9yZWcpOworCit9CisKK2ludCByNjAwX2dldF9wY2llX2xhbmVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiBsaW5rX3dpZHRoX2NudGw7CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKQorCQlyZXR1cm4gMDsKKworCWlmICghKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpKQorCQlyZXR1cm4gMDsKKworCS8qIHgyIGNhcmRzIGhhdmUgYSBzcGVjaWFsIHNlcXVlbmNlICovCisJaWYgKEFTSUNfSVNfWDIocmRldikpCisJCXJldHVybiAwOworCisJLyogRklYTUUgd2FpdCBmb3IgaWRsZSAqLworCisJbGlua193aWR0aF9jbnRsID0gUlJFRzMyX1BDSUVfUChSQURFT05fUENJRV9MQ19MSU5LX1dJRFRIX0NOVEwpOworCisJc3dpdGNoICgobGlua193aWR0aF9jbnRsICYgUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9SRF9NQVNLKSA+PiBSQURFT05fUENJRV9MQ19MSU5LX1dJRFRIX1JEX1NISUZUKSB7CisJY2FzZSBSQURFT05fUENJRV9MQ19MSU5LX1dJRFRIX1gwOgorCQlyZXR1cm4gMDsKKwljYXNlIFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfWDE6CisJCXJldHVybiAxOworCWNhc2UgUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9YMjoKKwkJcmV0dXJuIDI7CisJY2FzZSBSQURFT05fUENJRV9MQ19MSU5LX1dJRFRIX1g0OgorCQlyZXR1cm4gNDsKKwljYXNlIFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfWDg6CisJCXJldHVybiA4OworCWNhc2UgUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9YMTY6CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE2OworCX0KK30KKworc3RhdGljIHZvaWQgcjYwMF9wY2llX2dlbjJfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiBsaW5rX3dpZHRoX2NudGwsIGxhbmVzLCBzcGVlZF9jbnRsLCB0cmFpbmluZ19jbnRsLCB0bXA7CisJdTE2IGxpbmtfY250bDI7CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKQorCQlyZXR1cm47CisKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSkKKwkJcmV0dXJuOworCisJLyogeDIgY2FyZHMgaGF2ZSBhIHNwZWNpYWwgc2VxdWVuY2UgKi8KKwlpZiAoQVNJQ19JU19YMihyZGV2KSkKKwkJcmV0dXJuOworCisJLyogb25seSBSVjZ4eCsgY2hpcHMgYXJlIHN1cHBvcnRlZCAqLworCWlmIChyZGV2LT5mYW1pbHkgPD0gQ0hJUF9SNjAwKQorCQlyZXR1cm47CisKKwkvKiA1NSBubSByNnh4IGFzaWNzICovCisJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjY3MCkgfHwKKwkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjIwKSB8fAorCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MzUpKSB7CisJCS8qIGFkdmVydGlzZSB1cGNvbmZpZyBjYXBhYmlsaXR5ICovCisJCWxpbmtfd2lkdGhfY250bCA9IFJSRUczMl9QQ0lFX1AoUENJRV9MQ19MSU5LX1dJRFRIX0NOVEwpOworCQlsaW5rX3dpZHRoX2NudGwgJj0gfkxDX1VQQ09ORklHVVJFX0RJUzsKKwkJV1JFRzMyX1BDSUVfUChQQ0lFX0xDX0xJTktfV0lEVEhfQ05UTCwgbGlua193aWR0aF9jbnRsKTsKKwkJbGlua193aWR0aF9jbnRsID0gUlJFRzMyX1BDSUVfUChQQ0lFX0xDX0xJTktfV0lEVEhfQ05UTCk7CisJCWlmIChsaW5rX3dpZHRoX2NudGwgJiBMQ19SRU5FR09USUFUSU9OX1NVUFBPUlQpIHsKKwkJCWxhbmVzID0gKGxpbmtfd2lkdGhfY250bCAmIExDX0xJTktfV0lEVEhfUkRfTUFTSykgPj4gTENfTElOS19XSURUSF9SRF9TSElGVDsKKwkJCWxpbmtfd2lkdGhfY250bCAmPSB+KExDX0xJTktfV0lEVEhfTUFTSyB8CisJCQkJCSAgICAgTENfUkVDT05GSUdfQVJDX01JU1NJTkdfRVNDQVBFKTsKKwkJCWxpbmtfd2lkdGhfY250bCB8PSBsYW5lcyB8IExDX1JFQ09ORklHX05PVyB8IExDX1JFTkVHT1RJQVRFX0VOOworCQkJV1JFRzMyX1BDSUVfUChQQ0lFX0xDX0xJTktfV0lEVEhfQ05UTCwgbGlua193aWR0aF9jbnRsKTsKKwkJfSBlbHNlIHsKKwkJCWxpbmtfd2lkdGhfY250bCB8PSBMQ19VUENPTkZJR1VSRV9ESVM7CisJCQlXUkVHMzJfUENJRV9QKFBDSUVfTENfTElOS19XSURUSF9DTlRMLCBsaW5rX3dpZHRoX2NudGwpOworCQl9CisJfQorCisJc3BlZWRfY250bCA9IFJSRUczMl9QQ0lFX1AoUENJRV9MQ19TUEVFRF9DTlRMKTsKKwlpZiAoKHNwZWVkX2NudGwgJiBMQ19PVEhFUl9TSURFX0VWRVJfU0VOVF9HRU4yKSAmJgorCSAgICAoc3BlZWRfY250bCAmIExDX09USEVSX1NJREVfU1VQUE9SVFNfR0VOMikpIHsKKworCQkvKiA1NSBubSByNnh4IGFzaWNzICovCisJCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlY2NzApIHx8CisJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MjApIHx8CisJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MzUpKSB7CisJCQlXUkVHMzIoTU1fQ0ZHUkVHU19DTlRMLCAweDgpOworCQkJbGlua19jbnRsMiA9IFJSRUczMigweDQwODgpOworCQkJV1JFRzMyKE1NX0NGR1JFR1NfQ05UTCwgMCk7CisJCQkvKiBub3Qgc3VwcG9ydGVkIHlldCAqLworCQkJaWYgKGxpbmtfY250bDIgJiBTRUxFQ1RBQkxFX0RFRU1QSEFTSVMpCisJCQkJcmV0dXJuOworCQl9CisKKwkJc3BlZWRfY250bCAmPSB+TENfU1BFRURfQ0hBTkdFX0FUVEVNUFRTX0FMTE9XRURfTUFTSzsKKwkJc3BlZWRfY250bCB8PSAoMHgzIDw8IExDX1NQRUVEX0NIQU5HRV9BVFRFTVBUU19BTExPV0VEX1NISUZUKTsKKwkJc3BlZWRfY250bCAmPSB+TENfVk9MVEFHRV9USU1FUl9TRUxfTUFTSzsKKwkJc3BlZWRfY250bCAmPSB+TENfRk9SQ0VfRElTX0hXX1NQRUVEX0NIQU5HRTsKKwkJc3BlZWRfY250bCB8PSBMQ19GT1JDRV9FTl9IV19TUEVFRF9DSEFOR0U7CisJCVdSRUczMl9QQ0lFX1AoUENJRV9MQ19TUEVFRF9DTlRMLCBzcGVlZF9jbnRsKTsKKworCQl0bXAgPSBSUkVHMzIoMHg1NDFjKTsKKwkJV1JFRzMyKDB4NTQxYywgdG1wIHwgMHg4KTsKKwkJV1JFRzMyKE1NX0NGR1JFR1NfQ05UTCwgTU1fV1JfVE9fQ0ZHX0VOKTsKKwkJbGlua19jbnRsMiA9IFJSRUcxNigweDQwODgpOworCQlsaW5rX2NudGwyICY9IH5UQVJHRVRfTElOS19TUEVFRF9NQVNLOworCQlsaW5rX2NudGwyIHw9IDB4MjsKKwkJV1JFRzE2KDB4NDA4OCwgbGlua19jbnRsMik7CisJCVdSRUczMihNTV9DRkdSRUdTX0NOVEwsIDApOworCisJCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlY2NzApIHx8CisJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MjApIHx8CisJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MzUpKSB7CisJCQl0cmFpbmluZ19jbnRsID0gUlJFRzMyX1BDSUVfUChQQ0lFX0xDX1RSQUlOSU5HX0NOVEwpOworCQkJdHJhaW5pbmdfY250bCAmPSB+TENfUE9JTlRfN19QTFVTX0VOOworCQkJV1JFRzMyX1BDSUVfUChQQ0lFX0xDX1RSQUlOSU5HX0NOVEwsIHRyYWluaW5nX2NudGwpOworCQl9IGVsc2UgeworCQkJc3BlZWRfY250bCA9IFJSRUczMl9QQ0lFX1AoUENJRV9MQ19TUEVFRF9DTlRMKTsKKwkJCXNwZWVkX2NudGwgJj0gfkxDX1RBUkdFVF9MSU5LX1NQRUVEX09WRVJSSURFX0VOOworCQkJV1JFRzMyX1BDSUVfUChQQ0lFX0xDX1NQRUVEX0NOVEwsIHNwZWVkX2NudGwpOworCQl9CisKKwkJc3BlZWRfY250bCA9IFJSRUczMl9QQ0lFX1AoUENJRV9MQ19TUEVFRF9DTlRMKTsKKwkJc3BlZWRfY250bCB8PSBMQ19HRU4yX0VOX1NUUkFQOworCQlXUkVHMzJfUENJRV9QKFBDSUVfTENfU1BFRURfQ05UTCwgc3BlZWRfY250bCk7CisKKwl9IGVsc2UgeworCQlsaW5rX3dpZHRoX2NudGwgPSBSUkVHMzJfUENJRV9QKFBDSUVfTENfTElOS19XSURUSF9DTlRMKTsKKwkJLyogWFhYOiBvbmx5IGRpc2FibGUgaXQgaWYgZ2VuMSBicmlkZ2UgdmVuZG9yID09IDB4MTExZCBvciAweDExMDYgKi8KKwkJaWYgKDEpCisJCQlsaW5rX3dpZHRoX2NudGwgfD0gTENfVVBDT05GSUdVUkVfRElTOworCQllbHNlCisJCQlsaW5rX3dpZHRoX2NudGwgJj0gfkxDX1VQQ09ORklHVVJFX0RJUzsKKwkJV1JFRzMyX1BDSUVfUChQQ0lFX0xDX0xJTktfV0lEVEhfQ05UTCwgbGlua193aWR0aF9jbnRsKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKaW5kZXggYmZmNGRjNC4uYTVkODk4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaApAQCAtNzI4LDYgKzcyOCw1NCBAQAogLyogRENFIDMuMiAqLwogIyAgICAgICBkZWZpbmUgRENfSFBEeF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI4KQogCisjZGVmaW5lIEQxR1JQSF9JTlRFUlJVUFRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MTU4CisjZGVmaW5lIEQyR1JQSF9JTlRFUlJVUFRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2OTU4CisjICAgICAgIGRlZmluZSBEeEdSUEhfUEZMSVBfSU5UX09DQ1VSUkVEICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIER4R1JQSF9QRkxJUF9JTlRfQ0xFQVIgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBEMUdSUEhfSU5URVJSVVBUX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjE1YworI2RlZmluZSBEMkdSUEhfSU5URVJSVVBUX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Njk1YworIyAgICAgICBkZWZpbmUgRHhHUlBIX1BGTElQX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBEeEdSUEhfUEZMSVBfSU5UX1RZUEUgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKKworLyogUENJRSBsaW5rIHN0dWZmICovCisjZGVmaW5lIFBDSUVfTENfVFJBSU5JTkdfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMSAvKiBQQ0lFX1AgKi8KKyMgICAgICAgZGVmaW5lIExDX1BPSU5UXzdfUExVU19FTiAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBQQ0lFX0xDX0xJTktfV0lEVEhfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YTIgLyogUENJRV9QICovCisjICAgICAgIGRlZmluZSBMQ19MSU5LX1dJRFRIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgTENfTElOS19XSURUSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4NworIyAgICAgICBkZWZpbmUgTENfTElOS19XSURUSF9YMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyMgICAgICAgZGVmaW5lIExDX0xJTktfV0lEVEhfWDEgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBMQ19MSU5LX1dJRFRIX1gyICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorIyAgICAgICBkZWZpbmUgTENfTElOS19XSURUSF9YNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyMgICAgICAgZGVmaW5lIExDX0xJTktfV0lEVEhfWDggICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjICAgICAgIGRlZmluZSBMQ19MSU5LX1dJRFRIX1gxNiAgICAgICAgICAgICAgICAgICAgICAgICAgNgorIyAgICAgICBkZWZpbmUgTENfTElOS19XSURUSF9SRF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDQKKyMgICAgICAgZGVmaW5lIExDX0xJTktfV0lEVEhfUkRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDcwCisjICAgICAgIGRlZmluZSBMQ19SRUNPTkZJR19BUkNfTUlTU0lOR19FU0NBUEUgICAgICAgICAgICAgKDEgPDwgNykKKyMgICAgICAgZGVmaW5lIExDX1JFQ09ORklHX05PVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorIyAgICAgICBkZWZpbmUgTENfUkVORUdPVElBVElPTl9TVVBQT1JUICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCisjICAgICAgIGRlZmluZSBMQ19SRU5FR09USUFURV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCisjICAgICAgIGRlZmluZSBMQ19TSE9SVF9SRUNPTkZJR19FTiAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjICAgICAgIGRlZmluZSBMQ19VUENPTkZJR1VSRV9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCisjICAgICAgIGRlZmluZSBMQ19VUENPTkZJR1VSRV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIFBDSUVfTENfU1BFRURfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhNCAvKiBQQ0lFX1AgKi8KKyMgICAgICAgZGVmaW5lIExDX0dFTjJfRU5fU1RSQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgTENfVEFSR0VUX0xJTktfU1BFRURfT1ZFUlJJREVfRU4gICAgICAgICAgICgxIDw8IDEpCisjICAgICAgIGRlZmluZSBMQ19GT1JDRV9FTl9IV19TUEVFRF9DSEFOR0UgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyMgICAgICAgZGVmaW5lIExDX0ZPUkNFX0RJU19IV19TUEVFRF9DSEFOR0UgICAgICAgICAgICAgICAoMSA8PCA2KQorIyAgICAgICBkZWZpbmUgTENfU1BFRURfQ0hBTkdFX0FUVEVNUFRTX0FMTE9XRURfTUFTSyAgICAgICgweDMgPDwgOCkKKyMgICAgICAgZGVmaW5lIExDX1NQRUVEX0NIQU5HRV9BVFRFTVBUU19BTExPV0VEX1NISUZUICAgICAzCisjICAgICAgIGRlZmluZSBMQ19DVVJSRU5UX0RBVEFfUkFURSAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjICAgICAgIGRlZmluZSBMQ19WT0xUQUdFX1RJTUVSX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgKDB4ZiA8PCAxNCkKKyMgICAgICAgZGVmaW5lIExDX0NMUl9GQUlMRURfU1BEX0NIQU5HRV9DTlQgICAgICAgICAgICAgICAoMSA8PCAyMSkKKyMgICAgICAgZGVmaW5lIExDX09USEVSX1NJREVfRVZFUl9TRU5UX0dFTjIgICAgICAgICAgICAgICAoMSA8PCAyMykKKyMgICAgICAgZGVmaW5lIExDX09USEVSX1NJREVfU1VQUE9SVFNfR0VOMiAgICAgICAgICAgICAgICAoMSA8PCAyNCkKKyNkZWZpbmUgTU1fQ0ZHUkVHU19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDU0NGMKKyMgICAgICAgZGVmaW5lIE1NX1dSX1RPX0NGR19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBMSU5LX0NOVEwyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODggLyogRjAgKi8KKyMgICAgICAgZGVmaW5lIFRBUkdFVF9MSU5LX1NQRUVEX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhmIDw8IDApCisjICAgICAgIGRlZmluZSBTRUxFQ1RBQkxFX0RFRU1QSEFTSVMgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKwogLyoKICAqIFBNNAogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAppbmRleCAzYTcwOTU3Li5lOTQ4NjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlIDx0dG0vdHRtX2JvX2RyaXZlci5oPgogI2luY2x1ZGUgPHR0bS90dG1fcGxhY2VtZW50Lmg+CiAjaW5jbHVkZSA8dHRtL3R0bV9tb2R1bGUuaD4KKyNpbmNsdWRlIDx0dG0vdHRtX2V4ZWNidWZfdXRpbC5oPgogCiAjaW5jbHVkZSAicmFkZW9uX2ZhbWlseS5oIgogI2luY2x1ZGUgInJhZGVvbl9tb2RlLmgiCkBAIC0xODAsNiArMTgxLDcgQEAKIGV4dGVybiB1MzIgcnY2eHhfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHUzMiBydjc3MF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdTMyIGV2ZXJncmVlbl9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdTMyIHN1bW9fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKgogICogRmVuY2VzLgpAQCAtMjU5LDEzICsyNjEsMTIgQEAKIH07CiAKIHN0cnVjdCByYWRlb25fYm9fbGlzdCB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyIHR2OwogCXN0cnVjdCByYWRlb25fYm8JKmJvOwogCXVpbnQ2NF90CQlncHVfb2Zmc2V0OwogCXVuc2lnbmVkCQlyZG9tYWluOwogCXVuc2lnbmVkCQl3ZG9tYWluOwogCXUzMgkJCXRpbGluZ19mbGFnczsKLQlib29sCQkJcmVzZXJ2ZWQ7CiB9OwogCiAvKgpAQCAtMzc3LDExICszNzgsNTYgQEAKIC8qCiAgKiBJUlFTLgogICovCisKK3N0cnVjdCByYWRlb25fdW5waW5fd29yayB7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXY7CisJaW50IGNydGNfaWQ7CisJc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2U7CisJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQ7CisJc3RydWN0IHJhZGVvbl9ibyAqb2xkX3JibzsKKwl1NjQgbmV3X2NydGNfYmFzZTsKK307CisKK3N0cnVjdCByNTAwX2lycV9zdGF0X3JlZ3MgeworCXUzMiBkaXNwX2ludDsKK307CisKK3N0cnVjdCByNjAwX2lycV9zdGF0X3JlZ3MgeworCXUzMiBkaXNwX2ludDsKKwl1MzIgZGlzcF9pbnRfY29udDsKKwl1MzIgZGlzcF9pbnRfY29udDI7CisJdTMyIGQxZ3JwaF9pbnQ7CisJdTMyIGQyZ3JwaF9pbnQ7Cit9OworCitzdHJ1Y3QgZXZlcmdyZWVuX2lycV9zdGF0X3JlZ3MgeworCXUzMiBkaXNwX2ludDsKKwl1MzIgZGlzcF9pbnRfY29udDsKKwl1MzIgZGlzcF9pbnRfY29udDI7CisJdTMyIGRpc3BfaW50X2NvbnQzOworCXUzMiBkaXNwX2ludF9jb250NDsKKwl1MzIgZGlzcF9pbnRfY29udDU7CisJdTMyIGQxZ3JwaF9pbnQ7CisJdTMyIGQyZ3JwaF9pbnQ7CisJdTMyIGQzZ3JwaF9pbnQ7CisJdTMyIGQ0Z3JwaF9pbnQ7CisJdTMyIGQ1Z3JwaF9pbnQ7CisJdTMyIGQ2Z3JwaF9pbnQ7Cit9OworCit1bmlvbiByYWRlb25faXJxX3N0YXRfcmVncyB7CisJc3RydWN0IHI1MDBfaXJxX3N0YXRfcmVncyByNTAwOworCXN0cnVjdCByNjAwX2lycV9zdGF0X3JlZ3MgcjYwMDsKKwlzdHJ1Y3QgZXZlcmdyZWVuX2lycV9zdGF0X3JlZ3MgZXZlcmdyZWVuOworfTsKKwogc3RydWN0IHJhZGVvbl9pcnEgewogCWJvb2wJCWluc3RhbGxlZDsKIAlib29sCQlzd19pbnQ7CiAJLyogRklYTUU6IHVzZSBhIGRlZmluZSBtYXggY3J0YyByYXRoZXIgdGhhbiBoYXJkY29kZSBpdCAqLwogCWJvb2wJCWNydGNfdmJsYW5rX2ludFs2XTsKKwlib29sCQlwZmxpcFs2XTsKIAl3YWl0X3F1ZXVlX2hlYWRfdAl2YmxhbmtfcXVldWU7CiAJLyogRklYTUU6IHVzZSBkZWZpbmVzIGZvciBtYXggaHBkL2RhY3MgKi8KIAlib29sICAgICAgICAgICAgaHBkWzZdOwpAQCAtMzkyLDEyICs0MzgsMTcgQEAKIAlib29sCQloZG1pWzJdOwogCXNwaW5sb2NrX3Qgc3dfbG9jazsKIAlpbnQgc3dfcmVmY291bnQ7CisJdW5pb24gcmFkZW9uX2lycV9zdGF0X3JlZ3Mgc3RhdF9yZWdzOworCXNwaW5sb2NrX3QgcGZsaXBfbG9ja1s2XTsKKwlpbnQgcGZsaXBfcmVmY291bnRbNl07CiB9OwogCiBpbnQgcmFkZW9uX2lycV9rbXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9pcnFfa21zX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByYWRlb25faXJxX2ttc19zd19pcnFfZ2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcmFkZW9uX2lycV9rbXNfc3dfaXJxX3B1dChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJhZGVvbl9pcnFfa21zX3BmbGlwX2lycV9nZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKTsKK3ZvaWQgcmFkZW9uX2lycV9rbXNfcGZsaXBfaXJxX3B1dChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpOwogCiAvKgogICogQ1AgJiByaW5nLgpAQCAtNjg3LDYgKzczOCw4IEBACiAJVEhFUk1BTF9UWVBFX1JWNlhYLAogCVRIRVJNQUxfVFlQRV9SVjc3MCwKIAlUSEVSTUFMX1RZUEVfRVZFUkdSRUVOLAorCVRIRVJNQUxfVFlQRV9TVU1PLAorCVRIRVJNQUxfVFlQRV9OSSwKIH07CiAKIHN0cnVjdCByYWRlb25fdm9sdGFnZSB7CkBAIC03NzAsNiArODIzLDkgQEAKIAl1MzIgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3NjbGs7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9tY2xrOwogCXUzMiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmRkYzsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3NjbGs7CisJdTMyICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9tY2xrOworCXUzMiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdmRkYzsKIAlzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICppMmNfYnVzOwogCS8qIHNlbGVjdGVkIHBtIG1ldGhvZCAqLwogCWVudW0gcmFkZW9uX3BtX21ldGhvZCAgICAgcG1fbWV0aG9kOwpAQCAtODgxLDYgKzkzNywxMCBAQAogCXZvaWQgKCpwbV9maW5pc2gpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqcG1faW5pdF9wcm9maWxlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKnBtX2dldF9keW5wbV9zdGF0ZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCS8qIHBhZ2VmbGlwcGluZyAqLworCXZvaWQgKCpwcmVfcGFnZV9mbGlwKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpOworCXUzMiAoKnBhZ2VfZmxpcCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjLCB1NjQgY3J0Y19iYXNlKTsKKwl2b2lkICgqcG9zdF9wYWdlX2ZsaXApKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7CiB9OwogCiAvKgpAQCAtOTc1LDYgKzEwMzUsNyBAQAogCXVuc2lnbmVkIHRpbGluZ19ucGlwZXM7CiAJdW5zaWduZWQgdGlsaW5nX2dyb3VwX3NpemU7CiAJdW5zaWduZWQgdGlsZV9jb25maWc7CisJc3RydWN0IHIxMDBfZ3B1X2xvY2t1cAlsb2NrdXA7CiB9OwogCiB1bmlvbiByYWRlb25fYXNpY19jb25maWcgewpAQCAtMTA5MSwxMSArMTE1MiwxMSBAQAogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqbWVfZnc7CS8qIGFsbCBmYW1pbHkgTUUgZmlybXdhcmUgKi8KIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnBmcF9mdzsJLyogcjYvNzAwIFBGUCBmaXJtd2FyZSAqLwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqcmxjX2Z3OwkvKiByNi83MDAgUkxDIGZpcm13YXJlICovCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICptY19mdzsJLyogTkkgTUMgZmlybXdhcmUgKi8KIAlzdHJ1Y3QgcjYwMF9ibGl0IHI2MDBfYmxpdDsKIAlzdHJ1Y3QgcjcwMF92cmFtX3NjcmF0Y2ggdnJhbV9zY3JhdGNoOwogCWludCBtc2lfZW5hYmxlZDsgLyogbXNpIGVuYWJsZWQgKi8KIAlzdHJ1Y3QgcjYwMF9paCBpaDsgLyogcjYvNzAwIGludGVycnVwdCByaW5nICovCi0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBob3RwbHVnX3dvcms7CiAJaW50IG51bV9jcnRjOyAvKiBudW1iZXIgb2YgY3J0Y3MgKi8KIAlzdHJ1Y3QgbXV0ZXggZGNfaHdfaTJjX211dGV4OyAvKiBkaXNwbGF5IGNvbnRyb2xsZXIgaHcgaTJjIG11dGV4ICovCkBAIC0xMTEwLDEwICsxMTcxLDEwIEBACiAJdWludDhfdAkJCWF1ZGlvX3N0YXR1c19iaXRzOwogCXVpbnQ4X3QJCQlhdWRpb19jYXRlZ29yeV9jb2RlOwogCi0JYm9vbCBwb3dlcmVkX2Rvd247CiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGFjcGlfbmI7Ci0JLyogb25seSBvbmUgdXNlcnNwYWNlIGNhbiB1c2UgSHlwZXJ6IGZlYXR1cmVzIGF0IGEgdGltZSAqLworCS8qIG9ubHkgb25lIHVzZXJzcGFjZSBjYW4gdXNlIEh5cGVyeiBmZWF0dXJlcyBvciBDTUFTSyBhdCBhIHRpbWUgKi8KIAlzdHJ1Y3QgZHJtX2ZpbGUgKmh5cGVyel9maWxwOworCXN0cnVjdCBkcm1fZmlsZSAqY21hc2tfZmlscDsKIAkvKiBpMmMgYnVzZXMgKi8KIAlzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICppMmNfYnVzW1JBREVPTl9NQVhfSTJDX0JVU107CiB9OwpAQCAtMTE4OCw2ICsxMjQ5LDggQEAKICAqLwogI2RlZmluZSBSUkVHOChyZWcpIHJlYWRiKCgodm9pZCBfX2lvbWVtICopcmRldi0+cm1taW8pICsgKHJlZykpCiAjZGVmaW5lIFdSRUc4KHJlZywgdikgd3JpdGViKHYsICgodm9pZCBfX2lvbWVtICopcmRldi0+cm1taW8pICsgKHJlZykpCisjZGVmaW5lIFJSRUcxNihyZWcpIHJlYWR3KCgodm9pZCBfX2lvbWVtICopcmRldi0+cm1taW8pICsgKHJlZykpCisjZGVmaW5lIFdSRUcxNihyZWcsIHYpIHdyaXRldyh2LCAoKHZvaWQgX19pb21lbSAqKXJkZXYtPnJtbWlvKSArIChyZWcpKQogI2RlZmluZSBSUkVHMzIocmVnKSByMTAwX21tX3JyZWcocmRldiwgKHJlZykpCiAjZGVmaW5lIERSRUczMihyZWcpIHByaW50ayhLRVJOX0lORk8gIlJFR0lTVEVSOiAiICNyZWcgIiA6IDB4JTA4WFxuIiwgcjEwMF9tbV9ycmVnKHJkZXYsIChyZWcpKSkKICNkZWZpbmUgV1JFRzMyKHJlZywgdikgcjEwMF9tbV93cmVnKHJkZXYsIChyZWcpLCAodikpCkBAIC0xMjYxLDYgKzEzMjQsMTQgQEAKIAkJKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNDEwKSB8fAkJCVwKIAkJKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNDAwKSB8fAkJCVwKIAkJKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNDgwKSkKKyNkZWZpbmUgQVNJQ19JU19YMihyZGV2KSAoKHJkZXYtPmRkZXYtPnBkZXYtPmRldmljZSA9PSAweDk0NDEpIHx8IFwKKwkJKHJkZXYtPmRkZXYtPnBkZXYtPmRldmljZSA9PSAweDk0NDMpIHx8IFwKKwkJKHJkZXYtPmRkZXYtPnBkZXYtPmRldmljZSA9PSAweDk0NEIpIHx8IFwKKwkJKHJkZXYtPmRkZXYtPnBkZXYtPmRldmljZSA9PSAweDk1MDYpIHx8IFwKKwkJKHJkZXYtPmRkZXYtPnBkZXYtPmRldmljZSA9PSAweDk1MDkpIHx8IFwKKwkJKHJkZXYtPmRkZXYtPnBkZXYtPmRldmljZSA9PSAweDk1MEYpIHx8IFwKKwkJKHJkZXYtPmRkZXYtPnBkZXYtPmRldmljZSA9PSAweDY4OUMpIHx8IFwKKwkJKHJkZXYtPmRkZXYtPnBkZXYtPmRldmljZSA9PSAweDY4OUQpKQogI2RlZmluZSBBU0lDX0lTX0FWSVZPKHJkZXYpICgocmRldi0+ZmFtaWx5ID49IENISVBfUlM2MDApKQogI2RlZmluZSBBU0lDX0lTX0RDRTIocmRldikgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzYwMCkgIHx8CVwKIAkJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlM2OTApICB8fAlcCkBAIC0xMjY5LDYgKzEzNDAsOSBAQAogI2RlZmluZSBBU0lDX0lTX0RDRTMocmRldikgKChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjYyMCkpCiAjZGVmaW5lIEFTSUNfSVNfRENFMzIocmRldikgKChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjczMCkpCiAjZGVmaW5lIEFTSUNfSVNfRENFNChyZGV2KSAoKHJkZXYtPmZhbWlseSA+PSBDSElQX0NFREFSKSkKKyNkZWZpbmUgQVNJQ19JU19EQ0U0MShyZGV2KSAoKHJkZXYtPmZhbWlseSA+PSBDSElQX1BBTE0pICYmIFwKKwkJCSAgICAgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkpCisjZGVmaW5lIEFTSUNfSVNfRENFNShyZGV2KSAoKHJkZXYtPmZhbWlseSA+PSBDSElQX0JBUlRTKSkKIAogLyoKICAqIEJJT1MgaGVscGVycy4KQEAgLTEzNDQsNiArMTQxOCw5IEBACiAjZGVmaW5lIHJhZGVvbl9wbV9maW5pc2gocmRldikgKHJkZXYpLT5hc2ljLT5wbV9maW5pc2goKHJkZXYpKQogI2RlZmluZSByYWRlb25fcG1faW5pdF9wcm9maWxlKHJkZXYpIChyZGV2KS0+YXNpYy0+cG1faW5pdF9wcm9maWxlKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3BtX2dldF9keW5wbV9zdGF0ZShyZGV2KSAocmRldiktPmFzaWMtPnBtX2dldF9keW5wbV9zdGF0ZSgocmRldikpCisjZGVmaW5lIHJhZGVvbl9wcmVfcGFnZV9mbGlwKHJkZXYsIGNydGMpIHJkZXYtPmFzaWMtPnByZV9wYWdlX2ZsaXAoKHJkZXYpLCAoY3J0YykpCisjZGVmaW5lIHJhZGVvbl9wYWdlX2ZsaXAocmRldiwgY3J0YywgYmFzZSkgcmRldi0+YXNpYy0+cGFnZV9mbGlwKChyZGV2KSwgKGNydGMpLCAoYmFzZSkpCisjZGVmaW5lIHJhZGVvbl9wb3N0X3BhZ2VfZmxpcChyZGV2LCBjcnRjKSByZGV2LT5hc2ljLT5wb3N0X3BhZ2VfZmxpcCgocmRldiksIChjcnRjKSkKIAogLyogQ29tbW9uIGZ1bmN0aW9ucyAqLwogLyogQUdQICovCkBAIC0xMzcyLDY3ICsxNDQ5LDcgQEAKIGV4dGVybiBpbnQgcmFkZW9uX3Jlc3VtZV9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IHJhZGVvbl9zdXNwZW5kX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogCi0vKiByMTAwLHJ2MTAwLHJzMTAwLHJ2MjAwLHJzMjAwLHIyMDAscnYyNTAscnMzMDAscnYyODAgKi8KLWV4dGVybiB2b2lkIHIxMDBfZ3B1X2xvY2t1cF91cGRhdGUoc3RydWN0IHIxMDBfZ3B1X2xvY2t1cCAqbG9ja3VwLCBzdHJ1Y3QgcmFkZW9uX2NwICpjcCk7Ci1leHRlcm4gYm9vbCByMTAwX2dwdV9jcF9pc19sb2NrdXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByMTAwX2dwdV9sb2NrdXAgKmxvY2t1cCwgc3RydWN0IHJhZGVvbl9jcCAqY3ApOwotCi0vKiBydjIwMCxydjI1MCxydjI4MCAqLwotZXh0ZXJuIHZvaWQgcjIwMF9zZXRfc2FmZV9yZWdpc3RlcnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0vKiByMzAwLHIzNTAscnYzNTAscnYzNzAscnYzODAgKi8KLWV4dGVybiB2b2lkIHIzMDBfc2V0X3JlZ19zYWZlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiB2b2lkIHIzMDBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gdm9pZCByMzAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIHZvaWQgcjMwMF9jbG9ja19zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiBpbnQgcjMwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiBpbnQgcnYzNzBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIHZvaWQgcnYzNzBfcGNpZV9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIGludCBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQotLyogcjQyMCxyNDIzLHJ2NDEwICovCi1leHRlcm4gdTMyIHI0MjBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTMyIHJlZyk7Ci1leHRlcm4gdm9pZCByNDIwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiByZWcsIHUzMiB2KTsKLWV4dGVybiBpbnQgcjQyMF9kZWJ1Z2ZzX3BpcGVzX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0vKiBydjUxNSAqLwotc3RydWN0IHJ2NTE1X21jX3NhdmUgewotCXUzMiBkMXZnYV9jb250cm9sOwotCXUzMiBkMnZnYV9jb250cm9sOwotCXUzMiB2Z2FfcmVuZGVyX2NvbnRyb2w7Ci0JdTMyIHZnYV9oZHBfY29udHJvbDsKLQl1MzIgZDFjcnRjX2NvbnRyb2w7Ci0JdTMyIGQyY3J0Y19jb250cm9sOwotfTsKLWV4dGVybiB2b2lkIHJ2NTE1X2JhbmR3aWR0aF9hdml2b191cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIHZvaWQgcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiB2b2lkIHJ2NTE1X3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gdm9pZCBydjUxNV9tY19zdG9wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSAqc2F2ZSk7Ci1leHRlcm4gdm9pZCBydjUxNV9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCBydjUxNV9tY19zYXZlICpzYXZlKTsKLWV4dGVybiB2b2lkIHJ2NTE1X2Nsb2NrX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIHZvaWQgcnY1MTVfZGVidWdmcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gaW50IHJ2NTE1X3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0vKiByczQwMCAqLwotZXh0ZXJuIGludCByczQwMF9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIGludCByczQwMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gdm9pZCByczQwMF9nYXJ0X2FkanVzdF9zaXplKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiB2b2lkIHJzNDAwX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gdm9pZCByczQwMF9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0vKiByczYwMCAqLwotZXh0ZXJuIHZvaWQgcnM2MDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiBpbnQgcnM2MDBfaXJxX3NldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gdm9pZCByczYwMF9pcnFfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLS8qIHJzNjkwLCByczc0MCAqLwotZXh0ZXJuIHZvaWQgcnM2OTBfbGluZV9idWZmZXJfYWRqdXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAotCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTEsCi0JCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlMik7Ci0KIC8qIHI2MDAsIHJ2NjEwLCBydjYzMCwgcnY2MjAsIHJ2NjM1LCBydjY3MCwgcnM3ODAsIHJzODgwICovCi1leHRlcm4gdm9pZCByNjAwX3ZyYW1fZ3R0X2xvY2F0aW9uKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX21jICptYyk7CiBleHRlcm4gYm9vbCByNjAwX2NhcmRfcG9zdGVkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHI2MDBfY3Bfc3RvcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHI2MDBfY3Bfc3RhcnQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtMTQ3OCw2ICsxNDk1LDcgQEAKIGV4dGVybiBpbnQgcjYwMF9oZG1pX2J1ZmZlcl9zdGF0dXNfY2hhbmdlZChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwogZXh0ZXJuIHZvaWQgcjYwMF9oZG1pX3VwZGF0ZV9hdWRpb19zZXR0aW5ncyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwogCitleHRlcm4gdm9pZCByNzAwX3ZyYW1fZ3R0X2xvY2F0aW9uKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX21jICptYyk7CiBleHRlcm4gdm9pZCByNzAwX2NwX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjcwMF9jcF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIGV2ZXJncmVlbl9kaXNhYmxlX2ludGVycnVwdF9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC0xNDg1LDYgKzE1MDMsOSBAQAogZXh0ZXJuIGludCBldmVyZ3JlZW5fYmxpdF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIGV2ZXJncmVlbl9ibGl0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCitleHRlcm4gaW50IG5pX2luaXRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgYnRjX21jX2xvYWRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwogLyogcmFkZW9uX2FjcGkuYyAqLyAKICNpZiBkZWZpbmVkKENPTkZJR19BQ1BJKSAKIGV4dGVybiBpbnQgcmFkZW9uX2FjcGlfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCmluZGV4IDY0ZmI4OWUuLjNhMWIxNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKQEAgLTk0LDcgKzk0LDcgQEAKIAkJcmRldi0+bWNfcnJlZyA9ICZyczYwMF9tY19ycmVnOwogCQlyZGV2LT5tY193cmVnID0gJnJzNjAwX21jX3dyZWc7CiAJfQotCWlmICgocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCkgJiYgKHJkZXYtPmZhbWlseSA8PSBDSElQX1JWNzQwKSkgeworCWlmICgocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCkgJiYgKHJkZXYtPmZhbWlseSA8PSBDSElQX0hFTUxPQ0spKSB7CiAJCXJkZXYtPnBjaWVwX3JyZWcgPSAmcjYwMF9wY2llcF9ycmVnOwogCQlyZGV2LT5wY2llcF93cmVnID0gJnI2MDBfcGNpZXBfd3JlZzsKIAl9CkBAIC0xNzEsNiArMTcxLDkgQEAKIAkucG1fZmluaXNoID0gJnIxMDBfcG1fZmluaXNoLAogCS5wbV9pbml0X3Byb2ZpbGUgPSAmcjEwMF9wbV9pbml0X3Byb2ZpbGUsCiAJLnBtX2dldF9keW5wbV9zdGF0ZSA9ICZyMTAwX3BtX2dldF9keW5wbV9zdGF0ZSwKKwkucHJlX3BhZ2VfZmxpcCA9ICZyMTAwX3ByZV9wYWdlX2ZsaXAsCisJLnBhZ2VfZmxpcCA9ICZyMTAwX3BhZ2VfZmxpcCwKKwkucG9zdF9wYWdlX2ZsaXAgPSAmcjEwMF9wb3N0X3BhZ2VfZmxpcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcjIwMF9hc2ljID0gewpAQCAtMjE1LDYgKzIxOCw5IEBACiAJLnBtX2ZpbmlzaCA9ICZyMTAwX3BtX2ZpbmlzaCwKIAkucG1faW5pdF9wcm9maWxlID0gJnIxMDBfcG1faW5pdF9wcm9maWxlLAogCS5wbV9nZXRfZHlucG1fc3RhdGUgPSAmcjEwMF9wbV9nZXRfZHlucG1fc3RhdGUsCisJLnByZV9wYWdlX2ZsaXAgPSAmcjEwMF9wcmVfcGFnZV9mbGlwLAorCS5wYWdlX2ZsaXAgPSAmcjEwMF9wYWdlX2ZsaXAsCisJLnBvc3RfcGFnZV9mbGlwID0gJnIxMDBfcG9zdF9wYWdlX2ZsaXAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHIzMDBfYXNpYyA9IHsKQEAgLTI2MCw2ICsyNjYsOSBAQAogCS5wbV9maW5pc2ggPSAmcjEwMF9wbV9maW5pc2gsCiAJLnBtX2luaXRfcHJvZmlsZSA9ICZyMTAwX3BtX2luaXRfcHJvZmlsZSwKIAkucG1fZ2V0X2R5bnBtX3N0YXRlID0gJnIxMDBfcG1fZ2V0X2R5bnBtX3N0YXRlLAorCS5wcmVfcGFnZV9mbGlwID0gJnIxMDBfcHJlX3BhZ2VfZmxpcCwKKwkucGFnZV9mbGlwID0gJnIxMDBfcGFnZV9mbGlwLAorCS5wb3N0X3BhZ2VfZmxpcCA9ICZyMTAwX3Bvc3RfcGFnZV9mbGlwLAogfTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByMzAwX2FzaWNfcGNpZSA9IHsKQEAgLTMwNCw2ICszMTMsOSBAQAogCS5wbV9maW5pc2ggPSAmcjEwMF9wbV9maW5pc2gsCiAJLnBtX2luaXRfcHJvZmlsZSA9ICZyMTAwX3BtX2luaXRfcHJvZmlsZSwKIAkucG1fZ2V0X2R5bnBtX3N0YXRlID0gJnIxMDBfcG1fZ2V0X2R5bnBtX3N0YXRlLAorCS5wcmVfcGFnZV9mbGlwID0gJnIxMDBfcHJlX3BhZ2VfZmxpcCwKKwkucGFnZV9mbGlwID0gJnIxMDBfcGFnZV9mbGlwLAorCS5wb3N0X3BhZ2VfZmxpcCA9ICZyMTAwX3Bvc3RfcGFnZV9mbGlwLAogfTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByNDIwX2FzaWMgPSB7CkBAIC0zNDksNiArMzYxLDkgQEAKIAkucG1fZmluaXNoID0gJnIxMDBfcG1fZmluaXNoLAogCS5wbV9pbml0X3Byb2ZpbGUgPSAmcjQyMF9wbV9pbml0X3Byb2ZpbGUsCiAJLnBtX2dldF9keW5wbV9zdGF0ZSA9ICZyMTAwX3BtX2dldF9keW5wbV9zdGF0ZSwKKwkucHJlX3BhZ2VfZmxpcCA9ICZyMTAwX3ByZV9wYWdlX2ZsaXAsCisJLnBhZ2VfZmxpcCA9ICZyMTAwX3BhZ2VfZmxpcCwKKwkucG9zdF9wYWdlX2ZsaXAgPSAmcjEwMF9wb3N0X3BhZ2VfZmxpcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcnM0MDBfYXNpYyA9IHsKQEAgLTM5NCw2ICs0MDksOSBAQAogCS5wbV9maW5pc2ggPSAmcjEwMF9wbV9maW5pc2gsCiAJLnBtX2luaXRfcHJvZmlsZSA9ICZyMTAwX3BtX2luaXRfcHJvZmlsZSwKIAkucG1fZ2V0X2R5bnBtX3N0YXRlID0gJnIxMDBfcG1fZ2V0X2R5bnBtX3N0YXRlLAorCS5wcmVfcGFnZV9mbGlwID0gJnIxMDBfcHJlX3BhZ2VfZmxpcCwKKwkucGFnZV9mbGlwID0gJnIxMDBfcGFnZV9mbGlwLAorCS5wb3N0X3BhZ2VfZmxpcCA9ICZyMTAwX3Bvc3RfcGFnZV9mbGlwLAogfTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByczYwMF9hc2ljID0gewpAQCAtNDM5LDYgKzQ1Nyw5IEBACiAJLnBtX2ZpbmlzaCA9ICZyczYwMF9wbV9maW5pc2gsCiAJLnBtX2luaXRfcHJvZmlsZSA9ICZyNDIwX3BtX2luaXRfcHJvZmlsZSwKIAkucG1fZ2V0X2R5bnBtX3N0YXRlID0gJnIxMDBfcG1fZ2V0X2R5bnBtX3N0YXRlLAorCS5wcmVfcGFnZV9mbGlwID0gJnJzNjAwX3ByZV9wYWdlX2ZsaXAsCisJLnBhZ2VfZmxpcCA9ICZyczYwMF9wYWdlX2ZsaXAsCisJLnBvc3RfcGFnZV9mbGlwID0gJnJzNjAwX3Bvc3RfcGFnZV9mbGlwLAogfTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByczY5MF9hc2ljID0gewpAQCAtNDg0LDYgKzUwNSw5IEBACiAJLnBtX2ZpbmlzaCA9ICZyczYwMF9wbV9maW5pc2gsCiAJLnBtX2luaXRfcHJvZmlsZSA9ICZyNDIwX3BtX2luaXRfcHJvZmlsZSwKIAkucG1fZ2V0X2R5bnBtX3N0YXRlID0gJnIxMDBfcG1fZ2V0X2R5bnBtX3N0YXRlLAorCS5wcmVfcGFnZV9mbGlwID0gJnJzNjAwX3ByZV9wYWdlX2ZsaXAsCisJLnBhZ2VfZmxpcCA9ICZyczYwMF9wYWdlX2ZsaXAsCisJLnBvc3RfcGFnZV9mbGlwID0gJnJzNjAwX3Bvc3RfcGFnZV9mbGlwLAogfTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyBydjUxNV9hc2ljID0gewpAQCAtNTI5LDYgKzU1Myw5IEBACiAJLnBtX2ZpbmlzaCA9ICZyczYwMF9wbV9maW5pc2gsCiAJLnBtX2luaXRfcHJvZmlsZSA9ICZyNDIwX3BtX2luaXRfcHJvZmlsZSwKIAkucG1fZ2V0X2R5bnBtX3N0YXRlID0gJnIxMDBfcG1fZ2V0X2R5bnBtX3N0YXRlLAorCS5wcmVfcGFnZV9mbGlwID0gJnJzNjAwX3ByZV9wYWdlX2ZsaXAsCisJLnBhZ2VfZmxpcCA9ICZyczYwMF9wYWdlX2ZsaXAsCisJLnBvc3RfcGFnZV9mbGlwID0gJnJzNjAwX3Bvc3RfcGFnZV9mbGlwLAogfTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByNTIwX2FzaWMgPSB7CkBAIC01NzQsNiArNjAxLDkgQEAKIAkucG1fZmluaXNoID0gJnJzNjAwX3BtX2ZpbmlzaCwKIAkucG1faW5pdF9wcm9maWxlID0gJnI0MjBfcG1faW5pdF9wcm9maWxlLAogCS5wbV9nZXRfZHlucG1fc3RhdGUgPSAmcjEwMF9wbV9nZXRfZHlucG1fc3RhdGUsCisJLnByZV9wYWdlX2ZsaXAgPSAmcnM2MDBfcHJlX3BhZ2VfZmxpcCwKKwkucGFnZV9mbGlwID0gJnJzNjAwX3BhZ2VfZmxpcCwKKwkucG9zdF9wYWdlX2ZsaXAgPSAmcnM2MDBfcG9zdF9wYWdlX2ZsaXAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHI2MDBfYXNpYyA9IHsKQEAgLTYwMSw4ICs2MzEsOCBAQAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCiAJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAotCS5nZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9nZXRfcGNpZV9sYW5lcywKLQkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAorCS5nZXRfcGNpZV9sYW5lcyA9ICZyNjAwX2dldF9wY2llX2xhbmVzLAorCS5zZXRfcGNpZV9sYW5lcyA9ICZyNjAwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gTlVMTCwKIAkuc2V0X3N1cmZhY2VfcmVnID0gcjYwMF9zZXRfc3VyZmFjZV9yZWcsCiAJLmNsZWFyX3N1cmZhY2VfcmVnID0gcjYwMF9jbGVhcl9zdXJmYWNlX3JlZywKQEAgLTYxOCw2ICs2NDgsOSBAQAogCS5wbV9maW5pc2ggPSAmcnM2MDBfcG1fZmluaXNoLAogCS5wbV9pbml0X3Byb2ZpbGUgPSAmcjYwMF9wbV9pbml0X3Byb2ZpbGUsCiAJLnBtX2dldF9keW5wbV9zdGF0ZSA9ICZyNjAwX3BtX2dldF9keW5wbV9zdGF0ZSwKKwkucHJlX3BhZ2VfZmxpcCA9ICZyczYwMF9wcmVfcGFnZV9mbGlwLAorCS5wYWdlX2ZsaXAgPSAmcnM2MDBfcGFnZV9mbGlwLAorCS5wb3N0X3BhZ2VfZmxpcCA9ICZyczYwMF9wb3N0X3BhZ2VfZmxpcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcnM3ODBfYXNpYyA9IHsKQEAgLTY2Miw2ICs2OTUsOSBAQAogCS5wbV9maW5pc2ggPSAmcnM2MDBfcG1fZmluaXNoLAogCS5wbV9pbml0X3Byb2ZpbGUgPSAmcnM3ODBfcG1faW5pdF9wcm9maWxlLAogCS5wbV9nZXRfZHlucG1fc3RhdGUgPSAmcjYwMF9wbV9nZXRfZHlucG1fc3RhdGUsCisJLnByZV9wYWdlX2ZsaXAgPSAmcnM2MDBfcHJlX3BhZ2VfZmxpcCwKKwkucGFnZV9mbGlwID0gJnJzNjAwX3BhZ2VfZmxpcCwKKwkucG9zdF9wYWdlX2ZsaXAgPSAmcnM2MDBfcG9zdF9wYWdlX2ZsaXAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHJ2NzcwX2FzaWMgPSB7CkBAIC02ODksOCArNzI1LDggQEAKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAogCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKLQkuZ2V0X3BjaWVfbGFuZXMgPSAmcnYzNzBfZ2V0X3BjaWVfbGFuZXMsCi0JLnNldF9wY2llX2xhbmVzID0gTlVMTCwKKwkuZ2V0X3BjaWVfbGFuZXMgPSAmcjYwMF9nZXRfcGNpZV9sYW5lcywKKwkuc2V0X3BjaWVfbGFuZXMgPSAmcjYwMF9zZXRfcGNpZV9sYW5lcywKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLAogCS5zZXRfc3VyZmFjZV9yZWcgPSByNjAwX3NldF9zdXJmYWNlX3JlZywKIAkuY2xlYXJfc3VyZmFjZV9yZWcgPSByNjAwX2NsZWFyX3N1cmZhY2VfcmVnLApAQCAtNzA2LDYgKzc0Miw5IEBACiAJLnBtX2ZpbmlzaCA9ICZyczYwMF9wbV9maW5pc2gsCiAJLnBtX2luaXRfcHJvZmlsZSA9ICZyNjAwX3BtX2luaXRfcHJvZmlsZSwKIAkucG1fZ2V0X2R5bnBtX3N0YXRlID0gJnI2MDBfcG1fZ2V0X2R5bnBtX3N0YXRlLAorCS5wcmVfcGFnZV9mbGlwID0gJnJzNjAwX3ByZV9wYWdlX2ZsaXAsCisJLnBhZ2VfZmxpcCA9ICZydjc3MF9wYWdlX2ZsaXAsCisJLnBvc3RfcGFnZV9mbGlwID0gJnJzNjAwX3Bvc3RfcGFnZV9mbGlwLAogfTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyBldmVyZ3JlZW5fYXNpYyA9IHsKQEAgLTczMyw2ICs3NzIsOTUgQEAKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAogCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKKwkuZ2V0X3BjaWVfbGFuZXMgPSAmcjYwMF9nZXRfcGNpZV9sYW5lcywKKwkuc2V0X3BjaWVfbGFuZXMgPSAmcjYwMF9zZXRfcGNpZV9sYW5lcywKKwkuc2V0X2Nsb2NrX2dhdGluZyA9IE5VTEwsCisJLnNldF9zdXJmYWNlX3JlZyA9IHI2MDBfc2V0X3N1cmZhY2VfcmVnLAorCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHI2MDBfY2xlYXJfc3VyZmFjZV9yZWcsCisJLmJhbmR3aWR0aF91cGRhdGUgPSAmZXZlcmdyZWVuX2JhbmR3aWR0aF91cGRhdGUsCisJLmhwZF9pbml0ID0gJmV2ZXJncmVlbl9ocGRfaW5pdCwKKwkuaHBkX2ZpbmkgPSAmZXZlcmdyZWVuX2hwZF9maW5pLAorCS5ocGRfc2Vuc2UgPSAmZXZlcmdyZWVuX2hwZF9zZW5zZSwKKwkuaHBkX3NldF9wb2xhcml0eSA9ICZldmVyZ3JlZW5faHBkX3NldF9wb2xhcml0eSwKKwkuZ3VpX2lkbGUgPSAmcjYwMF9ndWlfaWRsZSwKKwkucG1fbWlzYyA9ICZldmVyZ3JlZW5fcG1fbWlzYywKKwkucG1fcHJlcGFyZSA9ICZldmVyZ3JlZW5fcG1fcHJlcGFyZSwKKwkucG1fZmluaXNoID0gJmV2ZXJncmVlbl9wbV9maW5pc2gsCisJLnBtX2luaXRfcHJvZmlsZSA9ICZyNjAwX3BtX2luaXRfcHJvZmlsZSwKKwkucG1fZ2V0X2R5bnBtX3N0YXRlID0gJnI2MDBfcG1fZ2V0X2R5bnBtX3N0YXRlLAorCS5wcmVfcGFnZV9mbGlwID0gJmV2ZXJncmVlbl9wcmVfcGFnZV9mbGlwLAorCS5wYWdlX2ZsaXAgPSAmZXZlcmdyZWVuX3BhZ2VfZmxpcCwKKwkucG9zdF9wYWdlX2ZsaXAgPSAmZXZlcmdyZWVuX3Bvc3RfcGFnZV9mbGlwLAorfTsKKworc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyBzdW1vX2FzaWMgPSB7CisJLmluaXQgPSAmZXZlcmdyZWVuX2luaXQsCisJLmZpbmkgPSAmZXZlcmdyZWVuX2ZpbmksCisJLnN1c3BlbmQgPSAmZXZlcmdyZWVuX3N1c3BlbmQsCisJLnJlc3VtZSA9ICZldmVyZ3JlZW5fcmVzdW1lLAorCS5jcF9jb21taXQgPSAmcjYwMF9jcF9jb21taXQsCisJLmdwdV9pc19sb2NrdXAgPSAmZXZlcmdyZWVuX2dwdV9pc19sb2NrdXAsCisJLmFzaWNfcmVzZXQgPSAmZXZlcmdyZWVuX2FzaWNfcmVzZXQsCisJLnZnYV9zZXRfc3RhdGUgPSAmcjYwMF92Z2Ffc2V0X3N0YXRlLAorCS5nYXJ0X3RsYl9mbHVzaCA9ICZldmVyZ3JlZW5fcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkuZ2FydF9zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAorCS5yaW5nX3Rlc3QgPSAmcjYwMF9yaW5nX3Rlc3QsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyNjAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkuaXJxX3NldCA9ICZldmVyZ3JlZW5faXJxX3NldCwKKwkuaXJxX3Byb2Nlc3MgPSAmZXZlcmdyZWVuX2lycV9wcm9jZXNzLAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmZXZlcmdyZWVuX2dldF92YmxhbmtfY291bnRlciwKKwkuZmVuY2VfcmluZ19lbWl0ID0gJnI2MDBfZmVuY2VfcmluZ19lbWl0LAorCS5jc19wYXJzZSA9ICZldmVyZ3JlZW5fY3NfcGFyc2UsCisJLmNvcHlfYmxpdCA9ICZldmVyZ3JlZW5fY29weV9ibGl0LAorCS5jb3B5X2RtYSA9ICZldmVyZ3JlZW5fY29weV9ibGl0LAorCS5jb3B5ID0gJmV2ZXJncmVlbl9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKKwkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKKwkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCisJLmdldF9wY2llX2xhbmVzID0gTlVMTCwKKwkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAorCS5zZXRfY2xvY2tfZ2F0aW5nID0gTlVMTCwKKwkuc2V0X3N1cmZhY2VfcmVnID0gcjYwMF9zZXRfc3VyZmFjZV9yZWcsCisJLmNsZWFyX3N1cmZhY2VfcmVnID0gcjYwMF9jbGVhcl9zdXJmYWNlX3JlZywKKwkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZldmVyZ3JlZW5fYmFuZHdpZHRoX3VwZGF0ZSwKKwkuaHBkX2luaXQgPSAmZXZlcmdyZWVuX2hwZF9pbml0LAorCS5ocGRfZmluaSA9ICZldmVyZ3JlZW5faHBkX2ZpbmksCisJLmhwZF9zZW5zZSA9ICZldmVyZ3JlZW5faHBkX3NlbnNlLAorCS5ocGRfc2V0X3BvbGFyaXR5ID0gJmV2ZXJncmVlbl9ocGRfc2V0X3BvbGFyaXR5LAorCS5ndWlfaWRsZSA9ICZyNjAwX2d1aV9pZGxlLAorCS5wbV9taXNjID0gJmV2ZXJncmVlbl9wbV9taXNjLAorCS5wbV9wcmVwYXJlID0gJmV2ZXJncmVlbl9wbV9wcmVwYXJlLAorCS5wbV9maW5pc2ggPSAmZXZlcmdyZWVuX3BtX2ZpbmlzaCwKKwkucG1faW5pdF9wcm9maWxlID0gJnJzNzgwX3BtX2luaXRfcHJvZmlsZSwKKwkucG1fZ2V0X2R5bnBtX3N0YXRlID0gJnI2MDBfcG1fZ2V0X2R5bnBtX3N0YXRlLAorfTsKKworc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyBidGNfYXNpYyA9IHsKKwkuaW5pdCA9ICZldmVyZ3JlZW5faW5pdCwKKwkuZmluaSA9ICZldmVyZ3JlZW5fZmluaSwKKwkuc3VzcGVuZCA9ICZldmVyZ3JlZW5fc3VzcGVuZCwKKwkucmVzdW1lID0gJmV2ZXJncmVlbl9yZXN1bWUsCisJLmNwX2NvbW1pdCA9ICZyNjAwX2NwX2NvbW1pdCwKKwkuZ3B1X2lzX2xvY2t1cCA9ICZldmVyZ3JlZW5fZ3B1X2lzX2xvY2t1cCwKKwkuYXNpY19yZXNldCA9ICZldmVyZ3JlZW5fYXNpY19yZXNldCwKKwkudmdhX3NldF9zdGF0ZSA9ICZyNjAwX3ZnYV9zZXRfc3RhdGUsCisJLmdhcnRfdGxiX2ZsdXNoID0gJmV2ZXJncmVlbl9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCS5nYXJ0X3NldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCisJLnJpbmdfdGVzdCA9ICZyNjAwX3JpbmdfdGVzdCwKKwkucmluZ19pYl9leGVjdXRlID0gJnI2MDBfcmluZ19pYl9leGVjdXRlLAorCS5pcnFfc2V0ID0gJmV2ZXJncmVlbl9pcnFfc2V0LAorCS5pcnFfcHJvY2VzcyA9ICZldmVyZ3JlZW5faXJxX3Byb2Nlc3MsCisJLmdldF92YmxhbmtfY291bnRlciA9ICZldmVyZ3JlZW5fZ2V0X3ZibGFua19jb3VudGVyLAorCS5mZW5jZV9yaW5nX2VtaXQgPSAmcjYwMF9mZW5jZV9yaW5nX2VtaXQsCisJLmNzX3BhcnNlID0gJmV2ZXJncmVlbl9jc19wYXJzZSwKKwkuY29weV9ibGl0ID0gJmV2ZXJncmVlbl9jb3B5X2JsaXQsCisJLmNvcHlfZG1hID0gJmV2ZXJncmVlbl9jb3B5X2JsaXQsCisJLmNvcHkgPSAmZXZlcmdyZWVuX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAorCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKKwkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAogCS5nZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9IE5VTEwsCkBAIC03NDksNiArODc3LDkgQEAKIAkucG1fZmluaXNoID0gJmV2ZXJncmVlbl9wbV9maW5pc2gsCiAJLnBtX2luaXRfcHJvZmlsZSA9ICZyNjAwX3BtX2luaXRfcHJvZmlsZSwKIAkucG1fZ2V0X2R5bnBtX3N0YXRlID0gJnI2MDBfcG1fZ2V0X2R5bnBtX3N0YXRlLAorCS5wcmVfcGFnZV9mbGlwID0gJmV2ZXJncmVlbl9wcmVfcGFnZV9mbGlwLAorCS5wYWdlX2ZsaXAgPSAmZXZlcmdyZWVuX3BhZ2VfZmxpcCwKKwkucG9zdF9wYWdlX2ZsaXAgPSAmZXZlcmdyZWVuX3Bvc3RfcGFnZV9mbGlwLAogfTsKIAogaW50IHJhZGVvbl9hc2ljX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCkBAIC04MzUsNiArOTY2LDE0IEBACiAJY2FzZSBDSElQX0hFTUxPQ0s6CiAJCXJkZXYtPmFzaWMgPSAmZXZlcmdyZWVuX2FzaWM7CiAJCWJyZWFrOworCWNhc2UgQ0hJUF9QQUxNOgorCQlyZGV2LT5hc2ljID0gJnN1bW9fYXNpYzsKKwkJYnJlYWs7CisJY2FzZSBDSElQX0JBUlRTOgorCWNhc2UgQ0hJUF9UVVJLUzoKKwljYXNlIENISVBfQ0FJQ09TOgorCQlyZGV2LT5hc2ljID0gJmJ0Y19hc2ljOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBGSVhNRTogbm90IHN1cHBvcnRlZCB5ZXQgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04NDksNyArOTg4LDkgQEAKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCiAJCXJkZXYtPm51bV9jcnRjID0gMTsKIAllbHNlIHsKLQkJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKKwkJaWYgKEFTSUNfSVNfRENFNDEocmRldikpCisJCQlyZGV2LT5udW1fY3J0YyA9IDI7CisJCWVsc2UgaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKIAkJCXJkZXYtPm51bV9jcnRjID0gNjsKIAkJZWxzZQogCQkJcmRldi0+bnVtX2NydGMgPSAyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCmluZGV4IDc0MDk4ODIuLmUwMWYwNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKQEAgLTEwMiw2ICsxMDIsMTEgQEAKIHZvaWQgcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX2RlYnVnZnNfbWNfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgcjEwMF9ncHVfbG9ja3VwX3VwZGF0ZShzdHJ1Y3QgcjEwMF9ncHVfbG9ja3VwICpsb2NrdXAsCisJCQkgICAgc3RydWN0IHJhZGVvbl9jcCAqY3ApOworYm9vbCByMTAwX2dwdV9jcF9pc19sb2NrdXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkgICBzdHJ1Y3QgcjEwMF9ncHVfbG9ja3VwICpsb2NrdXAsCisJCQkgICBzdHJ1Y3QgcmFkZW9uX2NwICpjcCk7CiB2b2lkIHIxMDBfaWJfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjEwMF9pYl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF9pcnFfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC0xMzAsMTUgKzEzNSwxOSBAQAogZXh0ZXJuIHZvaWQgcjEwMF9wbV9maW5pc2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjEwMF9wbV9pbml0X3Byb2ZpbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjEwMF9wbV9nZXRfZHlucG1fc3RhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjEwMF9wcmVfcGFnZV9mbGlwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdTMyIHIxMDBfcGFnZV9mbGlwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0YywgdTY0IGNydGNfYmFzZSk7CitleHRlcm4gdm9pZCByMTAwX3Bvc3RfcGFnZV9mbGlwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7CiAKIC8qCiAgKiByMjAwLHJ2MjUwLHJzMzAwLHJ2MjgwCiAgKi8KIGV4dGVybiBpbnQgcjIwMF9jb3B5X2RtYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKLQkJCXVpbnQ2NF90IHNyY19vZmZzZXQsCi0JCQl1aW50NjRfdCBkc3Rfb2Zmc2V0LAotCQkJdW5zaWduZWQgbnVtX3BhZ2VzLAorCQkJIHVpbnQ2NF90IHNyY19vZmZzZXQsCisJCQkgdWludDY0X3QgZHN0X29mZnNldCwKKwkJCSB1bnNpZ25lZCBudW1fcGFnZXMsCiAJCQkgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOwordm9pZCByMjAwX3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qCiAgKiByMzAwLHIzNTAscnYzNTAscnYzODAKQEAgLTE1OSw2ICsxNjgsMTUgQEAKIGV4dGVybiB2b2lkIHJ2MzcwX3BjaWVfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIGV4dGVybiB2b2lkIHJ2MzcwX3NldF9wY2llX2xhbmVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgbGFuZXMpOwogZXh0ZXJuIGludCBydjM3MF9nZXRfcGNpZV9sYW5lcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMzAwX3NldF9yZWdfc2FmZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMzAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjMwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIzMDBfY2xvY2tfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJ2MzcwX3BjaWVfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCBydjM3MF9wY2llX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qCiAgKiByNDIwLHI0MjMscnY0MTAKQEAgLTE2OCw2ICsxODYsMTAgQEAKIGV4dGVybiBpbnQgcjQyMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcjQyMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjQyMF9wbV9pbml0X3Byb2ZpbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHUzMiByNDIwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiByZWcpOworZXh0ZXJuIHZvaWQgcjQyMF9tY193cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1MzIgcmVnLCB1MzIgdik7CitleHRlcm4gaW50IHI0MjBfZGVidWdmc19waXBlc19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjQyMF9waXBlc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyoKICAqIHJzNDAwLHJzNDgwCkBAIC0xODAsNiArMjAyLDEyIEBACiBpbnQgcnM0MDBfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpOwogdWludDMyX3QgcnM0MDBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcnM0MDBfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKK2ludCByczQwMF9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJzNDAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgcnM0MDBfZ2FydF9hZGp1c3Rfc2l6ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJzNDAwX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJzNDAwX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisKIAogLyoKICAqIHJzNjAwLgpAQCAtMTkxLDYgKzIxOSw3IEBACiBleHRlcm4gaW50IHJzNjAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnM2MDBfaXJxX3NldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnM2MDBfaXJxX3Byb2Nlc3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByczYwMF9pcnFfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1MzIgcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7CiB2b2lkIHJzNjAwX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcik7CkBAIC0yMDUsNiArMjM0LDExIEBACiBleHRlcm4gdm9pZCByczYwMF9wbV9taXNjKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHJzNjAwX3BtX3ByZXBhcmUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcnM2MDBfcG1fZmluaXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJzNjAwX3ByZV9wYWdlX2ZsaXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKTsKK2V4dGVybiB1MzIgcnM2MDBfcGFnZV9mbGlwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0YywgdTY0IGNydGNfYmFzZSk7CitleHRlcm4gdm9pZCByczYwMF9wb3N0X3BhZ2VfZmxpcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpOwordm9pZCByczYwMF9zZXRfc2FmZV9yZWdpc3RlcnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCiAKIC8qCiAgKiByczY5MCxyczc0MApAQCAtMjE2LDEwICsyNTAsMjEgQEAKIHVpbnQzMl90IHJzNjkwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CiB2b2lkIHJzNjkwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7CiB2b2lkIHJzNjkwX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByczY5MF9saW5lX2J1ZmZlcl9hZGp1c3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlMSwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUyKTsKIAogLyoKICAqIHJ2NTE1CiAgKi8KK3N0cnVjdCBydjUxNV9tY19zYXZlIHsKKwl1MzIgZDF2Z2FfY29udHJvbDsKKwl1MzIgZDJ2Z2FfY29udHJvbDsKKwl1MzIgdmdhX3JlbmRlcl9jb250cm9sOworCXUzMiB2Z2FfaGRwX2NvbnRyb2w7CisJdTMyIGQxY3J0Y19jb250cm9sOworCXUzMiBkMmNydGNfY29udHJvbDsKK307CiBpbnQgcnY1MTVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJ2NTE1X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdWludDMyX3QgcnY1MTVfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKQEAgLTIzMCw2ICsyNzUsMTQgQEAKIHZvaWQgcnY1MTVfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnY1MTVfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCBydjUxNV9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgcnY1MTVfYmFuZHdpZHRoX2F2aXZvX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJ2NTE1X3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJ2NTE1X21jX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCBydjUxNV9tY19zYXZlICpzYXZlKTsKK3ZvaWQgcnY1MTVfbWNfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSAqc2F2ZSk7Cit2b2lkIHJ2NTE1X2Nsb2NrX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCBydjUxNV9kZWJ1Z2ZzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwogCiAvKgogICogcjUyMCxydjUzMCxydjU2MCxydjU3MCxyNTgwCkBAIC0yNzgsNiArMzMxLDggQEAKIGV4dGVybiB2b2lkIHI2MDBfcG1faW5pdF9wcm9maWxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHJzNzgwX3BtX2luaXRfcHJvZmlsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByNjAwX3BtX2dldF9keW5wbV9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByNjAwX3NldF9wY2llX2xhbmVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgbGFuZXMpOworZXh0ZXJuIGludCByNjAwX2dldF9wY2llX2xhbmVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyoKICAqIHJ2NzcwLHJ2NzMwLHJ2NzEwLHJ2NzQwCkBAIC0yODcsNiArMzQyLDcgQEAKIGludCBydjc3MF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCBydjc3MF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcnY3NzBfcG1fbWlzYyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdTMyIHJ2NzcwX3BhZ2VfZmxpcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMsIHU2NCBjcnRjX2Jhc2UpOwogCiAvKgogICogZXZlcmdyZWVuCkBAIC0zMTQsNSArMzcwLDggQEAKIGV4dGVybiB2b2lkIGV2ZXJncmVlbl9wbV9taXNjKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIGV2ZXJncmVlbl9wbV9wcmVwYXJlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIGV2ZXJncmVlbl9wbV9maW5pc2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgZXZlcmdyZWVuX3ByZV9wYWdlX2ZsaXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKTsKK2V4dGVybiB1MzIgZXZlcmdyZWVuX3BhZ2VfZmxpcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMsIHU2NCBjcnRjX2Jhc2UpOworZXh0ZXJuIHZvaWQgZXZlcmdyZWVuX3Bvc3RfcGFnZV9mbGlwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggYmM1YTJjMy4uMTU3MzIwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC0zNyw3ICszNyw3IEBACiBleHRlcm4gdm9pZCByYWRlb25fbGlua19lbmNvZGVyX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkCiByYWRlb25fYWRkX2F0b21fZW5jb2RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBlbmNvZGVyX2VudW0sCi0JCQl1aW50MzJfdCBzdXBwb3J0ZWRfZGV2aWNlKTsKKwkJCXVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsIHUxNiBjYXBzKTsKIAogLyogZnJvbSByYWRlb25fY29ubmVjdG9yLmMgKi8KIGV4dGVybiB2b2lkCkBAIC0zMTMsNyArMzEzLDYgQEAKIAkJCQkgICAgIHVpbnQxNl90ICpsaW5lX211eCwKIAkJCQkgICAgIHN0cnVjdCByYWRlb25faHBkICpocGQpCiB7Ci0Jc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCiAJLyogQXN1cyBNMkEtVk0gSERNSSBib2FyZCBsaXN0cyB0aGUgRFZJIHBvcnQgYXMgSERNSSAqLwogCWlmICgoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg3OTFlKSAmJgpAQCAtMzg4LDYgKzM4NywxNyBAQAogCQkJKmxpbmVfbXV4ID0gMHg5MDsKIAl9CiAKKwkvKiBtYWMgcnY2MzAgKi8KKwlpZiAoKGRldi0+cGRldi0+ZGV2aWNlID09IDB4OTU4OCkgJiYKKwkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwNmIpICYmCisJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMGE2KSkgeworCQlpZiAoKHN1cHBvcnRlZF9kZXZpY2UgPT0gQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpICYmCisJCSAgICAoKmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSkgeworCQkJKmNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU47CisJCQkqbGluZV9tdXggPSBDT05ORUNUT1JfN1BJTl9ESU5fRU5VTV9JRDE7CisJCX0KKwl9CisKIAkvKiBBU1VTIEhEIDM2MDAgWFQgYm9hcmQgbGlzdHMgdGhlIERWSSBwb3J0IGFzIEhETUkgKi8KIAlpZiAoKGRldi0+cGRldi0+ZGV2aWNlID09IDB4OTU5OCkgJiYKIAkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwNDMpICYmCkBAIC00MjUsMjEgKzQzNSwyMyBAQAogCQl9CiAJfQogCi0JLyogQWNlciBsYXB0b3AgcmVwb3J0cyBEVkktRCBhcyBEVkktSSBhbmQgaHBkIHBpbnMgcmV2ZXJzZWQgKi8KKwkvKiBBY2VyIGxhcHRvcCAoQWNlciBUcmF2ZWxNYXRlIDU3MzBHKSBoYXMgYW4gSERNSSBwb3J0CisJICogb24gdGhlIGxhcHRvcCBhbmQgYSBEVkkgcG9ydCBvbiB0aGUgZG9ja2luZyBzdGF0aW9uIGFuZAorCSAqIGJvdGggc2hhcmUgdGhlIHNhbWUgZW5jb2RlciwgaHBkIHBpbiwgYW5kIGRkYyBsaW5lLgorCSAqIFNvIHdoaWxlIHRoZSBiaW9zIHRhYmxlIGlzIHRlY2huaWNhbGx5IGNvcnJlY3QsCisJICogd2UgZHJvcCB0aGUgRFZJIHBvcnQgaGVyZSBzaW5jZSB4cmFuZHIgaGFzIG5vIGNvbmNlcHQgb2YKKwkgKiBlbmNvZGVycyBhbmQgd2lsbCB0cnkgYW5kIGRyaXZlIGJvdGggY29ubmVjdG9ycworCSAqIHdpdGggZGlmZmVyZW50IGNydGNzIHdoaWNoIGlzbid0IHBvc3NpYmxlIG9uIHRoZSBoYXJkd2FyZQorCSAqIHNpZGUgYW5kIGxlYXZlcyBubyBjcnRjcyBmb3IgTFZEUyBvciBWR0EuCisJICovCiAJaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDk1YzQpICYmCiAJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDI1KSAmJgogCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDEzYykpIHsKLQkJc3RydWN0IHJhZGVvbl9ncGlvX3JlYyBncGlvOwotCiAJCWlmICgoKmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSAmJgogCQkgICAgKHN1cHBvcnRlZF9kZXZpY2UgPT0gQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUKSkgewotCQkJZ3BpbyA9IHJhZGVvbl9sb29rdXBfZ3BpbyhyZGV2LCA2KTsKLQkJCSpocGQgPSByYWRlb25fYXRvbV9nZXRfaHBkX2luZm9fZnJvbV9ncGlvKHJkZXYsICZncGlvKTsKKwkJCS8qIGFjdHVhbGx5IGl0J3MgYSBEVkktRCBwb3J0IG5vdCBEVkktSSAqLwogCQkJKmNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ7Ci0JCX0gZWxzZSBpZiAoKCpjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpICYmCi0JCQkgICAoc3VwcG9ydGVkX2RldmljZSA9PSBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQpKSB7Ci0JCQlncGlvID0gcmFkZW9uX2xvb2t1cF9ncGlvKHJkZXYsIDcpOwotCQkJKmhwZCA9IHJhZGVvbl9hdG9tX2dldF9ocGRfaW5mb19mcm9tX2dwaW8ocmRldiwgJmdwaW8pOworCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJfQogCkBAIC01MjUsNiArNTM3LDcgQEAKIAl1MTYgc2l6ZSwgZGF0YV9vZmZzZXQ7CiAJdTggZnJldiwgY3JldjsKIAlBVE9NX0NPTk5FQ1RPUl9PQkpFQ1RfVEFCTEUgKmNvbl9vYmo7CisJQVRPTV9FTkNPREVSX09CSkVDVF9UQUJMRSAqZW5jX29iajsKIAlBVE9NX09CSkVDVF9UQUJMRSAqcm91dGVyX29iajsKIAlBVE9NX0RJU1BMQVlfT0JKRUNUX1BBVEhfVEFCTEUgKnBhdGhfb2JqOwogCUFUT01fT0JKRUNUX0hFQURFUiAqb2JqX2hlYWRlcjsKQEAgLTU0OSw2ICs1NjIsOSBAQAogCWNvbl9vYmogPSAoQVRPTV9DT05ORUNUT1JfT0JKRUNUX1RBQkxFICopCiAJICAgIChjdHgtPmJpb3MgKyBkYXRhX29mZnNldCArCiAJICAgICBsZTE2X3RvX2NwdShvYmpfaGVhZGVyLT51c0Nvbm5lY3Rvck9iamVjdFRhYmxlT2Zmc2V0KSk7CisJZW5jX29iaiA9IChBVE9NX0VOQ09ERVJfT0JKRUNUX1RBQkxFICopCisJICAgIChjdHgtPmJpb3MgKyBkYXRhX29mZnNldCArCisJICAgICBsZTE2X3RvX2NwdShvYmpfaGVhZGVyLT51c0VuY29kZXJPYmplY3RUYWJsZU9mZnNldCkpOwogCXJvdXRlcl9vYmogPSAoQVRPTV9PQkpFQ1RfVEFCTEUgKikKIAkJKGN0eC0+YmlvcyArIGRhdGFfb2Zmc2V0ICsKIAkJIGxlMTZfdG9fY3B1KG9ial9oZWFkZXItPnVzUm91dGVyT2JqZWN0VGFibGVPZmZzZXQpKTsKQEAgLTY1NCwxNCArNjcwLDM1IEBACiAJCQkJICAgICBPQkpFQ1RfVFlQRV9NQVNLKSA+PiBPQkpFQ1RfVFlQRV9TSElGVDsKIAogCQkJCWlmIChncnBoX29ial90eXBlID09IEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIpIHsKLQkJCQkJdTE2IGVuY29kZXJfb2JqID0gbGUxNl90b19jcHUocGF0aC0+dXNHcmFwaGljT2JqSWRzW2pdKTsKKwkJCQkJZm9yIChrID0gMDsgayA8IGVuY19vYmotPnVjTnVtYmVyT2ZPYmplY3RzOyBrKyspIHsKKwkJCQkJCXUxNiBlbmNvZGVyX29iaiA9IGxlMTZfdG9fY3B1KGVuY19vYmotPmFzT2JqZWN0c1trXS51c09iamVjdElEKTsKKwkJCQkJCWlmIChsZTE2X3RvX2NwdShwYXRoLT51c0dyYXBoaWNPYmpJZHNbal0pID09IGVuY29kZXJfb2JqKSB7CisJCQkJCQkJQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiAqcmVjb3JkID0gKEFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgKikKKwkJCQkJCQkJKGN0eC0+YmlvcyArIGRhdGFfb2Zmc2V0ICsKKwkJCQkJCQkJIGxlMTZfdG9fY3B1KGVuY19vYmotPmFzT2JqZWN0c1trXS51c1JlY29yZE9mZnNldCkpOworCQkJCQkJCUFUT01fRU5DT0RFUl9DQVBfUkVDT1JEICpjYXBfcmVjb3JkOworCQkJCQkJCXUxNiBjYXBzID0gMDsKIAotCQkJCQlyYWRlb25fYWRkX2F0b21fZW5jb2RlcihkZXYsCi0JCQkJCQkJCWVuY29kZXJfb2JqLAotCQkJCQkJCQlsZTE2X3RvX2NwdQotCQkJCQkJCQkocGF0aC0+Ci0JCQkJCQkJCSB1c0RldmljZVRhZykpOwotCisJCQkJCQkJd2hpbGUgKHJlY29yZC0+dWNSZWNvcmRUeXBlID4gMCAmJgorCQkJCQkJCSAgICAgICByZWNvcmQtPnVjUmVjb3JkVHlwZSA8PSBBVE9NX01BWF9PQkpFQ1RfUkVDT1JEX05VTUJFUikgeworCQkJCQkJCQlzd2l0Y2ggKHJlY29yZC0+dWNSZWNvcmRUeXBlKSB7CisJCQkJCQkJCWNhc2UgQVRPTV9FTkNPREVSX0NBUF9SRUNPUkRfVFlQRToKKwkJCQkJCQkJCWNhcF9yZWNvcmQgPShBVE9NX0VOQ09ERVJfQ0FQX1JFQ09SRCAqKQorCQkJCQkJCQkJCXJlY29yZDsKKwkJCQkJCQkJCWNhcHMgPSBsZTE2X3RvX2NwdShjYXBfcmVjb3JkLT51c0VuY29kZXJDYXApOworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0KKwkJCQkJCQkJcmVjb3JkID0gKEFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgKikKKwkJCQkJCQkJCSgoY2hhciAqKXJlY29yZCArIHJlY29yZC0+dWNSZWNvcmRTaXplKTsKKwkJCQkJCQl9CisJCQkJCQkJcmFkZW9uX2FkZF9hdG9tX2VuY29kZXIoZGV2LAorCQkJCQkJCQkJCWVuY29kZXJfb2JqLAorCQkJCQkJCQkJCWxlMTZfdG9fY3B1CisJCQkJCQkJCQkJKHBhdGgtPgorCQkJCQkJCQkJCSB1c0RldmljZVRhZyksCisJCQkJCQkJCQkJY2Fwcyk7CisJCQkJCQl9CisJCQkJCX0KIAkJCQl9IGVsc2UgaWYgKGdycGhfb2JqX3R5cGUgPT0gR1JBUEhfT0JKRUNUX1RZUEVfUk9VVEVSKSB7CiAJCQkJCWZvciAoayA9IDA7IGsgPCByb3V0ZXJfb2JqLT51Y051bWJlck9mT2JqZWN0czsgaysrKSB7CiAJCQkJCQl1MTYgcm91dGVyX29ial9pZCA9IGxlMTZfdG9fY3B1KHJvdXRlcl9vYmotPmFzT2JqZWN0c1trXS51c09iamVjdElEKTsKQEAgLTk5NSw3ICsxMDMyLDggQEAKIAkJCQkJCXJhZGVvbl9nZXRfZW5jb2Rlcl9lbnVtKGRldiwKIAkJCQkJCQkJICAgICAgKDEgPDwgaSksCiAJCQkJCQkJCSAgICAgIGRhYyksCi0JCQkJCQkoMSA8PCBpKSk7CisJCQkJCQkoMSA8PCBpKSwKKwkJCQkJCTApOwogCQllbHNlCiAJCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2VudW0oZGV2LApAQCAtMTA3NCw2ICsxMTEyLDcgQEAKIAlBVE9NX0ZJUk1XQVJFX0lORk9fVjFfMyBpbmZvXzEzOwogCUFUT01fRklSTVdBUkVfSU5GT19WMV80IGluZm9fMTQ7CiAJQVRPTV9GSVJNV0FSRV9JTkZPX1YyXzEgaW5mb18yMTsKKwlBVE9NX0ZJUk1XQVJFX0lORk9fVjJfMiBpbmZvXzIyOwogfTsKIAogYm9vbCByYWRlb25fYXRvbV9nZXRfY2xvY2tfaW5mbyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQpAQCAtMTE0OCw4ICsxMTg3LDEyIEBACiAJCSpwMnBsbCA9ICpwMXBsbDsKIAogCQkvKiBzeXN0ZW0gY2xvY2sgKi8KLQkJc3BsbC0+cmVmZXJlbmNlX2ZyZXEgPQotCQkgICAgbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51c1JlZmVyZW5jZUNsb2NrKTsKKwkJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKKwkJCXNwbGwtPnJlZmVyZW5jZV9mcmVxID0KKwkJCQlsZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvXzIxLnVzQ29yZVJlZmVyZW5jZUNsb2NrKTsKKwkJZWxzZQorCQkJc3BsbC0+cmVmZXJlbmNlX2ZyZXEgPQorCQkJCWxlMTZfdG9fY3B1KGZpcm13YXJlX2luZm8tPmluZm8udXNSZWZlcmVuY2VDbG9jayk7CiAJCXNwbGwtPnJlZmVyZW5jZV9kaXYgPSAwOwogCiAJCXNwbGwtPnBsbF9vdXRfbWluID0KQEAgLTExNzEsOCArMTIxNCwxMiBAQAogCQkgICAgbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51c01heEVuZ2luZUNsb2NrUExMX0lucHV0KTsKIAogCQkvKiBtZW1vcnkgY2xvY2sgKi8KLQkJbXBsbC0+cmVmZXJlbmNlX2ZyZXEgPQotCQkgICAgbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51c1JlZmVyZW5jZUNsb2NrKTsKKwkJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKKwkJCW1wbGwtPnJlZmVyZW5jZV9mcmVxID0KKwkJCQlsZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvXzIxLnVzTWVtb3J5UmVmZXJlbmNlQ2xvY2spOworCQllbHNlCisJCQltcGxsLT5yZWZlcmVuY2VfZnJlcSA9CisJCQkJbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51c1JlZmVyZW5jZUNsb2NrKTsKIAkJbXBsbC0+cmVmZXJlbmNlX2RpdiA9IDA7CiAKIAkJbXBsbC0+cGxsX291dF9taW4gPQpAQCAtMTIwMSw4ICsxMjQ4LDEyIEBACiAJCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKIAkJCXJkZXYtPmNsb2NrLmRlZmF1bHRfZGlzcGNsayA9CiAJCQkJbGUzMl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mb18yMS51bERlZmF1bHREaXNwRW5naW5lQ2xrRnJlcSk7Ci0JCQlpZiAocmRldi0+Y2xvY2suZGVmYXVsdF9kaXNwY2xrID09IDApCi0JCQkJcmRldi0+Y2xvY2suZGVmYXVsdF9kaXNwY2xrID0gNjAwMDA7IC8qIDYwMCBNaHogKi8KKwkJCWlmIChyZGV2LT5jbG9jay5kZWZhdWx0X2Rpc3BjbGsgPT0gMCkgeworCQkJCWlmIChBU0lDX0lTX0RDRTUocmRldikpCisJCQkJCXJkZXYtPmNsb2NrLmRlZmF1bHRfZGlzcGNsayA9IDU0MDAwOyAvKiA1NDAgTWh6ICovCisJCQkJZWxzZQorCQkJCQlyZGV2LT5jbG9jay5kZWZhdWx0X2Rpc3BjbGsgPSA2MDAwMDsgLyogNjAwIE1oeiAqLworCQkJfQogCQkJcmRldi0+Y2xvY2suZHBfZXh0Y2xrID0KIAkJCQlsZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvXzIxLnVzVW5pcGh5RFBNb2RlRXh0Q2xrRnJlcSk7CiAJCX0KQEAgLTEzMzcsNiArMTM4OCw0MyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIHZvaWQgcmFkZW9uX2F0b21iaW9zX2dldF9pZ3Bfc3Nfb3ZlcnJpZGVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJCQkJIHN0cnVjdCByYWRlb25fYXRvbV9zcyAqc3MsCisJCQkJCQkgaW50IGlkKQoreworCXN0cnVjdCByYWRlb25fbW9kZV9pbmZvICptb2RlX2luZm8gPSAmcmRldi0+bW9kZV9pbmZvOworCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIEludGVncmF0ZWRTeXN0ZW1JbmZvKTsKKwl1MTYgZGF0YV9vZmZzZXQsIHNpemU7CisJc3RydWN0IF9BVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk9fVjYgKmlncF9pbmZvOworCXU4IGZyZXYsIGNyZXY7CisJdTE2IHBlcmNlbnRhZ2UgPSAwLCByYXRlID0gMDsKKworCS8qIGdldCBhbnkgaWdwIHNwZWNpZmljIG92ZXJyaWRlcyAqLworCWlmIChhdG9tX3BhcnNlX2RhdGFfaGVhZGVyKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LCBpbmRleCwgJnNpemUsCisJCQkJICAgJmZyZXYsICZjcmV2LCAmZGF0YV9vZmZzZXQpKSB7CisJCWlncF9pbmZvID0gKHN0cnVjdCBfQVRPTV9JTlRFR1JBVEVEX1NZU1RFTV9JTkZPX1Y2ICopCisJCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCk7CisJCXN3aXRjaCAoaWQpIHsKKwkJY2FzZSBBU0lDX0lOVEVSTkFMX1NTX09OX1RNRFM6CisJCQlwZXJjZW50YWdlID0gbGUxNl90b19jcHUoaWdwX2luZm8tPnVzRFZJU1NQZXJjZW50YWdlKTsKKwkJCXJhdGUgPSBsZTE2X3RvX2NwdShpZ3BfaW5mby0+dXNEVklTU3ByZWFkUmF0ZUluMTBIeik7CisJCQlicmVhazsKKwkJY2FzZSBBU0lDX0lOVEVSTkFMX1NTX09OX0hETUk6CisJCQlwZXJjZW50YWdlID0gbGUxNl90b19jcHUoaWdwX2luZm8tPnVzSERNSVNTUGVyY2VudGFnZSk7CisJCQlyYXRlID0gbGUxNl90b19jcHUoaWdwX2luZm8tPnVzSERNSVNTcHJlYWRSYXRlSW4xMEh6KTsKKwkJCWJyZWFrOworCQljYXNlIEFTSUNfSU5URVJOQUxfU1NfT05fTFZEUzoKKwkJCXBlcmNlbnRhZ2UgPSBsZTE2X3RvX2NwdShpZ3BfaW5mby0+dXNMdmRzU1NQZXJjZW50YWdlKTsKKwkJCXJhdGUgPSBsZTE2X3RvX2NwdShpZ3BfaW5mby0+dXNMdmRzU1NwcmVhZFJhdGVJbjEwSHopOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBlcmNlbnRhZ2UpCisJCQlzcy0+cGVyY2VudGFnZSA9IHBlcmNlbnRhZ2U7CisJCWlmIChyYXRlKQorCQkJc3MtPnJhdGUgPSByYXRlOworCX0KK30KKwogdW5pb24gYXNpY19zc19pbmZvIHsKIAlzdHJ1Y3QgX0FUT01fQVNJQ19JTlRFUk5BTF9TU19JTkZPIGluZm87CiAJc3RydWN0IF9BVE9NX0FTSUNfSU5URVJOQUxfU1NfSU5GT19WMiBpbmZvXzI7CkBAIC0xNDAxLDYgKzE0ODksOCBAQAogCQkJCQkJbGUxNl90b19jcHUoc3NfaW5mby0+aW5mb18zLmFzU3ByZWFkU3BlY3RydW1baV0udXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2UpOwogCQkJCQlzcy0+dHlwZSA9IHNzX2luZm8tPmluZm9fMy5hc1NwcmVhZFNwZWN0cnVtW2ldLnVjU3ByZWFkU3BlY3RydW1Nb2RlOwogCQkJCQlzcy0+cmF0ZSA9IGxlMTZfdG9fY3B1KHNzX2luZm8tPmluZm9fMy5hc1NwcmVhZFNwZWN0cnVtW2ldLnVzU3ByZWFkUmF0ZUluMTBIeik7CisJCQkJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApCisJCQkJCQlyYWRlb25fYXRvbWJpb3NfZ2V0X2lncF9zc19vdmVycmlkZXMocmRldiwgc3MsIGlkKTsKIAkJCQkJcmV0dXJuIHRydWU7CiAJCQkJfQogCQkJfQpAQCAtMTQ3Nyw2ICsxNTY3LDkgQEAKIAkJaWYgKG1pc2MgJiBBVE9NX0RPVUJMRV9DTE9DS19NT0RFKQogCQkJbHZkcy0+bmF0aXZlX21vZGUuZmxhZ3MgfD0gRFJNX01PREVfRkxBR19EQkxTQ0FOOwogCisJCWx2ZHMtPm5hdGl2ZV9tb2RlLndpZHRoX21tID0gbHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNJbWFnZUhTaXplOworCQlsdmRzLT5uYXRpdmVfbW9kZS5oZWlnaHRfbW0gPSBsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0ltYWdlVlNpemU7CisKIAkJLyogc2V0IGNydGMgdmFsdWVzICovCiAJCWRybV9tb2RlX3NldF9jcnRjaW5mbygmbHZkcy0+bmF0aXZlX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwogCkBAIC0xNDg5LDYgKzE1ODIsNTkgQEAKIAkJZWxzZQogCQkJbHZkcy0+bGlua2IgPSBmYWxzZTsKIAorCQkvKiBwYXJzZSB0aGUgbGNkIHJlY29yZCB0YWJsZSAqLworCQlpZiAobHZkc19pbmZvLT5pbmZvLnVzTW9kZVBhdGNoVGFibGVPZmZzZXQpIHsKKwkJCUFUT01fRkFLRV9FRElEX1BBVENIX1JFQ09SRCAqZmFrZV9lZGlkX3JlY29yZDsKKwkJCUFUT01fUEFORUxfUkVTT0xVVElPTl9QQVRDSF9SRUNPUkQgKnBhbmVsX3Jlc19yZWNvcmQ7CisJCQlib29sIGJhZF9yZWNvcmQgPSBmYWxzZTsKKwkJCXU4ICpyZWNvcmQgPSAodTggKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKworCQkJCQkgICAgZGF0YV9vZmZzZXQgKworCQkJCQkgICAgbHZkc19pbmZvLT5pbmZvLnVzTW9kZVBhdGNoVGFibGVPZmZzZXQpOworCQkJd2hpbGUgKCpyZWNvcmQgIT0gQVRPTV9SRUNPUkRfRU5EX1RZUEUpIHsKKwkJCQlzd2l0Y2ggKCpyZWNvcmQpIHsKKwkJCQljYXNlIExDRF9NT0RFX1BBVENIX1JFQ09SRF9NT0RFX1RZUEU6CisJCQkJCXJlY29yZCArPSBzaXplb2YoQVRPTV9QQVRDSF9SRUNPUkRfTU9ERSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgTENEX1JUU19SRUNPUkRfVFlQRToKKwkJCQkJcmVjb3JkICs9IHNpemVvZihBVE9NX0xDRF9SVFNfUkVDT1JEKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBMQ0RfQ0FQX1JFQ09SRF9UWVBFOgorCQkJCQlyZWNvcmQgKz0gc2l6ZW9mKEFUT01fTENEX01PREVfQ09OVFJPTF9DQVApOworCQkJCQlicmVhazsKKwkJCQljYXNlIExDRF9GQUtFX0VESURfUEFUQ0hfUkVDT1JEX1RZUEU6CisJCQkJCWZha2VfZWRpZF9yZWNvcmQgPSAoQVRPTV9GQUtFX0VESURfUEFUQ0hfUkVDT1JEICopcmVjb3JkOworCQkJCQlpZiAoZmFrZV9lZGlkX3JlY29yZC0+dWNGYWtlRURJRExlbmd0aCkgeworCQkJCQkJc3RydWN0IGVkaWQgKmVkaWQ7CisJCQkJCQlpbnQgZWRpZF9zaXplID0KKwkJCQkJCQltYXgoKGludClFRElEX0xFTkdUSCwgKGludClmYWtlX2VkaWRfcmVjb3JkLT51Y0Zha2VFRElETGVuZ3RoKTsKKwkJCQkJCWVkaWQgPSBrbWFsbG9jKGVkaWRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQkJCQlpZiAoZWRpZCkgeworCQkJCQkJCW1lbWNweSgodTggKillZGlkLCAodTggKikmZmFrZV9lZGlkX3JlY29yZC0+dWNGYWtlRURJRFN0cmluZ1swXSwKKwkJCQkJCQkgICAgICAgZmFrZV9lZGlkX3JlY29yZC0+dWNGYWtlRURJRExlbmd0aCk7CisKKwkJCQkJCQlpZiAoZHJtX2VkaWRfaXNfdmFsaWQoZWRpZCkpCisJCQkJCQkJCXJkZXYtPm1vZGVfaW5mby5iaW9zX2hhcmRjb2RlZF9lZGlkID0gZWRpZDsKKwkJCQkJCQllbHNlCisJCQkJCQkJCWtmcmVlKGVkaWQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCXJlY29yZCArPSBzaXplb2YoQVRPTV9GQUtFX0VESURfUEFUQ0hfUkVDT1JEKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBMQ0RfUEFORUxfUkVTT0xVVElPTl9SRUNPUkRfVFlQRToKKwkJCQkJcGFuZWxfcmVzX3JlY29yZCA9IChBVE9NX1BBTkVMX1JFU09MVVRJT05fUEFUQ0hfUkVDT1JEICopcmVjb3JkOworCQkJCQlsdmRzLT5uYXRpdmVfbW9kZS53aWR0aF9tbSA9IHBhbmVsX3Jlc19yZWNvcmQtPnVzSFNpemU7CisJCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhlaWdodF9tbSA9IHBhbmVsX3Jlc19yZWNvcmQtPnVzVlNpemU7CisJCQkJCXJlY29yZCArPSBzaXplb2YoQVRPTV9QQU5FTF9SRVNPTFVUSU9OX1BBVENIX1JFQ09SRCk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCURSTV9FUlJPUigiQmFkIExDRCByZWNvcmQgJWRcbiIsICpyZWNvcmQpOworCQkJCQliYWRfcmVjb3JkID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChiYWRfcmVjb3JkKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQogCX0KIAlyZXR1cm4gbHZkczsKIH0KQEAgLTE3NDAsNDk1ICsxODg2LDYxMyBAQAogCSJSVjZ4eCIsCiAJIlJWNzcwIiwKIAkiYWR0NzQ3MyIsCisJIk5PTkUiLAogCSJFeHRlcm5hbCBHUElPIiwKIAkiRXZlcmdyZWVuIiwKLQkiYWR0NzQ3MyB3aXRoIGludGVybmFsIiwKLQorCSJlbWMyMTAzIiwKKwkiU3VtbyIsCisJIk5vcnRoZXJuIElzbGFuZHMiLAogfTsKIAogdW5pb24gcG93ZXJfaW5mbyB7CiAJc3RydWN0IF9BVE9NX1BPV0VSUExBWV9JTkZPIGluZm87CiAJc3RydWN0IF9BVE9NX1BPV0VSUExBWV9JTkZPX1YyIGluZm9fMjsKIAlzdHJ1Y3QgX0FUT01fUE9XRVJQTEFZX0lORk9fVjMgaW5mb18zOwotCXN0cnVjdCBfQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRSBpbmZvXzQ7CisJc3RydWN0IF9BVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFIHBwbGliOworCXN0cnVjdCBfQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTIgcHBsaWIyOworCXN0cnVjdCBfQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTMgcHBsaWIzOwogfTsKIAordW5pb24gcHBsaWJfY2xvY2tfaW5mbyB7CisJc3RydWN0IF9BVE9NX1BQTElCX1I2MDBfQ0xPQ0tfSU5GTyByNjAwOworCXN0cnVjdCBfQVRPTV9QUExJQl9SUzc4MF9DTE9DS19JTkZPIHJzNzgwOworCXN0cnVjdCBfQVRPTV9QUExJQl9FVkVSR1JFRU5fQ0xPQ0tfSU5GTyBldmVyZ3JlZW47CisJc3RydWN0IF9BVE9NX1BQTElCX1NVTU9fQ0xPQ0tfSU5GTyBzdW1vOworfTsKKwordW5pb24gcHBsaWJfcG93ZXJfc3RhdGUgeworCXN0cnVjdCBfQVRPTV9QUExJQl9TVEFURSB2MTsKKwlzdHJ1Y3QgX0FUT01fUFBMSUJfU1RBVEVfVjIgdjI7Cit9OworCitzdGF0aWMgdm9pZCByYWRlb25fYXRvbWJpb3NfcGFyc2VfbWlzY19mbGFnc18xXzMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkJCQkgaW50IHN0YXRlX2luZGV4LAorCQkJCQkJIHUzMiBtaXNjLCB1MzIgbWlzYzIpCit7CisJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm1pc2MgPSBtaXNjOworCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5taXNjMiA9IG1pc2MyOworCS8qIG9yZGVyIG1hdHRlcnMhICovCisJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1BPV0VSX1NBVklOR19NT0RFKQorCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQlQT1dFUl9TVEFURV9UWVBFX1BPV0VSU0FWRTsKKwlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fREVGQVVMVF9EQ19TVEFURV9FTlRSWV9UUlVFKQorCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQlQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlk7CisJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX0RFRkFVTFRfTE9XX0RDX1NUQVRFX0VOVFJZX1RSVUUpCisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCVBPV0VSX1NUQVRFX1RZUEVfQkFUVEVSWTsKKwlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fTE9BRF9CQUxBTkNFX0VOKQorCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQlQT1dFUl9TVEFURV9UWVBFX0JBTEFOQ0VEOworCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT18zRF9BQ0NFTEVSQVRJT05fRU4pIHsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJUE9XRVJfU1RBVEVfVFlQRV9QRVJGT1JNQU5DRTsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmZsYWdzICY9CisJCQl+UkFERU9OX1BNX1NUQVRFX1NJTkdMRV9ESVNQTEFZX09OTFk7CisJfQorCWlmIChtaXNjMiAmIEFUT01fUE1fTUlTQ0lORk8yX1NZU1RFTV9BQ19MSVRFX01PREUpCisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCVBPV0VSX1NUQVRFX1RZUEVfQkFMQU5DRUQ7CisJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX0RSSVZFUl9ERUZBVUxUX01PREUpIHsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJUE9XRVJfU1RBVEVfVFlQRV9ERUZBVUxUOworCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gc3RhdGVfaW5kZXg7CisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5kZWZhdWx0X2Nsb2NrX21vZGUgPQorCQkJJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdOworCX0gZWxzZSBpZiAoc3RhdGVfaW5kZXggPT0gMCkgeworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5mbGFncyB8PQorCQkJUkFERU9OX1BNX01PREVfTk9fRElTUExBWTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmFkZW9uX2F0b21iaW9zX3BhcnNlX3Bvd2VyX3RhYmxlXzFfMyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKKwl1MzIgbWlzYywgbWlzYzIgPSAwOworCWludCBudW1fbW9kZXMgPSAwLCBpOworCWludCBzdGF0ZV9pbmRleCA9IDA7CisJc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyBpMmNfYnVzOworCXVuaW9uIHBvd2VyX2luZm8gKnBvd2VyX2luZm87CisJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgUG93ZXJQbGF5SW5mbyk7CisgICAgICAgIHUxNiBkYXRhX29mZnNldDsKKwl1OCBmcmV2LCBjcmV2OworCisJaWYgKCFhdG9tX3BhcnNlX2RhdGFfaGVhZGVyKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LCBpbmRleCwgTlVMTCwKKwkJCQkgICAmZnJldiwgJmNyZXYsICZkYXRhX29mZnNldCkpCisJCXJldHVybiBzdGF0ZV9pbmRleDsKKwlwb3dlcl9pbmZvID0gKHVuaW9uIHBvd2VyX2luZm8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCk7CisKKwkvKiBhZGQgdGhlIGkyYyBidXMgZm9yIHRoZXJtYWwvZmFuIGNoaXAgKi8KKwlpZiAocG93ZXJfaW5mby0+aW5mby51Y092ZXJkcml2ZVRoZXJtYWxDb250cm9sbGVyID4gMCkgeworCQlEUk1fSU5GTygiUG9zc2libGUgJXMgdGhlcm1hbCBjb250cm9sbGVyIGF0IDB4JTAyeFxuIiwKKwkJCSB0aGVybWFsX2NvbnRyb2xsZXJfbmFtZXNbcG93ZXJfaW5mby0+aW5mby51Y092ZXJkcml2ZVRoZXJtYWxDb250cm9sbGVyXSwKKwkJCSBwb3dlcl9pbmZvLT5pbmZvLnVjT3ZlcmRyaXZlQ29udHJvbGxlckFkZHJlc3MgPj4gMSk7CisJCWkyY19idXMgPSByYWRlb25fbG9va3VwX2kyY19ncGlvKHJkZXYsIHBvd2VyX2luZm8tPmluZm8udWNPdmVyZHJpdmVJMmNMaW5lKTsKKwkJcmRldi0+cG0uaTJjX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsICZpMmNfYnVzKTsKKwkJaWYgKHJkZXYtPnBtLmkyY19idXMpIHsKKwkJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvID0geyB9OworCQkJY29uc3QgY2hhciAqbmFtZSA9IHRoZXJtYWxfY29udHJvbGxlcl9uYW1lc1twb3dlcl9pbmZvLT5pbmZvLgorCQkJCQkJCQkgICAgdWNPdmVyZHJpdmVUaGVybWFsQ29udHJvbGxlcl07CisJCQlpbmZvLmFkZHIgPSBwb3dlcl9pbmZvLT5pbmZvLnVjT3ZlcmRyaXZlQ29udHJvbGxlckFkZHJlc3MgPj4gMTsKKwkJCXN0cmxjcHkoaW5mby50eXBlLCBuYW1lLCBzaXplb2YoaW5mby50eXBlKSk7CisJCQlpMmNfbmV3X2RldmljZSgmcmRldi0+cG0uaTJjX2J1cy0+YWRhcHRlciwgJmluZm8pOworCQl9CisJfQorCW51bV9tb2RlcyA9IHBvd2VyX2luZm8tPmluZm8udWNOdW1PZlBvd2VyTW9kZUVudHJpZXM7CisJaWYgKG51bV9tb2RlcyA+IEFUT01fTUFYX05VTUJFUk9GX1BPV0VSX0JMT0NLKQorCQludW1fbW9kZXMgPSBBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DSzsKKwkvKiBsYXN0IG1vZGUgaXMgdXN1YWxseSBkZWZhdWx0LCBhcnJheSBpcyBsb3cgdG8gaGlnaCAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fbW9kZXM7IGkrKykgeworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPSBWT0xUQUdFX05PTkU7CisJCXN3aXRjaCAoZnJldikgeworCQljYXNlIDE6CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gMTsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPQorCQkJCWxlMTZfdG9fY3B1KHBvd2VyX2luZm8tPmluZm8uYXNQb3dlclBsYXlJbmZvW2ldLnVzTWVtb3J5Q2xvY2spOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9CisJCQkJbGUxNl90b19jcHUocG93ZXJfaW5mby0+aW5mby5hc1Bvd2VyUGxheUluZm9baV0udXNFbmdpbmVDbG9jayk7CisJCQkvKiBza2lwIGludmFsaWQgbW9kZXMgKi8KKwkJCWlmICgocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA9PSAwKSB8fAorCQkJICAgIChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID09IDApKQorCQkJCWNvbnRpbnVlOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnBjaWVfbGFuZXMgPQorCQkJCXBvd2VyX2luZm8tPmluZm8uYXNQb3dlclBsYXlJbmZvW2ldLnVjTnVtUGNpRUxhbmVzOworCQkJbWlzYyA9IGxlMzJfdG9fY3B1KHBvd2VyX2luZm8tPmluZm8uYXNQb3dlclBsYXlJbmZvW2ldLnVsTWlzY0luZm8pOworCQkJaWYgKChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19WT0xUQUdFX0RST1BfU1VQUE9SVCkgfHwKKwkJCSAgICAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fVk9MVEFHRV9EUk9QX0FDVElWRV9ISUdIKSkgeworCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9CisJCQkJCVZPTFRBR0VfR1BJTzsKKwkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmdwaW8gPQorCQkJCQlyYWRlb25fbG9va3VwX2dwaW8ocmRldiwKKwkJCQkJCQkgICBwb3dlcl9pbmZvLT5pbmZvLmFzUG93ZXJQbGF5SW5mb1tpXS51Y1ZvbHRhZ2VEcm9wSW5kZXgpOworCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19WT0xUQUdFX0RST1BfQUNUSVZFX0hJR0gpCisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuYWN0aXZlX2hpZ2ggPQorCQkJCQkJdHJ1ZTsKKwkJCQllbHNlCisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuYWN0aXZlX2hpZ2ggPQorCQkJCQkJZmFsc2U7CisJCQl9IGVsc2UgaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1BST0dSQU1fVk9MVEFHRSkgeworCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9CisJCQkJCVZPTFRBR0VfVkREQzsKKwkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnZkZGNfaWQgPQorCQkJCQlwb3dlcl9pbmZvLT5pbmZvLmFzUG93ZXJQbGF5SW5mb1tpXS51Y1ZvbHRhZ2VEcm9wSW5kZXg7CisJCQl9CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgPSBSQURFT05fUE1fU1RBVEVfU0lOR0xFX0RJU1BMQVlfT05MWTsKKwkJCXJhZGVvbl9hdG9tYmlvc19wYXJzZV9taXNjX2ZsYWdzXzFfMyhyZGV2LCBzdGF0ZV9pbmRleCwgbWlzYywgMCk7CisJCQlzdGF0ZV9pbmRleCsrOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5udW1fY2xvY2tfbW9kZXMgPSAxOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA9CisJCQkJbGUzMl90b19jcHUocG93ZXJfaW5mby0+aW5mb18yLmFzUG93ZXJQbGF5SW5mb1tpXS51bE1lbW9yeUNsb2NrKTsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnNjbGsgPQorCQkJCWxlMzJfdG9fY3B1KHBvd2VyX2luZm8tPmluZm9fMi5hc1Bvd2VyUGxheUluZm9baV0udWxFbmdpbmVDbG9jayk7CisJCQkvKiBza2lwIGludmFsaWQgbW9kZXMgKi8KKwkJCWlmICgocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA9PSAwKSB8fAorCQkJICAgIChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID09IDApKQorCQkJCWNvbnRpbnVlOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnBjaWVfbGFuZXMgPQorCQkJCXBvd2VyX2luZm8tPmluZm9fMi5hc1Bvd2VyUGxheUluZm9baV0udWNOdW1QY2lFTGFuZXM7CisJCQltaXNjID0gbGUzMl90b19jcHUocG93ZXJfaW5mby0+aW5mb18yLmFzUG93ZXJQbGF5SW5mb1tpXS51bE1pc2NJbmZvKTsKKwkJCW1pc2MyID0gbGUzMl90b19jcHUocG93ZXJfaW5mby0+aW5mb18yLmFzUG93ZXJQbGF5SW5mb1tpXS51bE1pc2NJbmZvMik7CisJCQlpZiAoKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1ZPTFRBR0VfRFJPUF9TVVBQT1JUKSB8fAorCQkJICAgIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19WT0xUQUdFX0RST1BfQUNUSVZFX0hJR0gpKSB7CisJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS50eXBlID0KKwkJCQkJVk9MVEFHRV9HUElPOworCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZ3BpbyA9CisJCQkJCXJhZGVvbl9sb29rdXBfZ3BpbyhyZGV2LAorCQkJCQkJCSAgIHBvd2VyX2luZm8tPmluZm9fMi5hc1Bvd2VyUGxheUluZm9baV0udWNWb2x0YWdlRHJvcEluZGV4KTsKKwkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fVk9MVEFHRV9EUk9QX0FDVElWRV9ISUdIKQorCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmFjdGl2ZV9oaWdoID0KKwkJCQkJCXRydWU7CisJCQkJZWxzZQorCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmFjdGl2ZV9oaWdoID0KKwkJCQkJCWZhbHNlOworCQkJfSBlbHNlIGlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19QUk9HUkFNX1ZPTFRBR0UpIHsKKwkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPQorCQkJCQlWT0xUQUdFX1ZEREM7CisJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS52ZGRjX2lkID0KKwkJCQkJcG93ZXJfaW5mby0+aW5mb18yLmFzUG93ZXJQbGF5SW5mb1tpXS51Y1ZvbHRhZ2VEcm9wSW5kZXg7CisJCQl9CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgPSBSQURFT05fUE1fU1RBVEVfU0lOR0xFX0RJU1BMQVlfT05MWTsKKwkJCXJhZGVvbl9hdG9tYmlvc19wYXJzZV9taXNjX2ZsYWdzXzFfMyhyZGV2LCBzdGF0ZV9pbmRleCwgbWlzYywgbWlzYzIpOworCQkJc3RhdGVfaW5kZXgrKzsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gMTsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPQorCQkJCWxlMzJfdG9fY3B1KHBvd2VyX2luZm8tPmluZm9fMy5hc1Bvd2VyUGxheUluZm9baV0udWxNZW1vcnlDbG9jayk7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID0KKwkJCQlsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzMuYXNQb3dlclBsYXlJbmZvW2ldLnVsRW5naW5lQ2xvY2spOworCQkJLyogc2tpcCBpbnZhbGlkIG1vZGVzICovCisJCQlpZiAoKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPT0gMCkgfHwKKwkJCSAgICAocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9PSAwKSkKKwkJCQljb250aW51ZTsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5wY2llX2xhbmVzID0KKwkJCQlwb3dlcl9pbmZvLT5pbmZvXzMuYXNQb3dlclBsYXlJbmZvW2ldLnVjTnVtUGNpRUxhbmVzOworCQkJbWlzYyA9IGxlMzJfdG9fY3B1KHBvd2VyX2luZm8tPmluZm9fMy5hc1Bvd2VyUGxheUluZm9baV0udWxNaXNjSW5mbyk7CisJCQltaXNjMiA9IGxlMzJfdG9fY3B1KHBvd2VyX2luZm8tPmluZm9fMy5hc1Bvd2VyUGxheUluZm9baV0udWxNaXNjSW5mbzIpOworCQkJaWYgKChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19WT0xUQUdFX0RST1BfU1VQUE9SVCkgfHwKKwkJCSAgICAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fVk9MVEFHRV9EUk9QX0FDVElWRV9ISUdIKSkgeworCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9CisJCQkJCVZPTFRBR0VfR1BJTzsKKwkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmdwaW8gPQorCQkJCQlyYWRlb25fbG9va3VwX2dwaW8ocmRldiwKKwkJCQkJCQkgICBwb3dlcl9pbmZvLT5pbmZvXzMuYXNQb3dlclBsYXlJbmZvW2ldLnVjVm9sdGFnZURyb3BJbmRleCk7CisJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1ZPTFRBR0VfRFJPUF9BQ1RJVkVfSElHSCkKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5hY3RpdmVfaGlnaCA9CisJCQkJCQl0cnVlOworCQkJCWVsc2UKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5hY3RpdmVfaGlnaCA9CisJCQkJCQlmYWxzZTsKKwkJCX0gZWxzZSBpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fUFJPR1JBTV9WT0xUQUdFKSB7CisJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS50eXBlID0KKwkJCQkJVk9MVEFHRV9WRERDOworCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudmRkY19pZCA9CisJCQkJCXBvd2VyX2luZm8tPmluZm9fMy5hc1Bvd2VyUGxheUluZm9baV0udWNWb2x0YWdlRHJvcEluZGV4OworCQkJCWlmIChtaXNjMiAmIEFUT01fUE1fTUlTQ0lORk8yX1ZERENJX0RZTkFNSUNfVk9MVEFHRV9FTikgeworCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnZkZGNpX2VuYWJsZWQgPQorCQkJCQkJdHJ1ZTsKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS52ZGRjaV9pZCA9CisJCQkJCQlwb3dlcl9pbmZvLT5pbmZvXzMuYXNQb3dlclBsYXlJbmZvW2ldLnVjVkREQ0lfVm9sdGFnZURyb3BJbmRleDsKKwkJCQl9CisJCQl9CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgPSBSQURFT05fUE1fU1RBVEVfU0lOR0xFX0RJU1BMQVlfT05MWTsKKwkJCXJhZGVvbl9hdG9tYmlvc19wYXJzZV9taXNjX2ZsYWdzXzFfMyhyZGV2LCBzdGF0ZV9pbmRleCwgbWlzYywgbWlzYzIpOworCQkJc3RhdGVfaW5kZXgrKzsKKwkJCWJyZWFrOworCQl9CisJfQorCS8qIGxhc3QgbW9kZSBpcyB1c3VhbGx5IGRlZmF1bHQgKi8KKwlpZiAocmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZV9pbmRleCA9PSAtMSkgeworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleCAtIDFdLnR5cGUgPQorCQkJUE9XRVJfU1RBVEVfVFlQRV9ERUZBVUxUOworCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gc3RhdGVfaW5kZXggLSAxOworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleCAtIDFdLmRlZmF1bHRfY2xvY2tfbW9kZSA9CisJCQkmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXggLSAxXS5jbG9ja19pbmZvWzBdOworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgJj0KKwkJCX5SQURFT05fUE1fU1RBVEVfU0lOR0xFX0RJU1BMQVlfT05MWTsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm1pc2MgPSAwOworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubWlzYzIgPSAwOworCX0KKwlyZXR1cm4gc3RhdGVfaW5kZXg7Cit9CisKK3N0YXRpYyB2b2lkIHJhZGVvbl9hdG9tYmlvc19hZGRfcHBsaWJfdGhlcm1hbF9jb250cm9sbGVyKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJCQkJCSBBVE9NX1BQTElCX1RIRVJNQUxDT05UUk9MTEVSICpjb250cm9sbGVyKQoreworCXN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgaTJjX2J1czsKKworCS8qIGFkZCB0aGUgaTJjIGJ1cyBmb3IgdGhlcm1hbC9mYW4gY2hpcCAqLworCWlmIChjb250cm9sbGVyLT51Y1R5cGUgPiAwKSB7CisJCWlmIChjb250cm9sbGVyLT51Y1R5cGUgPT0gQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9SVjZ4eCkgeworCQkJRFJNX0lORk8oIkludGVybmFsIHRoZXJtYWwgY29udHJvbGxlciAlcyBmYW4gY29udHJvbFxuIiwKKwkJCQkgKGNvbnRyb2xsZXItPnVjRmFuUGFyYW1ldGVycyAmCisJCQkJICBBVE9NX1BQX0ZBTlBBUkFNRVRFUlNfTk9GQU4pID8gIndpdGhvdXQiIDogIndpdGgiKTsKKwkJCXJkZXYtPnBtLmludF90aGVybWFsX3R5cGUgPSBUSEVSTUFMX1RZUEVfUlY2WFg7CisJCX0gZWxzZSBpZiAoY29udHJvbGxlci0+dWNUeXBlID09IEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfUlY3NzApIHsKKwkJCURSTV9JTkZPKCJJbnRlcm5hbCB0aGVybWFsIGNvbnRyb2xsZXIgJXMgZmFuIGNvbnRyb2xcbiIsCisJCQkJIChjb250cm9sbGVyLT51Y0ZhblBhcmFtZXRlcnMgJgorCQkJCSAgQVRPTV9QUF9GQU5QQVJBTUVURVJTX05PRkFOKSA/ICJ3aXRob3V0IiA6ICJ3aXRoIik7CisJCQlyZGV2LT5wbS5pbnRfdGhlcm1hbF90eXBlID0gVEhFUk1BTF9UWVBFX1JWNzcwOworCQl9IGVsc2UgaWYgKGNvbnRyb2xsZXItPnVjVHlwZSA9PSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX0VWRVJHUkVFTikgeworCQkJRFJNX0lORk8oIkludGVybmFsIHRoZXJtYWwgY29udHJvbGxlciAlcyBmYW4gY29udHJvbFxuIiwKKwkJCQkgKGNvbnRyb2xsZXItPnVjRmFuUGFyYW1ldGVycyAmCisJCQkJICBBVE9NX1BQX0ZBTlBBUkFNRVRFUlNfTk9GQU4pID8gIndpdGhvdXQiIDogIndpdGgiKTsKKwkJCXJkZXYtPnBtLmludF90aGVybWFsX3R5cGUgPSBUSEVSTUFMX1RZUEVfRVZFUkdSRUVOOworCQl9IGVsc2UgaWYgKGNvbnRyb2xsZXItPnVjVHlwZSA9PSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX1NVTU8pIHsKKwkJCURSTV9JTkZPKCJJbnRlcm5hbCB0aGVybWFsIGNvbnRyb2xsZXIgJXMgZmFuIGNvbnRyb2xcbiIsCisJCQkJIChjb250cm9sbGVyLT51Y0ZhblBhcmFtZXRlcnMgJgorCQkJCSAgQVRPTV9QUF9GQU5QQVJBTUVURVJTX05PRkFOKSA/ICJ3aXRob3V0IiA6ICJ3aXRoIik7CisJCQlyZGV2LT5wbS5pbnRfdGhlcm1hbF90eXBlID0gVEhFUk1BTF9UWVBFX1NVTU87CisJCX0gZWxzZSBpZiAoY29udHJvbGxlci0+dWNUeXBlID09IEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfTklTTEFORFMpIHsKKwkJCURSTV9JTkZPKCJJbnRlcm5hbCB0aGVybWFsIGNvbnRyb2xsZXIgJXMgZmFuIGNvbnRyb2xcbiIsCisJCQkJIChjb250cm9sbGVyLT51Y0ZhblBhcmFtZXRlcnMgJgorCQkJCSAgQVRPTV9QUF9GQU5QQVJBTUVURVJTX05PRkFOKSA/ICJ3aXRob3V0IiA6ICJ3aXRoIik7CisJCQlyZGV2LT5wbS5pbnRfdGhlcm1hbF90eXBlID0gVEhFUk1BTF9UWVBFX05JOworCQl9IGVsc2UgaWYgKChjb250cm9sbGVyLT51Y1R5cGUgPT0KKwkJCSAgICBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX0VYVEVSTkFMX0dQSU8pIHx8CisJCQkgICAoY29udHJvbGxlci0+dWNUeXBlID09CisJCQkgICAgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9BRFQ3NDczX1dJVEhfSU5URVJOQUwpIHx8CisJCQkgICAoY29udHJvbGxlci0+dWNUeXBlID09CisJCQkgICAgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9FTUMyMTAzX1dJVEhfSU5URVJOQUwpKSB7CisJCQlEUk1fSU5GTygiU3BlY2lhbCB0aGVybWFsIGNvbnRyb2xsZXIgY29uZmlnXG4iKTsKKwkJfSBlbHNlIHsKKwkJCURSTV9JTkZPKCJQb3NzaWJsZSAlcyB0aGVybWFsIGNvbnRyb2xsZXIgYXQgMHglMDJ4ICVzIGZhbiBjb250cm9sXG4iLAorCQkJCSBwcF9saWJfdGhlcm1hbF9jb250cm9sbGVyX25hbWVzW2NvbnRyb2xsZXItPnVjVHlwZV0sCisJCQkJIGNvbnRyb2xsZXItPnVjSTJjQWRkcmVzcyA+PiAxLAorCQkJCSAoY29udHJvbGxlci0+dWNGYW5QYXJhbWV0ZXJzICYKKwkJCQkgIEFUT01fUFBfRkFOUEFSQU1FVEVSU19OT0ZBTikgPyAid2l0aG91dCIgOiAid2l0aCIpOworCQkJaTJjX2J1cyA9IHJhZGVvbl9sb29rdXBfaTJjX2dwaW8ocmRldiwgY29udHJvbGxlci0+dWNJMmNMaW5lKTsKKwkJCXJkZXYtPnBtLmkyY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCAmaTJjX2J1cyk7CisJCQlpZiAocmRldi0+cG0uaTJjX2J1cykgeworCQkJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvID0geyB9OworCQkJCWNvbnN0IGNoYXIgKm5hbWUgPSBwcF9saWJfdGhlcm1hbF9jb250cm9sbGVyX25hbWVzW2NvbnRyb2xsZXItPnVjVHlwZV07CisJCQkJaW5mby5hZGRyID0gY29udHJvbGxlci0+dWNJMmNBZGRyZXNzID4+IDE7CisJCQkJc3RybGNweShpbmZvLnR5cGUsIG5hbWUsIHNpemVvZihpbmZvLnR5cGUpKTsKKwkJCQlpMmNfbmV3X2RldmljZSgmcmRldi0+cG0uaTJjX2J1cy0+YWRhcHRlciwgJmluZm8pOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdTE2IHJhZGVvbl9hdG9tYmlvc19nZXRfZGVmYXVsdF92ZGRjKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCByYWRlb25fbW9kZV9pbmZvICptb2RlX2luZm8gPSAmcmRldi0+bW9kZV9pbmZvOworCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIEZpcm13YXJlSW5mbyk7CisJdTggZnJldiwgY3JldjsKKwl1MTYgZGF0YV9vZmZzZXQ7CisJdW5pb24gZmlybXdhcmVfaW5mbyAqZmlybXdhcmVfaW5mbzsKKwl1MTYgdmRkYyA9IDA7CisKKwlpZiAoYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgaW5kZXgsIE5VTEwsCisJCQkJICAgJmZyZXYsICZjcmV2LCAmZGF0YV9vZmZzZXQpKSB7CisJCWZpcm13YXJlX2luZm8gPQorCQkJKHVuaW9uIGZpcm13YXJlX2luZm8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKworCQkJCQkJZGF0YV9vZmZzZXQpOworCQl2ZGRjID0gZmlybXdhcmVfaW5mby0+aW5mb18xNC51c0Jvb3RVcFZERENWb2x0YWdlOworCX0KKworCXJldHVybiB2ZGRjOworfQorCitzdGF0aWMgdm9pZCByYWRlb25fYXRvbWJpb3NfcGFyc2VfcHBsaWJfbm9uX2Nsb2NrX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkJCQkgICAgICAgaW50IHN0YXRlX2luZGV4LCBpbnQgbW9kZV9pbmRleCwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgX0FUT01fUFBMSUJfTk9OQ0xPQ0tfSU5GTyAqbm9uX2Nsb2NrX2luZm8pCit7CisJaW50IGo7CisJdTMyIG1pc2MgPSBsZTMyX3RvX2NwdShub25fY2xvY2tfaW5mby0+dWxDYXBzQW5kU2V0dGluZ3MpOworCXUzMiBtaXNjMiA9IGxlMTZfdG9fY3B1KG5vbl9jbG9ja19pbmZvLT51c0NsYXNzaWZpY2F0aW9uKTsKKwl1MTYgdmRkYyA9IHJhZGVvbl9hdG9tYmlvc19nZXRfZGVmYXVsdF92ZGRjKHJkZXYpOworCisJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm1pc2MgPSBtaXNjOworCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5taXNjMiA9IG1pc2MyOworCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5wY2llX2xhbmVzID0KKwkJKChtaXNjICYgQVRPTV9QUExJQl9QQ0lFX0xJTktfV0lEVEhfTUFTSykgPj4KKwkJIEFUT01fUFBMSUJfUENJRV9MSU5LX1dJRFRIX1NISUZUKSArIDE7CisJc3dpdGNoIChtaXNjMiAmIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfTUFTSykgeworCWNhc2UgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VSV9CQVRURVJZOgorCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQlQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlk7CisJCWJyZWFrOworCWNhc2UgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VSV9CQUxBTkNFRDoKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJUE9XRVJfU1RBVEVfVFlQRV9CQUxBTkNFRDsKKwkJYnJlYWs7CisJY2FzZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX1BFUkZPUk1BTkNFOgorCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQlQT1dFUl9TVEFURV9UWVBFX1BFUkZPUk1BTkNFOworCQlicmVhazsKKwljYXNlIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfTk9ORToKKwkJaWYgKG1pc2MyICYgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl8zRFBFUkZPUk1BTkNFKQorCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCVBPV0VSX1NUQVRFX1RZUEVfUEVSRk9STUFOQ0U7CisJCWJyZWFrOworCX0KKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgPSAwOworCWlmIChtaXNjICYgQVRPTV9QUExJQl9TSU5HTEVfRElTUExBWV9PTkxZKQorCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgfD0KKwkJCVJBREVPTl9QTV9TVEFURV9TSU5HTEVfRElTUExBWV9PTkxZOworCWlmIChtaXNjMiAmIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fQk9PVCkgeworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQlQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQ7CisJCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXggPSBzdGF0ZV9pbmRleDsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmRlZmF1bHRfY2xvY2tfbW9kZSA9CisJCQkmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleCAtIDFdOworCQlpZiAoQVNJQ19JU19EQ0U1KHJkZXYpKSB7CisJCQkvKiBOSSBjaGlwcyBwb3N0IHdpdGhvdXQgTUMgdWNvZGUsIHNvIGRlZmF1bHQgY2xvY2tzIGFyZSBzdHJvYmUgbW9kZSBvbmx5ICovCisJCQlyZGV2LT5wbS5kZWZhdWx0X3NjbGsgPSByZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrOworCQkJcmRldi0+cG0uZGVmYXVsdF9tY2xrID0gcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsazsKKwkJCXJkZXYtPnBtLmRlZmF1bHRfdmRkYyA9IHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2Uudm9sdGFnZTsKKwkJfSBlbHNlIHsKKwkJCS8qIHBhdGNoIHRoZSB0YWJsZSB2YWx1ZXMgd2l0aCB0aGUgZGVmYXVsdCBzbGNrL21jbGsgZnJvbSBmaXJtd2FyZSBpbmZvICovCisJCQlmb3IgKGogPSAwOyBqIDwgbW9kZV9pbmRleDsgaisrKSB7CisJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bal0ubWNsayA9CisJCQkJCXJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsazsKKwkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1tqXS5zY2xrID0KKwkJCQkJcmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrOworCQkJCWlmICh2ZGRjKQorCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1tqXS52b2x0YWdlLnZvbHRhZ2UgPQorCQkJCQkJdmRkYzsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIGJvb2wgcmFkZW9uX2F0b21iaW9zX3BhcnNlX3BwbGliX2Nsb2NrX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkJCQkgICBpbnQgc3RhdGVfaW5kZXgsIGludCBtb2RlX2luZGV4LAorCQkJCQkJICAgdW5pb24gcHBsaWJfY2xvY2tfaW5mbyAqY2xvY2tfaW5mbykKK3sKKwl1MzIgc2NsaywgbWNsazsKKworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApIHsKKwkJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1BBTE0pIHsKKwkJCXNjbGsgPSBsZTE2X3RvX2NwdShjbG9ja19pbmZvLT5zdW1vLnVzRW5naW5lQ2xvY2tMb3cpOworCQkJc2NsayB8PSBjbG9ja19pbmZvLT5zdW1vLnVjRW5naW5lQ2xvY2tIaWdoIDw8IDE2OworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0uc2NsayA9IHNjbGs7CisJCX0gZWxzZSB7CisJCQlzY2xrID0gbGUxNl90b19jcHUoY2xvY2tfaW5mby0+cnM3ODAudXNMb3dFbmdpbmVDbG9ja0xvdyk7CisJCQlzY2xrIHw9IGNsb2NrX2luZm8tPnJzNzgwLnVjTG93RW5naW5lQ2xvY2tIaWdoIDw8IDE2OworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0uc2NsayA9IHNjbGs7CisJCX0KKwl9IGVsc2UgaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgeworCQlzY2xrID0gbGUxNl90b19jcHUoY2xvY2tfaW5mby0+ZXZlcmdyZWVuLnVzRW5naW5lQ2xvY2tMb3cpOworCQlzY2xrIHw9IGNsb2NrX2luZm8tPmV2ZXJncmVlbi51Y0VuZ2luZUNsb2NrSGlnaCA8PCAxNjsKKwkJbWNsayA9IGxlMTZfdG9fY3B1KGNsb2NrX2luZm8tPmV2ZXJncmVlbi51c01lbW9yeUNsb2NrTG93KTsKKwkJbWNsayB8PSBjbG9ja19pbmZvLT5ldmVyZ3JlZW4udWNNZW1vcnlDbG9ja0hpZ2ggPDwgMTY7CisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLm1jbGsgPSBtY2xrOworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS5zY2xrID0gc2NsazsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0udm9sdGFnZS50eXBlID0KKwkJCVZPTFRBR0VfU1c7CisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnZvbHRhZ2Uudm9sdGFnZSA9CisJCQljbG9ja19pbmZvLT5ldmVyZ3JlZW4udXNWRERDOworCX0gZWxzZSB7CisJCXNjbGsgPSBsZTE2X3RvX2NwdShjbG9ja19pbmZvLT5yNjAwLnVzRW5naW5lQ2xvY2tMb3cpOworCQlzY2xrIHw9IGNsb2NrX2luZm8tPnI2MDAudWNFbmdpbmVDbG9ja0hpZ2ggPDwgMTY7CisJCW1jbGsgPSBsZTE2X3RvX2NwdShjbG9ja19pbmZvLT5yNjAwLnVzTWVtb3J5Q2xvY2tMb3cpOworCQltY2xrIHw9IGNsb2NrX2luZm8tPnI2MDAudWNNZW1vcnlDbG9ja0hpZ2ggPDwgMTY7CisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLm1jbGsgPSBtY2xrOworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS5zY2xrID0gc2NsazsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0udm9sdGFnZS50eXBlID0KKwkJCVZPTFRBR0VfU1c7CisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnZvbHRhZ2Uudm9sdGFnZSA9CisJCQljbG9ja19pbmZvLT5yNjAwLnVzVkREQzsKKwl9CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJCS8qIHNraXAgaW52YWxpZCBtb2RlcyAqLworCQlpZiAocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0uc2NsayA9PSAwKQorCQkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSB7CisJCS8qIHNraXAgaW52YWxpZCBtb2RlcyAqLworCQlpZiAoKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLm1jbGsgPT0gMCkgfHwKKwkJICAgIChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS5zY2xrID09IDApKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCByYWRlb25fYXRvbWJpb3NfcGFyc2VfcG93ZXJfdGFibGVfNF81KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCByYWRlb25fbW9kZV9pbmZvICptb2RlX2luZm8gPSAmcmRldi0+bW9kZV9pbmZvOworCXN0cnVjdCBfQVRPTV9QUExJQl9OT05DTE9DS19JTkZPICpub25fY2xvY2tfaW5mbzsKKwl1bmlvbiBwcGxpYl9wb3dlcl9zdGF0ZSAqcG93ZXJfc3RhdGU7CisJaW50IGksIGo7CisJaW50IHN0YXRlX2luZGV4ID0gMCwgbW9kZV9pbmRleCA9IDA7CisJdW5pb24gcHBsaWJfY2xvY2tfaW5mbyAqY2xvY2tfaW5mbzsKKwlib29sIHZhbGlkOworCXVuaW9uIHBvd2VyX2luZm8gKnBvd2VyX2luZm87CisJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgUG93ZXJQbGF5SW5mbyk7CisgICAgICAgIHUxNiBkYXRhX29mZnNldDsKKwl1OCBmcmV2LCBjcmV2OworCisJaWYgKCFhdG9tX3BhcnNlX2RhdGFfaGVhZGVyKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LCBpbmRleCwgTlVMTCwKKwkJCQkgICAmZnJldiwgJmNyZXYsICZkYXRhX29mZnNldCkpCisJCXJldHVybiBzdGF0ZV9pbmRleDsKKwlwb3dlcl9pbmZvID0gKHVuaW9uIHBvd2VyX2luZm8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCk7CisKKwlyYWRlb25fYXRvbWJpb3NfYWRkX3BwbGliX3RoZXJtYWxfY29udHJvbGxlcihyZGV2LCAmcG93ZXJfaW5mby0+cHBsaWIuc1RoZXJtYWxDb250cm9sbGVyKTsKKwkvKiBmaXJzdCBtb2RlIGlzIHVzdWFsbHkgZGVmYXVsdCwgZm9sbG93ZWQgYnkgbG93IHRvIGhpZ2ggKi8KKwlmb3IgKGkgPSAwOyBpIDwgcG93ZXJfaW5mby0+cHBsaWIudWNOdW1TdGF0ZXM7IGkrKykgeworCQltb2RlX2luZGV4ID0gMDsKKwkJcG93ZXJfc3RhdGUgPSAodW5pb24gcHBsaWJfcG93ZXJfc3RhdGUgKikKKwkJCShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArIGRhdGFfb2Zmc2V0ICsKKwkJCSBsZTE2X3RvX2NwdShwb3dlcl9pbmZvLT5wcGxpYi51c1N0YXRlQXJyYXlPZmZzZXQpICsKKwkJCSBpICogcG93ZXJfaW5mby0+cHBsaWIudWNTdGF0ZUVudHJ5U2l6ZSk7CisJCW5vbl9jbG9ja19pbmZvID0gKHN0cnVjdCBfQVRPTV9QUExJQl9OT05DTE9DS19JTkZPICopCisJCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCArCisJCQkgbGUxNl90b19jcHUocG93ZXJfaW5mby0+cHBsaWIudXNOb25DbG9ja0luZm9BcnJheU9mZnNldCkgKworCQkJIChwb3dlcl9zdGF0ZS0+djEudWNOb25DbG9ja1N0YXRlSW5kZXggKgorCQkJICBwb3dlcl9pbmZvLT5wcGxpYi51Y05vbkNsb2NrU2l6ZSkpOworCQlmb3IgKGogPSAwOyBqIDwgKHBvd2VyX2luZm8tPnBwbGliLnVjU3RhdGVFbnRyeVNpemUgLSAxKTsgaisrKSB7CisJCQljbG9ja19pbmZvID0gKHVuaW9uIHBwbGliX2Nsb2NrX2luZm8gKikKKwkJCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCArCisJCQkJIGxlMTZfdG9fY3B1KHBvd2VyX2luZm8tPnBwbGliLnVzQ2xvY2tJbmZvQXJyYXlPZmZzZXQpICsKKwkJCQkgKHBvd2VyX3N0YXRlLT52MS51Y0Nsb2NrU3RhdGVJbmRpY2VzW2pdICoKKwkJCQkgIHBvd2VyX2luZm8tPnBwbGliLnVjQ2xvY2tJbmZvU2l6ZSkpOworCQkJdmFsaWQgPSByYWRlb25fYXRvbWJpb3NfcGFyc2VfcHBsaWJfY2xvY2tfaW5mbyhyZGV2LAorCQkJCQkJCQkgICAgICAgc3RhdGVfaW5kZXgsIG1vZGVfaW5kZXgsCisJCQkJCQkJCSAgICAgICBjbG9ja19pbmZvKTsKKwkJCWlmICh2YWxpZCkKKwkJCQltb2RlX2luZGV4Kys7CisJCX0KKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm51bV9jbG9ja19tb2RlcyA9IG1vZGVfaW5kZXg7CisJCWlmIChtb2RlX2luZGV4KSB7CisJCQlyYWRlb25fYXRvbWJpb3NfcGFyc2VfcHBsaWJfbm9uX2Nsb2NrX2luZm8ocmRldiwgc3RhdGVfaW5kZXgsIG1vZGVfaW5kZXgsCisJCQkJCQkJCSAgIG5vbl9jbG9ja19pbmZvKTsKKwkJCXN0YXRlX2luZGV4Kys7CisJCX0KKwl9CisJLyogaWYgbXVsdGlwbGUgY2xvY2sgbW9kZXMsIG1hcmsgdGhlIGxvd2VzdCBhcyBubyBkaXNwbGF5ICovCisJZm9yIChpID0gMDsgaSA8IHN0YXRlX2luZGV4OyBpKyspIHsKKwkJaWYgKHJkZXYtPnBtLnBvd2VyX3N0YXRlW2ldLm51bV9jbG9ja19tb2RlcyA+IDEpCisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtpXS5jbG9ja19pbmZvWzBdLmZsYWdzIHw9CisJCQkJUkFERU9OX1BNX01PREVfTk9fRElTUExBWTsKKwl9CisJLyogZmlyc3QgbW9kZSBpcyB1c3VhbGx5IGRlZmF1bHQgKi8KKwlpZiAocmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZV9pbmRleCA9PSAtMSkgeworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVswXS50eXBlID0KKwkJCVBPV0VSX1NUQVRFX1RZUEVfREVGQVVMVDsKKwkJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZV9pbmRleCA9IDA7CisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlWzBdLmRlZmF1bHRfY2xvY2tfbW9kZSA9CisJCQkmcmRldi0+cG0ucG93ZXJfc3RhdGVbMF0uY2xvY2tfaW5mb1swXTsKKwl9CisJcmV0dXJuIHN0YXRlX2luZGV4OworfQorCitzdGF0aWMgaW50IHJhZGVvbl9hdG9tYmlvc19wYXJzZV9wb3dlcl90YWJsZV82KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCByYWRlb25fbW9kZV9pbmZvICptb2RlX2luZm8gPSAmcmRldi0+bW9kZV9pbmZvOworCXN0cnVjdCBfQVRPTV9QUExJQl9OT05DTE9DS19JTkZPICpub25fY2xvY2tfaW5mbzsKKwl1bmlvbiBwcGxpYl9wb3dlcl9zdGF0ZSAqcG93ZXJfc3RhdGU7CisJaW50IGksIGosIG5vbl9jbG9ja19hcnJheV9pbmRleCwgY2xvY2tfYXJyYXlfaW5kZXg7CisJaW50IHN0YXRlX2luZGV4ID0gMCwgbW9kZV9pbmRleCA9IDA7CisJdW5pb24gcHBsaWJfY2xvY2tfaW5mbyAqY2xvY2tfaW5mbzsKKwlzdHJ1Y3QgU3RhdGVBcnJheSAqc3RhdGVfYXJyYXk7CisJc3RydWN0IENsb2NrSW5mb0FycmF5ICpjbG9ja19pbmZvX2FycmF5OworCXN0cnVjdCBOb25DbG9ja0luZm9BcnJheSAqbm9uX2Nsb2NrX2luZm9fYXJyYXk7CisJYm9vbCB2YWxpZDsKKwl1bmlvbiBwb3dlcl9pbmZvICpwb3dlcl9pbmZvOworCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIFBvd2VyUGxheUluZm8pOworICAgICAgICB1MTYgZGF0YV9vZmZzZXQ7CisJdTggZnJldiwgY3JldjsKKworCWlmICghYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgaW5kZXgsIE5VTEwsCisJCQkJICAgJmZyZXYsICZjcmV2LCAmZGF0YV9vZmZzZXQpKQorCQlyZXR1cm4gc3RhdGVfaW5kZXg7CisJcG93ZXJfaW5mbyA9ICh1bmlvbiBwb3dlcl9pbmZvICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQpOworCisJcmFkZW9uX2F0b21iaW9zX2FkZF9wcGxpYl90aGVybWFsX2NvbnRyb2xsZXIocmRldiwgJnBvd2VyX2luZm8tPnBwbGliLnNUaGVybWFsQ29udHJvbGxlcik7CisJc3RhdGVfYXJyYXkgPSAoc3RydWN0IFN0YXRlQXJyYXkgKikKKwkJKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQgKworCQkgcG93ZXJfaW5mby0+cHBsaWIudXNTdGF0ZUFycmF5T2Zmc2V0KTsKKwljbG9ja19pbmZvX2FycmF5ID0gKHN0cnVjdCBDbG9ja0luZm9BcnJheSAqKQorCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCArCisJCSBwb3dlcl9pbmZvLT5wcGxpYi51c0Nsb2NrSW5mb0FycmF5T2Zmc2V0KTsKKwlub25fY2xvY2tfaW5mb19hcnJheSA9IChzdHJ1Y3QgTm9uQ2xvY2tJbmZvQXJyYXkgKikKKwkJKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQgKworCQkgcG93ZXJfaW5mby0+cHBsaWIudXNOb25DbG9ja0luZm9BcnJheU9mZnNldCk7CisJZm9yIChpID0gMDsgaSA8IHN0YXRlX2FycmF5LT51Y051bUVudHJpZXM7IGkrKykgeworCQltb2RlX2luZGV4ID0gMDsKKwkJcG93ZXJfc3RhdGUgPSAodW5pb24gcHBsaWJfcG93ZXJfc3RhdGUgKikmc3RhdGVfYXJyYXktPnN0YXRlc1tpXTsKKwkJLyogWFhYIHRoaXMgbWlnaHQgYmUgYW4gaW5hZ3VhIGJ1Zy4uLiAqLworCQlub25fY2xvY2tfYXJyYXlfaW5kZXggPSBpOyAvKiBwb3dlcl9zdGF0ZS0+djIubm9uQ2xvY2tJbmZvSW5kZXggKi8KKwkJbm9uX2Nsb2NrX2luZm8gPSAoc3RydWN0IF9BVE9NX1BQTElCX05PTkNMT0NLX0lORk8gKikKKwkJCSZub25fY2xvY2tfaW5mb19hcnJheS0+bm9uQ2xvY2tJbmZvW25vbl9jbG9ja19hcnJheV9pbmRleF07CisJCWZvciAoaiA9IDA7IGogPCBwb3dlcl9zdGF0ZS0+djIudWNOdW1EUE1MZXZlbHM7IGorKykgeworCQkJY2xvY2tfYXJyYXlfaW5kZXggPSBwb3dlcl9zdGF0ZS0+djIuY2xvY2tJbmZvSW5kZXhbal07CisJCQkvKiBYWFggdGhpcyBtaWdodCBiZSBhbiBpbmFndWEgYnVnLi4uICovCisJCQlpZiAoY2xvY2tfYXJyYXlfaW5kZXggPj0gY2xvY2tfaW5mb19hcnJheS0+dWNOdW1FbnRyaWVzKQorCQkJCWNvbnRpbnVlOworCQkJY2xvY2tfaW5mbyA9ICh1bmlvbiBwcGxpYl9jbG9ja19pbmZvICopCisJCQkJJmNsb2NrX2luZm9fYXJyYXktPmNsb2NrSW5mb1tjbG9ja19hcnJheV9pbmRleF07CisJCQl2YWxpZCA9IHJhZGVvbl9hdG9tYmlvc19wYXJzZV9wcGxpYl9jbG9ja19pbmZvKHJkZXYsCisJCQkJCQkJCSAgICAgICBzdGF0ZV9pbmRleCwgbW9kZV9pbmRleCwKKwkJCQkJCQkJICAgICAgIGNsb2NrX2luZm8pOworCQkJaWYgKHZhbGlkKQorCQkJCW1vZGVfaW5kZXgrKzsKKwkJfQorCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gbW9kZV9pbmRleDsKKwkJaWYgKG1vZGVfaW5kZXgpIHsKKwkJCXJhZGVvbl9hdG9tYmlvc19wYXJzZV9wcGxpYl9ub25fY2xvY2tfaW5mbyhyZGV2LCBzdGF0ZV9pbmRleCwgbW9kZV9pbmRleCwKKwkJCQkJCQkJICAgbm9uX2Nsb2NrX2luZm8pOworCQkJc3RhdGVfaW5kZXgrKzsKKwkJfQorCX0KKwkvKiBpZiBtdWx0aXBsZSBjbG9jayBtb2RlcywgbWFyayB0aGUgbG93ZXN0IGFzIG5vIGRpc3BsYXkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3RhdGVfaW5kZXg7IGkrKykgeworCQlpZiAocmRldi0+cG0ucG93ZXJfc3RhdGVbaV0ubnVtX2Nsb2NrX21vZGVzID4gMSkKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW2ldLmNsb2NrX2luZm9bMF0uZmxhZ3MgfD0KKwkJCQlSQURFT05fUE1fTU9ERV9OT19ESVNQTEFZOworCX0KKwkvKiBmaXJzdCBtb2RlIGlzIHVzdWFsbHkgZGVmYXVsdCAqLworCWlmIChyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID09IC0xKSB7CisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlWzBdLnR5cGUgPQorCQkJUE9XRVJfU1RBVEVfVFlQRV9ERUZBVUxUOworCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gMDsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbMF0uZGVmYXVsdF9jbG9ja19tb2RlID0KKwkJCSZyZGV2LT5wbS5wb3dlcl9zdGF0ZVswXS5jbG9ja19pbmZvWzBdOworCX0KKwlyZXR1cm4gc3RhdGVfaW5kZXg7Cit9CisKIHZvaWQgcmFkZW9uX2F0b21iaW9zX2dldF9wb3dlcl9tb2RlcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKIAlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBQb3dlclBsYXlJbmZvKTsKIAl1MTYgZGF0YV9vZmZzZXQ7CiAJdTggZnJldiwgY3JldjsKLQl1MzIgbWlzYywgbWlzYzIgPSAwLCBzY2xrLCBtY2xrOwotCXVuaW9uIHBvd2VyX2luZm8gKnBvd2VyX2luZm87Ci0Jc3RydWN0IF9BVE9NX1BQTElCX05PTkNMT0NLX0lORk8gKm5vbl9jbG9ja19pbmZvOwotCXN0cnVjdCBfQVRPTV9QUExJQl9TVEFURSAqcG93ZXJfc3RhdGU7Ci0JaW50IG51bV9tb2RlcyA9IDAsIGksIGo7Ci0JaW50IHN0YXRlX2luZGV4ID0gMCwgbW9kZV9pbmRleCA9IDA7Ci0Jc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyBpMmNfYnVzOworCWludCBzdGF0ZV9pbmRleCA9IDA7CiAKIAlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gLTE7CiAKIAlpZiAoYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgaW5kZXgsIE5VTEwsCiAJCQkJICAgJmZyZXYsICZjcmV2LCAmZGF0YV9vZmZzZXQpKSB7Ci0JCXBvd2VyX2luZm8gPSAodW5pb24gcG93ZXJfaW5mbyAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArIGRhdGFfb2Zmc2V0KTsKLQkJaWYgKGZyZXYgPCA0KSB7Ci0JCQkvKiBhZGQgdGhlIGkyYyBidXMgZm9yIHRoZXJtYWwvZmFuIGNoaXAgKi8KLQkJCWlmIChwb3dlcl9pbmZvLT5pbmZvLnVjT3ZlcmRyaXZlVGhlcm1hbENvbnRyb2xsZXIgPiAwKSB7Ci0JCQkJRFJNX0lORk8oIlBvc3NpYmxlICVzIHRoZXJtYWwgY29udHJvbGxlciBhdCAweCUwMnhcbiIsCi0JCQkJCSB0aGVybWFsX2NvbnRyb2xsZXJfbmFtZXNbcG93ZXJfaW5mby0+aW5mby51Y092ZXJkcml2ZVRoZXJtYWxDb250cm9sbGVyXSwKLQkJCQkJIHBvd2VyX2luZm8tPmluZm8udWNPdmVyZHJpdmVDb250cm9sbGVyQWRkcmVzcyA+PiAxKTsKLQkJCQlpMmNfYnVzID0gcmFkZW9uX2xvb2t1cF9pMmNfZ3BpbyhyZGV2LCBwb3dlcl9pbmZvLT5pbmZvLnVjT3ZlcmRyaXZlSTJjTGluZSk7Ci0JCQkJcmRldi0+cG0uaTJjX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsICZpMmNfYnVzKTsKLQkJCQlpZiAocmRldi0+cG0uaTJjX2J1cykgewotCQkJCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbyA9IHsgfTsKLQkJCQkJY29uc3QgY2hhciAqbmFtZSA9IHRoZXJtYWxfY29udHJvbGxlcl9uYW1lc1twb3dlcl9pbmZvLT5pbmZvLgotCQkJCQkJCQkJCSAgICB1Y092ZXJkcml2ZVRoZXJtYWxDb250cm9sbGVyXTsKLQkJCQkJaW5mby5hZGRyID0gcG93ZXJfaW5mby0+aW5mby51Y092ZXJkcml2ZUNvbnRyb2xsZXJBZGRyZXNzID4+IDE7Ci0JCQkJCXN0cmxjcHkoaW5mby50eXBlLCBuYW1lLCBzaXplb2YoaW5mby50eXBlKSk7Ci0JCQkJCWkyY19uZXdfZGV2aWNlKCZyZGV2LT5wbS5pMmNfYnVzLT5hZGFwdGVyLCAmaW5mbyk7Ci0JCQkJfQotCQkJfQotCQkJbnVtX21vZGVzID0gcG93ZXJfaW5mby0+aW5mby51Y051bU9mUG93ZXJNb2RlRW50cmllczsKLQkJCWlmIChudW1fbW9kZXMgPiBBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DSykKLQkJCQludW1fbW9kZXMgPSBBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DSzsKLQkJCS8qIGxhc3QgbW9kZSBpcyB1c3VhbGx5IGRlZmF1bHQsIGFycmF5IGlzIGxvdyB0byBoaWdoICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgbnVtX21vZGVzOyBpKyspIHsKLQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPSBWT0xUQUdFX05PTkU7Ci0JCQkJc3dpdGNoIChmcmV2KSB7Ci0JCQkJY2FzZSAxOgotCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gMTsKLQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA9Ci0JCQkJCQlsZTE2X3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvLmFzUG93ZXJQbGF5SW5mb1tpXS51c01lbW9yeUNsb2NrKTsKLQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9Ci0JCQkJCQlsZTE2X3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvLmFzUG93ZXJQbGF5SW5mb1tpXS51c0VuZ2luZUNsb2NrKTsKLQkJCQkJLyogc2tpcCBpbnZhbGlkIG1vZGVzICovCi0JCQkJCWlmICgocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA9PSAwKSB8fAotCQkJCQkgICAgKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnNjbGsgPT0gMCkpCi0JCQkJCQljb250aW51ZTsKLQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnBjaWVfbGFuZXMgPQotCQkJCQkJcG93ZXJfaW5mby0+aW5mby5hc1Bvd2VyUGxheUluZm9baV0udWNOdW1QY2lFTGFuZXM7Ci0JCQkJCW1pc2MgPSBsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvLmFzUG93ZXJQbGF5SW5mb1tpXS51bE1pc2NJbmZvKTsKLQkJCQkJaWYgKChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19WT0xUQUdFX0RST1BfU1VQUE9SVCkgfHwKLQkJCQkJICAgIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19WT0xUQUdFX0RST1BfQUNUSVZFX0hJR0gpKSB7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPQotCQkJCQkJCVZPTFRBR0VfR1BJTzsKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZ3BpbyA9Ci0JCQkJCQkJcmFkZW9uX2xvb2t1cF9ncGlvKHJkZXYsCi0JCQkJCQkJcG93ZXJfaW5mby0+aW5mby5hc1Bvd2VyUGxheUluZm9baV0udWNWb2x0YWdlRHJvcEluZGV4KTsKLQkJCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19WT0xUQUdFX0RST1BfQUNUSVZFX0hJR0gpCi0JCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5hY3RpdmVfaGlnaCA9Ci0JCQkJCQkJCXRydWU7Ci0JCQkJCQllbHNlCi0JCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5hY3RpdmVfaGlnaCA9Ci0JCQkJCQkJCWZhbHNlOwotCQkJCQl9IGVsc2UgaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1BST0dSQU1fVk9MVEFHRSkgewotCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS50eXBlID0KLQkJCQkJCQlWT0xUQUdFX1ZEREM7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnZkZGNfaWQgPQotCQkJCQkJCXBvd2VyX2luZm8tPmluZm8uYXNQb3dlclBsYXlJbmZvW2ldLnVjVm9sdGFnZURyb3BJbmRleDsKLQkJCQkJfQotCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgPSBSQURFT05fUE1fU1RBVEVfU0lOR0xFX0RJU1BMQVlfT05MWTsKLQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm1pc2MgPSBtaXNjOwotCQkJCQkvKiBvcmRlciBtYXR0ZXJzISAqLwotCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fUE9XRVJfU0FWSU5HX01PREUpCi0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9Ci0JCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9QT1dFUlNBVkU7Ci0JCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19ERUZBVUxUX0RDX1NUQVRFX0VOVFJZX1RSVUUpCi0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9Ci0JCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9CQVRURVJZOwotCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fREVGQVVMVF9MT1dfRENfU1RBVEVfRU5UUllfVFJVRSkKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KLQkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlk7Ci0JCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19MT0FEX0JBTEFOQ0VfRU4pCi0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9Ci0JCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9CQUxBTkNFRDsKLQkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPXzNEX0FDQ0VMRVJBVElPTl9FTikgewotCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQotCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfUEVSRk9STUFOQ0U7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgJj0KLQkJCQkJCQl+UkFERU9OX1BNX1NUQVRFX1NJTkdMRV9ESVNQTEFZX09OTFk7Ci0JCQkJCX0KLQkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX0RSSVZFUl9ERUZBVUxUX01PREUpIHsKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KLQkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQ7Ci0JCQkJCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gc3RhdGVfaW5kZXg7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZGVmYXVsdF9jbG9ja19tb2RlID0KLQkJCQkJCQkmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF07Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgJj0KLQkJCQkJCQl+UkFERU9OX1BNX1NUQVRFX1NJTkdMRV9ESVNQTEFZX09OTFk7Ci0JCQkJCX0gZWxzZSBpZiAoc3RhdGVfaW5kZXggPT0gMCkgewotCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uZmxhZ3MgfD0KLQkJCQkJCQlSQURFT05fUE1fTU9ERV9OT19ESVNQTEFZOwotCQkJCQl9Ci0JCQkJCXN0YXRlX2luZGV4Kys7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMjoKLQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm51bV9jbG9ja19tb2RlcyA9IDE7Ci0JCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPQotCQkJCQkJbGUzMl90b19jcHUocG93ZXJfaW5mby0+aW5mb18yLmFzUG93ZXJQbGF5SW5mb1tpXS51bE1lbW9yeUNsb2NrKTsKLQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9Ci0JCQkJCQlsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzIuYXNQb3dlclBsYXlJbmZvW2ldLnVsRW5naW5lQ2xvY2spOwotCQkJCQkvKiBza2lwIGludmFsaWQgbW9kZXMgKi8KLQkJCQkJaWYgKChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID09IDApIHx8Ci0JCQkJCSAgICAocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9PSAwKSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ucGNpZV9sYW5lcyA9Ci0JCQkJCQlwb3dlcl9pbmZvLT5pbmZvXzIuYXNQb3dlclBsYXlJbmZvW2ldLnVjTnVtUGNpRUxhbmVzOwotCQkJCQltaXNjID0gbGUzMl90b19jcHUocG93ZXJfaW5mby0+aW5mb18yLmFzUG93ZXJQbGF5SW5mb1tpXS51bE1pc2NJbmZvKTsKLQkJCQkJbWlzYzIgPSBsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzIuYXNQb3dlclBsYXlJbmZvW2ldLnVsTWlzY0luZm8yKTsKLQkJCQkJaWYgKChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19WT0xUQUdFX0RST1BfU1VQUE9SVCkgfHwKLQkJCQkJICAgIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19WT0xUQUdFX0RST1BfQUNUSVZFX0hJR0gpKSB7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPQotCQkJCQkJCVZPTFRBR0VfR1BJTzsKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZ3BpbyA9Ci0JCQkJCQkJcmFkZW9uX2xvb2t1cF9ncGlvKHJkZXYsCi0JCQkJCQkJcG93ZXJfaW5mby0+aW5mb18yLmFzUG93ZXJQbGF5SW5mb1tpXS51Y1ZvbHRhZ2VEcm9wSW5kZXgpOwotCQkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1ZPTFRBR0VfRFJPUF9BQ1RJVkVfSElHSCkKLQkJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmFjdGl2ZV9oaWdoID0KLQkJCQkJCQkJdHJ1ZTsKLQkJCQkJCWVsc2UKLQkJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmFjdGl2ZV9oaWdoID0KLQkJCQkJCQkJZmFsc2U7Ci0JCQkJCX0gZWxzZSBpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fUFJPR1JBTV9WT0xUQUdFKSB7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPQotCQkJCQkJCVZPTFRBR0VfVkREQzsKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudmRkY19pZCA9Ci0JCQkJCQkJcG93ZXJfaW5mby0+aW5mb18yLmFzUG93ZXJQbGF5SW5mb1tpXS51Y1ZvbHRhZ2VEcm9wSW5kZXg7Ci0JCQkJCX0KLQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmZsYWdzID0gUkFERU9OX1BNX1NUQVRFX1NJTkdMRV9ESVNQTEFZX09OTFk7Ci0JCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5taXNjID0gbWlzYzsKLQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm1pc2MyID0gbWlzYzI7Ci0JCQkJCS8qIG9yZGVyIG1hdHRlcnMhICovCi0JCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19QT1dFUl9TQVZJTkdfTU9ERSkKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KLQkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX1BPV0VSU0FWRTsKLQkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX0RFRkFVTFRfRENfU1RBVEVfRU5UUllfVFJVRSkKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KLQkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlk7Ci0JCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19ERUZBVUxUX0xPV19EQ19TVEFURV9FTlRSWV9UUlVFKQotCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQotCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfQkFUVEVSWTsKLQkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX0xPQURfQkFMQU5DRV9FTikKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KLQkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBTEFOQ0VEOwotCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fM0RfQUNDRUxFUkFUSU9OX0VOKSB7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9Ci0JCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9QRVJGT1JNQU5DRTsKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5mbGFncyAmPQotCQkJCQkJCX5SQURFT05fUE1fU1RBVEVfU0lOR0xFX0RJU1BMQVlfT05MWTsKLQkJCQkJfQotCQkJCQlpZiAobWlzYzIgJiBBVE9NX1BNX01JU0NJTkZPMl9TWVNURU1fQUNfTElURV9NT0RFKQotCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQotCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfQkFMQU5DRUQ7Ci0JCQkJCWlmIChtaXNjMiAmIEFUT01fUE1fTUlTQ0lORk8yX01VTFRJX0RJU1BMQVlfU1VQUE9SVCkKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5mbGFncyAmPQotCQkJCQkJCX5SQURFT05fUE1fU1RBVEVfU0lOR0xFX0RJU1BMQVlfT05MWTsKLQkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX0RSSVZFUl9ERUZBVUxUX01PREUpIHsKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KLQkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQ7Ci0JCQkJCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gc3RhdGVfaW5kZXg7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZGVmYXVsdF9jbG9ja19tb2RlID0KLQkJCQkJCQkmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF07Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgJj0KLQkJCQkJCQl+UkFERU9OX1BNX1NUQVRFX1NJTkdMRV9ESVNQTEFZX09OTFk7Ci0JCQkJCX0gZWxzZSBpZiAoc3RhdGVfaW5kZXggPT0gMCkgewotCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uZmxhZ3MgfD0KLQkJCQkJCQlSQURFT05fUE1fTU9ERV9OT19ESVNQTEFZOwotCQkJCQl9Ci0JCQkJCXN0YXRlX2luZGV4Kys7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMzoKLQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm51bV9jbG9ja19tb2RlcyA9IDE7Ci0JCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPQotCQkJCQkJbGUzMl90b19jcHUocG93ZXJfaW5mby0+aW5mb18zLmFzUG93ZXJQbGF5SW5mb1tpXS51bE1lbW9yeUNsb2NrKTsKLQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9Ci0JCQkJCQlsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzMuYXNQb3dlclBsYXlJbmZvW2ldLnVsRW5naW5lQ2xvY2spOwotCQkJCQkvKiBza2lwIGludmFsaWQgbW9kZXMgKi8KLQkJCQkJaWYgKChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID09IDApIHx8Ci0JCQkJCSAgICAocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9PSAwKSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ucGNpZV9sYW5lcyA9Ci0JCQkJCQlwb3dlcl9pbmZvLT5pbmZvXzMuYXNQb3dlclBsYXlJbmZvW2ldLnVjTnVtUGNpRUxhbmVzOwotCQkJCQltaXNjID0gbGUzMl90b19jcHUocG93ZXJfaW5mby0+aW5mb18zLmFzUG93ZXJQbGF5SW5mb1tpXS51bE1pc2NJbmZvKTsKLQkJCQkJbWlzYzIgPSBsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzMuYXNQb3dlclBsYXlJbmZvW2ldLnVsTWlzY0luZm8yKTsKLQkJCQkJaWYgKChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19WT0xUQUdFX0RST1BfU1VQUE9SVCkgfHwKLQkJCQkJICAgIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19WT0xUQUdFX0RST1BfQUNUSVZFX0hJR0gpKSB7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPQotCQkJCQkJCVZPTFRBR0VfR1BJTzsKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZ3BpbyA9Ci0JCQkJCQkJcmFkZW9uX2xvb2t1cF9ncGlvKHJkZXYsCi0JCQkJCQkJcG93ZXJfaW5mby0+aW5mb18zLmFzUG93ZXJQbGF5SW5mb1tpXS51Y1ZvbHRhZ2VEcm9wSW5kZXgpOwotCQkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1ZPTFRBR0VfRFJPUF9BQ1RJVkVfSElHSCkKLQkJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmFjdGl2ZV9oaWdoID0KLQkJCQkJCQkJdHJ1ZTsKLQkJCQkJCWVsc2UKLQkJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmFjdGl2ZV9oaWdoID0KLQkJCQkJCQkJZmFsc2U7Ci0JCQkJCX0gZWxzZSBpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fUFJPR1JBTV9WT0xUQUdFKSB7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPQotCQkJCQkJCVZPTFRBR0VfVkREQzsKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudmRkY19pZCA9Ci0JCQkJCQkJcG93ZXJfaW5mby0+aW5mb18zLmFzUG93ZXJQbGF5SW5mb1tpXS51Y1ZvbHRhZ2VEcm9wSW5kZXg7Ci0JCQkJCQlpZiAobWlzYzIgJiBBVE9NX1BNX01JU0NJTkZPMl9WRERDSV9EWU5BTUlDX1ZPTFRBR0VfRU4pIHsKLQkJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnZkZGNpX2VuYWJsZWQgPQotCQkJCQkJCQl0cnVlOwotCQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudmRkY2lfaWQgPQotCQkJCQkJCXBvd2VyX2luZm8tPmluZm9fMy5hc1Bvd2VyUGxheUluZm9baV0udWNWRERDSV9Wb2x0YWdlRHJvcEluZGV4OwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5mbGFncyA9IFJBREVPTl9QTV9TVEFURV9TSU5HTEVfRElTUExBWV9PTkxZOwotCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubWlzYyA9IG1pc2M7Ci0JCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5taXNjMiA9IG1pc2MyOwotCQkJCQkvKiBvcmRlciBtYXR0ZXJzISAqLwotCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fUE9XRVJfU0FWSU5HX01PREUpCi0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9Ci0JCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9QT1dFUlNBVkU7Ci0JCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19ERUZBVUxUX0RDX1NUQVRFX0VOVFJZX1RSVUUpCi0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9Ci0JCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9CQVRURVJZOwotCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fREVGQVVMVF9MT1dfRENfU1RBVEVfRU5UUllfVFJVRSkKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KLQkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlk7Ci0JCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19MT0FEX0JBTEFOQ0VfRU4pCi0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9Ci0JCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9CQUxBTkNFRDsKLQkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPXzNEX0FDQ0VMRVJBVElPTl9FTikgewotCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQotCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfUEVSRk9STUFOQ0U7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgJj0KLQkJCQkJCQl+UkFERU9OX1BNX1NUQVRFX1NJTkdMRV9ESVNQTEFZX09OTFk7Ci0JCQkJCX0KLQkJCQkJaWYgKG1pc2MyICYgQVRPTV9QTV9NSVNDSU5GTzJfU1lTVEVNX0FDX0xJVEVfTU9ERSkKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KLQkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBTEFOQ0VEOwotCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fRFJJVkVSX0RFRkFVTFRfTU9ERSkgewotCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQotCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfREVGQVVMVDsKLQkJCQkJCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXggPSBzdGF0ZV9pbmRleDsKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5kZWZhdWx0X2Nsb2NrX21vZGUgPQotCQkJCQkJCSZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXTsKLQkJCQkJfSBlbHNlIGlmIChzdGF0ZV9pbmRleCA9PSAwKSB7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5mbGFncyB8PQotCQkJCQkJCVJBREVPTl9QTV9NT0RFX05PX0RJU1BMQVk7Ci0JCQkJCX0KLQkJCQkJc3RhdGVfaW5kZXgrKzsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJLyogbGFzdCBtb2RlIGlzIHVzdWFsbHkgZGVmYXVsdCAqLwotCQkJaWYgKHJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXggPT0gLTEpIHsKLQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleCAtIDFdLnR5cGUgPQotCQkJCQlQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQ7Ci0JCQkJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZV9pbmRleCA9IHN0YXRlX2luZGV4IC0gMTsKLQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleCAtIDFdLmRlZmF1bHRfY2xvY2tfbW9kZSA9Ci0JCQkJCSZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleCAtIDFdLmNsb2NrX2luZm9bMF07Ci0JCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmZsYWdzICY9Ci0JCQkJCX5SQURFT05fUE1fU1RBVEVfU0lOR0xFX0RJU1BMQVlfT05MWTsKLQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubWlzYyA9IDA7Ci0JCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm1pc2MyID0gMDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWludCBmd19pbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIEZpcm13YXJlSW5mbyk7Ci0JCQl1aW50OF90IGZ3X2ZyZXYsIGZ3X2NyZXY7Ci0JCQl1aW50MTZfdCBmd19kYXRhX29mZnNldCwgdmRkYyA9IDA7Ci0JCQl1bmlvbiBmaXJtd2FyZV9pbmZvICpmaXJtd2FyZV9pbmZvOwotCQkJQVRPTV9QUExJQl9USEVSTUFMQ09OVFJPTExFUiAqY29udHJvbGxlciA9ICZwb3dlcl9pbmZvLT5pbmZvXzQuc1RoZXJtYWxDb250cm9sbGVyOwotCi0JCQlpZiAoYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgZndfaW5kZXgsIE5VTEwsCi0JCQkJCQkgICAmZndfZnJldiwgJmZ3X2NyZXYsICZmd19kYXRhX29mZnNldCkpIHsKLQkJCQlmaXJtd2FyZV9pbmZvID0KLQkJCQkJKHVuaW9uIGZpcm13YXJlX2luZm8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKwotCQkJCQkJCQlmd19kYXRhX29mZnNldCk7Ci0JCQkJdmRkYyA9IGZpcm13YXJlX2luZm8tPmluZm9fMTQudXNCb290VXBWRERDVm9sdGFnZTsKLQkJCX0KLQotCQkJLyogYWRkIHRoZSBpMmMgYnVzIGZvciB0aGVybWFsL2ZhbiBjaGlwICovCi0JCQlpZiAoY29udHJvbGxlci0+dWNUeXBlID4gMCkgewotCQkJCWlmIChjb250cm9sbGVyLT51Y1R5cGUgPT0gQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9SVjZ4eCkgewotCQkJCQlEUk1fSU5GTygiSW50ZXJuYWwgdGhlcm1hbCBjb250cm9sbGVyICVzIGZhbiBjb250cm9sXG4iLAotCQkJCQkJIChjb250cm9sbGVyLT51Y0ZhblBhcmFtZXRlcnMgJgotCQkJCQkJICBBVE9NX1BQX0ZBTlBBUkFNRVRFUlNfTk9GQU4pID8gIndpdGhvdXQiIDogIndpdGgiKTsKLQkJCQkJcmRldi0+cG0uaW50X3RoZXJtYWxfdHlwZSA9IFRIRVJNQUxfVFlQRV9SVjZYWDsKLQkJCQl9IGVsc2UgaWYgKGNvbnRyb2xsZXItPnVjVHlwZSA9PSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX1JWNzcwKSB7Ci0JCQkJCURSTV9JTkZPKCJJbnRlcm5hbCB0aGVybWFsIGNvbnRyb2xsZXIgJXMgZmFuIGNvbnRyb2xcbiIsCi0JCQkJCQkgKGNvbnRyb2xsZXItPnVjRmFuUGFyYW1ldGVycyAmCi0JCQkJCQkgIEFUT01fUFBfRkFOUEFSQU1FVEVSU19OT0ZBTikgPyAid2l0aG91dCIgOiAid2l0aCIpOwotCQkJCQlyZGV2LT5wbS5pbnRfdGhlcm1hbF90eXBlID0gVEhFUk1BTF9UWVBFX1JWNzcwOwotCQkJCX0gZWxzZSBpZiAoY29udHJvbGxlci0+dWNUeXBlID09IEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfRVZFUkdSRUVOKSB7Ci0JCQkJCURSTV9JTkZPKCJJbnRlcm5hbCB0aGVybWFsIGNvbnRyb2xsZXIgJXMgZmFuIGNvbnRyb2xcbiIsCi0JCQkJCQkgKGNvbnRyb2xsZXItPnVjRmFuUGFyYW1ldGVycyAmCi0JCQkJCQkgIEFUT01fUFBfRkFOUEFSQU1FVEVSU19OT0ZBTikgPyAid2l0aG91dCIgOiAid2l0aCIpOwotCQkJCQlyZGV2LT5wbS5pbnRfdGhlcm1hbF90eXBlID0gVEhFUk1BTF9UWVBFX0VWRVJHUkVFTjsKLQkJCQl9IGVsc2UgaWYgKChjb250cm9sbGVyLT51Y1R5cGUgPT0KLQkJCQkJICAgIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfRVhURVJOQUxfR1BJTykgfHwKLQkJCQkJICAgKGNvbnRyb2xsZXItPnVjVHlwZSA9PQotCQkJCQkgICAgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9BRFQ3NDczX1dJVEhfSU5URVJOQUwpKSB7Ci0JCQkJCURSTV9JTkZPKCJTcGVjaWFsIHRoZXJtYWwgY29udHJvbGxlciBjb25maWdcbiIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCURSTV9JTkZPKCJQb3NzaWJsZSAlcyB0aGVybWFsIGNvbnRyb2xsZXIgYXQgMHglMDJ4ICVzIGZhbiBjb250cm9sXG4iLAotCQkJCQkJIHBwX2xpYl90aGVybWFsX2NvbnRyb2xsZXJfbmFtZXNbY29udHJvbGxlci0+dWNUeXBlXSwKLQkJCQkJCSBjb250cm9sbGVyLT51Y0kyY0FkZHJlc3MgPj4gMSwKLQkJCQkJCSAoY29udHJvbGxlci0+dWNGYW5QYXJhbWV0ZXJzICYKLQkJCQkJCSAgQVRPTV9QUF9GQU5QQVJBTUVURVJTX05PRkFOKSA/ICJ3aXRob3V0IiA6ICJ3aXRoIik7Ci0JCQkJCWkyY19idXMgPSByYWRlb25fbG9va3VwX2kyY19ncGlvKHJkZXYsIGNvbnRyb2xsZXItPnVjSTJjTGluZSk7Ci0JCQkJCXJkZXYtPnBtLmkyY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCAmaTJjX2J1cyk7Ci0JCQkJCWlmIChyZGV2LT5wbS5pMmNfYnVzKSB7Ci0JCQkJCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbyA9IHsgfTsKLQkJCQkJCWNvbnN0IGNoYXIgKm5hbWUgPSBwcF9saWJfdGhlcm1hbF9jb250cm9sbGVyX25hbWVzW2NvbnRyb2xsZXItPnVjVHlwZV07Ci0JCQkJCQlpbmZvLmFkZHIgPSBjb250cm9sbGVyLT51Y0kyY0FkZHJlc3MgPj4gMTsKLQkJCQkJCXN0cmxjcHkoaW5mby50eXBlLCBuYW1lLCBzaXplb2YoaW5mby50eXBlKSk7Ci0JCQkJCQlpMmNfbmV3X2RldmljZSgmcmRldi0+cG0uaTJjX2J1cy0+YWRhcHRlciwgJmluZm8pOwotCQkJCQl9Ci0KLQkJCQl9Ci0JCQl9Ci0JCQkvKiBmaXJzdCBtb2RlIGlzIHVzdWFsbHkgZGVmYXVsdCwgZm9sbG93ZWQgYnkgbG93IHRvIGhpZ2ggKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBwb3dlcl9pbmZvLT5pbmZvXzQudWNOdW1TdGF0ZXM7IGkrKykgewotCQkJCW1vZGVfaW5kZXggPSAwOwotCQkJCXBvd2VyX3N0YXRlID0gKHN0cnVjdCBfQVRPTV9QUExJQl9TVEFURSAqKQotCQkJCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKwotCQkJCQkgZGF0YV9vZmZzZXQgKwotCQkJCQkgbGUxNl90b19jcHUocG93ZXJfaW5mby0+aW5mb180LnVzU3RhdGVBcnJheU9mZnNldCkgKwotCQkJCQkgaSAqIHBvd2VyX2luZm8tPmluZm9fNC51Y1N0YXRlRW50cnlTaXplKTsKLQkJCQlub25fY2xvY2tfaW5mbyA9IChzdHJ1Y3QgX0FUT01fUFBMSUJfTk9OQ0xPQ0tfSU5GTyAqKQotCQkJCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKwotCQkJCQkgZGF0YV9vZmZzZXQgKwotCQkJCQkgbGUxNl90b19jcHUocG93ZXJfaW5mby0+aW5mb180LnVzTm9uQ2xvY2tJbmZvQXJyYXlPZmZzZXQpICsKLQkJCQkJIChwb3dlcl9zdGF0ZS0+dWNOb25DbG9ja1N0YXRlSW5kZXggKgotCQkJCQkgIHBvd2VyX2luZm8tPmluZm9fNC51Y05vbkNsb2NrU2l6ZSkpOwotCQkJCWZvciAoaiA9IDA7IGogPCAocG93ZXJfaW5mby0+aW5mb180LnVjU3RhdGVFbnRyeVNpemUgLSAxKTsgaisrKSB7Ci0JCQkJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApIHsKLQkJCQkJCXN0cnVjdCBfQVRPTV9QUExJQl9SUzc4MF9DTE9DS19JTkZPICpjbG9ja19pbmZvID0KLQkJCQkJCQkoc3RydWN0IF9BVE9NX1BQTElCX1JTNzgwX0NMT0NLX0lORk8gKikKLQkJCQkJCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKwotCQkJCQkJCSBkYXRhX29mZnNldCArCi0JCQkJCQkJIGxlMTZfdG9fY3B1KHBvd2VyX2luZm8tPmluZm9fNC51c0Nsb2NrSW5mb0FycmF5T2Zmc2V0KSArCi0JCQkJCQkJIChwb3dlcl9zdGF0ZS0+dWNDbG9ja1N0YXRlSW5kaWNlc1tqXSAqCi0JCQkJCQkJICBwb3dlcl9pbmZvLT5pbmZvXzQudWNDbG9ja0luZm9TaXplKSk7Ci0JCQkJCQlzY2xrID0gbGUxNl90b19jcHUoY2xvY2tfaW5mby0+dXNMb3dFbmdpbmVDbG9ja0xvdyk7Ci0JCQkJCQlzY2xrIHw9IGNsb2NrX2luZm8tPnVjTG93RW5naW5lQ2xvY2tIaWdoIDw8IDE2OwotCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0uc2NsayA9IHNjbGs7Ci0JCQkJCQkvKiBza2lwIGludmFsaWQgbW9kZXMgKi8KLQkJCQkJCWlmIChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS5zY2xrID09IDApCi0JCQkJCQkJY29udGludWU7Ci0JCQkJCQkvKiB2b2x0YWdlIHdvcmtzIGRpZmZlcmVudGx5IG9uIElHUHMgKi8KLQkJCQkJCW1vZGVfaW5kZXgrKzsKLQkJCQkJfSBlbHNlIGlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKLQkJCQkJCXN0cnVjdCBfQVRPTV9QUExJQl9FVkVSR1JFRU5fQ0xPQ0tfSU5GTyAqY2xvY2tfaW5mbyA9Ci0JCQkJCQkJKHN0cnVjdCBfQVRPTV9QUExJQl9FVkVSR1JFRU5fQ0xPQ0tfSU5GTyAqKQotCQkJCQkJCShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArCi0JCQkJCQkJIGRhdGFfb2Zmc2V0ICsKLQkJCQkJCQkgbGUxNl90b19jcHUocG93ZXJfaW5mby0+aW5mb180LnVzQ2xvY2tJbmZvQXJyYXlPZmZzZXQpICsKLQkJCQkJCQkgKHBvd2VyX3N0YXRlLT51Y0Nsb2NrU3RhdGVJbmRpY2VzW2pdICoKLQkJCQkJCQkgIHBvd2VyX2luZm8tPmluZm9fNC51Y0Nsb2NrSW5mb1NpemUpKTsKLQkJCQkJCXNjbGsgPSBsZTE2X3RvX2NwdShjbG9ja19pbmZvLT51c0VuZ2luZUNsb2NrTG93KTsKLQkJCQkJCXNjbGsgfD0gY2xvY2tfaW5mby0+dWNFbmdpbmVDbG9ja0hpZ2ggPDwgMTY7Ci0JCQkJCQltY2xrID0gbGUxNl90b19jcHUoY2xvY2tfaW5mby0+dXNNZW1vcnlDbG9ja0xvdyk7Ci0JCQkJCQltY2xrIHw9IGNsb2NrX2luZm8tPnVjTWVtb3J5Q2xvY2tIaWdoIDw8IDE2OwotCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0ubWNsayA9IG1jbGs7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS5zY2xrID0gc2NsazsKLQkJCQkJCS8qIHNraXAgaW52YWxpZCBtb2RlcyAqLwotCQkJCQkJaWYgKChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS5tY2xrID09IDApIHx8Ci0JCQkJCQkgICAgKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnNjbGsgPT0gMCkpCi0JCQkJCQkJY29udGludWU7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS52b2x0YWdlLnR5cGUgPQotCQkJCQkJCVZPTFRBR0VfU1c7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS52b2x0YWdlLnZvbHRhZ2UgPQotCQkJCQkJCWNsb2NrX2luZm8tPnVzVkREQzsKLQkJCQkJCS8qIFhYWCB1c1ZERENJICovCi0JCQkJCQltb2RlX2luZGV4Kys7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlzdHJ1Y3QgX0FUT01fUFBMSUJfUjYwMF9DTE9DS19JTkZPICpjbG9ja19pbmZvID0KLQkJCQkJCQkoc3RydWN0IF9BVE9NX1BQTElCX1I2MDBfQ0xPQ0tfSU5GTyAqKQotCQkJCQkJCShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArCi0JCQkJCQkJIGRhdGFfb2Zmc2V0ICsKLQkJCQkJCQkgbGUxNl90b19jcHUocG93ZXJfaW5mby0+aW5mb180LnVzQ2xvY2tJbmZvQXJyYXlPZmZzZXQpICsKLQkJCQkJCQkgKHBvd2VyX3N0YXRlLT51Y0Nsb2NrU3RhdGVJbmRpY2VzW2pdICoKLQkJCQkJCQkgIHBvd2VyX2luZm8tPmluZm9fNC51Y0Nsb2NrSW5mb1NpemUpKTsKLQkJCQkJCXNjbGsgPSBsZTE2X3RvX2NwdShjbG9ja19pbmZvLT51c0VuZ2luZUNsb2NrTG93KTsKLQkJCQkJCXNjbGsgfD0gY2xvY2tfaW5mby0+dWNFbmdpbmVDbG9ja0hpZ2ggPDwgMTY7Ci0JCQkJCQltY2xrID0gbGUxNl90b19jcHUoY2xvY2tfaW5mby0+dXNNZW1vcnlDbG9ja0xvdyk7Ci0JCQkJCQltY2xrIHw9IGNsb2NrX2luZm8tPnVjTWVtb3J5Q2xvY2tIaWdoIDw8IDE2OwotCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0ubWNsayA9IG1jbGs7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS5zY2xrID0gc2NsazsKLQkJCQkJCS8qIHNraXAgaW52YWxpZCBtb2RlcyAqLwotCQkJCQkJaWYgKChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS5tY2xrID09IDApIHx8Ci0JCQkJCQkgICAgKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnNjbGsgPT0gMCkpCi0JCQkJCQkJY29udGludWU7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS52b2x0YWdlLnR5cGUgPQotCQkJCQkJCVZPTFRBR0VfU1c7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS52b2x0YWdlLnZvbHRhZ2UgPQotCQkJCQkJCWNsb2NrX2luZm8tPnVzVkREQzsKLQkJCQkJCW1vZGVfaW5kZXgrKzsKLQkJCQkJfQotCQkJCX0KLQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gbW9kZV9pbmRleDsKLQkJCQlpZiAobW9kZV9pbmRleCkgewotCQkJCQltaXNjID0gbGUzMl90b19jcHUobm9uX2Nsb2NrX2luZm8tPnVsQ2Fwc0FuZFNldHRpbmdzKTsKLQkJCQkJbWlzYzIgPSBsZTE2X3RvX2NwdShub25fY2xvY2tfaW5mby0+dXNDbGFzc2lmaWNhdGlvbik7Ci0JCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5taXNjID0gbWlzYzsKLQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm1pc2MyID0gbWlzYzI7Ci0JCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5wY2llX2xhbmVzID0KLQkJCQkJCSgobWlzYyAmIEFUT01fUFBMSUJfUENJRV9MSU5LX1dJRFRIX01BU0spID4+Ci0JCQkJCQlBVE9NX1BQTElCX1BDSUVfTElOS19XSURUSF9TSElGVCkgKyAxOwotCQkJCQlzd2l0Y2ggKG1pc2MyICYgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VSV9NQVNLKSB7Ci0JCQkJCWNhc2UgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VSV9CQVRURVJZOgotCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQotCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfQkFUVEVSWTsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfQkFMQU5DRUQ6Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9Ci0JCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9CQUxBTkNFRDsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfUEVSRk9STUFOQ0U6Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9Ci0JCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9QRVJGT1JNQU5DRTsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfTk9ORToKLQkJCQkJCWlmIChtaXNjMiAmIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fM0RQRVJGT1JNQU5DRSkKLQkJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9Ci0JCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfUEVSRk9STUFOQ0U7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgPSAwOwotCQkJCQlpZiAobWlzYyAmIEFUT01fUFBMSUJfU0lOR0xFX0RJU1BMQVlfT05MWSkKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5mbGFncyB8PQotCQkJCQkJCVJBREVPTl9QTV9TVEFURV9TSU5HTEVfRElTUExBWV9PTkxZOwotCQkJCQlpZiAobWlzYzIgJiBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX0JPT1QpIHsKLQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KLQkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQ7Ci0JCQkJCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gc3RhdGVfaW5kZXg7Ci0JCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZGVmYXVsdF9jbG9ja19tb2RlID0KLQkJCQkJCQkmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleCAtIDFdOwotCQkJCQkJLyogcGF0Y2ggdGhlIHRhYmxlIHZhbHVlcyB3aXRoIHRoZSBkZWZhdWx0IHNsY2svbWNsayBmcm9tIGZpcm13YXJlIGluZm8gKi8KLQkJCQkJCWZvciAoaiA9IDA7IGogPCBtb2RlX2luZGV4OyBqKyspIHsKLQkJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1tqXS5tY2xrID0KLQkJCQkJCQkJcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrOwotCQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW2pdLnNjbGsgPQotCQkJCQkJCQlyZGV2LT5jbG9jay5kZWZhdWx0X3NjbGs7Ci0JCQkJCQkJaWYgKHZkZGMpCi0JCQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW2pdLnZvbHRhZ2Uudm9sdGFnZSA9Ci0JCQkJCQkJCQl2ZGRjOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCXN0YXRlX2luZGV4Kys7Ci0JCQkJfQotCQkJfQotCQkJLyogaWYgbXVsdGlwbGUgY2xvY2sgbW9kZXMsIG1hcmsgdGhlIGxvd2VzdCBhcyBubyBkaXNwbGF5ICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgc3RhdGVfaW5kZXg7IGkrKykgewotCQkJCWlmIChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtpXS5udW1fY2xvY2tfbW9kZXMgPiAxKQotCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtpXS5jbG9ja19pbmZvWzBdLmZsYWdzIHw9Ci0JCQkJCQlSQURFT05fUE1fTU9ERV9OT19ESVNQTEFZOwotCQkJfQotCQkJLyogZmlyc3QgbW9kZSBpcyB1c3VhbGx5IGRlZmF1bHQgKi8KLQkJCWlmIChyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID09IC0xKSB7Ci0JCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbMF0udHlwZSA9Ci0JCQkJCVBPV0VSX1NUQVRFX1RZUEVfREVGQVVMVDsKLQkJCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gMDsKLQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVswXS5kZWZhdWx0X2Nsb2NrX21vZGUgPQotCQkJCQkmcmRldi0+cG0ucG93ZXJfc3RhdGVbMF0uY2xvY2tfaW5mb1swXTsKLQkJCX0KKwkJc3dpdGNoIChmcmV2KSB7CisJCWNhc2UgMToKKwkJY2FzZSAyOgorCQljYXNlIDM6CisJCQlzdGF0ZV9pbmRleCA9IHJhZGVvbl9hdG9tYmlvc19wYXJzZV9wb3dlcl90YWJsZV8xXzMocmRldik7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQljYXNlIDU6CisJCQlzdGF0ZV9pbmRleCA9IHJhZGVvbl9hdG9tYmlvc19wYXJzZV9wb3dlcl90YWJsZV80XzUocmRldik7CisJCQlicmVhazsKKwkJY2FzZSA2OgorCQkJc3RhdGVfaW5kZXggPSByYWRlb25fYXRvbWJpb3NfcGFyc2VfcG93ZXJfdGFibGVfNihyZGV2KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBhZGQgdGhlIGRlZmF1bHQgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmlvcy5jCmluZGV4IDhmMmM3YjUuLjFhYmE4NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMKQEAgLTEzMSw2ICsxMzEsNDUgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wgbmlfcmVhZF9kaXNhYmxlZF9iaW9zKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiBidXNfY250bDsKKwl1MzIgZDF2Z2FfY29udHJvbDsKKwl1MzIgZDJ2Z2FfY29udHJvbDsKKwl1MzIgdmdhX3JlbmRlcl9jb250cm9sOworCXUzMiByb21fY250bDsKKwlib29sIHI7CisKKwlidXNfY250bCA9IFJSRUczMihSNjAwX0JVU19DTlRMKTsKKwlkMXZnYV9jb250cm9sID0gUlJFRzMyKEFWSVZPX0QxVkdBX0NPTlRST0wpOworCWQydmdhX2NvbnRyb2wgPSBSUkVHMzIoQVZJVk9fRDJWR0FfQ09OVFJPTCk7CisJdmdhX3JlbmRlcl9jb250cm9sID0gUlJFRzMyKEFWSVZPX1ZHQV9SRU5ERVJfQ09OVFJPTCk7CisJcm9tX2NudGwgPSBSUkVHMzIoUjYwMF9ST01fQ05UTCk7CisKKwkvKiBlbmFibGUgdGhlIHJvbSAqLworCVdSRUczMihSNjAwX0JVU19DTlRMLCAoYnVzX2NudGwgJiB+UjYwMF9CSU9TX1JPTV9ESVMpKTsKKwkvKiBEaXNhYmxlIFZHQSBtb2RlICovCisJV1JFRzMyKEFWSVZPX0QxVkdBX0NPTlRST0wsCisJICAgICAgIChkMXZnYV9jb250cm9sICYgfihBVklWT19EVkdBX0NPTlRST0xfTU9ERV9FTkFCTEUgfAorCQlBVklWT19EVkdBX0NPTlRST0xfVElNSU5HX1NFTEVDVCkpKTsKKwlXUkVHMzIoQVZJVk9fRDJWR0FfQ09OVFJPTCwKKwkgICAgICAgKGQydmdhX2NvbnRyb2wgJiB+KEFWSVZPX0RWR0FfQ09OVFJPTF9NT0RFX0VOQUJMRSB8CisJCUFWSVZPX0RWR0FfQ09OVFJPTF9USU1JTkdfU0VMRUNUKSkpOworCVdSRUczMihBVklWT19WR0FfUkVOREVSX0NPTlRST0wsCisJICAgICAgICh2Z2FfcmVuZGVyX2NvbnRyb2wgJiB+QVZJVk9fVkdBX1ZTVEFUVVNfQ05UTF9NQVNLKSk7CisJV1JFRzMyKFI2MDBfUk9NX0NOVEwsIHJvbV9jbnRsIHwgUjYwMF9TQ0tfT1ZFUldSSVRFKTsKKworCXIgPSByYWRlb25fcmVhZF9iaW9zKHJkZXYpOworCisJLyogcmVzdG9yZSByZWdzICovCisJV1JFRzMyKFI2MDBfQlVTX0NOVEwsIGJ1c19jbnRsKTsKKwlXUkVHMzIoQVZJVk9fRDFWR0FfQ09OVFJPTCwgZDF2Z2FfY29udHJvbCk7CisJV1JFRzMyKEFWSVZPX0QyVkdBX0NPTlRST0wsIGQydmdhX2NvbnRyb2wpOworCVdSRUczMihBVklWT19WR0FfUkVOREVSX0NPTlRST0wsIHZnYV9yZW5kZXJfY29udHJvbCk7CisJV1JFRzMyKFI2MDBfUk9NX0NOVEwsIHJvbV9jbnRsKTsKKwlyZXR1cm4gcjsKK30KKwogc3RhdGljIGJvb2wgcjcwMF9yZWFkX2Rpc2FibGVkX2Jpb3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDMyX3QgdmlwaF9jb250cm9sOwpAQCAtNDE2LDYgKzQ1NSw4IEBACiB7CiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkKIAkJcmV0dXJuIGlncF9yZWFkX2Jpb3NfZnJvbV92cmFtKHJkZXYpOworCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX0JBUlRTKQorCQlyZXR1cm4gbmlfcmVhZF9kaXNhYmxlZF9iaW9zKHJkZXYpOwogCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNzcwKQogCQlyZXR1cm4gcjcwMF9yZWFkX2Rpc2FibGVkX2Jpb3MocmRldik7CiAJZWxzZSBpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwppbmRleCAxMzdiODA3Li41OTFmY2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCkBAIC00NzEsOCArNDcxLDkgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyogdGhpcyBpcyB1c2VkIGZvciBhdG9tIExDRHMgYXMgd2VsbCAqLwogc3RydWN0IGVkaWQgKgotcmFkZW9uX2NvbWJpb3NfZ2V0X2hhcmRjb2RlZF9lZGlkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorcmFkZW9uX2Jpb3NfZ2V0X2hhcmRjb2RlZF9lZGlkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWlmIChyZGV2LT5tb2RlX2luZm8uYmlvc19oYXJkY29kZWRfZWRpZCkKIAkJcmV0dXJuIHJkZXYtPm1vZGVfaW5mby5iaW9zX2hhcmRjb2RlZF9lZGlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCmluZGV4IDhhZmFmN2EuLjIyYjdlM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKQEAgLTQ3Miw2ICs0NzIsOSBAQAogCWlmIChtb2RlKSB7CiAJCXJldCA9IDE7CiAJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKKwkJLyogYWRkIHRoZSB3aWR0aC9oZWlnaHQgZnJvbSB2YmlvcyB0YWJsZXMgaWYgYXZhaWxhYmxlICovCisJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0gbW9kZS0+d2lkdGhfbW07CisJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IG1vZGUtPmhlaWdodF9tbTsKIAkJLyogYWRkIHNjYWxlZCBtb2RlcyAqLwogCQlyYWRlb25fYWRkX2NvbW1vbl9tb2RlcyhlbmNvZGVyLCBjb25uZWN0b3IpOwogCX0KQEAgLTEyMTYsNyArMTIxOSw3IEBACiAJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CiAJCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby51bmRlcnNjYW5fcHJvcGVydHksCi0JCQkJCQkgICAgICBVTkRFUlNDQU5fQVVUTyk7CisJCQkJCQkgICAgICBVTkRFUlNDQU5fT0ZGKTsKIAkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLnVuZGVyc2Nhbl9oYm9yZGVyX3Byb3BlcnR5LAogCQkJCQkJICAgICAgMCk7CkBAIC0xMjU2LDcgKzEyNTksNyBAQAogCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgewogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8udW5kZXJzY2FuX3Byb3BlcnR5LAotCQkJCQkJICAgICAgVU5ERVJTQ0FOX0FVVE8pOworCQkJCQkJICAgICAgVU5ERVJTQ0FOX09GRik7CiAJCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby51bmRlcnNjYW5faGJvcmRlcl9wcm9wZXJ0eSwKIAkJCQkJCSAgICAgIDApOwpAQCAtMTI5OSw3ICsxMzAyLDcgQEAKIAkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKIAkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLnVuZGVyc2Nhbl9wcm9wZXJ0eSwKLQkJCQkJCSAgICAgIFVOREVSU0NBTl9BVVRPKTsKKwkJCQkJCSAgICAgIFVOREVSU0NBTl9PRkYpOwogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8udW5kZXJzY2FuX2hib3JkZXJfcHJvcGVydHksCiAJCQkJCQkgICAgICAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCmluZGV4IDZkNjRhMjcuLjM1YjVlYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYwpAQCAtNzcsMTMgKzc3LDEzIEBACiAJCQlwLT5yZWxvY3NfcHRyW2ldID0gJnAtPnJlbG9jc1tpXTsKIAkJCXAtPnJlbG9jc1tpXS5yb2JqID0gcC0+cmVsb2NzW2ldLmdvYmotPmRyaXZlcl9wcml2YXRlOwogCQkJcC0+cmVsb2NzW2ldLmxvYmouYm8gPSBwLT5yZWxvY3NbaV0ucm9iajsKLQkJCXAtPnJlbG9jc1tpXS5sb2JqLnJkb21haW4gPSByLT5yZWFkX2RvbWFpbnM7CiAJCQlwLT5yZWxvY3NbaV0ubG9iai53ZG9tYWluID0gci0+d3JpdGVfZG9tYWluOworCQkJcC0+cmVsb2NzW2ldLmxvYmoucmRvbWFpbiA9IHItPnJlYWRfZG9tYWluczsKKwkJCXAtPnJlbG9jc1tpXS5sb2JqLnR2LmJvID0gJnAtPnJlbG9jc1tpXS5yb2JqLT50Ym87CiAJCQlwLT5yZWxvY3NbaV0uaGFuZGxlID0gci0+aGFuZGxlOwogCQkJcC0+cmVsb2NzW2ldLmZsYWdzID0gci0+ZmxhZ3M7Ci0JCQlJTklUX0xJU1RfSEVBRCgmcC0+cmVsb2NzW2ldLmxvYmoubGlzdCk7CiAJCQlyYWRlb25fYm9fbGlzdF9hZGRfb2JqZWN0KCZwLT5yZWxvY3NbaV0ubG9iaiwKLQkJCQkJCSZwLT52YWxpZGF0ZWQpOworCQkJCQkJICAmcC0+dmFsaWRhdGVkKTsKIAkJfQogCX0KIAlyZXR1cm4gcmFkZW9uX2JvX2xpc3RfdmFsaWRhdGUoJnAtPnZhbGlkYXRlZCk7CkBAIC0xODksMTAgKzE4OSwxMyBAQAogewogCXVuc2lnbmVkIGk7CiAKLQlpZiAoIWVycm9yICYmIHBhcnNlci0+aWIpIHsKLQkJcmFkZW9uX2JvX2xpc3RfZmVuY2UoJnBhcnNlci0+dmFsaWRhdGVkLCBwYXJzZXItPmliLT5mZW5jZSk7Ci0JfQotCXJhZGVvbl9ib19saXN0X3VucmVzZXJ2ZSgmcGFyc2VyLT52YWxpZGF0ZWQpOworCisJaWYgKCFlcnJvciAmJiBwYXJzZXItPmliKQorCQl0dG1fZXVfZmVuY2VfYnVmZmVyX29iamVjdHMoJnBhcnNlci0+dmFsaWRhdGVkLAorCQkJCQkgICAgcGFyc2VyLT5pYi0+ZmVuY2UpOworCWVsc2UKKwkJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnBhcnNlci0+dmFsaWRhdGVkKTsKKwogCWlmIChwYXJzZXItPnJlbG9jcyAhPSBOVUxMKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBwYXJzZXItPm5yZWxvY3M7IGkrKykgewogCQkJaWYgKHBhcnNlci0+cmVsb2NzW2ldLmdvYmopCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCmluZGV4IDUwMTk2NmEuLjI2MDkxZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCkBAIC04MSw2ICs4MSwxMCBAQAogCSJKVU5JUEVSIiwKIAkiQ1lQUkVTUyIsCiAJIkhFTUxPQ0siLAorCSJQQUxNIiwKKwkiQkFSVFMiLAorCSJUVVJLUyIsCisJIkNBSUNPUyIsCiAJIkxBU1QiLAogfTsKIApAQCAtMjI0LDYgKzIyOCwxMSBAQAogCQkJCXJkZXYtPndiLnVzZV9ldmVudCA9IHRydWU7CiAJCX0KIAl9CisJLyogYWx3YXlzIHVzZSB3cml0ZWJhY2svZXZlbnRzIG9uIE5JICovCisJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkgeworCQlyZGV2LT53Yi5lbmFibGVkID0gdHJ1ZTsKKwkJcmRldi0+d2IudXNlX2V2ZW50ID0gdHJ1ZTsKKwl9CiAKIAlkZXZfaW5mbyhyZGV2LT5kZXYsICJXQiAlc2FibGVkXG4iLCByZGV2LT53Yi5lbmFibGVkID8gImVuIiA6ICJkaXMiKTsKIApAQCAtMzM1LDcgKzM0NCwxMiBAQAogCXVpbnQzMl90IHJlZzsKIAogCS8qIGZpcnN0IGNoZWNrIENSVENzICovCi0JaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgeworCWlmIChBU0lDX0lTX0RDRTQxKHJkZXYpKSB7CisJCXJlZyA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCkgfAorCQkJUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VUKTsKKwkJaWYgKHJlZyAmIEVWRVJHUkVFTl9DUlRDX01BU1RFUl9FTikKKwkJCXJldHVybiB0cnVlOworCX0gZWxzZSBpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CiAJCXJlZyA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCkgfAogCQkJUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VUKSB8CiAJCQlSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQpIHwKQEAgLTYzNiwyMCArNjUwLDIwIEBACiBzdGF0aWMgdm9pZCByYWRlb25fc3dpdGNoZXJvb19zZXRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdmdhX3N3aXRjaGVyb29fc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJcG1fbWVzc2FnZV90IHBtbSA9IHsgLmV2ZW50ID0gUE1fRVZFTlRfU1VTUEVORCB9OwogCWlmIChzdGF0ZSA9PSBWR0FfU1dJVENIRVJPT19PTikgewogCQlwcmludGsoS0VSTl9JTkZPICJyYWRlb246IHN3aXRjaGVkIG9uXG4iKTsKIAkJLyogZG9uJ3Qgc3VzcGVuZCBvciByZXN1bWUgY2FyZCBub3JtYWxseSAqLwotCQlyZGV2LT5wb3dlcmVkX2Rvd24gPSBmYWxzZTsKKwkJZGV2LT5zd2l0Y2hfcG93ZXJfc3RhdGUgPSBEUk1fU1dJVENIX1BPV0VSX0NIQU5HSU5HOwogCQlyYWRlb25fcmVzdW1lX2ttcyhkZXYpOworCQlkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9IERSTV9TV0lUQ0hfUE9XRVJfT047CiAJCWRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxlKGRldik7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAicmFkZW9uOiBzd2l0Y2hlZCBvZmZcbiIpOwogCQlkcm1fa21zX2hlbHBlcl9wb2xsX2Rpc2FibGUoZGV2KTsKKwkJZGV2LT5zd2l0Y2hfcG93ZXJfc3RhdGUgPSBEUk1fU1dJVENIX1BPV0VSX0NIQU5HSU5HOwogCQlyYWRlb25fc3VzcGVuZF9rbXMoZGV2LCBwbW0pOwotCQkvKiBkb24ndCBzdXNwZW5kIG9yIHJlc3VtZSBjYXJkIG5vcm1hbGx5ICovCi0JCXJkZXYtPnBvd2VyZWRfZG93biA9IHRydWU7CisJCWRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID0gRFJNX1NXSVRDSF9QT1dFUl9PRkY7CiAJfQogfQogCkBAIC03MDQsMTEgKzcxOCw2IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcmRldi0+aXJxLmlkbGVfcXVldWUpOwogCi0JLyogc2V0dXAgd29ya3F1ZXVlICovCi0JcmRldi0+d3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJyYWRlb24iKTsKLQlpZiAocmRldi0+d3EgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAkvKiBTZXQgYXNpYyBmdW5jdGlvbnMgKi8KIAlyID0gcmFkZW9uX2FzaWNfaW5pdChyZGV2KTsKIAlpZiAocikKQEAgLTc3Myw2ICs3ODIsNyBAQAogCXZnYV9jbGllbnRfcmVnaXN0ZXIocmRldi0+cGRldiwgcmRldiwgTlVMTCwgcmFkZW9uX3ZnYV9zZXRfZGVjb2RlKTsKIAl2Z2Ffc3dpdGNoZXJvb19yZWdpc3Rlcl9jbGllbnQocmRldi0+cGRldiwKIAkJCQkgICAgICAgcmFkZW9uX3N3aXRjaGVyb29fc2V0X3N0YXRlLAorCQkJCSAgICAgICBOVUxMLAogCQkJCSAgICAgICByYWRlb25fc3dpdGNoZXJvb19jYW5fc3dpdGNoKTsKIAogCXIgPSByYWRlb25faW5pdChyZGV2KTsKQEAgLTgwNiw3ICs4MTYsNiBAQAogCS8qIGV2aWN0IHZyYW0gbWVtb3J5ICovCiAJcmFkZW9uX2JvX2V2aWN0X3ZyYW0ocmRldik7CiAJcmFkZW9uX2ZpbmkocmRldik7Ci0JZGVzdHJveV93b3JrcXVldWUocmRldi0+d3EpOwogCXZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfY2xpZW50KHJkZXYtPnBkZXYpOwogCXZnYV9jbGllbnRfcmVnaXN0ZXIocmRldi0+cGRldiwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJaWYgKHJkZXYtPnJpb19tZW0pCkBAIC04MzUsNyArODQ0LDcgQEAKIAl9CiAJcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAocmRldi0+cG93ZXJlZF9kb3duKQorCWlmIChkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9PSBEUk1fU1dJVENIX1BPV0VSX09GRikKIAkJcmV0dXJuIDA7CiAKIAkvKiB0dXJuIG9mZiBkaXNwbGF5IGh3ICovCkBAIC04OTMsNyArOTAyLDcgQEAKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWlmIChyZGV2LT5wb3dlcmVkX2Rvd24pCisJaWYgKGRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID09IERSTV9TV0lUQ0hfUE9XRVJfT0ZGKQogCQlyZXR1cm4gMDsKIAogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwppbmRleCAxZGY0ZGM2Li5kMjZkYWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC02OCw3ICs2OCw3IEBACiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9MVVRfU0VMICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCByYWRlb25fY3J0Yy0+Y3J0Y19pZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGV2ZXJncmVlbl9jcnRjX2xvYWRfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3N0YXRpYyB2b2lkIGRjZTRfY3J0Y19sb2FkX2x1dChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CkBAIC05OCw2ICs5OCw2NiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgZGNlNV9jcnRjX2xvYWRfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwlEUk1fREVCVUdfS01TKCIlZFxuIiwgcmFkZW9uX2NydGMtPmNydGNfaWQpOworCisJV1JFRzMyKE5JX0lOUFVUX0NTQ19DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCSAgICAgICAoTklfSU5QVVRfQ1NDX0dSUEhfTU9ERShOSV9JTlBVVF9DU0NfQllQQVNTKSB8CisJCU5JX0lOUFVUX0NTQ19PVkxfTU9ERShOSV9JTlBVVF9DU0NfQllQQVNTKSkpOworCVdSRUczMihOSV9QUkVTQ0FMRV9HUlBIX0NPTlRST0wgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJICAgICAgIE5JX0dSUEhfUFJFU0NBTEVfQllQQVNTKTsKKwlXUkVHMzIoTklfUFJFU0NBTEVfT1ZMX0NPTlRST0wgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJICAgICAgIE5JX09WTF9QUkVTQ0FMRV9CWVBBU1MpOworCVdSRUczMihOSV9JTlBVVF9HQU1NQV9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCSAgICAgICAoTklfR1JQSF9JTlBVVF9HQU1NQV9NT0RFKE5JX0lOUFVUX0dBTU1BX1VTRV9MVVQpIHwKKwkJTklfT1ZMX0lOUFVUX0dBTU1BX01PREUoTklfSU5QVVRfR0FNTUFfVVNFX0xVVCkpKTsKKworCVdSRUczMihFVkVSR1JFRU5fRENfTFVUX0NPTlRST0wgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCisJV1JFRzMyKEVWRVJHUkVFTl9EQ19MVVRfQkxBQ0tfT0ZGU0VUX0JMVUUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCVdSRUczMihFVkVSR1JFRU5fRENfTFVUX0JMQUNLX09GRlNFVF9HUkVFTiArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9EQ19MVVRfQkxBQ0tfT0ZGU0VUX1JFRCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisKKwlXUkVHMzIoRVZFUkdSRUVOX0RDX0xVVF9XSElURV9PRkZTRVRfQkxVRSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMHhmZmZmKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0RDX0xVVF9XSElURV9PRkZTRVRfR1JFRU4gKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDB4ZmZmZik7CisJV1JFRzMyKEVWRVJHUkVFTl9EQ19MVVRfV0hJVEVfT0ZGU0VUX1JFRCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMHhmZmZmKTsKKworCVdSRUczMihFVkVSR1JFRU5fRENfTFVUX1JXX01PREUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCVdSRUczMihFVkVSR1JFRU5fRENfTFVUX1dSSVRFX0VOX01BU0sgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDB4MDAwMDAwMDcpOworCisJV1JFRzMyKEVWRVJHUkVFTl9EQ19MVVRfUldfSU5ERVggKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlXUkVHMzIoRVZFUkdSRUVOX0RDX0xVVF8zMF9DT0xPUiArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKKwkJICAgICAgIChyYWRlb25fY3J0Yy0+bHV0X3JbaV0gPDwgMjApIHwKKwkJICAgICAgIChyYWRlb25fY3J0Yy0+bHV0X2dbaV0gPDwgMTApIHwKKwkJICAgICAgIChyYWRlb25fY3J0Yy0+bHV0X2JbaV0gPDwgMCkpOworCX0KKworCVdSRUczMihOSV9ERUdBTU1BX0NPTlRST0wgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJICAgICAgIChOSV9HUlBIX0RFR0FNTUFfTU9ERShOSV9ERUdBTU1BX0JZUEFTUykgfAorCQlOSV9PVkxfREVHQU1NQV9NT0RFKE5JX0RFR0FNTUFfQllQQVNTKSB8CisJCU5JX0lDT05fREVHQU1NQV9NT0RFKE5JX0RFR0FNTUFfQllQQVNTKSB8CisJCU5JX0NVUlNPUl9ERUdBTU1BX01PREUoTklfREVHQU1NQV9CWVBBU1MpKSk7CisJV1JFRzMyKE5JX0dBTVVUX1JFTUFQX0NPTlRST0wgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJICAgICAgIChOSV9HUlBIX0dBTVVUX1JFTUFQX01PREUoTklfR0FNVVRfUkVNQVBfQllQQVNTKSB8CisJCU5JX09WTF9HQU1VVF9SRU1BUF9NT0RFKE5JX0dBTVVUX1JFTUFQX0JZUEFTUykpKTsKKwlXUkVHMzIoTklfUkVHQU1NQV9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCSAgICAgICAoTklfR1JQSF9SRUdBTU1BX01PREUoTklfUkVHQU1NQV9CWVBBU1MpIHwKKwkJTklfT1ZMX1JFR0FNTUFfTU9ERShOSV9SRUdBTU1BX0JZUEFTUykpKTsKKwlXUkVHMzIoTklfT1VUUFVUX0NTQ19DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCSAgICAgICAoTklfT1VUUFVUX0NTQ19HUlBIX01PREUoTklfT1VUUFVUX0NTQ19CWVBBU1MpIHwKKwkJTklfT1VUUFVUX0NTQ19PVkxfTU9ERShOSV9PVVRQVVRfQ1NDX0JZUEFTUykpKTsKKwkvKiBYWFggbWF0Y2ggdGhpcyB0byB0aGUgZGVwdGggb2YgdGhlIGNydGMgZm10IGJsb2NrLCBtb3ZlIHRvIG1vZGVzZXQ/ICovCisJV1JFRzMyKDB4Njk0MCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisKK30KKwogc3RhdGljIHZvaWQgbGVnYWN5X2NydGNfbG9hZF9sdXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKQEAgLTEzMCw4ICsxOTAsMTAgQEAKIAlpZiAoIWNydGMtPmVuYWJsZWQpCiAJCXJldHVybjsKIAotCWlmIChBU0lDX0lTX0RDRTQocmRldikpCi0JCWV2ZXJncmVlbl9jcnRjX2xvYWRfbHV0KGNydGMpOworCWlmIChBU0lDX0lTX0RDRTUocmRldikpCisJCWRjZTVfY3J0Y19sb2FkX2x1dChjcnRjKTsKKwllbHNlIGlmIChBU0lDX0lTX0RDRTQocmRldikpCisJCWRjZTRfY3J0Y19sb2FkX2x1dChjcnRjKTsKIAllbHNlIGlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQogCQlhdml2b19jcnRjX2xvYWRfbHV0KGNydGMpOwogCWVsc2UKQEAgLTE4MywxMiArMjQ1LDI3MiBAQAogCWtmcmVlKHJhZGVvbl9jcnRjKTsKIH0KIAorLyoKKyAqIEhhbmRsZSB1bnBpbiBldmVudHMgb3V0c2lkZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgcHJvcGVyLgorICovCitzdGF0aWMgdm9pZCByYWRlb25fdW5waW5fd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqX193b3JrKQoreworCXN0cnVjdCByYWRlb25fdW5waW5fd29yayAqd29yayA9CisJCWNvbnRhaW5lcl9vZihfX3dvcmssIHN0cnVjdCByYWRlb25fdW5waW5fd29yaywgd29yayk7CisJaW50IHI7CisKKwkvKiB1bnBpbiBvZiB0aGUgb2xkIGJ1ZmZlciAqLworCXIgPSByYWRlb25fYm9fcmVzZXJ2ZSh3b3JrLT5vbGRfcmJvLCBmYWxzZSk7CisJaWYgKGxpa2VseShyID09IDApKSB7CisJCXIgPSByYWRlb25fYm9fdW5waW4od29yay0+b2xkX3Jibyk7CisJCWlmICh1bmxpa2VseShyICE9IDApKSB7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byB1bnBpbiBidWZmZXIgYWZ0ZXIgZmxpcFxuIik7CisJCX0KKwkJcmFkZW9uX2JvX3VucmVzZXJ2ZSh3b3JrLT5vbGRfcmJvKTsKKwl9IGVsc2UKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVzZXJ2ZSBidWZmZXIgYWZ0ZXIgZmxpcFxuIik7CisJa2ZyZWUod29yayk7Cit9CisKK3ZvaWQgcmFkZW9uX2NydGNfaGFuZGxlX2ZsaXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjX2lkKQoreworCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSByZGV2LT5tb2RlX2luZm8uY3J0Y3NbY3J0Y19pZF07CisJc3RydWN0IHJhZGVvbl91bnBpbl93b3JrICp3b3JrOworCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmU7CisJc3RydWN0IHRpbWV2YWwgbm93OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHVwZGF0ZV9wZW5kaW5nOworCWludCB2cG9zLCBocG9zOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkZXYtPmRkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwl3b3JrID0gcmFkZW9uX2NydGMtPnVucGluX3dvcms7CisJaWYgKHdvcmsgPT0gTlVMTCB8fAorCSAgICAhcmFkZW9uX2ZlbmNlX3NpZ25hbGVkKHdvcmstPmZlbmNlKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZGV2LT5kZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJLyogTmV3IHBhZ2VmbGlwLCBvciBqdXN0IGNvbXBsZXRpb24gb2YgYSBwcmV2aW91cyBvbmU/ICovCisJaWYgKCFyYWRlb25fY3J0Yy0+ZGVmZXJyZWRfZmxpcF9jb21wbGV0aW9uKSB7CisJCS8qIGRvIHRoZSBmbGlwIChtbWlvKSAqLworCQl1cGRhdGVfcGVuZGluZyA9IHJhZGVvbl9wYWdlX2ZsaXAocmRldiwgY3J0Y19pZCwgd29yay0+bmV3X2NydGNfYmFzZSk7CisJfSBlbHNlIHsKKwkJLyogVGhpcyBpcyBqdXN0IGEgY29tcGxldGlvbiBvZiBhIGZsaXAgcXVldWVkIGluIGNydGMKKwkJICogYXQgbGFzdCBpbnZvY2F0aW9uLiBNYWtlIHN1cmUgd2UgZ28gZGlyZWN0bHkgdG8KKwkJICogY29tcGxldGlvbiByb3V0aW5lLgorCQkgKi8KKwkJdXBkYXRlX3BlbmRpbmcgPSAwOworCQlyYWRlb25fY3J0Yy0+ZGVmZXJyZWRfZmxpcF9jb21wbGV0aW9uID0gMDsKKwl9CisKKwkvKiBIYXMgdGhlIHBhZ2VmbGlwIGFscmVhZHkgY29tcGxldGVkIGluIGNydGMsIG9yIGlzIGl0IGNlcnRhaW4KKwkgKiB0byBjb21wbGV0ZSBpbiB0aGlzIHZibGFuaz8KKwkgKi8KKwlpZiAodXBkYXRlX3BlbmRpbmcgJiYKKwkgICAgKERSTV9TQ0FOT1VUUE9TX1ZBTElEICYgcmFkZW9uX2dldF9jcnRjX3NjYW5vdXRwb3MocmRldi0+ZGRldiwgY3J0Y19pZCwKKwkJCQkJCQkgICAgICAgJnZwb3MsICZocG9zKSkgJiYKKwkgICAgKHZwb3MgPj0wKSAmJgorCSAgICAodnBvcyA8ICg5OSAqIHJkZXYtPm1vZGVfaW5mby5jcnRjc1tjcnRjX2lkXS0+YmFzZS5od21vZGUuY3J0Y192ZGlzcGxheSkvMTAwKSkgeworCQkvKiBjcnRjIGRpZG4ndCBmbGlwIGluIHRoaXMgdGFyZ2V0IHZibGFuayBpbnRlcnZhbCwKKwkJICogYnV0IGZsaXAgaXMgcGVuZGluZyBpbiBjcnRjLiBJdCB3aWxsIGNvbXBsZXRlIGl0CisJCSAqIGluIG5leHQgdmJsYW5rIGludGVydmFsLCBzbyBjb21wbGV0ZSB0aGUgZmxpcCBhdAorCQkgKiBuZXh0IHZibGFuayBpcnEuCisJCSAqLworCQlyYWRlb25fY3J0Yy0+ZGVmZXJyZWRfZmxpcF9jb21wbGV0aW9uID0gMTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRldi0+ZGRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogUGFnZWZsaXAgKHdpbGwgYmUpIGNlcnRhaW5seSBjb21wbGV0ZWQgaW4gdGhpcyB2YmxhbmsuIENsZWFuIHVwLiAqLworCXJhZGVvbl9jcnRjLT51bnBpbl93b3JrID0gTlVMTDsKKworCS8qIHdha2V1cCB1c2Vyc3BhY2UgKi8KKwlpZiAod29yay0+ZXZlbnQpIHsKKwkJZSA9IHdvcmstPmV2ZW50OworCQllLT5ldmVudC5zZXF1ZW5jZSA9IGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUocmRldi0+ZGRldiwgY3J0Y19pZCwgJm5vdyk7CisJCWUtPmV2ZW50LnR2X3NlYyA9IG5vdy50dl9zZWM7CisJCWUtPmV2ZW50LnR2X3VzZWMgPSBub3cudHZfdXNlYzsKKwkJbGlzdF9hZGRfdGFpbCgmZS0+YmFzZS5saW5rLCAmZS0+YmFzZS5maWxlX3ByaXYtPmV2ZW50X2xpc3QpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmUtPmJhc2UuZmlsZV9wcml2LT5ldmVudF93YWl0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRldi0+ZGRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCisJZHJtX3ZibGFua19wdXQocmRldi0+ZGRldiwgcmFkZW9uX2NydGMtPmNydGNfaWQpOworCXJhZGVvbl9mZW5jZV91bnJlZigmd29yay0+ZmVuY2UpOworCXJhZGVvbl9wb3N0X3BhZ2VfZmxpcCh3b3JrLT5yZGV2LCB3b3JrLT5jcnRjX2lkKTsKKwlzY2hlZHVsZV93b3JrKCZ3b3JrLT53b3JrKTsKK30KKworc3RhdGljIGludCByYWRlb25fY3J0Y19wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkgc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOworCXN0cnVjdCByYWRlb25fZnJhbWVidWZmZXIgKm9sZF9yYWRlb25fZmI7CisJc3RydWN0IHJhZGVvbl9mcmFtZWJ1ZmZlciAqbmV3X3JhZGVvbl9mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgcmFkZW9uX2JvICpyYm87CisJc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2U7CisJc3RydWN0IHJhZGVvbl91bnBpbl93b3JrICp3b3JrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHRpbGluZ19mbGFncywgcGl0Y2hfcGl4ZWxzOworCXU2NCBiYXNlOworCWludCByOworCisJd29yayA9IGt6YWxsb2Moc2l6ZW9mICp3b3JrLCBHRlBfS0VSTkVMKTsKKwlpZiAod29yayA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXIgPSByYWRlb25fZmVuY2VfY3JlYXRlKHJkZXYsICZmZW5jZSk7CisJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKKwkJa2ZyZWUod29yayk7CisJCURSTV9FUlJPUigiZmxpcCBxdWV1ZTogZmFpbGVkIHRvIGNyZWF0ZSBmZW5jZS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJd29yay0+ZXZlbnQgPSBldmVudDsKKwl3b3JrLT5yZGV2ID0gcmRldjsKKwl3b3JrLT5jcnRjX2lkID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7CisJd29yay0+ZmVuY2UgPSByYWRlb25fZmVuY2VfcmVmKGZlbmNlKTsKKwlvbGRfcmFkZW9uX2ZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKGNydGMtPmZiKTsKKwluZXdfcmFkZW9uX2ZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKGZiKTsKKwkvKiBzY2hlZHVsZSB1bnBpbiBvZiB0aGUgb2xkIGJ1ZmZlciAqLworCW9iaiA9IG9sZF9yYWRlb25fZmItPm9iajsKKwlyYm8gPSBvYmotPmRyaXZlcl9wcml2YXRlOworCXdvcmstPm9sZF9yYm8gPSByYm87CisJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCByYWRlb25fdW5waW5fd29ya19mdW5jKTsKKworCS8qIFdlIGJvcnJvdyB0aGUgZXZlbnQgc3BpbiBsb2NrIGZvciBwcm90ZWN0aW5nIHVucGluX3dvcmsgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJaWYgKHJhZGVvbl9jcnRjLT51bnBpbl93b3JrKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCQlrZnJlZSh3b3JrKTsKKwkJcmFkZW9uX2ZlbmNlX3VucmVmKCZmZW5jZSk7CisKKwkJRFJNX0RFQlVHX0RSSVZFUigiZmxpcCBxdWV1ZTogY3J0YyBhbHJlYWR5IGJ1c3lcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlyYWRlb25fY3J0Yy0+dW5waW5fd29yayA9IHdvcms7CisJcmFkZW9uX2NydGMtPmRlZmVycmVkX2ZsaXBfY29tcGxldGlvbiA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisKKwkvKiBwaW4gdGhlIG5ldyBidWZmZXIgKi8KKwlvYmogPSBuZXdfcmFkZW9uX2ZiLT5vYmo7CisJcmJvID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCURSTV9ERUJVR19EUklWRVIoImZsaXAtaW9jdGwoKSBjdXJfZmJvID0gJXAsIGN1cl9iYm8gPSAlcFxuIiwKKwkJCSB3b3JrLT5vbGRfcmJvLCByYm8pOworCisJciA9IHJhZGVvbl9ib19yZXNlcnZlKHJibywgZmFsc2UpOworCWlmICh1bmxpa2VseShyICE9IDApKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlc2VydmUgbmV3IHJibyBidWZmZXIgYmVmb3JlIGZsaXBcbiIpOworCQlnb3RvIHBmbGlwX2NsZWFudXA7CisJfQorCXIgPSByYWRlb25fYm9fcGluKHJibywgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwgJmJhc2UpOworCWlmICh1bmxpa2VseShyICE9IDApKSB7CisJCXJhZGVvbl9ib191bnJlc2VydmUocmJvKTsKKwkJciA9IC1FSU5WQUw7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBpbiBuZXcgcmJvIGJ1ZmZlciBiZWZvcmUgZmxpcFxuIik7CisJCWdvdG8gcGZsaXBfY2xlYW51cDsKKwl9CisJcmFkZW9uX2JvX2dldF90aWxpbmdfZmxhZ3MocmJvLCAmdGlsaW5nX2ZsYWdzLCBOVUxMKTsKKwlyYWRlb25fYm9fdW5yZXNlcnZlKHJibyk7CisKKwlpZiAoIUFTSUNfSVNfQVZJVk8ocmRldikpIHsKKwkJLyogY3J0YyBvZmZzZXQgaXMgZnJvbSBkaXNwbGF5IGJhc2UgYWRkciBub3QgRkIgbG9jYXRpb24gKi8KKwkJYmFzZSAtPSByYWRlb25fY3J0Yy0+bGVnYWN5X2Rpc3BsYXlfYmFzZV9hZGRyOworCQlwaXRjaF9waXhlbHMgPSBmYi0+cGl0Y2ggLyAoZmItPmJpdHNfcGVyX3BpeGVsIC8gOCk7CisKKwkJaWYgKHRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUFDUk8pIHsKKwkJCWlmIChBU0lDX0lTX1IzMDAocmRldikpIHsKKwkJCQliYXNlICY9IH4weDdmZjsKKwkJCX0gZWxzZSB7CisJCQkJaW50IGJ5dGVzaGlmdCA9IGZiLT5iaXRzX3Blcl9waXhlbCA+PiA0OworCQkJCWludCB0aWxlX2FkZHIgPSAoKChjcnRjLT55ID4+IDMpICogcGl0Y2hfcGl4ZWxzICsgIGNydGMtPngpID4+ICg4IC0gYnl0ZXNoaWZ0KSkgPDwgMTE7CisJCQkJYmFzZSArPSB0aWxlX2FkZHIgKyAoKGNydGMtPnggPDwgYnl0ZXNoaWZ0KSAlIDI1NikgKyAoKGNydGMtPnkgJSA4KSA8PCA4KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWludCBvZmZzZXQgPSBjcnRjLT55ICogcGl0Y2hfcGl4ZWxzICsgY3J0Yy0+eDsKKwkJCXN3aXRjaCAoZmItPmJpdHNfcGVyX3BpeGVsKSB7CisJCQljYXNlIDg6CisJCQlkZWZhdWx0OgorCQkJCW9mZnNldCAqPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAxNToKKwkJCWNhc2UgMTY6CisJCQkJb2Zmc2V0ICo9IDI7CisJCQkJYnJlYWs7CisJCQljYXNlIDI0OgorCQkJCW9mZnNldCAqPSAzOworCQkJCWJyZWFrOworCQkJY2FzZSAzMjoKKwkJCQlvZmZzZXQgKj0gNDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJhc2UgKz0gb2Zmc2V0OworCQl9CisJCWJhc2UgJj0gfjc7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCXdvcmstPm5ld19jcnRjX2Jhc2UgPSBiYXNlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCisJLyogdXBkYXRlIGNydGMgZmIgKi8KKwljcnRjLT5mYiA9IGZiOworCisJciA9IGRybV92YmxhbmtfZ2V0KGRldiwgcmFkZW9uX2NydGMtPmNydGNfaWQpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCB2YmxhbmsgYmVmb3JlIGZsaXBcbiIpOworCQlnb3RvIHBmbGlwX2NsZWFudXAxOworCX0KKworCS8qIDMyIG91Z2h0IHRvIGNvdmVyIHVzICovCisJciA9IHJhZGVvbl9yaW5nX2xvY2socmRldiwgMzIpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGxvY2sgdGhlIHJpbmcgYmVmb3JlIGZsaXBcbiIpOworCQlnb3RvIHBmbGlwX2NsZWFudXAyOworCX0KKworCS8qIGVtaXQgdGhlIGZlbmNlICovCisJcmFkZW9uX2ZlbmNlX2VtaXQocmRldiwgZmVuY2UpOworCS8qIHNldCB0aGUgcHJvcGVyIGludGVycnVwdCAqLworCXJhZGVvbl9wcmVfcGFnZV9mbGlwKHJkZXYsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKKwkvKiBmaXJlIHRoZSByaW5nICovCisJcmFkZW9uX3JpbmdfdW5sb2NrX2NvbW1pdChyZGV2KTsKKworCXJldHVybiAwOworCitwZmxpcF9jbGVhbnVwMjoKKwlkcm1fdmJsYW5rX3B1dChkZXYsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKKworcGZsaXBfY2xlYW51cDE6CisJciA9IHJhZGVvbl9ib19yZXNlcnZlKHJibywgZmFsc2UpOworCWlmICh1bmxpa2VseShyICE9IDApKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlc2VydmUgbmV3IHJibyBpbiBlcnJvciBwYXRoXG4iKTsKKwkJZ290byBwZmxpcF9jbGVhbnVwOworCX0KKwlyID0gcmFkZW9uX2JvX3VucGluKHJibyk7CisJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKKwkJcmFkZW9uX2JvX3VucmVzZXJ2ZShyYm8pOworCQlyID0gLUVJTlZBTDsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdW5waW4gbmV3IHJibyBpbiBlcnJvciBwYXRoXG4iKTsKKwkJZ290byBwZmxpcF9jbGVhbnVwOworCX0KKwlyYWRlb25fYm9fdW5yZXNlcnZlKHJibyk7CisKK3BmbGlwX2NsZWFudXA6CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCXJhZGVvbl9jcnRjLT51bnBpbl93b3JrID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlyYWRlb25fZmVuY2VfdW5yZWYoJmZlbmNlKTsKKwlrZnJlZSh3b3JrKTsKKworCXJldHVybiByOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIHJhZGVvbl9jcnRjX2Z1bmNzID0gewogCS5jdXJzb3Jfc2V0ID0gcmFkZW9uX2NydGNfY3Vyc29yX3NldCwKIAkuY3Vyc29yX21vdmUgPSByYWRlb25fY3J0Y19jdXJzb3JfbW92ZSwKIAkuZ2FtbWFfc2V0ID0gcmFkZW9uX2NydGNfZ2FtbWFfc2V0LAogCS5zZXRfY29uZmlnID0gZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcsCiAJLmRlc3Ryb3kgPSByYWRlb25fY3J0Y19kZXN0cm95LAorCS5wYWdlX2ZsaXAgPSByYWRlb25fY3J0Y19wYWdlX2ZsaXAsCiB9OwogCiBzdGF0aWMgdm9pZCByYWRlb25fY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpbmRleCkKQEAgLTIyNSw3ICs1NDcsNyBAQAogCQlyYWRlb25fbGVnYWN5X2luaXRfY3J0YyhkZXYsIHJhZGVvbl9jcnRjKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKmVuY29kZXJfbmFtZXNbMzRdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmVuY29kZXJfbmFtZXNbMzZdID0gewogCSJOT05FIiwKIAkiSU5URVJOQUxfTFZEUyIsCiAJIklOVEVSTkFMX1RNRFMxIiwKQEAgLTI2MCw2ICs1ODIsOCBAQAogCSJJTlRFUk5BTF9LTERTQ1BfTFZUTUEiLAogCSJJTlRFUk5BTF9VTklQSFkxIiwKIAkiSU5URVJOQUxfVU5JUEhZMiIsCisJIk5VVE1FRyIsCisJIlRSQVZJUyIsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqY29ubmVjdG9yX25hbWVzWzE1XSA9IHsKQEAgLTQxNyw5ICs3NDEsMTcgQEAKIAlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKIAkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IGRybV9nZXRfZWRpZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMtPmFkYXB0ZXIpOwogCX0KLQkvKiBzb21lIHNlcnZlcnMgcHJvdmlkZSBhIGhhcmRjb2RlZCBlZGlkIGluIHJvbSBmb3IgS1ZNcyAqLwotCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkKLQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IHJhZGVvbl9jb21iaW9zX2dldF9oYXJkY29kZWRfZWRpZChyZGV2KTsKKworCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgeworCQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCQkvKiBzb21lIGxhcHRvcHMgcHJvdmlkZSBhIGhhcmRjb2RlZCBlZGlkIGluIHJvbSBmb3IgTENEcyAqLworCQkJaWYgKCgocmFkZW9uX2Nvbm5lY3Rvci0+YmFzZS5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUykgfHwKKwkJCSAgICAgKHJhZGVvbl9jb25uZWN0b3ItPmJhc2UuY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkpKQorCQkJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSByYWRlb25fYmlvc19nZXRfaGFyZGNvZGVkX2VkaWQocmRldik7CisJCX0gZWxzZQorCQkJLyogc29tZSBzZXJ2ZXJzIHByb3ZpZGUgYSBoYXJkY29kZWQgZWRpZCBpbiByb20gZm9yIEtWTXMgKi8KKwkJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSByYWRlb25fYmlvc19nZXRfaGFyZGNvZGVkX2VkaWQocmRldik7CisJfQogCWlmIChyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7CiAJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CiAJCXJldCA9IGRybV9hZGRfZWRpZF9tb2RlcygmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CkBAIC04NDksNyArMTE4MSwxMCBAQAogCiAJcmRldi0+ZGRldi0+bW9kZV9jb25maWcuZnVuY3MgPSAodm9pZCAqKSZyYWRlb25fbW9kZV9mdW5jczsKIAotCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkgeworCQlyZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSAxNjM4NDsKKwkJcmRldi0+ZGRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDE2Mzg0OworCX0gZWxzZSBpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgewogCQlyZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSA4MTkyOwogCQlyZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gODE5MjsKIAl9IGVsc2UgewpAQCAtMTAxOSw3ICsxMzU0LDcgQEAKIC8qCiAgKiBSZXRyaWV2ZSBjdXJyZW50IHZpZGVvIHNjYW5vdXQgcG9zaXRpb24gb2YgY3J0YyBvbiBhIGdpdmVuIGdwdS4KICAqCi0gKiBccGFyYW0gcmRldiBEZXZpY2UgdG8gcXVlcnkuCisgKiBccGFyYW0gZGV2IERldmljZSB0byBxdWVyeS4KICAqIFxwYXJhbSBjcnRjIENydGMgdG8gcXVlcnkuCiAgKiBccGFyYW0gKnZwb3MgTG9jYXRpb24gd2hlcmUgdmVydGljYWwgc2Nhbm91dCBwb3NpdGlvbiBzaG91bGQgYmUgc3RvcmVkLgogICogXHBhcmFtICpocG9zIExvY2F0aW9uIHdoZXJlIGhvcml6b250YWwgc2Nhbm91dCBwb3NpdGlvbiBzaG91bGQgZ28uCkBAIC0xMDMxLDcyICsxMzY2LDc0IEBACiAgKgogICogXHJldHVybiBGbGFncywgb3InZWQgdG9nZXRoZXIgYXMgZm9sbG93czoKICAqCi0gKiBSQURFT05fU0NBTk9VVFBPU19WQUxJRCA9IFF1ZXJ5IHN1Y2Nlc3NmdWxsLgotICogUkFERU9OX1NDQU5PVVRQT1NfSU5WQkwgPSBJbnNpZGUgdmJsYW5rLgotICogUkFERU9OX1NDQU5PVVRQT1NfQUNDVVJBVEUgPSBSZXR1cm5lZCBwb3NpdGlvbiBpcyBhY2N1cmF0ZS4gQSBsYWNrIG9mCisgKiBEUk1fU0NBTk9VVFBPU19WQUxJRCA9IFF1ZXJ5IHN1Y2Nlc3NmdWxsLgorICogRFJNX1NDQU5PVVRQT1NfSU5WQkwgPSBJbnNpZGUgdmJsYW5rLgorICogRFJNX1NDQU5PVVRQT1NfQUNDVVJBVEUgPSBSZXR1cm5lZCBwb3NpdGlvbiBpcyBhY2N1cmF0ZS4gQSBsYWNrIG9mCiAgKiB0aGlzIGZsYWcgbWVhbnMgdGhhdCByZXR1cm5lZCBwb3NpdGlvbiBtYXkgYmUgb2Zmc2V0IGJ5IGEgY29uc3RhbnQgYnV0CiAgKiB1bmtub3duIHNtYWxsIG51bWJlciBvZiBzY2FubGluZXMgd3J0LiByZWFsIHNjYW5vdXQgcG9zaXRpb24uCiAgKgogICovCi1pbnQgcmFkZW9uX2dldF9jcnRjX3NjYW5vdXRwb3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjLCBpbnQgKnZwb3MsIGludCAqaHBvcykKK2ludCByYWRlb25fZ2V0X2NydGNfc2Nhbm91dHBvcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywgaW50ICp2cG9zLCBpbnQgKmhwb3MpCiB7CiAJdTMyIHN0YXRfY3J0YyA9IDAsIHZibCA9IDAsIHBvc2l0aW9uID0gMDsKIAlpbnQgdmJsX3N0YXJ0LCB2YmxfZW5kLCB2dG90YWwsIHJldCA9IDA7CiAJYm9vbCBpbl92YmwgPSB0cnVlOwogCisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCiAJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgewogCQlpZiAoY3J0YyA9PSAwKSB7CiAJCQl2YmwgPSBSUkVHMzIoRVZFUkdSRUVOX0NSVENfVl9CTEFOS19TVEFSVF9FTkQgKwogCQkJCSAgICAgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCk7CiAJCQlwb3NpdGlvbiA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19TVEFUVVNfUE9TSVRJT04gKwogCQkJCQkgIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQpOwotCQkJcmV0IHw9IFJBREVPTl9TQ0FOT1VUUE9TX1ZBTElEOworCQkJcmV0IHw9IERSTV9TQ0FOT1VUUE9TX1ZBTElEOwogCQl9CiAJCWlmIChjcnRjID09IDEpIHsKIAkJCXZibCA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19WX0JMQU5LX1NUQVJUX0VORCArCiAJCQkJICAgICBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VUKTsKIAkJCXBvc2l0aW9uID0gUlJFRzMyKEVWRVJHUkVFTl9DUlRDX1NUQVRVU19QT1NJVElPTiArCiAJCQkJCSAgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCk7Ci0JCQlyZXQgfD0gUkFERU9OX1NDQU5PVVRQT1NfVkFMSUQ7CisJCQlyZXQgfD0gRFJNX1NDQU5PVVRQT1NfVkFMSUQ7CiAJCX0KIAkJaWYgKGNydGMgPT0gMikgewogCQkJdmJsID0gUlJFRzMyKEVWRVJHUkVFTl9DUlRDX1ZfQkxBTktfU1RBUlRfRU5EICsKIAkJCQkgICAgIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQpOwogCQkJcG9zaXRpb24gPSBSUkVHMzIoRVZFUkdSRUVOX0NSVENfU1RBVFVTX1BPU0lUSU9OICsKIAkJCQkJICBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VUKTsKLQkJCXJldCB8PSBSQURFT05fU0NBTk9VVFBPU19WQUxJRDsKKwkJCXJldCB8PSBEUk1fU0NBTk9VVFBPU19WQUxJRDsKIAkJfQogCQlpZiAoY3J0YyA9PSAzKSB7CiAJCQl2YmwgPSBSUkVHMzIoRVZFUkdSRUVOX0NSVENfVl9CTEFOS19TVEFSVF9FTkQgKwogCQkJCSAgICAgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCk7CiAJCQlwb3NpdGlvbiA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19TVEFUVVNfUE9TSVRJT04gKwogCQkJCQkgIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQpOwotCQkJcmV0IHw9IFJBREVPTl9TQ0FOT1VUUE9TX1ZBTElEOworCQkJcmV0IHw9IERSTV9TQ0FOT1VUUE9TX1ZBTElEOwogCQl9CiAJCWlmIChjcnRjID09IDQpIHsKIAkJCXZibCA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19WX0JMQU5LX1NUQVJUX0VORCArCiAJCQkJICAgICBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VUKTsKIAkJCXBvc2l0aW9uID0gUlJFRzMyKEVWRVJHUkVFTl9DUlRDX1NUQVRVU19QT1NJVElPTiArCiAJCQkJCSAgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCk7Ci0JCQlyZXQgfD0gUkFERU9OX1NDQU5PVVRQT1NfVkFMSUQ7CisJCQlyZXQgfD0gRFJNX1NDQU5PVVRQT1NfVkFMSUQ7CiAJCX0KIAkJaWYgKGNydGMgPT0gNSkgewogCQkJdmJsID0gUlJFRzMyKEVWRVJHUkVFTl9DUlRDX1ZfQkxBTktfU1RBUlRfRU5EICsKIAkJCQkgICAgIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQpOwogCQkJcG9zaXRpb24gPSBSUkVHMzIoRVZFUkdSRUVOX0NSVENfU1RBVFVTX1BPU0lUSU9OICsKIAkJCQkJICBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VUKTsKLQkJCXJldCB8PSBSQURFT05fU0NBTk9VVFBPU19WQUxJRDsKKwkJCXJldCB8PSBEUk1fU0NBTk9VVFBPU19WQUxJRDsKIAkJfQogCX0gZWxzZSBpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgewogCQlpZiAoY3J0YyA9PSAwKSB7CiAJCQl2YmwgPSBSUkVHMzIoQVZJVk9fRDFDUlRDX1ZfQkxBTktfU1RBUlRfRU5EKTsKIAkJCXBvc2l0aW9uID0gUlJFRzMyKEFWSVZPX0QxQ1JUQ19TVEFUVVNfUE9TSVRJT04pOwotCQkJcmV0IHw9IFJBREVPTl9TQ0FOT1VUUE9TX1ZBTElEOworCQkJcmV0IHw9IERSTV9TQ0FOT1VUUE9TX1ZBTElEOwogCQl9CiAJCWlmIChjcnRjID09IDEpIHsKIAkJCXZibCA9IFJSRUczMihBVklWT19EMkNSVENfVl9CTEFOS19TVEFSVF9FTkQpOwogCQkJcG9zaXRpb24gPSBSUkVHMzIoQVZJVk9fRDJDUlRDX1NUQVRVU19QT1NJVElPTik7Ci0JCQlyZXQgfD0gUkFERU9OX1NDQU5PVVRQT1NfVkFMSUQ7CisJCQlyZXQgfD0gRFJNX1NDQU5PVVRQT1NfVkFMSUQ7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBQcmUtQVZJVk86IERpZmZlcmVudCBlbmNvZGluZyBvZiBzY2Fub3V0IHBvcyBhbmQgdmJsYW5rIGludGVydmFsLiAqLwpAQCAtMTExMiw3ICsxNDQ5LDcgQEAKIAkJCWlmICghKHN0YXRfY3J0YyAmIDEpKQogCQkJCWluX3ZibCA9IGZhbHNlOwogCi0JCQlyZXQgfD0gUkFERU9OX1NDQU5PVVRQT1NfVkFMSUQ7CisJCQlyZXQgfD0gRFJNX1NDQU5PVVRQT1NfVkFMSUQ7CiAJCX0KIAkJaWYgKGNydGMgPT0gMSkgewogCQkJdmJsID0gKFJSRUczMihSQURFT05fQ1JUQzJfVl9UT1RBTF9ESVNQKSAmCkBAIC0xMTIyLDcgKzE0NTksNyBAQAogCQkJaWYgKCEoc3RhdF9jcnRjICYgMSkpCiAJCQkJaW5fdmJsID0gZmFsc2U7CiAKLQkJCXJldCB8PSBSQURFT05fU0NBTk9VVFBPU19WQUxJRDsKKwkJCXJldCB8PSBEUk1fU0NBTk9VVFBPU19WQUxJRDsKIAkJfQogCX0KIApAQCAtMTEzMywxMyArMTQ3MCwxMyBAQAogCS8qIFZhbGlkIHZibGFuayBhcmVhIGJvdW5kYXJpZXMgZnJvbSBncHUgcmV0cmlldmVkPyAqLwogCWlmICh2YmwgPiAwKSB7CiAJCS8qIFllczogRGVjb2RlLiAqLwotCQlyZXQgfD0gUkFERU9OX1NDQU5PVVRQT1NfQUNDVVJBVEU7CisJCXJldCB8PSBEUk1fU0NBTk9VVFBPU19BQ0NVUkFURTsKIAkJdmJsX3N0YXJ0ID0gdmJsICYgMHgxZmZmOwogCQl2YmxfZW5kID0gKHZibCA+PiAxNikgJiAweDFmZmY7CiAJfQogCWVsc2UgewogCQkvKiBObzogRmFrZSBzb21ldGhpbmcgcmVhc29uYWJsZSB3aGljaCBnaXZlcyBhdCBsZWFzdCBvayByZXN1bHRzLiAqLwotCQl2Ymxfc3RhcnQgPSByZGV2LT5tb2RlX2luZm8uY3J0Y3NbY3J0Y10tPmJhc2UubW9kZS5jcnRjX3ZkaXNwbGF5OworCQl2Ymxfc3RhcnQgPSByZGV2LT5tb2RlX2luZm8uY3J0Y3NbY3J0Y10tPmJhc2UuaHdtb2RlLmNydGNfdmRpc3BsYXk7CiAJCXZibF9lbmQgPSAwOwogCX0KIApAQCAtMTE1NSw3ICsxNDkyLDcgQEAKIAogCS8qIEluc2lkZSAidXBwZXIgcGFydCIgb2YgdmJsYW5rIGFyZWE/IEFwcGx5IGNvcnJlY3RpdmUgb2Zmc2V0IGlmIHNvOiAqLwogCWlmIChpbl92YmwgJiYgKCp2cG9zID49IHZibF9zdGFydCkpIHsKLQkJdnRvdGFsID0gcmRldi0+bW9kZV9pbmZvLmNydGNzW2NydGNdLT5iYXNlLm1vZGUuY3J0Y192dG90YWw7CisJCXZ0b3RhbCA9IHJkZXYtPm1vZGVfaW5mby5jcnRjc1tjcnRjXS0+YmFzZS5od21vZGUuY3J0Y192dG90YWw7CiAJCSp2cG9zID0gKnZwb3MgLSB2dG90YWw7CiAJfQogCkBAIC0xMTY0LDcgKzE1MDEsNyBAQAogCiAJLyogSW4gdmJsYW5rPyAqLwogCWlmIChpbl92YmwpCi0JCXJldCB8PSBSQURFT05fU0NBTk9VVFBPU19JTlZCTDsKKwkJcmV0IHw9IERSTV9TQ0FOT1VUUE9TX0lOVkJMOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKaW5kZXggNjBlNjg5Zi4uYmU1Y2I0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKQEAgLTQ4LDkgKzQ4LDEwIEBACiAgKiAtIDIuNS4wIC0gYWRkIGdldCBhY2NlbCAyIHRvIHdvcmsgYXJvdW5kIGRkeCBicmVha2FnZSBmb3IgZXZlcmdyZWVuCiAgKiAtIDIuNi4wIC0gYWRkIHRpbGluZyBjb25maWcgcXVlcnkgKHI2eHgrKSwgYWRkIGluaXRpYWwgSGlaIHN1cHBvcnQgKHIzMDAtPnI1MDApCiAgKiAgIDIuNy4wIC0gZml4dXBzIGZvciByNjAwIDJEIHRpbGluZyBzdXBwb3J0LiAobm8gZXh0ZXJuYWwgQUJJIGNoYW5nZSksIGFkZCBlZyBkeW4gZ3ByIHJlZ3MKKyAqICAgMi44LjAgLSBwYWdlZmxpcCBzdXBwb3J0LCByNTAwIFVTX0ZPUk1BVCByZWdzLiByNTAwIEFSR0IyMTAxMDEwIGNvbG9yYnVmLCByMzAwLT5yNTAwIENNQVNLCiAgKi8KICNkZWZpbmUgS01TX0RSSVZFUl9NQUpPUgkyCi0jZGVmaW5lIEtNU19EUklWRVJfTUlOT1IJNworI2RlZmluZSBLTVNfRFJJVkVSX01JTk9SCTgKICNkZWZpbmUgS01TX0RSSVZFUl9QQVRDSExFVkVMCTAKIGludCByYWRlb25fZHJpdmVyX2xvYWRfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogaW50IHJhZGVvbl9kcml2ZXJfdW5sb2FkX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAgLTY2LDYgKzY3LDEwIEBACiB1MzIgcmFkZW9uX2dldF92YmxhbmtfY291bnRlcl9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogaW50IHJhZGVvbl9lbmFibGVfdmJsYW5rX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiB2b2lkIHJhZGVvbl9kaXNhYmxlX3ZibGFua19rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworaW50IHJhZGVvbl9nZXRfdmJsYW5rX3RpbWVzdGFtcF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMsCisJCQkJICAgIGludCAqbWF4X2Vycm9yLAorCQkJCSAgICBzdHJ1Y3QgdGltZXZhbCAqdmJsYW5rX3RpbWUsCisJCQkJICAgIHVuc2lnbmVkIGZsYWdzKTsKIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfcHJlaW5zdGFsbF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBpbnQgcmFkZW9uX2RyaXZlcl9pcnFfcG9zdGluc3RhbGxfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCByYWRlb25fZHJpdmVyX2lycV91bmluc3RhbGxfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpAQCAtNzQsNiArNzksOCBAQAogCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGludCByYWRlb25fZ2VtX29iamVjdF9pbml0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIHZvaWQgcmFkZW9uX2dlbV9vYmplY3RfZnJlZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitleHRlcm4gaW50IHJhZGVvbl9nZXRfY3J0Y19zY2Fub3V0cG9zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjLAorCQkJCSAgICAgIGludCAqdnBvcywgaW50ICpocG9zKTsKIGV4dGVybiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgcmFkZW9uX2lvY3Rsc19rbXNbXTsKIGV4dGVybiBpbnQgcmFkZW9uX21heF9rbXNfaW9jdGw7CiBpbnQgcmFkZW9uX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKQEAgLTI5Niw2ICszMDMsOCBAQAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSByYWRlb25fZ2V0X3ZibGFua19jb3VudGVyX2ttcywKIAkuZW5hYmxlX3ZibGFuayA9IHJhZGVvbl9lbmFibGVfdmJsYW5rX2ttcywKIAkuZGlzYWJsZV92YmxhbmsgPSByYWRlb25fZGlzYWJsZV92Ymxhbmtfa21zLAorCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IHJhZGVvbl9nZXRfdmJsYW5rX3RpbWVzdGFtcF9rbXMsCisJLmdldF9zY2Fub3V0X3Bvc2l0aW9uID0gcmFkZW9uX2dldF9jcnRjX3NjYW5vdXRwb3MsCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiAJLmRlYnVnZnNfaW5pdCA9IHJhZGVvbl9kZWJ1Z2ZzX2luaXQsCiAJLmRlYnVnZnNfY2xlYW51cCA9IHJhZGVvbl9kZWJ1Z2ZzX2NsZWFudXAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwppbmRleCAwNDE5NDNkLi44ZmQxODQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKQEAgLTY0MSw3ICs2NDEsNyBAQAogCXN3aXRjaCAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSkgewogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUk6CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUI6IC8qIEhETUktQiBpcyBiYXNpY2FsbHkgREwtRFZJOyBhbmFsb2cgd29ya3MgZmluZSAqLwotCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpIHsKKwkJaWYgKGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkgewogCQkJLyogZml4IG1lICovCiAJCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQogCQkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EVkk7CkBAIC02NTUsNyArNjU1LDcgQEAKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBOgogCWRlZmF1bHQ6Ci0JCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkgeworCQlpZiAoZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKSB7CiAJCQkvKiBmaXggbWUgKi8KIAkJCWlmIChBU0lDX0lTX0RDRTQocmRldikpCiAJCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RWSTsKQEAgLTY3Myw3ICs2NzMsNyBAQAogCQlpZiAoKGRpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUKSB8fAogCQkgICAgKGRpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX2VEUCkpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFA7Ci0JCWVsc2UgaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKSB7CisJCWVsc2UgaWYgKGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkgewogCQkJLyogZml4IG1lICovCiAJCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQogCQkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EVkk7CkBAIC03MTIsOCArNzEyLDggQEAKICAqIC0gMiBESUcgZW5jb2RlciBibG9ja3MuCiAgKiBESUcxLzIgY2FuIGRyaXZlIFVOSVBIWTAvMS8yIGxpbmsgQSBvciBsaW5rIEIKICAqCi0gKiBEQ0UgNC4wCi0gKiAtIDMgRElHIHRyYW5zbWl0dGVyIGJsb2NrcyBVTlBIWTAvMS8yIChsaW5rcyBBIGFuZCBCKS4KKyAqIERDRSA0LjAvNS4wCisgKiAtIDMgRElHIHRyYW5zbWl0dGVyIGJsb2NrcyBVTklQSFkwLzEvMiAobGlua3MgQSBhbmQgQikuCiAgKiBTdXBwb3J0cyB1cCB0byA2IGRpZ2l0YWwgb3V0cHV0cwogICogLSA2IERJRyBlbmNvZGVyIGJsb2Nrcy4KICAqIC0gRElHIHRvIFBIWSBtYXBwaW5nIGlzIGhhcmRjb2RlZApAQCAtNzI0LDYgKzcyNCwxMiBAQAogICogRElHNSBkcml2ZXMgVU5JUEhZMiBsaW5rIEEsIEErQgogICogRElHNiBkcml2ZXMgVU5JUEhZMiBsaW5rIEIKICAqCisgKiBEQ0UgNC4xCisgKiAtIDMgRElHIHRyYW5zbWl0dGVyIGJsb2NrcyBVTklQSFkwLzEvMiAobGlua3MgQSBhbmQgQikuCisgKiBTdXBwb3J0cyB1cCB0byA2IGRpZ2l0YWwgb3V0cHV0cworICogLSAyIERJRyBlbmNvZGVyIGJsb2Nrcy4KKyAqIERJRzEvMiBjYW4gZHJpdmUgVU5JUEhZMC8xLzIgbGluayBBIG9yIGxpbmsgQgorICoKICAqIFJvdXRpbmcKICAqIGNydGMgLT4gZGlnIGVuY29kZXIgLT4gVU5JUEhZL0xWVE1BICgxIG9yIDIgbGlua3MpCiAgKiBFeGFtcGxlczoKQEAgLTczNyw2ICs3NDMsNyBAQAogCURJR19FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTiB2MTsKIAlESUdfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjIgdjI7CiAJRElHX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzIHYzOworCURJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WNCB2NDsKIH07CiAKIHZvaWQKQEAgLTc1Miw2ICs3NTksNyBAQAogCXVpbnQ4X3QgZnJldiwgY3JldjsKIAlpbnQgZHBfY2xvY2sgPSAwOwogCWludCBkcF9sYW5lX2NvdW50ID0gMDsKKwlpbnQgaHBkX2lkID0gUkFERU9OX0hQRF9OT05FOwogCiAJaWYgKGNvbm5lY3RvcikgewogCQlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKQEAgLTc2MCw2ICs3NjgsNyBAQAogCiAJCWRwX2Nsb2NrID0gZGlnX2Nvbm5lY3Rvci0+ZHBfY2xvY2s7CiAJCWRwX2xhbmVfY291bnQgPSBkaWdfY29ubmVjdG9yLT5kcF9sYW5lX2NvdW50OworCQlocGRfaWQgPSByYWRlb25fY29ubmVjdG9yLT5ocGQuaHBkOwogCX0KIAogCS8qIG5vIGRpZyBlbmNvZGVyIGFzc2lnbmVkICovCkBAIC03ODQsMTkgKzc5MywzNiBAQAogCWFyZ3MudjEudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrIC8gMTApOwogCWFyZ3MudjEudWNFbmNvZGVyTW9kZSA9IGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2Rlcik7CiAKLQlpZiAoYXJncy52MS51Y0VuY29kZXJNb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0RQKSB7Ci0JCWlmIChkcF9jbG9jayA9PSAyNzAwMDApCi0JCQlhcmdzLnYxLnVjQ29uZmlnIHw9IEFUT01fRU5DT0RFUl9DT05GSUdfRFBMSU5LUkFURV8yXzcwR0haOworCWlmICgoYXJncy52MS51Y0VuY29kZXJNb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0RQKSB8fAorCSAgICAoYXJncy52MS51Y0VuY29kZXJNb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0RQX01TVCkpCiAJCWFyZ3MudjEudWNMYW5lTnVtID0gZHBfbGFuZV9jb3VudDsKLQl9IGVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayA+IDE2NTAwMCkKKwllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPiAxNjUwMDApCiAJCWFyZ3MudjEudWNMYW5lTnVtID0gODsKIAllbHNlCiAJCWFyZ3MudjEudWNMYW5lTnVtID0gNDsKIAotCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKKwlpZiAoQVNJQ19JU19EQ0U1KHJkZXYpKSB7CisJCWlmICgoYXJncy52MS51Y0VuY29kZXJNb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0RQKSB8fAorCQkgICAgKGFyZ3MudjEudWNFbmNvZGVyTW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUF9NU1QpKSB7CisJCQlpZiAoZHBfY2xvY2sgPT0gMjcwMDAwKQorCQkJCWFyZ3MudjEudWNDb25maWcgfD0gQVRPTV9FTkNPREVSX0NPTkZJR19WNF9EUExJTktSQVRFXzJfNzBHSFo7CisJCQllbHNlIGlmIChkcF9jbG9jayA9PSA1NDAwMDApCisJCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX0VOQ09ERVJfQ09ORklHX1Y0X0RQTElOS1JBVEVfNV80MEdIWjsKKwkJfQorCQlhcmdzLnY0LmFjQ29uZmlnLnVjRGlnU2VsID0gZGlnLT5kaWdfZW5jb2RlcjsKKwkJYXJncy52NC51Y0JpdFBlckNvbG9yID0gUEFORUxfOEJJVF9QRVJfQ09MT1I7CisJCWlmIChocGRfaWQgPT0gUkFERU9OX0hQRF9OT05FKQorCQkJYXJncy52NC51Y0hQRF9JRCA9IDA7CisJCWVsc2UKKwkJCWFyZ3MudjQudWNIUERfSUQgPSBocGRfaWQgKyAxOworCX0gZWxzZSBpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CisJCWlmICgoYXJncy52MS51Y0VuY29kZXJNb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0RQKSAmJiAoZHBfY2xvY2sgPT0gMjcwMDAwKSkKKwkJCWFyZ3MudjEudWNDb25maWcgfD0gQVRPTV9FTkNPREVSX0NPTkZJR19WM19EUExJTktSQVRFXzJfNzBHSFo7CiAJCWFyZ3MudjMuYWNDb25maWcudWNEaWdTZWwgPSBkaWctPmRpZ19lbmNvZGVyOwogCQlhcmdzLnYzLnVjQml0UGVyQ29sb3IgPSBQQU5FTF84QklUX1BFUl9DT0xPUjsKIAl9IGVsc2UgeworCQlpZiAoKGFyZ3MudjEudWNFbmNvZGVyTW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkgJiYgKGRwX2Nsb2NrID09IDI3MDAwMCkpCisJCQlhcmdzLnYxLnVjQ29uZmlnIHw9IEFUT01fRU5DT0RFUl9DT05GSUdfRFBMSU5LUkFURV8yXzcwR0haOwogCQlzd2l0Y2ggKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkKSB7CiAJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZOgogCQkJYXJncy52MS51Y0NvbmZpZyA9IEFUT01fRU5DT0RFUl9DT05GSUdfVjJfVFJBTlNNSVRURVIxOwpAQCAtODIzLDYgKzg0OSw3IEBACiAJRElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUFNfQUxMT0NBVElPTiB2MTsKIAlESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QQVJBTUVURVJTX1YyIHYyOwogCURJR19UUkFOU01JVFRFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjMgdjM7CisJRElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUEFSQU1FVEVSU19WNCB2NDsKIH07CiAKIHZvaWQKQEAgLTkxNywxMCArOTQ0LDE4IEBACiAJCQlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoZW5jb2Rlci0+Y3J0Yyk7CiAJCQlwbGxfaWQgPSByYWRlb25fY3J0Yy0+cGxsX2lkOwogCQl9Ci0JCWlmIChpc19kcCAmJiByZGV2LT5jbG9jay5kcF9leHRjbGspCi0JCQlhcmdzLnYzLmFjQ29uZmlnLnVjUmVmQ2xrU291cmNlID0gMjsgLyogZXh0ZXJuYWwgc3JjICovCi0JCWVsc2UKLQkJCWFyZ3MudjMuYWNDb25maWcudWNSZWZDbGtTb3VyY2UgPSBwbGxfaWQ7CisKKwkJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkgeworCQkJaWYgKGlzX2RwICYmIHJkZXYtPmNsb2NrLmRwX2V4dGNsaykKKwkJCQlhcmdzLnY0LmFjQ29uZmlnLnVjUmVmQ2xrU291cmNlID0gMzsgLyogZXh0ZXJuYWwgc3JjICovCisJCQllbHNlCisJCQkJYXJncy52NC5hY0NvbmZpZy51Y1JlZkNsa1NvdXJjZSA9IHBsbF9pZDsKKwkJfSBlbHNlIHsKKwkJCWlmIChpc19kcCAmJiByZGV2LT5jbG9jay5kcF9leHRjbGspCisJCQkJYXJncy52My5hY0NvbmZpZy51Y1JlZkNsa1NvdXJjZSA9IDI7IC8qIGV4dGVybmFsIHNyYyAqLworCQkJZWxzZQorCQkJCWFyZ3MudjMuYWNDb25maWcudWNSZWZDbGtTb3VyY2UgPSBwbGxfaWQ7CisJCX0KIAogCQlzd2l0Y2ggKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkKSB7CiAJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZOgpAQCAtMTA0NCw2ICsxMDc5LDcgQEAKIAogdW5pb24gZXh0ZXJuYWxfZW5jb2Rlcl9jb250cm9sIHsKIAlFWFRFUk5BTF9FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTiB2MTsKKwlFWFRFUk5BTF9FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTl9WMyB2MzsKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0xMDU0LDYgKzEwOTAsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmV4dF9yYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGV4dF9lbmNvZGVyKTsKIAl1bmlvbiBleHRlcm5hbF9lbmNvZGVyX2NvbnRyb2wgYXJnczsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gcmFkZW9uX2dldF9jb25uZWN0b3JfZm9yX2VuY29kZXIoZW5jb2Rlcik7CiAJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgRXh0ZXJuYWxFbmNvZGVyQ29udHJvbCk7CkBAIC0xMDYxLDYgKzEwOTgsNyBAQAogCWludCBkcF9jbG9jayA9IDA7CiAJaW50IGRwX2xhbmVfY291bnQgPSAwOwogCWludCBjb25uZWN0b3Jfb2JqZWN0X2lkID0gMDsKKwl1MzIgZXh0X2VudW0gPSAoZXh0X3JhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2VudW0gJiBFTlVNX0lEX01BU0spID4+IEVOVU1fSURfU0hJRlQ7CiAKIAlpZiAoY29ubmVjdG9yKSB7CiAJCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwpAQCAtMTA5OSw2ICsxMTM3LDM3IEBACiAJCQllbHNlCiAJCQkJYXJncy52MS5zRGlnRW5jb2Rlci51Y0xhbmVOdW0gPSA0OwogCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWFyZ3MudjMuc0V4dEVuY29kZXIudWNBY3Rpb24gPSBhY3Rpb247CisJCQlpZiAoYWN0aW9uID09IEVYVEVSTkFMX0VOQ09ERVJfQUNUSU9OX1YzX0VOQ09ERVJfSU5JVCkKKwkJCQlhcmdzLnYzLnNFeHRFbmNvZGVyLnVzQ29ubmVjdG9ySWQgPSBjb25uZWN0b3Jfb2JqZWN0X2lkOworCQkJZWxzZQorCQkJCWFyZ3MudjMuc0V4dEVuY29kZXIudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrIC8gMTApOworCQkJYXJncy52My5zRXh0RW5jb2Rlci51Y0VuY29kZXJNb2RlID0gYXRvbWJpb3NfZ2V0X2VuY29kZXJfbW9kZShlbmNvZGVyKTsKKworCQkJaWYgKGFyZ3MudjMuc0V4dEVuY29kZXIudWNFbmNvZGVyTW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkgeworCQkJCWlmIChkcF9jbG9jayA9PSAyNzAwMDApCisJCQkJCWFyZ3MudjMuc0V4dEVuY29kZXIudWNDb25maWcgfD0gRVhURVJOQUxfRU5DT0RFUl9DT05GSUdfVjNfRFBMSU5LUkFURV8yXzcwR0haOworCQkJCWVsc2UgaWYgKGRwX2Nsb2NrID09IDU0MDAwMCkKKwkJCQkJYXJncy52My5zRXh0RW5jb2Rlci51Y0NvbmZpZyB8PSBFWFRFUk5BTF9FTkNPREVSX0NPTkZJR19WM19EUExJTktSQVRFXzVfNDBHSFo7CisJCQkJYXJncy52My5zRXh0RW5jb2Rlci51Y0xhbmVOdW0gPSBkcF9sYW5lX2NvdW50OworCQkJfSBlbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPiAxNjUwMDApCisJCQkJYXJncy52My5zRXh0RW5jb2Rlci51Y0xhbmVOdW0gPSA4OworCQkJZWxzZQorCQkJCWFyZ3MudjMuc0V4dEVuY29kZXIudWNMYW5lTnVtID0gNDsKKwkJCXN3aXRjaCAoZXh0X2VudW0pIHsKKwkJCWNhc2UgR1JBUEhfT0JKRUNUX0VOVU1fSUQxOgorCQkJCWFyZ3MudjMuc0V4dEVuY29kZXIudWNDb25maWcgfD0gRVhURVJOQUxfRU5DT0RFUl9DT05GSUdfVjNfRU5DT0RFUjE7CisJCQkJYnJlYWs7CisJCQljYXNlIEdSQVBIX09CSkVDVF9FTlVNX0lEMjoKKwkJCQlhcmdzLnYzLnNFeHRFbmNvZGVyLnVjQ29uZmlnIHw9IEVYVEVSTkFMX0VOQ09ERVJfQ09ORklHX1YzX0VOQ09ERVIyOworCQkJCWJyZWFrOworCQkJY2FzZSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDM6CisJCQkJYXJncy52My5zRXh0RW5jb2Rlci51Y0NvbmZpZyB8PSBFWFRFUk5BTF9FTkNPREVSX0NPTkZJR19WM19FTkNPREVSMzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWFyZ3MudjMuc0V4dEVuY29kZXIudWNCaXRQZXJDb2xvciA9IFBBTkVMXzhCSVRfUEVSX0NPTE9SOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoIlVua25vd24gdGFibGUgdmVyc2lvbjogJWQsICVkXG4iLCBmcmV2LCBjcmV2KTsKIAkJCXJldHVybjsKQEAgLTExNTgsNiArMTIyNyw4IEBACiAJRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IDA7CiAJYm9vbCBpc19kaWcgPSBmYWxzZTsKKwlib29sIGlzX2RjZTVfZGFjID0gZmFsc2U7CisJYm9vbCBpc19kY2U1X2R2byA9IGZhbHNlOwogCiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCkBAIC0xMTgwLDcgKzEyNTEsOSBAQAogCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERWT091dHB1dENvbnRyb2wpOwogCQlicmVhazsKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EVk8xOgotCQlpZiAoQVNJQ19JU19EQ0UzKHJkZXYpKQorCQlpZiAoQVNJQ19JU19EQ0U1KHJkZXYpKQorCQkJaXNfZGNlNV9kdm8gPSB0cnVlOworCQllbHNlIGlmIChBU0lDX0lTX0RDRTMocmRldikpCiAJCQlpc19kaWcgPSB0cnVlOwogCQllbHNlCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERWT091dHB1dENvbnRyb2wpOwpAQCAtMTE5NiwxMiArMTI2OSwxNiBAQAogCQlicmVhazsKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzE6CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMToKLQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQotCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBUVjFPdXRwdXRDb250cm9sKTsKLQkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCi0JCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIENWMU91dHB1dENvbnRyb2wpOwotCQllbHNlCi0JCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERBQzFPdXRwdXRDb250cm9sKTsKKwkJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkKKwkJCWlzX2RjZTVfZGFjID0gdHJ1ZTsKKwkJZWxzZSB7CisJCQlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCisJCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBUVjFPdXRwdXRDb250cm9sKTsKKwkJCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQorCQkJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgQ1YxT3V0cHV0Q29udHJvbCk7CisJCQllbHNlCisJCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBEQUMxT3V0cHV0Q29udHJvbCk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EQUMyOgogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzI6CkBAIC0xMjYwLDYgKzEzMzcsMjggQEAKIAkJCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fTENEX0JMT0ZGLCAwLCAwKTsKIAkJCWJyZWFrOwogCQl9CisJfSBlbHNlIGlmIChpc19kY2U1X2RhYykgeworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBEUk1fTU9ERV9EUE1TX09OOgorCQkJYXRvbWJpb3NfZGFjX3NldHVwKGVuY29kZXIsIEFUT01fRU5BQkxFKTsKKwkJCWJyZWFrOworCQljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKKwkJY2FzZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQ6CisJCWNhc2UgRFJNX01PREVfRFBNU19PRkY6CisJCQlhdG9tYmlvc19kYWNfc2V0dXAoZW5jb2RlciwgQVRPTV9ESVNBQkxFKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmIChpc19kY2U1X2R2bykgeworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBEUk1fTU9ERV9EUE1TX09OOgorCQkJYXRvbWJpb3NfZHZvX3NldHVwKGVuY29kZXIsIEFUT01fRU5BQkxFKTsKKwkJCWJyZWFrOworCQljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKKwkJY2FzZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQ6CisJCWNhc2UgRFJNX01PREVfRFBNU19PRkY6CisJCQlhdG9tYmlvc19kdm9fc2V0dXAoZW5jb2RlciwgQVRPTV9ESVNBQkxFKTsKKwkJCWJyZWFrOworCQl9CiAJfSBlbHNlIHsKIAkJc3dpdGNoIChtb2RlKSB7CiAJCWNhc2UgRFJNX01PREVfRFBNU19PTjoKQEAgLTEyODksMTIgKzEzODgsMTggQEAKIAkJc3dpdGNoIChtb2RlKSB7CiAJCWNhc2UgRFJNX01PREVfRFBNU19PTjoKIAkJZGVmYXVsdDoKLQkJCWFjdGlvbiA9IEFUT01fRU5BQkxFOworCQkJaWYgKEFTSUNfSVNfRENFNDEocmRldikpCisJCQkJYWN0aW9uID0gRVhURVJOQUxfRU5DT0RFUl9BQ1RJT05fVjNfRU5BQkxFX09VVFBVVDsKKwkJCWVsc2UKKwkJCQlhY3Rpb24gPSBBVE9NX0VOQUJMRTsKIAkJCWJyZWFrOwogCQljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKIAkJY2FzZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQ6CiAJCWNhc2UgRFJNX01PREVfRFBNU19PRkY6Ci0JCQlhY3Rpb24gPSBBVE9NX0RJU0FCTEU7CisJCQlpZiAoQVNJQ19JU19EQ0U0MShyZGV2KSkKKwkJCQlhY3Rpb24gPSBFWFRFUk5BTF9FTkNPREVSX0FDVElPTl9WM19ESVNBQkxFX09VVFBVVDsKKwkJCWVsc2UKKwkJCQlhY3Rpb24gPSBBVE9NX0RJU0FCTEU7CiAJCQlicmVhazsKIAkJfQogCQlhdG9tYmlvc19leHRlcm5hbF9lbmNvZGVyX3NldHVwKGVuY29kZXIsIGV4dF9lbmNvZGVyLCBhY3Rpb24pOwpAQCAtMTQ4MywyNyArMTU4OCwzNSBAQAogCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnOwogCXVpbnQzMl90IGRpZ19lbmNfaW5fdXNlID0gMDsKIAorCS8qIERDRTQvNSAqLwogCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKIAkJZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwotCQlzd2l0Y2ggKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkKSB7Ci0JCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZOgorCQlpZiAoQVNJQ19JU19EQ0U0MShyZGV2KSkgewogCQkJaWYgKGRpZy0+bGlua2IpCiAJCQkJcmV0dXJuIDE7CiAJCQllbHNlCiAJCQkJcmV0dXJuIDA7Ci0JCQlicmVhazsKLQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkxOgotCQkJaWYgKGRpZy0+bGlua2IpCi0JCQkJcmV0dXJuIDM7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIDI7Ci0JCQlicmVhazsKLQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkyOgotCQkJaWYgKGRpZy0+bGlua2IpCi0JCQkJcmV0dXJuIDU7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIDQ7Ci0JCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQpIHsKKwkJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZOgorCQkJCWlmIChkaWctPmxpbmtiKQorCQkJCQlyZXR1cm4gMTsKKwkJCQllbHNlCisJCQkJCXJldHVybiAwOworCQkJCWJyZWFrOworCQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkxOgorCQkJCWlmIChkaWctPmxpbmtiKQorCQkJCQlyZXR1cm4gMzsKKwkJCQllbHNlCisJCQkJCXJldHVybiAyOworCQkJCWJyZWFrOworCQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkyOgorCQkJCWlmIChkaWctPmxpbmtiKQorCQkJCQlyZXR1cm4gNTsKKwkJCQllbHNlCisJCQkJCXJldHVybiA0OworCQkJCWJyZWFrOworCQkJfQogCQl9CiAJfQogCkBAIC0xNjEwLDcgKzE3MjMsMTMgQEAKIAl9CiAKIAlpZiAoZXh0X2VuY29kZXIpIHsKLQkJYXRvbWJpb3NfZXh0ZXJuYWxfZW5jb2Rlcl9zZXR1cChlbmNvZGVyLCBleHRfZW5jb2RlciwgQVRPTV9FTkFCTEUpOworCQlpZiAoQVNJQ19JU19EQ0U0MShyZGV2KSkgeworCQkJYXRvbWJpb3NfZXh0ZXJuYWxfZW5jb2Rlcl9zZXR1cChlbmNvZGVyLCBleHRfZW5jb2RlciwKKwkJCQkJCQlFWFRFUk5BTF9FTkNPREVSX0FDVElPTl9WM19FTkNPREVSX0lOSVQpOworCQkJYXRvbWJpb3NfZXh0ZXJuYWxfZW5jb2Rlcl9zZXR1cChlbmNvZGVyLCBleHRfZW5jb2RlciwKKwkJCQkJCQlFWFRFUk5BTF9FTkNPREVSX0FDVElPTl9WM19FTkNPREVSX1NFVFVQKTsKKwkJfSBlbHNlCisJCQlhdG9tYmlvc19leHRlcm5hbF9lbmNvZGVyX3NldHVwKGVuY29kZXIsIGV4dF9lbmNvZGVyLCBBVE9NX0VOQUJMRSk7CiAJfQogCiAJYXRvbWJpb3NfYXBwbHlfZW5jb2Rlcl9xdWlya3MoZW5jb2RlciwgYWRqdXN0ZWRfbW9kZSk7CkBAIC0xOTI3LDcgKzIwNDYsMTAgQEAKIH0KIAogdm9pZAotcmFkZW9uX2FkZF9hdG9tX2VuY29kZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgZW5jb2Rlcl9lbnVtLCB1aW50MzJfdCBzdXBwb3J0ZWRfZGV2aWNlKQorcmFkZW9uX2FkZF9hdG9tX2VuY29kZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXVpbnQzMl90IGVuY29kZXJfZW51bSwKKwkJCXVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsCisJCQl1MTYgY2FwcykKIHsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwpAQCAtMTk3MCw2ICsyMDkyLDcgQEAKIAlyYWRlb25fZW5jb2Rlci0+cm14X3R5cGUgPSBSTVhfT0ZGOwogCXJhZGVvbl9lbmNvZGVyLT51bmRlcnNjYW5fdHlwZSA9IFVOREVSU0NBTl9PRkY7CiAJcmFkZW9uX2VuY29kZXItPmlzX2V4dF9lbmNvZGVyID0gZmFsc2U7CisJcmFkZW9uX2VuY29kZXItPmNhcHMgPSBjYXBzOwogCiAJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgewogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfTFZEUzoKQEAgLTIwMjksNiArMjE1Miw4IEBACiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9USVRGUDUxMzoKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX1ZUMTYyMzoKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0hETUlfU0kxOTMwOgorCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfVFJBVklTOgorCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfTlVUTUVHOgogCQkvKiB0aGVzZSBhcmUgaGFuZGxlZCBieSB0aGUgcHJpbWFyeSBlbmNvZGVycyAqLwogCQlyYWRlb25fZW5jb2Rlci0+aXNfZXh0X2VuY29kZXIgPSB0cnVlOwogCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmFtaWx5LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYW1pbHkuaAppbmRleCBlMzI5MDY2Li4xY2E1NWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYW1pbHkuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYW1pbHkuaApAQCAtODAsNiArODAsMTAgQEAKIAlDSElQX0pVTklQRVIsCiAJQ0hJUF9DWVBSRVNTLAogCUNISVBfSEVNTE9DSywKKwlDSElQX1BBTE0sCisJQ0hJUF9CQVJUUywKKwlDSElQX1RVUktTLAorCUNISVBfQ0FJQ09TLAogCUNISVBfTEFTVCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCmluZGV4IDZhYmVhMzIuLmNhMzJlOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYwpAQCAtMjI1LDggKzIyNSw2IEBACiAKIAlzdHJjcHkoaW5mby0+Zml4LmlkLCAicmFkZW9uZHJtZmIiKTsKIAotCWRybV9mYl9oZWxwZXJfZmlsbF9maXgoaW5mbywgZmItPnBpdGNoLCBmYi0+ZGVwdGgpOwotCiAJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVCB8IEZCSU5GT19DQU5fRk9SQ0VfT1VUUFVUOwogCWluZm8tPmZib3BzID0gJnJhZGVvbmZiX29wczsKIApAQCAtMjQ3LDggKzI0NSw2IEBACiAJaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uYmFzZSA9IHJkZXYtPmRkZXYtPm1vZGVfY29uZmlnLmZiX2Jhc2U7CiAJaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKIAotCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gMDsKLQlpbmZvLT5maXgubW1pb19sZW4gPSAwOwogCWluZm8tPnBpeG1hcC5zaXplID0gNjQqMTAyNDsKIAlpbmZvLT5waXhtYXAuYnVmX2FsaWduID0gODsKIAlpbmZvLT5waXhtYXAuYWNjZXNzX2FsaWduID0gMzI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYwppbmRleCBkYWFjYjI4Li4xNzFiMGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCisjaW5jbHVkZSAicmFkZW9uX3RyYWNlLmgiCiAKIGludCByYWRlb25fZmVuY2VfZW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCiB7CkBAIC01Nyw2ICs1OCw3IEBACiAJfSBlbHNlCiAJCXJhZGVvbl9mZW5jZV9yaW5nX2VtaXQocmRldiwgZmVuY2UpOwogCisJdHJhY2VfcmFkZW9uX2ZlbmNlX2VtaXQocmRldi0+ZGRldiwgZmVuY2UtPnNlcSk7CiAJZmVuY2UtPmVtaXRlZCA9IHRydWU7CiAJbGlzdF9kZWwoJmZlbmNlLT5saXN0KTsKIAlsaXN0X2FkZF90YWlsKCZmZW5jZS0+bGlzdCwgJnJkZXYtPmZlbmNlX2Rydi5lbWl0ZWQpOwpAQCAtMjEzLDYgKzIxNSw3IEBACiByZXRyeToKIAkvKiBzYXZlIGN1cnJlbnQgc2VxdWVuY2UgdXNlZCB0byBjaGVjayBmb3IgR1BVIGxvY2t1cCAqLwogCXNlcSA9IHJkZXYtPmZlbmNlX2Rydi5sYXN0X3NlcTsKKwl0cmFjZV9yYWRlb25fZmVuY2Vfd2FpdF9iZWdpbihyZGV2LT5kZGV2LCBzZXEpOwogCWlmIChpbnRyKSB7CiAJCXJhZGVvbl9pcnFfa21zX3N3X2lycV9nZXQocmRldik7CiAJCXIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChyZGV2LT5mZW5jZV9kcnYucXVldWUsCkBAIC0yMjcsNiArMjMwLDcgQEAKIAkJCSByYWRlb25fZmVuY2Vfc2lnbmFsZWQoZmVuY2UpLCB0aW1lb3V0KTsKIAkJcmFkZW9uX2lycV9rbXNfc3dfaXJxX3B1dChyZGV2KTsKIAl9CisJdHJhY2VfcmFkZW9uX2ZlbmNlX3dhaXRfZW5kKHJkZXYtPmRkZXYsIHNlcSk7CiAJaWYgKHVubGlrZWx5KCFyYWRlb25fZmVuY2Vfc2lnbmFsZWQoZmVuY2UpKSkgewogCQkvKiB3ZSB3ZXJlIGludGVycnVwdGVkIGZvciBzb21lIHJlYXNvbiBhbmQgZmVuY2UgaXNuJ3QKIAkJICogaXNuJ3Qgc2lnbmFsZWQgeWV0LCByZXN1bWUgd2FpdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCmluZGV4IGExMDhjN2UuLmEyODk2NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKQEAgLTY0LDE1ICs2NCwxNSBAQAogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1bnNpZ25lZCBpOwogCi0JSU5JVF9XT1JLKCZyZGV2LT5ob3RwbHVnX3dvcmssIHJhZGVvbl9ob3RwbHVnX3dvcmtfZnVuYyk7Ci0KIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KIAlyZGV2LT5pcnEuc3dfaW50ID0gZmFsc2U7CiAJcmRldi0+aXJxLmd1aV9pZGxlID0gZmFsc2U7CiAJZm9yIChpID0gMDsgaSA8IHJkZXYtPm51bV9jcnRjOyBpKyspCiAJCXJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbaV0gPSBmYWxzZTsKLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKIAkJcmRldi0+aXJxLmhwZFtpXSA9IGZhbHNlOworCQlyZGV2LT5pcnEucGZsaXBbaV0gPSBmYWxzZTsKKwl9CiAJcmFkZW9uX2lycV9zZXQocmRldik7CiAJLyogQ2xlYXIgYml0cyAqLwogCXJhZGVvbl9pcnFfcHJvY2VzcyhyZGV2KTsKQEAgLTEwMSw4ICsxMDEsMTAgQEAKIAlyZGV2LT5pcnEuZ3VpX2lkbGUgPSBmYWxzZTsKIAlmb3IgKGkgPSAwOyBpIDwgcmRldi0+bnVtX2NydGM7IGkrKykKIAkJcmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFtpXSA9IGZhbHNlOwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewogCQlyZGV2LT5pcnEuaHBkW2ldID0gZmFsc2U7CisJCXJkZXYtPmlycS5wZmxpcFtpXSA9IGZhbHNlOworCX0KIAlyYWRlb25faXJxX3NldChyZGV2KTsKIH0KIApAQCAtMTEwLDYgKzExMiw4IEBACiB7CiAJaW50IHIgPSAwOwogCisJSU5JVF9XT1JLKCZyZGV2LT5ob3RwbHVnX3dvcmssIHJhZGVvbl9ob3RwbHVnX3dvcmtfZnVuYyk7CisKIAlzcGluX2xvY2tfaW5pdCgmcmRldi0+aXJxLnN3X2xvY2spOwogCXIgPSBkcm1fdmJsYW5rX2luaXQocmRldi0+ZGRldiwgcmRldi0+bnVtX2NydGMpOwogCWlmIChyKSB7CkBAIC0xMjEsNyArMTI1LDcgQEAKIAkgKiBjaGlwcy4gIERpc2FibGUgTVNJIG9uIHRoZW0gZm9yIG5vdy4KIAkgKi8KIAlpZiAoKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWMzgwKSAmJgotCSAgICAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApKSAmJgorCSAgICAoKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSkgfHwgKHJkZXYtPmZhbWlseSA+PSBDSElQX1BBTE0pKSAmJgogCSAgICAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApKSkgewogCQlpbnQgcmV0ID0gcGNpX2VuYWJsZV9tc2kocmRldi0+cGRldik7CiAJCWlmICghcmV0KSB7CkBAIC0xNDgsNiArMTUyLDcgQEAKIAkJaWYgKHJkZXYtPm1zaV9lbmFibGVkKQogCQkJcGNpX2Rpc2FibGVfbXNpKHJkZXYtPnBkZXYpOwogCX0KKwlmbHVzaF93b3JrX3N5bmMoJnJkZXYtPmhvdHBsdWdfd29yayk7CiB9CiAKIHZvaWQgcmFkZW9uX2lycV9rbXNfc3dfaXJxX2dldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTE3NSwzICsxODAsMzQgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZGV2LT5pcnEuc3dfbG9jaywgaXJxZmxhZ3MpOwogfQogCit2b2lkIHJhZGVvbl9pcnFfa21zX3BmbGlwX2lycV9nZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwlpZiAoY3J0YyA8IDAgfHwgY3J0YyA+PSByZGV2LT5udW1fY3J0YykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkZXYtPmlycS5wZmxpcF9sb2NrW2NydGNdLCBpcnFmbGFncyk7CisJaWYgKHJkZXYtPmRkZXYtPmlycV9lbmFibGVkICYmICgrK3JkZXYtPmlycS5wZmxpcF9yZWZjb3VudFtjcnRjXSA9PSAxKSkgeworCQlyZGV2LT5pcnEucGZsaXBbY3J0Y10gPSB0cnVlOworCQlyYWRlb25faXJxX3NldChyZGV2KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRldi0+aXJxLnBmbGlwX2xvY2tbY3J0Y10sIGlycWZsYWdzKTsKK30KKwordm9pZCByYWRlb25faXJxX2ttc19wZmxpcF9pcnFfcHV0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0YykKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCisJaWYgKGNydGMgPCAwIHx8IGNydGMgPj0gcmRldi0+bnVtX2NydGMpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZGV2LT5pcnEucGZsaXBfbG9ja1tjcnRjXSwgaXJxZmxhZ3MpOworCUJVR19PTihyZGV2LT5kZGV2LT5pcnFfZW5hYmxlZCAmJiByZGV2LT5pcnEucGZsaXBfcmVmY291bnRbY3J0Y10gPD0gMCk7CisJaWYgKHJkZXYtPmRkZXYtPmlycV9lbmFibGVkICYmICgtLXJkZXYtPmlycS5wZmxpcF9yZWZjb3VudFtjcnRjXSA9PSAwKSkgeworCQlyZGV2LT5pcnEucGZsaXBbY3J0Y10gPSBmYWxzZTsKKwkJcmFkZW9uX2lycV9zZXQocmRldik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkZXYtPmlycS5wZmxpcF9sb2NrW2NydGNdLCBpcnFmbGFncyk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKaW5kZXggOGZiYmUxYy4uMjhhNTNlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKQEAgLTk2LDkgKzk2LDI3IEBACiAJcmV0dXJuIHI7CiB9CiAKK3N0YXRpYyB2b2lkIHJhZGVvbl9zZXRfZmlscF9yaWdodHMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKipvd25lciwKKwkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmFwcGxpZXIsCisJCQkJICAgdWludDMyX3QgKnZhbHVlKQoreworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZiAoKnZhbHVlID09IDEpIHsKKwkJLyogd2FudHMgcmlnaHRzICovCisJCWlmICghKm93bmVyKQorCQkJKm93bmVyID0gYXBwbGllcjsKKwl9IGVsc2UgaWYgKCp2YWx1ZSA9PSAwKSB7CisJCS8qIHJldm9rZXMgcmlnaHRzICovCisJCWlmICgqb3duZXIgPT0gYXBwbGllcikKKwkJCSpvd25lciA9IE5VTEw7CisJfQorCSp2YWx1ZSA9ICpvd25lciA9PSBhcHBsaWVyID8gMSA6IDA7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cit9CiAKIC8qCi0gKiBVc2Vyc3BhY2UgZ2V0IGluZm9ybWF0aW9ucyBpb2N0bAorICogVXNlcnNwYWNlIGdldCBpbmZvcm1hdGlvbiBpb2N0bAogICovCiBpbnQgcmFkZW9uX2luZm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxwKQogewpAQCAtMTczLDE4ICsxOTEsMTUgQEAKIAkJCURSTV9ERUJVR19LTVMoIldBTlRfSFlQRVJaOiBpbnZhbGlkIHZhbHVlICVkXG4iLCB2YWx1ZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCWlmICh2YWx1ZSA9PSAxKSB7Ci0JCQkvKiB3YW50cyBoeXBlci16ICovCi0JCQlpZiAoIXJkZXYtPmh5cGVyel9maWxwKQotCQkJCXJkZXYtPmh5cGVyel9maWxwID0gZmlscDsKLQkJfSBlbHNlIGlmICh2YWx1ZSA9PSAwKSB7Ci0JCQkvKiByZXZva2VzIGh5cGVyLXogKi8KLQkJCWlmIChyZGV2LT5oeXBlcnpfZmlscCA9PSBmaWxwKQotCQkJCXJkZXYtPmh5cGVyel9maWxwID0gTlVMTDsKKwkJcmFkZW9uX3NldF9maWxwX3JpZ2h0cyhkZXYsICZyZGV2LT5oeXBlcnpfZmlscCwgZmlscCwgJnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fSU5GT19XQU5UX0NNQVNLOgorCQkvKiBUaGUgc2FtZSBsb2dpYyBhcyBIeXBlci1aLiAqLworCQlpZiAodmFsdWUgPj0gMikgeworCQkJRFJNX0RFQlVHX0tNUygiV0FOVF9DTUFTSzogaW52YWxpZCB2YWx1ZSAlZFxuIiwgdmFsdWUpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJdmFsdWUgPSByZGV2LT5oeXBlcnpfZmlscCA9PSBmaWxwID8gIDEgOiAwOwotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmFkZW9uX3NldF9maWxwX3JpZ2h0cyhkZXYsICZyZGV2LT5jbWFza19maWxwLCBmaWxwLCAmdmFsdWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fREVCVUdfS01TKCJJbnZhbGlkIHJlcXVlc3QgJWRcbiIsIGluZm8tPnJlcXVlc3QpOwpAQCAtMjAzLDEwICsyMTgsNiBAQAogICovCiBpbnQgcmFkZW9uX2RyaXZlcl9maXJzdG9wZW5fa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKHJkZXYtPnBvd2VyZWRfZG93bikKLQkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3Nyw2ICsyODgsMjcgQEAKIAlyYWRlb25faXJxX3NldChyZGV2KTsKIH0KIAoraW50IHJhZGVvbl9nZXRfdmJsYW5rX3RpbWVzdGFtcF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMsCisJCQkJICAgIGludCAqbWF4X2Vycm9yLAorCQkJCSAgICBzdHJ1Y3QgdGltZXZhbCAqdmJsYW5rX3RpbWUsCisJCQkJICAgIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBkcm1fY3J0YyAqZHJtY3J0YzsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoY3J0YyA8IDAgfHwgY3J0YyA+PSBkZXYtPm51bV9jcnRjcykgeworCQlEUk1fRVJST1IoIkludmFsaWQgY3J0YyAlZFxuIiwgY3J0Yyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEdldCBhc3NvY2lhdGVkIGRybV9jcnRjOiAqLworCWRybWNydGMgPSAmcmRldi0+bW9kZV9pbmZvLmNydGNzW2NydGNdLT5iYXNlOworCisJLyogSGVscGVyIHJvdXRpbmUgaW4gRFJNIGNvcmUgZG9lcyBhbGwgdGhlIHdvcms6ICovCisJcmV0dXJuIGRybV9jYWxjX3ZibHRpbWVzdGFtcF9mcm9tX3NjYW5vdXRwb3MoZGV2LCBjcnRjLCBtYXhfZXJyb3IsCisJCQkJCQkgICAgIHZibGFua190aW1lLCBmbGFncywKKwkJCQkJCSAgICAgZHJtY3J0Yyk7Cit9CiAKIC8qCiAgKiBJT0NUTC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAppbmRleCBlMzAxYzZmLi4xMmJkZWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCkBAIC0yNzcsNiArMjc3LDkgQEAKIAlmaXhlZDIwXzEyIGhzYzsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBuYXRpdmVfbW9kZTsKIAlpbnQgcGxsX2lkOworCS8qIHBhZ2UgZmxpcHBpbmcgKi8KKwlzdHJ1Y3QgcmFkZW9uX3VucGluX3dvcmsgKnVucGluX3dvcms7CisJaW50IGRlZmVycmVkX2ZsaXBfY29tcGxldGlvbjsKIH07CiAKIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9wcmltYXJ5X2RhYyB7CkBAIC0zNzYsNiArMzc5LDcgQEAKIAlpbnQgaGRtaV9hdWRpb193b3JrYXJvdW5kOwogCWludCBoZG1pX2J1ZmZlcl9zdGF0dXM7CiAJYm9vbCBpc19leHRfZW5jb2RlcjsKKwl1MTYgY2FwczsKIH07CiAKIHN0cnVjdCByYWRlb25fY29ubmVjdG9yX2F0b21fZGlnIHsKQEAgLTQ0MiwxMCArNDQ2LDYgQEAKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKIH07CiAKLS8qIHJhZGVvbl9nZXRfY3J0Y19zY2Fub3V0cG9zKCkgcmV0dXJuIGZsYWdzICovCi0jZGVmaW5lIFJBREVPTl9TQ0FOT1VUUE9TX1ZBTElEICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBSQURFT05fU0NBTk9VVFBPU19JTlZCTCAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgUkFERU9OX1NDQU5PVVRQT1NfQUNDVVJBVEUgICAgICgxIDw8IDIpCiAKIGV4dGVybiBlbnVtIHJhZGVvbl90dl9zdGQKIHJhZGVvbl9jb21iaW9zX2dldF90dl9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTU2MiwxMSArNTYyLDEyIEBACiBleHRlcm4gaW50IHJhZGVvbl9jcnRjX2N1cnNvcl9tb3ZlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgICBpbnQgeCwgaW50IHkpOwogCi1leHRlcm4gaW50IHJhZGVvbl9nZXRfY3J0Y19zY2Fub3V0cG9zKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0YywgaW50ICp2cG9zLCBpbnQgKmhwb3MpOworZXh0ZXJuIGludCByYWRlb25fZ2V0X2NydGNfc2Nhbm91dHBvcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKKwkJCQkgICAgICBpbnQgKnZwb3MsIGludCAqaHBvcyk7CiAKIGV4dGVybiBib29sIHJhZGVvbl9jb21iaW9zX2NoZWNrX2hhcmRjb2RlZF9lZGlkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBzdHJ1Y3QgZWRpZCAqCi1yYWRlb25fY29tYmlvc19nZXRfaGFyZGNvZGVkX2VkaWQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworcmFkZW9uX2Jpb3NfZ2V0X2hhcmRjb2RlZF9lZGlkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBib29sIHJhZGVvbl9hdG9tX2dldF9jbG9ja19pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGJvb2wgcmFkZW9uX2NvbWJpb3NfZ2V0X2Nsb2NrX2luZm8oc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICoKQEAgLTY2Miw0ICs2NjMsNyBAQAogYm9vbCByYWRlb25fZmJkZXZfcm9ial9pc19mYihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9ibyAqcm9iaik7CiAKIHZvaWQgcmFkZW9uX2ZiX291dHB1dF9wb2xsX2NoYW5nZWQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCit2b2lkIHJhZGVvbl9jcnRjX2hhbmRsZV9mbGlwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Y19pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwppbmRleCBhNTk4ZDAwLi43ZDZiOGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgorI2luY2x1ZGUgInJhZGVvbl90cmFjZS5oIgogCiAKIGludCByYWRlb25fdHRtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtMTQ2LDYgKzE0Nyw3IEBACiAJCWxpc3RfYWRkX3RhaWwoJmJvLT5saXN0LCAmcmRldi0+Z2VtLm9iamVjdHMpOwogCQltdXRleF91bmxvY2soJmJvLT5yZGV2LT5nZW0ubXV0ZXgpOwogCX0KKwl0cmFjZV9yYWRlb25fYm9fY3JlYXRlKGJvKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzAyLDM0ICszMDQsOSBAQAogCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CiAJaWYgKGxvYmotPndkb21haW4pIHsKLQkJbGlzdF9hZGQoJmxvYmotPmxpc3QsIGhlYWQpOworCQlsaXN0X2FkZCgmbG9iai0+dHYuaGVhZCwgaGVhZCk7CiAJfSBlbHNlIHsKLQkJbGlzdF9hZGRfdGFpbCgmbG9iai0+bGlzdCwgaGVhZCk7Ci0JfQotfQotCi1pbnQgcmFkZW9uX2JvX2xpc3RfcmVzZXJ2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQotewotCXN0cnVjdCByYWRlb25fYm9fbGlzdCAqbG9iajsKLQlpbnQgcjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkobG9iaiwgaGVhZCwgbGlzdCl7Ci0JCXIgPSByYWRlb25fYm9fcmVzZXJ2ZShsb2JqLT5ibywgZmFsc2UpOwotCQlpZiAodW5saWtlbHkociAhPSAwKSkKLQkJCXJldHVybiByOwotCQlsb2JqLT5yZXNlcnZlZCA9IHRydWU7Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkIHJhZGVvbl9ib19saXN0X3VucmVzZXJ2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQotewotCXN0cnVjdCByYWRlb25fYm9fbGlzdCAqbG9iajsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkobG9iaiwgaGVhZCwgbGlzdCkgewotCQkvKiBvbmx5IHVucmVzZXJ2ZSBvYmplY3Qgd2Ugc3VjY2Vzc2Z1bGx5IHJlc2VydmVkICovCi0JCWlmIChsb2JqLT5yZXNlcnZlZCAmJiByYWRlb25fYm9faXNfcmVzZXJ2ZWQobG9iai0+Ym8pKQotCQkJcmFkZW9uX2JvX3VucmVzZXJ2ZShsb2JqLT5ibyk7CisJCWxpc3RfYWRkX3RhaWwoJmxvYmotPnR2LmhlYWQsIGhlYWQpOwogCX0KIH0KIApAQCAtMzQwLDE0ICszMTcsMTEgQEAKIAl1MzIgZG9tYWluOwogCWludCByOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShsb2JqLCBoZWFkLCBsaXN0KSB7Ci0JCWxvYmotPnJlc2VydmVkID0gZmFsc2U7Ci0JfQotCXIgPSByYWRlb25fYm9fbGlzdF9yZXNlcnZlKGhlYWQpOworCXIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKGhlYWQpOwogCWlmICh1bmxpa2VseShyICE9IDApKSB7CiAJCXJldHVybiByOwogCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvYmosIGhlYWQsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvYmosIGhlYWQsIHR2LmhlYWQpIHsKIAkJYm8gPSBsb2JqLT5ibzsKIAkJaWYgKCFiby0+cGluX2NvdW50KSB7CiAJCQlkb21haW4gPSBsb2JqLT53ZG9tYWluID8gbG9iai0+d2RvbWFpbiA6IGxvYmotPnJkb21haW47CkBAIC0zNzAsMjUgKzM0NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcmFkZW9uX2JvX2xpc3RfZmVuY2Uoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgdm9pZCAqZmVuY2UpCi17Ci0Jc3RydWN0IHJhZGVvbl9ib19saXN0ICpsb2JqOwotCXN0cnVjdCByYWRlb25fYm8gKmJvOwotCXN0cnVjdCByYWRlb25fZmVuY2UgKm9sZF9mZW5jZSA9IE5VTEw7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvYmosIGhlYWQsIGxpc3QpIHsKLQkJYm8gPSBsb2JqLT5ibzsKLQkJc3Bpbl9sb2NrKCZiby0+dGJvLmxvY2spOwotCQlvbGRfZmVuY2UgPSAoc3RydWN0IHJhZGVvbl9mZW5jZSAqKWJvLT50Ym8uc3luY19vYmo7Ci0JCWJvLT50Ym8uc3luY19vYmogPSByYWRlb25fZmVuY2VfcmVmKGZlbmNlKTsKLQkJYm8tPnRiby5zeW5jX29ial9hcmcgPSBOVUxMOwotCQlzcGluX3VubG9jaygmYm8tPnRiby5sb2NrKTsKLQkJaWYgKG9sZF9mZW5jZSkgewotCQkJcmFkZW9uX2ZlbmNlX3VucmVmKCZvbGRfZmVuY2UpOwotCQl9Ci0JfQotfQotCiBpbnQgcmFkZW9uX2JvX2ZiZGV2X21tYXAoc3RydWN0IHJhZGVvbl9ibyAqYm8sCiAJCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuaAppbmRleCBkMTQzNzAyLi4yMmQ0YzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuaApAQCAtMTI2LDEyICsxMjYsMTIgQEAKIAlyID0gdHRtX2JvX3Jlc2VydmUoJmJvLT50Ym8sIHRydWUsIG5vX3dhaXQsIGZhbHNlLCAwKTsKIAlpZiAodW5saWtlbHkociAhPSAwKSkKIAkJcmV0dXJuIHI7Ci0Jc3Bpbl9sb2NrKCZiby0+dGJvLmxvY2spOworCXNwaW5fbG9jaygmYm8tPnRiby5iZGV2LT5mZW5jZV9sb2NrKTsKIAlpZiAobWVtX3R5cGUpCiAJCSptZW1fdHlwZSA9IGJvLT50Ym8ubWVtLm1lbV90eXBlOwogCWlmIChiby0+dGJvLnN5bmNfb2JqKQogCQlyID0gdHRtX2JvX3dhaXQoJmJvLT50Ym8sIHRydWUsIHRydWUsIG5vX3dhaXQpOwotCXNwaW5fdW5sb2NrKCZiby0+dGJvLmxvY2spOworCXNwaW5fdW5sb2NrKCZiby0+dGJvLmJkZXYtPmZlbmNlX2xvY2spOwogCXR0bV9ib191bnJlc2VydmUoJmJvLT50Ym8pOwogCXJldHVybiByOwogfQpAQCAtMTUyLDEwICsxNTIsNyBAQAogZXh0ZXJuIHZvaWQgcmFkZW9uX2JvX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX2JvX2xpc3RfYWRkX29iamVjdChzdHJ1Y3QgcmFkZW9uX2JvX2xpc3QgKmxvYmosCiAJCQkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7Ci1leHRlcm4gaW50IHJhZGVvbl9ib19saXN0X3Jlc2VydmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7Ci1leHRlcm4gdm9pZCByYWRlb25fYm9fbGlzdF91bnJlc2VydmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CiBleHRlcm4gaW50IHJhZGVvbl9ib19saXN0X3ZhbGlkYXRlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2JvX2xpc3RfZmVuY2Uoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgdm9pZCAqZmVuY2UpOwogZXh0ZXJuIGludCByYWRlb25fYm9fZmJkZXZfbW1hcChzdHJ1Y3QgcmFkZW9uX2JvICpibywKIAkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiBleHRlcm4gaW50IHJhZGVvbl9ib19zZXRfdGlsaW5nX2ZsYWdzKHN0cnVjdCByYWRlb25fYm8gKmJvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKaW5kZXggOGM5YjJlZi4uM2IxYjJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCkBAIC0xNjcsMTMgKzE2NywxMyBAQAogCWlmIChyYWRlb25fZ3VpX2lkbGUocmRldikpIHsKIAkJc2NsayA9IHJkZXYtPnBtLnBvd2VyX3N0YXRlW3JkZXYtPnBtLnJlcXVlc3RlZF9wb3dlcl9zdGF0ZV9pbmRleF0uCiAJCQljbG9ja19pbmZvW3JkZXYtPnBtLnJlcXVlc3RlZF9jbG9ja19tb2RlX2luZGV4XS5zY2xrOwotCQlpZiAoc2NsayA+IHJkZXYtPmNsb2NrLmRlZmF1bHRfc2NsaykKLQkJCXNjbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X3NjbGs7CisJCWlmIChzY2xrID4gcmRldi0+cG0uZGVmYXVsdF9zY2xrKQorCQkJc2NsayA9IHJkZXYtPnBtLmRlZmF1bHRfc2NsazsKIAogCQltY2xrID0gcmRldi0+cG0ucG93ZXJfc3RhdGVbcmRldi0+cG0ucmVxdWVzdGVkX3Bvd2VyX3N0YXRlX2luZGV4XS4KIAkJCWNsb2NrX2luZm9bcmRldi0+cG0ucmVxdWVzdGVkX2Nsb2NrX21vZGVfaW5kZXhdLm1jbGs7Ci0JCWlmIChtY2xrID4gcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrKQotCQkJbWNsayA9IHJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsazsKKwkJaWYgKG1jbGsgPiByZGV2LT5wbS5kZWZhdWx0X21jbGspCisJCQltY2xrID0gcmRldi0+cG0uZGVmYXVsdF9tY2xrOwogCiAJCS8qIHVwdm9sdCBiZWZvcmUgcmFpc2luZyBjbG9ja3MsIGRvd252b2x0IGFmdGVyIGxvd2VyaW5nIGNsb2NrcyAqLwogCQlpZiAoc2NsayA8IHJkZXYtPnBtLmN1cnJlbnRfc2NsaykKQEAgLTQwNSwyMCArNDA1LDEzIEBACiAJCXJkZXYtPnBtLmR5bnBtX3BsYW5uZWRfYWN0aW9uID0gRFlOUE1fQUNUSU9OX0RFRkFVTFQ7CiAJCW11dGV4X3VubG9jaygmcmRldi0+cG0ubXV0ZXgpOwogCX0gZWxzZSBpZiAoc3RybmNtcCgicHJvZmlsZSIsIGJ1Ziwgc3RybGVuKCJwcm9maWxlIikpID09IDApIHsKLQkJYm9vbCBmbHVzaF93cSA9IGZhbHNlOwotCiAJCW11dGV4X2xvY2soJnJkZXYtPnBtLm11dGV4KTsKLQkJaWYgKHJkZXYtPnBtLnBtX21ldGhvZCA9PSBQTV9NRVRIT0RfRFlOUE0pIHsKLQkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJkZXYtPnBtLmR5bnBtX2lkbGVfd29yayk7Ci0JCQlmbHVzaF93cSA9IHRydWU7Ci0JCX0KIAkJLyogZGlzYWJsZSBkeW5wbSAqLwogCQlyZGV2LT5wbS5keW5wbV9zdGF0ZSA9IERZTlBNX1NUQVRFX0RJU0FCTEVEOwogCQlyZGV2LT5wbS5keW5wbV9wbGFubmVkX2FjdGlvbiA9IERZTlBNX0FDVElPTl9OT05FOwogCQlyZGV2LT5wbS5wbV9tZXRob2QgPSBQTV9NRVRIT0RfUFJPRklMRTsKIAkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5wbS5tdXRleCk7Ci0JCWlmIChmbHVzaF93cSkKLQkJCWZsdXNoX3dvcmtxdWV1ZShyZGV2LT53cSk7CisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcmRldi0+cG0uZHlucG1faWRsZV93b3JrKTsKIAl9IGVsc2UgewogCQlEUk1fRVJST1IoImludmFsaWQgcG93ZXIgbWV0aG9kIVxuIik7CiAJCWdvdG8gZmFpbDsKQEAgLTQ0Nyw4ICs0NDAsMTIgQEAKIAkJdGVtcCA9IHJ2NzcwX2dldF90ZW1wKHJkZXYpOwogCQlicmVhazsKIAljYXNlIFRIRVJNQUxfVFlQRV9FVkVSR1JFRU46CisJY2FzZSBUSEVSTUFMX1RZUEVfTkk6CiAJCXRlbXAgPSBldmVyZ3JlZW5fZ2V0X3RlbXAocmRldik7CiAJCWJyZWFrOworCWNhc2UgVEhFUk1BTF9UWVBFX1NVTU86CisJCXRlbXAgPSBzdW1vX2dldF90ZW1wKHJkZXYpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQl0ZW1wID0gMDsKIAkJYnJlYWs7CkBAIC00ODcsNiArNDg0LDcgQEAKIAljYXNlIFRIRVJNQUxfVFlQRV9SVjZYWDoKIAljYXNlIFRIRVJNQUxfVFlQRV9SVjc3MDoKIAljYXNlIFRIRVJNQUxfVFlQRV9FVkVSR1JFRU46CisJY2FzZSBUSEVSTUFMX1RZUEVfU1VNTzoKIAkJcmRldi0+cG0uaW50X2h3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcihyZGV2LT5kZXYpOwogCQlpZiAoSVNfRVJSKHJkZXYtPnBtLmludF9od21vbl9kZXYpKSB7CiAJCQllcnIgPSBQVFJfRVJSKHJkZXYtPnBtLmludF9od21vbl9kZXYpOwpAQCAtNTIwLDM0ICs1MTgsMzkgQEAKIAogdm9pZCByYWRlb25fcG1fc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlib29sIGZsdXNoX3dxID0gZmFsc2U7Ci0KIAltdXRleF9sb2NrKCZyZGV2LT5wbS5tdXRleCk7CiAJaWYgKHJkZXYtPnBtLnBtX21ldGhvZCA9PSBQTV9NRVRIT0RfRFlOUE0pIHsKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcmRldi0+cG0uZHlucG1faWRsZV93b3JrKTsKIAkJaWYgKHJkZXYtPnBtLmR5bnBtX3N0YXRlID09IERZTlBNX1NUQVRFX0FDVElWRSkKIAkJCXJkZXYtPnBtLmR5bnBtX3N0YXRlID0gRFlOUE1fU1RBVEVfU1VTUEVOREVEOwotCQlmbHVzaF93cSA9IHRydWU7CiAJfQogCW11dGV4X3VubG9jaygmcmRldi0+cG0ubXV0ZXgpOwotCWlmIChmbHVzaF93cSkKLQkJZmx1c2hfd29ya3F1ZXVlKHJkZXYtPndxKTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcmRldi0+cG0uZHlucG1faWRsZV93b3JrKTsKIH0KIAogdm9pZCByYWRlb25fcG1fcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCS8qIHNldCB1cCB0aGUgZGVmYXVsdCBjbG9ja3MgaWYgdGhlIE1DIHVjb2RlIGlzIGxvYWRlZCAqLworCWlmIChBU0lDX0lTX0RDRTUocmRldikgJiYgcmRldi0+bWNfZncpIHsKKwkJaWYgKHJkZXYtPnBtLmRlZmF1bHRfdmRkYykKKwkJCXJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHJkZXYsIHJkZXYtPnBtLmRlZmF1bHRfdmRkYyk7CisJCWlmIChyZGV2LT5wbS5kZWZhdWx0X3NjbGspCisJCQlyYWRlb25fc2V0X2VuZ2luZV9jbG9jayhyZGV2LCByZGV2LT5wbS5kZWZhdWx0X3NjbGspOworCQlpZiAocmRldi0+cG0uZGVmYXVsdF9tY2xrKQorCQkJcmFkZW9uX3NldF9tZW1vcnlfY2xvY2socmRldiwgcmRldi0+cG0uZGVmYXVsdF9tY2xrKTsKKwl9CiAJLyogYXNpYyBpbml0IHdpbGwgcmVzZXQgdGhlIGRlZmF1bHQgcG93ZXIgc3RhdGUgKi8KIAltdXRleF9sb2NrKCZyZGV2LT5wbS5tdXRleCk7CiAJcmRldi0+cG0uY3VycmVudF9wb3dlcl9zdGF0ZV9pbmRleCA9IHJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXg7CiAJcmRldi0+cG0uY3VycmVudF9jbG9ja19tb2RlX2luZGV4ID0gMDsKLQlyZGV2LT5wbS5jdXJyZW50X3NjbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X3NjbGs7Ci0JcmRldi0+cG0uY3VycmVudF9tY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrOworCXJkZXYtPnBtLmN1cnJlbnRfc2NsayA9IHJkZXYtPnBtLmRlZmF1bHRfc2NsazsKKwlyZGV2LT5wbS5jdXJyZW50X21jbGsgPSByZGV2LT5wbS5kZWZhdWx0X21jbGs7CiAJcmRldi0+cG0uY3VycmVudF92ZGRjID0gcmRldi0+cG0ucG93ZXJfc3RhdGVbcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnZvbHRhZ2U7CiAJaWYgKHJkZXYtPnBtLnBtX21ldGhvZCA9PSBQTV9NRVRIT0RfRFlOUE0KIAkgICAgJiYgcmRldi0+cG0uZHlucG1fc3RhdGUgPT0gRFlOUE1fU1RBVEVfU1VTUEVOREVEKSB7CiAJCXJkZXYtPnBtLmR5bnBtX3N0YXRlID0gRFlOUE1fU1RBVEVfQUNUSVZFOwotCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRldi0+d3EsICZyZGV2LT5wbS5keW5wbV9pZGxlX3dvcmssCi0JCQkJCW1zZWNzX3RvX2ppZmZpZXMoUkFERU9OX0lETEVfTE9PUF9NUykpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJkZXYtPnBtLmR5bnBtX2lkbGVfd29yaywKKwkJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKFJBREVPTl9JRExFX0xPT1BfTVMpKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5wbS5tdXRleCk7CiAJcmFkZW9uX3BtX2NvbXB1dGVfY2xvY2tzKHJkZXYpOwpAQCAtNTY0LDYgKzU2Nyw4IEBACiAJcmRldi0+cG0uZHlucG1fcGxhbm5lZF9hY3Rpb24gPSBEWU5QTV9BQ1RJT05fTk9ORTsKIAlyZGV2LT5wbS5keW5wbV9jYW5fdXBjbG9jayA9IHRydWU7CiAJcmRldi0+cG0uZHlucG1fY2FuX2Rvd25jbG9jayA9IHRydWU7CisJcmRldi0+cG0uZGVmYXVsdF9zY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrOworCXJkZXYtPnBtLmRlZmF1bHRfbWNsayA9IHJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsazsKIAlyZGV2LT5wbS5jdXJyZW50X3NjbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X3NjbGs7CiAJcmRldi0+cG0uY3VycmVudF9tY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrOwogCXJkZXYtPnBtLmludF90aGVybWFsX3R5cGUgPSBUSEVSTUFMX1RZUEVfTk9ORTsKQEAgLTU3NSwxMiArNTgwLDI0IEBACiAJCQlyYWRlb25fY29tYmlvc19nZXRfcG93ZXJfbW9kZXMocmRldik7CiAJCXJhZGVvbl9wbV9wcmludF9zdGF0ZXMocmRldik7CiAJCXJhZGVvbl9wbV9pbml0X3Byb2ZpbGUocmRldik7CisJCS8qIHNldCB1cCB0aGUgZGVmYXVsdCBjbG9ja3MgaWYgdGhlIE1DIHVjb2RlIGlzIGxvYWRlZCAqLworCQlpZiAoQVNJQ19JU19EQ0U1KHJkZXYpICYmIHJkZXYtPm1jX2Z3KSB7CisJCQlpZiAocmRldi0+cG0uZGVmYXVsdF92ZGRjKQorCQkJCXJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHJkZXYsIHJkZXYtPnBtLmRlZmF1bHRfdmRkYyk7CisJCQlpZiAocmRldi0+cG0uZGVmYXVsdF9zY2xrKQorCQkJCXJhZGVvbl9zZXRfZW5naW5lX2Nsb2NrKHJkZXYsIHJkZXYtPnBtLmRlZmF1bHRfc2Nsayk7CisJCQlpZiAocmRldi0+cG0uZGVmYXVsdF9tY2xrKQorCQkJCXJhZGVvbl9zZXRfbWVtb3J5X2Nsb2NrKHJkZXYsIHJkZXYtPnBtLmRlZmF1bHRfbWNsayk7CisJCX0KIAl9CiAKIAkvKiBzZXQgdXAgdGhlIGludGVybmFsIHRoZXJtYWwgc2Vuc29yIGlmIGFwcGxpY2FibGUgKi8KIAlyZXQgPSByYWRlb25faHdtb25faW5pdChyZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OworCisJSU5JVF9ERUxBWUVEX1dPUksoJnJkZXYtPnBtLmR5bnBtX2lkbGVfd29yaywgcmFkZW9uX2R5bnBtX2lkbGVfd29ya19oYW5kbGVyKTsKKwogCWlmIChyZGV2LT5wbS5udW1fcG93ZXJfc3RhdGVzID4gMSkgewogCQkvKiB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIHB1dCB0aGVzZT8gKi8KIAkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKHJkZXYtPmRldiwgJmRldl9hdHRyX3Bvd2VyX3Byb2ZpbGUpOwpAQCAtNTk0LDggKzYxMSw2IEBACiAJCXJkZXYtPmFjcGlfbmIubm90aWZpZXJfY2FsbCA9IHJhZGVvbl9hY3BpX2V2ZW50OwogCQlyZWdpc3Rlcl9hY3BpX25vdGlmaWVyKCZyZGV2LT5hY3BpX25iKTsKICNlbmRpZgotCQlJTklUX0RFTEFZRURfV09SSygmcmRldi0+cG0uZHlucG1faWRsZV93b3JrLCByYWRlb25fZHlucG1faWRsZV93b3JrX2hhbmRsZXIpOwotCiAJCWlmIChyYWRlb25fZGVidWdmc19wbV9pbml0KHJkZXYpKSB7CiAJCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFBNIVxuIik7CiAJCX0KQEAgLTYwOSwyNSArNjI0LDIwIEBACiB2b2lkIHJhZGVvbl9wbV9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWlmIChyZGV2LT5wbS5udW1fcG93ZXJfc3RhdGVzID4gMSkgewotCQlib29sIGZsdXNoX3dxID0gZmFsc2U7Ci0KIAkJbXV0ZXhfbG9jaygmcmRldi0+cG0ubXV0ZXgpOwogCQlpZiAocmRldi0+cG0ucG1fbWV0aG9kID09IFBNX01FVEhPRF9QUk9GSUxFKSB7CiAJCQlyZGV2LT5wbS5wcm9maWxlID0gUE1fUFJPRklMRV9ERUZBVUxUOwogCQkJcmFkZW9uX3BtX3VwZGF0ZV9wcm9maWxlKHJkZXYpOwogCQkJcmFkZW9uX3BtX3NldF9jbG9ja3MocmRldik7CiAJCX0gZWxzZSBpZiAocmRldi0+cG0ucG1fbWV0aG9kID09IFBNX01FVEhPRF9EWU5QTSkgewotCQkJLyogY2FuY2VsIHdvcmsgKi8KLQkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJkZXYtPnBtLmR5bnBtX2lkbGVfd29yayk7Ci0JCQlmbHVzaF93cSA9IHRydWU7CiAJCQkvKiByZXNldCBkZWZhdWx0IGNsb2NrcyAqLwogCQkJcmRldi0+cG0uZHlucG1fc3RhdGUgPSBEWU5QTV9TVEFURV9ESVNBQkxFRDsKIAkJCXJkZXYtPnBtLmR5bnBtX3BsYW5uZWRfYWN0aW9uID0gRFlOUE1fQUNUSU9OX0RFRkFVTFQ7CiAJCQlyYWRlb25fcG1fc2V0X2Nsb2NrcyhyZGV2KTsKIAkJfQogCQltdXRleF91bmxvY2soJnJkZXYtPnBtLm11dGV4KTsKLQkJaWYgKGZsdXNoX3dxKQotCQkJZmx1c2hfd29ya3F1ZXVlKHJkZXYtPndxKTsKKworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJkZXYtPnBtLmR5bnBtX2lkbGVfd29yayk7CiAKIAkJZGV2aWNlX3JlbW92ZV9maWxlKHJkZXYtPmRldiwgJmRldl9hdHRyX3Bvd2VyX3Byb2ZpbGUpOwogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUocmRldi0+ZGV2LCAmZGV2X2F0dHJfcG93ZXJfbWV0aG9kKTsKQEAgLTY4NiwxMiArNjk2LDEyIEBACiAJCQkJCXJhZGVvbl9wbV9nZXRfZHlucG1fc3RhdGUocmRldik7CiAJCQkJCXJhZGVvbl9wbV9zZXRfY2xvY2tzKHJkZXYpOwogCi0JCQkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZGV2LT53cSwgJnJkZXYtPnBtLmR5bnBtX2lkbGVfd29yaywKLQkJCQkJCQkgICBtc2Vjc190b19qaWZmaWVzKFJBREVPTl9JRExFX0xPT1BfTVMpKTsKKwkJCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyZGV2LT5wbS5keW5wbV9pZGxlX3dvcmssCisJCQkJCQkJICAgICAgbXNlY3NfdG9famlmZmllcyhSQURFT05fSURMRV9MT09QX01TKSk7CiAJCQkJfSBlbHNlIGlmIChyZGV2LT5wbS5keW5wbV9zdGF0ZSA9PSBEWU5QTV9TVEFURV9QQVVTRUQpIHsKIAkJCQkJcmRldi0+cG0uZHlucG1fc3RhdGUgPSBEWU5QTV9TVEFURV9BQ1RJVkU7Ci0JCQkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZGV2LT53cSwgJnJkZXYtPnBtLmR5bnBtX2lkbGVfd29yaywKLQkJCQkJCQkgICBtc2Vjc190b19qaWZmaWVzKFJBREVPTl9JRExFX0xPT1BfTVMpKTsKKwkJCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyZGV2LT5wbS5keW5wbV9pZGxlX3dvcmssCisJCQkJCQkJICAgICAgbXNlY3NfdG9famlmZmllcyhSQURFT05fSURMRV9MT09QX01TKSk7CiAJCQkJCURSTV9ERUJVR19EUklWRVIoInJhZGVvbjogZHluYW1pYyBwb3dlciBtYW5hZ2VtZW50IGFjdGl2YXRlZFxuIik7CiAJCQkJfQogCQkJfSBlbHNlIHsgLyogY291bnQgPT0gMCAqLwpAQCAtNzIwLDkgKzczMCw5IEBACiAJICovCiAJZm9yIChjcnRjID0gMDsgKGNydGMgPCByZGV2LT5udW1fY3J0YykgJiYgaW5fdmJsOyBjcnRjKyspIHsKIAkJaWYgKHJkZXYtPnBtLmFjdGl2ZV9jcnRjcyAmICgxIDw8IGNydGMpKSB7Ci0JCQl2Ymxfc3RhdHVzID0gcmFkZW9uX2dldF9jcnRjX3NjYW5vdXRwb3MocmRldiwgY3J0YywgJnZwb3MsICZocG9zKTsKLQkJCWlmICgodmJsX3N0YXR1cyAmIFJBREVPTl9TQ0FOT1VUUE9TX1ZBTElEKSAmJgotCQkJICAgICEodmJsX3N0YXR1cyAmIFJBREVPTl9TQ0FOT1VUUE9TX0lOVkJMKSkKKwkJCXZibF9zdGF0dXMgPSByYWRlb25fZ2V0X2NydGNfc2Nhbm91dHBvcyhyZGV2LT5kZGV2LCBjcnRjLCAmdnBvcywgJmhwb3MpOworCQkJaWYgKCh2Ymxfc3RhdHVzICYgRFJNX1NDQU5PVVRQT1NfVkFMSUQpICYmCisJCQkgICAgISh2Ymxfc3RhdHVzICYgRFJNX1NDQU5PVVRQT1NfSU5WQkwpKQogCQkJCWluX3ZibCA9IGZhbHNlOwogCQl9CiAJfQpAQCAtNzk2LDggKzgwNiw4IEBACiAJCQlyYWRlb25fcG1fc2V0X2Nsb2NrcyhyZGV2KTsKIAkJfQogCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhyZGV2LT53cSwgJnJkZXYtPnBtLmR5bnBtX2lkbGVfd29yaywKLQkJCQkJbXNlY3NfdG9famlmZmllcyhSQURFT05fSURMRV9MT09QX01TKSk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcmRldi0+cG0uZHlucG1faWRsZV93b3JrLAorCQkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoUkFERU9OX0lETEVfTE9PUF9NUykpOwogCX0KIAltdXRleF91bmxvY2soJnJkZXYtPnBtLm11dGV4KTsKIAl0dG1fYm9fdW5sb2NrX2RlbGF5ZWRfd29ya3F1ZXVlKCZyZGV2LT5tbWFuLmJkZXYsIHJlc2NoZWQpOwpAQCAtODE0LDkgKzgyNCw5IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0Jc2VxX3ByaW50ZihtLCAiZGVmYXVsdCBlbmdpbmUgY2xvY2s6ICV1MCBrSHpcbiIsIHJkZXYtPmNsb2NrLmRlZmF1bHRfc2Nsayk7CisJc2VxX3ByaW50ZihtLCAiZGVmYXVsdCBlbmdpbmUgY2xvY2s6ICV1MCBrSHpcbiIsIHJkZXYtPnBtLmRlZmF1bHRfc2Nsayk7CiAJc2VxX3ByaW50ZihtLCAiY3VycmVudCBlbmdpbmUgY2xvY2s6ICV1MCBrSHpcbiIsIHJhZGVvbl9nZXRfZW5naW5lX2Nsb2NrKHJkZXYpKTsKLQlzZXFfcHJpbnRmKG0sICJkZWZhdWx0IG1lbW9yeSBjbG9jazogJXUwIGtIelxuIiwgcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrKTsKKwlzZXFfcHJpbnRmKG0sICJkZWZhdWx0IG1lbW9yeSBjbG9jazogJXUwIGtIelxuIiwgcmRldi0+cG0uZGVmYXVsdF9tY2xrKTsKIAlpZiAocmRldi0+YXNpYy0+Z2V0X21lbW9yeV9jbG9jaykKIAkJc2VxX3ByaW50ZihtLCAiY3VycmVudCBtZW1vcnkgY2xvY2s6ICV1MCBrSHpcbiIsIHJhZGVvbl9nZXRfbWVtb3J5X2Nsb2NrKHJkZXYpKTsKIAlpZiAocmRldi0+cG0uY3VycmVudF92ZGRjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaAppbmRleCA2NDkyODgxLi4zY2Q0ZGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgInI1MDBfcmVnLmgiCiAjaW5jbHVkZSAicjYwMF9yZWcuaCIKICNpbmNsdWRlICJldmVyZ3JlZW5fcmVnLmgiCisjaW5jbHVkZSAibmlfcmVnLmgiCiAKICNkZWZpbmUgUkFERU9OX01DX0FHUF9MT0NBVElPTgkJMHgwMTRjCiAjZGVmaW5lCQlSQURFT05fTUNfQUdQX1NUQVJUX01BU0sJMHgwMDAwRkZGRgpAQCAtMzIwLDYgKzMyMSwxNSBAQAogIyAgICAgICBkZWZpbmUgUkFERU9OX1BDSUVfTENfUkVDT05GSUdfTk9XICAgICAgICAgKDEgPDwgOCkKICMgICAgICAgZGVmaW5lIFJBREVPTl9QQ0lFX0xDX1JFQ09ORklHX0xBVEVSICAgICAgICgxIDw8IDkpCiAjICAgICAgIGRlZmluZSBSQURFT05fUENJRV9MQ19TSE9SVF9SRUNPTkZJR19FTiAgICAoMSA8PCAxMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUENJRV9MQ19SRUNPTkZJR19BUkNfTUlTU0lOR19FU0NBUEUgICAoMSA8PCA3KQorIyAgICAgICBkZWZpbmUgUjYwMF9QQ0lFX0xDX1JFTkVHT1RJQVRJT05fU1VQUE9SVCAgKDEgPDwgOSkKKyMgICAgICAgZGVmaW5lIFI2MDBfUENJRV9MQ19SRU5FR09USUFURV9FTiAgICAgICAgICgxIDw8IDEwKQorIyAgICAgICBkZWZpbmUgUjYwMF9QQ0lFX0xDX1NIT1JUX1JFQ09ORklHX0VOICAgICAgKDEgPDwgMTEpCisjICAgICAgIGRlZmluZSBSNjAwX1BDSUVfTENfVVBDT05GSUdVUkVfU1VQUE9SVCAgICAoMSA8PCAxMikKKyMgICAgICAgZGVmaW5lIFI2MDBfUENJRV9MQ19VUENPTkZJR1VSRV9ESVMgICAgICAgICgxIDw8IDEzKQorCisjZGVmaW5lIFI2MDBfVEFSR0VUX0FORF9DVVJSRU5UX1BST0ZJTEVfSU5ERVggICAgICAweDcwYworI2RlZmluZSBSNzAwX1RBUkdFVF9BTkRfQ1VSUkVOVF9QUk9GSUxFX0lOREVYICAgICAgMHg2NmMKIAogI2RlZmluZSBSQURFT05fQ0FDSEVfQ05UTCAgICAgICAgICAgICAgICAgICAweDE3MjQKICNkZWZpbmUgUkFERU9OX0NBQ0hFX0xJTkUgICAgICAgICAgICAgICAgICAgMHgwZjBjIC8qIFBDSSAqLwpAQCAtNDIyLDYgKzQzMiw3IEBACiAjICAgICAgIGRlZmluZSBSQURFT05fQ1JUQ19DU1lOQ19FTiAgICAgICAgICgxIDw8ICA0KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NSVENfSUNPTl9FTiAgICAgICAgICAoMSA8PCAxNSkKICMgICAgICAgZGVmaW5lIFJBREVPTl9DUlRDX0NVUl9FTiAgICAgICAgICAgKDEgPDwgMTYpCisjICAgICAgIGRlZmluZSBSQURFT05fQ1JUQ19WU1RBVF9NT0RFX01BU0sgICgzIDw8IDE3KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NSVENfQ1VSX01PREVfTUFTSyAgICAoNyA8PCAyMCkKICMgICAgICAgZGVmaW5lIFJBREVPTl9DUlRDX0NVUl9NT0RFX1NISUZUICAgMjAKICMgICAgICAgZGVmaW5lIFJBREVPTl9DUlRDX0NVUl9NT0RFX01PTk8gICAgMApAQCAtNTA5LDYgKzUyMCw4IEBACiAjICAgICAgIGRlZmluZSBSQURFT05fQ1JUQ19USUxFX0VOICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0NSVENfT0ZGU0VUX0ZMSVBfQ05UTCAgICAgICAgICAgICAoMSA8PCAxNikKICMgICAgICAgZGVmaW5lIFJBREVPTl9DUlRDX1NURVJFT19PRkZTRVRfRU4gICAgICAgICAgICAgKDEgPDwgMTcpCisjICAgICAgIGRlZmluZSBSQURFT05fQ1JUQ19HVUlfVFJJR19PRkZTRVRfTEVGVF9FTiAgICAgICgxIDw8IDI4KQorIyAgICAgICBkZWZpbmUgUkFERU9OX0NSVENfR1VJX1RSSUdfT0ZGU0VUX1JJR0hUX0VOICAgICAoMSA8PCAyOSkKIAogI2RlZmluZSBSMzAwX0NSVENfVElMRV9YMF9ZMAkgICAgICAgICAgICAweDAzNTAKICNkZWZpbmUgUjMwMF9DUlRDMl9USUxFX1gwX1kwCSAgICAgICAgICAgIDB4MDM1OApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHJhY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFmZDgxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3RyYWNlLmgKQEAgLTAsMCArMSw4MiBAQAorI2lmICFkZWZpbmVkKF9SQURFT05fVFJBQ0VfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKKyNkZWZpbmUgX1JBREVPTl9UUkFDRV9IXworCisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorCisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSByYWRlb24KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNX1NUUklORyBfX3N0cmluZ2lmeShUUkFDRV9TWVNURU0pCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSByYWRlb25fdHJhY2UKKworVFJBQ0VfRVZFTlQocmFkZW9uX2JvX2NyZWF0ZSwKKwkgICAgVFBfUFJPVE8oc3RydWN0IHJhZGVvbl9ibyAqYm8pLAorCSAgICBUUF9BUkdTKGJvKSwKKwkgICAgVFBfU1RSVUNUX19lbnRyeSgKKwkJCSAgICAgX19maWVsZChzdHJ1Y3QgcmFkZW9uX2JvICosIGJvKQorCQkJICAgICBfX2ZpZWxkKHUzMiwgcGFnZXMpCisJCQkgICAgICksCisKKwkgICAgVFBfZmFzdF9hc3NpZ24oCisJCQkgICBfX2VudHJ5LT5ibyA9IGJvOworCQkJICAgX19lbnRyeS0+cGFnZXMgPSBiby0+dGJvLm51bV9wYWdlczsKKwkJCSAgICksCisJICAgIFRQX3ByaW50aygiYm89JXAsIHBhZ2VzPSV1IiwgX19lbnRyeS0+Ym8sIF9fZW50cnktPnBhZ2VzKQorKTsKKworREVDTEFSRV9FVkVOVF9DTEFTUyhyYWRlb25fZmVuY2VfcmVxdWVzdCwKKworCSAgICBUUF9QUk9UTyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2Vxbm8pLAorCisJICAgIFRQX0FSR1MoZGV2LCBzZXFubyksCisKKwkgICAgVFBfU1RSVUNUX19lbnRyeSgKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKKwkJCSAgICAgX19maWVsZCh1MzIsIHNlcW5vKQorCQkJICAgICApLAorCisJICAgIFRQX2Zhc3RfYXNzaWduKAorCQkJICAgX19lbnRyeS0+ZGV2ID0gZGV2LT5wcmltYXJ5LT5pbmRleDsKKwkJCSAgIF9fZW50cnktPnNlcW5vID0gc2Vxbm87CisJCQkgICApLAorCisJICAgIFRQX3ByaW50aygiZGV2PSV1LCBzZXFubz0ldSIsIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCispOworCitERUZJTkVfRVZFTlQocmFkZW9uX2ZlbmNlX3JlcXVlc3QsIHJhZGVvbl9mZW5jZV9lbWl0LAorCisJICAgIFRQX1BST1RPKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBzZXFubyksCisKKwkgICAgVFBfQVJHUyhkZXYsIHNlcW5vKQorKTsKKworREVGSU5FX0VWRU5UKHJhZGVvbl9mZW5jZV9yZXF1ZXN0LCByYWRlb25fZmVuY2VfcmV0aXJlLAorCisJICAgIFRQX1BST1RPKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBzZXFubyksCisKKwkgICAgVFBfQVJHUyhkZXYsIHNlcW5vKQorKTsKKworREVGSU5FX0VWRU5UKHJhZGVvbl9mZW5jZV9yZXF1ZXN0LCByYWRlb25fZmVuY2Vfd2FpdF9iZWdpbiwKKworCSAgICBUUF9QUk9UTyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2Vxbm8pLAorCisJICAgIFRQX0FSR1MoZGV2LCBzZXFubykKKyk7CisKK0RFRklORV9FVkVOVChyYWRlb25fZmVuY2VfcmVxdWVzdCwgcmFkZW9uX2ZlbmNlX3dhaXRfZW5kLAorCisJICAgIFRQX1BST1RPKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBzZXFubyksCisKKwkgICAgVFBfQVJHUyhkZXYsIHNlcW5vKQorKTsKKworI2VuZGlmCisKKy8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLworI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSAorI2RlZmluZSBUUkFDRV9JTkNMVURFX1BBVEggLgorI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHJhY2VfcG9pbnRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90cmFjZV9wb2ludHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTc1OTkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHJhY2VfcG9pbnRzLmMKQEAgLTAsMCArMSw5IEBACisvKiBDb3B5cmlnaHQgUmVkIEhhdCBJbmMgMjAxMC4KKyAqIEF1dGhvciA6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CisgKi8KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKKyNpbmNsdWRlICJyYWRlb24uaCIKKworI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCisjaW5jbHVkZSAicmFkZW9uX3RyYWNlLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3J2NTE1IGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ydjUxNQppbmRleCBiM2Y5ZjFkLi5lZjQyMmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3J2NTE1CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnY1MTUKQEAgLTMwNCw2ICszMDQsMjIgQEAKIDB4NDYzMCBVU19DT0RFX0FERFIKIDB4NDYzNCBVU19DT0RFX1JBTkdFCiAweDQ2MzggVVNfQ09ERV9PRkZTRVQKKzB4NDY0MCBVU19GT1JNQVQwXzAKKzB4NDY0NCBVU19GT1JNQVQwXzEKKzB4NDY0OCBVU19GT1JNQVQwXzIKKzB4NDY0QyBVU19GT1JNQVQwXzMKKzB4NDY1MCBVU19GT1JNQVQwXzQKKzB4NDY1NCBVU19GT1JNQVQwXzUKKzB4NDY1OCBVU19GT1JNQVQwXzYKKzB4NDY1QyBVU19GT1JNQVQwXzcKKzB4NDY2MCBVU19GT1JNQVQwXzgKKzB4NDY2NCBVU19GT1JNQVQwXzkKKzB4NDY2OCBVU19GT1JNQVQwXzEwCisweDQ2NkMgVVNfRk9STUFUMF8xMQorMHg0NjcwIFVTX0ZPUk1BVDBfMTIKKzB4NDY3NCBVU19GT1JNQVQwXzEzCisweDQ2NzggVVNfRk9STUFUMF8xNAorMHg0NjdDIFVTX0ZPUk1BVDBfMTUKIDB4NDZBNCBVU19PVVRfRk1UXzAKIDB4NDZBOCBVU19PVVRfRk1UXzEKIDB4NDZBQyBVU19PVVRfRk1UXzIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwppbmRleCBmMWM2ZTAyLi5iNDE5MmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCkBAIC00Niw2ICs0Niw1NiBAQAogdm9pZCByczYwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnM2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKK3ZvaWQgcnM2MDBfcHJlX3BhZ2VfZmxpcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpCit7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHJkZXYtPm1vZGVfaW5mby5jcnRjc1tjcnRjXTsKKwl1MzIgdG1wOworCisJLyogbWFrZSBzdXJlIGZsaXAgaXMgYXQgdmIgcmF0aGVyIHRoYW4gaGIgKi8KKwl0bXAgPSBSUkVHMzIoQVZJVk9fRDFHUlBIX0ZMSVBfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCk7CisJdG1wICY9IH5BVklWT19EMUdSUEhfU1VSRkFDRV9VUERBVEVfSF9SRVRSQUNFX0VOOworCVdSRUczMihBVklWT19EMUdSUEhfRkxJUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCB0bXApOworCisJLyogc2V0IHBhZ2VmbGlwIHRvIGhhcHBlbiBhbnl3aGVyZSBpbiB2YmxhbmsgaW50ZXJ2YWwgKi8KKwlXUkVHMzIoQVZJVk9fRDFNT0RFX01BU1RFUl9VUERBVEVfTU9ERSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisKKwkvKiBlbmFibGUgdGhlIHBmbGlwIGludCAqLworCXJhZGVvbl9pcnFfa21zX3BmbGlwX2lycV9nZXQocmRldiwgY3J0Yyk7Cit9CisKK3ZvaWQgcnM2MDBfcG9zdF9wYWdlX2ZsaXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKQoreworCS8qIGRpc2FibGUgdGhlIHBmbGlwIGludCAqLworCXJhZGVvbl9pcnFfa21zX3BmbGlwX2lycV9wdXQocmRldiwgY3J0Yyk7Cit9CisKK3UzMiByczYwMF9wYWdlX2ZsaXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjX2lkLCB1NjQgY3J0Y19iYXNlKQoreworCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSByZGV2LT5tb2RlX2luZm8uY3J0Y3NbY3J0Y19pZF07CisJdTMyIHRtcCA9IFJSRUczMihBVklWT19EMUdSUEhfVVBEQVRFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0KTsKKworCS8qIExvY2sgdGhlIGdyYXBoaWNzIHVwZGF0ZSBsb2NrICovCisJdG1wIHw9IEFWSVZPX0QxR1JQSF9VUERBVEVfTE9DSzsKKwlXUkVHMzIoQVZJVk9fRDFHUlBIX1VQREFURSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgdG1wKTsKKworCS8qIHVwZGF0ZSB0aGUgc2Nhbm91dCBhZGRyZXNzZXMgKi8KKwlXUkVHMzIoQVZJVk9fRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJICAgICAgICh1MzIpY3J0Y19iYXNlKTsKKwlXUkVHMzIoQVZJVk9fRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCSAgICAgICAodTMyKWNydGNfYmFzZSk7CisKKwkvKiBXYWl0IGZvciB1cGRhdGVfcGVuZGluZyB0byBnbyBoaWdoLiAqLworCXdoaWxlICghKFJSRUczMihBVklWT19EMUdSUEhfVVBEQVRFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0KSAmIEFWSVZPX0QxR1JQSF9TVVJGQUNFX1VQREFURV9QRU5ESU5HKSk7CisJRFJNX0RFQlVHKCJVcGRhdGUgcGVuZGluZyBub3cgaGlnaC4gVW5sb2NraW5nIHZ1cGRhdGVfbG9jay5cbiIpOworCisJLyogVW5sb2NrIHRoZSBsb2NrLCBzbyBkb3VibGUtYnVmZmVyaW5nIGNhbiB0YWtlIHBsYWNlIGluc2lkZSB2YmxhbmsgKi8KKwl0bXAgJj0gfkFWSVZPX0QxR1JQSF9VUERBVEVfTE9DSzsKKwlXUkVHMzIoQVZJVk9fRDFHUlBIX1VQREFURSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgdG1wKTsKKworCS8qIFJldHVybiBjdXJyZW50IHVwZGF0ZV9wZW5kaW5nIHN0YXR1czogKi8KKwlyZXR1cm4gUlJFRzMyKEFWSVZPX0QxR1JQSF9VUERBVEUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQpICYgQVZJVk9fRDFHUlBIX1NVUkZBQ0VfVVBEQVRFX1BFTkRJTkc7Cit9CisKIHZvaWQgcnM2MDBfcG1fbWlzYyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcmVxdWVzdGVkX2luZGV4ID0gcmRldi0+cG0ucmVxdWVzdGVkX3Bvd2VyX3N0YXRlX2luZGV4OwpAQCAtNTE1LDEwICs1NjUsMTIgQEAKIAlpZiAocmRldi0+aXJxLmd1aV9pZGxlKSB7CiAJCXRtcCB8PSBTXzAwMDA0MF9HVUlfSURMRSgxKTsKIAl9Ci0JaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbMF0pIHsKKwlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFswXSB8fAorCSAgICByZGV2LT5pcnEucGZsaXBbMF0pIHsKIAkJbW9kZV9pbnQgfD0gU18wMDY1NDBfRDFNT0RFX1ZCTEFOS19JTlRfTUFTSygxKTsKIAl9Ci0JaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbMV0pIHsKKwlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFsxXSB8fAorCSAgICByZGV2LT5pcnEucGZsaXBbMV0pIHsKIAkJbW9kZV9pbnQgfD0gU18wMDY1NDBfRDJNT0RFX1ZCTEFOS19JTlRfTUFTSygxKTsKIAl9CiAJaWYgKHJkZXYtPmlycS5ocGRbMF0pIHsKQEAgLTUzNCw3ICs1ODYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90IHJzNjAwX2lycV9hY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiAqcjUwMF9kaXNwX2ludCkKK3N0YXRpYyBpbmxpbmUgdTMyIHJzNjAwX2lycV9hY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDMyX3QgaXJxcyA9IFJSRUczMihSXzAwMDA0NF9HRU5fSU5UX1NUQVRVUyk7CiAJdWludDMyX3QgaXJxX21hc2sgPSBTXzAwMDA0NF9TV19JTlQoMSk7CkBAIC01NDcsMjcgKzU5OSwyNyBAQAogCX0KIAogCWlmIChHXzAwMDA0NF9ESVNQTEFZX0lOVF9TVEFUKGlycXMpKSB7Ci0JCSpyNTAwX2Rpc3BfaW50ID0gUlJFRzMyKFJfMDA3RURDX0RJU1BfSU5URVJSVVBUX1NUQVRVUyk7Ci0JCWlmIChHXzAwN0VEQ19MQl9EMV9WQkxBTktfSU5URVJSVVBUKCpyNTAwX2Rpc3BfaW50KSkgeworCQlyZGV2LT5pcnEuc3RhdF9yZWdzLnI1MDAuZGlzcF9pbnQgPSBSUkVHMzIoUl8wMDdFRENfRElTUF9JTlRFUlJVUFRfU1RBVFVTKTsKKwkJaWYgKEdfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQocmRldi0+aXJxLnN0YXRfcmVncy5yNTAwLmRpc3BfaW50KSkgewogCQkJV1JFRzMyKFJfMDA2NTM0X0QxTU9ERV9WQkxBTktfU1RBVFVTLAogCQkJCVNfMDA2NTM0X0QxTU9ERV9WQkxBTktfQUNLKDEpKTsKIAkJfQotCQlpZiAoR18wMDdFRENfTEJfRDJfVkJMQU5LX0lOVEVSUlVQVCgqcjUwMF9kaXNwX2ludCkpIHsKKwkJaWYgKEdfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQocmRldi0+aXJxLnN0YXRfcmVncy5yNTAwLmRpc3BfaW50KSkgewogCQkJV1JFRzMyKFJfMDA2RDM0X0QyTU9ERV9WQkxBTktfU1RBVFVTLAogCQkJCVNfMDA2RDM0X0QyTU9ERV9WQkxBTktfQUNLKDEpKTsKIAkJfQotCQlpZiAoR18wMDdFRENfRENfSE9UX1BMVUdfREVURUNUMV9JTlRFUlJVUFQoKnI1MDBfZGlzcF9pbnQpKSB7CisJCWlmIChHXzAwN0VEQ19EQ19IT1RfUExVR19ERVRFQ1QxX0lOVEVSUlVQVChyZGV2LT5pcnEuc3RhdF9yZWdzLnI1MDAuZGlzcF9pbnQpKSB7CiAJCQl0bXAgPSBSUkVHMzIoUl8wMDdEMDhfRENfSE9UX1BMVUdfREVURUNUMV9JTlRfQ09OVFJPTCk7CiAJCQl0bXAgfD0gU18wMDdEMDhfRENfSE9UX1BMVUdfREVURUNUMV9JTlRfQUNLKDEpOwogCQkJV1JFRzMyKFJfMDA3RDA4X0RDX0hPVF9QTFVHX0RFVEVDVDFfSU5UX0NPTlRST0wsIHRtcCk7CiAJCX0KLQkJaWYgKEdfMDA3RURDX0RDX0hPVF9QTFVHX0RFVEVDVDJfSU5URVJSVVBUKCpyNTAwX2Rpc3BfaW50KSkgeworCQlpZiAoR18wMDdFRENfRENfSE9UX1BMVUdfREVURUNUMl9JTlRFUlJVUFQocmRldi0+aXJxLnN0YXRfcmVncy5yNTAwLmRpc3BfaW50KSkgewogCQkJdG1wID0gUlJFRzMyKFJfMDA3RDE4X0RDX0hPVF9QTFVHX0RFVEVDVDJfSU5UX0NPTlRST0wpOwogCQkJdG1wIHw9IFNfMDA3RDE4X0RDX0hPVF9QTFVHX0RFVEVDVDJfSU5UX0FDSygxKTsKIAkJCVdSRUczMihSXzAwN0QxOF9EQ19IT1RfUExVR19ERVRFQ1QyX0lOVF9DT05UUk9MLCB0bXApOwogCQl9CiAJfSBlbHNlIHsKLQkJKnI1MDBfZGlzcF9pbnQgPSAwOworCQlyZGV2LT5pcnEuc3RhdF9yZWdzLnI1MDAuZGlzcF9pbnQgPSAwOwogCX0KIAogCWlmIChpcnFzKSB7CkBAIC01NzgsMzIgKzYzMCwzMCBAQAogCiB2b2lkIHJzNjAwX2lycV9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXUzMiB0bXA7Ci0KIAlXUkVHMzIoUl8wMDAwNDBfR0VOX0lOVF9DTlRMLCAwKTsKIAlXUkVHMzIoUl8wMDY1NDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKIAkvKiBXYWl0IGFuZCBhY2tub3dsZWRnZSBpcnEgKi8KIAltZGVsYXkoMSk7Ci0JcnM2MDBfaXJxX2FjayhyZGV2LCAmdG1wKTsKKwlyczYwMF9pcnFfYWNrKHJkZXYpOwogfQogCiBpbnQgcnM2MDBfaXJxX3Byb2Nlc3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdWludDMyX3Qgc3RhdHVzLCBtc2lfcmVhcm07Ci0JdWludDMyX3QgcjUwMF9kaXNwX2ludDsKKwl1MzIgc3RhdHVzLCBtc2lfcmVhcm07CiAJYm9vbCBxdWV1ZV9ob3RwbHVnID0gZmFsc2U7CiAKIAkvKiByZXNldCBndWkgaWRsZSBhY2suICB0aGUgc3RhdHVzIGJpdCBpcyBicm9rZW4gKi8KIAlyZGV2LT5pcnEuZ3VpX2lkbGVfYWNrZWQgPSBmYWxzZTsKIAotCXN0YXR1cyA9IHJzNjAwX2lycV9hY2socmRldiwgJnI1MDBfZGlzcF9pbnQpOwotCWlmICghc3RhdHVzICYmICFyNTAwX2Rpc3BfaW50KSB7CisJc3RhdHVzID0gcnM2MDBfaXJxX2FjayhyZGV2KTsKKwlpZiAoIXN0YXR1cyAmJiAhcmRldi0+aXJxLnN0YXRfcmVncy5yNTAwLmRpc3BfaW50KSB7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9Ci0Jd2hpbGUgKHN0YXR1cyB8fCByNTAwX2Rpc3BfaW50KSB7CisJd2hpbGUgKHN0YXR1cyB8fCByZGV2LT5pcnEuc3RhdF9yZWdzLnI1MDAuZGlzcF9pbnQpIHsKIAkJLyogU1cgaW50ZXJydXB0ICovCi0JCWlmIChHXzAwMDA0NF9TV19JTlQoc3RhdHVzKSkKKwkJaWYgKEdfMDAwMDQ0X1NXX0lOVChzdGF0dXMpKSB7CiAJCQlyYWRlb25fZmVuY2VfcHJvY2VzcyhyZGV2KTsKKwkJfQogCQkvKiBHVUkgaWRsZSAqLwogCQlpZiAoR18wMDAwNDBfR1VJX0lETEUoc3RhdHVzKSkgewogCQkJcmRldi0+aXJxLmd1aV9pZGxlX2Fja2VkID0gdHJ1ZTsKQEAgLTYxMSwzMCArNjYxLDM4IEBACiAJCQl3YWtlX3VwKCZyZGV2LT5pcnEuaWRsZV9xdWV1ZSk7CiAJCX0KIAkJLyogVmVydGljYWwgYmxhbmsgaW50ZXJydXB0cyAqLwotCQlpZiAoR18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVChyNTAwX2Rpc3BfaW50KSkgewotCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgMCk7Ci0JCQlyZGV2LT5wbS52Ymxhbmtfc3luYyA9IHRydWU7Ci0JCQl3YWtlX3VwKCZyZGV2LT5pcnEudmJsYW5rX3F1ZXVlKTsKKwkJaWYgKEdfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQocmRldi0+aXJxLnN0YXRfcmVncy5yNTAwLmRpc3BfaW50KSkgeworCQkJaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbMF0pIHsKKwkJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAwKTsKKwkJCQlyZGV2LT5wbS52Ymxhbmtfc3luYyA9IHRydWU7CisJCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7CisJCQl9CisJCQlpZiAocmRldi0+aXJxLnBmbGlwWzBdKQorCQkJCXJhZGVvbl9jcnRjX2hhbmRsZV9mbGlwKHJkZXYsIDApOwogCQl9Ci0JCWlmIChHXzAwN0VEQ19MQl9EMl9WQkxBTktfSU5URVJSVVBUKHI1MDBfZGlzcF9pbnQpKSB7Ci0JCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAxKTsKLQkJCXJkZXYtPnBtLnZibGFua19zeW5jID0gdHJ1ZTsKLQkJCXdha2VfdXAoJnJkZXYtPmlycS52YmxhbmtfcXVldWUpOworCQlpZiAoR18wMDdFRENfTEJfRDJfVkJMQU5LX0lOVEVSUlVQVChyZGV2LT5pcnEuc3RhdF9yZWdzLnI1MDAuZGlzcF9pbnQpKSB7CisJCQlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFsxXSkgeworCQkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDEpOworCQkJCXJkZXYtPnBtLnZibGFua19zeW5jID0gdHJ1ZTsKKwkJCQl3YWtlX3VwKCZyZGV2LT5pcnEudmJsYW5rX3F1ZXVlKTsKKwkJCX0KKwkJCWlmIChyZGV2LT5pcnEucGZsaXBbMV0pCisJCQkJcmFkZW9uX2NydGNfaGFuZGxlX2ZsaXAocmRldiwgMSk7CiAJCX0KLQkJaWYgKEdfMDA3RURDX0RDX0hPVF9QTFVHX0RFVEVDVDFfSU5URVJSVVBUKHI1MDBfZGlzcF9pbnQpKSB7CisJCWlmIChHXzAwN0VEQ19EQ19IT1RfUExVR19ERVRFQ1QxX0lOVEVSUlVQVChyZGV2LT5pcnEuc3RhdF9yZWdzLnI1MDAuZGlzcF9pbnQpKSB7CiAJCQlxdWV1ZV9ob3RwbHVnID0gdHJ1ZTsKIAkJCURSTV9ERUJVRygiSFBEMVxuIik7CiAJCX0KLQkJaWYgKEdfMDA3RURDX0RDX0hPVF9QTFVHX0RFVEVDVDJfSU5URVJSVVBUKHI1MDBfZGlzcF9pbnQpKSB7CisJCWlmIChHXzAwN0VEQ19EQ19IT1RfUExVR19ERVRFQ1QyX0lOVEVSUlVQVChyZGV2LT5pcnEuc3RhdF9yZWdzLnI1MDAuZGlzcF9pbnQpKSB7CiAJCQlxdWV1ZV9ob3RwbHVnID0gdHJ1ZTsKIAkJCURSTV9ERUJVRygiSFBEMlxuIik7CiAJCX0KLQkJc3RhdHVzID0gcnM2MDBfaXJxX2FjayhyZGV2LCAmcjUwMF9kaXNwX2ludCk7CisJCXN0YXR1cyA9IHJzNjAwX2lycV9hY2socmRldik7CiAJfQogCS8qIHJlc2V0IGd1aSBpZGxlIGFjay4gIHRoZSBzdGF0dXMgYml0IGlzIGJyb2tlbiAqLwogCXJkZXYtPmlycS5ndWlfaWRsZV9hY2tlZCA9IGZhbHNlOwogCWlmIChxdWV1ZV9ob3RwbHVnKQotCQlxdWV1ZV93b3JrKHJkZXYtPndxLCAmcmRldi0+aG90cGx1Z193b3JrKTsKKwkJc2NoZWR1bGVfd29yaygmcmRldi0+aG90cGx1Z193b3JrKTsKIAlpZiAocmRldi0+bXNpX2VuYWJsZWQpIHsKIAkJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKIAkJY2FzZSBDSElQX1JTNjAwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCmluZGV4IDRkZmVhZDguLjNhMjY0YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKQEAgLTQxLDYgKzQxLDQxIEBACiAKIHN0YXRpYyB2b2lkIHJ2NzcwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnY3NzBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitzdGF0aWMgdm9pZCBydjc3MF9wY2llX2dlbjJfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwordTMyIHJ2NzcwX3BhZ2VfZmxpcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGNfaWQsIHU2NCBjcnRjX2Jhc2UpCit7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHJkZXYtPm1vZGVfaW5mby5jcnRjc1tjcnRjX2lkXTsKKwl1MzIgdG1wID0gUlJFRzMyKEFWSVZPX0QxR1JQSF9VUERBVEUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQpOworCisJLyogTG9jayB0aGUgZ3JhcGhpY3MgdXBkYXRlIGxvY2sgKi8KKwl0bXAgfD0gQVZJVk9fRDFHUlBIX1VQREFURV9MT0NLOworCVdSRUczMihBVklWT19EMUdSUEhfVVBEQVRFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCB0bXApOworCisJLyogdXBkYXRlIHRoZSBzY2Fub3V0IGFkZHJlc3NlcyAqLworCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCkgeworCQlXUkVHMzIoRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCwgdXBwZXJfMzJfYml0cyhjcnRjX2Jhc2UpKTsKKwkJV1JFRzMyKEQyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdILCB1cHBlcl8zMl9iaXRzKGNydGNfYmFzZSkpOworCX0gZWxzZSB7CisJCVdSRUczMihEMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdILCB1cHBlcl8zMl9iaXRzKGNydGNfYmFzZSkpOworCQlXUkVHMzIoRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTX0hJR0gsIHVwcGVyXzMyX2JpdHMoY3J0Y19iYXNlKSk7CisJfQorCVdSRUczMihEMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKKwkgICAgICAgKHUzMiljcnRjX2Jhc2UpOworCVdSRUczMihEMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJICAgICAgICh1MzIpY3J0Y19iYXNlKTsKKworCS8qIFdhaXQgZm9yIHVwZGF0ZV9wZW5kaW5nIHRvIGdvIGhpZ2guICovCisJd2hpbGUgKCEoUlJFRzMyKEFWSVZPX0QxR1JQSF9VUERBVEUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQpICYgQVZJVk9fRDFHUlBIX1NVUkZBQ0VfVVBEQVRFX1BFTkRJTkcpKTsKKwlEUk1fREVCVUcoIlVwZGF0ZSBwZW5kaW5nIG5vdyBoaWdoLiBVbmxvY2tpbmcgdnVwZGF0ZV9sb2NrLlxuIik7CisKKwkvKiBVbmxvY2sgdGhlIGxvY2ssIHNvIGRvdWJsZS1idWZmZXJpbmcgY2FuIHRha2UgcGxhY2UgaW5zaWRlIHZibGFuayAqLworCXRtcCAmPSB+QVZJVk9fRDFHUlBIX1VQREFURV9MT0NLOworCVdSRUczMihBVklWT19EMUdSUEhfVVBEQVRFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCB0bXApOworCisJLyogUmV0dXJuIGN1cnJlbnQgdXBkYXRlX3BlbmRpbmcgc3RhdHVzOiAqLworCXJldHVybiBSUkVHMzIoQVZJVk9fRDFHUlBIX1VQREFURSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCkgJiBBVklWT19EMUdSUEhfU1VSRkFDRV9VUERBVEVfUEVORElORzsKK30KIAogLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlcyAqLwogdTMyIHJ2NzcwX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtNDg5LDYgKzUyNCw0OSBAQAogCXJldHVybiBiYWNrZW5kX21hcDsKIH0KIAorc3RhdGljIHZvaWQgcnY3NzBfcHJvZ3JhbV9jaGFubmVsX3JlbWFwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0Y3BfY2hhbl9zdGVlciwgbWNfc2hhcmVkX2NocmVtYXAsIHRtcDsKKwlib29sIGZvcmNlX25vX3N3aXp6bGU7CisKKwlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCWNhc2UgQ0hJUF9SVjc3MDoKKwljYXNlIENISVBfUlY3MzA6CisJCWZvcmNlX25vX3N3aXp6bGUgPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzEwOgorCWNhc2UgQ0hJUF9SVjc0MDoKKwlkZWZhdWx0OgorCQlmb3JjZV9ub19zd2l6emxlID0gdHJ1ZTsKKwkJYnJlYWs7CisJfQorCisJdG1wID0gUlJFRzMyKE1DX1NIQVJFRF9DSE1BUCk7CisJc3dpdGNoICgodG1wICYgTk9PRkNIQU5fTUFTSykgPj4gTk9PRkNIQU5fU0hJRlQpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCWRlZmF1bHQ6CisJCS8qIGRlZmF1bHQgbWFwcGluZyAqLworCQltY19zaGFyZWRfY2hyZW1hcCA9IDB4MDBmYWM2ODg7CisJCWJyZWFrOworCWNhc2UgMjoKKwljYXNlIDM6CisJCWlmIChmb3JjZV9ub19zd2l6emxlKQorCQkJbWNfc2hhcmVkX2NocmVtYXAgPSAweDAwZmFjNjg4OworCQllbHNlCisJCQltY19zaGFyZWRfY2hyZW1hcCA9IDB4MDBiYmMyOTg7CisJCWJyZWFrOworCX0KKworCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc0MCkKKwkJdGNwX2NoYW5fc3RlZXIgPSAweDAwZWYyYTYwOworCWVsc2UKKwkJdGNwX2NoYW5fc3RlZXIgPSAweDAwZmFjNjg4OworCisJV1JFRzMyKFRDUF9DSEFOX1NURUVSLCB0Y3BfY2hhbl9zdGVlcik7CisJV1JFRzMyKE1DX1NIQVJFRF9DSFJFTUFQLCBtY19zaGFyZWRfY2hyZW1hcCk7Cit9CisKIHN0YXRpYyB2b2lkIHJ2NzcwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCBpLCBqLCBudW1fcWRfcGlwZXM7CkBAIC02ODgsNiArNzY2LDggQEAKIAlXUkVHMzIoRENQX1RJTElOR19DT05GSUcsIChnYl90aWxpbmdfY29uZmlnICYgMHhmZmZmKSk7CiAJV1JFRzMyKEhEUF9USUxJTkdfQ09ORklHLCAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZikpOwogCisJcnY3NzBfcHJvZ3JhbV9jaGFubmVsX3JlbWFwKHJkZXYpOworCiAJV1JFRzMyKENDX1JCX0JBQ0tFTkRfRElTQUJMRSwgICAgICBjY19yYl9iYWNrZW5kX2Rpc2FibGUpOwogCVdSRUczMihDQ19HQ19TSEFERVJfUElQRV9DT05GSUcsICAgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnKTsKIAlXUkVHMzIoR0NfVVNFUl9TSEFERVJfUElQRV9DT05GSUcsIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyk7CkBAIC05NTYsNiArMTAzNiw0NSBAQAogCXJhZGVvbl9ib191bnJlZigmcmRldi0+dnJhbV9zY3JhdGNoLnJvYmopOwogfQogCit2b2lkIHI3MDBfdnJhbV9ndHRfbG9jYXRpb24oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fbWMgKm1jKQoreworCXU2NCBzaXplX2JmLCBzaXplX2FmOworCisJaWYgKG1jLT5tY192cmFtX3NpemUgPiAweEUwMDAwMDAwKSB7CisJCS8qIGxlYXZlIHJvb20gZm9yIGF0IGxlYXN0IDUxMk0gR1RUICovCisJCWRldl93YXJuKHJkZXYtPmRldiwgImxpbWl0aW5nIFZSQU1cbiIpOworCQltYy0+cmVhbF92cmFtX3NpemUgPSAweEUwMDAwMDAwOworCQltYy0+bWNfdnJhbV9zaXplID0gMHhFMDAwMDAwMDsKKwl9CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlzaXplX2JmID0gbWMtPmd0dF9zdGFydDsKKwkJc2l6ZV9hZiA9IDB4RkZGRkZGRkYgLSBtYy0+Z3R0X2VuZCArIDE7CisJCWlmIChzaXplX2JmID4gc2l6ZV9hZikgeworCQkJaWYgKG1jLT5tY192cmFtX3NpemUgPiBzaXplX2JmKSB7CisJCQkJZGV2X3dhcm4ocmRldi0+ZGV2LCAibGltaXRpbmcgVlJBTVxuIik7CisJCQkJbWMtPnJlYWxfdnJhbV9zaXplID0gc2l6ZV9iZjsKKwkJCQltYy0+bWNfdnJhbV9zaXplID0gc2l6ZV9iZjsKKwkJCX0KKwkJCW1jLT52cmFtX3N0YXJ0ID0gbWMtPmd0dF9zdGFydCAtIG1jLT5tY192cmFtX3NpemU7CisJCX0gZWxzZSB7CisJCQlpZiAobWMtPm1jX3ZyYW1fc2l6ZSA+IHNpemVfYWYpIHsKKwkJCQlkZXZfd2FybihyZGV2LT5kZXYsICJsaW1pdGluZyBWUkFNXG4iKTsKKwkJCQltYy0+cmVhbF92cmFtX3NpemUgPSBzaXplX2FmOworCQkJCW1jLT5tY192cmFtX3NpemUgPSBzaXplX2FmOworCQkJfQorCQkJbWMtPnZyYW1fc3RhcnQgPSBtYy0+Z3R0X2VuZDsKKwkJfQorCQltYy0+dnJhbV9lbmQgPSBtYy0+dnJhbV9zdGFydCArIG1jLT5tY192cmFtX3NpemUgLSAxOworCQlkZXZfaW5mbyhyZGV2LT5kZXYsICJWUkFNOiAlbGx1TSAweCUwOGxsWCAtIDB4JTA4bGxYICglbGx1TSB1c2VkKVxuIiwKKwkJCQltYy0+bWNfdnJhbV9zaXplID4+IDIwLCBtYy0+dnJhbV9zdGFydCwKKwkJCQltYy0+dnJhbV9lbmQsIG1jLT5yZWFsX3ZyYW1fc2l6ZSA+PiAyMCk7CisJfSBlbHNlIHsKKwkJcmFkZW9uX3ZyYW1fbG9jYXRpb24ocmRldiwgJnJkZXYtPm1jLCAwKTsKKwkJcmRldi0+bWMuZ3R0X2Jhc2VfYWxpZ24gPSAwOworCQlyYWRlb25fZ3R0X2xvY2F0aW9uKHJkZXYsIG1jKTsKKwl9Cit9CisKIGludCBydjc3MF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiB0bXA7CkBAIC05OTYsNyArMTExNSw3IEBACiAJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOwogCXJkZXYtPm1jLnZpc2libGVfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOwogCXJkZXYtPm1jLmFjdGl2ZV92cmFtX3NpemUgPSByZGV2LT5tYy52aXNpYmxlX3ZyYW1fc2l6ZTsKLQlyNjAwX3ZyYW1fZ3R0X2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYyk7CisJcjcwMF92cmFtX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOwogCXJhZGVvbl91cGRhdGVfYmFuZHdpZHRoX2luZm8ocmRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTEwMDYsNiArMTEyNSw5IEBACiB7CiAJaW50IHI7CiAKKwkvKiBlbmFibGUgcGNpZSBnZW4yIGxpbmsgKi8KKwlydjc3MF9wY2llX2dlbjJfZW5hYmxlKHJkZXYpOworCiAJaWYgKCFyZGV2LT5tZV9mdyB8fCAhcmRldi0+cGZwX2Z3IHx8ICFyZGV2LT5ybGNfZncpIHsKIAkJciA9IHI2MDBfaW5pdF9taWNyb2NvZGUocmRldik7CiAJCWlmIChyKSB7CkBAIC0xMjQ0LDMgKzEzNjYsNzUgQEAKIAlyZGV2LT5iaW9zID0gTlVMTDsKIAlyYWRlb25fZHVtbXlfcGFnZV9maW5pKHJkZXYpOwogfQorCitzdGF0aWMgdm9pZCBydjc3MF9wY2llX2dlbjJfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiBsaW5rX3dpZHRoX2NudGwsIGxhbmVzLCBzcGVlZF9jbnRsLCB0bXA7CisJdTE2IGxpbmtfY250bDI7CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKQorCQlyZXR1cm47CisKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSkKKwkJcmV0dXJuOworCisJLyogeDIgY2FyZHMgaGF2ZSBhIHNwZWNpYWwgc2VxdWVuY2UgKi8KKwlpZiAoQVNJQ19JU19YMihyZGV2KSkKKwkJcmV0dXJuOworCisJLyogYWR2ZXJ0aXNlIHVwY29uZmlnIGNhcGFiaWxpdHkgKi8KKwlsaW5rX3dpZHRoX2NudGwgPSBSUkVHMzJfUENJRV9QKFBDSUVfTENfTElOS19XSURUSF9DTlRMKTsKKwlsaW5rX3dpZHRoX2NudGwgJj0gfkxDX1VQQ09ORklHVVJFX0RJUzsKKwlXUkVHMzJfUENJRV9QKFBDSUVfTENfTElOS19XSURUSF9DTlRMLCBsaW5rX3dpZHRoX2NudGwpOworCWxpbmtfd2lkdGhfY250bCA9IFJSRUczMl9QQ0lFX1AoUENJRV9MQ19MSU5LX1dJRFRIX0NOVEwpOworCWlmIChsaW5rX3dpZHRoX2NudGwgJiBMQ19SRU5FR09USUFUSU9OX1NVUFBPUlQpIHsKKwkJbGFuZXMgPSAobGlua193aWR0aF9jbnRsICYgTENfTElOS19XSURUSF9SRF9NQVNLKSA+PiBMQ19MSU5LX1dJRFRIX1JEX1NISUZUOworCQlsaW5rX3dpZHRoX2NudGwgJj0gfihMQ19MSU5LX1dJRFRIX01BU0sgfAorCQkJCSAgICAgTENfUkVDT05GSUdfQVJDX01JU1NJTkdfRVNDQVBFKTsKKwkJbGlua193aWR0aF9jbnRsIHw9IGxhbmVzIHwgTENfUkVDT05GSUdfTk9XIHwKKwkJCUxDX1JFTkVHT1RJQVRFX0VOIHwgTENfVVBDT05GSUdVUkVfU1VQUE9SVDsKKwkJV1JFRzMyX1BDSUVfUChQQ0lFX0xDX0xJTktfV0lEVEhfQ05UTCwgbGlua193aWR0aF9jbnRsKTsKKwl9IGVsc2UgeworCQlsaW5rX3dpZHRoX2NudGwgfD0gTENfVVBDT05GSUdVUkVfRElTOworCQlXUkVHMzJfUENJRV9QKFBDSUVfTENfTElOS19XSURUSF9DTlRMLCBsaW5rX3dpZHRoX2NudGwpOworCX0KKworCXNwZWVkX2NudGwgPSBSUkVHMzJfUENJRV9QKFBDSUVfTENfU1BFRURfQ05UTCk7CisJaWYgKChzcGVlZF9jbnRsICYgTENfT1RIRVJfU0lERV9FVkVSX1NFTlRfR0VOMikgJiYKKwkgICAgKHNwZWVkX2NudGwgJiBMQ19PVEhFUl9TSURFX1NVUFBPUlRTX0dFTjIpKSB7CisKKwkJdG1wID0gUlJFRzMyKDB4NTQxYyk7CisJCVdSRUczMigweDU0MWMsIHRtcCB8IDB4OCk7CisJCVdSRUczMihNTV9DRkdSRUdTX0NOVEwsIE1NX1dSX1RPX0NGR19FTik7CisJCWxpbmtfY250bDIgPSBSUkVHMTYoMHg0MDg4KTsKKwkJbGlua19jbnRsMiAmPSB+VEFSR0VUX0xJTktfU1BFRURfTUFTSzsKKwkJbGlua19jbnRsMiB8PSAweDI7CisJCVdSRUcxNigweDQwODgsIGxpbmtfY250bDIpOworCQlXUkVHMzIoTU1fQ0ZHUkVHU19DTlRMLCAwKTsKKworCQlzcGVlZF9jbnRsID0gUlJFRzMyX1BDSUVfUChQQ0lFX0xDX1NQRUVEX0NOVEwpOworCQlzcGVlZF9jbnRsICY9IH5MQ19UQVJHRVRfTElOS19TUEVFRF9PVkVSUklERV9FTjsKKwkJV1JFRzMyX1BDSUVfUChQQ0lFX0xDX1NQRUVEX0NOVEwsIHNwZWVkX2NudGwpOworCisJCXNwZWVkX2NudGwgPSBSUkVHMzJfUENJRV9QKFBDSUVfTENfU1BFRURfQ05UTCk7CisJCXNwZWVkX2NudGwgfD0gTENfQ0xSX0ZBSUxFRF9TUERfQ0hBTkdFX0NOVDsKKwkJV1JFRzMyX1BDSUVfUChQQ0lFX0xDX1NQRUVEX0NOVEwsIHNwZWVkX2NudGwpOworCisJCXNwZWVkX2NudGwgPSBSUkVHMzJfUENJRV9QKFBDSUVfTENfU1BFRURfQ05UTCk7CisJCXNwZWVkX2NudGwgJj0gfkxDX0NMUl9GQUlMRURfU1BEX0NIQU5HRV9DTlQ7CisJCVdSRUczMl9QQ0lFX1AoUENJRV9MQ19TUEVFRF9DTlRMLCBzcGVlZF9jbnRsKTsKKworCQlzcGVlZF9jbnRsID0gUlJFRzMyX1BDSUVfUChQQ0lFX0xDX1NQRUVEX0NOVEwpOworCQlzcGVlZF9jbnRsIHw9IExDX0dFTjJfRU5fU1RSQVA7CisJCVdSRUczMl9QQ0lFX1AoUENJRV9MQ19TUEVFRF9DTlRMLCBzcGVlZF9jbnRsKTsKKworCX0gZWxzZSB7CisJCWxpbmtfd2lkdGhfY250bCA9IFJSRUczMl9QQ0lFX1AoUENJRV9MQ19MSU5LX1dJRFRIX0NOVEwpOworCQkvKiBYWFg6IG9ubHkgZGlzYWJsZSBpdCBpZiBnZW4xIGJyaWRnZSB2ZW5kb3IgPT0gMHgxMTFkIG9yIDB4MTEwNiAqLworCQlpZiAoMSkKKwkJCWxpbmtfd2lkdGhfY250bCB8PSBMQ19VUENPTkZJR1VSRV9ESVM7CisJCWVsc2UKKwkJCWxpbmtfd2lkdGhfY250bCAmPSB+TENfVVBDT05GSUdVUkVfRElTOworCQlXUkVHMzJfUENJRV9QKFBDSUVfTENfTElOS19XSURUSF9DTlRMLCBsaW5rX3dpZHRoX2NudGwpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oCmluZGV4IGI3YTVhMjAuLmFiYzhjZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaApAQCAtMTM4LDYgKzEzOCw3IEBACiAjZGVmaW5lIE1DX1NIQVJFRF9DSE1BUAkJCQkJCTB4MjAwNAogI2RlZmluZQkJTk9PRkNIQU5fU0hJRlQJCQkJCTEyCiAjZGVmaW5lCQlOT09GQ0hBTl9NQVNLCQkJCQkweDAwMDAzMDAwCisjZGVmaW5lIE1DX1NIQVJFRF9DSFJFTUFQCQkJCQkweDIwMDgKIAogI2RlZmluZQlNQ19BUkJfUkFNQ0ZHCQkJCQkweDI3NjAKICNkZWZpbmUJCU5PT0ZCQU5LX1NISUZUCQkJCQkwCkBAIC0zMDMsNiArMzA0LDcgQEAKICNkZWZpbmUJCUJJTElORUFSX1BSRUNJU0lPTl84X0JJVAkJCSgxIDw8IDMxKQogCiAjZGVmaW5lCVRDUF9DTlRMCQkJCQkweDk2MTAKKyNkZWZpbmUJVENQX0NIQU5fU1RFRVIJCQkJCTB4OTYxNAogCiAjZGVmaW5lCVZHVF9DQUNIRV9JTlZBTElEQVRJT04JCQkJMHg4OEM0CiAjZGVmaW5lCQlDQUNIRV9JTlZBTElEQVRJT04oeCkJCQkJKCh4KTw8MCkKQEAgLTM1MSw0ICszNTMsNDkgQEAKIAogI2RlZmluZQlTUkJNX1NUQVRVUwkJCQkgICAgICAgIDB4MEU1MAogCisjZGVmaW5lIEQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHg2MTEwCisjZGVmaW5lIEQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgICAgICAgMHg2OTE0CisjZGVmaW5lIEQyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgICAgICAgMHg2MTE0CisjZGVmaW5lIEQxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICAgICAgICAgICAgICAgICAgMHg2MTE4CisjZGVmaW5lIEQxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAgICAgMHg2OTFjCisjZGVmaW5lIEQyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAgICAgMHg2MTFjCisKKy8qIFBDSUUgbGluayBzdHVmZiAqLworI2RlZmluZSBQQ0lFX0xDX1RSQUlOSU5HX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YTEgLyogUENJRV9QICovCisjZGVmaW5lIFBDSUVfTENfTElOS19XSURUSF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMiAvKiBQQ0lFX1AgKi8KKyMgICAgICAgZGVmaW5lIExDX0xJTktfV0lEVEhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCisjICAgICAgIGRlZmluZSBMQ19MSU5LX1dJRFRIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHg3CisjICAgICAgIGRlZmluZSBMQ19MSU5LX1dJRFRIX1gwICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgTENfTElOS19XSURUSF9YMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyMgICAgICAgZGVmaW5lIExDX0xJTktfV0lEVEhfWDIgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBMQ19MSU5LX1dJRFRIX1g0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMworIyAgICAgICBkZWZpbmUgTENfTElOS19XSURUSF9YOCAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyMgICAgICAgZGVmaW5lIExDX0xJTktfV0lEVEhfWDE2ICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjICAgICAgIGRlZmluZSBMQ19MSU5LX1dJRFRIX1JEX1NISUZUICAgICAgICAgICAgICAgICAgICAgNAorIyAgICAgICBkZWZpbmUgTENfTElOS19XSURUSF9SRF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4NzAKKyMgICAgICAgZGVmaW5lIExDX1JFQ09ORklHX0FSQ19NSVNTSU5HX0VTQ0FQRSAgICAgICAgICAgICAoMSA8PCA3KQorIyAgICAgICBkZWZpbmUgTENfUkVDT05GSUdfTk9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCisjICAgICAgIGRlZmluZSBMQ19SRU5FR09USUFUSU9OX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyMgICAgICAgZGVmaW5lIExDX1JFTkVHT1RJQVRFX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKKyMgICAgICAgZGVmaW5lIExDX1NIT1JUX1JFQ09ORklHX0VOICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKKyMgICAgICAgZGVmaW5lIExDX1VQQ09ORklHVVJFX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKKyMgICAgICAgZGVmaW5lIExDX1VQQ09ORklHVVJFX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMykKKyNkZWZpbmUgUENJRV9MQ19TUEVFRF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGE0IC8qIFBDSUVfUCAqLworIyAgICAgICBkZWZpbmUgTENfR0VOMl9FTl9TVFJBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBMQ19UQVJHRVRfTElOS19TUEVFRF9PVkVSUklERV9FTiAgICAgICAgICAgKDEgPDwgMSkKKyMgICAgICAgZGVmaW5lIExDX0ZPUkNFX0VOX0hXX1NQRUVEX0NIQU5HRSAgICAgICAgICAgICAgICAoMSA8PCA1KQorIyAgICAgICBkZWZpbmUgTENfRk9SQ0VfRElTX0hXX1NQRUVEX0NIQU5HRSAgICAgICAgICAgICAgICgxIDw8IDYpCisjICAgICAgIGRlZmluZSBMQ19TUEVFRF9DSEFOR0VfQVRURU1QVFNfQUxMT1dFRF9NQVNLICAgICAgKDB4MyA8PCA4KQorIyAgICAgICBkZWZpbmUgTENfU1BFRURfQ0hBTkdFX0FUVEVNUFRTX0FMTE9XRURfU0hJRlQgICAgIDMKKyMgICAgICAgZGVmaW5lIExDX0NVUlJFTlRfREFUQV9SQVRFICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKKyMgICAgICAgZGVmaW5lIExDX1ZPTFRBR0VfVElNRVJfU0VMX01BU0sgICAgICAgICAgICAgICAgICAoMHhmIDw8IDE0KQorIyAgICAgICBkZWZpbmUgTENfQ0xSX0ZBSUxFRF9TUERfQ0hBTkdFX0NOVCAgICAgICAgICAgICAgICgxIDw8IDIxKQorIyAgICAgICBkZWZpbmUgTENfT1RIRVJfU0lERV9FVkVSX1NFTlRfR0VOMiAgICAgICAgICAgICAgICgxIDw8IDIzKQorIyAgICAgICBkZWZpbmUgTENfT1RIRVJfU0lERV9TVVBQT1JUU19HRU4yICAgICAgICAgICAgICAgICgxIDw8IDI0KQorI2RlZmluZSBNTV9DRkdSRUdTX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTQ0YworIyAgICAgICBkZWZpbmUgTU1fV1JfVE9fQ0ZHX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIExJTktfQ05UTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OCAvKiBGMCAqLworIyAgICAgICBkZWZpbmUgVEFSR0VUX0xJTktfU1BFRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweGYgPDwgMCkKKyMgICAgICAgZGVmaW5lIFNFTEVDVEFCTEVfREVFTVBIQVNJUyAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCmluZGV4IDkzNGE5NmEuLmFmNjFmYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwpAQCAtMTY5LDcgKzE2OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHR0bV9ib193YWl0X3VucmVzZXJ2ZWQpOwogCi1zdGF0aWMgdm9pZCB0dG1fYm9fYWRkX3RvX2xydShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQordm9pZCB0dG1fYm9fYWRkX3RvX2xydShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQogewogCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYm8tPmJkZXY7CiAJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW47CkBAIC0xOTEsMTEgKzE5MSw3IEBACiAJfQogfQogCi0vKioKLSAqIENhbGwgd2l0aCB0aGUgbHJ1X2xvY2sgaGVsZC4KLSAqLwotCi1zdGF0aWMgaW50IHR0bV9ib19kZWxfZnJvbV9scnUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKK2ludCB0dG1fYm9fZGVsX2Zyb21fbHJ1KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCiB7CiAJaW50IHB1dF9jb3VudCA9IDA7CiAKQEAgLTIyNyw5ICsyMjMsMTggQEAKIAkJLyoqCiAJCSAqIERlYWRsb2NrIGF2b2lkYW5jZSBmb3IgbXVsdGktYm8gcmVzZXJ2aW5nLgogCQkgKi8KLQkJaWYgKHVzZV9zZXF1ZW5jZSAmJiBiby0+c2VxX3ZhbGlkICYmCi0JCQkoc2VxdWVuY2UgLSBiby0+dmFsX3NlcSA8ICgxIDw8IDMxKSkpIHsKLQkJCXJldHVybiAtRUFHQUlOOworCQlpZiAodXNlX3NlcXVlbmNlICYmIGJvLT5zZXFfdmFsaWQpIHsKKwkJCS8qKgorCQkJICogV2UndmUgYWxyZWFkeSByZXNlcnZlZCB0aGlzIG9uZS4KKwkJCSAqLworCQkJaWYgKHVubGlrZWx5KHNlcXVlbmNlID09IGJvLT52YWxfc2VxKSkKKwkJCQlyZXR1cm4gLUVERUFETEs7CisJCQkvKioKKwkJCSAqIEFscmVhZHkgcmVzZXJ2ZWQgYnkgYSB0aHJlYWQgdGhhdCB3aWxsIG5vdCBiYWNrCisJCQkgKiBvZmYgZm9yIHVzLiBXZSBuZWVkIHRvIGJhY2sgb2ZmLgorCQkJICovCisJCQlpZiAodW5saWtlbHkoc2VxdWVuY2UgLSBiby0+dmFsX3NlcSA8ICgxIDw8IDMxKSkpCisJCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAogCQlpZiAobm9fd2FpdCkKQEAgLTI2Nyw2ICsyNzIsMTMgQEAKIAlCVUcoKTsKIH0KIAordm9pZCB0dG1fYm9fbGlzdF9yZWZfc3ViKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sIGludCBjb3VudCwKKwkJCSBib29sIG5ldmVyX2ZyZWUpCit7CisJa3JlZl9zdWIoJmJvLT5saXN0X2tyZWYsIGNvdW50LAorCQkgKG5ldmVyX2ZyZWUpID8gdHRtX2JvX3JlZl9idWcgOiB0dG1fYm9fcmVsZWFzZV9saXN0KTsKK30KKwogaW50IHR0bV9ib19yZXNlcnZlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCiAJCSAgIGJvb2wgaW50ZXJydXB0aWJsZSwKIAkJICAgYm9vbCBub193YWl0LCBib29sIHVzZV9zZXF1ZW5jZSwgdWludDMyX3Qgc2VxdWVuY2UpCkBAIC0yODIsMjAgKzI5NCwyNCBAQAogCQlwdXRfY291bnQgPSB0dG1fYm9fZGVsX2Zyb21fbHJ1KGJvKTsKIAlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCi0Jd2hpbGUgKHB1dF9jb3VudC0tKQotCQlrcmVmX3B1dCgmYm8tPmxpc3Rfa3JlZiwgdHRtX2JvX3JlZl9idWcpOworCXR0bV9ib19saXN0X3JlZl9zdWIoYm8sIHB1dF9jb3VudCwgdHJ1ZSk7CiAKIAlyZXR1cm4gcmV0OwogfQogCit2b2lkIHR0bV9ib191bnJlc2VydmVfbG9ja2VkKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCit7CisJdHRtX2JvX2FkZF90b19scnUoYm8pOworCWF0b21pY19zZXQoJmJvLT5yZXNlcnZlZCwgMCk7CisJd2FrZV91cF9hbGwoJmJvLT5ldmVudF9xdWV1ZSk7Cit9CisKIHZvaWQgdHRtX2JvX3VucmVzZXJ2ZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQogewogCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gYm8tPmdsb2I7CiAKIAlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKLQl0dG1fYm9fYWRkX3RvX2xydShibyk7Ci0JYXRvbWljX3NldCgmYm8tPnJlc2VydmVkLCAwKTsKLQl3YWtlX3VwX2FsbCgmYm8tPmV2ZW50X3F1ZXVlKTsKKwl0dG1fYm9fdW5yZXNlcnZlX2xvY2tlZChibyk7CiAJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0wodHRtX2JvX3VucmVzZXJ2ZSk7CkBAIC0zNjIsOCArMzc4LDEzIEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAob2xkX2lzX3BjaSB8fCBuZXdfaXNfcGNpIHx8Ci0JICAgICgobWVtLT5wbGFjZW1lbnQgJiBiby0+bWVtLnBsYWNlbWVudCAmIFRUTV9QTF9NQVNLX0NBQ0hJTkcpID09IDApKQotCQl0dG1fYm9fdW5tYXBfdmlydHVhbChibyk7CisJICAgICgobWVtLT5wbGFjZW1lbnQgJiBiby0+bWVtLnBsYWNlbWVudCAmIFRUTV9QTF9NQVNLX0NBQ0hJTkcpID09IDApKSB7CisJCXJldCA9IHR0bV9tZW1faW9fbG9jayhvbGRfbWFuLCB0cnVlKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCWdvdG8gb3V0X2VycjsKKwkJdHRtX2JvX3VubWFwX3ZpcnR1YWxfbG9ja2VkKGJvKTsKKwkJdHRtX21lbV9pb191bmxvY2sob2xkX21hbik7CisJfQogCiAJLyoKIAkgKiBDcmVhdGUgYW5kIGJpbmQgYSB0dG0gaWYgcmVxdWlyZWQuCkBAIC00MTYsMTEgKzQzNyw5IEBACiAJfQogCiAJaWYgKGJvLT5tZW0ubW1fbm9kZSkgewotCQlzcGluX2xvY2soJmJvLT5sb2NrKTsKIAkJYm8tPm9mZnNldCA9IChiby0+bWVtLnN0YXJ0IDw8IFBBR0VfU0hJRlQpICsKIAkJICAgIGJkZXYtPm1hbltiby0+bWVtLm1lbV90eXBlXS5ncHVfb2Zmc2V0OwogCQliby0+Y3VyX3BsYWNlbWVudCA9IGJvLT5tZW0ucGxhY2VtZW50OwotCQlzcGluX3VubG9jaygmYm8tPmxvY2spOwogCX0gZWxzZQogCQliby0+b2Zmc2V0ID0gMDsKIApAQCAtNDUyLDcgKzQ3MSw2IEBACiAJCXR0bV90dF9kZXN0cm95KGJvLT50dG0pOwogCQliby0+dHRtID0gTlVMTDsKIAl9Ci0KIAl0dG1fYm9fbWVtX3B1dChibywgJmJvLT5tZW0pOwogCiAJYXRvbWljX3NldCgmYm8tPnJlc2VydmVkLCAwKTsKQEAgLTQ3NCwxNCArNDkyLDE0IEBACiAJaW50IHB1dF9jb3VudDsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrKCZiby0+bG9jayk7CisJc3Bpbl9sb2NrKCZiZGV2LT5mZW5jZV9sb2NrKTsKIAkodm9pZCkgdHRtX2JvX3dhaXQoYm8sIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CiAJaWYgKCFiby0+c3luY19vYmopIHsKIAogCQlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAogCQkvKioKLQkJICogTG9jayBpbnZlcnNpb24gYmV0d2VlbiBibzo6cmVzZXJ2ZSBhbmQgYm86OmxvY2sgaGVyZSwKKwkJICogTG9jayBpbnZlcnNpb24gYmV0d2VlbiBibzpyZXNlcnZlIGFuZCBiZGV2OjpmZW5jZV9sb2NrIGhlcmUsCiAJCSAqIGJ1dCB0aGF0J3MgT0ssIHNpbmNlIHdlJ3JlIG9ubHkgdHJ5bG9ja2luZy4KIAkJICovCiAKQEAgLTQ5MCwxNCArNTA4LDEzIEBACiAJCWlmICh1bmxpa2VseShyZXQgPT0gLUVCVVNZKSkKIAkJCWdvdG8gcXVldWU7CiAKLQkJc3Bpbl91bmxvY2soJmJvLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmJkZXYtPmZlbmNlX2xvY2spOwogCQlwdXRfY291bnQgPSB0dG1fYm9fZGVsX2Zyb21fbHJ1KGJvKTsKIAogCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQl0dG1fYm9fY2xlYW51cF9tZW10eXBlX3VzZShibyk7CiAKLQkJd2hpbGUgKHB1dF9jb3VudC0tKQotCQkJa3JlZl9wdXQoJmJvLT5saXN0X2tyZWYsIHR0bV9ib19yZWZfYnVnKTsKKwkJdHRtX2JvX2xpc3RfcmVmX3N1YihibywgcHV0X2NvdW50LCB0cnVlKTsKIAogCQlyZXR1cm47CiAJfSBlbHNlIHsKQEAgLTUxMiw3ICs1MjksNyBAQAogCWtyZWZfZ2V0KCZiby0+bGlzdF9rcmVmKTsKIAlsaXN0X2FkZF90YWlsKCZiby0+ZGRlc3Ryb3ksICZiZGV2LT5kZGVzdHJveSk7CiAJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKLQlzcGluX3VubG9jaygmYm8tPmxvY2spOworCXNwaW5fdW5sb2NrKCZiZGV2LT5mZW5jZV9sb2NrKTsKIAogCWlmIChzeW5jX29iaikgewogCQlkcml2ZXItPnN5bmNfb2JqX2ZsdXNoKHN5bmNfb2JqLCBzeW5jX29ial9hcmcpOwpAQCAtNTM3LDE0ICs1NTQsMTUgQEAKIAkJCSAgICAgICBib29sIG5vX3dhaXRfcmVzZXJ2ZSwKIAkJCSAgICAgICBib29sIG5vX3dhaXRfZ3B1KQogeworCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYm8tPmJkZXY7CiAJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiby0+Z2xvYjsKIAlpbnQgcHV0X2NvdW50OwogCWludCByZXQgPSAwOwogCiByZXRyeToKLQlzcGluX2xvY2soJmJvLT5sb2NrKTsKKwlzcGluX2xvY2soJmJkZXYtPmZlbmNlX2xvY2spOwogCXJldCA9IHR0bV9ib193YWl0KGJvLCBmYWxzZSwgaW50ZXJydXB0aWJsZSwgbm9fd2FpdF9ncHUpOwotCXNwaW5fdW5sb2NrKCZiby0+bG9jayk7CisJc3Bpbl91bmxvY2soJmJkZXYtPmZlbmNlX2xvY2spOwogCiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJcmV0dXJuIHJldDsKQEAgLTU4MCw4ICs1OTgsNyBAQAogCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJdHRtX2JvX2NsZWFudXBfbWVtdHlwZV91c2UoYm8pOwogCi0Jd2hpbGUgKHB1dF9jb3VudC0tKQotCQlrcmVmX3B1dCgmYm8tPmxpc3Rfa3JlZiwgdHRtX2JvX3JlZl9idWcpOworCXR0bV9ib19saXN0X3JlZl9zdWIoYm8sIHB1dF9jb3VudCwgdHJ1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY1Miw2ICs2NjksNyBAQAogCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8gPQogCSAgICBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0LCBrcmVmKTsKIAlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9IGJvLT5iZGV2OworCXN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuID0gJmJkZXYtPm1hbltiby0+bWVtLm1lbV90eXBlXTsKIAogCWlmIChsaWtlbHkoYm8tPnZtX25vZGUgIT0gTlVMTCkpIHsKIAkJcmJfZXJhc2UoJmJvLT52bV9yYiwgJmJkZXYtPmFkZHJfc3BhY2VfcmIpOwpAQCAtNjU5LDYgKzY3Nyw5IEBACiAJCWJvLT52bV9ub2RlID0gTlVMTDsKIAl9CiAJd3JpdGVfdW5sb2NrKCZiZGV2LT52bV9sb2NrKTsKKwl0dG1fbWVtX2lvX2xvY2sobWFuLCBmYWxzZSk7CisJdHRtX21lbV9pb19mcmVlX3ZtKGJvKTsKKwl0dG1fbWVtX2lvX3VubG9jayhtYW4pOwogCXR0bV9ib19jbGVhbnVwX3JlZnNfb3JfcXVldWUoYm8pOwogCWtyZWZfcHV0KCZiby0+bGlzdF9rcmVmLCB0dG1fYm9fcmVsZWFzZV9saXN0KTsKIAl3cml0ZV9sb2NrKCZiZGV2LT52bV9sb2NrKTsKQEAgLTY5OCw5ICs3MTksOSBAQAogCXN0cnVjdCB0dG1fcGxhY2VtZW50IHBsYWNlbWVudDsKIAlpbnQgcmV0ID0gMDsKIAotCXNwaW5fbG9jaygmYm8tPmxvY2spOworCXNwaW5fbG9jaygmYmRldi0+ZmVuY2VfbG9jayk7CiAJcmV0ID0gdHRtX2JvX3dhaXQoYm8sIGZhbHNlLCBpbnRlcnJ1cHRpYmxlLCBub193YWl0X2dwdSk7Ci0Jc3Bpbl91bmxvY2soJmJvLT5sb2NrKTsKKwlzcGluX3VubG9jaygmYmRldi0+ZmVuY2VfbG9jayk7CiAKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CiAJCWlmIChyZXQgIT0gLUVSRVNUQVJUU1lTKSB7CkBAIC03MTUsNyArNzM2LDggQEAKIAogCWV2aWN0X21lbSA9IGJvLT5tZW07CiAJZXZpY3RfbWVtLm1tX25vZGUgPSBOVUxMOwotCWV2aWN0X21lbS5idXMuaW9fcmVzZXJ2ZWQgPSBmYWxzZTsKKwlldmljdF9tZW0uYnVzLmlvX3Jlc2VydmVkX3ZtID0gZmFsc2U7CisJZXZpY3RfbWVtLmJ1cy5pb19yZXNlcnZlZF9jb3VudCA9IDA7CiAKIAlwbGFjZW1lbnQuZnBmbiA9IDA7CiAJcGxhY2VtZW50LmxwZm4gPSAwOwpAQCAtODAyLDggKzgyNCw3IEBACiAKIAlCVUdfT04ocmV0ICE9IDApOwogCi0Jd2hpbGUgKHB1dF9jb3VudC0tKQotCQlrcmVmX3B1dCgmYm8tPmxpc3Rfa3JlZiwgdHRtX2JvX3JlZl9idWcpOworCXR0bV9ib19saXN0X3JlZl9zdWIoYm8sIHB1dF9jb3VudCwgdHJ1ZSk7CiAKIAlyZXQgPSB0dG1fYm9fZXZpY3QoYm8sIGludGVycnVwdGlibGUsIG5vX3dhaXRfcmVzZXJ2ZSwgbm9fd2FpdF9ncHUpOwogCXR0bV9ib191bnJlc2VydmUoYm8pOwpAQCAtMTAzNiw2ICsxMDU3LDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgdHRtX21lbV9yZWcgbWVtOworCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYm8tPmJkZXY7CiAKIAlCVUdfT04oIWF0b21pY19yZWFkKCZiby0+cmVzZXJ2ZWQpKTsKIApAQCAtMTA0NCwxNSArMTA2NiwxNiBAQAogCSAqIEhhdmUgdGhlIGRyaXZlciBtb3ZlIGZ1bmN0aW9uIHdhaXQgZm9yIGlkbGUgd2hlbiBuZWNlc3NhcnksCiAJICogaW5zdGVhZCBvZiBkb2luZyBpdCBoZXJlLgogCSAqLwotCXNwaW5fbG9jaygmYm8tPmxvY2spOworCXNwaW5fbG9jaygmYmRldi0+ZmVuY2VfbG9jayk7CiAJcmV0ID0gdHRtX2JvX3dhaXQoYm8sIGZhbHNlLCBpbnRlcnJ1cHRpYmxlLCBub193YWl0X2dwdSk7Ci0Jc3Bpbl91bmxvY2soJmJvLT5sb2NrKTsKKwlzcGluX3VubG9jaygmYmRldi0+ZmVuY2VfbG9jayk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAltZW0ubnVtX3BhZ2VzID0gYm8tPm51bV9wYWdlczsKIAltZW0uc2l6ZSA9IG1lbS5udW1fcGFnZXMgPDwgUEFHRV9TSElGVDsKIAltZW0ucGFnZV9hbGlnbm1lbnQgPSBiby0+bWVtLnBhZ2VfYWxpZ25tZW50OwotCW1lbS5idXMuaW9fcmVzZXJ2ZWQgPSBmYWxzZTsKKwltZW0uYnVzLmlvX3Jlc2VydmVkX3ZtID0gZmFsc2U7CisJbWVtLmJ1cy5pb19yZXNlcnZlZF9jb3VudCA9IDA7CiAJLyoKIAkgKiBEZXRlcm1pbmUgd2hlcmUgdG8gbW92ZSB0aGUgYnVmZmVyLgogCSAqLwpAQCAtMTE2Myw3ICsxMTg2LDYgQEAKIAl9CiAJYm8tPmRlc3Ryb3kgPSBkZXN0cm95OwogCi0Jc3Bpbl9sb2NrX2luaXQoJmJvLT5sb2NrKTsKIAlrcmVmX2luaXQoJmJvLT5rcmVmKTsKIAlrcmVmX2luaXQoJmJvLT5saXN0X2tyZWYpOwogCWF0b21pY19zZXQoJmJvLT5jcHVfd3JpdGVycywgMCk7CkBAIC0xMTcyLDYgKzExOTQsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZiby0+bHJ1KTsKIAlJTklUX0xJU1RfSEVBRCgmYm8tPmRkZXN0cm95KTsKIAlJTklUX0xJU1RfSEVBRCgmYm8tPnN3YXApOworCUlOSVRfTElTVF9IRUFEKCZiby0+aW9fcmVzZXJ2ZV9scnUpOwogCWJvLT5iZGV2ID0gYmRldjsKIAliby0+Z2xvYiA9IGJkZXYtPmdsb2I7CiAJYm8tPnR5cGUgPSB0eXBlOwpAQCAtMTE4MSw3ICsxMjA0LDggQEAKIAliby0+bWVtLm51bV9wYWdlcyA9IGJvLT5udW1fcGFnZXM7CiAJYm8tPm1lbS5tbV9ub2RlID0gTlVMTDsKIAliby0+bWVtLnBhZ2VfYWxpZ25tZW50ID0gcGFnZV9hbGlnbm1lbnQ7Ci0JYm8tPm1lbS5idXMuaW9fcmVzZXJ2ZWQgPSBmYWxzZTsKKwliby0+bWVtLmJ1cy5pb19yZXNlcnZlZF92bSA9IGZhbHNlOworCWJvLT5tZW0uYnVzLmlvX3Jlc2VydmVkX2NvdW50ID0gMDsKIAliby0+YnVmZmVyX3N0YXJ0ID0gYnVmZmVyX3N0YXJ0ICYgUEFHRV9NQVNLOwogCWJvLT5wcml2X2ZsYWdzID0gMDsKIAliby0+bWVtLnBsYWNlbWVudCA9IChUVE1fUExfRkxBR19TWVNURU0gfCBUVE1fUExfRkxBR19DQUNIRUQpOwpAQCAtMTM1NSw2ICsxMzc5LDEwIEBACiAJQlVHX09OKHR5cGUgPj0gVFRNX05VTV9NRU1fVFlQRVMpOwogCW1hbiA9ICZiZGV2LT5tYW5bdHlwZV07CiAJQlVHX09OKG1hbi0+aGFzX3R5cGUpOworCW1hbi0+aW9fcmVzZXJ2ZV9mYXN0cGF0aCA9IHRydWU7CisJbWFuLT51c2VfaW9fcmVzZXJ2ZV9scnUgPSBmYWxzZTsKKwltdXRleF9pbml0KCZtYW4tPmlvX3Jlc2VydmVfbXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZtYW4tPmlvX3Jlc2VydmVfbHJ1KTsKIAogCXJldCA9IGJkZXYtPmRyaXZlci0+aW5pdF9tZW1fdHlwZShiZGV2LCB0eXBlLCBtYW4pOwogCWlmIChyZXQpCkBAIC0xNTI2LDcgKzE1NTQsOCBAQAogCWJkZXYtPmRldl9tYXBwaW5nID0gTlVMTDsKIAliZGV2LT5nbG9iID0gZ2xvYjsKIAliZGV2LT5uZWVkX2RtYTMyID0gbmVlZF9kbWEzMjsKLQorCWJkZXYtPnZhbF9zZXEgPSAwOworCXNwaW5fbG9ja19pbml0KCZiZGV2LT5mZW5jZV9sb2NrKTsKIAltdXRleF9sb2NrKCZnbG9iLT5kZXZpY2VfbGlzdF9tdXRleCk7CiAJbGlzdF9hZGRfdGFpbCgmYmRldi0+ZGV2aWNlX2xpc3QsICZnbG9iLT5kZXZpY2VfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZnbG9iLT5kZXZpY2VfbGlzdF9tdXRleCk7CkBAIC0xNTYwLDcgKzE1ODksNyBAQAogCXJldHVybiB0cnVlOwogfQogCi12b2lkIHR0bV9ib191bm1hcF92aXJ0dWFsKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCit2b2lkIHR0bV9ib191bm1hcF92aXJ0dWFsX2xvY2tlZChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQogewogCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYm8tPmJkZXY7CiAJbG9mZl90IG9mZnNldCA9IChsb2ZmX3QpIGJvLT5hZGRyX3NwYWNlX29mZnNldDsKQEAgLTE1NjksOCArMTU5OCwyMCBAQAogCWlmICghYmRldi0+ZGV2X21hcHBpbmcpCiAJCXJldHVybjsKIAl1bm1hcF9tYXBwaW5nX3JhbmdlKGJkZXYtPmRldl9tYXBwaW5nLCBvZmZzZXQsIGhvbGVsZW4sIDEpOwotCXR0bV9tZW1faW9fZnJlZShiZGV2LCAmYm8tPm1lbSk7CisJdHRtX21lbV9pb19mcmVlX3ZtKGJvKTsKIH0KKwordm9pZCB0dG1fYm9fdW5tYXBfdmlydHVhbChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQoreworCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYm8tPmJkZXY7CisJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4gPSAmYmRldi0+bWFuW2JvLT5tZW0ubWVtX3R5cGVdOworCisJdHRtX21lbV9pb19sb2NrKG1hbiwgZmFsc2UpOworCXR0bV9ib191bm1hcF92aXJ0dWFsX2xvY2tlZChibyk7CisJdHRtX21lbV9pb191bmxvY2sobWFuKTsKK30KKworCiBFWFBPUlRfU1lNQk9MKHR0bV9ib191bm1hcF92aXJ0dWFsKTsKIAogc3RhdGljIHZvaWQgdHRtX2JvX3ZtX2luc2VydF9yYihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQpAQCAtMTY1MCw2ICsxNjkxLDcgQEAKIAkJYm9vbCBsYXp5LCBib29sIGludGVycnVwdGlibGUsIGJvb2wgbm9fd2FpdCkKIHsKIAlzdHJ1Y3QgdHRtX2JvX2RyaXZlciAqZHJpdmVyID0gYm8tPmJkZXYtPmRyaXZlcjsKKwlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9IGJvLT5iZGV2OwogCXZvaWQgKnN5bmNfb2JqOwogCXZvaWQgKnN5bmNfb2JqX2FyZzsKIAlpbnQgcmV0ID0gMDsKQEAgLTE2NjMsOSArMTcwNSw5IEBACiAJCQl2b2lkICp0bXBfb2JqID0gYm8tPnN5bmNfb2JqOwogCQkJYm8tPnN5bmNfb2JqID0gTlVMTDsKIAkJCWNsZWFyX2JpdChUVE1fQk9fUFJJVl9GTEFHX01PVklORywgJmJvLT5wcml2X2ZsYWdzKTsKLQkJCXNwaW5fdW5sb2NrKCZiby0+bG9jayk7CisJCQlzcGluX3VubG9jaygmYmRldi0+ZmVuY2VfbG9jayk7CiAJCQlkcml2ZXItPnN5bmNfb2JqX3VucmVmKCZ0bXBfb2JqKTsKLQkJCXNwaW5fbG9jaygmYm8tPmxvY2spOworCQkJc3Bpbl9sb2NrKCZiZGV2LT5mZW5jZV9sb2NrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTE2NzQsMjkgKzE3MTYsMjkgQEAKIAogCQlzeW5jX29iaiA9IGRyaXZlci0+c3luY19vYmpfcmVmKGJvLT5zeW5jX29iaik7CiAJCXN5bmNfb2JqX2FyZyA9IGJvLT5zeW5jX29ial9hcmc7Ci0JCXNwaW5fdW5sb2NrKCZiby0+bG9jayk7CisJCXNwaW5fdW5sb2NrKCZiZGV2LT5mZW5jZV9sb2NrKTsKIAkJcmV0ID0gZHJpdmVyLT5zeW5jX29ial93YWl0KHN5bmNfb2JqLCBzeW5jX29ial9hcmcsCiAJCQkJCSAgICBsYXp5LCBpbnRlcnJ1cHRpYmxlKTsKIAkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewogCQkJZHJpdmVyLT5zeW5jX29ial91bnJlZigmc3luY19vYmopOwotCQkJc3Bpbl9sb2NrKCZiby0+bG9jayk7CisJCQlzcGluX2xvY2soJmJkZXYtPmZlbmNlX2xvY2spOwogCQkJcmV0dXJuIHJldDsKIAkJfQotCQlzcGluX2xvY2soJmJvLT5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZiZGV2LT5mZW5jZV9sb2NrKTsKIAkJaWYgKGxpa2VseShiby0+c3luY19vYmogPT0gc3luY19vYmogJiYKIAkJCSAgIGJvLT5zeW5jX29ial9hcmcgPT0gc3luY19vYmpfYXJnKSkgewogCQkJdm9pZCAqdG1wX29iaiA9IGJvLT5zeW5jX29iajsKIAkJCWJvLT5zeW5jX29iaiA9IE5VTEw7CiAJCQljbGVhcl9iaXQoVFRNX0JPX1BSSVZfRkxBR19NT1ZJTkcsCiAJCQkJICAmYm8tPnByaXZfZmxhZ3MpOwotCQkJc3Bpbl91bmxvY2soJmJvLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZiZGV2LT5mZW5jZV9sb2NrKTsKIAkJCWRyaXZlci0+c3luY19vYmpfdW5yZWYoJnN5bmNfb2JqKTsKIAkJCWRyaXZlci0+c3luY19vYmpfdW5yZWYoJnRtcF9vYmopOwotCQkJc3Bpbl9sb2NrKCZiby0+bG9jayk7CisJCQlzcGluX2xvY2soJmJkZXYtPmZlbmNlX2xvY2spOwogCQl9IGVsc2UgewotCQkJc3Bpbl91bmxvY2soJmJvLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZiZGV2LT5mZW5jZV9sb2NrKTsKIAkJCWRyaXZlci0+c3luY19vYmpfdW5yZWYoJnN5bmNfb2JqKTsKLQkJCXNwaW5fbG9jaygmYm8tPmxvY2spOworCQkJc3Bpbl9sb2NrKCZiZGV2LT5mZW5jZV9sb2NrKTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTE3MDUsNiArMTc0Nyw3IEBACiAKIGludCB0dG1fYm9fc3luY2NwdV93cml0ZV9ncmFiKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sIGJvb2wgbm9fd2FpdCkKIHsKKwlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9IGJvLT5iZGV2OwogCWludCByZXQgPSAwOwogCiAJLyoKQEAgLTE3MTQsOSArMTc1Nyw5IEBACiAJcmV0ID0gdHRtX2JvX3Jlc2VydmUoYm8sIHRydWUsIG5vX3dhaXQsIGZhbHNlLCAwKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlyZXR1cm4gcmV0OwotCXNwaW5fbG9jaygmYm8tPmxvY2spOworCXNwaW5fbG9jaygmYmRldi0+ZmVuY2VfbG9jayk7CiAJcmV0ID0gdHRtX2JvX3dhaXQoYm8sIGZhbHNlLCB0cnVlLCBub193YWl0KTsKLQlzcGluX3VubG9jaygmYm8tPmxvY2spOworCXNwaW5fdW5sb2NrKCZiZGV2LT5mZW5jZV9sb2NrKTsKIAlpZiAobGlrZWx5KHJldCA9PSAwKSkKIAkJYXRvbWljX2luYygmYm8tPmNwdV93cml0ZXJzKTsKIAl0dG1fYm9fdW5yZXNlcnZlKGJvKTsKQEAgLTE3ODIsMTYgKzE4MjUsMTUgQEAKIAlwdXRfY291bnQgPSB0dG1fYm9fZGVsX2Zyb21fbHJ1KGJvKTsKIAlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCi0Jd2hpbGUgKHB1dF9jb3VudC0tKQotCQlrcmVmX3B1dCgmYm8tPmxpc3Rfa3JlZiwgdHRtX2JvX3JlZl9idWcpOworCXR0bV9ib19saXN0X3JlZl9zdWIoYm8sIHB1dF9jb3VudCwgdHJ1ZSk7CiAKIAkvKioKIAkgKiBXYWl0IGZvciBHUFUsIHRoZW4gbW92ZSB0byBzeXN0ZW0gY2FjaGVkLgogCSAqLwogCi0Jc3Bpbl9sb2NrKCZiby0+bG9jayk7CisJc3Bpbl9sb2NrKCZiby0+YmRldi0+ZmVuY2VfbG9jayk7CiAJcmV0ID0gdHRtX2JvX3dhaXQoYm8sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotCXNwaW5fdW5sb2NrKCZiby0+bG9jayk7CisJc3Bpbl91bmxvY2soJmJvLT5iZGV2LT5mZW5jZV9sb2NrKTsKIAogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jCmluZGV4IDMxMDZkNWIuLjc3ZGJmNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMKQEAgLTc1LDM3ICs3NSwxMjMgQEAKIH0KIEVYUE9SVF9TWU1CT0wodHRtX2JvX21vdmVfdHRtKTsKIAotaW50IHR0bV9tZW1faW9fcmVzZXJ2ZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pCitpbnQgdHRtX21lbV9pb19sb2NrKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLCBib29sIGludGVycnVwdGlibGUpCiB7CisJaWYgKGxpa2VseShtYW4tPmlvX3Jlc2VydmVfZmFzdHBhdGgpKQorCQlyZXR1cm4gMDsKKworCWlmIChpbnRlcnJ1cHRpYmxlKQorCQlyZXR1cm4gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZtYW4tPmlvX3Jlc2VydmVfbXV0ZXgpOworCisJbXV0ZXhfbG9jaygmbWFuLT5pb19yZXNlcnZlX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB0dG1fbWVtX2lvX3VubG9jayhzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbikKK3sKKwlpZiAobGlrZWx5KG1hbi0+aW9fcmVzZXJ2ZV9mYXN0cGF0aCkpCisJCXJldHVybjsKKworCW11dGV4X3VubG9jaygmbWFuLT5pb19yZXNlcnZlX211dGV4KTsKK30KKworc3RhdGljIGludCB0dG1fbWVtX2lvX2V2aWN0KHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuKQoreworCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm87CisKKwlpZiAoIW1hbi0+dXNlX2lvX3Jlc2VydmVfbHJ1IHx8IGxpc3RfZW1wdHkoJm1hbi0+aW9fcmVzZXJ2ZV9scnUpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWJvID0gbGlzdF9maXJzdF9lbnRyeSgmbWFuLT5pb19yZXNlcnZlX2xydSwKKwkJCSAgICAgIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCwKKwkJCSAgICAgIGlvX3Jlc2VydmVfbHJ1KTsKKwlsaXN0X2RlbF9pbml0KCZiby0+aW9fcmVzZXJ2ZV9scnUpOworCXR0bV9ib191bm1hcF92aXJ0dWFsX2xvY2tlZChibyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dG1fbWVtX2lvX3Jlc2VydmUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCisJCQkgICAgICBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSkKK3sKKwlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiA9ICZiZGV2LT5tYW5bbWVtLT5tZW1fdHlwZV07CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWJkZXYtPmRyaXZlci0+aW9fbWVtX3Jlc2VydmUpCisJCXJldHVybiAwOworCWlmIChsaWtlbHkobWFuLT5pb19yZXNlcnZlX2Zhc3RwYXRoKSkKKwkJcmV0dXJuIGJkZXYtPmRyaXZlci0+aW9fbWVtX3Jlc2VydmUoYmRldiwgbWVtKTsKKworCWlmIChiZGV2LT5kcml2ZXItPmlvX21lbV9yZXNlcnZlICYmCisJICAgIG1lbS0+YnVzLmlvX3Jlc2VydmVkX2NvdW50KysgPT0gMCkgeworcmV0cnk6CisJCXJldCA9IGJkZXYtPmRyaXZlci0+aW9fbWVtX3Jlc2VydmUoYmRldiwgbWVtKTsKKwkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CisJCQlyZXQgPSB0dG1fbWVtX2lvX2V2aWN0KG1hbik7CisJCQlpZiAocmV0ID09IDApCisJCQkJZ290byByZXRyeTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB0dG1fbWVtX2lvX2ZyZWUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCisJCQkgICAgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pCit7CisJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4gPSAmYmRldi0+bWFuW21lbS0+bWVtX3R5cGVdOworCisJaWYgKGxpa2VseShtYW4tPmlvX3Jlc2VydmVfZmFzdHBhdGgpKQorCQlyZXR1cm47CisKKwlpZiAoYmRldi0+ZHJpdmVyLT5pb19tZW1fcmVzZXJ2ZSAmJgorCSAgICAtLW1lbS0+YnVzLmlvX3Jlc2VydmVkX2NvdW50ID09IDAgJiYKKwkgICAgYmRldi0+ZHJpdmVyLT5pb19tZW1fZnJlZSkKKwkJYmRldi0+ZHJpdmVyLT5pb19tZW1fZnJlZShiZGV2LCBtZW0pOworCit9CisKK2ludCB0dG1fbWVtX2lvX3Jlc2VydmVfdm0oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKK3sKKwlzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSA9ICZiby0+bWVtOwogCWludCByZXQ7CiAKLQlpZiAoIW1lbS0+YnVzLmlvX3Jlc2VydmVkKSB7Ci0JCW1lbS0+YnVzLmlvX3Jlc2VydmVkID0gdHJ1ZTsKLQkJcmV0ID0gYmRldi0+ZHJpdmVyLT5pb19tZW1fcmVzZXJ2ZShiZGV2LCBtZW0pOworCWlmICghbWVtLT5idXMuaW9fcmVzZXJ2ZWRfdm0pIHsKKwkJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4gPQorCQkJJmJvLT5iZGV2LT5tYW5bbWVtLT5tZW1fdHlwZV07CisKKwkJcmV0ID0gdHRtX21lbV9pb19yZXNlcnZlKGJvLT5iZGV2LCBtZW0pOwogCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQkJcmV0dXJuIHJldDsKKwkJbWVtLT5idXMuaW9fcmVzZXJ2ZWRfdm0gPSB0cnVlOworCQlpZiAobWFuLT51c2VfaW9fcmVzZXJ2ZV9scnUpCisJCQlsaXN0X2FkZF90YWlsKCZiby0+aW9fcmVzZXJ2ZV9scnUsCisJCQkJICAgICAgJm1hbi0+aW9fcmVzZXJ2ZV9scnUpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotdm9pZCB0dG1fbWVtX2lvX2ZyZWUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQordm9pZCB0dG1fbWVtX2lvX2ZyZWVfdm0oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKIHsKLQlpZiAoYmRldi0+ZHJpdmVyLT5pb19tZW1fcmVzZXJ2ZSkgewotCQlpZiAobWVtLT5idXMuaW9fcmVzZXJ2ZWQpIHsKLQkJCW1lbS0+YnVzLmlvX3Jlc2VydmVkID0gZmFsc2U7Ci0JCQliZGV2LT5kcml2ZXItPmlvX21lbV9mcmVlKGJkZXYsIG1lbSk7Ci0JCX0KKwlzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSA9ICZiby0+bWVtOworCisJaWYgKG1lbS0+YnVzLmlvX3Jlc2VydmVkX3ZtKSB7CisJCW1lbS0+YnVzLmlvX3Jlc2VydmVkX3ZtID0gZmFsc2U7CisJCWxpc3RfZGVsX2luaXQoJmJvLT5pb19yZXNlcnZlX2xydSk7CisJCXR0bV9tZW1faW9fZnJlZShiby0+YmRldiwgbWVtKTsKIAl9CiB9CiAKIGludCB0dG1fbWVtX3JlZ19pb3JlbWFwKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LCBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSwKIAkJCXZvaWQgKip2aXJ0dWFsKQogeworCXN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuID0gJmJkZXYtPm1hblttZW0tPm1lbV90eXBlXTsKIAlpbnQgcmV0OwogCXZvaWQgKmFkZHI7CiAKIAkqdmlydHVhbCA9IE5VTEw7CisJKHZvaWQpIHR0bV9tZW1faW9fbG9jayhtYW4sIGZhbHNlKTsKIAlyZXQgPSB0dG1fbWVtX2lvX3Jlc2VydmUoYmRldiwgbWVtKTsKKwl0dG1fbWVtX2lvX3VubG9jayhtYW4pOwogCWlmIChyZXQgfHwgIW1lbS0+YnVzLmlzX2lvbWVtKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMTcsNyArMjAzLDkgQEAKIAkJZWxzZQogCQkJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShtZW0tPmJ1cy5iYXNlICsgbWVtLT5idXMub2Zmc2V0LCBtZW0tPmJ1cy5zaXplKTsKIAkJaWYgKCFhZGRyKSB7CisJCQkodm9pZCkgdHRtX21lbV9pb19sb2NrKG1hbiwgZmFsc2UpOwogCQkJdHRtX21lbV9pb19mcmVlKGJkZXYsIG1lbSk7CisJCQl0dG1fbWVtX2lvX3VubG9jayhtYW4pOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAl9CkBAIC0xMzQsNyArMjIyLDkgQEAKIAogCWlmICh2aXJ0dWFsICYmIG1lbS0+YnVzLmFkZHIgPT0gTlVMTCkKIAkJaW91bm1hcCh2aXJ0dWFsKTsKKwkodm9pZCkgdHRtX21lbV9pb19sb2NrKG1hbiwgZmFsc2UpOwogCXR0bV9tZW1faW9fZnJlZShiZGV2LCBtZW0pOworCXR0bV9tZW1faW9fdW5sb2NrKG1hbik7CiB9CiAKIHN0YXRpYyBpbnQgdHRtX2NvcHlfaW9fcGFnZSh2b2lkICpkc3QsIHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBwYWdlKQpAQCAtMjMxLDcgKzMyMSw3IEBACiAJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4gPSAmYmRldi0+bWFuW25ld19tZW0tPm1lbV90eXBlXTsKIAlzdHJ1Y3QgdHRtX3R0ICp0dG0gPSBiby0+dHRtOwogCXN0cnVjdCB0dG1fbWVtX3JlZyAqb2xkX21lbSA9ICZiby0+bWVtOwotCXN0cnVjdCB0dG1fbWVtX3JlZyBvbGRfY29weSA9ICpvbGRfbWVtOworCXN0cnVjdCB0dG1fbWVtX3JlZyBvbGRfY29weTsKIAl2b2lkICpvbGRfaW9tYXA7CiAJdm9pZCAqbmV3X2lvbWFwOwogCWludCByZXQ7CkBAIC0yODAsOCArMzcwLDcgQEAKIAl9CiAJbWIoKTsKIG91dDI6Ci0JdHRtX2JvX2ZyZWVfb2xkX25vZGUoYm8pOwotCisJb2xkX2NvcHkgPSAqb2xkX21lbTsKIAkqb2xkX21lbSA9ICpuZXdfbWVtOwogCW5ld19tZW0tPm1tX25vZGUgPSBOVUxMOwogCkBAIC0yOTIsOSArMzgxLDEwIEBACiAJfQogCiBvdXQxOgotCXR0bV9tZW1fcmVnX2lvdW5tYXAoYmRldiwgbmV3X21lbSwgbmV3X2lvbWFwKTsKKwl0dG1fbWVtX3JlZ19pb3VubWFwKGJkZXYsIG9sZF9tZW0sIG5ld19pb21hcCk7CiBvdXQ6CiAJdHRtX21lbV9yZWdfaW91bm1hcChiZGV2LCAmb2xkX2NvcHksIG9sZF9pb21hcCk7CisJdHRtX2JvX21lbV9wdXQoYm8sICZvbGRfY29weSk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wodHRtX2JvX21vdmVfbWVtY3B5KTsKQEAgLTMzNywxMSArNDI3LDExIEBACiAJICogVE9ETzogRXhwbGljaXQgbWVtYmVyIGNvcHkgd291bGQgcHJvYmFibHkgYmUgYmV0dGVyIGhlcmUuCiAJICovCiAKLQlzcGluX2xvY2tfaW5pdCgmZmJvLT5sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmYm8tPmV2ZW50X3F1ZXVlKTsKIAlJTklUX0xJU1RfSEVBRCgmZmJvLT5kZGVzdHJveSk7CiAJSU5JVF9MSVNUX0hFQUQoJmZiby0+bHJ1KTsKIAlJTklUX0xJU1RfSEVBRCgmZmJvLT5zd2FwKTsKKwlJTklUX0xJU1RfSEVBRCgmZmJvLT5pb19yZXNlcnZlX2xydSk7CiAJZmJvLT52bV9ub2RlID0gTlVMTDsKIAlhdG9taWNfc2V0KCZmYm8tPmNwdV93cml0ZXJzLCAwKTsKIApAQCAtNDUzLDYgKzU0Myw4IEBACiAJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGFnZSwgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMsCiAJCXN0cnVjdCB0dG1fYm9fa21hcF9vYmogKm1hcCkKIHsKKwlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiA9CisJCSZiby0+YmRldi0+bWFuW2JvLT5tZW0ubWVtX3R5cGVdOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplOwogCWludCByZXQ7CiAKQEAgLTQ2Nyw3ICs1NTksOSBAQAogCWlmIChudW1fcGFnZXMgPiAxICYmICFEUk1fU1VTRVIoRFJNX0NVUlBST0MpKQogCQlyZXR1cm4gLUVQRVJNOwogI2VuZGlmCisJKHZvaWQpIHR0bV9tZW1faW9fbG9jayhtYW4sIGZhbHNlKTsKIAlyZXQgPSB0dG1fbWVtX2lvX3Jlc2VydmUoYm8tPmJkZXYsICZiby0+bWVtKTsKKwl0dG1fbWVtX2lvX3VubG9jayhtYW4pOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJaWYgKCFiby0+bWVtLmJ1cy5pc19pb21lbSkgewpAQCAtNDgyLDEyICs1NzYsMTUgQEAKIAogdm9pZCB0dG1fYm9fa3VubWFwKHN0cnVjdCB0dG1fYm9fa21hcF9vYmogKm1hcCkKIHsKKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvID0gbWFwLT5ibzsKKwlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiA9CisJCSZiby0+YmRldi0+bWFuW2JvLT5tZW0ubWVtX3R5cGVdOworCiAJaWYgKCFtYXAtPnZpcnR1YWwpCiAJCXJldHVybjsKIAlzd2l0Y2ggKG1hcC0+Ym9fa21hcF90eXBlKSB7CiAJY2FzZSB0dG1fYm9fbWFwX2lvbWFwOgogCQlpb3VubWFwKG1hcC0+dmlydHVhbCk7Ci0JCXR0bV9tZW1faW9fZnJlZShtYXAtPmJvLT5iZGV2LCAmbWFwLT5iby0+bWVtKTsKIAkJYnJlYWs7CiAJY2FzZSB0dG1fYm9fbWFwX3ZtYXA6CiAJCXZ1bm1hcChtYXAtPnZpcnR1YWwpOwpAQCAtNTAwLDYgKzU5Nyw5IEBACiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQorCSh2b2lkKSB0dG1fbWVtX2lvX2xvY2sobWFuLCBmYWxzZSk7CisJdHRtX21lbV9pb19mcmVlKG1hcC0+Ym8tPmJkZXYsICZtYXAtPmJvLT5tZW0pOworCXR0bV9tZW1faW9fdW5sb2NrKG1hbik7CiAJbWFwLT52aXJ0dWFsID0gTlVMTDsKIAltYXAtPnBhZ2UgPSBOVUxMOwogfQpAQCAtNTIwLDcgKzYyMCw3IEBACiAJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpnaG9zdF9vYmo7CiAJdm9pZCAqdG1wX29iaiA9IE5VTEw7CiAKLQlzcGluX2xvY2soJmJvLT5sb2NrKTsKKwlzcGluX2xvY2soJmJkZXYtPmZlbmNlX2xvY2spOwogCWlmIChiby0+c3luY19vYmopIHsKIAkJdG1wX29iaiA9IGJvLT5zeW5jX29iajsKIAkJYm8tPnN5bmNfb2JqID0gTlVMTDsKQEAgLTUyOSw3ICs2MjksNyBAQAogCWJvLT5zeW5jX29ial9hcmcgPSBzeW5jX29ial9hcmc7CiAJaWYgKGV2aWN0KSB7CiAJCXJldCA9IHR0bV9ib193YWl0KGJvLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLQkJc3Bpbl91bmxvY2soJmJvLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmJkZXYtPmZlbmNlX2xvY2spOwogCQlpZiAodG1wX29iaikKIAkJCWRyaXZlci0+c3luY19vYmpfdW5yZWYoJnRtcF9vYmopOwogCQlpZiAocmV0KQpAQCAtNTUyLDcgKzY1Miw3IEBACiAJCSAqLwogCiAJCXNldF9iaXQoVFRNX0JPX1BSSVZfRkxBR19NT1ZJTkcsICZiby0+cHJpdl9mbGFncyk7Ci0JCXNwaW5fdW5sb2NrKCZiby0+bG9jayk7CisJCXNwaW5fdW5sb2NrKCZiZGV2LT5mZW5jZV9sb2NrKTsKIAkJaWYgKHRtcF9vYmopCiAJCQlkcml2ZXItPnN5bmNfb2JqX3VucmVmKCZ0bXBfb2JqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3ZtLmMKaW5kZXggZmU2Y2I3Ny4uMjIxYjkyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib192bS5jCkBAIC04Myw2ICs4Myw4IEBACiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3M7CiAJaW50IHJldHZhbCA9IFZNX0ZBVUxUX05PUEFHRTsKKwlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiA9CisJCSZiZGV2LT5tYW5bYm8tPm1lbS5tZW1fdHlwZV07CiAKIAkvKgogCSAqIFdvcmsgYXJvdW5kIGxvY2tpbmcgb3JkZXIgcmV2ZXJzYWwgaW4gZmF1bHQgLyBub3BmbgpAQCAtMTE4LDI0ICsxMjAsMjggQEAKIAkgKiBtb3ZlLgogCSAqLwogCi0Jc3Bpbl9sb2NrKCZiby0+bG9jayk7CisJc3Bpbl9sb2NrKCZiZGV2LT5mZW5jZV9sb2NrKTsKIAlpZiAodGVzdF9iaXQoVFRNX0JPX1BSSVZfRkxBR19NT1ZJTkcsICZiby0+cHJpdl9mbGFncykpIHsKIAkJcmV0ID0gdHRtX2JvX3dhaXQoYm8sIGZhbHNlLCB0cnVlLCBmYWxzZSk7Ci0JCXNwaW5fdW5sb2NrKCZiby0+bG9jayk7CisJCXNwaW5fdW5sb2NrKCZiZGV2LT5mZW5jZV9sb2NrKTsKIAkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewogCQkJcmV0dmFsID0gKHJldCAhPSAtRVJFU1RBUlRTWVMpID8KIAkJCSAgICBWTV9GQVVMVF9TSUdCVVMgOiBWTV9GQVVMVF9OT1BBR0U7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAl9IGVsc2UKLQkJc3Bpbl91bmxvY2soJmJvLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmJkZXYtPmZlbmNlX2xvY2spOwogCi0KLQlyZXQgPSB0dG1fbWVtX2lvX3Jlc2VydmUoYmRldiwgJmJvLT5tZW0pOwotCWlmIChyZXQpIHsKLQkJcmV0dmFsID0gVk1fRkFVTFRfU0lHQlVTOworCXJldCA9IHR0bV9tZW1faW9fbG9jayhtYW4sIHRydWUpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJcmV0dmFsID0gVk1fRkFVTFRfTk9QQUdFOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQorCXJldCA9IHR0bV9tZW1faW9fcmVzZXJ2ZV92bShibyk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQlyZXR2YWwgPSBWTV9GQVVMVF9TSUdCVVM7CisJCWdvdG8gb3V0X2lvX3VubG9jazsKKwl9CiAKIAlwYWdlX29mZnNldCA9ICgoYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQpICsKIAkgICAgYm8tPnZtX25vZGUtPnN0YXJ0IC0gdm1hLT52bV9wZ29mZjsKQEAgLTE0NCw3ICsxNTAsNyBAQAogCiAJaWYgKHVubGlrZWx5KHBhZ2Vfb2Zmc2V0ID49IGJvLT5udW1fcGFnZXMpKSB7CiAJCXJldHZhbCA9IFZNX0ZBVUxUX1NJR0JVUzsKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dF9pb191bmxvY2s7CiAJfQogCiAJLyoKQEAgLTE4Miw3ICsxODgsNyBAQAogCQkJcGFnZSA9IHR0bV90dF9nZXRfcGFnZSh0dG0sIHBhZ2Vfb2Zmc2V0KTsKIAkJCWlmICh1bmxpa2VseSghcGFnZSAmJiBpID09IDApKSB7CiAJCQkJcmV0dmFsID0gVk1fRkFVTFRfT09NOwotCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCQlnb3RvIG91dF9pb191bmxvY2s7CiAJCQl9IGVsc2UgaWYgKHVubGlrZWx5KCFwYWdlKSkgewogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjAwLDE0ICsyMDYsMTUgQEAKIAkJZWxzZSBpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CiAJCQlyZXR2YWwgPQogCQkJICAgIChyZXQgPT0gLUVOT01FTSkgPyBWTV9GQVVMVF9PT00gOiBWTV9GQVVMVF9TSUdCVVM7Ci0JCQlnb3RvIG91dF91bmxvY2s7CisJCQlnb3RvIG91dF9pb191bmxvY2s7CiAJCX0KIAogCQlhZGRyZXNzICs9IFBBR0VfU0laRTsKIAkJaWYgKHVubGlrZWx5KCsrcGFnZV9vZmZzZXQgPj0gcGFnZV9sYXN0KSkKIAkJCWJyZWFrOwogCX0KLQorb3V0X2lvX3VubG9jazoKKwl0dG1fbWVtX2lvX3VubG9jayhtYW4pOwogb3V0X3VubG9jazoKIAl0dG1fYm9fdW5yZXNlcnZlKGJvKTsKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fZXhlY2J1Zl91dGlsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9leGVjYnVmX3V0aWwuYwppbmRleCBjMjg1YzI5Li4zODMyZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9leGVjYnVmX3V0aWwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9leGVjYnVmX3V0aWwuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKLXZvaWQgdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3N0YXRpYyB2b2lkIHR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uX2xvY2tlZChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQogewogCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyICplbnRyeTsKIApAQCAtNDEsMTAgKzQxLDc3IEBACiAJCWlmICghZW50cnktPnJlc2VydmVkKQogCQkJY29udGludWU7CiAKKwkJaWYgKGVudHJ5LT5yZW1vdmVkKSB7CisJCQl0dG1fYm9fYWRkX3RvX2xydShibyk7CisJCQllbnRyeS0+cmVtb3ZlZCA9IGZhbHNlOworCisJCX0KIAkJZW50cnktPnJlc2VydmVkID0gZmFsc2U7Ci0JCXR0bV9ib191bnJlc2VydmUoYm8pOworCQlhdG9taWNfc2V0KCZiby0+cmVzZXJ2ZWQsIDApOworCQl3YWtlX3VwX2FsbCgmYm8tPmV2ZW50X3F1ZXVlKTsKIAl9CiB9CisKK3N0YXRpYyB2b2lkIHR0bV9ldV9kZWxfZnJvbV9scnVfbG9ja2VkKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgKmVudHJ5OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbGlzdCwgaGVhZCkgeworCQlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvID0gZW50cnktPmJvOworCQlpZiAoIWVudHJ5LT5yZXNlcnZlZCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghZW50cnktPnJlbW92ZWQpIHsKKwkJCWVudHJ5LT5wdXRfY291bnQgPSB0dG1fYm9fZGVsX2Zyb21fbHJ1KGJvKTsKKwkJCWVudHJ5LT5yZW1vdmVkID0gdHJ1ZTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgdHRtX2V1X2xpc3RfcmVmX3N1YihzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyICplbnRyeTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGxpc3QsIGhlYWQpIHsKKwkJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyA9IGVudHJ5LT5ibzsKKworCQlpZiAoZW50cnktPnB1dF9jb3VudCkgeworCQkJdHRtX2JvX2xpc3RfcmVmX3N1YihibywgZW50cnktPnB1dF9jb3VudCwgdHJ1ZSk7CisJCQllbnRyeS0+cHV0X2NvdW50ID0gMDsKKwkJfQorCX0KK30KKworc3RhdGljIGludCB0dG1fZXVfd2FpdF91bnJlc2VydmVkX2xvY2tlZChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCQkgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKK3sKKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGJvLT5nbG9iOworCWludCByZXQ7CisKKwl0dG1fZXVfZGVsX2Zyb21fbHJ1X2xvY2tlZChsaXN0KTsKKwlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOworCXJldCA9IHR0bV9ib193YWl0X3VucmVzZXJ2ZWQoYm8sIHRydWUpOworCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uX2xvY2tlZChsaXN0KTsKKwlyZXR1cm4gcmV0OworfQorCisKK3ZvaWQgdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqZW50cnk7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2I7CisKKwlpZiAobGlzdF9lbXB0eShsaXN0KSkKKwkJcmV0dXJuOworCisJZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5KGxpc3QsIHN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyLCBoZWFkKTsKKwlnbG9iID0gZW50cnktPmJvLT5nbG9iOworCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOworCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uX2xvY2tlZChsaXN0KTsKKwlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOworfQogRVhQT1JUX1NZTUJPTCh0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbik7CiAKIC8qCkBAIC01OSwzNyArMTI2LDc2IEBACiAgKiBidWZmZXJzIGluIGRpZmZlcmVudCBvcmRlcnMuCiAgKi8KIAotaW50IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgdWludDMyX3QgdmFsX3NlcSkKK2ludCB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiB7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2I7CiAJc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgKmVudHJ5OwogCWludCByZXQ7CisJdWludDMyX3QgdmFsX3NlcTsKKworCWlmIChsaXN0X2VtcHR5KGxpc3QpKQorCQlyZXR1cm4gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGxpc3QsIGhlYWQpIHsKKwkJZW50cnktPnJlc2VydmVkID0gZmFsc2U7CisJCWVudHJ5LT5wdXRfY291bnQgPSAwOworCQllbnRyeS0+cmVtb3ZlZCA9IGZhbHNlOworCX0KKworCWVudHJ5ID0gbGlzdF9maXJzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciwgaGVhZCk7CisJZ2xvYiA9IGVudHJ5LT5iby0+Z2xvYjsKIAogcmV0cnk6CisJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJdmFsX3NlcSA9IGVudHJ5LT5iby0+YmRldi0+dmFsX3NlcSsrOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbGlzdCwgaGVhZCkgewogCQlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvID0gZW50cnktPmJvOwogCi0JCWVudHJ5LT5yZXNlcnZlZCA9IGZhbHNlOwotCQlyZXQgPSB0dG1fYm9fcmVzZXJ2ZShibywgdHJ1ZSwgZmFsc2UsIHRydWUsIHZhbF9zZXEpOwotCQlpZiAocmV0ICE9IDApIHsKLQkJCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKGxpc3QpOwotCQkJaWYgKHJldCA9PSAtRUFHQUlOKSB7Ci0JCQkJcmV0ID0gdHRtX2JvX3dhaXRfdW5yZXNlcnZlZChibywgdHJ1ZSk7Ci0JCQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCQlnb3RvIHJldHJ5OwotCQkJfSBlbHNlCityZXRyeV90aGlzX2JvOgorCQlyZXQgPSB0dG1fYm9fcmVzZXJ2ZV9sb2NrZWQoYm8sIHRydWUsIHRydWUsIHRydWUsIHZhbF9zZXEpOworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIDA6CisJCQlicmVhazsKKwkJY2FzZSAtRUJVU1k6CisJCQlyZXQgPSB0dG1fZXVfd2FpdF91bnJlc2VydmVkX2xvY2tlZChsaXN0LCBibyk7CisJCQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCQkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKKwkJCQl0dG1fZXVfbGlzdF9yZWZfc3ViKGxpc3QpOwogCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQlnb3RvIHJldHJ5X3RoaXNfYm87CisJCWNhc2UgLUVBR0FJTjoKKwkJCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uX2xvY2tlZChsaXN0KTsKKwkJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJCQl0dG1fZXVfbGlzdF9yZWZfc3ViKGxpc3QpOworCQkJcmV0ID0gdHRtX2JvX3dhaXRfdW5yZXNlcnZlZChibywgdHJ1ZSk7CisJCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQkJCXJldHVybiByZXQ7CisJCQlnb3RvIHJldHJ5OworCQlkZWZhdWx0OgorCQkJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb25fbG9ja2VkKGxpc3QpOworCQkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKKwkJCXR0bV9ldV9saXN0X3JlZl9zdWIobGlzdCk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAKIAkJZW50cnktPnJlc2VydmVkID0gdHJ1ZTsKIAkJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZiby0+Y3B1X3dyaXRlcnMpID4gMCkpIHsKLQkJCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKGxpc3QpOworCQkJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb25fbG9ja2VkKGxpc3QpOworCQkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKKwkJCXR0bV9ldV9saXN0X3JlZl9zdWIobGlzdCk7CiAJCQlyZXQgPSB0dG1fYm9fd2FpdF9jcHUoYm8sIGZhbHNlKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KIAl9CisKKwl0dG1fZXVfZGVsX2Zyb21fbHJ1X2xvY2tlZChsaXN0KTsKKwlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOworCXR0bV9ldV9saXN0X3JlZl9zdWIobGlzdCk7CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodHRtX2V1X3Jlc2VydmVfYnVmZmVycyk7CkBAIC05NywyMSArMjAzLDM2IEBACiB2b2lkIHR0bV9ldV9mZW5jZV9idWZmZXJfb2JqZWN0cyhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCB2b2lkICpzeW5jX29iaikKIHsKIAlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqZW50cnk7CisJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibzsKKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYjsKKwlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldjsKKwlzdHJ1Y3QgdHRtX2JvX2RyaXZlciAqZHJpdmVyOworCisJaWYgKGxpc3RfZW1wdHkobGlzdCkpCisJCXJldHVybjsKKworCWJvID0gbGlzdF9maXJzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciwgaGVhZCktPmJvOworCWJkZXYgPSBiby0+YmRldjsKKwlkcml2ZXIgPSBiZGV2LT5kcml2ZXI7CisJZ2xvYiA9IGJvLT5nbG9iOworCisJc3Bpbl9sb2NrKCZiZGV2LT5mZW5jZV9sb2NrKTsKKwlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGxpc3QsIGhlYWQpIHsKLQkJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyA9IGVudHJ5LT5ibzsKLQkJc3RydWN0IHR0bV9ib19kcml2ZXIgKmRyaXZlciA9IGJvLT5iZGV2LT5kcml2ZXI7Ci0JCXZvaWQgKm9sZF9zeW5jX29iajsKLQotCQlzcGluX2xvY2soJmJvLT5sb2NrKTsKLQkJb2xkX3N5bmNfb2JqID0gYm8tPnN5bmNfb2JqOworCQlibyA9IGVudHJ5LT5ibzsKKwkJZW50cnktPm9sZF9zeW5jX29iaiA9IGJvLT5zeW5jX29iajsKIAkJYm8tPnN5bmNfb2JqID0gZHJpdmVyLT5zeW5jX29ial9yZWYoc3luY19vYmopOwogCQliby0+c3luY19vYmpfYXJnID0gZW50cnktPm5ld19zeW5jX29ial9hcmc7Ci0JCXNwaW5fdW5sb2NrKCZiby0+bG9jayk7Ci0JCXR0bV9ib191bnJlc2VydmUoYm8pOworCQl0dG1fYm9fdW5yZXNlcnZlX2xvY2tlZChibyk7CiAJCWVudHJ5LT5yZXNlcnZlZCA9IGZhbHNlOwotCQlpZiAob2xkX3N5bmNfb2JqKQotCQkJZHJpdmVyLT5zeW5jX29ial91bnJlZigmb2xkX3N5bmNfb2JqKTsKKwl9CisJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKKwlzcGluX3VubG9jaygmYmRldi0+ZmVuY2VfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBsaXN0LCBoZWFkKSB7CisJCWlmIChlbnRyeS0+b2xkX3N5bmNfb2JqKQorCQkJZHJpdmVyLT5zeW5jX29ial91bnJlZigmZW50cnktPm9sZF9zeW5jX29iaik7CiAJfQogfQogRVhQT1JUX1NZTUJPTCh0dG1fZXVfZmVuY2VfYnVmZmVyX29iamVjdHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAppbmRleCBlN2E1OGQwLi4xMGZjMDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaApAQCAtMjY0LDcgKzI2NCw2IEBACiAJICovCiAKIAlzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgY3R4OwotCXVpbnQzMl90IHZhbF9zZXE7CiAJc3RydWN0IG11dGV4IGNtZGJ1Zl9tdXRleDsKIAogCS8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jCmluZGV4IDc2OTU0ZTMuLjQxYjk1ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2V4ZWNidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMKQEAgLTY1Myw4ICs2NTMsNyBAQAogCXJldCA9IHZtd19jbWRfY2hlY2tfYWxsKGRldl9wcml2LCBzd19jb250ZXh0LCBjbWQsIGFyZy0+Y29tbWFuZF9zaXplKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dF9lcnI7Ci0JcmV0ID0gdHRtX2V1X3Jlc2VydmVfYnVmZmVycygmc3dfY29udGV4dC0+dmFsaWRhdGVfbm9kZXMsCi0JCQkJICAgICBkZXZfcHJpdi0+dmFsX3NlcSsrKTsKKwlyZXQgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZzd19jb250ZXh0LT52YWxpZGF0ZV9ub2Rlcyk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXRfZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmIuYwppbmRleCBmZTA5NmE3Li5iZmFiNjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZiLmMKQEAgLTQ4MCw5ICs0ODAsNiBAQAogCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gMDsKIAlpbmZvLT5maXguc21lbV9sZW4gPSBmYl9zaXplOwogCi0JaW5mby0+Zml4Lm1taW9fc3RhcnQgPSAwOwotCWluZm8tPmZpeC5tbWlvX2xlbiA9IDA7Ci0KIAlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IHBhci0+cHNldWRvX3BhbGV0dGU7CiAJaW5mby0+c2NyZWVuX2Jhc2UgPSBwYXItPnZtYWxsb2M7CiAJaW5mby0+c2NyZWVuX3NpemUgPSBmYl9zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvdmdhL3ZnYV9zd2l0Y2hlcm9vLmMgYi9kcml2ZXJzL2dwdS92Z2EvdmdhX3N3aXRjaGVyb28uYwppbmRleCBjODc2OGYzLi5lMDFjYWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS92Z2EvdmdhX3N3aXRjaGVyb28uYworKysgYi9kcml2ZXJzL2dwdS92Z2EvdmdhX3N3aXRjaGVyb28uYwpAQCAtMzMsNiArMzMsNyBAQAogCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvOwogCWludCBwd3Jfc3RhdGU7CiAJdm9pZCAoKnNldF9ncHVfc3RhdGUpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHZnYV9zd2l0Y2hlcm9vX3N0YXRlKTsKKwl2b2lkICgqcmVwcm9iZSkoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogCWJvb2wgKCpjYW5fc3dpdGNoKShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAJaW50IGlkOwogCWJvb2wgYWN0aXZlOwpAQCAtMTAzLDYgKzEwNCw3IEBACiAKIGludCB2Z2Ffc3dpdGNoZXJvb19yZWdpc3Rlcl9jbGllbnQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgdm9pZCAoKnNldF9ncHVfc3RhdGUpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHZnYV9zd2l0Y2hlcm9vX3N0YXRlKSwKKwkJCQkgICB2b2lkICgqcmVwcm9iZSkoc3RydWN0IHBjaV9kZXYgKnBkZXYpLAogCQkJCSAgIGJvb2wgKCpjYW5fc3dpdGNoKShzdHJ1Y3QgcGNpX2RldiAqcGRldikpCiB7CiAJaW50IGluZGV4OwpAQCAtMTE3LDYgKzExOSw3IEBACiAJdmdhc3JfcHJpdi5jbGllbnRzW2luZGV4XS5wd3Jfc3RhdGUgPSBWR0FfU1dJVENIRVJPT19PTjsKIAl2Z2Fzcl9wcml2LmNsaWVudHNbaW5kZXhdLnBkZXYgPSBwZGV2OwogCXZnYXNyX3ByaXYuY2xpZW50c1tpbmRleF0uc2V0X2dwdV9zdGF0ZSA9IHNldF9ncHVfc3RhdGU7CisJdmdhc3JfcHJpdi5jbGllbnRzW2luZGV4XS5yZXByb2JlID0gcmVwcm9iZTsKIAl2Z2Fzcl9wcml2LmNsaWVudHNbaW5kZXhdLmNhbl9zd2l0Y2ggPSBjYW5fc3dpdGNoOwogCXZnYXNyX3ByaXYuY2xpZW50c1tpbmRleF0uaWQgPSAtMTsKIAlpZiAocGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uZmxhZ3MgJiBJT1JFU09VUkNFX1JPTV9TSEFET1cpCkBAIC0xNzQsNyArMTc3LDggQEAKIAlpbnQgaTsKIAltdXRleF9sb2NrKCZ2Z2Fzcl9tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKLQkJc2VxX3ByaW50ZihtLCAiJWQ6JWM6JXM6JXNcbiIsIGksCisJCXNlcV9wcmludGYobSwgIiVkOiVzOiVjOiVzOiVzXG4iLCBpLAorCQkJICAgdmdhc3JfcHJpdi5jbGllbnRzW2ldLmlkID09IFZHQV9TV0lUQ0hFUk9PX0RJUyA/ICJESVMiIDogIklHRCIsCiAJCQkgICB2Z2Fzcl9wcml2LmNsaWVudHNbaV0uYWN0aXZlID8gJysnIDogJyAnLAogCQkJICAgdmdhc3JfcHJpdi5jbGllbnRzW2ldLnB3cl9zdGF0ZSA/ICJQd3IiIDogIk9mZiIsCiAJCQkgICBwY2lfbmFtZSh2Z2Fzcl9wcml2LmNsaWVudHNbaV0ucGRldikpOwpAQCAtMTkwLDkgKzE5NCw4IEBACiAKIHN0YXRpYyBpbnQgdmdhX3N3aXRjaG9uKHN0cnVjdCB2Z2Ffc3dpdGNoZXJvb19jbGllbnQgKmNsaWVudCkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gdmdhc3JfcHJpdi5oYW5kbGVyLT5wb3dlcl9zdGF0ZShjbGllbnQtPmlkLCBWR0FfU1dJVENIRVJPT19PTik7CisJaWYgKHZnYXNyX3ByaXYuaGFuZGxlci0+cG93ZXJfc3RhdGUpCisJCXZnYXNyX3ByaXYuaGFuZGxlci0+cG93ZXJfc3RhdGUoY2xpZW50LT5pZCwgVkdBX1NXSVRDSEVST09fT04pOwogCS8qIGNhbGwgdGhlIGRyaXZlciBjYWxsYmFjayB0byB0dXJuIG9uIGRldmljZSAqLwogCWNsaWVudC0+c2V0X2dwdV9zdGF0ZShjbGllbnQtPnBkZXYsIFZHQV9TV0lUQ0hFUk9PX09OKTsKIAljbGllbnQtPnB3cl9zdGF0ZSA9IFZHQV9TV0lUQ0hFUk9PX09OOwpAQCAtMjAzLDEyICsyMDYsMTQgQEAKIHsKIAkvKiBjYWxsIHRoZSBkcml2ZXIgY2FsbGJhY2sgdG8gdHVybiBvZmYgZGV2aWNlICovCiAJY2xpZW50LT5zZXRfZ3B1X3N0YXRlKGNsaWVudC0+cGRldiwgVkdBX1NXSVRDSEVST09fT0ZGKTsKLQl2Z2Fzcl9wcml2LmhhbmRsZXItPnBvd2VyX3N0YXRlKGNsaWVudC0+aWQsIFZHQV9TV0lUQ0hFUk9PX09GRik7CisJaWYgKHZnYXNyX3ByaXYuaGFuZGxlci0+cG93ZXJfc3RhdGUpCisJCXZnYXNyX3ByaXYuaGFuZGxlci0+cG93ZXJfc3RhdGUoY2xpZW50LT5pZCwgVkdBX1NXSVRDSEVST09fT0ZGKTsKIAljbGllbnQtPnB3cl9zdGF0ZSA9IFZHQV9TV0lUQ0hFUk9PX09GRjsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2Z2Ffc3dpdGNodG8oc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudCAqbmV3X2NsaWVudCkKKy8qIHN0YWdlIG9uZSBoYXBwZW5zIGJlZm9yZSBkZWxheSAqLworc3RhdGljIGludCB2Z2Ffc3dpdGNodG9fc3RhZ2UxKHN0cnVjdCB2Z2Ffc3dpdGNoZXJvb19jbGllbnQgKm5ld19jbGllbnQpCiB7CiAJaW50IHJldDsKIAlpbnQgaTsKQEAgLTIzNSwxMCArMjQwLDI4IEBACiAJCXZnYV9zd2l0Y2hvbihuZXdfY2xpZW50KTsKIAogCS8qIHN3YXAgc2hhZG93IHJlc291cmNlIHRvIGRlbm90ZSBib290IFZHQSBkZXZpY2UgaGFzIGNoYW5nZWQgc28gWCBzdGFydHMgb24gbmV3IGRldmljZSAqLwotCWFjdGl2ZS0+YWN0aXZlID0gZmFsc2U7Ci0KIAlhY3RpdmUtPnBkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLmZsYWdzICY9IH5JT1JFU09VUkNFX1JPTV9TSEFET1c7CiAJbmV3X2NsaWVudC0+cGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uZmxhZ3MgfD0gSU9SRVNPVVJDRV9ST01fU0hBRE9XOworCXJldHVybiAwOworfQorCisvKiBwb3N0IGRlbGF5ICovCitzdGF0aWMgaW50IHZnYV9zd2l0Y2h0b19zdGFnZTIoc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudCAqbmV3X2NsaWVudCkKK3sKKwlpbnQgcmV0OworCWludCBpOworCXN0cnVjdCB2Z2Ffc3dpdGNoZXJvb19jbGllbnQgKmFjdGl2ZSA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgVkdBX1NXSVRDSEVST09fTUFYX0NMSUVOVFM7IGkrKykgeworCQlpZiAodmdhc3JfcHJpdi5jbGllbnRzW2ldLmFjdGl2ZSA9PSB0cnVlKSB7CisJCQlhY3RpdmUgPSAmdmdhc3JfcHJpdi5jbGllbnRzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCFhY3RpdmUpCisJCXJldHVybiAwOworCisJYWN0aXZlLT5hY3RpdmUgPSBmYWxzZTsKIAogCWlmIChuZXdfY2xpZW50LT5mYl9pbmZvKSB7CiAJCXN0cnVjdCBmYl9ldmVudCBldmVudDsKQEAgLTI1MCw2ICsyNzMsOSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlpZiAobmV3X2NsaWVudC0+cmVwcm9iZSkKKwkJbmV3X2NsaWVudC0+cmVwcm9iZShuZXdfY2xpZW50LT5wZGV2KTsKKwogCWlmIChhY3RpdmUtPnB3cl9zdGF0ZSA9PSBWR0FfU1dJVENIRVJPT19PTikKIAkJdmdhX3N3aXRjaG9mZihhY3RpdmUpOwogCkBAIC0yNjUsNiArMjkxLDcgQEAKIAljb25zdCBjaGFyICpwZGV2X25hbWU7CiAJaW50IGksIHJldDsKIAlib29sIGRlbGF5ID0gZmFsc2UsIGNhbl9zd2l0Y2g7CisJYm9vbCBqdXN0X211eCA9IGZhbHNlOwogCWludCBjbGllbnRfaWQgPSAtMTsKIAlzdHJ1Y3QgdmdhX3N3aXRjaGVyb29fY2xpZW50ICpjbGllbnQgPSBOVUxMOwogCkBAIC0zMTksNiArMzQ2LDE1IEBACiAJaWYgKHN0cm5jbXAodXNlcmNtZCwgIkRJUyIsIDMpID09IDApCiAJCWNsaWVudF9pZCA9IFZHQV9TV0lUQ0hFUk9PX0RJUzsKIAorCWlmIChzdHJuY21wKHVzZXJjbWQsICJNSUdEIiwgNCkgPT0gMCkgeworCQlqdXN0X211eCA9IHRydWU7CisJCWNsaWVudF9pZCA9IFZHQV9TV0lUQ0hFUk9PX0lHRDsKKwl9CisJaWYgKHN0cm5jbXAodXNlcmNtZCwgIk1ESVMiLCA0KSA9PSAwKSB7CisJCWp1c3RfbXV4ID0gdHJ1ZTsKKwkJY2xpZW50X2lkID0gVkdBX1NXSVRDSEVST09fRElTOworCX0KKwogCWlmIChjbGllbnRfaWQgPT0gLTEpCiAJCWdvdG8gb3V0OwogCkBAIC0zMzAsNiArMzY2LDEyIEBACiAJfQogCiAJdmdhc3JfcHJpdi5kZWxheWVkX3N3aXRjaF9hY3RpdmUgPSBmYWxzZTsKKworCWlmIChqdXN0X211eCkgeworCQlyZXQgPSB2Z2Fzcl9wcml2LmhhbmRsZXItPnN3aXRjaHRvKGNsaWVudF9pZCk7CisJCWdvdG8gb3V0OworCX0KKwogCS8qIG9rYXkgd2Ugd2FudCBhIHN3aXRjaCAtIHRlc3QgaWYgZGV2aWNlcyBhcmUgd2lsbGluZyB0byBzd2l0Y2ggKi8KIAljYW5fc3dpdGNoID0gdHJ1ZTsKIAlmb3IgKGkgPSAwOyBpIDwgVkdBX1NXSVRDSEVST09fTUFYX0NMSUVOVFM7IGkrKykgewpAQCAtMzQ1LDE4ICszODcsMjIgQEAKIAogCWlmIChjYW5fc3dpdGNoID09IHRydWUpIHsKIAkJcGRldl9uYW1lID0gcGNpX25hbWUoY2xpZW50LT5wZGV2KTsKLQkJcmV0ID0gdmdhX3N3aXRjaHRvKGNsaWVudCk7CisJCXJldCA9IHZnYV9zd2l0Y2h0b19zdGFnZTEoY2xpZW50KTsKIAkJaWYgKHJldCkKLQkJCXByaW50ayhLRVJOX0VSUiAidmdhX3N3aXRjaGVyb286IHN3aXRjaGluZyBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQlwcmludGsoS0VSTl9FUlIgInZnYV9zd2l0Y2hlcm9vOiBzd2l0Y2hpbmcgZmFpbGVkIHN0YWdlIDEgJWRcbiIsIHJldCk7CisKKwkJcmV0ID0gdmdhX3N3aXRjaHRvX3N0YWdlMihjbGllbnQpOworCQlpZiAocmV0KQorCQkJcHJpbnRrKEtFUk5fRVJSICJ2Z2Ffc3dpdGNoZXJvbzogc3dpdGNoaW5nIGZhaWxlZCBzdGFnZSAyICVkXG4iLCByZXQpOworCiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAidmdhX3N3aXRjaGVyb286IHNldHRpbmcgZGVsYXllZCBzd2l0Y2ggdG8gY2xpZW50ICVkXG4iLCBjbGllbnQtPmlkKTsKIAkJdmdhc3JfcHJpdi5kZWxheWVkX3N3aXRjaF9hY3RpdmUgPSB0cnVlOwogCQl2Z2Fzcl9wcml2LmRlbGF5ZWRfY2xpZW50X2lkID0gY2xpZW50X2lkOwogCi0JCS8qIHdlIHNob3VsZCBhdCBsZWFzdCBwb3dlciB1cCB0aGUgY2FyZCB0bwotCQkgICBtYWtlIHRoZSBzd2l0Y2ggZmFzdGVyICovCi0JCWlmIChjbGllbnQtPnB3cl9zdGF0ZSA9PSBWR0FfU1dJVENIRVJPT19PRkYpCi0JCQl2Z2Ffc3dpdGNob24oY2xpZW50KTsKKwkJcmV0ID0gdmdhX3N3aXRjaHRvX3N0YWdlMShjbGllbnQpOworCQlpZiAocmV0KQorCQkJcHJpbnRrKEtFUk5fRVJSICJ2Z2Ffc3dpdGNoZXJvbzogZGVsYXllZCBzd2l0Y2hpbmcgc3RhZ2UgMSBmYWlsZWQgJWRcbiIsIHJldCk7CiAJfQogCiBvdXQ6CkBAIC00MzgsOSArNDg0LDkgQEAKIAkJZ290byBlcnI7CiAKIAlwZGV2X25hbWUgPSBwY2lfbmFtZShjbGllbnQtPnBkZXYpOwotCXJldCA9IHZnYV9zd2l0Y2h0byhjbGllbnQpOworCXJldCA9IHZnYV9zd2l0Y2h0b19zdGFnZTIoY2xpZW50KTsKIAlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgInZnYV9zd2l0Y2hlcm9vOiBkZWxheWVkIHN3aXRjaGluZyBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXByaW50ayhLRVJOX0VSUiAidmdhX3N3aXRjaGVyb286IGRlbGF5ZWQgc3dpdGNoaW5nIGZhaWxlZCBzdGFnZSAyICVkXG4iLCByZXQpOwogCiAJdmdhc3JfcHJpdi5kZWxheWVkX3N3aXRjaF9hY3RpdmUgPSBmYWxzZTsKIAllcnIgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvS2NvbmZpZyBiL2RyaXZlcnMvaGlkL0tjb25maWcKaW5kZXggZmZiYzI3OC4uMjRjY2EyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL2hpZC9LY29uZmlnCkBAIC0yOTUsNiArMjk1LDIzIEBACiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIE1vbnRlcmV5IEdlbml1cyBLQjI5RS4KIAorY29uZmlnIEhJRF9NVUxUSVRPVUNICisJdHJpc3RhdGUgIkhJRCBNdWx0aXRvdWNoIHBhbmVscyIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwktLS1oZWxwLS0tCisJICBHZW5lcmljIHN1cHBvcnQgZm9yIEhJRCBtdWx0aXRvdWNoIHBhbmVscy4KKworCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBkZXZpY2VzOgorCSAgLSBDeXByZXNzIFRydWVUb3VjaCBwYW5lbHMKKwkgIC0gSGFudm9uIGR1YWwgdG91Y2ggcGFuZWxzCisJICAtIFBpeGNpciBkdWFsIHRvdWNoIHBhbmVscworCSAgLSAnU2Vuc2luZyBXaW43LVR3b0ZpbmdlcicgcGFuZWwgYnkgR2VuZXJhbFRvdWNoCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGhpZC1tdWx0aXRvdWNoLgorCiBjb25maWcgSElEX05UUklHCiAJdHJpc3RhdGUgIk4tVHJpZyB0b3VjaCBzY3JlZW4iCiAJZGVwZW5kcyBvbiBVU0JfSElECmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9NYWtlZmlsZSBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCmluZGV4IDZlYWU5YTkuLjZlZmMyYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCkBAIC00Nyw2ICs0Nyw3IEBACiBvYmotJChDT05GSUdfSElEX01JQ1JPU09GVCkJKz0gaGlkLW1pY3Jvc29mdC5vCiBvYmotJChDT05GSUdfSElEX01PTlRFUkVZKQkrPSBoaWQtbW9udGVyZXkubwogb2JqLSQoQ09ORklHX0hJRF9NT1NBUlQpCSs9IGhpZC1tb3NhcnQubworb2JqLSQoQ09ORklHX0hJRF9NVUxUSVRPVUNIKQkrPSBoaWQtbXVsdGl0b3VjaC5vCiBvYmotJChDT05GSUdfSElEX05UUklHKQkJKz0gaGlkLW50cmlnLm8KIG9iai0kKENPTkZJR19ISURfT1JURUspCQkrPSBoaWQtb3J0ZWsubwogb2JqLSQoQ09ORklHX0hJRF9QUk9ESUtFWVMpCSs9IGhpZC1wcm9kaWtleXMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNhbmRvLmMgYi9kcml2ZXJzL2hpZC9oaWQtY2FuZG8uYwppbmRleCAzNzViNTA5Li4xZWEwNjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY2FuZG8uYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY2FuZG8uYwpAQCAtMjM2LDYgKzIzNiw4IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NBTkRPLAogCQkJVVNCX0RFVklDRV9JRF9DQU5ET19NVUxUSV9UT1VDSCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ0FORE8sCisJCQlVU0JfREVWSUNFX0lEX0NBTkRPX01VTFRJX1RPVUNIXzEwXzEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NBTkRPLAogCQkJVVNCX0RFVklDRV9JRF9DQU5ET19NVUxUSV9UT1VDSF8xMV82KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DQU5ETywKIAkJVVNCX0RFVklDRV9JRF9DQU5ET19NVUxUSV9UT1VDSF8xNV82KSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKaW5kZXggMjYxMTY4Ni4uZDY3OGNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCkBAIC0xMzEyLDcgKzEzMTIsOSBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CRUxLSU4sIFVTQl9ERVZJQ0VfSURfRkxJUF9LVk0pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JUQywgVVNCX0RFVklDRV9JRF9CVENfRU1QUkVYX1JFTU9URSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQlRDLCBVU0JfREVWSUNFX0lEX0JUQ19FTVBSRVhfUkVNT1RFXzIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NBTkRPLCBVU0JfREVWSUNFX0lEX0NBTkRPX1BJWENJUl9NVUxUSV9UT1VDSCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ0FORE8sIFVTQl9ERVZJQ0VfSURfQ0FORE9fTVVMVElfVE9VQ0gpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NBTkRPLCBVU0JfREVWSUNFX0lEX0NBTkRPX01VTFRJX1RPVUNIXzEwXzEpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NBTkRPLCBVU0JfREVWSUNFX0lEX0NBTkRPX01VTFRJX1RPVUNIXzExXzYpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NBTkRPLCBVU0JfREVWSUNFX0lEX0NBTkRPX01VTFRJX1RPVUNIXzE1XzYpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NIRVJSWSwgVVNCX0RFVklDRV9JRF9DSEVSUllfQ1lNT1RJT04pIH0sCkBAIC0xMzI0LDYgKzEzMjYsNyBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8yKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8zKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfTU9VU0UpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19UUlVFVE9VQ0gpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RSQUdPTlJJU0UsIDB4MDAwNikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFdBViwgVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNIKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9EV0FWLCBVU0JfREVWSUNFX0lEX0RXQVZfRUdBTEFYX01VTFRJVE9VQ0gxKSB9LApAQCAtMTMzNSwxMSArMTMzOCwxMyBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9FWktFWSwgVVNCX0RFVklDRV9JRF9CVENfODE5MykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0FNRVJPTiwgVVNCX0RFVklDRV9JRF9HQU1FUk9OX0RVQUxfUFNYX0FEQVBUT1IpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dBTUVST04sIFVTQl9ERVZJQ0VfSURfR0FNRVJPTl9EVUFMX1BDU19BREFQVE9SKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNILCBVU0JfREVWSUNFX0lEX0dFTkVSQUxfVE9VQ0hfV0lON19UV09GSU5HRVJTKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HUkVFTkFTSUEsIDB4MDAwMykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1JFRU5BU0lBLCAweDAwMTIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dZUkFUSU9OLCBVU0JfREVWSUNFX0lEX0dZUkFUSU9OX1JFTU9URSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1lSQVRJT04sIFVTQl9ERVZJQ0VfSURfR1lSQVRJT05fUkVNT1RFXzIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dZUkFUSU9OLCBVU0JfREVWSUNFX0lEX0dZUkFUSU9OX1JFTU9URV8zKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9IQU5WT04sIFVTQl9ERVZJQ0VfSURfSEFOVk9OX01VTFRJVE9VQ0gpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tFTlNJTkdUT04sIFVTQl9ERVZJQ0VfSURfS1NfU0xJTUJMQURFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9LWUUsIFVTQl9ERVZJQ0VfSURfS1lFX0VSR09fNTI1VikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEFCVEVDLCBVU0JfREVWSUNFX0lEX0xBQlRFQ19XSVJFTEVTU19LRVlCT0FSRCkgfSwKQEAgLTE0MjIsNiArMTQyNyw3IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RPUFNFRUQsIFVTQl9ERVZJQ0VfSURfVE9QU0VFRF9DWUJFUkxJTkspIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RPUFNFRUQyLCBVU0JfREVWSUNFX0lEX1RPUFNFRUQyX1JGX0NPTUJPKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9UV0lOSEFOLCBVU0JfREVWSUNFX0lEX1RXSU5IQU5fSVJfUkVNT1RFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9UVVJCT1gsIFVTQl9ERVZJQ0VfSURfVFVSQk9YX1RPVUNIU0NSRUVOX01PU0FSVCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVUNMT0dJQywgVVNCX0RFVklDRV9JRF9VQ0xPR0lDX1RBQkxFVF9QRjEyMDkpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1VDTE9HSUMsIFVTQl9ERVZJQ0VfSURfVUNMT0dJQ19UQUJMRVRfV1A0MDMwVSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVUNMT0dJQywgVVNCX0RFVklDRV9JRF9VQ0xPR0lDX1RBQkxFVF9XUDU1NDBVKSB9LApAQCAtMTY0MCw3ICsxNjQ2LDYgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRVNTRU5USUFMX1JFQUxJVFksIFVTQl9ERVZJQ0VfSURfRVNTRU5USUFMX1JFQUxJVFlfUDUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0VUVCwgVVNCX0RFVklDRV9JRF9UQzVVSCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRVRULCBVU0JfREVWSUNFX0lEX1RDNFVNKSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNILCAweDAwMDEpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dFTkVSQUxfVE9VQ0gsIDB4MDAwMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0VORVJBTF9UT1VDSCwgMHgwMDAzKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNILCAweDAwMDQpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmggYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKaW5kZXggZjY1Y2FjZS4uOTJhMGQ2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaApAQCAtMTQwLDcgKzE0MCw5IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQlRDX0VNUFJFWF9SRU1PVEVfMgkweDU1NzcKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0NBTkRPCQkweDIwODcKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9DQU5ET19QSVhDSVJfTVVMVElfVE9VQ0ggMHgwNzAzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0FORE9fTVVMVElfVE9VQ0gJMHgwYTAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0FORE9fTVVMVElfVE9VQ0hfMTBfMSAweDBhMDIKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9DQU5ET19NVUxUSV9UT1VDSF8xMV82IDB4MGIwMwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NBTkRPX01VTFRJX1RPVUNIXzE1XzYgMHgwZjAxCiAKQEAgLTE4Niw2ICsxODgsNyBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8xCTB4ZGU2MQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8yCTB4ZGU2NAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8zCTB4YmNhMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfVFJVRVRPVUNICTB4YzAwMQogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfREVBTEVYVFJFQU1FCTB4MTBjNQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0RFQUxFWFRSRUFNRV9SQURJT19TSTQ3MDEJMHg4MTlhCkBAIC0yMzYsNiArMjM5LDcgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9HQU1FUk9OX0RVQUxfUENTX0FEQVBUT1IJMHgwMDAyCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNICTB4MGRmYworI2RlZmluZSBVU0JfREVWSUNFX0lEX0dFTkVSQUxfVE9VQ0hfV0lON19UV09GSU5HRVJTIDB4MDAwMQogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfR0xBQgkJMHgwNmMyCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMzAJMHgwMDM4CkBAIC0zMTgsNiArMzIyLDkgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9IQU5XQU5HX1RBQkxFVF9GSVJTVAkweDUwMDAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9IQU5XQU5HX1RBQkxFVF9MQVNUCTB4OGZmZgogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfSEFOVk9OCQkweDIwYjMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9IQU5WT05fTVVMVElUT1VDSAkweDBhMTgKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX0hBUFAJCTB4MDc4YgogI2RlZmluZSBVU0JfREVWSUNFX0lEX1VHQ0lfRFJJVklORwkweDAwMTAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9VR0NJX0ZMWUlORwkweDAwMjAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jIGIvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKaW5kZXggZTYwZmRiOC4uN2Y1NTJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKQEAgLTI5MCw2ICsyOTAsMTQgQEAKIAkJZ290byBpZ25vcmU7CiAJfQogCisJaWYgKGZpZWxkLT5yZXBvcnRfdHlwZSA9PSBISURfRkVBVFVSRV9SRVBPUlQpIHsKKwkJaWYgKGRldmljZS0+ZHJpdmVyLT5mZWF0dXJlX21hcHBpbmcpIHsKKwkJCWRldmljZS0+ZHJpdmVyLT5mZWF0dXJlX21hcHBpbmcoZGV2aWNlLCBoaWRpbnB1dCwgZmllbGQsCisJCQkJdXNhZ2UpOworCQl9CisJCWdvdG8gaWdub3JlOworCX0KKwogCWlmIChkZXZpY2UtPmRyaXZlci0+aW5wdXRfbWFwcGluZykgewogCQlpbnQgcmV0ID0gZGV2aWNlLT5kcml2ZXItPmlucHV0X21hcHBpbmcoZGV2aWNlLCBoaWRpbnB1dCwgZmllbGQsCiAJCQkJdXNhZ2UsICZiaXQsICZtYXgpOwpAQCAtODM5LDcgKzg0Nyw2IEBACiAJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBOVUxMOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlpbnQgaSwgaiwgazsKLQlpbnQgbWF4X3JlcG9ydF90eXBlID0gSElEX09VVFBVVF9SRVBPUlQ7CiAKIAlJTklUX0xJU1RfSEVBRCgmaGlkLT5pbnB1dHMpOwogCkBAIC04NTYsMTAgKzg2MywxMSBAQAogCQkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19TS0lQX09VVFBVVF9SRVBPUlRTKQotCQltYXhfcmVwb3J0X3R5cGUgPSBISURfSU5QVVRfUkVQT1JUOworCWZvciAoayA9IEhJRF9JTlBVVF9SRVBPUlQ7IGsgPD0gSElEX0ZFQVRVUkVfUkVQT1JUOyBrKyspIHsKKwkJaWYgKGsgPT0gSElEX09VVFBVVF9SRVBPUlQgJiYKKwkJCWhpZC0+cXVpcmtzICYgSElEX1FVSVJLX1NLSVBfT1VUUFVUX1JFUE9SVFMpCisJCQljb250aW51ZTsKIAotCWZvciAoayA9IEhJRF9JTlBVVF9SRVBPUlQ7IGsgPD0gbWF4X3JlcG9ydF90eXBlOyBrKyspCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocmVwb3J0LCAmaGlkLT5yZXBvcnRfZW51bVtrXS5yZXBvcnRfbGlzdCwgbGlzdCkgewogCiAJCQlpZiAoIXJlcG9ydC0+bWF4ZmllbGQpCkBAIC05MTIsNiArOTIwLDcgQEAKIAkJCQloaWRpbnB1dCA9IE5VTEw7CiAJCQl9CiAJCX0KKwl9CiAKIAlpZiAoaGlkaW5wdXQgJiYgaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGhpZGlucHV0LT5pbnB1dCkpCiAJCWdvdG8gb3V0X2NsZWFudXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbW9zYXJ0LmMgYi9kcml2ZXJzL2hpZC9oaWQtbW9zYXJ0LmMKaW5kZXggOWZiMDUwYy4uYWVkN2ZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW1vc2FydC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1tb3NhcnQuYwpAQCAtMjU3LDYgKzI1Nyw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgbW9zYXJ0X2RldmljZXNbXSA9IHsKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVUywgVVNCX0RFVklDRV9JRF9BU1VTX1Q5MU1UKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BU1VTLCBVU0JfREVWSUNFX0lEX0FTVVNURUtfTVVMVElUT1VDSF9ZRk8pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RVUkJPWCwgVVNCX0RFVklDRV9JRF9UVVJCT1hfVE9VQ0hTQ1JFRU5fTU9TQVJUKSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBtb3NhcnRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbXVsdGl0b3VjaC5jIGIvZHJpdmVycy9oaWQvaGlkLW11bHRpdG91Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2QzMTgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLW11bHRpdG91Y2guYwpAQCAtMCwwICsxLDUxNiBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBtdWx0aXRvdWNoIHBhbmVscworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPgorICogIENvcHlyaWdodCAoYykgMjAxMC0yMDExIEJlbmphbWluIFRpc3NvaXJlcyA8YmVuamFtaW4udGlzc29pcmVzQGdtYWlsLmNvbT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBFY29sZSBOYXRpb25hbGUgZGUgbCdBdmlhdGlvbiBDaXZpbGUsIEZyYW5jZQorICoKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L210Lmg+CisjaW5jbHVkZSAidXNiaGlkL3VzYmhpZC5oIgorCisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkhJRCBtdWx0aXRvdWNoIHBhbmVscyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCisvKiBxdWlya3MgdG8gY29udHJvbCB0aGUgZGV2aWNlICovCisjZGVmaW5lIE1UX1FVSVJLX05PVF9TRUVOX01FQU5TX1VQCSgxIDw8IDApCisjZGVmaW5lIE1UX1FVSVJLX1NMT1RfSVNfQ09OVEFDVElECSgxIDw8IDEpCisjZGVmaW5lIE1UX1FVSVJLX0NZUFJFU1MJCSgxIDw8IDIpCisjZGVmaW5lIE1UX1FVSVJLX1NMT1RfSVNfQ09OVEFDVE5VTUJFUgkoMSA8PCAzKQorI2RlZmluZSBNVF9RVUlSS19WQUxJRF9JU19JTlJBTkdFCSgxIDw8IDQpCisjZGVmaW5lIE1UX1FVSVJLX1ZBTElEX0lTX0NPTkZJREVOQ0UJKDEgPDwgNSkKKworc3RydWN0IG10X3Nsb3QgeworCV9fczMyIHgsIHksIHAsIHcsIGg7CisJX19zMzIgY29udGFjdGlkOwkvKiB0aGUgZGV2aWNlIENvbnRhY3RJRCBhc3NpZ25lZCB0byB0aGlzIHNsb3QgKi8KKwlib29sIHRvdWNoX3N0YXRlOwkvKiBpcyB0aGUgdG91Y2ggdmFsaWQ/ICovCisJYm9vbCBzZWVuX2luX3RoaXNfZnJhbWU7LyogaGFzIHRoaXMgc2xvdCBiZWVuIHVwZGF0ZWQgKi8KK307CisKK3N0cnVjdCBtdF9kZXZpY2UgeworCXN0cnVjdCBtdF9zbG90IGN1cmRhdGE7CS8qIHBsYWNlaG9sZGVyIG9mIGluY29taW5nIGRhdGEgKi8KKwlzdHJ1Y3QgbXRfY2xhc3MgKm10Y2xhc3M7CS8qIG91ciBtdCBkZXZpY2UgY2xhc3MgKi8KKwl1bnNpZ25lZCBsYXN0X2ZpZWxkX2luZGV4OwkvKiBsYXN0IGZpZWxkIGluZGV4IG9mIHRoZSByZXBvcnQgKi8KKwl1bnNpZ25lZCBsYXN0X3Nsb3RfZmllbGQ7CS8qIHRoZSBsYXN0IGZpZWxkIG9mIGEgc2xvdCAqLworCV9fczggaW5wdXRtb2RlOwkJLyogSW5wdXRNb2RlIEhJRCBmZWF0dXJlLCAtMSBpZiBub24tZXhpc3RlbnQgKi8KKwlfX3U4IG51bV9yZWNlaXZlZDsJLyogaG93IG1hbnkgY29udGFjdHMgd2UgcmVjZWl2ZWQgKi8KKwlfX3U4IG51bV9leHBlY3RlZDsJLyogZXhwZWN0ZWQgbGFzdCBjb250YWN0IGluZGV4ICovCisJYm9vbCBjdXJ2YWxpZDsJCS8qIGlzIHRoZSBjdXJyZW50IGNvbnRhY3QgdmFsaWQ/ICovCisJc3RydWN0IG10X3Nsb3Qgc2xvdHNbMF07CS8qIGZpcnN0IHNsb3QgKi8KK307CisKK3N0cnVjdCBtdF9jbGFzcyB7CisJX19zMzIgbmFtZTsJLyogTVRfQ0xTICovCisJX19zMzIgcXVpcmtzOworCV9fczMyIHNuX21vdmU7CS8qIFNpZ25hbC9ub2lzZSByYXRpbyBmb3IgbW92ZSBldmVudHMgKi8KKwlfX3MzMiBzbl9wcmVzc3VyZTsJLyogU2lnbmFsL25vaXNlIHJhdGlvIGZvciBwcmVzc3VyZSBldmVudHMgKi8KKwlfX3U4IG1heGNvbnRhY3RzOworfTsKKworLyogY2xhc3NlcyBvZiBkZXZpY2UgYmVoYXZpb3IgKi8KKyNkZWZpbmUgTVRfQ0xTX0RFRkFVTFQJMQorI2RlZmluZSBNVF9DTFNfRFVBTDEJMgorI2RlZmluZSBNVF9DTFNfRFVBTDIJMworI2RlZmluZSBNVF9DTFNfQ1lQUkVTUwk0CisKKy8qCisgKiB0aGVzZSBkZXZpY2UtZGVwZW5kZW50IGZ1bmN0aW9ucyBkZXRlcm1pbmUgd2hhdCBzbG90IGNvcnJlc3BvbmRzCisgKiB0byBhIHZhbGlkIGNvbnRhY3QgdGhhdCB3YXMganVzdCByZWFkLgorICovCisKK3N0YXRpYyBpbnQgY3lwcmVzc19jb21wdXRlX3Nsb3Qoc3RydWN0IG10X2RldmljZSAqdGQpCit7CisJaWYgKHRkLT5jdXJkYXRhLmNvbnRhY3RpZCAhPSAwIHx8IHRkLT5udW1fcmVjZWl2ZWQgPT0gMCkKKwkJcmV0dXJuIHRkLT5jdXJkYXRhLmNvbnRhY3RpZDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBmaW5kX3Nsb3RfZnJvbV9jb250YWN0aWQoc3RydWN0IG10X2RldmljZSAqdGQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHRkLT5tdGNsYXNzLT5tYXhjb250YWN0czsgKytpKSB7CisJCWlmICh0ZC0+c2xvdHNbaV0uY29udGFjdGlkID09IHRkLT5jdXJkYXRhLmNvbnRhY3RpZCAmJgorCQkJdGQtPnNsb3RzW2ldLnRvdWNoX3N0YXRlKQorCQkJcmV0dXJuIGk7CisJfQorCWZvciAoaSA9IDA7IGkgPCB0ZC0+bXRjbGFzcy0+bWF4Y29udGFjdHM7ICsraSkgeworCQlpZiAoIXRkLT5zbG90c1tpXS5zZWVuX2luX3RoaXNfZnJhbWUgJiYKKwkJCSF0ZC0+c2xvdHNbaV0udG91Y2hfc3RhdGUpCisJCQlyZXR1cm4gaTsKKwl9CisJLyogc2hvdWxkIG5vdCBvY2N1cnMuIElmIHRoaXMgaGFwcGVucyB0aGF0IG1lYW5zCisJICogdGhhdCB0aGUgZGV2aWNlIHNlbnQgbW9yZSB0b3VjaGVzIHRoYXQgaXQgc2F5cworCSAqIGluIHRoZSByZXBvcnQgZGVzY3JpcHRvci4gSXQgaXMgaWdub3JlZCB0aGVuLiAqLworCXJldHVybiAtMTsKK30KKworc3RydWN0IG10X2NsYXNzIG10X2NsYXNzZXNbXSA9IHsKKwl7IC5uYW1lID0gTVRfQ0xTX0RFRkFVTFQsCisJCS5xdWlya3MgPSBNVF9RVUlSS19WQUxJRF9JU19JTlJBTkdFLAorCQkubWF4Y29udGFjdHMgPSAxMCB9LAorCXsgLm5hbWUgPSBNVF9DTFNfRFVBTDEsCisJCS5xdWlya3MgPSBNVF9RVUlSS19WQUxJRF9JU19JTlJBTkdFIHwKKwkJCU1UX1FVSVJLX1NMT1RfSVNfQ09OVEFDVElELAorCQkubWF4Y29udGFjdHMgPSAyIH0sCisJeyAubmFtZSA9IE1UX0NMU19EVUFMMiwKKwkJLnF1aXJrcyA9IE1UX1FVSVJLX1ZBTElEX0lTX0lOUkFOR0UgfAorCQkJTVRfUVVJUktfU0xPVF9JU19DT05UQUNUTlVNQkVSLAorCQkubWF4Y29udGFjdHMgPSAyIH0sCisJeyAubmFtZSA9IE1UX0NMU19DWVBSRVNTLAorCQkucXVpcmtzID0gTVRfUVVJUktfTk9UX1NFRU5fTUVBTlNfVVAgfAorCQkJTVRfUVVJUktfQ1lQUkVTUywKKwkJLm1heGNvbnRhY3RzID0gMTAgfSwKKworCXsgfQorfTsKKworc3RhdGljIHZvaWQgbXRfZmVhdHVyZV9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlKQoreworCWlmICh1c2FnZS0+aGlkID09IEhJRF9ER19JTlBVVE1PREUpIHsKKwkJc3RydWN0IG10X2RldmljZSAqdGQgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisJCXRkLT5pbnB1dG1vZGUgPSBmaWVsZC0+cmVwb3J0LT5pZDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9hYnMoc3RydWN0IGlucHV0X2RldiAqaW5wdXQsIHVuc2lnbmVkIGludCBjb2RlLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgaW50IHNucmF0aW8pCit7CisJaW50IGZtaW4gPSBmaWVsZC0+bG9naWNhbF9taW5pbXVtOworCWludCBmbWF4ID0gZmllbGQtPmxvZ2ljYWxfbWF4aW11bTsKKwlpbnQgZnV6eiA9IHNucmF0aW8gPyAoZm1heCAtIGZtaW4pIC8gc25yYXRpbyA6IDA7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIGNvZGUsIGZtaW4sIGZtYXgsIGZ1enosIDApOworfQorCitzdGF0aWMgaW50IG10X2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCXN0cnVjdCBtdF9kZXZpY2UgKnRkID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCXN0cnVjdCBtdF9jbGFzcyAqY2xzID0gdGQtPm10Y2xhc3M7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKworCWNhc2UgSElEX1VQX0dFTkRFU0s6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9HRF9YOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YKTsKKwkJCXNldF9hYnMoaGktPmlucHV0LCBBQlNfTVRfUE9TSVRJT05fWCwgZmllbGQsCisJCQkJY2xzLT5zbl9tb3ZlKTsKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJc2V0X2FicyhoaS0+aW5wdXQsIEFCU19YLCBmaWVsZCwgY2xzLT5zbl9tb3ZlKTsKKwkJCXRkLT5sYXN0X3Nsb3RfZmllbGQgPSB1c2FnZS0+aGlkOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0dEX1k6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1kpOworCQkJc2V0X2FicyhoaS0+aW5wdXQsIEFCU19NVF9QT1NJVElPTl9ZLCBmaWVsZCwKKwkJCQljbHMtPnNuX21vdmUpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlzZXRfYWJzKGhpLT5pbnB1dCwgQUJTX1ksIGZpZWxkLCBjbHMtPnNuX21vdmUpOworCQkJdGQtPmxhc3Rfc2xvdF9maWVsZCA9IHVzYWdlLT5oaWQ7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX1VQX0RJR0lUSVpFUjoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0RHX0lOUkFOR0U6CisJCQl0ZC0+bGFzdF9zbG90X2ZpZWxkID0gdXNhZ2UtPmhpZDsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQkJdGQtPmxhc3Rfc2xvdF9maWVsZCA9IHVzYWdlLT5oaWQ7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBISURfREdfVElQU1dJVENIOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9LRVksIEJUTl9UT1VDSCk7CisJCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShoaS0+aW5wdXQsIEVWX0tFWSwgQlROX1RPVUNIKTsKKwkJCXRkLT5sYXN0X3Nsb3RfZmllbGQgPSB1c2FnZS0+aGlkOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKKwkJCWlucHV0X210X2luaXRfc2xvdHMoaGktPmlucHV0LAorCQkJCQl0ZC0+bXRjbGFzcy0+bWF4Y29udGFjdHMpOworCQkJdGQtPmxhc3Rfc2xvdF9maWVsZCA9IHVzYWdlLT5oaWQ7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBISURfREdfV0lEVEg6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1RPVUNIX01BSk9SKTsKKwkJCXRkLT5sYXN0X3Nsb3RfZmllbGQgPSB1c2FnZS0+aGlkOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0RHX0hFSUdIVDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfVE9VQ0hfTUlOT1IpOworCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSA9IDE7CisJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtID0gMDsKKwkJCXNldF9hYnMoaGktPmlucHV0LCBBQlNfTVRfT1JJRU5UQVRJT04sIGZpZWxkLCAwKTsKKwkJCXRkLT5sYXN0X3Nsb3RfZmllbGQgPSB1c2FnZS0+aGlkOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0RHX1RJUFBSRVNTVVJFOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QUkVTU1VSRSk7CisJCQlzZXRfYWJzKGhpLT5pbnB1dCwgQUJTX01UX1BSRVNTVVJFLCBmaWVsZCwKKwkJCQljbHMtPnNuX3ByZXNzdXJlKTsKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJc2V0X2FicyhoaS0+aW5wdXQsIEFCU19QUkVTU1VSRSwgZmllbGQsCisJCQkJY2xzLT5zbl9wcmVzc3VyZSk7CisJCQl0ZC0+bGFzdF9zbG90X2ZpZWxkID0gdXNhZ2UtPmhpZDsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6CisJCQl0ZC0+bGFzdF9maWVsZF9pbmRleCA9IGZpZWxkLT5yZXBvcnQtPm1heGZpZWxkIC0gMTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9ER19DT05UQUNUTUFYOgorCQkJLyogd2UgZG9uJ3Qgc2V0IHRkLT5sYXN0X3Nsb3RfZmllbGQgYXMgY29udGFjdGNvdW50IGFuZAorCQkJICogY29udGFjdCBtYXggYXJlIGdsb2JhbCB0byB0aGUgcmVwb3J0ICovCisJCQlyZXR1cm4gLTE7CisJCX0KKwkJLyogbGV0IGhpZC1pbnB1dCBkZWNpZGUgZm9yIHRoZSBvdGhlcnMgKi8KKwkJcmV0dXJuIDA7CisKKwljYXNlIDB4ZmYwMDAwMDA6CisJCS8qIHdlIGRvIG5vdCB3YW50IHRvIG1hcCB0aGVzZTogbm8gaW5wdXQtb3JpZW50ZWQgbWVhbmluZyAqLworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRfaW5wdXRfbWFwcGVkKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfS0VZIHx8IHVzYWdlLT50eXBlID09IEVWX0FCUykKKwkJc2V0X2JpdCh1c2FnZS0+dHlwZSwgaGktPmlucHV0LT5ldmJpdCk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgbXRfY29tcHV0ZV9zbG90KHN0cnVjdCBtdF9kZXZpY2UgKnRkKQoreworCV9fczMyIHF1aXJrcyA9IHRkLT5tdGNsYXNzLT5xdWlya3M7CisKKwlpZiAocXVpcmtzICYgTVRfUVVJUktfU0xPVF9JU19DT05UQUNUSUQpCisJCXJldHVybiB0ZC0+Y3VyZGF0YS5jb250YWN0aWQ7CisKKwlpZiAocXVpcmtzICYgTVRfUVVJUktfQ1lQUkVTUykKKwkJcmV0dXJuIGN5cHJlc3NfY29tcHV0ZV9zbG90KHRkKTsKKworCWlmIChxdWlya3MgJiBNVF9RVUlSS19TTE9UX0lTX0NPTlRBQ1ROVU1CRVIpCisJCXJldHVybiB0ZC0+bnVtX3JlY2VpdmVkOworCisJcmV0dXJuIGZpbmRfc2xvdF9mcm9tX2NvbnRhY3RpZCh0ZCk7Cit9CisKKy8qCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgd2hvbGUgY29udGFjdCBoYXMgYmVlbiBwcm9jZXNzZWQsCisgKiBzbyB0aGF0IGl0IGNhbiBhc3NpZ24gaXQgdG8gYSBzbG90IGFuZCBzdG9yZSB0aGUgZGF0YSB0aGVyZQorICovCitzdGF0aWMgdm9pZCBtdF9jb21wbGV0ZV9zbG90KHN0cnVjdCBtdF9kZXZpY2UgKnRkKQoreworCXRkLT5jdXJkYXRhLnNlZW5faW5fdGhpc19mcmFtZSA9IHRydWU7CisJaWYgKHRkLT5jdXJ2YWxpZCkgeworCQlpbnQgc2xvdG51bSA9IG10X2NvbXB1dGVfc2xvdCh0ZCk7CisKKwkJaWYgKHNsb3RudW0gPj0gMCAmJiBzbG90bnVtIDwgdGQtPm10Y2xhc3MtPm1heGNvbnRhY3RzKQorCQkJdGQtPnNsb3RzW3Nsb3RudW1dID0gdGQtPmN1cmRhdGE7CisJfQorCXRkLT5udW1fcmVjZWl2ZWQrKzsKK30KKworCisvKgorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHdob2xlIHBhY2tldCBoYXMgYmVlbiByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLAorICogc28gdGhhdCBpdCBjYW4gZGVjaWRlIHdoYXQgdG8gc2VuZCB0byB0aGUgaW5wdXQgbGF5ZXIuCisgKi8KK3N0YXRpYyB2b2lkIG10X2VtaXRfZXZlbnQoc3RydWN0IG10X2RldmljZSAqdGQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHRkLT5tdGNsYXNzLT5tYXhjb250YWN0czsgKytpKSB7CisJCXN0cnVjdCBtdF9zbG90ICpzID0gJih0ZC0+c2xvdHNbaV0pOworCQlpZiAoKHRkLT5tdGNsYXNzLT5xdWlya3MgJiBNVF9RVUlSS19OT1RfU0VFTl9NRUFOU19VUCkgJiYKKwkJCSFzLT5zZWVuX2luX3RoaXNfZnJhbWUpIHsKKwkJCXMtPnRvdWNoX3N0YXRlID0gZmFsc2U7CisJCX0KKworCQlpbnB1dF9tdF9zbG90KGlucHV0LCBpKTsKKwkJaW5wdXRfbXRfcmVwb3J0X3Nsb3Rfc3RhdGUoaW5wdXQsIE1UX1RPT0xfRklOR0VSLAorCQkJcy0+dG91Y2hfc3RhdGUpOworCQlpZiAocy0+dG91Y2hfc3RhdGUpIHsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YLCBzLT54KTsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCBzLT55KTsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QUkVTU1VSRSwgcy0+cCk7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfVE9VQ0hfTUFKT1IsIHMtPncpOworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RPVUNIX01JTk9SLCBzLT5oKTsKKwkJfQorCQlzLT5zZWVuX2luX3RoaXNfZnJhbWUgPSBmYWxzZTsKKworCX0KKworCWlucHV0X210X3JlcG9ydF9wb2ludGVyX2VtdWxhdGlvbihpbnB1dCwgdHJ1ZSk7CisJaW5wdXRfc3luYyhpbnB1dCk7CisJdGQtPm51bV9yZWNlaXZlZCA9IDA7Cit9CisKKworCitzdGF0aWMgaW50IG10X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQkJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbXRfZGV2aWNlICp0ZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOworCV9fczMyIHF1aXJrcyA9IHRkLT5tdGNsYXNzLT5xdWlya3M7CisKKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHsKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0RHX0lOUkFOR0U6CisJCQlpZiAocXVpcmtzICYgTVRfUVVJUktfVkFMSURfSVNfSU5SQU5HRSkKKwkJCQl0ZC0+Y3VydmFsaWQgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6CisJCQlpZiAocXVpcmtzICYgTVRfUVVJUktfTk9UX1NFRU5fTUVBTlNfVVApCisJCQkJdGQtPmN1cnZhbGlkID0gdmFsdWU7CisJCQl0ZC0+Y3VyZGF0YS50b3VjaF9zdGF0ZSA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCQlpZiAocXVpcmtzICYgTVRfUVVJUktfVkFMSURfSVNfQ09ORklERU5DRSkKKwkJCQl0ZC0+Y3VydmFsaWQgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQl0ZC0+Y3VyZGF0YS5jb250YWN0aWQgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19USVBQUkVTU1VSRToKKwkJCXRkLT5jdXJkYXRhLnAgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9HRF9YOgorCQkJdGQtPmN1cmRhdGEueCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1k6CisJCQl0ZC0+Y3VyZGF0YS55ID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfV0lEVEg6CisJCQl0ZC0+Y3VyZGF0YS53ID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfSEVJR0hUOgorCQkJdGQtPmN1cmRhdGEuaCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJCS8qCisJCQkgKiBJbmNsdWRlcyBtdWx0aS1wYWNrZXQgc3VwcG9ydCB3aGVyZSBzdWJzZXF1ZW50CisJCQkgKiBwYWNrZXRzIGFyZSBzZW50IHdpdGggemVybyBjb250YWN0Y291bnQuCisJCQkgKi8KKwkJCWlmICh2YWx1ZSkKKwkJCQl0ZC0+bnVtX2V4cGVjdGVkID0gdmFsdWU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLyogZmFsbGJhY2sgdG8gdGhlIGdlbmVyaWMgaGlkaW5wdXQgaGFuZGxpbmcgKi8KKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKHVzYWdlLT5oaWQgPT0gdGQtPmxhc3Rfc2xvdF9maWVsZCkKKwkJCW10X2NvbXBsZXRlX3Nsb3QodGQpOworCisJCWlmIChmaWVsZC0+aW5kZXggPT0gdGQtPmxhc3RfZmllbGRfaW5kZXgKKwkJCSYmIHRkLT5udW1fcmVjZWl2ZWQgPj0gdGQtPm51bV9leHBlY3RlZCkKKwkJCW10X2VtaXRfZXZlbnQodGQsIGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQpOworCisJfQorCisJLyogd2UgaGF2ZSBoYW5kbGVkIHRoZSBoaWRpbnB1dCBwYXJ0LCBub3cgcmVtYWlucyBoaWRkZXYgKi8KKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKKwkJaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgbXRfc2V0X2lucHV0X21vZGUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJc3RydWN0IG10X2RldmljZSAqdGQgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisJc3RydWN0IGhpZF9yZXBvcnQgKnI7CisJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmU7CisKKwlpZiAodGQtPmlucHV0bW9kZSA8IDApCisJCXJldHVybjsKKworCXJlID0gJihoZGV2LT5yZXBvcnRfZW51bVtISURfRkVBVFVSRV9SRVBPUlRdKTsKKwlyID0gcmUtPnJlcG9ydF9pZF9oYXNoW3RkLT5pbnB1dG1vZGVdOworCWlmIChyKSB7CisJCXItPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4MDI7CisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhkZXYsIHIsIFVTQl9ESVJfT1VUKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXRfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBtdF9kZXZpY2UgKnRkOworCXN0cnVjdCBtdF9jbGFzcyAqbXRjbGFzcyA9IG10X2NsYXNzZXM7IC8qIE1UX0NMU19ERUZBVUxUICovCisKKwlmb3IgKGkgPSAwOyBtdF9jbGFzc2VzW2ldLm5hbWUgOyBpKyspIHsKKwkJaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSBtdF9jbGFzc2VzW2ldLm5hbWUpIHsKKwkJCW10Y2xhc3MgPSAmKG10X2NsYXNzZXNbaV0pOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBUaGlzIGFsbG93cyB0aGUgZHJpdmVyIHRvIGNvcnJlY3RseSBzdXBwb3J0IGRldmljZXMKKwkgKiB0aGF0IGVtaXQgZXZlbnRzIG92ZXIgc2V2ZXJhbCBISUQgbWVzc2FnZXMuCisJICovCisJaGRldi0+cXVpcmtzIHw9IEhJRF9RVUlSS19OT19JTlBVVF9TWU5DOworCisJdGQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXRfZGV2aWNlKSArCisJCQkJbXRjbGFzcy0+bWF4Y29udGFjdHMgKiBzaXplb2Yoc3RydWN0IG10X3Nsb3QpLAorCQkJCUdGUF9LRVJORUwpOworCWlmICghdGQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIG11bHRpdG91Y2ggZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl0ZC0+bXRjbGFzcyA9IG10Y2xhc3M7CisJdGQtPmlucHV0bW9kZSA9IC0xOworCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCB0ZCk7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJbXRfc2V0X2lucHV0X21vZGUoaGRldik7CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlrZnJlZSh0ZCk7CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBtdF9yZXNldF9yZXN1bWUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJbXRfc2V0X2lucHV0X21vZGUoaGRldik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbXRfcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCXN0cnVjdCBtdF9kZXZpY2UgKnRkID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCWhpZF9od19zdG9wKGhkZXYpOworCWtmcmVlKHRkKTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBtdF9kZXZpY2VzW10gPSB7CisKKwkvKiBDeXByZXNzIHBhbmVsICovCisJeyAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfQ1lQUkVTUywKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLAorCQkJVVNCX0RFVklDRV9JRF9DWVBSRVNTX1RSVUVUT1VDSCkgfSwKKworCS8qIEdlbmVyYWxUb3VjaCBwYW5lbCAqLworCXsgLmRyaXZlcl9kYXRhID0gTVRfQ0xTX0RVQUwyLAorCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dFTkVSQUxfVE9VQ0gsCisJCQlVU0JfREVWSUNFX0lEX0dFTkVSQUxfVE9VQ0hfV0lON19UV09GSU5HRVJTKSB9LAorCisJLyogUGl4Q2lyLWJhc2VkIHBhbmVscyAqLworCXsgLmRyaXZlcl9kYXRhID0gTVRfQ0xTX0RVQUwxLAorCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0hBTlZPTiwKKwkJCVVTQl9ERVZJQ0VfSURfSEFOVk9OX01VTFRJVE9VQ0gpIH0sCisJeyAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfRFVBTDEsCisJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ0FORE8sCisJCQlVU0JfREVWSUNFX0lEX0NBTkRPX1BJWENJUl9NVUxUSV9UT1VDSCkgfSwKKworCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBtdF9kZXZpY2VzKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfaWQgbXRfZ3JhYmJlZF91c2FnZXNbXSA9IHsKKwl7IEhJRF9BTllfSUQsIEhJRF9BTllfSUQsIEhJRF9BTllfSUQgfSwKKwl7IEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDF9Cit9OworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgbXRfZHJpdmVyID0geworCS5uYW1lID0gImhpZC1tdWx0aXRvdWNoIiwKKwkuaWRfdGFibGUgPSBtdF9kZXZpY2VzLAorCS5wcm9iZSA9IG10X3Byb2JlLAorCS5yZW1vdmUgPSBtdF9yZW1vdmUsCisJLmlucHV0X21hcHBpbmcgPSBtdF9pbnB1dF9tYXBwaW5nLAorCS5pbnB1dF9tYXBwZWQgPSBtdF9pbnB1dF9tYXBwZWQsCisJLmZlYXR1cmVfbWFwcGluZyA9IG10X2ZlYXR1cmVfbWFwcGluZywKKwkudXNhZ2VfdGFibGUgPSBtdF9ncmFiYmVkX3VzYWdlcywKKwkuZXZlbnQgPSBtdF9ldmVudCwKKyNpZmRlZiBDT05GSUdfUE0KKwkucmVzZXRfcmVzdW1lID0gbXRfcmVzZXRfcmVzdW1lLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJm10X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdF9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZtdF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtdF9pbml0KTsKK21vZHVsZV9leGl0KG10X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKaW5kZXggNzZiOWExNC4uOWE5NGI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCkBAIC0zNSw3ICszNSw2IEBACiAJeyBVU0JfVkVORE9SX0lEX0NISUMsIFVTQl9ERVZJQ0VfSURfQ0hJQ19HQU1FUEFELCBISURfUVVJUktfQkFEUEFEIH0sCiAJeyBVU0JfVkVORE9SX0lEX0RXQVYsIFVTQl9ERVZJQ0VfSURfRUdBTEFYX1RPVUNIQ09OVFJPTExFUiwgSElEX1FVSVJLX01VTFRJX0lOUFVUIHwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX01PSk8sIFVTQl9ERVZJQ0VfSURfUkVUUk9fQURBUFRFUiwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCi0JeyBVU0JfVkVORE9SX0lEX1RVUkJPWCwgVVNCX0RFVklDRV9JRF9UVVJCT1hfVE9VQ0hTQ1JFRU5fTU9TQVJULCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfSEFQUCwgVVNCX0RFVklDRV9JRF9VR0NJX0RSSVZJTkcsIEhJRF9RVUlSS19CQURQQUQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfSEFQUCwgVVNCX0RFVklDRV9JRF9VR0NJX0ZMWUlORywgSElEX1FVSVJLX0JBRFBBRCB8IEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9IQVBQLCBVU0JfREVWSUNFX0lEX1VHQ0lfRklHSFRJTkcsIEhJRF9RVUlSS19CQURQQUQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCBiZGMxM2QyLi4zNWYwMGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCkBAIC04MDksMTAgKzgwOSwxMCBAQAogCSAgd2lsbCBiZSBjYWxsZWQgZG1lMTczNy4KIAogY29uZmlnIFNFTlNPUlNfRU1DMTQwMwotCXRyaXN0YXRlICJTTVNDIEVNQzE0MDMgdGhlcm1hbCBzZW5zb3IiCisJdHJpc3RhdGUgIlNNU0MgRU1DMTQwMy8yMyB0aGVybWFsIHNlbnNvciIKIAlkZXBlbmRzIG9uIEkyQwogCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgU01TQyBFTUMxNDAzCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFNNU0MgRU1DMTQwMy8yMwogCSAgdGVtcGVyYXR1cmUgbW9uaXRvcmluZyBjaGlwLgogCiAJICBUaHJlc2hvbGQgdmFsdWVzIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHN5c2ZzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG05MjQwLmMgYi9kcml2ZXJzL2h3bW9uL2FkbTkyNDAuYwppbmRleCAwNzI3YWQyLi45ZTIzNGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTkyNDAuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTkyNDAuYwpAQCAtMjAsNyArMjAsNyBAQAogICogQWxhcm1zCTE2LWJpdCBtYXAgb2YgYWN0aXZlIGFsYXJtcwogICogQW5hbG9nIE91dAkwLi4xMjUwIG1WIG91dHB1dAogICoKLSAqIENoYXNzaXMgSW50cnVzaW9uOiBjbGVhciBDSSBsYXRjaCB3aXRoICdlY2hvIDEgPiBjaGFzc2lzX2NsZWFyJworICogQ2hhc3NpcyBJbnRydXNpb246IGNsZWFyIENJIGxhdGNoIHdpdGggJ2VjaG8gMCA+IGludHJ1c2lvbjBfYWxhcm0nCiAgKgogICogVGVzdCBoYXJkd2FyZTogSW50ZWwgU0U0NDBCWC0yIGRlc2t0b3AgbW90aGVyYm9hcmQgLS1HcmFudAogICoKQEAgLTQ3NiwxMyArNDc2LDE2IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoYW91dF9vdXRwdXQsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2FvdXQsIHNldF9hb3V0KTsKIAogLyogY2hhc3Npc19jbGVhciAqLwotc3RhdGljIHNzaXplX3QgY2hhc3Npc19jbGVhcihzdHJ1Y3QgZGV2aWNlICpkZXYsCitzdGF0aWMgc3NpemVfdCBjaGFzc2lzX2NsZWFyX2xlZ2FjeShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAorCWRldl93YXJuKGRldiwgIkF0dHJpYnV0ZSBjaGFzc2lzX2NsZWFyIGlzIGRlcHJlY2F0ZWQsICIKKwkJICJ1c2UgaW50cnVzaW9uMF9hbGFybSBpbnN0ZWFkXG4iKTsKKwogCWlmICh2YWwgPT0gMSkgewogCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKIAkJCQlBRE05MjQwX1JFR19DSEFTU0lTX0NMRUFSLCAweDgwKTsKQEAgLTQ5MCw3ICs0OTMsMjkgQEAKIAl9CiAJcmV0dXJuIGNvdW50OwogfQotc3RhdGljIERFVklDRV9BVFRSKGNoYXNzaXNfY2xlYXIsIFNfSVdVU1IsIE5VTEwsIGNoYXNzaXNfY2xlYXIpOworc3RhdGljIERFVklDRV9BVFRSKGNoYXNzaXNfY2xlYXIsIFNfSVdVU1IsIE5VTEwsIGNoYXNzaXNfY2xlYXJfbGVnYWN5KTsKKworc3RhdGljIHNzaXplX3QgY2hhc3Npc19jbGVhcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBhZG05MjQwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSB8fCB2YWwgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFETTkyNDBfUkVHX0NIQVNTSVNfQ0xFQVIsIDB4ODApOworCWRhdGEtPnZhbGlkID0gMDsJCS8qIEZvcmNlIGNhY2hlIHJlZnJlc2ggKi8KKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImNoYXNzaXMgaW50cnVzaW9uIGxhdGNoIGNsZWFyZWRcbiIpOworCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbnRydXNpb24wX2FsYXJtLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19hbGFybSwKKwkJY2hhc3Npc19jbGVhciwgMTIpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRtOTI0MF9hdHRyaWJ1dGVzW10gPSB7CiAJJnNlbnNvcl9kZXZfYXR0cl9pbjBfaW5wdXQuZGV2X2F0dHIuYXR0ciwKQEAgLTUzMiw2ICs1NTcsNyBAQAogCSZkZXZfYXR0cl9hbGFybXMuYXR0ciwKIAkmZGV2X2F0dHJfYW91dF9vdXRwdXQuYXR0ciwKIAkmZGV2X2F0dHJfY2hhc3Npc19jbGVhci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW50cnVzaW9uMF9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZkZXZfYXR0cl9jcHUwX3ZpZC5hdHRyLAogCU5VTEwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Fkczc4MjguYyBiL2RyaXZlcnMvaHdtb24vYWRzNzgyOC5jCmluZGV4IGFhYzg1ZjMuLmM0MmM1YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRzNzgyOC5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRzNzgyOC5jCkBAIC00LDcgKzQsNyBAQAogCiAJVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIGxtNzUgYW5kIG90aGVyIGxtX3NlbnNvcnMvaHdtb24gZHJpdmVycwogCi0JV3JpdHRlbiBieSBTdGV2ZSBIYXJkeSA8c3RldmVAbGludXhyZWFsdGltZS5jby51az4KKwlXcml0dGVuIGJ5IFN0ZXZlIEhhcmR5IDxzaGFyZHlAcmVkaGF0LmNvbT4KIAogCURhdGFzaGVldCBhdmFpbGFibGUgYXQ6IGh0dHA6Ly9mb2N1cy50aS5jb20vbGl0L2RzL3N5bWxpbmsvYWRzNzgyOC5wZGYKIApAQCAtMjcxLDcgKzI3MSw3IEBACiAJaTJjX2RlbF9kcml2ZXIoJmFkczc4MjhfZHJpdmVyKTsKIH0KIAotTU9EVUxFX0FVVEhPUigiU3RldmUgSGFyZHkgPHN0ZXZlQGxpbnV4cmVhbHRpbWUuY28udWs+Iik7CitNT0RVTEVfQVVUSE9SKCJTdGV2ZSBIYXJkeSA8c2hhcmR5QHJlZGhhdC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFEUzc4MjggZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jIGIvZHJpdmVycy9od21vbi9kbWUxNzM3LmMKaW5kZXggZTlhNjEwYi4uZDljNTkyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9kbWUxNzM3LmMKKysrIGIvZHJpdmVycy9od21vbi9kbWUxNzM3LmMKQEAgLTc3LDEyICs3NywxNCBAQAogICogaW40ICAgKzEyVgogICogaW41ICAgVlRSICAgKCszLjNWIHN0YnkpCiAgKiBpbjYgICBWYmF0CisgKiBpbjcgICBWdHJpcCAoc2NoNTEyNyBvbmx5KQogICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKiBWb2x0YWdlcyAoaW4pIG51bWJlcmVkIDAtNiAoaXgpICovCi0jZGVmaW5lCURNRTE3MzdfUkVHX0lOKGl4KQkJKChpeCkgPCA1ID8gMHgyMCArIChpeCkgXAotCQkJCQkJICA6IDB4OTQgKyAoaXgpKQorLyogVm9sdGFnZXMgKGluKSBudW1iZXJlZCAwLTcgKGl4KSAqLworI2RlZmluZQlETUUxNzM3X1JFR19JTihpeCkJCSgoaXgpIDwgNSA/IDB4MjAgKyAoaXgpIDogXAorCQkJCQkgKGl4KSA8IDcgPyAweDk0ICsgKGl4KSA6IFwKKwkJCQkJCSAgICAweDFmKQogI2RlZmluZQlETUUxNzM3X1JFR19JTl9NSU4oaXgpCQkoKGl4KSA8IDUgPyAweDQ0ICsgKGl4KSAqIDIgXAogCQkJCQkJICA6IDB4OTEgKyAoaXgpICogMikKICNkZWZpbmUJRE1FMTczN19SRUdfSU5fTUFYKGl4KQkJKChpeCkgPCA1ID8gMHg0NSArIChpeCkgKiAyIFwKQEAgLTEwMSwxMCArMTAzLDExIEBACiAgKiAgICBJTl9URU1QX0xTQigxKSA9IFt0ZW1wMywgdGVtcDFdCiAgKiAgICBJTl9URU1QX0xTQigyKSA9IFtpbjQsIHRlbXAyXQogICogICAgSU5fVEVNUF9MU0IoMykgPSBbaW4zLCBpbjBdCi0gKiAgICBJTl9URU1QX0xTQig0KSA9IFtpbjIsIGluMV0gKi8KKyAqICAgIElOX1RFTVBfTFNCKDQpID0gW2luMiwgaW4xXQorICogICAgSU5fVEVNUF9MU0IoNSkgPSBbcmVzLCBpbjddICovCiAjZGVmaW5lIERNRTE3MzdfUkVHX0lOX1RFTVBfTFNCKGl4KQkoMHg4NCArIChpeCkpCi1zdGF0aWMgY29uc3QgdTggRE1FMTczN19SRUdfSU5fTFNCW10gPSB7MywgNCwgNCwgMywgMiwgMCwgMH07Ci1zdGF0aWMgY29uc3QgdTggRE1FMTczN19SRUdfSU5fTFNCX1NITFtdID0gezQsIDQsIDAsIDAsIDAsIDAsIDR9Oworc3RhdGljIGNvbnN0IHU4IERNRTE3MzdfUkVHX0lOX0xTQltdID0gezMsIDQsIDQsIDMsIDIsIDAsIDAsIDV9Oworc3RhdGljIGNvbnN0IHU4IERNRTE3MzdfUkVHX0lOX0xTQl9TSExbXSA9IHs0LCA0LCAwLCAwLCAwLCAwLCA0LCA0fTsKIHN0YXRpYyBjb25zdCB1OCBETUUxNzM3X1JFR19URU1QX0xTQltdID0gezEsIDIsIDF9Owogc3RhdGljIGNvbnN0IHU4IERNRTE3MzdfUkVHX1RFTVBfTFNCX1NITFtdID0gezQsIDQsIDB9OwogCkBAIC0xNDUsNyArMTQ4LDcgQEAKICNkZWZpbmUgRE1FMTczN19SRUdfQUxBUk0xCQkweDQxCiAjZGVmaW5lIERNRTE3MzdfUkVHX0FMQVJNMgkJMHg0MgogI2RlZmluZSBETUUxNzM3X1JFR19BTEFSTTMJCTB4ODMKLXN0YXRpYyBjb25zdCB1OCBETUUxNzM3X0JJVF9BTEFSTV9JTltdID0gezAsIDEsIDIsIDMsIDgsIDE2LCAxN307CitzdGF0aWMgY29uc3QgdTggRE1FMTczN19CSVRfQUxBUk1fSU5bXSA9IHswLCAxLCAyLCAzLCA4LCAxNiwgMTcsIDE4fTsKIHN0YXRpYyBjb25zdCB1OCBETUUxNzM3X0JJVF9BTEFSTV9URU1QW10gPSB7NCwgNSwgNn07CiBzdGF0aWMgY29uc3QgdTggRE1FMTczN19CSVRfQUxBUk1fRkFOW10gPSB7MTAsIDExLCAxMiwgMTMsIDIyLCAyM307CiAKQEAgLTE5MCw2ICsxOTMsNyBAQAogI2RlZmluZSBIQVNfUFdNX01JTgkJKDEgPDwgNCkJCS8qIGJpdCA0ICovCiAjZGVmaW5lIEhBU19GQU4oaXgpCQkoMSA8PCAoKGl4KSArIDUpKQkvKiBiaXRzIDUtMTAgKi8KICNkZWZpbmUgSEFTX1BXTShpeCkJCSgxIDw8ICgoaXgpICsgMTEpKQkvKiBiaXRzIDExLTE2ICovCisjZGVmaW5lIEhBU19JTjcJCQkoMSA8PCAxNykJCS8qIGJpdCAxNyAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIERhdGEgc3RydWN0dXJlcyBhbmQgbWFuaXB1bGF0aW9uIHRoZXJlb2YKQEAgLTIxMyw5ICsyMTcsOSBAQAogCXUzMiBoYXNfZmVhdHVyZXM7CiAKIAkvKiBSZWdpc3RlciB2YWx1ZXMgKi8KLQl1MTYgaW5bN107Ci0JdTggIGluX21pbls3XTsKLQl1OCAgaW5fbWF4WzddOworCXUxNiBpbls4XTsKKwl1OCAgaW5fbWluWzhdOworCXU4ICBpbl9tYXhbOF07CiAJczE2IHRlbXBbM107CiAJczggIHRlbXBfbWluWzNdOwogCXM4ICB0ZW1wX21heFszXTsKQEAgLTI0Nyw3ICsyNTEsNyBAQAogc3RhdGljIGNvbnN0IGludCBJTl9OT01JTkFMX1NDSDUwMjdbXSA9IHs1MDAwLCAyMjUwLCAzMzAwLCAxMTI1LCAxMTI1LCAzMzAwLAogCQkJCQkgMzMwMH07CiBzdGF0aWMgY29uc3QgaW50IElOX05PTUlOQUxfU0NINTEyN1tdID0gezI1MDAsIDIyNTAsIDMzMDAsIDExMjUsIDExMjUsIDMzMDAsCi0JCQkJCSAzMzAwfTsKKwkJCQkJIDMzMDAsIDE1MDB9OwogI2RlZmluZSBJTl9OT01JTkFMKHR5cGUpCSgodHlwZSkgPT0gc2NoMzExeCA/IElOX05PTUlOQUxfU0NIMzExeCA6IFwKIAkJCQkgKHR5cGUpID09IHNjaDUwMjcgPyBJTl9OT01JTkFMX1NDSDUwMjcgOiBcCiAJCQkJICh0eXBlKSA9PSBzY2g1MTI3ID8gSU5fTk9NSU5BTF9TQ0g1MTI3IDogXApAQCAtNTgwLDcgKzU4NCw3IEBACiB7CiAJc3RydWN0IGRtZTE3MzdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBpeDsKLQl1OCBsc2JbNV07CisJdTggbHNiWzZdOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCkBAIC02MDMsNiArNjA3LDkgQEAKIAkJCS8qIFZvbHRhZ2UgaW5wdXRzIGFyZSBzdG9yZWQgYXMgMTYgYml0IHZhbHVlcyBldmVuCiAJCQkgKiB0aG91Z2ggdGhleSBoYXZlIG9ubHkgMTIgYml0cyByZXNvbHV0aW9uLiBUaGlzIGlzCiAJCQkgKiB0byBtYWtlIGl0IGNvbnNpc3RlbnQgd2l0aCB0aGUgdGVtcCBpbnB1dHMuICovCisJCQlpZiAoaXggPT0gNyAmJiAhKGRhdGEtPmhhc19mZWF0dXJlcyAmIEhBU19JTjcpKSB7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlkYXRhLT5pbltpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfSU4oaXgpKSA8PCA4OwogCQkJZGF0YS0+aW5fbWluW2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLApAQCAtNjM1LDEwICs2NDIsMTYgQEAKIAkJICogd2hpY2ggdGhlIHJlZ2lzdGVycyBhcmUgcmVhZCAoTVNCIGZpcnN0LCB0aGVuIExTQikgaXMKIAkJICogaW1wb3J0YW50ISAqLwogCQlmb3IgKGl4ID0gMDsgaXggPCBBUlJBWV9TSVpFKGxzYik7IGl4KyspIHsKKwkJCWlmIChpeCA9PSA1ICYmICEoZGF0YS0+aGFzX2ZlYXR1cmVzICYgSEFTX0lONykpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWxzYltpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfSU5fVEVNUF9MU0IoaXgpKTsKIAkJfQogCQlmb3IgKGl4ID0gMDsgaXggPCBBUlJBWV9TSVpFKGRhdGEtPmluKTsgaXgrKykgeworCQkJaWYgKGl4ID09IDcgJiYgIShkYXRhLT5oYXNfZmVhdHVyZXMgJiBIQVNfSU43KSkgeworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJZGF0YS0+aW5baXhdIHw9IChsc2JbRE1FMTczN19SRUdfSU5fTFNCW2l4XV0gPDwKIAkJCQkJRE1FMTczN19SRUdfSU5fTFNCX1NITFtpeF0pICYgMHhmMDsKIAkJfQpAQCAtNzYyLDcgKzc3NSw3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVm9sdGFnZSBzeXNmcyBhdHRyaWJ1dGVzCi0gKiBpeCA9IFswLTVdCisgKiBpeCA9IFswLTddCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBTWVNfSU5fSU5QVVQJMApAQCAtMTQzOSw3ICsxNDUyLDcgQEAKICAqIFN5c2ZzIGRldmljZSBhdHRyaWJ1dGUgZGVmaW5lcyBhbmQgc3RydWN0cwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qIFZvbHRhZ2VzIDAtNiAqLworLyogVm9sdGFnZXMgMC03ICovCiAKICNkZWZpbmUgU0VOU09SX0RFVklDRV9BVFRSX0lOKGl4KSBcCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4jI2l4IyNfaW5wdXQsIFNfSVJVR08sIFwKQEAgLTE0NTgsNiArMTQ3MSw3IEBACiBTRU5TT1JfREVWSUNFX0FUVFJfSU4oNCk7CiBTRU5TT1JfREVWSUNFX0FUVFJfSU4oNSk7CiBTRU5TT1JfREVWSUNFX0FUVFJfSU4oNik7CitTRU5TT1JfREVWSUNFX0FUVFJfSU4oNyk7CiAKIC8qIFRlbXBlcmF0dXJlcyAxLTMgKi8KIApAQCAtMTU3Niw3ICsxNTkwLDcgQEAKICAqIGNyZWF0ZWQgdW5jb25kaXRpb25hbGx5LiBUaGUgYXR0cmlidXRlcyB0aGF0IG5lZWQgbW9kaWZpY2F0aW9uIG9mIHRoZWlyCiAgKiBwZXJtaXNzaW9ucyBhcmUgY3JlYXRlZCByZWFkLW9ubHkgYW5kIHdyaXRlIHBlcm1pc3Npb25zIGFyZSBhZGRlZCBvciByZW1vdmVkCiAgKiBvbiB0aGUgZmx5IHdoZW4gcmVxdWlyZWQgKi8KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkbWUxNzM3X2F0dHJbXSA9eworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRtZTE3MzdfYXR0cltdID0gewogCS8qIFZvbHRhZ2VzICovCiAJJnNlbnNvcl9kZXZfYXR0cl9pbjBfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2luMF9taW4uZGV2X2F0dHIuYXR0ciwKQEAgLTE2ODEsNyArMTY5NSw3IEBACiB9OwogCiAKLS8qIFRoZSBmb2xsb3dpbmcgc3RydWN0IGhvbGRzIHRlbXAgem9uZSBoeXN0ZXJlc2lzICByZWxhdGVkIGF0dHJpYnV0ZXMsIHdoaWNoCisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdCBob2xkcyB0ZW1wIHpvbmUgaHlzdGVyZXNpcyByZWxhdGVkIGF0dHJpYnV0ZXMsIHdoaWNoCiAgKiBhcmUgbm90IGF2YWlsYWJsZSBpbiBhbGwgY2hpcHMuIFRoZSBmb2xsb3dpbmcgY2hpcHMgc3VwcG9ydCB0aGVtOgogICogRE1FMTczNywgU0NIMzExeCAqLwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRtZTE3Mzdfem9uZV9oeXN0X2F0dHJbXSA9IHsKQEAgLTE2OTUsNiArMTcwOSwyMSBAQAogCS5hdHRycyA9IGRtZTE3Mzdfem9uZV9oeXN0X2F0dHIsCiB9OwogCisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdCBob2xkcyB2b2x0YWdlIGluNyByZWxhdGVkIGF0dHJpYnV0ZXMsIHdoaWNoCisgKiBhcmUgbm90IGF2YWlsYWJsZSBpbiBhbGwgY2hpcHMuIFRoZSBmb2xsb3dpbmcgY2hpcHMgc3VwcG9ydCB0aGVtOgorICogU0NINTEyNyAqLworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRtZTE3MzdfaW43X2F0dHJbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX2luN19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW43X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW43X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW43X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZG1lMTczN19pbjdfZ3JvdXAgPSB7CisJLmF0dHJzID0gZG1lMTczN19pbjdfYXR0ciwKK307CisKIC8qIFRoZSBmb2xsb3dpbmcgc3RydWN0cyBob2xkIHRoZSBQV00gYXR0cmlidXRlcywgc29tZSBvZiB3aGljaCBhcmUgb3B0aW9uYWwuCiAgKiBUaGVpciBjcmVhdGlvbiBkZXBlbmRzIG9uIHRoZSBjaGlwIGNvbmZpZ3VyYXRpb24gd2hpY2ggaXMgZGV0ZXJtaW5lZCBkdXJpbmcKICAqIG1vZHVsZSBsb2FkLiAqLwpAQCAtMTk4Niw2ICsyMDE1LDkgQEAKIAlpZiAoZGF0YS0+aGFzX2ZlYXR1cmVzICYgSEFTX1pPTkVfSFlTVCkgewogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRtZTE3Mzdfem9uZV9oeXN0X2dyb3VwKTsKIAl9CisJaWYgKGRhdGEtPmhhc19mZWF0dXJlcyAmIEhBU19JTjcpIHsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZkbWUxNzM3X2luN19ncm91cCk7CisJfQogCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmZG1lMTczN19ncm91cCk7CiAKIAlpZiAoIWRhdGEtPmNsaWVudCkgewpAQCAtMTk5OSw0MyArMjAzMSw1OCBAQAogCWludCBlcnIsIGl4OwogCiAJLyogQ3JlYXRlIGEgbmFtZSBhdHRyaWJ1dGUgZm9yIElTQSBkZXZpY2VzICovCi0JaWYgKCFkYXRhLT5jbGllbnQgJiYKLQkgICAgKGVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZkZXYtPmtvYmosICZkZXZfYXR0cl9uYW1lLmF0dHIpKSkgewotCQlnb3RvIGV4aXQ7CisJaWYgKCFkYXRhLT5jbGllbnQpIHsKKwkJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGUoJmRldi0+a29iaiwgJmRldl9hdHRyX25hbWUuYXR0cik7CisJCWlmIChlcnIpIHsKKwkJCWdvdG8gZXhpdDsKKwkJfQogCX0KIAogCS8qIENyZWF0ZSBzdGFuZGFyZCBzeXNmcyBhdHRyaWJ1dGVzICovCi0JaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmRtZTE3MzdfZ3JvdXApKSkgeworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmZG1lMTczN19ncm91cCk7CisJaWYgKGVycikgewogCQlnb3RvIGV4aXRfcmVtb3ZlOwogCX0KIAogCS8qIENyZWF0ZSBjaGlwLWRlcGVuZGVudCBzeXNmcyBhdHRyaWJ1dGVzICovCi0JaWYgKChkYXRhLT5oYXNfZmVhdHVyZXMgJiBIQVNfVEVNUF9PRkZTRVQpICYmCi0JICAgIChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKLQkJCQkgICAgICAmZG1lMTczN190ZW1wX29mZnNldF9ncm91cCkpKSB7Ci0JCWdvdG8gZXhpdF9yZW1vdmU7CisJaWYgKGRhdGEtPmhhc19mZWF0dXJlcyAmIEhBU19URU1QX09GRlNFVCkgeworCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkJICZkbWUxNzM3X3RlbXBfb2Zmc2V0X2dyb3VwKTsKKwkJaWYgKGVycikgeworCQkJZ290byBleGl0X3JlbW92ZTsKKwkJfQogCX0KLQlpZiAoKGRhdGEtPmhhc19mZWF0dXJlcyAmIEhBU19WSUQpICYmCi0JICAgIChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKLQkJCQkgICAgICAmZG1lMTczN192aWRfZ3JvdXApKSkgewotCQlnb3RvIGV4aXRfcmVtb3ZlOworCWlmIChkYXRhLT5oYXNfZmVhdHVyZXMgJiBIQVNfVklEKSB7CisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmZG1lMTczN192aWRfZ3JvdXApOworCQlpZiAoZXJyKSB7CisJCQlnb3RvIGV4aXRfcmVtb3ZlOworCQl9CiAJfQotCWlmICgoZGF0YS0+aGFzX2ZlYXR1cmVzICYgSEFTX1pPTkUzKSAmJgotCSAgICAoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCi0JCQkJICAgICAgJmRtZTE3Mzdfem9uZTNfZ3JvdXApKSkgewotCQlnb3RvIGV4aXRfcmVtb3ZlOworCWlmIChkYXRhLT5oYXNfZmVhdHVyZXMgJiBIQVNfWk9ORTMpIHsKKwkJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZkbWUxNzM3X3pvbmUzX2dyb3VwKTsKKwkJaWYgKGVycikgeworCQkJZ290byBleGl0X3JlbW92ZTsKKwkJfQogCX0KLQlpZiAoKGRhdGEtPmhhc19mZWF0dXJlcyAmIEhBU19aT05FX0hZU1QpICYmCi0JICAgIChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKLQkJCQkgICAgICAmZG1lMTczN196b25lX2h5c3RfZ3JvdXApKSkgewotCQlnb3RvIGV4aXRfcmVtb3ZlOworCWlmIChkYXRhLT5oYXNfZmVhdHVyZXMgJiBIQVNfWk9ORV9IWVNUKSB7CisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmZG1lMTczN196b25lX2h5c3RfZ3JvdXApOworCQlpZiAoZXJyKSB7CisJCQlnb3RvIGV4aXRfcmVtb3ZlOworCQl9CisJfQorCWlmIChkYXRhLT5oYXNfZmVhdHVyZXMgJiBIQVNfSU43KSB7CisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmZG1lMTczN19pbjdfZ3JvdXApOworCQlpZiAoZXJyKSB7CisJCQlnb3RvIGV4aXRfcmVtb3ZlOworCQl9CiAJfQogCiAJLyogQ3JlYXRlIGZhbiBzeXNmcyBhdHRyaWJ1dGVzICovCiAJZm9yIChpeCA9IDA7IGl4IDwgQVJSQVlfU0laRShkbWUxNzM3X2Zhbl9ncm91cCk7IGl4KyspIHsKIAkJaWYgKGRhdGEtPmhhc19mZWF0dXJlcyAmIEhBU19GQU4oaXgpKSB7Ci0JCQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAotCQkJCQkJJmRtZTE3MzdfZmFuX2dyb3VwW2l4XSkpKSB7CisJCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkJCSAmZG1lMTczN19mYW5fZ3JvdXBbaXhdKTsKKwkJCWlmIChlcnIpIHsKIAkJCQlnb3RvIGV4aXRfcmVtb3ZlOwogCQkJfQogCQl9CkBAIC0yMDQ0LDE0ICsyMDkxLDE3IEBACiAJLyogQ3JlYXRlIFBXTSBzeXNmcyBhdHRyaWJ1dGVzICovCiAJZm9yIChpeCA9IDA7IGl4IDwgQVJSQVlfU0laRShkbWUxNzM3X3B3bV9ncm91cCk7IGl4KyspIHsKIAkJaWYgKGRhdGEtPmhhc19mZWF0dXJlcyAmIEhBU19QV00oaXgpKSB7Ci0JCQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAotCQkJCQkJJmRtZTE3MzdfcHdtX2dyb3VwW2l4XSkpKSB7CisJCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkJCSAmZG1lMTczN19wd21fZ3JvdXBbaXhdKTsKKwkJCWlmIChlcnIpIHsKIAkJCQlnb3RvIGV4aXRfcmVtb3ZlOwogCQkJfQotCQkJaWYgKChkYXRhLT5oYXNfZmVhdHVyZXMgJiBIQVNfUFdNX01JTikgJiYgaXggPCAzICYmCi0JCQkgICAgKGVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZkZXYtPmtvYmosCi0JCQkJCWRtZTE3MzdfYXV0b19wd21fbWluX2F0dHJbaXhdKSkpIHsKLQkJCQlnb3RvIGV4aXRfcmVtb3ZlOworCQkJaWYgKChkYXRhLT5oYXNfZmVhdHVyZXMgJiBIQVNfUFdNX01JTikgJiYgKGl4IDwgMykpIHsKKwkJCQllcnIgPSBzeXNmc19jcmVhdGVfZmlsZSgmZGV2LT5rb2JqLAorCQkJCQkJZG1lMTczN19hdXRvX3B3bV9taW5fYXR0cltpeF0pOworCQkJCWlmIChlcnIpIHsKKwkJCQkJZ290byBleGl0X3JlbW92ZTsKKwkJCQl9CiAJCQl9CiAJCX0KIAl9CkBAIC0yMTg4LDcgKzIyMzgsNyBAQAogCQlkYXRhLT5oYXNfZmVhdHVyZXMgfD0gSEFTX1pPTkUzOwogCQlicmVhazsKIAljYXNlIHNjaDUxMjc6Ci0JCWRhdGEtPmhhc19mZWF0dXJlcyB8PSBIQVNfRkFOKDIpIHwgSEFTX1BXTSgyKTsKKwkJZGF0YS0+aGFzX2ZlYXR1cmVzIHw9IEhBU19GQU4oMikgfCBIQVNfUFdNKDIpIHwgSEFTX0lONzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0yMjgxLDggKzIzMzEsOSBAQAogCWRtZTE3Mzdfc2lvX291dGIoc2lvX2NpcCwgMHgwNywgMHgwYSk7CiAKIAkvKiBHZXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgcnVudGltZSByZWdpc3RlcnMgKi8KLQlpZiAoIShhZGRyID0gKGRtZTE3Mzdfc2lvX2luYihzaW9fY2lwLCAweDYwKSA8PCA4KSB8Ci0JCSAgICAgIGRtZTE3Mzdfc2lvX2luYihzaW9fY2lwLCAweDYxKSkpIHsKKwlhZGRyID0gKGRtZTE3Mzdfc2lvX2luYihzaW9fY2lwLCAweDYwKSA8PCA4KSB8CisJCWRtZTE3Mzdfc2lvX2luYihzaW9fY2lwLCAweDYxKTsKKwlpZiAoIWFkZHIpIHsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBleGl0OwogCX0KQEAgLTIzNjMsMTMgKzI0MTQsMTUgQEAKIAltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBETUUxNzM3IGNoaXAgKi8KLQlpZiAoKGVyciA9IGRtZTE3MzdfaW5pdF9kZXZpY2UoZGV2KSkpIHsKKwllcnIgPSBkbWUxNzM3X2luaXRfZGV2aWNlKGRldik7CisJaWYgKGVycikgewogCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGRldmljZS5cbiIpOwogCQlnb3RvIGV4aXRfa2ZyZWU7CiAJfQogCiAJLyogQ3JlYXRlIHN5c2ZzIGZpbGVzICovCi0JaWYgKChlcnIgPSBkbWUxNzM3X2NyZWF0ZV9maWxlcyhkZXYpKSkgeworCWVyciA9IGRtZTE3MzdfY3JlYXRlX2ZpbGVzKGRldik7CisJaWYgKGVycikgewogCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZXMuXG4iKTsKIAkJZ290byBleGl0X2tmcmVlOwogCX0KQEAgLTI0NDYsOCArMjQ5OSw5IEBACiAJZG1lMTczN19zaW9fb3V0YihzaW9fY2lwLCAweDA3LCAweDBhKTsKIAogCS8qIEdldCB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBydW50aW1lIHJlZ2lzdGVycyAqLwotCWlmICghKGJhc2VfYWRkciA9IChkbWUxNzM3X3Npb19pbmIoc2lvX2NpcCwgMHg2MCkgPDwgOCkgfAotCQkJICAgZG1lMTczN19zaW9faW5iKHNpb19jaXAsIDB4NjEpKSkgeworCWJhc2VfYWRkciA9IChkbWUxNzM3X3Npb19pbmIoc2lvX2NpcCwgMHg2MCkgPDwgOCkgfAorCQkgICAgIGRtZTE3Mzdfc2lvX2luYihzaW9fY2lwLCAweDYxKTsKKwlpZiAoIWJhc2VfYWRkcikgewogCQlwcl9lcnIoIkJhc2UgYWRkcmVzcyBub3Qgc2V0XG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBleGl0OwpAQCAtMjQ3NiwxOCArMjUzMCwyMSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXhpdDsKIAotCWlmICghKHBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoImRtZTE3MzciLCBhZGRyKSkpIHsKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJkbWUxNzM3IiwgYWRkcik7CisJaWYgKCFwZGV2KSB7CiAJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZVxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlpZiAoKGVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsICZyZXMsIDEpKSkgeworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsICZyZXMsIDEpOworCWlmIChlcnIpIHsKIAkJcHJfZXJyKCJGYWlsZWQgdG8gYWRkIGRldmljZSByZXNvdXJjZSAoZXJyID0gJWQpXG4iLCBlcnIpOwogCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKIAl9CiAKLQlpZiAoKGVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldikpKSB7CisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwlpZiAoZXJyKSB7CiAJCXByX2VycigiRmFpbGVkIHRvIGFkZCBkZXZpY2UgKGVyciA9ICVkKVxuIiwgZXJyKTsKIAkJZ290byBleGl0X2RldmljZV9wdXQ7CiAJfQpAQCAtMjUxNCwxMSArMjU3MSwxMiBAQAogCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHJlZ2lvbiAweCUwNHgtMHglMDR4LlxuIiwKIAkJCSh1bnNpZ25lZCBzaG9ydClyZXMtPnN0YXJ0LAogCQkJKHVuc2lnbmVkIHNob3J0KXJlcy0+c3RhcnQgKyBETUUxNzM3X0VYVEVOVCAtIDEpOwotICAgICAgICAgICAgICAgIGVyciA9IC1FQlVTWTsKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGV4aXQ7CisJfQogCi0JaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbWUxNzM3X2RhdGEpLCBHRlBfS0VSTkVMKSkpIHsKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRtZTE3MzdfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGV4aXRfcmVsZWFzZV9yZWdpb247CiAJfQpAQCAtMjU2NSwxMyArMjYyMywxNSBAQAogCQkgZGF0YS0+dHlwZSA9PSBzY2g1MTI3ID8gIlNDSDUxMjciIDogIlNDSDMxMXgiLCBkYXRhLT5hZGRyKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIGNoaXAgKi8KLQlpZiAoKGVyciA9IGRtZTE3MzdfaW5pdF9kZXZpY2UoZGV2KSkpIHsKKwllcnIgPSBkbWUxNzM3X2luaXRfZGV2aWNlKGRldik7CisJaWYgKGVycikgewogCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGRldmljZS5cbiIpOwogCQlnb3RvIGV4aXRfa2ZyZWU7CiAJfQogCiAJLyogQ3JlYXRlIHN5c2ZzIGZpbGVzICovCi0JaWYgKChlcnIgPSBkbWUxNzM3X2NyZWF0ZV9maWxlcyhkZXYpKSkgeworCWVyciA9IGRtZTE3MzdfY3JlYXRlX2ZpbGVzKGRldik7CisJaWYgKGVycikgewogCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZXMuXG4iKTsKIAkJZ290byBleGl0X2tmcmVlOwogCX0KQEAgLTI2MjgsNyArMjY4OCw4IEBACiAJaW50IGVycjsKIAl1bnNpZ25lZCBzaG9ydCBhZGRyOwogCi0JaWYgKChlcnIgPSBpMmNfYWRkX2RyaXZlcigmZG1lMTczN19pMmNfZHJpdmVyKSkpIHsKKwllcnIgPSBpMmNfYWRkX2RyaXZlcigmZG1lMTczN19pMmNfZHJpdmVyKTsKKwlpZiAoZXJyKSB7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTI2NDEsMTIgKzI3MDIsMTQgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKChlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRtZTE3MzdfaXNhX2RyaXZlcikpKSB7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkbWUxNzM3X2lzYV9kcml2ZXIpOworCWlmIChlcnIpIHsKIAkJZ290byBleGl0X2RlbF9pMmNfZHJpdmVyOwogCX0KIAogCS8qIFNldHMgZ2xvYmFsIHBkZXYgYXMgYSBzaWRlIGVmZmVjdCAqLwotCWlmICgoZXJyID0gZG1lMTczN19pc2FfZGV2aWNlX2FkZChhZGRyKSkpIHsKKwllcnIgPSBkbWUxNzM3X2lzYV9kZXZpY2VfYWRkKGFkZHIpOworCWlmIChlcnIpIHsKIAkJZ290byBleGl0X2RlbF9pc2FfZHJpdmVyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9lbWMxNDAzLmMgYi9kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYwppbmRleCA4ZGVlM2YzLi41ZGVhOWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYworKysgYi9kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYwpAQCAtMjY5LDIzICsyNjksMzAgQEAKIAkJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlpbnQgaWQ7Ci0JLyogQ2hlY2sgaWYgdGhlcm1hbCBjaGlwIGlzIFNNU0MgYW5kIEVNQzE0MDMgKi8KKwkvKiBDaGVjayBpZiB0aGVybWFsIGNoaXAgaXMgU01TQyBhbmQgRU1DMTQwMyBvciBFTUMxNDIzICovCiAKIAlpZCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFRIRVJNQUxfU01TQ19JRF9SRUcpOwogCWlmIChpZCAhPSAweDVkKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWlkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVEhFUk1BTF9QSURfUkVHKTsKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSAweDIxOgorCQlzdHJsY3B5KGluZm8tPnR5cGUsICJlbWMxNDAzIiwgSTJDX05BTUVfU0laRSk7CisJCWJyZWFrOworCWNhc2UgMHgyMzoKKwkJc3RybGNweShpbmZvLT50eXBlLCAiZW1jMTQyMyIsIEkyQ19OQU1FX1NJWkUpOworCQlicmVhazsKIAkvKiBOb3RlOiAweDI1IGlzIHRoZSAxNDA0IHdoaWNoIGlzIHZlcnkgc2ltaWxhciBhbmQgdGhpcwogCSAgIGRyaXZlciBjb3VsZCBiZSBleHRlbmRlZCAqLwotCWlkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVEhFUk1BTF9QSURfUkVHKTsKLQlpZiAoaWQgIT0gMHgyMSkKKwlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlpZCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFRIRVJNQUxfUkVWSVNJT05fUkVHKTsKIAlpZiAoaWQgIT0gMHgwMSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlzdHJsY3B5KGluZm8tPnR5cGUsICJlbWMxNDAzIiwgSTJDX05BTUVfU0laRSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM0Miw2ICszNDksNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgZW1jMTQwM19pZHRhYmxlW10gPSB7CiAJeyAiZW1jMTQwMyIsIDAgfSwKKwl7ICJlbWMxNDIzIiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBlbWMxNDAzX2lkdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9mc2NobWQuYyBiL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKaW5kZXggZDRkNGNhNi4uYWE2ZDhiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9mc2NobWQuYworKysgYi9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIERFRklORV9NVVRFWCh3YXRjaGRvZ19tdXRleCk7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDczLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwpAQCAtODUwLDcgKzg0OSw3IEBACiAKIHN0YXRpYyBsb25nIHdhdGNoZG9nX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJCS5vcHRpb25zID0gV0RJT0ZfS0VFUEFMSVZFUElORyB8IFdESU9GX1NFVFRJTUVPVVQgfAogCQkJCVdESU9GX0NBUkRSRVNFVCwKIAkJLmlkZW50aXR5ID0gIkZTQyB3YXRjaGRvZyIKQEAgLTg1OCw3ICs4NTcsNiBAQAogCWludCBpLCByZXQgPSAwOwogCXN0cnVjdCBmc2NobWRfZGF0YSAqZGF0YSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAotCW11dGV4X2xvY2soJndhdGNoZG9nX211dGV4KTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKIAkJaWRlbnQuZmlybXdhcmVfdmVyc2lvbiA9IGRhdGEtPnJldmlzaW9uOwpAQCAtOTE1LDcgKzkxMyw2IEBACiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVOT1RUWTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZ3YXRjaGRvZ19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pdDg3LmMgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwppbmRleCBhNDI4YTkyLi4zMTZiNjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2l0ODcuYworKysgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwpAQCAtMzgsNiArMzgsOCBAQAogICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0xNTcwLDI2ICsxNTcyLDI1IEBACiAJY2FzZSAweGZmZmY6CS8qIE5vIGRldmljZSBhdCBhbGwgKi8KIAkJZ290byBleGl0OwogCWRlZmF1bHQ6Ci0JCXByX2RlYnVnKERSVk5BTUUgIjogVW5zdXBwb3J0ZWQgY2hpcCAoREVWSUQ9MHgleClcbiIsCi0JCQkgY2hpcF90eXBlKTsKKwkJcHJfZGVidWcoIlVuc3VwcG9ydGVkIGNoaXAgKERFVklEPTB4JXgpXG4iLCBjaGlwX3R5cGUpOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJc3VwZXJpb19zZWxlY3QoUE1FKTsKIAlpZiAoIShzdXBlcmlvX2luYihJVDg3X0FDVF9SRUcpICYgMHgwMSkpIHsKLQkJcHJfaW5mbygiaXQ4NzogRGV2aWNlIG5vdCBhY3RpdmF0ZWQsIHNraXBwaW5nXG4iKTsKKwkJcHJfaW5mbygiRGV2aWNlIG5vdCBhY3RpdmF0ZWQsIHNraXBwaW5nXG4iKTsKIAkJZ290byBleGl0OwogCX0KIAogCSphZGRyZXNzID0gc3VwZXJpb19pbncoSVQ4N19CQVNFX1JFRykgJiB+KElUODdfRVhURU5UIC0gMSk7CiAJaWYgKCphZGRyZXNzID09IDApIHsKLQkJcHJfaW5mbygiaXQ4NzogQmFzZSBhZGRyZXNzIG5vdCBzZXQsIHNraXBwaW5nXG4iKTsKKwkJcHJfaW5mbygiQmFzZSBhZGRyZXNzIG5vdCBzZXQsIHNraXBwaW5nXG4iKTsKIAkJZ290byBleGl0OwogCX0KIAogCWVyciA9IDA7CiAJc2lvX2RhdGEtPnJldmlzaW9uID0gc3VwZXJpb19pbmIoREVWUkVWKSAmIDB4MGY7Ci0JcHJfaW5mbygiaXQ4NzogRm91bmQgSVQlMDR4RiBjaGlwIGF0IDB4JXgsIHJldmlzaW9uICVkXG4iLAorCXByX2luZm8oIkZvdW5kIElUJTA0eEYgY2hpcCBhdCAweCV4LCByZXZpc2lvbiAlZFxuIiwKIAkJY2hpcF90eXBlLCAqYWRkcmVzcywgc2lvX2RhdGEtPnJldmlzaW9uKTsKIAogCS8qIGluOCAoVmJhdCkgaXMgYWx3YXlzIGludGVybmFsICovCkBAIC0xNjE1LDcgKzE2MTYsNyBAQAogCQl9IGVsc2UgewogCQkJLyogV2UgbmVlZCBhdCBsZWFzdCA0IFZJRCBwaW5zICovCiAJCQlpZiAocmVnICYgMHgwZikgewotCQkJCXByX2luZm8oIml0ODc6IFZJRCBpcyBkaXNhYmxlZCAocGlucyB1c2VkIGZvciBHUElPKVxuIik7CisJCQkJcHJfaW5mbygiVklEIGlzIGRpc2FibGVkIChwaW5zIHVzZWQgZm9yIEdQSU8pXG4iKTsKIAkJCQlzaW9fZGF0YS0+c2tpcF92aWQgPSAxOwogCQkJfQogCQl9CkBAIC0xNjUxLDcgKzE2NTIsNyBAQAogCQlpZiAoc2lvX2RhdGEtPnR5cGUgPT0gaXQ4NzIwICYmICEocmVnICYgKDEgPDwgMSkpKSB7CiAJCQlyZWcgfD0gKDEgPDwgMSk7CiAJCQlzdXBlcmlvX291dGIoSVQ4N19TSU9fUElOWDJfUkVHLCByZWcpOwotCQkJcHJfbm90aWNlKCJpdDg3OiBSb3V0aW5nIGludGVybmFsIFZDQ0ggdG8gaW43XG4iKTsKKwkJCXByX25vdGljZSgiUm91dGluZyBpbnRlcm5hbCBWQ0NIIHRvIGluN1xuIik7CiAJCX0KIAkJaWYgKHJlZyAmICgxIDw8IDApKQogCQkJc2lvX2RhdGEtPmludGVybmFsIHw9ICgxIDw8IDApOwpAQCAtMTY2MSw3ICsxNjYyLDcgQEAKIAkJc2lvX2RhdGEtPmJlZXBfcGluID0gc3VwZXJpb19pbmIoSVQ4N19TSU9fQkVFUF9QSU5fUkVHKSAmIDB4M2Y7CiAJfQogCWlmIChzaW9fZGF0YS0+YmVlcF9waW4pCi0JCXByX2luZm8oIml0ODc6IEJlZXBpbmcgaXMgc3VwcG9ydGVkXG4iKTsKKwkJcHJfaW5mbygiQmVlcGluZyBpcyBzdXBwb3J0ZWRcbiIpOwogCiAJLyogRGlzYWJsZSBzcGVjaWZpYyBmZWF0dXJlcyBiYXNlZCBvbiBETUkgc3RyaW5ncyAqLwogCWJvYXJkX3ZlbmRvciA9IGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JPQVJEX1ZFTkRPUik7CkBAIC0xNjc1LDggKzE2NzYsNyBAQAogCQkJICAgdGhlIFBXTTIgZHV0eSBjeWNsZSwgc28gd2UgZGlzYWJsZSBpdC4KIAkJCSAgIEkgdXNlIHRoZSBib2FyZCBuYW1lIHN0cmluZyBhcyB0aGUgdHJpZ2dlciBpbiBjYXNlCiAJCQkgICB0aGUgc2FtZSBib2FyZCBpcyBldmVyIHVzZWQgaW4gb3RoZXIgc3lzdGVtcy4gKi8KLQkJCXByX2luZm8oIml0ODc6IERpc2FibGluZyBwd20yIGR1ZSB0byAiCi0JCQkJImhhcmR3YXJlIGNvbnN0cmFpbnRzXG4iKTsKKwkJCXByX2luZm8oIkRpc2FibGluZyBwd20yIGR1ZSB0byBoYXJkd2FyZSBjb25zdHJhaW50c1xuIik7CiAJCQlzaW9fZGF0YS0+c2tpcF9wd20gPSAoMSA8PCAxKTsKIAkJfQogCX0KQEAgLTIxODksMjggKzIxODksMjYgQEAKIAlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKERSVk5BTUUsIGFkZHJlc3MpOwogCWlmICghcGRldikgewogCQllcnIgPSAtRU5PTUVNOwotCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwcl9lcnIoIkRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmcmVzLCAxKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSByZXNvdXJjZSBhZGRpdGlvbiBmYWlsZWQgIgotCQkgICAgICAgIiglZClcbiIsIGVycik7CisJCXByX2VycigiRGV2aWNlIHJlc291cmNlIGFkZGl0aW9uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwogCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKIAl9CiAKIAllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgc2lvX2RhdGEsCiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXQ4N19zaW9fZGF0YSkpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVk5BTUUgIjogUGxhdGZvcm0gZGF0YSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXByX2VycigiUGxhdGZvcm0gZGF0YSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OwogCX0KIAogCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBEZXZpY2UgYWRkaXRpb24gZmFpbGVkICglZClcbiIsCi0JCSAgICAgICBlcnIpOworCQlwcl9lcnIoIkRldmljZSBhZGRpdGlvbiBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKIAkJZ290byBleGl0X2RldmljZV9wdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtNzguYyBiL2RyaXZlcnMvaHdtb24vbG03OC5jCmluZGV4IDcyZmYyYzQuLjRjYjI0ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG03OC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG03OC5jCkBAIC0xOSw2ICsxOSw4IEBACiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtODU4LDcgKzg2MCw3IEBACiAJICogaW5kaXZpZHVhbGx5IGZvciB0aGUgcHJvYmluZyBwaGFzZS4gKi8KIAlmb3IgKHBvcnQgPSBhZGRyZXNzOyBwb3J0IDwgYWRkcmVzcyArIExNNzhfRVhURU5UOyBwb3J0KyspIHsKIAkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwb3J0LCAxLCAibG03OCIpKSB7Ci0JCQlwcl9kZWJ1ZygibG03ODogRmFpbGVkIHRvIHJlcXVlc3QgcG9ydCAweCV4XG4iLCBwb3J0KTsKKwkJCXByX2RlYnVnKCJGYWlsZWQgdG8gcmVxdWVzdCBwb3J0IDB4JXhcbiIsIHBvcnQpOwogCQkJZ290byByZWxlYXNlOwogCQl9CiAJfQpAQCAtOTIwLDcgKzkyMiw3IEBACiAJCWZvdW5kID0gMTsKIAogCWlmIChmb3VuZCkKLQkJcHJfaW5mbygibG03ODogRm91bmQgYW4gJXMgY2hpcCBhdCAlI3hcbiIsCisJCXByX2luZm8oIkZvdW5kIGFuICVzIGNoaXAgYXQgJSN4XG4iLAogCQkJdmFsICYgMHg4MCA/ICJMTTc5IiA6ICJMTTc4IiwgKGludClhZGRyZXNzKTsKIAogIHJlbGVhc2U6CkBAIC05NDIsMjEgKzk0NCwxOSBAQAogCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoImxtNzgiLCBhZGRyZXNzKTsKIAlpZiAoIXBkZXYpIHsKIAkJZXJyID0gLUVOT01FTTsKLQkJcHJpbnRrKEtFUk5fRVJSICJsbTc4OiBEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwcl9lcnIoIkRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmcmVzLCAxKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibG03ODogRGV2aWNlIHJlc291cmNlIGFkZGl0aW9uIGZhaWxlZCAiCi0JCSAgICAgICAiKCVkKVxuIiwgZXJyKTsKKwkJcHJfZXJyKCJEZXZpY2UgcmVzb3VyY2UgYWRkaXRpb24gZmFpbGVkICglZClcbiIsIGVycik7CiAJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OwogCX0KIAogCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgImxtNzg6IERldmljZSBhZGRpdGlvbiBmYWlsZWQgKCVkKVxuIiwKLQkJICAgICAgIGVycik7CisJCXByX2VycigiRGV2aWNlIGFkZGl0aW9uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwogCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vcGM4NzM2MC5jIGIvZHJpdmVycy9od21vbi9wYzg3MzYwLmMKaW5kZXggNjhlNjlhNC4uM2Q5OWI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9wYzg3MzYwLmMKKysrIGIvZHJpdmVycy9od21vbi9wYzg3MzYwLmMKQEAgLTMzLDYgKzMzLDggQEAKICAqICB0aGUgc3RhbmRhcmQgU3VwZXItSS9PIGFkZHJlc3NlcyBpcyB1c2VkICgweDJFLzB4MkYgb3IgMHg0RS8weDRGKS4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMTAzMSwxNiArMTAzMywxNSBAQAogCiAJCXZhbCA9IHN1cGVyaW9faW5iKHNpb2FkZHIsIEFDVCk7CiAJCWlmICghKHZhbCAmIDB4MDEpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJwYzg3MzYwOiBEZXZpY2UgMHglMDJ4IG5vdCAiCi0JCQkgICAgICAgImFjdGl2YXRlZFxuIiwgbG9nZGV2W2ldKTsKKwkJCXByX2luZm8oIkRldmljZSAweCUwMnggbm90IGFjdGl2YXRlZFxuIiwgbG9nZGV2W2ldKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJdmFsID0gKHN1cGVyaW9faW5iKHNpb2FkZHIsIEJBU0UpIDw8IDgpCiAJCSAgICB8IHN1cGVyaW9faW5iKHNpb2FkZHIsIEJBU0UgKyAxKTsKIAkJaWYgKCF2YWwpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gInBjODczNjA6IEJhc2UgYWRkcmVzcyBub3Qgc2V0IGZvciAiCi0JCQkgICAgICAgImRldmljZSAweCUwMnhcbiIsIGxvZ2RldltpXSk7CisJCQlwcl9pbmZvKCJCYXNlIGFkZHJlc3Mgbm90IHNldCBmb3IgZGV2aWNlIDB4JTAyeFxuIiwKKwkJCQlsb2dkZXZbaV0pOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMTA1MCwxNyArMTA1MSwxNSBAQAogCQkJY29uZnJlZ1swXSA9IHN1cGVyaW9faW5iKHNpb2FkZHIsIDB4RjApOwogCQkJY29uZnJlZ1sxXSA9IHN1cGVyaW9faW5iKHNpb2FkZHIsIDB4RjEpOwogCi0jaWZkZWYgREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICJwYzg3MzYwOiBGYW4gMTogbW9uPSVkICIKLQkJCSAgICAgICAiY3RybD0lZCBpbnY9JWRcbiIsIChjb25mcmVnWzBdPj4yKSYxLAotCQkJICAgICAgIChjb25mcmVnWzBdPj4zKSYxLCAoY29uZnJlZ1swXT4+NCkmMSk7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAicGM4NzM2MDogRmFuIDI6IG1vbj0lZCAiCi0JCQkgICAgICAgImN0cmw9JWQgaW52PSVkXG4iLCAoY29uZnJlZ1swXT4+NSkmMSwKLQkJCSAgICAgICAoY29uZnJlZ1swXT4+NikmMSwgKGNvbmZyZWdbMF0+PjcpJjEpOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjODczNjA6IEZhbiAzOiBtb249JWQgIgotCQkJICAgICAgICJjdHJsPSVkIGludj0lZFxuIiwgY29uZnJlZ1sxXSYxLAotCQkJICAgICAgIChjb25mcmVnWzFdPj4xKSYxLCAoY29uZnJlZ1sxXT4+MikmMSk7Ci0jZW5kaWYKKwkJCXByX2RlYnVnKCJGYW4gJWQ6IG1vbj0lZCBjdHJsPSVkIGludj0lZFxuIiwgMSwKKwkJCQkgKGNvbmZyZWdbMF0gPj4gMikgJiAxLCAoY29uZnJlZ1swXSA+PiAzKSAmIDEsCisJCQkJIChjb25mcmVnWzBdID4+IDQpICYgMSk7CisJCQlwcl9kZWJ1ZygiRmFuICVkOiBtb249JWQgY3RybD0lZCBpbnY9JWRcbiIsIDIsCisJCQkJIChjb25mcmVnWzBdID4+IDUpICYgMSwgKGNvbmZyZWdbMF0gPj4gNikgJiAxLAorCQkJCSAoY29uZnJlZ1swXSA+PiA3KSAmIDEpOworCQkJcHJfZGVidWcoIkZhbiAlZDogbW9uPSVkIGN0cmw9JWQgaW52PSVkXG4iLCAzLAorCQkJCSBjb25mcmVnWzFdICYgMSwgKGNvbmZyZWdbMV0gPj4gMSkgJiAxLAorCQkJCSAoY29uZnJlZ1sxXSA+PiAyKSAmIDEpOwogCQl9IGVsc2UgaWYgKGk9PTEpIHsgLyogVm9sdGFnZXMgKi8KIAkJCS8qIEFyZSB3ZSB1c2luZyB0aGVybWlzdG9ycz8gKi8KIAkJCWlmICgqZGV2aWQgPT0gMHhFOSkgeyAvKiBQQzg3MzY2ICovCkBAIC0xMDcxLDE0ICsxMDcwLDEyIEBACiAJCQkJY29uZnJlZ1szXSA9IHN1cGVyaW9faW5iKHNpb2FkZHIsIDB4MjUpOwogCiAJCQkJaWYgKGNvbmZyZWdbMl0gJiAweDQwKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gInBjODczNjA6IFVzaW5nICIKLQkJCQkJICAgICAgICJ0aGVybWlzdG9ycyBmb3IgdGVtcGVyYXR1cmUgIgotCQkJCQkgICAgICAgIm1vbml0b3JpbmdcbiIpOworCQkJCQlwcl9pbmZvKCJVc2luZyB0aGVybWlzdG9ycyBmb3IgIgorCQkJCQkJInRlbXBlcmF0dXJlIG1vbml0b3JpbmdcbiIpOwogCQkJCX0KIAkJCQlpZiAoY29uZnJlZ1szXSAmIDB4RTApIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAicGM4NzM2MDogVklEICIKLQkJCQkJICAgICAgICJpbnB1dHMgcm91dGVkIChtb2RlICV1KVxuIiwKLQkJCQkJICAgICAgIGNvbmZyZWdbM10gPj4gNSk7CisJCQkJCXByX2luZm8oIlZJRCBpbnB1dHMgcm91dGVkIChtb2RlICV1KVxuIiwKKwkJCQkJCWNvbmZyZWdbM10gPj4gNSk7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0xNjE2LDcgKzE2MTMsNyBAQAogCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInBjODczNjAiLCBhZGRyZXNzKTsKIAlpZiAoIXBkZXYpIHsKIAkJZXJyID0gLUVOT01FTTsKLQkJcHJpbnRrKEtFUk5fRVJSICJwYzg3MzYwOiBEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwcl9lcnIoIkRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTE2MzksMTUgKzE2MzYsMTMgQEAKIAogCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHJlcywgcmVzX2NvdW50KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGM4NzM2MDogRGV2aWNlIHJlc291cmNlcyBhZGRpdGlvbiBmYWlsZWQgIgotCQkgICAgICAgIiglZClcbiIsIGVycik7CisJCXByX2VycigiRGV2aWNlIHJlc291cmNlcyBhZGRpdGlvbiBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKIAkJZ290byBleGl0X2RldmljZV9wdXQ7CiAJfQogCiAJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGM4NzM2MDogRGV2aWNlIGFkZGl0aW9uIGZhaWxlZCAoJWQpXG4iLAotCQkgICAgICAgZXJyKTsKKwkJcHJfZXJyKCJEZXZpY2UgYWRkaXRpb24gZmFpbGVkICglZClcbiIsIGVycik7CiAJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OwogCX0KIApAQCAtMTY2Niw4ICsxNjYxLDcgQEAKIAogCWlmIChwYzg3MzYwX2ZpbmQoMHgyZSwgJmRldmlkLCBleHRyYV9pc2EpCiAJICYmIHBjODczNjBfZmluZCgweDRlLCAmZGV2aWQsIGV4dHJhX2lzYSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicGM4NzM2MDogUEM4NzM2eCBub3QgZGV0ZWN0ZWQsICIKLQkJICAgICAgICJtb2R1bGUgbm90IGluc2VydGVkLlxuIik7CisJCXByX3dhcm4oIlBDODczNnggbm90IGRldGVjdGVkLCBtb2R1bGUgbm90IGluc2VydGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xNjgwLDggKzE2NzQsNyBAQAogCX0KIAogCWlmIChhZGRyZXNzID09IDB4MDAwMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJwYzg3MzYwOiBObyBhY3RpdmUgbG9naWNhbCBkZXZpY2UsICIKLQkJICAgICAgICJtb2R1bGUgbm90IGluc2VydGVkLlxuIik7CisJCXByX3dhcm4oIk5vIGFjdGl2ZSBsb2dpY2FsIGRldmljZSwgbW9kdWxlIG5vdCBpbnNlcnRlZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9wYzg3NDI3LmMgYi9kcml2ZXJzL2h3bW9uL3BjODc0MjcuYwppbmRleCA5ZWM0ZGFhLi44ZGEyMTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3BjODc0MjcuYworKysgYi9kcml2ZXJzL2h3bW9uL3BjODc0MjcuYwpAQCAtMjIsNiArMjIsOCBAQAogICogIG1vZGUsIGFuZCB2b2x0YWdlcyBhcmVuJ3Qgc3VwcG9ydGVkIGF0IGFsbC4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMTA3Nyw3ICsxMDc5LDcgQEAKIAlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjODc0MjdfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkgewogCQllcnIgPSAtRU5PTUVNOwotCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJfZXJyKCJPdXQgb2YgbWVtb3J5XG4iKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMTE5NiwyOCArMTE5OCwyNiBAQAogCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoRFJWTkFNRSwgcmVzWzBdLnN0YXJ0KTsKIAlpZiAoIXBkZXYpIHsKIAkJZXJyID0gLUVOT01FTTsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVk5BTUUgIjogRGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcHJfZXJyKCJEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgcmVzLCByZXNfY291bnQpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVk5BTUUgIjogRGV2aWNlIHJlc291cmNlIGFkZGl0aW9uIGZhaWxlZCAiCi0JCSAgICAgICAiKCVkKVxuIiwgZXJyKTsKKwkJcHJfZXJyKCJEZXZpY2UgcmVzb3VyY2UgYWRkaXRpb24gZmFpbGVkICglZClcbiIsIGVycik7CiAJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OwogCX0KIAogCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBzaW9fZGF0YSwKIAkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwYzg3NDI3X3Npb19kYXRhKSk7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBQbGF0Zm9ybSBkYXRhIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcHJfZXJyKCJQbGF0Zm9ybSBkYXRhIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBleGl0X2RldmljZV9wdXQ7CiAJfQogCiAJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSBhZGRpdGlvbiBmYWlsZWQgKCVkKVxuIiwKLQkJICAgICAgIGVycik7CisJCXByX2VycigiRGV2aWNlIGFkZGl0aW9uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwogCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKIAl9CiAKQEAgLTEyNDksMjMgKzEyNDksMjMgQEAKIAogCQl2YWwgPSBzdXBlcmlvX2luYihzaW9hZGRyLCBTSU9SRUdfQUNUKTsKIAkJaWYgKCEodmFsICYgMHgwMSkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gRFJWTkFNRSAiOiBMb2dpY2FsIGRldmljZSAweCUwMnggIgotCQkJICAgICAgICJub3QgYWN0aXZhdGVkXG4iLCBsb2dkZXZbaV0pOworCQkJcHJfaW5mbygiTG9naWNhbCBkZXZpY2UgMHglMDJ4IG5vdCBhY3RpdmF0ZWRcbiIsCisJCQkJbG9nZGV2W2ldKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJdmFsID0gc3VwZXJpb19pbmIoc2lvYWRkciwgU0lPUkVHX01BUCk7CiAJCWlmICh2YWwgJiAweDAxKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVk5BTUUgIjogTG9naWNhbCBkZXZpY2UgMHglMDJ4ICIKLQkJCSAgICAgICAiaXMgbWVtb3J5LW1hcHBlZCwgY2FuJ3QgdXNlXG4iLCBsb2dkZXZbaV0pOworCQkJcHJfd2FybigiTG9naWNhbCBkZXZpY2UgMHglMDJ4IGlzIG1lbW9yeS1tYXBwZWQsICIKKwkJCQkiY2FuJ3QgdXNlXG4iLCBsb2dkZXZbaV0pOwogCQkJY29udGludWU7CiAJCX0KIAogCQl2YWwgPSAoc3VwZXJpb19pbmIoc2lvYWRkciwgU0lPUkVHX0lPQkFTRSkgPDwgOCkKIAkJICAgIHwgc3VwZXJpb19pbmIoc2lvYWRkciwgU0lPUkVHX0lPQkFTRSArIDEpOwogCQlpZiAoIXZhbCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZOQU1FICI6IEkvTyBiYXNlIGFkZHJlc3Mgbm90IHNldCAiCi0JCQkgICAgICAgImZvciBsb2dpY2FsIGRldmljZSAweCUwMnhcbiIsIGxvZ2RldltpXSk7CisJCQlwcl9pbmZvKCJJL08gYmFzZSBhZGRyZXNzIG5vdCBzZXQgZm9yIGxvZ2ljYWwgZGV2aWNlICIKKwkJCQkiMHglMDJ4XG4iLCBsb2dkZXZbaV0pOwogCQkJY29udGludWU7CiAJCX0KIAkJc2lvX2RhdGEtPmFkZHJlc3NbaV0gPSB2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3ZpYTY4NmEuYyBiL2RyaXZlcnMvaHdtb24vdmlhNjg2YS5jCmluZGV4IDEzZThkMjEuLjI1ZTkxNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdmlhNjg2YS5jCisrKyBiL2RyaXZlcnMvaHdtb24vdmlhNjg2YS5jCkBAIC02ODksNiArNjg5LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHZpYTY4NmFfdXBkYXRlX2Zhbl9kaXYoc3RydWN0IHZpYTY4NmFfZGF0YSAqZGF0YSkKK3sKKwlpbnQgcmVnID0gdmlhNjg2YV9yZWFkX3ZhbHVlKGRhdGEsIFZJQTY4NkFfUkVHX0ZBTkRJVik7CisJZGF0YS0+ZmFuX2RpdlswXSA9IChyZWcgPj4gNCkgJiAweDAzOworCWRhdGEtPmZhbl9kaXZbMV0gPSByZWcgPj4gNjsKK30KKwogc3RhdGljIHZvaWQgX19kZXZpbml0IHZpYTY4NmFfaW5pdF9kZXZpY2Uoc3RydWN0IHZpYTY4NmFfZGF0YSAqZGF0YSkKIHsKIAl1OCByZWc7CkBAIC03MDIsNiArNzA5LDkgQEAKIAl2aWE2ODZhX3dyaXRlX3ZhbHVlKGRhdGEsIFZJQTY4NkFfUkVHX1RFTVBfTU9ERSwKIAkJCSAgICAocmVnICYgflZJQTY4NkFfVEVNUF9NT0RFX01BU0spCiAJCQkgICAgfCBWSUE2ODZBX1RFTVBfTU9ERV9DT05USU5VT1VTKTsKKworCS8qIFByZS1yZWFkIGZhbiBjbG9jayBkaXZpc29yIHZhbHVlcyAqLworCXZpYTY4NmFfdXBkYXRlX2Zhbl9kaXYoZGF0YSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmlhNjg2YV9kYXRhICp2aWE2ODZhX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtNzUzLDkgKzc2Myw3IEBACiAJCSAgICAodmlhNjg2YV9yZWFkX3ZhbHVlKGRhdGEsIFZJQTY4NkFfUkVHX1RFTVBfTE9XMjMpICYKIAkJICAgICAweGMwKSA+PiA2OwogCi0JCWkgPSB2aWE2ODZhX3JlYWRfdmFsdWUoZGF0YSwgVklBNjg2QV9SRUdfRkFORElWKTsKLQkJZGF0YS0+ZmFuX2RpdlswXSA9IChpID4+IDQpICYgMHgwMzsKLQkJZGF0YS0+ZmFuX2RpdlsxXSA9IGkgPj4gNjsKKwkJdmlhNjg2YV91cGRhdGVfZmFuX2RpdihkYXRhKTsKIAkJZGF0YS0+YWxhcm1zID0KIAkJICAgIHZpYTY4NmFfcmVhZF92YWx1ZShkYXRhLAogCQkJCSAgICAgICBWSUE2ODZBX1JFR19BTEFSTTEpIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jIGIvZHJpdmVycy9od21vbi93ODM3ODFkLmMKaW5kZXggYzg0YjliNC4uZWVkNDNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3ODFkLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3ODFkLmMKQEAgLTMzLDYgKzMzLDggQEAKIAogKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTE3OTgsOCArMTgwMCw3IEBACiAJICogaW5kaXZpZHVhbGx5IGZvciB0aGUgcHJvYmluZyBwaGFzZS4gKi8KIAlmb3IgKHBvcnQgPSBhZGRyZXNzOyBwb3J0IDwgYWRkcmVzcyArIFc4Mzc4MURfRVhURU5UOyBwb3J0KyspIHsKIAkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwb3J0LCAxLCAidzgzNzgxZCIpKSB7Ci0JCQlwcl9kZWJ1ZygidzgzNzgxZDogRmFpbGVkIHRvIHJlcXVlc3QgcG9ydCAweCV4XG4iLAotCQkJCSBwb3J0KTsKKwkJCXByX2RlYnVnKCJGYWlsZWQgdG8gcmVxdWVzdCBwb3J0IDB4JXhcbiIsIHBvcnQpOwogCQkJZ290byByZWxlYXNlOwogCQl9CiAJfQpAQCAtMTgxMSw3ICsxODEyLDcgQEAKIAlpZiAoaW5iX3AoYWRkcmVzcyArIDIpICE9IHZhbAogCSB8fCBpbmJfcChhZGRyZXNzICsgMykgIT0gdmFsCiAJIHx8IGluYl9wKGFkZHJlc3MgKyA3KSAhPSB2YWwpIHsKLQkJcHJfZGVidWcoInc4Mzc4MWQ6IERldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCAxXG4iKTsKKwkJcHJfZGVidWcoIkRldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCAlZFxuIiwgMSk7CiAJCWdvdG8gcmVsZWFzZTsKIAl9CiAjdW5kZWYgUkVBTExZX1NMT1dfSU8KQEAgLTE4MjAsMTQgKzE4MjEsMTQgQEAKIAkgICBNU0IgKGJ1c3kgZmxhZykgc2hvdWxkIGJlIGNsZWFyIGluaXRpYWxseSwgc2V0IGFmdGVyIHRoZSB3cml0ZS4gKi8KIAlzYXZlID0gaW5iX3AoYWRkcmVzcyArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKIAlpZiAoc2F2ZSAmIDB4ODApIHsKLQkJcHJfZGVidWcoInc4Mzc4MWQ6IERldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCAyXG4iKTsKKwkJcHJfZGVidWcoIkRldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCAlZFxuIiwgMik7CiAJCWdvdG8gcmVsZWFzZTsKIAl9CiAJdmFsID0gfnNhdmUgJiAweDdmOwogCW91dGJfcCh2YWwsIGFkZHJlc3MgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CiAJaWYgKGluYl9wKGFkZHJlc3MgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCkgIT0gKHZhbCB8IDB4ODApKSB7CiAJCW91dGJfcChzYXZlLCBhZGRyZXNzICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQlwcl9kZWJ1ZygidzgzNzgxZDogRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwIDNcbiIpOworCQlwcl9kZWJ1ZygiRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwICVkXG4iLCAzKTsKIAkJZ290byByZWxlYXNlOwogCX0KIApAQCAtMTgzNSw3ICsxODM2LDcgQEAKIAlvdXRiX3AoVzgzNzgxRF9SRUdfQ09ORklHLCBhZGRyZXNzICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwogCXZhbCA9IGluYl9wKGFkZHJlc3MgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CiAJaWYgKHZhbCAmIDB4ODApIHsKLQkJcHJfZGVidWcoInc4Mzc4MWQ6IERldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCA0XG4iKTsKKwkJcHJfZGVidWcoIkRldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCAlZFxuIiwgNCk7CiAJCWdvdG8gcmVsZWFzZTsKIAl9CiAJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssIGFkZHJlc3MgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CkBAIC0xODQ0LDE5ICsxODQ1LDE5IEBACiAJdmFsID0gaW5iX3AoYWRkcmVzcyArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKIAlpZiAoKCEoc2F2ZSAmIDB4ODApICYmICh2YWwgIT0gMHhhMykpCiAJIHx8ICgoc2F2ZSAmIDB4ODApICYmICh2YWwgIT0gMHg1YykpKSB7Ci0JCXByX2RlYnVnKCJ3ODM3ODFkOiBEZXRlY3Rpb24gZmFpbGVkIGF0IHN0ZXAgNVxuIik7CisJCXByX2RlYnVnKCJEZXRlY3Rpb24gZmFpbGVkIGF0IHN0ZXAgJWRcbiIsIDUpOwogCQlnb3RvIHJlbGVhc2U7CiAJfQogCW91dGJfcChXODM3ODFEX1JFR19JMkNfQUREUiwgYWRkcmVzcyArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKIAl2YWwgPSBpbmJfcChhZGRyZXNzICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOwogCWlmICh2YWwgPCAweDAzIHx8IHZhbCA+IDB4NzcpIHsJLyogTm90IGEgdmFsaWQgSTJDIGFkZHJlc3MgKi8KLQkJcHJfZGVidWcoInc4Mzc4MWQ6IERldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCA2XG4iKTsKKwkJcHJfZGVidWcoIkRldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCAlZFxuIiwgNik7CiAJCWdvdG8gcmVsZWFzZTsKIAl9CiAKIAkvKiBUaGUgYnVzeSBmbGFnIHNob3VsZCBiZSBjbGVhciBhZ2FpbiAqLwogCWlmIChpbmJfcChhZGRyZXNzICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpICYgMHg4MCkgewotCQlwcl9kZWJ1ZygidzgzNzgxZDogRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwIDdcbiIpOworCQlwcl9kZWJ1ZygiRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwICVkXG4iLCA3KTsKIAkJZ290byByZWxlYXNlOwogCX0KIApAQCAtMTg3MSw3ICsxODcyLDcgQEAKIAkJZm91bmQgPSAxOwogCiAJaWYgKGZvdW5kKQotCQlwcl9pbmZvKCJ3ODM3ODFkOiBGb3VuZCBhICVzIGNoaXAgYXQgJSN4XG4iLAorCQlwcl9pbmZvKCJGb3VuZCBhICVzIGNoaXAgYXQgJSN4XG4iLAogCQkJdmFsID09IDB4MzAgPyAiVzgzNzgyRCIgOiAiVzgzNzgxRCIsIChpbnQpYWRkcmVzcyk7CiAKICByZWxlYXNlOgpAQCAtMTg5NCwyMSArMTg5NSwxOSBAQAogCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInc4Mzc4MWQiLCBhZGRyZXNzKTsKIAlpZiAoIXBkZXYpIHsKIAkJZXJyID0gLUVOT01FTTsKLQkJcHJpbnRrKEtFUk5fRVJSICJ3ODM3ODFkOiBEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwcl9lcnIoIkRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmcmVzLCAxKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidzgzNzgxZDogRGV2aWNlIHJlc291cmNlIGFkZGl0aW9uIGZhaWxlZCAiCi0JCSAgICAgICAiKCVkKVxuIiwgZXJyKTsKKwkJcHJfZXJyKCJEZXZpY2UgcmVzb3VyY2UgYWRkaXRpb24gZmFpbGVkICglZClcbiIsIGVycik7CiAJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OwogCX0KIAogCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInc4Mzc4MWQ6IERldmljZSBhZGRpdGlvbiBmYWlsZWQgKCVkKVxuIiwKLQkJICAgICAgIGVycik7CisJCXByX2VycigiRGV2aWNlIGFkZGl0aW9uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwogCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jIGIvZHJpdmVycy9od21vbi93ODM3OTJkLmMKaW5kZXggNjc5NzE4ZS4uNjM4NDFmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3OTJkLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3OTJkLmMKQEAgLTY5MSw3ICs2OTEsNyBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotc2hvd19yZWdzX2NoYXNzaXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKK3Nob3dfY2hhc3NpcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJY2hhciAqYnVmKQogewogCXN0cnVjdCB3ODM3OTJkX2RhdGEgKmRhdGEgPSB3ODM3OTJkX3VwZGF0ZV9kZXZpY2UoZGV2KTsKQEAgLTY5OSw2ICs2OTksMTYgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKK3Nob3dfcmVnc19jaGFzc2lzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJZGV2X3dhcm4oZGV2LAorCQkgIkF0dHJpYnV0ZSAlcyBpcyBkZXByZWNhdGVkLCB1c2UgaW50cnVzaW9uMF9hbGFybSBpbnN0ZWFkXG4iLAorCQkgImNoYXNzaXMiKTsKKwlyZXR1cm4gc2hvd19jaGFzc2lzKGRldiwgYXR0ciwgYnVmKTsKK30KKworc3RhdGljIHNzaXplX3QKIHNob3dfY2hhc3Npc19jbGVhcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHc4Mzc5MmRfZGF0YSAqZGF0YSA9IHc4Mzc5MmRfdXBkYXRlX2RldmljZShkZXYpOwpAQCAtNzA2LDcgKzcxNiw3IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1zdG9yZV9jaGFzc2lzX2NsZWFyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCitzdG9yZV9jaGFzc2lzX2NsZWFyX2xlZ2FjeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKQEAgLTcxNCw2ICs3MjQsMTAgQEAKIAl1MzIgdmFsOwogCXU4IHRlbXAxID0gMCwgdGVtcDIgPSAwOwogCisJZGV2X3dhcm4oZGV2LAorCQkgIkF0dHJpYnV0ZSAlcyBpcyBkZXByZWNhdGVkLCB1c2UgaW50cnVzaW9uMF9hbGFybSBpbnN0ZWFkXG4iLAorCQkgImNoYXNzaXNfY2xlYXIiKTsKKwogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5jaGFzc2lzX2NsZWFyID0gU0VOU09SU19MSU1JVCh2YWwsIDAgLDEpOwpAQCAtNzI2LDYgKzc0MCwyNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHNzaXplX3QKK3N0b3JlX2NoYXNzaXNfY2xlYXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHc4Mzc5MmRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCXU4IHJlZzsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSB8fCB2YWwgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmVnID0gdzgzNzkyZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkyRF9SRUdfQ0hBU1NJU19DTFIpOworCXc4Mzc5MmRfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTJEX1JFR19DSEFTU0lTX0NMUiwgcmVnIHwgMHg4MCk7CisJZGF0YS0+dmFsaWQgPSAwOwkJLyogRm9yY2UgY2FjaGUgcmVmcmVzaCAqLworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCiAvKiBGb3IgU21hcnQgRmFuIEkgLyBUaGVybWFsIENydWlzZSAqLwogc3RhdGljIHNzaXplX3QKIHNob3dfdGhlcm1hbF9jcnVpc2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTEwMTIsNyArMTA0Nyw5IEBACiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjZfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDIzKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihjaGFzc2lzLCBTX0lSVUdPLCBzaG93X3JlZ3NfY2hhc3NpcywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoY2hhc3Npc19jbGVhciwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCQlzaG93X2NoYXNzaXNfY2xlYXIsIHN0b3JlX2NoYXNzaXNfY2xlYXIpOworCQkJc2hvd19jaGFzc2lzX2NsZWFyLCBzdG9yZV9jaGFzc2lzX2NsZWFyX2xlZ2FjeSk7CitzdGF0aWMgREVWSUNFX0FUVFIoaW50cnVzaW9uMF9hbGFybSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQlzaG93X2NoYXNzaXMsIHN0b3JlX2NoYXNzaXNfY2xlYXIpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20xLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd20sIHN0b3JlX3B3bSwgMCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTIsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3B3bSwgc3RvcmVfcHdtLCAxKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMywgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtLCBzdG9yZV9wd20sIDIpOwpAQCAtMTIxNCw2ICsxMjUxLDcgQEAKIAkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCiAJJmRldl9hdHRyX2NoYXNzaXMuYXR0ciwKIAkmZGV2X2F0dHJfY2hhc3Npc19jbGVhci5hdHRyLAorCSZkZXZfYXR0cl9pbnRydXNpb24wX2FsYXJtLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90b2xlcmFuY2UxLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90aGVybWFsX2NydWlzZTEuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RvbGVyYW5jZTIuZGV2X2F0dHIuYXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzkzLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5My5jCmluZGV4IDhlNTQwYWQuLmUzYmRlZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNzkzLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3OTMuYwpAQCAtNTEsNyArNTEsNiBAQAogI2RlZmluZSBXQVRDSERPR19USU1FT1VUIDIJLyogMiBtaW51dGUgZGVmYXVsdCB0aW1lb3V0ICovCiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgREVGSU5FX01VVEVYKHdhdGNoZG9nX211dGV4KTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCiAJCQkJCQlJMkNfQ0xJRU5UX0VORCB9OwogCkBAIC00MjEsMTggKzQyMCw0MyBAQAogCiAvKiBXcml0ZSBhbnkgdmFsdWUgdG8gY2xlYXIgY2hhc3NpcyBhbGFybSAqLwogc3RhdGljIHNzaXplX3QKK3N0b3JlX2NoYXNzaXNfY2xlYXJfbGVnYWN5KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJCQkgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1OCB2YWw7CisKKwlkZXZfd2FybihkZXYsICJBdHRyaWJ1dGUgY2hhc3NpcyBpcyBkZXByZWNhdGVkLCAiCisJCSAidXNlIGludHJ1c2lvbjBfYWxhcm0gaW5zdGVhZFxuIik7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJdmFsID0gdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0NMUl9DSEFTU0lTKTsKKwl2YWwgfD0gMHg4MDsKKwl3ODM3OTNfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0NMUl9DSEFTU0lTLCB2YWwpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworLyogV3JpdGUgMCB0byBjbGVhciBjaGFzc2lzIGFsYXJtICovCitzdGF0aWMgc3NpemVfdAogc3RvcmVfY2hhc3Npc19jbGVhcihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAogCQkgICAgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdTggdmFsOworCXVuc2lnbmVkIGxvbmcgdmFsOworCXU4IHJlZzsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSB8fCB2YWwgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JdmFsID0gdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0NMUl9DSEFTU0lTKTsKLQl2YWwgfD0gMHg4MDsKLQl3ODM3OTNfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0NMUl9DSEFTU0lTLCB2YWwpOworCXJlZyA9IHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19DTFJfQ0hBU1NJUyk7CisJdzgzNzkzX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19DTFJfQ0hBU1NJUywgcmVnIHwgMHg4MCk7CisJZGF0YS0+dmFsaWQgPSAwOwkJLyogRm9yY2UgY2FjaGUgcmVmcmVzaCAqLwogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTExMDIsNiArMTEyNiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiBzZGFfc2luZ2xlX2ZpbGVzW10gPSB7CiAJU0VOU09SX0FUVFJfMihjaGFzc2lzLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19hbGFybV9iZWVwLAorCQkgICAgICBzdG9yZV9jaGFzc2lzX2NsZWFyX2xlZ2FjeSwgQUxBUk1fU1RBVFVTLCAzMCksCisJU0VOU09SX0FUVFJfMihpbnRydXNpb24wX2FsYXJtLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19hbGFybV9iZWVwLAogCQkgICAgICBzdG9yZV9jaGFzc2lzX2NsZWFyLCBBTEFSTV9TVEFUVVMsIDMwKSwKIAlTRU5TT1JfQVRUUl8yKGJlZXBfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19iZWVwX2VuYWJsZSwKIAkJICAgICAgc3RvcmVfYmVlcF9lbmFibGUsIE5PVF9VU0VELCBOT1RfVVNFRCksCkBAIC0xMzIzLDcgKzEzNDksNyBAQAogc3RhdGljIGxvbmcgd2F0Y2hkb2dfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJCS5vcHRpb25zID0gV0RJT0ZfS0VFUEFMSVZFUElORyB8CiAJCQkgICBXRElPRl9TRVRUSU1FT1VUIHwKIAkJCSAgIFdESU9GX0NBUkRSRVNFVCwKQEAgLTEzMzMsNyArMTM1OSw2IEBACiAJaW50IHZhbCwgcmV0ID0gMDsKIAlzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAKLQltdXRleF9sb2NrKCZ3YXRjaGRvZ19tdXRleCk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CiAJCWlmICghbm93YXlvdXQpCkBAIC0xMzg3LDcgKzE0MTIsNiBAQAogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9UVFk7CiAJfQotCW11dGV4X3VubG9jaygmd2F0Y2hkb2dfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzk1LmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5NS5jCmluZGV4IGNkYmM3NDQuLjg0NTIzMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNzk1LmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3OTUuYwpAQCAtNDU4LDYgKzQ1OCw3IEBACiB7CiAJc3RydWN0IHc4Mzc5NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IGksIGxpbWl0OworCXU4IGxzYjsKIAogCS8qIFJlYWQgdGhlIHZvbHRhZ2UgbGltaXRzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+aW4pOyBpKyspIHsKQEAgLTQ3OSw5ICs0ODAsOCBAQAogCX0KIAogCS8qIFJlYWQgdGhlIGZhbiBsaW1pdHMgKi8KKwlsc2IgPSAwOyAvKiBTaWxlbnQgZmFsc2UgZ2NjIHdhcm5pbmcgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT5mYW4pOyBpKyspIHsKLQkJdTggbHNiOwotCiAJCS8qIEVhY2ggcmVnaXN0ZXIgY29udGFpbnMgTFNCIGZvciAyIGZhbnMsIGJ1dCB3ZSB3YW50IHRvCiAJCSAqIHJlYWQgaXQgb25seSBvbmNlIHRvIHNhdmUgdGltZSAqLwogCQlpZiAoKGkgJiAxKSA9PSAwICYmIChkYXRhLT5oYXNfZmFuICYgKDMgPDwgaSkpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tYml0LmMgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYwppbmRleCBhMzllNmNmLi4zODMxOWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYworKysgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYwpAQCAtNjAwLDEyICs2MDAsMTQgQEAKIC8qCiAgKiByZWdpc3RlcmluZyBmdW5jdGlvbnMgdG8gbG9hZCBhbGdvcml0aG1zIGF0IHJ1bnRpbWUKICAqLwotc3RhdGljIGludCBpMmNfYml0X3ByZXBhcmVfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyBpbnQgX19pMmNfYml0X2FkZF9idXMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLAorCQkJICAgICBpbnQgKCphZGRfYWRhcHRlcikoc3RydWN0IGkyY19hZGFwdGVyICopKQogewogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSAqYml0X2FkYXAgPSBhZGFwLT5hbGdvX2RhdGE7CisJaW50IHJldDsKIAogCWlmIChiaXRfdGVzdCkgewotCQlpbnQgcmV0ID0gdGVzdF9idXMoYml0X2FkYXAsIGFkYXAtPm5hbWUpOworCQlyZXQgPSB0ZXN0X2J1cyhiaXRfYWRhcCwgYWRhcC0+bmFtZSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNjE0LDMwICs2MTYsMjcgQEAKIAlhZGFwLT5hbGdvID0gJmkyY19iaXRfYWxnbzsKIAlhZGFwLT5yZXRyaWVzID0gMzsKIAorCXJldCA9IGFkZF9hZGFwdGVyKGFkYXApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogQ29tcGxhaW4gaWYgU0NMIGNhbid0IGJlIHJlYWQgKi8KKwlpZiAoYml0X2FkYXAtPmdldHNjbCA9PSBOVUxMKSB7CisJCWRldl93YXJuKCZhZGFwLT5kZXYsICJOb3QgSTJDIGNvbXBsaWFudDogY2FuJ3QgcmVhZCBTQ0xcbiIpOworCQlkZXZfd2FybigmYWRhcC0+ZGV2LCAiQnVzIG1heSBiZSB1bnJlbGlhYmxlXG4iKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKIGludCBpMmNfYml0X2FkZF9idXMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQogewotCWludCBlcnI7Ci0KLQllcnIgPSBpMmNfYml0X3ByZXBhcmVfYnVzKGFkYXApOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlyZXR1cm4gaTJjX2FkZF9hZGFwdGVyKGFkYXApOworCXJldHVybiBfX2kyY19iaXRfYWRkX2J1cyhhZGFwLCBpMmNfYWRkX2FkYXB0ZXIpOwogfQogRVhQT1JUX1NZTUJPTChpMmNfYml0X2FkZF9idXMpOwogCiBpbnQgaTJjX2JpdF9hZGRfbnVtYmVyZWRfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKIHsKLQlpbnQgZXJyOwotCi0JZXJyID0gaTJjX2JpdF9wcmVwYXJlX2J1cyhhZGFwKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIGkyY19hZGRfbnVtYmVyZWRfYWRhcHRlcihhZGFwKTsKKwlyZXR1cm4gX19pMmNfYml0X2FkZF9idXMoYWRhcCwgaTJjX2FkZF9udW1iZXJlZF9hZGFwdGVyKTsKIH0KIEVYUE9SVF9TWU1CT0woaTJjX2JpdF9hZGRfbnVtYmVyZWRfYnVzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwppbmRleCAwMjgzNWNlLi43OTc5YWVmN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAvKiBJODAxIFNNQnVzIGFkZHJlc3Mgb2Zmc2V0cyAqLwogI2RlZmluZSBTTUJIU1RTVFMocCkJKDAgKyAocCktPnNtYmEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5mb3JjZTIuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMi5jCmluZGV4IGE2MDVhNTAuLmZmMWUxMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMi5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMi5jCkBAIC00MzIsNyArNDMyLDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IG5mb3JjZTJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IG5mb3JjZTJfc21idXMgKnNtYnVzZXMgPSAodm9pZCopIHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBuZm9yY2UyX3NtYnVzICpzbWJ1c2VzID0gcGNpX2dldF9kcnZkYXRhKGRldik7CiAKIAluZm9yY2UyX3NldF9yZWZlcmVuY2UoTlVMTCk7CiAJaWYgKHNtYnVzZXNbMF0uYmFzZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1ub21hZGlrLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5vbWFkaWsuYwppbmRleCBjOWZmZmQwLi4yYmQzNDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5vbWFkaWsuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5vbWFkaWsuYwpAQCAtNDM0LDcgKzQzNCw3IEBACiAJfQogCiAJaWYgKHRpbWVvdXQgPT0gMCkgewotCQkvKiBjb250cm9sZXIgaGFzIHRpbWVkb3V0LCByZS1pbml0IHRoZSBoL3cgKi8KKwkJLyogY29udHJvbGxlciBoYXMgdGltZWRvdXQsIHJlLWluaXQgdGhlIGgvdyAqLwogCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgImNvbnRyb2xsZXIgdGltZWQgb3V0LCByZS1pbml0IGgvd1xuIik7CiAJCSh2b2lkKSBpbml0X2h3KGRldik7CiAJCXN0YXR1cyA9IC1FVElNRURPVVQ7CkBAIC00OTgsNyArNDk4LDcgQEAKIAl9CiAKIAlpZiAodGltZW91dCA9PSAwKSB7Ci0JCS8qIGNvbnRyb2xlciBoYXMgdGltZWRvdXQsIHJlLWluaXQgdGhlIGgvdyAqLworCQkvKiBjb250cm9sbGVyIGhhcyB0aW1lZG91dCwgcmUtaW5pdCB0aGUgaC93ICovCiAJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiY29udHJvbGxlciB0aW1lZCBvdXQsIHJlLWluaXQgaC93XG4iKTsKIAkJKHZvaWQpIGluaXRfaHcoZGV2KTsKIAkJc3RhdHVzID0gLUVUSU1FRE9VVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCmluZGV4IDZiNGNjNTYuLmM3ZGI2OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwpAQCAtMTM2Miw3ICsxMzYyLDcgQEAKICAqCiAgKiBSZXR1cm5zIG5lZ2F0aXZlIGVycm5vLCBvciBlbHNlIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KICAqLwotaW50IGkyY19tYXN0ZXJfc2VuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBjaGFyICpidWYsIGludCBjb3VudCkKK2ludCBpMmNfbWFzdGVyX3NlbmQoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBjbGllbnQtPmFkYXB0ZXI7CkBAIC0xMzg5LDcgKzEzODksNyBAQAogICoKICAqIFJldHVybnMgbmVnYXRpdmUgZXJybm8sIG9yIGVsc2UgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLgogICovCi1pbnQgaTJjX21hc3Rlcl9yZWN2KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoraW50IGkyY19tYXN0ZXJfcmVjdihjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBjbGllbnQtPmFkYXB0ZXI7CiAJc3RydWN0IGkyY19tc2cgbXNnOwpAQCAtMTY3OSw3ICsxNjc5LDcgQEAKICAqIFRoaXMgZXhlY3V0ZXMgdGhlIFNNQnVzICJyZWNlaXZlIGJ5dGUiIHByb3RvY29sLCByZXR1cm5pbmcgbmVnYXRpdmUgZXJybm8KICAqIGVsc2UgdGhlIGJ5dGUgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLgogICovCi1zMzIgaTJjX3NtYnVzX3JlYWRfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorczMyIGkyY19zbWJ1c19yZWFkX2J5dGUoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAl1bmlvbiBpMmNfc21idXNfZGF0YSBkYXRhOwogCWludCBzdGF0dXM7CkBAIC0xNjk5LDcgKzE2OTksNyBAQAogICogVGhpcyBleGVjdXRlcyB0aGUgU01CdXMgInNlbmQgYnl0ZSIgcHJvdG9jb2wsIHJldHVybmluZyBuZWdhdGl2ZSBlcnJubwogICogZWxzZSB6ZXJvIG9uIHN1Y2Nlc3MuCiAgKi8KLXMzMiBpMmNfc21idXNfd3JpdGVfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCB2YWx1ZSkKK3MzMiBpMmNfc21idXNfd3JpdGVfYnl0ZShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCB2YWx1ZSkKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3hmZXIoY2xpZW50LT5hZGFwdGVyLCBjbGllbnQtPmFkZHIsIGNsaWVudC0+ZmxhZ3MsCiAJICAgICAgICAgICAgICAgICAgICAgIEkyQ19TTUJVU19XUklURSwgdmFsdWUsIEkyQ19TTUJVU19CWVRFLCBOVUxMKTsKQEAgLTE3MTQsNyArMTcxNCw3IEBACiAgKiBUaGlzIGV4ZWN1dGVzIHRoZSBTTUJ1cyAicmVhZCBieXRlIiBwcm90b2NvbCwgcmV0dXJuaW5nIG5lZ2F0aXZlIGVycm5vCiAgKiBlbHNlIGEgZGF0YSBieXRlIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZS4KICAqLwotczMyIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kKQorczMyIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kKQogewogCXVuaW9uIGkyY19zbWJ1c19kYXRhIGRhdGE7CiAJaW50IHN0YXR1czsKQEAgLTE3MzUsNyArMTczNSw4IEBACiAgKiBUaGlzIGV4ZWN1dGVzIHRoZSBTTUJ1cyAid3JpdGUgYnl0ZSIgcHJvdG9jb2wsIHJldHVybmluZyBuZWdhdGl2ZSBlcnJubwogICogZWxzZSB6ZXJvIG9uIHN1Y2Nlc3MuCiAgKi8KLXMzMiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQsIHU4IHZhbHVlKQorczMyIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwKKwkJCSAgICAgIHU4IHZhbHVlKQogewogCXVuaW9uIGkyY19zbWJ1c19kYXRhIGRhdGE7CiAJZGF0YS5ieXRlID0gdmFsdWU7CkBAIC0xNzUzLDcgKzE3NTQsNyBAQAogICogVGhpcyBleGVjdXRlcyB0aGUgU01CdXMgInJlYWQgd29yZCIgcHJvdG9jb2wsIHJldHVybmluZyBuZWdhdGl2ZSBlcnJubwogICogZWxzZSBhIDE2LWJpdCB1bnNpZ25lZCAid29yZCIgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLgogICovCi1zMzIgaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQpCitzMzIgaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQpCiB7CiAJdW5pb24gaTJjX3NtYnVzX2RhdGEgZGF0YTsKIAlpbnQgc3RhdHVzOwpAQCAtMTc3NCw3ICsxNzc1LDggQEAKICAqIFRoaXMgZXhlY3V0ZXMgdGhlIFNNQnVzICJ3cml0ZSB3b3JkIiBwcm90b2NvbCwgcmV0dXJuaW5nIG5lZ2F0aXZlIGVycm5vCiAgKiBlbHNlIHplcm8gb24gc3VjY2Vzcy4KICAqLwotczMyIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwgdTE2IHZhbHVlKQorczMyIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwKKwkJCSAgICAgIHUxNiB2YWx1ZSkKIHsKIAl1bmlvbiBpMmNfc21idXNfZGF0YSBkYXRhOwogCWRhdGEud29yZCA9IHZhbHVlOwpAQCAtMTc5Myw3ICsxNzk1LDggQEAKICAqIFRoaXMgZXhlY3V0ZXMgdGhlIFNNQnVzICJwcm9jZXNzIGNhbGwiIHByb3RvY29sLCByZXR1cm5pbmcgbmVnYXRpdmUgZXJybm8KICAqIGVsc2UgYSAxNi1iaXQgdW5zaWduZWQgIndvcmQiIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZS4KICAqLwotczMyIGkyY19zbWJ1c19wcm9jZXNzX2NhbGwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwgdTE2IHZhbHVlKQorczMyIGkyY19zbWJ1c19wcm9jZXNzX2NhbGwoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwKKwkJCSAgIHUxNiB2YWx1ZSkKIHsKIAl1bmlvbiBpMmNfc21idXNfZGF0YSBkYXRhOwogCWludCBzdGF0dXM7CkBAIC0xODIxLDcgKzE4MjQsNyBAQAogICogc3VwcG9ydCB0aGlzOyBpdHMgZW11bGF0aW9uIHRocm91Z2ggSTJDIG1lc3NhZ2luZyByZWxpZXMgb24gYSBzcGVjaWZpYwogICogbWVjaGFuaXNtIChJMkNfTV9SRUNWX0xFTikgd2hpY2ggbWF5IG5vdCBiZSBpbXBsZW1lbnRlZC4KICAqLwotczMyIGkyY19zbWJ1c19yZWFkX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwKK3MzMiBpMmNfc21idXNfcmVhZF9ibG9ja19kYXRhKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQsCiAJCQkgICAgICB1OCAqdmFsdWVzKQogewogCXVuaW9uIGkyY19zbWJ1c19kYXRhIGRhdGE7CkBAIC0xODQ4LDcgKzE4NTEsNyBAQAogICogVGhpcyBleGVjdXRlcyB0aGUgU01CdXMgImJsb2NrIHdyaXRlIiBwcm90b2NvbCwgcmV0dXJuaW5nIG5lZ2F0aXZlIGVycm5vCiAgKiBlbHNlIHplcm8gb24gc3VjY2Vzcy4KICAqLwotczMyIGkyY19zbWJ1c193cml0ZV9ibG9ja19kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQsCitzMzIgaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwKIAkJCSAgICAgICB1OCBsZW5ndGgsIGNvbnN0IHU4ICp2YWx1ZXMpCiB7CiAJdW5pb24gaTJjX3NtYnVzX2RhdGEgZGF0YTsKQEAgLTE4NjQsNyArMTg2Nyw3IEBACiBFWFBPUlRfU1lNQk9MKGkyY19zbWJ1c193cml0ZV9ibG9ja19kYXRhKTsKIAogLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMgKi8KLXMzMiBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLAorczMyIGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQsCiAJCQkJICB1OCBsZW5ndGgsIHU4ICp2YWx1ZXMpCiB7CiAJdW5pb24gaTJjX3NtYnVzX2RhdGEgZGF0YTsKQEAgLTE4ODQsNyArMTg4Nyw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKTsKIAotczMyIGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLAorczMyIGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLAogCQkJCSAgIHU4IGxlbmd0aCwgY29uc3QgdTggKnZhbHVlcykKIHsKIAl1bmlvbiBpMmNfc21idXNfZGF0YSBkYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvbXV4ZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL211eGVzL0tjb25maWcKaW5kZXggNGQ5MWQ4MC4uOTBiN2EwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvbXV4ZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9tdXhlcy9LY29uZmlnCkBAIC01LDYgKzUsMTggQEAKIG1lbnUgIk11bHRpcGxleGVyIEkyQyBDaGlwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBJMkNfTVVYCiAKK2NvbmZpZyBJMkNfTVVYX0dQSU8KKwl0cmlzdGF0ZSAiR1BJTy1iYXNlZCBJMkMgbXVsdGlwbGV4ZXIiCisJZGVwZW5kcyBvbiBHRU5FUklDX0dQSU8KKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyB0byB0aGlzIG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGZvciBhCisJICBHUElPIGJhc2VkIEkyQyBtdWx0aXBsZXhlci4gVGhpcyBkcml2ZXIgcHJvdmlkZXMgYWNjZXNzIHRvCisJICBJMkMgYnVzc2VzIGNvbm5lY3RlZCB0aHJvdWdoIGEgTVVYLCB3aGljaCBpcyBjb250cm9sbGVkCisJICB0aHJvdWdoIEdQSU8gcGlucy4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgZ3Bpby1pMmNtdXguCisKIGNvbmZpZyBJMkNfTVVYX1BDQTk1NDEKIAl0cmlzdGF0ZSAiTlhQIFBDQTk1NDEgSTJDIE1hc3RlciBTZWxlY3RvciIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvbXV4ZXMvTWFrZWZpbGUgYi9kcml2ZXJzL2kyYy9tdXhlcy9NYWtlZmlsZQppbmRleCBkNzQzODA2Li40NjQwNDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9tdXhlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9tdXhlcy9NYWtlZmlsZQpAQCAtMSw2ICsxLDcgQEAKICMKICMgTWFrZWZpbGUgZm9yIG11bHRpcGxleGVyIEkyQyBjaGlwIGRyaXZlcnMuCiAKK29iai0kKENPTkZJR19JMkNfTVVYX0dQSU8pCSs9IGdwaW8taTJjbXV4Lm8KIG9iai0kKENPTkZJR19JMkNfTVVYX1BDQTk1NDEpCSs9IHBjYTk1NDEubwogb2JqLSQoQ09ORklHX0kyQ19NVVhfUENBOTU0eCkJKz0gcGNhOTU0eC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL211eGVzL2dwaW8taTJjbXV4LmMgYi9kcml2ZXJzL2kyYy9tdXhlcy9ncGlvLWkyY211eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNmNlNjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9tdXhlcy9ncGlvLWkyY211eC5jCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogSTJDIG11bHRpcGxleGVyIHVzaW5nIEdQSU8gQVBJCisgKgorICogUGV0ZXIgS29yc2dhYXJkIDxwZXRlci5rb3JzZ2FhcmRAYmFyY28uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1tdXguaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLWkyY211eC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCitzdHJ1Y3QgZ3Bpb211eCB7CisJc3RydWN0IGkyY19hZGFwdGVyICpwYXJlbnQ7CisJc3RydWN0IGkyY19hZGFwdGVyICoqYWRhcDsgLyogY2hpbGQgYnVzc2VzICovCisJc3RydWN0IGdwaW9faTJjbXV4X3BsYXRmb3JtX2RhdGEgZGF0YTsKK307CisKK3N0YXRpYyB2b2lkIGdwaW9tdXhfc2V0KGNvbnN0IHN0cnVjdCBncGlvbXV4ICptdXgsIHVuc2lnbmVkIHZhbCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtdXgtPmRhdGEubl9ncGlvczsgaSsrKQorCQlncGlvX3NldF92YWx1ZShtdXgtPmRhdGEuZ3Bpb3NbaV0sIHZhbCAmICgxIDw8IGkpKTsKK30KKworc3RhdGljIGludCBncGlvbXV4X3NlbGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHZvaWQgKmRhdGEsIHUzMiBjaGFuKQoreworCXN0cnVjdCBncGlvbXV4ICptdXggPSBkYXRhOworCisJZ3Bpb211eF9zZXQobXV4LCBtdXgtPmRhdGEudmFsdWVzW2NoYW5dKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdwaW9tdXhfZGVzZWxlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCB2b2lkICpkYXRhLCB1MzIgY2hhbikKK3sKKwlzdHJ1Y3QgZ3Bpb211eCAqbXV4ID0gZGF0YTsKKworCWdwaW9tdXhfc2V0KG11eCwgbXV4LT5kYXRhLmlkbGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdwaW9tdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZ3Bpb211eCAqbXV4OworCXN0cnVjdCBncGlvX2kyY211eF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKnBhcmVudDsKKwlpbnQgKCpkZXNlbGVjdCkgKHN0cnVjdCBpMmNfYWRhcHRlciAqLCB2b2lkICosIHUzMik7CisJdW5zaWduZWQgaW5pdGlhbF9zdGF0ZTsKKwlpbnQgaSwgcmV0OworCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk1pc3NpbmcgcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBhcmVudCA9IGkyY19nZXRfYWRhcHRlcihwZGF0YS0+cGFyZW50KTsKKwlpZiAoIXBhcmVudCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJQYXJlbnQgYWRhcHRlciAoJWQpIG5vdCBmb3VuZFxuIiwKKwkJCXBkYXRhLT5wYXJlbnQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltdXggPSBremFsbG9jKHNpemVvZigqbXV4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtdXgpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBhbGxvY19mYWlsZWQ7CisJfQorCisJbXV4LT5wYXJlbnQgPSBwYXJlbnQ7CisJbXV4LT5kYXRhID0gKnBkYXRhOworCW11eC0+YWRhcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfYWRhcHRlciAqKSAqIHBkYXRhLT5uX3ZhbHVlcywKKwkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW11eC0+YWRhcCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGFsbG9jX2ZhaWxlZDI7CisJfQorCisJaWYgKHBkYXRhLT5pZGxlICE9IEdQSU9fSTJDTVVYX05PX0lETEUpIHsKKwkJaW5pdGlhbF9zdGF0ZSA9IHBkYXRhLT5pZGxlOworCQlkZXNlbGVjdCA9IGdwaW9tdXhfZGVzZWxlY3Q7CisJfSBlbHNlIHsKKwkJaW5pdGlhbF9zdGF0ZSA9IHBkYXRhLT52YWx1ZXNbMF07CisJCWRlc2VsZWN0ID0gTlVMTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm5fZ3Bpb3M7IGkrKykgeworCQlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmdwaW9zW2ldLCAiZ3Bpby1pMmNtdXgiKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3JlcXVlc3RfZ3BpbzsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvc1tpXSwKKwkJCQkgICAgICBpbml0aWFsX3N0YXRlICYgKDEgPDwgaSkpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bl92YWx1ZXM7IGkrKykgeworCQl1MzIgbnIgPSBwZGF0YS0+YmFzZV9uciA/IChwZGF0YS0+YmFzZV9uciArIGkpIDogMDsKKworCQltdXgtPmFkYXBbaV0gPSBpMmNfYWRkX211eF9hZGFwdGVyKHBhcmVudCwgbXV4LCBuciwgaSwKKwkJCQkJCSAgIGdwaW9tdXhfc2VsZWN0LCBkZXNlbGVjdCk7CisJCWlmICghbXV4LT5hZGFwW2ldKSB7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBhZGFwdGVyICVkXG4iLCBpKTsKKwkJCWdvdG8gYWRkX2FkYXB0ZXJfZmFpbGVkOworCQl9CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVkIHBvcnQgbXV4IG9uICVzIGFkYXB0ZXJcbiIsCisJCSBwZGF0YS0+bl92YWx1ZXMsIHBhcmVudC0+bmFtZSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtdXgpOworCisJcmV0dXJuIDA7CisKK2FkZF9hZGFwdGVyX2ZhaWxlZDoKKwlmb3IgKDsgaSA+IDA7IGktLSkKKwkJaTJjX2RlbF9tdXhfYWRhcHRlcihtdXgtPmFkYXBbaSAtIDFdKTsKKwlpID0gcGRhdGEtPm5fZ3Bpb3M7CitlcnJfcmVxdWVzdF9ncGlvOgorCWZvciAoOyBpID4gMDsgaS0tKQorCQlncGlvX2ZyZWUocGRhdGEtPmdwaW9zW2kgLSAxXSk7CisJa2ZyZWUobXV4LT5hZGFwKTsKK2FsbG9jX2ZhaWxlZDI6CisJa2ZyZWUobXV4KTsKK2FsbG9jX2ZhaWxlZDoKKwlpMmNfcHV0X2FkYXB0ZXIocGFyZW50KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGdwaW9tdXhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGdwaW9tdXggKm11eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG11eC0+ZGF0YS5uX3ZhbHVlczsgaSsrKQorCQlpMmNfZGVsX211eF9hZGFwdGVyKG11eC0+YWRhcFtpXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXV4LT5kYXRhLm5fZ3Bpb3M7IGkrKykKKwkJZ3Bpb19mcmVlKG11eC0+ZGF0YS5ncGlvc1tpXSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpMmNfcHV0X2FkYXB0ZXIobXV4LT5wYXJlbnQpOworCWtmcmVlKG11eC0+YWRhcCk7CisJa2ZyZWUobXV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBncGlvbXV4X2RyaXZlciA9IHsKKwkucHJvYmUJPSBncGlvbXV4X3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChncGlvbXV4X3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gImdwaW8taTJjbXV4IiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZ3Bpb211eF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZ3Bpb211eF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZ3Bpb211eF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmdwaW9tdXhfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZ3Bpb211eF9pbml0KTsKK21vZHVsZV9leGl0KGdwaW9tdXhfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiR1BJTy1iYXNlZCBJMkMgbXVsdGlwbGV4ZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJQZXRlciBLb3JzZ2FhcmQgPHBldGVyLmtvcnNnYWFyZEBiYXJjby5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmdwaW8taTJjbXV4Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCmluZGV4IDA5ZGRhMGIuLmMzZjVhY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCkBAIC0xODksNiArMTg5LDcgQEAKIAlyZXR1cm4gKHJkZXZfcC0+dDNjZGV2X3AtPmN0bChyZGV2X3AtPnQzY2Rldl9wLCBSRE1BX0NRX1NFVFVQLCAmc2V0dXApKTsKIH0KIAorI2lmZGVmIG5vdHlldAogaW50IGN4aW9fcmVzaXplX2NxKHN0cnVjdCBjeGlvX3JkZXYgKnJkZXZfcCwgc3RydWN0IHQzX2NxICpjcSkKIHsKIAlzdHJ1Y3QgcmRtYV9jcV9zZXR1cCBzZXR1cDsKQEAgLTIwMCw2ICsyMDEsNyBAQAogCXNldHVwLm92ZmxfbW9kZSA9IDE7CiAJcmV0dXJuIChyZGV2X3AtPnQzY2Rldl9wLT5jdGwocmRldl9wLT50M2NkZXZfcCwgUkRNQV9DUV9TRVRVUCwgJnNldHVwKSk7CiB9CisjZW5kaWYKIAogc3RhdGljIHUzMiBnZXRfcXBpZChzdHJ1Y3QgY3hpb19yZGV2ICpyZGV2X3AsIHN0cnVjdCBjeGlvX3Vjb250ZXh0ICp1Y3R4KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fd3IuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmgKaW5kZXggNGJiOTk3YS4uODNkMmUxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fd3IuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oCkBAIC02ODksNyArNjg5LDcgQEAKICAqIEEgVDMgV1EgaW1wbGVtZW50cyBib3RoIHRoZSBTUSBhbmQgUlEuCiAgKi8KIHN0cnVjdCB0M193cSB7Ci0JdW5pb24gdDNfd3IgKnF1ZXVlOwkJLyogRE1BIGFjY2Vzc2FibGUgbWVtb3J5ICovCisJdW5pb24gdDNfd3IgKnF1ZXVlOwkJLyogRE1BIGFjY2Vzc2libGUgbWVtb3J5ICovCiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsJCS8qIERNQSBhZGRyZXNzIGZvciBIVyAqLwogCURFRklORV9ETUFfVU5NQVBfQUREUihtYXBwaW5nKTsgLyogdW5tYXAga3J1ZnQgKi8KIAl1MzIgZXJyb3I7CQkJLyogMSBvbmNlIHdlIGdvIHRvIEVSUk9SICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuaAppbmRleCBhMjM3ZDQ5Li5jNTQwNmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmgKQEAgLTMzNSw4ICszMzUsNiBAQAogaW50IGl3Y2hfcG9zdF96Yl9yZWFkKHN0cnVjdCBpd2NoX3FwICpxaHApOwogaW50IGl3Y2hfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBpd2NoX2RldiAqZGV2KTsKIHZvaWQgaXdjaF91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgaXdjaF9kZXYgKmRldik7Ci1pbnQgaXdjaF9xdWllc2NlX3FwcyhzdHJ1Y3QgaXdjaF9jcSAqY2hwKTsKLWludCBpd2NoX3Jlc3VtZV9xcHMoc3RydWN0IGl3Y2hfY3EgKmNocCk7CiB2b2lkIHN0b3BfcmVhZF9yZXBfdGltZXIoc3RydWN0IGl3Y2hfcXAgKnFocCk7CiBpbnQgaXdjaF9yZWdpc3Rlcl9tZW0oc3RydWN0IGl3Y2hfZGV2ICpyaHAsIHN0cnVjdCBpd2NoX3BkICpwaHAsCiAJCSAgICAgIHN0cnVjdCBpd2NoX21yICptaHAsIGludCBzaGlmdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwppbmRleCAwOTkzMTM3Li4xYjRjZDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKQEAgLTExNDksNTkgKzExNDksMyBAQAogCVBEQkcoIiVzIGV4aXQgc3RhdGUgJWRcbiIsIF9fZnVuY19fLCBxaHAtPmF0dHIuc3RhdGUpOwogCXJldHVybiByZXQ7CiB9Ci0KLXN0YXRpYyBpbnQgcXVpZXNjZV9xcChzdHJ1Y3QgaXdjaF9xcCAqcWhwKQotewotCXNwaW5fbG9ja19pcnEoJnFocC0+bG9jayk7Ci0JaXdjaF9xdWllc2NlX3RpZChxaHAtPmVwKTsKLQlxaHAtPmZsYWdzIHw9IFFQX1FVSUVTQ0VEOwotCXNwaW5fdW5sb2NrX2lycSgmcWhwLT5sb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByZXN1bWVfcXAoc3RydWN0IGl3Y2hfcXAgKnFocCkKLXsKLQlzcGluX2xvY2tfaXJxKCZxaHAtPmxvY2spOwotCWl3Y2hfcmVzdW1lX3RpZChxaHAtPmVwKTsKLQlxaHAtPmZsYWdzICY9IH5RUF9RVUlFU0NFRDsKLQlzcGluX3VubG9ja19pcnEoJnFocC0+bG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBpd2NoX3F1aWVzY2VfcXBzKHN0cnVjdCBpd2NoX2NxICpjaHApCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGl3Y2hfcXAgKnFocDsKLQotCWZvciAoaT0wOyBpIDwgVDNfTUFYX05VTV9RUDsgaSsrKSB7Ci0JCXFocCA9IGdldF9xaHAoY2hwLT5yaHAsIGkpOwotCQlpZiAoIXFocCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKHFocC0+YXR0ci5yY3EgPT0gY2hwLT5jcS5jcWlkKSAmJiAhcXBfcXVpZXNjZWQocWhwKSkgewotCQkJcXVpZXNjZV9xcChxaHApOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKChxaHAtPmF0dHIuc2NxID09IGNocC0+Y3EuY3FpZCkgJiYgIXFwX3F1aWVzY2VkKHFocCkpCi0JCQlxdWllc2NlX3FwKHFocCk7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgaXdjaF9yZXN1bWVfcXBzKHN0cnVjdCBpd2NoX2NxICpjaHApCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGl3Y2hfcXAgKnFocDsKLQotCWZvciAoaT0wOyBpIDwgVDNfTUFYX05VTV9RUDsgaSsrKSB7Ci0JCXFocCA9IGdldF9xaHAoY2hwLT5yaHAsIGkpOwotCQlpZiAoIXFocCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKHFocC0+YXR0ci5yY3EgPT0gY2hwLT5jcS5jcWlkKSAmJiBxcF9xdWllc2NlZChxaHApKSB7Ci0JCQlyZXN1bWVfcXAocWhwKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICgocWhwLT5hdHRyLnNjcSA9PSBjaHAtPmNxLmNxaWQpICYmIHFwX3F1aWVzY2VkKHFocCkpCi0JCQlyZXN1bWVfcXAocWhwKTsKLQl9Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvaXdfY3hnYjQuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9pd19jeGdiNC5oCmluZGV4IDE2MDMyY2QuLjJmZTE5ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9pd19jeGdiNC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9pd19jeGdiNC5oCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIApAQCAtNzYwLDcgKzc1OSw2IEBACiBpbnQgYzRpd19mbHVzaF9zcShzdHJ1Y3QgdDRfd3EgKndxLCBzdHJ1Y3QgdDRfY3EgKmNxLCBpbnQgY291bnQpOwogaW50IGM0aXdfZXZfaGFuZGxlcihzdHJ1Y3QgYzRpd19kZXYgKnJuaWNwLCB1MzIgcWlkKTsKIHUxNiBjNGl3X3JxZXNfcG9zdGVkKHN0cnVjdCBjNGl3X3FwICpxaHApOwotaW50IGM0aXdfcG9zdF96Yl9yZWFkKHN0cnVjdCBjNGl3X3FwICpxaHApOwogaW50IGM0aXdfcG9zdF90ZXJtaW5hdGUoc3RydWN0IGM0aXdfcXAgKnFocCwgc3RydWN0IHQ0X2NxZSAqZXJyX2NxZSk7CiB1MzIgYzRpd19nZXRfY3FpZChzdHJ1Y3QgYzRpd19yZGV2ICpyZGV2LCBzdHJ1Y3QgYzRpd19kZXZfdWNvbnRleHQgKnVjdHgpOwogdm9pZCBjNGl3X3B1dF9jcWlkKHN0cnVjdCBjNGl3X3JkZXYgKnJkZXYsIHUzMiBxaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCmluZGV4IDA1N2NiMjUuLjIwODAwOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCkBAIC04OTIsMzYgKzg5Miw2IEBACiAJfQogfQogCi1pbnQgYzRpd19wb3N0X3piX3JlYWQoc3RydWN0IGM0aXdfcXAgKnFocCkKLXsKLQl1bmlvbiB0NF93ciAqd3FlOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTggbGVuMTY7Ci0KLQlQREJHKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOwotCXNrYiA9IGFsbG9jX3NrYig0MCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyBjYW5ub3Qgc2VuZCB6Yl9yZWFkISFcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXNldF93cl90eHEoc2tiLCBDUExfUFJJT1JJVFlfREFUQSwgcWhwLT5lcC0+dHhxX2lkeCk7Ci0KLQl3cWUgPSAodW5pb24gdDRfd3IgKilza2JfcHV0KHNrYiwgc2l6ZW9mIHdxZS0+cmVhZCk7Ci0JbWVtc2V0KHdxZSwgMCwgc2l6ZW9mIHdxZS0+cmVhZCk7Ci0Jd3FlLT5yZWFkLnIyID0gY3B1X3RvX2JlNjQoMCk7Ci0Jd3FlLT5yZWFkLnN0YWdfc2luayA9IGNwdV90b19iZTMyKDEpOwotCXdxZS0+cmVhZC50b19zaW5rX2hpID0gY3B1X3RvX2JlMzIoMCk7Ci0Jd3FlLT5yZWFkLnRvX3NpbmtfbG8gPSBjcHVfdG9fYmUzMigxKTsKLQl3cWUtPnJlYWQuc3RhZ19zcmMgPSBjcHVfdG9fYmUzMigxKTsKLQl3cWUtPnJlYWQucGxlbiA9IGNwdV90b19iZTMyKDApOwotCXdxZS0+cmVhZC50b19zcmNfaGkgPSBjcHVfdG9fYmUzMigwKTsKLQl3cWUtPnJlYWQudG9fc3JjX2xvID0gY3B1X3RvX2JlMzIoMSk7Ci0JbGVuMTYgPSBESVZfUk9VTkRfVVAoc2l6ZW9mIHdxZS0+cmVhZCwgMTYpOwotCWluaXRfd3JfaGRyKHdxZSwgMCwgRldfUklfUkRNQV9SRUFEX1dSLCBGV19SSV9DT01QTEVUSU9OX0ZMQUcsIGxlbjE2KTsKLQotCXJldHVybiBjNGl3X29mbGRfc2VuZCgmcWhwLT5yaHAtPnJkZXYsIHNrYik7Ci19Ci0KIHN0YXRpYyB2b2lkIHBvc3RfdGVybWluYXRlKHN0cnVjdCBjNGl3X3FwICpxaHAsIHN0cnVjdCB0NF9jcWUgKmVycl9jcWUsCiAJCQkgICBnZnBfdCBnZnApCiB7CkBAIC0xMDI5LDcgKzk5OSw2IEBACiAJd3FlLT5jb29raWUgPSAodW5zaWduZWQgbG9uZykgJmVwLT5jb20ud3Jfd2FpdDsKIAogCXdxZS0+dS5maW5pLnR5cGUgPSBGV19SSV9UWVBFX0ZJTkk7Ci0JYzRpd19pbml0X3dyX3dhaXQoJmVwLT5jb20ud3Jfd2FpdCk7CiAJcmV0ID0gYzRpd19vZmxkX3NlbmQoJnJocC0+cmRldiwgc2tiKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKQEAgLTExMjUsNyArMTA5NCw2IEBACiAJaWYgKHFocC0+YXR0ci5tcGFfYXR0ci5pbml0aWF0b3IpCiAJCWJ1aWxkX3J0cl9tc2cocWhwLT5hdHRyLm1wYV9hdHRyLnAycF90eXBlLCAmd3FlLT51LmluaXQpOwogCi0JYzRpd19pbml0X3dyX3dhaXQoJnFocC0+ZXAtPmNvbS53cl93YWl0KTsKIAlyZXQgPSBjNGl3X29mbGRfc2VuZCgmcmhwLT5yZGV2LCBza2IpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCmluZGV4IDc2NWYwZmMuLmIzM2YwNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKQEAgLTUzMCw5ICs1MzAsOCBAQAogCWZvciAoaiA9IDA7IGogPCA2OyBqKyspIHsKIAkJaWYgKCFwZGV2LT5yZXNvdXJjZVtqXS5zdGFydCkKIAkJCWNvbnRpbnVlOwotCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJCQVIgJWQgc3RhcnQgJWxseCwgZW5kICVsbHgsIGxlbiAlbGx4XG4iLAotCQkJICAgaiwgKHVuc2lnbmVkIGxvbmcgbG9uZylwZGV2LT5yZXNvdXJjZVtqXS5zdGFydCwKLQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGRldi0+cmVzb3VyY2Vbal0uZW5kLAorCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJCQVIgJWQgJXBSLCBsZW4gJWxseFxuIiwKKwkJCSAgIGosICZwZGV2LT5yZXNvdXJjZVtqXSwKIAkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBqKSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvY3EuYwppbmRleCA1YTIxOWEyLi5lOGRmMTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9jcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L2NxLmMKQEAgLTM5NywxMCArMzk3LDE0IEBACiAJCWNxLT5yZXNpemVfYnVmID0gTlVMTDsKIAkJY3EtPnJlc2l6ZV91bWVtID0gTlVMTDsKIAl9IGVsc2UgeworCQlzdHJ1Y3QgbWx4NF9pYl9jcV9idWYgdG1wX2J1ZjsKKwkJaW50IHRtcF9jcWUgPSAwOworCiAJCXNwaW5fbG9ja19pcnEoJmNxLT5sb2NrKTsKIAkJaWYgKGNxLT5yZXNpemVfYnVmKSB7CiAJCQltbHg0X2liX2NxX3Jlc2l6ZV9jb3B5X2NxZXMoY3EpOwotCQkJbWx4NF9pYl9mcmVlX2NxX2J1ZihkZXYsICZjcS0+YnVmLCBjcS0+aWJjcS5jcWUpOworCQkJdG1wX2J1ZiA9IGNxLT5idWY7CisJCQl0bXBfY3FlID0gY3EtPmliY3EuY3FlOwogCQkJY3EtPmJ1ZiAgICAgID0gY3EtPnJlc2l6ZV9idWYtPmJ1ZjsKIAkJCWNxLT5pYmNxLmNxZSA9IGNxLT5yZXNpemVfYnVmLT5jcWU7CiAKQEAgLTQwOCw2ICs0MTIsOSBAQAogCQkJY3EtPnJlc2l6ZV9idWYgPSBOVUxMOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycSgmY3EtPmxvY2spOworCisJCWlmICh0bXBfY3FlKQorCQkJbWx4NF9pYl9mcmVlX2NxX2J1ZihkZXYsICZ0bXBfYnVmLCB0bXBfY3FlKTsKIAl9CiAKIAlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFkLmMKaW5kZXggYzlhOGRkNi4uNTdmZmE1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFkLmMKQEAgLTIxMSw2ICsyMTEsOCBAQAogCWlmIChhZ2VudCkgewogCQlzZW5kX2J1ZiA9IGliX2NyZWF0ZV9zZW5kX21hZChhZ2VudCwgcXBuLCAwLCAwLCBJQl9NR01UX01BRF9IRFIsCiAJCQkJCSAgICAgIElCX01HTVRfTUFEX0RBVEEsIEdGUF9BVE9NSUMpOworCQlpZiAoSVNfRVJSKHNlbmRfYnVmKSkKKwkJCXJldHVybjsKIAkJLyoKIAkJICogV2UgcmVseSBoZXJlIG9uIHRoZSBmYWN0IHRoYXQgTUxYIFFQcyBkb24ndCB1c2UgdGhlCiAJCSAqIGFkZHJlc3MgaGFuZGxlIGFmdGVyIHRoZSBzZW5kIGlzIHBvc3RlZCAodGhpcyBpcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCmluZGV4IDU2NDg2NTkuLjAzYTU5NTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCkBAIC0xNzEsNiArMTcxLDggQEAKIAlpZiAoYWdlbnQpIHsKIAkJc2VuZF9idWYgPSBpYl9jcmVhdGVfc2VuZF9tYWQoYWdlbnQsIHFwbiwgMCwgMCwgSUJfTUdNVF9NQURfSERSLAogCQkJCQkgICAgICBJQl9NR01UX01BRF9EQVRBLCBHRlBfQVRPTUlDKTsKKwkJaWYgKElTX0VSUihzZW5kX2J1ZikpCisJCQlyZXR1cm47CiAJCS8qCiAJCSAqIFdlIHJlbHkgaGVyZSBvbiB0aGUgZmFjdCB0aGF0IE1MWCBRUHMgZG9uJ3QgdXNlIHRoZQogCQkgKiBhZGRyZXNzIGhhbmRsZSBhZnRlciB0aGUgc2VuZCBpcyBwb3N0ZWQgKHRoaXMgaXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKaW5kZXggMzg5MmUyYy4uNWE0YzM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKQEAgLTkwOCw4ICs5MDgsOCBAQAogCQkJCQluZXN2bmljLT5uaWNfaW5kZXggJiYKIAkJCQkJbWNfaW5kZXggPCBtYXhfcGZ0X2VudHJpZXNfYXZhaWFibGUpIHsKIAkJCQkJCW5lc19kZWJ1ZyhORVNfREJHX05JQ19SWCwKLQkJCQkJIm1jX2luZGV4PSVkIHNraXBwaW5nIG5pY19pbmRleD0lZCxcCi0JCQkJCXVzZWQgZm9yPSVkIFxuIiwgbWNfaW5kZXgsCisJCQkJCSJtY19pbmRleD0lZCBza2lwcGluZyBuaWNfaW5kZXg9JWQsICIKKwkJCQkJInVzZWQgZm9yPSVkIFxuIiwgbWNfaW5kZXgsCiAJCQkJCW5lc3ZuaWMtPm5pY19pbmRleCwKIAkJCQkJbmVzYWRhcHRlci0+cGZ0X21jYXN0X21hcFttY19pbmRleF0pOwogCQkJCW1jX2luZGV4Kys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWIuaAppbmRleCA2NGM5ZTdkLi43MzIyNWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliLmgKQEAgLTc2Niw3ICs3NjYsNyBAQAogCXZvaWQgKCpmX3NkbWFfaHdfc3RhcnRfdXApKHN0cnVjdCBxaWJfcHBvcnRkYXRhICopOwogCXZvaWQgKCpmX3NkbWFfaW5pdF9lYXJseSkoc3RydWN0IHFpYl9wcG9ydGRhdGEgKik7CiAJdm9pZCAoKmZfc2V0X2NudHJfc2FtcGxlKShzdHJ1Y3QgcWliX3Bwb3J0ZGF0YSAqLCB1MzIsIHUzMik7Ci0Jdm9pZCAoKmZfdXBkYXRlX3VzcmhlYWQpKHN0cnVjdCBxaWJfY3R4dGRhdGEgKiwgdTY0LCB1MzIsIHUzMik7CisJdm9pZCAoKmZfdXBkYXRlX3VzcmhlYWQpKHN0cnVjdCBxaWJfY3R4dGRhdGEgKiwgdTY0LCB1MzIsIHUzMiwgdTMyKTsKIAl1MzIgKCpmX2hkcnFlbXB0eSkoc3RydWN0IHFpYl9jdHh0ZGF0YSAqKTsKIAl1NjQgKCpmX3BvcnRjbnRyKShzdHJ1Y3QgcWliX3Bwb3J0ZGF0YSAqLCB1MzIpOwogCXUzMiAoKmZfcmVhZF9jbnRycykoc3RydWN0IHFpYl9kZXZkYXRhICosIGxvZmZfdCwgY2hhciAqKiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9jcS5jCmluZGV4IGE4NmNiZjguLjUyNDZhYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2NxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfY3EuYwpAQCAtMTAwLDcgKzEwMCw4IEBACiAJd2MtPmhlYWQgPSBuZXh0OwogCiAJaWYgKGNxLT5ub3RpZnkgPT0gSUJfQ1FfTkVYVF9DT01QIHx8Ci0JICAgIChjcS0+bm90aWZ5ID09IElCX0NRX1NPTElDSVRFRCAmJiBzb2xpY2l0ZWQpKSB7CisJICAgIChjcS0+bm90aWZ5ID09IElCX0NRX1NPTElDSVRFRCAmJgorCSAgICAgKHNvbGljaXRlZCB8fCBlbnRyeS0+c3RhdHVzICE9IElCX1dDX1NVQ0NFU1MpKSkgewogCQljcS0+bm90aWZ5ID0gSUJfQ1FfTk9ORTsKIAkJY3EtPnRyaWdnZXJlZCsrOwogCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfZHJpdmVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9kcml2ZXIuYwppbmRleCA5Y2QxOTM2Li4yM2U1ODRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9kcml2ZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9kcml2ZXIuYwpAQCAtNzEsNiArNzEsMTEgQEAKICAqLwogI2RlZmluZSBRSUJfUElPX01BWElCSERSIDEyOAogCisvKgorICogUUlCX01BWF9QS1RfUkNWIGlzIHRoZSBtYXggIyBpZiBwYWNrZXRzIHByb2Nlc3NlZCBwZXIgcmVjZWl2ZSBpbnRlcnJ1cHQuCisgKi8KKyNkZWZpbmUgUUlCX01BWF9QS1RfUkVDViA2NAorCiBzdHJ1Y3QgcWxvZ2ljX2liX3N0YXRzIHFpYl9zdGF0czsKIAogY29uc3QgY2hhciAqcWliX2dldF91bml0X25hbWUoaW50IHVuaXQpCkBAIC0yODQsMTQgKzI4OSwxNDcgQEAKICAqIFJldHVybnMgMSBpZiBlcnJvciB3YXMgYSBDUkMsIGVsc2UgMC4KICAqIE5lZWRlZCBmb3Igc29tZSBjaGlwJ3Mgc3ludGhlc2l6ZWQgZXJyb3IgY291bnRlcnMuCiAgKi8KLXN0YXRpYyB1MzIgcWliX3Jjdl9oZHJlcnIoc3RydWN0IHFpYl9wcG9ydGRhdGEgKnBwZCwgdTMyIGN0eHQsCi0JCQkgIHUzMiBlZmxhZ3MsIHUzMiBsLCB1MzIgZXRhaWwsIF9fbGUzMiAqcmhmX2FkZHIsCi0JCQkgIHN0cnVjdCBxaWJfbWVzc2FnZV9oZWFkZXIgKmhkcikKK3N0YXRpYyB1MzIgcWliX3Jjdl9oZHJlcnIoc3RydWN0IHFpYl9jdHh0ZGF0YSAqcmNkLCBzdHJ1Y3QgcWliX3Bwb3J0ZGF0YSAqcHBkLAorCQkJICB1MzIgY3R4dCwgdTMyIGVmbGFncywgdTMyIGwsIHUzMiBldGFpbCwKKwkJCSAgX19sZTMyICpyaGZfYWRkciwgc3RydWN0IHFpYl9tZXNzYWdlX2hlYWRlciAqcmhkcikKIHsKIAl1MzIgcmV0ID0gMDsKIAogCWlmIChlZmxhZ3MgJiAoUUxPR0lDX0lCX1JIRl9IX0lDUkNFUlIgfCBRTE9HSUNfSUJfUkhGX0hfVkNSQ0VSUikpCiAJCXJldCA9IDE7CisJZWxzZSBpZiAoZWZsYWdzID09IFFMT0dJQ19JQl9SSEZfSF9USURFUlIpIHsKKwkJLyogRm9yIFRJREVSUiBhbmQgUkMgUVBzIHByZW1wdGl2ZWx5IHNjaGVkdWxlIGEgTkFLICovCisJCXN0cnVjdCBxaWJfaWJfaGVhZGVyICpoZHIgPSAoc3RydWN0IHFpYl9pYl9oZWFkZXIgKikgcmhkcjsKKwkJc3RydWN0IHFpYl9vdGhlcl9oZWFkZXJzICpvaGRyID0gTlVMTDsKKwkJc3RydWN0IHFpYl9pYnBvcnQgKmlicCA9ICZwcGQtPmlicG9ydF9kYXRhOworCQlzdHJ1Y3QgcWliX3FwICpxcCA9IE5VTEw7CisJCXUzMiB0bGVuID0gcWliX2hkcmdldF9sZW5ndGhfaW5fYnl0ZXMocmhmX2FkZHIpOworCQl1MTYgbGlkICA9IGJlMTZfdG9fY3B1KGhkci0+bHJoWzFdKTsKKwkJaW50IGxuaCA9IGJlMTZfdG9fY3B1KGhkci0+bHJoWzBdKSAmIDM7CisJCXUzMiBxcF9udW07CisJCXUzMiBvcGNvZGU7CisJCXUzMiBwc247CisJCWludCBkaWZmOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCS8qIFNhbml0eSBjaGVjayBwYWNrZXQgKi8KKwkJaWYgKHRsZW4gPCAyNCkKKwkJCWdvdG8gZHJvcDsKKworCQlpZiAobGlkIDwgUUlCX01VTFRJQ0FTVF9MSURfQkFTRSkgeworCQkJbGlkICY9IH4oKDEgPDwgcHBkLT5sbWMpIC0gMSk7CisJCQlpZiAodW5saWtlbHkobGlkICE9IHBwZC0+bGlkKSkKKwkJCQlnb3RvIGRyb3A7CisJCX0KKworCQkvKiBDaGVjayBmb3IgR1JIICovCisJCWlmIChsbmggPT0gUUlCX0xSSF9CVEgpCisJCQlvaGRyID0gJmhkci0+dS5vdGg7CisJCWVsc2UgaWYgKGxuaCA9PSBRSUJfTFJIX0dSSCkgeworCQkJdTMyIHZ0ZjsKKworCQkJb2hkciA9ICZoZHItPnUubC5vdGg7CisJCQlpZiAoaGRyLT51LmwuZ3JoLm5leHRfaGRyICE9IElCX0dSSF9ORVhUX0hEUikKKwkJCQlnb3RvIGRyb3A7CisJCQl2dGYgPSBiZTMyX3RvX2NwdShoZHItPnUubC5ncmgudmVyc2lvbl90Y2xhc3NfZmxvdyk7CisJCQlpZiAoKHZ0ZiA+PiBJQl9HUkhfVkVSU0lPTl9TSElGVCkgIT0gSUJfR1JIX1ZFUlNJT04pCisJCQkJZ290byBkcm9wOworCQl9IGVsc2UKKwkJCWdvdG8gZHJvcDsKKworCQkvKiBHZXQgb3Bjb2RlIGFuZCBQU04gZnJvbSBwYWNrZXQgKi8KKwkJb3Bjb2RlID0gYmUzMl90b19jcHUob2hkci0+YnRoWzBdKTsKKwkJb3Bjb2RlID4+PSAyNDsKKwkJcHNuID0gYmUzMl90b19jcHUob2hkci0+YnRoWzJdKTsKKworCQkvKiBHZXQgdGhlIGRlc3RpbmF0aW9uIFFQIG51bWJlci4gKi8KKwkJcXBfbnVtID0gYmUzMl90b19jcHUob2hkci0+YnRoWzFdKSAmIFFJQl9RUE5fTUFTSzsKKwkJaWYgKHFwX251bSAhPSBRSUJfTVVMVElDQVNUX1FQTikgeworCQkJaW50IHJ1Y19yZXM7CisJCQlxcCA9IHFpYl9sb29rdXBfcXBuKGlicCwgcXBfbnVtKTsKKwkJCWlmICghcXApCisJCQkJZ290byBkcm9wOworCisJCQkvKgorCQkJICogSGFuZGxlIG9ubHkgUkMgUVBzIC0gZm9yIG90aGVyIFFQIHR5cGVzIGRyb3AgZXJyb3IKKwkJCSAqIHBhY2tldC4KKwkJCSAqLworCQkJc3Bpbl9sb2NrKCZxcC0+cl9sb2NrKTsKKworCQkJLyogQ2hlY2sgZm9yIHZhbGlkIHJlY2VpdmUgc3RhdGUuICovCisJCQlpZiAoIShpYl9xaWJfc3RhdGVfb3BzW3FwLT5zdGF0ZV0gJgorCQkJICAgICAgUUlCX1BST0NFU1NfUkVDVl9PSykpIHsKKwkJCQlpYnAtPm5fcGt0X2Ryb3BzKys7CisJCQkJZ290byB1bmxvY2s7CisJCQl9CisKKwkJCXN3aXRjaCAocXAtPmlicXAucXBfdHlwZSkgeworCQkJY2FzZSBJQl9RUFRfUkM6CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKKwkJCQlydWNfcmVzID0KKwkJCQkJcWliX3J1Y19jaGVja19oZHIoCisJCQkJCQlpYnAsIGhkciwKKwkJCQkJCWxuaCA9PSBRSUJfTFJIX0dSSCwKKwkJCQkJCXFwLAorCQkJCQkJYmUzMl90b19jcHUob2hkci0+YnRoWzBdKSk7CisJCQkJaWYgKHJ1Y19yZXMpIHsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywKKwkJCQkJCQkgICAgICAgZmxhZ3MpOworCQkJCQlnb3RvIHVubG9jazsKKwkJCQl9CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCisJCQkJLyogT25seSBkZWFsIHdpdGggUkRNQSBXcml0ZXMgZm9yIG5vdyAqLworCQkJCWlmIChvcGNvZGUgPAorCQkJCSAgICBJQl9PUENPREVfUkNfUkRNQV9SRUFEX1JFU1BPTlNFX0ZJUlNUKSB7CisJCQkJCWRpZmYgPSBxaWJfY21wMjQocHNuLCBxcC0+cl9wc24pOworCQkJCQlpZiAoIXFwLT5yX25ha19zdGF0ZSAmJiBkaWZmID49IDApIHsKKwkJCQkJCWlicC0+bl9yY19zZXFuYWsrKzsKKwkJCQkJCXFwLT5yX25ha19zdGF0ZSA9CisJCQkJCQkJSUJfTkFLX1BTTl9FUlJPUjsKKwkJCQkJCS8qIFVzZSB0aGUgZXhwZWN0ZWQgUFNOLiAqLworCQkJCQkJcXAtPnJfYWNrX3BzbiA9IHFwLT5yX3BzbjsKKwkJCQkJCS8qCisJCQkJCQkgKiBXYWl0IHRvIHNlbmQgdGhlIHNlcXVlbmNlCisJCQkJCQkgKiBOQUsgdW50aWwgYWxsIHBhY2tldHMKKwkJCQkJCSAqIGluIHRoZSByZWNlaXZlIHF1ZXVlIGhhdmUKKwkJCQkJCSAqIGJlZW4gcHJvY2Vzc2VkLgorCQkJCQkJICogT3RoZXJ3aXNlLCB3ZSBlbmQgdXAKKwkJCQkJCSAqIHByb3BhZ2F0aW5nIGNvbmdlc3Rpb24uCisJCQkJCQkgKi8KKwkJCQkJCWlmIChsaXN0X2VtcHR5KCZxcC0+cnNwd2FpdCkpIHsKKwkJCQkJCQlxcC0+cl9mbGFncyB8PQorCQkJCQkJCQlRSUJfUl9SU1BfTkFLOworCQkJCQkJCWF0b21pY19pbmMoCisJCQkJCQkJCSZxcC0+cmVmY291bnQpOworCQkJCQkJCWxpc3RfYWRkX3RhaWwoCisJCQkJCQkJICZxcC0+cnNwd2FpdCwKKwkJCQkJCQkgJnJjZC0+cXBfd2FpdF9saXN0KTsKKwkJCQkJCX0KKwkJCQkJfSAvKiBPdXQgb2Ygc2VxdWVuY2UgTkFLICovCisJCQkJfSAvKiBRUCBSZXF1ZXN0IE5BS3MgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgSUJfUVBUX1NNSToKKwkJCWNhc2UgSUJfUVBUX0dTSToKKwkJCWNhc2UgSUJfUVBUX1VEOgorCQkJY2FzZSBJQl9RUFRfVUM6CisJCQlkZWZhdWx0OgorCQkJCS8qIEZvciBub3cgZG9uJ3QgaGFuZGxlIGFueSBvdGhlciBRUCB0eXBlcyAqLworCQkJCWJyZWFrOworCQkJfQorCit1bmxvY2s6CisJCQlzcGluX3VubG9jaygmcXAtPnJfbG9jayk7CisJCQkvKgorCQkJICogTm90aWZ5IHFpYl9kZXN0cm95X3FwKCkgaWYgaXQgaXMgd2FpdGluZworCQkJICogZm9yIHVzIHRvIGZpbmlzaC4KKwkJCSAqLworCQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnFwLT5yZWZjb3VudCkpCisJCQkJd2FrZV91cCgmcXAtPndhaXQpOworCQl9IC8qIFVuaWNhc3QgUVAgKi8KKwl9IC8qIFZhbGlkIHBhY2tldCB3aXRoIFRJREVyciAqLworCitkcm9wOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMzNSw3ICs0NzMsNyBAQAogCQlzbXBfcm1iKCk7ICAvKiBwcmV2ZW50IHNwZWN1bGF0aXZlIHJlYWRzIG9mIGRtYSdlZCBoZHJxICovCiAJfQogCi0JZm9yIChsYXN0ID0gMCwgaSA9IDE7ICFsYXN0ICYmIGkgPD0gNjQ7IGkgKz0gIWxhc3QpIHsKKwlmb3IgKGxhc3QgPSAwLCBpID0gMTsgIWxhc3Q7IGkgKz0gIWxhc3QpIHsKIAkJaGRyID0gZGQtPmZfZ2V0X21zZ2hlYWRlcihkZCwgcmhmX2FkZHIpOwogCQllZmxhZ3MgPSBxaWJfaGRyZ2V0X2Vycl9mbGFncyhyaGZfYWRkcik7CiAJCWV0eXBlID0gcWliX2hkcmdldF9yY3ZfdHlwZShyaGZfYWRkcik7CkBAIC0zNzEsNyArNTA5LDcgQEAKIAkJICogcGFja2V0czsgb25seSBxaWJoZHJlcnIgc2hvdWxkIGJlIHNldC4KIAkJICovCiAJCWlmICh1bmxpa2VseShlZmxhZ3MpKQotCQkJY3JjcyArPSBxaWJfcmN2X2hkcmVycihwcGQsIHJjZC0+Y3R4dCwgZWZsYWdzLCBsLAorCQkJY3JjcyArPSBxaWJfcmN2X2hkcmVycihyY2QsIHBwZCwgcmNkLT5jdHh0LCBlZmxhZ3MsIGwsCiAJCQkJCSAgICAgICBldGFpbCwgcmhmX2FkZHIsIGhkcik7CiAJCWVsc2UgaWYgKGV0eXBlID09IFJDVkhRX1JDVl9UWVBFX05PTl9LRCkgewogCQkJcWliX2liX3JjdihyY2QsIGhkciwgZWJ1ZiwgdGxlbik7CkBAIC0zODQsNiArNTIyLDkgQEAKIAkJbCArPSByc2l6ZTsKIAkJaWYgKGwgPj0gbWF4Y250KQogCQkJbCA9IDA7CisJCWlmIChpID09IFFJQl9NQVhfUEtUX1JFQ1YpCisJCQlsYXN0ID0gMTsKKwogCQlyaGZfYWRkciA9IChfX2xlMzIgKikgcmNkLT5yY3ZoZHJxICsgbCArIGRkLT5yaGZfb2Zmc2V0OwogCQlpZiAoZGQtPmZsYWdzICYgUUlCX05PRE1BX1JUQUlMKSB7CiAJCQl1MzIgc2VxID0gcWliX2hkcmdldF9zZXEocmhmX2FkZHIpOwpAQCAtNDAyLDcgKzU0Myw3IEBACiAJCSAqLwogCQlsdmFsID0gbDsKIAkJaWYgKCFsYXN0ICYmICEoaSAmIDB4ZikpIHsKLQkJCWRkLT5mX3VwZGF0ZV91c3JoZWFkKHJjZCwgbHZhbCwgdXBkZWdyLCBldGFpbCk7CisJCQlkZC0+Zl91cGRhdGVfdXNyaGVhZChyY2QsIGx2YWwsIHVwZGVnciwgZXRhaWwsIGkpOwogCQkJdXBkZWdyID0gMDsKIAkJfQogCX0KQEAgLTQ0NCw3ICs1ODUsNyBAQAogCSAqIGlmIG5vIHBhY2tldHMgd2VyZSBwcm9jZXNzZWQuCiAJICovCiAJbHZhbCA9ICh1NjQpcmNkLT5oZWFkIHwgZGQtPnJoZHJoZWFkX2ludHJfb2ZmOwotCWRkLT5mX3VwZGF0ZV91c3JoZWFkKHJjZCwgbHZhbCwgdXBkZWdyLCBldGFpbCk7CisJZGQtPmZfdXBkYXRlX3VzcmhlYWQocmNkLCBsdmFsLCB1cGRlZ3IsIGV0YWlsLCBpKTsKIAlyZXR1cm4gY3JjczsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfZmlsZV9vcHMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2ZpbGVfb3BzLmMKaW5kZXggNzlkOTk3MS4uNzViZmFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfZmlsZV9vcHMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9maWxlX29wcy5jCkBAIC0xMzc5LDE3ICsxMzc5LDE3IEBACiAJCS8qIGZpbmQgZGV2aWNlICh3aXRoIEFDVElWRSBwb3J0cykgd2l0aCBmZXdlc3QgY3R4dHMgaW4gdXNlICovCiAJCWZvciAobmRldiA9IDA7IG5kZXYgPCBkZXZtYXg7IG5kZXYrKykgewogCQkJc3RydWN0IHFpYl9kZXZkYXRhICpkZCA9IHFpYl9sb29rdXAobmRldik7Ci0JCQl1bnNpZ25lZCBjdXNlZCA9IDAsIGNmcmVlID0gMDsKKwkJCXVuc2lnbmVkIGN1c2VkID0gMCwgY2ZyZWUgPSAwLCBwdXNhYmxlID0gMDsKIAkJCWlmICghZGQpCiAJCQkJY29udGludWU7CiAJCQlpZiAocG9ydCAmJiBwb3J0IDw9IGRkLT5udW1fcHBvcnRzICYmCiAJCQkgICAgdXNhYmxlKGRkLT5wcG9ydCArIHBvcnQgLSAxKSkKLQkJCQlkdXNhYmxlID0gMTsKKwkJCQlwdXNhYmxlID0gMTsKIAkJCWVsc2UKIAkJCQlmb3IgKGkgPSAwOyBpIDwgZGQtPm51bV9wcG9ydHM7IGkrKykKIAkJCQkJaWYgKHVzYWJsZShkZC0+cHBvcnQgKyBpKSkKLQkJCQkJCWR1c2FibGUrKzsKLQkJCWlmICghZHVzYWJsZSkKKwkJCQkJCXB1c2FibGUrKzsKKwkJCWlmICghcHVzYWJsZSkKIAkJCQljb250aW51ZTsKIAkJCWZvciAoY3R4dCA9IGRkLT5maXJzdF91c2VyX2N0eHQ7IGN0eHQgPCBkZC0+Y2ZnY3R4dHM7CiAJCQkgICAgIGN0eHQrKykKQEAgLTEzOTcsNyArMTM5Nyw3IEBACiAJCQkJCWN1c2VkKys7CiAJCQkJZWxzZQogCQkJCQljZnJlZSsrOwotCQkJaWYgKGNmcmVlICYmIGN1c2VkIDwgaW51c2UpIHsKKwkJCWlmIChwdXNhYmxlICYmIGNmcmVlICYmIGN1c2VkIDwgaW51c2UpIHsKIAkJCQl1ZGQgPSBkZDsKIAkJCQlpbnVzZSA9IGN1c2VkOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNjEyMC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNjEyMC5jCmluZGV4IGE1ZTI5ZGIuLjc3NGRlYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTYxMjAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE2MTIwLmMKQEAgLTIwNzQsNyArMjA3NCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHFpYl91cGRhdGVfNjEyMF91c3JoZWFkKHN0cnVjdCBxaWJfY3R4dGRhdGEgKnJjZCwgdTY0IGhkLAotCQkJCSAgICB1MzIgdXBkZWdyLCB1MzIgZWdyaGQpCisJCQkJICAgIHUzMiB1cGRlZ3IsIHUzMiBlZ3JoZCwgdTMyIG5wa3RzKQogewogCXFpYl93cml0ZV91cmVnKHJjZC0+ZGQsIHVyX3JjdmhkcmhlYWQsIGhkLCByY2QtPmN0eHQpOwogCWlmICh1cGRlZ3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MjIwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MjIwLmMKaW5kZXggNmZkOGQ3NC4uMTI3YTBkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzIyMC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTcyMjAuYwpAQCAtMjI5Nyw3ICsyMjk3LDcgQEAKIAluY2hpcGN0eHRzID0gcWliX3JlYWRfa3JlZzMyKGRkLCBrcl9wb3J0Y250KTsKIAlkZC0+Y3NwZWMtPm51bWN0eHRzID0gbmNoaXBjdHh0czsKIAlpZiAocWliX25fa3Jjdl9xdWV1ZXMgPiAxKSB7Ci0JCWRkLT5xcG5fbWFzayA9IDB4M2Y7CisJCWRkLT5xcG5fbWFzayA9IDB4M2U7CiAJCWRkLT5maXJzdF91c2VyX2N0eHQgPSBxaWJfbl9rcmN2X3F1ZXVlcyAqIGRkLT5udW1fcHBvcnRzOwogCQlpZiAoZGQtPmZpcnN0X3VzZXJfY3R4dCA+IG5jaGlwY3R4dHMpCiAJCQlkZC0+Zmlyc3RfdXNlcl9jdHh0ID0gbmNoaXBjdHh0czsKQEAgLTI3MDMsNyArMjcwMyw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHFpYl91cGRhdGVfNzIyMF91c3JoZWFkKHN0cnVjdCBxaWJfY3R4dGRhdGEgKnJjZCwgdTY0IGhkLAotCQkJCSAgICB1MzIgdXBkZWdyLCB1MzIgZWdyaGQpCisJCQkJICAgIHUzMiB1cGRlZ3IsIHUzMiBlZ3JoZCwgdTMyIG5wa3RzKQogewogCXFpYl93cml0ZV91cmVnKHJjZC0+ZGQsIHVyX3JjdmhkcmhlYWQsIGhkLCByY2QtPmN0eHQpOwogCWlmICh1cGRlZ3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMKaW5kZXggNTg0ZDQ0My4uYWJkNDA5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYwpAQCAtNzEsNiArNzEsOSBAQAogCiBzdGF0aWMgdTMyIGFoYl9tb2Qoc3RydWN0IHFpYl9kZXZkYXRhICosIGludCwgaW50LCBpbnQsIHUzMiwgdTMyKTsKIHN0YXRpYyB2b2lkIGlic2Rfd3JfYWxsY2hhbnMoc3RydWN0IHFpYl9wcG9ydGRhdGEgKiwgaW50LCB1bnNpZ25lZCwgdW5zaWduZWQpOworc3RhdGljIHZvaWQgc2VyZGVzXzczMjJfbG9zX2VuYWJsZShzdHJ1Y3QgcWliX3Bwb3J0ZGF0YSAqLCBpbnQpOworc3RhdGljIGludCBzZXJkZXNfNzMyMl9pbml0X29sZChzdHJ1Y3QgcWliX3Bwb3J0ZGF0YSAqKTsKK3N0YXRpYyBpbnQgc2VyZGVzXzczMjJfaW5pdF9uZXcoc3RydWN0IHFpYl9wcG9ydGRhdGEgKik7CiAKICNkZWZpbmUgQk1BU0sobXNiLCBsc2IpICgoKDEgPDwgKChtc2IpICsgMSAtIChsc2IpKSkgLSAxKSA8PCAobHNiKSkKIApAQCAtMTExLDYgKzExNCwyMSBAQAogbW9kdWxlX3BhcmFtX25hbWVkKHNpbmdsZXBvcnQsIHFpYl9zaW5nbGVwb3J0LCB1c2hvcnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhzaW5nbGVwb3J0LCAiVXNlIG9ubHkgSUIgcG9ydCAxOyBtb3JlIHBlci1wb3J0IGJ1ZmZlciBzcGFjZSIpOwogCisvKgorICogUmVjZWl2ZSBoZWFkZXIgcXVldWUgc2l6ZXMKKyAqLworc3RhdGljIHVuc2lnbmVkIHFpYl9yY3ZoZHJjbnQ7Cittb2R1bGVfcGFyYW1fbmFtZWQocmN2aGRyY250LCBxaWJfcmN2aGRyY250LCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MocmN2aGRyY250LCAicmVjZWl2ZSBoZWFkZXIgY291bnQiKTsKKworc3RhdGljIHVuc2lnbmVkIHFpYl9yY3ZoZHJzaXplOworbW9kdWxlX3BhcmFtX25hbWVkKHJjdmhkcnNpemUsIHFpYl9yY3ZoZHJzaXplLCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MocmN2aGRyc2l6ZSwgInJlY2VpdmUgaGVhZGVyIHNpemUgaW4gMzItYml0IHdvcmRzIik7CisKK3N0YXRpYyB1bnNpZ25lZCBxaWJfcmN2aGRyZW50c2l6ZTsKK21vZHVsZV9wYXJhbV9uYW1lZChyY3ZoZHJlbnRzaXplLCBxaWJfcmN2aGRyZW50c2l6ZSwgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHJjdmhkcmVudHNpemUsICJyZWNlaXZlIGhlYWRlciBlbnRyeSBzaXplIGluIDMyLWJpdCB3b3JkcyIpOworCiAjZGVmaW5lIE1BWF9BVFRFTl9MRU4gNjQgLyogcGxlbnR5IGZvciBhbnkgcmVhbCBzeXN0ZW0gKi8KIC8qIGZvciByZWFkIGJhY2ssIGRlZmF1bHQgaW5kZXggaXMgfjVtIGNvcHBlciBjYWJsZSAqLwogc3RhdGljIGNoYXIgdHhzZWxlY3RfbGlzdFtNQVhfQVRURU5fTEVOXSA9ICIxMCI7CkBAIC0zMTQsNyArMzMyLDcgQEAKICNkZWZpbmUga3JwX3NlcmRlc2N0cmwgS1JFR19JQlBPUlRfSURYKElCU2VyZGVzQ3RybCkKIAogLyoKLSAqIFBlci1jb250ZXh0IGtlcm5lbCByZWdpc3RlcnMuICBBY2VzcyBvbmx5IHdpdGggcWliX3JlYWRfa3JlZ19jdHh0KCkKKyAqIFBlci1jb250ZXh0IGtlcm5lbCByZWdpc3RlcnMuICBBY2Nlc3Mgb25seSB3aXRoIHFpYl9yZWFkX2tyZWdfY3R4dCgpCiAgKiBvciBxaWJfd3JpdGVfa3JlZ19jdHh0KCkKICAqLwogI2RlZmluZSBrcmNfcmN2aGRyYWRkciBLUkVHX0lEWChSY3ZIZHJBZGRyMCkKQEAgLTU0NCw2ICs1NjIsNyBAQAogCiAjZGVmaW5lIFRYRERTX1RBQkxFX1NaIDE2IC8qIG51bWJlciBvZiBlbnRyaWVzIHBlciBzcGVlZCBpbiBvbmNoaXAgdGFibGUgKi8KICNkZWZpbmUgVFhERFNfRVhUUkFfU1ogMTMgLyogbnVtYmVyIG9mIGV4dHJhIHR4IHNldHRpbmdzIGVudHJpZXMgKi8KKyNkZWZpbmUgVFhERFNfTUZHX1NaIDIgICAgLyogbnVtYmVyIG9mIG1mZyB0eCBzZXR0aW5ncyBlbnRyaWVzICovCiAjZGVmaW5lIFNFUkRFU19DSEFOUyA0IC8qIHllcywgaXQncyBvYnZpb3VzLCBidXQgb25lIGxlc3MgbWFnaWMgbnVtYmVyICovCiAKICNkZWZpbmUgSDFfRk9SQ0VfVkFMIDgKQEAgLTYwNCw2ICs2MjMsNyBAQAogCXU4IGlibWFsZnVzZXNuYXA7CiAJc3RydWN0IHFpYl9xc2ZwX2RhdGEgcXNmcF9kYXRhOwogCWNoYXIgZXBtc2didWZbMTkyXTsgLyogZm9yIHBvcnQgZXJyb3IgaW50ZXJydXB0IG1zZyBidWZmZXIgKi8KKwl1OCBib3VuY2VkOwogfTsKIAogc3RhdGljIHN0cnVjdCB7CkBAIC0xNjc3LDYgKzE2OTcsOCBAQAogCSAgICAoaWJjc3QgJiBTWU1fTUFTSyhJQkNTdGF0dXNBXzAsIExpbmtTcGVlZFFEUikpKSB7CiAJCWZvcmNlX2gxKHBwZCk7CiAJCXBwZC0+Y3BzcGVjLT5xZHJfcmVmb3JjZSA9IDE7CisJCWlmICghcHBkLT5kZC0+Y3NwZWMtPnIxKQorCQkJc2VyZGVzXzczMjJfbG9zX2VuYWJsZShwcGQsIDApOwogCX0gZWxzZSBpZiAocHBkLT5jcHNwZWMtPnFkcl9yZWZvcmNlICYmCiAJCShpYmNzdCAmIFNZTV9NQVNLKElCQ1N0YXR1c0FfMCwgTGlua1NwZWVkUURSKSkgJiYKIAkJIChpYmNsdCA9PSBJQl83MzIyX0xUX1NUQVRFX0NGR0VOSCB8fApAQCAtMTY5MiwxOCArMTcxNCwzNyBAQAogCSAgICAgIGliY2x0IDw9IElCXzczMjJfTFRfU1RBVEVfU0xFRVBRVUlFVCkpKQogCQlhZGpfdHhfc2VyZGVzKHBwZCk7CiAKLQlpZiAoIXBwZC0+Y3BzcGVjLT5xZHJfZGZlX29uICYmIGliY2x0ICE9IElCXzczMjJfTFRfU1RBVEVfTElOS1VQICYmCi0JICAgIGliY2x0IDw9IElCXzczMjJfTFRfU1RBVEVfU0xFRVBRVUlFVCkgewotCQlwcGQtPmNwc3BlYy0+cWRyX2RmZV9vbiA9IDE7Ci0JCXBwZC0+Y3BzcGVjLT5xZHJfZGZlX3RpbWUgPSAwOwotCQkvKiBPbiBsaW5rIGRvd24sIHJlZW5hYmxlIFFEUiBhZGFwdGF0aW9uICovCi0JCXFpYl93cml0ZV9rcmVnX3BvcnQocHBkLCBrcnBfc3RhdGljX2FkYXB0X2RpcygyKSwKLQkJCXBwZC0+ZGQtPmNzcGVjLT5yMSA/Ci0JCQkJICAgIFFEUl9TVEFUSUNfQURBUFRfRE9XTl9SMSA6Ci0JCQkJICAgIFFEUl9TVEFUSUNfQURBUFRfRE9XTik7CisJaWYgKGliY2x0ICE9IElCXzczMjJfTFRfU1RBVEVfTElOS1VQKSB7CisJCXU4IGx0c3RhdGUgPSBxaWJfNzMyMl9waHlzX3BvcnRzdGF0ZShpYmNzdCk7CisJCXU4IHBpYmNsdCA9ICh1OClTWU1fRklFTEQocHBkLT5sYXN0aWJjc3RhdCwgSUJDU3RhdHVzQV8wLAorCQkJCQkgIExpbmtUcmFpbmluZ1N0YXRlKTsKKwkJaWYgKCFwcGQtPmRkLT5jc3BlYy0+cjEgJiYKKwkJICAgIHBpYmNsdCA9PSBJQl83MzIyX0xUX1NUQVRFX0xJTktVUCAmJgorCQkgICAgbHRzdGF0ZSAhPSBJQl9QSFlTUE9SVFNUQVRFX0xJTktfRVJSX1JFQ09WRVIgJiYKKwkJICAgIGx0c3RhdGUgIT0gSUJfUEhZU1BPUlRTVEFURV9SRUNPVkVSWV9SRVRSQUlOICYmCisJCSAgICBsdHN0YXRlICE9IElCX1BIWVNQT1JUU1RBVEVfUkVDT1ZFUllfV0FJVFJNVCAmJgorCQkgICAgbHRzdGF0ZSAhPSBJQl9QSFlTUE9SVFNUQVRFX1JFQ09WRVJZX0lETEUpCisJCQkvKiBJZiB0aGUgbGluayB3ZW50IGRvd24gKGJ1dCBubyBpbnRvIHJlY292ZXJ5LAorCQkJICogdHVybiBMT1MgYmFjayBvbiAqLworCQkJc2VyZGVzXzczMjJfbG9zX2VuYWJsZShwcGQsIDEpOworCQlpZiAoIXBwZC0+Y3BzcGVjLT5xZHJfZGZlX29uICYmCisJCSAgICBpYmNsdCA8PSBJQl83MzIyX0xUX1NUQVRFX1NMRUVQUVVJRVQpIHsKKwkJCXBwZC0+Y3BzcGVjLT5xZHJfZGZlX29uID0gMTsKKwkJCXBwZC0+Y3BzcGVjLT5xZHJfZGZlX3RpbWUgPSAwOworCQkJLyogT24gbGluayBkb3duLCByZWVuYWJsZSBRRFIgYWRhcHRhdGlvbiAqLworCQkJcWliX3dyaXRlX2tyZWdfcG9ydChwcGQsIGtycF9zdGF0aWNfYWRhcHRfZGlzKDIpLAorCQkJCQkgICAgcHBkLT5kZC0+Y3NwZWMtPnIxID8KKwkJCQkJICAgIFFEUl9TVEFUSUNfQURBUFRfRE9XTl9SMSA6CisJCQkJCSAgICBRRFJfU1RBVElDX0FEQVBUX0RPV04pOworCQkJcHJpbnRrKEtFUk5fSU5GTyBRSUJfRFJWX05BTUUKKwkJCQkiIElCJXU6JXUgcmUtZW5hYmxlZCBRRFIgYWRhcHRhdGlvbiAiCisJCQkJImliY2x0ICV4XG4iLCBwcGQtPmRkLT51bml0LCBwcGQtPnBvcnQsIGliY2x0KTsKKwkJfQogCX0KIH0KIAorc3RhdGljIGludCBxaWJfNzMyMl9zZXRfaWJfY2ZnKHN0cnVjdCBxaWJfcHBvcnRkYXRhICosIGludCwgdTMyKTsKKwogLyoKICAqIFRoaXMgaXMgcGVyLXBwb3J0IGVycm9yIGhhbmRsaW5nLgogICogd2lsbCBsaWtlbHkgZ2V0IGl0J3Mgb3duIE1TSXggaW50ZXJydXB0IChvbmUgZm9yIGVhY2ggcG9ydCwKQEAgLTE4NDAsNyArMTg4MSwyMyBAQAogCQkgICAgSUJfUEhZU1BPUlRTVEFURV9ESVNBQkxFRCkKIAkJCXFpYl9zZXRfaWJfNzMyMl9sc3RhdGUocHBkLCAwLAogCQkJICAgICAgIFFMT0dJQ19JQl9JQkNDX0xJTktJTklUQ01EX0RJU0FCTEUpOwotCQllbHNlCisJCWVsc2UgeworCQkJdTMyIGxzdGF0ZTsKKwkJCS8qCisJCQkgKiBXZSBuZWVkIHRoZSBjdXJyZW50IGxvZ2ljYWwgbGluayBzdGF0ZSBiZWZvcmUKKwkJCSAqIGxmbGFncyBhcmUgc2V0IGluIGhhbmRsZV9lX2lic3RhdHVzY2hhbmdlZC4KKwkJCSAqLworCQkJbHN0YXRlID0gcWliXzczMjJfaWJsaW5rX3N0YXRlKGliY3MpOworCisJCQlpZiAoSVNfUU1IKGRkKSAmJiAhcHBkLT5jcHNwZWMtPmJvdW5jZWQgJiYKKwkJCSAgICBsdHN0YXRlID09IElCX1BIWVNQT1JUU1RBVEVfTElOS1VQICYmCisJCQkgICAgKGxzdGF0ZSA+PSBJQl9QT1JUX0lOSVQgJiYKKwkJCQlsc3RhdGUgPD0gSUJfUE9SVF9BQ1RJVkUpKSB7CisJCQkJcHBkLT5jcHNwZWMtPmJvdW5jZWQgPSAxOworCQkJCXFpYl83MzIyX3NldF9pYl9jZmcocHBkLCBRSUJfSUJfQ0ZHX0xTVEFURSwKKwkJCQkJSUJfTElOS0NNRF9ET1dOIHwgSUJfTElOS0lOSVRDTURfUE9MTCk7CisJCQl9CisKIAkJCS8qCiAJCQkgKiBTaW5jZSBnb2luZyBpbnRvIGEgcmVjb3Zlcnkgc3RhdGUgY2F1c2VzIHRoZSBsaW5rCiAJCQkgKiBzdGF0ZSB0byBnbyBkb3duIGFuZCBzaW5jZSByZWNvdmVyeSBpcyB0cmFuc2l0b3J5LApAQCAtMTg1NCw2ICsxOTExLDcgQEAKIAkJCSAgICBsdHN0YXRlICE9IElCX1BIWVNQT1JUU1RBVEVfUkVDT1ZFUllfV0FJVFJNVCAmJgogCQkJICAgIGx0c3RhdGUgIT0gSUJfUEhZU1BPUlRTVEFURV9SRUNPVkVSWV9JRExFKQogCQkJCXFpYl9oYW5kbGVfZV9pYnN0YXR1c2NoYW5nZWQocHBkLCBpYmNzKTsKKwkJfQogCX0KIAlpZiAoKm1zZyAmJiBpc2VycikKIAkJcWliX2Rldl9wb3J0ZXJyKGRkLCBwcGQtPnBvcnQsICIlcyBlcnJvclxuIiwgbXNnKTsKQEAgLTI3ODUsNyArMjg0Myw2IEBACiAJCQkJY3R4dHJiaXRzICY9IH5ybWFzazsKIAkJCQlpZiAoZGQtPnJjZFtpXSkgewogCQkJCQlxaWJfa3JlY2VpdmUoZGQtPnJjZFtpXSwgTlVMTCwgJm5wa3RzKTsKLQkJCQkJYWRqdXN0X3Jjdl90aW1lb3V0KGRkLT5yY2RbaV0sIG5wa3RzKTsKIAkJCQl9CiAJCQl9CiAJCQlybWFzayA8PD0gMTsKQEAgLTI4MzUsNyArMjg5Miw2IEBACiAJCSAgICAgICAoMVVMTCA8PCBRSUJfSV9SQ1ZVUkdfTFNCKSkgPDwgcmNkLT5jdHh0KTsKIAogCXFpYl9rcmVjZWl2ZShyY2QsIE5VTEwsICZucGt0cyk7Ci0JYWRqdXN0X3Jjdl90aW1lb3V0KHJjZCwgbnBrdHMpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMzE1Nyw2ICszMjEzLDEwIEBACiAJY2FzZSBCT0FSRF9RTUU3MzQyOgogCQluID0gIkluZmluaVBhdGhfUU1FNzM0MiI7CiAJCWJyZWFrOworCWNhc2UgODoKKwkJbiA9ICJJbmZpbmlQYXRoX1FNRTczNjIiOworCQlkZC0+ZmxhZ3MgfD0gUUlCX0hBU19RU0ZQOworCQlicmVhazsKIAljYXNlIDE1OgogCQluID0gIkluZmluaVBhdGhfUUxFNzM0Ml9URVNUIjsKIAkJZGQtPmZsYWdzIHw9IFFJQl9IQVNfUVNGUDsKQEAgLTM0NzUsMTEgKzM1MzUsNiBAQAogCW5jaGlwY3R4dHMgPSBxaWJfcmVhZF9rcmVnMzIoZGQsIGtyX2NvbnRleHRjbnQpOwogCWRkLT5jc3BlYy0+bnVtY3R4dHMgPSBuY2hpcGN0eHRzOwogCWlmIChxaWJfbl9rcmN2X3F1ZXVlcyA+IDEgJiYgZGQtPm51bV9wcG9ydHMpIHsKLQkJLyoKLQkJICogU2V0IHRoZSBtYXNrIGZvciB3aGljaCBiaXRzIGZyb20gdGhlIFFQTiBhcmUgdXNlZAotCQkgKiB0byBzZWxlY3QgYSBjb250ZXh0IG51bWJlci4KLQkJICovCi0JCWRkLT5xcG5fbWFzayA9IDB4M2Y7CiAJCWRkLT5maXJzdF91c2VyX2N0eHQgPSBOVU1fSUJfUE9SVFMgKwogCQkJKHFpYl9uX2tyY3ZfcXVldWVzIC0gMSkgKiBkZC0+bnVtX3Bwb3J0czsKIAkJaWYgKGRkLT5maXJzdF91c2VyX2N0eHQgPiBuY2hpcGN0eHRzKQpAQCAtMzUzMCw4ICszNTg1LDExIEBACiAKIAkvKiBrcl9yY3ZlZ3JjbnQgY2hhbmdlcyBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGNvbnRleHRzIGVuYWJsZWQgKi8KIAlkZC0+Y3NwZWMtPnJjdmVncmNudCA9IHFpYl9yZWFkX2tyZWczMihkZCwga3JfcmN2ZWdyY250KTsKLQlkZC0+cmN2aGRyY250ID0gbWF4KGRkLT5jc3BlYy0+cmN2ZWdyY250LAotCQkJCWRkLT5udW1fcHBvcnRzID4gMSA/IDEwMjRVIDogMjA0OFUpOworCWlmIChxaWJfcmN2aGRyY250KQorCQlkZC0+cmN2aGRyY250ID0gbWF4KGRkLT5jc3BlYy0+cmN2ZWdyY250LCBxaWJfcmN2aGRyY250KTsKKwllbHNlCisJCWRkLT5yY3ZoZHJjbnQgPSBtYXgoZGQtPmNzcGVjLT5yY3ZlZ3JjbnQsCisJCQkJICAgIGRkLT5udW1fcHBvcnRzID4gMSA/IDEwMjRVIDogMjA0OFUpOwogfQogCiBzdGF0aWMgaW50IHFpYl83MzIyX2dldF9pYl9jZmcoc3RydWN0IHFpYl9wcG9ydGRhdGEgKnBwZCwgaW50IHdoaWNoKQpAQCAtNDAwMiw4ICs0MDYwLDE0IEBACiB9CiAKIHN0YXRpYyB2b2lkIHFpYl91cGRhdGVfNzMyMl91c3JoZWFkKHN0cnVjdCBxaWJfY3R4dGRhdGEgKnJjZCwgdTY0IGhkLAotCQkJCSAgICB1MzIgdXBkZWdyLCB1MzIgZWdyaGQpCisJCQkJICAgIHUzMiB1cGRlZ3IsIHUzMiBlZ3JoZCwgdTMyIG5wa3RzKQogeworCS8qCisJICogTmVlZCB0byB3cml0ZSB0aW1lb3V0IHJlZ2lzdGVyIGJlZm9yZSB1cGRhdGluZyByY3ZoZHJoZWFkIHRvIGVuc3VyZQorCSAqIHRoYXQgdGhlIHRpbWVyIGlzIGVuYWJsZWQgb24gcmVjZXB0aW9uIG9mIGEgcGFja2V0LgorCSAqLworCWlmIChoZCA+PiBJQkE3MzIyX0hEUkhFQURfUEtUSU5UX1NISUZUKQorCQlhZGp1c3RfcmN2X3RpbWVvdXQocmNkLCBucGt0cyk7CiAJcWliX3dyaXRlX3VyZWcocmNkLT5kZCwgdXJfcmN2aGRyaGVhZCwgaGQsIHJjZC0+Y3R4dCk7CiAJcWliX3dyaXRlX3VyZWcocmNkLT5kZCwgdXJfcmN2aGRyaGVhZCwgaGQsIHJjZC0+Y3R4dCk7CiAJaWYgKHVwZGVncikKQEAgLTU1MjIsNyArNTU4Niw3IEBACiAJCXU2NCBub3cgPSBnZXRfamlmZmllc182NCgpOwogCQlpZiAodGltZV9hZnRlcjY0KG5vdywgcHdydXApKQogCQkJYnJlYWs7Ci0JCW1zbGVlcCgxKTsKKwkJbXNsZWVwKDIwKTsKIAl9CiAJcmV0ID0gcWliX3JlZnJlc2hfcXNmcF9jYWNoZShwcGQsICZxZC0+Y2FjaGUpOwogCS8qCkBAIC01NTc5LDYgKzU2NDMsNyBAQAogCXUzMiBwaWR4LCB1bml0LCBwb3J0LCBkZWZsdCwgaDE7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IGFueSA9IDAsIHNldGgxOworCWludCB0eGRkc19zaXplOwogCiAJc3RyID0gdHhzZWxlY3RfbGlzdDsKIApAQCAtNTU4Nyw2ICs1NjUyLDEwIEBACiAJZm9yIChwaWR4ID0gMDsgcGlkeCA8IGRkLT5udW1fcHBvcnRzOyArK3BpZHgpCiAJCWRkLT5wcG9ydFtwaWR4XS5jcHNwZWMtPm5vX2VlcCA9IGRlZmx0OwogCisJdHhkZHNfc2l6ZSA9IFRYRERTX1RBQkxFX1NaICsgVFhERFNfRVhUUkFfU1o7CisJaWYgKElTX1FNRShkZCkgfHwgSVNfUU1IKGRkKSkKKwkJdHhkZHNfc2l6ZSArPSBUWEREU19NRkdfU1o7CisKIAl3aGlsZSAoKm54dCAmJiBueHRbMV0pIHsKIAkJc3RyID0gKytueHQ7CiAJCXVuaXQgPSBzaW1wbGVfc3RydG91bChzdHIsICZueHQsIDApOwpAQCAtNTYwOSw3ICs1Njc4LDcgQEAKIAkJCQk7CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAodmFsID49IFRYRERTX1RBQkxFX1NaICsgVFhERFNfRVhUUkFfU1opCisJCWlmICh2YWwgPj0gdHhkZHNfc2l6ZSkKIAkJCWNvbnRpbnVlOwogCQlzZXRoMSA9IDA7CiAJCWgxID0gMDsgLyogZ2NjIHRoaW5rcyBpdCBtaWdodCBiZSB1c2VkIHVuaW5pdHRlZCAqLwpAQCAtNTY2MSwxMCArNTczMCwxMSBAQAogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoc3RyLCAmbiwgMCk7Ci0JaWYgKG4gPT0gc3RyIHx8IHZhbCA+PSAoVFhERFNfVEFCTEVfU1ogKyBUWEREU19FWFRSQV9TWikpIHsKKwlpZiAobiA9PSBzdHIgfHwgdmFsID49IChUWEREU19UQUJMRV9TWiArIFRYRERTX0VYVFJBX1NaICsKKwkJCQlUWEREU19NRkdfU1opKSB7CiAJCXByaW50ayhLRVJOX0lORk8gUUlCX0RSVl9OQU1FCiAJCSAgICAgICAidHhzZWxlY3RfdmFsdWVzIG11c3Qgc3RhcnQgd2l0aCBhIG51bWJlciA8ICVkXG4iLAotCQkJVFhERFNfVEFCTEVfU1ogKyBUWEREU19FWFRSQV9TWik7CisJCQlUWEREU19UQUJMRV9TWiArIFRYRERTX0VYVFJBX1NaICsgVFhERFNfTUZHX1NaKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXN0cmNweSh0eHNlbGVjdF9saXN0LCBzdHIpOwpAQCAtNTgxMCw3ICs1ODgwLDggQEAKIAkJdW5zaWduZWQgbiwgcmVnbm87CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJaWYgKCFkZC0+cXBuX21hc2sgfHwgIWRkLT5wcG9ydFtwaWR4XS5saW5rX3NwZWVkX3N1cHBvcnRlZCkKKwkJaWYgKGRkLT5uX2tyY3ZfcXVldWVzIDwgMiB8fAorCQkJIWRkLT5wcG9ydFtwaWR4XS5saW5rX3NwZWVkX3N1cHBvcnRlZCkKIAkJCWNvbnRpbnVlOwogCiAJCXBwZCA9ICZkZC0+cHBvcnRbcGlkeF07CkBAIC02MDk3LDggKzYxNjgsMTAgQEAKIAkJcHBkKys7CiAJfQogCi0JZGQtPnJjdmhkcmVudHNpemUgPSBRSUJfUkNWSERSX0VOVFNJWkU7Ci0JZGQtPnJjdmhkcnNpemUgPSBRSUJfREZMVF9SQ1ZIRFJTSVpFOworCWRkLT5yY3ZoZHJlbnRzaXplID0gcWliX3JjdmhkcmVudHNpemUgPworCQlxaWJfcmN2aGRyZW50c2l6ZSA6IFFJQl9SQ1ZIRFJfRU5UU0laRTsKKwlkZC0+cmN2aGRyc2l6ZSA9IHFpYl9yY3ZoZHJzaXplID8KKwkJcWliX3JjdmhkcnNpemUgOiBRSUJfREZMVF9SQ1ZIRFJTSVpFOwogCWRkLT5yaGZfb2Zmc2V0ID0gZGQtPnJjdmhkcmVudHNpemUgLSBzaXplb2YodTY0KSAvIHNpemVvZih1MzIpOwogCiAJLyogd2UgYWx3YXlzIGFsbG9jYXRlIGF0IGxlYXN0IDIwNDggYnl0ZXMgZm9yIGVhZ2VyIGJ1ZmZlcnMgKi8KQEAgLTY0OTUsNyArNjU2OCw3IEBACiAJCS8qIG1ha2Ugc3VyZSB3ZSBzZWUgYW4gdXBkYXRlZCBjb3B5IG5leHQgdGltZSBhcm91bmQgKi8KIAkJc2VuZGN0cmxfNzMyMl9tb2QoZGQtPnBwb3J0LCBRSUJfU0VORENUUkxfQVZBSUxfQkxJUCk7CiAJCXNsZWVwcysrOwotCQltc2xlZXAoMSk7CisJCW1zbGVlcCgyMCk7CiAJfQogCiAJc3dpdGNoICh3aGljaCkgewpAQCAtNjk5Myw2ICs3MDY2LDEyIEBACiAJeyAgMCwgMSwgIDAsIDEyIH0sCS8qIFFNSDczNDIgYmFja3BsYW5lIHNldHRpbmdzICovCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHR4ZGRzX2VudCB0eGRkc19leHRyYV9tZmdbVFhERFNfTUZHX1NaXSA9IHsKKwkvKiBhbXAsIHByZSwgbWFpbiwgcG9zdCAqLworCXsgMCwgMCwgMCwgMCB9LCAgICAgICAgIC8qIFFNRTczNDIgbWZnIHNldHRpbmdzICovCisJeyAwLCAwLCAwLCA2IH0sICAgICAgICAgLyogUU1FNzM0MiBQMiBtZmcgc2V0dGluZ3MgKi8KK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHhkZHNfZW50ICpnZXRfYXR0ZW5fdGFibGUoY29uc3Qgc3RydWN0IHR4ZGRzX2VudCAqdHhkZHMsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBhdHRlbikKIHsKQEAgLTcwNjYsNiArNzE0NSwxNiBAQAogCQkqc2RyX2RkcyA9ICZ0eGRkc19leHRyYV9zZHJbaWR4XTsKIAkJKmRkcl9kZHMgPSAmdHhkZHNfZXh0cmFfZGRyW2lkeF07CiAJCSpxZHJfZGRzID0gJnR4ZGRzX2V4dHJhX3FkcltpZHhdOworCX0gZWxzZSBpZiAoKElTX1FNRShwcGQtPmRkKSB8fCBJU19RTUgocHBkLT5kZCkpICYmCisJCSAgIHBwZC0+Y3BzcGVjLT5ub19lZXAgPCAoVFhERFNfVEFCTEVfU1ogKyBUWEREU19FWFRSQV9TWiArCisJCQkJCSAgVFhERFNfTUZHX1NaKSkgeworCQlpZHggPSBwcGQtPmNwc3BlYy0+bm9fZWVwIC0gKFRYRERTX1RBQkxFX1NaICsgVFhERFNfRVhUUkFfU1opOworCQlwcmludGsoS0VSTl9JTkZPIFFJQl9EUlZfTkFNRQorCQkJIiBJQiV1OiV1IHVzZSBpZHggJXUgaW50byB0eGRkc19tZmdcbiIsCisJCQlwcGQtPmRkLT51bml0LCBwcGQtPnBvcnQsIGlkeCk7CisJCSpzZHJfZGRzID0gJnR4ZGRzX2V4dHJhX21mZ1tpZHhdOworCQkqZGRyX2RkcyA9ICZ0eGRkc19leHRyYV9tZmdbaWR4XTsKKwkJKnFkcl9kZHMgPSAmdHhkZHNfZXh0cmFfbWZnW2lkeF07CiAJfSBlbHNlIHsKIAkJLyogdGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBpdCdzIHJhbmdlIGNoZWNrZWQgKi8KIAkJKnNkcl9kZHMgPSB0eGRkc19zZHIgKyBxaWJfbG9uZ19hdHRlbjsKQEAgLTcyMTAsOSArNzI5OSwzMCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc2VyZGVzXzczMjJfbG9zX2VuYWJsZShzdHJ1Y3QgcWliX3Bwb3J0ZGF0YSAqcHBkLCBpbnQgZW5hYmxlKQoreworCXU2NCBkYXRhID0gcWliX3JlYWRfa3JlZ19wb3J0KHBwZCwga3JwX3NlcmRlc2N0cmwpOworCXByaW50ayhLRVJOX0lORk8gUUlCX0RSVl9OQU1FICIgSUIldToldSBUdXJuaW5nIExPUyAlc1xuIiwKKwkJcHBkLT5kZC0+dW5pdCwgcHBkLT5wb3J0LCAoZW5hYmxlID8gIm9uIiA6ICJvZmYiKSk7CisJaWYgKGVuYWJsZSkKKwkJZGF0YSB8PSBTWU1fTUFTSyhJQlNlcmRlc0N0cmxfMCwgUlhMT1NFTik7CisJZWxzZQorCQlkYXRhICY9IH5TWU1fTUFTSyhJQlNlcmRlc0N0cmxfMCwgUlhMT1NFTik7CisJcWliX3dyaXRlX2tyZWdfcG9ydChwcGQsIGtycF9zZXJkZXNjdHJsLCBkYXRhKTsKK30KKwogc3RhdGljIGludCBzZXJkZXNfNzMyMl9pbml0KHN0cnVjdCBxaWJfcHBvcnRkYXRhICpwcGQpCiB7Ci0JdTY0IGRhdGE7CisJaW50IHJldCA9IDA7CisJaWYgKHBwZC0+ZGQtPmNzcGVjLT5yMSkKKwkJcmV0ID0gc2VyZGVzXzczMjJfaW5pdF9vbGQocHBkKTsKKwllbHNlCisJCXJldCA9IHNlcmRlc183MzIyX2luaXRfbmV3KHBwZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzZXJkZXNfNzMyMl9pbml0X29sZChzdHJ1Y3QgcWliX3Bwb3J0ZGF0YSAqcHBkKQorewogCXUzMiBsZV92YWw7CiAKIAkvKgpAQCAtNzI3MCwxMSArNzM4MCw3IEBACiAJaWJzZF93cl9hbGxjaGFucyhwcGQsIDIwLCAoMiA8PCAxMCksIEJNQVNLKDEyLCAxMCkpOyAvKiBERFIgKi8KIAlpYnNkX3dyX2FsbGNoYW5zKHBwZCwgMjAsICg0IDw8IDEzKSwgQk1BU0soMTUsIDEzKSk7IC8qIFNEUiAqLwogCi0JZGF0YSA9IHFpYl9yZWFkX2tyZWdfcG9ydChwcGQsIGtycF9zZXJkZXNjdHJsKTsKLQkvKiBUdXJuIG9mZiBJQiBsYXRlbmN5IG1vZGUgKi8KLQlkYXRhICY9IH5TWU1fTUFTSyhJQlNlcmRlc0N0cmxfMCwgSUJfTEFUX01PREUpOwotCXFpYl93cml0ZV9rcmVnX3BvcnQocHBkLCBrcnBfc2VyZGVzY3RybCwgZGF0YSB8Ci0JCVNZTV9NQVNLKElCU2VyZGVzQ3RybF8wLCBSWExPU0VOKSk7CisJc2VyZGVzXzczMjJfbG9zX2VuYWJsZShwcGQsIDEpOwogCiAJLyogcnhiaXN0ZW5hOyBzZXQgMCB0byBhdm9pZCBlZmZlY3RzIG9mIGl0IHN3aXRjaCBsYXRlciAqLwogCWlic2Rfd3JfYWxsY2hhbnMocHBkLCA5LCAwIDw8IDE1LCAxIDw8IDE1KTsKQEAgLTczMTQsNiArNzQyMCwyMDUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZXJkZXNfNzMyMl9pbml0X25ldyhzdHJ1Y3QgcWliX3Bwb3J0ZGF0YSAqcHBkKQoreworCXU2NCB0c3RhcnQ7CisJdTMyIGxlX3ZhbCwgcnhjYWxkb25lOworCWludCBjaGFuLCBjaGFuX2RvbmUgPSAoMSA8PCBTRVJERVNfQ0hBTlMpIC0gMTsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgVHggRERTIHRhYmxlcy4gIEFsc28gZG9uZSBldmVyeSBRU0ZQIGV2ZW50LAorCSAqIGZvciBhZGFwdGVycyB3aXRoIFFTRlAKKwkgKi8KKwlpbml0X3R4ZGRzX3RhYmxlKHBwZCwgMCk7CisKKwkvKiBDbGVhciBjbW9kZS1vdmVycmlkZSwgbWF5IGJlIHNldCBmcm9tIG9sZGVyIGRyaXZlciAqLworCWFoYl9tb2QocHBkLT5kZCwgSUJTRChwcGQtPmh3X3BpZHgpLCA1LCAxMCwgMCA8PCAxNCwgMSA8PCAxNCk7CisKKwkvKiBlbnN1cmUgbm8gdHggb3ZlcnJpZGVzIGZyb20gZWFybGllciBkcml2ZXIgbG9hZHMgKi8KKwlxaWJfd3JpdGVfa3JlZ19wb3J0KHBwZCwga3JwX3R4X2RlZW1waF9vdmVycmlkZSwKKwkJU1lNX01BU0soSUJTRF9UWF9ERUVNUEhBU0lTX09WRVJSSURFXzAsCisJCXJlc2V0X3R4X2RlZW1waGFzaXNfb3ZlcnJpZGUpKTsKKworCS8qIFNUQVJUIE9GIExTSSBTVUdHRVNURUQgU0VSREVTIEJSSU5HVVAgKi8KKwkvKiBSZXNldCAtIENhbGlicmF0aW9uIFNldHVwICovCisJLyogICAgICAgU3RvcCBERkUgYWRhcHRhaW9uICovCisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDEsIDAsIEJNQVNLKDksIDEpKTsKKwkvKiAgICAgICBEaXNhYmxlIExFMSAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCAxMywgMCwgQk1BU0soNSwgNSkpOworCS8qICAgICAgIERpc2FibGUgYXV0b2FkYXB0IGZvciBMRTEgKi8KKwlpYnNkX3dyX2FsbGNoYW5zKHBwZCwgMSwgMCwgQk1BU0soMTUsIDE1KSk7CisJLyogICAgICAgRGlzYWJsZSBMRTIgKi8KKwlpYnNkX3dyX2FsbGNoYW5zKHBwZCwgMTMsIDAsIEJNQVNLKDYsIDYpKTsKKwkvKiAgICAgICBEaXNhYmxlIFZHQSAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCA1LCAwLCBCTUFTSygwLCAwKSk7CisJLyogICAgICAgRGlzYWJsZSBBRkUgT2Zmc2V0IENhbmNlbCAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCAxMiwgMCwgQk1BU0soMTIsIDEyKSk7CisJLyogICAgICAgRGlzYWJsZSBUaW1pbmcgTG9vcCAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCAyLCAwLCBCTUFTSygzLCAzKSk7CisJLyogICAgICAgRGlzYWJsZSBGcmVxdWVuY3kgTG9vcCAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCAyLCAwLCBCTUFTSyg0LCA0KSk7CisJLyogICAgICAgRGlzYWJsZSBCYXNlbGluZSBXYW5kZXIgQ29ycmVjdGlvbiAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCAxMywgMCwgQk1BU0soMTMsIDEzKSk7CisJLyogICAgICAgRGlzYWJsZSBSWCBDYWxpYnJhdGlvbiAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCA0LCAwLCBCTUFTSygxMCwgMTApKTsKKwkvKiAgICAgICBEaXNhYmxlIFJYIE9mZnNldCBDYWxpYnJhdGlvbiAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCAxMiwgMCwgQk1BU0soNCwgNCkpOworCS8qICAgICAgIFNlbGVjdCBCQiBDRFIgKi8KKwlpYnNkX3dyX2FsbGNoYW5zKHBwZCwgMiwgKDEgPDwgMTUpLCBCTUFTSygxNSwgMTUpKTsKKwkvKiAgICAgICBDRFIgU3RlcCBTaXplICovCisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDUsIDAsIEJNQVNLKDksIDgpKTsKKwkvKiAgICAgICBFbmFibGUgcGhhc2UgQ2FsaWJyYXRpb24gKi8KKwlpYnNkX3dyX2FsbGNoYW5zKHBwZCwgMTIsICgxIDw8IDUpLCBCTUFTSyg1LCA1KSk7CisJLyogICAgICAgREZFIEJhbmR3aWR0aCBbMjoxNC0xMl0gKi8KKwlpYnNkX3dyX2FsbGNoYW5zKHBwZCwgMiwgKDQgPDwgMTIpLCBCTUFTSygxNCwgMTIpKTsKKwkvKiAgICAgICBERkUgQ29uZmlnICg0IHRhcHMgb25seSkgKi8KKwlpYnNkX3dyX2FsbGNoYW5zKHBwZCwgMTYsIDAsIEJNQVNLKDEsIDApKTsKKwkvKiAgICAgICBHYWluIExvb3AgQmFuZHdpZHRoICovCisJaWYgKCFwcGQtPmRkLT5jc3BlYy0+cjEpIHsKKwkJaWJzZF93cl9hbGxjaGFucyhwcGQsIDEyLCAxIDw8IDEyLCBCTUFTSygxMiwgMTIpKTsKKwkJaWJzZF93cl9hbGxjaGFucyhwcGQsIDEyLCAyIDw8IDgsIEJNQVNLKDExLCA4KSk7CisJfSBlbHNlIHsKKwkJaWJzZF93cl9hbGxjaGFucyhwcGQsIDE5LCAoMyA8PCAxMSksIEJNQVNLKDEzLCAxMSkpOworCX0KKwkvKiAgICAgICBCYXNlbGluZSBXYW5kZXIgQ29ycmVjdGlvbiBHYWluIFsxMzo0LTBdIChsZWF2ZSBhcyBkZWZhdWx0KSAqLworCS8qICAgICAgIEJhc2VsaW5lIFdhbmRlciBDb3JyZWN0aW9uIEdhaW4gWzM6Ny01XSAobGVhdmUgYXMgZGVmYXVsdCkgKi8KKwkvKiAgICAgICBEYXRhIFJhdGUgU2VsZWN0IFs1OjctNl0gKGxlYXZlIGFzIGRlZmF1bHQpICovCisJLyogICAgICAgUlggUGFycmFsZWwgV29yZCBXaWR0aCBbMzoxMC04XSAobGVhdmUgYXMgZGVmYXVsdCkgKi8KKworCS8qIFJYIFJFU1QgKi8KKwkvKiAgICAgICBTaW5nbGUtIG9yIE11bHRpLWNoYW5uZWwgcmVzZXQgKi8KKwkvKiAgICAgICBSWCBBbmFsb2cgcmVzZXQgKi8KKwkvKiAgICAgICBSWCBEaWdpdGFsIHJlc2V0ICovCisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDAsIDAsIEJNQVNLKDE1LCAxMykpOworCW1zbGVlcCgyMCk7CisJLyogICAgICAgUlggQW5hbG9nIHJlc2V0ICovCisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDAsICgxIDw8IDE0KSwgQk1BU0soMTQsIDE0KSk7CisJbXNsZWVwKDIwKTsKKwkvKiAgICAgICBSWCBEaWdpdGFsIHJlc2V0ICovCisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDAsICgxIDw8IDEzKSwgQk1BU0soMTMsIDEzKSk7CisJbXNsZWVwKDIwKTsKKworCS8qIHNldHVwIExvUyBwYXJhbXM7IHRoZXNlIGFyZSBzdWJzeXN0ZW0sIHNvIGNoYW4gPT0gNSAqLworCS8qIExvUyBmaWx0ZXIgdGhyZXNob2xkX2NvdW50IG9uLCBjaCAwLTMsIHNldCB0byA4ICovCisJYWhiX21vZChwcGQtPmRkLCBJQlNEKHBwZC0+aHdfcGlkeCksIDUsIDUsIDggPDwgMTEsIEJNQVNLKDE0LCAxMSkpOworCWFoYl9tb2QocHBkLT5kZCwgSUJTRChwcGQtPmh3X3BpZHgpLCA1LCA3LCA4IDw8IDQsIEJNQVNLKDcsIDQpKTsKKwlhaGJfbW9kKHBwZC0+ZGQsIElCU0QocHBkLT5od19waWR4KSwgNSwgOCwgOCA8PCAxMSwgQk1BU0soMTQsIDExKSk7CisJYWhiX21vZChwcGQtPmRkLCBJQlNEKHBwZC0+aHdfcGlkeCksIDUsIDEwLCA4IDw8IDQsIEJNQVNLKDcsIDQpKTsKKworCS8qIExvUyBmaWx0ZXIgdGhyZXNob2xkX2NvdW50IG9mZiwgY2ggMC0zLCBzZXQgdG8gNCAqLworCWFoYl9tb2QocHBkLT5kZCwgSUJTRChwcGQtPmh3X3BpZHgpLCA1LCA2LCA0IDw8IDAsIEJNQVNLKDMsIDApKTsKKwlhaGJfbW9kKHBwZC0+ZGQsIElCU0QocHBkLT5od19waWR4KSwgNSwgNywgNCA8PCA4LCBCTUFTSygxMSwgOCkpOworCWFoYl9tb2QocHBkLT5kZCwgSUJTRChwcGQtPmh3X3BpZHgpLCA1LCA5LCA0IDw8IDAsIEJNQVNLKDMsIDApKTsKKwlhaGJfbW9kKHBwZC0+ZGQsIElCU0QocHBkLT5od19waWR4KSwgNSwgMTAsIDQgPDwgOCwgQk1BU0soMTEsIDgpKTsKKworCS8qIExvUyBmaWx0ZXIgc2VsZWN0IGVuYWJsZWQgKi8KKwlhaGJfbW9kKHBwZC0+ZGQsIElCU0QocHBkLT5od19waWR4KSwgNSwgOSwgMSA8PCAxNSwgMSA8PCAxNSk7CisKKwkvKiBMb1MgdGFyZ2V0IGRhdGE6ICBTRFI9NCwgRERSPTIsIFFEUj0xICovCisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDE0LCAoMSA8PCAzKSwgQk1BU0soNSwgMykpOyAvKiBRRFIgKi8KKwlpYnNkX3dyX2FsbGNoYW5zKHBwZCwgMjAsICgyIDw8IDEwKSwgQk1BU0soMTIsIDEwKSk7IC8qIEREUiAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCAyMCwgKDQgPDwgMTMpLCBCTUFTSygxNSwgMTMpKTsgLyogU0RSICovCisKKwkvKiBUdXJuIG9uIExPUyBvbiBpbml0aWFsIFNFUkRFUyBpbml0ICovCisJc2VyZGVzXzczMjJfbG9zX2VuYWJsZShwcGQsIDEpOworCS8qIEZMb29wIExPUyBnYXRlOiBQUE0gZmlsdGVyICBlbmFibGVkICovCisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDM4LCAwIDw8IDEwLCAxIDw8IDEwKTsKKworCS8qIFJYIExBVENIIENBTElCUkFUSU9OICovCisJLyogICAgICAgRW5hYmxlIEV5ZWZpbmRlciBQaGFzZSBDYWxpYnJhdGlvbiBsYXRjaCAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCAxNSwgMSwgQk1BU0soMCwgMCkpOworCS8qICAgICAgIEVuYWJsZSBSWCBPZmZzZXQgQ2FsaWJyYXRpb24gbGF0Y2ggKi8KKwlpYnNkX3dyX2FsbGNoYW5zKHBwZCwgMTIsICgxIDw8IDQpLCBCTUFTSyg0LCA0KSk7CisJbXNsZWVwKDIwKTsKKwkvKiAgICAgICBTdGFydCBDYWxpYnJhdGlvbiAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCA0LCAoMSA8PCAxMCksIEJNQVNLKDEwLCAxMCkpOworCXRzdGFydCA9IGdldF9qaWZmaWVzXzY0KCk7CisJd2hpbGUgKGNoYW5fZG9uZSAmJgorCSAgICAgICAhdGltZV9hZnRlcjY0KHRzdGFydCwgdHN0YXJ0ICsgbXNlY3NfdG9famlmZmllcyg1MDApKSkgeworCQltc2xlZXAoMjApOworCQlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgU0VSREVTX0NIQU5TOyArK2NoYW4pIHsKKwkJCXJ4Y2FsZG9uZSA9IGFoYl9tb2QocHBkLT5kZCwgSUJTRChwcGQtPmh3X3BpZHgpLAorCQkJCQkgICAgKGNoYW4gKyAoY2hhbiA+PiAxKSksCisJCQkJCSAgICAyNSwgMCwgMCk7CisJCQlpZiAoKH5yeGNhbGRvbmUgJiAodTMyKUJNQVNLKDksIDkpKSA9PSAwICYmCisJCQkgICAgKH5jaGFuX2RvbmUgJiAoMSA8PCBjaGFuKSkgPT0gMCkKKwkJCQljaGFuX2RvbmUgJj0gfigxIDw8IGNoYW4pOworCQl9CisJfQorCWlmIChjaGFuX2RvbmUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBRSUJfRFJWX05BTUUKKwkJCSAiIFNlcmRlcyAlZCBjYWxpYnJhdGlvbiBub3QgZG9uZSBhZnRlciAuNSBzZWM6IDB4JXhcbiIsCisJCQkgSUJTRChwcGQtPmh3X3BpZHgpLCBjaGFuX2RvbmUpOworCX0gZWxzZSB7CisJCWZvciAoY2hhbiA9IDA7IGNoYW4gPCBTRVJERVNfQ0hBTlM7ICsrY2hhbikgeworCQkJcnhjYWxkb25lID0gYWhiX21vZChwcGQtPmRkLCBJQlNEKHBwZC0+aHdfcGlkeCksCisJCQkJCSAgICAoY2hhbiArIChjaGFuID4+IDEpKSwKKwkJCQkJICAgIDI1LCAwLCAwKTsKKwkJCWlmICgofnJ4Y2FsZG9uZSAmICh1MzIpQk1BU0soMTAsIDEwKSkgPT0gMCkKKwkJCQlwcmludGsoS0VSTl9JTkZPIFFJQl9EUlZfTkFNRQorCQkJCQkgIiBTZXJkZXMgJWQgY2hhbiAlZCBjYWxpYnJhdGlvbiAiCisJCQkJCSAiZmFpbGVkXG4iLCBJQlNEKHBwZC0+aHdfcGlkeCksIGNoYW4pOworCQl9CisJfQorCisJLyogICAgICAgVHVybiBvZmYgQ2FsaWJyYXRpb24gKi8KKwlpYnNkX3dyX2FsbGNoYW5zKHBwZCwgNCwgMCwgQk1BU0soMTAsIDEwKSk7CisJbXNsZWVwKDIwKTsKKworCS8qIEJSSU5HIFJYIFVQICovCisJLyogICAgICAgU2V0IExFMiB2YWx1ZSAoTWF5IGJlIG92ZXJyaWRkZW4gaW4gcXNmcF83MzIyX2V2ZW50KSAqLworCWxlX3ZhbCA9IElTX1FNRShwcGQtPmRkKSA/IExFMl9RTUUgOiBMRTJfREVGQVVMVDsKKwlpYnNkX3dyX2FsbGNoYW5zKHBwZCwgMTMsIChsZV92YWwgPDwgNyksIEJNQVNLKDksIDcpKTsKKwkvKiAgICAgICBTZXQgTEUyIExvb3AgYmFuZHdpZHRoICovCisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDMsICg3IDw8IDUpLCBCTUFTSyg3LCA1KSk7CisJLyogICAgICAgRW5hYmxlIExFMiAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCAxMywgKDEgPDwgNiksIEJNQVNLKDYsIDYpKTsKKwltc2xlZXAoMjApOworCS8qICAgICAgIEVuYWJsZSBIMCBvbmx5ICovCisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDEsIDEsIEJNQVNLKDksIDEpKTsKKwkvKiBnYWluIGhpIHN0b3AgMzIgKDIyKSAoNjoxKSBsbyBzdG9wIDcgKDEwOjcpIHRhcmdldCAyMiAoMTMpICgxNToxMSkgKi8KKwlsZV92YWwgPSAocHBkLT5kZC0+Y3NwZWMtPnIxIHx8IElTX1FNRShwcGQtPmRkKSkgPyAweGI2YzAgOiAweDZiYWM7CisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDIxLCBsZV92YWwsIDB4ZmZmZSk7CisJLyogICAgICAgRW5hYmxlIFZHQSAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCA1LCAwLCBCTUFTSygwLCAwKSk7CisJbXNsZWVwKDIwKTsKKwkvKiAgICAgICBTZXQgRnJlcXVlbmN5IExvb3AgQmFuZHdpZHRoICovCisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDIsICg3IDw8IDUpLCBCTUFTSyg4LCA1KSk7CisJLyogICAgICAgRW5hYmxlIEZyZXF1ZW5jeSBMb29wICovCisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDIsICgxIDw8IDQpLCBCTUFTSyg0LCA0KSk7CisJLyogICAgICAgU2V0IFRpbWluZyBMb29wIEJhbmR3aWR0aCAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCAyLCAwLCBCTUFTSygxMSwgOSkpOworCS8qICAgICAgIEVuYWJsZSBUaW1pbmcgTG9vcCAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCAyLCAoMSA8PCAzKSwgQk1BU0soMywgMykpOworCW1zbGVlcCg1MCk7CisJLyogICAgICAgRW5hYmxlIERGRQorCSAqICAgICAgIFNldCByZWNlaXZlIGFkYXB0YXRpb24gbW9kZS4gIFNEUiBhbmQgRERSIGFkYXB0YXRpb24gYXJlCisJICogICAgICAgYWx3YXlzIG9uLCBhbmQgUURSIGlzIGluaXRpYWxseSBlbmFibGVkOyBsYXRlciBkaXNhYmxlZC4KKwkgKi8KKwlxaWJfd3JpdGVfa3JlZ19wb3J0KHBwZCwga3JwX3N0YXRpY19hZGFwdF9kaXMoMCksIDBVTEwpOworCXFpYl93cml0ZV9rcmVnX3BvcnQocHBkLCBrcnBfc3RhdGljX2FkYXB0X2RpcygxKSwgMFVMTCk7CisJcWliX3dyaXRlX2tyZWdfcG9ydChwcGQsIGtycF9zdGF0aWNfYWRhcHRfZGlzKDIpLAorCQkJICAgIHBwZC0+ZGQtPmNzcGVjLT5yMSA/CisJCQkgICAgUURSX1NUQVRJQ19BREFQVF9ET1dOX1IxIDogUURSX1NUQVRJQ19BREFQVF9ET1dOKTsKKwlwcGQtPmNwc3BlYy0+cWRyX2RmZV9vbiA9IDE7CisJLyogICAgICAgRGlzYWJsZSBMRTEgICovCisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDEzLCAoMCA8PCA1KSwgKDEgPDwgNSkpOworCS8qICAgICAgIERpc2FibGUgYXV0byBhZGFwdCBmb3IgTEUxICovCisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDEsICgwIDw8IDE1KSwgQk1BU0soMTUsIDE1KSk7CisJbXNsZWVwKDIwKTsKKwkvKiAgICAgICBFbmFibGUgQUZFIE9mZnNldCBDYW5jZWwgKi8KKwlpYnNkX3dyX2FsbGNoYW5zKHBwZCwgMTIsICgxIDw8IDEyKSwgQk1BU0soMTIsIDEyKSk7CisJLyogICAgICAgRW5hYmxlIEJhc2VsaW5lIFdhbmRlciBDb3JyZWN0aW9uICovCisJaWJzZF93cl9hbGxjaGFucyhwcGQsIDEyLCAoMSA8PCAxMyksIEJNQVNLKDEzLCAxMykpOworCS8qIFRlcm1pbmF0aW9uOiByeHRlcm1jdHJsX3IyZCBhZGRyIDExIGJpdHMgWzEyOjExXSA9IDEgKi8KKwlpYnNkX3dyX2FsbGNoYW5zKHBwZCwgMTEsICgxIDw8IDExKSwgQk1BU0soMTIsIDExKSk7CisJLyogVkdBIG91dHB1dCBjb21tb24gbW9kZSAqLworCWlic2Rfd3JfYWxsY2hhbnMocHBkLCAxMiwgKDMgPDwgMiksIEJNQVNLKDMsIDIpKTsKKworCXJldHVybiAwOworfQorCiAvKiBzdGFydCBhZGp1c3QgUU1IIHNlcmRlcyBwYXJhbWV0ZXJzICovCiAKIHN0YXRpYyB2b2lkIHNldF9tYW5fY29kZShzdHJ1Y3QgcWliX3Bwb3J0ZGF0YSAqcHBkLCBpbnQgY2hhbiwgaW50IGNvZGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pbml0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pbml0LmMKaW5kZXggZjNiNTAzOS4uNzg5NmFmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaW5pdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2luaXQuYwpAQCAtOTIsOSArOTIsMTEgQEAKIC8qIHNldCBudW1iZXIgb2YgY29udGV4dHMgd2UnbGwgYWN0dWFsbHkgdXNlICovCiB2b2lkIHFpYl9zZXRfY3R4dGNudChzdHJ1Y3QgcWliX2RldmRhdGEgKmRkKQogewotCWlmICghcWliX2NmZ2N0eHRzKQorCWlmICghcWliX2NmZ2N0eHRzKSB7CiAJCWRkLT5jZmdjdHh0cyA9IGRkLT5maXJzdF91c2VyX2N0eHQgKyBudW1fb25saW5lX2NwdXMoKTsKLQllbHNlIGlmIChxaWJfY2ZnY3R4dHMgPCBkZC0+bnVtX3Bwb3J0cykKKwkJaWYgKGRkLT5jZmdjdHh0cyA+IGRkLT5jdHh0Y250KQorCQkJZGQtPmNmZ2N0eHRzID0gZGQtPmN0eHRjbnQ7CisJfSBlbHNlIGlmIChxaWJfY2ZnY3R4dHMgPCBkZC0+bnVtX3Bwb3J0cykKIAkJZGQtPmNmZ2N0eHRzID0gZGQtPmN0eHRjbnQ7CiAJZWxzZSBpZiAocWliX2NmZ2N0eHRzIDw9IGRkLT5jdHh0Y250KQogCQlkZC0+Y2ZnY3R4dHMgPSBxaWJfY2ZnY3R4dHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pbnRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pbnRyLmMKaW5kZXggNTRhNDA4Mi4uYTY5M2M1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaW50ci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2ludHIuYwpAQCAtMTMxLDcgKzEzMSw4IEBACiAJCQkvKiBzdGFydCBhIDc1bXNlYyB0aW1lciB0byBjbGVhciBzeW1ib2wgZXJyb3JzICovCiAJCQltb2RfdGltZXIoJnBwZC0+c3ltZXJyX2NsZWFyX3RpbWVyLAogCQkJCSAgbXNlY3NfdG9famlmZmllcyg3NSkpOwotCQl9IGVsc2UgaWYgKGx0c3RhdGUgPT0gSUJfUEhZU1BPUlRTVEFURV9MSU5LVVApIHsKKwkJfSBlbHNlIGlmIChsdHN0YXRlID09IElCX1BIWVNQT1JUU1RBVEVfTElOS1VQICYmCisJCQkgICAhKHBwZC0+bGZsYWdzICYgUUlCTF9MSU5LQUNUSVZFKSkgewogCQkJLyogYWN0aXZlLCBidXQgbm90IGFjdGl2ZSBkZWZlcmVkICovCiAJCQlxaWJfaG9sX3VwKHBwZCk7IC8qIHVzZWZ1bCBvbmx5IGZvciA2MTIwIG5vdyAqLwogCQkJKnBwZC0+c3RhdHVzcCB8PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfa2V5cy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfa2V5cy5jCmluZGV4IDRiODBlYjEuLjhmZDE5YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2tleXMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9rZXlzLmMKQEAgLTEzNiw3ICsxMzYsNiBAQAogCXN0cnVjdCBxaWJfbXJlZ2lvbiAqbXI7CiAJdW5zaWduZWQgbiwgbTsKIAlzaXplX3Qgb2ZmOwotCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKgpAQCAtMTUyLDYgKzE1MSw4IEBACiAJCWlmICghZGV2LT5kbWFfbXIpCiAJCQlnb3RvIGJhaWw7CiAJCWF0b21pY19pbmMoJmRldi0+ZG1hX21yLT5yZWZjb3VudCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJrdC0+bG9jaywgZmxhZ3MpOworCiAJCWlzZ2UtPm1yID0gZGV2LT5kbWFfbXI7CiAJCWlzZ2UtPnZhZGRyID0gKHZvaWQgKikgc2dlLT5hZGRyOwogCQlpc2dlLT5sZW5ndGggPSBzZ2UtPmxlbmd0aDsKQEAgLTE3MCwxOSArMTcxLDM0IEBACiAJCSAgICAgb2ZmICsgc2dlLT5sZW5ndGggPiBtci0+bGVuZ3RoIHx8CiAJCSAgICAgKG1yLT5hY2Nlc3NfZmxhZ3MgJiBhY2MpICE9IGFjYykpCiAJCWdvdG8gYmFpbDsKKwlhdG9taWNfaW5jKCZtci0+cmVmY291bnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJrdC0+bG9jaywgZmxhZ3MpOwogCiAJb2ZmICs9IG1yLT5vZmZzZXQ7Ci0JbSA9IDA7Ci0JbiA9IDA7Ci0Jd2hpbGUgKG9mZiA+PSBtci0+bWFwW21dLT5zZWdzW25dLmxlbmd0aCkgewotCQlvZmYgLT0gbXItPm1hcFttXS0+c2Vnc1tuXS5sZW5ndGg7Ci0JCW4rKzsKLQkJaWYgKG4gPj0gUUlCX1NFR1NaKSB7Ci0JCQltKys7Ci0JCQluID0gMDsKKwlpZiAobXItPnBhZ2Vfc2hpZnQpIHsKKwkJLyoKKwkJcGFnZSBzaXplcyBhcmUgdW5pZm9ybSBwb3dlciBvZiAyIHNvIG5vIGxvb3AgaXMgbmVjZXNzYXJ5CisJCWVudHJpZXNfc3Bhbm5lZF9ieV9vZmYgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgbG9vcCBiZWxvdworCQl3b3VsZCBoYXZlIGV4ZWN1dGVkLgorCQkqLworCQlzaXplX3QgZW50cmllc19zcGFubmVkX2J5X29mZjsKKworCQllbnRyaWVzX3NwYW5uZWRfYnlfb2ZmID0gb2ZmID4+IG1yLT5wYWdlX3NoaWZ0OworCQlvZmYgLT0gKGVudHJpZXNfc3Bhbm5lZF9ieV9vZmYgPDwgbXItPnBhZ2Vfc2hpZnQpOworCQltID0gZW50cmllc19zcGFubmVkX2J5X29mZi9RSUJfU0VHU1o7CisJCW4gPSBlbnRyaWVzX3NwYW5uZWRfYnlfb2ZmJVFJQl9TRUdTWjsKKwl9IGVsc2UgeworCQltID0gMDsKKwkJbiA9IDA7CisJCXdoaWxlIChvZmYgPj0gbXItPm1hcFttXS0+c2Vnc1tuXS5sZW5ndGgpIHsKKwkJCW9mZiAtPSBtci0+bWFwW21dLT5zZWdzW25dLmxlbmd0aDsKKwkJCW4rKzsKKwkJCWlmIChuID49IFFJQl9TRUdTWikgeworCQkJCW0rKzsKKwkJCQluID0gMDsKKwkJCX0KIAkJfQogCX0KLQlhdG9taWNfaW5jKCZtci0+cmVmY291bnQpOwogCWlzZ2UtPm1yID0gbXI7CiAJaXNnZS0+dmFkZHIgPSBtci0+bWFwW21dLT5zZWdzW25dLnZhZGRyICsgb2ZmOwogCWlzZ2UtPmxlbmd0aCA9IG1yLT5tYXBbbV0tPnNlZ3Nbbl0ubGVuZ3RoIC0gb2ZmOwpAQCAtMTkwLDEwICsyMDYsMTAgQEAKIAlpc2dlLT5tID0gbTsKIAlpc2dlLT5uID0gbjsKIG9rOgotCXJldCA9IDE7CisJcmV0dXJuIDE7CiBiYWlsOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJrdC0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMjE0LDcgKzIzMCw2IEBACiAJc3RydWN0IHFpYl9tcmVnaW9uICptcjsKIAl1bnNpZ25lZCBuLCBtOwogCXNpemVfdCBvZmY7Ci0JaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qCkBAIC0yMzEsNiArMjQ2LDggQEAKIAkJaWYgKCFkZXYtPmRtYV9tcikKIAkJCWdvdG8gYmFpbDsKIAkJYXRvbWljX2luYygmZGV2LT5kbWFfbXItPnJlZmNvdW50KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmt0LT5sb2NrLCBmbGFncyk7CisKIAkJc2dlLT5tciA9IGRldi0+ZG1hX21yOwogCQlzZ2UtPnZhZGRyID0gKHZvaWQgKikgdmFkZHI7CiAJCXNnZS0+bGVuZ3RoID0gbGVuOwpAQCAtMjQ4LDE5ICsyNjUsMzQgQEAKIAlpZiAodW5saWtlbHkodmFkZHIgPCBtci0+aW92YSB8fCBvZmYgKyBsZW4gPiBtci0+bGVuZ3RoIHx8CiAJCSAgICAgKG1yLT5hY2Nlc3NfZmxhZ3MgJiBhY2MpID09IDApKQogCQlnb3RvIGJhaWw7CisJYXRvbWljX2luYygmbXItPnJlZmNvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZya3QtPmxvY2ssIGZsYWdzKTsKIAogCW9mZiArPSBtci0+b2Zmc2V0OwotCW0gPSAwOwotCW4gPSAwOwotCXdoaWxlIChvZmYgPj0gbXItPm1hcFttXS0+c2Vnc1tuXS5sZW5ndGgpIHsKLQkJb2ZmIC09IG1yLT5tYXBbbV0tPnNlZ3Nbbl0ubGVuZ3RoOwotCQluKys7Ci0JCWlmIChuID49IFFJQl9TRUdTWikgewotCQkJbSsrOwotCQkJbiA9IDA7CisJaWYgKG1yLT5wYWdlX3NoaWZ0KSB7CisJCS8qCisJCXBhZ2Ugc2l6ZXMgYXJlIHVuaWZvcm0gcG93ZXIgb2YgMiBzbyBubyBsb29wIGlzIG5lY2Vzc2FyeQorCQllbnRyaWVzX3NwYW5uZWRfYnlfb2ZmIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGxvb3AgYmVsb3cKKwkJd291bGQgaGF2ZSBleGVjdXRlZC4KKwkJKi8KKwkJc2l6ZV90IGVudHJpZXNfc3Bhbm5lZF9ieV9vZmY7CisKKwkJZW50cmllc19zcGFubmVkX2J5X29mZiA9IG9mZiA+PiBtci0+cGFnZV9zaGlmdDsKKwkJb2ZmIC09IChlbnRyaWVzX3NwYW5uZWRfYnlfb2ZmIDw8IG1yLT5wYWdlX3NoaWZ0KTsKKwkJbSA9IGVudHJpZXNfc3Bhbm5lZF9ieV9vZmYvUUlCX1NFR1NaOworCQluID0gZW50cmllc19zcGFubmVkX2J5X29mZiVRSUJfU0VHU1o7CisJfSBlbHNlIHsKKwkJbSA9IDA7CisJCW4gPSAwOworCQl3aGlsZSAob2ZmID49IG1yLT5tYXBbbV0tPnNlZ3Nbbl0ubGVuZ3RoKSB7CisJCQlvZmYgLT0gbXItPm1hcFttXS0+c2Vnc1tuXS5sZW5ndGg7CisJCQluKys7CisJCQlpZiAobiA+PSBRSUJfU0VHU1opIHsKKwkJCQltKys7CisJCQkJbiA9IDA7CisJCQl9CiAJCX0KIAl9Ci0JYXRvbWljX2luYygmbXItPnJlZmNvdW50KTsKIAlzZ2UtPm1yID0gbXI7CiAJc2dlLT52YWRkciA9IG1yLT5tYXBbbV0tPnNlZ3Nbbl0udmFkZHIgKyBvZmY7CiAJc2dlLT5sZW5ndGggPSBtci0+bWFwW21dLT5zZWdzW25dLmxlbmd0aCAtIG9mZjsKQEAgLTI2OCwxMCArMzAwLDEwIEBACiAJc2dlLT5tID0gbTsKIAlzZ2UtPm4gPSBuOwogb2s6Ci0JcmV0ID0gMTsKKwlyZXR1cm4gMTsKIGJhaWw6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmt0LT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfbWFkLmMKaW5kZXggOTRiMGQxZi4uNWFkMjI0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfbWFkLmMKQEAgLTY2OCw4ICs2NjgsOCBAQAogCWxpZCA9IGJlMTZfdG9fY3B1KHBpcC0+bGlkKTsKIAkvKiBNdXN0IGJlIGEgdmFsaWQgdW5pY2FzdCBMSUQgYWRkcmVzcy4gKi8KIAlpZiAobGlkID09IDAgfHwgbGlkID49IFFJQl9NVUxUSUNBU1RfTElEX0JBU0UpCi0JCWdvdG8gZXJyOwotCWlmIChwcGQtPmxpZCAhPSBsaWQgfHwgcHBkLT5sbWMgIT0gKHBpcC0+bWtleXByb3RfcmVzdl9sbWMgJiA3KSkgeworCQlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKKwllbHNlIGlmIChwcGQtPmxpZCAhPSBsaWQgfHwgcHBkLT5sbWMgIT0gKHBpcC0+bWtleXByb3RfcmVzdl9sbWMgJiA3KSkgewogCQlpZiAocHBkLT5saWQgIT0gbGlkKQogCQkJcWliX3NldF91ZXZlbnRfYml0cyhwcGQsIF9RSUJfRVZFTlRfTElEX0NIQU5HRV9CSVQpOwogCQlpZiAocHBkLT5sbWMgIT0gKHBpcC0+bWtleXByb3RfcmVzdl9sbWMgJiA3KSkKQEAgLTY4Myw4ICs2ODMsOCBAQAogCW1zbCA9IHBpcC0+bmVpZ2hib3JtdHVfbWFzdGVyc21zbCAmIDB4RjsKIAkvKiBNdXN0IGJlIGEgdmFsaWQgdW5pY2FzdCBMSUQgYWRkcmVzcy4gKi8KIAlpZiAoc21saWQgPT0gMCB8fCBzbWxpZCA+PSBRSUJfTVVMVElDQVNUX0xJRF9CQVNFKQotCQlnb3RvIGVycjsKLQlpZiAoc21saWQgIT0gaWJwLT5zbV9saWQgfHwgbXNsICE9IGlicC0+c21fc2wpIHsKKwkJc21wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CisJZWxzZSBpZiAoc21saWQgIT0gaWJwLT5zbV9saWQgfHwgbXNsICE9IGlicC0+c21fc2wpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmlicC0+bG9jaywgZmxhZ3MpOwogCQlpZiAoaWJwLT5zbV9haCkgewogCQkJaWYgKHNtbGlkICE9IGlicC0+c21fbGlkKQpAQCAtNzA3LDggKzcwNyw5IEBACiAJCWlmIChsd2UgPT0gMHhGRikKIAkJCWx3ZSA9IHBwZC0+bGlua193aWR0aF9zdXBwb3J0ZWQ7CiAJCWVsc2UgaWYgKGx3ZSA+PSAxNiB8fCAobHdlICYgfnBwZC0+bGlua193aWR0aF9zdXBwb3J0ZWQpKQotCQkJZ290byBlcnI7Ci0JCXNldF9saW5rX3dpZHRoX2VuYWJsZWQocHBkLCBsd2UpOworCQkJc21wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CisJCWVsc2UgaWYgKGx3ZSAhPSBwcGQtPmxpbmtfd2lkdGhfZW5hYmxlZCkKKwkJCXNldF9saW5rX3dpZHRoX2VuYWJsZWQocHBkLCBsd2UpOwogCX0KIAogCWxzZSA9IHBpcC0+bGlua3NwZWVkYWN0aXZlX2VuYWJsZWQgJiAweEY7CkBAIC03MjEsOCArNzIyLDkgQEAKIAkJaWYgKGxzZSA9PSAxNSkKIAkJCWxzZSA9IHBwZC0+bGlua19zcGVlZF9zdXBwb3J0ZWQ7CiAJCWVsc2UgaWYgKGxzZSA+PSA4IHx8IChsc2UgJiB+cHBkLT5saW5rX3NwZWVkX3N1cHBvcnRlZCkpCi0JCQlnb3RvIGVycjsKLQkJc2V0X2xpbmtfc3BlZWRfZW5hYmxlZChwcGQsIGxzZSk7CisJCQlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKKwkJZWxzZSBpZiAobHNlICE9IHBwZC0+bGlua19zcGVlZF9lbmFibGVkKQorCQkJc2V0X2xpbmtfc3BlZWRfZW5hYmxlZChwcGQsIGxzZSk7CiAJfQogCiAJLyogU2V0IGxpbmsgZG93biBkZWZhdWx0IHN0YXRlLiAqLwpAQCAtNzM4LDcgKzc0MCw3IEBACiAJCQkJCUlCX0xJTktJTklUQ01EX1BPTEwpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlnb3RvIGVycjsKKwkJc21wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CiAJfQogCiAJaWJwLT5ta2V5cHJvdCA9IHBpcC0+bWtleXByb3RfcmVzdl9sbWMgPj4gNjsKQEAgLTc0OCwxNSArNzUwLDE3IEBACiAKIAltdHUgPSBpYl9tdHVfZW51bV90b19pbnQoKHBpcC0+bmVpZ2hib3JtdHVfbWFzdGVyc21zbCA+PiA0KSAmIDB4Rik7CiAJaWYgKG10dSA9PSAtMSkKLQkJZ290byBlcnI7Ci0JcWliX3NldF9tdHUocHBkLCBtdHUpOworCQlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKKwllbHNlCisJCXFpYl9zZXRfbXR1KHBwZCwgbXR1KTsKIAogCS8qIFNldCBvcGVyYXRpb25hbCBWTHMgKi8KIAl2bHMgPSAocGlwLT5vcGVyYXRpb25hbHZsX3BlaV9wZW9fZnBpX2ZwbyA+PiA0KSAmIDB4RjsKIAlpZiAodmxzKSB7CiAJCWlmICh2bHMgPiBwcGQtPnZsc19zdXBwb3J0ZWQpCi0JCQlnb3RvIGVycjsKLQkJKHZvaWQpIGRkLT5mX3NldF9pYl9jZmcocHBkLCBRSUJfSUJfQ0ZHX09QX1ZMUywgdmxzKTsKKwkJCXNtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOworCQllbHNlCisJCQkodm9pZCkgZGQtPmZfc2V0X2liX2NmZyhwcGQsIFFJQl9JQl9DRkdfT1BfVkxTLCB2bHMpOwogCX0KIAogCWlmIChwaXAtPm1rZXlfdmlvbGF0aW9ucyA9PSAwKQpAQCAtNzcwLDEwICs3NzQsMTAgQEAKIAogCW9yZSA9IHBpcC0+bG9jYWxwaHllcnJvcnNfb3ZlcnJ1bmVycm9yczsKIAlpZiAoc2V0X3BoeWVycnRocmVzaG9sZChwcGQsIChvcmUgPj4gNCkgJiAweEYpKQotCQlnb3RvIGVycjsKKwkJc21wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CiAKIAlpZiAoc2V0X292ZXJydW50aHJlc2hvbGQocHBkLCAob3JlICYgMHhGKSkpCi0JCWdvdG8gZXJyOworCQlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKIAogCWlicC0+c3VibmV0X3RpbWVvdXQgPSBwaXAtPmNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG8gJiAweDFGOwogCkBAIC03OTIsNyArNzk2LDcgQEAKIAlzdGF0ZSA9IHBpcC0+bGlua3NwZWVkX3BvcnRzdGF0ZSAmIDB4RjsKIAlsc3RhdGUgPSAocGlwLT5wb3J0cGh5c3N0YXRlX2xpbmtkb3duID4+IDQpICYgMHhGOwogCWlmIChsc3RhdGUgJiYgIShzdGF0ZSA9PSBJQl9QT1JUX0RPV04gfHwgc3RhdGUgPT0gSUJfUE9SVF9OT1ApKQotCQlnb3RvIGVycjsKKwkJc21wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CiAKIAkvKgogCSAqIE9ubHkgc3RhdGUgY2hhbmdlcyBvZiBET1dOLCBBUk0sIGFuZCBBQ1RJVkUgYXJlIHZhbGlkCkBAIC04MTIsOCArODE2LDEwIEBACiAJCQlsc3RhdGUgPSBRSUJfSUJfTElOS0RPV047CiAJCWVsc2UgaWYgKGxzdGF0ZSA9PSAzKQogCQkJbHN0YXRlID0gUUlCX0lCX0xJTktET1dOX0RJU0FCTEU7Ci0JCWVsc2UKLQkJCWdvdG8gZXJyOworCQllbHNlIHsKKwkJCXNtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOworCQkJYnJlYWs7CisJCX0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnBwZC0+bGZsYWdzX2xvY2ssIGZsYWdzKTsKIAkJcHBkLT5sZmxhZ3MgJj0gflFJQkxfTElOS1Y7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBwZC0+bGZsYWdzX2xvY2ssIGZsYWdzKTsKQEAgLTgzNSw4ICs4NDEsNyBAQAogCQlxaWJfc2V0X2xpbmtzdGF0ZShwcGQsIFFJQl9JQl9MSU5LQUNUSVZFKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJLyogWFhYIFdlIGhhdmUgYWxyZWFkeSBwYXJ0aWFsbHkgdXBkYXRlZCBvdXIgc3RhdGUhICovCi0JCWdvdG8gZXJyOworCQlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKIAl9CiAKIAlyZXQgPSBzdWJuX2dldF9wb3J0aW5mbyhzbXAsIGliZGV2LCBwb3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX21yLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9tci5jCmluZGV4IDVmOTVmMGYuLjA4OTQ0ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX21yLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfbXIuYwpAQCAtMzksNyArMzksNiBAQAogLyogRmFzdCBtZW1vcnkgcmVnaW9uICovCiBzdHJ1Y3QgcWliX2ZtciB7CiAJc3RydWN0IGliX2ZtciBpYmZtcjsKLQl1OCBwYWdlX3NoaWZ0OwogCXN0cnVjdCBxaWJfbXJlZ2lvbiBtcjsgICAgICAgIC8qIG11c3QgYmUgbGFzdCAqLwogfTsKIApAQCAtMTA3LDYgKzEwNiw3IEBACiAJCQlnb3RvIGJhaWw7CiAJfQogCW1yLT5tci5tYXBzeiA9IG07CisJbXItPm1yLnBhZ2Vfc2hpZnQgPSAwOwogCW1yLT5tci5tYXhfc2VncyA9IGNvdW50OwogCiAJLyoKQEAgLTIzMSw2ICsyMzEsOCBAQAogCW1yLT5tci5hY2Nlc3NfZmxhZ3MgPSBtcl9hY2Nlc3NfZmxhZ3M7CiAJbXItPnVtZW0gPSB1bWVtOwogCisJaWYgKGlzX3Bvd2VyX29mXzIodW1lbS0+cGFnZV9zaXplKSkKKwkJbXItPm1yLnBhZ2Vfc2hpZnQgPSBpbG9nMih1bWVtLT5wYWdlX3NpemUpOwogCW0gPSAwOwogCW4gPSAwOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssICZ1bWVtLT5jaHVua19saXN0LCBsaXN0KSB7CkBAIC0zOTAsNyArMzkyLDcgQEAKIAlmbXItPm1yLm9mZnNldCA9IDA7CiAJZm1yLT5tci5hY2Nlc3NfZmxhZ3MgPSBtcl9hY2Nlc3NfZmxhZ3M7CiAJZm1yLT5tci5tYXhfc2VncyA9IGZtcl9hdHRyLT5tYXhfcGFnZXM7Ci0JZm1yLT5wYWdlX3NoaWZ0ID0gZm1yX2F0dHItPnBhZ2Vfc2hpZnQ7CisJZm1yLT5tci5wYWdlX3NoaWZ0ID0gZm1yX2F0dHItPnBhZ2Vfc2hpZnQ7CiAKIAlhdG9taWNfc2V0KCZmbXItPm1yLnJlZmNvdW50LCAwKTsKIAlyZXQgPSAmZm1yLT5pYmZtcjsKQEAgLTQzNyw3ICs0MzksNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZya3QtPmxvY2ssIGZsYWdzKTsKIAlmbXItPm1yLnVzZXJfYmFzZSA9IGlvdmE7CiAJZm1yLT5tci5pb3ZhID0gaW92YTsKLQlwcyA9IDEgPDwgZm1yLT5wYWdlX3NoaWZ0OworCXBzID0gMSA8PCBmbXItPm1yLnBhZ2Vfc2hpZnQ7CiAJZm1yLT5tci5sZW5ndGggPSBsaXN0X2xlbiAqIHBzOwogCW0gPSAwOwogCW4gPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3FwLmMKaW5kZXggNmMzOTg1MS4uZTE2NzUxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9xcC5jCkBAIC00OCwxMyArNDgsMTIgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBmaW5kX25leHRfb2Zmc2V0KHN0cnVjdCBxaWJfcXBuX3RhYmxlICpxcHQsCiAJCQkJCXN0cnVjdCBxcG5fbWFwICptYXAsIHVuc2lnbmVkIG9mZiwKLQkJCQkJdW5zaWduZWQgcikKKwkJCQkJdW5zaWduZWQgbikKIHsKIAlpZiAocXB0LT5tYXNrKSB7CiAJCW9mZisrOwotCQlpZiAoKG9mZiAmIHFwdC0+bWFzaykgPj4gMSAhPSByKQotCQkJb2ZmID0gKChvZmYgJiBxcHQtPm1hc2spID8KLQkJCQkob2ZmIHwgcXB0LT5tYXNrKSArIDEgOiBvZmYpIHwgKHIgPDwgMSk7CisJCWlmICgoKG9mZiAmIHFwdC0+bWFzaykgPj4gMSkgPj0gbikKKwkJCW9mZiA9IChvZmYgfCBxcHQtPm1hc2spICsgMjsKIAl9IGVsc2UKIAkJb2ZmID0gZmluZF9uZXh0X3plcm9fYml0KG1hcC0+cGFnZSwgQklUU19QRVJfUEFHRSwgb2ZmKTsKIAlyZXR1cm4gb2ZmOwpAQCAtMTIzLDcgKzEyMiw2IEBACiAJdTMyIGksIG9mZnNldCwgbWF4X3NjYW4sIHFwbjsKIAlzdHJ1Y3QgcXBuX21hcCAqbWFwOwogCXUzMiByZXQ7Ci0JaW50IHI7CiAKIAlpZiAodHlwZSA9PSBJQl9RUFRfU01JIHx8IHR5cGUgPT0gSUJfUVBUX0dTSSkgewogCQl1bnNpZ25lZCBuOwpAQCAtMTM5LDE1ICsxMzcsMTEgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCXIgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JaWYgKHIgPj0gZGQtPm5fa3Jjdl9xdWV1ZXMpCi0JCXIgJT0gZGQtPm5fa3Jjdl9xdWV1ZXM7Ci0JcXBuID0gcXB0LT5sYXN0ICsgMTsKKwlxcG4gPSBxcHQtPmxhc3QgKyAyOwogCWlmIChxcG4gPj0gUVBOX01BWCkKIAkJcXBuID0gMjsKLQlpZiAocXB0LT5tYXNrICYmICgocXBuICYgcXB0LT5tYXNrKSA+PiAxKSAhPSByKQotCQlxcG4gPSAoKHFwbiAmIHFwdC0+bWFzaykgPyAocXBuIHwgcXB0LT5tYXNrKSArIDEgOiBxcG4pIHwKLQkJCShyIDw8IDEpOworCWlmIChxcHQtPm1hc2sgJiYgKChxcG4gJiBxcHQtPm1hc2spID4+IDEpID49IGRkLT5uX2tyY3ZfcXVldWVzKQorCQlxcG4gPSAocXBuIHwgcXB0LT5tYXNrKSArIDI7CiAJb2Zmc2V0ID0gcXBuICYgQklUU19QRVJfUEFHRV9NQVNLOwogCW1hcCA9ICZxcHQtPm1hcFtxcG4gLyBCSVRTX1BFUl9QQUdFXTsKIAltYXhfc2NhbiA9IHFwdC0+bm1hcHMgLSAhb2Zmc2V0OwpAQCAtMTYzLDcgKzE1Nyw4IEBACiAJCQkJcmV0ID0gcXBuOwogCQkJCWdvdG8gYmFpbDsKIAkJCX0KLQkJCW9mZnNldCA9IGZpbmRfbmV4dF9vZmZzZXQocXB0LCBtYXAsIG9mZnNldCwgcik7CisJCQlvZmZzZXQgPSBmaW5kX25leHRfb2Zmc2V0KHFwdCwgbWFwLCBvZmZzZXQsCisJCQkJZGQtPm5fa3Jjdl9xdWV1ZXMpOwogCQkJcXBuID0gbWtfcXBuKHFwdCwgbWFwLCBvZmZzZXQpOwogCQkJLyoKIAkJCSAqIFRoaXMgdGVzdCBkaWZmZXJzIGZyb20gYWxsb2NfcGlkbWFwKCkuCkBAIC0xODMsMTMgKzE3OCwxMyBAQAogCQkJaWYgKHFwdC0+bm1hcHMgPT0gUVBOTUFQX0VOVFJJRVMpCiAJCQkJYnJlYWs7CiAJCQltYXAgPSAmcXB0LT5tYXBbcXB0LT5ubWFwcysrXTsKLQkJCW9mZnNldCA9IHFwdC0+bWFzayA/IChyIDw8IDEpIDogMDsKKwkJCW9mZnNldCA9IDA7CiAJCX0gZWxzZSBpZiAobWFwIDwgJnFwdC0+bWFwW3FwdC0+bm1hcHNdKSB7CiAJCQkrK21hcDsKLQkJCW9mZnNldCA9IHFwdC0+bWFzayA/IChyIDw8IDEpIDogMDsKKwkJCW9mZnNldCA9IDA7CiAJCX0gZWxzZSB7CiAJCQltYXAgPSAmcXB0LT5tYXBbMF07Ci0JCQlvZmZzZXQgPSBxcHQtPm1hc2sgPyAociA8PCAxKSA6IDI7CisJCQlvZmZzZXQgPSAyOwogCQl9CiAJCXFwbiA9IG1rX3FwbihxcHQsIG1hcCwgb2Zmc2V0KTsKIAl9CkBAIC00NjgsNiArNDYzLDEwIEBACiAJCXFwLT5zX2ZsYWdzICY9IH4oUUlCX1NfVElNRVIgfCBRSUJfU19XQUlUX1JOUik7CiAJCWRlbF90aW1lcigmcXAtPnNfdGltZXIpOwogCX0KKworCWlmIChxcC0+c19mbGFncyAmIFFJQl9TX0FOWV9XQUlUX1NFTkQpCisJCXFwLT5zX2ZsYWdzICY9IH5RSUJfU19BTllfV0FJVF9TRU5EOworCiAJc3Bpbl9sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CiAJaWYgKCFsaXN0X2VtcHR5KCZxcC0+aW93YWl0KSAmJiAhKHFwLT5zX2ZsYWdzICYgUUlCX1NfQlVTWSkpIHsKIAkJcXAtPnNfZmxhZ3MgJj0gflFJQl9TX0FOWV9XQUlUX0lPOwpAQCAtMTA2MSw3ICsxMDYwLDYgQEAKIAkJfQogCQlxcC0+aWJxcC5xcF9udW0gPSBlcnI7CiAJCXFwLT5wb3J0X251bSA9IGluaXRfYXR0ci0+cG9ydF9udW07Ci0JCXFwLT5wcm9jZXNzb3JfaWQgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJCXFpYl9yZXNldF9xcChxcCwgaW5pdF9hdHRyLT5xcF90eXBlKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3JjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9yYy5jCmluZGV4IDk1NWZiNzEuLjgyNDUyMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3JjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcmMuYwpAQCAtMTQwNyw2ICsxNDA3LDcgQEAKIAkJCSAgICBzdHJ1Y3QgcWliX2N0eHRkYXRhICpyY2QpCiB7CiAJc3RydWN0IHFpYl9zd3FlICp3cWU7CisJc3RydWN0IHFpYl9wcG9ydGRhdGEgKnBwZCA9IHBwZF9mcm9tX2licChpYnApOwogCWVudW0gaWJfd2Nfc3RhdHVzIHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBkaWZmOwpAQCAtMTQxNCw2ICsxNDE1LDI5IEBACiAJdTMyIGFldGg7CiAJdTY0IHZhbDsKIAorCWlmIChvcGNvZGUgIT0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX01JRERMRSkpIHsKKwkJLyoKKwkJICogSWYgQUNLJ2QgUFNOIG9uIFNETUEgYnVzeSBsaXN0IHRyeSB0byBtYWtlIHByb2dyZXNzIHRvCisJCSAqIHJlY2xhaW0gU0RNQSBjcmVkaXRzLgorCQkgKi8KKwkJaWYgKChxaWJfY21wMjQocHNuLCBxcC0+c19zZW5kaW5nX3BzbikgPj0gMCkgJiYKKwkJICAgIChxaWJfY21wMjQocXAtPnNfc2VuZGluZ19wc24sIHFwLT5zX3NlbmRpbmdfaHBzbikgPD0gMCkpIHsKKworCQkJLyoKKwkJCSAqIElmIHNlbmQgdGFza2xldCBub3QgcnVubmluZyBhdHRlbXB0IHRvIHByb2dyZXNzCisJCQkgKiBTRE1BIHF1ZXVlLgorCQkJICovCisJCQlpZiAoIShxcC0+c19mbGFncyAmIFFJQl9TX0JVU1kpKSB7CisJCQkJLyogQWNxdWlyZSBTRE1BIExvY2sgKi8KKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHBkLT5zZG1hX2xvY2ssIGZsYWdzKTsKKwkJCQkvKiBJbnZva2Ugc2RtYSBtYWtlIHByb2dyZXNzICovCisJCQkJcWliX3NkbWFfbWFrZV9wcm9ncmVzcyhwcGQpOworCQkJCS8qIFJlbGVhc2UgU0RNQSBMb2NrICovCisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHBkLT5zZG1hX2xvY2ssIGZsYWdzKTsKKwkJCX0KKwkJfQorCX0KKwogCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7CiAKIAkvKiBJZ25vcmUgaW52YWxpZCByZXNwb25zZXMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl91ZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdWQuYwppbmRleCBlMWIzZGEyLi40YTUxZmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl91ZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VkLmMKQEAgLTQ0NSwxMyArNDQ1LDE0IEBACiAJcWtleSA9IGJlMzJfdG9fY3B1KG9oZHItPnUudWQuZGV0aFswXSk7CiAJc3JjX3FwID0gYmUzMl90b19jcHUob2hkci0+dS51ZC5kZXRoWzFdKSAmIFFJQl9RUE5fTUFTSzsKIAotCS8qIEdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBtZXNzYWdlIHdhcyBwYWRkZWQgYnkuICovCisJLyoKKwkgKiBHZXQgdGhlIG51bWJlciBvZiBieXRlcyB0aGUgbWVzc2FnZSB3YXMgcGFkZGVkIGJ5CisJICogYW5kIGRyb3AgaW5jb21wbGV0ZSBwYWNrZXRzLgorCSAqLwogCXBhZCA9IChiZTMyX3RvX2NwdShvaGRyLT5idGhbMF0pID4+IDIwKSAmIDM7Ci0JaWYgKHVubGlrZWx5KHRsZW4gPCAoaGRyc2l6ZSArIHBhZCArIDQpKSkgewotCQkvKiBEcm9wIGluY29tcGxldGUgcGFja2V0cy4gKi8KLQkJaWJwLT5uX3BrdF9kcm9wcysrOwotCQlnb3RvIGJhaWw7Ci0JfQorCWlmICh1bmxpa2VseSh0bGVuIDwgKGhkcnNpemUgKyBwYWQgKyA0KSkpCisJCWdvdG8gZHJvcDsKKwogCXRsZW4gLT0gaGRyc2l6ZSArIHBhZCArIDQ7CiAKIAkvKgpAQCAtNDYwLDEwICs0NjEsOCBAQAogCSAqLwogCWlmIChxcC0+aWJxcC5xcF9udW0pIHsKIAkJaWYgKHVubGlrZWx5KGhkci0+bHJoWzFdID09IElCX0xJRF9QRVJNSVNTSVZFIHx8Ci0JCQkgICAgIGhkci0+bHJoWzNdID09IElCX0xJRF9QRVJNSVNTSVZFKSkgewotCQkJaWJwLT5uX3BrdF9kcm9wcysrOwotCQkJZ290byBiYWlsOwotCQl9CisJCQkgICAgIGhkci0+bHJoWzNdID09IElCX0xJRF9QRVJNSVNTSVZFKSkKKwkJCWdvdG8gZHJvcDsKIAkJaWYgKHFwLT5pYnFwLnFwX251bSA+IDEpIHsKIAkJCXUxNiBwa2V5MSwgcGtleTI7CiAKQEAgLTQ3Niw3ICs0NzUsNyBAQAogCQkJCQkJMHhGLAogCQkJCQkgICAgICBzcmNfcXAsIHFwLT5pYnFwLnFwX251bSwKIAkJCQkJICAgICAgaGRyLT5scmhbM10sIGhkci0+bHJoWzFdKTsKLQkJCQlnb3RvIGJhaWw7CisJCQkJcmV0dXJuOwogCQkJfQogCQl9CiAJCWlmICh1bmxpa2VseShxa2V5ICE9IHFwLT5xa2V5KSkgewpAQCAtNDg0LDMwICs0ODMsMjQgQEAKIAkJCQkgICAgICAoYmUxNl90b19jcHUoaGRyLT5scmhbMF0pID4+IDQpICYgMHhGLAogCQkJCSAgICAgIHNyY19xcCwgcXAtPmlicXAucXBfbnVtLAogCQkJCSAgICAgIGhkci0+bHJoWzNdLCBoZHItPmxyaFsxXSk7Ci0JCQlnb3RvIGJhaWw7CisJCQlyZXR1cm47CiAJCX0KIAkJLyogRHJvcCBpbnZhbGlkIE1BRCBwYWNrZXRzIChzZWUgMTMuNS4zLjEpLiAqLwogCQlpZiAodW5saWtlbHkocXAtPmlicXAucXBfbnVtID09IDEgJiYKIAkJCSAgICAgKHRsZW4gIT0gMjU2IHx8Ci0JCQkgICAgICAoYmUxNl90b19jcHUoaGRyLT5scmhbMF0pID4+IDEyKSA9PSAxNSkpKSB7Ci0JCQlpYnAtPm5fcGt0X2Ryb3BzKys7Ci0JCQlnb3RvIGJhaWw7Ci0JCX0KKwkJCSAgICAgIChiZTE2X3RvX2NwdShoZHItPmxyaFswXSkgPj4gMTIpID09IDE1KSkpCisJCQlnb3RvIGRyb3A7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGliX3NtcCAqc21wOwogCiAJCS8qIERyb3AgaW52YWxpZCBNQUQgcGFja2V0cyAoc2VlIDEzLjUuMy4xKS4gKi8KLQkJaWYgKHRsZW4gIT0gMjU2IHx8IChiZTE2X3RvX2NwdShoZHItPmxyaFswXSkgPj4gMTIpICE9IDE1KSB7Ci0JCQlpYnAtPm5fcGt0X2Ryb3BzKys7Ci0JCQlnb3RvIGJhaWw7Ci0JCX0KKwkJaWYgKHRsZW4gIT0gMjU2IHx8IChiZTE2X3RvX2NwdShoZHItPmxyaFswXSkgPj4gMTIpICE9IDE1KQorCQkJZ290byBkcm9wOwogCQlzbXAgPSAoc3RydWN0IGliX3NtcCAqKSBkYXRhOwogCQlpZiAoKGhkci0+bHJoWzFdID09IElCX0xJRF9QRVJNSVNTSVZFIHx8CiAJCSAgICAgaGRyLT5scmhbM10gPT0gSUJfTElEX1BFUk1JU1NJVkUpICYmCi0JCSAgICBzbXAtPm1nbXRfY2xhc3MgIT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKSB7Ci0JCQlpYnAtPm5fcGt0X2Ryb3BzKys7Ci0JCQlnb3RvIGJhaWw7Ci0JCX0KKwkJICAgIHNtcC0+bWdtdF9jbGFzcyAhPSBJQl9NR01UX0NMQVNTX1NVQk5fRElSRUNURURfUk9VVEUpCisJCQlnb3RvIGRyb3A7CiAJfQogCiAJLyoKQEAgLTUxOSwxNCArNTEyLDEyIEBACiAJICAgIG9wY29kZSA9PSBJQl9PUENPREVfVURfU0VORF9PTkxZX1dJVEhfSU1NRURJQVRFKSB7CiAJCXdjLmV4LmltbV9kYXRhID0gb2hkci0+dS51ZC5pbW1fZGF0YTsKIAkJd2Mud2NfZmxhZ3MgPSBJQl9XQ19XSVRIX0lNTTsKLQkJaGRyc2l6ZSArPSBzaXplb2YodTMyKTsKKwkJdGxlbiAtPSBzaXplb2YodTMyKTsKIAl9IGVsc2UgaWYgKG9wY29kZSA9PSBJQl9PUENPREVfVURfU0VORF9PTkxZKSB7CiAJCXdjLmV4LmltbV9kYXRhID0gMDsKIAkJd2Mud2NfZmxhZ3MgPSAwOwotCX0gZWxzZSB7Ci0JCWlicC0+bl9wa3RfZHJvcHMrKzsKLQkJZ290byBiYWlsOwotCX0KKwl9IGVsc2UKKwkJZ290byBkcm9wOwogCiAJLyoKIAkgKiBBIEdSSCBpcyBleHBlY3RlZCB0byBwcmVjZWVkIHRoZSBkYXRhIGV2ZW4gaWYgbm90CkBAIC01NTYsOCArNTQ3LDcgQEAKIAkvKiBTaWxlbnRseSBkcm9wIHBhY2tldHMgd2hpY2ggYXJlIHRvbyBiaWcuICovCiAJaWYgKHVubGlrZWx5KHdjLmJ5dGVfbGVuID4gcXAtPnJfbGVuKSkgewogCQlxcC0+cl9mbGFncyB8PSBRSUJfUl9SRVVTRV9TR0U7Ci0JCWlicC0+bl9wa3RfZHJvcHMrKzsKLQkJcmV0dXJuOworCQlnb3RvIGRyb3A7CiAJfQogCWlmIChoYXNfZ3JoKSB7CiAJCXFpYl9jb3B5X3NnZSgmcXAtPnJfc2dlLCAmaGRyLT51LmwuZ3JoLApAQCAtNTk0LDUgKzU4NCw4IEBACiAJcWliX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgJndjLAogCQkgICAgIChvaGRyLT5idGhbMF0gJgogCQkJY3B1X3RvX2JlMzIoSUJfQlRIX1NPTElDSVRFRCkpICE9IDApOwotYmFpbDo7CisJcmV0dXJuOworCitkcm9wOgorCWlicC0+bl9wa3RfZHJvcHMrKzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VzZXJfc2RtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdXNlcl9zZG1hLmMKaW5kZXggNGMxOWUwNi4uNjYyMDhiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdXNlcl9zZG1hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdXNlcl9zZG1hLmMKQEAgLTM4Miw2ICszODIsNyBAQAogCiAJCWttZW1fY2FjaGVfZnJlZShwcS0+cGt0X3NsYWIsIHBrdCk7CiAJfQorCUlOSVRfTElTVF9IRUFEKGxpc3QpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3ZlcmJzLmgKaW5kZXggYmQ1N2MxMi4uNjNiMjJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdmVyYnMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl92ZXJicy5oCkBAIC0zMDEsNiArMzAxLDcgQEAKIAlpbnQgYWNjZXNzX2ZsYWdzOwogCXUzMiBtYXhfc2VnczsgICAgICAgICAgIC8qIG51bWJlciBvZiBxaWJfc2VncyBpbiBhbGwgdGhlIGFycmF5cyAqLwogCXUzMiBtYXBzejsgICAgICAgICAgICAgIC8qIHNpemUgb2YgdGhlIG1hcCBhcnJheSAqLworCXU4ICBwYWdlX3NoaWZ0OyAgICAgICAgIC8qIDAgLSBub24gdW5mb3JtL25vbiBwb3dlcm9mMiBzaXplcyAqLwogCWF0b21pY190IHJlZmNvdW50OwogCXN0cnVjdCBxaWJfc2VnYXJyYXkgKm1hcFswXTsgICAgLyogdGhlIHNlZ21lbnRzICovCiB9OwpAQCAtNDM1LDcgKzQzNiw2IEBACiAJc3BpbmxvY2tfdCByX2xvY2s7ICAgICAgLyogdXNlZCBmb3IgQVBNICovCiAJc3BpbmxvY2tfdCBzX2xvY2s7CiAJYXRvbWljX3Qgc19kbWFfYnVzeTsKLQl1bnNpZ25lZCBwcm9jZXNzb3JfaWQ7CS8qIFByb2Nlc3NvciBJRCBRUCBpcyBib3VuZCB0byAqLwogCXUzMiBzX2ZsYWdzOwogCXUzMiBzX2N1cl9zaXplOyAgICAgICAgIC8qIHNpemUgb2Ygc2VuZCBwYWNrZXQgaW4gYnl0ZXMgKi8KIAl1MzIgc19sZW47ICAgICAgICAgICAgICAvKiB0b3RhbCBsZW5ndGggb2Ygc19zZ2UgKi8KQEAgLTgxMywxMyArODEzLDggQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHFpYl9zY2hlZHVsZV9zZW5kKHN0cnVjdCBxaWJfcXAgKnFwKQogewotCWlmIChxaWJfc2VuZF9vayhxcCkpIHsKLQkJaWYgKHFwLT5wcm9jZXNzb3JfaWQgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQkJcXVldWVfd29yayhxaWJfd3EsICZxcC0+c193b3JrKTsKLQkJZWxzZQotCQkJcXVldWVfd29ya19vbihxcC0+cHJvY2Vzc29yX2lkLAotCQkJCSAgICAgIHFpYl93cSwgJnFwLT5zX3dvcmspOwotCX0KKwlpZiAocWliX3NlbmRfb2socXApKQorCQlxdWV1ZV93b3JrKHFpYl93cSwgJnFwLT5zX3dvcmspOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBxaWJfcGtleV9vayh1MTYgcGtleTEsIHUxNiBwa2V5MikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZwppbmRleCA5ZDlhOWRjLi41NTg1NWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWcKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogY29uZmlnIElORklOSUJBTkRfSVBPSUIKIAl0cmlzdGF0ZSAiSVAtb3Zlci1JbmZpbmlCYW5kIgogCWRlcGVuZHMgb24gTkVUREVWSUNFUyAmJiBJTkVUICYmIChJUFY2IHx8IElQVjY9bikKLQlzZWxlY3QgSU5FVF9MUk8KIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciB0aGUgSVAtb3Zlci1JbmZpbmlCYW5kIHByb3RvY29sIChJUG9JQikuIFRoaXMKIAkgIHRyYW5zcG9ydHMgSVAgcGFja2V0cyBvdmVyIEluZmluaUJhbmQgc28geW91IGNhbiB1c2UgeW91ciBJQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCmluZGV4IDc1M2E5ODMuLmFiOTdmOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl9wYWNrLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl9zYS5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXRfbHJvLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogLyogY29uc3RhbnRzICovCiAKQEAgLTEwMCw5ICsxMDAsNiBAQAogCUlQT0lCX01DQVNUX0ZMQUdfQlVTWQkgID0gMiwJLyogam9pbmluZyBvciBhbHJlYWR5IGpvaW5lZCAqLwogCUlQT0lCX01DQVNUX0ZMQUdfQVRUQUNIRUQgPSAzLAogCi0JSVBPSUJfTUFYX0xST19ERVNDUklQVE9SUyA9IDgsCi0JSVBPSUJfTFJPX01BWF9BR0dSIAkgID0gNjQsCi0KIAlNQVhfU0VORF9DUUUJCSAgPSAxNiwKIAlJUE9JQl9DTV9DT1BZQlJFQUsJICA9IDI1NiwKIH07CkBAIC0yNjIsMTEgKzI1OSw2IEBACiAJdTE2ICAgICBtYXhfY29hbGVzY2VkX2ZyYW1lczsKIH07CiAKLXN0cnVjdCBpcG9pYl9scm8gewotCXN0cnVjdCBuZXRfbHJvX21nciBscm9fbWdyOwotCXN0cnVjdCBuZXRfbHJvX2Rlc2MgbHJvX2Rlc2NbSVBPSUJfTUFYX0xST19ERVNDUklQVE9SU107Ci19OwotCiAvKgogICogRGV2aWNlIHByaXZhdGUgbG9ja2luZzogbmV0d29yayBzdGFjayB0eF9sb2NrIHByb3RlY3RzIG1lbWJlcnMgdXNlZAogICogaW4gVFggZmFzdCBwYXRoLCBsb2NrIHByb3RlY3RzIGV2ZXJ5dGhpbmcgZWxzZS4gIGxvY2sgbmVzdHMgaW5zaWRlCkBAIC0zNTIsOCArMzQ0LDYgQEAKIAlpbnQJaGNhX2NhcHM7CiAJc3RydWN0IGlwb2liX2V0aHRvb2xfc3QgZXRodG9vbDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBwb2xsX3RpbWVyOwotCi0Jc3RydWN0IGlwb2liX2xybyBscm87CiB9OwogCiBzdHJ1Y3QgaXBvaWJfYWggewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jCmluZGV4IGJiMTAwNDEuLmMxYzQ5ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2NtLmMKQEAgLTE0ODAsNiArMTQ4MCw3IEBACiAKIAkJaWYgKHRlc3RfYml0KElQT0lCX0ZMQUdfQ1NVTSwgJnByaXYtPmZsYWdzKSkgewogCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHOworCQkJcHJpdi0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKIAkJCWlmIChwcml2LT5oY2FfY2FwcyAmIElCX0RFVklDRV9VRF9UU08pCiAJCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9ldGh0b29sLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2V0aHRvb2wuYwppbmRleCAxYTE2NTdjLi4xOWY3ZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2V0aHRvb2wuYwpAQCAtMTA2LDYzICsxMDYsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgaXBvaWJfc3RhdHNfa2V5c1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7Ci0JIkxSTyBhZ2dyZWdhdGVkIiwgIkxSTyBmbHVzaGVkIiwKLQkiTFJPIGF2ZyBhZ2dyIiwgIkxSTyBubyBkZXNjIgotfTsKLQotc3RhdGljIHZvaWQgaXBvaWJfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpCi17Ci0Jc3dpdGNoIChzdHJpbmdzZXQpIHsKLQljYXNlIEVUSF9TU19TVEFUUzoKLQkJbWVtY3B5KGRhdGEsICppcG9pYl9zdGF0c19rZXlzLAlzaXplb2YoaXBvaWJfc3RhdHNfa2V5cykpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgaXBvaWJfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCi17Ci0Jc3dpdGNoIChzc2V0KSB7Ci0JY2FzZSBFVEhfU1NfU1RBVFM6Ci0JCXJldHVybiBBUlJBWV9TSVpFKGlwb2liX3N0YXRzX2tleXMpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGlwb2liX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1aW50NjRfdCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpbmRleCA9IDA7Ci0KLQkvKiBHZXQgTFJPIHN0YXRpc3RpY3MgKi8KLQlkYXRhW2luZGV4KytdID0gcHJpdi0+bHJvLmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKLQlkYXRhW2luZGV4KytdID0gcHJpdi0+bHJvLmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKLQlpZiAocHJpdi0+bHJvLmxyb19tZ3Iuc3RhdHMuZmx1c2hlZCkKLQkJZGF0YVtpbmRleCsrXSA9IHByaXYtPmxyby5scm9fbWdyLnN0YXRzLmFnZ3JlZ2F0ZWQgLwotCQkJCXByaXYtPmxyby5scm9fbWdyLnN0YXRzLmZsdXNoZWQ7Ci0JZWxzZQotCQlkYXRhW2luZGV4KytdID0gMDsKLQlkYXRhW2luZGV4KytdID0gcHJpdi0+bHJvLmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKLX0KLQotc3RhdGljIGludCBpcG9pYl9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZsYWdzKQotewotCXJldHVybiBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGZsYWdzLCBFVEhfRkxBR19MUk8pOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlwb2liX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBpcG9pYl9nZXRfZHJ2aW5mbywKIAkuZ2V0X3J4X2NzdW0JCT0gaXBvaWJfZ2V0X3J4X2NzdW0sCiAJLnNldF90c28JCT0gaXBvaWJfc2V0X3RzbywKIAkuZ2V0X2NvYWxlc2NlCQk9IGlwb2liX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlCQk9IGlwb2liX3NldF9jb2FsZXNjZSwKLQkuZ2V0X2ZsYWdzCQk9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAotCS5zZXRfZmxhZ3MJCT0gaXBvaWJfc2V0X2ZsYWdzLAotCS5nZXRfc3RyaW5ncwkJPSBpcG9pYl9nZXRfc3RyaW5ncywKLQkuZ2V0X3NzZXRfY291bnQJCT0gaXBvaWJfZ2V0X3NzZXRfY291bnQsCi0JLmdldF9ldGh0b29sX3N0YXRzCT0gaXBvaWJfZ2V0X2V0aHRvb2xfc3RhdHMsCiB9OwogCiB2b2lkIGlwb2liX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCmluZGV4IGRmYTcxOTAuLjgwNmQwMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKQEAgLTI5NSwxMCArMjk1LDcgQEAKIAlpZiAodGVzdF9iaXQoSVBPSUJfRkxBR19DU1VNLCAmcHJpdi0+ZmxhZ3MpICYmIGxpa2VseSh3Yy0+Y3N1bV9vaykpCiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKLQlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQotCQlscm9fcmVjZWl2ZV9za2IoJnByaXYtPmxyby5scm9fbWdyLCBza2IsIE5VTEwpOwotCWVsc2UKLQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwluYXBpX2dyb19yZWNlaXZlKCZwcml2LT5uYXBpLCBza2IpOwogCiByZXBvc3Q6CiAJaWYgKHVubGlrZWx5KGlwb2liX2liX3Bvc3RfcmVjZWl2ZShkZXYsIHdyX2lkKSkpCkBAIC00NTAsOSArNDQ3LDYgQEAKIAl9CiAKIAlpZiAoZG9uZSA8IGJ1ZGdldCkgewotCQlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQotCQkJbHJvX2ZsdXNoX2FsbCgmcHJpdi0+bHJvLmxyb19tZ3IpOwotCiAJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWlmICh1bmxpa2VseShpYl9yZXFfbm90aWZ5X2NxKHByaXYtPnJlY3ZfY3EsCiAJCQkJCSAgICAgIElCX0NRX05FWFRfQ09NUCB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCmluZGV4IDlmZjdiYzcuLjdhMDdhNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCkBAIC02MCwxNSArNjAsNiBAQAogbW9kdWxlX3BhcmFtX25hbWVkKHJlY3ZfcXVldWVfc2l6ZSwgaXBvaWJfcmVjdnFfc2l6ZSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmVjdl9xdWV1ZV9zaXplLCAiTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJlY2VpdmUgcXVldWUiKTsKIAotc3RhdGljIGludCBscm87Ci1tb2R1bGVfcGFyYW0obHJvLCBib29sLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobHJvLCAgIkVuYWJsZSBMUk8gKExhcmdlIFJlY2VpdmUgT2ZmbG9hZCkiKTsKLQotc3RhdGljIGludCBscm9fbWF4X2FnZ3IgPSBJUE9JQl9MUk9fTUFYX0FHR1I7Ci1tb2R1bGVfcGFyYW0obHJvX21heF9hZ2dyLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhscm9fbWF4X2FnZ3IsICJMUk86IE1heCBwYWNrZXRzIHRvIGJlIGFnZ3JlZ2F0ZWQgIgotCQkiKGRlZmF1bHQgPSA2NCkiKTsKLQogI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHCiBpbnQgaXBvaWJfZGVidWdfbGV2ZWw7CiAKQEAgLTk3Niw1NCArOTY3LDYgQEAKIAkuY3JlYXRlCT0gaXBvaWJfaGFyZF9oZWFkZXIsCiB9OwogCi1zdGF0aWMgaW50IGdldF9za2JfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKippcGhkciwKLQkJICAgICAgIHZvaWQgKip0Y3BoLCB1NjQgKmhkcl9mbGFncywgdm9pZCAqcHJpdikKLXsKLQl1bnNpZ25lZCBpbnQgaXBfbGVuOwotCXN0cnVjdCBpcGhkciAqaXBoOwotCi0JaWYgKHVubGlrZWx5KHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApKSkKLQkJcmV0dXJuIC0xOwotCi0JLyoKLQkgKiBJbiB0aGUgZnV0dXJlIHdlIG1heSBhZGQgYW4gZWxzZSBjbGF1c2UgdGhhdCB2ZXJpZmllcyB0aGUKLQkgKiBjaGVja3N1bSBhbmQgYWxsb3dzIGRldmljZXMgd2hpY2ggZG8gbm90IGNhbGN1bGF0ZSBjaGVja3N1bQotCSAqIHRvIHVzZSBMUk8uCi0JICovCi0JaWYgKHVubGlrZWx5KHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKSkKLQkJcmV0dXJuIC0xOwotCi0JLyogQ2hlY2sgZm9yIG5vbi1UQ1AgcGFja2V0ICovCi0Jc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7Ci0JaXBoID0gaXBfaGRyKHNrYik7Ci0JaWYgKGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCi0JCXJldHVybiAtMTsKLQotCWlwX2xlbiA9IGlwX2hkcmxlbihza2IpOwotCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGlwX2xlbik7Ci0JKnRjcGggPSB0Y3BfaGRyKHNrYik7Ci0KLQkvKiBjaGVjayBpZiBJUCBoZWFkZXIgYW5kIFRDUCBoZWFkZXIgYXJlIGNvbXBsZXRlICovCi0JaWYgKG50b2hzKGlwaC0+dG90X2xlbikgPCBpcF9sZW4gKyB0Y3BfaGRybGVuKHNrYikpCi0JCXJldHVybiAtMTsKLQotCSpoZHJfZmxhZ3MgPSBMUk9fSVBWNCB8IExST19UQ1A7Ci0JKmlwaGRyID0gaXBoOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGlwb2liX2xyb19zZXR1cChzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYpCi17Ci0JcHJpdi0+bHJvLmxyb19tZ3IubWF4X2FnZ3IJID0gbHJvX21heF9hZ2dyOwotCXByaXYtPmxyby5scm9fbWdyLm1heF9kZXNjCSA9IElQT0lCX01BWF9MUk9fREVTQ1JJUFRPUlM7Ci0JcHJpdi0+bHJvLmxyb19tZ3IubHJvX2FycgkgPSBwcml2LT5scm8ubHJvX2Rlc2M7Ci0JcHJpdi0+bHJvLmxyb19tZ3IuZ2V0X3NrYl9oZWFkZXIgPSBnZXRfc2tiX2hkcjsKLQlwcml2LT5scm8ubHJvX21nci5mZWF0dXJlcwkgPSBMUk9fRl9OQVBJOwotCXByaXYtPmxyby5scm9fbWdyLmRldgkJID0gcHJpdi0+ZGV2OwotCXByaXYtPmxyby5scm9fbWdyLmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBvaWJfbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4JCSA9IGlwb2liX29wZW4sCiAJLm5kb19zdG9wCQkgPSBpcG9pYl9zdG9wLApAQCAtMTA2Nyw4ICsxMDEwLDYgQEAKIAogCXByaXYtPmRldiA9IGRldjsKIAotCWlwb2liX2xyb19zZXR1cChwcml2KTsKLQogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKIAogCW11dGV4X2luaXQoJnByaXYtPnZsYW5fbXV0ZXgpOwpAQCAtMTIxOCw4ICsxMTU5LDcgQEAKIAkJcHJpdi0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNOwogCX0KIAotCWlmIChscm8pCi0JCXByaXYtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisJcHJpdi0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKIAogCWlmIChwcml2LT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9TRyAmJiBwcml2LT5oY2FfY2FwcyAmIElCX0RFVklDRV9VRF9UU08pCiAJCXByaXYtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCmluZGV4IDFlMWUzNDcuLjRiNjIxMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCkBAIC00NDEsMTggKzQ0MSwyOCBAQAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJnRhcmdldC0+ZG9uZSk7CiB9CiAKK3N0YXRpYyBib29sIHNycF9jaGFuZ2Vfc3RhdGUoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAorCQkJICAgIGVudW0gc3JwX3RhcmdldF9zdGF0ZSBvbGQsCisJCQkgICAgZW51bSBzcnBfdGFyZ2V0X3N0YXRlIG5ldykKK3sKKwlib29sIGNoYW5nZWQgPSBmYWxzZTsKKworCXNwaW5fbG9ja19pcnEoJnRhcmdldC0+bG9jayk7CisJaWYgKHRhcmdldC0+c3RhdGUgPT0gb2xkKSB7CisJCXRhcmdldC0+c3RhdGUgPSBuZXc7CisJCWNoYW5nZWQgPSB0cnVlOworCX0KKwlzcGluX3VubG9ja19pcnEoJnRhcmdldC0+bG9jayk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKIHN0YXRpYyB2b2lkIHNycF9yZW1vdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQsIHdvcmspOwogCi0Jc3Bpbl9sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKLQlpZiAodGFyZ2V0LT5zdGF0ZSAhPSBTUlBfVEFSR0VUX0RFQUQpIHsKLQkJc3Bpbl91bmxvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOworCWlmICghc3JwX2NoYW5nZV9zdGF0ZSh0YXJnZXQsIFNSUF9UQVJHRVRfREVBRCwgU1JQX1RBUkdFVF9SRU1PVkVEKSkKIAkJcmV0dXJuOwotCX0KLQl0YXJnZXQtPnN0YXRlID0gU1JQX1RBUkdFVF9SRU1PVkVEOwotCXNwaW5fdW5sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKIAogCXNwaW5fbG9jaygmdGFyZ2V0LT5zcnBfaG9zdC0+dGFyZ2V0X2xvY2spOwogCWxpc3RfZGVsKCZ0YXJnZXQtPmxpc3QpOwpAQCAtNTM5LDMzICs1NDksMzQgQEAKIAkJCXNjc2lfc2dfY291bnQoc2NtbmQpLCBzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwogfQogCi1zdGF0aWMgdm9pZCBzcnBfcmVtb3ZlX3JlcShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxKQorc3RhdGljIHZvaWQgc3JwX3JlbW92ZV9yZXEoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAorCQkJICAgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEsIHMzMiByZXFfbGltX2RlbHRhKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlzcnBfdW5tYXBfZGF0YShyZXEtPnNjbW5kLCB0YXJnZXQsIHJlcSk7Ci0JbGlzdF9tb3ZlX3RhaWwoJnJlcS0+bGlzdCwgJnRhcmdldC0+ZnJlZV9yZXFzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7CisJdGFyZ2V0LT5yZXFfbGltICs9IHJlcV9saW1fZGVsdGE7CisJcmVxLT5zY21uZCA9IE5VTEw7CisJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmdGFyZ2V0LT5mcmVlX3JlcXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBzcnBfcmVzZXRfcmVxKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEpCiB7CiAJcmVxLT5zY21uZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OwogCXJlcS0+c2NtbmQtPnNjc2lfZG9uZShyZXEtPnNjbW5kKTsKLQlzcnBfcmVtb3ZlX3JlcSh0YXJnZXQsIHJlcSk7CisJc3JwX3JlbW92ZV9yZXEodGFyZ2V0LCByZXEsIDApOwogfQogCiBzdGF0aWMgaW50IHNycF9yZWNvbm5lY3RfdGFyZ2V0KHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKIHsKIAlzdHJ1Y3QgaWJfcXBfYXR0ciBxcF9hdHRyOwotCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxLCAqdG1wOwogCXN0cnVjdCBpYl93YyB3YzsKLQlpbnQgcmV0OworCWludCBpLCByZXQ7CiAKLQlzcGluX2xvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOwotCWlmICh0YXJnZXQtPnN0YXRlICE9IFNSUF9UQVJHRVRfTElWRSkgewotCQlzcGluX3VubG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7CisJaWYgKCFzcnBfY2hhbmdlX3N0YXRlKHRhcmdldCwgU1JQX1RBUkdFVF9MSVZFLCBTUlBfVEFSR0VUX0NPTk5FQ1RJTkcpKQogCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0JdGFyZ2V0LT5zdGF0ZSA9IFNSUF9UQVJHRVRfQ09OTkVDVElORzsKLQlzcGluX3VubG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7CiAKIAlzcnBfZGlzY29ubmVjdF90YXJnZXQodGFyZ2V0KTsKIAkvKgpAQCAtNTkwLDI3ICs2MDEsMjMgQEAKIAl3aGlsZSAoaWJfcG9sbF9jcSh0YXJnZXQtPnNlbmRfY3EsIDEsICZ3YykgPiAwKQogCQk7IC8qIG5vdGhpbmcgKi8KIAotCXNwaW5fbG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCAmdGFyZ2V0LT5yZXFfcXVldWUsIGxpc3QpCi0JCXNycF9yZXNldF9yZXEodGFyZ2V0LCByZXEpOwotCXNwaW5fdW5sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgU1JQX0NNRF9TUV9TSVpFOyArK2kpIHsKKwkJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEgPSAmdGFyZ2V0LT5yZXFfcmluZ1tpXTsKKwkJaWYgKHJlcS0+c2NtbmQpCisJCQlzcnBfcmVzZXRfcmVxKHRhcmdldCwgcmVxKTsKKwl9CiAKLQl0YXJnZXQtPnJ4X2hlYWQJID0gMDsKLQl0YXJnZXQtPnR4X2hlYWQJID0gMDsKLQl0YXJnZXQtPnR4X3RhaWwgID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmdGFyZ2V0LT5mcmVlX3R4KTsKKwlmb3IgKGkgPSAwOyBpIDwgU1JQX1NRX1NJWkU7ICsraSkKKwkJbGlzdF9hZGQoJnRhcmdldC0+dHhfcmluZ1tpXS0+bGlzdCwgJnRhcmdldC0+ZnJlZV90eCk7CiAKIAl0YXJnZXQtPnFwX2luX2Vycm9yID0gMDsKIAlyZXQgPSBzcnBfY29ubmVjdF90YXJnZXQodGFyZ2V0KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAotCXNwaW5fbG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7Ci0JaWYgKHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9DT05ORUNUSU5HKSB7Ci0JCXJldCA9IDA7Ci0JCXRhcmdldC0+c3RhdGUgPSBTUlBfVEFSR0VUX0xJVkU7Ci0JfSBlbHNlCisJaWYgKCFzcnBfY2hhbmdlX3N0YXRlKHRhcmdldCwgU1JQX1RBUkdFVF9DT05ORUNUSU5HLCBTUlBfVEFSR0VUX0xJVkUpKQogCQlyZXQgPSAtRUFHQUlOOwotCXNwaW5fdW5sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKIAogCXJldHVybiByZXQ7CiAKQEAgLTYyMCwxNyArNjI3LDIwIEBACiAKIAkvKgogCSAqIFdlIGNvdWxkbid0IHJlY29ubmVjdCwgc28ga2lsbCBvdXIgdGFyZ2V0IHBvcnQgb2ZmLgotCSAqIEhvd2V2ZXIsIHdlIGhhdmUgdG8gZGVmZXIgdGhlIHJlYWwgcmVtb3ZhbCBiZWNhdXNlIHdlIG1pZ2h0Ci0JICogYmUgaW4gdGhlIGNvbnRleHQgb2YgdGhlIFNDU0kgZXJyb3IgaGFuZGxlciBub3csIHdoaWNoCi0JICogd291bGQgZGVhZGxvY2sgaWYgd2UgY2FsbCBzY3NpX3JlbW92ZV9ob3N0KCkuCisJICogSG93ZXZlciwgd2UgaGF2ZSB0byBkZWZlciB0aGUgcmVhbCByZW1vdmFsIGJlY2F1c2Ugd2UKKwkgKiBhcmUgaW4gdGhlIGNvbnRleHQgb2YgdGhlIFNDU0kgZXJyb3IgaGFuZGxlciBub3csIHdoaWNoCisJICogd2lsbCBkZWFkbG9jayBpZiB3ZSBjYWxsIHNjc2lfcmVtb3ZlX2hvc3QoKS4KKwkgKgorCSAqIFNjaGVkdWxlIG91ciB3b3JrIGluc2lkZSB0aGUgbG9jayB0byBhdm9pZCBhIHJhY2Ugd2l0aAorCSAqIHRoZSBmbHVzaF9zY2hlZHVsZWRfd29yaygpIGluIHNycF9yZW1vdmVfb25lKCkuCiAJICovCi0Jc3Bpbl9sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZ0YXJnZXQtPmxvY2spOwogCWlmICh0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfQ09OTkVDVElORykgewogCQl0YXJnZXQtPnN0YXRlID0gU1JQX1RBUkdFVF9ERUFEOwogCQlJTklUX1dPUksoJnRhcmdldC0+d29yaywgc3JwX3JlbW92ZV93b3JrKTsKIAkJc2NoZWR1bGVfd29yaygmdGFyZ2V0LT53b3JrKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmdGFyZ2V0LT5sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03NTgsNyArNzY4LDcgQEAKIAkJc3RydWN0IHNycF9kaXJlY3RfYnVmICpidWYgPSAodm9pZCAqKSBjbWQtPmFkZF9kYXRhOwogCiAJCWJ1Zi0+dmEgID0gY3B1X3RvX2JlNjQoaWJfc2dfZG1hX2FkZHJlc3MoaWJkZXYsIHNjYXQpKTsKLQkJYnVmLT5rZXkgPSBjcHVfdG9fYmUzMihkZXYtPm1yLT5ya2V5KTsKKwkJYnVmLT5rZXkgPSBjcHVfdG9fYmUzMih0YXJnZXQtPnJrZXkpOwogCQlidWYtPmxlbiA9IGNwdV90b19iZTMyKGliX3NnX2RtYV9sZW4oaWJkZXYsIHNjYXQpKTsKIAl9IGVsc2UgaWYgKHNycF9tYXBfZm1yKHRhcmdldCwgc2NhdCwgY291bnQsIHJlcSwKIAkJCSAgICAgICAodm9pZCAqKSBjbWQtPmFkZF9kYXRhKSkgewpAQCAtNzgzLDcgKzc5Myw3IEBACiAJCQlidWYtPmRlc2NfbGlzdFtpXS52YSAgPQogCQkJCWNwdV90b19iZTY0KGliX3NnX2RtYV9hZGRyZXNzKGliZGV2LCBzZykpOwogCQkJYnVmLT5kZXNjX2xpc3RbaV0ua2V5ID0KLQkJCQljcHVfdG9fYmUzMihkZXYtPm1yLT5ya2V5KTsKKwkJCQljcHVfdG9fYmUzMih0YXJnZXQtPnJrZXkpOwogCQkJYnVmLT5kZXNjX2xpc3RbaV0ubGVuID0gY3B1X3RvX2JlMzIoZG1hX2xlbik7CiAJCQlkYXRhbGVuICs9IGRtYV9sZW47CiAJCX0KQEAgLTc5Niw3ICs4MDYsNyBAQAogCQlidWYtPnRhYmxlX2Rlc2MudmEgID0KIAkJCWNwdV90b19iZTY0KHJlcS0+Y21kLT5kbWEgKyBzaXplb2YgKmNtZCArIHNpemVvZiAqYnVmKTsKIAkJYnVmLT50YWJsZV9kZXNjLmtleSA9Ci0JCQljcHVfdG9fYmUzMih0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5tci0+cmtleSk7CisJCQljcHVfdG9fYmUzMih0YXJnZXQtPnJrZXkpOwogCQlidWYtPnRhYmxlX2Rlc2MubGVuID0KIAkJCWNwdV90b19iZTMyKGNvdW50ICogc2l6ZW9mIChzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYpKTsKIApAQCAtODEyLDkgKzgyMiwyMyBAQAogfQogCiAvKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrIGhlbGQgdG8gcHJvdGVjdAotICogcmVxX2xpbSBhbmQgdHhfaGVhZC4gIExvY2sgY2Fubm90IGJlIGRyb3BwZWQgYmV0d2VlbiBjYWxsIGhlcmUgYW5kCi0gKiBjYWxsIHRvIF9fc3JwX3Bvc3Rfc2VuZCgpLgorICogUmV0dXJuIGFuIElVIGFuZCBwb3NzaWJsZSBjcmVkaXQgdG8gdGhlIGZyZWUgcG9vbAorICovCitzdGF0aWMgdm9pZCBzcnBfcHV0X3R4X2l1KHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgc3RydWN0IHNycF9pdSAqaXUsCisJCQkgIGVudW0gc3JwX2l1X3R5cGUgaXVfdHlwZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkKCZpdS0+bGlzdCwgJnRhcmdldC0+ZnJlZV90eCk7CisJaWYgKGl1X3R5cGUgIT0gU1JQX0lVX1JTUCkKKwkJKyt0YXJnZXQtPnJlcV9saW07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRhcmdldC0+bG9jayBoZWxkIHRvIHByb3RlY3QgcmVxX2xpbSBhbmQgZnJlZV90eC4KKyAqIElmIElVIGlzIG5vdCBzZW50LCBpdCBtdXN0IGJlIHJldHVybmVkIHVzaW5nIHNycF9wdXRfdHhfaXUoKS4KICAqCiAgKiBOb3RlOgogICogQW4gdXBwZXIgbGltaXQgZm9yIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIGluZm9ybWF0aW9uIHVuaXRzIGZvciBlYWNoCkBAIC04MzMsODMgKzg1Nyw1OSBAQAogCiAJc3JwX3NlbmRfY29tcGxldGlvbih0YXJnZXQtPnNlbmRfY3EsIHRhcmdldCk7CiAKLQlpZiAodGFyZ2V0LT50eF9oZWFkIC0gdGFyZ2V0LT50eF90YWlsID49IFNSUF9TUV9TSVpFKQorCWlmIChsaXN0X2VtcHR5KCZ0YXJnZXQtPmZyZWVfdHgpKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qIEluaXRpYXRvciByZXNwb25zZXMgdG8gdGFyZ2V0IHJlcXVlc3RzIGRvIG5vdCBjb25zdW1lIGNyZWRpdHMgKi8KLQlpZiAodGFyZ2V0LT5yZXFfbGltIDw9IHJzdiAmJiBpdV90eXBlICE9IFNSUF9JVV9SU1ApIHsKLQkJKyt0YXJnZXQtPnplcm9fcmVxX2xpbTsKLQkJcmV0dXJuIE5VTEw7CisJaWYgKGl1X3R5cGUgIT0gU1JQX0lVX1JTUCkgeworCQlpZiAodGFyZ2V0LT5yZXFfbGltIDw9IHJzdikgeworCQkJKyt0YXJnZXQtPnplcm9fcmVxX2xpbTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJLS10YXJnZXQtPnJlcV9saW07CiAJfQogCi0JaXUgPSB0YXJnZXQtPnR4X3JpbmdbdGFyZ2V0LT50eF9oZWFkICYgU1JQX1NRX01BU0tdOwotCWl1LT50eXBlID0gaXVfdHlwZTsKKwlpdSA9IGxpc3RfZmlyc3RfZW50cnkoJnRhcmdldC0+ZnJlZV90eCwgc3RydWN0IHNycF9pdSwgbGlzdCk7CisJbGlzdF9kZWwoJml1LT5saXN0KTsKIAlyZXR1cm4gaXU7CiB9CiAKLS8qCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2sgaGVsZCB0byBwcm90ZWN0Ci0gKiByZXFfbGltIGFuZCB0eF9oZWFkLgotICovCi1zdGF0aWMgaW50IF9fc3JwX3Bvc3Rfc2VuZChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCi0JCQkgICBzdHJ1Y3Qgc3JwX2l1ICppdSwgaW50IGxlbikKK3N0YXRpYyBpbnQgc3JwX3Bvc3Rfc2VuZChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCisJCQkgc3RydWN0IHNycF9pdSAqaXUsIGludCBsZW4pCiB7CiAJc3RydWN0IGliX3NnZSBsaXN0OwogCXN0cnVjdCBpYl9zZW5kX3dyIHdyLCAqYmFkX3dyOwotCWludCByZXQgPSAwOwogCiAJbGlzdC5hZGRyICAgPSBpdS0+ZG1hOwogCWxpc3QubGVuZ3RoID0gbGVuOwotCWxpc3QubGtleSAgID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+bXItPmxrZXk7CisJbGlzdC5sa2V5ICAgPSB0YXJnZXQtPmxrZXk7CiAKIAl3ci5uZXh0ICAgICAgID0gTlVMTDsKLQl3ci53cl9pZCAgICAgID0gdGFyZ2V0LT50eF9oZWFkICYgU1JQX1NRX01BU0s7CisJd3Iud3JfaWQgICAgICA9ICh1aW50cHRyX3QpIGl1OwogCXdyLnNnX2xpc3QgICAgPSAmbGlzdDsKIAl3ci5udW1fc2dlICAgID0gMTsKIAl3ci5vcGNvZGUgICAgID0gSUJfV1JfU0VORDsKIAl3ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKIAotCXJldCA9IGliX3Bvc3Rfc2VuZCh0YXJnZXQtPnFwLCAmd3IsICZiYWRfd3IpOwotCi0JaWYgKCFyZXQpIHsKLQkJKyt0YXJnZXQtPnR4X2hlYWQ7Ci0JCWlmIChpdS0+dHlwZSAhPSBTUlBfSVVfUlNQKQotCQkJLS10YXJnZXQtPnJlcV9saW07Ci0JfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gaWJfcG9zdF9zZW5kKHRhcmdldC0+cXAsICZ3ciwgJmJhZF93cik7CiB9CiAKLXN0YXRpYyBpbnQgc3JwX3Bvc3RfcmVjdihzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCitzdGF0aWMgaW50IHNycF9wb3N0X3JlY3Yoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCBzdHJ1Y3Qgc3JwX2l1ICppdSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBzcnBfaXUgKml1OwotCXN0cnVjdCBpYl9zZ2UgbGlzdDsKIAlzdHJ1Y3QgaWJfcmVjdl93ciB3ciwgKmJhZF93cjsKLQl1bnNpZ25lZCBpbnQgbmV4dDsKLQlpbnQgcmV0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCi0JbmV4dAkgPSB0YXJnZXQtPnJ4X2hlYWQgJiBTUlBfUlFfTUFTSzsKLQl3ci53cl9pZCA9IG5leHQ7Ci0JaXUJID0gdGFyZ2V0LT5yeF9yaW5nW25leHRdOworCXN0cnVjdCBpYl9zZ2UgbGlzdDsKIAogCWxpc3QuYWRkciAgID0gaXUtPmRtYTsKIAlsaXN0Lmxlbmd0aCA9IGl1LT5zaXplOwotCWxpc3QubGtleSAgID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+bXItPmxrZXk7CisJbGlzdC5sa2V5ICAgPSB0YXJnZXQtPmxrZXk7CiAKIAl3ci5uZXh0ICAgICA9IE5VTEw7CisJd3Iud3JfaWQgICAgPSAodWludHB0cl90KSBpdTsKIAl3ci5zZ19saXN0ICA9ICZsaXN0OwogCXdyLm51bV9zZ2UgID0gMTsKIAotCXJldCA9IGliX3Bvc3RfcmVjdih0YXJnZXQtPnFwLCAmd3IsICZiYWRfd3IpOwotCWlmICghcmV0KQotCQkrK3RhcmdldC0+cnhfaGVhZDsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gaWJfcG9zdF9yZWN2KHRhcmdldC0+cXAsICZ3ciwgJmJhZF93cik7CiB9CiAKIHN0YXRpYyB2b2lkIHNycF9wcm9jZXNzX3JzcChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHN0cnVjdCBzcnBfcnNwICpyc3ApCkBAIC05MTcsMjMgKzkxNywxOCBAQAogCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxOwogCXN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JczMyIGRlbHRhOwotCi0JZGVsdGEgPSAoczMyKSBiZTMyX3RvX2NwdShyc3AtPnJlcV9saW1fZGVsdGEpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCi0JdGFyZ2V0LT5yZXFfbGltICs9IGRlbHRhOwotCi0JcmVxID0gJnRhcmdldC0+cmVxX3JpbmdbcnNwLT50YWcgJiB+U1JQX1RBR19UU0tfTUdNVF07CiAKIAlpZiAodW5saWtlbHkocnNwLT50YWcgJiBTUlBfVEFHX1RTS19NR01UKSkgewotCQlpZiAoYmUzMl90b19jcHUocnNwLT5yZXNwX2RhdGFfbGVuKSA8IDQpCi0JCQlyZXEtPnRza19zdGF0dXMgPSAtMTsKLQkJZWxzZQotCQkJcmVxLT50c2tfc3RhdHVzID0gcnNwLT5kYXRhWzNdOwotCQljb21wbGV0ZSgmcmVxLT5kb25lKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOworCQl0YXJnZXQtPnJlcV9saW0gKz0gYmUzMl90b19jcHUocnNwLT5yZXFfbGltX2RlbHRhKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7CisKKwkJdGFyZ2V0LT50c2tfbWdtdF9zdGF0dXMgPSAtMTsKKwkJaWYgKGJlMzJfdG9fY3B1KHJzcC0+cmVzcF9kYXRhX2xlbikgPj0gNCkKKwkJCXRhcmdldC0+dHNrX21nbXRfc3RhdHVzID0gcnNwLT5kYXRhWzNdOworCQljb21wbGV0ZSgmdGFyZ2V0LT50c2tfbWdtdF9kb25lKTsKIAl9IGVsc2UgeworCQlyZXEgPSAmdGFyZ2V0LT5yZXFfcmluZ1tyc3AtPnRhZ107CiAJCXNjbW5kID0gcmVxLT5zY21uZDsKIAkJaWYgKCFzY21uZCkKIAkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsCkBAIC05NTMsNDkgKzk0OCw0MiBAQAogCQllbHNlIGlmIChyc3AtPmZsYWdzICYgKFNSUF9SU1BfRkxBR19ESU9WRVIgfCBTUlBfUlNQX0ZMQUdfRElVTkRFUikpCiAJCQlzY3NpX3NldF9yZXNpZChzY21uZCwgYmUzMl90b19jcHUocnNwLT5kYXRhX2luX3Jlc19jbnQpKTsKIAotCQlpZiAoIXJlcS0+dHNrX21nbXQpIHsKLQkJCXNjbW5kLT5ob3N0X3NjcmliYmxlID0gKHZvaWQgKikgLTFMOwotCQkJc2NtbmQtPnNjc2lfZG9uZShzY21uZCk7Ci0KLQkJCXNycF9yZW1vdmVfcmVxKHRhcmdldCwgcmVxKTsKLQkJfSBlbHNlCi0JCQlyZXEtPmNtZF9kb25lID0gMTsKKwkJc3JwX3JlbW92ZV9yZXEodGFyZ2V0LCByZXEsIGJlMzJfdG9fY3B1KHJzcC0+cmVxX2xpbV9kZWx0YSkpOworCQlzY21uZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CisJCXNjbW5kLT5zY3NpX2RvbmUoc2NtbmQpOwogCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IHNycF9yZXNwb25zZV9jb21tb24oc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCBzMzIgcmVxX2RlbHRhLAogCQkJICAgICAgIHZvaWQgKnJzcCwgaW50IGxlbikKIHsKLQlzdHJ1Y3QgaWJfZGV2aWNlICpkZXY7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNycF9pdSAqaXU7Ci0JaW50IGVyciA9IDE7CisJaW50IGVycjsKIAotCWRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7CiAJdGFyZ2V0LT5yZXFfbGltICs9IHJlcV9kZWx0YTsKLQogCWl1ID0gX19zcnBfZ2V0X3R4X2l1KHRhcmdldCwgU1JQX0lVX1JTUCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7CisKIAlpZiAoIWl1KSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWAogCQkJICAgICAibm8gSVUgYXZhaWxhYmxlIHRvIHNlbmQgcmVzcG9uc2VcbiIpOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIDE7CiAJfQogCiAJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBpdS0+ZG1hLCBsZW4sIERNQV9UT19ERVZJQ0UpOwogCW1lbWNweShpdS0+YnVmLCByc3AsIGxlbik7CiAJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBpdS0+ZG1hLCBsZW4sIERNQV9UT19ERVZJQ0UpOwogCi0JZXJyID0gX19zcnBfcG9zdF9zZW5kKHRhcmdldCwgaXUsIGxlbik7Ci0JaWYgKGVycikKKwllcnIgPSBzcnBfcG9zdF9zZW5kKHRhcmdldCwgaXUsIGxlbik7CisJaWYgKGVycikgewogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LCBQRlgKIAkJCSAgICAgInVuYWJsZSB0byBwb3N0IHJlc3BvbnNlOiAlZFxuIiwgZXJyKTsKKwkJc3JwX3B1dF90eF9pdSh0YXJnZXQsIGl1LCBTUlBfSVVfUlNQKTsKKwl9CiAKLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMDMyLDE0ICsxMDIwLDExIEBACiAKIHN0YXRpYyB2b2lkIHNycF9oYW5kbGVfcmVjdihzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHN0cnVjdCBpYl93YyAqd2MpCiB7Ci0Jc3RydWN0IGliX2RldmljZSAqZGV2OwotCXN0cnVjdCBzcnBfaXUgKml1OworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldjsKKwlzdHJ1Y3Qgc3JwX2l1ICppdSA9IChzdHJ1Y3Qgc3JwX2l1ICopIHdjLT53cl9pZDsKIAlpbnQgcmVzOwogCXU4IG9wY29kZTsKIAotCWl1ID0gdGFyZ2V0LT5yeF9yaW5nW3djLT53cl9pZF07Ci0KLQlkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXY7CiAJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBpdS0+ZG1hLCB0YXJnZXQtPm1heF90aV9pdV9sZW4sCiAJCQkJICAgRE1BX0ZST01fREVWSUNFKTsKIApAQCAtMTA4MCw3ICsxMDY1LDcgQEAKIAlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGl1LT5kbWEsIHRhcmdldC0+bWF4X3RpX2l1X2xlbiwKIAkJCQkgICAgICBETUFfRlJPTV9ERVZJQ0UpOwogCi0JcmVzID0gc3JwX3Bvc3RfcmVjdih0YXJnZXQpOworCXJlcyA9IHNycF9wb3N0X3JlY3YodGFyZ2V0LCBpdSk7CiAJaWYgKHJlcyAhPSAwKQogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LAogCQkJICAgICBQRlggIlJlY3YgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgcmVzKTsKQEAgLTExMDksNiArMTA5NCw3IEBACiB7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gdGFyZ2V0X3B0cjsKIAlzdHJ1Y3QgaWJfd2Mgd2M7CisJc3RydWN0IHNycF9pdSAqaXU7CiAKIAl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA+IDApIHsKIAkJaWYgKHdjLnN0YXR1cykgewpAQCAtMTExOSwxOCArMTEwNSwxOSBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQkrK3RhcmdldC0+dHhfdGFpbDsKKwkJaXUgPSAoc3RydWN0IHNycF9pdSAqKSB3Yy53cl9pZDsKKwkJbGlzdF9hZGQoJml1LT5saXN0LCAmdGFyZ2V0LT5mcmVlX3R4KTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc3JwX3F1ZXVlY29tbWFuZF9sY2soc3RydWN0IHNjc2lfY21uZCAqc2NtbmQsCi0JCQkgICAgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCitzdGF0aWMgaW50IHNycF9xdWV1ZWNvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kKQogewotCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KHNjbW5kLT5kZXZpY2UtPmhvc3QpOworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KHNob3N0KTsKIAlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcTsKIAlzdHJ1Y3Qgc3JwX2l1ICppdTsKIAlzdHJ1Y3Qgc3JwX2NtZCAqY21kOwogCXN0cnVjdCBpYl9kZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBsZW47CiAKIAlpZiAodGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX0NPTk5FQ1RJTkcpCkBAIC0xMTM5LDExICsxMTI2LDE5IEBACiAJaWYgKHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9ERUFEIHx8CiAJICAgIHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9SRU1PVkVEKSB7CiAJCXNjbW5kLT5yZXN1bHQgPSBESURfQkFEX1RBUkdFVCA8PCAxNjsKLQkJZG9uZShzY21uZCk7CisJCXNjbW5kLT5zY3NpX2RvbmUoc2NtbmQpOwogCQlyZXR1cm4gMDsKIAl9CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7CiAJaXUgPSBfX3NycF9nZXRfdHhfaXUodGFyZ2V0LCBTUlBfSVVfQ01EKTsKKwlpZiAoaXUpIHsKKwkJcmVxID0gbGlzdF9maXJzdF9lbnRyeSgmdGFyZ2V0LT5mcmVlX3JlcXMsIHN0cnVjdCBzcnBfcmVxdWVzdCwKKwkJCQkgICAgICBsaXN0KTsKKwkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOworCiAJaWYgKCFpdSkKIAkJZ290byBlcnI7CiAKQEAgLTExNTEsMTEgKzExNDYsOCBAQAogCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgaXUtPmRtYSwgc3JwX21heF9pdV9sZW4sCiAJCQkJICAgRE1BX1RPX0RFVklDRSk7CiAKLQlyZXEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0YXJnZXQtPmZyZWVfcmVxcywgc3RydWN0IHNycF9yZXF1ZXN0LCBsaXN0KTsKLQotCXNjbW5kLT5zY3NpX2RvbmUgICAgID0gZG9uZTsKIAlzY21uZC0+cmVzdWx0ICAgICAgICA9IDA7Ci0Jc2NtbmQtPmhvc3Rfc2NyaWJibGUgPSAodm9pZCAqKSAobG9uZykgcmVxLT5pbmRleDsKKwlzY21uZC0+aG9zdF9zY3JpYmJsZSA9ICh2b2lkICopIHJlcTsKIAogCWNtZCA9IGl1LT5idWY7CiAJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mICpjbWQpOwpAQCAtMTE2NywzNyArMTE1OSwzOCBAQAogCiAJcmVxLT5zY21uZCAgICA9IHNjbW5kOwogCXJlcS0+Y21kICAgICAgPSBpdTsKLQlyZXEtPmNtZF9kb25lID0gMDsKLQlyZXEtPnRza19tZ210ID0gTlVMTDsKIAogCWxlbiA9IHNycF9tYXBfZGF0YShzY21uZCwgdGFyZ2V0LCByZXEpOwogCWlmIChsZW4gPCAwKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsCiAJCQkgICAgIFBGWCAiRmFpbGVkIHRvIG1hcCBkYXRhXG4iKTsKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX2l1OwogCX0KIAogCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgaXUtPmRtYSwgc3JwX21heF9pdV9sZW4sCiAJCQkJICAgICAgRE1BX1RPX0RFVklDRSk7CiAKLQlpZiAoX19zcnBfcG9zdF9zZW5kKHRhcmdldCwgaXUsIGxlbikpIHsKKwlpZiAoc3JwX3Bvc3Rfc2VuZCh0YXJnZXQsIGl1LCBsZW4pKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWCAiU2VuZCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl91bm1hcDsKIAl9CiAKLQlsaXN0X21vdmVfdGFpbCgmcmVxLT5saXN0LCAmdGFyZ2V0LT5yZXFfcXVldWUpOwotCiAJcmV0dXJuIDA7CiAKIGVycl91bm1hcDoKIAlzcnBfdW5tYXBfZGF0YShzY21uZCwgdGFyZ2V0LCByZXEpOwogCitlcnJfaXU6CisJc3JwX3B1dF90eF9pdSh0YXJnZXQsIGl1LCBTUlBfSVVfQ01EKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmcmVxLT5saXN0LCAmdGFyZ2V0LT5mcmVlX3JlcXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOworCiBlcnI6CiAJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CiB9CiAKLXN0YXRpYyBERUZfU0NTSV9RQ01EKHNycF9xdWV1ZWNvbW1hbmQpCi0KIHN0YXRpYyBpbnQgc3JwX2FsbG9jX2l1X2J1ZnMoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQogewogCWludCBpOwpAQCAtMTIxNiw2ICsxMjA5LDggQEAKIAkJCQkJCSAgR0ZQX0tFUk5FTCwgRE1BX1RPX0RFVklDRSk7CiAJCWlmICghdGFyZ2V0LT50eF9yaW5nW2ldKQogCQkJZ290byBlcnI7CisKKwkJbGlzdF9hZGQoJnRhcmdldC0+dHhfcmluZ1tpXS0+bGlzdCwgJnRhcmdldC0+ZnJlZV90eCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMzc3LDcgKzEzNzIsOCBAQAogCQkJYnJlYWs7CiAKIAkJZm9yIChpID0gMDsgaSA8IFNSUF9SUV9TSVpFOyBpKyspIHsKLQkJCXRhcmdldC0+c3RhdHVzID0gc3JwX3Bvc3RfcmVjdih0YXJnZXQpOworCQkJc3RydWN0IHNycF9pdSAqaXUgPSB0YXJnZXQtPnJ4X3JpbmdbaV07CisJCQl0YXJnZXQtPnN0YXR1cyA9IHNycF9wb3N0X3JlY3YodGFyZ2V0LCBpdSk7CiAJCQlpZiAodGFyZ2V0LT5zdGF0dXMpCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTE0NDIsMjUgKzE0MzgsMjQgQEAKIH0KIAogc3RhdGljIGludCBzcnBfc2VuZF90c2tfbWdtdChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCi0JCQkgICAgIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxLCB1OCBmdW5jKQorCQkJICAgICB1NjQgcmVxX3RhZywgdW5zaWduZWQgaW50IGx1biwgdTggZnVuYykKIHsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXY7CiAJc3RydWN0IHNycF9pdSAqaXU7CiAJc3RydWN0IHNycF90c2tfbWdtdCAqdHNrX21nbXQ7CiAKLQlzcGluX2xvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOwotCiAJaWYgKHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9ERUFEIHx8Ci0JICAgIHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9SRU1PVkVEKSB7Ci0JCXJlcS0+c2NtbmQtPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OwotCQlnb3RvIG91dDsKLQl9CisJICAgIHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9SRU1PVkVEKQorCQlyZXR1cm4gLTE7CiAKLQlpbml0X2NvbXBsZXRpb24oJnJlcS0+ZG9uZSk7CisJaW5pdF9jb21wbGV0aW9uKCZ0YXJnZXQtPnRza19tZ210X2RvbmUpOwogCisJc3Bpbl9sb2NrX2lycSgmdGFyZ2V0LT5sb2NrKTsKIAlpdSA9IF9fc3JwX2dldF90eF9pdSh0YXJnZXQsIFNSUF9JVV9UU0tfTUdNVCk7CisJc3Bpbl91bmxvY2tfaXJxKCZ0YXJnZXQtPmxvY2spOworCiAJaWYgKCFpdSkKLQkJZ290byBvdXQ7CisJCXJldHVybiAtMTsKIAogCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgaXUtPmRtYSwgc2l6ZW9mICp0c2tfbWdtdCwKIAkJCQkgICBETUFfVE9fREVWSUNFKTsKQEAgLTE0NjgsNzAgKzE0NjMsNDYgQEAKIAltZW1zZXQodHNrX21nbXQsIDAsIHNpemVvZiAqdHNrX21nbXQpOwogCiAJdHNrX21nbXQtPm9wY29kZSAJPSBTUlBfVFNLX01HTVQ7Ci0JdHNrX21nbXQtPmx1biAJCT0gY3B1X3RvX2JlNjQoKHU2NCkgcmVxLT5zY21uZC0+ZGV2aWNlLT5sdW4gPDwgNDgpOwotCXRza19tZ210LT50YWcgCQk9IHJlcS0+aW5kZXggfCBTUlBfVEFHX1RTS19NR01UOworCXRza19tZ210LT5sdW4JCT0gY3B1X3RvX2JlNjQoKHU2NCkgbHVuIDw8IDQ4KTsKKwl0c2tfbWdtdC0+dGFnCQk9IHJlcV90YWcgfCBTUlBfVEFHX1RTS19NR01UOwogCXRza19tZ210LT50c2tfbWdtdF9mdW5jID0gZnVuYzsKLQl0c2tfbWdtdC0+dGFza190YWcgCT0gcmVxLT5pbmRleDsKKwl0c2tfbWdtdC0+dGFza190YWcJPSByZXFfdGFnOwogCiAJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBpdS0+ZG1hLCBzaXplb2YgKnRza19tZ210LAogCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpOwotCWlmIChfX3NycF9wb3N0X3NlbmQodGFyZ2V0LCBpdSwgc2l6ZW9mICp0c2tfbWdtdCkpCi0JCWdvdG8gb3V0OworCWlmIChzcnBfcG9zdF9zZW5kKHRhcmdldCwgaXUsIHNpemVvZiAqdHNrX21nbXQpKSB7CisJCXNycF9wdXRfdHhfaXUodGFyZ2V0LCBpdSwgU1JQX0lVX1RTS19NR01UKTsKKwkJcmV0dXJuIC0xOworCX0KIAotCXJlcS0+dHNrX21nbXQgPSBpdTsKLQotCXNwaW5fdW5sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKLQotCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZyZXEtPmRvbmUsCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnRhcmdldC0+dHNrX21nbXRfZG9uZSwKIAkJCQkJIG1zZWNzX3RvX2ppZmZpZXMoU1JQX0FCT1JUX1RJTUVPVVRfTVMpKSkKIAkJcmV0dXJuIC0xOwogCiAJcmV0dXJuIDA7Ci0KLW91dDoKLQlzcGluX3VubG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IHNycF9maW5kX3JlcShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCi0JCQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCwKLQkJCXN0cnVjdCBzcnBfcmVxdWVzdCAqKnJlcSkKLXsKLQlpZiAoc2NtbmQtPmhvc3Rfc2NyaWJibGUgPT0gKHZvaWQgKikgLTFMKQotCQlyZXR1cm4gLTE7Ci0KLQkqcmVxID0gJnRhcmdldC0+cmVxX3JpbmdbKGxvbmcpIHNjbW5kLT5ob3N0X3NjcmliYmxlXTsKLQotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNycF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCkKIHsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChzY21uZC0+ZGV2aWNlLT5ob3N0KTsKLQlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcTsKKwlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSA9IChzdHJ1Y3Qgc3JwX3JlcXVlc3QgKikgc2NtbmQtPmhvc3Rfc2NyaWJibGU7CiAJaW50IHJldCA9IFNVQ0NFU1M7CiAKIAlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LCAiU1JQIGFib3J0IGNhbGxlZFxuIik7CiAKLQlpZiAodGFyZ2V0LT5xcF9pbl9lcnJvcikKKwlpZiAoIXJlcSB8fCB0YXJnZXQtPnFwX2luX2Vycm9yKQogCQlyZXR1cm4gRkFJTEVEOwotCWlmIChzcnBfZmluZF9yZXEodGFyZ2V0LCBzY21uZCwgJnJlcSkpCi0JCXJldHVybiBGQUlMRUQ7Ci0JaWYgKHNycF9zZW5kX3Rza19tZ210KHRhcmdldCwgcmVxLCBTUlBfVFNLX0FCT1JUX1RBU0spKQorCWlmIChzcnBfc2VuZF90c2tfbWdtdCh0YXJnZXQsIHJlcS0+aW5kZXgsIHNjbW5kLT5kZXZpY2UtPmx1biwKKwkJCSAgICAgIFNSUF9UU0tfQUJPUlRfVEFTSykpCiAJCXJldHVybiBGQUlMRUQ7CiAKLQlzcGluX2xvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOwotCi0JaWYgKHJlcS0+Y21kX2RvbmUpIHsKLQkJc3JwX3JlbW92ZV9yZXEodGFyZ2V0LCByZXEpOwotCQlzY21uZC0+c2NzaV9kb25lKHNjbW5kKTsKLQl9IGVsc2UgaWYgKCFyZXEtPnRza19zdGF0dXMpIHsKLQkJc3JwX3JlbW92ZV9yZXEodGFyZ2V0LCByZXEpOwotCQlzY21uZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwotCX0gZWxzZQotCQlyZXQgPSBGQUlMRUQ7Ci0KLQlzcGluX3VubG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7CisJaWYgKHJlcS0+c2NtbmQpIHsKKwkJaWYgKCF0YXJnZXQtPnRza19tZ210X3N0YXR1cykgeworCQkJc3JwX3JlbW92ZV9yZXEodGFyZ2V0LCByZXEsIDApOworCQkJc2NtbmQtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKKwkJfSBlbHNlCisJCQlyZXQgPSBGQUlMRUQ7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE1MzksMjYgKzE1MTAsMjMgQEAKIHN0YXRpYyBpbnQgc3JwX3Jlc2V0X2RldmljZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCkKIHsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChzY21uZC0+ZGV2aWNlLT5ob3N0KTsKLQlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSwgKnRtcDsKKwlpbnQgaTsKIAogCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsICJTUlAgcmVzZXRfZGV2aWNlIGNhbGxlZFxuIik7CiAKIAlpZiAodGFyZ2V0LT5xcF9pbl9lcnJvcikKIAkJcmV0dXJuIEZBSUxFRDsKLQlpZiAoc3JwX2ZpbmRfcmVxKHRhcmdldCwgc2NtbmQsICZyZXEpKQorCWlmIChzcnBfc2VuZF90c2tfbWdtdCh0YXJnZXQsIFNSUF9UQUdfTk9fUkVRLCBzY21uZC0+ZGV2aWNlLT5sdW4sCisJCQkgICAgICBTUlBfVFNLX0xVTl9SRVNFVCkpCiAJCXJldHVybiBGQUlMRUQ7Ci0JaWYgKHNycF9zZW5kX3Rza19tZ210KHRhcmdldCwgcmVxLCBTUlBfVFNLX0xVTl9SRVNFVCkpCi0JCXJldHVybiBGQUlMRUQ7Ci0JaWYgKHJlcS0+dHNrX3N0YXR1cykKKwlpZiAodGFyZ2V0LT50c2tfbWdtdF9zdGF0dXMpCiAJCXJldHVybiBGQUlMRUQ7CiAKLQlzcGluX2xvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCAmdGFyZ2V0LT5yZXFfcXVldWUsIGxpc3QpCi0JCWlmIChyZXEtPnNjbW5kLT5kZXZpY2UgPT0gc2NtbmQtPmRldmljZSkKKwlmb3IgKGkgPSAwOyBpIDwgU1JQX0NNRF9TUV9TSVpFOyArK2kpIHsKKwkJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEgPSAmdGFyZ2V0LT5yZXFfcmluZ1tpXTsKKwkJaWYgKHJlcS0+c2NtbmQgJiYgcmVxLT5zY21uZC0+ZGV2aWNlID09IHNjbW5kLT5kZXZpY2UpCiAJCQlzcnBfcmVzZXRfcmVxKHRhcmdldCwgcmVxKTsKLQotCXNwaW5fdW5sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKKwl9CiAKIAlyZXR1cm4gU1VDQ0VTUzsKIH0KQEAgLTE5ODcsOSArMTk1NSwxMiBAQAogCXRhcmdldC0+aW9fY2xhc3MgICA9IFNSUF9SRVYxNkFfSUJfSU9fQ0xBU1M7CiAJdGFyZ2V0LT5zY3NpX2hvc3QgID0gdGFyZ2V0X2hvc3Q7CiAJdGFyZ2V0LT5zcnBfaG9zdCAgID0gaG9zdDsKKwl0YXJnZXQtPmxrZXkJICAgPSBob3N0LT5zcnBfZGV2LT5tci0+bGtleTsKKwl0YXJnZXQtPnJrZXkJICAgPSBob3N0LT5zcnBfZGV2LT5tci0+cmtleTsKIAorCXNwaW5fbG9ja19pbml0KCZ0YXJnZXQtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZ0YXJnZXQtPmZyZWVfdHgpOwogCUlOSVRfTElTVF9IRUFEKCZ0YXJnZXQtPmZyZWVfcmVxcyk7Ci0JSU5JVF9MSVNUX0hFQUQoJnRhcmdldC0+cmVxX3F1ZXVlKTsKIAlmb3IgKGkgPSAwOyBpIDwgU1JQX0NNRF9TUV9TSVpFOyArK2kpIHsKIAkJdGFyZ2V0LT5yZXFfcmluZ1tpXS5pbmRleCA9IGk7CiAJCWxpc3RfYWRkX3RhaWwoJnRhcmdldC0+cmVxX3JpbmdbaV0ubGlzdCwgJnRhcmdldC0+ZnJlZV9yZXFzKTsKQEAgLTIyMTcsOSArMjE4OCw5IEBACiAJCSAqLwogCQlzcGluX2xvY2soJmhvc3QtPnRhcmdldF9sb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0YXJnZXQsICZob3N0LT50YXJnZXRfbGlzdCwgbGlzdCkgewotCQkJc3Bpbl9sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKKwkJCXNwaW5fbG9ja19pcnEoJnRhcmdldC0+bG9jayk7CiAJCQl0YXJnZXQtPnN0YXRlID0gU1JQX1RBUkdFVF9SRU1PVkVEOwotCQkJc3Bpbl91bmxvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOworCQkJc3Bpbl91bmxvY2tfaXJxKCZ0YXJnZXQtPmxvY2spOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZob3N0LT50YXJnZXRfbG9jayk7CiAKQEAgLTIyNTgsOCArMjIyOSw3IEBACiB7CiAJaW50IHJldDsKIAotCUJVSUxEX0JVR19PTl9OT1RfUE9XRVJfT0ZfMihTUlBfU1FfU0laRSk7Ci0JQlVJTERfQlVHX09OX05PVF9QT1dFUl9PRl8yKFNSUF9SUV9TSVpFKTsKKwlCVUlMRF9CVUdfT04oRklFTERfU0laRU9GKHN0cnVjdCBpYl93Yywgd3JfaWQpIDwgc2l6ZW9mKHZvaWQgKikpOwogCiAJaWYgKHNycF9zZ190YWJsZXNpemUgPiAyNTUpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkNsYW1waW5nIHNycF9zZ190YWJsZXNpemUgdG8gMjU1XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKaW5kZXggZWQwZGNlOS4uOWRjNmZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmgKQEAgLTU5LDE2ICs1OSwxNSBAQAogCiAJU1JQX1JRX1NISUZUICAgIAk9IDYsCiAJU1JQX1JRX1NJWkUJCT0gMSA8PCBTUlBfUlFfU0hJRlQsCi0JU1JQX1JRX01BU0sJCT0gU1JQX1JRX1NJWkUgLSAxLAogCiAJU1JQX1NRX1NJWkUJCT0gU1JQX1JRX1NJWkUsCi0JU1JQX1NRX01BU0sJCT0gU1JQX1NRX1NJWkUgLSAxLAogCVNSUF9SU1BfU1FfU0laRQkJPSAxLAogCVNSUF9SRVFfU1FfU0laRQkJPSBTUlBfU1FfU0laRSAtIFNSUF9SU1BfU1FfU0laRSwKIAlTUlBfVFNLX01HTVRfU1FfU0laRQk9IDEsCiAJU1JQX0NNRF9TUV9TSVpFCQk9IFNSUF9SRVFfU1FfU0laRSAtIFNSUF9UU0tfTUdNVF9TUV9TSVpFLAogCi0JU1JQX1RBR19UU0tfTUdNVAk9IDEgPDwgKFNSUF9SUV9TSElGVCArIDEpLAorCVNSUF9UQUdfTk9fUkVRCQk9IH4wVSwKKwlTUlBfVEFHX1RTS19NR01UCT0gMVUgPDwgMzEsCiAKIAlTUlBfRk1SX1NJWkUJCT0gMjU2LAogCVNSUF9GTVJfUE9PTF9TSVpFCT0gMTAyNCwKQEAgLTExMywxNSArMTEyLDI5IEBACiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXN0cnVjdCBzY3NpX2NtbmQgICAgICAgKnNjbW5kOwogCXN0cnVjdCBzcnBfaXUJICAgICAgICpjbWQ7Ci0Jc3RydWN0IHNycF9pdQkgICAgICAgKnRza19tZ210OwogCXN0cnVjdCBpYl9wb29sX2ZtciAgICAgKmZtcjsKLQlzdHJ1Y3QgY29tcGxldGlvbglkb25lOwogCXNob3J0CQkJaW5kZXg7Ci0JdTgJCQljbWRfZG9uZTsKLQl1OAkJCXRza19zdGF0dXM7CiB9OwogCiBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0IHsKKwkvKiBUaGVzZSBhcmUgUlcgaW4gdGhlIGhvdCBwYXRoLCBhbmQgY29tbW9ubHkgdXNlZCB0b2dldGhlciAqLworCXN0cnVjdCBsaXN0X2hlYWQJZnJlZV90eDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZyZWVfcmVxczsKKwlzcGlubG9ja190CQlsb2NrOworCXMzMgkJCXJlcV9saW07CisKKwkvKiBUaGVzZSBhcmUgcmVhZC1vbmx5IGluIHRoZSBob3QgcGF0aCAqLworCXN0cnVjdCBpYl9jcQkgICAgICAgKnNlbmRfY3EgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKwlzdHJ1Y3QgaWJfY3EJICAgICAgICpyZWN2X2NxOworCXN0cnVjdCBpYl9xcAkgICAgICAgKnFwOworCXUzMgkJCWxrZXk7CisJdTMyCQkJcmtleTsKKwllbnVtIHNycF90YXJnZXRfc3RhdGUJc3RhdGU7CisKKwkvKiBFdmVyeXRoaW5nIGFib3ZlIHRoaXMgcG9pbnQgaXMgdXNlZCBpbiB0aGUgaG90IHBhdGggb2YKKwkgKiBjb21tYW5kIHByb2Nlc3NpbmcuIFRyeSB0byBrZWVwIHRoZW0gcGFja2VkIGludG8gY2FjaGVsaW5lcy4KKwkgKi8KKwogCV9fYmU2NAkJCWlkX2V4dDsKIAlfX2JlNjQJCQlpb2NfZ3VpZDsKIAlfX2JlNjQJCQlzZXJ2aWNlX2lkOwpAQCAtMTM4LDI0ICsxNTEsMTMgQEAKIAlpbnQJCQlwYXRoX3F1ZXJ5X2lkOwogCiAJc3RydWN0IGliX2NtX2lkCSAgICAgICAqY21faWQ7Ci0Jc3RydWN0IGliX2NxCSAgICAgICAqcmVjdl9jcTsKLQlzdHJ1Y3QgaWJfY3EJICAgICAgICpzZW5kX2NxOwotCXN0cnVjdCBpYl9xcAkgICAgICAgKnFwOwogCiAJaW50CQkJbWF4X3RpX2l1X2xlbjsKLQlzMzIJCQlyZXFfbGltOwogCiAJaW50CQkJemVyb19yZXFfbGltOwogCi0JdW5zaWduZWQJCXJ4X2hlYWQ7Ci0Jc3RydWN0IHNycF9pdQkgICAgICAgKnJ4X3JpbmdbU1JQX1JRX1NJWkVdOwotCi0JdW5zaWduZWQJCXR4X2hlYWQ7Ci0JdW5zaWduZWQJCXR4X3RhaWw7CiAJc3RydWN0IHNycF9pdQkgICAgICAgKnR4X3JpbmdbU1JQX1NRX1NJWkVdOwotCi0Jc3RydWN0IGxpc3RfaGVhZAlmcmVlX3JlcXM7Ci0Jc3RydWN0IGxpc3RfaGVhZAlyZXFfcXVldWU7CisJc3RydWN0IHNycF9pdQkgICAgICAgKnJ4X3JpbmdbU1JQX1JRX1NJWkVdOwogCXN0cnVjdCBzcnBfcmVxdWVzdAlyZXFfcmluZ1tTUlBfQ01EX1NRX1NJWkVdOwogCiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CkBAIC0xNjMsMTYgKzE2NSwxOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAlzdHJ1Y3QgY29tcGxldGlvbglkb25lOwogCWludAkJCXN0YXR1czsKLQllbnVtIHNycF90YXJnZXRfc3RhdGUJc3RhdGU7CiAJaW50CQkJcXBfaW5fZXJyb3I7CisKKwlzdHJ1Y3QgY29tcGxldGlvbgl0c2tfbWdtdF9kb25lOworCXU4CQkJdHNrX21nbXRfc3RhdHVzOwogfTsKIAogc3RydWN0IHNycF9pdSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXU2NAkJCWRtYTsKIAl2b2lkCQkgICAgICAgKmJ1ZjsKIAlzaXplX3QJCQlzaXplOwogCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uCWRpcmVjdGlvbjsKLQllbnVtIHNycF9pdV90eXBlCXR5cGU7CiB9OwogCiAjZW5kaWYgLyogSUJfU1JQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svS2NvbmZpZwppbmRleCA1YjU5NjE2Li41NmViNDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9LY29uZmlnCkBAIC0yNTUsNiArMjU1LDE2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhbWlqb3kuCiAKK2NvbmZpZyBKT1lTVElDS19BUzUwMTEKKwl0cmlzdGF0ZSAiQXVzdHJpYSBNaWNyb3N5c3RlbSBBUzUwMTEgam95c3RpY2siCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFTNTAxMSBkaWdpdGFsIGpveXN0aWNrIGNvbm5lY3RlZCB0byB5b3VyCisJICBzeXN0ZW0uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFzNTAxMS4KKwogY29uZmlnIEpPWVNUSUNLX0pPWURVTVAKIAl0cmlzdGF0ZSAiR2FtZXBvcnQgZGF0YSBkdW1wZXIiCiAJc2VsZWN0IEdBTUVQT1JUCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9NYWtlZmlsZQppbmRleCBmM2E4Y2JlLi45MmRjMGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBACiBvYmotJChDT05GSUdfSk9ZU1RJQ0tfQTNEKQkJKz0gYTNkLm8KIG9iai0kKENPTkZJR19KT1lTVElDS19BREkpCQkrPSBhZGkubwogb2JqLSQoQ09ORklHX0pPWVNUSUNLX0FNSUdBKQkJKz0gYW1pam95Lm8KK29iai0kKENPTkZJR19KT1lTVElDS19BUzUwMTEpCQkrPSBhczUwMTEubwogb2JqLSQoQ09ORklHX0pPWVNUSUNLX0FOQUxPRykJCSs9IGFuYWxvZy5vCiBvYmotJChDT05GSUdfSk9ZU1RJQ0tfQ09CUkEpCQkrPSBjb2JyYS5vCiBvYmotJChDT05GSUdfSk9ZU1RJQ0tfREI5KQkJKz0gZGI5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYXM1MDExLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FzNTAxMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NzMyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FzNTAxMS5jCkBAIC0wLDAgKzEsMzY3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCAyMDExIEZhYmllbiBNYXJ0ZWF1IDxmYWJpZW4ubWFydGVhdUBhcm1hZGV1cy5jb20+CisgKiBTcG9uc29yZWQgYnkgQVJNYWRldXMgU3lzdGVtcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogRHJpdmVyIGZvciBBdXN0cmlhIE1pY3Jvc3lzdGVtcyBqb3lzdGlja3MgQVM1MDExCisgKgorICogVE9ETzoKKyAqCS0gUG93ZXIgb24gdGhlIGNoaXAgd2hlbiBvcGVuKCkgYW5kIHBvd2VyIGRvd24gd2hlbiBjbG9zZSgpCisgKgktIE1hbmFnZSBwb3dlciBtb2RlCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvYXM1MDExLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjZGVmaW5lIERSSVZFUl9ERVNDICJEcml2ZXIgZm9yIEF1c3RyaWEgTWljcm9zeXN0ZW1zIEFTNTAxMSBqb3lzdGljayIKKyNkZWZpbmUgTU9EVUxFX0RFVklDRV9BTElBUyAiYXM1MDExIgorCitNT0RVTEVfQVVUSE9SKCJGYWJpZW4gTWFydGVhdSA8ZmFiaWVuLm1hcnRlYXVAYXJtYWRldXMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogcmVnaXN0ZXJzICovCisjZGVmaW5lIEFTNTAxMV9DVFJMMQkJMHg3NgorI2RlZmluZSBBUzUwMTFfQ1RSTDIJCTB4NzUKKyNkZWZpbmUgQVM1MDExX1hQCQkweDQzCisjZGVmaW5lIEFTNTAxMV9YTgkJMHg0NAorI2RlZmluZSBBUzUwMTFfWVAJCTB4NTMKKyNkZWZpbmUgQVM1MDExX1lOCQkweDU0CisjZGVmaW5lIEFTNTAxMV9YX1JFRwkJMHg0MQorI2RlZmluZSBBUzUwMTFfWV9SRUcJCTB4NDIKKyNkZWZpbmUgQVM1MDExX1hfUkVTX0lOVAkweDUxCisjZGVmaW5lIEFTNTAxMV9ZX1JFU19JTlQJMHg1MgorCisvKiBDVFJMMSBiaXRzICovCisjZGVmaW5lIEFTNTAxMV9DVFJMMV9MUF9QVUxTRUQJCTB4ODAKKyNkZWZpbmUgQVM1MDExX0NUUkwxX0xQX0FDVElWRQkJMHg0MAorI2RlZmluZSBBUzUwMTFfQ1RSTDFfTFBfQ09OVElOVUUJMHgyMAorI2RlZmluZSBBUzUwMTFfQ1RSTDFfSU5UX1dVUF9FTgkJMHgxMAorI2RlZmluZSBBUzUwMTFfQ1RSTDFfSU5UX0FDVF9FTgkJMHgwOAorI2RlZmluZSBBUzUwMTFfQ1RSTDFfRVhUX0NMS19FTgkJMHgwNAorI2RlZmluZSBBUzUwMTFfQ1RSTDFfU09GVF9SU1QJCTB4MDIKKyNkZWZpbmUgQVM1MDExX0NUUkwxX0RBVEFfVkFMSUQJCTB4MDEKKworLyogQ1RSTDIgYml0cyAqLworI2RlZmluZSBBUzUwMTFfQ1RSTDJfRVhUX1NBTVBMRV9FTgkweDA4CisjZGVmaW5lIEFTNTAxMV9DVFJMMl9SQ19CSUFTX09OCQkweDA0CisjZGVmaW5lIEFTNTAxMV9DVFJMMl9JTlZfU1BJTk5JTkcJMHgwMgorCisjZGVmaW5lIEFTNTAxMV9NQVhfQVhJUwk4MAorI2RlZmluZSBBUzUwMTFfTUlOX0FYSVMJKC04MCkKKyNkZWZpbmUgQVM1MDExX0ZVWloJOAorI2RlZmluZSBBUzUwMTFfRkxBVAk0MAorCitzdHJ1Y3QgYXM1MDExX2RldmljZSB7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50OworCXVuc2lnbmVkIGludCBidXR0b25fZ3BpbzsKKwl1bnNpZ25lZCBpbnQgYnV0dG9uX2lycTsKKwl1bnNpZ25lZCBpbnQgYXhpc19pcnE7Cit9OworCitzdGF0aWMgaW50IGFzNTAxMV9pMmNfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgICB1aW50OF90IGFyZWdhZGRyLAorCQkJICAgIHVpbnQ4X3QgYXZhbHVlKQoreworCXVpbnQ4X3QgZGF0YVsyXSA9IHsgYXJlZ2FkZHIsIGF2YWx1ZSB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJY2xpZW50LT5hZGRyLCBJMkNfTV9JR05PUkVfTkFLLCAyLCAodWludDhfdCAqKWRhdGEKKwl9OworCWludCBlcnJvcjsKKworCWVycm9yID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgJm1zZywgMSk7CisJcmV0dXJuIGVycm9yIDwgMCA/IGVycm9yIDogMDsKK30KKworc3RhdGljIGludCBhczUwMTFfaTJjX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgIHVpbnQ4X3QgYXJlZ2FkZHIsIHNpZ25lZCBjaGFyICp2YWx1ZSkKK3sKKwl1aW50OF90IGRhdGFbMl0gPSB7IGFyZWdhZGRyIH07CisJc3RydWN0IGkyY19tc2cgbXNnX3NldFsyXSA9IHsKKwkJeyBjbGllbnQtPmFkZHIsIEkyQ19NX1JFVl9ESVJfQUREUiwgMSwgKHVpbnQ4X3QgKilkYXRhIH0sCisJCXsgY2xpZW50LT5hZGRyLCBJMkNfTV9SRCB8IEkyQ19NX05PU1RBUlQsIDEsICh1aW50OF90ICopZGF0YSB9CisJfTsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ19zZXQsIDIpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKKworCSp2YWx1ZSA9IGRhdGFbMF0gJiAweDgwID8gLTEgKiAoMSArIH5kYXRhWzBdKSA6IGRhdGFbMF07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhczUwMTFfYnV0dG9uX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGFzNTAxMV9kZXZpY2UgKmFzNTAxMSA9IGRldl9pZDsKKwlpbnQgdmFsID0gZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAoYXM1MDExLT5idXR0b25fZ3Bpbyk7CisKKwlpbnB1dF9yZXBvcnRfa2V5KGFzNTAxMS0+aW5wdXRfZGV2LCBCVE5fSk9ZU1RJQ0ssICF2YWwpOworCWlucHV0X3N5bmMoYXM1MDExLT5pbnB1dF9kZXYpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYXM1MDExX2F4aXNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYXM1MDExX2RldmljZSAqYXM1MDExID0gZGV2X2lkOworCWludCBlcnJvcjsKKwlzaWduZWQgY2hhciB4LCB5OworCisJZXJyb3IgPSBhczUwMTFfaTJjX3JlYWQoYXM1MDExLT5pMmNfY2xpZW50LCBBUzUwMTFfWF9SRVNfSU5ULCAmeCk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnJvciA9IGFzNTAxMV9pMmNfcmVhZChhczUwMTEtPmkyY19jbGllbnQsIEFTNTAxMV9ZX1JFU19JTlQsICZ5KTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIG91dDsKKworCWlucHV0X3JlcG9ydF9hYnMoYXM1MDExLT5pbnB1dF9kZXYsIEFCU19YLCB4KTsKKwlpbnB1dF9yZXBvcnRfYWJzKGFzNTAxMS0+aW5wdXRfZGV2LCBBQlNfWSwgeSk7CisJaW5wdXRfc3luYyhhczUwMTEtPmlucHV0X2Rldik7CisKK291dDoKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFzNTAxMV9jb25maWd1cmVfY2hpcChzdHJ1Y3QgYXM1MDExX2RldmljZSAqYXM1MDExLAorCQkJCWNvbnN0IHN0cnVjdCBhczUwMTFfcGxhdGZvcm1fZGF0YSAqcGxhdF9kYXQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGFzNTAxMS0+aTJjX2NsaWVudDsKKwlpbnQgZXJyb3I7CisJc2lnbmVkIGNoYXIgdmFsdWU7CisKKwkvKiBjaGlwIHNvZnQgcmVzZXQgKi8KKwllcnJvciA9IGFzNTAxMV9pMmNfd3JpdGUoY2xpZW50LCBBUzUwMTFfQ1RSTDEsCisJCQkJIEFTNTAxMV9DVFJMMV9TT0ZUX1JTVCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlNvZnQgcmVzZXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCW1kZWxheSgxMCk7CisKKwllcnJvciA9IGFzNTAxMV9pMmNfd3JpdGUoY2xpZW50LCBBUzUwMTFfQ1RSTDEsCisJCQkJIEFTNTAxMV9DVFJMMV9MUF9QVUxTRUQgfAorCQkJCSBBUzUwMTFfQ1RSTDFfTFBfQUNUSVZFIHwKKwkJCQkgQVM1MDExX0NUUkwxX0lOVF9BQ1RfRU4pOworCWlmIChlcnJvciA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJQb3dlciBjb25maWcgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWVycm9yID0gYXM1MDExX2kyY193cml0ZShjbGllbnQsIEFTNTAxMV9DVFJMMiwKKwkJCQkgQVM1MDExX0NUUkwyX0lOVl9TUElOTklORyk7CisJaWYgKGVycm9yIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkNhbid0IGludmVydCBzcGlubmluZ1xuIik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKiB3cml0ZSB0aHJlc2hvbGQgKi8KKwllcnJvciA9IGFzNTAxMV9pMmNfd3JpdGUoY2xpZW50LCBBUzUwMTFfWFAsIHBsYXRfZGF0LT54cCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkNhbid0IHdyaXRlIHRocmVzaG9sZFxuIik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwllcnJvciA9IGFzNTAxMV9pMmNfd3JpdGUoY2xpZW50LCBBUzUwMTFfWE4sIHBsYXRfZGF0LT54bik7CisJaWYgKGVycm9yIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkNhbid0IHdyaXRlIHRocmVzaG9sZFxuIik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwllcnJvciA9IGFzNTAxMV9pMmNfd3JpdGUoY2xpZW50LCBBUzUwMTFfWVAsIHBsYXRfZGF0LT55cCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkNhbid0IHdyaXRlIHRocmVzaG9sZFxuIik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwllcnJvciA9IGFzNTAxMV9pMmNfd3JpdGUoY2xpZW50LCBBUzUwMTFfWU4sIHBsYXRfZGF0LT55bik7CisJaWYgKGVycm9yIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkNhbid0IHdyaXRlIHRocmVzaG9sZFxuIik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKiB0byBmcmVlIGlycSBncGlvIGluIGNoaXAgKi8KKwllcnJvciA9IGFzNTAxMV9pMmNfcmVhZChjbGllbnQsIEFTNTAxMV9YX1JFU19JTlQsICZ2YWx1ZSk7CisJaWYgKGVycm9yIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkNhbid0IHJlYWQgaTJjIFggcmVzb2x1dGlvbiB2YWx1ZVxuIik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYXM1MDExX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWNvbnN0IHN0cnVjdCBhczUwMTFfcGxhdGZvcm1fZGF0YSAqcGxhdF9kYXRhOworCXN0cnVjdCBhczUwMTFfZGV2aWNlICphczUwMTE7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWludCBpcnE7CisJaW50IGVycm9yOworCisJcGxhdF9kYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBsYXRfZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXBsYXRfZGF0YS0+YXhpc19pcnEpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJObyBheGlzIElSUT9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKKwkJCQkgICAgIEkyQ19GVU5DX1BST1RPQ09MX01BTkdMSU5HKSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJuZWVkIGkyYyBidXMgdGhhdCBzdXBwb3J0cyBwcm90b2NvbCBtYW5nbGluZ1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWFzNTAxMSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhczUwMTFfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFhczUwMTEgfHwgIWlucHV0X2RldikgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRldmljZSBzdHJ1Y3R1cmVcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCWFzNTAxMS0+aTJjX2NsaWVudCA9IGNsaWVudDsKKwlhczUwMTEtPmlucHV0X2RldiA9IGlucHV0X2RldjsKKwlhczUwMTEtPmJ1dHRvbl9ncGlvID0gcGxhdF9kYXRhLT5idXR0b25fZ3BpbzsKKwlhczUwMTEtPmF4aXNfaXJxID0gcGxhdF9kYXRhLT5heGlzX2lycTsKKworCWlucHV0X2Rldi0+bmFtZSA9ICJBdXN0cmlhIE1pY3Jvc3lzdGVtIGFzNTAxMSBqb3lzdGljayI7CisJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX0kyQzsKKwlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmY2xpZW50LT5kZXY7CisKKwlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dF9kZXYtPmV2Yml0KTsKKwlfX3NldF9iaXQoRVZfQUJTLCBpbnB1dF9kZXYtPmV2Yml0KTsKKwlfX3NldF9iaXQoQlROX0pPWVNUSUNLLCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YLAorCQlBUzUwMTFfTUlOX0FYSVMsIEFTNTAxMV9NQVhfQVhJUywgQVM1MDExX0ZVWlosIEFTNTAxMV9GTEFUKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhhczUwMTEtPmlucHV0X2RldiwgQUJTX1ksCisJCUFTNTAxMV9NSU5fQVhJUywgQVM1MDExX01BWF9BWElTLCBBUzUwMTFfRlVaWiwgQVM1MDExX0ZMQVQpOworCisJZXJyb3IgPSBncGlvX3JlcXVlc3QoYXM1MDExLT5idXR0b25fZ3BpbywgIkFTNTAxMSBidXR0b24iKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgYnV0dG9uIGdwaW9cbiIpOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwlpcnEgPSBncGlvX3RvX2lycShhczUwMTEtPmJ1dHRvbl9ncGlvKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IGlycSBudW1iZXIgZm9yIGJ1dHRvbiBncGlvXG4iKTsKKwkJZ290byBlcnJfZnJlZV9idXR0b25fZ3BpbzsKKwl9CisKKwlhczUwMTEtPmJ1dHRvbl9pcnEgPSBpcnE7CisKKwllcnJvciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGFzNTAxMS0+YnV0dG9uX2lycSwKKwkJCQkgICAgIE5VTEwsIGFzNTAxMV9idXR0b25faW50ZXJydXB0LAorCQkJCSAgICAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCSAgICAgImFzNTAxMV9idXR0b24iLCBhczUwMTEpOworCWlmIChlcnJvciA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkiQ2FuJ3QgYWxsb2NhdGUgYnV0dG9uIGlycSAlZFxuIiwgYXM1MDExLT5idXR0b25faXJxKTsKKwkJZ290byBlcnJfZnJlZV9idXR0b25fZ3BpbzsKKwl9CisKKwllcnJvciA9IGFzNTAxMV9jb25maWd1cmVfY2hpcChhczUwMTEsIHBsYXRfZGF0YSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9mcmVlX2J1dHRvbl9pcnE7CisKKwllcnJvciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGFzNTAxMS0+YXhpc19pcnEsIE5VTEwsCisJCQkJICAgICBhczUwMTFfYXhpc19pbnRlcnJ1cHQsCisJCQkJICAgICBwbGF0X2RhdGEtPmF4aXNfaXJxZmxhZ3MsCisJCQkJICAgICAiYXM1MDExX2pveXN0aWNrIiwgYXM1MDExKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkiQ2FuJ3QgYWxsb2NhdGUgYXhpcyBpcnEgJWRcbiIsIHBsYXRfZGF0YS0+YXhpc19pcnEpOworCQlnb3RvIGVycl9mcmVlX2J1dHRvbl9pcnE7CisJfQorCisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoYXM1MDExLT5pbnB1dF9kZXYpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9mcmVlX2F4aXNfaXJxOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGFzNTAxMSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfYXhpc19pcnE6CisJZnJlZV9pcnEoYXM1MDExLT5heGlzX2lycSwgYXM1MDExKTsKK2Vycl9mcmVlX2J1dHRvbl9pcnE6CisJZnJlZV9pcnEoYXM1MDExLT5idXR0b25faXJxLCBhczUwMTEpOworZXJyX2ZyZWVfYnV0dG9uX2dwaW86CisJZ3Bpb19mcmVlKGFzNTAxMS0+YnV0dG9uX2dwaW8pOworZXJyX2ZyZWVfbWVtOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJa2ZyZWUoYXM1MDExKTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYXM1MDExX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBhczUwMTFfZGV2aWNlICphczUwMTEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWZyZWVfaXJxKGFzNTAxMS0+YXhpc19pcnEsIGFzNTAxMSk7CisJZnJlZV9pcnEoYXM1MDExLT5idXR0b25faXJxLCBhczUwMTEpOworCWdwaW9fZnJlZShhczUwMTEtPmJ1dHRvbl9ncGlvKTsKKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGFzNTAxMS0+aW5wdXRfZGV2KTsKKwlrZnJlZShhczUwMTEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhczUwMTFfaWRbXSA9IHsKKwl7IE1PRFVMRV9ERVZJQ0VfQUxJQVMsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYXM1MDExX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFzNTAxMV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYXM1MDExIiwKKwl9LAorCS5wcm9iZQkJPSBhczUwMTFfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhczUwMTFfcmVtb3ZlKSwKKwkuaWRfdGFibGUJPSBhczUwMTFfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhczUwMTFfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmYXM1MDExX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChhczUwMTFfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhczUwMTFfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZhczUwMTFfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGFzNTAxMV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwppbmRleCBmODI5OTk4Li43YjNjMGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCkBAIC0xMiwxOCArMTIsNiBAQAogCiBpZiBJTlBVVF9LRVlCT0FSRAogCi1jb25maWcgS0VZQk9BUkRfQUFFRDIwMDAKLQl0cmlzdGF0ZSAiQUFFRC0yMDAwIGtleWJvYXJkIgotCWRlcGVuZHMgb24gTUFDSF9BQUVEMjAwMAotCXNlbGVjdCBJTlBVVF9QT0xMREVWCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGtleWJvYXJkIG9uIHRoZSBBZ2lsZW50IEFBRUQtMjAwMAotCSAgZGV2ZWxvcG1lbnQgYm9hcmQuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFhZWQyMDAwX2tiZC4KLQogY29uZmlnIEtFWUJPQVJEX0FEUDU1MjAKIAl0cmlzdGF0ZSAiS2V5cGFkIFN1cHBvcnQgZm9yIEFEUDU1MjAgUE1JQyIKIAlkZXBlbmRzIG9uIFBNSUNfQURQNTUyMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKaW5kZXggODkzM2U5Yy4uNGU1NTcxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCkBAIC00LDcgKzQsNiBAQAogCiAjIEVhY2ggY29uZmlndXJhdGlvbiBvcHRpb24gZW5hYmxlcyBhIGxpc3Qgb2YgZmlsZXMuCiAKLW9iai0kKENPTkZJR19LRVlCT0FSRF9BQUVEMjAwMCkJCSs9IGFhZWQyMDAwX2tiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfQURQNTUyMCkJCSs9IGFkcDU1MjAta2V5cy5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfQURQNTU4OCkJCSs9IGFkcDU1ODgta2V5cy5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfQU1JR0EpCQkrPSBhbWlrYmQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hYWVkMjAwMF9rYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYWFlZDIwMDBfa2JkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MjIyYTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hYWVkMjAwMF9rYmQuYworKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKgotICogIEtleWJvYXJkIGRyaXZlciBmb3IgdGhlIEFBRUQtMjAwMCBkZXYgYm9hcmQKLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA2IE5pY29sYXMgQmVsbGlkbyBZIE9ydGVnYQotICoKLSAqICBCYXNlZCBvbiBjb3JnaWtiZC5jCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0LXBvbGxkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvYWFlZDIwMDAuaD4KLQotI2RlZmluZSBLQl9ST1dTCQkJMTIKLSNkZWZpbmUgS0JfQ09MUwkJCTgKLSNkZWZpbmUgS0JfUk9XTUFTSyhyKQkJKDEgPDwgKHIpKQotI2RlZmluZSBTQ0FOQ09ERShyLGMpCQkoKChjKSAqIEtCX1JPV1MpICsgKHIpKQotI2RlZmluZSBOUl9TQ0FOQ09ERVMJCShLQl9DT0xTICogS0JfUk9XUykKLQotI2RlZmluZSBTQ0FOX0lOVEVSVkFMCQkoNTApIC8qIG1zICovCi0jZGVmaW5lIEtCX0FDVElWQVRFX0RFTEFZCSgyMCkgLyogdXMgKi8KLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgYWFlZGtiZF9rZXljb2RlW05SX1NDQU5DT0RFU10gPSB7Ci0JS0VZXzksIEtFWV8wLCBLRVlfTUlOVVMsIEtFWV9FUVVBTCwgS0VZX0JBQ0tTUEFDRSwgMCwgS0VZX1NQQUNFLCBLRVlfS1A2LCAwLCBLRVlfS1BET1QsIDAsIDAsCi0JS0VZX0ssIEtFWV9NLCBLRVlfTywgS0VZX0RPVCwgS0VZX1NMQVNILCAwLCBLRVlfRiwgMCwgMCwgMCwgS0VZX0xFRlRTSElGVCwgMCwKLQlLRVlfSSwgS0VZX1AsIEtFWV9MRUZUQlJBQ0UsIEtFWV9SSUdIVEJSQUNFLCBLRVlfQkFDS1NMQVNILCAwLCAwLCAwLCAwLCAwLCBLRVlfUklHSFRTSElGVCwgMCwKLQlLRVlfOCwgS0VZX0wsIEtFWV9TRU1JQ09MT04sIEtFWV9BUE9TVFJPUEhFLCBLRVlfRU5URVIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JS0VZX0osIEtFWV9ILCBLRVlfQiwgS0VZX0tQOCwgS0VZX0tQNCwgMCwgS0VZX0MsIEtFWV9ELCBLRVlfUywgS0VZX0EsIDAsIEtFWV9DQVBTTE9DSywKLQlLRVlfWSwgS0VZX1UsIEtFWV9OLCBLRVlfVCwgMCwgMCwgS0VZX1IsIEtFWV9FLCBLRVlfVywgS0VZX1EsIDAsIEtFWV9UQUIsCi0JS0VZXzcsIEtFWV82LCBLRVlfRywgMCwgS0VZXzUsIDAsIEtFWV80LCBLRVlfMywgS0VZXzIsIEtFWV8xLCAwLCBLRVlfR1JBVkUsCi0JMCwgMCwgS0VZX0NPTU1BLCAwLCBLRVlfS1AyLCAwLCBLRVlfViwgS0VZX0xFRlRBTFQsIEtFWV9YLCBLRVlfWiwgMCwgS0VZX0xFRlRDVFJMCi19OwotCi1zdHJ1Y3QgYWFlZGtiZCB7Ci0JdW5zaWduZWQgY2hhciBrZXljb2RlW0FSUkFZX1NJWkUoYWFlZGtiZF9rZXljb2RlKV07Ci0Jc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKnBvbGxfZGV2OwotCWludCBrYmRzY2FuX3N0YXRlW0tCX0NPTFNdOwotCWludCBrYmRzY2FuX2NvdW50W0tCX0NPTFNdOwotfTsKLQotI2RlZmluZSBLQkRTQ0FOX1NUQUJMRV9DT1VOVCAyCi0KLXN0YXRpYyB2b2lkIGFhZWRrYmRfcmVwb3J0X2NvbChzdHJ1Y3QgYWFlZGtiZCAqYWFlZGtiZCwKLQkJCQl1bnNpZ25lZCBpbnQgY29sLCB1bnNpZ25lZCBpbnQgcm93ZCkKLXsKLQl1bnNpZ25lZCBpbnQgc2NhbmNvZGUsIHByZXNzZWQ7Ci0JdW5zaWduZWQgaW50IHJvdzsKLQotCWZvciAocm93ID0gMDsgcm93IDwgS0JfUk9XUzsgcm93KyspIHsKLQkJc2NhbmNvZGUgPSBTQ0FOQ09ERShyb3csIGNvbCk7Ci0JCXByZXNzZWQgPSByb3dkICYgS0JfUk9XTUFTSyhyb3cpOwotCi0JCWlucHV0X3JlcG9ydF9rZXkoYWFlZGtiZC0+cG9sbF9kZXYtPmlucHV0LAotCQkJCSBhYWVka2JkLT5rZXljb2RlW3NjYW5jb2RlXSwgcHJlc3NlZCk7Ci0JfQotfQotCi0vKiBTY2FuIHRoZSBoYXJkd2FyZSBrZXlib2FyZCBhbmQgcHVzaCBhbnkgY2hhbmdlcyB1cCB0aHJvdWdoIHRoZSBpbnB1dCBsYXllciAqLwotc3RhdGljIHZvaWQgYWFlZGtiZF9wb2xsKHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpkZXYpCi17Ci0Jc3RydWN0IGFhZWRrYmQgKmFhZWRrYmQgPSBkZXYtPnByaXZhdGU7Ci0JdW5zaWduZWQgaW50IGNvbCwgcm93ZDsKLQotCWNvbCA9IDA7Ci0JZG8gewotCQlBQUVDX0dQSU9fS1NDQU4gPSBjb2wgKyA4OwotCQl1ZGVsYXkoS0JfQUNUSVZBVEVfREVMQVkpOwotCQlyb3dkID0gQUFFRF9FWFRfR1BJTyAmIEFBRURfRUdQSU9fS0JEX1NDQU47Ci0KLQkJaWYgKHJvd2QgIT0gYWFlZGtiZC0+a2Jkc2Nhbl9zdGF0ZVtjb2xdKSB7Ci0JCQlhYWVka2JkLT5rYmRzY2FuX2NvdW50W2NvbF0gPSAwOwotCQkJYWFlZGtiZC0+a2Jkc2Nhbl9zdGF0ZVtjb2xdID0gcm93ZDsKLQkJfSBlbHNlIGlmICgrK2FhZWRrYmQtPmtiZHNjYW5fY291bnRbY29sXSA+PSBLQkRTQ0FOX1NUQUJMRV9DT1VOVCkgewotCQkJYWFlZGtiZF9yZXBvcnRfY29sKGFhZWRrYmQsIGNvbCwgcm93ZCk7Ci0JCQljb2wrKzsKLQkJfQotCX0gd2hpbGUgKGNvbCA8IEtCX0NPTFMpOwotCi0JQUFFQ19HUElPX0tTQ0FOID0gMHgwNzsKLQlpbnB1dF9zeW5jKGRldi0+aW5wdXQpOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhYWVka2JkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IGFhZWRrYmQgKmFhZWRrYmQ7Ci0Jc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKnBvbGxfZGV2OwotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQlpbnQgaTsKLQlpbnQgZXJyb3I7Ci0KLQlhYWVka2JkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFhZWRrYmQpLCBHRlBfS0VSTkVMKTsKLQlwb2xsX2RldiA9IGlucHV0X2FsbG9jYXRlX3BvbGxlZF9kZXZpY2UoKTsKLQlpZiAoIWFhZWRrYmQgfHwgIXBvbGxfZGV2KSB7Ci0JCWVycm9yID0gLUVOT01FTTsKLQkJZ290byBmYWlsOwotCX0KLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFhZWRrYmQpOwotCi0JYWFlZGtiZC0+cG9sbF9kZXYgPSBwb2xsX2RldjsKLQltZW1jcHkoYWFlZGtiZC0+a2V5Y29kZSwgYWFlZGtiZF9rZXljb2RlLCBzaXplb2YoYWFlZGtiZC0+a2V5Y29kZSkpOwotCi0JcG9sbF9kZXYtPnByaXZhdGUgPSBhYWVka2JkOwotCXBvbGxfZGV2LT5wb2xsID0gYWFlZGtiZF9wb2xsOwotCXBvbGxfZGV2LT5wb2xsX2ludGVydmFsID0gU0NBTl9JTlRFUlZBTDsKLQotCWlucHV0X2RldiA9IHBvbGxfZGV2LT5pbnB1dDsKLQlpbnB1dF9kZXYtPm5hbWUgPSAiQUFFRC0yMDAwIEtleWJvYXJkIjsKLQlpbnB1dF9kZXYtPnBoeXMgPSAiYWFlZGtiZC9pbnB1dDAiOwotCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwotCWlucHV0X2Rldi0+aWQudmVuZG9yID0gMHgwMDAxOwotCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IDB4MDAwMTsKLQlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7Ci0JaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKLQotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVQKTsKLQlpbnB1dF9kZXYtPmtleWNvZGUgPSBhYWVka2JkLT5rZXljb2RlOwotCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YodW5zaWduZWQgY2hhcik7Ci0JaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShhYWVka2JkX2tleWNvZGUpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWFlZGtiZF9rZXljb2RlKTsgaSsrKQotCQlzZXRfYml0KGFhZWRrYmQtPmtleWNvZGVbaV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKLQljbGVhcl9iaXQoMCwgaW5wdXRfZGV2LT5rZXliaXQpOwotCi0JZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKGFhZWRrYmQtPnBvbGxfZGV2KTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbDsKLQotCXJldHVybiAwOwotCi0gZmFpbDoJa2ZyZWUoYWFlZGtiZCk7Ci0JaW5wdXRfZnJlZV9wb2xsZWRfZGV2aWNlKHBvbGxfZGV2KTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IGFhZWRrYmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IGFhZWRrYmQgKmFhZWRrYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCWlucHV0X3VucmVnaXN0ZXJfcG9sbGVkX2RldmljZShhYWVka2JkLT5wb2xsX2Rldik7Ci0JaW5wdXRfZnJlZV9wb2xsZWRfZGV2aWNlKGFhZWRrYmQtPnBvbGxfZGV2KTsKLQlrZnJlZShhYWVka2JkKTsKLQotCXJldHVybiAwOwotfQotCi0vKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KLU1PRFVMRV9BTElBUygicGxhdGZvcm06YWFlZDIwMDAta2V5Ym9hcmQiKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWFlZGtiZF9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IGFhZWRrYmRfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhYWVka2JkX3JlbW92ZSksCi0JLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gImFhZWQyMDAwLWtleWJvYXJkIiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFhZWRrYmRfaW5pdCh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFhZWRrYmRfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFhZWRrYmRfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhYWVka2JkX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGFhZWRrYmRfaW5pdCk7Ci1tb2R1bGVfZXhpdChhYWVka2JkX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJOaWNvbGFzIEJlbGxpZG8gWSBPcnRlZ2EiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQUFFRC0yMDAwIEtleWJvYXJkIERyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnCmluZGV4IGJjYjFmZGUuLjMwN2VlZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcKQEAgLTIyOSw3ICsyMjksNyBAQAogCXRyaXN0YXRlICJUUUMgUFMvMiBtdWx0aXBsZXhlciIKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIHRoZSBQUy8yIGxpbmUgbXVsdGlwbGV4ZXIgbGlrZSB0aGUgb25lCi0JICBwcmVzZW50IG9uIFRRQyBib2Fkcy4KKwkgIHByZXNlbnQgb24gVFFDIGJvYXJkcy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHMybXVsdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmggYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCmluZGV4IDVhZTBmYzQuLmJiOWY1ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaApAQCAtNDI0LDYgKzQyNCwxMyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICIwMTAwIiksCiAJCX0sCiAJfSwKKwl7CisJCS8qIERlbGwgVm9zdHJvIFYxMyAqLworCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJWb3N0cm8gVjEzIiksCisJCX0sCisJfSwKIAl7IH0KIH07CiAKQEAgLTU0NSw2ICs1NTIsMTcgQEAKIH07CiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGNvbnN0IGk4MDQyX2RtaV9ub3RpbWVvdXRfdGFibGVbXSA9IHsKKwl7CisJCS8qIERlbGwgVm9zdHJvIFYxMyAqLworCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJWb3N0cm8gVjEzIiksCisJCX0sCisJfSwKKwl7IH0KK307CisKIC8qCiAgKiBTb21lIFdpc3Ryb24gYmFzZWQgbGFwdG9wcyBuZWVkIHVzIHRvIGV4cGxpY2l0bHkgZW5hYmxlIHRoZSAnRHJpdGVrCiAgKiBrZXlib2FyZCBleHRlbnNpb24nIHRvIG1ha2UgdGhlaXIgZXh0cmEga2V5cyBzdGFydCBnZW5lcmF0aW5nIHNjYW5jb2Rlcy4KQEAgLTg5Niw2ICs5MTQsOSBAQAogCWlmIChkbWlfY2hlY2tfc3lzdGVtKGk4MDQyX2RtaV9ub211eF90YWJsZSkpCiAJCWk4MDQyX25vbXV4ID0gdHJ1ZTsKIAorCWlmIChkbWlfY2hlY2tfc3lzdGVtKGk4MDQyX2RtaV9ub3RpbWVvdXRfdGFibGUpKQorCQlpODA0Ml9ub3RpbWVvdXQgPSB0cnVlOworCiAJaWYgKGRtaV9jaGVja19zeXN0ZW0oaTgwNDJfZG1pX2RyaXRla190YWJsZSkpCiAJCWk4MDQyX2RyaXRlayA9IHRydWU7CiAjZW5kaWYgLyogQ09ORklHX1g4NiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCmluZGV4IGMwNGZmMDAuLmFjNGM5MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKQEAgLTYzLDYgKzYzLDEwIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQobm9sb29wLCBpODA0Ml9ub2xvb3AsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhub2xvb3AsICJEaXNhYmxlIHRoZSBBVVggTG9vcGJhY2sgY29tbWFuZCB3aGlsZSBwcm9iaW5nIGZvciB0aGUgQVVYIHBvcnQiKTsKIAorc3RhdGljIGJvb2wgaTgwNDJfbm90aW1lb3V0OworbW9kdWxlX3BhcmFtX25hbWVkKG5vdGltZW91dCwgaTgwNDJfbm90aW1lb3V0LCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobm90aW1lb3V0LCAiSWdub3JlIHRpbWVvdXRzIHNpZ25hbGxlZCBieSBpODA0MiIpOworCiAjaWZkZWYgQ09ORklHX1g4Ngogc3RhdGljIGJvb2wgaTgwNDJfZHJpdGVrOwogbW9kdWxlX3BhcmFtX25hbWVkKGRyaXRlaywgaTgwNDJfZHJpdGVrLCBib29sLCAwKTsKQEAgLTUwNCw3ICs1MDgsNyBAQAogCX0gZWxzZSB7CiAKIAkJZGZsID0gKChzdHIgJiBJODA0Ml9TVFJfUEFSSVRZKSA/IFNFUklPX1BBUklUWSA6IDApIHwKLQkJICAgICAgKChzdHIgJiBJODA0Ml9TVFJfVElNRU9VVCkgPyBTRVJJT19USU1FT1VUIDogMCk7CisJCSAgICAgICgoc3RyICYgSTgwNDJfU1RSX1RJTUVPVVQgJiYgIWk4MDQyX25vdGltZW91dCkgPyBTRVJJT19USU1FT1VUIDogMCk7CiAKIAkJcG9ydF9ubyA9IChzdHIgJiBJODA0Ml9TVFJfQVVYREFUQSkgPwogCQkJCUk4MDQyX0FVWF9QT1JUX05PIDogSTgwNDJfS0JEX1BPUlRfTk87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKaW5kZXggMDdhYzc3ZC4uMGM5ZjRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwpAQCAtNjEwLDcgKzYxMCw3IEBACiAKIGNvbmZpZyBUT1VDSFNDUkVFTl9VU0JfRVRUX1RDNDVVU0IKIAlkZWZhdWx0IHkKLQlib29sICJFVCZUIFVTQiBzZXJpZXMgVEM0VU0vVEM1VUggdG91Y2hzY3JlZW4gY29udHJvbGVyIHN1cHBvcnQiIGlmIEVNQkVEREVECisJYm9vbCAiRVQmVCBVU0Igc2VyaWVzIFRDNFVNL1RDNVVIIHRvdWNoc2NyZWVuIGNvbnRyb2xsZXIgc3VwcG9ydCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFRPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUKIAogY29uZmlnIFRPVUNIU0NSRUVOX1VTQl9ORVhJTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzktaTJjLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS1pMmMuYwppbmRleCBkODJhMzhlLi40ZTRlNThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS1pMmMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS1pMmMuYwpAQCAtMTAsMTQgKzEwLDE2IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgogCiAjaW5jbHVkZSAiYWQ3ODc5LmgiCiAKICNkZWZpbmUgQUQ3ODc5X0RFVklECQkweDc5CS8qIEFENzg3OS0xL0FENzg4OS0xICovCiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgYWQ3ODc5X2kyY19zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQorc3RhdGljIGludCBhZDc4NzlfaTJjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IGFkNzg3OSAqdHMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCWFkNzg3OV9zdXNwZW5kKHRzKTsKQEAgLTI1LDE3ICsyNywxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFkNzg3OV9pMmNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGFkNzg3OV9pMmNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBhZDc4NzkgKnRzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlhZDc4NzlfcmVzdW1lKHRzKTsKIAogCXJldHVybiAwOwogfQotI2Vsc2UKLSMgZGVmaW5lIGFkNzg3OV9pMmNfc3VzcGVuZCBOVUxMCi0jIGRlZmluZSBhZDc4NzlfaTJjX3Jlc3VtZSAgTlVMTAorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoYWQ3ODc5X2kyY19wbSwgYWQ3ODc5X2kyY19zdXNwZW5kLCBhZDc4NzlfaTJjX3Jlc3VtZSk7CiAjZW5kaWYKIAogLyogQWxsIHJlZ2lzdGVycyBhcmUgd29yZC1zaXplZC4KQEAgLTExNywxMSArMTE5LDEyIEBACiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSAiYWQ3ODc5IiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZhZDc4NzlfaTJjX3BtLAorI2VuZGlmCiAJfSwKIAkucHJvYmUJCT0gYWQ3ODc5X2kyY19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGFkNzg3OV9pMmNfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IGFkNzg3OV9pMmNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGFkNzg3OV9pMmNfcmVzdW1lLAogCS5pZF90YWJsZQk9IGFkNzg3OV9pZCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY3k4Y3RtZzExMF90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jeThjdG1nMTEwX3RzLmMKaW5kZXggZDBjM2E3Mi4uYTkzYzVjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jeThjdG1nMTEwX3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jeThjdG1nMTEwX3RzLmMKQEAgLTI4MCw4ICsyODAsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGN5OGN0bWcxMTBfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzZykKK3N0YXRpYyBpbnQgY3k4Y3RtZzExMF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBjeThjdG1nMTEwICp0cyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZjbGllbnQtPmRldikpCkBAIC0yOTMsOCArMjk0LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeThjdG1nMTEwX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBjeThjdG1nMTEwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgY3k4Y3RtZzExMCAqdHMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmY2xpZW50LT5kZXYpKQpAQCAtMzA1LDYgKzMwNyw4IEBACiAJfQogCXJldHVybiAwOwogfQorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoY3k4Y3RtZzExMF9wbSwgY3k4Y3RtZzExMF9zdXNwZW5kLCBjeThjdG1nMTEwX3Jlc3VtZSk7CiAjZW5kaWYKIAogc3RhdGljIGludCBfX2RldmV4aXQgY3k4Y3RtZzExMF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKQEAgLTMzNSwxNCArMzM5LDEzIEBACiAJLmRyaXZlcgkJPSB7CiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkubmFtZQk9IENZOENUTUcxMTBfRFJJVkVSX05BTUUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZjeThjdG1nMTEwX3BtLAorI2VuZGlmCiAJfSwKIAkuaWRfdGFibGUJPSBjeThjdG1nMTEwX2lkdGFibGUsCiAJLnByb2JlCQk9IGN5OGN0bWcxMTBfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChjeThjdG1nMTEwX3JlbW92ZSksCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBjeThjdG1nMTEwX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBjeThjdG1nMTEwX3Jlc3VtZSwKLSNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2luaXQgY3k4Y3RtZzExMF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2VldGlfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWV0aV90cy5jCmluZGV4IDdhM2E5MTYuLjdmOGY1MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWV0aV90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWV0aV90cy5jCkBAIC0yNjEsOCArMjYxLDkgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBlZXRpX3RzX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1lc2cpCitzdGF0aWMgaW50IGVldGlfdHNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgZWV0aV90c19wcml2ICpwcml2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gcHJpdi0+aW5wdXQ7CiAKQEAgLTI3OSw4ICsyODAsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVldGlfdHNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGVldGlfdHNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBlZXRpX3RzX3ByaXYgKnByaXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBwcml2LT5pbnB1dDsKIApAQCAtMjk2LDkgKzI5OCw4IEBACiAKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIGVldGlfdHNfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIGVldGlfdHNfcmVzdW1lIE5VTEwKKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGVldGlfdHNfcG0sIGVldGlfdHNfc3VzcGVuZCwgZWV0aV90c19yZXN1bWUpOwogI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBlZXRpX3RzX2lkW10gPSB7CkBAIC0zMTAsMTEgKzMxMSwxMiBAQAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGVldGlfdHNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gImVldGlfdHMiLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0gPSAmZWV0aV90c19wbSwKKyNlbmRpZgogCX0sCiAJLnByb2JlID0gZWV0aV90c19wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AoZWV0aV90c19yZW1vdmUpLAotCS5zdXNwZW5kID0gZWV0aV90c19zdXNwZW5kLAotCS5yZXN1bWUgPSBlZXRpX3RzX3Jlc3VtZSwKIAkuaWRfdGFibGUgPSBlZXRpX3RzX2lkLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tY3M1MDAwX3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21jczUwMDBfdHMuYwppbmRleCA2ZWU5OTQwLi4yZDg0YzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21jczUwMDBfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21jczUwMDBfdHMuYwpAQCAtMjYxLDI1ICsyNjEsMjcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBtY3M1MDAwX3RzX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1lc2cpCitzdGF0aWMgaW50IG1jczUwMDBfdHNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwogCS8qIFRvdWNoIHNsZWVwIG1vZGUgKi8KIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTUNTNTAwMF9UU19PUF9NT0RFLCBPUF9NT0RFX1NMRUVQKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1jczUwMDBfdHNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IG1jczUwMDBfdHNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBtY3M1MDAwX3RzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCW1jczUwMDBfdHNfcGh5c19pbml0KGRhdGEpOwogCiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBtY3M1MDAwX3RzX3N1c3BlbmQJTlVMTAotI2RlZmluZSBtY3M1MDAwX3RzX3Jlc3VtZQlOVUxMCisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhtY3M1MDAwX3RzX3BtLCBtY3M1MDAwX3RzX3N1c3BlbmQsIG1jczUwMDBfdHNfcmVzdW1lKTsKICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbWNzNTAwMF90c19pZFtdID0gewpAQCAtMjkxLDEwICsyOTMsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtY3M1MDAwX3RzX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gbWNzNTAwMF90c19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1jczUwMDBfdHNfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IG1jczUwMDBfdHNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IG1jczUwMDBfdHNfcmVzdW1lLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gIm1jczUwMDBfdHMiLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0gICA9ICZtY3M1MDAwX3RzX3BtLAorI2VuZGlmCiAJfSwKIAkuaWRfdGFibGUJPSBtY3M1MDAwX3RzX2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWlnb3JfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWlnb3JfdHMuYwppbmRleCBkZWZlNWRkLi41ODAzYmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21pZ29yX3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9taWdvcl90cy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KQEAgLTIyNiw4ICsyMjcsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1pZ29yX3RzX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1lc2cpCitzdGF0aWMgaW50IG1pZ29yX3RzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IG1pZ29yX3RzX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJmNsaWVudC0+ZGV2KTsKIAogCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmY2xpZW50LT5kZXYpKQpAQCAtMjM2LDggKzIzOCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWlnb3JfdHNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IG1pZ29yX3RzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgbWlnb3JfdHNfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYpOwogCiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZjbGllbnQtPmRldikpCkBAIC0yNDYsNiArMjQ5LDggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG1pZ29yX3RzX3BtLCBtaWdvcl90c19zdXNwZW5kLCBtaWdvcl90c19yZXN1bWUpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbWlnb3JfdHNfaWRbXSA9IHsKIAl7ICJtaWdvcl90cyIsIDAgfSwKIAl7IH0KQEAgLTI1NSwxMSArMjYwLDEwIEBACiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbWlnb3JfdHNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gIm1pZ29yX3RzIiwKKwkJLnBtID0gJm1pZ29yX3RzX3BtLAogCX0sCiAJLnByb2JlID0gbWlnb3JfdHNfcHJvYmUsCiAJLnJlbW92ZSA9IG1pZ29yX3RzX3JlbW92ZSwKLQkuc3VzcGVuZCA9IG1pZ29yX3RzX3N1c3BlbmQsCi0JLnJlc3VtZSA9IG1pZ29yX3RzX3Jlc3VtZSwKIAkuaWRfdGFibGUgPSBtaWdvcl90c19pZCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd2Fjb21fdzgwMDEuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd2Fjb21fdzgwMDEuYwppbmRleCA4ZWQ1M2FkLi41Y2I4NDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dhY29tX3c4MDAxLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93YWNvbV93ODAwMS5jCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAwOCBKYXlhIEt1bWFyCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDEwIC0gMjAxMSBQaW5nIENoZW5nLCBXYWNvbS4gPHBpbmdjQHdhY29tLmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKQEAgLTY0LDExICs2NSwxMSBAQAogCiAvKiB0b3VjaCBxdWVyeSByZXBseSBwYWNrZXQgKi8KIHN0cnVjdCB3ODAwMV90b3VjaF9xdWVyeSB7CisJdTE2IHg7CisJdTE2IHk7CiAJdTggcGFuZWxfcmVzOwogCXU4IGNhcGFjaXR5X3JlczsKIAl1OCBzZW5zb3JfaWQ7Ci0JdTE2IHg7Ci0JdTE2IHk7CiB9OwogCiAvKgpAQCAtODcsOSArODgsMTQgQEAKIAljaGFyIHBoeXNbMzJdOwogCWludCB0eXBlOwogCXVuc2lnbmVkIGludCBwa3RsZW47CisJdTE2IG1heF90b3VjaF94OworCXUxNiBtYXhfdG91Y2hfeTsKKwl1MTYgbWF4X3Blbl94OworCXUxNiBtYXhfcGVuX3k7CisJY2hhciBuYW1lWzY0XTsKIH07CiAKLXN0YXRpYyB2b2lkIHBhcnNlX2RhdGEodTggKmRhdGEsIHN0cnVjdCB3ODAwMV9jb29yZCAqY29vcmQpCitzdGF0aWMgdm9pZCBwYXJzZV9wZW5fZGF0YSh1OCAqZGF0YSwgc3RydWN0IHc4MDAxX2Nvb3JkICpjb29yZCkKIHsKIAltZW1zZXQoY29vcmQsIDAsIHNpemVvZigqY29vcmQpKTsKIApAQCAtMTEzLDExICsxMTksMzAgQEAKIAljb29yZC0+dGlsdF95ID0gZGF0YVs4XSAmIDB4N0Y7CiB9CiAKLXN0YXRpYyB2b2lkIHBhcnNlX3RvdWNoKHN0cnVjdCB3ODAwMSAqdzgwMDEpCitzdGF0aWMgdm9pZCBwYXJzZV9zaW5nbGVfdG91Y2godTggKmRhdGEsIHN0cnVjdCB3ODAwMV9jb29yZCAqY29vcmQpCit7CisJY29vcmQtPnggPSAoZGF0YVsxXSA8PCA3KSB8IGRhdGFbMl07CisJY29vcmQtPnkgPSAoZGF0YVszXSA8PCA3KSB8IGRhdGFbNF07CisJY29vcmQtPnRzdyA9IGRhdGFbMF0gJiAweDAxOworfQorCitzdGF0aWMgdm9pZCBzY2FsZV90b3VjaF9jb29yZGluYXRlcyhzdHJ1Y3QgdzgwMDEgKnc4MDAxLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKngsIHVuc2lnbmVkIGludCAqeSkKK3sKKwlpZiAodzgwMDEtPm1heF9wZW5feCAmJiB3ODAwMS0+bWF4X3RvdWNoX3gpCisJCSp4ID0gKnggKiB3ODAwMS0+bWF4X3Blbl94IC8gdzgwMDEtPm1heF90b3VjaF94OworCisJaWYgKHc4MDAxLT5tYXhfcGVuX3kgJiYgdzgwMDEtPm1heF90b3VjaF95KQorCQkqeSA9ICp5ICogdzgwMDEtPm1heF9wZW5feSAvIHc4MDAxLT5tYXhfdG91Y2hfeTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfbXVsdGlfdG91Y2goc3RydWN0IHc4MDAxICp3ODAwMSkKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSB3ODAwMS0+ZGV2OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3ODAwMS0+ZGF0YTsKKwl1bnNpZ25lZCBpbnQgeCwgeTsKIAlpbnQgaTsKKwlpbnQgY291bnQgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQlib29sIHRvdWNoID0gZGF0YVswXSAmICgxIDw8IGkpOwpAQCAtMTI1LDE1ICsxNTAsMjkgQEAKIAkJaW5wdXRfbXRfc2xvdChkZXYsIGkpOwogCQlpbnB1dF9tdF9yZXBvcnRfc2xvdF9zdGF0ZShkZXYsIE1UX1RPT0xfRklOR0VSLCB0b3VjaCk7CiAJCWlmICh0b3VjaCkgewotCQkJaW50IHggPSAoZGF0YVs2ICogaSArIDFdIDw8IDcpIHwgKGRhdGFbNiAqIGkgKyAyXSk7Ci0JCQlpbnQgeSA9IChkYXRhWzYgKiBpICsgM10gPDwgNykgfCAoZGF0YVs2ICogaSArIDRdKTsKKwkJCXggPSAoZGF0YVs2ICogaSArIDFdIDw8IDcpIHwgZGF0YVs2ICogaSArIDJdOworCQkJeSA9IChkYXRhWzYgKiBpICsgM10gPDwgNykgfCBkYXRhWzYgKiBpICsgNF07CiAJCQkvKiBkYXRhWzUsNl0gYW5kIFsxMSwxMl0gaXMgZmluZ2VyIGNhcGFjaXR5ICovCiAKKwkJCS8qIHNjYWxlIHRvIHBlbiBtYXhpbXVtICovCisJCQlzY2FsZV90b3VjaF9jb29yZGluYXRlcyh3ODAwMSwgJngsICZ5KTsKKwogCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NVF9QT1NJVElPTl9YLCB4KTsKIAkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfTVRfUE9TSVRJT05fWSwgeSk7CisJCQljb3VudCsrOwogCQl9CiAJfQogCisJLyogZW11bGF0ZSBzaW5nbGUgdG91Y2ggZXZlbnRzIHdoZW4gc3R5bHVzIGlzIG91dCBvZiBwcm94aW1pdHkuCisJICogVGhpcyBpcyB0byBtYWtlIHNpbmdsZSB0b3VjaCBiYWNrd2FyZCBzdXBwb3J0IGNvbnNpc3RlbnQKKwkgKiBhY3Jvc3MgYWxsIFdhY29tIHNpbmdsZSB0b3VjaCBkZXZpY2VzLgorCSAqLworCWlmICh3ODAwMS0+dHlwZSAhPSBCVE5fVE9PTF9QRU4gJiYKKwkJCSAgICB3ODAwMS0+dHlwZSAhPSBCVE5fVE9PTF9SVUJCRVIpIHsKKwkJdzgwMDEtPnR5cGUgPSBjb3VudCA9PSAxID8gQlROX1RPT0xfRklOR0VSIDogS0VZX1JFU0VSVkVEOworCQlpbnB1dF9tdF9yZXBvcnRfcG9pbnRlcl9lbXVsYXRpb24oZGV2LCB0cnVlKTsKKwl9CisKIAlpbnB1dF9zeW5jKGRldik7CiB9CiAKQEAgLTE1Miw2ICsxOTEsMTUgQEAKIAlxdWVyeS0+eSA9IGRhdGFbNV0gPDwgOTsKIAlxdWVyeS0+eSB8PSBkYXRhWzZdIDw8IDI7CiAJcXVlcnktPnkgfD0gKGRhdGFbMl0gPj4gMykgJiAweDM7CisKKwkvKiBFYXJseSBkYXlzJyBzaW5nbGUtZmluZ2VyIHRvdWNoIG1vZGVscyBuZWVkIHRoZSBmb2xsb3dpbmcgZGVmYXVsdHMgKi8KKwlpZiAoIXF1ZXJ5LT54ICYmICFxdWVyeS0+eSkgeworCQlxdWVyeS0+eCA9IDEwMjQ7CisJCXF1ZXJ5LT55ID0gMTAyNDsKKwkJaWYgKHF1ZXJ5LT5wYW5lbF9yZXMpCisJCQlxdWVyeS0+eCA9IHF1ZXJ5LT55ID0gKDEgPDwgcXVlcnktPnBhbmVsX3Jlcyk7CisJCXF1ZXJ5LT5wYW5lbF9yZXMgPSAxMDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJlcG9ydF9wZW5fZXZlbnRzKHN0cnVjdCB3ODAwMSAqdzgwMDEsIHN0cnVjdCB3ODAwMV9jb29yZCAqY29vcmQpCkBAIC0xNjEsMTYgKzIwOSwxNSBAQAogCS8qCiAJICogV2UgaGF2ZSAxIGJpdCBmb3IgcHJveGltaXR5IChyZHkpIGFuZCAzIGJpdHMgZm9yIHRpcCwgc2lkZSwKIAkgKiBzaWRlMi9lcmFzZXIuIElmIHJkeSAmJiBmMiBhcmUgc2V0LCB0aGlzIGNhbiBiZSBlaXRoZXIgcGVuICsgc2lkZTIsCi0JICogb3IgZXJhc2VyLiBhc3N1bWUKKwkgKiBvciBlcmFzZXIuIEFzc3VtZToKIAkgKiAtIGlmIGRldiBpcyBhbHJlYWR5IGluIHByb3hpbWl0eSBhbmQgZjIgaXMgdG9nZ2xlZCDihpIgcGVuICsgc2lkZTIKIAkgKiAtIGlmIGRldiBjb21lcyBpbnRvIHByb3hpbWl0eSB3aXRoIGYyIHNldCDihpIgZXJhc2VyCiAJICogSWYgZjIgZGlzYXBwZWFycyBhZnRlciBhc3N1bWluZyBlcmFzZXIsIGZha2UgcHJveGltaXR5IG91dCBmb3IKIAkgKiBlcmFzZXIgYW5kIGluIGZvciBwZW4uCiAJICovCiAKLQlpZiAoIXc4MDAxLT50eXBlKSB7Ci0JCXc4MDAxLT50eXBlID0gY29vcmQtPmYyID8gQlROX1RPT0xfUlVCQkVSIDogQlROX1RPT0xfUEVOOwotCX0gZWxzZSBpZiAodzgwMDEtPnR5cGUgPT0gQlROX1RPT0xfUlVCQkVSKSB7CisJc3dpdGNoICh3ODAwMS0+dHlwZSkgeworCWNhc2UgQlROX1RPT0xfUlVCQkVSOgogCQlpZiAoIWNvb3JkLT5mMikgewogCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19QUkVTU1VSRSwgMCk7CiAJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCAwKTsKQEAgLTE4MCw4ICsyMjcsMjEgQEAKIAkJCWlucHV0X3N5bmMoZGV2KTsKIAkJCXc4MDAxLT50eXBlID0gQlROX1RPT0xfUEVOOwogCQl9Ci0JfSBlbHNlIHsKKwkJYnJlYWs7CisKKwljYXNlIEJUTl9UT09MX0ZJTkdFUjoKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgMCk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9GSU5HRVIsIDApOworCQlpbnB1dF9zeW5jKGRldik7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBLRVlfUkVTRVJWRUQ6CisJCXc4MDAxLT50eXBlID0gY29vcmQtPmYyID8gQlROX1RPT0xfUlVCQkVSIDogQlROX1RPT0xfUEVOOworCQlicmVhazsKKworCWRlZmF1bHQ6CiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RZTFVTMiwgY29vcmQtPmYyKTsKKwkJYnJlYWs7CiAJfQogCiAJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBjb29yZC0+eCk7CkBAIC0xOTMsNyArMjUzLDI2IEBACiAJaW5wdXRfc3luYyhkZXYpOwogCiAJaWYgKCFjb29yZC0+cmR5KQotCQl3ODAwMS0+dHlwZSA9IDA7CisJCXc4MDAxLT50eXBlID0gS0VZX1JFU0VSVkVEOworfQorCitzdGF0aWMgdm9pZCByZXBvcnRfc2luZ2xlX3RvdWNoKHN0cnVjdCB3ODAwMSAqdzgwMDEsIHN0cnVjdCB3ODAwMV9jb29yZCAqY29vcmQpCit7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gdzgwMDEtPmRldjsKKwl1bnNpZ25lZCBpbnQgeCA9IGNvb3JkLT54OworCXVuc2lnbmVkIGludCB5ID0gY29vcmQtPnk7CisKKwkvKiBzY2FsZSB0byBwZW4gbWF4aW11bSAqLworCXNjYWxlX3RvdWNoX2Nvb3JkaW5hdGVzKHc4MDAxLCAmeCwgJnkpOworCisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCB4KTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIHkpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsIGNvb3JkLT50c3cpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9GSU5HRVIsIGNvb3JkLT50c3cpOworCisJaW5wdXRfc3luYyhkZXYpOworCisJdzgwMDEtPnR5cGUgPSBjb29yZC0+dHN3ID8gQlROX1RPT0xfRklOR0VSIDogS0VZX1JFU0VSVkVEOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgdzgwMDFfaW50ZXJydXB0KHN0cnVjdCBzZXJpbyAqc2VyaW8sCkBAIC0yMTQsOSArMjkzLDE4IEBACiAKIAljYXNlIFc4MDAxX1BLVExFTl9UT1VDSDkzIC0gMToKIAljYXNlIFc4MDAxX1BLVExFTl9UT1VDSDlBIC0gMToKLQkJLyogaWdub3JlIG9uZS1maW5nZXIgdG91Y2ggcGFja2V0LiAqLwotCQlpZiAodzgwMDEtPnBrdGxlbiA9PSB3ODAwMS0+aWR4KQorCQl0bXAgPSB3ODAwMS0+ZGF0YVswXSAmIFc4MDAxX1RPVUNIX0JZVEU7CisJCWlmICh0bXAgIT0gVzgwMDFfVE9VQ0hfQllURSkKKwkJCWJyZWFrOworCisJCWlmICh3ODAwMS0+cGt0bGVuID09IHc4MDAxLT5pZHgpIHsKIAkJCXc4MDAxLT5pZHggPSAwOworCQkJaWYgKHc4MDAxLT50eXBlICE9IEJUTl9UT09MX1BFTiAmJgorCQkJICAgIHc4MDAxLT50eXBlICE9IEJUTl9UT09MX1JVQkJFUikgeworCQkJCXBhcnNlX3NpbmdsZV90b3VjaCh3ODAwMS0+ZGF0YSwgJmNvb3JkKTsKKwkJCQlyZXBvcnRfc2luZ2xlX3RvdWNoKHc4MDAxLCAmY29vcmQpOworCQkJfQorCQl9CiAJCWJyZWFrOwogCiAJLyogUGVuIGNvb3JkaW5hdGVzIHBhY2tldCAqLwpAQCAtMjI1LDE4ICszMTMsMTggQEAKIAkJaWYgKHVubGlrZWx5KHRtcCA9PSBXODAwMV9UQUJfQllURSkpCiAJCQlicmVhazsKIAotCQl0bXAgPSAodzgwMDEtPmRhdGFbMF0gJiBXODAwMV9UT1VDSF9CWVRFKTsKKwkJdG1wID0gdzgwMDEtPmRhdGFbMF0gJiBXODAwMV9UT1VDSF9CWVRFOwogCQlpZiAodG1wID09IFc4MDAxX1RPVUNIX0JZVEUpCiAJCQlicmVhazsKIAogCQl3ODAwMS0+aWR4ID0gMDsKLQkJcGFyc2VfZGF0YSh3ODAwMS0+ZGF0YSwgJmNvb3JkKTsKKwkJcGFyc2VfcGVuX2RhdGEodzgwMDEtPmRhdGEsICZjb29yZCk7CiAJCXJlcG9ydF9wZW5fZXZlbnRzKHc4MDAxLCAmY29vcmQpOwogCQlicmVhazsKIAogCS8qIGNvbnRyb2wgcGFja2V0ICovCiAJY2FzZSBXODAwMV9QS1RMRU5fVFBDQ1RMIC0gMToKLQkJdG1wID0gKHc4MDAxLT5kYXRhWzBdICYgVzgwMDFfVE9VQ0hfTUFTSyk7CisJCXRtcCA9IHc4MDAxLT5kYXRhWzBdICYgVzgwMDFfVE9VQ0hfTUFTSzsKIAkJaWYgKHRtcCA9PSBXODAwMV9UT1VDSF9CWVRFKQogCQkJYnJlYWs7CiAKQEAgLTI0OSw3ICszMzcsNyBAQAogCS8qIDIgZmluZ2VyIHRvdWNoIHBhY2tldCAqLwogCWNhc2UgVzgwMDFfUEtUTEVOX1RPVUNIMkZHIC0gMToKIAkJdzgwMDEtPmlkeCA9IDA7Ci0JCXBhcnNlX3RvdWNoKHc4MDAxKTsKKwkJcGFyc2VfbXVsdGlfdG91Y2godzgwMDEpOwogCQlicmVhazsKIAl9CiAKQEAgLTI3OSw2ICszNjcsNyBAQAogewogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHc4MDAxLT5kZXY7CiAJc3RydWN0IHc4MDAxX2Nvb3JkIGNvb3JkOworCXN0cnVjdCB3ODAwMV90b3VjaF9xdWVyeSB0b3VjaDsKIAlpbnQgZXJyb3I7CiAKIAllcnJvciA9IHc4MDAxX2NvbW1hbmQodzgwMDEsIFc4MDAxX0NNRF9TVE9QLCBmYWxzZSk7CkBAIC0yODcsMTQgKzM3NiwyMSBAQAogCiAJbXNsZWVwKDI1MCk7CS8qIHdhaXQgMjUwbXMgYmVmb3JlIHF1ZXJ5aW5nIHRoZSBkZXZpY2UgKi8KIAorCWRldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKKwlzdHJsY2F0KHc4MDAxLT5uYW1lLCAiV2Fjb20gU2VyaWFsIiwgc2l6ZW9mKHc4MDAxLT5uYW1lKSk7CisKIAkvKiBwZW5hYmxlZD8gKi8KIAllcnJvciA9IHc4MDAxX2NvbW1hbmQodzgwMDEsIFc4MDAxX0NNRF9RVUVSWSwgdHJ1ZSk7CiAJaWYgKCFlcnJvcikgeworCQlfX3NldF9iaXQoQlROX1RPVUNILCBkZXYtPmtleWJpdCk7CiAJCV9fc2V0X2JpdChCVE5fVE9PTF9QRU4sIGRldi0+a2V5Yml0KTsKIAkJX19zZXRfYml0KEJUTl9UT09MX1JVQkJFUiwgZGV2LT5rZXliaXQpOwogCQlfX3NldF9iaXQoQlROX1NUWUxVUywgZGV2LT5rZXliaXQpOwogCQlfX3NldF9iaXQoQlROX1NUWUxVUzIsIGRldi0+a2V5Yml0KTsKLQkJcGFyc2VfZGF0YSh3ODAwMS0+cmVzcG9uc2UsICZjb29yZCk7CisKKwkJcGFyc2VfcGVuX2RhdGEodzgwMDEtPnJlc3BvbnNlLCAmY29vcmQpOworCQl3ODAwMS0+bWF4X3Blbl94ID0gY29vcmQueDsKKwkJdzgwMDEtPm1heF9wZW5feSA9IGNvb3JkLnk7CiAKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfWCwgMCwgY29vcmQueCwgMCwgMCk7CiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1ksIDAsIGNvb3JkLnksIDAsIDApOwpAQCAtMzAzLDYgKzM5OSw4IEBACiAJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19USUxUX1gsIDAsIGNvb3JkLnRpbHRfeCwgMCwgMCk7CiAJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19USUxUX1ksIDAsIGNvb3JkLnRpbHRfeSwgMCwgMCk7CiAJCX0KKwkJdzgwMDEtPmlkID0gMHg5MDsKKwkJc3RybGNhdCh3ODAwMS0+bmFtZSwgIiBQZW5hYmxlZCIsIHNpemVvZih3ODAwMS0+bmFtZSkpOwogCX0KIAogCS8qIFRvdWNoIGVuYWJsZWQ/ICovCkBAIC0zMTMsMjQgKzQxMSwzOCBAQAogCSAqIHNlY29uZCBieXRlIGlzIGVtcHR5LCB3aGljaCBpbmRpY2F0ZXMgdG91Y2ggaXMgbm90IHN1cHBvcnRlZC4KIAkgKi8KIAlpZiAoIWVycm9yICYmIHc4MDAxLT5yZXNwb25zZVsxXSkgewotCQlzdHJ1Y3QgdzgwMDFfdG91Y2hfcXVlcnkgdG91Y2g7CisJCV9fc2V0X2JpdChCVE5fVE9VQ0gsIGRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9UT09MX0ZJTkdFUiwgZGV2LT5rZXliaXQpOwogCiAJCXBhcnNlX3RvdWNocXVlcnkodzgwMDEtPnJlc3BvbnNlLCAmdG91Y2gpOworCQl3ODAwMS0+bWF4X3RvdWNoX3ggPSB0b3VjaC54OworCQl3ODAwMS0+bWF4X3RvdWNoX3kgPSB0b3VjaC55OworCisJCS8qIHNjYWxlIHRvIHBlbiBtYXhpbXVtICovCisJCWlmICh3ODAwMS0+bWF4X3Blbl94ICYmIHc4MDAxLT5tYXhfcGVuX3kpIHsKKwkJCXRvdWNoLnggPSB3ODAwMS0+bWF4X3Blbl94OworCQkJdG91Y2gueSA9IHc4MDAxLT5tYXhfcGVuX3k7CisJCX0KIAogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19YLCAwLCB0b3VjaC54LCAwLCAwKTsKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfWSwgMCwgdG91Y2gueSwgMCwgMCk7Ci0JCV9fc2V0X2JpdChCVE5fVE9PTF9GSU5HRVIsIGRldi0+a2V5Yml0KTsKIAogCQlzd2l0Y2ggKHRvdWNoLnNlbnNvcl9pZCkgewogCQljYXNlIDA6CiAJCWNhc2UgMjoKIAkJCXc4MDAxLT5wa3RsZW4gPSBXODAwMV9QS1RMRU5fVE9VQ0g5MzsKKwkJCXc4MDAxLT5pZCA9IDB4OTM7CisJCQlzdHJsY2F0KHc4MDAxLT5uYW1lLCAiIDFGRyIsIHNpemVvZih3ODAwMS0+bmFtZSkpOwogCQkJYnJlYWs7CisKIAkJY2FzZSAxOgogCQljYXNlIDM6CiAJCWNhc2UgNDoKIAkJCXc4MDAxLT5wa3RsZW4gPSBXODAwMV9QS1RMRU5fVE9VQ0g5QTsKKwkJCXN0cmxjYXQodzgwMDEtPm5hbWUsICIgMUZHIiwgc2l6ZW9mKHc4MDAxLT5uYW1lKSk7CisJCQl3ODAwMS0+aWQgPSAweDlhOwogCQkJYnJlYWs7CisKIAkJY2FzZSA1OgogCQkJdzgwMDEtPnBrdGxlbiA9IFc4MDAxX1BLVExFTl9UT1VDSDJGRzsKIApAQCAtMzQxLDEwICs0NTMsMTggQEAKIAkJCQkJCTAsIHRvdWNoLnksIDAsIDApOwogCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfTVRfVE9PTF9UWVBFLAogCQkJCQkJMCwgTVRfVE9PTF9NQVgsIDAsIDApOworCisJCQlzdHJsY2F0KHc4MDAxLT5uYW1lLCAiIDJGRyIsIHNpemVvZih3ODAwMS0+bmFtZSkpOworCQkJaWYgKHc4MDAxLT5tYXhfcGVuX3ggJiYgdzgwMDEtPm1heF9wZW5feSkKKwkJCQl3ODAwMS0+aWQgPSAweEUzOworCQkJZWxzZQorCQkJCXc4MDAxLT5pZCA9IDB4RTI7CiAJCQlicmVhazsKIAkJfQogCX0KIAorCXN0cmxjYXQodzgwMDEtPm5hbWUsICIgVG91Y2hzY3JlZW4iLCBzaXplb2YodzgwMDEtPm5hbWUpKTsKKwogCXJldHVybiB3ODAwMV9jb21tYW5kKHc4MDAxLCBXODAwMV9DTURfU1RBUlQsIGZhbHNlKTsKIH0KIApAQCAtMzg0LDIyICs1MDQsMTAgQEAKIAl9CiAKIAl3ODAwMS0+c2VyaW8gPSBzZXJpbzsKLQl3ODAwMS0+aWQgPSBzZXJpby0+aWQuaWQ7CiAJdzgwMDEtPmRldiA9IGlucHV0X2RldjsKIAlpbml0X2NvbXBsZXRpb24oJnc4MDAxLT5jbWRfZG9uZSk7CiAJc25wcmludGYodzgwMDEtPnBoeXMsIHNpemVvZih3ODAwMS0+cGh5cyksICIlcy9pbnB1dDAiLCBzZXJpby0+cGh5cyk7CiAKLQlpbnB1dF9kZXYtPm5hbWUgPSAiV2Fjb20gVzgwMDEgUGVuYWJsZWQgU2VyaWFsIFRvdWNoU2NyZWVuIjsKLQlpbnB1dF9kZXYtPnBoeXMgPSB3ODAwMS0+cGh5czsKLQlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfUlMyMzI7Ci0JaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSBTRVJJT19XODAwMTsKLQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSB3ODAwMS0+aWQ7Ci0JaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwotCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZzZXJpby0+ZGV2OwotCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwotCV9fc2V0X2JpdChCVE5fVE9VQ0gsIGlucHV0X2Rldi0+a2V5Yml0KTsKLQogCXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCB3ODAwMSk7CiAJZXJyID0gc2VyaW9fb3BlbihzZXJpbywgZHJ2KTsKIAlpZiAoZXJyKQpAQCAtNDA5LDYgKzUxNywxNCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDM7CiAKKwlpbnB1dF9kZXYtPm5hbWUgPSB3ODAwMS0+bmFtZTsKKwlpbnB1dF9kZXYtPnBoeXMgPSB3ODAwMS0+cGh5czsKKwlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSB3ODAwMS0+aWQ7CisJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX1JTMjMyOworCWlucHV0X2Rldi0+aWQudmVuZG9yID0gMHgwNTZhOworCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKKwlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmc2VyaW8tPmRldjsKKwogCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZSh3ODAwMS0+ZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWwzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKaW5kZXggMTc4OTQyYS4uOGEzYzVjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCkBAIC0yMzE4LDcgKzIzMTgsNyBAQAogCQkgX19mdW5jX18sIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAogCQkgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCiAJY3MgPSBnaWdhc2V0X2luaXRjcyhkcml2ZXIsIEJBU19DSEFOTkVMUywgMCwgMCwgY2lkbW9kZSwKIAkJCSAgICBHSUdBU0VUX01PRFVMRU5BTUUpOwogCWlmICghY3MpCkBAIC0yNTc2LDcgKzI1NzYsNyBAQAogewogCWludCByZXN1bHQ7CiAKLQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkcml2ZXIgc3RhdGUgYW5kIGludGlhbGl6ZSBpdCAqLworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRyaXZlciBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLwogCWRyaXZlciA9IGdpZ2FzZXRfaW5pdGRyaXZlcihHSUdBU0VUX01JTk9SLCBHSUdBU0VUX01JTk9SUywKIAkJCQkgICAgR0lHQVNFVF9NT0RVTEVOQU1FLCBHSUdBU0VUX0RFVk5BTUUsCiAJCQkJICAgICZnaWdvcHMsIFRISVNfTU9EVUxFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCmluZGV4IGQxNTFkY2IuLjBlZjA5ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYwpAQCAtNTEzLDcgKzUxMyw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCiAJY3MgPSBnaWdhc2V0X2luaXRjcyhkcml2ZXIsIDEsIDEsIDAsIGNpZG1vZGUsIEdJR0FTRVRfTU9EVUxFTkFNRSk7CiAJaWYgKCFjcykKIAkJZ290byBlcnJvcjsKQEAgLTc3MSw3ICs3NzEsNyBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZHJpdmVyIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkcml2ZXIgc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KIAlkcml2ZXIgPSBnaWdhc2V0X2luaXRkcml2ZXIoR0lHQVNFVF9NSU5PUiwgR0lHQVNFVF9NSU5PUlMsCiAJCQkJCSAgR0lHQVNFVF9NT0RVTEVOQU1FLCBHSUdBU0VUX0RFVk5BTUUsCiAJCQkJCSAgJm9wcywgVEhJU19NT0RVTEUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKaW5kZXggNGE2NjMzOC4uNWUzMzAwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCkBAIC02OTUsNyArNjk1LDcgQEAKIAogCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICIlczogRGV2aWNlIG1hdGNoZWQgLi4uICFcbiIsIF9fZnVuY19fKTsKIAotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCiAJY3MgPSBnaWdhc2V0X2luaXRjcyhkcml2ZXIsIDEsIDEsIDAsIGNpZG1vZGUsIEdJR0FTRVRfTU9EVUxFTkFNRSk7CiAJaWYgKCFjcykKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC04OTQsNyArODk0LDcgQEAKIHsKIAlpbnQgcmVzdWx0OwogCi0JLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZHJpdmVyIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkcml2ZXIgc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KIAlkcml2ZXIgPSBnaWdhc2V0X2luaXRkcml2ZXIoR0lHQVNFVF9NSU5PUiwgR0lHQVNFVF9NSU5PUlMsCiAJCQkJICAgIEdJR0FTRVRfTU9EVUxFTkFNRSwgR0lHQVNFVF9ERVZOQU1FLAogCQkJCSAgICAmb3BzLCBUSElTX01PRFVMRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaXBhYy5oIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2lwYWMuaAppbmRleCA3NGE2Y2NmLi44MTIxZTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaXBhYy5oCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9pcGFjLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAl1MzIJCQl0eXBlOwogCXUzMgkJCW9mZjsJCS8qIG9mZnNldCB0byBpc2FjIHJlZ3MgKi8KIAljaGFyCQkJKm5hbWU7Ci0Jc3BpbmxvY2tfdAkJKmh3bG9jazsJLyogbG9jayBIVyBhY2NjZXNzICovCisJc3BpbmxvY2tfdAkJKmh3bG9jazsJLyogbG9jayBIVyBhY2Nlc3MgKi8KIAlyZWFkX3JlZ19mdW5jCQkqcmVhZF9yZWc7CiAJd3JpdGVfcmVnX2Z1bmMJCSp3cml0ZV9yZWc7CiAJZmlmb19mdW5jCQkqcmVhZF9maWZvOwpAQCAtNzAsNyArNzAsNyBAQAogCXN0cnVjdCBoc2N4X2h3CQloc2N4WzJdOwogCWNoYXIJCQkqbmFtZTsKIAl2b2lkCQkJKmh3OwotCXNwaW5sb2NrX3QJCSpod2xvY2s7CS8qIGxvY2sgSFcgYWNjY2VzcyAqLworCXNwaW5sb2NrX3QJCSpod2xvY2s7CS8qIGxvY2sgSFcgYWNjZXNzICovCiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwogCXUzMgkJCXR5cGU7CiAJcmVhZF9yZWdfZnVuYwkJKnJlYWRfcmVnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2lzYXIuaCBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9pc2FyLmgKaW5kZXggNGExMzRhYy4uOTk2MmJkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2lzYXIuaAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaXNhci5oCkBAIC00NCw3ICs0NCw3IEBACiBzdHJ1Y3QgaXNhcl9odyB7CiAJc3RydWN0CWlzYXJfY2gJY2hbMl07CiAJdm9pZAkJKmh3OwotCXNwaW5sb2NrX3QJKmh3bG9jazsJLyogbG9jayBIVyBhY2NjZXNzICovCisJc3BpbmxvY2tfdAkqaHdsb2NrOwkvKiBsb2NrIEhXIGFjY2VzcyAqLwogCWNoYXIJCSpuYW1lOwogCXN0cnVjdCBtb2R1bGUJKm93bmVyOwogCXJlYWRfcmVnX2Z1bmMJKnJlYWRfcmVnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL2RzcF9jbXguYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfY214LmMKaW5kZXggNzZkOWU2Ny4uMzA5YmFjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2RzcF9jbXguYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX2NteC5jCkBAIC0xMTIsNyArMTEyLDcgQEAKICAqIERpc2FibGUgcngtZGF0YToKICAqIElmIGNteCBpcyByZWFsaXplZCBpbiBoYXJkd2FyZSwgcnggZGF0YSB3aWxsIGJlIGRpc2FibGVkIGlmIHJlcXVlc3RlZCBieQogICogdGhlIHVwcGVyIGxheWVyLiBJZiBkdG1mIGRlY29kaW5nIGlzIGRvbmUgYnkgc29mdHdhcmUgYW5kIGVuYWJsZWQsIHJ4IGRhdGEKLSAqIHdpbGwgbm90IGJlIGRpYWJsZWQgYnV0IGJsb2NrZWQgdG8gdGhlIHVwcGVyIGxheWVyLgorICogd2lsbCBub3QgYmUgZGlzYWJsZWQgYnV0IGJsb2NrZWQgdG8gdGhlIHVwcGVyIGxheWVyLgogICoKICAqIEhGQyBjb25mZXJlbmNlIGVuZ2luZToKICAqIElmIGl0IGlzIHBvc3NpYmxlIHRvIHJlYWxpemUgYWxsIGZlYXR1cmVzIHVzaW5nIGhhcmR3YXJlLCBoYXJkd2FyZSB3aWxsIGJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1scDU1MjEuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWxwNTUyMS5jCmluZGV4IDMzZmFjZDAuLjgwYTNhZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWxwNTUyMS5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWxwNTUyMS5jCkBAIC05OCw3ICs5OCw2IEBACiAjZGVmaW5lIExQNTUyMV9FWFRfQ0xLX1VTRUQJCTB4MDgKIAogc3RydWN0IGxwNTUyMV9lbmdpbmUgewotCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmF0dHJpYnV0ZXM7CiAJaW50CQlpZDsKIAl1OAkJbW9kZTsKIAl1OAkJcHJvZ19wYWdlOwpAQCAtMjI1LDI1ICsyMjQsMjIgQEAKIAkJICAgIGN1cnIpOwogfQogCi1zdGF0aWMgdm9pZCBscDU1MjFfaW5pdF9lbmdpbmUoc3RydWN0IGxwNTUyMV9jaGlwICpjaGlwLAotCQkJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqYXR0cl9ncm91cCkKK3N0YXRpYyB2b2lkIGxwNTUyMV9pbml0X2VuZ2luZShzdHJ1Y3QgbHA1NTIxX2NoaXAgKmNoaXApCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hpcC0+ZW5naW5lcyk7IGkrKykgewogCQljaGlwLT5lbmdpbmVzW2ldLmlkID0gaSArIDE7CiAJCWNoaXAtPmVuZ2luZXNbaV0uZW5naW5lX21hc2sgPSBMUDU1MjFfRU5HX01BU0tfQkFTRSA+PiAoaSAqIDIpOwogCQljaGlwLT5lbmdpbmVzW2ldLnByb2dfcGFnZSA9IGk7Ci0JCWNoaXAtPmVuZ2luZXNbaV0uYXR0cmlidXRlcyA9ICZhdHRyX2dyb3VwW2ldOwogCX0KIH0KIAotc3RhdGljIGludCBscDU1MjFfY29uZmlndXJlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICphdHRyX2dyb3VwKQorc3RhdGljIGludCBscDU1MjFfY29uZmlndXJlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGxwNTUyMV9jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHJldDsKIAotCWxwNTUyMV9pbml0X2VuZ2luZShjaGlwLCBhdHRyX2dyb3VwKTsKKwlscDU1MjFfaW5pdF9lbmdpbmUoY2hpcCk7CiAKIAkvKiBTZXQgYWxsIFBXTXMgdG8gZGlyZWN0IGNvbnRyb2wgbW9kZSAqLwogCXJldCA9IGxwNTUyMV93cml0ZShjbGllbnQsIExQNTUyMV9SRUdfT1BfTU9ERSwgMHgzRik7CkBAIC0zMjksOSArMzI1LDYgQEAKIC8qIFNldCBlbmdpbmUgbW9kZSBhbmQgY3JlYXRlIGFwcHJvcHJpYXRlIHN5c2ZzIGF0dHJpYnV0ZXMsIGlmIHJlcXVpcmVkLiAqLwogc3RhdGljIGludCBscDU1MjFfc2V0X21vZGUoc3RydWN0IGxwNTUyMV9lbmdpbmUgKmVuZ2luZSwgdTggbW9kZSkKIHsKLQlzdHJ1Y3QgbHA1NTIxX2NoaXAgKmNoaXAgPSBlbmdpbmVfdG9fbHA1NTIxKGVuZ2luZSk7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNoaXAtPmNsaWVudDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CiAJaW50IHJldCA9IDA7CiAKIAkvKiBpZiBpbiB0aGF0IG1vZGUgYWxyZWFkeSBkbyBub3RoaW5nLCBleGNlcHQgZm9yIHJ1biAqLwpAQCAtMzQzLDE4ICszMzYsMTAgQEAKIAl9IGVsc2UgaWYgKG1vZGUgPT0gTFA1NTIxX0NNRF9MT0FEKSB7CiAJCWxwNTUyMV9zZXRfZW5naW5lX21vZGUoZW5naW5lLCBMUDU1MjFfQ01EX0RJU0FCTEVEKTsKIAkJbHA1NTIxX3NldF9lbmdpbmVfbW9kZShlbmdpbmUsIExQNTUyMV9DTURfTE9BRCk7Ci0KLQkJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosIGVuZ2luZS0+YXR0cmlidXRlcyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwogCX0gZWxzZSBpZiAobW9kZSA9PSBMUDU1MjFfQ01EX0RJU0FCTEVEKSB7CiAJCWxwNTUyMV9zZXRfZW5naW5lX21vZGUoZW5naW5lLCBMUDU1MjFfQ01EX0RJU0FCTEVEKTsKIAl9CiAKLQkvKiByZW1vdmUgbG9hZCBhdHRyaWJ1dGUgZnJvbSBzeXNmcyBpZiBub3QgaW4gbG9hZCBtb2RlICovCi0JaWYgKGVuZ2luZS0+bW9kZSA9PSBMUDU1MjFfQ01EX0xPQUQgJiYgbW9kZSAhPSBMUDU1MjFfQ01EX0xPQUQpCi0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCBlbmdpbmUtPmF0dHJpYnV0ZXMpOwotCiAJZW5naW5lLT5tb2RlID0gbW9kZTsKIAogCXJldHVybiByZXQ7CkBAIC0zNzMsNiArMzU4LDggQEAKIAl3aGlsZSAoKG9mZnNldCA8IGxlbiAtIDEpICYmIChpIDwgTFA1NTIxX1BST0dSQU1fTEVOR1RIKSkgewogCQkvKiBzZXBhcmF0ZSBzc2NhbmZzIGJlY2F1c2UgbGVuZ3RoIGlzIHdvcmtpbmcgb25seSBmb3IgJXMgKi8KIAkJcmV0ID0gc3NjYW5mKGJ1ZiArIG9mZnNldCwgIiUycyVuICIsIGMsICZucmNoYXJzKTsKKwkJaWYgKHJldCAhPSAyKQorCQkJZ290byBmYWlsOwogCQlyZXQgPSBzc2NhbmYoYywgIiUyeCIsICZjbWQpOwogCQlpZiAocmV0ICE9IDEpCiAJCQlnb3RvIGZhaWw7CkBAIC0zODcsNyArMzc0LDEwIEBACiAJCWdvdG8gZmFpbDsKIAogCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOwotCXJldCA9IGxwNTUyMV9sb2FkX3Byb2dyYW0oZW5naW5lLCBwYXR0ZXJuKTsKKwlpZiAoZW5naW5lLT5tb2RlID09IExQNTUyMV9DTURfTE9BRCkKKwkJcmV0ID0gbHA1NTIxX2xvYWRfcHJvZ3JhbShlbmdpbmUsIHBhdHRlcm4pOworCWVsc2UKKwkJcmV0ID0gLUVJTlZBTDsKIAltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOwogCiAJaWYgKHJldCkgewpAQCAtNTc0LDIwICs1NjQsOCBAQAogCSZkZXZfYXR0cl9lbmdpbmUyX21vZGUuYXR0ciwKIAkmZGV2X2F0dHJfZW5naW5lM19tb2RlLmF0dHIsCiAJJmRldl9hdHRyX3NlbGZ0ZXN0LmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxwNTUyMV9lbmdpbmUxX2F0dHJpYnV0ZXNbXSA9IHsKIAkmZGV2X2F0dHJfZW5naW5lMV9sb2FkLmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxwNTUyMV9lbmdpbmUyX2F0dHJpYnV0ZXNbXSA9IHsKIAkmZGV2X2F0dHJfZW5naW5lMl9sb2FkLmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxwNTUyMV9lbmdpbmUzX2F0dHJpYnV0ZXNbXSA9IHsKIAkmZGV2X2F0dHJfZW5naW5lM19sb2FkLmF0dHIsCiAJTlVMTAogfTsKQEAgLTU5NiwxMiArNTc0LDYgQEAKIAkuYXR0cnMgPSBscDU1MjFfYXR0cmlidXRlcywKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxwNTUyMV9lbmdpbmVfZ3JvdXBbXSA9IHsKLQl7LmF0dHJzID0gbHA1NTIxX2VuZ2luZTFfYXR0cmlidXRlcyB9LAotCXsuYXR0cnMgPSBscDU1MjFfZW5naW5lMl9hdHRyaWJ1dGVzIH0sCi0Jey5hdHRycyA9IGxwNTUyMV9lbmdpbmUzX2F0dHJpYnV0ZXMgfSwKLX07Ci0KIHN0YXRpYyBpbnQgbHA1NTIxX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2OwpAQCAtNjE2LDEyICs1ODgsNiBAQAogCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZscDU1MjFfZ3JvdXApOwogCi0JZm9yIChpID0gMDsgaSA8ICBBUlJBWV9TSVpFKGNoaXAtPmVuZ2luZXMpOyBpKyspIHsKLQkJaWYgKGNoaXAtPmVuZ2luZXNbaV0ubW9kZSA9PSBMUDU1MjFfQ01EX0xPQUQpCi0JCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwKLQkJCQkJY2hpcC0+ZW5naW5lc1tpXS5hdHRyaWJ1dGVzKTsKLQl9Ci0KIAlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+bnVtX2xlZHM7IGkrKykKIAkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjaGlwLT5sZWRzW2ldLmNkZXYuZGV2LT5rb2JqLAogCQkJCSZscDU1MjFfbGVkX2F0dHJpYnV0ZV9ncm91cCk7CkBAIC02NTEsNyArNjE3LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6Y2hhbm5lbCVkIiwgY2xpZW50LT5uYW1lLCBjaGFuKTsKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlczpjaGFubmVsJWQiLAorCQkJcGRhdGEtPmxhYmVsID86IGNsaWVudC0+bmFtZSwgY2hhbik7CiAJbGVkLT5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gbHA1NTIxX3NldF9icmlnaHRuZXNzOwogCWxlZC0+Y2Rldi5uYW1lID0gbmFtZTsKIAlyZXMgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoZGV2LCAmbGVkLT5jZGV2KTsKQEAgLTcyMyw3ICs2OTAsNyBAQAogCiAJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiJXMgcHJvZ3JhbW1hYmxlIGxlZCBjaGlwIGZvdW5kXG4iLCBpZC0+bmFtZSk7CiAKLQlyZXQgPSBscDU1MjFfY29uZmlndXJlKGNsaWVudCwgbHA1NTIxX2VuZ2luZV9ncm91cCk7CisJcmV0ID0gbHA1NTIxX2NvbmZpZ3VyZShjbGllbnQpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZXJyb3IgY29uZmlndXJpbmcgY2hpcFxuIik7CiAJCWdvdG8gZmFpbDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1scDU1MjMuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWxwNTUyMy5jCmluZGV4IDBjYzRlYWQuLmQwYzQwNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWxwNTUyMy5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWxwNTUyMy5jCkBAIC0xMDUsNyArMTA1LDYgQEAKICNkZWZpbmUgU0hJRlRfTUFTSyhpZCkJCQkoKChpZCkgLSAxKSAqIDIpCiAKIHN0cnVjdCBscDU1MjNfZW5naW5lIHsKLQljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICphdHRyaWJ1dGVzOwogCWludAkJaWQ7CiAJdTgJCW1vZGU7CiAJdTgJCXByb2dfcGFnZTsKQEAgLTQwMywxNCArNDAyLDIzIEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgbHA1NTIzX2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAl1MTYgbXV4ID0gMDsKKwlzc2l6ZV90IHJldDsKIAogCWlmIChscDU1MjNfbXV4X3BhcnNlKGJ1ZiwgJm11eCwgbGVuKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAobHA1NTIzX2xvYWRfbXV4KCZjaGlwLT5lbmdpbmVzW25yIC0gMV0sIG11eCkpCi0JCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOworCXJldCA9IC1FSU5WQUw7CisJaWYgKGNoaXAtPmVuZ2luZXNbbnIgLSAxXS5tb2RlICE9IExQNTUyM19DTURfTE9BRCkKKwkJZ290byBsZWF2ZTsKIAotCXJldHVybiBsZW47CisJaWYgKGxwNTUyM19sb2FkX211eCgmY2hpcC0+ZW5naW5lc1tuciAtIDFdLCBtdXgpKQorCQlnb3RvIGxlYXZlOworCisJcmV0ID0gbGVuOworbGVhdmU6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiAjZGVmaW5lIHN0b3JlX2xlZHMobnIpCQkJCQkJXApAQCAtNTU2LDcgKzU2NCwxMSBAQAogCiAJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7CiAKLQlyZXQgPSBscDU1MjNfbG9hZF9wcm9ncmFtKGVuZ2luZSwgcGF0dGVybik7CisJaWYgKGVuZ2luZS0+bW9kZSA9PSBMUDU1MjNfQ01EX0xPQUQpCisJCXJldCA9IGxwNTUyM19sb2FkX3Byb2dyYW0oZW5naW5lLCBwYXR0ZXJuKTsKKwllbHNlCisJCXJldCA9IC1FSU5WQUw7CisKIAltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOwogCiAJaWYgKHJldCkgewpAQCAtNzM3LDM3ICs3NDksMTggQEAKIAkmZGV2X2F0dHJfZW5naW5lMl9tb2RlLmF0dHIsCiAJJmRldl9hdHRyX2VuZ2luZTNfbW9kZS5hdHRyLAogCSZkZXZfYXR0cl9zZWxmdGVzdC5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpscDU1MjNfZW5naW5lMV9hdHRyaWJ1dGVzW10gPSB7CiAJJmRldl9hdHRyX2VuZ2luZTFfbG9hZC5hdHRyLAogCSZkZXZfYXR0cl9lbmdpbmUxX2xlZHMuYXR0ciwKLQlOVUxMCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHA1NTIzX2VuZ2luZTJfYXR0cmlidXRlc1tdID0gewogCSZkZXZfYXR0cl9lbmdpbmUyX2xvYWQuYXR0ciwKIAkmZGV2X2F0dHJfZW5naW5lMl9sZWRzLmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxwNTUyM19lbmdpbmUzX2F0dHJpYnV0ZXNbXSA9IHsKIAkmZGV2X2F0dHJfZW5naW5lM19sb2FkLmF0dHIsCiAJJmRldl9hdHRyX2VuZ2luZTNfbGVkcy5hdHRyLAotCU5VTEwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxwNTUyM19ncm91cCA9IHsKIAkuYXR0cnMgPSBscDU1MjNfYXR0cmlidXRlcywKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxwNTUyM19lbmdpbmVfZ3JvdXBbXSA9IHsKLQl7LmF0dHJzID0gbHA1NTIzX2VuZ2luZTFfYXR0cmlidXRlcyB9LAotCXsuYXR0cnMgPSBscDU1MjNfZW5naW5lMl9hdHRyaWJ1dGVzIH0sCi0Jey5hdHRycyA9IGxwNTUyM19lbmdpbmUzX2F0dHJpYnV0ZXMgfSwKLX07Ci0KIHN0YXRpYyBpbnQgbHA1NTIzX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2OwpAQCAtNzg4LDEwICs3ODEsNiBAQAogCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZscDU1MjNfZ3JvdXApOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hpcC0+ZW5naW5lcyk7IGkrKykKLQkJaWYgKGNoaXAtPmVuZ2luZXNbaV0ubW9kZSA9PSBMUDU1MjNfQ01EX0xPQUQpCi0JCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmxwNTUyM19lbmdpbmVfZ3JvdXBbaV0pOwotCiAJZm9yIChpID0gMDsgaSA8IGNoaXAtPm51bV9sZWRzOyBpKyspCiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2hpcC0+bGVkc1tpXS5jZGV2LmRldi0+a29iaiwKIAkJCQkmbHA1NTIzX2xlZF9hdHRyaWJ1dGVfZ3JvdXApOwpAQCAtODAyLDEwICs3OTEsNiBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IGxwNTUyM19zZXRfbW9kZShzdHJ1Y3QgbHA1NTIzX2VuZ2luZSAqZW5naW5lLCB1OCBtb2RlKQogewotCS8qICBlbmdpbmUgdG8gY2hpcCAqLwotCXN0cnVjdCBscDU1MjNfY2hpcCAqY2hpcCA9IGVuZ2luZV90b19scDU1MjMoZW5naW5lKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY2hpcC0+Y2xpZW50OwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKIAlpbnQgcmV0ID0gMDsKIAogCS8qIGlmIGluIHRoYXQgbW9kZSBhbHJlYWR5IGRvIG5vdGhpbmcsIGV4Y2VwdCBmb3IgcnVuICovCkBAIC04MTcsMTggKzgwMiwxMCBAQAogCX0gZWxzZSBpZiAobW9kZSA9PSBMUDU1MjNfQ01EX0xPQUQpIHsKIAkJbHA1NTIzX3NldF9lbmdpbmVfbW9kZShlbmdpbmUsIExQNTUyM19DTURfRElTQUJMRUQpOwogCQlscDU1MjNfc2V0X2VuZ2luZV9tb2RlKGVuZ2luZSwgTFA1NTIzX0NNRF9MT0FEKTsKLQotCQlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgZW5naW5lLT5hdHRyaWJ1dGVzKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CiAJfSBlbHNlIGlmIChtb2RlID09IExQNTUyM19DTURfRElTQUJMRUQpIHsKIAkJbHA1NTIzX3NldF9lbmdpbmVfbW9kZShlbmdpbmUsIExQNTUyM19DTURfRElTQUJMRUQpOwogCX0KIAotCS8qIHJlbW92ZSBsb2FkIGF0dHJpYnV0ZSBmcm9tIHN5c2ZzIGlmIG5vdCBpbiBsb2FkIG1vZGUgKi8KLQlpZiAoZW5naW5lLT5tb2RlID09IExQNTUyM19DTURfTE9BRCAmJiBtb2RlICE9IExQNTUyM19DTURfTE9BRCkKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosIGVuZ2luZS0+YXR0cmlidXRlcyk7Ci0KIAllbmdpbmUtPm1vZGUgPSBtb2RlOwogCiAJcmV0dXJuIHJldDsKQEAgLTg0NSw3ICs4MjIsNiBAQAogCWVuZ2luZS0+ZW5naW5lX21hc2sgPSBMUDU1MjNfRU5HX01BU0tfQkFTRSA+PiBTSElGVF9NQVNLKGlkKTsKIAllbmdpbmUtPnByb2dfcGFnZSA9IGlkIC0gMTsKIAllbmdpbmUtPm11eF9wYWdlID0gaWQgKyAyOwotCWVuZ2luZS0+YXR0cmlidXRlcyA9ICZscDU1MjNfZW5naW5lX2dyb3VwW2lkIC0gMV07CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg3MCw3ICs4NDYsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlzbnByaW50ZihuYW1lLCAzMiwgImxwNTUyMzpjaGFubmVsJWQiLCBjaGFuKTsKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6Y2hhbm5lbCVkIiwKKwkJCXBkYXRhLT5sYWJlbCA/OiAibHA1NTIzIiwgY2hhbik7CiAKIAkJbGVkLT5jZGV2Lm5hbWUgPSBuYW1lOwogCQlsZWQtPmNkZXYuYnJpZ2h0bmVzc19zZXQgPSBscDU1MjNfc2V0X2JyaWdodG5lc3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMKaW5kZXggNDNkMDg3NS4uYWZhYzMzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtcGNhOTUzMi5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXBjYTk1MzIuYwpAQCAtMjAwLDYgKzIwMCwzMiBAQAogCXBjYTk1MzJfc2V0bGVkKGxlZCk7CiB9CiAKK3N0YXRpYyB2b2lkIHBjYTk1MzJfZGVzdHJveV9kZXZpY2VzKHN0cnVjdCBwY2E5NTMyX2RhdGEgKmRhdGEsIGludCBuX2RldnMpCit7CisJaW50IGkgPSBuX2RldnM7CisKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCXdoaWxlICgtLWkgPj0gMCkgeworCQlzd2l0Y2ggKGRhdGEtPmxlZHNbaV0udHlwZSkgeworCQljYXNlIFBDQTk1MzJfVFlQRV9OT05FOgorCQkJYnJlYWs7CisJCWNhc2UgUENBOTUzMl9UWVBFX0xFRDoKKwkJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZkYXRhLT5sZWRzW2ldLmxkZXYpOworCQkJY2FuY2VsX3dvcmtfc3luYygmZGF0YS0+bGVkc1tpXS53b3JrKTsKKwkJCWJyZWFrOworCQljYXNlIFBDQTk1MzJfVFlQRV9OMjEwMF9CRUVQOgorCQkJaWYgKGRhdGEtPmlkZXYgIT0gTlVMTCkgeworCQkJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmlkZXYpOworCQkJCWNhbmNlbF93b3JrX3N5bmMoJmRhdGEtPndvcmspOworCQkJCWRhdGEtPmlkZXYgPSBOVUxMOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBpbnQgcGNhOTUzMl9jb25maWd1cmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAlzdHJ1Y3QgcGNhOTUzMl9kYXRhICpkYXRhLCBzdHJ1Y3QgcGNhOTUzMl9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKIHsKQEAgLTI3NCwyNSArMzAwLDcgQEAKIAlyZXR1cm4gMDsKIAogZXhpdDoKLQlpZiAoaSA+IDApCi0JCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IGktLSkKLQkJCXN3aXRjaCAoZGF0YS0+bGVkc1tpXS50eXBlKSB7Ci0JCQljYXNlIFBDQTk1MzJfVFlQRV9OT05FOgotCQkJCWJyZWFrOwotCQkJY2FzZSBQQ0E5NTMyX1RZUEVfTEVEOgotCQkJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZkYXRhLT5sZWRzW2ldLmxkZXYpOwotCQkJCWNhbmNlbF93b3JrX3N5bmMoJmRhdGEtPmxlZHNbaV0ud29yayk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFBDQTk1MzJfVFlQRV9OMjEwMF9CRUVQOgotCQkJCWlmIChkYXRhLT5pZGV2ICE9IE5VTEwpIHsKLQkJCQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZGF0YS0+aWRldik7Ci0JCQkJCWlucHV0X2ZyZWVfZGV2aWNlKGRhdGEtPmlkZXYpOwotCQkJCQljYW5jZWxfd29ya19zeW5jKCZkYXRhLT53b3JrKTsKLQkJCQkJZGF0YS0+aWRldiA9IE5VTEw7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCisJcGNhOTUzMl9kZXN0cm95X2RldmljZXMoZGF0YSwgaSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzI5LDI1ICszMzcsNyBAQAogc3RhdGljIGludCBwY2E5NTMyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBwY2E5NTMyX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJc3dpdGNoIChkYXRhLT5sZWRzW2ldLnR5cGUpIHsKLQkJY2FzZSBQQ0E5NTMyX1RZUEVfTk9ORToKLQkJCWJyZWFrOwotCQljYXNlIFBDQTk1MzJfVFlQRV9MRUQ6Ci0JCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmZGF0YS0+bGVkc1tpXS5sZGV2KTsKLQkJCWNhbmNlbF93b3JrX3N5bmMoJmRhdGEtPmxlZHNbaV0ud29yayk7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0E5NTMyX1RZUEVfTjIxMDBfQkVFUDoKLQkJCWlmIChkYXRhLT5pZGV2ICE9IE5VTEwpIHsKLQkJCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkYXRhLT5pZGV2KTsKLQkJCQlpbnB1dF9mcmVlX2RldmljZShkYXRhLT5pZGV2KTsKLQkJCQljYW5jZWxfd29ya19zeW5jKCZkYXRhLT53b3JrKTsKLQkJCQlkYXRhLT5pZGV2ID0gTlVMTDsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0KKwlwY2E5NTMyX2Rlc3Ryb3lfZGV2aWNlcyhkYXRhLCAxNik7CiAJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkdHJpZy1iYWNrbGlnaHQuYyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWJhY2tsaWdodC5jCmluZGV4IGY5NDhlNTcuLjJiNTEzYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWJhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWJhY2tsaWdodC5jCkBAIC0yNiw2ICsyNiw3IEBACiAJaW50IGJyaWdodG5lc3M7CiAJaW50IG9sZF9zdGF0dXM7CiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5vdGlmaWVyOworCXVuc2lnbmVkIGludmVydDsKIH07CiAKIHN0YXRpYyBpbnQgZmJfbm90aWZpZXJfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpwLApAQCAtMzYsMjMgKzM3LDY0IEBACiAJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkID0gbi0+bGVkOwogCXN0cnVjdCBmYl9ldmVudCAqZmJfZXZlbnQgPSBkYXRhOwogCWludCAqYmxhbmsgPSBmYl9ldmVudC0+ZGF0YTsKKwlpbnQgbmV3X3N0YXR1cyA9ICpibGFuayA/IEJMQU5LIDogVU5CTEFOSzsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEZCX0VWRU5UX0JMQU5LIDoKLQkJaWYgKCpibGFuayAmJiBuLT5vbGRfc3RhdHVzID09IFVOQkxBTkspIHsKKwkJaWYgKG5ld19zdGF0dXMgPT0gbi0+b2xkX3N0YXR1cykKKwkJCWJyZWFrOworCisJCWlmICgobi0+b2xkX3N0YXR1cyA9PSBVTkJMQU5LKSBeIG4tPmludmVydCkgewogCQkJbi0+YnJpZ2h0bmVzcyA9IGxlZC0+YnJpZ2h0bmVzczsKIAkJCWxlZF9zZXRfYnJpZ2h0bmVzcyhsZWQsIExFRF9PRkYpOwotCQkJbi0+b2xkX3N0YXR1cyA9IEJMQU5LOwotCQl9IGVsc2UgaWYgKCEqYmxhbmsgJiYgbi0+b2xkX3N0YXR1cyA9PSBCTEFOSykgeworCQl9IGVsc2UgewogCQkJbGVkX3NldF9icmlnaHRuZXNzKGxlZCwgbi0+YnJpZ2h0bmVzcyk7Ci0JCQluLT5vbGRfc3RhdHVzID0gVU5CTEFOSzsKIAkJfQorCisJCW4tPm9sZF9zdGF0dXMgPSBuZXdfc3RhdHVzOworCiAJCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3NpemVfdCBibF90cmlnX2ludmVydF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYmxfdHJpZ19ub3RpZmllciAqbiA9IGxlZC0+dHJpZ2dlcl9kYXRhOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIG4tPmludmVydCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJsX3RyaWdfaW52ZXJ0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG51bSkKK3sKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYmxfdHJpZ19ub3RpZmllciAqbiA9IGxlZC0+dHJpZ2dlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgaW52ZXJ0OworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmaW52ZXJ0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChpbnZlcnQgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW4tPmludmVydCA9IGludmVydDsKKworCS8qIEFmdGVyIGludmVydGluZywgd2UgbmVlZCB0byB1cGRhdGUgdGhlIExFRC4gKi8KKwlpZiAoKG4tPm9sZF9zdGF0dXMgPT0gQkxBTkspIF4gbi0+aW52ZXJ0KQorCQlsZWRfc2V0X2JyaWdodG5lc3MobGVkLCBMRURfT0ZGKTsKKwllbHNlCisJCWxlZF9zZXRfYnJpZ2h0bmVzcyhsZWQsIG4tPmJyaWdodG5lc3MpOworCisJcmV0dXJuIG51bTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihpbnZlcnRlZCwgMDY0NCwgYmxfdHJpZ19pbnZlcnRfc2hvdywgYmxfdHJpZ19pbnZlcnRfc3RvcmUpOworCiBzdGF0aWMgdm9pZCBibF90cmlnX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZCkKIHsKIAlpbnQgcmV0OwpAQCAtNjYsNiArMTA4LDEwIEBACiAJCXJldHVybjsKIAl9CiAKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUobGVkLT5kZXYsICZkZXZfYXR0cl9pbnZlcnRlZCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaW52ZXJ0OworCiAJbi0+bGVkID0gbGVkOwogCW4tPmJyaWdodG5lc3MgPSBsZWQtPmJyaWdodG5lc3M7CiAJbi0+b2xkX3N0YXR1cyA9IFVOQkxBTks7CkBAIC03NCw2ICsxMjAsMTIgQEAKIAlyZXQgPSBmYl9yZWdpc3Rlcl9jbGllbnQoJm4tPm5vdGlmaWVyKTsKIAlpZiAocmV0KQogCQlkZXZfZXJyKGxlZC0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIGJhY2tsaWdodCB0cmlnZ2VyXG4iKTsKKworCXJldHVybjsKKworZXJyX2ludmVydDoKKwlsZWQtPnRyaWdnZXJfZGF0YSA9IE5VTEw7CisJa2ZyZWUobik7CiB9CiAKIHN0YXRpYyB2b2lkIGJsX3RyaWdfZGVhY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQpCkBAIC04Miw2ICsxMzQsNyBAQAogCQkoc3RydWN0IGJsX3RyaWdfbm90aWZpZXIgKikgbGVkLT50cmlnZ2VyX2RhdGE7CiAKIAlpZiAobikgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUobGVkLT5kZXYsICZkZXZfYXR0cl9pbnZlcnRlZCk7CiAJCWZiX3VucmVnaXN0ZXJfY2xpZW50KCZuLT5ub3RpZmllcik7CiAJCWtmcmVlKG4pOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvX2FzaWMuYyBiL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvX2FzaWMuYwppbmRleCBiNmU3ZGRjLi40ZGFmOWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19hc2ljLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fYXNpYy5jCkBAIC0zODcsMTEgKzM4NywxMCBAQAogCS8qIFNldCB0aGUgRE1BIG9wcyB0byB0aGUgb25lcyBmcm9tIHRoZSBQQ0kgZGV2aWNlLCB0aGlzIGNvdWxkIGJlCiAJICogZmlzaHkgaWYgd2UgZGlkbid0IGtub3cgdGhhdCBvbiBQb3dlck1hYyBpdCdzIGFsd2F5cyBkaXJlY3Qgb3BzCiAJICogb3IgaW9tbXUgb3BzIHRoYXQgd2lsbCB3b3JrIGZpbmUKKwkgKgorCSAqIFRvIGdldCBhbGwgdGhlIGZpZWxkcywgY29weSBhbGwgYXJjaGRhdGEKIAkgKi8KLQlkZXYtPm9mZGV2LmRldi5hcmNoZGF0YS5kbWFfb3BzID0KLQkJY2hpcC0+bGJ1cy5wZGV2LT5kZXYuYXJjaGRhdGEuZG1hX29wczsKLQlkZXYtPm9mZGV2LmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9Ci0JCWNoaXAtPmxidXMucGRldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhOworCWRldi0+b2ZkZXYuZGV2LmFyY2hkYXRhID0gY2hpcC0+bGJ1cy5wZGV2LT5kZXYuYXJjaGRhdGE7CiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiAjaWZkZWYgREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwppbmRleCA0NDU0OTI3Li4yZTA0MWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCkBAIC0yMjEzLDYgKzIyMTMsOSBAQAogc3RhdGljIGludCBmY3Vfb2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSogZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdGF0ZSA9IHN0YXRlX2RldGFjaGVkOworCW9mX2RldiA9IGRldjsKKworCWRldl9pbmZvKCZkZXYtPmRldiwgIlBvd2VyTWFjIEc1IFRoZXJtYWwgY29udHJvbCBkcml2ZXIgJXNcbiIsIFZFUlNJT04pOwogCiAJLyogTG9va3VwIHRoZSBmYW5zIGluIHRoZSBkZXZpY2UgdHJlZSAqLwogCWZjdV9sb29rdXBfZmFucyhkZXYtPmRldi5vZl9ub2RlKTsKQEAgLTIyMzUsNiArMjIzOCw3IEBACiAJfSwKIAl7fSwKIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmY3VfbWF0Y2gpOwogCiBzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBmY3Vfb2ZfcGxhdGZvcm1fZHJpdmVyID0gCiB7CkBAIC0yMjUyLDggKzIyNTYsNiBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCB0aGVybV9wbTcyX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCiAJcmFja21hYyA9IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpOwogCiAJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgJiYKQEAgLTIyNjEsMzQgKzIyNjMsMTIgQEAKIAkgICAgIXJhY2ttYWMpCiAJICAgIAlyZXR1cm4gLUVOT0RFVjsKIAotCXByaW50ayhLRVJOX0lORk8gIlBvd2VyTWFjIEc1IFRoZXJtYWwgY29udHJvbCBkcml2ZXIgJXNcbiIsIFZFUlNJT04pOwotCi0JbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiZmN1Iik7Ci0JaWYgKG5wID09IE5VTEwpIHsKLQkJLyogU29tZSBtYWNoaW5lcyBoYXZlIHN0cmFuZ2VseSBicm9rZW4gZGV2aWNlLXRyZWUgKi8KLQkJbnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3UzQDAsZjgwMDAwMDAvaTJjQGY4MDAxMDAwL2ZhbkAxNWUiKTsKLQkJaWYgKG5wID09IE5VTEwpIHsKLQkJCSAgICBwcmludGsoS0VSTl9FUlIgIkNhbid0IGZpbmQgRkNVIGluIGRldmljZS10cmVlICFcbiIpOwotCQkJICAgIHJldHVybiAtRU5PREVWOwotCQl9Ci0JfQotCW9mX2RldiA9IG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobnAsICJ0ZW1wZXJhdHVyZSIsIE5VTEwpOwotCWlmIChvZl9kZXYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHJlZ2lzdGVyIEZDVSBwbGF0Zm9ybSBkZXZpY2UgIVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCW9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZmN1X29mX3BsYXRmb3JtX2RyaXZlcik7Ci0JCi0JcmV0dXJuIDA7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZmN1X29mX3BsYXRmb3JtX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB0aGVybV9wbTcyX2V4aXQodm9pZCkKIHsKIAlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZmN1X29mX3BsYXRmb3JtX2RyaXZlcik7Ci0KLQlpZiAob2ZfZGV2KQotCQlvZl9kZXZpY2VfdW5yZWdpc3RlcihvZl9kZXYpOwogfQogCiBtb2R1bGVfaW5pdCh0aGVybV9wbTcyX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMKaW5kZXggMWNlYzAyZi4uYWRlMWU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jCkBAIC0xNSw3ICsxNSw3IEBACiAKICNkZWZpbmUgTUFYX1BNVV9MRVZFTCAweEZGCiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBwbXVfYmFja2xpZ2h0X2RhdGE7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgcG11X2JhY2tsaWdodF9kYXRhOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwbXVfYmFja2xpZ2h0X2xvY2spOwogc3RhdGljIGludCBzbGVlcGluZywgdXNlc19wbXVfYmw7CiBzdGF0aWMgdTggYmxfY3VydmVbRkJfQkFDS0xJR0hUX0xFVkVMU107CkBAIC0xMTUsNyArMTE1LDcgQEAKIAlyZXR1cm4gYmQtPnByb3BzLmJyaWdodG5lc3M7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBwbXVfYmFja2xpZ2h0X2RhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgcG11X2JhY2tsaWdodF9kYXRhID0gewogCS5nZXRfYnJpZ2h0bmVzcwk9IHBtdV9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3MsCiAJLnVwZGF0ZV9zdGF0dXMJPSBwbXVfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwppbmRleCBjZDI5YzgyLi44YjAyMWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCkBAIC0yMjU3LDcgKzIyNTcsNyBAQAogCQkmJiAocG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfU0xFRVBfU1RBVEUsIE5VTEwsIDAsIC0xKSA+PSAwKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBwbXVfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBwbXVfcG1fb3BzID0gewogCS5lbnRlciA9IHBvd2VyYm9va19zbGVlcCwKIAkudmFsaWQgPSBwbXVfc2xlZXBfdmFsaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmgKaW5kZXggMmMwMDk4MC4uN2U0MDAzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oCkBAIC0xNzcsNyArMTc3LDcgQEAKICAgIElOWzBdIC0gVGFzayBoYW5kbGUuCiAgICBJTlsxXSAtIGx1bWEgdHlwZTogMCA9IGRpc2FibGUsIDEgPSAxRCBob3Jpem9udGFsIG9ubHksIDIgPSAxRCB2ZXJ0aWNhbCBvbmx5LAogCQkgICAgICAzID0gMkQgSC9WIHNlcGFyYWJsZSwgNCA9IDJEIHN5bW1ldHJpYyBub24tc2VwYXJhYmxlCi0gICBJTlsyXSAtIGNocm9tYSB0eXBlOiAwIC0gZGlhYmxlLCAxID0gMUQgaG9yaXpvbnRhbAorICAgSU5bMl0gLSBjaHJvbWEgdHlwZTogMCAtIGRpc2FibGUsIDEgPSAxRCBob3Jpem9udGFsCiAgICBSZXR1cm5Db2RlIC0gT25lIG9mIHRoZSBFUlJfQ0FQVFVSRV8uLi4gKi8KICNkZWZpbmUgQ1gxOF9DUFVfU0VUX1NQQVRJQUxfRklMVEVSX1RZUEUgICAgIAkoQ1BVX0NNRF9NQVNLX0NBUFRVUkUgfCAweDAwMEMpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWlyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1pci5jCmluZGV4IDYyNzkyNmYuLjdlYjc5YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWlyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtaXIuYwpAQCAtMjYxLDcgKzI2MSw3IEBACiAJdTMyIHJlbTsKIAogCS8qCi0JICogVGhlIDIgbHNiJ3Mgb2YgdGhlIHB1bHNlIHdpZHRoIHRpbWVyIGNvdW50IGFyZSBub3QgYWNjZXNzYWJsZSwgaGVuY2UKKwkgKiBUaGUgMiBsc2IncyBvZiB0aGUgcHVsc2Ugd2lkdGggdGltZXIgY291bnQgYXJlIG5vdCBhY2Nlc3NpYmxlLCBoZW5jZQogCSAqIHRoZSAoMSA8PCAyKQogCSAqLwogCW4gPSAoKHU2NCkgbnMpICogQ1gyNTg0MF9JUl9SRUZDTEtfRlJFUSAvIDEwMDAwMDA7IC8qIG1pbGxpY3ljbGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWYuaAppbmRleCAxODg4NDFiLi5lYmQ1YzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmLmgKQEAgLTMzLDcgKzMzLDcgQEAKICNkZWZpbmUgcmVncihyZWcpICAgICAgICAgICAgICAgcmVhZGwoKHJlZykgKyB2cGlmX2Jhc2UpCiAjZGVmaW5lIHJlZ3codmFsdWUsIHJlZykgICAgICAgIHdyaXRlbCh2YWx1ZSwgKHJlZyArIHZwaWZfYmFzZSkpCiAKLS8qIFJlZ2lzdGVyIEFkZHJlc3NzIE9mZnNldHMgKi8KKy8qIFJlZ2lzdGVyIEFkZHJlc3MgT2Zmc2V0cyAqLwogI2RlZmluZSBWUElGX1BJRAkJCSgweDAwMDApCiAjZGVmaW5lIFZQSUZfQ0gwX0NUUkwJCQkoMHgwMDA0KQogI2RlZmluZSBWUElGX0NIMV9DVFJMCQkJKDB4MDAwOCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cHNzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBzcy5jCmluZGV4IDc5MTg2ODAuLjNlNWNmMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cHNzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3Zwc3MuYwpAQCAtODUsNyArODUsNyBAQAogLyoKICAqIHZwc3Mgb3BlcmF0aW9ucy4gRGVwZW5kcyBvbiBwbGF0Zm9ybS4gTm90IGFsbCBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZQogICogb24gYWxsIHBsYXRmb3Jtcy4gVGhlIGFwaSwgZmlyc3QgY2hlY2sgaWYgYSBmdW5jdGlvIGlzIGF2YWlsYWJsZSBiZWZvcmUKLSAqIGludm9raW5nIGl0LiBJbiB0aGUgcHJvYmUsIHRoZSBmdW5jdGlvbiBwdHJzIGFyZSBpbnRpYWxpemVkIGJhc2VkIG9uCisgKiBpbnZva2luZyBpdC4gSW4gdGhlIHByb2JlLCB0aGUgZnVuY3Rpb24gcHRycyBhcmUgaW5pdGlhbGl6ZWQgYmFzZWQgb24KICAqIHZwc3MgbmFtZS4gdnBzcyBuYW1lIGNhbiBiZSAiZG0zNTVfdnBzcyIsICJkbTY0NHhfdnBzcyIgZXRjLgogICovCiBzdHJ1Y3QgdnBzc19od19vcHMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dC5jCmluZGV4IDgzZGU5N2EuLjAyOWE0YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0LmMKQEAgLTEyODYsNyArMTI4Niw3IEBACiAJdmlkZW9idWZfbW1hcF9mcmVlKHEpOwogCiAJLyogRXZlbiBpZiBhcHBseSBjaGFuZ2VzIGZhaWxzIHdlIHNob3VsZCBjb250aW51ZQotCSAgIGZyZWVpbmcgYWxsb2NhdGVkIG1lbWVvcnkgKi8KKwkgICBmcmVlaW5nIGFsbG9jYXRlZCBtZW1vcnkgKi8KIAlpZiAodm91dC0+c3RyZWFtaW5nKSB7CiAJCXUzMiBtYXNrID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY29yZS5jCmluZGV4IGQ2YmYzZjguLjU4YWY2N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jb3JlLmMKQEAgLTY1NSw4ICs2NTUsOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQkvKiBDaGVjayB0aGF0IHRoZSBoYXJkd2FyZSBpcyBhY2Nlc3NhYmxlLiBJZiB0aGUgc3RhdHVzIGJ5dGVzIGFyZQotCSAqIDB4RkYgdGhlbiB0aGUgZGV2aWNlIGlzIG5vdCBhY2Nlc3NhYmxlLCB0aGUgdGhlIElSUSBiZWxvbmdzCisJLyogQ2hlY2sgdGhhdCB0aGUgaGFyZHdhcmUgaXMgYWNjZXNzaWJsZS4gSWYgdGhlIHN0YXR1cyBieXRlcyBhcmUKKwkgKiAweEZGIHRoZW4gdGhlIGRldmljZSBpcyBub3QgYWNjZXNzaWJsZSwgdGhlIHRoZSBJUlEgYmVsb25ncwogCSAqIHRvIGFub3RoZXIgZHJpdmVyLgogCSAqIDQgeCB1MzIgaW50ZXJydXB0IHJlZ2lzdGVycy4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3NlbnNvci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmgKaW5kZXggNDk0OTU3Yi4uN2YzODU0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmgKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCiBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgewogCWNoYXIgbmFtZVszMl0sIC8qIHNlbnNvciBuYW1lICovCi0JICAgICBtYWludGFpbmVyWzY0XTsgLyogbmFtZSBvZiB0aGUgbWFudGFpbmVyIDxlbWFpbD4gKi8KKwkgICAgIG1haW50YWluZXJbNjRdOyAvKiBuYW1lIG9mIHRoZSBtYWludGFpbmVyIDxlbWFpbD4gKi8KIAogCWVudW0gc245YzEwMl9icmlkZ2Ugc3VwcG9ydGVkX2JyaWRnZTsgLyogc3VwcG9ydGVkIFNOOUMxeHggYnJpZGdlcyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDcwMDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNzAwMi5jCmluZGV4IGU2M2I0MGYuLmM3OTllNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNzAwMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNzAwMi5jCkBAIC03ODksNyArNzg5LDcgQEAKICAqIEdldCB0aGUgdmFsdWUgb2YgYSBUVlA3MDAyIGRlY29kZXIgZGV2aWNlIHJlZ2lzdGVyLgogICogUmV0dXJucyB6ZXJvIHdoZW4gc3VjY2Vzc2Z1bCwgLUVJTlZBTCBpZiByZWdpc3RlciByZWFkIGZhaWxzIG9yCiAgKiBhY2Nlc3MgdG8gSTJDIGNsaWVudCBmYWlscywgLUVQRVJNIGlmIHRoZSBjYWxsIGlzIG5vdCBhbGxvd2VkCi0gKiBieSBkaWFibGVkIENBUF9TWVNfQURNSU4uCisgKiBieSBkaXNhYmxlZCBDQVBfU1lTX0FETUlOLgogICovCiBzdGF0aWMgaW50IHR2cDcwMDJfZ19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkJCQkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpYS1jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlhLWNhbWVyYS5jCmluZGV4IGUyNWFjYTUuLjJmOTczY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlhLWNhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlhLWNhbWVyYS5jCkBAIC0xMywxNCArMTMsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLXNnLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvc19wYXJhbXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tZW1zdGljay5jIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21lbXN0aWNrLmMKaW5kZXggYzAwZmU4Mi4uZTlhM2VhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9jb3JlL21lbXN0aWNrLmMKKysrIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21lbXN0aWNrLmMKQEAgLTQ2NSw2ICs0NjUsNyBAQAogCQlpZiAoIWhvc3QtPmNhcmQpIHsKIAkJCWhvc3QtPmNhcmQgPSBjYXJkOwogCQkJaWYgKGRldmljZV9yZWdpc3RlcigmY2FyZC0+ZGV2KSkgeworCQkJCXB1dF9kZXZpY2UoJmNhcmQtPmRldik7CiAJCQkJa2ZyZWUoaG9zdC0+Y2FyZCk7CiAJCQkJaG9zdC0+Y2FyZCA9IE5VTEw7CiAJCQl9CkBAIC01MTAsMTQgKzUxMSwxOCBAQAogewogCWludCByYzsKIAotCWlmICghaWRyX3ByZV9nZXQoJm1lbXN0aWNrX2hvc3RfaWRyLCBHRlBfS0VSTkVMKSkKLQkJcmV0dXJuIC1FTk9NRU07CisJd2hpbGUgKDEpIHsKKwkJaWYgKCFpZHJfcHJlX2dldCgmbWVtc3RpY2tfaG9zdF9pZHIsIEdGUF9LRVJORUwpKQorCQkJcmV0dXJuIC1FTk9NRU07CiAKLQlzcGluX2xvY2soJm1lbXN0aWNrX2hvc3RfbG9jayk7Ci0JcmMgPSBpZHJfZ2V0X25ldygmbWVtc3RpY2tfaG9zdF9pZHIsIGhvc3QsICZob3N0LT5pZCk7Ci0Jc3Bpbl91bmxvY2soJm1lbXN0aWNrX2hvc3RfbG9jayk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CisJCXNwaW5fbG9jaygmbWVtc3RpY2tfaG9zdF9sb2NrKTsKKwkJcmMgPSBpZHJfZ2V0X25ldygmbWVtc3RpY2tfaG9zdF9pZHIsIGhvc3QsICZob3N0LT5pZCk7CisJCXNwaW5fdW5sb2NrKCZtZW1zdGlja19ob3N0X2xvY2spOworCQlpZiAoIXJjKQorCQkJYnJlYWs7CisJCWVsc2UgaWYgKHJjICE9IC1FQUdBSU4pCisJCQlyZXR1cm4gcmM7CisJfQogCiAJZGV2X3NldF9uYW1lKCZob3N0LT5kZXYsICJtZW1zdGljayV1IiwgaG9zdC0+aWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCmluZGV4IDAyMzYyZWMuLjU3YjQyYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCisrKyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCkBAIC0yMyw3ICsyMyw2IEBACiAKICNkZWZpbmUgRFJJVkVSX05BTUUgIm1zcHJvX2Jsb2NrIgogCi1zdGF0aWMgREVGSU5FX01VVEVYKG1zcHJvX2Jsb2NrX211dGV4KTsKIHN0YXRpYyBpbnQgbWFqb3I7CiBtb2R1bGVfcGFyYW0obWFqb3IsIGludCwgMDY0NCk7CiAKQEAgLTE2MCw2ICsxNTksMTMgQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgKCptcnFfaGFuZGxlcikoc3RydWN0IG1lbXN0aWNrX2RldiAqY2FyZCwKIAkJCQkJICAgICBzdHJ1Y3QgbWVtc3RpY2tfcmVxdWVzdCAqKm1ycSk7CiAKKworCS8qIERlZmF1bHQgcmVxdWVzdCBzZXR1cCBmdW5jdGlvbiBmb3IgZGF0YSBhY2Nlc3MgbWV0aG9kIHByZWZlcnJlZCBieQorCSAqIHRoaXMgaG9zdCBpbnN0YW5jZS4KKwkgKi8KKwl2b2lkICAgICAgICAgICAgICAgICAgKCpzZXR1cF90cmFuc2Zlcikoc3RydWN0IG1lbXN0aWNrX2RldiAqY2FyZCwKKwkJCQkJCXU2NCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpOworCiAJc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhdHRyX2dyb3VwOwogCiAJc3RydWN0IHNjYXR0ZXJsaXN0ICAgIHJlcV9zZ1tNU1BST19CTE9DS19NQVhfU0VHU107CkBAIC0xODEsNyArMTg3LDYgQEAKIAlzdHJ1Y3QgbXNwcm9fYmxvY2tfZGF0YSAqbXNiID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCWludCByYyA9IC1FTlhJTzsKIAotCW11dGV4X2xvY2soJm1zcHJvX2Jsb2NrX211dGV4KTsKIAltdXRleF9sb2NrKCZtc3Byb19ibG9ja19kaXNrX2xvY2spOwogCiAJaWYgKG1zYiAmJiBtc2ItPmNhcmQpIHsKQEAgLTE5Myw3ICsxOTgsNiBAQAogCX0KIAogCW11dGV4X3VubG9jaygmbXNwcm9fYmxvY2tfZGlza19sb2NrKTsKLQltdXRleF91bmxvY2soJm1zcHJvX2Jsb2NrX211dGV4KTsKIAogCXJldHVybiByYzsKIH0KQEAgLTIyNSwxMSArMjI5LDcgQEAKIAogc3RhdGljIGludCBtc3Byb19ibG9ja19iZF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0JaW50IHJldDsKLQltdXRleF9sb2NrKCZtc3Byb19ibG9ja19tdXRleCk7Ci0JcmV0ID0gbXNwcm9fYmxvY2tfZGlza19yZWxlYXNlKGRpc2spOwotCW11dGV4X3VubG9jaygmbXNwcm9fYmxvY2tfbXV0ZXgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIG1zcHJvX2Jsb2NrX2Rpc2tfcmVsZWFzZShkaXNrKTsKIH0KIAogc3RhdGljIGludCBtc3Byb19ibG9ja19iZF9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKQEAgLTY2MywxNCArNjYzLDQzIEBACiAJfQogfQogCisvKioqIFRyYW5zZmVyIHNldHVwIGZ1bmN0aW9ucyBmb3IgZGlmZmVyZW50IGFjY2VzcyBtZXRob2RzLiAqKiovCisKKy8qKiBTZXR1cCBkYXRhIHRyYW5zZmVyIHJlcXVlc3QgZm9yIFNFVF9DTUQgVFBDIHdpdGggYXJndW1lbnRzIGluIGNhcmQKKyAqICByZWdpc3RlcnMuCisgKgorICogIEBjYXJkICAgIEN1cnJlbnQgbWVkaWEgaW5zdGFuY2UKKyAqICBAb2Zmc2V0ICBUYXJnZXQgZGF0YSBvZmZzZXQgaW4gYnl0ZXMKKyAqICBAbGVuZ3RoICBSZXF1aXJlZCB0cmFuc2ZlciBsZW5ndGggaW4gYnl0ZXMuCisgKi8KK3N0YXRpYyB2b2lkIGhfbXNwcm9fYmxvY2tfc2V0dXBfY21kKHN0cnVjdCBtZW1zdGlja19kZXYgKmNhcmQsIHU2NCBvZmZzZXQsCisJCQkJICAgIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IG1zcHJvX2Jsb2NrX2RhdGEgKm1zYiA9IG1lbXN0aWNrX2dldF9kcnZkYXRhKGNhcmQpOworCXN0cnVjdCBtc3Byb19wYXJhbV9yZWdpc3RlciBwYXJhbSA9IHsKKwkJLnN5c3RlbSA9IG1zYi0+c3lzdGVtLAorCQkuZGF0YV9jb3VudCA9IGNwdV90b19iZTE2KCh1aW50MTZfdCkobGVuZ3RoIC8gbXNiLT5wYWdlX3NpemUpKSwKKwkJLyogSVNPIEM5MCB3YXJuaW5nIHByZWNsdWRlcyBkaXJlY3QgaW5pdGlhbGl6YXRpb24gZm9yIG5vdy4gKi8KKwkJLmRhdGFfYWRkcmVzcyA9IDAsCisJCS50cGNfcGFyYW0gPSAwCisJfTsKKworCWRvX2RpdihvZmZzZXQsIG1zYi0+cGFnZV9zaXplKTsKKwlwYXJhbS5kYXRhX2FkZHJlc3MgPSBjcHVfdG9fYmUzMigodWludDMyX3Qpb2Zmc2V0KTsKKworCWNhcmQtPm5leHRfcmVxdWVzdCA9IGhfbXNwcm9fYmxvY2tfcmVxX2luaXQ7CisJbXNiLT5tcnFfaGFuZGxlciA9IGhfbXNwcm9fYmxvY2tfdHJhbnNmZXJfZGF0YTsKKwltZW1zdGlja19pbml0X3JlcSgmY2FyZC0+Y3VycmVudF9tcnEsIE1TX1RQQ19XUklURV9SRUcsCisJCQkgICZwYXJhbSwgc2l6ZW9mKHBhcmFtKSk7Cit9CisKIC8qKiogRGF0YSB0cmFuc2ZlciAqKiovCiAKIHN0YXRpYyBpbnQgbXNwcm9fYmxvY2tfaXNzdWVfcmVxKHN0cnVjdCBtZW1zdGlja19kZXYgKmNhcmQsIGludCBjaHVuaykKIHsKIAlzdHJ1Y3QgbXNwcm9fYmxvY2tfZGF0YSAqbXNiID0gbWVtc3RpY2tfZ2V0X2RydmRhdGEoY2FyZCk7Ci0Jc2VjdG9yX3QgdF9zZWM7CisJdTY0IHRfb2ZmOwogCXVuc2lnbmVkIGludCBjb3VudDsKLQlzdHJ1Y3QgbXNwcm9fcGFyYW1fcmVnaXN0ZXIgcGFyYW07CiAKIHRyeV9hZ2FpbjoKIAl3aGlsZSAoY2h1bmspIHsKQEAgLTY4NSwzMCArNzE0LDE3IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXRfc2VjID0gYmxrX3JxX3Bvcyhtc2ItPmJsb2NrX3JlcSkgPDwgOTsKLQkJc2VjdG9yX2Rpdih0X3NlYywgbXNiLT5wYWdlX3NpemUpOwotCisJCXRfb2ZmID0gYmxrX3JxX3Bvcyhtc2ItPmJsb2NrX3JlcSk7CisJCXRfb2ZmIDw8PSA5OwogCQljb3VudCA9IGJsa19ycV9ieXRlcyhtc2ItPmJsb2NrX3JlcSk7Ci0JCWNvdW50IC89IG1zYi0+cGFnZV9zaXplOwogCi0JCXBhcmFtLnN5c3RlbSA9IG1zYi0+c3lzdGVtOwotCQlwYXJhbS5kYXRhX2NvdW50ID0gY3B1X3RvX2JlMTYoY291bnQpOwotCQlwYXJhbS5kYXRhX2FkZHJlc3MgPSBjcHVfdG9fYmUzMigodWludDMyX3QpdF9zZWMpOwotCQlwYXJhbS50cGNfcGFyYW0gPSAwOworCQltc2ItPnNldHVwX3RyYW5zZmVyKGNhcmQsIHRfb2ZmLCBjb3VudCk7CiAKIAkJbXNiLT5kYXRhX2RpciA9IHJxX2RhdGFfZGlyKG1zYi0+YmxvY2tfcmVxKTsKIAkJbXNiLT50cmFuc2Zlcl9jbWQgPSBtc2ItPmRhdGFfZGlyID09IFJFQUQKIAkJCQkgICAgPyBNU1BST19DTURfUkVBRF9EQVRBCiAJCQkJICAgIDogTVNQUk9fQ01EX1dSSVRFX0RBVEE7CiAKLQkJZGV2X2RiZygmY2FyZC0+ZGV2LCAiZGF0YSB0cmFuc2ZlcjogY21kICV4LCAiCi0JCQkibGJhICV4LCBjb3VudCAleFxuIiwgbXNiLT50cmFuc2Zlcl9jbWQsCi0JCQliZTMyX3RvX2NwdShwYXJhbS5kYXRhX2FkZHJlc3MpLCBjb3VudCk7Ci0KLQkJY2FyZC0+bmV4dF9yZXF1ZXN0ID0gaF9tc3Byb19ibG9ja19yZXFfaW5pdDsKLQkJbXNiLT5tcnFfaGFuZGxlciA9IGhfbXNwcm9fYmxvY2tfdHJhbnNmZXJfZGF0YTsKLQkJbWVtc3RpY2tfaW5pdF9yZXEoJmNhcmQtPmN1cnJlbnRfbXJxLCBNU19UUENfV1JJVEVfUkVHLAotCQkJCSAgJnBhcmFtLCBzaXplb2YocGFyYW0pKTsKIAkJbWVtc3RpY2tfbmV3X3JlcShjYXJkLT5ob3N0KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtOTYzLDE4ICs5NzksMTYgQEAKIHN0YXRpYyBpbnQgbXNwcm9fYmxvY2tfcmVhZF9hdHRyaWJ1dGVzKHN0cnVjdCBtZW1zdGlja19kZXYgKmNhcmQpCiB7CiAJc3RydWN0IG1zcHJvX2Jsb2NrX2RhdGEgKm1zYiA9IG1lbXN0aWNrX2dldF9kcnZkYXRhKGNhcmQpOwotCXN0cnVjdCBtc3Byb19wYXJhbV9yZWdpc3RlciBwYXJhbSA9IHsKLQkJLnN5c3RlbSA9IG1zYi0+c3lzdGVtLAotCQkuZGF0YV9jb3VudCA9IGNwdV90b19iZTE2KDEpLAotCQkuZGF0YV9hZGRyZXNzID0gMCwKLQkJLnRwY19wYXJhbSA9IDAKLQl9OwogCXN0cnVjdCBtc3Byb19hdHRyaWJ1dGUgKmF0dHIgPSBOVUxMOwogCXN0cnVjdCBtc3Byb19zeXNfYXR0ciAqc19hdHRyID0gTlVMTDsKIAl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBOVUxMOwogCWludCBjbnQsIHJjLCBhdHRyX2NvdW50OwotCXVuc2lnbmVkIGludCBhZGRyOwotCXVuc2lnbmVkIHNob3J0IHBhZ2VfY291bnQ7CisJLyogV2hpbGUgbm9ybWFsbHkgcGh5c2ljYWwgZGV2aWNlIG9mZnNldHMsIHJlcHJlc2VudGVkIGhlcmUgYnkKKwkgKiBhdHRyX29mZnNldCBhbmQgYXR0cl9sZW4gd2lsbCBiZSBvZiBsYXJnZSBudW1lcmljIHR5cGVzLCB3ZSBjYW4gYmUKKwkgKiBzdXJlLCB0aGF0IGF0dHJpYnV0ZXMgYXJlIGNsb3NlIGVub3VnaCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQorCSAqIGRldmljZSwgdG8gc2F2ZSBvdXJzZWx2ZXMgc29tZSB0cm91YmxlLgorCSAqLworCXVuc2lnbmVkIGludCBhZGRyLCBhdHRyX29mZnNldCA9IDAsIGF0dHJfbGVuID0gbXNiLT5wYWdlX3NpemU7CiAKIAlhdHRyID0ga21hbGxvYyhtc2ItPnBhZ2Vfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhdHRyKQpAQCAtOTg3LDEwICsxMDAxLDggQEAKIAltc2ItPmRhdGFfZGlyID0gUkVBRDsKIAltc2ItPnRyYW5zZmVyX2NtZCA9IE1TUFJPX0NNRF9SRUFEX0FUUkI7CiAKLQljYXJkLT5uZXh0X3JlcXVlc3QgPSBoX21zcHJvX2Jsb2NrX3JlcV9pbml0OwotCW1zYi0+bXJxX2hhbmRsZXIgPSBoX21zcHJvX2Jsb2NrX3RyYW5zZmVyX2RhdGE7Ci0JbWVtc3RpY2tfaW5pdF9yZXEoJmNhcmQtPmN1cnJlbnRfbXJxLCBNU19UUENfV1JJVEVfUkVHLCAmcGFyYW0sCi0JCQkgIHNpemVvZihwYXJhbSkpOworCW1zYi0+c2V0dXBfdHJhbnNmZXIoY2FyZCwgYXR0cl9vZmZzZXQsIGF0dHJfbGVuKTsKKwogCW1lbXN0aWNrX25ld19yZXEoY2FyZC0+aG9zdCk7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmY2FyZC0+bXJxX2NvbXBsZXRlKTsKIAlpZiAoY2FyZC0+Y3VycmVudF9tcnEuZXJyb3IpIHsKQEAgLTEwMjEsMTMgKzEwMzMsMTIgQEAKIAl9CiAJbXNiLT5hdHRyX2dyb3VwLm5hbWUgPSAibWVkaWFfYXR0cmlidXRlcyI7CiAKLQlidWZmZXIgPSBrbWFsbG9jKG1zYi0+cGFnZV9zaXplLCBHRlBfS0VSTkVMKTsKKwlidWZmZXIgPSBrbWFsbG9jKGF0dHJfbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZmZlcikgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X2ZyZWVfYXR0cjsKIAl9Ci0JbWVtY3B5KGJ1ZmZlciwgKGNoYXIgKilhdHRyLCBtc2ItPnBhZ2Vfc2l6ZSk7Ci0JcGFnZV9jb3VudCA9IDE7CisJbWVtY3B5KGJ1ZmZlciwgKGNoYXIgKilhdHRyLCBhdHRyX2xlbik7CiAKIAlmb3IgKGNudCA9IDA7IGNudCA8IGF0dHJfY291bnQ7ICsrY250KSB7CiAJCXNfYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtc3Byb19zeXNfYXR0ciksIEdGUF9LRVJORUwpOwpAQCAtMTAzOCw5ICsxMDQ5LDEwIEBACiAKIAkJbXNiLT5hdHRyX2dyb3VwLmF0dHJzW2NudF0gPSAmc19hdHRyLT5kZXZfYXR0ci5hdHRyOwogCQlhZGRyID0gYmUzMl90b19jcHUoYXR0ci0+ZW50cmllc1tjbnRdLmFkZHJlc3MpOwotCQlyYyA9IGJlMzJfdG9fY3B1KGF0dHItPmVudHJpZXNbY250XS5zaXplKTsKKwkJc19hdHRyLT5zaXplID0gYmUzMl90b19jcHUoYXR0ci0+ZW50cmllc1tjbnRdLnNpemUpOwogCQlkZXZfZGJnKCZjYXJkLT5kZXYsICJhZGRpbmcgYXR0cmlidXRlICVkOiBpZCAleCwgYWRkcmVzcyAleCwgIgotCQkJInNpemUgJXhcbiIsIGNudCwgYXR0ci0+ZW50cmllc1tjbnRdLmlkLCBhZGRyLCByYyk7CisJCQkic2l6ZSAlenhcbiIsIGNudCwgYXR0ci0+ZW50cmllc1tjbnRdLmlkLCBhZGRyLAorCQkJc19hdHRyLT5zaXplKTsKIAkJc19hdHRyLT5pZCA9IGF0dHItPmVudHJpZXNbY250XS5pZDsKIAkJaWYgKG1zcHJvX2Jsb2NrX2F0dHJfbmFtZShzX2F0dHItPmlkKSkKIAkJCXNucHJpbnRmKHNfYXR0ci0+bmFtZSwgc2l6ZW9mKHNfYXR0ci0+bmFtZSksICIlcyIsCkBAIC0xMDU0LDU3ICsxMDY2LDQ3IEBACiAJCXNfYXR0ci0+ZGV2X2F0dHIuYXR0ci5tb2RlID0gU19JUlVHTzsKIAkJc19hdHRyLT5kZXZfYXR0ci5zaG93ID0gbXNwcm9fYmxvY2tfYXR0cl9zaG93KHNfYXR0ci0+aWQpOwogCi0JCWlmICghcmMpCisJCWlmICghc19hdHRyLT5zaXplKQogCQkJY29udGludWU7CiAKLQkJc19hdHRyLT5zaXplID0gcmM7Ci0JCXNfYXR0ci0+ZGF0YSA9IGttYWxsb2MocmMsIEdGUF9LRVJORUwpOworCQlzX2F0dHItPmRhdGEgPSBrbWFsbG9jKHNfYXR0ci0+c2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc19hdHRyLT5kYXRhKSB7CiAJCQlyYyA9IC1FTk9NRU07CiAJCQlnb3RvIG91dF9mcmVlX2J1ZmZlcjsKIAkJfQogCi0JCWlmICgoKGFkZHIgLyBtc2ItPnBhZ2Vfc2l6ZSkKLQkJICAgICA9PSBiZTMyX3RvX2NwdShwYXJhbS5kYXRhX2FkZHJlc3MpKQotCQkgICAgJiYgKCgoYWRkciArIHJjIC0gMSkgLyBtc2ItPnBhZ2Vfc2l6ZSkKLQkJCT09IGJlMzJfdG9fY3B1KHBhcmFtLmRhdGFfYWRkcmVzcykpKSB7CisJCWlmICgoKGFkZHIgLyBtc2ItPnBhZ2Vfc2l6ZSkgPT0gKGF0dHJfb2Zmc2V0IC8gbXNiLT5wYWdlX3NpemUpKQorCQkgICAgJiYgKCgoYWRkciArIHNfYXR0ci0+c2l6ZSAtIDEpIC8gbXNiLT5wYWdlX3NpemUpCisJCQk9PSAoYXR0cl9vZmZzZXQgLyBtc2ItPnBhZ2Vfc2l6ZSkpKSB7CiAJCQltZW1jcHkoc19hdHRyLT5kYXRhLCBidWZmZXIgKyBhZGRyICUgbXNiLT5wYWdlX3NpemUsCi0JCQkgICAgICAgcmMpOworCQkJICAgICAgIHNfYXR0ci0+c2l6ZSk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChwYWdlX2NvdW50IDw9IChyYyAvIG1zYi0+cGFnZV9zaXplKSkgeworCQlhdHRyX29mZnNldCA9IChhZGRyIC8gbXNiLT5wYWdlX3NpemUpICogbXNiLT5wYWdlX3NpemU7CisKKwkJaWYgKChhdHRyX29mZnNldCArIGF0dHJfbGVuKSA8IChhZGRyICsgc19hdHRyLT5zaXplKSkgewogCQkJa2ZyZWUoYnVmZmVyKTsKLQkJCXBhZ2VfY291bnQgPSAocmMgLyBtc2ItPnBhZ2Vfc2l6ZSkgKyAxOwotCQkJYnVmZmVyID0ga21hbGxvYyhwYWdlX2NvdW50ICogbXNiLT5wYWdlX3NpemUsCi0JCQkJCSBHRlBfS0VSTkVMKTsKKwkJCWF0dHJfbGVuID0gKCgoYWRkciArIHNfYXR0ci0+c2l6ZSkgLyBtc2ItPnBhZ2Vfc2l6ZSkKKwkJCQkgICAgKyAxICkgKiBtc2ItPnBhZ2Vfc2l6ZSAtIGF0dHJfb2Zmc2V0OworCQkJYnVmZmVyID0ga21hbGxvYyhhdHRyX2xlbiwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIWJ1ZmZlcikgewogCQkJCXJjID0gLUVOT01FTTsKIAkJCQlnb3RvIG91dF9mcmVlX2F0dHI7CiAJCQl9CiAJCX0KIAotCQlwYXJhbS5zeXN0ZW0gPSBtc2ItPnN5c3RlbTsKLQkJcGFyYW0uZGF0YV9jb3VudCA9IGNwdV90b19iZTE2KChyYyAvIG1zYi0+cGFnZV9zaXplKSArIDEpOwotCQlwYXJhbS5kYXRhX2FkZHJlc3MgPSBjcHVfdG9fYmUzMihhZGRyIC8gbXNiLT5wYWdlX3NpemUpOwotCQlwYXJhbS50cGNfcGFyYW0gPSAwOwotCi0JCXNnX2luaXRfb25lKCZtc2ItPnJlcV9zZ1swXSwgYnVmZmVyLAotCQkJICAgIGJlMTZfdG9fY3B1KHBhcmFtLmRhdGFfY291bnQpICogbXNiLT5wYWdlX3NpemUpOworCQlzZ19pbml0X29uZSgmbXNiLT5yZXFfc2dbMF0sIGJ1ZmZlciwgYXR0cl9sZW4pOwogCQltc2ItPnNlZ19jb3VudCA9IDE7CiAJCW1zYi0+Y3VycmVudF9zZWcgPSAwOwogCQltc2ItPmN1cnJlbnRfcGFnZSA9IDA7CiAJCW1zYi0+ZGF0YV9kaXIgPSBSRUFEOwogCQltc2ItPnRyYW5zZmVyX2NtZCA9IE1TUFJPX0NNRF9SRUFEX0FUUkI7CiAKLQkJZGV2X2RiZygmY2FyZC0+ZGV2LCAicmVhZGluZyBhdHRyaWJ1dGUgcGFnZXMgJXgsICV4XG4iLAotCQkJYmUzMl90b19jcHUocGFyYW0uZGF0YV9hZGRyZXNzKSwKLQkJCWJlMTZfdG9fY3B1KHBhcmFtLmRhdGFfY291bnQpKTsKKwkJZGV2X2RiZygmY2FyZC0+ZGV2LCAicmVhZGluZyBhdHRyaWJ1dGUgcmFuZ2UgJXgsICV4XG4iLAorCQkJYXR0cl9vZmZzZXQsIGF0dHJfbGVuKTsKIAotCQljYXJkLT5uZXh0X3JlcXVlc3QgPSBoX21zcHJvX2Jsb2NrX3JlcV9pbml0OwotCQltc2ItPm1ycV9oYW5kbGVyID0gaF9tc3Byb19ibG9ja190cmFuc2Zlcl9kYXRhOwotCQltZW1zdGlja19pbml0X3JlcSgmY2FyZC0+Y3VycmVudF9tcnEsIE1TX1RQQ19XUklURV9SRUcsCi0JCQkJICAoY2hhciAqKSZwYXJhbSwgc2l6ZW9mKHBhcmFtKSk7CisJCW1zYi0+c2V0dXBfdHJhbnNmZXIoY2FyZCwgYXR0cl9vZmZzZXQsIGF0dHJfbGVuKTsKIAkJbWVtc3RpY2tfbmV3X3JlcShjYXJkLT5ob3N0KTsKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmY2FyZC0+bXJxX2NvbXBsZXRlKTsKIAkJaWYgKGNhcmQtPmN1cnJlbnRfbXJxLmVycm9yKSB7CkBAIC0xMTEyLDcgKzExMTQsOCBAQAogCQkJZ290byBvdXRfZnJlZV9idWZmZXI7CiAJCX0KIAotCQltZW1jcHkoc19hdHRyLT5kYXRhLCBidWZmZXIgKyBhZGRyICUgbXNiLT5wYWdlX3NpemUsIHJjKTsKKwkJbWVtY3B5KHNfYXR0ci0+ZGF0YSwgYnVmZmVyICsgYWRkciAlIG1zYi0+cGFnZV9zaXplLAorCQkgICAgICAgc19hdHRyLT5zaXplKTsKIAl9CiAKIAlyYyA9IDA7CkBAIC0xMTMwLDYgKzExMzMsOCBAQAogCWludCByYyA9IDA7CiAKIAltc2ItPnN5c3RlbSA9IE1FTVNUSUNLX1NZU19TRVJJQUw7CisJbXNiLT5zZXR1cF90cmFuc2ZlciA9IGhfbXNwcm9fYmxvY2tfc2V0dXBfY21kOworCiAJY2FyZC0+cmVnX2FkZHIucl9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbXNwcm9fcmVnaXN0ZXIsIHN0YXR1cyk7CiAJY2FyZC0+cmVnX2FkZHIucl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IG1zX3N0YXR1c19yZWdpc3Rlcik7CiAJY2FyZC0+cmVnX2FkZHIud19vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbXNwcm9fcmVnaXN0ZXIsIHBhcmFtKTsKQEAgLTEyMDYsMTAgKzEyMTEsMTIgQEAKIAogCW1zYi0+cGFnZV9zaXplID0gYmUxNl90b19jcHUoc3lzX2luZm8tPnVuaXRfc2l6ZSk7CiAKLQlpZiAoIWlkcl9wcmVfZ2V0KCZtc3Byb19ibG9ja19kaXNrX2lkciwgR0ZQX0tFUk5FTCkpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJbXV0ZXhfbG9jaygmbXNwcm9fYmxvY2tfZGlza19sb2NrKTsKKwlpZiAoIWlkcl9wcmVfZ2V0KCZtc3Byb19ibG9ja19kaXNrX2lkciwgR0ZQX0tFUk5FTCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZtc3Byb19ibG9ja19kaXNrX2xvY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKIAlyYyA9IGlkcl9nZXRfbmV3KCZtc3Byb19ibG9ja19kaXNrX2lkciwgY2FyZCwgJmRpc2tfaWQpOwogCW11dGV4X3VubG9jaygmbXNwcm9fYmxvY2tfZGlza19sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1zdGljay9ob3N0L2ptYjM4eF9tcy5jIGIvZHJpdmVycy9tZW1zdGljay9ob3N0L2ptYjM4eF9tcy5jCmluZGV4IGYyYjg5NGMuLmQ4OWQ5MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtc3RpY2svaG9zdC9qbWIzOHhfbXMuYworKysgYi9kcml2ZXJzL21lbXN0aWNrL2hvc3Qvam1iMzh4X21zLmMKQEAgLTYxLDYgKzYxLDcgQEAKIAlzdHJ1Y3QgbWVtc3RpY2tfcmVxdWVzdCAqcmVxOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgIGNtZF9mbGFnczsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgICBpb19wb3M7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgaWZtb2RlOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIGlvX3dvcmRbMl07CiB9OwogCkBAIC0xMzYsMTUgKzEzNywxNCBAQAogI2RlZmluZSBQQURfUFVfUERfT05fTVNfU09DSzAgMHg1ZjhmMDAwMAogI2RlZmluZSBQQURfUFVfUERfT05fTVNfU09DSzEgMHgwZjBmMDAwMAogCisjZGVmaW5lIENMT0NLX0NPTlRST0xfQllfTU1JTyAweDAwMDAwMDA4CiAjZGVmaW5lIENMT0NLX0NPTlRST0xfNDBNSFogICAweDAwMDAwMDAxCi0jZGVmaW5lIENMT0NLX0NPTlRST0xfNTBNSFogICAweDAwMDAwMDBhCi0jZGVmaW5lIENMT0NLX0NPTlRST0xfNjBNSFogICAweDAwMDAwMDA4Ci0jZGVmaW5lIENMT0NLX0NPTlRST0xfNjJfNU1IWiAweDAwMDAwMDBjCisjZGVmaW5lIENMT0NLX0NPTlRST0xfNTBNSFogICAweDAwMDAwMDAyCisjZGVmaW5lIENMT0NLX0NPTlRST0xfNjBNSFogICAweDAwMDAwMDEwCisjZGVmaW5lIENMT0NLX0NPTlRST0xfNjJfNU1IWiAweDAwMDAwMDA0CiAjZGVmaW5lIENMT0NLX0NPTlRST0xfT0ZGICAgICAweDAwMDAwMDAwCiAKICNkZWZpbmUgUENJX0NUTF9DTE9DS19ETFlfQUREUiAgIDB4MDAwMDAwYjAKLSNkZWZpbmUgUENJX0NUTF9DTE9DS19ETFlfTUFTS19BIDB4MDAwMDBmMDAKLSNkZWZpbmUgUENJX0NUTF9DTE9DS19ETFlfTUFTS19CIDB4MDAwMGYwMDAKIAogZW51bSB7CiAJQ01EX1JFQURZICAgID0gMHgwMSwKQEAgLTM5MCw4ICszOTAsMTMgQEAKIAogCWlmIChob3N0LT5yZXEtPmRhdGFfZGlyID09IFJFQUQpCiAJCWNtZCB8PSBUUENfRElSOwotCWlmIChob3N0LT5yZXEtPm5lZWRfY2FyZF9pbnQpCi0JCWNtZCB8PSBUUENfV0FJVF9JTlQ7CisKKwlpZiAoaG9zdC0+cmVxLT5uZWVkX2NhcmRfaW50KSB7CisJCWlmIChob3N0LT5pZm1vZGUgPT0gTUVNU1RJQ0tfU0VSSUFMKQorCQkJY21kIHw9IFRQQ19HRVRfSU5UOworCQllbHNlCisJCQljbWQgfD0gVFBDX1dBSVRfSU5UOworCX0KIAogCWRhdGEgPSBob3N0LT5yZXEtPmRhdGE7CiAKQEAgLTUyOSw3ICs1MzQsMTAgQEAKIAkJaWYgKGlycV9zdGF0dXMgJiBJTlRfU1RBVFVTX0FOWV9FUlIpIHsKIAkJCWlmIChpcnFfc3RhdHVzICYgSU5UX1NUQVRVU19DUkNfRVJSKQogCQkJCWhvc3QtPnJlcS0+ZXJyb3IgPSAtRUlMU0VROwotCQkJZWxzZQorCQkJZWxzZSBpZiAoaXJxX3N0YXR1cyAmIElOVF9TVEFUVVNfVFBDX0VSUikgeworCQkJCWRldl9kYmcoJmhvc3QtPmNoaXAtPnBkZXYtPmRldiwgIlRQQ19FUlJcbiIpOworCQkJCWptYjM4eF9tc19jb21wbGV0ZV9jbWQobXNoLCAwKTsKKwkJCX0gZWxzZQogCQkJCWhvc3QtPnJlcS0+ZXJyb3IgPSAtRVRJTUU7CiAJCX0gZWxzZSB7CiAJCQlpZiAoaG9zdC0+Y21kX2ZsYWdzICYgRE1BX0RBVEEpIHsKQEAgLTY0NCw3ICs2NTIsNiBAQAogCQluZGVsYXkoMjApOwogCX0KIAlkZXZfZGJnKCZob3N0LT5jaGlwLT5wZGV2LT5kZXYsICJyZXNldF9yZXEgdGltZW91dFxuIik7Ci0JLyogcmV0dXJuIC1FSU87ICovCiAKIHJlc2V0X25leHQ6CiAJd3JpdGVsKEhPU1RfQ09OVFJPTF9SRVNFVCB8IEhPU1RfQ09OVFJPTF9DTE9DS19FTgpAQCAtNjc1LDcgKzY4Miw3IEBACiB7CiAJc3RydWN0IGptYjM4eF9tc19ob3N0ICpob3N0ID0gbWVtc3RpY2tfcHJpdihtc2gpOwogCXVuc2lnbmVkIGludCBob3N0X2N0bCA9IHJlYWRsKGhvc3QtPmFkZHIgKyBIT1NUX0NPTlRST0wpOwotCXVuc2lnbmVkIGludCBjbG9ja19jdGwgPSBDTE9DS19DT05UUk9MXzQwTUhaLCBjbG9ja19kZWxheSA9IDA7CisJdW5zaWduZWQgaW50IGNsb2NrX2N0bCA9IENMT0NLX0NPTlRST0xfQllfTU1JTywgY2xvY2tfZGVsYXkgPSAwOwogCWludCByYyA9IDA7CiAKIAlzd2l0Y2ggKHBhcmFtKSB7CkBAIC02ODcsOSArNjk0LDcgQEAKIAogCQkJaG9zdF9jdGwgPSA3OwogCQkJaG9zdF9jdGwgfD0gSE9TVF9DT05UUk9MX1BPV0VSX0VOCi0JCQkJICAgIHwgSE9TVF9DT05UUk9MX0NMT0NLX0VOCi0JCQkJICAgIHwgSE9TVF9DT05UUk9MX0hXX09DX1AKLQkJCQkgICAgfCBIT1NUX0NPTlRST0xfVERFTEFZX0VOOworCQkJCSB8IEhPU1RfQ09OVFJPTF9DTE9DS19FTjsKIAkJCXdyaXRlbChob3N0X2N0bCwgaG9zdC0+YWRkciArIEhPU1RfQ09OVFJPTCk7CiAKIAkJCXdyaXRlbChob3N0LT5pZCA/IFBBRF9QVV9QRF9PTl9NU19TT0NLMQpAQCAtNzEyLDQ2ICs3MTcsODggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAljYXNlIE1FTVNUSUNLX0lOVEVSRkFDRToKKwkJZGV2X2RiZygmaG9zdC0+Y2hpcC0+cGRldi0+ZGV2LAorCQkJIlNldCBIb3N0IEludGVyZmFjZSBNb2RlIHRvICVkXG4iLCB2YWx1ZSk7CisJCWhvc3RfY3RsICY9IH4oSE9TVF9DT05UUk9MX0ZBU1RfQ0xLIHwgSE9TVF9DT05UUk9MX1JFSSB8CisJCQkgICAgICBIT1NUX0NPTlRST0xfUkVPKTsKKwkJaG9zdF9jdGwgfD0gSE9TVF9DT05UUk9MX1RERUxBWV9FTiB8IEhPU1RfQ09OVFJPTF9IV19PQ19QOwogCQlob3N0X2N0bCAmPSB+KDMgPDwgSE9TVF9DT05UUk9MX0lGX1NISUZUKTsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGhvc3QtPmNoaXAtPnBkZXYsCi0JCQkJICAgICAgUENJX0NUTF9DTE9DS19ETFlfQUREUiwKLQkJCQkgICAgICAmY2xvY2tfZGVsYXkpOwotCQljbG9ja19kZWxheSAmPSBob3N0LT5pZCA/IH5QQ0lfQ1RMX0NMT0NLX0RMWV9NQVNLX0IKLQkJCQkJOiB+UENJX0NUTF9DTE9DS19ETFlfTUFTS19BOwogCiAJCWlmICh2YWx1ZSA9PSBNRU1TVElDS19TRVJJQUwpIHsKLQkJCWhvc3RfY3RsICY9IH5IT1NUX0NPTlRST0xfRkFTVF9DTEs7Ci0JCQlob3N0X2N0bCAmPSB+SE9TVF9DT05UUk9MX1JFTzsKIAkJCWhvc3RfY3RsIHw9IEhPU1RfQ09OVFJPTF9JRl9TRVJJQUwKIAkJCQkgICAgPDwgSE9TVF9DT05UUk9MX0lGX1NISUZUOwogCQkJaG9zdF9jdGwgfD0gSE9TVF9DT05UUk9MX1JFSTsKLQkJCWNsb2NrX2N0bCA9IENMT0NLX0NPTlRST0xfNDBNSFo7CisJCQljbG9ja19jdGwgfD0gQ0xPQ0tfQ09OVFJPTF80ME1IWjsKKwkJCWNsb2NrX2RlbGF5ID0gMDsKIAkJfSBlbHNlIGlmICh2YWx1ZSA9PSBNRU1TVElDS19QQVI0KSB7Ci0JCQlob3N0X2N0bCB8PSBIT1NUX0NPTlRST0xfRkFTVF9DTEsgfCBIT1NUX0NPTlRST0xfUkVPOworCQkJaG9zdF9jdGwgfD0gSE9TVF9DT05UUk9MX0ZBU1RfQ0xLOwogCQkJaG9zdF9jdGwgfD0gSE9TVF9DT05UUk9MX0lGX1BBUjQKIAkJCQkgICAgPDwgSE9TVF9DT05UUk9MX0lGX1NISUZUOwotCQkJaG9zdF9jdGwgJj0gfkhPU1RfQ09OVFJPTF9SRUk7Ci0JCQljbG9ja19jdGwgPSBDTE9DS19DT05UUk9MXzQwTUhaOwotCQkJY2xvY2tfZGVsYXkgfD0gaG9zdC0+aWQgPyAoNCA8PCAxMikgOiAoNCA8PCA4KTsKKwkJCWhvc3RfY3RsIHw9IEhPU1RfQ09OVFJPTF9SRU87CisJCQljbG9ja19jdGwgfD0gQ0xPQ0tfQ09OVFJPTF80ME1IWjsKKwkJCWNsb2NrX2RlbGF5ID0gNDsKIAkJfSBlbHNlIGlmICh2YWx1ZSA9PSBNRU1TVElDS19QQVI4KSB7CiAJCQlob3N0X2N0bCB8PSBIT1NUX0NPTlRST0xfRkFTVF9DTEs7CiAJCQlob3N0X2N0bCB8PSBIT1NUX0NPTlRST0xfSUZfUEFSOAogCQkJCSAgICA8PCBIT1NUX0NPTlRST0xfSUZfU0hJRlQ7Ci0JCQlob3N0X2N0bCAmPSB+KEhPU1RfQ09OVFJPTF9SRUkgfCBIT1NUX0NPTlRST0xfUkVPKTsKLQkJCWNsb2NrX2N0bCA9IENMT0NLX0NPTlRST0xfNTBNSFo7CisJCQljbG9ja19jdGwgfD0gQ0xPQ0tfQ09OVFJPTF81ME1IWjsKKwkJCWNsb2NrX2RlbGF5ID0gMDsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQl3cml0ZWwoaG9zdF9jdGwsIGhvc3QtPmFkZHIgKyBIT1NUX0NPTlRST0wpOworCQl3cml0ZWwoQ0xPQ0tfQ09OVFJPTF9PRkYsIGhvc3QtPmFkZHIgKyBDTE9DS19DT05UUk9MKTsKIAkJd3JpdGVsKGNsb2NrX2N0bCwgaG9zdC0+YWRkciArIENMT0NLX0NPTlRST0wpOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGhvc3QtPmNoaXAtPnBkZXYsCi0JCQkJICAgICAgIFBDSV9DVExfQ0xPQ0tfRExZX0FERFIsCi0JCQkJICAgICAgIGNsb2NrX2RlbGF5KTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhvc3QtPmNoaXAtPnBkZXYsCisJCQkJICAgICAgUENJX0NUTF9DTE9DS19ETFlfQUREUiArIDEsCisJCQkJICAgICAgY2xvY2tfZGVsYXkpOworCQlob3N0LT5pZm1vZGUgPSB2YWx1ZTsKIAkJYnJlYWs7CiAJfTsKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBQQ0lfUE1PUzBfQ09OVFJPTAkJMHhhZQorI2RlZmluZSAgUE1PUzBfRU5BQkxFCQkJMHgwMQorI2RlZmluZSAgUE1PUzBfT1ZFUkNVUlJFTlRfTEVWRUxfMl80VgkweDA2CisjZGVmaW5lICBQTU9TMF9FTl9PVkVSQ1VSUkVOVF9ERUJPVU5DRQkweDQwCisjZGVmaW5lICBQTU9TMF9TV19MRURfUE9MQVJJVFlfRU5BQkxFCTB4ODAKKyNkZWZpbmUgIFBNT1MwX0FDVElWRV9CSVRTIChQTU9TMF9FTkFCTEUgfCBQTU9TMF9FTl9PVkVSQ1VSUkVOVF9ERUJPVU5DRSB8IFwKKwkJCSAgICBQTU9TMF9PVkVSQ1VSUkVOVF9MRVZFTF8yXzRWKQorI2RlZmluZSBQQ0lfUE1PUzFfQ09OVFJPTAkJMHhiZAorI2RlZmluZSAgUE1PUzFfQUNUSVZFX0JJVFMJCTB4NGEKKyNkZWZpbmUgUENJX0NMT0NLX0NUTAkJCTB4YjkKKworc3RhdGljIGludCBqbWIzOHhfbXNfcG1vcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGZsYWcpCit7CisJdW5zaWduZWQgY2hhciB2YWw7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfUE1PUzBfQ09OVFJPTCwgJnZhbCk7CisJaWYgKGZsYWcpCisJCXZhbCB8PSBQTU9TMF9BQ1RJVkVfQklUUzsKKwllbHNlCisJCXZhbCAmPSB+UE1PUzBfQUNUSVZFX0JJVFM7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9QTU9TMF9DT05UUk9MLCB2YWwpOworCWRldl9kYmcoJnBkZXYtPmRldiwgIkpNQjM4eDogc2V0IFBNT1MwIHZhbCAweCV4XG4iLCB2YWwpOworCisJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAxKSkgeworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfUE1PUzFfQ09OVFJPTCwgJnZhbCk7CisJCWlmIChmbGFnKQorCQkJdmFsIHw9IFBNT1MxX0FDVElWRV9CSVRTOworCQllbHNlCisJCQl2YWwgJj0gflBNT1MxX0FDVElWRV9CSVRTOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX1BNT1MxX0NPTlRST0wsIHZhbCk7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIkpNQjM4eDogc2V0IFBNT1MxIHZhbCAweCV4XG4iLCB2YWwpOworCX0KKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DTE9DS19DVEwsICZ2YWwpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0xPQ0tfQ1RMLCB2YWwgJiB+MHgwZik7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DTE9DS19DVEwsIHZhbCB8IDB4MDEpOworCWRldl9kYmcoJnBkZXYtPmRldiwgIkNsb2NrIENvbnRyb2wgYnkgUENJIGNvbmZpZyBpcyBkaXNhYmxlZCFcbiIpOworCisgICAgICAgIHJldHVybiAwOworfQorCiAjaWZkZWYgQ09ORklHX1BNCiAKIHN0YXRpYyBpbnQgam1iMzh4X21zX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtNzg0LDggKzgzMSw3IEBACiAJCXJldHVybiByYzsKIAlwY2lfc2V0X21hc3RlcihkZXYpOwogCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHhhYywgJnJjKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHhhYywgcmMgfCAweDAwNDcwMDAwKTsKKwlqbWIzOHhfbXNfcG1vcyhkZXYsIDEpOwogCiAJZm9yIChyYyA9IDA7IHJjIDwgam0tPmhvc3RfY250OyArK3JjKSB7CiAJCWlmICgham0tPmhvc3RzW3JjXSkKQEAgLTg5NCw4ICs5NDAsNyBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4YWMsICZyYyk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweGFjLCByYyB8IDB4MDA0NzAwMDApOworCWptYjM4eF9tc19wbW9zKHBkZXYsIDEpOwogCiAJY250ID0gam1iMzh4X21zX2NvdW50X3Nsb3RzKHBkZXYpOwogCWlmICghY250KSB7CkBAIC05NzYsNiArMTAyMSw4IEBACiAJCWptYjM4eF9tc19mcmVlX2hvc3Qoam0tPmhvc3RzW2NudF0pOwogCX0KIAorCWptYjM4eF9tc19wbW9zKGRldiwgMCk7CisKIAlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CkBAIC05ODMsOCArMTAzMCw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBqbWIzOHhfbXNfaWRfdGJsIFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzhYX01TLCBQQ0lfQU5ZX0lELAotCSAgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAorCXsgUENJX1ZERVZJQ0UoSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4WF9NUykgfSwKKwl7IFBDSV9WREVWSUNFKEpNSUNST04sIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzODVfTVMpIH0sCisJeyBQQ0lfVkRFVklDRShKTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzkwX01TKSB9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2xvZ19zYXMuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9sb2dfc2FzLmgKaW5kZXggNjkxNjIwZC4uOGIwNDgxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2xvZ19zYXMuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfbG9nX3Nhcy5oCkBAIC0yNjgsNyArMjY4LDcgQEAKIAogLyogQ29tcGF0aWJpbGl0eSBFcnJvciA6IElSIERpc2FibGVkICovCiAjZGVmaW5lIElSX0xPR0lORk9fQ09NUEFUX0VSUk9SX1JBSURfRElTQUJMRUQgICAgICAgICAgICAgICAgICAoMHgwMDAxMDAzMCkKLS8qIENvbXBhdGliaWxpdHkgRXJyb3IgOiBJbnF1aXJ5IENvbWFuZCBmYWlsZWQgKi8KKy8qIENvbXBhdGliaWxpdHkgRXJyb3IgOiBJbnF1aXJ5IENvbW1hbmQgZmFpbGVkICovCiAjZGVmaW5lIElSX0xPR0lORk9fQ09NUEFUX0VSUk9SX0lOUVVJUllfRkFJTEVEICAgICAgICAgICAgICAgICAoMHgwMDAxMDAzMSkKIC8qIENvbXBhdGliaWxpdHkgRXJyb3IgOiBEZXZpY2Ugbm90IGRpcmVjdCBhY2Nlc3MgZGV2aWNlICovCiAjZGVmaW5lIElSX0xPR0lORk9fQ09NUEFUX0VSUk9SX05PVF9ESVJFQ1RfQUNDRVNTICAgICAgICAgICAgICAoMHgwMDAxMDAzMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKaW5kZXggM2U1N2I2MS4uMzM1OGMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKQEAgLTc5NzcsNyArNzk3Nyw3IEBACiAJCU5VTEwsCQkJCQkJLyogMkVoICovCiAJCU5VTEwsCQkJCQkJLyogMkZoICovCiAJCSJDb21wYXRpYmlsaXR5IEVycm9yOiBJUiBEaXNhYmxlZCIsCQkvKiAzMGggKi8KLQkJIkNvbXBhdGliaWxpdHkgRXJyb3I6IElucXVpcnkgQ29tYW5kIEZhaWxlZCIsCS8qIDMxaCAqLworCQkiQ29tcGF0aWJpbGl0eSBFcnJvcjogSW5xdWlyeSBDb21tYW5kIEZhaWxlZCIsCS8qIDMxaCAqLwogCQkiQ29tcGF0aWJpbGl0eSBFcnJvcjogRGV2aWNlIG5vdCBEaXJlY3QgQWNjZXNzICIKIAkJICAgICJEZXZpY2UgIiwJCQkJCS8qIDMyaCAqLwogCQkiQ29tcGF0aWJpbGl0eSBFcnJvcjogUmVtb3ZhYmxlIERldmljZSBGb3VuZCIsCS8qIDMzaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKaW5kZXggZDQ4YzJjNi4uOGFlZmIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCkBAIC0xMTQ2LDcgKzExNDYsNyBAQAogICoKICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBkZWxldGUgc2NoZWR1bGVkIHRhcmdldCByZXNldCBmcm9tIHRoZSBsaXN0IGFuZAogICogdHJ5IHRvIHNlbmQgbmV4dCB0YXJnZXQgcmVzZXQuIFRoaXMgd2lsbCBiZSBjYWxsZWQgZnJvbSBjb21wbGV0aW9uCi0gKiBjb250ZXh0IG9mIGFueSBUYXNrIG1hbmFnbWVudCBjb21tYW5kLgorICogY29udGV4dCBvZiBhbnkgVGFzayBtYW5hZ2VtZW50IGNvbW1hbmQuCiAgKi8KIAogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMKaW5kZXggZjg3YTlkNC4uYWU3Y2FkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCkBAIC0zMDksNyArMzA5LDcgQEAKICAqCUBpcmVxOiBJMk8gYmxvY2sgcmVxdWVzdAogICoJQG1wdHI6IG1lc3NhZ2UgYm9keSBwb2ludGVyCiAgKgotICoJQnVpbGRzIHRoZSBTRyBsaXN0IGFuZCBtYXAgaXQgdG8gYmUgYWNjZXNzYWJsZSBieSB0aGUgY29udHJvbGxlci4KKyAqCUJ1aWxkcyB0aGUgU0cgbGlzdCBhbmQgbWFwIGl0IHRvIGJlIGFjY2Vzc2libGUgYnkgdGhlIGNvbnRyb2xsZXIuCiAgKgogICoJUmV0dXJucyAwIG9uIGZhaWx1cmUgb3IgMSBvbiBzdWNjZXNzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9zaF9tb2JpbGVfc2RoaS5jIGIvZHJpdmVycy9tZmQvc2hfbW9iaWxlX3NkaGkuYwppbmRleCBmMTcxNGY5Li4wYTdkZjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9zaF9tb2JpbGVfc2RoaS5jCisrKyBiL2RyaXZlcnMvbWZkL3NoX21vYmlsZV9zZGhpLmMKQEAgLTEzMSwxMSArMTMxLDE3IEBACiAJICovCiAJbW1jX2RhdGEtPmZsYWdzIHw9IFRNSU9fTU1DX0JMS1NaXzJCWVRFUzsKIAorCS8qCisJICogQWxsIFNESEkgYmxvY2tzIHN1cHBvcnQgU0RJTyBJUlEgc2lnbmFsbGluZy4KKwkgKi8KKwltbWNfZGF0YS0+ZmxhZ3MgfD0gVE1JT19NTUNfU0RJT19JUlE7CisKIAlpZiAocCAmJiBwLT5kbWFfc2xhdmVfdHggPj0gMCAmJiBwLT5kbWFfc2xhdmVfcnggPj0gMCkgewogCQlwcml2LT5wYXJhbV90eC5zbGF2ZV9pZCA9IHAtPmRtYV9zbGF2ZV90eDsKIAkJcHJpdi0+cGFyYW1fcnguc2xhdmVfaWQgPSBwLT5kbWFfc2xhdmVfcng7CiAJCXByaXYtPmRtYV9wcml2LmNoYW5fcHJpdl90eCA9ICZwcml2LT5wYXJhbV90eDsKIAkJcHJpdi0+ZG1hX3ByaXYuY2hhbl9wcml2X3J4ID0gJnByaXYtPnBhcmFtX3J4OworCQlwcml2LT5kbWFfcHJpdi5hbGlnbm1lbnRfc2hpZnQgPSAxOyAvKiAyLWJ5dGUgYWxpZ25tZW50ICovCiAJCW1tY19kYXRhLT5kbWEgPSAmcHJpdi0+ZG1hX3ByaXY7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTg5OTQtY29yZS5jIGIvZHJpdmVycy9tZmQvd204OTk0LWNvcmUuYwppbmRleCBiM2IyYWFmLi44ZDIyMWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTg5OTQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODk5NC1jb3JlLmMKQEAgLTIxOCw2ICsyMTgsMTggQEAKIAkiU1BLVkREMiIsCiB9OwogCitzdGF0aWMgY29uc3QgY2hhciAqd204OTU4X21haW5fc3VwcGxpZXNbXSA9IHsKKwkiREJWREQxIiwKKwkiREJWREQyIiwKKwkiREJWREQzIiwKKwkiRENWREQiLAorCSJBVkREMSIsCisJIkFWREQyIiwKKwkiQ1BWREQiLAorCSJTUEtWREQxIiwKKwkiU1BLVkREMiIsCit9OworCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHdtODk5NF9kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0yMzksNyArMjUxLDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc2F2ZSBMRE8gcmVnaXN0ZXJzOiAlZFxuIiwgcmV0KTsKIAotCXJldCA9IHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5OTRfbWFpbl9zdXBwbGllcyksCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZGlzYWJsZSh3bTg5OTQtPm51bV9zdXBwbGllcywKIAkJCQkgICAgIHdtODk5NC0+c3VwcGxpZXMpOwogCWlmIChyZXQgIT0gMCkgewogCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBkaXNhYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKQEAgLTI1NCw3ICsyNjYsNyBAQAogCXN0cnVjdCB3bTg5OTQgKndtODk5NCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQ7CiAKLQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg5OTRfbWFpbl9zdXBwbGllcyksCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKHdtODk5NC0+bnVtX3N1cHBsaWVzLAogCQkJCSAgICB3bTg5OTQtPnN1cHBsaWVzKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKQEAgLTMwNSw5ICszMTcsMTAgQEAKIC8qCiAgKiBJbnN0YW50aWF0ZSB0aGUgZ2VuZXJpYyBub24tY29udHJvbCBwYXJ0cyBvZiB0aGUgZGV2aWNlLgogICovCi1zdGF0aWMgaW50IHdtODk5NF9kZXZpY2VfaW5pdChzdHJ1Y3Qgd204OTk0ICp3bTg5OTQsIHVuc2lnbmVkIGxvbmcgaWQsIGludCBpcnEpCitzdGF0aWMgaW50IHdtODk5NF9kZXZpY2VfaW5pdChzdHJ1Y3Qgd204OTk0ICp3bTg5OTQsIGludCBpcnEpCiB7CiAJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEgPSB3bTg5OTQtPmRldi0+cGxhdGZvcm1fZGF0YTsKKwljb25zdCBjaGFyICpkZXZuYW1lOwogCWludCByZXQsIGk7CiAKIAltdXRleF9pbml0KCZ3bTg5OTQtPmlvX2xvY2spOwpAQCAtMzIzLDI1ICszMzYsNDggQEAKIAkJZ290byBlcnI7CiAJfQogCisJc3dpdGNoICh3bTg5OTQtPnR5cGUpIHsKKwljYXNlIFdNODk5NDoKKwkJd204OTk0LT5udW1fc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHdtODk5NF9tYWluX3N1cHBsaWVzKTsKKwkJYnJlYWs7CisJY2FzZSBXTTg5NTg6CisJCXdtODk5NC0+bnVtX3N1cHBsaWVzID0gQVJSQVlfU0laRSh3bTg5NThfbWFpbl9zdXBwbGllcyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAl3bTg5OTQtPnN1cHBsaWVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEpICoKLQkJCQkgICBBUlJBWV9TSVpFKHdtODk5NF9tYWluX3N1cHBsaWVzKSwKKwkJCQkgICB3bTg5OTQtPm51bV9zdXBwbGllcywKIAkJCQkgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXdtODk5NC0+c3VwcGxpZXMpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnI7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTk0X21haW5fc3VwcGxpZXMpOyBpKyspCi0JCXdtODk5NC0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gd204OTk0X21haW5fc3VwcGxpZXNbaV07Ci0KLQlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQod204OTk0LT5kZXYsIEFSUkFZX1NJWkUod204OTk0X21haW5fc3VwcGxpZXMpLAorCXN3aXRjaCAod204OTk0LT50eXBlKSB7CisJY2FzZSBXTTg5OTQ6CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5NF9tYWluX3N1cHBsaWVzKTsgaSsrKQorCQkJd204OTk0LT5zdXBwbGllc1tpXS5zdXBwbHkgPSB3bTg5OTRfbWFpbl9zdXBwbGllc1tpXTsKKwkJYnJlYWs7CisJY2FzZSBXTTg5NTg6CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk1OF9tYWluX3N1cHBsaWVzKTsgaSsrKQorCQkJd204OTk0LT5zdXBwbGllc1tpXS5zdXBwbHkgPSB3bTg5NThfbWFpbl9zdXBwbGllc1tpXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkJCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZ2V0KHdtODk5NC0+ZGV2LCB3bTg5OTQtPm51bV9zdXBwbGllcywKIAkJCQkgd204OTk0LT5zdXBwbGllcyk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIod204OTk0LT5kZXYsICJGYWlsZWQgdG8gZ2V0IHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnJfc3VwcGxpZXM7CiAJfQogCi0JcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204OTk0X21haW5fc3VwcGxpZXMpLAorCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZSh3bTg5OTQtPm51bV9zdXBwbGllcywKIAkJCQkgICAgd204OTk0LT5zdXBwbGllcyk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIod204OTk0LT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKQEAgLTM1Myw3ICszODksMjIgQEAKIAkJZGV2X2Vycih3bTg5OTQtPmRldiwgIkZhaWxlZCB0byByZWFkIElEIHJlZ2lzdGVyXG4iKTsKIAkJZ290byBlcnJfZW5hYmxlOwogCX0KLQlpZiAocmV0ICE9IDB4ODk5NCkgeworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAweDg5OTQ6CisJCWRldm5hbWUgPSAiV004OTk0IjsKKwkJaWYgKHdtODk5NC0+dHlwZSAhPSBXTTg5OTQpCisJCQlkZXZfd2Fybih3bTg5OTQtPmRldiwgIkRldmljZSByZWdpc3RlcmVkIGFzIHR5cGUgJWRcbiIsCisJCQkJIHdtODk5NC0+dHlwZSk7CisJCXdtODk5NC0+dHlwZSA9IFdNODk5NDsKKwkJYnJlYWs7CisJY2FzZSAweDg5NTg6CisJCWRldm5hbWUgPSAiV004OTU4IjsKKwkJaWYgKHdtODk5NC0+dHlwZSAhPSBXTTg5NTgpCisJCQlkZXZfd2Fybih3bTg5OTQtPmRldiwgIkRldmljZSByZWdpc3RlcmVkIGFzIHR5cGUgJWRcbiIsCisJCQkJIHdtODk5NC0+dHlwZSk7CisJCXdtODk5NC0+dHlwZSA9IFdNODk1ODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJZGV2X2Vycih3bTg5OTQtPmRldiwgIkRldmljZSBpcyBub3QgYSBXTTg5OTQsIElEIGlzICV4XG4iLAogCQkJcmV0KTsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTM3MCwxNCArNDIxLDE2IEBACiAJc3dpdGNoIChyZXQpIHsKIAljYXNlIDA6CiAJY2FzZSAxOgotCQlkZXZfd2Fybih3bTg5OTQtPmRldiwgInJldmlzaW9uICVjIG5vdCBmdWxseSBzdXBwb3J0ZWRcbiIsCi0JCQknQScgKyByZXQpOworCQlpZiAod204OTk0LT50eXBlID09IFdNODk5NCkKKwkJCWRldl93YXJuKHdtODk5NC0+ZGV2LAorCQkJCSAicmV2aXNpb24gJWMgbm90IGZ1bGx5IHN1cHBvcnRlZFxuIiwKKwkJCQkgJ0EnICsgcmV0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2luZm8od204OTk0LT5kZXYsICJyZXZpc2lvbiAlY1xuIiwgJ0EnICsgcmV0KTsKIAkJYnJlYWs7CiAJfQogCisJZGV2X2luZm8od204OTk0LT5kZXYsICIlcyByZXZpc2lvbiAlY1xuIiwgZGV2bmFtZSwgJ0EnICsgcmV0KTsKIAogCWlmIChwZGF0YSkgewogCQl3bTg5OTQtPmlycV9iYXNlID0gcGRhdGEtPmlycV9iYXNlOwpAQCAtNDIzLDEwICs0NzYsMTAgQEAKIGVycl9pcnE6CiAJd204OTk0X2lycV9leGl0KHdtODk5NCk7CiBlcnJfZW5hYmxlOgotCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5OTRfbWFpbl9zdXBwbGllcyksCisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZSh3bTg5OTQtPm51bV9zdXBwbGllcywKIAkJCSAgICAgICB3bTg5OTQtPnN1cHBsaWVzKTsKIGVycl9nZXQ6Ci0JcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODk5NF9tYWluX3N1cHBsaWVzKSwgd204OTk0LT5zdXBwbGllcyk7CisJcmVndWxhdG9yX2J1bGtfZnJlZSh3bTg5OTQtPm51bV9zdXBwbGllcywgd204OTk0LT5zdXBwbGllcyk7CiBlcnJfc3VwcGxpZXM6CiAJa2ZyZWUod204OTk0LT5zdXBwbGllcyk7CiBlcnI6CkBAIC00MzksOSArNDkyLDkgQEAKIHsKIAltZmRfcmVtb3ZlX2RldmljZXMod204OTk0LT5kZXYpOwogCXdtODk5NF9pcnFfZXhpdCh3bTg5OTQpOwotCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5OTRfbWFpbl9zdXBwbGllcyksCisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZSh3bTg5OTQtPm51bV9zdXBwbGllcywKIAkJCSAgICAgICB3bTg5OTQtPnN1cHBsaWVzKTsKLQlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTk0X21haW5fc3VwcGxpZXMpLCB3bTg5OTQtPnN1cHBsaWVzKTsKKwlyZWd1bGF0b3JfYnVsa19mcmVlKHdtODk5NC0+bnVtX3N1cHBsaWVzLCB3bTg5OTQtPnN1cHBsaWVzKTsKIAlrZnJlZSh3bTg5OTQtPnN1cHBsaWVzKTsKIAlrZnJlZSh3bTg5OTQpOwogfQpAQCAtNTA2LDggKzU1OSw5IEBACiAJd204OTk0LT5yZWFkX2RldiA9IHdtODk5NF9pMmNfcmVhZF9kZXZpY2U7CiAJd204OTk0LT53cml0ZV9kZXYgPSB3bTg5OTRfaTJjX3dyaXRlX2RldmljZTsKIAl3bTg5OTQtPmlycSA9IGkyYy0+aXJxOworCXdtODk5NC0+dHlwZSA9IGlkLT5kcml2ZXJfZGF0YTsKIAotCXJldHVybiB3bTg5OTRfZGV2aWNlX2luaXQod204OTk0LCBpZC0+ZHJpdmVyX2RhdGEsIGkyYy0+aXJxKTsKKwlyZXR1cm4gd204OTk0X2RldmljZV9pbml0KHdtODk5NCwgaTJjLT5pcnEpOwogfQogCiBzdGF0aWMgaW50IHdtODk5NF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCkBAIC01MzUsNyArNTg5LDggQEAKICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204OTk0X2kyY19pZFtdID0gewotCXsgIndtODk5NCIsIDAgfSwKKwl7ICJ3bTg5OTQiLCBXTTg5OTQgfSwKKwl7ICJ3bTg5NTgiLCBXTTg5NTggfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204OTk0X2kyY19pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCmluZGV4IDRkMDczZjEuLjFlMWE0YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCkBAIC00MDIsNyArNDAyLDcgQEAKIAkgIERBQzc1MTIgMTYtYml0IGRpZ2l0YWwtdG8tYW5hbG9nIGNvbnZlcnRlci4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlcyB0aV9kYWM3NTEyLgorCSAgd2lsbCBiZSBjYWxsZWQgdGlfZGFjNzUxMi4KIAogY29uZmlnIFZNV0FSRV9CQUxMT09OCiAJdHJpc3RhdGUgIlZNd2FyZSBCYWxsb29uIERyaXZlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9hcm0tY2hhcmxjZC5jIGIvZHJpdmVycy9taXNjL2FybS1jaGFybGNkLmMKaW5kZXggOWUzODc5ZS4uZmU4NjE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2FybS1jaGFybGNkLmMKKysrIGIvZHJpdmVycy9taXNjL2FybS1jaGFybGNkLmMKQEAgLTMxMyw3ICszMTMsNyBAQAogCUlOSVRfREVMQVlFRF9XT1JLKCZsY2QtPmluaXRfd29yaywgY2hhcmxjZF9pbml0X3dvcmspOwogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbGNkLT5pbml0X3dvcmssIDApOwogCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgImluaXRhbGl6ZWQgQVJNIGNoYXJhY3RlciBMQ0QgYXQgJTA4eFxuIiwKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaW5pdGlhbGl6ZWQgQVJNIGNoYXJhY3RlciBMQ0QgYXQgJTA4eFxuIiwKIAkJbGNkLT5waHliYXNlKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3Ztd19iYWxsb29uLmMgYi9kcml2ZXJzL21pc2Mvdm13X2JhbGxvb24uYwppbmRleCAyYTFlODA0Li40ZDJlYThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvdm13X2JhbGxvb24uYworKysgYi9kcml2ZXJzL21pc2Mvdm13X2JhbGxvb24uYwpAQCAtNDUsNyArNDUsNyBAQAogCiBNT0RVTEVfQVVUSE9SKCJWTXdhcmUsIEluYy4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVk13YXJlIE1lbW9yeSBDb250cm9sIChCYWxsb29uKSBEcml2ZXIiKTsKLU1PRFVMRV9WRVJTSU9OKCIxLjIuMS4xLWsiKTsKK01PRFVMRV9WRVJTSU9OKCIxLjIuMS4yLWsiKTsKIE1PRFVMRV9BTElBUygiZG1pOio6c3ZuVk13YXJlKjoqIik7CiBNT0RVTEVfQUxJQVMoInZtd2FyZV92bW1lbWN0bCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtMzE1LDcgKzMxNSw4IEBACiAgKiBmZWFyIHRoYXQgZ3Vlc3Qgd2lsbCBuZWVkIGl0LiBIb3N0IG1heSByZWplY3Qgc29tZSBwYWdlcywgd2UgbmVlZCB0bwogICogY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBhbmQgbWF5YmUgc3VibWl0IGEgZGlmZmVyZW50IHBhZ2UuCiAgKi8KLXN0YXRpYyBib29sIHZtYmFsbG9vbl9zZW5kX2xvY2tfcGFnZShzdHJ1Y3Qgdm1iYWxsb29uICpiLCB1bnNpZ25lZCBsb25nIHBmbikKK3N0YXRpYyBib29sIHZtYmFsbG9vbl9zZW5kX2xvY2tfcGFnZShzdHJ1Y3Qgdm1iYWxsb29uICpiLCB1bnNpZ25lZCBsb25nIHBmbiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCAqaHZfc3RhdHVzKQogewogCXVuc2lnbmVkIGxvbmcgc3RhdHVzLCBkdW1teTsKIAl1MzIgcGZuMzI7CkBAIC0zMjYsNyArMzI3LDcgQEAKIAogCVNUQVRTX0lOQyhiLT5zdGF0cy5sb2NrKTsKIAotCXN0YXR1cyA9IFZNV0FSRV9CQUxMT09OX0NNRChMT0NLLCBwZm4sIGR1bW15KTsKKwkqaHZfc3RhdHVzID0gc3RhdHVzID0gVk1XQVJFX0JBTExPT05fQ01EKExPQ0ssIHBmbiwgZHVtbXkpOwogCWlmICh2bWJhbGxvb25fY2hlY2tfc3RhdHVzKGIsIHN0YXR1cykpCiAJCXJldHVybiB0cnVlOwogCkBAIC00MTAsNiArNDExLDcgQEAKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlnZnBfdCBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHZfc3RhdHVzOwogCWJvb2wgbG9ja2VkID0gZmFsc2U7CiAKIAlkbyB7CkBAIC00MjksMTEgKzQzMSwxMiBAQAogCQl9CiAKIAkJLyogaW5mb3JtIG1vbml0b3IgKi8KLQkJbG9ja2VkID0gdm1iYWxsb29uX3NlbmRfbG9ja19wYWdlKGIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKKwkJbG9ja2VkID0gdm1iYWxsb29uX3NlbmRfbG9ja19wYWdlKGIsIHBhZ2VfdG9fcGZuKHBhZ2UpLCAmaHZfc3RhdHVzKTsKIAkJaWYgKCFsb2NrZWQpIHsKIAkJCVNUQVRTX0lOQyhiLT5zdGF0cy5yZWZ1c2VkX2FsbG9jKTsKIAotCQkJaWYgKGItPnJlc2V0X3JlcXVpcmVkKSB7CisJCQlpZiAoaHZfc3RhdHVzID09IFZNV19CQUxMT09OX0VSUk9SX1JFU0VUIHx8CisJCQkgICAgaHZfc3RhdHVzID09IFZNV19CQUxMT09OX0VSUk9SX1BQTl9OT1RORUVERUQpIHsKIAkJCQlfX2ZyZWVfcGFnZShwYWdlKTsKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2NhcmQvS2NvbmZpZwppbmRleCA1N2U0NDE2Li4yYTg3NmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9LY29uZmlnCkBAIC0xNiw2ICsxNiw3IEBACiAKIGNvbmZpZyBNTUNfQkxPQ0tfTUlOT1JTCiAJaW50ICJOdW1iZXIgb2YgbWlub3JzIHBlciBibG9jayBkZXZpY2UiCisJZGVwZW5kcyBvbiBNTUNfQkxPQ0sKIAlyYW5nZSA0IDI1NgogCWRlZmF1bHQgOAogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYyBiL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYwppbmRleCAyMTdmODIwLi5iZmM4YThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCkBAIC0yNTcsNyArMjU3LDcgQEAKIAljbWQuZmxhZ3MgPSBNTUNfUlNQX1NQSV9SMiB8IE1NQ19SU1BfUjEgfCBNTUNfQ01EX0FDOwogCWVyciA9IG1tY193YWl0X2Zvcl9jbWQoY2FyZC0+aG9zdCwgJmNtZCwgMCk7CiAJaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgc2VuZGluZyBzdGF0dXMgY29tYW5kIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgc2VuZGluZyBzdGF0dXMgY29tbWFuZCIsCiAJCSAgICAgICByZXEtPnJxX2Rpc2stPmRpc2tfbmFtZSwgZXJyKTsKIAlyZXR1cm4gY21kLnJlc3BbMF07CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL0tjb25maWcgYi9kcml2ZXJzL21tYy9jb3JlL0tjb25maWcKaW5kZXggYmIyMmZmZC4uZWYxMDM4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvS2NvbmZpZwpAQCAtMTYsMyArMTYsMTQgQEAKIAogCSAgVGhpcyBvcHRpb24gc2V0cyBhIGRlZmF1bHQgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlCiAJICBtb2R1bGUgcGFyYW1ldGVyICJyZW1vdmFibGU9MCIgb3IgInJlbW92YWJsZT0xIi4KKworY29uZmlnIE1NQ19DTEtHQVRFCisJYm9vbCAiTU1DIGhvc3QgY2xvY2sgZ2F0aW5nIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJaGVscAorCSAgVGhpcyB3aWxsIGF0dGVtcHQgdG8gYWdncmVzc2l2ZWx5IGdhdGUgdGhlIGNsb2NrIHRvIHRoZSBNTUMgY2FyZC4KKwkgIFRoaXMgaXMgZG9uZSB0byBzYXZlIHBvd2VyIGR1ZSB0byBnYXRpbmcgb2ZmIHRoZSBsb2dpYyBhbmQgYnVzCisJICBub2lzZSB3aGVuIHRoZSBNTUMgY2FyZCBpcyBub3QgaW4gdXNlLiBZb3VyIGhvc3QgZHJpdmVyIGhhcyB0bworCSAgc3VwcG9ydCBoYW5kbGluZyB0aGlzIGluIG9yZGVyIGZvciBpdCB0byBiZSBvZiBhbnkgdXNlLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9idXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKaW5kZXggYWY4ZGM2YS4uNjM2NjdhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9idXMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCkBAIC0zMDMsMTQgKzMwMywxNCBAQAogCQkJdHlwZSwgY2FyZC0+cmNhKTsKIAl9CiAKLQlyZXQgPSBkZXZpY2VfYWRkKCZjYXJkLT5kZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIAltbWNfYWRkX2NhcmRfZGVidWdmcyhjYXJkKTsKICNlbmRpZgogCisJcmV0ID0gZGV2aWNlX2FkZCgmY2FyZC0+ZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJbW1jX2NhcmRfc2V0X3ByZXNlbnQoY2FyZCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKaW5kZXggYTNhNzgwZi4uNjYyNWMwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CkBAIC0xMzAsNiArMTMxLDggQEAKIAogCQlpZiAobXJxLT5kb25lKQogCQkJbXJxLT5kb25lKG1ycSk7CisKKwkJbW1jX2hvc3RfY2xrX2dhdGUoaG9zdCk7CiAJfQogfQogCkBAIC0xOTAsNiArMTkzLDcgQEAKIAkJCW1ycS0+c3RvcC0+bXJxID0gbXJxOwogCQl9CiAJfQorCW1tY19ob3N0X2Nsa191bmdhdGUoaG9zdCk7CiAJaG9zdC0+b3BzLT5yZXF1ZXN0KGhvc3QsIG1ycSk7CiB9CiAKQEAgLTI5NSw4ICsyOTksOSBAQAogCQl1bnNpZ25lZCBpbnQgdGltZW91dF91cywgbGltaXRfdXM7CiAKIAkJdGltZW91dF91cyA9IGRhdGEtPnRpbWVvdXRfbnMgLyAxMDAwOwotCQl0aW1lb3V0X3VzICs9IGRhdGEtPnRpbWVvdXRfY2xrcyAqIDEwMDAgLwotCQkJKGNhcmQtPmhvc3QtPmlvcy5jbG9jayAvIDEwMDApOworCQlpZiAobW1jX2hvc3RfY2xrX3JhdGUoY2FyZC0+aG9zdCkpCisJCQl0aW1lb3V0X3VzICs9IGRhdGEtPnRpbWVvdXRfY2xrcyAqIDEwMDAgLworCQkJCShtbWNfaG9zdF9jbGtfcmF0ZShjYXJkLT5ob3N0KSAvIDEwMDApOwogCiAJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQogCQkJLyoKQEAgLTYxNCw2ICs2MTksOCBAQAogCQkgaW9zLT5wb3dlcl9tb2RlLCBpb3MtPmNoaXBfc2VsZWN0LCBpb3MtPnZkZCwKIAkJIGlvcy0+YnVzX3dpZHRoLCBpb3MtPnRpbWluZyk7CiAKKwlpZiAoaW9zLT5jbG9jayA+IDApCisJCW1tY19zZXRfdW5nYXRlZChob3N0KTsKIAlob3N0LT5vcHMtPnNldF9pb3MoaG9zdCwgaW9zKTsKIH0KIApAQCAtNjQxLDYgKzY0OCw2MSBAQAogCW1tY19zZXRfaW9zKGhvc3QpOwogfQogCisjaWZkZWYgQ09ORklHX01NQ19DTEtHQVRFCisvKgorICogVGhpcyBnYXRlcyB0aGUgY2xvY2sgYnkgc2V0dGluZyBpdCB0byAwIEh6LgorICovCit2b2lkIG1tY19nYXRlX2Nsb2NrKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmNsa19sb2NrLCBmbGFncyk7CisJaG9zdC0+Y2xrX29sZCA9IGhvc3QtPmlvcy5jbG9jazsKKwlob3N0LT5pb3MuY2xvY2sgPSAwOworCWhvc3QtPmNsa19nYXRlZCA9IHRydWU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+Y2xrX2xvY2ssIGZsYWdzKTsKKwltbWNfc2V0X2lvcyhob3N0KTsKK30KKworLyoKKyAqIFRoaXMgcmVzdG9yZXMgdGhlIGNsb2NrIGZyb20gZ2F0aW5nIGJ5IHVzaW5nIHRoZSBjYWNoZWQKKyAqIGNsb2NrIHZhbHVlLgorICovCit2b2lkIG1tY191bmdhdGVfY2xvY2soc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCS8qCisJICogV2Ugc2hvdWxkIHByZXZpb3VzbHkgaGF2ZSBnYXRlZCB0aGUgY2xvY2ssIHNvIHRoZSBjbG9jayBzaGFsbAorCSAqIGJlIDAgaGVyZSEgVGhlIGNsb2NrIG1heSBob3dldmVyIGJlIDAgZHVyaW5nIGluaXRpYWxpemF0aW9uLAorCSAqIHdoZW4gc29tZSByZXF1ZXN0IG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBiZWZvcmUgc2V0dGluZworCSAqIHRoZSBmcmVxdWVuY3kuIFdoZW4gdW5nYXRlIGlzIHJlcXVlc3RlZCBpbiB0aGF0IHNpdHVhdGlvbgorCSAqIHdlIGp1c3QgaWdub3JlIHRoZSBjYWxsLgorCSAqLworCWlmIChob3N0LT5jbGtfb2xkKSB7CisJCUJVR19PTihob3N0LT5pb3MuY2xvY2spOworCQkvKiBUaGlzIGNhbGwgd2lsbCBhbHNvIHNldCBob3N0LT5jbGtfZ2F0ZWQgdG8gZmFsc2UgKi8KKwkJbW1jX3NldF9jbG9jayhob3N0LCBob3N0LT5jbGtfb2xkKTsKKwl9Cit9CisKK3ZvaWQgbW1jX3NldF91bmdhdGVkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBXZSd2ZSBiZWVuIGdpdmVuIGEgbmV3IGZyZXF1ZW5jeSB3aGlsZSB0aGUgY2xvY2sgaXMgZ2F0ZWQsCisJICogc28gbWFrZSBzdXJlIHdlIHJlZ2FyZCB0aGlzIGFzIHVuZ2F0aW5nIGl0LgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5jbGtfbG9jaywgZmxhZ3MpOworCWhvc3QtPmNsa19nYXRlZCA9IGZhbHNlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmNsa19sb2NrLCBmbGFncyk7Cit9CisKKyNlbHNlCit2b2lkIG1tY19zZXRfdW5nYXRlZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7Cit9CisjZW5kaWYKKwogLyoKICAqIENoYW5nZSB0aGUgYnVzIG1vZGUgKG9wZW4gZHJhaW4vcHVzaC1wdWxsKSBvZiBhIGhvc3QuCiAgKi8KQEAgLTE0MjQsMzUgKzE0ODYsNTcgQEAKIH0KIEVYUE9SVF9TWU1CT0wobW1jX3NldF9ibG9ja2xlbik7CiAKK3N0YXRpYyBpbnQgbW1jX3Jlc2Nhbl90cnlfZnJlcShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGZyZXEpCit7CisJaG9zdC0+Zl9pbml0ID0gZnJlcTsKKworI2lmZGVmIENPTkZJR19NTUNfREVCVUcKKwlwcl9pbmZvKCIlczogJXM6IHRyeWluZyB0byBpbml0IGNhcmQgYXQgJXUgSHpcbiIsCisJCW1tY19ob3N0bmFtZShob3N0KSwgX19mdW5jX18sIGhvc3QtPmZfaW5pdCk7CisjZW5kaWYKKwltbWNfcG93ZXJfdXAoaG9zdCk7CisJc2Rpb19yZXNldChob3N0KTsKKwltbWNfZ29faWRsZShob3N0KTsKKworCW1tY19zZW5kX2lmX2NvbmQoaG9zdCwgaG9zdC0+b2NyX2F2YWlsKTsKKworCS8qIE9yZGVyJ3MgaW1wb3J0YW50OiBwcm9iZSBTRElPLCB0aGVuIFNELCB0aGVuIE1NQyAqLworCWlmICghbW1jX2F0dGFjaF9zZGlvKGhvc3QpKQorCQlyZXR1cm4gMDsKKwlpZiAoIW1tY19hdHRhY2hfc2QoaG9zdCkpCisJCXJldHVybiAwOworCWlmICghbW1jX2F0dGFjaF9tbWMoaG9zdCkpCisJCXJldHVybiAwOworCisJbW1jX3Bvd2VyX29mZihob3N0KTsKKwlyZXR1cm4gLUVJTzsKK30KKwogdm9pZCBtbWNfcmVzY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgZnJlcXNbXSA9IHsgNDAwMDAwLCAzMDAwMDAsIDIwMDAwMCwgMTAwMDAwIH07CiAJc3RydWN0IG1tY19ob3N0ICpob3N0ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtbWNfaG9zdCwgZGV0ZWN0LndvcmspOwotCXUzMiBvY3I7Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwotCWNvbnN0IHVuc2lnbmVkIGZyZXFzW10gPSB7IDQwMDAwMCwgMzAwMDAwLCAyMDAwMDAsIDEwMDAwMCB9OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChob3N0LT5yZXNjYW5fZGlzYWJsZSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJaWYgKGhvc3QtPnJlc2Nhbl9kaXNhYmxlKQogCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwotCiAKIAltbWNfYnVzX2dldChob3N0KTsKIAotCS8qIGlmIHRoZXJlIGlzIGEgY2FyZCByZWdpc3RlcmVkLCBjaGVjayB3aGV0aGVyIGl0IGlzIHN0aWxsIHByZXNlbnQgKi8KLQlpZiAoKGhvc3QtPmJ1c19vcHMgIT0gTlVMTCkgJiYgaG9zdC0+YnVzX29wcy0+ZGV0ZWN0ICYmICFob3N0LT5idXNfZGVhZCkKKwkvKgorCSAqIGlmIHRoZXJlIGlzIGEgX3JlbW92YWJsZV8gY2FyZCByZWdpc3RlcmVkLCBjaGVjayB3aGV0aGVyIGl0IGlzCisJICogc3RpbGwgcHJlc2VudAorCSAqLworCWlmIChob3N0LT5idXNfb3BzICYmIGhvc3QtPmJ1c19vcHMtPmRldGVjdCAmJiAhaG9zdC0+YnVzX2RlYWQKKwkgICAgJiYgbW1jX2NhcmRfaXNfcmVtb3ZhYmxlKGhvc3QpKQogCQlob3N0LT5idXNfb3BzLT5kZXRlY3QoaG9zdCk7CiAKKwkvKgorCSAqIExldCBtbWNfYnVzX3B1dCgpIGZyZWUgdGhlIGJ1cy9idXNfb3BzIGlmIHdlJ3ZlIGZvdW5kIHRoYXQKKwkgKiB0aGUgY2FyZCBpcyBubyBsb25nZXIgcHJlc2VudC4KKwkgKi8KIAltbWNfYnVzX3B1dChob3N0KTsKLQotCiAJbW1jX2J1c19nZXQoaG9zdCk7CiAKIAkvKiBpZiB0aGVyZSBzdGlsbCBpcyBhIGNhcmQgcHJlc2VudCwgc3RvcCBoZXJlICovCkBAIC0xNDYxLDggKzE1NDUsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQkvKiBkZXRlY3QgYSBuZXdseSBpbnNlcnRlZCBjYXJkICovCi0KIAkvKgogCSAqIE9ubHkgd2UgY2FuIGFkZCBhIG5ldyBoYW5kbGVyLCBzbyBpdCdzIHNhZmUgdG8KIAkgKiByZWxlYXNlIHRoZSBsb2NrIGhlcmUuCkBAIC0xNDcyLDcyICsxNTU0LDE2IEBACiAJaWYgKGhvc3QtPm9wcy0+Z2V0X2NkICYmIGhvc3QtPm9wcy0+Z2V0X2NkKGhvc3QpID09IDApCiAJCWdvdG8gb3V0OwogCisJbW1jX2NsYWltX2hvc3QoaG9zdCk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZnJlcXMpOyBpKyspIHsKLQkJbW1jX2NsYWltX2hvc3QoaG9zdCk7Ci0KLQkJaWYgKGZyZXFzW2ldID49IGhvc3QtPmZfbWluKQotCQkJaG9zdC0+Zl9pbml0ID0gZnJlcXNbaV07Ci0JCWVsc2UgaWYgKCFpIHx8IGZyZXFzW2ktMV0gPiBob3N0LT5mX21pbikKLQkJCWhvc3QtPmZfaW5pdCA9IGhvc3QtPmZfbWluOwotCQllbHNlIHsKLQkJCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotI2lmZGVmIENPTkZJR19NTUNfREVCVUcKLQkJcHJfaW5mbygiJXM6ICVzOiB0cnlpbmcgdG8gaW5pdCBjYXJkIGF0ICV1IEh6XG4iLAotCQkJbW1jX2hvc3RuYW1lKGhvc3QpLCBfX2Z1bmNfXywgaG9zdC0+Zl9pbml0KTsKLSNlbmRpZgotCQltbWNfcG93ZXJfdXAoaG9zdCk7Ci0JCXNkaW9fcmVzZXQoaG9zdCk7Ci0JCW1tY19nb19pZGxlKGhvc3QpOwotCi0JCW1tY19zZW5kX2lmX2NvbmQoaG9zdCwgaG9zdC0+b2NyX2F2YWlsKTsKLQotCQkvKgotCQkgKiBGaXJzdCB3ZSBzZWFyY2ggZm9yIFNESU8uLi4KLQkJICovCi0JCWVyciA9IG1tY19zZW5kX2lvX29wX2NvbmQoaG9zdCwgMCwgJm9jcik7Ci0JCWlmICghZXJyKSB7Ci0JCQlpZiAobW1jX2F0dGFjaF9zZGlvKGhvc3QsIG9jcikpIHsKLQkJCQltbWNfY2xhaW1faG9zdChob3N0KTsKLQkJCQkvKgotCQkJCSAqIFRyeSBTRE1FTSAoYnV0IG5vdCBNTUMpIGV2ZW4gaWYgU0RJTwotCQkJCSAqIGlzIGJyb2tlbi4KLQkJCQkgKi8KLQkJCQlpZiAobW1jX3NlbmRfYXBwX29wX2NvbmQoaG9zdCwgMCwgJm9jcikpCi0JCQkJCWdvdG8gb3V0X2ZhaWw7Ci0KLQkJCQlpZiAobW1jX2F0dGFjaF9zZChob3N0LCBvY3IpKQotCQkJCQltbWNfcG93ZXJfb2ZmKGhvc3QpOwotCQkJfQotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKgotCQkgKiAuLi50aGVuIG5vcm1hbCBTRC4uLgotCQkgKi8KLQkJZXJyID0gbW1jX3NlbmRfYXBwX29wX2NvbmQoaG9zdCwgMCwgJm9jcik7Ci0JCWlmICghZXJyKSB7Ci0JCQlpZiAobW1jX2F0dGFjaF9zZChob3N0LCBvY3IpKQotCQkJCW1tY19wb3dlcl9vZmYoaG9zdCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qCi0JCSAqIC4uLmFuZCBmaW5hbGx5IE1NQy4KLQkJICovCi0JCWVyciA9IG1tY19zZW5kX29wX2NvbmQoaG9zdCwgMCwgJm9jcik7Ci0JCWlmICghZXJyKSB7Ci0JCQlpZiAobW1jX2F0dGFjaF9tbWMoaG9zdCwgb2NyKSkKLQkJCQltbWNfcG93ZXJfb2ZmKGhvc3QpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotb3V0X2ZhaWw6Ci0JCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7Ci0JCW1tY19wb3dlcl9vZmYoaG9zdCk7CisJCWlmICghbW1jX3Jlc2Nhbl90cnlfZnJlcShob3N0LCBtYXgoZnJlcXNbaV0sIGhvc3QtPmZfbWluKSkpCisJCQlicmVhazsKKwkJaWYgKGZyZXFzW2ldIDwgaG9zdC0+Zl9taW4pCisJCQlicmVhazsKIAl9Ci1vdXQ6CisJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKKworIG91dDoKIAlpZiAoaG9zdC0+Y2FwcyAmIE1NQ19DQVBfTkVFRFNfUE9MTCkKIAkJbW1jX3NjaGVkdWxlX2RlbGF5ZWRfd29yaygmaG9zdC0+ZGV0ZWN0LCBIWik7CiB9CkBAIC0xNzIxLDYgKzE3NDcsMTggQEAKIAkJaWYgKCEoaG9zdC0+cG1fZmxhZ3MgJiBNTUNfUE1fS0VFUF9QT1dFUikpIHsKIAkJCW1tY19wb3dlcl91cChob3N0KTsKIAkJCW1tY19zZWxlY3Rfdm9sdGFnZShob3N0LCBob3N0LT5vY3IpOworCQkJLyoKKwkJCSAqIFRlbGwgcnVudGltZSBQTSBjb3JlIHdlIGp1c3QgcG93ZXJlZCB1cCB0aGUgY2FyZCwKKwkJCSAqIHNpbmNlIGl0IHN0aWxsIGJlbGlldmVzIHRoZSBjYXJkIGlzIHBvd2VyZWQgb2ZmLgorCQkJICogTm90ZSB0aGF0IGN1cnJlbnRseSBydW50aW1lIFBNIGlzIG9ubHkgZW5hYmxlZAorCQkJICogZm9yIFNESU8gY2FyZHMgdGhhdCBhcmUgTU1DX0NBUF9QT1dFUl9PRkZfQ0FSRAorCQkJICovCisJCQlpZiAobW1jX2NhcmRfc2Rpbyhob3N0LT5jYXJkKSAmJgorCQkJICAgIChob3N0LT5jYXBzICYgTU1DX0NBUF9QT1dFUl9PRkZfQ0FSRCkpIHsKKwkJCQlwbV9ydW50aW1lX2Rpc2FibGUoJmhvc3QtPmNhcmQtPmRldik7CisJCQkJcG1fcnVudGltZV9zZXRfYWN0aXZlKCZob3N0LT5jYXJkLT5kZXYpOworCQkJCXBtX3J1bnRpbWVfZW5hYmxlKCZob3N0LT5jYXJkLT5kZXYpOworCQkJfQogCQl9CiAJCUJVR19PTighaG9zdC0+YnVzX29wcy0+cmVzdW1lKTsKIAkJZXJyID0gaG9zdC0+YnVzX29wcy0+cmVzdW1lKGhvc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmggYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaAppbmRleCA3NzI0MGNkLi5jYTFmZGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaAorKysgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaApAQCAtMzMsNiArMzMsOSBAQAogCiB2b2lkIG1tY19zZXRfY2hpcF9zZWxlY3Qoc3RydWN0IG1tY19ob3N0ICpob3N0LCBpbnQgbW9kZSk7CiB2b2lkIG1tY19zZXRfY2xvY2soc3RydWN0IG1tY19ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgaHopOwordm9pZCBtbWNfZ2F0ZV9jbG9jayhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwordm9pZCBtbWNfdW5nYXRlX2Nsb2NrKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7Cit2b2lkIG1tY19zZXRfdW5nYXRlZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwogdm9pZCBtbWNfc2V0X2J1c19tb2RlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IG1vZGUpOwogdm9pZCBtbWNfc2V0X2J1c193aWR0aChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCB3aWR0aCk7CiB2b2lkIG1tY19zZXRfYnVzX3dpZHRoX2RkcihzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCB3aWR0aCwKQEAgLTU0LDkgKzU3LDkgQEAKIHZvaWQgbW1jX3N0YXJ0X2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKIHZvaWQgbW1jX3N0b3BfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwogCi1pbnQgbW1jX2F0dGFjaF9tbWMoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1MzIgb2NyKTsKLWludCBtbWNfYXR0YWNoX3NkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdTMyIG9jcik7Ci1pbnQgbW1jX2F0dGFjaF9zZGlvKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdTMyIG9jcik7CitpbnQgbW1jX2F0dGFjaF9tbWMoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKK2ludCBtbWNfYXR0YWNoX3NkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CitpbnQgbW1jX2F0dGFjaF9zZGlvKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCiBleHRlcm4gaW50IHVzZV9zcGlfY3JjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYwppbmRleCBlZWQxNDA1Li45OTg3OTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYwpAQCAtMTgzLDYgKzE4MywxMSBAQAogCQkJJm1tY19jbG9ja19mb3BzKSkKIAkJZ290byBlcnJfbm9kZTsKIAorI2lmZGVmIENPTkZJR19NTUNfQ0xLR0FURQorCWlmICghZGVidWdmc19jcmVhdGVfdTMyKCJjbGtfZGVsYXkiLCAoU19JUlVTUiB8IFNfSVdVU1IpLAorCQkJCXJvb3QsICZob3N0LT5jbGtfZGVsYXkpKQorCQlnb3RvIGVycl9ub2RlOworI2VuZGlmCiAJcmV0dXJuOwogCiBlcnJfbm9kZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jIGIvZHJpdmVycy9tbWMvY29yZS9ob3N0LmMKaW5kZXggMTBiOGFmMi4uYjNhYzZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9ob3N0LmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9ob3N0LmMKQEAgLTMsNiArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMyBSdXNzZWxsIEtpbmcsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggUGllcnJlIE9zc21hbgorICogIENvcHlyaWdodCAoQykgMjAxMCBMaW51cyBXYWxsZWlqCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yMCw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogCiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgogCiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgImhvc3QuaCIKQEAgLTUwLDYgKzUyLDIwNSBAQAogc3RhdGljIERFRklORV9JRFIobW1jX2hvc3RfaWRyKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobW1jX2hvc3RfbG9jayk7CiAKKyNpZmRlZiBDT05GSUdfTU1DX0NMS0dBVEUKKworLyoKKyAqIEVuYWJsaW5nIGNsb2NrIGdhdGluZyB3aWxsIG1ha2UgdGhlIGNvcmUgY2FsbCBvdXQgdG8gdGhlIGhvc3QKKyAqIG9uY2UgdXAgYW5kIG9uY2UgZG93biB3aGVuIGl0IHBlcmZvcm1zIGEgcmVxdWVzdCBvciBjYXJkIG9wZXJhdGlvbgorICogaW50ZXJtaW5nbGVkIGluIGFueSBmYXNoaW9uLiBUaGUgZHJpdmVyIHdpbGwgc2VlIHRoaXMgdGhyb3VnaAorICogc2V0X2lvcygpIG9wZXJhdGlvbnMgd2l0aCBpb3MuY2xvY2sgZmllbGQgc2V0IHRvIDAgdG8gZ2F0ZSAoZGlzYWJsZSkKKyAqIHRoZSBibG9jayBjbG9jaywgYW5kIHRvIHRoZSBvbGQgZnJlcXVlbmN5IHRvIGVuYWJsZSBpdCBhZ2Fpbi4KKyAqLworc3RhdGljIHZvaWQgbW1jX2hvc3RfY2xrX2dhdGVfZGVsYXllZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJdW5zaWduZWQgbG9uZyB0aWNrX25zOworCXVuc2lnbmVkIGxvbmcgZnJlcSA9IGhvc3QtPmlvcy5jbG9jazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFmcmVxKSB7CisJCXByX2RlYnVnKCIlczogZnJlcXVlbmN5IHNldCB0byAwIGluIGRpc2FibGUgZnVuY3Rpb24sICIKKwkJCSAidGhpcyBtZWFucyB0aGUgY2xvY2sgaXMgYWxyZWFkeSBkaXNhYmxlZC5cbiIsCisJCQkgbW1jX2hvc3RuYW1lKGhvc3QpKTsKKwkJcmV0dXJuOworCX0KKwkvKgorCSAqIE5ldyByZXF1ZXN0cyBtYXkgaGF2ZSBhcHBlYXJlZCB3aGlsZSB3ZSB3ZXJlIHNjaGVkdWxpbmcsCisJICogdGhlbiB0aGVyZSBpcyBubyByZWFzb24gdG8gZGVsYXkgdGhlIGNoZWNrIGJlZm9yZQorCSAqIGNsa19kaXNhYmxlKCkuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmNsa19sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIERlbGF5IG4gYnVzIGN5Y2xlcyAoYXQgbGVhc3QgOCBmcm9tIE1NQyBzcGVjKSBiZWZvcmUgYXR0ZW1wdGluZworCSAqIHRvIGRpc2FibGUgdGhlIE1DSSBibG9jayBjbG9jay4gVGhlIHJlZmVyZW5jZSBjb3VudCBtYXkgaGF2ZQorCSAqIGdvbmUgdXAgYWdhaW4gYWZ0ZXIgdGhpcyBkZWxheSBkdWUgdG8gcmVzY2hlZHVsaW5nIQorCSAqLworCWlmICghaG9zdC0+Y2xrX3JlcXVlc3RzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmNsa19sb2NrLCBmbGFncyk7CisJCXRpY2tfbnMgPSBESVZfUk9VTkRfVVAoMTAwMDAwMDAwMCwgZnJlcSk7CisJCW5kZWxheShob3N0LT5jbGtfZGVsYXkgKiB0aWNrX25zKTsKKwl9IGVsc2UgeworCQkvKiBOZXcgdXNlcnMgYXBwZWFyZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhpcyB3b3JrICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmNsa19sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJbXV0ZXhfbG9jaygmaG9zdC0+Y2xrX2dhdGVfbXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5jbGtfbG9jaywgZmxhZ3MpOworCWlmICghaG9zdC0+Y2xrX3JlcXVlc3RzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmNsa19sb2NrLCBmbGFncyk7CisJCS8qIFRoaXMgd2lsbCBzZXQgaG9zdC0+aW9zLmNsb2NrIHRvIDAgKi8KKwkJbW1jX2dhdGVfY2xvY2soaG9zdCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5jbGtfbG9jaywgZmxhZ3MpOworCQlwcl9kZWJ1ZygiJXM6IGdhdGVkIE1DSSBjbG9ja1xuIiwgbW1jX2hvc3RuYW1lKGhvc3QpKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+Y2xrX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmhvc3QtPmNsa19nYXRlX211dGV4KTsKK30KKworLyoKKyAqIEludGVybmFsIHdvcmsuIFdvcmsgdG8gZGlzYWJsZSB0aGUgY2xvY2sgYXQgc29tZSBsYXRlciBwb2ludC4KKyAqLworc3RhdGljIHZvaWQgbW1jX2hvc3RfY2xrX2dhdGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG1tY19ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtbWNfaG9zdCwKKwkJCQkJICAgICAgY2xrX2dhdGVfd29yayk7CisKKwltbWNfaG9zdF9jbGtfZ2F0ZV9kZWxheWVkKGhvc3QpOworfQorCisvKioKKyAqCW1tY19ob3N0X2Nsa191bmdhdGUgLSB1bmdhdGUgaGFyZHdhcmUgTUNJIGNsb2NrcworICoJQGhvc3Q6IGhvc3QgdG8gdW5nYXRlLgorICoKKyAqCU1ha2VzIHN1cmUgdGhlIGhvc3QgaW9zLmNsb2NrIGlzIHJlc3RvcmVkIHRvIGEgbm9uLXplcm8gdmFsdWUKKyAqCXBhc3QgdGhpcyBjYWxsLglJbmNyZWFzZSBjbG9jayByZWZlcmVuY2UgY291bnQgYW5kIHVuZ2F0ZSBjbG9jaworICoJaWYgd2UncmUgdGhlIGZpcnN0IHVzZXIuCisgKi8KK3ZvaWQgbW1jX2hvc3RfY2xrX3VuZ2F0ZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW11dGV4X2xvY2soJmhvc3QtPmNsa19nYXRlX211dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+Y2xrX2xvY2ssIGZsYWdzKTsKKwlpZiAoaG9zdC0+Y2xrX2dhdGVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmNsa19sb2NrLCBmbGFncyk7CisJCW1tY191bmdhdGVfY2xvY2soaG9zdCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5jbGtfbG9jaywgZmxhZ3MpOworCQlwcl9kZWJ1ZygiJXM6IHVuZ2F0ZWQgTUNJIGNsb2NrXG4iLCBtbWNfaG9zdG5hbWUoaG9zdCkpOworCX0KKwlob3N0LT5jbGtfcmVxdWVzdHMrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5jbGtfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmaG9zdC0+Y2xrX2dhdGVfbXV0ZXgpOworfQorCisvKioKKyAqCW1tY19ob3N0X21heV9nYXRlX2NhcmQgLSBjaGVjayBpZiB0aGlzIGNhcmQgbWF5IGJlIGdhdGVkCisgKglAY2FyZDogY2FyZCB0byBjaGVjay4KKyAqLworc3RhdGljIGJvb2wgbW1jX2hvc3RfbWF5X2dhdGVfY2FyZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCit7CisJLyogSWYgdGhlcmUgaXMgbm8gY2FyZCB3ZSBtYXkgZ2F0ZSBpdCAqLworCWlmICghY2FyZCkKKwkJcmV0dXJuIHRydWU7CisJLyoKKwkgKiBEb24ndCBnYXRlIFNESU8gY2FyZHMhIFRoZXNlIG5lZWQgdG8gYmUgY2xvY2tlZCBhdCBhbGwgdGltZXMKKwkgKiBzaW5jZSB0aGV5IG1heSBiZSBpbmRlcGVuZGVudCBzeXN0ZW1zIGdlbmVyYXRpbmcgaW50ZXJydXB0cworCSAqIGFuZCBvdGhlciBldmVudHMuIFRoZSBjbG9jayByZXF1ZXN0cyBjb3VudGVyIGZyb20gdGhlIGNvcmUgd2lsbAorCSAqIGdvIGRvd24gdG8gemVybyBzaW5jZSB0aGUgY29yZSBkb2VzIG5vdCBuZWVkIGl0LCBidXQgd2Ugd2lsbCBub3QKKwkgKiBnYXRlIHRoZSBjbG9jaywgYmVjYXVzZSB0aGVyZSBpcyBzb21lYm9keSBvdXQgdGhlcmUgdGhhdCBtYXkgc3RpbGwKKwkgKiBiZSB1c2luZyBpdC4KKwkgKi8KKwlpZiAobW1jX2NhcmRfc2RpbyhjYXJkKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICoJbW1jX2hvc3RfY2xrX2dhdGUgLSBnYXRlIG9mZiBoYXJkd2FyZSBNQ0kgY2xvY2tzCisgKglAaG9zdDogaG9zdCB0byBnYXRlLgorICoKKyAqCUNhbGxzIHRoZSBob3N0IGRyaXZlciB3aXRoIGlvcy5jbG9jayBzZXQgdG8gemVybyBhcyBvZnRlbiBhcyBwb3NzaWJsZQorICoJaW4gb3JkZXIgdG8gZ2F0ZSBvZmYgaGFyZHdhcmUgTUNJIGNsb2Nrcy4gRGVjcmVhc2UgY2xvY2sgcmVmZXJlbmNlCisgKgljb3VudCBhbmQgc2NoZWR1bGUgZGlzYWJsaW5nIG9mIGNsb2NrLgorICovCit2b2lkIG1tY19ob3N0X2Nsa19nYXRlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmNsa19sb2NrLCBmbGFncyk7CisJaG9zdC0+Y2xrX3JlcXVlc3RzLS07CisJaWYgKG1tY19ob3N0X21heV9nYXRlX2NhcmQoaG9zdC0+Y2FyZCkgJiYKKwkgICAgIWhvc3QtPmNsa19yZXF1ZXN0cykKKwkJc2NoZWR1bGVfd29yaygmaG9zdC0+Y2xrX2dhdGVfd29yayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+Y2xrX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKgltbWNfaG9zdF9jbGtfcmF0ZSAtIGdldCBjdXJyZW50IGNsb2NrIGZyZXF1ZW5jeSBzZXR0aW5nCisgKglAaG9zdDogaG9zdCB0byBnZXQgdGhlIGNsb2NrIGZyZXF1ZW5jeSBmb3IuCisgKgorICoJUmV0dXJucyBjdXJyZW50IGNsb2NrIGZyZXF1ZW5jeSByZWdhcmRsZXNzIG9mIGdhdGluZy4KKyAqLwordW5zaWduZWQgaW50IG1tY19ob3N0X2Nsa19yYXRlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZyZXE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5jbGtfbG9jaywgZmxhZ3MpOworCWlmIChob3N0LT5jbGtfZ2F0ZWQpCisJCWZyZXEgPSBob3N0LT5jbGtfb2xkOworCWVsc2UKKwkJZnJlcSA9IGhvc3QtPmlvcy5jbG9jazsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5jbGtfbG9jaywgZmxhZ3MpOworCXJldHVybiBmcmVxOworfQorCisvKioKKyAqCW1tY19ob3N0X2Nsa19pbml0IC0gc2V0IHVwIGNsb2NrIGdhdGluZyBjb2RlCisgKglAaG9zdDogaG9zdCB3aXRoIHBvdGVudGlhbCBjbG9jayB0byBjb250cm9sCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNfaG9zdF9jbGtfaW5pdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJaG9zdC0+Y2xrX3JlcXVlc3RzID0gMDsKKwkvKiBIb2xkIE1DSSBjbG9jayBmb3IgOCBjeWNsZXMgYnkgZGVmYXVsdCAqLworCWhvc3QtPmNsa19kZWxheSA9IDg7CisJaG9zdC0+Y2xrX2dhdGVkID0gZmFsc2U7CisJSU5JVF9XT1JLKCZob3N0LT5jbGtfZ2F0ZV93b3JrLCBtbWNfaG9zdF9jbGtfZ2F0ZV93b3JrKTsKKwlzcGluX2xvY2tfaW5pdCgmaG9zdC0+Y2xrX2xvY2spOworCW11dGV4X2luaXQoJmhvc3QtPmNsa19nYXRlX211dGV4KTsKK30KKworLyoqCisgKgltbWNfaG9zdF9jbGtfZXhpdCAtIHNodXQgZG93biBjbG9jayBnYXRpbmcgY29kZQorICoJQGhvc3Q6IGhvc3Qgd2l0aCBwb3RlbnRpYWwgY2xvY2sgdG8gY29udHJvbAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbW1jX2hvc3RfY2xrX2V4aXQoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCS8qCisJICogV2FpdCBmb3IgYW55IG91dHN0YW5kaW5nIGdhdGUgYW5kIHRoZW4gbWFrZSBzdXJlIHdlJ3JlCisJICogdW5nYXRlZCBiZWZvcmUgZXhpdGluZy4KKwkgKi8KKwlpZiAoY2FuY2VsX3dvcmtfc3luYygmaG9zdC0+Y2xrX2dhdGVfd29yaykpCisJCW1tY19ob3N0X2Nsa19nYXRlX2RlbGF5ZWQoaG9zdCk7CisJaWYgKGhvc3QtPmNsa19nYXRlZCkKKwkJbW1jX2hvc3RfY2xrX3VuZ2F0ZShob3N0KTsKKwkvKiBUaGVyZSBzaG91bGQgYmUgb25seSBvbmUgdXNlciBub3cgKi8KKwlXQVJOX09OKGhvc3QtPmNsa19yZXF1ZXN0cyA+IDEpOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgbW1jX2hvc3RfY2xrX2luaXQoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbW1jX2hvc3RfY2xrX2V4aXQoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworfQorCisjZW5kaWYKKwogLyoqCiAgKgltbWNfYWxsb2NfaG9zdCAtIGluaXRpYWxpc2UgdGhlIHBlci1ob3N0IHN0cnVjdHVyZS4KICAqCUBleHRyYTogc2l6ZW9mIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKQEAgLTgyLDYgKzI4Myw4IEBACiAJaG9zdC0+Y2xhc3NfZGV2LmNsYXNzID0gJm1tY19ob3N0X2NsYXNzOwogCWRldmljZV9pbml0aWFsaXplKCZob3N0LT5jbGFzc19kZXYpOwogCisJbW1jX2hvc3RfY2xrX2luaXQoaG9zdCk7CisKIAlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaG9zdC0+d3EpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZob3N0LT5kZXRlY3QsIG1tY19yZXNjYW4pOwpAQCAtMTYzLDYgKzM2Niw4IEBACiAJZGV2aWNlX2RlbCgmaG9zdC0+Y2xhc3NfZGV2KTsKIAogCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXJfc2ltcGxlKGhvc3QtPmxlZCk7CisKKwltbWNfaG9zdF9jbGtfZXhpdChob3N0KTsKIH0KIAogRVhQT1JUX1NZTUJPTChtbWNfcmVtb3ZlX2hvc3QpOwpAQCAtMTgzLDQgKzM4OCwzIEBACiB9CiAKIEVYUE9SVF9TWU1CT0wobW1jX2ZyZWVfaG9zdCk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5oIGIvZHJpdmVycy9tbWMvY29yZS9ob3N0LmgKaW5kZXggOGM4N2UxMS4uZGUxOTlmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9ob3N0LmgKKysrIGIvZHJpdmVycy9tbWMvY29yZS9ob3N0LmgKQEAgLTEwLDEwICsxMCwzMSBAQAogICovCiAjaWZuZGVmIF9NTUNfQ09SRV9IT1NUX0gKICNkZWZpbmUgX01NQ19DT1JFX0hPU1RfSAorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAKIGludCBtbWNfcmVnaXN0ZXJfaG9zdF9jbGFzcyh2b2lkKTsKIHZvaWQgbW1jX3VucmVnaXN0ZXJfaG9zdF9jbGFzcyh2b2lkKTsKIAorI2lmZGVmIENPTkZJR19NTUNfQ0xLR0FURQordm9pZCBtbWNfaG9zdF9jbGtfdW5nYXRlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7Cit2b2lkIG1tY19ob3N0X2Nsa19nYXRlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7Cit1bnNpZ25lZCBpbnQgbW1jX2hvc3RfY2xrX3JhdGUoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNfaG9zdF9jbGtfdW5nYXRlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1tY19ob3N0X2Nsa19nYXRlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbW1jX2hvc3RfY2xrX3JhdGUoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCXJldHVybiBob3N0LT5pb3MuY2xvY2s7Cit9CisjZW5kaWYKKwogdm9pZCBtbWNfaG9zdF9kZWVwZXJfZGlzYWJsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCmluZGV4IDc3ZjkzYzMuLjE2MDA2ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWMuYwpAQCAtNTM0LDM5ICs1MzQsNTcgQEAKIAkgKi8KIAlpZiAoKGNhcmQtPmNzZC5tbWNhX3ZzbiA+PSBDU0RfU1BFQ19WRVJfNCkgJiYKIAkgICAgKGhvc3QtPmNhcHMgJiAoTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF84X0JJVF9EQVRBKSkpIHsKLQkJdW5zaWduZWQgZXh0X2NzZF9iaXQsIGJ1c193aWR0aDsKKwkJc3RhdGljIHVuc2lnbmVkIGV4dF9jc2RfYml0c1tdWzJdID0geworCQkJeyBFWFRfQ1NEX0JVU19XSURUSF84LCBFWFRfQ1NEX0REUl9CVVNfV0lEVEhfOCB9LAorCQkJeyBFWFRfQ1NEX0JVU19XSURUSF80LCBFWFRfQ1NEX0REUl9CVVNfV0lEVEhfNCB9LAorCQkJeyBFWFRfQ1NEX0JVU19XSURUSF8xLCBFWFRfQ1NEX0JVU19XSURUSF8xIH0sCisJCX07CisJCXN0YXRpYyB1bnNpZ25lZCBidXNfd2lkdGhzW10gPSB7CisJCQlNTUNfQlVTX1dJRFRIXzgsCisJCQlNTUNfQlVTX1dJRFRIXzQsCisJCQlNTUNfQlVTX1dJRFRIXzEKKwkJfTsKKwkJdW5zaWduZWQgaWR4LCBidXNfd2lkdGggPSAwOwogCi0JCWlmIChob3N0LT5jYXBzICYgTU1DX0NBUF84X0JJVF9EQVRBKSB7Ci0JCQlpZiAoZGRyKQotCQkJCWV4dF9jc2RfYml0ID0gRVhUX0NTRF9ERFJfQlVTX1dJRFRIXzg7Ci0JCQllbHNlCi0JCQkJZXh0X2NzZF9iaXQgPSBFWFRfQ1NEX0JVU19XSURUSF84OwotCQkJYnVzX3dpZHRoID0gTU1DX0JVU19XSURUSF84OwotCQl9IGVsc2UgewotCQkJaWYgKGRkcikKLQkJCQlleHRfY3NkX2JpdCA9IEVYVF9DU0RfRERSX0JVU19XSURUSF80OwotCQkJZWxzZQotCQkJCWV4dF9jc2RfYml0ID0gRVhUX0NTRF9CVVNfV0lEVEhfNDsKLQkJCWJ1c193aWR0aCA9IE1NQ19CVVNfV0lEVEhfNDsKKwkJaWYgKGhvc3QtPmNhcHMgJiBNTUNfQ0FQXzhfQklUX0RBVEEpCisJCQlpZHggPSAwOworCQllbHNlCisJCQlpZHggPSAxOworCQlmb3IgKDsgaWR4IDwgQVJSQVlfU0laRShidXNfd2lkdGhzKTsgaWR4KyspIHsKKwkJCWJ1c193aWR0aCA9IGJ1c193aWR0aHNbaWR4XTsKKwkJCWlmIChidXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF8xKQorCQkJCWRkciA9IDA7IC8qIG5vIEREUiBmb3IgMS1iaXQgd2lkdGggKi8KKwkJCWVyciA9IG1tY19zd2l0Y2goY2FyZCwgRVhUX0NTRF9DTURfU0VUX05PUk1BTCwKKwkJCQkJIEVYVF9DU0RfQlVTX1dJRFRILAorCQkJCQkgZXh0X2NzZF9iaXRzW2lkeF1bMF0pOworCQkJaWYgKCFlcnIpIHsKKwkJCQltbWNfc2V0X2J1c193aWR0aF9kZHIoY2FyZC0+aG9zdCwKKwkJCQkJCSAgICAgIGJ1c193aWR0aCwgTU1DX1NEUl9NT0RFKTsKKwkJCQkvKgorCQkJCSAqIElmIGNvbnRyb2xsZXIgY2FuJ3QgaGFuZGxlIGJ1cyB3aWR0aCB0ZXN0LAorCQkJCSAqIHVzZSB0aGUgaGlnaGVzdCBidXMgd2lkdGggdG8gbWFpbnRhaW4KKwkJCQkgKiBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgTU1DIGJlaGF2aW9yLgorCQkJCSAqLworCQkJCWlmICghKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX0JVU19XSURUSF9URVNUKSkKKwkJCQkJYnJlYWs7CisJCQkJZXJyID0gbW1jX2J1c190ZXN0KGNhcmQsIGJ1c193aWR0aCk7CisJCQkJaWYgKCFlcnIpCisJCQkJCWJyZWFrOworCQkJfQogCQl9CiAKLQkJZXJyID0gbW1jX3N3aXRjaChjYXJkLCBFWFRfQ1NEX0NNRF9TRVRfTk9STUFMLAotCQkJCSBFWFRfQ1NEX0JVU19XSURUSCwgZXh0X2NzZF9iaXQpOwotCi0JCWlmIChlcnIgJiYgZXJyICE9IC1FQkFETVNHKQotCQkJZ290byBmcmVlX2NhcmQ7Ci0KKwkJaWYgKCFlcnIgJiYgZGRyKSB7CisJCQllcnIgPSBtbWNfc3dpdGNoKGNhcmQsIEVYVF9DU0RfQ01EX1NFVF9OT1JNQUwsCisJCQkJCUVYVF9DU0RfQlVTX1dJRFRILAorCQkJCQlleHRfY3NkX2JpdHNbaWR4XVsxXSk7CisJCX0KIAkJaWYgKGVycikgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHN3aXRjaCB0byBidXMgd2lkdGggJWQgZGRyICVkICIKLQkJCSAgICAgICAiZmFpbGVkXG4iLCBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksCi0JCQkgICAgICAgMSA8PCBidXNfd2lkdGgsIGRkcik7Ci0JCQllcnIgPSAwOwotCQl9IGVsc2UgewotCQkJaWYgKGRkcikKLQkJCQltbWNfY2FyZF9zZXRfZGRyX21vZGUoY2FyZCk7Ci0JCQllbHNlCi0JCQkJZGRyID0gTU1DX1NEUl9NT0RFOwotCisJCQkJImZhaWxlZFxuIiwgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpLAorCQkJCTEgPDwgYnVzX3dpZHRoLCBkZHIpOworCQkJZ290byBmcmVlX2NhcmQ7CisJCX0gZWxzZSBpZiAoZGRyKSB7CisJCQltbWNfY2FyZF9zZXRfZGRyX21vZGUoY2FyZCk7CiAJCQltbWNfc2V0X2J1c193aWR0aF9kZHIoY2FyZC0+aG9zdCwgYnVzX3dpZHRoLCBkZHIpOwogCQl9CiAJfQpAQCAtNzM3LDE0ICs3NTUsMjEgQEAKIC8qCiAgKiBTdGFydGluZyBwb2ludCBmb3IgTU1DIGNhcmQgaW5pdC4KICAqLwotaW50IG1tY19hdHRhY2hfbW1jKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdTMyIG9jcikKK2ludCBtbWNfYXR0YWNoX21tYyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCiB7CiAJaW50IGVycjsKKwl1MzIgb2NyOwogCiAJQlVHX09OKCFob3N0KTsKIAlXQVJOX09OKCFob3N0LT5jbGFpbWVkKTsKIAorCWVyciA9IG1tY19zZW5kX29wX2NvbmQoaG9zdCwgMCwgJm9jcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCW1tY19hdHRhY2hfYnVzX29wcyhob3N0KTsKKwlpZiAoaG9zdC0+b2NyX2F2YWlsX21tYykKKwkJaG9zdC0+b2NyX2F2YWlsID0gaG9zdC0+b2NyX2F2YWlsX21tYzsKIAogCS8qCiAJICogV2UgbmVlZCB0byBnZXQgT0NSIGEgZGlmZmVyZW50IHdheSBmb3IgU1BJLgpAQCAtNzg0LDIwICs4MDksMjAgQEAKIAkJZ290byBlcnI7CiAKIAltbWNfcmVsZWFzZV9ob3N0KGhvc3QpOwotCiAJZXJyID0gbW1jX2FkZF9jYXJkKGhvc3QtPmNhcmQpOworCW1tY19jbGFpbV9ob3N0KGhvc3QpOwogCWlmIChlcnIpCiAJCWdvdG8gcmVtb3ZlX2NhcmQ7CiAKIAlyZXR1cm4gMDsKIAogcmVtb3ZlX2NhcmQ6CisJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKIAltbWNfcmVtb3ZlX2NhcmQoaG9zdC0+Y2FyZCk7Ci0JaG9zdC0+Y2FyZCA9IE5VTEw7CiAJbW1jX2NsYWltX2hvc3QoaG9zdCk7CisJaG9zdC0+Y2FyZCA9IE5VTEw7CiBlcnI6CiAJbW1jX2RldGFjaF9idXMoaG9zdCk7Ci0JbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKIAogCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHdoaWxzdCBpbml0aWFsaXNpbmcgTU1DIGNhcmRcbiIsCiAJCW1tY19ob3N0bmFtZShob3N0KSwgZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jIGIvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMKaW5kZXggMzI2NDQ3Yy4uNjA4NDJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMKQEAgLTQ2MiwzICs0NjIsMTA0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK21tY19zZW5kX2J1c190ZXN0KHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgc3RydWN0IG1tY19ob3N0ICpob3N0LCB1OCBvcGNvZGUsCisJCSAgdTggbGVuKQoreworCXN0cnVjdCBtbWNfcmVxdWVzdCBtcnE7CisJc3RydWN0IG1tY19jb21tYW5kIGNtZDsKKwlzdHJ1Y3QgbW1jX2RhdGEgZGF0YTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisJdTggKmRhdGFfYnVmOworCXU4ICp0ZXN0X2J1ZjsKKwlpbnQgaSwgZXJyOworCXN0YXRpYyB1OCB0ZXN0ZGF0YV84Yml0WzhdID0geyAweDU1LCAweGFhLCAwLCAwLCAwLCAwLCAwLCAwIH07CisJc3RhdGljIHU4IHRlc3RkYXRhXzRiaXRbNF0gPSB7IDB4NWEsIDAsIDAsIDAgfTsKKworCS8qIGRtYSBvbnRvIHN0YWNrIGlzIHVuc2FmZS9ub25wb3J0YWJsZSwgYnV0IGNhbGxlcnMgdG8gdGhpcworCSAqIHJvdXRpbmUgbm9ybWFsbHkgcHJvdmlkZSB0ZW1wb3Jhcnkgb24tc3RhY2sgYnVmZmVycyAuLi4KKwkgKi8KKwlkYXRhX2J1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGFfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChsZW4gPT0gOCkKKwkJdGVzdF9idWYgPSB0ZXN0ZGF0YV84Yml0OworCWVsc2UgaWYgKGxlbiA9PSA0KQorCQl0ZXN0X2J1ZiA9IHRlc3RkYXRhXzRiaXQ7CisJZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgYnVzX3dpZHRoICVkXG4iLAorCQkgICAgICAgbW1jX2hvc3RuYW1lKGhvc3QpLCBsZW4pOworCQlrZnJlZShkYXRhX2J1Zik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChvcGNvZGUgPT0gTU1DX0JVU19URVNUX1cpCisJCW1lbWNweShkYXRhX2J1ZiwgdGVzdF9idWYsIGxlbik7CisKKwltZW1zZXQoJm1ycSwgMCwgc2l6ZW9mKHN0cnVjdCBtbWNfcmVxdWVzdCkpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2Yoc3RydWN0IG1tY19jb21tYW5kKSk7CisJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2Yoc3RydWN0IG1tY19kYXRhKSk7CisKKwltcnEuY21kID0gJmNtZDsKKwltcnEuZGF0YSA9ICZkYXRhOworCWNtZC5vcGNvZGUgPSBvcGNvZGU7CisJY21kLmFyZyA9IDA7CisKKwkvKiBOT1RFIEhBQ0s6ICB0aGUgTU1DX1JTUF9TUElfUjEgaXMgYWx3YXlzIGNvcnJlY3QgaGVyZSwgYnV0IHdlCisJICogcmVseSBvbiBjYWxsZXJzIHRvIG5ldmVyIHVzZSB0aGlzIHdpdGggIm5hdGl2ZSIgY2FsbHMgZm9yIHJlYWRpbmcKKwkgKiBDU0Qgb3IgQ0lELiAgTmF0aXZlIHZlcnNpb25zIG9mIHRob3NlIGNvbW1hbmRzIHVzZSB0aGUgUjIgdHlwZSwKKwkgKiBub3QgUjEgcGx1cyBhIGRhdGEgYmxvY2suCisJICovCisJY21kLmZsYWdzID0gTU1DX1JTUF9TUElfUjEgfCBNTUNfUlNQX1IxIHwgTU1DX0NNRF9BRFRDOworCisJZGF0YS5ibGtzeiA9IGxlbjsKKwlkYXRhLmJsb2NrcyA9IDE7CisJaWYgKG9wY29kZSA9PSBNTUNfQlVTX1RFU1RfUikKKwkJZGF0YS5mbGFncyA9IE1NQ19EQVRBX1JFQUQ7CisJZWxzZQorCQlkYXRhLmZsYWdzID0gTU1DX0RBVEFfV1JJVEU7CisKKwlkYXRhLnNnID0gJnNnOworCWRhdGEuc2dfbGVuID0gMTsKKwlzZ19pbml0X29uZSgmc2csIGRhdGFfYnVmLCBsZW4pOworCW1tY193YWl0X2Zvcl9yZXEoaG9zdCwgJm1ycSk7CisJZXJyID0gMDsKKwlpZiAob3Bjb2RlID09IE1NQ19CVVNfVEVTVF9SKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsZW4gLyA0OyBpKyspCisJCQlpZiAoKHRlc3RfYnVmW2ldIF4gZGF0YV9idWZbaV0pICE9IDB4ZmYpIHsKKwkJCQllcnIgPSAtRUlPOworCQkJCWJyZWFrOworCQkJfQorCX0KKwlrZnJlZShkYXRhX2J1Zik7CisKKwlpZiAoY21kLmVycm9yKQorCQlyZXR1cm4gY21kLmVycm9yOworCWlmIChkYXRhLmVycm9yKQorCQlyZXR1cm4gZGF0YS5lcnJvcjsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBtbWNfYnVzX3Rlc3Qoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1OCBidXNfd2lkdGgpCit7CisJaW50IGVyciwgd2lkdGg7CisKKwlpZiAoYnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfOCkKKwkJd2lkdGggPSA4OworCWVsc2UgaWYgKGJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCisJCXdpZHRoID0gNDsKKwllbHNlIGlmIChidXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF8xKQorCQlyZXR1cm4gMDsgLyogbm8gbmVlZCBmb3IgdGVzdCAqLworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIElnbm9yZSBlcnJvcnMgZnJvbSBCVVNfVEVTVF9XLiAgQlVTX1RFU1RfUiB3aWxsIGZhaWwgaWYgdGhlcmUKKwkgKiBpcyBhIHByb2JsZW0uICBUaGlzIGltcHJvdmVzIGNoYW5jZXMgdGhhdCB0aGUgdGVzdCB3aWxsIHdvcmsuCisJICovCisJbW1jX3NlbmRfYnVzX3Rlc3QoY2FyZCwgY2FyZC0+aG9zdCwgTU1DX0JVU19URVNUX1csIHdpZHRoKTsKKwllcnIgPSBtbWNfc2VuZF9idXNfdGVzdChjYXJkLCBjYXJkLT5ob3N0LCBNTUNfQlVTX1RFU1RfUiwgd2lkdGgpOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuaCBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5oCmluZGV4IDY1M2ViOGUuLmU2ZDQ0YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5oCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5oCkBAIC0yNiw2ICsyNiw3IEBACiBpbnQgbW1jX3NwaV9yZWFkX29jcihzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIGludCBoaWdoY2FwLCB1MzIgKm9jcnApOwogaW50IG1tY19zcGlfc2V0X2NyYyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIGludCB1c2VfY3JjKTsKIGludCBtbWNfY2FyZF9zbGVlcGF3YWtlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgaW50IHNsZWVwKTsKK2ludCBtbWNfYnVzX3Rlc3Qoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1OCBidXNfd2lkdGgpOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZC5jIGIvZHJpdmVycy9tbWMvY29yZS9zZC5jCmluZGV4IDQ5ZGE0ZGYuLmQxOGMzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc2QuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkLmMKQEAgLTc2NCwxNCArNzY0LDIxIEBACiAvKgogICogU3RhcnRpbmcgcG9pbnQgZm9yIFNEIGNhcmQgaW5pdC4KICAqLwotaW50IG1tY19hdHRhY2hfc2Qoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1MzIgb2NyKQoraW50IG1tY19hdHRhY2hfc2Qoc3RydWN0IG1tY19ob3N0ICpob3N0KQogewogCWludCBlcnI7CisJdTMyIG9jcjsKIAogCUJVR19PTighaG9zdCk7CiAJV0FSTl9PTighaG9zdC0+Y2xhaW1lZCk7CiAKKwllcnIgPSBtbWNfc2VuZF9hcHBfb3BfY29uZChob3N0LCAwLCAmb2NyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJbW1jX3NkX2F0dGFjaF9idXNfb3BzKGhvc3QpOworCWlmIChob3N0LT5vY3JfYXZhaWxfc2QpCisJCWhvc3QtPm9jcl9hdmFpbCA9IGhvc3QtPm9jcl9hdmFpbF9zZDsKIAogCS8qCiAJICogV2UgbmVlZCB0byBnZXQgT0NSIGEgZGlmZmVyZW50IHdheSBmb3IgU1BJLgpAQCAtNzk1LDcgKzgwMiw4IEBACiAJCW9jciAmPSB+MHg3RjsKIAl9CiAKLQlpZiAob2NyICYgTU1DX1ZERF8xNjVfMTk1KSB7CisJaWYgKChvY3IgJiBNTUNfVkREXzE2NV8xOTUpICYmCisJICAgICEoaG9zdC0+b2NyX2F2YWlsX3NkICYgTU1DX1ZERF8xNjVfMTk1KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogU0QgY2FyZCBjbGFpbXMgdG8gc3VwcG9ydCB0aGUgIgogCQkgICAgICAgImluY29tcGxldGVseSBkZWZpbmVkICdsb3cgdm9sdGFnZSByYW5nZScuIFRoaXMgIgogCQkgICAgICAgIndpbGwgYmUgaWdub3JlZC5cbiIsIG1tY19ob3N0bmFtZShob3N0KSk7CkBAIC04MjAsMjAgKzgyOCwyMCBAQAogCQlnb3RvIGVycjsKIAogCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7Ci0KIAllcnIgPSBtbWNfYWRkX2NhcmQoaG9zdC0+Y2FyZCk7CisJbW1jX2NsYWltX2hvc3QoaG9zdCk7CiAJaWYgKGVycikKIAkJZ290byByZW1vdmVfY2FyZDsKIAogCXJldHVybiAwOwogCiByZW1vdmVfY2FyZDoKKwltbWNfcmVsZWFzZV9ob3N0KGhvc3QpOwogCW1tY19yZW1vdmVfY2FyZChob3N0LT5jYXJkKTsKIAlob3N0LT5jYXJkID0gTlVMTDsKIAltbWNfY2xhaW1faG9zdChob3N0KTsKIGVycjoKIAltbWNfZGV0YWNoX2J1cyhob3N0KTsKLQltbWNfcmVsZWFzZV9ob3N0KGhvc3QpOwogCiAJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgd2hpbHN0IGluaXRpYWxpc2luZyBTRCBjYXJkXG4iLAogCQltbWNfaG9zdG5hbWUoaG9zdCksIGVycik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jCmluZGV4IGVmZWY1ZjkuLjVjNGE1NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jCkBAIC02MjcsMTUgKzYyNywyNyBAQAogCiBzdGF0aWMgaW50IG1tY19zZGlvX3Jlc3VtZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgaSwgZXJyID0gMDsKIAogCUJVR19PTighaG9zdCk7CiAJQlVHX09OKCFob3N0LT5jYXJkKTsKIAogCS8qIEJhc2ljIGNhcmQgcmVpbml0aWFsaXphdGlvbi4gKi8KIAltbWNfY2xhaW1faG9zdChob3N0KTsKLQllcnIgPSBtbWNfc2Rpb19pbml0X2NhcmQoaG9zdCwgaG9zdC0+b2NyLCBob3N0LT5jYXJkLAorCisJLyogTm8gbmVlZCB0byByZWluaXRpYWxpemUgcG93ZXJlZC1yZXN1bWVkIG5vbnJlbW92YWJsZSBjYXJkcyAqLworCWlmIChtbWNfY2FyZF9pc19yZW1vdmFibGUoaG9zdCkgfHwgIW1tY19jYXJkX2lzX3Bvd2VyZWRfcmVzdW1lZChob3N0KSkKKwkJZXJyID0gbW1jX3NkaW9faW5pdF9jYXJkKGhvc3QsIGhvc3QtPm9jciwgaG9zdC0+Y2FyZCwKIAkJCQkgKGhvc3QtPnBtX2ZsYWdzICYgTU1DX1BNX0tFRVBfUE9XRVIpKTsKKwllbHNlIGlmIChtbWNfY2FyZF9pc19wb3dlcmVkX3Jlc3VtZWQoaG9zdCkpIHsKKwkJLyogV2UgbWF5IGhhdmUgc3dpdGNoZWQgdG8gMS1iaXQgbW9kZSBkdXJpbmcgc3VzcGVuZCAqLworCQllcnIgPSBzZGlvX2VuYWJsZV80Yml0X2J1cyhob3N0LT5jYXJkKTsKKwkJaWYgKGVyciA+IDApIHsKKwkJCW1tY19zZXRfYnVzX3dpZHRoKGhvc3QsIE1NQ19CVVNfV0lEVEhfNCk7CisJCQllcnIgPSAwOworCQl9CisJfQorCiAJaWYgKCFlcnIgJiYgaG9zdC0+c2Rpb19pcnFzKQogCQltbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QpOwogCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CkBAIC02OTAsMTYgKzcwMiwyMiBAQAogLyoKICAqIFN0YXJ0aW5nIHBvaW50IGZvciBTRElPIGNhcmQgaW5pdC4KICAqLwotaW50IG1tY19hdHRhY2hfc2RpbyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHUzMiBvY3IpCitpbnQgbW1jX2F0dGFjaF9zZGlvKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKIHsKLQlpbnQgZXJyOwotCWludCBpLCBmdW5jczsKKwlpbnQgZXJyLCBpLCBmdW5jczsKKwl1MzIgb2NyOwogCXN0cnVjdCBtbWNfY2FyZCAqY2FyZDsKIAogCUJVR19PTighaG9zdCk7CiAJV0FSTl9PTighaG9zdC0+Y2xhaW1lZCk7CiAKKwllcnIgPSBtbWNfc2VuZF9pb19vcF9jb25kKGhvc3QsIDAsICZvY3IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAltbWNfYXR0YWNoX2J1cyhob3N0LCAmbW1jX3NkaW9fb3BzKTsKKwlpZiAoaG9zdC0+b2NyX2F2YWlsX3NkaW8pCisJCWhvc3QtPm9jcl9hdmFpbCA9IGhvc3QtPm9jcl9hdmFpbF9zZGlvOwogCiAJLyoKIAkgKiBTYW5pdHkgY2hlY2sgdGhlIHZvbHRhZ2VzIHRoYXQgdGhlIGNhcmQgY2xhaW1zIHRvCkBAIC03NjksMTIgKzc4NywxMiBAQAogCQkJcG1fcnVudGltZV9lbmFibGUoJmNhcmQtPnNkaW9fZnVuY1tpXS0+ZGV2KTsKIAl9CiAKLQltbWNfcmVsZWFzZV9ob3N0KGhvc3QpOwotCiAJLyoKIAkgKiBGaXJzdCBhZGQgdGhlIGNhcmQgdG8gdGhlIGRyaXZlciBtb2RlbC4uLgogCSAqLworCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CiAJZXJyID0gbW1jX2FkZF9jYXJkKGhvc3QtPmNhcmQpOworCW1tY19jbGFpbV9ob3N0KGhvc3QpOwogCWlmIChlcnIpCiAJCWdvdG8gcmVtb3ZlX2FkZGVkOwogCkBAIC03OTIsMTUgKzgxMCwxNyBAQAogCiByZW1vdmVfYWRkZWQ6CiAJLyogUmVtb3ZlIHdpdGhvdXQgbG9jayBpZiB0aGUgZGV2aWNlIGhhcyBiZWVuIGFkZGVkLiAqLworCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CiAJbW1jX3NkaW9fcmVtb3ZlKGhvc3QpOwogCW1tY19jbGFpbV9ob3N0KGhvc3QpOwogcmVtb3ZlOgogCS8qIEFuZCB3aXRoIGxvY2sgaWYgaXQgaGFzbid0IGJlZW4gYWRkZWQuICovCisJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKIAlpZiAoaG9zdC0+Y2FyZCkKIAkJbW1jX3NkaW9fcmVtb3ZlKGhvc3QpOworCW1tY19jbGFpbV9ob3N0KGhvc3QpOwogZXJyOgogCW1tY19kZXRhY2hfYnVzKGhvc3QpOwotCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CiAKIAlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCB3aGlsc3QgaW5pdGlhbGlzaW5nIFNESU8gY2FyZFxuIiwKIAkJbW1jX2hvc3RuYW1lKGhvc3QpLCBlcnIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jCmluZGV4IDIwM2RhNDQuLmQyOWI5YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMKQEAgLTE5Nyw0NCArMTk3LDEyIEBACiAKICNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogCi1zdGF0aWMgaW50IHNkaW9fYnVzX3BtX3ByZXBhcmUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSBkZXZfdG9fc2Rpb19mdW5jKGRldik7Ci0KLQkvKgotCSAqIFJlc3VtZSBhbiBTRElPIGRldmljZSB3aGljaCB3YXMgc3VzcGVuZGVkIGF0IHJ1biB0aW1lIGF0IHRoaXMKLQkgKiBwb2ludCwgaW4gb3JkZXIgdG8gYWxsb3cgc3RhbmRhcmQgU0RJTyBzdXNwZW5kL3Jlc3VtZSBwYXRocwotCSAqIHRvIGtlZXAgd29ya2luZyBhcyB1c3VhbC4KLQkgKgotCSAqIFVsdGltYXRlbHksIHRoZSBTRElPIGRyaXZlciBpdHNlbGYgd2lsbCBkZWNpZGUgKGluIGl0cwotCSAqIHN1c3BlbmQgaGFuZGxlciwgb3IgbGFjayB0aGVyZW9mKSB3aGV0aGVyIHRoZSBjYXJkIHNob3VsZCBiZQotCSAqIHJlbW92ZWQgb3Iga2VwdCwgYW5kIGlmIGtlcHQsIGF0IHdoYXQgcG93ZXIgc3RhdGUuCi0JICoKLQkgKiBBdCB0aGlzIHBvaW50LCBQTSBjb3JlIGhhdmUgaW5jcmVhc2VkIG91ciB1c2UgY291bnQsIHNvIGl0J3MKLQkgKiBzYWZlIHRvIGRpcmVjdGx5IHJlc3VtZSB0aGUgZGV2aWNlLiBBZnRlciBzeXN0ZW0gaXMgcmVzdW1lZAotCSAqIGFnYWluLCBQTSBjb3JlIHdpbGwgZHJvcCBiYWNrIGl0cyBydW50aW1lIFBNIHVzZSBjb3VudCwgYW5kIGlmCi0JICogbmVlZGVkIGRldmljZSB3aWxsIGJlIHN1c3BlbmRlZCBhZ2Fpbi4KLQkgKgotCSAqIFRoZSBlbmQgcmVzdWx0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb3dlciBzdGF0ZSB0aGF0IGlzCi0JICogY29oZXJlbnQgd2l0aCB0aGUgZGV2aWNlJ3MgcnVudGltZSBQTSB1c2UgY291bnQuCi0JICoKLQkgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHBtX3J1bnRpbWVfcmVzdW1lIGlzIGRlbGliZXJhdGVseSB1bmNoZWNrZWQKLQkgKiBzaW5jZSB0aGVyZSBpcyBsaXR0bGUgcG9pbnQgaW4gZmFpbGluZyBzeXN0ZW0gc3VzcGVuZCBpZiBhCi0JICogZGV2aWNlIGNhbid0IGJlIHJlc3VtZWQuCi0JICovCi0JaWYgKGZ1bmMtPmNhcmQtPmhvc3QtPmNhcHMgJiBNTUNfQ0FQX1BPV0VSX09GRl9DQVJEKQotCQlwbV9ydW50aW1lX3Jlc3VtZShkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzZGlvX2J1c19wbV9vcHMgPSB7CiAJU0VUX1JVTlRJTUVfUE1fT1BTKAogCQlwbV9nZW5lcmljX3J1bnRpbWVfc3VzcGVuZCwKIAkJcG1fZ2VuZXJpY19ydW50aW1lX3Jlc3VtZSwKIAkJcG1fZ2VuZXJpY19ydW50aW1lX2lkbGUKIAkpCi0JLnByZXBhcmUgPSBzZGlvX2J1c19wbV9wcmVwYXJlLAogfTsKIAogI2RlZmluZSBTRElPX1BNX09QU19QVFIJKCZzZGlvX2J1c19wbV9vcHMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcgYi9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKaW5kZXggZTk2MGE5My4uYWZlOGM2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwpAQCAtMTQyLDYgKzE0MiwyNyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTU1DX1NESENJX0RPVkUKKwlib29sICJTREhDSSBzdXBwb3J0IG9uIE1hcnZlbGwncyBEb3ZlIFNvQyIKKwlkZXBlbmRzIG9uIEFSQ0hfRE9WRQorCWRlcGVuZHMgb24gTU1DX1NESENJX1BMVEZNCisJc2VsZWN0IE1NQ19TREhDSV9JT19BQ0NFU1NPUlMKKwloZWxwCisJICBUaGlzIHNlbGVjdHMgdGhlIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgaW4KKwkgIE1hcnZlbGwncyBEb3ZlIFNvQy4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIE1NQ19TREhDSV9URUdSQQorCXRyaXN0YXRlICJTREhDSSBwbGF0Zm9ybSBzdXBwb3J0IGZvciB0aGUgVGVncmEgU0QvTU1DIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBNTUNfU0RIQ0lfUExURk0gJiYgQVJDSF9URUdSQQorCXNlbGVjdCBNTUNfU0RIQ0lfSU9fQUNDRVNTT1JTCisJaGVscAorCSAgVGhpcyBzZWxlY3RzIHRoZSBUZWdyYSBTRC9NTUMgY29udHJvbGxlci4gSWYgeW91IGhhdmUgYSBUZWdyYQorCSAgcGxhdGZvcm0gd2l0aCBTRCBvciBNTUMgZGV2aWNlcywgc2F5IFkgb3IgTSBoZXJlLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTU1DX1NESENJX1MzQwogCXRyaXN0YXRlICJTREhDSSBzdXBwb3J0IG9uIFNhbXN1bmcgUzNDIFNvQyIKIAlkZXBlbmRzIG9uIE1NQ19TREhDSSAmJiBQTEFUX1NBTVNVTkcKQEAgLTQ2MCwxMSArNDgxLDI3IEBACiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSBTRC1DYXJkcyBtYXkgd29yayBvbiB0aGUgRVpraXQuCiAKK2NvbmZpZyBNTUNfRFcKKwl0cmlzdGF0ZSAiU3lub3BzeXMgRGVzaWduV2FyZSBNZW1vcnkgQ2FyZCBJbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBBUk0KKwloZWxwCisJICBUaGlzIHNlbGVjdHMgc3VwcG9ydCBmb3IgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgTW9iaWxlIFN0b3JhZ2UgSVAKKwkgIGJsb2NrLCB0aGlzIHByb3ZpZGVzIGhvc3Qgc3VwcG9ydCBmb3IgU0QgYW5kIE1NQyBpbnRlcmZhY2VzLCBpbiBib3RoCisJICBQSU8gYW5kIGV4dGVybmFsIERNQSBtb2Rlcy4KKworY29uZmlnIE1NQ19EV19JRE1BQworCWJvb2wgIkludGVybmFsIERNQUMgaW50ZXJmYWNlIgorCWRlcGVuZHMgb24gTU1DX0RXCisJaGVscAorCSAgVGhpcyBzZWxlY3RzIHN1cHBvcnQgZm9yIHRoZSBpbnRlcm5hbCBETUFDIGJsb2NrIHdpdGhpbiB0aGUgU3lub3BzeXMKKwkgIERlc2lnbndhcmUgTW9iaWxlIFN0b3JhZ2UgSVAgYmxvY2suIFRoaXMgZGlzYWJsZXMgdGhlIGV4dGVybmFsIERNQQorCSAgaW50ZXJmYWNlLgorCiBjb25maWcgTU1DX1NIX01NQ0lGCiAJdHJpc3RhdGUgIlN1cGVySCBJbnRlcm5hbCBNTUNJRiBzdXBwb3J0IgogCWRlcGVuZHMgb24gTU1DX0JMT0NLICYmIChTVVBFUkggfHwgQVJDSF9TSE1PQklMRSkKIAloZWxwCi0JICBUaGlzIHNlbGVjdHMgdGhlIE1NQyBIb3N0IEludGVyZmFjZSBjb250cm9sZXIgKE1NQ0lGKS4KKwkgIFRoaXMgc2VsZWN0cyB0aGUgTU1DIEhvc3QgSW50ZXJmYWNlIGNvbnRyb2xsZXIgKE1NQ0lGKS4KIAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTU1DSUYgaW4gc2g3NzI0L3NoNzc1Ny9zaDczNzIuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCmluZGV4IDdiNjQ1ZmYuLmU4MzRmYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQpAQCAtMzEsNiArMzEsNyBAQAogb2JqLSQoQ09ORklHX01NQ19DQjcxMCkJKz0gY2I3MTAtbW1jLm8KIG9iai0kKENPTkZJR19NTUNfVklBX1NETU1DKQkrPSB2aWEtc2RtbWMubwogb2JqLSQoQ09ORklHX1NESF9CRklOKQkJKz0gYmZpbl9zZGgubworb2JqLSQoQ09ORklHX01NQ19EVykJCSs9IGR3X21tYy5vCiBvYmotJChDT05GSUdfTU1DX1NIX01NQ0lGKQkrPSBzaF9tbWNpZi5vCiBvYmotJChDT05GSUdfTU1DX0paNDc0MCkJKz0gano0NzQwX21tYy5vCiBvYmotJChDT05GSUdfTU1DX1VTSEMpCQkrPSB1c2hjLm8KQEAgLTM5LDYgKzQwLDggQEAKIHNkaGNpLXBsYXRmb3JtLXkJCQkJOj0gc2RoY2ktcGx0Zm0ubwogc2RoY2ktcGxhdGZvcm0tJChDT05GSUdfTU1DX1NESENJX0NOUzNYWFgpCSs9IHNkaGNpLWNuczN4eHgubwogc2RoY2ktcGxhdGZvcm0tJChDT05GSUdfTU1DX1NESENJX0VTREhDX0lNWCkJKz0gc2RoY2ktZXNkaGMtaW14Lm8KK3NkaGNpLXBsYXRmb3JtLSQoQ09ORklHX01NQ19TREhDSV9ET1ZFKQkJKz0gc2RoY2ktZG92ZS5vCitzZGhjaS1wbGF0Zm9ybS0kKENPTkZJR19NTUNfU0RIQ0lfVEVHUkEpCSs9IHNkaGNpLXRlZ3JhLm8KIAogb2JqLSQoQ09ORklHX01NQ19TREhDSV9PRikJKz0gc2RoY2ktb2Yubwogc2RoY2ktb2YteQkJCQk6PSBzZGhjaS1vZi1jb3JlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMKaW5kZXggNDFlNWE2MC4uZWY3MmU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCWF1X3dyaXRlbChjb25maWcyIHwgU0RfQ09ORklHMl9ERiwgSE9TVF9DT05GSUcyKGhvc3QpKTsKIAlhdV9zeW5jKCk7CiAKLQkvKiBTZW5kIHRoZSBzdG9wIGNvbW1tYW5kICovCisJLyogU2VuZCB0aGUgc3RvcCBjb21tYW5kICovCiAJYXVfd3JpdGVsKFNUT1BfQ01ELCBIT1NUX0NNRChob3N0KSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYwppbmRleCBlMTU1NDdjLi4wMDc2Yzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jCkBAIC02Niw4ICs2Niw4IEBACiAjZGVmaW5lIERBVklOQ0lfTU1DQkxOQyAgICAgIDB4NjAKICNkZWZpbmUgREFWSU5DSV9TRElPQ1RMICAgICAgMHg2NAogI2RlZmluZSBEQVZJTkNJX1NESU9TVDAgICAgICAweDY4Ci0jZGVmaW5lIERBVklOQ0lfU0RJT0VOICAgICAgIDB4NkMKLSNkZWZpbmUgREFWSU5DSV9TRElPU1QgICAgICAgMHg3MAorI2RlZmluZSBEQVZJTkNJX1NESU9JRU4gICAgICAweDZDCisjZGVmaW5lIERBVklOQ0lfU0RJT0lTVCAgICAgIDB4NzAKICNkZWZpbmUgREFWSU5DSV9NTUNGSUZPQ1RMICAgMHg3NCAvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgKi8KIAogLyogREFWSU5DSV9NTUNDVEwgZGVmaW5pdGlvbnMgKi8KQEAgLTEzMSw2ICsxMzEsMTQgQEAKICNkZWZpbmUgTU1DRklGT0NUTF9BQ0NXRF8yICAgICgyIDw8IDMpIC8qIGFjY2VzcyB3aWR0aCBvZiAyIGJ5dGVzICAgICovCiAjZGVmaW5lIE1NQ0ZJRk9DVExfQUNDV0RfMSAgICAoMyA8PCAzKSAvKiBhY2Nlc3Mgd2lkdGggb2YgMSBieXRlICAgICAqLwogCisvKiBEQVZJTkNJX1NESU9TVDAgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0RJT1NUMF9EQVQxX0hJICAgICAgIEJJVCgwKQorCisvKiBEQVZJTkNJX1NESU9JRU4gZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0RJT0lFTl9JT0lOVEVOICAgICAgIEJJVCgwKQorCisvKiBEQVZJTkNJX1NESU9JU1QgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0RJT0lTVF9JT0lOVCAgICAgICAgIEJJVCgwKQogCiAvKiBNTUNTRCBJbml0IGNsb2NrIGluIEh6IGluIG9wZW5kcmFpbiBtb2RlICovCiAjZGVmaW5lIE1NQ1NEX0lOSVRfQ0xPQ0sJCTIwMDAwMApAQCAtMTY0LDcgKzE3Miw3IEBACiAJdW5zaWduZWQgaW50IG1tY19pbnB1dF9jbGs7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtX3JlczsKLQlpbnQgaXJxOworCWludCBtbWNfaXJxLCBzZGlvX2lycTsKIAl1bnNpZ25lZCBjaGFyIGJ1c19tb2RlOwogCiAjZGVmaW5lIERBVklOQ0lfTU1DX0RBVEFESVJfTk9ORQkwCkBAIC0xODQsNiArMTkyLDcgQEAKIAl1MzIgcnhkbWEsIHR4ZG1hOwogCWJvb2wgdXNlX2RtYTsKIAlib29sIGRvX2RtYTsKKwlib29sIHNkaW9faW50OwogCiAJLyogU2NhdHRlcmxpc3QgRE1BIHVzZXMgb25lIG9yIG1vcmUgcGFyYW1ldGVyIFJBTSBlbnRyaWVzOgogCSAqIHRoZSBtYWluIG9uZSAoYXNzb2NpYXRlZCB3aXRoIHJ4ZG1hIG9yIHR4ZG1hKSBwbHVzIHplcm8gb3IKQEAgLTQ4MCw3ICs0ODksNyBAQAogCXN0cnVjdCBzY2F0dGVybGlzdAkqc2c7CiAJdW5zaWduZWQJCXNnX2xlbjsKIAl1bnNpZ25lZAkJYnl0ZXNfbGVmdCA9IGhvc3QtPmJ5dGVzX2xlZnQ7Ci0JY29uc3QgdW5zaWduZWQJCXNoaWZ0ID0gZmZzKHJ3X3RocmVzaG9sZCkgLSAxOzsKKwljb25zdCB1bnNpZ25lZAkJc2hpZnQgPSBmZnMocndfdGhyZXNob2xkKSAtIDE7CiAKIAlpZiAoaG9zdC0+ZGF0YV9kaXIgPT0gREFWSU5DSV9NTUNfREFUQURJUl9XUklURSkgewogCQl0ZW1wbGF0ZSA9ICZob3N0LT50eF90ZW1wbGF0ZTsKQEAgLTg2Niw2ICs4NzUsMTkgQEAKIHsKIAlob3N0LT5kYXRhID0gTlVMTDsKIAorCWlmIChob3N0LT5tbWMtPmNhcHMgJiBNTUNfQ0FQX1NESU9fSVJRKSB7CisJCS8qCisJCSAqIFNESU8gSW50ZXJydXB0IERldGVjdGlvbiB3b3JrLWFyb3VuZCBhcyBzdWdnZXN0ZWQgYnkKKwkJICogRGF2aW5jaSBFcnJhdGEgKFRNUzMyMERNMzU1IFNpbGljb24gUmV2aXNpb24gMS4xIEVycmF0YQorCQkgKiAyLjEuNik6IFNpZ25hbCBTRElPIGludGVycnVwdCBvbmx5IGlmIGl0IGlzIGVuYWJsZWQgYnkgY29yZQorCQkgKi8KKwkJaWYgKGhvc3QtPnNkaW9faW50ICYmICEocmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfU0RJT1NUMCkgJgorCQkJCQlTRElPU1QwX0RBVDFfSEkpKSB7CisJCQl3cml0ZWwoU0RJT0lTVF9JT0lOVCwgaG9zdC0+YmFzZSArIERBVklOQ0lfU0RJT0lTVCk7CisJCQltbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtPm1tYyk7CisJCX0KKwl9CisKIAlpZiAoaG9zdC0+ZG9fZG1hKSB7CiAJCWRhdmluY2lfYWJvcnRfZG1hKGhvc3QpOwogCkBAIC05MzIsNiArOTU0LDIxIEBACiAJbW1jX2RhdmluY2lfcmVzZXRfY3RybChob3N0LCAwKTsKIH0KIAorc3RhdGljIGlycXJldHVybl90IG1tY19kYXZpbmNpX3NkaW9faXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCA9IGRldl9pZDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJc3RhdHVzID0gcmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfU0RJT0lTVCk7CisJaWYgKHN0YXR1cyAmIFNESU9JU1RfSU9JTlQpIHsKKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksCisJCQkiU0RJTyBpbnRlcnJ1cHQgc3RhdHVzICV4XG4iLCBzdGF0dXMpOworCQl3cml0ZWwoc3RhdHVzIHwgU0RJT0lTVF9JT0lOVCwgaG9zdC0+YmFzZSArIERBVklOQ0lfU0RJT0lTVCk7CisJCW1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC0+bW1jKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgbW1jX2RhdmluY2lfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqKWRldl9pZDsKQEAgLTEwNzYsMTEgKzExMTMsMzIgQEAKIAlyZXR1cm4gY29uZmlnLT5nZXRfcm8ocGRldi0+aWQpOwogfQogCitzdGF0aWMgdm9pZCBtbWNfZGF2aW5jaV9lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpCit7CisJc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJaWYgKGVuYWJsZSkgeworCQlpZiAoIShyZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9TRElPU1QwKSAmIFNESU9TVDBfREFUMV9ISSkpIHsKKwkJCXdyaXRlbChTRElPSVNUX0lPSU5ULCBob3N0LT5iYXNlICsgREFWSU5DSV9TRElPSVNUKTsKKwkJCW1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC0+bW1jKTsKKwkJfSBlbHNlIHsKKwkJCWhvc3QtPnNkaW9faW50ID0gdHJ1ZTsKKwkJCXdyaXRlbChyZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9TRElPSUVOKSB8CisJCQkgICAgICAgU0RJT0lFTl9JT0lOVEVOLCBob3N0LT5iYXNlICsgREFWSU5DSV9TRElPSUVOKTsKKwkJfQorCX0gZWxzZSB7CisJCWhvc3QtPnNkaW9faW50ID0gZmFsc2U7CisJCXdyaXRlbChyZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9TRElPSUVOKSAmIH5TRElPSUVOX0lPSU5URU4sCisJCSAgICAgICBob3N0LT5iYXNlICsgREFWSU5DSV9TRElPSUVOKTsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG1tY19kYXZpbmNpX29wcyA9IHsKIAkucmVxdWVzdAk9IG1tY19kYXZpbmNpX3JlcXVlc3QsCiAJLnNldF9pb3MJPSBtbWNfZGF2aW5jaV9zZXRfaW9zLAogCS5nZXRfY2QJCT0gbW1jX2RhdmluY2lfZ2V0X2NkLAogCS5nZXRfcm8JCT0gbW1jX2RhdmluY2lfZ2V0X3JvLAorCS5lbmFibGVfc2Rpb19pcnEgPSBtbWNfZGF2aW5jaV9lbmFibGVfc2Rpb19pcnEsCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTIwOSw3ICsxMjY3LDggQEAKIAkJaG9zdC0+bnJfc2cgPSBNQVhfTlJfU0c7CiAKIAlob3N0LT51c2VfZG1hID0gdXNlX2RtYTsKLQlob3N0LT5pcnEgPSBpcnE7CisJaG9zdC0+bW1jX2lycSA9IGlycTsKKwlob3N0LT5zZGlvX2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CiAKIAlpZiAoaG9zdC0+dXNlX2RtYSAmJiBkYXZpbmNpX2FjcXVpcmVfZG1hX2NoYW5uZWxzKGhvc3QpICE9IDApCiAJCWhvc3QtPnVzZV9kbWEgPSAwOwpAQCAtMTI3MCw2ICsxMzI5LDEzIEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKKwlpZiAoaG9zdC0+c2Rpb19pcnEgPj0gMCkgeworCQlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5zZGlvX2lycSwgbW1jX2RhdmluY2lfc2Rpb19pcnEsIDAsCisJCQkJICBtbWNfaG9zdG5hbWUobW1jKSwgaG9zdCk7CisJCWlmICghcmV0KQorCQkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfU0RJT19JUlE7CisJfQorCiAJcmVuYW1lX3JlZ2lvbihtZW0sIG1tY19ob3N0bmFtZShtbWMpKTsKIAogCWRldl9pbmZvKG1tY19kZXYoaG9zdC0+bW1jKSwgIlVzaW5nICVzLCAlZC1iaXQgbW9kZVxuIiwKQEAgLTEzMTMsNyArMTM3OSw5IEBACiAJCW1tY19kYXZpbmNpX2NwdWZyZXFfZGVyZWdpc3Rlcihob3N0KTsKIAogCQltbWNfcmVtb3ZlX2hvc3QoaG9zdC0+bW1jKTsKLQkJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKKwkJZnJlZV9pcnEoaG9zdC0+bW1jX2lycSwgaG9zdCk7CisJCWlmIChob3N0LT5tbWMtPmNhcHMgJiBNTUNfQ0FQX1NESU9fSVJRKQorCQkJZnJlZV9pcnEoaG9zdC0+c2Rpb19pcnEsIGhvc3QpOwogCiAJCWRhdmluY2lfcmVsZWFzZV9kbWFfY2hhbm5lbHMoaG9zdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmY2M4MjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jCkBAIC0wLDAgKzEsMTc5NiBAQAorLyoKKyAqIFN5bm9wc3lzIERlc2lnbldhcmUgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBkcml2ZXIKKyAqICAoQmFzZWQgb24gTlhQIGRyaXZlciBmb3IgbHBjIDMxeHgpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5YUCBTZW1pY29uZHVjdG9ycworICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvbW1jLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2R3X21tYy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjaW5jbHVkZSAiZHdfbW1jLmgiCisKKy8qIENvbW1vbiBmbGFnIGNvbWJpbmF0aW9ucyAqLworI2RlZmluZSBEV19NQ0lfREFUQV9FUlJPUl9GTEFHUwkoU0RNTUNfSU5UX0RUTyB8IFNETU1DX0lOVF9EQ1JDIHwgXAorCQkJCSBTRE1NQ19JTlRfSFRPIHwgU0RNTUNfSU5UX1NCRSAgfCBcCisJCQkJIFNETU1DX0lOVF9FQkUpCisjZGVmaW5lIERXX01DSV9DTURfRVJST1JfRkxBR1MJKFNETU1DX0lOVF9SVE8gfCBTRE1NQ19JTlRfUkNSQyB8IFwKKwkJCQkgU0RNTUNfSU5UX1JFU1BfRVJSKQorI2RlZmluZSBEV19NQ0lfRVJST1JfRkxBR1MJKERXX01DSV9EQVRBX0VSUk9SX0ZMQUdTIHwgXAorCQkJCSBEV19NQ0lfQ01EX0VSUk9SX0ZMQUdTICB8IFNETU1DX0lOVF9ITEUpCisjZGVmaW5lIERXX01DSV9TRU5EX1NUQVRVUwkxCisjZGVmaW5lIERXX01DSV9SRUNWX1NUQVRVUwkyCisjZGVmaW5lIERXX01DSV9ETUFfVEhSRVNIT0xECTE2CisKKyNpZmRlZiBDT05GSUdfTU1DX0RXX0lETUFDCitzdHJ1Y3QgaWRtYWNfZGVzYyB7CisJdTMyCQlkZXMwOwkvKiBDb250cm9sIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUgSURNQUNfREVTMF9ESUMJQklUKDEpCisjZGVmaW5lIElETUFDX0RFUzBfTEQJQklUKDIpCisjZGVmaW5lIElETUFDX0RFUzBfRkQJQklUKDMpCisjZGVmaW5lIElETUFDX0RFUzBfQ0gJQklUKDQpCisjZGVmaW5lIElETUFDX0RFUzBfRVIJQklUKDUpCisjZGVmaW5lIElETUFDX0RFUzBfQ0VTCUJJVCgzMCkKKyNkZWZpbmUgSURNQUNfREVTMF9PV04JQklUKDMxKQorCisJdTMyCQlkZXMxOwkvKiBCdWZmZXIgc2l6ZXMgKi8KKyNkZWZpbmUgSURNQUNfU0VUX0JVRkZFUjFfU0laRShkLCBzKSBcCisJKChkKS0+ZGVzMSA9ICgoZCktPmRlczEgJiAweDAzZmZjMDAwKSB8ICgocykgJiAweDNmZmYpKQorCisJdTMyCQlkZXMyOwkvKiBidWZmZXIgMSBwaHlzaWNhbCBhZGRyZXNzICovCisKKwl1MzIJCWRlczM7CS8qIGJ1ZmZlciAyIHBoeXNpY2FsIGFkZHJlc3MgKi8KK307CisjZW5kaWYgLyogQ09ORklHX01NQ19EV19JRE1BQyAqLworCisvKioKKyAqIHN0cnVjdCBkd19tY2lfc2xvdCAtIE1NQyBzbG90IHN0YXRlCisgKiBAbW1jOiBUaGUgbW1jX2hvc3QgcmVwcmVzZW50aW5nIHRoaXMgc2xvdC4KKyAqIEBob3N0OiBUaGUgTU1DIGNvbnRyb2xsZXIgdGhpcyBzbG90IGlzIHVzaW5nLgorICogQGN0eXBlOiBDYXJkIHR5cGUgZm9yIHRoaXMgc2xvdC4KKyAqIEBtcnE6IG1tY19yZXF1ZXN0IGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQgb3Igd2FpdGluZyB0byBiZQorICoJcHJvY2Vzc2VkLCBvciBOVUxMIHdoZW4gdGhlIHNsb3QgaXMgaWRsZS4KKyAqIEBxdWV1ZV9ub2RlOiBMaXN0IG5vZGUgZm9yIHBsYWNpbmcgdGhpcyBub2RlIGluIHRoZSBAcXVldWUgbGlzdCBvZgorICoJJnN0cnVjdCBkd19tY2kuCisgKiBAY2xvY2s6IENsb2NrIHJhdGUgY29uZmlndXJlZCBieSBzZXRfaW9zKCkuIFByb3RlY3RlZCBieSBob3N0LT5sb2NrLgorICogQGZsYWdzOiBSYW5kb20gc3RhdGUgYml0cyBhc3NvY2lhdGVkIHdpdGggdGhlIHNsb3QuCisgKiBAaWQ6IE51bWJlciBvZiB0aGlzIHNsb3QuCisgKiBAbGFzdF9kZXRlY3Rfc3RhdGU6IE1vc3QgcmVjZW50bHkgb2JzZXJ2ZWQgY2FyZCBkZXRlY3Qgc3RhdGUuCisgKi8KK3N0cnVjdCBkd19tY2lfc2xvdCB7CisJc3RydWN0IG1tY19ob3N0CQkqbW1jOworCXN0cnVjdCBkd19tY2kJCSpob3N0OworCisJdTMyCQkJY3R5cGU7CisKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QJKm1ycTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXF1ZXVlX25vZGU7CisKKwl1bnNpZ25lZCBpbnQJCWNsb2NrOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworI2RlZmluZSBEV19NTUNfQ0FSRF9QUkVTRU5UCTAKKyNkZWZpbmUgRFdfTU1DX0NBUkRfTkVFRF9JTklUCTEKKwlpbnQJCQlpZDsKKwlpbnQJCQlsYXN0X2RldGVjdF9zdGF0ZTsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKK3N0YXRpYyBpbnQgZHdfbWNpX3JlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QgPSBzLT5wcml2YXRlOworCXN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxOworCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kOworCXN0cnVjdCBtbWNfY29tbWFuZCAqc3RvcDsKKwlzdHJ1Y3QgbW1jX2RhdGEJKmRhdGE7CisKKwkvKiBNYWtlIHN1cmUgd2UgZ2V0IGEgY29uc2lzdGVudCBzbmFwc2hvdCAqLworCXNwaW5fbG9ja19iaCgmc2xvdC0+aG9zdC0+bG9jayk7CisJbXJxID0gc2xvdC0+bXJxOworCisJaWYgKG1ycSkgeworCQljbWQgPSBtcnEtPmNtZDsKKwkJZGF0YSA9IG1ycS0+ZGF0YTsKKwkJc3RvcCA9IG1ycS0+c3RvcDsKKworCQlpZiAoY21kKQorCQkJc2VxX3ByaW50ZihzLAorCQkJCSAgICJDTUQldSgweCV4KSBmbGcgJXggcnNwICV4ICV4ICV4ICV4IGVyciAlZFxuIiwKKwkJCQkgICBjbWQtPm9wY29kZSwgY21kLT5hcmcsIGNtZC0+ZmxhZ3MsCisJCQkJICAgY21kLT5yZXNwWzBdLCBjbWQtPnJlc3BbMV0sIGNtZC0+cmVzcFsyXSwKKwkJCQkgICBjbWQtPnJlc3BbMl0sIGNtZC0+ZXJyb3IpOworCQlpZiAoZGF0YSkKKwkJCXNlcV9wcmludGYocywgIkRBVEEgJXUgLyAldSAqICV1IGZsZyAleCBlcnIgJWRcbiIsCisJCQkJICAgZGF0YS0+Ynl0ZXNfeGZlcmVkLCBkYXRhLT5ibG9ja3MsCisJCQkJICAgZGF0YS0+Ymxrc3osIGRhdGEtPmZsYWdzLCBkYXRhLT5lcnJvcik7CisJCWlmIChzdG9wKQorCQkJc2VxX3ByaW50ZihzLAorCQkJCSAgICJDTUQldSgweCV4KSBmbGcgJXggcnNwICV4ICV4ICV4ICV4IGVyciAlZFxuIiwKKwkJCQkgICBzdG9wLT5vcGNvZGUsIHN0b3AtPmFyZywgc3RvcC0+ZmxhZ3MsCisJCQkJICAgc3RvcC0+cmVzcFswXSwgc3RvcC0+cmVzcFsxXSwgc3RvcC0+cmVzcFsyXSwKKwkJCQkgICBzdG9wLT5yZXNwWzJdLCBzdG9wLT5lcnJvcik7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJnNsb3QtPmhvc3QtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWNpX3JlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkd19tY2lfcmVxX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkd19tY2lfcmVxX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGR3X21jaV9yZXFfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBkd19tY2lfcmVnc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwlzZXFfcHJpbnRmKHMsICJTVEFUVVM6XHQweCUwOHhcbiIsIFNETU1DX1NUQVRVUyk7CisJc2VxX3ByaW50ZihzLCAiUklOVFNUUzpcdDB4JTA4eFxuIiwgU0RNTUNfUklOVFNUUyk7CisJc2VxX3ByaW50ZihzLCAiQ01EOlx0MHglMDh4XG4iLCBTRE1NQ19DTUQpOworCXNlcV9wcmludGYocywgIkNUUkw6XHQweCUwOHhcbiIsIFNETU1DX0NUUkwpOworCXNlcV9wcmludGYocywgIklOVE1BU0s6XHQweCUwOHhcbiIsIFNETU1DX0lOVE1BU0spOworCXNlcV9wcmludGYocywgIkNMS0VOQTpcdDB4JTA4eFxuIiwgU0RNTUNfQ0xLRU5BKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR3X21jaV9yZWdzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGR3X21jaV9yZWdzX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkd19tY2lfcmVnc19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBkd19tY2lfcmVnc19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgdm9pZCBkd19tY2lfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCkKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QJKm1tYyA9IHNsb3QtPm1tYzsKKwlzdHJ1Y3QgZHdfbWNpICpob3N0ID0gc2xvdC0+aG9zdDsKKwlzdHJ1Y3QgZGVudHJ5ICpyb290OworCXN0cnVjdCBkZW50cnkgKm5vZGU7CisKKwlyb290ID0gbW1jLT5kZWJ1Z2ZzX3Jvb3Q7CisJaWYgKCFyb290KQorCQlyZXR1cm47CisKKwlub2RlID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmVncyIsIFNfSVJVU1IsIHJvb3QsIGhvc3QsCisJCQkJICAgJmR3X21jaV9yZWdzX2ZvcHMpOworCWlmICghbm9kZSkKKwkJZ290byBlcnI7CisKKwlub2RlID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmVxIiwgU19JUlVTUiwgcm9vdCwgc2xvdCwKKwkJCQkgICAmZHdfbWNpX3JlcV9mb3BzKTsKKwlpZiAoIW5vZGUpCisJCWdvdG8gZXJyOworCisJbm9kZSA9IGRlYnVnZnNfY3JlYXRlX3UzMigic3RhdGUiLCBTX0lSVVNSLCByb290LCAodTMyICopJmhvc3QtPnN0YXRlKTsKKwlpZiAoIW5vZGUpCisJCWdvdG8gZXJyOworCisJbm9kZSA9IGRlYnVnZnNfY3JlYXRlX3gzMigicGVuZGluZ19ldmVudHMiLCBTX0lSVVNSLCByb290LAorCQkJCSAgKHUzMiAqKSZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJaWYgKCFub2RlKQorCQlnb3RvIGVycjsKKworCW5vZGUgPSBkZWJ1Z2ZzX2NyZWF0ZV94MzIoImNvbXBsZXRlZF9ldmVudHMiLCBTX0lSVVNSLCByb290LAorCQkJCSAgKHUzMiAqKSZob3N0LT5jb21wbGV0ZWRfZXZlbnRzKTsKKwlpZiAoIW5vZGUpCisJCWdvdG8gZXJyOworCisJcmV0dXJuOworCitlcnI6CisJZGV2X2VycigmbW1jLT5jbGFzc19kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZWJ1Z2ZzIGZvciBzbG90XG4iKTsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgKi8KKworc3RhdGljIHZvaWQgZHdfbWNpX3NldF90aW1lb3V0KHN0cnVjdCBkd19tY2kgKmhvc3QpCit7CisJLyogdGltZW91dCAobWF4aW11bSkgKi8KKwltY2lfd3JpdGVsKGhvc3QsIFRNT1VULCAweGZmZmZmZmZmKTsKK30KKworc3RhdGljIHUzMiBkd19tY2lfcHJlcGFyZV9jb21tYW5kKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKK3sKKwlzdHJ1Y3QgbW1jX2RhdGEJKmRhdGE7CisJdTMyIGNtZHI7CisJY21kLT5lcnJvciA9IC1FSU5QUk9HUkVTUzsKKworCWNtZHIgPSBjbWQtPm9wY29kZTsKKworCWlmIChjbWRyID09IE1NQ19TVE9QX1RSQU5TTUlTU0lPTikKKwkJY21kciB8PSBTRE1NQ19DTURfU1RPUDsKKwllbHNlCisJCWNtZHIgfD0gU0RNTUNfQ01EX1BSVl9EQVRfV0FJVDsKKworCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9QUkVTRU5UKSB7CisJCS8qIFdlIGV4cGVjdCBhIHJlc3BvbnNlLCBzbyBzZXQgdGhpcyBiaXQgKi8KKwkJY21kciB8PSBTRE1NQ19DTURfUkVTUF9FWFA7CisJCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpCisJCQljbWRyIHw9IFNETU1DX0NNRF9SRVNQX0xPTkc7CisJfQorCisJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX0NSQykKKwkJY21kciB8PSBTRE1NQ19DTURfUkVTUF9DUkM7CisKKwlkYXRhID0gY21kLT5kYXRhOworCWlmIChkYXRhKSB7CisJCWNtZHIgfD0gU0RNTUNfQ01EX0RBVF9FWFA7CisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1NUUkVBTSkKKwkJCWNtZHIgfD0gU0RNTUNfQ01EX1NUUk1fTU9ERTsKKwkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpCisJCQljbWRyIHw9IFNETU1DX0NNRF9EQVRfV1I7CisJfQorCisJcmV0dXJuIGNtZHI7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21jaV9zdGFydF9jb21tYW5kKHN0cnVjdCBkd19tY2kgKmhvc3QsCisJCQkJIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kLCB1MzIgY21kX2ZsYWdzKQoreworCWhvc3QtPmNtZCA9IGNtZDsKKwlkZXZfdmRiZygmaG9zdC0+cGRldi0+ZGV2LAorCQkgInN0YXJ0IGNvbW1hbmQ6IEFSR1I9MHglMDh4IENNRFI9MHglMDh4XG4iLAorCQkgY21kLT5hcmcsIGNtZF9mbGFncyk7CisKKwltY2lfd3JpdGVsKGhvc3QsIENNREFSRywgY21kLT5hcmcpOworCXdtYigpOworCisJbWNpX3dyaXRlbChob3N0LCBDTUQsIGNtZF9mbGFncyB8IFNETU1DX0NNRF9TVEFSVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfc3RvcF9jbWQoc3RydWN0IGR3X21jaSAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCWR3X21jaV9zdGFydF9jb21tYW5kKGhvc3QsIGRhdGEtPnN0b3AsIGhvc3QtPnN0b3BfY21kcik7Cit9CisKKy8qIERNQSBpbnRlcmZhY2UgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZCBkd19tY2lfc3RvcF9kbWEoc3RydWN0IGR3X21jaSAqaG9zdCkKK3sKKwlpZiAoaG9zdC0+dXNlX2RtYSkgeworCQlob3N0LT5kbWFfb3BzLT5zdG9wKGhvc3QpOworCQlob3N0LT5kbWFfb3BzLT5jbGVhbnVwKGhvc3QpOworCX0gZWxzZSB7CisJCS8qIERhdGEgdHJhbnNmZXIgd2FzIHN0b3BwZWQgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyICovCisJCXNldF9iaXQoRVZFTlRfWEZFUl9DT01QTEVURSwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfTU1DX0RXX0lETUFDCitzdGF0aWMgdm9pZCBkd19tY2lfZG1hX2NsZWFudXAoc3RydWN0IGR3X21jaSAqaG9zdCkKK3sKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBob3N0LT5kYXRhOworCisJaWYgKGRhdGEpCisJCWRtYV91bm1hcF9zZygmaG9zdC0+cGRldi0+ZGV2LCBkYXRhLT5zZywgZGF0YS0+c2dfbGVuLAorCQkJICAgICAoKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpCisJCQkgICAgICA/IERNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWNpX2lkbWFjX3N0b3BfZG1hKHN0cnVjdCBkd19tY2kgKmhvc3QpCit7CisJdTMyIHRlbXA7CisKKwkvKiBEaXNhYmxlIGFuZCByZXNldCB0aGUgSURNQUMgaW50ZXJmYWNlICovCisJdGVtcCA9IG1jaV9yZWFkbChob3N0LCBDVFJMKTsKKwl0ZW1wICY9IH5TRE1NQ19DVFJMX1VTRV9JRE1BQzsKKwl0ZW1wIHw9IFNETU1DX0NUUkxfRE1BX1JFU0VUOworCW1jaV93cml0ZWwoaG9zdCwgQ1RSTCwgdGVtcCk7CisKKwkvKiBTdG9wIHRoZSBJRE1BQyBydW5uaW5nICovCisJdGVtcCA9IG1jaV9yZWFkbChob3N0LCBCTU9EKTsKKwl0ZW1wICY9IH5TRE1NQ19JRE1BQ19FTkFCTEU7CisJbWNpX3dyaXRlbChob3N0LCBCTU9ELCB0ZW1wKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWNpX2lkbWFjX2NvbXBsZXRlX2RtYShzdHJ1Y3QgZHdfbWNpICpob3N0KQoreworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPmRhdGE7CisKKwlkZXZfdmRiZygmaG9zdC0+cGRldi0+ZGV2LCAiRE1BIGNvbXBsZXRlXG4iKTsKKworCWhvc3QtPmRtYV9vcHMtPmNsZWFudXAoaG9zdCk7CisKKwkvKgorCSAqIElmIHRoZSBjYXJkIHdhcyByZW1vdmVkLCBkYXRhIHdpbGwgYmUgTlVMTC4gTm8gcG9pbnQgaW4gdHJ5aW5nIHRvCisJICogc2VuZCB0aGUgc3RvcCBjb21tYW5kIG9yIHdhaXRpbmcgZm9yIE5CVVNZIGluIHRoaXMgY2FzZS4KKwkgKi8KKwlpZiAoZGF0YSkgeworCQlzZXRfYml0KEVWRU5UX1hGRVJfQ09NUExFVEUsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJCXRhc2tsZXRfc2NoZWR1bGUoJmhvc3QtPnRhc2tsZXQpOworCX0KK30KKworc3RhdGljIHZvaWQgZHdfbWNpX3RyYW5zbGF0ZV9zZ2xpc3Qoc3RydWN0IGR3X21jaSAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgc2dfbGVuKQoreworCWludCBpOworCXN0cnVjdCBpZG1hY19kZXNjICpkZXNjID0gaG9zdC0+c2dfY3B1OworCisJZm9yIChpID0gMDsgaSA8IHNnX2xlbjsgaSsrLCBkZXNjKyspIHsKKwkJdW5zaWduZWQgaW50IGxlbmd0aCA9IHNnX2RtYV9sZW4oJmRhdGEtPnNnW2ldKTsKKwkJdTMyIG1lbV9hZGRyID0gc2dfZG1hX2FkZHJlc3MoJmRhdGEtPnNnW2ldKTsKKworCQkvKiBTZXQgdGhlIE9XTiBiaXQgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXNjcmlwdG9yICovCisJCWRlc2MtPmRlczAgPSBJRE1BQ19ERVMwX09XTiB8IElETUFDX0RFUzBfRElDIHwgSURNQUNfREVTMF9DSDsKKworCQkvKiBCdWZmZXIgbGVuZ3RoICovCisJCUlETUFDX1NFVF9CVUZGRVIxX1NJWkUoZGVzYywgbGVuZ3RoKTsKKworCQkvKiBQaHlzaWNhbCBhZGRyZXNzIHRvIERNQSB0by9mcm9tICovCisJCWRlc2MtPmRlczIgPSBtZW1fYWRkcjsKKwl9CisKKwkvKiBTZXQgZmlyc3QgZGVzY3JpcHRvciAqLworCWRlc2MgPSBob3N0LT5zZ19jcHU7CisJZGVzYy0+ZGVzMCB8PSBJRE1BQ19ERVMwX0ZEOworCisJLyogU2V0IGxhc3QgZGVzY3JpcHRvciAqLworCWRlc2MgPSBob3N0LT5zZ19jcHUgKyAoaSAtIDEpICogc2l6ZW9mKHN0cnVjdCBpZG1hY19kZXNjKTsKKwlkZXNjLT5kZXMwICY9IH4oSURNQUNfREVTMF9DSCB8IElETUFDX0RFUzBfRElDKTsKKwlkZXNjLT5kZXMwIHw9IElETUFDX0RFUzBfTEQ7CisKKwl3bWIoKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWNpX2lkbWFjX3N0YXJ0X2RtYShzdHJ1Y3QgZHdfbWNpICpob3N0LCB1bnNpZ25lZCBpbnQgc2dfbGVuKQoreworCXUzMiB0ZW1wOworCisJZHdfbWNpX3RyYW5zbGF0ZV9zZ2xpc3QoaG9zdCwgaG9zdC0+ZGF0YSwgc2dfbGVuKTsKKworCS8qIFNlbGVjdCBJRE1BQyBpbnRlcmZhY2UgKi8KKwl0ZW1wID0gbWNpX3JlYWRsKGhvc3QsIENUUkwpOworCXRlbXAgfD0gU0RNTUNfQ1RSTF9VU0VfSURNQUM7CisJbWNpX3dyaXRlbChob3N0LCBDVFJMLCB0ZW1wKTsKKworCXdtYigpOworCisJLyogRW5hYmxlIHRoZSBJRE1BQyAqLworCXRlbXAgPSBtY2lfcmVhZGwoaG9zdCwgQk1PRCk7CisJdGVtcCB8PSBTRE1NQ19JRE1BQ19FTkFCTEU7CisJbWNpX3dyaXRlbChob3N0LCBCTU9ELCB0ZW1wKTsKKworCS8qIFN0YXJ0IGl0IHJ1bm5pbmcgKi8KKwltY2lfd3JpdGVsKGhvc3QsIFBMRE1ORCwgMSk7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWNpX2lkbWFjX2luaXQoc3RydWN0IGR3X21jaSAqaG9zdCkKK3sKKwlzdHJ1Y3QgaWRtYWNfZGVzYyAqcDsKKwlpbnQgaTsKKworCS8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiB0aGUgcmluZyBidWZmZXIgKi8KKwlob3N0LT5yaW5nX3NpemUgPSBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGlkbWFjX2Rlc2MpOworCisJLyogRm9yd2FyZCBsaW5rIHRoZSBkZXNjcmlwdG9yIGxpc3QgKi8KKwlmb3IgKGkgPSAwLCBwID0gaG9zdC0+c2dfY3B1OyBpIDwgaG9zdC0+cmluZ19zaXplIC0gMTsgaSsrLCBwKyspCisJCXAtPmRlczMgPSBob3N0LT5zZ19kbWEgKyAoc2l6ZW9mKHN0cnVjdCBpZG1hY19kZXNjKSAqIChpICsgMSkpOworCisJLyogU2V0IHRoZSBsYXN0IGRlc2NyaXB0b3IgYXMgdGhlIGVuZC1vZi1yaW5nIGRlc2NyaXB0b3IgKi8KKwlwLT5kZXMzID0gaG9zdC0+c2dfZG1hOworCXAtPmRlczAgPSBJRE1BQ19ERVMwX0VSOworCisJLyogTWFzayBvdXQgaW50ZXJydXB0cyAtIGdldCBUeCAmIFJ4IGNvbXBsZXRlIG9ubHkgKi8KKwltY2lfd3JpdGVsKGhvc3QsIElESU5URU4sIFNETU1DX0lETUFDX0lOVF9OSSB8IFNETU1DX0lETUFDX0lOVF9SSSB8CisJCSAgIFNETU1DX0lETUFDX0lOVF9USSk7CisKKwkvKiBTZXQgdGhlIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCisJbWNpX3dyaXRlbChob3N0LCBEQkFERFIsIGhvc3QtPnNnX2RtYSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHdfbWNpX2RtYV9vcHMgZHdfbWNpX2lkbWFjX29wcyA9IHsKKwkuaW5pdCA9IGR3X21jaV9pZG1hY19pbml0LAorCS5zdGFydCA9IGR3X21jaV9pZG1hY19zdGFydF9kbWEsCisJLnN0b3AgPSBkd19tY2lfaWRtYWNfc3RvcF9kbWEsCisJLmNvbXBsZXRlID0gZHdfbWNpX2lkbWFjX2NvbXBsZXRlX2RtYSwKKwkuY2xlYW51cCA9IGR3X21jaV9kbWFfY2xlYW51cCwKK307CisjZW5kaWYgLyogQ09ORklHX01NQ19EV19JRE1BQyAqLworCitzdGF0aWMgaW50IGR3X21jaV9zdWJtaXRfZGF0YV9kbWEoc3RydWN0IGR3X21jaSAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IGksIGRpcmVjdGlvbiwgc2dfbGVuOworCXUzMiB0ZW1wOworCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoYW5uZWwsIHdlIGNhbid0IGRvIERNQSAqLworCWlmICghaG9zdC0+dXNlX2RtYSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIFdlIGRvbid0IGRvIERNQSBvbiAiY29tcGxleCIgdHJhbnNmZXJzLCBpLmUuIHdpdGgKKwkgKiBub24td29yZC1hbGlnbmVkIGJ1ZmZlcnMgb3IgbGVuZ3Rocy4gQWxzbywgd2UgZG9uJ3QgYm90aGVyCisJICogd2l0aCBhbGwgdGhlIERNQSBzZXR1cCBvdmVyaGVhZCBmb3Igc2hvcnQgdHJhbnNmZXJzLgorCSAqLworCWlmIChkYXRhLT5ibG9ja3MgKiBkYXRhLT5ibGtzeiA8IERXX01DSV9ETUFfVEhSRVNIT0xEKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YS0+Ymxrc3ogJiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvcl9lYWNoX3NnKGRhdGEtPnNnLCBzZywgZGF0YS0+c2dfbGVuLCBpKSB7CisJCWlmIChzZy0+b2Zmc2V0ICYgMyB8fCBzZy0+bGVuZ3RoICYgMykKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCisJCWRpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKKwllbHNlCisJCWRpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CisKKwlzZ19sZW4gPSBkbWFfbWFwX3NnKCZob3N0LT5wZGV2LT5kZXYsIGRhdGEtPnNnLCBkYXRhLT5zZ19sZW4sCisJCQkgICAgZGlyZWN0aW9uKTsKKworCWRldl92ZGJnKCZob3N0LT5wZGV2LT5kZXYsCisJCSAic2Qgc2dfY3B1OiAlI2x4IHNnX2RtYTogJSNseCBzZ19sZW46ICVkXG4iLAorCQkgKHVuc2lnbmVkIGxvbmcpaG9zdC0+c2dfY3B1LCAodW5zaWduZWQgbG9uZylob3N0LT5zZ19kbWEsCisJCSBzZ19sZW4pOworCisJLyogRW5hYmxlIHRoZSBETUEgaW50ZXJmYWNlICovCisJdGVtcCA9IG1jaV9yZWFkbChob3N0LCBDVFJMKTsKKwl0ZW1wIHw9IFNETU1DX0NUUkxfRE1BX0VOQUJMRTsKKwltY2lfd3JpdGVsKGhvc3QsIENUUkwsIHRlbXApOworCisJLyogRGlzYWJsZSBSWC9UWCBJUlFzLCBsZXQgRE1BIGhhbmRsZSBpdCAqLworCXRlbXAgPSBtY2lfcmVhZGwoaG9zdCwgSU5UTUFTSyk7CisJdGVtcCAgJj0gfihTRE1NQ19JTlRfUlhEUiB8IFNETU1DX0lOVF9UWERSKTsKKwltY2lfd3JpdGVsKGhvc3QsIElOVE1BU0ssIHRlbXApOworCisJaG9zdC0+ZG1hX29wcy0+c3RhcnQoaG9zdCwgc2dfbGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkd19tY2lfc3VibWl0X2RhdGEoc3RydWN0IGR3X21jaSAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCXUzMiB0ZW1wOworCisJZGF0YS0+ZXJyb3IgPSAtRUlOUFJPR1JFU1M7CisKKwlXQVJOX09OKGhvc3QtPmRhdGEpOworCWhvc3QtPnNnID0gTlVMTDsKKwlob3N0LT5kYXRhID0gZGF0YTsKKworCWlmIChkd19tY2lfc3VibWl0X2RhdGFfZG1hKGhvc3QsIGRhdGEpKSB7CisJCWhvc3QtPnNnID0gZGF0YS0+c2c7CisJCWhvc3QtPnBpb19vZmZzZXQgPSAwOworCQlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQorCQkJaG9zdC0+ZGlyX3N0YXR1cyA9IERXX01DSV9SRUNWX1NUQVRVUzsKKwkJZWxzZQorCQkJaG9zdC0+ZGlyX3N0YXR1cyA9IERXX01DSV9TRU5EX1NUQVRVUzsKKworCQl0ZW1wID0gbWNpX3JlYWRsKGhvc3QsIElOVE1BU0spOworCQl0ZW1wIHw9IFNETU1DX0lOVF9UWERSIHwgU0RNTUNfSU5UX1JYRFI7CisJCW1jaV93cml0ZWwoaG9zdCwgSU5UTUFTSywgdGVtcCk7CisKKwkJdGVtcCA9IG1jaV9yZWFkbChob3N0LCBDVFJMKTsKKwkJdGVtcCAmPSB+U0RNTUNfQ1RSTF9ETUFfRU5BQkxFOworCQltY2lfd3JpdGVsKGhvc3QsIENUUkwsIHRlbXApOworCX0KK30KKworc3RhdGljIHZvaWQgbWNpX3NlbmRfY21kKHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCwgdTMyIGNtZCwgdTMyIGFyZykKK3sKKwlzdHJ1Y3QgZHdfbWNpICpob3N0ID0gc2xvdC0+aG9zdDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApOworCXVuc2lnbmVkIGludCBjbWRfc3RhdHVzID0gMDsKKworCW1jaV93cml0ZWwoaG9zdCwgQ01EQVJHLCBhcmcpOworCXdtYigpOworCW1jaV93cml0ZWwoaG9zdCwgQ01ELCBTRE1NQ19DTURfU1RBUlQgfCBjbWQpOworCisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCWNtZF9zdGF0dXMgPSBtY2lfcmVhZGwoaG9zdCwgQ01EKTsKKwkJaWYgKCEoY21kX3N0YXR1cyAmIFNETU1DX0NNRF9TVEFSVCkpCisJCQlyZXR1cm47CisJfQorCWRldl9lcnIoJnNsb3QtPm1tYy0+Y2xhc3NfZGV2LAorCQkiVGltZW91dCBzZW5kaW5nIGNvbW1hbmQgKGNtZCAlI3ggYXJnICUjeCBzdGF0dXMgJSN4KVxuIiwKKwkJY21kLCBhcmcsIGNtZF9zdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBkd19tY2lfc2V0dXBfYnVzKHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCkKK3sKKwlzdHJ1Y3QgZHdfbWNpICpob3N0ID0gc2xvdC0+aG9zdDsKKwl1MzIgZGl2OworCisJaWYgKHNsb3QtPmNsb2NrICE9IGhvc3QtPmN1cnJlbnRfc3BlZWQpIHsKKwkJaWYgKGhvc3QtPmJ1c19oeiAlIHNsb3QtPmNsb2NrKQorCQkJLyoKKwkJCSAqIG1vdmUgdGhlICsgMSBhZnRlciB0aGUgZGl2aWRlIHRvIHByZXZlbnQKKwkJCSAqIG92ZXItY2xvY2tpbmcgdGhlIGNhcmQuCisJCQkgKi8KKwkJCWRpdiA9ICgoaG9zdC0+YnVzX2h6IC8gc2xvdC0+Y2xvY2spID4+IDEpICsgMTsKKwkJZWxzZQorCQkJZGl2ID0gKGhvc3QtPmJ1c19oeiAgLyBzbG90LT5jbG9jaykgPj4gMTsKKworCQlkZXZfaW5mbygmc2xvdC0+bW1jLT5jbGFzc19kZXYsCisJCQkgIkJ1cyBzcGVlZCAoc2xvdCAlZCkgPSAlZEh6IChzbG90IHJlcSAlZEh6LCBhY3R1YWwgJWRIWiIKKwkJCSAiIGRpdiA9ICVkKVxuIiwgc2xvdC0+aWQsIGhvc3QtPmJ1c19oeiwgc2xvdC0+Y2xvY2ssCisJCQkgZGl2ID8gKChob3N0LT5idXNfaHogLyBkaXYpID4+IDEpIDogaG9zdC0+YnVzX2h6LCBkaXYpOworCisJCS8qIGRpc2FibGUgY2xvY2sgKi8KKwkJbWNpX3dyaXRlbChob3N0LCBDTEtFTkEsIDApOworCQltY2lfd3JpdGVsKGhvc3QsIENMS1NSQywgMCk7CisKKwkJLyogaW5mb3JtIENJVSAqLworCQltY2lfc2VuZF9jbWQoc2xvdCwKKwkJCSAgICAgU0RNTUNfQ01EX1VQRF9DTEsgfCBTRE1NQ19DTURfUFJWX0RBVF9XQUlULCAwKTsKKworCQkvKiBzZXQgY2xvY2sgdG8gZGVzaXJlZCBzcGVlZCAqLworCQltY2lfd3JpdGVsKGhvc3QsIENMS0RJViwgZGl2KTsKKworCQkvKiBpbmZvcm0gQ0lVICovCisJCW1jaV9zZW5kX2NtZChzbG90LAorCQkJICAgICBTRE1NQ19DTURfVVBEX0NMSyB8IFNETU1DX0NNRF9QUlZfREFUX1dBSVQsIDApOworCisJCS8qIGVuYWJsZSBjbG9jayAqLworCQltY2lfd3JpdGVsKGhvc3QsIENMS0VOQSwgU0RNTUNfQ0xLRU5fRU5BQkxFKTsKKworCQkvKiBpbmZvcm0gQ0lVICovCisJCW1jaV9zZW5kX2NtZChzbG90LAorCQkJICAgICBTRE1NQ19DTURfVVBEX0NMSyB8IFNETU1DX0NNRF9QUlZfREFUX1dBSVQsIDApOworCisJCWhvc3QtPmN1cnJlbnRfc3BlZWQgPSBzbG90LT5jbG9jazsKKwl9CisKKwkvKiBTZXQgdGhlIGN1cnJlbnQgc2xvdCBidXMgd2lkdGggKi8KKwltY2lfd3JpdGVsKGhvc3QsIENUWVBFLCBzbG90LT5jdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21jaV9zdGFydF9yZXF1ZXN0KHN0cnVjdCBkd19tY2kgKmhvc3QsCisJCQkJIHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCkKK3sKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycTsKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZDsKKwlzdHJ1Y3QgbW1jX2RhdGEJKmRhdGE7CisJdTMyIGNtZGZsYWdzOworCisJbXJxID0gc2xvdC0+bXJxOworCWlmIChob3N0LT5wZGF0YS0+c2VsZWN0X3Nsb3QpCisJCWhvc3QtPnBkYXRhLT5zZWxlY3Rfc2xvdChzbG90LT5pZCk7CisKKwkvKiBTbG90IHNwZWNpZmljIHRpbWluZyBhbmQgd2lkdGggYWRqdXN0bWVudCAqLworCWR3X21jaV9zZXR1cF9idXMoc2xvdCk7CisKKwlob3N0LT5jdXJfc2xvdCA9IHNsb3Q7CisJaG9zdC0+bXJxID0gbXJxOworCisJaG9zdC0+cGVuZGluZ19ldmVudHMgPSAwOworCWhvc3QtPmNvbXBsZXRlZF9ldmVudHMgPSAwOworCWhvc3QtPmRhdGFfc3RhdHVzID0gMDsKKworCWRhdGEgPSBtcnEtPmRhdGE7CisJaWYgKGRhdGEpIHsKKwkJZHdfbWNpX3NldF90aW1lb3V0KGhvc3QpOworCQltY2lfd3JpdGVsKGhvc3QsIEJZVENOVCwgZGF0YS0+Ymxrc3oqZGF0YS0+YmxvY2tzKTsKKwkJbWNpX3dyaXRlbChob3N0LCBCTEtTSVosIGRhdGEtPmJsa3N6KTsKKwl9CisKKwljbWQgPSBtcnEtPmNtZDsKKwljbWRmbGFncyA9IGR3X21jaV9wcmVwYXJlX2NvbW1hbmQoc2xvdC0+bW1jLCBjbWQpOworCisJLyogdGhpcyBpcyB0aGUgZmlyc3QgY29tbWFuZCwgc2VuZCB0aGUgaW5pdGlhbGl6YXRpb24gY2xvY2sgKi8KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERXX01NQ19DQVJEX05FRURfSU5JVCwgJnNsb3QtPmZsYWdzKSkKKwkJY21kZmxhZ3MgfD0gU0RNTUNfQ01EX0lOSVQ7CisKKwlpZiAoZGF0YSkgeworCQlkd19tY2lfc3VibWl0X2RhdGEoaG9zdCwgZGF0YSk7CisJCXdtYigpOworCX0KKworCWR3X21jaV9zdGFydF9jb21tYW5kKGhvc3QsIGNtZCwgY21kZmxhZ3MpOworCisJaWYgKG1ycS0+c3RvcCkKKwkJaG9zdC0+c3RvcF9jbWRyID0gZHdfbWNpX3ByZXBhcmVfY29tbWFuZChzbG90LT5tbWMsIG1ycS0+c3RvcCk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21jaV9xdWV1ZV9yZXF1ZXN0KHN0cnVjdCBkd19tY2kgKmhvc3QsIHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCwKKwkJCQkgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCit7CisJZGV2X3ZkYmcoJnNsb3QtPm1tYy0+Y2xhc3NfZGV2LCAicXVldWUgcmVxdWVzdDogc3RhdGU9JWRcbiIsCisJCSBob3N0LT5zdGF0ZSk7CisKKwlzcGluX2xvY2tfYmgoJmhvc3QtPmxvY2spOworCXNsb3QtPm1ycSA9IG1ycTsKKworCWlmIChob3N0LT5zdGF0ZSA9PSBTVEFURV9JRExFKSB7CisJCWhvc3QtPnN0YXRlID0gU1RBVEVfU0VORElOR19DTUQ7CisJCWR3X21jaV9zdGFydF9yZXF1ZXN0KGhvc3QsIHNsb3QpOworCX0gZWxzZSB7CisJCWxpc3RfYWRkX3RhaWwoJnNsb3QtPnF1ZXVlX25vZGUsICZob3N0LT5xdWV1ZSk7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJmhvc3QtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBkd19tY2lfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCit7CisJc3RydWN0IGR3X21jaV9zbG90ICpzbG90ID0gbW1jX3ByaXYobW1jKTsKKwlzdHJ1Y3QgZHdfbWNpICpob3N0ID0gc2xvdC0+aG9zdDsKKworCVdBUk5fT04oc2xvdC0+bXJxKTsKKworCWlmICghdGVzdF9iaXQoRFdfTU1DX0NBUkRfUFJFU0VOVCwgJnNsb3QtPmZsYWdzKSkgeworCQltcnEtPmNtZC0+ZXJyb3IgPSAtRU5PTUVESVVNOworCQltbWNfcmVxdWVzdF9kb25lKG1tYywgbXJxKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFdlIGRvbid0IHN1cHBvcnQgbXVsdGlwbGUgYmxvY2tzIG9mIHdlaXJkIGxlbmd0aHMuICovCisJZHdfbWNpX3F1ZXVlX3JlcXVlc3QoaG9zdCwgc2xvdCwgbXJxKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWNpX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCit7CisJc3RydWN0IGR3X21jaV9zbG90ICpzbG90ID0gbW1jX3ByaXYobW1jKTsKKworCS8qIHNldCBkZWZhdWx0IDEgYml0IG1vZGUgKi8KKwlzbG90LT5jdHlwZSA9IFNETU1DX0NUWVBFXzFCSVQ7CisKKwlzd2l0Y2ggKGlvcy0+YnVzX3dpZHRoKSB7CisJY2FzZSBNTUNfQlVTX1dJRFRIXzE6CisJCXNsb3QtPmN0eXBlID0gU0RNTUNfQ1RZUEVfMUJJVDsKKwkJYnJlYWs7CisJY2FzZSBNTUNfQlVTX1dJRFRIXzQ6CisJCXNsb3QtPmN0eXBlID0gU0RNTUNfQ1RZUEVfNEJJVDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGlvcy0+Y2xvY2spIHsKKwkJLyoKKwkJICogVXNlIG1pcnJvciBvZiBpb3MtPmNsb2NrIHRvIHByZXZlbnQgcmFjZSB3aXRoIG1tYworCQkgKiBjb3JlIGlvcyB1cGRhdGUgd2hlbiBmaW5kaW5nIHRoZSBtaW5pbXVtLgorCQkgKi8KKwkJc2xvdC0+Y2xvY2sgPSBpb3MtPmNsb2NrOworCX0KKworCXN3aXRjaCAoaW9zLT5wb3dlcl9tb2RlKSB7CisJY2FzZSBNTUNfUE9XRVJfVVA6CisJCXNldF9iaXQoRFdfTU1DX0NBUkRfTkVFRF9JTklULCAmc2xvdC0+ZmxhZ3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZHdfbWNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKK3sKKwlpbnQgcmVhZF9vbmx5OworCXN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7CisJc3RydWN0IGR3X21jaV9ib2FyZCAqYnJkID0gc2xvdC0+aG9zdC0+cGRhdGE7CisKKwkvKiBVc2UgcGxhdGZvcm0gZ2V0X3JvIGZ1bmN0aW9uLCBlbHNlIHRyeSBvbiBib2FyZCB3cml0ZSBwcm90ZWN0ICovCisJaWYgKGJyZC0+Z2V0X3JvKQorCQlyZWFkX29ubHkgPSBicmQtPmdldF9ybyhzbG90LT5pZCk7CisJZWxzZQorCQlyZWFkX29ubHkgPQorCQkJbWNpX3JlYWRsKHNsb3QtPmhvc3QsIFdSVFBSVCkgJiAoMSA8PCBzbG90LT5pZCkgPyAxIDogMDsKKworCWRldl9kYmcoJm1tYy0+Y2xhc3NfZGV2LCAiY2FyZCBpcyAlc1xuIiwKKwkJcmVhZF9vbmx5ID8gInJlYWQtb25seSIgOiAicmVhZC13cml0ZSIpOworCisJcmV0dXJuIHJlYWRfb25seTsKK30KKworc3RhdGljIGludCBkd19tY2lfZ2V0X2NkKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQoreworCWludCBwcmVzZW50OworCXN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7CisJc3RydWN0IGR3X21jaV9ib2FyZCAqYnJkID0gc2xvdC0+aG9zdC0+cGRhdGE7CisKKwkvKiBVc2UgcGxhdGZvcm0gZ2V0X2NkIGZ1bmN0aW9uLCBlbHNlIHRyeSBvbmJvYXJkIGNhcmQgZGV0ZWN0ICovCisJaWYgKGJyZC0+Z2V0X2NkKQorCQlwcmVzZW50ID0gIWJyZC0+Z2V0X2NkKHNsb3QtPmlkKTsKKwllbHNlCisJCXByZXNlbnQgPSAobWNpX3JlYWRsKHNsb3QtPmhvc3QsIENERVRFQ1QpICYgKDEgPDwgc2xvdC0+aWQpKQorCQkJPT0gMCA/IDEgOiAwOworCisJaWYgKHByZXNlbnQpCisJCWRldl9kYmcoJm1tYy0+Y2xhc3NfZGV2LCAiY2FyZCBpcyBwcmVzZW50XG4iKTsKKwllbHNlCisJCWRldl9kYmcoJm1tYy0+Y2xhc3NfZGV2LCAiY2FyZCBpcyBub3QgcHJlc2VudFxuIik7CisKKwlyZXR1cm4gcHJlc2VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgZHdfbWNpX29wcyA9IHsKKwkucmVxdWVzdAk9IGR3X21jaV9yZXF1ZXN0LAorCS5zZXRfaW9zCT0gZHdfbWNpX3NldF9pb3MsCisJLmdldF9ybwkJPSBkd19tY2lfZ2V0X3JvLAorCS5nZXRfY2QJCT0gZHdfbWNpX2dldF9jZCwKK307CisKK3N0YXRpYyB2b2lkIGR3X21jaV9yZXF1ZXN0X2VuZChzdHJ1Y3QgZHdfbWNpICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSkKKwlfX3JlbGVhc2VzKCZob3N0LT5sb2NrKQorCV9fYWNxdWlyZXMoJmhvc3QtPmxvY2spCit7CisJc3RydWN0IGR3X21jaV9zbG90ICpzbG90OworCXN0cnVjdCBtbWNfaG9zdAkqcHJldl9tbWMgPSBob3N0LT5jdXJfc2xvdC0+bW1jOworCisJV0FSTl9PTihob3N0LT5jbWQgfHwgaG9zdC0+ZGF0YSk7CisKKwlob3N0LT5jdXJfc2xvdC0+bXJxID0gTlVMTDsKKwlob3N0LT5tcnEgPSBOVUxMOworCWlmICghbGlzdF9lbXB0eSgmaG9zdC0+cXVldWUpKSB7CisJCXNsb3QgPSBsaXN0X2VudHJ5KGhvc3QtPnF1ZXVlLm5leHQsCisJCQkJICBzdHJ1Y3QgZHdfbWNpX3Nsb3QsIHF1ZXVlX25vZGUpOworCQlsaXN0X2RlbCgmc2xvdC0+cXVldWVfbm9kZSk7CisJCWRldl92ZGJnKCZob3N0LT5wZGV2LT5kZXYsICJsaXN0IG5vdCBlbXB0eTogJXMgaXMgbmV4dFxuIiwKKwkJCSBtbWNfaG9zdG5hbWUoc2xvdC0+bW1jKSk7CisJCWhvc3QtPnN0YXRlID0gU1RBVEVfU0VORElOR19DTUQ7CisJCWR3X21jaV9zdGFydF9yZXF1ZXN0KGhvc3QsIHNsb3QpOworCX0gZWxzZSB7CisJCWRldl92ZGJnKCZob3N0LT5wZGV2LT5kZXYsICJsaXN0IGVtcHR5XG4iKTsKKwkJaG9zdC0+c3RhdGUgPSBTVEFURV9JRExFOworCX0KKworCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKKwltbWNfcmVxdWVzdF9kb25lKHByZXZfbW1jLCBtcnEpOworCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21jaV9jb21tYW5kX2NvbXBsZXRlKHN0cnVjdCBkd19tY2kgKmhvc3QsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kKQoreworCXUzMiBzdGF0dXMgPSBob3N0LT5jbWRfc3RhdHVzOworCisJaG9zdC0+Y21kX3N0YXR1cyA9IDA7CisKKwkvKiBSZWFkIHRoZSByZXNwb25zZSBmcm9tIHRoZSBjYXJkICh1cCB0byAxNiBieXRlcykgKi8KKwlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkgeworCQlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfMTM2KSB7CisJCQljbWQtPnJlc3BbM10gPSBtY2lfcmVhZGwoaG9zdCwgUkVTUDApOworCQkJY21kLT5yZXNwWzJdID0gbWNpX3JlYWRsKGhvc3QsIFJFU1AxKTsKKwkJCWNtZC0+cmVzcFsxXSA9IG1jaV9yZWFkbChob3N0LCBSRVNQMik7CisJCQljbWQtPnJlc3BbMF0gPSBtY2lfcmVhZGwoaG9zdCwgUkVTUDMpOworCQl9IGVsc2UgeworCQkJY21kLT5yZXNwWzBdID0gbWNpX3JlYWRsKGhvc3QsIFJFU1AwKTsKKwkJCWNtZC0+cmVzcFsxXSA9IDA7CisJCQljbWQtPnJlc3BbMl0gPSAwOworCQkJY21kLT5yZXNwWzNdID0gMDsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgJiBTRE1NQ19JTlRfUlRPKQorCQljbWQtPmVycm9yID0gLUVUSU1FRE9VVDsKKwllbHNlIGlmICgoY21kLT5mbGFncyAmIE1NQ19SU1BfQ1JDKSAmJiAoc3RhdHVzICYgU0RNTUNfSU5UX1JDUkMpKQorCQljbWQtPmVycm9yID0gLUVJTFNFUTsKKwllbHNlIGlmIChzdGF0dXMgJiBTRE1NQ19JTlRfUkVTUF9FUlIpCisJCWNtZC0+ZXJyb3IgPSAtRUlPOworCWVsc2UKKwkJY21kLT5lcnJvciA9IDA7CisKKwlpZiAoY21kLT5lcnJvcikgeworCQkvKiBuZXdlciBpcCB2ZXJzaW9ucyBuZWVkIGEgZGVsYXkgYmV0d2VlbiByZXRyaWVzICovCisJCWlmIChob3N0LT5xdWlya3MgJiBEV19NQ0lfUVVJUktfUkVUUllfREVMQVkpCisJCQltZGVsYXkoMjApOworCisJCWlmIChjbWQtPmRhdGEpIHsKKwkJCWhvc3QtPmRhdGEgPSBOVUxMOworCQkJZHdfbWNpX3N0b3BfZG1hKGhvc3QpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBkd19tY2lfdGFza2xldF9mdW5jKHVuc2lnbmVkIGxvbmcgcHJpdikKK3sKKwlzdHJ1Y3QgZHdfbWNpICpob3N0ID0gKHN0cnVjdCBkd19tY2kgKilwcml2OworCXN0cnVjdCBtbWNfZGF0YQkqZGF0YTsKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZDsKKwllbnVtIGR3X21jaV9zdGF0ZSBzdGF0ZTsKKwllbnVtIGR3X21jaV9zdGF0ZSBwcmV2X3N0YXRlOworCXUzMiBzdGF0dXM7CisKKwlzcGluX2xvY2soJmhvc3QtPmxvY2spOworCisJc3RhdGUgPSBob3N0LT5zdGF0ZTsKKwlkYXRhID0gaG9zdC0+ZGF0YTsKKworCWRvIHsKKwkJcHJldl9zdGF0ZSA9IHN0YXRlOworCisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBTVEFURV9JRExFOgorCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9TRU5ESU5HX0NNRDoKKwkJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEVWRU5UX0NNRF9DT01QTEVURSwKKwkJCQkJCSZob3N0LT5wZW5kaW5nX2V2ZW50cykpCisJCQkJYnJlYWs7CisKKwkJCWNtZCA9IGhvc3QtPmNtZDsKKwkJCWhvc3QtPmNtZCA9IE5VTEw7CisJCQlzZXRfYml0KEVWRU5UX0NNRF9DT01QTEVURSwgJmhvc3QtPmNvbXBsZXRlZF9ldmVudHMpOworCQkJZHdfbWNpX2NvbW1hbmRfY29tcGxldGUoaG9zdCwgaG9zdC0+bXJxLT5jbWQpOworCQkJaWYgKCFob3N0LT5tcnEtPmRhdGEgfHwgY21kLT5lcnJvcikgeworCQkJCWR3X21jaV9yZXF1ZXN0X2VuZChob3N0LCBob3N0LT5tcnEpOworCQkJCWdvdG8gdW5sb2NrOworCQkJfQorCisJCQlwcmV2X3N0YXRlID0gc3RhdGUgPSBTVEFURV9TRU5ESU5HX0RBVEE7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCQljYXNlIFNUQVRFX1NFTkRJTkdfREFUQToKKwkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRVZFTlRfREFUQV9FUlJPUiwKKwkJCQkJICAgICAgICZob3N0LT5wZW5kaW5nX2V2ZW50cykpIHsKKwkJCQlkd19tY2lfc3RvcF9kbWEoaG9zdCk7CisJCQkJaWYgKGRhdGEtPnN0b3ApCisJCQkJCXNlbmRfc3RvcF9jbWQoaG9zdCwgZGF0YSk7CisJCQkJc3RhdGUgPSBTVEFURV9EQVRBX0VSUk9SOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChFVkVOVF9YRkVSX0NPTVBMRVRFLAorCQkJCQkJJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkKKwkJCQlicmVhazsKKworCQkJc2V0X2JpdChFVkVOVF9YRkVSX0NPTVBMRVRFLCAmaG9zdC0+Y29tcGxldGVkX2V2ZW50cyk7CisJCQlwcmV2X3N0YXRlID0gc3RhdGUgPSBTVEFURV9EQVRBX0JVU1k7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCQljYXNlIFNUQVRFX0RBVEFfQlVTWToKKwkJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEVWRU5UX0RBVEFfQ09NUExFVEUsCisJCQkJCQkmaG9zdC0+cGVuZGluZ19ldmVudHMpKQorCQkJCWJyZWFrOworCisJCQlob3N0LT5kYXRhID0gTlVMTDsKKwkJCXNldF9iaXQoRVZFTlRfREFUQV9DT01QTEVURSwgJmhvc3QtPmNvbXBsZXRlZF9ldmVudHMpOworCQkJc3RhdHVzID0gaG9zdC0+ZGF0YV9zdGF0dXM7CisKKwkJCWlmIChzdGF0dXMgJiBEV19NQ0lfREFUQV9FUlJPUl9GTEFHUykgeworCQkJCWlmIChzdGF0dXMgJiBTRE1NQ19JTlRfRFRPKSB7CisJCQkJCWRldl9lcnIoJmhvc3QtPnBkZXYtPmRldiwKKwkJCQkJCSJkYXRhIHRpbWVvdXQgZXJyb3JcbiIpOworCQkJCQlkYXRhLT5lcnJvciA9IC1FVElNRURPVVQ7CisJCQkJfSBlbHNlIGlmIChzdGF0dXMgJiBTRE1NQ19JTlRfRENSQykgeworCQkJCQlkZXZfZXJyKCZob3N0LT5wZGV2LT5kZXYsCisJCQkJCQkiZGF0YSBDUkMgZXJyb3JcbiIpOworCQkJCQlkYXRhLT5lcnJvciA9IC1FSUxTRVE7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGV2X2VycigmaG9zdC0+cGRldi0+ZGV2LAorCQkJCQkJImRhdGEgRklGTyBlcnJvciAiCisJCQkJCQkiKHN0YXR1cz0lMDh4KVxuIiwKKwkJCQkJCXN0YXR1cyk7CisJCQkJCWRhdGEtPmVycm9yID0gLUVJTzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWRhdGEtPmJ5dGVzX3hmZXJlZCA9IGRhdGEtPmJsb2NrcyAqIGRhdGEtPmJsa3N6OworCQkJCWRhdGEtPmVycm9yID0gMDsKKwkJCX0KKworCQkJaWYgKCFkYXRhLT5zdG9wKSB7CisJCQkJZHdfbWNpX3JlcXVlc3RfZW5kKGhvc3QsIGhvc3QtPm1ycSk7CisJCQkJZ290byB1bmxvY2s7CisJCQl9CisKKwkJCXByZXZfc3RhdGUgPSBzdGF0ZSA9IFNUQVRFX1NFTkRJTkdfU1RPUDsKKwkJCWlmICghZGF0YS0+ZXJyb3IpCisJCQkJc2VuZF9zdG9wX2NtZChob3N0LCBkYXRhKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJCWNhc2UgU1RBVEVfU0VORElOR19TVE9QOgorCQkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoRVZFTlRfQ01EX0NPTVBMRVRFLAorCQkJCQkJJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkKKwkJCQlicmVhazsKKworCQkJaG9zdC0+Y21kID0gTlVMTDsKKwkJCWR3X21jaV9jb21tYW5kX2NvbXBsZXRlKGhvc3QsIGhvc3QtPm1ycS0+c3RvcCk7CisJCQlkd19tY2lfcmVxdWVzdF9lbmQoaG9zdCwgaG9zdC0+bXJxKTsKKwkJCWdvdG8gdW5sb2NrOworCisJCWNhc2UgU1RBVEVfREFUQV9FUlJPUjoKKwkJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEVWRU5UX1hGRVJfQ09NUExFVEUsCisJCQkJCQkmaG9zdC0+cGVuZGluZ19ldmVudHMpKQorCQkJCWJyZWFrOworCisJCQlzdGF0ZSA9IFNUQVRFX0RBVEFfQlVTWTsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoc3RhdGUgIT0gcHJldl9zdGF0ZSk7CisKKwlob3N0LT5zdGF0ZSA9IHN0YXRlOwordW5sb2NrOgorCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKKworfQorCitzdGF0aWMgdm9pZCBkd19tY2lfcHVzaF9kYXRhMTYoc3RydWN0IGR3X21jaSAqaG9zdCwgdm9pZCAqYnVmLCBpbnQgY250KQoreworCXUxNiAqcGRhdGEgPSAodTE2ICopYnVmOworCisJV0FSTl9PTihjbnQgJSAyICE9IDApOworCisJY250ID0gY250ID4+IDE7CisJd2hpbGUgKGNudCA+IDApIHsKKwkJbWNpX3dyaXRldyhob3N0LCBEQVRBLCAqcGRhdGErKyk7CisJCWNudC0tOworCX0KK30KKworc3RhdGljIHZvaWQgZHdfbWNpX3B1bGxfZGF0YTE2KHN0cnVjdCBkd19tY2kgKmhvc3QsIHZvaWQgKmJ1ZiwgaW50IGNudCkKK3sKKwl1MTYgKnBkYXRhID0gKHUxNiAqKWJ1ZjsKKworCVdBUk5fT04oY250ICUgMiAhPSAwKTsKKworCWNudCA9IGNudCA+PiAxOworCXdoaWxlIChjbnQgPiAwKSB7CisJCSpwZGF0YSsrID0gbWNpX3JlYWR3KGhvc3QsIERBVEEpOworCQljbnQtLTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR3X21jaV9wdXNoX2RhdGEzMihzdHJ1Y3QgZHdfbWNpICpob3N0LCB2b2lkICpidWYsIGludCBjbnQpCit7CisJdTMyICpwZGF0YSA9ICh1MzIgKilidWY7CisKKwlXQVJOX09OKGNudCAlIDQgIT0gMCk7CisJV0FSTl9PTigodW5zaWduZWQgbG9uZylwZGF0YSAmIDB4Myk7CisKKwljbnQgPSBjbnQgPj4gMjsKKwl3aGlsZSAoY250ID4gMCkgeworCQltY2lfd3JpdGVsKGhvc3QsIERBVEEsICpwZGF0YSsrKTsKKwkJY250LS07CisJfQorfQorCitzdGF0aWMgdm9pZCBkd19tY2lfcHVsbF9kYXRhMzIoc3RydWN0IGR3X21jaSAqaG9zdCwgdm9pZCAqYnVmLCBpbnQgY250KQoreworCXUzMiAqcGRhdGEgPSAodTMyICopYnVmOworCisJV0FSTl9PTihjbnQgJSA0ICE9IDApOworCVdBUk5fT04oKHVuc2lnbmVkIGxvbmcpcGRhdGEgJiAweDMpOworCisJY250ID0gY250ID4+IDI7CisJd2hpbGUgKGNudCA+IDApIHsKKwkJKnBkYXRhKysgPSBtY2lfcmVhZGwoaG9zdCwgREFUQSk7CisJCWNudC0tOworCX0KK30KKworc3RhdGljIHZvaWQgZHdfbWNpX3B1c2hfZGF0YTY0KHN0cnVjdCBkd19tY2kgKmhvc3QsIHZvaWQgKmJ1ZiwgaW50IGNudCkKK3sKKwl1NjQgKnBkYXRhID0gKHU2NCAqKWJ1ZjsKKworCVdBUk5fT04oY250ICUgOCAhPSAwKTsKKworCWNudCA9IGNudCA+PiAzOworCXdoaWxlIChjbnQgPiAwKSB7CisJCW1jaV93cml0ZXEoaG9zdCwgREFUQSwgKnBkYXRhKyspOworCQljbnQtLTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR3X21jaV9wdWxsX2RhdGE2NChzdHJ1Y3QgZHdfbWNpICpob3N0LCB2b2lkICpidWYsIGludCBjbnQpCit7CisJdTY0ICpwZGF0YSA9ICh1NjQgKilidWY7CisKKwlXQVJOX09OKGNudCAlIDggIT0gMCk7CisKKwljbnQgPSBjbnQgPj4gMzsKKwl3aGlsZSAoY250ID4gMCkgeworCQkqcGRhdGErKyA9IG1jaV9yZWFkcShob3N0LCBEQVRBKTsKKwkJY250LS07CisJfQorfQorCitzdGF0aWMgdm9pZCBkd19tY2lfcmVhZF9kYXRhX3BpbyhzdHJ1Y3QgZHdfbWNpICpob3N0KQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBob3N0LT5zZzsKKwl2b2lkICpidWYgPSBzZ192aXJ0KHNnKTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gaG9zdC0+cGlvX29mZnNldDsKKwlzdHJ1Y3QgbW1jX2RhdGEJKmRhdGEgPSBob3N0LT5kYXRhOworCWludCBzaGlmdCA9IGhvc3QtPmRhdGFfc2hpZnQ7CisJdTMyIHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgbmJ5dGVzID0gMCwgbGVuLCBvbGRfbGVuLCBjb3VudCA9IDA7CisKKwlkbyB7CisJCWxlbiA9IFNETU1DX0dFVF9GQ05UKG1jaV9yZWFkbChob3N0LCBTVEFUVVMpKSA8PCBzaGlmdDsKKwkJaWYgKGNvdW50ID09IDApCisJCQlvbGRfbGVuID0gbGVuOworCisJCWlmIChvZmZzZXQgKyBsZW4gPD0gc2ctPmxlbmd0aCkgeworCQkJaG9zdC0+cHVsbF9kYXRhKGhvc3QsICh2b2lkICopKGJ1ZiArIG9mZnNldCksIGxlbik7CisKKwkJCW9mZnNldCArPSBsZW47CisJCQluYnl0ZXMgKz0gbGVuOworCisJCQlpZiAob2Zmc2V0ID09IHNnLT5sZW5ndGgpIHsKKwkJCQlmbHVzaF9kY2FjaGVfcGFnZShzZ19wYWdlKHNnKSk7CisJCQkJaG9zdC0+c2cgPSBzZyA9IHNnX25leHQoc2cpOworCQkJCWlmICghc2cpCisJCQkJCWdvdG8gZG9uZTsKKworCQkJCW9mZnNldCA9IDA7CisJCQkJYnVmID0gc2dfdmlydChzZyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgcmVtYWluaW5nID0gc2ctPmxlbmd0aCAtIG9mZnNldDsKKwkJCWhvc3QtPnB1bGxfZGF0YShob3N0LCAodm9pZCAqKShidWYgKyBvZmZzZXQpLAorCQkJCQlyZW1haW5pbmcpOworCQkJbmJ5dGVzICs9IHJlbWFpbmluZzsKKworCQkJZmx1c2hfZGNhY2hlX3BhZ2Uoc2dfcGFnZShzZykpOworCQkJaG9zdC0+c2cgPSBzZyA9IHNnX25leHQoc2cpOworCQkJaWYgKCFzZykKKwkJCQlnb3RvIGRvbmU7CisKKwkJCW9mZnNldCA9IGxlbiAtIHJlbWFpbmluZzsKKwkJCWJ1ZiA9IHNnX3ZpcnQoc2cpOworCQkJaG9zdC0+cHVsbF9kYXRhKGhvc3QsIGJ1Ziwgb2Zmc2V0KTsKKwkJCW5ieXRlcyArPSBvZmZzZXQ7CisJCX0KKworCQlzdGF0dXMgPSBtY2lfcmVhZGwoaG9zdCwgTUlOVFNUUyk7CisJCW1jaV93cml0ZWwoaG9zdCwgUklOVFNUUywgU0RNTUNfSU5UX1JYRFIpOworCQlpZiAoc3RhdHVzICYgRFdfTUNJX0RBVEFfRVJST1JfRkxBR1MpIHsKKwkJCWhvc3QtPmRhdGFfc3RhdHVzID0gc3RhdHVzOworCQkJZGF0YS0+Ynl0ZXNfeGZlcmVkICs9IG5ieXRlczsKKwkJCXNtcF93bWIoKTsKKworCQkJc2V0X2JpdChFVkVOVF9EQVRBX0VSUk9SLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpOworCisJCQl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT50YXNrbGV0KTsKKwkJCXJldHVybjsKKwkJfQorCQljb3VudCsrOworCX0gd2hpbGUgKHN0YXR1cyAmIFNETU1DX0lOVF9SWERSKTsgLyppZiB0aGUgUlhEUiBpcyByZWFkeSByZWFkIGFnYWluKi8KKwlsZW4gPSBTRE1NQ19HRVRfRkNOVChtY2lfcmVhZGwoaG9zdCwgU1RBVFVTKSk7CisJaG9zdC0+cGlvX29mZnNldCA9IG9mZnNldDsKKwlkYXRhLT5ieXRlc194ZmVyZWQgKz0gbmJ5dGVzOworCXJldHVybjsKKworZG9uZToKKwlkYXRhLT5ieXRlc194ZmVyZWQgKz0gbmJ5dGVzOworCXNtcF93bWIoKTsKKwlzZXRfYml0KEVWRU5UX1hGRVJfQ09NUExFVEUsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21jaV93cml0ZV9kYXRhX3BpbyhzdHJ1Y3QgZHdfbWNpICpob3N0KQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBob3N0LT5zZzsKKwl2b2lkICpidWYgPSBzZ192aXJ0KHNnKTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gaG9zdC0+cGlvX29mZnNldDsKKwlzdHJ1Y3QgbW1jX2RhdGEJKmRhdGEgPSBob3N0LT5kYXRhOworCWludCBzaGlmdCA9IGhvc3QtPmRhdGFfc2hpZnQ7CisJdTMyIHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgbmJ5dGVzID0gMCwgbGVuOworCisJZG8geworCQlsZW4gPSBTRE1NQ19GSUZPX1NaIC0KKwkJCShTRE1NQ19HRVRfRkNOVChtY2lfcmVhZGwoaG9zdCwgU1RBVFVTKSkgPDwgc2hpZnQpOworCQlpZiAob2Zmc2V0ICsgbGVuIDw9IHNnLT5sZW5ndGgpIHsKKwkJCWhvc3QtPnB1c2hfZGF0YShob3N0LCAodm9pZCAqKShidWYgKyBvZmZzZXQpLCBsZW4pOworCisJCQlvZmZzZXQgKz0gbGVuOworCQkJbmJ5dGVzICs9IGxlbjsKKwkJCWlmIChvZmZzZXQgPT0gc2ctPmxlbmd0aCkgeworCQkJCWhvc3QtPnNnID0gc2cgPSBzZ19uZXh0KHNnKTsKKwkJCQlpZiAoIXNnKQorCQkJCQlnb3RvIGRvbmU7CisKKwkJCQlvZmZzZXQgPSAwOworCQkJCWJ1ZiA9IHNnX3ZpcnQoc2cpOworCQkJfQorCQl9IGVsc2UgeworCQkJdW5zaWduZWQgaW50IHJlbWFpbmluZyA9IHNnLT5sZW5ndGggLSBvZmZzZXQ7CisKKwkJCWhvc3QtPnB1c2hfZGF0YShob3N0LCAodm9pZCAqKShidWYgKyBvZmZzZXQpLAorCQkJCQlyZW1haW5pbmcpOworCQkJbmJ5dGVzICs9IHJlbWFpbmluZzsKKworCQkJaG9zdC0+c2cgPSBzZyA9IHNnX25leHQoc2cpOworCQkJaWYgKCFzZykKKwkJCQlnb3RvIGRvbmU7CisKKwkJCW9mZnNldCA9IGxlbiAtIHJlbWFpbmluZzsKKwkJCWJ1ZiA9IHNnX3ZpcnQoc2cpOworCQkJaG9zdC0+cHVzaF9kYXRhKGhvc3QsICh2b2lkICopYnVmLCBvZmZzZXQpOworCQkJbmJ5dGVzICs9IG9mZnNldDsKKwkJfQorCisJCXN0YXR1cyA9IG1jaV9yZWFkbChob3N0LCBNSU5UU1RTKTsKKwkJbWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLCBTRE1NQ19JTlRfVFhEUik7CisJCWlmIChzdGF0dXMgJiBEV19NQ0lfREFUQV9FUlJPUl9GTEFHUykgeworCQkJaG9zdC0+ZGF0YV9zdGF0dXMgPSBzdGF0dXM7CisJCQlkYXRhLT5ieXRlc194ZmVyZWQgKz0gbmJ5dGVzOworCisJCQlzbXBfd21iKCk7CisKKwkJCXNldF9iaXQoRVZFTlRfREFUQV9FUlJPUiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKTsKKworCQkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+dGFza2xldCk7CisJCQlyZXR1cm47CisJCX0KKwl9IHdoaWxlIChzdGF0dXMgJiBTRE1NQ19JTlRfVFhEUik7IC8qIGlmIFRYRFIgd3JpdGUgYWdhaW4gKi8KKworCWhvc3QtPnBpb19vZmZzZXQgPSBvZmZzZXQ7CisJZGF0YS0+Ynl0ZXNfeGZlcmVkICs9IG5ieXRlczsKKworCXJldHVybjsKKworZG9uZToKKwlkYXRhLT5ieXRlc194ZmVyZWQgKz0gbmJ5dGVzOworCXNtcF93bWIoKTsKKwlzZXRfYml0KEVWRU5UX1hGRVJfQ09NUExFVEUsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21jaV9jbWRfaW50ZXJydXB0KHN0cnVjdCBkd19tY2kgKmhvc3QsIHUzMiBzdGF0dXMpCit7CisJaWYgKCFob3N0LT5jbWRfc3RhdHVzKQorCQlob3N0LT5jbWRfc3RhdHVzID0gc3RhdHVzOworCisJc21wX3dtYigpOworCisJc2V0X2JpdChFVkVOVF9DTURfQ09NUExFVEUsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+dGFza2xldCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkd19tY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgZHdfbWNpICpob3N0ID0gZGV2X2lkOworCXUzMiBzdGF0dXMsIHBlbmRpbmc7CisJdW5zaWduZWQgaW50IHBhc3NfY291bnQgPSAwOworCisJZG8geworCQlzdGF0dXMgPSBtY2lfcmVhZGwoaG9zdCwgUklOVFNUUyk7CisJCXBlbmRpbmcgPSBtY2lfcmVhZGwoaG9zdCwgTUlOVFNUUyk7IC8qIHJlYWQtb25seSBtYXNrIHJlZyAqLworCisJCS8qCisJCSAqIERUTyBmaXggLSB2ZXJzaW9uIDIuMTBhIGFuZCBiZWxvdywgYW5kIG9ubHkgaWYgaW50ZXJuYWwgRE1BCisJCSAqIGlzIGNvbmZpZ3VyZWQuCisJCSAqLworCQlpZiAoaG9zdC0+cXVpcmtzICYgRFdfTUNJX1FVSVJLX0lETUFDX0RUTykgeworCQkJaWYgKCFwZW5kaW5nICYmCisJCQkgICAgKChtY2lfcmVhZGwoaG9zdCwgU1RBVFVTKSA+PiAxNykgJiAweDFmZmYpKQorCQkJCXBlbmRpbmcgfD0gU0RNTUNfSU5UX0RBVEFfT1ZFUjsKKwkJfQorCisJCWlmICghcGVuZGluZykKKwkJCWJyZWFrOworCisJCWlmIChwZW5kaW5nICYgRFdfTUNJX0NNRF9FUlJPUl9GTEFHUykgeworCQkJbWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLCBEV19NQ0lfQ01EX0VSUk9SX0ZMQUdTKTsKKwkJCWhvc3QtPmNtZF9zdGF0dXMgPSBzdGF0dXM7CisJCQlzbXBfd21iKCk7CisJCQlzZXRfYml0KEVWRU5UX0NNRF9DT01QTEVURSwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKTsKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJmhvc3QtPnRhc2tsZXQpOworCQl9CisKKwkJaWYgKHBlbmRpbmcgJiBEV19NQ0lfREFUQV9FUlJPUl9GTEFHUykgeworCQkJLyogaWYgdGhlcmUgaXMgYW4gZXJyb3IgcmVwb3J0IERBVEFfRVJST1IgKi8KKwkJCW1jaV93cml0ZWwoaG9zdCwgUklOVFNUUywgRFdfTUNJX0RBVEFfRVJST1JfRkxBR1MpOworCQkJaG9zdC0+ZGF0YV9zdGF0dXMgPSBzdGF0dXM7CisJCQlzbXBfd21iKCk7CisJCQlzZXRfYml0KEVWRU5UX0RBVEFfRVJST1IsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJCQl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT50YXNrbGV0KTsKKwkJfQorCisJCWlmIChwZW5kaW5nICYgU0RNTUNfSU5UX0RBVEFfT1ZFUikgeworCQkJbWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLCBTRE1NQ19JTlRfREFUQV9PVkVSKTsKKwkJCWlmICghaG9zdC0+ZGF0YV9zdGF0dXMpCisJCQkJaG9zdC0+ZGF0YV9zdGF0dXMgPSBzdGF0dXM7CisJCQlzbXBfd21iKCk7CisJCQlpZiAoaG9zdC0+ZGlyX3N0YXR1cyA9PSBEV19NQ0lfUkVDVl9TVEFUVVMpIHsKKwkJCQlpZiAoaG9zdC0+c2cgIT0gTlVMTCkKKwkJCQkJZHdfbWNpX3JlYWRfZGF0YV9waW8oaG9zdCk7CisJCQl9CisJCQlzZXRfYml0KEVWRU5UX0RBVEFfQ09NUExFVEUsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJCQl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT50YXNrbGV0KTsKKwkJfQorCisJCWlmIChwZW5kaW5nICYgU0RNTUNfSU5UX1JYRFIpIHsKKwkJCW1jaV93cml0ZWwoaG9zdCwgUklOVFNUUywgU0RNTUNfSU5UX1JYRFIpOworCQkJaWYgKGhvc3QtPnNnKQorCQkJCWR3X21jaV9yZWFkX2RhdGFfcGlvKGhvc3QpOworCQl9CisKKwkJaWYgKHBlbmRpbmcgJiBTRE1NQ19JTlRfVFhEUikgeworCQkJbWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLCBTRE1NQ19JTlRfVFhEUik7CisJCQlpZiAoaG9zdC0+c2cpCisJCQkJZHdfbWNpX3dyaXRlX2RhdGFfcGlvKGhvc3QpOworCQl9CisKKwkJaWYgKHBlbmRpbmcgJiBTRE1NQ19JTlRfQ01EX0RPTkUpIHsKKwkJCW1jaV93cml0ZWwoaG9zdCwgUklOVFNUUywgU0RNTUNfSU5UX0NNRF9ET05FKTsKKwkJCWR3X21jaV9jbWRfaW50ZXJydXB0KGhvc3QsIHN0YXR1cyk7CisJCX0KKworCQlpZiAocGVuZGluZyAmIFNETU1DX0lOVF9DRCkgeworCQkJbWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLCBTRE1NQ19JTlRfQ0QpOworCQkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+Y2FyZF90YXNrbGV0KTsKKwkJfQorCisJfSB3aGlsZSAocGFzc19jb3VudCsrIDwgNSk7CisKKyNpZmRlZiBDT05GSUdfTU1DX0RXX0lETUFDCisJLyogSGFuZGxlIERNQSBpbnRlcnJ1cHRzICovCisJcGVuZGluZyA9IG1jaV9yZWFkbChob3N0LCBJRFNUUyk7CisJaWYgKHBlbmRpbmcgJiAoU0RNTUNfSURNQUNfSU5UX1RJIHwgU0RNTUNfSURNQUNfSU5UX1JJKSkgeworCQltY2lfd3JpdGVsKGhvc3QsIElEU1RTLCBTRE1NQ19JRE1BQ19JTlRfVEkgfCBTRE1NQ19JRE1BQ19JTlRfUkkpOworCQltY2lfd3JpdGVsKGhvc3QsIElEU1RTLCBTRE1NQ19JRE1BQ19JTlRfTkkpOworCQlzZXRfYml0KEVWRU5UX0RBVEFfQ09NUExFVEUsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJCWhvc3QtPmRtYV9vcHMtPmNvbXBsZXRlKGhvc3QpOworCX0KKyNlbmRpZgorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBkd19tY2lfdGFza2xldF9jYXJkKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZHdfbWNpICpob3N0ID0gKHN0cnVjdCBkd19tY2kgKilkYXRhOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGhvc3QtPm51bV9zbG90czsgaSsrKSB7CisJCXN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IGhvc3QtPnNsb3RbaV07CisJCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gc2xvdC0+bW1jOworCQlzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycTsKKwkJaW50IHByZXNlbnQ7CisJCXUzMiBjdHJsOworCisJCXByZXNlbnQgPSBkd19tY2lfZ2V0X2NkKG1tYyk7CisJCXdoaWxlIChwcmVzZW50ICE9IHNsb3QtPmxhc3RfZGV0ZWN0X3N0YXRlKSB7CisJCQlzcGluX2xvY2soJmhvc3QtPmxvY2spOworCisJCQlkZXZfZGJnKCZzbG90LT5tbWMtPmNsYXNzX2RldiwgImNhcmQgJXNcbiIsCisJCQkJcHJlc2VudCA/ICJpbnNlcnRlZCIgOiAicmVtb3ZlZCIpOworCisJCQkvKiBDYXJkIGNoYW5nZSBkZXRlY3RlZCAqLworCQkJc2xvdC0+bGFzdF9kZXRlY3Rfc3RhdGUgPSBwcmVzZW50OworCisJCQkvKiBQb3dlciB1cCBzbG90ICovCisJCQlpZiAocHJlc2VudCAhPSAwKSB7CisJCQkJaWYgKGhvc3QtPnBkYXRhLT5zZXRwb3dlcikKKwkJCQkJaG9zdC0+cGRhdGEtPnNldHBvd2VyKHNsb3QtPmlkLAorCQkJCQkJCSAgICAgIG1tYy0+b2NyX2F2YWlsKTsKKworCQkJCXNldF9iaXQoRFdfTU1DX0NBUkRfUFJFU0VOVCwgJnNsb3QtPmZsYWdzKTsKKwkJCX0KKworCQkJLyogQ2xlYW4gdXAgcXVldWUgaWYgcHJlc2VudCAqLworCQkJbXJxID0gc2xvdC0+bXJxOworCQkJaWYgKG1ycSkgeworCQkJCWlmIChtcnEgPT0gaG9zdC0+bXJxKSB7CisJCQkJCWhvc3QtPmRhdGEgPSBOVUxMOworCQkJCQlob3N0LT5jbWQgPSBOVUxMOworCisJCQkJCXN3aXRjaCAoaG9zdC0+c3RhdGUpIHsKKwkJCQkJY2FzZSBTVEFURV9JRExFOgorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgU1RBVEVfU0VORElOR19DTUQ6CisJCQkJCQltcnEtPmNtZC0+ZXJyb3IgPSAtRU5PTUVESVVNOworCQkJCQkJaWYgKCFtcnEtPmRhdGEpCisJCQkJCQkJYnJlYWs7CisJCQkJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJCQkJY2FzZSBTVEFURV9TRU5ESU5HX0RBVEE6CisJCQkJCQltcnEtPmRhdGEtPmVycm9yID0gLUVOT01FRElVTTsKKwkJCQkJCWR3X21jaV9zdG9wX2RtYShob3N0KTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFNUQVRFX0RBVEFfQlVTWToKKwkJCQkJY2FzZSBTVEFURV9EQVRBX0VSUk9SOgorCQkJCQkJaWYgKG1ycS0+ZGF0YS0+ZXJyb3IgPT0gLUVJTlBST0dSRVNTKQorCQkJCQkJCW1ycS0+ZGF0YS0+ZXJyb3IgPSAtRU5PTUVESVVNOworCQkJCQkJaWYgKCFtcnEtPnN0b3ApCisJCQkJCQkJYnJlYWs7CisJCQkJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJCQkJY2FzZSBTVEFURV9TRU5ESU5HX1NUT1A6CisJCQkJCQltcnEtPnN0b3AtPmVycm9yID0gLUVOT01FRElVTTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisKKwkJCQkJZHdfbWNpX3JlcXVlc3RfZW5kKGhvc3QsIG1ycSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbGlzdF9kZWwoJnNsb3QtPnF1ZXVlX25vZGUpOworCQkJCQltcnEtPmNtZC0+ZXJyb3IgPSAtRU5PTUVESVVNOworCQkJCQlpZiAobXJxLT5kYXRhKQorCQkJCQkJbXJxLT5kYXRhLT5lcnJvciA9IC1FTk9NRURJVU07CisJCQkJCWlmIChtcnEtPnN0b3ApCisJCQkJCQltcnEtPnN0b3AtPmVycm9yID0gLUVOT01FRElVTTsKKworCQkJCQlzcGluX3VubG9jaygmaG9zdC0+bG9jayk7CisJCQkJCW1tY19yZXF1ZXN0X2RvbmUoc2xvdC0+bW1jLCBtcnEpOworCQkJCQlzcGluX2xvY2soJmhvc3QtPmxvY2spOworCQkJCX0KKwkJCX0KKworCQkJLyogUG93ZXIgZG93biBzbG90ICovCisJCQlpZiAocHJlc2VudCA9PSAwKSB7CisJCQkJaWYgKGhvc3QtPnBkYXRhLT5zZXRwb3dlcikKKwkJCQkJaG9zdC0+cGRhdGEtPnNldHBvd2VyKHNsb3QtPmlkLCAwKTsKKwkJCQljbGVhcl9iaXQoRFdfTU1DX0NBUkRfUFJFU0VOVCwgJnNsb3QtPmZsYWdzKTsKKworCQkJCS8qCisJCQkJICogQ2xlYXIgZG93biB0aGUgRklGTyAtIGRvaW5nIHNvIGdlbmVyYXRlcyBhCisJCQkJICogYmxvY2sgaW50ZXJydXB0LCBoZW5jZSBzZXR0aW5nIHRoZQorCQkJCSAqIHNjYXR0ZXItZ2F0aGVyIHBvaW50ZXIgdG8gTlVMTC4KKwkJCQkgKi8KKwkJCQlob3N0LT5zZyA9IE5VTEw7CisKKwkJCQljdHJsID0gbWNpX3JlYWRsKGhvc3QsIENUUkwpOworCQkJCWN0cmwgfD0gU0RNTUNfQ1RSTF9GSUZPX1JFU0VUOworCQkJCW1jaV93cml0ZWwoaG9zdCwgQ1RSTCwgY3RybCk7CisKKyNpZmRlZiBDT05GSUdfTU1DX0RXX0lETUFDCisJCQkJY3RybCA9IG1jaV9yZWFkbChob3N0LCBCTU9EKTsKKwkJCQljdHJsIHw9IDB4MDE7IC8qIFNvZnR3YXJlIHJlc2V0IG9mIERNQSAqLworCQkJCW1jaV93cml0ZWwoaG9zdCwgQk1PRCwgY3RybCk7CisjZW5kaWYKKworCQkJfQorCisJCQlzcGluX3VubG9jaygmaG9zdC0+bG9jayk7CisJCQlwcmVzZW50ID0gZHdfbWNpX2dldF9jZChtbWMpOworCQl9CisKKwkJbW1jX2RldGVjdF9jaGFuZ2Uoc2xvdC0+bW1jLAorCQkJbXNlY3NfdG9famlmZmllcyhob3N0LT5wZGF0YS0+ZGV0ZWN0X2RlbGF5X21zKSk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBkd19tY2lfaW5pdF9zbG90KHN0cnVjdCBkd19tY2kgKmhvc3QsIHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKKwlzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3Q7CisKKwltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IGR3X21jaV9zbG90KSwgJmhvc3QtPnBkZXYtPmRldik7CisJaWYgKCFtbWMpCisJCXJldHVybiAtRU5PTUVNOworCisJc2xvdCA9IG1tY19wcml2KG1tYyk7CisJc2xvdC0+aWQgPSBpZDsKKwlzbG90LT5tbWMgPSBtbWM7CisJc2xvdC0+aG9zdCA9IGhvc3Q7CisKKwltbWMtPm9wcyA9ICZkd19tY2lfb3BzOworCW1tYy0+Zl9taW4gPSBESVZfUk9VTkRfVVAoaG9zdC0+YnVzX2h6LCA1MTApOworCW1tYy0+Zl9tYXggPSBob3N0LT5idXNfaHo7CisKKwlpZiAoaG9zdC0+cGRhdGEtPmdldF9vY3IpCisJCW1tYy0+b2NyX2F2YWlsID0gaG9zdC0+cGRhdGEtPmdldF9vY3IoaWQpOworCWVsc2UKKwkJbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNDsKKworCS8qCisJICogU3RhcnQgd2l0aCBzbG90IHBvd2VyIGRpc2FibGVkLCBpdCB3aWxsIGJlIGVuYWJsZWQgd2hlbiBhIGNhcmQKKwkgKiBpcyBkZXRlY3RlZC4KKwkgKi8KKwlpZiAoaG9zdC0+cGRhdGEtPnNldHBvd2VyKQorCQlob3N0LT5wZGF0YS0+c2V0cG93ZXIoaWQsIDApOworCisJbW1jLT5jYXBzID0gMDsKKwlpZiAoaG9zdC0+cGRhdGEtPmdldF9idXNfd2QpCisJCWlmIChob3N0LT5wZGF0YS0+Z2V0X2J1c193ZChzbG90LT5pZCkgPj0gNCkKKwkJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7CisKKwlpZiAoaG9zdC0+cGRhdGEtPnF1aXJrcyAmIERXX01DSV9RVUlSS19ISUdIU1BFRUQpCisJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX1NEX0hJR0hTUEVFRDsKKworI2lmZGVmIENPTkZJR19NTUNfRFdfSURNQUMKKwltbWMtPm1heF9zZWdzID0gaG9zdC0+cmluZ19zaXplOworCW1tYy0+bWF4X2Jsa19zaXplID0gNjU1MzY7CisJbW1jLT5tYXhfYmxrX2NvdW50ID0gaG9zdC0+cmluZ19zaXplOworCW1tYy0+bWF4X3NlZ19zaXplID0gMHgxMDAwOworCW1tYy0+bWF4X3JlcV9zaXplID0gbW1jLT5tYXhfc2VnX3NpemUgKiBtbWMtPm1heF9ibGtfY291bnQ7CisjZWxzZQorCWlmIChob3N0LT5wZGF0YS0+YmxrX3NldHRpbmdzKSB7CisJCW1tYy0+bWF4X3NlZ3MgPSBob3N0LT5wZGF0YS0+YmxrX3NldHRpbmdzLT5tYXhfc2VnczsKKwkJbW1jLT5tYXhfYmxrX3NpemUgPSBob3N0LT5wZGF0YS0+YmxrX3NldHRpbmdzLT5tYXhfYmxrX3NpemU7CisJCW1tYy0+bWF4X2Jsa19jb3VudCA9IGhvc3QtPnBkYXRhLT5ibGtfc2V0dGluZ3MtPm1heF9ibGtfY291bnQ7CisJCW1tYy0+bWF4X3JlcV9zaXplID0gaG9zdC0+cGRhdGEtPmJsa19zZXR0aW5ncy0+bWF4X3JlcV9zaXplOworCQltbWMtPm1heF9zZWdfc2l6ZSA9IGhvc3QtPnBkYXRhLT5ibGtfc2V0dGluZ3MtPm1heF9zZWdfc2l6ZTsKKwl9IGVsc2UgeworCQkvKiBVc2VmdWwgZGVmYXVsdHMgaWYgcGxhdGZvcm0gZGF0YSBpcyB1bnNldC4gKi8KKwkJbW1jLT5tYXhfc2VncyA9IDY0OworCQltbWMtPm1heF9ibGtfc2l6ZSA9IDY1NTM2OyAvKiBCTEtTSVogaXMgMTYgYml0cyAqLworCQltbWMtPm1heF9ibGtfY291bnQgPSA1MTI7CisJCW1tYy0+bWF4X3JlcV9zaXplID0gbW1jLT5tYXhfYmxrX3NpemUgKiBtbWMtPm1heF9ibGtfY291bnQ7CisJCW1tYy0+bWF4X3NlZ19zaXplID0gbW1jLT5tYXhfcmVxX3NpemU7CisJfQorI2VuZGlmIC8qIENPTkZJR19NTUNfRFdfSURNQUMgKi8KKworCWlmIChkd19tY2lfZ2V0X2NkKG1tYykpCisJCXNldF9iaXQoRFdfTU1DX0NBUkRfUFJFU0VOVCwgJnNsb3QtPmZsYWdzKTsKKwllbHNlCisJCWNsZWFyX2JpdChEV19NTUNfQ0FSRF9QUkVTRU5ULCAmc2xvdC0+ZmxhZ3MpOworCisJaG9zdC0+c2xvdFtpZF0gPSBzbG90OworCW1tY19hZGRfaG9zdChtbWMpOworCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisJZHdfbWNpX2luaXRfZGVidWdmcyhzbG90KTsKKyNlbmRpZgorCisJLyogQ2FyZCBpbml0aWFsbHkgdW5kZXRlY3RlZCAqLworCXNsb3QtPmxhc3RfZGV0ZWN0X3N0YXRlID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkd19tY2lfY2xlYW51cF9zbG90KHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCwgdW5zaWduZWQgaW50IGlkKQoreworCS8qIFNodXRkb3duIGRldGVjdCBJUlEgKi8KKwlpZiAoc2xvdC0+aG9zdC0+cGRhdGEtPmV4aXQpCisJCXNsb3QtPmhvc3QtPnBkYXRhLT5leGl0KGlkKTsKKworCS8qIERlYnVnZnMgc3R1ZmYgaXMgY2xlYW5lZCB1cCBieSBtbWMgY29yZSAqLworCW1tY19yZW1vdmVfaG9zdChzbG90LT5tbWMpOworCXNsb3QtPmhvc3QtPnNsb3RbaWRdID0gTlVMTDsKKwltbWNfZnJlZV9ob3N0KHNsb3QtPm1tYyk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21jaV9pbml0X2RtYShzdHJ1Y3QgZHdfbWNpICpob3N0KQoreworCS8qIEFsbG9jIG1lbW9yeSBmb3Igc2cgdHJhbnNsYXRpb24gKi8KKwlob3N0LT5zZ19jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhvc3QtPnBkZXYtPmRldiwgUEFHRV9TSVpFLAorCQkJCQkgICZob3N0LT5zZ19kbWEsIEdGUF9LRVJORUwpOworCWlmICghaG9zdC0+c2dfY3B1KSB7CisJCWRldl9lcnIoJmhvc3QtPnBkZXYtPmRldiwgIiVzOiBjb3VsZCBub3QgYWxsb2MgRE1BIG1lbW9yeVxuIiwKKwkJCV9fZnVuY19fKTsKKwkJZ290byBub19kbWE7CisJfQorCisJLyogRGV0ZXJtaW5lIHdoaWNoIERNQSBpbnRlcmZhY2UgdG8gdXNlICovCisjaWZkZWYgQ09ORklHX01NQ19EV19JRE1BQworCWhvc3QtPmRtYV9vcHMgPSAmZHdfbWNpX2lkbWFjX29wczsKKwlkZXZfaW5mbygmaG9zdC0+cGRldi0+ZGV2LCAiVXNpbmcgaW50ZXJuYWwgRE1BIGNvbnRyb2xsZXIuXG4iKTsKKyNlbmRpZgorCisJaWYgKCFob3N0LT5kbWFfb3BzKQorCQlnb3RvIG5vX2RtYTsKKworCWlmIChob3N0LT5kbWFfb3BzLT5pbml0KSB7CisJCWlmIChob3N0LT5kbWFfb3BzLT5pbml0KGhvc3QpKSB7CisJCQlkZXZfZXJyKCZob3N0LT5wZGV2LT5kZXYsICIlczogVW5hYmxlIHRvIGluaXRpYWxpemUgIgorCQkJCSJETUEgQ29udHJvbGxlci5cbiIsIF9fZnVuY19fKTsKKwkJCWdvdG8gbm9fZG1hOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X2VycigmaG9zdC0+cGRldi0+ZGV2LCAiRE1BIGluaXRpYWxpemF0aW9uIG5vdCBmb3VuZC5cbiIpOworCQlnb3RvIG5vX2RtYTsKKwl9CisKKwlob3N0LT51c2VfZG1hID0gMTsKKwlyZXR1cm47CisKK25vX2RtYToKKwlkZXZfaW5mbygmaG9zdC0+cGRldi0+ZGV2LCAiVXNpbmcgUElPIG1vZGUuXG4iKTsKKwlob3N0LT51c2VfZG1hID0gMDsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBib29sIG1jaV93YWl0X3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGR3X21jaSAqaG9zdCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApOworCXVuc2lnbmVkIGludCBjdHJsOworCisJbWNpX3dyaXRlbChob3N0LCBDVFJMLCAoU0RNTUNfQ1RSTF9SRVNFVCB8IFNETU1DX0NUUkxfRklGT19SRVNFVCB8CisJCQkJU0RNTUNfQ1RSTF9ETUFfUkVTRVQpKTsKKworCS8qIHdhaXQgdGlsbCByZXNldHMgY2xlYXIgKi8KKwlkbyB7CisJCWN0cmwgPSBtY2lfcmVhZGwoaG9zdCwgQ1RSTCk7CisJCWlmICghKGN0cmwgJiAoU0RNTUNfQ1RSTF9SRVNFVCB8IFNETU1DX0NUUkxfRklGT19SRVNFVCB8CisJCQkgICAgICBTRE1NQ19DVFJMX0RNQV9SRVNFVCkpKQorCQkJcmV0dXJuIHRydWU7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOworCisJZGV2X2VycihkZXYsICJUaW1lb3V0IHJlc2V0dGluZyBibG9jayAoY3RybCAlI3gpXG4iLCBjdHJsKTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCBkd19tY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHdfbWNpICpob3N0OworCXN0cnVjdCByZXNvdXJjZQkqcmVnczsKKwlzdHJ1Y3QgZHdfbWNpX2JvYXJkICpwZGF0YTsKKwlpbnQgaXJxLCByZXQsIGksIHdpZHRoOworCXUzMiBmaWZvX3NpemU7CisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlZ3MpCisJCXJldHVybiAtRU5YSU87CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkd19tY2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhvc3QpCisJCXJldHVybiAtRU5PTUVNOworCisJaG9zdC0+cGRldiA9IHBkZXY7CisJaG9zdC0+cGRhdGEgPSBwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEgfHwgIXBkYXRhLT5pbml0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJQbGF0Zm9ybSBkYXRhIG11c3Qgc3VwcGx5IGluaXQgZnVuY3Rpb25cbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlaG9zdDsKKwl9CisKKwlpZiAoIXBkYXRhLT5zZWxlY3Rfc2xvdCAmJiBwZGF0YS0+bnVtX3Nsb3RzID4gMSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiUGxhdGZvcm0gZGF0YSBtdXN0IHN1cHBseSBzZWxlY3Rfc2xvdCBmdW5jdGlvblxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVob3N0OworCX0KKworCWlmICghcGRhdGEtPmJ1c19oeikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiUGxhdGZvcm0gZGF0YSBtdXN0IHN1cHBseSBidXMgc3BlZWRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlaG9zdDsKKwl9CisKKwlob3N0LT5idXNfaHogPSBwZGF0YS0+YnVzX2h6OworCWhvc3QtPnF1aXJrcyA9IHBkYXRhLT5xdWlya3M7CisKKwlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmhvc3QtPnF1ZXVlKTsKKworCXJldCA9IC1FTk9NRU07CisJaG9zdC0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0ICsgMSk7CisJaWYgKCFob3N0LT5yZWdzKQorCQlnb3RvIGVycl9mcmVlaG9zdDsKKworCWhvc3QtPmRtYV9vcHMgPSBwZGF0YS0+ZG1hX29wczsKKwlkd19tY2lfaW5pdF9kbWEoaG9zdCk7CisKKwkvKgorCSAqIEdldCB0aGUgaG9zdCBkYXRhIHdpZHRoIC0gdGhpcyBhc3N1bWVzIHRoYXQgSENPTiBoYXMgYmVlbiBzZXQgd2l0aAorCSAqIHRoZSBjb3JyZWN0IHZhbHVlcy4KKwkgKi8KKwlpID0gKG1jaV9yZWFkbChob3N0LCBIQ09OKSA+PiA3KSAmIDB4NzsKKwlpZiAoIWkpIHsKKwkJaG9zdC0+cHVzaF9kYXRhID0gZHdfbWNpX3B1c2hfZGF0YTE2OworCQlob3N0LT5wdWxsX2RhdGEgPSBkd19tY2lfcHVsbF9kYXRhMTY7CisJCXdpZHRoID0gMTY7CisJCWhvc3QtPmRhdGFfc2hpZnQgPSAxOworCX0gZWxzZSBpZiAoaSA9PSAyKSB7CisJCWhvc3QtPnB1c2hfZGF0YSA9IGR3X21jaV9wdXNoX2RhdGE2NDsKKwkJaG9zdC0+cHVsbF9kYXRhID0gZHdfbWNpX3B1bGxfZGF0YTY0OworCQl3aWR0aCA9IDY0OworCQlob3N0LT5kYXRhX3NoaWZ0ID0gMzsKKwl9IGVsc2UgeworCQkvKiBDaGVjayBmb3IgYSByZXNlcnZlZCB2YWx1ZSwgYW5kIHdhcm4gaWYgaXQgaXMgKi8KKwkJV0FSTigoaSAhPSAxKSwKKwkJICAgICAiSENPTiByZXBvcnRzIGEgcmVzZXJ2ZWQgaG9zdCBkYXRhIHdpZHRoIVxuIgorCQkgICAgICJEZWZhdWx0aW5nIHRvIDMyLWJpdCBhY2Nlc3MuXG4iKTsKKwkJaG9zdC0+cHVzaF9kYXRhID0gZHdfbWNpX3B1c2hfZGF0YTMyOworCQlob3N0LT5wdWxsX2RhdGEgPSBkd19tY2lfcHVsbF9kYXRhMzI7CisJCXdpZHRoID0gMzI7CisJCWhvc3QtPmRhdGFfc2hpZnQgPSAyOworCX0KKworCS8qIFJlc2V0IGFsbCBibG9ja3MgKi8KKwlpZiAoIW1jaV93YWl0X3Jlc2V0KCZwZGV2LT5kZXYsIGhvc3QpKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2RtYXVubWFwOworCX0KKworCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHRzIGZvciB0aGUgaG9zdCBjb250cm9sbGVyICovCisJbWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLCAweEZGRkZGRkZGKTsKKwltY2lfd3JpdGVsKGhvc3QsIElOVE1BU0ssIDApOyAvKiBkaXNhYmxlIGFsbCBtbWMgaW50ZXJydXB0IGZpcnN0ICovCisKKwkvKiBQdXQgaW4gbWF4IHRpbWVvdXQgKi8KKwltY2lfd3JpdGVsKGhvc3QsIFRNT1VULCAweEZGRkZGRkZGKTsKKworCS8qCisJICogRklGTyB0aHJlc2hvbGQgc2V0dGluZ3MgIFJ4TWFyayAgPSBmaWZvX3NpemUgLyAyIC0gMSwKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVHggTWFyayA9IGZpZm9fc2l6ZSAvIDIgRE1BIFNpemUgPSA4CisJICovCisJZmlmb19zaXplID0gbWNpX3JlYWRsKGhvc3QsIEZJRk9USCk7CisJZmlmb19zaXplID0gKGZpZm9fc2l6ZSA+PiAxNikgJiAweDdmZjsKKwltY2lfd3JpdGVsKGhvc3QsIEZJRk9USCwgKCgweDIgPDwgMjgpIHwgKChmaWZvX3NpemUvMiAtIDEpIDw8IDE2KSB8CisJCQkJICAoKGZpZm9fc2l6ZS8yKSA8PCAwKSkpOworCisJLyogZGlzYWJsZSBjbG9jayB0byBDSVUgKi8KKwltY2lfd3JpdGVsKGhvc3QsIENMS0VOQSwgMCk7CisJbWNpX3dyaXRlbChob3N0LCBDTEtTUkMsIDApOworCisJdGFza2xldF9pbml0KCZob3N0LT50YXNrbGV0LCBkd19tY2lfdGFza2xldF9mdW5jLCAodW5zaWduZWQgbG9uZylob3N0KTsKKwl0YXNrbGV0X2luaXQoJmhvc3QtPmNhcmRfdGFza2xldCwKKwkJICAgICBkd19tY2lfdGFza2xldF9jYXJkLCAodW5zaWduZWQgbG9uZylob3N0KTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgZHdfbWNpX2ludGVycnVwdCwgMCwgImR3LW1jaSIsIGhvc3QpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2RtYXVubWFwOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaG9zdCk7CisKKwlpZiAoaG9zdC0+cGRhdGEtPm51bV9zbG90cykKKwkJaG9zdC0+bnVtX3Nsb3RzID0gaG9zdC0+cGRhdGEtPm51bV9zbG90czsKKwllbHNlCisJCWhvc3QtPm51bV9zbG90cyA9ICgobWNpX3JlYWRsKGhvc3QsIEhDT04pID4+IDEpICYgMHgxRikgKyAxOworCisJLyogV2UgbmVlZCBhdCBsZWFzdCBvbmUgc2xvdCB0byBzdWNjZWVkICovCisJZm9yIChpID0gMDsgaSA8IGhvc3QtPm51bV9zbG90czsgaSsrKSB7CisJCXJldCA9IGR3X21jaV9pbml0X3Nsb3QoaG9zdCwgaSk7CisJCWlmIChyZXQpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGVycl9pbml0X3Nsb3Q7CisJCX0KKwl9CisKKwkvKgorCSAqIEVuYWJsZSBpbnRlcnJ1cHRzIGZvciBjb21tYW5kIGRvbmUsIGRhdGEgb3ZlciwgZGF0YSBlbXB0eSwgY2FyZCBkZXQsCisJICogcmVjZWl2ZSByZWFkeSBhbmQgZXJyb3Igc3VjaCBhcyB0cmFuc21pdCwgcmVjZWl2ZSB0aW1lb3V0LCBjcmMgZXJyb3IKKwkgKi8KKwltY2lfd3JpdGVsKGhvc3QsIFJJTlRTVFMsIDB4RkZGRkZGRkYpOworCW1jaV93cml0ZWwoaG9zdCwgSU5UTUFTSywgU0RNTUNfSU5UX0NNRF9ET05FIHwgU0RNTUNfSU5UX0RBVEFfT1ZFUiB8CisJCSAgIFNETU1DX0lOVF9UWERSIHwgU0RNTUNfSU5UX1JYRFIgfAorCQkgICBEV19NQ0lfRVJST1JfRkxBR1MgfCBTRE1NQ19JTlRfQ0QpOworCW1jaV93cml0ZWwoaG9zdCwgQ1RSTCwgU0RNTUNfQ1RSTF9JTlRfRU5BQkxFKTsgLyogRW5hYmxlIG1jaSBpbnRlcnJ1cHQgKi8KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJEVyBNTUMgY29udHJvbGxlciBhdCBpcnEgJWQsICIKKwkJICIlZCBiaXQgaG9zdCBkYXRhIHdpZHRoXG4iLCBpcnEsIHdpZHRoKTsKKwlpZiAoaG9zdC0+cXVpcmtzICYgRFdfTUNJX1FVSVJLX0lETUFDX0RUTykKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkludGVybmFsIERNQUMgaW50ZXJydXB0IGZpeCBlbmFibGVkLlxuIik7CisKKwlyZXR1cm4gMDsKKworZXJyX2luaXRfc2xvdDoKKwkvKiBEZS1pbml0IGFueSBpbml0aWFsaXplZCBzbG90cyAqLworCXdoaWxlIChpID4gMCkgeworCQlpZiAoaG9zdC0+c2xvdFtpXSkKKwkJCWR3X21jaV9jbGVhbnVwX3Nsb3QoaG9zdC0+c2xvdFtpXSwgaSk7CisJCWktLTsKKwl9CisJZnJlZV9pcnEoaXJxLCBob3N0KTsKKworZXJyX2RtYXVubWFwOgorCWlmIChob3N0LT51c2VfZG1hICYmIGhvc3QtPmRtYV9vcHMtPmV4aXQpCisJCWhvc3QtPmRtYV9vcHMtPmV4aXQoaG9zdCk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmhvc3QtPnBkZXYtPmRldiwgUEFHRV9TSVpFLAorCQkJICBob3N0LT5zZ19jcHUsIGhvc3QtPnNnX2RtYSk7CisJaW91bm1hcChob3N0LT5yZWdzKTsKKworZXJyX2ZyZWVob3N0OgorCWtmcmVlKGhvc3QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGR3X21jaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHdfbWNpICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CisKKwltY2lfd3JpdGVsKGhvc3QsIFJJTlRTVFMsIDB4RkZGRkZGRkYpOworCW1jaV93cml0ZWwoaG9zdCwgSU5UTUFTSywgMCk7IC8qIGRpc2FibGUgYWxsIG1tYyBpbnRlcnJ1cHQgZmlyc3QgKi8KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJZm9yIChpID0gMDsgaSA8IGhvc3QtPm51bV9zbG90czsgaSsrKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInJlbW92ZSBzbG90ICVkXG4iLCBpKTsKKwkJaWYgKGhvc3QtPnNsb3RbaV0pCisJCQlkd19tY2lfY2xlYW51cF9zbG90KGhvc3QtPnNsb3RbaV0sIGkpOworCX0KKworCS8qIGRpc2FibGUgY2xvY2sgdG8gQ0lVICovCisJbWNpX3dyaXRlbChob3N0LCBDTEtFTkEsIDApOworCW1jaV93cml0ZWwoaG9zdCwgQ0xLU1JDLCAwKTsKKworCWZyZWVfaXJxKHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksIGhvc3QpOworCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIFBBR0VfU0laRSwgaG9zdC0+c2dfY3B1LCBob3N0LT5zZ19kbWEpOworCisJaWYgKGhvc3QtPnVzZV9kbWEgJiYgaG9zdC0+ZG1hX29wcy0+ZXhpdCkKKwkJaG9zdC0+ZG1hX29wcy0+ZXhpdChob3N0KTsKKworCWlvdW5tYXAoaG9zdC0+cmVncyk7CisKKwlrZnJlZShob3N0KTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorLyoKKyAqIFRPRE86IHdlIHNob3VsZCBwcm9iYWJseSBkaXNhYmxlIHRoZSBjbG9jayB0byB0aGUgY2FyZCBpbiB0aGUgc3VzcGVuZCBwYXRoLgorICovCitzdGF0aWMgaW50IGR3X21jaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCWludCBpLCByZXQ7CisJc3RydWN0IGR3X21jaSAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZm9yIChpID0gMDsgaSA8IGhvc3QtPm51bV9zbG90czsgaSsrKSB7CisJCXN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IGhvc3QtPnNsb3RbaV07CisJCWlmICghc2xvdCkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBtbWNfc3VzcGVuZF9ob3N0KHNsb3QtPm1tYyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3aGlsZSAoLS1pID49IDApIHsKKwkJCQlzbG90ID0gaG9zdC0+c2xvdFtpXTsKKwkJCQlpZiAoc2xvdCkKKwkJCQkJbW1jX3Jlc3VtZV9ob3N0KGhvc3QtPnNsb3RbaV0tPm1tYyk7CisJCQl9CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWNpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBpLCByZXQ7CisJc3RydWN0IGR3X21jaSAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZm9yIChpID0gMDsgaSA8IGhvc3QtPm51bV9zbG90czsgaSsrKSB7CisJCXN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IGhvc3QtPnNsb3RbaV07CisJCWlmICghc2xvdCkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBtbWNfcmVzdW1lX2hvc3QoaG9zdC0+c2xvdFtpXS0+bW1jKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgZHdfbWNpX3N1c3BlbmQJTlVMTAorI2RlZmluZSBkd19tY2lfcmVzdW1lCU5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHdfbWNpX2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKGR3X21jaV9yZW1vdmUpLAorCS5zdXNwZW5kCT0gZHdfbWNpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBkd19tY2lfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAiZHdfbW1jIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZHdfbWNpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZkd19tY2lfZHJpdmVyLCBkd19tY2lfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHdfbWNpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHdfbWNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGR3X21jaV9pbml0KTsKK21vZHVsZV9leGl0KGR3X21jaV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEVyBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTlhQIFNlbWljb25kdWN0b3IgVmlldE5hbSIpOworTU9EVUxFX0FVVEhPUigiSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIEx0ZCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaCBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkNTVhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBTeW5vcHN5cyBEZXNpZ25XYXJlIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgZHJpdmVyCisgKiAgKEJhc2VkIG9uIE5YUCBkcml2ZXIgZm9yIGxwYyAzMXh4KQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOWFAgU2VtaWNvbmR1Y3RvcnMKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfRFdfTU1DX0hfCisjZGVmaW5lIF9EV19NTUNfSF8KKworI2RlZmluZSBTRE1NQ19DVFJMCQkweDAwMAorI2RlZmluZSBTRE1NQ19QV1JFTgkJMHgwMDQKKyNkZWZpbmUgU0RNTUNfQ0xLRElWCQkweDAwOAorI2RlZmluZSBTRE1NQ19DTEtTUkMJCTB4MDBjCisjZGVmaW5lIFNETU1DX0NMS0VOQQkJMHgwMTAKKyNkZWZpbmUgU0RNTUNfVE1PVVQJCTB4MDE0CisjZGVmaW5lIFNETU1DX0NUWVBFCQkweDAxOAorI2RlZmluZSBTRE1NQ19CTEtTSVoJCTB4MDFjCisjZGVmaW5lIFNETU1DX0JZVENOVAkJMHgwMjAKKyNkZWZpbmUgU0RNTUNfSU5UTUFTSwkJMHgwMjQKKyNkZWZpbmUgU0RNTUNfQ01EQVJHCQkweDAyOAorI2RlZmluZSBTRE1NQ19DTUQJCTB4MDJjCisjZGVmaW5lIFNETU1DX1JFU1AwCQkweDAzMAorI2RlZmluZSBTRE1NQ19SRVNQMQkJMHgwMzQKKyNkZWZpbmUgU0RNTUNfUkVTUDIJCTB4MDM4CisjZGVmaW5lIFNETU1DX1JFU1AzCQkweDAzYworI2RlZmluZSBTRE1NQ19NSU5UU1RTCQkweDA0MAorI2RlZmluZSBTRE1NQ19SSU5UU1RTCQkweDA0NAorI2RlZmluZSBTRE1NQ19TVEFUVVMJCTB4MDQ4CisjZGVmaW5lIFNETU1DX0ZJRk9USAkJMHgwNGMKKyNkZWZpbmUgU0RNTUNfQ0RFVEVDVAkJMHgwNTAKKyNkZWZpbmUgU0RNTUNfV1JUUFJUCQkweDA1NAorI2RlZmluZSBTRE1NQ19HUElPCQkweDA1OAorI2RlZmluZSBTRE1NQ19UQ0JDTlQJCTB4MDVjCisjZGVmaW5lIFNETU1DX1RCQkNOVAkJMHgwNjAKKyNkZWZpbmUgU0RNTUNfREVCTkNFCQkweDA2NAorI2RlZmluZSBTRE1NQ19VU1JJRAkJMHgwNjgKKyNkZWZpbmUgU0RNTUNfVkVSSUQJCTB4MDZjCisjZGVmaW5lIFNETU1DX0hDT04JCTB4MDcwCisjZGVmaW5lIFNETU1DX0JNT0QJCTB4MDgwCisjZGVmaW5lIFNETU1DX1BMRE1ORAkJMHgwODQKKyNkZWZpbmUgU0RNTUNfREJBRERSCQkweDA4OAorI2RlZmluZSBTRE1NQ19JRFNUUwkJMHgwOGMKKyNkZWZpbmUgU0RNTUNfSURJTlRFTgkJMHgwOTAKKyNkZWZpbmUgU0RNTUNfRFNDQUREUgkJMHgwOTQKKyNkZWZpbmUgU0RNTUNfQlVGQUREUgkJMHgwOTgKKyNkZWZpbmUgU0RNTUNfREFUQQkJMHgxMDAKKyNkZWZpbmUgU0RNTUNfREFUQV9BRFIJCTB4MTAwCisKKy8qIHNoaWZ0IGJpdCBmaWVsZCAqLworI2RlZmluZSBfU0JGKGYsIHYpCQkoKHYpIDw8IChmKSkKKworLyogQ29udHJvbCByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIFNETU1DX0NUUkxfVVNFX0lETUFDCQlCSVQoMjUpCisjZGVmaW5lIFNETU1DX0NUUkxfQ0VBVEFfSU5UX0VOCQlCSVQoMTEpCisjZGVmaW5lIFNETU1DX0NUUkxfU0VORF9BU19DQ1NECQlCSVQoMTApCisjZGVmaW5lIFNETU1DX0NUUkxfU0VORF9DQ1NECQlCSVQoOSkKKyNkZWZpbmUgU0RNTUNfQ1RSTF9BQlJUX1JFQURfREFUQQlCSVQoOCkKKyNkZWZpbmUgU0RNTUNfQ1RSTF9TRU5EX0lSUV9SRVNQCUJJVCg3KQorI2RlZmluZSBTRE1NQ19DVFJMX1JFQURfV0FJVAkJQklUKDYpCisjZGVmaW5lIFNETU1DX0NUUkxfRE1BX0VOQUJMRQkJQklUKDUpCisjZGVmaW5lIFNETU1DX0NUUkxfSU5UX0VOQUJMRQkJQklUKDQpCisjZGVmaW5lIFNETU1DX0NUUkxfRE1BX1JFU0VUCQlCSVQoMikKKyNkZWZpbmUgU0RNTUNfQ1RSTF9GSUZPX1JFU0VUCQlCSVQoMSkKKyNkZWZpbmUgU0RNTUNfQ1RSTF9SRVNFVAkJQklUKDApCisvKiBDbG9jayBFbmFibGUgcmVnaXN0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBTRE1NQ19DTEtFTl9MT1dfUFdSCQlCSVQoMTYpCisjZGVmaW5lIFNETU1DX0NMS0VOX0VOQUJMRQkJQklUKDApCisvKiB0aW1lLW91dCByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIFNETU1DX1RNT1VUX0RBVEEobikJCV9TQkYoOCwgKG4pKQorI2RlZmluZSBTRE1NQ19UTU9VVF9EQVRBX01TSwkJMHhGRkZGRkYwMAorI2RlZmluZSBTRE1NQ19UTU9VVF9SRVNQKG4pCQkoKG4pICYgMHhGRikKKyNkZWZpbmUgU0RNTUNfVE1PVVRfUkVTUF9NU0sJCTB4RkYKKy8qIGNhcmQtdHlwZSByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIFNETU1DX0NUWVBFXzhCSVQJCUJJVCgxNikKKyNkZWZpbmUgU0RNTUNfQ1RZUEVfNEJJVAkJQklUKDApCisjZGVmaW5lIFNETU1DX0NUWVBFXzFCSVQJCTAKKy8qIEludGVycnVwdCBzdGF0dXMgJiBtYXNrIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgU0RNTUNfSU5UX1NESU8JCQlCSVQoMTYpCisjZGVmaW5lIFNETU1DX0lOVF9FQkUJCQlCSVQoMTUpCisjZGVmaW5lIFNETU1DX0lOVF9BQ0QJCQlCSVQoMTQpCisjZGVmaW5lIFNETU1DX0lOVF9TQkUJCQlCSVQoMTMpCisjZGVmaW5lIFNETU1DX0lOVF9ITEUJCQlCSVQoMTIpCisjZGVmaW5lIFNETU1DX0lOVF9GUlVOCQkJQklUKDExKQorI2RlZmluZSBTRE1NQ19JTlRfSFRPCQkJQklUKDEwKQorI2RlZmluZSBTRE1NQ19JTlRfRFRPCQkJQklUKDkpCisjZGVmaW5lIFNETU1DX0lOVF9SVE8JCQlCSVQoOCkKKyNkZWZpbmUgU0RNTUNfSU5UX0RDUkMJCQlCSVQoNykKKyNkZWZpbmUgU0RNTUNfSU5UX1JDUkMJCQlCSVQoNikKKyNkZWZpbmUgU0RNTUNfSU5UX1JYRFIJCQlCSVQoNSkKKyNkZWZpbmUgU0RNTUNfSU5UX1RYRFIJCQlCSVQoNCkKKyNkZWZpbmUgU0RNTUNfSU5UX0RBVEFfT1ZFUgkJQklUKDMpCisjZGVmaW5lIFNETU1DX0lOVF9DTURfRE9ORQkJQklUKDIpCisjZGVmaW5lIFNETU1DX0lOVF9SRVNQX0VSUgkJQklUKDEpCisjZGVmaW5lIFNETU1DX0lOVF9DRAkJCUJJVCgwKQorI2RlZmluZSBTRE1NQ19JTlRfRVJST1IJCQkweGJmYzIKKy8qIENvbW1hbmQgcmVnaXN0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBTRE1NQ19DTURfU1RBUlQJCQlCSVQoMzEpCisjZGVmaW5lIFNETU1DX0NNRF9DQ1NfRVhQCQlCSVQoMjMpCisjZGVmaW5lIFNETU1DX0NNRF9DRUFUQV9SRAkJQklUKDIyKQorI2RlZmluZSBTRE1NQ19DTURfVVBEX0NMSwkJQklUKDIxKQorI2RlZmluZSBTRE1NQ19DTURfSU5JVAkJCUJJVCgxNSkKKyNkZWZpbmUgU0RNTUNfQ01EX1NUT1AJCQlCSVQoMTQpCisjZGVmaW5lIFNETU1DX0NNRF9QUlZfREFUX1dBSVQJCUJJVCgxMykKKyNkZWZpbmUgU0RNTUNfQ01EX1NFTkRfU1RPUAkJQklUKDEyKQorI2RlZmluZSBTRE1NQ19DTURfU1RSTV9NT0RFCQlCSVQoMTEpCisjZGVmaW5lIFNETU1DX0NNRF9EQVRfV1IJCUJJVCgxMCkKKyNkZWZpbmUgU0RNTUNfQ01EX0RBVF9FWFAJCUJJVCg5KQorI2RlZmluZSBTRE1NQ19DTURfUkVTUF9DUkMJCUJJVCg4KQorI2RlZmluZSBTRE1NQ19DTURfUkVTUF9MT05HCQlCSVQoNykKKyNkZWZpbmUgU0RNTUNfQ01EX1JFU1BfRVhQCQlCSVQoNikKKyNkZWZpbmUgU0RNTUNfQ01EX0lORFgobikJCSgobikgJiAweDFGKQorLyogU3RhdHVzIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgU0RNTUNfR0VUX0ZDTlQoeCkJCSgoKHgpPj4xNykgJiAweDFGRikKKyNkZWZpbmUgU0RNTUNfRklGT19TWgkJCTMyCisvKiBJbnRlcm5hbCBETUFDIGludGVycnVwdCBkZWZpbmVzICovCisjZGVmaW5lIFNETU1DX0lETUFDX0lOVF9BSQkJQklUKDkpCisjZGVmaW5lIFNETU1DX0lETUFDX0lOVF9OSQkJQklUKDgpCisjZGVmaW5lIFNETU1DX0lETUFDX0lOVF9DRVMJCUJJVCg1KQorI2RlZmluZSBTRE1NQ19JRE1BQ19JTlRfRFUJCUJJVCg0KQorI2RlZmluZSBTRE1NQ19JRE1BQ19JTlRfRkJFCQlCSVQoMikKKyNkZWZpbmUgU0RNTUNfSURNQUNfSU5UX1JJCQlCSVQoMSkKKyNkZWZpbmUgU0RNTUNfSURNQUNfSU5UX1RJCQlCSVQoMCkKKy8qIEludGVybmFsIERNQUMgYnVzIG1vZGUgYml0cyAqLworI2RlZmluZSBTRE1NQ19JRE1BQ19FTkFCTEUJCUJJVCg3KQorI2RlZmluZSBTRE1NQ19JRE1BQ19GQgkJCUJJVCgxKQorI2RlZmluZSBTRE1NQ19JRE1BQ19TV1JFU0VUCQlCSVQoMCkKKworLyogUmVnaXN0ZXIgYWNjZXNzIG1hY3JvcyAqLworI2RlZmluZSBtY2lfcmVhZGwoZGV2LCByZWcpCQkJXAorCV9fcmF3X3JlYWRsKGRldi0+cmVncyArIFNETU1DXyMjcmVnKQorI2RlZmluZSBtY2lfd3JpdGVsKGRldiwgcmVnLCB2YWx1ZSkJCQlcCisJX19yYXdfd3JpdGVsKCh2YWx1ZSksIGRldi0+cmVncyArIFNETU1DXyMjcmVnKQorCisvKiAxNi1iaXQgRklGTyBhY2Nlc3MgbWFjcm9zICovCisjZGVmaW5lIG1jaV9yZWFkdyhkZXYsIHJlZykJCQlcCisJX19yYXdfcmVhZHcoZGV2LT5yZWdzICsgU0RNTUNfIyNyZWcpCisjZGVmaW5lIG1jaV93cml0ZXcoZGV2LCByZWcsIHZhbHVlKQkJCVwKKwlfX3Jhd193cml0ZXcoKHZhbHVlKSwgZGV2LT5yZWdzICsgU0RNTUNfIyNyZWcpCisKKy8qIDY0LWJpdCBGSUZPIGFjY2VzcyBtYWNyb3MgKi8KKyNpZmRlZiByZWFkcQorI2RlZmluZSBtY2lfcmVhZHEoZGV2LCByZWcpCQkJXAorCV9fcmF3X3JlYWRxKGRldi0+cmVncyArIFNETU1DXyMjcmVnKQorI2RlZmluZSBtY2lfd3JpdGVxKGRldiwgcmVnLCB2YWx1ZSkJCQlcCisJX19yYXdfd3JpdGVxKCh2YWx1ZSksIGRldi0+cmVncyArIFNETU1DXyMjcmVnKQorI2Vsc2UKKy8qCisgKiBEdW1teSByZWFkcSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IGRlZmluZSBpdC4KKyAqCisgKiBXZSB3b3VsZCBhc3N1bWUgdGhhdCBub25lIG9mIHRoZXNlIGFyY2hpdGVjdHVyZXMgd291bGQgY29uZmlndXJlCisgKiB0aGUgSVAgYmxvY2sgd2l0aCBhIDY0Yml0IEZJRk8gd2lkdGgsIHNvIHRoaXMgY29kZSB3aWxsIG5ldmVyIGJlCisgKiBleGVjdXRlZCBvbiB0aG9zZSBtYWNoaW5lcy4gRGVmaW5pbmcgdGhlc2UgbWFjcm9zIGhlcmUga2VlcHMgdGhlCisgKiByZXN0IG9mIHRoZSBjb2RlIGZyZWUgZnJvbSBpZmRlZnMuCisgKi8KKyNkZWZpbmUgbWNpX3JlYWRxKGRldiwgcmVnKQkJCVwKKwkoKih2b2xhdGlsZSB1NjQgX19mb3JjZSAqKShkZXYtPnJlZ3MgKyBTRE1NQ18jI3JlZykpCisjZGVmaW5lIG1jaV93cml0ZXEoZGV2LCByZWcsIHZhbHVlKQkJCVwKKwkoKih2b2xhdGlsZSB1NjQgX19mb3JjZSAqKShkZXYtPnJlZ3MgKyBTRE1NQ18jI3JlZykgPSB2YWx1ZSkKKyNlbmRpZgorCisjZW5kaWYgLyogX0RXX01NQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMKaW5kZXggYmRkMmNiYi4uNDQyODU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMTQxLDEwICsxNDIsNDkgQEAKIAogCXN0cnVjdCB3b3JrX3N0cnVjdAlkYXRhd29yazsKIAlzcGlubG9ja190CQlsb2NrOworCisJc3RydWN0IHJlZ3VsYXRvcgkqdmNjOwogfTsKIAogc3RhdGljIHZvaWQgbXhjbWNpX3NldF9jbGtfcmF0ZShzdHJ1Y3QgbXhjbWNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBjbGtfaW9zKTsKIAorc3RhdGljIGlubGluZSB2b2lkIG14Y21jaV9pbml0X29jcihzdHJ1Y3QgbXhjbWNpX2hvc3QgKmhvc3QpCit7CisJaG9zdC0+dmNjID0gcmVndWxhdG9yX2dldChtbWNfZGV2KGhvc3QtPm1tYyksICJ2bW1jIik7CisKKwlpZiAoSVNfRVJSKGhvc3QtPnZjYykpIHsKKwkJaG9zdC0+dmNjID0gTlVMTDsKKwl9IGVsc2UgeworCQlob3N0LT5tbWMtPm9jcl9hdmFpbCA9IG1tY19yZWd1bGF0b3JfZ2V0X29jcm1hc2soaG9zdC0+dmNjKTsKKwkJaWYgKGhvc3QtPnBkYXRhICYmIGhvc3QtPnBkYXRhLT5vY3JfYXZhaWwpCisJCQlkZXZfd2FybihtbWNfZGV2KGhvc3QtPm1tYyksCisJCQkJInBkYXRhLT5vY3JfYXZhaWwgd2lsbCBub3QgYmUgdXNlZFxuIik7CisJfQorCisJaWYgKGhvc3QtPnZjYyA9PSBOVUxMKSB7CisJCS8qIGZhbGwtYmFjayB0byBwbGF0Zm9ybSBkYXRhICovCisJCWlmIChob3N0LT5wZGF0YSAmJiBob3N0LT5wZGF0YS0+b2NyX2F2YWlsKQorCQkJaG9zdC0+bW1jLT5vY3JfYXZhaWwgPSBob3N0LT5wZGF0YS0+b2NyX2F2YWlsOworCQllbHNlCisJCQlob3N0LT5tbWMtPm9jcl9hdmFpbCA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIG14Y21jaV9zZXRfcG93ZXIoc3RydWN0IG14Y21jaV9ob3N0ICpob3N0LAorCQkJCSAgICB1bnNpZ25lZCBjaGFyIHBvd2VyX21vZGUsCisJCQkJICAgIHVuc2lnbmVkIGludCB2ZGQpCit7CisJaWYgKGhvc3QtPnZjYykgeworCQlpZiAocG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfVVApCisJCQltbWNfcmVndWxhdG9yX3NldF9vY3IoaG9zdC0+bW1jLCBob3N0LT52Y2MsIHZkZCk7CisJCWVsc2UgaWYgKHBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRikKKwkJCW1tY19yZWd1bGF0b3Jfc2V0X29jcihob3N0LT5tbWMsIGhvc3QtPnZjYywgMCk7CisJfQorCisJaWYgKGhvc3QtPnBkYXRhICYmIGhvc3QtPnBkYXRhLT5zZXRwb3dlcikKKwkJaG9zdC0+cGRhdGEtPnNldHBvd2VyKG1tY19kZXYoaG9zdC0+bW1jKSwgdmRkKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgbXhjbWNpX3VzZV9kbWEoc3RydWN0IG14Y21jaV9ob3N0ICpob3N0KQogewogCXJldHVybiBob3N0LT5kb19kbWE7CkBAIC02ODAsOSArNzIwLDkgQEAKIAkJaG9zdC0+Y21kYXQgJj0gfkNNRF9EQVRfQ09OVF9CVVNfV0lEVEhfNDsKIAogCWlmIChob3N0LT5wb3dlcl9tb2RlICE9IGlvcy0+cG93ZXJfbW9kZSkgewotCQlpZiAoaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPnNldHBvd2VyKQotCQkJaG9zdC0+cGRhdGEtPnNldHBvd2VyKG1tY19kZXYobW1jKSwgaW9zLT52ZGQpOworCQlteGNtY2lfc2V0X3Bvd2VyKGhvc3QsIGlvcy0+cG93ZXJfbW9kZSwgaW9zLT52ZGQpOwogCQlob3N0LT5wb3dlcl9tb2RlID0gaW9zLT5wb3dlcl9tb2RlOworCiAJCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09OKQogCQkJaG9zdC0+Y21kYXQgfD0gQ01EX0RBVF9DT05UX0lOSVQ7CiAJfQpAQCAtODA3LDEwICs4NDcsNyBAQAogCWhvc3QtPnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmxvY2spOwogCi0JaWYgKGhvc3QtPnBkYXRhICYmIGhvc3QtPnBkYXRhLT5vY3JfYXZhaWwpCi0JCW1tYy0+b2NyX2F2YWlsID0gaG9zdC0+cGRhdGEtPm9jcl9hdmFpbDsKLQllbHNlCi0JCW1tYy0+b2NyX2F2YWlsID0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7CisJbXhjbWNpX2luaXRfb2NyKGhvc3QpOwogCiAJaWYgKGhvc3QtPnBkYXRhICYmIGhvc3QtPnBkYXRhLT5kYXQzX2NhcmRfZGV0ZWN0KQogCQlob3N0LT5kZWZhdWx0X2lycV9tYXNrID0KQEAgLTkxNSw2ICs5NTIsOSBAQAogCiAJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CiAKKwlpZiAoaG9zdC0+dmNjKQorCQlyZWd1bGF0b3JfcHV0KGhvc3QtPnZjYyk7CisKIAlpZiAoaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPmV4aXQpCiAJCWhvc3QtPnBkYXRhLT5leGl0KCZwZGV2LT5kZXYsIG1tYyk7CiAKQEAgLTkyNyw3ICs5NjcsNiBAQAogCWNsa19wdXQoaG9zdC0+Y2xrKTsKIAogCXJlbGVhc2VfbWVtX3JlZ2lvbihob3N0LT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGhvc3QtPnJlcykpOwotCXJlbGVhc2VfcmVzb3VyY2UoaG9zdC0+cmVzKTsKIAogCW1tY19mcmVlX2hvc3QobW1jKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1kb3ZlLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWRvdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWVlZjRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1kb3ZlLmMKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIHNkaGNpLWRvdmUuYyBTdXBwb3J0IGZvciBTREhDSSBvbiBNYXJ2ZWxsJ3MgRG92ZSBTb0MKKyAqCisgKiBBdXRob3I6IFNhZWVkIEJpc2hhcmEgPHNhZWVkQG1hcnZlbGwuY29tPgorICoJICAgTWlrZSBSYXBvcG9ydCA8bWlrZUBjb21wdWxhYi5jby5pbD4KKyAqIEJhc2VkIG9uIHNkaGNpLWNuczN4eHguYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisKKyNpbmNsdWRlICJzZGhjaS5oIgorI2luY2x1ZGUgInNkaGNpLXBsdGZtLmgiCisKK3N0YXRpYyB1MTYgc2RoY2lfZG92ZV9yZWFkdyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKK3sKKwl1MTYgcmV0OworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFNESENJX0hPU1RfVkVSU0lPTjoKKwljYXNlIFNESENJX1NMT1RfSU5UX1NUQVRVUzoKKwkJLyogdGhvc2UgcmVnaXN0ZXJzIGRvbid0IGV4aXN0ICovCisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldCA9IHJlYWR3KGhvc3QtPmlvYWRkciArIHJlZyk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgc2RoY2lfZG92ZV9yZWFkbChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKK3sKKwl1MzIgcmV0OworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFNESENJX0NBUEFCSUxJVElFUzoKKwkJcmV0ID0gcmVhZGwoaG9zdC0+aW9hZGRyICsgcmVnKTsKKwkJLyogTWFzayB0aGUgc3VwcG9ydCBmb3IgMy4wViAqLworCQlyZXQgJj0gflNESENJX0NBTl9WRERfMzAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSByZWFkbChob3N0LT5pb2FkZHIgKyByZWcpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHNkaGNpX29wcyBzZGhjaV9kb3ZlX29wcyA9IHsKKwkucmVhZF93CT0gc2RoY2lfZG92ZV9yZWFkdywKKwkucmVhZF9sCT0gc2RoY2lfZG92ZV9yZWFkbCwKK307CisKK3N0cnVjdCBzZGhjaV9wbHRmbV9kYXRhIHNkaGNpX2RvdmVfcGRhdGEgPSB7CisJLm9wcwk9ICZzZGhjaV9kb3ZlX29wcywKKwkucXVpcmtzCT0gU0RIQ0lfUVVJUktfTk9fU0lNVUxUX1ZERF9BTkRfUE9XRVIgfAorCQkgIFNESENJX1FVSVJLX05PX0JVU1lfSVJRIHwKKwkJICBTREhDSV9RVUlSS19CUk9LRU5fVElNRU9VVF9WQUwgfAorCQkgIFNESENJX1FVSVJLX0ZPUkNFX0RNQSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYwppbmRleCAzZDljMjQ2Li4wZGM5MDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKQEAgLTE3Niw2ICsxNzYsNzQgQEAKIAkucXVpcmtzCQk9IFNESENJX1FVSVJLX05PX0VOREFUVFJfSU5fTk9QREVTQywKIH07CiAKKy8qIE8yTWljcm8gZXh0cmEgcmVnaXN0ZXJzICovCisjZGVmaW5lIE8yX1NEX0xPQ0tfV1AJCTB4RDMKKyNkZWZpbmUgTzJfU0RfTVVMVElfVkNDM1YJMHhFRQorI2RlZmluZSBPMl9TRF9DTEtSRVEJCTB4RUMKKyNkZWZpbmUgTzJfU0RfQ0FQUwkJMHhFMAorI2RlZmluZSBPMl9TRF9BRE1BMQkJMHhFMgorI2RlZmluZSBPMl9TRF9BRE1BMgkJMHhFNworI2RlZmluZSBPMl9TRF9JTkZfTU9ECQkweEYxCisKK3N0YXRpYyBpbnQgbzJfcHJvYmUoc3RydWN0IHNkaGNpX3BjaV9jaGlwICpjaGlwKQoreworCWludCByZXQ7CisJdTggc2NyYXRjaDsKKworCXN3aXRjaCAoY2hpcC0+cGRldi0+ZGV2aWNlKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX08yXzgyMjA6CisJY2FzZSBQQ0lfREVWSUNFX0lEX08yXzgyMjE6CisJY2FzZSBQQ0lfREVWSUNFX0lEX08yXzgzMjA6CisJY2FzZSBQQ0lfREVWSUNFX0lEX08yXzgzMjE6CisJCS8qIFRoaXMgZXh0cmEgc2V0dXAgaXMgcmVxdWlyZWQgZHVlIHRvIGJyb2tlbiBBRE1BLiAqLworCQlyZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShjaGlwLT5wZGV2LCBPMl9TRF9MT0NLX1dQLCAmc2NyYXRjaCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlzY3JhdGNoICY9IDB4N2Y7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShjaGlwLT5wZGV2LCBPMl9TRF9MT0NLX1dQLCBzY3JhdGNoKTsKKworCQkvKiBTZXQgTXVsdGkgMyB0byBWQ0MzViMgKi8KKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGNoaXAtPnBkZXYsIE8yX1NEX01VTFRJX1ZDQzNWLCAweDA4KTsKKworCQkvKiBEaXNhYmxlIENMS19SRVEjIHN1cHBvcnQgYWZ0ZXIgbWVkaWEgREVUICovCisJCXJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGNoaXAtPnBkZXYsIE8yX1NEX0NMS1JFUSwgJnNjcmF0Y2gpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJc2NyYXRjaCB8PSAweDIwOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoY2hpcC0+cGRldiwgTzJfU0RfQ0xLUkVRLCBzY3JhdGNoKTsKKworCQkvKiBDaG9vc2UgY2FwYWJpbGl0aWVzLCBlbmFibGUgU0RNQS4gIFdlIGhhdmUgdG8gd3JpdGUgMHgwMQorCQkgKiB0byB0aGUgY2FwYWJpbGl0aWVzIHJlZ2lzdGVyIGZpcnN0IHRvIHVubG9jayBpdC4KKwkJICovCisJCXJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGNoaXAtPnBkZXYsIE8yX1NEX0NBUFMsICZzY3JhdGNoKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXNjcmF0Y2ggfD0gMHgwMTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGNoaXAtPnBkZXYsIE8yX1NEX0NBUFMsIHNjcmF0Y2gpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoY2hpcC0+cGRldiwgTzJfU0RfQ0FQUywgMHg3Myk7CisKKwkJLyogRGlzYWJsZSBBRE1BMS8yICovCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShjaGlwLT5wZGV2LCBPMl9TRF9BRE1BMSwgMHgzOSk7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShjaGlwLT5wZGV2LCBPMl9TRF9BRE1BMiwgMHgwOCk7CisKKwkJLyogRGlzYWJsZSB0aGUgaW5maW5pdGUgdHJhbnNmZXIgbW9kZSAqLworCQlyZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShjaGlwLT5wZGV2LCBPMl9TRF9JTkZfTU9ELCAmc2NyYXRjaCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlzY3JhdGNoIHw9IDB4MDg7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShjaGlwLT5wZGV2LCBPMl9TRF9JTkZfTU9ELCBzY3JhdGNoKTsKKworCQkvKiBMb2NrIFdQICovCisJCXJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGNoaXAtPnBkZXYsIE8yX1NEX0xPQ0tfV1AsICZzY3JhdGNoKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXNjcmF0Y2ggfD0gMHg4MDsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGNoaXAtPnBkZXYsIE8yX1NEX0xPQ0tfV1AsIHNjcmF0Y2gpOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGptaWNyb25fcG1vcyhzdHJ1Y3Qgc2RoY2lfcGNpX2NoaXAgKmNoaXAsIGludCBvbikKIHsKIAl1OCBzY3JhdGNoOwpAQCAtMjA0LDYgKzI3Miw3IEBACiBzdGF0aWMgaW50IGptaWNyb25fcHJvYmUoc3RydWN0IHNkaGNpX3BjaV9jaGlwICpjaGlwKQogewogCWludCByZXQ7CisJdTE2IG1tY2RldiA9IDA7CiAKIAlpZiAoY2hpcC0+cGRldi0+cmV2aXNpb24gPT0gMCkgewogCQljaGlwLT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfMzJCSVRfRE1BX0FERFIgfApAQCAtMjI1LDEyICsyOTQsMTcgQEAKIAkgKiAyLiBUaGUgTU1DIGludGVyZmFjZSBoYXMgYSBsb3dlciBzdWJmdW5jdGlvbiBudW1iZXIKIAkgKiAgICB0aGFuIHRoZSBTRCBpbnRlcmZhY2UuCiAJICovCi0JaWYgKGNoaXAtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzhYX1NEKSB7CisJaWYgKGNoaXAtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzhYX1NEKQorCQltbWNkZXYgPSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzhYX01NQzsKKwllbHNlIGlmIChjaGlwLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4OF9TRCkKKwkJbW1jZGV2ID0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4OF9FU0Q7CisKKwlpZiAobW1jZGV2KSB7CiAJCXN0cnVjdCBwY2lfZGV2ICpzZF9kZXY7CiAKIAkJc2RfZGV2ID0gTlVMTDsKIAkJd2hpbGUgKChzZF9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0pNSUNST04sCi0JCQlQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzhYX01NQywgc2RfZGV2KSkgIT0gTlVMTCkgeworCQkJCQkJbW1jZGV2LCBzZF9kZXYpKSAhPSBOVUxMKSB7CiAJCQlpZiAoKFBDSV9TTE9UKGNoaXAtPnBkZXYtPmRldmZuKSA9PQogCQkJCVBDSV9TTE9UKHNkX2Rldi0+ZGV2Zm4pKSAmJgogCQkJCShjaGlwLT5wZGV2LT5idXMgPT0gc2RfZGV2LT5idXMpKQpAQCAtMjkwLDEzICszNjQsMjUgQEAKIAkJCXNsb3QtPmhvc3QtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19CUk9LRU5fQURNQTsKIAl9CiAKKwkvKiBKTTM4OCBNTUMgZG9lc24ndCBzdXBwb3J0IDEuOFYgd2hpbGUgU0Qgc3VwcG9ydHMgaXQgKi8KKwlpZiAoc2xvdC0+Y2hpcC0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzODhfRVNEKSB7CisJCXNsb3QtPmhvc3QtPm9jcl9hdmFpbF9zZCA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0IHwKKwkJCU1NQ19WRERfMjlfMzAgfCBNTUNfVkREXzMwXzMxIHwKKwkJCU1NQ19WRERfMTY1XzE5NTsgLyogYWxsb3cgMS44ViAqLworCQlzbG90LT5ob3N0LT5vY3JfYXZhaWxfbW1jID0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQgfAorCQkJTU1DX1ZERF8yOV8zMCB8IE1NQ19WRERfMzBfMzE7IC8qIG5vIDEuOFYgZm9yIE1NQyAqLworCX0KKwogCS8qCiAJICogVGhlIHNlY29uZGFyeSBpbnRlcmZhY2UgcmVxdWlyZXMgYSBiaXQgc2V0IHRvIGdldCB0aGUKIAkgKiBpbnRlcnJ1cHRzLgogCSAqLwotCWlmIChzbG90LT5jaGlwLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4WF9NTUMpCisJaWYgKHNsb3QtPmNoaXAtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzhYX01NQyB8fAorCSAgICBzbG90LT5jaGlwLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4OF9FU0QpCiAJCWptaWNyb25fZW5hYmxlX21tYyhzbG90LT5ob3N0LCAxKTsKIAorCXNsb3QtPmhvc3QtPm1tYy0+Y2FwcyB8PSBNTUNfQ0FQX0JVU19XSURUSF9URVNUOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNSw3ICszOTEsOCBAQAogCWlmIChkZWFkKQogCQlyZXR1cm47CiAKLQlpZiAoc2xvdC0+Y2hpcC0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzOFhfTU1DKQorCWlmIChzbG90LT5jaGlwLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4WF9NTUMgfHwKKwkgICAgc2xvdC0+Y2hpcC0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzODhfRVNEKQogCQlqbWljcm9uX2VuYWJsZV9tbWMoc2xvdC0+aG9zdCwgMCk7CiB9CiAKQEAgLTMxMyw3ICs0MDAsOCBAQAogewogCWludCBpOwogCi0JaWYgKGNoaXAtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzhYX01NQykgeworCWlmIChjaGlwLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4WF9NTUMgfHwKKwkgICAgY2hpcC0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzODhfRVNEKSB7CiAJCWZvciAoaSA9IDA7aSA8IGNoaXAtPm51bV9zbG90cztpKyspCiAJCQlqbWljcm9uX2VuYWJsZV9tbWMoY2hpcC0+c2xvdHNbaV0tPmhvc3QsIDApOwogCX0KQEAgLTMyNSw3ICs0MTMsOCBAQAogewogCWludCByZXQsIGk7CiAKLQlpZiAoY2hpcC0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzOFhfTU1DKSB7CisJaWYgKGNoaXAtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzhYX01NQyB8fAorCSAgICBjaGlwLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4OF9FU0QpIHsKIAkJZm9yIChpID0gMDtpIDwgY2hpcC0+bnVtX3Nsb3RzO2krKykKIAkJCWptaWNyb25fZW5hYmxlX21tYyhjaGlwLT5zbG90c1tpXS0+aG9zdCwgMSk7CiAJfQpAQCAtMzM5LDYgKzQyOCwxMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX3BjaV9maXhlcyBzZGhjaV9vMiA9IHsKKwkucHJvYmUJCT0gbzJfcHJvYmUsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX3BjaV9maXhlcyBzZGhjaV9qbWljcm9uID0gewogCS5wcm9iZQkJPSBqbWljcm9uX3Byb2JlLAogCkBAIC01MTAsNiArNjAzLDIyIEBACiAJfSwKIAogCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0pNSUNST04sCisJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4OF9TRCwKKwkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAorCQkuZHJpdmVyX2RhdGEJPSAoa2VybmVsX3Vsb25nX3QpJnNkaGNpX2ptaWNyb24sCisJfSwKKworCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0pNSUNST04sCisJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4OF9FU0QsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLmRyaXZlcl9kYXRhCT0gKGtlcm5lbF91bG9uZ190KSZzZGhjaV9qbWljcm9uLAorCX0sCisKKwl7CiAJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULAogCQkuZGV2aWNlCQk9IDB4ODAwMCwKIAkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCkBAIC01ODksNiArNjk4LDQ2IEBACiAJCS5kcml2ZXJfZGF0YQk9IChrZXJuZWxfdWxvbmdfdCkmc2RoY2lfaW50ZWxfbWZkX2VtbWNfc2RpbywKIAl9LAogCisJeworCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfTzIsCisJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9PMl84MTIwLAorCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJCS5kcml2ZXJfZGF0YQk9IChrZXJuZWxfdWxvbmdfdCkmc2RoY2lfbzIsCisJfSwKKworCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX08yLAorCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfTzJfODIyMCwKKwkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAorCQkuZHJpdmVyX2RhdGEJPSAoa2VybmVsX3Vsb25nX3QpJnNkaGNpX28yLAorCX0sCisKKwl7CisJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9PMiwKKwkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX08yXzgyMjEsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLmRyaXZlcl9kYXRhCT0gKGtlcm5lbF91bG9uZ190KSZzZGhjaV9vMiwKKwl9LAorCisJeworCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfTzIsCisJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9PMl84MzIwLAorCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJCS5kcml2ZXJfZGF0YQk9IChrZXJuZWxfdWxvbmdfdCkmc2RoY2lfbzIsCisJfSwKKworCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX08yLAorCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfTzJfODMyMSwKKwkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAorCQkuZHJpdmVyX2RhdGEJPSAoa2VybmVsX3Vsb25nX3QpJnNkaGNpX28yLAorCX0sCisKIAl7CS8qIEdlbmVyaWMgU0QgaG9zdCBjb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0VfQ0xBU1MoKFBDSV9DTEFTU19TWVNURU1fU0RIQ0kgPDwgOCksIDB4RkZGRjAwKQogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBsdGZtLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBsdGZtLmMKaW5kZXggMDUwMmY4OS4uZGJhYjA0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wbHRmbS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGx0Zm0uYwpAQCAtMTcwLDYgKzE3MCwxMiBAQAogI2lmZGVmIENPTkZJR19NTUNfU0RIQ0lfRVNESENfSU1YCiAJeyAic2RoY2ktZXNkaGMtaW14IiwgKGtlcm5lbF91bG9uZ190KSZzZGhjaV9lc2RoY19pbXhfcGRhdGEgfSwKICNlbmRpZgorI2lmZGVmIENPTkZJR19NTUNfU0RIQ0lfRE9WRQorCXsgInNkaGNpLWRvdmUiLCAoa2VybmVsX3Vsb25nX3QpJnNkaGNpX2RvdmVfcGRhdGEgfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NTUNfU0RIQ0lfVEVHUkEKKwl7ICJzZGhjaS10ZWdyYSIsIChrZXJuZWxfdWxvbmdfdCkmc2RoY2lfdGVncmFfcGRhdGEgfSwKKyNlbmRpZgogCXsgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBzZGhjaV9wbHRmbV9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wbHRmbS5oIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wbHRmbS5oCmluZGV4IGMxYmZlNDguLmVhMmU0NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGx0Zm0uaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBsdGZtLmgKQEAgLTIyLDUgKzIyLDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBzZGhjaV9wbHRmbV9kYXRhIHNkaGNpX2NuczN4eHhfcGRhdGE7CiBleHRlcm4gc3RydWN0IHNkaGNpX3BsdGZtX2RhdGEgc2RoY2lfZXNkaGNfaW14X3BkYXRhOworZXh0ZXJuIHN0cnVjdCBzZGhjaV9wbHRmbV9kYXRhIHNkaGNpX2RvdmVfcGRhdGE7CitleHRlcm4gc3RydWN0IHNkaGNpX3BsdGZtX2RhdGEgc2RoY2lfdGVncmFfcGRhdGE7CiAKICNlbmRpZiAvKiBfRFJJVkVSU19NTUNfU0RIQ0lfUExURk1fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKaW5kZXggYWFjYjg2Mi4uMTcyMDM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCkBAIC0xMzAsNiArMTMwLDE1IEBACiAJaWYgKCFjbGtzcmMpCiAJCXJldHVybiBVSU5UX01BWDsKIAorCS8qCisJICogQ2xvY2sgZGl2aWRlcidzIHN0ZXAgaXMgZGlmZmVyZW50IGFzIDEgZnJvbSB0aGF0IG9mIGhvc3QgY29udHJvbGxlcgorCSAqIHdoZW4gJ2Nsa190eXBlJyBpcyBTM0NfU0RIQ0lfQ0xLX0RJVl9FWFRFUk5BTC4KKwkgKi8KKwlpZiAob3VyaG9zdC0+cGRhdGEtPmNsa190eXBlKSB7CisJCXJhdGUgPSBjbGtfcm91bmRfcmF0ZShjbGtzcmMsIHdhbnRlZCk7CisJCXJldHVybiB3YW50ZWQgLSByYXRlOworCX0KKwogCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrc3JjKTsKIAogCWZvciAoZGl2ID0gMTsgZGl2IDwgMjU2OyBkaXYgKj0gMikgewpAQCAtMjMyLDYgKzI0MSw0MiBAQAogCXJldHVybiBtaW47CiB9CiAKKy8qIHNkaGNpX2NtdV9nZXRfbWF4X2NsayAtIGNhbGxiYWNrIHRvIGdldCBtYXhpbXVtIGNsb2NrIGZyZXF1ZW5jeS4qLworc3RhdGljIHVuc2lnbmVkIGludCBzZGhjaV9jbXVfZ2V0X21heF9jbG9jayhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3Qgc2RoY2lfczNjICpvdXJob3N0ID0gdG9fczNjKGhvc3QpOworCisJcmV0dXJuIGNsa19yb3VuZF9yYXRlKG91cmhvc3QtPmNsa19idXNbb3VyaG9zdC0+Y3VyX2Nsa10sIFVJTlRfTUFYKTsKK30KKworLyogc2RoY2lfY211X2dldF9taW5fY2xvY2sgLSBjYWxsYmFjayB0byBnZXQgbWluaW1hbCBzdXBwb3J0ZWQgY2xvY2sgdmFsdWUuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHNkaGNpX2NtdV9nZXRfbWluX2Nsb2NrKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXN0cnVjdCBzZGhjaV9zM2MgKm91cmhvc3QgPSB0b19zM2MoaG9zdCk7CisKKwkvKgorCSAqIGluaXRpYWwgY2xvY2sgY2FuIGJlIGluIHRoZSBmcmVxdWVuY3kgcmFuZ2Ugb2YKKwkgKiAxMDBLSHotNDAwS0h6LCBzbyB3ZSBzZXQgaXQgYXMgbWF4IHZhbHVlLgorCSAqLworCXJldHVybiBjbGtfcm91bmRfcmF0ZShvdXJob3N0LT5jbGtfYnVzW291cmhvc3QtPmN1cl9jbGtdLCA0MDAwMDApOworfQorCisvKiBzZGhjaV9jbXVfc2V0X2Nsb2NrIC0gY2FsbGJhY2sgb24gY2xvY2sgY2hhbmdlLiovCitzdGF0aWMgdm9pZCBzZGhjaV9jbXVfc2V0X2Nsb2NrKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgY2xvY2spCit7CisJc3RydWN0IHNkaGNpX3MzYyAqb3VyaG9zdCA9IHRvX3MzYyhob3N0KTsKKworCS8qIGRvbid0IGJvdGhlciBpZiB0aGUgY2xvY2sgaXMgZ29pbmcgb2ZmICovCisJaWYgKGNsb2NrID09IDApCisJCXJldHVybjsKKworCXNkaGNpX3MzY19zZXRfY2xvY2soaG9zdCwgY2xvY2spOworCisJY2xrX3NldF9yYXRlKG91cmhvc3QtPmNsa19idXNbb3VyaG9zdC0+Y3VyX2Nsa10sIGNsb2NrKTsKKworCWhvc3QtPmNsb2NrID0gY2xvY2s7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2RoY2lfb3BzIHNkaGNpX3MzY19vcHMgPSB7CiAJLmdldF9tYXhfY2xvY2sJCT0gc2RoY2lfczNjX2dldF9tYXhfY2xrLAogCS5zZXRfY2xvY2sJCT0gc2RoY2lfczNjX3NldF9jbG9jaywKQEAgLTM2MSw2ICs0MDYsMTMgQEAKIAogCQljbGtzKys7CiAJCXNjLT5jbGtfYnVzW3B0cl0gPSBjbGs7CisKKwkJLyoKKwkJICogc2F2ZSBjdXJyZW50IGNsb2NrIGluZGV4IHRvIGtub3cgd2hpY2ggY2xvY2sgYnVzCisJCSAqIGlzIHVzZWQgbGF0ZXIgaW4gb3ZlcnJpZGluZyBmdW5jdGlvbnMuCisJCSAqLworCQlzYy0+Y3VyX2NsayA9IHB0cjsKKwogCQljbGtfZW5hYmxlKGNsayk7CiAKIAkJZGV2X2luZm8oZGV2LCAiY2xvY2sgc291cmNlICVkOiAlcyAoJWxkIEh6KVxuIiwKQEAgLTQyNyw2ICs0NzksMjAgQEAKIAkvKiBIU01NQyBvbiBTYW1zdW5nIFNvQ3MgdXNlcyBTRENMSyBhcyB0aW1lb3V0IGNsb2NrICovCiAJaG9zdC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX0RBVEFfVElNRU9VVF9VU0VTX1NEQ0xLOwogCisJLyoKKwkgKiBJZiBjb250cm9sbGVyIGRvZXMgbm90IGhhdmUgaW50ZXJuYWwgY2xvY2sgZGl2aWRlciwKKwkgKiB3ZSBjYW4gdXNlIG92ZXJyaWRpbmcgZnVuY3Rpb25zIGluc3RlYWQgb2YgZGVmYXVsdC4KKwkgKi8KKwlpZiAocGRhdGEtPmNsa190eXBlKSB7CisJCXNkaGNpX3MzY19vcHMuc2V0X2Nsb2NrID0gc2RoY2lfY211X3NldF9jbG9jazsKKwkJc2RoY2lfczNjX29wcy5nZXRfbWluX2Nsb2NrID0gc2RoY2lfY211X2dldF9taW5fY2xvY2s7CisJCXNkaGNpX3MzY19vcHMuZ2V0X21heF9jbG9jayA9IHNkaGNpX2NtdV9nZXRfbWF4X2Nsb2NrOworCX0KKworCS8qIEl0IHN1cHBvcnRzIGFkZGl0aW9uYWwgaG9zdCBjYXBhYmlsaXRpZXMgaWYgbmVlZGVkICovCisJaWYgKHBkYXRhLT5ob3N0X2NhcHMpCisJCWhvc3QtPm1tYy0+Y2FwcyB8PSBwZGF0YS0+aG9zdF9jYXBzOworCiAJcmV0ID0gc2RoY2lfYWRkX2hvc3QoaG9zdCk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldiwgInNkaGNpX2FkZF9ob3N0KCkgZmFpbGVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktdGVncmEuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktdGVncmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODIzZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS10ZWdyYS5jCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorCisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9zZGhjaS5oPgorCisjaW5jbHVkZSAic2RoY2kuaCIKKyNpbmNsdWRlICJzZGhjaS1wbHRmbS5oIgorCitzdGF0aWMgdTMyIHRlZ3JhX3NkaGNpX3JlYWRsKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKQoreworCXUzMiB2YWw7CisKKwlpZiAodW5saWtlbHkocmVnID09IFNESENJX1BSRVNFTlRfU1RBVEUpKSB7CisJCS8qIFVzZSB3cF9ncGlvIGhlcmUgaW5zdGVhZD8gKi8KKwkJdmFsID0gcmVhZGwoaG9zdC0+aW9hZGRyICsgcmVnKTsKKwkJcmV0dXJuIHZhbCB8IFNESENJX1dSSVRFX1BST1RFQ1Q7CisJfQorCisJcmV0dXJuIHJlYWRsKGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKK3N0YXRpYyB1MTYgdGVncmFfc2RoY2lfcmVhZHcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJaWYgKHVubGlrZWx5KHJlZyA9PSBTREhDSV9IT1NUX1ZFUlNJT04pKSB7CisJCS8qIEVycmF0dW06IFZlcnNpb24gcmVnaXN0ZXIgaXMgaW52YWxpZCBpbiBIVy4gKi8KKwkJcmV0dXJuIFNESENJX1NQRUNfMjAwOworCX0KKworCXJldHVybiByZWFkdyhob3N0LT5pb2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9zZGhjaV93cml0ZWwoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiB2YWwsIGludCByZWcpCit7CisJLyogU2VlbXMgbGlrZSB3ZSdyZSBnZXR0aW5nIHNwdXJpb3VzIHRpbWVvdXQgYW5kIGNyYyBlcnJvcnMsIHNvCisJICogZGlzYWJsZSBzaWduYWxsaW5nIG9mIHRoZW0uIEluIGNhc2Ugb2YgcmVhbCBlcnJvcnMgc29mdHdhcmUKKwkgKiB0aW1lcnMgc2hvdWxkIHRha2UgY2FyZSBvZiBldmVudHVhbGx5IGRldGVjdGluZyB0aGVtLgorCSAqLworCWlmICh1bmxpa2VseShyZWcgPT0gU0RIQ0lfU0lHTkFMX0VOQUJMRSkpCisJCXZhbCAmPSB+KFNESENJX0lOVF9USU1FT1VUfFNESENJX0lOVF9DUkMpOworCisJd3JpdGVsKHZhbCwgaG9zdC0+aW9hZGRyICsgcmVnKTsKKworCWlmICh1bmxpa2VseShyZWcgPT0gU0RIQ0lfSU5UX0VOQUJMRSkpIHsKKwkJLyogRXJyYXR1bTogTXVzdCBlbmFibGUgYmxvY2sgZ2FwIGludGVycnVwdCBkZXRlY3Rpb24gKi8KKwkJdTggZ2FwX2N0cmwgPSByZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9CTE9DS19HQVBfQ09OVFJPTCk7CisJCWlmICh2YWwgJiBTREhDSV9JTlRfQ0FSRF9JTlQpCisJCQlnYXBfY3RybCB8PSAweDg7CisJCWVsc2UKKwkJCWdhcF9jdHJsICY9IH4weDg7CisJCXdyaXRlYihnYXBfY3RybCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQkxPQ0tfR0FQX0NPTlRST0wpOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCB0ZWdyYV9zZGhjaV9nZXRfcm8oc3RydWN0IHNkaGNpX2hvc3QgKnNkaGNpKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jX2RldihzZGhjaS0+bW1jKSk7CisJc3RydWN0IHRlZ3JhX3NkaGNpX3BsYXRmb3JtX2RhdGEgKnBsYXQ7CisKKwlwbGF0ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoIWdwaW9faXNfdmFsaWQocGxhdC0+d3BfZ3BpbykpCisJCXJldHVybiAtMTsKKworCXJldHVybiBncGlvX2dldF92YWx1ZShwbGF0LT53cF9ncGlvKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGNhcmRkZXRlY3RfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNkaGNpX2hvc3QgKnNkaG9zdCA9IChzdHJ1Y3Qgc2RoY2lfaG9zdCAqKWRhdGE7CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZzZGhvc3QtPmNhcmRfdGFza2xldCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfTsKKworc3RhdGljIGludCB0ZWdyYV9zZGhjaV84Yml0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgYnVzX3dpZHRoKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jX2Rldihob3N0LT5tbWMpKTsKKwlzdHJ1Y3QgdGVncmFfc2RoY2lfcGxhdGZvcm1fZGF0YSAqcGxhdDsKKwl1MzIgY3RybDsKKworCXBsYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWN0cmwgPSBzZGhjaV9yZWFkYihob3N0LCBTREhDSV9IT1NUX0NPTlRST0wpOworCWlmIChwbGF0LT5pc184Yml0ICYmIGJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzgpIHsKKwkJY3RybCAmPSB+U0RIQ0lfQ1RSTF80QklUQlVTOworCQljdHJsIHw9IFNESENJX0NUUkxfOEJJVEJVUzsKKwl9IGVsc2UgeworCQljdHJsICY9IH5TREhDSV9DVFJMXzhCSVRCVVM7CisJCWlmIChidXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KQorCQkJY3RybCB8PSBTREhDSV9DVFJMXzRCSVRCVVM7CisJCWVsc2UKKwkJCWN0cmwgJj0gflNESENJX0NUUkxfNEJJVEJVUzsKKwl9CisJc2RoY2lfd3JpdGViKGhvc3QsIGN0cmwsIFNESENJX0hPU1RfQ09OVFJPTCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB0ZWdyYV9zZGhjaV9wbHRmbV9pbml0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LAorCQkJCSAgc3RydWN0IHNkaGNpX3BsdGZtX2RhdGEgKnBkYXRhKQoreworCXN0cnVjdCBzZGhjaV9wbHRmbV9ob3N0ICpwbHRmbV9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKG1tY19kZXYoaG9zdC0+bW1jKSk7CisJc3RydWN0IHRlZ3JhX3NkaGNpX3BsYXRmb3JtX2RhdGEgKnBsYXQ7CisJc3RydWN0IGNsayAqY2xrOworCWludCByYzsKKworCXBsYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAocGxhdCA9PSBOVUxMKSB7CisJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpZiAoZ3Bpb19pc192YWxpZChwbGF0LT5wb3dlcl9ncGlvKSkgeworCQlyYyA9IGdwaW9fcmVxdWVzdChwbGF0LT5wb3dlcl9ncGlvLCAic2RoY2lfcG93ZXIiKTsKKwkJaWYgKHJjKSB7CisJCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCQkiZmFpbGVkIHRvIGFsbG9jYXRlIHBvd2VyIGdwaW9cbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJdGVncmFfZ3Bpb19lbmFibGUocGxhdC0+cG93ZXJfZ3Bpbyk7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChwbGF0LT5wb3dlcl9ncGlvLCAxKTsKKwl9CisKKwlpZiAoZ3Bpb19pc192YWxpZChwbGF0LT5jZF9ncGlvKSkgeworCQlyYyA9IGdwaW9fcmVxdWVzdChwbGF0LT5jZF9ncGlvLCAic2RoY2lfY2QiKTsKKwkJaWYgKHJjKSB7CisJCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCQkiZmFpbGVkIHRvIGFsbG9jYXRlIGNkIGdwaW9cbiIpOworCQkJZ290byBvdXRfcG93ZXI7CisJCX0KKwkJdGVncmFfZ3Bpb19lbmFibGUocGxhdC0+Y2RfZ3Bpbyk7CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KHBsYXQtPmNkX2dwaW8pOworCisJCXJjID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEocGxhdC0+Y2RfZ3BpbyksIGNhcmRkZXRlY3RfaXJxLAorCQkJCSBJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkJIG1tY19ob3N0bmFtZShob3N0LT5tbWMpLCBob3N0KTsKKworCQlpZiAocmMpCXsKKwkJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAicmVxdWVzdCBpcnEgZXJyb3JcbiIpOworCQkJZ290byBvdXRfY2Q7CisJCX0KKworCX0KKworCWlmIChncGlvX2lzX3ZhbGlkKHBsYXQtPndwX2dwaW8pKSB7CisJCXJjID0gZ3Bpb19yZXF1ZXN0KHBsYXQtPndwX2dwaW8sICJzZGhjaV93cCIpOworCQlpZiAocmMpIHsKKwkJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLAorCQkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgd3AgZ3Bpb1xuIik7CisJCQlnb3RvIG91dF9jZDsKKwkJfQorCQl0ZWdyYV9ncGlvX2VuYWJsZShwbGF0LT53cF9ncGlvKTsKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQocGxhdC0+d3BfZ3Bpbyk7CisJfQorCisJY2xrID0gY2xrX2dldChtbWNfZGV2KGhvc3QtPm1tYyksIE5VTEwpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgImNsayBlcnJcbiIpOworCQlyYyA9IFBUUl9FUlIoY2xrKTsKKwkJZ290byBvdXRfd3A7CisJfQorCWNsa19lbmFibGUoY2xrKTsKKwlwbHRmbV9ob3N0LT5jbGsgPSBjbGs7CisKKwlpZiAocGxhdC0+aXNfOGJpdCkKKwkJaG9zdC0+bW1jLT5jYXBzIHw9IE1NQ19DQVBfOF9CSVRfREFUQTsKKworCXJldHVybiAwOworCitvdXRfd3A6CisJaWYgKGdwaW9faXNfdmFsaWQocGxhdC0+d3BfZ3BpbykpIHsKKwkJdGVncmFfZ3Bpb19kaXNhYmxlKHBsYXQtPndwX2dwaW8pOworCQlncGlvX2ZyZWUocGxhdC0+d3BfZ3Bpbyk7CisJfQorCitvdXRfY2Q6CisJaWYgKGdwaW9faXNfdmFsaWQocGxhdC0+Y2RfZ3BpbykpIHsKKwkJdGVncmFfZ3Bpb19kaXNhYmxlKHBsYXQtPmNkX2dwaW8pOworCQlncGlvX2ZyZWUocGxhdC0+Y2RfZ3Bpbyk7CisJfQorCitvdXRfcG93ZXI6CisJaWYgKGdwaW9faXNfdmFsaWQocGxhdC0+cG93ZXJfZ3BpbykpIHsKKwkJdGVncmFfZ3Bpb19kaXNhYmxlKHBsYXQtPnBvd2VyX2dwaW8pOworCQlncGlvX2ZyZWUocGxhdC0+cG93ZXJfZ3Bpbyk7CisJfQorCitvdXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9zZGhjaV9wbHRmbV9leGl0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXN0cnVjdCBzZGhjaV9wbHRmbV9ob3N0ICpwbHRmbV9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKG1tY19kZXYoaG9zdC0+bW1jKSk7CisJc3RydWN0IHRlZ3JhX3NkaGNpX3BsYXRmb3JtX2RhdGEgKnBsYXQ7CisKKwlwbGF0ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoZ3Bpb19pc192YWxpZChwbGF0LT53cF9ncGlvKSkgeworCQl0ZWdyYV9ncGlvX2Rpc2FibGUocGxhdC0+d3BfZ3Bpbyk7CisJCWdwaW9fZnJlZShwbGF0LT53cF9ncGlvKTsKKwl9CisKKwlpZiAoZ3Bpb19pc192YWxpZChwbGF0LT5jZF9ncGlvKSkgeworCQl0ZWdyYV9ncGlvX2Rpc2FibGUocGxhdC0+Y2RfZ3Bpbyk7CisJCWdwaW9fZnJlZShwbGF0LT5jZF9ncGlvKTsKKwl9CisKKwlpZiAoZ3Bpb19pc192YWxpZChwbGF0LT5wb3dlcl9ncGlvKSkgeworCQl0ZWdyYV9ncGlvX2Rpc2FibGUocGxhdC0+cG93ZXJfZ3Bpbyk7CisJCWdwaW9fZnJlZShwbGF0LT5wb3dlcl9ncGlvKTsKKwl9CisKKwljbGtfZGlzYWJsZShwbHRmbV9ob3N0LT5jbGspOworCWNsa19wdXQocGx0Zm1faG9zdC0+Y2xrKTsKK30KKworc3RhdGljIHN0cnVjdCBzZGhjaV9vcHMgdGVncmFfc2RoY2lfb3BzID0geworCS5nZXRfcm8gICAgID0gdGVncmFfc2RoY2lfZ2V0X3JvLAorCS5yZWFkX2wgICAgID0gdGVncmFfc2RoY2lfcmVhZGwsCisJLnJlYWRfdyAgICAgPSB0ZWdyYV9zZGhjaV9yZWFkdywKKwkud3JpdGVfbCAgICA9IHRlZ3JhX3NkaGNpX3dyaXRlbCwKKwkucGxhdGZvcm1fOGJpdF93aWR0aCA9IHRlZ3JhX3NkaGNpXzhiaXQsCit9OworCitzdHJ1Y3Qgc2RoY2lfcGx0Zm1fZGF0YSBzZGhjaV90ZWdyYV9wZGF0YSA9IHsKKwkucXVpcmtzID0gU0RIQ0lfUVVJUktfQlJPS0VOX1RJTUVPVVRfVkFMIHwKKwkJICBTREhDSV9RVUlSS19TSU5HTEVfUE9XRVJfV1JJVEUgfAorCQkgIFNESENJX1FVSVJLX05PX0hJU1BEX0JJVCB8CisJCSAgU0RIQ0lfUVVJUktfQlJPS0VOX0FETUFfWkVST0xFTl9ERVNDLAorCS5vcHMgID0gJnRlZ3JhX3NkaGNpX29wcywKKwkuaW5pdCA9IHRlZ3JhX3NkaGNpX3BsdGZtX2luaXQsCisJLmV4aXQgPSB0ZWdyYV9zZGhjaV9wbHRmbV9leGl0LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwppbmRleCBhMjVkYjQyLi45ZTE1ZjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9tbWMvbW1jLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KIAogI2luY2x1ZGUgInNkaGNpLmgiCkBAIC03Nyw4ICs3OCwxMSBAQAogCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IEFDMTIgZXJyOiAweCUwOHggfCBTbG90IGludDogMHglMDh4XG4iLAogCQlzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9BQ01EMTJfRVJSKSwKIAkJc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfU0xPVF9JTlRfU1RBVFVTKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogQ2FwczogICAgIDB4JTA4eCB8IE1heCBjdXJyOiAweCUwOHhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogQ2FwczogICAgIDB4JTA4eCB8IENhcHNfMTogICAweCUwOHhcbiIsCiAJCXNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0NBUEFCSUxJVElFUyksCisJCXNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0NBUEFCSUxJVElFU18xKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogQ21kOiAgICAgIDB4JTA4eCB8IE1heCBjdXJyOiAweCUwOHhcbiIsCisJCXNkaGNpX3JlYWR3KGhvc3QsIFNESENJX0NPTU1BTkQpLAogCQlzZGhjaV9yZWFkbChob3N0LCBTREhDSV9NQVhfQ1VSUkVOVCkpOwogCiAJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0FETUEpCkBAIC0xNTE4LDcgKzE1MjIsMTEgQEAKIAogCWlmIChpbnRtYXNrICYgU0RIQ0lfSU5UX0RBVEFfVElNRU9VVCkKIAkJaG9zdC0+ZGF0YS0+ZXJyb3IgPSAtRVRJTUVET1VUOwotCWVsc2UgaWYgKGludG1hc2sgJiAoU0RIQ0lfSU5UX0RBVEFfQ1JDIHwgU0RIQ0lfSU5UX0RBVEFfRU5EX0JJVCkpCisJZWxzZSBpZiAoaW50bWFzayAmIFNESENJX0lOVF9EQVRBX0VORF9CSVQpCisJCWhvc3QtPmRhdGEtPmVycm9yID0gLUVJTFNFUTsKKwllbHNlIGlmICgoaW50bWFzayAmIFNESENJX0lOVF9EQVRBX0NSQykgJiYKKwkJU0RIQ0lfR0VUX0NNRChzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9DT01NQU5EKSkKKwkJCSE9IE1NQ19CVVNfVEVTVF9SKQogCQlob3N0LT5kYXRhLT5lcnJvciA9IC1FSUxTRVE7CiAJZWxzZSBpZiAoaW50bWFzayAmIFNESENJX0lOVF9BRE1BX0VSUk9SKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEFETUEgZXJyb3JcbiIsIG1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKQEAgLTE3MzYsNyArMTc0NCw3IEBACiBpbnQgc2RoY2lfYWRkX2hvc3Qoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCiB7CiAJc3RydWN0IG1tY19ob3N0ICptbWM7Ci0JdW5zaWduZWQgaW50IGNhcHM7CisJdW5zaWduZWQgaW50IGNhcHMsIG9jcl9hdmFpbDsKIAlpbnQgcmV0OwogCiAJV0FSTl9PTihob3N0ID09IE5VTEwpOwpAQCAtMTg5MCwxMyArMTg5OCwyNiBAQAogCSAgICBtbWNfY2FyZF9pc19yZW1vdmFibGUobW1jKSkKIAkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTkVFRFNfUE9MTDsKIAotCW1tYy0+b2NyX2F2YWlsID0gMDsKKwlvY3JfYXZhaWwgPSAwOwogCWlmIChjYXBzICYgU0RIQ0lfQ0FOX1ZERF8zMzApCi0JCW1tYy0+b2NyX2F2YWlsIHw9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNDsKKwkJb2NyX2F2YWlsIHw9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OwogCWlmIChjYXBzICYgU0RIQ0lfQ0FOX1ZERF8zMDApCi0JCW1tYy0+b2NyX2F2YWlsIHw9IE1NQ19WRERfMjlfMzB8TU1DX1ZERF8zMF8zMTsKKwkJb2NyX2F2YWlsIHw9IE1NQ19WRERfMjlfMzAgfCBNTUNfVkREXzMwXzMxOwogCWlmIChjYXBzICYgU0RIQ0lfQ0FOX1ZERF8xODApCi0JCW1tYy0+b2NyX2F2YWlsIHw9IE1NQ19WRERfMTY1XzE5NTsKKwkJb2NyX2F2YWlsIHw9IE1NQ19WRERfMTY1XzE5NTsKKworCW1tYy0+b2NyX2F2YWlsID0gb2NyX2F2YWlsOworCW1tYy0+b2NyX2F2YWlsX3NkaW8gPSBvY3JfYXZhaWw7CisJaWYgKGhvc3QtPm9jcl9hdmFpbF9zZGlvKQorCQltbWMtPm9jcl9hdmFpbF9zZGlvICY9IGhvc3QtPm9jcl9hdmFpbF9zZGlvOworCW1tYy0+b2NyX2F2YWlsX3NkID0gb2NyX2F2YWlsOworCWlmIChob3N0LT5vY3JfYXZhaWxfc2QpCisJCW1tYy0+b2NyX2F2YWlsX3NkICY9IGhvc3QtPm9jcl9hdmFpbF9zZDsKKwllbHNlIC8qIG5vcm1hbCBTRCBjb250cm9sbGVycyBkb24ndCBzdXBwb3J0IDEuOFYgKi8KKwkJbW1jLT5vY3JfYXZhaWxfc2QgJj0gfk1NQ19WRERfMTY1XzE5NTsKKwltbWMtPm9jcl9hdmFpbF9tbWMgPSBvY3JfYXZhaWw7CisJaWYgKGhvc3QtPm9jcl9hdmFpbF9tbWMpCisJCW1tYy0+b2NyX2F2YWlsX21tYyAmPSBob3N0LT5vY3JfYXZhaWxfbW1jOwogCiAJaWYgKG1tYy0+b2NyX2F2YWlsID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSGFyZHdhcmUgZG9lc24ndCByZXBvcnQgYW55ICIKQEAgLTE5MjgsMTAgKzE5NDksMTQgQEAKIAkgKiBvZiBieXRlcy4gV2hlbiBkb2luZyBoYXJkd2FyZSBzY2F0dGVyL2dhdGhlciwgZWFjaCBlbnRyeSBjYW5ub3QKIAkgKiBiZSBsYXJnZXIgdGhhbiA2NCBLaUIgdGhvdWdoLgogCSAqLwotCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKQotCQltbWMtPm1heF9zZWdfc2l6ZSA9IDY1NTM2OwotCWVsc2UKKwlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfQURNQSkgeworCQlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfQlJPS0VOX0FETUFfWkVST0xFTl9ERVNDKQorCQkJbW1jLT5tYXhfc2VnX3NpemUgPSA2NTUzNTsKKwkJZWxzZQorCQkJbW1jLT5tYXhfc2VnX3NpemUgPSA2NTUzNjsKKwl9IGVsc2UgewogCQltbWMtPm1heF9zZWdfc2l6ZSA9IG1tYy0+bWF4X3JlcV9zaXplOworCX0KIAogCS8qCiAJICogTWF4aW11bSBibG9jayBzaXplLiBUaGlzIHZhcmllcyBmcm9tIGNvbnRyb2xsZXIgdG8gY29udHJvbGxlciBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaAppbmRleCBlNDJkN2YwLi42ZTA5NjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCkBAIC01Miw2ICs1Miw3IEBACiAjZGVmaW5lICBTREhDSV9DTURfUkVTUF9TSE9SVF9CVVNZIDB4MDMKIAogI2RlZmluZSBTREhDSV9NQUtFX0NNRChjLCBmKSAoKChjICYgMHhmZikgPDwgOCkgfCAoZiAmIDB4ZmYpKQorI2RlZmluZSBTREhDSV9HRVRfQ01EKGMpICgoYz4+OCkgJiAweDNmKQogCiAjZGVmaW5lIFNESENJX1JFU1BPTlNFCQkweDEwCiAKQEAgLTE2NSw3ICsxNjYsNyBAQAogI2RlZmluZSAgU0RIQ0lfQ0FOX1ZERF8xODAJMHgwNDAwMDAwMAogI2RlZmluZSAgU0RIQ0lfQ0FOXzY0QklUCTB4MTAwMDAwMDAKIAotLyogNDQtNDcgcmVzZXJ2ZWQgZm9yIG1vcmUgY2FwcyAqLworI2RlZmluZSBTREhDSV9DQVBBQklMSVRJRVNfMQkweDQ0CiAKICNkZWZpbmUgU0RIQ0lfTUFYX0NVUlJFTlQJMHg0OAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3Nkcmljb2hfY3MuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RyaWNvaF9jcy5jCmluZGV4IGY0NzJjMjcuLmJiYzI5OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RyaWNvaF9jcy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RyaWNvaF9jcy5jCkBAIC00NDYsNyArNDQ2LDcgQEAKIAltbWMtPm1heF9zZWdfc2l6ZSA9IDEwMjQgKiA1MTI7CiAJbW1jLT5tYXhfYmxrX3NpemUgPSA1MTI7CiAKLQkvKiByZXNldCB0aGUgY29udHJvbGVyICovCisJLyogcmVzZXQgdGhlIGNvbnRyb2xsZXIgKi8KIAlpZiAoc2RyaWNvaF9yZXNldChob3N0KSkgewogCQlkZXZfZGJnKGRldiwgImNvdWxkIG5vdCByZXNldFxuIik7CiAJCXJlc3VsdCA9IC1FSU87CkBAIC00NzgsNyArNDc4LDcgQEAKIAlkZXZfaW5mbygmcGNtY2lhX2Rldi0+ZGV2LCAiU2VhcmNoaW5nIE1NQyBjb250cm9sbGVyIGZvciBwY21jaWEgZGV2aWNlIgogCQkiICVzICVzIC4uLlxuIiwgcGNtY2lhX2Rldi0+cHJvZF9pZFswXSwgcGNtY2lhX2Rldi0+cHJvZF9pZFsxXSk7CiAKLQkvKiBzZWFyY2ggcGNpIGNhcmRidXMgYnJpZGdlIHRoYXQgY29udGFpbnMgdGhlIG1tYyBjb250cm9sZXIgKi8KKwkvKiBzZWFyY2ggcGNpIGNhcmRidXMgYnJpZGdlIHRoYXQgY29udGFpbnMgdGhlIG1tYyBjb250cm9sbGVyICovCiAJLyogdGhlIGlvIHJlZ2lvbiBpcyBhbHJlYWR5IGNsYWltZWQgYnkgeWVudGFfc29ja2V0Li4uICovCiAJd2hpbGUgKChwY2lfZGV2ID0KIAkJcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9SSUNPSCwgUENJX0RFVklDRV9JRF9SSUNPSF9STDVDNDc2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5jCmluZGV4IGU3NzY1YTguLmUzYzZlZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmMKQEAgLTI1LDE2ICsyNSwyNjEgQEAKICAqICAgZG91YmxlIGJ1ZmZlciBzdXBwb3J0CiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvdG1pby5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAotI2luY2x1ZGUgInRtaW9fbW1jLmgiCisjZGVmaW5lIENUTF9TRF9DTUQgMHgwMAorI2RlZmluZSBDVExfQVJHX1JFRyAweDA0CisjZGVmaW5lIENUTF9TVE9QX0lOVEVSTkFMX0FDVElPTiAweDA4CisjZGVmaW5lIENUTF9YRkVSX0JMS19DT1VOVCAweGEKKyNkZWZpbmUgQ1RMX1JFU1BPTlNFIDB4MGMKKyNkZWZpbmUgQ1RMX1NUQVRVUyAweDFjCisjZGVmaW5lIENUTF9JUlFfTUFTSyAweDIwCisjZGVmaW5lIENUTF9TRF9DQVJEX0NMS19DVEwgMHgyNAorI2RlZmluZSBDVExfU0RfWEZFUl9MRU4gMHgyNgorI2RlZmluZSBDVExfU0RfTUVNX0NBUkRfT1BUIDB4MjgKKyNkZWZpbmUgQ1RMX1NEX0VSUk9SX0RFVEFJTF9TVEFUVVMgMHgyYworI2RlZmluZSBDVExfU0RfREFUQV9QT1JUIDB4MzAKKyNkZWZpbmUgQ1RMX1RSQU5TQUNUSU9OX0NUTCAweDM0CisjZGVmaW5lIENUTF9TRElPX1NUQVRVUyAweDM2CisjZGVmaW5lIENUTF9TRElPX0lSUV9NQVNLIDB4MzgKKyNkZWZpbmUgQ1RMX1JFU0VUX1NEIDB4ZTAKKyNkZWZpbmUgQ1RMX1NESU9fUkVHUyAweDEwMAorI2RlZmluZSBDVExfQ0xLX0FORF9XQUlUX0NUTCAweDEzOAorI2RlZmluZSBDVExfUkVTRVRfU0RJTyAweDFlMAorCisvKiBEZWZpbml0aW9ucyBmb3IgdmFsdWVzIHRoZSBDVFJMX1NUQVRVUyByZWdpc3RlciBjYW4gdGFrZS4gKi8KKyNkZWZpbmUgVE1JT19TVEFUX0NNRFJFU1BFTkQgICAgMHgwMDAwMDAwMQorI2RlZmluZSBUTUlPX1NUQVRfREFUQUVORCAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFRNSU9fU1RBVF9DQVJEX1JFTU9WRSAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgVE1JT19TVEFUX0NBUkRfSU5TRVJUICAgMHgwMDAwMDAxMAorI2RlZmluZSBUTUlPX1NUQVRfU0lHU1RBVEUgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFRNSU9fU1RBVF9XUlBST1RFQ1QgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgVE1JT19TVEFUX0NBUkRfUkVNT1ZFX0EgMHgwMDAwMDEwMAorI2RlZmluZSBUTUlPX1NUQVRfQ0FSRF9JTlNFUlRfQSAweDAwMDAwMjAwCisjZGVmaW5lIFRNSU9fU1RBVF9TSUdTVEFURV9BICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgVE1JT19TVEFUX0NNRF9JRFhfRVJSICAgMHgwMDAxMDAwMAorI2RlZmluZSBUTUlPX1NUQVRfQ1JDRkFJTCAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIFRNSU9fU1RBVF9TVE9QQklUX0VSUiAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgVE1JT19TVEFUX0RBVEFUSU1FT1VUICAgMHgwMDA4MDAwMAorI2RlZmluZSBUTUlPX1NUQVRfUlhPVkVSRkxPVyAgICAweDAwMTAwMDAwCisjZGVmaW5lIFRNSU9fU1RBVF9UWFVOREVSUlVOICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgVE1JT19TVEFUX0NNRFRJTUVPVVQgICAgMHgwMDQwMDAwMAorI2RlZmluZSBUTUlPX1NUQVRfUlhSRFkgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIFRNSU9fU1RBVF9UWFJRICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgVE1JT19TVEFUX0lMTF9GVU5DICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBUTUlPX1NUQVRfQ01EX0JVU1kgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFRNSU9fU1RBVF9JTExfQUNDRVNTICAgIDB4ODAwMDAwMDAKKworLyogRGVmaW5pdGlvbnMgZm9yIHZhbHVlcyB0aGUgQ1RSTF9TRElPX1NUQVRVUyByZWdpc3RlciBjYW4gdGFrZS4gKi8KKyNkZWZpbmUgVE1JT19TRElPX1NUQVRfSU9JUlEJMHgwMDAxCisjZGVmaW5lIFRNSU9fU0RJT19TVEFUX0VYUFVCNTIJMHg0MDAwCisjZGVmaW5lIFRNSU9fU0RJT19TVEFUX0VYV1QJMHg4MDAwCisjZGVmaW5lIFRNSU9fU0RJT19NQVNLX0FMTAkweGMwMDcKKworLyogRGVmaW5lIHNvbWUgSVJRIG1hc2tzICovCisvKiBUaGlzIGlzIHRoZSBtYXNrIHVzZWQgYXQgcmVzZXQgYnkgdGhlIGNoaXAgKi8KKyNkZWZpbmUgVE1JT19NQVNLX0FMTCAgICAgICAgICAgMHg4MzdmMDMxZAorI2RlZmluZSBUTUlPX01BU0tfUkVBRE9QICAoVE1JT19TVEFUX1JYUkRZIHwgVE1JT19TVEFUX0RBVEFFTkQpCisjZGVmaW5lIFRNSU9fTUFTS19XUklURU9QIChUTUlPX1NUQVRfVFhSUSB8IFRNSU9fU1RBVF9EQVRBRU5EKQorI2RlZmluZSBUTUlPX01BU0tfQ01EICAgICAoVE1JT19TVEFUX0NNRFJFU1BFTkQgfCBUTUlPX1NUQVRfQ01EVElNRU9VVCB8IFwKKwkJVE1JT19TVEFUX0NBUkRfUkVNT1ZFIHwgVE1JT19TVEFUX0NBUkRfSU5TRVJUKQorI2RlZmluZSBUTUlPX01BU0tfSVJRICAgICAoVE1JT19NQVNLX1JFQURPUCB8IFRNSU9fTUFTS19XUklURU9QIHwgVE1JT19NQVNLX0NNRCkKKworI2RlZmluZSBlbmFibGVfbW1jX2lycXMoaG9zdCwgaSkgXAorCWRvIHsgXAorCQl1MzIgbWFzaztcCisJCW1hc2sgID0gc2RfY3RybF9yZWFkMzIoKGhvc3QpLCBDVExfSVJRX01BU0spOyBcCisJCW1hc2sgJj0gfigoaSkgJiBUTUlPX01BU0tfSVJRKTsgXAorCQlzZF9jdHJsX3dyaXRlMzIoKGhvc3QpLCBDVExfSVJRX01BU0ssIG1hc2spOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBkaXNhYmxlX21tY19pcnFzKGhvc3QsIGkpIFwKKwlkbyB7IFwKKwkJdTMyIG1hc2s7XAorCQltYXNrICA9IHNkX2N0cmxfcmVhZDMyKChob3N0KSwgQ1RMX0lSUV9NQVNLKTsgXAorCQltYXNrIHw9ICgoaSkgJiBUTUlPX01BU0tfSVJRKTsgXAorCQlzZF9jdHJsX3dyaXRlMzIoKGhvc3QpLCBDVExfSVJRX01BU0ssIG1hc2spOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBhY2tfbW1jX2lycXMoaG9zdCwgaSkgXAorCWRvIHsgXAorCQlzZF9jdHJsX3dyaXRlMzIoKGhvc3QpLCBDVExfU1RBVFVTLCB+KGkpKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIFRoaXMgaXMgYXJiaXRyYXJ5LCBqdXN0IG5vb25lIG5lZWRlZCBhbnkgaGlnaGVyIGFsaWdubWVudCB5ZXQgKi8KKyNkZWZpbmUgTUFYX0FMSUdOIDQKKworc3RydWN0IHRtaW9fbW1jX2hvc3QgeworCXZvaWQgX19pb21lbSAqY3RsOworCXVuc2lnbmVkIGxvbmcgYnVzX3NoaWZ0OworCXN0cnVjdCBtbWNfY29tbWFuZCAgICAgICpjbWQ7CisJc3RydWN0IG1tY19yZXF1ZXN0ICAgICAgKm1ycTsKKwlzdHJ1Y3QgbW1jX2RhdGEgICAgICAgICAqZGF0YTsKKwlzdHJ1Y3QgbW1jX2hvc3QgICAgICAgICAqbW1jOworCWludCAgICAgICAgICAgICAgICAgICAgIGlycTsKKwl1bnNpZ25lZCBpbnQJCXNkaW9faXJxX2VuYWJsZWQ7CisKKwkvKiBDYWxsYmFja3MgZm9yIGNsb2NrIC8gcG93ZXIgY29udHJvbCAqLworCXZvaWQgKCpzZXRfcHdyKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpob3N0LCBpbnQgc3RhdGUpOworCXZvaWQgKCpzZXRfY2xrX2Rpdikoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaG9zdCwgaW50IHN0YXRlKTsKKworCS8qIHBpbyByZWxhdGVkIHN0dWZmICovCisJc3RydWN0IHNjYXR0ZXJsaXN0ICAgICAgKnNnX3B0cjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgICAgICAqc2dfb3JpZzsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBzZ19sZW47CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgc2dfb2ZmOworCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCS8qIERNQSBzdXBwb3J0ICovCisJc3RydWN0IGRtYV9jaGFuCQkqY2hhbl9yeDsKKwlzdHJ1Y3QgZG1hX2NoYW4JCSpjaGFuX3R4OworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlkbWFfY29tcGxldGU7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CWRtYV9pc3N1ZTsKKyNpZmRlZiBDT05GSUdfVE1JT19NTUNfRE1BCisJdW5zaWduZWQgaW50ICAgICAgICAgICAgZG1hX3NnbGVuOworCXU4CQkJYm91bmNlX2J1ZltQQUdFX0NBQ0hFX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoTUFYX0FMSUdOKSkpOworCXN0cnVjdCBzY2F0dGVybGlzdAlib3VuY2Vfc2c7CisjZW5kaWYKKworCS8qIFRyYWNrIGxvc3QgaW50ZXJydXB0cyAqLworCXN0cnVjdCBkZWxheWVkX3dvcmsJZGVsYXllZF9yZXNldF93b3JrOworCXNwaW5sb2NrX3QJCWxvY2s7CisJdW5zaWduZWQgbG9uZwkJbGFzdF9yZXFfdHM7Cit9OworCitzdGF0aWMgdm9pZCB0bWlvX2NoZWNrX2JvdW5jZV9idWZmZXIoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QpOworCitzdGF0aWMgdTE2IHNkX2N0cmxfcmVhZDE2KHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LCBpbnQgYWRkcikKK3sKKwlyZXR1cm4gcmVhZHcoaG9zdC0+Y3RsICsgKGFkZHIgPDwgaG9zdC0+YnVzX3NoaWZ0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHNkX2N0cmxfcmVhZDE2X3JlcChzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCwgaW50IGFkZHIsCisJCXUxNiAqYnVmLCBpbnQgY291bnQpCit7CisJcmVhZHN3KGhvc3QtPmN0bCArIChhZGRyIDw8IGhvc3QtPmJ1c19zaGlmdCksIGJ1ZiwgY291bnQpOworfQorCitzdGF0aWMgdTMyIHNkX2N0cmxfcmVhZDMyKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LCBpbnQgYWRkcikKK3sKKwlyZXR1cm4gcmVhZHcoaG9zdC0+Y3RsICsgKGFkZHIgPDwgaG9zdC0+YnVzX3NoaWZ0KSkgfAorCSAgICAgICByZWFkdyhob3N0LT5jdGwgKyAoKGFkZHIgKyAyKSA8PCBob3N0LT5idXNfc2hpZnQpKSA8PCAxNjsKK30KKworc3RhdGljIHZvaWQgc2RfY3RybF93cml0ZTE2KHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LCBpbnQgYWRkciwgdTE2IHZhbCkKK3sKKwl3cml0ZXcodmFsLCBob3N0LT5jdGwgKyAoYWRkciA8PCBob3N0LT5idXNfc2hpZnQpKTsKK30KKworc3RhdGljIHZvaWQgc2RfY3RybF93cml0ZTE2X3JlcChzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCwgaW50IGFkZHIsCisJCXUxNiAqYnVmLCBpbnQgY291bnQpCit7CisJd3JpdGVzdyhob3N0LT5jdGwgKyAoYWRkciA8PCBob3N0LT5idXNfc2hpZnQpLCBidWYsIGNvdW50KTsKK30KKworc3RhdGljIHZvaWQgc2RfY3RybF93cml0ZTMyKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LCBpbnQgYWRkciwgdTMyIHZhbCkKK3sKKwl3cml0ZXcodmFsLCBob3N0LT5jdGwgKyAoYWRkciA8PCBob3N0LT5idXNfc2hpZnQpKTsKKwl3cml0ZXcodmFsID4+IDE2LCBob3N0LT5jdGwgKyAoKGFkZHIgKyAyKSA8PCBob3N0LT5idXNfc2hpZnQpKTsKK30KKworc3RhdGljIHZvaWQgdG1pb19tbWNfaW5pdF9zZyhzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCWhvc3QtPnNnX2xlbiA9IGRhdGEtPnNnX2xlbjsKKwlob3N0LT5zZ19wdHIgPSBkYXRhLT5zZzsKKwlob3N0LT5zZ19vcmlnID0gZGF0YS0+c2c7CisJaG9zdC0+c2dfb2ZmID0gMDsKK30KKworc3RhdGljIGludCB0bWlvX21tY19uZXh0X3NnKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0KQoreworCWhvc3QtPnNnX3B0ciA9IHNnX25leHQoaG9zdC0+c2dfcHRyKTsKKwlob3N0LT5zZ19vZmYgPSAwOworCXJldHVybiAtLWhvc3QtPnNnX2xlbjsKK30KKworc3RhdGljIGNoYXIgKnRtaW9fbW1jX2ttYXBfYXRvbWljKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCWxvY2FsX2lycV9zYXZlKCpmbGFncyk7CisJcmV0dXJuIGttYXBfYXRvbWljKHNnX3BhZ2Uoc2cpLCBLTV9CSU9fU1JDX0lSUSkgKyBzZy0+b2Zmc2V0OworfQorCitzdGF0aWMgdm9pZCB0bWlvX21tY19rdW5tYXBfYXRvbWljKHZvaWQgKnZpcnQsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCWt1bm1hcF9hdG9taWModmlydCwgS01fQklPX1NSQ19JUlEpOworCWxvY2FsX2lycV9yZXN0b3JlKCpmbGFncyk7Cit9CisKKyNpZmRlZiBDT05GSUdfTU1DX0RFQlVHCisKKyNkZWZpbmUgU1RBVFVTX1RPX1RFWFQoYSkgXAorCWRvIHsgXAorCQlpZiAoc3RhdHVzICYgVE1JT19TVEFUXyMjYSkgXAorCQkJcHJpbnRrKCNhKTsgXAorCX0gd2hpbGUgKDApCisKK3ZvaWQgcHJfZGVidWdfc3RhdHVzKHUzMiBzdGF0dXMpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgInN0YXR1czogJTA4eCA9ICIsIHN0YXR1cyk7CisJU1RBVFVTX1RPX1RFWFQoQ0FSRF9SRU1PVkUpOworCVNUQVRVU19UT19URVhUKENBUkRfSU5TRVJUKTsKKwlTVEFUVVNfVE9fVEVYVChTSUdTVEFURSk7CisJU1RBVFVTX1RPX1RFWFQoV1JQUk9URUNUKTsKKwlTVEFUVVNfVE9fVEVYVChDQVJEX1JFTU9WRV9BKTsKKwlTVEFUVVNfVE9fVEVYVChDQVJEX0lOU0VSVF9BKTsKKwlTVEFUVVNfVE9fVEVYVChTSUdTVEFURV9BKTsKKwlTVEFUVVNfVE9fVEVYVChDTURfSURYX0VSUik7CisJU1RBVFVTX1RPX1RFWFQoU1RPUEJJVF9FUlIpOworCVNUQVRVU19UT19URVhUKElMTF9GVU5DKTsKKwlTVEFUVVNfVE9fVEVYVChDTURfQlVTWSk7CisJU1RBVFVTX1RPX1RFWFQoQ01EUkVTUEVORCk7CisJU1RBVFVTX1RPX1RFWFQoREFUQUVORCk7CisJU1RBVFVTX1RPX1RFWFQoQ1JDRkFJTCk7CisJU1RBVFVTX1RPX1RFWFQoREFUQVRJTUVPVVQpOworCVNUQVRVU19UT19URVhUKENNRFRJTUVPVVQpOworCVNUQVRVU19UT19URVhUKFJYT1ZFUkZMT1cpOworCVNUQVRVU19UT19URVhUKFRYVU5ERVJSVU4pOworCVNUQVRVU19UT19URVhUKFJYUkRZKTsKKwlTVEFUVVNfVE9fVEVYVChUWFJRKTsKKwlTVEFUVVNfVE9fVEVYVChJTExfQUNDRVNTKTsKKwlwcmludGsoIlxuIik7Cit9CisKKyNlbHNlCisjZGVmaW5lIHByX2RlYnVnX3N0YXR1cyhzKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHRtaW9fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwlpZiAoZW5hYmxlKSB7CisJCWhvc3QtPnNkaW9faXJxX2VuYWJsZWQgPSAxOworCQlzZF9jdHJsX3dyaXRlMTYoaG9zdCwgQ1RMX1RSQU5TQUNUSU9OX0NUTCwgMHgwMDAxKTsKKwkJc2RfY3RybF93cml0ZTE2KGhvc3QsIENUTF9TRElPX0lSUV9NQVNLLAorCQkJKFRNSU9fU0RJT19NQVNLX0FMTCAmIH5UTUlPX1NESU9fU1RBVF9JT0lSUSkpOworCX0gZWxzZSB7CisJCXNkX2N0cmxfd3JpdGUxNihob3N0LCBDVExfU0RJT19JUlFfTUFTSywgVE1JT19TRElPX01BU0tfQUxMKTsKKwkJc2RfY3RybF93cml0ZTE2KGhvc3QsIENUTF9UUkFOU0FDVElPTl9DVEwsIDB4MDAwMCk7CisJCWhvc3QtPnNkaW9faXJxX2VuYWJsZWQgPSAwOworCX0KK30KIAogc3RhdGljIHZvaWQgdG1pb19tbWNfc2V0X2Nsb2NrKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LCBpbnQgbmV3X2Nsb2NrKQogewpAQCAtNTUsOCArMzAwLDIzIEBACiAKIHN0YXRpYyB2b2lkIHRtaW9fbW1jX2Nsa19zdG9wKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0KQogeworCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9IGhvc3QtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB0bWlvX21tY19kYXRhICpwZGF0YSA9IGNlbGwtPmRyaXZlcl9kYXRhOworCisJLyoKKwkgKiBUZXN0aW5nIG9uIHNoLW1vYmlsZSBzaG93ZWQgdGhhdCBTRElPIElSUXMgYXJlIHVubWFza2VkIHdoZW4KKwkgKiBDVExfQ0xLX0FORF9XQUlUX0NUTCBnZXRzIHdyaXR0ZW4sIHNvIHdlIGhhdmUgdG8gZGlzYWJsZSB0aGUKKwkgKiBkZXZpY2UgSVJRIGhlcmUgYW5kIHJlc3RvcmUgdGhlIFNESU8gSVJRIG1hc2sgYmVmb3JlCisJICogcmUtZW5hYmxpbmcgdGhlIGRldmljZSBJUlEuCisJICovCisJaWYgKHBkYXRhLT5mbGFncyAmIFRNSU9fTU1DX1NESU9fSVJRKQorCQlkaXNhYmxlX2lycShob3N0LT5pcnEpOwogCXNkX2N0cmxfd3JpdGUxNihob3N0LCBDVExfQ0xLX0FORF9XQUlUX0NUTCwgMHgwMDAwKTsKIAltc2xlZXAoMTApOworCWlmIChwZGF0YS0+ZmxhZ3MgJiBUTUlPX01NQ19TRElPX0lSUSkgeworCQl0bWlvX21tY19lbmFibGVfc2Rpb19pcnEoaG9zdC0+bW1jLCBob3N0LT5zZGlvX2lycV9lbmFibGVkKTsKKwkJZW5hYmxlX2lycShob3N0LT5pcnEpOworCX0KIAlzZF9jdHJsX3dyaXRlMTYoaG9zdCwgQ1RMX1NEX0NBUkRfQ0xLX0NUTCwgfjB4MDEwMCAmCiAJCXNkX2N0cmxfcmVhZDE2KGhvc3QsIENUTF9TRF9DQVJEX0NMS19DVEwpKTsKIAltc2xlZXAoMTApOwpAQCAtNjQsMTEgKzMyNCwyMSBAQAogCiBzdGF0aWMgdm9pZCB0bWlvX21tY19jbGtfc3RhcnQoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QpCiB7CisJc3RydWN0IG1mZF9jZWxsICpjZWxsID0gaG9zdC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRtaW9fbW1jX2RhdGEgKnBkYXRhID0gY2VsbC0+ZHJpdmVyX2RhdGE7CisKIAlzZF9jdHJsX3dyaXRlMTYoaG9zdCwgQ1RMX1NEX0NBUkRfQ0xLX0NUTCwgMHgwMTAwIHwKIAkJc2RfY3RybF9yZWFkMTYoaG9zdCwgQ1RMX1NEX0NBUkRfQ0xLX0NUTCkpOwogCW1zbGVlcCgxMCk7CisJLyogc2VlIGNvbW1lbnQgaW4gdG1pb19tbWNfY2xrX3N0b3AgYWJvdmUgKi8KKwlpZiAocGRhdGEtPmZsYWdzICYgVE1JT19NTUNfU0RJT19JUlEpCisJCWRpc2FibGVfaXJxKGhvc3QtPmlycSk7CiAJc2RfY3RybF93cml0ZTE2KGhvc3QsIENUTF9DTEtfQU5EX1dBSVRfQ1RMLCAweDAxMDApOwogCW1zbGVlcCgxMCk7CisJaWYgKHBkYXRhLT5mbGFncyAmIFRNSU9fTU1DX1NESU9fSVJRKSB7CisJCXRtaW9fbW1jX2VuYWJsZV9zZGlvX2lycShob3N0LT5tbWMsIGhvc3QtPnNkaW9faXJxX2VuYWJsZWQpOworCQllbmFibGVfaXJxKGhvc3QtPmlycSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCByZXNldChzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCkKQEAgLTgyLDE1ICszNTIsNjAgQEAKIAltc2xlZXAoMTApOwogfQogCitzdGF0aWMgdm9pZCB0bWlvX21tY19yZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdG1pb19tbWNfaG9zdCwKKwkJCQkJCSAgZGVsYXllZF9yZXNldF93b3JrLndvcmspOworCXN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCW1ycSA9IGhvc3QtPm1ycTsKKworCS8qIHJlcXVlc3QgYWxyZWFkeSBmaW5pc2hlZCAqLworCWlmICghbXJxCisJICAgIHx8IHRpbWVfaXNfYWZ0ZXJfamlmZmllcyhob3N0LT5sYXN0X3JlcV90cyArCisJCW1zZWNzX3RvX2ppZmZpZXMoMjAwMCkpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWRldl93YXJuKCZob3N0LT5wZGV2LT5kZXYsCisJCSJ0aW1lb3V0IHdhaXRpbmcgZm9yIGhhcmR3YXJlIGludGVycnVwdCAoQ01EJXUpXG4iLAorCQltcnEtPmNtZC0+b3Bjb2RlKTsKKworCWlmIChob3N0LT5kYXRhKQorCQlob3N0LT5kYXRhLT5lcnJvciA9IC1FVElNRURPVVQ7CisJZWxzZSBpZiAoaG9zdC0+Y21kKQorCQlob3N0LT5jbWQtPmVycm9yID0gLUVUSU1FRE9VVDsKKwllbHNlCisJCW1ycS0+Y21kLT5lcnJvciA9IC1FVElNRURPVVQ7CisKKwlob3N0LT5jbWQgPSBOVUxMOworCWhvc3QtPmRhdGEgPSBOVUxMOworCWhvc3QtPm1ycSA9IE5VTEw7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwlyZXNldChob3N0KTsKKworCW1tY19yZXF1ZXN0X2RvbmUoaG9zdC0+bW1jLCBtcnEpOworfQorCiBzdGF0aWMgdm9pZAogdG1pb19tbWNfZmluaXNoX3JlcXVlc3Qoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QpCiB7CiAJc3RydWN0IG1tY19yZXF1ZXN0ICptcnEgPSBob3N0LT5tcnE7CiAKKwlpZiAoIW1ycSkKKwkJcmV0dXJuOworCiAJaG9zdC0+bXJxID0gTlVMTDsKIAlob3N0LT5jbWQgPSBOVUxMOwogCWhvc3QtPmRhdGEgPSBOVUxMOwogCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmaG9zdC0+ZGVsYXllZF9yZXNldF93b3JrKTsKKwogCW1tY19yZXF1ZXN0X2RvbmUoaG9zdC0+bW1jLCBtcnEpOwogfQogCkBAIC0yMDAsNiArNTE1LDcgQEAKIAlyZXR1cm47CiB9CiAKKy8qIG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIGhvc3QtPmxvY2sgaGVsZCAqLwogc3RhdGljIHZvaWQgdG1pb19tbWNfZG9fZGF0YV9pcnEoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QpCiB7CiAJc3RydWN0IG1tY19kYXRhICpkYXRhID0gaG9zdC0+ZGF0YTsKQEAgLTIzMyw2ICs1NDksOCBAQAogCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpIHsKIAkJaWYgKCFob3N0LT5jaGFuX3J4KQogCQkJZGlzYWJsZV9tbWNfaXJxcyhob3N0LCBUTUlPX01BU0tfUkVBRE9QKTsKKwkJZWxzZQorCQkJdG1pb19jaGVja19ib3VuY2VfYnVmZmVyKGhvc3QpOwogCQlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsICJDb21wbGV0ZSBSeCByZXF1ZXN0ICVwXG4iLAogCQkJaG9zdC0+bXJxKTsKIAl9IGVsc2UgewpAQCAtMjU0LDEwICs1NzIsMTIgQEAKIAogc3RhdGljIHZvaWQgdG1pb19tbWNfZGF0YV9pcnEoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QpCiB7Ci0Jc3RydWN0IG1tY19kYXRhICpkYXRhID0gaG9zdC0+ZGF0YTsKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGE7CisJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKKwlkYXRhID0gaG9zdC0+ZGF0YTsKIAogCWlmICghZGF0YSkKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAogCWlmIChob3N0LT5jaGFuX3R4ICYmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSkgewogCQkvKgpAQCAtMjc4LDYgKzU5OCw4IEBACiAJfSBlbHNlIHsKIAkJdG1pb19tbWNfZG9fZGF0YV9pcnEoaG9zdCk7CiAJfQorb3V0OgorCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgdG1pb19tbWNfY21kX2lycShzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCwKQEAgLTI4Niw5ICs2MDgsMTEgQEAKIAlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IGhvc3QtPmNtZDsKIAlpbnQgaSwgYWRkcjsKIAorCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7CisKIAlpZiAoIWhvc3QtPmNtZCkgewogCQlwcl9kZWJ1ZygiU3B1cmlvdXMgQ01EIGlycVxuIik7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaG9zdC0+Y21kID0gTlVMTDsKQEAgLTMyNCw4ICs2NDgsNyBAQAogCQkJaWYgKCFob3N0LT5jaGFuX3J4KQogCQkJCWVuYWJsZV9tbWNfaXJxcyhob3N0LCBUTUlPX01BU0tfUkVBRE9QKTsKIAkJfSBlbHNlIHsKLQkJCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGhvc3QtPmNoYW5fdHg7Ci0JCQlpZiAoIWNoYW4pCisJCQlpZiAoIWhvc3QtPmNoYW5fdHgpCiAJCQkJZW5hYmxlX21tY19pcnFzKGhvc3QsIFRNSU9fTUFTS19XUklURU9QKTsKIAkJCWVsc2UKIAkJCQl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT5kbWFfaXNzdWUpOwpAQCAtMzM0LDEzICs2NTcsMTkgQEAKIAkJdG1pb19tbWNfZmluaXNoX3JlcXVlc3QoaG9zdCk7CiAJfQogCitvdXQ6CisJc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOworCiAJcmV0dXJuOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgdG1pb19tbWNfaXJxKGludCBpcnEsIHZvaWQgKmRldmlkKQogewogCXN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0ID0gZGV2aWQ7CisJc3RydWN0IG1mZF9jZWxsCSpjZWxsID0gaG9zdC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRtaW9fbW1jX2RhdGEgKnBkYXRhID0gY2VsbC0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgaW50IGlyZWcsIGlycV9tYXNrLCBzdGF0dXM7CisJdW5zaWduZWQgaW50IHNkaW9faXJlZywgc2Rpb19pcnFfbWFzaywgc2Rpb19zdGF0dXM7CiAKIAlwcl9kZWJ1ZygiTU1DIElSUSBiZWdpblxuIik7CiAKQEAgLTM0OCw2ICs2NzcsMjkgQEAKIAlpcnFfbWFzayA9IHNkX2N0cmxfcmVhZDMyKGhvc3QsIENUTF9JUlFfTUFTSyk7CiAJaXJlZyA9IHN0YXR1cyAmIFRNSU9fTUFTS19JUlEgJiB+aXJxX21hc2s7CiAKKwlzZGlvX2lyZWcgPSAwOworCWlmICghaXJlZyAmJiBwZGF0YS0+ZmxhZ3MgJiBUTUlPX01NQ19TRElPX0lSUSkgeworCQlzZGlvX3N0YXR1cyA9IHNkX2N0cmxfcmVhZDE2KGhvc3QsIENUTF9TRElPX1NUQVRVUyk7CisJCXNkaW9faXJxX21hc2sgPSBzZF9jdHJsX3JlYWQxNihob3N0LCBDVExfU0RJT19JUlFfTUFTSyk7CisJCXNkaW9faXJlZyA9IHNkaW9fc3RhdHVzICYgVE1JT19TRElPX01BU0tfQUxMICYgfnNkaW9faXJxX21hc2s7CisKKwkJc2RfY3RybF93cml0ZTE2KGhvc3QsIENUTF9TRElPX1NUQVRVUywgc2Rpb19zdGF0dXMgJiB+VE1JT19TRElPX01BU0tfQUxMKTsKKworCQlpZiAoc2Rpb19pcmVnICYmICFob3N0LT5zZGlvX2lycV9lbmFibGVkKSB7CisJCQlwcl93YXJuaW5nKCJ0bWlvX21tYzogU3B1cmlvdXMgU0RJTyBJUlEsIGRpc2FibGluZyEgMHglMDR4IDB4JTA0eCAweCUwNHhcbiIsCisJCQkJICAgc2Rpb19zdGF0dXMsIHNkaW9faXJxX21hc2ssIHNkaW9faXJlZyk7CisJCQl0bWlvX21tY19lbmFibGVfc2Rpb19pcnEoaG9zdC0+bW1jLCAwKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGhvc3QtPm1tYy0+Y2FwcyAmIE1NQ19DQVBfU0RJT19JUlEgJiYKKwkJCXNkaW9faXJlZyAmIFRNSU9fU0RJT19TVEFUX0lPSVJRKQorCQkJbW1jX3NpZ25hbF9zZGlvX2lycShob3N0LT5tbWMpOworCisJCWlmIChzZGlvX2lyZWcpCisJCQlnb3RvIG91dDsKKwl9CisKIAlwcl9kZWJ1Z19zdGF0dXMoc3RhdHVzKTsKIAlwcl9kZWJ1Z19zdGF0dXMoaXJlZyk7CiAKQEAgLTM3NSw4ICs3MjcsMTAgQEAKICAqLwogCiAJCS8qIENvbW1hbmQgY29tcGxldGlvbiAqLwotCQlpZiAoaXJlZyAmIFRNSU9fTUFTS19DTUQpIHsKLQkJCWFja19tbWNfaXJxcyhob3N0LCBUTUlPX01BU0tfQ01EKTsKKwkJaWYgKGlyZWcgJiAoVE1JT19TVEFUX0NNRFJFU1BFTkQgfCBUTUlPX1NUQVRfQ01EVElNRU9VVCkpIHsKKwkJCWFja19tbWNfaXJxcyhob3N0LAorCQkJCSAgICAgVE1JT19TVEFUX0NNRFJFU1BFTkQgfAorCQkJCSAgICAgVE1JT19TVEFUX0NNRFRJTUVPVVQpOwogCQkJdG1pb19tbWNfY21kX2lycShob3N0LCBzdGF0dXMpOwogCQl9CiAKQEAgLTQwNyw2ICs3NjEsMTYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19UTUlPX01NQ19ETUEKK3N0YXRpYyB2b2lkIHRtaW9fY2hlY2tfYm91bmNlX2J1ZmZlcihzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCkKK3sKKwlpZiAoaG9zdC0+c2dfcHRyID09ICZob3N0LT5ib3VuY2Vfc2cpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJdm9pZCAqc2dfdmFkZHIgPSB0bWlvX21tY19rbWFwX2F0b21pYyhob3N0LT5zZ19vcmlnLCAmZmxhZ3MpOworCQltZW1jcHkoc2dfdmFkZHIsIGhvc3QtPmJvdW5jZV9idWYsIGhvc3QtPmJvdW5jZV9zZy5sZW5ndGgpOworCQl0bWlvX21tY19rdW5tYXBfYXRvbWljKHNnX3ZhZGRyLCAmZmxhZ3MpOworCX0KK30KKwogc3RhdGljIHZvaWQgdG1pb19tbWNfZW5hYmxlX2RtYShzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCwgYm9vbCBlbmFibGUpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX1NITU9CSUxFKQpAQCAtNDI3LDEyICs3OTEsMzkgQEAKIAkJZW5hYmxlX21tY19pcnFzKGhvc3QsIFRNSU9fU1RBVF9EQVRBRU5EKTsKIH0KIAotc3RhdGljIGludCB0bWlvX21tY19zdGFydF9kbWFfcngoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QpCitzdGF0aWMgdm9pZCB0bWlvX21tY19zdGFydF9kbWFfcngoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QpCiB7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IGhvc3QtPnNnX3B0cjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaG9zdC0+c2dfcHRyLCAqc2dfdG1wOwogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYyA9IE5VTEw7CiAJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gaG9zdC0+Y2hhbl9yeDsKLQlpbnQgcmV0OworCXN0cnVjdCBtZmRfY2VsbAkqY2VsbCA9IGhvc3QtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB0bWlvX21tY19kYXRhICpwZGF0YSA9IGNlbGwtPmRyaXZlcl9kYXRhOworCWRtYV9jb29raWVfdCBjb29raWU7CisJaW50IHJldCwgaTsKKwlib29sIGFsaWduZWQgPSB0cnVlLCBtdWx0aXBsZSA9IHRydWU7CisJdW5zaWduZWQgaW50IGFsaWduID0gKDEgPDwgcGRhdGEtPmRtYS0+YWxpZ25tZW50X3NoaWZ0KSAtIDE7CisKKwlmb3JfZWFjaF9zZyhzZywgc2dfdG1wLCBob3N0LT5zZ19sZW4sIGkpIHsKKwkJaWYgKHNnX3RtcC0+b2Zmc2V0ICYgYWxpZ24pCisJCQlhbGlnbmVkID0gZmFsc2U7CisJCWlmIChzZ190bXAtPmxlbmd0aCAmIGFsaWduKSB7CisJCQltdWx0aXBsZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoKCFhbGlnbmVkICYmIChob3N0LT5zZ19sZW4gPiAxIHx8IHNnLT5sZW5ndGggPiBQQUdFX0NBQ0hFX1NJWkUgfHwKKwkJCSAgYWxpZ24gPj0gTUFYX0FMSUdOKSkgfHwgIW11bHRpcGxlKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gcGlvOworCX0KKworCS8qIFRoZSBvbmx5IHNnIGVsZW1lbnQgY2FuIGJlIHVuYWxpZ25lZCwgdXNlIG91ciBib3VuY2UgYnVmZmVyIHRoZW4gKi8KKwlpZiAoIWFsaWduZWQpIHsKKwkJc2dfaW5pdF9vbmUoJmhvc3QtPmJvdW5jZV9zZywgaG9zdC0+Ym91bmNlX2J1Ziwgc2ctPmxlbmd0aCk7CisJCWhvc3QtPnNnX3B0ciA9ICZob3N0LT5ib3VuY2Vfc2c7CisJCXNnID0gaG9zdC0+c2dfcHRyOworCX0KIAogCXJldCA9IGRtYV9tYXBfc2coJmhvc3QtPnBkZXYtPmRldiwgc2csIGhvc3QtPnNnX2xlbiwgRE1BX0ZST01fREVWSUNFKTsKIAlpZiAocmV0ID4gMCkgewpAQCAtNDQyLDIxICs4MzMsMjEgQEAKIAl9CiAKIAlpZiAoZGVzYykgewotCQlob3N0LT5kZXNjID0gZGVzYzsKIAkJZGVzYy0+Y2FsbGJhY2sgPSB0bWlvX2RtYV9jb21wbGV0ZTsKIAkJZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSBob3N0OwotCQlob3N0LT5jb29raWUgPSBkZXNjLT50eF9zdWJtaXQoZGVzYyk7Ci0JCWlmIChob3N0LT5jb29raWUgPCAwKSB7Ci0JCQlob3N0LT5kZXNjID0gTlVMTDsKLQkJCXJldCA9IGhvc3QtPmNvb2tpZTsKKwkJY29va2llID0gZGVzYy0+dHhfc3VibWl0KGRlc2MpOworCQlpZiAoY29va2llIDwgMCkgeworCQkJZGVzYyA9IE5VTEw7CisJCQlyZXQgPSBjb29raWU7CiAJCX0gZWxzZSB7CiAJCQljaGFuLT5kZXZpY2UtPmRldmljZV9pc3N1ZV9wZW5kaW5nKGNoYW4pOwogCQl9CiAJfQogCWRldl9kYmcoJmhvc3QtPnBkZXYtPmRldiwgIiVzKCk6IG1hcHBlZCAlZCAtPiAlZCwgY29va2llICVkLCBycSAlcFxuIiwKLQkJX19mdW5jX18sIGhvc3QtPnNnX2xlbiwgcmV0LCBob3N0LT5jb29raWUsIGhvc3QtPm1ycSk7CisJCV9fZnVuY19fLCBob3N0LT5zZ19sZW4sIHJldCwgY29va2llLCBob3N0LT5tcnEpOwogCi0JaWYgKCFob3N0LT5kZXNjKSB7CitwaW86CisJaWYgKCFkZXNjKSB7CiAJCS8qIERNQSBmYWlsZWQsIGZhbGwgYmFjayB0byBQSU8gKi8KIAkJaWYgKHJldCA+PSAwKQogCQkJcmV0ID0gLUVJTzsKQEAgLTQ3MSwyNCArODYyLDQ5IEBACiAJCWRldl93YXJuKCZob3N0LT5wZGV2LT5kZXYsCiAJCQkgIkRNQSBmYWlsZWQ6ICVkLCBmYWxsaW5nIGJhY2sgdG8gUElPXG4iLCByZXQpOwogCQl0bWlvX21tY19lbmFibGVfZG1hKGhvc3QsIGZhbHNlKTsKLQkJcmVzZXQoaG9zdCk7Ci0JCS8qIEZhaWwgdGhpcyByZXF1ZXN0LCBsZXQgYWJvdmUgbGF5ZXJzIHJlY292ZXIgKi8KLQkJaG9zdC0+bXJxLT5jbWQtPmVycm9yID0gcmV0OwotCQl0bWlvX21tY19maW5pc2hfcmVxdWVzdChob3N0KTsKIAl9CiAKIAlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsICIlcygpOiBkZXNjICVwLCBjb29raWUgJWQsIHNnWyVkXVxuIiwgX19mdW5jX18sCi0JCWRlc2MsIGhvc3QtPmNvb2tpZSwgaG9zdC0+c2dfbGVuKTsKLQotCXJldHVybiByZXQgPiAwID8gMCA6IHJldDsKKwkJZGVzYywgY29va2llLCBob3N0LT5zZ19sZW4pOwogfQogCi1zdGF0aWMgaW50IHRtaW9fbW1jX3N0YXJ0X2RtYV90eChzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCkKK3N0YXRpYyB2b2lkIHRtaW9fbW1jX3N0YXJ0X2RtYV90eChzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCkKIHsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaG9zdC0+c2dfcHRyOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBob3N0LT5zZ19wdHIsICpzZ190bXA7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjID0gTlVMTDsKIAlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBob3N0LT5jaGFuX3R4OwotCWludCByZXQ7CisJc3RydWN0IG1mZF9jZWxsCSpjZWxsID0gaG9zdC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRtaW9fbW1jX2RhdGEgKnBkYXRhID0gY2VsbC0+ZHJpdmVyX2RhdGE7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwlpbnQgcmV0LCBpOworCWJvb2wgYWxpZ25lZCA9IHRydWUsIG11bHRpcGxlID0gdHJ1ZTsKKwl1bnNpZ25lZCBpbnQgYWxpZ24gPSAoMSA8PCBwZGF0YS0+ZG1hLT5hbGlnbm1lbnRfc2hpZnQpIC0gMTsKKworCWZvcl9lYWNoX3NnKHNnLCBzZ190bXAsIGhvc3QtPnNnX2xlbiwgaSkgeworCQlpZiAoc2dfdG1wLT5vZmZzZXQgJiBhbGlnbikKKwkJCWFsaWduZWQgPSBmYWxzZTsKKwkJaWYgKHNnX3RtcC0+bGVuZ3RoICYgYWxpZ24pIHsKKwkJCW11bHRpcGxlID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICgoIWFsaWduZWQgJiYgKGhvc3QtPnNnX2xlbiA+IDEgfHwgc2ctPmxlbmd0aCA+IFBBR0VfQ0FDSEVfU0laRSB8fAorCQkJICBhbGlnbiA+PSBNQVhfQUxJR04pKSB8fCAhbXVsdGlwbGUpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBwaW87CisJfQorCisJLyogVGhlIG9ubHkgc2cgZWxlbWVudCBjYW4gYmUgdW5hbGlnbmVkLCB1c2Ugb3VyIGJvdW5jZSBidWZmZXIgdGhlbiAqLworCWlmICghYWxpZ25lZCkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQl2b2lkICpzZ192YWRkciA9IHRtaW9fbW1jX2ttYXBfYXRvbWljKHNnLCAmZmxhZ3MpOworCQlzZ19pbml0X29uZSgmaG9zdC0+Ym91bmNlX3NnLCBob3N0LT5ib3VuY2VfYnVmLCBzZy0+bGVuZ3RoKTsKKwkJbWVtY3B5KGhvc3QtPmJvdW5jZV9idWYsIHNnX3ZhZGRyLCBob3N0LT5ib3VuY2Vfc2cubGVuZ3RoKTsKKwkJdG1pb19tbWNfa3VubWFwX2F0b21pYyhzZ192YWRkciwgJmZsYWdzKTsKKwkJaG9zdC0+c2dfcHRyID0gJmhvc3QtPmJvdW5jZV9zZzsKKwkJc2cgPSBob3N0LT5zZ19wdHI7CisJfQogCiAJcmV0ID0gZG1hX21hcF9zZygmaG9zdC0+cGRldi0+ZGV2LCBzZywgaG9zdC0+c2dfbGVuLCBETUFfVE9fREVWSUNFKTsKIAlpZiAocmV0ID4gMCkgewpAQCAtNDk4LDE5ICs5MTQsMTkgQEAKIAl9CiAKIAlpZiAoZGVzYykgewotCQlob3N0LT5kZXNjID0gZGVzYzsKIAkJZGVzYy0+Y2FsbGJhY2sgPSB0bWlvX2RtYV9jb21wbGV0ZTsKIAkJZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSBob3N0OwotCQlob3N0LT5jb29raWUgPSBkZXNjLT50eF9zdWJtaXQoZGVzYyk7Ci0JCWlmIChob3N0LT5jb29raWUgPCAwKSB7Ci0JCQlob3N0LT5kZXNjID0gTlVMTDsKLQkJCXJldCA9IGhvc3QtPmNvb2tpZTsKKwkJY29va2llID0gZGVzYy0+dHhfc3VibWl0KGRlc2MpOworCQlpZiAoY29va2llIDwgMCkgeworCQkJZGVzYyA9IE5VTEw7CisJCQlyZXQgPSBjb29raWU7CiAJCX0KIAl9CiAJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiJXMoKTogbWFwcGVkICVkIC0+ICVkLCBjb29raWUgJWQsIHJxICVwXG4iLAotCQlfX2Z1bmNfXywgaG9zdC0+c2dfbGVuLCByZXQsIGhvc3QtPmNvb2tpZSwgaG9zdC0+bXJxKTsKKwkJX19mdW5jX18sIGhvc3QtPnNnX2xlbiwgcmV0LCBjb29raWUsIGhvc3QtPm1ycSk7CiAKLQlpZiAoIWhvc3QtPmRlc2MpIHsKK3BpbzoKKwlpZiAoIWRlc2MpIHsKIAkJLyogRE1BIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFBJTyAqLwogCQlpZiAocmV0ID49IDApCiAJCQlyZXQgPSAtRUlPOwpAQCAtNTI1LDMwICs5NDEsMjIgQEAKIAkJZGV2X3dhcm4oJmhvc3QtPnBkZXYtPmRldiwKIAkJCSAiRE1BIGZhaWxlZDogJWQsIGZhbGxpbmcgYmFjayB0byBQSU9cbiIsIHJldCk7CiAJCXRtaW9fbW1jX2VuYWJsZV9kbWEoaG9zdCwgZmFsc2UpOwotCQlyZXNldChob3N0KTsKLQkJLyogRmFpbCB0aGlzIHJlcXVlc3QsIGxldCBhYm92ZSBsYXllcnMgcmVjb3ZlciAqLwotCQlob3N0LT5tcnEtPmNtZC0+ZXJyb3IgPSByZXQ7Ci0JCXRtaW9fbW1jX2ZpbmlzaF9yZXF1ZXN0KGhvc3QpOwogCX0KIAogCWRldl9kYmcoJmhvc3QtPnBkZXYtPmRldiwgIiVzKCk6IGRlc2MgJXAsIGNvb2tpZSAlZFxuIiwgX19mdW5jX18sCi0JCWRlc2MsIGhvc3QtPmNvb2tpZSk7Ci0KLQlyZXR1cm4gcmV0ID4gMCA/IDAgOiByZXQ7CisJCWRlc2MsIGNvb2tpZSk7CiB9CiAKLXN0YXRpYyBpbnQgdG1pb19tbWNfc3RhcnRfZG1hKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LAorc3RhdGljIHZvaWQgdG1pb19tbWNfc3RhcnRfZG1hKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LAogCQkJICAgICAgIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKIHsKIAlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSB7CiAJCWlmIChob3N0LT5jaGFuX3J4KQotCQkJcmV0dXJuIHRtaW9fbW1jX3N0YXJ0X2RtYV9yeChob3N0KTsKKwkJCXRtaW9fbW1jX3N0YXJ0X2RtYV9yeChob3N0KTsKIAl9IGVsc2UgewogCQlpZiAoaG9zdC0+Y2hhbl90eCkKLQkJCXJldHVybiB0bWlvX21tY19zdGFydF9kbWFfdHgoaG9zdCk7CisJCQl0bWlvX21tY19zdGFydF9kbWFfdHgoaG9zdCk7CiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHRtaW9faXNzdWVfdGFza2xldF9mbih1bnNpZ25lZCBsb25nIHByaXYpCkBAIC01NjIsNiArOTcwLDEyIEBACiBzdGF0aWMgdm9pZCB0bWlvX3Rhc2tsZXRfZm4odW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QgPSAoc3RydWN0IHRtaW9fbW1jX2hvc3QgKilhcmc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIWhvc3QtPmRhdGEpCisJCWdvdG8gb3V0OwogCiAJaWYgKGhvc3QtPmRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKIAkJZG1hX3VubWFwX3NnKCZob3N0LT5wZGV2LT5kZXYsIGhvc3QtPnNnX3B0ciwgaG9zdC0+ZG1hX3NnbGVuLApAQCAtNTcxLDYgKzk4NSw4IEBACiAJCQkgICAgIERNQV9UT19ERVZJQ0UpOwogCiAJdG1pb19tbWNfZG9fZGF0YV9pcnEoaG9zdCk7CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogfQogCiAvKiBJdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gbWFrZSBmaWx0ZXIgTUZEIHNwZWNpZmljICovCkBAIC01ODQsOSArMTAwMCw2IEBACiBzdGF0aWMgdm9pZCB0bWlvX21tY19yZXF1ZXN0X2RtYShzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCwKIAkJCQkgc3RydWN0IHRtaW9fbW1jX2RhdGEgKnBkYXRhKQogewotCWhvc3QtPmNvb2tpZSA9IC1FSU5WQUw7Ci0JaG9zdC0+ZGVzYyA9IE5VTEw7Ci0KIAkvKiBXZSBjYW4gb25seSBlaXRoZXIgdXNlIERNQSBmb3IgYm90aCBUeCBhbmQgUnggb3Igbm90IHVzZSBpdCBhdCBhbGwgKi8KIAlpZiAocGRhdGEtPmRtYSkgewogCQlkbWFfY2FwX21hc2tfdCBtYXNrOwpAQCAtNjMyLDE1ICsxMDQ1LDE1IEBACiAJCWhvc3QtPmNoYW5fcnggPSBOVUxMOwogCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4pOwogCX0KLQotCWhvc3QtPmNvb2tpZSA9IC1FSU5WQUw7Ci0JaG9zdC0+ZGVzYyA9IE5VTEw7CiB9CiAjZWxzZQotc3RhdGljIGludCB0bWlvX21tY19zdGFydF9kbWEoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QsCitzdGF0aWMgdm9pZCB0bWlvX2NoZWNrX2JvdW5jZV9idWZmZXIoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QpCit7Cit9CisKK3N0YXRpYyB2b2lkIHRtaW9fbW1jX3N0YXJ0X2RtYShzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCwKIAkJCSAgICAgICBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHRtaW9fbW1jX3JlcXVlc3RfZG1hKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LApAQCAtNjgyLDcgKzEwOTUsOSBAQAogCXNkX2N0cmxfd3JpdGUxNihob3N0LCBDVExfU0RfWEZFUl9MRU4sIGRhdGEtPmJsa3N6KTsKIAlzZF9jdHJsX3dyaXRlMTYoaG9zdCwgQ1RMX1hGRVJfQkxLX0NPVU5ULCBkYXRhLT5ibG9ja3MpOwogCi0JcmV0dXJuIHRtaW9fbW1jX3N0YXJ0X2RtYShob3N0LCBkYXRhKTsKKwl0bWlvX21tY19zdGFydF9kbWEoaG9zdCwgZGF0YSk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyogUHJvY2VzcyByZXF1ZXN0cyBmcm9tIHRoZSBNTUMgbGF5ZXIgKi8KQEAgLTY5NCw2ICsxMTA5LDggQEAKIAlpZiAoaG9zdC0+bXJxKQogCQlwcl9kZWJ1ZygicmVxdWVzdCBub3QgbnVsbFxuIik7CiAKKwlob3N0LT5sYXN0X3JlcV90cyA9IGppZmZpZXM7CisJd21iKCk7CiAJaG9zdC0+bXJxID0gbXJxOwogCiAJaWYgKG1ycS0+ZGF0YSkgewpAQCAtNzAzLDEwICsxMTIwLDE0IEBACiAJfQogCiAJcmV0ID0gdG1pb19tbWNfc3RhcnRfY29tbWFuZChob3N0LCBtcnEtPmNtZCk7Ci0JaWYgKCFyZXQpCisJaWYgKCFyZXQpIHsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZob3N0LT5kZWxheWVkX3Jlc2V0X3dvcmssCisJCQkJICAgICAgbXNlY3NfdG9famlmZmllcygyMDAwKSk7CiAJCXJldHVybjsKKwl9CiAKIGZhaWw6CisJaG9zdC0+bXJxID0gTlVMTDsKIAltcnEtPmNtZC0+ZXJyb3IgPSByZXQ7CiAJbW1jX3JlcXVlc3RfZG9uZShtbWMsIG1ycSk7CiB9CkBAIC03ODAsNiArMTIwMSw3IEBACiAJLnNldF9pb3MJPSB0bWlvX21tY19zZXRfaW9zLAogCS5nZXRfcm8gICAgICAgICA9IHRtaW9fbW1jX2dldF9ybywKIAkuZ2V0X2NkCQk9IHRtaW9fbW1jX2dldF9jZCwKKwkuZW5hYmxlX3NkaW9faXJxID0gdG1pb19tbWNfZW5hYmxlX3NkaW9faXJxLAogfTsKIAogI2lmZGVmIENPTkZJR19QTQpAQCAtODY0LDEwICsxMjg2LDE1IEBACiAJCWdvdG8gaG9zdF9mcmVlOwogCiAJbW1jLT5vcHMgPSAmdG1pb19tbWNfb3BzOwotCW1tYy0+Y2FwcyA9IE1NQ19DQVBfNF9CSVRfREFUQTsKLQltbWMtPmNhcHMgfD0gcGRhdGEtPmNhcGFiaWxpdGllczsKKwltbWMtPmNhcHMgPSBNTUNfQ0FQXzRfQklUX0RBVEEgfCBwZGF0YS0+Y2FwYWJpbGl0aWVzOwogCW1tYy0+Zl9tYXggPSBwZGF0YS0+aGNsazsKIAltbWMtPmZfbWluID0gbW1jLT5mX21heCAvIDUxMjsKKwltbWMtPm1heF9zZWdzID0gMzI7CisJbW1jLT5tYXhfYmxrX3NpemUgPSA1MTI7CisJbW1jLT5tYXhfYmxrX2NvdW50ID0gKFBBR0VfQ0FDSEVfU0laRSAvIG1tYy0+bWF4X2Jsa19zaXplKSAqCisJCW1tYy0+bWF4X3NlZ3M7CisJbW1jLT5tYXhfcmVxX3NpemUgPSBtbWMtPm1heF9ibGtfc2l6ZSAqIG1tYy0+bWF4X2Jsa19jb3VudDsKKwltbWMtPm1heF9zZWdfc2l6ZSA9IG1tYy0+bWF4X3JlcV9zaXplOwogCWlmIChwZGF0YS0+b2NyX21hc2spCiAJCW1tYy0+b2NyX2F2YWlsID0gcGRhdGEtPm9jcl9tYXNrOwogCWVsc2UKQEAgLTg5MCwxMiArMTMxNywxOSBAQAogCQlnb3RvIGNlbGxfZGlzYWJsZTsKIAogCWRpc2FibGVfbW1jX2lycXMoaG9zdCwgVE1JT19NQVNLX0FMTCk7CisJaWYgKHBkYXRhLT5mbGFncyAmIFRNSU9fTU1DX1NESU9fSVJRKQorCQl0bWlvX21tY19lbmFibGVfc2Rpb19pcnEobW1jLCAwKTsKIAogCXJldCA9IHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgdG1pb19tbWNfaXJxLCBJUlFGX0RJU0FCTEVEIHwKIAkJSVJRRl9UUklHR0VSX0ZBTExJTkcsIGRldl9uYW1lKCZkZXYtPmRldiksIGhvc3QpOwogCWlmIChyZXQpCiAJCWdvdG8gY2VsbF9kaXNhYmxlOwogCisJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmxvY2spOworCisJLyogSW5pdCBkZWxheWVkIHdvcmsgZm9yIHJlcXVlc3QgdGltZW91dHMgKi8KKwlJTklUX0RFTEFZRURfV09SSygmaG9zdC0+ZGVsYXllZF9yZXNldF93b3JrLCB0bWlvX21tY19yZXNldF93b3JrKTsKKwogCS8qIFNlZSBpZiB3ZSBhbHNvIGdldCBETUEgKi8KIAl0bWlvX21tY19yZXF1ZXN0X2RtYShob3N0LCBwZGF0YSk7CiAKQEAgLTkzNCw2ICsxMzY4LDcgQEAKIAlpZiAobW1jKSB7CiAJCXN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAkJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaG9zdC0+ZGVsYXllZF9yZXNldF93b3JrKTsKIAkJdG1pb19tbWNfcmVsZWFzZV9kbWEoaG9zdCk7CiAJCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CiAJCWlmIChjZWxsLT5kaXNhYmxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5oIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmVkYzc4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyOCArMCwwIEBACi0vKiBEZWZpbml0b25zIGZvciB1c2Ugd2l0aCB0aGUgdG1pb19tbWMuYwotICoKLSAqIChjKSAyMDA0IElhbiBNb2x0b24gPHNweXJvQGYycy5jb20+Ci0gKiAoYykgMjAwNyBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+Ci0KLSNkZWZpbmUgQ1RMX1NEX0NNRCAweDAwCi0jZGVmaW5lIENUTF9BUkdfUkVHIDB4MDQKLSNkZWZpbmUgQ1RMX1NUT1BfSU5URVJOQUxfQUNUSU9OIDB4MDgKLSNkZWZpbmUgQ1RMX1hGRVJfQkxLX0NPVU5UIDB4YQotI2RlZmluZSBDVExfUkVTUE9OU0UgMHgwYwotI2RlZmluZSBDVExfU1RBVFVTIDB4MWMKLSNkZWZpbmUgQ1RMX0lSUV9NQVNLIDB4MjAKLSNkZWZpbmUgQ1RMX1NEX0NBUkRfQ0xLX0NUTCAweDI0Ci0jZGVmaW5lIENUTF9TRF9YRkVSX0xFTiAweDI2Ci0jZGVmaW5lIENUTF9TRF9NRU1fQ0FSRF9PUFQgMHgyOAotI2RlZmluZSBDVExfU0RfRVJST1JfREVUQUlMX1NUQVRVUyAweDJjCi0jZGVmaW5lIENUTF9TRF9EQVRBX1BPUlQgMHgzMAotI2RlZmluZSBDVExfVFJBTlNBQ1RJT05fQ1RMIDB4MzQKLSNkZWZpbmUgQ1RMX1JFU0VUX1NEIDB4ZTAKLSNkZWZpbmUgQ1RMX1NESU9fUkVHUyAweDEwMAotI2RlZmluZSBDVExfQ0xLX0FORF9XQUlUX0NUTCAweDEzOAotI2RlZmluZSBDVExfUkVTRVRfU0RJTyAweDFlMAotCi0vKiBEZWZpbml0aW9ucyBmb3IgdmFsdWVzIHRoZSBDVFJMX1NUQVRVUyByZWdpc3RlciBjYW4gdGFrZS4gKi8KLSNkZWZpbmUgVE1JT19TVEFUX0NNRFJFU1BFTkQgICAgMHgwMDAwMDAwMQotI2RlZmluZSBUTUlPX1NUQVRfREFUQUVORCAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFRNSU9fU1RBVF9DQVJEX1JFTU9WRSAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgVE1JT19TVEFUX0NBUkRfSU5TRVJUICAgMHgwMDAwMDAxMAotI2RlZmluZSBUTUlPX1NUQVRfU0lHU1RBVEUgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFRNSU9fU1RBVF9XUlBST1RFQ1QgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgVE1JT19TVEFUX0NBUkRfUkVNT1ZFX0EgMHgwMDAwMDEwMAotI2RlZmluZSBUTUlPX1NUQVRfQ0FSRF9JTlNFUlRfQSAweDAwMDAwMjAwCi0jZGVmaW5lIFRNSU9fU1RBVF9TSUdTVEFURV9BICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgVE1JT19TVEFUX0NNRF9JRFhfRVJSICAgMHgwMDAxMDAwMAotI2RlZmluZSBUTUlPX1NUQVRfQ1JDRkFJTCAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIFRNSU9fU1RBVF9TVE9QQklUX0VSUiAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgVE1JT19TVEFUX0RBVEFUSU1FT1VUICAgMHgwMDA4MDAwMAotI2RlZmluZSBUTUlPX1NUQVRfUlhPVkVSRkxPVyAgICAweDAwMTAwMDAwCi0jZGVmaW5lIFRNSU9fU1RBVF9UWFVOREVSUlVOICAgIDB4MDAyMDAwMDAKLSNkZWZpbmUgVE1JT19TVEFUX0NNRFRJTUVPVVQgICAgMHgwMDQwMDAwMAotI2RlZmluZSBUTUlPX1NUQVRfUlhSRFkgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIFRNSU9fU1RBVF9UWFJRICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgVE1JT19TVEFUX0lMTF9GVU5DICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBUTUlPX1NUQVRfQ01EX0JVU1kgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFRNSU9fU1RBVF9JTExfQUNDRVNTICAgIDB4ODAwMDAwMDAKLQotLyogRGVmaW5lIHNvbWUgSVJRIG1hc2tzICovCi0vKiBUaGlzIGlzIHRoZSBtYXNrIHVzZWQgYXQgcmVzZXQgYnkgdGhlIGNoaXAgKi8KLSNkZWZpbmUgVE1JT19NQVNLX0FMTCAgICAgICAgICAgMHg4MzdmMDMxZAotI2RlZmluZSBUTUlPX01BU0tfUkVBRE9QICAoVE1JT19TVEFUX1JYUkRZIHwgVE1JT19TVEFUX0RBVEFFTkQpCi0jZGVmaW5lIFRNSU9fTUFTS19XUklURU9QIChUTUlPX1NUQVRfVFhSUSB8IFRNSU9fU1RBVF9EQVRBRU5EKQotI2RlZmluZSBUTUlPX01BU0tfQ01EICAgICAoVE1JT19TVEFUX0NNRFJFU1BFTkQgfCBUTUlPX1NUQVRfQ01EVElNRU9VVCB8IFwKLQkJVE1JT19TVEFUX0NBUkRfUkVNT1ZFIHwgVE1JT19TVEFUX0NBUkRfSU5TRVJUKQotI2RlZmluZSBUTUlPX01BU0tfSVJRICAgICAoVE1JT19NQVNLX1JFQURPUCB8IFRNSU9fTUFTS19XUklURU9QIHwgVE1JT19NQVNLX0NNRCkKLQotCi0jZGVmaW5lIGVuYWJsZV9tbWNfaXJxcyhob3N0LCBpKSBcCi0JZG8geyBcCi0JCXUzMiBtYXNrO1wKLQkJbWFzayAgPSBzZF9jdHJsX3JlYWQzMigoaG9zdCksIENUTF9JUlFfTUFTSyk7IFwKLQkJbWFzayAmPSB+KChpKSAmIFRNSU9fTUFTS19JUlEpOyBcCi0JCXNkX2N0cmxfd3JpdGUzMigoaG9zdCksIENUTF9JUlFfTUFTSywgbWFzayk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIGRpc2FibGVfbW1jX2lycXMoaG9zdCwgaSkgXAotCWRvIHsgXAotCQl1MzIgbWFzaztcCi0JCW1hc2sgID0gc2RfY3RybF9yZWFkMzIoKGhvc3QpLCBDVExfSVJRX01BU0spOyBcCi0JCW1hc2sgfD0gKChpKSAmIFRNSU9fTUFTS19JUlEpOyBcCi0JCXNkX2N0cmxfd3JpdGUzMigoaG9zdCksIENUTF9JUlFfTUFTSywgbWFzayk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIGFja19tbWNfaXJxcyhob3N0LCBpKSBcCi0JZG8geyBcCi0JCXNkX2N0cmxfd3JpdGUzMigoaG9zdCksIENUTF9TVEFUVVMsIH4oaSkpOyBcCi0JfSB3aGlsZSAoMCkKLQotCi1zdHJ1Y3QgdG1pb19tbWNfaG9zdCB7Ci0Jdm9pZCBfX2lvbWVtICpjdGw7Ci0JdW5zaWduZWQgbG9uZyBidXNfc2hpZnQ7Ci0Jc3RydWN0IG1tY19jb21tYW5kICAgICAgKmNtZDsKLQlzdHJ1Y3QgbW1jX3JlcXVlc3QgICAgICAqbXJxOwotCXN0cnVjdCBtbWNfZGF0YSAgICAgICAgICpkYXRhOwotCXN0cnVjdCBtbWNfaG9zdCAgICAgICAgICptbWM7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgaXJxOwotCi0JLyogQ2FsbGJhY2tzIGZvciBjbG9jayAvIHBvd2VyIGNvbnRyb2wgKi8KLQl2b2lkICgqc2V0X3B3cikoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaG9zdCwgaW50IHN0YXRlKTsKLQl2b2lkICgqc2V0X2Nsa19kaXYpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmhvc3QsIGludCBzdGF0ZSk7Ci0KLQkvKiBwaW8gcmVsYXRlZCBzdHVmZiAqLwotCXN0cnVjdCBzY2F0dGVybGlzdCAgICAgICpzZ19wdHI7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgc2dfbGVuOwotCXVuc2lnbmVkIGludCAgICAgICAgICAgIHNnX29mZjsKLQotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0KLQkvKiBETUEgc3VwcG9ydCAqLwotCXN0cnVjdCBkbWFfY2hhbgkJKmNoYW5fcng7Ci0Jc3RydWN0IGRtYV9jaGFuCQkqY2hhbl90eDsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJZG1hX2NvbXBsZXRlOwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlkbWFfaXNzdWU7Ci0jaWZkZWYgQ09ORklHX1RNSU9fTU1DX0RNQQotCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYzsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICBkbWFfc2dsZW47Ci0JZG1hX2Nvb2tpZV90CQljb29raWU7Ci0jZW5kaWYKLX07Ci0KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi1zdGF0aWMgaW5saW5lIHUxNiBzZF9jdHJsX3JlYWQxNihzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCwgaW50IGFkZHIpCi17Ci0JcmV0dXJuIHJlYWR3KGhvc3QtPmN0bCArIChhZGRyIDw8IGhvc3QtPmJ1c19zaGlmdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2RfY3RybF9yZWFkMTZfcmVwKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LCBpbnQgYWRkciwKLQkJdTE2ICpidWYsIGludCBjb3VudCkKLXsKLQlyZWFkc3coaG9zdC0+Y3RsICsgKGFkZHIgPDwgaG9zdC0+YnVzX3NoaWZ0KSwgYnVmLCBjb3VudCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHNkX2N0cmxfcmVhZDMyKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LCBpbnQgYWRkcikKLXsKLQlyZXR1cm4gcmVhZHcoaG9zdC0+Y3RsICsgKGFkZHIgPDwgaG9zdC0+YnVzX3NoaWZ0KSkgfAotCSAgICAgICByZWFkdyhob3N0LT5jdGwgKyAoKGFkZHIgKyAyKSA8PCBob3N0LT5idXNfc2hpZnQpKSA8PCAxNjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNkX2N0cmxfd3JpdGUxNihzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCwgaW50IGFkZHIsCi0JCXUxNiB2YWwpCi17Ci0Jd3JpdGV3KHZhbCwgaG9zdC0+Y3RsICsgKGFkZHIgPDwgaG9zdC0+YnVzX3NoaWZ0KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZF9jdHJsX3dyaXRlMTZfcmVwKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LCBpbnQgYWRkciwKLQkJdTE2ICpidWYsIGludCBjb3VudCkKLXsKLQl3cml0ZXN3KGhvc3QtPmN0bCArIChhZGRyIDw8IGhvc3QtPmJ1c19zaGlmdCksIGJ1ZiwgY291bnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2RfY3RybF93cml0ZTMyKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LCBpbnQgYWRkciwKLQkJdTMyIHZhbCkKLXsKLQl3cml0ZXcodmFsLCBob3N0LT5jdGwgKyAoYWRkciA8PCBob3N0LT5idXNfc2hpZnQpKTsKLQl3cml0ZXcodmFsID4+IDE2LCBob3N0LT5jdGwgKyAoKGFkZHIgKyAyKSA8PCBob3N0LT5idXNfc2hpZnQpKTsKLX0KLQotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bWlvX21tY19pbml0X3NnKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LAotCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKLXsKLQlob3N0LT5zZ19sZW4gPSBkYXRhLT5zZ19sZW47Ci0JaG9zdC0+c2dfcHRyID0gZGF0YS0+c2c7Ci0JaG9zdC0+c2dfb2ZmID0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdG1pb19tbWNfbmV4dF9zZyhzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCkKLXsKLQlob3N0LT5zZ19wdHIgPSBzZ19uZXh0KGhvc3QtPnNnX3B0cik7Ci0JaG9zdC0+c2dfb2ZmID0gMDsKLQlyZXR1cm4gLS1ob3N0LT5zZ19sZW47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY2hhciAqdG1pb19tbWNfa21hcF9hdG9taWMoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQl1bnNpZ25lZCBsb25nICpmbGFncykKLXsKLQlsb2NhbF9pcnFfc2F2ZSgqZmxhZ3MpOwotCXJldHVybiBrbWFwX2F0b21pYyhzZ19wYWdlKHNnKSwgS01fQklPX1NSQ19JUlEpICsgc2ctPm9mZnNldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHRtaW9fbW1jX2t1bm1hcF9hdG9taWModm9pZCAqdmlydCwKLQl1bnNpZ25lZCBsb25nICpmbGFncykKLXsKLQlrdW5tYXBfYXRvbWljKHZpcnQsIEtNX0JJT19TUkNfSVJRKTsKLQlsb2NhbF9pcnFfcmVzdG9yZSgqZmxhZ3MpOwotfQotCi0jaWZkZWYgQ09ORklHX01NQ19ERUJVRwotCi0jZGVmaW5lIFNUQVRVU19UT19URVhUKGEpIFwKLQlkbyB7IFwKLQkJaWYgKHN0YXR1cyAmIFRNSU9fU1RBVF8jI2EpIFwKLQkJCXByaW50aygjYSk7IFwKLQl9IHdoaWxlICgwKQotCi12b2lkIHByX2RlYnVnX3N0YXR1cyh1MzIgc3RhdHVzKQotewotCXByaW50ayhLRVJOX0RFQlVHICJzdGF0dXM6ICUwOHggPSAiLCBzdGF0dXMpOwotCVNUQVRVU19UT19URVhUKENBUkRfUkVNT1ZFKTsKLQlTVEFUVVNfVE9fVEVYVChDQVJEX0lOU0VSVCk7Ci0JU1RBVFVTX1RPX1RFWFQoU0lHU1RBVEUpOwotCVNUQVRVU19UT19URVhUKFdSUFJPVEVDVCk7Ci0JU1RBVFVTX1RPX1RFWFQoQ0FSRF9SRU1PVkVfQSk7Ci0JU1RBVFVTX1RPX1RFWFQoQ0FSRF9JTlNFUlRfQSk7Ci0JU1RBVFVTX1RPX1RFWFQoU0lHU1RBVEVfQSk7Ci0JU1RBVFVTX1RPX1RFWFQoQ01EX0lEWF9FUlIpOwotCVNUQVRVU19UT19URVhUKFNUT1BCSVRfRVJSKTsKLQlTVEFUVVNfVE9fVEVYVChJTExfRlVOQyk7Ci0JU1RBVFVTX1RPX1RFWFQoQ01EX0JVU1kpOwotCVNUQVRVU19UT19URVhUKENNRFJFU1BFTkQpOwotCVNUQVRVU19UT19URVhUKERBVEFFTkQpOwotCVNUQVRVU19UT19URVhUKENSQ0ZBSUwpOwotCVNUQVRVU19UT19URVhUKERBVEFUSU1FT1VUKTsKLQlTVEFUVVNfVE9fVEVYVChDTURUSU1FT1VUKTsKLQlTVEFUVVNfVE9fVEVYVChSWE9WRVJGTE9XKTsKLQlTVEFUVVNfVE9fVEVYVChUWFVOREVSUlVOKTsKLQlTVEFUVVNfVE9fVEVYVChSWFJEWSk7Ci0JU1RBVFVTX1RPX1RFWFQoVFhSUSk7Ci0JU1RBVFVTX1RPX1RFWFQoSUxMX0FDQ0VTUyk7Ci0JcHJpbnRrKCJcbiIpOwotfQotCi0jZWxzZQotI2RlZmluZSBwcl9kZWJ1Z19zdGF0dXMocykgIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY2hhci5jIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCmluZGV4IGY1MTFkZDEuLmVlNGJiMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNoYXIuYworKysgYi9kcml2ZXJzL210ZC9tdGRjaGFyLmMKQEAgLTExMzQsNyArMTEzNCw3IEBACiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbXRkX2lub2RlZnNfbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCiAJCQkJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSkKIHsKLQlyZXR1cm4gbW91bnRfcHNldWRvKGZzX3R5cGUsICJtdGRfaW5vZGU6IiwgTlVMTCwgTVREX0lOT0RFX0ZTX01BR0lDKTsKKwlyZXR1cm4gbW91bnRfcHNldWRvKGZzX3R5cGUsICJtdGRfaW5vZGU6IiwgTlVMTCwgTlVMTCwgTVREX0lOT0RFX0ZTX01BR0lDKTsKIH0KIAogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG10ZF9pbm9kZWZzX3R5cGUgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRvb3BzLmMgYi9kcml2ZXJzL210ZC9tdGRvb3BzLmMKaW5kZXggMWVlNzJmMy4uYzk0ODE1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkb29wcy5jCisrKyBiL2RyaXZlcnMvbXRkL210ZG9vcHMuYwpAQCAtMzA3LDYgKzMwNywxMSBAQAogCXVuc2lnbmVkIGxvbmcgbDFfY3B5LCBsMl9jcHk7CiAJY2hhciAqZHN0OwogCisJaWYgKHJlYXNvbiAhPSBLTVNHX0RVTVBfT09QUyAmJgorCSAgICByZWFzb24gIT0gS01TR19EVU1QX1BBTklDICYmCisJICAgIHJlYXNvbiAhPSBLTVNHX0RVTVBfS0VYRUMpCisJCXJldHVybjsKKwogCS8qIE9ubHkgZHVtcCBvb3BzZXMgaWYgZHVtcF9vb3BzIGlzIHNldCAqLwogCWlmIChyZWFzb24gPT0gS01TR19EVU1QX09PUFMgJiYgIWR1bXBfb29wcykKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKaW5kZXggMWY3NWExYi4uMzFiZjM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCkBAIC04MjEsNyArODIxLDcgQEAKICAqCiAgKiBXYWl0IGZvciBjb21tYW5kIGRvbmUuIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIG5hbmRfd2FpdCB1c2VkIHdoZW4KICAqIHdlIGFyZSBpbiBpbnRlcnJ1cHQgY29udGV4dC4gTWF5IGhhcHBlbiB3aGVuIGluIHBhbmljIGFuZCB0cnlpbmcgdG8gd3JpdGUKLSAqIGFuIG9vcHMgdHJvdWdoIG10ZG9vcHMuCisgKiBhbiBvb3BzIHRocm91Z2ggbXRkb29wcy4KICAqLwogc3RhdGljIHZvaWQgcGFuaWNfbmFuZF93YWl0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgdGltZW8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCAzZmRhMjRhLi40YzhiZmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTE5NDQsMTkgKzE5NDQsMTIgQEAKIGNvbmZpZyBGRUMKIAlib29sICJGRUMgZXRoZXJuZXQgY29udHJvbGxlciAob2YgQ29sZEZpcmUgYW5kIHNvbWUgaS5NWCBDUFVzKSIKIAlkZXBlbmRzIG9uIE01MjN4IHx8IE01Mjd4IHx8IE01MjcyIHx8IE01Mjh4IHx8IE01MjB4IHx8IE01MzJ4IHx8IFwKLQkJTUFDSF9NWDI3IHx8IEFSQ0hfTVgzNSB8fCBBUkNIX01YMjUgfHwgQVJDSF9NWDUKKwkJTUFDSF9NWDI3IHx8IEFSQ0hfTVgzNSB8fCBBUkNIX01YMjUgfHwgQVJDSF9NWDUgfHwgU09DX0lNWDI4CiAJc2VsZWN0IFBIWUxJQgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBidWlsdC1pbiAxMC8xMDAgRmFzdCBldGhlcm5ldAogCSAgY29udHJvbGxlciBvbiBzb21lIE1vdG9yb2xhIENvbGRGaXJlIGFuZCBGcmVlc2NhbGUgaS5NWCBwcm9jZXNzb3JzLgogCi1jb25maWcgRkVDMgotCWJvb2wgIlNlY29uZCBGRUMgZXRoZXJuZXQgY29udHJvbGxlciAob24gc29tZSBDb2xkRmlyZSBDUFVzKSIKLQlkZXBlbmRzIG9uIEZFQwotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBzZWNvbmQgYnVpbHQtaW4gMTAvMTAwIEZhc3QKLQkgIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gc29tZSBNb3Rvcm9sYSBDb2xkRmlyZSBwcm9jZXNzb3JzLgotCiBjb25maWcgRkVDX01QQzUyeHgKIAl0cmlzdGF0ZSAiTVBDNTJ4eCBGRUMgZHJpdmVyIgogCWRlcGVuZHMgb24gUFBDX01QQzUyeHggJiYgUFBDX0JFU1RDT01NCkBAIC0yOTcwLDYgKzI5NjMsNyBAQAogY29uZmlnIFhFTl9ORVRERVZfRlJPTlRFTkQKIAl0cmlzdGF0ZSAiWGVuIG5ldHdvcmsgZGV2aWNlIGZyb250ZW5kIGRyaXZlciIKIAlkZXBlbmRzIG9uIFhFTgorCXNlbGVjdCBYRU5fWEVOQlVTX0ZST05URU5ECiAJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhlIG5ldHdvcmsgZGV2aWNlIGZyb250ZW5kIGRyaXZlciBhbGxvd3MgdGhlIGtlcm5lbCB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmZpbl9tYWMuYyBiL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKaW5kZXggY2UxZTVlOS4uMGI5ZmM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmZpbl9tYWMuYworKysgYi9kcml2ZXJzL25ldC9iZmluX21hYy5jCkBAIC04LDYgKzgsMTEgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjEiCisjZGVmaW5lIERSVl9ERVNDCSJCbGFja2ZpbiBvbi1jaGlwIEV0aGVybmV0IE1BQyBkcml2ZXIiCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTQxLDEyICs0Niw3IEBACiAKICNpbmNsdWRlICJiZmluX21hYy5oIgogCi0jZGVmaW5lIERSVl9OQU1FCSJiZmluX21hYyIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMSIKLSNkZWZpbmUgRFJWX0FVVEhPUgkiQnJ5YW4gV3UsIEx1a2UgWWFuZyIKLSNkZWZpbmUgRFJWX0RFU0MJIkJsYWNrZmluIG9uLWNoaXAgRXRoZXJuZXQgTUFDIGRyaXZlciIKLQotTU9EVUxFX0FVVEhPUihEUlZfQVVUSE9SKTsKK01PRFVMRV9BVVRIT1IoIkJyeWFuIFd1LCBMdWtlIFlhbmciKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQyk7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmJmaW5fbWFjIik7CkBAIC0xODksOCArMTg5LDcgQEAKIAkJLyogYWxsb2NhdGUgYSBuZXcgc2tiIGZvciBuZXh0IHRpbWUgcmVjZWl2ZSAqLwogCQluZXdfc2tiID0gZGV2X2FsbG9jX3NrYihQS1RfQlVGX1NaICsgTkVUX0lQX0FMSUdOKTsKIAkJaWYgKCFuZXdfc2tiKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgRFJWX05BTUUKLQkJCSAgICAgICAiOiBpbml0OiBsb3cgb24gbWVtIC0gcGFja2V0IGRyb3BwZWRcbiIpOworCQkJcHJfbm90aWNlKCJpbml0OiBsb3cgb24gbWVtIC0gcGFja2V0IGRyb3BwZWRcbiIpOwogCQkJZ290byBpbml0X2Vycm9yOwogCQl9CiAJCXNrYl9yZXNlcnZlKG5ld19za2IsIE5FVF9JUF9BTElHTik7CkBAIC0yNDAsNyArMjM5LDcgQEAKIAogaW5pdF9lcnJvcjoKIAlkZXNjX2xpc3RfZnJlZSgpOwotCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBrbWFsbG9jIGZhaWxlZFxuIik7CisJcHJfZXJyKCJrbWFsbG9jIGZhaWxlZFxuIik7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKQEAgLTI1OSw4ICsyNTgsNyBAQAogCXdoaWxlICgoYmZpbl9yZWFkX0VNQUNfU1RBQUREKCkpICYgU1RBQlVTWSkgewogCQl1ZGVsYXkoMSk7CiAJCWlmICh0aW1lb3V0X2NudC0tIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCQkiOiB3YWl0IE1EQy9NRElPIHRyYW5zYWN0aW9uIHRvIGNvbXBsZXRlIHRpbWVvdXRcbiIpOworCQkJcHJfZXJyKCJ3YWl0IE1EQy9NRElPIHRyYW5zYWN0aW9uIHRvIGNvbXBsZXRlIHRpbWVvdXRcbiIpOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAl9CkBAIC0zNTAsOSArMzQ4LDkgQEAKIAkJCQkJb3Btb2RlICY9IH5STUlJXzEwOwogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJCQkiJXM6IEFjayEgIFNwZWVkICglZCkgaXMgbm90IDEwLzEwMCFcbiIsCi0JCQkJCQlEUlZfTkFNRSwgcGh5ZGV2LT5zcGVlZCk7CisJCQkJCW5ldGRldl93YXJuKGRldiwKKwkJCQkJCSJBY2shIFNwZWVkICglZCkgaXMgbm90IDEwLzEwMCFcbiIsCisJCQkJCQlwaHlkZXYtPnNwZWVkKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCWJmaW5fd3JpdGVfRU1BQ19PUE1PREUob3Btb2RlKTsKQEAgLTQxNywxNCArNDE1LDEzIEBACiAKIAkvKiBub3cgd2UgYXJlIHN1cHBvc2VkIHRvIGhhdmUgYSBwcm9wZXIgcGh5ZGV2LCB0byBhdHRhY2ggdG8uLi4gKi8KIAlpZiAoIXBoeWRldikgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogRG9uJ3QgZm91bmQgYW55IHBoeSBkZXZpY2UgYXQgYWxsXG4iLAotCQkJZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJubyBwaHkgZGV2aWNlIGZvdW5kXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKHBoeV9tb2RlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJICYmCiAJCXBoeV9tb2RlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludmFsaWQgcGh5IGludGVyZmFjZSBtb2RlXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgImludmFsaWQgcGh5IGludGVyZmFjZSBtb2RlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00MzIsNyArNDI5LDcgQEAKIAkJCTAsIHBoeV9tb2RlKTsKIAogCWlmIChJU19FUlIocGh5ZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJjb3VsZCBub3QgYXR0YWNoIFBIWVxuIik7CiAJCXJldHVybiBQVFJfRVJSKHBoeWRldik7CiAJfQogCkBAIC00NTMsMTEgKzQ1MCwxMCBAQAogCWxwLT5vbGRfZHVwbGV4ID0gLTE7CiAJbHAtPnBoeWRldiA9IHBoeWRldjsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gIgotCSAgICAgICAiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZCwgbWRjX2Nsaz0lZEh6KG1kY19kaXY9JWQpIgotCSAgICAgICAiQHNjbGs9JWRNSHopXG4iLAotCSAgICAgICBEUlZfTkFNRSwgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxLAotCSAgICAgICBNRENfQ0xLLCBtZGNfZGl2LCBzY2xrLzEwMDAwMDApOworCXByX2luZm8oImF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAiCisJICAgICAgICAiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZCwgbWRjX2Nsaz0lZEh6KG1kY19kaXY9JWQpQHNjbGs9JWRNSHopXG4iLAorCSAgICAgICAgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxLAorCSAgICAgICAgTURDX0NMSywgbWRjX2Rpdiwgc2Nsay8xMDAwMDAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTAyLDcgKzQ5OCw3IEBACiBzdGF0aWMgdm9pZCBiZmluX21hY19ldGh0b29sX2dldGRydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKIHsKLQlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTkFNRSk7CisJc3RyY3B5KGluZm8tPmRyaXZlciwgS0JVSUxEX01PRE5BTUUpOwogCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTik7CiAJc3RyY3B5KGluZm8tPmZ3X3ZlcnNpb24sICJOL0EiKTsKIAlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKCZkZXYtPmRldikpOwpAQCAtNTYyLDcgKzU1OCw3IEBACiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIHNldHVwX3N5c3RlbV9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzZXR1cF9zeXN0ZW1fcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBiZmluX21hY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpOwpAQCAtNTkyLDYgKzU4OCwxMCBAQAogCiAJYmZpbl93cml0ZV9FTUFDX01NQ19DVEwoUlNUQyB8IENST0xMKTsKIAorCS8qIFNldCB2bGFuIHJlZ3MgdG8gbGV0IDE1MjIgYnl0ZXMgbG9uZyBwYWNrZXRzIHBhc3MgdGhyb3VnaCAqLworCWJmaW5fd3JpdGVfRU1BQ19WTEFOMShscC0+dmxhbjFfbWFzayk7CisJYmZpbl93cml0ZV9FTUFDX1ZMQU4yKGxwLT52bGFuMl9tYXNrKTsKKwogCS8qIEluaXRpYWxpemUgdGhlIFRYIERNQSBjaGFubmVsIHJlZ2lzdGVycyAqLwogCWJmaW5fd3JpdGVfRE1BMl9YX0NPVU5UKDApOwogCWJmaW5fd3JpdGVfRE1BMl9YX01PRElGWSg0KTsKQEAgLTgyNyw4ICs4MjcsNyBAQAogCQl3aGlsZSAoKCEoYmZpbl9yZWFkX0VNQUNfUFRQX0lTVEFUKCkgJiBUWFRMKSkgJiYgKC0tdGltZW91dF9jbnQpKQogCQkJdWRlbGF5KDEpOwogCQlpZiAodGltZW91dF9jbnQgPT0gMCkKLQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkJCQkiOiBmYWlscyB0byB0aW1lc3RhbXAgdGhlIFRYIHBhY2tldFxuIik7CisJCQluZXRkZXZfZXJyKG5ldGRldiwgInRpbWVzdGFtcCB0aGUgVFggcGFja2V0IGZhaWxlZFxuIik7CiAJCWVsc2UgewogCQkJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzOwogCQkJdTY0IG5zOwpAQCAtMTA4Myw4ICsxMDgyLDcgQEAKIAkgKiB3ZSB3aGljaCBjYXNlIHdlIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQKIAkgKi8KIAlpZiAoY3VycmVudF9yeF9wdHItPnN0YXR1cy5zdGF0dXNfd29yZCAmIFJYX0VSUk9SX01BU0spIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFIERSVl9OQU1FCi0JCSAgICAgICAiOiByeDogcmVjZWl2ZSBlcnJvciAtIHBhY2tldCBkcm9wcGVkXG4iKTsKKwkJbmV0ZGV2X25vdGljZShkZXYsICJyeDogcmVjZWl2ZSBlcnJvciAtIHBhY2tldCBkcm9wcGVkXG4iKTsKIAkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEwOTQsOCArMTA5Miw3IEBACiAKIAluZXdfc2tiID0gZGV2X2FsbG9jX3NrYihQS1RfQlVGX1NaICsgTkVUX0lQX0FMSUdOKTsKIAlpZiAoIW5ld19za2IpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFIERSVl9OQU1FCi0JCSAgICAgICAiOiByeDogbG93IG9uIG1lbSAtIHBhY2tldCBkcm9wcGVkXG4iKTsKKwkJbmV0ZGV2X25vdGljZShkZXYsICJyeDogbG93IG9uIG1lbSAtIHBhY2tldCBkcm9wcGVkXG4iKTsKIAkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEyMTMsNyArMTIxMCw3IEBACiAJaW50IHJldDsKIAl1MzIgb3Btb2RlOwogCi0JcHJfZGVidWcoIiVzOiAlc1xuIiwgRFJWX05BTUUsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIFNldCBSWCBETUEgKi8KIAliZmluX3dyaXRlX0RNQTFfTkVYVF9ERVNDX1BUUigmKHJ4X2xpc3RfaGVhZC0+ZGVzY19hKSk7CkBAIC0xMzIzLDcgKzEzMjAsNyBAQAogCXUzMiBzeXNjdGw7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBzZXQgdG8gcHJvbWlzYyBtb2RlXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfaW5mbyhkZXYsICJzZXQgcHJvbWlzYyBtb2RlXG4iKTsKIAkJc3lzY3RsID0gYmZpbl9yZWFkX0VNQUNfT1BNT0RFKCk7CiAJCXN5c2N0bCB8PSBQUjsKIAkJYmZpbl93cml0ZV9FTUFDX09QTU9ERShzeXNjdGwpOwpAQCAtMTM5Myw3ICsxMzkwLDcgQEAKIAkgKiBhZGRyZXNzIHVzaW5nIGlmY29uZmlnIGV0aDAgaHcgZXRoZXIgeHg6eHg6eHg6eHg6eHg6eHgKIAkgKi8KIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBubyB2YWxpZCBldGhlcm5ldCBodyBhZGRyXG4iKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LCAibm8gdmFsaWQgZXRoZXJuZXQgaHcgYWRkclxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTUyNyw2ICsxNTI0LDkgQEAKIAkJZ290byBvdXRfZXJyX21paV9wcm9iZTsKIAl9CiAKKwlscC0+dmxhbjFfbWFzayA9IEVUSF9QXzgwMjFRIHwgbWlpX2J1c19kYXRhLT52bGFuMV9tYXNrOworCWxwLT52bGFuMl9tYXNrID0gRVRIX1BfODAyMVEgfCBtaWlfYnVzX2RhdGEtPnZsYW4yX21hc2s7CisKIAkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgd2l0aCBldGhlcm5ldCB2YWx1ZXMuICovCiAJZXRoZXJfc2V0dXAobmRldik7CiAKQEAgLTE1NTgsNyArMTU1OCw3IEBACiAJYmZpbl9tYWNfaHd0c3RhbXBfaW5pdChuZGV2KTsKIAogCS8qIG5vdywgcHJpbnQgb3V0IHRoZSBjYXJkIGluZm8sIGluIGEgc2hvcnQgZm9ybWF0Li4gKi8KLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMsIFZlcnNpb24gJXNcbiIsIERSVl9ERVNDLCBEUlZfVkVSU0lPTik7CisJbmV0ZGV2X2luZm8obmRldiwgIiVzLCBWZXJzaW9uICVzXG4iLCBEUlZfREVTQywgRFJWX1ZFUlNJT04pOwogCiAJcmV0dXJuIDA7CiAKQEAgLTE2NTAsNyArMTY1MCw3IEBACiAJICogc28gc2V0IHRoZSBHUElPIHBpbnMgdG8gRXRoZXJuZXQgbW9kZQogCSAqLwogCXBpbl9yZXEgPSBtaWlfYnVzX3BkLT5tYWNfcGVyaXBoZXJhbHM7Ci0JcmMgPSBwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdChwaW5fcmVxLCBEUlZfTkFNRSk7CisJcmMgPSBwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdChwaW5fcmVxLCBLQlVJTERfTU9ETkFNRSk7CiAJaWYgKHJjKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlJlcXVlc3RpbmcgcGVyaXBoZXJhbHMgZmFpbGVkIVxuIik7CiAJCXJldHVybiByYzsKQEAgLTE3MzksNyArMTczOSw3IEBACiAJLnJlc3VtZSA9IGJmaW5fbWFjX3Jlc3VtZSwKIAkuc3VzcGVuZCA9IGJmaW5fbWFjX3N1c3BlbmQsCiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSBEUlZfTkFNRSwKKwkJLm5hbWUgPSBLQlVJTERfTU9ETkFNRSwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZmluX21hYy5oIGIvZHJpdmVycy9uZXQvYmZpbl9tYWMuaAppbmRleCBhZWQ2OGJlLi5mODU1OWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZmluX21hYy5oCisrKyBiL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmgKQEAgLTE3LDcgKzE3LDE0IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9iZmluX21hYy5oPgogCisvKgorICogRGlzYWJsZSBoYXJkd2FyZSBjaGVja3N1bSBmb3IgYnVnICM1NjAwIGlmIHdyaXRlYmFjayBjYWNoZSBpcworICogZW5hYmxlZC4gT3RoZXJ3aXplLCBjb3JydXB0ZWQgUlggcGFja2V0IHdpbGwgYmUgc2VudCB1cCBzdGFjaworICogd2l0aG91dCBlcnJvciBtYXJrLgorICovCisjaWZuZGVmIENPTkZJR19CRklOX0VYVE1FTV9XUklURUJBQ0sKICNkZWZpbmUgQkZJTl9NQUNfQ1NVTV9PRkZMT0FECisjZW5kaWYKIAogI2RlZmluZSBUWF9SRUNMQUlNX0pJRkZJRVMgKEhaIC8gNSkKIApAQCAtNjgsNyArNzUsNiBAQAogCSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCi0JdW5zaWduZWQgY2hhciBNYWNbNl07CS8qIE1BQyBhZGRyZXNzIG9mIHRoZSBib2FyZCAqLwogCXNwaW5sb2NrX3QgbG9jazsKIAogCWludCB3b2w7CQkvKiBXYWtlIE9uIExhbiAqLwpAQCAtNzYsNiArODIsOSBAQAogCXN0cnVjdCB0aW1lcl9saXN0IHR4X3JlY2xhaW1fdGltZXI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiAKKwkvKiBEYXRhIGZvciBFTUFDX1ZMQU4xIHJlZ3MgKi8KKwl1MTYgdmxhbjFfbWFzaywgdmxhbjJfbWFzazsKKwogCS8qIE1JSSBhbmQgUEhZIHN0dWZmcyAqLwogCWludCBvbGRfbGluazsgICAgICAgICAgLyogdXNlZCBieSBiZjUzN19hZGp1c3RfbGluayAqLwogCWludCBvbGRfc3BlZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnguaAppbmRleCA3N2Q2YzhkLi5hNmNkMzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmgKQEAgLTYzNiw2ICs2MzYsNyBAQAogCiAjZGVmaW5lIENISVBfTUVUQUwoYnApCQkJKGJwLT5jb21tb24uY2hpcF9pZCAmIDB4MDAwMDBmZjApCiAjZGVmaW5lIENISVBfQk9ORF9JRChicCkJCShicC0+Y29tbW9uLmNoaXBfaWQgJiAweDAwMDAwMDBmKQorI2RlZmluZSBDSElQX1BBUklUWV9FTkFCTEVEKGJwKQkoQ0hJUF9JU19FMShicCkgfHwgQ0hJUF9JU19FMUgoYnApKQogCiAJaW50CQkJZmxhc2hfc2l6ZTsKICNkZWZpbmUgTlZSQU1fMU1CX1NJWkUJCQkweDIwMDAwCS8qIDFNIGJpdCBpbiBieXRlcyAqLwpAQCAtMTQxNCwxMiArMTQxNSwxMiBAQAogCQllbHNlCiAKIC8qIHNraXAgcnggcXVldWUKLSAqIGlmIEZDT0UgbDIgc3VwcG9ydCBpcyBkaWFibGVkIGFuZCB0aGlzIGlzIHRoZSBmY29lIEwyIHF1ZXVlCisgKiBpZiBGQ09FIGwyIHN1cHBvcnQgaXMgZGlzYWJsZWQgYW5kIHRoaXMgaXMgdGhlIGZjb2UgTDIgcXVldWUKICAqLwogI2RlZmluZSBza2lwX3J4X3F1ZXVlKGJwLCBpZHgpCShOT19GQ09FKGJwKSAmJiBJU19GQ09FX0lEWChpZHgpKQogCiAvKiBza2lwIHR4IHF1ZXVlCi0gKiBpZiBGQ09FIGwyIHN1cHBvcnQgaXMgZGlhYmxlZCBhbmQgdGhpcyBpcyB0aGUgZmNvZSBMMiBxdWV1ZQorICogaWYgRkNPRSBsMiBzdXBwb3J0IGlzIGRpc2FibGVkIGFuZCB0aGlzIGlzIHRoZSBmY29lIEwyIHF1ZXVlCiAgKi8KICNkZWZpbmUgc2tpcF90eF9xdWV1ZShicCwgaWR4KQkoTk9fRkNPRShicCkgJiYgSVNfRkNPRV9JRFgoaWR4KSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZHVtcC5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZHVtcC5oCmluZGV4IGRjMThjMjUuLmZiM2ZmN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2R1bXAuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9kdW1wLmgKQEAgLTEsMTAgKzEsMTYgQEAKIC8qIGJueDJ4X2R1bXAuaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAxMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlCisgKiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAuaHRtbCAodGhlICJHUEwiKS4KKyAqCisgKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisgKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyAqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisgKiBjb25zZW50LgogICovCiAKIApAQCAtMTcsNTMgKzIzLDUzIEBACiAjZGVmaW5lIEJOWDJYX0RVTVBfSAogCiAKKworLypkZWZpbml0aW9ucyAqLworI2RlZmluZSBYU1RPUk1fV0FJVFBfQUREUiAgICAweDJiOGE4MAorI2RlZmluZSBUU1RPUk1fV0FJVFBfQUREUiAgICAweDFiOGE4MAorI2RlZmluZSBVU1RPUk1fV0FJVFBfQUREUiAgICAweDMzOGE4MAorI2RlZmluZSBDU1RPUk1fV0FJVFBfQUREUiAgICAweDIzOGE4MAorI2RlZmluZSBUU1RPUk1fQ0FNX01PREUgICAgICAgICAweDFCMTQ0MAorCisjZGVmaW5lIE1BWF9USU1FUl9QRU5ESU5HICAgICAgMjAwCisjZGVmaW5lIFRJTUVSX1NDQU5fRE9OVF9DQVJFICAgMHhGRgorI2RlZmluZSBSSV9FMQkJCTB4MQorI2RlZmluZSBSSV9FMUgJCQkweDIKKyNkZWZpbmUgUklfRTIJCQkweDQKKyNkZWZpbmUgUklfT05MSU5FCQkweDEwMAorI2RlZmluZSBSSV9QQVRIMF9EVU1QCQkweDIwMAorI2RlZmluZSBSSV9QQVRIMV9EVU1QCQkweDQwMAorI2RlZmluZSBSSV9FMV9PRkZMSU5FCQkoUklfRTEpCisjZGVmaW5lIFJJX0UxX09OTElORQkJKFJJX0UxIHwgUklfT05MSU5FKQorI2RlZmluZSBSSV9FMUhfT0ZGTElORQkJKFJJX0UxSCkKKyNkZWZpbmUgUklfRTFIX09OTElORQkJKFJJX0UxSCB8IFJJX09OTElORSkKKyNkZWZpbmUgUklfRTJfT0ZGTElORQkJKFJJX0UyKQorI2RlZmluZSBSSV9FMl9PTkxJTkUJCShSSV9FMiB8IFJJX09OTElORSkKKyNkZWZpbmUgUklfRTFFMUhfT0ZGTElORQkoUklfRTEgfCBSSV9FMUgpCisjZGVmaW5lIFJJX0UxRTFIX09OTElORQkJKFJJX0UxIHwgUklfRTFIIHwgUklfT05MSU5FKQorI2RlZmluZSBSSV9FMUhFMl9PRkZMSU5FCShSSV9FMiB8IFJJX0UxSCkKKyNkZWZpbmUgUklfRTFIRTJfT05MSU5FCQkoUklfRTIgfCBSSV9FMUggfCBSSV9PTkxJTkUpCisjZGVmaW5lIFJJX0UxRTJfT0ZGTElORQkJKFJJX0UyIHwgUklfRTEpCisjZGVmaW5lIFJJX0UxRTJfT05MSU5FCQkoUklfRTIgfCBSSV9FMSB8IFJJX09OTElORSkKKyNkZWZpbmUgUklfQUxMX09GRkxJTkUgICAgICAgICAoUklfRTEgfCBSSV9FMUggfCBSSV9FMikKKyNkZWZpbmUgUklfQUxMX09OTElORSAgICAgICAgICAoUklfRTEgfCBSSV9FMUggfCBSSV9FMiB8IFJJX09OTElORSkKKwogc3RydWN0IGR1bXBfc2lnbiB7CiAJdTMyIHRpbWVfc3RhbXA7CiAJdTMyIGRpYWdfdmVyOwogCXUzMiBncmNfZHVtcF92ZXI7CiB9OwogCi0jZGVmaW5lIFRTVE9STV9XQUlUUF9BRERSCQkweDFiOGE4MAotI2RlZmluZSBDU1RPUk1fV0FJVFBfQUREUgkJMHgyMzhhODAKLSNkZWZpbmUgWFNUT1JNX1dBSVRQX0FERFIJCTB4MmI4YTgwCi0jZGVmaW5lIFVTVE9STV9XQUlUUF9BRERSCQkweDMzOGE4MAotI2RlZmluZSBUU1RPUk1fQ0FNX01PREUJCQkweDFiMTQ0MAotCi0jZGVmaW5lIFJJX0UxCQkJCTB4MQotI2RlZmluZSBSSV9FMUgJCQkJMHgyCi0jZGVmaW5lIFJJX0UyCQkJMHg0Ci0jZGVmaW5lIFJJX09OTElORQkJCTB4MTAwCi0jZGVmaW5lIFJJX1BBVEgwX0RVTVAJCTB4MjAwCi0jZGVmaW5lIFJJX1BBVEgxX0RVTVAJCTB4NDAwCi0jZGVmaW5lIFJJX0UxX09GRkxJTkUJCQkoUklfRTEpCi0jZGVmaW5lIFJJX0UxX09OTElORQkJCShSSV9FMSB8IFJJX09OTElORSkKLSNkZWZpbmUgUklfRTFIX09GRkxJTkUJCQkoUklfRTFIKQotI2RlZmluZSBSSV9FMUhfT05MSU5FCQkJKFJJX0UxSCB8IFJJX09OTElORSkKLSNkZWZpbmUgUklfRTJfT0ZGTElORQkJCShSSV9FMikKLSNkZWZpbmUgUklfRTJfT05MSU5FCQkJKFJJX0UyIHwgUklfT05MSU5FKQotI2RlZmluZSBSSV9FMUUxSF9PRkZMSU5FCQkoUklfRTEgfCBSSV9FMUgpCi0jZGVmaW5lIFJJX0UxRTFIX09OTElORQkJCShSSV9FMSB8IFJJX0UxSCB8IFJJX09OTElORSkKLSNkZWZpbmUgUklfRTFIRTJfT0ZGTElORQkJKFJJX0UyIHwgUklfRTFIKQotI2RlZmluZSBSSV9FMUhFMl9PTkxJTkUJCQkoUklfRTIgfCBSSV9FMUggfCBSSV9PTkxJTkUpCi0jZGVmaW5lIFJJX0UxRTJfT0ZGTElORQkJCShSSV9FMiB8IFJJX0UxKQotI2RlZmluZSBSSV9FMUUyX09OTElORQkJCShSSV9FMiB8IFJJX0UxIHwgUklfT05MSU5FKQotI2RlZmluZSBSSV9BTExfT0ZGTElORQkJCShSSV9FMSB8IFJJX0UxSCB8IFJJX0UyKQotI2RlZmluZSBSSV9BTExfT05MSU5FCQkJKFJJX0UxIHwgUklfRTFIIHwgUklfRTIgfCBSSV9PTkxJTkUpCi0KLSNkZWZpbmUgTUFYX1RJTUVSX1BFTkRJTkcJCTIwMAotI2RlZmluZSBUSU1FUl9TQ0FOX0RPTlRfQ0FSRQkJMHhGRgotCi0KIHN0cnVjdCBkdW1wX2hkciB7Ci0JdTMyCQkgaGRyX3NpemU7CS8qIGluIGR3b3JkcywgZXhjbHVkaW5nIHRoaXMgZmllbGQgKi8KLQlzdHJ1Y3QgZHVtcF9zaWduIGR1bXBfc2lnbjsKLQl1MzIJCSB4c3Rvcm1fd2FpdHA7Ci0JdTMyCQkgdHN0b3JtX3dhaXRwOwotCXUzMgkJIHVzdG9ybV93YWl0cDsKLQl1MzIJCSBjc3Rvcm1fd2FpdHA7Ci0JdTE2CQkgaW5mbzsKLQl1OAkJIGlkbGVfY2hrOwotCXU4CQkgcmVzZXJ2ZWQ7CisJdTMyICBoZHJfc2l6ZTsJLyogaW4gZHdvcmRzLCBleGNsdWRpbmcgdGhpcyBmaWVsZCAqLworCXN0cnVjdCBkdW1wX3NpZ24JZHVtcF9zaWduOworCXUzMiAgeHN0b3JtX3dhaXRwOworCXUzMiAgdHN0b3JtX3dhaXRwOworCXUzMiAgdXN0b3JtX3dhaXRwOworCXUzMiAgY3N0b3JtX3dhaXRwOworCXUxNiAgaW5mbzsKKwl1OCAgIGlkbGVfY2hrOworCXU4ICAgcmVzZXJ2ZWQ7CiB9OwogCiBzdHJ1Y3QgcmVnX2FkZHIgewpAQCAtODAsMjAyICs4NiwxODUgQEAKIAl1MTYgaW5mbzsKIH07CiAKLQotI2RlZmluZSBSRUdTX0NPVU5UCQkJNTU4CisjZGVmaW5lIFJFR1NfQ09VTlQJCQk4MzQKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2FkZHIgcmVnX2FkZHJzW1JFR1NfQ09VTlRdID0gewogCXsgMHgyMDAwLCAzNDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDI4MDAsIDEwMywgUklfQUxMX09OTElORSB9LAogCXsgMHgzMDAwLCAyODcsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDM4MDAsIDMzMSwgUklfQUxMX09OTElORSB9LAotCXsgMHg4ODAwLCA2LCBSSV9FMV9PTkxJTkUgfSwgeyAweGEwMDAsIDIyMywgUklfQUxMX09OTElORSB9LAotCXsgMHhhMzg4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhhMzk4LCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGEzOWMsIDcsIFJJX0UxSF9PTkxJTkUgfSwgeyAweGEzYzAsIDMsIFJJX0UxSF9PTkxJTkUgfSwKLQl7IDB4YTNkMCwgMSwgUklfRTFIX09OTElORSB9LCB7IDB4YTNkOCwgMSwgUklfRTFIX09OTElORSB9LAotCXsgMHhhM2UwLCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHhhM2U4LCAxLCBSSV9FMUhfT05MSU5FIH0sCi0JeyAweGEzZjAsIDEsIFJJX0UxSF9PTkxJTkUgfSwgeyAweGEzZjgsIDEsIFJJX0UxSF9PTkxJTkUgfSwKLQl7IDB4YTQwMCwgNjksIFJJX0FMTF9PTkxJTkUgfSwgeyAweGE1MTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4YTUyMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YTUyOCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHhhNTMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhhNTM4LCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGE1NDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGE1NDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4YTU1MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YTU1OCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHhhNTYwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhhNTY4LCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGE1NzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGE1ODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4YTU5MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YTVhMCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHhhNWMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhhNWUwLCAxLCBSSV9FMUhfT05MSU5FIH0sCi0JeyAweGE1ZTgsIDEsIFJJX0UxSF9PTkxJTkUgfSwgeyAweGE1ZjAsIDEsIFJJX0UxSF9PTkxJTkUgfSwKLQl7IDB4YTVmOCwgMTAsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDEwMDAwLCAyMzYsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTAzYmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwM2NjLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwM2RjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDQwMCwgNTcsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA0ZTgsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwNGY0LCAyLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTAwLCAxNDYsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwNzUwLCAyLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNzYwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDc3MCwgMiwgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDc4MCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTA3OTAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA3YTAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwN2IwLCAyLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwN2MwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDdkMCwgMiwgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDdlMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTA4ODAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA5MDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDE0MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjAwMCwgMjYsIFJJX0UxSF9PTkxJTkUgfSwKLQl7IDB4MTYwNzAsIDE4LCBSSV9FMUhfT05MSU5FIH0sIHsgMHgxNjBjMCwgMjcsIFJJX0UxSF9PTkxJTkUgfSwKLQl7IDB4MTYxNDAsIDEsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDE2MTYwLCAxLCBSSV9FMUhfT05MSU5FIH0sCi0JeyAweDE2MTgwLCAyLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgxNjFjMCwgMiwgUklfRTFIX09OTElORSB9LAotCXsgMHgxNjIwNCwgNSwgUklfRTFIX09OTElORSB9LCB7IDB4MTgwMDAsIDEsIFJJX0UxSF9PTkxJTkUgfSwKLQl7IDB4MTgwMDgsIDEsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDIwMDAwLCAyNCwgUklfQUxMX09OTElORSB9LAotCXsgMHgyMDA2MCwgOCwgUklfQUxMX09OTElORSB9LCB7IDB4MjAwODAsIDEzOCwgUklfQUxMX09OTElORSB9LAotCXsgMHgyMDJiNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjAyYzQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjA0MDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwNDBjLCA4LCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDIwNDJjLCAxOCwgUklfRTFIX09OTElORSB9LCB7IDB4MjA0ODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjA1MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwNjAwLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDI4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODAwNCwgODE5MSwgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4MzAwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMwMDA0LCAxNjM4MywgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4NDAwMDAsIDk4LCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MDE5NCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHg0MDFhNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NDAxYTgsIDExLCBSSV9FMUhfT05MSU5FIH0sCi0JeyAweDQwMjAwLCA0LCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MDQwMCwgNDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4NDA0YjgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQwNGM4LCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDQwNGNjLCAzLCBSSV9FMUhfT05MSU5FIH0sIHsgMHg0MDUwMCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHg4ODAwLCA2LCBSSV9BTExfT05MSU5FIH0sIHsgMHg4ODE4LCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwKKwl7IDB4OTAwMCwgMTY0LCBSSV9FMl9PTkxJTkUgfSwgeyAweDk0MDAsIDMzLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4YTAwMCwgMjcsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGEwNmMsIDEsIFJJX0UxRTFIX09OTElORSB9LAorCXsgMHhhMDcwLCA3MSwgUklfQUxMX09OTElORSB9LCB7IDB4YTE4YywgNCwgUklfRTFFMUhfT05MSU5FIH0sCisJeyAweGExOWMsIDYyLCBSSV9BTExfT05MSU5FIH0sIHsgMHhhMjk0LCAyLCBSSV9FMUUxSF9PTkxJTkUgfSwKKwl7IDB4YTI5YywgNTYsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGEzOWMsIDcsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHhhM2MwLCAzLCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweGEzZDAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHhhM2Q4LCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweGEzZTAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHhhM2U4LCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweGEzZjAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHhhM2Y4LCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweGE0MDAsIDQzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGE0YWMsIDIsIFJJX0UxRTFIX09OTElORSB9LCB7IDB4YTRiNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhhNGI4LCAyLCBSSV9FMUUxSF9PTkxJTkUgfSwgeyAweGE0YzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YTRjYywgNSwgUklfRTFFMUhfT05MSU5FIH0sIHsgMHhhNGUwLCA5LCBSSV9BTExfT05MSU5FIH0sCisJeyAweGE1MDQsIDEsIFJJX0UxRTFIX09OTElORSB9LCB7IDB4YTUwOCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHhhNTE4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhhNTIwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGE1MjgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGE1MzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YTUzOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YTU0MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhhNTQ4LCAxLCBSSV9FMUUxSF9PTkxJTkUgfSwgeyAweGE1NTAsIDEsIFJJX0UxRTFIX09OTElORSB9LAorCXsgMHhhNTU4LCAxLCBSSV9FMUUxSF9PTkxJTkUgfSwgeyAweGE1NjAsIDEsIFJJX0UxRTFIX09OTElORSB9LAorCXsgMHhhNTY4LCAxLCBSSV9FMUUxSF9PTkxJTkUgfSwgeyAweGE1NzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YTU4MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YTU5MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhhNWEwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhhNWMwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGE1ZTAsIDEsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4YTVlOCwgMSwgUklfRTFIRTJfT05MSU5FIH0sCisJeyAweGE1ZjAsIDEsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4YTVmOCwgMTAsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHhhNjIwLCAxMTEsIFJJX0UyX09OTElORSB9LCB7IDB4YTgwMCwgNTEsIFJJX0UyX09OTElORSB9LAorCXsgMHhhOGQ0LCA0LCBSSV9FMl9PTkxJTkUgfSwgeyAweGE4ZTgsIDEsIFJJX0UyX09OTElORSB9LAorCXsgMHhhOGYwLCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDEwMDAwLCAyMzYsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA0MDAsIDU3LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDRlOCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDRmNCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MDAsIDE0NiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDc1MCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTA3NjAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA3NzAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwNzgwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNzkwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDdhMCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDdiMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTA3YzAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA3ZDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwN2UwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwODgwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDkwMCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjAwMCwgMjYsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4MTYwNzAsIDE4LCBSSV9FMUhFMl9PTkxJTkUgfSwKKwl7IDB4MTYwYzAsIDI3LCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweDE2MTQwLCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwKKwl7IDB4MTYxNjAsIDEsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4MTYxODAsIDIsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHgxNjFjMCwgMiwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgxNjIwNCwgNSwgUklfRTFIRTJfT05MSU5FIH0sCisJeyAweDE4MDAwLCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweDE4MDA4LCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwKKwl7IDB4MTgwMTAsIDM1LCBSSV9FMl9PTkxJTkUgfSwgeyAweDE4MGE0LCAyLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTgwYzAsIDE5MSwgUklfRTJfT05MSU5FIH0sIHsgMHgxODQ0MCwgMSwgUklfRTJfT05MSU5FIH0sCisJeyAweDE4NDYwLCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDE4NDgwLCAyLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTg0YzAsIDIsIFJJX0UyX09OTElORSB9LCB7IDB4MTg1MDAsIDE1LCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MjAwMDAsIDI0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDA2MCwgOCwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMDA4MCwgOTQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMWY4LCAxLCBSSV9FMUUxSF9PTkxJTkUgfSwKKwl7IDB4MjAxZmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMjAwLCAxLCBSSV9FMUUxSF9PTkxJTkUgfSwKKwl7IDB4MjAyMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMjA4LCAxLCBSSV9FMUUxSF9PTkxJTkUgfSwKKwl7IDB4MjAyMGMsIDM5LCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDJjOCwgMSwgUklfRTJfT05MSU5FIH0sCisJeyAweDIwMmQ4LCA0LCBSSV9FMl9PTkxJTkUgfSwgeyAweDIwNDAwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIwNDBjLCA4LCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDQyYywgMTgsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHgyMDQ4MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjA1MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjA2MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDI4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDI4MDA0LCA4MTkxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MzAwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzAwMDQsIDE2MzgzLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4NDAwMDAsIDk4LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDQwMWE4LCA4LCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweDQwMWM4LCAxLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDQwMWNjLCAyLCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweDQwMWQ0LCAyLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4NDAyMDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQwMjIwLCAxOCwgUklfRTJfT05MSU5FIH0sCisJeyAweDQwNDAwLCA0MywgUklfQUxMX09OTElORSB9LCB7IDB4NDA0Y2MsIDMsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHg0MDRlMCwgMSwgUklfRTJfT05MSU5FIH0sIHsgMHg0MDUwMCwgMiwgUklfQUxMX09OTElORSB9LAogCXsgMHg0MDUxMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4NDA1MjAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKIAl7IDB4NDA1MzAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQwNTQwLCAyLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDQyMDAwLCAxNjQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQyMjljLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDQyMmFjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MjJiYywgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHg0MjJkNCwgNSwgUklfRTFIX09OTElORSB9LCB7IDB4NDI0MDAsIDQ5LCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDQyNGM4LCAzOCwgUklfQUxMX09OTElORSB9LCB7IDB4NDI1NjgsIDIsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4NDI4MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDUwMDAwLCAyMCwgUklfQUxMX09OTElORSB9LAotCXsgMHg1MDA1MCwgOCwgUklfQUxMX09OTElORSB9LCB7IDB4NTAwNzAsIDg4LCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDUwMWRjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg1MDFlYywgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHg1MDFmMCwgNCwgUklfRTFIX09OTElORSB9LCB7IDB4NTAyMDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4NTAyMGMsIDcsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDUwMjI4LCA2LCBSSV9FMUhfT05MSU5FIH0sCi0JeyAweDUwMjQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg1MDI4MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg0MDU1MCwgMTAsIFJJX0UyX09OTElORSB9LCB7IDB4NDA2MTAsIDIsIFJJX0UyX09OTElORSB9LAorCXsgMHg0MjAwMCwgMTY0LCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MjJjMCwgNCwgUklfRTJfT05MSU5FIH0sCisJeyAweDQyMmQ0LCA1LCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweDQyMmU4LCAxLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4NDI0MDAsIDQ5LCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MjRjOCwgMzgsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NDI1NjgsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQyNjQwLCA1LCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4NDI4MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDUwMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDUwMDA0LCAxOSwgUklfQUxMX09OTElORSB9LCB7IDB4NTAwNTAsIDgsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NTAwNzAsIDg4LCBSSV9BTExfT05MSU5FIH0sIHsgMHg1MDFmMCwgNCwgUklfRTFIRTJfT05MSU5FIH0sCisJeyAweDUwMjAwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHg1MDIwYywgNywgUklfQUxMX09OTElORSB9LAorCXsgMHg1MDIyOCwgNiwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHg1MDI0MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg1MDI4MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NTAzMDAsIDEsIFJJX0UyX09OTElORSB9LAorCXsgMHg1MDMwYywgMSwgUklfRTJfT05MSU5FIH0sIHsgMHg1MDMxOCwgMSwgUklfRTJfT05MSU5FIH0sCisJeyAweDUwMzFjLCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDUwMzIwLCAyLCBSSV9FMl9PTkxJTkUgfSwKIAl7IDB4NTIwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDU0MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweDU0MDA0LCAzMzI3LCBSSV9BTExfT0ZGTElORSB9LCB7IDB4NTgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4NTgwMDQsIDgxOTEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHg2MDAwMCwgNzEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4NjAxMjgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDYwMTM4LCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDYwMTNjLCAyNCwgUklfRTFIX09OTElORSB9LCB7IDB4NjAyMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NTgwMDQsIDgxOTEsIFJJX0UxRTFIX09GRkxJTkUgfSwgeyAweDYwMDAwLCAyNiwgUklfQUxMX09OTElORSB9LAorCXsgMHg2MDA2OCwgOCwgUklfRTFFMUhfT05MSU5FIH0sIHsgMHg2MDA4OCwgMTIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NjAwYjgsIDksIFJJX0UxRTFIX09OTElORSB9LCB7IDB4NjAwZGMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NjAwZTAsIDUsIFJJX0UxRTFIX09OTElORSB9LCB7IDB4NjAwZjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NjAwZjgsIDEsIFJJX0UxRTFIX09OTElORSB9LCB7IDB4NjAwZmMsIDgsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NjAxM2MsIDI0LCBSSV9FMUhfT05MSU5FIH0sIHsgMHg2MDE5YywgMiwgUklfRTJfT05MSU5FIH0sCisJeyAweDYwMWFjLCAxOCwgUklfRTJfT05MSU5FIH0sIHsgMHg2MDIwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg2MDIwNCwgMiwgUklfQUxMX09GRkxJTkUgfSwgeyAweDYwMjEwLCAxMywgUklfRTJfT05MSU5FIH0sCiAJeyAweDYxMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg2MTAwNCwgNTExLCBSSV9BTExfT0ZGTElORSB9LAotCXsgMHg3MDAwMCwgOCwgUklfQUxMX09OTElORSB9LCB7IDB4NzAwMjAsIDIxNDk2LCBSSV9BTExfT0ZGTElORSB9LAotCXsgMHg4NTAwMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4ODUwMGMsIDQsIFJJX0FMTF9PRkZMSU5FIH0sCi0JeyAweDg1MDFjLCA3LCBSSV9BTExfT05MSU5FIH0sIHsgMHg4NTAzOCwgNCwgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4ODUwNDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDg1MDRjLCAxMDksIFJJX0FMTF9PRkZMSU5FIH0sCi0JeyAweDg1MjAwLCAzMiwgUklfQUxMX09OTElORSB9LCB7IDB4ODUyODAsIDExMTA0LCBSSV9BTExfT0ZGTElORSB9LAotCXsgMHhhMDAwMCwgMTYzODQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGIwMDAwLCAxNjM4NCwgUklfRTFIX09OTElORSB9LAotCXsgMHhjMTAwMCwgNywgUklfQUxMX09OTElORSB9LCB7IDB4YzEwMjgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4YzEwMzgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGMxODAwLCAyLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGMyMDAwLCAxNjQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGMyMjljLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGMyMmFjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhjMjJiYywgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg3MDAwMCwgOCwgUklfQUxMX09OTElORSB9LCB7IDB4NzAwMjAsIDgxODQsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDg1MDAwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHg4NTAxYywgNywgUklfQUxMX09OTElORSB9LAorCXsgMHg4NTA0OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4ODUyMDAsIDMyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGMxMDAwLCA3LCBSSV9BTExfT05MSU5FIH0sIHsgMHhjMTAzYywgMiwgUklfRTJfT05MSU5FIH0sCisJeyAweGMxODAwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHhjMjAwMCwgMTY0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweGMyMmMwLCA1LCBSSV9FMl9PTkxJTkUgfSwgeyAweGMyMmQ4LCA0LCBSSV9FMl9PTkxJTkUgfSwKIAl7IDB4YzI0MDAsIDQ5LCBSSV9BTExfT05MSU5FIH0sIHsgMHhjMjRjOCwgMzgsIFJJX0FMTF9PTkxJTkUgfSwKIAl7IDB4YzI1NjgsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGMyNjAwLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGM0MDAwLCAxNjUsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGM0MmEwLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGM0MmIwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhjNDJjMCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHhjNDJlMCwgNywgUklfRTFIX09OTElORSB9LCB7IDB4YzQ0MDAsIDUxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGM0NGQwLCAzOCwgUklfQUxMX09OTElORSB9LCB7IDB4YzQ1NzAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzQwMDAsIDE2NSwgUklfQUxMX09OTElORSB9LCB7IDB4YzQyZDgsIDIsIFJJX0UyX09OTElORSB9LAorCXsgMHhjNDJlMCwgNywgUklfRTFIRTJfT05MSU5FIH0sIHsgMHhjNDJmYywgMSwgUklfRTJfT05MSU5FIH0sCisJeyAweGM0NDAwLCA1MSwgUklfQUxMX09OTElORSB9LCB7IDB4YzQ0ZDAsIDM4LCBSSV9BTExfT05MSU5FIH0sCisJeyAweGM0NTcwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHhjNDU3OCwgNSwgUklfRTJfT05MSU5FIH0sCiAJeyAweGM0NjAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhkMDAwMCwgMTksIFJJX0FMTF9PTkxJTkUgfSwKIAl7IDB4ZDAwNGMsIDgsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGQwMDZjLCA5MSwgUklfQUxMX09OTElORSB9LAotCXsgMHhkMDFlNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4ZDAxZjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4ZDAyMDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGQwMjBjLCA3LCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGQwMjI4LCAxOCwgUklfRTFIX09OTElORSB9LCB7IDB4ZDAyODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4ZDAzMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGQwNDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGQ0MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhkNDAwNCwgMjU1OSwgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4ZDgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGQ4MDA0LCA4MTkxLCBSSV9BTExfT0ZGTElORSB9LAotCXsgMHhlMDAwMCwgMjEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGUwMDU0LCA4LCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGUwMDc0LCA4NSwgUklfQUxMX09OTElORSB9LCB7IDB4ZTAxZDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4ZTAxZTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGUwMjAwLCAyLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGUwMjBjLCA4LCBSSV9BTExfT05MSU5FIH0sIHsgMHhlMDIyYywgMTgsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4ZDAxZmMsIDEsIFJJX0UyX09OTElORSB9LCB7IDB4ZDAyMDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4ZDAyMGMsIDcsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGQwMjI4LCAxOCwgUklfRTFIRTJfT05MSU5FIH0sCisJeyAweGQwMjgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhkMDMwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhkMDQwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4ZDQwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4ZDQwMDQsIDI1NTksIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHhkODAwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhkODAwNCwgODE5MSwgUklfQUxMX09GRkxJTkUgfSwgeyAweGUwMDAwLCAyMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhlMDA1NCwgOCwgUklfQUxMX09OTElORSB9LCB7IDB4ZTAwNzQsIDQ5LCBSSV9BTExfT05MSU5FIH0sCisJeyAweGUwMTM4LCAxLCBSSV9FMUUxSF9PTkxJTkUgfSwgeyAweGUwMTNjLCAzNSwgUklfQUxMX09OTElORSB9LAorCXsgMHhlMDFmNCwgMiwgUklfRTJfT05MSU5FIH0sIHsgMHhlMDIwMCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHhlMDIwYywgOCwgUklfQUxMX09OTElORSB9LCB7IDB4ZTAyMmMsIDE4LCBSSV9FMUhFMl9PTkxJTkUgfSwKIAl7IDB4ZTAyODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGUwMzAwLCAxLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweGUxMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhlMjAwMCwgMSwgUklfQUxMX09OTElORSB9LAogCXsgMHhlMjAwNCwgMjA0NywgUklfQUxMX09GRkxJTkUgfSwgeyAweGYwMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweGYwMDA0LCAxNjM4MywgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwMTAwMCwgMTIsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTAxMDNjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDEwNGMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTAxMDUwLCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgxMDExMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTAxODAwLCA4LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDIwMDAsIDE4LCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwMjA1NCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAyMDY0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMTA1MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgxMDEwNTQsIDMsIFJJX0UyX09OTElORSB9LAorCXsgMHgxMDExMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwMTgwMCwgOCwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDIwMDAsIDE4LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDIwNjgsIDYsIFJJX0UyX09OTElORSB9LAogCXsgMHgxMDIwODAsIDE3LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDIwYzgsIDgsIFJJX0UxSF9PTkxJTkUgfSwKLQl7IDB4MTAyNDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDMwMDAsIDI2LCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwMzA3NCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAzMDg0LCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwMzA5NCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAzMDk4LCA1LCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDEwMjBlOCwgOSwgUklfRTJfT05MSU5FIH0sIHsgMHgxMDI0MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTAzMDAwLCAyNiwgUklfQUxMX09OTElORSB9LCB7IDB4MTAzMDk4LCA1LCBSSV9FMUhFMl9PTkxJTkUgfSwKKwl7IDB4MTAzMGFjLCAxMCwgUklfRTJfT05MSU5FIH0sIHsgMHgxMDMwZDgsIDgsIFJJX0UyX09OTElORSB9LAorCXsgMHgxMDM0MDAsIDEsIFJJX0UyX09OTElORSB9LCB7IDB4MTAzNDA0LCAxMzUsIFJJX0UyX09GRkxJTkUgfSwKIAl7IDB4MTAzODAwLCA4LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDQwMDAsIDYzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNDEwOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTA0MTE4LCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNDIwMCwgMTcsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwNDQwMCwgNjQsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA0NTAwLCAxOTIsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDQ4MDAsIDY0LCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNDkwMCwgMTkyLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MDAwLCA3LCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTAxYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTAyMCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUwMmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwMzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MDNjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MDQwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTA0YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTA1MCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUwNWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwNjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MDZjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MDcwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTA3YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTA4MCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUwOGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwOTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MDljLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MGEwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTBhYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTBiMCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUwYmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwYzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MGNjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MGQwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTBkYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTBlMCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUwZWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwZjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MGZjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MTAwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTEwYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTExMCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUxMWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxMjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MTJjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MTMwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTEzYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTE0MCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUxNGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxNTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MTVjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MTYwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTE2YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTE3MCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUxN2MsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxODAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MThjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MTkwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTE5YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTFhMCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUxYWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxYjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MWJjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MWMwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTFjYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTFkMCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUxZGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxZTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MWVjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MWYwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTFmYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTIwMCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUyMGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyMTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MjFjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MjIwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTIyYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTIzMCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUyM2MsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyNDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MjRjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MjUwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTI1YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTI2MCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUyNmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyNzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MjdjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MjgwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTI4YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTI5MCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUyOWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyYTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MmFjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MmIwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTJiYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTJjMCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUyY2MsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyZDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MmRjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MmUwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTJlYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTJmMCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUyZmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzMDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MzBjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MzEwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTMxYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTMyMCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUzMmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzMzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MzNjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MzQwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTM0YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTM1MCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUzNWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzNjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MzZjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MzcwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTM3YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTM4MCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUzOGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzOTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MzljLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1M2EwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTNhYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTNiMCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUzYmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzYzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1M2NjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1M2QwLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwNTNkYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTNlMCwgMywgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDUzZWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzZjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1M2ZjLCA3NjksIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDgwMDAsIDMzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwODA5MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTA4MGEwLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwODBhYywgNSwgUklfRTFIX09OTElORSB9LCB7IDB4MTA4MTAwLCA1LCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwODEyMCwgNSwgUklfQUxMX09OTElORSB9LCB7IDB4MTA4MjAwLCA3NCwgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDg0MDAsIDc0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDg4MDAsIDE1MiwgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDkwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMDAwMCwgMzQ3LCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEyMDU3OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwNTg4LCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEyMDU5OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwNTljLCAyMywgUklfRTFIX09OTElORSB9LAotCXsgMHgxMjA2MTQsIDEsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDEyMDYxYywgMzAsIFJJX0UxSF9PTkxJTkUgfSwKLQl7IDB4MTIwODBjLCA2NSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwYTAwLCAyLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEyMjAwMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTI4MDAwLCAyLCBSSV9FMUhfT05MSU5FIH0sCi0JeyAweDE0MDAwMCwgMTE0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNDAxZDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTQwMWU0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNDAyMDAsIDYsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTQ0MDAwLCA0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNDgwMDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTRjMDAwLCA0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNTAwMDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTU0MDAwLCA0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNTgwMDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTVjMDAwLCA3LCBSSV9FMUhfT05MSU5FIH0sIHsgMHgxNjEwMDAsIDcsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTYxMDI4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjEwMzgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTYxODAwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjQwMDAsIDYwLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDE2NDBmYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MTBjLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDE2NDExMCwgMiwgUklfRTFIX09OTElORSB9LCB7IDB4MTY0MjAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNDExYywgMTYsIFJJX0UyX09OTElORSB9LCB7IDB4MTA0MjAwLCAxNywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDQ0MDAsIDY0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDQ1MDAsIDE5MiwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MTA0ODAwLCA2NCwgUklfQUxMX09OTElORSB9LCB7IDB4MTA0OTAwLCAxOTIsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDEwNTAwMCwgMjU2LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDU0MDAsIDc2OCwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MTA3MDAwLCA3LCBSSV9FMl9PTkxJTkUgfSwgeyAweDEwODAwMCwgMzMsIFJJX0UxRTFIX09OTElORSB9LAorCXsgMHgxMDgwYWMsIDUsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDEwODEwMCwgNSwgUklfRTFFMUhfT05MSU5FIH0sCisJeyAweDEwODEyMCwgNSwgUklfRTFFMUhfT05MSU5FIH0sIHsgMHgxMDgyMDAsIDc0LCBSSV9FMUUxSF9PTkxJTkUgfSwKKwl7IDB4MTA4NDAwLCA3NCwgUklfRTFFMUhfT05MSU5FIH0sIHsgMHgxMDg4MDAsIDE1MiwgUklfRTFFMUhfT05MSU5FIH0sCisJeyAweDExMDAwMCwgMTExLCBSSV9FMl9PTkxJTkUgfSwgeyAweDExMDIwMCwgNCwgUklfRTJfT05MSU5FIH0sCisJeyAweDEyMDAwMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMDA4LCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDAxOCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMDI0LCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDAzNCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMDQwLCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDA1MCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMDVjLCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDA2YywgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMDc4LCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDA4OCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMDk0LCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDBhNCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMGIwLCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDBjMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMGNjLCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDBkYywgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMGU4LCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDBmOCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMTA0LCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDExNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMTE4LCAyMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMjAxNzAsIDIsIFJJX0UxRTFIX09OTElORSB9LCB7IDB4MTIwMTc4LCAyNDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwNTQ0LCA0LCBSSV9FMUUxSF9PTkxJTkUgfSwgeyAweDEyMDU1NCwgNywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMjA1OWMsIDYsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4MTIwNWI0LCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwKKwl7IDB4MTIwNWI4LCAxNiwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgxMjA1ZjgsIDQsIFJJX0UyX09OTElORSB9LAorCXsgMHgxMjA2MTgsIDEsIFJJX0UyX09OTElORSB9LCB7IDB4MTIwNjFjLCAyMCwgUklfRTFIRTJfT05MSU5FIH0sCisJeyAweDEyMDY2YywgMTEsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4MTIwNjk4LCA1LCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTIwNmIwLCA3NiwgUklfRTJfT05MSU5FIH0sIHsgMHgxMjA3ZmMsIDEsIFJJX0UyX09OTElORSB9LAorCXsgMHgxMjA4MDgsIDY2LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA5MTAsIDcsIFJJX0UyX09OTElORSB9LAorCXsgMHgxMjA5MzAsIDksIFJJX0UyX09OTElORSB9LCB7IDB4MTIwYTAwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMjAwMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTIyMDA4LCAyMDQ2LCBSSV9FMV9PRkZMSU5FIH0sCisJeyAweDEyODAwMCwgMiwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgxMjgwMDgsIDYxNDIsIFJJX0UxSEUyX09GRkxJTkUgfSwKKwl7IDB4MTMwMDAwLCAzNSwgUklfRTJfT05MSU5FIH0sIHsgMHgxMzAxMDAsIDI5LCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTMwMTgwLCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDEzMDIwMCwgMSwgUklfRTJfT05MSU5FIH0sCisJeyAweDEzMDI4MCwgMSwgUklfRTJfT05MSU5FIH0sIHsgMHgxMzAzMDAsIDUsIFJJX0UyX09OTElORSB9LAorCXsgMHgxMzAzODAsIDEsIFJJX0UyX09OTElORSB9LCB7IDB4MTMwNDAwLCAxLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTMwNDgwLCA1LCBSSV9FMl9PTkxJTkUgfSwgeyAweDEzMDgwMCwgNzIsIFJJX0UyX09OTElORSB9LAorCXsgMHgxMzEwMDAsIDEzNiwgUklfRTJfT05MSU5FIH0sIHsgMHgxMzIwMDAsIDE0OCwgUklfRTJfT05MSU5FIH0sCisJeyAweDEzNDAwMCwgNTQ0LCBSSV9FMl9PTkxJTkUgfSwgeyAweDE0MDAwMCwgNjQsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTQwMTAwLCA1LCBSSV9FMUUxSF9PTkxJTkUgfSwgeyAweDE0MDExNCwgNDUsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTQwMjAwLCA2LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNDAyMjAsIDQsIFJJX0UyX09OTElORSB9LAorCXsgMHgxNDAyNDAsIDQsIFJJX0UyX09OTElORSB9LCB7IDB4MTQwMjYwLCA0LCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTQwMjgwLCA0LCBSSV9FMl9PTkxJTkUgfSwgeyAweDE0MDJhMCwgNCwgUklfRTJfT05MSU5FIH0sCisJeyAweDE0MDJjMCwgNCwgUklfRTJfT05MSU5FIH0sIHsgMHgxNDAyZTAsIDEzLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTQ0MDAwLCA0LCBSSV9FMUUxSF9PTkxJTkUgfSwgeyAweDE0ODAwMCwgNCwgUklfRTFFMUhfT05MSU5FIH0sCisJeyAweDE0YzAwMCwgNCwgUklfRTFFMUhfT05MSU5FIH0sIHsgMHgxNTAwMDAsIDQsIFJJX0UxRTFIX09OTElORSB9LAorCXsgMHgxNTQwMDAsIDQsIFJJX0UxRTFIX09OTElORSB9LCB7IDB4MTU4MDAwLCA0LCBSSV9FMUUxSF9PTkxJTkUgfSwKKwl7IDB4MTVjMDAwLCAyLCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweDE1YzAwOCwgNSwgUklfRTFIX09OTElORSB9LAorCXsgMHgxNWMwMjAsIDI3LCBSSV9FMl9PTkxJTkUgfSwgeyAweDE1YzA5MCwgMTMsIFJJX0UyX09OTElORSB9LAorCXsgMHgxNWMwYzgsIDM0LCBSSV9FMl9PTkxJTkUgfSwgeyAweDE2MTAwMCwgNywgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjEwM2MsIDIsIFJJX0UyX09OTElORSB9LCB7IDB4MTYxODAwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NDAwMCwgNjAsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2NDExMCwgMiwgUklfRTFIRTJfT05MSU5FIH0sCisJeyAweDE2NDExOCwgMTUsIFJJX0UyX09OTElORSB9LCB7IDB4MTY0MjAwLCAxLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweDE2NDIwOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MjEwLCAxLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweDE2NDIxOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MjIwLCAxLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweDE2NDIyOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MjMwLCAxLCBSSV9BTExfT05MSU5FIH0sCkBAIC0yODQsMTY5ICsyNzMsMjk4IEBACiAJeyAweDE2NDI1OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MjYwLCAxLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweDE2NDI3MCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MjgwLCAyLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweDE2NDgwMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTY1MDAwLCAyLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDE2NjAwMCwgMTY0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjYyOWMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTY2MmFjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjYyYmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY2MDAwLCAxNjQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2NjJjYywgNywgUklfRTJfT05MSU5FIH0sCiAJeyAweDE2NjQwMCwgNDksIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2NjRjOCwgMzgsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTY2NTY4LCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjY4MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTY4MDAwLCAyNzAsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2ODQ0NCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgxNjg0NTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2ODgwMCwgMTksIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTY4OTAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjhhMDAsIDEyOCwgUklfQUxMX09OTElORSB9LAotCXsgMHgxNmEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2YTAwNCwgMTUzNSwgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4MTZjMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNmMwMDQsIDE1MzUsIFJJX0FMTF9PRkZMSU5FIH0sCi0JeyAweDE2ZTAwMCwgMTYsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDE2ZTEwMCwgMSwgUklfRTFIX09OTElORSB9LAotCXsgMHgxNmUyMDAsIDIsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDE2ZTQwMCwgMTgzLCBSSV9FMUhfT05MSU5FIH0sCi0JeyAweDE3MDAwMCwgOTMsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE3MDE4MCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgxNzAxOTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE3MDIwMCwgNCwgUklfQUxMX09OTElORSB9LAotCXsgMHgxNzAyMTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE3ODAwMCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgxODAwMDAsIDYxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODAxMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTgwMTEwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODAxMjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTgwMTMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODAxM2MsIDIsIFJJX0UxSF9PTkxJTkUgfSwKLQl7IDB4MTgwMjAwLCA1OCwgUklfQUxMX09OTElORSB9LCB7IDB4MTgwMzQwLCA0LCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDE4MDQwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTgwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDE2NjU2OCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTY2NTcwLCA1LCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTY2ODAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjgwMDAsIDEzNywgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjgyMjQsIDIsIFJJX0UxRTFIX09OTElORSB9LCB7IDB4MTY4MjJjLCAyOSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjgyYTAsIDEyLCBSSV9FMUUxSF9PTkxJTkUgfSwgeyAweDE2ODJkMCwgMTIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY4MzAwLCAyLCBSSV9FMUUxSF9PTkxJTkUgfSwgeyAweDE2ODMwOCwgNjgsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY4NDE4LCAyLCBSSV9FMUUxSF9PTkxJTkUgfSwgeyAweDE2ODQyMCwgNiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjg4MDAsIDE5LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjg5MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY4YTAwLCAxMjgsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2YTAwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNmEwMDQsIDE1MzUsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxNmMwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTZjMDA0LCAxNTM1LCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTZlMDAwLCAxNiwgUklfRTFIX09OTElORSB9LAorCXsgMHgxNmUwNDAsIDgsIFJJX0UyX09OTElORSB9LCB7IDB4MTZlMTAwLCAxLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDE2ZTIwMCwgMiwgUklfRTFIX09OTElORSB9LCB7IDB4MTZlNDAwLCAxNjEsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MTZlNjg0LCAyLCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweDE2ZTY4YywgMTIsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MTZlNmJjLCA0LCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweDE2ZTZjYywgNCwgUklfRTFIX09OTElORSB9LAorCXsgMHgxNmU2ZTAsIDEyLCBSSV9FMl9PTkxJTkUgfSwgeyAweDE2ZTc2OCwgMTcsIFJJX0UyX09OTElORSB9LAorCXsgMHgxNzAwMDAsIDI0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNzAwNjAsIDQsIFJJX0UxRTFIX09OTElORSB9LAorCXsgMHgxNzAwNzAsIDY1LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNzAxOTQsIDExLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTcwMWM0LCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDE3MDFjYywgNywgUklfRTJfT05MSU5FIH0sCisJeyAweDE3MDFlYywgMSwgUklfRTJfT05MSU5FIH0sIHsgMHgxNzAxZjQsIDEsIFJJX0UyX09OTElORSB9LAorCXsgMHgxNzAyMDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE3MDIxNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNzAyMTgsIDc3LCBSSV9FMl9PTkxJTkUgfSwgeyAweDE3MDQwMCwgNjQsIFJJX0UyX09OTElORSB9LAorCXsgMHgxNzgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE4MDAwMCwgNjEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTgwMTNjLCAyLCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweDE4MDIwMCwgNTgsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTgwMzQwLCA0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODAzODAsIDEsIFJJX0UyX09OTElORSB9LAorCXsgMHgxODAzODgsIDEsIFJJX0UyX09OTElORSB9LCB7IDB4MTgwMzkwLCAxLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTgwMzk4LCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDE4MDNhMCwgNSwgUklfRTJfT05MSU5FIH0sCisJeyAweDE4MDQwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTgwNDA0LCAyNTUsIFJJX0UxRTFIX09GRkxJTkUgfSwKIAl7IDB4MTgxMDAwLCA0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODEwMTAsIDEwMjAsIFJJX0FMTF9PRkZMSU5FIH0sCi0JeyAweDFhMDAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MWEwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORSB9LAotCXsgMHgxYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFhMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4MWE1ODAwLCAyNTYwLCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MWE4MDAwLCA2NCwgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4MWE4MTAwLCAxOTg0LCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MWFhMDAwLCAxLCBSSV9FMUhfT05MSU5FIH0sCi0JeyAweDFhYTAwNCwgNjY1NSwgUklfRTFIX09GRkxJTkUgfSwgeyAweDFiMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORSB9LAotCXsgMHgxYjFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkUgfSwgeyAweDFiMjAwMCwgMSwgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4MWIyNDAwLCA2NCwgUklfRTFIX09GRkxJTkUgfSwgeyAweDFiODIwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxYTAwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFhMDAwNCwgNTYzMSwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MWE1ODAwLCAyNTYwLCBSSV9FMUhFMl9PRkZMSU5FIH0sIHsgMHgxYTgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWE4MDA0LCA4MTkxLCBSSV9FMUhFMl9PRkZMSU5FIH0sIHsgMHgxYjAwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWIwMDA0LCAxNSwgUklfRTFIX09GRkxJTkUgfSwgeyAweDFiMDA0MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sCisJeyAweDFiMDA0NCwgMjM5LCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MWIwNDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDFiMDQwNCwgMjU1LCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MWIwODAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDFiMDg0MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgxYjBjMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWIxMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjEwNDAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHgxYjE0MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFiMTQ0MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sCisJeyAweDFiMTQ4MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgxYjE0YzAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHgxYjE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkUgfSwgeyAweDFiMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgxYjIwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFiMjQwMCwgMSwgUklfRTFIRTJfT05MSU5FIH0sCisJeyAweDFiMjQwNCwgNTYzMSwgUklfRTJfT0ZGTElORSB9LCB7IDB4MWI4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDFiODA0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MWI4MDgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDFiODBjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MWI4MTAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDFiODE0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MWI4MTgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDFiODFjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MWI4MjAwLCAxLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweDFiODI0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MWI4MjgwLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDFiODJjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MWI4YTAwLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDFiOGE4MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MWMwMDAwLCAyLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDIwMDAwMCwgNjUsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMDExMCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgyMDAxMjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMDEzMCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgyMDAxNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMDE0YywgMiwgUklfRTFIX09OTElORSB9LAotCXsgMHgyMDAyMDAsIDU4LCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDAzNDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjAwNDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4MjAyMDAwLCA0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDIwMTAsIDIwNDQsIFJJX0FMTF9PRkZMSU5FIH0sCi0JeyAweDIyMDAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjIwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORSB9LAotCXsgMHgyMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIyMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4MjI1ODAwLCAxNTM2LCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MjI3MDAwLCAxLCBSSV9FMUhfT05MSU5FIH0sCi0JeyAweDIyNzAwNCwgMTAyMywgUklfRTFIX09GRkxJTkUgfSwgeyAweDIyODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FIH0sCi0JeyAweDIyODEwMCwgODY0MCwgUklfRTFIX09GRkxJTkUgfSwgeyAweDIzMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORSB9LAotCXsgMHgyMzFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkUgfSwgeyAweDIzMjAwMCwgMSwgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4MjMyNDAwLCA2NCwgUklfRTFIX09GRkxJTkUgfSwgeyAweDIzODIwMCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgyMzgyNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIzODI4MCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgyMzgyYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIzOGEwMCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgyMzhhODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDI0MDAwMCwgMiwgUklfQUxMX09OTElORSB9LAotCXsgMHgyODAwMDAsIDY1LCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODAxMTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjgwMTIwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODAxMzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjgwMTQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODAxNGMsIDIsIFJJX0UxSF9PTkxJTkUgfSwKLQl7IDB4MjgwMjAwLCA1OCwgUklfQUxMX09OTElORSB9LCB7IDB4MjgwMzQwLCA0LCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDI4MDQwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjgwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FIH0sCi0JeyAweDI4MjAwMCwgNCwgUklfQUxMX09OTElORSB9LCB7IDB4MjgyMDEwLCAyMDQ0LCBSSV9BTExfT0ZGTElORSB9LAotCXsgMHgyYTAwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDJhMDAwNCwgMTAyMywgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4MmExMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYTEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FIH0sCi0JeyAweDJhNTgwMCwgMjU2MCwgUklfRTFIX09GRkxJTkUgfSwgeyAweDJhODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FIH0sCi0JeyAweDJhODEwMCwgOTYwLCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MmE5MDAwLCAxLCBSSV9FMUhfT05MSU5FIH0sCi0JeyAweDJhOTAwNCwgNzY3OSwgUklfRTFIX09GRkxJTkUgfSwgeyAweDJiMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORSB9LAotCXsgMHgyYjFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkUgfSwgeyAweDJiMjAwMCwgMSwgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4MmIyNDAwLCA2NCwgUklfRTFIX09GRkxJTkUgfSwgeyAweDJiODIwMCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgyYjgyNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDJiODI4MCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgyYjgyYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDJiOGEwMCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgyYjhhODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDJjMDAwMCwgMiwgUklfQUxMX09OTElORSB9LAotCXsgMHgzMDAwMDAsIDY1LCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMDAxMTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MzAwMTIwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMDAxMzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MzAwMTQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMDAxNGMsIDIsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MWI4MmMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjgzMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4MzQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjgzODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4M2MwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjg0MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4NDQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjg0ODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4NGMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjg1MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4NTQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjg1ODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4NWMwLCAxOSwgUklfRTJfT05MSU5FIH0sIHsgMHgxYjg4MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4ODQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjg4ODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4OGMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjg5MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4OTQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjg5ODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4OWMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjhhMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4YTQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjhhODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4YWMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjhiMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4YjQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjhiODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4YmMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjhjMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4YzQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjhjODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4Y2MwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjhjYzQsIDEsIFJJX0UyX09OTElORSB9LAorCXsgMHgxYjhkMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFiOGQ0MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxYjhkODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFiOGRjMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxYjhlMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFiOGU0MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxYjhlODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFiOGU4NCwgMSwgUklfRTJfT05MSU5FIH0sCisJeyAweDFiOGVjMCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgxYjhmMDAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHgxYjhmNDAsIDEsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4MWI4ZjgwLCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwKKwl7IDB4MWI4ZmMwLCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweDFiOGZjNCwgMiwgUklfRTJfT05MSU5FIH0sCisJeyAweDFiOGZkMCwgNiwgUklfRTJfT05MSU5FIH0sIHsgMHgxYjkwMDAsIDEsIFJJX0UyX09OTElORSB9LAorCXsgMHgxYjkwNDAsIDMsIFJJX0UyX09OTElORSB9LCB7IDB4MWI5NDAwLCAxNCwgUklfRTJfT05MSU5FIH0sCisJeyAweDFiOTQzYywgMTksIFJJX0UyX09OTElORSB9LCB7IDB4MWI5NDkwLCAxMCwgUklfRTJfT05MSU5FIH0sCisJeyAweDFjMDAwMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MjAwMDAwLCA2NSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMDAxNGMsIDIsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4MjAwMjAwLCA1OCwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMDAzNDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMDM4MCwgMSwgUklfRTJfT05MSU5FIH0sCisJeyAweDIwMDM4OCwgMSwgUklfRTJfT05MSU5FIH0sIHsgMHgyMDAzOTAsIDEsIFJJX0UyX09OTElORSB9LAorCXsgMHgyMDAzOTgsIDEsIFJJX0UyX09OTElORSB9LCB7IDB4MjAwM2EwLCAxLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MjAwM2E4LCAyLCBSSV9FMl9PTkxJTkUgfSwgeyAweDIwMDQwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMDA0MDQsIDI1NSwgUklfRTFFMUhfT0ZGTElORSB9LCB7IDB4MjAyMDAwLCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIwMjAxMCwgMjA0NCwgUklfQUxMX09GRkxJTkUgfSwgeyAweDIyMDAwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMjAwMDQsIDU2MzEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgyMjU4MDAsIDI1NjAsIFJJX0UxSEUyX09GRkxJTkV9LAorCXsgMHgyMjgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIyODAwNCwgODE5MSwgUklfRTFIRTJfT0ZGTElORSB9LAorCXsgMHgyMzAwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIzMDAwNCwgMTUsIFJJX0UxSF9PRkZMSU5FIH0sCisJeyAweDIzMDA0MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgyMzAwNDQsIDIzOSwgUklfRTFIX09GRkxJTkUgfSwKKwl7IDB4MjMwNDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzA0MDQsIDI1NSwgUklfRTFIX09GRkxJTkUgfSwKKwl7IDB4MjMwODAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzA4NDAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHgyMzBjMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIzMTAwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMzEwNDAsIDEsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4MjMxNDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIzMTQ0MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgyMzE0ODAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHgyMzE0YzAsIDEsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4MjMxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDIzMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MjMyMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIzMjQwMCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgyMzI0MDQsIDU2MzEsIFJJX0UyX09GRkxJTkUgfSwKKwl7IDB4MjM4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzgwNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4MDgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzgwYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4MTAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzgxNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4MTgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzgxYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4MjAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzgyNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4MjgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzgyYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4MzAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzgzNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4MzgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzgzYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4NDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzg0NDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4NDgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzg0YzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4NTAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzg1NDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4NTgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzg1YzAsIDE5LCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MjM4ODAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzg4NDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4ODgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzg4YzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4OTAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzg5NDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4OTgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzg5YzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4YTAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzhhNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4YTgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzhhYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4YjAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzhiNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4YjgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzhiYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4YzAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzhjNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4YzgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzhjYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4Y2M0LCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDIzOGQwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMzhkNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIzOGQ4MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMzhkYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIzOGUwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMzhlNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIzOGU4MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMzhlODQsIDEsIFJJX0UyX09OTElORSB9LCB7IDB4MjM4ZWMwLCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwKKwl7IDB4MjM4ZjAwLCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweDIzOGY0MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sCisJeyAweDIzOGY4MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgyMzhmYzAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHgyMzhmYzQsIDIsIFJJX0UyX09OTElORSB9LCB7IDB4MjM4ZmQwLCA2LCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MjM5MDAwLCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDIzOTA0MCwgMywgUklfRTJfT05MSU5FIH0sCisJeyAweDI0MDAwMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MjgwMDAwLCA2NSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyODAxNGMsIDIsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4MjgwMjAwLCA1OCwgUklfQUxMX09OTElORSB9LAorCXsgMHgyODAzNDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDI4MDM4MCwgMSwgUklfRTJfT05MSU5FIH0sCisJeyAweDI4MDM4OCwgMSwgUklfRTJfT05MSU5FIH0sIHsgMHgyODAzOTAsIDEsIFJJX0UyX09OTElORSB9LAorCXsgMHgyODAzOTgsIDEsIFJJX0UyX09OTElORSB9LCB7IDB4MjgwM2EwLCAxLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MjgwM2E4LCAyLCBSSV9FMl9PTkxJTkUgfSwgeyAweDI4MDQwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyODA0MDQsIDI1NSwgUklfRTFFMUhfT0ZGTElORSB9LCB7IDB4MjgyMDAwLCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDI4MjAxMCwgMjA0NCwgUklfQUxMX09GRkxJTkUgfSwgeyAweDJhMDAwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyYTAwMDQsIDU2MzEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgyYTU4MDAsIDI1NjAsIFJJX0UxSEUyX09GRkxJTkV9LAorCXsgMHgyYTgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDJhODAwNCwgODE5MSwgUklfRTFIRTJfT0ZGTElORSB9LAorCXsgMHgyYjAwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDJiMDAwNCwgMTUsIFJJX0UxSF9PRkZMSU5FIH0sCisJeyAweDJiMDA0MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgyYjAwNDQsIDIzOSwgUklfRTFIX09GRkxJTkUgfSwKKwl7IDB4MmIwNDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjA0MDQsIDI1NSwgUklfRTFIX09GRkxJTkUgfSwKKwl7IDB4MmIwODAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjA4NDAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHgyYjBjMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDJiMTAwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyYjEwNDAsIDEsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4MmIxNDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDJiMTQ0MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgyYjE0ODAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHgyYjE0YzAsIDEsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4MmIxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDJiMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MmIyMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDJiMjQwMCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgyYjI0MDQsIDU2MzEsIFJJX0UyX09GRkxJTkUgfSwKKwl7IDB4MmI4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjgwNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4MDgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjgwYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4MTAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjgxNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4MTgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjgxYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4MjAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjgyNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4MjgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjgyYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4MzAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjgzNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4MzgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjgzYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4NDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjg0NDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4NDgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjg0YzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4NTAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjg1NDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4NTgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjg1YzAsIDE5LCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MmI4ODAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjg4NDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4ODgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjg4YzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4OTAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjg5NDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4OTgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjg5YzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4YTAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjhhNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4YTgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjhhYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4YjAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjhiNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4YjgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjhiYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4YzAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjhjNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4YzgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjhjYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4Y2M0LCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDJiOGQwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyYjhkNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDJiOGQ4MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyYjhkYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDJiOGUwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyYjhlNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDJiOGU4MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyYjhlODQsIDEsIFJJX0UyX09OTElORSB9LCB7IDB4MmI4ZWMwLCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwKKwl7IDB4MmI4ZjAwLCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweDJiOGY0MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sCisJeyAweDJiOGY4MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgyYjhmYzAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHgyYjhmYzQsIDIsIFJJX0UyX09OTElORSB9LCB7IDB4MmI4ZmQwLCA2LCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MmI5MDAwLCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDJiOTA0MCwgMywgUklfRTJfT05MSU5FIH0sCisJeyAweDJiOTQwMCwgMTQsIFJJX0UyX09OTElORSB9LCB7IDB4MmI5NDNjLCAxOSwgUklfRTJfT05MSU5FIH0sCisJeyAweDJiOTQ5MCwgMTAsIFJJX0UyX09OTElORSB9LCB7IDB4MmMwMDAwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMwMDAwMCwgNjUsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMwMDE0YywgMiwgUklfRTFIRTJfT05MSU5FIH0sCiAJeyAweDMwMDIwMCwgNTgsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMwMDM0MCwgNCwgUklfQUxMX09OTElORSB9LAotCXsgMHgzMDA0MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMwMDQwNCwgMjU1LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgzMDAzODAsIDEsIFJJX0UyX09OTElORSB9LCB7IDB4MzAwMzg4LCAxLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MzAwMzkwLCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDMwMDM5OCwgMSwgUklfRTJfT05MSU5FIH0sCisJeyAweDMwMDNhMCwgMSwgUklfRTJfT05MSU5FIH0sIHsgMHgzMDAzYTgsIDIsIFJJX0UyX09OTElORSB9LAorCXsgMHgzMDA0MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMwMDQwNCwgMjU1LCBSSV9FMUUxSF9PRkZMSU5FIH0sCiAJeyAweDMwMjAwMCwgNCwgUklfQUxMX09OTElORSB9LCB7IDB4MzAyMDEwLCAyMDQ0LCBSSV9BTExfT0ZGTElORSB9LAotCXsgMHgzMjAwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMyMDAwNCwgMTAyMywgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4MzIxMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMjEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FIH0sCi0JeyAweDMyNTgwMCwgMjU2MCwgUklfRTFIX09GRkxJTkUgfSwgeyAweDMyODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FIH0sCi0JeyAweDMyODEwMCwgNTM2LCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MzI4OTYwLCAxLCBSSV9FMUhfT05MSU5FIH0sCi0JeyAweDMyODk2NCwgODEwMywgUklfRTFIX09GRkxJTkUgfSwgeyAweDMzMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORSB9LAotCXsgMHgzMzFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkUgfSwgeyAweDMzMjAwMCwgMSwgUklfQUxMX09GRkxJTkUgfSwKLQl7IDB4MzMyNDAwLCA2NCwgUklfRTFIX09GRkxJTkUgfSwgeyAweDMzODIwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgzMjAwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMyMDAwNCwgNTYzMSwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MzI1ODAwLCAyNTYwLCBSSV9FMUhFMl9PRkZMSU5FIH0sIHsgMHgzMjgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzI4MDA0LCA4MTkxLCBSSV9FMUhFMl9PRkZMSU5FIH0sIHsgMHgzMzAwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzMwMDA0LCAxNSwgUklfRTFIX09GRkxJTkUgfSwgeyAweDMzMDA0MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sCisJeyAweDMzMDA0NCwgMjM5LCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MzMwNDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMzMDQwNCwgMjU1LCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MzMwODAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMzMDg0MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgzMzBjMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzMxMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzEwNDAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHgzMzE0MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMzMTQ0MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sCisJeyAweDMzMTQ4MCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgzMzE0YzAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHgzMzE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkUgfSwgeyAweDMzMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgzMzIwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMzMjQwMCwgMSwgUklfRTFIRTJfT05MSU5FIH0sCisJeyAweDMzMjQwNCwgNTYzMSwgUklfRTJfT0ZGTElORSB9LCB7IDB4MzM4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMzODA0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzM4MDgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMzODBjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzM4MTAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMzODE0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzM4MTgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMzODFjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzM4MjAwLCAxLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweDMzODI0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzM4MjgwLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDMzODJjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzM4YTAwLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDMzOGE4MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzQwMDAwLCAyLCBSSV9BTExfT05MSU5FIH0KKwl7IDB4MzM4MmMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzgzMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4MzQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzgzODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4M2MwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzg0MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4NDQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzg0ODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4NGMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzg1MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4NTQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzg1ODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4NWMwLCAxOSwgUklfRTJfT05MSU5FIH0sIHsgMHgzMzg4MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4ODQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzg4ODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4OGMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzg5MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4OTQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzg5ODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4OWMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzhhMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4YTQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzhhODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4YWMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzhiMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4YjQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzhiODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4YmMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzhjMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4YzQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzhjODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4Y2MwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzhjYzQsIDEsIFJJX0UyX09OTElORSB9LAorCXsgMHgzMzhkMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMzOGQ0MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgzMzhkODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMzOGRjMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgzMzhlMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMzOGU0MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgzMzhlODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMzOGU4NCwgMSwgUklfRTJfT05MSU5FIH0sCisJeyAweDMzOGVjMCwgMSwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgzMzhmMDAsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHgzMzhmNDAsIDEsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4MzM4ZjgwLCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwKKwl7IDB4MzM4ZmMwLCAxLCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweDMzOGZjNCwgMiwgUklfRTJfT05MSU5FIH0sCisJeyAweDMzOGZkMCwgNiwgUklfRTJfT05MSU5FIH0sIHsgMHgzMzkwMDAsIDEsIFJJX0UyX09OTElORSB9LAorCXsgMHgzMzkwNDAsIDMsIFJJX0UyX09OTElORSB9LCB7IDB4MzQwMDAwLCAyLCBSSV9BTExfT05MSU5FIH0sCiB9OwogCi0KLSNkZWZpbmUgSURMRV9SRUdTX0NPVU5UCQkJMjc3CisjZGVmaW5lIElETEVfUkVHU19DT1VOVAkJCTIzNwogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYWRkciBpZGxlX2FkZHJzW0lETEVfUkVHU19DT1VOVF0gPSB7Ci0JeyAweDIxMTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIxMjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjEyYywgNCwgUklfQUxMX09OTElORSB9LCB7IDB4MjgxNCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgyODFjLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHhhMzhjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIxMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIxMTAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjExYywgOCwgUklfQUxMX09OTElORSB9LCB7IDB4MjgxNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyODFjLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODU0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDI4NWMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDkwMTAsIDcsIFJJX0UyX09OTElORSB9LAorCXsgMHg5MDMwLCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDkwNjgsIDE2LCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4OTIzMCwgMiwgUklfRTJfT05MSU5FIH0sIHsgMHg5MjQ0LCAxLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4OTI5OCwgMSwgUklfRTJfT05MSU5FIH0sIHsgMHg5MmE4LCAxLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4YTM4YywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YTNjNCwgMSwgUklfRTFIRTJfT05MSU5FIH0sCiAJeyAweGE0MDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGE0MmMsIDEyLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGE2MDAsIDUsIFJJX0UxSF9PTkxJTkUgfSwgeyAweGE2MTgsIDEsIFJJX0UxSF9PTkxJTkUgfSwKLQl7IDB4YzA5YywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAzYjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTAzYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwM2QwLCAxLCBSSV9FMUhfT05MSU5FIH0sCi0JeyAweDIwMjFjLCAxMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjAyYTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjAyYjgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwNDA0LCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDIwNDBjLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDQxYywgMiwgUklfQUxMX09OTElORSB9LAotCXsgMHg0MDE1NCwgMTQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQwMTk4LCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDQwNGFjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MDRiYywgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHg0MjI5MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NDIyYTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4NDIyYjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQyNTQ4LCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDQyNTUwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MjU1OCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHg1MDE2MCwgOCwgUklfQUxMX09OTElORSB9LCB7IDB4NTAxZDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4NTAxZTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDUwMjA0LCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDUwMjBjLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHg1MDIxYywgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHg2MDA5MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NjAxMWMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4NjAxMmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGMxMDFjLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGMxMDJjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhjMjI5MCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHhjMjJhMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YzIyYjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4YzI1NDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGMyNTUwLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGMyNTU4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhjNDI5NCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHhjNDJhNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YzQyYjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4YzQ1NTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGM0NTU4LCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGM0NTYwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhkMDE2YywgOCwgUklfQUxMX09OTElORSB9LAotCXsgMHhkMDFkOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4ZDAxZTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4ZDAyMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGQwMjBjLCAzLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweGUwMTU0LCA4LCBSSV9BTExfT05MSU5FIH0sIHsgMHhlMDFjOCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHhlMDFkOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4ZTAyMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4ZTAyMGMsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGUwMjFjLCAyLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwMTAxNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAxMDMwLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwMTA0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAyMDU4LCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEwMjA4MCwgMTYsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwMzAwNCwgMiwgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDMwNjgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwMzA3OCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgxMDMwODgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwMzA5YywgMiwgUklfRTFIX09OTElORSB9LAorCXsgMHhhNjAwLCA1LCBSSV9FMUhFMl9PTkxJTkUgfSwgeyAweGE2MTgsIDEsIFJJX0UxSEUyX09OTElORSB9LAorCXsgMHhhNzE0LCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweGE3MjAsIDEsIFJJX0UyX09OTElORSB9LAorCXsgMHhhNzUwLCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweGMwOWMsIDEsIFJJX0UxRTFIX09OTElORSB9LAorCXsgMHgxMDNiMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAzYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTAzZDAsIDEsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDE4M2JjLCAxLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTgzY2MsIDEsIFJJX0UyX09OTElORSB9LCB7IDB4MjAyMWMsIDExLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIwMmE4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDJiOCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMDQwNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjA0MGMsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjA0MWMsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQwMTU0LCAxNCwgUklfQUxMX09OTElORSB9LAorCXsgMHg0MDE5OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NDA0YWMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NDA0YmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQyMjkwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDQyMmEwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MjJiMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg0MjU0OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NDI1NTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NDI1NTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDUwMTYwLCA4LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDUwMWQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg1MDFlMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg1MDIwNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NTAyMGMsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NTAyMWMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDYwMDkwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDYwMTFjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg2MDEyYywgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhjMTAxYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YzEwMmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzIyOTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGMyMmEwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGMyMmIwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhjMjU0OCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhjMjU1MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YzI1NTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzQyOTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGM0MmE0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGM0MmI0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhjNDU1MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhjNDU1OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YzQ1NjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4ZDAxNmMsIDgsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGQwMWQ4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGQwMWU4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhkMDIwNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhkMDIwYywgMywgUklfQUxMX09OTElORSB9LCB7IDB4ZTAxNTQsIDgsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4ZTAxYzgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGUwMWQ4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGUwMjA0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhlMDIwYywgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHhlMDIxYywgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTAxMDE0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMTAzMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAxMDQwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMjA1OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAyMDgwLCAxNiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDMwMDQsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwMzA2OCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDMwNzgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwMzA4OCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDMwOWMsIDIsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4MTAzMGI4LCAyLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTAzMGNjLCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDEwMzBlMCwgMSwgUklfRTJfT05MSU5FIH0sCiAJeyAweDEwNDAwNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTA0MDE4LCAxLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweDEwNDAyMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTA0MDNjLCAxLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweDEwNDBmYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTA0MTBjLCAxLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweDEwNDQwMCwgNjQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwNDgwMCwgNjQsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MDAwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwMTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MDIwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwMzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MDQwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwNTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MDYwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwNzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MDgwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwOTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MGEwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwYjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MGMwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwZDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MGUwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwZjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MTAwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxMTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MTIwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxMzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MTQwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxNTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MTYwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxNzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MTgwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxOTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MWEwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxYjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MWMwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxZDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MWUwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxZjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MjAwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyMTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MjIwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyMzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MjQwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyNTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MjYwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyNzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MjgwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyOTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MmEwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyYjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MmMwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyZDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MmUwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyZjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MzAwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzMTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MzIwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzMzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MzQwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzNTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MzYwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzNzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1MzgwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzOTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1M2EwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzYjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1M2MwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzZDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA1M2UwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzZjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTA4MDk0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjAxYjAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTIwMzJjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjAzNmMsIDMsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTIwNDA4LCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA0MTQsIDE1LCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEyMDQ3OCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwNTJjLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEyMDU2NCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTIwNTdjLCAxLCBSSV9BTExfT05MSU5FIH0sCi0JeyAweDEyMDU4YywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwNjA4LCAxLCBSSV9FMUhfT05MSU5FIH0sCi0JeyAweDEyMDgwOCwgMSwgUklfRTFfT05MSU5FIH0sIHsgMHgxMjA4MGMsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MDAwLCAyNTYsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwODA5NCwgMSwgUklfRTFFMUhfT05MSU5FIH0sCisJeyAweDEyMDFiMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMzJjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDM2YywgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTIwNDA4LCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDQxNCwgMTUsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMDQ3OCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMjA1MmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMDU2NCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMjA1N2MsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMDU4YywgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMjA2MDgsIDEsIFJJX0UxSEUyX09OTElORSB9LCB7IDB4MTIwNzM4LCAxLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTIwNzc4LCAyLCBSSV9FMl9PTkxJTkUgfSwgeyAweDEyMDgwOCwgMywgUklfQUxMX09OTElORSB9LAogCXsgMHgxMjA4MTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMDgyMCwgMSwgUklfQUxMX09OTElORSB9LAogCXsgMHgxMjA4MjgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMDgzMCwgMSwgUklfQUxMX09OTElORSB9LAogCXsgMHgxMjA4MzgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMDg0MCwgMSwgUklfQUxMX09OTElORSB9LApAQCAtNDYyLDQ4ICs1ODAsNTAgQEAKIAl7IDB4MTIwOGQ4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4ZTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKIAl7IDB4MTIwOGU4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4ZjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKIAl7IDB4MTIwOGY4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA5MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTIwOTA4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNDAwNWMsIDIsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTQwMGQwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNDAwZTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTQwMWM4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNDAyMDAsIDYsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTYxMDFjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjEwMmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTY0MDE0LCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjQwZjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTY2MjkwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjYyYTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTY2MmIwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjY1NDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTY2NTUwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjY1NTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTY4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjgwMDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTY4MDEwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjgwMTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTY4MDI4LCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjgwNTgsIDQsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTY4MDcwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjgyMzgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTY4MmQwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjgyZTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTY4MzAwLCA2NywgUklfQUxMX09OTElORSB9LCB7IDB4MTY4NDEwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDkwOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwOTQwLCA1LCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTMwMDMwLCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDEzMDA0YywgMywgUklfRTJfT05MSU5FIH0sCisJeyAweDEzMDA2NCwgMiwgUklfRTJfT05MSU5FIH0sIHsgMHgxMzAwOWMsIDEsIFJJX0UyX09OTElORSB9LAorCXsgMHgxMzAxMzAsIDEsIFJJX0UyX09OTElORSB9LCB7IDB4MTMwMTZjLCAxLCBSSV9FMl9PTkxJTkUgfSwKKwl7IDB4MTMwMzAwLCAxLCBSSV9FMl9PTkxJTkUgfSwgeyAweDEzMDQ4MCwgMSwgUklfRTJfT05MSU5FIH0sCisJeyAweDE0MDA1YywgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTQwMGQwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE0MDBlMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTQwMWM4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE0MDIwMCwgNiwgUklfQUxMX09OTElORSB9LCB7IDB4MTYxMDFjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2MTAyYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MDE0LCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NDBmMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY2MjkwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NjJhMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY2MmIwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NjU0OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY2NTUwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NjU1OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2ODAwOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4MDEwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2ODAxOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4MDI4LCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2ODA1OCwgNCwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4MDcwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2ODIzOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4MmQwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2ODJlMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4MzAwLCAyLCBSSV9FMUUxSF9PTkxJTkUgfSwKKwl7IDB4MTY4MzA4LCA2NSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4NDEwLCAyLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweDE2ODQzOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4NDQ4LCAxLCBSSV9BTExfT05MSU5FIH0sCiAJeyAweDE2OGEwMCwgMTI4LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNmUyMDAsIDEyOCwgUklfRTFIX09OTElORSB9LAotCXsgMHgxNmU0MDQsIDIsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDE2ZTU4NCwgNzAsIFJJX0UxSF9PTkxJTkUgfSwKLQl7IDB4MTcwMGE0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNzAwYWMsIDIsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTcwMGMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNzAxNzQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTcwMTg0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODAwZjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTgwMTA0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODAxMTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTgwMTI0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODAyNmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MTgwMmEwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MWFhMDAwLCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgxYjgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MWI4MDQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjgwODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MWI4MGMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDAxMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjAwMTE0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDAxMjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjAwMTM0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDAyNmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjAwMmEwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjI3MDAwLCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgyMzgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjM4MDQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzgwODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjM4MGMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODAxMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjgwMTE0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODAxMjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjgwMTM0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODAyNmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MjgwMmEwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MmE5MDAwLCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgyYjgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MmI4MDQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjgwODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKLQl7IDB4MmI4MGMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMDAxMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTZlNDA0LCAyLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgxNmU1ODQsIDY0LCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDE2ZTY4NCwgMiwgUklfRTFIRTJfT05MSU5FIH0sIHsgMHgxNmU2OGMsIDQsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MTZlNmZjLCA0LCBSSV9FMl9PTkxJTkUgfSwgeyAweDE3MDBhNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNzAwYWMsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE3MDBjMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNzAxNzQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE3MDE4NCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxODAwZjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE4MDEwNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxODAxMTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE4MDEyNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxODAyNmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE4MDJhMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxYjgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFiODA0MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxYjgwODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFiODBjMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMDAxMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMDExNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMDAxMjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMDEzNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMDAyNmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMDJhMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMzgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIzODA0MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMzgwODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIzODBjMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyODAxMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDI4MDExNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyODAxMjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDI4MDEzNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyODAyNmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDI4MDJhMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyYjgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDJiODA0MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyYjgwODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMwMDEwNCwgMSwgUklfQUxMX09OTElORSB9LAogCXsgMHgzMDAxMTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMwMDEyNCwgMSwgUklfQUxMX09OTElORSB9LAogCXsgMHgzMDAxMzQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMwMDI2YywgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgzMDAyYTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMyMTAwMCwgMSwgUklfQUxMX09OTElORSB9LAotCXsgMHgzMjg5NjAsIDEsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDMzODAwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgzMDAyYTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMzODAwMCwgMSwgUklfQUxMX09OTElORSB9LAogCXsgMHgzMzgwNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMzODA4MCwgMSwgUklfQUxMX09OTElORSB9LAogCXsgMHgzMzgwYzAsIDEsIFJJX0FMTF9PTkxJTkUgfQogfTsKQEAgLTUxNSw3ICs2MzUsNiBAQAogCXsgMHgxYjBjMDAsIDE5MiwgMSwgcmVhZF9yZWdfZTFfMCwgUklfRTFfT0ZGTElORSB9CiB9OwogCi0KICNkZWZpbmUgV1JFR1NfQ09VTlRfRTFICQkJMQogc3RhdGljIGNvbnN0IHUzMiByZWFkX3JlZ19lMWhfMFtdID0geyAweDFiMTA0MCwgMHgxYjEwMDAgfTsKIApAQCAtNTMwLDIyICs2NDksNTMgQEAKIAl7IDB4MWIwYzAwLCAxMjgsIDIsIHJlYWRfcmVnX2UyXzAsIFJJX0UyX09GRkxJTkUgfQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkdW1wX3NpZ24gZHVtcF9zaWduX2FsbCA9IHsgMHg0OWFhOTNlZSwgMHg0MDgzNSwgMHgyMiB9OwotCitzdGF0aWMgY29uc3Qgc3RydWN0IGR1bXBfc2lnbiBkdW1wX3NpZ25fYWxsID0geyAweDRkMThiMGE0LCAweDYwMDEwLCAweDNhIH07CiAKICNkZWZpbmUgVElNRVJfUkVHU19DT1VOVF9FMQkJMgotc3RhdGljIGNvbnN0IHUzMiB0aW1lcl9zdGF0dXNfcmVnc19lMVtUSU1FUl9SRUdTX0NPVU5UX0UxXSA9Ci0JeyAweDE2NDAxNCwgMHgxNjQwMTggfTsKLXN0YXRpYyBjb25zdCB1MzIgdGltZXJfc2Nhbl9yZWdzX2UxW1RJTUVSX1JFR1NfQ09VTlRfRTFdID0KLQl7IDB4MTY0MGQwLCAweDE2NDBkNCB9OwogCitzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3N0YXR1c19yZWdzX2UxW1RJTUVSX1JFR1NfQ09VTlRfRTFdID0geworCTB4MTY0MDE0LCAweDE2NDAxOCB9Oworc3RhdGljIGNvbnN0IHUzMiB0aW1lcl9zY2FuX3JlZ3NfZTFbVElNRVJfUkVHU19DT1VOVF9FMV0gPSB7CisJMHgxNjQwZDAsIDB4MTY0MGQ0IH07CiAKICNkZWZpbmUgVElNRVJfUkVHU19DT1VOVF9FMUgJCTIKLXN0YXRpYyBjb25zdCB1MzIgdGltZXJfc3RhdHVzX3JlZ3NfZTFoW1RJTUVSX1JFR1NfQ09VTlRfRTFIXSA9Ci0JeyAweDE2NDAxNCwgMHgxNjQwMTggfTsKLXN0YXRpYyBjb25zdCB1MzIgdGltZXJfc2Nhbl9yZWdzX2UxaFtUSU1FUl9SRUdTX0NPVU5UX0UxSF0gPQotCXsgMHgxNjQwZDAsIDB4MTY0MGQ0IH07CiAKK3N0YXRpYyBjb25zdCB1MzIgdGltZXJfc3RhdHVzX3JlZ3NfZTFoW1RJTUVSX1JFR1NfQ09VTlRfRTFIXSA9IHsKKwkweDE2NDAxNCwgMHgxNjQwMTggfTsKK3N0YXRpYyBjb25zdCB1MzIgdGltZXJfc2Nhbl9yZWdzX2UxaFtUSU1FUl9SRUdTX0NPVU5UX0UxSF0gPSB7CisJMHgxNjQwZDAsIDB4MTY0MGQ0IH07CisKKyNkZWZpbmUgVElNRVJfUkVHU19DT1VOVF9FMgkJMgorCitzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3N0YXR1c19yZWdzX2UyW1RJTUVSX1JFR1NfQ09VTlRfRTJdID0geworCTB4MTY0MDE0LCAweDE2NDAxOCB9Oworc3RhdGljIGNvbnN0IHUzMiB0aW1lcl9zY2FuX3JlZ3NfZTJbVElNRVJfUkVHU19DT1VOVF9FMl0gPSB7CisJMHgxNjQwZDAsIDB4MTY0MGQ0IH07CisKKyNkZWZpbmUgUEFHRV9NT0RFX1ZBTFVFU19FMSAwCisKKyNkZWZpbmUgUEFHRV9SRUFEX1JFR1NfRTEgMAorCisjZGVmaW5lIFBBR0VfV1JJVEVfUkVHU19FMSAwCisKK3N0YXRpYyBjb25zdCB1MzIgcGFnZV92YWxzX2UxW10gPSB7IDAgfTsKKworc3RhdGljIGNvbnN0IHUzMiBwYWdlX3dyaXRlX3JlZ3NfZTFbXSA9IHsgMCB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19hZGRyIHBhZ2VfcmVhZF9yZWdzX2UxW10gPSB7IHsgMHgwLCAwLCBSSV9FMV9PTkxJTkUgfSB9OworCisjZGVmaW5lIFBBR0VfTU9ERV9WQUxVRVNfRTFIIDAKKworI2RlZmluZSBQQUdFX1JFQURfUkVHU19FMUggMAorCisjZGVmaW5lIFBBR0VfV1JJVEVfUkVHU19FMUggMAorCitzdGF0aWMgY29uc3QgdTMyIHBhZ2VfdmFsc19lMWhbXSA9IHsgMCB9OworCitzdGF0aWMgY29uc3QgdTMyIHBhZ2Vfd3JpdGVfcmVnc19lMWhbXSA9IHsgMCB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19hZGRyIHBhZ2VfcmVhZF9yZWdzX2UxaFtdID0geworCXsgMHgwLCAwLCBSSV9FMUhfT05MSU5FIH0gfTsKIAogI2RlZmluZSBQQUdFX01PREVfVkFMVUVTX0UyIDIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jCmluZGV4IDk5YzY3MmQuLjViNDRhOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9ldGh0b29sLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJibngyeC5oIgogI2luY2x1ZGUgImJueDJ4X2Ntbi5oIgogI2luY2x1ZGUgImJueDJ4X2R1bXAuaCIKKyNpbmNsdWRlICJibngyeF9pbml0LmgiCiAKIC8qIE5vdGU6IGluIHRoZSBmb3JtYXQgc3RyaW5ncyBiZWxvdyAlcyBpcyByZXBsYWNlZCBieSB0aGUgcXVldWUtbmFtZSB3aGljaCBpcwogICogZWl0aGVyIGl0cyBpbmRleCBvciAnZmNvZScgZm9yIHRoZSBmY29lIHF1ZXVlLiBNYWtlIHN1cmUgdGhlIGZvcm1hdCBzdHJpbmcKQEAgLTQ3Miw3ICs0NzMsNyBAQAogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByZWdkdW1wX2xlbiA9IDA7Ci0JaW50IGk7CisJaW50IGksIGosIGs7CiAKIAlpZiAoQ0hJUF9JU19FMShicCkpIHsKIAkJZm9yIChpID0gMDsgaSA8IFJFR1NfQ09VTlQ7IGkrKykKQEAgLTUwMiw2ICs1MDMsMTUgQEAKIAkJCWlmIChJU19FMl9PTkxJTkUod3JlZ19hZGRyc19lMltpXS5pbmZvKSkKIAkJCQlyZWdkdW1wX2xlbiArPSB3cmVnX2FkZHJzX2UyW2ldLnNpemUgKgogCQkJCQkoMSArIHdyZWdfYWRkcnNfZTJbaV0ucmVhZF9yZWdzX2NvdW50KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgUEFHRV9NT0RFX1ZBTFVFU19FMjsgaSsrKQorCQkJZm9yIChqID0gMDsgaiA8IFBBR0VfV1JJVEVfUkVHU19FMjsgaisrKSB7CisJCQkJZm9yIChrID0gMDsgayA8IFBBR0VfUkVBRF9SRUdTX0UyOyBrKyspCisJCQkJCWlmIChJU19FMl9PTkxJTkUocGFnZV9yZWFkX3JlZ3NfZTJba10uCisJCQkJCQkJIGluZm8pKQorCQkJCQkJcmVnZHVtcF9sZW4gKz0KKwkJCQkJCXBhZ2VfcmVhZF9yZWdzX2UyW2tdLnNpemU7CisJCQl9CiAJfQogCXJlZ2R1bXBfbGVuICo9IDQ7CiAJcmVnZHVtcF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBkdW1wX2hkcik7CkBAIC01MzksNiArNTQ5LDEyIEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKQogCQlyZXR1cm47CiAKKwkvKiBEaXNhYmxlIHBhcml0eSBhdHRlbnRpb25zIGFzIGxvbmcgYXMgZm9sbG93aW5nIGR1bXAgbWF5CisJICogY2F1c2UgZmFsc2UgYWxhcm1zIGJ5IHJlYWRpbmcgbmV2ZXIgd3JpdHRlbiByZWdpc3RlcnMuIFdlCisJICogd2lsbCByZS1lbmFibGUgcGFyaXR5IGF0dGVudGlvbnMgcmlnaHQgYWZ0ZXIgdGhlIGR1bXAuCisJICovCisJYm54MnhfZGlzYWJsZV9ibG9ja3NfcGFyaXR5KGJwKTsKKwogCWR1bXBfaGRyLmhkcl9zaXplID0gKHNpemVvZihzdHJ1Y3QgZHVtcF9oZHIpIC8gNCkgLSAxOwogCWR1bXBfaGRyLmR1bXBfc2lnbiA9IGR1bXBfc2lnbl9hbGw7CiAJZHVtcF9oZHIueHN0b3JtX3dhaXRwID0gUkVHX1JEKGJwLCBYU1RPUk1fV0FJVFBfQUREUik7CkBAIC01ODAsNiArNTk2LDEwIEBACiAKIAkJYm54MnhfcmVhZF9wYWdlc19yZWdzX2UyKGJwLCBwKTsKIAl9CisJLyogUmUtZW5hYmxlIHBhcml0eSBhdHRlbnRpb25zICovCisJYm54MnhfY2xlYXJfYmxvY2tzX3Bhcml0eShicCk7CisJaWYgKENISVBfUEFSSVRZX0VOQUJMRUQoYnApKQorCQlibngyeF9lbmFibGVfYmxvY2tzX3Bhcml0eShicCk7CiB9CiAKICNkZWZpbmUgUEhZX0ZXX1ZFUl9MRU4JCQkyMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaW5pdC5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaW5pdC5oCmluZGV4IGE5ZDU0ODcuLjVhMjY4ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2luaXQuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9pbml0LmgKQEAgLTE5Miw1ICsxOTIsMjI1IEBACiAJdTY0IG5leHQ7CiB9OwogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBQYXJpdHkgY29uZmlndXJhdGlvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQkxPQ0tfUFJUWV9JTkZPKGJsb2NrLCBlbl9tYXNrLCBtMSwgbTFoLCBtMikgXAoreyBcCisJYmxvY2sjI19SRUdfIyNibG9jayMjX1BSVFlfTUFTSywgXAorCWJsb2NrIyNfUkVHXyMjYmxvY2sjI19QUlRZX1NUU19DTFIsIFwKKwllbl9tYXNrLCB7bTEsIG0xaCwgbTJ9LCAjYmxvY2sgXAorfQorCisjZGVmaW5lIEJMT0NLX1BSVFlfSU5GT18wKGJsb2NrLCBlbl9tYXNrLCBtMSwgbTFoLCBtMikgXAoreyBcCisJYmxvY2sjI19SRUdfIyNibG9jayMjX1BSVFlfTUFTS18wLCBcCisJYmxvY2sjI19SRUdfIyNibG9jayMjX1BSVFlfU1RTX0NMUl8wLCBcCisJZW5fbWFzaywge20xLCBtMWgsIG0yfSwgI2Jsb2NrIl8wIiBcCit9CisKKyNkZWZpbmUgQkxPQ0tfUFJUWV9JTkZPXzEoYmxvY2ssIGVuX21hc2ssIG0xLCBtMWgsIG0yKSBcCit7IFwKKwlibG9jayMjX1JFR18jI2Jsb2NrIyNfUFJUWV9NQVNLXzEsIFwKKwlibG9jayMjX1JFR18jI2Jsb2NrIyNfUFJUWV9TVFNfQ0xSXzEsIFwKKwllbl9tYXNrLCB7bTEsIG0xaCwgbTJ9LCAjYmxvY2siXzEiIFwKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJdTMyIG1hc2tfYWRkcjsKKwl1MzIgc3RzX2Nscl9hZGRyOworCXUzMiBlbl9tYXNrOwkJLyogTWFzayB0byBlbmFibGUgcGFyaXR5IGF0dGVudGlvbnMgKi8KKwlzdHJ1Y3QgeworCQl1MzIgZTE7CQkvKiA1NzcxMCAqLworCQl1MzIgZTFoOwkvKiA1NzcxMSAqLworCQl1MzIgZTI7CQkvKiA1NzcxMiAqLworCX0gcmVnX21hc2s7CQkvKiBSZWdpc3RlciBtYXNrIChhbGwgdmFsaWQgYml0cykgKi8KKwljaGFyIG5hbWVbN107CQkvKiBCbG9jaydzIGxvbmdlc3QgbmFtZSBpcyA2IGNoYXJhY3RlcnMgbG9uZworCQkJCSAqIChuYW1lICsgc3VmZml4KQorCQkJCSAqLworfSBibngyeF9ibG9ja3NfcGFyaXR5X2RhdGFbXSA9IHsKKwkvKiBiaXQgMTkgbWFza2VkICovCisJLyogUkVHX1dSKGJwLCBQWFBfUkVHX1BYUF9QUlRZX01BU0ssIDB4ODAwMDApOyAqLworCS8qIGJpdCA1LDE4LDIwLTMxICovCisJLyogUkVHX1dSKGJwLCBQWFAyX1JFR19QWFAyX1BSVFlfTUFTS18wLCAweGZmZjQwMDIwKTsgKi8KKwkvKiBiaXQgNSAqLworCS8qIFJFR19XUihicCwgUFhQMl9SRUdfUFhQMl9QUlRZX01BU0tfMSwgMHgyMCk7CSovCisJLyogUkVHX1dSKGJwLCBIQ19SRUdfSENfUFJUWV9NQVNLLCAweDApOyAqLworCS8qIFJFR19XUihicCwgTUlTQ19SRUdfTUlTQ19QUlRZX01BU0ssIDB4MCk7ICovCisKKwkvKiBCbG9jayBJR1UsIE1JU0MsIFBYUCBhbmQgUFhQMiBwYXJpdHkgZXJyb3JzIGFzIGxvbmcgYXMgd2UgZG9uJ3QKKwkgKiB3YW50IHRvIGhhbmRsZSAic3lzdGVtIGtpbGwiIGZsb3cgYXQgdGhlIG1vbWVudC4KKwkgKi8KKwlCTE9DS19QUlRZX0lORk8oUFhQLCAweDNmZmZmZmYsIDB4M2ZmZmZmZiwgMHgzZmZmZmZmLCAweDNmZmZmZmYpLAorCUJMT0NLX1BSVFlfSU5GT18wKFBYUDIsCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpLAorCUJMT0NLX1BSVFlfSU5GT18xKFBYUDIsCTB4N2ZmLCAweDdmLCAweDdmLCAweDdmZiksCisJQkxPQ0tfUFJUWV9JTkZPKEhDLCAweDcsIDB4NywgMHg3LCAwKSwKKwlCTE9DS19QUlRZX0lORk8oSUdVLCAweDdmZiwgMCwgMCwgMHg3ZmYpLAorCUJMT0NLX1BSVFlfSU5GTyhNSVNDLCAweDEsIDB4MSwgMHgxLCAweDEpLAorCUJMT0NLX1BSVFlfSU5GTyhRTSwgMCwgMHgxZmYsIDB4ZmZmLCAweGZmZiksCisJQkxPQ0tfUFJUWV9JTkZPKERPUlEsIDAsIDB4MywgMHgzLCAweDMpLAorCXtHUkNCQVNFX1VQQiArIFBCX1JFR19QQl9QUlRZX01BU0ssCisJCUdSQ0JBU0VfVVBCICsgUEJfUkVHX1BCX1BSVFlfU1RTX0NMUiwgMCwKKwkJezB4ZiwgMHhmLCAweGZ9LCAiVVBCIn0sCisJe0dSQ0JBU0VfWFBCICsgUEJfUkVHX1BCX1BSVFlfTUFTSywKKwkJR1JDQkFTRV9YUEIgKyBQQl9SRUdfUEJfUFJUWV9TVFNfQ0xSLCAwLAorCQl7MHhmLCAweGYsIDB4Zn0sICJYUEIifSwKKwlCTE9DS19QUlRZX0lORk8oU1JDLCAweDQsIDB4NywgMHg3LCAweDcpLAorCUJMT0NLX1BSVFlfSU5GTyhDRFUsIDAsIDB4MWYsIDB4MWYsIDB4MWYpLAorCUJMT0NLX1BSVFlfSU5GTyhDRkMsIDAsIDB4ZiwgMHhmLCAweGYpLAorCUJMT0NLX1BSVFlfSU5GTyhEQkcsIDAsIDB4MSwgMHgxLCAweDEpLAorCUJMT0NLX1BSVFlfSU5GTyhETUFFLCAwLCAweGYsIDB4ZiwgMHhmKSwKKwlCTE9DS19QUlRZX0lORk8oQlJCMSwgMCwgMHhmLCAweGYsIDB4ZiksCisJQkxPQ0tfUFJUWV9JTkZPKFBSUywgKDE8PDYpLCAweGZmLCAweGZmLCAweGZmKSwKKwlCTE9DS19QUlRZX0lORk8oVFNETSwgMHgxOCwgMHg3ZmYsIDB4N2ZmLCAweDdmZiksCisJQkxPQ0tfUFJUWV9JTkZPKENTRE0sIDB4OCwgMHg3ZmYsIDB4N2ZmLCAweDdmZiksCisJQkxPQ0tfUFJUWV9JTkZPKFVTRE0sIDB4MzgsIDB4N2ZmLCAweDdmZiwgMHg3ZmYpLAorCUJMT0NLX1BSVFlfSU5GTyhYU0RNLCAweDgsIDB4N2ZmLCAweDdmZiwgMHg3ZmYpLAorCUJMT0NLX1BSVFlfSU5GT18wKFRTRU0sIDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpLAorCUJMT0NLX1BSVFlfSU5GT18xKFRTRU0sIDAsIDB4MywgMHgxZiwgMHgzZiksCisJQkxPQ0tfUFJUWV9JTkZPXzAoVVNFTSwgMCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiksCisJQkxPQ0tfUFJUWV9JTkZPXzEoVVNFTSwgMCwgMHgzLCAweDFmLCAweDFmKSwKKwlCTE9DS19QUlRZX0lORk9fMChDU0VNLCAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmKSwKKwlCTE9DS19QUlRZX0lORk9fMShDU0VNLCAwLCAweDMsIDB4MWYsIDB4MWYpLAorCUJMT0NLX1BSVFlfSU5GT18wKFhTRU0sIDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpLAorCUJMT0NLX1BSVFlfSU5GT18xKFhTRU0sIDAsIDB4MywgMHgxZiwgMHgzZiksCit9OworCisKKy8qIFsyOF0gTUNQIExhdGNoZWQgcm9tX3Bhcml0eQorICogWzI5XSBNQ1AgTGF0Y2hlZCB1bXBfcnhfcGFyaXR5CisgKiBbMzBdIE1DUCBMYXRjaGVkIHVtcF90eF9wYXJpdHkKKyAqIFszMV0gTUNQIExhdGNoZWQgc2NwYWRfcGFyaXR5CisgKi8KKyNkZWZpbmUgTUlTQ19BRVVfRU5BQkxFX01DUF9QUlRZX0JJVFMJXAorCShBRVVfSU5QVVRTX0FUVE5fQklUU19NQ1BfTEFUQ0hFRF9ST01fUEFSSVRZIHwgXAorCSBBRVVfSU5QVVRTX0FUVE5fQklUU19NQ1BfTEFUQ0hFRF9VTVBfUlhfUEFSSVRZIHwgXAorCSBBRVVfSU5QVVRTX0FUVE5fQklUU19NQ1BfTEFUQ0hFRF9VTVBfVFhfUEFSSVRZIHwgXAorCSBBRVVfSU5QVVRTX0FUVE5fQklUU19NQ1BfTEFUQ0hFRF9TQ1BBRF9QQVJJVFkpCisKKy8qIEJlbG93IHJlZ2lzdGVycyBjb250cm9sIHRoZSBNQ1AgcGFyaXR5IGF0dGVudGlvbiBvdXRwdXQuIFdoZW4KKyAqIE1JU0NfQUVVX0VOQUJMRV9NQ1BfUFJUWV9CSVRTIGFyZSBzZXQgLSBhdHRlbnRpb25zIGFyZQorICogZW5hYmxlZCwgd2hlbiBjbGVhcmVkIC0gZGlzYWJsZWQuCisgKi8KK3N0YXRpYyBjb25zdCB1MzIgbWNwX2F0dG5fY3RsX3JlZ3NbXSA9IHsKKwlNSVNDX1JFR19BRVVfRU5BQkxFNF9GVU5DXzBfT1VUXzAsCisJTUlTQ19SRUdfQUVVX0VOQUJMRTRfTklHXzAsCisJTUlTQ19SRUdfQUVVX0VOQUJMRTRfUFhQXzAsCisJTUlTQ19SRUdfQUVVX0VOQUJMRTRfRlVOQ18xX09VVF8wLAorCU1JU0NfUkVHX0FFVV9FTkFCTEU0X05JR18xLAorCU1JU0NfUkVHX0FFVV9FTkFCTEU0X1BYUF8xCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgYm54Mnhfc2V0X21jcF9wYXJpdHkoc3RydWN0IGJueDJ4ICpicCwgdTggZW5hYmxlKQoreworCWludCBpOworCXUzMiByZWdfdmFsOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWNwX2F0dG5fY3RsX3JlZ3MpOyBpKyspIHsKKwkJcmVnX3ZhbCA9IFJFR19SRChicCwgbWNwX2F0dG5fY3RsX3JlZ3NbaV0pOworCisJCWlmIChlbmFibGUpCisJCQlyZWdfdmFsIHw9IE1JU0NfQUVVX0VOQUJMRV9NQ1BfUFJUWV9CSVRTOworCQllbHNlCisJCQlyZWdfdmFsICY9IH5NSVNDX0FFVV9FTkFCTEVfTUNQX1BSVFlfQklUUzsKKworCQlSRUdfV1IoYnAsIG1jcF9hdHRuX2N0bF9yZWdzW2ldLCByZWdfdmFsKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGJueDJ4X3Bhcml0eV9yZWdfbWFzayhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgaWR4KQoreworCWlmIChDSElQX0lTX0UxKGJwKSkKKwkJcmV0dXJuIGJueDJ4X2Jsb2Nrc19wYXJpdHlfZGF0YVtpZHhdLnJlZ19tYXNrLmUxOworCWVsc2UgaWYgKENISVBfSVNfRTFIKGJwKSkKKwkJcmV0dXJuIGJueDJ4X2Jsb2Nrc19wYXJpdHlfZGF0YVtpZHhdLnJlZ19tYXNrLmUxaDsKKwllbHNlCisJCXJldHVybiBibngyeF9ibG9ja3NfcGFyaXR5X2RhdGFbaWR4XS5yZWdfbWFzay5lMjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2Rpc2FibGVfYmxvY2tzX3Bhcml0eShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYm54MnhfYmxvY2tzX3Bhcml0eV9kYXRhKTsgaSsrKSB7CisJCXUzMiBkaXNfbWFzayA9IGJueDJ4X3Bhcml0eV9yZWdfbWFzayhicCwgaSk7CisKKwkJaWYgKGRpc19tYXNrKSB7CisJCQlSRUdfV1IoYnAsIGJueDJ4X2Jsb2Nrc19wYXJpdHlfZGF0YVtpXS5tYXNrX2FkZHIsCisJCQkgICAgICAgZGlzX21hc2spOworCQkJRFAoTkVUSUZfTVNHX0hXLCAiU2V0dGluZyBwYXJpdHkgbWFzayAiCisJCQkJCQkgImZvciAlcyB0b1x0XHQweCV4XG4iLAorCQkJCSAgICBibngyeF9ibG9ja3NfcGFyaXR5X2RhdGFbaV0ubmFtZSwgZGlzX21hc2spOworCQl9CisJfQorCisJLyogRGlzYWJsZSBNQ1AgcGFyaXR5IGF0dGVudGlvbnMgKi8KKwlibngyeF9zZXRfbWNwX3Bhcml0eShicCwgZmFsc2UpOworfQorCisvKioKKyAqIENsZWFyIHRoZSBwYXJpdHkgZXJyb3Igc3RhdHVzIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2NsZWFyX2Jsb2Nrc19wYXJpdHkoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaTsKKwl1MzIgcmVnX3ZhbCwgbWNwX2FldV9iaXRzID0KKwkJQUVVX0lOUFVUU19BVFROX0JJVFNfTUNQX0xBVENIRURfUk9NX1BBUklUWSB8CisJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX01DUF9MQVRDSEVEX1NDUEFEX1BBUklUWSB8CisJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX01DUF9MQVRDSEVEX1VNUF9SWF9QQVJJVFkgfAorCQlBRVVfSU5QVVRTX0FUVE5fQklUU19NQ1BfTEFUQ0hFRF9VTVBfVFhfUEFSSVRZOworCisJLyogQ2xlYXIgU0VNX0ZBU1QgcGFyaXRpZXMgKi8KKwlSRUdfV1IoYnAsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgU0VNX0ZBU1RfUkVHX1BBUklUWV9SU1QsIDB4MSk7CisJUkVHX1dSKGJwLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIFNFTV9GQVNUX1JFR19QQVJJVFlfUlNULCAweDEpOworCVJFR19XUihicCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyBTRU1fRkFTVF9SRUdfUEFSSVRZX1JTVCwgMHgxKTsKKwlSRUdfV1IoYnAsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgU0VNX0ZBU1RfUkVHX1BBUklUWV9SU1QsIDB4MSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShibngyeF9ibG9ja3NfcGFyaXR5X2RhdGEpOyBpKyspIHsKKwkJdTMyIHJlZ19tYXNrID0gYm54MnhfcGFyaXR5X3JlZ19tYXNrKGJwLCBpKTsKKworCQlpZiAocmVnX21hc2spIHsKKwkJCXJlZ192YWwgPSBSRUdfUkQoYnAsIGJueDJ4X2Jsb2Nrc19wYXJpdHlfZGF0YVtpXS4KKwkJCQkJIHN0c19jbHJfYWRkcik7CisJCQlpZiAocmVnX3ZhbCAmIHJlZ19tYXNrKQorCQkJCURQKE5FVElGX01TR19IVywKKwkJCQkJICAgICJQYXJpdHkgZXJyb3JzIGluICVzOiAweCV4XG4iLAorCQkJCQkgICAgYm54MnhfYmxvY2tzX3Bhcml0eV9kYXRhW2ldLm5hbWUsCisJCQkJCSAgICByZWdfdmFsICYgcmVnX21hc2spOworCQl9CisJfQorCisJLyogQ2hlY2sgaWYgdGhlcmUgd2VyZSBwYXJpdHkgYXR0ZW50aW9ucyBpbiBNQ1AgKi8KKwlyZWdfdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19BRVVfQUZURVJfSU5WRVJUXzRfTUNQKTsKKwlpZiAocmVnX3ZhbCAmIG1jcF9hZXVfYml0cykKKwkJRFAoTkVUSUZfTVNHX0hXLCAiUGFyaXR5IGVycm9yIGluIE1DUDogMHgleFxuIiwKKwkJICAgcmVnX3ZhbCAmIG1jcF9hZXVfYml0cyk7CisKKwkvKiBDbGVhciBwYXJpdHkgYXR0ZW50aW9ucyBpbiBNQ1A6CisJICogWzddICBjbGVhcnMgTGF0Y2hlZCByb21fcGFyaXR5CisJICogWzhdICBjbGVhcnMgTGF0Y2hlZCB1bXBfcnhfcGFyaXR5CisJICogWzldICBjbGVhcnMgTGF0Y2hlZCB1bXBfdHhfcGFyaXR5CisJICogWzEwXSBjbGVhcnMgTGF0Y2hlZCBzY3BhZF9wYXJpdHkgKGJvdGggcG9ydHMpCisJICovCisJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfQ0xSX0xBVENIX1NJR05BTCwgMHg3ODApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfZW5hYmxlX2Jsb2Nrc19wYXJpdHkoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJueDJ4X2Jsb2Nrc19wYXJpdHlfZGF0YSk7IGkrKykgeworCQl1MzIgcmVnX21hc2sgPSBibngyeF9wYXJpdHlfcmVnX21hc2soYnAsIGkpOworCisJCWlmIChyZWdfbWFzaykKKwkJCVJFR19XUihicCwgYm54MnhfYmxvY2tzX3Bhcml0eV9kYXRhW2ldLm1hc2tfYWRkciwKKwkJCQlibngyeF9ibG9ja3NfcGFyaXR5X2RhdGFbaV0uZW5fbWFzayAmIHJlZ19tYXNrKTsKKwl9CisKKwkvKiBFbmFibGUgTUNQIHBhcml0eSBhdHRlbnRpb25zICovCisJYm54Mnhfc2V0X21jcF9wYXJpdHkoYnAsIHRydWUpOworfQorCisKICNlbmRpZiAvKiBCTlgyWF9JTklUX0ggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jCmluZGV4IDQ4OWE1NTEuLjhjZGNmNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMKQEAgLTMxNTIsNyArMzE1Miw2IEBACiAjZGVmaW5lIExPQURfQ09VTlRFUl9NQVNLCSgoKHUzMikweDEgPDwgTE9BRF9DT1VOVEVSX0JJVFMpIC0gMSkKICNkZWZpbmUgUkVTRVRfRE9ORV9GTEFHX01BU0sJKH5MT0FEX0NPVU5URVJfTUFTSykKICNkZWZpbmUgUkVTRVRfRE9ORV9GTEFHX1NISUZUCUxPQURfQ09VTlRFUl9CSVRTCi0jZGVmaW5lIENISVBfUEFSSVRZX1NVUFBPUlRFRChicCkgICAoQ0hJUF9JU19FMShicCkgfHwgQ0hJUF9JU19FMUgoYnApKQogCiAvKgogICogc2hvdWxkIGJlIHJ1biB1bmRlciBydG5sIGxvY2sKQEAgLTM1MjcsNyArMzUyNiw3IEBACiAJICAgdHJ5IHRvIGhhbmRsZSB0aGlzIGV2ZW50ICovCiAJYm54MnhfYWNxdWlyZV9hbHIoYnApOwogCi0JaWYgKGJueDJ4X2Noa19wYXJpdHlfYXR0bihicCkpIHsKKwlpZiAoQ0hJUF9QQVJJVFlfRU5BQkxFRChicCkgJiYgYm54MnhfY2hrX3Bhcml0eV9hdHRuKGJwKSkgewogCQlicC0+cmVjb3Zlcnlfc3RhdGUgPSBCTlgyWF9SRUNPVkVSWV9JTklUOwogCQlibngyeF9zZXRfcmVzZXRfaW5fcHJvZ3Jlc3MoYnApOwogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmJwLT5yZXNldF90YXNrLCAwKTsKQEAgLTQ3NTQsNyArNDc1Myw3IEBACiAJcmV0dXJuIDA7IC8qIE9LICovCiB9CiAKLXN0YXRpYyB2b2lkIGVuYWJsZV9ibG9ja3NfYXR0ZW50aW9uKHN0cnVjdCBibngyeCAqYnApCitzdGF0aWMgdm9pZCBibngyeF9lbmFibGVfYmxvY2tzX2F0dGVudGlvbihzdHJ1Y3QgYm54MnggKmJwKQogewogCVJFR19XUihicCwgUFhQX1JFR19QWFBfSU5UX01BU0tfMCwgMCk7CiAJaWYgKENISVBfSVNfRTIoYnApKQpAQCAtNDgwOCw1MyArNDgwNyw5IEBACiAJUkVHX1dSKGJwLCBDRFVfUkVHX0NEVV9JTlRfTUFTSywgMCk7CiAJUkVHX1dSKGJwLCBETUFFX1JFR19ETUFFX0lOVF9NQVNLLCAwKTsKIC8qCVJFR19XUihicCwgTUlTQ19SRUdfTUlTQ19JTlRfTUFTSywgMCk7ICovCi0JUkVHX1dSKGJwLCBQQkZfUkVHX1BCRl9JTlRfTUFTSywgMFgxOCk7CQkvKiBiaXQgMyw0IG1hc2tlZCAqLworCVJFR19XUihicCwgUEJGX1JFR19QQkZfSU5UX01BU0ssIDB4MTgpOwkJLyogYml0IDMsNCBtYXNrZWQgKi8KIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0JdTMyIGFkZHI7Ci0JdTMyIG1hc2s7Ci19IGJueDJ4X3Bhcml0eV9tYXNrW10gPSB7Ci0Je1BYUF9SRUdfUFhQX1BSVFlfTUFTSywJCTB4M2ZmZmZmZn0sCi0Je1BYUDJfUkVHX1BYUDJfUFJUWV9NQVNLXzAsCTB4ZmZmZmZmZmZ9LAotCXtQWFAyX1JFR19QWFAyX1BSVFlfTUFTS18xLAkweDdmfSwKLQl7SENfUkVHX0hDX1BSVFlfTUFTSywJCTB4N30sCi0Je01JU0NfUkVHX01JU0NfUFJUWV9NQVNLLAkweDF9LAotCXtRTV9SRUdfUU1fUFJUWV9NQVNLLAkJMHgwfSwKLQl7RE9SUV9SRUdfRE9SUV9QUlRZX01BU0ssCTB4MH0sCi0Je0dSQ0JBU0VfVVBCICsgUEJfUkVHX1BCX1BSVFlfTUFTSywgMHgwfSwKLQl7R1JDQkFTRV9YUEIgKyBQQl9SRUdfUEJfUFJUWV9NQVNLLCAweDB9LAotCXtTUkNfUkVHX1NSQ19QUlRZX01BU0ssCQkweDR9LCAvKiBiaXQgMiAqLwotCXtDRFVfUkVHX0NEVV9QUlRZX01BU0ssCQkweDB9LAotCXtDRkNfUkVHX0NGQ19QUlRZX01BU0ssCQkweDB9LAotCXtEQkdfUkVHX0RCR19QUlRZX01BU0ssCQkweDB9LAotCXtETUFFX1JFR19ETUFFX1BSVFlfTUFTSywJMHgwfSwKLQl7QlJCMV9SRUdfQlJCMV9QUlRZX01BU0ssCTB4MH0sCi0Je1BSU19SRUdfUFJTX1BSVFlfTUFTSywJCSgxPDw2KX0sLyogYml0IDYgKi8KLQl7VFNETV9SRUdfVFNETV9QUlRZX01BU0ssCTB4MTh9LAkvKiBiaXQgMyw0ICovCi0Je0NTRE1fUkVHX0NTRE1fUFJUWV9NQVNLLAkweDh9LAkvKiBiaXQgMyAqLwotCXtVU0RNX1JFR19VU0RNX1BSVFlfTUFTSywJMHgzOH0sICAvKiBiaXQgMyw0LDUgKi8KLQl7WFNETV9SRUdfWFNETV9QUlRZX01BU0ssCTB4OH0sCS8qIGJpdCAzICovCi0Je1RTRU1fUkVHX1RTRU1fUFJUWV9NQVNLXzAsCTB4MH0sCi0Je1RTRU1fUkVHX1RTRU1fUFJUWV9NQVNLXzEsCTB4MH0sCi0Je1VTRU1fUkVHX1VTRU1fUFJUWV9NQVNLXzAsCTB4MH0sCi0Je1VTRU1fUkVHX1VTRU1fUFJUWV9NQVNLXzEsCTB4MH0sCi0Je0NTRU1fUkVHX0NTRU1fUFJUWV9NQVNLXzAsCTB4MH0sCi0Je0NTRU1fUkVHX0NTRU1fUFJUWV9NQVNLXzEsCTB4MH0sCi0Je1hTRU1fUkVHX1hTRU1fUFJUWV9NQVNLXzAsCTB4MH0sCi0Je1hTRU1fUkVHX1hTRU1fUFJUWV9NQVNLXzEsCTB4MH0KLX07Ci0KLXN0YXRpYyB2b2lkIGVuYWJsZV9ibG9ja3NfcGFyaXR5KHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShibngyeF9wYXJpdHlfbWFzayk7IGkrKykKLQkJUkVHX1dSKGJwLCBibngyeF9wYXJpdHlfbWFza1tpXS5hZGRyLAotCQkJYm54MnhfcGFyaXR5X21hc2tbaV0ubWFzayk7Ci19Ci0KLQogc3RhdGljIHZvaWQgYm54MnhfcmVzZXRfY29tbW9uKHN0cnVjdCBibngyeCAqYnApCiB7CiAJLyogcmVzZXRfY29tbW9uICovCkBAIC01MDgyLDcgKzUwMzcsNyBAQAogCQltZW1zZXQoJmlsdF9jbGksIDAsIHNpemVvZihzdHJ1Y3QgaWx0X2NsaWVudF9pbmZvKSk7CiAJCW1lbXNldCgmaWx0LCAwLCBzaXplb2Yoc3RydWN0IGJueDJ4X2lsdCkpOwogCi0JCS8qIGluaXRhbGl6ZSBkdW1teSBUTSBjbGllbnQgKi8KKwkJLyogaW5pdGlhbGl6ZSBkdW1teSBUTSBjbGllbnQgKi8KIAkJaWx0X2NsaS5zdGFydCA9IDA7CiAJCWlsdF9jbGkuZW5kID0gSUxUX05VTV9QQUdFX0VOVFJJRVMgLSAxOwogCQlpbHRfY2xpLmNsaWVudF9udW0gPSBJTFRfQ0xJRU5UX1RNOwpAQCAtNTM1MCw5ICs1MzA1LDkgQEAKIAkvKiBjbGVhciBQWFAyIGF0dGVudGlvbnMgKi8KIAlSRUdfUkQoYnAsIFBYUDJfUkVHX1BYUDJfSU5UX1NUU19DTFJfMCk7CiAKLQllbmFibGVfYmxvY2tzX2F0dGVudGlvbihicCk7Ci0JaWYgKENISVBfUEFSSVRZX1NVUFBPUlRFRChicCkpCi0JCWVuYWJsZV9ibG9ja3NfcGFyaXR5KGJwKTsKKwlibngyeF9lbmFibGVfYmxvY2tzX2F0dGVudGlvbihicCk7CisJaWYgKENISVBfUEFSSVRZX0VOQUJMRUQoYnApKQorCQlibngyeF9lbmFibGVfYmxvY2tzX3Bhcml0eShicCk7CiAKIAlpZiAoIUJQX05PTUNQKGJwKSkgewogCQkvKiBJbiBFMiAyLVBPUlQgbW9kZSwgc2FtZSBleHQgcGh5IGlzIHVzZWQgZm9yIHRoZSB0d28gcGF0aHMgKi8KQEAgLTg3NTEsMTMgKzg3MDYsNiBAQAogCQlkZXZfZXJyKCZicC0+cGRldi0+ZGV2LCAiTUNQIGRpc2FibGVkLCAiCiAJCQkJCSJtdXN0IGxvYWQgZGV2aWNlcyBpbiBvcmRlciFcbiIpOwogCi0JLyogU2V0IG11bHRpIHF1ZXVlIG1vZGUgKi8KLQlpZiAoKG11bHRpX21vZGUgIT0gRVRIX1JTU19NT0RFX0RJU0FCTEVEKSAmJgotCSAgICAoKGludF9tb2RlID09IElOVF9NT0RFX0lOVHgpIHx8IChpbnRfbW9kZSA9PSBJTlRfTU9ERV9NU0kpKSkgewotCQlkZXZfZXJyKCZicC0+cGRldi0+ZGV2LCAiTXVsdGkgZGlzYWJsZWQgc2luY2UgaW50X21vZGUgIgotCQkJCQkicmVxdWVzdGVkIGlzIG5vdCBNU0ktWFxuIik7Ci0JCW11bHRpX21vZGUgPSBFVEhfUlNTX01PREVfRElTQUJMRUQ7Ci0JfQogCWJwLT5tdWx0aV9tb2RlID0gbXVsdGlfbW9kZTsKIAlicC0+aW50X21vZGUgPSBpbnRfbW9kZTsKIApAQCAtOTU2MCw5ICs5NTA4LDE1IEBACiAJLyogRGVsZXRlIGFsbCBOQVBJIG9iamVjdHMgKi8KIAlibngyeF9kZWxfYWxsX25hcGkoYnApOwogCisJLyogUG93ZXIgb246IHdlIGNhbid0IGxldCBQQ0kgbGF5ZXIgd3JpdGUgdG8gdXMgd2hpbGUgd2UgYXJlIGluIEQzICovCisJYm54Mnhfc2V0X3Bvd2VyX3N0YXRlKGJwLCBQQ0lfRDApOworCiAJLyogRGlzYWJsZSBNU0kvTVNJLVggKi8KIAlibngyeF9kaXNhYmxlX21zaShicCk7CiAKKwkvKiBQb3dlciBvZmYgKi8KKwlibngyeF9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EM2hvdCk7CisKIAkvKiBNYWtlIHN1cmUgUkVTRVQgdGFzayBpcyBub3Qgc2NoZWR1bGVkIGJlZm9yZSBjb250aW51aW5nICovCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZicC0+cmVzZXRfdGFzayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3JlZy5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKaW5kZXggYmZkODc1Yi4uYzkzOTY4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKQEAgLTE4LDYgKzE4LDggQEAKICAqIFdSIC0gV3JpdGUgQ2xlYXIgKHdyaXRlIDEgdG8gY2xlYXIgdGhlIGJpdCkKICAqCiAgKi8KKyNpZm5kZWYgQk5YMlhfUkVHX0gKKyNkZWZpbmUgQk5YMlhfUkVHX0gKIAogI2RlZmluZSBBVENfQVRDX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKICNkZWZpbmUgQVRDX0FUQ19JTlRfU1RTX1JFR19BVENfR1BBX01VTFRJUExFX0hJVFMJCSAoMHgxPDwyKQpAQCAtMzksNiArNDEsOCBAQAogI2RlZmluZSBCUkIxX1JFR19CUkIxX1BSVFlfTUFTSyAJCQkJIDB4NjAxMzgKIC8qIFtSIDRdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIEJSQjFfUkVHX0JSQjFfUFJUWV9TVFMJCQkJCSAweDYwMTJjCisvKiBbUkMgNF0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgY2xlYXIgKi8KKyNkZWZpbmUgQlJCMV9SRUdfQlJCMV9QUlRZX1NUU19DTFIJCQkJIDB4NjAxMzAKIC8qIFtSVyAxMF0gQXQgYWRkcmVzcyBCUkIxX0lORF9GUkVFX0xJU1RfUFJTX0NSRFQgaW5pdGlhbGl6ZSBmcmVlIGhlYWQuIEF0CiAgKiBhZGRyZXNzIEJSQjFfSU5EX0ZSRUVfTElTVF9QUlNfQ1JEVCsxIGluaXRpYWxpemUgZnJlZSB0YWlsLiBBdCBhZGRyZXNzCiAgKiBCUkIxX0lORF9GUkVFX0xJU1RfUFJTX0NSRFQrMiBpbml0aWFsaXplIHBhcnNlciBpbml0aWFsIGNyZWRpdC4gV2FybmluZyAtCkBAIC0xMzIsOCArMTM2LDEyIEBACiAjZGVmaW5lIENDTV9SRUdfQ0NNX0lOVF9NQVNLCQkJCQkgMHhkMDFlNAogLyogW1IgMTFdIEludGVycnVwdCByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIENDTV9SRUdfQ0NNX0lOVF9TVFMJCQkJCSAweGQwMWQ4CisvKiBbUlcgMjddIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KKyNkZWZpbmUgQ0NNX1JFR19DQ01fUFJUWV9NQVNLCQkJCQkgMHhkMDFmNAogLyogW1IgMjddIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIENDTV9SRUdfQ0NNX1BSVFlfU1RTCQkJCQkgMHhkMDFlOAorLyogW1JDIDI3XSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCBjbGVhciAqLworI2RlZmluZSBDQ01fUkVHX0NDTV9QUlRZX1NUU19DTFIJCQkJIDB4ZDAxZWMKIC8qIFtSVyAzXSBUaGUgc2l6ZSBvZiBBRyBjb250ZXh0IHJlZ2lvbiAwIGluIFJFRy1wYWlycy4gRGVzaWduYXRlcyB0aGUgTVMKICAgIFJFRy1wYWlyIG51bWJlciAoZS5nLiBpZiByZWdpb24gMCBpcyA2IFJFRy1wYWlyczsgdGhlIHZhbHVlIHNob3VsZCBiZSA1KS4KICAgIElzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgdGhlIEFHIGNvbnRleHQgUkVHLXBhaXJzIHdyaXR0ZW4gYmFjazsKQEAgLTM1MCw2ICszNTgsOCBAQAogI2RlZmluZSBDRFVfUkVHX0NEVV9QUlRZX01BU0sJCQkJCSAweDEwMTA0YwogLyogW1IgNV0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgQ0RVX1JFR19DRFVfUFJUWV9TVFMJCQkJCSAweDEwMTA0MAorLyogW1JDIDVdIFBhcml0eSByZWdpc3RlciAjMCByZWFkIGNsZWFyICovCisjZGVmaW5lIENEVV9SRUdfQ0RVX1BSVFlfU1RTX0NMUgkJCQkgMHgxMDEwNDQKIC8qIFtSQyAzMl0gbG9nZ2luZyBvZiBlcnJvciBkYXRhIGluIGNhc2Ugb2YgYSBDRFUgbG9hZCBlcnJvcjoKICAgIHtleHBlY3RlZF9jaWRbMTU6MF07IHhwZWN0ZWRfdHlwZVsyOjBdOyB4cGVjdGVkX3JlZ2lvblsyOjBdOyBjdGl2ZV9lcnJvcjsKICAgIHlwZV9lcnJvcjsgY3R1YWxfYWN0aXZlOyBjdHVhbF9jb21wcmVzc2VkX2NvbnRleHR9OyAqLwpAQCAtMzgxLDYgKzM5MSw4IEBACiAjZGVmaW5lIENGQ19SRUdfQ0ZDX1BSVFlfTUFTSwkJCQkJIDB4MTA0MTE4CiAvKiBbUiA0XSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLwogI2RlZmluZSBDRkNfUkVHX0NGQ19QUlRZX1NUUwkJCQkJIDB4MTA0MTBjCisvKiBbUkMgNF0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgY2xlYXIgKi8KKyNkZWZpbmUgQ0ZDX1JFR19DRkNfUFJUWV9TVFNfQ0xSCQkJCSAweDEwNDExMAogLyogW1JXIDIxXSBDSUQgY2FtIGFjY2VzcyAoMjE6MSAtIERhdGE7IGFsaWQgLSAwKSAqLwogI2RlZmluZSBDRkNfUkVHX0NJRF9DQU0gCQkJCQkgMHgxMDQ4MDAKICNkZWZpbmUgQ0ZDX1JFR19DT05UUk9MMAkJCQkJIDB4MTA0MDI4CkBAIC00NjYsNiArNDc4LDggQEAKICNkZWZpbmUgQ1NETV9SRUdfQ1NETV9QUlRZX01BU0sgCQkJCSAweGMyMmJjCiAvKiBbUiAxMV0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgQ1NETV9SRUdfQ1NETV9QUlRZX1NUUwkJCQkJIDB4YzIyYjAKKy8qIFtSQyAxMV0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgY2xlYXIgKi8KKyNkZWZpbmUgQ1NETV9SRUdfQ1NETV9QUlRZX1NUU19DTFIJCQkJIDB4YzIyYjQKICNkZWZpbmUgQ1NETV9SRUdfRU5BQkxFX0lOMQkJCQkJIDB4YzIyMzgKICNkZWZpbmUgQ1NETV9SRUdfRU5BQkxFX0lOMgkJCQkJIDB4YzIyM2MKICNkZWZpbmUgQ1NETV9SRUdfRU5BQkxFX09VVDEJCQkJCSAweGMyMjQwCkBAIC01NTYsNiArNTcwLDkgQEAKIC8qIFtSIDMyXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLwogI2RlZmluZSBDU0VNX1JFR19DU0VNX1BSVFlfU1RTXzAJCQkJIDB4MjAwMTI0CiAjZGVmaW5lIENTRU1fUkVHX0NTRU1fUFJUWV9TVFNfMQkJCQkgMHgyMDAxMzQKKy8qIFtSQyAzMl0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgY2xlYXIgKi8KKyNkZWZpbmUgQ1NFTV9SRUdfQ1NFTV9QUlRZX1NUU19DTFJfMAkJCQkgMHgyMDAxMjgKKyNkZWZpbmUgQ1NFTV9SRUdfQ1NFTV9QUlRZX1NUU19DTFJfMQkJCQkgMHgyMDAxMzgKICNkZWZpbmUgQ1NFTV9SRUdfRU5BQkxFX0lOCQkJCQkgMHgyMDAwYTQKICNkZWZpbmUgQ1NFTV9SRUdfRU5BQkxFX09VVAkJCQkJIDB4MjAwMGE4CiAvKiBbUlcgMzJdIFRoaXMgYWRkcmVzcyBzcGFjZSBjb250YWlucyBhbGwgcmVnaXN0ZXJzIGFuZCBtZW1vcmllcyB0aGF0IGFyZQpAQCAtNjQ4LDYgKzY2NSw4IEBACiAjZGVmaW5lIERCR19SRUdfREJHX1BSVFlfTUFTSwkJCQkJIDB4YzBhOAogLyogW1IgMV0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgREJHX1JFR19EQkdfUFJUWV9TVFMJCQkJCSAweGMwOWMKKy8qIFtSQyAxXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCBjbGVhciAqLworI2RlZmluZSBEQkdfUkVHX0RCR19QUlRZX1NUU19DTFIJCQkJIDB4YzBhMAogLyogW1JXIDFdIFdoZW4gc2V0IHRoZSBETUFFIHdpbGwgcHJvY2VzcyB0aGUgY29tbWFuZHMgYXMgaW4gRTEuNS4gMS5UaGUKICAqIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCBpcyBhbHdheXMgU1JDLVBDSTsgMi5WRl9WYWxpZCA9IDA7IDMuVkZJRD0wOwogICogNC5Db21wbGV0aW9uIGZ1bmN0aW9uPTA7IDUuRXJyb3IgaGFuZGxpbmc9MCAqLwpAQCAtNjY4LDYgKzY4Nyw4IEBACiAjZGVmaW5lIERNQUVfUkVHX0RNQUVfUFJUWV9NQVNLIAkJCQkgMHgxMDIwNjQKIC8qIFtSIDRdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIERNQUVfUkVHX0RNQUVfUFJUWV9TVFMJCQkJCSAweDEwMjA1OAorLyogW1JDIDRdIFBhcml0eSByZWdpc3RlciAjMCByZWFkIGNsZWFyICovCisjZGVmaW5lIERNQUVfUkVHX0RNQUVfUFJUWV9TVFNfQ0xSCQkJCSAweDEwMjA1YwogLyogW1JXIDFdIENvbW1hbmQgMCBnby4gKi8KICNkZWZpbmUgRE1BRV9SRUdfR09fQzAJCQkJCQkgMHgxMDIwODAKIC8qIFtSVyAxXSBDb21tYW5kIDEgZ28uICovCkBAIC03MzQsNiArNzU1LDggQEAKICNkZWZpbmUgRE9SUV9SRUdfRE9SUV9QUlRZX01BU0sgCQkJCSAweDE3MDE5MAogLyogW1IgMl0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgRE9SUV9SRUdfRE9SUV9QUlRZX1NUUwkJCQkJIDB4MTcwMTg0CisvKiBbUkMgMl0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgY2xlYXIgKi8KKyNkZWZpbmUgRE9SUV9SRUdfRE9SUV9QUlRZX1NUU19DTFIJCQkJIDB4MTcwMTg4CiAvKiBbUlcgOF0gVGhlIGFkZHJlc3MgdG8gd3JpdGUgdGhlIERQTSBDSUQgdG8gU1RPUk0uICovCiAjZGVmaW5lIERPUlFfUkVHX0RQTV9DSURfQUREUgkJCQkJIDB4MTcwMDQ0CiAvKiBbUlcgNV0gVGhlIERQTSBtb2RlIENJRCBleHRyYWN0aW9uIG9mZnNldC4gKi8KQEAgLTg0Miw4ICs4NjUsMTIgQEAKIC8qIFtSIDFdIGRhdGEgYXZhaWxibGUgZm9yIGVycm9yIG1lbW9yeS4gSWYgdGhpcyBiaXQgaXMgY2xlYXIgZG8gbm90IHJlZAogICogZnJvbSBlcnJvcl9oYW5kbGluZ19tZW1vcnkuICovCiAjZGVmaW5lIElHVV9SRUdfRVJST1JfSEFORExJTkdfREFUQV9WQUxJRAkJCSAweDEzMDEzMAorLyogW1JXIDExXSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCisjZGVmaW5lIElHVV9SRUdfSUdVX1BSVFlfTUFTSwkJCQkJIDB4MTMwMGE4CiAvKiBbUiAxMV0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgSUdVX1JFR19JR1VfUFJUWV9TVFMJCQkJCSAweDEzMDA5YworLyogW1JDIDExXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCBjbGVhciAqLworI2RlZmluZSBJR1VfUkVHX0lHVV9QUlRZX1NUU19DTFIJCQkJIDB4MTMwMGEwCiAvKiBbUiA0XSBEZWJ1ZzogaW50X2hhbmRsZV9mc20gKi8KICNkZWZpbmUgSUdVX1JFR19JTlRfSEFORExFX0ZTTQkJCQkJIDB4MTMwMDUwCiAjZGVmaW5lIElHVV9SRUdfTEVBRElOR19FREdFX0xBVENICQkJCSAweDEzMDEzNApAQCAtMTUwMSw2ICsxNTI4LDggQEAKICNkZWZpbmUgTUlTQ19SRUdfTUlTQ19QUlRZX01BU0sgCQkJCSAweGEzOTgKIC8qIFtSIDFdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIE1JU0NfUkVHX01JU0NfUFJUWV9TVFMJCQkJCSAweGEzOGMKKy8qIFtSQyAxXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCBjbGVhciAqLworI2RlZmluZSBNSVNDX1JFR19NSVNDX1BSVFlfU1RTX0NMUgkJCQkgMHhhMzkwCiAjZGVmaW5lIE1JU0NfUkVHX05JR19XT0xfUDAJCQkJCSAweGEyNzAKICNkZWZpbmUgTUlTQ19SRUdfTklHX1dPTF9QMQkJCQkJIDB4YTI3NAogLyogW1IgMV0gSWYgc2V0IGluZGljYXRlIHRoYXQgdGhlIHBjaWVfcnN0X2Igd2FzIGFzc2VydGVkIHdpdGhvdXQgcGVyc3QKQEAgLTE2MDQsNyArMTYzMyw3IEBACiAgICAofm1pc2NfcmVnaXN0ZXJzX3N3X3RpbWVyX2NmZ180LnN3X3RpbWVyX2NmZ180WzFdICkgaXMgc2V0ICovCiAjZGVmaW5lIE1JU0NfUkVHX1NXX1RJTUVSX1JFTE9BRF9WQUxfNAkJCQkgMHhhMmZjCiAvKiBbUlcgMzJdIHRoZSB2YWx1ZSBvZiB0aGUgY291bnRlciBmb3Igc3cgdGltZXJzMS04LiB0aGVyZSBhcmUgOCBhZGRyZXNzZXMKLSAgIGluIHRoaXMgcmVnaXN0ZXIuIGFkZHJlcyAwIC0gdGltZXIgMTsgYWRkcmVzcyAxIC0gdGltZXIgMiwgLi4uICBhZGRyZXNzIDcgLQorICAgaW4gdGhpcyByZWdpc3Rlci4gYWRkcmVzcyAwIC0gdGltZXIgMTsgYWRkcmVzcyAxIC0gdGltZXIgMiwgLi4uICBhZGRyZXNzIDcgLQogICAgdGltZXIgOCAqLwogI2RlZmluZSBNSVNDX1JFR19TV19USU1FUl9WQUwJCQkJCSAweGE1YzAKIC8qIFtSVyAxXSBTZXQgYnkgdGhlIE1DUCB0byByZW1lbWJlciBpZiBvbmUgb3IgbW9yZSBvZiB0aGUgZHJpdmVycyBpcy9hcmUKQEAgLTIwODIsNiArMjExMSwxMCBAQAogI2RlZmluZSBQQkZfUkVHX1BCRl9JTlRfTUFTSwkJCQkJIDB4MTQwMWQ0CiAvKiBbUiA1XSBJbnRlcnJ1cHQgcmVnaXN0ZXIgIzAgcmVhZCAqLwogI2RlZmluZSBQQkZfUkVHX1BCRl9JTlRfU1RTCQkJCQkgMHgxNDAxYzgKKy8qIFtSVyAyMF0gUGFyaXR5IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLworI2RlZmluZSBQQkZfUkVHX1BCRl9QUlRZX01BU0sJCQkJCSAweDE0MDFlNAorLyogW1JDIDIwXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCBjbGVhciAqLworI2RlZmluZSBQQkZfUkVHX1BCRl9QUlRZX1NUU19DTFIJCQkJIDB4MTQwMWRjCiAjZGVmaW5lIFBCX1JFR19DT05UUk9MCQkJCQkJIDAKIC8qIFtSVyAyXSBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIFBCX1JFR19QQl9JTlRfTUFTSwkJCQkJIDB4MjgKQEAgLTIwOTEsNiArMjEyNCw4IEBACiAjZGVmaW5lIFBCX1JFR19QQl9QUlRZX01BU0sJCQkJCSAweDM4CiAvKiBbUiA0XSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLwogI2RlZmluZSBQQl9SRUdfUEJfUFJUWV9TVFMJCQkJCSAweDJjCisvKiBbUkMgNF0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgY2xlYXIgKi8KKyNkZWZpbmUgUEJfUkVHX1BCX1BSVFlfU1RTX0NMUgkJCQkJIDB4MzAKICNkZWZpbmUgUEdMVUVfQl9QR0xVRV9CX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQogI2RlZmluZSBQR0xVRV9CX1BHTFVFX0JfSU5UX1NUU19SRUdfQ1NTTk9PUF9GSUZPX09WRVJGTE9XCSAoMHgxPDw4KQogI2RlZmluZSBQR0xVRV9CX1BHTFVFX0JfSU5UX1NUU19SRUdfSU5DT1JSRUNUX1JDVl9CRUhBVklPUgkgKDB4MTw8MSkKQEAgLTI0NDYsNiArMjQ4MSw4IEBACiAjZGVmaW5lIFBSU19SRUdfUFJTX1BSVFlfTUFTSwkJCQkJIDB4NDAxYTQKIC8qIFtSIDhdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIFBSU19SRUdfUFJTX1BSVFlfU1RTCQkJCQkgMHg0MDE5OAorLyogW1JDIDhdIFBhcml0eSByZWdpc3RlciAjMCByZWFkIGNsZWFyICovCisjZGVmaW5lIFBSU19SRUdfUFJTX1BSVFlfU1RTX0NMUgkJCQkgMHg0MDE5YwogLyogW1JXIDhdIENvbnRleHQgcmVnaW9uIGZvciBwdXJlIGFja25vd2xlZGdlIHBhY2tldHMuIFVzZWQgaW4gQ0ZDIGxvYWQKICAgIHJlcXVlc3QgbWVzc2FnZSAqLwogI2RlZmluZSBQUlNfUkVHX1BVUkVfUkVHSU9OUwkJCQkJIDB4NDAwMjQKQEAgLTI1OTksNiArMjYzNiw5IEBACiAvKiBbUiAzMl0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgUFhQMl9SRUdfUFhQMl9QUlRZX1NUU18wCQkJCSAweDEyMDU3YwogI2RlZmluZSBQWFAyX1JFR19QWFAyX1BSVFlfU1RTXzEJCQkJIDB4MTIwNThjCisvKiBbUkMgMzJdIFBhcml0eSByZWdpc3RlciAjMCByZWFkIGNsZWFyICovCisjZGVmaW5lIFBYUDJfUkVHX1BYUDJfUFJUWV9TVFNfQ0xSXzAJCQkJIDB4MTIwNTgwCisjZGVmaW5lIFBYUDJfUkVHX1BYUDJfUFJUWV9TVFNfQ0xSXzEJCQkJIDB4MTIwNTkwCiAvKiBbUiAxXSBEZWJ1ZyBvbmx5OiBUaGUgJ2FsbW9zdCBmdWxsJyBpbmRpY2F0aW9uIGZyb20gZWFjaCBmaWZvIChnaXZlcwogICAgaW5kaWNhdGlvbiBhYm91dCBiYWNrcHJlc3N1cmUpICovCiAjZGVmaW5lIFBYUDJfUkVHX1JEX0FMTU9TVF9GVUxMXzAJCQkJIDB4MTIwNDI0CkBAIC0zMDAxLDYgKzMwNDEsOCBAQAogI2RlZmluZSBQWFBfUkVHX1BYUF9QUlRZX01BU0sJCQkJCSAweDEwMzA5NAogLyogW1IgMjZdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIFBYUF9SRUdfUFhQX1BSVFlfU1RTCQkJCQkgMHgxMDMwODgKKy8qIFtSQyAyN10gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgY2xlYXIgKi8KKyNkZWZpbmUgUFhQX1JFR19QWFBfUFJUWV9TVFNfQ0xSCQkJCSAweDEwMzA4YwogLyogW1JXIDRdIFRoZSBhY3Rpdml0eSBjb3VudGVyIGluaXRpYWwgaW5jcmVtZW50IHZhbHVlIHNlbnQgaW4gdGhlIGxvYWQKICAgIHJlcXVlc3QgKi8KICNkZWZpbmUgUU1fUkVHX0FDVENUUklOSVRWQUxfMAkJCQkJIDB4MTY4MDQwCkBAIC0zMTU3LDYgKzMxOTksOCBAQAogI2RlZmluZSBRTV9SRUdfUU1fUFJUWV9NQVNLCQkJCQkgMHgxNjg0NTQKIC8qIFtSIDEyXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLwogI2RlZmluZSBRTV9SRUdfUU1fUFJUWV9TVFMJCQkJCSAweDE2ODQ0OAorLyogW1JDIDEyXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCBjbGVhciAqLworI2RlZmluZSBRTV9SRUdfUU1fUFJUWV9TVFNfQ0xSCQkJCQkgMHgxNjg0NGMKIC8qIFtSIDMyXSBDdXJyZW50IHF1ZXVlcyBpbiBwaXBlbGluZTogUXVldWVzIGZyb20gMzIgdG8gNjMgKi8KICNkZWZpbmUgUU1fUkVHX1FTVEFUVVNfSElHSAkJCQkJIDB4MTY4MDJjCiAvKiBbUiAzMl0gQ3VycmVudCBxdWV1ZXMgaW4gcGlwZWxpbmU6IFF1ZXVlcyBmcm9tIDk2IHRvIDEyNyAqLwpAQCAtMzQ0Miw2ICszNDg2LDggQEAKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfOQkJCQkJIDB4MTY4ODQ4CiAvKiBbUiA2XSBLZWVwIHRoZSBmaWxsIGxldmVsIG9mIHRoZSBmaWZvIGZyb20gd3JpdGUgY2xpZW50IDEgKi8KICNkZWZpbmUgUU1fUkVHX1hRTV9XUkNfRklGT0xWTAkJCQkJIDB4MTY4MDAwCisvKiBbVyAxXSByZXNldCB0byBwYXJpdHkgaW50ZXJydXB0ICovCisjZGVmaW5lIFNFTV9GQVNUX1JFR19QQVJJVFlfUlNUCQkJCQkgMHgxODg0MAogI2RlZmluZSBTUkNfUkVHX0NPVU5URlJFRTAJCQkJCSAweDQwNTAwCiAvKiBbUlcgMV0gSWYgY2xyIHRoZSBzZWFyY2hlciBpcyBjb21wYXRpYmxlIHRvIEUxIEEwIC0gc3VwcG9ydCBvbmx5IHR3bwogICAgcG9ydHMuIElmIHNldCB0aGUgc2VhcmNoZXIgc3VwcG9ydCA4IGZ1bmN0aW9ucy4gKi8KQEAgLTM0NzAsNiArMzUxNiw4IEBACiAjZGVmaW5lIFNSQ19SRUdfU1JDX1BSVFlfTUFTSwkJCQkJIDB4NDA0YzgKIC8qIFtSIDNdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIFNSQ19SRUdfU1JDX1BSVFlfU1RTCQkJCQkgMHg0MDRiYworLyogW1JDIDNdIFBhcml0eSByZWdpc3RlciAjMCByZWFkIGNsZWFyICovCisjZGVmaW5lIFNSQ19SRUdfU1JDX1BSVFlfU1RTX0NMUgkJCQkgMHg0MDRjMAogLyogW1IgNF0gVXNlZCB0byByZWFkIHRoZSB2YWx1ZSBvZiB0aGUgWFggcHJvdGVjdGlvbiBDQU0gb2NjdXBhbmN5IGNvdW50ZXIuICovCiAjZGVmaW5lIFRDTV9SRUdfQ0FNX09DQ1VQCQkJCQkgMHg1MDE3YwogLyogW1JXIDFdIENEVSBBRyByZWFkIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgcmVxdWVzdCBpbnB1dCBpcwpAQCAtMzU5Niw4ICszNjQ0LDEyIEBACiAjZGVmaW5lIFRDTV9SRUdfVENNX0lOVF9NQVNLCQkJCQkgMHg1MDFkYwogLyogW1IgMTFdIEludGVycnVwdCByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIFRDTV9SRUdfVENNX0lOVF9TVFMJCQkJCSAweDUwMWQwCisvKiBbUlcgMjddIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KKyNkZWZpbmUgVENNX1JFR19UQ01fUFJUWV9NQVNLCQkJCQkgMHg1MDFlYwogLyogW1IgMjddIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIFRDTV9SRUdfVENNX1BSVFlfU1RTCQkJCQkgMHg1MDFlMAorLyogW1JDIDI3XSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCBjbGVhciAqLworI2RlZmluZSBUQ01fUkVHX1RDTV9QUlRZX1NUU19DTFIJCQkJIDB4NTAxZTQKIC8qIFtSVyAzXSBUaGUgc2l6ZSBvZiBBRyBjb250ZXh0IHJlZ2lvbiAwIGluIFJFRy1wYWlycy4gRGVzaWduYXRlcyB0aGUgTVMKICAgIFJFRy1wYWlyIG51bWJlciAoZS5nLiBpZiByZWdpb24gMCBpcyA2IFJFRy1wYWlyczsgdGhlIHZhbHVlIHNob3VsZCBiZSA1KS4KICAgIElzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgdGhlIEFHIGNvbnRleHQgUkVHLXBhaXJzIHdyaXR0ZW4gYmFjazsKQEAgLTM3NTUsNiArMzgwNywxMCBAQAogI2RlZmluZSBUTV9SRUdfVE1fSU5UX01BU0sJCQkJCSAweDE2NDBmYwogLyogW1IgMV0gSW50ZXJydXB0IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgVE1fUkVHX1RNX0lOVF9TVFMJCQkJCSAweDE2NDBmMAorLyogW1JXIDddIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KKyNkZWZpbmUgVE1fUkVHX1RNX1BSVFlfTUFTSwkJCQkJIDB4MTY0MTBjCisvKiBbUkMgN10gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgY2xlYXIgKi8KKyNkZWZpbmUgVE1fUkVHX1RNX1BSVFlfU1RTX0NMUgkJCQkJIDB4MTY0MTA0CiAvKiBbUlcgOF0gVGhlIGV2ZW50IGlkIGZvciBhZ2dyZWdhdGVkIGludGVycnVwdCAwICovCiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMAkJCQkgMHg0MjAzOAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEJCQkJIDB4NDIwM2MKQEAgLTM4MzUsNiArMzg5MSw4IEBACiAjZGVmaW5lIFRTRE1fUkVHX1RTRE1fUFJUWV9NQVNLIAkJCQkgMHg0MjJiYwogLyogW1IgMTFdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIFRTRE1fUkVHX1RTRE1fUFJUWV9TVFMJCQkJCSAweDQyMmIwCisvKiBbUkMgMTFdIFBhcml0eSByZWdpc3RlciAjMCByZWFkIGNsZWFyICovCisjZGVmaW5lIFRTRE1fUkVHX1RTRE1fUFJUWV9TVFNfQ0xSCQkJCSAweDQyMmI0CiAvKiBbUlcgNV0gVGhlIG51bWJlciBvZiB0aW1lX3Nsb3RzIGluIHRoZSBhcmJpdHJhdGlvbiBjeWNsZSAqLwogI2RlZmluZSBUU0VNX1JFR19BUkJfQ1lDTEVfU0laRSAJCQkJIDB4MTgwMDM0CiAvKiBbUlcgM10gVGhlIHNvdXJjZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhcmJpdHJhdGlvbiBlbGVtZW50IDAuIFNvdXJjZQpAQCAtMzkxNCw2ICszOTcyLDkgQEAKICNkZWZpbmUgVFNFTV9SRUdfU0xPV19FWFRfU1RPUkVfRU1QVFkJCQkJIDB4MTgwMmEwCiAvKiBbUlcgOF0gTGlzdCBvZiBmcmVlIHRocmVhZHMgLiBUaGVyZSBpcyBhIGJpdCBwZXIgdGhyZWFkLiAqLwogI2RlZmluZSBUU0VNX1JFR19USFJFQURTX0xJU1QJCQkJCSAweDE4MDJlNAorLyogW1JDIDMyXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCBjbGVhciAqLworI2RlZmluZSBUU0VNX1JFR19UU0VNX1BSVFlfU1RTX0NMUl8wCQkJCSAweDE4MDExOAorI2RlZmluZSBUU0VNX1JFR19UU0VNX1BSVFlfU1RTX0NMUl8xCQkJCSAweDE4MDEyOAogLyogW1JXIDNdIFRoZSBhcmJpdHJhdGlvbiBzY2hlbWUgb2YgdGltZV9zbG90IDAgKi8KICNkZWZpbmUgVFNFTV9SRUdfVFNfMF9BUwkJCQkJIDB4MTgwMDM4CiAvKiBbUlcgM10gVGhlIGFyYml0cmF0aW9uIHNjaGVtZSBvZiB0aW1lX3Nsb3QgMTAgKi8KQEAgLTQxMTYsNiArNDE3Nyw4IEBACiAjZGVmaW5lIFVDTV9SRUdfVUNNX0lOVF9TVFMJCQkJCSAweGUwMWM4CiAvKiBbUiAyN10gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgVUNNX1JFR19VQ01fUFJUWV9TVFMJCQkJCSAweGUwMWQ4CisvKiBbUkMgMjddIFBhcml0eSByZWdpc3RlciAjMCByZWFkIGNsZWFyICovCisjZGVmaW5lIFVDTV9SRUdfVUNNX1BSVFlfU1RTX0NMUgkJCQkgMHhlMDFkYwogLyogW1JXIDJdIFRoZSBzaXplIG9mIEFHIGNvbnRleHQgcmVnaW9uIDAgaW4gUkVHLXBhaXJzLiBEZXNpZ25hdGVzIHRoZSBNUwogICAgUkVHLXBhaXIgbnVtYmVyIChlLmcuIGlmIHJlZ2lvbiAwIGlzIDYgUkVHLXBhaXJzOyB0aGUgdmFsdWUgc2hvdWxkIGJlIDUpLgogICAgSXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiB0aGUgQUcgY29udGV4dCBSRUctcGFpcnMgd3JpdHRlbiBiYWNrOwpAQCAtNDI5Miw2ICs0MzU1LDggQEAKICNkZWZpbmUgVVNETV9SRUdfVVNETV9QUlRZX01BU0sgCQkJCSAweGM0MmMwCiAvKiBbUiAxMV0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgVVNETV9SRUdfVVNETV9QUlRZX1NUUwkJCQkJIDB4YzQyYjQKKy8qIFtSQyAxMV0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgY2xlYXIgKi8KKyNkZWZpbmUgVVNETV9SRUdfVVNETV9QUlRZX1NUU19DTFIJCQkJIDB4YzQyYjgKIC8qIFtSVyA1XSBUaGUgbnVtYmVyIG9mIHRpbWVfc2xvdHMgaW4gdGhlIGFyYml0cmF0aW9uIGN5Y2xlICovCiAjZGVmaW5lIFVTRU1fUkVHX0FSQl9DWUNMRV9TSVpFIAkJCQkgMHgzMDAwMzQKIC8qIFtSVyAzXSBUaGUgc291cmNlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGFyYml0cmF0aW9uIGVsZW1lbnQgMC4gU291cmNlCkBAIC00NDIxLDYgKzQ0ODYsOSBAQAogLyogW1IgMzJdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIFVTRU1fUkVHX1VTRU1fUFJUWV9TVFNfMAkJCQkgMHgzMDAxMjQKICNkZWZpbmUgVVNFTV9SRUdfVVNFTV9QUlRZX1NUU18xCQkJCSAweDMwMDEzNAorLyogW1JDIDMyXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCBjbGVhciAqLworI2RlZmluZSBVU0VNX1JFR19VU0VNX1BSVFlfU1RTX0NMUl8wCQkJCSAweDMwMDEyOAorI2RlZmluZSBVU0VNX1JFR19VU0VNX1BSVFlfU1RTX0NMUl8xCQkJCSAweDMwMDEzOAogLyogW1cgN10gVkYgb3IgUEYgSUQgZm9yIHJlc2V0IGVycm9yIGJpdC4gVmFsdWVzIDAtNjMgcmVzZXQgZXJyb3IgYml0IGZvciA2NAogICogVkY7IHZhbHVlcyA2NC02NyByZXNldCBlcnJvciBmb3IgNCBQRjsgdmFsdWVzIDY4LTEyNyBhcmUgbm90IHZhbGlkLiAqLwogI2RlZmluZSBVU0VNX1JFR19WRlBGX0VSUl9OVU0JCQkJCSAweDMwMDM4MApAQCAtNDc5Nyw2ICs0ODY1LDggQEAKICNkZWZpbmUgWFNETV9SRUdfWFNETV9QUlRZX01BU0sgCQkJCSAweDE2NjJiYwogLyogW1IgMTFdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIFhTRE1fUkVHX1hTRE1fUFJUWV9TVFMJCQkJCSAweDE2NjJiMAorLyogW1JDIDExXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCBjbGVhciAqLworI2RlZmluZSBYU0RNX1JFR19YU0RNX1BSVFlfU1RTX0NMUgkJCQkgMHgxNjYyYjQKIC8qIFtSVyA1XSBUaGUgbnVtYmVyIG9mIHRpbWVfc2xvdHMgaW4gdGhlIGFyYml0cmF0aW9uIGN5Y2xlICovCiAjZGVmaW5lIFhTRU1fUkVHX0FSQl9DWUNMRV9TSVpFIAkJCQkgMHgyODAwMzQKIC8qIFtSVyAzXSBUaGUgc291cmNlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGFyYml0cmF0aW9uIGVsZW1lbnQgMC4gU291cmNlCkBAIC00OTI5LDYgKzQ5OTksOSBAQAogLyogW1IgMzJdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIFhTRU1fUkVHX1hTRU1fUFJUWV9TVFNfMAkJCQkgMHgyODAxMjQKICNkZWZpbmUgWFNFTV9SRUdfWFNFTV9QUlRZX1NUU18xCQkJCSAweDI4MDEzNAorLyogW1JDIDMyXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCBjbGVhciAqLworI2RlZmluZSBYU0VNX1JFR19YU0VNX1BSVFlfU1RTX0NMUl8wCQkJCSAweDI4MDEyOAorI2RlZmluZSBYU0VNX1JFR19YU0VNX1BSVFlfU1RTX0NMUl8xCQkJCSAweDI4MDEzOAogI2RlZmluZSBNQ1BSX05WTV9BQ0NFU1NfRU5BQkxFX0VOCQkJCSAoMUw8PDApCiAjZGVmaW5lIE1DUFJfTlZNX0FDQ0VTU19FTkFCTEVfV1JfRU4JCQkJICgxTDw8MSkKICNkZWZpbmUgTUNQUl9OVk1fQUREUl9OVk1fQUREUl9WQUxVRQkJCQkgKDB4ZmZmZmZmTDw8MCkKQEAgLTYzMTYsMyArNjM4OSw0IEBACiB9CiAKIAorI2VuZGlmIC8qIEJOWDJYX1JFR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54Mnhfc3RhdHMuYwppbmRleCA2ZTRkOWIxLi5iZGE2MGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3N0YXRzLmMKQEAgLTE1OCw2ICsxNTgsMTEgQEAKIAogCQlzcGluX2xvY2tfYmgoJmJwLT5zdGF0c19sb2NrKTsKIAorCQlpZiAoYnAtPnN0YXRzX3BlbmRpbmcpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZicC0+c3RhdHNfbG9jayk7CisJCQlyZXR1cm47CisJCX0KKwogCQlyYW1yb2RfZGF0YS5kcnZfY291bnRlciA9IGJwLT5zdGF0c19jb3VudGVyKys7CiAJCXJhbXJvZF9kYXRhLmNvbGxlY3RfcG9ydCA9IGJwLT5wb3J0LnBtZiA/IDEgOiAwOwogCQlmb3JfZWFjaF9ldGhfcXVldWUoYnAsIGkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKaW5kZXggNDhjZjI0Zi4uMTcxNzgyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwpAQCAtODQwLDcgKzg0MCw3IEBACiAJbGFjcGR1X2hlYWRlciA9IChzdHJ1Y3QgbGFjcGR1X2hlYWRlciAqKXNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCiAJbWVtY3B5KGxhY3BkdV9oZWFkZXItPmhkci5oX2Rlc3QsIGxhY3BkdV9tY2FzdF9hZGRyLCBFVEhfQUxFTik7Ci0JLyogTm90ZTogc291cmNlIGFkZHJlcyBpcyBzZXQgdG8gYmUgdGhlIG1lbWJlcidzIFBFUk1BTkVOVCBhZGRyZXNzLAorCS8qIE5vdGU6IHNvdXJjZSBhZGRyZXNzIGlzIHNldCB0byBiZSB0aGUgbWVtYmVyJ3MgUEVSTUFORU5UIGFkZHJlc3MsCiAJICAgYmVjYXVzZSB3ZSB1c2UgaXQgdG8gaWRlbnRpZnkgbG9vcGJhY2sgbGFjcGR1cyBpbiByZWNlaXZlLiAqLwogCW1lbWNweShsYWNwZHVfaGVhZGVyLT5oZHIuaF9zb3VyY2UsIHNsYXZlLT5wZXJtX2h3YWRkciwgRVRIX0FMRU4pOwogCWxhY3BkdV9oZWFkZXItPmhkci5oX3Byb3RvID0gUEtUX1RZUEVfTEFDUERVOwpAQCAtODgxLDcgKzg4MSw3IEBACiAJbWFya2VyX2hlYWRlciA9IChzdHJ1Y3QgYm9uZF9tYXJrZXJfaGVhZGVyICopc2tiX3B1dChza2IsIGxlbmd0aCk7CiAKIAltZW1jcHkobWFya2VyX2hlYWRlci0+aGRyLmhfZGVzdCwgbGFjcGR1X21jYXN0X2FkZHIsIEVUSF9BTEVOKTsKLQkvKiBOb3RlOiBzb3VyY2UgYWRkcmVzIGlzIHNldCB0byBiZSB0aGUgbWVtYmVyJ3MgUEVSTUFORU5UIGFkZHJlc3MsCisJLyogTm90ZTogc291cmNlIGFkZHJlc3MgaXMgc2V0IHRvIGJlIHRoZSBtZW1iZXIncyBQRVJNQU5FTlQgYWRkcmVzcywKIAkgICBiZWNhdXNlIHdlIHVzZSBpdCB0byBpZGVudGlmeSBsb29wYmFjayBNQVJLRVJzIGluIHJlY2VpdmUuICovCiAJbWVtY3B5KG1hcmtlcl9oZWFkZXItPmhkci5oX3NvdXJjZSwgc2xhdmUtPnBlcm1faHdhZGRyLCBFVEhfQUxFTik7CiAJbWFya2VyX2hlYWRlci0+aGRyLmhfcHJvdG8gPSBQS1RfVFlQRV9MQUNQRFU7CkBAIC0xOTE2LDcgKzE5MTYsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JLy9jaGVjayB0aGF0IHRoZSBzbGF2ZSBoYXMgbm90IGJlZW4gaW50aWFsaXplZCB5ZXQuCisJLy9jaGVjayB0aGF0IHRoZSBzbGF2ZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LgogCWlmIChTTEFWRV9BRF9JTkZPKHNsYXZlKS5wb3J0LnNsYXZlICE9IHNsYXZlKSB7CiAKIAkJLy8gcG9ydCBpbml0aWFsaXphdGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9zdWJyLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3N1YnIuYwppbmRleCA2M2ViZjc2Li44YTQzYzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3N1YnIuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3N1YnIuYwpAQCAtNTU2LDcgKzU1Niw3IEBACiAjZGVmaW5lIEVFUFJPTV9NQVhfUE9MTCAgIDQKIAogLyoKLSAqIFJlYWQgU0VFUFJPTS4gQSB6ZXJvIGlzIHdyaXR0ZW4gdG8gdGhlIGZsYWcgcmVnaXN0ZXIgd2hlbiB0aGUgYWRkcmVzIGlzCisgKiBSZWFkIFNFRVBST00uIEEgemVybyBpcyB3cml0dGVuIHRvIHRoZSBmbGFnIHJlZ2lzdGVyIHdoZW4gdGhlIGFkZHJlc3MgaXMKICAqIHdyaXR0ZW4gdG8gdGhlIENvbnRyb2wgcmVnaXN0ZXIuIFRoZSBoYXJkd2FyZSBkZXZpY2Ugd2lsbCBzZXQgdGhlIGZsYWcgdG8gYQogICogb25lIHdoZW4gNEIgaGF2ZSBiZWVuIHRyYW5zZmVycmVkIHRvIHRoZSBEYXRhIHJlZ2lzdGVyLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9tYzUuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL21jNS5jCmluZGV4IGE4NzY2ZmIuLmUxM2I3ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL21jNS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL21jNS5jCkBAIC0zMTgsNyArMzE4LDcgQEAKIAogLyoKICAqIEluaXRpYWxpemF0aW9uIHRoYXQgcmVxdWlyZXMgdGhlIE9TIGFuZCBwcm90b2NvbCBsYXllcnMgdG8gYWxyZWFkeQotICogYmUgaW50aWFsaXplZCBnb2VzIGhlcmUuCisgKiBiZSBpbml0aWFsaXplZCBnb2VzIGhlcmUuCiAgKi8KIGludCB0M19tYzVfaW5pdChzdHJ1Y3QgbWM1ICptYzUsIHVuc2lnbmVkIGludCBuc2VydmVycywgdW5zaWduZWQgaW50IG5maWx0ZXJzLAogCQl1bnNpZ25lZCBpbnQgbnJvdXRlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMgYi9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCmluZGV4IGVjODU3OWEuLmQ1NWRiNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYwpAQCAtNjA3LDcgKzYwNyw3IEBACiAgKgogICoJUmVhZCBhIDMyLWJpdCB3b3JkIGZyb20gYSBsb2NhdGlvbiBpbiBWUEQgRUVQUk9NIHVzaW5nIHRoZSBjYXJkJ3MgUENJCiAgKglWUEQgUk9NIGNhcGFiaWxpdHkuICBBIHplcm8gaXMgd3JpdHRlbiB0byB0aGUgZmxhZyBiaXQgd2hlbiB0aGUKLSAqCWFkZHJlcyBpcyB3cml0dGVuIHRvIHRoZSBjb250cm9sIHJlZ2lzdGVyLiAgVGhlIGhhcmR3YXJlIGRldmljZSB3aWxsCisgKglhZGRyZXNzIGlzIHdyaXR0ZW4gdG8gdGhlIGNvbnRyb2wgcmVnaXN0ZXIuICBUaGUgaGFyZHdhcmUgZGV2aWNlIHdpbGwKICAqCXNldCB0aGUgZmxhZyB0byAxIHdoZW4gNCBieXRlcyBoYXZlIGJlZW4gcmVhZCBpbnRvIHRoZSBkYXRhIHJlZ2lzdGVyLgogICovCiBpbnQgdDNfc2VlcHJvbV9yZWFkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgX19sZTMyICpkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjR2Zi9jeGdiNHZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKaW5kZXggM2M0MDNmOC4uNTYxNjZhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjR2Zi9jeGdiNHZmX21haW4uYworKysgYi9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jCkBAIC03NDksMTMgKzc0OSwxOSBAQAogCW5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMoZGV2LCBwaS0+bnFzZXRzKTsKIAllcnIgPSBuZXRpZl9zZXRfcmVhbF9udW1fcnhfcXVldWVzKGRldiwgcGktPm5xc2V0cyk7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQlzZXRfYml0KHBpLT5wb3J0X2lkLCAmYWRhcHRlci0+b3Blbl9kZXZpY2VfbWFwKTsKKwkJZ290byBlcnJfdW53aW5kOwogCWVyciA9IGxpbmtfc3RhcnQoZGV2KTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycl91bndpbmQ7CisKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGRldik7CisJc2V0X2JpdChwaS0+cG9ydF9pZCwgJmFkYXB0ZXItPm9wZW5fZGV2aWNlX21hcCk7CiAJcmV0dXJuIDA7CisKK2Vycl91bndpbmQ6CisJaWYgKGFkYXB0ZXItPm9wZW5fZGV2aWNlX21hcCA9PSAwKQorCQlhZGFwdGVyX2Rvd24oYWRhcHRlcik7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKQEAgLTc2NCwxMyArNzcwLDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgY3hnYjR2Zl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldDsKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwaS0+YWRhcHRlcjsKIAogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhkZXYpOwogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JcmV0ID0gdDR2Zl9lbmFibGVfdmkoYWRhcHRlciwgcGktPnZpaWQsIGZhbHNlLCBmYWxzZSk7CisJdDR2Zl9lbmFibGVfdmkoYWRhcHRlciwgcGktPnZpaWQsIGZhbHNlLCBmYWxzZSk7CiAJcGktPmxpbmtfY2ZnLmxpbmtfb2sgPSAwOwogCiAJY2xlYXJfYml0KHBpLT5wb3J0X2lkLCAmYWRhcHRlci0+b3Blbl9kZXZpY2VfbWFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvdDR2Zl9ody5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2h3LmMKaW5kZXggZTRiZWM3OC4uMGY1MWM4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2h3LmMKQEAgLTE0Nyw5ICsxNDcsMjAgQEAKIAkvKgogCSAqIFdyaXRlIHRoZSBjb21tYW5kIGFycmF5IGludG8gdGhlIE1haWxib3ggRGF0YSByZWdpc3RlciBhcnJheSBhbmQKIAkgKiB0cmFuc2ZlciBvd25lcnNoaXAgb2YgdGhlIG1haWxib3ggdG8gdGhlIGZpcm13YXJlLgorCSAqCisJICogRm9yIHRoZSBWRnMsIHRoZSBNYWlsYm94IERhdGEgInJlZ2lzdGVycyIgYXJlIGFjdHVhbGx5IGJhY2tlZCBieQorCSAqIFQ0J3MgIk1BIiBpbnRlcmZhY2UgcmF0aGVyIHRoYW4gUEwgUmVnaXN0ZXJzIChhcyBpcyB0aGUgY2FzZSBmb3IKKwkgKiB0aGUgUEZzKS4gIEJlY2F1c2UgdGhlc2UgYXJlIGluIGRpZmZlcmVudCBjb2hlcmVuY3kgZG9tYWlucywgdGhlCisJICogd3JpdGUgdG8gdGhlIFZGJ3MgUEwtcmVnaXN0ZXItYmFja2VkIE1haWxib3ggQ29udHJvbCBjYW4gcmFjZSBpbgorCSAqIGZyb250IG9mIHRoZSB3cml0ZXMgdG8gdGhlIE1BLWJhY2tlZCBWRiBNYWlsYm94IERhdGEgInJlZ2lzdGVycyIuCisJICogU28gd2UgbmVlZCB0byBkbyBhIHJlYWQtYmFjayBvbiBhdCBsZWFzdCBvbmUgYnl0ZSBvZiB0aGUgVkYgTWFpbGJveAorCSAqIERhdGEgcmVnaXN0ZXJzIGJlZm9yZSBkb2luZyB0aGUgd3JpdGUgdG8gdGhlIFZGIE1haWxib3ggQ29udHJvbAorCSAqIHJlZ2lzdGVyLgogCSAqLwogCWZvciAoaSA9IDAsIHAgPSBjbWQ7IGkgPCBzaXplOyBpICs9IDgpCiAJCXQ0X3dyaXRlX3JlZzY0KGFkYXB0ZXIsIG1ib3hfZGF0YSArIGksIGJlNjRfdG9fY3B1KCpwKyspKTsKKwl0NF9yZWFkX3JlZyhhZGFwdGVyLCBtYm94X2RhdGEpOyAgICAgICAgIC8qIGZsdXNoIHdyaXRlICovCisKIAl0NF93cml0ZV9yZWcoYWRhcHRlciwgbWJveF9jdGwsCiAJCSAgICAgTUJNU0dWQUxJRCB8IE1CT1dORVIoTUJPWF9PV05FUl9GVykpOwogCXQ0X3JlYWRfcmVnKGFkYXB0ZXIsIG1ib3hfY3RsKTsgICAgICAgICAgLyogZmx1c2ggd3JpdGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCmluZGV4IDc3ZDA4ZTYuLmFlZDIyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYwpAQCAtMTMwLDEwICsxMzAsMTUgQEAKIAkJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0MSB8fAogCQkgICAgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQxX3Jldl8yIHx8CiAJCSAgICBody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDcgfHwKLQkJICAgIGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0N19yZXZfMikgeworCQkgICAgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3X3Jldl8yKQogCQkJaHctPnBoeV90eXBlID0gZTEwMDBfcGh5X2lncDsKLQkJCWJyZWFrOwotCQl9CisJCWJyZWFrOworCWNhc2UgUlRMODIxMUJfUEhZX0lEOgorCQlody0+cGh5X3R5cGUgPSBlMTAwMF9waHlfODIxMTsKKwkJYnJlYWs7CisJY2FzZSBSVEw4MjAxTl9QSFlfSUQ6CisJCWh3LT5waHlfdHlwZSA9IGUxMDAwX3BoeV84MjAxOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBTaG91bGQgbmV2ZXIgaGF2ZSBsb2FkZWQgb24gdGhpcyBkZXZpY2UgKi8KIAkJaHctPnBoeV90eXBlID0gZTEwMDBfcGh5X3VuZGVmaW5lZDsKQEAgLTMxOCw2ICszMjMsOSBAQAogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ3R0k6CiAJCWh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTQ3X3Jldl8yOwogCQlicmVhazsKKwljYXNlIEUxMDAwX0RFVl9JRF9JTlRFTF9DRTQxMDBfR0JFOgorCQlody0+bWFjX3R5cGUgPSBlMTAwMF9jZTQxMDA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIFNob3VsZCBuZXZlciBoYXZlIGxvYWRlZCBvbiB0aGlzIGRldmljZSAqLwogCQlyZXR1cm4gLUUxMDAwX0VSUl9NQUNfVFlQRTsKQEAgLTM3Miw2ICszODAsOSBAQAogCQljYXNlIGUxMDAwXzgyNTQyX3JldjJfMToKIAkJCWh3LT5tZWRpYV90eXBlID0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcjsKIAkJCWJyZWFrOworCQljYXNlIGUxMDAwX2NlNDEwMDoKKwkJCWh3LT5tZWRpYV90eXBlID0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXI7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXN0YXR1cyA9IGVyMzIoU1RBVFVTKTsKIAkJCWlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfVEJJTU9ERSkgewpAQCAtNDYwLDYgKzQ3MSw3IEBACiAJCS8qIFJlc2V0IGlzIHBlcmZvcm1lZCBvbiBhIHNoYWRvdyBvZiB0aGUgY29udHJvbCByZWdpc3RlciAqLwogCQlldzMyKENUUkxfRFVQLCAoY3RybCB8IEUxMDAwX0NUUkxfUlNUKSk7CiAJCWJyZWFrOworCWNhc2UgZTEwMDBfY2U0MTAwOgogCWRlZmF1bHQ6CiAJCWV3MzIoQ1RSTCwgKGN0cmwgfCBFMTAwMF9DVFJMX1JTVCkpOwogCQlicmVhazsKQEAgLTk1Miw2ICs5NjQsNjcgQEAKIH0KIAogLyoqCisgKiBlMTAwMF9jb3BwZXJfbGlua19ydGxfc2V0dXAgLSBDb3BwZXIgbGluayBzZXR1cCBmb3IgZTEwMDBfcGh5X3J0bCBzZXJpZXMuCisgKiBAaHc6IFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICoKKyAqIENvbW1pdHMgY2hhbmdlcyB0byBQSFkgY29uZmlndXJhdGlvbiBieSBjYWxsaW5nIGUxMDAwX3BoeV9yZXNldCgpLgorICovCitzdGF0aWMgczMyIGUxMDAwX2NvcHBlcl9saW5rX3J0bF9zZXR1cChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXMzMiByZXRfdmFsOworCisJLyogU1cgcmVzZXQgdGhlIFBIWSBzbyBhbGwgY2hhbmdlcyB0YWtlIGVmZmVjdCAqLworCXJldF92YWwgPSBlMTAwMF9waHlfcmVzZXQoaHcpOworCWlmIChyZXRfdmFsKSB7CisJCWVfZGJnKCJFcnJvciBSZXNldHRpbmcgdGhlIFBIWVxuIik7CisJCXJldHVybiByZXRfdmFsOworCX0KKworCXJldHVybiBFMTAwMF9TVUNDRVNTOworfQorCitzdGF0aWMgczMyIGdiZV9kaGdfcGh5X3NldHVwKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJczMyIHJldF92YWw7CisJdTMyIGN0cmxfYXV4OworCisJc3dpdGNoIChody0+cGh5X3R5cGUpIHsKKwljYXNlIGUxMDAwX3BoeV84MjExOgorCQlyZXRfdmFsID0gZTEwMDBfY29wcGVyX2xpbmtfcnRsX3NldHVwKGh3KTsKKwkJaWYgKHJldF92YWwpIHsKKwkJCWVfZGJnKCJlMTAwMF9jb3BwZXJfbGlua19ydGxfc2V0dXAgZmFpbGVkIVxuIik7CisJCQlyZXR1cm4gcmV0X3ZhbDsKKwkJfQorCQlicmVhazsKKwljYXNlIGUxMDAwX3BoeV84MjAxOgorCQkvKiBTZXQgUk1JSSBtb2RlICovCisJCWN0cmxfYXV4ID0gZXIzMihDVExfQVVYKTsKKwkJY3RybF9hdXggfD0gRTEwMDBfQ1RMX0FVWF9STUlJOworCQlldzMyKENUTF9BVVgsIGN0cmxfYXV4KTsKKwkJRTEwMDBfV1JJVEVfRkxVU0goKTsKKworCQkvKiBEaXNhYmxlIHRoZSBKL0sgYml0cyByZXF1aXJlZCBmb3IgcmVjZWl2ZSAqLworCQljdHJsX2F1eCA9IGVyMzIoQ1RMX0FVWCk7CisJCWN0cmxfYXV4IHw9IDB4NDsKKwkJY3RybF9hdXggJj0gfjB4MjsKKwkJZXczMihDVExfQVVYLCBjdHJsX2F1eCk7CisJCUUxMDAwX1dSSVRFX0ZMVVNIKCk7CisJCXJldF92YWwgPSBlMTAwMF9jb3BwZXJfbGlua19ydGxfc2V0dXAoaHcpOworCisJCWlmIChyZXRfdmFsKSB7CisJCQllX2RiZygiZTEwMDBfY29wcGVyX2xpbmtfcnRsX3NldHVwIGZhaWxlZCFcbiIpOworCQkJcmV0dXJuIHJldF92YWw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZV9kYmcoIkVycm9yIFJlc2V0dGluZyB0aGUgUEhZXG4iKTsKKwkJcmV0dXJuIEUxMDAwX0VSUl9QSFlfVFlQRTsKKwl9CisKKwlyZXR1cm4gRTEwMDBfU1VDQ0VTUzsKK30KKworLyoqCiAgKiBlMTAwMF9jb3BwZXJfbGlua19wcmVjb25maWcgLSBlYXJseSBjb25maWd1cmF0aW9uIGZvciBjb3BwZXIKICAqIEBodzogU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKgpAQCAtMTI4Niw2ICsxMzU5LDEwIEBACiAJaWYgKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgPT0gMCkKIAkJaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IEFVVE9ORUdfQURWRVJUSVNFX1NQRUVEX0RFRkFVTFQ7CiAKKwkvKiBJRkUvUlRMODIwMU4gUEhZIG9ubHkgc3VwcG9ydHMgMTAvMTAwICovCisJaWYgKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfODIwMSkKKwkJaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmPSBBVVRPTkVHX0FEVkVSVElTRV8xMF8xMDBfQUxMOworCiAJZV9kYmcoIlJlY29uZmlndXJpbmcgYXV0by1uZWcgYWR2ZXJ0aXNlbWVudCBwYXJhbXNcbiIpOwogCXJldF92YWwgPSBlMTAwMF9waHlfc2V0dXBfYXV0b25lZyhodyk7CiAJaWYgKHJldF92YWwpIHsKQEAgLTEzNDEsNyArMTQxOCw3IEBACiAJczMyIHJldF92YWw7CiAJZV9kYmcoImUxMDAwX2NvcHBlcl9saW5rX3Bvc3Rjb25maWciKTsKIAotCWlmIChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDQpIHsKKwlpZiAoKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0NCkgJiYgKGh3LT5tYWNfdHlwZSAhPSBlMTAwMF9jZTQxMDApKSB7CiAJCWUxMDAwX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CiAJfSBlbHNlIHsKIAkJcmV0X3ZhbCA9IGUxMDAwX2NvbmZpZ19tYWNfdG9fcGh5KGh3KTsKQEAgLTEzOTUsNiArMTQ3MiwxMiBAQAogCQlyZXRfdmFsID0gZTEwMDBfY29wcGVyX2xpbmtfbWdwX3NldHVwKGh3KTsKIAkJaWYgKHJldF92YWwpCiAJCQlyZXR1cm4gcmV0X3ZhbDsKKwl9IGVsc2UgeworCQlyZXRfdmFsID0gZ2JlX2RoZ19waHlfc2V0dXAoaHcpOworCQlpZiAocmV0X3ZhbCkgeworCQkJZV9kYmcoImdiZV9kaGdfcGh5X3NldHVwIGZhaWxlZCFcbiIpOworCQkJcmV0dXJuIHJldF92YWw7CisJCX0KIAl9CiAKIAlpZiAoaHctPmF1dG9uZWcpIHsKQEAgLTE0NjEsMTAgKzE1NDQsMTEgQEAKIAkJcmV0dXJuIHJldF92YWw7CiAKIAkvKiBSZWFkIHRoZSBNSUkgMTAwMEJhc2UtVCBDb250cm9sIFJlZ2lzdGVyIChBZGRyZXNzIDkpLiAqLwotCXJldF92YWwgPQotCSAgICBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCAmbWlpXzEwMDB0X2N0cmxfcmVnKTsKKwlyZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwgJm1paV8xMDAwdF9jdHJsX3JlZyk7CiAJaWYgKHJldF92YWwpCiAJCXJldHVybiByZXRfdmFsOworCWVsc2UgaWYgKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfODIwMSkKKwkJbWlpXzEwMDB0X2N0cmxfcmVnICY9IH5SRUc5X1NQRUVEX01BU0s7CiAKIAkvKiBOZWVkIHRvIHBhcnNlIGJvdGggYXV0b25lZ19hZHZlcnRpc2VkIGFuZCBmYyBhbmQgc2V0IHVwCiAJICogdGhlIGFwcHJvcHJpYXRlIFBIWSByZWdpc3RlcnMuICBGaXJzdCB3ZSB3aWxsIHBhcnNlIGZvcgpAQCAtMTU3Nyw5ICsxNjYxLDE0IEBACiAKIAllX2RiZygiQXV0by1OZWcgQWR2ZXJ0aXNpbmcgJXhcbiIsIG1paV9hdXRvbmVnX2Fkdl9yZWcpOwogCi0JcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCBtaWlfMTAwMHRfY3RybF9yZWcpOwotCWlmIChyZXRfdmFsKQotCQlyZXR1cm4gcmV0X3ZhbDsKKwlpZiAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV84MjAxKSB7CisJCW1paV8xMDAwdF9jdHJsX3JlZyA9IDA7CisJfSBlbHNlIHsKKwkJcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWlfMTAwMHRfY3RybF9yZWcpOworCQlpZiAocmV0X3ZhbCkKKwkJCXJldHVybiByZXRfdmFsOworCX0KIAogCXJldHVybiBFMTAwMF9TVUNDRVNTOwogfQpAQCAtMTg2MCw3ICsxOTQ5LDcgQEAKIAogCS8qIDgyNTQ0IG9yIG5ld2VyIE1BQywgQXV0byBTcGVlZCBEZXRlY3Rpb24gdGFrZXMgY2FyZSBvZgogCSAqIE1BQyBzcGVlZC9kdXBsZXggY29uZmlndXJhdGlvbi4qLwotCWlmIChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDQpCisJaWYgKChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDQpICYmIChody0+bWFjX3R5cGUgIT0gZTEwMDBfY2U0MTAwKSkKIAkJcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiAKIAkvKiBSZWFkIHRoZSBEZXZpY2UgQ29udHJvbCBSZWdpc3RlciBhbmQgc2V0IHRoZSBiaXRzIHRvIEZvcmNlIFNwZWVkCkBAIC0xODcwLDI3ICsxOTU5LDQ5IEBACiAJY3RybCB8PSAoRTEwMDBfQ1RSTF9GUkNTUEQgfCBFMTAwMF9DVFJMX0ZSQ0RQWCk7CiAJY3RybCAmPSB+KEUxMDAwX0NUUkxfU1BEX1NFTCB8IEUxMDAwX0NUUkxfSUxPUyk7CiAKLQkvKiBTZXQgdXAgZHVwbGV4IGluIHRoZSBEZXZpY2UgQ29udHJvbCBhbmQgVHJhbnNtaXQgQ29udHJvbAotCSAqIHJlZ2lzdGVycyBkZXBlbmRpbmcgb24gbmVnb3RpYXRlZCB2YWx1ZXMuCi0JICovCi0JcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfU1RBVFVTLCAmcGh5X2RhdGEpOwotCWlmIChyZXRfdmFsKQotCQlyZXR1cm4gcmV0X3ZhbDsKKwlzd2l0Y2ggKGh3LT5waHlfdHlwZSkgeworCWNhc2UgZTEwMDBfcGh5XzgyMDE6CisJCXJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9DVFJMLCAmcGh5X2RhdGEpOworCQlpZiAocmV0X3ZhbCkKKwkJCXJldHVybiByZXRfdmFsOwogCi0JaWYgKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNTUl9EUExYKQotCQljdHJsIHw9IEUxMDAwX0NUUkxfRkQ7Ci0JZWxzZQotCQljdHJsICY9IH5FMTAwMF9DVFJMX0ZEOworCQlpZiAocGh5X2RhdGEgJiBSVExfUEhZX0NUUkxfRkQpCisJCQljdHJsIHw9IEUxMDAwX0NUUkxfRkQ7CisJCWVsc2UKKwkJCWN0cmwgJj0gfkUxMDAwX0NUUkxfRkQ7CiAKLQllMTAwMF9jb25maWdfY29sbGlzaW9uX2Rpc3QoaHcpOworCQlpZiAocGh5X2RhdGEgJiBSVExfUEhZX0NUUkxfU1BEXzEwMCkKKwkJCWN0cmwgfD0gRTEwMDBfQ1RSTF9TUERfMTAwOworCQllbHNlCisJCQljdHJsIHw9IEUxMDAwX0NUUkxfU1BEXzEwOwogCi0JLyogU2V0IHVwIHNwZWVkIGluIHRoZSBEZXZpY2UgQ29udHJvbCByZWdpc3RlciBkZXBlbmRpbmcgb24KLQkgKiBuZWdvdGlhdGVkIHZhbHVlcy4KLQkgKi8KLQlpZiAoKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNTUl9TUEVFRCkgPT0gTTg4RTEwMDBfUFNTUl8xMDAwTUJTKQotCQljdHJsIHw9IEUxMDAwX0NUUkxfU1BEXzEwMDA7Ci0JZWxzZSBpZiAoKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNTUl9TUEVFRCkgPT0gTTg4RTEwMDBfUFNTUl8xMDBNQlMpCi0JCWN0cmwgfD0gRTEwMDBfQ1RSTF9TUERfMTAwOworCQllMTAwMF9jb25maWdfY29sbGlzaW9uX2Rpc3QoaHcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBTZXQgdXAgZHVwbGV4IGluIHRoZSBEZXZpY2UgQ29udHJvbCBhbmQgVHJhbnNtaXQgQ29udHJvbAorCQkgKiByZWdpc3RlcnMgZGVwZW5kaW5nIG9uIG5lZ290aWF0ZWQgdmFsdWVzLgorCQkgKi8KKwkJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfU1RBVFVTLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaHlfZGF0YSk7CisJCWlmIChyZXRfdmFsKQorCQkJcmV0dXJuIHJldF92YWw7CisKKwkJaWYgKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNTUl9EUExYKQorCQkJY3RybCB8PSBFMTAwMF9DVFJMX0ZEOworCQllbHNlCisJCQljdHJsICY9IH5FMTAwMF9DVFJMX0ZEOworCisJCWUxMDAwX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CisKKwkJLyogU2V0IHVwIHNwZWVkIGluIHRoZSBEZXZpY2UgQ29udHJvbCByZWdpc3RlciBkZXBlbmRpbmcgb24KKwkJICogbmVnb3RpYXRlZCB2YWx1ZXMuCisJCSAqLworCQlpZiAoKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNTUl9TUEVFRCkgPT0gTTg4RTEwMDBfUFNTUl8xMDAwTUJTKQorCQkJY3RybCB8PSBFMTAwMF9DVFJMX1NQRF8xMDAwOworCQllbHNlIGlmICgocGh5X2RhdGEgJiBNODhFMTAwMF9QU1NSX1NQRUVEKSA9PQorCQkgICAgICAgICBNODhFMTAwMF9QU1NSXzEwME1CUykKKwkJCWN0cmwgfD0gRTEwMDBfQ1RSTF9TUERfMTAwOworCX0KIAogCS8qIFdyaXRlIHRoZSBjb25maWd1cmVkIHZhbHVlcyBiYWNrIHRvIHRoZSBEZXZpY2UgQ29udHJvbCBSZWcuICovCiAJZXczMihDVFJMLCBjdHJsKTsKQEAgLTI0MDEsNyArMjUxMiw4IEBACiAJCSAqIHNwZWVkL2R1cGxleCBvbiB0aGUgTUFDIHRvIHRoZSBjdXJyZW50IFBIWSBzcGVlZC9kdXBsZXgKIAkJICogc2V0dGluZ3MuCiAJCSAqLwotCQlpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQ0KQorCQlpZiAoKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0NCkgJiYKKwkJICAgIChody0+bWFjX3R5cGUgIT0gZTEwMDBfY2U0MTAwKSkKIAkJCWUxMDAwX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CiAJCWVsc2UgewogCQkJcmV0X3ZhbCA9IGUxMDAwX2NvbmZpZ19tYWNfdG9fcGh5KGh3KTsKQEAgLTI3MzgsNyArMjg1MCw3IEBACiB7CiAJdTMyIGk7CiAJdTMyIG1kaWMgPSAwOwotCWNvbnN0IHUzMiBwaHlfYWRkciA9IDE7CisJY29uc3QgdTMyIHBoeV9hZGRyID0gKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9jZTQxMDApID8gaHctPnBoeV9hZGRyIDogMTsKIAogCWVfZGJnKCJlMTAwMF9yZWFkX3BoeV9yZWdfZXgiKTsKIApAQCAtMjc1MiwyOCArMjg2NCw2MSBAQAogCQkgKiBDb250cm9sIHJlZ2lzdGVyLiAgVGhlIE1BQyB3aWxsIHRha2UgY2FyZSBvZiBpbnRlcmZhY2luZyB3aXRoIHRoZQogCQkgKiBQSFkgdG8gcmV0cmlldmUgdGhlIGRlc2lyZWQgZGF0YS4KIAkJICovCi0JCW1kaWMgPSAoKHJlZ19hZGRyIDw8IEUxMDAwX01ESUNfUkVHX1NISUZUKSB8Ci0JCQkocGh5X2FkZHIgPDwgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHwKLQkJCShFMTAwMF9NRElDX09QX1JFQUQpKTsKKwkJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9jZTQxMDApIHsKKwkJCW1kaWMgPSAoKHJlZ19hZGRyIDw8IEUxMDAwX01ESUNfUkVHX1NISUZUKSB8CisJCQkJKHBoeV9hZGRyIDw8IEUxMDAwX01ESUNfUEhZX1NISUZUKSB8CisJCQkJKElOVEVMX0NFX0dCRV9NRElDX09QX1JFQUQpIHwKKwkJCQkoSU5URUxfQ0VfR0JFX01ESUNfR08pKTsKIAotCQlldzMyKE1ESUMsIG1kaWMpOworCQkJd3JpdGVsKG1kaWMsIEUxMDAwX01ESU9fQ01EKTsKIAotCQkvKiBQb2xsIHRoZSByZWFkeSBiaXQgdG8gc2VlIGlmIHRoZSBNREkgcmVhZCBjb21wbGV0ZWQgKi8KLQkJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKLQkJCXVkZWxheSg1MCk7Ci0JCQltZGljID0gZXIzMihNRElDKTsKLQkJCWlmIChtZGljICYgRTEwMDBfTURJQ19SRUFEWSkKLQkJCQlicmVhazsKKwkJCS8qIFBvbGwgdGhlIHJlYWR5IGJpdCB0byBzZWUgaWYgdGhlIE1ESSByZWFkCisJCQkgKiBjb21wbGV0ZWQKKwkJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKKwkJCQl1ZGVsYXkoNTApOworCQkJCW1kaWMgPSByZWFkbChFMTAwMF9NRElPX0NNRCk7CisJCQkJaWYgKCEobWRpYyAmIElOVEVMX0NFX0dCRV9NRElDX0dPKSkKKwkJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChtZGljICYgSU5URUxfQ0VfR0JFX01ESUNfR08pIHsKKwkJCQllX2RiZygiTURJIFJlYWQgZGlkIG5vdCBjb21wbGV0ZVxuIik7CisJCQkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCQkJfQorCisJCQltZGljID0gcmVhZGwoRTEwMDBfTURJT19TVFMpOworCQkJaWYgKG1kaWMgJiBJTlRFTF9DRV9HQkVfTURJQ19SRUFEX0VSUk9SKSB7CisJCQkJZV9kYmcoIk1ESSBSZWFkIEVycm9yXG4iKTsKKwkJCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CisJCQl9CisJCQkqcGh5X2RhdGEgPSAodTE2KSBtZGljOworCQl9IGVsc2UgeworCQkJbWRpYyA9ICgocmVnX2FkZHIgPDwgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHwKKwkJCQkocGh5X2FkZHIgPDwgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHwKKwkJCQkoRTEwMDBfTURJQ19PUF9SRUFEKSk7CisKKwkJCWV3MzIoTURJQywgbWRpYyk7CisKKwkJCS8qIFBvbGwgdGhlIHJlYWR5IGJpdCB0byBzZWUgaWYgdGhlIE1ESSByZWFkCisJCQkgKiBjb21wbGV0ZWQKKwkJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKKwkJCQl1ZGVsYXkoNTApOworCQkJCW1kaWMgPSBlcjMyKE1ESUMpOworCQkJCWlmIChtZGljICYgRTEwMDBfTURJQ19SRUFEWSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIShtZGljICYgRTEwMDBfTURJQ19SRUFEWSkpIHsKKwkJCQllX2RiZygiTURJIFJlYWQgZGlkIG5vdCBjb21wbGV0ZVxuIik7CisJCQkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCQkJfQorCQkJaWYgKG1kaWMgJiBFMTAwMF9NRElDX0VSUk9SKSB7CisJCQkJZV9kYmcoIk1ESSBFcnJvclxuIik7CisJCQkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCQkJfQorCQkJKnBoeV9kYXRhID0gKHUxNikgbWRpYzsKIAkJfQotCQlpZiAoIShtZGljICYgRTEwMDBfTURJQ19SRUFEWSkpIHsKLQkJCWVfZGJnKCJNREkgUmVhZCBkaWQgbm90IGNvbXBsZXRlXG4iKTsKLQkJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKLQkJfQotCQlpZiAobWRpYyAmIEUxMDAwX01ESUNfRVJST1IpIHsKLQkJCWVfZGJnKCJNREkgRXJyb3JcbiIpOwotCQkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwotCQl9Ci0JCSpwaHlfZGF0YSA9ICh1MTYpIG1kaWM7CiAJfSBlbHNlIHsKIAkJLyogV2UgbXVzdCBmaXJzdCBzZW5kIGEgcHJlYW1ibGUgdGhyb3VnaCB0aGUgTURJTyBwaW4gdG8gc2lnbmFsIHRoZQogCQkgKiBiZWdpbm5pbmcgb2YgYW4gTUlJIGluc3RydWN0aW9uLiAgVGhpcyBpcyBkb25lIGJ5IHNlbmRpbmcgMzIKQEAgLTI4NDAsNyArMjk4NSw3IEBACiB7CiAJdTMyIGk7CiAJdTMyIG1kaWMgPSAwOwotCWNvbnN0IHUzMiBwaHlfYWRkciA9IDE7CisJY29uc3QgdTMyIHBoeV9hZGRyID0gKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9jZTQxMDApID8gaHctPnBoeV9hZGRyIDogMTsKIAogCWVfZGJnKCJlMTAwMF93cml0ZV9waHlfcmVnX2V4Iik7CiAKQEAgLTI4NTAsMjcgKzI5OTUsNTQgQEAKIAl9CiAKIAlpZiAoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDMpIHsKLQkJLyogU2V0IHVwIE9wLWNvZGUsIFBoeSBBZGRyZXNzLCByZWdpc3RlciBhZGRyZXNzLCBhbmQgZGF0YSBpbnRlbmRlZAotCQkgKiBmb3IgdGhlIFBIWSByZWdpc3RlciBpbiB0aGUgTURJIENvbnRyb2wgcmVnaXN0ZXIuICBUaGUgTUFDIHdpbGwgdGFrZQotCQkgKiBjYXJlIG9mIGludGVyZmFjaW5nIHdpdGggdGhlIFBIWSB0byBzZW5kIHRoZSBkZXNpcmVkIGRhdGEuCisJCS8qIFNldCB1cCBPcC1jb2RlLCBQaHkgQWRkcmVzcywgcmVnaXN0ZXIgYWRkcmVzcywgYW5kIGRhdGEKKwkJICogaW50ZW5kZWQgZm9yIHRoZSBQSFkgcmVnaXN0ZXIgaW4gdGhlIE1ESSBDb250cm9sIHJlZ2lzdGVyLgorCQkgKiBUaGUgTUFDIHdpbGwgdGFrZSBjYXJlIG9mIGludGVyZmFjaW5nIHdpdGggdGhlIFBIWSB0byBzZW5kCisJCSAqIHRoZSBkZXNpcmVkIGRhdGEuCiAJCSAqLwotCQltZGljID0gKCgodTMyKSBwaHlfZGF0YSkgfAotCQkJKHJlZ19hZGRyIDw8IEUxMDAwX01ESUNfUkVHX1NISUZUKSB8Ci0JCQkocGh5X2FkZHIgPDwgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHwKLQkJCShFMTAwMF9NRElDX09QX1dSSVRFKSk7CisJCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfY2U0MTAwKSB7CisJCQltZGljID0gKCgodTMyKSBwaHlfZGF0YSkgfAorCQkJCShyZWdfYWRkciA8PCBFMTAwMF9NRElDX1JFR19TSElGVCkgfAorCQkJCShwaHlfYWRkciA8PCBFMTAwMF9NRElDX1BIWV9TSElGVCkgfAorCQkJCShJTlRFTF9DRV9HQkVfTURJQ19PUF9XUklURSkgfAorCQkJCShJTlRFTF9DRV9HQkVfTURJQ19HTykpOwogCi0JCWV3MzIoTURJQywgbWRpYyk7CisJCQl3cml0ZWwobWRpYywgRTEwMDBfTURJT19DTUQpOwogCi0JCS8qIFBvbGwgdGhlIHJlYWR5IGJpdCB0byBzZWUgaWYgdGhlIE1ESSByZWFkIGNvbXBsZXRlZCAqLwotCQlmb3IgKGkgPSAwOyBpIDwgNjQxOyBpKyspIHsKLQkJCXVkZWxheSg1KTsKLQkJCW1kaWMgPSBlcjMyKE1ESUMpOwotCQkJaWYgKG1kaWMgJiBFMTAwMF9NRElDX1JFQURZKQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmICghKG1kaWMgJiBFMTAwMF9NRElDX1JFQURZKSkgewotCQkJZV9kYmcoIk1ESSBXcml0ZSBkaWQgbm90IGNvbXBsZXRlXG4iKTsKLQkJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwkJCS8qIFBvbGwgdGhlIHJlYWR5IGJpdCB0byBzZWUgaWYgdGhlIE1ESSByZWFkCisJCQkgKiBjb21wbGV0ZWQKKwkJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IDY0MDsgaSsrKSB7CisJCQkJdWRlbGF5KDUpOworCQkJCW1kaWMgPSByZWFkbChFMTAwMF9NRElPX0NNRCk7CisJCQkJaWYgKCEobWRpYyAmIElOVEVMX0NFX0dCRV9NRElDX0dPKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAobWRpYyAmIElOVEVMX0NFX0dCRV9NRElDX0dPKSB7CisJCQkJZV9kYmcoIk1ESSBXcml0ZSBkaWQgbm90IGNvbXBsZXRlXG4iKTsKKwkJCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CisJCQl9CisJCX0gZWxzZSB7CisJCQltZGljID0gKCgodTMyKSBwaHlfZGF0YSkgfAorCQkJCShyZWdfYWRkciA8PCBFMTAwMF9NRElDX1JFR19TSElGVCkgfAorCQkJCShwaHlfYWRkciA8PCBFMTAwMF9NRElDX1BIWV9TSElGVCkgfAorCQkJCShFMTAwMF9NRElDX09QX1dSSVRFKSk7CisKKwkJCWV3MzIoTURJQywgbWRpYyk7CisKKwkJCS8qIFBvbGwgdGhlIHJlYWR5IGJpdCB0byBzZWUgaWYgdGhlIE1ESSByZWFkCisJCQkgKiBjb21wbGV0ZWQKKwkJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IDY0MTsgaSsrKSB7CisJCQkJdWRlbGF5KDUpOworCQkJCW1kaWMgPSBlcjMyKE1ESUMpOworCQkJCWlmIChtZGljICYgRTEwMDBfTURJQ19SRUFEWSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIShtZGljICYgRTEwMDBfTURJQ19SRUFEWSkpIHsKKwkJCQllX2RiZygiTURJIFdyaXRlIGRpZCBub3QgY29tcGxldGVcbiIpOworCQkJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwkJCX0KIAkJfQogCX0gZWxzZSB7CiAJCS8qIFdlJ2xsIG5lZWQgdG8gdXNlIHRoZSBTVyBkZWZpbmVkIHBpbnMgdG8gc2hpZnQgdGhlIHdyaXRlIGNvbW1hbmQKQEAgLTMwNDgsNiArMzIyMCwxMSBAQAogCQlpZiAoaHctPnBoeV9pZCA9PSBNODhFMTAxMV9JX1BIWV9JRCkKIAkJCW1hdGNoID0gdHJ1ZTsKIAkJYnJlYWs7CisJY2FzZSBlMTAwMF9jZTQxMDA6CisJCWlmICgoaHctPnBoeV9pZCA9PSBSVEw4MjExQl9QSFlfSUQpIHx8CisJCSAgICAoaHctPnBoeV9pZCA9PSBSVEw4MjAxTl9QSFlfSUQpKQorCQkJbWF0Y2ggPSB0cnVlOworCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTQxOgogCWNhc2UgZTEwMDBfODI1NDFfcmV2XzI6CiAJY2FzZSBlMTAwMF84MjU0NzoKQEAgLTMyOTEsNiArMzQ2OCw5IEBACiAKIAlpZiAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3ApCiAJCXJldHVybiBlMTAwMF9waHlfaWdwX2dldF9pbmZvKGh3LCBwaHlfaW5mbyk7CisJZWxzZSBpZiAoKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfODIxMSkgfHwKKwkgICAgICAgICAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV84MjAxKSkKKwkJcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiAJZWxzZQogCQlyZXR1cm4gZTEwMDBfcGh5X204OF9nZXRfaW5mbyhodywgcGh5X2luZm8pOwogfQpAQCAtMzc0Miw2ICszOTIyLDEyIEBACiAKIAllX2RiZygiZTEwMDBfcmVhZF9lZXByb20iKTsKIAorCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfY2U0MTAwKSB7CisJCUdCRV9DT05GSUdfRkxBU0hfUkVBRChHQkVfQ09ORklHX0JBU0VfVklSVCwgb2Zmc2V0LCB3b3JkcywKKwkJICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOworCQlyZXR1cm4gRTEwMDBfU1VDQ0VTUzsKKwl9CisKIAkvKiBJZiBlZXByb20gaXMgbm90IHlldCBkZXRlY3RlZCwgZG8gc28gbm93ICovCiAJaWYgKGVlcHJvbS0+d29yZF9zaXplID09IDApCiAJCWUxMDAwX2luaXRfZWVwcm9tX3BhcmFtcyhodyk7CkBAIC0zOTA0LDYgKzQwOTAsMTIgQEAKIAogCWVfZGJnKCJlMTAwMF93cml0ZV9lZXByb20iKTsKIAorCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfY2U0MTAwKSB7CisJCUdCRV9DT05GSUdfRkxBU0hfV1JJVEUoR0JFX0NPTkZJR19CQVNFX1ZJUlQsIG9mZnNldCwgd29yZHMsCisJCSAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CisJCXJldHVybiBFMTAwMF9TVUNDRVNTOworCX0KKwogCS8qIElmIGVlcHJvbSBpcyBub3QgeWV0IGRldGVjdGVkLCBkbyBzbyBub3cgKi8KIAlpZiAoZWVwcm9tLT53b3JkX3NpemUgPT0gMCkKIAkJZTEwMDBfaW5pdF9lZXByb21fcGFyYW1zKGh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCmluZGV4IGVjZDlmNmMuLjE5NmVlZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaApAQCAtNDEsNyArNDEsNyBAQAogc3RydWN0IGUxMDAwX2h3X3N0YXRzOwogCiAvKiBFbnVtZXJhdGVkIHR5cGVzIHNwZWNpZmljIHRvIHRoZSBlMTAwMCBoYXJkd2FyZSAqLwotLyogTWVkaWEgQWNjZXNzIENvbnRyb2xlcnMgKi8KKy8qIE1lZGlhIEFjY2VzcyBDb250cm9sbGVycyAqLwogdHlwZWRlZiBlbnVtIHsKIAllMTAwMF91bmRlZmluZWQgPSAwLAogCWUxMDAwXzgyNTQyX3JldjJfMCwKQEAgLTUyLDYgKzUyLDcgQEAKIAllMTAwMF84MjU0NSwKIAllMTAwMF84MjU0NV9yZXZfMywKIAllMTAwMF84MjU0NiwKKwllMTAwMF9jZTQxMDAsCiAJZTEwMDBfODI1NDZfcmV2XzMsCiAJZTEwMDBfODI1NDEsCiAJZTEwMDBfODI1NDFfcmV2XzIsCkBAIC0yMDksOSArMjEwLDExIEBACiB9IGUxMDAwXzEwMDB0X3J4X3N0YXR1czsKIAogdHlwZWRlZiBlbnVtIHsKLSAgICBlMTAwMF9waHlfbTg4ID0gMCwKLSAgICBlMTAwMF9waHlfaWdwLAotICAgIGUxMDAwX3BoeV91bmRlZmluZWQgPSAweEZGCisJZTEwMDBfcGh5X204OCA9IDAsCisJZTEwMDBfcGh5X2lncCwKKwllMTAwMF9waHlfODIxMSwKKwllMTAwMF9waHlfODIwMSwKKwllMTAwMF9waHlfdW5kZWZpbmVkID0gMHhGRgogfSBlMTAwMF9waHlfdHlwZTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTQ0Miw2ICs0NDUsNyBAQAogI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NDdFSSAgICAgICAgICAgICAweDEwMTkKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTQ3RUlfTU9CSUxFICAgICAgMHgxMDFBCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU0NkdCX1FVQURfQ09QUEVSX0tTUDMgMHgxMEI1CisjZGVmaW5lIEUxMDAwX0RFVl9JRF9JTlRFTF9DRTQxMDBfR0JFICAgIDB4MkU2RQogCiAjZGVmaW5lIE5PREVfQUREUkVTU19TSVpFIDYKICNkZWZpbmUgRVRIX0xFTkdUSF9PRl9BRERSRVNTIDYKQEAgLTgwOCw2ICs4MTIsMTYgQEAKICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFQgMHgwMDAxOAkvKiBFeHRlbmRlZCBEZXZpY2UgQ29udHJvbCAtIFJXICovCiAjZGVmaW5lIEUxMDAwX0ZMQSAgICAgIDB4MDAwMUMJLyogRmxhc2ggQWNjZXNzIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfTURJQyAgICAgMHgwMDAyMAkvKiBNREkgQ29udHJvbCAtIFJXICovCisKK2V4dGVybiB2b2lkIF9faW9tZW0gKmNlNDEwMF9nYmVfbWRpb19iYXNlX3ZpcnQ7CisjZGVmaW5lIElOVEVMX0NFX0dCRV9NRElPX1JDT01QX0JBU0UgICAgKGNlNDEwMF9nYmVfbWRpb19iYXNlX3ZpcnQpCisjZGVmaW5lIEUxMDAwX01ESU9fU1RTICAoSU5URUxfQ0VfR0JFX01ESU9fUkNPTVBfQkFTRSArIDApCisjZGVmaW5lIEUxMDAwX01ESU9fQ01EICAoSU5URUxfQ0VfR0JFX01ESU9fUkNPTVBfQkFTRSArIDQpCisjZGVmaW5lIEUxMDAwX01ESU9fRFJWICAoSU5URUxfQ0VfR0JFX01ESU9fUkNPTVBfQkFTRSArIDgpCisjZGVmaW5lIEUxMDAwX01EQ19DTUQgICAoSU5URUxfQ0VfR0JFX01ESU9fUkNPTVBfQkFTRSArIDB4QykKKyNkZWZpbmUgRTEwMDBfUkNPTVBfQ1RMIChJTlRFTF9DRV9HQkVfTURJT19SQ09NUF9CQVNFICsgMHgyMCkKKyNkZWZpbmUgRTEwMDBfUkNPTVBfU1RTIChJTlRFTF9DRV9HQkVfTURJT19SQ09NUF9CQVNFICsgMHgyNCkKKwogI2RlZmluZSBFMTAwMF9TQ1RMICAgICAweDAwMDI0CS8qIFNlckRlcyBDb250cm9sIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfRkVYVE5WTSAgMHgwMDAyOAkvKiBGdXR1cmUgRXh0ZW5kZWQgTlZNIHJlZ2lzdGVyICovCiAjZGVmaW5lIEUxMDAwX0ZDQUwgICAgIDB4MDAwMjgJLyogRmxvdyBDb250cm9sIEFkZHJlc3MgTG93IC0gUlcgKi8KQEAgLTgyMCw2ICs4MzQsMzQgQEAKICNkZWZpbmUgRTEwMDBfSU1TICAgICAgMHgwMDBEMAkvKiBJbnRlcnJ1cHQgTWFzayBTZXQgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9JTUMgICAgICAweDAwMEQ4CS8qIEludGVycnVwdCBNYXNrIENsZWFyIC0gV08gKi8KICNkZWZpbmUgRTEwMDBfSUFNICAgICAgMHgwMDBFMAkvKiBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UgQXV0byBNYXNrICovCisKKy8qIEF1eGlsaWFyeSBDb250cm9sIFJlZ2lzdGVyLiBUaGlzIHJlZ2lzdGVyIGlzIENFNDEwMCBzcGVjaWZpYywKKyAqIFJNSUkvUkdNSUkgZnVuY3Rpb24gaXMgc3dpdGNoZWQgYnkgdGhpcyByZWdpc3RlciAtIFJXCisgKiBGb2xsb3dpbmcgYXJlIGJpdHMgZGVmaW5pdGlvbnMgb2YgdGhlIEF1eGlsaWFyeSBDb250cm9sIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRTEwMDBfQ1RMX0FVWCAgMHgwMDBFMAorI2RlZmluZSBFMTAwMF9DVExfQVVYX0VORF9TRUxfU0hJRlQgICAgIDEwCisjZGVmaW5lIEUxMDAwX0NUTF9BVVhfRU5ESUFORVNTX1NISUZUICAgOAorI2RlZmluZSBFMTAwMF9DVExfQVVYX1JHTUlJX1JNSUlfU0hJRlQgIDAKKworLyogZGVzY3JpcHRvciBhbmQgcGFja2V0IHRyYW5zZmVyIHVzZSBDVExfQVVYLkVORElBTkVTUyAqLworI2RlZmluZSBFMTAwMF9DVExfQVVYX0RFU19QS1QgICAoMHgwIDw8IEUxMDAwX0NUTF9BVVhfRU5EX1NFTF9TSElGVCkKKy8qIGRlc2NyaXB0b3IgdXNlIENUTF9BVVguRU5ESUFORVNTLCBwYWNrZXQgdXNlIGRlZmF1bHQgKi8KKyNkZWZpbmUgRTEwMDBfQ1RMX0FVWF9ERVMgICAgICAgKDB4MSA8PCBFMTAwMF9DVExfQVVYX0VORF9TRUxfU0hJRlQpCisvKiBkZXNjcmlwdG9yIHVzZSBkZWZhdWx0LCBwYWNrZXQgdXNlIENUTF9BVVguRU5ESUFORVNTICovCisjZGVmaW5lIEUxMDAwX0NUTF9BVVhfUEtUICAgICAgICgweDIgPDwgRTEwMDBfQ1RMX0FVWF9FTkRfU0VMX1NISUZUKQorLyogYWxsIHVzZSBDVExfQVVYLkVORElBTkVTUyAqLworI2RlZmluZSBFMTAwMF9DVExfQVVYX0FMTCAgICAgICAoMHgzIDw8IEUxMDAwX0NUTF9BVVhfRU5EX1NFTF9TSElGVCkKKworI2RlZmluZSBFMTAwMF9DVExfQVVYX1JHTUlJICAgICAoMHgwIDw8IEUxMDAwX0NUTF9BVVhfUkdNSUlfUk1JSV9TSElGVCkKKyNkZWZpbmUgRTEwMDBfQ1RMX0FVWF9STUlJICAgICAgKDB4MSA8PCBFMTAwMF9DVExfQVVYX1JHTUlJX1JNSUlfU0hJRlQpCisKKy8qIExXIGxpdHRsZSBlbmRpYW4sIEJ5dGUgYmlnIGVuZGlhbiAqLworI2RlZmluZSBFMTAwMF9DVExfQVVYX0xXTEVfQkJFICAoMHgwIDw8IEUxMDAwX0NUTF9BVVhfRU5ESUFORVNTX1NISUZUKQorI2RlZmluZSBFMTAwMF9DVExfQVVYX0xXTEVfQkxFICAoMHgxIDw8IEUxMDAwX0NUTF9BVVhfRU5ESUFORVNTX1NISUZUKQorI2RlZmluZSBFMTAwMF9DVExfQVVYX0xXQkVfQkJFICAoMHgyIDw8IEUxMDAwX0NUTF9BVVhfRU5ESUFORVNTX1NISUZUKQorI2RlZmluZSBFMTAwMF9DVExfQVVYX0xXQkVfQkxFICAoMHgzIDw8IEUxMDAwX0NUTF9BVVhfRU5ESUFORVNTX1NISUZUKQorCiAjZGVmaW5lIEUxMDAwX1JDVEwgICAgIDB4MDAxMDAJLyogUlggQ29udHJvbCAtIFJXICovCiAjZGVmaW5lIEUxMDAwX1JEVFIxICAgIDB4MDI4MjAJLyogUlggRGVsYXkgVGltZXIgKDEpIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfUkRCQUwxICAgMHgwMjkwMAkvKiBSWCBEZXNjcmlwdG9yIEJhc2UgQWRkcmVzcyBMb3cgKDEpIC0gUlcgKi8KQEAgLTEwMTEsNiArMTA1Myw3IEBACiAgKiBpbiBtb3JlIGN1cnJlbnQgdmVyc2lvbnMgb2YgdGhlIDgyNTR4LiBEZXNwaXRlIHRoZSBkaWZmZXJlbmNlIGluIGxvY2F0aW9uLAogICogdGhlIHJlZ2lzdGVycyBmdW5jdGlvbiBpbiB0aGUgc2FtZSBtYW5uZXIuCiAgKi8KKyNkZWZpbmUgRTEwMDBfODI1NDJfQ1RMX0FVWCAgRTEwMDBfQ1RMX0FVWAogI2RlZmluZSBFMTAwMF84MjU0Ml9DVFJMICAgICBFMTAwMF9DVFJMCiAjZGVmaW5lIEUxMDAwXzgyNTQyX0NUUkxfRFVQIEUxMDAwX0NUUkxfRFVQCiAjZGVmaW5lIEUxMDAwXzgyNTQyX1NUQVRVUyAgIEUxMDAwX1NUQVRVUwpAQCAtMTU3MSw2ICsxNjE0LDExIEBACiAjZGVmaW5lIEUxMDAwX01ESUNfSU5UX0VOICAgIDB4MjAwMDAwMDAKICNkZWZpbmUgRTEwMDBfTURJQ19FUlJPUiAgICAgMHg0MDAwMDAwMAogCisjZGVmaW5lIElOVEVMX0NFX0dCRV9NRElDX09QX1dSSVRFICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJTlRFTF9DRV9HQkVfTURJQ19PUF9SRUFEICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSU5URUxfQ0VfR0JFX01ESUNfR08gICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIElOVEVMX0NFX0dCRV9NRElDX1JFQURfRVJST1IgICAgMHg4MDAwMDAwMAorCiAjZGVmaW5lIEUxMDAwX0tVTUNUUkxTVEFfTUFTSyAgICAgICAgICAgMHgwMDAwRkZGRgogI2RlZmluZSBFMTAwMF9LVU1DVFJMU1RBX09GRlNFVCAgICAgICAgIDB4MDAxRjAwMDAKICNkZWZpbmUgRTEwMDBfS1VNQ1RSTFNUQV9PRkZTRVRfU0hJRlQgICAxNgpAQCAtMjg3MSw2ICsyOTE5LDExIEBACiAjZGVmaW5lIE04OEUxMTExX0lfUEhZX0lEICAweDAxNDEwQ0MwCiAjZGVmaW5lIEwxTFhUOTcxQV9QSFlfSUQgICAweDAwMTM3OEUwCiAKKyNkZWZpbmUgUlRMODIxMUJfUEhZX0lEICAgIDB4MDAxQ0M5MTAKKyNkZWZpbmUgUlRMODIwMU5fUEhZX0lEICAgIDB4ODIwMAorI2RlZmluZSBSVExfUEhZX0NUUkxfRkQgICAgMHgwMTAwIC8qIEZ1bGwgZHVwbGV4LjA9aGFsZjsgMT1mdWxsICovCisjZGVmaW5lIFJUTF9QSFlfQ1RSTF9TUERfMTAwICAgIDB4MjAwMDAwIC8qIEZvcmNlIDEwME1iICovCisKIC8qIEJpdHMuLi4KICAqIDE1LTU6IHBhZ2UKICAqIDQtMDogcmVnaXN0ZXIgb2Zmc2V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggMzQwZTEyZC4uZGU2OWM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtMjgsNiArMjgsMTIgQEAKIAogI2luY2x1ZGUgImUxMDAwLmgiCiAjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKy8qIEludGVsIE1lZGlhIFNPQyBHYkUgTURJTyBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNlNDEwMF9nYmVfbWRpb19iYXNlX3BoeTsKKy8qIEludGVsIE1lZGlhIFNPQyBHYkUgTURJTyB2aXJ0dWFsIGJhc2UgYWRkcmVzcyAqLwordm9pZCBfX2lvbWVtICpjZTQxMDBfZ2JlX21kaW9fYmFzZV92aXJ0OwogCiBjaGFyIGUxMDAwX2RyaXZlcl9uYW1lW10gPSAiZTEwMDAiOwogc3RhdGljIGNoYXIgZTEwMDBfZHJpdmVyX3N0cmluZ1tdID0gIkludGVsKFIpIFBSTy8xMDAwIE5ldHdvcmsgRHJpdmVyIjsKQEAgLTc5LDYgKzg1LDcgQEAKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDhBKSwKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDk5KSwKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMEI1KSwKKwlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgyRTZFKSwKIAkvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovCiAJezAsfQogfTsKQEAgLTQ1OSw2ICs0NjYsNyBAQAogCQljYXNlIGUxMDAwXzgyNTQ1OgogCQljYXNlIGUxMDAwXzgyNTQ1X3Jldl8zOgogCQljYXNlIGUxMDAwXzgyNTQ2OgorCQljYXNlIGUxMDAwX2NlNDEwMDoKIAkJY2FzZSBlMTAwMF84MjU0Nl9yZXZfMzoKIAkJY2FzZSBlMTAwMF84MjU0MToKIAkJY2FzZSBlMTAwMF84MjU0MV9yZXZfMjoKQEAgLTU3Myw2ICs1ODEsNyBAQAogCWNhc2UgZTEwMDBfODI1NDU6CiAJY2FzZSBlMTAwMF84MjU0NV9yZXZfMzoKIAljYXNlIGUxMDAwXzgyNTQ2OgorCWNhc2UgZTEwMDBfY2U0MTAwOgogCWNhc2UgZTEwMDBfODI1NDZfcmV2XzM6CiAJCXBiYSA9IEUxMDAwX1BCQV80OEs7CiAJCWJyZWFrOwpAQCAtODk0LDYgKzkwMyw3IEBACiAJc3RhdGljIGludCBnbG9iYWxfcXVhZF9wb3J0X2EgPSAwOyAvKiBnbG9iYWwga3NwMyBwb3J0IGEgaW5kaWNhdGlvbiAqLwogCWludCBpLCBlcnIsIHBjaV91c2luZ19kYWM7CiAJdTE2IGVlcHJvbV9kYXRhID0gMDsKKwl1MTYgdG1wID0gMDsKIAl1MTYgZWVwcm9tX2FwbWVfbWFzayA9IEUxMDAwX0VFUFJPTV9BUE1FOwogCWludCBiYXJzLCBuZWVkX2lvcG9ydDsKIApAQCAtOTk2LDYgKzEwMDYsMTQgQEAKIAkJZ290byBlcnJfc3dfaW5pdDsKIAogCWVyciA9IC1FSU87CisJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9jZTQxMDApIHsKKwkJY2U0MTAwX2diZV9tZGlvX2Jhc2VfcGh5ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIEJBUl8xKTsKKwkJY2U0MTAwX2diZV9tZGlvX2Jhc2VfdmlydCA9IGlvcmVtYXAoY2U0MTAwX2diZV9tZGlvX2Jhc2VfcGh5LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgQkFSXzEpKTsKKworCQlpZiAoIWNlNDEwMF9nYmVfbWRpb19iYXNlX3ZpcnQpCisJCQlnb3RvIGVycl9tZGlvX2lvcmVtYXA7CisJfQogCiAJaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MykgewogCQluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8CkBAIC0xMTM1LDYgKzExNTMsMjAgQEAKIAlhZGFwdGVyLT53b2wgPSBhZGFwdGVyLT5lZXByb21fd29sOwogCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmYWRhcHRlci0+cGRldi0+ZGV2LCBhZGFwdGVyLT53b2wpOwogCisJLyogQXV0byBkZXRlY3QgUEhZIGFkZHJlc3MgKi8KKwlpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2NlNDEwMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkJaHctPnBoeV9hZGRyID0gaTsKKwkJCWUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX0lEMiwgJnRtcCk7CisJCQlpZiAodG1wID09IDAgfHwgdG1wID09IDB4RkYpIHsKKwkJCQlpZiAoaSA9PSAzMSkKKwkJCQkJZ290byBlcnJfZWVwcm9tOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCX0KKwl9CisKIAkvKiByZXNldCB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgbmV3IHNldHRpbmdzICovCiAJZTEwMDBfcmVzZXQoYWRhcHRlcik7CiAKQEAgLTExNzEsNiArMTIwMyw4IEBACiAJa2ZyZWUoYWRhcHRlci0+cnhfcmluZyk7CiBlcnJfZG1hOgogZXJyX3N3X2luaXQ6CitlcnJfbWRpb19pb3JlbWFwOgorCWlvdW5tYXAoY2U0MTAwX2diZV9tZGlvX2Jhc2VfdmlydCk7CiAJaW91bm1hcChody0+aHdfYWRkcik7CiBlcnJfaW9yZW1hcDoKIAlmcmVlX25ldGRldihuZXRkZXYpOwpAQCAtMTQwOSw2ICsxNDQzLDcgQEAKIAkvKiBGaXJzdCByZXYgODI1NDUgYW5kIDgyNTQ2IG5lZWQgdG8gbm90IGFsbG93IGFueSBtZW1vcnkKIAkgKiB3cml0ZSBsb2NhdGlvbiB0byBjcm9zcyA2NGsgYm91bmRhcnkgZHVlIHRvIGVycmF0YSAyMyAqLwogCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDUgfHwKKwkgICAgaHctPm1hY190eXBlID09IGUxMDAwX2NlNDEwMCB8fAogCSAgICBody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDYpIHsKIAkJcmV0dXJuICgoYmVnaW4gXiAoZW5kIC0gMSkpID4+IDE2KSAhPSAwID8gZmFsc2UgOiB0cnVlOwogCX0KQEAgLTIxOTgsNyArMjIzMyw3IEBACiAJICogYWRkcmVzc2VzIHRha2UgcHJlY2VkZW5jZSB0byBhdm9pZCBkaXNhYmxpbmcgdW5pY2FzdCBmaWx0ZXJpbmcKIAkgKiB3aGVuIHBvc3NpYmxlLgogCSAqCi0JICogUkFSIDAgaXMgdXNlZCBmb3IgdGhlIHN0YXRpb24gTUFDIGFkZGRyZXNzCisJICogUkFSIDAgaXMgdXNlZCBmb3IgdGhlIHN0YXRpb24gTUFDIGFkZHJlc3MKIAkgKiBpZiB0aGVyZSBhcmUgbm90IDE0IGFkZHJlc3NlcywgZ28gYWhlYWQgYW5kIGNsZWFyIHRoZSBmaWx0ZXJzCiAJICovCiAJaSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9vc2RlcC5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaAppbmRleCBlZGQxYzc1Li41NWMxNzExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9vc2RlcC5oCkBAIC0zNCwxMiArMzQsMjEgQEAKICNpZm5kZWYgX0UxMDAwX09TREVQX0hfCiAjZGVmaW5lIF9FMTAwMF9PU0RFUF9IXwogCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNkZWZpbmUgQ09ORklHX1JBTV9CQVNFICAgICAgICAgMHg2MDAwMAorI2RlZmluZSBHQkVfQ09ORklHX09GRlNFVCAgICAgICAweDAKKworI2RlZmluZSBHQkVfQ09ORklHX1JBTV9CQVNFIFwKKwkoKHVuc2lnbmVkIGludCkoQ09ORklHX1JBTV9CQVNFICsgR0JFX0NPTkZJR19PRkZTRVQpKQorCisjZGVmaW5lIEdCRV9DT05GSUdfQkFTRV9WSVJUICAgIHBoeXNfdG9fdmlydChHQkVfQ09ORklHX1JBTV9CQVNFKQorCisjZGVmaW5lIEdCRV9DT05GSUdfRkxBU0hfV1JJVEUoYmFzZSwgb2Zmc2V0LCBjb3VudCwgZGF0YSkgXAorCShpb3dyaXRlMTZfcmVwKGJhc2UgKyBvZmZzZXQsIGRhdGEsIGNvdW50KSkKKworI2RlZmluZSBHQkVfQ09ORklHX0ZMQVNIX1JFQUQoYmFzZSwgb2Zmc2V0LCBjb3VudCwgZGF0YSkgXAorCShpb3JlYWQxNl9yZXAoYmFzZSArIChvZmZzZXQgPDwgMSksIGRhdGEsIGNvdW50KSkKIAogI2RlZmluZSBlcjMyKHJlZykJCQkJCQkJXAogCShyZWFkbChody0+aHdfYWRkciArICgoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQzKQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYwppbmRleCBlNTdlNDA5Li4xMzk3ZGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYwpAQCAtNzgsNiArNzgsOCBAQAogc3RhdGljIHZvaWQgZTEwMDBfcHV0X2h3X3NlbWFwaG9yZV84MjU3MyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgZTEwMDBfZ2V0X2h3X3NlbWFwaG9yZV84MjU3NChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyB2b2lkIGUxMDAwX3B1dF9od19zZW1hcGhvcmVfODI1NzQoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX3NldF9kMF9scGx1X3N0YXRlXzgyNTc0KHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgYWN0aXZlKTsKK3N0YXRpYyBzMzIgZTEwMDBfc2V0X2QzX2xwbHVfc3RhdGVfODI1NzQoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBhY3RpdmUpOwogCiAvKioKICAqICBlMTAwMF9pbml0X3BoeV9wYXJhbXNfODI1NzEgLSBJbml0IFBIWSBmdW5jIHB0cnMuCkBAIC0xMTMsNiArMTE1LDggQEAKIAkJcGh5LT50eXBlCQkgPSBlMTAwMF9waHlfYm07CiAJCXBoeS0+b3BzLmFjcXVpcmUgPSBlMTAwMF9nZXRfaHdfc2VtYXBob3JlXzgyNTc0OwogCQlwaHktPm9wcy5yZWxlYXNlID0gZTEwMDBfcHV0X2h3X3NlbWFwaG9yZV84MjU3NDsKKwkJcGh5LT5vcHMuc2V0X2QwX2xwbHVfc3RhdGUgPSBlMTAwMF9zZXRfZDBfbHBsdV9zdGF0ZV84MjU3NDsKKwkJcGh5LT5vcHMuc2V0X2QzX2xwbHVfc3RhdGUgPSBlMTAwMF9zZXRfZDNfbHBsdV9zdGF0ZV84MjU3NDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwpAQCAtMTIxLDI5ICsxMjUsMzYgQEAKIAogCS8qIFRoaXMgY2FuIG9ubHkgYmUgZG9uZSBhZnRlciBhbGwgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIHNldHVwLiAqLwogCXJldF92YWwgPSBlMTAwMF9nZXRfcGh5X2lkXzgyNTcxKGh3KTsKKwlpZiAocmV0X3ZhbCkgeworCQllX2RiZygiRXJyb3IgZ2V0dGluZyBQSFkgSURcbiIpOworCQlyZXR1cm4gcmV0X3ZhbDsKKwl9CiAKIAkvKiBWZXJpZnkgcGh5IGlkICovCiAJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKIAljYXNlIGUxMDAwXzgyNTcxOgogCWNhc2UgZTEwMDBfODI1NzI6CiAJCWlmIChwaHktPmlkICE9IElHUDAxRTEwMDBfSV9QSFlfSUQpCi0JCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CisJCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9QSFk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzM6CiAJCWlmIChwaHktPmlkICE9IE04OEUxMTExX0lfUEhZX0lEKQotCQkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCQkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfUEhZOwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTc0OgogCWNhc2UgZTEwMDBfODI1ODM6CiAJCWlmIChwaHktPmlkICE9IEJNRTEwMDBfRV9QSFlfSURfUjIpCi0JCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CisJCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9QSFk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfUEhZOwogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gMDsKKwlpZiAocmV0X3ZhbCkKKwkJZV9kYmcoIlBIWSBJRCB1bmtub3duOiB0eXBlID0gMHglMDh4XG4iLCBwaHktPmlkKTsKKworCXJldHVybiByZXRfdmFsOwogfQogCiAvKioKQEAgLTMxNyw3ICszMjgsNyBAQAogCiAJLyoKIAkgKiBFbnN1cmUgdGhhdCB0aGUgaW50ZXItcG9ydCBTV1NNLlNNQkkgbG9jayBiaXQgaXMgY2xlYXIgYmVmb3JlCi0JICogZmlyc3QgTlZNIG9yIFBIWSBhY2Vzcy4gVGhpcyBzaG91bGQgYmUgZG9uZSBmb3Igc2luZ2xlLXBvcnQKKwkgKiBmaXJzdCBOVk0gb3IgUEhZIGFjY2Vzcy4gVGhpcyBzaG91bGQgYmUgZG9uZSBmb3Igc2luZ2xlLXBvcnQKIAkgKiBkZXZpY2VzLCBhbmQgZm9yIG9uZSBwb3J0IG9ubHkgb24gZHVhbC1wb3J0IGRldmljZXMgc28gdGhhdAogCSAqIGZvciB0aG9zZSBkZXZpY2VzIHdlIGNhbiBzdGlsbCB1c2UgdGhlIFNNQkkgbG9jayB0byBzeW5jaHJvbml6ZQogCSAqIGludGVyLXBvcnQgYWNjZXNzZXMgdG8gdGhlIFBIWSAmIE5WTS4KQEAgLTY0OSw2ICs2NjAsNTggQEAKIH0KIAogLyoqCisgKiAgZTEwMDBfc2V0X2QwX2xwbHVfc3RhdGVfODI1NzQgLSBTZXQgTG93IFBvd2VyIExpbmt1cCBEMCBzdGF0ZQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQGFjdGl2ZTogdHJ1ZSB0byBlbmFibGUgTFBMVSwgZmFsc2UgdG8gZGlzYWJsZQorICoKKyAqICBTZXRzIHRoZSBMUExVIEQwIHN0YXRlIGFjY29yZGluZyB0byB0aGUgYWN0aXZlIGZsYWcuCisgKiAgTFBMVSB3aWxsIG5vdCBiZSBhY3RpdmF0ZWQgdW5sZXNzIHRoZQorICogIGRldmljZSBhdXRvbmVnb3RpYXRpb24gYWR2ZXJ0aXNlbWVudCBtZWV0cyBzdGFuZGFyZHMgb2YKKyAqICBlaXRoZXIgMTAgb3IgMTAvMTAwIG9yIDEwLzEwMC8xMDAwIGF0IGFsbCBkdXBsZXhlcy4KKyAqICBUaGlzIGlzIGEgZnVuY3Rpb24gcG9pbnRlciBlbnRyeSBwb2ludCBvbmx5IGNhbGxlZCBieQorICogIFBIWSBzZXR1cCByb3V0aW5lcy4KKyAqKi8KK3N0YXRpYyBzMzIgZTEwMDBfc2V0X2QwX2xwbHVfc3RhdGVfODI1NzQoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBhY3RpdmUpCit7CisJdTE2IGRhdGEgPSBlcjMyKFBPRU1CKTsKKworCWlmIChhY3RpdmUpCisJCWRhdGEgfD0gRTEwMDBfUEhZX0NUUkxfRDBBX0xQTFU7CisJZWxzZQorCQlkYXRhICY9IH5FMTAwMF9QSFlfQ1RSTF9EMEFfTFBMVTsKKworCWV3MzIoUE9FTUIsIGRhdGEpOworCXJldHVybiAwOworfQorCisvKioKKyAqICBlMTAwMF9zZXRfZDNfbHBsdV9zdGF0ZV84MjU3NCAtIFNldHMgbG93IHBvd2VyIGxpbmsgdXAgc3RhdGUgZm9yIEQzCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAYWN0aXZlOiBib29sZWFuIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgbHBsdQorICoKKyAqICBUaGUgbG93IHBvd2VyIGxpbmsgdXAgKGxwbHUpIHN0YXRlIGlzIHNldCB0byB0aGUgcG93ZXIgbWFuYWdlbWVudCBsZXZlbCBEMworICogIHdoZW4gYWN0aXZlIGlzIHRydWUsIGVsc2UgY2xlYXIgbHBsdSBmb3IgRDMuIExQTFUKKyAqICBpcyB1c2VkIGR1cmluZyBEeCBzdGF0ZXMgd2hlcmUgdGhlIHBvd2VyIGNvbnNlcnZhdGlvbiBpcyBtb3N0IGltcG9ydGFudC4KKyAqICBEdXJpbmcgZHJpdmVyIGFjdGl2aXR5LCBTbWFydFNwZWVkIHNob3VsZCBiZSBlbmFibGVkIHNvIHBlcmZvcm1hbmNlIGlzCisgKiAgbWFpbnRhaW5lZC4KKyAqKi8KK3N0YXRpYyBzMzIgZTEwMDBfc2V0X2QzX2xwbHVfc3RhdGVfODI1NzQoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBhY3RpdmUpCit7CisJdTE2IGRhdGEgPSBlcjMyKFBPRU1CKTsKKworCWlmICghYWN0aXZlKSB7CisJCWRhdGEgJj0gfkUxMDAwX1BIWV9DVFJMX05PTkQwQV9MUExVOworCX0gZWxzZSBpZiAoKGh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkID09IEUxMDAwX0FMTF9TUEVFRF9EVVBMRVgpIHx8CisJCSAgIChody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZCA9PSBFMTAwMF9BTExfTk9UX0dJRykgfHwKKwkJICAgKGh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkID09IEUxMDAwX0FMTF8xMF9TUEVFRCkpIHsKKwkJZGF0YSB8PSBFMTAwMF9QSFlfQ1RSTF9OT05EMEFfTFBMVTsKKwl9CisKKwlldzMyKFBPRU1CLCBkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiAgZTEwMDBfYWNxdWlyZV9udm1fODI1NzEgLSBSZXF1ZXN0IGZvciBhY2Nlc3MgdG8gdGhlIEVFUFJPTQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgpAQCAtOTU2LDcgKzEwMTksNyBAQAogICoqLwogc3RhdGljIHMzMiBlMTAwMF9yZXNldF9od184MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotCXUzMiBjdHJsLCBjdHJsX2V4dCwgaWNyOworCXUzMiBjdHJsLCBjdHJsX2V4dDsKIAlzMzIgcmV0X3ZhbDsKIAogCS8qCkBAIC0xMDQwLDcgKzExMDMsNyBAQAogCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IGV2ZW50cy4gKi8KIAlldzMyKElNQywgMHhmZmZmZmZmZik7Ci0JaWNyID0gZXIzMihJQ1IpOworCWVyMzIoSUNSKTsKIAogCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzEpIHsKIAkJLyogSW5zdGFsbCBhbnkgYWx0ZXJuYXRlIE1BQyBhZGRyZXNzIGludG8gUkFSMCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmggYi9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaAppbmRleCAyYzkxM2I4Li41MjU1YmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KIAogI2luY2x1ZGUgImh3LmgiCiAKQEAgLTQ5Niw2ICs0OTcsOCBAQAogZXh0ZXJuIHZvaWQgZTEwMDBlX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBlMTAwMGVfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGUxMDAwZV9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBlMTAwMGVfZ2V0X2h3X2NvbnRyb2woc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIHZvaWQgZTEwMDBlX3JlbGVhc2VfaHdfY29udHJvbChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBlMTAwMGVfZGlzYWJsZV9hc3BtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgc3RhdGUpOwogCiBleHRlcm4gdW5zaWduZWQgaW50IGNvcHlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lczJsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lczJsYW4uYwppbmRleCBiMThjNjQ0Li5lNDVhNjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZXMybGFuLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2VzMmxhbi5jCkBAIC03ODQsNyArNzg0LDcgQEAKICAqKi8KIHN0YXRpYyBzMzIgZTEwMDBfcmVzZXRfaHdfODAwMDNlczJsYW4oc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLQl1MzIgY3RybCwgaWNyOworCXUzMiBjdHJsOwogCXMzMiByZXRfdmFsOwogCiAJLyoKQEAgLTgxOCw3ICs4MTgsNyBAQAogCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IGV2ZW50cy4gKi8KIAlldzMyKElNQywgMHhmZmZmZmZmZik7Ci0JaWNyID0gZXIzMihJQ1IpOworCWVyMzIoSUNSKTsKIAogCXJldF92YWwgPSBlMTAwMF9jaGVja19hbHRfbWFjX2FkZHJfZ2VuZXJpYyhodyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCmluZGV4IGFmZmNhY2YuLmY4ZWQwM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYwpAQCAtNjI0LDIwICs2MjQsMjQgQEAKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJY2hhciBmaXJtd2FyZV92ZXJzaW9uWzMyXTsKIAotCXN0cm5jcHkoZHJ2aW5mby0+ZHJpdmVyLCAgZTEwMDBlX2RyaXZlcl9uYW1lLCAzMik7Ci0Jc3RybmNweShkcnZpbmZvLT52ZXJzaW9uLCBlMTAwMGVfZHJpdmVyX3ZlcnNpb24sIDMyKTsKKwlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgIGUxMDAwZV9kcml2ZXJfbmFtZSwKKwkJc2l6ZW9mKGRydmluZm8tPmRyaXZlcikgLSAxKTsKKwlzdHJuY3B5KGRydmluZm8tPnZlcnNpb24sIGUxMDAwZV9kcml2ZXJfdmVyc2lvbiwKKwkJc2l6ZW9mKGRydmluZm8tPnZlcnNpb24pIC0gMSk7CiAKIAkvKgogCSAqIEVFUFJPTSBpbWFnZSB2ZXJzaW9uICMgaXMgcmVwb3J0ZWQgYXMgZmlybXdhcmUgdmVyc2lvbiAjIGZvcgogCSAqIFBDSS1FIGNvbnRyb2xsZXJzCiAJICovCi0Jc3ByaW50ZihmaXJtd2FyZV92ZXJzaW9uLCAiJWQuJWQtJWQiLAorCXNucHJpbnRmKGZpcm13YXJlX3ZlcnNpb24sIHNpemVvZihmaXJtd2FyZV92ZXJzaW9uKSwgIiVkLiVkLSVkIiwKIAkJKGFkYXB0ZXItPmVlcHJvbV92ZXJzICYgMHhGMDAwKSA+PiAxMiwKIAkJKGFkYXB0ZXItPmVlcHJvbV92ZXJzICYgMHgwRkYwKSA+PiA0LAogCQkoYWRhcHRlci0+ZWVwcm9tX3ZlcnMgJiAweDAwMEYpKTsKIAotCXN0cm5jcHkoZHJ2aW5mby0+ZndfdmVyc2lvbiwgZmlybXdhcmVfdmVyc2lvbiwgMzIpOwotCXN0cm5jcHkoZHJ2aW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKGFkYXB0ZXItPnBkZXYpLCAzMik7CisJc3RybmNweShkcnZpbmZvLT5md192ZXJzaW9uLCBmaXJtd2FyZV92ZXJzaW9uLAorCQlzaXplb2YoZHJ2aW5mby0+ZndfdmVyc2lvbikgLSAxKTsKKwlzdHJuY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShhZGFwdGVyLT5wZGV2KSwKKwkJc2l6ZW9mKGRydmluZm8tPmJ1c19pbmZvKSAtIDEpOwogCWRydmluZm8tPnJlZ2R1bXBfbGVuID0gZTEwMDBfZ2V0X3JlZ3NfbGVuKG5ldGRldik7CiAJZHJ2aW5mby0+ZWVkdW1wX2xlbiA9IGUxMDAwX2dldF9lZXByb21fbGVuKG5ldGRldik7CiB9CkBAIC0xNzA0LDYgKzE3MDgsMTkgQEAKIAlib29sIGlmX3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CiAKIAlzZXRfYml0KF9fRTEwMDBfVEVTVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKworCWlmICghaWZfcnVubmluZykgeworCQkvKiBHZXQgY29udHJvbCBvZiBhbmQgcmVzZXQgaGFyZHdhcmUgKi8KKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfQU1UKQorCQkJZTEwMDBlX2dldF9od19jb250cm9sKGFkYXB0ZXIpOworCisJCWUxMDAwZV9wb3dlcl91cF9waHkoYWRhcHRlcik7CisKKwkJYWRhcHRlci0+aHcucGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSA9IDE7CisJCWUxMDAwZV9yZXNldChhZGFwdGVyKTsKKwkJYWRhcHRlci0+aHcucGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSA9IDA7CisJfQorCiAJaWYgKGV0aF90ZXN0LT5mbGFncyA9PSBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CiAJCS8qIE9mZmxpbmUgdGVzdHMgKi8KIApAQCAtMTcxNyw4ICsxNzM0LDYgQEAKIAkJaWYgKGlmX3J1bm5pbmcpCiAJCQkvKiBpbmRpY2F0ZSB3ZSdyZSBpbiB0ZXN0IG1vZGUgKi8KIAkJCWRldl9jbG9zZShuZXRkZXYpOwotCQllbHNlCi0JCQllMTAwMGVfcmVzZXQoYWRhcHRlcik7CiAKIAkJaWYgKGUxMDAwX3JlZ190ZXN0KGFkYXB0ZXIsICZkYXRhWzBdKSkKIAkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CkBAIC0xNzMyLDggKzE3NDcsNiBAQAogCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIAogCQllMTAwMGVfcmVzZXQoYWRhcHRlcik7Ci0JCS8qIG1ha2Ugc3VyZSB0aGUgcGh5IGlzIHBvd2VyZWQgdXAgKi8KLQkJZTEwMDBlX3Bvd2VyX3VwX3BoeShhZGFwdGVyKTsKIAkJaWYgKGUxMDAwX2xvb3BiYWNrX3Rlc3QoYWRhcHRlciwgJmRhdGFbM10pKQogCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIApAQCAtMTc1NSwyOCArMTc2OCwyOSBAQAogCQlpZiAoaWZfcnVubmluZykKIAkJCWRldl9vcGVuKG5ldGRldik7CiAJfSBlbHNlIHsKLQkJaWYgKCFpZl9ydW5uaW5nICYmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0FNVCkpIHsKLQkJCWNsZWFyX2JpdChfX0UxMDAwX1RFU1RJTkcsICZhZGFwdGVyLT5zdGF0ZSk7Ci0JCQlkZXZfb3BlbihuZXRkZXYpOwotCQkJc2V0X2JpdChfX0UxMDAwX1RFU1RJTkcsICZhZGFwdGVyLT5zdGF0ZSk7Ci0JCX0KKwkJLyogT25saW5lIHRlc3RzICovCiAKIAkJZV9pbmZvKCJvbmxpbmUgdGVzdGluZyBzdGFydGluZ1xuIik7Ci0JCS8qIE9ubGluZSB0ZXN0cyAqLwotCQlpZiAoZTEwMDBfbGlua190ZXN0KGFkYXB0ZXIsICZkYXRhWzRdKSkKLQkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAKLQkJLyogT25saW5lIHRlc3RzIGFyZW4ndCBydW47IHBhc3MgYnkgZGVmYXVsdCAqLworCQkvKiByZWdpc3RlciwgZWVwcm9tLCBpbnRyIGFuZCBsb29wYmFjayB0ZXN0cyBub3QgcnVuIG9ubGluZSAqLwogCQlkYXRhWzBdID0gMDsKIAkJZGF0YVsxXSA9IDA7CiAJCWRhdGFbMl0gPSAwOwogCQlkYXRhWzNdID0gMDsKIAotCQlpZiAoIWlmX3J1bm5pbmcgJiYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfQU1UKSkKLQkJCWRldl9jbG9zZShuZXRkZXYpOworCQlpZiAoZTEwMDBfbGlua190ZXN0KGFkYXB0ZXIsICZkYXRhWzRdKSkKKwkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAKIAkJY2xlYXJfYml0KF9fRTEwMDBfVEVTVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAl9CisKKwlpZiAoIWlmX3J1bm5pbmcpIHsKKwkJZTEwMDBlX3Jlc2V0KGFkYXB0ZXIpOworCisJCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0FNVCkKKwkJCWUxMDAwZV9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CisJfQorCiAJbXNsZWVwX2ludGVycnVwdGlibGUoNCAqIDEwMDApOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCmluZGV4IGJhMzAyYTUuLmU3NzQzODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCkBAIC04Myw2ICs4Myw3IEBACiAJRTEwMDBfRVhUQ05GX0NUUkwgID0gMHgwMEYwMCwgLyogRXh0ZW5kZWQgQ29uZmlndXJhdGlvbiBDb250cm9sICovCiAJRTEwMDBfRVhUQ05GX1NJWkUgID0gMHgwMEYwOCwgLyogRXh0ZW5kZWQgQ29uZmlndXJhdGlvbiBTaXplICovCiAJRTEwMDBfUEhZX0NUUkwgICAgID0gMHgwMEYxMCwgLyogUEhZIENvbnRyb2wgUmVnaXN0ZXIgaW4gQ1NSICovCisjZGVmaW5lIEUxMDAwX1BPRU1CCUUxMDAwX1BIWV9DVFJMCS8qIFBIWSBPRU0gQml0cyAqLwogCUUxMDAwX1BCQSAgICAgID0gMHgwMTAwMCwgLyogUGFja2V0IEJ1ZmZlciBBbGxvY2F0aW9uIC0gUlcgKi8KIAlFMTAwMF9QQlMgICAgICA9IDB4MDEwMDgsIC8qIFBhY2tldCBCdWZmZXIgU2l6ZSAqLwogCUUxMDAwX0VFTU5HQ1RMID0gMHgwMTAxMCwgLyogTU5HIEVFcHJvbSBDb250cm9sICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYwppbmRleCBkODZjYzA4Li41YmI2NWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKQEAgLTMyMSw3ICszMjEsNyBAQAogCX0KIAogCS8qCi0JICogUmVzZXQgdGhlIFBIWSBiZWZvcmUgYW55IGFjY2Nlc3MgdG8gaXQuICBEb2luZyBzbywgZW5zdXJlcyB0aGF0CisJICogUmVzZXQgdGhlIFBIWSBiZWZvcmUgYW55IGFjY2VzcyB0byBpdC4gIERvaW5nIHNvLCBlbnN1cmVzIHRoYXQKIAkgKiB0aGUgUEhZIGlzIGluIGEga25vd24gZ29vZCBzdGF0ZSBiZWZvcmUgd2UgcmVhZC93cml0ZSBQSFkgcmVnaXN0ZXJzLgogCSAqIFRoZSBnZW5lcmljIHJlc2V0IGlzIHN1ZmZpY2llbnQgaGVyZSwgYmVjYXVzZSB3ZSBoYXZlbid0IGRldGVybWluZWQKIAkgKiB0aGUgUEhZIHR5cGUgeWV0LgpAQCAtMTM5NSwyMiArMTM5NSw2IEBACiAJfQogfQogCi1zdGF0aWMgdTMyIGUxMDAwX2NhbGNfcnhfZGFfY3JjKHU4IG1hY1tdKQotewotCXUzMiBwb2x5ID0gMHhFREI4ODMyMDsJLyogUG9seW5vbWlhbCBmb3IgODAyLjMgQ1JDIGNhbGN1bGF0aW9uICovCi0JdTMyIGksIGosIG1hc2ssIGNyYzsKLQotCWNyYyA9IDB4ZmZmZmZmZmY7Ci0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotCQljcmMgPSBjcmMgXiBtYWNbaV07Ci0JCWZvciAoaiA9IDg7IGogPiAwOyBqLS0pIHsKLQkJCW1hc2sgPSAoY3JjICYgMSkgKiAoLTEpOwotCQkJY3JjID0gKGNyYyA+PiAxKSBeIChwb2x5ICYgbWFzayk7Ci0JCX0KLQl9Ci0JcmV0dXJuIH5jcmM7Ci19Ci0KIC8qKgogICogIGUxMDAwX2x2X2p1bWJvX3dvcmthcm91bmRfaWNoOGxhbiAtIHJlcXVpcmVkIGZvciBqdW1ibyBmcmFtZSBvcGVyYXRpb24KICAqICB3aXRoIDgyNTc5IFBIWQpAQCAtMTQ1Myw4ICsxNDM3LDcgQEAKIAkJCW1hY19hZGRyWzRdID0gKGFkZHJfaGlnaCAmIDB4RkYpOwogCQkJbWFjX2FkZHJbNV0gPSAoKGFkZHJfaGlnaCA+PiA4KSAmIDB4RkYpOwogCi0JCQlldzMyKFBDSF9SQUlDQyhpKSwKLQkJCQkJZTEwMDBfY2FsY19yeF9kYV9jcmMobWFjX2FkZHIpKTsKKwkJCWV3MzIoUENIX1JBSUNDKGkpLCB+ZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBtYWNfYWRkcikpOwogCQl9CiAKIAkJLyogV3JpdGUgUnggYWRkcmVzc2VzIHRvIHRoZSBQSFkgKi8KQEAgLTI5NzcsNyArMjk2MCw3IEBACiB7CiAJc3RydWN0IGUxMDAwX2Rldl9zcGVjX2ljaDhsYW4gKmRldl9zcGVjID0gJmh3LT5kZXZfc3BlYy5pY2g4bGFuOwogCXUxNiByZWc7Ci0JdTMyIGN0cmwsIGljciwga2FiOworCXUzMiBjdHJsLCBrYWI7CiAJczMyIHJldF92YWw7CiAKIAkvKgpAQCAtMzA2Nyw3ICszMDUwLDcgQEAKIAkJZXczMihDUkNfT0ZGU0VULCAweDY1NjU2NTY1KTsKIAogCWV3MzIoSU1DLCAweGZmZmZmZmZmKTsKLQlpY3IgPSBlcjMyKElDUik7CisJZXIzMihJQ1IpOwogCiAJa2FiID0gZXIzMihLQUJHVFhEKTsKIAlrYWIgfD0gRTEwMDBfS0FCR1RYRF9CR1NRTEJJQVM7CkBAIC0zMTE4LDcgKzMxMDEsNyBAQAogCSAqIFJlc2V0IHRoZSBwaHkgYWZ0ZXIgZGlzYWJsaW5nIGhvc3Qgd2FrZXVwIHRvIHJlc2V0IHRoZSBSeCBidWZmZXIuCiAJICovCiAJaWYgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzgpIHsKLQkJaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIEJNX1dVQywgJmkpOworCQllMWVfcnBoeShodywgQk1fV1VDLCAmaSk7CiAJCXJldF92YWwgPSBlMTAwMF9waHlfaHdfcmVzZXRfaWNoOGxhbihodyk7CiAJCWlmIChyZXRfdmFsKQogCQkJcmV0dXJuIHJldF92YWw7CkBAIC0zMjc2LDkgKzMyNTksOCBAQAogCSAgICAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3NykpIHsKIAkJZXczMihGQ1JUVl9QQ0gsIGh3LT5mYy5yZWZyZXNoX3RpbWUpOwogCi0JCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEhZX1JFRyhCTV9QT1JUX0NUUkxfUEFHRSwgMjcpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5mYy5wYXVzZV90aW1lKTsKKwkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBQSFlfUkVHKEJNX1BPUlRfQ1RSTF9QQUdFLCAyNyksCisJCQkJICAgaHctPmZjLnBhdXNlX3RpbWUpOwogCQlpZiAocmV0X3ZhbCkKIAkJCXJldHVybiByZXRfdmFsOwogCX0KQEAgLTMzNDIsOCArMzMyNCw3IEBACiAJCQlyZXR1cm4gcmV0X3ZhbDsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF9waHlfaWZlOgotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIElGRV9QSFlfTURJWF9DT05UUk9MLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlZ19kYXRhKTsKKwkJcmV0X3ZhbCA9IGUxZV9ycGh5KGh3LCBJRkVfUEhZX01ESVhfQ09OVFJPTCwgJnJlZ19kYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlyZXR1cm4gcmV0X3ZhbDsKIApAQCAtMzM2MSw4ICszMzQyLDcgQEAKIAkJCXJlZ19kYXRhIHw9IElGRV9QTUNfQVVUT19NRElYOwogCQkJYnJlYWs7CiAJCX0KLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3JlZyhodywgSUZFX1BIWV9NRElYX0NPTlRST0wsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEpOworCQlyZXRfdmFsID0gZTFlX3dwaHkoaHcsIElGRV9QSFlfTURJWF9DT05UUk9MLCByZWdfZGF0YSk7CiAJCWlmIChyZXRfdmFsKQogCQkJcmV0dXJuIHJldF92YWw7CiAJCWJyZWFrOwpAQCAtMzY0Niw3ICszNjI2LDggQEAKIHsKIAlpZiAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV9pZmUpCiAJCXJldHVybiBlMWVfd3BoeShodywgSUZFX1BIWV9TUEVDSUFMX0NPTlRST0xfTEVELAotCQkJICAgICAgIChJRkVfUFNDTF9QUk9CRV9NT0RFIHwgSUZFX1BTQ0xfUFJPQkVfTEVEU19PRkYpKTsKKwkJCQkoSUZFX1BTQ0xfUFJPQkVfTU9ERSB8CisJCQkJIElGRV9QU0NMX1BST0JFX0xFRFNfT0ZGKSk7CiAKIAlldzMyKExFRENUTCwgaHctPm1hYy5sZWRjdGxfbW9kZTEpOwogCXJldHVybiAwOwpAQCAtMzY2MCw4ICszNjQxLDcgQEAKICAqKi8KIHN0YXRpYyBzMzIgZTEwMDBfc2V0dXBfbGVkX3BjaGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotCXJldHVybiBody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIEhWX0xFRF9DT05GSUcsCi0JCQkJCSh1MTYpaHctPm1hYy5sZWRjdGxfbW9kZTEpOworCXJldHVybiBlMWVfd3BoeShodywgSFZfTEVEX0NPTkZJRywgKHUxNilody0+bWFjLmxlZGN0bF9tb2RlMSk7CiB9CiAKIC8qKgpAQCAtMzY3Miw4ICszNjUyLDcgQEAKICAqKi8KIHN0YXRpYyBzMzIgZTEwMDBfY2xlYW51cF9sZWRfcGNobGFuKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0JcmV0dXJuIGh3LT5waHkub3BzLndyaXRlX3JlZyhodywgSFZfTEVEX0NPTkZJRywKLQkJCQkJKHUxNilody0+bWFjLmxlZGN0bF9kZWZhdWx0KTsKKwlyZXR1cm4gZTFlX3dwaHkoaHcsIEhWX0xFRF9DT05GSUcsICh1MTYpaHctPm1hYy5sZWRjdGxfZGVmYXVsdCk7CiB9CiAKIC8qKgpAQCAtMzcwNCw3ICszNjgzLDcgQEAKIAkJfQogCX0KIAotCXJldHVybiBody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIEhWX0xFRF9DT05GSUcsIGRhdGEpOworCXJldHVybiBlMWVfd3BoeShodywgSFZfTEVEX0NPTkZJRywgZGF0YSk7CiB9CiAKIC8qKgpAQCAtMzczNSw3ICszNzE0LDcgQEAKIAkJfQogCX0KIAotCXJldHVybiBody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIEhWX0xFRF9DT05GSUcsIGRhdGEpOworCXJldHVybiBlMWVfd3BoeShodywgSFZfTEVEX0NPTkZJRywgZGF0YSk7CiB9CiAKIC8qKgpAQCAtMzg0NCwyMCArMzgyMywyMCBAQAogCWlmICgoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3OCkgfHwKIAkgICAgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzkpIHx8CiAJICAgIChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5XzgyNTc3KSkgewotCQlody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgSFZfU0NDX1VQUEVSLCAmcGh5X2RhdGEpOwotCQlody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgSFZfU0NDX0xPV0VSLCAmcGh5X2RhdGEpOwotCQlody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgSFZfRUNPTF9VUFBFUiwgJnBoeV9kYXRhKTsKLQkJaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIEhWX0VDT0xfTE9XRVIsICZwaHlfZGF0YSk7Ci0JCWh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBIVl9NQ0NfVVBQRVIsICZwaHlfZGF0YSk7Ci0JCWh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBIVl9NQ0NfTE9XRVIsICZwaHlfZGF0YSk7Ci0JCWh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBIVl9MQVRFQ09MX1VQUEVSLCAmcGh5X2RhdGEpOwotCQlody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgSFZfTEFURUNPTF9MT1dFUiwgJnBoeV9kYXRhKTsKLQkJaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIEhWX0NPTENfVVBQRVIsICZwaHlfZGF0YSk7Ci0JCWh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBIVl9DT0xDX0xPV0VSLCAmcGh5X2RhdGEpOwotCQlody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgSFZfRENfVVBQRVIsICZwaHlfZGF0YSk7Ci0JCWh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBIVl9EQ19MT1dFUiwgJnBoeV9kYXRhKTsKLQkJaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIEhWX1ROQ1JTX1VQUEVSLCAmcGh5X2RhdGEpOwotCQlody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgSFZfVE5DUlNfTE9XRVIsICZwaHlfZGF0YSk7CisJCWUxZV9ycGh5KGh3LCBIVl9TQ0NfVVBQRVIsICZwaHlfZGF0YSk7CisJCWUxZV9ycGh5KGh3LCBIVl9TQ0NfTE9XRVIsICZwaHlfZGF0YSk7CisJCWUxZV9ycGh5KGh3LCBIVl9FQ09MX1VQUEVSLCAmcGh5X2RhdGEpOworCQllMWVfcnBoeShodywgSFZfRUNPTF9MT1dFUiwgJnBoeV9kYXRhKTsKKwkJZTFlX3JwaHkoaHcsIEhWX01DQ19VUFBFUiwgJnBoeV9kYXRhKTsKKwkJZTFlX3JwaHkoaHcsIEhWX01DQ19MT1dFUiwgJnBoeV9kYXRhKTsKKwkJZTFlX3JwaHkoaHcsIEhWX0xBVEVDT0xfVVBQRVIsICZwaHlfZGF0YSk7CisJCWUxZV9ycGh5KGh3LCBIVl9MQVRFQ09MX0xPV0VSLCAmcGh5X2RhdGEpOworCQllMWVfcnBoeShodywgSFZfQ09MQ19VUFBFUiwgJnBoeV9kYXRhKTsKKwkJZTFlX3JwaHkoaHcsIEhWX0NPTENfTE9XRVIsICZwaHlfZGF0YSk7CisJCWUxZV9ycGh5KGh3LCBIVl9EQ19VUFBFUiwgJnBoeV9kYXRhKTsKKwkJZTFlX3JwaHkoaHcsIEhWX0RDX0xPV0VSLCAmcGh5X2RhdGEpOworCQllMWVfcnBoeShodywgSFZfVE5DUlNfVVBQRVIsICZwaHlfZGF0YSk7CisJCWUxZV9ycGh5KGh3LCBIVl9UTkNSU19MT1dFUiwgJnBoeV9kYXRhKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYwppbmRleCA3ZTU1MTcwLi5mZjI4NzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jCkBAIC0xMTM1LDcgKzExMzUsOCBAQAogCQlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIFBIWV9BVVRPTkVHX0FEViwgJm1paV9ud2F5X2Fkdl9yZWcpOwogCQlpZiAocmV0X3ZhbCkKIAkJCXJldHVybiByZXRfdmFsOwotCQlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIFBIWV9MUF9BQklMSVRZLCAmbWlpX253YXlfbHBfYWJpbGl0eV9yZWcpOworCQlyZXRfdmFsID0KKwkJICAgIGUxZV9ycGh5KGh3LCBQSFlfTFBfQUJJTElUWSwgJm1paV9ud2F5X2xwX2FiaWxpdHlfcmVnKTsKIAkJaWYgKHJldF92YWwpCiAJCQlyZXR1cm4gcmV0X3ZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IGZlNTAyNDIuLmZhNWI2MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTE5ODAsMTUgKzE5ODAsMTUgQEAKIH0KIAogLyoqCi0gKiBlMTAwMF9nZXRfaHdfY29udHJvbCAtIGdldCBjb250cm9sIG9mIHRoZSBoL3cgZnJvbSBmL3cKKyAqIGUxMDAwZV9nZXRfaHdfY29udHJvbCAtIGdldCBjb250cm9sIG9mIHRoZSBoL3cgZnJvbSBmL3cKICAqIEBhZGFwdGVyOiBhZGRyZXNzIG9mIGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKgotICogZTEwMDBfZ2V0X2h3X2NvbnRyb2wgc2V0cyB7Q1RSTF9FWFR8U1dTTX06RFJWX0xPQUQgYml0LgorICogZTEwMDBlX2dldF9od19jb250cm9sIHNldHMge0NUUkxfRVhUfFNXU019OkRSVl9MT0FEIGJpdC4KICAqIEZvciBBU0YgYW5kIFBhc3MgVGhyb3VnaCB2ZXJzaW9ucyBvZiBmL3cgdGhpcyBtZWFucyB0aGF0CiAgKiB0aGUgZHJpdmVyIGlzIGxvYWRlZC4gRm9yIEFNVCB2ZXJzaW9uIChvbmx5IHdpdGggODI1NzMpCiAgKiBvZiB0aGUgZi93IHRoaXMgbWVhbnMgdGhhdCB0aGUgbmV0d29yayBpL2YgaXMgb3Blbi4KICAqKi8KLXN0YXRpYyB2b2lkIGUxMDAwX2dldF9od19jb250cm9sKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQordm9pZCBlMTAwMGVfZ2V0X2h3X2NvbnRyb2woc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgY3RybF9leHQ7CkBAIC0yMDA1LDE2ICsyMDA1LDE2IEBACiB9CiAKIC8qKgotICogZTEwMDBfcmVsZWFzZV9od19jb250cm9sIC0gcmVsZWFzZSBjb250cm9sIG9mIHRoZSBoL3cgdG8gZi93CisgKiBlMTAwMGVfcmVsZWFzZV9od19jb250cm9sIC0gcmVsZWFzZSBjb250cm9sIG9mIHRoZSBoL3cgdG8gZi93CiAgKiBAYWRhcHRlcjogYWRkcmVzcyBvZiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoKLSAqIGUxMDAwX3JlbGVhc2VfaHdfY29udHJvbCByZXNldHMge0NUUkxfRVhUfFNXU019OkRSVl9MT0FEIGJpdC4KKyAqIGUxMDAwZV9yZWxlYXNlX2h3X2NvbnRyb2wgcmVzZXRzIHtDVFJMX0VYVHxTV1NNfTpEUlZfTE9BRCBiaXQuCiAgKiBGb3IgQVNGIGFuZCBQYXNzIFRocm91Z2ggdmVyc2lvbnMgb2YgZi93IHRoaXMgbWVhbnMgdGhhdCB0aGUKICAqIGRyaXZlciBpcyBubyBsb25nZXIgbG9hZGVkLiBGb3IgQU1UIHZlcnNpb24gKG9ubHkgd2l0aCA4MjU3MykgaQogICogb2YgdGhlIGYvdyB0aGlzIG1lYW5zIHRoYXQgdGhlIG5ldHdvcmsgaS9mIGlzIGNsb3NlZC4KICAqCiAgKiovCi1zdGF0aWMgdm9pZCBlMTAwMF9yZWxlYXNlX2h3X2NvbnRyb2woc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIGUxMDAwZV9yZWxlYXNlX2h3X2NvbnRyb2woc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgY3RybF9leHQ7CkBAIC0yNDQ1LDcgKzI0NDUsNyBAQAogCSAgICAgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX1NUQVRVU19WTEFOKSAmJgogCSAgICAodmlkID09IGFkYXB0ZXItPm1uZ192bGFuX2lkKSkgewogCQkvKiByZWxlYXNlIGNvbnRyb2wgdG8gZi93ICovCi0JCWUxMDAwX3JlbGVhc2VfaHdfY29udHJvbChhZGFwdGVyKTsKKwkJZTEwMDBlX3JlbGVhc2VfaHdfY29udHJvbChhZGFwdGVyKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjczNCw2ICsyNzM0LDkgQEAKIAkJCXJldF92YWwgPSBlMTAwMF9sdl9qdW1ib193b3JrYXJvdW5kX2ljaDhsYW4oaHcsIHRydWUpOwogCQllbHNlCiAJCQlyZXRfdmFsID0gZTEwMDBfbHZfanVtYm9fd29ya2Fyb3VuZF9pY2g4bGFuKGh3LCBmYWxzZSk7CisKKwkJaWYgKHJldF92YWwpCisJCQllX2RiZygiZmFpbGVkIHRvIGVuYWJsZSBqdW1ibyBmcmFtZSB3b3JrYXJvdW5kIG1vZGVcbiIpOwogCX0KIAogCS8qIFByb2dyYW0gTUMgb2Zmc2V0IHZlY3RvciBiYXNlICovCkBAIC0zMTg0LDcgKzMxODcsNiBAQAogCQlldzMyKFBCQSwgcGJhKTsKIAl9CiAKLQogCS8qCiAJICogZmxvdyBjb250cm9sIHNldHRpbmdzCiAJICoKQEAgLTMyNzIsNyArMzI3NCw3IEBACiAJICogdGhhdCB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgaW4gY29udHJvbAogCSAqLwogCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0FNVCkKLQkJZTEwMDBfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CisJCWUxMDAwZV9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKIAogCWV3MzIoV1VDLCAwKTsKIApAQCAtMzI4NSw2ICszMjg3LDEzIEBACiAJZXczMihWRVQsIEVUSF9QXzgwMjFRKTsKIAogCWUxMDAwZV9yZXNldF9hZGFwdGl2ZShodyk7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSAmJgorCSAgICAhdGVzdF9iaXQoX19FMTAwMF9URVNUSU5HLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCWUxMDAwX3Bvd2VyX2Rvd25fcGh5KGFkYXB0ZXIpOworCQlyZXR1cm47CisJfQorCiAJZTEwMDBfZ2V0X3BoeV9pbmZvKGh3KTsKIAogCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19TTUFSVF9QT1dFUl9ET1dOKSAmJgpAQCAtMzU3MCw3ICszNTc5LDcgQEAKIAkgKiBpbnRlcmZhY2UgaXMgbm93IG9wZW4gYW5kIHJlc2V0IHRoZSBwYXJ0IHRvIGEga25vd24gc3RhdGUuCiAJICovCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfQU1UKSB7Ci0JCWUxMDAwX2dldF9od19jb250cm9sKGFkYXB0ZXIpOworCQllMTAwMGVfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CiAJCWUxMDAwZV9yZXNldChhZGFwdGVyKTsKIAl9CiAKQEAgLTM2MzQsNyArMzY0Myw3IEBACiAJcmV0dXJuIDA7CiAKIGVycl9yZXFfaXJxOgotCWUxMDAwX3JlbGVhc2VfaHdfY29udHJvbChhZGFwdGVyKTsKKwllMTAwMGVfcmVsZWFzZV9od19jb250cm9sKGFkYXB0ZXIpOwogCWUxMDAwX3Bvd2VyX2Rvd25fcGh5KGFkYXB0ZXIpOwogCWUxMDAwZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKIGVycl9zZXR1cF9yeDoKQEAgLTM2ODksOCArMzY5OCw5IEBACiAJICogSWYgQU1UIGlzIGVuYWJsZWQsIGxldCB0aGUgZmlybXdhcmUga25vdyB0aGF0IHRoZSBuZXR3b3JrCiAJICogaW50ZXJmYWNlIGlzIG5vdyBjbG9zZWQKIAkgKi8KLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19BTVQpCi0JCWUxMDAwX3JlbGVhc2VfaHdfY29udHJvbChhZGFwdGVyKTsKKwlpZiAoKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfQU1UKSAmJgorCSAgICAhdGVzdF9iaXQoX19FMTAwMF9URVNUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQllMTAwMGVfcmVsZWFzZV9od19jb250cm9sKGFkYXB0ZXIpOwogCiAJaWYgKChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0VSVCkgfHwKIAkgICAgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGUxMDAwX3BjaDJsYW4pKQpAQCAtNTIwOSw3ICs1MjE5LDcgQEAKIAkgKiBSZWxlYXNlIGNvbnRyb2wgb2YgaC93IHRvIGYvdy4gIElmIGYvdyBpcyBBTVQgZW5hYmxlZCwgdGhpcwogCSAqIHdvdWxkIGhhdmUgYWxyZWFkeSBoYXBwZW5lZCBpbiBjbG9zZSBhbmQgaXMgcmVkdW5kYW50LgogCSAqLwotCWUxMDAwX3JlbGVhc2VfaHdfY29udHJvbChhZGFwdGVyKTsKKwllMTAwMGVfcmVsZWFzZV9od19jb250cm9sKGFkYXB0ZXIpOwogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCkBAIC01MzY2LDcgKzUzNzYsNyBAQAogCSAqIHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZSBkcml2ZXIuCiAJICovCiAJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19BTVQpKQotCQllMTAwMF9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKKwkJZTEwMDBlX2dldF9od19jb250cm9sKGFkYXB0ZXIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NjEzLDcgKzU2MjMsNyBAQAogCSAqIHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZSBkcml2ZXIuCiAJICovCiAJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19BTVQpKQotCQllMTAwMF9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKKwkJZTEwMDBlX2dldF9od19jb250cm9sKGFkYXB0ZXIpOwogCiB9CiAKQEAgLTU2MzYsNyArNTY0Niw3IEBACiAJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGJhX3N0cmluZ19nZW5lcmljKGh3LCBwYmFfc3RyLAogCQkJCQkJRTEwMDBfUEJBTlVNX0xFTkdUSCk7CiAJaWYgKHJldF92YWwpCi0JCXN0cmNweShwYmFfc3RyLCAiVW5rbm93biIpOworCQlzdHJuY3B5KChjaGFyICopcGJhX3N0ciwgIlVua25vd24iLCBzaXplb2YocGJhX3N0cikgLSAxKTsKIAllX2luZm8oIk1BQzogJWQsIFBIWTogJWQsIFBCQSBObzogJXNcbiIsCiAJICAgICAgIGh3LT5tYWMudHlwZSwgaHctPnBoeS50eXBlLCBwYmFfc3RyKTsKIH0KQEAgLTU5NjMsOSArNTk3Myw5IEBACiAJICogdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIGRyaXZlci4KIAkgKi8KIAlpZiAoIShhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0FNVCkpCi0JCWUxMDAwX2dldF9od19jb250cm9sKGFkYXB0ZXIpOworCQllMTAwMGVfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CiAKLQlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKKwlzdHJuY3B5KG5ldGRldi0+bmFtZSwgImV0aCVkIiwgc2l6ZW9mKG5ldGRldi0+bmFtZSkgLSAxKTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9yZWdpc3RlcjsKQEAgLTU5ODIsMTIgKzU5OTIsMTEgQEAKIAogZXJyX3JlZ2lzdGVyOgogCWlmICghKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfQU1UKSkKLQkJZTEwMDBfcmVsZWFzZV9od19jb250cm9sKGFkYXB0ZXIpOworCQllMTAwMGVfcmVsZWFzZV9od19jb250cm9sKGFkYXB0ZXIpOwogZXJyX2VlcHJvbToKIAlpZiAoIWUxMDAwX2NoZWNrX3Jlc2V0X2Jsb2NrKCZhZGFwdGVyLT5odykpCiAJCWUxMDAwX3BoeV9od19yZXNldCgmYWRhcHRlci0+aHcpOwogZXJyX2h3X2luaXQ6Ci0KIAlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKIAlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKIGVycl9zd19pbml0OgpAQCAtNjA1Myw3ICs2MDYyLDcgQEAKIAkgKiBSZWxlYXNlIGNvbnRyb2wgb2YgaC93IHRvIGYvdy4gIElmIGYvdyBpcyBBTVQgZW5hYmxlZCwgdGhpcwogCSAqIHdvdWxkIGhhdmUgYWxyZWFkeSBoYXBwZW5lZCBpbiBjbG9zZSBhbmQgaXMgcmVkdW5kYW50LgogCSAqLwotCWUxMDAwX3JlbGVhc2VfaHdfY29udHJvbChhZGFwdGVyKTsKKwllMTAwMGVfcmVsZWFzZV9od19jb250cm9sKGFkYXB0ZXIpOwogCiAJZTEwMDBlX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOwogCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jCmluZGV4IDE3ODFlZmUuLjAwZjg5ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMKQEAgLTYzNywxMiArNjM3LDExIEBACiAgKiovCiBzMzIgZTEwMDBfY29wcGVyX2xpbmtfc2V0dXBfODI1Nzcoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLQlzdHJ1Y3QgZTEwMDBfcGh5X2luZm8gKnBoeSA9ICZody0+cGh5OwogCXMzMiByZXRfdmFsOwogCXUxNiBwaHlfZGF0YTsKIAogCS8qIEVuYWJsZSBDUlMgb24gVFguIFRoaXMgbXVzdCBiZSBzZXQgZm9yIGhhbGYtZHVwbGV4IG9wZXJhdGlvbi4gKi8KLQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIEk4MjU3N19DRkdfUkVHLCAmcGh5X2RhdGEpOworCXJldF92YWwgPSBlMWVfcnBoeShodywgSTgyNTc3X0NGR19SRUcsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC02NTEsNyArNjUwLDcgQEAKIAkvKiBFbmFibGUgZG93bnNoaWZ0ICovCiAJcGh5X2RhdGEgfD0gSTgyNTc3X0NGR19FTkFCTEVfRE9XTlNISUZUOwogCi0JcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgSTgyNTc3X0NGR19SRUcsIHBoeV9kYXRhKTsKKwlyZXRfdmFsID0gZTFlX3dwaHkoaHcsIEk4MjU3N19DRkdfUkVHLCBwaHlfZGF0YSk7CiAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKQEAgLTc3NCwxNiArNzczLDE0IEBACiAJfQogCiAJaWYgKHBoeS0+dHlwZSA9PSBlMTAwMF9waHlfODI1NzgpIHsKLQkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaHlfZGF0YSk7CisJCXJldF92YWwgPSBlMWVfcnBoeShodywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7CiAJCWlmIChyZXRfdmFsKQogCQkJcmV0dXJuIHJldF92YWw7CiAKIAkJLyogODI1NzggUEhZIC0gc2V0IHRoZSBkb3duc2hpZnQgY291bnQgdG8gMXguICovCiAJCXBoeV9kYXRhIHw9IEk4MjU3OF9FUFNDUl9ET1dOU0hJRlRfRU5BQkxFOwogCQlwaHlfZGF0YSAmPSB+STgyNTc4X0VQU0NSX0RPV05TSElGVF9DT1VOVEVSX01BU0s7Ci0JCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIE04OEUxMDAwX0VYVF9QSFlfU1BFQ19DVFJMLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeV9kYXRhKTsKKwkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwgcGh5X2RhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCXJldHVybiByZXRfdmFsOwogCX0KQEAgLTEzMTksOSArMTMxNiw4IEBACiAJCQkJICogV2UgZGlkbid0IGdldCBsaW5rLgogCQkJCSAqIFJlc2V0IHRoZSBEU1AgYW5kIGNyb3NzIG91ciBmaW5nZXJzLgogCQkJCSAqLwotCQkJCXJldF92YWwgPSBlMWVfd3BoeShodywKLQkJCQkJCU04OEUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKLQkJCQkJCTB4MDAxZCk7CisJCQkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBNODhFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCisJCQkJCQkgICAweDAwMWQpOwogCQkJCWlmIChyZXRfdmFsKQogCQkJCQlyZXR1cm4gcmV0X3ZhbDsKIAkJCQlyZXRfdmFsID0gZTEwMDBlX3BoeV9yZXNldF9kc3AoaHcpOwpAQCAtMjk5MCw3ICsyOTg2LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfZ2V0X3BoeV9hZGRyX2Zvcl9odl9wYWdlIC0gR2V0IFBIWSBhZHJyZXNzIGJhc2VkIG9uIHBhZ2UKKyAqICBlMTAwMF9nZXRfcGh5X2FkZHJfZm9yX2h2X3BhZ2UgLSBHZXQgUEhZIGFkZHJlc3MgYmFzZWQgb24gcGFnZQogICogIEBwYWdlOiBwYWdlIHRvIGJlIGFjY2Vzc2VkCiAgKiovCiBzdGF0aWMgdTMyIGUxMDAwX2dldF9waHlfYWRkcl9mb3JfaHZfcGFnZSh1MzIgcGFnZSkKQEAgLTMwNzEsMTIgKzMwNjcsMTIgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBEbyBub3QgYXBwbHkgd29ya2Fyb3VuZCBpZiBpbiBQSFkgbG9vcGJhY2sgYml0IDE0IHNldCAqLwotCWh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBQSFlfQ09OVFJPTCwgJmRhdGEpOworCWUxZV9ycGh5KGh3LCBQSFlfQ09OVFJPTCwgJmRhdGEpOwogCWlmIChkYXRhICYgUEhZX0NPTlRST0xfTEIpCiAJCWdvdG8gb3V0OwogCiAJLyogY2hlY2sgaWYgbGluayBpcyB1cCBhbmQgYXQgMUdicHMgKi8KLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIEJNX0NTX1NUQVRVUywgJmRhdGEpOworCXJldF92YWwgPSBlMWVfcnBoeShodywgQk1fQ1NfU1RBVFVTLCAmZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0zMDkyLDE0ICszMDg4LDEyIEBACiAJbWRlbGF5KDIwMCk7CiAKIAkvKiBmbHVzaCB0aGUgcGFja2V0cyBpbiB0aGUgZmlmbyBidWZmZXIgKi8KLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCBIVl9NVVhfREFUQV9DVFJMLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFZfTVVYX0RBVEFfQ1RSTF9HRU5fVE9fTUFDIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWX01VWF9EQVRBX0NUUkxfRk9SQ0VfU1BFRUQpOworCXJldF92YWwgPSBlMWVfd3BoeShodywgSFZfTVVYX0RBVEFfQ1RSTCwgSFZfTVVYX0RBVEFfQ1RSTF9HRU5fVE9fTUFDIHwKKwkJCSAgIEhWX01VWF9EQVRBX0NUUkxfRk9SQ0VfU1BFRUQpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIEhWX01VWF9EQVRBX0NUUkwsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVl9NVVhfREFUQV9DVFJMX0dFTl9UT19NQUMpOworCXJldF92YWwgPSBlMWVfd3BoeShodywgSFZfTVVYX0RBVEFfQ1RSTCwgSFZfTVVYX0RBVEFfQ1RSTF9HRU5fVE9fTUFDKTsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwpAQCAtMzExOSw3ICszMTEzLDcgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgZGF0YTsKIAotCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSTgyNTc3X1BIWV9TVEFUVVNfMiwgJmRhdGEpOworCXJldF92YWwgPSBlMWVfcnBoeShodywgSTgyNTc3X1BIWV9TVEFUVVNfMiwgJmRhdGEpOwogCiAJaWYgKCFyZXRfdmFsKQogCQlwaHktPmNhYmxlX3BvbGFyaXR5ID0gKGRhdGEgJiBJODI1NzdfUEhZX1NUQVRVUzJfUkVWX1BPTEFSSVRZKQpAQCAtMzE0MiwxMyArMzEzNiwxMyBAQAogCXUxNiBwaHlfZGF0YTsKIAlib29sIGxpbms7CiAKLQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2RhdGEpOworCXJldF92YWwgPSBlMWVfcnBoeShodywgUEhZX0NPTlRST0wsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJZTEwMDBlX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXhfc2V0dXAoaHcsICZwaHlfZGF0YSk7CiAKLQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2RhdGEpOworCXJldF92YWwgPSBlMWVfd3BoeShodywgUEhZX0NPTlRST0wsIHBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTMyMTIsNyArMzIwNiw3IEBACiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCi0JcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBJODI1NzdfUEhZX1NUQVRVU18yLCAmZGF0YSk7CisJcmV0X3ZhbCA9IGUxZV9ycGh5KGh3LCBJODI1NzdfUEhZX1NUQVRVU18yLCAmZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0zMjI0LDcgKzMyMTgsNyBAQAogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCi0JCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywgJmRhdGEpOworCQlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIFBIWV8xMDAwVF9TVEFUVVMsICZkYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIApAQCAtMzI1OCw3ICszMjUyLDcgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgcGh5X2RhdGEsIGxlbmd0aDsKIAotCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSTgyNTc3X1BIWV9ESUFHX1NUQVRVUywgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIEk4MjU3N19QSFlfRElBR19TVEFUVVMsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lZXByby5jIGIvZHJpdmVycy9uZXQvZWVwcm8uYwppbmRleCA0ZmE4ZDJhLi5lYjM1OTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lZXByby5jCisrKyBiL2RyaXZlcnMvbmV0L2VlcHJvLmMKQEAgLTE3NjEsNyArMTc2MSw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIDApOwogbW9kdWxlX3BhcmFtX2FycmF5KG1lbSwgaW50LCBOVUxMLCAwKTsKIG1vZHVsZV9wYXJhbShhdXRvZGV0ZWN0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkV0aGVyRXhwcmVzcyBQcm8vMTAgSS9PIGJhc2UgYWRkcmVzKGVzKSIpOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkV0aGVyRXhwcmVzcyBQcm8vMTAgSS9PIGJhc2UgYWRkcmVzcyhlcykiKTsKIE1PRFVMRV9QQVJNX0RFU0MoaXJxLCAiRXRoZXJFeHByZXNzIFByby8xMCBJUlEgbnVtYmVyKHMpIik7CiBNT0RVTEVfUEFSTV9ERVNDKG1lbSwgIkV0aGVyRXhwcmVzcyBQcm8vMTAgUnggYnVmZmVyIHNpemUoZXMpIGluIGtCICgzLTI5KSIpOwogTU9EVUxFX1BBUk1fREVTQyhhdXRvZGV0ZWN0LCAiRXRoZXJFeHByZXNzIFByby8xMCBmb3JjZSBib2FyZChzKSBkZXRlY3Rpb24gKDAtMSkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKaW5kZXggYTcyNGEyZC4uNmM3MjU3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2RlZmluZSBEUlZfTkFNRQkiZWhlYSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIkVIRUFfMDEwNiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIkVIRUFfMDEwNyIKIAogLyogZUhFQSBjYXBhYmlsaXR5IGZsYWdzICovCiAjZGVmaW5lIERMUEFSX1BPUlRfQUREX1JFTSAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwppbmRleCAxMDMyYjViLi5mNzVkMzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKQEAgLTQzNyw3ICs0MzcsNyBAQAogCQl9CiAJfQogCS8qIFJpbmcgZG9vcmJlbGwgKi8KLQllaGVhX3VwZGF0ZV9ycTFhKHByLT5xcCwgaSk7CisJZWhlYV91cGRhdGVfcnExYShwci0+cXAsIGkgLSAxKTsKIH0KIAogc3RhdGljIGludCBlaGVhX3JlZmlsbF9ycV9kZWYoc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByLApAQCAtMTMyOSw5ICsxMzI5LDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBlaGVhX3FwX2luaXRfYXR0ciAqaW5pdF9hdHRyID0gJnByLT5xcC0+aW5pdF9hdHRyOwogCi0JZWhlYV9pbml0X2ZpbGxfcnExKHByLCBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTEKLQkJCSAgICAgICAtIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMgotCQkJICAgICAgIC0gaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEzIC0gMSk7CisJZWhlYV9pbml0X2ZpbGxfcnExKHByLCBwci0+cnExX3NrYmEubGVuKTsKIAogCXJldCA9IGVoZWFfcmVmaWxsX3JxMihwciwgaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEyIC0gMSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlYy5jIGIvZHJpdmVycy9uZXQvZmVjLmMKaW5kZXggY2NlMzJkNC4uMmE3MTM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZmVjLmMKQEAgLTE3LDYgKzE3LDggQEAKICAqCiAgKiBCdWcgZml4ZXMgYW5kIGNsZWFudXAgYnkgUGhpbGlwcGUgRGUgTXV5dGVyIChwaGRtQG1hY3FlbC5iZSkKICAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA2IE1hY3EgRWxlY3Ryb25pcXVlIFNBLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTQ1LDI5ICs0Nyw0MSBAQAogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAotI2lmbmRlZiBDT05GSUdfQVJDSF9NWEMKKyNpZm5kZWYgQ09ORklHX0FSTQogI2luY2x1ZGUgPGFzbS9jb2xkZmlyZS5oPgogI2luY2x1ZGUgPGFzbS9tY2ZzaW0uaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiZmVjLmgiCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWEMKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NWEMpIHx8IGRlZmluZWQoQ09ORklHX1NPQ19JTVgyOCkKICNkZWZpbmUgRkVDX0FMSUdOTUVOVAkweGYKICNlbHNlCiAjZGVmaW5lIEZFQ19BTElHTk1FTlQJMHgzCiAjZW5kaWYKIAotLyoKLSAqIERlZmluZSB0aGUgZml4ZWQgYWRkcmVzcyBvZiB0aGUgRkVDIGhhcmR3YXJlLgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfTTUyNzIpCisjZGVmaW5lIERSSVZFUl9OQU1FCSJmZWMiCiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyCWZlY19tYWNfZGVmYXVsdFtdID0gewotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisvKiBDb250cm9sbGVyIGlzIEVORVQtTUFDICovCisjZGVmaW5lIEZFQ19RVUlSS19FTkVUX01BQwkJKDEgPDwgMCkKKy8qIENvbnRyb2xsZXIgbmVlZHMgZHJpdmVyIHRvIHN3YXAgZnJhbWUgKi8KKyNkZWZpbmUgRkVDX1FVSVJLX1NXQVBfRlJBTUUJCSgxIDw8IDEpCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIGZlY19kZXZ0eXBlW10gPSB7CisJeworCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCQkuZHJpdmVyX2RhdGEgPSAwLAorCX0sIHsKKwkJLm5hbWUgPSAiaW14MjgtZmVjIiwKKwkJLmRyaXZlcl9kYXRhID0gRkVDX1FVSVJLX0VORVRfTUFDIHwgRkVDX1FVSVJLX1NXQVBfRlJBTUUsCisJfQogfTsKIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgbWFjYWRkcltFVEhfQUxFTl07Cittb2R1bGVfcGFyYW1fYXJyYXkobWFjYWRkciwgYnl0ZSwgTlVMTCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1hY2FkZHIsICJGRUMgRXRoZXJuZXQgTUFDIGFkZHJlc3MiKTsKKworI2lmIGRlZmluZWQoQ09ORklHX001MjcyKQogLyoKICAqIFNvbWUgaGFyZHdhcmUgZ2V0cyBpdCBNQUMgYWRkcmVzcyBvdXQgb2YgbG9jYWwgZmxhc2ggbWVtb3J5LgogICogaWYgdGhpcyBpcyBub24temVybyB0aGVuIGFzc3VtZSBpdCBpcyB0aGUgYWRkcmVzcyB0byBnZXQgTUFDIGZyb20uCkBAIC0xMzMsNyArMTQ3LDggQEAKICAqIGFjY291bnQgd2hlbiBzZXR0aW5nIGl0LgogICovCiAjaWYgZGVmaW5lZChDT05GSUdfTTUyM3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjd4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI4eCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX001MjB4KSB8fCBkZWZpbmVkKENPTkZJR19NNTMyeCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NWEMpCisgICAgZGVmaW5lZChDT05GSUdfTTUyMHgpIHx8IGRlZmluZWQoQ09ORklHX001MzJ4KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9NWEMpIHx8IGRlZmluZWQoQ09ORklHX1NPQ19JTVgyOCkKICNkZWZpbmUJT1BUX0ZSQU1FX1NJWkUJKFBLVF9NQVhCVUZfU0laRSA8PCAxNikKICNlbHNlCiAjZGVmaW5lCU9QVF9GUkFNRV9TSVpFCTAKQEAgLTE4Niw3ICsyMDEsNiBAQAogCWludCAgICAgbWlpX3RpbWVvdXQ7CiAJdWludCAgICBwaHlfc3BlZWQ7CiAJcGh5X2ludGVyZmFjZV90CXBoeV9pbnRlcmZhY2U7Ci0JaW50CWluZGV4OwogCWludAlsaW5rOwogCWludAlmdWxsX2R1cGxleDsKIAlzdHJ1Y3QJY29tcGxldGlvbiBtZGlvX2RvbmU7CkBAIC0yMTMsMTAgKzIyNywyMyBAQAogLyogVHJhbnNtaXR0ZXIgdGltZW91dCAqLwogI2RlZmluZSBUWF9USU1FT1VUICgyICogSFopCiAKK3N0YXRpYyB2b2lkICpzd2FwX2J1ZmZlcih2b2lkICpidWZhZGRyLCBpbnQgbGVuKQoreworCWludCBpOworCXVuc2lnbmVkIGludCAqYnVmID0gYnVmYWRkcjsKKworCWZvciAoaSA9IDA7IGkgPCAobGVuICsgMykgLyA0OyBpKyssIGJ1ZisrKQorCQkqYnVmID0gY3B1X3RvX2JlMzIoKmJ1Zik7CisKKwlyZXR1cm4gYnVmYWRkcjsKK30KKwogc3RhdGljIG5ldGRldl90eF90CiBmZWNfZW5ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CisJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWRfZW50cnkgPQorCQkJCXBsYXRmb3JtX2dldF9kZXZpY2VfaWQoZmVwLT5wZGV2KTsKIAlzdHJ1Y3QgYnVmZGVzYyAqYmRwOwogCXZvaWQgKmJ1ZmFkZHI7CiAJdW5zaWduZWQgc2hvcnQJc3RhdHVzOwpAQCAtMjYxLDYgKzI4OCwxNCBAQAogCQlidWZhZGRyID0gZmVwLT50eF9ib3VuY2VbaW5kZXhdOwogCX0KIAorCS8qCisJICogU29tZSBkZXNpZ24gbWFkZSBhbiBpbmNvcnJlY3QgYXNzdW1wdGlvbiBvbiBlbmRpYW4gbW9kZSBvZgorCSAqIHRoZSBzeXN0ZW0gdGhhdCBpdCdzIHJ1bm5pbmcgb24uIEFzIHRoZSByZXN1bHQsIGRyaXZlciBoYXMgdG8KKwkgKiBzd2FwIGV2ZXJ5IGZyYW1lIGdvaW5nIHRvIGFuZCBjb21pbmcgZnJvbSB0aGUgY29udHJvbGxlci4KKwkgKi8KKwlpZiAoaWRfZW50cnktPmRyaXZlcl9kYXRhICYgRkVDX1FVSVJLX1NXQVBfRlJBTUUpCisJCXN3YXBfYnVmZmVyKGJ1ZmFkZHIsIHNrYi0+bGVuKTsKKwogCS8qIFNhdmUgc2tiIHBvaW50ZXIgKi8KIAlmZXAtPnR4X3NrYnVmZltmZXAtPnNrYl9jdXJdID0gc2tiOwogCkBAIC00MjksNiArNDY0LDggQEAKIGZlY19lbmV0X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0CWZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CisJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWRfZW50cnkgPQorCQkJCXBsYXRmb3JtX2dldF9kZXZpY2VfaWQoZmVwLT5wZGV2KTsKIAlzdHJ1Y3QgYnVmZGVzYyAqYmRwOwogCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKIAlzdHJ1Y3QJc2tfYnVmZgkqc2tiOwpAQCAtNDkyLDYgKzUyOSw5IEBACiAJICAgICAgICBkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIGJkcC0+Y2JkX2J1ZmFkZHIsIGJkcC0+Y2JkX2RhdGxlbiwKICAgICAgICAgCQkJRE1BX0ZST01fREVWSUNFKTsKIAorCQlpZiAoaWRfZW50cnktPmRyaXZlcl9kYXRhICYgRkVDX1FVSVJLX1NXQVBfRlJBTUUpCisJCQlzd2FwX2J1ZmZlcihkYXRhLCBwa3RfbGVuKTsKKwogCQkvKiBUaGlzIGRvZXMgMTYgYnl0ZSBhbGlnbm1lbnQsIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogCQkgKiBUaGUgcGFja2V0IGxlbmd0aCBpbmNsdWRlcyBGQ1MsIGJ1dCB3ZSBkb24ndCB3YW50IHRvCiAJCSAqIGluY2x1ZGUgdGhhdCB3aGVuIHBhc3NpbmcgdXBzdHJlYW0gYXMgaXQgbWVzc2VzIHVwCkBAIC01MzgsMzcgKzU3OCw1MCBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jaWZkZWYgQ09ORklHX001MjcyCiBzdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19nZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGZlcC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJdW5zaWduZWQgY2hhciAqaWFwLCB0bXBhZGRyW0VUSF9BTEVOXTsKIAotCWlmIChGRUNfRkxBU0hNQUMpIHsKLQkJLyoKLQkJICogR2V0IE1BQyBhZGRyZXNzIGZyb20gRkxBU0guCi0JCSAqIElmIGl0IGlzIGFsbCAxJ3Mgb3IgMCdzLCB1c2UgdGhlIGRlZmF1bHQuCi0JCSAqLwotCQlpYXAgPSAodW5zaWduZWQgY2hhciAqKUZFQ19GTEFTSE1BQzsKLQkJaWYgKChpYXBbMF0gPT0gMCkgJiYgKGlhcFsxXSA9PSAwKSAmJiAoaWFwWzJdID09IDApICYmCi0JCSAgICAoaWFwWzNdID09IDApICYmIChpYXBbNF0gPT0gMCkgJiYgKGlhcFs1XSA9PSAwKSkKLQkJCWlhcCA9IGZlY19tYWNfZGVmYXVsdDsKLQkJaWYgKChpYXBbMF0gPT0gMHhmZikgJiYgKGlhcFsxXSA9PSAweGZmKSAmJiAoaWFwWzJdID09IDB4ZmYpICYmCi0JCSAgICAoaWFwWzNdID09IDB4ZmYpICYmIChpYXBbNF0gPT0gMHhmZikgJiYgKGlhcFs1XSA9PSAweGZmKSkKLQkJCWlhcCA9IGZlY19tYWNfZGVmYXVsdDsKLQl9IGVsc2UgewotCQkqKCh1bnNpZ25lZCBsb25nICopICZ0bXBhZGRyWzBdKSA9IHJlYWRsKGZlcC0+aHdwICsgRkVDX0FERFJfTE9XKTsKLQkJKigodW5zaWduZWQgc2hvcnQgKikgJnRtcGFkZHJbNF0pID0gKHJlYWRsKGZlcC0+aHdwICsgRkVDX0FERFJfSElHSCkgPj4gMTYpOworCS8qCisJICogdHJ5IHRvIGdldCBtYWMgYWRkcmVzcyBpbiBmb2xsb3dpbmcgb3JkZXI6CisJICoKKwkgKiAxKSBtb2R1bGUgcGFyYW1ldGVyIHZpYSBrZXJuZWwgY29tbWFuZCBsaW5lIGluIGZvcm0KKwkgKiAgICBmZWMubWFjYWRkcj0weDAwLDB4MDQsMHg5ZiwweDAxLDB4MzAsMHhlMAorCSAqLworCWlhcCA9IG1hY2FkZHI7CisKKwkvKgorCSAqIDIpIGZyb20gZmxhc2ggb3IgZnVzZSAodmlhIHBsYXRmb3JtIGRhdGEpCisJICovCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGlhcCkpIHsKKyNpZmRlZiBDT05GSUdfTTUyNzIKKwkJaWYgKEZFQ19GTEFTSE1BQykKKwkJCWlhcCA9ICh1bnNpZ25lZCBjaGFyICopRkVDX0ZMQVNITUFDOworI2Vsc2UKKwkJaWYgKHBkYXRhKQorCQkJbWVtY3B5KGlhcCwgcGRhdGEtPm1hYywgRVRIX0FMRU4pOworI2VuZGlmCisJfQorCisJLyoKKwkgKiAzKSBGRUMgbWFjIHJlZ2lzdGVycyBzZXQgYnkgYm9vdGxvYWRlcgorCSAqLworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihpYXApKSB7CisJCSooKHVuc2lnbmVkIGxvbmcgKikgJnRtcGFkZHJbMF0pID0KKwkJCWJlMzJfdG9fY3B1KHJlYWRsKGZlcC0+aHdwICsgRkVDX0FERFJfTE9XKSk7CisJCSooKHVuc2lnbmVkIHNob3J0ICopICZ0bXBhZGRyWzRdKSA9CisJCQliZTE2X3RvX2NwdShyZWFkbChmZXAtPmh3cCArIEZFQ19BRERSX0hJR0gpID4+IDE2KTsKIAkJaWFwID0gJnRtcGFkZHJbMF07CiAJfQogCiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGlhcCwgRVRIX0FMRU4pOwogCi0JLyogQWRqdXN0IE1BQyBpZiB1c2luZyBkZWZhdWx0IE1BQyBhZGRyZXNzICovCi0JaWYgKGlhcCA9PSBmZWNfbWFjX2RlZmF1bHQpCi0JCSBkZXYtPmRldl9hZGRyW0VUSF9BTEVOLTFdID0gZmVjX21hY19kZWZhdWx0W0VUSF9BTEVOLTFdICsgZmVwLT5pbmRleDsKKwkvKiBBZGp1c3QgTUFDIGlmIHVzaW5nIG1hY2FkZHIgKi8KKwlpZiAoaWFwID09IG1hY2FkZHIpCisJCSBkZXYtPmRldl9hZGRyW0VUSF9BTEVOLTFdID0gbWFjYWRkcltFVEhfQUxFTi0xXSArIGZlcC0+cGRldi0+aWQ7CiB9Ci0jZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC02NTEsOCArNzA0LDggQEAKIAlmZXAtPm1paV90aW1lb3V0ID0gMDsKIAlpbml0X2NvbXBsZXRpb24oJmZlcC0+bWRpb19kb25lKTsKIAotCS8qIHN0YXJ0IGEgcmVhZCBvcCAqLwotCXdyaXRlbChGRUNfTU1GUl9TVCB8IEZFQ19NTUZSX09QX1JFQUQgfAorCS8qIHN0YXJ0IGEgd3JpdGUgb3AgKi8KKwl3cml0ZWwoRkVDX01NRlJfU1QgfCBGRUNfTU1GUl9PUF9XUklURSB8CiAJCUZFQ19NTUZSX1BBKG1paV9pZCkgfCBGRUNfTU1GUl9SQShyZWdudW0pIHwKIAkJRkVDX01NRlJfVEEgfCBGRUNfTU1GUl9EQVRBKHZhbHVlKSwKIAkJZmVwLT5od3AgKyBGRUNfTUlJX0RBVEEpOwpAQCAtNjgxLDYgKzczNCw3IEBACiAJY2hhciBtZGlvX2J1c19pZFtNSUlfQlVTX0lEX1NJWkVdOwogCWNoYXIgcGh5X25hbWVbTUlJX0JVU19JRF9TSVpFICsgM107CiAJaW50IHBoeV9pZDsKKwlpbnQgZGV2X2lkID0gZmVwLT5wZGV2LT5pZDsKIAogCWZlcC0+cGh5X2RldiA9IE5VTEw7CiAKQEAgLTY5Miw2ICs3NDYsOCBAQAogCQkJY29udGludWU7CiAJCWlmIChmZXAtPm1paV9idXMtPnBoeV9tYXBbcGh5X2lkXS0+cGh5X2lkID09IDApCiAJCQljb250aW51ZTsKKwkJaWYgKGRldl9pZC0tKQorCQkJY29udGludWU7CiAJCXN0cm5jcHkobWRpb19idXNfaWQsIGZlcC0+bWlpX2J1cy0+aWQsIE1JSV9CVVNfSURfU0laRSk7CiAJCWJyZWFrOwogCX0KQEAgLTcyOSwxMCArNzg1LDM1IEBACiAKIHN0YXRpYyBpbnQgZmVjX2VuZXRfbWlpX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdGF0aWMgc3RydWN0IG1paV9idXMgKmZlYzBfbWlpX2J1czsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CisJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWRfZW50cnkgPQorCQkJCXBsYXRmb3JtX2dldF9kZXZpY2VfaWQoZmVwLT5wZGV2KTsKIAlpbnQgZXJyID0gLUVOWElPLCBpOwogCisJLyoKKwkgKiBUaGUgZHVhbCBmZWMgaW50ZXJmYWNlcyBhcmUgbm90IGVxdWl2YWxlbnQgd2l0aCBlbmV0LW1hYy4KKwkgKiBIZXJlIGFyZSB0aGUgZGlmZmVyZW5jZXM6CisJICoKKwkgKiAgLSBmZWMwIHN1cHBvcnRzIE1JSSAmIFJNSUkgbW9kZXMgd2hpbGUgZmVjMSBvbmx5IHN1cHBvcnRzIFJNSUkKKwkgKiAgLSBmZWMwIGFjdHMgYXMgdGhlIDE1ODggdGltZSBtYXN0ZXIgd2hpbGUgZmVjMSBpcyBzbGF2ZQorCSAqICAtIGV4dGVybmFsIHBoeXMgY2FuIG9ubHkgYmUgY29uZmlndXJlZCBieSBmZWMwCisJICoKKwkgKiBUaGF0IGlzIHRvIHNheSBmZWMxIGNhbiBub3Qgd29yayBpbmRlcGVuZGVudGx5LiBJdCBvbmx5IHdvcmtzCisJICogd2hlbiBmZWMwIGlzIHdvcmtpbmcuIFRoZSByZWFzb24gYmVoaW5kIHRoaXMgZGVzaWduIGlzIHRoYXQgdGhlCisJICogc2Vjb25kIGludGVyZmFjZSBpcyBhZGRlZCBwcmltYXJpbHkgZm9yIFN3aXRjaCBtb2RlLgorCSAqCisJICogQmVjYXVzZSBvZiB0aGUgbGFzdCBwb2ludCBhYm92ZSwgYm90aCBwaHlzIGFyZSBhdHRhY2hlZCBvbiBmZWMwCisJICogbWRpbyBpbnRlcmZhY2UgaW4gYm9hcmQgZGVzaWduLCBhbmQgbmVlZCB0byBiZSBjb25maWd1cmVkIGJ5CisJICogZmVjMCBtaWlfYnVzLgorCSAqLworCWlmICgoaWRfZW50cnktPmRyaXZlcl9kYXRhICYgRkVDX1FVSVJLX0VORVRfTUFDKSAmJiBwZGV2LT5pZCkgeworCQkvKiBmZWMxIHVzZXMgZmVjMCBtaWlfYnVzICovCisJCWZlcC0+bWlpX2J1cyA9IGZlYzBfbWlpX2J1czsKKwkJcmV0dXJuIDA7CisJfQorCiAJZmVwLT5taWlfdGltZW91dCA9IDA7CiAKIAkvKgpAQCAtNzY5LDYgKzg1MCwxMCBAQAogCWlmIChtZGlvYnVzX3JlZ2lzdGVyKGZlcC0+bWlpX2J1cykpCiAJCWdvdG8gZXJyX291dF9mcmVlX21kaW9faXJxOwogCisJLyogc2F2ZSBmZWMwIG1paV9idXMgKi8KKwlpZiAoaWRfZW50cnktPmRyaXZlcl9kYXRhICYgRkVDX1FVSVJLX0VORVRfTUFDKQorCQlmZWMwX21paV9idXMgPSBmZXAtPm1paV9idXM7CisKIAlyZXR1cm4gMDsKIAogZXJyX291dF9mcmVlX21kaW9faXJxOgpAQCAtMTA2Nyw5ICsxMTUyLDggQEAKICAvKgogICAqIFhYWDogIFdlIG5lZWQgdG8gY2xlYW4gdXAgb24gZmFpbHVyZSBleGl0cyBoZXJlLgogICAqCi0gICogaW5kZXggaXMgb25seSB1c2VkIGluIGxlZ2FjeSBjb2RlCiAgICovCi1zdGF0aWMgaW50IGZlY19lbmV0X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGluZGV4KQorc3RhdGljIGludCBmZWNfZW5ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGJ1ZmRlc2MgKmNiZF9iYXNlOwpAQCAtMTA4NiwyNiArMTE3MCwxMSBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJmZlcC0+aHdfbG9jayk7CiAKLQlmZXAtPmluZGV4ID0gaW5kZXg7CiAJZmVwLT5od3AgPSAodm9pZCBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHI7CiAJZmVwLT5uZXRkZXYgPSBkZXY7CiAKLQkvKiBTZXQgdGhlIEV0aGVybmV0IGFkZHJlc3MgKi8KLSNpZmRlZiBDT05GSUdfTTUyNzIKKwkvKiBHZXQgdGhlIEV0aGVybmV0IGFkZHJlc3MgKi8KIAlmZWNfZ2V0X21hYyhkZXYpOwotI2Vsc2UKLQl7Ci0JCXVuc2lnbmVkIGxvbmcgbDsKLQkJbCA9IHJlYWRsKGZlcC0+aHdwICsgRkVDX0FERFJfTE9XKTsKLQkJZGV2LT5kZXZfYWRkclswXSA9ICh1bnNpZ25lZCBjaGFyKSgobCAmIDB4RkYwMDAwMDApID4+IDI0KTsKLQkJZGV2LT5kZXZfYWRkclsxXSA9ICh1bnNpZ25lZCBjaGFyKSgobCAmIDB4MDBGRjAwMDApID4+IDE2KTsKLQkJZGV2LT5kZXZfYWRkclsyXSA9ICh1bnNpZ25lZCBjaGFyKSgobCAmIDB4MDAwMEZGMDApID4+IDgpOwotCQlkZXYtPmRldl9hZGRyWzNdID0gKHVuc2lnbmVkIGNoYXIpKChsICYgMHgwMDAwMDBGRikgPj4gMCk7Ci0JCWwgPSByZWFkbChmZXAtPmh3cCArIEZFQ19BRERSX0hJR0gpOwotCQlkZXYtPmRldl9hZGRyWzRdID0gKHVuc2lnbmVkIGNoYXIpKChsICYgMHhGRjAwMDAwMCkgPj4gMjQpOwotCQlkZXYtPmRldl9hZGRyWzVdID0gKHVuc2lnbmVkIGNoYXIpKChsICYgMHgwMEZGMDAwMCkgPj4gMTYpOwotCX0KLSNlbmRpZgogCiAJLyogU2V0IHJlY2VpdmUgYW5kIHRyYW5zbWl0IGRlc2NyaXB0b3IgYmFzZS4gKi8KIAlmZXAtPnJ4X2JkX2Jhc2UgPSBjYmRfYmFzZTsKQEAgLTExNTYsMTIgKzEyMjUsMjUgQEAKIGZlY19yZXN0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkdXBsZXgpCiB7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CisJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWRfZW50cnkgPQorCQkJCXBsYXRmb3JtX2dldF9kZXZpY2VfaWQoZmVwLT5wZGV2KTsKIAlpbnQgaTsKKwl1MzIgdmFsLCB0ZW1wX21hY1syXTsKIAogCS8qIFdoYWNrIGEgcmVzZXQuICBXZSBzaG91bGQgd2FpdCBmb3IgdGhpcy4gKi8KIAl3cml0ZWwoMSwgZmVwLT5od3AgKyBGRUNfRUNOVFJMKTsKIAl1ZGVsYXkoMTApOwogCisJLyoKKwkgKiBlbmV0LW1hYyByZXNldCB3aWxsIHJlc2V0IG1hYyBhZGRyZXNzIHJlZ2lzdGVycyB0b28sCisJICogc28gbmVlZCB0byByZWNvbmZpZ3VyZSBpdC4KKwkgKi8KKwlpZiAoaWRfZW50cnktPmRyaXZlcl9kYXRhICYgRkVDX1FVSVJLX0VORVRfTUFDKSB7CisJCW1lbWNweSgmdGVtcF9tYWMsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJd3JpdGVsKGNwdV90b19iZTMyKHRlbXBfbWFjWzBdKSwgZmVwLT5od3AgKyBGRUNfQUREUl9MT1cpOworCQl3cml0ZWwoY3B1X3RvX2JlMzIodGVtcF9tYWNbMV0pLCBmZXAtPmh3cCArIEZFQ19BRERSX0hJR0gpOworCX0KKwogCS8qIENsZWFyIGFueSBvdXRzdGFuZGluZyBpbnRlcnJ1cHQuICovCiAJd3JpdGVsKDB4ZmZjMDAwMDAsIGZlcC0+aHdwICsgRkVDX0lFVkVOVCk7CiAKQEAgLTEyMDgsMjAgKzEyOTAsNDUgQEAKIAkvKiBTZXQgTUlJIHNwZWVkICovCiAJd3JpdGVsKGZlcC0+cGh5X3NwZWVkLCBmZXAtPmh3cCArIEZFQ19NSUlfU1BFRUQpOwogCisJLyoKKwkgKiBUaGUgcGh5IGludGVyZmFjZSBhbmQgc3BlZWQgbmVlZCB0byBnZXQgY29uZmlndXJlZAorCSAqIGRpZmZlcmVudGx5IG9uIGVuZXQtbWFjLgorCSAqLworCWlmIChpZF9lbnRyeS0+ZHJpdmVyX2RhdGEgJiBGRUNfUVVJUktfRU5FVF9NQUMpIHsKKwkJdmFsID0gcmVhZGwoZmVwLT5od3AgKyBGRUNfUl9DTlRSTCk7CisKKwkJLyogTUlJIG9yIFJNSUkgKi8KKwkJaWYgKGZlcC0+cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKKwkJCXZhbCB8PSAoMSA8PCA4KTsKKwkJZWxzZQorCQkJdmFsICY9IH4oMSA8PCA4KTsKKworCQkvKiAxME0gb3IgMTAwTSAqLworCQlpZiAoZmVwLT5waHlfZGV2ICYmIGZlcC0+cGh5X2Rldi0+c3BlZWQgPT0gU1BFRURfMTAwKQorCQkJdmFsICY9IH4oMSA8PCA5KTsKKwkJZWxzZQorCQkJdmFsIHw9ICgxIDw8IDkpOworCisJCXdyaXRlbCh2YWwsIGZlcC0+aHdwICsgRkVDX1JfQ05UUkwpOworCX0gZWxzZSB7CiAjaWZkZWYgRkVDX01JSUdTS19FTlIKLQlpZiAoZmVwLT5waHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKSB7Ci0JCS8qIGRpc2FibGUgdGhlIGdhc2tldCBhbmQgd2FpdCAqLwotCQl3cml0ZWwoMCwgZmVwLT5od3AgKyBGRUNfTUlJR1NLX0VOUik7Ci0JCXdoaWxlIChyZWFkbChmZXAtPmh3cCArIEZFQ19NSUlHU0tfRU5SKSAmIDQpCi0JCQl1ZGVsYXkoMSk7CisJCWlmIChmZXAtPnBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpIHsKKwkJCS8qIGRpc2FibGUgdGhlIGdhc2tldCBhbmQgd2FpdCAqLworCQkJd3JpdGVsKDAsIGZlcC0+aHdwICsgRkVDX01JSUdTS19FTlIpOworCQkJd2hpbGUgKHJlYWRsKGZlcC0+aHdwICsgRkVDX01JSUdTS19FTlIpICYgNCkKKwkJCQl1ZGVsYXkoMSk7CiAKLQkJLyogY29uZmlndXJlIHRoZSBnYXNrZXQ6IFJNSUksIDUwIE1Ieiwgbm8gbG9vcGJhY2ssIG5vIGVjaG8gKi8KLQkJd3JpdGVsKDEsIGZlcC0+aHdwICsgRkVDX01JSUdTS19DRkdSKTsKKwkJCS8qCisJCQkgKiBjb25maWd1cmUgdGhlIGdhc2tldDoKKwkJCSAqICAgUk1JSSwgNTAgTUh6LCBubyBsb29wYmFjaywgbm8gZWNobworCQkJICovCisJCQl3cml0ZWwoMSwgZmVwLT5od3AgKyBGRUNfTUlJR1NLX0NGR1IpOwogCi0JCS8qIHJlLWVuYWJsZSB0aGUgZ2Fza2V0ICovCi0JCXdyaXRlbCgyLCBmZXAtPmh3cCArIEZFQ19NSUlHU0tfRU5SKTsKLQl9CisJCQkvKiByZS1lbmFibGUgdGhlIGdhc2tldCAqLworCQkJd3JpdGVsKDIsIGZlcC0+aHdwICsgRkVDX01JSUdTS19FTlIpOworCQl9CiAjZW5kaWYKKwl9CiAKIAkvKiBBbmQgbGFzdCwgZW5hYmxlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwcm9jZXNzaW5nICovCiAJd3JpdGVsKDIsIGZlcC0+aHdwICsgRkVDX0VDTlRSTCk7CkBAIC0xMzE2LDcgKzE0MjMsNyBAQAogCX0KIAljbGtfZW5hYmxlKGZlcC0+Y2xrKTsKIAotCXJldCA9IGZlY19lbmV0X2luaXQobmRldiwgMCk7CisJcmV0ID0gZmVjX2VuZXRfaW5pdChuZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZF9pbml0OwogCkBAIC0xMzgwLDggKzE0ODcsMTAgQEAKIAogCWlmIChuZGV2KSB7CiAJCWZlcCA9IG5ldGRldl9wcml2KG5kZXYpOwotCQlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkKLQkJCWZlY19lbmV0X2Nsb3NlKG5kZXYpOworCQlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgeworCQkJZmVjX3N0b3AobmRldik7CisJCQluZXRpZl9kZXZpY2VfZGV0YWNoKG5kZXYpOworCQl9CiAJCWNsa19kaXNhYmxlKGZlcC0+Y2xrKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMzk2LDggKzE1MDUsMTAgQEAKIAlpZiAobmRldikgewogCQlmZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAkJY2xrX2VuYWJsZShmZXAtPmNsayk7Ci0JCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKQotCQkJZmVjX2VuZXRfb3BlbihuZGV2KTsKKwkJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKKwkJCWZlY19yZXN0YXJ0KG5kZXYsIGZlcC0+ZnVsbF9kdXBsZXgpOworCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTsKKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE0MTQsMTIgKzE1MjUsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZmVjX2RyaXZlciA9IHsKIAkuZHJpdmVyCT0gewotCQkubmFtZQk9ICJmZWMiLAorCQkubmFtZQk9IERSSVZFUl9OQU1FLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKICNpZmRlZiBDT05GSUdfUE0KIAkJLnBtCT0gJmZlY19wbV9vcHMsCiAjZW5kaWYKIAl9LAorCS5pZF90YWJsZSA9IGZlY19kZXZ0eXBlLAogCS5wcm9iZQk9IGZlY19wcm9iZSwKIAkucmVtb3ZlCT0gX19kZXZleGl0X3AoZmVjX2Rydl9yZW1vdmUpLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlYy5oIGIvZHJpdmVycy9uZXQvZmVjLmgKaW5kZXggMmM0OGIyNS4uYWNlMzE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjLmgKKysrIGIvZHJpdmVycy9uZXQvZmVjLmgKQEAgLTE0LDcgKzE0LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfTTUyM3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjd4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI4eCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX001MjB4KSB8fCBkZWZpbmVkKENPTkZJR19NNTMyeCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NWEMpCisgICAgZGVmaW5lZChDT05GSUdfTTUyMHgpIHx8IGRlZmluZWQoQ09ORklHX001MzJ4KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9NWEMpIHx8IGRlZmluZWQoQ09ORklHX1NPQ19JTVgyOCkKIC8qCiAgKglKdXN0IGZpZ3VyZXMsIE1vdG9yb2xhIHdvdWxkIGhhdmUgdG8gY2hhbmdlIHRoZSBvZmZzZXRzIGZvcgogICoJcmVnaXN0ZXJzIGluIHRoZSBzYW1lIHBlcmlwaGVyYWwgZGV2aWNlIG9uIGRpZmZlcmVudCBtb2RlbHMKQEAgLTc4LDcgKzc5LDcgQEAKIC8qCiAgKglEZWZpbmUgdGhlIGJ1ZmZlciBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KICAqLwotI2lmZGVmIENPTkZJR19BUkNIX01YQworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVhDKSB8fCBkZWZpbmVkKENPTkZJR19TT0NfSU1YMjgpCiBzdHJ1Y3QgYnVmZGVzYyB7CiAJdW5zaWduZWQgc2hvcnQgY2JkX2RhdGxlbjsJLyogRGF0YSBsZW5ndGggKi8KIAl1bnNpZ25lZCBzaG9ydCBjYmRfc2M7CS8qIENvbnRyb2wgYW5kIHN0YXR1cyBpbmZvICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IGNkMmQ3MmQuLmFmMDkyOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC0zOTQ5LDYgKzM5NDksNyBAQAogCQl3cml0ZWwoZmxhZ3MsIGJhc2UgKyBOdlJlZ1dha2VVcEZsYWdzKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAJfQorCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmbnAtPnBjaV9kZXYtPmRldiwgbnAtPndvbGVuYWJsZWQpOwogCXJldHVybiAwOwogfQogCkBAIC01NDg4LDE0ICs1NDg5LDEwIEBACiAJLyogc2V0IG1hYyBhZGRyZXNzICovCiAJbnZfY29weV9tYWNfdG9faHcoZGV2KTsKIAotCS8qIFdvcmthcm91bmQgY3VycmVudCBQQ0kgaW5pdCBnbGl0Y2g6ICB3YWtldXAgYml0cyBhcmVuJ3QKLQkgKiBiZWluZyBzZXQgZnJvbSBQQ0kgUE0gY2FwYWJpbGl0eS4KLQkgKi8KLQlkZXZpY2VfaW5pdF93YWtldXAoJnBjaV9kZXYtPmRldiwgMSk7Ci0KIAkvKiBkaXNhYmxlIFdPTCAqLwogCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdXYWtlVXBGbGFncyk7CiAJbnAtPndvbGVuYWJsZWQgPSAwOworCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmcGNpX2Rldi0+ZGV2LCBmYWxzZSk7CiAKIAlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19QT1dFUl9DTlRSTCkgewogCkBAIC01NzQ2LDggKzU3NDMsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IG52X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgbnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldmljZSk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CkBAIC01NzYzLDI1ICs1NzYxLDE3IEBACiAJZm9yIChpID0gMDsgaSA8PSBucC0+cmVnaXN0ZXJfc2l6ZS9zaXplb2YodTMyKTsgaSsrKQogCQlucC0+c2F2ZWRfY29uZmlnX3NwYWNlW2ldID0gcmVhZGwoYmFzZSArIGkqc2l6ZW9mKHUzMikpOwogCi0JcGNpX3NhdmVfc3RhdGUocGRldik7Ci0JcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCBucC0+d29sZW5hYmxlZCk7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG52X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyBpbnQgbnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2aWNlKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAlpbnQgaSwgcmMgPSAwOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwotCS8qIGFjayBhbnkgcGVuZGluZyB3YWtlIGV2ZW50cywgZGlzYWJsZSBQTUUgKi8KLQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QwLCAwKTsKLQogCS8qIHJlc3RvcmUgbm9uLXBjaSBjb25maWd1cmF0aW9uIHNwYWNlICovCiAJZm9yIChpID0gMDsgaSA8PSBucC0+cmVnaXN0ZXJfc2l6ZS9zaXplb2YodTMyKTsgaSsrKQogCQl3cml0ZWwobnAtPnNhdmVkX2NvbmZpZ19zcGFjZVtpXSwgYmFzZStpKnNpemVvZih1MzIpKTsKQEAgLTU4MDAsNiArNTc5MCw5IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobnZfcG1fb3BzLCBudl9zdXNwZW5kLCBudl9yZXN1bWUpOworI2RlZmluZSBOVl9QTV9PUFMgKCZudl9wbV9vcHMpCisKIHN0YXRpYyB2b2lkIG52X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CkBAIC01ODIyLDE1ICs1ODE1LDEzIEBACiAJICogb25seSBwdXQgdGhlIGRldmljZSBpbnRvIEQzIGlmIHdlIHJlYWxseSBnbyBmb3IgcG93ZXJvZmYuCiAJICovCiAJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKSB7Ci0JCWlmIChwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgbnAtPndvbGVuYWJsZWQpKQotCQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgbnAtPndvbGVuYWJsZWQpOworCQlwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIG5wLT53b2xlbmFibGVkKTsKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwogCX0KIH0KICNlbHNlCi0jZGVmaW5lIG52X3N1c3BlbmQgTlVMTAorI2RlZmluZSBOVl9QTV9PUFMgTlVMTAogI2RlZmluZSBudl9zaHV0ZG93biBOVUxMCi0jZGVmaW5lIG52X3Jlc3VtZSBOVUxMCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIHN0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2lfdGJsKSA9IHsKQEAgLTYwMDIsOSArNTk5Myw4IEBACiAJLmlkX3RhYmxlCT0gcGNpX3RibCwKIAkucHJvYmUJCT0gbnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChudl9yZW1vdmUpLAotCS5zdXNwZW5kCT0gbnZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IG52X3Jlc3VtZSwKIAkuc2h1dGRvd24JPSBudl9zaHV0ZG93biwKKwkuZHJpdmVyLnBtCT0gTlZfUE1fT1BTLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9uaWModm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKaW5kZXggNGU3ZDFkMC4uN2Q5Y2VkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKQEAgLTM5Niw3ICszOTYsNyBAQAogCXdoaWxlIChwKSB7CiAJCWlmIChwLT5iaXRyYXRlID09IGJpdHJhdGUpIHsKIAkJCW1lbWNweShwLT5iaXRzLCBiaXRzLCBZQU1fRlBHQV9TSVpFKTsKLQkJCXJldHVybiBwLT5iaXRzOworCQkJZ290byBvdXQ7CiAJCX0KIAkJcCA9IHAtPm5leHQ7CiAJfQpAQCAtNDExLDcgKzQxMSw3IEBACiAJcC0+Yml0cmF0ZSA9IGJpdHJhdGU7CiAJcC0+bmV4dCA9IHlhbV9kYXRhOwogCXlhbV9kYXRhID0gcDsKLQorIG91dDoKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAlyZXR1cm4gcC0+Yml0czsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvYmZpbl9zaXIuaCBiL2RyaXZlcnMvbmV0L2lyZGEvYmZpbl9zaXIuaAppbmRleCBiNTRhNmYwLi5lM2IyODVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2JmaW5fc2lyLmgKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9iZmluX3Npci5oCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KKyNpbmNsdWRlIDxtYWNoL2JmaW5fc2VyaWFsXzV4eC5oPgorI3VuZGVmIERSSVZFUl9OQU1FCiAKICNpZmRlZiBDT05GSUdfU0lSX0JGSU5fRE1BCiBzdHJ1Y3QgZG1hX3J4X2J1ZiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmggYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmgKaW5kZXggNGRjMzllNS4uNzdmY2Y0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5oCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuaApAQCAtMzAsNyArMzAsNyBAQAogICogICAgIG9yIHRoZSB0eXBlLURPIElSIHBvcnQuCiAgKgogICogSXJEQSBjaGlwIHNldCBsaXN0IGZyb20gVG9zaGliYSBDb21wdXRlciBFbmdpbmVlcmluZyBDb3JwLgotICogbW9kZWwJCQltZXRob2QJbWFrZXIJY29udHJvbGVyCQlWZXJzaW9uIAorICogbW9kZWwJCQltZXRob2QJbWFrZXIJY29udHJvbGxlcgkJVmVyc2lvbiAKICAqIFBvcnRlZ2UgMzIwQ1QJRklSLFNJUiBUb3NoaWJhIE9ib2UoVHJpYW5nbGUpIAogICogUG9ydGVnZSAzMDEwQ1QJRklSLFNJUiBUb3NoaWJhIE9ib2UoU3lkbmV5KSAKICAqIFBvcnRlZ2UgMzAxNUNUCUZJUixTSVIgVG9zaGliYSBPYm9lKFN5ZG5leSkgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAppbmRleCAzYWUzMGI4Li4zYjhjOTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKQEAgLTUwOCw2ICs1MDgsOCBAQAogZXh0ZXJuIHZvaWQgaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JlX3JpbmcgKik7CiBleHRlcm4gdm9pZCBpeGdiZV9jb25maWd1cmVfcnhfcmluZyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqLHN0cnVjdCBpeGdiZV9yaW5nICopOwogZXh0ZXJuIHZvaWQgaXhnYmVfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKixzdHJ1Y3QgaXhnYmVfcmluZyAqKTsKK2V4dGVybiB2b2lkIGl4Z2JlX2Rpc2FibGVfcnhfcXVldWUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgc3RydWN0IGl4Z2JlX3JpbmcgKik7CiBleHRlcm4gdm9pZCBpeGdiZV91cGRhdGVfc3RhdHMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIGludCBpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgaXhnYmVfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CkBAIC01MjQsMjYgKzUyNiwxMyBAQAogZXh0ZXJuIHMzMiBpeGdiZV9pbml0X2ZkaXJfc2lnbmF0dXJlXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBwYmFsbG9jKTsKIGV4dGVybiBzMzIgaXhnYmVfaW5pdF9mZGlyX3BlcmZlY3RfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHBiYWxsb2MpOwogZXh0ZXJuIHMzMiBpeGdiZV9mZGlyX2FkZF9zaWduYXR1cmVfZmlsdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCisJCQkJCQkgdW5pb24gaXhnYmVfYXRyX2hhc2hfZHdvcmQgaW5wdXQsCisJCQkJCQkgdW5pb24gaXhnYmVfYXRyX2hhc2hfZHdvcmQgY29tbW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHF1ZXVlKTsKIGV4dGVybiBzMzIgaXhnYmVfZmRpcl9hZGRfcGVyZmVjdF9maWx0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9hdHJfaW5wdXRfbWFza3MgKmlucHV0X21hc2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgc29mdF9pZCwgdTggcXVldWUpOwotZXh0ZXJuIHMzMiBpeGdiZV9hdHJfc2V0X3ZsYW5faWRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgdmxhbl9pZCk7Ci1leHRlcm4gczMyIGl4Z2JlX2F0cl9zZXRfc3JjX2lwdjRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHNyY19hZGRyKTsKLWV4dGVybiBzMzIgaXhnYmVfYXRyX3NldF9kc3RfaXB2NF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgZHN0X2FkZHIpOwotZXh0ZXJuIHMzMiBpeGdiZV9hdHJfc2V0X3NyY19wb3J0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBzcmNfcG9ydCk7Ci1leHRlcm4gczMyIGl4Z2JlX2F0cl9zZXRfZHN0X3BvcnRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGRzdF9wb3J0KTsKLWV4dGVybiBzMzIgaXhnYmVfYXRyX3NldF9mbGV4X2J5dGVfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBmbGV4X2J5dGUpOwotZXh0ZXJuIHMzMiBpeGdiZV9hdHJfc2V0X2w0dHlwZV84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggbDR0eXBlKTsKIGV4dGVybiB2b2lkIGl4Z2JlX2NvbmZpZ3VyZV9yc2NjdGwoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICpyaW5nKTsKIGV4dGVybiB2b2lkIGl4Z2JlX2NsZWFyX3JzY2N0bChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jCmluZGV4IGJmZDNjMjIuLmEyMWY1ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYwpAQCAtMTAwMyw3ICsxMDAzLDcgQEAKIAkJdWRlbGF5KDEwKTsKIAl9CiAJaWYgKGkgPj0gSVhHQkVfRkRJUkNNRF9DTURfUE9MTCkgewotCQlod19kYmcoaHcgLCJGbG93IERpcmVjdG9yIHByZXZpb3VzIGNvbW1hbmQgaXNuJ3QgY29tcGxldGUsICIKKwkJaHdfZGJnKGh3LCAiRmxvdyBEaXJlY3RvciBwcmV2aW91cyBjb21tYW5kIGlzbid0IGNvbXBsZXRlLCAiCiAJCSAgICAgICAiYWJvcnRpbmcgdGFibGUgcmUtaW5pdGlhbGl6YXRpb24uXG4iKTsKIAkJcmV0dXJuIElYR0JFX0VSUl9GRElSX1JFSU5JVF9GQUlMRUQ7CiAJfQpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAogCS8qCiAJICogVGhlIGRlZmF1bHRzIGluIHRoZSBIVyBmb3IgUlggUEIgMS03IGFyZSBub3QgemVybyBhbmQgc28gc2hvdWxkIGJlCi0JICogaW50aWFsaXplZCB0byB6ZXJvIGZvciBub24gRENCIG1vZGUgb3RoZXJ3aXNlIGFjdHVhbCB0b3RhbCBSWCBQQgorCSAqIGluaXRpYWxpemVkIHRvIHplcm8gZm9yIG5vbiBEQ0IgbW9kZSBvdGhlcndpc2UgYWN0dWFsIHRvdGFsIFJYIFBCCiAJICogd291bGQgYmUgYmlnZ2VyIHRoYW4gcHJvZ3JhbW1lZCBhbmQgZmlsdGVyIHNwYWNlIHdvdWxkIHJ1biBpbnRvCiAJICogdGhlIFBCIDAgcmVnaW9uLgogCSAqLwpAQCAtMTExMywxMyArMTExMywxMCBAQAogCS8qIE1vdmUgdGhlIGZsZXhpYmxlIGJ5dGVzIHRvIHVzZSB0aGUgZXRoZXJ0eXBlIC0gc2hpZnQgNiB3b3JkcyAqLwogCWZkaXJjdHJsIHw9ICgweDYgPDwgSVhHQkVfRkRJUkNUUkxfRkxFWF9TSElGVCk7CiAKLQlmZGlyY3RybCB8PSBJWEdCRV9GRElSQ1RSTF9SRVBPUlRfU1RBVFVTOwogCiAJLyogUHJpbWUgdGhlIGtleXMgZm9yIGhhc2hpbmcgKi8KLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJIS0VZLAotCSAgICAgICAgICAgICAgICBodG9ubChJWEdCRV9BVFJfQlVDS0VUX0hBU0hfS0VZKSk7Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GRElSU0tFWSwKLQkgICAgICAgICAgICAgICAgaHRvbmwoSVhHQkVfQVRSX1NJR05BVFVSRV9IQVNIX0tFWSkpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUkhLRVksIElYR0JFX0FUUl9CVUNLRVRfSEFTSF9LRVkpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlNLRVksIElYR0JFX0FUUl9TSUdOQVRVUkVfSEFTSF9LRVkpOwogCiAJLyoKIAkgKiBQb2xsIGluaXQtZG9uZSBhZnRlciB3ZSB3cml0ZSB0aGUgcmVnaXN0ZXIuICBFc3RpbWF0ZWQgdGltZXM6CkBAIC0xMTcwLDcgKzExNjcsNyBAQAogCiAJLyoKIAkgKiBUaGUgZGVmYXVsdHMgaW4gdGhlIEhXIGZvciBSWCBQQiAxLTcgYXJlIG5vdCB6ZXJvIGFuZCBzbyBzaG91bGQgYmUKLQkgKiBpbnRpYWxpemVkIHRvIHplcm8gZm9yIG5vbiBEQ0IgbW9kZSBvdGhlcndpc2UgYWN0dWFsIHRvdGFsIFJYIFBCCisJICogaW5pdGlhbGl6ZWQgdG8gemVybyBmb3Igbm9uIERDQiBtb2RlIG90aGVyd2lzZSBhY3R1YWwgdG90YWwgUlggUEIKIAkgKiB3b3VsZCBiZSBiaWdnZXIgdGhhbiBwcm9ncmFtbWVkIGFuZCBmaWx0ZXIgc3BhY2Ugd291bGQgcnVuIGludG8KIAkgKiB0aGUgUEIgMCByZWdpb24uCiAJICovCkBAIC0xMjA5LDEwICsxMjA2LDggQEAKIAlmZGlyY3RybCB8PSAoMHg2IDw8IElYR0JFX0ZESVJDVFJMX0ZMRVhfU0hJRlQpOwogCiAJLyogUHJpbWUgdGhlIGtleXMgZm9yIGhhc2hpbmcgKi8KLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJIS0VZLAotCSAgICAgICAgICAgICAgICBodG9ubChJWEdCRV9BVFJfQlVDS0VUX0hBU0hfS0VZKSk7Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GRElSU0tFWSwKLQkgICAgICAgICAgICAgICAgaHRvbmwoSVhHQkVfQVRSX1NJR05BVFVSRV9IQVNIX0tFWSkpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUkhLRVksIElYR0JFX0FUUl9CVUNLRVRfSEFTSF9LRVkpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlNLRVksIElYR0JFX0FUUl9TSUdOQVRVUkVfSEFTSF9LRVkpOwogCiAJLyoKIAkgKiBQb2xsIGluaXQtZG9uZSBhZnRlciB3ZSB3cml0ZSB0aGUgcmVnaXN0ZXIuICBFc3RpbWF0ZWQgdGltZXM6CkBAIC0xMjUxLDggKzEyNDYsOCBAQAogICogIEBzdHJlYW06IGlucHV0IGJpdHN0cmVhbSB0byBjb21wdXRlIHRoZSBoYXNoIG9uCiAgKiAgQGtleTogMzItYml0IGhhc2gga2V5CiAgKiovCi1zdGF0aWMgdTE2IGl4Z2JlX2F0cl9jb21wdXRlX2hhc2hfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqYXRyX2lucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBrZXkpCitzdGF0aWMgdTMyIGl4Z2JlX2F0cl9jb21wdXRlX2hhc2hfODI1OTkodW5pb24gaXhnYmVfYXRyX2lucHV0ICphdHJfaW5wdXQsCisJCQkJCXUzMiBrZXkpCiB7CiAJLyoKIAkgKiBUaGUgYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6CkBAIC0xMjcyLDQxMCArMTI2NywyNTAgQEAKIAkgKiAgICBUbyBzaW1wbGlmeSBmb3IgcHJvZ3JhbW1pbmcsIHRoZSBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQKIAkgKiAgICBpbiBzb2Z0d2FyZSB0aGlzIHdheToKIAkgKgotCSAqICAgIEtleVszMTowXSwgU3RyZWFtWzMzNTowXQorCSAqICAgIGtleVszMTowXSwgaGlfaGFzaF9kd29yZFszMTowXSwgbG9faGFzaF9kd29yZFszMTowXSwgaGFzaFsxNTowXQogCSAqCi0JICogICAgdG1wX2tleVsxMSAqIDMyIC0gMTowXSA9IDExe0tleVszMTowXSA9IGtleSBjb25jYXRlbmF0ZWQgMTEgdGltZXMKLQkgKiAgICBpbnRfa2V5WzM1MDowXSA9IHRtcF9rZXlbMzUxOjFdCi0JICogICAgaW50X3N0cmVhbVszNjU6MF0gPSBTdHJlYW1bMTQ6MF0gfCBTdHJlYW1bMzM1OjBdIHwgU3RyZWFtWzMzNTozMjFdCisJICogICAgZm9yIChpID0gMDsgaSA8IDM1MjsgaSs9MzIpCisJICogICAgICAgIGhpX2hhc2hfZHdvcmRbMzE6MF0gXj0gU3RyZWFtWyhpKzMxKTppXTsKIAkgKgotCSAqICAgIGhhc2hbMTU6MF0gPSAwOwotCSAqICAgIGZvciAoaSA9IDA7IGkgPCAzNTE7IGkrKykgewotCSAqICAgICAgICBpZiAoaW50X2tleVtpXSkKLQkgKiAgICAgICAgICAgIGhhc2ggXj0gaW50X3N0cmVhbVsoaSArIDE1KTppXTsKKwkgKiAgICBsb19oYXNoX2R3b3JkWzE1OjBdICBePSBTdHJlYW1bMTU6MF07CisJICogICAgbG9faGFzaF9kd29yZFsxNTowXSAgXj0gaGlfaGFzaF9kd29yZFszMToxNl07CisJICogICAgbG9faGFzaF9kd29yZFszMToxNl0gXj0gaGlfaGFzaF9kd29yZFsxNTowXTsKKwkgKgorCSAqICAgIGhpX2hhc2hfZHdvcmRbMzE6MF0gIF49IFN0cmVhbVszNTE6MzIwXTsKKwkgKgorCSAqICAgIGlmKGtleVswXSkKKwkgKiAgICAgICAgaGFzaFsxNTowXSBePSBTdHJlYW1bMTU6MF07CisJICoKKwkgKiAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCSAqICAgICAgICBpZiAoa2V5W2ldKQorCSAqICAgICAgICAgICAgaGFzaFsxNTowXSBePSBsb19oYXNoX2R3b3JkWyhpKzE1KTppXTsKKwkgKiAgICAgICAgaWYgKGtleVtpICsgMTZdKQorCSAqICAgICAgICAgICAgaGFzaFsxNTowXSBePSBoaV9oYXNoX2R3b3JkWyhpKzE1KTppXTsKIAkgKiAgICB9CisJICoKIAkgKi8KKwlfX2JlMzIgY29tbW9uX2hhc2hfZHdvcmQgPSAwOworCXUzMiBoaV9oYXNoX2R3b3JkLCBsb19oYXNoX2R3b3JkLCBmbG93X3ZtX3ZsYW47CisJdTMyIGhhc2hfcmVzdWx0ID0gMDsKKwl1OCBpOwogCi0JdW5pb24gewotCQl1NjQgICAgZmlsbFs2XTsKLQkJdTMyICAgIGtleVsxMV07Ci0JCXU4ICAgICBrZXlfc3RyZWFtWzQ0XTsKLQl9IHRtcF9rZXk7CisJLyogcmVjb3JkIHRoZSBmbG93X3ZtX3ZsYW4gYml0cyBhcyB0aGV5IGFyZSBhIGtleSBwYXJ0IHRvIHRoZSBoYXNoICovCisJZmxvd192bV92bGFuID0gbnRvaGwoYXRyX2lucHV0LT5kd29yZF9zdHJlYW1bMF0pOwogCi0JdTggICAqc3RyZWFtID0gKHU4ICopYXRyX2lucHV0OwotCXU4ICAgaW50X2tleVs0NF07ICAgICAgLyogdXBwZXItbW9zdCBiaXQgdW51c2VkICovCi0JdTggICBoYXNoX3N0cls0Nl07ICAgICAvKiB1cHBlci1tb3N0IDIgYml0cyB1bnVzZWQgKi8KLQl1MTYgIGhhc2hfcmVzdWx0ID0gMDsKLQlpbnQgIGksIGosIGssIGg7CisJLyogZ2VuZXJhdGUgY29tbW9uIGhhc2ggZHdvcmQgKi8KKwlmb3IgKGkgPSAxMDsgaTsgaSAtPSAyKQorCQljb21tb25faGFzaF9kd29yZCBePSBhdHJfaW5wdXQtPmR3b3JkX3N0cmVhbVtpXSBeCisJCQkJICAgICBhdHJfaW5wdXQtPmR3b3JkX3N0cmVhbVtpIC0gMV07CisKKwloaV9oYXNoX2R3b3JkID0gbnRvaGwoY29tbW9uX2hhc2hfZHdvcmQpOworCisJLyogbG93IGR3b3JkIGlzIHdvcmQgc3dhcHBlZCB2ZXJzaW9uIG9mIGNvbW1vbiAqLworCWxvX2hhc2hfZHdvcmQgPSAoaGlfaGFzaF9kd29yZCA+PiAxNikgfCAoaGlfaGFzaF9kd29yZCA8PCAxNik7CisKKwkvKiBhcHBseSBmbG93IElEL1ZNIHBvb2wvVkxBTiBJRCBiaXRzIHRvIGhhc2ggd29yZHMgKi8KKwloaV9oYXNoX2R3b3JkIF49IGZsb3dfdm1fdmxhbiBeIChmbG93X3ZtX3ZsYW4gPj4gMTYpOworCisJLyogUHJvY2VzcyBiaXRzIDAgYW5kIDE2ICovCisJaWYgKGtleSAmIDB4MDAwMSkgaGFzaF9yZXN1bHQgXj0gbG9faGFzaF9kd29yZDsKKwlpZiAoa2V5ICYgMHgwMDAxMDAwMCkgaGFzaF9yZXN1bHQgXj0gaGlfaGFzaF9kd29yZDsKIAogCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgZmlsbCBtZW1iZXIgdG8gcHJldmVudCB3YXJuaW5ncwotCSAqIG9uIHNvbWUgY29tcGlsZXJzCisJICogYXBwbHkgZmxvdyBJRC9WTSBwb29sL1ZMQU4gSUQgYml0cyB0byBsbyBoYXNoIGR3b3JkLCB3ZSBoYWQgdG8KKwkgKiBkZWxheSB0aGlzIGJlY2F1c2UgYml0IDAgb2YgdGhlIHN0cmVhbSBzaG91bGQgbm90IGJlIHByb2Nlc3NlZAorCSAqIHNvIHdlIGRvIG5vdCBhZGQgdGhlIHZsYW4gdW50aWwgYWZ0ZXIgYml0IDAgd2FzIHByb2Nlc3NlZAogCSAqLwotCSB0bXBfa2V5LmZpbGxbMF0gPSAwOworCWxvX2hhc2hfZHdvcmQgXj0gZmxvd192bV92bGFuIF4gKGZsb3dfdm1fdmxhbiA8PCAxNik7CiAKLQkvKiBGaXJzdCBsb2FkIHRoZSB0ZW1wb3Jhcnkga2V5IHN0cmVhbSAqLwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLQkJdTY0IGZpbGxrZXkgPSAoKHU2NClrZXkgPDwgMzIpIHwga2V5OwotCQl0bXBfa2V5LmZpbGxbaV0gPSBmaWxsa2V5OworCisJLyogcHJvY2VzcyB0aGUgcmVtYWluaW5nIDMwIGJpdHMgaW4gdGhlIGtleSAyIGJpdHMgYXQgYSB0aW1lICovCisJZm9yIChpID0gMTU7IGk7IGktLSApIHsKKwkJaWYgKGtleSAmICgweDAwMDEgPDwgaSkpIGhhc2hfcmVzdWx0IF49IGxvX2hhc2hfZHdvcmQgPj4gaTsKKwkJaWYgKGtleSAmICgweDAwMDEwMDAwIDw8IGkpKSBoYXNoX3Jlc3VsdCBePSBoaV9oYXNoX2R3b3JkID4+IGk7CiAJfQogCi0JLyoKLQkgKiBTZXQgdGhlIGludGVyaW0ga2V5IGZvciB0aGUgaGFzaGluZy4gIEJpdCAzNTIgaXMgdW51c2VkLCBzbyB3ZSBtdXN0Ci0JICogc2hpZnQgYW5kIGNvbXBlbnNhdGUgd2hlbiBidWlsZGluZyB0aGUga2V5LgotCSAqLwotCi0JaW50X2tleVswXSA9IHRtcF9rZXkua2V5X3N0cmVhbVswXSA+PiAxOwotCWZvciAoaSA9IDEsIGogPSAwOyBpIDwgNDQ7IGkrKykgewotCQl1bnNpZ25lZCBpbnQgdGhpc19rZXkgPSB0bXBfa2V5LmtleV9zdHJlYW1bal0gPDwgNzsKLQkJaisrOwotCQlpbnRfa2V5W2ldID0gKHU4KSh0aGlzX2tleSB8ICh0bXBfa2V5LmtleV9zdHJlYW1bal0gPj4gMSkpOwotCX0KLQotCS8qCi0JICogU2V0IHRoZSBpbnRlcmltIGJpdCBzdHJpbmcgZm9yIHRoZSBoYXNoaW5nLiAgQml0cyAzNjggYW5kIDM2NyBhcmUKLQkgKiB1bnVzZWQsIHNvIHNoaWZ0IGFuZCBjb21wZW5zYXRlIHdoZW4gYnVpbGRpbmcgdGhlIHN0cmluZy4KLQkgKi8KLQloYXNoX3N0clswXSA9IChzdHJlYW1bNDBdICYgMHg3ZikgPj4gMTsKLQlmb3IgKGkgPSAxLCBqID0gNDA7IGkgPCA0NjsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCB0aGlzX3N0ciA9IHN0cmVhbVtqXSA8PCA3OwotCQlqKys7Ci0JCWlmIChqID4gNDEpCi0JCQlqID0gMDsKLQkJaGFzaF9zdHJbaV0gPSAodTgpKHRoaXNfc3RyIHwgKHN0cmVhbVtqXSA+PiAxKSk7Ci0JfQotCi0JLyoKLQkgKiBOb3cgY29tcHV0ZSB0aGUgaGFzaC4gIGkgaXMgdGhlIGluZGV4IGludG8gaGFzaF9zdHIsIGogaXMgaW50byBvdXIKLQkgKiBrZXkgc3RyZWFtLCBrIGlzIGNvdW50aW5nIHRoZSBudW1iZXIgb2YgYml0cywgYW5kIGggaW50ZXJhdGVzIHdpdGhpbgotCSAqIGVhY2ggYnl0ZS4KLQkgKi8KLQlmb3IgKGkgPSA0NSwgaiA9IDQzLCBrID0gMDsgayA8IDM1MSAmJiBpID49IDIgJiYgaiA+PSAwOyBpLS0sIGotLSkgewotCQlmb3IgKGggPSAwOyBoIDwgOCAmJiBrIDwgMzUxOyBoKyssIGsrKykgewotCQkJaWYgKGludF9rZXlbal0gJiAoMSA8PCBoKSkgewotCQkJCS8qCi0JCQkJICogS2V5IGJpdCBpcyBzZXQsIFhPUiBpbiB0aGUgY3VycmVudCAxNi1iaXQKLQkJCQkgKiBzdHJpbmcuICBFeGFtcGxlIG9mIHByb2Nlc3Npbmc6Ci0JCQkJICogICAgaCA9IDAsCi0JCQkJICogICAgICB0bXAgPSAoaGFzaF9zdHJbaSAtIDJdICYgMCA8PCAxNikgfAotCQkJCSAqICAgICAgICAgICAgKGhhc2hfc3RyW2kgLSAxXSAmIDB4ZmYgPDwgOCkgfAotCQkJCSAqICAgICAgICAgICAgKGhhc2hfc3RyW2ldICYgMHhmZiA+PiAwKQotCQkJCSAqICAgICAgU28gdG1wID0gaGFzaF9zdHJbMTUgKyBrOmtdLCBzaW5jZSB0aGUKLQkJCQkgKiAgICAgIGkgKyAyIGNsYXVzZSByb2xscyBvZmYgdGhlIDE2LWJpdCB2YWx1ZQotCQkJCSAqICAgIGggPSA3LAotCQkJCSAqICAgICAgdG1wID0gKGhhc2hfc3RyW2kgLSAyXSAmIDB4N2YgPDwgOSkgfAotCQkJCSAqICAgICAgICAgICAgKGhhc2hfc3RyW2kgLSAxXSAmIDB4ZmYgPDwgMSkgfAotCQkJCSAqICAgICAgICAgICAgKGhhc2hfc3RyW2ldICYgMHg4MCA+PiA3KQotCQkJCSAqLwotCQkJCWludCB0bXAgPSAoaGFzaF9zdHJbaV0gPj4gaCk7Ci0JCQkJdG1wIHw9IChoYXNoX3N0cltpIC0gMV0gPDwgKDggLSBoKSk7Ci0JCQkJdG1wIHw9IChpbnQpKGhhc2hfc3RyW2kgLSAyXSAmICgoMSA8PCBoKSAtIDEpKQotCQkJCSAgICAgICAgICAgICA8PCAoMTYgLSBoKTsKLQkJCQloYXNoX3Jlc3VsdCBePSAodTE2KXRtcDsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiBoYXNoX3Jlc3VsdDsKKwlyZXR1cm4gaGFzaF9yZXN1bHQgJiBJWEdCRV9BVFJfSEFTSF9NQVNLOwogfQogCi0vKioKLSAqICBpeGdiZV9hdHJfc2V0X3ZsYW5faWRfODI1OTkgLSBTZXRzIHRoZSBWTEFOIGlkIGluIHRoZSBBVFIgaW5wdXQgc3RyZWFtCi0gKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gbW9kaWZ5Ci0gKiAgQHZsYW46IHRoZSBWTEFOIGlkIHRvIGxvYWQKLSAqKi8KLXMzMiBpeGdiZV9hdHJfc2V0X3ZsYW5faWRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsIHUxNiB2bGFuKQotewotCWlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfVkxBTl9PRkZTRVQgKyAxXSA9IHZsYW4gPj4gODsKLQlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1ZMQU5fT0ZGU0VUXSA9IHZsYW4gJiAweGZmOwotCi0JcmV0dXJuIDA7Ci19CisvKgorICogVGhlc2UgZGVmaW5lcyBhbGxvdyB1cyB0byBxdWlja2x5IGdlbmVyYXRlIGFsbCBvZiB0aGUgbmVjZXNzYXJ5IGluc3RydWN0aW9ucworICogaW4gdGhlIGZ1bmN0aW9uIGJlbG93IGJ5IHNpbXBseSBjYWxsaW5nIG91dCBJWEdCRV9DT01QVVRFX1NJR19IQVNIX0lURVJBVElPTgorICogZm9yIHZhbHVlcyAwIHRocm91Z2ggMTUKKyAqLworI2RlZmluZSBJWEdCRV9BVFJfQ09NTU9OX0hBU0hfS0VZIFwKKwkJKElYR0JFX0FUUl9CVUNLRVRfSEFTSF9LRVkgJiBJWEdCRV9BVFJfU0lHTkFUVVJFX0hBU0hfS0VZKQorI2RlZmluZSBJWEdCRV9DT01QVVRFX1NJR19IQVNIX0lURVJBVElPTihfbikgXAorZG8geyBcCisJdTMyIG4gPSAoX24pOyBcCisJaWYgKElYR0JFX0FUUl9DT01NT05fSEFTSF9LRVkgJiAoMHgwMSA8PCBuKSkgXAorCQljb21tb25faGFzaCBePSBsb19oYXNoX2R3b3JkID4+IG47IFwKKwllbHNlIGlmIChJWEdCRV9BVFJfQlVDS0VUX0hBU0hfS0VZICYgKDB4MDEgPDwgbikpIFwKKwkJYnVja2V0X2hhc2ggXj0gbG9faGFzaF9kd29yZCA+PiBuOyBcCisJZWxzZSBpZiAoSVhHQkVfQVRSX1NJR05BVFVSRV9IQVNIX0tFWSAmICgweDAxIDw8IG4pKSBcCisJCXNpZ19oYXNoIF49IGxvX2hhc2hfZHdvcmQgPDwgKDE2IC0gbik7IFwKKwlpZiAoSVhHQkVfQVRSX0NPTU1PTl9IQVNIX0tFWSAmICgweDAxIDw8IChuICsgMTYpKSkgXAorCQljb21tb25faGFzaCBePSBoaV9oYXNoX2R3b3JkID4+IG47IFwKKwllbHNlIGlmIChJWEdCRV9BVFJfQlVDS0VUX0hBU0hfS0VZICYgKDB4MDEgPDwgKG4gKyAxNikpKSBcCisJCWJ1Y2tldF9oYXNoIF49IGhpX2hhc2hfZHdvcmQgPj4gbjsgXAorCWVsc2UgaWYgKElYR0JFX0FUUl9TSUdOQVRVUkVfSEFTSF9LRVkgJiAoMHgwMSA8PCAobiArIDE2KSkpIFwKKwkJc2lnX2hhc2ggXj0gaGlfaGFzaF9kd29yZCA8PCAoMTYgLSBuKTsgXAorfSB3aGlsZSAoMCk7CiAKIC8qKgotICogIGl4Z2JlX2F0cl9zZXRfc3JjX2lwdjRfODI1OTkgLSBTZXRzIHRoZSBzb3VyY2UgSVB2NCBhZGRyZXNzCi0gKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gbW9kaWZ5Ci0gKiAgQHNyY19hZGRyOiB0aGUgSVAgYWRkcmVzcyB0byBsb2FkCi0gKiovCi1zMzIgaXhnYmVfYXRyX3NldF9zcmNfaXB2NF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwgdTMyIHNyY19hZGRyKQotewotCWlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX0lQVjRfT0ZGU0VUICsgM10gPSBzcmNfYWRkciA+PiAyNDsKLQlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19JUFY0X09GRlNFVCArIDJdID0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcmNfYWRkciA+PiAxNikgJiAweGZmOwotCWlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX0lQVjRfT0ZGU0VUICsgMV0gPQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcmNfYWRkciA+PiA4KSAmIDB4ZmY7Ci0JaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNF9PRkZTRVRdID0gc3JjX2FkZHIgJiAweGZmOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogIGl4Z2JlX2F0cl9zZXRfZHN0X2lwdjRfODI1OTkgLSBTZXRzIHRoZSBkZXN0aW5hdGlvbiBJUHY0IGFkZHJlc3MKLSAqICBAaW5wdXQ6IGlucHV0IHN0cmVhbSB0byBtb2RpZnkKLSAqICBAZHN0X2FkZHI6IHRoZSBJUCBhZGRyZXNzIHRvIGxvYWQKLSAqKi8KLXMzMiBpeGdiZV9hdHJfc2V0X2RzdF9pcHY0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LCB1MzIgZHN0X2FkZHIpCi17Ci0JaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9EU1RfSVBWNF9PRkZTRVQgKyAzXSA9IGRzdF9hZGRyID4+IDI0OwotCWlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfRFNUX0lQVjRfT0ZGU0VUICsgMl0gPQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRzdF9hZGRyID4+IDE2KSAmIDB4ZmY7Ci0JaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9EU1RfSVBWNF9PRkZTRVQgKyAxXSA9Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRzdF9hZGRyID4+IDgpICYgMHhmZjsKLQlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0RTVF9JUFY0X09GRlNFVF0gPSBkc3RfYWRkciAmIDB4ZmY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAgaXhnYmVfYXRyX3NldF9zcmNfcG9ydF84MjU5OSAtIFNldHMgdGhlIHNvdXJjZSBwb3J0Ci0gKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gbW9kaWZ5Ci0gKiAgQHNyY19wb3J0OiB0aGUgc291cmNlIHBvcnQgdG8gbG9hZAotICoqLwotczMyIGl4Z2JlX2F0cl9zZXRfc3JjX3BvcnRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsIHUxNiBzcmNfcG9ydCkKLXsKLQlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19QT1JUX09GRlNFVCArIDFdID0gc3JjX3BvcnQgPj4gODsKLQlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19QT1JUX09GRlNFVF0gPSBzcmNfcG9ydCAmIDB4ZmY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAgaXhnYmVfYXRyX3NldF9kc3RfcG9ydF84MjU5OSAtIFNldHMgdGhlIGRlc3RpbmF0aW9uIHBvcnQKLSAqICBAaW5wdXQ6IGlucHV0IHN0cmVhbSB0byBtb2RpZnkKLSAqICBAZHN0X3BvcnQ6IHRoZSBkZXN0aW5hdGlvbiBwb3J0IHRvIGxvYWQKLSAqKi8KLXMzMiBpeGdiZV9hdHJfc2V0X2RzdF9wb3J0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LCB1MTYgZHN0X3BvcnQpCi17Ci0JaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9EU1RfUE9SVF9PRkZTRVQgKyAxXSA9IGRzdF9wb3J0ID4+IDg7Ci0JaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9EU1RfUE9SVF9PRkZTRVRdID0gZHN0X3BvcnQgJiAweGZmOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogIGl4Z2JlX2F0cl9zZXRfZmxleF9ieXRlXzgyNTk5IC0gU2V0cyB0aGUgZmxleGlibGUgYnl0ZXMKLSAqICBAaW5wdXQ6IGlucHV0IHN0cmVhbSB0byBtb2RpZnkKLSAqICBAZmxleF9ieXRlczogdGhlIGZsZXhpYmxlIGJ5dGVzIHRvIGxvYWQKLSAqKi8KLXMzMiBpeGdiZV9hdHJfc2V0X2ZsZXhfYnl0ZV84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwgdTE2IGZsZXhfYnl0ZSkKLXsKLQlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0ZMRVhfQllURV9PRkZTRVQgKyAxXSA9IGZsZXhfYnl0ZSA+PiA4OwotCWlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfRkxFWF9CWVRFX09GRlNFVF0gPSBmbGV4X2J5dGUgJiAweGZmOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogIGl4Z2JlX2F0cl9zZXRfbDR0eXBlXzgyNTk5IC0gU2V0cyB0aGUgbGF5ZXIgNCBwYWNrZXQgdHlwZQotICogIEBpbnB1dDogaW5wdXQgc3RyZWFtIHRvIG1vZGlmeQotICogIEBsNHR5cGU6IHRoZSBsYXllciA0IHR5cGUgdmFsdWUgdG8gbG9hZAotICoqLwotczMyIGl4Z2JlX2F0cl9zZXRfbDR0eXBlXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LCB1OCBsNHR5cGUpCi17Ci0JaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9MNFRZUEVfT0ZGU0VUXSA9IGw0dHlwZTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqICBpeGdiZV9hdHJfZ2V0X3ZsYW5faWRfODI1OTkgLSBHZXRzIHRoZSBWTEFOIGlkIGZyb20gdGhlIEFUUiBpbnB1dCBzdHJlYW0KLSAqICBAaW5wdXQ6IGlucHV0IHN0cmVhbSB0byBzZWFyY2gKLSAqICBAdmxhbjogdGhlIFZMQU4gaWQgdG8gbG9hZAotICoqLwotc3RhdGljIHMzMiBpeGdiZV9hdHJfZ2V0X3ZsYW5faWRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsIHUxNiAqdmxhbikKLXsKLQkqdmxhbiA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfVkxBTl9PRkZTRVRdOwotCSp2bGFuIHw9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfVkxBTl9PRkZTRVQgKyAxXSA8PCA4OwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogIGl4Z2JlX2F0cl9nZXRfc3JjX2lwdjRfODI1OTkgLSBHZXRzIHRoZSBzb3VyY2UgSVB2NCBhZGRyZXNzCi0gKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gc2VhcmNoCi0gKiAgQHNyY19hZGRyOiB0aGUgSVAgYWRkcmVzcyB0byBsb2FkCi0gKiovCi1zdGF0aWMgczMyIGl4Z2JlX2F0cl9nZXRfc3JjX2lwdjRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICpzcmNfYWRkcikKLXsKLQkqc3JjX2FkZHIgPSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19JUFY0X09GRlNFVF07Ci0JKnNyY19hZGRyIHw9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX0lQVjRfT0ZGU0VUICsgMV0gPDwgODsKLQkqc3JjX2FkZHIgfD0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNF9PRkZTRVQgKyAyXSA8PCAxNjsKLQkqc3JjX2FkZHIgfD0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNF9PRkZTRVQgKyAzXSA8PCAyNDsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqICBpeGdiZV9hdHJfZ2V0X2RzdF9pcHY0XzgyNTk5IC0gR2V0cyB0aGUgZGVzdGluYXRpb24gSVB2NCBhZGRyZXNzCi0gKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gc2VhcmNoCi0gKiAgQGRzdF9hZGRyOiB0aGUgSVAgYWRkcmVzcyB0byBsb2FkCi0gKiovCi1zdGF0aWMgczMyIGl4Z2JlX2F0cl9nZXRfZHN0X2lwdjRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICpkc3RfYWRkcikKLXsKLQkqZHN0X2FkZHIgPSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0RTVF9JUFY0X09GRlNFVF07Ci0JKmRzdF9hZGRyIHw9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfRFNUX0lQVjRfT0ZGU0VUICsgMV0gPDwgODsKLQkqZHN0X2FkZHIgfD0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9EU1RfSVBWNF9PRkZTRVQgKyAyXSA8PCAxNjsKLQkqZHN0X2FkZHIgfD0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9EU1RfSVBWNF9PRkZTRVQgKyAzXSA8PCAyNDsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqICBpeGdiZV9hdHJfZ2V0X3NyY19pcHY2XzgyNTk5IC0gR2V0cyB0aGUgc291cmNlIElQdjYgYWRkcmVzcwotICogIEBpbnB1dDogaW5wdXQgc3RyZWFtIHRvIHNlYXJjaAotICogIEBzcmNfYWRkcl8xOiB0aGUgZmlyc3QgNCBieXRlcyBvZiB0aGUgSVAgYWRkcmVzcyB0byBsb2FkCi0gKiAgQHNyY19hZGRyXzI6IHRoZSBzZWNvbmQgNCBieXRlcyBvZiB0aGUgSVAgYWRkcmVzcyB0byBsb2FkCi0gKiAgQHNyY19hZGRyXzM6IHRoZSB0aGlyZCA0IGJ5dGVzIG9mIHRoZSBJUCBhZGRyZXNzIHRvIGxvYWQKLSAqICBAc3JjX2FkZHJfNDogdGhlIGZvdXJ0aCA0IGJ5dGVzIG9mIHRoZSBJUCBhZGRyZXNzIHRvIGxvYWQKLSAqKi8KLXN0YXRpYyBzMzIgaXhnYmVfYXRyX2dldF9zcmNfaXB2Nl84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKnNyY19hZGRyXzEsIHUzMiAqc3JjX2FkZHJfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKnNyY19hZGRyXzMsIHUzMiAqc3JjX2FkZHJfNCkKLXsKLQkqc3JjX2FkZHJfMSA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX0lQVjZfT0ZGU0VUICsgMTJdOwotCSpzcmNfYWRkcl8xID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNl9PRkZTRVQgKyAxM10gPDwgODsKLQkqc3JjX2FkZHJfMSA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX0lQVjZfT0ZGU0VUICsgMTRdIDw8IDE2OwotCSpzcmNfYWRkcl8xID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNl9PRkZTRVQgKyAxNV0gPDwgMjQ7Ci0KLQkqc3JjX2FkZHJfMiA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX0lQVjZfT0ZGU0VUICsgOF07Ci0JKnNyY19hZGRyXzIgPSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19JUFY2X09GRlNFVCArIDldIDw8IDg7Ci0JKnNyY19hZGRyXzIgPSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19JUFY2X09GRlNFVCArIDEwXSA8PCAxNjsKLQkqc3JjX2FkZHJfMiA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX0lQVjZfT0ZGU0VUICsgMTFdIDw8IDI0OwotCi0JKnNyY19hZGRyXzMgPSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19JUFY2X09GRlNFVCArIDRdOwotCSpzcmNfYWRkcl8zID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNl9PRkZTRVQgKyA1XSA8PCA4OwotCSpzcmNfYWRkcl8zID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNl9PRkZTRVQgKyA2XSA8PCAxNjsKLQkqc3JjX2FkZHJfMyA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX0lQVjZfT0ZGU0VUICsgN10gPDwgMjQ7Ci0KLQkqc3JjX2FkZHJfNCA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX0lQVjZfT0ZGU0VUXTsKLQkqc3JjX2FkZHJfNCA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX0lQVjZfT0ZGU0VUICsgMV0gPDwgODsKLQkqc3JjX2FkZHJfNCA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX0lQVjZfT0ZGU0VUICsgMl0gPDwgMTY7Ci0JKnNyY19hZGRyXzQgPSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19JUFY2X09GRlNFVCArIDNdIDw8IDI0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogIGl4Z2JlX2F0cl9nZXRfc3JjX3BvcnRfODI1OTkgLSBHZXRzIHRoZSBzb3VyY2UgcG9ydAotICogIEBpbnB1dDogaW5wdXQgc3RyZWFtIHRvIG1vZGlmeQotICogIEBzcmNfcG9ydDogdGhlIHNvdXJjZSBwb3J0IHRvIGxvYWQKKyAqICBpeGdiZV9hdHJfY29tcHV0ZV9zaWdfaGFzaF84MjU5OSAtIENvbXB1dGUgdGhlIHNpZ25hdHVyZSBoYXNoCisgKiAgQHN0cmVhbTogaW5wdXQgYml0c3RyZWFtIHRvIGNvbXB1dGUgdGhlIGhhc2ggb24KICAqCi0gKiAgRXZlbiB0aG91Z2ggdGhlIGlucHV0IGlzIGdpdmVuIGluIGJpZy1lbmRpYW4sIHRoZSBGRElSUE9SVCByZWdpc3RlcnMKLSAqICBleHBlY3QgdGhlIHBvcnRzIHRvIGJlIHByb2dyYW1tZWQgaW4gbGl0dGxlLWVuZGlhbi4gIEhlbmNlIHRoZSBuZWVkIHRvIHN3YXAKLSAqICBlbmRpYW5uZXNzIHdoZW4gcmV0cmlldmluZyB0aGUgZGF0YS4gIFRoaXMgY2FuIGJlIGNvbmZ1c2luZyBzaW5jZSB0aGUKLSAqICBpbnRlcm5hbCBoYXNoIGVuZ2luZSBleHBlY3RzIGl0IHRvIGJlIGJpZy1lbmRpYW4uCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBmdW5jdGlvbiBhYm92ZSBidXQgY29udGFpbnMKKyAqICBzZXZlcmFsIG9wdG9taXphdGlvbnMgc3VjaCBhcyB1bndpbmRpbmcgYWxsIG9mIHRoZSBsb29wcywgbGV0dGluZyB0aGUKKyAqICBjb21waWxlciB3b3JrIG91dCBhbGwgb2YgdGhlIGNvbmRpdGlvbmFsIGlmcyBzaW5jZSB0aGUga2V5cyBhcmUgc3RhdGljCisgKiAgZGVmaW5lcywgYW5kIGNvbXB1dGluZyB0d28ga2V5cyBhdCBvbmNlIHNpbmNlIHRoZSBoYXNoZWQgZHdvcmQgc3RyZWFtCisgKiAgd2lsbCBiZSB0aGUgc2FtZSBmb3IgYm90aCBrZXlzLgogICoqLwotc3RhdGljIHMzMiBpeGdiZV9hdHJfZ2V0X3NyY19wb3J0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqc3JjX3BvcnQpCitzdGF0aWMgdTMyIGl4Z2JlX2F0cl9jb21wdXRlX3NpZ19oYXNoXzgyNTk5KHVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIGlucHV0LAorCQkJCQkgICAgdW5pb24gaXhnYmVfYXRyX2hhc2hfZHdvcmQgY29tbW9uKQogewotCSpzcmNfcG9ydCA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX1BPUlRfT0ZGU0VUXSA8PCA4OwotCSpzcmNfcG9ydCB8PSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19QT1JUX09GRlNFVCArIDFdOworCXUzMiBoaV9oYXNoX2R3b3JkLCBsb19oYXNoX2R3b3JkLCBmbG93X3ZtX3ZsYW47CisJdTMyIHNpZ19oYXNoID0gMCwgYnVja2V0X2hhc2ggPSAwLCBjb21tb25faGFzaCA9IDA7CiAKLQlyZXR1cm4gMDsKLX0KKwkvKiByZWNvcmQgdGhlIGZsb3dfdm1fdmxhbiBiaXRzIGFzIHRoZXkgYXJlIGEga2V5IHBhcnQgdG8gdGhlIGhhc2ggKi8KKwlmbG93X3ZtX3ZsYW4gPSBudG9obChpbnB1dC5kd29yZCk7CiAKLS8qKgotICogIGl4Z2JlX2F0cl9nZXRfZHN0X3BvcnRfODI1OTkgLSBHZXRzIHRoZSBkZXN0aW5hdGlvbiBwb3J0Ci0gKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gbW9kaWZ5Ci0gKiAgQGRzdF9wb3J0OiB0aGUgZGVzdGluYXRpb24gcG9ydCB0byBsb2FkCi0gKgotICogIEV2ZW4gdGhvdWdoIHRoZSBpbnB1dCBpcyBnaXZlbiBpbiBiaWctZW5kaWFuLCB0aGUgRkRJUlBPUlQgcmVnaXN0ZXJzCi0gKiAgZXhwZWN0IHRoZSBwb3J0cyB0byBiZSBwcm9ncmFtbWVkIGluIGxpdHRsZS1lbmRpYW4uICBIZW5jZSB0aGUgbmVlZCB0byBzd2FwCi0gKiAgZW5kaWFubmVzcyB3aGVuIHJldHJpZXZpbmcgdGhlIGRhdGEuICBUaGlzIGNhbiBiZSBjb25mdXNpbmcgc2luY2UgdGhlCi0gKiAgaW50ZXJuYWwgaGFzaCBlbmdpbmUgZXhwZWN0cyBpdCB0byBiZSBiaWctZW5kaWFuLgotICoqLwotc3RhdGljIHMzMiBpeGdiZV9hdHJfZ2V0X2RzdF9wb3J0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZHN0X3BvcnQpCi17Ci0JKmRzdF9wb3J0ID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9EU1RfUE9SVF9PRkZTRVRdIDw8IDg7Ci0JKmRzdF9wb3J0IHw9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfRFNUX1BPUlRfT0ZGU0VUICsgMV07CisJLyogZ2VuZXJhdGUgY29tbW9uIGhhc2ggZHdvcmQgKi8KKwloaV9oYXNoX2R3b3JkID0gbnRvaGwoY29tbW9uLmR3b3JkKTsKIAotCXJldHVybiAwOwotfQorCS8qIGxvdyBkd29yZCBpcyB3b3JkIHN3YXBwZWQgdmVyc2lvbiBvZiBjb21tb24gKi8KKwlsb19oYXNoX2R3b3JkID0gKGhpX2hhc2hfZHdvcmQgPj4gMTYpIHwgKGhpX2hhc2hfZHdvcmQgPDwgMTYpOwogCi0vKioKLSAqICBpeGdiZV9hdHJfZ2V0X2ZsZXhfYnl0ZV84MjU5OSAtIEdldHMgdGhlIGZsZXhpYmxlIGJ5dGVzCi0gKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gbW9kaWZ5Ci0gKiAgQGZsZXhfYnl0ZXM6IHRoZSBmbGV4aWJsZSBieXRlcyB0byBsb2FkCi0gKiovCi1zdGF0aWMgczMyIGl4Z2JlX2F0cl9nZXRfZmxleF9ieXRlXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmZsZXhfYnl0ZSkKLXsKLQkqZmxleF9ieXRlID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9GTEVYX0JZVEVfT0ZGU0VUXTsKLQkqZmxleF9ieXRlIHw9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfRkxFWF9CWVRFX09GRlNFVCArIDFdIDw8IDg7CisJLyogYXBwbHkgZmxvdyBJRC9WTSBwb29sL1ZMQU4gSUQgYml0cyB0byBoYXNoIHdvcmRzICovCisJaGlfaGFzaF9kd29yZCBePSBmbG93X3ZtX3ZsYW4gXiAoZmxvd192bV92bGFuID4+IDE2KTsKIAotCXJldHVybiAwOwotfQorCS8qIFByb2Nlc3MgYml0cyAwIGFuZCAxNiAqLworCUlYR0JFX0NPTVBVVEVfU0lHX0hBU0hfSVRFUkFUSU9OKDApOwogCi0vKioKLSAqICBpeGdiZV9hdHJfZ2V0X2w0dHlwZV84MjU5OSAtIEdldHMgdGhlIGxheWVyIDQgcGFja2V0IHR5cGUKLSAqICBAaW5wdXQ6IGlucHV0IHN0cmVhbSB0byBtb2RpZnkKLSAqICBAbDR0eXBlOiB0aGUgbGF5ZXIgNCB0eXBlIHZhbHVlIHRvIGxvYWQKLSAqKi8KLXN0YXRpYyBzMzIgaXhnYmVfYXRyX2dldF9sNHR5cGVfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICpsNHR5cGUpCi17Ci0JKmw0dHlwZSA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfTDRUWVBFX09GRlNFVF07CisJLyoKKwkgKiBhcHBseSBmbG93IElEL1ZNIHBvb2wvVkxBTiBJRCBiaXRzIHRvIGxvIGhhc2ggZHdvcmQsIHdlIGhhZCB0bworCSAqIGRlbGF5IHRoaXMgYmVjYXVzZSBiaXQgMCBvZiB0aGUgc3RyZWFtIHNob3VsZCBub3QgYmUgcHJvY2Vzc2VkCisJICogc28gd2UgZG8gbm90IGFkZCB0aGUgdmxhbiB1bnRpbCBhZnRlciBiaXQgMCB3YXMgcHJvY2Vzc2VkCisJICovCisJbG9faGFzaF9kd29yZCBePSBmbG93X3ZtX3ZsYW4gXiAoZmxvd192bV92bGFuIDw8IDE2KTsKIAotCXJldHVybiAwOworCS8qIFByb2Nlc3MgcmVtYWluaW5nIDMwIGJpdCBvZiB0aGUga2V5ICovCisJSVhHQkVfQ09NUFVURV9TSUdfSEFTSF9JVEVSQVRJT04oMSk7CisJSVhHQkVfQ09NUFVURV9TSUdfSEFTSF9JVEVSQVRJT04oMik7CisJSVhHQkVfQ09NUFVURV9TSUdfSEFTSF9JVEVSQVRJT04oMyk7CisJSVhHQkVfQ09NUFVURV9TSUdfSEFTSF9JVEVSQVRJT04oNCk7CisJSVhHQkVfQ09NUFVURV9TSUdfSEFTSF9JVEVSQVRJT04oNSk7CisJSVhHQkVfQ09NUFVURV9TSUdfSEFTSF9JVEVSQVRJT04oNik7CisJSVhHQkVfQ09NUFVURV9TSUdfSEFTSF9JVEVSQVRJT04oNyk7CisJSVhHQkVfQ09NUFVURV9TSUdfSEFTSF9JVEVSQVRJT04oOCk7CisJSVhHQkVfQ09NUFVURV9TSUdfSEFTSF9JVEVSQVRJT04oOSk7CisJSVhHQkVfQ09NUFVURV9TSUdfSEFTSF9JVEVSQVRJT04oMTApOworCUlYR0JFX0NPTVBVVEVfU0lHX0hBU0hfSVRFUkFUSU9OKDExKTsKKwlJWEdCRV9DT01QVVRFX1NJR19IQVNIX0lURVJBVElPTigxMik7CisJSVhHQkVfQ09NUFVURV9TSUdfSEFTSF9JVEVSQVRJT04oMTMpOworCUlYR0JFX0NPTVBVVEVfU0lHX0hBU0hfSVRFUkFUSU9OKDE0KTsKKwlJWEdCRV9DT01QVVRFX1NJR19IQVNIX0lURVJBVElPTigxNSk7CisKKwkvKiBjb21iaW5lIGNvbW1vbl9oYXNoIHJlc3VsdCB3aXRoIHNpZ25hdHVyZSBhbmQgYnVja2V0IGhhc2hlcyAqLworCWJ1Y2tldF9oYXNoIF49IGNvbW1vbl9oYXNoOworCWJ1Y2tldF9oYXNoICY9IElYR0JFX0FUUl9IQVNIX01BU0s7CisKKwlzaWdfaGFzaCBePSBjb21tb25faGFzaCA8PCAxNjsKKwlzaWdfaGFzaCAmPSBJWEdCRV9BVFJfSEFTSF9NQVNLIDw8IDE2OworCisJLyogcmV0dXJuIGNvbXBsZXRlZCBzaWduYXR1cmUgaGFzaCAqLworCXJldHVybiBzaWdfaGFzaCBeIGJ1Y2tldF9oYXNoOwogfQogCiAvKioKICAqICBpeGdiZV9hdHJfYWRkX3NpZ25hdHVyZV9maWx0ZXJfODI1OTkgLSBBZGRzIGEgc2lnbmF0dXJlIGhhc2ggZmlsdGVyCiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQotICogIEBzdHJlYW06IGlucHV0IGJpdHN0cmVhbQorICogIEBpbnB1dDogdW5pcXVlIGlucHV0IGR3b3JkCisgKiAgQGNvbW1vbjogY29tcHJlc3NlZCBjb21tb24gaW5wdXQgZHdvcmQKICAqICBAcXVldWU6IHF1ZXVlIGluZGV4IHRvIGRpcmVjdCB0cmFmZmljIHRvCiAgKiovCiBzMzIgaXhnYmVfZmRpcl9hZGRfc2lnbmF0dXJlX2ZpbHRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBpeGdiZV9hdHJfaGFzaF9kd29yZCBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIGNvbW1vbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHF1ZXVlKQogewogCXU2NCAgZmRpcmhhc2hjbWQ7Ci0JdTY0ICBmZGlyY21kOwotCXUzMiAgZmRpcmhhc2g7Ci0JdTE2ICBidWNrZXRfaGFzaCwgc2lnX2hhc2g7Ci0JdTggICBsNHR5cGU7CisJdTMyICBmZGlyY21kOwogCi0JYnVja2V0X2hhc2ggPSBpeGdiZV9hdHJfY29tcHV0ZV9oYXNoXzgyNTk5KGlucHV0LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9BVFJfQlVDS0VUX0hBU0hfS0VZKTsKKwkvKgorCSAqIEdldCB0aGUgZmxvd190eXBlIGluIG9yZGVyIHRvIHByb2dyYW0gRkRJUkNNRCBwcm9wZXJseQorCSAqIGxvd2VzdCAyIGJpdHMgYXJlIEZESVJDTUQuTDRUWVBFLCB0aGlyZCBsb3dlc3QgYml0IGlzIEZESVJDTUQuSVBWNgorCSAqLworCXN3aXRjaCAoaW5wdXQuZm9ybWF0dGVkLmZsb3dfdHlwZSkgeworCWNhc2UgSVhHQkVfQVRSX0ZMT1dfVFlQRV9UQ1BWNDoKKwljYXNlIElYR0JFX0FUUl9GTE9XX1RZUEVfVURQVjQ6CisJY2FzZSBJWEdCRV9BVFJfRkxPV19UWVBFX1NDVFBWNDoKKwljYXNlIElYR0JFX0FUUl9GTE9XX1RZUEVfVENQVjY6CisJY2FzZSBJWEdCRV9BVFJfRkxPV19UWVBFX1VEUFY2OgorCWNhc2UgSVhHQkVfQVRSX0ZMT1dfVFlQRV9TQ1RQVjY6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWh3X2RiZyhodywgIiBFcnJvciBvbiBmbG93IHR5cGUgaW5wdXRcbiIpOworCQlyZXR1cm4gSVhHQkVfRVJSX0NPTkZJRzsKKwl9CiAKLQkvKiBidWNrZXRfaGFzaCBpcyBvbmx5IDE1IGJpdHMgKi8KLQlidWNrZXRfaGFzaCAmPSBJWEdCRV9BVFJfSEFTSF9NQVNLOwotCi0Jc2lnX2hhc2ggPSBpeGdiZV9hdHJfY29tcHV0ZV9oYXNoXzgyNTk5KGlucHV0LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9BVFJfU0lHTkFUVVJFX0hBU0hfS0VZKTsKLQotCS8qIEdldCB0aGUgbDR0eXBlIGluIG9yZGVyIHRvIHByb2dyYW0gRkRJUkNNRCBwcm9wZXJseSAqLwotCS8qIGxvd2VzdCAyIGJpdHMgYXJlIEZESVJDTUQuTDRUWVBFLCB0aGlyZCBsb3dlc3QgYml0IGlzIEZESVJDTUQuSVBWNiAqLwotCWl4Z2JlX2F0cl9nZXRfbDR0eXBlXzgyNTk5KGlucHV0LCAmbDR0eXBlKTsKKwkvKiBjb25maWd1cmUgRkRJUkNNRCByZWdpc3RlciAqLworCWZkaXJjbWQgPSBJWEdCRV9GRElSQ01EX0NNRF9BRERfRkxPVyB8IElYR0JFX0ZESVJDTURfRklMVEVSX1VQREFURSB8CisJICAgICAgICAgIElYR0JFX0ZESVJDTURfTEFTVCB8IElYR0JFX0ZESVJDTURfUVVFVUVfRU47CisJZmRpcmNtZCB8PSBpbnB1dC5mb3JtYXR0ZWQuZmxvd190eXBlIDw8IElYR0JFX0ZESVJDTURfRkxPV19UWVBFX1NISUZUOworCWZkaXJjbWQgfD0gKHUzMilxdWV1ZSA8PCBJWEdCRV9GRElSQ01EX1JYX1FVRVVFX1NISUZUOwogCiAJLyoKIAkgKiBUaGUgbG93ZXIgMzItYml0cyBvZiBmZGlyaGFzaGNtZCBpcyBmb3IgRkRJUkhBU0gsIHRoZSB1cHBlciAzMi1iaXRzCiAJICogaXMgZm9yIEZESVJDTUQuICBUaGVuIGRvIGEgNjQtYml0IHJlZ2lzdGVyIHdyaXRlIGZyb20gRkRJUkhBU0guCiAJICovCi0JZmRpcmhhc2ggPSBzaWdfaGFzaCA8PCBJWEdCRV9GRElSSEFTSF9TSUdfU1dfSU5ERVhfU0hJRlQgfCBidWNrZXRfaGFzaDsKLQotCWZkaXJjbWQgPSAoSVhHQkVfRkRJUkNNRF9DTURfQUREX0ZMT1cgfCBJWEdCRV9GRElSQ01EX0ZJTFRFUl9VUERBVEUgfAotCSAgICAgICAgICAgSVhHQkVfRkRJUkNNRF9MQVNUIHwgSVhHQkVfRkRJUkNNRF9RVUVVRV9FTik7Ci0KLQlzd2l0Y2ggKGw0dHlwZSAmIElYR0JFX0FUUl9MNFRZUEVfTUFTSykgewotCWNhc2UgSVhHQkVfQVRSX0w0VFlQRV9UQ1A6Ci0JCWZkaXJjbWQgfD0gSVhHQkVfRkRJUkNNRF9MNFRZUEVfVENQOwotCQlicmVhazsKLQljYXNlIElYR0JFX0FUUl9MNFRZUEVfVURQOgotCQlmZGlyY21kIHw9IElYR0JFX0ZESVJDTURfTDRUWVBFX1VEUDsKLQkJYnJlYWs7Ci0JY2FzZSBJWEdCRV9BVFJfTDRUWVBFX1NDVFA6Ci0JCWZkaXJjbWQgfD0gSVhHQkVfRkRJUkNNRF9MNFRZUEVfU0NUUDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaHdfZGJnKGh3LCAiRXJyb3Igb24gbDR0eXBlIGlucHV0XG4iKTsKLQkJcmV0dXJuIElYR0JFX0VSUl9DT05GSUc7Ci0JfQotCi0JaWYgKGw0dHlwZSAmIElYR0JFX0FUUl9MNFRZUEVfSVBWNl9NQVNLKQotCQlmZGlyY21kIHw9IElYR0JFX0ZESVJDTURfSVBWNjsKLQotCWZkaXJjbWQgfD0gKCh1NjQpcXVldWUgPDwgSVhHQkVfRkRJUkNNRF9SWF9RVUVVRV9TSElGVCk7Ci0JZmRpcmhhc2hjbWQgPSAoKGZkaXJjbWQgPDwgMzIpIHwgZmRpcmhhc2gpOworCWZkaXJoYXNoY21kID0gKHU2NClmZGlyY21kIDw8IDMyOworCWZkaXJoYXNoY21kIHw9IGl4Z2JlX2F0cl9jb21wdXRlX3NpZ19oYXNoXzgyNTk5KGlucHV0LCBjb21tb24pOwogCiAJSVhHQkVfV1JJVEVfUkVHNjQoaHcsIElYR0JFX0ZESVJIQVNILCBmZGlyaGFzaGNtZCk7CiAKKwlod19kYmcoaHcsICJUeCBRdWV1ZT0leCBoYXNoPSV4XG4iLCBxdWV1ZSwgKHUzMilmZGlyaGFzaGNtZCk7CisKIAlyZXR1cm4gMDsKIH0KIAogLyoqCisgKiAgaXhnYmVfZ2V0X2ZkaXJ0Y3BtXzgyNTk5IC0gZ2VuZXJhdGUgYSB0Y3AgcG9ydCBmcm9tIGF0cl9pbnB1dF9tYXNrcworICogIEBpbnB1dF9tYXNrOiBtYXNrIHRvIGJlIGJpdCBzd2FwcGVkCisgKgorICogIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvcnQgbWFza3MgZm9yIGZsb3cgZGlyZWN0b3IgYXJlIGJpdCBzd2FwcGVkCisgKiAgaW4gdGhhdCBiaXQgMTUgZWZmZWN0cyBiaXQgMCwgMTQgZWZmZWN0cyAxLCAxMywgMiBldGMuICBJbiBvcmRlciB0bworICogIGdlbmVyYXRlIGEgY29ycmVjdGx5IHN3YXBwZWQgdmFsdWUgd2UgbmVlZCB0byBiaXQgc3dhcCB0aGUgbWFzayBhbmQgdGhhdAorICogIGlzIHdoYXQgaXMgYWNjb21wbGlzaGVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgKiovCitzdGF0aWMgdTMyIGl4Z2JlX2dldF9mZGlydGNwbV84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0X21hc2tzICppbnB1dF9tYXNrcykKK3sKKwl1MzIgbWFzayA9IG50b2hzKGlucHV0X21hc2tzLT5kc3RfcG9ydF9tYXNrKTsKKwltYXNrIDw8PSBJWEdCRV9GRElSVENQTV9EUE9SVE1fU0hJRlQ7CisJbWFzayB8PSBudG9ocyhpbnB1dF9tYXNrcy0+c3JjX3BvcnRfbWFzayk7CisJbWFzayA9ICgobWFzayAmIDB4NTU1NTU1NTUpIDw8IDEpIHwgKChtYXNrICYgMHhBQUFBQUFBQSkgPj4gMSk7CisJbWFzayA9ICgobWFzayAmIDB4MzMzMzMzMzMpIDw8IDIpIHwgKChtYXNrICYgMHhDQ0NDQ0NDQykgPj4gMik7CisJbWFzayA9ICgobWFzayAmIDB4MEYwRjBGMEYpIDw8IDQpIHwgKChtYXNrICYgMHhGMEYwRjBGMCkgPj4gNCk7CisJcmV0dXJuICgobWFzayAmIDB4MDBGRjAwRkYpIDw8IDgpIHwgKChtYXNrICYgMHhGRjAwRkYwMCkgPj4gOCk7Cit9CisKKy8qCisgKiBUaGVzZSB0d28gbWFjcm9zIGFyZSBtZWFudCB0byBhZGRyZXNzIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSByZWdpc3RlcnMKKyAqIHRoYXQgYXJlIGVpdGhlciBhbGwgb3IgaW4gcGFydCBiaWctZW5kaWFuLiAgQXMgYSByZXN1bHQgb24gYmlnLWVuZGlhbgorICogc3lzdGVtcyB3ZSB3aWxsIGVuZCB1cCBieXRlIHN3YXBwaW5nIHRoZSB2YWx1ZSB0byBsaXR0bGUtZW5kaWFuIGJlZm9yZQorICogaXQgaXMgYnl0ZSBzd2FwcGVkIGFnYWluIGFuZCB3cml0dGVuIHRvIHRoZSBoYXJkd2FyZSBpbiB0aGUgb3JpZ2luYWwKKyAqIGJpZy1lbmRpYW4gZm9ybWF0LgorICovCisjZGVmaW5lIElYR0JFX1NUT1JFX0FTX0JFMzIoX3ZhbHVlKSBcCisJKCgodTMyKShfdmFsdWUpID4+IDI0KSB8ICgoKHUzMikoX3ZhbHVlKSAmIDB4MDBGRjAwMDApID4+IDgpIHwgXAorCSAoKCh1MzIpKF92YWx1ZSkgJiAweDAwMDBGRjAwKSA8PCA4KSB8ICgodTMyKShfdmFsdWUpIDw8IDI0KSkKKworI2RlZmluZSBJWEdCRV9XUklURV9SRUdfQkUzMihhLCByZWcsIHZhbHVlKSBcCisJSVhHQkVfV1JJVEVfUkVHKChhKSwgKHJlZyksIElYR0JFX1NUT1JFX0FTX0JFMzIobnRvaGwodmFsdWUpKSkKKworI2RlZmluZSBJWEdCRV9TVE9SRV9BU19CRTE2KF92YWx1ZSkgXAorCSgoKHUxNikoX3ZhbHVlKSA+PiA4KSB8ICgodTE2KShfdmFsdWUpIDw8IDgpKQorCisvKioKICAqICBpeGdiZV9mZGlyX2FkZF9wZXJmZWN0X2ZpbHRlcl84MjU5OSAtIEFkZHMgYSBwZXJmZWN0IGZpbHRlcgogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqICBAaW5wdXQ6IGlucHV0IGJpdHN0cmVhbQpAQCAtMTY4NywxMzUgKzE1MjIsMTM5IEBACiAgKiAgaGFyZHdhcmUgd3JpdGVzIG11c3QgYmUgcHJvdGVjdGVkIGZyb20gb25lIGFub3RoZXIuCiAgKiovCiBzMzIgaXhnYmVfZmRpcl9hZGRfcGVyZmVjdF9maWx0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9hdHJfaW5wdXRfbWFza3MgKmlucHV0X21hc2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgc29mdF9pZCwgdTggcXVldWUpCiB7Ci0JdTMyIGZkaXJjbWQgPSAwOwogCXUzMiBmZGlyaGFzaDsKLQl1MzIgc3JjX2lwdjQgPSAwLCBkc3RfaXB2NCA9IDA7Ci0JdTMyIHNyY19pcHY2XzEsIHNyY19pcHY2XzIsIHNyY19pcHY2XzMsIHNyY19pcHY2XzQ7Ci0JdTE2IHNyY19wb3J0LCBkc3RfcG9ydCwgdmxhbl9pZCwgZmxleF9ieXRlczsKLQl1MTYgYnVja2V0X2hhc2g7Ci0JdTggIGw0dHlwZTsKLQl1OCAgZmRpcm0gPSAwOwotCi0JLyogR2V0IG91ciBpbnB1dCB2YWx1ZXMgKi8KLQlpeGdiZV9hdHJfZ2V0X2w0dHlwZV84MjU5OShpbnB1dCwgJmw0dHlwZSk7CisJdTMyIGZkaXJjbWQ7CisJdTMyIGZkaXJwb3J0LCBmZGlydGNwbTsKKwl1MzIgZmRpcnZsYW47CisJLyogc3RhcnQgd2l0aCBWTEFOLCBmbGV4IGJ5dGVzLCBWTSBwb29sLCBhbmQgSVB2NiBkZXN0aW5hdGlvbiBtYXNrZWQgKi8KKwl1MzIgZmRpcm0gPSBJWEdCRV9GRElSTV9WTEFOSUQgfCBJWEdCRV9GRElSTV9WTEFOUCB8IElYR0JFX0ZESVJNX0ZMRVggfAorCQkgICAgSVhHQkVfRkRJUk1fUE9PTCB8IElYR0JFX0ZESVJNX0RJUHY2OwogCiAJLyoKLQkgKiBDaGVjayBsNHR5cGUgZm9ybWF0dGluZywgYW5kIGJhaWwgb3V0IGJlZm9yZSB3ZSB0b3VjaCB0aGUgaGFyZHdhcmUKKwkgKiBDaGVjayBmbG93X3R5cGUgZm9ybWF0dGluZywgYW5kIGJhaWwgb3V0IGJlZm9yZSB3ZSB0b3VjaCB0aGUgaGFyZHdhcmUKIAkgKiBpZiB0aGVyZSdzIGEgY29uZmlndXJhdGlvbiBpc3N1ZQogCSAqLwotCXN3aXRjaCAobDR0eXBlICYgSVhHQkVfQVRSX0w0VFlQRV9NQVNLKSB7Ci0JY2FzZSBJWEdCRV9BVFJfTDRUWVBFX1RDUDoKLQkJZmRpcmNtZCB8PSBJWEdCRV9GRElSQ01EX0w0VFlQRV9UQ1A7Ci0JCWJyZWFrOwotCWNhc2UgSVhHQkVfQVRSX0w0VFlQRV9VRFA6Ci0JCWZkaXJjbWQgfD0gSVhHQkVfRkRJUkNNRF9MNFRZUEVfVURQOwotCQlicmVhazsKLQljYXNlIElYR0JFX0FUUl9MNFRZUEVfU0NUUDoKLQkJZmRpcmNtZCB8PSBJWEdCRV9GRElSQ01EX0w0VFlQRV9TQ1RQOworCXN3aXRjaCAoaW5wdXQtPmZvcm1hdHRlZC5mbG93X3R5cGUpIHsKKwljYXNlIElYR0JFX0FUUl9GTE9XX1RZUEVfSVBWNDoKKwkJLyogdXNlIHRoZSBMNCBwcm90b2NvbCBtYXNrIGZvciByYXcgSVB2NC9JUHY2IHRyYWZmaWMgKi8KKwkJZmRpcm0gfD0gSVhHQkVfRkRJUk1fTDRQOworCWNhc2UgSVhHQkVfQVRSX0ZMT1dfVFlQRV9TQ1RQVjQ6CisJCWlmIChpbnB1dF9tYXNrcy0+ZHN0X3BvcnRfbWFzayB8fCBpbnB1dF9tYXNrcy0+c3JjX3BvcnRfbWFzaykgeworCQkJaHdfZGJnKGh3LCAiIEVycm9yIG9uIHNyYy9kc3QgcG9ydCBtYXNrXG4iKTsKKwkJCXJldHVybiBJWEdCRV9FUlJfQ09ORklHOworCQl9CisJY2FzZSBJWEdCRV9BVFJfRkxPV19UWVBFX1RDUFY0OgorCWNhc2UgSVhHQkVfQVRSX0ZMT1dfVFlQRV9VRFBWNDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaHdfZGJnKGh3LCAiRXJyb3Igb24gbDR0eXBlIGlucHV0XG4iKTsKKwkJaHdfZGJnKGh3LCAiIEVycm9yIG9uIGZsb3cgdHlwZSBpbnB1dFxuIik7CiAJCXJldHVybiBJWEdCRV9FUlJfQ09ORklHOwogCX0KIAotCWJ1Y2tldF9oYXNoID0gaXhnYmVfYXRyX2NvbXB1dGVfaGFzaF84MjU5OShpbnB1dCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfQVRSX0JVQ0tFVF9IQVNIX0tFWSk7Ci0KLQkvKiBidWNrZXRfaGFzaCBpcyBvbmx5IDE1IGJpdHMgKi8KLQlidWNrZXRfaGFzaCAmPSBJWEdCRV9BVFJfSEFTSF9NQVNLOwotCi0JaXhnYmVfYXRyX2dldF92bGFuX2lkXzgyNTk5KGlucHV0LCAmdmxhbl9pZCk7Ci0JaXhnYmVfYXRyX2dldF9zcmNfcG9ydF84MjU5OShpbnB1dCwgJnNyY19wb3J0KTsKLQlpeGdiZV9hdHJfZ2V0X2RzdF9wb3J0XzgyNTk5KGlucHV0LCAmZHN0X3BvcnQpOwotCWl4Z2JlX2F0cl9nZXRfZmxleF9ieXRlXzgyNTk5KGlucHV0LCAmZmxleF9ieXRlcyk7Ci0KLQlmZGlyaGFzaCA9IHNvZnRfaWQgPDwgSVhHQkVfRkRJUkhBU0hfU0lHX1NXX0lOREVYX1NISUZUIHwgYnVja2V0X2hhc2g7Ci0KLQkvKiBOb3cgZmlndXJlIG91dCBpZiB3ZSdyZSBJUHY0IG9yIElQdjYgKi8KLQlpZiAobDR0eXBlICYgSVhHQkVfQVRSX0w0VFlQRV9JUFY2X01BU0spIHsKLQkJLyogSVB2NiAqLwotCQlpeGdiZV9hdHJfZ2V0X3NyY19pcHY2XzgyNTk5KGlucHV0LCAmc3JjX2lwdjZfMSwgJnNyY19pcHY2XzIsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcmNfaXB2Nl8zLCAmc3JjX2lwdjZfNCk7Ci0KLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GRElSU0lQdjYoMCksIHNyY19pcHY2XzEpOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJTSVB2NigxKSwgc3JjX2lwdjZfMik7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlNJUHY2KDIpLCBzcmNfaXB2Nl8zKTsKLQkJLyogVGhlIGxhc3QgNCBieXRlcyBpcyB0aGUgc2FtZSByZWdpc3RlciBhcyBJUHY0ICovCi0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUklQU0EsIHNyY19pcHY2XzQpOwotCi0JCWZkaXJjbWQgfD0gSVhHQkVfRkRJUkNNRF9JUFY2OwotCQlmZGlyY21kIHw9IElYR0JFX0ZESVJDTURfSVB2NkRNQVRDSDsKLQl9IGVsc2UgewotCQkvKiBJUHY0ICovCi0JCWl4Z2JlX2F0cl9nZXRfc3JjX2lwdjRfODI1OTkoaW5wdXQsICZzcmNfaXB2NCk7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUklQU0EsIHNyY19pcHY0KTsKLQl9Ci0KLQlpeGdiZV9hdHJfZ2V0X2RzdF9pcHY0XzgyNTk5KGlucHV0LCAmZHN0X2lwdjQpOwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUklQREEsIGRzdF9pcHY0KTsKLQotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlZMQU4sICh2bGFuX2lkIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsZXhfYnl0ZXMgPDwgSVhHQkVfRkRJUlZMQU5fRkxFWF9TSElGVCkpKTsKLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJQT1JULCAoc3JjX3BvcnQgfAotCSAgICAgICAgICAgICAgKGRzdF9wb3J0IDw8IElYR0JFX0ZESVJQT1JUX0RFU1RJTkFUSU9OX1NISUZUKSkpOwotCiAJLyoKLQkgKiBQcm9ncmFtIHRoZSByZWxldmFudCBtYXNrIHJlZ2lzdGVycy4gIEw0dHlwZSBjYW5ub3QgYmUKLQkgKiBtYXNrZWQgb3V0IGluIHRoaXMgaW1wbGVtZW50YXRpb24uCisJICogUHJvZ3JhbSB0aGUgcmVsZXZhbnQgbWFzayByZWdpc3RlcnMuICBJZiBzcmMvZHN0X3BvcnQgb3Igc3JjL2RzdF9hZGRyCisJICogYXJlIHplcm8sIHRoZW4gYXNzdW1lIGEgZnVsbCBtYXNrIGZvciB0aGF0IGZpZWxkLiAgQWxzbyBhc3N1bWUgdGhhdAorCSAqIGEgVkxBTiBvZiAwIGlzIHVuc3BlY2lmaWVkLCBzbyBtYXNrIHRoYXQgb3V0IGFzIHdlbGwuICBMNHR5cGUKKwkgKiBjYW5ub3QgYmUgbWFza2VkIG91dCBpbiB0aGlzIGltcGxlbWVudGF0aW9uLgogCSAqCiAJICogVGhpcyBhbHNvIGFzc3VtZXMgSVB2NCBvbmx5LiAgSVB2NiBtYXNraW5nIGlzbid0IHN1cHBvcnRlZCBhdCB0aGlzCiAJICogcG9pbnQgaW4gdGltZS4KIAkgKi8KLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJTSVA0TSwgaW5wdXRfbWFza3MtPnNyY19pcF9tYXNrKTsKLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJESVA0TSwgaW5wdXRfbWFza3MtPmRzdF9pcF9tYXNrKTsKIAotCXN3aXRjaCAobDR0eXBlICYgSVhHQkVfQVRSX0w0VFlQRV9NQVNLKSB7Ci0JY2FzZSBJWEdCRV9BVFJfTDRUWVBFX1RDUDoKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GRElSVENQTSwgaW5wdXRfbWFza3MtPnNyY19wb3J0X21hc2spOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJUQ1BNLAotCQkJCShJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkRJUlRDUE0pIHwKLQkJCQkgKGlucHV0X21hc2tzLT5kc3RfcG9ydF9tYXNrIDw8IDE2KSkpOworCS8qIFByb2dyYW0gRkRJUk0gKi8KKwlzd2l0Y2ggKG50b2hzKGlucHV0X21hc2tzLT52bGFuX2lkX21hc2spICYgMHhFRkZGKSB7CisJY2FzZSAweEVGRkY6CisJCS8qIFVubWFzayBWTEFOIElEIC0gYml0IDAgYW5kIGZhbGwgdGhyb3VnaCB0byB1bm1hc2sgcHJpbyAqLworCQlmZGlybSAmPSB+SVhHQkVfRkRJUk1fVkxBTklEOworCWNhc2UgMHhFMDAwOgorCQkvKiBVbm1hc2sgVkxBTiBwcmlvIC0gYml0IDEgKi8KKwkJZmRpcm0gJj0gfklYR0JFX0ZESVJNX1ZMQU5QOwogCQlicmVhazsKLQljYXNlIElYR0JFX0FUUl9MNFRZUEVfVURQOgotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJVRFBNLCBpbnB1dF9tYXNrcy0+c3JjX3BvcnRfbWFzayk7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlVEUE0sCi0JCQkJKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GRElSVURQTSkgfAotCQkJCSAoaW5wdXRfbWFza3MtPnNyY19wb3J0X21hc2sgPDwgMTYpKSk7CisJY2FzZSAweDBGRkY6CisJCS8qIFVubWFzayBWTEFOIElEIC0gYml0IDAgKi8KKwkJZmRpcm0gJj0gfklYR0JFX0ZESVJNX1ZMQU5JRDsKKwkJYnJlYWs7CisJY2FzZSAweDAwMDA6CisJCS8qIGRvIG5vdGhpbmcsIHZsYW5zIGFscmVhZHkgbWFza2VkICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCS8qIHRoaXMgYWxyZWFkeSB3b3VsZCBoYXZlIGZhaWxlZCBhYm92ZSAqLwotCQlicmVhazsKKwkJaHdfZGJnKGh3LCAiIEVycm9yIG9uIFZMQU4gbWFza1xuIik7CisJCXJldHVybiBJWEdCRV9FUlJfQ09ORklHOwogCX0KIAotCS8qIFByb2dyYW0gdGhlIGxhc3QgbWFzayByZWdpc3RlciwgRkRJUk0gKi8KLQlpZiAoaW5wdXRfbWFza3MtPnZsYW5faWRfbWFzaykKLQkJLyogTWFzayBib3RoIFZMQU4gYW5kIFZMQU5QIC0gYml0cyAwIGFuZCAxICovCi0JCWZkaXJtIHw9IDB4MzsKLQotCWlmIChpbnB1dF9tYXNrcy0+ZGF0YV9tYXNrKQotCQkvKiBGbGV4IGJ5dGVzIG5lZWQgbWFza2luZywgc28gbWFzayB0aGUgd2hvbGUgdGhpbmcgLSBiaXQgNCAqLwotCQlmZGlybSB8PSAweDEwOworCWlmIChpbnB1dF9tYXNrcy0+ZmxleF9tYXNrICYgMHhGRkZGKSB7CisJCWlmICgoaW5wdXRfbWFza3MtPmZsZXhfbWFzayAmIDB4RkZGRikgIT0gMHhGRkZGKSB7CisJCQlod19kYmcoaHcsICIgRXJyb3Igb24gZmxleGlibGUgYnl0ZSBtYXNrXG4iKTsKKwkJCXJldHVybiBJWEdCRV9FUlJfQ09ORklHOworCQl9CisJCS8qIFVubWFzayBGbGV4IEJ5dGVzIC0gYml0IDQgKi8KKwkJZmRpcm0gJj0gfklYR0JFX0ZESVJNX0ZMRVg7CisJfQogCiAJLyogTm93IG1hc2sgVk0gcG9vbCBhbmQgZGVzdGluYXRpb24gSVB2NiAtIGJpdHMgNSBhbmQgMiAqLwotCWZkaXJtIHw9IDB4MjQ7Ci0KIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJNLCBmZGlybSk7CiAKLQlmZGlyY21kIHw9IElYR0JFX0ZESVJDTURfQ01EX0FERF9GTE9XOwotCWZkaXJjbWQgfD0gSVhHQkVfRkRJUkNNRF9GSUxURVJfVVBEQVRFOwotCWZkaXJjbWQgfD0gSVhHQkVfRkRJUkNNRF9MQVNUOwotCWZkaXJjbWQgfD0gSVhHQkVfRkRJUkNNRF9RVUVVRV9FTjsKLQlmZGlyY21kIHw9IHF1ZXVlIDw8IElYR0JFX0ZESVJDTURfUlhfUVVFVUVfU0hJRlQ7CisJLyogc3RvcmUgdGhlIFRDUC9VRFAgcG9ydCBtYXNrcywgYml0IHJldmVyc2VkIGZyb20gcG9ydCBsYXlvdXQgKi8KKwlmZGlydGNwbSA9IGl4Z2JlX2dldF9mZGlydGNwbV84MjU5OShpbnB1dF9tYXNrcyk7CisKKwkvKiB3cml0ZSBib3RoIHRoZSBzYW1lIHNvIHRoYXQgVURQIGFuZCBUQ1AgdXNlIHRoZSBzYW1lIG1hc2sgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJUQ1BNLCB+ZmRpcnRjcG0pOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlVEUE0sIH5mZGlydGNwbSk7CisKKwkvKiBzdG9yZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIElQIG1hc2tzIChiaWctZW5pYW4pICovCisJSVhHQkVfV1JJVEVfUkVHX0JFMzIoaHcsIElYR0JFX0ZESVJTSVA0TSwKKwkJCSAgICAgfmlucHV0X21hc2tzLT5zcmNfaXBfbWFza1swXSk7CisJSVhHQkVfV1JJVEVfUkVHX0JFMzIoaHcsIElYR0JFX0ZESVJESVA0TSwKKwkJCSAgICAgfmlucHV0X21hc2tzLT5kc3RfaXBfbWFza1swXSk7CisKKwkvKiBBcHBseSBtYXNrcyB0byBpbnB1dCBkYXRhICovCisJaW5wdXQtPmZvcm1hdHRlZC52bGFuX2lkICY9IGlucHV0X21hc2tzLT52bGFuX2lkX21hc2s7CisJaW5wdXQtPmZvcm1hdHRlZC5mbGV4X2J5dGVzICY9IGlucHV0X21hc2tzLT5mbGV4X21hc2s7CisJaW5wdXQtPmZvcm1hdHRlZC5zcmNfcG9ydCAmPSBpbnB1dF9tYXNrcy0+c3JjX3BvcnRfbWFzazsKKwlpbnB1dC0+Zm9ybWF0dGVkLmRzdF9wb3J0ICY9IGlucHV0X21hc2tzLT5kc3RfcG9ydF9tYXNrOworCWlucHV0LT5mb3JtYXR0ZWQuc3JjX2lwWzBdICY9IGlucHV0X21hc2tzLT5zcmNfaXBfbWFza1swXTsKKwlpbnB1dC0+Zm9ybWF0dGVkLmRzdF9pcFswXSAmPSBpbnB1dF9tYXNrcy0+ZHN0X2lwX21hc2tbMF07CisKKwkvKiByZWNvcmQgdmxhbiAobGl0dGxlLWVuZGlhbikgYW5kIGZsZXhfYnl0ZXMoYmlnLWVuZGlhbikgKi8KKwlmZGlydmxhbiA9CisJCUlYR0JFX1NUT1JFX0FTX0JFMTYobnRvaHMoaW5wdXQtPmZvcm1hdHRlZC5mbGV4X2J5dGVzKSk7CisJZmRpcnZsYW4gPDw9IElYR0JFX0ZESVJWTEFOX0ZMRVhfU0hJRlQ7CisJZmRpcnZsYW4gfD0gbnRvaHMoaW5wdXQtPmZvcm1hdHRlZC52bGFuX2lkKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJWTEFOLCBmZGlydmxhbik7CisKKwkvKiByZWNvcmQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBwb3J0IChsaXR0bGUtZW5kaWFuKSovCisJZmRpcnBvcnQgPSBudG9ocyhpbnB1dC0+Zm9ybWF0dGVkLmRzdF9wb3J0KTsKKwlmZGlycG9ydCA8PD0gSVhHQkVfRkRJUlBPUlRfREVTVElOQVRJT05fU0hJRlQ7CisJZmRpcnBvcnQgfD0gbnRvaHMoaW5wdXQtPmZvcm1hdHRlZC5zcmNfcG9ydCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GRElSUE9SVCwgZmRpcnBvcnQpOworCisJLyogcmVjb3JkIHRoZSBmaXJzdCAzMiBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIChiaWctZW5kaWFuKSAqLworCUlYR0JFX1dSSVRFX1JFR19CRTMyKGh3LCBJWEdCRV9GRElSSVBEQSwgaW5wdXQtPmZvcm1hdHRlZC5kc3RfaXBbMF0pOworCisJLyogcmVjb3JkIHRoZSBzb3VyY2UgYWRkcmVzcyAoYmlnLWVuZGlhbikgKi8KKwlJWEdCRV9XUklURV9SRUdfQkUzMihodywgSVhHQkVfRkRJUklQU0EsIGlucHV0LT5mb3JtYXR0ZWQuc3JjX2lwWzBdKTsKKworCS8qIGNvbmZpZ3VyZSBGRElSQ01EIHJlZ2lzdGVyICovCisJZmRpcmNtZCA9IElYR0JFX0ZESVJDTURfQ01EX0FERF9GTE9XIHwgSVhHQkVfRkRJUkNNRF9GSUxURVJfVVBEQVRFIHwKKwkJICBJWEdCRV9GRElSQ01EX0xBU1QgfCBJWEdCRV9GRElSQ01EX1FVRVVFX0VOOworCWZkaXJjbWQgfD0gaW5wdXQtPmZvcm1hdHRlZC5mbG93X3R5cGUgPDwgSVhHQkVfRkRJUkNNRF9GTE9XX1RZUEVfU0hJRlQ7CisJZmRpcmNtZCB8PSAodTMyKXF1ZXVlIDw8IElYR0JFX0ZESVJDTURfUlhfUVVFVUVfU0hJRlQ7CisKKwkvKiB3ZSBvbmx5IHdhbnQgdGhlIGJ1Y2tldCBoYXNoIHNvIGRyb3AgdGhlIHVwcGVyIDE2IGJpdHMgKi8KKwlmZGlyaGFzaCA9IGl4Z2JlX2F0cl9jb21wdXRlX2hhc2hfODI1OTkoaW5wdXQsCisJCQkJCQlJWEdCRV9BVFJfQlVDS0VUX0hBU0hfS0VZKTsKKwlmZGlyaGFzaCB8PSBzb2Z0X2lkIDw8IElYR0JFX0ZESVJIQVNIX1NJR19TV19JTkRFWF9TSElGVDsKIAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUkhBU0gsIGZkaXJoYXNoKTsKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJDTUQsIGZkaXJjbWQpOwogCiAJcmV0dXJuIDA7CiB9CisKIC8qKgogICogIGl4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTkgLSBSZWFkcyA4IGJpdCBPbWVyIGFuYWxvZyByZWdpc3RlcgogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwppbmRleCAyM2ZmMjNlLi4yMDAyZWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCkBAIC0xNDc3LDkgKzE0NzcsNyBAQAogCXJlZ19jdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhDVFJMKTsKIAlyZWdfY3RsICY9IH5JWEdCRV9SWENUUkxfUlhFTjsKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYQ1RSTCwgcmVnX2N0bCk7Ci0JcmVnX2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWERDVEwocnhfcmluZy0+cmVnX2lkeCkpOwotCXJlZ19jdGwgJj0gfklYR0JFX1JYRENUTF9FTkFCTEU7Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWERDVEwocnhfcmluZy0+cmVnX2lkeCksIHJlZ19jdGwpOworCWl4Z2JlX2Rpc2FibGVfcnhfcXVldWUoYWRhcHRlciwgcnhfcmluZyk7CiAKIAkvKiBub3cgVHggKi8KIAlyZWdfY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RYRENUTCh0eF9yaW5nLT5yZWdfaWR4KSk7CkBAIC0yMjc5LDEwICsyMjc3LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlICpjbWQpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWMgZnMgPSBjbWQtPmZzOwotCXN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgaW5wdXRfc3RydWN0OworCXN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWMgKmZzID0gJmNtZC0+ZnM7CisJdW5pb24gaXhnYmVfYXRyX2lucHV0IGlucHV0X3N0cnVjdDsKIAlzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0X21hc2tzIGlucHV0X21hc2tzOwogCWludCB0YXJnZXRfcXVldWU7CisJaW50IGVycjsKIAogCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMjI5MSw2NyArMjI5MCwxMjIgQEAKIAkgKiBEb24ndCBhbGxvdyBwcm9ncmFtbWluZyBpZiB0aGUgYWN0aW9uIGlzIGEgcXVldWUgZ3JlYXRlciB0aGFuCiAJICogdGhlIG51bWJlciBvZiBvbmxpbmUgVHggcXVldWVzLgogCSAqLwotCWlmICgoZnMuYWN0aW9uID49IGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpIHx8Ci0JICAgIChmcy5hY3Rpb24gPCBFVEhUT09MX1JYTlRVUExFX0FDVElPTl9EUk9QKSkKKwlpZiAoKGZzLT5hY3Rpb24gPj0gYWRhcHRlci0+bnVtX3R4X3F1ZXVlcykgfHwKKwkgICAgKGZzLT5hY3Rpb24gPCBFVEhUT09MX1JYTlRVUExFX0FDVElPTl9EUk9QKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1zZXQoJmlucHV0X3N0cnVjdCwgMCwgc2l6ZW9mKHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQpKTsKKwltZW1zZXQoJmlucHV0X3N0cnVjdCwgMCwgc2l6ZW9mKHVuaW9uIGl4Z2JlX2F0cl9pbnB1dCkpOwogCW1lbXNldCgmaW5wdXRfbWFza3MsIDAsIHNpemVvZihzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0X21hc2tzKSk7CiAKLQlpbnB1dF9tYXNrcy5zcmNfaXBfbWFzayA9IGZzLm1fdS50Y3BfaXA0X3NwZWMuaXA0c3JjOwotCWlucHV0X21hc2tzLmRzdF9pcF9tYXNrID0gZnMubV91LnRjcF9pcDRfc3BlYy5pcDRkc3Q7Ci0JaW5wdXRfbWFza3Muc3JjX3BvcnRfbWFzayA9IGZzLm1fdS50Y3BfaXA0X3NwZWMucHNyYzsKLQlpbnB1dF9tYXNrcy5kc3RfcG9ydF9tYXNrID0gZnMubV91LnRjcF9pcDRfc3BlYy5wZHN0OwotCWlucHV0X21hc2tzLnZsYW5faWRfbWFzayA9IGZzLnZsYW5fdGFnX21hc2s7Ci0JLyogb25seSB1c2UgdGhlIGxvd2VzdCAyIGJ5dGVzIGZvciBmbGV4IGJ5dGVzICovCi0JaW5wdXRfbWFza3MuZGF0YV9tYXNrID0gKGZzLmRhdGFfbWFzayAmIDB4ZmZmZik7Ci0KLQlzd2l0Y2ggKGZzLmZsb3dfdHlwZSkgeworCS8qIHJlY29yZCBmbG93IHR5cGUgKi8KKwlzd2l0Y2ggKGZzLT5mbG93X3R5cGUpIHsKKwljYXNlIElQVjRfRkxPVzoKKwkJaW5wdXRfc3RydWN0LmZvcm1hdHRlZC5mbG93X3R5cGUgPSBJWEdCRV9BVFJfRkxPV19UWVBFX0lQVjQ7CisJCWJyZWFrOwogCWNhc2UgVENQX1Y0X0ZMT1c6Ci0JCWl4Z2JlX2F0cl9zZXRfbDR0eXBlXzgyNTk5KCZpbnB1dF9zdHJ1Y3QsIElYR0JFX0FUUl9MNFRZUEVfVENQKTsKKwkJaW5wdXRfc3RydWN0LmZvcm1hdHRlZC5mbG93X3R5cGUgPSBJWEdCRV9BVFJfRkxPV19UWVBFX1RDUFY0OwogCQlicmVhazsKIAljYXNlIFVEUF9WNF9GTE9XOgotCQlpeGdiZV9hdHJfc2V0X2w0dHlwZV84MjU5OSgmaW5wdXRfc3RydWN0LCBJWEdCRV9BVFJfTDRUWVBFX1VEUCk7CisJCWlucHV0X3N0cnVjdC5mb3JtYXR0ZWQuZmxvd190eXBlID0gSVhHQkVfQVRSX0ZMT1dfVFlQRV9VRFBWNDsKIAkJYnJlYWs7CiAJY2FzZSBTQ1RQX1Y0X0ZMT1c6Ci0JCWl4Z2JlX2F0cl9zZXRfbDR0eXBlXzgyNTk5KCZpbnB1dF9zdHJ1Y3QsIElYR0JFX0FUUl9MNFRZUEVfU0NUUCk7CisJCWlucHV0X3N0cnVjdC5mb3JtYXR0ZWQuZmxvd190eXBlID0gSVhHQkVfQVRSX0ZMT1dfVFlQRV9TQ1RQVjQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsKIAl9CiAKLQkvKiBNYXNrIGJpdHMgZnJvbSB0aGUgaW5wdXRzIGJhc2VkIG9uIHVzZXItc3VwcGxpZWQgbWFzayAqLwotCWl4Z2JlX2F0cl9zZXRfc3JjX2lwdjRfODI1OTkoJmlucHV0X3N0cnVjdCwKLQkgICAgICAgICAgICAoZnMuaF91LnRjcF9pcDRfc3BlYy5pcDRzcmMgJiB+ZnMubV91LnRjcF9pcDRfc3BlYy5pcDRzcmMpKTsKLQlpeGdiZV9hdHJfc2V0X2RzdF9pcHY0XzgyNTk5KCZpbnB1dF9zdHJ1Y3QsCi0JICAgICAgICAgICAgKGZzLmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0ICYgfmZzLm1fdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KSk7Ci0JLyogODI1OTkgZXhwZWN0cyB0aGVzZSB0byBiZSBieXRlLXN3YXBwZWQgZm9yIHBlcmZlY3QgZmlsdGVyaW5nICovCi0JaXhnYmVfYXRyX3NldF9zcmNfcG9ydF84MjU5OSgmaW5wdXRfc3RydWN0LAotCSAgICAgICAoKG50b2hzKGZzLmhfdS50Y3BfaXA0X3NwZWMucHNyYykpICYgfmZzLm1fdS50Y3BfaXA0X3NwZWMucHNyYykpOwotCWl4Z2JlX2F0cl9zZXRfZHN0X3BvcnRfODI1OTkoJmlucHV0X3N0cnVjdCwKLQkgICAgICAgKChudG9ocyhmcy5oX3UudGNwX2lwNF9zcGVjLnBkc3QpKSAmIH5mcy5tX3UudGNwX2lwNF9zcGVjLnBkc3QpKTsKKwkvKiBjb3B5IHZsYW4gdGFnIG1pbnVzIHRoZSBDRkkgYml0ICovCisJaWYgKChmcy0+dmxhbl90YWcgJiAweEVGRkYpIHx8ICh+ZnMtPnZsYW5fdGFnX21hc2sgJiAweEVGRkYpKSB7CisJCWlucHV0X3N0cnVjdC5mb3JtYXR0ZWQudmxhbl9pZCA9IGh0b25zKGZzLT52bGFuX3RhZyAmIDB4RUZGRik7CisJCWlmICghZnMtPnZsYW5fdGFnX21hc2spIHsKKwkJCWlucHV0X21hc2tzLnZsYW5faWRfbWFzayA9IGh0b25zKDB4RUZGRik7CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKH5mcy0+dmxhbl90YWdfbWFzayAmIDB4RUZGRikgeworCQkJLyogYWxsIG9mIHRoZXNlIGFyZSB2YWxpZCB2bGFuLW1hc2sgdmFsdWVzICovCisJCQljYXNlIDB4RUZGRjoKKwkJCWNhc2UgMHhFMDAwOgorCQkJY2FzZSAweDBGRkY6CisJCQljYXNlIDB4MDAwMDoKKwkJCQlpbnB1dF9tYXNrcy52bGFuX2lkX21hc2sgPQorCQkJCQlodG9ucyh+ZnMtPnZsYW5fdGFnX21hc2spOworCQkJCWJyZWFrOworCQkJLyogZXhpdCB3aXRoIGVycm9yIGlmIHZsYW4tbWFzayBpcyBpbnZhbGlkICovCisJCQlkZWZhdWx0OgorCQkJCWVfZXJyKGRydiwgIlBhcnRpYWwgVkxBTiBJRCBvciAiCisJCQkJICAgICAgInByaW9yaXR5IG1hc2sgaW4gdmxhbi1tYXNrIGlzIG5vdCAiCisJCQkJICAgICAgInN1cHBvcnRlZCBieSBoYXJkd2FyZVxuIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJfQogCi0JLyogVkxBTiBhbmQgRmxleCBieXRlcyBhcmUgZWl0aGVyIGNvbXBsZXRlbHkgbWFza2VkIG9yIG5vdCAqLwotCWlmICghZnMudmxhbl90YWdfbWFzaykKLQkJaXhnYmVfYXRyX3NldF92bGFuX2lkXzgyNTk5KCZpbnB1dF9zdHJ1Y3QsIGZzLnZsYW5fdGFnKTsKKwkvKiBtYWtlIHN1cmUgd2Ugb25seSB1c2UgdGhlIGZpcnN0IDIgYnl0ZXMgb2YgdXNlciBkYXRhICovCisJaWYgKChmcy0+ZGF0YSAmIDB4RkZGRikgfHwgKH5mcy0+ZGF0YV9tYXNrICYgMHhGRkZGKSkgeworCQlpbnB1dF9zdHJ1Y3QuZm9ybWF0dGVkLmZsZXhfYnl0ZXMgPSBodG9ucyhmcy0+ZGF0YSAmIDB4RkZGRik7CisJCWlmICghKGZzLT5kYXRhX21hc2sgJiAweEZGRkYpKSB7CisJCQlpbnB1dF9tYXNrcy5mbGV4X21hc2sgPSAweEZGRkY7CisJCX0gZWxzZSBpZiAofmZzLT5kYXRhX21hc2sgJiAweEZGRkYpIHsKKwkJCWVfZXJyKGRydiwgIlBhcnRpYWwgdXNlci1kZWYtbWFzayBpcyBub3QgIgorCQkJICAgICAgInN1cHBvcnRlZCBieSBoYXJkd2FyZVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CiAKLQlpZiAoIWlucHV0X21hc2tzLmRhdGFfbWFzaykKLQkJLyogbWFrZSBzdXJlIHdlIG9ubHkgdXNlIHRoZSBmaXJzdCAyIGJ5dGVzIG9mIHVzZXIgZGF0YSAqLwotCQlpeGdiZV9hdHJfc2V0X2ZsZXhfYnl0ZV84MjU5OSgmaW5wdXRfc3RydWN0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnMuZGF0YSAmIDB4ZmZmZikpOworCS8qCisJICogQ29weSBpbnB1dCBpbnRvIGZvcm1hdHRlZCBzdHJ1Y3R1cmVzCisJICoKKwkgKiBUaGVzZSBhc3NpZ25tZW50cyBhcmUgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBsb2dpYworCSAqIElmIG5laXRoZXIgaW5wdXQgb3IgbWFzayBhcmUgc2V0IGFzc3VtZSB2YWx1ZSBpcyBtYXNrZWQgb3V0LgorCSAqIElmIGlucHV0IGlzIHNldCwgYnV0IG1hc2sgaXMgbm90IG1hc2sgc2hvdWxkIGRlZmF1bHQgdG8gYWNjZXB0IGFsbC4KKwkgKiBJZiBpbnB1dCBpcyBub3Qgc2V0LCBidXQgbWFzayBpcyBzZXQgdGhlbiBtYXNrIGxpa2VseSByZXN1bHRzIGluIDAuCisJICogSWYgaW5wdXQgaXMgc2V0IGFuZCBtYXNrIGlzIHNldCB0aGVuIGFzc2lnbiBib3RoLgorCSAqLworCWlmIChmcy0+aF91LnRjcF9pcDRfc3BlYy5pcDRzcmMgfHwgfmZzLT5tX3UudGNwX2lwNF9zcGVjLmlwNHNyYykgeworCQlpbnB1dF9zdHJ1Y3QuZm9ybWF0dGVkLnNyY19pcFswXSA9IGZzLT5oX3UudGNwX2lwNF9zcGVjLmlwNHNyYzsKKwkJaWYgKCFmcy0+bV91LnRjcF9pcDRfc3BlYy5pcDRzcmMpCisJCQlpbnB1dF9tYXNrcy5zcmNfaXBfbWFza1swXSA9IDB4RkZGRkZGRkY7CisJCWVsc2UKKwkJCWlucHV0X21hc2tzLnNyY19pcF9tYXNrWzBdID0KKwkJCQl+ZnMtPm1fdS50Y3BfaXA0X3NwZWMuaXA0c3JjOworCX0KKwlpZiAoZnMtPmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0IHx8IH5mcy0+bV91LnRjcF9pcDRfc3BlYy5pcDRkc3QpIHsKKwkJaW5wdXRfc3RydWN0LmZvcm1hdHRlZC5kc3RfaXBbMF0gPSBmcy0+aF91LnRjcF9pcDRfc3BlYy5pcDRkc3Q7CisJCWlmICghZnMtPm1fdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KQorCQkJaW5wdXRfbWFza3MuZHN0X2lwX21hc2tbMF0gPSAweEZGRkZGRkZGOworCQllbHNlCisJCQlpbnB1dF9tYXNrcy5kc3RfaXBfbWFza1swXSA9CisJCQkJfmZzLT5tX3UudGNwX2lwNF9zcGVjLmlwNGRzdDsKKwl9CisJaWYgKGZzLT5oX3UudGNwX2lwNF9zcGVjLnBzcmMgfHwgfmZzLT5tX3UudGNwX2lwNF9zcGVjLnBzcmMpIHsKKwkJaW5wdXRfc3RydWN0LmZvcm1hdHRlZC5zcmNfcG9ydCA9IGZzLT5oX3UudGNwX2lwNF9zcGVjLnBzcmM7CisJCWlmICghZnMtPm1fdS50Y3BfaXA0X3NwZWMucHNyYykKKwkJCWlucHV0X21hc2tzLnNyY19wb3J0X21hc2sgPSAweEZGRkY7CisJCWVsc2UKKwkJCWlucHV0X21hc2tzLnNyY19wb3J0X21hc2sgPSB+ZnMtPm1fdS50Y3BfaXA0X3NwZWMucHNyYzsKKwl9CisJaWYgKGZzLT5oX3UudGNwX2lwNF9zcGVjLnBkc3QgfHwgfmZzLT5tX3UudGNwX2lwNF9zcGVjLnBkc3QpIHsKKwkJaW5wdXRfc3RydWN0LmZvcm1hdHRlZC5kc3RfcG9ydCA9IGZzLT5oX3UudGNwX2lwNF9zcGVjLnBkc3Q7CisJCWlmICghZnMtPm1fdS50Y3BfaXA0X3NwZWMucGRzdCkKKwkJCWlucHV0X21hc2tzLmRzdF9wb3J0X21hc2sgPSAweEZGRkY7CisJCWVsc2UKKwkJCWlucHV0X21hc2tzLmRzdF9wb3J0X21hc2sgPSB+ZnMtPm1fdS50Y3BfaXA0X3NwZWMucGRzdDsKKwl9CiAKIAkvKiBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBkcm9wIG9yIHJvdXRlIHRoZSBwYWNrZXQgKi8KLQlpZiAoZnMuYWN0aW9uID09IEVUSFRPT0xfUlhOVFVQTEVfQUNUSU9OX0RST1ApCisJaWYgKGZzLT5hY3Rpb24gPT0gRVRIVE9PTF9SWE5UVVBMRV9BQ1RJT05fRFJPUCkKIAkJdGFyZ2V0X3F1ZXVlID0gTUFYX1JYX1FVRVVFUyAtIDE7CiAJZWxzZQotCQl0YXJnZXRfcXVldWUgPSBmcy5hY3Rpb247CisJCXRhcmdldF9xdWV1ZSA9IGZzLT5hY3Rpb247CiAKIAlzcGluX2xvY2soJmFkYXB0ZXItPmZkaXJfcGVyZmVjdF9sb2NrKTsKLQlpeGdiZV9mZGlyX2FkZF9wZXJmZWN0X2ZpbHRlcl84MjU5OSgmYWRhcHRlci0+aHcsICZpbnB1dF9zdHJ1Y3QsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlucHV0X21hc2tzLCAwLCB0YXJnZXRfcXVldWUpOworCWVyciA9IGl4Z2JlX2ZkaXJfYWRkX3BlcmZlY3RfZmlsdGVyXzgyNTk5KCZhZGFwdGVyLT5odywKKwkJCQkJCSAgJmlucHV0X3N0cnVjdCwKKwkJCQkJCSAgJmlucHV0X21hc2tzLCAwLAorCQkJCQkJICB0YXJnZXRfcXVldWUpOwogCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5mZGlyX3BlcmZlY3RfbG9jayk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyID8gLTEgOiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGl4Z2JlX2V0aHRvb2xfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDM4YWI0ZjMuLmEwNjA2MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTMwMjQsNiArMzAyNCwzNiBAQAogCX0KIH0KIAordm9pZCBpeGdiZV9kaXNhYmxlX3J4X3F1ZXVlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgIHN0cnVjdCBpeGdiZV9yaW5nICpyaW5nKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IHdhaXRfbG9vcCA9IElYR0JFX01BWF9SWF9ERVNDX1BPTEw7CisJdTMyIHJ4ZGN0bDsKKwl1OCByZWdfaWR4ID0gcmluZy0+cmVnX2lkeDsKKworCXJ4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWERDVEwocmVnX2lkeCkpOworCXJ4ZGN0bCAmPSB+SVhHQkVfUlhEQ1RMX0VOQUJMRTsKKworCS8qIHdyaXRlIHZhbHVlIGJhY2sgd2l0aCBSWERDVEwuRU5BQkxFIGJpdCBjbGVhcmVkICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWERDVEwocmVnX2lkeCksIHJ4ZGN0bCk7CisKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCICYmCisJICAgICEoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xJTktTKSAmIElYR0JFX0xJTktTX1VQKSkKKwkJcmV0dXJuOworCisJLyogdGhlIGhhcmR3YXJlIG1heSB0YWtlIHVwIHRvIDEwMHVzIHRvIHJlYWxseSBkaXNhYmxlIHRoZSByeCBxdWV1ZSAqLworCWRvIHsKKwkJdWRlbGF5KDEwKTsKKwkJcnhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYRENUTChyZWdfaWR4KSk7CisJfSB3aGlsZSAoLS13YWl0X2xvb3AgJiYgKHJ4ZGN0bCAmIElYR0JFX1JYRENUTF9FTkFCTEUpKTsKKworCWlmICghd2FpdF9sb29wKSB7CisJCWVfZXJyKGRydiwgIlJYRENUTC5FTkFCTEUgb24gUnggcXVldWUgJWQgbm90IGNsZWFyZWQgd2l0aGluICIKKwkJICAgICAgInRoZSBwb2xsaW5nIHBlcmlvZFxuIiwgcmVnX2lkeCk7CisJfQorfQorCiB2b2lkIGl4Z2JlX2NvbmZpZ3VyZV9yeF9yaW5nKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqcmluZykKIHsKQEAgLTMwMzQsOSArMzA2NCw3IEBACiAKIAkvKiBkaXNhYmxlIHF1ZXVlIHRvIGF2b2lkIGlzc3VlcyB3aGlsZSB1cGRhdGluZyBzdGF0ZSAqLwogCXJ4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWERDVEwocmVnX2lkeCkpOwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhEQ1RMKHJlZ19pZHgpLAotCQkJcnhkY3RsICYgfklYR0JFX1JYRENUTF9FTkFCTEUpOwotCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKwlpeGdiZV9kaXNhYmxlX3J4X3F1ZXVlKGFkYXB0ZXIsIHJpbmcpOwogCiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SREJBTChyZWdfaWR4KSwgKHJkYmEgJiBETUFfQklUX01BU0soMzIpKSk7CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SREJBSChyZWdfaWR4KSwgKHJkYmEgPj4gMzIpKTsKQEAgLTQwNjQsNyArNDA5MiwxMSBAQAogCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENUUkwpOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByeGN0cmwgJiB+SVhHQkVfUlhDVFJMX1JYRU4pOwogCi0JSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCS8qIGRpc2FibGUgYWxsIGVuYWJsZWQgcnggcXVldWVzICovCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJLyogdGhpcyBjYWxsIGFsc28gZmx1c2hlcyB0aGUgcHJldmlvdXMgd3JpdGUgKi8KKwkJaXhnYmVfZGlzYWJsZV9yeF9xdWV1ZShhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwogCW1zbGVlcCgxMCk7CiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKQEAgLTQ3ODksNiArNDgyMSwxMiBAQAogCiAJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRENCX0VOQUJMRUQ7CiAJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfUlNTX0VOQUJMRUQ7CisJaWYgKGFkYXB0ZXItPmZsYWdzICYgKElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEUgfAorCQkJICAgICAgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkpIHsKKwkJZV9lcnIocHJvYmUsCisJCSAgICAgICJGbG93IERpcmVjdG9yIGlzIG5vdCBzdXBwb3J0ZWQgd2hpbGUgbXVsdGlwbGUgIgorCQkgICAgICAicXVldWVzIGFyZSBkaXNhYmxlZC4gIERpc2FibGluZyBGbG93IERpcmVjdG9yXG4iKTsKKwl9CiAJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEU7CiAJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRkRJUl9QRVJGRUNUX0NBUEFCTEU7CiAJYWRhcHRlci0+YXRyX3NhbXBsZV9yYXRlID0gMDsKQEAgLTUwOTQsMTYgKzUxMzIsMTEgQEAKIAkJYWRhcHRlci0+ZmxhZ3MyIHw9IElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEOwogCQlpZiAoaHctPmRldmljZV9pZCA9PSBJWEdCRV9ERVZfSURfODI1OTlfVDNfTE9NKQogCQkJYWRhcHRlci0+ZmxhZ3MyIHw9IElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0NBUEFCTEU7Ci0JCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9OVFVQTEUpIHsKLQkJCS8qIEZsb3cgRGlyZWN0b3IgcGVyZmVjdCBmaWx0ZXIgZW5hYmxlZCAqLwotCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRTsKLQkJCWFkYXB0ZXItPmF0cl9zYW1wbGVfcmF0ZSA9IDA7Ci0JCQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+ZmRpcl9wZXJmZWN0X2xvY2spOwotCQl9IGVsc2UgewotCQkJLyogRmxvdyBEaXJlY3RvciBoYXNoIGZpbHRlcnMgZW5hYmxlZCAqLwotCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRTsKLQkJCWFkYXB0ZXItPmF0cl9zYW1wbGVfcmF0ZSA9IDIwOwotCQl9CisJCS8qIG4tdHVwbGUgc3VwcG9ydCBleGlzdHMsIGFsd2F5cyBpbml0IG91ciBzcGlubG9jayAqLworCQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+ZmRpcl9wZXJmZWN0X2xvY2spOworCQkvKiBGbG93IERpcmVjdG9yIGhhc2ggZmlsdGVycyBlbmFibGVkICovCisJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEU7CisJCWFkYXB0ZXItPmF0cl9zYW1wbGVfcmF0ZSA9IDIwOwogCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0ZESVJdLmluZGljZXMgPQogCQkJCQkJCSBJWEdCRV9NQVhfRkRJUl9JTkRJQ0VTOwogCQlhZGFwdGVyLT5mZGlyX3BiYWxsb2MgPSAwOwpAQCAtNjQ3NCwzOCArNjUwNyw5MiBAQAogCXdyaXRlbChpLCB0eF9yaW5nLT50YWlsKTsKIH0KIAotc3RhdGljIHZvaWQgaXhnYmVfYXRyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgICB1OCBxdWV1ZSwgdTMyIHR4X2ZsYWdzLCBfX2JlMTYgcHJvdG9jb2wpCitzdGF0aWMgdm9pZCBpeGdiZV9hdHIoc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIHUzMiB0eF9mbGFncywgX19iZTE2IHByb3RvY29sKQogewotCXN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgYXRyX2lucHV0OwotCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7Ci0Jc3RydWN0IGV0aGhkciAqZXRoID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CisJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9IHJpbmctPnFfdmVjdG9yOworCXVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIGlucHV0ID0geyAuZHdvcmQgPSAwIH07CisJdW5pb24gaXhnYmVfYXRyX2hhc2hfZHdvcmQgY29tbW9uID0geyAuZHdvcmQgPSAwIH07CisJdW5pb24geworCQl1bnNpZ25lZCBjaGFyICpuZXR3b3JrOworCQlzdHJ1Y3QgaXBoZHIgKmlwdjQ7CisJCXN0cnVjdCBpcHY2aGRyICppcHY2OworCX0gaGRyOwogCXN0cnVjdCB0Y3BoZHIgKnRoOwotCXUxNiB2bGFuX2lkOworCV9fYmUxNiB2bGFuX2lkOwogCi0JLyogUmlnaHQgbm93LCB3ZSBzdXBwb3J0IElQdjQgdy8gVENQIG9ubHkgKi8KLQlpZiAocHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApIHx8Ci0JICAgIGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCisJLyogaWYgcmluZyBkb2Vzbid0IGhhdmUgYSBpbnRlcnJ1cHQgdmVjdG9yLCBjYW5ub3QgcGVyZm9ybSBBVFIgKi8KKwlpZiAoIXFfdmVjdG9yKQogCQlyZXR1cm47CiAKLQltZW1zZXQoJmF0cl9pbnB1dCwgMCwgc2l6ZW9mKHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQpKTsKKwkvKiBkbyBub3RoaW5nIGlmIHNhbXBsaW5nIGlzIGRpc2FibGVkICovCisJaWYgKCFyaW5nLT5hdHJfc2FtcGxlX3JhdGUpCisJCXJldHVybjsKIAotCXZsYW5faWQgPSAodHhfZmxhZ3MgJiBJWEdCRV9UWF9GTEFHU19WTEFOX01BU0spID4+Ci0JCSAgIElYR0JFX1RYX0ZMQUdTX1ZMQU5fU0hJRlQ7CisJcmluZy0+YXRyX2NvdW50Kys7CisKKwkvKiBzbmFnIG5ldHdvcmsgaGVhZGVyIHRvIGdldCBMNCB0eXBlIGFuZCBhZGRyZXNzICovCisJaGRyLm5ldHdvcmsgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKKworCS8qIEN1cnJlbnRseSBvbmx5IElQdjQvSVB2NiB3aXRoIFRDUCBpcyBzdXBwb3J0ZWQgKi8KKwlpZiAoKHByb3RvY29sICE9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNikgfHwKKwkgICAgIGhkci5pcHY2LT5uZXh0aGRyICE9IElQUFJPVE9fVENQKSAmJgorCSAgICAocHJvdG9jb2wgIT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCkgfHwKKwkgICAgIGhkci5pcHY0LT5wcm90b2NvbCAhPSBJUFBST1RPX1RDUCkpCisJCXJldHVybjsKIAogCXRoID0gdGNwX2hkcihza2IpOwogCi0JaXhnYmVfYXRyX3NldF92bGFuX2lkXzgyNTk5KCZhdHJfaW5wdXQsIHZsYW5faWQpOwotCWl4Z2JlX2F0cl9zZXRfc3JjX3BvcnRfODI1OTkoJmF0cl9pbnB1dCwgdGgtPmRlc3QpOwotCWl4Z2JlX2F0cl9zZXRfZHN0X3BvcnRfODI1OTkoJmF0cl9pbnB1dCwgdGgtPnNvdXJjZSk7Ci0JaXhnYmVfYXRyX3NldF9mbGV4X2J5dGVfODI1OTkoJmF0cl9pbnB1dCwgZXRoLT5oX3Byb3RvKTsKLQlpeGdiZV9hdHJfc2V0X2w0dHlwZV84MjU5OSgmYXRyX2lucHV0LCBJWEdCRV9BVFJfTDRUWVBFX1RDUCk7Ci0JLyogc3JjIGFuZCBkc3QgYXJlIGludmVydGVkLCB0aGluayBob3cgdGhlIHJlY2VpdmVyIHNlZXMgdGhlbSAqLwotCWl4Z2JlX2F0cl9zZXRfc3JjX2lwdjRfODI1OTkoJmF0cl9pbnB1dCwgaXBoLT5kYWRkcik7Ci0JaXhnYmVfYXRyX3NldF9kc3RfaXB2NF84MjU5OSgmYXRyX2lucHV0LCBpcGgtPnNhZGRyKTsKKwkvKiBza2lwIHRoaXMgcGFja2V0IHNpbmNlIHRoZSBzb2NrZXQgaXMgY2xvc2luZyAqLworCWlmICh0aC0+ZmluKQorCQlyZXR1cm47CisKKwkvKiBzYW1wbGUgb24gYWxsIHN5biBwYWNrZXRzIG9yIG9uY2UgZXZlcnkgYXRyIHNhbXBsZSBjb3VudCAqLworCWlmICghdGgtPnN5biAmJiAocmluZy0+YXRyX2NvdW50IDwgcmluZy0+YXRyX3NhbXBsZV9yYXRlKSkKKwkJcmV0dXJuOworCisJLyogcmVzZXQgc2FtcGxlIGNvdW50ICovCisJcmluZy0+YXRyX2NvdW50ID0gMDsKKworCXZsYW5faWQgPSBodG9ucyh0eF9mbGFncyA+PiBJWEdCRV9UWF9GTEFHU19WTEFOX1NISUZUKTsKKworCS8qCisJICogc3JjIGFuZCBkc3QgYXJlIGludmVydGVkLCB0aGluayBob3cgdGhlIHJlY2VpdmVyIHNlZXMgdGhlbQorCSAqCisJICogVGhlIGlucHV0IGlzIGJyb2tlbiBpbnRvIHR3byBzZWN0aW9ucywgYSBub24tY29tcHJlc3NlZCBzZWN0aW9uCisJICogY29udGFpbmluZyB2bV9wb29sLCB2bGFuX2lkLCBhbmQgZmxvd190eXBlLiAgVGhlIHJlc3Qgb2YgdGhlIGRhdGEKKwkgKiBpcyBYT1JlZCB0b2dldGhlciBhbmQgc3RvcmVkIGluIHRoZSBjb21wcmVzc2VkIGR3b3JkLgorCSAqLworCWlucHV0LmZvcm1hdHRlZC52bGFuX2lkID0gdmxhbl9pZDsKKworCS8qCisJICogc2luY2Ugc3JjIHBvcnQgYW5kIGZsZXggYnl0ZXMgb2NjdXB5IHRoZSBzYW1lIHdvcmQgWE9SIHRoZW0gdG9nZXRoZXIKKwkgKiBhbmQgd3JpdGUgdGhlIHZhbHVlIHRvIHNvdXJjZSBwb3J0IHBvcnRpb24gb2YgY29tcHJlc3NlZCBkd29yZAorCSAqLworCWlmICh2bGFuX2lkKQorCQljb21tb24ucG9ydC5zcmMgXj0gdGgtPmRlc3QgXiBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKTsKKwllbHNlCisJCWNvbW1vbi5wb3J0LnNyYyBePSB0aC0+ZGVzdCBeIHByb3RvY29sOworCWNvbW1vbi5wb3J0LmRzdCBePSB0aC0+c291cmNlOworCisJaWYgKHByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApKSB7CisJCWlucHV0LmZvcm1hdHRlZC5mbG93X3R5cGUgPSBJWEdCRV9BVFJfRkxPV19UWVBFX1RDUFY0OworCQljb21tb24uaXAgXj0gaGRyLmlwdjQtPnNhZGRyIF4gaGRyLmlwdjQtPmRhZGRyOworCX0gZWxzZSB7CisJCWlucHV0LmZvcm1hdHRlZC5mbG93X3R5cGUgPSBJWEdCRV9BVFJfRkxPV19UWVBFX1RDUFY2OworCQljb21tb24uaXAgXj0gaGRyLmlwdjYtPnNhZGRyLnM2X2FkZHIzMlswXSBeCisJCQkgICAgIGhkci5pcHY2LT5zYWRkci5zNl9hZGRyMzJbMV0gXgorCQkJICAgICBoZHIuaXB2Ni0+c2FkZHIuczZfYWRkcjMyWzJdIF4KKwkJCSAgICAgaGRyLmlwdjYtPnNhZGRyLnM2X2FkZHIzMlszXSBeCisJCQkgICAgIGhkci5pcHY2LT5kYWRkci5zNl9hZGRyMzJbMF0gXgorCQkJICAgICBoZHIuaXB2Ni0+ZGFkZHIuczZfYWRkcjMyWzFdIF4KKwkJCSAgICAgaGRyLmlwdjYtPmRhZGRyLnM2X2FkZHIzMlsyXSBeCisJCQkgICAgIGhkci5pcHY2LT5kYWRkci5zNl9hZGRyMzJbM107CisJfQogCiAJLyogVGhpcyBhc3N1bWVzIHRoZSBSeCBxdWV1ZSBhbmQgVHggcXVldWUgYXJlIGJvdW5kIHRvIHRoZSBzYW1lIENQVSAqLwotCWl4Z2JlX2ZkaXJfYWRkX3NpZ25hdHVyZV9maWx0ZXJfODI1OTkoJmFkYXB0ZXItPmh3LCAmYXRyX2lucHV0LCBxdWV1ZSk7CisJaXhnYmVfZmRpcl9hZGRfc2lnbmF0dXJlX2ZpbHRlcl84MjU5OSgmcV92ZWN0b3ItPmFkYXB0ZXItPmh3LAorCQkJCQkgICAgICBpbnB1dCwgY29tbW9uLCByaW5nLT5xdWV1ZV9pbmRleCk7CiB9CiAKIHN0YXRpYyBpbnQgX19peGdiZV9tYXliZV9zdG9wX3R4KHN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nLCBpbnQgc2l6ZSkKQEAgLTY2NzYsMTYgKzY3NjMsOCBAQAogCWNvdW50ID0gaXhnYmVfdHhfbWFwKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MsIGZpcnN0LCBoZHJfbGVuKTsKIAlpZiAoY291bnQpIHsKIAkJLyogYWRkIHRoZSBBVFIgZmlsdGVyIGlmIEFUUiBpcyBvbiAqLwotCQlpZiAodHhfcmluZy0+YXRyX3NhbXBsZV9yYXRlKSB7Ci0JCQkrK3R4X3JpbmctPmF0cl9jb3VudDsKLQkJCWlmICgodHhfcmluZy0+YXRyX2NvdW50ID49IHR4X3JpbmctPmF0cl9zYW1wbGVfcmF0ZSkgJiYKLQkJCSAgICAgdGVzdF9iaXQoX19JWEdCRV9UWF9GRElSX0lOSVRfRE9ORSwKLQkJCQkgICAgICAmdHhfcmluZy0+c3RhdGUpKSB7Ci0JCQkJaXhnYmVfYXRyKGFkYXB0ZXIsIHNrYiwgdHhfcmluZy0+cXVldWVfaW5kZXgsCi0JCQkJCSAgdHhfZmxhZ3MsIHByb3RvY29sKTsKLQkJCQl0eF9yaW5nLT5hdHJfY291bnQgPSAwOwotCQkJfQotCQl9CisJCWlmICh0ZXN0X2JpdChfX0lYR0JFX1RYX0ZESVJfSU5JVF9ET05FLCAmdHhfcmluZy0+c3RhdGUpKQorCQkJaXhnYmVfYXRyKHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MsIHByb3RvY29sKTsKIAkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KTsKIAkJdHhxLT50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJdHhxLT50eF9wYWNrZXRzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKaW5kZXggNDQ2ZjM0NjcuLmZkMzM1OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKQEAgLTE5NDcsMTAgKzE5NDcsOSBAQAogI2RlZmluZSBJWEdCRV9GRElSTV9WTEFOSUQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBJWEdCRV9GRElSTV9WTEFOUCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgogI2RlZmluZSBJWEdCRV9GRElSTV9QT09MICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBJWEdCRV9GRElSTV9MM1AgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBJWEdCRV9GRElSTV9MNFAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBJWEdCRV9GRElSTV9GTEVYICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBJWEdCRV9GRElSTV9ESVB2NiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBJWEdCRV9GRElSTV9MNFAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJWEdCRV9GRElSTV9GTEVYICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJWEdCRV9GRElSTV9ESVB2NiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAogCiAjZGVmaW5lIElYR0JFX0ZESVJGUkVFX0ZSRUVfTUFTSyAgICAgICAgICAgICAgICAweEZGRkYKICNkZWZpbmUgSVhHQkVfRkRJUkZSRUVfRlJFRV9TSElGVCAgICAgICAgICAgICAgIDAKQEAgLTE5OTAsNiArMTk4OSw3IEBACiAjZGVmaW5lIElYR0JFX0ZESVJDTURfTEFTVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCiAjZGVmaW5lIElYR0JFX0ZESVJDTURfQ09MTElTSU9OICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCiAjZGVmaW5lIElYR0JFX0ZESVJDTURfUVVFVUVfRU4gICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIElYR0JFX0ZESVJDTURfRkxPV19UWVBFX1NISUZUICAgICAgICAgICA1CiAjZGVmaW5lIElYR0JFX0ZESVJDTURfUlhfUVVFVUVfU0hJRlQgICAgICAgICAgICAxNgogI2RlZmluZSBJWEdCRV9GRElSQ01EX1ZUX1BPT0xfU0hJRlQgICAgICAgICAgICAgMjQKICNkZWZpbmUgSVhHQkVfRkRJUl9JTklUX0RPTkVfUE9MTCAgICAgICAgICAgICAgIDEwCkBAIC0yMTQ3LDUxICsyMTQ3LDgwIEBACiAjZGVmaW5lIEZDX0xPV19XQVRFUihNVFUpICAoMiAqICgyICogUEFVU0VfTVRVKE1UVSkgKyBQQVVTRV9SVFQpKQogCiAvKiBTb2Z0d2FyZSBBVFIgaGFzaCBrZXlzICovCi0jZGVmaW5lIElYR0JFX0FUUl9CVUNLRVRfSEFTSF9LRVkgICAgMHhFMjE0QUQzRAotI2RlZmluZSBJWEdCRV9BVFJfU0lHTkFUVVJFX0hBU0hfS0VZIDB4MTQzNjREMTcKKyNkZWZpbmUgSVhHQkVfQVRSX0JVQ0tFVF9IQVNIX0tFWSAgICAweDNEQUQxNEUyCisjZGVmaW5lIElYR0JFX0FUUl9TSUdOQVRVUkVfSEFTSF9LRVkgMHgxNzREMzYxNAogCi0vKiBTb2Z0d2FyZSBBVFIgaW5wdXQgc3RyZWFtIG9mZnNldHMgYW5kIG1hc2tzICovCi0jZGVmaW5lIElYR0JFX0FUUl9WTEFOX09GRlNFVCAgICAgICAwCi0jZGVmaW5lIElYR0JFX0FUUl9TUkNfSVBWNl9PRkZTRVQgICAyCi0jZGVmaW5lIElYR0JFX0FUUl9TUkNfSVBWNF9PRkZTRVQgIDE0Ci0jZGVmaW5lIElYR0JFX0FUUl9EU1RfSVBWNl9PRkZTRVQgIDE4Ci0jZGVmaW5lIElYR0JFX0FUUl9EU1RfSVBWNF9PRkZTRVQgIDMwCi0jZGVmaW5lIElYR0JFX0FUUl9TUkNfUE9SVF9PRkZTRVQgIDM0Ci0jZGVmaW5lIElYR0JFX0FUUl9EU1RfUE9SVF9PRkZTRVQgIDM2Ci0jZGVmaW5lIElYR0JFX0FUUl9GTEVYX0JZVEVfT0ZGU0VUIDM4Ci0jZGVmaW5lIElYR0JFX0FUUl9WTV9QT09MX09GRlNFVCAgIDQwCi0jZGVmaW5lIElYR0JFX0FUUl9MNFRZUEVfT0ZGU0VUICAgIDQxCi0KKy8qIFNvZnR3YXJlIEFUUiBpbnB1dCBzdHJlYW0gdmFsdWVzIGFuZCBtYXNrcyAqLworI2RlZmluZSBJWEdCRV9BVFJfSEFTSF9NQVNLICAgICAweDdmZmYKICNkZWZpbmUgSVhHQkVfQVRSX0w0VFlQRV9NQVNLICAgICAgMHgzCi0jZGVmaW5lIElYR0JFX0FUUl9MNFRZUEVfSVBWNl9NQVNLIDB4NAogI2RlZmluZSBJWEdCRV9BVFJfTDRUWVBFX1VEUCAgICAgICAweDEKICNkZWZpbmUgSVhHQkVfQVRSX0w0VFlQRV9UQ1AgICAgICAgMHgyCiAjZGVmaW5lIElYR0JFX0FUUl9MNFRZUEVfU0NUUCAgICAgIDB4MwotI2RlZmluZSBJWEdCRV9BVFJfSEFTSF9NQVNLICAgICAweDdmZmYKKyNkZWZpbmUgSVhHQkVfQVRSX0w0VFlQRV9JUFY2X01BU0sgMHg0CitlbnVtIGl4Z2JlX2F0cl9mbG93X3R5cGUgeworCUlYR0JFX0FUUl9GTE9XX1RZUEVfSVBWNCAgID0gMHgwLAorCUlYR0JFX0FUUl9GTE9XX1RZUEVfVURQVjQgID0gMHgxLAorCUlYR0JFX0FUUl9GTE9XX1RZUEVfVENQVjQgID0gMHgyLAorCUlYR0JFX0FUUl9GTE9XX1RZUEVfU0NUUFY0ID0gMHgzLAorCUlYR0JFX0FUUl9GTE9XX1RZUEVfSVBWNiAgID0gMHg0LAorCUlYR0JFX0FUUl9GTE9XX1RZUEVfVURQVjYgID0gMHg1LAorCUlYR0JFX0FUUl9GTE9XX1RZUEVfVENQVjYgID0gMHg2LAorCUlYR0JFX0FUUl9GTE9XX1RZUEVfU0NUUFY2ID0gMHg3LAorfTsKIAogLyogRmxvdyBEaXJlY3RvciBBVFIgaW5wdXQgc3RydWN0LiAqLwotc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCB7Ci0JLyogQnl0ZSBsYXlvdXQgaW4gb3JkZXIsIGFsbCB2YWx1ZXMgd2l0aCBNU0IgZmlyc3Q6Cit1bmlvbiBpeGdiZV9hdHJfaW5wdXQgeworCS8qCisJICogQnl0ZSBsYXlvdXQgaW4gb3JkZXIsIGFsbCB2YWx1ZXMgd2l0aCBNU0IgZmlyc3Q6CiAJICoKKwkgKiB2bV9wb29sICAgIC0gMSBieXRlCisJICogZmxvd190eXBlICAtIDEgYnl0ZQogCSAqIHZsYW5faWQgICAgLSAyIGJ5dGVzCiAJICogc3JjX2lwICAgICAtIDE2IGJ5dGVzCiAJICogZHN0X2lwICAgICAtIDE2IGJ5dGVzCiAJICogc3JjX3BvcnQgICAtIDIgYnl0ZXMKIAkgKiBkc3RfcG9ydCAgIC0gMiBieXRlcwogCSAqIGZsZXhfYnl0ZXMgLSAyIGJ5dGVzCi0JICogdm1fcG9vbCAgICAtIDEgYnl0ZQotCSAqIGw0dHlwZSAgICAgLSAxIGJ5dGUKKwkgKiByc3ZkMCAgICAgIC0gMiBieXRlcyAtIHNwYWNlIHJlc2VydmVkIG11c3QgYmUgMC4KIAkgKi8KLQl1OCBieXRlX3N0cmVhbVs0Ml07CisJc3RydWN0IHsKKwkJdTggICAgIHZtX3Bvb2w7CisJCXU4ICAgICBmbG93X3R5cGU7CisJCV9fYmUxNiB2bGFuX2lkOworCQlfX2JlMzIgZHN0X2lwWzRdOworCQlfX2JlMzIgc3JjX2lwWzRdOworCQlfX2JlMTYgc3JjX3BvcnQ7CisJCV9fYmUxNiBkc3RfcG9ydDsKKwkJX19iZTE2IGZsZXhfYnl0ZXM7CisJCV9fYmUxNiByc3ZkMDsKKwl9IGZvcm1hdHRlZDsKKwlfX2JlMzIgZHdvcmRfc3RyZWFtWzExXTsKK307CisKKy8qIEZsb3cgRGlyZWN0b3IgY29tcHJlc3NlZCBBVFIgaGFzaCBpbnB1dCBzdHJ1Y3QgKi8KK3VuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIHsKKwlzdHJ1Y3QgeworCQl1OCB2bV9wb29sOworCQl1OCBmbG93X3R5cGU7CisJCV9fYmUxNiB2bGFuX2lkOworCX0gZm9ybWF0dGVkOworCV9fYmUzMiBpcDsKKwlzdHJ1Y3QgeworCQlfX2JlMTYgc3JjOworCQlfX2JlMTYgZHN0OworCX0gcG9ydDsKKwlfX2JlMTYgZmxleF9ieXRlczsKKwlfX2JlMzIgZHdvcmQ7CiB9OwogCiBzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0X21hc2tzIHsKLQl1MzIgc3JjX2lwX21hc2s7Ci0JdTMyIGRzdF9pcF9tYXNrOwotCXUxNiBzcmNfcG9ydF9tYXNrOwotCXUxNiBkc3RfcG9ydF9tYXNrOwotCXUxNiB2bGFuX2lkX21hc2s7Ci0JdTE2IGRhdGFfbWFzazsKKwlfX2JlMTYgcnN2ZDA7CisJX19iZTE2IHZsYW5faWRfbWFzazsKKwlfX2JlMzIgZHN0X2lwX21hc2tbNF07CisJX19iZTMyIHNyY19pcF9tYXNrWzRdOworCV9fYmUxNiBzcmNfcG9ydF9tYXNrOworCV9fYmUxNiBkc3RfcG9ydF9tYXNrOworCV9fYmUxNiBmbGV4X21hc2s7CiB9OwogCiBlbnVtIGl4Z2JlX2VlcHJvbV90eXBlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xsX3RlbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2xsX3RlbWFjX21haW4uYwppbmRleCAxODM3NjVjLi5mMzU1NTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9sbF90ZW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbGxfdGVtYWNfbWFpbi5jCkBAIC0yMzgsNyArMjM4LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCS8qIGFsbG9jYXRlIHRoZSB0eCBhbmQgcnggcmluZyBidWZmZXIgZGVzY3JpcHRvcnMuICovCi0JLyogcmV0dXJucyBhIHZpcnR1YWwgYWRkcmVzIGFuZCBhIHBoeXNpY2FsIGFkZHJlc3MuICovCisJLyogcmV0dXJucyBhIHZpcnR1YWwgYWRkcmVzcyBhbmQgYSBwaHlzaWNhbCBhZGRyZXNzLiAqLwogCWxwLT50eF9iZF92ID0gZG1hX2FsbG9jX2NvaGVyZW50KG5kZXYtPmRldi5wYXJlbnQsCiAJCQkJCSBzaXplb2YoKmxwLT50eF9iZF92KSAqIFRYX0JEX05VTSwKIAkJCQkJICZscC0+dHhfYmRfcCwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2FsbG9jLmMgYi9kcml2ZXJzL25ldC9tbHg0L2FsbG9jLmMKaW5kZXggOGY0YmYxZi4uM2E0Mjc3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9hbGxvYy5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvYWxsb2MuYwpAQCAtMTc4LDYgKzE3OCw3IEBACiAJfSBlbHNlIHsKIAkJaW50IGk7CiAKKwkJYnVmLT5kaXJlY3QuYnVmICA9IE5VTEw7CiAJCWJ1Zi0+bmJ1ZnMgICAgICAgPSAoc2l6ZSArIFBBR0VfU0laRSAtIDEpIC8gUEFHRV9TSVpFOwogCQlidWYtPm5wYWdlcyAgICAgID0gYnVmLT5uYnVmczsKIAkJYnVmLT5wYWdlX3NoaWZ0ICA9IFBBR0VfU0hJRlQ7CkBAIC0yMjksNyArMjMwLDcgQEAKIAkJZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+cGRldi0+ZGV2LCBzaXplLCBidWYtPmRpcmVjdC5idWYsCiAJCQkJICBidWYtPmRpcmVjdC5tYXApOwogCWVsc2UgewotCQlpZiAoQklUU19QRVJfTE9ORyA9PSA2NCkKKwkJaWYgKEJJVFNfUEVSX0xPTkcgPT0gNjQgJiYgYnVmLT5kaXJlY3QuYnVmKQogCQkJdnVubWFwKGJ1Zi0+ZGlyZWN0LmJ1Zik7CiAKIAkJZm9yIChpID0gMDsgaSA8IGJ1Zi0+bmJ1ZnM7ICsraSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jCmluZGV4IDZkNjgwNmIuLjg5N2Y1NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYwpAQCAtOTcyLDcgKzk3Miw4IEBACiAJaW50IGk7CiAJaW50IGVycjsKIAotCWRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgbWx4NF9lbl9wcml2KSwgcHJvZi0+dHhfcmluZ19udW0pOworCWRldiA9IGFsbG9jX2V0aGVyZGV2X21xcyhzaXplb2Yoc3RydWN0IG1seDRfZW5fcHJpdiksCisJICAgIHByb2YtPnR4X3JpbmdfbnVtLCBwcm9mLT5yeF9yaW5nX251bSk7CiAJaWYgKGRldiA9PSBOVUxMKSB7CiAJCW1seDRfZXJyKG1kZXYsICJOZXQgZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2Z3LmMgYi9kcml2ZXJzL25ldC9tbHg0L2Z3LmMKaW5kZXggN2E3ZTE4Yi4uNWRlMWRiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9mdy5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZncuYwpAQCAtMjg5LDEwICsyODksOCBAQAogCQlNTFg0X0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfQ0FQX0xPR19CRl9SRUdfU1pfT0ZGU0VUKTsKIAkJZGV2X2NhcC0+YmZfcmVnX3NpemUgPSAxIDw8IChmaWVsZCAmIDB4MWYpOwogCQlNTFg0X0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfQ0FQX0xPR19NQVhfQkZfUkVHU19QRVJfUEFHRV9PRkZTRVQpOwotCQlpZiAoKDEgPDwgKGZpZWxkICYgMHgzZikpID4gKFBBR0VfU0laRSAvIGRldl9jYXAtPmJmX3JlZ19zaXplKSkgewotCQkJbWx4NF93YXJuKGRldiwgImZpcm13YXJlIGJ1ZzogbG9nMiAjIG9mIGJsdWUgZmxhbWUgcmVncyBpcyBpbnZhbGlkICglZCksIGZvcmNpbmcgM1xuIiwgZmllbGQgJiAweDFmKTsKKwkJaWYgKCgxIDw8IChmaWVsZCAmIDB4M2YpKSA+IChQQUdFX1NJWkUgLyBkZXZfY2FwLT5iZl9yZWdfc2l6ZSkpCiAJCQlmaWVsZCA9IDM7Ci0JCX0KIAkJZGV2X2NhcC0+YmZfcmVnc19wZXJfcGFnZSA9IDEgPDwgKGZpZWxkICYgMHgzZik7CiAJCW1seDRfZGJnKGRldiwgIkJsdWVGbGFtZSBhdmFpbGFibGUgKHJlZyBzaXplICVkLCByZWdzL3BhZ2UgJWQpXG4iLAogCQkJIGRldl9jYXAtPmJmX3JlZ19zaXplLCBkZXZfY2FwLT5iZl9yZWdzX3Blcl9wYWdlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKaW5kZXggMmMxNTg5MS4uZTk1Mzc5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKQEAgLTE1MzYsNiArMTUzNiw3IEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkNPTlRFQyIsICJDLU5FVChQQylDLTEwTCIsIDB4MjFjYWI1NTIsIDB4ZjZmOTA3MjIpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EiLCAiRkV0aGVyIFBDQy1UWEYiLCAweDBhMjE1MDFhLCAweGE1MTU2NGEyKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiY29yZWdhIiwgIkV0aGVyIENGLVREIiwgMHgwYTIxNTAxYSwgMHg2NTg5MzQwYSksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoImNvcmVnYSBLLksuIiwgImNvcmVnYSBFdGhlciBDRi1URCBMQU4gQ2FyZCIsIDB4NTI2MTQ0MGYsIDB4ODc5NzY2M2IpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EgSy5LLiIsICJjb3JlZ2EgRXRoZXJJSSBQQ0MtVCIsIDB4NTI2MTQ0MGYsIDB4ZmE5ZDg1YmQpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EgSy5LLiIsICJjb3JlZ2EgRXRoZXJJSSBQQ0MtVEQiLCAweDUyNjE0NDBmLCAweGM0OWJkNzNkKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQ29yZWdhIEsuSy4iLCAiY29yZWdhIEV0aGVySUkgUENDLVREIiwgMHhkNGZkY2JkOCwgMHhjNDliZDczZCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYyBiL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCmluZGV4IDc4ZDcwYTYuLmExYjgyYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgogCkBAIC01NDIsNyArNTQzLDcgQEAKIAlkYXRhID0gYXAtPnRwa3QtPmRhdGE7CiAJY291bnQgPSBhcC0+dHBrdC0+bGVuOwogCWZjcyA9IGFwLT50ZmNzOwotCXByb3RvID0gKGRhdGFbMF0gPDwgOCkgKyBkYXRhWzFdOworCXByb3RvID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEpOwogCiAJLyoKIAkgKiBMQ1AgcGFja2V0cyB3aXRoIGNvZGUgdmFsdWVzIGJldHdlZW4gMSAoY29uZmlndXJlLXJlcWVzdCkKQEAgLTk2Myw3ICs5NjQsNyBAQAogCWNvZGUgPSBkYXRhWzBdOwogCWlmIChjb2RlICE9IENPTkZBQ0sgJiYgY29kZSAhPSBDT05GUkVRKQogCQlyZXR1cm47Ci0JZGxlbiA9IChkYXRhWzJdIDw8IDgpICsgZGF0YVszXTsKKwlkbGVuID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEgKyAyKTsKIAlpZiAobGVuIDwgZGxlbikKIAkJcmV0dXJuOwkJLyogcGFja2V0IGdvdCB0cnVuY2F0ZWQgb3IgbGVuZ3RoIGlzIGJvZ3VzICovCiAKQEAgLTk5NywxNSArOTk4LDE0IEBACiAJd2hpbGUgKGRsZW4gPj0gMiAmJiBkbGVuID49IGRhdGFbMV0gJiYgZGF0YVsxXSA+PSAyKSB7CiAJCXN3aXRjaCAoZGF0YVswXSkgewogCQljYXNlIExDUF9NUlU6Ci0JCQl2YWwgPSAoZGF0YVsyXSA8PCA4KSArIGRhdGFbM107CisJCQl2YWwgPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSArIDIpOwogCQkJaWYgKGluYm91bmQpCiAJCQkJYXAtPm1ydSA9IHZhbDsKIAkJCWVsc2UKIAkJCQlhcC0+Y2hhbi5tdHUgPSB2YWw7CiAJCQlicmVhazsKIAkJY2FzZSBMQ1BfQVNZTkNNQVA6Ci0JCQl2YWwgPSAoZGF0YVsyXSA8PCAyNCkgKyAoZGF0YVszXSA8PCAxNikKLQkJCQkrIChkYXRhWzRdIDw8IDgpICsgZGF0YVs1XTsKKwkJCXZhbCA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhICsgMik7CiAJCQlpZiAoaW5ib3VuZCkKIAkJCQlhcC0+cmFjY20gPSB2YWw7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfZGVmbGF0ZS5jIGIvZHJpdmVycy9uZXQvcHBwX2RlZmxhdGUuYwppbmRleCA2OTViYzgzLi40MzU4MzMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfZGVmbGF0ZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9kZWZsYXRlLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcHAtY29tcC5oPgogCiAjaW5jbHVkZSA8bGludXgvemxpYi5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogLyoKICAqIFN0YXRlIGZvciBhIERlZmxhdGUgKGRlKWNvbXByZXNzb3IuCkBAIC0yMzIsMTEgKzIzMyw5IEBACiAJICovCiAJd3B0clswXSA9IFBQUF9BRERSRVNTKHJwdHIpOwogCXdwdHJbMV0gPSBQUFBfQ09OVFJPTChycHRyKTsKLQl3cHRyWzJdID0gUFBQX0NPTVAgPj4gODsKLQl3cHRyWzNdID0gUFBQX0NPTVA7CisJcHV0X3VuYWxpZ25lZF9iZTE2KFBQUF9DT01QLCB3cHRyICsgMik7CiAJd3B0ciArPSBQUFBfSERSTEVOOwotCXdwdHJbMF0gPSBzdGF0ZS0+c2Vxbm8gPj4gODsKLQl3cHRyWzFdID0gc3RhdGUtPnNlcW5vOworCXB1dF91bmFsaWduZWRfYmUxNihzdGF0ZS0+c2Vxbm8sIHdwdHIpOwogCXdwdHIgKz0gREVGTEFURV9PVkhEOwogCW9sZW4gPSBQUFBfSERSTEVOICsgREVGTEFURV9PVkhEOwogCXN0YXRlLT5zdHJtLm5leHRfb3V0ID0gd3B0cjsKQEAgLTQ1MSw3ICs0NTAsNyBAQAogCX0KIAogCS8qIENoZWNrIHRoZSBzZXF1ZW5jZSBudW1iZXIuICovCi0Jc2VxID0gKGlidWZbUFBQX0hEUkxFTl0gPDwgOCkgKyBpYnVmW1BQUF9IRFJMRU4rMV07CisJc2VxID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGlidWYgKyBQUFBfSERSTEVOKTsKIAlpZiAoc2VxICE9IChzdGF0ZS0+c2Vxbm8gJiAweGZmZmYpKSB7CiAJCWlmIChzdGF0ZS0+ZGVidWcpCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiel9kZWNvbXByZXNzJWQ6IGJhZCBzZXEgIyAlZCwgZXhwZWN0ZWQgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwppbmRleCA2NDU2NDg0Li5jN2E2YzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAjaW5jbHVkZSA8bmV0L3NsaGNfdmouaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKQEAgLTIxMCw3ICsyMTEsNyBAQAogfTsKIAogLyogR2V0IHRoZSBQUFAgcHJvdG9jb2wgbnVtYmVyIGZyb20gYSBza2IgKi8KLSNkZWZpbmUgUFBQX1BST1RPKHNrYikJKCgoc2tiKS0+ZGF0YVswXSA8PCA4KSArIChza2IpLT5kYXRhWzFdKQorI2RlZmluZSBQUFBfUFJPVE8oc2tiKQlnZXRfdW5hbGlnbmVkX2JlMTYoKHNrYiktPmRhdGEpCiAKIC8qIFdlIGxpbWl0IHRoZSBsZW5ndGggb2YgcHBwLT5maWxlLnJxIHRvIHRoaXMgKGFyYml0cmFyeSkgdmFsdWUgKi8KICNkZWZpbmUgUFBQX01BWF9SUUxFTgkzMgpAQCAtOTY0LDggKzk2NSw3IEBACiAKIAlwcCA9IHNrYl9wdXNoKHNrYiwgMik7CiAJcHJvdG8gPSBucGluZGV4X3RvX3Byb3RvW25waV07Ci0JcHBbMF0gPSBwcm90byA+PiA4OwotCXBwWzFdID0gcHJvdG87CisJcHV0X3VuYWxpZ25lZF9iZTE2KHByb3RvLCBwcCk7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJc2tiX3F1ZXVlX3RhaWwoJnBwcC0+ZmlsZS54cSwgc2tiKTsKQEAgLTE0NzMsOCArMTQ3Myw3IEBACiAJCXEgPSBza2JfcHV0KGZyYWcsIGZsZW4gKyBoZHJsZW4pOwogCiAJCS8qIG1ha2UgdGhlIE1QIGhlYWRlciAqLwotCQlxWzBdID0gUFBQX01QID4+IDg7Ci0JCXFbMV0gPSBQUFBfTVA7CisJCXB1dF91bmFsaWduZWRfYmUxNihQUFBfTVAsIHEpOwogCQlpZiAocHBwLT5mbGFncyAmIFNDX01QX1hTSE9SVFNFUSkgewogCQkJcVsyXSA9IGJpdHMgKyAoKHBwcC0+bnhzZXEgPj4gOCkgJiAweGYpOwogCQkJcVszXSA9IHBwcC0+bnhzZXE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfbXBwZS5jIGIvZHJpdmVycy9uZXQvcHBwX21wcGUuYwppbmRleCA2ZDFhMWI4Li45YTE4NDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfbXBwZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9tcHBlLmMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcHBfZGVmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BwcC1jb21wLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpbmNsdWRlICJwcHBfbXBwZS5oIgogCkBAIC0zOTUsMTYgKzM5NiwxNCBAQAogCSAqLwogCW9idWZbMF0gPSBQUFBfQUREUkVTUyhpYnVmKTsKIAlvYnVmWzFdID0gUFBQX0NPTlRST0woaWJ1Zik7Ci0Jb2J1ZlsyXSA9IFBQUF9DT01QID4+IDg7CS8qIGlzaXplICsgTVBQRV9PVkhEICsgMSAqLwotCW9idWZbM10gPSBQUFBfQ09NUDsJLyogaXNpemUgKyBNUFBFX09WSEQgKyAyICovCisJcHV0X3VuYWxpZ25lZF9iZTE2KFBQUF9DT01QLCBvYnVmICsgMik7CiAJb2J1ZiArPSBQUFBfSERSTEVOOwogCiAJc3RhdGUtPmNjb3VudCA9IChzdGF0ZS0+Y2NvdW50ICsgMSkgJSBNUFBFX0NDT1VOVF9TUEFDRTsKIAlpZiAoc3RhdGUtPmRlYnVnID49IDcpCiAJCXByaW50ayhLRVJOX0RFQlVHICJtcHBlX2NvbXByZXNzWyVkXTogY2NvdW50ICVkXG4iLCBzdGF0ZS0+dW5pdCwKIAkJICAgICAgIHN0YXRlLT5jY291bnQpOwotCW9idWZbMF0gPSBzdGF0ZS0+Y2NvdW50ID4+IDg7Ci0Jb2J1ZlsxXSA9IHN0YXRlLT5jY291bnQgJiAweGZmOworCXB1dF91bmFsaWduZWRfYmUxNihzdGF0ZS0+Y2NvdW50LCBvYnVmKTsKIAogCWlmICghc3RhdGUtPnN0YXRlZnVsIHx8CS8qIHN0YXRlbGVzcyBtb2RlICAgICAqLwogCSAgICAoKHN0YXRlLT5jY291bnQgJiAweGZmKSA9PSAweGZmKSB8fAkvKiAiZmxhZyIgcGFja2V0ICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCmluZGV4IDRjOTVlYzMuLjRlNmI3MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjZGVmaW5lIFBQUF9WRVJTSU9OCSIyLjQuMiIKQEAgLTU2Myw3ICs1NjQsNyBAQAogCWludCBpc2xjcDsKIAogCWRhdGEgID0gc2tiLT5kYXRhOwotCXByb3RvID0gKGRhdGFbMF0gPDwgOCkgKyBkYXRhWzFdOworCXByb3RvID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEpOwogCiAJLyogTENQIHBhY2tldHMgd2l0aCBjb2RlcyBiZXR3ZWVuIDEgKGNvbmZpZ3VyZS1yZXF1ZXN0KQogCSAqIGFuZCA3IChjb2RlLXJlamVjdCkgbXVzdCBiZSBzZW50IGFzIHRob3VnaCBubyBvcHRpb25zCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljLmggYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljLmgKaW5kZXggOWMyYTAyZC4uNDRlMzE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWMuaApAQCAtMzQsOCArMzQsOCBAQAogCiAjZGVmaW5lIF9RTENOSUNfTElOVVhfTUFKT1IgNQogI2RlZmluZSBfUUxDTklDX0xJTlVYX01JTk9SIDAKLSNkZWZpbmUgX1FMQ05JQ19MSU5VWF9TVUJWRVJTSU9OIDE0Ci0jZGVmaW5lIFFMQ05JQ19MSU5VWF9WRVJTSU9OSUQgICI1LjAuMTQiCisjZGVmaW5lIF9RTENOSUNfTElOVVhfU1VCVkVSU0lPTiAxNQorI2RlZmluZSBRTENOSUNfTElOVVhfVkVSU0lPTklEICAiNS4wLjE1IgogI2RlZmluZSBRTENOSUNfRFJWX0lEQ19WRVIgIDB4MDEKICNkZWZpbmUgUUxDTklDX0RSSVZFUl9WRVJTSU9OICAoKF9RTENOSUNfTElOVVhfTUFKT1IgPDwgMTYpIHxcCiAJCSAoX1FMQ05JQ19MSU5VWF9NSU5PUiA8PCA4KSB8IChfUUxDTklDX0xJTlVYX1NVQlZFUlNJT04pKQpAQCAtMjg5LDYgKzI4OSwyNiBAQAogCXUzMglyZXNlcnZlZFs1XTsKIH07CiAKKy8qIEZsYXNoIERlZmluZXMgYW5kIFN0cnVjdHVyZXMgKi8KKyNkZWZpbmUgUUxDTklDX0ZMVF9MT0NBVElPTgkweDNGMTAwMAorI2RlZmluZSBRTENOSUNfRldfSU1BR0VfUkVHSU9OCTB4NzQKK3N0cnVjdCBxbGNuaWNfZmx0X2hlYWRlciB7CisJdTE2IHZlcnNpb247CisJdTE2IGxlbjsKKwl1MTYgY2hlY2tzdW07CisJdTE2IHJlc2VydmVkOworfTsKKworc3RydWN0IHFsY25pY19mbHRfZW50cnkgeworCXU4IHJlZ2lvbjsKKwl1OCByZXNlcnZlZDA7CisJdTggYXR0cmliOworCXU4IHJlc2VydmVkMTsKKwl1MzIgc2l6ZTsKKwl1MzIgc3RhcnRfYWRkcjsKKwl1MzIgZW5kX2FkZDsKK307CisKIC8qIE1hZ2ljIG51bWJlciB0byBsZXQgdXNlciBrbm93IGZsYXNoIGlzIHByb2dyYW1tZWQgKi8KICNkZWZpbmUJUUxDTklDX0JESU5GT19NQUdJQyAweDEyMzQ1Njc4CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ldGh0b29sLmMKaW5kZXggMWU3YWY3MC4uNGMxNDUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ldGh0b29sLmMKQEAgLTY3Miw3ICs2NzIsNyBAQAogCWlmIChkYXRhWzFdKQogCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCi0JaWYgKGV0aF90ZXN0LT5mbGFncyA9PSBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CisJaWYgKGV0aF90ZXN0LT5mbGFncyAmIEVUSF9URVNUX0ZMX09GRkxJTkUpIHsKIAkJZGF0YVsyXSA9IHFsY25pY19pcnFfdGVzdChkZXYpOwogCQlpZiAoZGF0YVsyXSkKIAkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2luaXQuYyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaW5pdC5jCmluZGV4IDliOWM3YzMuLmE3ZjFkNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaW5pdC5jCkBAIC02MjcsMTIgKzYyNyw3MyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHFsY25pY19nZXRfZmx0X2VudHJ5KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTggcmVnaW9uLAorCQkJCXN0cnVjdCBxbGNuaWNfZmx0X2VudHJ5ICpyZWdpb25fZW50cnkpCit7CisJc3RydWN0IHFsY25pY19mbHRfaGVhZGVyIGZsdF9oZHI7CisJc3RydWN0IHFsY25pY19mbHRfZW50cnkgKmZsdF9lbnRyeTsKKwlpbnQgaSA9IDAsIHJldDsKKwl1MzIgZW50cnlfc2l6ZTsKKworCW1lbXNldChyZWdpb25fZW50cnksIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX2ZsdF9lbnRyeSkpOworCXJldCA9IHFsY25pY19yb21fZmFzdF9yZWFkX3dvcmRzKGFkYXB0ZXIsIFFMQ05JQ19GTFRfTE9DQVRJT04sCisJCQkJCSAodTggKikmZmx0X2hkciwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgcWxjbmljX2ZsdF9oZWFkZXIpKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkgImVycm9yIHJlYWRpbmcgZmxhc2ggbGF5b3V0IGhlYWRlclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWVudHJ5X3NpemUgPSBmbHRfaGRyLmxlbiAtIHNpemVvZihzdHJ1Y3QgcWxjbmljX2ZsdF9oZWFkZXIpOworCWZsdF9lbnRyeSA9IChzdHJ1Y3QgcWxjbmljX2ZsdF9lbnRyeSAqKXZ6YWxsb2MoZW50cnlfc2l6ZSk7CisJaWYgKGZsdF9lbnRyeSA9PSBOVUxMKSB7CisJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJlcnJvciBhbGxvY2F0aW5nIG1lbW9yeVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldCA9IHFsY25pY19yb21fZmFzdF9yZWFkX3dvcmRzKGFkYXB0ZXIsIFFMQ05JQ19GTFRfTE9DQVRJT04gKworCQkJCQkgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfZmx0X2hlYWRlciksCisJCQkJCSAodTggKilmbHRfZW50cnksIGVudHJ5X3NpemUpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSAiZXJyb3IgcmVhZGluZyBmbGFzaCBsYXlvdXQgZW50cmllc1xuIik7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwl3aGlsZSAoaSA8IChlbnRyeV9zaXplL3NpemVvZihzdHJ1Y3QgcWxjbmljX2ZsdF9lbnRyeSkpKSB7CisJCWlmIChmbHRfZW50cnlbaV0ucmVnaW9uID09IHJlZ2lvbikKKwkJCWJyZWFrOworCQlpKys7CisJfQorCWlmIChpID49IChlbnRyeV9zaXplL3NpemVvZihzdHJ1Y3QgcWxjbmljX2ZsdF9lbnRyeSkpKSB7CisJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkgInJlZ2lvbj0leCBub3QgZm91bmQgaW4gJWQgcmVnaW9uc1xuIiwgcmVnaW9uLCBpKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnJfb3V0OworCX0KKwltZW1jcHkocmVnaW9uX2VudHJ5LCAmZmx0X2VudHJ5W2ldLCBzaXplb2Yoc3RydWN0IHFsY25pY19mbHRfZW50cnkpKTsKKworZXJyX291dDoKKwl2ZnJlZShmbHRfZW50cnkpOworCXJldHVybiByZXQ7Cit9CisKIGludAogcWxjbmljX2NoZWNrX2ZsYXNoX2Z3X3ZlcihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJc3RydWN0IHFsY25pY19mbHRfZW50cnkgZndfZW50cnk7CiAJdTMyIHZlciA9IC0xLCBtaW5fdmVyOworCWludCByZXQ7CiAKLQlxbGNuaWNfcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBRTENOSUNfRldfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmdmVyKTsKKwlyZXQgPSBxbGNuaWNfZ2V0X2ZsdF9lbnRyeShhZGFwdGVyLCBRTENOSUNfRldfSU1BR0VfUkVHSU9OLCAmZndfZW50cnkpOworCWlmICghcmV0KQorCQkvKiAwLTQ6LXNpZ25hdHVyZSwgIDQtODotZncgdmVyc2lvbiAqLworCQlxbGNuaWNfcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBmd19lbnRyeS5zdGFydF9hZGRyICsgNCwKKwkJCQkgICAgIChpbnQgKikmdmVyKTsKKwllbHNlCisJCXFsY25pY19yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIFFMQ05JQ19GV19WRVJTSU9OX09GRlNFVCwKKwkJCQkgICAgIChpbnQgKikmdmVyKTsKIAogCXZlciA9IFFMQ05JQ19ERUNPREVfVkVSU0lPTih2ZXIpOwogCW1pbl92ZXIgPSBRTENOSUNfTUlOX0ZXX1ZFUlNJT047CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfbWFpbi5jCmluZGV4IDExZTNhNDYuLjM3YzA0YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfbWFpbi5jCkBAIC0zMSwxNSArMzEsMTUgQEAKIAogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpxbGNuaWNfd3E7CiBzdGF0aWMgaW50IHFsY25pY19tYWNfbGVhcm47Ci1tb2R1bGVfcGFyYW0ocWxjbmljX21hY19sZWFybiwgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShxbGNuaWNfbWFjX2xlYXJuLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhxbGNuaWNfbWFjX2xlYXJuLCAiTWFjIEZpbHRlciAoMD1kaXNhYmxlZCwgMT1lbmFibGVkKSIpOwogCiBzdGF0aWMgaW50IHVzZV9tc2kgPSAxOwotbW9kdWxlX3BhcmFtKHVzZV9tc2ksIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0odXNlX21zaSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModXNlX21zaSwgIk1TSSBpbnRlcnJ1cHQgKDA9ZGlzYWJsZWQsIDE9ZW5hYmxlZCIpOwogCiBzdGF0aWMgaW50IHVzZV9tc2lfeCA9IDE7Ci1tb2R1bGVfcGFyYW0odXNlX21zaV94LCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKHVzZV9tc2lfeCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModXNlX21zaV94LCAiTVNJLVggaW50ZXJydXB0ICgwPWRpc2FibGVkLCAxPWVuYWJsZWQiKTsKIAogc3RhdGljIGludCBhdXRvX2Z3X3Jlc2V0ID0gQVVUT19GV19SRVNFVF9FTkFCTEVEOwpAQCAtNDcsMTEgKzQ3LDExIEBACiBNT0RVTEVfUEFSTV9ERVNDKGF1dG9fZndfcmVzZXQsICJBdXRvIGZpcm13YXJlIHJlc2V0ICgwPWRpc2FibGVkLCAxPWVuYWJsZWQiKTsKIAogc3RhdGljIGludCBsb2FkX2Z3X2ZpbGU7Ci1tb2R1bGVfcGFyYW0obG9hZF9md19maWxlLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKGxvYWRfZndfZmlsZSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobG9hZF9md19maWxlLCAiTG9hZCBmaXJtd2FyZSBmcm9tICgwPWZsYXNoLCAxPWZpbGUiKTsKIAogc3RhdGljIGludCBxbGNuaWNfY29uZmlnX25wYXJzOwotbW9kdWxlX3BhcmFtKHFsY25pY19jb25maWdfbnBhcnMsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0ocWxjbmljX2NvbmZpZ19ucGFycywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocWxjbmljX2NvbmZpZ19ucGFycywgIkNvbmZpZ3VyZSBOUEFScyAoMD1kaXNhYmxlZCwgMT1lbmFibGVkIik7CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHFsY25pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I4MTY5LmMgYi9kcml2ZXJzL25ldC9yODE2OS5jCmluZGV4IDI3YTdjMjAuLmJiODY0NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtMTYzMiwzNiArMTYzMiwxMzQgQEAKIHsKIAlfX2xlMzIgKnBoeXRhYmxlID0gKF9fbGUzMiAqKWZ3LT5kYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC0+ZGV2OwotCXNpemVfdCBpOworCXNpemVfdCBpbmRleCwgZndfc2l6ZSA9IGZ3LT5zaXplIC8gc2l6ZW9mKCpwaHl0YWJsZSk7CisJdTMyIHByZWRhdGEsIGNvdW50OwogCiAJaWYgKGZ3LT5zaXplICUgc2l6ZW9mKCpwaHl0YWJsZSkpIHsKIAkJbmV0aWZfZXJyKHRwLCBwcm9iZSwgZGV2LCAib2RkIHNpemVkIGZpcm13YXJlICV6ZFxuIiwgZnctPnNpemUpOwogCQlyZXR1cm47CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGZ3LT5zaXplIC8gc2l6ZW9mKCpwaHl0YWJsZSk7IGkrKykgewotCQl1MzIgYWN0aW9uID0gbGUzMl90b19jcHUocGh5dGFibGVbaV0pOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGZ3X3NpemU7IGluZGV4KyspIHsKKwkJdTMyIGFjdGlvbiA9IGxlMzJfdG9fY3B1KHBoeXRhYmxlW2luZGV4XSk7CisJCXUzMiByZWdubyA9IChhY3Rpb24gJiAweDBmZmYwMDAwKSA+PiAxNjsKIAotCQlpZiAoIWFjdGlvbikKKwkJc3dpdGNoKGFjdGlvbiAmIDB4ZjAwMDAwMDApIHsKKwkJY2FzZSBQSFlfUkVBRDoKKwkJY2FzZSBQSFlfREFUQV9PUjoKKwkJY2FzZSBQSFlfREFUQV9BTkQ6CisJCWNhc2UgUEhZX1JFQURfRUZVU0U6CisJCWNhc2UgUEhZX0NMRUFSX1JFQURDT1VOVDoKKwkJY2FzZSBQSFlfV1JJVEU6CisJCWNhc2UgUEhZX1dSSVRFX1BSRVZJT1VTOgorCQljYXNlIFBIWV9ERUxBWV9NUzoKIAkJCWJyZWFrOwogCi0JCWlmICgoYWN0aW9uICYgMHhmMDAwMDAwMCkgIT0gUEhZX1dSSVRFKSB7Ci0JCQluZXRpZl9lcnIodHAsIHByb2JlLCBkZXYsCi0JCQkJICAidW5rbm93biBhY3Rpb24gMHglMDh4XG4iLCBhY3Rpb24pOworCQljYXNlIFBIWV9CSk1QTjoKKwkJCWlmIChyZWdubyA+IGluZGV4KSB7CisJCQkJbmV0aWZfZXJyKHRwLCBwcm9iZSwgdHAtPmRldiwKKwkJCQkJIk91dCBvZiByYW5nZSBvZiBmaXJtd2FyZVxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUEhZX1JFQURDT1VOVF9FUV9TS0lQOgorCQkJaWYgKGluZGV4ICsgMiA+PSBmd19zaXplKSB7CisJCQkJbmV0aWZfZXJyKHRwLCBwcm9iZSwgdHAtPmRldiwKKwkJCQkJIk91dCBvZiByYW5nZSBvZiBmaXJtd2FyZVxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUEhZX0NPTVBfRVFfU0tJUE46CisJCWNhc2UgUEhZX0NPTVBfTkVRX1NLSVBOOgorCQljYXNlIFBIWV9TS0lQTjoKKwkJCWlmIChpbmRleCArIDEgKyByZWdubyA+PSBmd19zaXplKSB7CisJCQkJbmV0aWZfZXJyKHRwLCBwcm9iZSwgdHAtPmRldiwKKwkJCQkJIk91dCBvZiByYW5nZSBvZiBmaXJtd2FyZVxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBQSFlfUkVBRF9NQUNfQllURToKKwkJY2FzZSBQSFlfV1JJVEVfTUFDX0JZVEU6CisJCWNhc2UgUEhZX1dSSVRFX0VSSV9XT1JEOgorCQlkZWZhdWx0OgorCQkJbmV0aWZfZXJyKHRwLCBwcm9iZSwgdHAtPmRldiwKKwkJCQkgICJJbnZhbGlkIGFjdGlvbiAweCUwOHhcbiIsIGFjdGlvbik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKLQl3aGlsZSAoaS0tICE9IDApIHsKLQkJdTMyIGFjdGlvbiA9IGxlMzJfdG9fY3B1KCpwaHl0YWJsZSk7CisJcHJlZGF0YSA9IDA7CisJY291bnQgPSAwOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgZndfc2l6ZTsgKSB7CisJCXUzMiBhY3Rpb24gPSBsZTMyX3RvX2NwdShwaHl0YWJsZVtpbmRleF0pOwogCQl1MzIgZGF0YSA9IGFjdGlvbiAmIDB4MDAwMGZmZmY7Ci0JCXUzMiByZWcgPSAoYWN0aW9uICYgMHgwZmZmMDAwMCkgPj4gMTY7CisJCXUzMiByZWdubyA9IChhY3Rpb24gJiAweDBmZmYwMDAwKSA+PiAxNjsKKworCQlpZiAoIWFjdGlvbikKKwkJCWJyZWFrOwogCiAJCXN3aXRjaChhY3Rpb24gJiAweGYwMDAwMDAwKSB7Ci0JCWNhc2UgUEhZX1dSSVRFOgotCQkJcnRsX3dyaXRlcGh5KHRwLCByZWcsIGRhdGEpOwotCQkJcGh5dGFibGUrKzsKKwkJY2FzZSBQSFlfUkVBRDoKKwkJCXByZWRhdGEgPSBydGxfcmVhZHBoeSh0cCwgcmVnbm8pOworCQkJY291bnQrKzsKKwkJCWluZGV4Kys7CiAJCQlicmVhazsKKwkJY2FzZSBQSFlfREFUQV9PUjoKKwkJCXByZWRhdGEgfD0gZGF0YTsKKwkJCWluZGV4Kys7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfREFUQV9BTkQ6CisJCQlwcmVkYXRhICY9IGRhdGE7CisJCQlpbmRleCsrOworCQkJYnJlYWs7CisJCWNhc2UgUEhZX0JKTVBOOgorCQkJaW5kZXggLT0gcmVnbm87CisJCQlicmVhazsKKwkJY2FzZSBQSFlfUkVBRF9FRlVTRToKKwkJCXByZWRhdGEgPSBydGw4MTY4ZF9lZnVzZV9yZWFkKHRwLT5tbWlvX2FkZHIsIHJlZ25vKTsKKwkJCWluZGV4Kys7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfQ0xFQVJfUkVBRENPVU5UOgorCQkJY291bnQgPSAwOworCQkJaW5kZXgrKzsKKwkJCWJyZWFrOworCQljYXNlIFBIWV9XUklURToKKwkJCXJ0bF93cml0ZXBoeSh0cCwgcmVnbm8sIGRhdGEpOworCQkJaW5kZXgrKzsKKwkJCWJyZWFrOworCQljYXNlIFBIWV9SRUFEQ09VTlRfRVFfU0tJUDoKKwkJCWlmIChjb3VudCA9PSBkYXRhKQorCQkJCWluZGV4ICs9IDI7CisJCQllbHNlCisJCQkJaW5kZXggKz0gMTsKKwkJCWJyZWFrOworCQljYXNlIFBIWV9DT01QX0VRX1NLSVBOOgorCQkJaWYgKHByZWRhdGEgPT0gZGF0YSkKKwkJCQlpbmRleCArPSByZWdubzsKKwkJCWluZGV4Kys7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfQ09NUF9ORVFfU0tJUE46CisJCQlpZiAocHJlZGF0YSAhPSBkYXRhKQorCQkJCWluZGV4ICs9IHJlZ25vOworCQkJaW5kZXgrKzsKKwkJCWJyZWFrOworCQljYXNlIFBIWV9XUklURV9QUkVWSU9VUzoKKwkJCXJ0bF93cml0ZXBoeSh0cCwgcmVnbm8sIHByZWRhdGEpOworCQkJaW5kZXgrKzsKKwkJCWJyZWFrOworCQljYXNlIFBIWV9TS0lQTjoKKwkJCWluZGV4ICs9IHJlZ25vICsgMTsKKwkJCWJyZWFrOworCQljYXNlIFBIWV9ERUxBWV9NUzoKKwkJCW1kZWxheShkYXRhKTsKKwkJCWluZGV4Kys7CisJCQlicmVhazsKKworCQljYXNlIFBIWV9SRUFEX01BQ19CWVRFOgorCQljYXNlIFBIWV9XUklURV9NQUNfQllURToKKwkJY2FzZSBQSFlfV1JJVEVfRVJJX1dPUkQ6CiAJCWRlZmF1bHQ6CiAJCQlCVUcoKTsKIAkJfQpAQCAtMzA2OSwxNSArMzE2Nyw2IEBACiAJCXJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTsKIAl9CiAKLQlydGw4MTY5X2luaXRfcGh5KGRldiwgdHApOwotCi0JLyoKLQkgKiBQcmV0ZW5kIHdlIGFyZSB1c2luZyBWTEFOczsgVGhpcyBieXBhc3NlcyBhIG5hc3R5IGJ1ZyB3aGVyZQotCSAqIEludGVycnVwdHMgc3RvcCBmbG93aW5nIG9uIGhpZ2ggbG9hZCBvbiA4MTEwU0NkIGNvbnRyb2xsZXJzLgotCSAqLwotCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wNSkKLQkJUlRMX1cxNihDUGx1c0NtZCwgUlRMX1IxNihDUGx1c0NtZCkgfCBSeFZsYW4pOwotCiAJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZwZGV2LT5kZXYsIHRwLT5mZWF0dXJlcyAmIFJUTF9GRUFUVVJFX1dPTCk7CiAKIAlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKQEAgLTMxMjcsNiArMzIxNiw3IEBACiBzdGF0aWMgaW50IHJ0bDgxNjlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0+cGNpX2RldjsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIApAQCAtMzE2Miw2ICszMjUyLDE1IEBACiAKIAluYXBpX2VuYWJsZSgmdHAtPm5hcGkpOwogCisJcnRsODE2OV9pbml0X3BoeShkZXYsIHRwKTsKKworCS8qCisJICogUHJldGVuZCB3ZSBhcmUgdXNpbmcgVkxBTnM7IFRoaXMgYnlwYXNzZXMgYSBuYXN0eSBidWcgd2hlcmUKKwkgKiBJbnRlcnJ1cHRzIHN0b3AgZmxvd2luZyBvbiBoaWdoIGxvYWQgb24gODExMFNDZCBjb250cm9sbGVycy4KKwkgKi8KKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMDUpCisJCVJUTF9XMTYoQ1BsdXNDbWQsIFJUTF9SMTYoQ1BsdXNDbWQpIHwgUnhWbGFuKTsKKwogCXJ0bF9wbGxfcG93ZXJfdXAodHApOwogCiAJcnRsX2h3X3N0YXJ0KGRldik7CkBAIC0zMTcxLDcgKzMyNzAsNyBAQAogCXRwLT5zYXZlZF93b2xvcHRzID0gMDsKIAlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJnBkZXYtPmRldik7CiAKLQlydGw4MTY5X2NoZWNrX2xpbmtfc3RhdHVzKGRldiwgdHAsIHRwLT5tbWlvX2FkZHIpOworCXJ0bDgxNjlfY2hlY2tfbGlua19zdGF0dXMoZGV2LCB0cCwgaW9hZGRyKTsKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXM5MDAuYyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCmluZGV4IDU4MTgzNjguLjU5NzZkMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczkwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCkBAIC0zNiw3ICszNiw3IEBACiAgICBSZXYgMS4wNy4wNiBOb3YuICA3IDIwMDAgSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPiBzb21lIGJ1ZyBmaXggYW5kIGNsZWFuaW5nCiAgICBSZXYgMS4wNy4wNSBOb3YuICA2IDIwMDAgbWV0YXBpcmF0PG1ldGFwaXJhdEBnbXguZGU+IGNvbnRyaWJ1dGUgbWVkaWEgdHlwZSBzZWxlY3QgYnkgaWZjb25maWcKICAgIFJldiAxLjA3LjA0IFNlcC4gIDYgMjAwMCBMZWktQ2h1biBDaGFuZyBhZGRlZCBJQ1MxODkzIFBIWSBzdXBwb3J0Ci0gICBSZXYgMS4wNy4wMyBBdWcuIDI0IDIwMDAgTGVpLUNodW4gQ2hhbmcgKGxjY2hhbmdAc2lzLmNvbS50dykgbW9kaWZpZWQgNjMwRSBlcWF1bGl6ZXIgd29ya2Fyb3VuZCBydWxlCisgICBSZXYgMS4wNy4wMyBBdWcuIDI0IDIwMDAgTGVpLUNodW4gQ2hhbmcgKGxjY2hhbmdAc2lzLmNvbS50dykgbW9kaWZpZWQgNjMwRSBlcXVhbGl6ZXIgd29ya2Fyb3VuZCBydWxlCiAgICBSZXYgMS4wNy4wMSBBdWcuIDA4IDIwMDAgT2xsaWUgTGhvIG1pbm9yIHVwZGF0ZSBmb3IgU2lTIDYzMEUgYW5kIFNpUyA2MzBFIEExCiAgICBSZXYgMS4wNyAgICBNYXIuIDA3IDIwMDAgT2xsaWUgTGhvIGJ1ZyBmaXggaW4gUnggYnVmZmVyIHJpbmcKICAgIFJldiAxLjA2LjA0IEZlYi4gMTEgMjAwMCBKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+IHNvZnRuZXQgYW5kIGluaXQgZm9yIGtlcm5lbCAyLjQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCAzOTk5NmJmLi43ZDg1YTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC00NiwxMCArNDYsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCi0jZGVmaW5lIFNLWTJfVkxBTl9UQUdfVVNFRCAxCi0jZW5kaWYKLQogI2luY2x1ZGUgInNreTIuaCIKIAogI2RlZmluZSBEUlZfTkFNRQkJInNreTIiCkBAIC0xMzI2LDM5ICsxMzIyLDM0IEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2lmZGVmIFNLWTJfVkxBTl9UQUdfVVNFRAotc3RhdGljIHZvaWQgc2t5Ml9zZXRfdmxhbl9tb2RlKHN0cnVjdCBza3kyX2h3ICpodywgdTE2IHBvcnQsIGJvb2wgb25vZmYpCi17Ci0JaWYgKG9ub2ZmKSB7Ci0JCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9DVFJMX1QpLAotCQkJICAgICBSWF9WTEFOX1NUUklQX09OKTsKLQkJc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0NUUkxfVCksCi0JCQkgICAgIFRYX1ZMQU5fVEFHX09OKTsKLQl9IGVsc2UgewotCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfQ1RSTF9UKSwKLQkJCSAgICAgUlhfVkxBTl9TVFJJUF9PRkYpOwotCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwKLQkJCSAgICAgVFhfVkxBTl9UQUdfT0ZGKTsKLQl9Ci19CisjZGVmaW5lIE5FVElGX0ZfQUxMX1ZMQU4gKE5FVElGX0ZfSFdfVkxBTl9UWHxORVRJRl9GX0hXX1ZMQU5fUlgpCiAKLXN0YXRpYyB2b2lkIHNreTJfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQorc3RhdGljIHZvaWQgc2t5Ml92bGFuX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKIAl1MTYgcG9ydCA9IHNreTItPnBvcnQ7CiAKLQluZXRpZl90eF9sb2NrX2JoKGRldik7Ci0JbmFwaV9kaXNhYmxlKCZody0+bmFwaSk7CisJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpCisJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9DVFJMX1QpLAorCQkJICAgICBSWF9WTEFOX1NUUklQX09OKTsKKwllbHNlCisJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9DVFJMX1QpLAorCQkJICAgICBSWF9WTEFOX1NUUklQX09GRik7CiAKLQlza3kyLT52bGdycCA9IGdycDsKLQlza3kyX3NldF92bGFuX21vZGUoaHcsIHBvcnQsIGdycCAhPSBOVUxMKTsKKwlkZXYtPnZsYW5fZmVhdHVyZXMgPSBkZXYtPmZlYXR1cmVzICZ+IE5FVElGX0ZfQUxMX1ZMQU47CisJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fVFgpCisJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLAorCQkJICAgICBUWF9WTEFOX1RBR19PTik7CisJZWxzZSB7CisJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLAorCQkJICAgICBUWF9WTEFOX1RBR19PRkYpOwogCi0Jc2t5Ml9yZWFkMzIoaHcsIEIwX1kyX1NQX0xJU1IpOwotCW5hcGlfZW5hYmxlKCZody0+bmFwaSk7Ci0JbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CisJCS8qIENhbid0IGRvIHRyYW5zbWl0IG9mZmxvYWQgb2YgdmxhbiB3aXRob3V0IGh3IHZsYW4gKi8KKwkJZGV2LT52bGFuX2ZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHCisJCQkJCXwgTkVUSUZfRl9BTExfQ1NVTSk7CisJfQogfQotI2VuZGlmCiAKIC8qIEFtb3VudCBvZiByZXF1aXJlZCB3b3JzdCBjYXNlIHBhZGRpbmcgaW4gcnggYnVmZmVyICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNreTJfcnhfcGFkKGNvbnN0IHN0cnVjdCBza3kyX2h3ICpodykKQEAgLTE2MzUsOSArMTYyNiw3IEBACiAJc2t5Ml9wcmVmZXRjaF9pbml0KGh3LCB0eHFhZGRyW3BvcnRdLCBza3kyLT50eF9sZV9tYXAsCiAJCQkgICBza3kyLT50eF9yaW5nX3NpemUgLSAxKTsKIAotI2lmZGVmIFNLWTJfVkxBTl9UQUdfVVNFRAotCXNreTJfc2V0X3ZsYW5fbW9kZShodywgcG9ydCwgc2t5Mi0+dmxncnAgIT0gTlVMTCk7Ci0jZW5kaWYKKwlza3kyX3ZsYW5fbW9kZShza3kyLT5uZXRkZXYpOwogCiAJc2t5Ml9yeF9zdGFydChza3kyKTsKIH0KQEAgLTE3ODAsNyArMTc2OSw3IEBACiAJfQogCiAJY3RybCA9IDA7Ci0jaWZkZWYgU0tZMl9WTEFOX1RBR19VU0VECisKIAkvKiBBZGQgVkxBTiB0YWcsIGNhbiBwaWdneWJhY2sgb24gTFJHTEVOIG9yIEFERFI2NCAqLwogCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKIAkJaWYgKCFsZSkgewpAQCAtMTc5Miw3ICsxNzgxLDYgQEAKIAkJbGUtPmxlbmd0aCA9IGNwdV90b19iZTE2KHZsYW5fdHhfdGFnX2dldChza2IpKTsKIAkJY3RybCB8PSBJTlNfVkxBTjsKIAl9Ci0jZW5kaWYKIAogCS8qIEhhbmRsZSBUQ1AgY2hlY2tzdW0gb2ZmbG9hZCAqLwogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CkBAIC0yNDMyLDExICsyNDIwLDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAl1MTYgY291bnQgPSAoc3RhdHVzICYgR01SX0ZTX0xFTikgPj4gMTY7CiAKLSNpZmRlZiBTS1kyX1ZMQU5fVEFHX1VTRUQKLQkvKiBBY2NvdW50IGZvciB2bGFuIHRhZyAqLwotCWlmIChza3kyLT52bGdycCAmJiAoc3RhdHVzICYgR01SX0ZTX1ZMQU4pKQotCQljb3VudCAtPSBWTEFOX0hMRU47Ci0jZW5kaWYKKwlpZiAoc3RhdHVzICYgR01SX0ZTX1ZMQU4pCisJCWNvdW50IC09IFZMQU5fSExFTjsJLyogQWNjb3VudCBmb3IgdmxhbiB0YWcgKi8KIAogCW5ldGlmX3ByaW50ayhza3kyLCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIGRldiwKIAkJICAgICAicnggc2xvdCAldSBzdGF0dXMgMHgleCBsZW4gJWRcbiIsCkBAIC0yNTA0LDE3ICsyNDg5LDkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBza3kyX3NrYl9yeChjb25zdCBzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyLAogCQkJICAgICAgIHUzMiBzdGF0dXMsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0jaWZkZWYgU0tZMl9WTEFOX1RBR19VU0VECi0JdTE2IHZsYW5fdGFnID0gYmUxNl90b19jcHUoc2t5Mi0+cnhfdGFnKTsKLQlpZiAoc2t5Mi0+dmxncnAgJiYgKHN0YXR1cyAmIEdNUl9GU19WTEFOKSkgewotCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fTk9ORSkKLQkJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIHNreTItPnZsZ3JwLCB2bGFuX3RhZyk7Ci0JCWVsc2UKLQkJCXZsYW5fZ3JvX3JlY2VpdmUoJnNreTItPmh3LT5uYXBpLCBza3kyLT52bGdycCwKLQkJCQkJIHZsYW5fdGFnLCBza2IpOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCisJaWYgKHN0YXR1cyAmIEdNUl9GU19WTEFOKQorCQlfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgYmUxNl90b19jcHUoc2t5Mi0+cnhfdGFnKSk7CisKIAlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fTk9ORSkKIAkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAllbHNlCkBAIC0yNjMxLDcgKzI2MDgsNiBAQAogCQkJCWdvdG8gZXhpdF9sb29wOwogCQkJYnJlYWs7CiAKLSNpZmRlZiBTS1kyX1ZMQU5fVEFHX1VTRUQKIAkJY2FzZSBPUF9SWFZMQU46CiAJCQlza3kyLT5yeF90YWcgPSBsZW5ndGg7CiAJCQlicmVhazsKQEAgLTI2MzksNyArMjYxNSw2IEBACiAJCWNhc2UgT1BfUlhDSEtTVkxBTjoKIAkJCXNreTItPnJ4X3RhZyA9IGxlbmd0aDsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwotI2VuZGlmCiAJCWNhc2UgT1BfUlhDSEtTOgogCQkJaWYgKGxpa2VseShza3kyLT5mbGFncyAmIFNLWTJfRkxBR19SWF9DSEVDS1NVTSkpCiAJCQkJc2t5Ml9yeF9jaGVja3N1bShza3kyLCBzdGF0dXMpOwpAQCAtMzA0Miw2ICszMDE3LDEwIEBACiAJCQl8IFNLWTJfSFdfTkVXX0xFCiAJCQl8IFNLWTJfSFdfQVVUT19UWF9TVU0KIAkJCXwgU0tZMl9IV19BRFZfUE9XRVJfQ1RMOworCisJCS8qIFRoZSB3b3JrYXJvdW5kIGZvciBzdGF0dXMgY29uZmxpY3RzIFZMQU4gdGFnIGRldGVjdGlvbi4gKi8KKwkJaWYgKGh3LT5jaGlwX3JldiA9PSBDSElQX1JFVl9ZVV9GRTJfQTApCisJCQlody0+ZmxhZ3MgfD0gU0tZMl9IV19WTEFOX0JST0tFTjsKIAkJYnJlYWs7CiAKIAljYXNlIENISVBfSURfWVVLT05fU1VQUjoKQEAgLTM0MTEsMTggKzMzOTAsMTUgQEAKIAkJdTMyIG1vZGVzID0gU1VQUE9SVEVEXzEwYmFzZVRfSGFsZgogCQkJfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsCiAJCQl8IFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmCi0JCQl8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsCi0JCQl8IFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX1RQOworCQkJfCBTVVBQT1JURURfMTAwYmFzZVRfRnVsbDsKIAogCQlpZiAoaHctPmZsYWdzICYgU0tZMl9IV19HSUdBQklUKQogCQkJbW9kZXMgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmCiAJCQkJfCBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7CiAJCXJldHVybiBtb2RlczsKIAl9IGVsc2UKLQkJcmV0dXJuICBTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYKLQkJCXwgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsCi0JCQl8IFNVUFBPUlRFRF9BdXRvbmVnCi0JCQl8IFNVUFBPUlRFRF9GSUJSRTsKKwkJcmV0dXJuIFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZgorCQkJfCBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7CiB9CiAKIHN0YXRpYyBpbnQgc2t5Ml9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQpAQCAtMzQzNiw5ICszNDEyLDExIEBACiAJaWYgKHNreTJfaXNfY29wcGVyKGh3KSkgewogCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKIAkJZWNtZC0+c3BlZWQgPSBza3kyLT5zcGVlZDsKKwkJZWNtZC0+c3VwcG9ydGVkIHw9ICBTVVBQT1JURURfQXV0b25lZyB8IFNVUFBPUlRFRF9UUDsKIAl9IGVsc2UgewogCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CiAJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCQllY21kLT5zdXBwb3J0ZWQgfD0gIFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX0ZJQlJFOwogCX0KIAogCWVjbWQtPmFkdmVydGlzaW5nID0gc2t5Mi0+YWR2ZXJ0aXNpbmc7CkBAIC0zNDU1LDggKzM0MzMsMTkgQEAKIAl1MzIgc3VwcG9ydGVkID0gc2t5Ml9zdXBwb3J0ZWRfbW9kZXMoaHcpOwogCiAJaWYgKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKKwkJaWYgKGVjbWQtPmFkdmVydGlzaW5nICYgfnN1cHBvcnRlZCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChza3kyX2lzX2NvcHBlcihodykpCisJCQlza3kyLT5hZHZlcnRpc2luZyA9IGVjbWQtPmFkdmVydGlzaW5nIHwKKwkJCQkJICAgIEFEVkVSVElTRURfVFAgfAorCQkJCQkgICAgQURWRVJUSVNFRF9BdXRvbmVnOworCQllbHNlCisJCQlza3kyLT5hZHZlcnRpc2luZyA9IGVjbWQtPmFkdmVydGlzaW5nIHwKKwkJCQkJICAgIEFEVkVSVElTRURfRklCUkUgfAorCQkJCQkgICAgQURWRVJUSVNFRF9BdXRvbmVnOworCiAJCXNreTItPmZsYWdzIHw9IFNLWTJfRkxBR19BVVRPX1NQRUVEOwotCQllY21kLT5hZHZlcnRpc2luZyA9IHN1cHBvcnRlZDsKIAkJc2t5Mi0+ZHVwbGV4ID0gLTE7CiAJCXNreTItPnNwZWVkID0gLTE7CiAJfSBlbHNlIHsKQEAgLTM1MDAsOCArMzQ4OSw2IEBACiAJCXNreTItPmZsYWdzICY9IH5TS1kyX0ZMQUdfQVVUT19TUEVFRDsKIAl9CiAKLQlza3kyLT5hZHZlcnRpc2luZyA9IGVjbWQtPmFkdmVydGlzaW5nOwotCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQlza3kyX3BoeV9yZWluaXQoc2t5Mik7CiAJCXNreTJfc2V0X211bHRpY2FzdChkZXYpOwpAQCAtNDIyOSwxNSArNDIxNiwyOCBAQAogc3RhdGljIGludCBza3kyX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgc3VwcG9ydGVkID0KLQkJKHNreTItPmh3LT5mbGFncyAmIFNLWTJfSFdfUlNTX0JST0tFTikgPyAwIDogRVRIX0ZMQUdfUlhIQVNIOworCXVuc2lnbmVkIGxvbmcgb2xkX2ZlYXQgPSBkZXYtPmZlYXR1cmVzOworCXUzMiBzdXBwb3J0ZWQgPSAwOwogCWludCByYzsKIAorCWlmICghKHNreTItPmh3LT5mbGFncyAmIFNLWTJfSFdfUlNTX0JST0tFTikpCisJCXN1cHBvcnRlZCB8PSBFVEhfRkxBR19SWEhBU0g7CisKKwlpZiAoIShza3kyLT5ody0+ZmxhZ3MgJiBTS1kyX0hXX1ZMQU5fQlJPS0VOKSkKKwkJc3VwcG9ydGVkIHw9IEVUSF9GTEFHX1JYVkxBTiB8IEVUSF9GTEFHX1RYVkxBTjsKKworCXByaW50ayhLRVJOX0RFQlVHICJza3kyIHNldF9mbGFnczogc3VwcG9ydGVkICV4IGRhdGEgJXhcbiIsCisJICAgICAgIHN1cHBvcnRlZCwgZGF0YSk7CisKIAlyYyA9IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKGRldiwgZGF0YSwgc3VwcG9ydGVkKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCXJ4X3NldF9yc3MoZGV2KTsKKwlpZiAoKG9sZF9mZWF0IF4gZGV2LT5mZWF0dXJlcykgJiBORVRJRl9GX1JYSEFTSCkKKwkJcnhfc2V0X3JzcyhkZXYpOworCisJaWYgKChvbGRfZmVhdCBeIGRldi0+ZmVhdHVyZXMpICYgTkVUSUZfRl9BTExfVkxBTikKKwkJc2t5Ml92bGFuX21vZGUoZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtNDI3Myw2ICs0MjczLDcgQEAKIAkuZ2V0X3NzZXRfY291bnQgPSBza3kyX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IHNreTJfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLnNldF9mbGFncwk9IHNreTJfc2V0X2ZsYWdzLAorCS5nZXRfZmxhZ3MJPSBldGh0b29sX29wX2dldF9mbGFncywKIH07CiAKICNpZmRlZiBDT05GSUdfU0tZMl9ERUJVRwpAQCAtNDU1NCw5ICs0NTU1LDYgQEAKIAkubmRvX2NoYW5nZV9tdHUJCT0gc2t5Ml9jaGFuZ2VfbXR1LAogCS5uZG9fdHhfdGltZW91dAkJPSBza3kyX3R4X3RpbWVvdXQsCiAJLm5kb19nZXRfc3RhdHM2NAk9IHNreTJfZ2V0X3N0YXRzLAotI2lmZGVmIFNLWTJfVkxBTl9UQUdfVVNFRAotCS5uZG9fdmxhbl9yeF9yZWdpc3Rlcgk9IHNreTJfdmxhbl9yeF9yZWdpc3RlciwKLSNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBza3kyX25ldHBvbGwsCiAjZW5kaWYKQEAgLTQ1NzIsOSArNDU3MCw2IEBACiAJLm5kb19jaGFuZ2VfbXR1CQk9IHNreTJfY2hhbmdlX210dSwKIAkubmRvX3R4X3RpbWVvdXQJCT0gc2t5Ml90eF90aW1lb3V0LAogCS5uZG9fZ2V0X3N0YXRzNjQJPSBza3kyX2dldF9zdGF0cywKLSNpZmRlZiBTS1kyX1ZMQU5fVEFHX1VTRUQKLQkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSBza3kyX3ZsYW5fcnhfcmVnaXN0ZXIsCi0jZW5kaWYKICAgfSwKIH07CiAKQEAgLTQ2MjUsNyArNDYyMCw4IEBACiAJc2t5Mi0+cG9ydCA9IHBvcnQ7CiAKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cKLQkJfCBORVRJRl9GX1RTTyAgfCBORVRJRl9GX0dSTzsKKwkJfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfR1JPOworCiAJaWYgKGhpZ2htZW0pCiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCkBAIC00NjMzLDEzICs0NjI5LDggQEAKIAlpZiAoIShody0+ZmxhZ3MgJiBTS1kyX0hXX1JTU19CUk9LRU4pKQogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIOwogCi0jaWZkZWYgU0tZMl9WTEFOX1RBR19VU0VECi0JLyogVGhlIHdvcmthcm91bmQgZm9yIEZFKyBzdGF0dXMgY29uZmxpY3RzIHdpdGggVkxBTiB0YWcgZGV0ZWN0aW9uLiAqLwotCWlmICghKHNreTItPmh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRkVfUCAmJgotCSAgICAgIHNreTItPmh3LT5jaGlwX3JldiA9PSBDSElQX1JFVl9ZVV9GRTJfQTApKSB7CisJaWYgKCEoaHctPmZsYWdzICYgU0tZMl9IV19WTEFOX0JST0tFTikpCiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwotCX0KLSNlbmRpZgogCiAJLyogcmVhZCB0aGUgbWFjIGFkZHJlc3MgKi8KIAltZW1jcHlfZnJvbWlvKGRldi0+ZGV2X2FkZHIsIGh3LT5yZWdzICsgQjJfTUFDXzEgKyBwb3J0ICogOCwgRVRIX0FMRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5oIGIvZHJpdmVycy9uZXQvc2t5Mi5oCmluZGV4IDgwYmRjNDAuLjY4NjFiMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuaAorKysgYi9kcml2ZXJzL25ldC9za3kyLmgKQEAgLTIyMzYsMTEgKzIyMzYsOCBAQAogCXUxNgkJICAgICByeF9wZW5kaW5nOwogCXUxNgkJICAgICByeF9kYXRhX3NpemU7CiAJdTE2CQkgICAgIHJ4X25mcmFnczsKLQotI2lmZGVmIFNLWTJfVkxBTl9UQUdfVVNFRAogCXUxNgkJICAgICByeF90YWc7Ci0Jc3RydWN0IHZsYW5fZ3JvdXAgICAgKnZsZ3JwOwotI2VuZGlmCisKIAlzdHJ1Y3QgewogCQl1bnNpZ25lZCBsb25nIGxhc3Q7CiAJCXUzMgltYWNfcnA7CkBAIC0yMjg0LDYgKzIyODEsNyBAQAogI2RlZmluZSBTS1kyX0hXX0FVVE9fVFhfU1VNCTB4MDAwMDAwNDAJLyogbmV3IElQIGRlY29kZSBmb3IgVHggKi8KICNkZWZpbmUgU0tZMl9IV19BRFZfUE9XRVJfQ1RMCTB4MDAwMDAwODAJLyogYWRkaXRpb25hbCBQSFkgcG93ZXIgcmVncyAqLwogI2RlZmluZSBTS1kyX0hXX1JTU19CUk9LRU4JMHgwMDAwMDEwMAorI2RlZmluZSBTS1kyX0hXX1ZMQU5fQlJPS0VOICAgICAweDAwMDAwMjAwCiAKIAl1OAkgICAgIAkgICAgIGNoaXBfaWQ7CiAJdTgJCSAgICAgY2hpcF9yZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWh1dGkuYyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5jCmluZGV4IDI5NjAwMGIuLjMzOTc2MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RlaHV0aS5jCisrKyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5jCkBAIC0xMiw3ICsxMiw3IEBACiAvKgogICogUlggSFcvU1cgaW50ZXJhY3Rpb24gb3ZlcnZpZXcKICAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0gKiBUaGVyZSBhcmUgMiB0eXBlcyBvZiBSWCBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIGJldHdlYW4gZHJpdmVyIGFuZCBOSUMuCisgKiBUaGVyZSBhcmUgMiB0eXBlcyBvZiBSWCBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIGJldHdlZW4gZHJpdmVyIGFuZCBOSUMuCiAgKiAxKSBSWCBGcmVlIEZpZm8gLSBSWEYgLSBob2xkcyBkZXNjcmlwdG9ycyBvZiBlbXB0eSBidWZmZXJzIHRvIGFjY2VwdCBpbmNvbWluZwogICogdHJhZmZpYy4gVGhpcyBGaWZvIGlzIGZpbGxlZCBieSBTVyBhbmQgaXMgcmVhZGVuIGJ5IEhXLiBFYWNoIGRlc2NyaXB0b3IgaG9sZHMKICAqIGluZm8gYWJvdXQgYnVmZmVyJ3MgbG9jYXRpb24sIHNpemUgYW5kIElELiBBbiBJRCBmaWVsZCBpcyB1c2VkIHRvIGlkZW50aWZ5IGEKQEAgLTgyMSw3ICs4MjEsNyBAQAogCQl9CiAKIAkJLyogdXNlIFBNRiB0byBhY2NlcHQgZmlyc3QgTUFDX01DU1RfTlVNICgxNSkgYWRkcmVzc2VzICovCi0JCS8qIFRCRDogc29ydCBhZGRyZXNlcyBhbmQgd3JpdGUgdGhlbSBpbiBhc2NlbmRpbmcgb3JkZXIKKwkJLyogVEJEOiBzb3J0IGFkZHJlc3NlcyBhbmQgd3JpdGUgdGhlbSBpbiBhc2NlbmRpbmcgb3JkZXIKIAkJICogaW50byBSWF9NQUNfTUNTVCByZWdzLiB3ZSBza2lwIHRoaXMgcGhhc2Ugbm93IGFuZCBhY2NlcHQgQUxMCiAJCSAqIG11bHRpY2FzdCBmcmFtZXMgdGhyb3UgSU1GICovCiAJCS8qIGFjY2VwdCB0aGUgcmVzdCBvZiBhZGRyZXNzZXMgdGhyb3UgSU1GICovCkBAIC0xMzQ2LDcgKzEzNDYsNyBAQAogLyoKICAqIFRYIEhXL1NXIGludGVyYWN0aW9uIG92ZXJ2aWV3CiAgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotICogVGhlcmUgYXJlIDIgdHlwZXMgb2YgVFggY29tbXVuaWNhdGlvbiBjaGFubmVscyBiZXR3ZWFuIGRyaXZlciBhbmQgTklDLgorICogVGhlcmUgYXJlIDIgdHlwZXMgb2YgVFggY29tbXVuaWNhdGlvbiBjaGFubmVscyBiZXR3ZWVuIGRyaXZlciBhbmQgTklDLgogICogMSkgVFggRnJlZSBGaWZvIC0gVFhGIC0gaG9sZHMgYWNrIGRlc2NyaXB0b3JzIGZvciBzZW50IHBhY2tldHMKICAqIDIpIFRYIERhdGEgRmlmbyAtIFRYRCAtIGhvbGRzIGRlc2NyaXB0b3JzIG9mIGZ1bGwgYnVmZmVycy4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDc1OTljNDUuLmIxMDBiZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC0xMzA5LDcgKzEzMDksNyBAQAogCQlicmVhazsKIAogCWNhc2UgU0lPQ0dJRkhXQUREUjoKLQkJLyogR2V0IGh3IGFkZHJlcyAqLworCQkvKiBHZXQgaHcgYWRkcmVzcyAqLwogCQltZW1jcHkoaWZyLmlmcl9od2FkZHIuc2FfZGF0YSwgdHVuLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJCWlmci5pZnJfaHdhZGRyLnNhX2ZhbWlseSA9IHR1bi0+ZGV2LT50eXBlOwogCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpZnIsIGlmcmVxX2xlbikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCmluZGV4IGNhYjk2YWQuLjA5Y2FjNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCkBAIC04OTgsNyArODk4LDcgQEAKIAlzZXRfbWlpX2Zsb3dfY29udHJvbCh2cHRyKTsKIAogCS8qCi0JICAgQ2hlY2sgaWYgbmV3IHN0YXR1cyBpcyBjb25zaXNlbnQgd2l0aCBjdXJyZW50IHN0YXR1cworCSAgIENoZWNrIGlmIG5ldyBzdGF0dXMgaXMgY29uc2lzdGVudCB3aXRoIGN1cnJlbnQgc3RhdHVzCiAJICAgaWYgKCgobWlpX3N0YXR1cyAmIGN1cnJfc3RhdHVzKSAmIFZFTE9DSVRZX0FVVE9ORUdfRU5BQkxFKSB8fAogCSAgICAgICAobWlpX3N0YXR1cz09Y3Vycl9zdGF0dXMpKSB7CiAJICAgdnB0ci0+bWlpX3N0YXR1cz1taWlfY2hlY2tfbWVkaWFfbW9kZSh2cHRyLT5tYWNfcmVncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaAppbmRleCA4YzMxMDNmLi5kNDg0ODZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5oCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmgKQEAgLTE2OTUsNyArMTY5NSw3IEBACiAgKiBzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHMgLSBDb250YWlucyBIVyBwZXItZGV2aWNlIHN0YXRpc3RpY3MsCiAgKiBpbmNsdWRpbmcgaHcuCiAgKiBAZGV2aDogSFcgZGV2aWNlIGhhbmRsZS4KLSAqIEBkbWFfYWRkcjogRE1BIGFkZHJlcyBvZiB0aGUgJWh3X2luZm8uIEdpdmVuIHRvIGRldmljZSB0byBmaWxsLWluIHRoZSBzdGF0cy4KKyAqIEBkbWFfYWRkcjogRE1BIGFkZHJlc3Mgb2YgdGhlICVod19pbmZvLiBHaXZlbiB0byBkZXZpY2UgdG8gZmlsbC1pbiB0aGUgc3RhdHMuCiAgKiBAaHdfaW5mb19kbWFoOiBETUEgaGFuZGxlIHVzZWQgdG8gbWFwIGh3IHN0YXRpc3RpY3Mgb250byB0aGUgZGV2aWNlIG1lbW9yeQogICogICAgICAgICAgICAgICAgc3BhY2UuCiAgKiBAaHdfaW5mb19kbWFfYWNjaDogT25lIG1vcmUgRE1BIGhhbmRsZSB1c2VkIHN1YnNlcXVlbnRseSB0byBmcmVlIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwppbmRleCAzNGNmZjZjLi40NTc4ZTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYworKysgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAvKiBNb2R1bGUgcGFyYW1ldGVycyAqLwogCiBNT0RVTEVfQVVUSE9SKCJNYWludGFpbmVyOiBGcmFuY29pcyBSb21pZXUgPHJvbWlldUBjb2dlbml0LmZyPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTaWVtZW5zIFBFQjIwNTM0IFBDSSBDb250cm9sZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU2llbWVucyBQRUIyMDUzNCBQQ0kgQ29udHJvbGxlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywiRW5hYmxlL2Rpc2FibGUgZXh0cmEgbWVzc2FnZXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kcml2ZXIuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kcml2ZXIuYwppbmRleCBmMDYwMzMyLi42NWJjMzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jCkBAIC0yMzIsNyArMjMyLDcgQEAKIAkJCXJlc3VsdCk7CiAJCWdvdG8gZXJyb3I7CiAJfQotCS8qIEV4dHJhY3QgTUFDIGFkZHJlc3NzICovCisJLyogRXh0cmFjdCBNQUMgYWRkcmVzcyAqLwogCWRkaSA9ICh2b2lkICopIHNrYi0+ZGF0YTsKIAlCVUlMRF9CVUdfT04oRVRIX0FMRU4gIT0gc2l6ZW9mKGRkaS0+bWFjX2FkZHJlc3MpKTsKIAlkX3ByaW50ZigyLCBkZXYsICJHRVQgREVWSUNFIElORk86IG1hYyBhZGRyICVwTVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaCBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaAppbmRleCAxN2VjYWE0Li4wMzBjYmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vaTI0MDBtLmgKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS5oCkBAIC0xODYsNyArMTg2LDcgQEAKICAqIHN0cnVjdCBpMjQwMG1fcG9rZV90YWJsZSAtIEhhcmR3YXJlIHBva2UgdGFibGUgZm9yIHRoZSBJbnRlbCAyNDAwbQogICoKICAqIFRoaXMgc3RydWN0dXJlIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYSBkZXZpY2Ugc3BlY2lmaWMgcG9rZSB0YWJsZQotICogdG8gcHV0IHRoZSBkZXZpY2UgaW4gYSBjb25zaXN0YW50IHN0YXRlIGF0IGJvb3QgdGltZS4KKyAqIHRvIHB1dCB0aGUgZGV2aWNlIGluIGEgY29uc2lzdGVudCBzdGF0ZSBhdCBib290IHRpbWUuCiAgKgogICogQGFkZHJlc3M6IFRoZSBkZXZpY2UgYWRkcmVzcyB0byBwb2tlCiAgKgpAQCAtNzAzLDcgKzcwMyw3IEBACiAgKiBASTI0MDBNX0JSSV9NQUNfUkVJTklUOiBXZSBuZWVkIHRvIHJlaW5pdGlhbGl6ZSB0aGUgYm9vdAogICogICAgIHJvbSBhZnRlciByZWFkaW5nIHRoZSBNQUMgYWRkcmVzcy4gVGhpcyBpcyBxdWl0ZSBhIGRpcnR5IGhhY2ssCiAgKiAgICAgaWYgeW91IGFzayBtZSAtLSB0aGUgZGV2aWNlIHJlcXVpcmVzIHRoZSBib290cm9tIHRvIGJlCi0gKiAgICAgaW50aWFsaXplZCBhZnRlciByZWFkaW5nIHRoZSBNQUMgYWRkcmVzcy4KKyAqICAgICBpbml0aWFsaXplZCBhZnRlciByZWFkaW5nIHRoZSBNQUMgYWRkcmVzcy4KICAqLwogZW51bSBpMjQwMG1fYnJpIHsKIAlJMjQwME1fQlJJX1NPRlQgICAgICAgPSAxIDw8IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVnLmgKaW5kZXggN2FkMDVkNC4uZmQxNGI5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZWcuaApAQCAtMTA2NCw3ICsxMDY0LDcgQEAKIC8qCiAgKiBFRVBST00gY29tbWFuZCByZWdpc3RlcgogICovCi0jZGVmaW5lIEFSNUtfRUVQUk9NX0NNRAkJMHg2MDA4CQkJLyogUmVnaXN0ZXIgQWRkcmVzICovCisjZGVmaW5lIEFSNUtfRUVQUk9NX0NNRAkJMHg2MDA4CQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwogI2RlZmluZSBBUjVLX0VFUFJPTV9DTURfUkVBRAkweDAwMDAwMDAxCS8qIEVFUFJPTSByZWFkICovCiAjZGVmaW5lIEFSNUtfRUVQUk9NX0NNRF9XUklURQkweDAwMDAwMDAyCS8qIEVFUFJPTSB3cml0ZSAqLwogI2RlZmluZSBBUjVLX0VFUFJPTV9DTURfUkVTRVQJMHgwMDAwMDAwNAkvKiBFRVBST00gcmVzZXQgKi8KQEAgLTEwODQsNyArMTA4NCw3IEBACiAvKgogICogRUVQUk9NIGNvbmZpZyByZWdpc3RlcgogICovCi0jZGVmaW5lIEFSNUtfRUVQUk9NX0NGRwkJCTB4NjAxMAkJCS8qIFJlZ2lzdGVyIEFkZHJlcyAqLworI2RlZmluZSBBUjVLX0VFUFJPTV9DRkcJCQkweDYwMTAJCQkvKiBSZWdpc3RlciBBZGRyZXNzICovCiAjZGVmaW5lIEFSNUtfRUVQUk9NX0NGR19TSVpFCQkweDAwMDAwMDAzCQkvKiBTaXplIGRldGVybWluYXRpb24gb3ZlcnJpZGUgKi8KICNkZWZpbmUgQVI1S19FRVBST01fQ0ZHX1NJWkVfQVVUTwkwCiAjZGVmaW5lIEFSNUtfRUVQUk9NX0NGR19TSVpFXzRLQklUCTEKQEAgLTExMjYsNyArMTEyNiw3IEBACiAgKiBTZWNvbmQgc3RhdGlvbiBpZCByZWdpc3RlciAoVXBwZXIgMTYgYml0cyBvZiBNQUMgYWRkcmVzcyArIFBDVSBzZXR0aW5ncykKICAqLwogI2RlZmluZSBBUjVLX1NUQV9JRDEJCQkweDgwMDQJCQkvKiBSZWdpc3RlciBBZGRyZXNzICovCi0jZGVmaW5lCUFSNUtfU1RBX0lEMV9BRERSX1UxNgkJMHgwMDAwZmZmZgkvKiBVcHBlciAxNiBiaXRzIG9mIE1BQyBhZGRyZXMgKi8KKyNkZWZpbmUJQVI1S19TVEFfSUQxX0FERFJfVTE2CQkweDAwMDBmZmZmCS8qIFVwcGVyIDE2IGJpdHMgb2YgTUFDIGFkZHJlc3MgKi8KICNkZWZpbmUgQVI1S19TVEFfSUQxX0FQCQkJMHgwMDAxMDAwMAkvKiBTZXQgQVAgbW9kZSAqLwogI2RlZmluZSBBUjVLX1NUQV9JRDFfQURIT0MJCTB4MDAwMjAwMDAJLyogU2V0IEFkLUhvYyBtb2RlICovCiAjZGVmaW5lIEFSNUtfU1RBX0lEMV9QV1JfU1YJCTB4MDAwNDAwMDAJLyogUG93ZXIgc2F2ZSByZXBvcnRpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9nLmMKaW5kZXggMGRjMzNiNi4uYmU0ODI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9nLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9nLmMKQEAgLTE5MTksNyArMTkxOSw3IEBACiAJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9IV1BDVEwpOwogfQogCi0vKiBJbnRpYWxpemUgQi9HIFBIWSBwb3dlciBjb250cm9sICovCisvKiBJbml0aWFsaXplIEIvRyBQSFkgcG93ZXIgY29udHJvbCAqLwogc3RhdGljIHZvaWQgYjQzX3BoeV9pbml0X3BjdGwoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmRldi0+YnVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3BoeS5jCmluZGV4IDM1MDMzZGQuLjI4ZTQ3N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGh5LmMKQEAgLTE1Myw3ICsxNTMsNyBAQAogCXBoeS0+Y2FsaWJyYXRlZCA9IDE7CiB9CiAKLS8qIGludGlhbGl6ZSBCIFBIWSBwb3dlciBjb250cm9sCisvKiBpbml0aWFsaXplIEIgUEhZIHBvd2VyIGNvbnRyb2wKICAqIGFzIGRlc2NyaWJlZCBpbiBodHRwOi8vYmNtLXNwZWNzLnNpcHNvbHV0aW9ucy5uZXQvSW5pdFBvd2VyQ29udHJvbAogICovCiBzdGF0aWMgdm9pZCBiNDNsZWdhY3lfcGh5X2luaXRfcGN0bChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taWN0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taWN0LmMKaW5kZXggYTVkYmZlYS4uYjVjYjNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWljdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1pY3QuYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAKICBub25lOgogCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGhlcmUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBzZXJ2aWNlLiAqLwotCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpYWJsZWQgYnkgaXJxICBhbmQgbm8gc2NoZWR1bGVzIHRhc2tsZXQuICovCisJLyogb25seSBSZS1lbmFibGUgaWYgZGlzYWJsZWQgYnkgaXJxICBhbmQgbm8gc2NoZWR1bGVzIHRhc2tsZXQuICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykgJiYgIXByaXYtPl9hZ24uaW50YSkKIAkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCmluZGV4IGYxM2E4M2EuLjM2MzM1YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCkBAIC0xMTU0LDcgKzExNTQsNyBAQAogCX0KIAogCS8qIFJlLWVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLwotCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpYWJsZWQgYnkgaXJxICovCisJLyogb25seSBSZS1lbmFibGUgaWYgZGlzYWJsZWQgYnkgaXJxICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykpCiAJCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKIApAQCAtMTM2OCw3ICsxMzY4LDcgQEAKIAl9CiAKIAkvKiBSZS1lbmFibGUgYWxsIGludGVycnVwdHMgKi8KLQkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaWFibGVkIGJ5IGlycSAqLworCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpc2FibGVkIGJ5IGlycSAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQogCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWdhY3kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZ2FjeS5jCmluZGV4IGEwOGI0ZTUuLmJiMWE3NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZ2FjeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZ2FjeS5jCkBAIC02MTksNyArNjE5LDcgQEAKIAogbm9uZToKIAkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBoZXJlIHNpbmNlIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2VydmljZS4gKi8KLQkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaWFibGVkIGJ5IGlycSAqLworCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpc2FibGVkIGJ5IGlycSAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQogCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwppbmRleCA0Nzc2MzIzLi40OTQ5M2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJLyoKIAkgKiBYWFg6IFRoZSBNQUMgYWRkcmVzcyBpbiB0aGUgY29tbWFuZCBidWZmZXIgaXMgb2Z0ZW4gY2hhbmdlZCBmcm9tCiAJICogdGhlIG9yaWdpbmFsIHNlbnQgdG8gdGhlIGRldmljZS4gVGhhdCBpcywgdGhlIE1BQyBhZGRyZXNzCi0JICogd3JpdHRlbiB0byB0aGUgY29tbWFuZCBidWZmZXIgb2Z0ZW4gaXMgbm90IHRoZSBzYW1lIE1BQyBhZHJlc3MKKwkgKiB3cml0dGVuIHRvIHRoZSBjb21tYW5kIGJ1ZmZlciBvZnRlbiBpcyBub3QgdGhlIHNhbWUgTUFDIGFkZHJlc3MKIAkgKiByZWFkIGZyb20gdGhlIGNvbW1hbmQgYnVmZmVyIHdoZW4gdGhlIGNvbW1hbmQgcmV0dXJucy4gVGhpcwogCSAqIGlzc3VlIGhhcyBub3QgeWV0IGJlZW4gcmVzb2x2ZWQgYW5kIHRoaXMgZGVidWdnaW5nIGlzIGxlZnQgdG8KIAkgKiBvYnNlcnZlIHRoZSBwcm9ibGVtLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwppbmRleCAyYzhjYzk1Li5lYzJjNzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwpAQCAtNjMwLDcgKzYzMCw3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgImlzbHBjaV9hbGxvY19tZW1vcnlcbiIpOwogI2VuZGlmCiAKLQkvKiByZW1hcCB0aGUgUENJIGRldmljZSBiYXNlIGFkZHJlc3MgdG8gYWNjZXNzYWJsZSAqLworCS8qIHJlbWFwIHRoZSBQQ0kgZGV2aWNlIGJhc2UgYWRkcmVzcyB0byBhY2Nlc3NpYmxlICovCiAJaWYgKCEocHJpdi0+ZGV2aWNlX2Jhc2UgPQogCSAgICAgIGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHByaXYtPnBkZXYsIDApLAogCQkgICAgICBJU0wzOFhYX1BDSV9NRU1fU0laRSkpKSB7CkBAIC03MDksNyArNzA5LDcgQEAKIAkJCQkgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQlpZiAoIXByaXYtPnBjaV9tYXBfcnhfYWRkcmVzc1tjb3VudGVyXSkgewogCQkJLyogZXJyb3IgbWFwcGluZyB0aGUgYnVmZmVyIHRvIGRldmljZQotCQkJICAgYWNjZXNzYWJsZSBtZW1vcnkgYWRkcmVzcyAqLworCQkJICAgYWNjZXNzaWJsZSBtZW1vcnkgYWRkcmVzcyAqLwogCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gbWFwIHNrYiBETUEnYWJsZVxuIik7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CkBAIC03NzMsNyArNzczLDcgQEAKIAkJcHJpdi0+ZGF0YV9sb3dfcnhbY291bnRlcl0gPSBOVUxMOwogCX0KIAotCS8qIEZyZWUgdGhlIGFjY2VzIGNvbnRyb2wgbGlzdCBhbmQgdGhlIFdQQSBsaXN0ICovCisJLyogRnJlZSB0aGUgYWNjZXNzIGNvbnRyb2wgbGlzdCBhbmQgdGhlIFdQQSBsaXN0ICovCiAJcHJpc201NF9hY2xfY2xlYW4oJnByaXYtPmFjbCk7CiAJcHJpc201NF93cGFfYnNzX2llX2NsZWFuKHByaXYpOwogCW1ndF9jbGVhbihwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKaW5kZXggMmZjNTJiYy4uZDQ0ZjhlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCQkJCSAgIE1BWF9GUkFHTUVOVF9TSVpFX1JYICsgMiwKIAkJCQkgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQlpZiAodW5saWtlbHkoIXByaXYtPnBjaV9tYXBfcnhfYWRkcmVzc1tpbmRleF0pKSB7Ci0JCQkvKiBlcnJvciBtYXBwaW5nIHRoZSBidWZmZXIgdG8gZGV2aWNlIGFjY2Vzc2FibGUgbWVtb3J5IGFkZHJlc3MgKi8KKwkJCS8qIGVycm9yIG1hcHBpbmcgdGhlIGJ1ZmZlciB0byBkZXZpY2UgYWNjZXNzaWJsZSBtZW1vcnkgYWRkcmVzcyAqLwogCQkJREVCVUcoU0hPV19FUlJPUl9NRVNTQUdFUywKIAkJCSAgICAgICJFcnJvciBtYXBwaW5nIERNQSBhZGRyZXNzXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCmluZGV4IDY1ODU0MmQuLmYzZGEwNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogCWludGYtPmJlYWNvbiA9IGVudHJ5OwogCiAJLyoKLQkgKiBUaGUgTUFDIGFkZGRyZXNzIG11c3QgYmUgY29uZmlndXJlZCBhZnRlciB0aGUgZGV2aWNlCisJICogVGhlIE1BQyBhZGRyZXNzIG11c3QgYmUgY29uZmlndXJlZCBhZnRlciB0aGUgZGV2aWNlCiAJICogaGFzIGJlZW4gaW5pdGlhbGl6ZWQuIE90aGVyd2lzZSB0aGUgZGV2aWNlIGNhbiByZXNldAogCSAqIHRoZSBNQUMgcmVnaXN0ZXJzLgogCSAqIFRoZSBCU1NJRCBhZGRyZXNzIG11c3Qgb25seSBiZSBjb25maWd1cmVkIGluIEFQIG1vZGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvYWN4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvYWN4LmgKaW5kZXggZTU0YjIxYS4uZWZjYzNhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL2FjeC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9hY3guaApAQCAtMTI3MiwxMCArMTI3MiwxMCBAQAogLyogT0JTT0xFVEUgKi8KICNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX1dBS0VfT05fSE9TVAlCSVQoNikKIAotLyogVHJhY2UgbWVhc3NnZSBvbiBNQk9YICNBICovCisvKiBUcmFjZSBtZXNzYWdlIG9uIE1CT1ggI0EgKi8KICNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX1RSQUNFX0EJCUJJVCg3KQogCi0vKiBUcmFjZSBtZWFzc2dlIG9uIE1CT1ggI0IgKi8KKy8qIFRyYWNlIG1lc3NhZ2Ugb24gTUJPWCAjQiAqLwogI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfVFJBQ0VfQgkJQklUKDgpCiAKIC8qIENvbW1hbmQgcHJvY2Vzc2luZyBjb21wbGV0aW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvd2wxMjUxLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvd2wxMjUxLmgKaW5kZXggMTNmYmVlYy4uYzBjZTJjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL3dsMTI1MS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS93bDEyNTEuaApAQCAtNDE5LDcgKzQxOSw3IEBACiAjZGVmaW5lIFdMMTI1MV9GV19OQU1FICJ3bDEyNTEtZncuYmluIgogI2RlZmluZSBXTDEyNTFfTlZTX05BTUUgIndsMTI1MS1udnMuYmluIgogCi0jZGVmaW5lIFdMMTI1MV9QT1dFUl9PTl9TTEVFUCAxMCAvKiBpbiBtaWxpc2Vjb25kcyAqLworI2RlZmluZSBXTDEyNTFfUE9XRVJfT05fU0xFRVAgMTAgLyogaW4gbWlsbGlzZWNvbmRzICovCiAKICNkZWZpbmUgV0wxMjUxX1BBUlRfRE9XTl9NRU1fU1RBUlQJMHgwCiAjZGVmaW5lIFdMMTI1MV9QQVJUX0RPV05fTUVNX1NJWkUJMHgxNjgwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5oCmluZGV4IDljYmMzZjQuLjdiZDhlNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9hY3guaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYWN4LmgKQEAgLTQ3LDkgKzQ3LDkgQEAKICNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX0hXX0FWQUlMQUJMRSAgICAgICBCSVQoNSkKIC8qIFRoZSBNSVNDIGJpdCBpcyB1c2VkIGZvciBhZ2dyZWdhdGlvbiBvZiBSWCwgVHhDb21wbGV0ZSBhbmQgVFggcmF0ZSB1cGRhdGUgKi8KICNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX0RBVEEgICAgICAgICAgICAgICBCSVQoNikKLS8qIFRyYWNlIG1lYXNzZ2Ugb24gTUJPWCAjQSAqLworLyogVHJhY2UgbWVzc2FnZSBvbiBNQk9YICNBICovCiAjZGVmaW5lIFdMMTI3MV9BQ1hfSU5UUl9UUkFDRV9BICAgICAgICAgICAgQklUKDcpCi0vKiBUcmFjZSBtZWFzc2dlIG9uIE1CT1ggI0IgKi8KKy8qIFRyYWNlIG1lc3NhZ2Ugb24gTUJPWCAjQiAqLwogI2RlZmluZSBXTDEyNzFfQUNYX0lOVFJfVFJBQ0VfQiAgICAgICAgICAgIEJJVCg4KQogCiAjZGVmaW5lIFdMMTI3MV9BQ1hfSU5UUl9BTEwJCSAgIDB4RkZGRkZGRkYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyeHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyeHguaAppbmRleCBjZTNkMzFmLi45MDUwZGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMnh4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTJ4eC5oCkBAIC00MTYsOCArNDE2LDggQEAKIAogLyogV0wxMjcxIG5lZWRzIGEgMjAwbXMgc2xlZXAgYWZ0ZXIgcG93ZXIgb24sIGFuZCBhIDIwbXMgc2xlZXAgYmVmb3JlIHBvd2VyCiAgICBvbiBpbiBjYXNlIGlzIGhhcyBiZWVuIHNodXQgZG93biBzaG9ydGx5IGJlZm9yZSAqLwotI2RlZmluZSBXTDEyNzFfUFJFX1BPV0VSX09OX1NMRUVQIDIwIC8qIGluIG1pbGlzZWNvbmRzICovCi0jZGVmaW5lIFdMMTI3MV9QT1dFUl9PTl9TTEVFUCAyMDAgLyogaW4gbWlsaXNlY29uZHMgKi8KKyNkZWZpbmUgV0wxMjcxX1BSRV9QT1dFUl9PTl9TTEVFUCAyMCAvKiBpbiBtaWxsaXNlY29uZHMgKi8KKyNkZWZpbmUgV0wxMjcxX1BPV0VSX09OX1NMRUVQIDIwMCAvKiBpbiBtaWxsaXNlY29uZHMgKi8KIAogLyogTWFjcm9zIHRvIGhhbmRsZSB3bDEyNzEuc3RhX3JhdGVfc2V0ICovCiAjZGVmaW5lIEhXX0JHX1JBVEVTX01BU0sJMHhmZmZmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCmluZGV4IGVlODJkZjYuLjNlNWJlZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIH0KIAogLyoKLSAqIEdldCBFdGhlcm5ldCBNQUMgYWRkcmVzc3MuCisgKiBHZXQgRXRoZXJuZXQgTUFDIGFkZHJlc3MuCiAgKgogICogV0FSTklORzogV2Ugc3dpdGNoIHRvIEZQQUdFMCBhbmQgc3dpdGMgYmFjayBhZ2Fpbi4KICAqICAgICAgICAgIE1ha2luZyBzdXJlIHRoZXJlIGlzIG5vIG90aGVyIFdMIGZ1bmN0aW9uIGJlZW5pbmcgY2FsbGVkIGJ5IElTUi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKaW5kZXggY2RiZWVjOS4uNTQ2ZGU1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCiAJaWYgKHVubGlrZWx5KCFuZXRpZl9jYXJyaWVyX29rKGRldikgfHwKIAkJICAgICAoZnJhZ3MgPiAxICYmICF4ZW5uZXRfY2FuX3NnKGRldikpIHx8Ci0JCSAgICAgbmV0aWZfbmVlZHNfZ3NvKGRldiwgc2tiKSkpIHsKKwkJICAgICBuZXRpZl9uZWVkc19nc28oc2tiLCBuZXRpZl9za2JfZmVhdHVyZXMoc2tiKSkpKSB7CiAJCXNwaW5fdW5sb2NrX2lycSgmbnAtPnR4X2xvY2spOwogCQlnb3RvIGRyb3A7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvS2NvbmZpZyBiL2RyaXZlcnMvbmZjL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlZGZkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmZjL0tjb25maWcKQEAgLTAsMCArMSwzMCBAQAorIworIyBOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykgZGV2aWNlcworIworCittZW51Y29uZmlnIE5GQ19ERVZJQ0VTCisJYm9vbCAiTkZDIGRldmljZXMiCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgWW91J2xsIGhhdmUgdG8gc2F5IFkgaWYgeW91ciBjb21wdXRlciBjb250YWlucyBhbiBORkMgZGV2aWNlIHRoYXQKKwkgIHlvdSB3YW50IHRvIHVzZSB1bmRlciBMaW51eC4KKworCSAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkb24ndCBoYXZlIGFueSBOZWFyIEZpZWxkIENvbW11bmljYXRpb24KKwkgIGRldmljZXMgY29ubmVjdGVkIHRvIHlvdXIgY29tcHV0ZXIuCisKK2lmIE5GQ19ERVZJQ0VTCisKK2NvbmZpZyBQTjU0NF9ORkMKKwl0cmlzdGF0ZSAiUE41NDQgTkZDIGRyaXZlciIKKwlkZXBlbmRzIG9uIEkyQworCXNlbGVjdCBDUkNfQ0NJVFQKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBTYXkgeWVzIGlmIHlvdSB3YW50IFBONTQ0IE5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiBkcml2ZXIuCisJICBUaGlzIGlzIGZvciBpMmMgY29ubmVjdGVkIHZlcnNpb24uIElmIHVuc3VyZSwgc2F5IE4gaGVyZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIG0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgcG41NDQuCisKKworZW5kaWYgIyBORkNfREVWSUNFUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvTWFrZWZpbGUgYi9kcml2ZXJzL25mYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGVmYjE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZmMvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciBuZmMgZGV2aWNlcworIworCitvYmotJChDT05GSUdfUE41NDRfTkZDKQkJKz0gcG41NDQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvcG41NDQuYyBiL2RyaXZlcnMvbmZjL3BuNTQ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAxYzQ0YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmZjL3BuNTQ0LmMKQEAgLTAsMCArMSw4OTEgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBQTjU0NCBORkMgY2hpcC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yOiBKYXJpIFZhbmhhbGEgPGV4dC1qYXJpLnZhbmhhbGFAbm9raWEuY29tPgorICogQ29udGFjdDogTWF0dGkgQWFsdG9uZW4gPG1hdHRpLmouYWFsdG9uZW5Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYy1jY2l0dC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbmZjL3BuNTQ0Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+IC8qIGZvciBUQ0dFVFMgKi8KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNkZWZpbmUgRFJJVkVSX0NBUkQJIlBONTQ0IE5GQyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MJIk5GQyBkcml2ZXIgZm9yIFBONTQ0IgorCitzdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgcG41NDRfaWRfdGFibGVbXSA9IHsKKwl7IFBONTQ0X0RSSVZFUl9OQU1FLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHBuNTQ0X2lkX3RhYmxlKTsKKworI2RlZmluZSBIQ0lfTU9ERQkwCisjZGVmaW5lIEZXX01PREUJCTEKKworZW51bSBwbjU0NF9zdGF0ZSB7CisJUE41NDRfU1RfQ09MRCwKKwlQTjU0NF9TVF9GV19SRUFEWSwKKwlQTjU0NF9TVF9SRUFEWSwKK307CisKK2VudW0gcG41NDRfaXJxIHsKKwlQTjU0NF9OT05FLAorCVBONTQ0X0lOVCwKK307CisKK3N0cnVjdCBwbjU0NF9pbmZvIHsKKwlzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2OworCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfZGV2OworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHJlZ3NbMl07CisKKwllbnVtIHBuNTQ0X3N0YXRlIHN0YXRlOworCXdhaXRfcXVldWVfaGVhZF90IHJlYWRfd2FpdDsKKwlsb2ZmX3QgcmVhZF9vZmZzZXQ7CisJZW51bSBwbjU0NF9pcnEgcmVhZF9pcnE7CisJc3RydWN0IG11dGV4IHJlYWRfbXV0ZXg7IC8qIFNlcmlhbGl6ZSByZWFkX2lycSBhY2Nlc3MgKi8KKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIFNlcmlhbGl6ZSBpbmZvIHN0cnVjdCBhY2Nlc3MgKi8KKwl1OCAqYnVmOworCXVuc2lnbmVkIGludCBidWZsZW47Cit9OworCitzdGF0aWMgY29uc3QgY2hhciByZWdfdmRkX2lvW10JPSAiVmRkX0lPIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJlZ192YmF0W10JPSAiVkJhdCI7CisKKy8qIHN5c2ZzIGludGVyZmFjZSAqLworc3RhdGljIHNzaXplX3QgcG41NDRfdGVzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBuNTQ0X2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gaW5mby0+aTJjX2RldjsKKwlzdHJ1Y3QgcG41NDRfbmZjX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBwZGF0YS0+dGVzdCgpKTsKK30KKworc3RhdGljIGludCBwbjU0NF9lbmFibGUoc3RydWN0IHBuNTQ0X2luZm8gKmluZm8sIGludCBtb2RlKQoreworCXN0cnVjdCBwbjU0NF9uZmNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGluZm8tPmkyY19kZXY7CisKKwlpbnQgcjsKKworCXIgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShpbmZvLT5yZWdzKSwgaW5mby0+cmVncyk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCXBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbmZvLT5yZWFkX2lycSA9IFBONTQ0X05PTkU7CisJaWYgKHBkYXRhLT5lbmFibGUpCisJCXBkYXRhLT5lbmFibGUobW9kZSk7CisKKwlpZiAobW9kZSkgeworCQlpbmZvLT5zdGF0ZSA9IFBONTQ0X1NUX0ZXX1JFQURZOworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIm5vdyBpbiBGVy1tb2RlXG4iKTsKKwl9IGVsc2UgeworCQlpbmZvLT5zdGF0ZSA9IFBONTQ0X1NUX1JFQURZOworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIm5vdyBpbiBIQ0ktbW9kZVxuIik7CisJfQorCisJdXNsZWVwX3JhbmdlKDEwMDAwLCAxNTAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcG41NDRfZGlzYWJsZShzdHJ1Y3QgcG41NDRfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgcG41NDRfbmZjX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBpbmZvLT5pMmNfZGV2OworCisJcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmIChwZGF0YS0+ZGlzYWJsZSkKKwkJcGRhdGEtPmRpc2FibGUoKTsKKworCWluZm8tPnN0YXRlID0gUE41NDRfU1RfQ09MRDsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiTm93IGluIE9GRi1tb2RlXG4iKTsKKworCW1zbGVlcChQTjU0NF9SRVNFVFZFTl9USU1FKTsKKworCWluZm8tPnJlYWRfaXJxID0gUE41NDRfTk9ORTsKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoaW5mby0+cmVncyksIGluZm8tPnJlZ3MpOworfQorCitzdGF0aWMgaW50IGNoZWNrX2NyYyh1OCAqYnVmLCBpbnQgYnVmbGVuKQoreworCXU4IGxlbjsKKwl1MTYgY3JjOworCisJbGVuID0gYnVmWzBdICsgMTsKKwlpZiAobGVuIDwgNCB8fCBsZW4gIT0gYnVmbGVuIHx8IGxlbiA+IFBONTQ0X01TR19NQVhfU0laRSkgeworCQlwcl9lcnIoUE41NDRfRFJJVkVSX05BTUUKKwkJICAgICAgICI6IENSQzsgY29ycnVwdCBwYWNrZXQgbGVuICV1ICglZClcbiIsIGxlbiwgYnVmbGVuKTsKKwkJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgImNyYzogIiwgRFVNUF9QUkVGSVhfTk9ORSwKKwkJCSAgICAgICAxNiwgMiwgYnVmLCBidWZsZW4sIGZhbHNlKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisJY3JjID0gY3JjX2NjaXR0KDB4ZmZmZiwgYnVmLCBsZW4gLSAyKTsKKwljcmMgPSB+Y3JjOworCisJaWYgKGJ1ZltsZW4tMl0gIT0gKGNyYyAmIDB4ZmYpIHx8IGJ1ZltsZW4tMV0gIT0gKGNyYyA+PiA4KSkgeworCQlwcl9lcnIoUE41NDRfRFJJVkVSX05BTUUgIjogQ1JDIGVycm9yIDB4JXggIT0gMHgleCAweCV4XG4iLAorCQkgICAgICAgY3JjLCBidWZbbGVuLTFdLCBidWZbbGVuLTJdKTsKKworCQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiY3JjOiAiLCBEVU1QX1BSRUZJWF9OT05FLAorCQkJICAgICAgIDE2LCAyLCBidWYsIGJ1ZmxlbiwgZmFsc2UpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbjU0NF9pMmNfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgcjsKKworCWlmIChsZW4gPCA0IHx8IGxlbiAhPSAoYnVmWzBdICsgMSkpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogSWxsZWdhbCBtZXNzYWdlIGxlbmd0aDogJWRcbiIsCisJCQlfX2Z1bmNfXywgbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNoZWNrX2NyYyhidWYsIGxlbikpCisJCXJldHVybiAtRUlOVkFMOworCisJdXNsZWVwX3JhbmdlKDMwMDAsIDYwMDApOworCisJciA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgbGVuKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgInNlbmQ6ICVkXG4iLCByKTsKKworCWlmIChyID09IC1FUkVNT1RFSU8pIHsgLyogUmV0cnksIGNoaXAgd2FzIGluIHN0YW5kYnkgKi8KKwkJdXNsZWVwX3JhbmdlKDYwMDAsIDEwMDAwKTsKKwkJciA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgbGVuKTsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJzZW5kMjogJWRcbiIsIHIpOworCX0KKworCWlmIChyICE9IGxlbikKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBwbjU0NF9pMmNfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqYnVmLCBpbnQgYnVmbGVuKQoreworCWludCByOworCXU4IGxlbjsKKworCS8qCisJICogWW91IGNvdWxkIHJlYWQgYSBwYWNrZXQgaW4gb25lIGdvLCBidXQgdGhlbiB5b3UnZCBuZWVkIHRvIHJlYWQKKwkgKiBtYXggc2l6ZSBhbmQgcmVzdCB3b3VsZCBiZSAweGZmIGZpbGwsIHNvIHdlIGRvIHNwbGl0IHJlYWRzLgorCSAqLworCXIgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCAmbGVuLCAxKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgInJlY3YxOiAlZFxuIiwgcik7CisKKwlpZiAociAhPSAxKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCWlmIChsZW4gPCBQTjU0NF9MTENfSENJX09WRVJIRUFEKQorCQlsZW4gPSBQTjU0NF9MTENfSENJX09WRVJIRUFEOworCWVsc2UgaWYgKGxlbiA+IChQTjU0NF9NU0dfTUFYX1NJWkUgLSAxKSkKKwkJbGVuID0gUE41NDRfTVNHX01BWF9TSVpFIC0gMTsKKworCWlmICgxICsgbGVuID4gYnVmbGVuKSAvKiBsZW4rKGRhdGErY3JjMTYpICovCisJCXJldHVybiAtRU1TR1NJWkU7CisKKwlidWZbMF0gPSBsZW47CisKKwlyID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgYnVmICsgMSwgbGVuKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgInJlY3YyOiAlZFxuIiwgcik7CisKKwlpZiAociAhPSBsZW4pCisJCXJldHVybiAtRVJFTU9URUlPOworCisJdXNsZWVwX3JhbmdlKDMwMDAsIDYwMDApOworCisJcmV0dXJuIHIgKyAxOworfQorCitzdGF0aWMgaW50IHBuNTQ0X2Z3X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICpidWYsIGludCBsZW4pCit7CisJaW50IHI7CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAobGVuIDwgUE41NDRfRldfSEVBREVSX1NJWkUgfHwKKwkgICAgKFBONTQ0X0ZXX0hFQURFUl9TSVpFICsgKGJ1ZlsxXSA8PCA4KSArIGJ1ZlsyXSkgIT0gbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXIgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIGxlbik7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmdyBzZW5kOiAlZFxuIiwgcik7CisKKwlpZiAociA9PSAtRVJFTU9URUlPKSB7IC8qIFJldHJ5LCBjaGlwIHdhcyBpbiBzdGFuZGJ5ICovCisJCXVzbGVlcF9yYW5nZSg2MDAwLCAxMDAwMCk7CisJCXIgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIGxlbik7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZncgc2VuZDI6ICVkXG4iLCByKTsKKwl9CisKKwlpZiAociAhPSBsZW4pCisJCXJldHVybiAtRVJFTU9URUlPOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgcG41NDRfZndfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqYnVmLCBpbnQgYnVmbGVuKQoreworCWludCByLCBsZW47CisKKwlpZiAoYnVmbGVuIDwgUE41NDRfRldfSEVBREVSX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJciA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgUE41NDRfRldfSEVBREVSX1NJWkUpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiRlcgcmVjdjE6ICVkXG4iLCByKTsKKworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlpZiAociA8IFBONTQ0X0ZXX0hFQURFUl9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxlbiA9IChidWZbMV0gPDwgOCkgKyBidWZbMl07CisJaWYgKGxlbiA9PSAwKSAvKiBqdXN0IGhlYWRlciwgbm8gYWRkaXRpb25hbCBkYXRhICovCisJCXJldHVybiByOworCisJaWYgKGxlbiA+IGJ1ZmxlbiAtIFBONTQ0X0ZXX0hFQURFUl9TSVpFKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJciA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiArIFBONTQ0X0ZXX0hFQURFUl9TSVpFLCBsZW4pOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZncgcmVjdjI6ICVkXG4iLCByKTsKKworCWlmIChyICE9IGxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gciArIFBONTQ0X0ZXX0hFQURFUl9TSVpFOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcG41NDRfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBuNTQ0X2luZm8gKmluZm8gPSBkZXZfaWQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGluZm8tPmkyY19kZXY7CisKKwlCVUdfT04oIWluZm8pOworCUJVR19PTihpcnEgIT0gaW5mby0+aTJjX2Rldi0+aXJxKTsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiSVJRXG4iKTsKKworCW11dGV4X2xvY2soJmluZm8tPnJlYWRfbXV0ZXgpOworCWluZm8tPnJlYWRfaXJxID0gUE41NDRfSU5UOworCW11dGV4X3VubG9jaygmaW5mby0+cmVhZF9tdXRleCk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnJlYWRfd2FpdCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBlbnVtIHBuNTQ0X2lycSBwbjU0NF9pcnFfc3RhdGUoc3RydWN0IHBuNTQ0X2luZm8gKmluZm8pCit7CisJZW51bSBwbjU0NF9pcnEgaXJxOworCisJbXV0ZXhfbG9jaygmaW5mby0+cmVhZF9tdXRleCk7CisJaXJxID0gaW5mby0+cmVhZF9pcnE7CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5yZWFkX211dGV4KTsKKwkvKgorCSAqIFhYWDogc2hvdWxkIHdlIGNoZWNrIEdQSU8tbGluZSBzdGF0dXMgZGlyZWN0bHk/CisJICogcmV0dXJuIHBkYXRhLT5pcnFfc3RhdHVzKCkgPyBQTjU0NF9JTlQgOiBQTjU0NF9OT05FOworCSAqLworCisJcmV0dXJuIGlycTsKK30KKworc3RhdGljIHNzaXplX3QgcG41NDRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgcG41NDRfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihmaWxlLT5wcml2YXRlX2RhdGEsCisJCQkJCSAgICAgICBzdHJ1Y3QgcG41NDRfaW5mbywgbWlzY2Rldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGluZm8tPmkyY19kZXY7CisJZW51bSBwbjU0NF9pcnEgaXJxOworCXNpemVfdCBsZW47CisJaW50IHIgPSAwOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogaW5mbzogJXAsIGNvdW50OiAlenVcbiIsIF9fZnVuY19fLAorCQlpbmZvLCBjb3VudCk7CisKKwltdXRleF9sb2NrKCZpbmZvLT5tdXRleCk7CisKKwlpZiAoaW5mby0+c3RhdGUgPT0gUE41NDRfU1RfQ09MRCkgeworCQlyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaXJxID0gcG41NDRfaXJxX3N0YXRlKGluZm8pOworCWlmIChpcnEgPT0gUE41NDRfTk9ORSkgeworCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXIgPSAtRUFHQUlOOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGluZm8tPnJlYWRfd2FpdCwKKwkJCQkJICAgICAoaW5mby0+cmVhZF9pcnEgPT0gUE41NDRfSU5UKSkpIHsKKwkJCXIgPSAtRVJFU1RBUlRTWVM7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChpbmZvLT5zdGF0ZSA9PSBQTjU0NF9TVF9GV19SRUFEWSkgeworCQlsZW4gPSBtaW4oY291bnQsIGluZm8tPmJ1Zmxlbik7CisKKwkJbXV0ZXhfbG9jaygmaW5mby0+cmVhZF9tdXRleCk7CisJCXIgPSBwbjU0NF9md19yZWFkKGluZm8tPmkyY19kZXYsIGluZm8tPmJ1ZiwgbGVuKTsKKwkJaW5mby0+cmVhZF9pcnEgPSBQTjU0NF9OT05FOworCQltdXRleF91bmxvY2soJmluZm8tPnJlYWRfbXV0ZXgpOworCisJCWlmIChyIDwgMCkgeworCQkJZGV2X2VycigmaW5mby0+aTJjX2Rldi0+ZGV2LCAiRlcgcmVhZCBmYWlsZWQ6ICVkXG4iLCByKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIkZXIHJlYWQ6ICIsIERVTVBfUFJFRklYX05PTkUsCisJCQkgICAgICAgMTYsIDIsIGluZm8tPmJ1ZiwgciwgZmFsc2UpOworCisJCSpvZmZzZXQgKz0gcjsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGluZm8tPmJ1ZiwgcikpIHsKKwkJCXIgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwl9IGVsc2UgeworCQlsZW4gPSBtaW4oY291bnQsIGluZm8tPmJ1Zmxlbik7CisKKwkJbXV0ZXhfbG9jaygmaW5mby0+cmVhZF9tdXRleCk7CisJCXIgPSBwbjU0NF9pMmNfcmVhZChpbmZvLT5pMmNfZGV2LCBpbmZvLT5idWYsIGxlbik7CisJCWluZm8tPnJlYWRfaXJxID0gUE41NDRfTk9ORTsKKwkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5yZWFkX211dGV4KTsKKworCQlpZiAociA8IDApIHsKKwkJCWRldl9lcnIoJmluZm8tPmkyY19kZXYtPmRldiwgInJlYWQgZmFpbGVkICglZClcbiIsIHIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgInJlYWQ6ICIsIERVTVBfUFJFRklYX05PTkUsCisJCQkgICAgICAgMTYsIDIsIGluZm8tPmJ1ZiwgciwgZmFsc2UpOworCisJCSpvZmZzZXQgKz0gcjsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGluZm8tPmJ1ZiwgcikpIHsKKwkJCXIgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJmluZm8tPm11dGV4KTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBuNTQ0X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHBuNTQ0X2luZm8gKmluZm8gPSBjb250YWluZXJfb2YoZmlsZS0+cHJpdmF0ZV9kYXRhLAorCQkJCQkgICAgICAgc3RydWN0IHBuNTQ0X2luZm8sIG1pc2NkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBpbmZvLT5pMmNfZGV2OworCWludCByID0gMDsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IGluZm86ICVwXG4iLCBfX2Z1bmNfXywgaW5mbyk7CisKKwltdXRleF9sb2NrKCZpbmZvLT5tdXRleCk7CisKKwlpZiAoaW5mby0+c3RhdGUgPT0gUE41NDRfU1RfQ09MRCkgeworCQlyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJcG9sbF93YWl0KGZpbGUsICZpbmZvLT5yZWFkX3dhaXQsIHdhaXQpOworCisJaWYgKHBuNTQ0X2lycV9zdGF0ZShpbmZvKSA9PSBQTjU0NF9JTlQpIHsKKwkJciA9IFBPTExJTiB8IFBPTExSRE5PUk07CisJCWdvdG8gb3V0OworCX0KK291dDoKKwltdXRleF91bmxvY2soJmluZm8tPm11dGV4KTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgc3NpemVfdCBwbjU0NF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBwbjU0NF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGZpbGUtPnByaXZhdGVfZGF0YSwKKwkJCQkJICAgICAgIHN0cnVjdCBwbjU0NF9pbmZvLCBtaXNjZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gaW5mby0+aTJjX2RldjsKKwlzc2l6ZV90CWxlbjsKKwlpbnQgcjsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IGluZm86ICVwLCBjb3VudCAlenVcbiIsIF9fZnVuY19fLAorCQlpbmZvLCBjb3VudCk7CisKKwltdXRleF9sb2NrKCZpbmZvLT5tdXRleCk7CisKKwlpZiAoaW5mby0+c3RhdGUgPT0gUE41NDRfU1RfQ09MRCkgeworCQlyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBYWFg6IHNob3VsZCB3ZSBkZXRlY3QgcnNldC13cml0ZXMgYW5kIGNsZWFuIHBvc3NpYmxlCisJICogcmVhZF9pcnEgc3RhdGUKKwkgKi8KKwlpZiAoaW5mby0+c3RhdGUgPT0gUE41NDRfU1RfRldfUkVBRFkpIHsKKwkJc2l6ZV90IGZ3X2xlbjsKKworCQlpZiAoY291bnQgPCBQTjU0NF9GV19IRUFERVJfU0laRSkgeworCQkJciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWxlbiA9IG1pbihjb3VudCwgaW5mby0+YnVmbGVuKTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGluZm8tPmJ1ZiwgYnVmLCBsZW4pKSB7CisJCQlyID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIkZXIHdyaXRlOiAiLCBEVU1QX1BSRUZJWF9OT05FLAorCQkJICAgICAgIDE2LCAyLCBpbmZvLT5idWYsIGxlbiwgZmFsc2UpOworCisJCWZ3X2xlbiA9IFBONTQ0X0ZXX0hFQURFUl9TSVpFICsgKGluZm8tPmJ1ZlsxXSA8PCA4KSArCisJCQlpbmZvLT5idWZbMl07CisKKwkJaWYgKGxlbiA+IGZ3X2xlbikgLyogMSBtc2cgYXQgYSB0aW1lICovCisJCQlsZW4gPSBmd19sZW47CisKKwkJciA9IHBuNTQ0X2Z3X3dyaXRlKGluZm8tPmkyY19kZXYsIGluZm8tPmJ1ZiwgbGVuKTsKKwl9IGVsc2UgeworCQlpZiAoY291bnQgPCBQTjU0NF9MTENfTUlOX1NJWkUpIHsKKwkJCXIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQlsZW4gPSBtaW4oY291bnQsIGluZm8tPmJ1Zmxlbik7CisJCWlmIChjb3B5X2Zyb21fdXNlcihpbmZvLT5idWYsIGJ1ZiwgbGVuKSkgeworCQkJciA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJ3cml0ZTogIiwgRFVNUF9QUkVGSVhfTk9ORSwKKwkJCSAgICAgICAxNiwgMiwgaW5mby0+YnVmLCBsZW4sIGZhbHNlKTsKKworCQlpZiAobGVuID4gKGluZm8tPmJ1ZlswXSArIDEpKSAvKiAxIG1zZyBhdCBhIHRpbWUgKi8KKwkJCWxlbiAgPSBpbmZvLT5idWZbMF0gKyAxOworCisJCXIgPSBwbjU0NF9pMmNfd3JpdGUoaW5mby0+aTJjX2RldiwgaW5mby0+YnVmLCBsZW4pOworCX0KK291dDoKKwltdXRleF91bmxvY2soJmluZm8tPm11dGV4KTsKKworCXJldHVybiByOworCit9CisKK3N0YXRpYyBsb25nIHBuNTQ0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgcG41NDRfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihmaWxlLT5wcml2YXRlX2RhdGEsCisJCQkJCSAgICAgICBzdHJ1Y3QgcG41NDRfaW5mbywgbWlzY2Rldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGluZm8tPmkyY19kZXY7CisJc3RydWN0IHBuNTQ0X25mY19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCByID0gMDsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IGluZm86ICVwLCBjbWQ6IDB4JXhcbiIsIF9fZnVuY19fLCBpbmZvLCBjbWQpOworCisJbXV0ZXhfbG9jaygmaW5mby0+bXV0ZXgpOworCisJaWYgKGluZm8tPnN0YXRlID09IFBONTQ0X1NUX0NPTEQpIHsKKwkJciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCXBkYXRhID0gaW5mby0+aTJjX2Rldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFBONTQ0X0dFVF9GV19NT0RFOgorCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiAgUE41NDRfR0VUX0ZXX01PREVcbiIsIF9fZnVuY19fKTsKKworCQl2YWwgPSAoaW5mby0+c3RhdGUgPT0gUE41NDRfU1RfRldfUkVBRFkpOworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnZhbCwgc2l6ZW9mKHZhbCkpKSB7CisJCQlyID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIFBONTQ0X1NFVF9GV19NT0RFOgorCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiAgUE41NDRfU0VUX0ZXX01PREVcbiIsIF9fZnVuY19fKTsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhbCwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YodmFsKSkpIHsKKwkJCXIgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAodmFsKSB7CisJCQlpZiAoaW5mby0+c3RhdGUgPT0gUE41NDRfU1RfRldfUkVBRFkpCisJCQkJYnJlYWs7CisKKwkJCXBuNTQ0X2Rpc2FibGUoaW5mbyk7CisJCQlyID0gcG41NDRfZW5hYmxlKGluZm8sIEZXX01PREUpOworCQkJaWYgKHIgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9IGVsc2UgeworCQkJaWYgKGluZm8tPnN0YXRlID09IFBONTQ0X1NUX1JFQURZKQorCQkJCWJyZWFrOworCQkJcG41NDRfZGlzYWJsZShpbmZvKTsKKwkJCXIgPSBwbjU0NF9lbmFibGUoaW5mbywgSENJX01PREUpOworCQkJaWYgKHIgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CisJCWZpbGUtPmZfcG9zID0gaW5mby0+cmVhZF9vZmZzZXQ7CisJCWJyZWFrOworCisJY2FzZSBUQ0dFVFM6CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6ICBUQ0dFVFNcbiIsIF9fZnVuY19fKTsKKworCQlyID0gLUVOT0lPQ1RMQ01EOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiVW5rbm93biBpb2N0bCAweCV4XG4iLCBjbWQpOworCQlyID0gLUVOT0lPQ1RMQ01EOworCQlicmVhazsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJmluZm8tPm11dGV4KTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IHBuNTQ0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHBuNTQ0X2luZm8gKmluZm8gPSBjb250YWluZXJfb2YoZmlsZS0+cHJpdmF0ZV9kYXRhLAorCQkJCQkgICAgICAgc3RydWN0IHBuNTQ0X2luZm8sIG1pc2NkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBpbmZvLT5pMmNfZGV2OworCWludCByID0gMDsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IGluZm86ICVwLCBjbGllbnQgJXBcbiIsIF9fZnVuY19fLAorCQlpbmZvLCBpbmZvLT5pMmNfZGV2KTsKKworCW11dGV4X2xvY2soJmluZm8tPm11dGV4KTsKKworCS8qCisJICogT25seSAxIGF0IGEgdGltZS4KKwkgKiBYWFg6IG1heWJlIHVzZXIgKGNvdW50ZXIpIHdvdWxkIHdvcmsgYmV0dGVyCisJICovCisJaWYgKGluZm8tPnN0YXRlICE9IFBONTQ0X1NUX0NPTEQpIHsKKwkJciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJZmlsZS0+Zl9wb3MgPSBpbmZvLT5yZWFkX29mZnNldDsKKwlyID0gcG41NDRfZW5hYmxlKGluZm8sIEhDSV9NT0RFKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmaW5mby0+bXV0ZXgpOworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IHBuNTQ0X2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBwbjU0NF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGZpbGUtPnByaXZhdGVfZGF0YSwKKwkJCQkJICAgICAgIHN0cnVjdCBwbjU0NF9pbmZvLCBtaXNjZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gaW5mby0+aTJjX2RldjsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IGluZm86ICVwLCBjbGllbnQgJXBcbiIsCisJCV9fZnVuY19fLCBpbmZvLCBpbmZvLT5pMmNfZGV2KTsKKworCW11dGV4X2xvY2soJmluZm8tPm11dGV4KTsKKwlwbjU0NF9kaXNhYmxlKGluZm8pOworCW11dGV4X3VubG9jaygmaW5mby0+bXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBuNTQ0X2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS5yZWFkCQk9IHBuNTQ0X3JlYWQsCisJLndyaXRlCQk9IHBuNTQ0X3dyaXRlLAorCS5wb2xsCQk9IHBuNTQ0X3BvbGwsCisJLm9wZW4JCT0gcG41NDRfb3BlbiwKKwkucmVsZWFzZQk9IHBuNTQ0X2Nsb3NlLAorCS51bmxvY2tlZF9pb2N0bAk9IHBuNTQ0X2lvY3RsLAorfTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwbjU0NF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBwbjU0NF9pbmZvICppbmZvOworCWludCByID0gMDsKKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIioqKlxuJXM6IGNsaWVudCAlcFxuKioqXG4iLCBfX2Z1bmNfXywgY2xpZW50KTsKKworCWluZm8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICIlczogaW5mbzogJXAsIGNsaWVudCAlcFxuIiwgX19mdW5jX18sCisJCSBpbmZvLCBjbGllbnQpOworCisJbXV0ZXhfbG9jaygmaW5mby0+bXV0ZXgpOworCisJc3dpdGNoIChpbmZvLT5zdGF0ZSkgeworCWNhc2UgUE41NDRfU1RfRldfUkVBRFk6CisJCS8qIERvIG5vdCBzdXNwZW5kIHdoaWxlIHVwZ3JhZGluZyBGVywgcGxlYXNlISAqLworCQlyID0gLUVQRVJNOworCQlicmVhazsKKworCWNhc2UgUE41NDRfU1RfUkVBRFk6CisJCS8qCisJCSAqIENIRUNLOiBEZXZpY2Ugc2hvdWxkIGJlIGluIHN0YW5kYnktbW9kZS4gTm8gd2F5IHRvIGNoZWNrPworCQkgKiBBbGxvd2luZyBsb3cgcG93ZXIgbW9kZSBmb3IgdGhlIHJlZ3VsYXRvciBpcyBwb3RlbnRpYWxseQorCQkgKiBkYW5nZXJvdXMgaWYgcG41NDQgZG9lcyBub3QgZ28gdG8gc3VzcGVuc2lvbi4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBQTjU0NF9TVF9DT0xEOgorCQlicmVhazsKKwl9OworCisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgcG41NDRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBwbjU0NF9pbmZvICppbmZvID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHIgPSAwOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogaW5mbzogJXAsIGNsaWVudCAlcFxuIiwgX19mdW5jX18sCisJCWluZm8sIGNsaWVudCk7CisKKwltdXRleF9sb2NrKCZpbmZvLT5tdXRleCk7CisKKwlzd2l0Y2ggKGluZm8tPnN0YXRlKSB7CisJY2FzZSBQTjU0NF9TVF9SRUFEWToKKwkJLyoKKwkJICogQ0hFQ0s6IElmIHJlZ3VsYXRvciBsb3cgcG93ZXIgbW9kZSBpcyBhbGxvd2VkIGluCisJCSAqIHBuNTQ0X3N1c3BlbmQsIHdlIHNob3VsZCBnbyBiYWNrIHRvIG5vcm1hbCBtb2RlCisJCSAqIGhlcmUuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgUE41NDRfU1RfQ09MRDoKKwkJYnJlYWs7CisKKwljYXNlIFBONTQ0X1NUX0ZXX1JFQURZOgorCQlicmVhazsKKwl9OworCisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5tdXRleCk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKHBuNTQ0X3BtX29wcywgcG41NDRfc3VzcGVuZCwgcG41NDRfcmVzdW1lKTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcG41NDRfYXR0ciA9CisJX19BVFRSKG5mY190ZXN0LCBTX0lSVUdPLCBwbjU0NF90ZXN0LCBOVUxMKTsKKworc3RhdGljIGludCBfX2RldmluaXQgcG41NDRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBwbjU0NF9pbmZvICppbmZvOworCXN0cnVjdCBwbjU0NF9uZmNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJaW50IHIgPSAwOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiSVJROiAlZFxuIiwgY2xpZW50LT5pcnEpOworCisJLyogcHJpdmF0ZSBkYXRhIGFsbG9jYXRpb24gKi8KKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBuNTQ0X2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgcG41NDRfaW5mby5cbiIpOworCQlyID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW5mb19hbGxvYzsKKwl9CisKKwlpbmZvLT5idWZsZW4gPSBtYXgoUE41NDRfTVNHX01BWF9TSVpFLCBQTjU0NF9NQVhfSTJDX1RSQU5TRkVSKTsKKwlpbmZvLT5idWYgPSBremFsbG9jKGluZm8tPmJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvLT5idWYpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgcG41NDRfaW5mby0+YnVmLlxuIik7CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9idWZfYWxsb2M7CisJfQorCisJaW5mby0+cmVnc1swXS5zdXBwbHkgPSByZWdfdmRkX2lvOworCWluZm8tPnJlZ3NbMV0uc3VwcGx5ID0gcmVnX3ZiYXQ7CisJciA9IHJlZ3VsYXRvcl9idWxrX2dldCgmY2xpZW50LT5kZXYsIEFSUkFZX1NJWkUoaW5mby0+cmVncyksCisJCQkJIGluZm8tPnJlZ3MpOworCWlmIChyIDwgMCkKKwkJZ290byBlcnJfa21hbGxvYzsKKworCWluZm8tPmkyY19kZXYgPSBjbGllbnQ7CisJaW5mby0+c3RhdGUgPSBQTjU0NF9TVF9DT0xEOworCWluZm8tPnJlYWRfaXJxID0gUE41NDRfTk9ORTsKKwltdXRleF9pbml0KCZpbmZvLT5yZWFkX211dGV4KTsKKwltdXRleF9pbml0KCZpbmZvLT5tdXRleCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+cmVhZF93YWl0KTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBpbmZvKTsKKwlwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfcmVnOworCX0KKworCWlmICghcGRhdGEtPnJlcXVlc3RfcmVzb3VyY2VzKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAicmVxdWVzdF9yZXNvdXJjZXMoKSBtaXNzaW5nXG4iKTsKKwkJciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3JlZzsKKwl9CisKKwlyID0gcGRhdGEtPnJlcXVlc3RfcmVzb3VyY2VzKGNsaWVudCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJDYW5ub3QgZ2V0IHBsYXRmb3JtIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyX3JlZzsKKwl9CisKKwlyID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY2xpZW50LT5pcnEsIE5VTEwsIHBuNTQ0X2lycV90aHJlYWRfZm4sCisJCQkJIElSUUZfVFJJR0dFUl9SSVNJTkcsIFBONTQ0X0RSSVZFUl9OQU1FLAorCQkJCSBpbmZvKTsKKwlpZiAociA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIpOworCQlnb3RvIGVycl9yZXM7CisJfQorCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgdGVzdCB3ZSBkb24ndCBuZWVkIHRoZSBzeXNmcyBmaWxlICovCisJaWYgKHBkYXRhLT50ZXN0KSB7CisJCXIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmcG41NDRfYXR0cik7CisJCWlmIChyKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkic3lzZnMgcmVnaXN0cmF0aW9uIGZhaWxlZCwgZXJyb3IgJWRcbiIsIHIpOworCQkJZ290byBlcnJfaXJxOworCQl9CisJfQorCisJaW5mby0+bWlzY2Rldi5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUjsKKwlpbmZvLT5taXNjZGV2Lm5hbWUgPSBQTjU0NF9EUklWRVJfTkFNRTsKKwlpbmZvLT5taXNjZGV2LmZvcHMgPSAmcG41NDRfZm9wczsKKwlpbmZvLT5taXNjZGV2LnBhcmVudCA9ICZjbGllbnQtPmRldjsKKwlyID0gbWlzY19yZWdpc3RlcigmaW5mby0+bWlzY2Rldik7CisJaWYgKHIgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9zeXNmczsKKwl9CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiBpbmZvOiAlcCwgcGRhdGEgJXAsIGNsaWVudCAlcFxuIiwKKwkJX19mdW5jX18sIGluZm8sIHBkYXRhLCBjbGllbnQpOworCisJcmV0dXJuIDA7CisKK2Vycl9zeXNmczoKKwlpZiAocGRhdGEtPnRlc3QpCisJCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsICZwbjU0NF9hdHRyKTsKK2Vycl9pcnE6CisJZnJlZV9pcnEoY2xpZW50LT5pcnEsIGluZm8pOworZXJyX3JlczoKKwlpZiAocGRhdGEtPmZyZWVfcmVzb3VyY2VzKQorCQlwZGF0YS0+ZnJlZV9yZXNvdXJjZXMoKTsKK2Vycl9yZWc6CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKGluZm8tPnJlZ3MpLCBpbmZvLT5yZWdzKTsKK2Vycl9rbWFsbG9jOgorCWtmcmVlKGluZm8tPmJ1Zik7CitlcnJfYnVmX2FsbG9jOgorCWtmcmVlKGluZm8pOworZXJyX2luZm9fYWxsb2M6CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IHBuNTQ0X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBwbjU0NF9pbmZvICppbmZvID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHBuNTQ0X25mY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwltaXNjX2RlcmVnaXN0ZXIoJmluZm8tPm1pc2NkZXYpOworCWlmIChwZGF0YS0+dGVzdCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwgJnBuNTQ0X2F0dHIpOworCisJaWYgKGluZm8tPnN0YXRlICE9IFBONTQ0X1NUX0NPTEQpIHsKKwkJaWYgKHBkYXRhLT5kaXNhYmxlKQorCQkJcGRhdGEtPmRpc2FibGUoKTsKKworCQlpbmZvLT5yZWFkX2lycSA9IFBONTQ0X05PTkU7CisJfQorCisJZnJlZV9pcnEoY2xpZW50LT5pcnEsIGluZm8pOworCWlmIChwZGF0YS0+ZnJlZV9yZXNvdXJjZXMpCisJCXBkYXRhLT5mcmVlX3Jlc291cmNlcygpOworCisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKGluZm8tPnJlZ3MpLCBpbmZvLT5yZWdzKTsKKwlrZnJlZShpbmZvLT5idWYpOworCWtmcmVlKGluZm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwbjU0NF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBQTjU0NF9EUklWRVJfTkFNRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtID0gJnBuNTQ0X3BtX29wcywKKyNlbmRpZgorCX0sCisJLnByb2JlID0gcG41NDRfcHJvYmUsCisJLmlkX3RhYmxlID0gcG41NDRfaWRfdGFibGUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHBuNTQ0X3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbjU0NF9pbml0KHZvaWQpCit7CisJaW50IHI7CisKKwlwcl9kZWJ1ZyhEUklWRVJfREVTQyAiOiAlc1xuIiwgX19mdW5jX18pOworCisJciA9IGkyY19hZGRfZHJpdmVyKCZwbjU0NF9kcml2ZXIpOworCWlmIChyKSB7CisJCXByX2VycihQTjU0NF9EUklWRVJfTkFNRSAiOiBkcml2ZXIgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiByOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcG41NDRfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZwbjU0NF9kcml2ZXIpOworCXByX2luZm8oRFJJVkVSX0RFU0MgIiwgRXhpdGluZy5cbiIpOworfQorCittb2R1bGVfaW5pdChwbjU0NF9pbml0KTsKK21vZHVsZV9leGl0KHBuNTQ0X2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL0tjb25maWcKaW5kZXggNWIxNjMwZS4uYTk1MjNmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnCkBAIC00NSw2ICs0NSw3IEBACiAgICAgICAgIGRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBYRU4KICAgICAgICAgc2VsZWN0IEhPVFBMVUcKICAgICAgICAgc2VsZWN0IFBDSV9YRU4KKwlzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORAogICAgICAgICBkZWZhdWx0IHkKICAgICAgICAgaGVscAogICAgICAgICAgIFRoZSBQQ0kgZGV2aWNlIGZyb250ZW5kIGRyaXZlciBhbGxvd3MgdGhlIGtlcm5lbCB0byBpbXBvcnQgYXJiaXRyYXJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5oIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuaAppbmRleCA4MTQ2ZTNiLi5mNTU4ZTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmgKQEAgLTksNyArOSw3IEBACiAjZW5kaWYKIAogLyoKLSAqIE0zMlIgUEMgQ2FyZCBDb250cm9sZXIKKyAqIE0zMlIgUEMgQ2FyZCBDb250cm9sbGVyCiAgKi8KICNkZWZpbmUgTTMyUl9QQ0MwX0JBU0UgICAgICAgIDB4MDBlZjcwMDAKICNkZWZpbmUgTTMyUl9QQ0MxX0JBU0UgICAgICAgIDB4MDBlZjcwMjAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmggYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5oCmluZGV4IGU0ZmZmZTQuLmY5NWM1ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmgKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuaApAQCAtNSw3ICs1LDcgQEAKICNkZWZpbmUgTTMyUl9NQVhfUENDCTIKIAogLyoKLSAqIE0zMlIgUEMgQ2FyZCBDb250cm9sZXIKKyAqIE0zMlIgUEMgQ2FyZCBDb250cm9sbGVyCiAgKi8KICNkZWZpbmUgTTMyUl9QQ0MwX0JBU0UgICAgICAgIDB4MDBlZjcwMDAKICNkZWZpbmUgTTMyUl9QQ0MxX0JBU0UgICAgICAgIDB4MDBlZjcwMjAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMgYi9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCmluZGV4IDk5ZDRmMjMuLjBkYjQ4MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKIAlvdXRfYmUzMihNOFhYX1BHQ1JYKDEpLAogCQkgTThYWF9QR0NSWF9DWE9FIHwgKG1rX2ludF9pbnRfbWFzayhod2lycSkgPDwgMTYpKTsKIAotCS8qIGludGlhbGl6ZSB0aGUgZml4ZWQgbWVtb3J5IHdpbmRvd3MgKi8KKwkvKiBpbml0aWFsaXplIHRoZSBmaXhlZCBtZW1vcnkgd2luZG93cyAqLwogCiAJZm9yIChpID0gMDsgaSA8IFBDTUNJQV9TT0NLRVRTX05POyBpKyspIHsKIAkJZm9yIChtID0gMDsgbSA8IFBDTUNJQV9NRU1fV0lOX05POyBtKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCmluZGV4IGVlNDBkNjguLmM1YzRiOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYwpAQCAtMTAyMSw3ICsxMDIxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGFjZXJfYmxfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGFjZXJfYmxfb3BzID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IHJlYWRfYnJpZ2h0bmVzcywKIAkudXBkYXRlX3N0YXR1cyA9IHVwZGF0ZV9ibF9zdGF0dXMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9wLmMKaW5kZXggZDIzNWY0NC4uZjNhYTZhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jCkBAIC02NDAsNyArNjQwLDcgQEAKIAlyZXR1cm4gYXN1c19sY2Rfc2V0KGFzdXMsIHZhbHVlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGFzdXNibF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgYXN1c2JsX29wcyA9IHsKIAkuZ2V0X2JyaWdodG5lc3MgPSBhc3VzX3JlYWRfYnJpZ2h0bmVzcywKIAkudXBkYXRlX3N0YXR1cyA9IHVwZGF0ZV9ibF9zdGF0dXMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwppbmRleCBjYTA1YWVmLi40NjMzZmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwpAQCAtMTQ2Nyw3ICsxNDY3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGFzdXNfYmFja2xpZ2h0X2RhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgYXN1c19iYWNrbGlnaHRfZGF0YSA9IHsKIAkuZ2V0X2JyaWdodG5lc3MgPSByZWFkX2JyaWdodG5lc3MsCiAJLnVwZGF0ZV9zdGF0dXMgID0gc2V0X2JyaWdodG5lc3Nfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCmluZGV4IGNmOGE4OWEuLjM0NjU3ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwpAQCAtNTQ2LDcgKzU0Niw3IEBACiAJcmV0dXJuIGJ1ZmZlci0+b3V0cHV0WzFdOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgZGVsbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgZGVsbF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzID0gZGVsbF9nZXRfaW50ZW5zaXR5LAogCS51cGRhdGVfc3RhdHVzICA9IGRlbGxfc2VuZF9pbnRlbnNpdHksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwppbmRleCBlOWZjNTMwLi40OWQ5YWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwpAQCAtMTEyNiw3ICsxMTI2LDcgQEAKIAlyZXR1cm4gc2V0X2JyaWdodG5lc3MoYmQsIGJkLT5wcm9wcy5icmlnaHRuZXNzKTsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGVlZXBjYmxfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGVlZXBjYmxfb3BzID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IHJlYWRfYnJpZ2h0bmVzcywKIAkudXBkYXRlX3N0YXR1cyA9IHVwZGF0ZV9ibF9zdGF0dXMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKaW5kZXggYWQ4OGIyZS4uMTllOTJiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCkBAIC00MzcsNyArNDM3LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgZnVqaXRzdWJsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBmdWppdHN1Ymxfb3BzID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IGJsX2dldF9icmlnaHRuZXNzLAogCS51cGRhdGVfc3RhdHVzID0gYmxfdXBkYXRlX3N0YXR1cywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwppbmRleCBiNGE5NWJiLi41ZTgzMzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKQEAgLTg1OCw3ICs4NTgsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKnNvbnlfYmFja2xpZ2h0X2RldmljZTsKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBzb255X2JhY2tsaWdodF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgc29ueV9iYWNrbGlnaHRfb3BzID0gewogCS51cGRhdGVfc3RhdHVzID0gc29ueV9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywKIAkuZ2V0X2JyaWdodG5lc3MgPSBzb255X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggYTk3NGNhMy4uZGQ1OTk1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtNjExMCw3ICs2MTEwLDcgQEAKIAkJCSAgICAgICBCQUNLTElHSFRfVVBEQVRFX0hPVEtFWSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBpYm1fYmFja2xpZ2h0X2RhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgaWJtX2JhY2tsaWdodF9kYXRhID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3NfZ2V0LAogCS51cGRhdGVfc3RhdHVzICA9IGJyaWdodG5lc3NfdXBkYXRlX3N0YXR1cywKIH07CkBAIC03MTk0LDcgKzcxOTQsNyBAQAogICogCQlUUEFDUElfRkFOX1dSX0FDUElfRkFOUyAoWDMxL1g0MC9YNDEpCiAgKgogICoJRklSTVdBUkUgQlVHOiBvbiBzb21lIG1vZGVscywgRUMgMHgyZiBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQgYXQKLSAqCWJvb3QuIEFwcGFyZW50bHkgdGhlIEVDIGRvZXMgbm90IGludGlhbGl6ZSBpdCwgc28gdW5sZXNzIEFDUEkgRFNEVAorICoJYm9vdC4gQXBwYXJlbnRseSB0aGUgRUMgZG9lcyBub3QgaW5pdGlhbGl6ZSBpdCwgc28gdW5sZXNzIEFDUEkgRFNEVAogICoJZG9lcyBzbywgaXRzIGluaXRpYWwgdmFsdWUgaXMgbWVhbmluZ2xlc3MgKDB4MDcpLgogICoKICAqCUZvciBmaXJtd2FyZSBidWdzLCByZWZlciB0bzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMKaW5kZXggNDI3NmRhNy4uMjA5Y2NlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMKQEAgLTg0MSw3ICs4NDEsNyBAQAogCXJlbW92ZV9wcm9jX2VudHJ5KCJ2ZXJzaW9uIiwgdG9zaGliYV9wcm9jX2Rpcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyB0b3NoaWJhX2JhY2tsaWdodF9kYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIHRvc2hpYmFfYmFja2xpZ2h0X2RhdGEgPSB7CiAgICAgICAgIC5nZXRfYnJpZ2h0bmVzcyA9IGdldF9sY2QsCiAgICAgICAgIC51cGRhdGVfc3RhdHVzICA9IHNldF9sY2Rfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvczNjX2FkY19iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL3MzY19hZGNfYmF0dGVyeS5jCmluZGV4IGZlMTZiNDguLjRhOGFlMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvczNjX2FkY19iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9wb3dlci9zM2NfYWRjX2JhdHRlcnkuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKglpUEFRIGgxOTMwL2gxOTQwL3J4MTk1MCBiYXR0ZXJ5IGNvbnRyb2xlciBkcml2ZXIKKyAqCWlQQVEgaDE5MzAvaDE5NDAvcngxOTUwIGJhdHRlcnkgY29udHJvbGxlciBkcml2ZXIKICAqCUNvcHlyaWdodCAoYykgVmFzaWx5IEtob3J1emhpY2sKICAqCUJhc2VkIG9uIGgxOTQwX2JhdHRlcnkuYyBieSBBcm5hdWQgUGF0YXJkCiAgKgpAQCAtNDI3LDUgKzQyNyw1IEBACiBtb2R1bGVfZXhpdChzM2NfYWRjX2JhdF9leGl0KTsKIAogTU9EVUxFX0FVVEhPUigiVmFzaWx5IEtob3J1emhpY2sgPGFuYXJzb3VsQGdtYWlsLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiaVBBUSBIMTkzMC9IMTk0MC9SWDE5NTAgYmF0dGVyeSBjb250cm9sZXIgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oImlQQVEgSDE5MzAvSDE5NDAvUlgxOTUwIGJhdHRlcnkgY29udHJvbGxlciBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL0tjb25maWcgYi9kcml2ZXJzL3Bwcy9LY29uZmlnCmluZGV4IDFhZmU0ZTAuLmYwZDMzNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHBzL0tjb25maWcKKysrIGIvZHJpdmVycy9wcHMvS2NvbmZpZwpAQCAtMzAsNiArMzAsMTcgQEAKIAkgIG1lc3NhZ2VzIHRvIHRoZSBzeXN0ZW0gbG9nLiAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSBoYXZpbmcgYQogCSAgcHJvYmxlbSB3aXRoIFBQUyBzdXBwb3J0IGFuZCB3YW50IHRvIHNlZSBtb3JlIG9mIHdoYXQgaXMgZ29pbmcgb24uCiAKK2NvbmZpZyBOVFBfUFBTCisJYm9vbCAiUFBTIGtlcm5lbCBjb25zdW1lciBzdXBwb3J0IgorCWRlcGVuZHMgb24gUFBTICYmICFOT19IWgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZGlyZWN0IGluLWtlcm5lbCB0aW1lCisJICBzeW5jcm9uaXphdGlvbiB1c2luZyBhbiBleHRlcm5hbCBQUFMgc2lnbmFsLgorCisJICBJdCBkb2Vzbid0IHdvcmsgb24gdGlja2xlc3Mgc3lzdGVtcyBhdCB0aGUgbW9tZW50LgorCiBzb3VyY2UgZHJpdmVycy9wcHMvY2xpZW50cy9LY29uZmlnCiAKK3NvdXJjZSBkcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL0tjb25maWcKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wcHMvTWFrZWZpbGUgYi9kcml2ZXJzL3Bwcy9NYWtlZmlsZQppbmRleCA5ODk2MGRkLi40NDgzZWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Bwcy9NYWtlZmlsZQpAQCAtMyw3ICszLDggQEAKICMKIAogcHBzX2NvcmUteQkJCTo9IHBwcy5vIGthcGkubyBzeXNmcy5vCitwcHNfY29yZS0kKENPTkZJR19OVFBfUFBTKQkrPSBrYy5vCiBvYmotJChDT05GSUdfUFBTKQkJOj0gcHBzX2NvcmUubwotb2JqLXkJCQkJKz0gY2xpZW50cy8KK29iai15CQkJCSs9IGNsaWVudHMvIGdlbmVyYXRvcnMvCiAKIGNjZmxhZ3MtJChDT05GSUdfUFBTX0RFQlVHKSA6PSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9jbGllbnRzL0tjb25maWcgYi9kcml2ZXJzL3Bwcy9jbGllbnRzL0tjb25maWcKaW5kZXggNGU4MDFiZC4uODUyMGE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMvY2xpZW50cy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcHBzL2NsaWVudHMvS2NvbmZpZwpAQCAtMjIsNCArMjIsMTEgQEAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBhIFBQUyBzb3VyY2UgY29ubmVjdGVkCiAJICB3aXRoIHRoZSBDRCAoQ2FycmllciBEZXRlY3QpIHBpbiBvZiB5b3VyIHNlcmlhbCBwb3J0LgogCitjb25maWcgUFBTX0NMSUVOVF9QQVJQT1JUCisJdHJpc3RhdGUgIlBhcmFsbGVsIHBvcnQgUFBTIGNsaWVudCIKKwlkZXBlbmRzIG9uIFBQUyAmJiBQQVJQT1JUCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIGEgUFBTIHNvdXJjZSBjb25uZWN0ZWQKKwkgIHdpdGggdGhlIGludGVycnVwdCBwaW4gb2YgeW91ciBwYXJhbGxlbCBwb3J0LgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wcHMvY2xpZW50cy9NYWtlZmlsZSBiL2RyaXZlcnMvcHBzL2NsaWVudHMvTWFrZWZpbGUKaW5kZXggODEyYzliMS4uNDI1MTdkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMvY2xpZW50cy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Bwcy9jbGllbnRzL01ha2VmaWxlCkBAIC00LDYgKzQsNyBAQAogCiBvYmotJChDT05GSUdfUFBTX0NMSUVOVF9LVElNRVIpCSs9IHBwcy1rdGltZXIubwogb2JqLSQoQ09ORklHX1BQU19DTElFTlRfTERJU0MpCSs9IHBwcy1sZGlzYy5vCitvYmotJChDT05GSUdfUFBTX0NMSUVOVF9QQVJQT1JUKSArPSBwcHNfcGFycG9ydC5vCiAKIGlmZXEgKCQoQ09ORklHX1BQU19ERUJVRykseSkKIEVYVFJBX0NGTEFHUyArPSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9jbGllbnRzL3Bwcy1rdGltZXIuYyBiL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzLWt0aW1lci5jCmluZGV4IGU3ZWY1YjguLjI3Mjg0NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzLWt0aW1lci5jCisrKyBiL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzLWt0aW1lci5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKiAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMzEsNyArMzIsNyBAQAogICogR2xvYmFsIHZhcmlhYmxlcwogICovCiAKLXN0YXRpYyBpbnQgc291cmNlOworc3RhdGljIHN0cnVjdCBwcHNfZGV2aWNlICpwcHM7CiBzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3Qga3RpbWVyOwogCiAvKgpAQCAtNDAsMTkgKzQxLDE0IEBACiAKIHN0YXRpYyB2b2lkIHBwc19rdGltZXJfZXZlbnQodW5zaWduZWQgbG9uZyBwdHIpCiB7Ci0Jc3RydWN0IHRpbWVzcGVjIF9fdHM7Ci0Jc3RydWN0IHBwc19rdGltZSB0czsKKwlzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUgdHM7CiAKIAkvKiBGaXJzdCBvZiBhbGwgd2UgZ2V0IHRoZSB0aW1lIHN0YW1wLi4uICovCi0JZ2V0bnN0aW1lb2ZkYXkoJl9fdHMpOworCXBwc19nZXRfdHMoJnRzKTsKIAotCXByX2luZm8oIlBQUyBldmVudCBhdCAlbHVcbiIsIGppZmZpZXMpOworCWRldl9pbmZvKHBwcy0+ZGV2LCAiUFBTIGV2ZW50IGF0ICVsdVxuIiwgamlmZmllcyk7CiAKLQkvKiAuLi4gYW5kIHRyYW5zbGF0ZSBpdCB0byBQUFMgdGltZSBkYXRhIHN0cnVjdCAqLwotCXRzLnNlYyA9IF9fdHMudHZfc2VjOwotCXRzLm5zZWMgPSBfX3RzLnR2X25zZWM7Ci0KLQlwcHNfZXZlbnQoc291cmNlLCAmdHMsIFBQU19DQVBUVVJFQVNTRVJULCBOVUxMKTsKKwlwcHNfZXZlbnQocHBzLCAmdHMsIFBQU19DQVBUVVJFQVNTRVJULCBOVUxMKTsKIAogCW1vZF90aW1lcigma3RpbWVyLCBqaWZmaWVzICsgSFopOwogfQpAQCAtNjEsMTIgKzU3LDExIEBACiAgKiBUaGUgZWNobyBmdW5jdGlvbgogICovCiAKLXN0YXRpYyB2b2lkIHBwc19rdGltZXJfZWNobyhpbnQgc291cmNlLCBpbnQgZXZlbnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBwcHNfa3RpbWVyX2VjaG8oc3RydWN0IHBwc19kZXZpY2UgKnBwcywgaW50IGV2ZW50LCB2b2lkICpkYXRhKQogewotCXByX2luZm8oImVjaG8gJXMgJXMgZm9yIHNvdXJjZSAlZFxuIiwKKwlkZXZfaW5mbyhwcHMtPmRldiwgImVjaG8gJXMgJXNcbiIsCiAJCWV2ZW50ICYgUFBTX0NBUFRVUkVBU1NFUlQgPyAiYXNzZXJ0IiA6ICIiLAotCQlldmVudCAmIFBQU19DQVBUVVJFQ0xFQVIgPyAiY2xlYXIiIDogIiIsCi0JCXNvdXJjZSk7CisJCWV2ZW50ICYgUFBTX0NBUFRVUkVDTEVBUiA/ICJjbGVhciIgOiAiIik7CiB9CiAKIC8qCkBAIC04OSwzMCArODQsMjcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHBwc19rdGltZXJfZXhpdCh2b2lkKQogewotCWRlbF90aW1lcl9zeW5jKCZrdGltZXIpOwotCXBwc191bnJlZ2lzdGVyX3NvdXJjZShzb3VyY2UpOworCWRldl9pbmZvKHBwcy0+ZGV2LCAia3RpbWVyIFBQUyBzb3VyY2UgdW5yZWdpc3RlcmVkXG4iKTsKIAotCXByX2luZm8oImt0aW1lciBQUFMgc291cmNlIHVucmVnaXN0ZXJlZFxuIik7CisJZGVsX3RpbWVyX3N5bmMoJmt0aW1lcik7CisJcHBzX3VucmVnaXN0ZXJfc291cmNlKHBwcyk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHBwc19rdGltZXJfaW5pdCh2b2lkKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBwcHNfcmVnaXN0ZXJfc291cmNlKCZwcHNfa3RpbWVyX2luZm8sCisJcHBzID0gcHBzX3JlZ2lzdGVyX3NvdXJjZSgmcHBzX2t0aW1lcl9pbmZvLAogCQkJCVBQU19DQVBUVVJFQVNTRVJUIHwgUFBTX09GRlNFVEFTU0VSVCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgcmVnaXN0ZXIga3RpbWVyIHNvdXJjZVxuIik7Ci0JCXJldHVybiByZXQ7CisJaWYgKHBwcyA9PSBOVUxMKSB7CisJCXByX2VycigiY2Fubm90IHJlZ2lzdGVyIFBQUyBzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0Jc291cmNlID0gcmV0OwogCiAJc2V0dXBfdGltZXIoJmt0aW1lciwgcHBzX2t0aW1lcl9ldmVudCwgMCk7CiAJbW9kX3RpbWVyKCZrdGltZXIsIGppZmZpZXMgKyBIWik7CiAKLQlwcl9pbmZvKCJrdGltZXIgUFBTIHNvdXJjZSByZWdpc3RlcmVkIGF0ICVkXG4iLCBzb3VyY2UpOworCWRldl9pbmZvKHBwcy0+ZGV2LCAia3RpbWVyIFBQUyBzb3VyY2UgcmVnaXN0ZXJlZFxuIik7CiAKLQlyZXR1cm4gIDA7CisJcmV0dXJuIDA7CiB9CiAKIG1vZHVsZV9pbml0KHBwc19rdGltZXJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9jbGllbnRzL3Bwcy1sZGlzYy5jIGIvZHJpdmVycy9wcHMvY2xpZW50cy9wcHMtbGRpc2MuYwppbmRleCA4ZTE5MzJkLi43OTQ1MWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9jbGllbnRzL3Bwcy1sZGlzYy5jCisrKyBiL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzLWxkaXNjLmMKQEAgLTE5LDYgKzE5LDggQEAKICAqICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KQEAgLTI3LDMwICsyOSwxOCBAQAogI2RlZmluZSBQUFNfVFRZX01BR0lDCQkweDAwMDEKIAogc3RhdGljIHZvaWQgcHBzX3R0eV9kY2RfY2hhbmdlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGludCBzdGF0dXMsCi0JCQkJc3RydWN0IHRpbWVzcGVjICp0cykKKwkJCQlzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUgKnRzKQogewotCWludCBpZCA9IChsb25nKXR0eS0+ZGlzY19kYXRhOwotCXN0cnVjdCB0aW1lc3BlYyBfX3RzOwotCXN0cnVjdCBwcHNfa3RpbWUgcHBzX3RzOworCXN0cnVjdCBwcHNfZGV2aWNlICpwcHMgPSAoc3RydWN0IHBwc19kZXZpY2UgKil0dHktPmRpc2NfZGF0YTsKIAotCS8qIEZpcnN0IG9mIGFsbCB3ZSBnZXQgdGhlIHRpbWUgc3RhbXAuLi4gKi8KLQlnZXRuc3RpbWVvZmRheSgmX190cyk7Ci0KLQkvKiBEb2VzIGNhbGxlciBnaXZlIHVzIGEgdGltZXN0YW1wPyAqLwotCWlmICh0cykgewkvKiBZZXMuIExldCdzIHVzZSBpdCEgKi8KLQkJcHBzX3RzLnNlYyA9IHRzLT50dl9zZWM7Ci0JCXBwc190cy5uc2VjID0gdHMtPnR2X25zZWM7Ci0JfSBlbHNlIHsJLyogTm8uIERvIGl0IG91cnNlbGYhICovCi0JCXBwc190cy5zZWMgPSBfX3RzLnR2X3NlYzsKLQkJcHBzX3RzLm5zZWMgPSBfX3RzLnR2X25zZWM7Ci0JfQorCUJVR19PTihwcHMgPT0gTlVMTCk7CiAKIAkvKiBOb3cgZG8gdGhlIFBQUyBldmVudCByZXBvcnQgKi8KLQlwcHNfZXZlbnQoaWQsICZwcHNfdHMsIHN0YXR1cyA/IFBQU19DQVBUVVJFQVNTRVJUIDogUFBTX0NBUFRVUkVDTEVBUiwKLQkJCU5VTEwpOworCXBwc19ldmVudChwcHMsIHRzLCBzdGF0dXMgPyBQUFNfQ0FQVFVSRUFTU0VSVCA6CisJCQlQUFNfQ0FQVFVSRUNMRUFSLCBOVUxMKTsKIAotCXByX2RlYnVnKCJQUFMgJXMgYXQgJWx1IG9uIHNvdXJjZSAjJWRcbiIsCi0JCQlzdGF0dXMgPyAiYXNzZXJ0IiA6ICJjbGVhciIsIGppZmZpZXMsIGlkKTsKKwlkZXZfZGJnKHBwcy0+ZGV2LCAiUFBTICVzIGF0ICVsdVxuIiwKKwkJCXN0YXR1cyA/ICJhc3NlcnQiIDogImNsZWFyIiwgamlmZmllcyk7CiB9CiAKIHN0YXRpYyBpbnQgKCphbGlhc19uX3R0eV9vcGVuKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKQEAgLTYwLDYgKzUwLDcgQEAKIAlzdHJ1Y3QgcHBzX3NvdXJjZV9pbmZvIGluZm87CiAJc3RydWN0IHR0eV9kcml2ZXIgKmRydiA9IHR0eS0+ZHJpdmVyOwogCWludCBpbmRleCA9IHR0eS0+aW5kZXggKyBkcnYtPm5hbWVfYmFzZTsKKwlzdHJ1Y3QgcHBzX2RldmljZSAqcHBzOwogCWludCByZXQ7CiAKIAlpbmZvLm93bmVyID0gVEhJU19NT0RVTEU7CkBAIC03MCwzNCArNjEsNDIgQEAKIAkJCVBQU19PRkZTRVRBU1NFUlQgfCBQUFNfT0ZGU0VUQ0xFQVIgfCBcCiAJCQlQUFNfQ0FOV0FJVCB8IFBQU19UU0ZNVF9UU1BFQzsKIAotCXJldCA9IHBwc19yZWdpc3Rlcl9zb3VyY2UoJmluZm8sIFBQU19DQVBUVVJFQk9USCB8IFwKKwlwcHMgPSBwcHNfcmVnaXN0ZXJfc291cmNlKCZpbmZvLCBQUFNfQ0FQVFVSRUJPVEggfCBcCiAJCQkJUFBTX09GRlNFVEFTU0VSVCB8IFBQU19PRkZTRVRDTEVBUik7Ci0JaWYgKHJldCA8IDApIHsKKwlpZiAocHBzID09IE5VTEwpIHsKIAkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgUFBTIHNvdXJjZSBcIiVzXCJcbiIsIGluZm8ucGF0aCk7Ci0JCXJldHVybiByZXQ7CisJCXJldHVybiAtRU5PTUVNOwogCX0KLQl0dHktPmRpc2NfZGF0YSA9ICh2b2lkICopKGxvbmcpcmV0OworCXR0eS0+ZGlzY19kYXRhID0gcHBzOwogCiAJLyogU2hvdWxkIG9wZW4gTl9UVFkgbGRpc2MgdG9vICovCiAJcmV0ID0gYWxpYXNfbl90dHlfb3Blbih0dHkpOwotCWlmIChyZXQgPCAwKQotCQlwcHNfdW5yZWdpc3Rlcl9zb3VyY2UoKGxvbmcpdHR5LT5kaXNjX2RhdGEpOworCWlmIChyZXQgPCAwKSB7CisJCXByX2VycigiY2Fubm90IG9wZW4gdHR5IGxkaXNjIFwiJXNcIlxuIiwgaW5mby5wYXRoKTsKKwkJZ290byBlcnJfdW5yZWdpc3RlcjsKKwl9CiAKLQlwcl9pbmZvKCJQUFMgc291cmNlICMlZCBcIiVzXCIgYWRkZWRcbiIsIHJldCwgaW5mby5wYXRoKTsKKwlkZXZfaW5mbyhwcHMtPmRldiwgInNvdXJjZSBcIiVzXCIgYWRkZWRcbiIsIGluZm8ucGF0aCk7CiAKIAlyZXR1cm4gMDsKKworZXJyX3VucmVnaXN0ZXI6CisJdHR5LT5kaXNjX2RhdGEgPSBOVUxMOworCXBwc191bnJlZ2lzdGVyX3NvdXJjZShwcHMpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkICgqYWxpYXNfbl90dHlfY2xvc2UpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCiBzdGF0aWMgdm9pZCBwcHNfdHR5X2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0JaW50IGlkID0gKGxvbmcpdHR5LT5kaXNjX2RhdGE7CisJc3RydWN0IHBwc19kZXZpY2UgKnBwcyA9IChzdHJ1Y3QgcHBzX2RldmljZSAqKXR0eS0+ZGlzY19kYXRhOwogCi0JcHBzX3VucmVnaXN0ZXJfc291cmNlKGlkKTsKIAlhbGlhc19uX3R0eV9jbG9zZSh0dHkpOwogCi0JcHJfaW5mbygiUFBTIHNvdXJjZSAjJWQgcmVtb3ZlZFxuIiwgaWQpOworCXR0eS0+ZGlzY19kYXRhID0gTlVMTDsKKwlkZXZfaW5mbyhwcHMtPmRldiwgInJlbW92ZWRcbiIpOworCXBwc191bnJlZ2lzdGVyX3NvdXJjZShwcHMpOwogfQogCiBzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBzX2xkaXNjX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzX3BhcnBvcnQuYyBiL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzX3BhcnBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjIyMWVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wcHMvY2xpZW50cy9wcHNfcGFycG9ydC5jCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogcHBzX3BhcnBvcnQuYyAtLSBrZXJuZWwgcGFyYWxsZWwgcG9ydCBQUFMgY2xpZW50CisgKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAgIEFsZXhhbmRlciBHb3JkZWV2IDxsYXNhaW5lQGx2ay5jcy5tc3Uuc3U+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworCisvKgorICogVE9ETzoKKyAqIGltcGxlbWVudCBlY2hvIG92ZXIgU0VMIHBpbgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFuci5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcHBzX2tlcm5lbC5oPgorCisjZGVmaW5lIERSVkRFU0MgInBhcmFsbGVsIHBvcnQgUFBTIGNsaWVudCIKKworLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KKworI2RlZmluZSBDTEVBUl9XQUlUX01BWAkJMTAwCisjZGVmaW5lIENMRUFSX1dBSVRfTUFYX0VSUk9SUwk1CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2xlYXJfd2FpdCA9IDEwMDsKK01PRFVMRV9QQVJNX0RFU0MoY2xlYXJfd2FpdCwKKwkiTWF4aW11bSBudW1iZXIgb2YgcG9ydCByZWFkcyB3aGVuIHBvbGxpbmcgZm9yIHNpZ25hbCBjbGVhciwiCisJIiB6ZXJvIHR1cm5zIGNsZWFyIGVkZ2UgY2FwdHVyZSBvZmYgZW50aXJlbHkiKTsKK21vZHVsZV9wYXJhbShjbGVhcl93YWl0LCB1aW50LCAwKTsKKworCisvKiBpbnRlcm5hbCBwZXIgcG9ydCBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBwcHNfY2xpZW50X3BwIHsKKwlzdHJ1Y3QgcGFyZGV2aWNlICpwYXJkZXY7CS8qIHBhcnBvcnQgZGV2aWNlICovCisJc3RydWN0IHBwc19kZXZpY2UgKnBwczsJCS8qIFBQUyBkZXZpY2UgKi8KKwl1bnNpZ25lZCBpbnQgY3c7CQkvKiBwb3J0IGNsZWFyIHRpbWVvdXQgKi8KKwl1bnNpZ25lZCBpbnQgY3dfZXJyOwkJLyogbnVtYmVyIG9mIHRpbWVvdXRzICovCit9OworCitzdGF0aWMgaW5saW5lIGludCBzaWduYWxfaXNfc2V0KHN0cnVjdCBwYXJwb3J0ICpwb3J0KQoreworCXJldHVybiAocG9ydC0+b3BzLT5yZWFkX3N0YXR1cyhwb3J0KSAmIFBBUlBPUlRfU1RBVFVTX0FDSykgIT0gMDsKK30KKworLyogcGFycG9ydCBpbnRlcnJ1cHQgaGFuZGxlciAqLworc3RhdGljIHZvaWQgcGFycG9ydF9pcnEodm9pZCAqaGFuZGxlKQoreworCXN0cnVjdCBwcHNfZXZlbnRfdGltZSB0c19hc3NlcnQsIHRzX2NsZWFyOworCXN0cnVjdCBwcHNfY2xpZW50X3BwICpkZXYgPSBoYW5kbGU7CisJc3RydWN0IHBhcnBvcnQgKnBvcnQgPSBkZXYtPnBhcmRldi0+cG9ydDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogZmlyc3Qgb2YgYWxsIHdlIGdldCB0aGUgdGltZSBzdGFtcC4uLiAqLworCXBwc19nZXRfdHMoJnRzX2Fzc2VydCk7CisKKwlpZiAoZGV2LT5jdyA9PSAwKQorCQkvKiBjbGVhciBlZGdlIGNhcHR1cmUgZGlzYWJsZWQgKi8KKwkJZ290byBvdXRfYXNzZXJ0OworCisJLyogdHJ5IGNhcHR1cmUgdGhlIGNsZWFyIGVkZ2UgKi8KKworCS8qIFdlIGhhdmUgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGhlcmUuIFRoZSBpZGVhIGlzIHRvIHByZXZlbnQKKwkgKiBvdGhlciBpbnRlcnJ1cHRzIG9uIHRoZSBzYW1lIHByb2Nlc3NvciB0byBpbnRyb2R1Y2UgcmFuZG9tCisJICogbGFncyB3aGlsZSBwb2xsaW5nIHRoZSBwb3J0LiBSZWFkaW5nIGZyb20gSU8gcG9ydCBpcyBrbm93bgorCSAqIHRvIHRha2UgYXBwcm94aW1hdGVseSAxdXMgd2hpbGUgb3RoZXIgaW50ZXJydXB0IGhhbmRsZXJzIGNhbgorCSAqIHRha2UgbXVjaCBtb3JlIHBvdGVudGlhbGx5LgorCSAqCisJICogSW50ZXJydXB0cyB3b24ndCBiZSBkaXNhYmxlZCBmb3IgYSBsb25nIHRpbWUgYmVjYXVzZSB0aGUKKwkgKiBudW1iZXIgb2YgcG9sbHMgaXMgbGltaXRlZCBieSBjbGVhcl93YWl0IHBhcmFtZXRlciB3aGljaCBpcworCSAqIGtlcHQgcmF0aGVyIGxvdy4gU28gaXQgc2hvdWxkIG5ldmVyIGJlIGFuIGlzc3VlLgorCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkvKiBjaGVjayB0aGUgc2lnbmFsIChubyBzaWduYWwgbWVhbnMgdGhlIHB1bHNlIGlzIGxvc3QgdGhpcyB0aW1lKSAqLworCWlmICghc2lnbmFsX2lzX3NldChwb3J0KSkgeworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCWRldl9lcnIoZGV2LT5wcHMtPmRldiwgImxvc3QgdGhlIHNpZ25hbFxuIik7CisJCWdvdG8gb3V0X2Fzc2VydDsKKwl9CisKKwkvKiBwb2xsIHRoZSBwb3J0IHVudGlsIHRoZSBzaWduYWwgaXMgdW5zZXQgKi8KKwlmb3IgKGkgPSBkZXYtPmN3OyBpOyBpLS0pCisJCWlmICghc2lnbmFsX2lzX3NldChwb3J0KSkgeworCQkJcHBzX2dldF90cygmdHNfY2xlYXIpOworCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJZGV2LT5jd19lcnIgPSAwOworCQkJZ290byBvdXRfYm90aDsKKwkJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCS8qIHRpbWVvdXQgKi8KKwlkZXYtPmN3X2VycisrOworCWlmIChkZXYtPmN3X2VyciA+PSBDTEVBUl9XQUlUX01BWF9FUlJPUlMpIHsKKwkJZGV2X2VycihkZXYtPnBwcy0+ZGV2LCAiZGlzYWJsZWQgY2xlYXIgZWRnZSBjYXB0dXJlIGFmdGVyICVkIgorCQkJCSIgdGltZW91dHNcbiIsIGRldi0+Y3dfZXJyKTsKKwkJZGV2LT5jdyA9IDA7CisJCWRldi0+Y3dfZXJyID0gMDsKKwl9CisKK291dF9hc3NlcnQ6CisJLyogZmlyZSBhc3NlcnQgZXZlbnQgKi8KKwlwcHNfZXZlbnQoZGV2LT5wcHMsICZ0c19hc3NlcnQsCisJCQlQUFNfQ0FQVFVSRUFTU0VSVCwgTlVMTCk7CisJcmV0dXJuOworCitvdXRfYm90aDoKKwkvKiBmaXJlIGFzc2VydCBldmVudCAqLworCXBwc19ldmVudChkZXYtPnBwcywgJnRzX2Fzc2VydCwKKwkJCVBQU19DQVBUVVJFQVNTRVJULCBOVUxMKTsKKwkvKiBmaXJlIGNsZWFyIGV2ZW50ICovCisJcHBzX2V2ZW50KGRldi0+cHBzLCAmdHNfY2xlYXIsCisJCQlQUFNfQ0FQVFVSRUNMRUFSLCBOVUxMKTsKKwlyZXR1cm47Cit9CisKKy8qIHRoZSBQUFMgZWNobyBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgcHBzX2VjaG8oc3RydWN0IHBwc19kZXZpY2UgKnBwcywgaW50IGV2ZW50LCB2b2lkICpkYXRhKQoreworCWRldl9pbmZvKHBwcy0+ZGV2LCAiZWNobyAlcyAlc1xuIiwKKwkJZXZlbnQgJiBQUFNfQ0FQVFVSRUFTU0VSVCA/ICJhc3NlcnQiIDogIiIsCisJCWV2ZW50ICYgUFBTX0NBUFRVUkVDTEVBUiA/ICJjbGVhciIgOiAiIik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnBvcnRfYXR0YWNoKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQoreworCXN0cnVjdCBwcHNfY2xpZW50X3BwICpkZXZpY2U7CisJc3RydWN0IHBwc19zb3VyY2VfaW5mbyBpbmZvID0geworCQkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKKwkJLnBhdGgJCT0gIiIsCisJCS5tb2RlCQk9IFBQU19DQVBUVVJFQk9USCB8IFwKKwkJCQkgIFBQU19PRkZTRVRBU1NFUlQgfCBQUFNfT0ZGU0VUQ0xFQVIgfCBcCisJCQkJICBQUFNfRUNIT0FTU0VSVCB8IFBQU19FQ0hPQ0xFQVIgfCBcCisJCQkJICBQUFNfQ0FOV0FJVCB8IFBQU19UU0ZNVF9UU1BFQywKKwkJLmVjaG8JCT0gcHBzX2VjaG8sCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLmRldgkJPSBOVUxMCisJfTsKKworCWRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcHNfY2xpZW50X3BwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZpY2UpIHsKKwkJcHJfZXJyKCJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQsIG5vdCBhdHRhY2hpbmdcbiIpOworCQlyZXR1cm47CisJfQorCisJZGV2aWNlLT5wYXJkZXYgPSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShwb3J0LCBLQlVJTERfTU9ETkFNRSwKKwkJCU5VTEwsIE5VTEwsIHBhcnBvcnRfaXJxLCAwLCBkZXZpY2UpOworCWlmICghZGV2aWNlLT5wYXJkZXYpIHsKKwkJcHJfZXJyKCJjb3VsZG4ndCByZWdpc3RlciB3aXRoICVzXG4iLCBwb3J0LT5uYW1lKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlpZiAocGFycG9ydF9jbGFpbV9vcl9ibG9jayhkZXZpY2UtPnBhcmRldikgPCAwKSB7CisJCXByX2VycigiY291bGRuJ3QgY2xhaW0gJXNcbiIsIHBvcnQtPm5hbWUpOworCQlnb3RvIGVycl91bnJlZ2lzdGVyX2RldjsKKwl9CisKKwlkZXZpY2UtPnBwcyA9IHBwc19yZWdpc3Rlcl9zb3VyY2UoJmluZm8sCisJCQlQUFNfQ0FQVFVSRUJPVEggfCBQUFNfT0ZGU0VUQVNTRVJUIHwgUFBTX09GRlNFVENMRUFSKTsKKwlpZiAoZGV2aWNlLT5wcHMgPT0gTlVMTCkgeworCQlwcl9lcnIoImNvdWxkbid0IHJlZ2lzdGVyIFBQUyBzb3VyY2VcbiIpOworCQlnb3RvIGVycl9yZWxlYXNlX2RldjsKKwl9CisKKwlkZXZpY2UtPmN3ID0gY2xlYXJfd2FpdDsKKworCXBvcnQtPm9wcy0+ZW5hYmxlX2lycShwb3J0KTsKKworCXByX2luZm8oImF0dGFjaGVkIHRvICVzXG4iLCBwb3J0LT5uYW1lKTsKKworCXJldHVybjsKKworZXJyX3JlbGVhc2VfZGV2OgorCXBhcnBvcnRfcmVsZWFzZShkZXZpY2UtPnBhcmRldik7CitlcnJfdW5yZWdpc3Rlcl9kZXY6CisJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShkZXZpY2UtPnBhcmRldik7CitlcnJfZnJlZToKKwlrZnJlZShkZXZpY2UpOworfQorCitzdGF0aWMgdm9pZCBwYXJwb3J0X2RldGFjaChzdHJ1Y3QgcGFycG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgcGFyZGV2aWNlICpwYXJkZXYgPSBwb3J0LT5jYWQ7CisJc3RydWN0IHBwc19jbGllbnRfcHAgKmRldmljZTsKKworCS8qIEZJWE1FOiBvb29oLCB0aGlzIGlzIHVnbHkhICovCisJaWYgKHN0cmNtcChwYXJkZXYtPm5hbWUsIEtCVUlMRF9NT0ROQU1FKSkKKwkJLyogbm90IG91ciBwb3J0ICovCisJCXJldHVybjsKKworCWRldmljZSA9IHBhcmRldi0+cHJpdmF0ZTsKKworCXBvcnQtPm9wcy0+ZGlzYWJsZV9pcnEocG9ydCk7CisJcHBzX3VucmVnaXN0ZXJfc291cmNlKGRldmljZS0+cHBzKTsKKwlwYXJwb3J0X3JlbGVhc2UocGFyZGV2KTsKKwlwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKHBhcmRldik7CisJa2ZyZWUoZGV2aWNlKTsKK30KKworc3RhdGljIHN0cnVjdCBwYXJwb3J0X2RyaXZlciBwcHNfcGFycG9ydF9kcml2ZXIgPSB7CisJLm5hbWUgPSBLQlVJTERfTU9ETkFNRSwKKwkuYXR0YWNoID0gcGFycG9ydF9hdHRhY2gsCisJLmRldGFjaCA9IHBhcnBvcnRfZGV0YWNoLAorfTsKKworLyogbW9kdWxlIHN0YWZmICovCisKK3N0YXRpYyBpbnQgX19pbml0IHBwc19wYXJwb3J0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcHJfaW5mbyhEUlZERVNDICJcbiIpOworCisJaWYgKGNsZWFyX3dhaXQgPiBDTEVBUl9XQUlUX01BWCkgeworCQlwcl9lcnIoImNsZWFyX3dhaXQgdmFsdWUgc2hvdWxkIGJlIG5vdCBncmVhdGVyIgorCQkJCSIgdGhlbiAlZFxuIiwgQ0xFQVJfV0FJVF9NQVgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlcigmcHBzX3BhcnBvcnRfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigidW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggcGFycG9ydFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuICAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHBzX3BhcnBvcnRfZXhpdCh2b2lkKQoreworCXBhcnBvcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnBwc19wYXJwb3J0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBwc19wYXJwb3J0X2luaXQpOworbW9kdWxlX2V4aXQocHBzX3BhcnBvcnRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFsZXhhbmRlciBHb3JkZWV2IDxsYXNhaW5lQGx2ay5jcy5tc3Uuc3U+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJWREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL0tjb25maWcgYi9kcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhNzNkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvS2NvbmZpZwpAQCAtMCwwICsxLDEzIEBACisjCisjIFBQUyBnZW5lcmF0b3JzIGNvbmZpZ3VyYXRpb24KKyMKKworY29tbWVudCAiUFBTIGdlbmVyYXRvcnMgc3VwcG9ydCIKKworY29uZmlnIFBQU19HRU5FUkFUT1JfUEFSUE9SVAorCXRyaXN0YXRlICJQYXJhbGxlbCBwb3J0IFBQUyBzaWduYWwgZ2VuZXJhdG9yIgorCWRlcGVuZHMgb24gUEFSUE9SVAorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBhIFBQUyBzaWduYWwgZ2VuZXJhdG9yIHdoaWNoCisJICB1dGlsaXplcyBTVFJPQkUgcGluIG9mIGEgcGFyYWxsZWwgcG9ydCB0byBzZW5kIFBQUyBzaWduYWxzLiBJdCB1c2VzCisJICBwYXJwb3J0IGFic3RyYWN0aW9uIGxheWVyIGFuZCBocnRpbWVycyB0byBwcmVjaXNlbHkgY29udHJvbCB0aGUgc2lnbmFsLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wcHMvZ2VuZXJhdG9ycy9NYWtlZmlsZSBiL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzMzA0YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACisjCisjIE1ha2VmaWxlIGZvciBQUFMgZ2VuZXJhdG9ycy4KKyMKKworb2JqLSQoQ09ORklHX1BQU19HRU5FUkFUT1JfUEFSUE9SVCkgKz0gcHBzX2dlbl9wYXJwb3J0Lm8KKworaWZlcSAoJChDT05GSUdfUFBTX0RFQlVHKSx5KQorRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL3Bwc19nZW5fcGFycG9ydC5jIGIvZHJpdmVycy9wcHMvZ2VuZXJhdG9ycy9wcHNfZ2VuX3BhcnBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzMyZjhkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wcHMvZ2VuZXJhdG9ycy9wcHNfZ2VuX3BhcnBvcnQuYwpAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIHBwc19nZW5fcGFycG9ydC5jIC0tIGtlcm5lbCBwYXJhbGxlbCBwb3J0IFBQUyBzaWduYWwgZ2VuZXJhdG9yCisgKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAgIEFsZXhhbmRlciBHb3JkZWV2IDxsYXNhaW5lQGx2ay5jcy5tc3Uuc3U+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworCisvKgorICogVE9ETzoKKyAqIGZpeCBpc3N1ZXMgd2hlbiByZWFsdGltZSBjbG9jayBpcyBhZGp1c3RlZCBpbiBhIGxlYXAKKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKKyNkZWZpbmUgRFJWREVTQyAicGFyYWxsZWwgcG9ydCBQUFMgc2lnbmFsIGdlbmVyYXRvciIKKworI2RlZmluZSBTSUdOQUwJCTAKKyNkZWZpbmUgTk9fU0lHTkFMCVBBUlBPUlRfQ09OVFJPTF9TVFJPQkUKKworLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KKworI2RlZmluZSBTRU5EX0RFTEFZX01BWAkJMTAwMDAwCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2VuZF9kZWxheSA9IDMwMDAwOworTU9EVUxFX1BBUk1fREVTQyhkZWxheSwKKwkiRGVsYXkgYmV0d2VlbiBzZXR0aW5nIGFuZCBkcm9wcGluZyB0aGUgc2lnbmFsIChucykiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWxheSwgc2VuZF9kZWxheSwgdWludCwgMCk7CisKKworI2RlZmluZSBTQUZFVFlfSU5URVJWQUwJMzAwMAkvKiBzZXQgdGhlIGhydGltZXIgZWFybGllciBmb3Igc2FmZXR5IChucykgKi8KKworLyogaW50ZXJuYWwgcGVyIHBvcnQgc3RydWN0dXJlICovCitzdHJ1Y3QgcHBzX2dlbmVyYXRvcl9wcCB7CisJc3RydWN0IHBhcmRldmljZSAqcGFyZGV2OwkvKiBwYXJwb3J0IGRldmljZSAqLworCXN0cnVjdCBocnRpbWVyIHRpbWVyOworCWxvbmcgcG9ydF93cml0ZV90aW1lOwkJLyogY2FsaWJyYXRlZCBwb3J0IHdyaXRlIHRpbWUgKG5zKSAqLworfTsKKworc3RhdGljIHN0cnVjdCBwcHNfZ2VuZXJhdG9yX3BwIGRldmljZSA9IHsKKwkucGFyZGV2ID0gTlVMTCwKK307CisKK3N0YXRpYyBpbnQgYXR0YWNoZWQ7CisKKy8qIGNhbGlicmF0ZWQgdGltZSBiZXR3ZWVuIGEgaHJ0aW1lciBldmVudCBhbmQgdGhlIHJlYWN0aW9uICovCitzdGF0aWMgbG9uZyBocnRpbWVyX2Vycm9yID0gU0FGRVRZX0lOVEVSVkFMOworCisvKiB0aGUga2VybmVsIGhydGltZXIgZXZlbnQgKi8KK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBocnRpbWVyX2V2ZW50KHN0cnVjdCBocnRpbWVyICp0aW1lcikKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgZXhwaXJlX3RpbWUsIHRzMSwgdHMyLCB0czMsIGR0czsKKwlzdHJ1Y3QgcHBzX2dlbmVyYXRvcl9wcCAqZGV2OworCXN0cnVjdCBwYXJwb3J0ICpwb3J0OworCWxvbmcgbGltLCBkZWx0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogV2UgaGF2ZSB0byBkaXNhYmxlIGludGVycnVwdHMgaGVyZS4gVGhlIGlkZWEgaXMgdG8gcHJldmVudAorCSAqIG90aGVyIGludGVycnVwdHMgb24gdGhlIHNhbWUgcHJvY2Vzc29yIHRvIGludHJvZHVjZSByYW5kb20KKwkgKiBsYWdzIHdoaWxlIHBvbGxpbmcgdGhlIGNsb2NrLiBnZXRuc3RpbWVvZmRheSgpIHRha2VzIDwxdXMgb24KKwkgKiBtb3N0IG1hY2hpbmVzIHdoaWxlIG90aGVyIGludGVycnVwdCBoYW5kbGVycyBjYW4gdGFrZSBtdWNoCisJICogbW9yZSBwb3RlbnRpYWxseS4KKwkgKgorCSAqIE5COiBhcHByb3ggdGltZSB3aXRoIGJsb2NrZWQgaW50ZXJydXB0cyA9CisJICogc2VuZF9kZWxheSArIDMgKiBTQUZFVFlfSU5URVJWQUwKKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBmaXJzdCBvZiBhbGwgd2UgZ2V0IHRoZSB0aW1lIHN0YW1wLi4uICovCisJZ2V0bnN0aW1lb2ZkYXkoJnRzMSk7CisJZXhwaXJlX3RpbWUgPSBrdGltZV90b190aW1lc3BlYyhocnRpbWVyX2dldF9zb2Z0ZXhwaXJlcyh0aW1lcikpOworCWRldiA9IGNvbnRhaW5lcl9vZih0aW1lciwgc3RydWN0IHBwc19nZW5lcmF0b3JfcHAsIHRpbWVyKTsKKwlsaW0gPSBOU0VDX1BFUl9TRUMgLSBzZW5kX2RlbGF5IC0gZGV2LT5wb3J0X3dyaXRlX3RpbWU7CisKKwkvKiBjaGVjayBpZiB3ZSBhcmUgbGF0ZSAqLworCWlmIChleHBpcmVfdGltZS50dl9zZWMgIT0gdHMxLnR2X3NlYyB8fCB0czEudHZfbnNlYyA+IGxpbSkgeworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXByX2Vycigid2UgYXJlIGxhdGUgdGhpcyB0aW1lICVsZC4lMDlsZFxuIiwKKwkJCQl0czEudHZfc2VjLCB0czEudHZfbnNlYyk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBidXN5IGxvb3AgdW50aWwgdGhlIHRpbWUgaXMgcmlnaHQgZm9yIGFuIGFzc2VydCBlZGdlICovCisJZG8geworCQlnZXRuc3RpbWVvZmRheSgmdHMyKTsKKwl9IHdoaWxlIChleHBpcmVfdGltZS50dl9zZWMgPT0gdHMyLnR2X3NlYyAmJiB0czIudHZfbnNlYyA8IGxpbSk7CisKKwkvKiBzZXQgdGhlIHNpZ25hbCAqLworCXBvcnQgPSBkZXYtPnBhcmRldi0+cG9ydDsKKwlwb3J0LT5vcHMtPndyaXRlX2NvbnRyb2wocG9ydCwgU0lHTkFMKTsKKworCS8qIGJ1c3kgbG9vcCB1bnRpbCB0aGUgdGltZSBpcyByaWdodCBmb3IgYSBjbGVhciBlZGdlICovCisJbGltID0gTlNFQ19QRVJfU0VDIC0gZGV2LT5wb3J0X3dyaXRlX3RpbWU7CisJZG8geworCQlnZXRuc3RpbWVvZmRheSgmdHMyKTsKKwl9IHdoaWxlIChleHBpcmVfdGltZS50dl9zZWMgPT0gdHMyLnR2X3NlYyAmJiB0czIudHZfbnNlYyA8IGxpbSk7CisKKwkvKiB1bnNldCB0aGUgc2lnbmFsICovCisJcG9ydC0+b3BzLT53cml0ZV9jb250cm9sKHBvcnQsIE5PX1NJR05BTCk7CisKKwlnZXRuc3RpbWVvZmRheSgmdHMzKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCS8qIHVwZGF0ZSBjYWxpYnJhdGVkIHBvcnQgd3JpdGUgdGltZSAqLworCWR0cyA9IHRpbWVzcGVjX3N1Yih0czMsIHRzMik7CisJZGV2LT5wb3J0X3dyaXRlX3RpbWUgPQorCQkoZGV2LT5wb3J0X3dyaXRlX3RpbWUgKyB0aW1lc3BlY190b19ucygmZHRzKSkgPj4gMTsKKworZG9uZToKKwkvKiB1cGRhdGUgY2FsaWJyYXRlZCBocnRpbWVyIGVycm9yICovCisJZHRzID0gdGltZXNwZWNfc3ViKHRzMSwgZXhwaXJlX3RpbWUpOworCWRlbHRhID0gdGltZXNwZWNfdG9fbnMoJmR0cyk7CisJLyogSWYgdGhlIG5ldyBlcnJvciB2YWx1ZSBpcyBiaWdnZXIgdGhlbiB0aGUgb2xkLCB1c2UgdGhlIG5ldworCSAqIHZhbHVlLCBpZiBub3QgdGhlbiBzbG93bHkgbW92ZSB0b3dhcmRzIHRoZSBuZXcgdmFsdWUuIFRoaXMKKwkgKiB3YXkgaXQgc2hvdWxkIGJlIHNhZmUgaW4gYmFkIGNvbmRpdGlvbnMgYW5kIGVmZmljaWVudCBpbgorCSAqIGdvb2QgY29uZGl0aW9ucy4KKwkgKi8KKwlpZiAoZGVsdGEgPj0gaHJ0aW1lcl9lcnJvcikKKwkJaHJ0aW1lcl9lcnJvciA9IGRlbHRhOworCWVsc2UKKwkJaHJ0aW1lcl9lcnJvciA9ICgzICogaHJ0aW1lcl9lcnJvciArIGRlbHRhKSA+PiAyOworCisJLyogdXBkYXRlIHRoZSBocnRpbWVyIGV4cGlyZSB0aW1lICovCisJaHJ0aW1lcl9zZXRfZXhwaXJlcyh0aW1lciwKKwkJCWt0aW1lX3NldChleHBpcmVfdGltZS50dl9zZWMgKyAxLAorCQkJCU5TRUNfUEVSX1NFQyAtIChzZW5kX2RlbGF5ICsKKwkJCQlkZXYtPnBvcnRfd3JpdGVfdGltZSArIFNBRkVUWV9JTlRFUlZBTCArCisJCQkJMiAqIGhydGltZXJfZXJyb3IpKSk7CisKKwlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOworfQorCisvKiBjYWxpYnJhdGUgcG9ydCB3cml0ZSB0aW1lICovCisjZGVmaW5lIFBPUlRfTlRFU1RTX1NISUZUCTUKK3N0YXRpYyB2b2lkIGNhbGlicmF0ZV9wb3J0KHN0cnVjdCBwcHNfZ2VuZXJhdG9yX3BwICpkZXYpCit7CisJc3RydWN0IHBhcnBvcnQgKnBvcnQgPSBkZXYtPnBhcmRldi0+cG9ydDsKKwlpbnQgaTsKKwlsb25nIGFjYyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgUE9SVF9OVEVTVFNfU0hJRlQpOyBpKyspIHsKKwkJc3RydWN0IHRpbWVzcGVjIGEsIGI7CisJCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CisJCWdldG5zdGltZW9mZGF5KCZhKTsKKwkJcG9ydC0+b3BzLT53cml0ZV9jb250cm9sKHBvcnQsIE5PX1NJR05BTCk7CisJCWdldG5zdGltZW9mZGF5KCZiKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKKworCQliID0gdGltZXNwZWNfc3ViKGIsIGEpOworCQlhY2MgKz0gdGltZXNwZWNfdG9fbnMoJmIpOworCX0KKworCWRldi0+cG9ydF93cml0ZV90aW1lID0gYWNjID4+IFBPUlRfTlRFU1RTX1NISUZUOworCXByX2luZm8oInBvcnQgd3JpdGUgdGFrZXMgJWxkbnNcbiIsIGRldi0+cG9ydF93cml0ZV90aW1lKTsKK30KKworc3RhdGljIGlubGluZSBrdGltZV90IG5leHRfaW50cl90aW1lKHN0cnVjdCBwcHNfZ2VuZXJhdG9yX3BwICpkZXYpCit7CisJc3RydWN0IHRpbWVzcGVjIHRzOworCisJZ2V0bnN0aW1lb2ZkYXkoJnRzKTsKKworCXJldHVybiBrdGltZV9zZXQodHMudHZfc2VjICsKKwkJCSgodHMudHZfbnNlYyA+IDk5MCAqIE5TRUNfUEVSX01TRUMpID8gMSA6IDApLAorCQkJTlNFQ19QRVJfU0VDIC0gKHNlbmRfZGVsYXkgKworCQkJZGV2LT5wb3J0X3dyaXRlX3RpbWUgKyAzICogU0FGRVRZX0lOVEVSVkFMKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnBvcnRfYXR0YWNoKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQoreworCWlmIChhdHRhY2hlZCkgeworCQkvKiB3ZSBhbHJlYWR5IGhhdmUgYSBwb3J0ICovCisJCXJldHVybjsKKwl9CisKKwlkZXZpY2UucGFyZGV2ID0gcGFycG9ydF9yZWdpc3Rlcl9kZXZpY2UocG9ydCwgS0JVSUxEX01PRE5BTUUsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCAwLCAmZGV2aWNlKTsKKwlpZiAoIWRldmljZS5wYXJkZXYpIHsKKwkJcHJfZXJyKCJjb3VsZG4ndCByZWdpc3RlciB3aXRoICVzXG4iLCBwb3J0LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwYXJwb3J0X2NsYWltX29yX2Jsb2NrKGRldmljZS5wYXJkZXYpIDwgMCkgeworCQlwcl9lcnIoImNvdWxkbid0IGNsYWltICVzXG4iLCBwb3J0LT5uYW1lKTsKKwkJZ290byBlcnJfdW5yZWdpc3Rlcl9kZXY7CisJfQorCisJcHJfaW5mbygiYXR0YWNoZWQgdG8gJXNcbiIsIHBvcnQtPm5hbWUpOworCWF0dGFjaGVkID0gMTsKKworCWNhbGlicmF0ZV9wb3J0KCZkZXZpY2UpOworCisJaHJ0aW1lcl9pbml0KCZkZXZpY2UudGltZXIsIENMT0NLX1JFQUxUSU1FLCBIUlRJTUVSX01PREVfQUJTKTsKKwlkZXZpY2UudGltZXIuZnVuY3Rpb24gPSBocnRpbWVyX2V2ZW50OworI2lmZGVmIENPTkZJR19QUkVFTVBUX1JUCisJLyogaHJ0aW1lciBpbnRlcnJ1cHQgd2lsbCBydW4gaW4gdGhlIGludGVycnVwdCBjb250ZXh0IHdpdGggdGhpcyAqLworCWRldmljZS50aW1lci5pcnFzYWZlID0gMTsKKyNlbmRpZgorCisJaHJ0aW1lcl9zdGFydCgmZGV2aWNlLnRpbWVyLCBuZXh0X2ludHJfdGltZSgmZGV2aWNlKSwgSFJUSU1FUl9NT0RFX0FCUyk7CisKKwlyZXR1cm47CisKK2Vycl91bnJlZ2lzdGVyX2RldjoKKwlwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKGRldmljZS5wYXJkZXYpOworfQorCitzdGF0aWMgdm9pZCBwYXJwb3J0X2RldGFjaChzdHJ1Y3QgcGFycG9ydCAqcG9ydCkKK3sKKwlpZiAocG9ydC0+Y2FkICE9IGRldmljZS5wYXJkZXYpCisJCXJldHVybjsJLyogbm90IG91ciBwb3J0ICovCisKKwlocnRpbWVyX2NhbmNlbCgmZGV2aWNlLnRpbWVyKTsKKwlwYXJwb3J0X3JlbGVhc2UoZGV2aWNlLnBhcmRldik7CisJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShkZXZpY2UucGFyZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwYXJwb3J0X2RyaXZlciBwcHNfZ2VuX3BhcnBvcnRfZHJpdmVyID0geworCS5uYW1lID0gS0JVSUxEX01PRE5BTUUsCisJLmF0dGFjaCA9IHBhcnBvcnRfYXR0YWNoLAorCS5kZXRhY2ggPSBwYXJwb3J0X2RldGFjaCwKK307CisKKy8qIG1vZHVsZSBzdGFmZiAqLworCitzdGF0aWMgaW50IF9faW5pdCBwcHNfZ2VuX3BhcnBvcnRfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlwcl9pbmZvKERSVkRFU0MgIlxuIik7CisKKwlpZiAoc2VuZF9kZWxheSA+IFNFTkRfREVMQVlfTUFYKSB7CisJCXByX2VycigiZGVsYXkgdmFsdWUgc2hvdWxkIGJlIG5vdCBncmVhdGVyIgorCQkJCSIgdGhlbiAlZFxuIiwgU0VORF9ERUxBWV9NQVgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlcigmcHBzX2dlbl9wYXJwb3J0X2RyaXZlcik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoInVuYWJsZSB0byByZWdpc3RlciB3aXRoIHBhcnBvcnRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAgMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBwc19nZW5fcGFycG9ydF9leGl0KHZvaWQpCit7CisJcGFycG9ydF91bnJlZ2lzdGVyX2RyaXZlcigmcHBzX2dlbl9wYXJwb3J0X2RyaXZlcik7CisJcHJfaW5mbygiaHJ0aW1lciBhdmcgZXJyb3IgaXMgJWxkbnNcbiIsIGhydGltZXJfZXJyb3IpOworfQorCittb2R1bGVfaW5pdChwcHNfZ2VuX3BhcnBvcnRfaW5pdCk7Cittb2R1bGVfZXhpdChwcHNfZ2VuX3BhcnBvcnRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFsZXhhbmRlciBHb3JkZWV2IDxsYXNhaW5lQGx2ay5jcy5tc3Uuc3U+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJWREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9rYXBpLmMgYi9kcml2ZXJzL3Bwcy9rYXBpLmMKaW5kZXggMWFhMDJkYi4uY2JhMWI0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMva2FwaS5jCisrKyBiL2RyaXZlcnMvcHBzL2thcGkuYwpAQCAtMTksMjQgKzE5LDIwIEBACiAgKiAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wcHNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCi0vKgotICogR2xvYmFsIHZhcmlhYmxlcwotICovCi0KLURFRklORV9TUElOTE9DSyhwcHNfaWRyX2xvY2spOwotREVGSU5FX0lEUihwcHNfaWRyKTsKKyNpbmNsdWRlICJrYy5oIgogCiAvKgogICogTG9jYWwgZnVuY3Rpb25zCkBAIC02MCw2MCArNTYsNiBAQAogICogRXhwb3J0ZWQgZnVuY3Rpb25zCiAgKi8KIAotLyogcHBzX2dldF9zb3VyY2UgLSBmaW5kIGEgUFBTIHNvdXJjZQotICogQHNvdXJjZTogdGhlIFBQUyBzb3VyY2UgSUQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGZpbmQgYW4gYWxyZWFkeSByZWdpc3RlcmVkIFBQUyBzb3VyY2UgaW50byB0aGUKLSAqIHN5c3RlbS4KLSAqCi0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBOVUxMIGlmIGZvdW5kIG5vdGhpbmcsIG90aGVyd2lzZSBpdCByZXR1cm5zIGEgcG9pbnRlcgotICogdG8gdGhlIFBQUyBzb3VyY2UgZGF0YSBzdHJ1Y3QgKHRoZSByZWZjb3VudGVyIGlzIGluY3JlbWVudGVkIGJ5IDEpLgotICovCi0KLXN0cnVjdCBwcHNfZGV2aWNlICpwcHNfZ2V0X3NvdXJjZShpbnQgc291cmNlKQotewotCXN0cnVjdCBwcHNfZGV2aWNlICpwcHM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcHNfaWRyX2xvY2ssIGZsYWdzKTsKLQotCXBwcyA9IGlkcl9maW5kKCZwcHNfaWRyLCBzb3VyY2UpOwotCWlmIChwcHMgIT0gTlVMTCkKLQkJYXRvbWljX2luYygmcHBzLT51c2FnZSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcHNfaWRyX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBwcHM7Ci19Ci0KLS8qIHBwc19wdXRfc291cmNlIC0gZnJlZSB0aGUgUFBTIHNvdXJjZSBkYXRhCi0gKiBAcHBzOiBhIHBvaW50ZXIgdG8gdGhlIFBQUyBzb3VyY2UuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGZyZWUgYSBQUFMgZGF0YSBzdHJ1Y3QgaWYgaXRzIHJlZmNvdW50IGlzIDAuCi0gKi8KLQotdm9pZCBwcHNfcHV0X3NvdXJjZShzdHJ1Y3QgcHBzX2RldmljZSAqcHBzKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHBzX2lkcl9sb2NrLCBmbGFncyk7Ci0JQlVHX09OKGF0b21pY19yZWFkKCZwcHMtPnVzYWdlKSA9PSAwKTsKLQotCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmcHBzLT51c2FnZSkpIHsKLQkJcHBzID0gTlVMTDsKLQkJZ290byBleGl0OwotCX0KLQotCS8qIE5vIG1vcmUgcmVmZXJlbmNlIHRvIHRoZSBQUFMgc291cmNlLiBXZSBjYW4gc2FmZWx5IHJlbW92ZSB0aGUKLQkgKiBQUFMgZGF0YSBzdHJ1Y3QuCi0JICovCi0JaWRyX3JlbW92ZSgmcHBzX2lkciwgcHBzLT5pZCk7Ci0KLWV4aXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHBzX2lkcl9sb2NrLCBmbGFncyk7Ci0Ja2ZyZWUocHBzKTsKLX0KLQogLyogcHBzX3JlZ2lzdGVyX3NvdXJjZSAtIGFkZCBhIFBQUyBzb3VyY2UgaW4gdGhlIHN5c3RlbQogICogQGluZm86IHRoZSBQUFMgaW5mbyBzdHJ1Y3QKICAqIEBkZWZhdWx0X3BhcmFtczogdGhlIGRlZmF1bHQgUFBTIHBhcmFtZXRlcnMgb2YgdGhlIG5ldyBzb3VyY2UKQEAgLTEyMiwzMSArNjQsMzEgQEAKICAqIHNvdXJjZSBpcyBkZXNjcmliZWQgYnkgaW5mbydzIGZpZWxkcyBhbmQgaXQgd2lsbCBoYXZlLCBhcyBkZWZhdWx0IFBQUwogICogcGFyYW1ldGVycywgdGhlIG9uZXMgc3BlY2lmaWVkIGludG8gZGVmYXVsdF9wYXJhbXMuCiAgKgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMsIGluIGNhc2Ugb2Ygc3VjY2VzcywgdGhlIFBQUyBzb3VyY2UgSUQuCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucywgaW4gY2FzZSBvZiBzdWNjZXNzLCB0aGUgUFBTIGRldmljZS4gT3RoZXJ3aXNlIE5VTEwuCiAgKi8KIAotaW50IHBwc19yZWdpc3Rlcl9zb3VyY2Uoc3RydWN0IHBwc19zb3VyY2VfaW5mbyAqaW5mbywgaW50IGRlZmF1bHRfcGFyYW1zKQorc3RydWN0IHBwc19kZXZpY2UgKnBwc19yZWdpc3Rlcl9zb3VyY2Uoc3RydWN0IHBwc19zb3VyY2VfaW5mbyAqaW5mbywKKwkJaW50IGRlZmF1bHRfcGFyYW1zKQogewogCXN0cnVjdCBwcHNfZGV2aWNlICpwcHM7Ci0JaW50IGlkOwogCWludCBlcnI7CiAKIAkvKiBTYW5pdHkgY2hlY2tzICovCiAJaWYgKChpbmZvLT5tb2RlICYgZGVmYXVsdF9wYXJhbXMpICE9IGRlZmF1bHRfcGFyYW1zKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicHBzOiAlczogdW5zdXBwb3J0ZWQgZGVmYXVsdCBwYXJhbWV0ZXJzXG4iLAorCQlwcl9lcnIoIiVzOiB1bnN1cHBvcnRlZCBkZWZhdWx0IHBhcmFtZXRlcnNcbiIsCiAJCQkJCWluZm8tPm5hbWUpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIHBwc19yZWdpc3Rlcl9zb3VyY2VfZXhpdDsKIAl9CiAJaWYgKChpbmZvLT5tb2RlICYgKFBQU19FQ0hPQVNTRVJUIHwgUFBTX0VDSE9DTEVBUikpICE9IDAgJiYKIAkJCWluZm8tPmVjaG8gPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInBwczogJXM6IGVjaG8gZnVuY3Rpb24gaXMgbm90IGRlZmluZWRcbiIsCisJCXByX2VycigiJXM6IGVjaG8gZnVuY3Rpb24gaXMgbm90IGRlZmluZWRcbiIsCiAJCQkJCWluZm8tPm5hbWUpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIHBwc19yZWdpc3Rlcl9zb3VyY2VfZXhpdDsKIAl9CiAJaWYgKChpbmZvLT5tb2RlICYgKFBQU19UU0ZNVF9UU1BFQyB8IFBQU19UU0ZNVF9OVFBGUCkpID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwcHM6ICVzOiB1bnNwZWNpZmllZCB0aW1lIGZvcm1hdFxuIiwKKwkJcHJfZXJyKCIlczogdW5zcGVjaWZpZWQgdGltZSBmb3JtYXRcbiIsCiAJCQkJCWluZm8tPm5hbWUpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIHBwc19yZWdpc3Rlcl9zb3VyY2VfZXhpdDsKQEAgLTE2OCw5NCArMTEwLDQ4IEBACiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcHMtPnF1ZXVlKTsKIAlzcGluX2xvY2tfaW5pdCgmcHBzLT5sb2NrKTsKLQlhdG9taWNfc2V0KCZwcHMtPnVzYWdlLCAxKTsKLQotCS8qIEdldCBuZXcgSUQgZm9yIHRoZSBuZXcgUFBTIHNvdXJjZSAqLwotCWlmIChpZHJfcHJlX2dldCgmcHBzX2lkciwgR0ZQX0tFUk5FTCkgPT0gMCkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGtmcmVlX3BwczsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxKCZwcHNfaWRyX2xvY2spOwotCi0JLyogTm93IHJlYWxseSBhbGxvY2F0ZSB0aGUgUFBTIHNvdXJjZS4KLQkgKiBBZnRlciBpZHJfZ2V0X25ldygpIGNhbGxpbmcgdGhlIG5ldyBzb3VyY2Ugd2lsbCBiZSBmcmVlbHkgYXZhaWxhYmxlCi0JICogaW50byB0aGUga2VybmVsLgotCSAqLwotCWVyciA9IGlkcl9nZXRfbmV3KCZwcHNfaWRyLCBwcHMsICZpZCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZwcHNfaWRyX2xvY2spOwotCQlnb3RvIGtmcmVlX3BwczsKLQl9Ci0KLQlpZCA9IGlkICYgTUFYX0lEX01BU0s7Ci0JaWYgKGlkID49IFBQU19NQVhfU09VUkNFUykgewotCQlzcGluX3VubG9ja19pcnEoJnBwc19pZHJfbG9jayk7Ci0KLQkJcHJpbnRrKEtFUk5fRVJSICJwcHM6ICVzOiB0b28gbWFueSBQUFMgc291cmNlcyBpbiB0aGUgc3lzdGVtXG4iLAotCQkJCQlpbmZvLT5uYW1lKTsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIGZyZWVfaWRyOwotCX0KLQlwcHMtPmlkID0gaWQ7Ci0KLQlzcGluX3VubG9ja19pcnEoJnBwc19pZHJfbG9jayk7CiAKIAkvKiBDcmVhdGUgdGhlIGNoYXIgZGV2aWNlICovCiAJZXJyID0gcHBzX3JlZ2lzdGVyX2NkZXYocHBzKTsKIAlpZiAoZXJyIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgInBwczogJXM6IHVuYWJsZSB0byBjcmVhdGUgY2hhciBkZXZpY2VcbiIsCisJCXByX2VycigiJXM6IHVuYWJsZSB0byBjcmVhdGUgY2hhciBkZXZpY2VcbiIsCiAJCQkJCWluZm8tPm5hbWUpOwotCQlnb3RvIGZyZWVfaWRyOworCQlnb3RvIGtmcmVlX3BwczsKIAl9CiAKLQlwcl9pbmZvKCJuZXcgUFBTIHNvdXJjZSAlcyBhdCBJRCAlZFxuIiwgaW5mby0+bmFtZSwgaWQpOworCWRldl9pbmZvKHBwcy0+ZGV2LCAibmV3IFBQUyBzb3VyY2UgJXNcbiIsIGluZm8tPm5hbWUpOwogCi0JcmV0dXJuIGlkOwotCi1mcmVlX2lkcjoKLQlzcGluX2xvY2tfaXJxKCZwcHNfaWRyX2xvY2spOwotCWlkcl9yZW1vdmUoJnBwc19pZHIsIGlkKTsKLQlzcGluX3VubG9ja19pcnEoJnBwc19pZHJfbG9jayk7CisJcmV0dXJuIHBwczsKIAoga2ZyZWVfcHBzOgogCWtmcmVlKHBwcyk7CiAKIHBwc19yZWdpc3Rlcl9zb3VyY2VfZXhpdDoKLQlwcmludGsoS0VSTl9FUlIgInBwczogJXM6IHVuYWJsZSB0byByZWdpc3RlciBzb3VyY2VcbiIsIGluZm8tPm5hbWUpOworCXByX2VycigiJXM6IHVuYWJsZSB0byByZWdpc3RlciBzb3VyY2VcbiIsIGluZm8tPm5hbWUpOwogCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0wocHBzX3JlZ2lzdGVyX3NvdXJjZSk7CiAKIC8qIHBwc191bnJlZ2lzdGVyX3NvdXJjZSAtIHJlbW92ZSBhIFBQUyBzb3VyY2UgZnJvbSB0aGUgc3lzdGVtCi0gKiBAc291cmNlOiB0aGUgUFBTIHNvdXJjZSBJRAorICogQHBwczogdGhlIFBQUyBzb3VyY2UKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVtb3ZlIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIFBQUyBzb3VyY2UgZnJvbQogICogdGhlIHN5c3RlbS4KICAqLwogCi12b2lkIHBwc191bnJlZ2lzdGVyX3NvdXJjZShpbnQgc291cmNlKQordm9pZCBwcHNfdW5yZWdpc3Rlcl9zb3VyY2Uoc3RydWN0IHBwc19kZXZpY2UgKnBwcykKIHsKLQlzdHJ1Y3QgcHBzX2RldmljZSAqcHBzOwotCi0Jc3Bpbl9sb2NrX2lycSgmcHBzX2lkcl9sb2NrKTsKLQlwcHMgPSBpZHJfZmluZCgmcHBzX2lkciwgc291cmNlKTsKLQotCWlmICghcHBzKSB7Ci0JCUJVRygpOwotCQlzcGluX3VubG9ja19pcnEoJnBwc19pZHJfbG9jayk7Ci0JCXJldHVybjsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwcHNfaWRyX2xvY2spOwotCisJcHBzX2tjX3JlbW92ZShwcHMpOwogCXBwc191bnJlZ2lzdGVyX2NkZXYocHBzKTsKLQlwcHNfcHV0X3NvdXJjZShwcHMpOworCisJLyogZG9uJ3QgaGF2ZSB0byBrZnJlZShwcHMpIGhlcmUgYmVjYXVzZSBpdCB3aWxsIGJlIGRvbmUgb24KKwkgKiBkZXZpY2UgZGVzdHJ1Y3Rpb24gKi8KIH0KIEVYUE9SVF9TWU1CT0wocHBzX3VucmVnaXN0ZXJfc291cmNlKTsKIAogLyogcHBzX2V2ZW50IC0gcmVnaXN0ZXIgYSBQUFMgZXZlbnQgaW50byB0aGUgc3lzdGVtCi0gKiBAc291cmNlOiB0aGUgUFBTIHNvdXJjZSBJRAorICogQHBwczogdGhlIFBQUyBkZXZpY2UKICAqIEB0czogdGhlIGV2ZW50IHRpbWVzdGFtcAogICogQGV2ZW50OiB0aGUgZXZlbnQgdHlwZQogICogQGRhdGE6IHVzZXJkZWYgcG9pbnRlcgpAQCAtMjYzLDc4ICsxNTksNzIgQEAKICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBlYWNoIFBQUyBjbGllbnQgaW4gb3JkZXIgdG8gcmVnaXN0ZXIgYSBuZXcKICAqIFBQUyBldmVudCBpbnRvIHRoZSBzeXN0ZW0gKGl0J3MgdXN1YWxseSBjYWxsZWQgaW5zaWRlIGFuIElSUSBoYW5kbGVyKS4KICAqCi0gKiBJZiBhbiBlY2hvIGZ1bmN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgUFBTIHNvdXJjZSBpdCB3aWxsIGJlIGNhbGxlZAorICogSWYgYW4gZWNobyBmdW5jdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIFBQUyBkZXZpY2UgaXQgd2lsbCBiZSBjYWxsZWQKICAqIGFzOgotICoJcHBzLT5pbmZvLmVjaG8oc291cmNlLCBldmVudCwgZGF0YSk7CisgKglwcHMtPmluZm8uZWNobyhwcHMsIGV2ZW50LCBkYXRhKTsKICAqLwotCi12b2lkIHBwc19ldmVudChpbnQgc291cmNlLCBzdHJ1Y3QgcHBzX2t0aW1lICp0cywgaW50IGV2ZW50LCB2b2lkICpkYXRhKQordm9pZCBwcHNfZXZlbnQoc3RydWN0IHBwc19kZXZpY2UgKnBwcywgc3RydWN0IHBwc19ldmVudF90aW1lICp0cywgaW50IGV2ZW50LAorCQl2b2lkICpkYXRhKQogewotCXN0cnVjdCBwcHNfZGV2aWNlICpwcHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY2FwdHVyZWQgPSAwOworCXN0cnVjdCBwcHNfa3RpbWUgdHNfcmVhbDsKIAotCWlmICgoZXZlbnQgJiAoUFBTX0NBUFRVUkVBU1NFUlQgfCBQUFNfQ0FQVFVSRUNMRUFSKSkgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgInBwczogdW5rbm93biBldmVudCAoJXgpIGZvciBzb3VyY2UgJWRcbiIsCi0JCQlldmVudCwgc291cmNlKTsKLQkJcmV0dXJuOwotCX0KKwkvKiBjaGVjayBldmVudCB0eXBlICovCisJQlVHX09OKChldmVudCAmIChQUFNfQ0FQVFVSRUFTU0VSVCB8IFBQU19DQVBUVVJFQ0xFQVIpKSA9PSAwKTsKIAotCXBwcyA9IHBwc19nZXRfc291cmNlKHNvdXJjZSk7Ci0JaWYgKCFwcHMpCi0JCXJldHVybjsKKwlkZXZfZGJnKHBwcy0+ZGV2LCAiUFBTIGV2ZW50IGF0ICVsZC4lMDlsZFxuIiwKKwkJCXRzLT50c19yZWFsLnR2X3NlYywgdHMtPnRzX3JlYWwudHZfbnNlYyk7CiAKLQlwcl9kZWJ1ZygiUFBTIGV2ZW50IG9uIHNvdXJjZSAlZCBhdCAlbGx1LiUwNnVcbiIsCi0JCQlwcHMtPmlkLCAodW5zaWduZWQgbG9uZyBsb25nKSB0cy0+c2VjLCB0cy0+bnNlYyk7CisJdGltZXNwZWNfdG9fcHBzX2t0aW1lKCZ0c19yZWFsLCB0cy0+dHNfcmVhbCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHBzLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBNdXN0IGNhbGwgdGhlIGVjaG8gZnVuY3Rpb24/ICovCiAJaWYgKChwcHMtPnBhcmFtcy5tb2RlICYgKFBQU19FQ0hPQVNTRVJUIHwgUFBTX0VDSE9DTEVBUikpKQotCQlwcHMtPmluZm8uZWNobyhzb3VyY2UsIGV2ZW50LCBkYXRhKTsKKwkJcHBzLT5pbmZvLmVjaG8ocHBzLCBldmVudCwgZGF0YSk7CiAKIAkvKiBDaGVjayB0aGUgZXZlbnQgKi8KIAlwcHMtPmN1cnJlbnRfbW9kZSA9IHBwcy0+cGFyYW1zLm1vZGU7Ci0JaWYgKChldmVudCAmIFBQU19DQVBUVVJFQVNTRVJUKSAmCi0JCQkocHBzLT5wYXJhbXMubW9kZSAmIFBQU19DQVBUVVJFQVNTRVJUKSkgeworCWlmIChldmVudCAmIHBwcy0+cGFyYW1zLm1vZGUgJiBQUFNfQ0FQVFVSRUFTU0VSVCkgewogCQkvKiBXZSBoYXZlIHRvIGFkZCBhbiBvZmZzZXQ/ICovCiAJCWlmIChwcHMtPnBhcmFtcy5tb2RlICYgUFBTX09GRlNFVEFTU0VSVCkKLQkJCXBwc19hZGRfb2Zmc2V0KHRzLCAmcHBzLT5wYXJhbXMuYXNzZXJ0X29mZl90dSk7CisJCQlwcHNfYWRkX29mZnNldCgmdHNfcmVhbCwKKwkJCQkJJnBwcy0+cGFyYW1zLmFzc2VydF9vZmZfdHUpOwogCiAJCS8qIFNhdmUgdGhlIHRpbWUgc3RhbXAgKi8KLQkJcHBzLT5hc3NlcnRfdHUgPSAqdHM7CisJCXBwcy0+YXNzZXJ0X3R1ID0gdHNfcmVhbDsKIAkJcHBzLT5hc3NlcnRfc2VxdWVuY2UrKzsKLQkJcHJfZGVidWcoImNhcHR1cmUgYXNzZXJ0IHNlcSAjJXUgZm9yIHNvdXJjZSAlZFxuIiwKLQkJCXBwcy0+YXNzZXJ0X3NlcXVlbmNlLCBzb3VyY2UpOworCQlkZXZfZGJnKHBwcy0+ZGV2LCAiY2FwdHVyZSBhc3NlcnQgc2VxICMldVxuIiwKKwkJCXBwcy0+YXNzZXJ0X3NlcXVlbmNlKTsKIAogCQljYXB0dXJlZCA9IH4wOwogCX0KLQlpZiAoKGV2ZW50ICYgUFBTX0NBUFRVUkVDTEVBUikgJgotCQkJKHBwcy0+cGFyYW1zLm1vZGUgJiBQUFNfQ0FQVFVSRUNMRUFSKSkgeworCWlmIChldmVudCAmIHBwcy0+cGFyYW1zLm1vZGUgJiBQUFNfQ0FQVFVSRUNMRUFSKSB7CiAJCS8qIFdlIGhhdmUgdG8gYWRkIGFuIG9mZnNldD8gKi8KIAkJaWYgKHBwcy0+cGFyYW1zLm1vZGUgJiBQUFNfT0ZGU0VUQ0xFQVIpCi0JCQlwcHNfYWRkX29mZnNldCh0cywgJnBwcy0+cGFyYW1zLmNsZWFyX29mZl90dSk7CisJCQlwcHNfYWRkX29mZnNldCgmdHNfcmVhbCwKKwkJCQkJJnBwcy0+cGFyYW1zLmNsZWFyX29mZl90dSk7CiAKIAkJLyogU2F2ZSB0aGUgdGltZSBzdGFtcCAqLwotCQlwcHMtPmNsZWFyX3R1ID0gKnRzOworCQlwcHMtPmNsZWFyX3R1ID0gdHNfcmVhbDsKIAkJcHBzLT5jbGVhcl9zZXF1ZW5jZSsrOwotCQlwcl9kZWJ1ZygiY2FwdHVyZSBjbGVhciBzZXEgIyV1IGZvciBzb3VyY2UgJWRcbiIsCi0JCQlwcHMtPmNsZWFyX3NlcXVlbmNlLCBzb3VyY2UpOworCQlkZXZfZGJnKHBwcy0+ZGV2LCAiY2FwdHVyZSBjbGVhciBzZXEgIyV1XG4iLAorCQkJcHBzLT5jbGVhcl9zZXF1ZW5jZSk7CiAKIAkJY2FwdHVyZWQgPSB+MDsKIAl9CiAKLQkvKiBXYWtlIHVwIGlpZiBjYXB0dXJlZCBzb210aGluZyAqLworCXBwc19rY19ldmVudChwcHMsIHRzLCBldmVudCk7CisKKwkvKiBXYWtlIHVwIGlmIGNhcHR1cmVkIHNvbWV0aGluZyAqLwogCWlmIChjYXB0dXJlZCkgewotCQlwcHMtPmdvID0gfjA7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHBzLT5xdWV1ZSk7CisJCXBwcy0+bGFzdF9ldisrOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZwcHMtPnF1ZXVlKTsKIAogCQlraWxsX2Zhc3luYygmcHBzLT5hc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfSU4pOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBwcy0+bG9jaywgZmxhZ3MpOwotCi0JLyogTm93IHdlIGNhbiByZWxlYXNlIHRoZSBQUFMgc291cmNlIGZvciAocG9zc2libGUpIGRlcmVnaXN0cmF0aW9uICovCi0JcHBzX3B1dF9zb3VyY2UocHBzKTsKIH0KIEVYUE9SVF9TWU1CT0wocHBzX2V2ZW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2tjLmMgYi9kcml2ZXJzL3Bwcy9rYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OWU5MzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bwcy9rYy5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogUFBTIGtlcm5lbCBjb25zdW1lciBBUEkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCAgIEFsZXhhbmRlciBHb3JkZWV2IDxsYXNhaW5lQGx2ay5jcy5tc3Uuc3U+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3Bwc19rZXJuZWwuaD4KKworI2luY2x1ZGUgImtjLmgiCisKKy8qCisgKiBHbG9iYWwgdmFyaWFibGVzCisgKi8KKworLyogc3RhdGUgdmFyaWFibGVzIHRvIGJpbmQga2VybmVsIGNvbnN1bWVyICovCitERUZJTkVfU1BJTkxPQ0socHBzX2tjX2hhcmRwcHNfbG9jayk7CisvKiBQUFMgQVBJIChSRkMgMjc4Myk6IGN1cnJlbnQgc291cmNlIGFuZCBtb2RlIGZvciBrZXJuZWwgY29uc3VtZXIgKi8KK3N0cnVjdCBwcHNfZGV2aWNlICpwcHNfa2NfaGFyZHBwc19kZXY7CS8qIHVuaXF1ZSBwb2ludGVyIHRvIGRldmljZSAqLworaW50IHBwc19rY19oYXJkcHBzX21vZGU7CQkvKiBtb2RlIGJpdHMgZm9yIGtlcm5lbCBjb25zdW1lciAqLworCisvKiBwcHNfa2NfYmluZCAtIGNvbnRyb2wgUFBTIGtlcm5lbCBjb25zdW1lciBiaW5kaW5nCisgKiBAcHBzOiB0aGUgUFBTIHNvdXJjZQorICogQGJpbmRfYXJnczoga2VybmVsIGNvbnN1bWVyIGJpbmQgcGFyYW1ldGVycworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBiaW5kIG9yIHVuYmluZCBQUFMga2VybmVsIGNvbnN1bWVyIGFjY29yZGluZyB0bworICogc3VwcGxpZWQgcGFyYW1ldGVycy4gU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK2ludCBwcHNfa2NfYmluZChzdHJ1Y3QgcHBzX2RldmljZSAqcHBzLCBzdHJ1Y3QgcHBzX2JpbmRfYXJncyAqYmluZF9hcmdzKQoreworCS8qIENoZWNrIGlmIGFub3RoZXIgY29uc3VtZXIgaXMgYWxyZWFkeSBib3VuZCAqLworCXNwaW5fbG9ja19pcnEoJnBwc19rY19oYXJkcHBzX2xvY2spOworCisJaWYgKGJpbmRfYXJncy0+ZWRnZSA9PSAwKQorCQlpZiAocHBzX2tjX2hhcmRwcHNfZGV2ID09IHBwcykgeworCQkJcHBzX2tjX2hhcmRwcHNfbW9kZSA9IDA7CisJCQlwcHNfa2NfaGFyZHBwc19kZXYgPSBOVUxMOworCQkJc3Bpbl91bmxvY2tfaXJxKCZwcHNfa2NfaGFyZHBwc19sb2NrKTsKKwkJCWRldl9pbmZvKHBwcy0+ZGV2LCAidW5ib3VuZCBrZXJuZWwiCisJCQkJCSIgY29uc3VtZXJcbiIpOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZwcHNfa2NfaGFyZHBwc19sb2NrKTsKKwkJCWRldl9lcnIocHBzLT5kZXYsICJzZWxlY3RlZCBrZXJuZWwgY29uc3VtZXIiCisJCQkJCSIgaXMgbm90IGJvdW5kXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJZWxzZQorCQlpZiAocHBzX2tjX2hhcmRwcHNfZGV2ID09IE5VTEwgfHwKKwkJCQlwcHNfa2NfaGFyZHBwc19kZXYgPT0gcHBzKSB7CisJCQlwcHNfa2NfaGFyZHBwc19tb2RlID0gYmluZF9hcmdzLT5lZGdlOworCQkJcHBzX2tjX2hhcmRwcHNfZGV2ID0gcHBzOworCQkJc3Bpbl91bmxvY2tfaXJxKCZwcHNfa2NfaGFyZHBwc19sb2NrKTsKKwkJCWRldl9pbmZvKHBwcy0+ZGV2LCAiYm91bmQga2VybmVsIGNvbnN1bWVyOiAiCisJCQkJImVkZ2U9MHgleFxuIiwgYmluZF9hcmdzLT5lZGdlKTsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmcHBzX2tjX2hhcmRwcHNfbG9jayk7CisJCQlkZXZfZXJyKHBwcy0+ZGV2LCAiYW5vdGhlciBrZXJuZWwgY29uc3VtZXIiCisJCQkJCSIgaXMgYWxyZWFkeSBib3VuZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIHBwc19rY19yZW1vdmUgLSB1bmJpbmQga2VybmVsIGNvbnN1bWVyIG9uIFBQUyBzb3VyY2UgcmVtb3ZhbAorICogQHBwczogdGhlIFBQUyBzb3VyY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBrZXJuZWwgY29uc3VtZXIgb24gUFBTIHNvdXJjZSByZW1vdmFsCisgKiBpZiB0aGlzIHNvdXJjZSB3YXMgYm91bmQgdG8gUFBTIGtlcm5lbCBjb25zdW1lci4gQ2FuIGJlIGNhbGxlZCBvbiBhbnkKKyAqIHNvdXJjZSBzYWZlbHkuIFNob3VsZCBub3QgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LgorICovCit2b2lkIHBwc19rY19yZW1vdmUoc3RydWN0IHBwc19kZXZpY2UgKnBwcykKK3sKKwlzcGluX2xvY2tfaXJxKCZwcHNfa2NfaGFyZHBwc19sb2NrKTsKKwlpZiAocHBzID09IHBwc19rY19oYXJkcHBzX2RldikgeworCQlwcHNfa2NfaGFyZHBwc19tb2RlID0gMDsKKwkJcHBzX2tjX2hhcmRwcHNfZGV2ID0gTlVMTDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcHNfa2NfaGFyZHBwc19sb2NrKTsKKwkJZGV2X2luZm8ocHBzLT5kZXYsICJ1bmJvdW5kIGtlcm5lbCBjb25zdW1lciIKKwkJCQkiIG9uIGRldmljZSByZW1vdmFsXG4iKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcHNfa2NfaGFyZHBwc19sb2NrKTsKK30KKworLyogcHBzX2tjX2V2ZW50IC0gY2FsbCBoYXJkcHBzKCkgb24gUFBTIGV2ZW50CisgKiBAcHBzOiB0aGUgUFBTIHNvdXJjZQorICogQHRzOiBQUFMgZXZlbnQgdGltZXN0YW1wCisgKiBAZXZlbnQ6IFBQUyBldmVudCBlZGdlCisgKgorICogVGhpcyBmdW5jdGlvbiBjYWxscyBoYXJkcHBzKCkgd2hlbiBhbiBldmVudCBmcm9tIGJvdW5kIFBQUyBzb3VyY2Ugb2NjdXJzLgorICovCit2b2lkIHBwc19rY19ldmVudChzdHJ1Y3QgcHBzX2RldmljZSAqcHBzLCBzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUgKnRzLAorCQlpbnQgZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFBhc3Mgc29tZSBldmVudHMgdG8ga2VybmVsIGNvbnN1bWVyIGlmIGFjdGl2YXRlZCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcHNfa2NfaGFyZHBwc19sb2NrLCBmbGFncyk7CisJaWYgKHBwcyA9PSBwcHNfa2NfaGFyZHBwc19kZXYgJiYgZXZlbnQgJiBwcHNfa2NfaGFyZHBwc19tb2RlKQorCQloYXJkcHBzKCZ0cy0+dHNfcmVhbCwgJnRzLT50c19yYXcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBwc19rY19oYXJkcHBzX2xvY2ssIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2tjLmggYi9kcml2ZXJzL3Bwcy9rYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOTZmY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bwcy9rYy5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBQUFMga2VybmVsIGNvbnN1bWVyIEFQSSBoZWFkZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCAgIEFsZXhhbmRlciBHb3JkZWV2IDxsYXNhaW5lQGx2ay5jcy5tc3Uuc3U+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgTElOVVhfUFBTX0tDX0gKKyNkZWZpbmUgTElOVVhfUFBTX0tDX0gKKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcHBzX2tlcm5lbC5oPgorCisjaWZkZWYgQ09ORklHX05UUF9QUFMKKworZXh0ZXJuIGludCBwcHNfa2NfYmluZChzdHJ1Y3QgcHBzX2RldmljZSAqcHBzLAorCQlzdHJ1Y3QgcHBzX2JpbmRfYXJncyAqYmluZF9hcmdzKTsKK2V4dGVybiB2b2lkIHBwc19rY19yZW1vdmUoc3RydWN0IHBwc19kZXZpY2UgKnBwcyk7CitleHRlcm4gdm9pZCBwcHNfa2NfZXZlbnQoc3RydWN0IHBwc19kZXZpY2UgKnBwcywKKwkJc3RydWN0IHBwc19ldmVudF90aW1lICp0cywgaW50IGV2ZW50KTsKKworCisjZWxzZSAvKiBDT05GSUdfTlRQX1BQUyAqLworCitzdGF0aWMgaW5saW5lIGludCBwcHNfa2NfYmluZChzdHJ1Y3QgcHBzX2RldmljZSAqcHBzLAorCQlzdHJ1Y3QgcHBzX2JpbmRfYXJncyAqYmluZF9hcmdzKSB7IHJldHVybiAtRU9QTk9UU1VQUDsgfQorc3RhdGljIGlubGluZSB2b2lkIHBwc19rY19yZW1vdmUoc3RydWN0IHBwc19kZXZpY2UgKnBwcykge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwcHNfa2NfZXZlbnQoc3RydWN0IHBwc19kZXZpY2UgKnBwcywKKwkJc3RydWN0IHBwc19ldmVudF90aW1lICp0cywgaW50IGV2ZW50KSB7fQorCisjZW5kaWYgLyogQ09ORklHX05UUF9QUFMgKi8KKworI2VuZGlmIC8qIExJTlVYX1BQU19LQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9wcHMuYyBiL2RyaXZlcnMvcHBzL3Bwcy5jCmluZGV4IGNhNTE4M2IuLjJiYWFkZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHBzL3Bwcy5jCisrKyBiL2RyaXZlcnMvcHBzL3Bwcy5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKiAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMjYsOSArMjcsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcHBzX2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgImtjLmgiCiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXMKQEAgLTM3LDYgKzQyLDkgQEAKIHN0YXRpYyBkZXZfdCBwcHNfZGV2dDsKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKnBwc19jbGFzczsKIAorc3RhdGljIERFRklORV9NVVRFWChwcHNfaWRyX2xvY2spOworc3RhdGljIERFRklORV9JRFIocHBzX2lkcik7CisKIC8qCiAgKiBDaGFyIGRldmljZSBtZXRob2RzCiAgKi8KQEAgLTYxLDE1ICs2OSwxMyBAQAogewogCXN0cnVjdCBwcHNfZGV2aWNlICpwcHMgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHBwc19rcGFyYW1zIHBhcmFtczsKLQlzdHJ1Y3QgcHBzX2ZkYXRhIGZkYXRhOwotCXVuc2lnbmVkIGxvbmcgdGlja3M7CiAJdm9pZCBfX3VzZXIgKnVhcmcgPSAodm9pZCBfX3VzZXIgKikgYXJnOwogCWludCBfX3VzZXIgKml1YXJnID0gKGludCBfX3VzZXIgKikgYXJnOwogCWludCBlcnI7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUFBTX0dFVFBBUkFNUzoKLQkJcHJfZGVidWcoIlBQU19HRVRQQVJBTVM6IHNvdXJjZSAlZFxuIiwgcHBzLT5pZCk7CisJCWRldl9kYmcocHBzLT5kZXYsICJQUFNfR0VUUEFSQU1TXG4iKTsKIAogCQlzcGluX2xvY2tfaXJxKCZwcHMtPmxvY2spOwogCkBAIC04NSw3ICs5MSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBQUFNfU0VUUEFSQU1TOgotCQlwcl9kZWJ1ZygiUFBTX1NFVFBBUkFNUzogc291cmNlICVkXG4iLCBwcHMtPmlkKTsKKwkJZGV2X2RiZyhwcHMtPmRldiwgIlBQU19TRVRQQVJBTVNcbiIpOwogCiAJCS8qIENoZWNrIHRoZSBjYXBhYmlsaXRpZXMgKi8KIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfVElNRSkpCkBAIC05NSwxNCArMTAxLDE0IEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJaWYgKCEocGFyYW1zLm1vZGUgJiAoUFBTX0NBUFRVUkVBU1NFUlQgfCBQUFNfQ0FQVFVSRUNMRUFSKSkpIHsKLQkJCXByX2RlYnVnKCJjYXB0dXJlIG1vZGUgdW5zcGVjaWZpZWQgKCV4KVxuIiwKKwkJCWRldl9kYmcocHBzLT5kZXYsICJjYXB0dXJlIG1vZGUgdW5zcGVjaWZpZWQgKCV4KVxuIiwKIAkJCQkJCQkJcGFyYW1zLm1vZGUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAogCQkvKiBDaGVjayBmb3Igc3VwcG9ydGVkIGNhcGFiaWxpdGllcyAqLwogCQlpZiAoKHBhcmFtcy5tb2RlICYgfnBwcy0+aW5mby5tb2RlKSAhPSAwKSB7Ci0JCQlwcl9kZWJ1ZygidW5zdXBwb3J0ZWQgY2FwYWJpbGl0aWVzICgleClcbiIsCisJCQlkZXZfZGJnKHBwcy0+ZGV2LCAidW5zdXBwb3J0ZWQgY2FwYWJpbGl0aWVzICgleClcbiIsCiAJCQkJCQkJCXBhcmFtcy5tb2RlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0xMTUsNyArMTIxLDcgQEAKIAkJLyogUmVzdG9yZSB0aGUgcmVhZCBvbmx5IHBhcmFtZXRlcnMgKi8KIAkJaWYgKChwYXJhbXMubW9kZSAmIChQUFNfVFNGTVRfVFNQRUMgfCBQUFNfVFNGTVRfTlRQRlApKSA9PSAwKSB7CiAJCQkvKiBzZWN0aW9uIDMuMyBvZiBSRkMgMjc4MyBpbnRlcnByZXRlZCAqLwotCQkJcHJfZGVidWcoInRpbWUgZm9ybWF0IHVuc3BlY2lmaWVkICgleClcbiIsCisJCQlkZXZfZGJnKHBwcy0+ZGV2LCAidGltZSBmb3JtYXQgdW5zcGVjaWZpZWQgKCV4KVxuIiwKIAkJCQkJCQkJcGFyYW1zLm1vZGUpOwogCQkJcHBzLT5wYXJhbXMubW9kZSB8PSBQUFNfVFNGTVRfVFNQRUM7CiAJCX0KQEAgLTEyOCw3ICsxMzQsNyBAQAogCQlicmVhazsKIAogCWNhc2UgUFBTX0dFVENBUDoKLQkJcHJfZGVidWcoIlBQU19HRVRDQVA6IHNvdXJjZSAlZFxuIiwgcHBzLT5pZCk7CisJCWRldl9kYmcocHBzLT5kZXYsICJQUFNfR0VUQ0FQXG4iKTsKIAogCQllcnIgPSBwdXRfdXNlcihwcHMtPmluZm8ubW9kZSwgaXVhcmcpOwogCQlpZiAoZXJyKQpAQCAtMTM2LDIwICsxNDIsMjYgQEAKIAogCQlicmVhazsKIAotCWNhc2UgUFBTX0ZFVENIOgotCQlwcl9kZWJ1ZygiUFBTX0ZFVENIOiBzb3VyY2UgJWRcbiIsIHBwcy0+aWQpOworCWNhc2UgUFBTX0ZFVENIOiB7CisJCXN0cnVjdCBwcHNfZmRhdGEgZmRhdGE7CisJCXVuc2lnbmVkIGludCBldjsKKworCQlkZXZfZGJnKHBwcy0+ZGV2LCAiUFBTX0ZFVENIXG4iKTsKIAogCQllcnIgPSBjb3B5X2Zyb21fdXNlcigmZmRhdGEsIHVhcmcsIHNpemVvZihzdHJ1Y3QgcHBzX2ZkYXRhKSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlwcHMtPmdvID0gMDsKKwkJZXYgPSBwcHMtPmxhc3RfZXY7CiAKIAkJLyogTWFuYWdlIHRoZSB0aW1lb3V0ICovCiAJCWlmIChmZGF0YS50aW1lb3V0LmZsYWdzICYgUFBTX1RJTUVfSU5WQUxJRCkKLQkJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwcHMtPnF1ZXVlLCBwcHMtPmdvKTsKKwkJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwcHMtPnF1ZXVlLAorCQkJCQlldiAhPSBwcHMtPmxhc3RfZXYpOwogCQllbHNlIHsKLQkJCXByX2RlYnVnKCJ0aW1lb3V0ICVsbGQuJTA5ZFxuIiwKKwkJCXVuc2lnbmVkIGxvbmcgdGlja3M7CisKKwkJCWRldl9kYmcocHBzLT5kZXYsICJ0aW1lb3V0ICVsbGQuJTA5ZFxuIiwKIAkJCQkJKGxvbmcgbG9uZykgZmRhdGEudGltZW91dC5zZWMsCiAJCQkJCWZkYXRhLnRpbWVvdXQubnNlYyk7CiAJCQl0aWNrcyA9IGZkYXRhLnRpbWVvdXQuc2VjICogSFo7CkBAIC0xNTcsNyArMTY5LDkgQEAKIAogCQkJaWYgKHRpY2tzICE9IDApIHsKIAkJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKLQkJCQkJCXBwcy0+cXVldWUsIHBwcy0+Z28sIHRpY2tzKTsKKwkJCQkJCXBwcy0+cXVldWUsCisJCQkJCQlldiAhPSBwcHMtPmxhc3RfZXYsCisJCQkJCQl0aWNrcyk7CiAJCQkJaWYgKGVyciA9PSAwKQogCQkJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJCX0KQEAgLTE2NSw3ICsxNzksNyBAQAogCiAJCS8qIENoZWNrIGZvciBwZW5kaW5nIHNpZ25hbHMgKi8KIAkJaWYgKGVyciA9PSAtRVJFU1RBUlRTWVMpIHsKLQkJCXByX2RlYnVnKCJwZW5kaW5nIHNpZ25hbCBjYXVnaHRcbiIpOworCQkJZGV2X2RiZyhwcHMtPmRldiwgInBlbmRpbmcgc2lnbmFsIGNhdWdodFxuIik7CiAJCQlyZXR1cm4gLUVJTlRSOwogCQl9CiAKQEAgLTE4NSwxMCArMTk5LDQ0IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlicmVhazsKKwl9CisJY2FzZSBQUFNfS0NfQklORDogeworCQlzdHJ1Y3QgcHBzX2JpbmRfYXJncyBiaW5kX2FyZ3M7CiAKKwkJZGV2X2RiZyhwcHMtPmRldiwgIlBQU19LQ19CSU5EXG4iKTsKKworCQkvKiBDaGVjayB0aGUgY2FwYWJpbGl0aWVzICovCisJCWlmICghY2FwYWJsZShDQVBfU1lTX1RJTUUpKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmJpbmRfYXJncywgdWFyZywKKwkJCQkJc2l6ZW9mKHN0cnVjdCBwcHNfYmluZF9hcmdzKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkvKiBDaGVjayBmb3Igc3VwcG9ydGVkIGNhcGFiaWxpdGllcyAqLworCQlpZiAoKGJpbmRfYXJncy5lZGdlICYgfnBwcy0+aW5mby5tb2RlKSAhPSAwKSB7CisJCQlkZXZfZXJyKHBwcy0+ZGV2LCAidW5zdXBwb3J0ZWQgY2FwYWJpbGl0aWVzICgleClcbiIsCisJCQkJCWJpbmRfYXJncy5lZGdlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyogVmFsaWRhdGUgcGFyYW1ldGVycyByb3VnaGx5ICovCisJCWlmIChiaW5kX2FyZ3MudHNmb3JtYXQgIT0gUFBTX1RTRk1UX1RTUEVDIHx8CisJCQkJKGJpbmRfYXJncy5lZGdlICYgflBQU19DQVBUVVJFQk9USCkgIT0gMCB8fAorCQkJCWJpbmRfYXJncy5jb25zdW1lciAhPSBQUFNfS0NfSEFSRFBQUykgeworCQkJZGV2X2VycihwcHMtPmRldiwgImludmFsaWQga2VybmVsIGNvbnN1bWVyIGJpbmQiCisJCQkJCSIgcGFyYW1ldGVycyAoJXgpXG4iLCBiaW5kX2FyZ3MuZWRnZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWVyciA9IHBwc19rY19iaW5kKHBwcywgJmJpbmRfYXJncyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKworCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7Ci0JCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTk4LDEyICsyNDYsNiBAQAogewogCXN0cnVjdCBwcHNfZGV2aWNlICpwcHMgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2RldiwKIAkJCQkJCXN0cnVjdCBwcHNfZGV2aWNlLCBjZGV2KTsKLQlpbnQgZm91bmQ7Ci0KLQlmb3VuZCA9IHBwc19nZXRfc291cmNlKHBwcy0+aWQpICE9IDA7Ci0JaWYgKCFmb3VuZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBwcHM7CiAKIAlyZXR1cm4gMDsKQEAgLTIxMSwxMSArMjUzLDYgQEAKIAogc3RhdGljIGludCBwcHNfY2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBwcHNfZGV2aWNlICpwcHMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQkvKiBGcmVlIHRoZSBQUFMgc291cmNlIGFuZCB3YWtlIHVwIChwb3NzaWJsZSkgZGVyZWdpc3RyYXRpb24gKi8KLQlwcHNfcHV0X3NvdXJjZShwcHMpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzMywyNSArMjcwLDY3IEBACiAJLnJlbGVhc2UJPSBwcHNfY2Rldl9yZWxlYXNlLAogfTsKIAorc3RhdGljIHZvaWQgcHBzX2RldmljZV9kZXN0cnVjdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBwc19kZXZpY2UgKnBwcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJLyogcmVsZWFzZSBpZCBoZXJlIHRvIHByb3RlY3Qgb3RoZXJzIGZyb20gdXNpbmcgaXQgd2hpbGUgaXQncworCSAqIHN0aWxsIGluIHVzZSAqLworCW11dGV4X2xvY2soJnBwc19pZHJfbG9jayk7CisJaWRyX3JlbW92ZSgmcHBzX2lkciwgcHBzLT5pZCk7CisJbXV0ZXhfdW5sb2NrKCZwcHNfaWRyX2xvY2spOworCisJa2ZyZWUoZGV2KTsKKwlrZnJlZShwcHMpOworfQorCiBpbnQgcHBzX3JlZ2lzdGVyX2NkZXYoc3RydWN0IHBwc19kZXZpY2UgKnBwcykKIHsKIAlpbnQgZXJyOworCWRldl90IGRldnQ7CiAKLQlwcHMtPmRldm5vID0gTUtERVYoTUFKT1IocHBzX2RldnQpLCBwcHMtPmlkKTsKKwltdXRleF9sb2NrKCZwcHNfaWRyX2xvY2spOworCS8qIEdldCBuZXcgSUQgZm9yIHRoZSBuZXcgUFBTIHNvdXJjZSAqLworCWlmIChpZHJfcHJlX2dldCgmcHBzX2lkciwgR0ZQX0tFUk5FTCkgPT0gMCkgeworCQltdXRleF91bmxvY2soJnBwc19pZHJfbG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIE5vdyByZWFsbHkgYWxsb2NhdGUgdGhlIFBQUyBzb3VyY2UuCisJICogQWZ0ZXIgaWRyX2dldF9uZXcoKSBjYWxsaW5nIHRoZSBuZXcgc291cmNlIHdpbGwgYmUgZnJlZWx5IGF2YWlsYWJsZQorCSAqIGludG8gdGhlIGtlcm5lbC4KKwkgKi8KKwllcnIgPSBpZHJfZ2V0X25ldygmcHBzX2lkciwgcHBzLCAmcHBzLT5pZCk7CisJbXV0ZXhfdW5sb2NrKCZwcHNfaWRyX2xvY2spOworCisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlwcHMtPmlkICY9IE1BWF9JRF9NQVNLOworCWlmIChwcHMtPmlkID49IFBQU19NQVhfU09VUkNFUykgeworCQlwcl9lcnIoIiVzOiB0b28gbWFueSBQUFMgc291cmNlcyBpbiB0aGUgc3lzdGVtXG4iLAorCQkJCQlwcHMtPmluZm8ubmFtZSk7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBmcmVlX2lkcjsKKwl9CisKKwlkZXZ0ID0gTUtERVYoTUFKT1IocHBzX2RldnQpLCBwcHMtPmlkKTsKKwogCWNkZXZfaW5pdCgmcHBzLT5jZGV2LCAmcHBzX2NkZXZfZm9wcyk7CiAJcHBzLT5jZGV2Lm93bmVyID0gcHBzLT5pbmZvLm93bmVyOwogCi0JZXJyID0gY2Rldl9hZGQoJnBwcy0+Y2RldiwgcHBzLT5kZXZubywgMSk7CisJZXJyID0gY2Rldl9hZGQoJnBwcy0+Y2RldiwgZGV2dCwgMSk7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInBwczogJXM6IGZhaWxlZCB0byBhZGQgY2hhciBkZXZpY2UgJWQ6JWRcbiIsCisJCXByX2VycigiJXM6IGZhaWxlZCB0byBhZGQgY2hhciBkZXZpY2UgJWQ6JWRcbiIsCiAJCQkJcHBzLT5pbmZvLm5hbWUsIE1BSk9SKHBwc19kZXZ0KSwgcHBzLT5pZCk7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8gZnJlZV9pZHI7CiAJfQotCXBwcy0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShwcHNfY2xhc3MsIHBwcy0+aW5mby5kZXYsIHBwcy0+ZGV2bm8sIE5VTEwsCisJcHBzLT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBwc19jbGFzcywgcHBzLT5pbmZvLmRldiwgZGV2dCwgcHBzLAogCQkJCQkJCSJwcHMlZCIsIHBwcy0+aWQpOwogCWlmIChJU19FUlIocHBzLT5kZXYpKQogCQlnb3RvIGRlbF9jZGV2OwotCWRldl9zZXRfZHJ2ZGF0YShwcHMtPmRldiwgcHBzKTsKKworCXBwcy0+ZGV2LT5yZWxlYXNlID0gcHBzX2RldmljZV9kZXN0cnVjdDsKIAogCXByX2RlYnVnKCJzb3VyY2UgJXMgZ290IGNkZXYgKCVkOiVkKVxuIiwgcHBzLT5pbmZvLm5hbWUsCiAJCQlNQUpPUihwcHNfZGV2dCksIHBwcy0+aWQpOwpAQCAtMjYxLDEyICszNDAsMTcgQEAKIGRlbF9jZGV2OgogCWNkZXZfZGVsKCZwcHMtPmNkZXYpOwogCitmcmVlX2lkcjoKKwltdXRleF9sb2NrKCZwcHNfaWRyX2xvY2spOworCWlkcl9yZW1vdmUoJnBwc19pZHIsIHBwcy0+aWQpOworCW11dGV4X3VubG9jaygmcHBzX2lkcl9sb2NrKTsKKwogCXJldHVybiBlcnI7CiB9CiAKIHZvaWQgcHBzX3VucmVnaXN0ZXJfY2RldihzdHJ1Y3QgcHBzX2RldmljZSAqcHBzKQogewotCWRldmljZV9kZXN0cm95KHBwc19jbGFzcywgcHBzLT5kZXZubyk7CisJZGV2aWNlX2Rlc3Ryb3kocHBzX2NsYXNzLCBwcHMtPmRldi0+ZGV2dCk7CiAJY2Rldl9kZWwoJnBwcy0+Y2Rldik7CiB9CiAKQEAgLTI4NiwxNCArMzcwLDE0IEBACiAKIAlwcHNfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJwcHMiKTsKIAlpZiAoIXBwc19jbGFzcykgewotCQlwcmludGsoS0VSTl9FUlIgInBwczogZmFpbGVkIHRvIGFsbG9jYXRlIGNsYXNzXG4iKTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgY2xhc3NcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcHBzX2NsYXNzLT5kZXZfYXR0cnMgPSBwcHNfYXR0cnM7CiAKIAllcnIgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZwcHNfZGV2dCwgMCwgUFBTX01BWF9TT1VSQ0VTLCAicHBzIik7CiAJaWYgKGVyciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwcHM6IGZhaWxlZCB0byBhbGxvY2F0ZSBjaGFyIGRldmljZSByZWdpb25cbiIpOworCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBjaGFyIGRldmljZSByZWdpb25cbiIpOwogCQlnb3RvIHJlbW92ZV9jbGFzczsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHMzL01ha2VmaWxlIGIvZHJpdmVycy9wczMvTWFrZWZpbGUKaW5kZXggY2NlYTE1Yy4uNTBjYjFlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wczMvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiBvYmotJChDT05GSUdfUFMzX1ZVQVJUKSArPSBwczMtdnVhcnQubwogb2JqLSQoQ09ORklHX1BTM19QUzNBVikgKz0gcHMzYXZfbW9kLm8KLXBzM2F2X21vZC1vYmpzCQkrPSBwczNhdi5vIHBzM2F2X2NtZC5vCitwczNhdl9tb2QteQkJOj0gcHMzYXYubyBwczNhdl9jbWQubwogb2JqLSQoQ09ORklHX1BQQ19QUzMpICs9IHN5cy1tYW5hZ2VyLWNvcmUubwogb2JqLSQoQ09ORklHX1BTM19TWVNfTUFOQUdFUikgKz0gcHMzLXN5cy1tYW5hZ2VyLm8KIG9iai0kKENPTkZJR19QUzNfU1RPUkFHRSkgKz0gcHMzc3Rvcl9saWIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3Jpby1zY2FuLmMgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYwppbmRleCAxZWI4MmM0Li40NjdlODJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYworKysgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYwpAQCAtNDYsNyArNDYsNiBAQAogREVGSU5FX1NQSU5MT0NLKHJpb19nbG9iYWxfbGlzdF9sb2NrKTsKIAogc3RhdGljIGludCBuZXh0X2Rlc3RpZCA9IDA7Ci1zdGF0aWMgaW50IG5leHRfc3dpdGNoaWQgPSAwOwogc3RhdGljIGludCBuZXh0X25ldCA9IDA7CiBzdGF0aWMgaW50IG5leHRfY29tcHRhZyA9IDE7CiAKQEAgLTM3OCwxMiArMzc3LDMwIEBACiAJc3RydWN0IHJpb19kZXYgKnJkZXY7CiAJc3RydWN0IHJpb19zd2l0Y2ggKnJzd2l0Y2ggPSBOVUxMOwogCWludCByZXN1bHQsIHJkaWQ7CisJc2l6ZV90IHNpemU7CisJdTMyIHN3cGluZm8gPSAwOwogCi0JcmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByaW9fZGV2KSwgR0ZQX0tFUk5FTCk7CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmlvX2Rldik7CisJaWYgKHJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihwb3J0LCBkZXN0aWQsIGhvcGNvdW50LAorCQkJCSAgICAgUklPX1BFRl9DQVIsICZyZXN1bHQpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChyZXN1bHQgJiAoUklPX1BFRl9TV0lUQ0ggfCBSSU9fUEVGX01VTFRJUE9SVCkpIHsKKwkJcmlvX21wb3J0X3JlYWRfY29uZmlnXzMyKHBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJCQkJCSBSSU9fU1dQX0lORk9fQ0FSLCAmc3dwaW5mbyk7CisJCWlmIChyZXN1bHQgJiBSSU9fUEVGX1NXSVRDSCkgeworCQkJc2l6ZSArPSAoUklPX0dFVF9UT1RBTF9QT1JUUyhzd3BpbmZvKSAqCisJCQkJc2l6ZW9mKHJzd2l0Y2gtPm5leHRkZXZbMF0pKSArIHNpemVvZigqcnN3aXRjaCk7CisJCX0KKwl9CisKKwlyZGV2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJkZXYpCiAJCXJldHVybiBOVUxMOwogCiAJcmRldi0+bmV0ID0gbmV0OworCXJkZXYtPnBlZiA9IHJlc3VsdDsKKwlyZGV2LT5zd3BpbmZvID0gc3dwaW5mbzsKIAlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIocG9ydCwgZGVzdGlkLCBob3Bjb3VudCwgUklPX0RFVl9JRF9DQVIsCiAJCQkJICZyZXN1bHQpOwogCXJkZXYtPmRpZCA9IHJlc3VsdCA+PiAxNjsKQEAgLTM5Nyw4ICs0MTQsNiBAQAogCXJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihwb3J0LCBkZXN0aWQsIGhvcGNvdW50LCBSSU9fQVNNX0lORk9fQ0FSLAogCQkJCSAmcmVzdWx0KTsKIAlyZGV2LT5hc21fcmV2ID0gcmVzdWx0ID4+IDE2OwotCXJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihwb3J0LCBkZXN0aWQsIGhvcGNvdW50LCBSSU9fUEVGX0NBUiwKLQkJCQkgJnJkZXYtPnBlZik7CiAJaWYgKHJkZXYtPnBlZiAmIFJJT19QRUZfRVhUX0ZFQVRVUkVTKSB7CiAJCXJkZXYtPmVmcHRyID0gcmVzdWx0ICYgMHhmZmZmOwogCQlyZGV2LT5waHlzX2VmcHRyID0gcmlvX21wb3J0X2dldF9waHlzZWZiKHBvcnQsIDAsIGRlc3RpZCwKQEAgLTQwOCwxMSArNDIzLDYgQEAKIAkJCQkJCWhvcGNvdW50LCBSSU9fRUZCX0VSUl9NR01OVCk7CiAJfQogCi0JaWYgKHJkZXYtPnBlZiAmIChSSU9fUEVGX1NXSVRDSCB8IFJJT19QRUZfTVVMVElQT1JUKSkgewotCQlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIocG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKLQkJCQkJIFJJT19TV1BfSU5GT19DQVIsICZyZGV2LT5zd3BpbmZvKTsKLQl9Ci0KIAlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIocG9ydCwgZGVzdGlkLCBob3Bjb3VudCwgUklPX1NSQ19PUFNfQ0FSLAogCQkJCSAmcmRldi0+c3JjX29wcyk7CiAJcmlvX21wb3J0X3JlYWRfY29uZmlnXzMyKHBvcnQsIGRlc3RpZCwgaG9wY291bnQsIFJJT19EU1RfT1BTX0NBUiwKQEAgLTQyNyw2ICs0MzcsMTAgQEAKIAkJcmlvX21wb3J0X3dyaXRlX2NvbmZpZ18zMihwb3J0LCBkZXN0aWQsIGhvcGNvdW50LAogCQkJCQkgIFJJT19DT01QT05FTlRfVEFHX0NTUiwgbmV4dF9jb21wdGFnKTsKIAkJcmRldi0+Y29tcF90YWcgPSBuZXh0X2NvbXB0YWcrKzsKKwl9ICBlbHNlIHsKKwkJcmlvX21wb3J0X3JlYWRfY29uZmlnXzMyKHBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJCQkJCSBSSU9fQ09NUE9ORU5UX1RBR19DU1IsCisJCQkJCSAmcmRldi0+Y29tcF90YWcpOwogCX0KIAogCWlmIChyaW9fZGV2aWNlX2hhc19kZXN0aWQocG9ydCwgcmRldi0+c3JjX29wcywgcmRldi0+ZHN0X29wcykpIHsKQEAgLTQzNywyMSArNDUxLDIwIEBACiAJCQkJbmV4dF9kZXN0aWQrKzsKIAkJfSBlbHNlCiAJCQlyZGV2LT5kZXN0aWQgPSByaW9fZ2V0X2RldmljZV9pZChwb3J0LCBkZXN0aWQsIGhvcGNvdW50KTsKLQl9IGVsc2UKLQkJLyogU3dpdGNoIGRldmljZSBoYXMgYW4gYXNzb2NpYXRlZCBkZXN0SUQgKi8KLQkJcmRldi0+ZGVzdGlkID0gUklPX0lOVkFMSURfREVTVElEOworCisJCXJkZXYtPmhvcGNvdW50ID0gMHhmZjsKKwl9IGVsc2UgeworCQkvKiBTd2l0Y2ggZGV2aWNlIGhhcyBhbiBhc3NvY2lhdGVkIGRlc3RJRCB3aGljaAorCQkgKiB3aWxsIGJlIGFkanVzdGVkIGxhdGVyCisJCSAqLworCQlyZGV2LT5kZXN0aWQgPSBkZXN0aWQ7CisJCXJkZXYtPmhvcGNvdW50ID0gaG9wY291bnQ7CisJfQogCiAJLyogSWYgYSBQRSBoYXMgYm90aCBzd2l0Y2ggYW5kIG90aGVyIGZ1bmN0aW9ucywgc2hvdyBpdCBhcyBhIHN3aXRjaCAqLwogCWlmIChyaW9faXNfc3dpdGNoKHJkZXYpKSB7Ci0JCXJzd2l0Y2ggPSBremFsbG9jKHNpemVvZigqcnN3aXRjaCkgKwotCQkJCSAgUklPX0dFVF9UT1RBTF9QT1JUUyhyZGV2LT5zd3BpbmZvKSAqCi0JCQkJICBzaXplb2YocnN3aXRjaC0+bmV4dGRldlswXSksCi0JCQkJICBHRlBfS0VSTkVMKTsKLQkJaWYgKCFyc3dpdGNoKQotCQkJZ290byBjbGVhbnVwOwotCQlyc3dpdGNoLT5zd2l0Y2hpZCA9IG5leHRfc3dpdGNoaWQ7Ci0JCXJzd2l0Y2gtPmhvcGNvdW50ID0gaG9wY291bnQ7Ci0JCXJzd2l0Y2gtPmRlc3RpZCA9IGRlc3RpZDsKKwkJcnN3aXRjaCA9IHJkZXYtPnJzd2l0Y2g7CisJCXJzd2l0Y2gtPnN3aXRjaGlkID0gcmRldi0+Y29tcF90YWcgJiBSSU9fQ1RBR19VREVWSUQ7CiAJCXJzd2l0Y2gtPnBvcnRfb2sgPSAwOwogCQlyc3dpdGNoLT5yb3V0ZV90YWJsZSA9IGt6YWxsb2Moc2l6ZW9mKHU4KSoKIAkJCQkJUklPX01BWF9ST1VURV9FTlRSSUVTKHBvcnQtPnN5c19zaXplKSwKQEAgLTQ2MiwxNSArNDc1LDEzIEBACiAJCWZvciAocmRpZCA9IDA7IHJkaWQgPCBSSU9fTUFYX1JPVVRFX0VOVFJJRVMocG9ydC0+c3lzX3NpemUpOwogCQkJCXJkaWQrKykKIAkJCXJzd2l0Y2gtPnJvdXRlX3RhYmxlW3JkaWRdID0gUklPX0lOVkFMSURfUk9VVEU7Ci0JCXJkZXYtPnJzd2l0Y2ggPSByc3dpdGNoOwotCQlyc3dpdGNoLT5yZGV2ID0gcmRldjsKIAkJZGV2X3NldF9uYW1lKCZyZGV2LT5kZXYsICIlMDJ4OnM6JTA0eCIsIHJkZXYtPm5ldC0+aWQsCi0JCQkgICAgIHJkZXYtPnJzd2l0Y2gtPnN3aXRjaGlkKTsKKwkJCSAgICAgcnN3aXRjaC0+c3dpdGNoaWQpOwogCQlyaW9fc3dpdGNoX2luaXQocmRldiwgZG9fZW51bSk7CiAKLQkJaWYgKGRvX2VudW0gJiYgcmRldi0+cnN3aXRjaC0+Y2xyX3RhYmxlKQotCQkJcmRldi0+cnN3aXRjaC0+Y2xyX3RhYmxlKHBvcnQsIGRlc3RpZCwgaG9wY291bnQsCi0JCQkJCQkgUklPX0dMT0JBTF9UQUJMRSk7CisJCWlmIChkb19lbnVtICYmIHJzd2l0Y2gtPmNscl90YWJsZSkKKwkJCXJzd2l0Y2gtPmNscl90YWJsZShwb3J0LCBkZXN0aWQsIGhvcGNvdW50LAorCQkJCQkgICBSSU9fR0xPQkFMX1RBQkxFKTsKIAogCQlsaXN0X2FkZF90YWlsKCZyc3dpdGNoLT5ub2RlLCAmcmlvX3N3aXRjaGVzKTsKIApAQCAtNTA2LDEwICs1MTcsOSBAQAogCXJldHVybiByZGV2OwogCiBjbGVhbnVwOgotCWlmIChyc3dpdGNoKSB7CisJaWYgKHJzd2l0Y2gtPnJvdXRlX3RhYmxlKQogCQlrZnJlZShyc3dpdGNoLT5yb3V0ZV90YWJsZSk7Ci0JCWtmcmVlKHJzd2l0Y2gpOwotCX0KKwogCWtmcmVlKHJkZXYpOwogCXJldHVybiBOVUxMOwogfQpAQCAtNjMyLDggKzY0Miw3IEBACiAKIC8qKgogICogcmlvX3JvdXRlX2FkZF9lbnRyeS0gQWRkIGEgcm91dGUgZW50cnkgdG8gYSBzd2l0Y2ggcm91dGluZyB0YWJsZQotICogQG1wb3J0OiBNYXN0ZXIgcG9ydCB0byBzZW5kIHRyYW5zYWN0aW9uCi0gKiBAcnN3aXRjaDogU3dpdGNoIGRldmljZQorICogQHJkZXY6IFJJTyBkZXZpY2UKICAqIEB0YWJsZTogUm91dGluZyB0YWJsZSBJRAogICogQHJvdXRlX2Rlc3RpZDogRGVzdGluYXRpb24gSUQgdG8gYmUgcm91dGVkCiAgKiBAcm91dGVfcG9ydDogUG9ydCBudW1iZXIgdG8gYmUgcm91dGVkCkBAIC02NDcsMzEgKzY1NiwzMSBAQAogICogb24gZmFpbHVyZS4KICAqLwogc3RhdGljIGludAotcmlvX3JvdXRlX2FkZF9lbnRyeShzdHJ1Y3QgcmlvX21wb3J0ICptcG9ydCwgc3RydWN0IHJpb19zd2l0Y2ggKnJzd2l0Y2gsCityaW9fcm91dGVfYWRkX2VudHJ5KHN0cnVjdCByaW9fZGV2ICpyZGV2LAogCQkgICAgdTE2IHRhYmxlLCB1MTYgcm91dGVfZGVzdGlkLCB1OCByb3V0ZV9wb3J0LCBpbnQgbG9jaykKIHsKIAlpbnQgcmM7CiAKIAlpZiAobG9jaykgewotCQlyYyA9IHJpb19sb2NrX2RldmljZShtcG9ydCwgcnN3aXRjaC0+ZGVzdGlkLAotCQkJCSAgICAgcnN3aXRjaC0+aG9wY291bnQsIDEwMDApOworCQlyYyA9IHJpb19sb2NrX2RldmljZShyZGV2LT5uZXQtPmhwb3J0LCByZGV2LT5kZXN0aWQsCisJCQkJICAgICByZGV2LT5ob3Bjb3VudCwgMTAwMCk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKIAl9CiAKLQlyYyA9IHJzd2l0Y2gtPmFkZF9lbnRyeShtcG9ydCwgcnN3aXRjaC0+ZGVzdGlkLAotCQkJCQlyc3dpdGNoLT5ob3Bjb3VudCwgdGFibGUsCi0JCQkJCXJvdXRlX2Rlc3RpZCwgcm91dGVfcG9ydCk7CisJcmMgPSByZGV2LT5yc3dpdGNoLT5hZGRfZW50cnkocmRldi0+bmV0LT5ocG9ydCwgcmRldi0+ZGVzdGlkLAorCQkJCSAgICAgIHJkZXYtPmhvcGNvdW50LCB0YWJsZSwKKwkJCQkgICAgICByb3V0ZV9kZXN0aWQsIHJvdXRlX3BvcnQpOwogCWlmIChsb2NrKQotCQlyaW9fdW5sb2NrX2RldmljZShtcG9ydCwgcnN3aXRjaC0+ZGVzdGlkLCByc3dpdGNoLT5ob3Bjb3VudCk7CisJCXJpb191bmxvY2tfZGV2aWNlKHJkZXYtPm5ldC0+aHBvcnQsIHJkZXYtPmRlc3RpZCwKKwkJCQkgIHJkZXYtPmhvcGNvdW50KTsKIAogCXJldHVybiByYzsKIH0KIAogLyoqCiAgKiByaW9fcm91dGVfZ2V0X2VudHJ5LSBSZWFkIGEgcm91dGUgZW50cnkgaW4gYSBzd2l0Y2ggcm91dGluZyB0YWJsZQotICogQG1wb3J0OiBNYXN0ZXIgcG9ydCB0byBzZW5kIHRyYW5zYWN0aW9uCi0gKiBAcnN3aXRjaDogU3dpdGNoIGRldmljZQorICogQHJkZXY6IFJJTyBkZXZpY2UKICAqIEB0YWJsZTogUm91dGluZyB0YWJsZSBJRAogICogQHJvdXRlX2Rlc3RpZDogRGVzdGluYXRpb24gSUQgdG8gYmUgcm91dGVkCiAgKiBAcm91dGVfcG9ydDogUG9pbnRlciB0byByZWFkIHBvcnQgbnVtYmVyIGludG8KQEAgLTY4NSwyMyArNjk0LDI0IEBACiAgKiBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50Ci1yaW9fcm91dGVfZ2V0X2VudHJ5KHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCBzdHJ1Y3QgcmlvX3N3aXRjaCAqcnN3aXRjaCwgdTE2IHRhYmxlLAorcmlvX3JvdXRlX2dldF9lbnRyeShzdHJ1Y3QgcmlvX2RldiAqcmRldiwgdTE2IHRhYmxlLAogCQkgICAgdTE2IHJvdXRlX2Rlc3RpZCwgdTggKnJvdXRlX3BvcnQsIGludCBsb2NrKQogewogCWludCByYzsKIAogCWlmIChsb2NrKSB7Ci0JCXJjID0gcmlvX2xvY2tfZGV2aWNlKG1wb3J0LCByc3dpdGNoLT5kZXN0aWQsCi0JCQkJICAgICByc3dpdGNoLT5ob3Bjb3VudCwgMTAwMCk7CisJCXJjID0gcmlvX2xvY2tfZGV2aWNlKHJkZXYtPm5ldC0+aHBvcnQsIHJkZXYtPmRlc3RpZCwKKwkJCQkgICAgIHJkZXYtPmhvcGNvdW50LCAxMDAwKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwogCX0KIAotCXJjID0gcnN3aXRjaC0+Z2V0X2VudHJ5KG1wb3J0LCByc3dpdGNoLT5kZXN0aWQsCi0JCQkJCXJzd2l0Y2gtPmhvcGNvdW50LCB0YWJsZSwKLQkJCQkJcm91dGVfZGVzdGlkLCByb3V0ZV9wb3J0KTsKKwlyYyA9IHJkZXYtPnJzd2l0Y2gtPmdldF9lbnRyeShyZGV2LT5uZXQtPmhwb3J0LCByZGV2LT5kZXN0aWQsCisJCQkJICAgICAgcmRldi0+aG9wY291bnQsIHRhYmxlLAorCQkJCSAgICAgIHJvdXRlX2Rlc3RpZCwgcm91dGVfcG9ydCk7CiAJaWYgKGxvY2spCi0JCXJpb191bmxvY2tfZGV2aWNlKG1wb3J0LCByc3dpdGNoLT5kZXN0aWQsIHJzd2l0Y2gtPmhvcGNvdW50KTsKKwkJcmlvX3VubG9ja19kZXZpY2UocmRldi0+bmV0LT5ocG9ydCwgcmRldi0+ZGVzdGlkLAorCQkJCSAgcmRldi0+aG9wY291bnQpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtODA5LDE2ICs4MTksMTUgQEAKIAkJcmV0dXJuIC0xOwogCiAJaWYgKHJpb19pc19zd2l0Y2gocmRldikpIHsKLQkJbmV4dF9zd2l0Y2hpZCsrOwogCQlzd19pbnBvcnQgPSBSSU9fR0VUX1BPUlRfTlVNKHJkZXYtPnN3cGluZm8pOwotCQlyaW9fcm91dGVfYWRkX2VudHJ5KHBvcnQsIHJkZXYtPnJzd2l0Y2gsIFJJT19HTE9CQUxfVEFCTEUsCisJCXJpb19yb3V0ZV9hZGRfZW50cnkocmRldiwgUklPX0dMT0JBTF9UQUJMRSwKIAkJCQkgICAgcG9ydC0+aG9zdF9kZXZpY2VpZCwgc3dfaW5wb3J0LCAwKTsKIAkJcmRldi0+cnN3aXRjaC0+cm91dGVfdGFibGVbcG9ydC0+aG9zdF9kZXZpY2VpZF0gPSBzd19pbnBvcnQ7CiAKIAkJZm9yIChkZXN0aWQgPSAwOyBkZXN0aWQgPCBuZXh0X2Rlc3RpZDsgZGVzdGlkKyspIHsKIAkJCWlmIChkZXN0aWQgPT0gcG9ydC0+aG9zdF9kZXZpY2VpZCkKIAkJCQljb250aW51ZTsKLQkJCXJpb19yb3V0ZV9hZGRfZW50cnkocG9ydCwgcmRldi0+cnN3aXRjaCwgUklPX0dMT0JBTF9UQUJMRSwKKwkJCXJpb19yb3V0ZV9hZGRfZW50cnkocmRldiwgUklPX0dMT0JBTF9UQUJMRSwKIAkJCQkJICAgIGRlc3RpZCwgc3dfaW5wb3J0LCAwKTsKIAkJCXJkZXYtPnJzd2l0Y2gtPnJvdXRlX3RhYmxlW2Rlc3RpZF0gPSBzd19pbnBvcnQ7CiAJCX0KQEAgLTg1MCw4ICs4NTksNyBAQAogCQkJCSAgICAiUklPOiBzY2FubmluZyBkZXZpY2Ugb24gcG9ydCAlZFxuIiwKIAkJCQkgICAgcG9ydF9udW0pOwogCQkJCXJkZXYtPnJzd2l0Y2gtPnBvcnRfb2sgfD0gKDEgPDwgcG9ydF9udW0pOwotCQkJCXJpb19yb3V0ZV9hZGRfZW50cnkocG9ydCwgcmRldi0+cnN3aXRjaCwKLQkJCQkJCVJJT19HTE9CQUxfVEFCTEUsCisJCQkJcmlvX3JvdXRlX2FkZF9lbnRyeShyZGV2LCBSSU9fR0xPQkFMX1RBQkxFLAogCQkJCQkJUklPX0FOWV9ERVNUSUQocG9ydC0+c3lzX3NpemUpLAogCQkJCQkJcG9ydF9udW0sIDApOwogCkBAIC04NjUsNyArODczLDcgQEAKIAkJCQkJICAgICBkZXN0aWQgPCBuZXh0X2Rlc3RpZDsgZGVzdGlkKyspIHsKIAkJCQkJCWlmIChkZXN0aWQgPT0gcG9ydC0+aG9zdF9kZXZpY2VpZCkKIAkJCQkJCQljb250aW51ZTsKLQkJCQkJCXJpb19yb3V0ZV9hZGRfZW50cnkocG9ydCwgcmRldi0+cnN3aXRjaCwKKwkJCQkJCXJpb19yb3V0ZV9hZGRfZW50cnkocmRldiwKIAkJCQkJCQkJICAgIFJJT19HTE9CQUxfVEFCTEUsCiAJCQkJCQkJCSAgICBkZXN0aWQsCiAJCQkJCQkJCSAgICBwb3J0X251bSwKQEAgLTkwNCw3ICs5MTIsNyBAQAogCQkJCW5leHRfZGVzdGlkKys7CiAJCX0KIAotCQlyZGV2LT5yc3dpdGNoLT5kZXN0aWQgPSBzd19kZXN0aWQ7CisJCXJkZXYtPmRlc3RpZCA9IHN3X2Rlc3RpZDsKIAl9IGVsc2UKIAkJcHJfZGVidWcoIlJJTzogZm91bmQgJXMgKHZpZCAlNC40eCBkaWQgJTQuNHgpXG4iLAogCQkgICAgcmlvX25hbWUocmRldiksIHJkZXYtPnZpZCwgcmRldi0+ZGlkKTsKQEAgLTk0MSw3ICs5NDksNyBAQAogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdAogcmlvX2Rpc2NfcGVlcihzdHJ1Y3QgcmlvX25ldCAqbmV0LCBzdHJ1Y3QgcmlvX21wb3J0ICpwb3J0LCB1MTYgZGVzdGlkLAotCSAgICAgIHU4IGhvcGNvdW50KQorCSAgICAgIHU4IGhvcGNvdW50LCBzdHJ1Y3QgcmlvX2RldiAqcHJldiwgaW50IHByZXZfcG9ydCkKIHsKIAl1OCBwb3J0X251bSwgcm91dGVfcG9ydDsKIAlzdHJ1Y3QgcmlvX2RldiAqcmRldjsKQEAgLTk1MSwxNCArOTU5LDE1IEBACiAJaWYgKChyZGV2ID0gcmlvX3NldHVwX2RldmljZShuZXQsIHBvcnQsIGRlc3RpZCwgaG9wY291bnQsIDApKSkgewogCQkvKiBBZGQgZGV2aWNlIHRvIHRoZSBnbG9iYWwgYW5kIGJ1cy9uZXQgc3BlY2lmaWMgbGlzdC4gKi8KIAkJbGlzdF9hZGRfdGFpbCgmcmRldi0+bmV0X2xpc3QsICZuZXQtPmRldmljZXMpOworCQlyZGV2LT5wcmV2ID0gcHJldjsKKwkJaWYgKHByZXYgJiYgcmlvX2lzX3N3aXRjaChwcmV2KSkKKwkJCXByZXYtPnJzd2l0Y2gtPm5leHRkZXZbcHJldl9wb3J0XSA9IHJkZXY7CiAJfSBlbHNlCiAJCXJldHVybiAtMTsKIAogCWlmIChyaW9faXNfc3dpdGNoKHJkZXYpKSB7Ci0JCW5leHRfc3dpdGNoaWQrKzsKLQogCQkvKiBBc3NvY2lhdGVkIGRlc3RpZCBpcyBob3cgd2UgYWNjZXNzZWQgdGhpcyBzd2l0Y2ggKi8KLQkJcmRldi0+cnN3aXRjaC0+ZGVzdGlkID0gZGVzdGlkOworCQlyZGV2LT5kZXN0aWQgPSBkZXN0aWQ7CiAKIAkJcHJfZGVidWcoCiAJCSAgICAiUklPOiBmb3VuZCAlcyAodmlkICU0LjR4IGRpZCAlNC40eCkgd2l0aCAlZCBwb3J0c1xuIiwKQEAgLTk4MSw3ICs5OTAsNyBAQAogCQkJCWZvciAobmRlc3RpZCA9IDA7CiAJCQkJICAgICBuZGVzdGlkIDwgUklPX0FOWV9ERVNUSUQocG9ydC0+c3lzX3NpemUpOwogCQkJCSAgICAgbmRlc3RpZCsrKSB7Ci0JCQkJCXJpb19yb3V0ZV9nZXRfZW50cnkocG9ydCwgcmRldi0+cnN3aXRjaCwKKwkJCQkJcmlvX3JvdXRlX2dldF9lbnRyeShyZGV2LAogCQkJCQkJCSAgICBSSU9fR0xPQkFMX1RBQkxFLAogCQkJCQkJCSAgICBuZGVzdGlkLAogCQkJCQkJCSAgICAmcm91dGVfcG9ydCwgMCk7CkBAIC05OTIsOCArMTAwMSw4IEBACiAJCQkJaWYgKG5kZXN0aWQgPT0gUklPX0FOWV9ERVNUSUQocG9ydC0+c3lzX3NpemUpKQogCQkJCQljb250aW51ZTsKIAkJCQlyaW9fdW5sb2NrX2RldmljZShwb3J0LCBkZXN0aWQsIGhvcGNvdW50KTsKLQkJCQlpZiAocmlvX2Rpc2NfcGVlcgotCQkJCSAgICAobmV0LCBwb3J0LCBuZGVzdGlkLCBob3Bjb3VudCArIDEpIDwgMCkKKwkJCQlpZiAocmlvX2Rpc2NfcGVlcihuZXQsIHBvcnQsIG5kZXN0aWQsCisJCQkJCWhvcGNvdW50ICsgMSwgcmRldiwgcG9ydF9udW0pIDwgMCkKIAkJCQkJcmV0dXJuIC0xOwogCQkJfQogCQl9CkBAIC0xMDY5LDE0ICsxMDc4LDE0IEBACiAgKi8KIHN0YXRpYyB2b2lkIHJpb191cGRhdGVfcm91dGVfdGFibGVzKHN0cnVjdCByaW9fbXBvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHJpb19kZXYgKnJkZXY7CisJc3RydWN0IHJpb19kZXYgKnJkZXYsICpzd3JkZXY7CiAJc3RydWN0IHJpb19zd2l0Y2ggKnJzd2l0Y2g7CiAJdTggc3BvcnQ7CiAJdTE2IGRlc3RpZDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJnJpb19kZXZpY2VzLCBnbG9iYWxfbGlzdCkgewogCi0JCWRlc3RpZCA9IChyaW9faXNfc3dpdGNoKHJkZXYpKT9yZGV2LT5yc3dpdGNoLT5kZXN0aWQ6cmRldi0+ZGVzdGlkOworCQlkZXN0aWQgPSByZGV2LT5kZXN0aWQ7CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyc3dpdGNoLCAmcmlvX3N3aXRjaGVzLCBub2RlKSB7CiAKQEAgLTEwODQsMTQgKzEwOTMsMTYgQEAKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKFJJT19JTlZBTElEX1JPVVRFID09IHJzd2l0Y2gtPnJvdXRlX3RhYmxlW2Rlc3RpZF0pIHsKKwkJCQlzd3JkZXYgPSBzd190b19yaW9fZGV2KHJzd2l0Y2gpOworCiAJCQkJLyogU2tpcCBpZiBkZXN0aWQgZW5kcyBpbiBlbXB0eSBzd2l0Y2gqLwotCQkJCWlmIChyc3dpdGNoLT5kZXN0aWQgPT0gZGVzdGlkKQorCQkJCWlmIChzd3JkZXYtPmRlc3RpZCA9PSBkZXN0aWQpCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJc3BvcnQgPSBSSU9fR0VUX1BPUlRfTlVNKHJzd2l0Y2gtPnJkZXYtPnN3cGluZm8pOworCQkJCXNwb3J0ID0gUklPX0dFVF9QT1JUX05VTShzd3JkZXYtPnN3cGluZm8pOwogCiAJCQkJaWYgKHJzd2l0Y2gtPmFkZF9lbnRyeSkJewotCQkJCQlyaW9fcm91dGVfYWRkX2VudHJ5KHBvcnQsIHJzd2l0Y2gsCisJCQkJCXJpb19yb3V0ZV9hZGRfZW50cnkoc3dyZGV2LAogCQkJCQkJUklPX0dMT0JBTF9UQUJMRSwgZGVzdGlkLAogCQkJCQkJc3BvcnQsIDApOwogCQkJCQlyc3dpdGNoLT5yb3V0ZV90YWJsZVtkZXN0aWRdID0gc3BvcnQ7CkBAIC0xMjAzLDIxICsxMjE0LDIwIEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZyaW9fZGV2aWNlcywgZ2xvYmFsX2xpc3QpCiAJCWlmIChyaW9faXNfc3dpdGNoKHJkZXYpKSB7Ci0JCQlyaW9fbG9ja19kZXZpY2UocmRldi0+bmV0LT5ocG9ydCwgcmRldi0+cnN3aXRjaC0+ZGVzdGlkLAotCQkJCQlyZGV2LT5yc3dpdGNoLT5ob3Bjb3VudCwgMTAwMCk7CisJCQlyaW9fbG9ja19kZXZpY2UocmRldi0+bmV0LT5ocG9ydCwgcmRldi0+ZGVzdGlkLAorCQkJCQlyZGV2LT5ob3Bjb3VudCwgMTAwMCk7CiAJCQlmb3IgKGkgPSAwOwogCQkJICAgICBpIDwgUklPX01BWF9ST1VURV9FTlRSSUVTKHJkZXYtPm5ldC0+aHBvcnQtPnN5c19zaXplKTsKIAkJCSAgICAgaSsrKSB7Ci0JCQkJaWYgKHJpb19yb3V0ZV9nZXRfZW50cnkKLQkJCQkgICAgKHJkZXYtPm5ldC0+aHBvcnQsIHJkZXYtPnJzd2l0Y2gsCi0JCQkJICAgICBSSU9fR0xPQkFMX1RBQkxFLCBpLCAmc3BvcnQsIDApIDwgMCkKKwkJCQlpZiAocmlvX3JvdXRlX2dldF9lbnRyeShyZGV2LAorCQkJCQlSSU9fR0xPQkFMX1RBQkxFLCBpLCAmc3BvcnQsIDApIDwgMCkKIAkJCQkJY29udGludWU7CiAJCQkJcmRldi0+cnN3aXRjaC0+cm91dGVfdGFibGVbaV0gPSBzcG9ydDsKIAkJCX0KIAogCQkJcmlvX3VubG9ja19kZXZpY2UocmRldi0+bmV0LT5ocG9ydCwKLQkJCQkJICByZGV2LT5yc3dpdGNoLT5kZXN0aWQsCi0JCQkJCSAgcmRldi0+cnN3aXRjaC0+aG9wY291bnQpOworCQkJCQkgIHJkZXYtPmRlc3RpZCwKKwkJCQkJICByZGV2LT5ob3Bjb3VudCk7CiAJCX0KIH0KIApAQCAtMTI4NCw3ICsxMjk0LDcgQEAKIAkJCQkJCSAgIG1wb3J0LT5ob3N0X2RldmljZWlkKTsKIAogCQlpZiAocmlvX2Rpc2NfcGVlcihuZXQsIG1wb3J0LCBSSU9fQU5ZX0RFU1RJRChtcG9ydC0+c3lzX3NpemUpLAotCQkJCQkwKSA8IDApIHsKKwkJCQkJMCwgTlVMTCwgMCkgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkgICAgICAgIlJJTzogbWFzdGVyIHBvcnQgJWQgZGV2aWNlIGhhcyBmYWlsZWQgZGlzY292ZXJ5XG4iLAogCQkJICAgICAgIG1wb3J0LT5pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXN5c2ZzLmMgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXN5c2ZzLmMKaW5kZXggMTM3ZWQ5My4uNzZiNDE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3Jpby1zeXNmcy5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tc3lzZnMuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAKIAllcnIgPSBkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKCZyZGV2LT5kZXYsICZyaW9fY29uZmlnX2F0dHIpOwogCi0JaWYgKCFlcnIgJiYgcmRldi0+cnN3aXRjaCkgeworCWlmICghZXJyICYmIChyZGV2LT5wZWYgJiBSSU9fUEVGX1NXSVRDSCkpIHsKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZyZGV2LT5kZXYsICZkZXZfYXR0cl9yb3V0ZXMpOwogCQlpZiAoIWVyciAmJiByZGV2LT5yc3dpdGNoLT5zd19zeXNmcykKIAkJCWVyciA9IHJkZXYtPnJzd2l0Y2gtPnN3X3N5c2ZzKHJkZXYsIFJJT19TV19TWVNGU19DUkVBVEUpOwpAQCAtMjM5LDcgKzIzOSw3IEBACiB2b2lkIHJpb19yZW1vdmVfc3lzZnNfZGV2X2ZpbGVzKHN0cnVjdCByaW9fZGV2ICpyZGV2KQogewogCWRldmljZV9yZW1vdmVfYmluX2ZpbGUoJnJkZXYtPmRldiwgJnJpb19jb25maWdfYXR0cik7Ci0JaWYgKHJkZXYtPnJzd2l0Y2gpIHsKKwlpZiAocmRldi0+cGVmICYgUklPX1BFRl9TV0lUQ0gpIHsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZyZGV2LT5kZXYsICZkZXZfYXR0cl9yb3V0ZXMpOwogCQlpZiAocmRldi0+cnN3aXRjaC0+c3dfc3lzZnMpCiAJCQlyZGV2LT5yc3dpdGNoLT5zd19zeXNmcyhyZGV2LCBSSU9fU1dfU1lTRlNfUkVNT1ZFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFwaWRpby9yaW8uYyBiL2RyaXZlcnMvcmFwaWRpby9yaW8uYwppbmRleCA3YjUwODBjLi5jYzJhM2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JhcGlkaW8vcmlvLmMKKysrIGIvZHJpdmVycy9yYXBpZGlvL3Jpby5jCkBAIC00NzEsMTYgKzQ3MSw5IEBACiAgKi8KIGludCByaW9fc2V0X3BvcnRfbG9ja291dChzdHJ1Y3QgcmlvX2RldiAqcmRldiwgdTMyIHBudW0sIGludCBsb2NrKQogewotCXU4IGhvcGNvdW50ID0gMHhmZjsKLQl1MTYgZGVzdGlkID0gcmRldi0+ZGVzdGlkOwogCXUzMiByZWd2YWw7CiAKLQlpZiAocmRldi0+cnN3aXRjaCkgewotCQlkZXN0aWQgPSByZGV2LT5yc3dpdGNoLT5kZXN0aWQ7Ci0JCWhvcGNvdW50ID0gcmRldi0+cnN3aXRjaC0+aG9wY291bnQ7Ci0JfQotCi0JcmlvX21wb3J0X3JlYWRfY29uZmlnXzMyKHJkZXYtPm5ldC0+aHBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJcmlvX3JlYWRfY29uZmlnXzMyKHJkZXYsCiAJCQkJIHJkZXYtPnBoeXNfZWZwdHIgKyBSSU9fUE9SVF9OX0NUTF9DU1IocG51bSksCiAJCQkJICZyZWd2YWwpOwogCWlmIChsb2NrKQpAQCAtNDg4LDcgKzQ4MSw3IEBACiAJZWxzZQogCQlyZWd2YWwgJj0gflJJT19QT1JUX05fQ1RMX0xPQ0tPVVQ7CiAKLQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKHJkZXYtPm5ldC0+aHBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAogCQkJCSAgcmRldi0+cGh5c19lZnB0ciArIFJJT19QT1JUX05fQ1RMX0NTUihwbnVtKSwKIAkJCQkgIHJlZ3ZhbCk7CiAJcmV0dXJuIDA7CkBAIC01MDcsNyArNTAwLDcgQEAKIHJpb19jaGtfZGV2X3JvdXRlKHN0cnVjdCByaW9fZGV2ICpyZGV2LCBzdHJ1Y3QgcmlvX2RldiAqKm5yZGV2LCBpbnQgKm5wbnVtKQogewogCXUzMiByZXN1bHQ7Ci0JaW50IHBfcG9ydCwgZHN0aWQsIHJjID0gLUVJTzsKKwlpbnQgcF9wb3J0LCByYyA9IC1FSU87CiAJc3RydWN0IHJpb19kZXYgKnByZXYgPSBOVUxMOwogCiAJLyogRmluZCBzd2l0Y2ggd2l0aCBmYWlsZWQgUklPIGxpbmsgKi8KQEAgLTUyMiw5ICs1MTUsNyBAQAogCWlmIChwcmV2ID09IE5VTEwpCiAJCWdvdG8gZXJyX291dDsKIAotCWRzdGlkID0gKHJkZXYtPnBlZiAmIFJJT19QRUZfU1dJVENIKSA/Ci0JCQlyZGV2LT5yc3dpdGNoLT5kZXN0aWQgOiByZGV2LT5kZXN0aWQ7Ci0JcF9wb3J0ID0gcHJldi0+cnN3aXRjaC0+cm91dGVfdGFibGVbZHN0aWRdOworCXBfcG9ydCA9IHByZXYtPnJzd2l0Y2gtPnJvdXRlX3RhYmxlW3JkZXYtPmRlc3RpZF07CiAKIAlpZiAocF9wb3J0ICE9IFJJT19JTlZBTElEX1JPVVRFKSB7CiAJCXByX2RlYnVnKCJSSU86IGxpbmsgZmFpbGVkIG9uIFslc10tUCVkXG4iLApAQCAtNTY3LDE1ICs1NTgsOCBAQAogICovCiBzdGF0aWMgaW50IHJpb19jaGtfZGV2X2FjY2VzcyhzdHJ1Y3QgcmlvX2RldiAqcmRldikKIHsKLQl1OCBob3Bjb3VudCA9IDB4ZmY7Ci0JdTE2IGRlc3RpZCA9IHJkZXYtPmRlc3RpZDsKLQotCWlmIChyZGV2LT5yc3dpdGNoKSB7Ci0JCWRlc3RpZCA9IHJkZXYtPnJzd2l0Y2gtPmRlc3RpZDsKLQkJaG9wY291bnQgPSByZGV2LT5yc3dpdGNoLT5ob3Bjb3VudDsKLQl9Ci0KLQlyZXR1cm4gcmlvX21wb3J0X2Noa19kZXZfYWNjZXNzKHJkZXYtPm5ldC0+aHBvcnQsIGRlc3RpZCwgaG9wY291bnQpOworCXJldHVybiByaW9fbXBvcnRfY2hrX2Rldl9hY2Nlc3MocmRldi0+bmV0LT5ocG9ydCwKKwkJCQkJcmRldi0+ZGVzdGlkLCByZGV2LT5ob3Bjb3VudCk7CiB9CiAKIC8qKgpAQCAtNTg4LDIzICs1NzIsMjAgQEAKIHN0YXRpYyBpbnQKIHJpb19nZXRfaW5wdXRfc3RhdHVzKHN0cnVjdCByaW9fZGV2ICpyZGV2LCBpbnQgcG51bSwgdTMyICpsbmtyZXNwKQogewotCXN0cnVjdCByaW9fbXBvcnQgKm1wb3J0ID0gcmRldi0+bmV0LT5ocG9ydDsKLQl1MTYgZGVzdGlkID0gcmRldi0+cnN3aXRjaC0+ZGVzdGlkOwotCXU4IGhvcGNvdW50ID0gcmRldi0+cnN3aXRjaC0+aG9wY291bnQ7CiAJdTMyIHJlZ3ZhbDsKIAlpbnQgY2hlY2tjb3VudDsKIAogCWlmIChsbmtyZXNwKSB7CiAJCS8qIFJlYWQgZnJvbSBsaW5rIG1haW50ZW5hbmNlIHJlc3BvbnNlIHJlZ2lzdGVyCiAJCSAqIHRvIGNsZWFyIHZhbGlkIGJpdCAqLwotCQlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJCXJpb19yZWFkX2NvbmZpZ18zMihyZGV2LAogCQkJcmRldi0+cGh5c19lZnB0ciArIFJJT19QT1JUX05fTU5UX1JTUF9DU1IocG51bSksCiAJCQkmcmVndmFsKTsKIAkJdWRlbGF5KDUwKTsKIAl9CiAKIAkvKiBJc3N1ZSBJbnB1dC1zdGF0dXMgY29tbWFuZCAqLwotCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAogCQlyZGV2LT5waHlzX2VmcHRyICsgUklPX1BPUlRfTl9NTlRfUkVRX0NTUihwbnVtKSwKIAkJUklPX01OVF9SRVFfQ01EX0lTKTsKIApAQCAtNjE1LDcgKzU5Niw3IEBACiAJY2hlY2tjb3VudCA9IDM7CiAJd2hpbGUgKGNoZWNrY291bnQtLSkgewogCQl1ZGVsYXkoNTApOwotCQlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJCXJpb19yZWFkX2NvbmZpZ18zMihyZGV2LAogCQkJcmRldi0+cGh5c19lZnB0ciArIFJJT19QT1JUX05fTU5UX1JTUF9DU1IocG51bSksCiAJCQkmcmVndmFsKTsKIAkJaWYgKHJlZ3ZhbCAmIFJJT19QT1JUX05fTU5UX1JTUF9SVkFMKSB7CkBAIC02MzUsMTUgKzYxNiwxMiBAQAogICovCiBzdGF0aWMgaW50IHJpb19jbHJfZXJyX3N0b3BwZWQoc3RydWN0IHJpb19kZXYgKnJkZXYsIHUzMiBwbnVtLCB1MzIgZXJyX3N0YXR1cykKIHsKLQlzdHJ1Y3QgcmlvX21wb3J0ICptcG9ydCA9IHJkZXYtPm5ldC0+aHBvcnQ7Ci0JdTE2IGRlc3RpZCA9IHJkZXYtPnJzd2l0Y2gtPmRlc3RpZDsKLQl1OCBob3Bjb3VudCA9IHJkZXYtPnJzd2l0Y2gtPmhvcGNvdW50OwogCXN0cnVjdCByaW9fZGV2ICpuZXh0ZGV2ID0gcmRldi0+cnN3aXRjaC0+bmV4dGRldltwbnVtXTsKIAl1MzIgcmVndmFsOwogCXUzMiBmYXJfYWNraWQsIGZhcl9saW5rc3RhdCwgbmVhcl9hY2tpZDsKIAogCWlmIChlcnJfc3RhdHVzID09IDApCi0JCXJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwkJcmlvX3JlYWRfY29uZmlnXzMyKHJkZXYsCiAJCQlyZGV2LT5waHlzX2VmcHRyICsgUklPX1BPUlRfTl9FUlJfU1RTX0NTUihwbnVtKSwKIAkJCSZlcnJfc3RhdHVzKTsKIApAQCAtNjYxLDcgKzYzOSw3IEBACiAJCQkgcG51bSwgcmVndmFsKTsKIAkJZmFyX2Fja2lkID0gKHJlZ3ZhbCAmIFJJT19QT1JUX05fTU5UX1JTUF9BU1RBVCkgPj4gNTsKIAkJZmFyX2xpbmtzdGF0ID0gcmVndmFsICYgUklPX1BPUlRfTl9NTlRfUlNQX0xTVEFUOwotCQlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJCXJpb19yZWFkX2NvbmZpZ18zMihyZGV2LAogCQkJcmRldi0+cGh5c19lZnB0ciArIFJJT19QT1JUX05fQUNLX1NUU19DU1IocG51bSksCiAJCQkmcmVndmFsKTsKIAkJcHJfZGVidWcoIlJJT19FTTogU1AlZF9BQ0tfU1RTX0NTUj0weCUwOHhcbiIsIHBudW0sIHJlZ3ZhbCk7CkBAIC02NzksOSArNjU3LDggQEAKIAkJCS8qIEFsaWduIG5lYXIgb3V0c3RhbmRpbmcvb3V0Ym91bmQgYWNrSURzIHdpdGgKIAkJCSAqIGZhciBpbmJvdW5kLgogCQkJICovCi0JCQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsCi0JCQkJaG9wY291bnQsIHJkZXYtPnBoeXNfZWZwdHIgKwotCQkJCQlSSU9fUE9SVF9OX0FDS19TVFNfQ1NSKHBudW0pLAorCQkJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAorCQkJCXJkZXYtPnBoeXNfZWZwdHIgKyBSSU9fUE9SVF9OX0FDS19TVFNfQ1NSKHBudW0pLAogCQkJCShuZWFyX2Fja2lkIDw8IDI0KSB8CiAJCQkJCShmYXJfYWNraWQgPDwgOCkgfCBmYXJfYWNraWQpOwogCQkJLyogQWxpZ24gZmFyIG91dHN0YW5kaW5nL291dGJvdW5kIGFja0lEcyB3aXRoCkBAIC02OTgsNyArNjc1LDcgQEAKIAkJCQlwcl9kZWJ1ZygiUklPX0VNOiBJbnZhbGlkIG5leHRkZXYgcG9pbnRlciAoTlVMTClcbiIpOwogCQl9CiByZF9lcnI6Ci0JCXJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwkJcmlvX3JlYWRfY29uZmlnXzMyKHJkZXYsCiAJCQlyZGV2LT5waHlzX2VmcHRyICsgUklPX1BPUlRfTl9FUlJfU1RTX0NTUihwbnVtKSwKIAkJCSZlcnJfc3RhdHVzKTsKIAkJcHJfZGVidWcoIlJJT19FTTogU1AlZF9FUlJfU1RTX0NTUj0weCUwOHhcbiIsIHBudW0sIGVycl9zdGF0dXMpOwpAQCAtNzEwLDcgKzY4Nyw3IEBACiAJCQkJICAgICBSSU9fR0VUX1BPUlRfTlVNKG5leHRkZXYtPnN3cGluZm8pLCBOVUxMKTsKIAkJdWRlbGF5KDUwKTsKIAotCQlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJCXJpb19yZWFkX2NvbmZpZ18zMihyZGV2LAogCQkJcmRldi0+cGh5c19lZnB0ciArIFJJT19QT1JUX05fRVJSX1NUU19DU1IocG51bSksCiAJCQkmZXJyX3N0YXR1cyk7CiAJCXByX2RlYnVnKCJSSU9fRU06IFNQJWRfRVJSX1NUU19DU1I9MHglMDh4XG4iLCBwbnVtLCBlcnJfc3RhdHVzKTsKQEAgLTczMCwxMyArNzA3LDEwIEBACiBpbnQgcmlvX2luYl9wd3JpdGVfaGFuZGxlcih1bmlvbiByaW9fcHdfbXNnICpwd19tc2cpCiB7CiAJc3RydWN0IHJpb19kZXYgKnJkZXY7Ci0Jc3RydWN0IHJpb19tcG9ydCAqbXBvcnQ7Ci0JdTggaG9wY291bnQ7Ci0JdTE2IGRlc3RpZDsKIAl1MzIgZXJyX3N0YXR1cywgZW1fcGVycmRldCwgZW1fbHRsZXJyZGV0OwogCWludCByYywgcG9ydG51bTsKIAotCXJkZXYgPSByaW9fZ2V0X2NvbXB0YWcocHdfbXNnLT5lbS5jb21wdGFnLCBOVUxMKTsKKwlyZGV2ID0gcmlvX2dldF9jb21wdGFnKChwd19tc2ctPmVtLmNvbXB0YWcgJiBSSU9fQ1RBR19VREVWSUQpLCBOVUxMKTsKIAlpZiAocmRldiA9PSBOVUxMKSB7CiAJCS8qIERldmljZSByZW1vdmVkIG9yIGVudW1lcmF0aW9uIGVycm9yICovCiAJCXByX2RlYnVnKCJSSU86ICVzIE5vIG1hdGNoaW5nIGRldmljZSBmb3IgQ1RhZyAweCUwOHhcbiIsCkBAIC04MDAsMTcgKzc3NCwxMyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQltcG9ydCA9IHJkZXYtPm5ldC0+aHBvcnQ7Ci0JZGVzdGlkID0gcmRldi0+cnN3aXRjaC0+ZGVzdGlkOwotCWhvcGNvdW50ID0gcmRldi0+cnN3aXRjaC0+aG9wY291bnQ7Ci0KIAkvKgogCSAqIFByb2Nlc3MgdGhlIHBvcnQtd3JpdGUgbm90aWZpY2F0aW9uIGZyb20gc3dpdGNoCiAJICovCiAJaWYgKHJkZXYtPnJzd2l0Y2gtPmVtX2hhbmRsZSkKIAkJcmRldi0+cnN3aXRjaC0+ZW1faGFuZGxlKHJkZXYsIHBvcnRudW0pOwogCi0JcmlvX21wb3J0X3JlYWRfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAorCXJpb19yZWFkX2NvbmZpZ18zMihyZGV2LAogCQkJcmRldi0+cGh5c19lZnB0ciArIFJJT19QT1JUX05fRVJSX1NUU19DU1IocG9ydG51bSksCiAJCQkmZXJyX3N0YXR1cyk7CiAJcHJfZGVidWcoIlJJT19QVzogU1AlZF9FUlJfU1RTX0NTUj0weCUwOHhcbiIsIHBvcnRudW0sIGVycl9zdGF0dXMpOwpAQCAtODQwLDcgKzgxMCw3IEBACiAJCQlyZGV2LT5yc3dpdGNoLT5wb3J0X29rICY9IH4oMSA8PCBwb3J0bnVtKTsKIAkJCXJpb19zZXRfcG9ydF9sb2Nrb3V0KHJkZXYsIHBvcnRudW0sIDEpOwogCi0JCQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAorCQkJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAogCQkJCXJkZXYtPnBoeXNfZWZwdHIgKwogCQkJCQlSSU9fUE9SVF9OX0FDS19TVFNfQ1NSKHBvcnRudW0pLAogCQkJCVJJT19QT1JUX05fQUNLX0NMRUFSKTsKQEAgLTg1MSwyOCArODIxLDI4IEBACiAJCX0KIAl9CiAKLQlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJcmlvX3JlYWRfY29uZmlnXzMyKHJkZXYsCiAJCXJkZXYtPmVtX2VmcHRyICsgUklPX0VNX1BOX0VSUl9ERVRFQ1QocG9ydG51bSksICZlbV9wZXJyZGV0KTsKIAlpZiAoZW1fcGVycmRldCkgewogCQlwcl9kZWJ1ZygiUklPX1BXOiBSSU9fRU1fUCVkX0VSUl9ERVRFQ1Q9MHglMDh4XG4iLAogCQkJIHBvcnRudW0sIGVtX3BlcnJkZXQpOwogCQkvKiBDbGVhciBFTSBQb3J0IE4gRXJyb3IgRGV0ZWN0IENTUiAqLwotCQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAorCQlyaW9fd3JpdGVfY29uZmlnXzMyKHJkZXYsCiAJCQlyZGV2LT5lbV9lZnB0ciArIFJJT19FTV9QTl9FUlJfREVURUNUKHBvcnRudW0pLCAwKTsKIAl9CiAKLQlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJcmlvX3JlYWRfY29uZmlnXzMyKHJkZXYsCiAJCXJkZXYtPmVtX2VmcHRyICsgUklPX0VNX0xUTF9FUlJfREVURUNULCAmZW1fbHRsZXJyZGV0KTsKIAlpZiAoZW1fbHRsZXJyZGV0KSB7CiAJCXByX2RlYnVnKCJSSU9fUFc6IFJJT19FTV9MVExfRVJSX0RFVEVDVD0weCUwOHhcbiIsCiAJCQkgZW1fbHRsZXJyZGV0KTsKIAkJLyogQ2xlYXIgRU0gTC9UIExheWVyIEVycm9yIERldGVjdCBDU1IgKi8KLQkJcmlvX21wb3J0X3dyaXRlX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwkJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAogCQkJcmRldi0+ZW1fZWZwdHIgKyBSSU9fRU1fTFRMX0VSUl9ERVRFQ1QsIDApOwogCX0KIAogCS8qIENsZWFyIHJlbWFpbmluZyBlcnJvciBiaXRzIGFuZCBQb3J0LVdyaXRlIFBlbmRpbmcgYml0ICovCi0JcmlvX21wb3J0X3dyaXRlX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwlyaW9fd3JpdGVfY29uZmlnXzMyKHJkZXYsCiAJCQlyZGV2LT5waHlzX2VmcHRyICsgUklPX1BPUlRfTl9FUlJfU1RTX0NTUihwb3J0bnVtKSwKIAkJCWVycl9zdGF0dXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvaWR0X2dlbjIuYyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRfZ2VuMi5jCmluZGV4IDBiYjg3MWMuLjA5NTAxNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRfZ2VuMi5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRfZ2VuMi5jCkBAIC0yMDksOSArMjA5LDYgQEAKIHN0YXRpYyBpbnQKIGlkdGcyX2VtX2luaXQoc3RydWN0IHJpb19kZXYgKnJkZXYpCiB7Ci0Jc3RydWN0IHJpb19tcG9ydCAqbXBvcnQgPSByZGV2LT5uZXQtPmhwb3J0OwotCXUxNiBkZXN0aWQgPSByZGV2LT5yc3dpdGNoLT5kZXN0aWQ7Ci0JdTggaG9wY291bnQgPSByZGV2LT5yc3dpdGNoLT5ob3Bjb3VudDsKIAl1MzIgcmVndmFsOwogCWludCBpLCB0bXA7CiAKQEAgLTIyMCwyOSArMjE3LDI1IEBACiAJICogQWxsIHN0YW5kYXJkIEVNIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHBlcmZvcm1lZCBhdCB1cHBlciBsZXZlbC4KIAkgKi8KIAotCXByX2RlYnVnKCJSSU86ICVzIFslZDolZF1cbiIsIF9fZnVuY19fLCBkZXN0aWQsIGhvcGNvdW50KTsKKwlwcl9kZWJ1ZygiUklPOiAlcyBbJWQ6JWRdXG4iLCBfX2Z1bmNfXywgcmRldi0+ZGVzdGlkLCByZGV2LT5ob3Bjb3VudCk7CiAKIAkvKiBTZXQgUG9ydC1Xcml0ZSBpbmZvIENTUjogUFJJTz0zIGFuZCBDUkY9MSAqLwotCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCi0JCQlJRFRfUFdfSU5GT19DU1IsIDB4MDAwMGUwMDApOworCXJpb193cml0ZV9jb25maWdfMzIocmRldiwgSURUX1BXX0lORk9fQ1NSLCAweDAwMDBlMDAwKTsKIAogCS8qCiAJICogQ29uZmlndXJlIExUIExBWUVSIGVycm9yIHJlcG9ydGluZy4KIAkgKi8KIAogCS8qIEVuYWJsZSBzdGFuZGFyZCAoUklPLnA4KSBlcnJvciByZXBvcnRpbmcgKi8KLQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAotCQkJSURUX0xUX0VSUl9SRVBPUlRfRU4sCisJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LCBJRFRfTFRfRVJSX1JFUE9SVF9FTiwKIAkJCVJFTV9MVExfRVJSX0lMTFRSQU4gfCBSRU1fTFRMX0VSUl9VTlNPTFIgfAogCQkJUkVNX0xUTF9FUlJfVU5TVVBUUik7CiAKIAkvKiBVc2UgUG9ydC1Xcml0ZXMgZm9yIExUIGxheWVyIGVycm9yIHJlcG9ydGluZy4KIAkgKiBFbmFibGUgcGVyLXBvcnQgcmVzZXQKIAkgKi8KLQlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCi0JCQlJRFRfREVWX0NUUkxfMSwgJnJlZ3ZhbCk7Ci0JcmlvX21wb3J0X3dyaXRlX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKLQkJCUlEVF9ERVZfQ1RSTF8xLAorCXJpb19yZWFkX2NvbmZpZ18zMihyZGV2LCBJRFRfREVWX0NUUkxfMSwgJnJlZ3ZhbCk7CisJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LCBJRFRfREVWX0NUUkxfMSwKIAkJCXJlZ3ZhbCB8IElEVF9ERVZfQ1RSTF8xX0dFTlBXIHwgSURUX0RFVl9DVFJMXzFfUFJTVEJFSCk7CiAKIAkvKgpAQCAtMjUwLDQ1ICsyNDMsNDAgQEAKIAkgKi8KIAogCS8qIFJlcG9ydCBhbGwgUklPLnA4IGVycm9ycyBzdXBwb3J0ZWQgYnkgZGV2aWNlICovCi0JcmlvX21wb3J0X3dyaXRlX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKLQkJCUlEVF9QT1JUX0VSUl9SRVBPUlRfRU5fQkMsIDB4ODA3ZTgwMzcpOworCXJpb193cml0ZV9jb25maWdfMzIocmRldiwgSURUX1BPUlRfRVJSX1JFUE9SVF9FTl9CQywgMHg4MDdlODAzNyk7CiAKIAkvKiBDb25maWd1cmUgcmVwb3J0aW5nIG9mIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGVycm9ycy9ldmVudHMgKi8KLQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAotCQkJSURUX1BPUlRfSVNFUlJfUkVQT1JUX0VOX0JDLCBJRFRfUE9SVF9JTklUX1RYX0FDUVVJUkVEKTsKKwlyaW9fd3JpdGVfY29uZmlnXzMyKHJkZXYsIElEVF9QT1JUX0lTRVJSX1JFUE9SVF9FTl9CQywKKwkJCSAgICBJRFRfUE9SVF9JTklUX1RYX0FDUVVJUkVEKTsKIAogCS8qIFVzZSBQb3J0LVdyaXRlcyBmb3IgcG9ydCBlcnJvciByZXBvcnRpbmcgYW5kIGVuYWJsZSBlcnJvciBsb2dnaW5nICovCiAJdG1wID0gUklPX0dFVF9UT1RBTF9QT1JUUyhyZGV2LT5zd3BpbmZvKTsKIAlmb3IgKGkgPSAwOyBpIDwgdG1wOyBpKyspIHsKLQkJcmlvX21wb3J0X3JlYWRfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAotCQkJCUlEVF9QT1JUX09QUyhpKSwgJnJlZ3ZhbCk7Ci0JCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJCXJpb19yZWFkX2NvbmZpZ18zMihyZGV2LCBJRFRfUE9SVF9PUFMoaSksICZyZWd2YWwpOworCQlyaW9fd3JpdGVfY29uZmlnXzMyKHJkZXYsCiAJCQkJSURUX1BPUlRfT1BTKGkpLCByZWd2YWwgfCBJRFRfUE9SVF9PUFNfR0VOUFcgfAogCQkJCUlEVF9QT1JUX09QU19QTF9FTE9HIHwKIAkJCQlJRFRfUE9SVF9PUFNfTExfRUxPRyB8CiAJCQkJSURUX1BPUlRfT1BTX0xUX0VMT0cpOwogCX0KIAkvKiBPdmVyd3JpdGUgZXJyb3IgbG9nIGlmIGZ1bGwgKi8KLQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAotCQkJSURUX0VSUl9DQVAsIElEVF9FUlJfQ0FQX0xPR19PVkVSV1IpOworCXJpb193cml0ZV9jb25maWdfMzIocmRldiwgSURUX0VSUl9DQVAsIElEVF9FUlJfQ0FQX0xPR19PVkVSV1IpOwogCiAJLyoKIAkgKiBDb25maWd1cmUgTEFORSBlcnJvciByZXBvcnRpbmcuCiAJICovCiAKIAkvKiBEaXNhYmxlIGxpbmUgZXJyb3IgcmVwb3J0aW5nICovCi0JcmlvX21wb3J0X3dyaXRlX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKLQkJCUlEVF9MQU5FX0VSUl9SRVBPUlRfRU5fQkMsIDApOworCXJpb193cml0ZV9jb25maWdfMzIocmRldiwgSURUX0xBTkVfRVJSX1JFUE9SVF9FTl9CQywgMCk7CiAKIAkvKiBVc2UgUG9ydC1Xcml0ZXMgZm9yIGxhbmUgZXJyb3IgcmVwb3J0aW5nICh3aGVuIGVuYWJsZWQpCiAJICogKGRvIHBlci1sYW5lIHVwZGF0ZSBiZWNhdXNlIGxhbmVzIG1heSBoYXZlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uKQogCSAqLwogCXRtcCA9IChyZGV2LT5kaWQgPT0gUklPX0RJRF9JRFRDUFMxODQ4KSA/IDQ4IDogMTY7CiAJZm9yIChpID0gMDsgaSA8IHRtcDsgaSsrKSB7Ci0JCXJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKLQkJCQlJRFRfTEFORV9DVFJMKGkpLCAmcmVndmFsKTsKLQkJcmlvX21wb3J0X3dyaXRlX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKLQkJCQlJRFRfTEFORV9DVFJMKGkpLCByZWd2YWwgfCBJRFRfTEFORV9DVFJMX0dFTlBXKTsKKwkJcmlvX3JlYWRfY29uZmlnXzMyKHJkZXYsIElEVF9MQU5FX0NUUkwoaSksICZyZWd2YWwpOworCQlyaW9fd3JpdGVfY29uZmlnXzMyKHJkZXYsIElEVF9MQU5FX0NUUkwoaSksCisJCQkJICAgIHJlZ3ZhbCB8IElEVF9MQU5FX0NUUkxfR0VOUFcpOwogCX0KIAogCS8qCkBAIC0yOTYsNDEgKzI4NCwzMiBAQAogCSAqLwogCiAJLyogRGlzYWJsZSBKVEFHIGFuZCBJMkMgRXJyb3IgY2FwdHVyZSAqLwotCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCi0JCQlJRFRfQVVYX1BPUlRfRVJSX0NBUF9FTiwgMCk7CisJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LCBJRFRfQVVYX1BPUlRfRVJSX0NBUF9FTiwgMCk7CiAKIAkvKiBEaXNhYmxlIEpUQUcgYW5kIEkyQyBFcnJvciByZXBvcnRpbmcvbG9nZ2luZyAqLwotCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCi0JCQlJRFRfQVVYX0VSUl9SRVBPUlRfRU4sIDApOworCXJpb193cml0ZV9jb25maWdfMzIocmRldiwgSURUX0FVWF9FUlJfUkVQT1JUX0VOLCAwKTsKIAogCS8qIERpc2FibGUgUG9ydC1Xcml0ZSBub3RpZmljYXRpb24gZnJvbSBKVEFHICovCi0JcmlvX21wb3J0X3dyaXRlX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKLQkJCUlEVF9KVEFHX0NUUkwsIDApOworCXJpb193cml0ZV9jb25maWdfMzIocmRldiwgSURUX0pUQUdfQ1RSTCwgMCk7CiAKIAkvKiBEaXNhYmxlIFBvcnQtV3JpdGUgbm90aWZpY2F0aW9uIGZyb20gSTJDICovCi0JcmlvX21wb3J0X3JlYWRfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAotCQkJSURUX0kyQ19NQ1RSTCwgJnJlZ3ZhbCk7Ci0JcmlvX21wb3J0X3dyaXRlX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKLQkJCUlEVF9JMkNfTUNUUkwsCi0JCQlyZWd2YWwgJiB+SURUX0kyQ19NQ1RSTF9HRU5QVyk7CisJcmlvX3JlYWRfY29uZmlnXzMyKHJkZXYsIElEVF9JMkNfTUNUUkwsICZyZWd2YWwpOworCXJpb193cml0ZV9jb25maWdfMzIocmRldiwgSURUX0kyQ19NQ1RSTCwgcmVndmFsICYgfklEVF9JMkNfTUNUUkxfR0VOUFcpOwogCiAJLyoKIAkgKiBDb25maWd1cmUgQ0ZHX0JMSyBlcnJvciByZXBvcnRpbmcuCiAJICovCiAKIAkvKiBEaXNhYmxlIENvbmZpZ3VyYXRpb24gQmxvY2sgZXJyb3IgY2FwdHVyZSAqLwotCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCi0JCQlJRFRfQ0ZHQkxLX0VSUl9DQVBUVVJFX0VOLCAwKTsKKwlyaW9fd3JpdGVfY29uZmlnXzMyKHJkZXYsIElEVF9DRkdCTEtfRVJSX0NBUFRVUkVfRU4sIDApOwogCiAJLyogRGlzYWJsZSBQb3J0LVdyaXRlcyBmb3IgQ29uZmlndXJhdGlvbiBCbG9jayBlcnJvciByZXBvcnRpbmcgKi8KLQlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCi0JCQlJRFRfQ0ZHQkxLX0VSUl9SRVBPUlQsICZyZWd2YWwpOwotCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCi0JCQlJRFRfQ0ZHQkxLX0VSUl9SRVBPUlQsCi0JCQlyZWd2YWwgJiB+SURUX0NGR0JMS19FUlJfUkVQT1JUX0dFTlBXKTsKKwlyaW9fcmVhZF9jb25maWdfMzIocmRldiwgSURUX0NGR0JMS19FUlJfUkVQT1JULCAmcmVndmFsKTsKKwlyaW9fd3JpdGVfY29uZmlnXzMyKHJkZXYsIElEVF9DRkdCTEtfRVJSX1JFUE9SVCwKKwkJCSAgICByZWd2YWwgJiB+SURUX0NGR0JMS19FUlJfUkVQT1JUX0dFTlBXKTsKIAogCS8qIHNldCBUVkFMID0gfjUwdXMgKi8KLQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAorCXJpb193cml0ZV9jb25maWdfMzIocmRldiwKIAkJcmRldi0+cGh5c19lZnB0ciArIFJJT19QT1JUX0xJTktUT19DVExfQ1NSLCAweDhlIDw8IDgpOwogCiAJcmV0dXJuIDA7CkBAIC0zMzksMTggKzMxOCwxNSBAQAogc3RhdGljIGludAogaWR0ZzJfZW1faGFuZGxlcihzdHJ1Y3QgcmlvX2RldiAqcmRldiwgdTggcG9ydG51bSkKIHsKLQlzdHJ1Y3QgcmlvX21wb3J0ICptcG9ydCA9IHJkZXYtPm5ldC0+aHBvcnQ7Ci0JdTE2IGRlc3RpZCA9IHJkZXYtPnJzd2l0Y2gtPmRlc3RpZDsKLQl1OCBob3Bjb3VudCA9IHJkZXYtPnJzd2l0Y2gtPmhvcGNvdW50OwogCXUzMiByZWd2YWwsIGVtX3BlcnJkZXQsIGVtX2x0bGVycmRldDsKIAotCXJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwlyaW9fcmVhZF9jb25maWdfMzIocmRldiwKIAkJcmRldi0+ZW1fZWZwdHIgKyBSSU9fRU1fTFRMX0VSUl9ERVRFQ1QsICZlbV9sdGxlcnJkZXQpOwogCWlmIChlbV9sdGxlcnJkZXQpIHsKIAkJLyogU2VydmljZSBMb2dpY2FsL1RyYW5zcG9ydCBMYXllciBFcnJvcihzKSAqLwogCQlpZiAoZW1fbHRsZXJyZGV0ICYgUkVNX0xUTF9FUlJfSU1QU1BFQykgewogCQkJLyogSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZXJyb3IgcmVwb3J0ZWQgKi8KLQkJCXJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwkJCXJpb19yZWFkX2NvbmZpZ18zMihyZGV2LAogCQkJCQlJRFRfSVNMVExfQUREUkVTU19DQVAsICZyZWd2YWwpOwogCiAJCQlwcl9kZWJ1ZygiUklPOiAlcyBJbXBsZW1lbnRhdGlvbiBTcGVjaWZpYyBMVEwgZXJyb3JzIiBcCkBAIC0zNTgsMTMgKzMzNCwxMiBAQAogCQkJCSByaW9fbmFtZShyZGV2KSwgZW1fbHRsZXJyZGV0LCByZWd2YWwpOwogCiAJCQkvKiBDbGVhciBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBhZGRyZXNzIGNhcHR1cmUgQ1NSICovCi0JCQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAotCQkJCQlJRFRfSVNMVExfQUREUkVTU19DQVAsIDApOworCQkJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LCBJRFRfSVNMVExfQUREUkVTU19DQVAsIDApOwogCiAJCX0KIAl9CiAKLQlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJcmlvX3JlYWRfY29uZmlnXzMyKHJkZXYsCiAJCXJkZXYtPmVtX2VmcHRyICsgUklPX0VNX1BOX0VSUl9ERVRFQ1QocG9ydG51bSksICZlbV9wZXJyZGV0KTsKIAlpZiAoZW1fcGVycmRldCkgewogCQkvKiBTZXJ2aWNlIFBvcnQtTGV2ZWwgRXJyb3IocykgKi8KQEAgLTM3MiwxNCArMzQ3LDE0IEBACiAJCQkvKiBJbXBsZW1lbnRhdGlvbiBTcGVjaWZpYyBwb3J0IGVycm9yIHJlcG9ydGVkICovCiAKIAkJCS8qIEdldCBJUyBlcnJvcnMgcmVwb3J0ZWQgKi8KLQkJCXJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwkJCXJpb19yZWFkX2NvbmZpZ18zMihyZGV2LAogCQkJCQlJRFRfUE9SVF9JU0VSUl9ERVQocG9ydG51bSksICZyZWd2YWwpOwogCiAJCQlwcl9kZWJ1ZygiUklPOiAlcyBJbXBsZW1lbnRhdGlvbiBTcGVjaWZpYyBQb3J0IiBcCiAJCQkJICIgZXJyb3JzIDB4JXhcbiIsIHJpb19uYW1lKHJkZXYpLCByZWd2YWwpOwogCiAJCQkvKiBDbGVhciBhbGwgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZXZlbnRzICovCi0JCQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAorCQkJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAogCQkJCQlJRFRfUE9SVF9JU0VSUl9ERVQocG9ydG51bSksIDApOwogCQl9CiAJfQpAQCAtMzkxLDE0ICszNjYsMTAgQEAKIGlkdGcyX3Nob3dfZXJybG9nKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgcmlvX2RldiAqcmRldiA9IHRvX3Jpb19kZXYoZGV2KTsKLQlzdHJ1Y3QgcmlvX21wb3J0ICptcG9ydCA9IHJkZXYtPm5ldC0+aHBvcnQ7Ci0JdTE2IGRlc3RpZCA9IHJkZXYtPnJzd2l0Y2gtPmRlc3RpZDsKLQl1OCBob3Bjb3VudCA9IHJkZXYtPnJzd2l0Y2gtPmhvcGNvdW50OwogCXNzaXplX3QgbGVuID0gMDsKIAl1MzIgcmVndmFsOwogCi0Jd2hpbGUgKCFyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCi0JCQkJCSBJRFRfRVJSX1JELCAmcmVndmFsKSkgeworCXdoaWxlICghcmlvX3JlYWRfY29uZmlnXzMyKHJkZXYsIElEVF9FUlJfUkQsICZyZWd2YWwpKSB7CiAJCWlmICghcmVndmFsKSAgICAvKiAwID0gZW5kIG9mIGxvZyAqLwogCQkJYnJlYWs7CiAJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKQEAgLTQ0NSwzICs0MTYsNSBAQAogCiBERUNMQVJFX1JJT19TV0lUQ0hfSU5JVChSSU9fVklEX0lEVCwgUklPX0RJRF9JRFRDUFMxODQ4LCBpZHRnMl9zd2l0Y2hfaW5pdCk7CiBERUNMQVJFX1JJT19TV0lUQ0hfSU5JVChSSU9fVklEX0lEVCwgUklPX0RJRF9JRFRDUFMxNjE2LCBpZHRnMl9zd2l0Y2hfaW5pdCk7CitERUNMQVJFX1JJT19TV0lUQ0hfSU5JVChSSU9fVklEX0lEVCwgUklPX0RJRF9JRFRWUFMxNjE2LCBpZHRnMl9zd2l0Y2hfaW5pdCk7CitERUNMQVJFX1JJT19TV0lUQ0hfSU5JVChSSU9fVklEX0lEVCwgUklPX0RJRF9JRFRTUFMxNjE2LCBpZHRnMl9zd2l0Y2hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvaWR0Y3BzLmMgYi9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvaWR0Y3BzLmMKaW5kZXggZmM5ZjYzNy4uM2E5NzEwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL2lkdGNwcy5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRjcHMuYwpAQCAtMTE3LDEwICsxMTcsNiBAQAogCiBzdGF0aWMgaW50IGlkdGNwc19zd2l0Y2hfaW5pdChzdHJ1Y3QgcmlvX2RldiAqcmRldiwgaW50IGRvX2VudW0pCiB7Ci0Jc3RydWN0IHJpb19tcG9ydCAqbXBvcnQgPSByZGV2LT5uZXQtPmhwb3J0OwotCXUxNiBkZXN0aWQgPSByZGV2LT5yc3dpdGNoLT5kZXN0aWQ7Ci0JdTggaG9wY291bnQgPSByZGV2LT5yc3dpdGNoLT5ob3Bjb3VudDsKLQogCXByX2RlYnVnKCJSSU86ICVzIGZvciAlc1xuIiwgX19mdW5jX18sIHJpb19uYW1lKHJkZXYpKTsKIAlyZGV2LT5yc3dpdGNoLT5hZGRfZW50cnkgPSBpZHRjcHNfcm91dGVfYWRkX2VudHJ5OwogCXJkZXYtPnJzd2l0Y2gtPmdldF9lbnRyeSA9IGlkdGNwc19yb3V0ZV9nZXRfZW50cnk7CkBAIC0xMzIsNyArMTI4LDcgQEAKIAogCWlmIChkb19lbnVtKSB7CiAJCS8qIHNldCBUVkFMID0gfjUwdXMgKi8KLQkJcmlvX21wb3J0X3dyaXRlX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwkJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAogCQkJcmRldi0+cGh5c19lZnB0ciArIFJJT19QT1JUX0xJTktUT19DVExfQ1NSLCAweDhlIDw8IDgpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL3RzaTU2OC5jIGIvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL3RzaTU2OC5jCmluZGV4IGI5YTM4OWIuLjM5OTRjMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy90c2k1NjguYworKysgYi9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvdHNpNTY4LmMKQEAgLTExMywyMiArMTEzLDE3IEBACiBzdGF0aWMgaW50CiB0c2k1NjhfZW1faW5pdChzdHJ1Y3QgcmlvX2RldiAqcmRldikKIHsKLQlzdHJ1Y3QgcmlvX21wb3J0ICptcG9ydCA9IHJkZXYtPm5ldC0+aHBvcnQ7Ci0JdTE2IGRlc3RpZCA9IHJkZXYtPnJzd2l0Y2gtPmRlc3RpZDsKLQl1OCBob3Bjb3VudCA9IHJkZXYtPnJzd2l0Y2gtPmhvcGNvdW50OwogCXUzMiByZWd2YWw7CiAJaW50IHBvcnRudW07CiAKLQlwcl9kZWJ1ZygiVFNJNTY4ICVzIFslZDolZF1cbiIsIF9fZnVuY19fLCBkZXN0aWQsIGhvcGNvdW50KTsKKwlwcl9kZWJ1ZygiVFNJNTY4ICVzIFslZDolZF1cbiIsIF9fZnVuY19fLCByZGV2LT5kZXN0aWQsIHJkZXYtPmhvcGNvdW50KTsKIAogCS8qIE1ha2Ugc3VyZSB0aGF0IFBvcnQtV3JpdGVzIGFyZSBkaXNhYmxlZCAoZm9yIGFsbCBwb3J0cykgKi8KIAlmb3IgKHBvcnRudW0gPSAwOwogCSAgICAgcG9ydG51bSA8IFJJT19HRVRfVE9UQUxfUE9SVFMocmRldi0+c3dwaW5mbyk7IHBvcnRudW0rKykgewotCQlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCi0JCQkJVFNJNTY4X1NQX01PREUocG9ydG51bSksICZyZWd2YWwpOwotCQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAotCQkJCVRTSTU2OF9TUF9NT0RFKHBvcnRudW0pLAotCQkJCXJlZ3ZhbCB8IFRTSTU2OF9TUF9NT0RFX1BXX0RJUyk7CisJCXJpb19yZWFkX2NvbmZpZ18zMihyZGV2LCBUU0k1NjhfU1BfTU9ERShwb3J0bnVtKSwgJnJlZ3ZhbCk7CisJCXJpb193cml0ZV9jb25maWdfMzIocmRldiwgVFNJNTY4X1NQX01PREUocG9ydG51bSksCisJCQkJICAgIHJlZ3ZhbCB8IFRTSTU2OF9TUF9NT0RFX1BXX0RJUyk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvdHNpNTd4LmMgYi9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvdHNpNTd4LmMKaW5kZXggMjAwM2ZiNi4uMWE2MjkzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL3RzaTU3eC5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy90c2k1N3guYwpAQCAtMTU4LDQ4ICsxNTgsNDUgQEAKIHN0YXRpYyBpbnQKIHRzaTU3eF9lbV9pbml0KHN0cnVjdCByaW9fZGV2ICpyZGV2KQogewotCXN0cnVjdCByaW9fbXBvcnQgKm1wb3J0ID0gcmRldi0+bmV0LT5ocG9ydDsKLQl1MTYgZGVzdGlkID0gcmRldi0+cnN3aXRjaC0+ZGVzdGlkOwotCXU4IGhvcGNvdW50ID0gcmRldi0+cnN3aXRjaC0+aG9wY291bnQ7CiAJdTMyIHJlZ3ZhbDsKIAlpbnQgcG9ydG51bTsKIAotCXByX2RlYnVnKCJUU0k1NzggJXMgWyVkOiVkXVxuIiwgX19mdW5jX18sIGRlc3RpZCwgaG9wY291bnQpOworCXByX2RlYnVnKCJUU0k1NzggJXMgWyVkOiVkXVxuIiwgX19mdW5jX18sIHJkZXYtPmRlc3RpZCwgcmRldi0+aG9wY291bnQpOwogCiAJZm9yIChwb3J0bnVtID0gMDsKIAkgICAgIHBvcnRudW0gPCBSSU9fR0VUX1RPVEFMX1BPUlRTKHJkZXYtPnN3cGluZm8pOyBwb3J0bnVtKyspIHsKIAkJLyogTWFrZSBzdXJlIHRoYXQgUG9ydC1Xcml0ZXMgYXJlIGVuYWJsZWQgKGZvciBhbGwgcG9ydHMpICovCi0JCXJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwkJcmlvX3JlYWRfY29uZmlnXzMyKHJkZXYsCiAJCQkJVFNJNTc4X1NQX01PREUocG9ydG51bSksICZyZWd2YWwpOwotCQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAorCQlyaW9fd3JpdGVfY29uZmlnXzMyKHJkZXYsCiAJCQkJVFNJNTc4X1NQX01PREUocG9ydG51bSksCiAJCQkJcmVndmFsICYgflRTSTU3OF9TUF9NT0RFX1BXX0RJUyk7CiAKIAkJLyogQ2xlYXIgYWxsIHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCQlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJCXJpb19yZWFkX2NvbmZpZ18zMihyZGV2LAogCQkJCXJkZXYtPnBoeXNfZWZwdHIgKwogCQkJCQlSSU9fUE9SVF9OX0VSUl9TVFNfQ1NSKHBvcnRudW0pLAogCQkJCSZyZWd2YWwpOwotCQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAorCQlyaW9fd3JpdGVfY29uZmlnXzMyKHJkZXYsCiAJCQkJcmRldi0+cGh5c19lZnB0ciArCiAJCQkJCVJJT19QT1JUX05fRVJSX1NUU19DU1IocG9ydG51bSksCiAJCQkJcmVndmFsICYgMHgwNzEyMDIxNCk7CiAKLQkJcmlvX21wb3J0X3JlYWRfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAorCQlyaW9fcmVhZF9jb25maWdfMzIocmRldiwKIAkJCQlUU0k1NzhfU1BfSU5UX1NUQVRVUyhwb3J0bnVtKSwgJnJlZ3ZhbCk7Ci0JCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJCXJpb193cml0ZV9jb25maWdfMzIocmRldiwKIAkJCQlUU0k1NzhfU1BfSU5UX1NUQVRVUyhwb3J0bnVtKSwKIAkJCQlyZWd2YWwgJiAweDAwMDcwMGJkKTsKIAogCQkvKiBFbmFibGUgYWxsIGludGVycnVwdHMgdG8gYWxsb3cgcG9ydHMgdG8gc2VuZCBhIHBvcnQtd3JpdGUgKi8KLQkJcmlvX21wb3J0X3JlYWRfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAorCQlyaW9fcmVhZF9jb25maWdfMzIocmRldiwKIAkJCQlUU0k1NzhfU1BfQ1RMX0lOREVQKHBvcnRudW0pLCAmcmVndmFsKTsKLQkJcmlvX21wb3J0X3dyaXRlX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwkJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAogCQkJCVRTSTU3OF9TUF9DVExfSU5ERVAocG9ydG51bSksCiAJCQkJcmVndmFsIHwgMHgwMDBiMDAwMCk7CiAKIAkJLyogU2tpcCBuZXh0IChvZGQpIHBvcnQgaWYgdGhlIGN1cnJlbnQgcG9ydCBpcyBpbiB4NCBtb2RlICovCi0JCXJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwkJcmlvX3JlYWRfY29uZmlnXzMyKHJkZXYsCiAJCQkJcmRldi0+cGh5c19lZnB0ciArIFJJT19QT1JUX05fQ1RMX0NTUihwb3J0bnVtKSwKIAkJCQkmcmVndmFsKTsKIAkJaWYgKChyZWd2YWwgJiBSSU9fUE9SVF9OX0NUTF9QV0lEVEgpID09IFJJT19QT1JUX05fQ1RMX1BXSURUSF80KQpAQCAtMjA3LDcgKzIwNCw3IEBACiAJfQogCiAJLyogc2V0IFRWQUwgPSB+NTB1cyAqLwotCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAogCQlyZGV2LT5waHlzX2VmcHRyICsgUklPX1BPUlRfTElOS1RPX0NUTF9DU1IsIDB4OWEgPDwgOCk7CiAKIAlyZXR1cm4gMDsKQEAgLTIxNywxNCArMjE0LDEyIEBACiB0c2k1N3hfZW1faGFuZGxlcihzdHJ1Y3QgcmlvX2RldiAqcmRldiwgdTggcG9ydG51bSkKIHsKIAlzdHJ1Y3QgcmlvX21wb3J0ICptcG9ydCA9IHJkZXYtPm5ldC0+aHBvcnQ7Ci0JdTE2IGRlc3RpZCA9IHJkZXYtPnJzd2l0Y2gtPmRlc3RpZDsKLQl1OCBob3Bjb3VudCA9IHJkZXYtPnJzd2l0Y2gtPmhvcGNvdW50OwogCXUzMiBpbnRzdGF0LCBlcnJfc3RhdHVzOwogCWludCBzZW5kY291bnQsIGNoZWNrY291bnQ7CiAJdTggcm91dGVfcG9ydDsKIAl1MzIgcmVndmFsOwogCi0JcmlvX21wb3J0X3JlYWRfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAorCXJpb19yZWFkX2NvbmZpZ18zMihyZGV2LAogCQkJcmRldi0+cGh5c19lZnB0ciArIFJJT19QT1JUX05fRVJSX1NUU19DU1IocG9ydG51bSksCiAJCQkmZXJyX3N0YXR1cyk7CiAKQEAgLTIzMiwxNSArMjI3LDE1IEBACiAJICAgIChlcnJfc3RhdHVzICYgKFJJT19QT1JUX05fRVJSX1NUU19QV19PVVRfRVMgfAogCQkJICBSSU9fUE9SVF9OX0VSUl9TVFNfUFdfSU5QX0VTKSkpIHsKIAkJLyogUmVtb3ZlIGFueSBxdWV1ZWQgcGFja2V0cyBieSBsb2NraW5nL3VubG9ja2luZyBwb3J0ICovCi0JCXJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwkJcmlvX3JlYWRfY29uZmlnXzMyKHJkZXYsCiAJCQlyZGV2LT5waHlzX2VmcHRyICsgUklPX1BPUlRfTl9DVExfQ1NSKHBvcnRudW0pLAogCQkJJnJlZ3ZhbCk7CiAJCWlmICghKHJlZ3ZhbCAmIFJJT19QT1JUX05fQ1RMX0xPQ0tPVVQpKSB7Ci0JCQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAorCQkJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAogCQkJCXJkZXYtPnBoeXNfZWZwdHIgKyBSSU9fUE9SVF9OX0NUTF9DU1IocG9ydG51bSksCiAJCQkJcmVndmFsIHwgUklPX1BPUlRfTl9DVExfTE9DS09VVCk7CiAJCQl1ZGVsYXkoNTApOwotCQkJcmlvX21wb3J0X3dyaXRlX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwkJCXJpb193cml0ZV9jb25maWdfMzIocmRldiwKIAkJCQlyZGV2LT5waHlzX2VmcHRyICsgUklPX1BPUlRfTl9DVExfQ1NSKHBvcnRudW0pLAogCQkJCXJlZ3ZhbCk7CiAJCX0KQEAgLTI0OCw3ICsyNDMsNyBAQAogCQkvKiBSZWFkIGZyb20gbGluayBtYWludGVuYW5jZSByZXNwb25zZSByZWdpc3RlciB0byBjbGVhcgogCQkgKiB2YWxpZCBiaXQKIAkJICovCi0JCXJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwkJcmlvX3JlYWRfY29uZmlnXzMyKHJkZXYsCiAJCQlyZGV2LT5waHlzX2VmcHRyICsgUklPX1BPUlRfTl9NTlRfUlNQX0NTUihwb3J0bnVtKSwKIAkJCSZyZWd2YWwpOwogCkBAIC0yNTcsMTMgKzI1MiwxMiBAQAogCQkgKi8KIAkJc2VuZGNvdW50ID0gMzsKIAkJd2hpbGUgKHNlbmRjb3VudCkgewotCQkJcmlvX21wb3J0X3dyaXRlX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKKwkJCXJpb193cml0ZV9jb25maWdfMzIocmRldiwKIAkJCQkJICBUU0k1NzhfU1BfQ1NfVFgocG9ydG51bSksIDB4NDBmYzgwMDApOwogCQkJY2hlY2tjb3VudCA9IDM7CiAJCQl3aGlsZSAoY2hlY2tjb3VudC0tKSB7CiAJCQkJdWRlbGF5KDUwKTsKLQkJCQlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIoCi0JCQkJCW1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAorCQkJCXJpb19yZWFkX2NvbmZpZ18zMihyZGV2LAogCQkJCQlyZGV2LT5waHlzX2VmcHRyICsKIAkJCQkJCVJJT19QT1JUX05fTU5UX1JTUF9DU1IocG9ydG51bSksCiAJCQkJCSZyZWd2YWwpOwpAQCAtMjc3LDI1ICsyNzEsMjMgQEAKIAogZXhpdF9lczoKIAkvKiBDbGVhciBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBlcnJvciBzdGF0dXMgYml0cyAqLwotCXJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihtcG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKLQkJCQkgVFNJNTc4X1NQX0lOVF9TVEFUVVMocG9ydG51bSksICZpbnRzdGF0KTsKKwlyaW9fcmVhZF9jb25maWdfMzIocmRldiwgVFNJNTc4X1NQX0lOVF9TVEFUVVMocG9ydG51bSksICZpbnRzdGF0KTsKIAlwcl9kZWJ1ZygiVFNJNTc4WyV4OiV4XSBTUCVkX0lOVF9TVEFUVVM9MHglMDh4XG4iLAotCQkgZGVzdGlkLCBob3Bjb3VudCwgcG9ydG51bSwgaW50c3RhdCk7CisJCSByZGV2LT5kZXN0aWQsIHJkZXYtPmhvcGNvdW50LCBwb3J0bnVtLCBpbnRzdGF0KTsKIAogCWlmIChpbnRzdGF0ICYgMHgxMDAwMCkgewotCQlyaW9fbXBvcnRfcmVhZF9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJCXJpb19yZWFkX2NvbmZpZ18zMihyZGV2LAogCQkJCVRTSTU3OF9TUF9MVVRfUEVJTkYocG9ydG51bSksICZyZWd2YWwpOwogCQlyZWd2YWwgPSAobXBvcnQtPnN5c19zaXplKSA/IChyZWd2YWwgPj4gMTYpIDogKHJlZ3ZhbCA+PiAyNCk7CiAJCXJvdXRlX3BvcnQgPSByZGV2LT5yc3dpdGNoLT5yb3V0ZV90YWJsZVtyZWd2YWxdOwogCQlwcl9kZWJ1ZygiUklPOiBUU0k1NzhbJXNdIFAlZCBMVVQgUGFyaXR5IEVycm9yIChkZXN0SUQ9JWQpXG4iLAogCQkJcmlvX25hbWUocmRldiksIHBvcnRudW0sIHJlZ3ZhbCk7Ci0JCXRzaTU3eF9yb3V0ZV9hZGRfZW50cnkobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCisJCXRzaTU3eF9yb3V0ZV9hZGRfZW50cnkobXBvcnQsIHJkZXYtPmRlc3RpZCwgcmRldi0+aG9wY291bnQsCiAJCQkJUklPX0dMT0JBTF9UQUJMRSwgcmVndmFsLCByb3V0ZV9wb3J0KTsKIAl9CiAKLQlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAotCQkJCSAgVFNJNTc4X1NQX0lOVF9TVEFUVVMocG9ydG51bSksCi0JCQkJICBpbnRzdGF0ICYgMHgwMDA3MDBiZCk7CisJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LCBUU0k1NzhfU1BfSU5UX1NUQVRVUyhwb3J0bnVtKSwKKwkJCSAgICBpbnRzdGF0ICYgMHgwMDA3MDBiZCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yLzg4cG04NjA3LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci84OHBtODYwNy5jCmluZGV4IDJjZTJlYjcuLmRkNjMwODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yLzg4cG04NjA3LmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvODhwbTg2MDcuYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcG04NjA3X3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQkJICAgICAgaW50IG1pbl91ViwgaW50IG1heF91VikKKwkJCSAgICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYsIHVuc2lnbmVkICpzZWxlY3RvcikKIHsKIAlzdHJ1Y3QgcG04NjA3X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAl1aW50OF90IHZhbCwgbWFzazsKQEAgLTI2Myw2ICsyNjMsNyBAQAogCXJldCA9IGNob29zZV92b2x0YWdlKHJkZXYsIG1pbl91ViwgbWF4X3VWKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CisJKnNlbGVjdG9yID0gcmV0OwogCXZhbCA9ICh1aW50OF90KShyZXQgPDwgaW5mby0+dm9sX3NoaWZ0KTsKIAltYXNrID0gKCgxIDw8IGluZm8tPnZvbF9uYml0cykgLSAxKSAgPDwgaW5mby0+dm9sX3NoaWZ0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnIGIvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZwppbmRleCBkZDMwZTg4Li5lMWQ5NDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKQEAgLTE4NiwxMyArMTg2LDI1IEBACiAJIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSB2b2x0YWdlIHJlZ3VsYXRvcnMgb2YgdGhlCiAJIFBDQVAyIFBNSUMuCiAKK2NvbmZpZyBSRUdVTEFUT1JfTUMxM1hYWF9DT1JFCisJdHJpc3RhdGUKKwogY29uZmlnIFJFR1VMQVRPUl9NQzEzNzgzCiAJdHJpc3RhdGUgIlN1cHBvcnQgcmVndWxhdG9ycyBvbiBGcmVlc2NhbGUgTUMxMzc4MyBQTUlDIgogCWRlcGVuZHMgb24gTUZEX01DMTM3ODMKKwlzZWxlY3QgUkVHVUxBVE9SX01DMTNYWFhfQ09SRQogCWhlbHAKIAkgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgcmVndWxhdG9ycyBmb3VuZCBvbiB0aGUgRnJlZXNjYWxlIE1DMTM3ODMKIAkgIFBNSUMuCiAKK2NvbmZpZyBSRUdVTEFUT1JfTUMxMzg5MgorCXRyaXN0YXRlICJTdXBwb3J0IHJlZ3VsYXRvcnMgb24gRnJlZXNjYWxlIE1DMTM4OTIgUE1JQyIKKwlkZXBlbmRzIG9uIE1GRF9NQzEzWFhYCisJc2VsZWN0IFJFR1VMQVRPUl9NQzEzWFhYX0NPUkUKKwloZWxwCisJICBTYXkgeSBoZXJlIHRvIHN1cHBvcnQgdGhlIHJlZ3VsYXRvcnMgZm91bmQgb24gdGhlIEZyZWVzY2FsZSBNQzEzODkyCisJICBQTUlDLgorCiBjb25maWcgUkVHVUxBVE9SX0FCMzEwMAogCXRyaXN0YXRlICJTVC1Fcmljc3NvbiBBQjMxMDAgUmVndWxhdG9yIGZ1bmN0aW9ucyIKIAlkZXBlbmRzIG9uIEFCMzEwMF9DT1JFCkBAIC0yNTAsNSArMjYyLDE1IEBACiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgVFBTNjU4Nlggdm9sdGFnZSByZWd1bGF0b3IgY2hpcHMuCiAKK2NvbmZpZyBSRUdVTEFUT1JfVFBTNjUyNFgKKwl0cmlzdGF0ZSAiVEkgVFBTNjUyNFggUG93ZXIgcmVndWxhdG9ycyIKKwlkZXBlbmRzIG9uIFNQSQorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFRQUzY1MjRYIHZvbHRhZ2UgcmVndWxhdG9yIGNoaXBzLiBUUFM2NTI0WAorCSAgcHJvdmlkZXMgdGhyZWUgc3RlcC1kb3duIGNvbnZlcnRlcnMgYW5kIHR3byBnZW5lcmFsLXB1cnBvc2UgTERPCisJICB2b2x0YWdlIHJlZ3VsYXRvcnMuICBUaGlzIGRldmljZSBpcyBpbnRlcmZhY2VkIHVzaW5nIGEgY3VzdG9taXplZAorCSAgc2VyaWFsIGludGVyZmFjZSBjdXJyZW50bHkgc3VwcG9ydGVkIG9uIHRoZSBzZXF1ZW5jZXIgc2VyaWFsCisJICBwb3J0IGNvbnRyb2xsZXIuCisKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKaW5kZXggYmZmODE1Ny4uMGI1ZTg4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKQEAgLTMwLDEwICszMCwxMyBAQAogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9QQ0Y1MDYzMykgKz0gcGNmNTA2MzMtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfUENBUCkgKz0gcGNhcC1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9NQzEzNzgzKSArPSBtYzEzNzgzLXJlZ3VsYXRvci5vCitvYmotJChDT05GSUdfUkVHVUxBVE9SX01DMTM4OTIpICs9IG1jMTM4OTItcmVndWxhdG9yLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfTUMxM1hYWF9DT1JFKSArPSAgbWMxM3h4eC1yZWd1bGF0b3ItY29yZS5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX0FCMzEwMCkgKz0gYWIzMTAwLm8KIAogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMykgKz0gdHBzNjUwMjMtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfVFBTNjUwN1gpICs9IHRwczY1MDd4LXJlZ3VsYXRvci5vCitvYmotJChDT05GSUdfUkVHVUxBVE9SX1RQUzY1MjRYKSArPSB0cHM2NTI0eC1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl84OFBNODYwNykgKz0gODhwbTg2MDcubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9JU0w2MjcxQSkgKz0gaXNsNjI3MWEtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfQUI4NTAwKQkrPSBhYjg1MDAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvYWIzMTAwLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9hYjMxMDAuYwppbmRleCBiMzQ5MjY2Li5lZDZmZWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9hYjMxMDAuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9hYjMxMDAuYwpAQCAtMzYyLDcgKzM2Miw4IEBACiB9CiAKIHN0YXRpYyBpbnQgYWIzMTAwX3NldF92b2x0YWdlX3JlZ3VsYXRvcihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVnLAotCQkJCQlpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQorCQkJCQlpbnQgbWluX3VWLCBpbnQgbWF4X3VWLAorCQkJCQl1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IGFiMzEwMF9yZWd1bGF0b3IgKmFicmVnID0gcmVnLT5yZWdfZGF0YTsKIAl1OCByZWd2YWw7CkBAIC0zNzMsNiArMzc0LDggQEAKIAlpZiAoYmVzdGluZGV4IDwgMCkKIAkJcmV0dXJuIGJlc3RpbmRleDsKIAorCSpzZWxlY3RvciA9IGJlc3RpbmRleDsKKwogCWVyciA9IGFieDUwMF9nZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYnJlZy0+ZGV2LCAwLAogCQkJCQkJYWJyZWctPnJlZ3JlZywgJnJlZ3ZhbCk7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvYWI4NTAwLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9hYjg1MDAuYwppbmRleCBkYjZiNzBmLi5kOWEwNTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9hYjg1MDAuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9hYjg1MDAuYwpAQCAtMywxOCArMywxMyBAQAogICoKICAqIExpY2Vuc2UgVGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyCiAgKgotICogQXV0aG9yOiBTdW5kYXIgSXllciA8c3VuZGFyLml5ZXJAc3Rlcmljc3Nvbi5jb20+IGZvciBTVC1Fcmljc3NvbgorICogQXV0aG9yczogU3VuZGFyIEl5ZXIgPHN1bmRhci5peWVyQHN0ZXJpY3Nzb24uY29tPiBmb3IgU1QtRXJpY3Nzb24KKyAqICAgICAgICAgIEJlbmd0IEpvbnNzb24gPGJlbmd0Lmcuam9uc3NvbkBzdGVyaWNzc29uLmNvbT4gZm9yIFNULUVyaWNzc29uCiAgKgogICogQUI4NTAwIHBlcmlwaGVyYWwgcmVndWxhdG9ycwogICoKLSAqIEFCODUwMCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHJlZ3VsYXRvcnMsCi0gKiBMRE9zIC0gVkFVRElPLCBWQU5BTUlDMi8yLCBWRElHTUlDLCBWSU5UQ09SRTEyLCBWVFZPVVQsCi0gKiAgICAgICAgVkFVWDEvMi8zLCBWQU5BCi0gKgotICogZm9yIERCODUwMCBjdXQgMS4wIGFuZCBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUgc2lsaWNvbiwgYWxsIGFjY2Vzc2VzCi0gKiB0byByZWdpc3RlcnMgYXJlIHRocm91Z2ggdGhlIERCODUwMCBTUEkuIEluIGN1dCAxLjEgb253YXJkcywgdGhlc2UKLSAqIGFjY2Vzc2VzIGFyZSB0aHJvdWdoIHRoZSBEQjg1MDAgUFJDTVUgSTJDCi0gKgorICogQUI4NTAwIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcmVndWxhdG9yczoKKyAqICAgVkFVWDEvMi8zLCBWSU5UQ09SRSwgVlRWT1VULCBWQVVESU8sIFZBTUlDMS8yLCBWRE1JQywgVkFOQQogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjgsMzggKzIzLDM3IEBACiAKIC8qKgogICogc3RydWN0IGFiODUwMF9yZWd1bGF0b3JfaW5mbyAtIGFiODUwMCByZWd1bGF0b3IgaW5mb3JtYXRpb24KKyAqIEBkZXY6IGRldmljZSBwb2ludGVyCiAgKiBAZGVzYzogcmVndWxhdG9yIGRlc2NyaXB0aW9uCi0gKiBAYWI4NTAwOiBhYjg1MDAgcGFyZW50CiAgKiBAcmVndWxhdG9yX2RldjogcmVndWxhdG9yIGRldmljZQogICogQG1heF91VjogbWF4aW11bSB2b2x0YWdlIChmb3IgdmFyaWFibGUgdm9sdGFnZSBzdXBwbGllcykKICAqIEBtaW5fdVY6IG1pbmltdW0gdm9sdGFnZSAoZm9yIHZhcmlhYmxlIHZvbHRhZ2Ugc3VwcGxpZXMpCiAgKiBAZml4ZWRfdVY6IHR5cGljYWwgdm9sdGFnZSAoZm9yIGZpeGVkIHZvbHRhZ2Ugc3VwcGxpZXMpCiAgKiBAdXBkYXRlX2Jhbms6IGJhbmsgdG8gY29udHJvbCBvbi9vZmYKICAqIEB1cGRhdGVfcmVnOiByZWdpc3RlciB0byBjb250cm9sIG9uL29mZgotICogQG1hc2s6IG1hc2sgdG8gZW5hYmxlL2Rpc2FibGUgcmVndWxhdG9yCi0gKiBAZW5hYmxlOiBiaXRzIHRvIGVuYWJsZSB0aGUgcmVndWxhdG9yIGluIG5vcm1hbChoaWdoIHBvd2VyKSBtb2RlCisgKiBAdXBkYXRlX21hc2s6IG1hc2sgdG8gZW5hYmxlL2Rpc2FibGUgcmVndWxhdG9yCisgKiBAdXBkYXRlX3ZhbF9lbmFibGU6IGJpdHMgdG8gZW5hYmxlIHRoZSByZWd1bGF0b3IgaW4gbm9ybWFsIChoaWdoIHBvd2VyKSBtb2RlCiAgKiBAdm9sdGFnZV9iYW5rOiBiYW5rIHRvIGNvbnRyb2wgcmVndWxhdG9yIHZvbHRhZ2UKICAqIEB2b2x0YWdlX3JlZzogcmVnaXN0ZXIgdG8gY29udHJvbCByZWd1bGF0b3Igdm9sdGFnZQogICogQHZvbHRhZ2VfbWFzazogbWFzayB0byBjb250cm9sIHJlZ3VsYXRvciB2b2x0YWdlCi0gKiBAc3VwcG9ydGVkX3ZvbHRhZ2VzOiBzdXBwb3J0ZWQgdm9sdGFnZSB0YWJsZQorICogQHZvbHRhZ2VzOiBzdXBwb3J0ZWQgdm9sdGFnZSB0YWJsZQogICogQHZvbHRhZ2VzX2xlbjogbnVtYmVyIG9mIHN1cHBvcnRlZCB2b2x0YWdlcyBmb3IgdGhlIHJlZ3VsYXRvcgogICovCiBzdHJ1Y3QgYWI4NTAwX3JlZ3VsYXRvcl9pbmZvIHsKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCXN0cnVjdCByZWd1bGF0b3JfZGVzYwlkZXNjOwotCXN0cnVjdCBhYjg1MDAJCSphYjg1MDA7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYJKnJlZ3VsYXRvcjsKIAlpbnQgbWF4X3VWOwogCWludCBtaW5fdVY7CiAJaW50IGZpeGVkX3VWOwogCXU4IHVwZGF0ZV9iYW5rOwogCXU4IHVwZGF0ZV9yZWc7Ci0JdTggbWFzazsKLQl1OCBlbmFibGU7CisJdTggdXBkYXRlX21hc2s7CisJdTggdXBkYXRlX3ZhbF9lbmFibGU7CiAJdTggdm9sdGFnZV9iYW5rOwogCXU4IHZvbHRhZ2VfcmVnOwogCXU4IHZvbHRhZ2VfbWFzazsKLQlpbnQgY29uc3QgKnN1cHBvcnRlZF92b2x0YWdlczsKKwlpbnQgY29uc3QgKnZvbHRhZ2VzOwogCWludCB2b2x0YWdlc19sZW47CiB9OwogCkBAIC04Myw2ICs3NywxNyBAQAogCTMzMDAwMDAsCiB9OwogCitzdGF0aWMgY29uc3QgaW50IGxkb192YXV4M192b2x0YWdlc1tdID0geworCTEyMDAwMDAsCisJMTUwMDAwMCwKKwkxODAwMDAwLAorCTIxMDAwMDAsCisJMjUwMDAwMCwKKwkyNzUwMDAwLAorCTI3OTAwMDAsCisJMjkxMDAwMCwKK307CisKIHN0YXRpYyBjb25zdCBpbnQgbGRvX3ZpbnRjb3JlX3ZvbHRhZ2VzW10gPSB7CiAJMTIwMDAwMCwKIAkxMjI1MDAwLApAQCAtOTUsNTcgKzEwMCw4MCBAQAogCiBzdGF0aWMgaW50IGFiODUwMF9yZWd1bGF0b3JfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewotCWludCByZWd1bGF0b3JfaWQsIHJldDsKKwlpbnQgcmV0OwogCXN0cnVjdCBhYjg1MDBfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCi0JcmVndWxhdG9yX2lkID0gcmRldl9nZXRfaWQocmRldik7Ci0JaWYgKHJlZ3VsYXRvcl9pZCA+PSBBQjg1MDBfTlVNX1JFR1VMQVRPUlMpCisJaWYgKGluZm8gPT0gTlVMTCkgeworCQlkZXZfZXJyKHJkZXZfZ2V0X2RldihyZGV2KSwgInJlZ3VsYXRvciBpbmZvIG51bGwgcG9pbnRlclxuIik7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXJldCA9IGFieDUwMF9tYXNrX2FuZF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShpbmZvLT5kZXYsCi0JCWluZm8tPnVwZGF0ZV9iYW5rLCBpbmZvLT51cGRhdGVfcmVnLCBpbmZvLT5tYXNrLCBpbmZvLT5lbmFibGUpOworCQlpbmZvLT51cGRhdGVfYmFuaywgaW5mby0+dXBkYXRlX3JlZywKKwkJaW5mby0+dXBkYXRlX21hc2ssIGluZm8tPnVwZGF0ZV92YWxfZW5hYmxlKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycihyZGV2X2dldF9kZXYocmRldiksCiAJCQkiY291bGRuJ3Qgc2V0IGVuYWJsZSBiaXRzIGZvciByZWd1bGF0b3JcbiIpOworCisJZGV2X3ZkYmcocmRldl9nZXRfZGV2KHJkZXYpLAorCQkiJXMtZW5hYmxlIChiYW5rLCByZWcsIG1hc2ssIHZhbHVlKTogMHgleCwgMHgleCwgMHgleCwgMHgleFxuIiwKKwkJaW5mby0+ZGVzYy5uYW1lLCBpbmZvLT51cGRhdGVfYmFuaywgaW5mby0+dXBkYXRlX3JlZywKKwkJaW5mby0+dXBkYXRlX21hc2ssIGluZm8tPnVwZGF0ZV92YWxfZW5hYmxlKTsKKwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYWI4NTAwX3JlZ3VsYXRvcl9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewotCWludCByZWd1bGF0b3JfaWQsIHJldDsKKwlpbnQgcmV0OwogCXN0cnVjdCBhYjg1MDBfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCi0JcmVndWxhdG9yX2lkID0gcmRldl9nZXRfaWQocmRldik7Ci0JaWYgKHJlZ3VsYXRvcl9pZCA+PSBBQjg1MDBfTlVNX1JFR1VMQVRPUlMpCisJaWYgKGluZm8gPT0gTlVMTCkgeworCQlkZXZfZXJyKHJkZXZfZ2V0X2RldihyZGV2KSwgInJlZ3VsYXRvciBpbmZvIG51bGwgcG9pbnRlclxuIik7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXJldCA9IGFieDUwMF9tYXNrX2FuZF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShpbmZvLT5kZXYsCi0JCWluZm8tPnVwZGF0ZV9iYW5rLCBpbmZvLT51cGRhdGVfcmVnLCBpbmZvLT5tYXNrLCAweDApOworCQlpbmZvLT51cGRhdGVfYmFuaywgaW5mby0+dXBkYXRlX3JlZywKKwkJaW5mby0+dXBkYXRlX21hc2ssIDB4MCk7CiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIocmRldl9nZXRfZGV2KHJkZXYpLAogCQkJImNvdWxkbid0IHNldCBkaXNhYmxlIGJpdHMgZm9yIHJlZ3VsYXRvclxuIik7CisKKwlkZXZfdmRiZyhyZGV2X2dldF9kZXYocmRldiksCisJCSIlcy1kaXNhYmxlIChiYW5rLCByZWcsIG1hc2ssIHZhbHVlKTogMHgleCwgMHgleCwgMHgleCwgMHgleFxuIiwKKwkJaW5mby0+ZGVzYy5uYW1lLCBpbmZvLT51cGRhdGVfYmFuaywgaW5mby0+dXBkYXRlX3JlZywKKwkJaW5mby0+dXBkYXRlX21hc2ssIDB4MCk7CisKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGFiODUwMF9yZWd1bGF0b3JfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKLQlpbnQgcmVndWxhdG9yX2lkLCByZXQ7CisJaW50IHJldDsKIAlzdHJ1Y3QgYWI4NTAwX3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQl1OCB2YWx1ZTsKKwl1OCByZWd2YWw7CiAKLQlyZWd1bGF0b3JfaWQgPSByZGV2X2dldF9pZChyZGV2KTsKLQlpZiAocmVndWxhdG9yX2lkID49IEFCODUwMF9OVU1fUkVHVUxBVE9SUykKKwlpZiAoaW5mbyA9PSBOVUxMKSB7CisJCWRldl9lcnIocmRldl9nZXRfZGV2KHJkZXYpLCAicmVndWxhdG9yIGluZm8gbnVsbCBwb2ludGVyXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJcmV0ID0gYWJ4NTAwX2dldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGluZm8tPmRldiwKLQkJaW5mby0+dXBkYXRlX2JhbmssIGluZm8tPnVwZGF0ZV9yZWcsICZ2YWx1ZSk7CisJCWluZm8tPnVwZGF0ZV9iYW5rLCBpbmZvLT51cGRhdGVfcmVnLCAmcmVndmFsKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKHJkZXZfZ2V0X2RldihyZGV2KSwKIAkJCSJjb3VsZG4ndCByZWFkIDB4JXggcmVnaXN0ZXJcbiIsIGluZm8tPnVwZGF0ZV9yZWcpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmICh2YWx1ZSAmIGluZm8tPm1hc2spCisJZGV2X3ZkYmcocmRldl9nZXRfZGV2KHJkZXYpLAorCQkiJXMtaXNfZW5hYmxlZCAoYmFuaywgcmVnLCBtYXNrLCB2YWx1ZSk6IDB4JXgsIDB4JXgsIDB4JXgsIgorCQkiIDB4JXhcbiIsCisJCWluZm8tPmRlc2MubmFtZSwgaW5mby0+dXBkYXRlX2JhbmssIGluZm8tPnVwZGF0ZV9yZWcsCisJCWluZm8tPnVwZGF0ZV9tYXNrLCByZWd2YWwpOworCisJaWYgKHJlZ3ZhbCAmIGluZm8tPnVwZGF0ZV9tYXNrKQogCQlyZXR1cm4gdHJ1ZTsKIAllbHNlCiAJCXJldHVybiBmYWxzZTsKQEAgLTE1MywxMiArMTgxLDEyIEBACiAKIHN0YXRpYyBpbnQgYWI4NTAwX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgc2VsZWN0b3IpCiB7Ci0JaW50IHJlZ3VsYXRvcl9pZDsKIAlzdHJ1Y3QgYWI4NTAwX3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAotCXJlZ3VsYXRvcl9pZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOwotCWlmIChyZWd1bGF0b3JfaWQgPj0gQUI4NTAwX05VTV9SRUdVTEFUT1JTKQorCWlmIChpbmZvID09IE5VTEwpIHsKKwkJZGV2X2VycihyZGV2X2dldF9kZXYocmRldiksICJyZWd1bGF0b3IgaW5mbyBudWxsIHBvaW50ZXJcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAkvKiByZXR1cm4gdGhlIHVWIGZvciB0aGUgZml4ZWQgcmVndWxhdG9ycyAqLwogCWlmIChpbmZvLT5maXhlZF91VikKQEAgLTE2NywzMyArMTk1LDQwIEBACiAJaWYgKHNlbGVjdG9yID49IGluZm8tPnZvbHRhZ2VzX2xlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gaW5mby0+c3VwcG9ydGVkX3ZvbHRhZ2VzW3NlbGVjdG9yXTsKKwlyZXR1cm4gaW5mby0+dm9sdGFnZXNbc2VsZWN0b3JdOwogfQogCiBzdGF0aWMgaW50IGFiODUwMF9yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7Ci0JaW50IHJlZ3VsYXRvcl9pZCwgcmV0OworCWludCByZXQsIHZhbDsKIAlzdHJ1Y3QgYWI4NTAwX3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQl1OCB2YWx1ZTsKKwl1OCByZWd2YWw7CiAKLQlyZWd1bGF0b3JfaWQgPSByZGV2X2dldF9pZChyZGV2KTsKLQlpZiAocmVndWxhdG9yX2lkID49IEFCODUwMF9OVU1fUkVHVUxBVE9SUykKKwlpZiAoaW5mbyA9PSBOVUxMKSB7CisJCWRldl9lcnIocmRldl9nZXRfZGV2KHJkZXYpLCAicmVndWxhdG9yIGluZm8gbnVsbCBwb2ludGVyXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JcmV0ID0gYWJ4NTAwX2dldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGluZm8tPmRldiwgaW5mby0+dm9sdGFnZV9iYW5rLAotCQlpbmZvLT52b2x0YWdlX3JlZywgJnZhbHVlKTsKKwlyZXQgPSBhYng1MDBfZ2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoaW5mby0+ZGV2LAorCQkJaW5mby0+dm9sdGFnZV9iYW5rLCBpbmZvLT52b2x0YWdlX3JlZywgJnJlZ3ZhbCk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycihyZGV2X2dldF9kZXYocmRldiksCiAJCQkiY291bGRuJ3QgcmVhZCB2b2x0YWdlIHJlZyBmb3IgcmVndWxhdG9yXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlkZXZfdmRiZyhyZGV2X2dldF9kZXYocmRldiksCisJCSIlcy1nZXRfdm9sdGFnZSAoYmFuaywgcmVnLCBtYXNrLCB2YWx1ZSk6IDB4JXgsIDB4JXgsIDB4JXgsIgorCQkiIDB4JXhcbiIsCisJCWluZm8tPmRlc2MubmFtZSwgaW5mby0+dm9sdGFnZV9iYW5rLCBpbmZvLT52b2x0YWdlX3JlZywKKwkJaW5mby0+dm9sdGFnZV9tYXNrLCByZWd2YWwpOworCiAJLyogdmludGNvcmUgaGFzIGEgZGlmZmVyZW50IGxheW91dCAqLwotCXZhbHVlICY9IGluZm8tPnZvbHRhZ2VfbWFzazsKLQlpZiAocmVndWxhdG9yX2lkID09IEFCODUwMF9MRE9fSU5UQ09SRSkKLQkJcmV0ID0gaW5mby0+c3VwcG9ydGVkX3ZvbHRhZ2VzW3ZhbHVlID4+IDB4M107CisJdmFsID0gcmVndmFsICYgaW5mby0+dm9sdGFnZV9tYXNrOworCWlmIChpbmZvLT5kZXNjLmlkID09IEFCODUwMF9MRE9fSU5UQ09SRSkKKwkJcmV0ID0gaW5mby0+dm9sdGFnZXNbdmFsID4+IDB4M107CiAJZWxzZQotCQlyZXQgPSBpbmZvLT5zdXBwb3J0ZWRfdm9sdGFnZXNbdmFsdWVdOworCQlyZXQgPSBpbmZvLT52b2x0YWdlc1t2YWxdOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIwNiw4ICsyNDEsOCBAQAogCiAJLyogY2hlY2sgdGhlIHN1cHBvcnRlZCB2b2x0YWdlICovCiAJZm9yIChpID0gMDsgaSA8IGluZm8tPnZvbHRhZ2VzX2xlbjsgaSsrKSB7Ci0JCWlmICgoaW5mby0+c3VwcG9ydGVkX3ZvbHRhZ2VzW2ldID49IG1pbl91VikgJiYKLQkJICAgIChpbmZvLT5zdXBwb3J0ZWRfdm9sdGFnZXNbaV0gPD0gbWF4X3VWKSkKKwkJaWYgKChpbmZvLT52b2x0YWdlc1tpXSA+PSBtaW5fdVYpICYmCisJCSAgICAoaW5mby0+dm9sdGFnZXNbaV0gPD0gbWF4X3VWKSkKIAkJCXJldHVybiBpOwogCX0KIApAQCAtMjE1LDE0ICsyNTAsMTcgQEAKIH0KIAogc3RhdGljIGludCBhYjg1MDBfcmVndWxhdG9yX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQlpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQorCQkJCQlpbnQgbWluX3VWLCBpbnQgbWF4X3VWLAorCQkJCQl1bnNpZ25lZCAqc2VsZWN0b3IpCiB7Ci0JaW50IHJlZ3VsYXRvcl9pZCwgcmV0OworCWludCByZXQ7CiAJc3RydWN0IGFiODUwMF9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJdTggcmVndmFsOwogCi0JcmVndWxhdG9yX2lkID0gcmRldl9nZXRfaWQocmRldik7Ci0JaWYgKHJlZ3VsYXRvcl9pZCA+PSBBQjg1MDBfTlVNX1JFR1VMQVRPUlMpCisJaWYgKGluZm8gPT0gTlVMTCkgeworCQlkZXZfZXJyKHJkZXZfZ2V0X2RldihyZGV2KSwgInJlZ3VsYXRvciBpbmZvIG51bGwgcG9pbnRlclxuIik7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCS8qIGdldCB0aGUgYXBwcm9wcmlhdGUgdm9sdGFnZXMgd2l0aGluIHRoZSByYW5nZSAqLwogCXJldCA9IGFiODUwMF9nZXRfYmVzdF92b2x0YWdlX2luZGV4KHJkZXYsIG1pbl91ViwgbWF4X3VWKTsKQEAgLTIzMiwxNCArMjcwLDIzIEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJKnNlbGVjdG9yID0gcmV0OworCiAJLyogc2V0IHRoZSByZWdpc3RlcnMgZm9yIHRoZSByZXF1ZXN0ICovCisJcmVndmFsID0gKHU4KXJldDsKIAlyZXQgPSBhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoaW5mby0+ZGV2LAotCQlpbmZvLT52b2x0YWdlX2JhbmssIGluZm8tPnZvbHRhZ2VfcmVnLAotCQlpbmZvLT52b2x0YWdlX21hc2ssICh1OClyZXQpOworCQkJaW5mby0+dm9sdGFnZV9iYW5rLCBpbmZvLT52b2x0YWdlX3JlZywKKwkJCWluZm8tPnZvbHRhZ2VfbWFzaywgcmVndmFsKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycihyZGV2X2dldF9kZXYocmRldiksCiAJCSJjb3VsZG4ndCBzZXQgdm9sdGFnZSByZWcgZm9yIHJlZ3VsYXRvclxuIik7CiAKKwlkZXZfdmRiZyhyZGV2X2dldF9kZXYocmRldiksCisJCSIlcy1zZXRfdm9sdGFnZSAoYmFuaywgcmVnLCBtYXNrLCB2YWx1ZSk6IDB4JXgsIDB4JXgsIDB4JXgsIgorCQkiIDB4JXhcbiIsCisJCWluZm8tPmRlc2MubmFtZSwgaW5mby0+dm9sdGFnZV9iYW5rLCBpbmZvLT52b2x0YWdlX3JlZywKKwkJaW5mby0+dm9sdGFnZV9tYXNrLCByZWd2YWwpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjU0LDE3ICszMDEsMTcgQEAKIAogc3RhdGljIGludCBhYjg1MDBfZml4ZWRfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7Ci0JaW50IHJlZ3VsYXRvcl9pZDsKIAlzdHJ1Y3QgYWI4NTAwX3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAotCXJlZ3VsYXRvcl9pZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOwotCWlmIChyZWd1bGF0b3JfaWQgPj0gQUI4NTAwX05VTV9SRUdVTEFUT1JTKQorCWlmIChpbmZvID09IE5VTEwpIHsKKwkJZGV2X2VycihyZGV2X2dldF9kZXYocmRldiksICJyZWd1bGF0b3IgaW5mbyBudWxsIHBvaW50ZXJcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlyZXR1cm4gaW5mby0+Zml4ZWRfdVY7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBhYjg1MDBfbGRvX2ZpeGVkX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBhYjg1MDBfcmVndWxhdG9yX2ZpeGVkX29wcyA9IHsKIAkuZW5hYmxlCQk9IGFiODUwMF9yZWd1bGF0b3JfZW5hYmxlLAogCS5kaXNhYmxlCT0gYWI4NTAwX3JlZ3VsYXRvcl9kaXNhYmxlLAogCS5pc19lbmFibGVkCT0gYWI4NTAwX3JlZ3VsYXRvcl9pc19lbmFibGVkLApAQCAtMjcyLDg5ICszMTksMTk4IEBACiAJLmxpc3Rfdm9sdGFnZQk9IGFiODUwMF9saXN0X3ZvbHRhZ2UsCiB9OwogCi0jZGVmaW5lIEFCODUwMF9MRE8oX2lkLCBtaW4sIG1heCwgYmFuaywgcmVnLCByZWdfbWFzaywJCVwKLQkJcmVnX2VuYWJsZSwgdm9sdF9iYW5rLCB2b2x0X3JlZywgdm9sdF9tYXNrLAlcCi0JCXZvbHRhZ2VzLCBsZW5fdm9sdHMpCQkJCVwKLXsJCQkJCQkJCVwKLQkuZGVzYwk9IHsJCQkJCQlcCi0JCS5uYW1lCT0gIkxETy0iICNfaWQsCQkJCVwKLQkJLm9wcwk9ICZhYjg1MDBfcmVndWxhdG9yX29wcywJCVwKLQkJLnR5cGUJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCi0JCS5pZAk9IEFCODUwMF9MRE9fIyNfaWQsCQkJXAotCQkub3duZXIJPSBUSElTX01PRFVMRSwJCQkJXAotCX0sCQkJCQkJCVwKLQkubWluX3VWCQk9IChtaW4pICogMTAwMCwJCQkJXAotCS5tYXhfdVYJCT0gKG1heCkgKiAxMDAwLAkJCQlcCi0JLnVwZGF0ZV9iYW5rCT0gYmFuaywJCQkJCVwKLQkudXBkYXRlX3JlZwk9IHJlZywJCQkJCVwKLQkubWFzawkJPSByZWdfbWFzaywJCQkJXAotCS5lbmFibGUJCT0gcmVnX2VuYWJsZSwJCQkJXAotCS52b2x0YWdlX2JhbmsJPSB2b2x0X2JhbmssCQkJCVwKLQkudm9sdGFnZV9yZWcJPSB2b2x0X3JlZywJCQkJXAotCS52b2x0YWdlX21hc2sJPSB2b2x0X21hc2ssCQkJCVwKLQkuc3VwcG9ydGVkX3ZvbHRhZ2VzID0gdm9sdGFnZXMsCQkJCVwKLQkudm9sdGFnZXNfbGVuCT0gbGVuX3ZvbHRzLAkJCQlcCi0JLmZpeGVkX3VWCT0gMCwJCQkJCVwKLX0KLQotI2RlZmluZSBBQjg1MDBfRklYRURfTERPKF9pZCwgZml4ZWQsIGJhbmssIHJlZywJCVwKLQkJCXJlZ19tYXNrLCByZWdfZW5hYmxlKQkJXAotewkJCQkJCQlcCi0JLmRlc2MJPSB7CQkJCQlcCi0JCS5uYW1lCT0gIkxETy0iICNfaWQsCQkJXAotCQkub3BzCT0gJmFiODUwMF9sZG9fZml4ZWRfb3BzLAlcCi0JCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQlcCi0JCS5pZAk9IEFCODUwMF9MRE9fIyNfaWQsCQlcCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAkJCVwKLQl9LAkJCQkJCVwKLQkuZml4ZWRfdVYJPSBmaXhlZCAqIDEwMDAsCQkJXAotCS51cGRhdGVfYmFuawk9IGJhbmssCQkJCVwKLQkudXBkYXRlX3JlZwk9IHJlZywJCQkJXAotCS5tYXNrCQk9IHJlZ19tYXNrLAkJCVwKLQkuZW5hYmxlCQk9IHJlZ19lbmFibGUsCQkJXAotfQotCi1zdGF0aWMgc3RydWN0IGFiODUwMF9yZWd1bGF0b3JfaW5mbyBhYjg1MDBfcmVndWxhdG9yX2luZm9bXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYWI4NTAwX3JlZ3VsYXRvcl9pbmZvCisJCWFiODUwMF9yZWd1bGF0b3JfaW5mb1tBQjg1MDBfTlVNX1JFR1VMQVRPUlNdID0gewogCS8qCi0JICogVmFyaWFibGUgVm9sdGFnZSBMRE9zCi0JICogbmFtZSwgbWluIHVWLCBtYXggdVYsIGN0cmwgYmFuaywgY3RybCByZWcsIHJlZyBtYXNrLCBlbmFibGUgbWFzaywKLQkgKiAgICAgIHZvbHQgY3RybCBiYW5rLCB2b2x0IGN0cmwgcmVnLCB2b2x0IGN0cmwgbWFzaywgdm9sdCB0YWJsZSwKLQkgKiAgICAgIG51bSBzdXBwb3J0ZWQgdm9sdHMKKwkgKiBWYXJpYWJsZSBWb2x0YWdlIFJlZ3VsYXRvcnMKKwkgKiAgIG5hbWUsIG1pbiBtViwgbWF4IG1WLAorCSAqICAgdXBkYXRlIGJhbmssIHJlZywgbWFzaywgZW5hYmxlIHZhbAorCSAqICAgdm9sdCBiYW5rLCByZWcsIG1hc2ssIHRhYmxlLCB0YWJsZSBsZW5ndGgKIAkgKi8KLQlBQjg1MDBfTERPKEFVWDEsIDExMDAsIDMzMDAsIDB4MDQsIDB4MDksIDB4MywgMHgxLCAweDA0LCAweDFmLCAweGYsCi0JCQlsZG9fdmF1eG5fdm9sdGFnZXMsIEFSUkFZX1NJWkUobGRvX3ZhdXhuX3ZvbHRhZ2VzKSksCi0JQUI4NTAwX0xETyhBVVgyLCAxMTAwLCAzMzAwLCAweDA0LCAweDA5LCAweGMsIDB4NCwgMHgwNCwgMHgyMCwgMHhmLAotCQkJbGRvX3ZhdXhuX3ZvbHRhZ2VzLCBBUlJBWV9TSVpFKGxkb192YXV4bl92b2x0YWdlcykpLAotCUFCODUwMF9MRE8oQVVYMywgMTEwMCwgMzMwMCwgMHgwNCwgMHgwYSwgMHgzLCAweDEsIDB4MDQsIDB4MjEsIDB4ZiwKLQkJCWxkb192YXV4bl92b2x0YWdlcywgQVJSQVlfU0laRShsZG9fdmF1eG5fdm9sdGFnZXMpKSwKLQlBQjg1MDBfTERPKElOVENPUkUsIDExMDAsIDMzMDAsIDB4MDMsIDB4ODAsIDB4NCwgMHg0LCAweDAzLCAweDgwLCAweDM4LAotCQlsZG9fdmludGNvcmVfdm9sdGFnZXMsIEFSUkFZX1NJWkUobGRvX3ZpbnRjb3JlX3ZvbHRhZ2VzKSksCisJW0FCODUwMF9MRE9fQVVYMV0gPSB7CisJCS5kZXNjID0geworCQkJLm5hbWUJCT0gIkxETy1BVVgxIiwKKwkJCS5vcHMJCT0gJmFiODUwMF9yZWd1bGF0b3Jfb3BzLAorCQkJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCQkuaWQJCT0gQUI4NTAwX0xET19BVVgxLAorCQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkJLm5fdm9sdGFnZXMJPSBBUlJBWV9TSVpFKGxkb192YXV4bl92b2x0YWdlcyksCisJCX0sCisJCS5taW5fdVYJCQk9IDExMDAwMDAsCisJCS5tYXhfdVYJCQk9IDMzMDAwMDAsCisJCS51cGRhdGVfYmFuawkJPSAweDA0LAorCQkudXBkYXRlX3JlZwkJPSAweDA5LAorCQkudXBkYXRlX21hc2sJCT0gMHgwMywKKwkJLnVwZGF0ZV92YWxfZW5hYmxlCT0gMHgwMSwKKwkJLnZvbHRhZ2VfYmFuawkJPSAweDA0LAorCQkudm9sdGFnZV9yZWcJCT0gMHgxZiwKKwkJLnZvbHRhZ2VfbWFzawkJPSAweDBmLAorCQkudm9sdGFnZXMJCT0gbGRvX3ZhdXhuX3ZvbHRhZ2VzLAorCQkudm9sdGFnZXNfbGVuCQk9IEFSUkFZX1NJWkUobGRvX3ZhdXhuX3ZvbHRhZ2VzKSwKKwl9LAorCVtBQjg1MDBfTERPX0FVWDJdID0geworCQkuZGVzYyA9IHsKKwkJCS5uYW1lCQk9ICJMRE8tQVVYMiIsCisJCQkub3BzCQk9ICZhYjg1MDBfcmVndWxhdG9yX29wcywKKwkJCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkJLmlkCQk9IEFCODUwMF9MRE9fQVVYMiwKKwkJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJCS5uX3ZvbHRhZ2VzCT0gQVJSQVlfU0laRShsZG9fdmF1eG5fdm9sdGFnZXMpLAorCQl9LAorCQkubWluX3VWCQkJPSAxMTAwMDAwLAorCQkubWF4X3VWCQkJPSAzMzAwMDAwLAorCQkudXBkYXRlX2JhbmsJCT0gMHgwNCwKKwkJLnVwZGF0ZV9yZWcJCT0gMHgwOSwKKwkJLnVwZGF0ZV9tYXNrCQk9IDB4MGMsCisJCS51cGRhdGVfdmFsX2VuYWJsZQk9IDB4MDQsCisJCS52b2x0YWdlX2JhbmsJCT0gMHgwNCwKKwkJLnZvbHRhZ2VfcmVnCQk9IDB4MjAsCisJCS52b2x0YWdlX21hc2sJCT0gMHgwZiwKKwkJLnZvbHRhZ2VzCQk9IGxkb192YXV4bl92b2x0YWdlcywKKwkJLnZvbHRhZ2VzX2xlbgkJPSBBUlJBWV9TSVpFKGxkb192YXV4bl92b2x0YWdlcyksCisJfSwKKwlbQUI4NTAwX0xET19BVVgzXSA9IHsKKwkJLmRlc2MgPSB7CisJCQkubmFtZQkJPSAiTERPLUFVWDMiLAorCQkJLm9wcwkJPSAmYWI4NTAwX3JlZ3VsYXRvcl9vcHMsCisJCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJCS5pZAkJPSBBQjg1MDBfTERPX0FVWDMsCisJCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCQkubl92b2x0YWdlcwk9IEFSUkFZX1NJWkUobGRvX3ZhdXgzX3ZvbHRhZ2VzKSwKKwkJfSwKKwkJLm1pbl91VgkJCT0gMTEwMDAwMCwKKwkJLm1heF91VgkJCT0gMzMwMDAwMCwKKwkJLnVwZGF0ZV9iYW5rCQk9IDB4MDQsCisJCS51cGRhdGVfcmVnCQk9IDB4MGEsCisJCS51cGRhdGVfbWFzawkJPSAweDAzLAorCQkudXBkYXRlX3ZhbF9lbmFibGUJPSAweDAxLAorCQkudm9sdGFnZV9iYW5rCQk9IDB4MDQsCisJCS52b2x0YWdlX3JlZwkJPSAweDIxLAorCQkudm9sdGFnZV9tYXNrCQk9IDB4MDcsCisJCS52b2x0YWdlcwkJPSBsZG9fdmF1eDNfdm9sdGFnZXMsCisJCS52b2x0YWdlc19sZW4JCT0gQVJSQVlfU0laRShsZG9fdmF1eDNfdm9sdGFnZXMpLAorCX0sCisJW0FCODUwMF9MRE9fSU5UQ09SRV0gPSB7CisJCS5kZXNjID0geworCQkJLm5hbWUJCT0gIkxETy1JTlRDT1JFIiwKKwkJCS5vcHMJCT0gJmFiODUwMF9yZWd1bGF0b3Jfb3BzLAorCQkJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCQkuaWQJCT0gQUI4NTAwX0xET19JTlRDT1JFLAorCQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkJLm5fdm9sdGFnZXMJPSBBUlJBWV9TSVpFKGxkb192aW50Y29yZV92b2x0YWdlcyksCisJCX0sCisJCS5taW5fdVYJCQk9IDExMDAwMDAsCisJCS5tYXhfdVYJCQk9IDMzMDAwMDAsCisJCS51cGRhdGVfYmFuawkJPSAweDAzLAorCQkudXBkYXRlX3JlZwkJPSAweDgwLAorCQkudXBkYXRlX21hc2sJCT0gMHg0NCwKKwkJLnVwZGF0ZV92YWxfZW5hYmxlCT0gMHgwNCwKKwkJLnZvbHRhZ2VfYmFuawkJPSAweDAzLAorCQkudm9sdGFnZV9yZWcJCT0gMHg4MCwKKwkJLnZvbHRhZ2VfbWFzawkJPSAweDM4LAorCQkudm9sdGFnZXMJCT0gbGRvX3ZpbnRjb3JlX3ZvbHRhZ2VzLAorCQkudm9sdGFnZXNfbGVuCQk9IEFSUkFZX1NJWkUobGRvX3ZpbnRjb3JlX3ZvbHRhZ2VzKSwKKwl9LAogCiAJLyoKLQkgKiBGaXhlZCBWb2x0YWdlIExET3MKLQkgKgkJIG5hbWUsCW8vcCB1ViwgY3RybCBiYW5rLCBjdHJsIHJlZywgZW5hYmxlLCBkaXNhYmxlCisJICogRml4ZWQgVm9sdGFnZSBSZWd1bGF0b3JzCisJICogICBuYW1lLCBmaXhlZCBtViwKKwkgKiAgIHVwZGF0ZSBiYW5rLCByZWcsIG1hc2ssIGVuYWJsZSB2YWwKIAkgKi8KLQlBQjg1MDBfRklYRURfTERPKFRWT1VULAkgIDIwMDAsIDB4MDMsICAgICAgMHg4MCwgICAgIDB4MiwgICAgMHgyKSwKLQlBQjg1MDBfRklYRURfTERPKEFVRElPLCAgIDIwMDAsIDB4MDMsICAgICAgMHg4MywgICAgIDB4MiwgICAgMHgyKSwKLQlBQjg1MDBfRklYRURfTERPKEFOQU1JQzEsIDIwNTAsIDB4MDMsICAgICAgMHg4MywgICAgIDB4NCwgICAgMHg0KSwKLQlBQjg1MDBfRklYRURfTERPKEFOQU1JQzIsIDIwNTAsIDB4MDMsICAgICAgMHg4MywgICAgIDB4OCwgICAgMHg4KSwKLQlBQjg1MDBfRklYRURfTERPKERNSUMsICAgIDE4MDAsIDB4MDMsICAgICAgMHg4MywgICAgIDB4MTAsICAgMHgxMCksCi0JQUI4NTAwX0ZJWEVEX0xETyhBTkEsICAgICAxMjAwLCAweDAzLCAgICAgIDB4ODMsICAgICAweGMsICAgIDB4NCksCisJW0FCODUwMF9MRE9fVFZPVVRdID0geworCQkuZGVzYyA9IHsKKwkJCS5uYW1lCQk9ICJMRE8tVFZPVVQiLAorCQkJLm9wcwkJPSAmYWI4NTAwX3JlZ3VsYXRvcl9maXhlZF9vcHMsCisJCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJCS5pZAkJPSBBQjg1MDBfTERPX1RWT1VULAorCQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkJLm5fdm9sdGFnZXMJPSAxLAorCQl9LAorCQkuZml4ZWRfdVYJCT0gMjAwMDAwMCwKKwkJLnVwZGF0ZV9iYW5rCQk9IDB4MDMsCisJCS51cGRhdGVfcmVnCQk9IDB4ODAsCisJCS51cGRhdGVfbWFzawkJPSAweDgyLAorCQkudXBkYXRlX3ZhbF9lbmFibGUJPSAweDAyLAorCX0sCisJW0FCODUwMF9MRE9fQVVESU9dID0geworCQkuZGVzYyA9IHsKKwkJCS5uYW1lCQk9ICJMRE8tQVVESU8iLAorCQkJLm9wcwkJPSAmYWI4NTAwX3JlZ3VsYXRvcl9maXhlZF9vcHMsCisJCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJCS5pZAkJPSBBQjg1MDBfTERPX0FVRElPLAorCQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkJLm5fdm9sdGFnZXMJPSAxLAorCQl9LAorCQkuZml4ZWRfdVYJCT0gMjAwMDAwMCwKKwkJLnVwZGF0ZV9iYW5rCQk9IDB4MDMsCisJCS51cGRhdGVfcmVnCQk9IDB4ODMsCisJCS51cGRhdGVfbWFzawkJPSAweDAyLAorCQkudXBkYXRlX3ZhbF9lbmFibGUJPSAweDAyLAorCX0sCisJW0FCODUwMF9MRE9fQU5BTUlDMV0gPSB7CisJCS5kZXNjID0geworCQkJLm5hbWUJCT0gIkxETy1BTkFNSUMxIiwKKwkJCS5vcHMJCT0gJmFiODUwMF9yZWd1bGF0b3JfZml4ZWRfb3BzLAorCQkJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCQkuaWQJCT0gQUI4NTAwX0xET19BTkFNSUMxLAorCQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkJLm5fdm9sdGFnZXMJPSAxLAorCQl9LAorCQkuZml4ZWRfdVYJCT0gMjA1MDAwMCwKKwkJLnVwZGF0ZV9iYW5rCQk9IDB4MDMsCisJCS51cGRhdGVfcmVnCQk9IDB4ODMsCisJCS51cGRhdGVfbWFzawkJPSAweDA4LAorCQkudXBkYXRlX3ZhbF9lbmFibGUJPSAweDA4LAorCX0sCisJW0FCODUwMF9MRE9fQU5BTUlDMl0gPSB7CisJCS5kZXNjID0geworCQkJLm5hbWUJCT0gIkxETy1BTkFNSUMyIiwKKwkJCS5vcHMJCT0gJmFiODUwMF9yZWd1bGF0b3JfZml4ZWRfb3BzLAorCQkJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCQkuaWQJCT0gQUI4NTAwX0xET19BTkFNSUMyLAorCQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkJLm5fdm9sdGFnZXMJPSAxLAorCQl9LAorCQkuZml4ZWRfdVYJCT0gMjA1MDAwMCwKKwkJLnVwZGF0ZV9iYW5rCQk9IDB4MDMsCisJCS51cGRhdGVfcmVnCQk9IDB4ODMsCisJCS51cGRhdGVfbWFzawkJPSAweDEwLAorCQkudXBkYXRlX3ZhbF9lbmFibGUJPSAweDEwLAorCX0sCisJW0FCODUwMF9MRE9fRE1JQ10gPSB7CisJCS5kZXNjID0geworCQkJLm5hbWUJCT0gIkxETy1ETUlDIiwKKwkJCS5vcHMJCT0gJmFiODUwMF9yZWd1bGF0b3JfZml4ZWRfb3BzLAorCQkJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCQkuaWQJCT0gQUI4NTAwX0xET19ETUlDLAorCQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkJLm5fdm9sdGFnZXMJPSAxLAorCQl9LAorCQkuZml4ZWRfdVYJCT0gMTgwMDAwMCwKKwkJLnVwZGF0ZV9iYW5rCQk9IDB4MDMsCisJCS51cGRhdGVfcmVnCQk9IDB4ODMsCisJCS51cGRhdGVfbWFzawkJPSAweDA0LAorCQkudXBkYXRlX3ZhbF9lbmFibGUJPSAweDA0LAorCX0sCisJW0FCODUwMF9MRE9fQU5BXSA9IHsKKwkJLmRlc2MgPSB7CisJCQkubmFtZQkJPSAiTERPLUFOQSIsCisJCQkub3BzCQk9ICZhYjg1MDBfcmVndWxhdG9yX2ZpeGVkX29wcywKKwkJCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkJLmlkCQk9IEFCODUwMF9MRE9fQU5BLAorCQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkJLm5fdm9sdGFnZXMJPSAxLAorCQl9LAorCQkuZml4ZWRfdVYJCT0gMTIwMDAwMCwKKwkJLnVwZGF0ZV9iYW5rCQk9IDB4MDQsCisJCS51cGRhdGVfcmVnCQk9IDB4MDYsCisJCS51cGRhdGVfbWFzawkJPSAweDBjLAorCQkudXBkYXRlX3ZhbF9lbmFibGUJPSAweDA0LAorCX0sCisKKwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgYWI4NTAwX3JlZ3VsYXRvcl9pbmZvICpmaW5kX3JlZ3VsYXRvcl9pbmZvKGludCBpZCkKLXsKLQlzdHJ1Y3QgYWI4NTAwX3JlZ3VsYXRvcl9pbmZvICppbmZvOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWI4NTAwX3JlZ3VsYXRvcl9pbmZvKTsgaSsrKSB7Ci0JCWluZm8gPSAmYWI4NTAwX3JlZ3VsYXRvcl9pbmZvW2ldOwotCQlpZiAoaW5mby0+ZGVzYy5pZCA9PSBpZCkKLQkJCXJldHVybiBpbmZvOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIF9fZGV2aW5pdCBpbnQgYWI4NTAwX3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBhYjg1MDAgKmFiODUwMCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKQEAgLTM2Niw2ICs1MjIsMTYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShhYjg1MDAtPmRldik7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJudWxsIHBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogbWFrZSBzdXJlIHRoZSBwbGF0Zm9ybSBkYXRhIGhhcyB0aGUgY29ycmVjdCBzaXplICovCisJaWYgKHBkYXRhLT5udW1fcmVndWxhdG9yICE9IEFSUkFZX1NJWkUoYWI4NTAwX3JlZ3VsYXRvcl9pbmZvKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwbGF0Zm9ybSBjb25maWd1cmF0aW9uIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJLyogcmVnaXN0ZXIgYWxsIHJlZ3VsYXRvcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhYjg1MDBfcmVndWxhdG9yX2luZm8pOyBpKyspIHsKQEAgLTM3NCwxMCArNTQwLDIyIEBACiAJCS8qIGFzc2lnbiBwZXItcmVndWxhdG9yIGRhdGEgKi8KIAkJaW5mbyA9ICZhYjg1MDBfcmVndWxhdG9yX2luZm9baV07CiAJCWluZm8tPmRldiA9ICZwZGV2LT5kZXY7Ci0JCWluZm8tPmFiODUwMCA9IGFiODUwMDsKIAorCQkvKiBmaXggZm9yIGhhcmR3YXJlIGJlZm9yZSBhYjg1MDB2Mi4wICovCisJCWlmIChhYng1MDBfZ2V0X2NoaXBfaWQoaW5mby0+ZGV2KSA8IDB4MjApIHsKKwkJCWlmIChpbmZvLT5kZXNjLmlkID09IEFCODUwMF9MRE9fQVVYMykgeworCQkJCWluZm8tPmRlc2Mubl92b2x0YWdlcyA9CisJCQkJCUFSUkFZX1NJWkUobGRvX3ZhdXhuX3ZvbHRhZ2VzKTsKKwkJCQlpbmZvLT52b2x0YWdlcyA9IGxkb192YXV4bl92b2x0YWdlczsKKwkJCQlpbmZvLT52b2x0YWdlc19sZW4gPQorCQkJCQlBUlJBWV9TSVpFKGxkb192YXV4bl92b2x0YWdlcyk7CisJCQkJaW5mby0+dm9sdGFnZV9tYXNrID0gMHhmOworCQkJfQorCQl9CisKKwkJLyogcmVnaXN0ZXIgcmVndWxhdG9yIHdpdGggZnJhbWV3b3JrICovCiAJCWluZm8tPnJlZ3VsYXRvciA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmaW5mby0+ZGVzYywgJnBkZXYtPmRldiwKLQkJCQlwZGF0YS0+cmVndWxhdG9yW2ldLCBpbmZvKTsKKwkJCQkmcGRhdGEtPnJlZ3VsYXRvcltpXSwgaW5mbyk7CiAJCWlmIChJU19FUlIoaW5mby0+cmVndWxhdG9yKSkgewogCQkJZXJyID0gUFRSX0VSUihpbmZvLT5yZWd1bGF0b3IpOwogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvciAlc1xuIiwKQEAgLTM4OSw2ICs1NjcsOSBAQAogCQkJfQogCQkJcmV0dXJuIGVycjsKIAkJfQorCisJCWRldl92ZGJnKHJkZXZfZ2V0X2RldihpbmZvLT5yZWd1bGF0b3IpLAorCQkJIiVzLXByb2JlZFxuIiwgaW5mby0+ZGVzYy5uYW1lKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQwMSw2ICs1ODIsMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhYjg1MDBfcmVndWxhdG9yX2luZm8pOyBpKyspIHsKIAkJc3RydWN0IGFiODUwMF9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IE5VTEw7CiAJCWluZm8gPSAmYWI4NTAwX3JlZ3VsYXRvcl9pbmZvW2ldOworCisJCWRldl92ZGJnKHJkZXZfZ2V0X2RldihpbmZvLT5yZWd1bGF0b3IpLAorCQkJIiVzLXJlbW92ZVxuIiwgaW5mby0+ZGVzYy5uYW1lKTsKKwogCQlyZWd1bGF0b3JfdW5yZWdpc3RlcihpbmZvLT5yZWd1bGF0b3IpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCmluZGV4IGJhNTIxZjAuLjlmYTIwOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKQEAgLTEzLDggKzEzLDExIEBACiAgKgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgIiVzOiAiIGZtdCwgX19mdW5jX18KKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtMjUsMTYgKzI4LDMwIEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9yZWd1bGF0b3IuaD4KKwogI2luY2x1ZGUgImR1bW15LmgiCiAKLSNkZWZpbmUgUkVHVUxBVE9SX1ZFUlNJT04gIjAuNSIKKyNkZWZpbmUgcmRldl9lcnIocmRldiwgZm10LCAuLi4pCQkJCQlcCisJcHJfZXJyKCIlczogIiBmbXQsIHJkZXZfZ2V0X25hbWUocmRldiksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIHJkZXZfd2FybihyZGV2LCBmbXQsIC4uLikJCQkJCVwKKwlwcl93YXJuKCIlczogIiBmbXQsIHJkZXZfZ2V0X25hbWUocmRldiksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIHJkZXZfaW5mbyhyZGV2LCBmbXQsIC4uLikJCQkJCVwKKwlwcl9pbmZvKCIlczogIiBmbXQsIHJkZXZfZ2V0X25hbWUocmRldiksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIHJkZXZfZGJnKHJkZXYsIGZtdCwgLi4uKQkJCQkJXAorCXByX2RlYnVnKCIlczogIiBmbXQsIHJkZXZfZ2V0X25hbWUocmRldiksICMjX19WQV9BUkdTX18pCiAKIHN0YXRpYyBERUZJTkVfTVVURVgocmVndWxhdG9yX2xpc3RfbXV0ZXgpOwogc3RhdGljIExJU1RfSEVBRChyZWd1bGF0b3JfbGlzdCk7CiBzdGF0aWMgTElTVF9IRUFEKHJlZ3VsYXRvcl9tYXBfbGlzdCk7Ci1zdGF0aWMgaW50IGhhc19mdWxsX2NvbnN0cmFpbnRzOworc3RhdGljIGJvb2wgaGFzX2Z1bGxfY29uc3RyYWludHM7CiBzdGF0aWMgYm9vbCBib2FyZF93YW50c19kdW1teV9yZWd1bGF0b3I7CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7CisjZW5kaWYKKwogLyoKICAqIHN0cnVjdCByZWd1bGF0b3JfbWFwCiAgKgpAQCAtNzEsNiArODgsOCBAQAogc3RhdGljIHVuc2lnbmVkIGludCBfcmVndWxhdG9yX2dldF9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KTsKIHN0YXRpYyB2b2lkIF9ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAogCQkJCSAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSk7CitzdGF0aWMgaW50IF9yZWd1bGF0b3JfZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnJkZXZfZ2V0X25hbWUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7CkBAIC0xMTEsMTMgKzEzMCwxMSBAQAogCUJVR19PTigqbWluX3VWID4gKm1heF91Vik7CiAKIAlpZiAoIXJkZXYtPmNvbnN0cmFpbnRzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIGNvbnN0cmFpbnRzIGZvciAlc1xuIiwgX19mdW5jX18sCi0JCSAgICAgICByZGV2X2dldF9uYW1lKHJkZXYpKTsKKwkJcmRldl9lcnIocmRldiwgIm5vIGNvbnN0cmFpbnRzXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmICghKHJkZXYtPmNvbnN0cmFpbnRzLT52YWxpZF9vcHNfbWFzayAmIFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3BlcmF0aW9uIG5vdCBhbGxvd2VkIGZvciAlc1xuIiwKLQkJICAgICAgIF9fZnVuY19fLCByZGV2X2dldF9uYW1lKHJkZXYpKTsKKwkJcmRldl9lcnIocmRldiwgIm9wZXJhdGlvbiBub3QgYWxsb3dlZFxuIik7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCkBAIC0xMzIsNiArMTQ5LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIE1ha2Ugc3VyZSB3ZSBzZWxlY3QgYSB2b2x0YWdlIHRoYXQgc3VpdHMgdGhlIG5lZWRzIG9mIGFsbAorICogcmVndWxhdG9yIGNvbnN1bWVycworICovCitzdGF0aWMgaW50IHJlZ3VsYXRvcl9jaGVja19jb25zdW1lcnMoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgICBpbnQgKm1pbl91ViwgaW50ICptYXhfdVYpCit7CisJc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWd1bGF0b3IsICZyZGV2LT5jb25zdW1lcl9saXN0LCBsaXN0KSB7CisJCWlmICgqbWF4X3VWID4gcmVndWxhdG9yLT5tYXhfdVYpCisJCQkqbWF4X3VWID0gcmVndWxhdG9yLT5tYXhfdVY7CisJCWlmICgqbWluX3VWIDwgcmVndWxhdG9yLT5taW5fdVYpCisJCQkqbWluX3VWID0gcmVndWxhdG9yLT5taW5fdVY7CisJfQorCisJaWYgKCptaW5fdVYgPiAqbWF4X3VWKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCiAvKiBjdXJyZW50IGNvbnN0cmFpbnQgY2hlY2sgKi8KIHN0YXRpYyBpbnQgcmVndWxhdG9yX2NoZWNrX2N1cnJlbnRfbGltaXQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCiAJCQkJCWludCAqbWluX3VBLCBpbnQgKm1heF91QSkKQEAgLTEzOSwxMyArMTc3LDExIEBACiAJQlVHX09OKCptaW5fdUEgPiAqbWF4X3VBKTsKIAogCWlmICghcmRldi0+Y29uc3RyYWludHMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gY29uc3RyYWludHMgZm9yICVzXG4iLCBfX2Z1bmNfXywKLQkJICAgICAgIHJkZXZfZ2V0X25hbWUocmRldikpOworCQlyZGV2X2VycihyZGV2LCAibm8gY29uc3RyYWludHNcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKCEocmRldi0+Y29uc3RyYWludHMtPnZhbGlkX29wc19tYXNrICYgUkVHVUxBVE9SX0NIQU5HRV9DVVJSRU5UKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcGVyYXRpb24gbm90IGFsbG93ZWQgZm9yICVzXG4iLAotCQkgICAgICAgX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldikpOworCQlyZGV2X2VycihyZGV2LCAib3BlcmF0aW9uIG5vdCBhbGxvd2VkXG4iKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKQEAgLTE3NCwxOCArMjEwLDE1IEBACiAJfQogCiAJaWYgKCFyZGV2LT5jb25zdHJhaW50cykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBjb25zdHJhaW50cyBmb3IgJXNcbiIsIF9fZnVuY19fLAotCQkgICAgICAgcmRldl9nZXRfbmFtZShyZGV2KSk7CisJCXJkZXZfZXJyKHJkZXYsICJubyBjb25zdHJhaW50c1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoIShyZGV2LT5jb25zdHJhaW50cy0+dmFsaWRfb3BzX21hc2sgJiBSRUdVTEFUT1JfQ0hBTkdFX01PREUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG9wZXJhdGlvbiBub3QgYWxsb3dlZCBmb3IgJXNcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgcmRldl9nZXRfbmFtZShyZGV2KSk7CisJCXJkZXZfZXJyKHJkZXYsICJvcGVyYXRpb24gbm90IGFsbG93ZWRcbiIpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIAlpZiAoIShyZGV2LT5jb25zdHJhaW50cy0+dmFsaWRfbW9kZXNfbWFzayAmIG1vZGUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgbW9kZSAleCBmb3IgJXNcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgbW9kZSwgcmRldl9nZXRfbmFtZShyZGV2KSk7CisJCXJkZXZfZXJyKHJkZXYsICJpbnZhbGlkIG1vZGUgJXhcbiIsIG1vZGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xOTUsMTMgKzIyOCwxMSBAQAogc3RhdGljIGludCByZWd1bGF0b3JfY2hlY2tfZHJtcyhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlpZiAoIXJkZXYtPmNvbnN0cmFpbnRzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIGNvbnN0cmFpbnRzIGZvciAlc1xuIiwgX19mdW5jX18sCi0JCSAgICAgICByZGV2X2dldF9uYW1lKHJkZXYpKTsKKwkJcmRldl9lcnIocmRldiwgIm5vIGNvbnN0cmFpbnRzXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmICghKHJkZXYtPmNvbnN0cmFpbnRzLT52YWxpZF9vcHNfbWFzayAmIFJFR1VMQVRPUl9DSEFOR0VfRFJNUykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3BlcmF0aW9uIG5vdCBhbGxvd2VkIGZvciAlc1xuIiwKLQkJICAgICAgIF9fZnVuY19fLCByZGV2X2dldF9uYW1lKHJkZXYpKTsKKwkJcmRldl9lcnIocmRldiwgIm9wZXJhdGlvbiBub3QgYWxsb3dlZFxuIik7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCXJldHVybiAwOwpAQCAtNTUzLDE4ICs1ODQsMjEgQEAKIAogCWVyciA9IHJlZ3VsYXRvcl9jaGVja19kcm1zKHJkZXYpOwogCWlmIChlcnIgPCAwIHx8ICFyZGV2LT5kZXNjLT5vcHMtPmdldF9vcHRpbXVtX21vZGUgfHwKLQkgICAgIXJkZXYtPmRlc2MtPm9wcy0+Z2V0X3ZvbHRhZ2UgfHwgIXJkZXYtPmRlc2MtPm9wcy0+c2V0X21vZGUpCisJICAgICghcmRldi0+ZGVzYy0+b3BzLT5nZXRfdm9sdGFnZSAmJgorCSAgICAgIXJkZXYtPmRlc2MtPm9wcy0+Z2V0X3ZvbHRhZ2Vfc2VsKSB8fAorCSAgICAhcmRldi0+ZGVzYy0+b3BzLT5zZXRfbW9kZSkKIAkJcmV0dXJuOwogCiAJLyogZ2V0IG91dHB1dCB2b2x0YWdlICovCi0Jb3V0cHV0X3VWID0gcmRldi0+ZGVzYy0+b3BzLT5nZXRfdm9sdGFnZShyZGV2KTsKKwlvdXRwdXRfdVYgPSBfcmVndWxhdG9yX2dldF92b2x0YWdlKHJkZXYpOwogCWlmIChvdXRwdXRfdVYgPD0gMCkKIAkJcmV0dXJuOwogCiAJLyogZ2V0IGlucHV0IHZvbHRhZ2UgKi8KLQlpZiAocmRldi0+c3VwcGx5ICYmIHJkZXYtPnN1cHBseS0+ZGVzYy0+b3BzLT5nZXRfdm9sdGFnZSkKLQkJaW5wdXRfdVYgPSByZGV2LT5zdXBwbHktPmRlc2MtPm9wcy0+Z2V0X3ZvbHRhZ2UocmRldi0+c3VwcGx5KTsKLQllbHNlCisJaW5wdXRfdVYgPSAwOworCWlmIChyZGV2LT5zdXBwbHkpCisJCWlucHV0X3VWID0gX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZShyZGV2KTsKKwlpZiAoaW5wdXRfdVYgPD0gMCkKIAkJaW5wdXRfdVYgPSByZGV2LT5jb25zdHJhaW50cy0+aW5wdXRfdVY7CiAJaWYgKGlucHV0X3VWIDw9IDApCiAJCXJldHVybjsKQEAgLTU5OCwyMCArNjMyLDE3IEBACiAJICovCiAJaWYgKCFyc3RhdGUtPmVuYWJsZWQgJiYgIXJzdGF0ZS0+ZGlzYWJsZWQpIHsKIAkJaWYgKGNhbl9zZXRfc3RhdGUpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm8gY29uZmlndXJhdGlvbiBmb3IgJXNcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldikpOworCQkJcmRldl93YXJuKHJkZXYsICJObyBjb25maWd1cmF0aW9uXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKHJzdGF0ZS0+ZW5hYmxlZCAmJiByc3RhdGUtPmRpc2FibGVkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgY29uZmlndXJhdGlvbiBmb3IgJXNcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgcmRldl9nZXRfbmFtZShyZGV2KSk7CisJCXJkZXZfZXJyKHJkZXYsICJpbnZhbGlkIGNvbmZpZ3VyYXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoIWNhbl9zZXRfc3RhdGUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gd2F5IHRvIHNldCBzdXNwZW5kIHN0YXRlXG4iLAotCQkJX19mdW5jX18pOworCQlyZGV2X2VycihyZGV2LCAibm8gd2F5IHRvIHNldCBzdXNwZW5kIHN0YXRlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC02MjAsMTUgKzY1MSwxNCBAQAogCWVsc2UKIAkJcmV0ID0gcmRldi0+ZGVzYy0+b3BzLT5zZXRfc3VzcGVuZF9kaXNhYmxlKHJkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBlbmFibGVkL2Rpc2FibGVcbiIsIF9fZnVuY19fKTsKKwkJcmRldl9lcnIocmRldiwgImZhaWxlZCB0byBlbmFibGVkL2Rpc2FibGVcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmIChyZGV2LT5kZXNjLT5vcHMtPnNldF9zdXNwZW5kX3ZvbHRhZ2UgJiYgcnN0YXRlLT51ViA+IDApIHsKIAkJcmV0ID0gcmRldi0+ZGVzYy0+b3BzLT5zZXRfc3VzcGVuZF92b2x0YWdlKHJkZXYsIHJzdGF0ZS0+dVYpOwogCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHNldCB2b2x0YWdlXG4iLAotCQkJCV9fZnVuY19fKTsKKwkJCXJkZXZfZXJyKHJkZXYsICJmYWlsZWQgdG8gc2V0IHZvbHRhZ2VcbiIpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTYzNiw3ICs2NjYsNyBAQAogCWlmIChyZGV2LT5kZXNjLT5vcHMtPnNldF9zdXNwZW5kX21vZGUgJiYgcnN0YXRlLT5tb2RlID4gMCkgewogCQlyZXQgPSByZGV2LT5kZXNjLT5vcHMtPnNldF9zdXNwZW5kX21vZGUocmRldiwgcnN0YXRlLT5tb2RlKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBzZXQgbW9kZVxuIiwgX19mdW5jX18pOworCQkJcmRldl9lcnIocmRldiwgImZhaWxlZCB0byBzZXQgbW9kZVxuIik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtNzE0LDI5ICs3NDQsMjcgQEAKIAlpZiAoY29uc3RyYWludHMtPnZhbGlkX21vZGVzX21hc2sgJiBSRUdVTEFUT1JfTU9ERV9TVEFOREJZKQogCQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAic3RhbmRieSIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAicmVndWxhdG9yOiAlczogJXNcbiIsIHJkZXZfZ2V0X25hbWUocmRldiksIGJ1Zik7CisJcmRldl9pbmZvKHJkZXYsICIlc1xuIiwgYnVmKTsKIH0KIAogc3RhdGljIGludCBtYWNoaW5lX2NvbnN0cmFpbnRzX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCiAJc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgKmNvbnN0cmFpbnRzKQogewogCXN0cnVjdCByZWd1bGF0b3Jfb3BzICpvcHMgPSByZGV2LT5kZXNjLT5vcHM7Ci0JY29uc3QgY2hhciAqbmFtZSA9IHJkZXZfZ2V0X25hbWUocmRldik7CiAJaW50IHJldDsKIAogCS8qIGRvIHdlIG5lZWQgdG8gYXBwbHkgdGhlIGNvbnN0cmFpbnQgdm9sdGFnZSAqLwogCWlmIChyZGV2LT5jb25zdHJhaW50cy0+YXBwbHlfdVYgJiYKLQkJcmRldi0+Y29uc3RyYWludHMtPm1pbl91ViA9PSByZGV2LT5jb25zdHJhaW50cy0+bWF4X3VWICYmCi0JCW9wcy0+c2V0X3ZvbHRhZ2UpIHsKLQkJcmV0ID0gb3BzLT5zZXRfdm9sdGFnZShyZGV2LAotCQkJcmRldi0+Y29uc3RyYWludHMtPm1pbl91ViwgcmRldi0+Y29uc3RyYWludHMtPm1heF91Vik7Ci0JCQlpZiAocmV0IDwgMCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhcHBseSAlZHVWIGNvbnN0cmFpbnQgdG8gJXNcbiIsCi0JCQkJICAgICAgIF9fZnVuY19fLAotCQkJCSAgICAgICByZGV2LT5jb25zdHJhaW50cy0+bWluX3VWLCBuYW1lKTsKLQkJCQlyZGV2LT5jb25zdHJhaW50cyA9IE5VTEw7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KKwkgICAgcmRldi0+Y29uc3RyYWludHMtPm1pbl91ViA9PSByZGV2LT5jb25zdHJhaW50cy0+bWF4X3VWKSB7CisJCXJldCA9IF9yZWd1bGF0b3JfZG9fc2V0X3ZvbHRhZ2UocmRldiwKKwkJCQkJCXJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdVYsCisJCQkJCQlyZGV2LT5jb25zdHJhaW50cy0+bWF4X3VWKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXJkZXZfZXJyKHJkZXYsICJmYWlsZWQgdG8gYXBwbHkgJWR1ViBjb25zdHJhaW50XG4iLAorCQkJCSByZGV2LT5jb25zdHJhaW50cy0+bWluX3VWKTsKKwkJCXJkZXYtPmNvbnN0cmFpbnRzID0gTlVMTDsKKwkJCXJldHVybiByZXQ7CisJCX0KIAl9CiAKIAkvKiBjb25zdHJhaW4gbWFjaGluZS1sZXZlbCB2b2x0YWdlIHNwZWNzIHRvIGZpdApAQCAtNzY1LDggKzc5Myw3IEBACiAKIAkJLyogZWxzZSByZXF1aXJlIGV4cGxpY2l0IG1hY2hpbmUtbGV2ZWwgY29uc3RyYWludHMgKi8KIAkJaWYgKGNtaW4gPD0gMCB8fCBjbWF4IDw9IDAgfHwgY21heCA8IGNtaW4pIHsKLQkJCXByX2VycigiJXM6ICVzICclcycgdm9sdGFnZSBjb25zdHJhaW50c1xuIiwKLQkJCQkgICAgICAgX19mdW5jX18sICJpbnZhbGlkIiwgbmFtZSk7CisJCQlyZGV2X2VycihyZGV2LCAiaW52YWxpZCB2b2x0YWdlIGNvbnN0cmFpbnRzXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTc4NywyMiArODE0LDE5IEBACiAKIAkJLyogZmluYWw6IFttaW5fdVYuLm1heF91Vl0gdmFsaWQgaWZmIGNvbnN0cmFpbnRzIHZhbGlkICovCiAJCWlmIChtYXhfdVYgPCBtaW5fdVYpIHsKLQkJCXByX2VycigiJXM6ICVzICclcycgdm9sdGFnZSBjb25zdHJhaW50c1xuIiwKLQkJCQkgICAgICAgX19mdW5jX18sICJ1bnN1cHBvcnRhYmxlIiwgbmFtZSk7CisJCQlyZGV2X2VycihyZGV2LCAidW5zdXBwb3J0YWJsZSB2b2x0YWdlIGNvbnN0cmFpbnRzXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJLyogdXNlIHJlZ3VsYXRvcidzIHN1YnNldCBvZiBtYWNoaW5lIGNvbnN0cmFpbnRzICovCiAJCWlmIChjb25zdHJhaW50cy0+bWluX3VWIDwgbWluX3VWKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IG92ZXJyaWRlICclcycgJXMsICVkIC0+ICVkXG4iLAotCQkJCSAgICAgICBfX2Z1bmNfXywgbmFtZSwgIm1pbl91ViIsCi0JCQkJCWNvbnN0cmFpbnRzLT5taW5fdVYsIG1pbl91Vik7CisJCQlyZGV2X2RiZyhyZGV2LCAib3ZlcnJpZGUgbWluX3VWLCAlZCAtPiAlZFxuIiwKKwkJCQkgY29uc3RyYWludHMtPm1pbl91ViwgbWluX3VWKTsKIAkJCWNvbnN0cmFpbnRzLT5taW5fdVYgPSBtaW5fdVY7CiAJCX0KIAkJaWYgKGNvbnN0cmFpbnRzLT5tYXhfdVYgPiBtYXhfdVYpIHsKLQkJCXByX2RlYnVnKCIlczogb3ZlcnJpZGUgJyVzJyAlcywgJWQgLT4gJWRcbiIsCi0JCQkJICAgICAgIF9fZnVuY19fLCBuYW1lLCAibWF4X3VWIiwKLQkJCQkJY29uc3RyYWludHMtPm1heF91ViwgbWF4X3VWKTsKKwkJCXJkZXZfZGJnKHJkZXYsICJvdmVycmlkZSBtYXhfdVYsICVkIC0+ICVkXG4iLAorCQkJCSBjb25zdHJhaW50cy0+bWF4X3VWLCBtYXhfdVYpOwogCQkJY29uc3RyYWludHMtPm1heF91ViA9IG1heF91VjsKIAkJfQogCX0KQEAgLTgyMiwyNiArODQ2LDI1IEBACiAgKiBzZXRfbW9kZS4KICAqLwogc3RhdGljIGludCBzZXRfbWFjaGluZV9jb25zdHJhaW50cyhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKLQlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqY29uc3RyYWludHMpCisJY29uc3Qgc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgKmNvbnN0cmFpbnRzKQogewogCWludCByZXQgPSAwOwotCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IHJlZ3VsYXRvcl9vcHMgKm9wcyA9IHJkZXYtPmRlc2MtPm9wczsKIAotCXJkZXYtPmNvbnN0cmFpbnRzID0gY29uc3RyYWludHM7CisJcmRldi0+Y29uc3RyYWludHMgPSBrbWVtZHVwKGNvbnN0cmFpbnRzLCBzaXplb2YoKmNvbnN0cmFpbnRzKSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZGV2LT5jb25zdHJhaW50cykKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQluYW1lID0gcmRldl9nZXRfbmFtZShyZGV2KTsKLQotCXJldCA9IG1hY2hpbmVfY29uc3RyYWludHNfdm9sdGFnZShyZGV2LCBjb25zdHJhaW50cyk7CisJcmV0ID0gbWFjaGluZV9jb25zdHJhaW50c192b2x0YWdlKHJkZXYsIHJkZXYtPmNvbnN0cmFpbnRzKTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gb3V0OwogCiAJLyogZG8gd2UgbmVlZCB0byBzZXR1cCBvdXIgc3VzcGVuZCBzdGF0ZSAqLwogCWlmIChjb25zdHJhaW50cy0+aW5pdGlhbF9zdGF0ZSkgewotCQlyZXQgPSBzdXNwZW5kX3ByZXBhcmUocmRldiwgY29uc3RyYWludHMtPmluaXRpYWxfc3RhdGUpOworCQlyZXQgPSBzdXNwZW5kX3ByZXBhcmUocmRldiwgcmRldi0+Y29uc3RyYWludHMtPmluaXRpYWxfc3RhdGUpOwogCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHNldCBzdXNwZW5kIHN0YXRlIGZvciAlc1xuIiwKLQkJCSAgICAgICBfX2Z1bmNfXywgbmFtZSk7CisJCQlyZGV2X2VycihyZGV2LCAiZmFpbGVkIHRvIHNldCBzdXNwZW5kIHN0YXRlXG4iKTsKIAkJCXJkZXYtPmNvbnN0cmFpbnRzID0gTlVMTDsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC04NDksMTcgKzg3MiwxNCBAQAogCiAJaWYgKGNvbnN0cmFpbnRzLT5pbml0aWFsX21vZGUpIHsKIAkJaWYgKCFvcHMtPnNldF9tb2RlKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBzZXRfbW9kZSBvcGVyYXRpb24gZm9yICVzXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCBuYW1lKTsKKwkJCXJkZXZfZXJyKHJkZXYsICJubyBzZXRfbW9kZSBvcGVyYXRpb25cbiIpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcmV0ID0gb3BzLT5zZXRfbW9kZShyZGV2LCBjb25zdHJhaW50cy0+aW5pdGlhbF9tb2RlKTsKKwkJcmV0ID0gb3BzLT5zZXRfbW9kZShyZGV2LCByZGV2LT5jb25zdHJhaW50cy0+aW5pdGlhbF9tb2RlKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICIlczogZmFpbGVkIHRvIHNldCBpbml0aWFsIG1vZGUgZm9yICVzOiAlZFxuIiwKLQkJCSAgICAgICBfX2Z1bmNfXywgbmFtZSwgcmV0KTsKKwkJCXJkZXZfZXJyKHJkZXYsICJmYWlsZWQgdG8gc2V0IGluaXRpYWwgbW9kZTogJWRcbiIsIHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTg2NywxMSArODg3LDExIEBACiAJLyogSWYgdGhlIGNvbnN0cmFpbnRzIHNheSB0aGUgcmVndWxhdG9yIHNob3VsZCBiZSBvbiBhdCB0aGlzIHBvaW50CiAJICogYW5kIHdlIGhhdmUgY29udHJvbCB0aGVuIG1ha2Ugc3VyZSBpdCBpcyBlbmFibGVkLgogCSAqLwotCWlmICgoY29uc3RyYWludHMtPmFsd2F5c19vbiB8fCBjb25zdHJhaW50cy0+Ym9vdF9vbikgJiYgb3BzLT5lbmFibGUpIHsKKwlpZiAoKHJkZXYtPmNvbnN0cmFpbnRzLT5hbHdheXNfb24gfHwgcmRldi0+Y29uc3RyYWludHMtPmJvb3Rfb24pICYmCisJICAgIG9wcy0+ZW5hYmxlKSB7CiAJCXJldCA9IG9wcy0+ZW5hYmxlKHJkZXYpOwogCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGVuYWJsZSAlc1xuIiwKLQkJCSAgICAgICBfX2Z1bmNfXywgbmFtZSk7CisJCQlyZGV2X2VycihyZGV2LCAiZmFpbGVkIHRvIGVuYWJsZVxuIik7CiAJCQlyZGV2LT5jb25zdHJhaW50cyA9IE5VTEw7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtODk5LDkgKzkxOSw4IEBACiAJZXJyID0gc3lzZnNfY3JlYXRlX2xpbmsoJnJkZXYtPmRldi5rb2JqLCAmc3VwcGx5X3JkZXYtPmRldi5rb2JqLAogCQkJCSJzdXBwbHkiKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIiVzOiBjb3VsZCBub3QgYWRkIGRldmljZSBsaW5rICVzIGVyciAlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBzdXBwbHlfcmRldi0+ZGV2LmtvYmoubmFtZSwgZXJyKTsKKwkJcmRldl9lcnIocmRldiwgImNvdWxkIG5vdCBhZGQgZGV2aWNlIGxpbmsgJXMgZXJyICVkXG4iLAorCQkJIHN1cHBseV9yZGV2LT5kZXYua29iai5uYW1lLCBlcnIpOwogCQkgICAgICAgZ290byBvdXQ7CiAJfQogCXJkZXYtPnN1cHBseSA9IHN1cHBseV9yZGV2OwpAQCAtOTU3LDEwICs5NzYsMTAgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWRldl9kYmcoY29uc3VtZXJfZGV2LCAiJXMvJXMgaXMgJyVzJyBzdXBwbHk7IGZhaWwgJXMvJXNcbiIsCi0JCQkJZGV2X25hbWUoJm5vZGUtPnJlZ3VsYXRvci0+ZGV2KSwKLQkJCQlub2RlLT5yZWd1bGF0b3ItPmRlc2MtPm5hbWUsCi0JCQkJc3VwcGx5LAotCQkJCWRldl9uYW1lKCZyZGV2LT5kZXYpLCByZGV2X2dldF9uYW1lKHJkZXYpKTsKKwkJCWRldl9uYW1lKCZub2RlLT5yZWd1bGF0b3ItPmRldiksCisJCQlub2RlLT5yZWd1bGF0b3ItPmRlc2MtPm5hbWUsCisJCQlzdXBwbHksCisJCQlkZXZfbmFtZSgmcmRldi0+ZGV2KSwgcmRldl9nZXRfbmFtZShyZGV2KSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0xMDMxLDggKzEwNTAsNyBAQAogCQlyZWd1bGF0b3ItPmRldl9hdHRyLnNob3cgPSBkZXZpY2VfcmVxdWVzdGVkX3VBX3Nob3c7CiAJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZyZWd1bGF0b3ItPmRldl9hdHRyKTsKIAkJaWYgKGVyciA8IDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjb3VsZCBub3QgYWRkIHJlZ3VsYXRvcl9kZXYiCi0JCQkJIiBsb2FkIHN5c2ZzXG4iLCBfX2Z1bmNfXyk7CisJCQlyZGV2X3dhcm4ocmRldiwgImNvdWxkIG5vdCBhZGQgcmVndWxhdG9yX2RldiByZXF1ZXN0ZWQgbWljcm9hbXBzIHN5c2ZzIGVudHJ5XG4iKTsKIAkJCWdvdG8gYXR0cl9uYW1lX2VycjsKIAkJfQogCkBAIC0xMDQ5LDkgKzEwNjcsOCBAQAogCQllcnIgPSBzeXNmc19jcmVhdGVfbGluaygmcmRldi0+ZGV2LmtvYmosICZkZXYtPmtvYmosCiAJCQkJCWJ1Zik7CiAJCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiJXM6IGNvdWxkIG5vdCBhZGQgZGV2aWNlIGxpbmsgJXMgZXJyICVkXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCBkZXYtPmtvYmoubmFtZSwgZXJyKTsKKwkJCXJkZXZfd2FybihyZGV2LCAiY291bGQgbm90IGFkZCBkZXZpY2UgbGluayAlcyBlcnIgJWRcbiIsCisJCQkJICBkZXYtPmtvYmoubmFtZSwgZXJyKTsKIAkJCWdvdG8gbGlua19uYW1lX2VycjsKIAkJfQogCX0KQEAgLTEwODgsNyArMTEwNSw3IEBACiAJaW50IHJldDsKIAogCWlmIChpZCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmVndWxhdG9yOiBnZXQoKSB3aXRoIG5vIGlkZW50aWZpZXJcbiIpOworCQlwcl9lcnIoImdldCgpIHdpdGggbm8gaWRlbnRpZmllclxuIik7CiAJCXJldHVybiByZWd1bGF0b3I7CiAJfQogCkBAIC0xMTIyLDggKzExMzksOCBAQAogCSAqIHN1YnN0aXR1dGUgaW4gYSBkdW1teSByZWd1bGF0b3Igc28gY29uc3VtZXJzIGNhbiBjb250aW51ZS4KIAkgKi8KIAlpZiAoIWhhc19mdWxsX2NvbnN0cmFpbnRzKSB7Ci0JCXByX3dhcm5pbmcoIiVzIHN1cHBseSAlcyBub3QgZm91bmQsIHVzaW5nIGR1bW15IHJlZ3VsYXRvclxuIiwKLQkJCSAgIGRldm5hbWUsIGlkKTsKKwkJcHJfd2FybigiJXMgc3VwcGx5ICVzIG5vdCBmb3VuZCwgdXNpbmcgZHVtbXkgcmVndWxhdG9yXG4iLAorCQkJZGV2bmFtZSwgaWQpOwogCQlyZGV2ID0gZHVtbXlfcmVndWxhdG9yX3JkZXY7CiAJCWdvdG8gZm91bmQ7CiAJfQpAQCAtMTI3NCw4ICsxMjkxLDcgQEAKIAkJCXJldCA9IF9yZWd1bGF0b3JfZW5hYmxlKHJkZXYtPnN1cHBseSk7CiAJCQltdXRleF91bmxvY2soJnJkZXYtPnN1cHBseS0+bXV0ZXgpOwogCQkJaWYgKHJldCA8IDApIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gZW5hYmxlICVzOiAlZFxuIiwKLQkJCQkgICAgICAgX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldiksIHJldCk7CisJCQkJcmRldl9lcnIocmRldiwgImZhaWxlZCB0byBlbmFibGU6ICVkXG4iLCByZXQpOwogCQkJCXJldHVybiByZXQ7CiAJCQl9CiAJCX0KQEAgLTEzMDIsMTMgKzEzMTgsMTMgQEAKIAkJCWlmIChyZXQgPj0gMCkgewogCQkJCWRlbGF5ID0gcmV0OwogCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJCSIlczogZW5hYmxlX3RpbWUoKSBmYWlsZWQgZm9yICVzOiAlZFxuIiwKLQkJCQkJX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldiksCi0JCQkJCXJldCk7CisJCQkJcmRldl93YXJuKHJkZXYsICJlbmFibGVfdGltZSgpIGZhaWxlZDogJWRcbiIsCisJCQkJCSAgIHJldCk7CiAJCQkJZGVsYXkgPSAwOwogCQkJfQogCisJCQl0cmFjZV9yZWd1bGF0b3JfZW5hYmxlKHJkZXZfZ2V0X25hbWUocmRldikpOworCiAJCQkvKiBBbGxvdyB0aGUgcmVndWxhdG9yIHRvIHJhbXA7IGl0IHdvdWxkIGJlIHVzZWZ1bAogCQkJICogdG8gZXh0ZW5kIHRoaXMgZm9yIGJ1bGsgb3BlcmF0aW9ucyBzbyB0aGF0IHRoZQogCQkJICogcmVndWxhdG9ycyBjYW4gcmFtcCB0b2dldGhlci4gICovCkBAIC0xMzE2LDYgKzEzMzIsOCBAQAogCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldDsKIAorCQkJdHJhY2VfcmVndWxhdG9yX2VuYWJsZV9kZWxheShyZGV2X2dldF9uYW1lKHJkZXYpKTsKKwogCQkJaWYgKGRlbGF5ID49IDEwMDApIHsKIAkJCQltZGVsYXkoZGVsYXkgLyAxMDAwKTsKIAkJCQl1ZGVsYXkoZGVsYXkgJSAxMDAwKTsKQEAgLTEzMjMsOSArMTM0MSwxMCBAQAogCQkJCXVkZWxheShkZWxheSk7CiAJCQl9CiAKKwkJCXRyYWNlX3JlZ3VsYXRvcl9lbmFibGVfY29tcGxldGUocmRldl9nZXRfbmFtZShyZGV2KSk7CisKIAkJfSBlbHNlIGlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpc19lbmFibGVkKCkgZmFpbGVkIGZvciAlczogJWRcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldiksIHJldCk7CisJCQlyZGV2X2VycihyZGV2LCAiaXNfZW5hYmxlZCgpIGZhaWxlZDogJWRcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCS8qIEZhbGx0aHJvdWdoIG9uIHBvc2l0aXZlIHJldHVybiB2YWx1ZXMgLSBhbHJlYWR5IGVuYWJsZWQgKi8KQEAgLTEzNjcsOCArMTM4Niw3IEBACiAJKnN1cHBseV9yZGV2X3B0ciA9IE5VTEw7CiAKIAlpZiAoV0FSTihyZGV2LT51c2VfY291bnQgPD0gMCwKLQkJCSJ1bmJhbGFuY2VkIGRpc2FibGVzIGZvciAlc1xuIiwKLQkJCXJkZXZfZ2V0X25hbWUocmRldikpKQorCQkgInVuYmFsYW5jZWQgZGlzYWJsZXMgZm9yICVzXG4iLCByZGV2X2dldF9uYW1lKHJkZXYpKSkKIAkJcmV0dXJuIC1FSU87CiAKIAkvKiBhcmUgd2UgdGhlIGxhc3QgdXNlciBhbmQgcGVybWl0dGVkIHRvIGRpc2FibGUgPyAqLwpAQCAtMTM3OCwxMyArMTM5NiwxNiBAQAogCQkvKiB3ZSBhcmUgbGFzdCB1c2VyICovCiAJCWlmIChfcmVndWxhdG9yX2Nhbl9jaGFuZ2Vfc3RhdHVzKHJkZXYpICYmCiAJCSAgICByZGV2LT5kZXNjLT5vcHMtPmRpc2FibGUpIHsKKwkJCXRyYWNlX3JlZ3VsYXRvcl9kaXNhYmxlKHJkZXZfZ2V0X25hbWUocmRldikpOworCiAJCQlyZXQgPSByZGV2LT5kZXNjLT5vcHMtPmRpc2FibGUocmRldik7CiAJCQlpZiAocmV0IDwgMCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBkaXNhYmxlICVzXG4iLAotCQkJCSAgICAgICBfX2Z1bmNfXywgcmRldl9nZXRfbmFtZShyZGV2KSk7CisJCQkJcmRldl9lcnIocmRldiwgImZhaWxlZCB0byBkaXNhYmxlXG4iKTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQogCisJCQl0cmFjZV9yZWd1bGF0b3JfZGlzYWJsZV9jb21wbGV0ZShyZGV2X2dldF9uYW1lKHJkZXYpKTsKKwogCQkJX25vdGlmaWVyX2NhbGxfY2hhaW4ocmRldiwgUkVHVUxBVE9SX0VWRU5UX0RJU0FCTEUsCiAJCQkJCSAgICAgTlVMTCk7CiAJCX0KQEAgLTE0NTEsOCArMTQ3Miw3IEBACiAJCS8qIGFoIHdlbGwsIHdobyB3YW50cyB0byBsaXZlIGZvcmV2ZXIuLi4gKi8KIAkJcmV0ID0gcmRldi0+ZGVzYy0+b3BzLT5kaXNhYmxlKHJkZXYpOwogCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGZvcmNlIGRpc2FibGUgJXNcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldikpOworCQkJcmRldl9lcnIocmRldiwgImZhaWxlZCB0byBmb3JjZSBkaXNhYmxlXG4iKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJLyogbm90aWZ5IG90aGVyIGNvbnN1bWVycyB0aGF0IHBvd2VyIGhhcyBiZWVuIGZvcmNlZCBvZmYgKi8KQEAgLTE2MDUsNiArMTYyNSw2MiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9yZWd1bGF0b3JfZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCWludCByZXQ7CisJdW5zaWduZWQgaW50IHNlbGVjdG9yOworCisJdHJhY2VfcmVndWxhdG9yX3NldF92b2x0YWdlKHJkZXZfZ2V0X25hbWUocmRldiksIG1pbl91ViwgbWF4X3VWKTsKKworCWlmIChyZGV2LT5kZXNjLT5vcHMtPnNldF92b2x0YWdlKSB7CisJCXJldCA9IHJkZXYtPmRlc2MtPm9wcy0+c2V0X3ZvbHRhZ2UocmRldiwgbWluX3VWLCBtYXhfdVYsCisJCQkJCQkgICAmc2VsZWN0b3IpOworCisJCWlmIChyZGV2LT5kZXNjLT5vcHMtPmxpc3Rfdm9sdGFnZSkKKwkJCXNlbGVjdG9yID0gcmRldi0+ZGVzYy0+b3BzLT5saXN0X3ZvbHRhZ2UocmRldiwKKwkJCQkJCQkJIHNlbGVjdG9yKTsKKwkJZWxzZQorCQkJc2VsZWN0b3IgPSAtMTsKKwl9IGVsc2UgaWYgKHJkZXYtPmRlc2MtPm9wcy0+c2V0X3ZvbHRhZ2Vfc2VsKSB7CisJCWludCBiZXN0X3ZhbCA9IElOVF9NQVg7CisJCWludCBpOworCisJCXNlbGVjdG9yID0gMDsKKworCQkvKiBGaW5kIHRoZSBzbWFsbGVzdCB2b2x0YWdlIHRoYXQgZmFsbHMgd2l0aGluIHRoZSBzcGVjaWZpZWQKKwkJICogcmFuZ2UuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcmRldi0+ZGVzYy0+bl92b2x0YWdlczsgaSsrKSB7CisJCQlyZXQgPSByZGV2LT5kZXNjLT5vcHMtPmxpc3Rfdm9sdGFnZShyZGV2LCBpKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAocmV0IDwgYmVzdF92YWwgJiYgcmV0ID49IG1pbl91ViAmJiByZXQgPD0gbWF4X3VWKSB7CisJCQkJYmVzdF92YWwgPSByZXQ7CisJCQkJc2VsZWN0b3IgPSBpOworCQkJfQorCQl9CisKKwkJaWYgKGJlc3RfdmFsICE9IElOVF9NQVgpIHsKKwkJCXJldCA9IHJkZXYtPmRlc2MtPm9wcy0+c2V0X3ZvbHRhZ2Vfc2VsKHJkZXYsIHNlbGVjdG9yKTsKKwkJCXNlbGVjdG9yID0gYmVzdF92YWw7CisJCX0gZWxzZSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlpZiAocmV0ID09IDApCisJCV9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsIFJFR1VMQVRPUl9FVkVOVF9WT0xUQUdFX0NIQU5HRSwKKwkJCQkgICAgIE5VTEwpOworCisJdHJhY2VfcmVndWxhdG9yX3NldF92b2x0YWdlX2NvbXBsZXRlKHJkZXZfZ2V0X25hbWUocmRldiksIHNlbGVjdG9yKTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qKgogICogcmVndWxhdG9yX3NldF92b2x0YWdlIC0gc2V0IHJlZ3VsYXRvciBvdXRwdXQgdm9sdGFnZQogICogQHJlZ3VsYXRvcjogcmVndWxhdG9yIHNvdXJjZQpAQCAtMTYyNiwxMiArMTcwMiwyMCBAQAogaW50IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IsIGludCBtaW5fdVYsIGludCBtYXhfdVYpCiB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSByZWd1bGF0b3ItPnJkZXY7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJnJkZXYtPm11dGV4KTsKIAorCS8qIElmIHdlJ3JlIHNldHRpbmcgdGhlIHNhbWUgcmFuZ2UgYXMgbGFzdCB0aW1lIHRoZSBjaGFuZ2UKKwkgKiBzaG91bGQgYmUgYSBub29wIChzb21lIGNwdWZyZXEgaW1wbGVtZW50YXRpb25zIHVzZSB0aGUgc2FtZQorCSAqIHZvbHRhZ2UgZm9yIG11bHRpcGxlIGZyZXF1ZW5jaWVzLCBmb3IgZXhhbXBsZSkuCisJICovCisJaWYgKHJlZ3VsYXRvci0+bWluX3VWID09IG1pbl91ViAmJiByZWd1bGF0b3ItPm1heF91ViA9PSBtYXhfdVYpCisJCWdvdG8gb3V0OworCiAJLyogc2FuaXR5IGNoZWNrICovCi0JaWYgKCFyZGV2LT5kZXNjLT5vcHMtPnNldF92b2x0YWdlKSB7CisJaWYgKCFyZGV2LT5kZXNjLT5vcHMtPnNldF92b2x0YWdlICYmCisJICAgICFyZGV2LT5kZXNjLT5vcHMtPnNldF92b2x0YWdlX3NlbCkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNjQyLDE4ICsxNzI2LDc2IEBACiAJCWdvdG8gb3V0OwogCXJlZ3VsYXRvci0+bWluX3VWID0gbWluX3VWOwogCXJlZ3VsYXRvci0+bWF4X3VWID0gbWF4X3VWOwotCXJldCA9IHJkZXYtPmRlc2MtPm9wcy0+c2V0X3ZvbHRhZ2UocmRldiwgbWluX3VWLCBtYXhfdVYpOworCisJcmV0ID0gcmVndWxhdG9yX2NoZWNrX2NvbnN1bWVycyhyZGV2LCAmbWluX3VWLCAmbWF4X3VWKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBfcmVndWxhdG9yX2RvX3NldF92b2x0YWdlKHJkZXYsIG1pbl91ViwgbWF4X3VWKTsKIAogb3V0OgotCV9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsIFJFR1VMQVRPUl9FVkVOVF9WT0xUQUdFX0NIQU5HRSwgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9zZXRfdm9sdGFnZSk7CiAKKy8qKgorICogcmVndWxhdG9yX3N5bmNfdm9sdGFnZSAtIHJlLWFwcGx5IGxhc3QgcmVndWxhdG9yIG91dHB1dCB2b2x0YWdlCisgKiBAcmVndWxhdG9yOiByZWd1bGF0b3Igc291cmNlCisgKgorICogUmUtYXBwbHkgdGhlIGxhc3QgY29uZmlndXJlZCB2b2x0YWdlLiAgVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkCisgKiB3aGVyZSBzb21lIGV4dGVybmFsIGNvbnRyb2wgc291cmNlIHRoZSBjb25zdW1lciBpcyBjb29wZXJhdGluZyB3aXRoCisgKiBoYXMgY2F1c2VkIHRoZSBjb25maWd1cmVkIHZvbHRhZ2UgdG8gY2hhbmdlLgorICovCitpbnQgcmVndWxhdG9yX3N5bmNfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSByZWd1bGF0b3ItPnJkZXY7CisJaW50IHJldCwgbWluX3VWLCBtYXhfdVY7CisKKwltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7CisKKwlpZiAoIXJkZXYtPmRlc2MtPm9wcy0+c2V0X3ZvbHRhZ2UgJiYKKwkgICAgIXJkZXYtPmRlc2MtPm9wcy0+c2V0X3ZvbHRhZ2Vfc2VsKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFRoaXMgaXMgb25seSBnb2luZyB0byB3b3JrIGlmIHdlJ3ZlIGhhZCBhIHZvbHRhZ2UgY29uZmlndXJlZC4gKi8KKwlpZiAoIXJlZ3VsYXRvci0+bWluX3VWICYmICFyZWd1bGF0b3ItPm1heF91VikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwltaW5fdVYgPSByZWd1bGF0b3ItPm1pbl91VjsKKwltYXhfdVYgPSByZWd1bGF0b3ItPm1heF91VjsKKworCS8qIFRoaXMgc2hvdWxkIGJlIGEgcGFyYW5vaWEgY2hlY2suLi4gKi8KKwlyZXQgPSByZWd1bGF0b3JfY2hlY2tfdm9sdGFnZShyZGV2LCAmbWluX3VWLCAmbWF4X3VWKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSByZWd1bGF0b3JfY2hlY2tfY29uc3VtZXJzKHJkZXYsICZtaW5fdVYsICZtYXhfdVYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IF9yZWd1bGF0b3JfZG9fc2V0X3ZvbHRhZ2UocmRldiwgbWluX3VWLCBtYXhfdVYpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9zeW5jX3ZvbHRhZ2UpOworCiBzdGF0aWMgaW50IF9yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7Ci0JLyogc2FuaXR5IGNoZWNrICovCisJaW50IHNlbDsKKworCWlmIChyZGV2LT5kZXNjLT5vcHMtPmdldF92b2x0YWdlX3NlbCkgeworCQlzZWwgPSByZGV2LT5kZXNjLT5vcHMtPmdldF92b2x0YWdlX3NlbChyZGV2KTsKKwkJaWYgKHNlbCA8IDApCisJCQlyZXR1cm4gc2VsOworCQlyZXR1cm4gcmRldi0+ZGVzYy0+b3BzLT5saXN0X3ZvbHRhZ2UocmRldiwgc2VsKTsKKwl9CiAJaWYgKHJkZXYtPmRlc2MtPm9wcy0+Z2V0X3ZvbHRhZ2UpCiAJCXJldHVybiByZGV2LT5kZXNjLT5vcHMtPmdldF92b2x0YWdlKHJkZXYpOwogCWVsc2UKQEAgLTE4ODAsMjEgKzIwMjIsMjAgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBnZXQgb3V0cHV0IHZvbHRhZ2UgKi8KLQlvdXRwdXRfdVYgPSByZGV2LT5kZXNjLT5vcHMtPmdldF92b2x0YWdlKHJkZXYpOworCW91dHB1dF91ViA9IF9yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UocmRldik7CiAJaWYgKG91dHB1dF91ViA8PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgb3V0cHV0IHZvbHRhZ2UgZm91bmQgZm9yICVzXG4iLAotCQkJX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldikpOworCQlyZGV2X2VycihyZGV2LCAiaW52YWxpZCBvdXRwdXQgdm9sdGFnZSBmb3VuZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAogCS8qIGdldCBpbnB1dCB2b2x0YWdlICovCi0JaWYgKHJkZXYtPnN1cHBseSAmJiByZGV2LT5zdXBwbHktPmRlc2MtPm9wcy0+Z2V0X3ZvbHRhZ2UpCi0JCWlucHV0X3VWID0gcmRldi0+c3VwcGx5LT5kZXNjLT5vcHMtPmdldF92b2x0YWdlKHJkZXYtPnN1cHBseSk7Ci0JZWxzZQorCWlucHV0X3VWID0gMDsKKwlpZiAocmRldi0+c3VwcGx5KQorCQlpbnB1dF91ViA9IF9yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UocmRldi0+c3VwcGx5KTsKKwlpZiAoaW5wdXRfdVYgPD0gMCkKIAkJaW5wdXRfdVYgPSByZGV2LT5jb25zdHJhaW50cy0+aW5wdXRfdVY7CiAJaWYgKGlucHV0X3VWIDw9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBpbnB1dCB2b2x0YWdlIGZvdW5kIGZvciAlc1xuIiwKLQkJCV9fZnVuY19fLCByZGV2X2dldF9uYW1lKHJkZXYpKTsKKwkJcmRldl9lcnIocmRldiwgImludmFsaWQgaW5wdXQgdm9sdGFnZSBmb3VuZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTkwNywxNiArMjA0OCwxNCBAQAogCQkJCQkJIHRvdGFsX3VBX2xvYWQpOwogCXJldCA9IHJlZ3VsYXRvcl9jaGVja19tb2RlKHJkZXYsIG1vZGUpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBnZXQgb3B0aW11bSBtb2RlIGZvciAlcyBAIgotCQkJIiAlZCB1QSAlZCAtPiAlZCB1VlxuIiwgX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldiksCi0JCQl0b3RhbF91QV9sb2FkLCBpbnB1dF91Viwgb3V0cHV0X3VWKTsKKwkJcmRldl9lcnIocmRldiwgImZhaWxlZCB0byBnZXQgb3B0aW11bSBtb2RlIEAgJWQgdUEgJWQgLT4gJWQgdVZcbiIsCisJCQkgdG90YWxfdUFfbG9hZCwgaW5wdXRfdVYsIG91dHB1dF91Vik7CiAJCWdvdG8gb3V0OwogCX0KIAogCXJldCA9IHJkZXYtPmRlc2MtPm9wcy0+c2V0X21vZGUocmRldiwgbW9kZSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHNldCBvcHRpbXVtIG1vZGUgJXggZm9yICVzXG4iLAotCQkJX19mdW5jX18sIG1vZGUsIHJkZXZfZ2V0X25hbWUocmRldikpOworCQlyZGV2X2VycihyZGV2LCAiZmFpbGVkIHRvIHNldCBvcHRpbXVtIG1vZGUgJXhcbiIsIG1vZGUpOwogCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gbW9kZTsKQEAgLTIwNDcsNyArMjE4Niw3IEBACiAJcmV0dXJuIDA7CiAKIGVycjoKLQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBlbmFibGUgJXM6ICVkXG4iLCBjb25zdW1lcnNbaV0uc3VwcGx5LCByZXQpOworCXByX2VycigiRmFpbGVkIHRvIGVuYWJsZSAlczogJWRcbiIsIGNvbnN1bWVyc1tpXS5zdXBwbHksIHJldCk7CiAJZm9yICgtLWk7IGkgPj0gMDsgLS1pKQogCQlyZWd1bGF0b3JfZGlzYWJsZShjb25zdW1lcnNbaV0uY29uc3VtZXIpOwogCkBAIC0yMDgyLDggKzIyMjEsNyBAQAogCXJldHVybiAwOwogCiBlcnI6Ci0JcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZGlzYWJsZSAlczogJWRcbiIsIGNvbnN1bWVyc1tpXS5zdXBwbHksCi0JICAgICAgIHJldCk7CisJcHJfZXJyKCJGYWlsZWQgdG8gZGlzYWJsZSAlczogJWRcbiIsIGNvbnN1bWVyc1tpXS5zdXBwbHksIHJldCk7CiAJZm9yICgtLWk7IGkgPj0gMDsgLS1pKQogCQlyZWd1bGF0b3JfZW5hYmxlKGNvbnN1bWVyc1tpXS5jb25zdW1lcik7CiAKQEAgLTIxNjYsNyArMjMwNCw3IEBACiAJaW50CQkJc3RhdHVzID0gMDsKIAogCS8qIHNvbWUgYXR0cmlidXRlcyBuZWVkIHNwZWNpZmljIG1ldGhvZHMgdG8gYmUgZGlzcGxheWVkICovCi0JaWYgKG9wcy0+Z2V0X3ZvbHRhZ2UpIHsKKwlpZiAob3BzLT5nZXRfdm9sdGFnZSB8fCBvcHMtPmdldF92b2x0YWdlX3NlbCkgewogCQlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWljcm92b2x0cyk7CiAJCWlmIChzdGF0dXMgPCAwKQogCQkJcmV0dXJuIHN0YXR1czsKQEAgLTIyMDcsNyArMjM0NSw3IEBACiAJCXJldHVybiBzdGF0dXM7CiAKIAkvKiBjb25zdHJhaW50cyBuZWVkIHNwZWNpZmljIHN1cHBvcnRpbmcgbWV0aG9kcyAqLwotCWlmIChvcHMtPnNldF92b2x0YWdlKSB7CisJaWYgKG9wcy0+c2V0X3ZvbHRhZ2UgfHwgb3BzLT5zZXRfdm9sdGFnZV9zZWwpIHsKIAkJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21pbl9taWNyb3ZvbHRzKTsKIAkJaWYgKHN0YXR1cyA8IDApCiAJCQlyZXR1cm4gc3RhdHVzOwpAQCAtMjI3MSw2ICsyNDA5LDIzIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorc3RhdGljIHZvaWQgcmRldl9pbml0X2RlYnVnZnMoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJcmRldi0+ZGVidWdmcyA9IGRlYnVnZnNfY3JlYXRlX2RpcihyZGV2X2dldF9uYW1lKHJkZXYpLCBkZWJ1Z2ZzX3Jvb3QpOworCWlmIChJU19FUlIocmRldi0+ZGVidWdmcykgfHwgIXJkZXYtPmRlYnVnZnMpIHsKKwkJcmRldl93YXJuKHJkZXYsICJGYWlsZWQgdG8gY3JlYXRlIGRlYnVnZnMgZGlyZWN0b3J5XG4iKTsKKwkJcmRldi0+ZGVidWdmcyA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwlkZWJ1Z2ZzX2NyZWF0ZV91MzIoInVzZV9jb3VudCIsIDA0NDQsIHJkZXYtPmRlYnVnZnMsCisJCQkgICAmcmRldi0+dXNlX2NvdW50KTsKKwlkZWJ1Z2ZzX2NyZWF0ZV91MzIoIm9wZW5fY291bnQiLCAwNDQ0LCByZGV2LT5kZWJ1Z2ZzLAorCQkJICAgJnJkZXYtPm9wZW5fY291bnQpOworI2VuZGlmCit9CisKIC8qKgogICogcmVndWxhdG9yX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgcmVndWxhdG9yCiAgKiBAcmVndWxhdG9yX2Rlc2M6IHJlZ3VsYXRvciB0byByZWdpc3RlcgpAQCAtMjI4Miw3ICsyNDM3LDcgQEAKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCiBzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqcmVndWxhdG9yX2Rlc2MsCi0Jc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhLAorCXN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YSwKIAl2b2lkICpkcml2ZXJfZGF0YSkKIHsKIAlzdGF0aWMgYXRvbWljX3QgcmVndWxhdG9yX25vID0gQVRPTUlDX0lOSVQoMCk7CkBAIC0yMzAyLDYgKzI0NTcsMjIgQEAKIAlpZiAoIWluaXRfZGF0YSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKKwkvKiBPbmx5IG9uZSBvZiBlYWNoIHNob3VsZCBiZSBpbXBsZW1lbnRlZCAqLworCVdBUk5fT04ocmVndWxhdG9yX2Rlc2MtPm9wcy0+Z2V0X3ZvbHRhZ2UgJiYKKwkJcmVndWxhdG9yX2Rlc2MtPm9wcy0+Z2V0X3ZvbHRhZ2Vfc2VsKTsKKwlXQVJOX09OKHJlZ3VsYXRvcl9kZXNjLT5vcHMtPnNldF92b2x0YWdlICYmCisJCXJlZ3VsYXRvcl9kZXNjLT5vcHMtPnNldF92b2x0YWdlX3NlbCk7CisKKwkvKiBJZiB3ZSdyZSB1c2luZyBzZWxlY3RvcnMgd2UgbXVzdCBpbXBsZW1lbnQgbGlzdF92b2x0YWdlLiAqLworCWlmIChyZWd1bGF0b3JfZGVzYy0+b3BzLT5nZXRfdm9sdGFnZV9zZWwgJiYKKwkgICAgIXJlZ3VsYXRvcl9kZXNjLT5vcHMtPmxpc3Rfdm9sdGFnZSkgeworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisJaWYgKHJlZ3VsYXRvcl9kZXNjLT5vcHMtPnNldF92b2x0YWdlX3NlbCAmJgorCSAgICAhcmVndWxhdG9yX2Rlc2MtPm9wcy0+bGlzdF92b2x0YWdlKSB7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKwogCXJkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yX2RldiksIEdGUF9LRVJORUwpOwogCWlmIChyZGV2ID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMjM5OSw2ICsyNTcwLDggQEAKIAl9CiAKIAlsaXN0X2FkZCgmcmRldi0+bGlzdCwgJnJlZ3VsYXRvcl9saXN0KTsKKworCXJkZXZfaW5pdF9kZWJ1Z2ZzKHJkZXYpOwogb3V0OgogCW11dGV4X3VubG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwogCXJldHVybiByZGV2OwpAQCAtMjQzMSwxMiArMjYwNCwxNiBAQAogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHJkZXYtPmRlYnVnZnMpOworI2VuZGlmCiAJV0FSTl9PTihyZGV2LT5vcGVuX2NvdW50KTsKIAl1bnNldF9yZWd1bGF0b3Jfc3VwcGxpZXMocmRldik7CiAJbGlzdF9kZWwoJnJkZXYtPmxpc3QpOwogCWlmIChyZGV2LT5zdXBwbHkpCiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZyZGV2LT5kZXYua29iaiwgInN1cHBseSIpOwogCWRldmljZV91bnJlZ2lzdGVyKCZyZGV2LT5kZXYpOworCWtmcmVlKHJkZXYtPmNvbnN0cmFpbnRzKTsKIAltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl91bnJlZ2lzdGVyKTsKQEAgLTI0NjUsOCArMjY0Miw3IEBACiAJCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOwogCiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcHJlcGFyZSAlc1xuIiwKLQkJCQlfX2Z1bmNfXywgcmRldl9nZXRfbmFtZShyZGV2KSk7CisJCQlyZGV2X2VycihyZGV2LCAiZmFpbGVkIHRvIHByZXBhcmVcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC0yNTcyLDEwICsyNzQ4LDE2IEBACiB7CiAJaW50IHJldDsKIAotCXByaW50ayhLRVJOX0lORk8gInJlZ3VsYXRvcjogY29yZSB2ZXJzaW9uICVzXG4iLCBSRUdVTEFUT1JfVkVSU0lPTik7Ci0KIAlyZXQgPSBjbGFzc19yZWdpc3RlcigmcmVndWxhdG9yX2NsYXNzKTsKIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworCWRlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigicmVndWxhdG9yIiwgTlVMTCk7CisJaWYgKElTX0VSUihkZWJ1Z2ZzX3Jvb3QpIHx8ICFkZWJ1Z2ZzX3Jvb3QpIHsKKwkJcHJfd2FybigicmVndWxhdG9yOiBGYWlsZWQgdG8gY3JlYXRlIGRlYnVnZnMgZGlyZWN0b3J5XG4iKTsKKwkJZGVidWdmc19yb290ID0gTlVMTDsKKwl9CisjZW5kaWYKKwogCXJlZ3VsYXRvcl9kdW1teV9pbml0KCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjU5MCw3ICsyNzcyLDYgQEAKIAlzdHJ1Y3QgcmVndWxhdG9yX29wcyAqb3BzOwogCXN0cnVjdCByZWd1bGF0aW9uX2NvbnN0cmFpbnRzICpjOwogCWludCBlbmFibGVkLCByZXQ7Ci0JY29uc3QgY2hhciAqbmFtZTsKIAogCW11dGV4X2xvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKIApAQCAtMjYwMiw4ICsyNzgzLDYgQEAKIAkJb3BzID0gcmRldi0+ZGVzYy0+b3BzOwogCQljID0gcmRldi0+Y29uc3RyYWludHM7CiAKLQkJbmFtZSA9IHJkZXZfZ2V0X25hbWUocmRldik7Ci0KIAkJaWYgKCFvcHMtPmRpc2FibGUgfHwgKGMgJiYgYy0+YWx3YXlzX29uKSkKIAkJCWNvbnRpbnVlOwogCkBAIC0yNjI0LDEzICsyODAzLDEwIEBACiAJCWlmIChoYXNfZnVsbF9jb25zdHJhaW50cykgewogCQkJLyogV2UgbG9nIHNpbmNlIHRoaXMgbWF5IGtpbGwgdGhlIHN5c3RlbSBpZiBpdAogCQkJICogZ29lcyB3cm9uZy4gKi8KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkaXNhYmxpbmcgJXNcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIG5hbWUpOworCQkJcmRldl9pbmZvKHJkZXYsICJkaXNhYmxpbmdcbiIpOwogCQkJcmV0ID0gb3BzLT5kaXNhYmxlKHJkZXYpOwogCQkJaWYgKHJldCAhPSAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICIlczogY291bGRuJ3QgZGlzYWJsZSAlczogJWRcbiIsCi0JCQkJICAgICAgIF9fZnVuY19fLCBuYW1lLCByZXQpOworCQkJCXJkZXZfZXJyKHJkZXYsICJjb3VsZG4ndCBkaXNhYmxlOiAlZFxuIiwgcmV0KTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIFRoZSBpbnRlbnRpb24gaXMgdGhhdCBpbiBmdXR1cmUgd2Ugd2lsbApAQCAtMjYzOCw5ICsyODE0LDcgQEAKIAkJCSAqIHNvIHdhcm4gZXZlbiBpZiB3ZSBhcmVuJ3QgZ29pbmcgdG8gZG8KIAkJCSAqIGFueXRoaW5nIGhlcmUuCiAJCQkgKi8KLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiJXM6IGluY29tcGxldGUgY29uc3RyYWludHMsIGxlYXZpbmcgJXMgb25cbiIsCi0JCQkgICAgICAgX19mdW5jX18sIG5hbWUpOworCQkJcmRldl93YXJuKHJkZXYsICJpbmNvbXBsZXRlIGNvbnN0cmFpbnRzLCBsZWF2aW5nIG9uXG4iKTsKIAkJfQogCiB1bmxvY2s6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwM3guYyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCmluZGV4IGY4YzQ2NjEuLjM2MmUwODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAogLyogREE5MDMwL0RBOTAzNCBjb21tb24gb3BlcmF0aW9ucyAqLwogc3RhdGljIGludCBkYTkwM3hfc2V0X2xkb192b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQkJCSAgaW50IG1pbl91ViwgaW50IG1heF91VikKKwkJCQkgIGludCBtaW5fdVYsIGludCBtYXhfdVYsIHVuc2lnbmVkICpzZWxlY3RvcikKIHsKIAlzdHJ1Y3QgZGE5MDN4X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlzdHJ1Y3QgZGV2aWNlICpkYTkwMzRfZGV2ID0gdG9fZGE5MDN4X2RldihyZGV2KTsKQEAgLTExOSw2ICsxMTksNyBAQAogCX0KIAogCXZhbCA9IChtaW5fdVYgLSBpbmZvLT5taW5fdVYgKyBpbmZvLT5zdGVwX3VWIC0gMSkgLyBpbmZvLT5zdGVwX3VWOworCSpzZWxlY3RvciA9IHZhbDsKIAl2YWwgPDw9IGluZm8tPnZvbF9zaGlmdDsKIAltYXNrID0gKCgxIDw8IGluZm8tPnZvbF9uYml0cykgLSAxKSAgPDwgaW5mby0+dm9sX3NoaWZ0OwogCkBAIC0xODcsNyArMTg4LDggQEAKIAogLyogREE5MDMwIHNwZWNpZmljIG9wZXJhdGlvbnMgKi8KIHN0YXRpYyBpbnQgZGE5MDMwX3NldF9sZG8xXzE1X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCQkJICAgICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJICAgICAgaW50IG1pbl91ViwgaW50IG1heF91ViwKKwkJCQkgICAgICB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJc3RydWN0IGRldmljZSAqZGE5MDN4X2RldiA9IHRvX2RhOTAzeF9kZXYocmRldik7CkBAIC0yMDAsNiArMjAyLDcgQEAKIAl9CiAKIAl2YWwgPSAobWluX3VWIC0gaW5mby0+bWluX3VWICsgaW5mby0+c3RlcF91ViAtIDEpIC8gaW5mby0+c3RlcF91VjsKKwkqc2VsZWN0b3IgPSB2YWw7CiAJdmFsIDw8PSBpbmZvLT52b2xfc2hpZnQ7CiAJbWFzayA9ICgoMSA8PCBpbmZvLT52b2xfbmJpdHMpIC0gMSkgIDw8IGluZm8tPnZvbF9zaGlmdDsKIAl2YWwgfD0gREE5MDMwX0xET19VTkxPQ0s7IC8qIGhhdmUgdG8gc2V0IFVOTE9DSyBiaXRzICovCkBAIC0yMTQsNyArMjE3LDggQEAKIH0KIAogc3RhdGljIGludCBkYTkwMzBfc2V0X2xkbzE0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCQkJICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQorCQkJCSAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWLAorCQkJCSAgICB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJc3RydWN0IGRldmljZSAqZGE5MDN4X2RldiA9IHRvX2RhOTAzeF9kZXYocmRldik7CkBAIC0yMzQsNiArMjM4LDcgQEAKIAkJdmFsID0gKG1pbl91ViAtIHRocmVzaCArIGluZm8tPnN0ZXBfdVYgLSAxKSAvIGluZm8tPnN0ZXBfdVY7CiAJfQogCisJKnNlbGVjdG9yID0gdmFsOwogCXZhbCA8PD0gaW5mby0+dm9sX3NoaWZ0OwogCW1hc2sgPSAoKDEgPDwgaW5mby0+dm9sX25iaXRzKSAtIDEpICA8PCBpbmZvLT52b2xfc2hpZnQ7CiAKQEAgLTI2Myw3ICsyNjgsNyBAQAogCiAvKiBEQTkwMzQgc3BlY2lmaWMgb3BlcmF0aW9ucyAqLwogc3RhdGljIGludCBkYTkwMzRfc2V0X2R2Y192b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQkJCSAgaW50IG1pbl91ViwgaW50IG1heF91VikKKwkJCQkgIGludCBtaW5fdVYsIGludCBtYXhfdVYsIHVuc2lnbmVkICpzZWxlY3RvcikKIHsKIAlzdHJ1Y3QgZGE5MDN4X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlzdHJ1Y3QgZGV2aWNlICpkYTkwMzRfZGV2ID0gdG9fZGE5MDN4X2RldihyZGV2KTsKQEAgLTI3Niw2ICsyODEsNyBAQAogCX0KIAogCXZhbCA9IChtaW5fdVYgLSBpbmZvLT5taW5fdVYgKyBpbmZvLT5zdGVwX3VWIC0gMSkgLyBpbmZvLT5zdGVwX3VWOworCSpzZWxlY3RvciA9IHZhbDsKIAl2YWwgPDw9IGluZm8tPnZvbF9zaGlmdDsKIAltYXNrID0gKCgxIDw8IGluZm8tPnZvbF9uYml0cykgLSAxKSAgPDwgaW5mby0+dm9sX3NoaWZ0OwogCkBAIC0yODksNyArMjk1LDcgQEAKIH0KIAogc3RhdGljIGludCBkYTkwMzRfc2V0X2xkbzEyX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCQkJICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYsIHVuc2lnbmVkICpzZWxlY3RvcikKIHsKIAlzdHJ1Y3QgZGE5MDN4X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlzdHJ1Y3QgZGV2aWNlICpkYTkwMzRfZGV2ID0gdG9fZGE5MDN4X2RldihyZGV2KTsKQEAgLTMwMiw2ICszMDgsNyBAQAogCiAJdmFsID0gKG1pbl91ViAtIGluZm8tPm1pbl91ViArIGluZm8tPnN0ZXBfdVYgLSAxKSAvIGluZm8tPnN0ZXBfdVY7CiAJdmFsID0gKHZhbCA+PSAyMCkgPyB2YWwgLSAxMiA6ICgodmFsID4gNykgPyA4IDogdmFsKTsKKwkqc2VsZWN0b3IgPSB2YWw7CiAJdmFsIDw8PSBpbmZvLT52b2xfc2hpZnQ7CiAJbWFzayA9ICgoMSA8PCBpbmZvLT52b2xfbmJpdHMpIC0gMSkgIDw8IGluZm8tPnZvbF9zaGlmdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvaXNsNjI3MWEtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9pc2w2MjcxYS1yZWd1bGF0b3IuYwppbmRleCBiOGNjNjM4Li5lNGIzNTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9pc2w2MjcxYS1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9pc2w2MjcxYS1yZWd1bGF0b3IuYwpAQCAtNTgsNyArNTgsOSBAQAogCXJldHVybiBkYXRhOwogfQogCi1zdGF0aWMgaW50IGlzbDYyNzFhX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsIGludCBtaW51ViwgaW50IG1heHVWKQorc3RhdGljIGludCBpc2w2MjcxYV9zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2LAorCQkJCWludCBtaW51ViwgaW50IG1heHVWLAorCQkJCXVuc2lnbmVkICpzZWxlY3RvcikKIHsKIAlzdHJ1Y3QgaXNsX3BtaWMgKnBtaWMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHZzZWwsIGVyciwgZGF0YTsKQEAgLTc4LDYgKzgwLDggQEAKIAkvKiBDb252ZXJ0IHRoZSBtaWNyb3ZvbHRzIHRvIGRhdGEgZm9yIHRoZSBjaGlwICovCiAJZGF0YSA9ICh2c2VsIC0gSVNMNjI3MUFfVk9MVEFHRV9NSU4pIC8gSVNMNjI3MUFfVk9MVEFHRV9TVEVQOwogCisJKnNlbGVjdG9yID0gZGF0YTsKKwogCW11dGV4X2xvY2soJnBtaWMtPm10eCk7CiAKIAllcnIgPSBpMmNfc21idXNfd3JpdGVfYnl0ZShwbWljLT5jbGllbnQsIGRhdGEpOwpAQCAtMTY5LDcgKzE3Myw3IEBACiAJCQkJCQlpbml0X2RhdGEsIHBtaWMpOwogCQlpZiAoSVNfRVJSKHBtaWMtPnJkZXZbaV0pKSB7CiAJCQlkZXZfZXJyKCZpMmMtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciAlc1xuIiwgaWQtPm5hbWUpOwotCQkJZXJyID0gUFRSX0VSUihwbWljLT5yZGV2KTsKKwkJCWVyciA9IFBUUl9FUlIocG1pYy0+cmRldltpXSk7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbHAzOTcxLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9scDM5NzEuYwppbmRleCAzYmI4MmI2Li4wZjIyZWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9scDM5NzEuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9scDM5NzEuYwpAQCAtMTY4LDcgKzE2OCw4IEBACiB9CiAKIHN0YXRpYyBpbnQgbHAzOTcxX2xkb19zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2LAotCQkJCSAgaW50IG1pbl91ViwgaW50IG1heF91VikKKwkJCQkgIGludCBtaW5fdVYsIGludCBtYXhfdVYsCisJCQkJICB1bnNpZ25lZCBpbnQgKnNlbGVjdG9yKQogewogCXN0cnVjdCBscDM5NzEgKmxwMzk3MSA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgbGRvID0gcmRldl9nZXRfaWQoZGV2KSAtIExQMzk3MV9MRE8xOwpAQCAtMTg3LDYgKzE4OCw4IEBACiAJaWYgKHZhbCA+IExET19WT0xfTUFYX0lEWCB8fCB2b2xfbWFwW3ZhbF0gPiBtYXhfdm9sKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCSpzZWxlY3RvciA9IHZhbDsKKwogCXJldHVybiBscDM5NzFfc2V0X2JpdHMobHAzOTcxLCBMUDM5NzFfTERPX1ZPTF9DT05UUl9SRUcobGRvKSwKIAkJCUxET19WT0xfQ09OVFJfTUFTSyA8PCBMRE9fVk9MX0NPTlRSX1NISUZUKGxkbyksCiAJCQl2YWwgPDwgTERPX1ZPTF9DT05UUl9TSElGVChsZG8pKTsKQEAgLTI1Niw3ICsyNTksOCBAQAogfQogCiBzdGF0aWMgaW50IGxwMzk3MV9kY2RjX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCi0JCQkJICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQorCQkJCSAgIGludCBtaW5fdVYsIGludCBtYXhfdVYsCisJCQkJICAgdW5zaWduZWQgaW50ICpzZWxlY3RvcikKIHsKIAlzdHJ1Y3QgbHAzOTcxICpscDM5NzEgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IGJ1Y2sgPSByZGV2X2dldF9pZChkZXYpIC0gTFAzOTcxX0RDREMxOwpAQCAtMjc3LDYgKzI4MSw4IEBACiAJaWYgKHZhbCA+IEJVQ0tfVEFSR0VUX1ZPTF9NQVhfSURYIHx8IHZvbF9tYXBbdmFsXSA+IG1heF92b2wpCiAJCXJldHVybiAtRUlOVkFMOwogCisJKnNlbGVjdG9yID0gdmFsOworCiAJcmV0ID0gbHAzOTcxX3NldF9iaXRzKGxwMzk3MSwgTFAzOTcxX0JVQ0tfVEFSR0VUX1ZPTDFfUkVHKGJ1Y2spLAogCSAgICAgICBCVUNLX1RBUkdFVF9WT0xfTUFTSywgdmFsKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbHAzOTcyLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9scDM5NzIuYwppbmRleCBlMDcwNjJmLi42YWExYjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9scDM5NzIuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9scDM5NzIuYwpAQCAtMjkyLDcgKzI5Miw4IEBACiB9CiAKIHN0YXRpYyBpbnQgbHAzOTcyX2xkb19zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2LAotCQkJCSAgaW50IG1pbl91ViwgaW50IG1heF91VikKKwkJCQkgIGludCBtaW5fdVYsIGludCBtYXhfdVYsCisJCQkJICB1bnNpZ25lZCBpbnQgKnNlbGVjdG9yKQogewogCXN0cnVjdCBscDM5NzIgKmxwMzk3MiA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgbGRvID0gcmRldl9nZXRfaWQoZGV2KSAtIExQMzk3Ml9MRE8xOwpAQCAtMzEzLDYgKzMxNCw4IEBACiAJaWYgKHZhbCA+IExQMzk3Ml9MRE9fVk9MX01BWF9JRFgobGRvKSB8fCB2b2xfbWFwW3ZhbF0gPiBtYXhfdm9sKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCSpzZWxlY3RvciA9IHZhbDsKKwogCXNoaWZ0ID0gTFAzOTcyX0xET19WT0xfQ09OVFJfU0hJRlQobGRvKTsKIAlyZXQgPSBscDM5NzJfc2V0X2JpdHMobHAzOTcyLCBMUDM5NzJfTERPX1ZPTF9DT05UUl9SRUcobGRvKSwKIAkJTFAzOTcyX0xET19WT0xfTUFTSyhsZG8pIDw8IHNoaWZ0LCB2YWwgPDwgc2hpZnQpOwpAQCAtNDE2LDcgKzQxOSw4IEBACiB9CiAKIHN0YXRpYyBpbnQgbHAzOTcyX2RjZGNfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKLQkJCQkgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJICAgaW50IG1pbl91ViwgaW50IG1heF91ViwKKwkJCQkgICB1bnNpZ25lZCBpbnQgKnNlbGVjdG9yKQogewogCXN0cnVjdCBscDM5NzIgKmxwMzk3MiA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgYnVjayA9IHJkZXZfZ2V0X2lkKGRldikgLSBMUDM5NzJfRENEQzE7CkBAIC00MzgsNiArNDQyLDggQEAKIAkgICAgdm9sX21hcFt2YWxdID4gbWF4X3ZvbCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkqc2VsZWN0b3IgPSB2YWw7CisKIAlyZXQgPSBscDM5NzJfc2V0X2JpdHMobHAzOTcyLCBMUDM5NzJfQlVDS19WT0wxX1JFRyhidWNrKSwKIAkJCQlMUDM5NzJfQlVDS19WT0xfTUFTSywgdmFsKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4MTU4Ni5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4MTU4Ni5jCmluZGV4IDU1OWNmYTIuLjNmNDk1MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21heDE1ODYuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXgxNTg2LmMKQEAgLTYzLDEyICs2MywxMiBAQAogCXJldHVybiBtYXgxNTg2LT5taW5fdVYgKyAoc2VsZWN0b3IgKiByYW5nZV91ViAvIE1BWDE1ODZfVjNfTUFYX1ZTRUwpOwogfQogCi1zdGF0aWMgaW50IG1heDE1ODZfdjNfc2V0KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQorc3RhdGljIGludCBtYXgxNTg2X3YzX3NldChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IG1pbl91ViwgaW50IG1heF91ViwKKwkJCSAgdW5zaWduZWQgKnNlbGVjdG9yKQogewogCXN0cnVjdCBtYXgxNTg2X2RhdGEgKm1heDE1ODYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBtYXgxNTg2LT5jbGllbnQ7CiAJdW5zaWduZWQgcmFuZ2VfdVYgPSBtYXgxNTg2LT5tYXhfdVYgLSBtYXgxNTg2LT5taW5fdVY7Ci0JdW5zaWduZWQgc2VsZWN0b3I7CiAJdTggdjNfcHJvZzsKIAogCWlmIChtaW5fdVYgPiBtYXgxNTg2LT5tYXhfdVYgfHwgbWF4X3VWIDwgbWF4MTU4Ni0+bWluX3VWKQpAQCAtNzYsMTUgKzc2LDE1IEBACiAJaWYgKG1pbl91ViA8IG1heDE1ODYtPm1pbl91VikKIAkJbWluX3VWID0gbWF4MTU4Ni0+bWluX3VWOwogCi0Jc2VsZWN0b3IgPSAoKG1pbl91ViAtIG1heDE1ODYtPm1pbl91VikgKiBNQVgxNTg2X1YzX01BWF9WU0VMICsKKwkqc2VsZWN0b3IgPSAoKG1pbl91ViAtIG1heDE1ODYtPm1pbl91VikgKiBNQVgxNTg2X1YzX01BWF9WU0VMICsKIAkJCXJhbmdlX3VWIC0gMSkgLyByYW5nZV91VjsKLQlpZiAobWF4MTU4Nl92M19jYWxjX3ZvbHRhZ2UobWF4MTU4Niwgc2VsZWN0b3IpID4gbWF4X3VWKQorCWlmIChtYXgxNTg2X3YzX2NhbGNfdm9sdGFnZShtYXgxNTg2LCAqc2VsZWN0b3IpID4gbWF4X3VWKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiY2hhbmdpbmcgdm9sdGFnZSB2MyB0byAlZG12XG4iLAotCQltYXgxNTg2X3YzX2NhbGNfdm9sdGFnZShtYXgxNTg2LCBzZWxlY3RvcikgLyAxMDAwKTsKKwkJbWF4MTU4Nl92M19jYWxjX3ZvbHRhZ2UobWF4MTU4NiwgKnNlbGVjdG9yKSAvIDEwMDApOwogCi0JdjNfcHJvZyA9IEkyQ19WM19TRUxFQ1QgfCAodTgpIHNlbGVjdG9yOworCXYzX3Byb2cgPSBJMkNfVjNfU0VMRUNUIHwgKHU4KSAqc2VsZWN0b3I7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgdjNfcHJvZyk7CiB9CiAKQEAgLTExMCwxMCArMTEwLDEwIEBACiAJcmV0dXJuIHZvbHRhZ2VzX3V2W3NlbGVjdG9yXTsKIH0KIAotc3RhdGljIGludCBtYXgxNTg2X3Y2X3NldChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IG1pbl91ViwgaW50IG1heF91VikKK3N0YXRpYyBpbnQgbWF4MTU4Nl92Nl9zZXQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCBtaW5fdVYsIGludCBtYXhfdVYsCisJCQkgIHVuc2lnbmVkIGludCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0JdW5zaWduZWQgc2VsZWN0b3I7CiAJdTggdjZfcHJvZzsKIAogCWlmIChtaW5fdVYgPCBNQVgxNTg2X1Y2X01JTl9VViB8fCBtaW5fdVYgPiBNQVgxNTg2X1Y2X01BWF9VVikKQEAgLTEyMiwyMSArMTIyLDIxIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG1pbl91ViA8IDE4MDAwMDApCi0JCXNlbGVjdG9yID0gMDsKKwkJKnNlbGVjdG9yID0gMDsKIAllbHNlIGlmIChtaW5fdVYgPCAyNTAwMDAwKQotCQlzZWxlY3RvciA9IDE7CisJCSpzZWxlY3RvciA9IDE7CiAJZWxzZSBpZiAobWluX3VWIDwgMzAwMDAwMCkKLQkJc2VsZWN0b3IgPSAyOworCQkqc2VsZWN0b3IgPSAyOwogCWVsc2UgaWYgKG1pbl91ViA+PSAzMDAwMDAwKQotCQlzZWxlY3RvciA9IDM7CisJCSpzZWxlY3RvciA9IDM7CiAKLQlpZiAobWF4MTU4Nl92Nl9jYWxjX3ZvbHRhZ2Uoc2VsZWN0b3IpID4gbWF4X3VWKQorCWlmIChtYXgxNTg2X3Y2X2NhbGNfdm9sdGFnZSgqc2VsZWN0b3IpID4gbWF4X3VWKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiY2hhbmdpbmcgdm9sdGFnZSB2NiB0byAlZG12XG4iLAotCQltYXgxNTg2X3Y2X2NhbGNfdm9sdGFnZShzZWxlY3RvcikgLyAxMDAwKTsKKwkJbWF4MTU4Nl92Nl9jYWxjX3ZvbHRhZ2UoKnNlbGVjdG9yKSAvIDEwMDApOwogCi0JdjZfcHJvZyA9IEkyQ19WNl9TRUxFQ1QgfCAodTgpIHNlbGVjdG9yOworCXY2X3Byb2cgPSBJMkNfVjZfU0VMRUNUIHwgKHU4KSAqc2VsZWN0b3I7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgdjZfcHJvZyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NDkuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NDkuYwppbmRleCA2YjYwYTljLi4zMGViOWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4NjQ5LmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODY0OS5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIH0KIAogc3RhdGljIGludCBtYXg4NjQ5X3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQkJICAgICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkgICAgICAgaW50IG1pbl91ViwgaW50IG1heF91ViwgdW5zaWduZWQgKnNlbGVjdG9yKQogewogCXN0cnVjdCBtYXg4NjQ5X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAl1bnNpZ25lZCBjaGFyIGRhdGEsIG1hc2s7CkBAIC0xNjgsNiArMTY4LDcgQEAKIAlkYXRhID0gKG1pbl91ViAtIE1BWDg2NDlfRENEQ19WTUlOICsgTUFYODY0OV9EQ0RDX1NURVAgLSAxKQogCQkvIE1BWDg2NDlfRENEQ19TVEVQOwogCW1hc2sgPSBNQVg4NjQ5X1ZPTF9NQVNLOworCSpzZWxlY3RvciA9IGRhdGEgJiBtYXNrOwogCiAJcmV0dXJuIG1heDg2NDlfc2V0X2JpdHMoaW5mby0+aTJjLCBpbmZvLT52b2xfcmVnLCBtYXNrLCBkYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NjAuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NjAuYwppbmRleCBjNTcwZTZlLi4zM2Y1ZDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4NjYwLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODY2MC5jCkBAIC0xNDEsNyArMTQxLDggQEAKIAlyZXR1cm4gTUFYODY2MF9EQ0RDX01JTl9VViArIHNlbGVjdG9yICogTUFYODY2MF9EQ0RDX1NURVA7CiB9CiAKLXN0YXRpYyBpbnQgbWF4ODY2MF9kY2RjX3NldChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IG1pbl91ViwgaW50IG1heF91VikKK3N0YXRpYyBpbnQgbWF4ODY2MF9kY2RjX3NldChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IG1pbl91ViwgaW50IG1heF91ViwKKwkJCSAgICB1bnNpZ25lZCBpbnQgKnMpCiB7CiAJc3RydWN0IG1heDg2NjAgKm1heDg2NjAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXU4IHJlZywgc2VsZWN0b3IsIGJpdHM7CkBAIC0xNTQsNiArMTU1LDcgQEAKIAogCXNlbGVjdG9yID0gKG1pbl91ViAtIChNQVg4NjYwX0RDRENfTUlOX1VWIC0gTUFYODY2MF9EQ0RDX1NURVAgKyAxKSkKIAkJCS8gTUFYODY2MF9EQ0RDX1NURVA7CisJKnMgPSBzZWxlY3RvcjsKIAogCXJldCA9IG1heDg2NjBfZGNkY19saXN0KHJkZXYsIHNlbGVjdG9yKTsKIAlpZiAocmV0IDwgMCB8fCByZXQgPiBtYXhfdVYpCkBAIC0xOTYsNyArMTk4LDggQEAKIAlyZXR1cm4gTUFYODY2MF9MRE81X01JTl9VViArIHNlbGVjdG9yICogTUFYODY2MF9MRE81X1NURVA7CiB9CiAKLXN0YXRpYyBpbnQgbWF4ODY2MF9sZG81X3NldChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IG1pbl91ViwgaW50IG1heF91VikKK3N0YXRpYyBpbnQgbWF4ODY2MF9sZG81X3NldChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IG1pbl91ViwgaW50IG1heF91ViwKKwkJCSAgICB1bnNpZ25lZCBpbnQgKnMpCiB7CiAJc3RydWN0IG1heDg2NjAgKm1heDg2NjAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXU4IHNlbGVjdG9yOwpAQCAtMjEzLDYgKzIxNiw4IEBACiAJaWYgKHJldCA8IDAgfHwgcmV0ID4gbWF4X3VWKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCSpzID0gc2VsZWN0b3I7CisKIAlyZXQgPSBtYXg4NjYwX3dyaXRlKG1heDg2NjAsIE1BWDg2NjBfTURUVjIsIDAsIHNlbGVjdG9yKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMjcwLDcgKzI3NSw4IEBACiAJcmV0dXJuIE1BWDg2NjBfTERPNjdfTUlOX1VWICsgc2VsZWN0b3IgKiBNQVg4NjYwX0xETzY3X1NURVA7CiB9CiAKLXN0YXRpYyBpbnQgbWF4ODY2MF9sZG82N19zZXQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCBtaW5fdVYsIGludCBtYXhfdVYpCitzdGF0aWMgaW50IG1heDg2NjBfbGRvNjdfc2V0KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgbWluX3VWLAorCQkJICAgICBpbnQgbWF4X3VWLCB1bnNpZ25lZCBpbnQgKnMpCiB7CiAJc3RydWN0IG1heDg2NjAgKm1heDg2NjAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXU4IHNlbGVjdG9yOwpAQCAtMjg4LDYgKzI5NCw4IEBACiAJaWYgKHJldCA8IDAgfHwgcmV0ID4gbWF4X3VWKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCSpzID0gc2VsZWN0b3I7CisKIAlpZiAocmRldl9nZXRfaWQocmRldikgPT0gTUFYODY2MF9WNikKIAkJcmV0dXJuIG1heDg2NjBfd3JpdGUobWF4ODY2MCwgTUFYODY2MF9MMTJWQ1IsIDB4ZjAsIHNlbGVjdG9yKTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTI1LXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODkyNS1yZWd1bGF0b3IuYwppbmRleCA1NTJjYWQ4Li44YWUxNDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTI1LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5MjUtcmVndWxhdG9yLmMKQEAgLTU1LDcgKzU1LDcgQEAKIH0KIAogc3RhdGljIGludCBtYXg4OTI1X3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQkJICAgICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkgICAgICAgaW50IG1pbl91ViwgaW50IG1heF91ViwgdW5zaWduZWQgaW50ICpzZWxlY3RvcikKIHsKIAlzdHJ1Y3QgbWF4ODkyNV9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJdW5zaWduZWQgY2hhciBkYXRhLCBtYXNrOwpAQCAtNjYsNiArNjYsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZGF0YSA9IChtaW5fdVYgLSBpbmZvLT5taW5fdVYgKyBpbmZvLT5zdGVwX3VWIC0gMSkgLyBpbmZvLT5zdGVwX3VWOworCSpzZWxlY3RvciA9IGRhdGE7CiAJZGF0YSA8PD0gaW5mby0+dm9sX3NoaWZ0OwogCW1hc2sgPSAoKDEgPDwgaW5mby0+dm9sX25iaXRzKSAtIDEpIDw8IGluZm8tPnZvbF9zaGlmdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk1Mi5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk1Mi5jCmluZGV4IDBkNWRkYTQuLmE4ZjRlY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg5NTIuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTUyLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogfQogCiBzdGF0aWMgaW50IG1heDg5NTJfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCQkJaW50IG1pbl91ViwgaW50IG1heF91VikKKwkJCSAgICAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWLCB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IG1heDg5NTJfZGF0YSAqbWF4ODk1MiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJczggdmlkID0gLTEsIGk7CkBAIC0xNTYsNiArMTU2LDcgQEAKIAlpZiAodmlkID49IDAgJiYgdmlkIDwgTUFYODk1Ml9OVU1fRFZTX01PREUpIHsKIAkJbWF4ODk1Mi0+dmlkMCA9ICh2aWQgJSAyID09IDEpOwogCQltYXg4OTUyLT52aWQxID0gKCgodmlkID4+IDEpICUgMikgPT0gMSk7CisJCSpzZWxlY3RvciA9IHZpZDsKIAkJZ3Bpb19zZXRfdmFsdWUobWF4ODk1Mi0+cGRhdGEtPmdwaW9fdmlkMCwgbWF4ODk1Mi0+dmlkMCk7CiAJCWdwaW9fc2V0X3ZhbHVlKG1heDg5NTItPnBkYXRhLT5ncGlvX3ZpZDEsIG1heDg5NTItPnZpZDEpOwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk5OC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk5OC5jCmluZGV4IDVjMjA3NTYuLjc1NjhkZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg5OTguYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTk4LmMKQEAgLTMwNCw3ICszMDQsNyBAQAogfQogCiBzdGF0aWMgaW50IG1heDg5OThfc2V0X3ZvbHRhZ2VfbGRvKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQkJCWludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJICAgaW50IG1pbl91ViwgaW50IG1heF91ViwgdW5zaWduZWQgKnNlbGVjdG9yKQogewogCXN0cnVjdCBtYXg4OTk4X2RhdGEgKm1heDg5OTggPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSBtYXg4OTk4LT5pb2Rldi0+aTJjOwpAQCAtMzMxLDYgKzMzMSw4IEBACiAJaWYgKGRlc2MtPm1pbiArIGRlc2MtPnN0ZXAqaSA+IG1heF92b2wpCiAJCXJldHVybiAtRUlOVkFMOwogCisJKnNlbGVjdG9yID0gaTsKKwogCXJldCA9IG1heDg5OThfZ2V0X3ZvbHRhZ2VfcmVnaXN0ZXIocmRldiwgJnJlZywgJnNoaWZ0LCAmbWFzayk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTM1Miw3ICszNTQsNyBAQAogfQogCiBzdGF0aWMgaW50IG1heDg5OThfc2V0X3ZvbHRhZ2VfYnVjayhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKLQkJCQkgICAgaW50IG1pbl91ViwgaW50IG1heF91VikKKwkJCQkgICAgaW50IG1pbl91ViwgaW50IG1heF91ViwgdW5zaWduZWQgKnNlbGVjdG9yKQogewogCXN0cnVjdCBtYXg4OTk4X2RhdGEgKm1heDg5OTggPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXN0cnVjdCBtYXg4OTk4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KQEAgLTM4NCw2ICszODYsOCBAQAogCWlmIChkZXNjLT5taW4gKyBkZXNjLT5zdGVwKmkgPiBtYXhfdm9sKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCSpzZWxlY3RvciA9IGk7CisKIAlyZXQgPSBtYXg4OTk4X2dldF92b2x0YWdlX3JlZ2lzdGVyKHJkZXYsICZyZWcsICZzaGlmdCwgJm1hc2spOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzNzgzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWMxMzc4My1yZWd1bGF0b3IuYwppbmRleCBlY2Q5OWY1Li4zZTVkMGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzNzgzLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21jMTM3ODMtcmVndWxhdG9yLmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogUmVndWxhdG9yIERyaXZlciBmb3IgRnJlZXNjYWxlIE1DMTM3ODMgUE1JQwogICoKKyAqIENvcHlyaWdodCAyMDEwIFlvbmcgU2hlbiA8eW9uZy5zaGVuQGxpbmFyby5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peCA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KICAqIENvcHlyaWdodCAyMDA5IEFsYmVydG8gUGFuaXp6byA8bWFyYW1hb3BlcmNoZXNlaW1vcnRvQGdtYWlsLmNvbT4KICAqCkBAIC0xNyw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlICJtYzEzeHh4LmgiCiAKICNkZWZpbmUgTUMxMzc4M19SRUdfU1dJVENIRVJTNQkJCTI5CiAjZGVmaW5lIE1DMTM3ODNfUkVHX1NXSVRDSEVSUzVfU1czRU4JCQkoMSA8PCAyMCkKQEAgLTg5LDE1NCArOTEsMTA2IEBACiAjZGVmaW5lIE1DMTM3ODNfUkVHX1BPV0VSTUlTQ19QV0dUU1BJX00JCQkoMyA8PCAxNSkKIAogCi1zdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3IgewotCXN0cnVjdCByZWd1bGF0b3JfZGVzYyBkZXNjOwotCWludCByZWc7Ci0JaW50IGVuYWJsZV9iaXQ7Ci0JaW50IHZzZWxfcmVnOwotCWludCB2c2VsX3NoaWZ0OwotCWludCB2c2VsX21hc2s7Ci0JaW50IGNvbnN0ICp2b2x0YWdlczsKLX07Ci0KIC8qIFZvbHRhZ2UgVmFsdWVzICovCi1zdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfc3czX3ZhbFtdID0geworc3RhdGljIGNvbnN0IGludCBtYzEzNzgzX3N3M192YWxbXSA9IHsKIAk1MDAwMDAwLCA1MDAwMDAwLCA1MDAwMDAwLCA1NTAwMDAwLAogfTsKIAotc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3ZhdWRpb192YWxbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgbWMxMzc4M192YXVkaW9fdmFsW10gPSB7CiAJMjc3NTAwMCwKIH07CiAKLXN0YXRpYyBjb25zdCBpbnQgY29uc3QgbWMxMzc4M192aW9oaV92YWxbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgbWMxMzc4M192aW9oaV92YWxbXSA9IHsKIAkyNzc1MDAwLAogfTsKIAotc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3Zpb2xvX3ZhbFtdID0geworc3RhdGljIGNvbnN0IGludCBtYzEzNzgzX3Zpb2xvX3ZhbFtdID0gewogCTEyMDAwMDAsIDEzMDAwMDAsIDE1MDAwMDAsIDE4MDAwMDAsCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdmRpZ192YWxbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgbWMxMzc4M192ZGlnX3ZhbFtdID0gewogCTEyMDAwMDAsIDEzMDAwMDAsIDE1MDAwMDAsIDE4MDAwMDAsCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdmdlbl92YWxbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgbWMxMzc4M192Z2VuX3ZhbFtdID0gewogCTEyMDAwMDAsIDEzMDAwMDAsIDE1MDAwMDAsIDE4MDAwMDAsCiAJMTEwMDAwMCwgMjAwMDAwMCwgMjc3NTAwMCwgMjQwMDAwMCwKIH07CiAKLXN0YXRpYyBjb25zdCBpbnQgY29uc3QgbWMxMzc4M192cmZkaWdfdmFsW10gPSB7CitzdGF0aWMgY29uc3QgaW50IG1jMTM3ODNfdnJmZGlnX3ZhbFtdID0gewogCTEyMDAwMDAsIDE1MDAwMDAsIDE4MDAwMDAsIDE4NzUwMDAsCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdnJmcmVmX3ZhbFtdID0geworc3RhdGljIGNvbnN0IGludCBtYzEzNzgzX3ZyZnJlZl92YWxbXSA9IHsKIAkyNDc1MDAwLCAyNjAwMDAwLCAyNzAwMDAwLCAyNzc1MDAwLAogfTsKIAotc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3ZyZmNwX3ZhbFtdID0geworc3RhdGljIGNvbnN0IGludCBtYzEzNzgzX3ZyZmNwX3ZhbFtdID0gewogCTI3MDAwMDAsIDI3NzUwMDAsCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdnNpbV92YWxbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgbWMxMzc4M192c2ltX3ZhbFtdID0gewogCTE4MDAwMDAsIDI5MDAwMDAsIDMwMDAwMDAsCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdmVzaW1fdmFsW10gPSB7CitzdGF0aWMgY29uc3QgaW50IG1jMTM3ODNfdmVzaW1fdmFsW10gPSB7CiAJMTgwMDAwMCwgMjkwMDAwMCwKIH07CiAKLXN0YXRpYyBjb25zdCBpbnQgY29uc3QgbWMxMzc4M192Y2FtX3ZhbFtdID0geworc3RhdGljIGNvbnN0IGludCBtYzEzNzgzX3ZjYW1fdmFsW10gPSB7CiAJMTUwMDAwMCwgMTgwMDAwMCwgMjUwMDAwMCwgMjU1MDAwMCwKIAkyNjAwMDAwLCAyNzUwMDAwLCAyODAwMDAwLCAzMDAwMDAwLAogfTsKIAotc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3ZyZmJnX3ZhbFtdID0geworc3RhdGljIGNvbnN0IGludCBtYzEzNzgzX3ZyZmJnX3ZhbFtdID0gewogCTEyNTAwMDAsCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdnZpYl92YWxbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgbWMxMzc4M192dmliX3ZhbFtdID0gewogCTEzMDAwMDAsIDE4MDAwMDAsIDIwMDAwMDAsIDMwMDAwMDAsCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdm1tY192YWxbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgbWMxMzc4M192bW1jX3ZhbFtdID0gewogCTE2MDAwMDAsIDE4MDAwMDAsIDIwMDAwMDAsIDI2MDAwMDAsCiAJMjcwMDAwMCwgMjgwMDAwMCwgMjkwMDAwMCwgMzAwMDAwMCwKIH07CiAKLXN0YXRpYyBjb25zdCBpbnQgY29uc3QgbWMxMzc4M192cmZfdmFsW10gPSB7CitzdGF0aWMgY29uc3QgaW50IG1jMTM3ODNfdnJmX3ZhbFtdID0gewogCTE1MDAwMDAsIDE4NzUwMDAsIDI3MDAwMDAsIDI3NzUwMDAsCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfZ3BvX3ZhbFtdID0geworc3RhdGljIGNvbnN0IGludCBtYzEzNzgzX2dwb192YWxbXSA9IHsKIAkzMTAwMDAwLAogfTsKIAotc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3B3Z3RkcnZfdmFsW10gPSB7CitzdGF0aWMgY29uc3QgaW50IG1jMTM3ODNfcHdndGRydl92YWxbXSA9IHsKIAk1NTAwMDAwLAogfTsKIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1jMTM3ODNfcmVndWxhdG9yX29wczsKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYzEzNzgzX2ZpeGVkX3JlZ3VsYXRvcl9vcHM7CiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWMxMzc4M19ncG9fcmVndWxhdG9yX29wczsKIAotI2RlZmluZSBNQzEzNzgzX0RFRklORShwcmVmaXgsIF9uYW1lLCBfcmVnLCBfdnNlbF9yZWcsIF92b2x0YWdlcykJXAotCVtNQzEzNzgzXyAjIyBwcmVmaXggIyMgXyAjIyBfbmFtZV0gPSB7CQkJCVwKLQkJLmRlc2MgPSB7CQkJCQkJXAotCQkJLm5hbWUgPSAjcHJlZml4ICJfIiAjX25hbWUsCQkJXAotCQkJLm5fdm9sdGFnZXMgPSBBUlJBWV9TSVpFKF92b2x0YWdlcyksCQlcCi0JCQkub3BzID0gJm1jMTM3ODNfcmVndWxhdG9yX29wcywJCQlcCi0JCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCVwKLQkJCS5pZCA9IE1DMTM3ODNfICMjIHByZWZpeCAjIyBfICMjIF9uYW1lLAkJXAotCQkJLm93bmVyID0gVEhJU19NT0RVTEUsCQkJCVwKLQkJfSwJCQkJCQkJXAotCQkucmVnID0gTUMxMzc4M19SRUdfICMjIF9yZWcsCQkJCVwKLQkJLmVuYWJsZV9iaXQgPSBNQzEzNzgzX1JFR18gIyMgX3JlZyAjIyBfICMjIF9uYW1lICMjIEVOLAlcCi0JCS52c2VsX3JlZyA9IE1DMTM3ODNfUkVHXyAjIyBfdnNlbF9yZWcsCQkJXAotCQkudnNlbF9zaGlmdCA9IE1DMTM3ODNfUkVHXyAjIyBfdnNlbF9yZWcgIyMgXyAjIyBfbmFtZSAjIyBWU0VMLFwKLQkJLnZzZWxfbWFzayA9IE1DMTM3ODNfUkVHXyAjIyBfdnNlbF9yZWcgIyMgXyAjIyBfbmFtZSAjIyBWU0VMX00sXAotCQkudm9sdGFnZXMgPSAgX3ZvbHRhZ2VzLAkJCQkJXAotCX0KKyNkZWZpbmUgTUMxMzc4M19ERUZJTkUocHJlZml4LCBuYW1lLCByZWcsIHZzZWxfcmVnLCB2b2x0YWdlcykJXAorCU1DMTN4eHhfREVGSU5FKE1DMTM3ODNfUkVHXywgbmFtZSwgcmVnLCB2c2VsX3JlZywgdm9sdGFnZXMsIFwKKwkJCW1jMTN4eHhfcmVndWxhdG9yX29wcykKIAotI2RlZmluZSBNQzEzNzgzX0ZJWEVEX0RFRklORShwcmVmaXgsIF9uYW1lLCBfcmVnLCBfdm9sdGFnZXMpCQlcCi0JW01DMTM3ODNfICMjIHByZWZpeCAjIyBfICMjIF9uYW1lXSA9IHsJCQkJXAotCQkuZGVzYyA9IHsJCQkJCQlcCi0JCQkubmFtZSA9ICNwcmVmaXggIl8iICNfbmFtZSwJCQlcCi0JCQkubl92b2x0YWdlcyA9IEFSUkFZX1NJWkUoX3ZvbHRhZ2VzKSwJCVwKLQkJCS5vcHMgPSAmbWMxMzc4M19maXhlZF9yZWd1bGF0b3Jfb3BzLAkJXAotCQkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCi0JCQkuaWQgPSBNQzEzNzgzXyAjIyBwcmVmaXggIyMgXyAjIyBfbmFtZSwJCVwKLQkJCS5vd25lciA9IFRISVNfTU9EVUxFLAkJCQlcCi0JCX0sCQkJCQkJCVwKLQkJLnJlZyA9IE1DMTM3ODNfUkVHXyAjIyBfcmVnLAkJCQlcCi0JCS5lbmFibGVfYml0ID0gTUMxMzc4M19SRUdfICMjIF9yZWcgIyMgXyAjIyBfbmFtZSAjIyBFTiwJXAotCQkudm9sdGFnZXMgPSAgX3ZvbHRhZ2VzLAkJCQkJXAotCX0KKyNkZWZpbmUgTUMxMzc4M19GSVhFRF9ERUZJTkUocHJlZml4LCBuYW1lLCByZWcsIHZvbHRhZ2VzKQkJXAorCU1DMTN4eHhfRklYRURfREVGSU5FKE1DMTM3ODNfUkVHXywgbmFtZSwgcmVnLCB2b2x0YWdlcywgXAorCQkJbWMxM3h4eF9maXhlZF9yZWd1bGF0b3Jfb3BzKQogCi0jZGVmaW5lIE1DMTM3ODNfR1BPX0RFRklORShwcmVmaXgsIF9uYW1lLCBfcmVnLCAgX3ZvbHRhZ2VzKQkJXAotCVtNQzEzNzgzXyAjIyBwcmVmaXggIyMgXyAjIyBfbmFtZV0gPSB7CQkJCVwKLQkJLmRlc2MgPSB7CQkJCQkJXAotCQkJLm5hbWUgPSAjcHJlZml4ICJfIiAjX25hbWUsCQkJXAotCQkJLm5fdm9sdGFnZXMgPSBBUlJBWV9TSVpFKF92b2x0YWdlcyksCQlcCi0JCQkub3BzID0gJm1jMTM3ODNfZ3BvX3JlZ3VsYXRvcl9vcHMsCQlcCi0JCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCVwKLQkJCS5pZCA9IE1DMTM3ODNfICMjIHByZWZpeCAjIyBfICMjIF9uYW1lLAkJXAotCQkJLm93bmVyID0gVEhJU19NT0RVTEUsCQkJCVwKLQkJfSwJCQkJCQkJXAotCQkucmVnID0gTUMxMzc4M19SRUdfICMjIF9yZWcsCQkJCVwKLQkJLmVuYWJsZV9iaXQgPSBNQzEzNzgzX1JFR18gIyMgX3JlZyAjIyBfICMjIF9uYW1lICMjIEVOLAlcCi0JCS52b2x0YWdlcyA9ICBfdm9sdGFnZXMsCQkJCQlcCi0JfQorI2RlZmluZSBNQzEzNzgzX0dQT19ERUZJTkUocHJlZml4LCBuYW1lLCByZWcsIHZvbHRhZ2VzKQkJXAorCU1DMTN4eHhfR1BPX0RFRklORShNQzEzNzgzX1JFR18sIG5hbWUsIHJlZywgdm9sdGFnZXMsIFwKKwkJCW1jMTM3ODNfZ3BvX3JlZ3VsYXRvcl9vcHMpCiAKICNkZWZpbmUgTUMxMzc4M19ERUZJTkVfU1coX25hbWUsIF9yZWcsIF92c2VsX3JlZywgX3ZvbHRhZ2VzKQkJXAotCU1DMTM3ODNfREVGSU5FKFNXLCBfbmFtZSwgX3JlZywgX3ZzZWxfcmVnLCBfdm9sdGFnZXMpCisJTUMxMzc4M19ERUZJTkUoUkVHLCBfbmFtZSwgX3JlZywgX3ZzZWxfcmVnLCBfdm9sdGFnZXMpCiAjZGVmaW5lIE1DMTM3ODNfREVGSU5FX1JFR1UoX25hbWUsIF9yZWcsIF92c2VsX3JlZywgX3ZvbHRhZ2VzKQkJXAotCU1DMTM3ODNfREVGSU5FKFJFR1UsIF9uYW1lLCBfcmVnLCBfdnNlbF9yZWcsIF92b2x0YWdlcykKKwlNQzEzNzgzX0RFRklORShSRUcsIF9uYW1lLCBfcmVnLCBfdnNlbF9yZWcsIF92b2x0YWdlcykKIAotc3RhdGljIHN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvciBtYzEzNzgzX3JlZ3VsYXRvcnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3IgbWMxMzc4M19yZWd1bGF0b3JzW10gPSB7CiAJTUMxMzc4M19ERUZJTkVfU1coU1czLCBTV0lUQ0hFUlM1LCBTV0lUQ0hFUlM1LCBtYzEzNzgzX3N3M192YWwpLAogCi0JTUMxMzc4M19GSVhFRF9ERUZJTkUoUkVHVSwgVkFVRElPLCBSRUdVTEFUT1JNT0RFMCwgbWMxMzc4M192YXVkaW9fdmFsKSwKLQlNQzEzNzgzX0ZJWEVEX0RFRklORShSRUdVLCBWSU9ISSwgUkVHVUxBVE9STU9ERTAsIG1jMTM3ODNfdmlvaGlfdmFsKSwKKwlNQzEzNzgzX0ZJWEVEX0RFRklORShSRUcsIFZBVURJTywgUkVHVUxBVE9STU9ERTAsIG1jMTM3ODNfdmF1ZGlvX3ZhbCksCisJTUMxMzc4M19GSVhFRF9ERUZJTkUoUkVHLCBWSU9ISSwgUkVHVUxBVE9STU9ERTAsIG1jMTM3ODNfdmlvaGlfdmFsKSwKIAlNQzEzNzgzX0RFRklORV9SRUdVKFZJT0xPLCBSRUdVTEFUT1JNT0RFMCwgUkVHVUxBVE9SU0VUVElORzAsCVwKIAkJCSAgICBtYzEzNzgzX3Zpb2xvX3ZhbCksCiAJTUMxMzc4M19ERUZJTkVfUkVHVShWRElHLCBSRUdVTEFUT1JNT0RFMCwgUkVHVUxBVE9SU0VUVElORzAsCVwKQEAgLTI1NSw3ICsyMDksNyBAQAogCQkJICAgIG1jMTM3ODNfdmVzaW1fdmFsKSwKIAlNQzEzNzgzX0RFRklORV9SRUdVKFZDQU0sIFJFR1VMQVRPUk1PREUxLCBSRUdVTEFUT1JTRVRUSU5HMCwJXAogCQkJICAgIG1jMTM3ODNfdmNhbV92YWwpLAotCU1DMTM3ODNfRklYRURfREVGSU5FKFJFR1UsIFZSRkJHLCBSRUdVTEFUT1JNT0RFMSwgbWMxMzc4M192cmZiZ192YWwpLAorCU1DMTM3ODNfRklYRURfREVGSU5FKFJFRywgVlJGQkcsIFJFR1VMQVRPUk1PREUxLCBtYzEzNzgzX3ZyZmJnX3ZhbCksCiAJTUMxMzc4M19ERUZJTkVfUkVHVShWVklCLCBSRUdVTEFUT1JNT0RFMSwgUkVHVUxBVE9SU0VUVElORzEsCVwKIAkJCSAgICBtYzEzNzgzX3Z2aWJfdmFsKSwKIAlNQzEzNzgzX0RFRklORV9SRUdVKFZSRjEsIFJFR1VMQVRPUk1PREUxLCBSRUdVTEFUT1JTRVRUSU5HMSwJXApAQCAtMjY2LDIxNSArMjIwLDI0IEBACiAJCQkgICAgbWMxMzc4M192bW1jX3ZhbCksCiAJTUMxMzc4M19ERUZJTkVfUkVHVShWTU1DMiwgUkVHVUxBVE9STU9ERTEsIFJFR1VMQVRPUlNFVFRJTkcxLAlcCiAJCQkgICAgbWMxMzc4M192bW1jX3ZhbCksCi0JTUMxMzc4M19HUE9fREVGSU5FKFJFR1UsIEdQTzEsIFBPV0VSTUlTQywgbWMxMzc4M19ncG9fdmFsKSwKLQlNQzEzNzgzX0dQT19ERUZJTkUoUkVHVSwgR1BPMiwgUE9XRVJNSVNDLCBtYzEzNzgzX2dwb192YWwpLAotCU1DMTM3ODNfR1BPX0RFRklORShSRUdVLCBHUE8zLCBQT1dFUk1JU0MsIG1jMTM3ODNfZ3BvX3ZhbCksCi0JTUMxMzc4M19HUE9fREVGSU5FKFJFR1UsIEdQTzQsIFBPV0VSTUlTQywgbWMxMzc4M19ncG9fdmFsKSwKLQlNQzEzNzgzX0dQT19ERUZJTkUoUkVHVSwgUFdHVDFTUEksIFBPV0VSTUlTQywgbWMxMzc4M19wd2d0ZHJ2X3ZhbCksCi0JTUMxMzc4M19HUE9fREVGSU5FKFJFR1UsIFBXR1QyU1BJLCBQT1dFUk1JU0MsIG1jMTM3ODNfcHdndGRydl92YWwpLAorCU1DMTM3ODNfR1BPX0RFRklORShSRUcsIEdQTzEsIFBPV0VSTUlTQywgbWMxMzc4M19ncG9fdmFsKSwKKwlNQzEzNzgzX0dQT19ERUZJTkUoUkVHLCBHUE8yLCBQT1dFUk1JU0MsIG1jMTM3ODNfZ3BvX3ZhbCksCisJTUMxMzc4M19HUE9fREVGSU5FKFJFRywgR1BPMywgUE9XRVJNSVNDLCBtYzEzNzgzX2dwb192YWwpLAorCU1DMTM3ODNfR1BPX0RFRklORShSRUcsIEdQTzQsIFBPV0VSTUlTQywgbWMxMzc4M19ncG9fdmFsKSwKKwlNQzEzNzgzX0dQT19ERUZJTkUoUkVHLCBQV0dUMVNQSSwgUE9XRVJNSVNDLCBtYzEzNzgzX3B3Z3RkcnZfdmFsKSwKKwlNQzEzNzgzX0dQT19ERUZJTkUoUkVHLCBQV0dUMlNQSSwgUE9XRVJNSVNDLCBtYzEzNzgzX3B3Z3RkcnZfdmFsKSwKIH07CiAKLXN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9wcml2IHsKLQlzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MzsKLQl1MzIgcG93ZXJtaXNjX3B3Z3Rfc3RhdGU7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJlZ3VsYXRvcnNbXTsKLX07Ci0KLXN0YXRpYyBpbnQgbWMxMzc4M19yZWd1bGF0b3JfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQorc3RhdGljIGludCBtYzEzNzgzX3Bvd2VybWlzY19ybXcoc3RydWN0IG1jMTN4eHhfcmVndWxhdG9yX3ByaXYgKnByaXYsIHUzMiBtYXNrLAorCQl1MzIgdmFsKQogewotCXN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKLQlpbnQgcmV0OwotCi0JZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICIlcyBpZDogJWRcbiIsIF9fZnVuY19fLCBpZCk7Ci0KLQltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7Ci0JcmV0ID0gbWMxMzc4M19yZWdfcm13KHByaXYtPm1jMTM3ODMsIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0ucmVnLAotCQkJbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0LAotCQkJbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0KTsKLQltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbWMxMzc4M19yZWd1bGF0b3JfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKLXsKLQlzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfcHJpdiAqcHJpdiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0JaW50IGlkID0gcmRldl9nZXRfaWQocmRldik7Ci0JaW50IHJldDsKLQotCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkXG4iLCBfX2Z1bmNfXywgaWQpOwotCi0JbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOwotCXJldCA9IG1jMTM3ODNfcmVnX3Jtdyhwcml2LT5tYzEzNzgzLCBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLnJlZywKLQkJCW1jMTM3ODNfcmVndWxhdG9yc1tpZF0uZW5hYmxlX2JpdCwgMCk7Ci0JbWMxMzc4M191bmxvY2socHJpdi0+bWMxMzc4Myk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG1jMTM3ODNfcmVndWxhdG9yX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCi17Ci0Jc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCWludCByZXQsIGlkID0gcmRldl9nZXRfaWQocmRldik7Ci0JdW5zaWduZWQgaW50IHZhbDsKLQotCW1jMTM3ODNfbG9jayhwcml2LT5tYzEzNzgzKTsKLQlyZXQgPSBtYzEzNzgzX3JlZ19yZWFkKHByaXYtPm1jMTM3ODMsIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0ucmVnLCAmdmFsKTsKLQltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKLQotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gKHZhbCAmIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0uZW5hYmxlX2JpdCkgIT0gMDsKLX0KLQotc3RhdGljIGludCBtYzEzNzgzX3JlZ3VsYXRvcl9saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCQkJCQl1bnNpZ25lZCBzZWxlY3RvcikKLXsKLQlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKLQotCWlmIChzZWxlY3RvciA+PSBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLmRlc2Mubl92b2x0YWdlcykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gbWMxMzc4M19yZWd1bGF0b3JzW2lkXS52b2x0YWdlc1tzZWxlY3Rvcl07Ci19Ci0KLXN0YXRpYyBpbnQgbWMxMzc4M19nZXRfYmVzdF92b2x0YWdlX2luZGV4KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQkJCQkJaW50IG1pbl91ViwgaW50IG1heF91VikKLXsKLQlpbnQgcmVnX2lkID0gcmRldl9nZXRfaWQocmRldik7Ci0JaW50IGk7Ci0JaW50IGJlc3RtYXRjaDsKLQlpbnQgYmVzdGluZGV4OwotCi0JLyoKLQkgKiBMb2NhdGUgdGhlIG1pbmltdW0gdm9sdGFnZSBmaXR0aW5nIHRoZSBjcml0ZXJpYSBvbgotCSAqIHRoaXMgcmVndWxhdG9yLiBUaGUgc3dpdGNoYWJsZSB2b2x0YWdlcyBhcmUgbm90Ci0JICogaW4gc3RyaWN0IGZhbGxpbmcgb3JkZXIgc28gd2UgbmVlZCB0byBjaGVjayB0aGVtCi0JICogYWxsIGZvciB0aGUgYmVzdCBtYXRjaC4KLQkgKi8KLQliZXN0bWF0Y2ggPSBJTlRfTUFYOwotCWJlc3RpbmRleCA9IC0xOwotCWZvciAoaSA9IDA7IGkgPCBtYzEzNzgzX3JlZ3VsYXRvcnNbcmVnX2lkXS5kZXNjLm5fdm9sdGFnZXM7IGkrKykgewotCQlpZiAobWMxMzc4M19yZWd1bGF0b3JzW3JlZ19pZF0udm9sdGFnZXNbaV0gPj0gbWluX3VWICYmCi0JCSAgICBtYzEzNzgzX3JlZ3VsYXRvcnNbcmVnX2lkXS52b2x0YWdlc1tpXSA8IGJlc3RtYXRjaCkgewotCQkJYmVzdG1hdGNoID0gbWMxMzc4M19yZWd1bGF0b3JzW3JlZ19pZF0udm9sdGFnZXNbaV07Ci0JCQliZXN0aW5kZXggPSBpOwotCQl9Ci0JfQotCi0JaWYgKGJlc3RpbmRleCA8IDAgfHwgYmVzdG1hdGNoID4gbWF4X3VWKSB7Ci0JCWRldl93YXJuKCZyZGV2LT5kZXYsICJubyBwb3NzaWJsZSB2YWx1ZSBmb3IgJWQ8PXg8PSVkIHVWXG4iLAotCQkJCW1pbl91ViwgbWF4X3VWKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiBiZXN0aW5kZXg7Ci19Ci0KLXN0YXRpYyBpbnQgbWMxMzc4M19yZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCQkJCQlpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQotewotCXN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQlpbnQgdmFsdWUsIGlkID0gcmRldl9nZXRfaWQocmRldik7Ci0JaW50IHJldDsKLQotCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkIG1pbl91VjogJWQgbWF4X3VWOiAlZFxuIiwKLQkJX19mdW5jX18sIGlkLCBtaW5fdVYsIG1heF91Vik7Ci0KLQkvKiBGaW5kIHRoZSBiZXN0IGluZGV4ICovCi0JdmFsdWUgPSBtYzEzNzgzX2dldF9iZXN0X3ZvbHRhZ2VfaW5kZXgocmRldiwgbWluX3VWLCBtYXhfdVYpOwotCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgYmVzdCB2YWx1ZTogJWQgXG4iLCBfX2Z1bmNfXywgdmFsdWUpOwotCWlmICh2YWx1ZSA8IDApCi0JCXJldHVybiB2YWx1ZTsKLQotCW1jMTM3ODNfbG9jayhwcml2LT5tYzEzNzgzKTsKLQlyZXQgPSBtYzEzNzgzX3JlZ19ybXcocHJpdi0+bWMxMzc4MywgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS52c2VsX3JlZywKLQkJCW1jMTM3ODNfcmVndWxhdG9yc1tpZF0udnNlbF9tYXNrLAotCQkJdmFsdWUgPDwgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS52c2VsX3NoaWZ0KTsKLQltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbWMxMzc4M19yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCi17Ci0Jc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCWludCByZXQsIGlkID0gcmRldl9nZXRfaWQocmRldik7Ci0JdW5zaWduZWQgaW50IHZhbDsKLQotCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkXG4iLCBfX2Z1bmNfXywgaWQpOwotCi0JbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOwotCXJldCA9IG1jMTM3ODNfcmVnX3JlYWQocHJpdi0+bWMxMzc4MywKLQkJCQltYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLnZzZWxfcmVnLCAmdmFsKTsKLQltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKLQotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQl2YWwgPSAodmFsICYgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS52c2VsX21hc2spCi0JCT4+IG1jMTM3ODNfcmVndWxhdG9yc1tpZF0udnNlbF9zaGlmdDsKLQotCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkIHZhbDogJWRcbiIsIF9fZnVuY19fLCBpZCwgdmFsKTsKLQotCUJVR19PTih2YWwgPCAwIHx8IHZhbCA+IG1jMTM3ODNfcmVndWxhdG9yc1tpZF0uZGVzYy5uX3ZvbHRhZ2VzKTsKLQotCXJldHVybiBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLnZvbHRhZ2VzW3ZhbF07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYzEzNzgzX3JlZ3VsYXRvcl9vcHMgPSB7Ci0JLmVuYWJsZSA9IG1jMTM3ODNfcmVndWxhdG9yX2VuYWJsZSwKLQkuZGlzYWJsZSA9IG1jMTM3ODNfcmVndWxhdG9yX2Rpc2FibGUsCi0JLmlzX2VuYWJsZWQgPSBtYzEzNzgzX3JlZ3VsYXRvcl9pc19lbmFibGVkLAotCS5saXN0X3ZvbHRhZ2UgPSBtYzEzNzgzX3JlZ3VsYXRvcl9saXN0X3ZvbHRhZ2UsCi0JLnNldF92b2x0YWdlID0gbWMxMzc4M19yZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UsCi0JLmdldF92b2x0YWdlID0gbWMxMzc4M19yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UsCi19OwotCi1zdGF0aWMgaW50IG1jMTM3ODNfZml4ZWRfcmVndWxhdG9yX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQkJCQkJaW50IG1pbl91ViwgaW50IG1heF91VikKLXsKLQlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKLQotCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkIG1pbl91VjogJWQgbWF4X3VWOiAlZFxuIiwKLQkJX19mdW5jX18sIGlkLCBtaW5fdVYsIG1heF91Vik7Ci0KLQlpZiAobWluX3VWID49IG1jMTM3ODNfcmVndWxhdG9yc1tpZF0udm9sdGFnZXNbMF0gJiYKLQkgICAgbWF4X3VWIDw9IG1jMTM3ODNfcmVndWxhdG9yc1tpZF0udm9sdGFnZXNbMF0pCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgbWMxMzc4M19maXhlZF9yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCi17Ci0JaW50IGlkID0gcmRldl9nZXRfaWQocmRldik7Ci0KLQlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZFxuIiwgX19mdW5jX18sIGlkKTsKLQotCXJldHVybiBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLnZvbHRhZ2VzWzBdOwotfQotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWMxMzc4M19maXhlZF9yZWd1bGF0b3Jfb3BzID0gewotCS5lbmFibGUgPSBtYzEzNzgzX3JlZ3VsYXRvcl9lbmFibGUsCi0JLmRpc2FibGUgPSBtYzEzNzgzX3JlZ3VsYXRvcl9kaXNhYmxlLAotCS5pc19lbmFibGVkID0gbWMxMzc4M19yZWd1bGF0b3JfaXNfZW5hYmxlZCwKLQkubGlzdF92b2x0YWdlID0gbWMxMzc4M19yZWd1bGF0b3JfbGlzdF92b2x0YWdlLAotCS5zZXRfdm9sdGFnZSA9IG1jMTM3ODNfZml4ZWRfcmVndWxhdG9yX3NldF92b2x0YWdlLAotCS5nZXRfdm9sdGFnZSA9IG1jMTM3ODNfZml4ZWRfcmVndWxhdG9yX2dldF92b2x0YWdlLAotfTsKLQotc3RhdGljIGludCBtYzEzNzgzX3Bvd2VybWlzY19ybXcoc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3ByaXYgKnByaXYsIHUzMiBtYXNrLAotCQkJCSB1MzIgdmFsKQotewotCXN0cnVjdCBtYzEzNzgzICptYzEzNzgzID0gcHJpdi0+bWMxMzc4MzsKKwlzdHJ1Y3QgbWMxM3h4eCAqbWMxMzc4MyA9IHByaXYtPm1jMTN4eHg7CiAJaW50IHJldDsKIAl1MzIgdmFscmVhZDsKIAogCUJVR19PTih2YWwgJiB+bWFzayk7CiAKLQlyZXQgPSBtYzEzNzgzX3JlZ19yZWFkKG1jMTM3ODMsIE1DMTM3ODNfUkVHX1BPV0VSTUlTQywgJnZhbHJlYWQpOworCXJldCA9IG1jMTN4eHhfcmVnX3JlYWQobWMxMzc4MywgTUMxMzc4M19SRUdfUE9XRVJNSVNDLCAmdmFscmVhZCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNDg5LDM0ICsyNTIsMzYgQEAKIAl2YWxyZWFkID0gKHZhbHJlYWQgJiB+TUMxMzc4M19SRUdfUE9XRVJNSVNDX1BXR1RTUElfTSkgfAogCQkJCQkJcHJpdi0+cG93ZXJtaXNjX3B3Z3Rfc3RhdGU7CiAKLQlyZXR1cm4gbWMxMzc4M19yZWdfd3JpdGUobWMxMzc4MywgTUMxMzc4M19SRUdfUE9XRVJNSVNDLCB2YWxyZWFkKTsKKwlyZXR1cm4gbWMxM3h4eF9yZWdfd3JpdGUobWMxMzc4MywgTUMxMzc4M19SRUdfUE9XRVJNSVNDLCB2YWxyZWFkKTsKIH0KIAogc3RhdGljIGludCBtYzEzNzgzX2dwb19yZWd1bGF0b3JfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewotCXN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3JfcHJpdiAqcHJpdiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IG1jMTN4eHhfcmVndWxhdG9yICptYzEzeHh4X3JlZ3VsYXRvcnMgPSBwcml2LT5tYzEzeHh4X3JlZ3VsYXRvcnM7CiAJaW50IGlkID0gcmRldl9nZXRfaWQocmRldik7CiAJaW50IHJldDsKLQl1MzIgZW5fdmFsID0gbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0OworCXUzMiBlbl92YWwgPSBtYzEzeHh4X3JlZ3VsYXRvcnNbaWRdLmVuYWJsZV9iaXQ7CiAKIAlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZFxuIiwgX19mdW5jX18sIGlkKTsKIAogCS8qIFBvd2VyIEdhdGUgZW5hYmxlIHZhbHVlIGlzIDAgKi8KLQlpZiAoaWQgPT0gTUMxMzc4M19SRUdVX1BXR1QxU1BJIHx8Ci0JICAgIGlkID09IE1DMTM3ODNfUkVHVV9QV0dUMlNQSSkKKwlpZiAoaWQgPT0gTUMxMzc4M19SRUdfUFdHVDFTUEkgfHwKKwkgICAgaWQgPT0gTUMxMzc4M19SRUdfUFdHVDJTUEkpCiAJCWVuX3ZhbCA9IDA7CiAKLQltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7Ci0JcmV0ID0gbWMxMzc4M19wb3dlcm1pc2Nfcm13KHByaXYsIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0uZW5hYmxlX2JpdCwKKwltYzEzeHh4X2xvY2socHJpdi0+bWMxM3h4eCk7CisJcmV0ID0gbWMxMzc4M19wb3dlcm1pc2Nfcm13KHByaXYsIG1jMTN4eHhfcmVndWxhdG9yc1tpZF0uZW5hYmxlX2JpdCwKIAkJCQkJZW5fdmFsKTsKLQltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKwltYzEzeHh4X3VubG9jayhwcml2LT5tYzEzeHh4KTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbWMxMzc4M19ncG9fcmVndWxhdG9yX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7Ci0Jc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3IgKm1jMTN4eHhfcmVndWxhdG9ycyA9IHByaXYtPm1jMTN4eHhfcmVndWxhdG9yczsKIAlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKIAlpbnQgcmV0OwogCXUzMiBkaXNfdmFsID0gMDsKQEAgLTUyNCwyNyArMjg5LDI4IEBACiAJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICIlcyBpZDogJWRcbiIsIF9fZnVuY19fLCBpZCk7CiAKIAkvKiBQb3dlciBHYXRlIGRpc2FibGUgdmFsdWUgaXMgMSAqLwotCWlmIChpZCA9PSBNQzEzNzgzX1JFR1VfUFdHVDFTUEkgfHwKLQkgICAgaWQgPT0gTUMxMzc4M19SRUdVX1BXR1QyU1BJKQotCQlkaXNfdmFsID0gbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0OworCWlmIChpZCA9PSBNQzEzNzgzX1JFR19QV0dUMVNQSSB8fAorCSAgICBpZCA9PSBNQzEzNzgzX1JFR19QV0dUMlNQSSkKKwkJZGlzX3ZhbCA9IG1jMTN4eHhfcmVndWxhdG9yc1tpZF0uZW5hYmxlX2JpdDsKIAotCW1jMTM3ODNfbG9jayhwcml2LT5tYzEzNzgzKTsKLQlyZXQgPSBtYzEzNzgzX3Bvd2VybWlzY19ybXcocHJpdiwgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0LAorCW1jMTN4eHhfbG9jayhwcml2LT5tYzEzeHh4KTsKKwlyZXQgPSBtYzEzNzgzX3Bvd2VybWlzY19ybXcocHJpdiwgbWMxM3h4eF9yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0LAogCQkJCQlkaXNfdmFsKTsKLQltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKwltYzEzeHh4X3VubG9jayhwcml2LT5tYzEzeHh4KTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbWMxMzc4M19ncG9fcmVndWxhdG9yX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7Ci0Jc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3IgKm1jMTN4eHhfcmVndWxhdG9ycyA9IHByaXYtPm1jMTN4eHhfcmVndWxhdG9yczsKIAlpbnQgcmV0LCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOwogCXVuc2lnbmVkIGludCB2YWw7CiAKLQltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7Ci0JcmV0ID0gbWMxMzc4M19yZWdfcmVhZChwcml2LT5tYzEzNzgzLCBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLnJlZywgJnZhbCk7Ci0JbWMxMzc4M191bmxvY2socHJpdi0+bWMxMzc4Myk7CisJbWMxM3h4eF9sb2NrKHByaXYtPm1jMTN4eHgpOworCXJldCA9IG1jMTN4eHhfcmVnX3JlYWQocHJpdi0+bWMxM3h4eCwgbWMxM3h4eF9yZWd1bGF0b3JzW2lkXS5yZWcsICZ2YWwpOworCW1jMTN4eHhfdW5sb2NrKHByaXYtPm1jMTN4eHgpOwogCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTU1NCwyMiArMzIwLDIyIEBACiAJdmFsID0gKHZhbCAmIH5NQzEzNzgzX1JFR19QT1dFUk1JU0NfUFdHVFNQSV9NKSB8CiAJICAgICAgKHByaXYtPnBvd2VybWlzY19wd2d0X3N0YXRlIF4gTUMxMzc4M19SRUdfUE9XRVJNSVNDX1BXR1RTUElfTSk7CiAKLQlyZXR1cm4gKHZhbCAmIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0uZW5hYmxlX2JpdCkgIT0gMDsKKwlyZXR1cm4gKHZhbCAmIG1jMTN4eHhfcmVndWxhdG9yc1tpZF0uZW5hYmxlX2JpdCkgIT0gMDsKIH0KIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1jMTM3ODNfZ3BvX3JlZ3VsYXRvcl9vcHMgPSB7CiAJLmVuYWJsZSA9IG1jMTM3ODNfZ3BvX3JlZ3VsYXRvcl9lbmFibGUsCiAJLmRpc2FibGUgPSBtYzEzNzgzX2dwb19yZWd1bGF0b3JfZGlzYWJsZSwKIAkuaXNfZW5hYmxlZCA9IG1jMTM3ODNfZ3BvX3JlZ3VsYXRvcl9pc19lbmFibGVkLAotCS5saXN0X3ZvbHRhZ2UgPSBtYzEzNzgzX3JlZ3VsYXRvcl9saXN0X3ZvbHRhZ2UsCi0JLnNldF92b2x0YWdlID0gbWMxMzc4M19maXhlZF9yZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UsCi0JLmdldF92b2x0YWdlID0gbWMxMzc4M19maXhlZF9yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZSA9IG1jMTN4eHhfcmVndWxhdG9yX2xpc3Rfdm9sdGFnZSwKKwkuc2V0X3ZvbHRhZ2UgPSBtYzEzeHh4X2ZpeGVkX3JlZ3VsYXRvcl9zZXRfdm9sdGFnZSwKKwkuZ2V0X3ZvbHRhZ2UgPSBtYzEzeHh4X2ZpeGVkX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG1jMTM3ODNfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3ByaXYgKnByaXY7Ci0Jc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG1jMTN4eHhfcmVndWxhdG9yX3ByaXYgKnByaXY7CisJc3RydWN0IG1jMTN4eHggKm1jMTM3ODMgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KIAkJZGV2X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKIAlzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGE7CkBAIC01ODMsNyArMzQ5LDggQEAKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcHJpdi0+bWMxMzc4MyA9IG1jMTM3ODM7CisJcHJpdi0+bWMxM3h4eF9yZWd1bGF0b3JzID0gbWMxMzc4M19yZWd1bGF0b3JzOworCXByaXYtPm1jMTN4eHggPSBtYzEzNzgzOwogCiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcmVndWxhdG9yczsgaSsrKSB7CiAJCWluaXRfZGF0YSA9ICZwZGF0YS0+cmVndWxhdG9yc1tpXTsKQEAgLTYxMyw3ICszODAsNyBAQAogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYzEzNzgzX3JlZ3VsYXRvcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KIAkJZGV2X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21jMTM4OTItcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzODkyLXJlZ3VsYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOGY3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzODkyLXJlZ3VsYXRvci5jCkBAIC0wLDAgKzEsNjM1IEBACisvKgorICogUmVndWxhdG9yIERyaXZlciBmb3IgRnJlZXNjYWxlIE1DMTM4OTIgUE1JQworICoKKyAqIENvcHlyaWdodCAyMDEwIFlvbmcgU2hlbiA8eW9uZy5zaGVuQGxpbmFyby5vcmc+CisgKgorICogQmFzZWQgb24gZHJhZnQgZHJpdmVyIGZyb20gQXJuYXVkIFBhdGFyZCA8YXJuYXVkLnBhdGFyZEBydHAtbmV0Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tZmQvbWMxMzg5Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSAibWMxM3h4eC5oIgorCisjZGVmaW5lIE1DMTM4OTJfUkVWSVNJT04JCQk3CisKKyNkZWZpbmUgTUMxMzg5Ml9QT1dFUkNUTDAJCQkxMworI2RlZmluZSBNQzEzODkyX1BPV0VSQ1RMMF9VU0VST0ZGU1BJCQkzCisjZGVmaW5lIE1DMTM4OTJfUE9XRVJDVEwwX1ZDT0lOQ0VMTFZTRUwJCTIwCisjZGVmaW5lIE1DMTM4OTJfUE9XRVJDVEwwX1ZDT0lOQ0VMTFZTRUxfTQkoNzw8MjApCisjZGVmaW5lIE1DMTM4OTJfUE9XRVJDVEwwX1ZDT0lOQ0VMTEVOCQkoMTw8MjMpCisKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlMwX1NXeEhJCQkoMTw8MjMpCisKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlMwCQkJMjQKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlMwX1NXMVZTRUwJCTAKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlMwX1NXMVZTRUxfTQkJKDB4MWY8PDApCisjZGVmaW5lIE1DMTM4OTJfU1dJVENIRVJTMF9TVzFISQkJKDE8PDIzKQorI2RlZmluZSBNQzEzODkyX1NXSVRDSEVSUzBfU1cxRU4JCTAKKworI2RlZmluZSBNQzEzODkyX1NXSVRDSEVSUzEJCQkyNQorI2RlZmluZSBNQzEzODkyX1NXSVRDSEVSUzFfU1cyVlNFTAkJMAorI2RlZmluZSBNQzEzODkyX1NXSVRDSEVSUzFfU1cyVlNFTF9NCQkoMHgxZjw8MCkKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlMxX1NXMkhJCQkoMTw8MjMpCisjZGVmaW5lIE1DMTM4OTJfU1dJVENIRVJTMV9TVzJFTgkJMAorCisjZGVmaW5lIE1DMTM4OTJfU1dJVENIRVJTMgkJCTI2CisjZGVmaW5lIE1DMTM4OTJfU1dJVENIRVJTMl9TVzNWU0VMCQkwCisjZGVmaW5lIE1DMTM4OTJfU1dJVENIRVJTMl9TVzNWU0VMX00JCSgweDFmPDwwKQorI2RlZmluZSBNQzEzODkyX1NXSVRDSEVSUzJfU1czSEkJCSgxPDwyMykKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlMyX1NXM0VOCQkwCisKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlMzCQkJMjcKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlMzX1NXNFZTRUwJCTAKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlMzX1NXNFZTRUxfTQkJKDB4MWY8PDApCisjZGVmaW5lIE1DMTM4OTJfU1dJVENIRVJTM19TVzRISQkJKDE8PDIzKQorI2RlZmluZSBNQzEzODkyX1NXSVRDSEVSUzNfU1c0RU4JCTAKKworI2RlZmluZSBNQzEzODkyX1NXSVRDSEVSUzQJCQkyOAorI2RlZmluZSBNQzEzODkyX1NXSVRDSEVSUzRfU1cxTU9ERQkJMAorI2RlZmluZSBNQzEzODkyX1NXSVRDSEVSUzRfU1cxTU9ERV9BVVRPCQkoODw8MCkKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlM0X1NXMU1PREVfTQkJKDB4Zjw8MCkKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlM0X1NXMk1PREUJCTEwCisjZGVmaW5lIE1DMTM4OTJfU1dJVENIRVJTNF9TVzJNT0RFX0FVVE8JCSg4PDwxMCkKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlM0X1NXMk1PREVfTQkJKDB4Zjw8MTApCisKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlM1CQkJMjkKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlM1X1NXM01PREUJCTAKKyNkZWZpbmUgTUMxMzg5Ml9TV0lUQ0hFUlM1X1NXM01PREVfQVVUTwkJKDg8PDApCisjZGVmaW5lIE1DMTM4OTJfU1dJVENIRVJTNV9TVzNNT0RFX00JCSgweGY8PDApCisjZGVmaW5lIE1DMTM4OTJfU1dJVENIRVJTNV9TVzRNT0RFCQk4CisjZGVmaW5lIE1DMTM4OTJfU1dJVENIRVJTNV9TVzRNT0RFX0FVVE8JCSg4PDw4KQorI2RlZmluZSBNQzEzODkyX1NXSVRDSEVSUzVfU1c0TU9ERV9NCQkoMHhmPDw4KQorI2RlZmluZSBNQzEzODkyX1NXSVRDSEVSUzVfU1dCU1RFTgkJKDE8PDIwKQorCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9SU0VUVElORzAJCTMwCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9SU0VUVElORzBfVkdFTjFWU0VMCTAKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JTRVRUSU5HMF9WRElHVlNFTAk0CisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9SU0VUVElORzBfVkdFTjJWU0VMCTYKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JTRVRUSU5HMF9WUExMVlNFTAk5CisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9SU0VUVElORzBfVlVTQjJWU0VMCTExCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9SU0VUVElORzBfVkdFTjNWU0VMCTE0CisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9SU0VUVElORzBfVkNBTVZTRUwJMTYKKworI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUlNFVFRJTkcwX1ZHRU4xVlNFTF9NCSgzPDwwKQorI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUlNFVFRJTkcwX1ZESUdWU0VMX00JKDM8PDQpCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9SU0VUVElORzBfVkdFTjJWU0VMX00JKDc8PDYpCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9SU0VUVElORzBfVlBMTFZTRUxfTQkoMzw8OSkKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JTRVRUSU5HMF9WVVNCMlZTRUxfTQkoMzw8MTEpCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9SU0VUVElORzBfVkdFTjNWU0VMX00JKDE8PDE0KQorI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUlNFVFRJTkcwX1ZDQU1WU0VMX00JKDM8PDE2KQorCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9SU0VUVElORzEJCTMxCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9SU0VUVElORzFfVlZJREVPVlNFTAkyCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9SU0VUVElORzFfVkFVRElPVlNFTAk0CisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9SU0VUVElORzFfVlNEVlNFTAk2CisKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JTRVRUSU5HMV9WVklERU9WU0VMX00JKDM8PDIpCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9SU0VUVElORzFfVkFVRElPVlNFTF9NCSgzPDw0KQorI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUlNFVFRJTkcxX1ZTRFZTRUxfTQkoNzw8NikKKworI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUk1PREUwCQkJMzIKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMF9WR0VOMUVOCQkoMTw8MCkKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMF9WR0VOMVNUREJZCSgxPDwxKQorI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUk1PREUwX1ZHRU4xTU9ERQkoMTw8MikKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMF9WSU9ISUVOCQkoMTw8MykKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMF9WSU9ISVNUREJZCSgxPDw0KQorI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUk1PREUwX1ZJT0hJTU9ERQkoMTw8NSkKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMF9WRElHRU4JCSgxPDw5KQorI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUk1PREUwX1ZESUdTVERCWQkoMTw8MTApCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9STU9ERTBfVkRJR01PREUJCSgxPDwxMSkKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMF9WR0VOMkVOCQkoMTw8MTIpCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9STU9ERTBfVkdFTjJTVERCWQkoMTw8MTMpCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9STU9ERTBfVkdFTjJNT0RFCSgxPDwxNCkKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMF9WUExMRU4JCSgxPDwxNSkKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMF9WUExMU1REQlkJKDE8PDE2KQorI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUk1PREUwX1ZQTExNT0RFCQkoMTw8MTcpCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9STU9ERTBfVlVTQjJFTgkJKDE8PDE4KQorI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUk1PREUwX1ZVU0IyU1REQlkJKDE8PDE5KQorI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUk1PREUwX1ZVU0IyTU9ERQkoMTw8MjApCisKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMQkJCTMzCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9STU9ERTFfVkdFTjNFTgkJKDE8PDApCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9STU9ERTFfVkdFTjNTVERCWQkoMTw8MSkKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMV9WR0VOM01PREUJKDE8PDIpCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9STU9ERTFfVkNBTUVOCQkoMTw8NikKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMV9WQ0FNU1REQlkJKDE8PDcpCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9STU9ERTFfVkNBTU1PREUJCSgxPDw4KQorI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUk1PREUxX1ZDQU1DT05GSUdFTgkoMTw8OSkKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMV9WVklERU9FTgkJKDE8PDEyKQorI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUk1PREUxX1ZWSURFT1NUREJZCSgxPDwxMykKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMV9WVklERU9NT0RFCSgxPDwxNCkKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMV9WQVVESU9FTgkJKDE8PDE1KQorI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUk1PREUxX1ZBVURJT1NUREJZCSgxPDwxNikKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMV9WQVVESU9NT0RFCSgxPDwxNykKKyNkZWZpbmUgTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMV9WU0RFTgkJKDE8PDE4KQorI2RlZmluZSBNQzEzODkyX1JFR1VMQVRPUk1PREUxX1ZTRFNUREJZCQkoMTw8MTkpCisjZGVmaW5lIE1DMTM4OTJfUkVHVUxBVE9STU9ERTFfVlNETU9ERQkJKDE8PDIwKQorCisjZGVmaW5lIE1DMTM4OTJfUE9XRVJNSVNDCQkJMzQKKyNkZWZpbmUgTUMxMzg5Ml9QT1dFUk1JU0NfR1BPMUVOCQkoMTw8NikKKyNkZWZpbmUgTUMxMzg5Ml9QT1dFUk1JU0NfR1BPMkVOCQkoMTw8OCkKKyNkZWZpbmUgTUMxMzg5Ml9QT1dFUk1JU0NfR1BPM0VOCQkoMTw8MTApCisjZGVmaW5lIE1DMTM4OTJfUE9XRVJNSVNDX0dQTzRFTgkJKDE8PDEyKQorI2RlZmluZSBNQzEzODkyX1BPV0VSTUlTQ19QV0dUMVNQSUVOCQkoMTw8MTUpCisjZGVmaW5lIE1DMTM4OTJfUE9XRVJNSVNDX1BXR1QyU1BJRU4JCSgxPDwxNikKKyNkZWZpbmUgTUMxMzg5Ml9QT1dFUk1JU0NfR1BPNEFESU5FTgkJKDE8PDIxKQorCisjZGVmaW5lIE1DMTM4OTJfUE9XRVJNSVNDX1BXR1RTUElfTQkJKDMgPDwgMTUpCisKKyNkZWZpbmUgTUMxMzg5Ml9VU0IxCQkJCTUwCisjZGVmaW5lIE1DMTM4OTJfVVNCMV9WVVNCRU4JCQkoMTw8MykKKworc3RhdGljIGNvbnN0IGludCBtYzEzODkyX3Zjb2luY2VsbFtdID0geworCTI1MDAwMDAsIDI3MDAwMDAsIDI4MDAwMDAsIDI5MDAwMDAsIDMwMDAwMDAsIDMxMDAwMDAsCisJMzIwMDAwMCwgMzMwMDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgbWMxMzg5Ml9zdzFbXSA9IHsKKwk2MDAwMDAsICAgNjI1MDAwLCAgNjUwMDAwLCAgNjc1MDAwLCAgNzAwMDAwLCAgNzI1MDAwLAorCTc1MDAwMCwgICA3NzUwMDAsICA4MDAwMDAsICA4MjUwMDAsICA4NTAwMDAsICA4NzUwMDAsCisJOTAwMDAwLCAgIDkyNTAwMCwgIDk1MDAwMCwgIDk3NTAwMCwgMTAwMDAwMCwgMTAyNTAwMCwKKwkxMDUwMDAwLCAxMDc1MDAwLCAxMTAwMDAwLCAxMTI1MDAwLCAxMTUwMDAwLCAxMTc1MDAwLAorCTEyMDAwMDAsIDEyMjUwMDAsIDEyNTAwMDAsIDEyNzUwMDAsIDEzMDAwMDAsIDEzMjUwMDAsCisJMTM1MDAwMCwgMTM3NTAwMAorfTsKKworc3RhdGljIGNvbnN0IGludCBtYzEzODkyX3N3W10gPSB7CisJNjAwMDAwLCAgIDYyNTAwMCwgIDY1MDAwMCwgIDY3NTAwMCwgIDcwMDAwMCwgIDcyNTAwMCwKKwk3NTAwMDAsICAgNzc1MDAwLCAgODAwMDAwLCAgODI1MDAwLCAgODUwMDAwLCAgODc1MDAwLAorCTkwMDAwMCwgICA5MjUwMDAsICA5NTAwMDAsICA5NzUwMDAsIDEwMDAwMDAsIDEwMjUwMDAsCisJMTA1MDAwMCwgMTA3NTAwMCwgMTEwMDAwMCwgMTEyNTAwMCwgMTE1MDAwMCwgMTE3NTAwMCwKKwkxMjAwMDAwLCAxMjI1MDAwLCAxMjUwMDAwLCAxMjc1MDAwLCAxMzAwMDAwLCAxMzI1MDAwLAorCTEzNTAwMDAsIDEzNzUwMDAsIDE0MDAwMDAsIDE0MjUwMDAsIDE0NTAwMDAsIDE0NzUwMDAsCisJMTUwMDAwMCwgMTUyNTAwMCwgMTU1MDAwMCwgMTU3NTAwMCwgMTYwMDAwMCwgMTYyNTAwMCwKKwkxNjUwMDAwLCAxNjc1MDAwLCAxNzAwMDAwLCAxNzI1MDAwLCAxNzUwMDAwLCAxNzc1MDAwLAorCTE4MDAwMDAsIDE4MjUwMDAsIDE4NTAwMDAsIDE4NzUwMDAKK307CisKK3N0YXRpYyBjb25zdCBpbnQgbWMxMzg5Ml9zd2JzdFtdID0geworCTUwMDAwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IG1jMTM4OTJfdmlvaGlbXSA9IHsKKwkyNzc1MDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBtYzEzODkyX3ZwbGxbXSA9IHsKKwkxMDUwMDAwLCAxMjUwMDAwLCAxNjUwMDAwLCAxODAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBtYzEzODkyX3ZkaWdbXSA9IHsKKwkxMDUwMDAwLCAxMjUwMDAwLCAxNjUwMDAwLCAxODAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBtYzEzODkyX3ZzZFtdID0geworCTE4MDAwMDAsIDIwMDAwMDAsIDI2MDAwMDAsIDI3MDAwMDAsCisJMjgwMDAwMCwgMjkwMDAwMCwgMzAwMDAwMCwgMzE1MDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgbWMxMzg5Ml92dXNiMltdID0geworCTI0MDAwMDAsIDI2MDAwMDAsIDI3MDAwMDAsIDI3NzUwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IG1jMTM4OTJfdnZpZGVvW10gPSB7CisJMjcwMDAwMCwgMjc3NTAwMCwgMjUwMDAwMCwgMjYwMDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgbWMxMzg5Ml92YXVkaW9bXSA9IHsKKwkyMzAwMDAwLCAyNTAwMDAwLCAyNzc1MDAwLCAzMDAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBtYzEzODkyX3ZjYW1bXSA9IHsKKwkyNTAwMDAwLCAyNjAwMDAwLCAyNzUwMDAwLCAzMDAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBtYzEzODkyX3ZnZW4xW10gPSB7CisJMTIwMDAwMCwgMTUwMDAwMCwgMjc3NTAwMCwgMzE1MDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgbWMxMzg5Ml92Z2VuMltdID0geworCTEyMDAwMDAsIDE1MDAwMDAsIDE2MDAwMDAsIDE4MDAwMDAsCisJMjcwMDAwMCwgMjgwMDAwMCwgMzAwMDAwMCwgMzE1MDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgbWMxMzg5Ml92Z2VuM1tdID0geworCTE4MDAwMDAsIDI5MDAwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IG1jMTM4OTJfdnVzYltdID0geworCTMzMDAwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IG1jMTM4OTJfZ3BvW10gPSB7CisJMjc1MDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgbWMxMzg5Ml9wd2d0ZHJ2W10gPSB7CisJNTAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYzEzODkyX2dwb19yZWd1bGF0b3Jfb3BzOworLyogc3cgcmVndWxhdG9ycyBuZWVkIHNwZWNpYWwgY2FyZSBkdWUgdG8gdGhlICJoaSBiaXQiICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWMxMzg5Ml9zd19yZWd1bGF0b3Jfb3BzOworCisKKyNkZWZpbmUgTUMxMzg5Ml9GSVhFRF9ERUZJTkUobmFtZSwgcmVnLCB2b2x0YWdlcykJCVwKKwlNQzEzeHh4X0ZJWEVEX0RFRklORShNQzEzODkyXywgbmFtZSwgcmVnLCB2b2x0YWdlcywJXAorCQkJbWMxM3h4eF9maXhlZF9yZWd1bGF0b3Jfb3BzKQorCisjZGVmaW5lIE1DMTM4OTJfR1BPX0RFRklORShuYW1lLCByZWcsIHZvbHRhZ2VzKQkJCVwKKwlNQzEzeHh4X0dQT19ERUZJTkUoTUMxMzg5Ml8sIG5hbWUsIHJlZywgdm9sdGFnZXMsCVwKKwkJCW1jMTM4OTJfZ3BvX3JlZ3VsYXRvcl9vcHMpCisKKyNkZWZpbmUgTUMxMzg5Ml9TV19ERUZJTkUobmFtZSwgcmVnLCB2c2VsX3JlZywgdm9sdGFnZXMpCVwKKwlNQzEzeHh4X0RFRklORShNQzEzODkyXywgbmFtZSwgcmVnLCB2c2VsX3JlZywgdm9sdGFnZXMsIFwKKwkJCW1jMTM4OTJfc3dfcmVndWxhdG9yX29wcykKKworI2RlZmluZSBNQzEzODkyX0RFRklORV9SRUdVKG5hbWUsIHJlZywgdnNlbF9yZWcsIHZvbHRhZ2VzKQlcCisJTUMxM3h4eF9ERUZJTkUoTUMxMzg5Ml8sIG5hbWUsIHJlZywgdnNlbF9yZWcsIHZvbHRhZ2VzLCBcCisJCQltYzEzeHh4X3JlZ3VsYXRvcl9vcHMpCisKK3N0YXRpYyBzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3IgbWMxMzg5Ml9yZWd1bGF0b3JzW10gPSB7CisJTUMxMzg5Ml9ERUZJTkVfUkVHVShWQ09JTkNFTEwsIFBPV0VSQ1RMMCwgUE9XRVJDVEwwLCBtYzEzODkyX3Zjb2luY2VsbCksCisJTUMxMzg5Ml9TV19ERUZJTkUoU1cxLCBTV0lUQ0hFUlMwLCBTV0lUQ0hFUlMwLCBtYzEzODkyX3N3MSksCisJTUMxMzg5Ml9TV19ERUZJTkUoU1cyLCBTV0lUQ0hFUlMxLCBTV0lUQ0hFUlMxLCBtYzEzODkyX3N3KSwKKwlNQzEzODkyX1NXX0RFRklORShTVzMsIFNXSVRDSEVSUzIsIFNXSVRDSEVSUzIsIG1jMTM4OTJfc3cpLAorCU1DMTM4OTJfU1dfREVGSU5FKFNXNCwgU1dJVENIRVJTMywgU1dJVENIRVJTMywgbWMxMzg5Ml9zdyksCisJTUMxMzg5Ml9GSVhFRF9ERUZJTkUoU1dCU1QsIFNXSVRDSEVSUzUsIG1jMTM4OTJfc3dic3QpLAorCU1DMTM4OTJfRklYRURfREVGSU5FKFZJT0hJLCBSRUdVTEFUT1JNT0RFMCwgbWMxMzg5Ml92aW9oaSksCisJTUMxMzg5Ml9ERUZJTkVfUkVHVShWUExMLCBSRUdVTEFUT1JNT0RFMCwgUkVHVUxBVE9SU0VUVElORzAsCVwKKwkJbWMxMzg5Ml92cGxsKSwKKwlNQzEzODkyX0RFRklORV9SRUdVKFZESUcsIFJFR1VMQVRPUk1PREUwLCBSRUdVTEFUT1JTRVRUSU5HMCwJXAorCQltYzEzODkyX3ZkaWcpLAorCU1DMTM4OTJfREVGSU5FX1JFR1UoVlNELCBSRUdVTEFUT1JNT0RFMSwgUkVHVUxBVE9SU0VUVElORzEsCVwKKwkJbWMxMzg5Ml92c2QpLAorCU1DMTM4OTJfREVGSU5FX1JFR1UoVlVTQjIsIFJFR1VMQVRPUk1PREUwLCBSRUdVTEFUT1JTRVRUSU5HMCwJXAorCQltYzEzODkyX3Z1c2IyKSwKKwlNQzEzODkyX0RFRklORV9SRUdVKFZWSURFTywgUkVHVUxBVE9STU9ERTEsIFJFR1VMQVRPUlNFVFRJTkcxLAlcCisJCW1jMTM4OTJfdnZpZGVvKSwKKwlNQzEzODkyX0RFRklORV9SRUdVKFZBVURJTywgUkVHVUxBVE9STU9ERTEsIFJFR1VMQVRPUlNFVFRJTkcxLAlcCisJCW1jMTM4OTJfdmF1ZGlvKSwKKwlNQzEzODkyX0RFRklORV9SRUdVKFZDQU0sIFJFR1VMQVRPUk1PREUxLCBSRUdVTEFUT1JTRVRUSU5HMCwJXAorCQltYzEzODkyX3ZjYW0pLAorCU1DMTM4OTJfREVGSU5FX1JFR1UoVkdFTjEsIFJFR1VMQVRPUk1PREUwLCBSRUdVTEFUT1JTRVRUSU5HMCwJXAorCQltYzEzODkyX3ZnZW4xKSwKKwlNQzEzODkyX0RFRklORV9SRUdVKFZHRU4yLCBSRUdVTEFUT1JNT0RFMCwgUkVHVUxBVE9SU0VUVElORzAsCVwKKwkJbWMxMzg5Ml92Z2VuMiksCisJTUMxMzg5Ml9ERUZJTkVfUkVHVShWR0VOMywgUkVHVUxBVE9STU9ERTEsIFJFR1VMQVRPUlNFVFRJTkcwLAlcCisJCW1jMTM4OTJfdmdlbjMpLAorCU1DMTM4OTJfRklYRURfREVGSU5FKFZVU0IsIFVTQjEsIG1jMTM4OTJfdnVzYiksCisJTUMxMzg5Ml9HUE9fREVGSU5FKEdQTzEsIFBPV0VSTUlTQywgbWMxMzg5Ml9ncG8pLAorCU1DMTM4OTJfR1BPX0RFRklORShHUE8yLCBQT1dFUk1JU0MsIG1jMTM4OTJfZ3BvKSwKKwlNQzEzODkyX0dQT19ERUZJTkUoR1BPMywgUE9XRVJNSVNDLCBtYzEzODkyX2dwbyksCisJTUMxMzg5Ml9HUE9fREVGSU5FKEdQTzQsIFBPV0VSTUlTQywgbWMxMzg5Ml9ncG8pLAorCU1DMTM4OTJfR1BPX0RFRklORShQV0dUMVNQSSwgUE9XRVJNSVNDLCBtYzEzODkyX3B3Z3RkcnYpLAorCU1DMTM4OTJfR1BPX0RFRklORShQV0dUMlNQSSwgUE9XRVJNSVNDLCBtYzEzODkyX3B3Z3RkcnYpLAorfTsKKworc3RhdGljIGludCBtYzEzODkyX3Bvd2VybWlzY19ybXcoc3RydWN0IG1jMTN4eHhfcmVndWxhdG9yX3ByaXYgKnByaXYsIHUzMiBtYXNrLAorCQkJCSB1MzIgdmFsKQoreworCXN0cnVjdCBtYzEzeHh4ICptYzEzODkyID0gcHJpdi0+bWMxM3h4eDsKKwlpbnQgcmV0OworCXUzMiB2YWxyZWFkOworCisJQlVHX09OKHZhbCAmIH5tYXNrKTsKKworCXJldCA9IG1jMTN4eHhfcmVnX3JlYWQobWMxMzg5MiwgTUMxMzg5Ml9QT1dFUk1JU0MsICZ2YWxyZWFkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogVXBkYXRlIHRoZSBzdG9yZWQgc3RhdGUgZm9yIFBvd2VyIEdhdGVzLiAqLworCXByaXYtPnBvd2VybWlzY19wd2d0X3N0YXRlID0KKwkJKHByaXYtPnBvd2VybWlzY19wd2d0X3N0YXRlICYgfm1hc2spIHwgdmFsOworCXByaXYtPnBvd2VybWlzY19wd2d0X3N0YXRlICY9IE1DMTM4OTJfUE9XRVJNSVNDX1BXR1RTUElfTTsKKworCS8qIENvbnN0cnVjdCB0aGUgbmV3IHJlZ2lzdGVyIHZhbHVlICovCisJdmFscmVhZCA9ICh2YWxyZWFkICYgfm1hc2spIHwgdmFsOworCS8qIE92ZXJ3cml0ZSB0aGUgUFdHVHhFTiB3aXRoIHRoZSBzdG9yZWQgdmVyc2lvbiAqLworCXZhbHJlYWQgPSAodmFscmVhZCAmIH5NQzEzODkyX1BPV0VSTUlTQ19QV0dUU1BJX00pIHwKKwkJcHJpdi0+cG93ZXJtaXNjX3B3Z3Rfc3RhdGU7CisKKwlyZXR1cm4gbWMxM3h4eF9yZWdfd3JpdGUobWMxMzg5MiwgTUMxMzg5Ml9QT1dFUk1JU0MsIHZhbHJlYWQpOworfQorCitzdGF0aWMgaW50IG1jMTM4OTJfZ3BvX3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1jMTN4eHhfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCWludCByZXQ7CisJdTMyIGVuX3ZhbCA9IG1jMTM4OTJfcmVndWxhdG9yc1tpZF0uZW5hYmxlX2JpdDsKKwl1MzIgbWFzayA9IG1jMTM4OTJfcmVndWxhdG9yc1tpZF0uZW5hYmxlX2JpdDsKKworCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkXG4iLCBfX2Z1bmNfXywgaWQpOworCisJLyogUG93ZXIgR2F0ZSBlbmFibGUgdmFsdWUgaXMgMCAqLworCWlmIChpZCA9PSBNQzEzODkyX1BXR1QxU1BJIHx8IGlkID09IE1DMTM4OTJfUFdHVDJTUEkpCisJCWVuX3ZhbCA9IDA7CisKKwlpZiAoaWQgPT0gTUMxMzg5Ml9HUE80KQorCQltYXNrIHw9IE1DMTM4OTJfUE9XRVJNSVNDX0dQTzRBRElORU47CisKKwltYzEzeHh4X2xvY2socHJpdi0+bWMxM3h4eCk7CisJcmV0ID0gbWMxMzg5Ml9wb3dlcm1pc2Nfcm13KHByaXYsIG1hc2ssIGVuX3ZhbCk7CisJbWMxM3h4eF91bmxvY2socHJpdi0+bWMxM3h4eCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1jMTM4OTJfZ3BvX3JlZ3VsYXRvcl9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKwlpbnQgcmV0OworCXUzMiBkaXNfdmFsID0gMDsKKworCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkXG4iLCBfX2Z1bmNfXywgaWQpOworCisJLyogUG93ZXIgR2F0ZSBkaXNhYmxlIHZhbHVlIGlzIDEgKi8KKwlpZiAoaWQgPT0gTUMxMzg5Ml9QV0dUMVNQSSB8fCBpZCA9PSBNQzEzODkyX1BXR1QyU1BJKQorCQlkaXNfdmFsID0gbWMxMzg5Ml9yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0OworCisJbWMxM3h4eF9sb2NrKHByaXYtPm1jMTN4eHgpOworCXJldCA9IG1jMTM4OTJfcG93ZXJtaXNjX3Jtdyhwcml2LCBtYzEzODkyX3JlZ3VsYXRvcnNbaWRdLmVuYWJsZV9iaXQsCisJCWRpc192YWwpOworCW1jMTN4eHhfdW5sb2NrKHByaXYtPm1jMTN4eHgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYzEzODkyX2dwb19yZWd1bGF0b3JfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3JfcHJpdiAqcHJpdiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHJldCwgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJbWMxM3h4eF9sb2NrKHByaXYtPm1jMTN4eHgpOworCXJldCA9IG1jMTN4eHhfcmVnX3JlYWQocHJpdi0+bWMxM3h4eCwgbWMxMzg5Ml9yZWd1bGF0b3JzW2lkXS5yZWcsICZ2YWwpOworCW1jMTN4eHhfdW5sb2NrKHByaXYtPm1jMTN4eHgpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFBvd2VyIEdhdGVzIHN0YXRlIGlzIHN0b3JlZCBpbiBwb3dlcm1pc2NfcHdndF9zdGF0ZQorCSAqIHdoZXJlIHRoZSBtZWFuaW5nIG9mIGJpdHMgaXMgbmVnYXRlZCAqLworCXZhbCA9ICh2YWwgJiB+TUMxMzg5Ml9QT1dFUk1JU0NfUFdHVFNQSV9NKSB8CisJCShwcml2LT5wb3dlcm1pc2NfcHdndF9zdGF0ZSBeIE1DMTM4OTJfUE9XRVJNSVNDX1BXR1RTUElfTSk7CisKKwlyZXR1cm4gKHZhbCAmIG1jMTM4OTJfcmVndWxhdG9yc1tpZF0uZW5hYmxlX2JpdCkgIT0gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWMxMzg5Ml9ncG9fcmVndWxhdG9yX29wcyA9IHsKKwkuZW5hYmxlID0gbWMxMzg5Ml9ncG9fcmVndWxhdG9yX2VuYWJsZSwKKwkuZGlzYWJsZSA9IG1jMTM4OTJfZ3BvX3JlZ3VsYXRvcl9kaXNhYmxlLAorCS5pc19lbmFibGVkID0gbWMxMzg5Ml9ncG9fcmVndWxhdG9yX2lzX2VuYWJsZWQsCisJLmxpc3Rfdm9sdGFnZSA9IG1jMTN4eHhfcmVndWxhdG9yX2xpc3Rfdm9sdGFnZSwKKwkuc2V0X3ZvbHRhZ2UgPSBtYzEzeHh4X2ZpeGVkX3JlZ3VsYXRvcl9zZXRfdm9sdGFnZSwKKwkuZ2V0X3ZvbHRhZ2UgPSBtYzEzeHh4X2ZpeGVkX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZSwKK307CisKK3N0YXRpYyBpbnQgbWMxMzg5Ml9zd19yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1jMTN4eHhfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCByZXQsIGlkID0gcmRldl9nZXRfaWQocmRldik7CisJdW5zaWduZWQgaW50IHZhbCwgaGk7CisKKwlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZFxuIiwgX19mdW5jX18sIGlkKTsKKworCW1jMTN4eHhfbG9jayhwcml2LT5tYzEzeHh4KTsKKwlyZXQgPSBtYzEzeHh4X3JlZ19yZWFkKHByaXYtPm1jMTN4eHgsCisJCW1jMTM4OTJfcmVndWxhdG9yc1tpZF0udnNlbF9yZWcsICZ2YWwpOworCW1jMTN4eHhfdW5sb2NrKHByaXYtPm1jMTN4eHgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwloaSAgPSB2YWwgJiBNQzEzODkyX1NXSVRDSEVSUzBfU1d4SEk7CisJdmFsID0gKHZhbCAmIG1jMTM4OTJfcmVndWxhdG9yc1tpZF0udnNlbF9tYXNrKQorCQk+PiBtYzEzODkyX3JlZ3VsYXRvcnNbaWRdLnZzZWxfc2hpZnQ7CisKKwlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZCB2YWw6ICVkXG4iLCBfX2Z1bmNfXywgaWQsIHZhbCk7CisKKwlpZiAoaGkpCisJCXZhbCA9ICgyNTAwMCAqIHZhbCkgKyAxMTAwMDAwOworCWVsc2UKKwkJdmFsID0gKDI1MDAwICogdmFsKSArIDYwMDAwMDsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgbWMxMzg5Ml9zd19yZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCWludCBtaW5fdVYsIGludCBtYXhfdVYsIHVuc2lnbmVkICpzZWxlY3RvcikKK3sKKwlzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3JfcHJpdiAqcHJpdiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IGhpLCB2YWx1ZSwgdmFsLCBtYXNrLCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCWludCByZXQ7CisKKwlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZCBtaW5fdVY6ICVkIG1heF91VjogJWRcbiIsCisJCV9fZnVuY19fLCBpZCwgbWluX3VWLCBtYXhfdVYpOworCisJLyogRmluZCB0aGUgYmVzdCBpbmRleCAqLworCXZhbHVlID0gbWMxM3h4eF9nZXRfYmVzdF92b2x0YWdlX2luZGV4KHJkZXYsIG1pbl91ViwgbWF4X3VWKTsKKwlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGJlc3QgdmFsdWU6ICVkXG4iLCBfX2Z1bmNfXywgdmFsdWUpOworCWlmICh2YWx1ZSA8IDApCisJCXJldHVybiB2YWx1ZTsKKworCXZhbHVlID0gbWMxMzg5Ml9yZWd1bGF0b3JzW2lkXS52b2x0YWdlc1t2YWx1ZV07CisKKwltYzEzeHh4X2xvY2socHJpdi0+bWMxM3h4eCk7CisJcmV0ID0gbWMxM3h4eF9yZWdfcmVhZChwcml2LT5tYzEzeHh4LAorCQltYzEzODkyX3JlZ3VsYXRvcnNbaWRdLnZzZWxfcmVnLCAmdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCWhpICA9IHZhbCAmIE1DMTM4OTJfU1dJVENIRVJTMF9TV3hISTsKKwlpZiAodmFsdWUgPiAxMzc1KQorCQloaSA9IDE7CisJaWYgKHZhbHVlIDwgMTEwMCkKKwkJaGkgPSAwOworCisJaWYgKGhpKSB7CisJCXZhbHVlID0gKHZhbHVlIC0gMTEwMDAwMCkgLyAyNTAwMDsKKwkJdmFsdWUgfD0gTUMxMzg5Ml9TV0lUQ0hFUlMwX1NXeEhJOworCX0gZWxzZQorCQl2YWx1ZSA9ICh2YWx1ZSAtIDYwMDAwMCkgLyAyNTAwMDsKKworCW1hc2sgPSBtYzEzODkyX3JlZ3VsYXRvcnNbaWRdLnZzZWxfbWFzayB8IE1DMTM4OTJfU1dJVENIRVJTMF9TV3hISTsKKwlyZXQgPSBtYzEzeHh4X3JlZ19ybXcocHJpdi0+bWMxM3h4eCwgbWMxMzg5Ml9yZWd1bGF0b3JzW2lkXS52c2VsX3JlZywKKwkJCW1hc2ssIHZhbHVlIDw8IG1jMTM4OTJfcmVndWxhdG9yc1tpZF0udnNlbF9zaGlmdCk7CitlcnI6CisJbWMxM3h4eF91bmxvY2socHJpdi0+bWMxM3h4eCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWMxMzg5Ml9zd19yZWd1bGF0b3Jfb3BzID0geworCS5pc19lbmFibGVkID0gbWMxM3h4eF9zd19yZWd1bGF0b3JfaXNfZW5hYmxlZCwKKwkubGlzdF92b2x0YWdlID0gbWMxM3h4eF9yZWd1bGF0b3JfbGlzdF92b2x0YWdlLAorCS5zZXRfdm9sdGFnZSA9IG1jMTM4OTJfc3dfcmVndWxhdG9yX3NldF92b2x0YWdlLAorCS5nZXRfdm9sdGFnZSA9IG1jMTM4OTJfc3dfcmVndWxhdG9yX2dldF92b2x0YWdlLAorfTsKKworc3RhdGljIGludCBtYzEzODkyX3ZjYW1fc2V0X21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIHVuc2lnbmVkIGludCBtb2RlKQoreworCXVuc2lnbmVkIGludCBlbl92YWwgPSAwOworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgcmV0LCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCisJaWYgKG1vZGUgPT0gUkVHVUxBVE9SX01PREVfRkFTVCkKKwkJZW5fdmFsID0gTUMxMzg5Ml9SRUdVTEFUT1JNT0RFMV9WQ0FNQ09ORklHRU47CisKKwltYzEzeHh4X2xvY2socHJpdi0+bWMxM3h4eCk7CisJcmV0ID0gbWMxM3h4eF9yZWdfcm13KHByaXYtPm1jMTN4eHgsIG1jMTM4OTJfcmVndWxhdG9yc1tpZF0ucmVnLAorCQlNQzEzODkyX1JFR1VMQVRPUk1PREUxX1ZDQU1DT05GSUdFTiwgZW5fdmFsKTsKKwltYzEzeHh4X3VubG9jayhwcml2LT5tYzEzeHh4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWMxMzg5Ml92Y2FtX2dldF9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgcmV0LCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXVuc2lnbmVkIGludCB2YWw7CisKKwltYzEzeHh4X2xvY2socHJpdi0+bWMxM3h4eCk7CisJcmV0ID0gbWMxM3h4eF9yZWdfcmVhZChwcml2LT5tYzEzeHh4LCBtYzEzODkyX3JlZ3VsYXRvcnNbaWRdLnJlZywgJnZhbCk7CisJbWMxM3h4eF91bmxvY2socHJpdi0+bWMxM3h4eCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHZhbCAmIE1DMTM4OTJfUkVHVUxBVE9STU9ERTFfVkNBTUNPTkZJR0VOKQorCQlyZXR1cm4gUkVHVUxBVE9SX01PREVfRkFTVDsKKworCXJldHVybiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7Cit9CisKKworc3RhdGljIGludCBfX2RldmluaXQgbWMxMzg5Ml9yZWd1bGF0b3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3JfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgbWMxM3h4eCAqbWMxMzg5MiA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3JfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQorCQlkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YTsKKwlpbnQgaSwgcmV0OworCXUzMiB2YWw7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpICsKKwkJcGRhdGEtPm51bV9yZWd1bGF0b3JzICogc2l6ZW9mKHByaXYtPnJlZ3VsYXRvcnNbMF0pLAorCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+bWMxM3h4eF9yZWd1bGF0b3JzID0gbWMxMzg5Ml9yZWd1bGF0b3JzOworCXByaXYtPm1jMTN4eHggPSBtYzEzODkyOworCisJbWMxM3h4eF9sb2NrKG1jMTM4OTIpOworCXJldCA9IG1jMTN4eHhfcmVnX3JlYWQobWMxMzg5MiwgTUMxMzg5Ml9SRVZJU0lPTiwgJnZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZTsKKworCS8qIGVuYWJsZSBzd2l0Y2ggYXV0byBtb2RlICovCisJaWYgKCh2YWwgJiAweDAwMDBGRkZGKSA9PSAweDQ1ZDApIHsKKwkJcmV0ID0gbWMxM3h4eF9yZWdfcm13KG1jMTM4OTIsIE1DMTM4OTJfU1dJVENIRVJTNCwKKwkJCU1DMTM4OTJfU1dJVENIRVJTNF9TVzFNT0RFX00gfAorCQkJTUMxMzg5Ml9TV0lUQ0hFUlM0X1NXMk1PREVfTSwKKwkJCU1DMTM4OTJfU1dJVENIRVJTNF9TVzFNT0RFX0FVVE8gfAorCQkJTUMxMzg5Ml9TV0lUQ0hFUlM0X1NXMk1PREVfQVVUTyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9mcmVlOworCisJCXJldCA9IG1jMTN4eHhfcmVnX3JtdyhtYzEzODkyLCBNQzEzODkyX1NXSVRDSEVSUzUsCisJCQlNQzEzODkyX1NXSVRDSEVSUzVfU1czTU9ERV9NIHwKKwkJCU1DMTM4OTJfU1dJVENIRVJTNV9TVzRNT0RFX00sCisJCQlNQzEzODkyX1NXSVRDSEVSUzVfU1czTU9ERV9BVVRPIHwKKwkJCU1DMTM4OTJfU1dJVENIRVJTNV9TVzRNT0RFX0FVVE8pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfZnJlZTsKKwl9CisJbWMxM3h4eF91bmxvY2sobWMxMzg5Mik7CisKKwltYzEzODkyX3JlZ3VsYXRvcnNbTUMxMzg5Ml9WQ0FNXS5kZXNjLm9wcy0+c2V0X21vZGUKKwkJPSBtYzEzODkyX3ZjYW1fc2V0X21vZGU7CisJbWMxMzg5Ml9yZWd1bGF0b3JzW01DMTM4OTJfVkNBTV0uZGVzYy5vcHMtPmdldF9tb2RlCisJCT0gbWMxMzg5Ml92Y2FtX2dldF9tb2RlOworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3JlZ3VsYXRvcnM7IGkrKykgeworCQlpbml0X2RhdGEgPSAmcGRhdGEtPnJlZ3VsYXRvcnNbaV07CisJCXByaXYtPnJlZ3VsYXRvcnNbaV0gPSByZWd1bGF0b3JfcmVnaXN0ZXIoCisJCQkmbWMxMzg5Ml9yZWd1bGF0b3JzW2luaXRfZGF0YS0+aWRdLmRlc2MsCisJCQkmcGRldi0+ZGV2LCBpbml0X2RhdGEtPmluaXRfZGF0YSwgcHJpdik7CisKKwkJaWYgKElTX0VSUihwcml2LT5yZWd1bGF0b3JzW2ldKSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvciAlc1xuIiwKKwkJCQltYzEzODkyX3JlZ3VsYXRvcnNbaV0uZGVzYy5uYW1lKTsKKwkJCXJldCA9IFBUUl9FUlIocHJpdi0+cmVndWxhdG9yc1tpXSk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOworCisJcmV0dXJuIDA7CitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlyZWd1bGF0b3JfdW5yZWdpc3Rlcihwcml2LT5yZWd1bGF0b3JzW2ldKTsKKworZXJyX2ZyZWU6CisJbWMxM3h4eF91bmxvY2sobWMxMzg5Mik7CisJa2ZyZWUocHJpdik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYzEzODkyX3JlZ3VsYXRvcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3JfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJCWRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRldik7CisJaW50IGk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3JlZ3VsYXRvcnM7IGkrKykKKwkJcmVndWxhdG9yX3VucmVnaXN0ZXIocHJpdi0+cmVndWxhdG9yc1tpXSk7CisKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWMxMzg5Ml9yZWd1bGF0b3JfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gIm1jMTM4OTItcmVndWxhdG9yIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AobWMxMzg5Ml9yZWd1bGF0b3JfcmVtb3ZlKSwKKwkucHJvYmUJPSBtYzEzODkyX3JlZ3VsYXRvcl9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1jMTM4OTJfcmVndWxhdG9yX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYzEzODkyX3JlZ3VsYXRvcl9kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKG1jMTM4OTJfcmVndWxhdG9yX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWMxMzg5Ml9yZWd1bGF0b3JfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYzEzODkyX3JlZ3VsYXRvcl9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobWMxMzg5Ml9yZWd1bGF0b3JfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIllvbmcgU2hlbiA8eW9uZy5zaGVuQGxpbmFyby5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJlZ3VsYXRvciBEcml2ZXIgZm9yIEZyZWVzY2FsZSBNQzEzODkyIFBNSUMiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bWMxMzg5Mi1yZWd1bGF0b3IiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21jMTN4eHgtcmVndWxhdG9yLWNvcmUuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21jMTN4eHgtcmVndWxhdG9yLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTNkMzFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWMxM3h4eC1yZWd1bGF0b3ItY29yZS5jCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogUmVndWxhdG9yIERyaXZlciBmb3IgRnJlZXNjYWxlIE1DMTN4eHggUE1JQworICoKKyAqIENvcHlyaWdodCAyMDEwIFlvbmcgU2hlbiA8eW9uZy5zaGVuQGxpbmFyby5vcmc+CisgKgorICogQmFzZWQgb24gbWMxMzc4MyByZWd1bGF0b3IgZHJpdmVyIDoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4IDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgorICogQ29weXJpZ2h0IDIwMDkgQWxiZXJ0byBQYW5penpvIDxtYXJhbWFvcGVyY2hlc2VpbW9ydG9AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogUmVncyBpbmZvcyB0YWtlbiBmcm9tIG1jMTN4eHggZHJpdmVycyBmcm9tIGZyZWVzY2FsZSBhbmQgbWMxM3h4eC5wZGYgZmlsZQorICogZnJvbSBmcmVlc2NhbGUKKyAqLworCisjaW5jbHVkZSA8bGludXgvbWZkL21jMTN4eHguaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgIm1jMTN4eHguaCIKKworc3RhdGljIGludCBtYzEzeHh4X3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1jMTN4eHhfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvciAqbWMxM3h4eF9yZWd1bGF0b3JzID0gcHJpdi0+bWMxM3h4eF9yZWd1bGF0b3JzOworCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCWludCByZXQ7CisKKwlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZFxuIiwgX19mdW5jX18sIGlkKTsKKworCW1jMTN4eHhfbG9jayhwcml2LT5tYzEzeHh4KTsKKwlyZXQgPSBtYzEzeHh4X3JlZ19ybXcocHJpdi0+bWMxM3h4eCwgbWMxM3h4eF9yZWd1bGF0b3JzW2lkXS5yZWcsCisJCQltYzEzeHh4X3JlZ3VsYXRvcnNbaWRdLmVuYWJsZV9iaXQsCisJCQltYzEzeHh4X3JlZ3VsYXRvcnNbaWRdLmVuYWJsZV9iaXQpOworCW1jMTN4eHhfdW5sb2NrKHByaXYtPm1jMTN4eHgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYzEzeHh4X3JlZ3VsYXRvcl9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3IgKm1jMTN4eHhfcmVndWxhdG9ycyA9IHByaXYtPm1jMTN4eHhfcmVndWxhdG9yczsKKwlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKwlpbnQgcmV0OworCisJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICIlcyBpZDogJWRcbiIsIF9fZnVuY19fLCBpZCk7CisKKwltYzEzeHh4X2xvY2socHJpdi0+bWMxM3h4eCk7CisJcmV0ID0gbWMxM3h4eF9yZWdfcm13KHByaXYtPm1jMTN4eHgsIG1jMTN4eHhfcmVndWxhdG9yc1tpZF0ucmVnLAorCQkJbWMxM3h4eF9yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0LCAwKTsKKwltYzEzeHh4X3VubG9jayhwcml2LT5tYzEzeHh4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWMxM3h4eF9yZWd1bGF0b3JfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3JfcHJpdiAqcHJpdiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IG1jMTN4eHhfcmVndWxhdG9yICptYzEzeHh4X3JlZ3VsYXRvcnMgPSBwcml2LT5tYzEzeHh4X3JlZ3VsYXRvcnM7CisJaW50IHJldCwgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJbWMxM3h4eF9sb2NrKHByaXYtPm1jMTN4eHgpOworCXJldCA9IG1jMTN4eHhfcmVnX3JlYWQocHJpdi0+bWMxM3h4eCwgbWMxM3h4eF9yZWd1bGF0b3JzW2lkXS5yZWcsICZ2YWwpOworCW1jMTN4eHhfdW5sb2NrKHByaXYtPm1jMTN4eHgpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAodmFsICYgbWMxM3h4eF9yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0KSAhPSAwOworfQorCitpbnQgbWMxM3h4eF9yZWd1bGF0b3JfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCQkJdW5zaWduZWQgc2VsZWN0b3IpCit7CisJaW50IGlkID0gcmRldl9nZXRfaWQocmRldik7CisJc3RydWN0IG1jMTN4eHhfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvciAqbWMxM3h4eF9yZWd1bGF0b3JzID0gcHJpdi0+bWMxM3h4eF9yZWd1bGF0b3JzOworCisJaWYgKHNlbGVjdG9yID49IG1jMTN4eHhfcmVndWxhdG9yc1tpZF0uZGVzYy5uX3ZvbHRhZ2VzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBtYzEzeHh4X3JlZ3VsYXRvcnNbaWRdLnZvbHRhZ2VzW3NlbGVjdG9yXTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1jMTN4eHhfcmVndWxhdG9yX2xpc3Rfdm9sdGFnZSk7CisKK2ludCBtYzEzeHh4X2dldF9iZXN0X3ZvbHRhZ2VfaW5kZXgoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJCQlpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3IgKm1jMTN4eHhfcmVndWxhdG9ycyA9IHByaXYtPm1jMTN4eHhfcmVndWxhdG9yczsKKwlpbnQgcmVnX2lkID0gcmRldl9nZXRfaWQocmRldik7CisJaW50IGk7CisJaW50IGJlc3RtYXRjaDsKKwlpbnQgYmVzdGluZGV4OworCisJLyoKKwkgKiBMb2NhdGUgdGhlIG1pbmltdW0gdm9sdGFnZSBmaXR0aW5nIHRoZSBjcml0ZXJpYSBvbgorCSAqIHRoaXMgcmVndWxhdG9yLiBUaGUgc3dpdGNoYWJsZSB2b2x0YWdlcyBhcmUgbm90CisJICogaW4gc3RyaWN0IGZhbGxpbmcgb3JkZXIgc28gd2UgbmVlZCB0byBjaGVjayB0aGVtCisJICogYWxsIGZvciB0aGUgYmVzdCBtYXRjaC4KKwkgKi8KKwliZXN0bWF0Y2ggPSBJTlRfTUFYOworCWJlc3RpbmRleCA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBtYzEzeHh4X3JlZ3VsYXRvcnNbcmVnX2lkXS5kZXNjLm5fdm9sdGFnZXM7IGkrKykgeworCQlpZiAobWMxM3h4eF9yZWd1bGF0b3JzW3JlZ19pZF0udm9sdGFnZXNbaV0gPj0gbWluX3VWICYmCisJCSAgICBtYzEzeHh4X3JlZ3VsYXRvcnNbcmVnX2lkXS52b2x0YWdlc1tpXSA8IGJlc3RtYXRjaCkgeworCQkJYmVzdG1hdGNoID0gbWMxM3h4eF9yZWd1bGF0b3JzW3JlZ19pZF0udm9sdGFnZXNbaV07CisJCQliZXN0aW5kZXggPSBpOworCQl9CisJfQorCisJaWYgKGJlc3RpbmRleCA8IDAgfHwgYmVzdG1hdGNoID4gbWF4X3VWKSB7CisJCWRldl93YXJuKCZyZGV2LT5kZXYsICJubyBwb3NzaWJsZSB2YWx1ZSBmb3IgJWQ8PXg8PSVkIHVWXG4iLAorCQkJCW1pbl91ViwgbWF4X3VWKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBiZXN0aW5kZXg7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtYzEzeHh4X2dldF9iZXN0X3ZvbHRhZ2VfaW5kZXgpOworCitzdGF0aWMgaW50IG1jMTN4eHhfcmVndWxhdG9yX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgbWluX3VWLAorCQlpbnQgbWF4X3VWLCB1bnNpZ25lZCAqc2VsZWN0b3IpCit7CisJc3RydWN0IG1jMTN4eHhfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvciAqbWMxM3h4eF9yZWd1bGF0b3JzID0gcHJpdi0+bWMxM3h4eF9yZWd1bGF0b3JzOworCWludCB2YWx1ZSwgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKwlpbnQgcmV0OworCisJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICIlcyBpZDogJWQgbWluX3VWOiAlZCBtYXhfdVY6ICVkXG4iLAorCQlfX2Z1bmNfXywgaWQsIG1pbl91ViwgbWF4X3VWKTsKKworCS8qIEZpbmQgdGhlIGJlc3QgaW5kZXggKi8KKwl2YWx1ZSA9IG1jMTN4eHhfZ2V0X2Jlc3Rfdm9sdGFnZV9pbmRleChyZGV2LCBtaW5fdVYsIG1heF91Vik7CisJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICIlcyBiZXN0IHZhbHVlOiAlZFxuIiwgX19mdW5jX18sIHZhbHVlKTsKKwlpZiAodmFsdWUgPCAwKQorCQlyZXR1cm4gdmFsdWU7CisKKwltYzEzeHh4X2xvY2socHJpdi0+bWMxM3h4eCk7CisJcmV0ID0gbWMxM3h4eF9yZWdfcm13KHByaXYtPm1jMTN4eHgsIG1jMTN4eHhfcmVndWxhdG9yc1tpZF0udnNlbF9yZWcsCisJCQltYzEzeHh4X3JlZ3VsYXRvcnNbaWRdLnZzZWxfbWFzaywKKwkJCXZhbHVlIDw8IG1jMTN4eHhfcmVndWxhdG9yc1tpZF0udnNlbF9zaGlmdCk7CisJbWMxM3h4eF91bmxvY2socHJpdi0+bWMxM3h4eCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1jMTN4eHhfcmVndWxhdG9yX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3IgKm1jMTN4eHhfcmVndWxhdG9ycyA9IHByaXYtPm1jMTN4eHhfcmVndWxhdG9yczsKKwlpbnQgcmV0LCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZFxuIiwgX19mdW5jX18sIGlkKTsKKworCW1jMTN4eHhfbG9jayhwcml2LT5tYzEzeHh4KTsKKwlyZXQgPSBtYzEzeHh4X3JlZ19yZWFkKHByaXYtPm1jMTN4eHgsCisJCQkJbWMxM3h4eF9yZWd1bGF0b3JzW2lkXS52c2VsX3JlZywgJnZhbCk7CisJbWMxM3h4eF91bmxvY2socHJpdi0+bWMxM3h4eCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsID0gKHZhbCAmIG1jMTN4eHhfcmVndWxhdG9yc1tpZF0udnNlbF9tYXNrKQorCQk+PiBtYzEzeHh4X3JlZ3VsYXRvcnNbaWRdLnZzZWxfc2hpZnQ7CisKKwlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZCB2YWw6ICVkXG4iLCBfX2Z1bmNfXywgaWQsIHZhbCk7CisKKwlCVUdfT04odmFsIDwgMCB8fCB2YWwgPiBtYzEzeHh4X3JlZ3VsYXRvcnNbaWRdLmRlc2Mubl92b2x0YWdlcyk7CisKKwlyZXR1cm4gbWMxM3h4eF9yZWd1bGF0b3JzW2lkXS52b2x0YWdlc1t2YWxdOworfQorCitzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYzEzeHh4X3JlZ3VsYXRvcl9vcHMgPSB7CisJLmVuYWJsZSA9IG1jMTN4eHhfcmVndWxhdG9yX2VuYWJsZSwKKwkuZGlzYWJsZSA9IG1jMTN4eHhfcmVndWxhdG9yX2Rpc2FibGUsCisJLmlzX2VuYWJsZWQgPSBtYzEzeHh4X3JlZ3VsYXRvcl9pc19lbmFibGVkLAorCS5saXN0X3ZvbHRhZ2UgPSBtYzEzeHh4X3JlZ3VsYXRvcl9saXN0X3ZvbHRhZ2UsCisJLnNldF92b2x0YWdlID0gbWMxM3h4eF9yZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlID0gbWMxM3h4eF9yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UsCit9OworRVhQT1JUX1NZTUJPTF9HUEwobWMxM3h4eF9yZWd1bGF0b3Jfb3BzKTsKKworaW50IG1jMTN4eHhfZml4ZWRfcmVndWxhdG9yX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgbWluX3VWLAorCSAgICAgICBpbnQgbWF4X3VWLCB1bnNpZ25lZCAqc2VsZWN0b3IpCit7CisJc3RydWN0IG1jMTN4eHhfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvciAqbWMxM3h4eF9yZWd1bGF0b3JzID0gcHJpdi0+bWMxM3h4eF9yZWd1bGF0b3JzOworCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCisJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICIlcyBpZDogJWQgbWluX3VWOiAlZCBtYXhfdVY6ICVkXG4iLAorCQlfX2Z1bmNfXywgaWQsIG1pbl91ViwgbWF4X3VWKTsKKworCWlmIChtaW5fdVYgPj0gbWMxM3h4eF9yZWd1bGF0b3JzW2lkXS52b2x0YWdlc1swXSAmJgorCSAgICBtYXhfdVYgPD0gbWMxM3h4eF9yZWd1bGF0b3JzW2lkXS52b2x0YWdlc1swXSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1jMTN4eHhfZml4ZWRfcmVndWxhdG9yX3NldF92b2x0YWdlKTsKKworaW50IG1jMTN4eHhfZml4ZWRfcmVndWxhdG9yX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgbWMxM3h4eF9yZWd1bGF0b3IgKm1jMTN4eHhfcmVndWxhdG9ycyA9IHByaXYtPm1jMTN4eHhfcmVndWxhdG9yczsKKwlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKworCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkXG4iLCBfX2Z1bmNfXywgaWQpOworCisJcmV0dXJuIG1jMTN4eHhfcmVndWxhdG9yc1tpZF0udm9sdGFnZXNbMF07Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtYzEzeHh4X2ZpeGVkX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZSk7CisKK3N0cnVjdCByZWd1bGF0b3Jfb3BzIG1jMTN4eHhfZml4ZWRfcmVndWxhdG9yX29wcyA9IHsKKwkuZW5hYmxlID0gbWMxM3h4eF9yZWd1bGF0b3JfZW5hYmxlLAorCS5kaXNhYmxlID0gbWMxM3h4eF9yZWd1bGF0b3JfZGlzYWJsZSwKKwkuaXNfZW5hYmxlZCA9IG1jMTN4eHhfcmVndWxhdG9yX2lzX2VuYWJsZWQsCisJLmxpc3Rfdm9sdGFnZSA9IG1jMTN4eHhfcmVndWxhdG9yX2xpc3Rfdm9sdGFnZSwKKwkuc2V0X3ZvbHRhZ2UgPSBtYzEzeHh4X2ZpeGVkX3JlZ3VsYXRvcl9zZXRfdm9sdGFnZSwKKwkuZ2V0X3ZvbHRhZ2UgPSBtYzEzeHh4X2ZpeGVkX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChtYzEzeHh4X2ZpeGVkX3JlZ3VsYXRvcl9vcHMpOworCitpbnQgbWMxM3h4eF9zd19yZWd1bGF0b3JfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1jMTN4eHhfc3dfcmVndWxhdG9yX2lzX2VuYWJsZWQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQVVUSE9SKCJZb25nIFNoZW4gPHlvbmcuc2hlbkBsaW5hcm8ub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSZWd1bGF0b3IgRHJpdmVyIGZvciBGcmVlc2NhbGUgTUMxM3h4eCBQTUlDIik7CitNT0RVTEVfQUxJQVMoIm1jMTN4eHgtcmVndWxhdG9yLWNvcmUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21jMTN4eHguaCBiL2RyaXZlcnMvcmVndWxhdG9yL21jMTN4eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzc1ODI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWMxM3h4eC5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogbWMxM3h4eC5oIC0gcmVndWxhdG9ycyBmb3IgdGhlIEZyZWVzY2FsZSBtYzEzeHh4IFBNSUMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFlvbmcgU2hlbiA8eW9uZy5zaGVuQGxpbmFyby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfUkVHVUxBVE9SX01DMTNYWFhfSAorI2RlZmluZSBfX0xJTlVYX1JFR1VMQVRPUl9NQzEzWFhYX0gKKworI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KKworc3RydWN0IG1jMTN4eHhfcmVndWxhdG9yIHsKKwlzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgZGVzYzsKKwlpbnQgcmVnOworCWludCBlbmFibGVfYml0OworCWludCB2c2VsX3JlZzsKKwlpbnQgdnNlbF9zaGlmdDsKKwlpbnQgdnNlbF9tYXNrOworCWludCBoaV9iaXQ7CisJaW50IGNvbnN0ICp2b2x0YWdlczsKK307CisKK3N0cnVjdCBtYzEzeHh4X3JlZ3VsYXRvcl9wcml2IHsKKwlzdHJ1Y3QgbWMxM3h4eCAqbWMxM3h4eDsKKwl1MzIgcG93ZXJtaXNjX3B3Z3Rfc3RhdGU7CisJc3RydWN0IG1jMTN4eHhfcmVndWxhdG9yICptYzEzeHh4X3JlZ3VsYXRvcnM7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJlZ3VsYXRvcnNbXTsKK307CisKK2V4dGVybiBpbnQgbWMxM3h4eF9zd19yZWd1bGF0b3Ioc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpOworZXh0ZXJuIGludCBtYzEzeHh4X3N3X3JlZ3VsYXRvcl9pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KTsKK2V4dGVybiBpbnQgbWMxM3h4eF9nZXRfYmVzdF92b2x0YWdlX2luZGV4KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCQkJaW50IG1pbl91ViwgaW50IG1heF91Vik7CitleHRlcm4gaW50IG1jMTN4eHhfcmVndWxhdG9yX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwkJCQkJCXVuc2lnbmVkIHNlbGVjdG9yKTsKK2V4dGVybiBpbnQgbWMxM3h4eF9maXhlZF9yZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCWludCBtaW5fdVYsIGludCBtYXhfdVYsIHVuc2lnbmVkICpzZWxlY3Rvcik7CitleHRlcm4gaW50IG1jMTN4eHhfZml4ZWRfcmVndWxhdG9yX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KTsKKworZXh0ZXJuIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1jMTN4eHhfcmVndWxhdG9yX29wczsKK2V4dGVybiBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYzEzeHh4X2ZpeGVkX3JlZ3VsYXRvcl9vcHM7CisKKyNkZWZpbmUgTUMxM3h4eF9ERUZJTkUocHJlZml4LCBfbmFtZSwgX3JlZywgX3ZzZWxfcmVnLCBfdm9sdGFnZXMsIF9vcHMpCVwKKwlbcHJlZml4ICMjIF9uYW1lXSA9IHsJCQkJXAorCQkuZGVzYyA9IHsJCQkJCQlcCisJCQkubmFtZSA9ICNwcmVmaXggIl8iICNfbmFtZSwJCQlcCisJCQkubl92b2x0YWdlcyA9IEFSUkFZX1NJWkUoX3ZvbHRhZ2VzKSwJCVwKKwkJCS5vcHMgPSAmX29wcywJCQlcCisJCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCVwKKwkJCS5pZCA9IHByZWZpeCAjIyBfbmFtZSwJCVwKKwkJCS5vd25lciA9IFRISVNfTU9EVUxFLAkJCQlcCisJCX0sCQkJCQkJCVwKKwkJLnJlZyA9IHByZWZpeCAjIyBfcmVnLAkJCQlcCisJCS5lbmFibGVfYml0ID0gcHJlZml4ICMjIF9yZWcgIyMgXyAjIyBfbmFtZSAjIyBFTiwJXAorCQkudnNlbF9yZWcgPSBwcmVmaXggIyMgX3ZzZWxfcmVnLAkJCVwKKwkJLnZzZWxfc2hpZnQgPSBwcmVmaXggIyMgX3ZzZWxfcmVnICMjIF8gIyMgX25hbWUgIyMgVlNFTCxcCisJCS52c2VsX21hc2sgPSBwcmVmaXggIyMgX3ZzZWxfcmVnICMjIF8gIyMgX25hbWUgIyMgVlNFTF9NLFwKKwkJLnZvbHRhZ2VzID0gIF92b2x0YWdlcywJCQkJCVwKKwl9CisKKyNkZWZpbmUgTUMxM3h4eF9GSVhFRF9ERUZJTkUocHJlZml4LCBfbmFtZSwgX3JlZywgX3ZvbHRhZ2VzLCBfb3BzKQlcCisJW3ByZWZpeCAjIyBfbmFtZV0gPSB7CQkJCVwKKwkJLmRlc2MgPSB7CQkJCQkJXAorCQkJLm5hbWUgPSAjcHJlZml4ICJfIiAjX25hbWUsCQkJXAorCQkJLm5fdm9sdGFnZXMgPSBBUlJBWV9TSVpFKF92b2x0YWdlcyksCQlcCisJCQkub3BzID0gJl9vcHMsCQlcCisJCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCVwKKwkJCS5pZCA9IHByZWZpeCAjIyBfbmFtZSwJCVwKKwkJCS5vd25lciA9IFRISVNfTU9EVUxFLAkJCQlcCisJCX0sCQkJCQkJCVwKKwkJLnJlZyA9IHByZWZpeCAjIyBfcmVnLAkJCQlcCisJCS5lbmFibGVfYml0ID0gcHJlZml4ICMjIF9yZWcgIyMgXyAjIyBfbmFtZSAjIyBFTiwJXAorCQkudm9sdGFnZXMgPSAgX3ZvbHRhZ2VzLAkJCQkJXAorCX0KKworI2RlZmluZSBNQzEzeHh4X0dQT19ERUZJTkUocHJlZml4LCBfbmFtZSwgX3JlZywgIF92b2x0YWdlcywgX29wcykJXAorCVtwcmVmaXggIyMgX25hbWVdID0gewkJCQlcCisJCS5kZXNjID0gewkJCQkJCVwKKwkJCS5uYW1lID0gI3ByZWZpeCAiXyIgI19uYW1lLAkJCVwKKwkJCS5uX3ZvbHRhZ2VzID0gQVJSQVlfU0laRShfdm9sdGFnZXMpLAkJXAorCQkJLm9wcyA9ICZfb3BzLAkJXAorCQkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCisJCQkuaWQgPSBwcmVmaXggIyMgX25hbWUsCQlcCisJCQkub3duZXIgPSBUSElTX01PRFVMRSwJCQkJXAorCQl9LAkJCQkJCQlcCisJCS5yZWcgPSBwcmVmaXggIyMgX3JlZywJCQkJXAorCQkuZW5hYmxlX2JpdCA9IHByZWZpeCAjIyBfcmVnICMjIF8gIyMgX25hbWUgIyMgRU4sCVwKKwkJLnZvbHRhZ2VzID0gIF92b2x0YWdlcywJCQkJCVwKKwl9CisKKyNkZWZpbmUgTUMxM3h4eF9ERUZJTkVfU1coX25hbWUsIF9yZWcsIF92c2VsX3JlZywgX3ZvbHRhZ2VzLCBvcHMpCVwKKwlNQzEzeHh4X0RFRklORShTVywgX25hbWUsIF9yZWcsIF92c2VsX3JlZywgX3ZvbHRhZ2VzLCBvcHMpCisjZGVmaW5lIE1DMTN4eHhfREVGSU5FX1JFR1UoX25hbWUsIF9yZWcsIF92c2VsX3JlZywgX3ZvbHRhZ2VzLCBvcHMpCVwKKwlNQzEzeHh4X0RFRklORShSRUdVLCBfbmFtZSwgX3JlZywgX3ZzZWxfcmVnLCBfdm9sdGFnZXMsIG9wcykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9wY2FwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvcGNhcC1yZWd1bGF0b3IuYwppbmRleCAyOWQwNTY2Li4zMWY2ZTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9wY2FwLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3BjYXAtcmVndWxhdG9yLmMKQEAgLTE1MSw3ICsxNTEsOCBAQAogfTsKIAogc3RhdGljIGludCBwY2FwX3JlZ3VsYXRvcl9zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKLQkJCQkJCWludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJICAgICAgaW50IG1pbl91ViwgaW50IG1heF91ViwKKwkJCQkgICAgICB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IHBjYXBfcmVndWxhdG9yICp2cmVnID0gJnZyZWdfdGFibGVbcmRldl9nZXRfaWQocmRldildOwogCXZvaWQgKnBjYXAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwpAQCAtMTcwLDEwICsxNzEsMTIgQEAKIAkJCWkgPSAwOwogCiAJCXVWID0gdnJlZy0+dm9sdGFnZV90YWJsZVtpXSAqIDEwMDA7Ci0JCWlmIChtaW5fdVYgPD0gdVYgJiYgdVYgPD0gbWF4X3VWKQorCQlpZiAobWluX3VWIDw9IHVWICYmIHVWIDw9IG1heF91VikgeworCQkJKnNlbGVjdG9yID0gaTsKIAkJCXJldHVybiBlenhfcGNhcF9zZXRfYml0cyhwY2FwLCB2cmVnLT5yZWcsCiAJCQkJCSh2cmVnLT5uX3ZvbHRhZ2VzIC0gMSkgPDwgdnJlZy0+aW5kZXgsCiAJCQkJCWkgPDwgdnJlZy0+aW5kZXgpOworCQl9CiAKIAkJaWYgKGkgPT0gMCAmJiByZGV2X2dldF9pZChyZGV2KSA9PSBWMSkKIAkJCWkgPSB2cmVnLT5uX3ZvbHRhZ2VzIC0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3BjZjUwNjMzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvcGNmNTA2MzMtcmVndWxhdG9yLmMKaW5kZXggYzhmNDFkYy4uNjlhMTFkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvcGNmNTA2MzMtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvcGNmNTA2MzMtcmVndWxhdG9yLmMKQEAgLTEwOCw3ICsxMDgsOCBAQAogfQogCiBzdGF0aWMgaW50IHBjZjUwNjMzX3JlZ3VsYXRvcl9zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKLQkJCQkJCWludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJCSAgaW50IG1pbl91ViwgaW50IG1heF91ViwKKwkJCQkJICB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IHBjZjUwNjMzICpwY2Y7CiAJaW50IHJlZ3VsYXRvcl9pZCwgbWlsbGl2b2x0czsKQEAgLTE0Nyw2ICsxNDgsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkqc2VsZWN0b3IgPSB2b2x0X2JpdHM7CisKIAlyZXR1cm4gcGNmNTA2MzNfcmVnX3dyaXRlKHBjZiwgcmVnbnIsIHZvbHRfYml0cyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDIzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwMjMtcmVndWxhdG9yLmMKaW5kZXggY2Q2ZDRmYy4uNjBhN2NhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwMjMtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwMjMtcmVndWxhdG9yLmMKQEAgLTMyMSw3ICszMjEsOCBAQAogfQogCiBzdGF0aWMgaW50IHRwczY1MDIzX2RjZGNfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKLQkJCQlpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQorCQkJCSAgICAgaW50IG1pbl91ViwgaW50IG1heF91ViwKKwkJCQkgICAgIHVuc2lnbmVkICpzZWxlY3RvcikKIHsKIAlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKGRldik7CkBAIC0zNDYsNiArMzQ3LDggQEAKIAkJCWJyZWFrOwogCX0KIAorCSpzZWxlY3RvciA9IHZzZWw7CisKIAkvKiB3cml0ZSB0byB0aGUgcmVnaXN0ZXIgaW4gY2FzZSB3ZSBmb3VuZCBhIG1hdGNoICovCiAJaWYgKHZzZWwgPT0gdHBzLT5pbmZvW2RjZGNdLT50YWJsZV9sZW4pCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzcxLDcgKzM3NCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgdHBzNjUwMjNfbGRvX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCi0JCQkJaW50IG1pbl91ViwgaW50IG1heF91VikKKwkJCQkgICAgaW50IG1pbl91ViwgaW50IG1heF91ViwgdW5zaWduZWQgKnNlbGVjdG9yKQogewogCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBkYXRhLCB2c2VsLCBsZG8gPSByZGV2X2dldF9pZChkZXYpOwpAQCAtMzk2LDYgKzM5OSw4IEBACiAJaWYgKHZzZWwgPT0gdHBzLT5pbmZvW2xkb10tPnRhYmxlX2xlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkqc2VsZWN0b3IgPSB2c2VsOworCiAJZGF0YSA9IHRwc182NTAyM19yZWdfcmVhZCh0cHMsIFRQUzY1MDIzX1JFR19MRE9fQ1RSTCk7CiAJaWYgKGRhdGEgPCAwKQogCQlyZXR1cm4gZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDd4LXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwN3gtcmVndWxhdG9yLmMKaW5kZXggMDIwZjU4Ny4uMDY0NzU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwN3gtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwN3gtcmVndWxhdG9yLmMKQEAgLTM2OSw3ICszNjksOCBAQAogfQogCiBzdGF0aWMgaW50IHRwczY1MDd4X3BtaWNfZGNkY19zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2LAotCQkJCWludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJCSAgaW50IG1pbl91ViwgaW50IG1heF91ViwKKwkJCQkJICB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IHRwczY1MDd4X3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgZGF0YSwgdnNlbCwgZGNkYyA9IHJkZXZfZ2V0X2lkKGRldik7CkBAIC00MTUsNiArNDE2LDggQEAKIAlpZiAodnNlbCA9PSB0cHMtPmluZm9bZGNkY10tPnRhYmxlX2xlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkqc2VsZWN0b3IgPSB2c2VsOworCiAJZGF0YSA9IHRwczY1MDd4X3BtaWNfcmVnX3JlYWQodHBzLCByZWcpOwogCWlmIChkYXRhIDwgMCkKIAkJcmV0dXJuIGRhdGE7CkBAIC00NTAsNyArNDUzLDggQEAKIH0KIAogc3RhdGljIGludCB0cHM2NTA3eF9wbWljX2xkb19zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2LAotCQkJCWludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJCSBpbnQgbWluX3VWLCBpbnQgbWF4X3VWLAorCQkJCQkgdW5zaWduZWQgKnNlbGVjdG9yKQogewogCXN0cnVjdCB0cHM2NTA3eF9wbWljICp0cHMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IGRhdGEsIHZzZWwsIGxkbyA9IHJkZXZfZ2V0X2lkKGRldik7CkBAIC00ODMsNiArNDg3LDggQEAKIAlpZiAodnNlbCA9PSB0cHMtPmluZm9bbGRvXS0+dGFibGVfbGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCSpzZWxlY3RvciA9IHZzZWw7CisKIAlkYXRhID0gdHBzNjUwN3hfcG1pY19yZWdfcmVhZCh0cHMsIHJlZyk7CiAJaWYgKGRhdGEgPCAwKQogCQlyZXR1cm4gZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MjR4LXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUyNHgtcmVndWxhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2YTZiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MjR4LXJlZ3VsYXRvci5jCkBAIC0wLDAgKzEsNjkzIEBACisvKgorICogUmVndWxhdG9yIGRyaXZlciBmb3IgVFBTNjUyNHggUE1JQworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55IGtpbmQsCisgKiB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisKKyNkZWZpbmUgUkVHX0xET19TRVQJCTB4MAorI2RlZmluZSBMRE9fSUxJTV9NQVNLCQkxCS8qIDAgPSA0MDAtODAwLCAxID0gOTAwLTE1MDAgKi8KKyNkZWZpbmUgTERPX1ZTRUxfTUFTSwkJMHgwZgorI2RlZmluZSBMRE8yX0lMSU1fU0hJRlQJCTEyCisjZGVmaW5lIExETzJfVlNFTF9TSElGVAkJNAorI2RlZmluZSBMRE8xX0lMSU1fU0hJRlQJCTgKKyNkZWZpbmUgTERPMV9WU0VMX1NISUZUCQkwCisKKyNkZWZpbmUgUkVHX0JMT0NLX0VOCQkweDEKKyNkZWZpbmUgQkxPQ0tfTUFTSwkJMQorI2RlZmluZSBCTE9DS19MRE8xX1NISUZUCTAKKyNkZWZpbmUgQkxPQ0tfTERPMl9TSElGVAkxCisjZGVmaW5lIEJMT0NLX0xDRF9TSElGVAkJMgorI2RlZmluZSBCTE9DS19VU0JfU0hJRlQJCTMKKworI2RlZmluZSBSRUdfRENEQ19TRVQJCTB4MgorI2RlZmluZSBEQ0RDX1ZEQ0RDX01BU0sJCTB4MWYKKyNkZWZpbmUgRENEQ19WRENEQzFfU0hJRlQJMAorI2RlZmluZSBEQ0RDX1ZEQ0RDMl9TSElGVAk1CisjZGVmaW5lIERDRENfVkRDREMzX1NISUZUCTEwCisKKyNkZWZpbmUgUkVHX0RDRENfRU4JCTB4MworI2RlZmluZSBEQ0RDRENEQ19FTl9NQVNLCTB4MQorI2RlZmluZSBEQ0RDRENEQzFfRU5fU0hJRlQJMAorI2RlZmluZSBEQ0RDRENEQzFfUEdfTVNLCUJJVCgxKQorI2RlZmluZSBEQ0RDRENEQzJfRU5fU0hJRlQJMgorI2RlZmluZSBEQ0RDRENEQzJfUEdfTVNLCUJJVCgzKQorI2RlZmluZSBEQ0RDRENEQzNfRU5fU0hJRlQJNAorI2RlZmluZSBEQ0RDRENEQzNfUEdfTVNLCUJJVCg1KQorCisjZGVmaW5lIFJFR19VU0IJCQkweDQKKyNkZWZpbmUgVVNCX0lMSU1fU0hJRlQJCTAKKyNkZWZpbmUgVVNCX0lMSU1fTUFTSwkJMHgzCisjZGVmaW5lIFVTQl9UU0RfU0hJRlQJCTIKKyNkZWZpbmUgVVNCX1RTRF9NQVNLCQkweDMKKyNkZWZpbmUgVVNCX1RXQVJOX1NISUZUCQk0CisjZGVmaW5lIFVTQl9UV0FSTl9NQVNLCQkweDMKKyNkZWZpbmUgVVNCX0lXQVJOX1NECQlCSVQoNikKKyNkZWZpbmUgVVNCX0ZBU1RfTE9PUAkJQklUKDcpCisKKyNkZWZpbmUgUkVHX0FMQVJNCQkweDUKKyNkZWZpbmUgQUxBUk1fTERPMQkJQklUKDApCisjZGVmaW5lIEFMQVJNX0RDREMxCQlCSVQoMSkKKyNkZWZpbmUgQUxBUk1fRENEQzIJCUJJVCgyKQorI2RlZmluZSBBTEFSTV9EQ0RDMwkJQklUKDMpCisjZGVmaW5lIEFMQVJNX0xETzIJCUJJVCg0KQorI2RlZmluZSBBTEFSTV9VU0JfV0FSTgkJQklUKDUpCisjZGVmaW5lIEFMQVJNX1VTQl9BTEFSTQkJQklUKDYpCisjZGVmaW5lIEFMQVJNX0xDRAkJQklUKDkpCisjZGVmaW5lIEFMQVJNX1RFTVBfV0FSTQkJQklUKDEwKQorI2RlZmluZSBBTEFSTV9URU1QX0hPVAkJQklUKDExKQorI2RlZmluZSBBTEFSTV9OUlNUCQlCSVQoMTQpCisjZGVmaW5lIEFMQVJNX1BPV0VSVVAJCUJJVCgxNSkKKworI2RlZmluZSBSRUdfSU5UX0VOQUJMRQkJMHg2CisjZGVmaW5lIElOVF9MRE8xCQlCSVQoMCkKKyNkZWZpbmUgSU5UX0RDREMxCQlCSVQoMSkKKyNkZWZpbmUgSU5UX0RDREMyCQlCSVQoMikKKyNkZWZpbmUgSU5UX0RDREMzCQlCSVQoMykKKyNkZWZpbmUgSU5UX0xETzIJCUJJVCg0KQorI2RlZmluZSBJTlRfVVNCX1dBUk4JCUJJVCg1KQorI2RlZmluZSBJTlRfVVNCX0FMQVJNCQlCSVQoNikKKyNkZWZpbmUgSU5UX0xDRAkJCUJJVCg5KQorI2RlZmluZSBJTlRfVEVNUF9XQVJNCQlCSVQoMTApCisjZGVmaW5lIElOVF9URU1QX0hPVAkJQklUKDExKQorI2RlZmluZSBJTlRfR0xPQkFMX0VOCQlCSVQoMTUpCisKKyNkZWZpbmUgUkVHX0lOVF9TVEFUVVMJCTB4NworI2RlZmluZSBTVEFUVVNfTERPMQkJQklUKDApCisjZGVmaW5lIFNUQVRVU19EQ0RDMQkJQklUKDEpCisjZGVmaW5lIFNUQVRVU19EQ0RDMgkJQklUKDIpCisjZGVmaW5lIFNUQVRVU19EQ0RDMwkJQklUKDMpCisjZGVmaW5lIFNUQVRVU19MRE8yCQlCSVQoNCkKKyNkZWZpbmUgU1RBVFVTX1VTQl9XQVJOCQlCSVQoNSkKKyNkZWZpbmUgU1RBVFVTX1VTQl9BTEFSTQlCSVQoNikKKyNkZWZpbmUgU1RBVFVTX0xDRAkJQklUKDkpCisjZGVmaW5lIFNUQVRVU19URU1QX1dBUk0JQklUKDEwKQorI2RlZmluZSBTVEFUVVNfVEVNUF9IT1QJCUJJVCgxMSkKKworI2RlZmluZSBSRUdfU09GVFdBUkVfUkVTRVQJMHhiCisjZGVmaW5lIFJFR19XUklURV9FTkFCTEUJMHhkCisjZGVmaW5lIFJFR19SRVZfSUQJCTB4ZgorCisjZGVmaW5lIE5fRENEQwkJCTMKKyNkZWZpbmUgTl9MRE8JCQkyCisjZGVmaW5lIE5fU1dJVENICQkyCisjZGVmaW5lIE5fUkVHVUxBVE9SUwkJKDMgLyogRENEQyAqLyArIFwKKwkJCQkgMiAvKiBMRE8gKi8gICsgXAorCQkJCSAyIC8qIHN3aXRjaCAqLykKKworI2RlZmluZSBGSVhFRF9JTElNU0VMCQlCSVQoMCkKKyNkZWZpbmUgRklYRURfVk9MVEFHRQkJQklUKDEpCisKKyNkZWZpbmUgQ01EX1JFQUQocmVnKQkJKChyZWcpIDw8IDYpCisjZGVmaW5lIENNRF9XUklURShyZWcpCQkoQklUKDUpIHwgKHJlZykgPDwgNikKKyNkZWZpbmUgU1RBVF9DTEsJCUJJVCgzKQorI2RlZmluZSBTVEFUX1dSSVRFCQlCSVQoMikKKyNkZWZpbmUgU1RBVF9JTlZBTElECQlCSVQoMSkKKyNkZWZpbmUgU1RBVF9XUAkJCUJJVCgwKQorCitzdHJ1Y3QgZmllbGQgeworCWludAkJcmVnOworCWludAkJc2hpZnQ7CisJaW50CQltYXNrOworfTsKKworc3RydWN0IHN1cHBseV9pbmZvIHsKKwljb25zdCBjaGFyCSpuYW1lOworCWludAkJbl92b2x0YWdlczsKKwljb25zdCBpbnQJKnZvbHRhZ2VzOworCWludAkJZml4ZWRfdm9sdGFnZTsKKwlpbnQJCW5faWxpbXNlbHM7CisJY29uc3QgaW50CSppbGltc2VsczsKKwlpbnQJCWZpeGVkX2lsaW1zZWw7CisJaW50CQlmbGFnczsKKwlzdHJ1Y3QgZmllbGQJZW5hYmxlLCB2b2x0YWdlLCBpbGltc2VsOworfTsKKworc3RydWN0IHRwczY1MjR4IHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCBzcGlfZGV2aWNlCSpzcGk7CisJc3RydWN0IG11dGV4CQlsb2NrOworCXN0cnVjdCByZWd1bGF0b3JfZGVzYwlkZXNjW05fUkVHVUxBVE9SU107CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYJKnJkZXZbTl9SRUdVTEFUT1JTXTsKK307CisKK3N0YXRpYyBpbnQgX19yZWFkX3JlZyhzdHJ1Y3QgdHBzNjUyNHggKmh3LCBpbnQgcmVnKQoreworCWludCBlcnJvciA9IDA7CisJdTE2IGNtZCA9IENNRF9SRUFEKHJlZyksIGluOworCXU4IHN0YXR1czsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbM107CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKHQpKTsKKworCXRbMF0udHhfYnVmID0gJmNtZDsKKwl0WzBdLmxlbiA9IDI7CisJdFswXS5iaXRzX3Blcl93b3JkID0gMTI7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMF0sICZtKTsKKworCXRbMV0ucnhfYnVmID0gJmluOworCXRbMV0ubGVuID0gMjsKKwl0WzFdLmJpdHNfcGVyX3dvcmQgPSAxNjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOworCisJdFsyXS5yeF9idWYgPSAmc3RhdHVzOworCXRbMl0ubGVuID0gMTsKKwl0WzJdLmJpdHNfcGVyX3dvcmQgPSA0OworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzJdLCAmbSk7CisKKwllcnJvciA9IHNwaV9zeW5jKGh3LT5zcGksICZtKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwlkZXZfZGJnKGh3LT5kZXYsICJyZWFkIHJlZyAlZCwgZGF0YSAleCwgc3RhdHVzICV4XG4iLAorCQlyZWcsIGluLCBzdGF0dXMpOworCisJaWYgKCEoc3RhdHVzICYgU1RBVF9DTEspIHx8IChzdGF0dXMgJiBTVEFUX1dSSVRFKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoc3RhdHVzICYgU1RBVF9JTlZBTElEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBpbjsKK30KKworc3RhdGljIGludCByZWFkX3JlZyhzdHJ1Y3QgdHBzNjUyNHggKmh3LCBpbnQgcmVnKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZody0+bG9jayk7CisJcmV0ID0gX19yZWFkX3JlZyhodywgcmVnKTsKKwltdXRleF91bmxvY2soJmh3LT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX193cml0ZV9yZWcoc3RydWN0IHRwczY1MjR4ICpodywgaW50IHJlZywgaW50IHZhbCkKK3sKKwlpbnQgZXJyb3IgPSAwOworCXUxNiBjbWQgPSBDTURfV1JJVEUocmVnKSwgb3V0ID0gdmFsOworCXU4IHN0YXR1czsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbM107CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKHQpKTsKKworCXRbMF0udHhfYnVmID0gJmNtZDsKKwl0WzBdLmxlbiA9IDI7CisJdFswXS5iaXRzX3Blcl93b3JkID0gMTI7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMF0sICZtKTsKKworCXRbMV0udHhfYnVmID0gJm91dDsKKwl0WzFdLmxlbiA9IDI7CisJdFsxXS5iaXRzX3Blcl93b3JkID0gMTY7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMV0sICZtKTsKKworCXRbMl0ucnhfYnVmID0gJnN0YXR1czsKKwl0WzJdLmxlbiA9IDE7CisJdFsyXS5iaXRzX3Blcl93b3JkID0gNDsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsyXSwgJm0pOworCisJZXJyb3IgPSBzcGlfc3luYyhody0+c3BpLCAmbSk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJZGV2X2RiZyhody0+ZGV2LCAid3JvdGUgcmVnICVkLCBkYXRhICV4LCBzdGF0dXMgJXhcbiIsCisJCXJlZywgb3V0LCBzdGF0dXMpOworCisJaWYgKCEoc3RhdHVzICYgU1RBVF9DTEspIHx8ICEoc3RhdHVzICYgU1RBVF9XUklURSkpCisJCXJldHVybiAtRUlPOworCisJaWYgKHN0YXR1cyAmIChTVEFUX0lOVkFMSUQgfCBTVEFUX1dQKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19ybXdfcmVnKHN0cnVjdCB0cHM2NTI0eCAqaHcsIGludCByZWcsIGludCBtYXNrLCBpbnQgdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBfX3JlYWRfcmVnKGh3LCByZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ICY9IH5tYXNrOworCXJldCB8PSB2YWw7CisKKwlyZXQgPSBfX3dyaXRlX3JlZyhodywgcmVnLCByZXQpOworCisJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcm13X3Byb3RlY3Qoc3RydWN0IHRwczY1MjR4ICpodywgaW50IHJlZywgaW50IG1hc2ssIGludCB2YWwpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmh3LT5sb2NrKTsKKworCXJldCA9IF9fd3JpdGVfcmVnKGh3LCBSRUdfV1JJVEVfRU5BQkxFLCAxKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaHctPmRldiwgImZhaWxlZCB0byBzZXQgd3JpdGUgZW5hYmxlXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXQgPSBfX3Jtd19yZWcoaHcsIHJlZywgbWFzaywgdmFsKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGh3LT5kZXYsICJmYWlsZWQgdG8gcm13IHJlZ2lzdGVyICVkXG4iLCByZWcpOworCisJcmV0ID0gX193cml0ZV9yZWcoaHcsIFJFR19XUklURV9FTkFCTEUsIDApOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihody0+ZGV2LCAiZmFpbGVkIHRvIGNsZWFyIHdyaXRlIGVuYWJsZVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCitlcnJvcjoKKwltdXRleF91bmxvY2soJmh3LT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9maWVsZChzdHJ1Y3QgdHBzNjUyNHggKmh3LCBjb25zdCBzdHJ1Y3QgZmllbGQgKmZpZWxkKQoreworCWludCB0bXA7CisKKwl0bXAgPSByZWFkX3JlZyhodywgZmllbGQtPnJlZyk7CisJaWYgKHRtcCA8IDApCisJCXJldHVybiB0bXA7CisKKwlyZXR1cm4gKHRtcCA+PiBmaWVsZC0+c2hpZnQpICYgZmllbGQtPm1hc2s7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfZmllbGQoc3RydWN0IHRwczY1MjR4ICpodywgY29uc3Qgc3RydWN0IGZpZWxkICpmaWVsZCwKKwkJICAgICAgIGludCB2YWwpCit7CisJaWYgKHZhbCAmIH5maWVsZC0+bWFzaykKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CisKKwlyZXR1cm4gcm13X3Byb3RlY3QoaHcsIGZpZWxkLT5yZWcsCisJCQkJICAgIGZpZWxkLT5tYXNrIDw8IGZpZWxkLT5zaGlmdCwKKwkJCQkgICAgdmFsIDw8IGZpZWxkLT5zaGlmdCk7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQgZGNkYzFfdm9sdGFnZXNbXSA9IHsKKwkgODAwMDAwLCAgODI1MDAwLCAgODUwMDAwLCAgODc1MDAwLAorCSA5MDAwMDAsICA5MjUwMDAsICA5NTAwMDAsICA5NzUwMDAsCisJMTAwMDAwMCwgMTAyNTAwMCwgMTA1MDAwMCwgMTA3NTAwMCwKKwkxMTAwMDAwLCAxMTI1MDAwLCAxMTUwMDAwLCAxMTc1MDAwLAorCTEyMDAwMDAsIDEyMjUwMDAsIDEyNTAwMDAsIDEyNzUwMDAsCisJMTMwMDAwMCwgMTMyNTAwMCwgMTM1MDAwMCwgMTM3NTAwMCwKKwkxNDAwMDAwLCAxNDI1MDAwLCAxNDUwMDAwLCAxNDc1MDAwLAorCTE1MDAwMDAsIDE1MjUwMDAsIDE1NTAwMDAsIDE1NzUwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IGRjZGMyX3ZvbHRhZ2VzW10gPSB7CisJMTQwMDAwMCwgMTQ1MDAwMCwgMTUwMDAwMCwgMTU1MDAwMCwKKwkxNjAwMDAwLCAxNjUwMDAwLCAxNzAwMDAwLCAxNzUwMDAwLAorCTE4MDAwMDAsIDE4NTAwMDAsIDE5MDAwMDAsIDE5NTAwMDAsCisJMjAwMDAwMCwgMjA1MDAwMCwgMjEwMDAwMCwgMjE1MDAwMCwKKwkyMjAwMDAwLCAyMjUwMDAwLCAyMzAwMDAwLCAyMzUwMDAwLAorCTI0MDAwMDAsIDI0NTAwMDAsIDI1MDAwMDAsIDI1NTAwMDAsCisJMjYwMDAwMCwgMjY1MDAwMCwgMjcwMDAwMCwgMjc1MDAwMCwKKwkyODAwMDAwLCAyODUwMDAwLCAyOTAwMDAwLCAyOTUwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBkY2RjM192b2x0YWdlc1tdID0geworCTI0MDAwMDAsIDI0NTAwMDAsIDI1MDAwMDAsIDI1NTAwMDAsIDI2MDAwMDAsCisJMjY1MDAwMCwgMjcwMDAwMCwgMjc1MDAwMCwgMjgwMDAwMCwgMjg1MDAwMCwKKwkyOTAwMDAwLCAyOTUwMDAwLCAzMDAwMDAwLCAzMDUwMDAwLCAzMTAwMDAwLAorCTMxNTAwMDAsIDMyMDAwMDAsIDMyNTAwMDAsIDMzMDAwMDAsIDMzNTAwMDAsCisJMzQwMDAwMCwgMzQ1MDAwMCwgMzUwMDAwMCwgMzU1MDAwMCwgMzYwMDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgbGRvMV92b2x0YWdlc1tdID0geworCTQzMDAwMDAsIDQzNTAwMDAsIDQ0MDAwMDAsIDQ0NTAwMDAsCisJNDUwMDAwMCwgNDU1MDAwMCwgNDYwMDAwMCwgNDY1MDAwMCwKKwk0NzAwMDAwLCA0NzUwMDAwLCA0ODAwMDAwLCA0ODUwMDAwLAorCTQ5MDAwMDAsIDQ5NTAwMDAsIDUwMDAwMDAsIDUwNTAwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IGxkbzJfdm9sdGFnZXNbXSA9IHsKKwkxMTAwMDAwLCAxMTUwMDAwLCAxMjAwMDAwLCAxMjUwMDAwLAorCTEzMDAwMDAsIDE3MDAwMDAsIDE3NTAwMDAsIDE4MDAwMDAsCisJMTg1MDAwMCwgMTkwMDAwMCwgMzE1MDAwMCwgMzIwMDAwMCwKKwkzMjUwMDAwLCAzMzAwMDAwLCAzMzUwMDAwLCAzNDAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBsZG9faWxpbXNlbFtdID0geworCTQwMDAwMCwgMTUwMDAwMAorfTsKKworc3RhdGljIGNvbnN0IGludCB1c2JfaWxpbXNlbFtdID0geworCTIwMDAwMCwgNDAwMDAwLCA4MDAwMDAsIDEwMDAwMDAKK307CisKKyNkZWZpbmUgX19NS19GSUVMRChfcmVnLCBfbWFzaywgX3NoaWZ0KSBcCisJeyAucmVnID0gKF9yZWcpLCAubWFzayA9IChfbWFzayksIC5zaGlmdCA9IChfc2hpZnQpLCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwcGx5X2luZm8gc3VwcGx5X2luZm9bTl9SRUdVTEFUT1JTXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJEQ0RDMSIsCisJCS5mbGFncwkJPSBGSVhFRF9JTElNU0VMLAorCQkubl92b2x0YWdlcwk9IEFSUkFZX1NJWkUoZGNkYzFfdm9sdGFnZXMpLAorCQkudm9sdGFnZXMJPSBkY2RjMV92b2x0YWdlcywKKwkJLmZpeGVkX2lsaW1zZWwJPSAyNDAwMDAwLAorCQkuZW5hYmxlCQk9IF9fTUtfRklFTEQoUkVHX0RDRENfRU4sIERDRENEQ0RDX0VOX01BU0ssCisJCQkJCSAgICAgRENEQ0RDREMxX0VOX1NISUZUKSwKKwkJLnZvbHRhZ2UJPSBfX01LX0ZJRUxEKFJFR19EQ0RDX1NFVCwgRENEQ19WRENEQ19NQVNLLAorCQkJCQkgICAgIERDRENfVkRDREMxX1NISUZUKSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gIkRDREMyIiwKKwkJLmZsYWdzCQk9IEZJWEVEX0lMSU1TRUwsCisJCS5uX3ZvbHRhZ2VzCT0gQVJSQVlfU0laRShkY2RjMl92b2x0YWdlcyksCisJCS52b2x0YWdlcwk9IGRjZGMyX3ZvbHRhZ2VzLAorCQkuZml4ZWRfaWxpbXNlbAk9IDEyMDAwMDAsCisJCS5lbmFibGUJCT0gX19NS19GSUVMRChSRUdfRENEQ19FTiwgRENEQ0RDRENfRU5fTUFTSywKKwkJCQkJICAgICBEQ0RDRENEQzJfRU5fU0hJRlQpLAorCQkudm9sdGFnZQk9IF9fTUtfRklFTEQoUkVHX0RDRENfU0VULCBEQ0RDX1ZEQ0RDX01BU0ssCisJCQkJCSAgICAgRENEQ19WRENEQzJfU0hJRlQpLAorCX0sCisJeworCQkubmFtZQkJPSAiRENEQzMiLAorCQkuZmxhZ3MJCT0gRklYRURfSUxJTVNFTCwKKwkJLm5fdm9sdGFnZXMJPSBBUlJBWV9TSVpFKGRjZGMzX3ZvbHRhZ2VzKSwKKwkJLnZvbHRhZ2VzCT0gZGNkYzNfdm9sdGFnZXMsCisJCS5maXhlZF9pbGltc2VsCT0gMTIwMDAwMCwKKwkJLmVuYWJsZQkJPSBfX01LX0ZJRUxEKFJFR19EQ0RDX0VOLCBEQ0RDRENEQ19FTl9NQVNLLAorCQkJCQlEQ0RDRENEQzNfRU5fU0hJRlQpLAorCQkudm9sdGFnZQk9IF9fTUtfRklFTEQoUkVHX0RDRENfU0VULCBEQ0RDX1ZEQ0RDX01BU0ssCisJCQkJCSAgICAgRENEQ19WRENEQzNfU0hJRlQpLAorCX0sCisJeworCQkubmFtZQkJPSAiTERPMSIsCisJCS5uX3ZvbHRhZ2VzCT0gQVJSQVlfU0laRShsZG8xX3ZvbHRhZ2VzKSwKKwkJLnZvbHRhZ2VzCT0gbGRvMV92b2x0YWdlcywKKwkJLm5faWxpbXNlbHMJPSBBUlJBWV9TSVpFKGxkb19pbGltc2VsKSwKKwkJLmlsaW1zZWxzCT0gbGRvX2lsaW1zZWwsCisJCS5lbmFibGUJCT0gX19NS19GSUVMRChSRUdfQkxPQ0tfRU4sIEJMT0NLX01BU0ssCisJCQkJCSAgICAgQkxPQ0tfTERPMV9TSElGVCksCisJCS52b2x0YWdlCT0gX19NS19GSUVMRChSRUdfTERPX1NFVCwgTERPX1ZTRUxfTUFTSywKKwkJCQkJICAgICBMRE8xX1ZTRUxfU0hJRlQpLAorCQkuaWxpbXNlbAk9IF9fTUtfRklFTEQoUkVHX0xET19TRVQsIExET19JTElNX01BU0ssCisJCQkJCSAgICAgTERPMV9JTElNX1NISUZUKSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gIkxETzIiLAorCQkubl92b2x0YWdlcwk9IEFSUkFZX1NJWkUobGRvMl92b2x0YWdlcyksCisJCS52b2x0YWdlcwk9IGxkbzJfdm9sdGFnZXMsCisJCS5uX2lsaW1zZWxzCT0gQVJSQVlfU0laRShsZG9faWxpbXNlbCksCisJCS5pbGltc2Vscwk9IGxkb19pbGltc2VsLAorCQkuZW5hYmxlCQk9IF9fTUtfRklFTEQoUkVHX0JMT0NLX0VOLCBCTE9DS19NQVNLLAorCQkJCQkgICAgIEJMT0NLX0xETzJfU0hJRlQpLAorCQkudm9sdGFnZQk9IF9fTUtfRklFTEQoUkVHX0xET19TRVQsIExET19WU0VMX01BU0ssCisJCQkJCSAgICAgTERPMl9WU0VMX1NISUZUKSwKKwkJLmlsaW1zZWwJPSBfX01LX0ZJRUxEKFJFR19MRE9fU0VULCBMRE9fSUxJTV9NQVNLLAorCQkJCQkgICAgIExETzJfSUxJTV9TSElGVCksCisJfSwKKwl7CisJCS5uYW1lCQk9ICJVU0IiLAorCQkuZmxhZ3MJCT0gRklYRURfVk9MVEFHRSwKKwkJLmZpeGVkX3ZvbHRhZ2UJPSA1MDAwMDAwLAorCQkubl9pbGltc2Vscwk9IEFSUkFZX1NJWkUodXNiX2lsaW1zZWwpLAorCQkuaWxpbXNlbHMJPSB1c2JfaWxpbXNlbCwKKwkJLmVuYWJsZQkJPSBfX01LX0ZJRUxEKFJFR19CTE9DS19FTiwgQkxPQ0tfTUFTSywKKwkJCQkJICAgICBCTE9DS19VU0JfU0hJRlQpLAorCQkuaWxpbXNlbAk9IF9fTUtfRklFTEQoUkVHX1VTQiwgVVNCX0lMSU1fTUFTSywKKwkJCQkJICAgICBVU0JfSUxJTV9TSElGVCksCisJfSwKKwl7CisJCS5uYW1lCQk9ICJMQ0QiLAorCQkuZmxhZ3MJCT0gRklYRURfVk9MVEFHRSB8IEZJWEVEX0lMSU1TRUwsCisJCS5maXhlZF92b2x0YWdlCT0gNTAwMDAwMCwKKwkJLmZpeGVkX2lsaW1zZWwJPSAgNDAwMDAwLAorCQkuZW5hYmxlCQk9IF9fTUtfRklFTEQoUkVHX0JMT0NLX0VOLCBCTE9DS19NQVNLLAorCQkJCQkgICAgIEJMT0NLX0xDRF9TSElGVCksCisJfSwKK307CisKK3N0YXRpYyBpbnQgbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCB1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwljb25zdCBzdHJ1Y3Qgc3VwcGx5X2luZm8gKmluZm87CisJc3RydWN0IHRwczY1MjR4ICpodzsKKworCWh3CT0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbmZvCT0gJnN1cHBseV9pbmZvW3JkZXZfZ2V0X2lkKHJkZXYpXTsKKworCWlmIChpbmZvLT5mbGFncyAmIEZJWEVEX1ZPTFRBR0UpCisJCXJldHVybiBzZWxlY3RvciA/IC1FSU5WQUwgOiBpbmZvLT5maXhlZF92b2x0YWdlOworCisJcmV0dXJuICgoc2VsZWN0b3IgPCBpbmZvLT5uX3ZvbHRhZ2VzKSA/CisJCWluZm8tPnZvbHRhZ2VzW3NlbGVjdG9yXSA6IC1FSU5WQUwpOworfQorCitzdGF0aWMgaW50IHNldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgbWluX3VWLCBpbnQgbWF4X3VWLAorCQkgICAgICAgdW5zaWduZWQgKnNlbGVjdG9yKQoreworCWNvbnN0IHN0cnVjdCBzdXBwbHlfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgdHBzNjUyNHggKmh3OworCXVuc2lnbmVkIGk7CisKKwlodwk9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW5mbwk9ICZzdXBwbHlfaW5mb1tyZGV2X2dldF9pZChyZGV2KV07CisKKwlpZiAoaW5mby0+ZmxhZ3MgJiBGSVhFRF9WT0xUQUdFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5uX3ZvbHRhZ2VzOyBpKyspCisJCWlmIChtaW5fdVYgPD0gaW5mby0+dm9sdGFnZXNbaV0gJiYKKwkJICAgIG1heF91ViA+PSBpbmZvLT52b2x0YWdlc1tpXSkKKwkJCWJyZWFrOworCisJaWYgKGkgPj0gaW5mby0+bl92b2x0YWdlcykKKwkJaSA9IGluZm8tPm5fdm9sdGFnZXMgLSAxOworCisJKnNlbGVjdG9yID0gaW5mby0+dm9sdGFnZXNbaV07CisKKwlyZXR1cm4gd3JpdGVfZmllbGQoaHcsICZpbmZvLT52b2x0YWdlLCBpKTsKK30KKworc3RhdGljIGludCBnZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwljb25zdCBzdHJ1Y3Qgc3VwcGx5X2luZm8gKmluZm87CisJc3RydWN0IHRwczY1MjR4ICpodzsKKwlpbnQgcmV0OworCisJaHcJPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWluZm8JPSAmc3VwcGx5X2luZm9bcmRldl9nZXRfaWQocmRldildOworCisJaWYgKGluZm8tPmZsYWdzICYgRklYRURfVk9MVEFHRSkKKwkJcmV0dXJuIGluZm8tPmZpeGVkX3ZvbHRhZ2U7CisKKwlyZXQgPSByZWFkX2ZpZWxkKGh3LCAmaW5mby0+dm9sdGFnZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKFdBUk5fT04ocmV0ID49IGluZm8tPm5fdm9sdGFnZXMpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiBpbmZvLT52b2x0YWdlc1tyZXRdOworfQorCitzdGF0aWMgaW50IHNldF9jdXJyZW50X2xpbWl0KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgbWluX3VBLAorCQkJICAgICBpbnQgbWF4X3VBKQoreworCWNvbnN0IHN0cnVjdCBzdXBwbHlfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgdHBzNjUyNHggKmh3OworCWludCBpOworCisJaHcJPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWluZm8JPSAmc3VwcGx5X2luZm9bcmRldl9nZXRfaWQocmRldildOworCisJaWYgKGluZm8tPmZsYWdzICYgRklYRURfSUxJTVNFTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bl9pbGltc2VsczsgaSsrKQorCQlpZiAobWluX3VBIDw9IGluZm8tPmlsaW1zZWxzW2ldICYmCisJCSAgICBtYXhfdUEgPj0gaW5mby0+aWxpbXNlbHNbaV0pCisJCQlicmVhazsKKworCWlmIChpID49IGluZm8tPm5faWxpbXNlbHMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHdyaXRlX2ZpZWxkKGh3LCAmaW5mby0+aWxpbXNlbCwgaSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2N1cnJlbnRfbGltaXQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJY29uc3Qgc3RydWN0IHN1cHBseV9pbmZvICppbmZvOworCXN0cnVjdCB0cHM2NTI0eCAqaHc7CisJaW50IHJldDsKKworCWh3CT0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbmZvCT0gJnN1cHBseV9pbmZvW3JkZXZfZ2V0X2lkKHJkZXYpXTsKKworCWlmIChpbmZvLT5mbGFncyAmIEZJWEVEX0lMSU1TRUwpCisJCXJldHVybiBpbmZvLT5maXhlZF9pbGltc2VsOworCisJcmV0ID0gcmVhZF9maWVsZChodywgJmluZm8tPmlsaW1zZWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChXQVJOX09OKHJldCA+PSBpbmZvLT5uX2lsaW1zZWxzKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gaW5mby0+aWxpbXNlbHNbcmV0XTsKK30KKworc3RhdGljIGludCBlbmFibGVfc3VwcGx5KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCWNvbnN0IHN0cnVjdCBzdXBwbHlfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgdHBzNjUyNHggKmh3OworCisJaHcJPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWluZm8JPSAmc3VwcGx5X2luZm9bcmRldl9nZXRfaWQocmRldildOworCisJcmV0dXJuIHdyaXRlX2ZpZWxkKGh3LCAmaW5mby0+ZW5hYmxlLCAxKTsKK30KKworc3RhdGljIGludCBkaXNhYmxlX3N1cHBseShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwljb25zdCBzdHJ1Y3Qgc3VwcGx5X2luZm8gKmluZm87CisJc3RydWN0IHRwczY1MjR4ICpodzsKKworCWh3CT0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbmZvCT0gJnN1cHBseV9pbmZvW3JkZXZfZ2V0X2lkKHJkZXYpXTsKKworCXJldHVybiB3cml0ZV9maWVsZChodywgJmluZm8tPmVuYWJsZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgaXNfc3VwcGx5X2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJY29uc3Qgc3RydWN0IHN1cHBseV9pbmZvICppbmZvOworCXN0cnVjdCB0cHM2NTI0eCAqaHc7CisKKwlodwk9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW5mbwk9ICZzdXBwbHlfaW5mb1tyZGV2X2dldF9pZChyZGV2KV07CisKKwlyZXR1cm4gcmVhZF9maWVsZChodywgJmluZm8tPmVuYWJsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyByZWd1bGF0b3Jfb3BzID0geworCS5pc19lbmFibGVkCQk9IGlzX3N1cHBseV9lbmFibGVkLAorCS5lbmFibGUJCQk9IGVuYWJsZV9zdXBwbHksCisJLmRpc2FibGUJCT0gZGlzYWJsZV9zdXBwbHksCisJLmdldF92b2x0YWdlCQk9IGdldF92b2x0YWdlLAorCS5zZXRfdm9sdGFnZQkJPSBzZXRfdm9sdGFnZSwKKwkubGlzdF92b2x0YWdlCQk9IGxpc3Rfdm9sdGFnZSwKKwkuc2V0X2N1cnJlbnRfbGltaXQJPSBzZXRfY3VycmVudF9saW1pdCwKKwkuZ2V0X2N1cnJlbnRfbGltaXQJPSBnZXRfY3VycmVudF9saW1pdCwKK307CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHBtaWNfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHRwczY1MjR4ICpodyA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCWludCBpOworCisJaWYgKCFodykKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IE5fUkVHVUxBVE9SUzsgaSsrKSB7CisJCWlmIChody0+cmRldltpXSkKKwkJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKGh3LT5yZGV2W2ldKTsKKwkJaHctPnJkZXZbaV0gPSBOVUxMOworCX0KKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBOVUxMKTsKKwlrZnJlZShodyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBtaWNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgdHBzNjUyNHggKmh3OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzcGktPmRldjsKKwljb25zdCBzdHJ1Y3Qgc3VwcGx5X2luZm8gKmluZm8gPSBzdXBwbHlfaW5mbzsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOworCWludCByZXQgPSAwLCBpOworCisJaW5pdF9kYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlmICghaW5pdF9kYXRhKSB7CisJCWRldl9lcnIoZGV2LCAiY291bGQgbm90IGZpbmQgcmVndWxhdG9yIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlodyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0cHM2NTI0eCksIEdGUF9LRVJORUwpOworCWlmICghaHcpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgYWxsb2NhdGUgcmVndWxhdG9yIHByaXZhdGUgZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBodyk7CisKKwltZW1zZXQoaHcsIDAsIHNpemVvZihzdHJ1Y3QgdHBzNjUyNHgpKTsKKwlody0+ZGV2ID0gZGV2OworCWh3LT5zcGkgPSBzcGlfZGV2X2dldChzcGkpOworCW11dGV4X2luaXQoJmh3LT5sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBOX1JFR1VMQVRPUlM7IGkrKywgaW5mbysrLCBpbml0X2RhdGErKykgeworCQlody0+ZGVzY1tpXS5uYW1lCT0gaW5mby0+bmFtZTsKKwkJaHctPmRlc2NbaV0uaWQJCT0gaTsKKwkJaHctPmRlc2NbaV0ubl92b2x0YWdlcwk9IGluZm8tPm5fdm9sdGFnZXM7CisJCWh3LT5kZXNjW2ldLm9wcwkJPSAmcmVndWxhdG9yX29wczsKKwkJaHctPmRlc2NbaV0udHlwZQk9IFJFR1VMQVRPUl9WT0xUQUdFOworCQlody0+ZGVzY1tpXS5vd25lcgk9IFRISVNfTU9EVUxFOworCisJCWlmIChpbmZvLT5mbGFncyAmIEZJWEVEX1ZPTFRBR0UpCisJCQlody0+ZGVzY1tpXS5uX3ZvbHRhZ2VzID0gMTsKKworCQlody0+cmRldltpXSA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmaHctPmRlc2NbaV0sIGRldiwKKwkJCQkJCSBpbml0X2RhdGEsIGh3KTsKKwkJaWYgKElTX0VSUihody0+cmRldltpXSkpIHsKKwkJCXJldCA9IFBUUl9FUlIoaHctPnJkZXZbaV0pOworCQkJaHctPnJkZXZbaV0gPSBOVUxMOworCQkJZ290byBmYWlsOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJcG1pY19yZW1vdmUoc3BpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgcG1pY19kcml2ZXIgPSB7CisJLnByb2JlCQk9IHBtaWNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChwbWljX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInRwczY1MjR4IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBtaWNfZHJpdmVyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmcG1pY19kcml2ZXIpOworfQorbW9kdWxlX2luaXQocG1pY19kcml2ZXJfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwbWljX2RyaXZlcl9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZwbWljX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChwbWljX2RyaXZlcl9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUUFM2NTI0WCBQTUlDIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQ3lyaWwgQ2hlbXBhcmF0aHkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygic3BpOnRwczY1MjR4Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTg2eC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1ODZ4LXJlZ3VsYXRvci5jCmluZGV4IDZkMjBiMDQuLmJiMDRhNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1ODZ4LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1ODZ4LXJlZ3VsYXRvci5jCkBAIC04NSw3ICs4NSw4IEBACiAKIHN0YXRpYyBpbnQgX190cHM2NTg2eF9sZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IGRldmljZSAqcGFyZW50LAogCQkJCSAgICAgIHN0cnVjdCB0cHM2NTg2eF9yZWd1bGF0b3IgKnJpLAotCQkJCSAgICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJICAgICAgaW50IG1pbl91ViwgaW50IG1heF91ViwKKwkJCQkgICAgICB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJaW50IHZhbCwgdVY7CiAJdWludDhfdCBtYXNrOwpAQCAtMTAwLDYgKzEwMSw4IEBACiAJCS8qIHVzZSB0aGUgZmlyc3QgaW4tcmFuZ2UgdmFsdWUgKi8KIAkJaWYgKG1pbl91ViA8PSB1ViAmJiB1ViA8PSBtYXhfdVYpIHsKIAorCQkJKnNlbGVjdG9yID0gdmFsOworCiAJCQl2YWwgPDw9IHJpLT52b2x0X3NoaWZ0OwogCQkJbWFzayA9ICgoMSA8PCByaS0+dm9sdF9uYml0cykgLSAxKSA8PCByaS0+dm9sdF9zaGlmdDsKIApAQCAtMTExLDEyICsxMTQsMTMgQEAKIH0KIAogc3RhdGljIGludCB0cHM2NTg2eF9sZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCQkJICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYsIHVuc2lnbmVkICpzZWxlY3RvcikKIHsKIAlzdHJ1Y3QgdHBzNjU4NnhfcmVndWxhdG9yICpyaSA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJc3RydWN0IGRldmljZSAqcGFyZW50ID0gdG9fdHBzNjU4NnhfZGV2KHJkZXYpOwogCi0JcmV0dXJuIF9fdHBzNjU4NnhfbGRvX3NldF92b2x0YWdlKHBhcmVudCwgcmksIG1pbl91ViwgbWF4X3VWKTsKKwlyZXR1cm4gX190cHM2NTg2eF9sZG9fc2V0X3ZvbHRhZ2UocGFyZW50LCByaSwgbWluX3VWLCBtYXhfdVYsCisJCQkJCSAgc2VsZWN0b3IpOwogfQogCiBzdGF0aWMgaW50IHRwczY1ODZ4X2xkb19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKQEAgLTE0MCwxMyArMTQ0LDE0IEBACiB9CiAKIHN0YXRpYyBpbnQgdHBzNjU4NnhfZHZtX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQkJCSAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQorCQkJCSAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWLCB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IHRwczY1ODZ4X3JlZ3VsYXRvciAqcmkgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IHRvX3RwczY1ODZ4X2RldihyZGV2KTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gX190cHM2NTg2eF9sZG9fc2V0X3ZvbHRhZ2UocGFyZW50LCByaSwgbWluX3VWLCBtYXhfdVYpOworCXJldCA9IF9fdHBzNjU4NnhfbGRvX3NldF92b2x0YWdlKHBhcmVudCwgcmksIG1pbl91ViwgbWF4X3VWLAorCQkJCQkgc2VsZWN0b3IpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3R3bC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3R3bC1yZWd1bGF0b3IuYwppbmRleCBhNTcyNjJhLi5iZDMzMmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci90d2wtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvdHdsLXJlZ3VsYXRvci5jCkBAIC0zMjksNyArMzI5LDggQEAKIH0KIAogc3RhdGljIGludAotdHdsNDAzMGxkb19zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IG1pbl91ViwgaW50IG1heF91VikKK3R3bDQwMzBsZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCBtaW5fdVYsIGludCBtYXhfdVYsCisJCSAgICAgICB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IHR3bHJlZ19pbmZvCSppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlpbnQJCQl2c2VsOwpAQCAtMzQ1LDkgKzM0NiwxMSBAQAogCQkvKiBSRVZJU0lUIGZvciBWQVVYMiwgZmlyc3QgbWF0Y2ggbWF5IG5vdCBiZSBiZXN0L2xvd2VzdCAqLwogCiAJCS8qIHVzZSB0aGUgZmlyc3QgaW4tcmFuZ2UgdmFsdWUgKi8KLQkJaWYgKG1pbl91ViA8PSB1ViAmJiB1ViA8PSBtYXhfdVYpCisJCWlmIChtaW5fdVYgPD0gdVYgJiYgdVYgPD0gbWF4X3VWKSB7CisJCQkqc2VsZWN0b3IgPSB2c2VsOwogCQkJcmV0dXJuIHR3bHJlZ193cml0ZShpbmZvLCBUV0xfTU9EVUxFX1BNX1JFQ0VJVkVSLAogCQkJCQkJCVZSRUdfVk9MVEFHRSwgdnNlbCk7CisJCX0KIAl9CiAKIAlyZXR1cm4gLUVET007CkBAIC0zODksNyArMzkyLDggQEAKIH0KIAogc3RhdGljIGludAotdHdsNjAzMGxkb19zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IG1pbl91ViwgaW50IG1heF91VikKK3R3bDYwMzBsZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCBtaW5fdVYsIGludCBtYXhfdVYsCisJCSAgICAgICB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IHR3bHJlZ19pbmZvCSppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlpbnQJCQl2c2VsOwpAQCAtNDAyLDYgKzQwNiw3IEBACiAJICogbVYgPSAxMDAwbXYgKyAxMDBtdiAqICh2c2VsIC0gMSkKIAkgKi8KIAl2c2VsID0gKG1pbl91Vi8xMDAwIC0gMTAwMCkvMTAwICsgMTsKKwkqc2VsZWN0b3IgPSB2c2VsOwogCXJldHVybiB0d2xyZWdfd3JpdGUoaW5mbywgVFdMX01PRFVMRV9QTV9SRUNFSVZFUiwgVlJFR19WT0xUQUdFLCB2c2VsKTsKIAogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWRjZGMuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1kY2RjLmMKaW5kZXggZGJmYWY1OS4uOGIwZDJjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWRjZGMuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtZGNkYy5jCkBAIC0zMDIsNyArMzAyLDcgQEAKIH0KIAogc3RhdGljIGludCB3bTgzMXhfYnVja3Zfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCQkJICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYsIHVuc2lnbmVkICpzZWxlY3RvcikKIHsKIAlzdHJ1Y3Qgd204MzF4X2RjZGMgKmRjZGMgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGRjZGMtPndtODMxeDsKQEAgLTMxNCw2ICszMTQsOCBAQAogCWlmICh2c2VsIDwgMCkKIAkJcmV0dXJuIHZzZWw7CiAKKwkqc2VsZWN0b3IgPSB2c2VsOworCiAJLyogSWYgdGhpcyB2YWx1ZSBpcyBhbHJlYWR5IHNldCB0aGVuIGRvIGEgR1BJTyB1cGRhdGUgaWYgd2UgY2FuICovCiAJaWYgKGRjZGMtPmR2c19ncGlvICYmIGRjZGMtPm9uX3ZzZWwgPT0gdnNlbCkKIAkJcmV0dXJuIHdtODMxeF9idWNrdl9zZXRfZHZzKHJkZXYsIDApOwpAQCAtMzc1LDE0ICszNzcsMTQgQEAKIAlyZXR1cm4gd204MzF4X3NldF9iaXRzKHdtODMxeCwgcmVnLCBXTTgzMVhfREMxX1NMUF9WU0VMX01BU0ssIHZzZWwpOwogfQogCi1zdGF0aWMgaW50IHdtODMxeF9idWNrdl9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3N0YXRpYyBpbnQgd204MzF4X2J1Y2t2X2dldF92b2x0YWdlX3NlbChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3Qgd204MzF4X2RjZGMgKmRjZGMgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCiAJaWYgKGRjZGMtPmR2c19ncGlvICYmIGRjZGMtPmR2c19ncGlvX3N0YXRlKQotCQlyZXR1cm4gd204MzF4X2J1Y2t2X2xpc3Rfdm9sdGFnZShyZGV2LCBkY2RjLT5kdnNfdnNlbCk7CisJCXJldHVybiBkY2RjLT5kdnNfdnNlbDsKIAllbHNlCi0JCXJldHVybiB3bTgzMXhfYnVja3ZfbGlzdF92b2x0YWdlKHJkZXYsIGRjZGMtPm9uX3ZzZWwpOworCQlyZXR1cm4gZGNkYy0+b25fdnNlbDsKIH0KIAogLyogQ3VycmVudCBsaW1pdCBvcHRpb25zICovCkBAIC00MjQsNyArNDI2LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHdtODMxeF9idWNrdl9vcHMgPSB7CiAJLnNldF92b2x0YWdlID0gd204MzF4X2J1Y2t2X3NldF92b2x0YWdlLAotCS5nZXRfdm9sdGFnZSA9IHdtODMxeF9idWNrdl9nZXRfdm9sdGFnZSwKKwkuZ2V0X3ZvbHRhZ2Vfc2VsID0gd204MzF4X2J1Y2t2X2dldF92b2x0YWdlX3NlbCwKIAkubGlzdF92b2x0YWdlID0gd204MzF4X2J1Y2t2X2xpc3Rfdm9sdGFnZSwKIAkuc2V0X3N1c3BlbmRfdm9sdGFnZSA9IHdtODMxeF9idWNrdl9zZXRfc3VzcGVuZF92b2x0YWdlLAogCS5zZXRfY3VycmVudF9saW1pdCA9IHdtODMxeF9idWNrdl9zZXRfY3VycmVudF9saW1pdCwKQEAgLTYzNiw3ICs2MzgsNyBAQAogfQogCiBzdGF0aWMgaW50IHdtODMxeF9idWNrcF9zZXRfdm9sdGFnZV9pbnQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCByZWcsCi0JCQkJCWludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJCWludCBtaW5fdVYsIGludCBtYXhfdVYsIGludCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IHdtODMxeF9kY2RjICpkY2RjID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkY2RjLT53bTgzMXg7CkBAIC02NTAsMTYgKzY1MiwyMCBAQAogCWlmICh3bTgzMXhfYnVja3BfbGlzdF92b2x0YWdlKHJkZXYsIHZzZWwpID4gbWF4X3VWKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCSpzZWxlY3RvciA9IHZzZWw7CisKIAlyZXR1cm4gd204MzF4X3NldF9iaXRzKHdtODMxeCwgcmVnLCBXTTgzMVhfREMzX09OX1ZTRUxfTUFTSywgdnNlbCk7CiB9CiAKIHN0YXRpYyBpbnQgd204MzF4X2J1Y2twX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQkJCSAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQorCQkJCSAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWLAorCQkJCSAgICB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IHdtODMxeF9kY2RjICpkY2RjID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAl1MTYgcmVnID0gZGNkYy0+YmFzZSArIFdNODMxWF9EQ0RDX09OX0NPTkZJRzsKIAotCXJldHVybiB3bTgzMXhfYnVja3Bfc2V0X3ZvbHRhZ2VfaW50KHJkZXYsIHJlZywgbWluX3VWLCBtYXhfdVYpOworCXJldHVybiB3bTgzMXhfYnVja3Bfc2V0X3ZvbHRhZ2VfaW50KHJkZXYsIHJlZywgbWluX3VWLCBtYXhfdVYsCisJCQkJCSAgICBzZWxlY3Rvcik7CiB9CiAKIHN0YXRpYyBpbnQgd204MzF4X2J1Y2twX3NldF9zdXNwZW5kX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCkBAIC02NjcsMTEgKzY3MywxMiBAQAogewogCXN0cnVjdCB3bTgzMXhfZGNkYyAqZGNkYyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJdTE2IHJlZyA9IGRjZGMtPmJhc2UgKyBXTTgzMVhfRENEQ19TTEVFUF9DT05UUk9MOworCXVuc2lnbmVkIHNlbGVjdG9yOwogCi0JcmV0dXJuIHdtODMxeF9idWNrcF9zZXRfdm9sdGFnZV9pbnQocmRldiwgcmVnLCB1ViwgdVYpOworCXJldHVybiB3bTgzMXhfYnVja3Bfc2V0X3ZvbHRhZ2VfaW50KHJkZXYsIHJlZywgdVYsIHVWLCAmc2VsZWN0b3IpOwogfQogCi1zdGF0aWMgaW50IHdtODMxeF9idWNrcF9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3N0YXRpYyBpbnQgd204MzF4X2J1Y2twX2dldF92b2x0YWdlX3NlbChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3Qgd204MzF4X2RjZGMgKmRjZGMgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGRjZGMtPndtODMxeDsKQEAgLTY4MiwxMiArNjg5LDEyIEBACiAJaWYgKHZhbCA8IDApCiAJCXJldHVybiB2YWw7CiAKLQlyZXR1cm4gd204MzF4X2J1Y2twX2xpc3Rfdm9sdGFnZShyZGV2LCB2YWwgJiBXTTgzMVhfREMzX09OX1ZTRUxfTUFTSyk7CisJcmV0dXJuIHZhbCAmIFdNODMxWF9EQzNfT05fVlNFTF9NQVNLOwogfQogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgd204MzF4X2J1Y2twX29wcyA9IHsKIAkuc2V0X3ZvbHRhZ2UgPSB3bTgzMXhfYnVja3Bfc2V0X3ZvbHRhZ2UsCi0JLmdldF92b2x0YWdlID0gd204MzF4X2J1Y2twX2dldF92b2x0YWdlLAorCS5nZXRfdm9sdGFnZV9zZWwgPSB3bTgzMXhfYnVja3BfZ2V0X3ZvbHRhZ2Vfc2VsLAogCS5saXN0X3ZvbHRhZ2UgPSB3bTgzMXhfYnVja3BfbGlzdF92b2x0YWdlLAogCS5zZXRfc3VzcGVuZF92b2x0YWdlID0gd204MzF4X2J1Y2twX3NldF9zdXNwZW5kX3ZvbHRhZ2UsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1sZG8uYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1sZG8uYwppbmRleCA5ZWRmOGY2Li5jOTRmYzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtbGRvLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jCkBAIC0xMTMsNyArMTEzLDggQEAKIH0KIAogc3RhdGljIGludCB3bTgzMXhfZ3BfbGRvX3NldF92b2x0YWdlX2ludChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IHJlZywKLQkJCQkJIGludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJCSBpbnQgbWluX3VWLCBpbnQgbWF4X3VWLAorCQkJCQkgdW5zaWduZWQgKnNlbGVjdG9yKQogewogCXN0cnVjdCB3bTgzMXhfbGRvICpsZG8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGxkby0+d204MzF4OwpAQCAtMTMzLDE2ICsxMzQsMjAgQEAKIAlpZiAocmV0IDwgbWluX3VWIHx8IHJldCA+IG1heF91VikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkqc2VsZWN0b3IgPSB2c2VsOworCiAJcmV0dXJuIHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIHJlZywgV004MzFYX0xETzFfT05fVlNFTF9NQVNLLCB2c2VsKTsKIH0KIAogc3RhdGljIGludCB3bTgzMXhfZ3BfbGRvX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQkJCSAgICAgaW50IG1pbl91ViwgaW50IG1heF91VikKKwkJCQkgICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYsCisJCQkJICAgICB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IHdtODMxeF9sZG8gKmxkbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJaW50IHJlZyA9IGxkby0+YmFzZSArIFdNODMxWF9MRE9fT05fQ09OVFJPTDsKIAotCXJldHVybiB3bTgzMXhfZ3BfbGRvX3NldF92b2x0YWdlX2ludChyZGV2LCByZWcsIG1pbl91ViwgbWF4X3VWKTsKKwlyZXR1cm4gd204MzF4X2dwX2xkb19zZXRfdm9sdGFnZV9pbnQocmRldiwgcmVnLCBtaW5fdVYsIG1heF91ViwKKwkJCQkJICAgICBzZWxlY3Rvcik7CiB9CiAKIHN0YXRpYyBpbnQgd204MzF4X2dwX2xkb19zZXRfc3VzcGVuZF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LApAQCAtMTUwLDExICsxNTUsMTIgQEAKIHsKIAlzdHJ1Y3Qgd204MzF4X2xkbyAqbGRvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlpbnQgcmVnID0gbGRvLT5iYXNlICsgV004MzFYX0xET19TTEVFUF9DT05UUk9MOworCXVuc2lnbmVkIGludCBzZWxlY3RvcjsKIAotCXJldHVybiB3bTgzMXhfZ3BfbGRvX3NldF92b2x0YWdlX2ludChyZGV2LCByZWcsIHVWLCB1Vik7CisJcmV0dXJuIHdtODMxeF9ncF9sZG9fc2V0X3ZvbHRhZ2VfaW50KHJkZXYsIHJlZywgdVYsIHVWLCAmc2VsZWN0b3IpOwogfQogCi1zdGF0aWMgaW50IHdtODMxeF9ncF9sZG9fZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCitzdGF0aWMgaW50IHdtODMxeF9ncF9sZG9fZ2V0X3ZvbHRhZ2Vfc2VsKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewogCXN0cnVjdCB3bTgzMXhfbGRvICpsZG8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGxkby0+d204MzF4OwpAQCAtMTY3LDcgKzE3Myw3IEBACiAKIAlyZXQgJj0gV004MzFYX0xETzFfT05fVlNFTF9NQVNLOwogCi0JcmV0dXJuIHdtODMxeF9ncF9sZG9fbGlzdF92b2x0YWdlKHJkZXYsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCB3bTgzMXhfZ3BfbGRvX2dldF9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQpAQCAtMjg3LDcgKzI5Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB3bTgzMXhfZ3BfbGRvX29wcyA9IHsKIAkubGlzdF92b2x0YWdlID0gd204MzF4X2dwX2xkb19saXN0X3ZvbHRhZ2UsCi0JLmdldF92b2x0YWdlID0gd204MzF4X2dwX2xkb19nZXRfdm9sdGFnZSwKKwkuZ2V0X3ZvbHRhZ2Vfc2VsID0gd204MzF4X2dwX2xkb19nZXRfdm9sdGFnZV9zZWwsCiAJLnNldF92b2x0YWdlID0gd204MzF4X2dwX2xkb19zZXRfdm9sdGFnZSwKIAkuc2V0X3N1c3BlbmRfdm9sdGFnZSA9IHdtODMxeF9ncF9sZG9fc2V0X3N1c3BlbmRfdm9sdGFnZSwKIAkuZ2V0X21vZGUgPSB3bTgzMXhfZ3BfbGRvX2dldF9tb2RlLApAQCAtNDEzLDcgKzQxOSw4IEBACiB9CiAKIHN0YXRpYyBpbnQgd204MzF4X2FsZG9fc2V0X3ZvbHRhZ2VfaW50KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgcmVnLAotCQkJCQkgaW50IG1pbl91ViwgaW50IG1heF91VikKKwkJCQkgICAgICAgaW50IG1pbl91ViwgaW50IG1heF91ViwKKwkJCQkgICAgICAgdW5zaWduZWQgKnNlbGVjdG9yKQogewogCXN0cnVjdCB3bTgzMXhfbGRvICpsZG8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGxkby0+d204MzF4OwpAQCAtNDMzLDE2ICs0NDAsMTkgQEAKIAlpZiAocmV0IDwgbWluX3VWIHx8IHJldCA+IG1heF91VikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkqc2VsZWN0b3IgPSB2c2VsOworCiAJcmV0dXJuIHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIHJlZywgV004MzFYX0xETzdfT05fVlNFTF9NQVNLLCB2c2VsKTsKIH0KIAogc3RhdGljIGludCB3bTgzMXhfYWxkb19zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKLQkJCQkgICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJICAgaW50IG1pbl91ViwgaW50IG1heF91ViwgdW5zaWduZWQgKnNlbGVjdG9yKQogewogCXN0cnVjdCB3bTgzMXhfbGRvICpsZG8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCWludCByZWcgPSBsZG8tPmJhc2UgKyBXTTgzMVhfTERPX09OX0NPTlRST0w7CiAKLQlyZXR1cm4gd204MzF4X2FsZG9fc2V0X3ZvbHRhZ2VfaW50KHJkZXYsIHJlZywgbWluX3VWLCBtYXhfdVYpOworCXJldHVybiB3bTgzMXhfYWxkb19zZXRfdm9sdGFnZV9pbnQocmRldiwgcmVnLCBtaW5fdVYsIG1heF91ViwKKwkJCQkJICAgc2VsZWN0b3IpOwogfQogCiBzdGF0aWMgaW50IHdtODMxeF9hbGRvX3NldF9zdXNwZW5kX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCkBAIC00NTAsMTEgKzQ2MCwxMiBAQAogewogCXN0cnVjdCB3bTgzMXhfbGRvICpsZG8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCWludCByZWcgPSBsZG8tPmJhc2UgKyBXTTgzMVhfTERPX1NMRUVQX0NPTlRST0w7CisJdW5zaWduZWQgaW50IHNlbGVjdG9yOwogCi0JcmV0dXJuIHdtODMxeF9hbGRvX3NldF92b2x0YWdlX2ludChyZGV2LCByZWcsIHVWLCB1Vik7CisJcmV0dXJuIHdtODMxeF9hbGRvX3NldF92b2x0YWdlX2ludChyZGV2LCByZWcsIHVWLCB1ViwgJnNlbGVjdG9yKTsKIH0KIAotc3RhdGljIGludCB3bTgzMXhfYWxkb19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3N0YXRpYyBpbnQgd204MzF4X2FsZG9fZ2V0X3ZvbHRhZ2Vfc2VsKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewogCXN0cnVjdCB3bTgzMXhfbGRvICpsZG8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGxkby0+d204MzF4OwpAQCAtNDY3LDcgKzQ3OCw3IEBACiAKIAlyZXQgJj0gV004MzFYX0xETzdfT05fVlNFTF9NQVNLOwogCi0JcmV0dXJuIHdtODMxeF9hbGRvX2xpc3Rfdm9sdGFnZShyZGV2LCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgd204MzF4X2FsZG9fZ2V0X21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCkBAIC01NDgsNyArNTU5LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHdtODMxeF9hbGRvX29wcyA9IHsKIAkubGlzdF92b2x0YWdlID0gd204MzF4X2FsZG9fbGlzdF92b2x0YWdlLAotCS5nZXRfdm9sdGFnZSA9IHdtODMxeF9hbGRvX2dldF92b2x0YWdlLAorCS5nZXRfdm9sdGFnZV9zZWwgPSB3bTgzMXhfYWxkb19nZXRfdm9sdGFnZV9zZWwsCiAJLnNldF92b2x0YWdlID0gd204MzF4X2FsZG9fc2V0X3ZvbHRhZ2UsCiAJLnNldF9zdXNwZW5kX3ZvbHRhZ2UgPSB3bTgzMXhfYWxkb19zZXRfc3VzcGVuZF92b2x0YWdlLAogCS5nZXRfbW9kZSA9IHdtODMxeF9hbGRvX2dldF9tb2RlLApAQCAtNjY2LDcgKzY3Nyw4IEBACiAKIHN0YXRpYyBpbnQgd204MzF4X2FsaXZlX2xkb19zZXRfdm9sdGFnZV9pbnQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCiAJCQkJCSAgICBpbnQgcmVnLAotCQkJCQkgICAgaW50IG1pbl91ViwgaW50IG1heF91VikKKwkJCQkJICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYsCisJCQkJCSAgICB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IHdtODMxeF9sZG8gKmxkbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJc3RydWN0IHdtODMxeCAqd204MzF4ID0gbGRvLT53bTgzMXg7CkBAIC02ODAsMTYgKzY5MiwyMCBAQAogCWlmIChyZXQgPCBtaW5fdVYgfHwgcmV0ID4gbWF4X3VWKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCSpzZWxlY3RvciA9IHZzZWw7CisKIAlyZXR1cm4gd204MzF4X3NldF9iaXRzKHdtODMxeCwgcmVnLCBXTTgzMVhfTERPMTFfT05fVlNFTF9NQVNLLCB2c2VsKTsKIH0KIAogc3RhdGljIGludCB3bTgzMXhfYWxpdmVfbGRvX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQkJCSAgICAgaW50IG1pbl91ViwgaW50IG1heF91VikKKwkJCQkJaW50IG1pbl91ViwgaW50IG1heF91ViwKKwkJCQkJdW5zaWduZWQgKnNlbGVjdG9yKQogewogCXN0cnVjdCB3bTgzMXhfbGRvICpsZG8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCWludCByZWcgPSBsZG8tPmJhc2UgKyBXTTgzMVhfQUxJVkVfTERPX09OX0NPTlRST0w7CiAKLQlyZXR1cm4gd204MzF4X2FsaXZlX2xkb19zZXRfdm9sdGFnZV9pbnQocmRldiwgcmVnLCBtaW5fdVYsIG1heF91Vik7CisJcmV0dXJuIHdtODMxeF9hbGl2ZV9sZG9fc2V0X3ZvbHRhZ2VfaW50KHJkZXYsIHJlZywgbWluX3VWLCBtYXhfdVYsCisJCQkJCQlzZWxlY3Rvcik7CiB9CiAKIHN0YXRpYyBpbnQgd204MzF4X2FsaXZlX2xkb19zZXRfc3VzcGVuZF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LApAQCAtNjk3LDExICs3MTMsMTIgQEAKIHsKIAlzdHJ1Y3Qgd204MzF4X2xkbyAqbGRvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlpbnQgcmVnID0gbGRvLT5iYXNlICsgV004MzFYX0FMSVZFX0xET19TTEVFUF9DT05UUk9MOworCXVuc2lnbmVkIHNlbGVjdG9yOwogCi0JcmV0dXJuIHdtODMxeF9hbGl2ZV9sZG9fc2V0X3ZvbHRhZ2VfaW50KHJkZXYsIHJlZywgdVYsIHVWKTsKKwlyZXR1cm4gd204MzF4X2FsaXZlX2xkb19zZXRfdm9sdGFnZV9pbnQocmRldiwgcmVnLCB1ViwgdVYsICZzZWxlY3Rvcik7CiB9CiAKLXN0YXRpYyBpbnQgd204MzF4X2FsaXZlX2xkb19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3N0YXRpYyBpbnQgd204MzF4X2FsaXZlX2xkb19nZXRfdm9sdGFnZV9zZWwoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7CiAJc3RydWN0IHdtODMxeF9sZG8gKmxkbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJc3RydWN0IHdtODMxeCAqd204MzF4ID0gbGRvLT53bTgzMXg7CkBAIC03MTQsNyArNzMxLDcgQEAKIAogCXJldCAmPSBXTTgzMVhfTERPMTFfT05fVlNFTF9NQVNLOwogCi0JcmV0dXJuIHdtODMxeF9hbGl2ZV9sZG9fbGlzdF92b2x0YWdlKHJkZXYsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB3bTgzMXhfYWxpdmVfbGRvX2dldF9zdGF0dXMoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCkBAIC03MzYsNyArNzUzLDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHdtODMxeF9hbGl2ZV9sZG9fb3BzID0gewogCS5saXN0X3ZvbHRhZ2UgPSB3bTgzMXhfYWxpdmVfbGRvX2xpc3Rfdm9sdGFnZSwKLQkuZ2V0X3ZvbHRhZ2UgPSB3bTgzMXhfYWxpdmVfbGRvX2dldF92b2x0YWdlLAorCS5nZXRfdm9sdGFnZV9zZWwgPSB3bTgzMXhfYWxpdmVfbGRvX2dldF92b2x0YWdlX3NlbCwKIAkuc2V0X3ZvbHRhZ2UgPSB3bTgzMXhfYWxpdmVfbGRvX3NldF92b2x0YWdlLAogCS5zZXRfc3VzcGVuZF92b2x0YWdlID0gd204MzF4X2FsaXZlX2xkb19zZXRfc3VzcGVuZF92b2x0YWdlLAogCS5nZXRfc3RhdHVzID0gd204MzF4X2FsaXZlX2xkb19nZXRfc3RhdHVzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCmluZGV4IGZlNGI4YTguLjFiY2IyMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMKQEAgLTM2MCw3ICszNjAsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX2lzaW5rX3NldF9mbGFzaCk7CiAKIHN0YXRpYyBpbnQgd204MzUwX2RjZGNfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCBtaW5fdVYsCi0JaW50IG1heF91VikKKwkJCQkgICBpbnQgbWF4X3VWLCB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlpbnQgdm9sdF9yZWcsIGRjZGMgPSByZGV2X2dldF9pZChyZGV2KSwgbVYsCkBAIC0zOTcsMTcgKzM5NywxOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkqc2VsZWN0b3IgPSBtVjsKKwogCS8qIGFsbCBEQ0RDcyBoYXZlIHNhbWUgbVYgYml0cyAqLwogCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIHZvbHRfcmVnKSAmIH5XTTgzNTBfREMxX1ZTRUxfTUFTSzsKIAl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgdm9sdF9yZWcsIHZhbCB8IG1WKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bTgzNTBfZGNkY19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3N0YXRpYyBpbnQgd204MzUwX2RjZGNfZ2V0X3ZvbHRhZ2Vfc2VsKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewogCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJaW50IHZvbHRfcmVnLCBkY2RjID0gcmRldl9nZXRfaWQocmRldik7Ci0JdTE2IHZhbDsKIAogCXN3aXRjaCAoZGNkYykgewogCWNhc2UgV004MzUwX0RDRENfMToKQEAgLTQyOSw4ICs0MzAsNyBAQAogCX0KIAogCS8qIGFsbCBEQ0RDcyBoYXZlIHNhbWUgbVYgYml0cyAqLwotCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIHZvbHRfcmVnKSAmIFdNODM1MF9EQzFfVlNFTF9NQVNLOwotCXJldHVybiB3bTgzNTBfZGNkY192YWxfdG9fbXZvbHRzKHZhbCkgKiAxMDAwOworCXJldHVybiB3bTgzNTBfcmVnX3JlYWQod204MzUwLCB2b2x0X3JlZykgJiBXTTgzNTBfREMxX1ZTRUxfTUFTSzsKIH0KIAogc3RhdGljIGludCB3bTgzNTBfZGNkY19saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCkBAIC03NTQsNyArNzU0LDcgQEAKIH0KIAogc3RhdGljIGludCB3bTgzNTBfbGRvX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgbWluX3VWLAotCWludCBtYXhfdVYpCisJCQkJICBpbnQgbWF4X3VWLCB1bnNpZ25lZCAqc2VsZWN0b3IpCiB7CiAJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlpbnQgdm9sdF9yZWcsIGxkbyA9IHJkZXZfZ2V0X2lkKHJkZXYpLCBtViwgbWluX21WID0gbWluX3VWIC8gMTAwMCwKQEAgLTc5NywxNyArNzk3LDE4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCSpzZWxlY3RvciA9IG1WOworCiAJLyogYWxsIExET3MgaGF2ZSBzYW1lIG1WIGJpdHMgKi8KIAl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCB2b2x0X3JlZykgJiB+V004MzUwX0xETzFfVlNFTF9NQVNLOwogCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCB2b2x0X3JlZywgdmFsIHwgbVYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdtODM1MF9sZG9fZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCitzdGF0aWMgaW50IHdtODM1MF9sZG9fZ2V0X3ZvbHRhZ2Vfc2VsKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewogCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJaW50IHZvbHRfcmVnLCBsZG8gPSByZGV2X2dldF9pZChyZGV2KTsKLQl1MTYgdmFsOwogCiAJc3dpdGNoIChsZG8pIHsKIAljYXNlIFdNODM1MF9MRE9fMToKQEAgLTgyNyw4ICs4MjgsNyBAQAogCX0KIAogCS8qIGFsbCBMRE9zIGhhdmUgc2FtZSBtViBiaXRzICovCi0JdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgdm9sdF9yZWcpICYgV004MzUwX0xETzFfVlNFTF9NQVNLOwotCXJldHVybiB3bTgzNTBfbGRvX3ZhbF90b19tdm9sdHModmFsKSAqIDEwMDA7CisJcmV0dXJuIHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIHZvbHRfcmVnKSAmIFdNODM1MF9MRE8xX1ZTRUxfTUFTSzsKIH0KIAogc3RhdGljIGludCB3bTgzNTBfbGRvX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKQEAgLTEyMjUsNyArMTIyNSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB3bTgzNTBfZGNkY19vcHMgPSB7CiAJLnNldF92b2x0YWdlID0gd204MzUwX2RjZGNfc2V0X3ZvbHRhZ2UsCi0JLmdldF92b2x0YWdlID0gd204MzUwX2RjZGNfZ2V0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlX3NlbCA9IHdtODM1MF9kY2RjX2dldF92b2x0YWdlX3NlbCwKIAkubGlzdF92b2x0YWdlID0gd204MzUwX2RjZGNfbGlzdF92b2x0YWdlLAogCS5lbmFibGUgPSB3bTgzNTBfZGNkY19lbmFibGUsCiAJLmRpc2FibGUgPSB3bTgzNTBfZGNkY19kaXNhYmxlLApAQCAtMTI0OSw3ICsxMjQ5LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHdtODM1MF9sZG9fb3BzID0gewogCS5zZXRfdm9sdGFnZSA9IHdtODM1MF9sZG9fc2V0X3ZvbHRhZ2UsCi0JLmdldF92b2x0YWdlID0gd204MzUwX2xkb19nZXRfdm9sdGFnZSwKKwkuZ2V0X3ZvbHRhZ2Vfc2VsID0gd204MzUwX2xkb19nZXRfdm9sdGFnZV9zZWwsCiAJLmxpc3Rfdm9sdGFnZSA9IHdtODM1MF9sZG9fbGlzdF92b2x0YWdlLAogCS5lbmFibGUgPSB3bTgzNTBfbGRvX2VuYWJsZSwKIAkuZGlzYWJsZSA9IHdtODM1MF9sZG9fZGlzYWJsZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODQwMC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODQwMC1yZWd1bGF0b3IuYwppbmRleCA5MjRjN2ViLi5iNDJkMDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTg0MDAtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204NDAwLXJlZ3VsYXRvci5jCkBAIC02Nyw3ICs2Nyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgd204NDAwX2xkb19zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2LAotCQkJCSAgaW50IG1pbl91ViwgaW50IG1heF91VikKKwkJCQkgIGludCBtaW5fdVYsIGludCBtYXhfdVYsIHVuc2lnbmVkICpzZWxlY3RvcikKIHsKIAlzdHJ1Y3Qgd204NDAwICp3bTg0MDAgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CiAJdTE2IHZhbDsKQEAgLTkzLDYgKzkzLDggQEAKIAkJdmFsICs9IDB4ZjsKIAl9CiAKKwkqc2VsZWN0b3IgPSB2YWw7CisKIAlyZXR1cm4gd204NDAwX3NldF9iaXRzKHdtODQwMCwgV004NDAwX0xETzFfQ09OVFJPTCArIHJkZXZfZ2V0X2lkKGRldiksCiAJCQkgICAgICAgV004NDAwX0xETzFfVlNFTF9NQVNLLCB2YWwpOwogfQpAQCAtMTU2LDcgKzE1OCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgd204NDAwX2RjZGNfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKLQkJCQkgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJICAgaW50IG1pbl91ViwgaW50IG1heF91ViwgdW5zaWduZWQgKnNlbGVjdG9yKQogewogCXN0cnVjdCB3bTg0MDAgKndtODQwMCA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1MTYgdmFsOwpAQCAtMTcxLDYgKzE3Myw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCUJVR19PTig4NTAwMDAgKyAoMjUwMDAgKiB2YWwpIDwgbWluX3VWKTsKIAorCSpzZWxlY3RvciA9IHZhbDsKKwogCXJldHVybiB3bTg0MDBfc2V0X2JpdHMod204NDAwLCBXTTg0MDBfRENEQzFfQ09OVFJPTF8xICsgb2Zmc2V0LAogCQkJICAgICAgIFdNODQwMF9EQzFfVlNFTF9NQVNLLCB2YWwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204OTk0LXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204OTk0LXJlZ3VsYXRvci5jCmluZGV4IDAzNzEzYmMuLjM1YjI5NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODk5NC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTg5OTQtcmVndWxhdG9yLmMKQEAgLTg2LDcgKzg2LDcgQEAKIAlyZXR1cm4gKHNlbGVjdG9yICogMTAwMDAwKSArIDI0MDAwMDA7CiB9CiAKLXN0YXRpYyBpbnQgd204OTk0X2xkbzFfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCitzdGF0aWMgaW50IHdtODk5NF9sZG8xX2dldF92b2x0YWdlX3NlbChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3Qgd204OTk0X2xkbyAqbGRvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlpbnQgdmFsOwpAQCAtOTUsMTMgKzk1LDExIEBACiAJaWYgKHZhbCA8IDApCiAJCXJldHVybiB2YWw7CiAKLQl2YWwgPSAodmFsICYgV004OTk0X0xETzFfVlNFTF9NQVNLKSA+PiBXTTg5OTRfTERPMV9WU0VMX1NISUZUOwotCi0JcmV0dXJuIHdtODk5NF9sZG8xX2xpc3Rfdm9sdGFnZShyZGV2LCB2YWwpOworCXJldHVybiAodmFsICYgV004OTk0X0xETzFfVlNFTF9NQVNLKSA+PiBXTTg5OTRfTERPMV9WU0VMX1NISUZUOwogfQogCiBzdGF0aWMgaW50IHdtODk5NF9sZG8xX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAotCQkJCSAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCisJCQkJICAgaW50IG1pbl91ViwgaW50IG1heF91ViwgdW5zaWduZWQgKnMpCiB7CiAJc3RydWN0IHdtODk5NF9sZG8gKmxkbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJaW50IHNlbGVjdG9yLCB2OwpAQCAtMTExLDYgKzEwOSw3IEBACiAJaWYgKHYgPCAwIHx8IHYgPiBtYXhfdVYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJKnMgPSBzZWxlY3RvcjsKIAlzZWxlY3RvciA8PD0gV004OTk0X0xETzFfVlNFTF9TSElGVDsKIAogCXJldHVybiB3bTg5OTRfc2V0X2JpdHMobGRvLT53bTg5OTQsIFdNODk5NF9MRE9fMSwKQEAgLTEyNCwyMCArMTIzLDI5IEBACiAJLmVuYWJsZV90aW1lID0gd204OTk0X2xkb19lbmFibGVfdGltZSwKIAogCS5saXN0X3ZvbHRhZ2UgPSB3bTg5OTRfbGRvMV9saXN0X3ZvbHRhZ2UsCi0JLmdldF92b2x0YWdlID0gd204OTk0X2xkbzFfZ2V0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlX3NlbCA9IHdtODk5NF9sZG8xX2dldF92b2x0YWdlX3NlbCwKIAkuc2V0X3ZvbHRhZ2UgPSB3bTg5OTRfbGRvMV9zZXRfdm9sdGFnZSwKIH07CiAKIHN0YXRpYyBpbnQgd204OTk0X2xkbzJfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAogCQkJCSAgICB1bnNpZ25lZCBpbnQgc2VsZWN0b3IpCiB7CisJc3RydWN0IHdtODk5NF9sZG8gKmxkbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisKIAlpZiAoc2VsZWN0b3IgPiBXTTg5OTRfTERPMl9NQVhfU0VMRUNUT1IpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIChzZWxlY3RvciAqIDEwMDAwMCkgKyA5MDAwMDA7CisJc3dpdGNoIChsZG8tPndtODk5NC0+dHlwZSkgeworCWNhc2UgV004OTk0OgorCQlyZXR1cm4gKHNlbGVjdG9yICogMTAwMDAwKSArIDkwMDAwMDsKKwljYXNlIFdNODk1ODoKKwkJcmV0dXJuIChzZWxlY3RvciAqIDEwMDAwMCkgKyAxMDAwMDAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KIH0KIAotc3RhdGljIGludCB3bTg5OTRfbGRvMl9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3N0YXRpYyBpbnQgd204OTk0X2xkbzJfZ2V0X3ZvbHRhZ2Vfc2VsKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewogCXN0cnVjdCB3bTg5OTRfbGRvICpsZG8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCWludCB2YWw7CkBAIC0xNDYsMjIgKzE1NCwzMSBAQAogCWlmICh2YWwgPCAwKQogCQlyZXR1cm4gdmFsOwogCi0JdmFsID0gKHZhbCAmIFdNODk5NF9MRE8yX1ZTRUxfTUFTSykgPj4gV004OTk0X0xETzJfVlNFTF9TSElGVDsKLQotCXJldHVybiB3bTg5OTRfbGRvMl9saXN0X3ZvbHRhZ2UocmRldiwgdmFsKTsKKwlyZXR1cm4gKHZhbCAmIFdNODk5NF9MRE8yX1ZTRUxfTUFTSykgPj4gV004OTk0X0xETzJfVlNFTF9TSElGVDsKIH0KIAogc3RhdGljIGludCB3bTg5OTRfbGRvMl9zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKLQkJCQkgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQorCQkJCSAgIGludCBtaW5fdVYsIGludCBtYXhfdVYsIHVuc2lnbmVkICpzKQogewogCXN0cnVjdCB3bTg5OTRfbGRvICpsZG8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCWludCBzZWxlY3RvciwgdjsKIAotCXNlbGVjdG9yID0gKG1pbl91ViAtIDkwMDAwMCkgLyAxMDAwMDA7CisJc3dpdGNoIChsZG8tPndtODk5NC0+dHlwZSkgeworCWNhc2UgV004OTk0OgorCQlzZWxlY3RvciA9IChtaW5fdVYgLSA5MDAwMDApIC8gMTAwMDAwOworCQlicmVhazsKKwljYXNlIFdNODk1ODoKKwkJc2VsZWN0b3IgPSAobWluX3VWIC0gMTAwMDAwMCkgLyAxMDAwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCXYgPSB3bTg5OTRfbGRvMl9saXN0X3ZvbHRhZ2UocmRldiwgc2VsZWN0b3IpOwogCWlmICh2IDwgMCB8fCB2ID4gbWF4X3VWKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCSpzID0gc2VsZWN0b3I7CiAJc2VsZWN0b3IgPDw9IFdNODk5NF9MRE8yX1ZTRUxfU0hJRlQ7CiAKIAlyZXR1cm4gd204OTk0X3NldF9iaXRzKGxkby0+d204OTk0LCBXTTg5OTRfTERPXzIsCkBAIC0xNzUsNyArMTkyLDcgQEAKIAkuZW5hYmxlX3RpbWUgPSB3bTg5OTRfbGRvX2VuYWJsZV90aW1lLAogCiAJLmxpc3Rfdm9sdGFnZSA9IHdtODk5NF9sZG8yX2xpc3Rfdm9sdGFnZSwKLQkuZ2V0X3ZvbHRhZ2UgPSB3bTg5OTRfbGRvMl9nZXRfdm9sdGFnZSwKKwkuZ2V0X3ZvbHRhZ2Vfc2VsID0gd204OTk0X2xkbzJfZ2V0X3ZvbHRhZ2Vfc2VsLAogCS5zZXRfdm9sdGFnZSA9IHdtODk5NF9sZG8yX3NldF92b2x0YWdlLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvY2xhc3MuYyBiL2RyaXZlcnMvcnRjL2NsYXNzLmMKaW5kZXggZTY1MzljYi4uOTU4M2NiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvY2xhc3MuYworKysgYi9kcml2ZXJzL3J0Yy9jbGFzcy5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSAicnRjLWNvcmUuaCIKIApAQCAtMTUyLDYgKzE1MywxOCBAQAogCXNwaW5fbG9ja19pbml0KCZydGMtPmlycV90YXNrX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJ0Yy0+aXJxX3F1ZXVlKTsKIAorCS8qIEluaXQgdGltZXJxdWV1ZSAqLworCXRpbWVycXVldWVfaW5pdF9oZWFkKCZydGMtPnRpbWVycXVldWUpOworCUlOSVRfV09SSygmcnRjLT5pcnF3b3JrLCBydGNfdGltZXJfZG9fd29yayk7CisJLyogSW5pdCBhaWUgdGltZXIgKi8KKwlydGNfdGltZXJfaW5pdCgmcnRjLT5haWVfdGltZXIsIHJ0Y19haWVfdXBkYXRlX2lycSwgKHZvaWQgKilydGMpOworCS8qIEluaXQgdWllIHRpbWVyICovCisJcnRjX3RpbWVyX2luaXQoJnJ0Yy0+dWllX3J0Y3RpbWVyLCBydGNfdWllX3VwZGF0ZV9pcnEsICh2b2lkICopcnRjKTsKKwkvKiBJbml0IHBpZSB0aW1lciAqLworCWhydGltZXJfaW5pdCgmcnRjLT5waWVfdGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CisJcnRjLT5waWVfdGltZXIuZnVuY3Rpb24gPSBydGNfcGllX3VwZGF0ZV9pcnE7CisJcnRjLT5waWVfZW5hYmxlZCA9IDA7CisKIAlzdHJsY3B5KHJ0Yy0+bmFtZSwgbmFtZSwgUlRDX0RFVklDRV9OQU1FX1NJWkUpOwogCWRldl9zZXRfbmFtZSgmcnRjLT5kZXYsICJydGMlZCIsIGlkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwppbmRleCBhMGM4MTYyLi45MDM4NGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwpAQCAtMTQsNiArMTQsMjEgQEAKICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworc3RhdGljIGludCBfX3J0Y19yZWFkX3RpbWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlpbnQgZXJyOworCWlmICghcnRjLT5vcHMpCisJCWVyciA9IC1FTk9ERVY7CisJZWxzZSBpZiAoIXJ0Yy0+b3BzLT5yZWFkX3RpbWUpCisJCWVyciA9IC1FSU5WQUw7CisJZWxzZSB7CisJCW1lbXNldCh0bSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOworCQllcnIgPSBydGMtPm9wcy0+cmVhZF90aW1lKHJ0Yy0+ZGV2LnBhcmVudCwgdG0pOworCX0KKwlyZXR1cm4gZXJyOworfQogCiBpbnQgcnRjX3JlYWRfdGltZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewpAQCAtMjMsMTUgKzM4LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKCFydGMtPm9wcykKLQkJZXJyID0gLUVOT0RFVjsKLQllbHNlIGlmICghcnRjLT5vcHMtPnJlYWRfdGltZSkKLQkJZXJyID0gLUVJTlZBTDsKLQllbHNlIHsKLQkJbWVtc2V0KHRtLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSk7Ci0JCWVyciA9IHJ0Yy0+b3BzLT5yZWFkX3RpbWUocnRjLT5kZXYucGFyZW50LCB0bSk7Ci0JfQotCisJZXJyID0gX19ydGNfcmVhZF90aW1lKHJ0YywgdG0pOwogCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTEwNiwxODkgKzExMyw1NSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX3NldF9tbXNzKTsKIAotc3RhdGljIGludCBydGNfcmVhZF9hbGFybV9pbnRlcm5hbChzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxhcm0pCitpbnQgcnRjX3JlYWRfYWxhcm0oc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQogewogCWludCBlcnI7CiAKIAllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnJ0Yy0+b3BzX2xvY2spOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0KLQlpZiAocnRjLT5vcHMgPT0gTlVMTCkKLQkJZXJyID0gLUVOT0RFVjsKLQllbHNlIGlmICghcnRjLT5vcHMtPnJlYWRfYWxhcm0pCi0JCWVyciA9IC1FSU5WQUw7Ci0JZWxzZSB7Ci0JCW1lbXNldChhbGFybSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfd2thbHJtKSk7Ci0JCWVyciA9IHJ0Yy0+b3BzLT5yZWFkX2FsYXJtKHJ0Yy0+ZGV2LnBhcmVudCwgYWxhcm0pOwotCX0KLQorCWFsYXJtLT5lbmFibGVkID0gcnRjLT5haWVfdGltZXIuZW5hYmxlZDsKKwlpZiAoYWxhcm0tPmVuYWJsZWQpCisJCWFsYXJtLT50aW1lID0gcnRjX2t0aW1lX3RvX3RtKHJ0Yy0+YWllX3RpbWVyLm5vZGUuZXhwaXJlcyk7CiAJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKLQlyZXR1cm4gZXJyOwotfQogCi1pbnQgcnRjX3JlYWRfYWxhcm0oc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHJ0Y190aW1lIGJlZm9yZSwgbm93OwotCWludCBmaXJzdF90aW1lID0gMTsKLQl1bnNpZ25lZCBsb25nIHRfbm93LCB0X2FsbTsKLQllbnVtIHsgbm9uZSwgZGF5LCBtb250aCwgeWVhciB9IG1pc3NpbmcgPSBub25lOwotCXVuc2lnbmVkIGRheXM7Ci0KLQkvKiBUaGUgbG93ZXIgbGV2ZWwgUlRDIGRyaXZlciBtYXkgcmV0dXJuIC0xIGluIHNvbWUgZmllbGRzLAotCSAqIGNyZWF0aW5nIGludmFsaWQgYWxhcm0tPnRpbWUgdmFsdWVzLCBmb3IgcmVhc29ucyBsaWtlOgotCSAqCi0JICogICAtIFRoZSBoYXJkd2FyZSBtYXkgbm90IGJlIGNhcGFibGUgb2YgZmlsbGluZyB0aGVtIGluOwotCSAqICAgICBtYW55IGFsYXJtcyBtYXRjaCBvbmx5IG9uIHRpbWUtb2YtZGF5IGZpZWxkcywgbm90Ci0JICogICAgIGRheS9tb250aC95ZWFyIGNhbGVuZGFyIGRhdGEuCi0JICoKLQkgKiAgIC0gU29tZSBoYXJkd2FyZSB1c2VzIGlsbGVnYWwgdmFsdWVzIGFzICJ3aWxkY2FyZCIgbWF0Y2gKLQkgKiAgICAgdmFsdWVzLCB3aGljaCBub24tTGludXggZmlybXdhcmUgKGxpa2UgYSBCSU9TKSBtYXkgdHJ5Ci0JICogICAgIHRvIHNldCB1cCBhcyBlLmcuICJhbGFybSAxNSBtaW51dGVzIGFmdGVyIGVhY2ggaG91ciIuCi0JICogICAgIExpbnV4IHVzZXMgb25seSBvbmVzaG90IGFsYXJtcy4KLQkgKgotCSAqIFdoZW4gd2Ugc2VlIHRoYXQgaGVyZSwgd2UgZGVhbCB3aXRoIGl0IGJ5IHVzaW5nIHZhbHVlcyBmcm9tCi0JICogYSBjdXJyZW50IFJUQyB0aW1lc3RhbXAgZm9yIGFueSBtaXNzaW5nICgtMSkgdmFsdWVzLiAgVGhlCi0JICogUlRDIGRyaXZlciBwcmV2ZW50cyAicGVyaW9kaWMgYWxhcm0iIG1vZGVzLgotCSAqCi0JICogQnV0IHRoaXMgY2FuIGJlIHJhY2V5LCBiZWNhdXNlIHNvbWUgZmllbGRzIG9mIHRoZSBSVEMgdGltZXN0YW1wCi0JICogbWF5IGhhdmUgd3JhcHBlZCBpbiB0aGUgaW50ZXJ2YWwgc2luY2Ugd2UgcmVhZCB0aGUgUlRDIGFsYXJtLAotCSAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gdXMgaW5zZXJ0aW5nIGluY29uc2lzdGVudCB2YWx1ZXMgaW4gcGxhY2UKLQkgKiBvZiB0aGUgLTEgZmllbGRzLgotCSAqCi0JICogUmVhZGluZyB0aGUgYWxhcm0gYW5kIHRpbWVzdGFtcCBpbiB0aGUgcmV2ZXJzZSBzZXF1ZW5jZQotCSAqIHdvdWxkIGhhdmUgdGhlIHNhbWUgcmFjZSBjb25kaXRpb24sIGFuZCBub3Qgc29sdmUgdGhlIGlzc3VlLgotCSAqCi0JICogU28sIHdlIG11c3QgZmlyc3QgcmVhZCB0aGUgUlRDIHRpbWVzdGFtcCwKLQkgKiB0aGVuIHJlYWQgdGhlIFJUQyBhbGFybSB2YWx1ZSwKLQkgKiBhbmQgdGhlbiByZWFkIGEgc2Vjb25kIFJUQyB0aW1lc3RhbXAuCi0JICoKLQkgKiBJZiBhbnkgZmllbGRzIG9mIHRoZSBzZWNvbmQgdGltZXN0YW1wIGhhdmUgY2hhbmdlZAotCSAqIHdoZW4gY29tcGFyZWQgd2l0aCB0aGUgZmlyc3QgdGltZXN0YW1wLCB0aGVuIHdlIGtub3cKLQkgKiBvdXIgdGltZXN0YW1wIG1heSBiZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGF0IHVzZWQgYnkKLQkgKiB0aGUgbG93LWxldmVsIHJ0Y19yZWFkX2FsYXJtX2ludGVybmFsKCkgZnVuY3Rpb24uCi0JICoKLQkgKiBTbywgd2hlbiB0aGUgdHdvIHRpbWVzdGFtcHMgZGlzYWdyZWUsIHdlIGp1c3QgbG9vcCBhbmQgZG8KLQkgKiB0aGUgcHJvY2VzcyBhZ2FpbiB0byBnZXQgYSBmdWxseSBjb25zaXN0ZW50IHNldCBvZiB2YWx1ZXMuCi0JICoKLQkgKiBUaGlzIGNvdWxkIGFsbCBpbnN0ZWFkIGJlIGRvbmUgaW4gdGhlIGxvd2VyIGxldmVsIGRyaXZlciwKLQkgKiBidXQgc2luY2UgbW9yZSB0aGFuIG9uZSBsb3dlciBsZXZlbCBSVEMgaW1wbGVtZW50YXRpb24gbmVlZHMgaXQsCi0JICogdGhlbiBpdCdzIHByb2JhYmx5IGJlc3QgYmVzdCB0byBkbyBpdCBoZXJlIGluc3RlYWQgb2YgdGhlcmUuLgotCSAqLwotCi0JLyogR2V0IHRoZSAiYmVmb3JlIiB0aW1lc3RhbXAgKi8KLQllcnIgPSBydGNfcmVhZF90aW1lKHJ0YywgJmJlZm9yZSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JZG8gewotCQlpZiAoIWZpcnN0X3RpbWUpCi0JCQltZW1jcHkoJmJlZm9yZSwgJm5vdywgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOwotCQlmaXJzdF90aW1lID0gMDsKLQotCQkvKiBnZXQgdGhlIFJUQyBhbGFybSB2YWx1ZXMsIHdoaWNoIG1heSBiZSBpbmNvbXBsZXRlICovCi0JCWVyciA9IHJ0Y19yZWFkX2FsYXJtX2ludGVybmFsKHJ0YywgYWxhcm0pOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJaWYgKCFhbGFybS0+ZW5hYmxlZCkKLQkJCXJldHVybiAwOwotCi0JCS8qIGZ1bGwtZnVuY3Rpb24gUlRDcyB3b24ndCBoYXZlIHN1Y2ggbWlzc2luZyBmaWVsZHMgKi8KLQkJaWYgKHJ0Y192YWxpZF90bSgmYWxhcm0tPnRpbWUpID09IDApCi0JCQlyZXR1cm4gMDsKLQotCQkvKiBnZXQgdGhlICJhZnRlciIgdGltZXN0YW1wLCB0byBkZXRlY3Qgd3JhcHBlZCBmaWVsZHMgKi8KLQkJZXJyID0gcnRjX3JlYWRfdGltZShydGMsICZub3cpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0KLQkJLyogbm90ZSB0aGF0IHRtX3NlYyBpcyBhICJkb24ndCBjYXJlIiB2YWx1ZSBoZXJlOiAqLwotCX0gd2hpbGUgKCAgIGJlZm9yZS50bV9taW4gICAhPSBub3cudG1fbWluCi0JCSB8fCBiZWZvcmUudG1faG91ciAgIT0gbm93LnRtX2hvdXIKLQkJIHx8IGJlZm9yZS50bV9tb24gICAhPSBub3cudG1fbW9uCi0JCSB8fCBiZWZvcmUudG1feWVhciAgIT0gbm93LnRtX3llYXIpOwotCi0JLyogRmlsbCBpbiB0aGUgbWlzc2luZyBhbGFybSBmaWVsZHMgdXNpbmcgdGhlIHRpbWVzdGFtcDsgd2UKLQkgKiBrbm93IHRoZXJlJ3MgYXQgbGVhc3Qgb25lIHNpbmNlIGFsYXJtLT50aW1lIGlzIGludmFsaWQuCi0JICovCi0JaWYgKGFsYXJtLT50aW1lLnRtX3NlYyA9PSAtMSkKLQkJYWxhcm0tPnRpbWUudG1fc2VjID0gbm93LnRtX3NlYzsKLQlpZiAoYWxhcm0tPnRpbWUudG1fbWluID09IC0xKQotCQlhbGFybS0+dGltZS50bV9taW4gPSBub3cudG1fbWluOwotCWlmIChhbGFybS0+dGltZS50bV9ob3VyID09IC0xKQotCQlhbGFybS0+dGltZS50bV9ob3VyID0gbm93LnRtX2hvdXI7Ci0KLQkvKiBGb3Igc2ltcGxpY2l0eSwgb25seSBzdXBwb3J0IGRhdGUgcm9sbG92ZXIgZm9yIG5vdyAqLwotCWlmIChhbGFybS0+dGltZS50bV9tZGF5ID09IC0xKSB7Ci0JCWFsYXJtLT50aW1lLnRtX21kYXkgPSBub3cudG1fbWRheTsKLQkJbWlzc2luZyA9IGRheTsKLQl9Ci0JaWYgKGFsYXJtLT50aW1lLnRtX21vbiA9PSAtMSkgewotCQlhbGFybS0+dGltZS50bV9tb24gPSBub3cudG1fbW9uOwotCQlpZiAobWlzc2luZyA9PSBub25lKQotCQkJbWlzc2luZyA9IG1vbnRoOwotCX0KLQlpZiAoYWxhcm0tPnRpbWUudG1feWVhciA9PSAtMSkgewotCQlhbGFybS0+dGltZS50bV95ZWFyID0gbm93LnRtX3llYXI7Ci0JCWlmIChtaXNzaW5nID09IG5vbmUpCi0JCQltaXNzaW5nID0geWVhcjsKLQl9Ci0KLQkvKiB3aXRoIGx1Y2ssIG5vIHJvbGxvdmVyIGlzIG5lZWRlZCAqLwotCXJ0Y190bV90b190aW1lKCZub3csICZ0X25vdyk7Ci0JcnRjX3RtX3RvX3RpbWUoJmFsYXJtLT50aW1lLCAmdF9hbG0pOwotCWlmICh0X25vdyA8IHRfYWxtKQotCQlnb3RvIGRvbmU7Ci0KLQlzd2l0Y2ggKG1pc3NpbmcpIHsKLQotCS8qIDI0IGhvdXIgcm9sbG92ZXIgLi4uIGlmIGl0J3Mgbm93IDEwYW0gTW9uZGF5LCBhbiBhbGFybSB0aGF0Ci0JICogdGhhdCB3aWxsIHRyaWdnZXIgYXQgNWFtIHdpbGwgZG8gc28gYXQgNWFtIFR1ZXNkYXksIHdoaWNoCi0JICogY291bGQgYWxzbyBiZSBpbiB0aGUgbmV4dCBtb250aCBvciB5ZWFyLiAgVGhpcyBpcyBhIGNvbW1vbgotCSAqIGNhc2UsIGVzcGVjaWFsbHkgZm9yIFBDcy4KLQkgKi8KLQljYXNlIGRheToKLQkJZGV2X2RiZygmcnRjLT5kZXYsICJhbGFybSByb2xsb3ZlcjogJXNcbiIsICJkYXkiKTsKLQkJdF9hbG0gKz0gMjQgKiA2MCAqIDYwOwotCQlydGNfdGltZV90b190bSh0X2FsbSwgJmFsYXJtLT50aW1lKTsKLQkJYnJlYWs7Ci0KLQkvKiBNb250aCByb2xsb3ZlciAuLi4gaWYgaXQncyB0aGUgMzF0aCwgYW4gYWxhcm0gb24gdGhlIDNyZCB3aWxsCi0JICogYmUgbmV4dCBtb250aC4gIEFuIGFsYXJtIG1hdGNoaW5nIG9uIHRoZSAzMHRoLCAyOXRoLCBvciAyOHRoCi0JICogbWF5IGVuZCB1cCBpbiB0aGUgbW9udGggYWZ0ZXIgdGhhdCEgIE1hbnkgbmV3ZXIgUENzIHN1cHBvcnQKLQkgKiB0aGlzIHR5cGUgb2YgYWxhcm0uCi0JICovCi0JY2FzZSBtb250aDoKLQkJZGV2X2RiZygmcnRjLT5kZXYsICJhbGFybSByb2xsb3ZlcjogJXNcbiIsICJtb250aCIpOwotCQlkbyB7Ci0JCQlpZiAoYWxhcm0tPnRpbWUudG1fbW9uIDwgMTEpCi0JCQkJYWxhcm0tPnRpbWUudG1fbW9uKys7Ci0JCQllbHNlIHsKLQkJCQlhbGFybS0+dGltZS50bV9tb24gPSAwOwotCQkJCWFsYXJtLT50aW1lLnRtX3llYXIrKzsKLQkJCX0KLQkJCWRheXMgPSBydGNfbW9udGhfZGF5cyhhbGFybS0+dGltZS50bV9tb24sCi0JCQkJCWFsYXJtLT50aW1lLnRtX3llYXIpOwotCQl9IHdoaWxlIChkYXlzIDwgYWxhcm0tPnRpbWUudG1fbWRheSk7Ci0JCWJyZWFrOwotCi0JLyogWWVhciByb2xsb3ZlciAuLi4gZWFzeSBleGNlcHQgZm9yIGxlYXAgeWVhcnMhICovCi0JY2FzZSB5ZWFyOgotCQlkZXZfZGJnKCZydGMtPmRldiwgImFsYXJtIHJvbGxvdmVyOiAlc1xuIiwgInllYXIiKTsKLQkJZG8gewotCQkJYWxhcm0tPnRpbWUudG1feWVhcisrOwotCQl9IHdoaWxlIChydGNfdmFsaWRfdG0oJmFsYXJtLT50aW1lKSAhPSAwKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlkZXZfd2FybigmcnRjLT5kZXYsICJhbGFybSByb2xsb3ZlciBub3QgaGFuZGxlZFxuIik7Ci0JfQotCi1kb25lOgogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX3JlYWRfYWxhcm0pOwogCitpbnQgX19ydGNfc2V0X2FsYXJtKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlzdHJ1Y3QgcnRjX3RpbWUgdG07CisJbG9uZyBub3csIHNjaGVkdWxlZDsKKwlpbnQgZXJyOworCisJZXJyID0gcnRjX3ZhbGlkX3RtKCZhbGFybS0+dGltZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlydGNfdG1fdG9fdGltZSgmYWxhcm0tPnRpbWUsICZzY2hlZHVsZWQpOworCisJLyogTWFrZSBzdXJlIHdlJ3JlIG5vdCBzZXR0aW5nIGFsYXJtcyBpbiB0aGUgcGFzdCAqLworCWVyciA9IF9fcnRjX3JlYWRfdGltZShydGMsICZ0bSk7CisJcnRjX3RtX3RvX3RpbWUoJnRtLCAmbm93KTsKKwlpZiAoc2NoZWR1bGVkIDw9IG5vdykKKwkJcmV0dXJuIC1FVElNRTsKKwkvKgorCSAqIFhYWCAtIFdlIGp1c3QgY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhlIGFsYXJtIHRpbWUgaXMgbm90CisJICogaW4gdGhlIHBhc3QsIGJ1dCB0aGVyZSBpcyBzdGlsbCBhIHJhY2Ugd2luZG93IHdoZXJlIGlmCisJICogdGhlIGlzIGFsYXJtIHNldCBmb3IgdGhlIG5leHQgc2Vjb25kIGFuZCB0aGUgc2Vjb25kIHRpY2tzCisJICogb3ZlciByaWdodCBoZXJlLCBiZWZvcmUgd2Ugc2V0IHRoZSBhbGFybS4KKwkgKi8KKworCWlmICghcnRjLT5vcHMpCisJCWVyciA9IC1FTk9ERVY7CisJZWxzZSBpZiAoIXJ0Yy0+b3BzLT5zZXRfYWxhcm0pCisJCWVyciA9IC1FSU5WQUw7CisJZWxzZQorCQllcnIgPSBydGMtPm9wcy0+c2V0X2FsYXJtKHJ0Yy0+ZGV2LnBhcmVudCwgYWxhcm0pOworCisJcmV0dXJuIGVycjsKK30KKwogaW50IHJ0Y19zZXRfYWxhcm0oc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQogewogCWludCBlcnI7CkBAIC0zMDAsMTYgKzE3MywxOCBAQAogCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcnRjLT5vcHNfbG9jayk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQotCWlmICghcnRjLT5vcHMpCi0JCWVyciA9IC1FTk9ERVY7Ci0JZWxzZSBpZiAoIXJ0Yy0+b3BzLT5zZXRfYWxhcm0pCi0JCWVyciA9IC1FSU5WQUw7Ci0JZWxzZQotCQllcnIgPSBydGMtPm9wcy0+c2V0X2FsYXJtKHJ0Yy0+ZGV2LnBhcmVudCwgYWxhcm0pOwotCisJaWYgKHJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQpIHsKKwkJcnRjX3RpbWVyX3JlbW92ZShydGMsICZydGMtPmFpZV90aW1lcik7CisJCXJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQgPSAwOworCX0KKwlydGMtPmFpZV90aW1lci5ub2RlLmV4cGlyZXMgPSBydGNfdG1fdG9fa3RpbWUoYWxhcm0tPnRpbWUpOworCXJ0Yy0+YWllX3RpbWVyLnBlcmlvZCA9IGt0aW1lX3NldCgwLCAwKTsKKwlpZiAoYWxhcm0tPmVuYWJsZWQpIHsKKwkJcnRjLT5haWVfdGltZXIuZW5hYmxlZCA9IDE7CisJCXJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgJnJ0Yy0+YWllX3RpbWVyKTsKKwl9CiAJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX3NldF9hbGFybSk7CiAKQEAgLTMxOSw2ICsxOTQsMTYgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisJaWYgKHJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQgIT0gZW5hYmxlZCkgeworCQlpZiAoZW5hYmxlZCkgeworCQkJcnRjLT5haWVfdGltZXIuZW5hYmxlZCA9IDE7CisJCQlydGNfdGltZXJfZW5xdWV1ZShydGMsICZydGMtPmFpZV90aW1lcik7CisJCX0gZWxzZSB7CisJCQlydGNfdGltZXJfcmVtb3ZlKHJ0YywgJnJ0Yy0+YWllX3RpbWVyKTsKKwkJCXJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQgPSAwOworCQl9CisJfQorCiAJaWYgKCFydGMtPm9wcykKIAkJZXJyID0gLUVOT0RFVjsKIAllbHNlIGlmICghcnRjLT5vcHMtPmFsYXJtX2lycV9lbmFibGUpCkBAIC0zMzcsMzggKzIyMiwxMTQgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0jaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTAotCWlmIChlbmFibGVkID09IDAgJiYgcnRjLT51aWVfaXJxX2FjdGl2ZSkgewotCQltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOwotCQlyZXR1cm4gcnRjX2Rldl91cGRhdGVfaXJxX2VuYWJsZV9lbXVsKHJ0YywgZW5hYmxlZCk7CisJLyogbWFrZSBzdXJlIHdlJ3JlIGNoYW5naW5nIHN0YXRlICovCisJaWYgKHJ0Yy0+dWllX3J0Y3RpbWVyLmVuYWJsZWQgPT0gZW5hYmxlZCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZW5hYmxlZCkgeworCQlzdHJ1Y3QgcnRjX3RpbWUgdG07CisJCWt0aW1lX3Qgbm93LCBvbmVzZWM7CisKKwkJX19ydGNfcmVhZF90aW1lKHJ0YywgJnRtKTsKKwkJb25lc2VjID0ga3RpbWVfc2V0KDEsIDApOworCQlub3cgPSBydGNfdG1fdG9fa3RpbWUodG0pOworCQlydGMtPnVpZV9ydGN0aW1lci5ub2RlLmV4cGlyZXMgPSBrdGltZV9hZGQobm93LCBvbmVzZWMpOworCQlydGMtPnVpZV9ydGN0aW1lci5wZXJpb2QgPSBrdGltZV9zZXQoMSwgMCk7CisJCXJ0Yy0+dWllX3J0Y3RpbWVyLmVuYWJsZWQgPSAxOworCQlydGNfdGltZXJfZW5xdWV1ZShydGMsICZydGMtPnVpZV9ydGN0aW1lcik7CisJfSBlbHNlIHsKKwkJcnRjX3RpbWVyX3JlbW92ZShydGMsICZydGMtPnVpZV9ydGN0aW1lcik7CisJCXJ0Yy0+dWllX3J0Y3RpbWVyLmVuYWJsZWQgPSAwOwogCX0KLSNlbmRpZgogCi0JaWYgKCFydGMtPm9wcykKLQkJZXJyID0gLUVOT0RFVjsKLQllbHNlIGlmICghcnRjLT5vcHMtPnVwZGF0ZV9pcnFfZW5hYmxlKQotCQllcnIgPSAtRUlOVkFMOwotCWVsc2UKLQkJZXJyID0gcnRjLT5vcHMtPnVwZGF0ZV9pcnFfZW5hYmxlKHJ0Yy0+ZGV2LnBhcmVudCwgZW5hYmxlZCk7Ci0KK291dDoKIAltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOwotCi0jaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTAotCS8qCi0JICogRW5hYmxlIGVtdWxhdGlvbiBpZiB0aGUgZHJpdmVyIGRpZCBub3QgcHJvdmlkZQotCSAqIHRoZSB1cGRhdGVfaXJxX2VuYWJsZSBmdW5jdGlvbiBwb2ludGVyIG9yIGlmIHJldHVybmVkCi0JICogLUVJTlZBTCB0byBzaWduYWwgdGhhdCBpdCBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGhvdXQKLQkgKiBpbnRlcnJ1cHRzIG9yIHRoYXQgYXJlIG5vdCBhdmFpbGFibGUgYXQgdGhlIG1vbWVudC4KLQkgKi8KLQlpZiAoZXJyID09IC1FSU5WQUwpCi0JCWVyciA9IHJ0Y19kZXZfdXBkYXRlX2lycV9lbmFibGVfZW11bChydGMsIGVuYWJsZWQpOwotI2VuZGlmCiAJcmV0dXJuIGVycjsKKwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX3VwZGF0ZV9pcnFfZW5hYmxlKTsKIAorCiAvKioKLSAqIHJ0Y191cGRhdGVfaXJxIC0gcmVwb3J0IFJUQyBwZXJpb2RpYywgYWxhcm0sIGFuZC9vciB1cGRhdGUgaXJxcworICogcnRjX2hhbmRsZV9sZWdhY3lfaXJxIC0gQUlFLCBVSUUgYW5kIFBJRSBldmVudCBob29rCisgKiBAcnRjOiBwb2ludGVyIHRvIHRoZSBydGMgZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbiBBSUUsIFVJRSBvciBQSUUgbW9kZSBpbnRlcnJ1cHQKKyAqIGhhcyBvY2N1cmVkIChvciBiZWVuIGVtdWxhdGVkKS4KKyAqCisgKiBUcmlnZ2VycyB0aGUgcmVnaXN0ZXJlZCBpcnFfdGFzayBmdW5jdGlvbiBjYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQgcnRjX2hhbmRsZV9sZWdhY3lfaXJxKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIGludCBudW0sIGludCBtb2RlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBtYXJrIG9uZSBpcnEgb2YgdGhlIGFwcHJvcHJpYXRlIG1vZGUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjLT5pcnFfbG9jaywgZmxhZ3MpOworCXJ0Yy0+aXJxX2RhdGEgPSAocnRjLT5pcnFfZGF0YSArIChudW0gPDwgOCkpIHwgKFJUQ19JUlFGfG1vZGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Yy0+aXJxX2xvY2ssIGZsYWdzKTsKKworCS8qIGNhbGwgdGhlIHRhc2sgZnVuYyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZydGMtPmlycV90YXNrX2xvY2ssIGZsYWdzKTsKKwlpZiAocnRjLT5pcnFfdGFzaykKKwkJcnRjLT5pcnFfdGFzay0+ZnVuYyhydGMtPmlycV90YXNrLT5wcml2YXRlX2RhdGEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Yy0+aXJxX3Rhc2tfbG9jaywgZmxhZ3MpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZydGMtPmlycV9xdWV1ZSk7CisJa2lsbF9mYXN5bmMoJnJ0Yy0+YXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKK30KKworCisvKioKKyAqIHJ0Y19haWVfdXBkYXRlX2lycSAtIEFJRSBtb2RlIHJ0Y3RpbWVyIGhvb2sKKyAqIEBwcml2YXRlOiBwb2ludGVyIHRvIHRoZSBydGNfZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbnMgaXMgY2FsbGVkIHdoZW4gdGhlIGFpZV90aW1lciBleHBpcmVzLgorICovCit2b2lkIHJ0Y19haWVfdXBkYXRlX2lycSh2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSAoc3RydWN0IHJ0Y19kZXZpY2UgKilwcml2YXRlOworCXJ0Y19oYW5kbGVfbGVnYWN5X2lycShydGMsIDEsIFJUQ19BRik7Cit9CisKKworLyoqCisgKiBydGNfdWllX3VwZGF0ZV9pcnEgLSBVSUUgbW9kZSBydGN0aW1lciBob29rCisgKiBAcHJpdmF0ZTogcG9pbnRlciB0byB0aGUgcnRjX2RldmljZQorICoKKyAqIFRoaXMgZnVuY3Rpb25zIGlzIGNhbGxlZCB3aGVuIHRoZSB1aWVfdGltZXIgZXhwaXJlcy4KKyAqLwordm9pZCBydGNfdWllX3VwZGF0ZV9pcnEodm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gKHN0cnVjdCBydGNfZGV2aWNlICopcHJpdmF0ZTsKKwlydGNfaGFuZGxlX2xlZ2FjeV9pcnEocnRjLCAxLCAgUlRDX1VGKTsKK30KKworCisvKioKKyAqIHJ0Y19waWVfdXBkYXRlX2lycSAtIFBJRSBtb2RlIGhydGltZXIgaG9vaworICogQHRpbWVyOiBwb2ludGVyIHRvIHRoZSBwaWUgbW9kZSBocnRpbWVyCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVtdWxhdGUgUElFIG1vZGUgaW50ZXJydXB0cworICogdXNpbmcgYW4gaHJ0aW1lci4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcGVyaW9kaWMKKyAqIGhydGltZXIgZXhwaXJlcy4KKyAqLworZW51bSBocnRpbWVyX3Jlc3RhcnQgcnRjX3BpZV91cGRhdGVfaXJxKHN0cnVjdCBocnRpbWVyICp0aW1lcikKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCWt0aW1lX3QgcGVyaW9kOworCWludCBjb3VudDsKKwlydGMgPSBjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCBydGNfZGV2aWNlLCBwaWVfdGltZXIpOworCisJcGVyaW9kID0ga3RpbWVfc2V0KDAsIE5TRUNfUEVSX1NFQy9ydGMtPmlycV9mcmVxKTsKKwljb3VudCA9IGhydGltZXJfZm9yd2FyZF9ub3codGltZXIsIHBlcmlvZCk7CisKKwlydGNfaGFuZGxlX2xlZ2FjeV9pcnEocnRjLCBjb3VudCwgUlRDX1BGKTsKKworCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7Cit9CisKKy8qKgorICogcnRjX3VwZGF0ZV9pcnEgLSBUcmlnZ2VyZWQgd2hlbiBhIFJUQyBpbnRlcnJ1cHQgb2NjdXJzLgogICogQHJ0YzogdGhlIHJ0YyBkZXZpY2UKICAqIEBudW06IGhvdyBtYW55IGlycXMgYXJlIGJlaW5nIHJlcG9ydGVkICh1c3VhbGx5IG9uZSkKICAqIEBldmVudHM6IG1hc2sgb2YgUlRDX0lSUUYgd2l0aCBvbmUgb3IgbW9yZSBvZiBSVENfUEYsIFJUQ19BRiwgUlRDX1VGCkBAIC0zNzcsMTkgKzMzOCw3IEBACiB2b2lkIHJ0Y191cGRhdGVfaXJxKHN0cnVjdCBydGNfZGV2aWNlICpydGMsCiAJCXVuc2lnbmVkIGxvbmcgbnVtLCB1bnNpZ25lZCBsb25nIGV2ZW50cykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Yy0+aXJxX2xvY2ssIGZsYWdzKTsKLQlydGMtPmlycV9kYXRhID0gKHJ0Yy0+aXJxX2RhdGEgKyAobnVtIDw8IDgpKSB8IGV2ZW50czsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGMtPmlycV9sb2NrLCBmbGFncyk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjLT5pcnFfdGFza19sb2NrLCBmbGFncyk7Ci0JaWYgKHJ0Yy0+aXJxX3Rhc2spCi0JCXJ0Yy0+aXJxX3Rhc2stPmZ1bmMocnRjLT5pcnFfdGFzay0+cHJpdmF0ZV9kYXRhKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGMtPmlycV90YXNrX2xvY2ssIGZsYWdzKTsKLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcnRjLT5pcnFfcXVldWUpOwotCWtpbGxfZmFzeW5jKCZydGMtPmFzeW5jX3F1ZXVlLCBTSUdJTywgUE9MTF9JTik7CisJc2NoZWR1bGVfd29yaygmcnRjLT5pcnF3b3JrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0Y191cGRhdGVfaXJxKTsKIApAQCAtNDc3LDE4ICs0MjYsMjAgQEAKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKHJ0Yy0+b3BzLT5pcnFfc2V0X3N0YXRlID09IE5VTEwpCi0JCXJldHVybiAtRU5YSU87Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjLT5pcnFfdGFza19sb2NrLCBmbGFncyk7CiAJaWYgKHJ0Yy0+aXJxX3Rhc2sgIT0gTlVMTCAmJiB0YXNrID09IE5VTEwpCiAJCWVyciA9IC1FQlVTWTsKIAlpZiAocnRjLT5pcnFfdGFzayAhPSB0YXNrKQogCQllcnIgPSAtRUFDQ0VTOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Yy0+aXJxX3Rhc2tfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGVyciA9PSAwKQotCQllcnIgPSBydGMtPm9wcy0+aXJxX3NldF9zdGF0ZShydGMtPmRldi5wYXJlbnQsIGVuYWJsZWQpOworCWlmIChlbmFibGVkKSB7CisJCWt0aW1lX3QgcGVyaW9kID0ga3RpbWVfc2V0KDAsIE5TRUNfUEVSX1NFQy9ydGMtPmlycV9mcmVxKTsKKwkJaHJ0aW1lcl9zdGFydCgmcnRjLT5waWVfdGltZXIsIHBlcmlvZCwgSFJUSU1FUl9NT0RFX1JFTCk7CisJfSBlbHNlIHsKKwkJaHJ0aW1lcl9jYW5jZWwoJnJ0Yy0+cGllX3RpbWVyKTsKKwl9CisJcnRjLT5waWVfZW5hYmxlZCA9IGVuYWJsZWQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjLT5pcnFfdGFza19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNTA5LDIxICs0NjAsMTk0IEBACiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChydGMtPm9wcy0+aXJxX3NldF9mcmVxID09IE5VTEwpCi0JCXJldHVybiAtRU5YSU87Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjLT5pcnFfdGFza19sb2NrLCBmbGFncyk7CiAJaWYgKHJ0Yy0+aXJxX3Rhc2sgIT0gTlVMTCAmJiB0YXNrID09IE5VTEwpCiAJCWVyciA9IC1FQlVTWTsKIAlpZiAocnRjLT5pcnFfdGFzayAhPSB0YXNrKQogCQllcnIgPSAtRUFDQ0VTOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Yy0+aXJxX3Rhc2tfbG9jaywgZmxhZ3MpOwotCiAJaWYgKGVyciA9PSAwKSB7Ci0JCWVyciA9IHJ0Yy0+b3BzLT5pcnFfc2V0X2ZyZXEocnRjLT5kZXYucGFyZW50LCBmcmVxKTsKLQkJaWYgKGVyciA9PSAwKQotCQkJcnRjLT5pcnFfZnJlcSA9IGZyZXE7CisJCXJ0Yy0+aXJxX2ZyZXEgPSBmcmVxOworCQlpZiAocnRjLT5waWVfZW5hYmxlZCkgeworCQkJa3RpbWVfdCBwZXJpb2Q7CisJCQlocnRpbWVyX2NhbmNlbCgmcnRjLT5waWVfdGltZXIpOworCQkJcGVyaW9kID0ga3RpbWVfc2V0KDAsIE5TRUNfUEVSX1NFQy9ydGMtPmlycV9mcmVxKTsKKwkJCWhydGltZXJfc3RhcnQoJnJ0Yy0+cGllX3RpbWVyLCBwZXJpb2QsCisJCQkJCUhSVElNRVJfTU9ERV9SRUwpOworCQl9CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Yy0+aXJxX3Rhc2tfbG9jaywgZmxhZ3MpOwogCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfaXJxX3NldF9mcmVxKTsKKworLyoqCisgKiBydGNfdGltZXJfZW5xdWV1ZSAtIEFkZHMgYSBydGNfdGltZXIgdG8gdGhlIHJ0Y19kZXZpY2UgdGltZXJxdWV1ZQorICogQHJ0YyBydGMgZGV2aWNlCisgKiBAdGltZXIgdGltZXIgYmVpbmcgYWRkZWQuCisgKgorICogRW5xdWV1ZXMgYSB0aW1lciBvbnRvIHRoZSBydGMgZGV2aWNlcyB0aW1lcnF1ZXVlIGFuZCBzZXRzCisgKiB0aGUgbmV4dCBhbGFybSBldmVudCBhcHByb3ByaWF0ZWx5LgorICoKKyAqIE11c3QgaG9sZCBvcHNfbG9jayBmb3IgcHJvcGVyIHNlcmlhbGl6YXRpb24gb2YgdGltZXJxdWV1ZQorICovCit2b2lkIHJ0Y190aW1lcl9lbnF1ZXVlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKQoreworCXRpbWVycXVldWVfYWRkKCZydGMtPnRpbWVycXVldWUsICZ0aW1lci0+bm9kZSk7CisJaWYgKCZ0aW1lci0+bm9kZSA9PSB0aW1lcnF1ZXVlX2dldG5leHQoJnJ0Yy0+dGltZXJxdWV1ZSkpIHsKKwkJc3RydWN0IHJ0Y193a2Fscm0gYWxhcm07CisJCWludCBlcnI7CisJCWFsYXJtLnRpbWUgPSBydGNfa3RpbWVfdG9fdG0odGltZXItPm5vZGUuZXhwaXJlcyk7CisJCWFsYXJtLmVuYWJsZWQgPSAxOworCQllcnIgPSBfX3J0Y19zZXRfYWxhcm0ocnRjLCAmYWxhcm0pOworCQlpZiAoZXJyID09IC1FVElNRSkKKwkJCXNjaGVkdWxlX3dvcmsoJnJ0Yy0+aXJxd29yayk7CisJfQorfQorCisvKioKKyAqIHJ0Y190aW1lcl9yZW1vdmUgLSBSZW1vdmVzIGEgcnRjX3RpbWVyIGZyb20gdGhlIHJ0Y19kZXZpY2UgdGltZXJxdWV1ZQorICogQHJ0YyBydGMgZGV2aWNlCisgKiBAdGltZXIgdGltZXIgYmVpbmcgcmVtb3ZlZC4KKyAqCisgKiBSZW1vdmVzIGEgdGltZXIgb250byB0aGUgcnRjIGRldmljZXMgdGltZXJxdWV1ZSBhbmQgc2V0cworICogdGhlIG5leHQgYWxhcm0gZXZlbnQgYXBwcm9wcmlhdGVseS4KKyAqCisgKiBNdXN0IGhvbGQgb3BzX2xvY2sgZm9yIHByb3BlciBzZXJpYWxpemF0aW9uIG9mIHRpbWVycXVldWUKKyAqLwordm9pZCBydGNfdGltZXJfcmVtb3ZlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKQoreworCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5leHQgPSB0aW1lcnF1ZXVlX2dldG5leHQoJnJ0Yy0+dGltZXJxdWV1ZSk7CisJdGltZXJxdWV1ZV9kZWwoJnJ0Yy0+dGltZXJxdWV1ZSwgJnRpbWVyLT5ub2RlKTsKKworCWlmIChuZXh0ID09ICZ0aW1lci0+bm9kZSkgeworCQlzdHJ1Y3QgcnRjX3drYWxybSBhbGFybTsKKwkJaW50IGVycjsKKwkJbmV4dCA9IHRpbWVycXVldWVfZ2V0bmV4dCgmcnRjLT50aW1lcnF1ZXVlKTsKKwkJaWYgKCFuZXh0KQorCQkJcmV0dXJuOworCQlhbGFybS50aW1lID0gcnRjX2t0aW1lX3RvX3RtKG5leHQtPmV4cGlyZXMpOworCQlhbGFybS5lbmFibGVkID0gMTsKKwkJZXJyID0gX19ydGNfc2V0X2FsYXJtKHJ0YywgJmFsYXJtKTsKKwkJaWYgKGVyciA9PSAtRVRJTUUpCisJCQlzY2hlZHVsZV93b3JrKCZydGMtPmlycXdvcmspOworCX0KK30KKworLyoqCisgKiBydGNfdGltZXJfZG9fd29yayAtIEV4cGlyZXMgcnRjIHRpbWVycworICogQHJ0YyBydGMgZGV2aWNlCisgKiBAdGltZXIgdGltZXIgYmVpbmcgcmVtb3ZlZC4KKyAqCisgKiBFeHBpcmVzIHJ0YyB0aW1lcnMuIFJlcHJvZ3JhbXMgbmV4dCBhbGFybSBldmVudCBpZiBuZWVkZWQuCisgKiBDYWxsZWQgdmlhIHdvcmt0YXNrLgorICoKKyAqIFNlcmlhbGl6ZXMgYWNjZXNzIHRvIHRpbWVycXVldWUgdmlhIG9wc19sb2NrIG11dGV4CisgKi8KK3ZvaWQgcnRjX3RpbWVyX2RvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBydGNfdGltZXIgKnRpbWVyOworCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5leHQ7CisJa3RpbWVfdCBub3c7CisJc3RydWN0IHJ0Y190aW1lIHRtOworCisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnRjX2RldmljZSwgaXJxd29yayk7CisKKwltdXRleF9sb2NrKCZydGMtPm9wc19sb2NrKTsKK2FnYWluOgorCV9fcnRjX3JlYWRfdGltZShydGMsICZ0bSk7CisJbm93ID0gcnRjX3RtX3RvX2t0aW1lKHRtKTsKKwl3aGlsZSAoKG5leHQgPSB0aW1lcnF1ZXVlX2dldG5leHQoJnJ0Yy0+dGltZXJxdWV1ZSkpKSB7CisJCWlmIChuZXh0LT5leHBpcmVzLnR2NjQgPiBub3cudHY2NCkKKwkJCWJyZWFrOworCisJCS8qIGV4cGlyZSB0aW1lciAqLworCQl0aW1lciA9IGNvbnRhaW5lcl9vZihuZXh0LCBzdHJ1Y3QgcnRjX3RpbWVyLCBub2RlKTsKKwkJdGltZXJxdWV1ZV9kZWwoJnJ0Yy0+dGltZXJxdWV1ZSwgJnRpbWVyLT5ub2RlKTsKKwkJdGltZXItPmVuYWJsZWQgPSAwOworCQlpZiAodGltZXItPnRhc2suZnVuYykKKwkJCXRpbWVyLT50YXNrLmZ1bmModGltZXItPnRhc2sucHJpdmF0ZV9kYXRhKTsKKworCQkvKiBSZS1hZGQvZndkIHBlcmlvZGljIHRpbWVycyAqLworCQlpZiAoa3RpbWVfdG9fbnModGltZXItPnBlcmlvZCkpIHsKKwkJCXRpbWVyLT5ub2RlLmV4cGlyZXMgPSBrdGltZV9hZGQodGltZXItPm5vZGUuZXhwaXJlcywKKwkJCQkJCQl0aW1lci0+cGVyaW9kKTsKKwkJCXRpbWVyLT5lbmFibGVkID0gMTsKKwkJCXRpbWVycXVldWVfYWRkKCZydGMtPnRpbWVycXVldWUsICZ0aW1lci0+bm9kZSk7CisJCX0KKwl9CisKKwkvKiBTZXQgbmV4dCBhbGFybSAqLworCWlmIChuZXh0KSB7CisJCXN0cnVjdCBydGNfd2thbHJtIGFsYXJtOworCQlpbnQgZXJyOworCQlhbGFybS50aW1lID0gcnRjX2t0aW1lX3RvX3RtKG5leHQtPmV4cGlyZXMpOworCQlhbGFybS5lbmFibGVkID0gMTsKKwkJZXJyID0gX19ydGNfc2V0X2FsYXJtKHJ0YywgJmFsYXJtKTsKKwkJaWYgKGVyciA9PSAtRVRJTUUpCisJCQlnb3RvIGFnYWluOworCX0KKworCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7Cit9CisKKworLyogcnRjX3RpbWVyX2luaXQgLSBJbml0aWFsaXplcyBhbiBydGNfdGltZXIKKyAqIEB0aW1lcjogdGltZXIgdG8gYmUgaW50aWlhbGl6ZWQKKyAqIEBmOiBmdW5jdGlvbiBwb2ludGVyIHRvIGJlIGNhbGxlZCB3aGVuIHRpbWVyIGZpcmVzCisgKiBAZGF0YTogcHJpdmF0ZSBkYXRhIHBhc3NlZCB0byBmdW5jdGlvbiBwb2ludGVyCisgKgorICogS2VybmVsIGludGVyZmFjZSB0byBpbml0aWFsaXppbmcgYW4gcnRjX3RpbWVyLgorICovCit2b2lkIHJ0Y190aW1lcl9pbml0KHN0cnVjdCBydGNfdGltZXIgKnRpbWVyLCB2b2lkICgqZikodm9pZCogcCksIHZvaWQqIGRhdGEpCit7CisJdGltZXJxdWV1ZV9pbml0KCZ0aW1lci0+bm9kZSk7CisJdGltZXItPmVuYWJsZWQgPSAwOworCXRpbWVyLT50YXNrLmZ1bmMgPSBmOworCXRpbWVyLT50YXNrLnByaXZhdGVfZGF0YSA9IGRhdGE7Cit9CisKKy8qIHJ0Y190aW1lcl9zdGFydCAtIFNldHMgYW4gcnRjX3RpbWVyIHRvIGZpcmUgaW4gdGhlIGZ1dHVyZQorICogQCBydGM6IHJ0YyBkZXZpY2UgdG8gYmUgdXNlZAorICogQCB0aW1lcjogdGltZXIgYmVpbmcgc2V0CisgKiBAIGV4cGlyZXM6IHRpbWUgYXQgd2hpY2ggdG8gZXhwaXJlIHRoZSB0aW1lcgorICogQCBwZXJpb2Q6IHBlcmlvZCB0aGF0IHRoZSB0aW1lciB3aWxsIHJlY3VyCisgKgorICogS2VybmVsIGludGVyZmFjZSB0byBzZXQgYW4gcnRjX3RpbWVyCisgKi8KK2ludCBydGNfdGltZXJfc3RhcnQoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lciogdGltZXIsCisJCQlrdGltZV90IGV4cGlyZXMsIGt0aW1lX3QgcGVyaW9kKQoreworCWludCByZXQgPSAwOworCW11dGV4X2xvY2soJnJ0Yy0+b3BzX2xvY2spOworCWlmICh0aW1lci0+ZW5hYmxlZCkKKwkJcnRjX3RpbWVyX3JlbW92ZShydGMsIHRpbWVyKTsKKworCXRpbWVyLT5ub2RlLmV4cGlyZXMgPSBleHBpcmVzOworCXRpbWVyLT5wZXJpb2QgPSBwZXJpb2Q7CisKKwl0aW1lci0+ZW5hYmxlZCA9IDE7CisJcnRjX3RpbWVyX2VucXVldWUocnRjLCB0aW1lcik7CisKKwltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qIHJ0Y190aW1lcl9jYW5jZWwgLSBTdG9wcyBhbiBydGNfdGltZXIKKyAqIEAgcnRjOiBydGMgZGV2aWNlIHRvIGJlIHVzZWQKKyAqIEAgdGltZXI6IHRpbWVyIGJlaW5nIHNldAorICoKKyAqIEtlcm5lbCBpbnRlcmZhY2UgdG8gY2FuY2VsIGFuIHJ0Y190aW1lcgorICovCitpbnQgcnRjX3RpbWVyX2NhbmNlbChzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWVyKiB0aW1lcikKK3sKKwlpbnQgcmV0ID0gMDsKKwltdXRleF9sb2NrKCZydGMtPm9wc19sb2NrKTsKKwlpZiAodGltZXItPmVuYWJsZWQpCisJCXJ0Y190aW1lcl9yZW1vdmUocnRjLCB0aW1lcik7CisJdGltZXItPmVuYWJsZWQgPSAwOworCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jIGIvZHJpdmVycy9ydGMvcnRjLWNtb3MuYwppbmRleCA1ODU2MTY3Li5jN2ZmOGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KIAogLyogdGhpcyBpcyBmb3IgImdlbmVyaWMgYWNjZXNzIHRvIFBDLXN0eWxlIFJUQyIgdXNpbmcgQ01PU19SRUFEL0NNT1NfV1JJVEUgKi8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ydGMuaD4KQEAgLTY4Nyw3ICs2ODgsOCBAQAogI2lmCWRlZmluZWQoQ09ORklHX0FUQVJJKQogCWFkZHJlc3Nfc3BhY2UgPSA2NDsKICNlbGlmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FybV9fKSBcCi0JCQl8fCBkZWZpbmVkKF9fc3BhcmNfXykgfHwgZGVmaW5lZChfX21pcHNfXykKKwkJCXx8IGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKF9fbWlwc19fKSBcCisJCQl8fCBkZWZpbmVkKF9fcG93ZXJwY19fKQogCWFkZHJlc3Nfc3BhY2UgPSAxMjg7CiAjZWxzZQogI3dhcm5pbmcgQXNzdW1pbmcgMTI4IGJ5dGVzIG9mIFJUQytOVlJBTSBhZGRyZXNzIHNwYWNlLCBub3QgNjQgYnl0ZXMuCkBAIC04NTAsNyArODUyLDcgQEAKIAogI2lmZGVmCUNPTkZJR19QTQogCi1zdGF0aWMgaW50IGNtb3Nfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQorc3RhdGljIGludCBjbW9zX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBjbW9zX3J0YwkqY21vcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGNoYXIJdG1wOwpAQCAtODk4LDcgKzkwMCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNtb3NfcG93ZXJvZmYoc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiBjbW9zX3N1c3BlbmQoZGV2LCBQTVNHX0hJQkVSTkFURSk7CisJcmV0dXJuIGNtb3Nfc3VzcGVuZChkZXYpOwogfQogCiBzdGF0aWMgaW50IGNtb3NfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTk0NSw5ICs5NDcsOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoY21vc19wbV9vcHMsIGNtb3Nfc3VzcGVuZCwgY21vc19yZXN1bWUpOworCiAjZWxzZQotI2RlZmluZQljbW9zX3N1c3BlbmQJTlVMTAotI2RlZmluZQljbW9zX3Jlc3VtZQlOVUxMCiAKIHN0YXRpYyBpbmxpbmUgaW50IGNtb3NfcG93ZXJvZmYoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMTA3Nyw3ICsxMDc5LDcgQEAKIAogc3RhdGljIGludCBjbW9zX3BucF9zdXNwZW5kKHN0cnVjdCBwbnBfZGV2ICpwbnAsIHBtX21lc3NhZ2VfdCBtZXNnKQogewotCXJldHVybiBjbW9zX3N1c3BlbmQoJnBucC0+ZGV2LCBtZXNnKTsKKwlyZXR1cm4gY21vc19zdXNwZW5kKCZwbnAtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgY21vc19wbnBfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpwbnApCkBAIC0xMTU3LDggKzExNTksOSBAQAogCS5zaHV0ZG93bgk9IGNtb3NfcGxhdGZvcm1fc2h1dGRvd24sCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCi0JCS5zdXNwZW5kCT0gY21vc19zdXNwZW5kLAotCQkucmVzdW1lCQk9IGNtb3NfcmVzdW1lLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JCT0gJmNtb3NfcG1fb3BzLAorI2VuZGlmCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRldi5jIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCmluZGV4IDBjYzA5ODQuLjIxMmIxNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKQEAgLTQ2LDEwNSArNDYsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNpZmRlZiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMCi0vKgotICogUm91dGluZSB0byBwb2xsIFJUQyBzZWNvbmRzIGZpZWxkIGZvciBjaGFuZ2UgYXMgb2Z0ZW4gYXMgcG9zc2libGUsCi0gKiBhZnRlciBmaXJzdCBSVENfVUlFIHVzZSB0aW1lciB0byByZWR1Y2UgcG9sbGluZwotICovCi1zdGF0aWMgdm9pZCBydGNfdWllX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0Y19kZXZpY2UsIHVpZV90YXNrKTsKLQlzdHJ1Y3QgcnRjX3RpbWUgdG07Ci0JaW50IG51bSA9IDA7Ci0JaW50IGVycjsKLQotCWVyciA9IHJ0Y19yZWFkX3RpbWUocnRjLCAmdG0pOwotCi0Jc3Bpbl9sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7Ci0JaWYgKHJ0Yy0+c3RvcF91aWVfcG9sbGluZyB8fCBlcnIpIHsKLQkJcnRjLT51aWVfdGFza19hY3RpdmUgPSAwOwotCX0gZWxzZSBpZiAocnRjLT5vbGRzZWNzICE9IHRtLnRtX3NlYykgewotCQludW0gPSAodG0udG1fc2VjICsgNjAgLSBydGMtPm9sZHNlY3MpICUgNjA7Ci0JCXJ0Yy0+b2xkc2VjcyA9IHRtLnRtX3NlYzsKLQkJcnRjLT51aWVfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWiAtIChIWi8xMCk7Ci0JCXJ0Yy0+dWllX3RpbWVyX2FjdGl2ZSA9IDE7Ci0JCXJ0Yy0+dWllX3Rhc2tfYWN0aXZlID0gMDsKLQkJYWRkX3RpbWVyKCZydGMtPnVpZV90aW1lcik7Ci0JfSBlbHNlIGlmIChzY2hlZHVsZV93b3JrKCZydGMtPnVpZV90YXNrKSA9PSAwKSB7Ci0JCXJ0Yy0+dWllX3Rhc2tfYWN0aXZlID0gMDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKLQlpZiAobnVtKQotCQlydGNfdXBkYXRlX2lycShydGMsIG51bSwgUlRDX1VGIHwgUlRDX0lSUUYpOwotfQotc3RhdGljIHZvaWQgcnRjX3VpZV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IChzdHJ1Y3QgcnRjX2RldmljZSAqKWRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZydGMtPmlycV9sb2NrLCBmbGFncyk7Ci0JcnRjLT51aWVfdGltZXJfYWN0aXZlID0gMDsKLQlydGMtPnVpZV90YXNrX2FjdGl2ZSA9IDE7Ci0JaWYgKChzY2hlZHVsZV93b3JrKCZydGMtPnVpZV90YXNrKSA9PSAwKSkKLQkJcnRjLT51aWVfdGFza19hY3RpdmUgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Yy0+aXJxX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBjbGVhcl91aWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YykKLXsKLQlzcGluX2xvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKLQlpZiAocnRjLT51aWVfaXJxX2FjdGl2ZSkgewotCQlydGMtPnN0b3BfdWllX3BvbGxpbmcgPSAxOwotCQlpZiAocnRjLT51aWVfdGltZXJfYWN0aXZlKSB7Ci0JCQlzcGluX3VubG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOwotCQkJZGVsX3RpbWVyX3N5bmMoJnJ0Yy0+dWllX3RpbWVyKTsKLQkJCXNwaW5fbG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOwotCQkJcnRjLT51aWVfdGltZXJfYWN0aXZlID0gMDsKLQkJfQotCQlpZiAocnRjLT51aWVfdGFza19hY3RpdmUpIHsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7Ci0JCQlmbHVzaF93b3JrX3N5bmMoJnJ0Yy0+dWllX3Rhc2spOwotCQkJc3Bpbl9sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7Ci0JCX0KLQkJcnRjLT51aWVfaXJxX2FjdGl2ZSA9IDA7Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X3VpZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQotewotCXN0cnVjdCBydGNfdGltZSB0bTsKLQlpbnQgZXJyOwotCi0JZXJyID0gcnRjX3JlYWRfdGltZShydGMsICZ0bSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQlzcGluX2xvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKLQlpZiAoIXJ0Yy0+dWllX2lycV9hY3RpdmUpIHsKLQkJcnRjLT51aWVfaXJxX2FjdGl2ZSA9IDE7Ci0JCXJ0Yy0+c3RvcF91aWVfcG9sbGluZyA9IDA7Ci0JCXJ0Yy0+b2xkc2VjcyA9IHRtLnRtX3NlYzsKLQkJcnRjLT51aWVfdGFza19hY3RpdmUgPSAxOwotCQlpZiAoc2NoZWR1bGVfd29yaygmcnRjLT51aWVfdGFzaykgPT0gMCkKLQkJCXJ0Yy0+dWllX3Rhc2tfYWN0aXZlID0gMDsKLQl9Ci0JcnRjLT5pcnFfZGF0YSA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHJ0Y19kZXZfdXBkYXRlX2lycV9lbmFibGVfZW11bChzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKLXsKLQlpZiAoZW5hYmxlZCkKLQkJcmV0dXJuIHNldF91aWUocnRjKTsKLQllbHNlCi0JCXJldHVybiBjbGVhcl91aWUocnRjKTsKLX0KLUVYUE9SVF9TWU1CT0wocnRjX2Rldl91cGRhdGVfaXJxX2VuYWJsZV9lbXVsKTsKLQotI2VuZGlmIC8qIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgKi8KIAogc3RhdGljIHNzaXplX3QKIHJ0Y19kZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCkBAIC00OTMsMTEgKzM5NCw2IEBACiAKIAlydGMtPmRldi5kZXZ0ID0gTUtERVYoTUFKT1IocnRjX2RldnQpLCBydGMtPmlkKTsKIAotI2lmZGVmIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwKLQlJTklUX1dPUksoJnJ0Yy0+dWllX3Rhc2ssIHJ0Y191aWVfdGFzayk7Ci0Jc2V0dXBfdGltZXIoJnJ0Yy0+dWllX3RpbWVyLCBydGNfdWllX3RpbWVyLCAodW5zaWduZWQgbG9uZylydGMpOwotI2VuZGlmCi0KIAljZGV2X2luaXQoJnJ0Yy0+Y2hhcl9kZXYsICZydGNfZGV2X2ZvcHMpOwogCXJ0Yy0+Y2hhcl9kZXYub3duZXIgPSBydGMtPm93bmVyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCmluZGV4IGQ4MjdjZTUuLjBkNTU5YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKQEAgLTEwNiw5ICsxMDYsOSBAQAogCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQ7CiAJc3RydWN0IHJ0Y19kZXZpY2UJKnJ0YzsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKLQlzMzIgKCpyZWFkX2Jsb2NrX2RhdGEpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQsCisJczMyICgqcmVhZF9ibG9ja19kYXRhKShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLAogCQkJICAgICAgIHU4IGxlbmd0aCwgdTggKnZhbHVlcyk7Ci0JczMyICgqd3JpdGVfYmxvY2tfZGF0YSkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwKKwlzMzIgKCp3cml0ZV9ibG9ja19kYXRhKShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLAogCQkJCXU4IGxlbmd0aCwgY29uc3QgdTggKnZhbHVlcyk7CiB9OwogCkBAIC0xNTgsOCArMTU4LDggQEAKIAogI2RlZmluZSBCTE9DS19EQVRBX01BWF9UUklFUyAxMAogCi1zdGF0aWMgczMyIGRzMTMwN19yZWFkX2Jsb2NrX2RhdGFfb25jZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLAotCQkJCSAgdTggbGVuZ3RoLCB1OCAqdmFsdWVzKQorc3RhdGljIHMzMiBkczEzMDdfcmVhZF9ibG9ja19kYXRhX29uY2UoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgICAgdTggY29tbWFuZCwgdTggbGVuZ3RoLCB1OCAqdmFsdWVzKQogewogCXMzMiBpLCBkYXRhOwogCkBAIC0xNzIsNyArMTcyLDcgQEAKIAlyZXR1cm4gaTsKIH0KIAotc3RhdGljIHMzMiBkczEzMDdfcmVhZF9ibG9ja19kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQsCitzdGF0aWMgczMyIGRzMTMwN19yZWFkX2Jsb2NrX2RhdGEoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwKIAkJCQkgIHU4IGxlbmd0aCwgdTggKnZhbHVlcykKIHsKIAl1OCBvbGR2YWx1ZXNbSTJDX1NNQlVTX0JMT0NLX01BWF07CkBAIC0xOTgsNyArMTk4LDcgQEAKIAlyZXR1cm4gbGVuZ3RoOwogfQogCi1zdGF0aWMgczMyIGRzMTMwN193cml0ZV9ibG9ja19kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQsCitzdGF0aWMgczMyIGRzMTMwN193cml0ZV9ibG9ja19kYXRhKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQsCiAJCQkJICAgdTggbGVuZ3RoLCBjb25zdCB1OCAqdmFsdWVzKQogewogCXU4IGN1cnJ2YWx1ZXNbSTJDX1NNQlVTX0JMT0NLX01BWF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbGliLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbGliLmMKaW5kZXggNzczODUxZi4uMDc1ZjE3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWxpYi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1saWIuYwpAQCAtMTE3LDQgKzExNywzMiBAQAogfQogRVhQT1JUX1NZTUJPTChydGNfdG1fdG9fdGltZSk7CiAKKy8qCisgKiBDb252ZXJ0IHJ0Y190aW1lIHRvIGt0aW1lCisgKi8KK2t0aW1lX3QgcnRjX3RtX3RvX2t0aW1lKHN0cnVjdCBydGNfdGltZSB0bSkKK3sKKwl0aW1lX3QgdGltZTsKKwlydGNfdG1fdG9fdGltZSgmdG0sICZ0aW1lKTsKKwlyZXR1cm4ga3RpbWVfc2V0KHRpbWUsIDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnRjX3RtX3RvX2t0aW1lKTsKKworLyoKKyAqIENvbnZlcnQga3RpbWUgdG8gcnRjX3RpbWUKKyAqLworc3RydWN0IHJ0Y190aW1lIHJ0Y19rdGltZV90b190bShrdGltZV90IGt0KQoreworCXN0cnVjdCB0aW1lc3BlYyB0czsKKwlzdHJ1Y3QgcnRjX3RpbWUgcmV0OworCisJdHMgPSBrdGltZV90b190aW1lc3BlYyhrdCk7CisJLyogUm91bmQgdXAgYW55IG5zICovCisJaWYgKHRzLnR2X25zZWMpCisJCXRzLnR2X3NlYysrOworCXJ0Y190aW1lX3RvX3RtKHRzLnR2X3NlYywgJnJldCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0Y19rdGltZV90b190bSk7CisKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMi5jCmluZGV4IDY1NzQwM2UuLjBlYzNmNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAyLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1heDY5MDIuYwpAQCAtMTM5LDEyICsxMzksMTMgQEAKIAlpZiAoSVNfRVJSKHJ0YykpCiAJCXJldHVybiBQVFJfRVJSKHJ0Yyk7CiAKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBydGMpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYXg2OTAyX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewotCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShzcGkpOworCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKIAogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKaW5kZXggNzMzNzdiMC4uZTcyYjUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCkBAIC00MjksMTMgKzQyOSwxNCBAQAogZmFpbDA6CiAJaW91bm1hcChydGNfYmFzZSk7CiBmYWlsOgotCXJlbGVhc2VfcmVzb3VyY2UobWVtKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKIAlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBfX2V4aXQgb21hcF9ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJ0Y19kZXZpY2UJKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZQkJKm1lbSA9IGRldl9nZXRfZHJ2ZGF0YSgmcnRjLT5kZXYpOwogCiAJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDApOwogCkBAIC00NDcsOCArNDQ4LDkgQEAKIAlpZiAob21hcF9ydGNfdGltZXIgIT0gb21hcF9ydGNfYWxhcm0pCiAJCWZyZWVfaXJxKG9tYXBfcnRjX2FsYXJtLCBydGMpOwogCi0JcmVsZWFzZV9yZXNvdXJjZShkZXZfZ2V0X2RydmRhdGEoJnJ0Yy0+ZGV2KSk7CiAJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CisJaW91bm1hcChydGNfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCmluZGV4IDA5ZTdhMDUuLjMwYjJhODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwpAQCAtODQxLDcgKzg0MSw3IEBACiB9CiAKIC8qKgotICogRW1pdCBidWZmZXIgb2YgYSBsYW4gY29tYW5kLgorICogRW1pdCBidWZmZXIgb2YgYSBsYW4gY29tbWFuZC4KICAqLwogc3RhdGljIHZvaWQKIGxjc19sYW5jbWRfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2NmZGMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2ZkYy5jCmluZGV4IDQ2MzQyZmUuLjMwM2RkZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2ZkYy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2ZkYy5jCkBAIC0zMTcsNyArMzE3LDcgQEAKIAogLyoqCiAgKiB6ZmNwX2NmZGNfcG9ydF9kZW5pZWQgLSBQcm9jZXNzICJhY2Nlc3MgZGVuaWVkIiBmb3IgcG9ydAotICogQHBvcnQ6IFRoZSBwb3J0IHdoZXJlIHRoZSBhY2NlcyBoYXMgYmVlbiBkZW5pZWQKKyAqIEBwb3J0OiBUaGUgcG9ydCB3aGVyZSB0aGUgYWNjZXNzIGhhcyBiZWVuIGRlbmllZAogICogQHF1YWw6IFRoZSBGU0Ygc3RhdHVzIHF1YWxpZmllciBmb3IgdGhlIGFjY2VzcyBkZW5pZWQgRlNGIHN0YXR1cwogICovCiB2b2lkIHpmY3BfY2ZkY19wb3J0X2RlbmllZChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ExMDB1MncuYyBiL2RyaXZlcnMvc2NzaS9hMTAwdTJ3LmMKaW5kZXggZGM1YWM2ZS4uYTM5MTA5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ExMDB1MncuYworKysgYi9kcml2ZXJzL3Njc2kvYTEwMHUydy5jCkBAIC00MTYsNyArNDE2LDcgQEAKIAkvKiBHbyBiYWNrIGFuZCBjaGVjayB0aGV5IG1hdGNoICovCiAKIAlvdXRiKFBSR01SU1QgfCBET1dOTE9BRCwgaG9zdC0+YmFzZSArIE9SQ19SSVNDQ1RMKTsJLyogUmVzZXQgcHJvZ3JhbSBjb3VudCAwICovCi0JYmlvc19hZGRyIC09IDB4MTAwMDsJLyogUmVzZXQgdGhlIEJJT1MgYWRkZHJlc3MgICAgICAqLworCWJpb3NfYWRkciAtPSAweDEwMDA7CS8qIFJlc2V0IHRoZSBCSU9TIGFkZHJlc3MgKi8KIAlmb3IgKGkgPSAwLCBkYXRhMzJfcHRyID0gKHU4ICopICYgZGF0YTMyOwkvKiBDaGVjayB0aGUgY29kZSAgICAgICAqLwogCSAgICAgaSA8IDB4MTAwMDsJLyogRmlybXdhcmUgY29kZSBzaXplID0gNEsgICAgICAqLwogCSAgICAgaSsrLCBiaW9zX2FkZHIrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jCmluZGV4IGFmYzlhZWIuLjA2MGFjNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tc3VwLmMKQEAgLTkxLDcgKzkxLDcgQEAKICAqCWFhY19maWJfc2V0dXAJLQlzZXR1cCB0aGUgZmlicwogICoJQGRldjogQWRhcHRlciB0byBzZXQgdXAKICAqCi0gKglBbGxvY2F0ZSB0aGUgUENJIHNwYWNlIGZvciB0aGUgZmlicywgbWFwIGl0IGFuZCB0aGVuIGludGlhbGlzZSB0aGUKKyAqCUFsbG9jYXRlIHRoZSBQQ0kgc3BhY2UgZm9yIHRoZSBmaWJzLCBtYXAgaXQgYW5kIHRoZW4gaW5pdGlhbGlzZSB0aGUKICAqCWZpYiBhcmVhLCB0aGUgdW5tYXBwZWQgZmliIGRhdGEgYW5kIGFsc28gdGhlIGZyZWUgbGlzdAogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC9haWM3eHh4LnNlcSBiL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC9haWM3eHh4LnNlcQppbmRleCA1OTk3ZTdjLi4xNTY1YmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eF9vbGQvYWljN3h4eC5zZXEKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkL2FpYzd4eHguc2VxCkBAIC0xMTc4LDcgKzExNzgsNyBAQAogLyoKICAqIFJldHJpZXZlIGFuIFNDQiBieSBTQ0JJRCBmaXJzdCBzZWFyY2hpbmcgdGhlIGRpc2Nvbm5lY3RlZCBsaXN0IGZhbGxpbmcKICAqIGJhY2sgdG8gRE1BJ2luZyB0aGUgU0NCIGRvd24gZnJvbSB0aGUgaG9zdC4gIFRoaXMgcm91dGluZSBhc3N1bWVzIHRoYXQKLSAqIEFSR18xIGlzIHRoZSBTQ0JJRCBvZiBpbnRlcnJlc3QgYW5kIHRoYXQgU0lOREVYIGlzIHRoZSBwb3NpdGlvbiBpbiB0aGUKKyAqIEFSR18xIGlzIHRoZSBTQ0JJRCBvZiBpbnRlcmVzdCBhbmQgdGhhdCBTSU5ERVggaXMgdGhlIHBvc2l0aW9uIGluIHRoZQogICogZGlzY29ubmVjdGVkIGxpc3QgdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tLiAgSWYgU0lOREVYIGlzIFNDQl9MSVNUX05VTEwsCiAgKiB3ZSBnbyBkaXJlY3RseSB0byB0aGUgaG9zdCBmb3IgdGhlIFNDQi4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9yZWdfZGVmLmggYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3JlZ19kZWYuaAppbmRleCAyOGFhZjM0Li40MDI3M2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3JlZ19kZWYuaAorKysgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3JlZ19kZWYuaApAQCAtMTY4OSw3ICsxNjg5LDcgQEAKICNkZWZpbmUJCVBIWV9TVEFSVF9DQUwJCTB4MDEKIAogLyoKLSAqIEhTVF9QQ0lYMiBSZWdpc3RlcnMsIEFkZHJlc3NzIFJhbmdlOiAoMHgwMC0weEZDKQorICogSFNUX1BDSVgyIFJlZ2lzdGVycywgQWRkcmVzcyBSYW5nZTogKDB4MDAtMHhGQykKICAqLwogI2RlZmluZSBQQ0lYX1JFR19CQVNFX0FEUgkJMHhCODA0MDAwMAogCkBAIC0xODAyLDcgKzE4MDIsNyBAQAogI2RlZmluZSBQQ0lDX1RQX0NUUkwJMHhGQwogCiAvKgotICogRVhTSSBSZWdpc3RlcnMsIEFkZHJlc3NzIFJhbmdlOiAoMHgwMC0weEZDKQorICogRVhTSSBSZWdpc3RlcnMsIEFkZHJlc3MgUmFuZ2U6ICgweDAwLTB4RkMpCiAgKi8KICNkZWZpbmUgRVhTSV9SRUdfQkFTRV9BRFIJCVJFR19CQVNFX0FERFJfRVhTSQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NjYi5jIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zY2IuYwppbmRleCBjNDM2OThiLi4yOTU5MzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NjYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2NiLmMKQEAgLTg2Nyw3ICs4NjcsNyBAQAogICogcmVzb3VyY2VzIHRoZXkgaGF2ZSB3aXRoIHRoaXMgU0NCLCBhbmQgdGhlbiBjYWxsIHRoaXMgb25lIGF0IHRoZQogICogZW5kIG9mIHRoZWlyIHRpbWVvdXQgZnVuY3Rpb24uICBUbyBkbyB0aGlzLCBvbmUgc2hvdWxkIGluaXRpYWxpemUKICAqIHRoZSBhc2NiLT50aW1lci57ZnVuY3Rpb24sIGRhdGEsIGV4cGlyZXN9IHByaW9yIHRvIGNhbGxpbmcgdGhlIHBvc3QKLSAqIGZ1bmNpb24uICBUaGUgdGltZXIgaXMgc3RhcnRlZCBieSB0aGUgcG9zdCBmdW5jdGlvbi4KKyAqIGZ1bmN0aW9uLiBUaGUgdGltZXIgaXMgc3RhcnRlZCBieSB0aGUgcG9zdCBmdW5jdGlvbi4KICAqLwogdm9pZCBhc2RfYXNjYl90aW1lZG91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NlcS5jIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zZXEuYwppbmRleCA3NDM3NDYxLi4zOTAxNjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NlcS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2VxLmMKQEAgLTc5Nyw3ICs3OTcsNyBAQAogCQlpbnQgajsKIAkJLyogU3RhcnQgZnJvbSBQYWdlIDEgb2YgTW9kZSAwIGFuZCAxLiAqLwogCQltb2ZmcyA9IExTRVFfUEFHRV9TSVpFICsgaSpMU0VRX01PREVfU0NSQVRDSF9TSVpFOwotCQkvKiBBbGwgdGhlIGZpZWxkcyBvZiBwYWdlIDEgY2FuIGJlIGludGlhbGl6ZWQgdG8gMC4gKi8KKwkJLyogQWxsIHRoZSBmaWVsZHMgb2YgcGFnZSAxIGNhbiBiZSBpbml0aWFsaXplZCB0byAwLiAqLwogCQlmb3IgKGogPSAwOyBqIDwgTFNFUV9QQUdFX1NJWkU7IGogKz0gNCkKIAkJCWFzZF93cml0ZV9yZWdfZHdvcmQoYXNkX2hhLCBMbVNDUkFUQ0gobHNlcSkrbW9mZnMraiwwKTsKIAl9CkBAIC05MzgsNyArOTM4LDcgQEAKIAlhc2Rfd3JpdGVfcmVnX2R3b3JkKGFzZF9oYSwgU0NCUFJPLCAwKTsKIAlhc2Rfd3JpdGVfcmVnX2R3b3JkKGFzZF9oYSwgQ1NFUUNPTiwgMCk7CiAKLQkvKiBJbnRpYWxpemUgQ1NFUSBNb2RlIDExIEludGVycnVwdCBWZWN0b3JzLgorCS8qIEluaXRpYWxpemUgQ1NFUSBNb2RlIDExIEludGVycnVwdCBWZWN0b3JzLgogCSAqIFRoZSBhZGRyZXNzZXMgYXJlIDE2IGJpdCB3aWRlIGFuZCBpbiBkd29yZCB1bml0cy4KIAkgKiBUaGUgdmFsdWVzIG9mIHRoZWlyIG1hY3JvcyBhcmUgaW4gYnl0ZSB1bml0cy4KIAkgKiBUaHVzIHdlIGhhdmUgdG8gZGl2aWRlIGJ5IDQuICovCkBAIC05NjEsNyArOTYxLDcgQEAKIAlhc2Rfd3JpdGVfcmVnX3dvcmQoYXNkX2hhLCBDUFJHTUNOVCwgY3NlcV9pZGxlX2xvb3ApOwogCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQkvKiBJbnRpYWxpemUgTW9kZSBuIExpbmsgbSBJbnRlcnJ1cHQgRW5hYmxlLiAqLworCQkvKiBJbml0aWFsaXplIE1vZGUgbiBMaW5rIG0gSW50ZXJydXB0IEVuYWJsZS4gKi8KIAkJYXNkX3dyaXRlX3JlZ19kd29yZChhc2RfaGEsIENNbklOVEVOKGkpLCBFTl9DTW5SU1BNQlhGKTsKIAkJLyogSW5pdGlhbGl6ZSBNb2RlIG4gUmVxdWVzdCBNYWlsYm94LiAqLwogCQlhc2Rfd3JpdGVfcmVnX2R3b3JkKGFzZF9oYSwgQ01uUkVRTUJYKGkpLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5jCmluZGV4IDljNDEwYjIuLmMwMzUzY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW0uYwpAQCAtMTgzOCw3ICsxODM4LDcgQEAKIAogCWNhc2UgQkZBX0lPSU1fU01fQUJPUlQ6CiAJCS8qCi0JCSAqIElPIGlzIGFscmFlZHkgYmVpbmcgY2xlYW5lZCB1cCBpbXBsaWNpdGx5CisJCSAqIElPIGlzIGFscmVhZHkgYmVpbmcgY2xlYW5lZCB1cCBpbXBsaWNpdGx5CiAJCSAqLwogCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9hYm9ydDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19scG9ydC5jCmluZGV4IDRlMmViOTIuLjQzZmE5ODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYwpAQCAtNTY0Niw3ICs1NjQ2LDcgQEAKIAlzd2l0Y2ggKHN0YXR1cykgewogCWNhc2UgQkZBX1NUQVRVU19PSzoKIAkJLyoKLQkJICogSW5pdGlhbGlhemUgdGhlIFYtUG9ydCBmaWVsZHMKKwkJICogSW5pdGlhbGl6ZSB0aGUgVi1Qb3J0IGZpZWxkcwogCQkgKi8KIAkJX192cG9ydF9mY2lkKHZwb3J0KSA9IHZwb3J0LT5scHMtPmxwX3BpZDsKIAkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX2FjY2VwdHMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kYzM5NXguYyBiL2RyaXZlcnMvc2NzaS9kYzM5NXguYwppbmRleCA4ZjFiNWM4Li5iMGY4NTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGMzOTV4LmMKKysrIGIvZHJpdmVycy9zY3NpL2RjMzk1eC5jCkBAIC0zNzk2LDcgKzM3OTYsNyBAQAogICogYWRhcHRlcl9hZGRfZGV2aWNlIC0gQWRkcyB0aGUgZGV2aWNlIGluc3RhbmNlIHRvIHRoZSBhZGFwdG9yIGluc3RhbmNlLgogICoKICAqIEBhY2I6IFRoZSBhZGFwdGVyIGRldmljZSB0byBiZSB1cGRhdGVkCi0gKiBAZGNiOiBBIG5ld2x5IGNyZWF0ZWQgYW5kIGludGlhbGlzZWQgZGV2aWNlIGluc3RhbmNlIHRvIGFkZC4KKyAqIEBkY2I6IEEgbmV3bHkgY3JlYXRlZCBhbmQgaW5pdGlhbGlzZWQgZGV2aWNlIGluc3RhbmNlIHRvIGFkZC4KICAqKi8KIHN0YXRpYyB2b2lkIGFkYXB0ZXJfYWRkX2RldmljZShzdHJ1Y3QgQWRhcHRlckN0bEJsayAqYWNiLAogCQlzdHJ1Y3QgRGV2aWNlQ3RsQmxrICpkY2IpCkBAIC00NDk4LDcgKzQ0OTgsNyBAQAogICogaW5pdF9hZGFwdGVyIC0gR3JhYiB0aGUgcmVzb3VyY2UgZm9yIHRoZSBjYXJkLCBzZXR1cCB0aGUgYWRhcHRlcgogICogaW5mb3JtYXRpb24sIHNldCB0aGUgY2FyZCBpbnRvIGEga25vd24gc3RhdGUsIGNyZWF0ZSB0aGUgdmFyaW91cwogICogdGFibGVzIGV0YyBldGMuIFRoaXMgYmFzaWNhbGx5IGdldHMgYWxsIGFkYXB0ZXIgaW5mb3JtYXRpb24gYWxsIHVwCi0gKiB0byBkYXRlLCBpbnRpYWxpc2VkIGFuZCBnZXRzIHRoZSBjaGlwIGluIHN5bmMgd2l0aCBpdC4KKyAqIHRvIGRhdGUsIGluaXRpYWxpc2VkIGFuZCBnZXRzIHRoZSBjaGlwIGluIHN5bmMgd2l0aCBpdC4KICAqCiAgKiBAaG9zdDoJVGhpcyBob3N0cyBhZGFwdGVyIHN0cnVjdHVyZQogICogQGlvX3BvcnQ6CVRoZSBiYXNlIEkvTyBwb3J0CkBAIC00Nzg5LDcgKzQ3ODksNyBAQAogICogdGhhdCBpdCBmaW5kcyBpbiB0aGUgc3lzdGVtLiBUaGUgcGNpX2RldiBzdHJjdXR1cmUgaW5kaWNhdGVzIHdoaWNoCiAgKiBpbnN0YW5jZSB3ZSBhcmUgYmVpbmcgY2FsbGVkIGZyb20uCiAgKiAKLSAqIEBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIGludGlhbGl6ZS4KKyAqIEBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIGluaXRpYWxpemUuCiAgKiBAaWQ6IExvb2tzIGxpa2UgYSBwb2ludGVyIHRvIHRoZSBlbnRyeSBpbiBvdXIgcGNpIGRldmljZSB0YWJsZQogICogdGhhdCB3YXMgYWN0dWFsbHkgbWF0Y2hlZCBieSB0aGUgUENJIHN1YnN5c3RlbS4KICAqCkBAIC00ODYwLDcgKzQ4NjAsNyBAQAogICogZGMzOTV4X3JlbW92ZV9vbmUgLSBDYWxsZWQgdG8gcmVtb3ZlIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZQogICogYWRhcHRlci4KICAqCi0gKiBAZGV2OiBUaGUgUENJIGRldmljZSB0byBpbnRpYWxpemUuCisgKiBAZGV2OiBUaGUgUENJIGRldmljZSB0byBpbml0aWFsaXplLgogICoqLwogc3RhdGljIHZvaWQgX19kZXZleGl0IGRjMzk1eF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKaW5kZXggY2RjMDZjZC4uNTk2MmQxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYwpAQCAtMTI1MCw3ICsxMjUwLDcgQEAKIC8qKgogICogZmNfbHVuX3Jlc2V0KCkgLSBTZW5kIGEgTFVOIFJFU0VUIGNvbW1hbmQgdG8gYSBkZXZpY2UKICAqCQkgICAgYW5kIHdhaXQgZm9yIHRoZSByZXBseQotICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCB0byBzZW50IHRoZSBjb21hbmQgb24KKyAqIEBscG9ydDogVGhlIGxvY2FsIHBvcnQgdG8gc2VudCB0aGUgY29tbWFuZCBvbgogICogQGZzcDogICBUaGUgRkNQIHBhY2tldCB0aGF0IGlkZW50aWZpZXMgdGhlIExVTiB0byBiZSByZXNldAogICogQGlkOgkgICBUaGUgU0NTSSBjb21tYW5kIElECiAgKiBAbHVuOiAgIFRoZSBMVU4gSUQgdG8gYmUgcmVzZXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKaW5kZXggYzA2NDkxYi4uMzUxMmFiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKQEAgLTEzMzUsNyArMTMzNSw3IEBACiB9CiAKIC8qKgotICogbHBmY19wYXJhbV9pbml0IC0gSW50aWFsaXplcyBhIGNmZyBhdHRyaWJ1dGUKKyAqIGxwZmNfcGFyYW1faW5pdCAtIEluaXRpYWxpemVzIGEgY2ZnIGF0dHJpYnV0ZQogICoKICAqIERlc2NyaXB0aW9uOgogICogTWFjcm8gdGhhdCBnaXZlbiBhbiBhdHRyIGUuZy4gaGJhX3F1ZXVlX2RlcHRoIGV4cGFuZHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKaW5kZXggZjlmMTYwYS4uYmIwMTU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKQEAgLTI4NTIsNyArMjg1Miw3IEBACiAJCQlpZiAodW5saWtlbHkoIWZjZl9yZWNvcmQpKSB7CiAJCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLAogCQkJCQlMT0dfTUJPWCB8IExPR19TTEksCi0JCQkJCSIyNTU0IENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1tb3J5IGZvciAiCisJCQkJCSIyNTU0IENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKIAkJCQkJImZjZiByZWNvcmRcbiIpOwogCQkJCXJjID0gLUVOT0RFVjsKIAkJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKaW5kZXggNDYyMjQyZC4uNmQwYjM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKQEAgLTgwNzEsNyArODA3MSw3IEBACiAJICogdGhlIEhCQS4KIAkgKi8KIAotCS8qIEhCQSBpbnRlcnJ1cHQgd2lsbCBiZSBkaWFibGVkIGFmdGVyIHRoaXMgY2FsbCAqLworCS8qIEhCQSBpbnRlcnJ1cHQgd2lsbCBiZSBkaXNhYmxlZCBhZnRlciB0aGlzIGNhbGwgKi8KIAlscGZjX3NsaV9oYmFfZG93bihwaGJhKTsKIAkvKiBTdG9wIGt0aHJlYWQgc2lnbmFsIHNoYWxsIHRyaWdnZXIgd29ya19kb25lIG9uZSBtb3JlIHRpbWUgKi8KIAlrdGhyZWFkX3N0b3AocGhiYS0+d29ya2VyX3RocmVhZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwppbmRleCA2MzRiMmZlLi5hMzU5ZDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKQEAgLTEwMTcyLDcgKzEwMTcyLDcgQEAKICAqIGxwZmNfc2xpNF9xdWV1ZV9mcmVlIC0gZnJlZSBhIHF1ZXVlIHN0cnVjdHVyZSBhbmQgYXNzb2NpYXRlZCBtZW1vcnkKICAqIEBxdWV1ZTogVGhlIHF1ZXVlIHN0cnVjdHVyZSB0byBmcmVlLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgYSBxdWV1ZSBzdHJ1Y3R1cmUgYW5kIHRoZSBETUFhYmxlIG1lbWVvcnkgdXNlZCBmb3IKKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgYSBxdWV1ZSBzdHJ1Y3R1cmUgYW5kIHRoZSBETUFhYmxlIG1lbW9yeSB1c2VkIGZvcgogICogdGhlIGhvc3QgcmVzaWRlbnQgcXVldWUuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgZGVzdHJveWluZyB0aGUKICAqIHF1ZXVlIG9uIHRoZSBIQkEuCiAgKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5oCmluZGV4IGY1NjQ0NzQuLjg1MzQxMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5oCkBAIC0xMyw3ICsxMyw3IEBACiAgKi8KIAogLyoKLSAqIENvbWFuZCBjb2FsZXNjaW5nIC0gVGhpcyBmZWF0dXJlIGFsbG93cyB0aGUgZHJpdmVyIHRvIGJlIGFibGUgdG8gY29tYmluZQorICogQ29tbWFuZCBjb2FsZXNjaW5nIC0gVGhpcyBmZWF0dXJlIGFsbG93cyB0aGUgZHJpdmVyIHRvIGJlIGFibGUgdG8gY29tYmluZQogICogdHdvIG9yIG1vcmUgY29tbWFuZHMgYW5kIGlzc3VlIGFzIG9uZSBjb21tYW5kIGluIG9yZGVyIHRvIGJvb3N0IEkvTwogICogcGVyZm9ybWFuY2UuIFVzZWZ1bCBpZiB0aGUgbmF0dXJlIG9mIHRoZSBJL08gaXMgc2VxdWVudGlhbC4gSXQgaXMgbm90IHZlcnkKICAqIHVzZWZ1bCBmb3IgcmFuZG9tIG5hdHVyZWQgSS9Pcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tbS5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmMKaW5kZXggYTcwMDhjMC4uMjU1MDZjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogewogCWludCBlcnI7CiAKLQkvKiBpbmNvbnNpc3RhbnQ6IG1yYWlkX21tX2NvbXBhdF9pb2N0bCBkb2Vzbid0IHRha2UgdGhlIEJLTCAqLworCS8qIGluY29uc2lzdGVudDogbXJhaWRfbW1fY29tcGF0X2lvY3RsIGRvZXNuJ3QgdGFrZSB0aGUgQktMICovCiAJbXV0ZXhfbG9jaygmbXJhaWRfbW1fbXV0ZXgpOwogCWVyciA9IG1yYWlkX21tX2lvY3RsKGZpbGVwLCBjbWQsIGFyZyk7CiAJbXV0ZXhfdW5sb2NrKCZtcmFpZF9tbV9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMKaW5kZXggZjhjODZiMi4uYjk1Mjg1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2luaXQuYwpAQCAtNjAzLDcgKzYwMyw3IEBACiAjZW5kaWYKIAogaW50eDoKLQkvKiBpbnRpYWxpemUgdGhlIElOVC1YIGludGVycnVwdCAqLworCS8qIGluaXRpYWxpemUgdGhlIElOVC1YIGludGVycnVwdCAqLwogCXJjID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBpcnFfaGFuZGxlciwgSVJRRl9TSEFSRUQsIERSVl9OQU1FLAogCQlTSE9TVF9UT19TQVNfSEEocG04MDAxX2hhLT5zaG9zdCkpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX25ldGxpbmsuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX25ldGxpbmsuYwppbmRleCBkNTNlNjUwLi5hMmVkMjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9uZXRsaW5rLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbmV0bGluay5jCkBAIC00NzcsNyArNDc3LDcgQEAKIAogCiAvKioKLSAqIHNjc2lfbmV0bGlua19pbml0IC0gQ2FsbGVkIGJ5IFNDU0kgc3Vic3lzdGVtIHRvIGludGlhbGl6ZQorICogc2NzaV9uZXRsaW5rX2luaXQgLSBDYWxsZWQgYnkgU0NTSSBzdWJzeXN0ZW0gdG8gaW5pdGlhbGl6ZQogICogCXRoZSBTQ1NJIHRyYW5zcG9ydCBuZXRsaW5rIGludGVyZmFjZQogICoKICAqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCmluZGV4IDRjNjhkMzYuLjQ5MGNlMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwpAQCAtODY0LDEzICs4NjQsMTUgQEAKIAogCWVycm9yID0gZGV2aWNlX2FkZCgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCWlmIChlcnJvcikgewotCQlwcmludGsoS0VSTl9JTkZPICJlcnJvciAxXG4iKTsKKwkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LAorCQkJCSJmYWlsZWQgdG8gYWRkIGRldmljZTogJWRcbiIsIGVycm9yKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnNkZXYtPnNkZXZfZGV2KTsKIAllcnJvciA9IGRldmljZV9hZGQoJnNkZXYtPnNkZXZfZGV2KTsKIAlpZiAoZXJyb3IpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZXJyb3IgMlxuIik7CisJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKKwkJCQkiZmFpbGVkIHRvIGFkZCBjbGFzcyBkZXZpY2U6ICVkXG4iLCBlcnJvcik7CiAJCWRldmljZV9kZWwoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIAkJcmV0dXJuIGVycm9yOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5jIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKaW5kZXggNmI5N2RlZC4uYjQ1NDNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKQEAgLTE4NjYsNyArMTg2Niw3IEBACiAgKgogICogVGhpcyByb3V0aW5lIGlzIHNpbWlsYXIgdG8gc3ltX3NldF93b3JrYXJvdW5kcygpLCBleGNlcHQKICAqIHRoYXQsIGF0IHRoaXMgcG9pbnQsIHdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBkZXZpY2Ugd2FzCi0gKiBzdWNjZXNzZnVsbHkgaW50aWFsaXplZCBhdCBsZWFzdCBvbmNlIGJlZm9yZSwgYW5kIHNvIG1vc3QKKyAqIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBhdCBsZWFzdCBvbmNlIGJlZm9yZSwgYW5kIHNvIG1vc3QKICAqIG9mIHRoZSBzdGVwcyB0YWtlbiB0aGVyZSBhcmUgdW4tbmVlZGVkIGhlcmUuCiAgKi8KIHN0YXRpYyB2b2lkIHN5bTJfcmVzZXRfd29ya2Fyb3VuZHMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCAxODhhZmY2Li5jMWRmNzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKQEAgLTc3NiwyNCArNzc2LDcgQEAKIAlib29sICJFbmFibGUgVUFSVDAgaGFyZHdhcmUgZmxvdyBjb250cm9sIgogCWRlcGVuZHMgb24gU0VSSUFMX0JGSU5fVUFSVDAKIAloZWxwCi0JICBFbmFibGUgaGFyZHdhcmUgZmxvdyBjb250cm9sIGluIHRoZSBkcml2ZXIuIFVzaW5nIEdQSU8gZW11bGF0ZSB0aGUgQ1RTL1JUUwotCSAgc2lnbmFsLgotCi1jb25maWcgVUFSVDBfQ1RTX1BJTgotCWludCAiVUFSVDAgQ1RTIHBpbiIKLQlkZXBlbmRzIG9uIEJGSU5fVUFSVDBfQ1RTUlRTICYmICFCRjU0OAotCWRlZmF1bHQgMjMKLQloZWxwCi0JICBUaGUgZGVmYXVsdCBwaW4gaXMgR1BJT19HUDcuCi0JICBSZWZlciB0byBhcmNoL2JsYWNrZmluL21hY2gtKi9pbmNsdWRlL21hY2gvZ3Bpby5oIHRvIHNlZSB0aGUgR1BJTyBtYXAuCi0KLWNvbmZpZyBVQVJUMF9SVFNfUElOCi0JaW50ICJVQVJUMCBSVFMgcGluIgotCWRlcGVuZHMgb24gQkZJTl9VQVJUMF9DVFNSVFMgJiYgIUJGNTQ4Ci0JZGVmYXVsdCAyMgotCWhlbHAKLQkgIFRoZSBkZWZhdWx0IHBpbiBpcyBHUElPX0dQNi4KLQkgIFJlZmVyIHRvIGFyY2gvYmxhY2tmaW4vbWFjaC0qL2luY2x1ZGUvbWFjaC9ncGlvLmggdG8gc2VlIHRoZSBHUElPIG1hcC4KKwkgIEVuYWJsZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaW4gdGhlIGRyaXZlci4KIAogY29uZmlnIFNFUklBTF9CRklOX1VBUlQxCiAJYm9vbCAiRW5hYmxlIFVBUlQxIgpAQCAtODA1LDIyICs3ODgsNyBAQAogCWJvb2wgIkVuYWJsZSBVQVJUMSBoYXJkd2FyZSBmbG93IGNvbnRyb2wiCiAJZGVwZW5kcyBvbiBTRVJJQUxfQkZJTl9VQVJUMQogCWhlbHAKLQkgIEVuYWJsZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaW4gdGhlIGRyaXZlci4gVXNpbmcgR1BJTyBlbXVsYXRlIHRoZSBDVFMvUlRTCi0JICBzaWduYWwuCi0KLWNvbmZpZyBVQVJUMV9DVFNfUElOCi0JaW50ICJVQVJUMSBDVFMgcGluIgotCWRlcGVuZHMgb24gQkZJTl9VQVJUMV9DVFNSVFMgJiYgIUJGNTQ4Ci0JZGVmYXVsdCAtMQotCWhlbHAKLQkgIFJlZmVyIHRvIGFyY2gvYmxhY2tmaW4vbWFjaC0qL2luY2x1ZGUvbWFjaC9ncGlvLmggdG8gc2VlIHRoZSBHUElPIG1hcC4KLQotY29uZmlnIFVBUlQxX1JUU19QSU4KLQlpbnQgIlVBUlQxIFJUUyBwaW4iCi0JZGVwZW5kcyBvbiBCRklOX1VBUlQxX0NUU1JUUyAmJiAhQkY1NDgKLQlkZWZhdWx0IC0xCi0JaGVscAotCSAgUmVmZXIgdG8gYXJjaC9ibGFja2Zpbi9tYWNoLSovaW5jbHVkZS9tYWNoL2dwaW8uaCB0byBzZWUgdGhlIEdQSU8gbWFwLgorCSAgRW5hYmxlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBpbiB0aGUgZHJpdmVyLgogCiBjb25maWcgU0VSSUFMX0JGSU5fVUFSVDIKIAlib29sICJFbmFibGUgVUFSVDIiCkBAIC04MzIsMjIgKzgwMCw3IEBACiAJYm9vbCAiRW5hYmxlIFVBUlQyIGhhcmR3YXJlIGZsb3cgY29udHJvbCIKIAlkZXBlbmRzIG9uIFNFUklBTF9CRklOX1VBUlQyCiAJaGVscAotCSAgRW5hYmxlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBpbiB0aGUgZHJpdmVyLiBVc2luZyBHUElPIGVtdWxhdGUgdGhlIENUUy9SVFMKLQkgIHNpZ25hbC4KLQotY29uZmlnIFVBUlQyX0NUU19QSU4KLQlpbnQgIlVBUlQyIENUUyBwaW4iCi0JZGVwZW5kcyBvbiBCRklOX1VBUlQyX0NUU1JUUyAmJiAhQkY1NDgKLQlkZWZhdWx0IC0xCi0JaGVscAotCSAgUmVmZXIgdG8gYXJjaC9ibGFja2Zpbi9tYWNoLSovaW5jbHVkZS9tYWNoL2dwaW8uaCB0byBzZWUgdGhlIEdQSU8gbWFwLgotCi1jb25maWcgVUFSVDJfUlRTX1BJTgotCWludCAiVUFSVDIgUlRTIHBpbiIKLQlkZXBlbmRzIG9uIEJGSU5fVUFSVDJfQ1RTUlRTICYmICFCRjU0OAotCWRlZmF1bHQgLTEKLQloZWxwCi0JICBSZWZlciB0byBhcmNoL2JsYWNrZmluL21hY2gtKi9pbmNsdWRlL21hY2gvZ3Bpby5oIHRvIHNlZSB0aGUgR1BJTyBtYXAuCisJICBFbmFibGUgaGFyZHdhcmUgZmxvdyBjb250cm9sIGluIHRoZSBkcml2ZXIuCiAKIGNvbmZpZyBTRVJJQUxfQkZJTl9VQVJUMwogCWJvb2wgIkVuYWJsZSBVQVJUMyIKQEAgLTg1OSwyMiArODEyLDcgQEAKIAlib29sICJFbmFibGUgVUFSVDMgaGFyZHdhcmUgZmxvdyBjb250cm9sIgogCWRlcGVuZHMgb24gU0VSSUFMX0JGSU5fVUFSVDMKIAloZWxwCi0JICBFbmFibGUgaGFyZHdhcmUgZmxvdyBjb250cm9sIGluIHRoZSBkcml2ZXIuIFVzaW5nIEdQSU8gZW11bGF0ZSB0aGUgQ1RTL1JUUwotCSAgc2lnbmFsLgotCi1jb25maWcgVUFSVDNfQ1RTX1BJTgotCWludCAiVUFSVDMgQ1RTIHBpbiIKLQlkZXBlbmRzIG9uIEJGSU5fVUFSVDNfQ1RTUlRTICYmICFCRjU0OAotCWRlZmF1bHQgLTEKLQloZWxwCi0JICBSZWZlciB0byBhcmNoL2JsYWNrZmluL21hY2gtKi9pbmNsdWRlL21hY2gvZ3Bpby5oIHRvIHNlZSB0aGUgR1BJTyBtYXAuCi0KLWNvbmZpZyBVQVJUM19SVFNfUElOCi0JaW50ICJVQVJUMyBSVFMgcGluIgotCWRlcGVuZHMgb24gQkZJTl9VQVJUM19DVFNSVFMgJiYgIUJGNTQ4Ci0JZGVmYXVsdCAtMQotCWhlbHAKLQkgIFJlZmVyIHRvIGFyY2gvYmxhY2tmaW4vbWFjaC0qL2luY2x1ZGUvbWFjaC9ncGlvLmggdG8gc2VlIHRoZSBHUElPIG1hcC4KKwkgIEVuYWJsZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaW4gdGhlIGRyaXZlci4KIAogY29uZmlnIFNFUklBTF9JTVgKIAlib29sICJJTVggc2VyaWFsIHBvcnQgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMgYi9kcml2ZXJzL3NlcmlhbC9iZmluXzV4eC5jCmluZGV4IDE5Y2FjOWYuLmUzODFiODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBCbGFja2ZpbiBPbi1DaGlwIFNlcmlhbCBEcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgMjAwNi0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwogICoKQEAgLTEyLDYgKzEyLDkgQEAKICNkZWZpbmUgU1VQUE9SVF9TWVNSUQogI2VuZGlmCiAKKyNkZWZpbmUgRFJJVkVSX05BTUUgImJmaW4tdWFydCIKKyNkZWZpbmUgcHJfZm10KGZtdCkgRFJJVkVSX05BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgpAQCAtMjMsMjEgKzI2LDIwIEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZ2RiLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19LR0RCX1NFUklBTF9DT05TT0xFKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfS0dEQl9TRVJJQUxfQ09OU09MRV9NT0RVTEUpCi0jaW5jbHVkZSA8bGludXgva2dkYi5oPgotI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgotI2luY2x1ZGUgPG1hY2gvYmZpbl9zZXJpYWxfNXh4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisKKyNkZWZpbmUgcG9ydF9tZW1iYXNlKHVhcnQpICAgICAoKChzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqKSh1YXJ0KSktPnBvcnQubWVtYmFzZSkKKyNkZWZpbmUgZ2V0X2xzcl9jYWNoZSh1YXJ0KSAgICAoKChzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqKSh1YXJ0KSktPmxzcikKKyNkZWZpbmUgcHV0X2xzcl9jYWNoZSh1YXJ0LCB2KSAoKChzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqKSh1YXJ0KSktPmxzciA9ICh2KSkKKyNpbmNsdWRlIDxhc20vYmZpbl9zZXJpYWwuaD4KIAogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9NT0RVTEUKICMgdW5kZWYgQ09ORklHX0VBUkxZX1BSSU5USwpAQCAtNDgsMTIgKzUwLDExIEBACiAjZW5kaWYKIAogLyogVUFSVCBuYW1lIGFuZCBkZXZpY2UgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgQkZJTl9TRVJJQUxfTkFNRQkidHR5QkYiCisjZGVmaW5lIEJGSU5fU0VSSUFMX0RFVl9OQU1FCSJ0dHlCRiIKICNkZWZpbmUgQkZJTl9TRVJJQUxfTUFKT1IJMjA0CiAjZGVmaW5lIEJGSU5fU0VSSUFMX01JTk9SCTY0CiAKLXN0YXRpYyBzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCBiZmluX3NlcmlhbF9wb3J0c1tCRklOX1VBUlRfTlJfUE9SVFNdOwotc3RhdGljIGludCBucl9hY3RpdmVfcG9ydHMgPSBBUlJBWV9TSVpFKGJmaW5fc2VyaWFsX3Jlc291cmNlKTsKK3N0YXRpYyBzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqYmZpbl9zZXJpYWxfcG9ydHNbQkZJTl9VQVJUX05SX1BPUlRTXTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0tHREJfU0VSSUFMX0NPTlNPTEUpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19LR0RCX1NFUklBTF9DT05TT0xFX01PRFVMRSkKQEAgLTc0MywxNCArNzQ0LDE0IEBACiAJCX0KIAl9CiAJaWYgKHVhcnQtPnJ0c19waW4gPj0gMCkgewotCQlncGlvX3JlcXVlc3QodWFydC0+cnRzX3BpbiwgRFJJVkVSX05BTUUpOwogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQodWFydC0+cnRzX3BpbiwgMCk7CiAJfQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0hBUkRfQ1RTUlRTCi0JaWYgKHJlcXVlc3RfaXJxKHVhcnQtPnN0YXR1c19pcnEsCisJaWYgKHVhcnQtPmN0c19waW4gPj0gMCAmJiByZXF1ZXN0X2lycSh1YXJ0LT5zdGF0dXNfaXJxLAogCQliZmluX3NlcmlhbF9tY3RybF9jdHNfaW50LAogCQlJUlFGX0RJU0FCTEVELCAiQkZJTl9VQVJUX01PREVNX1NUQVRVUyIsIHVhcnQpKSB7CisJCXVhcnQtPmN0c19waW4gPSAtMTsKIAkJcHJfaW5mbygiVW5hYmxlIHRvIGF0dGFjaCBCbGFja0ZpbiBVQVJUIE1vZGVtIFN0YXR1cyBpbnRlcnJ1cHQuXG4iKTsKIAl9CiAKQEAgLTc5NiwxMSArNzk3LDkgQEAKICNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCiAJaWYgKHVhcnQtPmN0c19waW4gPj0gMCkKIAkJZnJlZV9pcnEoZ3Bpb190b19pcnEodWFydC0+Y3RzX3BpbiksIHVhcnQpOwotCWlmICh1YXJ0LT5ydHNfcGluID49IDApCi0JCWdwaW9fZnJlZSh1YXJ0LT5ydHNfcGluKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9IQVJEX0NUU1JUUwotCWlmIChVQVJUX0dFVF9JRVIodWFydCkgJiBFRFNTSSkKKwlpZiAodWFydC0+Y3RzX3BpbiA+PSAwKQogCQlmcmVlX2lycSh1YXJ0LT5zdGF0dXNfaXJxLCB1YXJ0KTsKICNlbmRpZgogfQpAQCAtOTYyLDMzICs5NjEsMzMgQEAKICAqLwogc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfc2V0X2xkaXNjKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBsZCkKIHsKLQlpbnQgbGluZSA9IHBvcnQtPmxpbmU7CisJc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQgPSAoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKilwb3J0OwogCXVuc2lnbmVkIHNob3J0IHZhbDsKIAogCXN3aXRjaCAobGQpIHsKIAljYXNlIE5fSVJEQToKLQkJdmFsID0gVUFSVF9HRVRfR0NUTCgmYmZpbl9zZXJpYWxfcG9ydHNbbGluZV0pOworCQl2YWwgPSBVQVJUX0dFVF9HQ1RMKHVhcnQpOwogCQl2YWwgfD0gKElSRU4gfCBSUE9MQyk7Ci0JCVVBUlRfUFVUX0dDVEwoJmJmaW5fc2VyaWFsX3BvcnRzW2xpbmVdLCB2YWwpOworCQlVQVJUX1BVVF9HQ1RMKHVhcnQsIHZhbCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXZhbCA9IFVBUlRfR0VUX0dDVEwoJmJmaW5fc2VyaWFsX3BvcnRzW2xpbmVdKTsKKwkJdmFsID0gVUFSVF9HRVRfR0NUTCh1YXJ0KTsKIAkJdmFsICY9IH4oSVJFTiB8IFJQT0xDKTsKLQkJVUFSVF9QVVRfR0NUTCgmYmZpbl9zZXJpYWxfcG9ydHNbbGluZV0sIHZhbCk7CisJCVVBUlRfUFVUX0dDVEwodWFydCwgdmFsKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGJmaW5fc2VyaWFsX3Jlc2V0X2lyZGEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlpbnQgbGluZSA9IHBvcnQtPmxpbmU7CisJc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQgPSAoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKilwb3J0OwogCXVuc2lnbmVkIHNob3J0IHZhbDsKIAotCXZhbCA9IFVBUlRfR0VUX0dDVEwoJmJmaW5fc2VyaWFsX3BvcnRzW2xpbmVdKTsKKwl2YWwgPSBVQVJUX0dFVF9HQ1RMKHVhcnQpOwogCXZhbCAmPSB+KElSRU4gfCBSUE9MQyk7Ci0JVUFSVF9QVVRfR0NUTCgmYmZpbl9zZXJpYWxfcG9ydHNbbGluZV0sIHZhbCk7CisJVUFSVF9QVVRfR0NUTCh1YXJ0LCB2YWwpOwogCVNTWU5DKCk7CiAJdmFsIHw9IChJUkVOIHwgUlBPTEMpOwotCVVBUlRfUFVUX0dDVEwoJmJmaW5fc2VyaWFsX3BvcnRzW2xpbmVdLCB2YWwpOworCVVBUlRfUFVUX0dDVEwodWFydCwgdmFsKTsKIAlTU1lOQygpOwogfQogCkBAIC0xMDcwLDg1ICsxMDY5LDYgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IGJmaW5fc2VyaWFsX2h3X2luaXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fVUFSVDAKLQlwZXJpcGhlcmFsX3JlcXVlc3QoUF9VQVJUMF9UWCwgRFJJVkVSX05BTUUpOwotCXBlcmlwaGVyYWxfcmVxdWVzdChQX1VBUlQwX1JYLCBEUklWRVJfTkFNRSk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9VQVJUMQotCXBlcmlwaGVyYWxfcmVxdWVzdChQX1VBUlQxX1RYLCBEUklWRVJfTkFNRSk7Ci0JcGVyaXBoZXJhbF9yZXF1ZXN0KFBfVUFSVDFfUlgsIERSSVZFUl9OQU1FKTsKLQotIyBpZiBkZWZpbmVkKENPTkZJR19CRklOX1VBUlQxX0NUU1JUUykgJiYgZGVmaW5lZChDT05GSUdfQkY1NHgpCi0JcGVyaXBoZXJhbF9yZXF1ZXN0KFBfVUFSVDFfUlRTLCBEUklWRVJfTkFNRSk7Ci0JcGVyaXBoZXJhbF9yZXF1ZXN0KFBfVUFSVDFfQ1RTLCBEUklWRVJfTkFNRSk7Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9VQVJUMgotCXBlcmlwaGVyYWxfcmVxdWVzdChQX1VBUlQyX1RYLCBEUklWRVJfTkFNRSk7Ci0JcGVyaXBoZXJhbF9yZXF1ZXN0KFBfVUFSVDJfUlgsIERSSVZFUl9OQU1FKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX1VBUlQzCi0JcGVyaXBoZXJhbF9yZXF1ZXN0KFBfVUFSVDNfVFgsIERSSVZFUl9OQU1FKTsKLQlwZXJpcGhlcmFsX3JlcXVlc3QoUF9VQVJUM19SWCwgRFJJVkVSX05BTUUpOwotCi0jIGlmIGRlZmluZWQoQ09ORklHX0JGSU5fVUFSVDNfQ1RTUlRTKSAmJiBkZWZpbmVkKENPTkZJR19CRjU0eCkKLQlwZXJpcGhlcmFsX3JlcXVlc3QoUF9VQVJUM19SVFMsIERSSVZFUl9OQU1FKTsKLQlwZXJpcGhlcmFsX3JlcXVlc3QoUF9VQVJUM19DVFMsIERSSVZFUl9OQU1FKTsKLSMgZW5kaWYKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgYmZpbl9zZXJpYWxfaW5pdF9wb3J0cyh2b2lkKQotewotCXN0YXRpYyBpbnQgZmlyc3QgPSAxOwotCWludCBpOwotCi0JaWYgKCFmaXJzdCkKLQkJcmV0dXJuOwotCWZpcnN0ID0gMDsKLQotCWJmaW5fc2VyaWFsX2h3X2luaXQoKTsKLQotCWZvciAoaSA9IDA7IGkgPCBucl9hY3RpdmVfcG9ydHM7IGkrKykgewotCQlzcGluX2xvY2tfaW5pdCgmYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC5sb2NrKTsKLQkJYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC51YXJ0Y2xrICAgPSBnZXRfc2NsaygpOwotCQliZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0LmZpZm9zaXplICA9IEJGSU5fVUFSVF9UWF9GSUZPX1NJWkU7Ci0JCWJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQub3BzICAgICAgID0gJmJmaW5fc2VyaWFsX3BvcHM7Ci0JCWJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQubGluZSAgICAgID0gaTsKLQkJYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC5pb3R5cGUgICAgPSBVUElPX01FTTsKLQkJYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC5tZW1iYXNlICAgPQotCQkJKHZvaWQgX19pb21lbSAqKWJmaW5fc2VyaWFsX3Jlc291cmNlW2ldLnVhcnRfYmFzZV9hZGRyOwotCQliZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0Lm1hcGJhc2UgICA9Ci0JCQliZmluX3NlcmlhbF9yZXNvdXJjZVtpXS51YXJ0X2Jhc2VfYWRkcjsKLQkJYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC5pcnEgICAgICAgPQotCQkJYmZpbl9zZXJpYWxfcmVzb3VyY2VbaV0udWFydF9pcnE7Ci0JCWJmaW5fc2VyaWFsX3BvcnRzW2ldLnN0YXR1c19pcnEJICAgID0KLQkJCWJmaW5fc2VyaWFsX3Jlc291cmNlW2ldLnVhcnRfc3RhdHVzX2lycTsKLQkJYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC5mbGFncyAgICAgPSBVUEZfQk9PVF9BVVRPQ09ORjsKLSNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fRE1BCi0JCWJmaW5fc2VyaWFsX3BvcnRzW2ldLnR4X2RvbmUJICAgID0gMTsKLQkJYmZpbl9zZXJpYWxfcG9ydHNbaV0udHhfY291bnQJICAgID0gMDsKLQkJYmZpbl9zZXJpYWxfcG9ydHNbaV0udHhfZG1hX2NoYW5uZWwgPQotCQkJYmZpbl9zZXJpYWxfcmVzb3VyY2VbaV0udWFydF90eF9kbWFfY2hhbm5lbDsKLQkJYmZpbl9zZXJpYWxfcG9ydHNbaV0ucnhfZG1hX2NoYW5uZWwgPQotCQkJYmZpbl9zZXJpYWxfcmVzb3VyY2VbaV0udWFydF9yeF9kbWFfY2hhbm5lbDsKLQkJaW5pdF90aW1lcigmKGJmaW5fc2VyaWFsX3BvcnRzW2ldLnJ4X2RtYV90aW1lcikpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fSEFSRF9DVFNSVFMpCi0JCWJmaW5fc2VyaWFsX3BvcnRzW2ldLmN0c19waW4JICAgID0KLQkJCWJmaW5fc2VyaWFsX3Jlc291cmNlW2ldLnVhcnRfY3RzX3BpbjsKLQkJYmZpbl9zZXJpYWxfcG9ydHNbaV0ucnRzX3BpbgkgICAgPQotCQkJYmZpbl9zZXJpYWxfcmVzb3VyY2VbaV0udWFydF9ydHNfcGluOwotI2VuZGlmCi0JfQotfQotCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fQ09OU09MRSkgfHwgZGVmaW5lZChDT05GSUdfRUFSTFlfUFJJTlRLKQogLyoKICAqIElmIHRoZSBwb3J0IHdhcyBhbHJlYWR5IGluaXRpYWxpc2VkIChlZywgYnkgYSBib290IGxvYWRlciksCkBAIC0xMTk2LDYgKzExMTYsMzQgQEAKIAogc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBiZmluX3NlcmlhbF9yZWc7CiAKK3N0YXRpYyB2b2lkIGJmaW5fc2VyaWFsX2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCit7CisJc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQgPSAoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKilwb3J0OworCXdoaWxlICghKFVBUlRfR0VUX0xTUih1YXJ0KSAmIFRIUkUpKQorCQliYXJyaWVyKCk7CisJVUFSVF9QVVRfQ0hBUih1YXJ0LCBjaCk7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkIChDT05GSUdfU0VSSUFMX0JGSU5fQ09OU09MRSkgfHwKKwkJIGRlZmluZWQgKENPTkZJR19FQVJMWV9QUklOVEspICovCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fQ09OU09MRQorI2RlZmluZSBDTEFTU19CRklOX0NPTlNPTEUJImJmaW4tY29uc29sZSIKKy8qCisgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBvbiBlbnRlcmluZworICovCitzdGF0aWMgdm9pZAorYmZpbl9zZXJpYWxfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9IGJmaW5fc2VyaWFsX3BvcnRzW2NvLT5pbmRleF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1YXJ0LT5wb3J0LmxvY2ssIGZsYWdzKTsKKwl1YXJ0X2NvbnNvbGVfd3JpdGUoJnVhcnQtPnBvcnQsIHMsIGNvdW50LCBiZmluX3NlcmlhbF9jb25zb2xlX3B1dGNoYXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVhcnQtPnBvcnQubG9jaywgZmxhZ3MpOworCit9CisKIHN0YXRpYyBpbnQgX19pbml0CiBiZmluX3NlcmlhbF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKIHsKQEAgLTEyMTUsOSArMTE2MywxMiBAQAogCSAqIGlmIHNvLCBzZWFyY2ggZm9yIHRoZSBmaXJzdCBhdmFpbGFibGUgcG9ydCB0aGF0IGRvZXMgaGF2ZQogCSAqIGNvbnNvbGUgc3VwcG9ydC4KIAkgKi8KLQlpZiAoY28tPmluZGV4ID09IC0xIHx8IGNvLT5pbmRleCA+PSBucl9hY3RpdmVfcG9ydHMpCi0JCWNvLT5pbmRleCA9IDA7Ci0JdWFydCA9ICZiZmluX3NlcmlhbF9wb3J0c1tjby0+aW5kZXhdOworCWlmIChjby0+aW5kZXggPCAwIHx8IGNvLT5pbmRleCA+PSBCRklOX1VBUlRfTlJfUE9SVFMpCisJCXJldHVybiAtRU5PREVWOworCisJdWFydCA9IGJmaW5fc2VyaWFsX3BvcnRzW2NvLT5pbmRleF07CisJaWYgKCF1YXJ0KQorCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChvcHRpb25zKQogCQl1YXJ0X3BhcnNlX29wdGlvbnMob3B0aW9ucywgJmJhdWQsICZwYXJpdHksICZiaXRzLCAmZmxvdyk7CkBAIC0xMjI2LDM2ICsxMTc3LDkgQEAKIAogCXJldHVybiB1YXJ0X3NldF9vcHRpb25zKCZ1YXJ0LT5wb3J0LCBjbywgYmF1ZCwgcGFyaXR5LCBiaXRzLCBmbG93KTsKIH0KLSNlbmRpZiAvKiBkZWZpbmVkIChDT05GSUdfU0VSSUFMX0JGSU5fQ09OU09MRSkgfHwKLQkJCQkgZGVmaW5lZCAoQ09ORklHX0VBUkxZX1BSSU5USykgKi8KLQotI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9DT05TT0xFCi1zdGF0aWMgdm9pZCBiZmluX3NlcmlhbF9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGNoKQotewotCXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0ID0gKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICopcG9ydDsKLQl3aGlsZSAoIShVQVJUX0dFVF9MU1IodWFydCkgJiBUSFJFKSkKLQkJYmFycmllcigpOwotCVVBUlRfUFVUX0NIQVIodWFydCwgY2gpOwotCVNTWU5DKCk7Ci19Ci0KLS8qCi0gKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBvbiBlbnRlcmluZwotICovCi1zdGF0aWMgdm9pZAotYmZpbl9zZXJpYWxfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQlzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9ICZiZmluX3NlcmlhbF9wb3J0c1tjby0+aW5kZXhdOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdWFydC0+cG9ydC5sb2NrLCBmbGFncyk7Ci0JdWFydF9jb25zb2xlX3dyaXRlKCZ1YXJ0LT5wb3J0LCBzLCBjb3VudCwgYmZpbl9zZXJpYWxfY29uc29sZV9wdXRjaGFyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YXJ0LT5wb3J0LmxvY2ssIGZsYWdzKTsKLQotfQogCiBzdGF0aWMgc3RydWN0IGNvbnNvbGUgYmZpbl9zZXJpYWxfY29uc29sZSA9IHsKLQkubmFtZQkJPSBCRklOX1NFUklBTF9OQU1FLAorCS5uYW1lCQk9IEJGSU5fU0VSSUFMX0RFVl9OQU1FLAogCS53cml0ZQkJPSBiZmluX3NlcmlhbF9jb25zb2xlX3dyaXRlLAogCS5kZXZpY2UJCT0gdWFydF9jb25zb2xlX2RldmljZSwKIAkuc2V0dXAJCT0gYmZpbl9zZXJpYWxfY29uc29sZV9zZXR1cCwKQEAgLTEyNjMsNDQgKzExODcsMzAgQEAKIAkuaW5kZXgJCT0gLTEsCiAJLmRhdGEJCT0gJmJmaW5fc2VyaWFsX3JlZywKIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGJmaW5fc2VyaWFsX3JzX2NvbnNvbGVfaW5pdCh2b2lkKQotewotCWJmaW5fc2VyaWFsX2luaXRfcG9ydHMoKTsKLQlyZWdpc3Rlcl9jb25zb2xlKCZiZmluX3NlcmlhbF9jb25zb2xlKTsKLQotCXJldHVybiAwOwotfQotY29uc29sZV9pbml0Y2FsbChiZmluX3NlcmlhbF9yc19jb25zb2xlX2luaXQpOwotCiAjZGVmaW5lIEJGSU5fU0VSSUFMX0NPTlNPTEUJJmJmaW5fc2VyaWFsX2NvbnNvbGUKICNlbHNlCiAjZGVmaW5lIEJGSU5fU0VSSUFMX0NPTlNPTEUJTlVMTAogI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfQkZJTl9DT05TT0xFICovCiAKKyNpZmRlZglDT05GSUdfRUFSTFlfUFJJTlRLCitzdGF0aWMgc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgYmZpbl9lYXJseXByaW50a19wb3J0OworI2RlZmluZSBDTEFTU19CRklOX0VBUkxZUFJJTlRLCSJiZmluLWVhcmx5cHJpbnRrIgogCi0jaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5USwotc3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X3NlcmlhbF9wdXRjKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKKy8qCisgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBvbiBlbnRlcmluZworICovCitzdGF0aWMgdm9pZAorYmZpbl9lYXJseXByaW50a19jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGNvdW50KQogewotCXVuc2lnbmVkIHRpbWVvdXQgPSAweGZmZmY7Ci0Jc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQgPSAoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKilwb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQl3aGlsZSAoKCEoVUFSVF9HRVRfTFNSKHVhcnQpICYgVEhSRSkpICYmIC0tdGltZW91dCkKLQkJY3B1X3JlbGF4KCk7Ci0JVUFSVF9QVVRfQ0hBUih1YXJ0LCBjaCk7Ci19CisJaWYgKGJmaW5fZWFybHlwcmludGtfcG9ydC5wb3J0LmxpbmUgIT0gY28tPmluZGV4KQorCQlyZXR1cm47CiAKLXN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9zZXJpYWxfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqcywKLQkJCQkJdW5zaWduZWQgaW50IG4pCi17Ci0Jc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQgPSAmYmZpbl9zZXJpYWxfcG9ydHNbY29uLT5pbmRleF07Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrLCBzKyspIHsKLQkJaWYgKCpzID09ICdcbicpCi0JCQllYXJseV9zZXJpYWxfcHV0YygmdWFydC0+cG9ydCwgJ1xyJyk7Ci0JCWVhcmx5X3NlcmlhbF9wdXRjKCZ1YXJ0LT5wb3J0LCAqcyk7Ci0JfQorCXNwaW5fbG9ja19pcnFzYXZlKCZiZmluX2Vhcmx5cHJpbnRrX3BvcnQucG9ydC5sb2NrLCBmbGFncyk7CisJdWFydF9jb25zb2xlX3dyaXRlKCZiZmluX2Vhcmx5cHJpbnRrX3BvcnQucG9ydCwgcywgY291bnQsCisJCWJmaW5fc2VyaWFsX2NvbnNvbGVfcHV0Y2hhcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZpbl9lYXJseXByaW50a19wb3J0LnBvcnQubG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtMTMxMSwxOCArMTIyMSwzMjYgQEAKICAqLwogc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIGNvbnNvbGUgYmZpbl9lYXJseV9zZXJpYWxfY29uc29sZSA9IHsKIAkubmFtZSA9ICJlYXJseV9CRnVhcnQiLAotCS53cml0ZSA9IGVhcmx5X3NlcmlhbF93cml0ZSwKKwkud3JpdGUgPSBiZmluX2Vhcmx5cHJpbnRrX2NvbnNvbGVfd3JpdGUsCiAJLmRldmljZSA9IHVhcnRfY29uc29sZV9kZXZpY2UsCiAJLmZsYWdzID0gQ09OX1BSSU5UQlVGRkVSLAogCS5pbmRleCA9IC0xLAogCS5kYXRhICA9ICZiZmluX3NlcmlhbF9yZWcsCiB9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgYmZpbl9zZXJpYWxfcmVnID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLmRyaXZlcl9uYW1lCQk9IERSSVZFUl9OQU1FLAorCS5kZXZfbmFtZQkJPSBCRklOX1NFUklBTF9ERVZfTkFNRSwKKwkubWFqb3IJCQk9IEJGSU5fU0VSSUFMX01BSk9SLAorCS5taW5vcgkJCT0gQkZJTl9TRVJJQUxfTUlOT1IsCisJLm5yCQkJPSBCRklOX1VBUlRfTlJfUE9SVFMsCisJLmNvbnMJCQk9IEJGSU5fU0VSSUFMX0NPTlNPTEUsCit9OworCitzdGF0aWMgaW50IGJmaW5fc2VyaWFsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlyZXR1cm4gdWFydF9zdXNwZW5kX3BvcnQoJmJmaW5fc2VyaWFsX3JlZywgJnVhcnQtPnBvcnQpOworfQorCitzdGF0aWMgaW50IGJmaW5fc2VyaWFsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlyZXR1cm4gdWFydF9yZXN1bWVfcG9ydCgmYmZpbl9zZXJpYWxfcmVnLCAmdWFydC0+cG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgYmZpbl9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwlpZiAocGRldi0+aWQgPCAwIHx8IHBkZXYtPmlkID49IEJGSU5fVUFSVF9OUl9QT1JUUykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJXcm9uZyBiZmluIHVhcnQgcGxhdGZvcm0gZGV2aWNlIGlkLlxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWlmIChiZmluX3NlcmlhbF9wb3J0c1twZGV2LT5pZF0gPT0gTlVMTCkgeworCisJCXVhcnQgPSBremFsbG9jKHNpemVvZigqdWFydCksIEdGUF9LRVJORUwpOworCQlpZiAoIXVhcnQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiZmFpbCB0byBtYWxsb2MgYmZpbl9zZXJpYWxfcG9ydFxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQliZmluX3NlcmlhbF9wb3J0c1twZGV2LT5pZF0gPSB1YXJ0OworCisjaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5USworCQlpZiAoIShiZmluX2Vhcmx5cHJpbnRrX3BvcnQucG9ydC5tZW1iYXNlCisJCQkmJiBiZmluX2Vhcmx5cHJpbnRrX3BvcnQucG9ydC5saW5lID09IHBkZXYtPmlkKSkgeworCQkJLyoKKwkJCSAqIElmIHRoZSBwZXJpcGhlcmFsIFBJTnMgb2YgY3VycmVudCBwb3J0IGlzIGFsbG9jYXRlZAorCQkJICogaW4gZWFybHlwcmludGsgcHJvYmUgc3RhZ2UsIGRvbid0IGRvIGl0IGFnYWluLgorCQkJICovCisjZW5kaWYKKwkJcmV0ID0gcGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QoCisJCQkodW5zaWduZWQgc2hvcnQgKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwgRFJJVkVSX05BTUUpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJImZhaWwgdG8gcmVxdWVzdCBiZmluIHNlcmlhbCBwZXJpcGhlcmFsc1xuIik7CisJCQlnb3RvIG91dF9lcnJvcl9mcmVlX21lbTsKKwkJfQorI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKKwkJfQorI2VuZGlmCisKKwkJc3Bpbl9sb2NrX2luaXQoJnVhcnQtPnBvcnQubG9jayk7CisJCXVhcnQtPnBvcnQudWFydGNsayAgID0gZ2V0X3NjbGsoKTsKKwkJdWFydC0+cG9ydC5maWZvc2l6ZSAgPSBCRklOX1VBUlRfVFhfRklGT19TSVpFOworCQl1YXJ0LT5wb3J0Lm9wcyAgICAgICA9ICZiZmluX3NlcmlhbF9wb3BzOworCQl1YXJ0LT5wb3J0LmxpbmUgICAgICA9IHBkZXYtPmlkOworCQl1YXJ0LT5wb3J0LmlvdHlwZSAgICA9IFVQSU9fTUVNOworCQl1YXJ0LT5wb3J0LmZsYWdzICAgICA9IFVQRl9CT09UX0FVVE9DT05GOworCisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJCWlmIChyZXMgPT0gTlVMTCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGdldCBJT1JFU09VUkNFX01FTVxuIik7CisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBvdXRfZXJyb3JfZnJlZV9wZXJpcGhlcmFsczsKKwkJfQorCisJCXVhcnQtPnBvcnQubWVtYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwKKwkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCk7CisJCWlmICghdWFydC0+cG9ydC5tZW1iYXNlKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgbWFwIHVhcnQgSU9cbiIpOworCQkJcmV0ID0gLUVOWElPOworCQkJZ290byBvdXRfZXJyb3JfZnJlZV9wZXJpcGhlcmFsczsKKwkJfQorCQl1YXJ0LT5wb3J0Lm1hcGJhc2UgPSByZXMtPnN0YXJ0OworCisJCXVhcnQtPnBvcnQuaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwkJaWYgKHVhcnQtPnBvcnQuaXJxIDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gdWFydCBSWC9UWCBJUlEgc3BlY2lmaWVkXG4iKTsKKwkJCXJldCA9IC1FTk9FTlQ7CisJCQlnb3RvIG91dF9lcnJvcl91bm1hcDsKKwkJfQorCisJCXVhcnQtPnN0YXR1c19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOworCQlpZiAodWFydC0+c3RhdHVzX2lycSA8IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHVhcnQgc3RhdHVzIElSUSBzcGVjaWZpZWRcbiIpOworCQkJcmV0ID0gLUVOT0VOVDsKKwkJCWdvdG8gb3V0X2Vycm9yX3VubWFwOworCQl9CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fRE1BCisJCXVhcnQtPnR4X2RvbmUJICAgID0gMTsKKwkJdWFydC0+dHhfY291bnQJICAgID0gMDsKKworCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOworCQlpZiAocmVzID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHVhcnQgVFggRE1BIGNoYW5uZWwgc3BlY2lmaWVkXG4iKTsKKwkJCXJldCA9IC1FTk9FTlQ7CisJCQlnb3RvIG91dF9lcnJvcl91bm1hcDsKKwkJfQorCQl1YXJ0LT50eF9kbWFfY2hhbm5lbCA9IHJlcy0+c3RhcnQ7CisKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAxKTsKKwkJaWYgKHJlcyA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyB1YXJ0IFJYIERNQSBjaGFubmVsIHNwZWNpZmllZFxuIik7CisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBvdXRfZXJyb3JfdW5tYXA7CisJCX0KKwkJdWFydC0+cnhfZG1hX2NoYW5uZWwgPSByZXMtPnN0YXJ0OworCisJCWluaXRfdGltZXIoJih1YXJ0LT5yeF9kbWFfdGltZXIpKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTKSB8fCBcCisJZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fSEFSRF9DVFNSVFMpCisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwkJaWYgKHJlcyA9PSBOVUxMKQorCQkJdWFydC0+Y3RzX3BpbiA9IC0xOworCQllbHNlCisJCQl1YXJ0LT5jdHNfcGluID0gcmVzLT5zdGFydDsKKworCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMSk7CisJCWlmIChyZXMgPT0gTlVMTCkKKwkJCXVhcnQtPnJ0c19waW4gPSAtMTsKKwkJZWxzZQorCQkJdWFydC0+cnRzX3BpbiA9IHJlcy0+c3RhcnQ7CisjIGlmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUykKKwkJaWYgKHVhcnQtPnJ0c19waW4gPj0gMCkKKwkJCWdwaW9fcmVxdWVzdCh1YXJ0LT5ydHNfcGluLCBEUklWRVJfTkFNRSk7CisjIGVuZGlmCisjZW5kaWYKKwl9CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fQ09OU09MRQorCWlmICghaXNfZWFybHlfcGxhdGZvcm1fZGV2aWNlKHBkZXYpKSB7CisjZW5kaWYKKwkJdWFydCA9IGJmaW5fc2VyaWFsX3BvcnRzW3BkZXYtPmlkXTsKKwkJdWFydC0+cG9ydC5kZXYgPSAmcGRldi0+ZGV2OworCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgdWFydCk7CisJCXJldCA9IHVhcnRfYWRkX29uZV9wb3J0KCZiZmluX3NlcmlhbF9yZWcsICZ1YXJ0LT5wb3J0KTsKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fQ09OU09MRQorCX0KKyNlbmRpZgorCisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJaWYgKHVhcnQpIHsKK291dF9lcnJvcl91bm1hcDoKKwkJaW91bm1hcCh1YXJ0LT5wb3J0Lm1lbWJhc2UpOworb3V0X2Vycm9yX2ZyZWVfcGVyaXBoZXJhbHM6CisJCXBlcmlwaGVyYWxfZnJlZV9saXN0KAorCQkJKHVuc2lnbmVkIHNob3J0ICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpOworb3V0X2Vycm9yX2ZyZWVfbWVtOgorCQlrZnJlZSh1YXJ0KTsKKwkJYmZpbl9zZXJpYWxfcG9ydHNbcGRldi0+aWRdID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBiZmluX3NlcmlhbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOworCisJaWYgKHVhcnQpIHsKKwkJdWFydF9yZW1vdmVfb25lX3BvcnQoJmJmaW5fc2VyaWFsX3JlZywgJnVhcnQtPnBvcnQpOworI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKKwkJaWYgKHVhcnQtPnJ0c19waW4gPj0gMCkKKwkJCWdwaW9fZnJlZSh1YXJ0LT5ydHNfcGluKTsKKyNlbmRpZgorCQlpb3VubWFwKHVhcnQtPnBvcnQubWVtYmFzZSk7CisJCXBlcmlwaGVyYWxfZnJlZV9saXN0KAorCQkJKHVuc2lnbmVkIHNob3J0ICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpOworCQlrZnJlZSh1YXJ0KTsKKwkJYmZpbl9zZXJpYWxfcG9ydHNbcGRldi0+aWRdID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmZpbl9zZXJpYWxfZHJpdmVyID0geworCS5wcm9iZQkJPSBiZmluX3NlcmlhbF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGJmaW5fc2VyaWFsX3JlbW92ZSksCisJLnN1c3BlbmQJPSBiZmluX3NlcmlhbF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gYmZpbl9zZXJpYWxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX0NPTlNPTEUpCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3QgZWFybHlfcGxhdGZvcm1fZHJpdmVyIGVhcmx5X2JmaW5fc2VyaWFsX2RyaXZlciA9IHsKKwkuY2xhc3Nfc3RyID0gQ0xBU1NfQkZJTl9DT05TT0xFLAorCS5wZHJ2ID0gJmJmaW5fc2VyaWFsX2RyaXZlciwKKwkucmVxdWVzdGVkX2lkID0gRUFSTFlfUExBVEZPUk1fSURfVU5TRVQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBiZmluX3NlcmlhbF9yc19jb25zb2xlX2luaXQodm9pZCkKK3sKKwllYXJseV9wbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmVhcmx5X2JmaW5fc2VyaWFsX2RyaXZlciwgRFJJVkVSX05BTUUpOworCisJZWFybHlfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKENMQVNTX0JGSU5fQ09OU09MRSwgQkZJTl9VQVJUX05SX1BPUlRTLCAwKTsKKworCXJlZ2lzdGVyX2NvbnNvbGUoJmJmaW5fc2VyaWFsX2NvbnNvbGUpOworCisJcmV0dXJuIDA7Cit9Citjb25zb2xlX2luaXRjYWxsKGJmaW5fc2VyaWFsX3JzX2NvbnNvbGVfaW5pdCk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKKy8qCisgKiBNZW1vcnkgY2FuJ3QgYmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IGR1cmluZyBlYXJseXByaW5rIGluaXQgc3RhZ2UuCisgKiBTbywgZG8gaW5kaXZpZHVhbCBwcm9iZSBmb3IgZWFybHlwcmluayB3aXRoIGEgc3RhdGljIHVhcnQgcG9ydCB2YXJpYWJsZS4KKyAqLworc3RhdGljIGludCBiZmluX2Vhcmx5cHJpbnRrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldDsKKworCWlmIChwZGV2LT5pZCA8IDAgfHwgcGRldi0+aWQgPj0gQkZJTl9VQVJUX05SX1BPUlRTKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIldyb25nIGVhcmx5cHJpbnRrIHBsYXRmb3JtIGRldmljZSBpZC5cbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlyZXQgPSBwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdCgKKwkJKHVuc2lnbmVkIHNob3J0ICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsIERSSVZFUl9OQU1FKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiZmFpbCB0byByZXF1ZXN0IGJmaW4gc2VyaWFsIHBlcmlwaGVyYWxzXG4iKTsKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGdldCBJT1JFU09VUkNFX01FTVxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0X2Vycm9yX2ZyZWVfcGVyaXBoZXJhbHM7CisJfQorCisJYmZpbl9lYXJseXByaW50a19wb3J0LnBvcnQubWVtYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwKKwkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCk7CisJaWYgKCFiZmluX2Vhcmx5cHJpbnRrX3BvcnQucG9ydC5tZW1iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBtYXAgdWFydCBJT1xuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBvdXRfZXJyb3JfZnJlZV9wZXJpcGhlcmFsczsKKwl9CisJYmZpbl9lYXJseXByaW50a19wb3J0LnBvcnQubWFwYmFzZSA9IHJlcy0+c3RhcnQ7CisJYmZpbl9lYXJseXByaW50a19wb3J0LnBvcnQubGluZSA9IHBkZXYtPmlkOworCWJmaW5fZWFybHlwcmludGtfcG9ydC5wb3J0LnVhcnRjbGsgPSBnZXRfc2NsaygpOworCWJmaW5fZWFybHlwcmludGtfcG9ydC5wb3J0LmZpZm9zaXplICA9IEJGSU5fVUFSVF9UWF9GSUZPX1NJWkU7CisJc3Bpbl9sb2NrX2luaXQoJmJmaW5fZWFybHlwcmludGtfcG9ydC5wb3J0LmxvY2spOworCisJcmV0dXJuIDA7CisKK291dF9lcnJvcl9mcmVlX3BlcmlwaGVyYWxzOgorCXBlcmlwaGVyYWxfZnJlZV9saXN0KAorCQkodW5zaWduZWQgc2hvcnQgKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiZmluX2Vhcmx5cHJpbnRrX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gYmZpbl9lYXJseXByaW50a19wcm9iZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBlYXJseV9wbGF0Zm9ybV9kcml2ZXIgZWFybHlfYmZpbl9lYXJseXByaW50a19kcml2ZXIgPSB7CisJLmNsYXNzX3N0ciA9IENMQVNTX0JGSU5fRUFSTFlQUklOVEssCisJLnBkcnYgPSAmYmZpbl9lYXJseXByaW50a19kcml2ZXIsCisJLnJlcXVlc3RlZF9pZCA9IEVBUkxZX1BMQVRGT1JNX0lEX1VOU0VULAorfTsKIAogc3RydWN0IGNvbnNvbGUgX19pbml0ICpiZmluX2Vhcmx5c2VyaWFsX2luaXQodW5zaWduZWQgaW50IHBvcnQsCiAJCQkJCQl1bnNpZ25lZCBpbnQgY2ZsYWcpCiB7Ci0Jc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQ7CiAJc3RydWN0IGt0ZXJtaW9zIHQ7CisJY2hhciBwb3J0X25hbWVbMjBdOworCisJaWYgKHBvcnQgPCAwIHx8IHBvcnQgPj0gQkZJTl9VQVJUX05SX1BPUlRTKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogT25seSBwcm9iZSByZXNvdXJjZSBvZiB0aGUgZ2l2ZW4gcG9ydCBpbiBlYXJseXByaW50ayBib290IGFyZy4KKwkgKiBUaGUgZXhwZWN0ZWQgcG9ydCBpZCBzaG91bGQgYmUgaW5kaWNhdGVkIGluIHBvcnQgbmFtZSBzdHJpbmcuCisJICovCisJc25wcmludGYocG9ydF9uYW1lLCAyMCwgRFJJVkVSX05BTUUgIi4lZCIsIHBvcnQpOworCWVhcmx5X3BsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZWFybHlfYmZpbl9lYXJseXByaW50a19kcml2ZXIsCisJCXBvcnRfbmFtZSk7CisJZWFybHlfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKENMQVNTX0JGSU5fRUFSTFlQUklOVEssIDEsIDApOworCisJaWYgKCFiZmluX2Vhcmx5cHJpbnRrX3BvcnQucG9ydC5tZW1iYXNlKQorCQlyZXR1cm4gTlVMTDsKIAogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9DT05TT0xFCiAJLyoKQEAgLTEzMzIsMTI0ICsxNTUwLDM2IEBACiAJYmZpbl9zZXJpYWxfY29uc29sZS5mbGFncyAmPSB+Q09OX1BSSU5UQlVGRkVSOwogI2VuZGlmCiAKLQlpZiAocG9ydCA9PSAtMSB8fCBwb3J0ID49IG5yX2FjdGl2ZV9wb3J0cykKLQkJcG9ydCA9IDA7Ci0JYmZpbl9zZXJpYWxfaW5pdF9wb3J0cygpOwogCWJmaW5fZWFybHlfc2VyaWFsX2NvbnNvbGUuaW5kZXggPSBwb3J0OwotCXVhcnQgPSAmYmZpbl9zZXJpYWxfcG9ydHNbcG9ydF07CiAJdC5jX2NmbGFnID0gY2ZsYWc7CiAJdC5jX2lmbGFnID0gMDsKIAl0LmNfb2ZsYWcgPSAwOwogCXQuY19sZmxhZyA9IElDQU5PTjsKIAl0LmNfbGluZSA9IHBvcnQ7Ci0JYmZpbl9zZXJpYWxfc2V0X3Rlcm1pb3MoJnVhcnQtPnBvcnQsICZ0LCAmdCk7CisJYmZpbl9zZXJpYWxfc2V0X3Rlcm1pb3MoJmJmaW5fZWFybHlwcmludGtfcG9ydC5wb3J0LCAmdCwgJnQpOworCiAJcmV0dXJuICZiZmluX2Vhcmx5X3NlcmlhbF9jb25zb2xlOwogfQotCiAjZW5kaWYgLyogQ09ORklHX0VBUkxZX1BSSU5USyAqLwogCi1zdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIGJmaW5fc2VyaWFsX3JlZyA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5kcml2ZXJfbmFtZQkJPSAiYmZpbi11YXJ0IiwKLQkuZGV2X25hbWUJCT0gQkZJTl9TRVJJQUxfTkFNRSwKLQkubWFqb3IJCQk9IEJGSU5fU0VSSUFMX01BSk9SLAotCS5taW5vcgkJCT0gQkZJTl9TRVJJQUxfTUlOT1IsCi0JLm5yCQkJPSBCRklOX1VBUlRfTlJfUE9SVFMsCi0JLmNvbnMJCQk9IEJGSU5fU0VSSUFMX0NPTlNPTEUsCi19OwotCi1zdGF0aWMgaW50IGJmaW5fc2VyaWFsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfYWN0aXZlX3BvcnRzOyBpKyspIHsKLQkJaWYgKGJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQuZGV2ICE9ICZkZXYtPmRldikKLQkJCWNvbnRpbnVlOwotCQl1YXJ0X3N1c3BlbmRfcG9ydCgmYmZpbl9zZXJpYWxfcmVnLCAmYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmZpbl9zZXJpYWxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBucl9hY3RpdmVfcG9ydHM7IGkrKykgewotCQlpZiAoYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC5kZXYgIT0gJmRldi0+ZGV2KQotCQkJY29udGludWU7Ci0JCXVhcnRfcmVzdW1lX3BvcnQoJmJmaW5fc2VyaWFsX3JlZywgJmJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJmaW5fc2VyaWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGRldi0+cmVzb3VyY2U7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fcmVzb3VyY2VzOyBpKyssIHJlcysrKQotCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQotCQkJYnJlYWs7Ci0KLQlpZiAoaSA8IGRldi0+bnVtX3Jlc291cmNlcykgewotCQlmb3IgKGkgPSAwOyBpIDwgbnJfYWN0aXZlX3BvcnRzOyBpKyssIHJlcysrKSB7Ci0JCQlpZiAoYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC5tYXBiYXNlICE9IHJlcy0+c3RhcnQpCi0JCQkJY29udGludWU7Ci0JCQliZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0LmRldiA9ICZkZXYtPmRldjsKLQkJCXVhcnRfYWRkX29uZV9wb3J0KCZiZmluX3NlcmlhbF9yZWcsICZiZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0KTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJmaW5fc2VyaWFsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfYWN0aXZlX3BvcnRzOyBpKyspIHsKLQkJaWYgKGJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQuZGV2ICE9ICZkZXYtPmRldikKLQkJCWNvbnRpbnVlOwotCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmYmZpbl9zZXJpYWxfcmVnLCAmYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydCk7Ci0JCWJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQuZGV2ID0gTlVMTDsKLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMpCi0JCWdwaW9fZnJlZShiZmluX3NlcmlhbF9wb3J0c1tpXS5jdHNfcGluKTsKLQkJZ3Bpb19mcmVlKGJmaW5fc2VyaWFsX3BvcnRzW2ldLnJ0c19waW4pOwotI2VuZGlmCi0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJmaW5fc2VyaWFsX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gYmZpbl9zZXJpYWxfcHJvYmUsCi0JLnJlbW92ZQkJPSBiZmluX3NlcmlhbF9yZW1vdmUsCi0JLnN1c3BlbmQJPSBiZmluX3NlcmlhbF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gYmZpbl9zZXJpYWxfcmVzdW1lLAotCS5kcml2ZXIJCT0gewotCQkubmFtZQk9ICJiZmluLXVhcnQiLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQl9LAotfTsKLQogc3RhdGljIGludCBfX2luaXQgYmZpbl9zZXJpYWxfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKLQlwcl9pbmZvKCJTZXJpYWw6IEJsYWNrZmluIHNlcmlhbCBkcml2ZXJcbiIpOwotCi0JYmZpbl9zZXJpYWxfaW5pdF9wb3J0cygpOworCXByX2luZm8oIkJsYWNrZmluIHNlcmlhbCBkcml2ZXJcbiIpOwogCiAJcmV0ID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJmJmaW5fc2VyaWFsX3JlZyk7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYmZpbl9zZXJpYWxfZHJpdmVyKTsKLQkJaWYgKHJldCkgewotCQkJcHJfZGVidWcoInVhcnQgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKLQkJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJmJmaW5fc2VyaWFsX3JlZyk7Ci0JCX0KKwlpZiAocmV0KSB7CisJCXByX2VycigiZmFpbGVkIHRvIHJlZ2lzdGVyICVzOiVkXG4iLAorCQkJYmZpbl9zZXJpYWxfcmVnLmRyaXZlcl9uYW1lLCByZXQpOwogCX0KKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYmZpbl9zZXJpYWxfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiZmFpbCB0byByZWdpc3RlciBiZmluIHVhcnRcbiIpOworCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZiZmluX3NlcmlhbF9yZWcpOworCX0KKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE0NjMsNyArMTU5Myw3IEBACiBtb2R1bGVfaW5pdChiZmluX3NlcmlhbF9pbml0KTsKIG1vZHVsZV9leGl0KGJmaW5fc2VyaWFsX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCJBdWJyZXkuTGkgPGF1YnJleS5saUBhbmFsb2cuY29tPiIpOworTU9EVUxFX0FVVEhPUigiU29uaWMgWmhhbmcsIEF1YnJleSBMaSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJCbGFja2ZpbiBnZW5lcmljIHNlcmlhbCBwb3J0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoQkZJTl9TRVJJQUxfTUFKT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMgYi9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYwppbmRleCBhMDY3MDQ2Li4xYTQ3OGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYwpAQCAtMzQxLDkgKzM0MSw5IEBACiAvKgogICogRm9yIERNQSwgdHhfYnVmL3R4X2RtYSBoYXZlIHRoZSBzYW1lIHJlbGF0aW9uc2hpcCBhcyByeF9idWYvcnhfZG1hOgogICogIC0gVGhlIGJ1ZmZlciBpcyBlaXRoZXIgdmFsaWQgZm9yIENQVSBhY2Nlc3MsIGVsc2UgTlVMTAotICogIC0gSWYgdGhlIGJ1ZmZlciBpcyB2YWxpZCwgc28gaXMgaXRzIERNQSBhZGRyZXNzcworICogIC0gSWYgdGhlIGJ1ZmZlciBpcyB2YWxpZCwgc28gaXMgaXRzIERNQSBhZGRyZXNzCiAgKgotICogVGhpcyBkcml2ZXIgbWFuYWdlcyB0aGUgZG1hIGFkZHJlc3NzIHVubGVzcyBtZXNzYWdlLT5pc19kbWFfbWFwcGVkLgorICogVGhpcyBkcml2ZXIgbWFuYWdlcyB0aGUgZG1hIGFkZHJlc3MgdW5sZXNzIG1lc3NhZ2UtPmlzX2RtYV9tYXBwZWQuCiAgKi8KIHN0YXRpYyBpbnQKIGF0bWVsX3NwaV9kbWFfbWFwX3hmZXIoc3RydWN0IGF0bWVsX3NwaSAqYXMsIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlkZXYuYyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCmluZGV4IDRlNjI0NWUuLjYwMzQyODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaWRldi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCkBAIC0zOCw3ICszOCw3IEBACiAKIAogLyoKLSAqIFRoaXMgc3VwcG9ydHMgYWNjY2VzcyB0byBTUEkgZGV2aWNlcyB1c2luZyBub3JtYWwgdXNlcnNwYWNlIEkvTyBjYWxscy4KKyAqIFRoaXMgc3VwcG9ydHMgYWNjZXNzIHRvIFNQSSBkZXZpY2VzIHVzaW5nIG5vcm1hbCB1c2Vyc3BhY2UgSS9PIGNhbGxzLgogICogTm90ZSB0aGF0IHdoaWxlIHRyYWRpdGlvbmFsIFVOSVgvUE9TSVggSS9PIHNlbWFudGljcyBhcmUgaGFsZiBkdXBsZXgsCiAgKiBhbmQgb2Z0ZW4gbWFzayBtZXNzYWdlIGJvdW5kYXJpZXMsIGZ1bGwgU1BJIHN1cHBvcnQgcmVxdWlyZXMgZnVsbCBkdXBsZXgKICAqIHRyYW5zZmVycy4gIFRoZXJlIGFyZSBzZXZlcmFsIGtpbmRzIG9mIGludGVybmFsIG1lc3NhZ2UgYm91bmRhcmllcyB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCBlMmQ1ODY5Li41YzhmY2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtMTIzLDYgKzEyMyw4IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9jczU1MzVfZ3Bpby9LY29uZmlnIgorCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy96cmFtL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQppbmRleCBjN2QyMjI0Li5kNTM4ODYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC00NCw2ICs0NCw3IEBACiBvYmotJChDT05GSUdfTVJTVF9SQVJfSEFORExFUikJKz0gbWVtcmFyLwogb2JqLSQoQ09ORklHX0RYX1NFUCkgICAgICAgICAgICArPSBzZXAvCiBvYmotJChDT05GSUdfSUlPKQkJKz0gaWlvLworb2JqLSQoQ09ORklHX0NTNTUzNV9HUElPKQkrPSBjczU1MzVfZ3Bpby8KIG9iai0kKENPTkZJR19aUkFNKQkJKz0genJhbS8KIG9iai0kKENPTkZJR19XTEFHUzQ5X0gyKQkrPSB3bGFnczQ5X2gyLwogb2JqLSQoQ09ORklHX1dMQUdTNDlfSDI1KQkrPSB3bGFnczQ5X2gyNS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jczU1MzVfZ3Bpby9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2NzNTUzNV9ncGlvL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiM2E4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jczU1MzVfZ3Bpby9LY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKK2NvbmZpZyBDUzU1MzVfR1BJTworCXRyaXN0YXRlICJBTUQgQ1M1NTM1L0NTNTUzNiBHUElPIChHZW9kZSBDb21wYW5pb24gRGV2aWNlKSIKKwlkZXBlbmRzIG9uIFg4Nl8zMgorCWhlbHAKKwkgIE5vdGU6IHRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQuICBQbGVhc2UgdXNlIHRoZSBjczU1MzUtZ3BpbyBtb2R1bGUKKwkgIGluIHRoZSBHUElPIHNlY3Rpb24gaW5zdGVhZCAoQ09ORklHX0dQSU9fQ1M1NTM1KS4KKworCSAgR2l2ZSB1c2Vyc3BhY2UgYWNjZXNzIHRvIHRoZSBHUElPIHBpbnMgb24gdGhlIEFNRCBDUzU1MzUgYW5kCisJICBDUzU1MzYgR2VvZGUgY29tcGFuaW9uIGRldmljZXMuCisKKwkgIElmIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCBjczU1MzVfZ3Bpby4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jczU1MzVfZ3Bpby9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9jczU1MzVfZ3Bpby9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjdjNGI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NzNTUzNV9ncGlvL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19DUzU1MzVfR1BJTykJKz0gY3M1NTM1X2dwaW8ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NzNTUzNV9ncGlvL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvY3M1NTM1X2dwaW8vVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGQxY2QxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NzNTUzNV9ncGlvL1RPRE8KQEAgLTAsMCArMSw2IEBACitUaGlzIGlzIGFuIG9ic29sZXRlIGRyaXZlciBmb3Igc29tZSB0aGUgQ1M1NTM1IGFuZCBDUzU1MzYgc291dGhicmlkZ2UgR1BJT3MuCitJdCBoYXMgYmVlbiByZXBsYWNlZCBieSBhIGRyaXZlciB0aGF0IG1ha2VzIHVzZSBvZiB0aGUgTGludXggR1BJTyBzdWJzeXN0ZW0uCitQbGVhc2Ugc3dpdGNoIHRvIHRoYXQgZHJpdmVyLCBhbmQgbGV0IGRpbGluZ2VyQHF1ZXVlZC5uZXQga25vdyBpZiB0aGVyZSdzCithbnl0aGluZyBtaXNzaW5nIGZyb20gdGhlIG5ldyBkcml2ZXIuCisKK1RoaXMgZHJpdmVyIGlzIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbCBpbiAyLjYuNDAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jczU1MzVfZ3Bpby9jczU1MzVfZ3Bpby5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYwpyZW5hbWUgdG8gZHJpdmVycy9zdGFnaW5nL2NzNTUzNV9ncGlvL2NzNTUzNV9ncGlvLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbXNtX2ZiX2JsLmMgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL21zbV9mYl9ibC5jCmluZGV4IDAzM2ZjOTQuLjJhODA3NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbXNtX2ZiX2JsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmJfYmwuYwpAQCAtNDIsNyArNDIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgbXNtX2ZiX2JsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBtc21fZmJfYmxfb3BzID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IG1zbV9mYl9ibF9nZXRfYnJpZ2h0bmVzcywKIAkudXBkYXRlX3N0YXR1cyA9IG1zbV9mYl9ibF91cGRhdGVfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vVE9ETwppbmRleCBhYzJkM2QwLi4zNWY5Y2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9UT0RPCkBAIC0xLDYgKzEsNSBAQAogVE9ETzoKIAktIGNoZWNrcGF0Y2gucGwgY2xlYW51cHMKLQktIHBvcnQgZ2VvZGUgZ3BpbyBjYWxscyB0byBuZXdlciBjczU1MzUgQVBJCiAJLSBzZWUgaWYgdng4NTUgZ3BpbyBBUEkgY2FuIGJlIG1hZGUgc2ltaWxhciBlbm91Z2ggdG8gY3M1NTM1IHNvIHdlIGNhbgogCSAgc2hhcmUgbW9yZSBjb2RlCiAJLSBhbGxvdyBzaW11bHRhbmVvdXMgWE8tMSBhbmQgWE8tMS41IHN1cHBvcnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbi5jCmluZGV4IDRjYTQ1ZWMuLjlmMjZkYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb24uYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL3RzYy5oPgogI2luY2x1ZGUgPGFzbS9vbHBjLmg+CiAKQEAgLTQ5LDcgKzQ4LDcgQEAKIAlpbnQgKCppbml0KSh2b2lkKTsKIAl2b2lkICgqYnVzX3N0YWJpbGl6ZV93aWdnbGUpKHZvaWQpOwogCXZvaWQgKCpzZXRfZGNvbmxvYWQpKGludCk7Ci0JaW50ICgqcmVhZF9zdGF0dXMpKHZvaWQpOworCXU4ICgqcmVhZF9zdGF0dXMpKHZvaWQpOwogfTsKIAogc3RhdGljIHN0cnVjdCBkY29uX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwpAQCAtNjE1LDcgKzYxNCw3IEBACiAJX19BVFRSKHJlc3VtZWxpbmUsIDA2NDQsIGRjb25fcmVzdW1lbGluZV9zaG93LCBkY29uX3Jlc3VtZWxpbmVfc3RvcmUpLAogfTsKIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGRjb25fYmxfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGRjb25fYmxfb3BzID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IGRjb25ibF9nZXQsCiAJLnVwZGF0ZV9zdGF0dXMgPSBkY29uYmxfc2V0CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb24uaCBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmgKaW5kZXggNjQ1M2NhNC4uZTU2NmQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb24uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbi5oCkBAIC0yOSwyNiArMjksNiBAQAogI2RlZmluZSBEQ09OX1JFR19TQ0FOX0lOVAk5CiAjZGVmaW5lIERDT05fUkVHX0JSSUdIVAkJMTAKIAotLyogR1BJTyByZWdpc3RlcnMgKENTNTUzNikgKi8KLQotI2RlZmluZSBNU1JfTEJBUl9HUElPCQkweDUxNDAwMDBDCi0KLSNkZWZpbmUgR1BJT3hfT1VUX1ZBTCAgICAgMHgwMAotI2RlZmluZSBHUElPeF9PVVRfRU4gICAgICAweDA0Ci0jZGVmaW5lIEdQSU94X0lOX0VOICAgICAgIDB4MjAKLSNkZWZpbmUgR1BJT3hfSU5WX0VOICAgICAgMHgyNAotI2RlZmluZSBHUElPeF9JTl9GTFRSX0VOICAweDI4Ci0jZGVmaW5lIEdQSU94X0VWTlRDTlRfRU4gIDB4MkMKLSNkZWZpbmUgR1BJT3hfUkVBRF9CQUNLICAgMHgzMAotI2RlZmluZSBHUElPeF9FVk5UX0VOICAgICAweDM4Ci0jZGVmaW5lIEdQSU94X05FR0VER0VfRU4gIDB4NDQKLSNkZWZpbmUgR1BJT3hfTkVHRURHRV9TVFMgMHg0QwotI2RlZmluZSBHUElPX0ZMVDdfQU1OVCAgICAweEQ4Ci0jZGVmaW5lIEdQSU9fTUFQX1ggICAgICAgIDB4RTAKLSNkZWZpbmUgR1BJT19NQVBfWSAgICAgICAgMHhFNAotI2RlZmluZSBHUElPX0ZFN19TRUwgICAgICAweEY3Ci0KLQogLyogU3RhdHVzIHZhbHVlcyAqLwogCiAjZGVmaW5lIERDT05TVEFUX1NDQU5JTlQJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb25feG9fMS5jIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb25feG9fMS5jCmluZGV4IDc3OWZiN2QuLjA0MzE5OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbl94b18xLmMKQEAgLTEwLDU0ICsxMCw3MCBAQAogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotCisjaW5jbHVkZSA8bGludXgvY3M1NTM1Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9vbHBjLmg+CiAKICNpbmNsdWRlICJvbHBjX2Rjb24uaCIKIAotLyogQmFzZSBhZGRyZXNzIG9mIHRoZSBHUElPIHJlZ2lzdGVycyAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3Bpb19iYXNlOwotCi0vKgotICogTGlzdCBvZiBHUElPcyB0aGF0IHdlIGNhcmUgYWJvdXQ6Ci0gKiAoaW4pICBHUElPMTIgICAtLSBEQ09OQkxBTksKLSAqIChpbikgIEdQSU9bNTZdIC0tIERDT05TVEFUWzAxXQotICogKG91dCkgR1BJTzExICAgLS0gRENPTkxPQUQKLSAqLwotCi0jZGVmaW5lIElOX0dQSU9TICgoMTw8NSkgfCAoMTw8NikgfCAoMTw8NykgfCAoMTw8MTIpKQotI2RlZmluZSBPVVRfR1BJT1MgKDE8PDExKQotCiBzdGF0aWMgaW50IGRjb25faW5pdF94b18xKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBsbywgaGk7CiAJdW5zaWduZWQgY2hhciBsb2I7CiAKLQlyZG1zcihNU1JfTEJBUl9HUElPLCBsbywgaGkpOwotCi0JLyogQ2hlY2sgdGhlIG1hc2sgYW5kIHdoZXRoZXIgR1BJTyBpcyBlbmFibGVkIChzYW5pdHkgY2hlY2spICovCi0JaWYgKGhpICE9IDB4MDAwMGYwMDEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJHUElPIG5vdCBlbmFibGVkIC0tIGNhbm5vdCB1c2UgRENPTlxuIik7Ci0JCXJldHVybiAtRU5PREVWOworCWlmIChncGlvX3JlcXVlc3QoT0xQQ19HUElPX0RDT05fU1RBVDAsICJPTFBDLURDT04iKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm9scGMtZGNvbjogZmFpbGVkIHRvIHJlcXVlc3QgU1RBVDAgR1BJT1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoZ3Bpb19yZXF1ZXN0KE9MUENfR1BJT19EQ09OX1NUQVQxLCAiT0xQQy1EQ09OIikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbHBjLWRjb246IGZhaWxlZCB0byByZXF1ZXN0IFNUQVQxIEdQSU9cbiIpOworCQlnb3RvIGVycl9ncF9zdGF0MTsKKwl9CisJaWYgKGdwaW9fcmVxdWVzdChPTFBDX0dQSU9fRENPTl9JUlEsICJPTFBDLURDT04iKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm9scGMtZGNvbjogZmFpbGVkIHRvIHJlcXVlc3QgSVJRIEdQSU9cbiIpOworCQlnb3RvIGVycl9ncF9pcnE7CisJfQorCWlmIChncGlvX3JlcXVlc3QoT0xQQ19HUElPX0RDT05fTE9BRCwgIk9MUEMtRENPTiIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAib2xwYy1kY29uOiBmYWlsZWQgdG8gcmVxdWVzdCBMT0FEIEdQSU9cbiIpOworCQlnb3RvIGVycl9ncF9sb2FkOworCX0KKwlpZiAoZ3Bpb19yZXF1ZXN0KE9MUENfR1BJT19EQ09OX0JMQU5LLCAiT0xQQy1EQ09OIikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbHBjLWRjb246IGZhaWxlZCB0byByZXF1ZXN0IEJMQU5LIEdQSU9cbiIpOworCQlnb3RvIGVycl9ncF9ibGFuazsKIAl9CiAKLQkvKiBNYXNrIG9mZiB0aGUgSU8gYmFzZSBhZGRyZXNzICovCi0JZ3Bpb19iYXNlID0gbG8gJiAweDAwMDBmZjAwOwotCiAJLyogVHVybiBvZmYgdGhlIGV2ZW50IGVuYWJsZSBmb3IgR1BJTzcganVzdCB0byBiZSBzYWZlICovCi0Jb3V0bCgxIDw8ICgxNis3KSwgZ3Bpb19iYXNlICsgR1BJT3hfRVZOVF9FTik7CisJY3M1NTM1X2dwaW9fY2xlYXIoT0xQQ19HUElPX0RDT05fSVJRLCBHUElPX0VWRU5UU19FTkFCTEUpOworCisJLyoKKwkgKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgc3RhdGUgYnkgcmVhZGluZyB0aGUgR1BJTyBiaXQ7IGVhcmxpZXIKKwkgKiBzdGFnZXMgb2YgdGhlIGJvb3QgcHJvY2VzcyBoYXZlIGVzdGFibGlzaGVkIHRoZSBzdGF0ZS4KKwkgKgorCSAqIE5vdGUgdGhhdCB3ZSByZWFkIEdQSU9fT1VQVVRfVkFMIHJhdGhlciB0aGFuIEdQSU9fUkVBRF9CQUNLIGhlcmU7CisJICogdGhpcyBpcyBiZWNhdXNlIE9GVyB3aWxsIGRpc2FibGUgaW5wdXQgZm9yIHRoZSBwaW4gYW5kIHNldCBhIHZhbHVlLi4KKwkgKiBSRUFEX0JBQ0sgd2lsbCBvbmx5IGNvbnRhaW4gYSB2YWxpZCB2YWx1ZSBpZiBpbnB1dCBpcyBlbmFibGVkIGFuZAorCSAqIHRoZW4gYSB2YWx1ZSBpcyBzZXQuICBTbywgZnV0dXJlIHJlYWRpbmdzIG9mIHRoZSBwaW4gY2FuIHVzZQorCSAqIFJFQURfQkFDSywgYnV0IHRoZSBmaXJzdCBvbmUgY2Fubm90LiAgQXdlc29tZSwgaHVoPworCSAqLworCWRjb25fc291cmNlID0gY3M1NTM1X2dwaW9faXNzZXQoT0xQQ19HUElPX0RDT05fTE9BRCwgR1BJT19PVVRQVVRfVkFMKQorCQk/IERDT05fU09VUkNFX0NQVQorCQk6IERDT05fU09VUkNFX0RDT047CisJZGNvbl9wZW5kaW5nID0gZGNvbl9zb3VyY2U7CiAKIAkvKiBTZXQgdGhlIGRpcmVjdGlvbnMgZm9yIHRoZSBHUElPIHBpbnMgKi8KLQlvdXRsKE9VVF9HUElPUyB8IChJTl9HUElPUyA8PCAxNiksIGdwaW9fYmFzZSArIEdQSU94X09VVF9FTik7Ci0Jb3V0bChJTl9HUElPUyB8IChPVVRfR1BJT1MgPDwgMTYpLCBncGlvX2Jhc2UgKyBHUElPeF9JTl9FTik7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoT0xQQ19HUElPX0RDT05fU1RBVDApOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KE9MUENfR1BJT19EQ09OX1NUQVQxKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChPTFBDX0dQSU9fRENPTl9JUlEpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KE9MUENfR1BJT19EQ09OX0JMQU5LKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoT0xQQ19HUElPX0RDT05fTE9BRCwKKwkJCWRjb25fc291cmNlID09IERDT05fU09VUkNFX0NQVSk7CiAKIAkvKiBTZXQgdXAgdGhlIGludGVycnVwdCBtYXBwaW5ncyAqLwogCiAJLyogU2V0IHRoZSBJUlEgdG8gcGFpciAyICovCi0JZ2VvZGVfZ3Bpb19ldmVudF9pcnEoT0xQQ19HUElPX0RDT05fSVJRLCAyKTsKKwljczU1MzVfZ3Bpb19zZXR1cF9ldmVudChPTFBDX0dQSU9fRENPTl9JUlEsIDIsIDApOwogCiAJLyogRW5hYmxlIGdyb3VwIDIgdG8gdHJpZ2dlciB0aGUgRENPTiBpbnRlcnJ1cHQgKi8KLQlnZW9kZV9ncGlvX3NldF9pcnEoMiwgRENPTl9JUlEpOworCWNzNTUzNV9ncGlvX3NldF9pcnEoMiwgRENPTl9JUlEpOwogCiAJLyogU2VsZWN0IGVkZ2UgbGV2ZWwgZm9yIGludGVycnVwdCAoaW4gUElDKSAqLwogCWxvYiA9IGluYigweDRkMCk7CkBAIC02NSw1MiArODEsNjEgQEAKIAlvdXRiKGxvYiwgMHg0ZDApOwogCiAJLyogUmVnaXN0ZXIgdGhlIGludGVydXB0IGhhbmRsZXIgKi8KLQlpZiAocmVxdWVzdF9pcnEoRENPTl9JUlEsICZkY29uX2ludGVycnVwdCwgMCwgIkRDT04iLCAmZGNvbl9kcml2ZXIpKQotCQlyZXR1cm4gLUVJTzsKKwlpZiAocmVxdWVzdF9pcnEoRENPTl9JUlEsICZkY29uX2ludGVycnVwdCwgMCwgIkRDT04iLCAmZGNvbl9kcml2ZXIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAib2xwYy1kY29uOiBmYWlsZWQgdG8gcmVxdWVzdCBEQ09OJ3MgaXJxXG4iKTsKKwkJZ290byBlcnJfcmVxX2lycTsKKwl9CiAKIAkvKiBDbGVhciBJTlZfRU4gZm9yIEdQSU83IChEQ09OSVJRKSAqLwotCW91dGwoKDE8PCgxNis3KSksIGdwaW9fYmFzZSArIEdQSU94X0lOVl9FTik7CisJY3M1NTM1X2dwaW9fY2xlYXIoT0xQQ19HUElPX0RDT05fSVJRLCBHUElPX0lOUFVUX0lOVkVSVCk7CiAKIAkvKiBFbmFibGUgZmlsdGVyIGZvciBHUElPMTIgKERDT05CTEFOSykgKi8KLQlvdXRsKDE8PCgxMiksIGdwaW9fYmFzZSArIEdQSU94X0lOX0ZMVFJfRU4pOworCWNzNTUzNV9ncGlvX3NldChPTFBDX0dQSU9fRENPTl9CTEFOSywgR1BJT19JTlBVVF9GSUxURVIpOwogCiAJLyogRGlzYWJsZSBmaWx0ZXIgZm9yIEdQSU83ICovCi0Jb3V0bCgxPDwoMTYrNyksIGdwaW9fYmFzZSArIEdQSU94X0lOX0ZMVFJfRU4pOworCWNzNTUzNV9ncGlvX2NsZWFyKE9MUENfR1BJT19EQ09OX0lSUSwgR1BJT19JTlBVVF9GSUxURVIpOwogCiAJLyogRGlzYWJsZSBldmVudCBjb3VudGVyIGZvciBHUElPNyAoRENPTklSUSkgYW5kIEdQSU8xMiAoRENPTkJMQU5LKSAqLwotCi0Jb3V0bCgxPDwoMTYrNyksIGdwaW9fYmFzZSArIEdQSU94X0VWTlRDTlRfRU4pOwotCW91dGwoMTw8KDE2KzEyKSwgZ3Bpb19iYXNlICsgR1BJT3hfRVZOVENOVF9FTik7CisJY3M1NTM1X2dwaW9fY2xlYXIoT0xQQ19HUElPX0RDT05fSVJRLCBHUElPX0lOUFVUX0VWRU5UX0NPVU5UKTsKKwljczU1MzVfZ3Bpb19jbGVhcihPTFBDX0dQSU9fRENPTl9CTEFOSywgR1BJT19JTlBVVF9FVkVOVF9DT1VOVCk7CiAKIAkvKiBBZGQgR1BJTzEyIHRvIHRoZSBGaWx0ZXIgRXZlbnQgUGFpciAjNyAqLwotCW91dGIoMTIsIGdwaW9fYmFzZSArIEdQSU9fRkU3X1NFTCk7CisJY3M1NTM1X2dwaW9fc2V0KE9MUENfR1BJT19EQ09OX0JMQU5LLCBHUElPX0ZFN19TRUwpOwogCiAJLyogVHVybiBvZmYgbmVnYXRpdmUgRWRnZSBFbmFibGUgZm9yIEdQSU8xMiAqLwotCW91dGwoMTw8KDE2KzEyKSwgZ3Bpb19iYXNlICsgR1BJT3hfTkVHRURHRV9FTik7CisJY3M1NTM1X2dwaW9fY2xlYXIoT0xQQ19HUElPX0RDT05fQkxBTkssIEdQSU9fTkVHQVRJVkVfRURHRV9FTik7CiAKIAkvKiBFbmFibGUgbmVnYXRpdmUgRWRnZSBFbmFibGUgZm9yIEdQSU83ICovCi0Jb3V0bCgxPDw3LCBncGlvX2Jhc2UgKyBHUElPeF9ORUdFREdFX0VOKTsKKwljczU1MzVfZ3Bpb19zZXQoT0xQQ19HUElPX0RDT05fSVJRLCBHUElPX05FR0FUSVZFX0VER0VfRU4pOwogCiAJLyogWmVybyB0aGUgZmlsdGVyIGFtb3VudCBmb3IgRmlsdGVyIEV2ZW50IFBhaXIgIzcgKi8KLQlvdXR3KDAsIGdwaW9fYmFzZSArIEdQSU9fRkxUN19BTU5UKTsKKwljczU1MzVfZ3Bpb19zZXQoMCwgR1BJT19GTFRSN19BTU9VTlQpOwogCiAJLyogQ2xlYXIgdGhlIG5lZ2F0aXZlIGVkZ2Ugc3RhdHVzIGZvciBHUElPNyBhbmQgR1BJTzEyICovCi0Jb3V0bCgoMTw8NykgfCAoMTw8MTIpLCBncGlvX2Jhc2UrMHg0Yyk7CisJY3M1NTM1X2dwaW9fc2V0KE9MUENfR1BJT19EQ09OX0lSUSwgR1BJT19ORUdBVElWRV9FREdFX1NUUyk7CisJY3M1NTM1X2dwaW9fc2V0KE9MUENfR1BJT19EQ09OX0JMQU5LLCBHUElPX05FR0FUSVZFX0VER0VfU1RTKTsKIAogCS8qIEZJWE1FOiAgQ2xlYXIgdGhlIHBvc2lpdGl2ZSBzdGF0dXMgYXMgd2VsbCwganVzdCB0byBiZSBzdXJlICovCi0Jb3V0bCgoMTw8NykgfCAoMTw8MTIpLCBncGlvX2Jhc2UrMHg0OCk7CisJY3M1NTM1X2dwaW9fc2V0KE9MUENfR1BJT19EQ09OX0lSUSwgR1BJT19QT1NJVElWRV9FREdFX1NUUyk7CisJY3M1NTM1X2dwaW9fc2V0KE9MUENfR1BJT19EQ09OX0JMQU5LLCBHUElPX1BPU0lUSVZFX0VER0VfU1RTKTsKIAogCS8qIEVuYWJsZSBldmVudHMgZm9yIEdQSU83IChEQ09OSVJRKSBhbmQgR1BJTzEyIChEQ09OQkxBTkspICovCi0Jb3V0bCgoMTw8KDcpKXwoMTw8MTIpLCBncGlvX2Jhc2UgKyBHUElPeF9FVk5UX0VOKTsKLQotCS8qIERldGVybWluZSB0aGUgY3VycmVudCBzdGF0ZSBieSByZWFkaW5nIHRoZSBHUElPIGJpdCAqLwotCS8qIEVhcmxpZXIgc3RhZ2VzIG9mIHRoZSBib290IHByb2Nlc3MgaGF2ZSBlc3RhYmxpc2hlZCB0aGUgc3RhdGUgKi8KLQlkY29uX3NvdXJjZSA9IGlubChncGlvX2Jhc2UgKyBHUElPeF9PVVRfVkFMKSAmICgxPDwxMSkKLQkJPyBEQ09OX1NPVVJDRV9DUFUKLQkJOiBEQ09OX1NPVVJDRV9EQ09OOwotCWRjb25fcGVuZGluZyA9IGRjb25fc291cmNlOworCWNzNTUzNV9ncGlvX3NldChPTFBDX0dQSU9fRENPTl9JUlEsIEdQSU9fRVZFTlRTX0VOQUJMRSk7CisJY3M1NTM1X2dwaW9fc2V0KE9MUENfR1BJT19EQ09OX0JMQU5LLCBHUElPX0VWRU5UU19FTkFCTEUpOwogCiAJcmV0dXJuIDA7CisKK2Vycl9yZXFfaXJxOgorCWdwaW9fZnJlZShPTFBDX0dQSU9fRENPTl9CTEFOSyk7CitlcnJfZ3BfYmxhbms6CisJZ3Bpb19mcmVlKE9MUENfR1BJT19EQ09OX0xPQUQpOworZXJyX2dwX2xvYWQ6CisJZ3Bpb19mcmVlKE9MUENfR1BJT19EQ09OX0lSUSk7CitlcnJfZ3BfaXJxOgorCWdwaW9fZnJlZShPTFBDX0dQSU9fRENPTl9TVEFUMSk7CitlcnJfZ3Bfc3RhdDE6CisJZ3Bpb19mcmVlKE9MUENfR1BJT19EQ09OX1NUQVQwKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIHZvaWQgZGNvbl93aWdnbGVfeG9fMSh2b2lkKQpAQCAtMTI4LDM3ICsxNTMsNDQgQEAKIAkgKiBzaW11bHRhbmVvdXNseSBzZXQgQVVYMSBJTi9PVVQgdG8gR1BJTzE0OyBkaXR0byBmb3IgU01CX0RBVEEgYW5kCiAJICogR1BJTzE1LgogIAkgKi8KLQlnZW9kZV9ncGlvX3NldChPTFBDX0dQSU9fU01CX0NMS3xPTFBDX0dQSU9fU01CX0RBVEEsIEdQSU9fT1VUUFVUX1ZBTCk7Ci0JZ2VvZGVfZ3Bpb19zZXQoT0xQQ19HUElPX1NNQl9DTEt8T0xQQ19HUElPX1NNQl9EQVRBLCBHUElPX09VVFBVVF9FTkFCTEUpOwotCWdlb2RlX2dwaW9fY2xlYXIoT0xQQ19HUElPX1NNQl9DTEt8T0xQQ19HUElPX1NNQl9EQVRBLCBHUElPX09VVFBVVF9BVVgxKTsKLQlnZW9kZV9ncGlvX2NsZWFyKE9MUENfR1BJT19TTUJfQ0xLfE9MUENfR1BJT19TTUJfREFUQSwgR1BJT19PVVRQVVRfQVVYMik7Ci0JZ2VvZGVfZ3Bpb19jbGVhcihPTFBDX0dQSU9fU01CX0NMS3xPTFBDX0dQSU9fU01CX0RBVEEsIEdQSU9fSU5QVVRfQVVYMSk7CisJY3M1NTM1X2dwaW9fc2V0KE9MUENfR1BJT19TTUJfQ0xLLCBHUElPX09VVFBVVF9WQUwpOworCWNzNTUzNV9ncGlvX3NldChPTFBDX0dQSU9fU01CX0RBVEEsIEdQSU9fT1VUUFVUX1ZBTCk7CisJY3M1NTM1X2dwaW9fc2V0KE9MUENfR1BJT19TTUJfQ0xLLCBHUElPX09VVFBVVF9FTkFCTEUpOworCWNzNTUzNV9ncGlvX3NldChPTFBDX0dQSU9fU01CX0RBVEEsIEdQSU9fT1VUUFVUX0VOQUJMRSk7CisJY3M1NTM1X2dwaW9fY2xlYXIoT0xQQ19HUElPX1NNQl9DTEssIEdQSU9fT1VUUFVUX0FVWDEpOworCWNzNTUzNV9ncGlvX2NsZWFyKE9MUENfR1BJT19TTUJfREFUQSwgR1BJT19PVVRQVVRfQVVYMSk7CisJY3M1NTM1X2dwaW9fY2xlYXIoT0xQQ19HUElPX1NNQl9DTEssIEdQSU9fT1VUUFVUX0FVWDIpOworCWNzNTUzNV9ncGlvX2NsZWFyKE9MUENfR1BJT19TTUJfREFUQSwgR1BJT19PVVRQVVRfQVVYMik7CisJY3M1NTM1X2dwaW9fY2xlYXIoT0xQQ19HUElPX1NNQl9DTEssIEdQSU9fSU5QVVRfQVVYMSk7CisJY3M1NTM1X2dwaW9fY2xlYXIoT0xQQ19HUElPX1NNQl9EQVRBLCBHUElPX0lOUFVUX0FVWDEpOwogCiAJZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspIHsKIAkJdWRlbGF5KDUpOwotCQlnZW9kZV9ncGlvX2NsZWFyKE9MUENfR1BJT19TTUJfQ0xLLCBHUElPX09VVFBVVF9WQUwpOworCQljczU1MzVfZ3Bpb19jbGVhcihPTFBDX0dQSU9fU01CX0NMSywgR1BJT19PVVRQVVRfVkFMKTsKIAkJdWRlbGF5KDUpOwotCQlnZW9kZV9ncGlvX3NldChPTFBDX0dQSU9fU01CX0NMSywgR1BJT19PVVRQVVRfVkFMKTsKKwkJY3M1NTM1X2dwaW9fc2V0KE9MUENfR1BJT19TTUJfQ0xLLCBHUElPX09VVFBVVF9WQUwpOwogCX0KIAl1ZGVsYXkoNSk7Ci0JZ2VvZGVfZ3Bpb19zZXQoT0xQQ19HUElPX1NNQl9DTEt8T0xQQ19HUElPX1NNQl9EQVRBLCBHUElPX09VVFBVVF9BVVgxKTsKLQlnZW9kZV9ncGlvX3NldChPTFBDX0dQSU9fU01CX0NMS3xPTFBDX0dQSU9fU01CX0RBVEEsIEdQSU9fSU5QVVRfQVVYMSk7CisJY3M1NTM1X2dwaW9fc2V0KE9MUENfR1BJT19TTUJfQ0xLLCBHUElPX09VVFBVVF9BVVgxKTsKKwljczU1MzVfZ3Bpb19zZXQoT0xQQ19HUElPX1NNQl9EQVRBLCBHUElPX09VVFBVVF9BVVgxKTsKKwljczU1MzVfZ3Bpb19zZXQoT0xQQ19HUElPX1NNQl9DTEssIEdQSU9fSU5QVVRfQVVYMSk7CisJY3M1NTM1X2dwaW9fc2V0KE9MUENfR1BJT19TTUJfREFUQSwgR1BJT19JTlBVVF9BVVgxKTsKIH0KIAogc3RhdGljIHZvaWQgZGNvbl9zZXRfZGNvbmxvYWRfMShpbnQgdmFsKQogewotCWlmICh2YWwpCQotCQlvdXRsKDE8PDExLCBncGlvX2Jhc2UgKyBHUElPeF9PVVRfVkFMKTsKLQllbHNlCi0JCW91dGwoMTw8KDExICsgMTYpLCBncGlvX2Jhc2UgKyBHUElPeF9PVVRfVkFMKTsKKwlncGlvX3NldF92YWx1ZShPTFBDX0dQSU9fRENPTl9MT0FELCB2YWwpOwogfQogCi1zdGF0aWMgaW50IGRjb25fcmVhZF9zdGF0dXNfeG9fMSh2b2lkKQorc3RhdGljIHU4IGRjb25fcmVhZF9zdGF0dXNfeG9fMSh2b2lkKQogewotCWludCBzdGF0dXMgPSBpbmwoZ3Bpb19iYXNlICsgR1BJT3hfUkVBRF9CQUNLKSA+PiA1OwotCQorCXU4IHN0YXR1czsKKworCXN0YXR1cyA9IGdwaW9fZ2V0X3ZhbHVlKE9MUENfR1BJT19EQ09OX1NUQVQwKTsKKwlzdGF0dXMgfD0gZ3Bpb19nZXRfdmFsdWUoT0xQQ19HUElPX0RDT05fU1RBVDEpIDw8IDE7CisKIAkvKiBDbGVhciB0aGUgbmVnYXRpdmUgZWRnZSBzdGF0dXMgZm9yIEdQSU83ICovCi0Jb3V0bCgxIDw8IDcsIGdwaW9fYmFzZSArIEdQSU94X05FR0VER0VfU1RTKTsKKwljczU1MzVfZ3Bpb19zZXQoT0xQQ19HUElPX0RDT05fSVJRLCBHUElPX05FR0FUSVZFX0VER0VfU1RTKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbl94b18xXzUuYyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzFfNS5jCmluZGV4IGNjYTZhMjMuLjRmNTYwOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzFfNS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzFfNS5jCkBAIC0xOTUsOSArMTk1LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZGNvbl9yZWFkX3N0YXR1c194b18xXzUodm9pZCkgCitzdGF0aWMgdTggZGNvbl9yZWFkX3N0YXR1c194b18xXzUodm9pZCkKIHsKLQlpbnQgc3RhdHVzOworCXU4IHN0YXR1czsKIAkKIAlpZiAoIWRjb25fd2FzX2lycSgpKQogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbmV0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbmV0LmMKaW5kZXggOTI3OTg5Ny4uYjJlOTE4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL25ldC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9uZXQuYwpAQCAtNDEzLDcgKzQxMyw3IEBACiAJCQkJaWYgKGRlbnRyeSkgewogCQkJCQlhbGlhcyA9IGRfbWF0ZXJpYWxpc2VfdW5pcXVlKGRlbnRyeSwgJm5waS0+dmZzX2lub2RlKTsKIAkJCQkJaWYgKGFsaWFzKQotCQkJCQkJZHB1dChkZW50cnkpOworCQkJCQkJZHB1dChhbGlhcyk7CiAJCQkJfQogCiAJCQkJZHB1dChkZW50cnkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL3NhbXN1bmctbGFwdG9wLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3Avc2Ftc3VuZy1sYXB0b3AuYwppbmRleCBhYzJiZjExLi43MDFlOGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3Avc2Ftc3VuZy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3Avc2Ftc3VuZy1sYXB0b3AuYwpAQCAtMjY5LDcgKzI2OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBiYWNrbGlnaHRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGJhY2tsaWdodF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzCT0gZ2V0X2JyaWdodG5lc3MsCiAJLnVwZGF0ZV9zdGF0dXMJPSB1cGRhdGVfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbWJmcy9kaXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbWJmcy9kaXIuYwppbmRleCBkZDYxMmY1Li44N2EzYTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc21iZnMvZGlyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtYmZzL2Rpci5jCkBAIC00MDMsMTIgKzQwMyw2IEBACiB2b2lkCiBzbWJfbmV3X2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0Jc3RydWN0IHNtYl9zYl9pbmZvICpzZXJ2ZXIgPSBzZXJ2ZXJfZnJvbV9kZW50cnkoZGVudHJ5KTsKLQotCWlmIChzZXJ2ZXItPm1udC0+ZmxhZ3MgJiBTTUJfTU9VTlRfQ0FTRSkKLQkJZF9zZXRfZF9vcChkZW50cnksICZzbWJmc19kZW50cnlfb3BlcmF0aW9uc19jYXNlKTsKLQllbHNlCi0JCWRfc2V0X2Rfb3AoZGVudHJ5LCAmc21iZnNfZGVudHJ5X29wZXJhdGlvbnMpOwogCWRlbnRyeS0+ZF90aW1lID0gamlmZmllczsKIH0KIApAQCAtNDQwLDcgKzQzNCw2IEBACiAJc3RydWN0IHNtYl9mYXR0ciBmaW5mbzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCWludCBlcnJvcjsKLQlzdHJ1Y3Qgc21iX3NiX2luZm8gKnNlcnZlcjsKIAogCWVycm9yID0gLUVOQU1FVE9PTE9ORzsKIAlpZiAoZGVudHJ5LT5kX25hbWUubGVuID4gU01CX01BWE5BTUVMRU4pCkBAIC00NjgsMTIgKzQ2MSw2IEBACiAJCWlub2RlID0gc21iX2lnZXQoZGlyLT5pX3NiLCAmZmluZm8pOwogCQlpZiAoaW5vZGUpIHsKIAlhZGRfZW50cnk6Ci0JCQlzZXJ2ZXIgPSBzZXJ2ZXJfZnJvbV9kZW50cnkoZGVudHJ5KTsKLQkJCWlmIChzZXJ2ZXItPm1udC0+ZmxhZ3MgJiBTTUJfTU9VTlRfQ0FTRSkKLQkJCQlkX3NldF9kX29wKGRlbnRyeSwgJnNtYmZzX2RlbnRyeV9vcGVyYXRpb25zX2Nhc2UpOwotCQkJZWxzZQotCQkJCWRfc2V0X2Rfb3AoZGVudHJ5LCAmc21iZnNfZGVudHJ5X29wZXJhdGlvbnMpOwotCiAJCQlkX2FkZChkZW50cnksIGlub2RlKTsKIAkJCXNtYl9yZW5ld190aW1lcyhkZW50cnkpOwogCQkJZXJyb3IgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtYmZzL2lub2RlLmMgYi9kcml2ZXJzL3N0YWdpbmcvc21iZnMvaW5vZGUuYwppbmRleCAyNDQzMTlkLi4wNzc4NTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc21iZnMvaW5vZGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc21iZnMvaW5vZGUuYwpAQCAtNjE0LDYgKzYxNCwxMCBAQAogCQlwcmludGsoS0VSTl9FUlIgInNtYmZzOiBmYWlsZWQgdG8gc3RhcnQgc21iaW9kXG4iKTsKIAkJZ290byBvdXRfbm9fc21iaW9kOwogCX0KKwlpZiAoc2VydmVyLT5tbnQtPmZsYWdzICYgU01CX01PVU5UX0NBU0UpCisJCXNiLT5zX2Rfb3AgPSAmc21iZnNfZGVudHJ5X29wZXJhdGlvbnNfY2FzZTsKKwllbHNlCisJCXNiLT5zX2Rfb3AgPSAmc21iZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAKIAkvKgogCSAqIEtlZXAgdGhlIHN1cGVyIGJsb2NrIGxvY2tlZCB3aGlsZSB3ZSBnZXQgdGhlIHJvb3QgaW5vZGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc21iZnMvcHJvdG8uaCBiL2RyaXZlcnMvc3RhZ2luZy9zbWJmcy9wcm90by5oCmluZGV4IDA1OTM5YTYuLjM4ODNjYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbWJmcy9wcm90by5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbWJmcy9wcm90by5oCkBAIC0zOCw2ICszOCw4IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzbWJfZGlyX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc21iX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNtYl9kaXJfaW5vZGVfb3BlcmF0aW9uc191bml4OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzbWJmc19kZW50cnlfb3BlcmF0aW9uc19jYXNlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzbWJmc19kZW50cnlfb3BlcmF0aW9uczsKIGV4dGVybiB2b2lkIHNtYl9uZXdfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBleHRlcm4gdm9pZCBzbWJfcmVuZXdfdGltZXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIC8qIGNhY2hlLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVsZXBob255L2l4ai5jIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmMKaW5kZXggMGQyMzZmNC4uYjAwMTAxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmMKKysrIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmMKQEAgLTI4NCwxMiArMjg0LDExIEBACiAKIG1vZHVsZV9wYXJhbShpeGpkZWJ1ZywgaW50LCAwKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl4al9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShpeGpfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1FVSUNLTkVULCBQQ0lfREVWSUNFX0lEX1FVSUNLTkVUX1hKLAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJeyB9CiB9OwotCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaXhqX3BjaV90YmwpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02NTgxLDcgKzY1ODAsOCBAQAogCWNhc2UgSVhKQ1RMX1NFVF9GSUxURVI6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmamYsIGFyZ3AsIHNpemVvZihqZikpKSAKIAkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCXJldHZhbCA9IGl4al9pbml0X2ZpbHRlcihqLCAmamYpOworCQllbHNlCisJCQlyZXR2YWwgPSBpeGpfaW5pdF9maWx0ZXIoaiwgJmpmKTsKIAkJYnJlYWs7CiAJY2FzZSBJWEpDVExfU0VUX0ZJTFRFUl9SQVc6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmamZyLCBhcmdwLCBzaXplb2YoamZyKSkpIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKaW5kZXggMTIxMDUzNC4uNTQwODE4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCkBAIC0xMzIwLDcgKzEzMjAsNyBAQAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFVTQiBnYWRnZWQgZHJpdmVyIGZ1bmN0aW9ucworICogVVNCIGdhZGdldCBkcml2ZXIgZnVuY3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiBpbnQgdXNiX2dhZGdldF9wcm9iZV9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGFuZ3dlbGxfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGFuZ3dlbGxfdWRjLmMKaW5kZXggNzc3OTcyNC4uMWVjYThiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xhbmd3ZWxsX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sYW5nd2VsbF91ZGMuYwpAQCAtMzA4Niw3ICszMDg2LDcgQEAKIAogCWtmcmVlKGRldi0+ZXApOwogCi0JLyogZGlhYmxlIElSUSBoYW5kbGVyICovCisJLyogZGlzYWJsZSBJUlEgaGFuZGxlciAqLwogCWlmIChkZXYtPmdvdF9pcnEpCiAJCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKIApAQCAtMzQwNiw3ICszNDA2LDcgQEAKIAkvKiBkaXNhYmxlIGludGVycnVwdCBhbmQgc2V0IGNvbnRyb2xsZXIgdG8gc3RvcCBzdGF0ZSAqLwogCWxhbmd3ZWxsX3VkY19zdG9wKGRldik7CiAKLQkvKiBkaWFibGUgSVJRIGhhbmRsZXIgKi8KKwkvKiBkaXNhYmxlIElSUSBoYW5kbGVyICovCiAJaWYgKGRldi0+Z290X2lycSkKIAkJZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOwogCWRldi0+Z290X2lycSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktaGNkLmMKaW5kZXggMjAwOTJhMi4uMTJmZDE4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYwpAQCAtOTgsMTMgKzk4LDEzIEBACiAJdXNiLT5pbnRyX25lc3RpbmdfY250LS07CiB9CiAKLS8qIGRpYWJsZSB0aGUgdXNiIGludGVycnVwdCAqLworLyogZGlzYWJsZSB0aGUgdXNiIGludGVycnVwdCAqLwogdm9pZCBmaGNpX3VzYl9kaXNhYmxlX2ludGVycnVwdChzdHJ1Y3QgZmhjaV91c2IgKnVzYikKIHsKIAlzdHJ1Y3QgZmhjaV9oY2QgKmZoY2kgPSB1c2ItPmZoY2k7CiAKIAlpZiAodXNiLT5pbnRyX25lc3RpbmdfY250ID09IDApIHsKLQkJLyogZGlhYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHQgKi8KKwkJLyogZGlzYWJsZSB0aGUgdGltZXIgaW50ZXJydXB0ICovCiAJCWRpc2FibGVfaXJxX25vc3luYyhmaGNpLT50aW1lci0+aXJxKTsKIAogCQkvKiBkaXNhYmxlIHRoZSB1c2IgaW50ZXJydXB0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktdGRzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktdGRzLmMKaW5kZXggN2JlNTQ4Yy4uMzhmZTA1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9maGNpLXRkcy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS10ZHMuYwpAQCAtMjcxLDggKzI3MSw4IEBACiAKIC8qCiAgKiBDb2xsZWN0IHRoZSBzdWJtaXR0ZWQgZnJhbWVzIGFuZCBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIGFib3V0IHRoZW0KLSAqIEl0IGlzIGFsc28gcHJlcGVhcmluZyB0aGUgVERzIGZvciBuZXcgZnJhbWVzLiBJZiB0aGUgVHggaW50ZXJydXB0cwotICogYXJlIGRpYWJsZWQsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgY2FsbCB0aGF0IHJvdXRpbmUgdG8gZ2V0CisgKiBJdCBpcyBhbHNvIHByZXBhcmluZyB0aGUgVERzIGZvciBuZXcgZnJhbWVzLiBJZiB0aGUgVHggaW50ZXJydXB0cworICogYXJlIGRpc2FibGVkLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGNhbGwgdGhhdCByb3V0aW5lIHRvIGdldAogICogY29uZmlybWF0aW9uIGFib3V0IHRoZSBzdWJtaXR0ZWQgZnJhbWVzLiBPdGhlcndpc2UsIHRoZSByb3V0aW5lIGlzCiAgKiBjYWxsZWQgZnJvbWUgdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZHVyaW5nIHRoZSBUeCBpbnRlcnJ1cHQuCiAgKiBJbiB0aGF0IGNhc2UgdGhlIGFwcGxpY2F0aW9uIGlzIGluZm9ybWVkIGJ5IGNhbGxpbmcgdGhlIGFwcGxpY2F0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lteDIxLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pbXgyMS1oY2QuYwppbmRleCBlNDliNzVhLi5mOTBkMDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lteDIxLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaW14MjEtaGNkLmMKQEAgLTE2NTgsNyArMTY1OCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKIAotCS8qIFJlc2V0IHRoZSBIb3N0IGNvbnRyb2xlciBtb2R1bGVzICovCisJLyogUmVzZXQgdGhlIEhvc3QgY29udHJvbGxlciBtb2R1bGVzICovCiAJd3JpdGVsKFVTQk9UR19SU1RfUlNUQ1RSTCB8IFVTQk9UR19SU1RfUlNUUkggfAogCQlVU0JPVEdfUlNUX1JTVEhTSUUgfCBVU0JPVEdfUlNUX1JTVEhDLAogCQlpbXgyMS0+cmVncyArIFVTQk9UR19SU1RfQ1RSTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYwppbmRleCAzMjE0OWJlLi5lMGNiMTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMKQEAgLTMwOTQsNyArMzA5NCw3IEBACiAKIAkvKiBTb21lIGJvYXJkcyAobW9zdGx5IFZJQT8pIHJlcG9ydCBib2d1cyBvdmVyY3VycmVudCBpbmRpY2F0aW9ucywKIAkgKiBjYXVzaW5nIG1hc3NpdmUgbG9nIHNwYW0gdW5sZXNzIHdlIGNvbXBsZXRlbHkgaWdub3JlIHRoZW0uICBJdAotCSAqIG1heSBiZSByZWxldmFudCB0aGF0IFZJQSBWVDgyMzUgY29udHJvbGVycywgd2hlcmUgUE9SVF9QT1dFUiBpcworCSAqIG1heSBiZSByZWxldmFudCB0aGF0IFZJQSBWVDgyMzUgY29udHJvbGxlcnMsIHdoZXJlIFBPUlRfUE9XRVIgaXMKIAkgKiBhbHdheXMgc2V0LCBzZWVtIHRvIGNsZWFyIFBPUlRfT0NDIGFuZCBQT1JUX0NTQyB3aGVuIHdyaXRpbmcgdG8KIAkgKiBQT1JUX1BPV0VSOyB0aGF0J3Mgc3VycHJpc2luZywgYnV0IG1heWJlIHdpdGhpbi1zcGVjLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYyBiL2RyaXZlcnMvdXNiL21pc2MvYWR1dHV4LmMKaW5kZXggNDRmOGI5Mi4uYTZhZmQxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jCkBAIC03MTcsNyArNzE3LDcgQEAKIAkJZ290byBleGl0OwogCX0KIAotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCiAJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkdV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvaW93YXJyaW9yLmMgYi9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jCmluZGV4IGM5MDc4ZTQuLmU1NzNlNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvaW93YXJyaW9yLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYwpAQCAtNzY5LDcgKzc2OSw3IEBACiAJaW50IGk7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAKLQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGludGlhbGl6ZSBpdCAqLworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLwogCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpb3dhcnJpb3IpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYwppbmRleCBlZGZmZWY2Li5lZWZiODI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jCkBAIC02NDIsNyArNjQyLDcgQEAKIAlpbnQgaTsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCiAKIAlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldiA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKaW5kZXggOWIxNjJkZi4uZWQ1OGM2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwpAQCAtMTY4NCw3ICsxNjg0LDcgQEAKIAlzdHJ1Y3QgbXVzYl9od19lcAkqaHdfZXA7CiAJdW5zaWduZWQJCWNvdW50ID0gMDsKIAotCS8qIGludGlhbGl6ZSBlbmRwb2ludCBsaXN0IGp1c3Qgb25jZSAqLworCS8qIGluaXRpYWxpemUgZW5kcG9pbnQgbGlzdCBqdXN0IG9uY2UgKi8KIAlJTklUX0xJU1RfSEVBRCgmKG11c2ItPmcuZXBfbGlzdCkpOwogCiAJZm9yIChlcG51bSA9IDAsIGh3X2VwID0gbXVzYi0+ZW5kcG9pbnRzOwpAQCAtMTc2NSw3ICsxNzY1LDcgQEAKICAqCiAgKiAtRUlOVkFMIHNvbWV0aGluZyB3ZW50IHdyb25nIChub3QgZHJpdmVyKQogICogLUVCVVNZIGFub3RoZXIgZ2FkZ2V0IGlzIGFscmVhZHkgdXNpbmcgdGhlIGNvbnRyb2xsZXIKLSAqIC1FTk9NRU0gbm8gbWVtZW9yeSB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24KKyAqIC1FTk9NRU0gbm8gbWVtb3J5IHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbgogICoKICAqIEBwYXJhbSBkcml2ZXIgdGhlIGdhZGdldCBkcml2ZXIKICAqIEBwYXJhbSBiaW5kIHRoZSBkcml2ZXIncyBiaW5kIGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS93YS1ycGlwZS5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EtcnBpcGUuYwppbmRleCBjN2IxZDgxLi44Y2I5ZDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS93YS1ycGlwZS5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLXJwaXBlLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKICAqCiAgKiAgVVNCIFN0YWNrIHBvcnQgbnVtYmVyICAgIDQgKDEgYmFzZWQpCiAgKiAgV1VTQiBjb2RlIHBvcnQgaW5kZXggICAgIDMgKDAgYmFzZWQpCi0gKiAgVVNCIEFkZHJlc3NzICAgICAgICAgICAgIDUgKDIgYmFzZWQgLS0gMCBpcyBmb3IgZGVmYXVsdCwgMSBmb3Igcm9vdCBodWIpCisgKiAgVVNCIEFkZHJlc3MgICAgICAgICAgICAgNSAoMiBiYXNlZCAtLSAwIGlzIGZvciBkZWZhdWx0LCAxIGZvciByb290IGh1YikKICAqCiAgKiAgTm93LCBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGUgY29uY2VwdCBhcyBkZWZhdWx0IGFkZHJlc3MgZXhhY3RseQogICogIGxpa2UgdGhlICh3aXJlZCkgVVNCIGNvZGUgZG9lcywgd2UgbmVlZCB0byBraW5kIG9mIHNraXAgaXQuIFNvIHdlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKaW5kZXggOGRjZTI1MS4uYmFjMTYzNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCXJldHVybiBsY2RjX3JlYWRsKHNpbmZvLCBBVE1FTF9MQ0RDX0NPTlRSQVNUX1ZBTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhdG1lbF9sY2RjX2JsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhdG1lbF9sY2RjX2JsX29wcyA9IHsKIAkudXBkYXRlX3N0YXR1cyA9IGF0bWVsX2JsX3VwZGF0ZV9zdGF0dXMsCiAJLmdldF9icmlnaHRuZXNzID0gYXRtZWxfYmxfZ2V0X2JyaWdodG5lc3MsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKaW5kZXggMzRhMDg1MS4uZGQ5ZGUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCkBAIC0xNzg2LDcgKzE3ODYsNyBAQAogCXJldHVybiBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGF0eTEyOF9ibF9kYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGF0eTEyOF9ibF9kYXRhID0gewogCS5nZXRfYnJpZ2h0bmVzcwk9IGF0eTEyOF9ibF9nZXRfYnJpZ2h0bmVzcywKIAkudXBkYXRlX3N0YXR1cwk9IGF0eTEyOF9ibF91cGRhdGVfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwppbmRleCA1YTNjZTNhLi43NjdhYjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCkBAIC0yMjIxLDcgKzIyMjEsNyBAQAogCXJldHVybiBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGF0eV9ibF9kYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGF0eV9ibF9kYXRhID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IGF0eV9ibF9nZXRfYnJpZ2h0bmVzcywKIAkudXBkYXRlX3N0YXR1cwk9IGF0eV9ibF91cGRhdGVfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYwppbmRleCAyNTY5NjZlLi45YjgxMWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIAlyZXR1cm4gYmQtPnByb3BzLmJyaWdodG5lc3M7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyByYWRlb25fYmxfZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyByYWRlb25fYmxfZGF0YSA9IHsKIAkuZ2V0X2JyaWdodG5lc3MgPSByYWRlb25fYmxfZ2V0X2JyaWdodG5lc3MsCiAJLnVwZGF0ZV9zdGF0dXMJPSByYWRlb25fYmxfdXBkYXRlX3N0YXR1cywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC84OHBtODYweF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvODhwbTg2MHhfYmwuYwppbmRleCAzOGZmYzNmLi5jNzg5YzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC84OHBtODYweF9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0Lzg4cG04NjB4X2JsLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgcG04NjB4X2JhY2tsaWdodF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgcG04NjB4X2JhY2tsaWdodF9vcHMgPSB7CiAJLm9wdGlvbnMJPSBCTF9DT1JFX1NVU1BFTkRSRVNVTUUsCiAJLnVwZGF0ZV9zdGF0dXMJPSBwbTg2MHhfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMsCiAJLmdldF9icmlnaHRuZXNzCT0gcG04NjB4X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2w0ZjAwMjQydDAzLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sNGYwMDI0MnQwMy5jCmluZGV4IGM2NzgwMWUuLjk4YWQzZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2w0ZjAwMjQydDAzLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbDRmMDAyNDJ0MDMuYwpAQCAtMjUsNyArMjUsNyBAQAogc3RydWN0IGw0ZjAwMjQydDAzX3ByaXYgewogCXN0cnVjdCBzcGlfZGV2aWNlCSpzcGk7CiAJc3RydWN0IGxjZF9kZXZpY2UJKmxkOwotCWludCBsY2Rfb246MTsKKwlpbnQgbGNkX3N0YXRlOwogCXN0cnVjdCByZWd1bGF0b3IgKmlvX3JlZzsKIAlzdHJ1Y3QgcmVndWxhdG9yICpjb3JlX3JlZzsKIH07CkBAIC02MiwxMSArNjIsMzYgQEAKIAkJcmVndWxhdG9yX2VuYWJsZShwcml2LT5jb3JlX3JlZyk7CiAJfQogCisJbDRmMDAyNDJ0MDNfcmVzZXQocGRhdGEtPnJlc2V0X2dwaW8pOworCiAJZ3Bpb19zZXRfdmFsdWUocGRhdGEtPmRhdGFfZW5hYmxlX2dwaW8sIDEpOwogCW1zbGVlcCg2MCk7CiAJc3BpX3dyaXRlKHNwaSwgKGNvbnN0IHU4ICopY21kLCBBUlJBWV9TSVpFKGNtZCkgKiBzaXplb2YodTE2KSk7CiB9CiAKK3N0YXRpYyB2b2lkIGw0ZjAwMjQydDAzX2xjZF9wb3dlcmRvd24oc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgbDRmMDAyNDJ0MDNfcGRhdGEgKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbDRmMDAyNDJ0MDNfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJZGV2X2RiZygmc3BpLT5kZXYsICJQb3dlcmluZyBkb3duIExDRFxuIik7CisKKwlncGlvX3NldF92YWx1ZShwZGF0YS0+ZGF0YV9lbmFibGVfZ3BpbywgMCk7CisKKwlpZiAocHJpdi0+aW9fcmVnKQorCQlyZWd1bGF0b3JfZGlzYWJsZShwcml2LT5pb19yZWcpOworCisJaWYgKHByaXYtPmNvcmVfcmVnKQorCQlyZWd1bGF0b3JfZGlzYWJsZShwcml2LT5jb3JlX3JlZyk7Cit9CisKK3N0YXRpYyBpbnQgbDRmMDAyNDJ0MDNfbGNkX3Bvd2VyX2dldChzdHJ1Y3QgbGNkX2RldmljZSAqbGQpCit7CisJc3RydWN0IGw0ZjAwMjQydDAzX3ByaXYgKnByaXYgPSBsY2RfZ2V0X2RhdGEobGQpOworCisJcmV0dXJuIHByaXYtPmxjZF9zdGF0ZTsKK30KKwogc3RhdGljIGludCBsNGYwMDI0MnQwM19sY2RfcG93ZXJfc2V0KHN0cnVjdCBsY2RfZGV2aWNlICpsZCwgaW50IHBvd2VyKQogewogCXN0cnVjdCBsNGYwMDI0MnQwM19wcml2ICpwcml2ID0gbGNkX2dldF9kYXRhKGxkKTsKQEAgLTc5LDM1ICsxMDQsNTQgQEAKIAljb25zdCB1MTYgZGlzb2ZmID0gMHgyODsKIAogCWlmIChwb3dlciA8PSBGQl9CTEFOS19OT1JNQUwpIHsKLQkJaWYgKHByaXYtPmxjZF9vbikKLQkJCXJldHVybiAwOworCQlpZiAocHJpdi0+bGNkX3N0YXRlIDw9IEZCX0JMQU5LX05PUk1BTCkgeworCQkJLyogRG8gbm90aGluZywgdGhlIExDRCBpcyBydW5uaW5nICovCisJCX0gZWxzZSBpZiAocHJpdi0+bGNkX3N0YXRlIDwgRkJfQkxBTktfUE9XRVJET1dOKSB7CisJCQlkZXZfZGJnKCZzcGktPmRldiwgIlJlc3VtaW5nIExDRFxuIik7CiAKLQkJZGV2X2RiZygmc3BpLT5kZXYsICJ0dXJuaW5nIG9uIExDRFxuIik7CisJCQlzcGlfd3JpdGUoc3BpLCAoY29uc3QgdTggKikmc2xwb3V0LCBzaXplb2YodTE2KSk7CisJCQltc2xlZXAoNjApOworCQkJc3BpX3dyaXRlKHNwaSwgKGNvbnN0IHU4ICopJmRpc29uLCBzaXplb2YodTE2KSk7CisJCX0gZWxzZSB7CisJCQkvKiBwcml2LT5sY2Rfc3RhdGUgPT0gRkJfQkxBTktfUE9XRVJET1dOICovCisJCQlsNGYwMDI0MnQwM19sY2RfaW5pdChzcGkpOworCQkJcHJpdi0+bGNkX3N0YXRlID0gRkJfQkxBTktfVlNZTkNfU1VTUEVORDsKKwkJCWw0ZjAwMjQydDAzX2xjZF9wb3dlcl9zZXQocHJpdi0+bGQsIHBvd2VyKTsKKwkJfQorCX0gZWxzZSBpZiAocG93ZXIgPCBGQl9CTEFOS19QT1dFUkRPV04pIHsKKwkJaWYgKHByaXYtPmxjZF9zdGF0ZSA8PSBGQl9CTEFOS19OT1JNQUwpIHsKKwkJCS8qIFNlbmQgdGhlIGRpc3BsYXkgaW4gc3RhbmRieSAqLworCQkJZGV2X2RiZygmc3BpLT5kZXYsICJTdGFuZGJ5IHRoZSBMQ0RcbiIpOwogCi0JCXNwaV93cml0ZShzcGksIChjb25zdCB1OCAqKSZzbHBvdXQsIHNpemVvZih1MTYpKTsKLQkJbXNsZWVwKDYwKTsKLQkJc3BpX3dyaXRlKHNwaSwgKGNvbnN0IHU4ICopJmRpc29uLCBzaXplb2YodTE2KSk7Ci0KLQkJcHJpdi0+bGNkX29uID0gMTsKKwkJCXNwaV93cml0ZShzcGksIChjb25zdCB1OCAqKSZkaXNvZmYsIHNpemVvZih1MTYpKTsKKwkJCW1zbGVlcCg2MCk7CisJCQlzcGlfd3JpdGUoc3BpLCAoY29uc3QgdTggKikmc2xwaW4sIHNpemVvZih1MTYpKTsKKwkJfSBlbHNlIGlmIChwcml2LT5sY2Rfc3RhdGUgPCBGQl9CTEFOS19QT1dFUkRPV04pIHsKKwkJCS8qIERvIG5vdGhpbmcsIHRoZSBMQ0QgaXMgYWxyZWFkeSBpbiBzdGFuZGJ5ICovCisJCX0gZWxzZSB7CisJCQkvKiBwcml2LT5sY2Rfc3RhdGUgPT0gRkJfQkxBTktfUE9XRVJET1dOICovCisJCQlsNGYwMDI0MnQwM19sY2RfaW5pdChzcGkpOworCQkJcHJpdi0+bGNkX3N0YXRlID0gRkJfQkxBTktfVU5CTEFOSzsKKwkJCWw0ZjAwMjQydDAzX2xjZF9wb3dlcl9zZXQobGQsIHBvd2VyKTsKKwkJfQogCX0gZWxzZSB7Ci0JCWlmICghcHJpdi0+bGNkX29uKQotCQkJcmV0dXJuIDA7Ci0KLQkJZGV2X2RiZygmc3BpLT5kZXYsICJ0dXJuaW5nIG9mZiBMQ0RcbiIpOwotCi0JCXNwaV93cml0ZShzcGksIChjb25zdCB1OCAqKSZkaXNvZmYsIHNpemVvZih1MTYpKTsKLQkJbXNsZWVwKDYwKTsKLQkJc3BpX3dyaXRlKHNwaSwgKGNvbnN0IHU4ICopJnNscGluLCBzaXplb2YodTE2KSk7Ci0KLQkJcHJpdi0+bGNkX29uID0gMDsKKwkJLyogcG93ZXIgPT0gRkJfQkxBTktfUE9XRVJET1dOICovCisJCWlmIChwcml2LT5sY2Rfc3RhdGUgIT0gRkJfQkxBTktfUE9XRVJET1dOKSB7CisJCQkvKiBDbGVhciB0aGUgc2NyZWVuIGJlZm9yZSBzaHV0dGluZyBkb3duICovCisJCQlzcGlfd3JpdGUoc3BpLCAoY29uc3QgdTggKikmZGlzb2ZmLCBzaXplb2YodTE2KSk7CisJCQltc2xlZXAoNjApOworCQkJbDRmMDAyNDJ0MDNfbGNkX3Bvd2VyZG93bihzcGkpOworCQl9CiAJfQogCisJcHJpdi0+bGNkX3N0YXRlID0gcG93ZXI7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBsY2Rfb3BzIGw0Zl9vcHMgPSB7CiAJLnNldF9wb3dlcgk9IGw0ZjAwMjQydDAzX2xjZF9wb3dlcl9zZXQsCi0JLmdldF9wb3dlcgk9IE5VTEwsCisJLmdldF9wb3dlcgk9IGw0ZjAwMjQydDAzX2xjZF9wb3dlcl9nZXQsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBsNGYwMDI0MnQwM19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQpAQCAtMTg1LDkgKzIyOSw5IEBACiAJfQogCiAJLyogSW5pdCB0aGUgTENEICovCi0JbDRmMDAyNDJ0MDNfcmVzZXQocGRhdGEtPnJlc2V0X2dwaW8pOwogCWw0ZjAwMjQydDAzX2xjZF9pbml0KHNwaSk7Ci0JbDRmMDAyNDJ0MDNfbGNkX3Bvd2VyX3NldChwcml2LT5sZCwgMSk7CisJcHJpdi0+bGNkX3N0YXRlID0gRkJfQkxBTktfVlNZTkNfU1VTUEVORDsKKwlsNGYwMDI0MnQwM19sY2RfcG93ZXJfc2V0KHByaXYtPmxkLCBGQl9CTEFOS19VTkJMQU5LKTsKIAogCWRldl9pbmZvKCZzcGktPmRldiwgIkVwc29uIGw0ZjAwMjQydDAzIGxjZCBwcm9iZWQuXG4iKTsKIApAQCAtMjE0LDkgKzI1OCwxMSBAQAogCXN0cnVjdCBsNGYwMDI0MnQwM19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CiAJc3RydWN0IGw0ZjAwMjQydDAzX3BkYXRhICpwZGF0YSA9IHByaXYtPnNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlsNGYwMDI0MnQwM19sY2RfcG93ZXJfc2V0KHByaXYtPmxkLCAwKTsKKwlsNGYwMDI0MnQwM19sY2RfcG93ZXJfc2V0KHByaXYtPmxkLCBGQl9CTEFOS19QT1dFUkRPV04pOwogCWxjZF9kZXZpY2VfdW5yZWdpc3Rlcihwcml2LT5sZCk7CiAKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBOVUxMKTsKKwogCWdwaW9fZnJlZShwZGF0YS0+ZGF0YV9lbmFibGVfZ3Bpbyk7CiAJZ3Bpb19mcmVlKHBkYXRhLT5yZXNldF9ncGlvKTsKIApAQCAtMjMwLDYgKzI3NiwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBsNGYwMDI0MnQwM19zaHV0ZG93bihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBsNGYwMDI0MnQwM19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlpZiAocHJpdikKKwkJbDRmMDAyNDJ0MDNfbGNkX3Bvd2VyX3NldChwcml2LT5sZCwgRkJfQkxBTktfUE9XRVJET1dOKTsKKworfQorCiBzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgbDRmMDAyNDJ0MDNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImw0ZjAwMjQydDAzIiwKQEAgLTIzNyw2ICsyOTIsNyBAQAogCX0sCiAJLnByb2JlCQk9IGw0ZjAwMjQydDAzX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobDRmMDAyNDJ0MDNfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSBsNGYwMDI0MnQwM19zaHV0ZG93biwKIH07CiAKIHN0YXRpYyBfX2luaXQgaW50IGw0ZjAwMjQydDAzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21heDg5MjVfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21heDg5MjVfYmwuYwppbmRleCBiMmIyYzdiLi4yMDlhY2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYXg4OTI1X2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWF4ODkyNV9ibC5jCkBAIC05Miw3ICs5Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIG1heDg5MjVfYmFja2xpZ2h0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBtYXg4OTI1X2JhY2tsaWdodF9vcHMgPSB7CiAJLm9wdGlvbnMJPSBCTF9DT1JFX1NVU1BFTkRSRVNVTUUsCiAJLnVwZGF0ZV9zdGF0dXMJPSBtYXg4OTI1X2JhY2tsaWdodF91cGRhdGVfc3RhdHVzLAogCS5nZXRfYnJpZ2h0bmVzcwk9IG1heDg5MjVfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCmluZGV4IDkxNTQ0OGUuLmM5NzQ5MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKQEAgLTM3NSw3ICszNzUsOCBAQAogCXUxNiBzYXZlZDEsIHNhdmVkMjsKIAl2b2xhdGlsZSB1MTYgKnA7CiAKLQlpZiAoc2NyZWVuX2luZm8ub3JpZ192aWRlb19pc1ZHQSA9PSBWSURFT19UWVBFX1ZMRkIpIHsKKwlpZiAoc2NyZWVuX2luZm8ub3JpZ192aWRlb19pc1ZHQSA9PSBWSURFT19UWVBFX1ZMRkIgfHwKKwkgICAgc2NyZWVuX2luZm8ub3JpZ192aWRlb19pc1ZHQSA9PSBWSURFT19UWVBFX0VGSSkgewogCSAgICAgIG5vX3ZnYToKICNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQogCQljb25zd2l0Y2hwID0gJmR1bW15X2NvbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2JhY2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfYmFja2xpZ2h0LmMKaW5kZXggMmZiNTUyYS4uNmFhYzZkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZfYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfYmFja2xpZ2h0LmMKQEAgLTg3LDcgKzg3LDcgQEAKIAlyZXR1cm4gYmQtPnByb3BzLmJyaWdodG5lc3M7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBudmlkaWFfYmxfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIG52aWRpYV9ibF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzID0gbnZpZGlhX2JsX2dldF9icmlnaHRuZXNzLAogCS51cGRhdGVfc3RhdHVzCT0gbnZpZGlhX2JsX3VwZGF0ZV9zdGF0dXMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC10YWFsLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRhYWwuYwppbmRleCBlMWM3NjVkLi42MTAyNmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRhYWwuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRhYWwuYwpAQCAtNDY1LDcgKzQ2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyB0YWFsX2JsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyB0YWFsX2JsX29wcyA9IHsKIAkuZ2V0X2JyaWdodG5lc3MgPSB0YWFsX2JsX2dldF9pbnRlbnNpdHksCiAJLnVwZGF0ZV9zdGF0dXMgID0gdGFhbF9ibF91cGRhdGVfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcml2YS9mYmRldi5jIGIvZHJpdmVycy92aWRlby9yaXZhL2ZiZGV2LmMKaW5kZXggNjE4ZjM2Yi4uZGEzODgxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9yaXZhL2ZiZGV2LmMKKysrIGIvZHJpdmVycy92aWRlby9yaXZhL2ZiZGV2LmMKQEAgLTMzMSw3ICszMzEsNyBAQAogCXJldHVybiBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIHJpdmFfYmxfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIHJpdmFfYmxfb3BzID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IHJpdmFfYmxfZ2V0X2JyaWdodG5lc3MsCiAJLnVwZGF0ZV9zdGF0dXMJPSByaXZhX2JsX3VwZGF0ZV9zdGF0dXMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfaGRtaS5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfaGRtaS5jCmluZGV4IGUzZWI3N2QuLjc0ZDlmNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2hkbWkuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9oZG1pLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zc3RmYi5jIGIvZHJpdmVycy92aWRlby9zc3RmYi5jCmluZGV4IGRlZTY0YzMuLjJhYjcwNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc3N0ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NzdGZiLmMKQEAgLTUzNiw3ICs1MzYsNyBAQAogCWZiaWluaXQyID0gc3N0X3JlYWQoRkJJSU5JVDIpOwogCWZiaWluaXQzID0gc3N0X3JlYWQoRkJJSU5JVDMpOwogCi0JLyogZXZlcnl0aGluZyBpcyByZXNldC4gd2UgZW5hYmxlIGZiaWluaXQyLzMgcmVtYXAgOiBkYWMgYWNjZXMgb2sgKi8KKwkvKiBldmVyeXRoaW5nIGlzIHJlc2V0LiB3ZSBlbmFibGUgZmJpaW5pdDIvMyByZW1hcCA6IGRhYyBhY2Nlc3Mgb2sgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNzdF9kZXYsIFBDSV9JTklUX0VOQUJMRSwKIAkgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FTl9JTklUX1dSIHwgUENJX1JFTUFQX0RBQyApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3NsYXZlcy9LY29uZmlnIGIvZHJpdmVycy93MS9zbGF2ZXMvS2NvbmZpZwppbmRleCAxZjUxMzY2Li5mMGM5MDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3NsYXZlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdzEvc2xhdmVzL0tjb25maWcKQEAgLTE2LDYgKzE2LDE3IEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgMS13aXJlCiAJICBzaW1wbGUgNjRiaXQgbWVtb3J5IHJvbShkczI0MDEvZHMyNDExL2RzMTk5MCopIHRvIHlvdXIgd2lyZS4KIAorY29uZmlnIFcxX1NMQVZFX0RTMjQyMworCXRyaXN0YXRlICJDb3VudGVyIDEtd2lyZSBkZXZpY2UgKERTMjQyMykiCisJc2VsZWN0IENSQzE2CisJaGVscAorCSAgSWYgeW91IGVuYWJsZSB0aGlzIHlvdSBjYW4gcmVhZCB0aGUgY291bnRlciB2YWx1ZXMgYXZhaWxhYmxlCisJICBpbiB0aGUgRFMyNDIzIGNoaXBzZXQgZnJvbSB0aGUgdzFfc2xhdmUgZmlsZSB1bmRlciB0aGUKKwkgIHN5cyBmaWxlIHN5c3RlbS4KKworCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSAxLXdpcmUKKwkgIGNvdW50ZXIgZmFtaWx5IGRldmljZSAoRFMyNDIzKS4KKwogY29uZmlnIFcxX1NMQVZFX0RTMjQzMQogCXRyaXN0YXRlICIxa2IgRUVQUk9NIGZhbWlseSBzdXBwb3J0IChEUzI0MzEpIgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvc2xhdmVzL01ha2VmaWxlIGIvZHJpdmVycy93MS9zbGF2ZXMvTWFrZWZpbGUKaW5kZXggZjFmNTFmMS4uM2M3NjM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9zbGF2ZXMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy93MS9zbGF2ZXMvTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACiAKIG9iai0kKENPTkZJR19XMV9TTEFWRV9USEVSTSkJKz0gdzFfdGhlcm0ubwogb2JqLSQoQ09ORklHX1cxX1NMQVZFX1NNRU0pCSs9IHcxX3NtZW0ubworb2JqLSQoQ09ORklHX1cxX1NMQVZFX0RTMjQyMykJKz0gdzFfZHMyNDIzLm8KIG9iai0kKENPTkZJR19XMV9TTEFWRV9EUzI0MzEpCSs9IHcxX2RzMjQzMS5vCiBvYmotJChDT05GSUdfVzFfU0xBVkVfRFMyNDMzKQkrPSB3MV9kczI0MzMubwogb2JqLSQoQ09ORklHX1cxX1NMQVZFX0RTMjc2MCkJKz0gdzFfZHMyNzYwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvc2xhdmVzL3cxX2RzMjQyMy5jIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNDIzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E3ZGJlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdzEvc2xhdmVzL3cxX2RzMjQyMy5jCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICoJdzFfZHMyNDIzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTWlrYSBMYWl0aW8gPGxhbWlrckBwaWxwcGEub3JnPgorICoKKyAqIFRoaXMgZHJpdmVyIHdpbGwgcmVhZCBhbmQgd3JpdGUgdGhlIHZhbHVlIG9mIDQgY291bnRlcnMgdG8gdzFfc2xhdmUgZmlsZSBpbgorICogc3lzIGZpbGVzeXN0ZW0uCisgKiBJbnNwaXJlZCBieSB0aGUgdzFfdGhlcm0gYW5kIHcxX2RzMjQzMSBkcml2ZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGhlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMxNi5oPgorCisjaW5jbHVkZSAiLi4vdzEuaCIKKyNpbmNsdWRlICIuLi93MV9pbnQuaCIKKyNpbmNsdWRlICIuLi93MV9mYW1pbHkuaCIKKworI2RlZmluZSBDUkMxNl9WQUxJRAkweGIwMDEKKyNkZWZpbmUgQ1JDMTZfSU5JVAkwCisKKyNkZWZpbmUgQ09VTlRFUl9DT1VOVCA0CisjZGVmaW5lIFJFQURfQllURV9DT1VOVCA0MgorCitzdGF0aWMgc3NpemVfdCB3MV9jb3VudGVyX3JlYWQoc3RydWN0IGRldmljZSAqZGV2aWNlLAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdzFfY291bnRlcl9hdHRyID0KKwlfX0FUVFIodzFfc2xhdmUsIFNfSVJVR08sIHcxX2NvdW50ZXJfcmVhZCwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHcxX2NvdW50ZXJfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKm91dF9idWYpCit7CisJc3RydWN0IHcxX3NsYXZlICpzbCA9IGRldl90b193MV9zbGF2ZShkZXZpY2UpOworCXN0cnVjdCB3MV9tYXN0ZXIgKmRldiA9IHNsLT5tYXN0ZXI7CisJdTggcmJ1ZltDT1VOVEVSX0NPVU5UICogUkVBRF9CWVRFX0NPVU5UXTsKKwl1OCB3cmJ1ZlszXTsKKwlpbnQgcm9tX2FkZHI7CisJaW50IHJlYWRfYnl0ZV9jb3VudDsKKwlpbnQgcmVzdWx0OworCXNzaXplX3QgYzsKKwlpbnQgaWk7CisJaW50IHA7CisJaW50IGNyYzsKKworCWMJCT0gUEFHRV9TSVpFOworCXJvbV9hZGRyCT0gKDEyIDw8IDUpICsgMzE7CisJd3JidWZbMF0JPSAweEE1OworCXdyYnVmWzFdCT0gcm9tX2FkZHIgJiAweEZGOworCXdyYnVmWzJdCT0gcm9tX2FkZHIgPj4gODsKKwltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKKwlpZiAoIXcxX3Jlc2V0X3NlbGVjdF9zbGF2ZShzbCkpIHsKKwkJdzFfd3JpdGVfYmxvY2soZGV2LCB3cmJ1ZiwgMyk7CisJCXJlYWRfYnl0ZV9jb3VudCA9IDA7CisJCWZvciAocCA9IDA7IHAgPCA0OyBwKyspIHsKKwkJCS8qCisJCQkgKiAxIGJ5dGUgZm9yIGZpcnN0IGJ5dGVzIGluIHJhbSBwYWdlIHJlYWQKKwkJCSAqIDQgYnl0ZXMgZm9yIGNvdW50ZXIKKwkJCSAqIDQgYnl0ZXMgZm9yIHplcm8gYml0cworCQkJICogMiBieXRlcyBmb3IgY3JjCisJCQkgKiAzMSByZW1haW5pbmcgYnl0ZXMgZnJvbSB0aGUgcmFtIHBhZ2UKKwkJCSAqLworCQkJcmVhZF9ieXRlX2NvdW50ICs9IHcxX3JlYWRfYmxvY2soZGV2LAorCQkJCXJidWYgKyAocCAqIFJFQURfQllURV9DT1VOVCksIFJFQURfQllURV9DT1VOVCk7CisJCQlmb3IgKGlpID0gMDsgaWkgPCBSRUFEX0JZVEVfQ09VTlQ7ICsraWkpCisJCQkJYyAtPSBzbnByaW50ZihvdXRfYnVmICsgUEFHRV9TSVpFIC0gYywKKwkJCQkJYywgIiUwMnggIiwKKwkJCQkJcmJ1ZlsocCAqIFJFQURfQllURV9DT1VOVCkgKyBpaV0pOworCQkJaWYgKHJlYWRfYnl0ZV9jb3VudCAhPSAocCArIDEpICogUkVBRF9CWVRFX0NPVU5UKSB7CisJCQkJZGV2X3dhcm4oZGV2aWNlLAorCQkJCQkidzFfY291bnRlcl9yZWFkKCkgcmV0dXJuZWQgJXUgYnl0ZXMgIgorCQkJCQkiaW5zdGVhZCBvZiAlZCBieXRlcyB3YW50ZWQuXG4iLAorCQkJCQlyZWFkX2J5dGVfY291bnQsCisJCQkJCVJFQURfQllURV9DT1VOVCk7CisJCQkJYyAtPSBzbnByaW50ZihvdXRfYnVmICsgUEFHRV9TSVpFIC0gYywKKwkJCQkJYywgImNyYz1OT1xuIik7CisJCQl9IGVsc2UgeworCQkJCWlmIChwID09IDApIHsKKwkJCQkJY3JjID0gY3JjMTYoQ1JDMTZfSU5JVCwgd3JidWYsIDMpOworCQkJCQljcmMgPSBjcmMxNihjcmMsIHJidWYsIDExKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKgorCQkJCQkgKiBEUzI0MjMgY2FsY3VsYXRlcyBjcmMgZnJvbSBhbGwgYnl0ZXMKKwkJCQkJICogcmVhZCBhZnRlciB0aGUgcHJldmlvdXMgY3JjIGJ5dGVzLgorCQkJCQkgKi8KKwkJCQkJY3JjID0gY3JjMTYoQ1JDMTZfSU5JVCwKKwkJCQkJCShyYnVmICsgMTEpICsKKwkJCQkJCSgocCAtIDEpICogUkVBRF9CWVRFX0NPVU5UKSwKKwkJCQkJCVJFQURfQllURV9DT1VOVCk7CisJCQkJfQorCQkJCWlmIChjcmMgPT0gQ1JDMTZfVkFMSUQpIHsKKwkJCQkJcmVzdWx0ID0gMDsKKwkJCQkJZm9yIChpaSA9IDQ7IGlpID4gMDsgaWktLSkgeworCQkJCQkJcmVzdWx0IDw8PSA4OworCQkJCQkJcmVzdWx0IHw9IHJidWZbKHAgKgorCQkJCQkJCVJFQURfQllURV9DT1VOVCkgKyBpaV07CisJCQkJCX0KKwkJCQkJYyAtPSBzbnByaW50ZihvdXRfYnVmICsgUEFHRV9TSVpFIC0gYywKKwkJCQkJCWMsICJjcmM9WUVTIGM9JWRcbiIsIHJlc3VsdCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJYyAtPSBzbnByaW50ZihvdXRfYnVmICsgUEFHRV9TSVpFIC0gYywKKwkJCQkJCWMsICJjcmM9Tk9cbiIpOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWMgLT0gc25wcmludGYob3V0X2J1ZiArIFBBR0VfU0laRSAtIGMsIGMsICJDb25uZWN0aW9uIGVycm9yIik7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJcmV0dXJuIFBBR0VfU0laRSAtIGM7Cit9CisKK3N0YXRpYyBpbnQgdzFfZjFkX2FkZF9zbGF2ZShzdHJ1Y3QgdzFfc2xhdmUgKnNsKQoreworCXJldHVybiBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNsLT5kZXYsICZ3MV9jb3VudGVyX2F0dHIpOworfQorCitzdGF0aWMgdm9pZCB3MV9mMWRfcmVtb3ZlX3NsYXZlKHN0cnVjdCB3MV9zbGF2ZSAqc2wpCit7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZzbC0+ZGV2LCAmdzFfY291bnRlcl9hdHRyKTsKK30KKworc3RhdGljIHN0cnVjdCB3MV9mYW1pbHlfb3BzIHcxX2YxZF9mb3BzID0geworCS5hZGRfc2xhdmUgICAgICA9IHcxX2YxZF9hZGRfc2xhdmUsCisJLnJlbW92ZV9zbGF2ZSAgID0gdzFfZjFkX3JlbW92ZV9zbGF2ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzFfZmFtaWx5IHcxX2ZhbWlseV8xZCA9IHsKKwkuZmlkID0gVzFfQ09VTlRFUl9EUzI0MjMsCisJLmZvcHMgPSAmdzFfZjFkX2ZvcHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3MV9mMWRfaW5pdCh2b2lkKQoreworCXJldHVybiB3MV9yZWdpc3Rlcl9mYW1pbHkoJncxX2ZhbWlseV8xZCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3MV9mMWRfZXhpdCh2b2lkKQoreworCXcxX3VucmVnaXN0ZXJfZmFtaWx5KCZ3MV9mYW1pbHlfMWQpOworfQorCittb2R1bGVfaW5pdCh3MV9mMWRfaW5pdCk7Cittb2R1bGVfZXhpdCh3MV9mMWRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1pa2EgTGFpdGlvIDxsYW1pa3JAcGlscHBhLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigidzEgZmFtaWx5IDFkIGRyaXZlciBmb3IgRFMyNDIzLCA0IGNvdW50ZXJzIGFuZCA0a2IgcmFtIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2ZhbWlseS5oIGIvZHJpdmVycy93MS93MV9mYW1pbHkuaAppbmRleCAzY2ExYjkyLi5mM2I2MzZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX2ZhbWlseS5oCisrKyBiL2RyaXZlcnMvdzEvdzFfZmFtaWx5LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgVzFfRkFNSUxZX1NNRU1fMDEJMHgwMQogI2RlZmluZSBXMV9GQU1JTFlfU01FTV84MQkweDgxCiAjZGVmaW5lIFcxX1RIRVJNX0RTMThTMjAgCTB4MTAKKyNkZWZpbmUgVzFfQ09VTlRFUl9EUzI0MjMJMHgxRAogI2RlZmluZSBXMV9USEVSTV9EUzE4MjIgIAkweDIyCiAjZGVmaW5lIFcxX0VFUFJPTV9EUzI0MzMgIAkweDIzCiAjZGVmaW5lIFcxX1RIRVJNX0RTMThCMjAgCTB4MjgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCBhNWFkNzdlLi4yZTI0MDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC00MDksMTUgKzQwOSwyNiBAQAogCSAgTW9zdCBwZW9wbGUgd2lsbCBzYXkgTi4KIAogY29uZmlnIEY3MTgwOEVfV0RUCi0JdHJpc3RhdGUgIkZpbnRlayBGNzE4MDhFLCBGNzE4ODJGRyBhbmQgRjcxODg5RkcgV2F0Y2hkb2ciCisJdHJpc3RhdGUgIkZpbnRlayBGNzE4MDhFLCBGNzE4NjJGRywgRjcxODY5LCBGNzE4ODJGRyBhbmQgRjcxODg5RkcgV2F0Y2hkb2ciCiAJZGVwZW5kcyBvbiBYODYgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgb24gdGhlIEZpbnRlawotCSAgRjcxODA4RSwgRjcxODgyRkcgYW5kIEY3MTg4OUZHIFN1cGVyIEkvTyBjb250cm9sbGVycy4KKwkgIEY3MTgwOEUsIEY3MTg2MkZHLCBGNzE4NjksIEY3MTg4MkZHIGFuZCBGNzE4ODlGRyBTdXBlciBJL08gY29udHJvbGxlcnMuCiAKIAkgIFlvdSBjYW4gY29tcGlsZSB0aGlzIGRyaXZlciBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwsIG9yIHVzZQogCSAgaXQgYXMgYSBtb2R1bGUuICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGY3MTgwOGVfd2R0LgogCitjb25maWcgU1A1MTAwX1RDTworCXRyaXN0YXRlICJBTUQvQVRJIFNQNTEwMCBUQ08gVGltZXIvV2F0Y2hkb2ciCisJZGVwZW5kcyBvbiBYODYgJiYgUENJCisJLS0taGVscC0tLQorCSAgSGFyZHdhcmUgd2F0Y2hkb2cgZHJpdmVyIGZvciB0aGUgQU1EL0FUSSBTUDUxMDAgY2hpcHNldC4gVGhlIFRDTworCSAgKFRvdGFsIENvc3Qgb2YgT3duZXJzaGlwKSB0aW1lciBpcyBhIHdhdGNoZG9nIHRpbWVyIHRoYXQgd2lsbCByZWJvb3QKKwkgIHRoZSBtYWNoaW5lIGFmdGVyIGl0cyBleHBpcmF0aW9uLiBUaGUgZXhwaXJhdGlvbiB0aW1lIGNhbiBiZQorCSAgY29uZmlndXJlZCB3aXRoIHRoZSAiaGVhcnRiZWF0IiBwYXJhbWV0ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNwNTEwMF90Y28uCiAKIGNvbmZpZyBHRU9ERV9XRFQKIAl0cmlzdGF0ZSAiQU1EIEdlb2RlIENTNTUzNS9DUzU1MzYgV2F0Y2hkb2ciCkBAIC02MzEsNiArNjQyLDI0IEBACiAKIAkgIE1vc3QgcGVvcGxlIHdpbGwgc2F5IE4uCiAKK2NvbmZpZyBOVl9UQ08KKwl0cmlzdGF0ZSAiblZpZGlhIFRDTyBUaW1lci9XYXRjaGRvZyIKKwlkZXBlbmRzIG9uIFg4NiAmJiBQQ0kKKwktLS1oZWxwLS0tCisJICBIYXJkd2FyZSBkcml2ZXIgZm9yIHRoZSBUQ08gdGltZXIgYnVpbHQgaW50byB0aGUgblZpZGlhIEh1YiBmYW1pbHkKKwkgIChzdWNoIGFzIHRoZSBNQ1A1MSkuICBUaGUgVENPIChUb3RhbCBDb3N0IG9mIE93bmVyc2hpcCkgdGltZXIgaXMgYQorCSAgd2F0Y2hkb2cgdGltZXIgdGhhdCB3aWxsIHJlYm9vdCB0aGUgbWFjaGluZSBhZnRlciBpdHMgc2Vjb25kCisJICBleHBpcmF0aW9uLiBUaGUgZXhwaXJhdGlvbiB0aW1lIGNhbiBiZSBjb25maWd1cmVkIHdpdGggdGhlCisJICAiaGVhcnRiZWF0IiBwYXJhbWV0ZXIuCisKKwkgIE9uIHNvbWUgbW90aGVyYm9hcmRzIHRoZSBkcml2ZXIgbWF5IGZhaWwgdG8gcmVzZXQgdGhlIGNoaXBzZXQncworCSAgTk9fUkVCT09UIGZsYWcgd2hpY2ggcHJldmVudHMgdGhlIHdhdGNoZG9nIGZyb20gcmVib290aW5nIHRoZQorCSAgbWFjaGluZS4gSWYgdGhpcyBpcyB0aGUgY2FzZSB5b3Ugd2lsbCBnZXQgYSBrZXJuZWwgbWVzc2FnZSBsaWtlCisJICAiZmFpbGVkIHRvIHJlc2V0IE5PX1JFQk9PVCBmbGFnLCByZWJvb3QgZGlzYWJsZWQgYnkgaGFyZHdhcmUiLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBudl90Y28uCisKIGNvbmZpZyBSREMzMjFYX1dEVAogCXRyaXN0YXRlICJSREMgUi0zMjF4IFNvQyB3YXRjaGRvZyIKIAlkZXBlbmRzIG9uIFg4Nl9SREMzMjFYCkBAIC03MjIsMTQgKzc1MSwxNSBAQAogCSAgTW9zdCBwZW9wbGUgd2lsbCBzYXkgTi4KIAogY29uZmlnIFc4MzYyN0hGX1dEVAotCXRyaXN0YXRlICJXODM2MjdIRiBXYXRjaGRvZyBUaW1lciIKKwl0cmlzdGF0ZSAiVzgzNjI3SEYvVzgzNjI3REhHIFdhdGNoZG9nIFRpbWVyIgogCWRlcGVuZHMgb24gWDg2CiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgb24gdGhlIFc4MzYyN0hGIGNoaXBzZXQKIAkgIGFzIHVzZWQgaW4gQWR2YW50ZWNoIFBDLTk1NzggYW5kIFR5YW4gUzI3MjEtNTMzIG1vdGhlcmJvYXJkcwotCSAgKGFuZCBsaWtlbHkgb3RoZXJzKS4gIFRoaXMgd2F0Y2hkb2cgc2ltcGx5IHdhdGNoZXMgeW91ciBrZXJuZWwgdG8KLQkgIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGZyZWV6ZSwgYW5kIGlmIGl0IGRvZXMsIGl0IHJlYm9vdHMgeW91ciBjb21wdXRlcgotCSAgYWZ0ZXIgYSBjZXJ0YWluIGFtb3VudCBvZiB0aW1lLgorCSAgKGFuZCBsaWtlbHkgb3RoZXJzKS4gVGhlIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBXODM2MjdESEcgY2hpcC4KKwkgIFRoaXMgd2F0Y2hkb2cgc2ltcGx5IHdhdGNoZXMgeW91ciBrZXJuZWwgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QKKwkgIGZyZWV6ZSwgYW5kIGlmIGl0IGRvZXMsIGl0IHJlYm9vdHMgeW91ciBjb21wdXRlciBhZnRlciBhIGNlcnRhaW4KKwkgIGFtb3VudCBvZiB0aW1lLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3ODM2MjdoZl93ZHQuCkBAIC04MzIsMTAgKzg2MiwyMiBAQAogCiAjIE02OEsgQXJjaGl0ZWN0dXJlCiAKLSMgTTY4S05PTU1VIEFyY2hpdGVjdHVyZQorY29uZmlnIE01NDh4X1dBVENIRE9HCisJdHJpc3RhdGUgIk1DRjU0OHggd2F0Y2hkb2cgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE01NDh4CisJaGVscAorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbTU0OHhfd2R0LgogCiAjIE1JUFMgQXJjaGl0ZWN0dXJlCiAKK2NvbmZpZyBBVEg3OV9XRFQKKwl0cmlzdGF0ZSAiQXRoZXJvcyBBUjcxWFgvQVI3MjRYL0FSOTEzWCBoYXJkd2FyZSB3YXRjaGRvZyIKKwlkZXBlbmRzIG9uIEFUSDc5CisJaGVscAorCSAgSGFyZHdhcmUgZHJpdmVyIGZvciB0aGUgYnVpbHQtaW4gd2F0Y2hkb2cgdGltZXIgb24gdGhlIEF0aGVyb3MKKwkgIEFSNzFYWC9BUjcyNFgvQVI5MTNYIFNvQ3MuCisKIGNvbmZpZyBCQ000N1hYX1dEVAogCXRyaXN0YXRlICJCcm9hZGNvbSBCQ000N3h4IFdhdGNoZG9nIFRpbWVyIgogCWRlcGVuZHMgb24gQkNNNDdYWApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZSBiL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKaW5kZXggNGIwZWYzOC4uZGQ3NzY2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCkBAIC02OCw2ICs2OCw3IEBACiBvYmotJChDT05GSUdfQUxJTTE1MzVfV0RUKSArPSBhbGltMTUzNV93ZHQubwogb2JqLSQoQ09ORklHX0FMSU03MTAxX1dEVCkgKz0gYWxpbTcxMDFfd2R0Lm8KIG9iai0kKENPTkZJR19GNzE4MDhFX1dEVCkgKz0gZjcxODA4ZV93ZHQubworb2JqLSQoQ09ORklHX1NQNTEwMF9UQ08pICs9IHNwNTEwMF90Y28ubwogb2JqLSQoQ09ORklHX0dFT0RFX1dEVCkgKz0gZ2VvZGV3ZHQubwogb2JqLSQoQ09ORklHX1NDNTIwX1dEVCkgKz0gc2M1MjBfd2R0Lm8KIG9iai0kKENPTkZJR19TQkNfRklUUEMyX1dBVENIRE9HKSArPSBzYmNfZml0cGMyX3dkdC5vCkBAIC04Niw2ICs4Nyw3IEBACiBvYmotJChDT05GSUdfU0MxMjAwX1dEVCkgKz0gc2MxMjAwd2R0Lm8KIG9iai0kKENPTkZJR19TQ3gyMDBfV0RUKSArPSBzY3gyMDBfd2R0Lm8KIG9iai0kKENPTkZJR19QQzg3NDEzX1dEVCkgKz0gcGM4NzQxM193ZHQubworb2JqLSQoQ09ORklHX05WX1RDTykgKz0gbnZfdGNvLm8KIG9iai0kKENPTkZJR19SREMzMjFYX1dEVCkgKz0gcmRjMzIxeF93ZHQubwogb2JqLSQoQ09ORklHXzYwWFhfV0RUKSArPSBzYmM2MHh4d2R0Lm8KIG9iai0kKENPTkZJR19TQkM4MzYwX1dEVCkgKz0gc2JjODM2MC5vCkBAIC0xMDQsMTAgKzEwNiwxMCBAQAogIyBNMzJSIEFyY2hpdGVjdHVyZQogCiAjIE02OEsgQXJjaGl0ZWN0dXJlCi0KLSMgTTY4S05PTU1VIEFyY2hpdGVjdHVyZQorb2JqLSQoQ09ORklHX001NDh4X1dBVENIRE9HKSArPSBtNTQ4eF93ZHQubwogCiAjIE1JUFMgQXJjaGl0ZWN0dXJlCitvYmotJChDT05GSUdfQVRINzlfV0RUKSArPSBhdGg3OV93ZHQubwogb2JqLSQoQ09ORklHX0JDTTQ3WFhfV0RUKSArPSBiY200N3h4X3dkdC5vCiBvYmotJChDT05GSUdfQkNNNjNYWF9XRFQpICs9IGJjbTYzeHhfd2R0Lm8KIG9iai0kKENPTkZJR19SQzMyNDM0X1dEVCkgKz0gcmMzMjQzNF93ZHQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hbGltMTUzNV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTE1MzVfd2R0LmMKaW5kZXggMWU5Y2FlYS4uZmE0ZDM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hbGltMTUzNV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FsaW0xNTM1X3dkdC5jCkBAIC0zMDEsNyArMzAxLDcgQEAKICAqCXdhbnQgdG8gcmVnaXN0ZXIgYW5vdGhlciBkcml2ZXIgb24gdGhlIHNhbWUgUENJIGlkLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbGlfcGNpX3RibFtdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFsaV9wY2lfdGJsW10gX191c2VkID0gewogCXsgUENJX1ZFTkRPUl9JRF9BTCwgMHgxNTMzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCiAJeyBQQ0lfVkVORE9SX0lEX0FMLCAweDE1MzUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAl7IDAsIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hbGltNzEwMV93ZHQuYwppbmRleCBkOGQ0ZGE5Li40YjdhMmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTcxMDFfd2R0LmMKQEAgLTQzMCw3ICs0MzAsNyBAQAogbW9kdWxlX2luaXQoYWxpbTcxMDFfd2R0X2luaXQpOwogbW9kdWxlX2V4aXQoYWxpbTcxMDFfd2R0X3VubG9hZCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbGltNzEwMV9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbGltNzEwMV9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSBfX3VzZWQgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTE1MzMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTcxMDEpIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2F0aDc5X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hdGg3OV93ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjVjODRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hdGg3OV93ZHQuYwpAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIEF0aGVyb3MgQVI3MVhYL0FSNzI0WC9BUjkxM1ggYnVpbHQtaW4gaGFyZHdhcmUgd2F0Y2hkb2cgdGltZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTEgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KKyAqCisgKiBUaGlzIGRyaXZlciB3YXMgYmFzZWQgb246IGRyaXZlcnMvd2F0Y2hkb2cvaXhwNHh4X3dkdC5jCisgKglBdXRob3I6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CisgKglDb3B5cmlnaHQgMjAwNCAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4KKyAqCisgKiB3aGljaCBhZ2FpbiB3YXMgYmFzZWQgb24gc2ExMTAwIGRyaXZlciwKKyAqCUNvcHlyaWdodCAoQykgMjAwMCBPbGVnIERyb2tpbiA8Z3JlZW5AY3JpbWVhLmVkdT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1hdGg3OS9hdGg3OS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF0aDc5L2FyNzF4eF9yZWdzLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUJImF0aDc5LXdkdCIKKworI2RlZmluZSBXRFRfVElNRU9VVAkxNQkvKiBzZWNvbmRzICovCisKKyNkZWZpbmUgV0RPR19DVFJMX0xBU1RfUkVTRVQJQklUKDMxKQorI2RlZmluZSBXRE9HX0NUUkxfQUNUSU9OX01BU0sJMworI2RlZmluZSBXRE9HX0NUUkxfQUNUSU9OX05PTkUJMAkvKiBubyBhY3Rpb24gKi8KKyNkZWZpbmUgV0RPR19DVFJMX0FDVElPTl9HUEkJMQkvKiBnZW5lcmFsIHB1cnBvc2UgaW50ZXJydXB0ICovCisjZGVmaW5lIFdET0dfQ1RSTF9BQ1RJT05fTk1JCTIJLyogTk1JICovCisjZGVmaW5lIFdET0dfQ1RSTF9BQ1RJT05fRkNSCTMJLyogZnVsbCBjaGlwIHJlc2V0ICovCisKK3N0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKK21vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgIgorCQkJICAgIihkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworCitzdGF0aWMgaW50IHRpbWVvdXQgPSBXRFRfVElNRU9VVDsKK21vZHVsZV9wYXJhbSh0aW1lb3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAiV2F0Y2hkb2cgdGltZW91dCBpbiBzZWNvbmRzICIKKwkJCSAgIihkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdEVF9USU1FT1VUKSAicykiKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgd2R0X2ZsYWdzOworCisjZGVmaW5lIFdEVF9GTEFHU19CVVNZCQkwCisjZGVmaW5lIFdEVF9GTEFHU19FWFBFQ1RfQ0xPU0UJMQorCitzdGF0aWMgc3RydWN0IGNsayAqd2R0X2NsazsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHdkdF9mcmVxOworc3RhdGljIGludCBib290X3N0YXR1czsKK3N0YXRpYyBpbnQgbWF4X3RpbWVvdXQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg3OV93ZHRfa2VlcGFsaXZlKHZvaWQpCit7CisJYXRoNzlfcmVzZXRfd3IoQVI3MVhYX1JFU0VUX1JFR19XRE9HLCB3ZHRfZnJlcSAqIHRpbWVvdXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoNzlfd2R0X2VuYWJsZSh2b2lkKQoreworCWF0aDc5X3dkdF9rZWVwYWxpdmUoKTsKKwlhdGg3OV9yZXNldF93cihBUjcxWFhfUkVTRVRfUkVHX1dET0dfQ1RSTCwgV0RPR19DVFJMX0FDVElPTl9GQ1IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoNzlfd2R0X2Rpc2FibGUodm9pZCkKK3sKKwlhdGg3OV9yZXNldF93cihBUjcxWFhfUkVTRVRfUkVHX1dET0dfQ1RSTCwgV0RPR19DVFJMX0FDVElPTl9OT05FKTsKK30KKworc3RhdGljIGludCBhdGg3OV93ZHRfc2V0X3RpbWVvdXQoaW50IHZhbCkKK3sKKwlpZiAodmFsIDwgMSB8fCB2YWwgPiBtYXhfdGltZW91dCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0aW1lb3V0ID0gdmFsOworCWF0aDc5X3dkdF9rZWVwYWxpdmUoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0aDc5X3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmICh0ZXN0X2FuZF9zZXRfYml0KFdEVF9GTEFHU19CVVNZLCAmd2R0X2ZsYWdzKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWNsZWFyX2JpdChXRFRfRkxBR1NfRVhQRUNUX0NMT1NFLCAmd2R0X2ZsYWdzKTsKKwlhdGg3OV93ZHRfZW5hYmxlKCk7CisKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgYXRoNzlfd2R0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKHRlc3RfYml0KFdEVF9GTEFHU19FWFBFQ1RfQ0xPU0UsICZ3ZHRfZmxhZ3MpKQorCQlhdGg3OV93ZHRfZGlzYWJsZSgpOworCWVsc2UgeworCQlwcl9jcml0KERSSVZFUl9OQU1FICI6IGRldmljZSBjbG9zZWQgdW5leHBlY3RlZGx5LCAiCisJCQkid2F0Y2hkb2cgdGltZXIgd2lsbCBub3Qgc3RvcCFcbiIpOworCQlhdGg3OV93ZHRfa2VlcGFsaXZlKCk7CisJfQorCisJY2xlYXJfYml0KFdEVF9GTEFHU19CVVNZLCAmd2R0X2ZsYWdzKTsKKwljbGVhcl9iaXQoV0RUX0ZMQUdTX0VYUEVDVF9DTE9TRSwgJndkdF9mbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgYXRoNzlfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpkYXRhLAorCQkJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKK3sKKwlpZiAobGVuKSB7CisJCWlmICghbm93YXlvdXQpIHsKKwkJCXNpemVfdCBpOworCisJCQljbGVhcl9iaXQoV0RUX0ZMQUdTX0VYUEVDVF9DTE9TRSwgJndkdF9mbGFncyk7CisKKwkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKKwkJCQljaGFyIGM7CisKKwkJCQlpZiAoZ2V0X3VzZXIoYywgZGF0YSArIGkpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJCWlmIChjID09ICdWJykKKwkJCQkJc2V0X2JpdChXRFRfRkxBR1NfRVhQRUNUX0NMT1NFLAorCQkJCQkJJndkdF9mbGFncyk7CisJCQl9CisJCX0KKworCQlhdGg3OV93ZHRfa2VlcGFsaXZlKCk7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGF0aDc5X3dkdF9pbmZvID0geworCS5vcHRpb25zCQk9IFdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9LRUVQQUxJVkVQSU5HIHwKKwkJCQkgIFdESU9GX01BR0lDQ0xPU0UgfCBXRElPRl9DQVJEUkVTRVQsCisJLmZpcm13YXJlX3ZlcnNpb24JPSAwLAorCS5pZGVudGl0eQkJPSAiQVRINzkgd2F0Y2hkb2ciLAorfTsKKworc3RhdGljIGxvbmcgYXRoNzlfd2R0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCWludCBfX3VzZXIgKnAgPSBhcmdwOworCWludCBlcnI7CisJaW50IHQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKKwkJZXJyID0gY29weV90b191c2VyKGFyZ3AsICZhdGg3OV93ZHRfaW5mbywKKwkJCQkgICBzaXplb2YoYXRoNzlfd2R0X2luZm8pKSA/IC1FRkFVTFQgOiAwOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCQllcnIgPSBwdXRfdXNlcigwLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0dFVEJPT1RTVEFUVVM6CisJCWVyciA9IHB1dF91c2VyKGJvb3Rfc3RhdHVzLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJYXRoNzlfd2R0X2tlZXBhbGl2ZSgpOworCQllcnIgPSAwOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKKwkJZXJyID0gZ2V0X3VzZXIodCwgcCk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKworCQllcnIgPSBhdGg3OV93ZHRfc2V0X3RpbWVvdXQodCk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKworCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKwkJZXJyID0gcHV0X3VzZXIodGltZW91dCwgcCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1RUWTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXRoNzlfd2R0X2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS53cml0ZQkJPSBhdGg3OV93ZHRfd3JpdGUsCisJLnVubG9ja2VkX2lvY3RsCT0gYXRoNzlfd2R0X2lvY3RsLAorCS5vcGVuCQk9IGF0aDc5X3dkdF9vcGVuLAorCS5yZWxlYXNlCT0gYXRoNzlfd2R0X3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgYXRoNzlfd2R0X21pc2NkZXYgPSB7CisJLm1pbm9yID0gV0FUQ0hET0dfTUlOT1IsCisJLm5hbWUgPSAid2F0Y2hkb2ciLAorCS5mb3BzID0gJmF0aDc5X3dkdF9mb3BzLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYXRoNzlfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdTMyIGN0cmw7CisJaW50IGVycjsKKworCXdkdF9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ3ZHQiKTsKKwlpZiAoSVNfRVJSKHdkdF9jbGspKQorCQlyZXR1cm4gUFRSX0VSUih3ZHRfY2xrKTsKKworCWVyciA9IGNsa19lbmFibGUod2R0X2Nsayk7CisJaWYgKGVycikKKwkJZ290byBlcnJfY2xrX3B1dDsKKworCXdkdF9mcmVxID0gY2xrX2dldF9yYXRlKHdkdF9jbGspOworCWlmICghd2R0X2ZyZXEpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfY2xrX2Rpc2FibGU7CisJfQorCisJbWF4X3RpbWVvdXQgPSAoMHhmZmZmZmZmZnVsIC8gd2R0X2ZyZXEpOworCWlmICh0aW1lb3V0IDwgMSB8fCB0aW1lb3V0ID4gbWF4X3RpbWVvdXQpIHsKKwkJdGltZW91dCA9IG1heF90aW1lb3V0OworCQlkZXZfaW5mbygmcGRldi0+ZGV2LAorCQkJInRpbWVvdXQgdmFsdWUgbXVzdCBiZSAwIDwgdGltZW91dCA8ICVkLCB1c2luZyAlZFxuIiwKKwkJCW1heF90aW1lb3V0LCB0aW1lb3V0KTsKKwl9CisKKwljdHJsID0gYXRoNzlfcmVzZXRfcnIoQVI3MVhYX1JFU0VUX1JFR19XRE9HX0NUUkwpOworCWJvb3Rfc3RhdHVzID0gKGN0cmwgJiBXRE9HX0NUUkxfTEFTVF9SRVNFVCkgPyBXRElPRl9DQVJEUkVTRVQgOiAwOworCisJZXJyID0gbWlzY19yZWdpc3RlcigmYXRoNzlfd2R0X21pc2NkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJInVuYWJsZSB0byByZWdpc3RlciBtaXNjIGRldmljZSwgZXJyPSVkXG4iLCBlcnIpOworCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2Nsa19kaXNhYmxlOgorCWNsa19kaXNhYmxlKHdkdF9jbGspOworZXJyX2Nsa19wdXQ6CisJY2xrX3B1dCh3ZHRfY2xrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhdGg3OV93ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJbWlzY19kZXJlZ2lzdGVyKCZhdGg3OV93ZHRfbWlzY2Rldik7CisJY2xrX2Rpc2FibGUod2R0X2Nsayk7CisJY2xrX3B1dCh3ZHRfY2xrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXRoOTdfd2R0X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJYXRoNzlfd2R0X2Rpc2FibGUoKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoNzlfd2R0X2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGF0aDc5X3dkdF9yZW1vdmUpLAorCS5zaHV0ZG93bgk9IGF0aDk3X3dkdF9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0aDc5X3dkdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmYXRoNzlfd2R0X2RyaXZlciwgYXRoNzlfd2R0X3Byb2JlKTsKK30KK21vZHVsZV9pbml0KGF0aDc5X3dkdF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGF0aDc5X3dkdF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF0aDc5X3dkdF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYXRoNzlfd2R0X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkF0aGVyb3MgQVI3MVhYL0FSNzI0WC9BUjkxM1ggaGFyZHdhcmUgd2F0Y2hkb2cgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnIik7CitNT0RVTEVfQVVUSE9SKCJJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSSVZFUl9OQU1FKTsKK01PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYm9va2Vfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2Jvb2tlX3dkdC5jCmluZGV4IGQxMWZmYjAuLjdlN2VjOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYm9va2Vfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9ib29rZV93ZHQuYwpAQCAtODUsNiArODUsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgX19ib29rZV93ZHRfc2V0KHZvaWQgKmRhdGEpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IG1mc3ByKFNQUk5fVENSKTsKKwl2YWwgJj0gfldEVFBfTUFTSzsKKwl2YWwgfD0gV0RUUChib29rZV93ZHRfcGVyaW9kKTsKKworCW10c3ByKFNQUk5fVENSLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBib29rZV93ZHRfc2V0KHZvaWQpCit7CisJb25fZWFjaF9jcHUoX19ib29rZV93ZHRfc2V0LCBOVUxMLCAwKTsKK30KKwogc3RhdGljIHZvaWQgX19ib29rZV93ZHRfcGluZyh2b2lkICpkYXRhKQogewogCW10c3ByKFNQUk5fVFNSLCBUU1JfRU5XfFRTUl9XSVMpOwpAQCAtMTgxLDggKzE5Nyw3IEBACiAjZWxzZQogCQlib29rZV93ZHRfcGVyaW9kID0gdG1wOwogI2VuZGlmCi0JCW10c3ByKFNQUk5fVENSLCAobWZzcHIoU1BSTl9UQ1IpICYgfldEVFBfTUFTSykgfAotCQkJCQkJV0RUUChib29rZV93ZHRfcGVyaW9kKSk7CisJCWJvb2tlX3dkdF9zZXQoKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgogCQlyZXR1cm4gcHV0X3VzZXIoYm9va2Vfd2R0X3BlcmlvZCwgcCk7CkBAIC0xOTMsOCArMjA4LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHdkdF9pc19hY3RpdmUgc3RvcmVzIHdldGhlciBvciBub3QgdGhlIC9kZXYvd2F0Y2hkb2cgZGV2aWNlIGlzIG9wZW5lZCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgd2R0X2lzX2FjdGl2ZTsKKwogc3RhdGljIGludCBib29rZV93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwkvKiAvZGV2L3dhdGNoZG9nIGNhbiBvbmx5IGJlIG9wZW5lZCBvbmNlICovCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJndkdF9pc19hY3RpdmUpKQorCQlyZXR1cm4gLUVCVVNZOworCiAJc3Bpbl9sb2NrKCZib29rZV93ZHRfbG9jayk7CiAJaWYgKGJvb2tlX3dkdF9lbmFibGVkID09IDApIHsKIAkJYm9va2Vfd2R0X2VuYWJsZWQgPSAxOwpAQCAtMjEwLDggKzIzMiwxNyBAQAogCiBzdGF0aWMgaW50IGJvb2tlX3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogeworI2lmbmRlZiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKwkvKiBOb3JtYWxseSwgdGhlIHdhdGNoZG9nIGlzIGRpc2FibGVkIHdoZW4gL2Rldi93YXRjaGRvZyBpcyBjbG9zZWQsIGJ1dAorCSAqIGlmIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBkZWZpbmVkLCB0aGVuIGl0IG1lYW5zIHRoYXQgdGhlCisJICogd2F0Y2hkb2cgc2hvdWxkIHJlbWFpbiBlbmFibGVkLiAgU28gd2UgZGlzYWJsZSBpdCBvbmx5IGlmCisJICogQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBkZWZpbmVkLgorCSAqLwogCW9uX2VhY2hfY3B1KF9fYm9va2Vfd2R0X2Rpc2FibGUsIE5VTEwsIDApOwogCWJvb2tlX3dkdF9lbmFibGVkID0gMDsKKyNlbmRpZgorCisJY2xlYXJfYml0KDAsICZ3ZHRfaXNfYWN0aXZlKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9mNzE4MDhlX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9mNzE4MDhlX3dkdC5jCmluZGV4IDY1ZTU3OTYuLmQ0ZDhkMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvZjcxODA4ZV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2Y3MTgwOGVfd2R0LmMKQEAgLTQyLDE4ICs0MiwyMSBAQAogI2RlZmluZSBTSU9fUkVHX0RFVklECQkweDIwCS8qIERldmljZSBJRCAoMiBieXRlcykgKi8KICNkZWZpbmUgU0lPX1JFR19ERVZSRVYJCTB4MjIJLyogRGV2aWNlIHJldmlzaW9uICovCiAjZGVmaW5lIFNJT19SRUdfTUFOSUQJCTB4MjMJLyogRmludGVrIElEICgyIGJ5dGVzKSAqLworI2RlZmluZSBTSU9fUkVHX1JPTV9BRERSX1NFTAkweDI3CS8qIFJPTSBhZGRyZXNzIHNlbGVjdCAqLworI2RlZmluZSBTSU9fUkVHX01GVU5DVDEJCTB4MjkJLyogTXVsdGkgZnVuY3Rpb24gc2VsZWN0IDEgKi8KKyNkZWZpbmUgU0lPX1JFR19NRlVOQ1QyCQkweDJhCS8qIE11bHRpIGZ1bmN0aW9uIHNlbGVjdCAyICovCisjZGVmaW5lIFNJT19SRUdfTUZVTkNUMwkJMHgyYgkvKiBNdWx0aSBmdW5jdGlvbiBzZWxlY3QgMyAqLwogI2RlZmluZSBTSU9fUkVHX0VOQUJMRQkJMHgzMAkvKiBMb2dpY2FsIGRldmljZSBlbmFibGUgKi8KICNkZWZpbmUgU0lPX1JFR19BRERSCQkweDYwCS8qIExvZ2ljYWwgZGV2aWNlIGFkZHJlc3MgKDIgYnl0ZXMpICovCiAKICNkZWZpbmUgU0lPX0ZJTlRFS19JRAkJMHgxOTM0CS8qIE1hbnVmYWN0dXJlcnMgSUQgKi8KLSNkZWZpbmUgU0lPX0Y3MTgwOF9JRAkJMHgwOTAxICAvKiBDaGlwc2V0IElEICovCi0jZGVmaW5lIFNJT19GNzE4NThfSUQJCTB4MDUwNyAgLyogQ2hpcHNldCBJRCAqLworI2RlZmluZSBTSU9fRjcxODA4X0lECQkweDA5MDEJLyogQ2hpcHNldCBJRCAqLworI2RlZmluZSBTSU9fRjcxODU4X0lECQkweDA1MDcJLyogQ2hpcHNldCBJRCAqLwogI2RlZmluZSBTSU9fRjcxODYyX0lECQkweDA2MDEJLyogQ2hpcHNldCBJRCAqLworI2RlZmluZSBTSU9fRjcxODY5X0lECQkweDA4MTQJLyogQ2hpcHNldCBJRCAqLwogI2RlZmluZSBTSU9fRjcxODgyX0lECQkweDA1NDEJLyogQ2hpcHNldCBJRCAqLwogI2RlZmluZSBTSU9fRjcxODg5X0lECQkweDA3MjMJLyogQ2hpcHNldCBJRCAqLwogCi0jZGVmaW5lCUY3MTg4MkZHX1JFR19TVEFSVAkJMHgwMQotCiAjZGVmaW5lIEY3MTgwOEZHX1JFR19XRE9fQ09ORgkJMHhmMAogI2RlZmluZSBGNzE4MDhGR19SRUdfV0RUX0NPTkYJCTB4ZjUKICNkZWZpbmUgRjcxODA4RkdfUkVHX1dEX1RJTUUJCTB4ZjYKQEAgLTcwLDEzICs3MywxNSBAQAogI2RlZmluZSBXQVRDSERPR19NQVhfVElNRU9VVAkoNjAgKiAyNTUpCiAjZGVmaW5lIFdBVENIRE9HX1BVTFNFX1dJRFRICTEyNQkvKiAxMjUgbXMsIGRlZmF1bHQgcHVsc2Ugd2lkdGggZm9yCiAJCQkJCSAgIHdhdGNoZG9nIHNpZ25hbCAqLworI2RlZmluZSBXQVRDSERPR19GNzE4NjJGR19QSU4JNjMJLyogZGVmYXVsdCB3YXRjaGRvZyByZXNldCBvdXRwdXQKKwkJCQkJICAgcGluIG51bWJlciA2MyAqLwogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZm9yY2VfaWQ7CiBtb2R1bGVfcGFyYW0oZm9yY2VfaWQsIHVzaG9ydCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX2lkLCAiT3ZlcnJpZGUgdGhlIGRldGVjdGVkIGRldmljZSBJRCIpOwogCiBzdGF0aWMgY29uc3QgaW50IG1heF90aW1lb3V0ID0gV0FUQ0hET0dfTUFYX1RJTUVPVVQ7Ci1zdGF0aWMgaW50IHRpbWVvdXQgPSA2MDsJLyogZGVmYXVsdCB0aW1lb3V0IGluIHNlY29uZHMgKi8KK3N0YXRpYyBpbnQgdGltZW91dCA9IFdBVENIRE9HX1RJTUVPVVQ7CS8qIGRlZmF1bHQgdGltZW91dCBpbiBzZWNvbmRzICovCiBtb2R1bGVfcGFyYW0odGltZW91dCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModGltZW91dCwKIAkiV2F0Y2hkb2cgdGltZW91dCBpbiBzZWNvbmRzLiAxPD0gdGltZW91dCA8PSIKQEAgLTg5LDYgKzk0LDEyIEBACiAJIldhdGNoZG9nIHNpZ25hbCBwdWxzZSB3aWR0aC4gMCg9bGV2ZWwpLCAxIG1zLCAyNSBtcywgMTI1IG1zIG9yIDUwMDAgbXMiCiAJCQkiIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX1BVTFNFX1dJRFRIKSAiKSIpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IGY3MTg2MmZnX3BpbiA9IFdBVENIRE9HX0Y3MTg2MkZHX1BJTjsKK21vZHVsZV9wYXJhbShmNzE4NjJmZ19waW4sIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhmNzE4NjJmZ19waW4sCisJIldhdGNoZG9nIGY3MTg2MmZnIHJlc2V0IG91dHB1dCBwaW4gY29uZmlndXJhdGlvbi4gQ2hvb3NlIHBpbiA1NiBvciA2MyIKKwkJCSIgKGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfRjcxODYyRkdfUElOKSIpIik7CisKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgYm9vbCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiRGlzYWJsZSB3YXRjaGRvZyBzaHV0ZG93biBvbiBjbG9zZSIpOwpAQCAtOTgsMTIgKzEwOSwxMyBAQAogTU9EVUxFX1BBUk1fREVTQyhzdGFydF93aXRodGltZW91dCwgIlN0YXJ0IHdhdGNoZG9nIHRpbWVyIG9uIG1vZHVsZSBsb2FkIHdpdGgiCiAJIiBnaXZlbiBpbml0aWFsIHRpbWVvdXQuIFplcm8gKGRlZmF1bHQpIGRpc2FibGVzIHRoaXMgZmVhdHVyZS4iKTsKIAotZW51bSBjaGlwcyB7IGY3MTgwOGZnLCBmNzE4NThmZywgZjcxODYyZmcsIGY3MTg4MmZnLCBmNzE4ODlmZyB9OworZW51bSBjaGlwcyB7IGY3MTgwOGZnLCBmNzE4NThmZywgZjcxODYyZmcsIGY3MTg2OSwgZjcxODgyZmcsIGY3MTg4OWZnIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpmNzE4MDhlX25hbWVzW10gPSB7CiAJImY3MTgwOGZnIiwKIAkiZjcxODU4ZmciLAogCSJmNzE4NjJmZyIsCisJImY3MTg2OSIsCiAJImY3MTg4MmZnIiwKIAkiZjcxODg5ZmciLAogfTsKQEAgLTI4Miw2ICsyOTQsMjggQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGY3MTg2MmZnX3Bpbl9jb25maWd1cmUodW5zaWduZWQgc2hvcnQgaW9hZGRyKQoreworCS8qIFdoZW4gaW9hZGRyIGlzIG5vbi16ZXJvIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGhhcyB0byB0YWtlIGNhcmUgb2YKKwkgICBtdXRleCBoYW5kbGluZyBhbmQgc3VwZXJpbyBwcmVwYXJhdGlvbiEgKi8KKworCWlmIChmNzE4NjJmZ19waW4gPT0gNjMpIHsKKwkJaWYgKGlvYWRkcikgeworCQkJLyogU1BJIG11c3QgYmUgZGlzYWJsZWQgZmlyc3QgdG8gdXNlIHRoaXMgcGluISAqLworCQkJc3VwZXJpb19jbGVhcl9iaXQoaW9hZGRyLCBTSU9fUkVHX1JPTV9BRERSX1NFTCwgNik7CisJCQlzdXBlcmlvX3NldF9iaXQoaW9hZGRyLCBTSU9fUkVHX01GVU5DVDMsIDQpOworCQl9CisJfSBlbHNlIGlmIChmNzE4NjJmZ19waW4gPT0gNTYpIHsKKwkJaWYgKGlvYWRkcikKKwkJCXN1cGVyaW9fc2V0X2JpdChpb2FkZHIsIFNJT19SRUdfTUZVTkNUMSwgMSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVk5BTUUgIjogSW52YWxpZCBhcmd1bWVudCBmNzE4NjJmZ19waW49JWRcbiIsCisJCQkJZjcxODYyZmdfcGluKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHdhdGNoZG9nX3N0YXJ0KHZvaWQpCiB7CiAJLyogTWFrZSBzdXJlIHdlIGRvbid0IGRpZSBhcyBzb29uIGFzIHRoZSB3YXRjaGRvZyBpcyBlbmFibGVkIGJlbG93ICovCkBAIC0yOTksMTkgKzMzMywzMCBAQAogCXN3aXRjaCAod2F0Y2hkb2cudHlwZSkgewogCWNhc2UgZjcxODA4Zmc6CiAJCS8qIFNldCBwaW4gMjEgdG8gR1BJTzIzL1dEVFJTVCMsIHRoZW4gdG8gV0RUUlNUIyAqLwotCQlzdXBlcmlvX2NsZWFyX2JpdCh3YXRjaGRvZy5zaW9hZGRyLCAweDJhLCAzKTsKLQkJc3VwZXJpb19jbGVhcl9iaXQod2F0Y2hkb2cuc2lvYWRkciwgMHgyYiwgMyk7CisJCXN1cGVyaW9fY2xlYXJfYml0KHdhdGNoZG9nLnNpb2FkZHIsIFNJT19SRUdfTUZVTkNUMiwgMyk7CisJCXN1cGVyaW9fY2xlYXJfYml0KHdhdGNoZG9nLnNpb2FkZHIsIFNJT19SRUdfTUZVTkNUMywgMyk7CisJCWJyZWFrOworCisJY2FzZSBmNzE4NjJmZzoKKwkJZXJyID0gZjcxODYyZmdfcGluX2NvbmZpZ3VyZSh3YXRjaGRvZy5zaW9hZGRyKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXhpdF9zdXBlcmlvOworCQlicmVhazsKKworCWNhc2UgZjcxODY5OgorCQkvKiBHUElPMTQgLS0+IFdEVFJTVCMgKi8KKwkJc3VwZXJpb19jbGVhcl9iaXQod2F0Y2hkb2cuc2lvYWRkciwgU0lPX1JFR19NRlVOQ1QxLCA0KTsKIAkJYnJlYWs7CiAKIAljYXNlIGY3MTg4MmZnOgogCQkvKiBTZXQgcGluIDU2IHRvIFdEVFJTVCMgKi8KLQkJc3VwZXJpb19zZXRfYml0KHdhdGNoZG9nLnNpb2FkZHIsIDB4MjksIDEpOworCQlzdXBlcmlvX3NldF9iaXQod2F0Y2hkb2cuc2lvYWRkciwgU0lPX1JFR19NRlVOQ1QxLCAxKTsKIAkJYnJlYWs7CiAKIAljYXNlIGY3MTg4OWZnOgogCQkvKiBzZXQgcGluIDQwIHRvIFdEVFJTVCMgKi8KLQkJc3VwZXJpb19vdXRiKHdhdGNoZG9nLnNpb2FkZHIsIDB4MmIsCi0JCQkJc3VwZXJpb19pbmIod2F0Y2hkb2cuc2lvYWRkciwgMHgyYikgJiAweGNmKTsKKwkJc3VwZXJpb19vdXRiKHdhdGNoZG9nLnNpb2FkZHIsIFNJT19SRUdfTUZVTkNUMywKKwkJCXN1cGVyaW9faW5iKHdhdGNoZG9nLnNpb2FkZHIsIFNJT19SRUdfTUZVTkNUMykgJiAweGNmKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNzExLDE2ICs3NTYsMTkgQEAKIAljYXNlIFNJT19GNzE4MDhfSUQ6CiAJCXdhdGNoZG9nLnR5cGUgPSBmNzE4MDhmZzsKIAkJYnJlYWs7CisJY2FzZSBTSU9fRjcxODYyX0lEOgorCQl3YXRjaGRvZy50eXBlID0gZjcxODYyZmc7CisJCWVyciA9IGY3MTg2MmZnX3Bpbl9jb25maWd1cmUoMCk7IC8qIHZhbGlkYXRlIG1vZHVsZSBwYXJhbWV0ZXIgKi8KKwkJYnJlYWs7CisJY2FzZSBTSU9fRjcxODY5X0lEOgorCQl3YXRjaGRvZy50eXBlID0gZjcxODY5OworCQlicmVhazsKIAljYXNlIFNJT19GNzE4ODJfSUQ6CiAJCXdhdGNoZG9nLnR5cGUgPSBmNzE4ODJmZzsKIAkJYnJlYWs7CiAJY2FzZSBTSU9fRjcxODg5X0lEOgogCQl3YXRjaGRvZy50eXBlID0gZjcxODg5Zmc7CiAJCWJyZWFrOwotCWNhc2UgU0lPX0Y3MTg2Ml9JRDoKLQkJLyogVGhlc2UgaGF2ZSBhIHdhdGNoZG9nLCB0aG91Z2ggaXQgaXNuJ3QgaW1wbGVtZW50ZWQgKHlldCkuICovCi0JCWVyciA9IC1FTk9TWVM7Ci0JCWdvdG8gZXhpdDsKIAljYXNlIFNJT19GNzE4NThfSUQ6CiAJCS8qIENvbmZpcm1lZCAoYnkgZGF0YXNoZWV0KSBub3QgdG8gaGF2ZSBhIHdhdGNoZG9nLiAqLwogCQllcnIgPSAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jCmluZGV4IGRlYTdiNWIuLjI0Yjk2NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMKQEAgLTQ2OSw3ICs0NjksNyBAQAogCXVuc2lnbmVkIGxvbmcgcm9tX3BsOwogCXN0YXRpYyBpbnQgZGllX25taV9jYWxsZWQ7CiAKLQlpZiAodWxSZWFzb24gIT0gRElFX05NSSAmJiB1bFJlYXNvbiAhPSBESUVfTk1JX0lQSSkKKwlpZiAodWxSZWFzb24gIT0gRElFX05NSVVOS05PV04pCiAJCWdvdG8gb3V0OwogCiAJaWYgKCFocHdkdF9ubWlfZGVjb2RpbmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKaW5kZXggYjg4MzhkMi4uMmM2YzJiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKglpbnRlbCBUQ08gV2F0Y2hkb2cgRHJpdmVyCiAgKgotICoJKGMpIENvcHlyaWdodCAyMDA2LTIwMDkgV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4uCisgKgkoYykgQ29weXJpZ2h0IDIwMDYtMjAxMCBXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPi4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjYsMTMgKzI2LDE1IEBACiAgKglkb2N1bWVudCBudW1iZXIgMzAxNDczLTAwMiwgMzAxNDc0LTAyNjogODI4MDFGIChJQ0g2KQogICoJZG9jdW1lbnQgbnVtYmVyIDMxMzA4Mi0wMDEsIDMxMzA3NS0wMDY6IDYzMXhFU0IsIDYzMnhFU0IKICAqCWRvY3VtZW50IG51bWJlciAzMDcwMTMtMDAzLCAzMDcwMTQtMDI0OiA4MjgwMUcgKElDSDcpCisgKglkb2N1bWVudCBudW1iZXIgMzIyODk2LTAwMSwgMzIyODk3LTAwMTogTk0xMAogICoJZG9jdW1lbnQgbnVtYmVyIDMxMzA1Ni0wMDMsIDMxMzA1Ny0wMTc6IDgyODAxSCAoSUNIOCkKICAqCWRvY3VtZW50IG51bWJlciAzMTY5NzItMDA0LCAzMTY5NzMtMDEyOiA4MjgwMUkgKElDSDkpCiAgKglkb2N1bWVudCBudW1iZXIgMzE5OTczLTAwMiwgMzE5OTc0LTAwMjogODI4MDFKIChJQ0gxMCkKICAqCWRvY3VtZW50IG51bWJlciAzMjIxNjktMDAxLCAzMjIxNzAtMDAzOiA1IFNlcmllcywgMzQwMCBTZXJpZXMgKFBDSCkKICAqCWRvY3VtZW50IG51bWJlciAzMjAwNjYtMDAzLCAzMjAyNTctMDA4OiBFUDgwNTk3IChJSUNIKQotICoJZG9jdW1lbnQgbnVtYmVyIFRCRCAgICAgICAgICAgICAgICAgICA6IENvdWdhciBQb2ludCAoQ1BUKQorICoJZG9jdW1lbnQgbnVtYmVyIDMyNDY0NS0wMDEsIDMyNDY0Ni0wMDE6IENvdWdhciBQb2ludCAoQ1BUKQogICoJZG9jdW1lbnQgbnVtYmVyIFRCRCAgICAgICAgICAgICAgICAgICA6IFBhdHNidXJnIChQQkcpCisgKglkb2N1bWVudCBudW1iZXIgVEJEICAgICAgICAgICAgICAgICAgIDogREg4OXh4Q0MKICAqLwogCiAvKgpAQCAtODUsNiArODcsNyBAQAogCVRDT19JQ0g3REgsCS8qIElDSDdESCAqLwogCVRDT19JQ0g3TSwJLyogSUNINy1NICYgSUNINy1VICovCiAJVENPX0lDSDdNREgsCS8qIElDSDctTSBESCAqLworCVRDT19OTTEwLAkvKiBOTTEwICovCiAJVENPX0lDSDgsCS8qIElDSDggJiBJQ0g4UiAqLwogCVRDT19JQ0g4REgsCS8qIElDSDhESCAqLwogCVRDT19JQ0g4RE8sCS8qIElDSDhETyAqLwpAQCAtMTQ5LDYgKzE1Miw3IEBACiAJVENPX0NQVDMxLAkvKiBDb3VnYXIgUG9pbnQgKi8KIAlUQ09fUEJHMSwJLyogUGF0c2J1cmcgKi8KIAlUQ09fUEJHMiwJLyogUGF0c2J1cmcgKi8KKwlUQ09fREg4OVhYQ0MsCS8qIERIODl4eENDICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTE3NCw2ICsxNzgsNyBAQAogCXsiSUNIN0RIIiwgMn0sCiAJeyJJQ0g3LU0gb3IgSUNINy1VIiwgMn0sCiAJeyJJQ0g3LU0gREgiLCAyfSwKKwl7Ik5NMTAiLCAyfSwKIAl7IklDSDggb3IgSUNIOFIiLCAyfSwKIAl7IklDSDhESCIsIDJ9LAogCXsiSUNIOERPIiwgMn0sCkBAIC0yMzgsNiArMjQzLDcgQEAKIAl7IkNvdWdhciBQb2ludCIsIDJ9LAogCXsiUGF0c2J1cmciLCAyfSwKIAl7IlBhdHNidXJnIiwgMn0sCisJeyJESDg5eHhDQyIsIDJ9LAogCXtOVUxMLCAwfQogfTsKIApAQCAtMjkxLDYgKzI5Nyw3IEBACiAJeyBJVENPX1BDSV9ERVZJQ0UoUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzMwLAkJVENPX0lDSDdESCl9LAogCXsgSVRDT19QQ0lfREVWSUNFKFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18xLAkJVENPX0lDSDdNKX0sCiAJeyBJVENPX1BDSV9ERVZJQ0UoUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzMxLAkJVENPX0lDSDdNREgpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDI3YmMsCQkJCVRDT19OTTEwKX0sCiAJeyBJVENPX1BDSV9ERVZJQ0UoUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzAsCQlUQ09fSUNIOCl9LAogCXsgSVRDT19QQ0lfREVWSUNFKFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOF8yLAkJVENPX0lDSDhESCl9LAogCXsgSVRDT19QQ0lfREVWSUNFKFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOF8zLAkJVENPX0lDSDhETyl9LApAQCAtMzU1LDYgKzM2Miw3IEBACiAJeyBJVENPX1BDSV9ERVZJQ0UoMHgxYzVmLAkJCQlUQ09fQ1BUMzEpfSwKIAl7IElUQ09fUENJX0RFVklDRSgweDFkNDAsCQkJCVRDT19QQkcxKX0sCiAJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZDQxLAkJCQlUQ09fUEJHMil9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MjMxMCwJCQkJVENPX0RIODlYWENDKX0sCiAJeyAwLCB9LAkJCS8qIEVuZCBvZiBsaXN0ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlUQ09fd2R0X3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9rczg2OTVfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2tzODY5NV93ZHQuYwppbmRleCAyODUyYmIyLi44MTE0NzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2tzODY5NV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2tzODY5NV93ZHQuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bWFjaC90aW1leC5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtdGltZXIuaD4KIAogI2RlZmluZSBXRFRfREVGQVVMVF9USU1FCTUJLyogc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tNTQ4eF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbTU0OHhfd2R0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiYmNmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbTU0OHhfd2R0LmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBkcml2ZXJzL3dhdGNoZG9nL201NDh4X3dkdC5jCisgKgorICogV2F0Y2hkb2cgZHJpdmVyIGZvciBDb2xkRmlyZSBNQ0Y1NDh4IHByb2Nlc3NvcnMKKyAqIENvcHlyaWdodCAyMDEwIChjKSBQaGlsaXBwZSBEZSBNdXl0ZXIgPHBoZG1AbWFjcWVsLmJlPgorICoKKyAqIEFkYXB0ZWQgZnJvbSB0aGUgSVhQNHh4IHdhdGNoZG9nIGRyaXZlciwgd2hpY2ggY2FycmllcyB0aGVzZSBub3RpY2VzOgorICoKKyAqICBBdXRob3I6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CisgKgorICogIENvcHlyaWdodCAyMDA0IChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLgorICogIEJhc2VkIG9uIHNhMTEwMCBkcml2ZXIsIENvcHlyaWdodCAoQykgMjAwMCBPbGVnIERyb2tpbiA8Z3JlZW5AY3JpbWVhLmVkdT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPGFzbS9jb2xkZmlyZS5oPgorI2luY2x1ZGUgPGFzbS9tNTQ4eHNpbS5oPgorI2luY2x1ZGUgPGFzbS9tNTQ4eGdwdC5oPgorCitzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CitzdGF0aWMgdW5zaWduZWQgaW50IGhlYXJ0YmVhdCA9IDMwOwkvKiAoc2VjcykgRGVmYXVsdCBpcyAwLjUgbWludXRlICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB3ZHRfc3RhdHVzOworCisjZGVmaW5lCVdEVF9JTl9VU0UJCTAKKyNkZWZpbmUJV0RUX09LX1RPX0NMT1NFCQkxCisKK3N0YXRpYyB2b2lkIHdkdF9lbmFibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZ21zMDsKKworCS8qIHByZXNlcnZlIEdQSU8gdXNhZ2UsIGlmIGFueSAqLworCWdtczAgPSBfX3Jhd19yZWFkbChNQ0ZfTUJBUiArIE1DRl9HUFRfR01TMCk7CisJaWYgKGdtczAgJiBNQ0ZfR1BUX0dNU19UTVNfR1BJTykKKwkJZ21zMCAmPSAoTUNGX0dQVF9HTVNfVE1TX0dQSU8gfCBNQ0ZfR1BUX0dNU19HUElPX01BU0sKKwkJCQkJCQl8IE1DRl9HUFRfR01TX09EKTsKKwllbHNlCisJCWdtczAgPSBNQ0ZfR1BUX0dNU19UTVNfR1BJTyB8IE1DRl9HUFRfR01TX09EOworCV9fcmF3X3dyaXRlbChnbXMwLCBNQ0ZfTUJBUiArIE1DRl9HUFRfR01TMCk7CisJX19yYXdfd3JpdGVsKE1DRl9HUFRfR0NJUl9QUkUoaGVhcnRiZWF0KihNQ0ZfQlVTQ0xLLzB4ZmZmZikpIHwKKwkJCU1DRl9HUFRfR0NJUl9DTlQoMHhmZmZmKSwgTUNGX01CQVIgKyBNQ0ZfR1BUX0dDSVIwKTsKKwlnbXMwIHw9IE1DRl9HUFRfR01TX09DUFcoMHhBNSkgfCBNQ0ZfR1BUX0dNU19XREVOIHwgTUNGX0dQVF9HTVNfQ0U7CisJX19yYXdfd3JpdGVsKGdtczAsIE1DRl9NQkFSICsgTUNGX0dQVF9HTVMwKTsKK30KKworc3RhdGljIHZvaWQgd2R0X2Rpc2FibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZ21zMDsKKworCS8qIGRpc2FibGUgd2F0Y2hkb2cgKi8KKwlnbXMwID0gX19yYXdfcmVhZGwoTUNGX01CQVIgKyBNQ0ZfR1BUX0dNUzApOworCWdtczAgJj0gfihNQ0ZfR1BUX0dNU19XREVOIHwgTUNGX0dQVF9HTVNfQ0UpOworCV9fcmF3X3dyaXRlbChnbXMwLCBNQ0ZfTUJBUiArIE1DRl9HUFRfR01TMCk7Cit9CisKK3N0YXRpYyB2b2lkIHdkdF9rZWVwYWxpdmUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZ21zMDsKKworCWdtczAgPSBfX3Jhd19yZWFkbChNQ0ZfTUJBUiArIE1DRl9HUFRfR01TMCk7CisJZ21zMCB8PSBNQ0ZfR1BUX0dNU19PQ1BXKDB4QTUpOworCV9fcmF3X3dyaXRlbChnbXMwLCBNQ0ZfTUJBUiArIE1DRl9HUFRfR01TMCk7Cit9CisKK3N0YXRpYyBpbnQgbTU0OHhfd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoV0RUX0lOX1VTRSwgJndkdF9zdGF0dXMpKQorCQlyZXR1cm4gLUVCVVNZOworCisJY2xlYXJfYml0KFdEVF9PS19UT19DTE9TRSwgJndkdF9zdGF0dXMpOworCXdkdF9lbmFibGUoKTsKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG01NDh4X3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqZGF0YSwKKwkJCQkJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKK3sKKwlpZiAobGVuKSB7CisJCWlmICghbm93YXlvdXQpIHsKKwkJCXNpemVfdCBpOworCisJCQljbGVhcl9iaXQoV0RUX09LX1RPX0NMT1NFLCAmd2R0X3N0YXR1cyk7CisKKwkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKKwkJCQljaGFyIGM7CisKKwkJCQlpZiAoZ2V0X3VzZXIoYywgZGF0YSArIGkpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQlpZiAoYyA9PSAnVicpCisJCQkJCXNldF9iaXQoV0RUX09LX1RPX0NMT1NFLCAmd2R0X3N0YXR1cyk7CisJCQl9CisJCX0KKwkJd2R0X2tlZXBhbGl2ZSgpOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJLm9wdGlvbnMJPSBXRElPRl9NQUdJQ0NMT1NFIHwgV0RJT0ZfU0VUVElNRU9VVCB8CisJCQkJV0RJT0ZfS0VFUEFMSVZFUElORywKKwkuaWRlbnRpdHkJPSAiQ29sZGZpcmUgTTU0OHggV2F0Y2hkb2ciLAorfTsKKworc3RhdGljIGxvbmcgbTU0OHhfd2R0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCQkJCSB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0ID0gLUVOT1RUWTsKKwlpbnQgdGltZTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQlyZXQgPSBjb3B5X3RvX3VzZXIoKHN0cnVjdCB3YXRjaGRvZ19pbmZvICopYXJnLCAmaWRlbnQsCisJCQkJICAgc2l6ZW9mKGlkZW50KSkgPyAtRUZBVUxUIDogMDsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwkJcmV0ID0gcHV0X3VzZXIoMCwgKGludCAqKWFyZyk7CisJCWJyZWFrOworCisJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgorCQlyZXQgPSBwdXRfdXNlcigwLCAoaW50ICopYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJd2R0X2tlZXBhbGl2ZSgpOworCQlyZXQgPSAwOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKKwkJcmV0ID0gZ2V0X3VzZXIodGltZSwgKGludCAqKWFyZyk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKworCQlpZiAodGltZSA8PSAwIHx8IHRpbWUgPiAzMCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaGVhcnRiZWF0ID0gdGltZTsKKwkJd2R0X2VuYWJsZSgpOworCQkvKiBGYWxsIHRocm91Z2ggKi8KKworCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKwkJcmV0ID0gcHV0X3VzZXIoaGVhcnRiZWF0LCAoaW50ICopYXJnKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbTU0OHhfd2R0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKHRlc3RfYml0KFdEVF9PS19UT19DTE9TRSwgJndkdF9zdGF0dXMpKQorCQl3ZHRfZGlzYWJsZSgpOworCWVsc2UgeworCQlwcmludGsoS0VSTl9DUklUICJXQVRDSERPRzogRGV2aWNlIGNsb3NlZCB1bmV4cGVjdGVkbHkgLSAiCisJCQkJCSJ0aW1lciB3aWxsIG5vdCBzdG9wXG4iKTsKKwkJd2R0X2tlZXBhbGl2ZSgpOworCX0KKwljbGVhcl9iaXQoV0RUX0lOX1VTRSwgJndkdF9zdGF0dXMpOworCWNsZWFyX2JpdChXRFRfT0tfVE9fQ0xPU0UsICZ3ZHRfc3RhdHVzKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG01NDh4X3dkdF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKKwkud3JpdGUJCT0gbTU0OHhfd2R0X3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bAk9IG01NDh4X3dkdF9pb2N0bCwKKwkub3BlbgkJPSBtNTQ4eF93ZHRfb3BlbiwKKwkucmVsZWFzZQk9IG01NDh4X3dkdF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG01NDh4X3dkdF9taXNjZGV2ID0geworCS5taW5vcgkJPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZQkJPSAid2F0Y2hkb2ciLAorCS5mb3BzCQk9ICZtNTQ4eF93ZHRfZm9wcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG01NDh4X3dkdF9pbml0KHZvaWQpCit7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oTUNGX01CQVIgKyBNQ0ZfR1BUX0dDSVIwLCA0LAorCQkJCQkJIkNvbGRmaXJlIE01NDh4IFdhdGNoZG9nIikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSJDb2xkZmlyZSBNNTQ4eCBXYXRjaGRvZyA6IEkvTyByZWdpb24gYnVzeVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXByaW50ayhLRVJOX0lORk8gIkNvbGRGaXJlIHdhdGNoZG9nIGRyaXZlciBpcyBsb2FkZWQuXG4iKTsKKworCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZtNTQ4eF93ZHRfbWlzY2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtNTQ4eF93ZHRfZXhpdCh2b2lkKQoreworCW1pc2NfZGVyZWdpc3RlcigmbTU0OHhfd2R0X21pc2NkZXYpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihNQ0ZfTUJBUiArIE1DRl9HUFRfR0NJUjAsIDQpOworfQorCittb2R1bGVfaW5pdChtNTQ4eF93ZHRfaW5pdCk7Cittb2R1bGVfZXhpdChtNTQ4eF93ZHRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlBoaWxpcHBlIERlIE11eXRlciA8cGhkbUBtYWNxZWwuYmU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbGRmaXJlIE01NDh4IFdhdGNoZG9nIik7CisKK21vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzIChkZWZhdWx0IDMwcykiKTsKKworbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL252X3Rjby5jIGIvZHJpdmVycy93YXRjaGRvZy9udl90Y28uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTUwYWE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy93YXRjaGRvZy9udl90Y28uYwpAQCAtMCwwICsxLDUxMiBAQAorLyoKKyAqCW52X3RjbyAwLjAxOglUQ08gdGltZXIgZHJpdmVyIGZvciBOViBjaGlwc2V0cworICoKKyAqCShjKSBDb3B5cmlnaHQgMjAwNSBHb29nbGUgSW5jLiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKglCYXNlZCBvZmYgaTh4eF90Y28uYzoKKyAqCShjKSBDb3B5cmlnaHQgMjAwMCBrZXJuZWwgY29uY2VwdHMgPG5pbHNAa2VybmVsY29uY2VwdHMuZGU+LCBBbGwgUmlnaHRzCisgKglSZXNlcnZlZC4KKyAqCQkJCWh0dHA6Ly93d3cua2VybmVsY29uY2VwdHMuZGUKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCVRDTyB0aW1lciBkcml2ZXIgZm9yIE5WIGNoaXBzZXRzCisgKgliYXNlZCBvbiBzb2Z0ZG9nLmMgYnkgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KKyAqLworCisvKgorICoJSW5jbHVkZXMsIGRlZmluZXMsIHZhcmlhYmxlcywgbW9kdWxlIHBhcmFtZXRlcnMsIC4uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSAibnZfdGNvLmgiCisKKy8qIE1vZHVsZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBUQ09fVkVSU0lPTiAiMC4wMSIKKyNkZWZpbmUgVENPX01PRFVMRV9OQU1FICJOVl9UQ08iCisjZGVmaW5lIFRDT19EUklWRVJfTkFNRSAgIFRDT19NT0RVTEVfTkFNRSAiLCB2IiBUQ09fVkVSU0lPTgorI2RlZmluZSBQRlggVENPX01PRFVMRV9OQU1FICI6ICIKKworLyogaW50ZXJuYWwgdmFyaWFibGVzICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRjb2Jhc2U7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRjb19sb2NrKTsJLyogR3VhcmRzIHRoZSBoYXJkd2FyZSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJfYWxpdmU7CitzdGF0aWMgY2hhciB0Y29fZXhwZWN0X2Nsb3NlOworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICp0Y29fcGNpOworCisvKiB0aGUgd2F0Y2hkb2cgcGxhdGZvcm0gZGV2aWNlICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbnZfdGNvX3BsYXRmb3JtX2RldmljZTsKKworLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDMwCS8qIDMwIHNlYyBkZWZhdWx0IGhlYXJ0YmVhdCAoMjxoZWFydGJlYXQ8MzkpICovCitzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IFdBVENIRE9HX0hFQVJUQkVBVDsgIC8qIGluIHNlY29uZHMgKi8KK21vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAoMjxoZWFydGJlYXQ8MzksICIKKwkJCSAgICAiZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CisKK3N0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKK21vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQiCisJCSIgKGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CisKKy8qCisgKiBTb21lIFRDTyBzcGVjaWZpYyBmdW5jdGlvbnMKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHNlY29uZHNfdG9fdGlja3MoaW50IHNlY29uZHMpCit7CisJLyogdGhlIGludGVybmFsIHRpbWVyIGlzIHN0b3JlZCBhcyB0aWNrcyB3aGljaCBkZWNyZW1lbnQKKwkgKiBldmVyeSAwLjYgc2Vjb25kcyAqLworCXJldHVybiAoc2Vjb25kcyAqIDEwKSAvIDY7Cit9CisKK3N0YXRpYyB2b2lkIHRjb190aW1lcl9zdGFydCh2b2lkKQoreworCXUzMiB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0Y29fbG9jaywgZmxhZ3MpOworCXZhbCA9IGlubChUQ09fQ05UKHRjb2Jhc2UpKTsKKwl2YWwgJj0gflRDT19DTlRfVENPSEFMVDsKKwlvdXRsKHZhbCwgVENPX0NOVCh0Y29iYXNlKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGNvX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdGNvX3RpbWVyX3N0b3Aodm9pZCkKK3sKKwl1MzIgdmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGNvX2xvY2ssIGZsYWdzKTsKKwl2YWwgPSBpbmwoVENPX0NOVCh0Y29iYXNlKSk7CisJdmFsIHw9IFRDT19DTlRfVENPSEFMVDsKKwlvdXRsKHZhbCwgVENPX0NOVCh0Y29iYXNlKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGNvX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdGNvX3RpbWVyX2tlZXBhbGl2ZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGNvX2xvY2ssIGZsYWdzKTsKKwlvdXRiKDB4MDEsIFRDT19STEQodGNvYmFzZSkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjb19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgdGNvX3RpbWVyX3NldF9oZWFydGJlYXQoaW50IHQpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgY2hhciB0bXJ2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCB2YWw7CisKKwkvKgorCSAqIG5vdGUgc2Vjb25kc190b190aWNrcyh0KSA+IHQsIHNvIGlmIHQgPiAweDNmLCBzbyBpcworCSAqIHRtcnZhbD1zZWNvbmRzX3RvX3RpY2tzKHQpLiAgQ2hlY2sgdGhhdCB0aGUgY291bnQgaW4gc2Vjb25kcyBpc24ndAorCSAqIG91dCBvZiByYW5nZSBvbiBpdCdzIG93biAodG8gYXZvaWQgb3ZlcmZsb3cgaW4gdG1ydmFsKS4KKwkgKi8KKwlpZiAodCA8IDAgfHwgdCA+IDB4M2YpCisJCXJldHVybiAtRUlOVkFMOworCXRtcnZhbCA9IHNlY29uZHNfdG9fdGlja3ModCk7CisKKwkvKiAiVmFsdWVzIG9mIDBoLTNoIGFyZSBpZ25vcmVkIGFuZCBzaG91bGQgbm90IGJlIGF0dGVtcHRlZCIgKi8KKwlpZiAodG1ydmFsID4gMHgzZiB8fCB0bXJ2YWwgPCAweDA0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFdyaXRlIG5ldyBoZWFydGJlYXQgdG8gd2F0Y2hkb2cgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGNvX2xvY2ssIGZsYWdzKTsKKwl2YWwgPSBpbmIoVENPX1RNUih0Y29iYXNlKSk7CisJdmFsICY9IDB4YzA7CisJdmFsIHw9IHRtcnZhbDsKKwlvdXRiKHZhbCwgVENPX1RNUih0Y29iYXNlKSk7CisJdmFsID0gaW5iKFRDT19UTVIodGNvYmFzZSkpOworCisJaWYgKCh2YWwgJiAweDNmKSAhPSB0bXJ2YWwpCisJCXJldCA9IC1FSU5WQUw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGNvX2xvY2ssIGZsYWdzKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwloZWFydGJlYXQgPSB0OworCXJldHVybiAwOworfQorCisvKgorICoJL2Rldi93YXRjaGRvZyBoYW5kbGluZworICovCisKK3N0YXRpYyBpbnQgbnZfdGNvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJLyogL2Rldi93YXRjaGRvZyBjYW4gb25seSBiZSBvcGVuZWQgb25jZSAqLworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZ0aW1lcl9hbGl2ZSkpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBSZWxvYWQgYW5kIGFjdGl2YXRlIHRpbWVyICovCisJdGNvX3RpbWVyX2tlZXBhbGl2ZSgpOworCXRjb190aW1lcl9zdGFydCgpOworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKK30KKworc3RhdGljIGludCBudl90Y29fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwkvKiBTaHV0IG9mZiB0aGUgdGltZXIgKi8KKwlpZiAodGNvX2V4cGVjdF9jbG9zZSA9PSA0MikgeworCQl0Y29fdGltZXJfc3RvcCgpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0NSSVQgUEZYICJVbmV4cGVjdGVkIGNsb3NlLCBub3Qgc3RvcHBpbmcgIgorCQkgICAgICAgIndhdGNoZG9nIVxuIik7CisJCXRjb190aW1lcl9rZWVwYWxpdmUoKTsKKwl9CisJY2xlYXJfYml0KDAsICZ0aW1lcl9hbGl2ZSk7CisJdGNvX2V4cGVjdF9jbG9zZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG52X3Rjb193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCisJCQkgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCS8qIFNlZSBpZiB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAnVicgYW5kIHJlbG9hZCB0aGUgdGltZXIgKi8KKwlpZiAobGVuKSB7CisJCWlmICghbm93YXlvdXQpIHsKKwkJCXNpemVfdCBpOworCisJCQkvKgorCQkJICogbm90ZToganVzdCBpbiBjYXNlIHNvbWVvbmUgd3JvdGUgdGhlIG1hZ2ljIGNoYXJhY3RlcgorCQkJICogZml2ZSBtb250aHMgYWdvLi4uCisJCQkgKi8KKwkJCXRjb19leHBlY3RfY2xvc2UgPSAwOworCisJCQkvKgorCQkJICogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZSBtYWdpYworCQkJICogY2hhcmFjdGVyCisJCQkgKi8KKwkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKKwkJCQljaGFyIGM7CisJCQkJaWYgKGdldF91c2VyKGMsIGRhdGEgKyBpKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJaWYgKGMgPT0gJ1YnKQorCQkJCQl0Y29fZXhwZWN0X2Nsb3NlID0gNDI7CisJCQl9CisJCX0KKworCQkvKiBzb21lb25lIHdyb3RlIHRvIHVzLCB3ZSBzaG91bGQgcmVsb2FkIHRoZSB0aW1lciAqLworCQl0Y29fdGltZXJfa2VlcGFsaXZlKCk7CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBsb25nIG52X3Rjb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgbmV3X29wdGlvbnMsIHJldHZhbCA9IC1FSU5WQUw7CisJaW50IG5ld19oZWFydGJlYXQ7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJaW50IF9fdXNlciAqcCA9IGFyZ3A7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCQkub3B0aW9ucyA9CQlXRElPRl9TRVRUSU1FT1VUIHwKKwkJCQkJV0RJT0ZfS0VFUEFMSVZFUElORyB8CisJCQkJCVdESU9GX01BR0lDQ0xPU0UsCisJCS5maXJtd2FyZV92ZXJzaW9uID0JMCwKKwkJLmlkZW50aXR5ID0JCVRDT19NT0RVTEVfTkFNRSwKKwl9OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmlkZW50LCBzaXplb2YoaWRlbnQpKSA/IC1FRkFVTFQgOiAwOworCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKKwkJcmV0dXJuIHB1dF91c2VyKDAsIHApOworCWNhc2UgV0RJT0NfU0VUT1BUSU9OUzoKKwkJaWYgKGdldF91c2VyKG5ld19vcHRpb25zLCBwKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAobmV3X29wdGlvbnMgJiBXRElPU19ESVNBQkxFQ0FSRCkgeworCQkJdGNvX3RpbWVyX3N0b3AoKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJaWYgKG5ld19vcHRpb25zICYgV0RJT1NfRU5BQkxFQ0FSRCkgeworCQkJdGNvX3RpbWVyX2tlZXBhbGl2ZSgpOworCQkJdGNvX3RpbWVyX3N0YXJ0KCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCXJldHVybiByZXR2YWw7CisJY2FzZSBXRElPQ19LRUVQQUxJVkU6CisJCXRjb190aW1lcl9rZWVwYWxpdmUoKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBXRElPQ19TRVRUSU1FT1VUOgorCQlpZiAoZ2V0X3VzZXIobmV3X2hlYXJ0YmVhdCwgcCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHRjb190aW1lcl9zZXRfaGVhcnRiZWF0KG5ld19oZWFydGJlYXQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXRjb190aW1lcl9rZWVwYWxpdmUoKTsKKwkJLyogRmFsbCB0aHJvdWdoICovCisJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgorCQlyZXR1cm4gcHV0X3VzZXIoaGVhcnRiZWF0LCBwKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1RUWTsKKwl9Cit9CisKKy8qCisgKglLZXJuZWwgSW50ZXJmYWNlcworICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG52X3Rjb19mb3BzID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubGxzZWVrID0JCW5vX2xsc2VlaywKKwkud3JpdGUgPQkJbnZfdGNvX3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bCA9CW52X3Rjb19pb2N0bCwKKwkub3BlbiA9CQkJbnZfdGNvX29wZW4sCisJLnJlbGVhc2UgPQkJbnZfdGNvX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbnZfdGNvX21pc2NkZXYgPSB7CisJLm1pbm9yID0JV0FUQ0hET0dfTUlOT1IsCisJLm5hbWUgPQkJIndhdGNoZG9nIiwKKwkuZm9wcyA9CQkmbnZfdGNvX2ZvcHMsCit9OworCisvKgorICogRGF0YSBmb3IgUENJIGRyaXZlciBpbnRlcmZhY2UKKyAqCisgKiBUaGlzIGRhdGEgb25seSBleGlzdHMgZm9yIGV4cG9ydGluZyB0aGUgc3VwcG9ydGVkCisgKiBQQ0kgaWRzIHZpYSBNT0RVTEVfREVWSUNFX1RBQkxFLiAgV2UgZG8gbm90IGFjdHVhbGx5CisgKiByZWdpc3RlciBhIHBjaV9kcml2ZXIsIGJlY2F1c2Ugc29tZW9uZSBlbHNlIG1pZ2h0IG9uZSBkYXkKKyAqIHdhbnQgdG8gcmVnaXN0ZXIgYW5vdGhlciBkcml2ZXIgb24gdGhlIHNhbWUgUENJIGlkLgorICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdGNvX3BjaV90YmxbXSA9IHsKKwl7IFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTFfU01CVVMsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXsgUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1NV9TTUJVUywKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCisJeyAwLCB9LAkJCS8qIEVuZCBvZiBsaXN0ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHRjb19wY2lfdGJsKTsKKworLyoKKyAqCUluaXQgJiBleGl0IHJvdXRpbmVzCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgX19pbml0IG52X3Rjb19nZXRkZXZpY2Uodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKwl1MzIgdmFsOworCisJLyogRmluZCB0aGUgUENJIGRldmljZSAqLworCWZvcl9lYWNoX3BjaV9kZXYoZGV2KSB7CisJCWlmIChwY2lfbWF0Y2hfaWQodGNvX3BjaV90YmwsIGRldikgIT0gTlVMTCkgeworCQkJdGNvX3BjaSA9IGRldjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCF0Y29fcGNpKQorCQlyZXR1cm4gMDsKKworCS8qIEZpbmQgdGhlIGJhc2UgaW8gcG9ydCAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0Y29fcGNpLCAweDY0LCAmdmFsKTsKKwl2YWwgJj0gMHhmZmZmOworCWlmICh2YWwgPT0gMHgwMDAxIHx8IHZhbCA9PSAweDAwMDApIHsKKwkJLyogU29tZXRoaW5nIGlzIHdyb25nIGhlcmUsIGJhciBpc24ndCBzZXR1cCAqLworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gZ2V0IHRjb2Jhc2UgYWRkcmVzc1xuIik7CisJCXJldHVybiAwOworCX0KKwl2YWwgJj0gMHhmZjAwOworCXRjb2Jhc2UgPSB2YWwgKyAweDQwOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbih0Y29iYXNlLCAweDEwLCAiTlYgVENPIikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiSS9PIGFkZHJlc3MgMHglMDR4IGFscmVhZHkgaW4gdXNlXG4iLAorCQkgICAgICAgdGNvYmFzZSk7CisJCXJldHVybiAwOworCX0KKworCS8qIFNldCBhIHJlYXNvbmFibGUgaGVhcnRiZWF0IGJlZm9yZSB3ZSBzdG9wIHRoZSB0aW1lciAqLworCXRjb190aW1lcl9zZXRfaGVhcnRiZWF0KDMwKTsKKworCS8qCisJICogU3RvcCB0aGUgVENPIGJlZm9yZSB3ZSBjaGFuZ2UgYW55dGhpbmcgc28gd2UgZG9uJ3QgcmFjZSB3aXRoCisJICogYSB6ZXJvZWQgdGltZXIuCisJICovCisJdGNvX3RpbWVyX2tlZXBhbGl2ZSgpOworCXRjb190aW1lcl9zdG9wKCk7CisKKwkvKiBEaXNhYmxlIFNNSSBjYXVzZWQgYnkgVENPICovCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihNQ1A1MV9TTUlfRU4odGNvYmFzZSksIDQsICJOViBUQ08iKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJJL08gYWRkcmVzcyAweCUwNHggYWxyZWFkeSBpbiB1c2VcbiIsCisJCSAgICAgICBNQ1A1MV9TTUlfRU4odGNvYmFzZSkpOworCQlnb3RvIG91dDsKKwl9CisJdmFsID0gaW5sKE1DUDUxX1NNSV9FTih0Y29iYXNlKSk7CisJdmFsICY9IH5NQ1A1MV9TTUlfRU5fVENPOworCW91dGwodmFsLCBNQ1A1MV9TTUlfRU4odGNvYmFzZSkpOworCXZhbCA9IGlubChNQ1A1MV9TTUlfRU4odGNvYmFzZSkpOworCXJlbGVhc2VfcmVnaW9uKE1DUDUxX1NNSV9FTih0Y29iYXNlKSwgNCk7CisJaWYgKHZhbCAmIE1DUDUxX1NNSV9FTl9UQ08pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ291bGQgbm90IGRpc2FibGUgU01JIGNhdXNlZCBieSBUQ09cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBDaGVjayBjaGlwc2V0J3MgTk9fUkVCT09UIGJpdCAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0Y29fcGNpLCBNQ1A1MV9TTUJVU19TRVRVUF9CLCAmdmFsKTsKKwl2YWwgfD0gTUNQNTFfU01CVVNfU0VUVVBfQl9UQ09fUkVCT09UOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQodGNvX3BjaSwgTUNQNTFfU01CVVNfU0VUVVBfQiwgdmFsKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQodGNvX3BjaSwgTUNQNTFfU01CVVNfU0VUVVBfQiwgJnZhbCk7CisJaWYgKCEodmFsICYgTUNQNTFfU01CVVNfU0VUVVBfQl9UQ09fUkVCT09UKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVzZXQgTk9fUkVCT09UIGZsYWcsIHJlYm9vdCAiCisJCSAgICAgICAiZGlzYWJsZWQgYnkgaGFyZHdhcmVcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXR1cm4gMTsKK291dDoKKwlyZWxlYXNlX3JlZ2lvbih0Y29iYXNlLCAweDEwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbnZfdGNvX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwkvKiBDaGVjayB3aGV0aGVyIG9yIG5vdCB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgaXMgdGhlcmUgKi8KKwlpZiAoIW52X3Rjb19nZXRkZXZpY2UoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBDaGVjayB0byBzZWUgaWYgbGFzdCByZWJvb3Qgd2FzIGR1ZSB0byB3YXRjaGRvZyB0aW1lb3V0ICovCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIldhdGNoZG9nIHJlYm9vdCAlc2RldGVjdGVkLlxuIiwKKwkgICAgICAgaW5sKFRDT19TVFModGNvYmFzZSkpICYgVENPX1NUU19UQ08yVE9fU1RTID8gIiIgOiAibm90ICIpOworCisJLyogQ2xlYXIgb3V0IHRoZSBvbGQgc3RhdHVzICovCisJb3V0bChUQ09fU1RTX1JFU0VULCBUQ09fU1RTKHRjb2Jhc2UpKTsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlLgorCSAqIElmIG5vdCwgcmVzZXQgdG8gdGhlIGRlZmF1bHQuCisJICovCisJaWYgKHRjb190aW1lcl9zZXRfaGVhcnRiZWF0KGhlYXJ0YmVhdCkpIHsKKwkJaGVhcnRiZWF0ID0gV0FUQ0hET0dfSEVBUlRCRUFUOworCQl0Y29fdGltZXJfc2V0X2hlYXJ0YmVhdChoZWFydGJlYXQpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMjxoZWFydGJlYXQ8MzksICIKKwkJICAgICAgICJ1c2luZyAlZFxuIiwgaGVhcnRiZWF0KTsKKwl9CisKKwlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZudl90Y29fbWlzY2Rldik7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkICIKKwkJICAgICAgICIoZXJyPSVkKVxuIiwgV0FUQ0hET0dfTUlOT1IsIHJldCk7CisJCWdvdG8gdW5yZWdfcmVnaW9uOworCX0KKworCWNsZWFyX2JpdCgwLCAmdGltZXJfYWxpdmUpOworCisJdGNvX3RpbWVyX3N0b3AoKTsKKworCXByaW50ayhLRVJOX0lORk8gUEZYICJpbml0aWFsaXplZCAoMHglMDR4KS4gaGVhcnRiZWF0PSVkIHNlYyAiCisJICAgICAgICIobm93YXlvdXQ9JWQpXG4iLCB0Y29iYXNlLCBoZWFydGJlYXQsIG5vd2F5b3V0KTsKKworCXJldHVybiAwOworCit1bnJlZ19yZWdpb246CisJcmVsZWFzZV9yZWdpb24odGNvYmFzZSwgMHgxMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IG52X3Rjb19jbGVhbnVwKHZvaWQpCit7CisJdTMyIHZhbDsKKworCS8qIFN0b3AgdGhlIHRpbWVyIGJlZm9yZSB3ZSBsZWF2ZSAqLworCWlmICghbm93YXlvdXQpCisJCXRjb190aW1lcl9zdG9wKCk7CisKKwkvKiBTZXQgdGhlIE5PX1JFQk9PVCBiaXQgdG8gcHJldmVudCBsYXRlciByZWJvb3RzLCBqdXN0IGZvciBzdXJlICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRjb19wY2ksIE1DUDUxX1NNQlVTX1NFVFVQX0IsICZ2YWwpOworCXZhbCAmPSB+TUNQNTFfU01CVVNfU0VUVVBfQl9UQ09fUkVCT09UOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQodGNvX3BjaSwgTUNQNTFfU01CVVNfU0VUVVBfQiwgdmFsKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQodGNvX3BjaSwgTUNQNTFfU01CVVNfU0VUVVBfQiwgJnZhbCk7CisJaWYgKHZhbCAmIE1DUDUxX1NNQlVTX1NFVFVQX0JfVENPX1JFQk9PVCkgeworCQlwcmludGsoS0VSTl9DUklUIFBGWCAiQ291bGRuJ3QgdW5zZXQgUkVCT09UIGJpdC4gIE1hY2hpbmUgbWF5ICIKKwkJICAgICAgICJzb29uIHJlc2V0XG4iKTsKKwl9CisKKwkvKiBEZXJlZ2lzdGVyICovCisJbWlzY19kZXJlZ2lzdGVyKCZudl90Y29fbWlzY2Rldik7CisJcmVsZWFzZV9yZWdpb24odGNvYmFzZSwgMHgxMCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG52X3Rjb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCWlmICh0Y29iYXNlKQorCQludl90Y29fY2xlYW51cCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG52X3Rjb19zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJdGNvX3RpbWVyX3N0b3AoKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbnZfdGNvX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbnZfdGNvX2luaXQsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChudl90Y29fcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSBudl90Y29fc2h1dGRvd24sCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9IFRDT19NT0RVTEVfTkFNRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbnZfdGNvX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IGVycjsKKworCXByaW50ayhLRVJOX0lORk8gUEZYICJOViBUQ08gV2F0Y2hEb2cgVGltZXIgRHJpdmVyIHYlc1xuIiwKKwkgICAgICAgVENPX1ZFUlNJT04pOworCisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZudl90Y29fZHJpdmVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbnZfdGNvX3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoCisJCQkJCVRDT19NT0RVTEVfTkFNRSwgLTEsIE5VTEwsIDApOworCWlmIChJU19FUlIobnZfdGNvX3BsYXRmb3JtX2RldmljZSkpIHsKKwkJZXJyID0gUFRSX0VSUihudl90Y29fcGxhdGZvcm1fZGV2aWNlKTsKKwkJZ290byB1bnJlZ19wbGF0Zm9ybV9kcml2ZXI7CisJfQorCisJcmV0dXJuIDA7CisKK3VucmVnX3BsYXRmb3JtX2RyaXZlcjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbnZfdGNvX2RyaXZlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG52X3Rjb19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG52X3Rjb19wbGF0Zm9ybV9kZXZpY2UpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZudl90Y29fZHJpdmVyKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiTlYgVENPIFdhdGNoZG9nIE1vZHVsZSBVbmxvYWRlZC5cbiIpOworfQorCittb2R1bGVfaW5pdChudl90Y29faW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQobnZfdGNvX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiTWlrZSBXYXljaGlzb24iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVENPIHRpbWVyIGRyaXZlciBmb3IgTlYgY2hpcHNldHMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbnZfdGNvLmggYi9kcml2ZXJzL3dhdGNoZG9nL252X3Rjby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZDFkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3dhdGNoZG9nL252X3Rjby5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKgludl90Y286CVRDTyB0aW1lciBkcml2ZXIgZm9yIG5WaWRpYSBjaGlwc2V0cy4KKyAqCisgKgkoYykgQ29weXJpZ2h0IDIwMDUgR29vZ2xlIEluYy4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICoJU3VwcG9ydGVkIENoaXBzZXRzOgorICoJCS0gTUNQNTEvTUNQNTUKKyAqCisgKgkoYykgQ29weXJpZ2h0IDIwMDAga2VybmVsIGNvbmNlcHRzIDxuaWxzQGtlcm5lbGNvbmNlcHRzLmRlPiwgQWxsIFJpZ2h0cworICoJUmVzZXJ2ZWQuCisgKgkJCQlodHRwOi8vd3d3Lmtlcm5lbGNvbmNlcHRzLmRlCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglOZWl0aGVyIGtlcm5lbCBjb25jZXB0cyBub3IgTmlscyBGYWVyYmVyIGFkbWl0IGxpYWJpbGl0eSBub3IgcHJvdmlkZQorICoJd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIHByb3ZpZGVkCisgKgkiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKgorICoJKGMpIENvcHlyaWdodCAyMDAwCWtlcm5lbCBjb25jZXB0cyA8bmlsc0BrZXJuZWxjb25jZXB0cy5kZT4KKyAqCQkJCWRldmVsb3BlZCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSmVudHJvIEFHLCBIYWFyL011bmljaCAoR2VybWFueSkKKyAqCisgKglUQ08gdGltZXIgZHJpdmVyIGZvciBOViBjaGlwc2V0cworICoJYmFzZWQgb24gc29mdGRvZy5jIGJ5IEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CisgKi8KKworLyoKKyAqIFNvbWUgYWRkcmVzcyBkZWZpbml0aW9ucyBmb3IgdGhlIFRDTworICovCisKKyNkZWZpbmUgVENPX1JMRChiYXNlKQkoKGJhc2UpICsgMHgwMCkJLyogVENPIFRpbWVyIFJlbG9hZCBhbmQgQ3VycmVudCBWYWx1ZSAqLworI2RlZmluZSBUQ09fVE1SKGJhc2UpCSgoYmFzZSkgKyAweDAxKQkvKiBUQ08gVGltZXIgSW5pdGlhbCBWYWx1ZQkqLworCisjZGVmaW5lIFRDT19TVFMoYmFzZSkJKChiYXNlKSArIDB4MDQpCS8qIFRDTyBTdGF0dXMgUmVnaXN0ZXIJCSovCisvKgorICogVENPIEJvb3QgU3RhdHVzIGJpdDogc2V0IG9uIFRDTyByZXNldCwgcmVzZXQgYnkgc29mdHdhcmUgb3Igc3RhbmRieQorICogcG93ZXItZ29vZCAoc3Vydml2ZXMgcmVib290cyksIHVuZm9ydHVuYXRlbHkgdGhpcyBiaXQgaXMgbmV2ZXIKKyAqIHNldC4KKyAqLworIyAgZGVmaW5lIFRDT19TVFNfQk9PVF9TVFMJKDEgPDwgOSkKKy8qCisgKiBmaXJzdCBhbmQgMm5kIHRpbWVvdXQgc3RhdHVzIGJpdHMsIHRoZXNlIGFsc28gc3Vydml2ZSBhIHdhcm0gYm9vdCwKKyAqIGFuZCB0aGV5IHdvcmssIHNvIHdlIHVzZSB0aGVtLgorICovCisjICBkZWZpbmUgVENPX1NUU19UQ09fSU5UX1NUUwkoMSA8PCAxKQorIyAgZGVmaW5lIFRDT19TVFNfVENPMlRPX1NUUwkoMSA8PCAxMCkKKyMgIGRlZmluZSBUQ09fU1RTX1JFU0VUCQkoVENPX1NUU19CT09UX1NUUyB8IFRDT19TVFNfVENPMlRPX1NUUyB8IFwKKwkJCQkgVENPX1NUU19UQ09fSU5UX1NUUykKKworI2RlZmluZSBUQ09fQ05UKGJhc2UpCSgoYmFzZSkgKyAweDA4KQkvKiBUQ08gQ29udHJvbCBSZWdpc3RlcgkqLworIyAgZGVmaW5lIFRDT19DTlRfVENPSEFMVAkoMSA8PCAxMikKKworI2RlZmluZSBNQ1A1MV9TTUJVU19TRVRVUF9CIDB4ZTgKKyMgIGRlZmluZSBNQ1A1MV9TTUJVU19TRVRVUF9CX1RDT19SRUJPT1QgKDEgPDwgMjUpCisKKy8qCisgKiBUaGUgU01JX0VOIHJlZ2lzdGVyIGlzIGF0IHRoZSBiYXNlIGlvIGFkZHJlc3MgKyAweDA0LAorICogd2hpbGUgVENPQkFTRSBpcyArIDB4NDAuCisgKi8KKyNkZWZpbmUgTUNQNTFfU01JX0VOKGJhc2UpCSgoYmFzZSkgLSAweDQwICsgMHgwNCkKKyMgIGRlZmluZSBNQ1A1MV9TTUlfRU5fVENPCSgoMSA8PCA0KSB8ICgxIDw8IDUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zcDUxMDBfdGNvLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NwNTEwMF90Y28uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDgzNzI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zcDUxMDBfdGNvLmMKQEAgLTAsMCArMSw0ODAgQEAKKy8qCisgKglzcDUxMDBfdGNvIDoJVENPIHRpbWVyIGRyaXZlciBmb3Igc3A1MTAwIGNoaXBzZXRzCisgKgorICoJKGMpIENvcHlyaWdodCAyMDA5IEdvb2dsZSBJbmMuLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqCUJhc2VkIG9uIGk4eHhfdGNvLmM6CisgKgkoYykgQ29weXJpZ2h0IDIwMDAga2VybmVsIGNvbmNlcHRzIDxuaWxzQGtlcm5lbGNvbmNlcHRzLmRlPiwgQWxsIFJpZ2h0cworICoJUmVzZXJ2ZWQuCisgKgkJCQlodHRwOi8vd3d3Lmtlcm5lbGNvbmNlcHRzLmRlCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglTZWUgQU1EIFB1YmxpY2F0aW9uIDQzMDA5ICJBTUQgU0I3MDAvNzEwLzc1MCBSZWdpc3RlciBSZWZlcmVuY2UgR3VpZGUiCisgKi8KKworLyoKKyAqCUluY2x1ZGVzLCBkZWZpbmVzLCB2YXJpYWJsZXMsIG1vZHVsZSBwYXJhbWV0ZXJzLCAuLi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSAic3A1MTAwX3Rjby5oIgorCisvKiBNb2R1bGUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgVENPX1ZFUlNJT04gIjAuMDEiCisjZGVmaW5lIFRDT19NT0RVTEVfTkFNRSAiU1A1MTAwIFRDTyB0aW1lciIKKyNkZWZpbmUgVENPX0RSSVZFUl9OQU1FICAgVENPX01PRFVMRV9OQU1FICIsIHYiIFRDT19WRVJTSU9OCisjZGVmaW5lIFBGWCBUQ09fTU9EVUxFX05BTUUgIjogIgorCisvKiBpbnRlcm5hbCB2YXJpYWJsZXMgKi8KK3N0YXRpYyB2b2lkIF9faW9tZW0gKnRjb2Jhc2U7CitzdGF0aWMgdW5zaWduZWQgaW50IHBtX2lvYmFzZTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGNvX2xvY2spOwkvKiBHdWFyZHMgdGhlIGhhcmR3YXJlICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl9hbGl2ZTsKK3N0YXRpYyBjaGFyIHRjb19leHBlY3RfY2xvc2U7CitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKnNwNTEwMF90Y29fcGNpOworCisvKiB0aGUgd2F0Y2hkb2cgcGxhdGZvcm0gZGV2aWNlICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc3A1MTAwX3Rjb19wbGF0Zm9ybV9kZXZpY2U7CisKKy8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCisKKyNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDYwCS8qIDYwIHNlYyBkZWZhdWx0IGhlYXJ0YmVhdC4gKi8KK3N0YXRpYyBpbnQgaGVhcnRiZWF0ID0gV0FUQ0hET0dfSEVBUlRCRUFUOyAgLyogaW4gc2Vjb25kcyAqLworbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuIChkZWZhdWx0PSIKKwkJIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CisKK3N0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKK21vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQiCisJCSIgKGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CisKKy8qCisgKiBTb21lIFRDTyBzcGVjaWZpYyBmdW5jdGlvbnMKKyAqLworc3RhdGljIHZvaWQgdGNvX3RpbWVyX3N0YXJ0KHZvaWQpCit7CisJdTMyIHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRjb19sb2NrLCBmbGFncyk7CisJdmFsID0gcmVhZGwoU1A1MTAwX1dEVF9DT05UUk9MKHRjb2Jhc2UpKTsKKwl2YWwgfD0gU1A1MTAwX1dEVF9TVEFSVF9TVE9QX0JJVDsKKwl3cml0ZWwodmFsLCBTUDUxMDBfV0RUX0NPTlRST0wodGNvYmFzZSkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjb19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHRjb190aW1lcl9zdG9wKHZvaWQpCit7CisJdTMyIHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRjb19sb2NrLCBmbGFncyk7CisJdmFsID0gcmVhZGwoU1A1MTAwX1dEVF9DT05UUk9MKHRjb2Jhc2UpKTsKKwl2YWwgJj0gflNQNTEwMF9XRFRfU1RBUlRfU1RPUF9CSVQ7CisJd3JpdGVsKHZhbCwgU1A1MTAwX1dEVF9DT05UUk9MKHRjb2Jhc2UpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Y29fbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB0Y29fdGltZXJfa2VlcGFsaXZlKHZvaWQpCit7CisJdTMyIHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRjb19sb2NrLCBmbGFncyk7CisJdmFsID0gcmVhZGwoU1A1MTAwX1dEVF9DT05UUk9MKHRjb2Jhc2UpKTsKKwl2YWwgfD0gU1A1MTAwX1dEVF9UUklHR0VSX0JJVDsKKwl3cml0ZWwodmFsLCBTUDUxMDBfV0RUX0NPTlRST0wodGNvYmFzZSkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjb19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgdGNvX3RpbWVyX3NldF9oZWFydGJlYXQoaW50IHQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh0IDwgMCB8fCB0ID4gMHhmZmZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFdyaXRlIG5ldyBoZWFydGJlYXQgdG8gd2F0Y2hkb2cgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGNvX2xvY2ssIGZsYWdzKTsKKwl3cml0ZWwodCwgU1A1MTAwX1dEVF9DT1VOVCh0Y29iYXNlKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGNvX2xvY2ssIGZsYWdzKTsKKworCWhlYXJ0YmVhdCA9IHQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKgkvZGV2L3dhdGNoZG9nIGhhbmRsaW5nCisgKi8KKworc3RhdGljIGludCBzcDUxMDBfdGNvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJLyogL2Rldi93YXRjaGRvZyBjYW4gb25seSBiZSBvcGVuZWQgb25jZSAqLworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZ0aW1lcl9hbGl2ZSkpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBSZWxvYWQgYW5kIGFjdGl2YXRlIHRpbWVyICovCisJdGNvX3RpbWVyX3N0YXJ0KCk7CisJdGNvX3RpbWVyX2tlZXBhbGl2ZSgpOworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKK30KKworc3RhdGljIGludCBzcDUxMDBfdGNvX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJLyogU2h1dCBvZmYgdGhlIHRpbWVyLiAqLworCWlmICh0Y29fZXhwZWN0X2Nsb3NlID09IDQyKSB7CisJCXRjb190aW1lcl9zdG9wKCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCBQRlgKKwkJCSJVbmV4cGVjdGVkIGNsb3NlLCBub3Qgc3RvcHBpbmcgd2F0Y2hkb2chXG4iKTsKKwkJdGNvX3RpbWVyX2tlZXBhbGl2ZSgpOworCX0KKwljbGVhcl9iaXQoMCwgJnRpbWVyX2FsaXZlKTsKKwl0Y29fZXhwZWN0X2Nsb3NlID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc3A1MTAwX3Rjb193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCisJCQkJc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCS8qIFNlZSBpZiB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAnVicgYW5kIHJlbG9hZCB0aGUgdGltZXIgKi8KKwlpZiAobGVuKSB7CisJCWlmICghbm93YXlvdXQpIHsKKwkJCXNpemVfdCBpOworCisJCQkvKiBub3RlOiBqdXN0IGluIGNhc2Ugc29tZW9uZSB3cm90ZSB0aGUgbWFnaWMgY2hhcmFjdGVyCisJCQkgKiBmaXZlIG1vbnRocyBhZ28uLi4gKi8KKwkJCXRjb19leHBlY3RfY2xvc2UgPSAwOworCisJCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlcgorCQkJICovCisJCQlmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CisJCQkJY2hhciBjOworCQkJCWlmIChnZXRfdXNlcihjLCBkYXRhICsgaSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCWlmIChjID09ICdWJykKKwkJCQkJdGNvX2V4cGVjdF9jbG9zZSA9IDQyOworCQkJfQorCQl9CisKKwkJLyogc29tZW9uZSB3cm90ZSB0byB1cywgd2Ugc2hvdWxkIHJlbG9hZCB0aGUgdGltZXIgKi8KKwkJdGNvX3RpbWVyX2tlZXBhbGl2ZSgpOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgbG9uZyBzcDUxMDBfdGNvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgbmV3X29wdGlvbnMsIHJldHZhbCA9IC1FSU5WQUw7CisJaW50IG5ld19oZWFydGJlYXQ7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJaW50IF9fdXNlciAqcCA9IGFyZ3A7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCQkub3B0aW9ucyA9CQlXRElPRl9TRVRUSU1FT1VUIHwKKwkJCQkJV0RJT0ZfS0VFUEFMSVZFUElORyB8CisJCQkJCVdESU9GX01BR0lDQ0xPU0UsCisJCS5maXJtd2FyZV92ZXJzaW9uID0JMCwKKwkJLmlkZW50aXR5ID0JCVRDT19NT0RVTEVfTkFNRSwKKwl9OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmlkZW50LAorCQkJc2l6ZW9mKGlkZW50KSkgPyAtRUZBVUxUIDogMDsKKwljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwljYXNlIFdESU9DX0dFVEJPT1RTVEFUVVM6CisJCXJldHVybiBwdXRfdXNlcigwLCBwKTsKKwljYXNlIFdESU9DX1NFVE9QVElPTlM6CisJCWlmIChnZXRfdXNlcihuZXdfb3B0aW9ucywgcCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKG5ld19vcHRpb25zICYgV0RJT1NfRElTQUJMRUNBUkQpIHsKKwkJCXRjb190aW1lcl9zdG9wKCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWlmIChuZXdfb3B0aW9ucyAmIFdESU9TX0VOQUJMRUNBUkQpIHsKKwkJCXRjb190aW1lcl9zdGFydCgpOworCQkJdGNvX3RpbWVyX2tlZXBhbGl2ZSgpOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlyZXR1cm4gcmV0dmFsOworCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQl0Y29fdGltZXJfa2VlcGFsaXZlKCk7CisJCXJldHVybiAwOworCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKKwkJaWYgKGdldF91c2VyKG5ld19oZWFydGJlYXQsIHApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICh0Y29fdGltZXJfc2V0X2hlYXJ0YmVhdChuZXdfaGVhcnRiZWF0KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQl0Y29fdGltZXJfa2VlcGFsaXZlKCk7CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKwkJcmV0dXJuIHB1dF91c2VyKGhlYXJ0YmVhdCwgcCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorfQorCisvKgorICogS2VybmVsIEludGVyZmFjZXMKKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcDUxMDBfdGNvX2ZvcHMgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5sbHNlZWsgPQkJbm9fbGxzZWVrLAorCS53cml0ZSA9CQlzcDUxMDBfdGNvX3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bCA9CXNwNTEwMF90Y29faW9jdGwsCisJLm9wZW4gPQkJCXNwNTEwMF90Y29fb3BlbiwKKwkucmVsZWFzZSA9CQlzcDUxMDBfdGNvX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugc3A1MTAwX3Rjb19taXNjZGV2ID0geworCS5taW5vciA9CVdBVENIRE9HX01JTk9SLAorCS5uYW1lID0JCSJ3YXRjaGRvZyIsCisJLmZvcHMgPQkJJnNwNTEwMF90Y29fZm9wcywKK307CisKKy8qCisgKiBEYXRhIGZvciBQQ0kgZHJpdmVyIGludGVyZmFjZQorICoKKyAqIFRoaXMgZGF0YSBvbmx5IGV4aXN0cyBmb3IgZXhwb3J0aW5nIHRoZSBzdXBwb3J0ZWQKKyAqIFBDSSBpZHMgdmlhIE1PRFVMRV9ERVZJQ0VfVEFCTEUuICBXZSBkbyBub3QgYWN0dWFsbHkKKyAqIHJlZ2lzdGVyIGEgcGNpX2RyaXZlciwgYmVjYXVzZSBzb21lb25lIGVsc2UgbWlnaHQKKyAqIHdhbnQgdG8gcmVnaXN0ZXIgYW5vdGhlciBkcml2ZXIgb24gdGhlIHNhbWUgUENJIGlkLgorICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3A1MTAwX3Rjb19wY2lfdGJsW10gPSB7CisJeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfU0JYMDBfU01CVVMsIFBDSV9BTllfSUQsCisJICBQQ0lfQU5ZX0lELCB9LAorCXsgMCwgfSwJCQkvKiBFbmQgb2YgbGlzdCAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzcDUxMDBfdGNvX3BjaV90YmwpOworCisvKgorICogSW5pdCAmIGV4aXQgcm91dGluZXMKKyAqLworCitzdGF0aWMgdW5zaWduZWQgY2hhciBfX2RldmluaXQgc3A1MTAwX3Rjb19zZXR1cGRldmljZSh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOworCXUzMiB2YWw7CisKKwkvKiBNYXRjaCB0aGUgUENJIGRldmljZSAqLworCWZvcl9lYWNoX3BjaV9kZXYoZGV2KSB7CisJCWlmIChwY2lfbWF0Y2hfaWQoc3A1MTAwX3Rjb19wY2lfdGJsLCBkZXYpICE9IE5VTEwpIHsKKwkJCXNwNTEwMF90Y29fcGNpID0gZGV2OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXNwNTEwMF90Y29fcGNpKQorCQlyZXR1cm4gMDsKKworCS8qIFJlcXVlc3QgdGhlIElPIHBvcnRzIHVzZWQgYnkgdGhpcyBkcml2ZXIgKi8KKwlwbV9pb2Jhc2UgPSBTUDUxMDBfSU9fUE1fSU5ERVhfUkVHOworCWlmICghcmVxdWVzdF9yZWdpb24ocG1faW9iYXNlLCBTUDUxMDBfUE1fSU9QT1JUU19TSVpFLCAiU1A1MTAwIFRDTyIpKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkkvTyBhZGRyZXNzIDB4JTA0eCBhbHJlYWR5IGluIHVzZVxuIiwKKwkJCXBtX2lvYmFzZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBGaW5kIHRoZSB3YXRjaGRvZyBiYXNlIGFkZHJlc3MuICovCisJb3V0YihTUDUxMDBfUE1fV0FUQ0hET0dfQkFTRTMsIFNQNTEwMF9JT19QTV9JTkRFWF9SRUcpOworCXZhbCA9IGluYihTUDUxMDBfSU9fUE1fREFUQV9SRUcpOworCW91dGIoU1A1MTAwX1BNX1dBVENIRE9HX0JBU0UyLCBTUDUxMDBfSU9fUE1fSU5ERVhfUkVHKTsKKwl2YWwgPSB2YWwgPDwgOCB8IGluYihTUDUxMDBfSU9fUE1fREFUQV9SRUcpOworCW91dGIoU1A1MTAwX1BNX1dBVENIRE9HX0JBU0UxLCBTUDUxMDBfSU9fUE1fSU5ERVhfUkVHKTsKKwl2YWwgPSB2YWwgPDwgOCB8IGluYihTUDUxMDBfSU9fUE1fREFUQV9SRUcpOworCW91dGIoU1A1MTAwX1BNX1dBVENIRE9HX0JBU0UwLCBTUDUxMDBfSU9fUE1fSU5ERVhfUkVHKTsKKwkvKiBMb3cgdGhyZWUgYml0cyBvZiBCQVNFMCBhcmUgcmVzZXJ2ZWQuICovCisJdmFsID0gdmFsIDw8IDggfCAoaW5iKFNQNTEwMF9JT19QTV9EQVRBX1JFRykgJiAweGY4KTsKKworCXRjb2Jhc2UgPSBpb3JlbWFwKHZhbCwgU1A1MTAwX1dEVF9NRU1fTUFQX1NJWkUpOworCWlmICh0Y29iYXNlID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIGdldCB0Y29iYXNlIGFkZHJlc3NcbiIpOworCQlnb3RvIHVucmVnX3JlZ2lvbjsKKwl9CisKKwkvKiBFbmFibGUgd2F0Y2hkb2cgZGVjb2RlIGJpdCAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChzcDUxMDBfdGNvX3BjaSwKKwkJCSAgICAgIFNQNTEwMF9QQ0lfV0FUQ0hET0dfTUlTQ19SRUcsCisJCQkgICAgICAmdmFsKTsKKworCXZhbCB8PSBTUDUxMDBfUENJX1dBVENIRE9HX0RFQ09ERV9FTjsKKworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoc3A1MTAwX3Rjb19wY2ksCisJCQkgICAgICAgU1A1MTAwX1BDSV9XQVRDSERPR19NSVNDX1JFRywKKwkJCSAgICAgICB2YWwpOworCisJLyogRW5hYmxlIFdhdGNoZG9nIHRpbWVyIGFuZCBzZXQgdGhlIHJlc29sdXRpb24gdG8gMSBzZWMuICovCisJb3V0YihTUDUxMDBfUE1fV0FUQ0hET0dfQ09OVFJPTCwgU1A1MTAwX0lPX1BNX0lOREVYX1JFRyk7CisJdmFsID0gaW5iKFNQNTEwMF9JT19QTV9EQVRBX1JFRyk7CisJdmFsIHw9IFNQNTEwMF9QTV9XQVRDSERPR19TRUNPTkRfUkVTOworCXZhbCAmPSB+U1A1MTAwX1BNX1dBVENIRE9HX0RJU0FCTEU7CisJb3V0Yih2YWwsIFNQNTEwMF9JT19QTV9EQVRBX1JFRyk7CisKKwkvKiBDaGVjayB0aGF0IHRoZSB3YXRjaGRvZyBhY3Rpb24gaXMgc2V0IHRvIHJlc2V0IHRoZSBzeXN0ZW0uICovCisJdmFsID0gcmVhZGwoU1A1MTAwX1dEVF9DT05UUk9MKHRjb2Jhc2UpKTsKKwl2YWwgJj0gflNQNTEwMF9QTV9XQVRDSERPR19BQ1RJT05fUkVTRVQ7CisJd3JpdGVsKHZhbCwgU1A1MTAwX1dEVF9DT05UUk9MKHRjb2Jhc2UpKTsKKworCS8qIFNldCBhIHJlYXNvbmFibGUgaGVhcnRiZWF0IGJlZm9yZSB3ZSBzdG9wIHRoZSB0aW1lciAqLworCXRjb190aW1lcl9zZXRfaGVhcnRiZWF0KGhlYXJ0YmVhdCk7CisKKwkvKgorCSAqIFN0b3AgdGhlIFRDTyBiZWZvcmUgd2UgY2hhbmdlIGFueXRoaW5nIHNvIHdlIGRvbid0IHJhY2Ugd2l0aAorCSAqIGEgemVyb2VkIHRpbWVyLgorCSAqLworCXRjb190aW1lcl9zdG9wKCk7CisKKwkvKiBEb25lICovCisJcmV0dXJuIDE7CisKKwlpb3VubWFwKHRjb2Jhc2UpOwordW5yZWdfcmVnaW9uOgorCXJlbGVhc2VfcmVnaW9uKHBtX2lvYmFzZSwgU1A1MTAwX1BNX0lPUE9SVFNfU0laRSk7CitleGl0OgorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzcDUxMDBfdGNvX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCWludCByZXQ7CisJdTMyIHZhbDsKKworCS8qIENoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSBoYXJkd2FyZSB3YXRjaGRvZyBpcyB0aGVyZS4gSWYgZm91bmQsIHRoZW4KKwkgKiBzZXQgaXQgdXAuCisJICovCisJaWYgKCFzcDUxMDBfdGNvX3NldHVwZGV2aWNlKCkpCisJCXJldHVybiAtRU5PREVWOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIGxhc3QgcmVib290IHdhcyBkdWUgdG8gd2F0Y2hkb2cgdGltZW91dCAqLworCXByaW50ayhLRVJOX0lORk8gUEZYICJXYXRjaGRvZyByZWJvb3QgJXNkZXRlY3RlZC5cbiIsCisJICAgICAgIHJlYWRsKFNQNTEwMF9XRFRfQ09OVFJPTCh0Y29iYXNlKSkgJiBTUDUxMDBfUE1fV0FUQ0hET0dfRklSRUQgPworCQkgICAgICAiIiA6ICJub3QgIik7CisKKwkvKiBDbGVhciBvdXQgdGhlIG9sZCBzdGF0dXMgKi8KKwl2YWwgPSByZWFkbChTUDUxMDBfV0RUX0NPTlRST0wodGNvYmFzZSkpOworCXZhbCAmPSB+U1A1MTAwX1BNX1dBVENIRE9HX0ZJUkVEOworCXdyaXRlbCh2YWwsIFNQNTEwMF9XRFRfQ09OVFJPTCh0Y29iYXNlKSk7CisKKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZS4KKwkgKiBJZiBub3QsIHJlc2V0IHRvIHRoZSBkZWZhdWx0LgorCSAqLworCWlmICh0Y29fdGltZXJfc2V0X2hlYXJ0YmVhdChoZWFydGJlYXQpKSB7CisJCWhlYXJ0YmVhdCA9IFdBVENIRE9HX0hFQVJUQkVBVDsKKwkJdGNvX3RpbWVyX3NldF9oZWFydGJlYXQoaGVhcnRiZWF0KTsKKwl9CisKKwlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZzcDUxMDBfdGNvX21pc2NkZXYpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0iCisJCSAgICAgICAiJWQgKGVycj0lZClcbiIsCisJCSAgICAgICBXQVRDSERPR19NSU5PUiwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWNsZWFyX2JpdCgwLCAmdGltZXJfYWxpdmUpOworCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggImluaXRpYWxpemVkICgweCVwKS4gaGVhcnRiZWF0PSVkIHNlYyIKKwkJIiAobm93YXlvdXQ9JWQpXG4iLAorCQl0Y29iYXNlLCBoZWFydGJlYXQsIG5vd2F5b3V0KTsKKworCXJldHVybiAwOworCitleGl0OgorCWlvdW5tYXAodGNvYmFzZSk7CisJcmVsZWFzZV9yZWdpb24ocG1faW9iYXNlLCBTUDUxMDBfUE1fSU9QT1JUU19TSVpFKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc3A1MTAwX3Rjb19jbGVhbnVwKHZvaWQpCit7CisJLyogU3RvcCB0aGUgdGltZXIgYmVmb3JlIHdlIGxlYXZlICovCisJaWYgKCFub3dheW91dCkKKwkJdGNvX3RpbWVyX3N0b3AoKTsKKworCS8qIERlcmVnaXN0ZXIgKi8KKwltaXNjX2RlcmVnaXN0ZXIoJnNwNTEwMF90Y29fbWlzY2Rldik7CisJaW91bm1hcCh0Y29iYXNlKTsKKwlyZWxlYXNlX3JlZ2lvbihwbV9pb2Jhc2UsIFNQNTEwMF9QTV9JT1BPUlRTX1NJWkUpOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzcDUxMDBfdGNvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaWYgKHRjb2Jhc2UpCisJCXNwNTEwMF90Y29fY2xlYW51cCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcDUxMDBfdGNvX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwl0Y29fdGltZXJfc3RvcCgpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzcDUxMDBfdGNvX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gc3A1MTAwX3Rjb19pbml0LAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc3A1MTAwX3Rjb19yZW1vdmUpLAorCS5zaHV0ZG93bgk9IHNwNTEwMF90Y29fc2h1dGRvd24sCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9IFRDT19NT0RVTEVfTkFNRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3A1MTAwX3Rjb19pbml0X21vZHVsZSh2b2lkKQoreworCWludCBlcnI7CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiU1A1MTAwIFRDTyBXYXRjaERvZyBUaW1lciBEcml2ZXIgdiVzXG4iLAorCSAgICAgICBUQ09fVkVSU0lPTik7CisKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNwNTEwMF90Y29fZHJpdmVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3A1MTAwX3Rjb19wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKAorCQkJCQlUQ09fTU9EVUxFX05BTUUsIC0xLCBOVUxMLCAwKTsKKwlpZiAoSVNfRVJSKHNwNTEwMF90Y29fcGxhdGZvcm1fZGV2aWNlKSkgeworCQllcnIgPSBQVFJfRVJSKHNwNTEwMF90Y29fcGxhdGZvcm1fZGV2aWNlKTsKKwkJZ290byB1bnJlZ19wbGF0Zm9ybV9kcml2ZXI7CisJfQorCisJcmV0dXJuIDA7CisKK3VucmVnX3BsYXRmb3JtX2RyaXZlcjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3A1MTAwX3Rjb19kcml2ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzcDUxMDBfdGNvX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc3A1MTAwX3Rjb19wbGF0Zm9ybV9kZXZpY2UpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzcDUxMDBfdGNvX2RyaXZlcik7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlNQNTEwMCBUQ08gV2F0Y2hkb2cgTW9kdWxlIFVubG9hZGVkLlxuIik7Cit9CisKK21vZHVsZV9pbml0KHNwNTEwMF90Y29faW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoc3A1MTAwX3Rjb19jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIlByaXlhbmthIEd1cHRhIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRDTyB0aW1lciBkcml2ZXIgZm9yIFNQNTEwMCBjaGlwc2V0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NwNTEwMF90Y28uaCBiL2RyaXZlcnMvd2F0Y2hkb2cvc3A1MTAwX3Rjby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YTE2Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NwNTEwMF90Y28uaApAQCAtMCwwICsxLDQxIEBACisvKgorICoJc3A1MTAwX3RjbzoJVENPIHRpbWVyIGRyaXZlciBmb3Igc3A1MTAwIGNoaXBzZXRzLgorICoKKyAqCShjKSBDb3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKglUQ08gdGltZXIgZHJpdmVyIGZvciBzcDUxMDAgY2hpcHNldHMKKyAqLworCisvKgorICogU29tZSBhZGRyZXNzIGRlZmluaXRpb25zIGZvciB0aGUgV2F0Y2hkb2cKKyAqLworCisjZGVmaW5lIFNQNTEwMF9XRFRfTUVNX01BUF9TSVpFCQkweDA4CisjZGVmaW5lIFNQNTEwMF9XRFRfQ09OVFJPTChiYXNlKQkoKGJhc2UpICsgMHgwMCkgLyogV2F0Y2hkb2cgQ29udHJvbCAqLworI2RlZmluZSBTUDUxMDBfV0RUX0NPVU5UKGJhc2UpCQkoKGJhc2UpICsgMHgwNCkgLyogV2F0Y2hkb2cgQ291bnQgKi8KKworI2RlZmluZSBTUDUxMDBfV0RUX1NUQVJUX1NUT1BfQklUCTEKKyNkZWZpbmUgU1A1MTAwX1dEVF9UUklHR0VSX0JJVAkJKDEgPDwgNykKKworI2RlZmluZSBTUDUxMDBfUENJX1dBVENIRE9HX01JU0NfUkVHCTB4NDEKKyNkZWZpbmUgU1A1MTAwX1BDSV9XQVRDSERPR19ERUNPREVfRU4JKDEgPDwgMykKKworI2RlZmluZSBTUDUxMDBfUE1fSU9QT1JUU19TSVpFCQkweDAyCisKKy8qIFRoZXNlIHR3byBJTyByZWdpc3RlcnMgYXJlIGhhcmRjb2RlZCBhbmQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgd2F5IHRvCisgKiByZWFkIHRoZW0gZnJvbSBhIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIFNQNTEwMF9JT19QTV9JTkRFWF9SRUcJCTB4Q0Q2CisjZGVmaW5lIFNQNTEwMF9JT19QTV9EQVRBX1JFRwkJMHhDRDcKKworI2RlZmluZSBTUDUxMDBfUE1fV0FUQ0hET0dfQ09OVFJPTAkweDY5CisjZGVmaW5lIFNQNTEwMF9QTV9XQVRDSERPR19CQVNFMAkweDZDCisjZGVmaW5lIFNQNTEwMF9QTV9XQVRDSERPR19CQVNFMQkweDZECisjZGVmaW5lIFNQNTEwMF9QTV9XQVRDSERPR19CQVNFMgkweDZFCisjZGVmaW5lIFNQNTEwMF9QTV9XQVRDSERPR19CQVNFMwkweDZGCisKKyNkZWZpbmUgU1A1MTAwX1BNX1dBVENIRE9HX0ZJUkVECSgxIDw8IDEpCisjZGVmaW5lIFNQNTEwMF9QTV9XQVRDSERPR19BQ1RJT05fUkVTRVQJKDEgPDwgMikKKworI2RlZmluZSBTUDUxMDBfUE1fV0FUQ0hET0dfRElTQUJMRQkxCisjZGVmaW5lIFNQNTEwMF9QTV9XQVRDSERPR19TRUNPTkRfUkVTCSgzIDw8IDEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3c4MzYyN2hmX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy93ODM2MjdoZl93ZHQuYwppbmRleCAwZjUyODhkLi5lNWM5MWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3c4MzYyN2hmX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjI3aGZfd2R0LmMKQEAgLTQyLDcgKzQyLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2RlZmluZSBXQVRDSERPR19OQU1FICJ3ODM2MjdoZi90aGYvaGcgV0RUIgorI2RlZmluZSBXQVRDSERPR19OQU1FICJ3ODM2MjdoZi90aGYvaGcvZGhnIFdEVCIKICNkZWZpbmUgUEZYIFdBVENIRE9HX05BTUUgIjogIgogI2RlZmluZSBXQVRDSERPR19USU1FT1VUIDYwCQkvKiA2MCBzZWMgZGVmYXVsdCB0aW1lb3V0ICovCiAKQEAgLTg5LDcgKzg5LDcgQEAKIAkJYyA9ICgoaW5iX3AoV0RUX0VGRFIpICYgMHhmNykgfCAweDA0KTsgLyogc2VsZWN0IFdEVDAgKi8KIAkJb3V0Yl9wKDB4MmIsIFdEVF9FRkVSKTsKIAkJb3V0Yl9wKGMsIFdEVF9FRkRSKTsJLyogc2V0IEdQSU8zIHRvIFdEVDAgKi8KLQl9IGVsc2UgaWYgKGMgPT0gMHg4OCkgewkvKiBXODM2MjdFSEYgKi8KKwl9IGVsc2UgaWYgKGMgPT0gMHg4OCB8fCBjID09IDB4YTApIHsJLyogVzgzNjI3RUhGIC8gVzgzNjI3REhHICovCiAJCW91dGJfcCgweDJkLCBXRFRfRUZFUik7IC8qIHNlbGVjdCBHUElPNSAqLwogCQljID0gaW5iX3AoV0RUX0VGRFIpICYgfjB4MDE7IC8qIFBJTjc3IC0+IFdEVDAjICovCiAJCW91dGJfcCgweDJkLCBXRFRfRUZFUik7CkBAIC0xMjksNiArMTI5LDggQEAKIAl0ID0gaW5iX3AoV0RUX0VGRFIpOyAgICAgIC8qIHJlYWQgQ1JGNSAqLwogCXQgJj0gfjB4MEM7ICAgICAgICAgICAgICAgLyogc2V0IHNlY29uZCBtb2RlICYgZGlzYWJsZSBrZXlib2FyZAogCQkJCSAgICB0dXJuaW5nIG9mZiB3YXRjaGRvZyAqLworCXQgfD0gMHgwMjsJCSAgLyogZW5hYmxlIHRoZSBXRFRPIyBvdXRwdXQgbG93IHB1bHNlCisJCQkJICAgIHRvIHRoZSBLQlJTVCMgcGluIChQSU42MCkgKi8KIAlvdXRiX3AodCwgV0RUX0VGRFIpOyAgICAvKiBXcml0ZSBiYWNrIHRvIENSRjUgKi8KIAogCW91dGJfcCgweEY3LCBXRFRfRUZFUik7IC8qIFNlbGVjdCBDUkY3ICovCkBAIC0zMjEsNyArMzIzLDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiV0RUIGRyaXZlciBmb3IgdGhlIFdpbmJvbmQoVE0pIFc4MzYyN0hGL1RIRi9IRyBTdXBlciBJL08gY2hpcCBpbml0aWFsaXNpbmcuXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJXRFQgZHJpdmVyIGZvciB0aGUgV2luYm9uZChUTSkgVzgzNjI3SEYvVEhGL0hHL0RIRyBTdXBlciBJL08gY2hpcCBpbml0aWFsaXNpbmcuXG4iKTsKIAogCWlmICh3ZHRfc2V0X2hlYXJ0YmVhdCh0aW1lb3V0KSkgewogCQl3ZHRfc2V0X2hlYXJ0YmVhdChXQVRDSERPR19USU1FT1VUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL0tjb25maWcgYi9kcml2ZXJzL3hlbi9LY29uZmlnCmluZGV4IDZlNjE4MGMuLjVhNDhjZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL0tjb25maWcKKysrIGIvZHJpdmVycy94ZW4vS2NvbmZpZwpAQCAtMjksNiArMjksMTQgQEAKIAkgIGZpcmluZy4KIAkgIElmIGluIGRvdWJ0LCBzYXkgeWVzLgogCitjb25maWcgWEVOX0JBQ0tFTkQKKwlib29sICJCYWNrZW5kIGRyaXZlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gWEVOX0RPTTAKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTdXBwb3J0IGZvciBiYWNrZW5kIGRldmljZSBkcml2ZXJzIHRoYXQgcHJvdmlkZSBJL08gc2VydmljZXMKKwkgIHRvIG90aGVyIHZpcnR1YWwgbWFjaGluZXMuCisKIGNvbmZpZyBYRU5GUwogCXRyaXN0YXRlICJYZW4gZmlsZXN5c3RlbSIKIAlkZWZhdWx0IHkKQEAgLTYyLDYgKzcwLDkgQEAKIAkgdmlydHVhbCBlbnZpcm9ubWVudCwgL3N5cy9oeXBlcnZpc29yIHdpbGwgc3RpbGwgYmUgcHJlc2VudCwKIAkgYnV0IHdpbGwgaGF2ZSBubyB4ZW4gY29udGVudHMuCiAKK2NvbmZpZyBYRU5fWEVOQlVTX0ZST05URU5ECisgICAgICAgdHJpc3RhdGUKKwogY29uZmlnIFhFTl9QTEFURk9STV9QQ0kKIAl0cmlzdGF0ZSAieGVuIHBsYXRmb3JtIHBjaSBkZXZpY2UgZHJpdmVyIgogCWRlcGVuZHMgb24gWEVOX1BWSFZNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi94ZW5idXMvTWFrZWZpbGUgYi9kcml2ZXJzL3hlbi94ZW5idXMvTWFrZWZpbGUKaW5kZXggNTU3MWY1Yi4uOGRjYTY4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4veGVuYnVzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMveGVuL3hlbmJ1cy9NYWtlZmlsZQpAQCAtNSwzICs1LDggQEAKIHhlbmJ1cy1vYmpzICs9IHhlbmJ1c19jb21tcy5vCiB4ZW5idXMtb2JqcyArPSB4ZW5idXNfeHMubwogeGVuYnVzLW9ianMgKz0geGVuYnVzX3Byb2JlLm8KKworeGVuYnVzLWJlLW9ianMtJChDT05GSUdfWEVOX0JBQ0tFTkQpICs9IHhlbmJ1c19wcm9iZV9iYWNrZW5kLm8KK3hlbmJ1cy1vYmpzICs9ICQoeGVuYnVzLWJlLW9ianMteSkKKworb2JqLSQoQ09ORklHX1hFTl9YRU5CVVNfRlJPTlRFTkQpICs9IHhlbmJ1c19wcm9iZV9mcm9udGVuZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi94ZW5idXMveGVuYnVzX3Byb2JlLmMgYi9kcml2ZXJzL3hlbi94ZW5idXMveGVuYnVzX3Byb2JlLmMKaW5kZXggZGViOWM0Yi4uYmFhNjVlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4veGVuYnVzL3hlbmJ1c19wcm9iZS5jCisrKyBiL2RyaXZlcnMveGVuL3hlbmJ1cy94ZW5idXNfcHJvYmUuYwpAQCAtNTYsNyArNTYsNiBAQAogI2luY2x1ZGUgPHhlbi9ldmVudHMuaD4KICNpbmNsdWRlIDx4ZW4vcGFnZS5oPgogCi0jaW5jbHVkZSA8eGVuL3BsYXRmb3JtX3BjaS5oPgogI2luY2x1ZGUgPHhlbi9odm0uaD4KIAogI2luY2x1ZGUgInhlbmJ1c19jb21tcy5oIgpAQCAtNzMsMTUgKzcyLDYgQEAKIAogc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQoeGVuc3RvcmVfY2hhaW4pOwogCi1zdGF0aWMgdm9pZCB3YWl0X2Zvcl9kZXZpY2VzKHN0cnVjdCB4ZW5idXNfZHJpdmVyICp4ZW5kcnYpOwotCi1zdGF0aWMgaW50IHhlbmJ1c19wcm9iZV9mcm9udGVuZChjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpuYW1lKTsKLQotc3RhdGljIHZvaWQgeGVuYnVzX2Rldl9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpfZGV2KTsKLQotc3RhdGljIGludCB4ZW5idXNfZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotc3RhdGljIGludCB4ZW5idXNfZGV2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCiAvKiBJZiBzb21ldGhpbmcgaW4gYXJyYXkgb2YgaWRzIG1hdGNoZXMgdGhpcyBkZXZpY2UsIHJldHVybiBpdC4gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGVuYnVzX2RldmljZV9pZCAqCiBtYXRjaF9kZXZpY2UoY29uc3Qgc3RydWN0IHhlbmJ1c19kZXZpY2VfaWQgKmFyciwgc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldikKQEAgLTEwMiwzNCArOTIsNyBAQAogCiAJcmV0dXJuIG1hdGNoX2RldmljZShkcnYtPmlkcywgdG9feGVuYnVzX2RldmljZShfZGV2KSkgIT0gTlVMTDsKIH0KLQotc3RhdGljIGludCB4ZW5idXNfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKl9kZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKLXsKLQlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2ID0gdG9feGVuYnVzX2RldmljZShfZGV2KTsKLQotCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz14ZW46JXMiLCBkZXYtPmRldmljZXR5cGUpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldHVybiAwOwotfQotCi0vKiBkZXZpY2UvPHR5cGU+LzxpZD4gPT4gPHR5cGU+LTxpZD4gKi8KLXN0YXRpYyBpbnQgZnJvbnRlbmRfYnVzX2lkKGNoYXIgYnVzX2lkW1hFTl9CVVNfSURfU0laRV0sIGNvbnN0IGNoYXIgKm5vZGVuYW1lKQotewotCW5vZGVuYW1lID0gc3RyY2hyKG5vZGVuYW1lLCAnLycpOwotCWlmICghbm9kZW5hbWUgfHwgc3RybGVuKG5vZGVuYW1lICsgMSkgPj0gWEVOX0JVU19JRF9TSVpFKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlhFTkJVUzogYmFkIGZyb250ZW5kICVzXG4iLCBub2RlbmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN0cmxjcHkoYnVzX2lkLCBub2RlbmFtZSArIDEsIFhFTl9CVVNfSURfU0laRSk7Ci0JaWYgKCFzdHJjaHIoYnVzX2lkLCAnLycpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlhFTkJVUzogYnVzX2lkICVzIG5vIHNsYXNoXG4iLCBidXNfaWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JKnN0cmNocihidXNfaWQsICcvJykgPSAnLSc7Ci0JcmV0dXJuIDA7Ci19CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5idXNfbWF0Y2gpOwogCiAKIHN0YXRpYyB2b2lkIGZyZWVfb3RoZXJlbmRfZGV0YWlscyhzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2KQpAQCAtMTQ5LDcgKzExMiwzMCBAQAogfQogCiAKLWludCByZWFkX290aGVyZW5kX2RldGFpbHMoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldiwKK3N0YXRpYyBpbnQgdGFsa190b19vdGhlcmVuZChzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB4ZW5idXNfZHJpdmVyICpkcnYgPSB0b194ZW5idXNfZHJpdmVyKGRldi0+ZGV2LmRyaXZlcik7CisKKwlmcmVlX290aGVyZW5kX3dhdGNoKGRldik7CisJZnJlZV9vdGhlcmVuZF9kZXRhaWxzKGRldik7CisKKwlyZXR1cm4gZHJ2LT5yZWFkX290aGVyZW5kX2RldGFpbHMoZGV2KTsKK30KKworCisKK3N0YXRpYyBpbnQgd2F0Y2hfb3RoZXJlbmQoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgeGVuX2J1c190eXBlICpidXMgPQorCQljb250YWluZXJfb2YoZGV2LT5kZXYuYnVzLCBzdHJ1Y3QgeGVuX2J1c190eXBlLCBidXMpOworCisJcmV0dXJuIHhlbmJ1c193YXRjaF9wYXRoZm10KGRldiwgJmRldi0+b3RoZXJlbmRfd2F0Y2gsCisJCQkJICAgIGJ1cy0+b3RoZXJlbmRfY2hhbmdlZCwKKwkJCQkgICAgIiVzLyVzIiwgZGV2LT5vdGhlcmVuZCwgInN0YXRlIik7Cit9CisKKworaW50IHhlbmJ1c19yZWFkX290aGVyZW5kX2RldGFpbHMoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldiwKIAkJCQkgY2hhciAqaWRfbm9kZSwgY2hhciAqcGF0aF9ub2RlKQogewogCWludCBlcnIgPSB4ZW5idXNfZ2F0aGVyKFhCVF9OSUwsIHhlbmRldi0+bm9kZW5hbWUsCkBAIC0xNzQsMzkgKzE2MCwxMSBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5idXNfcmVhZF9vdGhlcmVuZF9kZXRhaWxzKTsKIAotCi1zdGF0aWMgaW50IHJlYWRfYmFja2VuZF9kZXRhaWxzKHN0cnVjdCB4ZW5idXNfZGV2aWNlICp4ZW5kZXYpCi17Ci0JcmV0dXJuIHJlYWRfb3RoZXJlbmRfZGV0YWlscyh4ZW5kZXYsICJiYWNrZW5kLWlkIiwgImJhY2tlbmQiKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHhlbmJ1c19kZXZfYXR0cnNbXSA9IHsKLQlfX0FUVFJfTlVMTAotfTsKLQotLyogQnVzIHR5cGUgZm9yIGZyb250ZW5kIGRyaXZlcnMuICovCi1zdGF0aWMgc3RydWN0IHhlbl9idXNfdHlwZSB4ZW5idXNfZnJvbnRlbmQgPSB7Ci0JLnJvb3QgPSAiZGV2aWNlIiwKLQkubGV2ZWxzID0gMiwgCQkvKiBkZXZpY2UvdHlwZS88aWQ+ICovCi0JLmdldF9idXNfaWQgPSBmcm9udGVuZF9idXNfaWQsCi0JLnByb2JlID0geGVuYnVzX3Byb2JlX2Zyb250ZW5kLAotCS5idXMgPSB7Ci0JCS5uYW1lICAgICAgPSAieGVuIiwKLQkJLm1hdGNoICAgICA9IHhlbmJ1c19tYXRjaCwKLQkJLnVldmVudCAgICA9IHhlbmJ1c191ZXZlbnQsCi0JCS5wcm9iZSAgICAgPSB4ZW5idXNfZGV2X3Byb2JlLAotCQkucmVtb3ZlICAgID0geGVuYnVzX2Rldl9yZW1vdmUsCi0JCS5zaHV0ZG93biAgPSB4ZW5idXNfZGV2X3NodXRkb3duLAotCQkuZGV2X2F0dHJzID0geGVuYnVzX2Rldl9hdHRycywKLQotCQkuc3VzcGVuZCAgID0geGVuYnVzX2Rldl9zdXNwZW5kLAotCQkucmVzdW1lICAgID0geGVuYnVzX2Rldl9yZXN1bWUsCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIG90aGVyZW5kX2NoYW5nZWQoc3RydWN0IHhlbmJ1c193YXRjaCAqd2F0Y2gsCi0JCQkgICAgIGNvbnN0IGNoYXIgKip2ZWMsIHVuc2lnbmVkIGludCBsZW4pCit2b2lkIHhlbmJ1c19vdGhlcmVuZF9jaGFuZ2VkKHN0cnVjdCB4ZW5idXNfd2F0Y2ggKndhdGNoLAorCQkJICAgICBjb25zdCBjaGFyICoqdmVjLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICAgICBpbnQgaWdub3JlX29uX3NodXRkb3duKQogewogCXN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYgPQogCQljb250YWluZXJfb2Yod2F0Y2gsIHN0cnVjdCB4ZW5idXNfZGV2aWNlLCBvdGhlcmVuZF93YXRjaCk7CkBAIC0yMzQsMTEgKzE5Miw3IEBACiAJICogd29yayB0aGF0IGNhbiBmYWlsIGUuZy4sIHdoZW4gdGhlIHJvb3RmcyBpcyBnb25lLgogCSAqLwogCWlmIChzeXN0ZW1fc3RhdGUgPiBTWVNURU1fUlVOTklORykgewotCQlzdHJ1Y3QgeGVuX2J1c190eXBlICpidXMgPSBidXM7Ci0JCWJ1cyA9IGNvbnRhaW5lcl9vZihkZXYtPmRldi5idXMsIHN0cnVjdCB4ZW5fYnVzX3R5cGUsIGJ1cyk7Ci0JCS8qIElmIHdlJ3JlIGZyb250ZW5kLCBkcml2ZSB0aGUgc3RhdGUgbWFjaGluZSB0byBDbG9zZWQuICovCi0JCS8qIFRoaXMgc2hvdWxkIGNhdXNlIHRoZSBiYWNrZW5kIHRvIHJlbGVhc2Ugb3VyIHJlc291cmNlcy4gKi8KLQkJaWYgKChidXMgPT0gJnhlbmJ1c19mcm9udGVuZCkgJiYgKHN0YXRlID09IFhlbmJ1c1N0YXRlQ2xvc2luZykpCisJCWlmIChpZ25vcmVfb25fc2h1dGRvd24gJiYgKHN0YXRlID09IFhlbmJ1c1N0YXRlQ2xvc2luZykpCiAJCQl4ZW5idXNfZnJvbnRlbmRfY2xvc2VkKGRldik7CiAJCXJldHVybjsKIAl9CkBAIC0yNDYsMjUgKzIwMCw3IEBACiAJaWYgKGRydi0+b3RoZXJlbmRfY2hhbmdlZCkKIAkJZHJ2LT5vdGhlcmVuZF9jaGFuZ2VkKGRldiwgc3RhdGUpOwogfQotCi0KLXN0YXRpYyBpbnQgdGFsa190b19vdGhlcmVuZChzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2KQotewotCXN0cnVjdCB4ZW5idXNfZHJpdmVyICpkcnYgPSB0b194ZW5idXNfZHJpdmVyKGRldi0+ZGV2LmRyaXZlcik7Ci0KLQlmcmVlX290aGVyZW5kX3dhdGNoKGRldik7Ci0JZnJlZV9vdGhlcmVuZF9kZXRhaWxzKGRldik7Ci0KLQlyZXR1cm4gZHJ2LT5yZWFkX290aGVyZW5kX2RldGFpbHMoZGV2KTsKLX0KLQotCi1zdGF0aWMgaW50IHdhdGNoX290aGVyZW5kKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIHhlbmJ1c193YXRjaF9wYXRoZm10KGRldiwgJmRldi0+b3RoZXJlbmRfd2F0Y2gsIG90aGVyZW5kX2NoYW5nZWQsCi0JCQkJICAgICIlcy8lcyIsIGRldi0+b3RoZXJlbmQsICJzdGF0ZSIpOwotfQotCitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5idXNfb3RoZXJlbmRfY2hhbmdlZCk7CiAKIGludCB4ZW5idXNfZGV2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCiB7CkBAIC0zMDgsOCArMjQ0LDkgQEAKIGZhaWw6CiAJeGVuYnVzX2Rldl9lcnJvcihkZXYsIGVyciwgInhlbmJ1c19kZXZfcHJvYmUgb24gJXMiLCBkZXYtPm5vZGVuYW1lKTsKIAl4ZW5idXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVDbG9zZWQpOwotCXJldHVybiAtRU5PREVWOworCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5idXNfZGV2X3Byb2JlKTsKIAogaW50IHhlbmJ1c19kZXZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCiB7CkBAIC0zMjcsOCArMjY0LDkgQEAKIAl4ZW5idXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVDbG9zZWQpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuYnVzX2Rldl9yZW1vdmUpOwogCi1zdGF0aWMgdm9pZCB4ZW5idXNfZGV2X3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKl9kZXYpCit2b2lkIHhlbmJ1c19kZXZfc2h1dGRvd24oc3RydWN0IGRldmljZSAqX2RldikKIHsKIAlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2ID0gdG9feGVuYnVzX2RldmljZShfZGV2KTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSA1KkhaOwpAQCAtMzQ5LDYgKzI4Nyw3IEBACiAgb3V0OgogCXB1dF9kZXZpY2UoJmRldi0+ZGV2KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHhlbmJ1c19kZXZfc2h1dGRvd24pOwogCiBpbnQgeGVuYnVzX3JlZ2lzdGVyX2RyaXZlcl9jb21tb24oc3RydWN0IHhlbmJ1c19kcml2ZXIgKmRydiwKIAkJCQkgIHN0cnVjdCB4ZW5fYnVzX3R5cGUgKmJ1cywKQEAgLTM2MiwyNSArMzAxLDcgQEAKIAogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKIH0KLQotaW50IF9feGVuYnVzX3JlZ2lzdGVyX2Zyb250ZW5kKHN0cnVjdCB4ZW5idXNfZHJpdmVyICpkcnYsCi0JCQkgICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IGNoYXIgKm1vZF9uYW1lKQotewotCWludCByZXQ7Ci0KLQlkcnYtPnJlYWRfb3RoZXJlbmRfZGV0YWlscyA9IHJlYWRfYmFja2VuZF9kZXRhaWxzOwotCi0JcmV0ID0geGVuYnVzX3JlZ2lzdGVyX2RyaXZlcl9jb21tb24oZHJ2LCAmeGVuYnVzX2Zyb250ZW5kLAotCQkJCQkgICAgb3duZXIsIG1vZF9uYW1lKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogSWYgdGhpcyBkcml2ZXIgaXMgbG9hZGVkIGFzIGEgbW9kdWxlIHdhaXQgZm9yIGRldmljZXMgdG8gYXR0YWNoLiAqLwotCXdhaXRfZm9yX2RldmljZXMoZHJ2KTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoX194ZW5idXNfcmVnaXN0ZXJfZnJvbnRlbmQpOworRVhQT1JUX1NZTUJPTF9HUEwoeGVuYnVzX3JlZ2lzdGVyX2RyaXZlcl9jb21tb24pOwogCiB2b2lkIHhlbmJ1c191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgeGVuYnVzX2RyaXZlciAqZHJ2KQogewpAQCAtNTUxLDI0ICs0NzIsNyBAQAogCWtmcmVlKHhlbmRldik7CiAJcmV0dXJuIGVycjsKIH0KLQotLyogZGV2aWNlLzx0eXBlbmFtZT4vPG5hbWU+ICovCi1zdGF0aWMgaW50IHhlbmJ1c19wcm9iZV9mcm9udGVuZChjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpuYW1lKQotewotCWNoYXIgKm5vZGVuYW1lOwotCWludCBlcnI7Ci0KLQlub2RlbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXMvJXMvJXMiLAotCQkJICAgICB4ZW5idXNfZnJvbnRlbmQucm9vdCwgdHlwZSwgbmFtZSk7Ci0JaWYgKCFub2RlbmFtZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlEUFJJTlRLKCIlcyIsIG5vZGVuYW1lKTsKLQotCWVyciA9IHhlbmJ1c19wcm9iZV9ub2RlKCZ4ZW5idXNfZnJvbnRlbmQsIHR5cGUsIG5vZGVuYW1lKTsKLQlrZnJlZShub2RlbmFtZSk7Ci0JcmV0dXJuIGVycjsKLX0KK0VYUE9SVF9TWU1CT0xfR1BMKHhlbmJ1c19wcm9iZV9ub2RlKTsKIAogc3RhdGljIGludCB4ZW5idXNfcHJvYmVfZGV2aWNlX3R5cGUoc3RydWN0IHhlbl9idXNfdHlwZSAqYnVzLCBjb25zdCBjaGFyICp0eXBlKQogewpAQCAtNTgyLDEwICs0ODYsMTEgQEAKIAkJcmV0dXJuIFBUUl9FUlIoZGlyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBkaXJfbjsgaSsrKSB7Ci0JCWVyciA9IGJ1cy0+cHJvYmUodHlwZSwgZGlyW2ldKTsKKwkJZXJyID0gYnVzLT5wcm9iZShidXMsIHR5cGUsIGRpcltpXSk7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9CisKIAlrZnJlZShkaXIpOwogCXJldHVybiBlcnI7CiB9CkBAIC02MDUsOSArNTEwLDExIEBACiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9CisKIAlrZnJlZShkaXIpOwogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5idXNfcHJvYmVfZGV2aWNlcyk7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2hhcl9jb3VudChjb25zdCBjaGFyICpzdHIsIGNoYXIgYykKIHsKQEAgLTY3MCwzMiArNTc3LDE4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4ZW5idXNfZGV2X2NoYW5nZWQpOwogCi1zdGF0aWMgdm9pZCBmcm9udGVuZF9jaGFuZ2VkKHN0cnVjdCB4ZW5idXNfd2F0Y2ggKndhdGNoLAotCQkJICAgICBjb25zdCBjaGFyICoqdmVjLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCURQUklOVEsoIiIpOwotCi0JeGVuYnVzX2Rldl9jaGFuZ2VkKHZlY1tYU19XQVRDSF9QQVRIXSwgJnhlbmJ1c19mcm9udGVuZCk7Ci19Ci0KLS8qIFdlIHdhdGNoIGZvciBkZXZpY2VzIGFwcGVhcmluZyBhbmQgdmFuaXNoaW5nLiAqLwotc3RhdGljIHN0cnVjdCB4ZW5idXNfd2F0Y2ggZmVfd2F0Y2ggPSB7Ci0JLm5vZGUgPSAiZGV2aWNlIiwKLQkuY2FsbGJhY2sgPSBmcm9udGVuZF9jaGFuZ2VkLAotfTsKLQotc3RhdGljIGludCB4ZW5idXNfZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitpbnQgeGVuYnVzX2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWludCBlcnIgPSAwOwogCXN0cnVjdCB4ZW5idXNfZHJpdmVyICpkcnY7Ci0Jc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhkZXY7CisJc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhkZXYKKwkJPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgeGVuYnVzX2RldmljZSwgZGV2KTsKIAotCURQUklOVEsoIiIpOworCURQUklOVEsoIiVzIiwgeGRldi0+bm9kZW5hbWUpOwogCiAJaWYgKGRldi0+ZHJpdmVyID09IE5VTEwpCiAJCXJldHVybiAwOwogCWRydiA9IHRvX3hlbmJ1c19kcml2ZXIoZGV2LT5kcml2ZXIpOwotCXhkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgeGVuYnVzX2RldmljZSwgZGV2KTsKIAlpZiAoZHJ2LT5zdXNwZW5kKQogCQllcnIgPSBkcnYtPnN1c3BlbmQoeGRldiwgc3RhdGUpOwogCWlmIChlcnIpCkBAIC03MDMsMjEgKzU5NiwyMCBAQAogCQkgICAgICAgInhlbmJ1czogc3VzcGVuZCAlcyBmYWlsZWQ6ICVpXG4iLCBkZXZfbmFtZShkZXYpLCBlcnIpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuYnVzX2Rldl9zdXNwZW5kKTsKIAotc3RhdGljIGludCB4ZW5idXNfZGV2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgeGVuYnVzX2Rldl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCBlcnI7CiAJc3RydWN0IHhlbmJ1c19kcml2ZXIgKmRydjsKLQlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGRldjsKKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGRldgorCQk9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB4ZW5idXNfZGV2aWNlLCBkZXYpOwogCi0JRFBSSU5USygiIik7CisJRFBSSU5USygiJXMiLCB4ZGV2LT5ub2RlbmFtZSk7CiAKIAlpZiAoZGV2LT5kcml2ZXIgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0KIAlkcnYgPSB0b194ZW5idXNfZHJpdmVyKGRldi0+ZHJpdmVyKTsKLQl4ZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHhlbmJ1c19kZXZpY2UsIGRldik7Ci0KIAllcnIgPSB0YWxrX3RvX290aGVyZW5kKHhkZXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtNzQ4LDYgKzY0MCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHhlbmJ1c19kZXZfcmVzdW1lKTsKIAogLyogQSBmbGFnIHRvIGRldGVybWluZSBpZiB4ZW5zdG9yZWQgaXMgJ3JlYWR5JyAoaS5lLiBoYXMgc3RhcnRlZCkgKi8KIGludCB4ZW5zdG9yZWRfcmVhZHkgPSAwOwpAQCAtNzc2LDExICs2NjksNiBAQAogewogCXhlbnN0b3JlZF9yZWFkeSA9IDE7CiAKLQkvKiBFbnVtZXJhdGUgZGV2aWNlcyBpbiB4ZW5zdG9yZSBhbmQgd2F0Y2ggZm9yIGNoYW5nZXMuICovCi0JeGVuYnVzX3Byb2JlX2RldmljZXMoJnhlbmJ1c19mcm9udGVuZCk7Ci0JcmVnaXN0ZXJfeGVuYnVzX3dhdGNoKCZmZV93YXRjaCk7Ci0JeGVuYnVzX2JhY2tlbmRfcHJvYmVfYW5kX3dhdGNoKCk7Ci0KIAkvKiBOb3RpZnkgb3RoZXJzIHRoYXQgeGVuc3RvcmUgaXMgdXAgKi8KIAlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZ4ZW5zdG9yZV9jaGFpbiwgMCwgTlVMTCk7CiB9CkBAIC04MDksMTYgKzY5Nyw3IEBACiAKIAllcnIgPSAtRU5PREVWOwogCWlmICgheGVuX2RvbWFpbigpKQotCQlnb3RvIG91dF9lcnJvcjsKLQotCS8qIFJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBrZXJuZWwgYnVzIHN1YnN5c3RlbSAqLwotCWVyciA9IGJ1c19yZWdpc3RlcigmeGVuYnVzX2Zyb250ZW5kLmJ1cyk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfZXJyb3I7Ci0KLQllcnIgPSB4ZW5idXNfYmFja2VuZF9idXNfcmVnaXN0ZXIoKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dF91bnJlZ19mcm9udDsKKwkJcmV0dXJuIGVycjsKIAogCS8qCiAJICogRG9tYWluMCBkb2Vzbid0IGhhdmUgYSBzdG9yZV9ldnRjaG4gb3Igc3RvcmVfbWZuIHlldC4KQEAgLTg3NCw3ICs3NTMsNyBAQAogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIlhFTkJVUzogRXJyb3IgaW5pdGlhbGl6aW5nIHhlbnN0b3JlIGNvbW1zOiAlaVxuIiwgZXJyKTsKLQkJZ290byBvdXRfdW5yZWdfYmFjazsKKwkJZ290byBvdXRfZXJyb3I7CiAJfQogCiAjaWZkZWYgQ09ORklHX1hFTl9DT01QQVRfWEVORlMKQEAgLTg4NywxMzMgKzc2NiwxMyBAQAogCiAJcmV0dXJuIDA7CiAKLSAgb3V0X3VucmVnX2JhY2s6Ci0JeGVuYnVzX2JhY2tlbmRfYnVzX3VucmVnaXN0ZXIoKTsKLQotICBvdXRfdW5yZWdfZnJvbnQ6Ci0JYnVzX3VucmVnaXN0ZXIoJnhlbmJ1c19mcm9udGVuZC5idXMpOwotCiAgIG91dF9lcnJvcjoKIAlpZiAocGFnZSAhPSAwKQogCQlmcmVlX3BhZ2UocGFnZSk7CisKIAlyZXR1cm4gZXJyOwogfQogCiBwb3N0Y29yZV9pbml0Y2FsbCh4ZW5idXNfaW5pdCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIGludCBpc19kZXZpY2VfY29ubmVjdGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldiA9IHRvX3hlbmJ1c19kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGF0YTsKLQlzdHJ1Y3QgeGVuYnVzX2RyaXZlciAqeGVuZHJ2OwotCi0JLyoKLQkgKiBBIGRldmljZSB3aXRoIG5vIGRyaXZlciB3aWxsIG5ldmVyIGNvbm5lY3QuIFdlIGNhcmUgb25seSBhYm91dAotCSAqIGRldmljZXMgd2hpY2ggc2hvdWxkIGN1cnJlbnRseSBiZSBpbiB0aGUgcHJvY2VzcyBvZiBjb25uZWN0aW5nLgotCSAqLwotCWlmICghZGV2LT5kcml2ZXIpCi0JCXJldHVybiAwOwotCi0JLyogSXMgdGhpcyBzZWFyY2ggbGltaXRlZCB0byBhIHBhcnRpY3VsYXIgZHJpdmVyPyAqLwotCWlmIChkcnYgJiYgKGRldi0+ZHJpdmVyICE9IGRydikpCi0JCXJldHVybiAwOwotCi0JeGVuZHJ2ID0gdG9feGVuYnVzX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0JcmV0dXJuICh4ZW5kZXYtPnN0YXRlIDwgWGVuYnVzU3RhdGVDb25uZWN0ZWQgfHwKLQkJKHhlbmRldi0+c3RhdGUgPT0gWGVuYnVzU3RhdGVDb25uZWN0ZWQgJiYKLQkJIHhlbmRydi0+aXNfcmVhZHkgJiYgIXhlbmRydi0+aXNfcmVhZHkoeGVuZGV2KSkpOwotfQotCi1zdGF0aWMgaW50IGV4aXN0c19jb25uZWN0aW5nX2RldmljZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQotewotCXJldHVybiBidXNfZm9yX2VhY2hfZGV2KCZ4ZW5idXNfZnJvbnRlbmQuYnVzLCBOVUxMLCBkcnYsCi0JCQkJaXNfZGV2aWNlX2Nvbm5lY3RpbmcpOwotfQotCi1zdGF0aWMgaW50IHByaW50X2RldmljZV9zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCXN0cnVjdCB4ZW5idXNfZGV2aWNlICp4ZW5kZXYgPSB0b194ZW5idXNfZGV2aWNlKGRldik7Ci0Jc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRhdGE7Ci0KLQkvKiBJcyB0aGlzIG9wZXJhdGlvbiBsaW1pdGVkIHRvIGEgcGFydGljdWxhciBkcml2ZXI/ICovCi0JaWYgKGRydiAmJiAoZGV2LT5kcml2ZXIgIT0gZHJ2KSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIWRldi0+ZHJpdmVyKSB7Ci0JCS8qIEluZm9ybWF0aW9uIG9ubHk6IGlzIHRoaXMgdG9vIG5vaXN5PyAqLwotCQlwcmludGsoS0VSTl9JTkZPICJYRU5CVVM6IERldmljZSB3aXRoIG5vIGRyaXZlcjogJXNcbiIsCi0JCSAgICAgICB4ZW5kZXYtPm5vZGVuYW1lKTsKLQl9IGVsc2UgaWYgKHhlbmRldi0+c3RhdGUgPCBYZW5idXNTdGF0ZUNvbm5lY3RlZCkgewotCQllbnVtIHhlbmJ1c19zdGF0ZSByc3RhdGUgPSBYZW5idXNTdGF0ZVVua25vd247Ci0JCWlmICh4ZW5kZXYtPm90aGVyZW5kKQotCQkJcnN0YXRlID0geGVuYnVzX3JlYWRfZHJpdmVyX3N0YXRlKHhlbmRldi0+b3RoZXJlbmQpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJYRU5CVVM6IFRpbWVvdXQgY29ubmVjdGluZyAiCi0JCSAgICAgICAidG8gZGV2aWNlOiAlcyAobG9jYWwgc3RhdGUgJWQsIHJlbW90ZSBzdGF0ZSAlZClcbiIsCi0JCSAgICAgICB4ZW5kZXYtPm5vZGVuYW1lLCB4ZW5kZXYtPnN0YXRlLCByc3RhdGUpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBXZSBvbmx5IHdhaXQgZm9yIGRldmljZSBzZXR1cCBhZnRlciBtb3N0IGluaXRjYWxscyBoYXZlIHJ1bi4gKi8KLXN0YXRpYyBpbnQgcmVhZHlfdG9fd2FpdF9mb3JfZGV2aWNlczsKLQotLyoKLSAqIE9uIGEgNS1taW51dGUgdGltZW91dCwgd2FpdCBmb3IgYWxsIGRldmljZXMgY3VycmVudGx5IGNvbmZpZ3VyZWQuICBXZSBuZWVkCi0gKiB0byBkbyB0aGlzIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBmaWxlc3lzdGVtcyBhbmQgLyBvciBuZXR3b3JrIGRldmljZXMKLSAqIG5lZWRlZCBmb3IgYm9vdCBhcmUgYXZhaWxhYmxlLCBiZWZvcmUgd2UgY2FuIGFsbG93IHRoZSBib290IHRvIHByb2NlZWQuCi0gKgotICogVGhpcyBuZWVkcyB0byBiZSBvbiBhIGxhdGVfaW5pdGNhbGwsIHRvIGhhcHBlbiBhZnRlciB0aGUgZnJvbnRlbmQgZGV2aWNlCi0gKiBkcml2ZXJzIGhhdmUgYmVlbiBpbml0aWFsaXNlZCwgYnV0IGJlZm9yZSB0aGUgcm9vdCBmcyBpcyBtb3VudGVkLgotICoKLSAqIEEgcG9zc2libGUgaW1wcm92ZW1lbnQgaGVyZSB3b3VsZCBiZSB0byBoYXZlIHRoZSB0b29scyBhZGQgYSBwZXItZGV2aWNlCi0gKiBmbGFnIHRvIHRoZSBzdG9yZSBlbnRyeSwgaW5kaWNhdGluZyB3aGV0aGVyIGl0IGlzIG5lZWRlZCBhdCBib290IHRpbWUuCi0gKiBUaGlzIHdvdWxkIGFsbG93IHBlb3BsZSB3aG8ga25ldyB3aGF0IHRoZXkgd2VyZSBkb2luZyB0byBhY2NlbGVyYXRlIHRoZWlyCi0gKiBib290IHNsaWdodGx5LCBidXQgb2YgY291cnNlIG5lZWRzIHRvb2xzIG9yIG1hbnVhbCBpbnRlcnZlbnRpb24gdG8gc2V0IHVwCi0gKiB0aG9zZSBmbGFncyBjb3JyZWN0bHkuCi0gKi8KLXN0YXRpYyB2b2lkIHdhaXRfZm9yX2RldmljZXMoc3RydWN0IHhlbmJ1c19kcml2ZXIgKnhlbmRydikKLXsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllczsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0geGVuZHJ2ID8gJnhlbmRydi0+ZHJpdmVyIDogTlVMTDsKLQl1bnNpZ25lZCBpbnQgc2Vjb25kc193YWl0ZWQgPSAwOwotCi0JaWYgKCFyZWFkeV90b193YWl0X2Zvcl9kZXZpY2VzIHx8ICF4ZW5fZG9tYWluKCkpCi0JCXJldHVybjsKLQotCXdoaWxlIChleGlzdHNfY29ubmVjdGluZ19kZXZpY2UoZHJ2KSkgewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIChzZWNvbmRzX3dhaXRlZCs1KSpIWikpIHsKLQkJCWlmICghc2Vjb25kc193YWl0ZWQpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiWEVOQlVTOiBXYWl0aW5nIGZvciAiCi0JCQkJICAgICAgICJkZXZpY2VzIHRvIGluaXRpYWxpc2U6ICIpOwotCQkJc2Vjb25kc193YWl0ZWQgKz0gNTsKLQkJCXByaW50aygiJXVzLi4uIiwgMzAwIC0gc2Vjb25kc193YWl0ZWQpOwotCQkJaWYgKHNlY29uZHNfd2FpdGVkID09IDMwMCkKLQkJCQlicmVhazsKLQkJfQotCi0JCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWi8xMCk7Ci0JfQotCi0JaWYgKHNlY29uZHNfd2FpdGVkKQotCQlwcmludGsoIlxuIik7Ci0KLQlidXNfZm9yX2VhY2hfZGV2KCZ4ZW5idXNfZnJvbnRlbmQuYnVzLCBOVUxMLCBkcnYsCi0JCQkgcHJpbnRfZGV2aWNlX3N0YXR1cyk7Ci19Ci0KLSNpZm5kZWYgTU9EVUxFCi1zdGF0aWMgaW50IF9faW5pdCBib290X3dhaXRfZm9yX2RldmljZXModm9pZCkKLXsKLQlpZiAoeGVuX2h2bV9kb21haW4oKSAmJiAheGVuX3BsYXRmb3JtX3BjaV91bnBsdWcpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmVhZHlfdG9fd2FpdF9mb3JfZGV2aWNlcyA9IDE7Ci0Jd2FpdF9mb3JfZGV2aWNlcyhOVUxMKTsKLQlyZXR1cm4gMDsKLX0KLQotbGF0ZV9pbml0Y2FsbChib290X3dhaXRfZm9yX2RldmljZXMpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi94ZW5idXMveGVuYnVzX3Byb2JlLmggYi9kcml2ZXJzL3hlbi94ZW5idXMveGVuYnVzX3Byb2JlLmgKaW5kZXggNmM1ZTMxOC4uMjQ2NjU4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4veGVuYnVzL3hlbmJ1c19wcm9iZS5oCisrKyBiL2RyaXZlcnMveGVuL3hlbmJ1cy94ZW5idXNfcHJvYmUuaApAQCAtMzYsMjYgKzM2LDE1IEBACiAKICNkZWZpbmUgWEVOX0JVU19JRF9TSVpFCQkJMjAKIAotI2lmZGVmIENPTkZJR19YRU5fQkFDS0VORAotZXh0ZXJuIHZvaWQgeGVuYnVzX2JhY2tlbmRfc3VzcGVuZChpbnQgKCpmbikoc3RydWN0IGRldmljZSAqLCB2b2lkICopKTsKLWV4dGVybiB2b2lkIHhlbmJ1c19iYWNrZW5kX3Jlc3VtZShpbnQgKCpmbikoc3RydWN0IGRldmljZSAqLCB2b2lkICopKTsKLWV4dGVybiB2b2lkIHhlbmJ1c19iYWNrZW5kX3Byb2JlX2FuZF93YXRjaCh2b2lkKTsKLWV4dGVybiBpbnQgeGVuYnVzX2JhY2tlbmRfYnVzX3JlZ2lzdGVyKHZvaWQpOwotZXh0ZXJuIHZvaWQgeGVuYnVzX2JhY2tlbmRfYnVzX3VucmVnaXN0ZXIodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHhlbmJ1c19iYWNrZW5kX3N1c3BlbmQoaW50ICgqZm4pKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKSkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCB4ZW5idXNfYmFja2VuZF9yZXN1bWUoaW50ICgqZm4pKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKSkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCB4ZW5idXNfYmFja2VuZF9wcm9iZV9hbmRfd2F0Y2godm9pZCkge30KLXN0YXRpYyBpbmxpbmUgaW50IHhlbmJ1c19iYWNrZW5kX2J1c19yZWdpc3Rlcih2b2lkKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgeGVuYnVzX2JhY2tlbmRfYnVzX3VucmVnaXN0ZXIodm9pZCkge30KLSNlbmRpZgotCiBzdHJ1Y3QgeGVuX2J1c190eXBlCiB7CiAJY2hhciAqcm9vdDsKIAl1bnNpZ25lZCBpbnQgbGV2ZWxzOwogCWludCAoKmdldF9idXNfaWQpKGNoYXIgYnVzX2lkW1hFTl9CVVNfSURfU0laRV0sIGNvbnN0IGNoYXIgKm5vZGVuYW1lKTsKLQlpbnQgKCpwcm9iZSkoY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqZGlyKTsKKwlpbnQgKCpwcm9iZSkoc3RydWN0IHhlbl9idXNfdHlwZSAqYnVzLCBjb25zdCBjaGFyICp0eXBlLAorCQkgICAgIGNvbnN0IGNoYXIgKmRpcik7CisJdm9pZCAoKm90aGVyZW5kX2NoYW5nZWQpKHN0cnVjdCB4ZW5idXNfd2F0Y2ggKndhdGNoLCBjb25zdCBjaGFyICoqdmVjLAorCQkJCSB1bnNpZ25lZCBpbnQgbGVuKTsKIAlzdHJ1Y3QgYnVzX3R5cGUgYnVzOwogfTsKIApAQCAtNzMsNCArNjIsMTYgQEAKIAogZXh0ZXJuIHZvaWQgeGVuYnVzX2Rldl9jaGFuZ2VkKGNvbnN0IGNoYXIgKm5vZGUsIHN0cnVjdCB4ZW5fYnVzX3R5cGUgKmJ1cyk7CiAKK2V4dGVybiB2b2lkIHhlbmJ1c19kZXZfc2h1dGRvd24oc3RydWN0IGRldmljZSAqX2Rldik7CisKK2V4dGVybiBpbnQgeGVuYnVzX2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK2V4dGVybiBpbnQgeGVuYnVzX2Rldl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKKworZXh0ZXJuIHZvaWQgeGVuYnVzX290aGVyZW5kX2NoYW5nZWQoc3RydWN0IHhlbmJ1c193YXRjaCAqd2F0Y2gsCisJCQkJICAgIGNvbnN0IGNoYXIgKip2ZWMsIHVuc2lnbmVkIGludCBsZW4sCisJCQkJICAgIGludCBpZ25vcmVfb25fc2h1dGRvd24pOworCitleHRlcm4gaW50IHhlbmJ1c19yZWFkX290aGVyZW5kX2RldGFpbHMoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldiwKKwkJCQkJY2hhciAqaWRfbm9kZSwgY2hhciAqcGF0aF9ub2RlKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi94ZW5idXMveGVuYnVzX3Byb2JlX2JhY2tlbmQuYyBiL2RyaXZlcnMveGVuL3hlbmJ1cy94ZW5idXNfcHJvYmVfYmFja2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZjQ2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3hlbi94ZW5idXMveGVuYnVzX3Byb2JlX2JhY2tlbmQuYwpAQCAtMCwwICsxLDI3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGFsa3MgdG8gWGVuIFN0b3JlIHRvIGZpZ3VyZSBvdXQgd2hhdCBkZXZpY2VzIHdlIGhhdmUgKGJhY2tlbmQgaGFsZikuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFJ1c3R5IFJ1c3NlbGwsIElCTSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgV3JheSwgSGV3bGV0dC1QYWNrYXJkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgWGVuU291cmNlIEx0ZAorICogQ29weXJpZ2h0IChDKSAyMDA3IFNvbGFyZmxhcmUgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmlidXRlZAorICogc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGludG8gb3RoZXIKKyAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvdXJjZSBmaWxlICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksCisgKiBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pCQkJCVwKKwlwcl9kZWJ1ZygieGVuYnVzX3Byb2JlICglczolZCkgIiBmbXQgIi5cbiIsCVwKKwkJIF9fZnVuY19fLCBfX0xJTkVfXywgIyNhcmdzKQorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20veGVuL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPHhlbi94ZW5idXMuaD4KKyNpbmNsdWRlIDx4ZW4vZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgInhlbmJ1c19jb21tcy5oIgorI2luY2x1ZGUgInhlbmJ1c19wcm9iZS5oIgorCisvKiBiYWNrZW5kLzx0eXBlPi88ZmUtdXVpZD4vPGlkPiA9PiA8dHlwZT4tPGZlLWRvbWlkPi08aWQ+ICovCitzdGF0aWMgaW50IGJhY2tlbmRfYnVzX2lkKGNoYXIgYnVzX2lkW1hFTl9CVVNfSURfU0laRV0sIGNvbnN0IGNoYXIgKm5vZGVuYW1lKQoreworCWludCBkb21pZCwgZXJyOworCWNvbnN0IGNoYXIgKmRldmlkLCAqdHlwZSwgKmZyb250ZW5kOworCXVuc2lnbmVkIGludCB0eXBlbGVuOworCisJdHlwZSA9IHN0cmNocihub2RlbmFtZSwgJy8nKTsKKwlpZiAoIXR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCXR5cGUrKzsKKwl0eXBlbGVuID0gc3RyY3Nwbih0eXBlLCAiLyIpOworCWlmICghdHlwZWxlbiB8fCB0eXBlW3R5cGVsZW5dICE9ICcvJykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXZpZCA9IHN0cnJjaHIobm9kZW5hbWUsICcvJykgKyAxOworCisJZXJyID0geGVuYnVzX2dhdGhlcihYQlRfTklMLCBub2RlbmFtZSwgImZyb250ZW5kLWlkIiwgIiVpIiwgJmRvbWlkLAorCQkJICAgICJmcm9udGVuZCIsIE5VTEwsICZmcm9udGVuZCwKKwkJCSAgICBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmIChzdHJsZW4oZnJvbnRlbmQpID09IDApCisJCWVyciA9IC1FUkFOR0U7CisJaWYgKCFlcnIgJiYgIXhlbmJ1c19leGlzdHMoWEJUX05JTCwgZnJvbnRlbmQsICIiKSkKKwkJZXJyID0gLUVOT0VOVDsKKwlrZnJlZShmcm9udGVuZCk7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHNucHJpbnRmKGJ1c19pZCwgWEVOX0JVU19JRF9TSVpFLCAiJS4qcy0laS0lcyIsCisJCSAgICAgdHlwZWxlbiwgdHlwZSwgZG9taWQsIGRldmlkKSA+PSBYRU5fQlVTX0lEX1NJWkUpCisJCXJldHVybiAtRU5PU1BDOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHhlbmJ1c191ZXZlbnRfYmFja2VuZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKK3sKKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGRldjsKKwlzdHJ1Y3QgeGVuYnVzX2RyaXZlciAqZHJ2OworCXN0cnVjdCB4ZW5fYnVzX3R5cGUgKmJ1czsKKworCURQUklOVEsoIiIpOworCisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXhkZXYgPSB0b194ZW5idXNfZGV2aWNlKGRldik7CisJYnVzID0gY29udGFpbmVyX29mKHhkZXYtPmRldi5idXMsIHN0cnVjdCB4ZW5fYnVzX3R5cGUsIGJ1cyk7CisJaWYgKHhkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBzdHVmZiB3ZSB3YW50IHRvIHBhc3MgdG8gL3NiaW4vaG90cGx1ZyAqLworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJYRU5CVVNfVFlQRT0lcyIsIHhkZXYtPmRldmljZXR5cGUpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJYRU5CVVNfUEFUSD0lcyIsIHhkZXYtPm5vZGVuYW1lKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYWRkX3VldmVudF92YXIoZW52LCAiWEVOQlVTX0JBU0VfUEFUSD0lcyIsIGJ1cy0+cm9vdCkpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGRldi0+ZHJpdmVyKSB7CisJCWRydiA9IHRvX3hlbmJ1c19kcml2ZXIoZGV2LT5kcml2ZXIpOworCQlpZiAoZHJ2ICYmIGRydi0+dWV2ZW50KQorCQkJcmV0dXJuIGRydi0+dWV2ZW50KHhkZXYsIGVudik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGJhY2tlbmQvPHR5cGVuYW1lPi88ZnJvbnRlbmQtdXVpZD4vPG5hbWU+ICovCitzdGF0aWMgaW50IHhlbmJ1c19wcm9iZV9iYWNrZW5kX3VuaXQoc3RydWN0IHhlbl9idXNfdHlwZSAqYnVzLAorCQkJCSAgICAgY29uc3QgY2hhciAqZGlyLAorCQkJCSAgICAgY29uc3QgY2hhciAqdHlwZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAqbm9kZW5hbWU7CisJaW50IGVycjsKKworCW5vZGVuYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlcy8lcyIsIGRpciwgbmFtZSk7CisJaWYgKCFub2RlbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlEUFJJTlRLKCIlc1xuIiwgbm9kZW5hbWUpOworCisJZXJyID0geGVuYnVzX3Byb2JlX25vZGUoYnVzLCB0eXBlLCBub2RlbmFtZSk7CisJa2ZyZWUobm9kZW5hbWUpOworCXJldHVybiBlcnI7Cit9CisKKy8qIGJhY2tlbmQvPHR5cGVuYW1lPi88ZnJvbnRlbmQtZG9taWQ+ICovCitzdGF0aWMgaW50IHhlbmJ1c19wcm9iZV9iYWNrZW5kKHN0cnVjdCB4ZW5fYnVzX3R5cGUgKmJ1cywgY29uc3QgY2hhciAqdHlwZSwKKwkJCQljb25zdCBjaGFyICpkb21pZCkKK3sKKwljaGFyICpub2RlbmFtZTsKKwlpbnQgZXJyID0gMDsKKwljaGFyICoqZGlyOworCXVuc2lnbmVkIGludCBpLCBkaXJfbiA9IDA7CisKKwlEUFJJTlRLKCIiKTsKKworCW5vZGVuYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlcy8lcy8lcyIsIGJ1cy0+cm9vdCwgdHlwZSwgZG9taWQpOworCWlmICghbm9kZW5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCisJZGlyID0geGVuYnVzX2RpcmVjdG9yeShYQlRfTklMLCBub2RlbmFtZSwgIiIsICZkaXJfbik7CisJaWYgKElTX0VSUihkaXIpKSB7CisJCWtmcmVlKG5vZGVuYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGlyKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlyX247IGkrKykgeworCQllcnIgPSB4ZW5idXNfcHJvYmVfYmFja2VuZF91bml0KGJ1cywgbm9kZW5hbWUsIHR5cGUsIGRpcltpXSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwl9CisJa2ZyZWUoZGlyKTsKKwlrZnJlZShub2RlbmFtZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZnJvbnRlbmRfY2hhbmdlZChzdHJ1Y3QgeGVuYnVzX3dhdGNoICp3YXRjaCwKKwkJCSAgICBjb25zdCBjaGFyICoqdmVjLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXhlbmJ1c19vdGhlcmVuZF9jaGFuZ2VkKHdhdGNoLCB2ZWMsIGxlbiwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB4ZW5idXNfYmFja2VuZF9kZXZfYXR0cnNbXSA9IHsKKwlfX0FUVFJfTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCB4ZW5fYnVzX3R5cGUgeGVuYnVzX2JhY2tlbmQgPSB7CisJLnJvb3QgPSAiYmFja2VuZCIsCisJLmxldmVscyA9IDMsCQkvKiBiYWNrZW5kL3R5cGUvPGZyb250ZW5kPi88aWQ+ICovCisJLmdldF9idXNfaWQgPSBiYWNrZW5kX2J1c19pZCwKKwkucHJvYmUgPSB4ZW5idXNfcHJvYmVfYmFja2VuZCwKKwkub3RoZXJlbmRfY2hhbmdlZCA9IGZyb250ZW5kX2NoYW5nZWQsCisJLmJ1cyA9IHsKKwkJLm5hbWUJCT0gInhlbi1iYWNrZW5kIiwKKwkJLm1hdGNoCQk9IHhlbmJ1c19tYXRjaCwKKwkJLnVldmVudAkJPSB4ZW5idXNfdWV2ZW50X2JhY2tlbmQsCisJCS5wcm9iZQkJPSB4ZW5idXNfZGV2X3Byb2JlLAorCQkucmVtb3ZlCQk9IHhlbmJ1c19kZXZfcmVtb3ZlLAorCQkuc2h1dGRvd24JPSB4ZW5idXNfZGV2X3NodXRkb3duLAorCQkuZGV2X2F0dHJzCT0geGVuYnVzX2JhY2tlbmRfZGV2X2F0dHJzLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBiYWNrZW5kX2NoYW5nZWQoc3RydWN0IHhlbmJ1c193YXRjaCAqd2F0Y2gsCisJCQkgICAgY29uc3QgY2hhciAqKnZlYywgdW5zaWduZWQgaW50IGxlbikKK3sKKwlEUFJJTlRLKCIiKTsKKworCXhlbmJ1c19kZXZfY2hhbmdlZCh2ZWNbWFNfV0FUQ0hfUEFUSF0sICZ4ZW5idXNfYmFja2VuZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeGVuYnVzX3dhdGNoIGJlX3dhdGNoID0geworCS5ub2RlID0gImJhY2tlbmQiLAorCS5jYWxsYmFjayA9IGJhY2tlbmRfY2hhbmdlZCwKK307CisKK3N0YXRpYyBpbnQgcmVhZF9mcm9udGVuZF9kZXRhaWxzKHN0cnVjdCB4ZW5idXNfZGV2aWNlICp4ZW5kZXYpCit7CisJcmV0dXJuIHhlbmJ1c19yZWFkX290aGVyZW5kX2RldGFpbHMoeGVuZGV2LCAiZnJvbnRlbmQtaWQiLCAiZnJvbnRlbmQiKTsKK30KKworaW50IHhlbmJ1c19kZXZfaXNfb25saW5lKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYpCit7CisJaW50IHJjLCB2YWw7CisKKwlyYyA9IHhlbmJ1c19zY2FuZihYQlRfTklMLCBkZXYtPm5vZGVuYW1lLCAib25saW5lIiwgIiVkIiwgJnZhbCk7CisJaWYgKHJjICE9IDEpCisJCXZhbCA9IDA7IC8qIG5vIG9ubGluZSBub2RlIHByZXNlbnQgKi8KKworCXJldHVybiB2YWw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5idXNfZGV2X2lzX29ubGluZSk7CisKK2ludCBfX3hlbmJ1c19yZWdpc3Rlcl9iYWNrZW5kKHN0cnVjdCB4ZW5idXNfZHJpdmVyICpkcnYsCisJCQkgICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwgY29uc3QgY2hhciAqbW9kX25hbWUpCit7CisJZHJ2LT5yZWFkX290aGVyZW5kX2RldGFpbHMgPSByZWFkX2Zyb250ZW5kX2RldGFpbHM7CisKKwlyZXR1cm4geGVuYnVzX3JlZ2lzdGVyX2RyaXZlcl9jb21tb24oZHJ2LCAmeGVuYnVzX2JhY2tlbmQsCisJCQkJCSAgICAgb3duZXIsIG1vZF9uYW1lKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9feGVuYnVzX3JlZ2lzdGVyX2JhY2tlbmQpOworCitzdGF0aWMgaW50IGJhY2tlbmRfcHJvYmVfYW5kX3dhdGNoKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbm90aWZpZXIsCisJCQkJICAgdW5zaWduZWQgbG9uZyBldmVudCwKKwkJCQkgICB2b2lkICpkYXRhKQoreworCS8qIEVudW1lcmF0ZSBkZXZpY2VzIGluIHhlbnN0b3JlIGFuZCB3YXRjaCBmb3IgY2hhbmdlcy4gKi8KKwl4ZW5idXNfcHJvYmVfZGV2aWNlcygmeGVuYnVzX2JhY2tlbmQpOworCXJlZ2lzdGVyX3hlbmJ1c193YXRjaCgmYmVfd2F0Y2gpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgaW50IF9faW5pdCB4ZW5idXNfcHJvYmVfYmFja2VuZF9pbml0KHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4ZW5zdG9yZV9ub3RpZmllciA9IHsKKwkJLm5vdGlmaWVyX2NhbGwgPSBiYWNrZW5kX3Byb2JlX2FuZF93YXRjaAorCX07CisJaW50IGVycjsKKworCURQUklOVEsoIiIpOworCisJLyogUmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggdGhlIGtlcm5lbCBidXMgc3Vic3lzdGVtICovCisJZXJyID0gYnVzX3JlZ2lzdGVyKCZ4ZW5idXNfYmFja2VuZC5idXMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZWdpc3Rlcl94ZW5zdG9yZV9ub3RpZmllcigmeGVuc3RvcmVfbm90aWZpZXIpOworCisJcmV0dXJuIDA7Cit9CitzdWJzeXNfaW5pdGNhbGwoeGVuYnVzX3Byb2JlX2JhY2tlbmRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi94ZW5idXMveGVuYnVzX3Byb2JlX2Zyb250ZW5kLmMgYi9kcml2ZXJzL3hlbi94ZW5idXMveGVuYnVzX3Byb2JlX2Zyb250ZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjYzJkNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMveGVuL3hlbmJ1cy94ZW5idXNfcHJvYmVfZnJvbnRlbmQuYwpAQCAtMCwwICsxLDI5NCBAQAorI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikJCQkJXAorCXByX2RlYnVnKCJ4ZW5idXNfcHJvYmUgKCVzOiVkKSAiIGZtdCAiLlxuIiwJXAorCQkgX19mdW5jX18sIF9fTElORV9fLCAjI2FyZ3MpCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPHhlbi94ZW5idXMuaD4KKyNpbmNsdWRlIDx4ZW4vZXZlbnRzLmg+CisjaW5jbHVkZSA8eGVuL3BhZ2UuaD4KKworI2luY2x1ZGUgPHhlbi9wbGF0Zm9ybV9wY2kuaD4KKworI2luY2x1ZGUgInhlbmJ1c19jb21tcy5oIgorI2luY2x1ZGUgInhlbmJ1c19wcm9iZS5oIgorCisKKy8qIGRldmljZS88dHlwZT4vPGlkPiA9PiA8dHlwZT4tPGlkPiAqLworc3RhdGljIGludCBmcm9udGVuZF9idXNfaWQoY2hhciBidXNfaWRbWEVOX0JVU19JRF9TSVpFXSwgY29uc3QgY2hhciAqbm9kZW5hbWUpCit7CisJbm9kZW5hbWUgPSBzdHJjaHIobm9kZW5hbWUsICcvJyk7CisJaWYgKCFub2RlbmFtZSB8fCBzdHJsZW4obm9kZW5hbWUgKyAxKSA+PSBYRU5fQlVTX0lEX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiWEVOQlVTOiBiYWQgZnJvbnRlbmQgJXNcbiIsIG5vZGVuYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3RybGNweShidXNfaWQsIG5vZGVuYW1lICsgMSwgWEVOX0JVU19JRF9TSVpFKTsKKwlpZiAoIXN0cmNocihidXNfaWQsICcvJykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiWEVOQlVTOiBidXNfaWQgJXMgbm8gc2xhc2hcbiIsIGJ1c19pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkqc3RyY2hyKGJ1c19pZCwgJy8nKSA9ICctJzsKKwlyZXR1cm4gMDsKK30KKworLyogZGV2aWNlLzx0eXBlbmFtZT4vPG5hbWU+ICovCitzdGF0aWMgaW50IHhlbmJ1c19wcm9iZV9mcm9udGVuZChzdHJ1Y3QgeGVuX2J1c190eXBlICpidXMsIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkJIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAqbm9kZW5hbWU7CisJaW50IGVycjsKKworCW5vZGVuYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlcy8lcy8lcyIsIGJ1cy0+cm9vdCwgdHlwZSwgbmFtZSk7CisJaWYgKCFub2RlbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlEUFJJTlRLKCIlcyIsIG5vZGVuYW1lKTsKKworCWVyciA9IHhlbmJ1c19wcm9iZV9ub2RlKGJ1cywgdHlwZSwgbm9kZW5hbWUpOworCWtmcmVlKG5vZGVuYW1lKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHhlbmJ1c191ZXZlbnRfZnJvbnRlbmQoc3RydWN0IGRldmljZSAqX2RldiwKKwkJCQkgIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKK3sKKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2ID0gdG9feGVuYnVzX2RldmljZShfZGV2KTsKKworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz14ZW46JXMiLCBkZXYtPmRldmljZXR5cGUpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGJhY2tlbmRfY2hhbmdlZChzdHJ1Y3QgeGVuYnVzX3dhdGNoICp3YXRjaCwKKwkJCSAgICBjb25zdCBjaGFyICoqdmVjLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXhlbmJ1c19vdGhlcmVuZF9jaGFuZ2VkKHdhdGNoLCB2ZWMsIGxlbiwgMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB4ZW5idXNfZnJvbnRlbmRfZGV2X2F0dHJzW10gPSB7CisJX19BVFRSX05VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeGVuX2J1c190eXBlIHhlbmJ1c19mcm9udGVuZCA9IHsKKwkucm9vdCA9ICJkZXZpY2UiLAorCS5sZXZlbHMgPSAyLAkJLyogZGV2aWNlL3R5cGUvPGlkPiAqLworCS5nZXRfYnVzX2lkID0gZnJvbnRlbmRfYnVzX2lkLAorCS5wcm9iZSA9IHhlbmJ1c19wcm9iZV9mcm9udGVuZCwKKwkub3RoZXJlbmRfY2hhbmdlZCA9IGJhY2tlbmRfY2hhbmdlZCwKKwkuYnVzID0geworCQkubmFtZQkJPSAieGVuIiwKKwkJLm1hdGNoCQk9IHhlbmJ1c19tYXRjaCwKKwkJLnVldmVudAkJPSB4ZW5idXNfdWV2ZW50X2Zyb250ZW5kLAorCQkucHJvYmUJCT0geGVuYnVzX2Rldl9wcm9iZSwKKwkJLnJlbW92ZQkJPSB4ZW5idXNfZGV2X3JlbW92ZSwKKwkJLnNodXRkb3duCT0geGVuYnVzX2Rldl9zaHV0ZG93biwKKwkJLmRldl9hdHRycwk9IHhlbmJ1c19mcm9udGVuZF9kZXZfYXR0cnMsCisKKwkJLnN1c3BlbmQJPSB4ZW5idXNfZGV2X3N1c3BlbmQsCisJCS5yZXN1bWUJCT0geGVuYnVzX2Rldl9yZXN1bWUsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIGZyb250ZW5kX2NoYW5nZWQoc3RydWN0IHhlbmJ1c193YXRjaCAqd2F0Y2gsCisJCQkgICAgIGNvbnN0IGNoYXIgKip2ZWMsIHVuc2lnbmVkIGludCBsZW4pCit7CisJRFBSSU5USygiIik7CisKKwl4ZW5idXNfZGV2X2NoYW5nZWQodmVjW1hTX1dBVENIX1BBVEhdLCAmeGVuYnVzX2Zyb250ZW5kKTsKK30KKworCisvKiBXZSB3YXRjaCBmb3IgZGV2aWNlcyBhcHBlYXJpbmcgYW5kIHZhbmlzaGluZy4gKi8KK3N0YXRpYyBzdHJ1Y3QgeGVuYnVzX3dhdGNoIGZlX3dhdGNoID0geworCS5ub2RlID0gImRldmljZSIsCisJLmNhbGxiYWNrID0gZnJvbnRlbmRfY2hhbmdlZCwKK307CisKK3N0YXRpYyBpbnQgcmVhZF9iYWNrZW5kX2RldGFpbHMoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldikKK3sKKwlyZXR1cm4geGVuYnVzX3JlYWRfb3RoZXJlbmRfZGV0YWlscyh4ZW5kZXYsICJiYWNrZW5kLWlkIiwgImJhY2tlbmQiKTsKK30KKworc3RhdGljIGludCBpc19kZXZpY2VfY29ubmVjdGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldiA9IHRvX3hlbmJ1c19kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGF0YTsKKwlzdHJ1Y3QgeGVuYnVzX2RyaXZlciAqeGVuZHJ2OworCisJLyoKKwkgKiBBIGRldmljZSB3aXRoIG5vIGRyaXZlciB3aWxsIG5ldmVyIGNvbm5lY3QuIFdlIGNhcmUgb25seSBhYm91dAorCSAqIGRldmljZXMgd2hpY2ggc2hvdWxkIGN1cnJlbnRseSBiZSBpbiB0aGUgcHJvY2VzcyBvZiBjb25uZWN0aW5nLgorCSAqLworCWlmICghZGV2LT5kcml2ZXIpCisJCXJldHVybiAwOworCisJLyogSXMgdGhpcyBzZWFyY2ggbGltaXRlZCB0byBhIHBhcnRpY3VsYXIgZHJpdmVyPyAqLworCWlmIChkcnYgJiYgKGRldi0+ZHJpdmVyICE9IGRydikpCisJCXJldHVybiAwOworCisJeGVuZHJ2ID0gdG9feGVuYnVzX2RyaXZlcihkZXYtPmRyaXZlcik7CisJcmV0dXJuICh4ZW5kZXYtPnN0YXRlIDwgWGVuYnVzU3RhdGVDb25uZWN0ZWQgfHwKKwkJKHhlbmRldi0+c3RhdGUgPT0gWGVuYnVzU3RhdGVDb25uZWN0ZWQgJiYKKwkJIHhlbmRydi0+aXNfcmVhZHkgJiYgIXhlbmRydi0+aXNfcmVhZHkoeGVuZGV2KSkpOworfQorCitzdGF0aWMgaW50IGV4aXN0c19jb25uZWN0aW5nX2RldmljZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreworCXJldHVybiBidXNfZm9yX2VhY2hfZGV2KCZ4ZW5idXNfZnJvbnRlbmQuYnVzLCBOVUxMLCBkcnYsCisJCQkJaXNfZGV2aWNlX2Nvbm5lY3RpbmcpOworfQorCitzdGF0aWMgaW50IHByaW50X2RldmljZV9zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB4ZW5idXNfZGV2aWNlICp4ZW5kZXYgPSB0b194ZW5idXNfZGV2aWNlKGRldik7CisJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRhdGE7CisKKwkvKiBJcyB0aGlzIG9wZXJhdGlvbiBsaW1pdGVkIHRvIGEgcGFydGljdWxhciBkcml2ZXI/ICovCisJaWYgKGRydiAmJiAoZGV2LT5kcml2ZXIgIT0gZHJ2KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWRldi0+ZHJpdmVyKSB7CisJCS8qIEluZm9ybWF0aW9uIG9ubHk6IGlzIHRoaXMgdG9vIG5vaXN5PyAqLworCQlwcmludGsoS0VSTl9JTkZPICJYRU5CVVM6IERldmljZSB3aXRoIG5vIGRyaXZlcjogJXNcbiIsCisJCSAgICAgICB4ZW5kZXYtPm5vZGVuYW1lKTsKKwl9IGVsc2UgaWYgKHhlbmRldi0+c3RhdGUgPCBYZW5idXNTdGF0ZUNvbm5lY3RlZCkgeworCQllbnVtIHhlbmJ1c19zdGF0ZSByc3RhdGUgPSBYZW5idXNTdGF0ZVVua25vd247CisJCWlmICh4ZW5kZXYtPm90aGVyZW5kKQorCQkJcnN0YXRlID0geGVuYnVzX3JlYWRfZHJpdmVyX3N0YXRlKHhlbmRldi0+b3RoZXJlbmQpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJYRU5CVVM6IFRpbWVvdXQgY29ubmVjdGluZyAiCisJCSAgICAgICAidG8gZGV2aWNlOiAlcyAobG9jYWwgc3RhdGUgJWQsIHJlbW90ZSBzdGF0ZSAlZClcbiIsCisJCSAgICAgICB4ZW5kZXYtPm5vZGVuYW1lLCB4ZW5kZXYtPnN0YXRlLCByc3RhdGUpOworCX0KKworCXJldHVybiAwOworfQorCisvKiBXZSBvbmx5IHdhaXQgZm9yIGRldmljZSBzZXR1cCBhZnRlciBtb3N0IGluaXRjYWxscyBoYXZlIHJ1bi4gKi8KK3N0YXRpYyBpbnQgcmVhZHlfdG9fd2FpdF9mb3JfZGV2aWNlczsKKworLyoKKyAqIE9uIGEgNS1taW51dGUgdGltZW91dCwgd2FpdCBmb3IgYWxsIGRldmljZXMgY3VycmVudGx5IGNvbmZpZ3VyZWQuICBXZSBuZWVkCisgKiB0byBkbyB0aGlzIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBmaWxlc3lzdGVtcyBhbmQgLyBvciBuZXR3b3JrIGRldmljZXMKKyAqIG5lZWRlZCBmb3IgYm9vdCBhcmUgYXZhaWxhYmxlLCBiZWZvcmUgd2UgY2FuIGFsbG93IHRoZSBib290IHRvIHByb2NlZWQuCisgKgorICogVGhpcyBuZWVkcyB0byBiZSBvbiBhIGxhdGVfaW5pdGNhbGwsIHRvIGhhcHBlbiBhZnRlciB0aGUgZnJvbnRlbmQgZGV2aWNlCisgKiBkcml2ZXJzIGhhdmUgYmVlbiBpbml0aWFsaXNlZCwgYnV0IGJlZm9yZSB0aGUgcm9vdCBmcyBpcyBtb3VudGVkLgorICoKKyAqIEEgcG9zc2libGUgaW1wcm92ZW1lbnQgaGVyZSB3b3VsZCBiZSB0byBoYXZlIHRoZSB0b29scyBhZGQgYSBwZXItZGV2aWNlCisgKiBmbGFnIHRvIHRoZSBzdG9yZSBlbnRyeSwgaW5kaWNhdGluZyB3aGV0aGVyIGl0IGlzIG5lZWRlZCBhdCBib290IHRpbWUuCisgKiBUaGlzIHdvdWxkIGFsbG93IHBlb3BsZSB3aG8ga25ldyB3aGF0IHRoZXkgd2VyZSBkb2luZyB0byBhY2NlbGVyYXRlIHRoZWlyCisgKiBib290IHNsaWdodGx5LCBidXQgb2YgY291cnNlIG5lZWRzIHRvb2xzIG9yIG1hbnVhbCBpbnRlcnZlbnRpb24gdG8gc2V0IHVwCisgKiB0aG9zZSBmbGFncyBjb3JyZWN0bHkuCisgKi8KK3N0YXRpYyB2b2lkIHdhaXRfZm9yX2RldmljZXMoc3RydWN0IHhlbmJ1c19kcml2ZXIgKnhlbmRydikKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllczsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0geGVuZHJ2ID8gJnhlbmRydi0+ZHJpdmVyIDogTlVMTDsKKwl1bnNpZ25lZCBpbnQgc2Vjb25kc193YWl0ZWQgPSAwOworCisJaWYgKCFyZWFkeV90b193YWl0X2Zvcl9kZXZpY2VzIHx8ICF4ZW5fZG9tYWluKCkpCisJCXJldHVybjsKKworCXdoaWxlIChleGlzdHNfY29ubmVjdGluZ19kZXZpY2UoZHJ2KSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIChzZWNvbmRzX3dhaXRlZCs1KSpIWikpIHsKKwkJCWlmICghc2Vjb25kc193YWl0ZWQpCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiWEVOQlVTOiBXYWl0aW5nIGZvciAiCisJCQkJICAgICAgICJkZXZpY2VzIHRvIGluaXRpYWxpc2U6ICIpOworCQkJc2Vjb25kc193YWl0ZWQgKz0gNTsKKwkJCXByaW50aygiJXVzLi4uIiwgMzAwIC0gc2Vjb25kc193YWl0ZWQpOworCQkJaWYgKHNlY29uZHNfd2FpdGVkID09IDMwMCkKKwkJCQlicmVhazsKKwkJfQorCisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWi8xMCk7CisJfQorCisJaWYgKHNlY29uZHNfd2FpdGVkKQorCQlwcmludGsoIlxuIik7CisKKwlidXNfZm9yX2VhY2hfZGV2KCZ4ZW5idXNfZnJvbnRlbmQuYnVzLCBOVUxMLCBkcnYsCisJCQkgcHJpbnRfZGV2aWNlX3N0YXR1cyk7Cit9CisKK2ludCBfX3hlbmJ1c19yZWdpc3Rlcl9mcm9udGVuZChzdHJ1Y3QgeGVuYnVzX2RyaXZlciAqZHJ2LAorCQkJICAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLCBjb25zdCBjaGFyICptb2RfbmFtZSkKK3sKKwlpbnQgcmV0OworCisJZHJ2LT5yZWFkX290aGVyZW5kX2RldGFpbHMgPSByZWFkX2JhY2tlbmRfZGV0YWlsczsKKworCXJldCA9IHhlbmJ1c19yZWdpc3Rlcl9kcml2ZXJfY29tbW9uKGRydiwgJnhlbmJ1c19mcm9udGVuZCwKKwkJCQkJICAgIG93bmVyLCBtb2RfbmFtZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIElmIHRoaXMgZHJpdmVyIGlzIGxvYWRlZCBhcyBhIG1vZHVsZSB3YWl0IGZvciBkZXZpY2VzIHRvIGF0dGFjaC4gKi8KKwl3YWl0X2Zvcl9kZXZpY2VzKGRydik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9feGVuYnVzX3JlZ2lzdGVyX2Zyb250ZW5kKTsKKworc3RhdGljIGludCBmcm9udGVuZF9wcm9iZV9hbmRfd2F0Y2goc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpub3RpZmllciwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGV2ZW50LAorCQkJCSAgIHZvaWQgKmRhdGEpCit7CisJLyogRW51bWVyYXRlIGRldmljZXMgaW4geGVuc3RvcmUgYW5kIHdhdGNoIGZvciBjaGFuZ2VzLiAqLworCXhlbmJ1c19wcm9iZV9kZXZpY2VzKCZ4ZW5idXNfZnJvbnRlbmQpOworCXJlZ2lzdGVyX3hlbmJ1c193YXRjaCgmZmVfd2F0Y2gpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IHhlbmJ1c19wcm9iZV9mcm9udGVuZF9pbml0KHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4ZW5zdG9yZV9ub3RpZmllciA9IHsKKwkJLm5vdGlmaWVyX2NhbGwgPSBmcm9udGVuZF9wcm9iZV9hbmRfd2F0Y2gKKwl9OworCWludCBlcnI7CisKKwlEUFJJTlRLKCIiKTsKKworCS8qIFJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBrZXJuZWwgYnVzIHN1YnN5c3RlbSAqLworCWVyciA9IGJ1c19yZWdpc3RlcigmeGVuYnVzX2Zyb250ZW5kLmJ1cyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJlZ2lzdGVyX3hlbnN0b3JlX25vdGlmaWVyKCZ4ZW5zdG9yZV9ub3RpZmllcik7CisKKwlyZXR1cm4gMDsKK30KK3N1YnN5c19pbml0Y2FsbCh4ZW5idXNfcHJvYmVfZnJvbnRlbmRfaW5pdCk7CisKKyNpZm5kZWYgTU9EVUxFCitzdGF0aWMgaW50IF9faW5pdCBib290X3dhaXRfZm9yX2RldmljZXModm9pZCkKK3sKKwlpZiAoeGVuX2h2bV9kb21haW4oKSAmJiAheGVuX3BsYXRmb3JtX3BjaV91bnBsdWcpCisJCXJldHVybiAtRU5PREVWOworCisJcmVhZHlfdG9fd2FpdF9mb3JfZGV2aWNlcyA9IDE7CisJd2FpdF9mb3JfZGV2aWNlcyhOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworbGF0ZV9pbml0Y2FsbChib290X3dhaXRfZm9yX2RldmljZXMpOworI2VuZGlmCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2loZXgyZncuYyBiL2Zpcm13YXJlL2loZXgyZncuYwppbmRleCBiYTBjZjBiLi5jZjM4ZTE1IDEwMDY0NAotLS0gYS9maXJtd2FyZS9paGV4MmZ3LmMKKysrIGIvZmlybXdhcmUvaWhleDJmdy5jCkBAIC0xMjQsOCArMTI0LDcgQEAKIAlpZiAocHJvY2Vzc19paGV4KGRhdGEsIHN0LnN0X3NpemUpKQogCQlyZXR1cm4gMTsKIAotCW91dHB1dF9yZWNvcmRzKG91dGZkKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gb3V0cHV0X3JlY29yZHMob3V0ZmQpOwogfQogCiBzdGF0aWMgaW50IHByb2Nlc3NfaWhleCh1aW50OF90ICpkYXRhLCBzc2l6ZV90IHNpemUpCkBAIC0yNjksMTEgKzI2OCwxMyBAQAogCiAJCXAtPmFkZHIgPSBodG9ubChwLT5hZGRyKTsKIAkJcC0+bGVuID0gaHRvbnMocC0+bGVuKTsKLQkJd3JpdGUob3V0ZmQsICZwLT5hZGRyLCB3cml0ZWxlbik7CisJCWlmICh3cml0ZShvdXRmZCwgJnAtPmFkZHIsIHdyaXRlbGVuKSAhPSB3cml0ZWxlbikKKwkJCXJldHVybiAxOwogCQlwID0gcC0+bmV4dDsKIAl9CiAJLyogRU9GIHJlY29yZCBpcyB6ZXJvIGxlbmd0aCwgc2luY2Ugd2UgZG9uJ3QgYm90aGVyIHRvIHJlcHJlc2VudAogCSAgIHRoZSB0eXBlIGZpZWxkIGluIHRoZSBiaW5hcnkgdmVyc2lvbiAqLwotCXdyaXRlKG91dGZkLCB6ZXJvZXMsIDYpOworCWlmICh3cml0ZShvdXRmZCwgemVyb2VzLCA2KSAhPSA2KQorCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzLzlwL0tjb25maWcgYi9mcy85cC9LY29uZmlnCmluZGV4IDdlMDUxMTQuLjgxNGFjNGUgMTAwNjQ0Ci0tLSBhL2ZzLzlwL0tjb25maWcKKysrIGIvZnMvOXAvS2NvbmZpZwpAQCAtOSw2ICs5LDggQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAoraWYgOVBfRlMKKwogY29uZmlnIDlQX0ZTQ0FDSEUKIAlib29sICJFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTApAQCAtMjAsNyArMjIsNiBAQAogCiBjb25maWcgOVBfRlNfUE9TSVhfQUNMCiAJYm9vbCAiOVAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCi0JZGVwZW5kcyBvbiA5UF9GUwogCXNlbGVjdCBGU19QT1NJWF9BQ0wKIAloZWxwCiAJICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCkBAIC0zMCwzICszMSw1IEBACiAJICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCiAKIAkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgorCitlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvOXAvTWFrZWZpbGUgYi9mcy85cC9NYWtlZmlsZQppbmRleCBmOGJhMzdlLi5hYjhjMTI3IDEwMDY0NAotLS0gYS9mcy85cC9NYWtlZmlsZQorKysgYi9mcy85cC9NYWtlZmlsZQpAQCAtMyw2ICszLDcgQEAKIDlwLW9ianMgOj0gXAogCXZmc19zdXBlci5vIFwKIAl2ZnNfaW5vZGUubyBcCisJdmZzX2lub2RlX2RvdGwubyBcCiAJdmZzX2FkZHIubyBcCiAJdmZzX2ZpbGUubyBcCiAJdmZzX2Rpci5vIFwKZGlmZiAtLWdpdCBhL2ZzLzlwL2FjbC5jIGIvZnMvOXAvYWNsLmMKaW5kZXggNmU1OGM0Yy4uMDJhMmNmNiAxMDA2NDQKLS0tIGEvZnMvOXAvYWNsLmMKKysrIGIvZnMvOXAvYWNsLmMKQEAgLTI4LDcgKzI4LDcgQEAKIHsKIAlzc2l6ZV90IHNpemU7CiAJdm9pZCAqdmFsdWUgPSBOVUxMOwotCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7OworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7CiAKIAlzaXplID0gdjlmc19maWRfeGF0dHJfZ2V0KGZpZCwgbmFtZSwgTlVMTCwgMCk7CiAJaWYgKHNpemUgPiAwKSB7CkBAIC0zNjUsNyArMzY1LDcgQEAKIAljYXNlIEFDTF9UWVBFX0RFRkFVTFQ6CiAJCW5hbWUgPSBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVDsKIAkJaWYgKCFTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7Ci0JCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJcmV0dmFsID0gYWNsID8gLUVJTlZBTCA6IDA7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9mcy85cC92OWZzLmggYi9mcy85cC92OWZzLmgKaW5kZXggY2I2Mzk2OC4uYzRiNWQ4OCAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmcy5oCisrKyBiL2ZzLzlwL3Y5ZnMuaApAQCAtMTEzLDkgKzExMywyNyBAQAogCiBzdHJ1Y3QgcDlfZmlkICp2OWZzX3Nlc3Npb25faW5pdChzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKiwgY29uc3QgY2hhciAqLAogCQkJCQkJCQkJY2hhciAqKTsKLXZvaWQgdjlmc19zZXNzaW9uX2Nsb3NlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMpOwotdm9pZCB2OWZzX3Nlc3Npb25fY2FuY2VsKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMpOwotdm9pZCB2OWZzX3Nlc3Npb25fYmVnaW5fY2FuY2VsKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMpOworZXh0ZXJuIHZvaWQgdjlmc19zZXNzaW9uX2Nsb3NlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMpOworZXh0ZXJuIHZvaWQgdjlmc19zZXNzaW9uX2NhbmNlbChzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzKTsKK2V4dGVybiB2b2lkIHY5ZnNfc2Vzc2lvbl9iZWdpbl9jYW5jZWwoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcyk7CitleHRlcm4gc3RydWN0IGRlbnRyeSAqdjlmc192ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQlzdHJ1Y3QgbmFtZWlkYXRhICpuYW1laWRhdGEpOworZXh0ZXJuIGludCB2OWZzX3Zmc191bmxpbmsoc3RydWN0IGlub2RlICppLCBzdHJ1Y3QgZGVudHJ5ICpkKTsKK2V4dGVybiBpbnQgdjlmc192ZnNfcm1kaXIoc3RydWN0IGlub2RlICppLCBzdHJ1Y3QgZGVudHJ5ICpkKTsKK2V4dGVybiBpbnQgdjlmc192ZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJCXN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7CitleHRlcm4gdm9pZCB2OWZzX3Zmc19wdXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kLAorCQkJdm9pZCAqcCk7CitleHRlcm4gc3RydWN0IGlub2RlICp2OWZzX2lub2RlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsCisJCQlzdHJ1Y3QgcDlfZmlkICpmaWQsCisJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnNfZG90bDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2OWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uc19kb3RsOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zX2RvdGw7CitleHRlcm4gc3RydWN0IGlub2RlICp2OWZzX2lub2RlX2RvdGwoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywKKwkJCXN0cnVjdCBwOV9maWQgKmZpZCwKKwkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogCiAvKiBvdGhlciBkZWZhdWx0IGdsb2JhbHMgKi8KICNkZWZpbmUgVjlGU19QT1JUCTU2NApAQCAtMTM4LDMgKzE1NiwyMSBAQAogewogCXJldHVybiB2OXNlcy0+ZmxhZ3MgJiBWOUZTX1BST1RPXzIwMDBMOwogfQorCisvKioKKyAqIHY5ZnNfaW5vZGVfZnJvbV9maWQgLSBIZWxwZXIgcm91dGluZSB0byBwb3B1bGF0ZSBhbiBpbm9kZSBieQorICogaXNzdWluZyBhIGF0dHJpYnV0ZSByZXF1ZXN0CisgKiBAdjlzZXM6IHNlc3Npb24gaW5mb3JtYXRpb24KKyAqIEBmaWQ6IGZpZCB0byBpc3N1ZSBhdHRyaWJ1dGUgcmVxdWVzdCBmb3IKKyAqIEBzYjogc3VwZXJibG9jayBvbiB3aGljaCB0byBjcmVhdGUgaW5vZGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICoKK3Y5ZnNfaW5vZGVfZnJvbV9maWQoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgc3RydWN0IHA5X2ZpZCAqZmlkLAorCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaWYgKHY5ZnNfcHJvdG9fZG90bCh2OXNlcykpCisJCXJldHVybiB2OWZzX2lub2RlX2RvdGwodjlzZXMsIGZpZCwgc2IpOworCWVsc2UKKwkJcmV0dXJuIHY5ZnNfaW5vZGUodjlzZXMsIGZpZCwgc2IpOworfQpkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmc192ZnMuaCBiL2ZzLzlwL3Y5ZnNfdmZzLmgKaW5kZXggYmFiMGVhYy4uYjc4OWY4ZSAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmc192ZnMuaAorKysgYi9mcy85cC92OWZzX3Zmcy5oCkBAIC01OSw3ICs1OSw2IEBACiBpbnQgdjlmc19kaXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiBpbnQgdjlmc19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogdm9pZCB2OWZzX2lub2RlMnN0YXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHA5X3dzdGF0ICpzdGF0KTsKLXZvaWQgdjlmc19kZW50cnlfcmVsZWFzZShzdHJ1Y3QgZGVudHJ5ICopOwogaW50IHY5ZnNfdWZsYWdzMm9tb2RlKGludCB1ZmxhZ3MsIGludCBleHRlbmRlZCk7CiAKIHNzaXplX3Qgdjlmc19maWxlX3JlYWRuKHN0cnVjdCBmaWxlICosIGNoYXIgKiwgY2hhciBfX3VzZXIgKiwgdTMyLCB1NjQpOwpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2RlbnRyeS5jIGIvZnMvOXAvdmZzX2RlbnRyeS5jCmluZGV4IDQ2NmQyYTQuLjIzM2I3ZDQgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19kZW50cnkuYworKysgYi9mcy85cC92ZnNfZGVudHJ5LmMKQEAgLTg2LDcgKzg2LDcgQEAKICAqCiAgKi8KIAotdm9pZCB2OWZzX2RlbnRyeV9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3N0YXRpYyB2b2lkIHY5ZnNfZGVudHJ5X3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXN0cnVjdCB2OWZzX2RlbnRyeSAqZGVudDsKIAlzdHJ1Y3QgcDlfZmlkICp0ZW1wLCAqY3VycmVudF9maWQ7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jCmluZGV4IDU5NzgyOTguLmI3NmE0MGIgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jCisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jCkBAIC00OSwxNSArNDksOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zX2RvdHU7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9uc19kb3RsOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwotc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zX2RvdGw7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnNfZG90bDsKLQotc3RhdGljIGludAotdjlmc192ZnNfbWtub2RfZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgb21vZGUsCi0JCSAgICBkZXZfdCByZGV2KTsKIAogLyoqCiAgKiB1bml4bW9kZTJwOW1vZGUgLSBjb252ZXJ0IHVuaXggbW9kZSBiaXRzIHRvIHBsYW4gOQpAQCAtMjUxLDQxICsyNDQsNiBAQAogI2VuZGlmCiAKIC8qKgotICogdjlmc19nZXRfZnNnaWRfZm9yX2NyZWF0ZSAtIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGdpZCBmb3IgY3JlYXRpbmcgYQotICogbmV3IGZpbGUgc3lzdGVtIG9iamVjdC4gVGhpcyBjaGVja3MgdGhlIFNfSVNHSUQgdG8gZGV0ZXJtaW5lIHRoZSBvd25pbmcKLSAqIGdyb3VwIG9mIHRoZSBuZXcgZmlsZSBzeXN0ZW0gb2JqZWN0LgotICovCi0KLXN0YXRpYyBnaWRfdCB2OWZzX2dldF9mc2dpZF9mb3JfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyX2lub2RlKQotewotCUJVR19PTihkaXJfaW5vZGUgPT0gTlVMTCk7Ci0KLQlpZiAoZGlyX2lub2RlLT5pX21vZGUgJiBTX0lTR0lEKSB7Ci0JCS8qIHNldF9naWQgYml0IGlzIHNldC4qLwotCQlyZXR1cm4gZGlyX2lub2RlLT5pX2dpZDsKLQl9Ci0JcmV0dXJuIGN1cnJlbnRfZnNnaWQoKTsKLX0KLQotLyoqCi0gKiB2OWZzX2RlbnRyeV9mcm9tX2Rpcl9pbm9kZSAtIGhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGRlbnRyeSBmcm9tCi0gKiBkaXIgaW5vZGUuCi0gKgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp2OWZzX2RlbnRyeV9mcm9tX2Rpcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKLQotCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JLyogRGlyZWN0b3J5IHNob3VsZCBoYXZlIG9ubHkgb25lIGVudHJ5LiAqLwotCUJVR19PTihTX0lTRElSKGlub2RlLT5pX21vZGUpICYmICFsaXN0X2lzX3Npbmd1bGFyKCZpbm9kZS0+aV9kZW50cnkpKTsKLQlkZW50cnkgPSBsaXN0X2VudHJ5KGlub2RlLT5pX2RlbnRyeS5uZXh0LCBzdHJ1Y3QgZGVudHJ5LCBkX2FsaWFzKTsKLQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JcmV0dXJuIGRlbnRyeTsKLX0KLQotLyoqCiAgKiB2OWZzX2dldF9pbm9kZSAtIGhlbHBlciBmdW5jdGlvbiB0byBzZXR1cCBhbiBpbm9kZQogICogQHNiOiBzdXBlcmJsb2NrCiAgKiBAbW9kZTogbW9kZSB0byBzZXR1cCBpbm9kZSB3aXRoCkBAIC00NTQsNyArNDEyLDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgc3RydWN0IGlub2RlICoKK3N0cnVjdCBpbm9kZSAqCiB2OWZzX2lub2RlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBwOV9maWQgKmZpZCwKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewpAQCAtNDg5LDYwICs0NDcsNiBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKgotdjlmc19pbm9kZV9kb3RsKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBwOV9maWQgKmZpZCwKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXN0cnVjdCBpbm9kZSAqcmV0ID0gTlVMTDsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9zdGF0X2RvdGwgKnN0OwotCi0Jc3QgPSBwOV9jbGllbnRfZ2V0YXR0cl9kb3RsKGZpZCwgUDlfU1RBVFNfQkFTSUMpOwotCWlmIChJU19FUlIoc3QpKQotCQlyZXR1cm4gRVJSX0NBU1Qoc3QpOwotCi0JcmV0ID0gdjlmc19nZXRfaW5vZGUoc2IsIHN0LT5zdF9tb2RlKTsKLQlpZiAoSVNfRVJSKHJldCkpIHsKLQkJZXJyID0gUFRSX0VSUihyZXQpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXY5ZnNfc3RhdDJpbm9kZV9kb3RsKHN0LCByZXQpOwotCXJldC0+aV9pbm8gPSB2OWZzX3FpZDJpbm8oJnN0LT5xaWQpOwotI2lmZGVmIENPTkZJR185UF9GU0NBQ0hFCi0Jdjlmc192Y29va2llX3NldF9xaWQocmV0LCAmc3QtPnFpZCk7Ci0Jdjlmc19jYWNoZV9pbm9kZV9nZXRfY29va2llKHJldCk7Ci0jZW5kaWYKLQllcnIgPSB2OWZzX2dldF9hY2wocmV0LCBmaWQpOwotCWlmIChlcnIpIHsKLQkJaXB1dChyZXQpOwotCQlnb3RvIGVycm9yOwotCX0KLQlrZnJlZShzdCk7Ci0JcmV0dXJuIHJldDsKLWVycm9yOgotCWtmcmVlKHN0KTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotCi0vKioKLSAqIHY5ZnNfaW5vZGVfZnJvbV9maWQgLSBIZWxwZXIgcm91dGluZSB0byBwb3B1bGF0ZSBhbiBpbm9kZSBieQotICogaXNzdWluZyBhIGF0dHJpYnV0ZSByZXF1ZXN0Ci0gKiBAdjlzZXM6IHNlc3Npb24gaW5mb3JtYXRpb24KLSAqIEBmaWQ6IGZpZCB0byBpc3N1ZSBhdHRyaWJ1dGUgcmVxdWVzdCBmb3IKLSAqIEBzYjogc3VwZXJibG9jayBvbiB3aGljaCB0byBjcmVhdGUgaW5vZGUKLSAqCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICoKLXY5ZnNfaW5vZGVfZnJvbV9maWQoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgc3RydWN0IHA5X2ZpZCAqZmlkLAotCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlpZiAodjlmc19wcm90b19kb3RsKHY5c2VzKSkKLQkJcmV0dXJuIHY5ZnNfaW5vZGVfZG90bCh2OXNlcywgZmlkLCBzYik7Ci0JZWxzZQotCQlyZXR1cm4gdjlmc19pbm9kZSh2OXNlcywgZmlkLCBzYik7Ci19Ci0KIC8qKgogICogdjlmc19yZW1vdmUgLSBoZWxwZXIgZnVuY3Rpb24gdG8gcmVtb3ZlIGZpbGVzIGFuZCBkaXJlY3RvcmllcwogICogQGRpcjogZGlyZWN0b3J5IGlub2RlIHRoYXQgaXMgYmVpbmcgZGVsZXRlZApAQCAtNjMzLDEyICs1MzcsNiBAQAogCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImlub2RlIGNyZWF0aW9uIGZhaWxlZCAlZFxuIiwgZXJyKTsKIAkJZ290byBlcnJvcjsKIAl9Ci0KLQlpZiAodjlzZXMtPmNhY2hlKQotCQlkX3NldF9kX29wKGRlbnRyeSwgJnY5ZnNfY2FjaGVkX2RlbnRyeV9vcGVyYXRpb25zKTsKLQllbHNlCi0JCWRfc2V0X2Rfb3AoZGVudHJ5LCAmdjlmc19kZW50cnlfb3BlcmF0aW9ucyk7Ci0KIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCWVyciA9IHY5ZnNfZmlkX2FkZChkZW50cnksIGZpZCk7CiAJaWYgKGVyciA8IDApCkBAIC02NTcsMTQ0ICs1NTUsNiBAQAogfQogCiAvKioKLSAqIHY5ZnNfdmZzX2NyZWF0ZV9kb3RsIC0gVkZTIGhvb2sgdG8gY3JlYXRlIGZpbGVzIGZvciA5UDIwMDAuTCBwcm90b2NvbC4KLSAqIEBkaXI6IGRpcmVjdG9yeSBpbm9kZSB0aGF0IGlzIGJlaW5nIGNyZWF0ZWQKLSAqIEBkZW50cnk6ICBkZW50cnkgdGhhdCBpcyBiZWluZyBkZWxldGVkCi0gKiBAbW9kZTogY3JlYXRlIHBlcm1pc3Npb25zCi0gKiBAbmQ6IHBhdGggaW5mb3JtYXRpb24KLSAqCi0gKi8KLQotc3RhdGljIGludAotdjlmc192ZnNfY3JlYXRlX2RvdGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG9tb2RlLAotCQlzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlpbnQgZXJyID0gMDsKLQljaGFyICpuYW1lID0gTlVMTDsKLQlnaWRfdCBnaWQ7Ci0JaW50IGZsYWdzOwotCW1vZGVfdCBtb2RlOwotCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkID0gTlVMTDsKLQlzdHJ1Y3QgcDlfZmlkICpkZmlkLCAqb2ZpZDsKLQlzdHJ1Y3QgZmlsZSAqZmlscDsKLQlzdHJ1Y3QgcDlfcWlkIHFpZDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7Ci0KLQl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGlyKTsKLQlpZiAobmQgJiYgbmQtPmZsYWdzICYgTE9PS1VQX09QRU4pCi0JCWZsYWdzID0gbmQtPmludGVudC5vcGVuLmZsYWdzIC0gMTsKLQllbHNlIHsKLQkJLyoKLQkJICogY3JlYXRlIGNhbGwgd2l0aG91dCBMT09LVVBfT1BFTiBpcyBkdWUKLQkJICogdG8gbWtub2Qgb2YgcmVndWxhciBmaWxlcy4gU28gdXNlIG1rbm9kCi0JCSAqIG9wZXJhdGlvbi4KLQkJICovCi0JCXJldHVybiB2OWZzX3Zmc19ta25vZF9kb3RsKGRpciwgZGVudHJ5LCBvbW9kZSwgMCk7Ci0JfQotCi0JbmFtZSA9IChjaGFyICopIGRlbnRyeS0+ZF9uYW1lLm5hbWU7Ci0JUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJ2OWZzX3Zmc19jcmVhdGVfZG90bDogbmFtZTolcyBmbGFnczoweCV4ICIKLQkJCSJtb2RlOjB4JXhcbiIsIG5hbWUsIGZsYWdzLCBvbW9kZSk7Ci0KLQlkZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeS0+ZF9wYXJlbnQpOwotCWlmIChJU19FUlIoZGZpZCkpIHsKLQkJZXJyID0gUFRSX0VSUihkZmlkKTsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJmaWQgbG9va3VwIGZhaWxlZCAlZFxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBjbG9uZSBhIGZpZCB0byB1c2UgZm9yIGNyZWF0aW9uICovCi0Jb2ZpZCA9IHA5X2NsaWVudF93YWxrKGRmaWQsIDAsIE5VTEwsIDEpOwotCWlmIChJU19FUlIob2ZpZCkpIHsKLQkJZXJyID0gUFRSX0VSUihvZmlkKTsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJwOV9jbGllbnRfd2FsayBmYWlsZWQgJWRcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZ2lkID0gdjlmc19nZXRfZnNnaWRfZm9yX2NyZWF0ZShkaXIpOwotCi0JbW9kZSA9IG9tb2RlOwotCS8qIFVwZGF0ZSBtb2RlIGJhc2VkIG9uIEFDTCB2YWx1ZSAqLwotCWVyciA9IHY5ZnNfYWNsX21vZGUoZGlyLCAmbW9kZSwgJmRhY2wsICZwYWNsKTsKLQlpZiAoZXJyKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLAotCQkJICAgIkZhaWxlZCB0byBnZXQgYWNsIHZhbHVlcyBpbiBjcmVhdCAlZFxuIiwgZXJyKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JZXJyID0gcDlfY2xpZW50X2NyZWF0ZV9kb3RsKG9maWQsIG5hbWUsIGZsYWdzLCBtb2RlLCBnaWQsICZxaWQpOwotCWlmIChlcnIgPCAwKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLAotCQkJCSJwOV9jbGllbnRfb3Blbl9kb3RsIGZhaWxlZCBpbiBjcmVhdCAlZFxuIiwKLQkJCQllcnIpOwotCQlnb3RvIGVycm9yOwotCX0KLQkvKiBpbnN0YW50aWF0ZSBpbm9kZSBhbmQgYXNzaWduIHRoZSB1bm9wZW5lZCBmaWQgdG8gdGhlIGRlbnRyeSAqLwotCWlmICh2OXNlcy0+Y2FjaGUgPT0gQ0FDSEVfTE9PU0UgfHwgdjlzZXMtPmNhY2hlID09IENBQ0hFX0ZTQ0FDSEUgfHwKLQkgICAgKG5kICYmIG5kLT5mbGFncyAmIExPT0tVUF9PUEVOKSkgewotCQlmaWQgPSBwOV9jbGllbnRfd2FsayhkZmlkLCAxLCAmbmFtZSwgMSk7Ci0JCWlmIChJU19FUlIoZmlkKSkgewotCQkJZXJyID0gUFRSX0VSUihmaWQpOwotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJwOV9jbGllbnRfd2FsayBmYWlsZWQgJWRcbiIsCi0JCQkJZXJyKTsKLQkJCWZpZCA9IE5VTEw7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJaW5vZGUgPSB2OWZzX2lub2RlX2Zyb21fZmlkKHY5c2VzLCBmaWQsIGRpci0+aV9zYik7Ci0JCWlmIChJU19FUlIoaW5vZGUpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKLQkJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiaW5vZGUgY3JlYXRpb24gZmFpbGVkICVkXG4iLAotCQkJCWVycik7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCWRfc2V0X2Rfb3AoZGVudHJ5LCAmdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnMpOwotCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCQllcnIgPSB2OWZzX2ZpZF9hZGQoZGVudHJ5LCBmaWQpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXJyb3I7Ci0JCS8qIFRoZSBmaWQgd291bGQgZ2V0IGNsdW5rZWQgdmlhIGEgZHB1dCAqLwotCQlmaWQgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIE5vdCBpbiBjYWNoZWQgbW9kZS4gTm8gbmVlZCB0byBwb3B1bGF0ZQotCQkgKiBpbm9kZSB3aXRoIHN0YXQuIFdlIG5lZWQgdG8gZ2V0IGFuIGlub2RlCi0JCSAqIHNvIHRoYXQgd2UgY2FuIHNldCB0aGUgYWNsIHdpdGggZGVudHJ5Ci0JCSAqLwotCQlpbm9kZSA9IHY5ZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgbW9kZSk7Ci0JCWlmIChJU19FUlIoaW5vZGUpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJZF9zZXRfZF9vcChkZW50cnksICZ2OWZzX2RlbnRyeV9vcGVyYXRpb25zKTsKLQkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQl9Ci0JLyogTm93IHNldCB0aGUgQUNMIGJhc2VkIG9uIHRoZSBkZWZhdWx0IHZhbHVlICovCi0Jdjlmc19zZXRfY3JlYXRlX2FjbChkZW50cnksIGRhY2wsIHBhY2wpOwotCi0JLyogaWYgd2UgYXJlIG9wZW5pbmcgYSBmaWxlLCBhc3NpZ24gdGhlIG9wZW4gZmlkIHRvIHRoZSBmaWxlICovCi0JaWYgKG5kICYmIG5kLT5mbGFncyAmIExPT0tVUF9PUEVOKSB7Ci0JCWZpbHAgPSBsb29rdXBfaW5zdGFudGlhdGVfZmlscChuZCwgZGVudHJ5LCBnZW5lcmljX2ZpbGVfb3Blbik7Ci0JCWlmIChJU19FUlIoZmlscCkpIHsKLQkJCXA5X2NsaWVudF9jbHVuayhvZmlkKTsKLQkJCXJldHVybiBQVFJfRVJSKGZpbHApOwotCQl9Ci0JCWZpbHAtPnByaXZhdGVfZGF0YSA9IG9maWQ7Ci0JfSBlbHNlCi0JCXA5X2NsaWVudF9jbHVuayhvZmlkKTsKLQotCXJldHVybiAwOwotCi1lcnJvcjoKLQlpZiAob2ZpZCkKLQkJcDlfY2xpZW50X2NsdW5rKG9maWQpOwotCWlmIChmaWQpCi0JCXA5X2NsaWVudF9jbHVuayhmaWQpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qKgogICogdjlmc192ZnNfY3JlYXRlIC0gVkZTIGhvb2sgdG8gY3JlYXRlIGZpbGVzCiAgKiBAZGlyOiBkaXJlY3RvcnkgaW5vZGUgdGhhdCBpcyBiZWluZyBjcmVhdGVkCiAgKiBAZGVudHJ5OiAgZGVudHJ5IHRoYXQgaXMgYmVpbmcgZGVsZXRlZApAQCAtODg0LDEwNyArNjQ0LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0KLS8qKgotICogdjlmc192ZnNfbWtkaXJfZG90bCAtIFZGUyBta2RpciBob29rIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeQotICogQGRpcjogIGlub2RlIHRoYXQgaXMgYmVpbmcgdW5saW5rZWQKLSAqIEBkZW50cnk6IGRlbnRyeSB0aGF0IGlzIGJlaW5nIHVubGlua2VkCi0gKiBAbW9kZTogbW9kZSBmb3IgbmV3IGRpcmVjdG9yeQotICoKLSAqLwotCi1zdGF0aWMgaW50IHY5ZnNfdmZzX21rZGlyX2RvdGwoc3RydWN0IGlub2RlICpkaXIsCi0JCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgb21vZGUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwotCXN0cnVjdCBwOV9maWQgKmZpZCA9IE5VTEwsICpkZmlkID0gTlVMTDsKLQlnaWRfdCBnaWQ7Ci0JY2hhciAqbmFtZTsKLQltb2RlX3QgbW9kZTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBwOV9xaWQgcWlkOwotCXN0cnVjdCBkZW50cnkgKmRpcl9kZW50cnk7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqZGFjbCA9IE5VTEwsICpwYWNsID0gTlVMTDsKLQotCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAibmFtZSAlc1xuIiwgZGVudHJ5LT5kX25hbWUubmFtZSk7Ci0JZXJyID0gMDsKLQl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGlyKTsKLQotCW9tb2RlIHw9IFNfSUZESVI7Ci0JaWYgKGRpci0+aV9tb2RlICYgU19JU0dJRCkKLQkJb21vZGUgfD0gU19JU0dJRDsKLQotCWRpcl9kZW50cnkgPSB2OWZzX2RlbnRyeV9mcm9tX2Rpcl9pbm9kZShkaXIpOwotCWRmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGlyX2RlbnRyeSk7Ci0JaWYgKElTX0VSUihkZmlkKSkgewotCQllcnIgPSBQVFJfRVJSKGRmaWQpOwotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImZpZCBsb29rdXAgZmFpbGVkICVkXG4iLCBlcnIpOwotCQlkZmlkID0gTlVMTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlnaWQgPSB2OWZzX2dldF9mc2dpZF9mb3JfY3JlYXRlKGRpcik7Ci0JbW9kZSA9IG9tb2RlOwotCS8qIFVwZGF0ZSBtb2RlIGJhc2VkIG9uIEFDTCB2YWx1ZSAqLwotCWVyciA9IHY5ZnNfYWNsX21vZGUoZGlyLCAmbW9kZSwgJmRhY2wsICZwYWNsKTsKLQlpZiAoZXJyKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLAotCQkJICAgIkZhaWxlZCB0byBnZXQgYWNsIHZhbHVlcyBpbiBta2RpciAlZFxuIiwgZXJyKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JbmFtZSA9IChjaGFyICopIGRlbnRyeS0+ZF9uYW1lLm5hbWU7Ci0JZXJyID0gcDlfY2xpZW50X21rZGlyX2RvdGwoZGZpZCwgbmFtZSwgbW9kZSwgZ2lkLCAmcWlkKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJvcjsKLQotCS8qIGluc3RhbnRpYXRlIGlub2RlIGFuZCBhc3NpZ24gdGhlIHVub3BlbmVkIGZpZCB0byB0aGUgZGVudHJ5ICovCi0JaWYgKHY5c2VzLT5jYWNoZSA9PSBDQUNIRV9MT09TRSB8fCB2OXNlcy0+Y2FjaGUgPT0gQ0FDSEVfRlNDQUNIRSkgewotCQlmaWQgPSBwOV9jbGllbnRfd2FsayhkZmlkLCAxLCAmbmFtZSwgMSk7Ci0JCWlmIChJU19FUlIoZmlkKSkgewotCQkJZXJyID0gUFRSX0VSUihmaWQpOwotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJwOV9jbGllbnRfd2FsayBmYWlsZWQgJWRcbiIsCi0JCQkJZXJyKTsKLQkJCWZpZCA9IE5VTEw7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJaW5vZGUgPSB2OWZzX2lub2RlX2Zyb21fZmlkKHY5c2VzLCBmaWQsIGRpci0+aV9zYik7Ci0JCWlmIChJU19FUlIoaW5vZGUpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKLQkJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiaW5vZGUgY3JlYXRpb24gZmFpbGVkICVkXG4iLAotCQkJCWVycik7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCWRfc2V0X2Rfb3AoZGVudHJ5LCAmdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnMpOwotCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCQllcnIgPSB2OWZzX2ZpZF9hZGQoZGVudHJ5LCBmaWQpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXJyb3I7Ci0JCWZpZCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogTm90IGluIGNhY2hlZCBtb2RlLiBObyBuZWVkIHRvIHBvcHVsYXRlCi0JCSAqIGlub2RlIHdpdGggc3RhdC4gV2UgbmVlZCB0byBnZXQgYW4gaW5vZGUKLQkJICogc28gdGhhdCB3ZSBjYW4gc2V0IHRoZSBhY2wgd2l0aCBkZW50cnkKLQkJICovCi0JCWlub2RlID0gdjlmc19nZXRfaW5vZGUoZGlyLT5pX3NiLCBtb2RlKTsKLQkJaWYgKElTX0VSUihpbm9kZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCQlkX3NldF9kX29wKGRlbnRyeSwgJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnMpOwotCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCX0KLQkvKiBOb3cgc2V0IHRoZSBBQ0wgYmFzZWQgb24gdGhlIGRlZmF1bHQgdmFsdWUgKi8KLQl2OWZzX3NldF9jcmVhdGVfYWNsKGRlbnRyeSwgZGFjbCwgcGFjbCk7Ci0KLWVycm9yOgotCWlmIChmaWQpCi0JCXA5X2NsaWVudF9jbHVuayhmaWQpOwotCXJldHVybiBlcnI7Ci19Ci0KIC8qKgogICogdjlmc192ZnNfbG9va3VwIC0gVkZTIGxvb2t1cCBob29rIHRvICJ3YWxrIiB0byBhIG5ldyBpbm9kZQogICogQGRpcjogIGlub2RlIHRoYXQgaXMgYmVpbmcgd2Fsa2VkIGZyb20KQEAgLTk5Myw3ICs2NTIsNyBAQAogICoKICAqLwogCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqdjlmc192ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCitzdHJ1Y3QgZGVudHJ5ICp2OWZzX3Zmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCQkgICAgICBzdHJ1Y3QgbmFtZWlkYXRhICpuYW1laWRhdGEpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKQEAgLTEwNDAsMTEgKzY5OSw2IEBACiAJCWdvdG8gZXJyb3JfaXB1dDsKIAogaW5zdF9vdXQ6Ci0JaWYgKHY5c2VzLT5jYWNoZSkKLQkJZF9zZXRfZF9vcChkZW50cnksICZ2OWZzX2NhY2hlZF9kZW50cnlfb3BlcmF0aW9ucyk7Ci0JZWxzZQotCQlkX3NldF9kX29wKGRlbnRyeSwgJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnMpOwotCiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAJcmV0dXJuIE5VTEw7CiAKQEAgLTEwNjMsNyArNzE3LDcgQEAKICAqCiAgKi8KIAotc3RhdGljIGludCB2OWZzX3Zmc191bmxpbmsoc3RydWN0IGlub2RlICppLCBzdHJ1Y3QgZGVudHJ5ICpkKQoraW50IHY5ZnNfdmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBkZW50cnkgKmQpCiB7CiAJcmV0dXJuIHY5ZnNfcmVtb3ZlKGksIGQsIDApOwogfQpAQCAtMTA3NSw3ICs3MjksNyBAQAogICoKICAqLwogCi1zdGF0aWMgaW50IHY5ZnNfdmZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqaSwgc3RydWN0IGRlbnRyeSAqZCkKK2ludCB2OWZzX3Zmc19ybWRpcihzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBkZW50cnkgKmQpCiB7CiAJcmV0dXJuIHY5ZnNfcmVtb3ZlKGksIGQsIDEpOwogfQpAQCAtMTA4OSw3ICs3NDMsNyBAQAogICoKICAqLwogCi1zdGF0aWMgaW50CitpbnQKIHY5ZnNfdmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJCXN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKQEAgLTExOTYsNDIgKzg1MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXY5ZnNfdmZzX2dldGF0dHJfZG90bChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkgc3RydWN0IGtzdGF0ICpzdGF0KQotewotCWludCBlcnI7Ci0Jc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKLQlzdHJ1Y3QgcDlfZmlkICpmaWQ7Ci0Jc3RydWN0IHA5X3N0YXRfZG90bCAqc3Q7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImRlbnRyeTogJXBcbiIsIGRlbnRyeSk7Ci0JZXJyID0gLUVQRVJNOwotCXY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkZW50cnktPmRfaW5vZGUpOwotCWlmICh2OXNlcy0+Y2FjaGUgPT0gQ0FDSEVfTE9PU0UgfHwgdjlzZXMtPmNhY2hlID09IENBQ0hFX0ZTQ0FDSEUpCi0JCXJldHVybiBzaW1wbGVfZ2V0YXR0cihtbnQsIGRlbnRyeSwgc3RhdCk7Ci0KLQlmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5KTsKLQlpZiAoSVNfRVJSKGZpZCkpCi0JCXJldHVybiBQVFJfRVJSKGZpZCk7Ci0KLQkvKiBBc2sgZm9yIGFsbCB0aGUgZmllbGRzIGluIHN0YXQgc3RydWN0dXJlLiBTZXJ2ZXIgd2lsbCByZXR1cm4KLQkgKiB3aGF0ZXZlciBpdCBzdXBwb3J0cwotCSAqLwotCi0Jc3QgPSBwOV9jbGllbnRfZ2V0YXR0cl9kb3RsKGZpZCwgUDlfU1RBVFNfQUxMKTsKLQlpZiAoSVNfRVJSKHN0KSkKLQkJcmV0dXJuIFBUUl9FUlIoc3QpOwotCi0Jdjlmc19zdGF0Mmlub2RlX2RvdGwoc3QsIGRlbnRyeS0+ZF9pbm9kZSk7Ci0JZ2VuZXJpY19maWxsYXR0cihkZW50cnktPmRfaW5vZGUsIHN0YXQpOwotCS8qIENoYW5nZSBibG9jayBzaXplIHRvIHdoYXQgdGhlIHNlcnZlciByZXR1cm5lZCAqLwotCXN0YXQtPmJsa3NpemUgPSBzdC0+c3RfYmxrc2l6ZTsKLQotCWtmcmVlKHN0KTsKLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiB2OWZzX3Zmc19zZXRhdHRyIC0gc2V0IGZpbGUgbWV0YWRhdGEKICAqIEBkZW50cnk6IGZpbGUgd2hvc2UgbWV0YWRhdGEgdG8gc2V0CkBAIC0xMjkxLDY0ICs5MDksNiBAQAogfQogCiAvKioKLSAqIHY5ZnNfdmZzX3NldGF0dHJfZG90bCAtIHNldCBmaWxlIG1ldGFkYXRhCi0gKiBAZGVudHJ5OiBmaWxlIHdob3NlIG1ldGFkYXRhIHRvIHNldAotICogQGlhdHRyOiBtZXRhZGF0YSBhc3NpZ25tZW50IHN0cnVjdHVyZQotICoKLSAqLwotCi1pbnQgdjlmc192ZnNfc2V0YXR0cl9kb3RsKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cikKLXsKLQlpbnQgcmV0dmFsOwotCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkOwotCXN0cnVjdCBwOV9pYXR0cl9kb3RsIHA5YXR0cjsKLQotCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiXG4iKTsKLQotCXJldHZhbCA9IGlub2RlX2NoYW5nZV9vayhkZW50cnktPmRfaW5vZGUsIGlhdHRyKTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JcDlhdHRyLnZhbGlkID0gaWF0dHItPmlhX3ZhbGlkOwotCXA5YXR0ci5tb2RlID0gaWF0dHItPmlhX21vZGU7Ci0JcDlhdHRyLnVpZCA9IGlhdHRyLT5pYV91aWQ7Ci0JcDlhdHRyLmdpZCA9IGlhdHRyLT5pYV9naWQ7Ci0JcDlhdHRyLnNpemUgPSBpYXR0ci0+aWFfc2l6ZTsKLQlwOWF0dHIuYXRpbWVfc2VjID0gaWF0dHItPmlhX2F0aW1lLnR2X3NlYzsKLQlwOWF0dHIuYXRpbWVfbnNlYyA9IGlhdHRyLT5pYV9hdGltZS50dl9uc2VjOwotCXA5YXR0ci5tdGltZV9zZWMgPSBpYXR0ci0+aWFfbXRpbWUudHZfc2VjOwotCXA5YXR0ci5tdGltZV9uc2VjID0gaWF0dHItPmlhX210aW1lLnR2X25zZWM7Ci0KLQlyZXR2YWwgPSAtRVBFUk07Ci0JdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeSk7Ci0JaWYgKElTX0VSUihmaWQpKQotCQlyZXR1cm4gUFRSX0VSUihmaWQpOwotCi0JcmV0dmFsID0gcDlfY2xpZW50X3NldGF0dHIoZmlkLCAmcDlhdHRyKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCWlmICgoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgotCSAgICBpYXR0ci0+aWFfc2l6ZSAhPSBpX3NpemVfcmVhZChkZW50cnktPmRfaW5vZGUpKSB7Ci0JCXJldHZhbCA9IHZtdHJ1bmNhdGUoZGVudHJ5LT5kX2lub2RlLCBpYXR0ci0+aWFfc2l6ZSk7Ci0JCWlmIChyZXR2YWwpCi0JCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCXNldGF0dHJfY29weShkZW50cnktPmRfaW5vZGUsIGlhdHRyKTsKLQltYXJrX2lub2RlX2RpcnR5KGRlbnRyeS0+ZF9pbm9kZSk7Ci0JaWYgKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkgewotCQkvKiBXZSBhbHNvIHdhbnQgdG8gdXBkYXRlIEFDTCB3aGVuIHdlIHVwZGF0ZSBtb2RlIGJpdHMgKi8KLQkJcmV0dmFsID0gdjlmc19hY2xfY2htb2QoZGVudHJ5KTsKLQkJaWYgKHJldHZhbCA8IDApCi0JCQlyZXR1cm4gcmV0dmFsOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCiAgKiB2OWZzX3N0YXQyaW5vZGUgLSBwb3B1bGF0ZSBhbiBpbm9kZSBzdHJ1Y3R1cmUgd2l0aCBtaXN0YXQgaW5mbwogICogQHN0YXQ6IFBsYW4gOSBtZXRhZGF0YSAobWlzdGF0KSBzdHJ1Y3R1cmUKICAqIEBpbm9kZTogaW5vZGUgdG8gcG9wdWxhdGUKQEAgLTE0MjYsNzcgKzk4Niw2IEBACiB9CiAKIC8qKgotICogdjlmc19zdGF0Mmlub2RlX2RvdGwgLSBwb3B1bGF0ZSBhbiBpbm9kZSBzdHJ1Y3R1cmUgd2l0aCBzdGF0IGluZm8KLSAqIEBzdGF0OiBzdGF0IHN0cnVjdHVyZQotICogQGlub2RlOiBpbm9kZSB0byBwb3B1bGF0ZQotICogQHNiOiBzdXBlcmJsb2NrIG9mIGZpbGVzeXN0ZW0KLSAqCi0gKi8KLQotdm9pZAotdjlmc19zdGF0Mmlub2RlX2RvdGwoc3RydWN0IHA5X3N0YXRfZG90bCAqc3RhdCwgc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQotCWlmICgoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19CQVNJQykgPT0gUDlfU1RBVFNfQkFTSUMpIHsKLQkJaW5vZGUtPmlfYXRpbWUudHZfc2VjID0gc3RhdC0+c3RfYXRpbWVfc2VjOwotCQlpbm9kZS0+aV9hdGltZS50dl9uc2VjID0gc3RhdC0+c3RfYXRpbWVfbnNlYzsKLQkJaW5vZGUtPmlfbXRpbWUudHZfc2VjID0gc3RhdC0+c3RfbXRpbWVfc2VjOwotCQlpbm9kZS0+aV9tdGltZS50dl9uc2VjID0gc3RhdC0+c3RfbXRpbWVfbnNlYzsKLQkJaW5vZGUtPmlfY3RpbWUudHZfc2VjID0gc3RhdC0+c3RfY3RpbWVfc2VjOwotCQlpbm9kZS0+aV9jdGltZS50dl9uc2VjID0gc3RhdC0+c3RfY3RpbWVfbnNlYzsKLQkJaW5vZGUtPmlfdWlkID0gc3RhdC0+c3RfdWlkOwotCQlpbm9kZS0+aV9naWQgPSBzdGF0LT5zdF9naWQ7Ci0JCWlub2RlLT5pX25saW5rID0gc3RhdC0+c3Rfbmxpbms7Ci0JCWlub2RlLT5pX21vZGUgPSBzdGF0LT5zdF9tb2RlOwotCQlpbm9kZS0+aV9yZGV2ID0gbmV3X2RlY29kZV9kZXYoc3RhdC0+c3RfcmRldik7Ci0KLQkJaWYgKChTX0lTQkxLKGlub2RlLT5pX21vZGUpKSB8fCAoU19JU0NIUihpbm9kZS0+aV9tb2RlKSkpCi0JCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsIGlub2RlLT5pX3JkZXYpOwotCi0JCWlfc2l6ZV93cml0ZShpbm9kZSwgc3RhdC0+c3Rfc2l6ZSk7Ci0JCWlub2RlLT5pX2Jsb2NrcyA9IHN0YXQtPnN0X2Jsb2NrczsKLQl9IGVsc2UgewotCQlpZiAoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19BVElNRSkgewotCQkJaW5vZGUtPmlfYXRpbWUudHZfc2VjID0gc3RhdC0+c3RfYXRpbWVfc2VjOwotCQkJaW5vZGUtPmlfYXRpbWUudHZfbnNlYyA9IHN0YXQtPnN0X2F0aW1lX25zZWM7Ci0JCX0KLQkJaWYgKHN0YXQtPnN0X3Jlc3VsdF9tYXNrICYgUDlfU1RBVFNfTVRJTUUpIHsKLQkJCWlub2RlLT5pX210aW1lLnR2X3NlYyA9IHN0YXQtPnN0X210aW1lX3NlYzsKLQkJCWlub2RlLT5pX210aW1lLnR2X25zZWMgPSBzdGF0LT5zdF9tdGltZV9uc2VjOwotCQl9Ci0JCWlmIChzdGF0LT5zdF9yZXN1bHRfbWFzayAmIFA5X1NUQVRTX0NUSU1FKSB7Ci0JCQlpbm9kZS0+aV9jdGltZS50dl9zZWMgPSBzdGF0LT5zdF9jdGltZV9zZWM7Ci0JCQlpbm9kZS0+aV9jdGltZS50dl9uc2VjID0gc3RhdC0+c3RfY3RpbWVfbnNlYzsKLQkJfQotCQlpZiAoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19VSUQpCi0JCQlpbm9kZS0+aV91aWQgPSBzdGF0LT5zdF91aWQ7Ci0JCWlmIChzdGF0LT5zdF9yZXN1bHRfbWFzayAmIFA5X1NUQVRTX0dJRCkKLQkJCWlub2RlLT5pX2dpZCA9IHN0YXQtPnN0X2dpZDsKLQkJaWYgKHN0YXQtPnN0X3Jlc3VsdF9tYXNrICYgUDlfU1RBVFNfTkxJTkspCi0JCQlpbm9kZS0+aV9ubGluayA9IHN0YXQtPnN0X25saW5rOwotCQlpZiAoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19NT0RFKSB7Ci0JCQlpbm9kZS0+aV9tb2RlID0gc3RhdC0+c3RfbW9kZTsKLQkJCWlmICgoU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkgfHwKLQkJCQkJCShTX0lTQ0hSKGlub2RlLT5pX21vZGUpKSkKLQkJCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsCi0JCQkJCQkJCWlub2RlLT5pX3JkZXYpOwotCQl9Ci0JCWlmIChzdGF0LT5zdF9yZXN1bHRfbWFzayAmIFA5X1NUQVRTX1JERVYpCi0JCQlpbm9kZS0+aV9yZGV2ID0gbmV3X2RlY29kZV9kZXYoc3RhdC0+c3RfcmRldik7Ci0JCWlmIChzdGF0LT5zdF9yZXN1bHRfbWFzayAmIFA5X1NUQVRTX1NJWkUpCi0JCQlpX3NpemVfd3JpdGUoaW5vZGUsIHN0YXQtPnN0X3NpemUpOwotCQlpZiAoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19CTE9DS1MpCi0JCQlpbm9kZS0+aV9ibG9ja3MgPSBzdGF0LT5zdF9ibG9ja3M7Ci0JfQotCWlmIChzdGF0LT5zdF9yZXN1bHRfbWFzayAmIFA5X1NUQVRTX0dFTikKLQkJCWlub2RlLT5pX2dlbmVyYXRpb24gPSBzdGF0LT5zdF9nZW47Ci0KLQkvKiBDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBQOV9TVEFUU19CVElNRSBhbmQgUDlfU1RBVFNfREFUQV9WRVJTSU9OCi0JICogYmVjYXVzZSB0aGUgaW5vZGUgc3RydWN0dXJlIGRvZXMgbm90IGhhdmUgZmllbGRzIGZvciB0aGVtLgotCSAqLwotfQotCi0vKioKICAqIHY5ZnNfcWlkMmlubyAtIGNvbnZlcnQgcWlkIGludG8gaW5vZGUgbnVtYmVyCiAgKiBAcWlkOiBxaWQgdG8gaGFzaAogICoKQEAgLTE2MDIsNyArMTA5MSw3IEBACiAgKgogICovCiAKLXN0YXRpYyB2b2lkCit2b2lkCiB2OWZzX3Zmc19wdXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kLCB2b2lkICpwKQogewogCWNoYXIgKnMgPSBuZF9nZXRfbGluayhuZCk7CkBAIC0xNjQ2LDk0ICsxMTM1LDYgQEAKIH0KIAogLyoqCi0gKiB2OWZzX3Zmc19zeW1saW5rX2RvdGwgLSBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHN5bWxpbmtzCi0gKiBAZGlyOiBkaXJlY3RvcnkgaW5vZGUgY29udGFpbmluZyBzeW1saW5rCi0gKiBAZGVudHJ5OiBkZW50cnkgZm9yIHN5bWxpbmsKLSAqIEBzeW1uYW1lOiBzeW1saW5rIGRhdGEKLSAqCi0gKiBTZWUgQWxzbzogOVAyMDAwLkwgUkZDIGZvciBtb3JlIGluZm9ybWF0aW9uCi0gKgotICovCi0KLXN0YXRpYyBpbnQKLXY5ZnNfdmZzX3N5bWxpbmtfZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQljb25zdCBjaGFyICpzeW1uYW1lKQotewotCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7Ci0Jc3RydWN0IHA5X2ZpZCAqZGZpZDsKLQlzdHJ1Y3QgcDlfZmlkICpmaWQgPSBOVUxMOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IHA5X3FpZCBxaWQ7Ci0JY2hhciAqbmFtZTsKLQlpbnQgZXJyOwotCWdpZF90IGdpZDsKLQotCW5hbWUgPSAoY2hhciAqKSBkZW50cnktPmRfbmFtZS5uYW1lOwotCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAidjlmc192ZnNfc3ltbGlua19kb3RsIDogJWx1LCVzLCVzXG4iLAotCQkJZGlyLT5pX2lubywgbmFtZSwgc3ltbmFtZSk7Ci0JdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7Ci0KLQlkZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeS0+ZF9wYXJlbnQpOwotCWlmIChJU19FUlIoZGZpZCkpIHsKLQkJZXJyID0gUFRSX0VSUihkZmlkKTsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJmaWQgbG9va3VwIGZhaWxlZCAlZFxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlnaWQgPSB2OWZzX2dldF9mc2dpZF9mb3JfY3JlYXRlKGRpcik7Ci0KLQkvKiBTZXJ2ZXIgZG9lc24ndCBhbHRlciBmaWQgb24gVFNZTUxJTksuIEhlbmNlIG5vIG5lZWQgdG8gY2xvbmUgaXQuICovCi0JZXJyID0gcDlfY2xpZW50X3N5bWxpbmsoZGZpZCwgbmFtZSwgKGNoYXIgKilzeW1uYW1lLCBnaWQsICZxaWQpOwotCi0JaWYgKGVyciA8IDApIHsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJwOV9jbGllbnRfc3ltbGluayBmYWlsZWQgJWRcbiIsIGVycik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYgKHY5c2VzLT5jYWNoZSkgewotCQkvKiBOb3cgd2FsayBmcm9tIHRoZSBwYXJlbnQgc28gd2UgY2FuIGdldCBhbiB1bm9wZW5lZCBmaWQuICovCi0JCWZpZCA9IHA5X2NsaWVudF93YWxrKGRmaWQsIDEsICZuYW1lLCAxKTsKLQkJaWYgKElTX0VSUihmaWQpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGZpZCk7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInA5X2NsaWVudF93YWxrIGZhaWxlZCAlZFxuIiwKLQkJCQkJZXJyKTsKLQkJCWZpZCA9IE5VTEw7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJLyogaW5zdGFudGlhdGUgaW5vZGUgYW5kIGFzc2lnbiB0aGUgdW5vcGVuZWQgZmlkIHRvIGRlbnRyeSAqLwotCQlpbm9kZSA9IHY5ZnNfaW5vZGVfZnJvbV9maWQodjlzZXMsIGZpZCwgZGlyLT5pX3NiKTsKLQkJaWYgKElTX0VSUihpbm9kZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJpbm9kZSBjcmVhdGlvbiBmYWlsZWQgJWRcbiIsCi0JCQkJCWVycik7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCWRfc2V0X2Rfb3AoZGVudHJ5LCAmdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnMpOwotCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCQllcnIgPSB2OWZzX2ZpZF9hZGQoZGVudHJ5LCBmaWQpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXJyb3I7Ci0JCWZpZCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJLyogTm90IGluIGNhY2hlZCBtb2RlLiBObyBuZWVkIHRvIHBvcHVsYXRlIGlub2RlIHdpdGggc3RhdCAqLwotCQlpbm9kZSA9IHY5ZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgU19JRkxOSyk7Ci0JCWlmIChJU19FUlIoaW5vZGUpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJZF9zZXRfZF9vcChkZW50cnksICZ2OWZzX2RlbnRyeV9vcGVyYXRpb25zKTsKLQkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQl9Ci0KLWVycm9yOgotCWlmIChmaWQpCi0JCXA5X2NsaWVudF9jbHVuayhmaWQpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoqCiAgKiB2OWZzX3Zmc19zeW1saW5rIC0gaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBzeW1saW5rcwogICogQGRpcjogZGlyZWN0b3J5IGlub2RlIGNvbnRhaW5pbmcgc3ltbGluawogICogQGRlbnRyeTogZGVudHJ5IGZvciBzeW1saW5rCkBAIC0xNzkyLDc3ICsxMTkzLDYgQEAKIH0KIAogLyoqCi0gKiB2OWZzX3Zmc19saW5rX2RvdGwgLSBjcmVhdGUgYSBoYXJkbGluayBmb3IgZG90bAotICogQG9sZF9kZW50cnk6IGRlbnRyeSBmb3IgZmlsZSB0byBsaW5rIHRvCi0gKiBAZGlyOiBpbm9kZSBkZXN0aW5hdGlvbiBmb3IgbmV3IGxpbmsKLSAqIEBkZW50cnk6IGRlbnRyeSBmb3IgbGluawotICoKLSAqLwotCi1zdGF0aWMgaW50Ci12OWZzX3Zmc19saW5rX2RvdGwoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCXN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9maWQgKmRmaWQsICpvbGRmaWQ7Ci0JY2hhciAqbmFtZTsKLQlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwotCXN0cnVjdCBkZW50cnkgKmRpcl9kZW50cnk7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImRpciBpbm86ICVsdSwgb2xkX25hbWU6ICVzLCBuZXdfbmFtZTogJXNcbiIsCi0JCQlkaXItPmlfaW5vLCBvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCWRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCi0JdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7Ci0JZGlyX2RlbnRyeSA9IHY5ZnNfZGVudHJ5X2Zyb21fZGlyX2lub2RlKGRpcik7Ci0JZGZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkaXJfZGVudHJ5KTsKLQlpZiAoSVNfRVJSKGRmaWQpKQotCQlyZXR1cm4gUFRSX0VSUihkZmlkKTsKLQotCW9sZGZpZCA9IHY5ZnNfZmlkX2xvb2t1cChvbGRfZGVudHJ5KTsKLQlpZiAoSVNfRVJSKG9sZGZpZCkpCi0JCXJldHVybiBQVFJfRVJSKG9sZGZpZCk7Ci0KLQluYW1lID0gKGNoYXIgKikgZGVudHJ5LT5kX25hbWUubmFtZTsKLQotCWVyciA9IHA5X2NsaWVudF9saW5rKGRmaWQsIG9sZGZpZCwgKGNoYXIgKilkZW50cnktPmRfbmFtZS5uYW1lKTsKLQotCWlmIChlcnIgPCAwKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicDlfY2xpZW50X2xpbmsgZmFpbGVkICVkXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWlmICh2OXNlcy0+Y2FjaGUgPT0gQ0FDSEVfTE9PU0UgfHwgdjlzZXMtPmNhY2hlID09IENBQ0hFX0ZTQ0FDSEUpIHsKLQkJLyogR2V0IHRoZSBsYXRlc3Qgc3RhdCBpbmZvIGZyb20gc2VydmVyLiAqLwotCQlzdHJ1Y3QgcDlfZmlkICpmaWQ7Ci0JCXN0cnVjdCBwOV9zdGF0X2RvdGwgKnN0OwotCi0JCWZpZCA9IHY5ZnNfZmlkX2xvb2t1cChvbGRfZGVudHJ5KTsKLQkJaWYgKElTX0VSUihmaWQpKQotCQkJcmV0dXJuIFBUUl9FUlIoZmlkKTsKLQotCQlzdCA9IHA5X2NsaWVudF9nZXRhdHRyX2RvdGwoZmlkLCBQOV9TVEFUU19CQVNJQyk7Ci0JCWlmIChJU19FUlIoc3QpKQotCQkJcmV0dXJuIFBUUl9FUlIoc3QpOwotCi0JCXY5ZnNfc3RhdDJpbm9kZV9kb3RsKHN0LCBvbGRfZGVudHJ5LT5kX2lub2RlKTsKLQotCQlrZnJlZShzdCk7Ci0JfSBlbHNlIHsKLQkJLyogQ2FjaGluZyBkaXNhYmxlZC4gTm8gbmVlZCB0byBnZXQgdXB0byBkYXRlIHN0YXQgaW5mby4KLQkJICogVGhpcyBkZW50cnkgd2lsbCBiZSByZWxlYXNlZCBpbW1lZGlhdGVseS4gU28sIGp1c3QgaG9sZCB0aGUKLQkJICogaW5vZGUKLQkJICovCi0JCWlob2xkKG9sZF9kZW50cnktPmRfaW5vZGUpOwotCX0KLQotCWRfc2V0X2Rfb3AoZGVudHJ5LCBvbGRfZGVudHJ5LT5kX29wKTsKLQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgb2xkX2RlbnRyeS0+ZF9pbm9kZSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKioKICAqIHY5ZnNfdmZzX21rbm9kIC0gY3JlYXRlIGEgc3BlY2lhbCBmaWxlCiAgKiBAZGlyOiBpbm9kZSBkZXN0aW5hdGlvbiBmb3IgbmV3IGxpbmsKICAqIEBkZW50cnk6IGRlbnRyeSBmb3IgZmlsZQpAQCAtMTkwNywxNjAgKzEyMzcsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLS8qKgotICogdjlmc192ZnNfbWtub2RfZG90bCAtIGNyZWF0ZSBhIHNwZWNpYWwgZmlsZQotICogQGRpcjogaW5vZGUgZGVzdGluYXRpb24gZm9yIG5ldyBsaW5rCi0gKiBAZGVudHJ5OiBkZW50cnkgZm9yIGZpbGUKLSAqIEBtb2RlOiBtb2RlIGZvciBjcmVhdGlvbgotICogQHJkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggc3BlY2lhbCBmaWxlCi0gKgotICovCi1zdGF0aWMgaW50Ci12OWZzX3Zmc19ta25vZF9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBvbW9kZSwKLQkJZGV2X3QgcmRldikKLXsKLQlpbnQgZXJyOwotCWNoYXIgKm5hbWU7Ci0JbW9kZV90IG1vZGU7Ci0Jc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKLQlzdHJ1Y3QgcDlfZmlkICpmaWQgPSBOVUxMLCAqZGZpZCA9IE5VTEw7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQlnaWRfdCBnaWQ7Ci0Jc3RydWN0IHA5X3FpZCBxaWQ7Ci0Jc3RydWN0IGRlbnRyeSAqZGlyX2RlbnRyeTsKLQlzdHJ1Y3QgcG9zaXhfYWNsICpkYWNsID0gTlVMTCwgKnBhY2wgPSBOVUxMOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsCi0JCSIgJWx1LCVzIG1vZGU6ICV4IE1BSk9SOiAldSBNSU5PUjogJXVcbiIsIGRpci0+aV9pbm8sCi0JCWRlbnRyeS0+ZF9uYW1lLm5hbWUsIG9tb2RlLCBNQUpPUihyZGV2KSwgTUlOT1IocmRldikpOwotCi0JaWYgKCFuZXdfdmFsaWRfZGV2KHJkZXYpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkaXIpOwotCWRpcl9kZW50cnkgPSB2OWZzX2RlbnRyeV9mcm9tX2Rpcl9pbm9kZShkaXIpOwotCWRmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGlyX2RlbnRyeSk7Ci0JaWYgKElTX0VSUihkZmlkKSkgewotCQllcnIgPSBQVFJfRVJSKGRmaWQpOwotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImZpZCBsb29rdXAgZmFpbGVkICVkXG4iLCBlcnIpOwotCQlkZmlkID0gTlVMTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlnaWQgPSB2OWZzX2dldF9mc2dpZF9mb3JfY3JlYXRlKGRpcik7Ci0JbW9kZSA9IG9tb2RlOwotCS8qIFVwZGF0ZSBtb2RlIGJhc2VkIG9uIEFDTCB2YWx1ZSAqLwotCWVyciA9IHY5ZnNfYWNsX21vZGUoZGlyLCAmbW9kZSwgJmRhY2wsICZwYWNsKTsKLQlpZiAoZXJyKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLAotCQkJICAgIkZhaWxlZCB0byBnZXQgYWNsIHZhbHVlcyBpbiBta25vZCAlZFxuIiwgZXJyKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JbmFtZSA9IChjaGFyICopIGRlbnRyeS0+ZF9uYW1lLm5hbWU7Ci0KLQllcnIgPSBwOV9jbGllbnRfbWtub2RfZG90bChkZmlkLCBuYW1lLCBtb2RlLCByZGV2LCBnaWQsICZxaWQpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm9yOwotCi0JLyogaW5zdGFudGlhdGUgaW5vZGUgYW5kIGFzc2lnbiB0aGUgdW5vcGVuZWQgZmlkIHRvIHRoZSBkZW50cnkgKi8KLQlpZiAodjlzZXMtPmNhY2hlID09IENBQ0hFX0xPT1NFIHx8IHY5c2VzLT5jYWNoZSA9PSBDQUNIRV9GU0NBQ0hFKSB7Ci0JCWZpZCA9IHA5X2NsaWVudF93YWxrKGRmaWQsIDEsICZuYW1lLCAxKTsKLQkJaWYgKElTX0VSUihmaWQpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGZpZCk7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInA5X2NsaWVudF93YWxrIGZhaWxlZCAlZFxuIiwKLQkJCQllcnIpOwotCQkJZmlkID0gTlVMTDsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQlpbm9kZSA9IHY5ZnNfaW5vZGVfZnJvbV9maWQodjlzZXMsIGZpZCwgZGlyLT5pX3NiKTsKLQkJaWYgKElTX0VSUihpbm9kZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJpbm9kZSBjcmVhdGlvbiBmYWlsZWQgJWRcbiIsCi0JCQkJZXJyKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJZF9zZXRfZF9vcChkZW50cnksICZ2OWZzX2NhY2hlZF9kZW50cnlfb3BlcmF0aW9ucyk7Ci0JCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JCWVyciA9IHY5ZnNfZmlkX2FkZChkZW50cnksIGZpZCk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBlcnJvcjsKLQkJZmlkID0gTlVMTDsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBOb3QgaW4gY2FjaGVkIG1vZGUuIE5vIG5lZWQgdG8gcG9wdWxhdGUgaW5vZGUgd2l0aCBzdGF0LgotCQkgKiBzb2NrZXQgc3lzY2FsbCByZXR1cm5zIGEgZmQsIHNvIHdlIG5lZWQgaW5zdGFudGlhdGUKLQkJICovCi0JCWlub2RlID0gdjlmc19nZXRfaW5vZGUoZGlyLT5pX3NiLCBtb2RlKTsKLQkJaWYgKElTX0VSUihpbm9kZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCQlkX3NldF9kX29wKGRlbnRyeSwgJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnMpOwotCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCX0KLQkvKiBOb3cgc2V0IHRoZSBBQ0wgYmFzZWQgb24gdGhlIGRlZmF1bHQgdmFsdWUgKi8KLQl2OWZzX3NldF9jcmVhdGVfYWNsKGRlbnRyeSwgZGFjbCwgcGFjbCk7Ci1lcnJvcjoKLQlpZiAoZmlkKQotCQlwOV9jbGllbnRfY2x1bmsoZmlkKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50Ci12OWZzX3Zmc19yZWFkbGlua19kb3RsKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKQotewotCWludCByZXR2YWw7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkOwotCWNoYXIgKnRhcmdldCA9IE5VTEw7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiAlc1xuIiwgZGVudHJ5LT5kX25hbWUubmFtZSk7Ci0JcmV0dmFsID0gLUVQRVJNOwotCWZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkZW50cnkpOwotCWlmIChJU19FUlIoZmlkKSkKLQkJcmV0dXJuIFBUUl9FUlIoZmlkKTsKLQotCXJldHZhbCA9IHA5X2NsaWVudF9yZWFkbGluayhmaWQsICZ0YXJnZXQpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCi0Jc3RybmNweShidWZmZXIsIHRhcmdldCwgYnVmbGVuKTsKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiVzIC0+ICVzXG4iLCBkZW50cnktPmRfbmFtZS5uYW1lLCBidWZmZXIpOwotCi0JcmV0dmFsID0gc3RybmxlbihidWZmZXIsIGJ1Zmxlbik7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoqCi0gKiB2OWZzX3Zmc19mb2xsb3dfbGlua19kb3RsIC0gZm9sbG93IGEgc3ltbGluayBwYXRoCi0gKiBAZGVudHJ5OiBkZW50cnkgZm9yIHN5bWxpbmsKLSAqIEBuZDogbmFtZWlkYXRhCi0gKgotICovCi0KLXN0YXRpYyB2b2lkICoKLXY5ZnNfdmZzX2ZvbGxvd19saW5rX2RvdGwoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlpbnQgbGVuID0gMDsKLQljaGFyICpsaW5rID0gX19nZXRuYW1lKCk7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiVzIG4iLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKLQotCWlmICghbGluaykKLQkJbGluayA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JZWxzZSB7Ci0JCWxlbiA9IHY5ZnNfdmZzX3JlYWRsaW5rX2RvdGwoZGVudHJ5LCBsaW5rLCBQQVRIX01BWCk7Ci0JCWlmIChsZW4gPCAwKSB7Ci0JCQlfX3B1dG5hbWUobGluayk7Ci0JCQlsaW5rID0gRVJSX1BUUihsZW4pOwotCQl9IGVsc2UKLQkJCWxpbmtbbWluKGxlbiwgUEFUSF9NQVgtMSldID0gMDsKLQl9Ci0JbmRfc2V0X2xpbmsobmQsIGxpbmspOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zX2RvdHUgPSB7CiAJLmNyZWF0ZSA9IHY5ZnNfdmZzX2NyZWF0ZSwKIAkubG9va3VwID0gdjlmc192ZnNfbG9va3VwLApAQCAtMjA3NSwyNSArMTI1MSw2IEBACiAJLnNldGF0dHIgPSB2OWZzX3Zmc19zZXRhdHRyLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnNfZG90bCA9IHsKLQkuY3JlYXRlID0gdjlmc192ZnNfY3JlYXRlX2RvdGwsCi0JLmxvb2t1cCA9IHY5ZnNfdmZzX2xvb2t1cCwKLQkubGluayA9IHY5ZnNfdmZzX2xpbmtfZG90bCwKLQkuc3ltbGluayA9IHY5ZnNfdmZzX3N5bWxpbmtfZG90bCwKLQkudW5saW5rID0gdjlmc192ZnNfdW5saW5rLAotCS5ta2RpciA9IHY5ZnNfdmZzX21rZGlyX2RvdGwsCi0JLnJtZGlyID0gdjlmc192ZnNfcm1kaXIsCi0JLm1rbm9kID0gdjlmc192ZnNfbWtub2RfZG90bCwKLQkucmVuYW1lID0gdjlmc192ZnNfcmVuYW1lLAotCS5nZXRhdHRyID0gdjlmc192ZnNfZ2V0YXR0cl9kb3RsLAotCS5zZXRhdHRyID0gdjlmc192ZnNfc2V0YXR0cl9kb3RsLAotCS5zZXR4YXR0ciA9IGdlbmVyaWNfc2V0eGF0dHIsCi0JLmdldHhhdHRyID0gZ2VuZXJpY19nZXR4YXR0ciwKLQkucmVtb3ZleGF0dHIgPSBnZW5lcmljX3JlbW92ZXhhdHRyLAotCS5saXN0eGF0dHIgPSB2OWZzX2xpc3R4YXR0ciwKLQkuY2hlY2tfYWNsID0gdjlmc19jaGVja19hY2wsCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkuY3JlYXRlID0gdjlmc192ZnNfY3JlYXRlLAogCS5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsCkBAIC0yMTExLDE2ICsxMjY4LDYgQEAKIAkuc2V0YXR0ciA9IHY5ZnNfdmZzX3NldGF0dHIsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19maWxlX2lub2RlX29wZXJhdGlvbnNfZG90bCA9IHsKLQkuZ2V0YXR0ciA9IHY5ZnNfdmZzX2dldGF0dHJfZG90bCwKLQkuc2V0YXR0ciA9IHY5ZnNfdmZzX3NldGF0dHJfZG90bCwKLQkuc2V0eGF0dHIgPSBnZW5lcmljX3NldHhhdHRyLAotCS5nZXR4YXR0ciA9IGdlbmVyaWNfZ2V0eGF0dHIsCi0JLnJlbW92ZXhhdHRyID0gZ2VuZXJpY19yZW1vdmV4YXR0ciwKLQkubGlzdHhhdHRyID0gdjlmc19saXN0eGF0dHIsCi0JLmNoZWNrX2FjbCA9IHY5ZnNfY2hlY2tfYWNsLAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0gewogCS5yZWFkbGluayA9IGdlbmVyaWNfcmVhZGxpbmssCiAJLmZvbGxvd19saW5rID0gdjlmc192ZnNfZm9sbG93X2xpbmssCkBAIC0yMTI5LDE0ICsxMjc2LDMgQEAKIAkuc2V0YXR0ciA9IHY5ZnNfdmZzX3NldGF0dHIsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnNfZG90bCA9IHsKLQkucmVhZGxpbmsgPSB2OWZzX3Zmc19yZWFkbGlua19kb3RsLAotCS5mb2xsb3dfbGluayA9IHY5ZnNfdmZzX2ZvbGxvd19saW5rX2RvdGwsCi0JLnB1dF9saW5rID0gdjlmc192ZnNfcHV0X2xpbmssCi0JLmdldGF0dHIgPSB2OWZzX3Zmc19nZXRhdHRyX2RvdGwsCi0JLnNldGF0dHIgPSB2OWZzX3Zmc19zZXRhdHRyX2RvdGwsCi0JLnNldHhhdHRyID0gZ2VuZXJpY19zZXR4YXR0ciwKLQkuZ2V0eGF0dHIgPSBnZW5lcmljX2dldHhhdHRyLAotCS5yZW1vdmV4YXR0ciA9IGdlbmVyaWNfcmVtb3ZleGF0dHIsCi0JLmxpc3R4YXR0ciA9IHY5ZnNfbGlzdHhhdHRyLAotfTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlM2ZmYTkKLS0tIC9kZXYvbnVsbAorKysgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jCkBAIC0wLDAgKzEsODI0IEBACisvKgorICogIGxpbnV4L2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdmZzIGlub2RlIG9wcyBmb3IgdGhlIDlQMjAwMC5MIHByb3RvY29sLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgRXJpYyBWYW4gSGVuc2JlcmdlbiA8ZXJpY3ZoQGdtYWlsLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgYnkgUm9uIE1pbm5pY2ggPHJtaW5uaWNoQGxhbmwuZ292PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG86CisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKiAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vcgorICogIEJvc3RvbiwgTUEgIDAyMTExLTEzMDEgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CisjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+CisjaW5jbHVkZSA8bmV0LzlwLzlwLmg+CisjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgorCisjaW5jbHVkZSAidjlmcy5oIgorI2luY2x1ZGUgInY5ZnNfdmZzLmgiCisjaW5jbHVkZSAiZmlkLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ4YXR0ci5oIgorI2luY2x1ZGUgImFjbC5oIgorCitzdGF0aWMgaW50Cit2OWZzX3Zmc19ta25vZF9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBvbW9kZSwKKwkJICAgIGRldl90IHJkZXYpOworCisvKioKKyAqIHY5ZnNfZ2V0X2ZzZ2lkX2Zvcl9jcmVhdGUgLSBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBnaWQgZm9yIGNyZWF0aW5nIGEKKyAqIG5ldyBmaWxlIHN5c3RlbSBvYmplY3QuIFRoaXMgY2hlY2tzIHRoZSBTX0lTR0lEIHRvIGRldGVybWluZSB0aGUgb3duaW5nCisgKiBncm91cCBvZiB0aGUgbmV3IGZpbGUgc3lzdGVtIG9iamVjdC4KKyAqLworCitzdGF0aWMgZ2lkX3Qgdjlmc19nZXRfZnNnaWRfZm9yX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSkKK3sKKwlCVUdfT04oZGlyX2lub2RlID09IE5VTEwpOworCisJaWYgKGRpcl9pbm9kZS0+aV9tb2RlICYgU19JU0dJRCkgeworCQkvKiBzZXRfZ2lkIGJpdCBpcyBzZXQuKi8KKwkJcmV0dXJuIGRpcl9pbm9kZS0+aV9naWQ7CisJfQorCXJldHVybiBjdXJyZW50X2ZzZ2lkKCk7Cit9CisKKy8qKgorICogdjlmc19kZW50cnlfZnJvbV9kaXJfaW5vZGUgLSBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBkZW50cnkgZnJvbQorICogZGlyIGlub2RlLgorICoKKyAqLworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqdjlmc19kZW50cnlfZnJvbV9kaXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCS8qIERpcmVjdG9yeSBzaG91bGQgaGF2ZSBvbmx5IG9uZSBlbnRyeS4gKi8KKwlCVUdfT04oU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJiAhbGlzdF9pc19zaW5ndWxhcigmaW5vZGUtPmlfZGVudHJ5KSk7CisJZGVudHJ5ID0gbGlzdF9lbnRyeShpbm9kZS0+aV9kZW50cnkubmV4dCwgc3RydWN0IGRlbnRyeSwgZF9hbGlhcyk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCXJldHVybiBkZW50cnk7Cit9CisKK3N0cnVjdCBpbm9kZSAqCit2OWZzX2lub2RlX2RvdGwoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgc3RydWN0IHA5X2ZpZCAqZmlkLAorCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGlub2RlICpyZXQgPSBOVUxMOworCWludCBlcnI7CisJc3RydWN0IHA5X3N0YXRfZG90bCAqc3Q7CisKKwlzdCA9IHA5X2NsaWVudF9nZXRhdHRyX2RvdGwoZmlkLCBQOV9TVEFUU19CQVNJQyk7CisJaWYgKElTX0VSUihzdCkpCisJCXJldHVybiBFUlJfQ0FTVChzdCk7CisKKwlyZXQgPSB2OWZzX2dldF9pbm9kZShzYiwgc3QtPnN0X21vZGUpOworCWlmIChJU19FUlIocmV0KSkgeworCQllcnIgPSBQVFJfRVJSKHJldCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJdjlmc19zdGF0Mmlub2RlX2RvdGwoc3QsIHJldCk7CisJcmV0LT5pX2lubyA9IHY5ZnNfcWlkMmlubygmc3QtPnFpZCk7CisjaWZkZWYgQ09ORklHXzlQX0ZTQ0FDSEUKKwl2OWZzX3Zjb29raWVfc2V0X3FpZChyZXQsICZzdC0+cWlkKTsKKwl2OWZzX2NhY2hlX2lub2RlX2dldF9jb29raWUocmV0KTsKKyNlbmRpZgorCWVyciA9IHY5ZnNfZ2V0X2FjbChyZXQsIGZpZCk7CisJaWYgKGVycikgeworCQlpcHV0KHJldCk7CisJCWdvdG8gZXJyb3I7CisJfQorCWtmcmVlKHN0KTsKKwlyZXR1cm4gcmV0OworZXJyb3I6CisJa2ZyZWUoc3QpOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKKy8qKgorICogdjlmc192ZnNfY3JlYXRlX2RvdGwgLSBWRlMgaG9vayB0byBjcmVhdGUgZmlsZXMgZm9yIDlQMjAwMC5MIHByb3RvY29sLgorICogQGRpcjogZGlyZWN0b3J5IGlub2RlIHRoYXQgaXMgYmVpbmcgY3JlYXRlZAorICogQGRlbnRyeTogIGRlbnRyeSB0aGF0IGlzIGJlaW5nIGRlbGV0ZWQKKyAqIEBtb2RlOiBjcmVhdGUgcGVybWlzc2lvbnMKKyAqIEBuZDogcGF0aCBpbmZvcm1hdGlvbgorICoKKyAqLworCitzdGF0aWMgaW50Cit2OWZzX3Zmc19jcmVhdGVfZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgb21vZGUsCisJCXN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCWludCBlcnIgPSAwOworCWNoYXIgKm5hbWUgPSBOVUxMOworCWdpZF90IGdpZDsKKwlpbnQgZmxhZ3M7CisJbW9kZV90IG1vZGU7CisJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKKwlzdHJ1Y3QgcDlfZmlkICpmaWQgPSBOVUxMOworCXN0cnVjdCBwOV9maWQgKmRmaWQsICpvZmlkOworCXN0cnVjdCBmaWxlICpmaWxwOworCXN0cnVjdCBwOV9xaWQgcWlkOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHBvc2l4X2FjbCAqcGFjbCA9IE5VTEwsICpkYWNsID0gTlVMTDsKKworCXY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkaXIpOworCWlmIChuZCAmJiBuZC0+ZmxhZ3MgJiBMT09LVVBfT1BFTikKKwkJZmxhZ3MgPSBuZC0+aW50ZW50Lm9wZW4uZmxhZ3MgLSAxOworCWVsc2UgeworCQkvKgorCQkgKiBjcmVhdGUgY2FsbCB3aXRob3V0IExPT0tVUF9PUEVOIGlzIGR1ZQorCQkgKiB0byBta25vZCBvZiByZWd1bGFyIGZpbGVzLiBTbyB1c2UgbWtub2QKKwkJICogb3BlcmF0aW9uLgorCQkgKi8KKwkJcmV0dXJuIHY5ZnNfdmZzX21rbm9kX2RvdGwoZGlyLCBkZW50cnksIG9tb2RlLCAwKTsKKwl9CisKKwluYW1lID0gKGNoYXIgKikgZGVudHJ5LT5kX25hbWUubmFtZTsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInY5ZnNfdmZzX2NyZWF0ZV9kb3RsOiBuYW1lOiVzIGZsYWdzOjB4JXggIgorCQkJIm1vZGU6MHgleFxuIiwgbmFtZSwgZmxhZ3MsIG9tb2RlKTsKKworCWRmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5LT5kX3BhcmVudCk7CisJaWYgKElTX0VSUihkZmlkKSkgeworCQllcnIgPSBQVFJfRVJSKGRmaWQpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImZpZCBsb29rdXAgZmFpbGVkICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIGNsb25lIGEgZmlkIHRvIHVzZSBmb3IgY3JlYXRpb24gKi8KKwlvZmlkID0gcDlfY2xpZW50X3dhbGsoZGZpZCwgMCwgTlVMTCwgMSk7CisJaWYgKElTX0VSUihvZmlkKSkgeworCQllcnIgPSBQVFJfRVJSKG9maWQpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInA5X2NsaWVudF93YWxrIGZhaWxlZCAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlnaWQgPSB2OWZzX2dldF9mc2dpZF9mb3JfY3JlYXRlKGRpcik7CisKKwltb2RlID0gb21vZGU7CisJLyogVXBkYXRlIG1vZGUgYmFzZWQgb24gQUNMIHZhbHVlICovCisJZXJyID0gdjlmc19hY2xfbW9kZShkaXIsICZtb2RlLCAmZGFjbCwgJnBhY2wpOworCWlmIChlcnIpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsCisJCQkgICAiRmFpbGVkIHRvIGdldCBhY2wgdmFsdWVzIGluIGNyZWF0ICVkXG4iLCBlcnIpOworCQlnb3RvIGVycm9yOworCX0KKwllcnIgPSBwOV9jbGllbnRfY3JlYXRlX2RvdGwob2ZpZCwgbmFtZSwgZmxhZ3MsIG1vZGUsIGdpZCwgJnFpZCk7CisJaWYgKGVyciA8IDApIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsCisJCQkJInA5X2NsaWVudF9vcGVuX2RvdGwgZmFpbGVkIGluIGNyZWF0ICVkXG4iLAorCQkJCWVycik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogaW5zdGFudGlhdGUgaW5vZGUgYW5kIGFzc2lnbiB0aGUgdW5vcGVuZWQgZmlkIHRvIHRoZSBkZW50cnkgKi8KKwlmaWQgPSBwOV9jbGllbnRfd2FsayhkZmlkLCAxLCAmbmFtZSwgMSk7CisJaWYgKElTX0VSUihmaWQpKSB7CisJCWVyciA9IFBUUl9FUlIoZmlkKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJwOV9jbGllbnRfd2FsayBmYWlsZWQgJWRcbiIsIGVycik7CisJCWZpZCA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCWlub2RlID0gdjlmc19pbm9kZV9mcm9tX2ZpZCh2OXNlcywgZmlkLCBkaXItPmlfc2IpOworCWlmIChJU19FUlIoaW5vZGUpKSB7CisJCWVyciA9IFBUUl9FUlIoaW5vZGUpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImlub2RlIGNyZWF0aW9uIGZhaWxlZCAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnJvcjsKKwl9CisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwllcnIgPSB2OWZzX2ZpZF9hZGQoZGVudHJ5LCBmaWQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogTm93IHNldCB0aGUgQUNMIGJhc2VkIG9uIHRoZSBkZWZhdWx0IHZhbHVlICovCisJdjlmc19zZXRfY3JlYXRlX2FjbChkZW50cnksIGRhY2wsIHBhY2wpOworCisJLyogU2luY2Ugd2UgYXJlIG9wZW5pbmcgYSBmaWxlLCBhc3NpZ24gdGhlIG9wZW4gZmlkIHRvIHRoZSBmaWxlICovCisJZmlscCA9IGxvb2t1cF9pbnN0YW50aWF0ZV9maWxwKG5kLCBkZW50cnksIGdlbmVyaWNfZmlsZV9vcGVuKTsKKwlpZiAoSVNfRVJSKGZpbHApKSB7CisJCXA5X2NsaWVudF9jbHVuayhvZmlkKTsKKwkJcmV0dXJuIFBUUl9FUlIoZmlscCk7CisJfQorCWZpbHAtPnByaXZhdGVfZGF0YSA9IG9maWQ7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWlmIChvZmlkKQorCQlwOV9jbGllbnRfY2x1bmsob2ZpZCk7CisJaWYgKGZpZCkKKwkJcDlfY2xpZW50X2NsdW5rKGZpZCk7CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiB2OWZzX3Zmc19ta2Rpcl9kb3RsIC0gVkZTIG1rZGlyIGhvb2sgdG8gY3JlYXRlIGEgZGlyZWN0b3J5CisgKiBAZGlyOiAgaW5vZGUgdGhhdCBpcyBiZWluZyB1bmxpbmtlZAorICogQGRlbnRyeTogZGVudHJ5IHRoYXQgaXMgYmVpbmcgdW5saW5rZWQKKyAqIEBtb2RlOiBtb2RlIGZvciBuZXcgZGlyZWN0b3J5CisgKgorICovCisKK3N0YXRpYyBpbnQgdjlmc192ZnNfbWtkaXJfZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBvbW9kZSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CisJc3RydWN0IHA5X2ZpZCAqZmlkID0gTlVMTCwgKmRmaWQgPSBOVUxMOworCWdpZF90IGdpZDsKKwljaGFyICpuYW1lOworCW1vZGVfdCBtb2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHA5X3FpZCBxaWQ7CisJc3RydWN0IGRlbnRyeSAqZGlyX2RlbnRyeTsKKwlzdHJ1Y3QgcG9zaXhfYWNsICpkYWNsID0gTlVMTCwgKnBhY2wgPSBOVUxMOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJuYW1lICVzXG4iLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwllcnIgPSAwOworCXY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkaXIpOworCisJb21vZGUgfD0gU19JRkRJUjsKKwlpZiAoZGlyLT5pX21vZGUgJiBTX0lTR0lEKQorCQlvbW9kZSB8PSBTX0lTR0lEOworCisJZGlyX2RlbnRyeSA9IHY5ZnNfZGVudHJ5X2Zyb21fZGlyX2lub2RlKGRpcik7CisJZGZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkaXJfZGVudHJ5KTsKKwlpZiAoSVNfRVJSKGRmaWQpKSB7CisJCWVyciA9IFBUUl9FUlIoZGZpZCk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZmlkIGxvb2t1cCBmYWlsZWQgJWRcbiIsIGVycik7CisJCWRmaWQgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCWdpZCA9IHY5ZnNfZ2V0X2ZzZ2lkX2Zvcl9jcmVhdGUoZGlyKTsKKwltb2RlID0gb21vZGU7CisJLyogVXBkYXRlIG1vZGUgYmFzZWQgb24gQUNMIHZhbHVlICovCisJZXJyID0gdjlmc19hY2xfbW9kZShkaXIsICZtb2RlLCAmZGFjbCwgJnBhY2wpOworCWlmIChlcnIpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsCisJCQkgICAiRmFpbGVkIHRvIGdldCBhY2wgdmFsdWVzIGluIG1rZGlyICVkXG4iLCBlcnIpOworCQlnb3RvIGVycm9yOworCX0KKwluYW1lID0gKGNoYXIgKikgZGVudHJ5LT5kX25hbWUubmFtZTsKKwllcnIgPSBwOV9jbGllbnRfbWtkaXJfZG90bChkZmlkLCBuYW1lLCBtb2RlLCBnaWQsICZxaWQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogaW5zdGFudGlhdGUgaW5vZGUgYW5kIGFzc2lnbiB0aGUgdW5vcGVuZWQgZmlkIHRvIHRoZSBkZW50cnkgKi8KKwlpZiAodjlzZXMtPmNhY2hlID09IENBQ0hFX0xPT1NFIHx8IHY5c2VzLT5jYWNoZSA9PSBDQUNIRV9GU0NBQ0hFKSB7CisJCWZpZCA9IHA5X2NsaWVudF93YWxrKGRmaWQsIDEsICZuYW1lLCAxKTsKKwkJaWYgKElTX0VSUihmaWQpKSB7CisJCQllcnIgPSBQVFJfRVJSKGZpZCk7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInA5X2NsaWVudF93YWxrIGZhaWxlZCAlZFxuIiwKKwkJCQllcnIpOworCQkJZmlkID0gTlVMTDsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlpbm9kZSA9IHY5ZnNfaW5vZGVfZnJvbV9maWQodjlzZXMsIGZpZCwgZGlyLT5pX3NiKTsKKwkJaWYgKElTX0VSUihpbm9kZSkpIHsKKwkJCWVyciA9IFBUUl9FUlIoaW5vZGUpOworCQkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJpbm9kZSBjcmVhdGlvbiBmYWlsZWQgJWRcbiIsCisJCQkJZXJyKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwkJZXJyID0gdjlmc19maWRfYWRkKGRlbnRyeSwgZmlkKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycm9yOworCQlmaWQgPSBOVUxMOworCX0gZWxzZSB7CisJCS8qCisJCSAqIE5vdCBpbiBjYWNoZWQgbW9kZS4gTm8gbmVlZCB0byBwb3B1bGF0ZQorCQkgKiBpbm9kZSB3aXRoIHN0YXQuIFdlIG5lZWQgdG8gZ2V0IGFuIGlub2RlCisJCSAqIHNvIHRoYXQgd2UgY2FuIHNldCB0aGUgYWNsIHdpdGggZGVudHJ5CisJCSAqLworCQlpbm9kZSA9IHY5ZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgbW9kZSk7CisJCWlmIChJU19FUlIoaW5vZGUpKSB7CisJCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwl9CisJLyogTm93IHNldCB0aGUgQUNMIGJhc2VkIG9uIHRoZSBkZWZhdWx0IHZhbHVlICovCisJdjlmc19zZXRfY3JlYXRlX2FjbChkZW50cnksIGRhY2wsIHBhY2wpOworCitlcnJvcjoKKwlpZiAoZmlkKQorCQlwOV9jbGllbnRfY2x1bmsoZmlkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50Cit2OWZzX3Zmc19nZXRhdHRyX2RvdGwoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJIHN0cnVjdCBrc3RhdCAqc3RhdCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CisJc3RydWN0IHA5X2ZpZCAqZmlkOworCXN0cnVjdCBwOV9zdGF0X2RvdGwgKnN0OworCisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJkZW50cnk6ICVwXG4iLCBkZW50cnkpOworCWVyciA9IC1FUEVSTTsKKwl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGVudHJ5LT5kX2lub2RlKTsKKwlpZiAodjlzZXMtPmNhY2hlID09IENBQ0hFX0xPT1NFIHx8IHY5c2VzLT5jYWNoZSA9PSBDQUNIRV9GU0NBQ0hFKQorCQlyZXR1cm4gc2ltcGxlX2dldGF0dHIobW50LCBkZW50cnksIHN0YXQpOworCisJZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeSk7CisJaWYgKElTX0VSUihmaWQpKQorCQlyZXR1cm4gUFRSX0VSUihmaWQpOworCisJLyogQXNrIGZvciBhbGwgdGhlIGZpZWxkcyBpbiBzdGF0IHN0cnVjdHVyZS4gU2VydmVyIHdpbGwgcmV0dXJuCisJICogd2hhdGV2ZXIgaXQgc3VwcG9ydHMKKwkgKi8KKworCXN0ID0gcDlfY2xpZW50X2dldGF0dHJfZG90bChmaWQsIFA5X1NUQVRTX0FMTCk7CisJaWYgKElTX0VSUihzdCkpCisJCXJldHVybiBQVFJfRVJSKHN0KTsKKworCXY5ZnNfc3RhdDJpbm9kZV9kb3RsKHN0LCBkZW50cnktPmRfaW5vZGUpOworCWdlbmVyaWNfZmlsbGF0dHIoZGVudHJ5LT5kX2lub2RlLCBzdGF0KTsKKwkvKiBDaGFuZ2UgYmxvY2sgc2l6ZSB0byB3aGF0IHRoZSBzZXJ2ZXIgcmV0dXJuZWQgKi8KKwlzdGF0LT5ibGtzaXplID0gc3QtPnN0X2Jsa3NpemU7CisKKwlrZnJlZShzdCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdjlmc192ZnNfc2V0YXR0cl9kb3RsIC0gc2V0IGZpbGUgbWV0YWRhdGEKKyAqIEBkZW50cnk6IGZpbGUgd2hvc2UgbWV0YWRhdGEgdG8gc2V0CisgKiBAaWF0dHI6IG1ldGFkYXRhIGFzc2lnbm1lbnQgc3RydWN0dXJlCisgKgorICovCisKK2ludCB2OWZzX3Zmc19zZXRhdHRyX2RvdGwoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKQoreworCWludCByZXR2YWw7CisJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKKwlzdHJ1Y3QgcDlfZmlkICpmaWQ7CisJc3RydWN0IHA5X2lhdHRyX2RvdGwgcDlhdHRyOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJcbiIpOworCisJcmV0dmFsID0gaW5vZGVfY2hhbmdlX29rKGRlbnRyeS0+ZF9pbm9kZSwgaWF0dHIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlwOWF0dHIudmFsaWQgPSBpYXR0ci0+aWFfdmFsaWQ7CisJcDlhdHRyLm1vZGUgPSBpYXR0ci0+aWFfbW9kZTsKKwlwOWF0dHIudWlkID0gaWF0dHItPmlhX3VpZDsKKwlwOWF0dHIuZ2lkID0gaWF0dHItPmlhX2dpZDsKKwlwOWF0dHIuc2l6ZSA9IGlhdHRyLT5pYV9zaXplOworCXA5YXR0ci5hdGltZV9zZWMgPSBpYXR0ci0+aWFfYXRpbWUudHZfc2VjOworCXA5YXR0ci5hdGltZV9uc2VjID0gaWF0dHItPmlhX2F0aW1lLnR2X25zZWM7CisJcDlhdHRyLm10aW1lX3NlYyA9IGlhdHRyLT5pYV9tdGltZS50dl9zZWM7CisJcDlhdHRyLm10aW1lX25zZWMgPSBpYXR0ci0+aWFfbXRpbWUudHZfbnNlYzsKKworCXJldHZhbCA9IC1FUEVSTTsKKwl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGVudHJ5LT5kX2lub2RlKTsKKwlmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5KTsKKwlpZiAoSVNfRVJSKGZpZCkpCisJCXJldHVybiBQVFJfRVJSKGZpZCk7CisKKwlyZXR2YWwgPSBwOV9jbGllbnRfc2V0YXR0cihmaWQsICZwOWF0dHIpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmCisJICAgIGlhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGRlbnRyeS0+ZF9pbm9kZSkpIHsKKwkJcmV0dmFsID0gdm10cnVuY2F0ZShkZW50cnktPmRfaW5vZGUsIGlhdHRyLT5pYV9zaXplKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCisJc2V0YXR0cl9jb3B5KGRlbnRyeS0+ZF9pbm9kZSwgaWF0dHIpOworCW1hcmtfaW5vZGVfZGlydHkoZGVudHJ5LT5kX2lub2RlKTsKKwlpZiAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSB7CisJCS8qIFdlIGFsc28gd2FudCB0byB1cGRhdGUgQUNMIHdoZW4gd2UgdXBkYXRlIG1vZGUgYml0cyAqLworCQlyZXR2YWwgPSB2OWZzX2FjbF9jaG1vZChkZW50cnkpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHY5ZnNfc3RhdDJpbm9kZV9kb3RsIC0gcG9wdWxhdGUgYW4gaW5vZGUgc3RydWN0dXJlIHdpdGggc3RhdCBpbmZvCisgKiBAc3RhdDogc3RhdCBzdHJ1Y3R1cmUKKyAqIEBpbm9kZTogaW5vZGUgdG8gcG9wdWxhdGUKKyAqIEBzYjogc3VwZXJibG9jayBvZiBmaWxlc3lzdGVtCisgKgorICovCisKK3ZvaWQKK3Y5ZnNfc3RhdDJpbm9kZV9kb3RsKHN0cnVjdCBwOV9zdGF0X2RvdGwgKnN0YXQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisKKwlpZiAoKHN0YXQtPnN0X3Jlc3VsdF9tYXNrICYgUDlfU1RBVFNfQkFTSUMpID09IFA5X1NUQVRTX0JBU0lDKSB7CisJCWlub2RlLT5pX2F0aW1lLnR2X3NlYyA9IHN0YXQtPnN0X2F0aW1lX3NlYzsKKwkJaW5vZGUtPmlfYXRpbWUudHZfbnNlYyA9IHN0YXQtPnN0X2F0aW1lX25zZWM7CisJCWlub2RlLT5pX210aW1lLnR2X3NlYyA9IHN0YXQtPnN0X210aW1lX3NlYzsKKwkJaW5vZGUtPmlfbXRpbWUudHZfbnNlYyA9IHN0YXQtPnN0X210aW1lX25zZWM7CisJCWlub2RlLT5pX2N0aW1lLnR2X3NlYyA9IHN0YXQtPnN0X2N0aW1lX3NlYzsKKwkJaW5vZGUtPmlfY3RpbWUudHZfbnNlYyA9IHN0YXQtPnN0X2N0aW1lX25zZWM7CisJCWlub2RlLT5pX3VpZCA9IHN0YXQtPnN0X3VpZDsKKwkJaW5vZGUtPmlfZ2lkID0gc3RhdC0+c3RfZ2lkOworCQlpbm9kZS0+aV9ubGluayA9IHN0YXQtPnN0X25saW5rOworCQlpbm9kZS0+aV9tb2RlID0gc3RhdC0+c3RfbW9kZTsKKwkJaW5vZGUtPmlfcmRldiA9IG5ld19kZWNvZGVfZGV2KHN0YXQtPnN0X3JkZXYpOworCisJCWlmICgoU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkgfHwgKFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkpKQorCQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9yZGV2KTsKKworCQlpX3NpemVfd3JpdGUoaW5vZGUsIHN0YXQtPnN0X3NpemUpOworCQlpbm9kZS0+aV9ibG9ja3MgPSBzdGF0LT5zdF9ibG9ja3M7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXQtPnN0X3Jlc3VsdF9tYXNrICYgUDlfU1RBVFNfQVRJTUUpIHsKKwkJCWlub2RlLT5pX2F0aW1lLnR2X3NlYyA9IHN0YXQtPnN0X2F0aW1lX3NlYzsKKwkJCWlub2RlLT5pX2F0aW1lLnR2X25zZWMgPSBzdGF0LT5zdF9hdGltZV9uc2VjOworCQl9CisJCWlmIChzdGF0LT5zdF9yZXN1bHRfbWFzayAmIFA5X1NUQVRTX01USU1FKSB7CisJCQlpbm9kZS0+aV9tdGltZS50dl9zZWMgPSBzdGF0LT5zdF9tdGltZV9zZWM7CisJCQlpbm9kZS0+aV9tdGltZS50dl9uc2VjID0gc3RhdC0+c3RfbXRpbWVfbnNlYzsKKwkJfQorCQlpZiAoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19DVElNRSkgeworCQkJaW5vZGUtPmlfY3RpbWUudHZfc2VjID0gc3RhdC0+c3RfY3RpbWVfc2VjOworCQkJaW5vZGUtPmlfY3RpbWUudHZfbnNlYyA9IHN0YXQtPnN0X2N0aW1lX25zZWM7CisJCX0KKwkJaWYgKHN0YXQtPnN0X3Jlc3VsdF9tYXNrICYgUDlfU1RBVFNfVUlEKQorCQkJaW5vZGUtPmlfdWlkID0gc3RhdC0+c3RfdWlkOworCQlpZiAoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19HSUQpCisJCQlpbm9kZS0+aV9naWQgPSBzdGF0LT5zdF9naWQ7CisJCWlmIChzdGF0LT5zdF9yZXN1bHRfbWFzayAmIFA5X1NUQVRTX05MSU5LKQorCQkJaW5vZGUtPmlfbmxpbmsgPSBzdGF0LT5zdF9ubGluazsKKwkJaWYgKHN0YXQtPnN0X3Jlc3VsdF9tYXNrICYgUDlfU1RBVFNfTU9ERSkgeworCQkJaW5vZGUtPmlfbW9kZSA9IHN0YXQtPnN0X21vZGU7CisJCQlpZiAoKFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkpIHx8CisJCQkJCQkoU19JU0NIUihpbm9kZS0+aV9tb2RlKSkpCisJCQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLAorCQkJCQkJCQlpbm9kZS0+aV9yZGV2KTsKKwkJfQorCQlpZiAoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19SREVWKQorCQkJaW5vZGUtPmlfcmRldiA9IG5ld19kZWNvZGVfZGV2KHN0YXQtPnN0X3JkZXYpOworCQlpZiAoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19TSVpFKQorCQkJaV9zaXplX3dyaXRlKGlub2RlLCBzdGF0LT5zdF9zaXplKTsKKwkJaWYgKHN0YXQtPnN0X3Jlc3VsdF9tYXNrICYgUDlfU1RBVFNfQkxPQ0tTKQorCQkJaW5vZGUtPmlfYmxvY2tzID0gc3RhdC0+c3RfYmxvY2tzOworCX0KKwlpZiAoc3RhdC0+c3RfcmVzdWx0X21hc2sgJiBQOV9TVEFUU19HRU4pCisJCQlpbm9kZS0+aV9nZW5lcmF0aW9uID0gc3RhdC0+c3RfZ2VuOworCisJLyogQ3VycmVudGx5IHdlIGRvbid0IHN1cHBvcnQgUDlfU1RBVFNfQlRJTUUgYW5kIFA5X1NUQVRTX0RBVEFfVkVSU0lPTgorCSAqIGJlY2F1c2UgdGhlIGlub2RlIHN0cnVjdHVyZSBkb2VzIG5vdCBoYXZlIGZpZWxkcyBmb3IgdGhlbS4KKwkgKi8KK30KKworc3RhdGljIGludAordjlmc192ZnNfc3ltbGlua19kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCWNvbnN0IGNoYXIgKnN5bW5hbWUpCit7CisJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKKwlzdHJ1Y3QgcDlfZmlkICpkZmlkOworCXN0cnVjdCBwOV9maWQgKmZpZCA9IE5VTEw7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgcDlfcWlkIHFpZDsKKwljaGFyICpuYW1lOworCWludCBlcnI7CisJZ2lkX3QgZ2lkOworCisJbmFtZSA9IChjaGFyICopIGRlbnRyeS0+ZF9uYW1lLm5hbWU7CisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJ2OWZzX3Zmc19zeW1saW5rX2RvdGwgOiAlbHUsJXMsJXNcbiIsCisJCQlkaXItPmlfaW5vLCBuYW1lLCBzeW1uYW1lKTsKKwl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGlyKTsKKworCWRmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5LT5kX3BhcmVudCk7CisJaWYgKElTX0VSUihkZmlkKSkgeworCQllcnIgPSBQVFJfRVJSKGRmaWQpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImZpZCBsb29rdXAgZmFpbGVkICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWdpZCA9IHY5ZnNfZ2V0X2ZzZ2lkX2Zvcl9jcmVhdGUoZGlyKTsKKworCS8qIFNlcnZlciBkb2Vzbid0IGFsdGVyIGZpZCBvbiBUU1lNTElOSy4gSGVuY2Ugbm8gbmVlZCB0byBjbG9uZSBpdC4gKi8KKwllcnIgPSBwOV9jbGllbnRfc3ltbGluayhkZmlkLCBuYW1lLCAoY2hhciAqKXN5bW5hbWUsIGdpZCwgJnFpZCk7CisKKwlpZiAoZXJyIDwgMCkgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInA5X2NsaWVudF9zeW1saW5rIGZhaWxlZCAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAodjlzZXMtPmNhY2hlKSB7CisJCS8qIE5vdyB3YWxrIGZyb20gdGhlIHBhcmVudCBzbyB3ZSBjYW4gZ2V0IGFuIHVub3BlbmVkIGZpZC4gKi8KKwkJZmlkID0gcDlfY2xpZW50X3dhbGsoZGZpZCwgMSwgJm5hbWUsIDEpOworCQlpZiAoSVNfRVJSKGZpZCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoZmlkKTsKKwkJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicDlfY2xpZW50X3dhbGsgZmFpbGVkICVkXG4iLAorCQkJCQllcnIpOworCQkJZmlkID0gTlVMTDsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQkvKiBpbnN0YW50aWF0ZSBpbm9kZSBhbmQgYXNzaWduIHRoZSB1bm9wZW5lZCBmaWQgdG8gZGVudHJ5ICovCisJCWlub2RlID0gdjlmc19pbm9kZV9mcm9tX2ZpZCh2OXNlcywgZmlkLCBkaXItPmlfc2IpOworCQlpZiAoSVNfRVJSKGlub2RlKSkgeworCQkJZXJyID0gUFRSX0VSUihpbm9kZSk7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImlub2RlIGNyZWF0aW9uIGZhaWxlZCAlZFxuIiwKKwkJCQkJZXJyKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwkJZXJyID0gdjlmc19maWRfYWRkKGRlbnRyeSwgZmlkKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycm9yOworCQlmaWQgPSBOVUxMOworCX0gZWxzZSB7CisJCS8qIE5vdCBpbiBjYWNoZWQgbW9kZS4gTm8gbmVlZCB0byBwb3B1bGF0ZSBpbm9kZSB3aXRoIHN0YXQgKi8KKwkJaW5vZGUgPSB2OWZzX2dldF9pbm9kZShkaXItPmlfc2IsIFNfSUZMTkspOworCQlpZiAoSVNfRVJSKGlub2RlKSkgeworCQkJZXJyID0gUFRSX0VSUihpbm9kZSk7CisJCQlnb3RvIGVycm9yOworCQl9CisJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJfQorCitlcnJvcjoKKwlpZiAoZmlkKQorCQlwOV9jbGllbnRfY2x1bmsoZmlkKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogdjlmc192ZnNfbGlua19kb3RsIC0gY3JlYXRlIGEgaGFyZGxpbmsgZm9yIGRvdGwKKyAqIEBvbGRfZGVudHJ5OiBkZW50cnkgZm9yIGZpbGUgdG8gbGluayB0bworICogQGRpcjogaW5vZGUgZGVzdGluYXRpb24gZm9yIG5ldyBsaW5rCisgKiBAZGVudHJ5OiBkZW50cnkgZm9yIGxpbmsKKyAqCisgKi8KKworc3RhdGljIGludAordjlmc192ZnNfbGlua19kb3RsKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAorCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfZmlkICpkZmlkLCAqb2xkZmlkOworCWNoYXIgKm5hbWU7CisJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXJfZGVudHJ5OworCisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJkaXIgaW5vOiAlbHUsIG9sZF9uYW1lOiAlcywgbmV3X25hbWU6ICVzXG4iLAorCQkJZGlyLT5pX2lubywgb2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQlkZW50cnktPmRfbmFtZS5uYW1lKTsKKworCXY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkaXIpOworCWRpcl9kZW50cnkgPSB2OWZzX2RlbnRyeV9mcm9tX2Rpcl9pbm9kZShkaXIpOworCWRmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGlyX2RlbnRyeSk7CisJaWYgKElTX0VSUihkZmlkKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGZpZCk7CisKKwlvbGRmaWQgPSB2OWZzX2ZpZF9sb29rdXAob2xkX2RlbnRyeSk7CisJaWYgKElTX0VSUihvbGRmaWQpKQorCQlyZXR1cm4gUFRSX0VSUihvbGRmaWQpOworCisJbmFtZSA9IChjaGFyICopIGRlbnRyeS0+ZF9uYW1lLm5hbWU7CisKKwllcnIgPSBwOV9jbGllbnRfbGluayhkZmlkLCBvbGRmaWQsIChjaGFyICopZGVudHJ5LT5kX25hbWUubmFtZSk7CisKKwlpZiAoZXJyIDwgMCkgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInA5X2NsaWVudF9saW5rIGZhaWxlZCAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAodjlzZXMtPmNhY2hlID09IENBQ0hFX0xPT1NFIHx8IHY5c2VzLT5jYWNoZSA9PSBDQUNIRV9GU0NBQ0hFKSB7CisJCS8qIEdldCB0aGUgbGF0ZXN0IHN0YXQgaW5mbyBmcm9tIHNlcnZlci4gKi8KKwkJc3RydWN0IHA5X2ZpZCAqZmlkOworCQlzdHJ1Y3QgcDlfc3RhdF9kb3RsICpzdDsKKworCQlmaWQgPSB2OWZzX2ZpZF9sb29rdXAob2xkX2RlbnRyeSk7CisJCWlmIChJU19FUlIoZmlkKSkKKwkJCXJldHVybiBQVFJfRVJSKGZpZCk7CisKKwkJc3QgPSBwOV9jbGllbnRfZ2V0YXR0cl9kb3RsKGZpZCwgUDlfU1RBVFNfQkFTSUMpOworCQlpZiAoSVNfRVJSKHN0KSkKKwkJCXJldHVybiBQVFJfRVJSKHN0KTsKKworCQl2OWZzX3N0YXQyaW5vZGVfZG90bChzdCwgb2xkX2RlbnRyeS0+ZF9pbm9kZSk7CisKKwkJa2ZyZWUoc3QpOworCX0gZWxzZSB7CisJCS8qIENhY2hpbmcgZGlzYWJsZWQuIE5vIG5lZWQgdG8gZ2V0IHVwdG8gZGF0ZSBzdGF0IGluZm8uCisJCSAqIFRoaXMgZGVudHJ5IHdpbGwgYmUgcmVsZWFzZWQgaW1tZWRpYXRlbHkuIFNvLCBqdXN0IGhvbGQgdGhlCisJCSAqIGlub2RlCisJCSAqLworCQlpaG9sZChvbGRfZGVudHJ5LT5kX2lub2RlKTsKKwl9CisJZF9pbnN0YW50aWF0ZShkZW50cnksIG9sZF9kZW50cnktPmRfaW5vZGUpOworCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiB2OWZzX3Zmc19ta25vZF9kb3RsIC0gY3JlYXRlIGEgc3BlY2lhbCBmaWxlCisgKiBAZGlyOiBpbm9kZSBkZXN0aW5hdGlvbiBmb3IgbmV3IGxpbmsKKyAqIEBkZW50cnk6IGRlbnRyeSBmb3IgZmlsZQorICogQG1vZGU6IG1vZGUgZm9yIGNyZWF0aW9uCisgKiBAcmRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBzcGVjaWFsIGZpbGUKKyAqCisgKi8KK3N0YXRpYyBpbnQKK3Y5ZnNfdmZzX21rbm9kX2RvdGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG9tb2RlLAorCQlkZXZfdCByZGV2KQoreworCWludCBlcnI7CisJY2hhciAqbmFtZTsKKwltb2RlX3QgbW9kZTsKKwlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOworCXN0cnVjdCBwOV9maWQgKmZpZCA9IE5VTEwsICpkZmlkID0gTlVMTDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWdpZF90IGdpZDsKKwlzdHJ1Y3QgcDlfcWlkIHFpZDsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXJfZGVudHJ5OworCXN0cnVjdCBwb3NpeF9hY2wgKmRhY2wgPSBOVUxMLCAqcGFjbCA9IE5VTEw7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywKKwkJIiAlbHUsJXMgbW9kZTogJXggTUFKT1I6ICV1IE1JTk9SOiAldVxuIiwgZGlyLT5pX2lubywKKwkJZGVudHJ5LT5kX25hbWUubmFtZSwgb21vZGUsIE1BSk9SKHJkZXYpLCBNSU5PUihyZGV2KSk7CisKKwlpZiAoIW5ld192YWxpZF9kZXYocmRldikpCisJCXJldHVybiAtRUlOVkFMOworCisJdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7CisJZGlyX2RlbnRyeSA9IHY5ZnNfZGVudHJ5X2Zyb21fZGlyX2lub2RlKGRpcik7CisJZGZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkaXJfZGVudHJ5KTsKKwlpZiAoSVNfRVJSKGRmaWQpKSB7CisJCWVyciA9IFBUUl9FUlIoZGZpZCk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZmlkIGxvb2t1cCBmYWlsZWQgJWRcbiIsIGVycik7CisJCWRmaWQgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCWdpZCA9IHY5ZnNfZ2V0X2ZzZ2lkX2Zvcl9jcmVhdGUoZGlyKTsKKwltb2RlID0gb21vZGU7CisJLyogVXBkYXRlIG1vZGUgYmFzZWQgb24gQUNMIHZhbHVlICovCisJZXJyID0gdjlmc19hY2xfbW9kZShkaXIsICZtb2RlLCAmZGFjbCwgJnBhY2wpOworCWlmIChlcnIpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsCisJCQkgICAiRmFpbGVkIHRvIGdldCBhY2wgdmFsdWVzIGluIG1rbm9kICVkXG4iLCBlcnIpOworCQlnb3RvIGVycm9yOworCX0KKwluYW1lID0gKGNoYXIgKikgZGVudHJ5LT5kX25hbWUubmFtZTsKKworCWVyciA9IHA5X2NsaWVudF9ta25vZF9kb3RsKGRmaWQsIG5hbWUsIG1vZGUsIHJkZXYsIGdpZCwgJnFpZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBpbnN0YW50aWF0ZSBpbm9kZSBhbmQgYXNzaWduIHRoZSB1bm9wZW5lZCBmaWQgdG8gdGhlIGRlbnRyeSAqLworCWlmICh2OXNlcy0+Y2FjaGUgPT0gQ0FDSEVfTE9PU0UgfHwgdjlzZXMtPmNhY2hlID09IENBQ0hFX0ZTQ0FDSEUpIHsKKwkJZmlkID0gcDlfY2xpZW50X3dhbGsoZGZpZCwgMSwgJm5hbWUsIDEpOworCQlpZiAoSVNfRVJSKGZpZCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoZmlkKTsKKwkJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicDlfY2xpZW50X3dhbGsgZmFpbGVkICVkXG4iLAorCQkJCWVycik7CisJCQlmaWQgPSBOVUxMOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCWlub2RlID0gdjlmc19pbm9kZV9mcm9tX2ZpZCh2OXNlcywgZmlkLCBkaXItPmlfc2IpOworCQlpZiAoSVNfRVJSKGlub2RlKSkgeworCQkJZXJyID0gUFRSX0VSUihpbm9kZSk7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImlub2RlIGNyZWF0aW9uIGZhaWxlZCAlZFxuIiwKKwkJCQllcnIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCQllcnIgPSB2OWZzX2ZpZF9hZGQoZGVudHJ5LCBmaWQpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCWZpZCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogTm90IGluIGNhY2hlZCBtb2RlLiBObyBuZWVkIHRvIHBvcHVsYXRlIGlub2RlIHdpdGggc3RhdC4KKwkJICogc29ja2V0IHN5c2NhbGwgcmV0dXJucyBhIGZkLCBzbyB3ZSBuZWVkIGluc3RhbnRpYXRlCisJCSAqLworCQlpbm9kZSA9IHY5ZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgbW9kZSk7CisJCWlmIChJU19FUlIoaW5vZGUpKSB7CisJCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwl9CisJLyogTm93IHNldCB0aGUgQUNMIGJhc2VkIG9uIHRoZSBkZWZhdWx0IHZhbHVlICovCisJdjlmc19zZXRfY3JlYXRlX2FjbChkZW50cnksIGRhY2wsIHBhY2wpOworZXJyb3I6CisJaWYgKGZpZCkKKwkJcDlfY2xpZW50X2NsdW5rKGZpZCk7CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiB2OWZzX3Zmc19mb2xsb3dfbGlua19kb3RsIC0gZm9sbG93IGEgc3ltbGluayBwYXRoCisgKiBAZGVudHJ5OiBkZW50cnkgZm9yIHN5bWxpbmsKKyAqIEBuZDogbmFtZWlkYXRhCisgKgorICovCisKK3N0YXRpYyB2b2lkICoKK3Y5ZnNfdmZzX2ZvbGxvd19saW5rX2RvdGwoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBwOV9maWQgKmZpZDsKKwljaGFyICpsaW5rID0gX19nZXRuYW1lKCk7CisJY2hhciAqdGFyZ2V0OworCisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICIlc1xuIiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisKKwlpZiAoIWxpbmspIHsKKwkJbGluayA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gbmRzZXQ7CisJfQorCWZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkZW50cnkpOworCWlmIChJU19FUlIoZmlkKSkgeworCQlfX3B1dG5hbWUobGluayk7CisJCWxpbmsgPSBFUlJfUFRSKFBUUl9FUlIoZmlkKSk7CisJCWdvdG8gbmRzZXQ7CisJfQorCXJldHZhbCA9IHA5X2NsaWVudF9yZWFkbGluayhmaWQsICZ0YXJnZXQpOworCWlmICghcmV0dmFsKSB7CisJCXN0cmNweShsaW5rLCB0YXJnZXQpOworCQlrZnJlZSh0YXJnZXQpOworCQlnb3RvIG5kc2V0OworCX0KKwlfX3B1dG5hbWUobGluayk7CisJbGluayA9IEVSUl9QVFIocmV0dmFsKTsKK25kc2V0OgorCW5kX3NldF9saW5rKG5kLCBsaW5rKTsKKwlyZXR1cm4gTlVMTDsKK30KKworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9uc19kb3RsID0geworCS5jcmVhdGUgPSB2OWZzX3Zmc19jcmVhdGVfZG90bCwKKwkubG9va3VwID0gdjlmc192ZnNfbG9va3VwLAorCS5saW5rID0gdjlmc192ZnNfbGlua19kb3RsLAorCS5zeW1saW5rID0gdjlmc192ZnNfc3ltbGlua19kb3RsLAorCS51bmxpbmsgPSB2OWZzX3Zmc191bmxpbmssCisJLm1rZGlyID0gdjlmc192ZnNfbWtkaXJfZG90bCwKKwkucm1kaXIgPSB2OWZzX3Zmc19ybWRpciwKKwkubWtub2QgPSB2OWZzX3Zmc19ta25vZF9kb3RsLAorCS5yZW5hbWUgPSB2OWZzX3Zmc19yZW5hbWUsCisJLmdldGF0dHIgPSB2OWZzX3Zmc19nZXRhdHRyX2RvdGwsCisJLnNldGF0dHIgPSB2OWZzX3Zmc19zZXRhdHRyX2RvdGwsCisJLnNldHhhdHRyID0gZ2VuZXJpY19zZXR4YXR0ciwKKwkuZ2V0eGF0dHIgPSBnZW5lcmljX2dldHhhdHRyLAorCS5yZW1vdmV4YXR0ciA9IGdlbmVyaWNfcmVtb3ZleGF0dHIsCisJLmxpc3R4YXR0ciA9IHY5ZnNfbGlzdHhhdHRyLAorCS5jaGVja19hY2wgPSB2OWZzX2NoZWNrX2FjbCwKK307CisKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zX2RvdGwgPSB7CisJLmdldGF0dHIgPSB2OWZzX3Zmc19nZXRhdHRyX2RvdGwsCisJLnNldGF0dHIgPSB2OWZzX3Zmc19zZXRhdHRyX2RvdGwsCisJLnNldHhhdHRyID0gZ2VuZXJpY19zZXR4YXR0ciwKKwkuZ2V0eGF0dHIgPSBnZW5lcmljX2dldHhhdHRyLAorCS5yZW1vdmV4YXR0ciA9IGdlbmVyaWNfcmVtb3ZleGF0dHIsCisJLmxpc3R4YXR0ciA9IHY5ZnNfbGlzdHhhdHRyLAorCS5jaGVja19hY2wgPSB2OWZzX2NoZWNrX2FjbCwKK307CisKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zX2RvdGwgPSB7CisJLnJlYWRsaW5rID0gZ2VuZXJpY19yZWFkbGluaywKKwkuZm9sbG93X2xpbmsgPSB2OWZzX3Zmc19mb2xsb3dfbGlua19kb3RsLAorCS5wdXRfbGluayA9IHY5ZnNfdmZzX3B1dF9saW5rLAorCS5nZXRhdHRyID0gdjlmc192ZnNfZ2V0YXR0cl9kb3RsLAorCS5zZXRhdHRyID0gdjlmc192ZnNfc2V0YXR0cl9kb3RsLAorCS5zZXR4YXR0ciA9IGdlbmVyaWNfc2V0eGF0dHIsCisJLmdldHhhdHRyID0gZ2VuZXJpY19nZXR4YXR0ciwKKwkucmVtb3ZleGF0dHIgPSBnZW5lcmljX3JlbW92ZXhhdHRyLAorCS5saXN0eGF0dHIgPSB2OWZzX2xpc3R4YXR0ciwKK307CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfc3VwZXIuYyBiL2ZzLzlwL3Zmc19zdXBlci5jCmluZGV4IGM1NWM2MTQuLmRiYWFiZTMgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19zdXBlci5jCisrKyBiL2ZzLzlwL3Zmc19zdXBlci5jCkBAIC0xNDEsNiArMTQxLDExIEBACiAJfQogCXY5ZnNfZmlsbF9zdXBlcihzYiwgdjlzZXMsIGZsYWdzLCBkYXRhKTsKIAorCWlmICh2OXNlcy0+Y2FjaGUpCisJCXNiLT5zX2Rfb3AgPSAmdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnM7CisJZWxzZQorCQlzYi0+c19kX29wID0gJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CisKIAlpbm9kZSA9IHY5ZnNfZ2V0X2lub2RlKHNiLCBTX0lGRElSIHwgbW9kZSk7CiAJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihpbm9kZSk7CkBAIC0yMTcsOSArMjIyLDYgQEAKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiICVwXG4iLCBzKTsKIAotCWlmIChzLT5zX3Jvb3QpCi0JCXY5ZnNfZGVudHJ5X3JlbGVhc2Uocy0+c19yb290KTsJLyogY2x1bmsgcm9vdCAqLwotCiAJa2lsbF9hbm9uX3N1cGVyKHMpOwogCiAJdjlmc19zZXNzaW9uX2NhbmNlbCh2OXNlcyk7CmRpZmYgLS1naXQgYS9mcy85cC94YXR0ci5jIGIvZnMvOXAveGF0dHIuYwppbmRleCA0M2VjN2RmLi5kMjg4NzczIDEwMDY0NAotLS0gYS9mcy85cC94YXR0ci5jCisrKyBiL2ZzLzlwL3hhdHRyLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCQkJInA5X2NsaWVudF94YXR0cmNyZWF0ZSBmYWlsZWQgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZXJyb3I7CiAJfQotCW1zaXplID0gZmlkLT5jbG50LT5tc2l6ZTs7CisJbXNpemUgPSBmaWQtPmNsbnQtPm1zaXplOwogCXdoaWxlICh2YWx1ZV9sZW4pIHsKIAkJaWYgKHZhbHVlX2xlbiA+IChtc2l6ZSAtIFA5X0lPSERSU1opKQogCQkJd3JpdGVfY291bnQgPSBtc2l6ZSAtIFA5X0lPSERSU1o7CmRpZmYgLS1naXQgYS9mcy9hZGZzL2Rpci5jIGIvZnMvYWRmcy9kaXIuYwppbmRleCBiZjc2OTNjLi4zYjRhNzY0IDEwMDY0NAotLS0gYS9mcy9hZGZzL2Rpci5jCisrKyBiL2ZzL2FkZnMvZGlyLmMKQEAgLTI3Niw3ICsyNzYsNiBAQAogCXN0cnVjdCBvYmplY3RfaW5mbyBvYmo7CiAJaW50IGVycm9yOwogCi0JZF9zZXRfZF9vcChkZW50cnksICZhZGZzX2RlbnRyeV9vcGVyYXRpb25zKTsKIAlsb2NrX2tlcm5lbCgpOwogCWVycm9yID0gYWRmc19kaXJfbG9va3VwX2J5bmFtZShkaXIsICZkZW50cnktPmRfbmFtZSwgJm9iaik7CiAJaWYgKGVycm9yID09IDApIHsKZGlmZiAtLWdpdCBhL2ZzL2FkZnMvc3VwZXIuYyBiL2ZzL2FkZnMvc3VwZXIuYwppbmRleCBhNDA0MWI1Li4yZDc5NTQwIDEwMDY0NAotLS0gYS9mcy9hZGZzL3N1cGVyLmMKKysrIGIvZnMvYWRmcy9zdXBlci5jCkBAIC00NzMsNiArNDczLDcgQEAKIAkJYXNiLT5zX25hbWVsZW4gPSBBREZTX0ZfTkFNRV9MRU47CiAJfQogCisJc2ItPnNfZF9vcCA9ICZhZGZzX2RlbnRyeV9vcGVyYXRpb25zOwogCXJvb3QgPSBhZGZzX2lnZXQoc2IsICZyb290X29iaik7CiAJc2ItPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChyb290KTsKIAlpZiAoIXNiLT5zX3Jvb3QpIHsKQEAgLTQ4Myw4ICs0ODQsNyBAQAogCQlrZnJlZShhc2ItPnNfbWFwKTsKIAkJYWRmc19lcnJvcihzYiwgImdldCByb290IGlub2RlIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7Ci0JfSBlbHNlCi0JCWRfc2V0X2Rfb3Aoc2ItPnNfcm9vdCwgJmFkZnNfZGVudHJ5X29wZXJhdGlvbnMpOworCX0KIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmgKaW5kZXggYThjYmRlYi4uMGU5NWY3MyAxMDA2NDQKLS0tIGEvZnMvYWZmcy9hZmZzLmgKKysrIGIvZnMvYWZmcy9hZmZzLmgKQEAgLTIwMSw2ICsyMDEsNyBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMJIGFmZnNfYW9wc19vZnM7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMJIGFmZnNfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zCSBhZmZzX2ludGxfZGVudHJ5X29wZXJhdGlvbnM7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogYWZmc19zZXRfYmxvY2tzaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBzaXplKQpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jCmluZGV4IDk0NGE0MDQuLmUzZTllZmMgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvbmFtZWkuYworKysgYi9mcy9hZmZzL25hbWVpLmMKQEAgLTMyLDcgKzMyLDcgQEAKIAkuZF9jb21wYXJlCT0gYWZmc19jb21wYXJlX2RlbnRyeSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYWZmc19pbnRsX2RlbnRyeV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFmZnNfaW50bF9kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9oYXNoCQk9IGFmZnNfaW50bF9oYXNoX2RlbnRyeSwKIAkuZF9jb21wYXJlCT0gYWZmc19pbnRsX2NvbXBhcmVfZGVudHJ5LAogfTsKQEAgLTI0MCw3ICsyNDAsNiBAQAogCQlpZiAoSVNfRVJSKGlub2RlKSkKIAkJCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7CiAJfQotCWRfc2V0X2Rfb3AoZGVudHJ5LCBBRkZTX1NCKHNiKS0+c19mbGFncyAmIFNGX0lOVEwgPyAmYWZmc19pbnRsX2RlbnRyeV9vcGVyYXRpb25zIDogJmFmZnNfZGVudHJ5X29wZXJhdGlvbnMpOwogCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9zdXBlci5jIGIvZnMvYWZmcy9zdXBlci5jCmluZGV4IGQzOTA4MWIuLmIzMTUwN2QgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvc3VwZXIuYworKysgYi9mcy9hZmZzL3N1cGVyLmMKQEAgLTQ3NywxMiArNDc3LDE2IEBACiAJCWdvdG8gb3V0X2Vycm9yX25vaW5vZGU7CiAJfQogCisJaWYgKEFGRlNfU0Ioc2IpLT5zX2ZsYWdzICYgU0ZfSU5UTCkKKwkJc2ItPnNfZF9vcCA9ICZhZmZzX2ludGxfZGVudHJ5X29wZXJhdGlvbnM7CisJZWxzZQorCQlzYi0+c19kX29wID0gJmFmZnNfZGVudHJ5X29wZXJhdGlvbnM7CisKIAlzYi0+c19yb290ID0gZF9hbGxvY19yb290KHJvb3RfaW5vZGUpOwogCWlmICghc2ItPnNfcm9vdCkgewogCQlwcmludGsoS0VSTl9FUlIgIkFGRlM6IEdldCByb290IGlub2RlIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0X2Vycm9yOwogCX0KLQlkX3NldF9kX29wKHNiLT5zX3Jvb3QsICZhZmZzX2RlbnRyeV9vcGVyYXRpb25zKTsKIAogCXByX2RlYnVnKCJBRkZTOiBzX2ZsYWdzPSVsWFxuIixzYi0+c19mbGFncyk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyLmMgYi9mcy9hZnMvZGlyLmMKaW5kZXggMzRhMzI2My4uZTZhNGFiOSAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpci5jCisrKyBiL2ZzL2Fmcy9kaXIuYwpAQCAtNjIsNyArNjIsNyBAQAogCS5zZXRhdHRyCT0gYWZzX3NldGF0dHIsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFmc19mc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhZnNfZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfcmV2YWxpZGF0ZQk9IGFmc19kX3JldmFsaWRhdGUsCiAJLmRfZGVsZXRlCT0gYWZzX2RfZGVsZXRlLAogCS5kX3JlbGVhc2UJPSBhZnNfZF9yZWxlYXNlLApAQCAtNTgyLDggKzU4Miw2IEBACiAJfQogCiBzdWNjZXNzOgotCWRfc2V0X2Rfb3AoZGVudHJ5LCAmYWZzX2ZzX2RlbnRyeV9vcGVyYXRpb25zKTsKLQogCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwogCV9sZWF2ZSgiID0gMCB7IHZuPSV1IHU9JXUgfSAtPiB7IGlubz0lbHUgdj0lbGx1IH0iLAogCSAgICAgICBmaWQudm5vZGUsCmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oCmluZGV4IDZkNGJjMWMuLmFiNmRiNWEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oCisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oCkBAIC00ODYsNiArNDg2LDcgQEAKICAqIGRpci5jCiAgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFmc19mc19kZW50cnlfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFmc19kaXJfZmlsZV9vcGVyYXRpb25zOwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvYWZzL3N1cGVyLmMgYi9mcy9hZnMvc3VwZXIuYwppbmRleCBmOTAxYTlkLi5mYjI0MGU4IDEwMDY0NAotLS0gYS9mcy9hZnMvc3VwZXIuYworKysgYi9mcy9hZnMvc3VwZXIuYwpAQCAtMzM2LDYgKzMzNiw3IEBACiAJaWYgKCFyb290KQogCQlnb3RvIGVycm9yOwogCisJc2ItPnNfZF9vcCA9ICZhZnNfZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAJc2ItPnNfcm9vdCA9IHJvb3Q7CiAKIAlfbGVhdmUoIiA9IDAiKTsKZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmMKaW5kZXggOGM4ZjZjNS4uNWUwMGYxNSAxMDA2NDQKLS0tIGEvZnMvYWlvLmMKKysrIGIvZnMvYWlvLmMKQEAgLTc5OCwyOSArNzk4LDEyIEBACiAJcXVldWVfZGVsYXllZF93b3JrKGFpb193cSwgJmN0eC0+d3EsIHRpbWVvdXQpOwogfQogCi0KIC8qCi0gKiBhaW9fcnVuX2lvY2JzOgotICogCVByb2Nlc3MgYWxsIHBlbmRpbmcgcmV0cmllcyBxdWV1ZWQgb24gdGhlIGlvY3R4Ci0gKiAJcnVuIGxpc3QuCi0gKiBBc3N1bWVzIGl0IGlzIG9wZXJhdGluZyB3aXRoaW4gdGhlIGFpbyBpc3N1ZXIncyBtbQotICogY29udGV4dC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGFpb19ydW5faW9jYnMoc3RydWN0IGtpb2N0eCAqY3R4KQotewotCWludCByZXF1ZXVlOwotCi0Jc3Bpbl9sb2NrX2lycSgmY3R4LT5jdHhfbG9jayk7Ci0KLQlyZXF1ZXVlID0gX19haW9fcnVuX2lvY2JzKGN0eCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmN0eF9sb2NrKTsKLQlpZiAocmVxdWV1ZSkKLQkJYWlvX3F1ZXVlX3dvcmsoY3R4KTsKLX0KLQotLyoKLSAqIGp1c3QgbGlrZSBhaW9fcnVuX2lvY2JzLCBidXQga2VlcHMgcnVubmluZyB0aGVtIHVudGlsCi0gKiB0aGUgbGlzdCBzdGF5cyBlbXB0eQorICogYWlvX3J1bl9hbGxfaW9jYnM6CisgKglQcm9jZXNzIGFsbCBwZW5kaW5nIHJldHJpZXMgcXVldWVkIG9uIHRoZSBpb2N0eAorICoJcnVuIGxpc3QsIGFuZCBrZWVwIHJ1bm5pbmcgdGhlbSB1bnRpbCB0aGUgbGlzdAorICoJc3RheXMgZW1wdHkuCisgKiBBc3N1bWVzIGl0IGlzIG9wZXJhdGluZyB3aXRoaW4gdGhlIGFpbyBpc3N1ZXIncyBtbSBjb250ZXh0LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYWlvX3J1bl9hbGxfaW9jYnMoc3RydWN0IGtpb2N0eCAqY3R4KQogewpAQCAtMTgzOSw3ICsxODIyLDcgQEAKIAlsb25nIHJldCA9IC1FSU5WQUw7CiAKIAlpZiAobGlrZWx5KGlvY3R4KSkgewotCQlpZiAobGlrZWx5KG1pbl9uciA8PSBuciAmJiBtaW5fbnIgPj0gMCAmJiBuciA+PSAwKSkKKwkJaWYgKGxpa2VseShtaW5fbnIgPD0gbnIgJiYgbWluX25yID49IDApKQogCQkJcmV0ID0gcmVhZF9ldmVudHMoaW9jdHgsIG1pbl9uciwgbnIsIGV2ZW50cywgdGltZW91dCk7CiAJCXB1dF9pb2N0eChpb2N0eCk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYW5vbl9pbm9kZXMuYyBiL2ZzL2Fub25faW5vZGVzLmMKaW5kZXggNWZkMzgxMS4uY2JlNTdmMyAxMDA2NDQKLS0tIGEvZnMvYW5vbl9pbm9kZXMuYworKysgYi9mcy9hbm9uX2lub2Rlcy5jCkBAIC0yNiwxMiArMjYsNiBAQAogc3RhdGljIHN0cnVjdCBpbm9kZSAqYW5vbl9pbm9kZV9pbm9kZTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFub25faW5vZGVfZm9wczsKIAotc3RhdGljIHN0cnVjdCBkZW50cnkgKmFub25faW5vZGVmc19tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKLQkJCQlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQotewotCXJldHVybiBtb3VudF9wc2V1ZG8oZnNfdHlwZSwgImFub25faW5vZGU6IiwgTlVMTCwgQU5PTl9JTk9ERV9GU19NQUdJQyk7Ci19Ci0KIC8qCiAgKiBhbm9uX2lub2RlZnNfZG5hbWUoKSBpcyBjYWxsZWQgZnJvbSBkX3BhdGgoKS4KICAqLwpAQCAtNDEsMTQgKzM1LDIyIEBACiAJCQkJZGVudHJ5LT5kX25hbWUubmFtZSk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYW5vbl9pbm9kZWZzX2RlbnRyeV9vcGVyYXRpb25zID0geworCS5kX2RuYW1lCT0gYW5vbl9pbm9kZWZzX2RuYW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmFub25faW5vZGVmc19tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKKwkJCQlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQoreworCXJldHVybiBtb3VudF9wc2V1ZG8oZnNfdHlwZSwgImFub25faW5vZGU6IiwgTlVMTCwKKwkJCSZhbm9uX2lub2RlZnNfZGVudHJ5X29wZXJhdGlvbnMsIEFOT05fSU5PREVfRlNfTUFHSUMpOworfQorCiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYW5vbl9pbm9kZV9mc190eXBlID0gewogCS5uYW1lCQk9ICJhbm9uX2lub2RlZnMiLAogCS5tb3VudAkJPSBhbm9uX2lub2RlZnNfbW91bnQsCiAJLmtpbGxfc2IJPSBraWxsX2Fub25fc3VwZXIsCiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhbm9uX2lub2RlZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7Ci0JLmRfZG5hbWUJPSBhbm9uX2lub2RlZnNfZG5hbWUsCi19OwogCiAvKgogICogbm9wIC5zZXRfcGFnZV9kaXJ0eSBtZXRob2Qgc28gdGhhdCBwZW9wbGUgY2FuIHVzZSAucGFnZV9ta3dyaXRlIG9uCkBAIC02NCw5ICs2Niw5IEBACiB9OwogCiAvKioKLSAqIGFub25faW5vZGVfZ2V0ZmQgLSBjcmVhdGVzIGEgbmV3IGZpbGUgaW5zdGFuY2UgYnkgaG9va2luZyBpdCB1cCB0byBhbgotICogICAgICAgICAgICAgICAgICAgIGFub255bW91cyBpbm9kZSwgYW5kIGEgZGVudHJ5IHRoYXQgZGVzY3JpYmUgdGhlICJjbGFzcyIKLSAqICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZmlsZQorICogYW5vbl9pbm9kZV9nZXRmaWxlIC0gY3JlYXRlcyBhIG5ldyBmaWxlIGluc3RhbmNlIGJ5IGhvb2tpbmcgaXQgdXAgdG8gYW4KKyAqICAgICAgICAgICAgICAgICAgICAgIGFub255bW91cyBpbm9kZSwgYW5kIGEgZGVudHJ5IHRoYXQgZGVzY3JpYmUgdGhlICJjbGFzcyIKKyAqICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBmaWxlCiAgKgogICogQG5hbWU6ICAgIFtpbl0gICAgbmFtZSBvZiB0aGUgImNsYXNzIiBvZiB0aGUgbmV3IGZpbGUKICAqIEBmb3BzOiAgICBbaW5dICAgIGZpbGUgb3BlcmF0aW9ucyBmb3IgdGhlIG5ldyBmaWxlCkBAIC0xMTMsNyArMTE1LDYgQEAKIAkgKi8KIAlpaG9sZChhbm9uX2lub2RlX2lub2RlKTsKIAotCWRfc2V0X2Rfb3AocGF0aC5kZW50cnksICZhbm9uX2lub2RlZnNfZGVudHJ5X29wZXJhdGlvbnMpOwogCWRfaW5zdGFudGlhdGUocGF0aC5kZW50cnksIGFub25faW5vZGVfaW5vZGUpOwogCiAJZXJyb3IgPSAtRU5GSUxFOwpkaWZmIC0tZ2l0IGEvZnMvYmVmcy9lbmRpYW4uaCBiL2ZzL2JlZnMvZW5kaWFuLmgKaW5kZXggNmNiODRkOC4uMjcyMjM4NyAxMDA2NDQKLS0tIGEvZnMvYmVmcy9lbmRpYW4uaAorKysgYi9mcy9iZWZzL2VuZGlhbi5oCkBAIC0xMDIsMjIgKzEwMiwyMiBAQAogfQogCiBzdGF0aWMgaW5saW5lIGJlZnNfZGF0YV9zdHJlYW0KLWZzZHNfdG9fY3B1KGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJlZnNfZGlza19kYXRhX3N0cmVhbSBuKQorZnNkc190b19jcHUoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgYmVmc19kaXNrX2RhdGFfc3RyZWFtICpuKQogewogCWJlZnNfZGF0YV9zdHJlYW0gZGF0YTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBCRUZTX05VTV9ESVJFQ1RfQkxPQ0tTOyArK2kpCi0JCWRhdGEuZGlyZWN0W2ldID0gZnNydW5fdG9fY3B1KHNiLCBuLmRpcmVjdFtpXSk7CisJCWRhdGEuZGlyZWN0W2ldID0gZnNydW5fdG9fY3B1KHNiLCBuLT5kaXJlY3RbaV0pOwogCi0JZGF0YS5tYXhfZGlyZWN0X3JhbmdlID0gZnM2NF90b19jcHUoc2IsIG4ubWF4X2RpcmVjdF9yYW5nZSk7Ci0JZGF0YS5pbmRpcmVjdCA9IGZzcnVuX3RvX2NwdShzYiwgbi5pbmRpcmVjdCk7Ci0JZGF0YS5tYXhfaW5kaXJlY3RfcmFuZ2UgPSBmczY0X3RvX2NwdShzYiwgbi5tYXhfaW5kaXJlY3RfcmFuZ2UpOwotCWRhdGEuZG91YmxlX2luZGlyZWN0ID0gZnNydW5fdG9fY3B1KHNiLCBuLmRvdWJsZV9pbmRpcmVjdCk7CisJZGF0YS5tYXhfZGlyZWN0X3JhbmdlID0gZnM2NF90b19jcHUoc2IsIG4tPm1heF9kaXJlY3RfcmFuZ2UpOworCWRhdGEuaW5kaXJlY3QgPSBmc3J1bl90b19jcHUoc2IsIG4tPmluZGlyZWN0KTsKKwlkYXRhLm1heF9pbmRpcmVjdF9yYW5nZSA9IGZzNjRfdG9fY3B1KHNiLCBuLT5tYXhfaW5kaXJlY3RfcmFuZ2UpOworCWRhdGEuZG91YmxlX2luZGlyZWN0ID0gZnNydW5fdG9fY3B1KHNiLCBuLT5kb3VibGVfaW5kaXJlY3QpOwogCWRhdGEubWF4X2RvdWJsZV9pbmRpcmVjdF9yYW5nZSA9IGZzNjRfdG9fY3B1KHNiLAotCQkJCQkJICAgICBuLgorCQkJCQkJICAgICBuLT4KIAkJCQkJCSAgICAgbWF4X2RvdWJsZV9pbmRpcmVjdF9yYW5nZSk7Ci0JZGF0YS5zaXplID0gZnM2NF90b19jcHUoc2IsIG4uc2l6ZSk7CisJZGF0YS5zaXplID0gZnM2NF90b19jcHUoc2IsIG4tPnNpemUpOwogCiAJcmV0dXJuIGRhdGE7CiB9CmRpZmYgLS1naXQgYS9mcy9iZWZzL2xpbnV4dmZzLmMgYi9mcy9iZWZzL2xpbnV4dmZzLmMKaW5kZXggZGU5MzU4MS4uYjFkMGM3OSAxMDA2NDQKLS0tIGEvZnMvYmVmcy9saW51eHZmcy5jCisrKyBiL2ZzL2JlZnMvbGludXh2ZnMuYwpAQCAtMzkwLDcgKzM5MCw3IEBACiAJCWludCBudW1fYmxrczsKIAogCQliZWZzX2luby0+aV9kYXRhLmRzID0KLQkJICAgIGZzZHNfdG9fY3B1KHNiLCByYXdfaW5vZGUtPmRhdGEuZGF0YXN0cmVhbSk7CisJCSAgICBmc2RzX3RvX2NwdShzYiwgJnJhd19pbm9kZS0+ZGF0YS5kYXRhc3RyZWFtKTsKIAogCQludW1fYmxrcyA9IGJlZnNfY291bnRfYmxvY2tzKHNiLCAmYmVmc19pbm8tPmlfZGF0YS5kcyk7CiAJCWlub2RlLT5pX2Jsb2NrcyA9CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggNjg4NGUxOS4uZDViNjQwYiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtNjYsMTIgKzY2LDExIEBACiAjZGVmaW5lIEVMRl9QQUdFQUxJR04oX3YpICgoKF92KSArIEVMRl9NSU5fQUxJR04gLSAxKSAmIH4oRUxGX01JTl9BTElHTiAtIDEpKQogCiBzdGF0aWMgc3RydWN0IGxpbnV4X2JpbmZtdCBlbGZfZm9ybWF0ID0gewotCQkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAotCQkubG9hZF9iaW5hcnkJPSBsb2FkX2VsZl9iaW5hcnksCi0JCS5sb2FkX3NobGliCT0gbG9hZF9lbGZfbGlicmFyeSwKLQkJLmNvcmVfZHVtcAk9IGVsZl9jb3JlX2R1bXAsCi0JCS5taW5fY29yZWR1bXAJPSBFTEZfRVhFQ19QQUdFU0laRSwKLQkJLmhhc3Zkc28JPSAxCisJLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkubG9hZF9iaW5hcnkJPSBsb2FkX2VsZl9iaW5hcnksCisJLmxvYWRfc2hsaWIJPSBsb2FkX2VsZl9saWJyYXJ5LAorCS5jb3JlX2R1bXAJPSBlbGZfY29yZV9kdW1wLAorCS5taW5fY29yZWR1bXAJPSBFTEZfRVhFQ19QQUdFU0laRSwKIH07CiAKICNkZWZpbmUgQkFEX0FERFIoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSA+PSBUQVNLX1NJWkUpCkBAIC0zMTYsOCArMzE1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmbmRlZiBlbGZfbWFwCi0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVsZl9tYXAoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXN0cnVjdCBlbGZfcGhkciAqZXBwbnQsIGludCBwcm90LCBpbnQgdHlwZSwKIAkJdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplKQpAQCAtMzU0LDggKzM1MSw2IEBACiAJcmV0dXJuKG1hcF9hZGRyKTsKIH0KIAotI2VuZGlmIC8qICFlbGZfbWFwICovCi0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRvdGFsX21hcHBpbmdfc2l6ZShzdHJ1Y3QgZWxmX3BoZHIgKmNtZHMsIGludCBucikKIHsKIAlpbnQgaSwgZmlyc3RfaWR4ID0gLTEsIGxhc3RfaWR4ID0gLTE7CkBAIC00MjEsNyArNDE2LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXR2YWwgPSBrZXJuZWxfcmVhZChpbnRlcnByZXRlciwgaW50ZXJwX2VsZl9leC0+ZV9waG9mZiwKLQkJCSAgICAgKGNoYXIgKillbGZfcGhkYXRhLHNpemUpOworCQkJICAgICAoY2hhciAqKWVsZl9waGRhdGEsIHNpemUpOwogCWVycm9yID0gLUVJTzsKIAlpZiAocmV0dmFsICE9IHNpemUpIHsKIAkJaWYgKHJldHZhbCA8IDApCkBAIC02MDEsNyArNTk2LDcgQEAKIAkJZ290byBvdXQ7CiAJaWYgKCFlbGZfY2hlY2tfYXJjaCgmbG9jLT5lbGZfZXgpKQogCQlnb3RvIG91dDsKLQlpZiAoIWJwcm0tPmZpbGUtPmZfb3B8fCFicHJtLT5maWxlLT5mX29wLT5tbWFwKQorCWlmICghYnBybS0+ZmlsZS0+Zl9vcCB8fCAhYnBybS0+ZmlsZS0+Zl9vcC0+bW1hcCkKIAkJZ290byBvdXQ7CiAKIAkvKiBOb3cgcmVhZCBpbiBhbGwgb2YgdGhlIGhlYWRlciBpbmZvcm1hdGlvbiAqLwpAQCAtNzYxLDggKzc1Niw4IEBACiAJCQkvKiBUaGVyZSB3YXMgYSBQVF9MT0FEIHNlZ21lbnQgd2l0aCBwX21lbXN6ID4gcF9maWxlc3oKIAkJCSAgIGJlZm9yZSB0aGlzIG9uZS4gTWFwIGFub255bW91cyBwYWdlcywgaWYgbmVlZGVkLAogCQkJICAgYW5kIGNsZWFyIHRoZSBhcmVhLiAgKi8KLQkJCXJldHZhbCA9IHNldF9icmsgKGVsZl9ic3MgKyBsb2FkX2JpYXMsCi0JCQkJCSAgZWxmX2JyayArIGxvYWRfYmlhcyk7CisJCQlyZXR2YWwgPSBzZXRfYnJrKGVsZl9ic3MgKyBsb2FkX2JpYXMsCisJCQkJCSBlbGZfYnJrICsgbG9hZF9iaWFzKTsKIAkJCWlmIChyZXR2YWwpIHsKIAkJCQlzZW5kX3NpZyhTSUdLSUxMLCBjdXJyZW50LCAwKTsKIAkJCQlnb3RvIG91dF9mcmVlX2RlbnRyeTsKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggNzcxZjIzNS4uODhkYTcwMyAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTQ3Myw3ICs0NzMsNyBAQAogc3RhdGljIHN0cnVjdCBkZW50cnkgKmJkX21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAogCWludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEpCiB7Ci0JcmV0dXJuIG1vdW50X3BzZXVkbyhmc190eXBlLCAiYmRldjoiLCAmYmRldl9zb3BzLCAweDYyNjQ2NTc2KTsKKwlyZXR1cm4gbW91bnRfcHNldWRvKGZzX3R5cGUsICJiZGV2OiIsICZiZGV2X3NvcHMsIE5VTEwsIDB4NjI2NDY1NzYpOwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYmRfdHlwZSA9IHsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4cG9ydC5jIGIvZnMvYnRyZnMvZXhwb3J0LmMKaW5kZXggMGNjZjlhOC4uOTc4Njk2MyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXhwb3J0LmMKKysrIGIvZnMvYnRyZnMvZXhwb3J0LmMKQEAgLTY1LDcgKzY1LDYgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IGJ0cmZzX3NiKHNiKS0+ZnNfaW5mbzsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgYnRyZnNfa2V5IGtleTsKIAlpbnQgaW5kZXg7CkBAIC0xMDgsMTAgKzEwNyw3IEBACiAJCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpOwogCX0KIAotCWRlbnRyeSA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTsKLQlpZiAoIUlTX0VSUihkZW50cnkpKQotCQlkX3NldF9kX29wKGRlbnRyeSwgJmJ0cmZzX2RlbnRyeV9vcGVyYXRpb25zKTsKLQlyZXR1cm4gZGVudHJ5OworCXJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7CiBmYWlsOgogCXNyY3VfcmVhZF91bmxvY2soJmZzX2luZm8tPnN1YnZvbF9zcmN1LCBpbmRleCk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKQEAgLTE2Niw3ICsxNjIsNiBAQAogc3RhdGljIHN0cnVjdCBkZW50cnkgKmJ0cmZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpCiB7CiAJc3RydWN0IGlub2RlICpkaXIgPSBjaGlsZC0+ZF9pbm9kZTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGRpciktPnJvb3Q7CiAJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CkBAIC0yMjMsMTAgKzIxOCw3IEBACiAKIAlrZXkudHlwZSA9IEJUUkZTX0lOT0RFX0lURU1fS0VZOwogCWtleS5vZmZzZXQgPSAwOwotCWRlbnRyeSA9IGRfb2J0YWluX2FsaWFzKGJ0cmZzX2lnZXQocm9vdC0+ZnNfaW5mby0+c2IsICZrZXksIHJvb3QsIE5VTEwpKTsKLQlpZiAoIUlTX0VSUihkZW50cnkpKQotCQlkX3NldF9kX29wKGRlbnRyeSwgJmJ0cmZzX2RlbnRyeV9vcGVyYXRpb25zKTsKLQlyZXR1cm4gZGVudHJ5OworCXJldHVybiBkX29idGFpbl9hbGlhcyhidHJmc19pZ2V0KHJvb3QtPmZzX2luZm8tPnNiLCAma2V5LCByb290LCBOVUxMKSk7CiBmYWlsOgogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggYTBmZjQ2YS4uYTM3OThhMyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC00MDg0LDggKzQwODQsNiBAQAogCWludCBpbmRleDsKIAlpbnQgcmV0OwogCi0JZF9zZXRfZF9vcChkZW50cnksICZidHJmc19kZW50cnlfb3BlcmF0aW9ucyk7Ci0KIAlpZiAoZGVudHJ5LT5kX25hbWUubGVuID4gQlRSRlNfTkFNRV9MRU4pCiAJCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOwogCkBAIC03MTE3LDYgKzcxMTUsMTAgQEAKIAlhbGxvY19zdGFydCA9IG9mZnNldCAmIH5tYXNrOwogCWFsbG9jX2VuZCA9ICAob2Zmc2V0ICsgbGVuICsgbWFzaykgJiB+bWFzazsKIAorCS8qIFdlIG9ubHkgc3VwcG9ydCB0aGUgRkFMTE9DX0ZMX0tFRVBfU0laRSBtb2RlICovCisJaWYgKG1vZGUgJiYgKG1vZGUgIT0gRkFMTE9DX0ZMX0tFRVBfU0laRSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCS8qCiAJICogd2FpdCBmb3Igb3JkZXJlZCBJTyBiZWZvcmUgd2UgaGF2ZSBhbnkgbG9ja3MuICBXZSdsbCBsb29wIGFnYWluCiAJICogYmVsb3cgd2l0aCB0aGUgbG9ja3MgaGVsZC4KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IDg4M2M2ZmEuLjIyYWNkYWEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtNDYwLDYgKzQ2MCw3IEBACiAJc2ItPnNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOwogCXNiLT5zX21hZ2ljID0gQlRSRlNfU1VQRVJfTUFHSUM7CiAJc2ItPnNfb3AgPSAmYnRyZnNfc3VwZXJfb3BzOworCXNiLT5zX2Rfb3AgPSAmYnRyZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAJc2ItPnNfZXhwb3J0X29wID0gJmJ0cmZzX2V4cG9ydF9vcHM7CiAJc2ItPnNfeGF0dHIgPSBidHJmc194YXR0cl9oYW5kbGVyczsKIAlzYi0+c190aW1lX2dyYW4gPSAxOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9NYWtlZmlsZSBiL2ZzL2NlcGgvTWFrZWZpbGUKaW5kZXggOWU2YzRmMi4uYmQzNTIxMiAxMDA2NDQKLS0tIGEvZnMvY2VwaC9NYWtlZmlsZQorKysgYi9mcy9jZXBoL01ha2VmaWxlCkBAIC0yLDMxICsyLDEwIEBACiAjIE1ha2VmaWxlIGZvciBDRVBIIGZpbGVzeXN0ZW0uCiAjCiAKLWlmbmVxICgkKEtFUk5FTFJFTEVBU0UpLCkKLQogb2JqLSQoQ09ORklHX0NFUEhfRlMpICs9IGNlcGgubwogCi1jZXBoLW9ianMgOj0gc3VwZXIubyBpbm9kZS5vIGRpci5vIGZpbGUubyBsb2Nrcy5vIGFkZHIubyBpb2N0bC5vIFwKK2NlcGgteSA6PSBzdXBlci5vIGlub2RlLm8gZGlyLm8gZmlsZS5vIGxvY2tzLm8gYWRkci5vIGlvY3RsLm8gXAogCWV4cG9ydC5vIGNhcHMubyBzbmFwLm8geGF0dHIubyBcCiAJbWRzX2NsaWVudC5vIG1kc21hcC5vIHN0cmluZ3MubyBjZXBoX2ZyYWcubyBcCiAJZGVidWdmcy5vCiAKLWVsc2UKLSNPdGhlcndpc2Ugd2Ugd2VyZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZAotIyBsaW5lOyBpbnZva2UgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uCi0KLUtFUk5FTERJUiA/PSAvbGliL21vZHVsZXMvJChzaGVsbCB1bmFtZSAtcikvYnVpbGQKLVBXRCA6PSAkKHNoZWxsIHB3ZCkKLQotZGVmYXVsdDogYWxsCi0KLWFsbDoKLQkkKE1BS0UpIC1DICQoS0VSTkVMRElSKSBNPSQoUFdEKSBDT05GSUdfQ0VQSF9GUz1tIG1vZHVsZXMKLQotbW9kdWxlc19pbnN0YWxsOgotCSQoTUFLRSkgLUMgJChLRVJORUxESVIpIE09JChQV0QpIENPTkZJR19DRVBIX0ZTPW0gbW9kdWxlc19pbnN0YWxsCi0KLWNsZWFuOgotCSQoTUFLRSkgLUMgJChLRVJORUxESVIpIE09JChQV0QpIGNsZWFuCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9mcy9jZXBoL2RlYnVnZnMuYyBiL2ZzL2NlcGgvZGVidWdmcy5jCmluZGV4IDdhZTFiM2QuLjA4ZjY1ZmEgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZGVidWdmcy5jCisrKyBiL2ZzL2NlcGgvZGVidWdmcy5jCkBAIC02MCwxMCArNjAsMTMgQEAKIAlmb3IgKHJwID0gcmJfZmlyc3QoJm1kc2MtPnJlcXVlc3RfdHJlZSk7IHJwOyBycCA9IHJiX25leHQocnApKSB7CiAJCXJlcSA9IHJiX2VudHJ5KHJwLCBzdHJ1Y3QgY2VwaF9tZHNfcmVxdWVzdCwgcl9ub2RlKTsKIAotCQlpZiAocmVxLT5yX3JlcXVlc3QpCi0JCQlzZXFfcHJpbnRmKHMsICIlbGxkXHRtZHMlZFx0IiwgcmVxLT5yX3RpZCwgcmVxLT5yX21kcyk7Ci0JCWVsc2UKKwkJaWYgKHJlcS0+cl9yZXF1ZXN0ICYmIHJlcS0+cl9zZXNzaW9uKQorCQkJc2VxX3ByaW50ZihzLCAiJWxsZFx0bWRzJWRcdCIsIHJlcS0+cl90aWQsCisJCQkJICAgcmVxLT5yX3Nlc3Npb24tPnNfbWRzKTsKKwkJZWxzZSBpZiAoIXJlcS0+cl9yZXF1ZXN0KQogCQkJc2VxX3ByaW50ZihzLCAiJWxsZFx0KG5vIHJlcXVlc3QpXHQiLCByZXEtPnJfdGlkKTsKKwkJZWxzZQorCQkJc2VxX3ByaW50ZihzLCAiJWxsZFx0KG5vIHNlc3Npb24pXHQiLCByZXEtPnJfdGlkKTsKIAogCQlzZXFfcHJpbnRmKHMsICIlcyIsIGNlcGhfbWRzX29wX25hbWUocmVxLT5yX29wKSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZGlyLmMgYi9mcy9jZXBoL2Rpci5jCmluZGV4IGZhN2NhMDQuLjBiYzY4ZGUgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZGlyLmMKKysrIGIvZnMvY2VwaC9kaXIuYwpAQCAtMTIyNCw2ICsxMjI0LDI2IEBACiAJfQogfQogCisvKgorICogUmV0dXJuIG5hbWUgaGFzaCBmb3IgYSBnaXZlbiBkZW50cnkuICBUaGlzIGlzIGRlcGVuZGVudCBvbgorICogdGhlIHBhcmVudCBkaXJlY3RvcnkncyBoYXNoIGZ1bmN0aW9uLgorICovCit1bnNpZ25lZCBjZXBoX2RlbnRyeV9oYXNoKHN0cnVjdCBkZW50cnkgKmRuKQoreworCXN0cnVjdCBpbm9kZSAqZGlyID0gZG4tPmRfcGFyZW50LT5kX2lub2RlOworCXN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmRjaSA9IGNlcGhfaW5vZGUoZGlyKTsKKworCXN3aXRjaCAoZGNpLT5pX2Rpcl9sYXlvdXQuZGxfZGlyX2hhc2gpIHsKKwljYXNlIDA6CS8qIGZvciBiYWNrd2FyZCBjb21wYXQgKi8KKwljYXNlIENFUEhfU1RSX0hBU0hfTElOVVg6CisJCXJldHVybiBkbi0+ZF9uYW1lLmhhc2g7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gY2VwaF9zdHJfaGFzaChkY2ktPmlfZGlyX2xheW91dC5kbF9kaXJfaGFzaCwKKwkJCQkgICAgIGRuLT5kX25hbWUubmFtZSwgZG4tPmRfbmFtZS5sZW4pOworCX0KK30KKwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZXBoX2Rpcl9mb3BzID0gewogCS5yZWFkID0gY2VwaF9yZWFkX2RpciwKIAkucmVhZGRpciA9IGNlcGhfcmVhZGRpciwKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZXhwb3J0LmMgYi9mcy9jZXBoL2V4cG9ydC5jCmluZGV4IDIyOTdkOTQuLmU0MTA1NjEgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZXhwb3J0LmMKKysrIGIvZnMvY2VwaC9leHBvcnQuYwpAQCAtNTksNyArNTksNyBAQAogCQlkb3V0KCJlbmNvZGVfZmggJXAgY29ubmVjdGFibGVcbiIsIGRlbnRyeSk7CiAJCWNmaC0+aW5vID0gY2VwaF9pbm8oZGVudHJ5LT5kX2lub2RlKTsKIAkJY2ZoLT5wYXJlbnRfaW5vID0gY2VwaF9pbm8ocGFyZW50LT5kX2lub2RlKTsKLQkJY2ZoLT5wYXJlbnRfbmFtZV9oYXNoID0gcGFyZW50LT5kX25hbWUuaGFzaDsKKwkJY2ZoLT5wYXJlbnRfbmFtZV9oYXNoID0gY2VwaF9kZW50cnlfaGFzaChwYXJlbnQpOwogCQkqbWF4X2xlbiA9IGNvbm5lY3RlZF9oYW5kbGVfbGVuZ3RoOwogCQl0eXBlID0gMjsKIAl9IGVsc2UgaWYgKCptYXhfbGVuID49IGhhbmRsZV9sZW5ndGgpIHsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvaW5vZGUuYyBiL2ZzL2NlcGgvaW5vZGUuYwppbmRleCBlNjFkZTRmLi5lODM1ZWZmIDEwMDY0NAotLS0gYS9mcy9jZXBoL2lub2RlLmMKKysrIGIvZnMvY2VwaC9pbm9kZS5jCkBAIC0yOTcsNiArMjk3LDggQEAKIAljaS0+aV9yZWxlYXNlX2NvdW50ID0gMDsKIAljaS0+aV9zeW1saW5rID0gTlVMTDsKIAorCW1lbXNldCgmY2ktPmlfZGlyX2xheW91dCwgMCwgc2l6ZW9mKGNpLT5pX2Rpcl9sYXlvdXQpKTsKKwogCWNpLT5pX2ZyYWd0cmVlID0gUkJfUk9PVDsKIAltdXRleF9pbml0KCZjaS0+aV9mcmFndHJlZV9tdXRleCk7CiAKQEAgLTY4OSw2ICs2OTEsOCBAQAogCQlpbm9kZS0+aV9vcCA9ICZjZXBoX2Rpcl9pb3BzOwogCQlpbm9kZS0+aV9mb3AgPSAmY2VwaF9kaXJfZm9wczsKIAorCQljaS0+aV9kaXJfbGF5b3V0ID0gaWluZm8tPmRpcl9sYXlvdXQ7CisKIAkJY2ktPmlfZmlsZXMgPSBsZTY0X3RvX2NwdShpbmZvLT5maWxlcyk7CiAJCWNpLT5pX3N1YmRpcnMgPSBsZTY0X3RvX2NwdShpbmZvLT5zdWJkaXJzKTsKIAkJY2ktPmlfcmJ5dGVzID0gbGU2NF90b19jcHUoaW5mby0+cmJ5dGVzKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvbWRzX2NsaWVudC5jIGIvZnMvY2VwaC9tZHNfY2xpZW50LmMKaW5kZXggYTUwZmNhMS4uMWUzMGQxOSAxMDA2NDQKLS0tIGEvZnMvY2VwaC9tZHNfY2xpZW50LmMKKysrIGIvZnMvY2VwaC9tZHNfY2xpZW50LmMKQEAgLTYwLDcgKzYwLDggQEAKICAqIHBhcnNlIGluZGl2aWR1YWwgaW5vZGUgaW5mbwogICovCiBzdGF0aWMgaW50IHBhcnNlX3JlcGx5X2luZm9faW4odm9pZCAqKnAsIHZvaWQgKmVuZCwKLQkJCSAgICAgICBzdHJ1Y3QgY2VwaF9tZHNfcmVwbHlfaW5mb19pbiAqaW5mbykKKwkJCSAgICAgICBzdHJ1Y3QgY2VwaF9tZHNfcmVwbHlfaW5mb19pbiAqaW5mbywKKwkJCSAgICAgICBpbnQgZmVhdHVyZXMpCiB7CiAJaW50IGVyciA9IC1FSU87CiAKQEAgLTc0LDYgKzc1LDEyIEBACiAJaW5mby0+c3ltbGluayA9ICpwOwogCSpwICs9IGluZm8tPnN5bWxpbmtfbGVuOwogCisJaWYgKGZlYXR1cmVzICYgQ0VQSF9GRUFUVVJFX0RJUkxBWU9VVEhBU0gpCisJCWNlcGhfZGVjb2RlX2NvcHlfc2FmZShwLCBlbmQsICZpbmZvLT5kaXJfbGF5b3V0LAorCQkJCSAgICAgIHNpemVvZihpbmZvLT5kaXJfbGF5b3V0KSwgYmFkKTsKKwllbHNlCisJCW1lbXNldCgmaW5mby0+ZGlyX2xheW91dCwgMCwgc2l6ZW9mKGluZm8tPmRpcl9sYXlvdXQpKTsKKwogCWNlcGhfZGVjb2RlXzMyX3NhZmUocCwgZW5kLCBpbmZvLT54YXR0cl9sZW4sIGJhZCk7CiAJY2VwaF9kZWNvZGVfbmVlZChwLCBlbmQsIGluZm8tPnhhdHRyX2xlbiwgYmFkKTsKIAlpbmZvLT54YXR0cl9kYXRhID0gKnA7CkBAIC04OCwxMiArOTUsMTMgQEAKICAqIHRhcmdldCBpbm9kZS4KICAqLwogc3RhdGljIGludCBwYXJzZV9yZXBseV9pbmZvX3RyYWNlKHZvaWQgKipwLCB2b2lkICplbmQsCi0JCQkJICBzdHJ1Y3QgY2VwaF9tZHNfcmVwbHlfaW5mb19wYXJzZWQgKmluZm8pCisJCQkJICBzdHJ1Y3QgY2VwaF9tZHNfcmVwbHlfaW5mb19wYXJzZWQgKmluZm8sCisJCQkJICBpbnQgZmVhdHVyZXMpCiB7CiAJaW50IGVycjsKIAogCWlmIChpbmZvLT5oZWFkLT5pc19kZW50cnkpIHsKLQkJZXJyID0gcGFyc2VfcmVwbHlfaW5mb19pbihwLCBlbmQsICZpbmZvLT5kaXJpKTsKKwkJZXJyID0gcGFyc2VfcmVwbHlfaW5mb19pbihwLCBlbmQsICZpbmZvLT5kaXJpLCBmZWF0dXJlcyk7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBvdXRfYmFkOwogCkBAIC0xMTQsNyArMTIyLDcgQEAKIAl9CiAKIAlpZiAoaW5mby0+aGVhZC0+aXNfdGFyZ2V0KSB7Ci0JCWVyciA9IHBhcnNlX3JlcGx5X2luZm9faW4ocCwgZW5kLCAmaW5mby0+dGFyZ2V0aSk7CisJCWVyciA9IHBhcnNlX3JlcGx5X2luZm9faW4ocCwgZW5kLCAmaW5mby0+dGFyZ2V0aSwgZmVhdHVyZXMpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gb3V0X2JhZDsKIAl9CkBAIC0xMzQsNyArMTQyLDggQEAKICAqIHBhcnNlIHJlYWRkaXIgcmVzdWx0cwogICovCiBzdGF0aWMgaW50IHBhcnNlX3JlcGx5X2luZm9fZGlyKHZvaWQgKipwLCB2b2lkICplbmQsCi0JCQkJc3RydWN0IGNlcGhfbWRzX3JlcGx5X2luZm9fcGFyc2VkICppbmZvKQorCQkJCXN0cnVjdCBjZXBoX21kc19yZXBseV9pbmZvX3BhcnNlZCAqaW5mbywKKwkJCQlpbnQgZmVhdHVyZXMpCiB7CiAJdTMyIG51bSwgaSA9IDA7CiAJaW50IGVycjsKQEAgLTE4Miw3ICsxOTEsNyBAQAogCQkqcCArPSBzaXplb2Yoc3RydWN0IGNlcGhfbWRzX3JlcGx5X2xlYXNlKTsKIAogCQkvKiBpbm9kZSAqLwotCQllcnIgPSBwYXJzZV9yZXBseV9pbmZvX2luKHAsIGVuZCwgJmluZm8tPmRpcl9pbltpXSk7CisJCWVyciA9IHBhcnNlX3JlcGx5X2luZm9faW4ocCwgZW5kLCAmaW5mby0+ZGlyX2luW2ldLCBmZWF0dXJlcyk7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBvdXRfYmFkOwogCQlpKys7CkBAIC0yMDUsNyArMjE0LDggQEAKICAqIHBhcnNlIGZjbnRsIEZfR0VUTEsgcmVzdWx0cwogICovCiBzdGF0aWMgaW50IHBhcnNlX3JlcGx5X2luZm9fZmlsZWxvY2sodm9pZCAqKnAsIHZvaWQgKmVuZCwKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgY2VwaF9tZHNfcmVwbHlfaW5mb19wYXJzZWQgKmluZm8pCisJCQkJICAgICBzdHJ1Y3QgY2VwaF9tZHNfcmVwbHlfaW5mb19wYXJzZWQgKmluZm8sCisJCQkJICAgICBpbnQgZmVhdHVyZXMpCiB7CiAJaWYgKCpwICsgc2l6ZW9mKCppbmZvLT5maWxlbG9ja19yZXBseSkgPiBlbmQpCiAJCWdvdG8gYmFkOwpAQCAtMjI1LDE5ICsyMzUsMjEgQEAKICAqIHBhcnNlIGV4dHJhIHJlc3VsdHMKICAqLwogc3RhdGljIGludCBwYXJzZV9yZXBseV9pbmZvX2V4dHJhKHZvaWQgKipwLCB2b2lkICplbmQsCi0gICAgICAgICAgICAgICAgc3RydWN0IGNlcGhfbWRzX3JlcGx5X2luZm9fcGFyc2VkICppbmZvKQorCQkJCSAgc3RydWN0IGNlcGhfbWRzX3JlcGx5X2luZm9fcGFyc2VkICppbmZvLAorCQkJCSAgaW50IGZlYXR1cmVzKQogewogCWlmIChpbmZvLT5oZWFkLT5vcCA9PSBDRVBIX01EU19PUF9HRVRGSUxFTE9DSykKLQkJcmV0dXJuIHBhcnNlX3JlcGx5X2luZm9fZmlsZWxvY2socCwgZW5kLCBpbmZvKTsKKwkJcmV0dXJuIHBhcnNlX3JlcGx5X2luZm9fZmlsZWxvY2socCwgZW5kLCBpbmZvLCBmZWF0dXJlcyk7CiAJZWxzZQotCQlyZXR1cm4gcGFyc2VfcmVwbHlfaW5mb19kaXIocCwgZW5kLCBpbmZvKTsKKwkJcmV0dXJuIHBhcnNlX3JlcGx5X2luZm9fZGlyKHAsIGVuZCwgaW5mbywgZmVhdHVyZXMpOwogfQogCiAvKgogICogcGFyc2UgZW50aXJlIG1kcyByZXBseQogICovCiBzdGF0aWMgaW50IHBhcnNlX3JlcGx5X2luZm8oc3RydWN0IGNlcGhfbXNnICptc2csCi0JCQkgICAgc3RydWN0IGNlcGhfbWRzX3JlcGx5X2luZm9fcGFyc2VkICppbmZvKQorCQkJICAgIHN0cnVjdCBjZXBoX21kc19yZXBseV9pbmZvX3BhcnNlZCAqaW5mbywKKwkJCSAgICBpbnQgZmVhdHVyZXMpCiB7CiAJdm9pZCAqcCwgKmVuZDsKIAl1MzIgbGVuOwpAQCAtMjUwLDcgKzI2Miw3IEBACiAJLyogdHJhY2UgKi8KIAljZXBoX2RlY29kZV8zMl9zYWZlKCZwLCBlbmQsIGxlbiwgYmFkKTsKIAlpZiAobGVuID4gMCkgewotCQllcnIgPSBwYXJzZV9yZXBseV9pbmZvX3RyYWNlKCZwLCBwK2xlbiwgaW5mbyk7CisJCWVyciA9IHBhcnNlX3JlcGx5X2luZm9fdHJhY2UoJnAsIHArbGVuLCBpbmZvLCBmZWF0dXJlcyk7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBvdXRfYmFkOwogCX0KQEAgLTI1OCw3ICsyNzAsNyBAQAogCS8qIGV4dHJhICovCiAJY2VwaF9kZWNvZGVfMzJfc2FmZSgmcCwgZW5kLCBsZW4sIGJhZCk7CiAJaWYgKGxlbiA+IDApIHsKLQkJZXJyID0gcGFyc2VfcmVwbHlfaW5mb19leHRyYSgmcCwgcCtsZW4sIGluZm8pOworCQllcnIgPSBwYXJzZV9yZXBseV9pbmZvX2V4dHJhKCZwLCBwK2xlbiwgaW5mbywgZmVhdHVyZXMpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gb3V0X2JhZDsKIAl9CkBAIC02NTQsNyArNjY2LDcgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIGRpciArIG5hbWUgKi8KIAkJCWlub2RlID0gZGlyOwotCQkJaGFzaCA9IHJlcS0+cl9kZW50cnktPmRfbmFtZS5oYXNoOworCQkJaGFzaCA9IGNlcGhfZGVudHJ5X2hhc2gocmVxLT5yX2RlbnRyeSk7CiAJCQlpc19oYXNoID0gdHJ1ZTsKIAkJfQogCX0KQEAgLTE2OTMsNyArMTcwNSw2IEBACiAJc3RydWN0IGNlcGhfbXNnICptc2c7CiAJaW50IGZsYWdzID0gMDsKIAotCXJlcS0+cl9tZHMgPSBtZHM7CiAJcmVxLT5yX2F0dGVtcHRzKys7CiAJaWYgKHJlcS0+cl9pbm9kZSkgewogCQlzdHJ1Y3QgY2VwaF9jYXAgKmNhcCA9CkBAIC0xNzgwLDYgKzE3OTEsOCBAQAogCQlnb3RvIGZpbmlzaDsKIAl9CiAKKwlwdXRfcmVxdWVzdF9zZXNzaW9uKHJlcSk7CisKIAltZHMgPSBfX2Nob29zZV9tZHMobWRzYywgcmVxKTsKIAlpZiAobWRzIDwgMCB8fAogCSAgICBjZXBoX21kc21hcF9nZXRfc3RhdGUobWRzYy0+bWRzbWFwLCBtZHMpIDwgQ0VQSF9NRFNfU1RBVEVfQUNUSVZFKSB7CkBAIC0xNzk3LDYgKzE4MTAsOCBAQAogCQkJZ290byBmaW5pc2g7CiAJCX0KIAl9CisJcmVxLT5yX3Nlc3Npb24gPSBnZXRfc2Vzc2lvbihzZXNzaW9uKTsKKwogCWRvdXQoImRvX3JlcXVlc3QgbWRzJWQgc2Vzc2lvbiAlcCBzdGF0ZSAlc1xuIiwgbWRzLCBzZXNzaW9uLAogCSAgICAgc2Vzc2lvbl9zdGF0ZV9uYW1lKHNlc3Npb24tPnNfc3RhdGUpKTsKIAlpZiAoc2Vzc2lvbi0+c19zdGF0ZSAhPSBDRVBIX01EU19TRVNTSU9OX09QRU4gJiYKQEAgLTE4MDksNyArMTgyNCw2IEBACiAJfQogCiAJLyogc2VuZCByZXF1ZXN0ICovCi0JcmVxLT5yX3Nlc3Npb24gPSBnZXRfc2Vzc2lvbihzZXNzaW9uKTsKIAlyZXEtPnJfcmVzZW5kX21kcyA9IC0xOyAgIC8qIGZvcmdldCBhbnkgcHJldmlvdXMgbWRzIGhpbnQgKi8KIAogCWlmIChyZXEtPnJfcmVxdWVzdF9zdGFydGVkID09IDApICAgLyogbm90ZSByZXF1ZXN0IHN0YXJ0IHRpbWUgKi8KQEAgLTE4NjMsNyArMTg3Nyw2IEBACiAJCWlmIChyZXEtPnJfc2Vzc2lvbiAmJgogCQkgICAgcmVxLT5yX3Nlc3Npb24tPnNfbWRzID09IG1kcykgewogCQkJZG91dCgiIGtpY2tpbmcgdGlkICVsbHVcbiIsIHJlcS0+cl90aWQpOwotCQkJcHV0X3JlcXVlc3Rfc2Vzc2lvbihyZXEpOwogCQkJX19kb19yZXF1ZXN0KG1kc2MsIHJlcSk7CiAJCX0KIAl9CkBAIC0yMDU2LDggKzIwNjksMTEgQEAKIAkJCWdvdG8gb3V0OwogCQl9IGVsc2UgIHsKIAkJCXN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpID0gY2VwaF9pbm9kZShyZXEtPnJfaW5vZGUpOwotCQkJc3RydWN0IGNlcGhfY2FwICpjYXAgPQotCQkJCWNlcGhfZ2V0X2NhcF9mb3JfbWRzKGNpLCByZXEtPnJfbWRzKTs7CisJCQlzdHJ1Y3QgY2VwaF9jYXAgKmNhcCA9IE5VTEw7CisKKwkJCWlmIChyZXEtPnJfc2Vzc2lvbikKKwkJCQljYXAgPSBjZXBoX2dldF9jYXBfZm9yX21kcyhjaSwKKwkJCQkJCSAgIHJlcS0+cl9zZXNzaW9uLT5zX21kcyk7CiAKIAkJCWRvdXQoImFscmVhZHkgdXNpbmcgYXV0aCIpOwogCQkJaWYgKCghY2FwIHx8IGNhcCAhPSBjaS0+aV9hdXRoX2NhcCkgfHwKQEAgLTIxMDEsNyArMjExNyw3IEBACiAKIAlkb3V0KCJoYW5kbGVfcmVwbHkgdGlkICVsbGQgcmVzdWx0ICVkXG4iLCB0aWQsIHJlc3VsdCk7CiAJcmluZm8gPSAmcmVxLT5yX3JlcGx5X2luZm87Ci0JZXJyID0gcGFyc2VfcmVwbHlfaW5mbyhtc2csIHJpbmZvKTsKKwllcnIgPSBwYXJzZV9yZXBseV9pbmZvKG1zZywgcmluZm8sIHNlc3Npb24tPnNfY29uLnBlZXJfZmVhdHVyZXMpOwogCW11dGV4X3VubG9jaygmbWRzYy0+bXV0ZXgpOwogCiAJbXV0ZXhfbG9jaygmc2Vzc2lvbi0+c19tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9jZXBoL21kc19jbGllbnQuaCBiL2ZzL2NlcGgvbWRzX2NsaWVudC5oCmluZGV4IGFhYmU1NjMuLjRlM2E5Y2MgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvbWRzX2NsaWVudC5oCisrKyBiL2ZzL2NlcGgvbWRzX2NsaWVudC5oCkBAIC0zNSw2ICszNSw3IEBACiAgKi8KIHN0cnVjdCBjZXBoX21kc19yZXBseV9pbmZvX2luIHsKIAlzdHJ1Y3QgY2VwaF9tZHNfcmVwbHlfaW5vZGUgKmluOworCXN0cnVjdCBjZXBoX2Rpcl9sYXlvdXQgZGlyX2xheW91dDsKIAl1MzIgc3ltbGlua19sZW47CiAJY2hhciAqc3ltbGluazsKIAl1MzIgeGF0dHJfbGVuOwpAQCAtMTY1LDcgKzE2Niw2IEBACiAJc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqcl9tZHNjOwogCiAJaW50IHJfb3A7ICAgICAgICAgICAgICAgICAgICAvKiBtZHMgb3AgY29kZSAqLwotCWludCByX21kczsKIAogCS8qIG9wZXJhdGlvbiBvbiB3aGF0PyAqLwogCXN0cnVjdCBpbm9kZSAqcl9pbm9kZTsgICAgICAgICAgICAgIC8qIGFyZzEgKi8KZGlmZiAtLWdpdCBhL2ZzL2NlcGgvc3VwZXIuYyBiL2ZzL2NlcGgvc3VwZXIuYwppbmRleCAwOGI0NjBhLi5iZjZmMGYzIDEwMDY0NAotLS0gYS9mcy9jZXBoL3N1cGVyLmMKKysrIGIvZnMvY2VwaC9zdXBlci5jCkBAIC00MjgsNyArNDI4LDggQEAKIAkJZ290byBmYWlsOwogCX0KIAlmc2MtPmNsaWVudC0+ZXh0cmFfbW9uX2Rpc3BhdGNoID0gZXh0cmFfbW9uX2Rpc3BhdGNoOwotCWZzYy0+Y2xpZW50LT5zdXBwb3J0ZWRfZmVhdHVyZXMgfD0gQ0VQSF9GRUFUVVJFX0ZMT0NLOworCWZzYy0+Y2xpZW50LT5zdXBwb3J0ZWRfZmVhdHVyZXMgfD0gQ0VQSF9GRUFUVVJFX0ZMT0NLIHwKKwkJQ0VQSF9GRUFUVVJFX0RJUkxBWU9VVEhBU0g7CiAJZnNjLT5jbGllbnQtPm1vbmMud2FudF9tZHNtYXAgPSAxOwogCiAJZnNjLT5tb3VudF9vcHRpb25zID0gZnNvcHQ7CkBAIC00NDMsMTMgKzQ0NCwxNyBAQAogCQlnb3RvIGZhaWxfY2xpZW50OwogCiAJZXJyID0gLUVOT01FTTsKLQlmc2MtPndiX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgiY2VwaC13cml0ZWJhY2siKTsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgY29uY3VycmVudCB3b3JrcyBjYW4gYmUgaGlnaCBidXQgdGhleSBkb24ndCBuZWVkCisJICogdG8gYmUgcHJvY2Vzc2VkIGluIHBhcmFsbGVsLCBsaW1pdCBjb25jdXJyZW5jeS4KKwkgKi8KKwlmc2MtPndiX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCJjZXBoLXdyaXRlYmFjayIsIDAsIDEpOwogCWlmIChmc2MtPndiX3dxID09IE5VTEwpCiAJCWdvdG8gZmFpbF9iZGk7Ci0JZnNjLT5wZ19pbnZfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiY2VwaC1wZy1pbnZhbGlkIik7CisJZnNjLT5wZ19pbnZfd3EgPSBhbGxvY193b3JrcXVldWUoImNlcGgtcGctaW52YWxpZCIsIDAsIDEpOwogCWlmIChmc2MtPnBnX2ludl93cSA9PSBOVUxMKQogCQlnb3RvIGZhaWxfd2Jfd3E7Ci0JZnNjLT50cnVuY193cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJjZXBoLXRydW5jIik7CisJZnNjLT50cnVuY193cSA9IGFsbG9jX3dvcmtxdWV1ZSgiY2VwaC10cnVuYyIsIDAsIDEpOwogCWlmIChmc2MtPnRydW5jX3dxID09IE5VTEwpCiAJCWdvdG8gZmFpbF9wZ19pbnZfd3E7CiAKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvc3VwZXIuaCBiL2ZzL2NlcGgvc3VwZXIuaAppbmRleCA0NTUzZDg4Li4yMGI5MDdkIDEwMDY0NAotLS0gYS9mcy9jZXBoL3N1cGVyLmgKKysrIGIvZnMvY2VwaC9zdXBlci5oCkBAIC0yMzksNiArMjM5LDcgQEAKIAl1bnNpZ25lZCBpX2NlcGhfZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBpX3JlbGVhc2VfY291bnQ7CiAKKwlzdHJ1Y3QgY2VwaF9kaXJfbGF5b3V0IGlfZGlyX2xheW91dDsKIAlzdHJ1Y3QgY2VwaF9maWxlX2xheW91dCBpX2xheW91dDsKIAljaGFyICppX3N5bWxpbms7CiAKQEAgLTc2OCw2ICs3NjksNyBAQAogZXh0ZXJuIHZvaWQgY2VwaF9kZW50cnlfbHJ1X3RvdWNoKHN0cnVjdCBkZW50cnkgKmRuKTsKIGV4dGVybiB2b2lkIGNlcGhfZGVudHJ5X2xydV9kZWwoc3RydWN0IGRlbnRyeSAqZG4pOwogZXh0ZXJuIHZvaWQgY2VwaF9pbnZhbGlkYXRlX2RlbnRyeV9sZWFzZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOworZXh0ZXJuIHVuc2lnbmVkIGNlcGhfZGVudHJ5X2hhc2goc3RydWN0IGRlbnRyeSAqZG4pOwogCiAvKgogICogb3VyIGRfb3BzIHZhcnkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGlub2RlIGlzIGxpdmUsCmRpZmYgLS1naXQgYS9mcy9jaGFyX2Rldi5jIGIvZnMvY2hhcl9kZXYuYwppbmRleCBlNWI5ZGY5Li42ZTk5YjlkIDEwMDY0NAotLS0gYS9mcy9jaGFyX2Rldi5jCisrKyBiL2ZzL2NoYXJfZGV2LmMKQEAgLTQxNywxOCArNDE3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgY2Rldl9pbmRleChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWludCBpZHg7Ci0Jc3RydWN0IGtvYmplY3QgKmtvYmo7Ci0KLQlrb2JqID0ga29ial9sb29rdXAoY2Rldl9tYXAsIGlub2RlLT5pX3JkZXYsICZpZHgpOwotCWlmICgha29iaikKLQkJcmV0dXJuIC0xOwotCWtvYmplY3RfcHV0KGtvYmopOwotCXJldHVybiBpZHg7Ci19Ci0KIHZvaWQgY2RfZm9yZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3Bpbl9sb2NrKCZjZGV2X2xvY2spOwpAQCAtNTgyLDcgKzU3MCw2IEBACiBFWFBPUlRfU1lNQk9MKGNkZXZfYWxsb2MpOwogRVhQT1JUX1NZTUJPTChjZGV2X2RlbCk7CiBFWFBPUlRfU1lNQk9MKGNkZXZfYWRkKTsKLUVYUE9SVF9TWU1CT0woY2Rldl9pbmRleCk7CiBFWFBPUlRfU1lNQk9MKF9fcmVnaXN0ZXJfY2hyZGV2KTsKIEVYUE9SVF9TWU1CT0woX191bnJlZ2lzdGVyX2NocmRldik7CiBFWFBPUlRfU1lNQk9MKGRpcmVjdGx5X21hcHBhYmxlX2NkZXZfYmRpKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IDVlNzA3NWQuLmQ5ZjY1MmEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtMTc0LDYgKzE3NCwxMiBAQAogCQlnb3RvIG91dF9ub19yb290OwogCX0KIAorCS8qIGRvIHRoYXQgKmFmdGVyKiBkX2FsbG9jX3Jvb3QoKSAtIHdlIHdhbnQgTlVMTCAtPmRfb3AgZm9yIHJvb3QgaGVyZSAqLworCWlmIChjaWZzX3NiX21hc3Rlcl90Y29uKGNpZnNfc2IpLT5ub2Nhc2UpCisJCXNiLT5zX2Rfb3AgPSAmY2lmc19jaV9kZW50cnlfb3BzOworCWVsc2UKKwkJc2ItPnNfZF9vcCA9ICZjaWZzX2RlbnRyeV9vcHM7CisKICNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKIAlpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX1NFUlZFUl9JTlVNKSB7CiAJCWNGWUkoMSwgImV4cG9ydCBvcHMgc3VwcG9ydGVkIik7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Rpci5jIGIvZnMvY2lmcy9kaXIuYwppbmRleCAyZTc3MzgyLi4xZTk1ZGQ2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Rpci5jCisrKyBiL2ZzL2NpZnMvZGlyLmMKQEAgLTEzMCwxNyArMTMwLDYgQEAKIAlyZXR1cm4gZnVsbF9wYXRoOwogfQogCi1zdGF0aWMgdm9pZCBzZXR1cF9jaWZzX2RlbnRyeShzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAotCQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksCi0JCQkgICAgICBzdHJ1Y3QgaW5vZGUgKm5ld2lub2RlKQotewotCWlmICh0Y29uLT5ub2Nhc2UpCi0JCWRfc2V0X2Rfb3AoZGlyZW50cnksICZjaWZzX2NpX2RlbnRyeV9vcHMpOwotCWVsc2UKLQkJZF9zZXRfZF9vcChkaXJlbnRyeSwgJmNpZnNfZGVudHJ5X29wcyk7Ci0JZF9pbnN0YW50aWF0ZShkaXJlbnRyeSwgbmV3aW5vZGUpOwotfQotCiAvKiBJbm9kZSBvcGVyYXRpb25zIGluIHNpbWlsYXIgb3JkZXIgdG8gaG93IHRoZXkgYXBwZWFyIGluIExpbnV4IGZpbGUgZnMuaCAqLwogCiBpbnQKQEAgLTMyNyw3ICszMTYsNyBAQAogCiBjaWZzX2NyZWF0ZV9zZXRfZGVudHJ5OgogCWlmIChyYyA9PSAwKQotCQlzZXR1cF9jaWZzX2RlbnRyeSh0Y29uLCBkaXJlbnRyeSwgbmV3aW5vZGUpOworCQlkX2luc3RhbnRpYXRlKGRpcmVudHJ5LCBuZXdpbm9kZSk7CiAJZWxzZQogCQljRllJKDEsICJDcmVhdGUgd29ya2VkLCBnZXRfaW5vZGVfaW5mbyBmYWlsZWQgcmMgPSAlZCIsIHJjKTsKIApAQCAtNDE4LDEwICs0MDcsNiBAQAogCiAJCXJjID0gY2lmc19nZXRfaW5vZGVfaW5mb191bml4KCZuZXdpbm9kZSwgZnVsbF9wYXRoLAogCQkJCQkJaW5vZGUtPmlfc2IsIHhpZCk7Ci0JCWlmIChwVGNvbi0+bm9jYXNlKQotCQkJZF9zZXRfZF9vcChkaXJlbnRyeSwgJmNpZnNfY2lfZGVudHJ5X29wcyk7Ci0JCWVsc2UKLQkJCWRfc2V0X2Rfb3AoZGlyZW50cnksICZjaWZzX2RlbnRyeV9vcHMpOwogCiAJCWlmIChyYyA9PSAwKQogCQkJZF9pbnN0YW50aWF0ZShkaXJlbnRyeSwgbmV3aW5vZGUpOwpAQCAtNjAxLDEwICs1ODYsNiBAQAogCQkJCXBhcmVudF9kaXJfaW5vZGUtPmlfc2IsIHhpZCwgTlVMTCk7CiAKIAlpZiAoKHJjID09IDApICYmIChuZXdJbm9kZSAhPSBOVUxMKSkgewotCQlpZiAocFRjb24tPm5vY2FzZSkKLQkJCWRfc2V0X2Rfb3AoZGlyZW50cnksICZjaWZzX2NpX2RlbnRyeV9vcHMpOwotCQllbHNlCi0JCQlkX3NldF9kX29wKGRpcmVudHJ5LCAmY2lmc19kZW50cnlfb3BzKTsKIAkJZF9hZGQoZGlyZW50cnksIG5ld0lub2RlKTsKIAkJaWYgKHBvc2l4X29wZW4pIHsKIAkJCWZpbHAgPSBsb29rdXBfaW5zdGFudGlhdGVfZmlscChuZCwgZGlyZW50cnksCkBAIC02MzEsMTAgKzYxMiw2IEBACiAJfSBlbHNlIGlmIChyYyA9PSAtRU5PRU5UKSB7CiAJCXJjID0gMDsKIAkJZGlyZW50cnktPmRfdGltZSA9IGppZmZpZXM7Ci0JCWlmIChwVGNvbi0+bm9jYXNlKQotCQkJZF9zZXRfZF9vcChkaXJlbnRyeSwgJmNpZnNfY2lfZGVudHJ5X29wcyk7Ci0JCWVsc2UKLQkJCWRfc2V0X2Rfb3AoZGlyZW50cnksICZjaWZzX2RlbnRyeV9vcHMpOwogCQlkX2FkZChkaXJlbnRyeSwgTlVMTCk7CiAJLyoJaWYgaXQgd2FzIG9uY2UgYSBkaXJlY3RvcnkgKGJ1dCBob3cgY2FuIHdlIHRlbGw/KSB3ZSBjb3VsZCBkbwogCQlzaHJpbmtfZGNhY2hlX3BhcmVudChkaXJlbnRyeSk7ICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggMGM3ZTM2OS4uYjA2YjYwNiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtMTMyNCwxMCArMTMyNCw2IEBACiAvKkJCIGNoZWNrIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfU0VUX1VJRCApIHRvIHNlZSBpZiBuZWVkCiAJdG8gc2V0IHVpZC9naWQgKi8KIAkJCWluY19ubGluayhpbm9kZSk7Ci0JCQlpZiAocFRjb24tPm5vY2FzZSkKLQkJCQlkX3NldF9kX29wKGRpcmVudHJ5LCAmY2lmc19jaV9kZW50cnlfb3BzKTsKLQkJCWVsc2UKLQkJCQlkX3NldF9kX29wKGRpcmVudHJ5LCAmY2lmc19kZW50cnlfb3BzKTsKIAogCQkJY2lmc191bml4X2Jhc2ljX3RvX2ZhdHRyKCZmYXR0ciwgcEluZm8sIGNpZnNfc2IpOwogCQkJY2lmc19maWxsX3VuaXF1ZWlkKGlub2RlLT5pX3NiLCAmZmF0dHIpOwpAQCAtMTM2OCwxMCArMTM2NCw2IEBACiAJCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm8oJm5ld2lub2RlLCBmdWxsX3BhdGgsIE5VTEwsCiAJCQkJCQkgaW5vZGUtPmlfc2IsIHhpZCwgTlVMTCk7CiAKLQkJaWYgKHBUY29uLT5ub2Nhc2UpCi0JCQlkX3NldF9kX29wKGRpcmVudHJ5LCAmY2lmc19jaV9kZW50cnlfb3BzKTsKLQkJZWxzZQotCQkJZF9zZXRfZF9vcChkaXJlbnRyeSwgJmNpZnNfZGVudHJ5X29wcyk7CiAJCWRfaW5zdGFudGlhdGUoZGlyZW50cnksIG5ld2lub2RlKTsKIAkJIC8qIHNldHRpbmcgbmxpbmsgbm90IG5lY2Vzc2FyeSBleGNlcHQgaW4gY2FzZXMgd2hlcmUgd2UKIAkJICAqIGZhaWxlZCB0byBnZXQgaXQgZnJvbSB0aGUgc2VydmVyIG9yIHdhcyBzZXQgYm9ndXMgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbGluay5jIGIvZnMvY2lmcy9saW5rLmMKaW5kZXggZmUyZjZhOS4uMzA2NzY5ZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9saW5rLmMKKysrIGIvZnMvY2lmcy9saW5rLmMKQEAgLTUyNCwxMCArNTI0LDYgQEAKIAkJCWNGWUkoMSwgIkNyZWF0ZSBzeW1saW5rIG9rLCBnZXRpbm9kZWluZm8gZmFpbCByYyA9ICVkIiwKIAkJCSAgICAgIHJjKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChwVGNvbi0+bm9jYXNlKQotCQkJCWRfc2V0X2Rfb3AoZGlyZW50cnksICZjaWZzX2NpX2RlbnRyeV9vcHMpOwotCQkJZWxzZQotCQkJCWRfc2V0X2Rfb3AoZGlyZW50cnksICZjaWZzX2RlbnRyeV9vcHMpOwogCQkJZF9pbnN0YW50aWF0ZShkaXJlbnRyeSwgbmV3aW5vZGUpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9yZWFkZGlyLmMgYi9mcy9jaWZzL3JlYWRkaXIuYwppbmRleCA3NmIxYjM3Li43ZjI1Y2MzIDEwMDY0NAotLS0gYS9mcy9jaWZzL3JlYWRkaXIuYworKysgYi9mcy9jaWZzL3JlYWRkaXIuYwpAQCAtMTAyLDExICsxMDIsNiBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoY2lmc19zYl9tYXN0ZXJfdGNvbihDSUZTX1NCKHNiKSktPm5vY2FzZSkKLQkJZF9zZXRfZF9vcChkZW50cnksICZjaWZzX2NpX2RlbnRyeV9vcHMpOwotCWVsc2UKLQkJZF9zZXRfZF9vcChkZW50cnksICZjaWZzX2RlbnRyeV9vcHMpOwotCiAJYWxpYXMgPSBkX21hdGVyaWFsaXNlX3VuaXF1ZShkZW50cnksIGlub2RlKTsKIAlpZiAoYWxpYXMgIT0gTlVMTCkgewogCQlkcHV0KGRlbnRyeSk7CmRpZmYgLS1naXQgYS9mcy9jb2RhL2NhY2hlLmMgYi9mcy9jb2RhL2NhY2hlLmMKaW5kZXggNTUyNWUxYy4uNjkwMTU3OCAxMDA2NDQKLS0tIGEvZnMvY29kYS9jYWNoZS5jCisrKyBiL2ZzL2NvZGEvY2FjaGUuYwpAQCAtMjAsMTAgKzIwLDkgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaW5jbHVkZSA8bGludXgvY29kYS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvZGFfbGludXguaD4KICNpbmNsdWRlIDxsaW51eC9jb2RhX3BzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29kYV9mc19pLmg+Ci0jaW5jbHVkZSA8bGludXgvY29kYV9jYWNoZS5oPgorI2luY2x1ZGUgImNvZGFfbGludXguaCIKKyNpbmNsdWRlICJjb2RhX2NhY2hlLmgiCiAKIHN0YXRpYyBhdG9taWNfdCBwZXJtaXNzaW9uX2Vwb2NoID0gQVRPTUlDX0lOSVQoMCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvY25vZGUuYyBiL2ZzL2NvZGEvY25vZGUuYwppbmRleCA2MDIyNDA1Li42NDc1ODc3IDEwMDY0NAotLS0gYS9mcy9jb2RhL2Nub2RlLmMKKysrIGIvZnMvY29kYS9jbm9kZS5jCkBAIC03LDkgKzcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2NvZGEuaD4KLSNpbmNsdWRlIDxsaW51eC9jb2RhX2xpbnV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29kYV9mc19pLmg+CiAjaW5jbHVkZSA8bGludXgvY29kYV9wc2Rldi5oPgorI2luY2x1ZGUgImNvZGFfbGludXguaCIKIAogc3RhdGljIGlubGluZSBpbnQgY29kYV9maWRlcShzdHJ1Y3QgQ29kYUZpZCAqZmlkMSwgc3RydWN0IENvZGFGaWQgKmZpZDIpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvZGFfY2FjaGUuaCBiL2ZzL2NvZGEvY29kYV9jYWNoZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2xpbnV4L2NvZGFfY2FjaGUuaApyZW5hbWUgdG8gZnMvY29kYS9jb2RhX2NhY2hlLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29kYV9mc19pLmggYi9mcy9jb2RhL2NvZGFfZnNfaS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2xpbnV4L2NvZGFfZnNfaS5oCnJlbmFtZSB0byBmcy9jb2RhL2NvZGFfZnNfaS5oCmRpZmYgLS1naXQgYS9mcy9jb2RhL2NvZGFfbGludXguYyBiL2ZzL2NvZGEvY29kYV9saW51eC5jCmluZGV4IGJmNGEzZmQuLjJiZGJjYzEgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvY29kYV9saW51eC5jCisrKyBiL2ZzL2NvZGEvY29kYV9saW51eC5jCkBAIC0xNyw5ICsxNyw4IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jb2RhLmg+Ci0jaW5jbHVkZSA8bGludXgvY29kYV9saW51eC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvZGFfcHNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9jb2RhX2ZzX2kuaD4KKyNpbmNsdWRlICJjb2RhX2xpbnV4LmgiCiAKIC8qIGluaXRpYWxpemUgdGhlIGRlYnVnZ2luZyB2YXJpYWJsZXMgKi8KIGludCBjb2RhX2Zha2Vfc3RhdGZzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2RhX2xpbnV4LmggYi9mcy9jb2RhL2NvZGFfbGludXguaApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2xpbnV4L2NvZGFfbGludXguaApyZW5hbWUgdG8gZnMvY29kYS9jb2RhX2xpbnV4LmgKaW5kZXggNGNjYzU5Yy4uOWIwYzUzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb2RhX2xpbnV4LmgKKysrIGIvZnMvY29kYS9jb2RhX2xpbnV4LmgKQEAgLTIwLDEzICsyMCwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4JCQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb2RhX2ZzX2kuaD4KKyNpbmNsdWRlICJjb2RhX2ZzX2kuaCIKIAogLyogb3BlcmF0aW9ucyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNvZGFfZGlyX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29kYV9maWxlX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29kYV9pb2N0bF9pbm9kZV9vcGVyYXRpb25zOwogCitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNvZGFfZGVudHJ5X29wZXJhdGlvbnM7CisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGNvZGFfZmlsZV9hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgY29kYV9zeW1saW5rX2FvcHM7CiAKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvZGlyLmMgYi9mcy9jb2RhL2Rpci5jCmluZGV4IDI5YmFkZDkuLjJiOGRhZTQgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvZGlyLmMKKysrIGIvZnMvY29kYS9kaXIuYwpAQCAtMjMsMTAgKzIzLDkgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8bGludXgvY29kYS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvZGFfbGludXguaD4KICNpbmNsdWRlIDxsaW51eC9jb2RhX3BzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29kYV9mc19pLmg+Ci0jaW5jbHVkZSA8bGludXgvY29kYV9jYWNoZS5oPgorI2luY2x1ZGUgImNvZGFfbGludXguaCIKKyNpbmNsdWRlICJjb2RhX2NhY2hlLmgiCiAKICNpbmNsdWRlICJjb2RhX2ludC5oIgogCkBAIC02MSw3ICs2MCw3IEBACiB9CiAjZGVmaW5lIENPREFfRUlPX0VSUk9SICgodm9pZCAqKSAoY29kYV9yZXR1cm5fRUlPKSkKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjb2RhX2RlbnRyeV9vcGVyYXRpb25zID0KK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjb2RhX2RlbnRyeV9vcGVyYXRpb25zID0KIHsKIAkuZF9yZXZhbGlkYXRlCT0gY29kYV9kZW50cnlfcmV2YWxpZGF0ZSwKIAkuZF9kZWxldGUJPSBjb2RhX2RlbnRyeV9kZWxldGUsCkBAIC0xMjYsOCArMTI1LDYgQEAKIAkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCiBleGl0OgotCWRfc2V0X2Rfb3AoZW50cnksICZjb2RhX2RlbnRyeV9vcGVyYXRpb25zKTsKLQogCWlmIChpbm9kZSAmJiAodHlwZSAmIENPREFfTk9DQUNIRSkpCiAJCWNvZGFfZmxhZ19pbm9kZShpbm9kZSwgQ19WQVRUUiB8IENfUFVSR0UpOwogCmRpZmYgLS1naXQgYS9mcy9jb2RhL2ZpbGUuYyBiL2ZzL2NvZGEvZmlsZS5jCmluZGV4IGM4YjUwYmEuLjA0MzMwNTcgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvZmlsZS5jCisrKyBiL2ZzL2NvZGEvZmlsZS5jCkBAIC0yMSwxMCArMjEsOSBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jb2RhLmg+Ci0jaW5jbHVkZSA8bGludXgvY29kYV9saW51eC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvZGFfZnNfaS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvZGFfcHNkZXYuaD4KIAorI2luY2x1ZGUgImNvZGFfbGludXguaCIKICNpbmNsdWRlICJjb2RhX2ludC5oIgogCiBzdGF0aWMgc3NpemVfdApkaWZmIC0tZ2l0IGEvZnMvY29kYS9pbm9kZS5jIGIvZnMvY29kYS9pbm9kZS5jCmluZGV4IDUwZGM3ZDEuLjg3MWIyNzcgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvaW5vZGUuYworKysgYi9mcy9jb2RhL2lub2RlLmMKQEAgLTI4LDEwICsyOCw5IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSA8bGludXgvY29kYS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvZGFfbGludXguaD4KICNpbmNsdWRlIDxsaW51eC9jb2RhX3BzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29kYV9mc19pLmg+Ci0jaW5jbHVkZSA8bGludXgvY29kYV9jYWNoZS5oPgorI2luY2x1ZGUgImNvZGFfbGludXguaCIKKyNpbmNsdWRlICJjb2RhX2NhY2hlLmgiCiAKICNpbmNsdWRlICJjb2RhX2ludC5oIgogCkBAIC00NSw3ICs0NCw3IEBACiBzdGF0aWMgc3RydWN0IGlub2RlICpjb2RhX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IGNvZGFfaW5vZGVfaW5mbyAqZWk7Ci0JZWkgPSAoc3RydWN0IGNvZGFfaW5vZGVfaW5mbyAqKWttZW1fY2FjaGVfYWxsb2MoY29kYV9pbm9kZV9jYWNoZXAsIEdGUF9LRVJORUwpOworCWVpID0ga21lbV9jYWNoZV9hbGxvYyhjb2RhX2lub2RlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlaSkKIAkJcmV0dXJuIE5VTEw7CiAJbWVtc2V0KCZlaS0+Y19maWQsIDAsIHNpemVvZihzdHJ1Y3QgQ29kYUZpZCkpOwpAQCAtMTkzLDYgKzE5Miw3IEBACiAJc2ItPnNfYmxvY2tzaXplX2JpdHMgPSAxMjsKIAlzYi0+c19tYWdpYyA9IENPREFfU1VQRVJfTUFHSUM7CiAJc2ItPnNfb3AgPSAmY29kYV9zdXBlcl9vcGVyYXRpb25zOworCXNiLT5zX2Rfb3AgPSAmY29kYV9kZW50cnlfb3BlcmF0aW9uczsKIAlzYi0+c19iZGkgPSAmdmMtPmJkaTsKIAogCS8qIGdldCByb290IGZpZCBmcm9tIFZlbnVzOiB0aGlzIG5lZWRzIHRoZSByb290IGlub2RlICovCmRpZmYgLS1naXQgYS9mcy9jb2RhL3Bpb2N0bC5jIGIvZnMvY29kYS9waW9jdGwuYwppbmRleCA3NDFmMGJkLi42Y2JiM2FmIDEwMDY0NAotLS0gYS9mcy9jb2RhL3Bpb2N0bC5jCisrKyBiL2ZzL2NvZGEvcGlvY3RsLmMKQEAgLTE5LDEwICsxOSwxMCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jb2RhLmg+Ci0jaW5jbHVkZSA8bGludXgvY29kYV9saW51eC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvZGFfZnNfaS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvZGFfcHNkZXYuaD4KIAorI2luY2x1ZGUgImNvZGFfbGludXguaCIKKwogLyogcGlvY3RsIG9wcyAqLwogc3RhdGljIGludCBjb2RhX2lvY3RsX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncyk7CiBzdGF0aWMgbG9uZyBjb2RhX3Bpb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvcHNkZXYuYyBiL2ZzL2NvZGEvcHNkZXYuYwppbmRleCA2MjY0N2E4Li44ZjYxNmUwIDEwMDY0NAotLS0gYS9mcy9jb2RhL3BzZGV2LmMKKysrIGIvZnMvY29kYS9wc2Rldi5jCkBAIC00MywxMCArNDMsMTAgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8bGludXgvY29kYS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvZGFfbGludXguaD4KLSNpbmNsdWRlIDxsaW51eC9jb2RhX2ZzX2kuaD4KICNpbmNsdWRlIDxsaW51eC9jb2RhX3BzZGV2Lmg+CiAKKyNpbmNsdWRlICJjb2RhX2xpbnV4LmgiCisKICNpbmNsdWRlICJjb2RhX2ludC5oIgogCiAvKiBzdGF0aXN0aWNzICovCmRpZmYgLS1naXQgYS9mcy9jb2RhL3N5bWxpbmsuYyBiL2ZzL2NvZGEvc3ltbGluay5jCmluZGV4IGFmNzhmMDAuLmFiOTRlZjYgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvc3ltbGluay5jCisrKyBiL2ZzL2NvZGEvc3ltbGluay5jCkBAIC0xNiw5ICsxNiw5IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogCiAjaW5jbHVkZSA8bGludXgvY29kYS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvZGFfbGludXguaD4KICNpbmNsdWRlIDxsaW51eC9jb2RhX3BzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29kYV9mc19pLmg+CisKKyNpbmNsdWRlICJjb2RhX2xpbnV4LmgiCiAKIHN0YXRpYyBpbnQgY29kYV9zeW1saW5rX2ZpbGxlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CmRpZmYgLS1naXQgYS9mcy9jb2RhL3VwY2FsbC5jIGIvZnMvY29kYS91cGNhbGwuYwppbmRleCBjMzU2M2NhLi45NzI3ZTBjIDEwMDY0NAotLS0gYS9mcy9jb2RhL3VwY2FsbC5jCisrKyBiL2ZzL2NvZGEvdXBjYWxsLmMKQEAgLTMzLDEwICszMyw5IEBACiAjaW5jbHVkZSA8bGludXgvdmZzLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jb2RhLmg+Ci0jaW5jbHVkZSA8bGludXgvY29kYV9saW51eC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvZGFfcHNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9jb2RhX2ZzX2kuaD4KLSNpbmNsdWRlIDxsaW51eC9jb2RhX2NhY2hlLmg+CisjaW5jbHVkZSAiY29kYV9saW51eC5oIgorI2luY2x1ZGUgImNvZGFfY2FjaGUuaCIKIAogI2luY2x1ZGUgImNvZGFfaW50LmgiCiAKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmggYi9mcy9jb25maWdmcy9jb25maWdmc19pbnRlcm5hbC5oCmluZGV4IDAyNmNmNjguLjgyYmRhOGYgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmgKKysrIGIvZnMvY29uZmlnZnMvY29uZmlnZnNfaW50ZXJuYWwuaApAQCAtOTAsNiArOTAsNyBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmluX2ZvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29uZmlnZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29uZmlnZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjb25maWdmc19kZW50cnlfb3BzOwogCiBleHRlcm4gaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICBjb25zdCBjaGFyICpzeW1uYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2Rpci5jIGIvZnMvY29uZmlnZnMvZGlyLmMKaW5kZXggMzY2MzdhOC4uOTBmZjNjYiAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvZGlyLmMKKysrIGIvZnMvY29uZmlnZnMvZGlyLmMKQEAgLTcyLDcgKzcyLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjb25maWdmc19kZW50cnlfb3BzID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNvbmZpZ2ZzX2RlbnRyeV9vcHMgPSB7CiAJLmRfaXB1dAkJPSBjb25maWdmc19kX2lwdXQsCiAJLyogc2ltcGxlX2RlbGV0ZV9kZW50cnkoKSBpc24ndCBleHBvcnRlZCAqLwogCS5kX2RlbGV0ZQk9IGNvbmZpZ2ZzX2RfZGVsZXRlLApAQCAtNDQyLDcgKzQ0Miw2IEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlkX3NldF9kX29wKGRlbnRyeSwgJmNvbmZpZ2ZzX2RlbnRyeV9vcHMpOwogCWRfcmVoYXNoKGRlbnRyeSk7CiAKIAlyZXR1cm4gMDsKQEAgLTQ4OSw3ICs0ODgsNiBAQAogCQkgKi8KIAkJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+IE5BTUVfTUFYKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7Ci0JCWRfc2V0X2Rfb3AoZGVudHJ5LCAmY29uZmlnZnNfZGVudHJ5X29wcyk7CiAJCWRfYWRkKGRlbnRyeSwgTlVMTCk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTY4Myw3ICs2ODEsNiBAQAogCXJldCA9IC1FTk9NRU07CiAJY2hpbGQgPSBkX2FsbG9jKHBhcmVudCwgJm5hbWUpOwogCWlmIChjaGlsZCkgewotCQlkX3NldF9kX29wKGNoaWxkLCAmY29uZmlnZnNfZGVudHJ5X29wcyk7CiAJCWRfYWRkKGNoaWxkLCBOVUxMKTsKIAogCQlyZXQgPSBjb25maWdmc19hdHRhY2hfZ3JvdXAoJnBhcmVudF9ncm91cC0+Y2dfaXRlbSwKQEAgLTE2ODEsNyArMTY3OCw2IEBACiAJZXJyID0gLUVOT01FTTsKIAlkZW50cnkgPSBkX2FsbG9jKGNvbmZpZ2ZzX3NiLT5zX3Jvb3QsICZuYW1lKTsKIAlpZiAoZGVudHJ5KSB7Ci0JCWRfc2V0X2Rfb3AoZGVudHJ5LCAmY29uZmlnZnNfZGVudHJ5X29wcyk7CiAJCWRfYWRkKGRlbnRyeSwgTlVMTCk7CiAKIAkJZXJyID0gY29uZmlnZnNfYXR0YWNoX2dyb3VwKHNkLT5zX2VsZW1lbnQsICZncm91cC0+Y2dfaXRlbSwKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL21vdW50LmMgYi9mcy9jb25maWdmcy9tb3VudC5jCmluZGV4IDdkMzYwN2YuLmVjYzYyMTcgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL21vdW50LmMKKysrIGIvZnMvY29uZmlnZnMvbW91bnQuYwpAQCAtMTAxLDYgKzEwMSw3IEBACiAJY29uZmlnZnNfcm9vdF9ncm91cC5jZ19pdGVtLmNpX2RlbnRyeSA9IHJvb3Q7CiAJcm9vdC0+ZF9mc2RhdGEgPSAmY29uZmlnZnNfcm9vdDsKIAlzYi0+c19yb290ID0gcm9vdDsKKwlzYi0+c19kX29wID0gJmNvbmZpZ2ZzX2RlbnRyeV9vcHM7IC8qIHRoZSByZXN0IGdldCB0aGF0ICovCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2NyYW1mcy9pbm9kZS5jIGIvZnMvY3JhbWZzL2lub2RlLmMKaW5kZXggMzJmZDVmZS4uZTE0MTkzOSAxMDA2NDQKLS0tIGEvZnMvY3JhbWZzL2lub2RlLmMKKysrIGIvZnMvY3JhbWZzL2lub2RlLmMKQEAgLTM0LDU3ICszNCw4MSBAQAogc3RhdGljIERFRklORV9NVVRFWChyZWFkX211dGV4KTsKIAogCi0vKiBUaGVzZSB0d28gbWFjcm9zIG1heSBjaGFuZ2UgaW4gZnV0dXJlLCB0byBwcm92aWRlIGJldHRlciBzdF9pbm8KLSAgIHNlbWFudGljcy4gKi8KLSNkZWZpbmUgQ1JBTUlOTyh4KQkoKCh4KS0+b2Zmc2V0ICYmICh4KS0+c2l6ZSk/KHgpLT5vZmZzZXQ8PDI6MSkKKy8qIFRoZXNlIG1hY3JvcyBtYXkgY2hhbmdlIGluIGZ1dHVyZSwgdG8gcHJvdmlkZSBiZXR0ZXIgc3RfaW5vIHNlbWFudGljcy4gKi8KICNkZWZpbmUgT0ZGU0VUKHgpCSgoeCktPmlfaW5vKQogCi1zdGF0aWMgdm9pZCBzZXR1cF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgY3JhbWZzX2lub2RlICogY3JhbWZzX2lub2RlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgY3JhbWlubyhzdHJ1Y3QgY3JhbWZzX2lub2RlICpjaW5vLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogeworCWlmICghY2luby0+b2Zmc2V0KQorCQlyZXR1cm4gb2Zmc2V0ICsgMTsKKwlpZiAoIWNpbm8tPnNpemUpCisJCXJldHVybiBvZmZzZXQgKyAxOworCisJLyoKKwkgKiBUaGUgZmlsZSBtb2RlIHRlc3QgZml4ZXMgYnVnZ3kgbWtjcmFtZnMgaW1wbGVtZW50YXRpb25zIHdoZXJlCisJICogY3JhbWZzX2lub2RlLT5vZmZzZXQgaXMgc2V0IHRvIGEgbm9uIHplcm8gdmFsdWUgZm9yIGVudHJpZXMKKwkgKiB3aGljaCBkaWQgbm90IGNvbnRhaW4gZGF0YSwgbGlrZSBkZXZpY2VzIG5vZGUgYW5kIGZpZm9zLgorCSAqLworCXN3aXRjaCAoY2luby0+bW9kZSAmIFNfSUZNVCkgeworCWNhc2UgU19JRlJFRzoKKwljYXNlIFNfSUZESVI6CisJY2FzZSBTX0lGTE5LOgorCQlyZXR1cm4gY2luby0+b2Zmc2V0IDw8IDI7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBvZmZzZXQgKyAxOworfQorCitzdGF0aWMgc3RydWN0IGlub2RlICpnZXRfY3JhbWZzX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJc3RydWN0IGNyYW1mc19pbm9kZSAqY3JhbWZzX2lub2RlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RhdGljIHN0cnVjdCB0aW1lc3BlYyB6ZXJvdGltZTsKKworCWlub2RlID0gaWdldF9sb2NrZWQoc2IsIGNyYW1pbm8oY3JhbWZzX2lub2RlLCBvZmZzZXQpKTsKKwlpZiAoIWlub2RlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSkKKwkJcmV0dXJuIGlub2RlOworCisJc3dpdGNoIChjcmFtZnNfaW5vZGUtPm1vZGUgJiBTX0lGTVQpIHsKKwljYXNlIFNfSUZSRUc6CisJCWlub2RlLT5pX2ZvcCA9ICZnZW5lcmljX3JvX2ZvcHM7CisJCWlub2RlLT5pX2RhdGEuYV9vcHMgPSAmY3JhbWZzX2FvcHM7CisJCWJyZWFrOworCWNhc2UgU19JRkRJUjoKKwkJaW5vZGUtPmlfb3AgPSAmY3JhbWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9mb3AgPSAmY3JhbWZzX2RpcmVjdG9yeV9vcGVyYXRpb25zOworCQlicmVhazsKKwljYXNlIFNfSUZMTks6CisJCWlub2RlLT5pX29wID0gJnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9kYXRhLmFfb3BzID0gJmNyYW1mc19hb3BzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGNyYW1mc19pbm9kZS0+bW9kZSwKKwkJCQlvbGRfZGVjb2RlX2RldihjcmFtZnNfaW5vZGUtPnNpemUpKTsKKwl9CisKIAlpbm9kZS0+aV9tb2RlID0gY3JhbWZzX2lub2RlLT5tb2RlOwogCWlub2RlLT5pX3VpZCA9IGNyYW1mc19pbm9kZS0+dWlkOwotCWlub2RlLT5pX3NpemUgPSBjcmFtZnNfaW5vZGUtPnNpemU7Ci0JaW5vZGUtPmlfYmxvY2tzID0gKGNyYW1mc19pbm9kZS0+c2l6ZSAtIDEpIC8gNTEyICsgMTsKIAlpbm9kZS0+aV9naWQgPSBjcmFtZnNfaW5vZGUtPmdpZDsKKworCS8qIGlmIHRoZSBsb3dlciAyIGJpdHMgYXJlIHplcm8sIHRoZSBpbm9kZSBjb250YWlucyBkYXRhICovCisJaWYgKCEoaW5vZGUtPmlfaW5vICYgMykpIHsKKwkJaW5vZGUtPmlfc2l6ZSA9IGNyYW1mc19pbm9kZS0+c2l6ZTsKKwkJaW5vZGUtPmlfYmxvY2tzID0gKGNyYW1mc19pbm9kZS0+c2l6ZSAtIDEpIC8gNTEyICsgMTsKKwl9CisKIAkvKiBTdHJ1Y3QgY29weSBpbnRlbnRpb25hbCAqLwogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IHplcm90aW1lOwogCS8qIGlub2RlLT5pX25saW5rIGlzIGxlZnQgMSAtIGFyZ3VhYmx5IHdyb25nIGZvciBkaXJlY3RvcmllcywKIAkgICBidXQgaXQncyB0aGUgYmVzdCB3ZSBjYW4gZG8gd2l0aG91dCByZWFkaW5nIHRoZSBkaXJlY3RvcnkKIAkgICBjb250ZW50cy4gIDEgeWllbGRzIHRoZSByaWdodCByZXN1bHQgaW4gR05VIGZpbmQsIGV2ZW4KIAkgICB3aXRob3V0IC1ub2xlYWYgb3B0aW9uLiAqLwotCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7Ci0JCWlub2RlLT5pX2ZvcCA9ICZnZW5lcmljX3JvX2ZvcHM7Ci0JCWlub2RlLT5pX2RhdGEuYV9vcHMgPSAmY3JhbWZzX2FvcHM7Ci0JfSBlbHNlIGlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7Ci0JCWlub2RlLT5pX29wID0gJmNyYW1mc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKLQkJaW5vZGUtPmlfZm9wID0gJmNyYW1mc19kaXJlY3Rvcnlfb3BlcmF0aW9uczsKLQl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKLQkJaW5vZGUtPmlfb3AgPSAmcGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7Ci0JCWlub2RlLT5pX2RhdGEuYV9vcHMgPSAmY3JhbWZzX2FvcHM7Ci0JfSBlbHNlIHsKLQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLAotCQkJb2xkX2RlY29kZV9kZXYoY3JhbWZzX2lub2RlLT5zaXplKSk7Ci0JfQotfQogCi1zdGF0aWMgc3RydWN0IGlub2RlICpnZXRfY3JhbWZzX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkJc3RydWN0IGNyYW1mc19pbm9kZSAqIGNyYW1mc19pbm9kZSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCWlmIChDUkFNSU5PKGNyYW1mc19pbm9kZSkgPT0gMSkgewotCQlpbm9kZSA9IG5ld19pbm9kZShzYik7Ci0JCWlmIChpbm9kZSkgewotCQkJaW5vZGUtPmlfaW5vID0gMTsKLQkJCXNldHVwX2lub2RlKGlub2RlLCBjcmFtZnNfaW5vZGUpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgQ1JBTUlOTyhjcmFtZnNfaW5vZGUpKTsKLQkJaWYgKGlub2RlICYmIChpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSkgewotCQkJc2V0dXBfaW5vZGUoaW5vZGUsIGNyYW1mc19pbm9kZSk7Ci0JCQl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKLQkJfQotCX0KKwl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKKwogCXJldHVybiBpbm9kZTsKIH0KIApAQCAtMjY1LDYgKzI4OSw5IEBACiAJCXByaW50ayhLRVJOX0VSUiAiY3JhbWZzOiByb290IGlzIG5vdCBhIGRpcmVjdG9yeVxuIik7CiAJCWdvdG8gb3V0OwogCX0KKwkvKiBjb3JyZWN0IHN0cmFuZ2UsIGhhcmQtY29kZWQgcGVybWlzc2lvbnMgb2YgbWtjcmFtZnMgKi8KKwlzdXBlci5yb290Lm1vZGUgfD0gKFNfSVJVU1IgfCBTX0lYVVNSIHwgU19JUkdSUCB8IFNfSVhHUlAgfCBTX0lST1RIIHwgU19JWE9USCk7CisKIAlyb290X29mZnNldCA9IHN1cGVyLnJvb3Qub2Zmc2V0IDw8IDI7CiAJaWYgKHN1cGVyLmZsYWdzICYgQ1JBTUZTX0ZMQUdfRlNJRF9WRVJTSU9OXzIpIHsKIAkJc2JpLT5zaXplPXN1cGVyLnNpemU7CkBAIC0yODksNyArMzE2LDcgQEAKIAogCS8qIFNldCBpdCBhbGwgdXAuLiAqLwogCXNiLT5zX29wID0gJmNyYW1mc19vcHM7Ci0Jcm9vdCA9IGdldF9jcmFtZnNfaW5vZGUoc2IsICZzdXBlci5yb290KTsKKwlyb290ID0gZ2V0X2NyYW1mc19pbm9kZShzYiwgJnN1cGVyLnJvb3QsIDApOwogCWlmICghcm9vdCkKIAkJZ290byBvdXQ7CiAJc2ItPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChyb290KTsKQEAgLTM2NSw3ICszOTIsNyBAQAogCQkgKi8KIAkJbmFtZWxlbiA9IGRlLT5uYW1lbGVuIDw8IDI7CiAJCW1lbWNweShidWYsIG5hbWUsIG5hbWVsZW4pOwotCQlpbm8gPSBDUkFNSU5PKGRlKTsKKwkJaW5vID0gY3JhbWlubyhkZSwgT0ZGU0VUKGlub2RlKSArIG9mZnNldCk7CiAJCW1vZGUgPSBkZS0+bW9kZTsKIAkJbXV0ZXhfdW5sb2NrKCZyZWFkX211dGV4KTsKIAkJbmV4dG9mZnNldCA9IG9mZnNldCArIHNpemVvZigqZGUpICsgbmFtZWxlbjsKQEAgLTQwNCw4ICs0MzEsOSBAQAogCQlzdHJ1Y3QgY3JhbWZzX2lub2RlICpkZTsKIAkJY2hhciAqbmFtZTsKIAkJaW50IG5hbWVsZW4sIHJldHZhbDsKKwkJaW50IGRpcl9vZmYgPSBPRkZTRVQoZGlyKSArIG9mZnNldDsKIAotCQlkZSA9IGNyYW1mc19yZWFkKGRpci0+aV9zYiwgT0ZGU0VUKGRpcikgKyBvZmZzZXQsIHNpemVvZigqZGUpK0NSQU1GU19NQVhQQVRITEVOKTsKKwkJZGUgPSBjcmFtZnNfcmVhZChkaXItPmlfc2IsIGRpcl9vZmYsIHNpemVvZigqZGUpK0NSQU1GU19NQVhQQVRITEVOKTsKIAkJbmFtZSA9IChjaGFyICopKGRlKzEpOwogCiAJCS8qIFRyeSB0byB0YWtlIGFkdmFudGFnZSBvZiBzb3J0ZWQgZGlyZWN0b3JpZXMgKi8KQEAgLTQzNiw3ICs0NjQsNyBAQAogCQlpZiAoIXJldHZhbCkgewogCQkJc3RydWN0IGNyYW1mc19pbm9kZSBlbnRyeSA9ICpkZTsKIAkJCW11dGV4X3VubG9jaygmcmVhZF9tdXRleCk7Ci0JCQlkX2FkZChkZW50cnksIGdldF9jcmFtZnNfaW5vZGUoZGlyLT5pX3NiLCAmZW50cnkpKTsKKwkJCWRfYWRkKGRlbnRyeSwgZ2V0X2NyYW1mc19pbm9kZShkaXItPmlfc2IsICZlbnRyeSwgZGlyX29mZikpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAkJLyogZWxzZSAocmV0dmFsIDwgMCkgKi8KZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggNTY5OWQ0Yy4uMGM2ZDVjNSAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTEzMjAsNiArMTMyMCw3IEBACiAJCV9fZGdldF9kbG9jayhwYXJlbnQpOwogCQlkZW50cnktPmRfcGFyZW50ID0gcGFyZW50OwogCQlkZW50cnktPmRfc2IgPSBwYXJlbnQtPmRfc2I7CisJCWRfc2V0X2Rfb3AoZGVudHJ5LCBkZW50cnktPmRfc2ItPnNfZF9vcCk7CiAJCWxpc3RfYWRkKCZkZW50cnktPmRfdS5kX2NoaWxkLCAmcGFyZW50LT5kX3N1YmRpcnMpOwogCQlzcGluX3VubG9jaygmcGFyZW50LT5kX2xvY2spOwogCX0KQEAgLTEzMzUsNiArMTMzNiw3IEBACiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZF9hbGxvYyhOVUxMLCBuYW1lKTsKIAlpZiAoZGVudHJ5KSB7CiAJCWRlbnRyeS0+ZF9zYiA9IHNiOworCQlkX3NldF9kX29wKGRlbnRyeSwgZGVudHJ5LT5kX3NiLT5zX2Rfb3ApOwogCQlkZW50cnktPmRfcGFyZW50ID0gZGVudHJ5OwogCQlkZW50cnktPmRfZmxhZ3MgfD0gRENBQ0hFX0RJU0NPTk5FQ1RFRDsKIAl9CkBAIC0xNTA3LDYgKzE1MDksNyBAQAogCQlyZXMgPSBkX2FsbG9jKE5VTEwsICZuYW1lKTsKIAkJaWYgKHJlcykgewogCQkJcmVzLT5kX3NiID0gcm9vdF9pbm9kZS0+aV9zYjsKKwkJCWRfc2V0X2Rfb3AocmVzLCByZXMtPmRfc2ItPnNfZF9vcCk7CiAJCQlyZXMtPmRfcGFyZW50ID0gcmVzOwogCQkJZF9pbnN0YW50aWF0ZShyZXMsIHJvb3RfaW5vZGUpOwogCQl9CkBAIC0xNTY3LDYgKzE1NzAsNyBAQAogCS8qIGF0dGFjaCBhIGRpc2Nvbm5lY3RlZCBkZW50cnkgKi8KIAlzcGluX2xvY2soJnRtcC0+ZF9sb2NrKTsKIAl0bXAtPmRfc2IgPSBpbm9kZS0+aV9zYjsKKwlkX3NldF9kX29wKHRtcCwgdG1wLT5kX3NiLT5zX2Rfb3ApOwogCXRtcC0+ZF9pbm9kZSA9IGlub2RlOwogCXRtcC0+ZF9mbGFncyB8PSBEQ0FDSEVfRElTQ09OTkVDVEVEOwogCWxpc3RfYWRkKCZ0bXAtPmRfYWxpYXMsICZpbm9kZS0+aV9kZW50cnkpOwpAQCAtMTk2Niw3ICsxOTcwLDcgQEAKIC8qKgogICogZF92YWxpZGF0ZSAtIHZlcmlmeSBkZW50cnkgcHJvdmlkZWQgZnJvbSBpbnNlY3VyZSBzb3VyY2UgKGRlcHJlY2F0ZWQpCiAgKiBAZGVudHJ5OiBUaGUgZGVudHJ5IGFsbGVnZWQgdG8gYmUgdmFsaWQgY2hpbGQgb2YgQGRwYXJlbnQKLSAqIEBkcGFyZW50OiBUaGUgcGFyZW50IGRlbnRyeSAoa25vd24gdG8gYmUgdmFsaWQpCisgKiBAcGFyZW50OiBUaGUgcGFyZW50IGRlbnRyeSAoa25vd24gdG8gYmUgdmFsaWQpCiAgKgogICogQW4gaW5zZWN1cmUgc291cmNlIGhhcyBzZW50IHVzIGEgZGVudHJ5LCBoZXJlIHdlIHZlcmlmeSBpdCBhbmQgZGdldCgpIGl0LgogICogVGhpcyBpcyB1c2VkIGJ5IG5jcGZzIGluIGl0cyByZWFkZGlyIGltcGxlbWVudGF0aW9uLgpAQCAtMjQ0OSw4ICsyNDUzLDcgQEAKIH0KIAogLyoqCi0gKiBQcmVwZW5kIHBhdGggc3RyaW5nIHRvIGEgYnVmZmVyCi0gKgorICogcHJlcGVuZF9wYXRoIC0gUHJlcGVuZCBwYXRoIHN0cmluZyB0byBhIGJ1ZmZlcgogICogQHBhdGg6IHRoZSBkZW50cnkvdmZzbW91bnQgdG8gcmVwb3J0CiAgKiBAcm9vdDogcm9vdCB2ZnNtbnQvZGVudHJ5IChtYXkgYmUgbW9kaWZpZWQgYnkgdGhpcyBmdW5jdGlvbikKICAqIEBidWZmZXI6IHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9pbm9kZS5jIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwppbmRleCAzMzczNTJhLi42NGZmMDIzIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9pbm9kZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKQEAgLTQ0MSw3ICs0NDEsNiBAQAogCXN0cnVjdCBxc3RyIGxvd2VyX25hbWU7CiAJaW50IHJjID0gMDsKIAotCWRfc2V0X2Rfb3AoZWNyeXB0ZnNfZGVudHJ5LCAmZWNyeXB0ZnNfZG9wcyk7CiAJaWYgKChlY3J5cHRmc19kZW50cnktPmRfbmFtZS5sZW4gPT0gMQogCSAgICAgJiYgIXN0cmNtcChlY3J5cHRmc19kZW50cnktPmRfbmFtZS5uYW1lLCAiLiIpKQogCSAgICB8fCAoZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubGVuID09IDIKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21haW4uYyBiL2ZzL2VjcnlwdGZzL21haW4uYwppbmRleCAzNTEwMzg2Li45ZWQ0NzY5IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tYWluLmMKKysrIGIvZnMvZWNyeXB0ZnMvbWFpbi5jCkBAIC0xNDEsMjEgKzE0MSw5IEBACiAJcmV0dXJuIHJjOwogfQogCi0vKioKLSAqIGVjcnlwdGZzX2ludGVycG9zZQotICogQGxvd2VyX2RlbnRyeTogRXhpc3RpbmcgZGVudHJ5IGluIHRoZSBsb3dlciBmaWxlc3lzdGVtCi0gKiBAZGVudHJ5OiBlY3J5cHRmcycgZGVudHJ5Ci0gKiBAc2I6IGVjcnlwdGZzJ3Mgc3VwZXJfYmxvY2sKLSAqIEBmbGFnczogZmxhZ3MgdG8gZ292ZXJuIGJlaGF2aW9yIG9mIGludGVycG9zZSBwcm9jZWR1cmUKLSAqCi0gKiBJbnRlcnBvc2VzIHVwcGVyIGFuZCBsb3dlciBkZW50cmllcy4KLSAqCi0gKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb3RoZXJ3aXNlCi0gKi8KLWludCBlY3J5cHRmc19pbnRlcnBvc2Uoc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpCitzdGF0aWMgaW5vZGUgKmVjcnlwdGZzX2dldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmxvd2VyX2lub2RlLAorCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmxvd2VyX2lub2RlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IHJjID0gMDsKIApAQCAtMTg5LDE3ICsxNzcsMzggQEAKIAlpZiAoc3BlY2lhbF9maWxlKGxvd2VyX2lub2RlLT5pX21vZGUpKQogCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGxvd2VyX2lub2RlLT5pX21vZGUsCiAJCQkJICAgbG93ZXJfaW5vZGUtPmlfcmRldik7Ci0JZF9zZXRfZF9vcChkZW50cnksICZlY3J5cHRmc19kb3BzKTsKIAlmc3N0YWNrX2NvcHlfYXR0cl9hbGwoaW5vZGUsIGxvd2VyX2lub2RlKTsKIAkvKiBUaGlzIHNpemUgd2lsbCBiZSBvdmVyd3JpdHRlbiBmb3IgcmVhbCBmaWxlcyB3LyBoZWFkZXJzIGFuZAogCSAqIG90aGVyIG1ldGFkYXRhICovCiAJZnNzdGFja19jb3B5X2lub2RlX3NpemUoaW5vZGUsIGxvd2VyX2lub2RlKTsKKwlyZXR1cm4gaW5vZGU7CitvdXQ6CisJcmV0dXJuIEVSUl9QVFIocmMpOworfQorCisvKioKKyAqIGVjcnlwdGZzX2ludGVycG9zZQorICogQGxvd2VyX2RlbnRyeTogRXhpc3RpbmcgZGVudHJ5IGluIHRoZSBsb3dlciBmaWxlc3lzdGVtCisgKiBAZGVudHJ5OiBlY3J5cHRmcycgZGVudHJ5CisgKiBAc2I6IGVjcnlwdGZzJ3Mgc3VwZXJfYmxvY2sKKyAqIEBmbGFnczogZmxhZ3MgdG8gZ292ZXJuIGJlaGF2aW9yIG9mIGludGVycG9zZSBwcm9jZWR1cmUKKyAqCisgKiBJbnRlcnBvc2VzIHVwcGVyIGFuZCBsb3dlciBkZW50cmllcy4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb3RoZXJ3aXNlCisgKi8KK2ludCBlY3J5cHRmc19pbnRlcnBvc2Uoc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpCit7CisJc3RydWN0IGlub2RlICpsb3dlcl9pbm9kZSA9IGxvd2VyX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZWNyeXB0ZnNfZ2V0X2lub2RlKGxvd2VyX2lub2RlLCBzYik7CisJaWYgKElTX0VSUihpbm9kZSkKKwkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOwogCWlmIChmbGFncyAmIEVDUllQVEZTX0lOVEVSUE9TRV9GTEFHX0RfQUREKQogCQlkX2FkZChkZW50cnksIGlub2RlKTsKIAllbHNlCiAJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci1vdXQ6Ci0JcmV0dXJuIHJjOworCXJldHVybiAwOwogfQogCiBlbnVtIHsgZWNyeXB0ZnNfb3B0X3NpZywgZWNyeXB0ZnNfb3B0X2VjcnlwdGZzX3NpZywKQEAgLTQ5Miw1OSArNTAxLDExIEBACiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZWNyeXB0ZnNfZnNfdHlwZTsKIAogLyoqCi0gKiBlY3J5cHRmc19yZWFkX3N1cGVyCi0gKiBAc2I6IFRoZSBlY3J5cHRmcyBzdXBlciBibG9jawotICogQGRldl9uYW1lOiBUaGUgcGF0aCB0byBtb3VudCBvdmVyCi0gKgotICogUmVhZCB0aGUgc3VwZXIgYmxvY2sgb2YgdGhlIGxvd2VyIGZpbGVzeXN0ZW0sIGFuZCB1c2UKLSAqIGVjcnlwdGZzX2ludGVycG9zZSB0byBjcmVhdGUgb3VyIGluaXRpYWwgaW5vZGUgYW5kIHN1cGVyIGJsb2NrCi0gKiBzdHJ1Y3QuCi0gKi8KLXN0YXRpYyBpbnQgZWNyeXB0ZnNfcmVhZF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpkZXZfbmFtZSkKLXsKLQlzdHJ1Y3QgcGF0aCBwYXRoOwotCWludCByYzsKLQotCXJjID0ga2Vybl9wYXRoKGRldl9uYW1lLCBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWSwgJnBhdGgpOwotCWlmIChyYykgewotCQllY3J5cHRmc19wcmludGsoS0VSTl9XQVJOSU5HLCAicGF0aF9sb29rdXAoKSBmYWlsZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKHBhdGguZGVudHJ5LT5kX3NiLT5zX3R5cGUgPT0gJmVjcnlwdGZzX2ZzX3R5cGUpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlwcmludGsoS0VSTl9FUlIgIk1vdW50IG9uIGZpbGVzeXN0ZW0gb2YgdHlwZSAiCi0JCQkiZUNyeXB0ZnMgZXhwbGljaXRseSBkaXNhbGxvd2VkIGR1ZSB0byAiCi0JCQkia25vd24gaW5jb21wYXRpYmlsaXRpZXNcbiIpOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQllY3J5cHRmc19zZXRfc3VwZXJibG9ja19sb3dlcihzYiwgcGF0aC5kZW50cnktPmRfc2IpOwotCXNiLT5zX21heGJ5dGVzID0gcGF0aC5kZW50cnktPmRfc2ItPnNfbWF4Ynl0ZXM7Ci0Jc2ItPnNfYmxvY2tzaXplID0gcGF0aC5kZW50cnktPmRfc2ItPnNfYmxvY2tzaXplOwotCWVjcnlwdGZzX3NldF9kZW50cnlfbG93ZXIoc2ItPnNfcm9vdCwgcGF0aC5kZW50cnkpOwotCWVjcnlwdGZzX3NldF9kZW50cnlfbG93ZXJfbW50KHNiLT5zX3Jvb3QsIHBhdGgubW50KTsKLQlyYyA9IGVjcnlwdGZzX2ludGVycG9zZShwYXRoLmRlbnRyeSwgc2ItPnNfcm9vdCwgc2IsIDApOwotCWlmIChyYykKLQkJZ290byBvdXRfZnJlZTsKLQlyYyA9IDA7Ci0JZ290byBvdXQ7Ci1vdXRfZnJlZToKLQlwYXRoX3B1dCgmcGF0aCk7Ci1vdXQ6Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKICAqIGVjcnlwdGZzX2dldF9zYgogICogQGZzX3R5cGUKICAqIEBmbGFncwogICogQGRldl9uYW1lOiBUaGUgcGF0aCB0byBtb3VudCBvdmVyCiAgKiBAcmF3X2RhdGE6IFRoZSBvcHRpb25zIHBhc3NlZCBpbnRvIHRoZSBrZXJuZWwKLSAqCi0gKiBUaGUgd2hvbGUgZWNyeXB0ZnNfZ2V0X3NiIHByb2Nlc3MgaXMgYnJva2VuIGludG8gMyBmdW5jdGlvbnM6Ci0gKiBlY3J5cHRmc19wYXJzZV9vcHRpb25zKCk6IGhhbmRsZSBvcHRpb25zIHBhc3NlZCB0byBlY3J5cHRmcywgaWYgYW55Ci0gKiBlY3J5cHRmc19yZWFkX3N1cGVyKCk6IHRoaXMgYWNjZXNzZXMgdGhlIGxvd2VyIGZpbGVzeXN0ZW0gYW5kIHVzZXMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgZWNyeXB0ZnNfaW50ZXJwb3NlIHRvIHBlcmZvcm0gbW9zdCBvZiB0aGUgbGlua2luZwotICogZWNyeXB0ZnNfaW50ZXJwb3NlKCk6IGxpbmtzIHRoZSBsb3dlciBmaWxlc3lzdGVtIGludG8gZWNyeXB0ZnMgKGlub2RlLmMpCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLAogCQkJY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKnJhd19kYXRhKQpAQCAtNTUzLDYgKzUxNCw4IEBACiAJc3RydWN0IGVjcnlwdGZzX3NiX2luZm8gKnNiaTsKIAlzdHJ1Y3QgZWNyeXB0ZnNfZGVudHJ5X2luZm8gKnJvb3RfaW5mbzsKIAljb25zdCBjaGFyICplcnIgPSAiR2V0dGluZyBzYiBmYWlsZWQiOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHBhdGggcGF0aDsKIAlpbnQgcmM7CiAKIAlzYmkgPSBrbWVtX2NhY2hlX3phbGxvYyhlY3J5cHRmc19zYl9pbmZvX2NhY2hlLCBHRlBfS0VSTkVMKTsKQEAgLTU3NSwxMCArNTM4LDggQEAKIAogCXMtPnNfZmxhZ3MgPSBmbGFnczsKIAlyYyA9IGJkaV9zZXR1cF9hbmRfcmVnaXN0ZXIoJnNiaS0+YmRpLCAiZWNyeXB0ZnMiLCBCRElfQ0FQX01BUF9DT1BZKTsKLQlpZiAocmMpIHsKLQkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocyk7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAocmMpCisJCWdvdG8gb3V0MTsKIAogCWVjcnlwdGZzX3NldF9zdXBlcmJsb2NrX3ByaXZhdGUocywgc2JpKTsKIAlzLT5zX2JkaSA9ICZzYmktPmJkaTsKQEAgLTU4NiwzNCArNTQ3LDU0IEBACiAJLyogLT5raWxsX3NiKCkgd2lsbCB0YWtlIGNhcmUgb2Ygc2JpIGFmdGVyIHRoYXQgcG9pbnQgKi8KIAlzYmkgPSBOVUxMOwogCXMtPnNfb3AgPSAmZWNyeXB0ZnNfc29wczsKKwlzLT5zX2Rfb3AgPSAmZWNyeXB0ZnNfZG9wczsKKworCWVyciA9ICJSZWFkaW5nIHNiIGZhaWxlZCI7CisJcmMgPSBrZXJuX3BhdGgoZGV2X25hbWUsIExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZLCAmcGF0aCk7CisJaWYgKHJjKSB7CisJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJrZXJuX3BhdGgoKSBmYWlsZWRcbiIpOworCQlnb3RvIG91dDE7CisJfQorCWlmIChwYXRoLmRlbnRyeS0+ZF9zYi0+c190eXBlID09ICZlY3J5cHRmc19mc190eXBlKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJcHJpbnRrKEtFUk5fRVJSICJNb3VudCBvbiBmaWxlc3lzdGVtIG9mIHR5cGUgIgorCQkJImVDcnlwdGZzIGV4cGxpY2l0bHkgZGlzYWxsb3dlZCBkdWUgdG8gIgorCQkJImtub3duIGluY29tcGF0aWJpbGl0aWVzXG4iKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisJZWNyeXB0ZnNfc2V0X3N1cGVyYmxvY2tfbG93ZXIocywgcGF0aC5kZW50cnktPmRfc2IpOworCXMtPnNfbWF4Ynl0ZXMgPSBwYXRoLmRlbnRyeS0+ZF9zYi0+c19tYXhieXRlczsKKwlzLT5zX2Jsb2Nrc2l6ZSA9IHBhdGguZGVudHJ5LT5kX3NiLT5zX2Jsb2Nrc2l6ZTsKKworCWlub2RlID0gZWNyeXB0ZnNfZ2V0X2lub2RlKHBhdGguZGVudHJ5LT5kX2lub2RlLCBzKTsKKwlyYyA9IFBUUl9FUlIoaW5vZGUpOworCWlmIChJU19FUlIoaW5vZGUpKQorCQlnb3RvIG91dF9mcmVlOworCisJcy0+c19yb290ID0gZF9hbGxvY19yb290KGlub2RlKTsKKwlpZiAoIXMtPnNfcm9vdCkgeworCQlpcHV0KGlub2RlKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlOworCX0KIAogCXJjID0gLUVOT01FTTsKLQlzLT5zX3Jvb3QgPSBkX2FsbG9jKE5VTEwsICYoY29uc3Qgc3RydWN0IHFzdHIpIHsKLQkJCSAgICAgLmhhc2ggPSAwLC5uYW1lID0gIi8iLC5sZW4gPSAxfSk7Ci0JaWYgKCFzLT5zX3Jvb3QpIHsKLQkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocyk7Ci0JCWdvdG8gb3V0OwotCX0KLQlkX3NldF9kX29wKHMtPnNfcm9vdCwgJmVjcnlwdGZzX2RvcHMpOwotCXMtPnNfcm9vdC0+ZF9zYiA9IHM7Ci0Jcy0+c19yb290LT5kX3BhcmVudCA9IHMtPnNfcm9vdDsKLQogCXJvb3RfaW5mbyA9IGttZW1fY2FjaGVfemFsbG9jKGVjcnlwdGZzX2RlbnRyeV9pbmZvX2NhY2hlLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJvb3RfaW5mbykgewotCQlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzKTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICghcm9vdF9pbmZvKQorCQlnb3RvIG91dF9mcmVlOworCiAJLyogLT5raWxsX3NiKCkgd2lsbCB0YWtlIGNhcmUgb2Ygcm9vdF9pbmZvICovCiAJZWNyeXB0ZnNfc2V0X2RlbnRyeV9wcml2YXRlKHMtPnNfcm9vdCwgcm9vdF9pbmZvKTsKKwllY3J5cHRmc19zZXRfZGVudHJ5X2xvd2VyKHMtPnNfcm9vdCwgcGF0aC5kZW50cnkpOworCWVjcnlwdGZzX3NldF9kZW50cnlfbG93ZXJfbW50KHMtPnNfcm9vdCwgcGF0aC5tbnQpOworCiAJcy0+c19mbGFncyB8PSBNU19BQ1RJVkU7Ci0JcmMgPSBlY3J5cHRmc19yZWFkX3N1cGVyKHMsIGRldl9uYW1lKTsKLQlpZiAocmMpIHsKLQkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocyk7Ci0JCWVyciA9ICJSZWFkaW5nIHNiIGZhaWxlZCI7Ci0JCWdvdG8gb3V0OwotCX0KIAlyZXR1cm4gZGdldChzLT5zX3Jvb3QpOwogCitvdXRfZnJlZToKKwlwYXRoX3B1dCgmcGF0aCk7CitvdXQxOgorCWRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHMpOwogb3V0OgogCWlmIChzYmkpIHsKIAkJZWNyeXB0ZnNfZGVzdHJveV9tb3VudF9jcnlwdF9zdGF0KCZzYmktPm1vdW50X2NyeXB0X3N0YXQpOwpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCA4Y2YwNzI0Li5jYzhhOWI3IDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGluc2lkZSAvcHJvYy9zeXMvZnMvZXBvbGwvCiAgKi8KIC8qIE1heGltdW0gbnVtYmVyIG9mIGVwb2xsIHdhdGNoZWQgZGVzY3JpcHRvcnMsIHBlciB1c2VyICovCi1zdGF0aWMgaW50IG1heF91c2VyX3dhdGNoZXMgX19yZWFkX21vc3RseTsKK3N0YXRpYyBsb25nIG1heF91c2VyX3dhdGNoZXMgX19yZWFkX21vc3RseTsKIAogLyoKICAqIFRoaXMgbXV0ZXggaXMgdXNlZCB0byBzZXJpYWxpemUgZXBfZnJlZSgpIGFuZCBldmVudHBvbGxfcmVsZWFzZV9maWxlKCkuCkBAIC0yNDAsMTYgKzI0MCwxOCBAQAogCiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAKLXN0YXRpYyBpbnQgemVybzsKK3N0YXRpYyBsb25nIHplcm87CitzdGF0aWMgbG9uZyBsb25nX21heCA9IExPTkdfTUFYOwogCiBjdGxfdGFibGUgZXBvbGxfdGFibGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICJtYXhfdXNlcl93YXRjaGVzIiwKIAkJLmRhdGEJCT0gJm1heF91c2VyX3dhdGNoZXMsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tYXhsZW4JCT0gc2l6ZW9mKG1heF91c2VyX3dhdGNoZXMpLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAogCQkuZXh0cmExCQk9ICZ6ZXJvLAorCQkuZXh0cmEyCQk9ICZsb25nX21heCwKIAl9LAogCXsgfQogfTsKQEAgLTU2MSw3ICs1NjMsNyBAQAogCS8qIEF0IHRoaXMgcG9pbnQgaXQgaXMgc2FmZSB0byBmcmVlIHRoZSBldmVudHBvbGwgaXRlbSAqLwogCWttZW1fY2FjaGVfZnJlZShlcGlfY2FjaGUsIGVwaSk7CiAKLQlhdG9taWNfZGVjKCZlcC0+dXNlci0+ZXBvbGxfd2F0Y2hlcyk7CisJYXRvbWljX2xvbmdfZGVjKCZlcC0+dXNlci0+ZXBvbGxfd2F0Y2hlcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg5OCwxMSArOTAwLDEyIEBACiB7CiAJaW50IGVycm9yLCByZXZlbnRzLCBwd2FrZSA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb25nIHVzZXJfd2F0Y2hlczsKIAlzdHJ1Y3QgZXBpdGVtICplcGk7CiAJc3RydWN0IGVwX3BxdWV1ZSBlcHE7CiAKLQlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmVwLT51c2VyLT5lcG9sbF93YXRjaGVzKSA+PQotCQkgICAgIG1heF91c2VyX3dhdGNoZXMpKQorCXVzZXJfd2F0Y2hlcyA9IGF0b21pY19sb25nX3JlYWQoJmVwLT51c2VyLT5lcG9sbF93YXRjaGVzKTsKKwlpZiAodW5saWtlbHkodXNlcl93YXRjaGVzID49IG1heF91c2VyX3dhdGNoZXMpKQogCQlyZXR1cm4gLUVOT1NQQzsKIAlpZiAoIShlcGkgPSBrbWVtX2NhY2hlX2FsbG9jKGVwaV9jYWNoZSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTk2Niw3ICs5NjksNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKIAotCWF0b21pY19pbmMoJmVwLT51c2VyLT5lcG9sbF93YXRjaGVzKTsKKwlhdG9taWNfbG9uZ19pbmMoJmVwLT51c2VyLT5lcG9sbF93YXRjaGVzKTsKIAogCS8qIFdlIGhhdmUgdG8gY2FsbCB0aGlzIG91dHNpZGUgdGhlIGxvY2sgKi8KIAlpZiAocHdha2UpCkBAIC0xNDI2LDYgKzE0MjksNyBAQAogCSAqLwogCW1heF91c2VyX3dhdGNoZXMgPSAoKChzaS50b3RhbHJhbSAtIHNpLnRvdGFsaGlnaCkgLyAyNSkgPDwgUEFHRV9TSElGVCkgLwogCQlFUF9JVEVNX0NPU1Q7CisJQlVHX09OKG1heF91c2VyX3dhdGNoZXMgPCAwKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSB1c2VkIHRvIHBlcmZvcm0gc2FmZSBwb2xsIHdhaXQgaGVhZCB3YWtlIHVwcyAqLwogCWVwX25lc3RlZF9jYWxsc19pbml0KCZwb2xsX3NhZmV3YWtlX25jYWxscyk7CmRpZmYgLS1naXQgYS9mcy9leHQyL2Rpci5jIGIvZnMvZXh0Mi9kaXIuYwppbmRleCAyNzA5YjM0Li40N2NkYTQxIDEwMDY0NAotLS0gYS9mcy9leHQyL2Rpci5jCisrKyBiL2ZzL2V4dDIvZGlyLmMKQEAgLTI4LDIxICsyOCwzMCBAQAogCiB0eXBlZGVmIHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yIGV4dDJfZGlyZW50OwogCisvKgorICogVGVzdHMgYWdhaW5zdCBNQVhfUkVDX0xFTiBldGMgd2VyZSBwdXQgaW4gcGxhY2UgZm9yIDY0ayBibG9jaworICogc2l6ZXM7IGlmIHRoYXQgaXMgbm90IHBvc3NpYmxlIG9uIHRoaXMgYXJjaCwgd2UgY2FuIHNraXAKKyAqIHRob3NlIHRlc3RzIGFuZCBzcGVlZCB0aGluZ3MgdXAuCisgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZXh0Ml9yZWNfbGVuX2Zyb21fZGlzayhfX2xlMTYgZGxlbikKIHsKIAl1bnNpZ25lZCBsZW4gPSBsZTE2X3RvX2NwdShkbGVuKTsKIAorI2lmIChQQUdFX0NBQ0hFX1NJWkUgPj0gNjU1MzYpCiAJaWYgKGxlbiA9PSBFWFQyX01BWF9SRUNfTEVOKQogCQlyZXR1cm4gMSA8PCAxNjsKKyNlbmRpZgogCXJldHVybiBsZW47CiB9CiAKIHN0YXRpYyBpbmxpbmUgX19sZTE2IGV4dDJfcmVjX2xlbl90b19kaXNrKHVuc2lnbmVkIGxlbikKIHsKKyNpZiAoUEFHRV9DQUNIRV9TSVpFID49IDY1NTM2KQogCWlmIChsZW4gPT0gKDEgPDwgMTYpKQogCQlyZXR1cm4gY3B1X3RvX2xlMTYoRVhUMl9NQVhfUkVDX0xFTik7CiAJZWxzZQogCQlCVUdfT04obGVuID4gKDEgPDwgMTYpKTsKKyNlbmRpZgogCXJldHVybiBjcHVfdG9fbGUxNihsZW4pOwogfQogCkBAIC0xMjksMTUgKzEzOCwxNSBAQAogCQlwID0gKGV4dDJfZGlyZW50ICopKGthZGRyICsgb2Zmcyk7CiAJCXJlY19sZW4gPSBleHQyX3JlY19sZW5fZnJvbV9kaXNrKHAtPnJlY19sZW4pOwogCi0JCWlmIChyZWNfbGVuIDwgRVhUMl9ESVJfUkVDX0xFTigxKSkKKwkJaWYgKHVubGlrZWx5KHJlY19sZW4gPCBFWFQyX0RJUl9SRUNfTEVOKDEpKSkKIAkJCWdvdG8gRXNob3J0OwotCQlpZiAocmVjX2xlbiAmIDMpCisJCWlmICh1bmxpa2VseShyZWNfbGVuICYgMykpCiAJCQlnb3RvIEVhbGlnbjsKLQkJaWYgKHJlY19sZW4gPCBFWFQyX0RJUl9SRUNfTEVOKHAtPm5hbWVfbGVuKSkKKwkJaWYgKHVubGlrZWx5KHJlY19sZW4gPCBFWFQyX0RJUl9SRUNfTEVOKHAtPm5hbWVfbGVuKSkpCiAJCQlnb3RvIEVuYW1lbGVuOwotCQlpZiAoKChvZmZzICsgcmVjX2xlbiAtIDEpIF4gb2ZmcykgJiB+KGNodW5rX3NpemUtMSkpCisJCWlmICh1bmxpa2VseSgoKG9mZnMgKyByZWNfbGVuIC0gMSkgXiBvZmZzKSAmIH4oY2h1bmtfc2l6ZS0xKSkpCiAJCQlnb3RvIEVzcGFuOwotCQlpZiAobGUzMl90b19jcHUocC0+aW5vZGUpID4gbWF4X2ludW1iZXIpCisJCWlmICh1bmxpa2VseShsZTMyX3RvX2NwdShwLT5pbm9kZSkgPiBtYXhfaW51bWJlcikpCiAJCQlnb3RvIEVpbnVtYmVyOwogCX0KIAlpZiAob2ZmcyAhPSBsaW1pdCkKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvbmFtZWkuYyBiL2ZzL2V4dDIvbmFtZWkuYwppbmRleCBmOGFlY2QyLi4yZTFkODM0IDEwMDY0NAotLS0gYS9mcy9leHQyL25hbWVpLmMKKysrIGIvZnMvZXh0Mi9uYW1laS5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJaW5vZGUgPSBOVUxMOwogCWlmIChpbm8pIHsKIAkJaW5vZGUgPSBleHQyX2lnZXQoZGlyLT5pX3NiLCBpbm8pOwotCQlpZiAodW5saWtlbHkoSVNfRVJSKGlub2RlKSkpIHsKKwkJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJCWlmIChQVFJfRVJSKGlub2RlKSA9PSAtRVNUQUxFKSB7CiAJCQkJZXh0Ml9lcnJvcihkaXItPmlfc2IsIF9fZnVuY19fLAogCQkJCQkJImRlbGV0ZWQgaW5vZGUgcmVmZXJlbmNlZDogJWx1IiwKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvc3VwZXIuYyBiL2ZzL2V4dDIvc3VwZXIuYwppbmRleCBlMGM2MzgwLi43NzMxNjk1IDEwMDY0NAotLS0gYS9mcy9leHQyL3N1cGVyLmMKKysrIGIvZnMvZXh0Mi9zdXBlci5jCkBAIC00Myw5ICs0MywxMCBAQAogc3RhdGljIGludCBleHQyX3N0YXRmcyAoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKiBidWYpOwogc3RhdGljIGludCBleHQyX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpOwogCi12b2lkIGV4dDJfZXJyb3IgKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCBjb25zdCBjaGFyICogZnVuY3Rpb24sCi0JCSBjb25zdCBjaGFyICogZm10LCAuLi4pCit2b2lkIGV4dDJfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqZnVuY3Rpb24sCisJCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQogeworCXN0cnVjdCB2YV9mb3JtYXQgdmFmOwogCXZhX2xpc3QgYXJnczsKIAlzdHJ1Y3QgZXh0Ml9zYl9pbmZvICpzYmkgPSBFWFQyX1NCKHNiKTsKIAlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqZXMgPSBzYmktPnNfZXM7CkBAIC01OSw5ICs2MCwxMyBAQAogCX0KIAogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JcHJpbnRrKEtFUk5fQ1JJVCAiRVhUMi1mcyAoJXMpOiBlcnJvcjogJXM6ICIsIHNiLT5zX2lkLCBmdW5jdGlvbik7Ci0JdnByaW50ayhmbXQsIGFyZ3MpOwotCXByaW50aygiXG4iKTsKKworCXZhZi5mbXQgPSBmbXQ7CisJdmFmLnZhID0gJmFyZ3M7CisKKwlwcmludGsoS0VSTl9DUklUICJFWFQyLWZzICglcyk6IGVycm9yOiAlczogJXBWXG4iLAorCSAgICAgICBzYi0+c19pZCwgZnVuY3Rpb24sICZ2YWYpOworCiAJdmFfZW5kKGFyZ3MpOwogCiAJaWYgKHRlc3Rfb3B0KHNiLCBFUlJPUlNfUEFOSUMpKQpAQCAtNzYsMTIgKzgxLDE2IEBACiB2b2lkIGV4dDJfbXNnKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CisJc3RydWN0IHZhX2Zvcm1hdCB2YWY7CiAJdmFfbGlzdCBhcmdzOwogCiAJdmFfc3RhcnQoYXJncywgZm10KTsKLQlwcmludGsoIiVzRVhUMi1mcyAoJXMpOiAiLCBwcmVmaXgsIHNiLT5zX2lkKTsKLQl2cHJpbnRrKGZtdCwgYXJncyk7Ci0JcHJpbnRrKCJcbiIpOworCisJdmFmLmZtdCA9IGZtdDsKKwl2YWYudmEgPSAmYXJnczsKKworCXByaW50aygiJXNFWFQyLWZzICglcyk6ICVwVlxuIiwgcHJlZml4LCBzYi0+c19pZCwgJnZhZik7CisKIAl2YV9lbmQoYXJncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0dHIuYyBiL2ZzL2V4dDIveGF0dHIuYwppbmRleCBmODQ3MDBiLi5jMmU0ZGNlIDEwMDY0NAotLS0gYS9mcy9leHQyL3hhdHRyLmMKKysrIGIvZnMvZXh0Mi94YXR0ci5jCkBAIC0xOTksMTQgKzE5OSw2IEBACiAJCQlnb3RvIGZvdW5kOwogCQllbnRyeSA9IG5leHQ7CiAJfQotCS8qIENoZWNrIHRoZSByZW1haW5pbmcgbmFtZSBlbnRyaWVzICovCi0Jd2hpbGUgKCFJU19MQVNUX0VOVFJZKGVudHJ5KSkgewotCQlzdHJ1Y3QgZXh0Ml94YXR0cl9lbnRyeSAqbmV4dCA9Ci0JCQlFWFQyX1hBVFRSX05FWFQoZW50cnkpOwotCQlpZiAoKGNoYXIgKiluZXh0ID49IGVuZCkKLQkJCWdvdG8gYmFkX2Jsb2NrOwotCQllbnRyeSA9IG5leHQ7Ci0JfQogCWlmIChleHQyX3hhdHRyX2NhY2hlX2luc2VydChiaCkpCiAJCWVhX2lkZWJ1Zyhpbm9kZSwgImNhY2hlIGluc2VydCBmYWlsZWQiKTsKIAllcnJvciA9IC1FTk9EQVRBOwpAQCAtMzU1LDcgKzM0Nyw3IEBACiAvKgogICogZXh0Ml94YXR0cl9zZXQoKQogICoKLSAqIENyZWF0ZSwgcmVwbGFjZSBvciByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGZvciB0aGlzIGlub2RlLiBCdWZmZXIKKyAqIENyZWF0ZSwgcmVwbGFjZSBvciByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGZvciB0aGlzIGlub2RlLiAgVmFsdWUKICAqIGlzIE5VTEwgdG8gcmVtb3ZlIGFuIGV4aXN0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kIG5vbi1OVUxMIHRvCiAgKiBlaXRoZXIgcmVwbGFjZSBhbiBleGlzdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUsIG9yIGNyZWF0ZSBhIG5ldyBleHRlbmRlZAogICogYXR0cmlidXRlLiBUaGUgZmxhZ3MgWEFUVFJfUkVQTEFDRSBhbmQgWEFUVFJfQ1JFQVRFCmRpZmYgLS1naXQgYS9mcy9leHQzL2JhbGxvYy5jIGIvZnMvZXh0My9iYWxsb2MuYwppbmRleCBiM2RiMjI2Li4wNDU5OTVjIDEwMDY0NAotLS0gYS9mcy9leHQzL2JhbGxvYy5jCisrKyBiL2ZzL2V4dDMvYmFsbG9jLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9leHQzX2piZC5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KIAogLyoKICAqIGJhbGxvYy5jIGNvbnRhaW5zIHRoZSBibG9ja3MgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHJvdXRpbmVzCkBAIC0zOSw2ICs0MCwyMSBAQAogCiAjZGVmaW5lIGluX3JhbmdlKGIsIGZpcnN0LCBsZW4pCSgoYikgPj0gKGZpcnN0KSAmJiAoYikgPD0gKGZpcnN0KSArIChsZW4pIC0gMSkKIAorLyoKKyAqIENhbGN1bGF0ZSB0aGUgYmxvY2sgZ3JvdXAgbnVtYmVyIGFuZCBvZmZzZXQsIGdpdmVuIGEgYmxvY2sgbnVtYmVyCisgKi8KK3N0YXRpYyB2b2lkIGV4dDNfZ2V0X2dyb3VwX25vX2FuZF9vZmZzZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwlleHQzX2ZzYmxrX3QgYmxvY2tuciwgdW5zaWduZWQgbG9uZyAqYmxvY2tncnBwLCBleHQzX2dycGJsa190ICpvZmZzZXRwKQoreworCXN0cnVjdCBleHQzX3N1cGVyX2Jsb2NrICplcyA9IEVYVDNfU0Ioc2IpLT5zX2VzOworCisJYmxvY2tuciA9IGJsb2NrbnIgLSBsZTMyX3RvX2NwdShlcy0+c19maXJzdF9kYXRhX2Jsb2NrKTsKKwlpZiAob2Zmc2V0cCkKKwkJKm9mZnNldHAgPSBibG9ja25yICUgRVhUM19CTE9DS1NfUEVSX0dST1VQKHNiKTsKKwlpZiAoYmxvY2tncnBwKQorCQkqYmxvY2tncnBwID0gYmxvY2tuciAvIEVYVDNfQkxPQ0tTX1BFUl9HUk9VUChzYik7Cit9CisKIC8qKgogICogZXh0M19nZXRfZ3JvdXBfZGVzYygpIC0tIGxvYWQgZ3JvdXAgZGVzY3JpcHRvciBmcm9tIGRpc2sKICAqIEBzYjoJCQlzdXBlciBibG9jawpAQCAtMTg4NSwzICsxOTAxLDI1MyBAQAogCXJldHVybiBleHQzX2JnX251bV9nZGJfbWV0YShzYixncm91cCk7CiAKIH0KKworLyoqCisgKiBleHQzX3RyaW1fYWxsX2ZyZWUgLS0gZnVuY3Rpb24gdG8gdHJpbSBhbGwgZnJlZSBzcGFjZSBpbiBhbGxvYy4gZ3JvdXAKKyAqIEBzYjoJCQlzdXBlciBibG9jayBmb3IgZmlsZSBzeXN0ZW0KKyAqIEBncm91cDoJCWFsbG9jYXRpb24gZ3JvdXAgdG8gdHJpbQorICogQHN0YXJ0OgkJZmlyc3QgZ3JvdXAgYmxvY2sgdG8gZXhhbWluZQorICogQG1heDoJCWxhc3QgZ3JvdXAgYmxvY2sgdG8gZXhhbWluZQorICogQGdkcDoJCWFsbG9jYXRpb24gZ3JvdXAgZGVzY3JpcHRpb24gc3RydWN0dXJlCisgKiBAbWluYmxvY2tzOgkJbWluaW11bSBleHRlbnQgYmxvY2sgY291bnQKKyAqCisgKiBleHQzX3RyaW1fYWxsX2ZyZWUgd2Fsa3MgdGhyb3VnaCBncm91cCdzIGJsb2NrIGJpdG1hcCBzZWFyY2hpbmcgZm9yIGZyZWUKKyAqIGJsb2Nrcy4gV2hlbiB0aGUgZnJlZSBibG9jayBpcyBmb3VuZCwgaXQgdHJpZXMgdG8gYWxsb2NhdGUgdGhpcyBibG9jayBhbmQKKyAqIGNvbnNlcXVlbnQgZnJlZSBibG9jayB0byBnZXQgdGhlIGJpZ2dlc3QgZnJlZSBleHRlbnQgcG9zc2libGUsIHVudGlsIGl0CisgKiByZWFjaGVzIGFueSB1c2VkIGJsb2NrLiBUaGVuIGlzc3VlIGEgVFJJTSBjb21tYW5kIG9uIHRoaXMgZXh0ZW50IGFuZCBmcmVlCisgKiB0aGUgZXh0ZW50IGluIHRoZSBibG9jayBiaXRtYXAuIFRoaXMgaXMgZG9uZSB1bnRpbCB3aG9sZSBncm91cCBpcyBzY2FubmVkLgorICovCitleHQzX2dycGJsa190IGV4dDNfdHJpbV9hbGxfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgZ3JvdXAsCisJCQkJZXh0M19ncnBibGtfdCBzdGFydCwgZXh0M19ncnBibGtfdCBtYXgsCisJCQkJZXh0M19ncnBibGtfdCBtaW5ibG9ja3MpCit7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwlleHQzX2dycGJsa190IG5leHQsIGZyZWVfYmxvY2tzLCBiaXQsIGZyZWVkLCBjb3VudCA9IDA7CisJZXh0M19mc2Jsa190IGRpc2NhcmRfYmxvY2s7CisJc3RydWN0IGV4dDNfc2JfaW5mbyAqc2JpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZ2RwX2JoLCAqYml0bWFwX2JoID0gTlVMTDsKKwlzdHJ1Y3QgZXh0M19ncm91cF9kZXNjICpnZHA7CisJaW50IGVyciA9IDAsIHJldCA9IDA7CisKKwkvKgorCSAqIFdlIHdpbGwgdXBkYXRlIG9uZSBibG9jayBiaXRtYXAsIGFuZCBvbmUgZ3JvdXAgZGVzY3JpcHRvcgorCSAqLworCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydF9zYihzYiwgMik7CisJaWYgKElTX0VSUihoYW5kbGUpKQorCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOworCisJYml0bWFwX2JoID0gcmVhZF9ibG9ja19iaXRtYXAoc2IsIGdyb3VwKTsKKwlpZiAoIWJpdG1hcF9iaCkgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJQlVGRkVSX1RSQUNFKGJpdG1hcF9iaCwgImdldHRpbmcgdW5kbyBhY2Nlc3MiKTsKKwllcnIgPSBleHQzX2pvdXJuYWxfZ2V0X3VuZG9fYWNjZXNzKGhhbmRsZSwgYml0bWFwX2JoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ7CisKKwlnZHAgPSBleHQzX2dldF9ncm91cF9kZXNjKHNiLCBncm91cCwgJmdkcF9iaCk7CisJaWYgKCFnZHApIHsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJfb3V0OworCX0KKworCUJVRkZFUl9UUkFDRShnZHBfYmgsICJnZXRfd3JpdGVfYWNjZXNzIik7CisJZXJyID0gZXh0M19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBnZHBfYmgpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKworCWZyZWVfYmxvY2tzID0gbGUxNl90b19jcHUoZ2RwLT5iZ19mcmVlX2Jsb2Nrc19jb3VudCk7CisJc2JpID0gRVhUM19TQihzYik7CisKKwkgLyogV2FsayB0aHJvdWdoIHRoZSB3aG9sZSBncm91cCAqLworCXdoaWxlIChzdGFydCA8IG1heCkgeworCQlzdGFydCA9IGJpdG1hcF9zZWFyY2hfbmV4dF91c2FibGVfYmxvY2soc3RhcnQsIGJpdG1hcF9iaCwgbWF4KTsKKwkJaWYgKHN0YXJ0IDwgMCkKKwkJCWJyZWFrOworCQluZXh0ID0gc3RhcnQ7CisKKwkJLyoKKwkJICogQWxsb2NhdGUgY29udGlndW91cyBmcmVlIGV4dGVudHMgYnkgc2V0dGluZyBiaXRzIGluIHRoZQorCQkgKiBibG9jayBiaXRtYXAKKwkJICovCisJCXdoaWxlIChuZXh0IDwgbWF4CisJCQkmJiBjbGFpbV9ibG9jayhzYl9iZ2xfbG9jayhzYmksIGdyb3VwKSwKKwkJCQkJbmV4dCwgYml0bWFwX2JoKSkgeworCQkJbmV4dCsrOworCQl9CisKKwkJIC8qIFdlIGRpZCBub3QgY2xhaW0gYW55IGJsb2NrcyAqLworCQlpZiAobmV4dCA9PSBzdGFydCkKKwkJCWNvbnRpbnVlOworCisJCWRpc2NhcmRfYmxvY2sgPSAoZXh0M19mc2Jsa190KXN0YXJ0ICsKKwkJCQlleHQzX2dyb3VwX2ZpcnN0X2Jsb2NrX25vKHNiLCBncm91cCk7CisKKwkJLyogVXBkYXRlIGNvdW50ZXJzICovCisJCXNwaW5fbG9jayhzYl9iZ2xfbG9jayhzYmksIGdyb3VwKSk7CisJCWxlMTZfYWRkX2NwdSgmZ2RwLT5iZ19mcmVlX2Jsb2Nrc19jb3VudCwgc3RhcnQgLSBuZXh0KTsKKwkJc3Bpbl91bmxvY2soc2JfYmdsX2xvY2soc2JpLCBncm91cCkpOworCQlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19mcmVlYmxvY2tzX2NvdW50ZXIsIG5leHQgLSBzdGFydCk7CisKKwkJLyogRG8gbm90IGlzc3VlIGEgVFJJTSBvbiBleHRlbnRzIHNtYWxsZXIgdGhhbiBtaW5ibG9ja3MgKi8KKwkJaWYgKChuZXh0IC0gc3RhcnQpIDwgbWluYmxvY2tzKQorCQkJZ290byBmcmVlX2V4dGVudDsKKworCQkgLyogU2VuZCB0aGUgVFJJTSBjb21tYW5kIGRvd24gdG8gdGhlIGRldmljZSAqLworCQllcnIgPSBzYl9pc3N1ZV9kaXNjYXJkKHNiLCBkaXNjYXJkX2Jsb2NrLCBuZXh0IC0gc3RhcnQsCisJCQkJICAgICAgIEdGUF9OT0ZTLCAwKTsKKwkJY291bnQgKz0gKG5leHQgLSBzdGFydCk7CitmcmVlX2V4dGVudDoKKwkJZnJlZWQgPSAwOworCisJCS8qCisJCSAqIENsZWFyIGJpdHMgaW4gdGhlIGJpdG1hcAorCQkgKi8KKwkJZm9yIChiaXQgPSBzdGFydDsgYml0IDwgbmV4dDsgYml0KyspIHsKKwkJCUJVRkZFUl9UUkFDRShiaXRtYXBfYmgsICJjbGVhciBiaXQiKTsKKwkJCWlmICghZXh0M19jbGVhcl9iaXRfYXRvbWljKHNiX2JnbF9sb2NrKHNiaSwgZ3JvdXApLAorCQkJCQkJYml0LCBiaXRtYXBfYmgtPmJfZGF0YSkpIHsKKwkJCQlleHQzX2Vycm9yKHNiLCBfX2Z1bmNfXywKKwkJCQkJImJpdCBhbHJlYWR5IGNsZWFyZWQgZm9yIGJsb2NrICJFM0ZTQkxLLAorCQkJCQkgKHVuc2lnbmVkIGxvbmcpYml0KTsKKwkJCQlCVUZGRVJfVFJBQ0UoYml0bWFwX2JoLCAiYml0IGFscmVhZHkgY2xlYXJlZCIpOworCQkJfSBlbHNlIHsKKwkJCQlmcmVlZCsrOworCQkJfQorCQl9CisKKwkJLyogVXBkYXRlIGNvdXRlcnMgKi8KKwkJc3Bpbl9sb2NrKHNiX2JnbF9sb2NrKHNiaSwgZ3JvdXApKTsKKwkJbGUxNl9hZGRfY3B1KCZnZHAtPmJnX2ZyZWVfYmxvY2tzX2NvdW50LCBmcmVlZCk7CisJCXNwaW5fdW5sb2NrKHNiX2JnbF9sb2NrKHNiaSwgZ3JvdXApKTsKKwkJcGVyY3B1X2NvdW50ZXJfYWRkKCZzYmktPnNfZnJlZWJsb2Nrc19jb3VudGVyLCBmcmVlZCk7CisKKwkJc3RhcnQgPSBuZXh0OworCQlpZiAoZXJyIDwgMCkgeworCQkJaWYgKGVyciAhPSAtRU9QTk9UU1VQUCkKKwkJCQlleHQzX3dhcm5pbmcoc2IsIF9fZnVuY19fLCAiRGlzY2FyZCBjb21tYW5kICIKKwkJCQkJICAgICAicmV0dXJuZWQgZXJyb3IgJWRcbiIsIGVycik7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJZXJyID0gLUVSRVNUQVJUU1lTOworCQkJYnJlYWs7CisJCX0KKworCQljb25kX3Jlc2NoZWQoKTsKKworCQkvKiBObyBtb3JlIHN1aXRhYmxlIGV4dGVudHMgKi8KKwkJaWYgKChmcmVlX2Jsb2NrcyAtIGNvdW50KSA8IG1pbmJsb2NrcykKKwkJCWJyZWFrOworCX0KKworCS8qIFdlIGRpcnRpZWQgdGhlIGJpdG1hcCBibG9jayAqLworCUJVRkZFUl9UUkFDRShiaXRtYXBfYmgsICJkaXJ0aWVkIGJpdG1hcCBibG9jayIpOworCXJldCA9IGV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGJpdG1hcF9iaCk7CisJaWYgKCFlcnIpCisJCWVyciA9IHJldDsKKworCS8qIEFuZCB0aGUgZ3JvdXAgZGVzY3JpcHRvciBibG9jayAqLworCUJVRkZFUl9UUkFDRShnZHBfYmgsICJkaXJ0aWVkIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2siKTsKKwlyZXQgPSBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBnZHBfYmgpOworCWlmICghZXJyKQorCQllcnIgPSByZXQ7CisKKwlleHQzX2RlYnVnKCJ0cmltbWVkICVkIGJsb2NrcyBpbiB0aGUgZ3JvdXAgJWRcbiIsCisJCWNvdW50LCBncm91cCk7CisKK2Vycl9vdXQ6CisJaWYgKGVycikKKwkJY291bnQgPSBlcnI7CisJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKKwlicmVsc2UoYml0bWFwX2JoKTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoqCisgKiBleHQzX3RyaW1fZnMoKSAtLSB0cmltIGlvY3RsIGhhbmRsZSBmdW5jdGlvbgorICogQHNiOgkJCXN1cGVyYmxvY2sgZm9yIGZpbGVzeXN0ZW0KKyAqIEBzdGFydDoJCUZpcnN0IEJ5dGUgdG8gdHJpbQorICogQGxlbjoJCW51bWJlciBvZiBCeXRlcyB0byB0cmltIGZyb20gc3RhcnQKKyAqIEBtaW5sZW46CQltaW5pbXVtIGV4dGVudCBsZW5ndGggaW4gQnl0ZXMKKyAqCisgKiBleHQzX3RyaW1fZnMgZ29lcyB0aHJvdWdoIGFsbCBhbGxvY2F0aW9uIGdyb3VwcyBjb250YWluaW5nIEJ5dGVzIGZyb20KKyAqIHN0YXJ0IHRvIHN0YXJ0K2xlbi4gRm9yIGVhY2ggc3VjaCBhIGdyb3VwIGV4dDNfdHJpbV9hbGxfZnJlZSBmdW5jdGlvbgorICogaXMgaW52b2tlZCB0byB0cmltIGFsbCBmcmVlIHNwYWNlLgorICovCitpbnQgZXh0M190cmltX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc3RyaW1fcmFuZ2UgKnJhbmdlKQoreworCWV4dDNfZ3JwYmxrX3QgbGFzdF9ibG9jaywgZmlyc3RfYmxvY2ssIGZyZWVfYmxvY2tzOworCXVuc2lnbmVkIGxvbmcgZmlyc3RfZ3JvdXAsIGxhc3RfZ3JvdXA7CisJdW5zaWduZWQgbG9uZyBncm91cCwgbmdyb3VwczsKKwlzdHJ1Y3QgZXh0M19ncm91cF9kZXNjICpnZHA7CisJc3RydWN0IGV4dDNfc3VwZXJfYmxvY2sgKmVzID0gRVhUM19TQihzYiktPnNfZXM7CisJdWludDY0X3Qgc3RhcnQsIGxlbiwgbWlubGVuLCB0cmltbWVkOworCWV4dDNfZnNibGtfdCBtYXhfYmxrcyA9IGxlMzJfdG9fY3B1KGVzLT5zX2Jsb2Nrc19jb3VudCk7CisJaW50IHJldCA9IDA7CisKKwlzdGFydCA9IHJhbmdlLT5zdGFydCA+PiBzYi0+c19ibG9ja3NpemVfYml0czsKKwlsZW4gPSByYW5nZS0+bGVuID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCW1pbmxlbiA9IHJhbmdlLT5taW5sZW4gPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJdHJpbW1lZCA9IDA7CisKKwlpZiAodW5saWtlbHkobWlubGVuID4gRVhUM19CTE9DS1NfUEVSX0dST1VQKHNiKSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChzdGFydCA+PSBtYXhfYmxrcykKKwkJZ290byBvdXQ7CisJaWYgKHN0YXJ0IDwgbGUzMl90b19jcHUoZXMtPnNfZmlyc3RfZGF0YV9ibG9jaykpIHsKKwkJbGVuIC09IGxlMzJfdG9fY3B1KGVzLT5zX2ZpcnN0X2RhdGFfYmxvY2spIC0gc3RhcnQ7CisJCXN0YXJ0ID0gbGUzMl90b19jcHUoZXMtPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJfQorCWlmIChzdGFydCArIGxlbiA+IG1heF9ibGtzKQorCQlsZW4gPSBtYXhfYmxrcyAtIHN0YXJ0OworCisJbmdyb3VwcyA9IEVYVDNfU0Ioc2IpLT5zX2dyb3Vwc19jb3VudDsKKwlzbXBfcm1iKCk7CisKKwkvKiBEZXRlcm1pbmUgZmlyc3QgYW5kIGxhc3QgZ3JvdXAgdG8gZXhhbWluZSBiYXNlZCBvbiBzdGFydCBhbmQgbGVuICovCisJZXh0M19nZXRfZ3JvdXBfbm9fYW5kX29mZnNldChzYiwgKGV4dDNfZnNibGtfdCkgc3RhcnQsCisJCQkJICAgICAmZmlyc3RfZ3JvdXAsICZmaXJzdF9ibG9jayk7CisJZXh0M19nZXRfZ3JvdXBfbm9fYW5kX29mZnNldChzYiwgKGV4dDNfZnNibGtfdCkgKHN0YXJ0ICsgbGVuKSwKKwkJCQkgICAgICZsYXN0X2dyb3VwLCAmbGFzdF9ibG9jayk7CisJbGFzdF9ncm91cCA9IChsYXN0X2dyb3VwID4gbmdyb3VwcyAtIDEpID8gbmdyb3VwcyAtIDEgOiBsYXN0X2dyb3VwOworCWxhc3RfYmxvY2sgPSBFWFQzX0JMT0NLU19QRVJfR1JPVVAoc2IpOworCisJaWYgKGZpcnN0X2dyb3VwID4gbGFzdF9ncm91cCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGdyb3VwID0gZmlyc3RfZ3JvdXA7IGdyb3VwIDw9IGxhc3RfZ3JvdXA7IGdyb3VwKyspIHsKKwkJZ2RwID0gZXh0M19nZXRfZ3JvdXBfZGVzYyhzYiwgZ3JvdXAsIE5VTEwpOworCQlpZiAoIWdkcCkKKwkJCWJyZWFrOworCisJCWZyZWVfYmxvY2tzID0gbGUxNl90b19jcHUoZ2RwLT5iZ19mcmVlX2Jsb2Nrc19jb3VudCk7CisJCWlmIChmcmVlX2Jsb2NrcyA8IG1pbmxlbikKKwkJCWNvbnRpbnVlOworCisJCWlmIChsZW4gPj0gRVhUM19CTE9DS1NfUEVSX0dST1VQKHNiKSkKKwkJCWxlbiAtPSAoRVhUM19CTE9DS1NfUEVSX0dST1VQKHNiKSAtIGZpcnN0X2Jsb2NrKTsKKwkJZWxzZQorCQkJbGFzdF9ibG9jayA9IGZpcnN0X2Jsb2NrICsgbGVuOworCisJCXJldCA9IGV4dDNfdHJpbV9hbGxfZnJlZShzYiwgZ3JvdXAsIGZpcnN0X2Jsb2NrLAorCQkJCQlsYXN0X2Jsb2NrLCBtaW5sZW4pOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCisJCXRyaW1tZWQgKz0gcmV0OworCQlmaXJzdF9ibG9jayA9IDA7CisJfQorCisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSAwOworCitvdXQ6CisJcmFuZ2UtPmxlbiA9IHRyaW1tZWQgKiBzYi0+c19ibG9ja3NpemU7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZnMvZXh0My9kaXIuYyBiL2ZzL2V4dDMvZGlyLmMKaW5kZXggZTJlNzJjMy4uMzRmMGEwNyAxMDA2NDQKLS0tIGEvZnMvZXh0My9kaXIuYworKysgYi9mcy9leHQzL2Rpci5jCkBAIC02OSwyNSArNjksMjYgQEAKIAljb25zdCBjaGFyICogZXJyb3JfbXNnID0gTlVMTDsKIAljb25zdCBpbnQgcmxlbiA9IGV4dDNfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4pOwogCi0JaWYgKHJsZW4gPCBFWFQzX0RJUl9SRUNfTEVOKDEpKQorCWlmICh1bmxpa2VseShybGVuIDwgRVhUM19ESVJfUkVDX0xFTigxKSkpCiAJCWVycm9yX21zZyA9ICJyZWNfbGVuIGlzIHNtYWxsZXIgdGhhbiBtaW5pbWFsIjsKLQllbHNlIGlmIChybGVuICUgNCAhPSAwKQorCWVsc2UgaWYgKHVubGlrZWx5KHJsZW4gJSA0ICE9IDApKQogCQllcnJvcl9tc2cgPSAicmVjX2xlbiAlIDQgIT0gMCI7Ci0JZWxzZSBpZiAocmxlbiA8IEVYVDNfRElSX1JFQ19MRU4oZGUtPm5hbWVfbGVuKSkKKwllbHNlIGlmICh1bmxpa2VseShybGVuIDwgRVhUM19ESVJfUkVDX0xFTihkZS0+bmFtZV9sZW4pKSkKIAkJZXJyb3JfbXNnID0gInJlY19sZW4gaXMgdG9vIHNtYWxsIGZvciBuYW1lX2xlbiI7Ci0JZWxzZSBpZiAoKChjaGFyICopIGRlIC0gYmgtPmJfZGF0YSkgKyBybGVuID4gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkKKwllbHNlIGlmICh1bmxpa2VseSgoKChjaGFyICopIGRlIC0gYmgtPmJfZGF0YSkgKyBybGVuID4gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkpKQogCQllcnJvcl9tc2cgPSAiZGlyZWN0b3J5IGVudHJ5IGFjcm9zcyBibG9ja3MiOwotCWVsc2UgaWYgKGxlMzJfdG9fY3B1KGRlLT5pbm9kZSkgPgotCQkJbGUzMl90b19jcHUoRVhUM19TQihkaXItPmlfc2IpLT5zX2VzLT5zX2lub2Rlc19jb3VudCkpCisJZWxzZSBpZiAodW5saWtlbHkobGUzMl90b19jcHUoZGUtPmlub2RlKSA+CisJCQlsZTMyX3RvX2NwdShFWFQzX1NCKGRpci0+aV9zYiktPnNfZXMtPnNfaW5vZGVzX2NvdW50KSkpCiAJCWVycm9yX21zZyA9ICJpbm9kZSBvdXQgb2YgYm91bmRzIjsKIAotCWlmIChlcnJvcl9tc2cgIT0gTlVMTCkKKwlpZiAodW5saWtlbHkoZXJyb3JfbXNnICE9IE5VTEwpKQogCQlleHQzX2Vycm9yIChkaXItPmlfc2IsIGZ1bmN0aW9uLAogCQkJImJhZCBlbnRyeSBpbiBkaXJlY3RvcnkgIyVsdTogJXMgLSAiCiAJCQkib2Zmc2V0PSVsdSwgaW5vZGU9JWx1LCByZWNfbGVuPSVkLCBuYW1lX2xlbj0lZCIsCiAJCQlkaXItPmlfaW5vLCBlcnJvcl9tc2csIG9mZnNldCwKIAkJCSh1bnNpZ25lZCBsb25nKSBsZTMyX3RvX2NwdShkZS0+aW5vZGUpLAogCQkJcmxlbiwgZGUtPm5hbWVfbGVuKTsKKwogCXJldHVybiBlcnJvcl9tc2cgPT0gTlVMTCA/IDEgOiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggYTk1ODA2MS4uYWU5NGY2ZCAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtMjE0NSwxMyArMjE0NSwxNSBAQAogCWlmICh0cnlfdG9fZXh0ZW5kX3RyYW5zYWN0aW9uKGhhbmRsZSwgaW5vZGUpKSB7CiAJCWlmIChiaCkgewogCQkJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEiKTsKLQkJCWV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGJoKTsKKwkJCWlmIChleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBiaCkpCisJCQkJcmV0dXJuOwogCQl9CiAJCWV4dDNfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAkJdHJ1bmNhdGVfcmVzdGFydF90cmFuc2FjdGlvbihoYW5kbGUsIGlub2RlKTsKIAkJaWYgKGJoKSB7CiAJCQlCVUZGRVJfVFJBQ0UoYmgsICJyZXRha2luZyB3cml0ZSBhY2Nlc3MiKTsKLQkJCWV4dDNfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpOworCQkJaWYgKGV4dDNfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpKQorCQkJCXJldHVybjsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9pb2N0bC5jIGIvZnMvZXh0My9pb2N0bC5jCmluZGV4IDg4OTc0ODEuLmZjMDgwZGQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW9jdGwuYworKysgYi9mcy9leHQzL2lvY3RsLmMKQEAgLTI3Niw3ICsyNzYsMjkgQEAKIAkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CiAJCXJldHVybiBlcnI7CiAJfQorCWNhc2UgRklUUklNOiB7CiAKKwkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCQlzdHJ1Y3QgZnN0cmltX3JhbmdlIHJhbmdlOworCQlpbnQgcmV0ID0gMDsKKworCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmcmFuZ2UsIChzdHJ1Y3QgZnN0cmltX3JhbmdlICopYXJnLAorCQkJCSAgIHNpemVvZihyYW5nZSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0ID0gZXh0M190cmltX2ZzKHNiLCAmcmFuZ2UpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKGNvcHlfdG9fdXNlcigoc3RydWN0IGZzdHJpbV9yYW5nZSAqKWFyZywgJnJhbmdlLAorCQkJCSBzaXplb2YocmFuZ2UpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9uYW1laS5jIGIvZnMvZXh0My9uYW1laS5jCmluZGV4IGJjZTlkY2UuLmIyN2JhNzEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvbmFtZWkuYworKysgYi9mcy9leHQzL25hbWVpLmMKQEAgLTg1OCw2ICs4NTgsNyBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJoX3VzZVtOQU1FSV9SQV9TSVpFXTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCwgKnJldCA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgYmxvY2ssIGI7CisJY29uc3QgdTggKm5hbWUgPSBlbnRyeS0+bmFtZTsKIAlpbnQgcmFfbWF4ID0gMDsJCS8qIE51bWJlciBvZiBiaCdzIGluIHRoZSByZWFkYWhlYWQKIAkJCQkgICBidWZmZXIsIGJoX3VzZVtdICovCiAJaW50IHJhX3B0ciA9IDA7CQkvKiBDdXJyZW50IGluZGV4IGludG8gcmVhZGFoZWFkCkBAIC04NzEsNiArODcyLDE2IEBACiAJbmFtZWxlbiA9IGVudHJ5LT5sZW47CiAJaWYgKG5hbWVsZW4gPiBFWFQzX05BTUVfTEVOKQogCQlyZXR1cm4gTlVMTDsKKwlpZiAoKG5hbWVsZW4gPD0gMikgJiYgKG5hbWVbMF0gPT0gJy4nKSAmJgorCSAgICAobmFtZVsxXSA9PSAnLicgfHwgbmFtZVsxXSA9PSAwKSkgeworCQkvKgorCQkgKiAiLiIgb3IgIi4uIiB3aWxsIG9ubHkgYmUgaW4gdGhlIGZpcnN0IGJsb2NrCisJCSAqIE5GUyBtYXkgbG9vayB1cCAiLi4iOyAiLiIgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIFZGUworCQkgKi8KKwkJYmxvY2sgPSBzdGFydCA9IDA7CisJCW5ibG9ja3MgPSAxOworCQlnb3RvIHJlc3RhcnQ7CisJfQogCWlmIChpc19keChkaXIpKSB7CiAJCWJoID0gZXh0M19keF9maW5kX2VudHJ5KGRpciwgZW50cnksIHJlc19kaXIsICZlcnIpOwogCQkvKgpAQCAtOTYxLDU1ICs5NzIsMzUgQEAKIAkJCXN0cnVjdCBxc3RyICplbnRyeSwgc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKipyZXNfZGlyLAogCQkJaW50ICplcnIpCiB7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICogc2I7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKIAlzdHJ1Y3QgZHhfaGFzaF9pbmZvCWhpbmZvOwotCXUzMiBoYXNoOwogCXN0cnVjdCBkeF9mcmFtZSBmcmFtZXNbMl0sICpmcmFtZTsKLQlzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqZGUsICp0b3A7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAl1bnNpZ25lZCBsb25nIGJsb2NrOwogCWludCByZXR2YWw7Ci0JaW50IG5hbWVsZW4gPSBlbnRyeS0+bGVuOwotCWNvbnN0IHU4ICpuYW1lID0gZW50cnktPm5hbWU7CiAKLQlzYiA9IGRpci0+aV9zYjsKLQkvKiBORlMgbWF5IGxvb2sgdXAgIi4uIiAtIGxvb2sgYXQgZHhfcm9vdCBkaXJlY3RvcnkgYmxvY2sgKi8KLQlpZiAobmFtZWxlbiA+IDIgfHwgbmFtZVswXSAhPSAnLid8fCAobmFtZWxlbiA9PSAyICYmIG5hbWVbMV0gIT0gJy4nKSkgewotCQlpZiAoIShmcmFtZSA9IGR4X3Byb2JlKGVudHJ5LCBkaXIsICZoaW5mbywgZnJhbWVzLCBlcnIpKSkKLQkJCXJldHVybiBOVUxMOwotCX0gZWxzZSB7Ci0JCWZyYW1lID0gZnJhbWVzOwotCQlmcmFtZS0+YmggPSBOVUxMOwkJCS8qIGZvciBkeF9yZWxlYXNlKCkgKi8KLQkJZnJhbWUtPmF0ID0gKHN0cnVjdCBkeF9lbnRyeSAqKWZyYW1lczsJLyogaGFjayBmb3IgemVybyBlbnRyeSovCi0JCWR4X3NldF9ibG9jayhmcmFtZS0+YXQsIDApOwkJLyogZHhfcm9vdCBibG9jayBpcyAwICovCi0JfQotCWhhc2ggPSBoaW5mby5oYXNoOworCWlmICghKGZyYW1lID0gZHhfcHJvYmUoZW50cnksIGRpciwgJmhpbmZvLCBmcmFtZXMsIGVycikpKQorCQlyZXR1cm4gTlVMTDsKIAlkbyB7CiAJCWJsb2NrID0gZHhfZ2V0X2Jsb2NrKGZyYW1lLT5hdCk7CiAJCWlmICghKGJoID0gZXh0M19icmVhZCAoTlVMTCxkaXIsIGJsb2NrLCAwLCBlcnIpKSkKIAkJCWdvdG8gZXJyb3V0OwotCQlkZSA9IChzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqKSBiaC0+Yl9kYXRhOwotCQl0b3AgPSAoc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKikgKChjaGFyICopIGRlICsgc2ItPnNfYmxvY2tzaXplIC0KLQkJCQkgICAgICAgRVhUM19ESVJfUkVDX0xFTigwKSk7Ci0JCWZvciAoOyBkZSA8IHRvcDsgZGUgPSBleHQzX25leHRfZW50cnkoZGUpKSB7Ci0JCQlpbnQgb2ZmID0gKGJsb2NrIDw8IEVYVDNfQkxPQ0tfU0laRV9CSVRTKHNiKSkKLQkJCQkgICsgKChjaGFyICopIGRlIC0gYmgtPmJfZGF0YSk7CiAKLQkJCWlmICghZXh0M19jaGVja19kaXJfZW50cnkoX19mdW5jX18sIGRpciwgZGUsIGJoLCBvZmYpKSB7Ci0JCQkJYnJlbHNlKGJoKTsKLQkJCQkqZXJyID0gRVJSX0JBRF9EWF9ESVI7Ci0JCQkJZ290byBlcnJvdXQ7Ci0JCQl9Ci0KLQkJCWlmIChleHQzX21hdGNoKG5hbWVsZW4sIG5hbWUsIGRlKSkgewotCQkJCSpyZXNfZGlyID0gZGU7Ci0JCQkJZHhfcmVsZWFzZShmcmFtZXMpOwotCQkJCXJldHVybiBiaDsKLQkJCX0KKwkJcmV0dmFsID0gc2VhcmNoX2RpcmJsb2NrKGJoLCBkaXIsIGVudHJ5LAorCQkJCQkgYmxvY2sgPDwgRVhUM19CTE9DS19TSVpFX0JJVFMoc2IpLAorCQkJCQkgcmVzX2Rpcik7CisJCWlmIChyZXR2YWwgPT0gMSkgeworCQkJZHhfcmVsZWFzZShmcmFtZXMpOworCQkJcmV0dXJuIGJoOwogCQl9Ci0JCWJyZWxzZSAoYmgpOworCQlicmVsc2UoYmgpOworCQlpZiAocmV0dmFsID09IC0xKSB7CisJCQkqZXJyID0gRVJSX0JBRF9EWF9ESVI7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCiAJCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQgY29udGludWUgdG8gc2VhcmNoICovCi0JCXJldHZhbCA9IGV4dDNfaHRyZWVfbmV4dF9ibG9jayhkaXIsIGhhc2gsIGZyYW1lLAorCQlyZXR2YWwgPSBleHQzX2h0cmVlX25leHRfYmxvY2soZGlyLCBoaW5mby5oYXNoLCBmcmFtZSwKIAkJCQkJICAgICAgIGZyYW1lcywgTlVMTCk7CiAJCWlmIChyZXR2YWwgPCAwKSB7CiAJCQlleHQzX3dhcm5pbmcoc2IsIF9fZnVuY19fLApAQCAtMTA0Nyw3ICsxMDM4LDcgQEAKIAkJCXJldHVybiBFUlJfUFRSKC1FSU8pOwogCQl9CiAJCWlub2RlID0gZXh0M19pZ2V0KGRpci0+aV9zYiwgaW5vKTsKLQkJaWYgKHVubGlrZWx5KElTX0VSUihpbm9kZSkpKSB7CisJCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCQlpZiAoUFRSX0VSUihpbm9kZSkgPT0gLUVTVEFMRSkgewogCQkJCWV4dDNfZXJyb3IoZGlyLT5pX3NiLCBfX2Z1bmNfXywKIAkJCQkJCSJkZWxldGVkIGlub2RlIHJlZmVyZW5jZWQ6ICVsdSIsCkBAIC0xNjA3LDcgKzE1OTgsOSBAQAogCQkJaWYgKGVycikKIAkJCQlnb3RvIGpvdXJuYWxfZXJyb3I7CiAJCX0KLQkJZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgZnJhbWVzWzBdLmJoKTsKKwkJZXJyID0gZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgZnJhbWVzWzBdLmJoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gam91cm5hbF9lcnJvcjsKIAl9CiAJZGUgPSBkb19zcGxpdChoYW5kbGUsIGRpciwgJmJoLCBmcmFtZSwgJmhpbmZvLCAmZXJyKTsKIAlpZiAoIWRlKQpAQCAtMTY0NCw4ICsxNjM3LDEzIEBACiAJCWlmICghZXh0M19jaGVja19kaXJfZW50cnkoImV4dDNfZGVsZXRlX2VudHJ5IiwgZGlyLCBkZSwgYmgsIGkpKQogCQkJcmV0dXJuIC1FSU87CiAJCWlmIChkZSA9PSBkZV9kZWwpICB7CisJCQlpbnQgZXJyOworCiAJCQlCVUZGRVJfVFJBQ0UoYmgsICJnZXRfd3JpdGVfYWNjZXNzIik7Ci0JCQlleHQzX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGJoKTsKKwkJCWVyciA9IGV4dDNfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGpvdXJuYWxfZXJyb3I7CisKIAkJCWlmIChwZGUpCiAJCQkJcGRlLT5yZWNfbGVuID0gZXh0M19yZWNfbGVuX3RvX2Rpc2soCiAJCQkJCWV4dDNfcmVjX2xlbl9mcm9tX2Rpc2socGRlLT5yZWNfbGVuKSArCkBAIC0xNjU0LDcgKzE2NTIsMTIgQEAKIAkJCQlkZS0+aW5vZGUgPSAwOwogCQkJZGlyLT5pX3ZlcnNpb24rKzsKIAkJCUJVRkZFUl9UUkFDRShiaCwgImNhbGwgZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhIik7Ci0JCQlleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBiaCk7CisJCQllcnIgPSBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBiaCk7CisJCQlpZiAoZXJyKSB7Citqb3VybmFsX2Vycm9yOgorCQkJCWV4dDNfc3RkX2Vycm9yKGRpci0+aV9zYiwgZXJyKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaSArPSBleHQzX3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuKTsKQEAgLTE3NjIsNyArMTc2NSw3IEBACiB7CiAJaGFuZGxlX3QgKmhhbmRsZTsKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBkaXJfYmxvY2s7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICogZGlyX2Jsb2NrID0gTlVMTDsKIAlzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqIGRlOwogCWludCBlcnIsIHJldHJpZXMgPSAwOwogCkBAIC0xNzkwLDE1ICsxNzkzLDE0IEBACiAJaW5vZGUtPmlfZm9wID0gJmV4dDNfZGlyX29wZXJhdGlvbnM7CiAJaW5vZGUtPmlfc2l6ZSA9IEVYVDNfSShpbm9kZSktPmlfZGlza3NpemUgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CiAJZGlyX2Jsb2NrID0gZXh0M19icmVhZCAoaGFuZGxlLCBpbm9kZSwgMCwgMSwgJmVycik7Ci0JaWYgKCFkaXJfYmxvY2spIHsKLQkJZHJvcF9ubGluayhpbm9kZSk7IC8qIGlzIHRoaXMgbmxpbmsgPT0gMD8gKi8KLQkJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7Ci0JCWV4dDNfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKLQkJaXB1dCAoaW5vZGUpOwotCQlnb3RvIG91dF9zdG9wOwotCX0KKwlpZiAoIWRpcl9ibG9jaykKKwkJZ290byBvdXRfY2xlYXJfaW5vZGU7CisKIAlCVUZGRVJfVFJBQ0UoZGlyX2Jsb2NrLCAiZ2V0X3dyaXRlX2FjY2VzcyIpOwotCWV4dDNfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgZGlyX2Jsb2NrKTsKKwllcnIgPSBleHQzX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGRpcl9ibG9jayk7CisJaWYgKGVycikKKwkJZ290byBvdXRfY2xlYXJfaW5vZGU7CisKIAlkZSA9IChzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqKSBkaXJfYmxvY2stPmJfZGF0YTsKIAlkZS0+aW5vZGUgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9pbm8pOwogCWRlLT5uYW1lX2xlbiA9IDE7CkBAIC0xODE0LDExICsxODE2LDE2IEBACiAJZXh0M19zZXRfZGVfdHlwZShkaXItPmlfc2IsIGRlLCBTX0lGRElSKTsKIAlpbm9kZS0+aV9ubGluayA9IDI7CiAJQlVGRkVSX1RSQUNFKGRpcl9ibG9jaywgImNhbGwgZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhIik7Ci0JZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgZGlyX2Jsb2NrKTsKLQlicmVsc2UgKGRpcl9ibG9jayk7Ci0JZXh0M19tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwotCWVyciA9IGV4dDNfYWRkX2VudHJ5IChoYW5kbGUsIGRlbnRyeSwgaW5vZGUpOworCWVyciA9IGV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGRpcl9ibG9jayk7CisJaWYgKGVycikKKwkJZ290byBvdXRfY2xlYXJfaW5vZGU7CisKKwllcnIgPSBleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CisJaWYgKCFlcnIpCisJCWVyciA9IGV4dDNfYWRkX2VudHJ5IChoYW5kbGUsIGRlbnRyeSwgaW5vZGUpOworCiAJaWYgKGVycikgeworb3V0X2NsZWFyX2lub2RlOgogCQlpbm9kZS0+aV9ubGluayA9IDA7CiAJCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwogCQlleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CkBAIC0xODI3LDEwICsxODM0LDE0IEBACiAJfQogCWluY19ubGluayhkaXIpOwogCWV4dDNfdXBkYXRlX2R4X2ZsYWcoZGlyKTsKLQlleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBkaXIpOworCWVyciA9IGV4dDNfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGRpcik7CisJaWYgKGVycikKKwkJZ290byBvdXRfY2xlYXJfaW5vZGU7CisKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwogb3V0X3N0b3A6CisJYnJlbHNlKGRpcl9ibG9jayk7CiAJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAlpZiAoZXJyID09IC1FTk9TUEMgJiYgZXh0M19zaG91bGRfcmV0cnlfYWxsb2MoZGlyLT5pX3NiLCAmcmV0cmllcykpCiAJCWdvdG8gcmV0cnk7CkBAIC0yMzUzLDcgKzIzNjQsOSBAQAogCQkJZ290byBlbmRfcmVuYW1lOwogCX0gZWxzZSB7CiAJCUJVRkZFUl9UUkFDRShuZXdfYmgsICJnZXQgd3JpdGUgYWNjZXNzIik7Ci0JCWV4dDNfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgbmV3X2JoKTsKKwkJcmV0dmFsID0gZXh0M19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBuZXdfYmgpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBqb3VybmFsX2Vycm9yOwogCQluZXdfZGUtPmlub2RlID0gY3B1X3RvX2xlMzIob2xkX2lub2RlLT5pX2lubyk7CiAJCWlmIChFWFQzX0hBU19JTkNPTVBBVF9GRUFUVVJFKG5ld19kaXItPmlfc2IsCiAJCQkJCSAgICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRSkpCkBAIC0yMzYyLDcgKzIzNzUsOSBAQAogCQluZXdfZGlyLT5pX2N0aW1lID0gbmV3X2Rpci0+aV9tdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJCWV4dDNfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIG5ld19kaXIpOwogCQlCVUZGRVJfVFJBQ0UobmV3X2JoLCAiY2FsbCBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEiKTsKLQkJZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgbmV3X2JoKTsKKwkJcmV0dmFsID0gZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgbmV3X2JoKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gam91cm5hbF9lcnJvcjsKIAkJYnJlbHNlKG5ld19iaCk7CiAJCW5ld19iaCA9IE5VTEw7CiAJfQpAQCAtMjQxMSwxMCArMjQyNiwxNyBAQAogCWV4dDNfdXBkYXRlX2R4X2ZsYWcob2xkX2Rpcik7CiAJaWYgKGRpcl9iaCkgewogCQlCVUZGRVJfVFJBQ0UoZGlyX2JoLCAiZ2V0X3dyaXRlX2FjY2VzcyIpOwotCQlleHQzX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGRpcl9iaCk7CisJCXJldHZhbCA9IGV4dDNfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgZGlyX2JoKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gam91cm5hbF9lcnJvcjsKIAkJUEFSRU5UX0lOTyhkaXJfYmgtPmJfZGF0YSkgPSBjcHVfdG9fbGUzMihuZXdfZGlyLT5pX2lubyk7CiAJCUJVRkZFUl9UUkFDRShkaXJfYmgsICJjYWxsIGV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YSIpOwotCQlleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBkaXJfYmgpOworCQlyZXR2YWwgPSBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBkaXJfYmgpOworCQlpZiAocmV0dmFsKSB7Citqb3VybmFsX2Vycm9yOgorCQkJZXh0M19zdGRfZXJyb3IobmV3X2Rpci0+aV9zYiwgcmV0dmFsKTsKKwkJCWdvdG8gZW5kX3JlbmFtZTsKKwkJfQogCQlkcm9wX25saW5rKG9sZF9kaXIpOwogCQlpZiAobmV3X2lub2RlKSB7CiAJCQlkcm9wX25saW5rKG5ld19pbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9leHQzL3Jlc2l6ZS5jIGIvZnMvZXh0My9yZXNpemUuYwppbmRleCBlNzQ2ZDMwLi4xMDhiMTQyIDEwMDY0NAotLS0gYS9mcy9leHQzL3Jlc2l6ZS5jCisrKyBiL2ZzL2V4dDMvcmVzaXplLmMKQEAgLTI0OSw3ICsyNDksMTEgQEAKIAkJbWVtY3B5KGdkYi0+Yl9kYXRhLCBzYmktPnNfZ3JvdXBfZGVzY1tpXS0+Yl9kYXRhLCBnZGItPmJfc2l6ZSk7CiAJCXNldF9idWZmZXJfdXB0b2RhdGUoZ2RiKTsKIAkJdW5sb2NrX2J1ZmZlcihnZGIpOwotCQlleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBnZGIpOworCQllcnIgPSBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBnZGIpOworCQlpZiAoZXJyKSB7CisJCQlicmVsc2UoZ2RiKTsKKwkJCWdvdG8gZXhpdF9iaDsKKwkJfQogCQlleHQzX3NldF9iaXQoYml0LCBiaC0+Yl9kYXRhKTsKIAkJYnJlbHNlKGdkYik7CiAJfQpAQCAtMjY5LDcgKzI3MywxMSBAQAogCQkJZXJyID0gUFRSX0VSUihnZGIpOwogCQkJZ290byBleGl0X2JoOwogCQl9Ci0JCWV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGdkYik7CisJCWVyciA9IGV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGdkYik7CisJCWlmIChlcnIpIHsKKwkJCWJyZWxzZShnZGIpOworCQkJZ290byBleGl0X2JoOworCQl9CiAJCWV4dDNfc2V0X2JpdChiaXQsIGJoLT5iX2RhdGEpOwogCQlicmVsc2UoZ2RiKTsKIAl9CkBAIC0yOTUsNyArMzAzLDExIEBACiAJCQllcnIgPSBQVFJfRVJSKGl0KTsKIAkJCWdvdG8gZXhpdF9iaDsKIAkJfQotCQlleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpdCk7CisJCWVyciA9IGV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGl0KTsKKwkJaWYgKGVycikgeworCQkJYnJlbHNlKGl0KTsKKwkJCWdvdG8gZXhpdF9iaDsKKwkJfQogCQlicmVsc2UoaXQpOwogCQlleHQzX3NldF9iaXQoYml0LCBiaC0+Yl9kYXRhKTsKIAl9CkBAIC0zMDYsNyArMzE4LDkgQEAKIAogCW1hcmtfYml0bWFwX2VuZChpbnB1dC0+YmxvY2tzX2NvdW50LCBFWFQzX0JMT0NLU19QRVJfR1JPVVAoc2IpLAogCQkJYmgtPmJfZGF0YSk7Ci0JZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgYmgpOworCWVyciA9IGV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGJoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfYmg7CiAJYnJlbHNlKGJoKTsKIAogCS8qIE1hcmsgdW51c2VkIGVudHJpZXMgaW4gaW5vZGUgYml0bWFwIHVzZWQgKi8KQEAgLTMxOSw3ICszMzMsNyBAQAogCiAJbWFya19iaXRtYXBfZW5kKEVYVDNfSU5PREVTX1BFUl9HUk9VUChzYiksIEVYVDNfQkxPQ0tTX1BFUl9HUk9VUChzYiksCiAJCQliaC0+Yl9kYXRhKTsKLQlleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBiaCk7CisJZXJyID0gZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgYmgpOwogZXhpdF9iaDoKIAlicmVsc2UoYmgpOwogCkBAIC01MDMsMTIgKzUxNywxOSBAQAogCSAqIHJlc2VydmVkIGlub2RlLCBhbmQgd2lsbCBiZWNvbWUgR0RUIGJsb2NrcyAocHJpbWFyeSBhbmQgYmFja3VwKS4KIAkgKi8KIAlkYXRhW2dkYl9udW0gJSBFWFQzX0FERFJfUEVSX0JMT0NLKHNiKV0gPSAwOwotCWV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGRpbmQpOworCWVyciA9IGV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGRpbmQpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9ncm91cF9kZXNjOwogCWJyZWxzZShkaW5kKTsKKwlkaW5kID0gTlVMTDsKIAlpbm9kZS0+aV9ibG9ja3MgLT0gKGdkYmFja3VwcyArIDEpICogc2ItPnNfYmxvY2tzaXplID4+IDk7Ci0JZXh0M19tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgJmlsb2MpOworCWVyciA9IGV4dDNfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsICZpbG9jKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZ3JvdXBfZGVzYzsKIAltZW1zZXQoKCpwcmltYXJ5KS0+Yl9kYXRhLCAwLCBzYi0+c19ibG9ja3NpemUpOwotCWV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsICpwcmltYXJ5KTsKKwllcnIgPSBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCAqcHJpbWFyeSk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2dyb3VwX2Rlc2M7CiAKIAlvX2dyb3VwX2Rlc2MgPSBFWFQzX1NCKHNiKS0+c19ncm91cF9kZXNjOwogCW1lbWNweShuX2dyb3VwX2Rlc2MsIG9fZ3JvdXBfZGVzYywKQEAgLTUxOSwxMCArNTQwLDE0IEBACiAJa2ZyZWUob19ncm91cF9kZXNjKTsKIAogCWxlMTZfYWRkX2NwdSgmZXMtPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcywgLTEpOwotCWV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIEVYVDNfU0Ioc2IpLT5zX3NiaCk7CisJZXJyID0gZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgRVhUM19TQihzYiktPnNfc2JoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfaW5vZGU7CiAKIAlyZXR1cm4gMDsKIAorZXhpdF9ncm91cF9kZXNjOgorCWtmcmVlKG5fZ3JvdXBfZGVzYyk7CiBleGl0X2lub2RlOgogCS8vZXh0M19qb3VybmFsX3JlbGVhc2VfYnVmZmVyKGhhbmRsZSwgaWxvYy5iaCk7CiAJYnJlbHNlKGlsb2MuYmgpOwpAQCAtNzA2LDE2ICs3MzEsMjAgQEAKIAkJfQogCQlleHQzX2RlYnVnKCJ1cGRhdGUgbWV0YWRhdGEgYmFja3VwICUjMDRseFxuIiwKIAkJCSAgKHVuc2lnbmVkIGxvbmcpYmgtPmJfYmxvY2tucik7Ci0JCWlmICgoZXJyID0gZXh0M19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBiaCkpKQorCQlpZiAoKGVyciA9IGV4dDNfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpKSkgeworCQkJYnJlbHNlKGJoKTsKIAkJCWJyZWFrOworCQl9CiAJCWxvY2tfYnVmZmVyKGJoKTsKIAkJbWVtY3B5KGJoLT5iX2RhdGEsIGRhdGEsIHNpemUpOwogCQlpZiAocmVzdCkKIAkJCW1lbXNldChiaC0+Yl9kYXRhICsgc2l6ZSwgMCwgcmVzdCk7CiAJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCQl1bmxvY2tfYnVmZmVyKGJoKTsKLQkJZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgYmgpOworCQllcnIgPSBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBiaCk7CiAJCWJyZWxzZShiaCk7CisJCWlmIChlcnIpCisJCQlicmVhazsKIAl9CiAJaWYgKChlcnIyID0gZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKSkgJiYgIWVycikKIAkJZXJyID0gZXJyMjsKQEAgLTkyMiw3ICs5NTEsOSBAQAogCS8qIFVwZGF0ZSB0aGUgZ2xvYmFsIGZzIHNpemUgZmllbGRzICovCiAJc2JpLT5zX2dyb3Vwc19jb3VudCsrOwogCi0JZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgcHJpbWFyeSk7CisJZXJyID0gZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgcHJpbWFyeSk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2pvdXJuYWw7CiAKIAkvKiBVcGRhdGUgdGhlIHJlc2VydmVkIGJsb2NrIGNvdW50cyBvbmx5IG9uY2UgdGhlIG5ldyBncm91cCBpcwogCSAqIGFjdGl2ZS4gKi8KQEAgLTkzNCw3ICs5NjUsNyBAQAogCXBlcmNwdV9jb3VudGVyX2FkZCgmc2JpLT5zX2ZyZWVpbm9kZXNfY291bnRlciwKIAkJCSAgIEVYVDNfSU5PREVTX1BFUl9HUk9VUChzYikpOwogCi0JZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgc2JpLT5zX3NiaCk7CisJZXJyID0gZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgc2JpLT5zX3NiaCk7CiAKIGV4aXRfam91cm5hbDoKIAltdXRleF91bmxvY2soJnNiaS0+c19yZXNpemVfbG9jayk7CkBAIC0xMDY0LDggKzEwOTUsMTQgQEAKIAkJZ290byBleGl0X3B1dDsKIAl9CiAJZXMtPnNfYmxvY2tzX2NvdW50ID0gY3B1X3RvX2xlMzIob19ibG9ja3NfY291bnQgKyBhZGQpOwotCWV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIEVYVDNfU0Ioc2IpLT5zX3NiaCk7CisJZXJyID0gZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgRVhUM19TQihzYiktPnNfc2JoKTsKIAltdXRleF91bmxvY2soJkVYVDNfU0Ioc2IpLT5zX3Jlc2l6ZV9sb2NrKTsKKwlpZiAoZXJyKSB7CisJCWV4dDNfd2FybmluZyhzYiwgX19mdW5jX18sCisJCQkgICAgICJlcnJvciAlZCBvbiBqb3VybmFsIGRpcnR5IG1ldGFkYXRhIiwgZXJyKTsKKwkJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKKwkJZ290byBleGl0X3B1dDsKKwl9CiAJZXh0M19kZWJ1ZygiZnJlZWluZyBibG9ja3MgIkUzRlNCTEsiIHRocm91Z2ggIkUzRlNCTEsiXG4iLAogCQkgICBvX2Jsb2Nrc19jb3VudCwgb19ibG9ja3NfY291bnQgKyBhZGQpOwogCWV4dDNfZnJlZV9ibG9ja3Nfc2IoaGFuZGxlLCBzYiwgb19ibG9ja3NfY291bnQsIGFkZCwgJmZyZWVkX2Jsb2Nrcyk7CmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggNzdjZTE2MS4uYjdkMDU1NCAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtMTQzLDEyICsxNDMsMTYgQEAKIHZvaWQgZXh0M19tc2coc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqcHJlZml4LAogCQljb25zdCBjaGFyICpmbXQsIC4uLikKIHsKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKIAl2YV9saXN0IGFyZ3M7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50aygiJXNFWFQzLWZzICglcyk6ICIsIHByZWZpeCwgc2ItPnNfaWQpOwotCXZwcmludGsoZm10LCBhcmdzKTsKLQlwcmludGsoIlxuIik7CisKKwl2YWYuZm10ID0gZm10OworCXZhZi52YSA9ICZhcmdzOworCisJcHJpbnRrKCIlc0VYVDMtZnMgKCVzKTogJXBWXG4iLCBwcmVmaXgsIHNiLT5zX2lkLCAmdmFmKTsKKwogCXZhX2VuZChhcmdzKTsKIH0KIApAQCAtMTk1LDE1ICsxOTksMjAgQEAKIAkJCXNiLT5zX2lkKTsKIH0KIAotdm9pZCBleHQzX2Vycm9yIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgY29uc3QgY2hhciAqIGZ1bmN0aW9uLAotCQkgY29uc3QgY2hhciAqIGZtdCwgLi4uKQordm9pZCBleHQzX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAorCQljb25zdCBjaGFyICpmbXQsIC4uLikKIHsKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKIAl2YV9saXN0IGFyZ3M7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50ayhLRVJOX0NSSVQgIkVYVDMtZnMgZXJyb3IgKGRldmljZSAlcyk6ICVzOiAiLHNiLT5zX2lkLCBmdW5jdGlvbik7Ci0JdnByaW50ayhmbXQsIGFyZ3MpOwotCXByaW50aygiXG4iKTsKKworCXZhZi5mbXQgPSBmbXQ7CisJdmFmLnZhID0gJmFyZ3M7CisKKwlwcmludGsoS0VSTl9DUklUICJFWFQzLWZzIGVycm9yIChkZXZpY2UgJXMpOiAlczogJXBWXG4iLAorCSAgICAgICBzYi0+c19pZCwgZnVuY3Rpb24sICZ2YWYpOworCiAJdmFfZW5kKGFyZ3MpOwogCiAJZXh0M19oYW5kbGVfZXJyb3Ioc2IpOwpAQCAtMjc0LDE1ICsyODMsMjAgQEAKICAqIGNhc2Ugd2UgdGFrZSB0aGUgZWFzeSB3YXkgb3V0IGFuZCBwYW5pYyBpbW1lZGlhdGVseS4KICAqLwogCi12b2lkIGV4dDNfYWJvcnQgKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCBjb25zdCBjaGFyICogZnVuY3Rpb24sCi0JCSBjb25zdCBjaGFyICogZm10LCAuLi4pCit2b2lkIGV4dDNfYWJvcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqZnVuY3Rpb24sCisJCSBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKIAl2YV9saXN0IGFyZ3M7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50ayhLRVJOX0NSSVQgIkVYVDMtZnMgKCVzKTogZXJyb3I6ICVzOiAiLCBzYi0+c19pZCwgZnVuY3Rpb24pOwotCXZwcmludGsoZm10LCBhcmdzKTsKLQlwcmludGsoIlxuIik7CisKKwl2YWYuZm10ID0gZm10OworCXZhZi52YSA9ICZhcmdzOworCisJcHJpbnRrKEtFUk5fQ1JJVCAiRVhUMy1mcyAoJXMpOiBlcnJvcjogJXM6ICVwVlxuIiwKKwkgICAgICAgc2ItPnNfaWQsIGZ1bmN0aW9uLCAmdmFmKTsKKwogCXZhX2VuZChhcmdzKTsKIAogCWlmICh0ZXN0X29wdChzYiwgRVJST1JTX1BBTklDKSkKQEAgLTMwMCwxNiArMzE0LDIwIEBACiAJCWpvdXJuYWxfYWJvcnQoRVhUM19TQihzYiktPnNfam91cm5hbCwgLUVJTyk7CiB9CiAKLXZvaWQgZXh0M193YXJuaW5nIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgY29uc3QgY2hhciAqIGZ1bmN0aW9uLAotCQkgICBjb25zdCBjaGFyICogZm10LCAuLi4pCit2b2lkIGV4dDNfd2FybmluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmdW5jdGlvbiwKKwkJICBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKIAl2YV9saXN0IGFyZ3M7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50ayhLRVJOX1dBUk5JTkcgIkVYVDMtZnMgKCVzKTogd2FybmluZzogJXM6ICIsCi0JICAgICAgIHNiLT5zX2lkLCBmdW5jdGlvbik7Ci0JdnByaW50ayhmbXQsIGFyZ3MpOwotCXByaW50aygiXG4iKTsKKworCXZhZi5mbXQgPSBmbXQ7CisJdmFmLnZhID0gJmFyZ3M7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJFWFQzLWZzICglcyk6IHdhcm5pbmc6ICVzOiAlcFZcbiIsCisJICAgICAgIHNiLT5zX2lkLCBmdW5jdGlvbiwgJnZhZik7CisKIAl2YV9lbmQoYXJncyk7CiB9CiAKQEAgLTE4NDgsMTMgKzE4NjYsMTUgQEAKIAkJZ290byBmYWlsZWRfbW91bnQ7CiAJfQogCi0JaWYgKGdlbmVyaWNfY2hlY2tfYWRkcmVzc2FibGUoc2ItPnNfYmxvY2tzaXplX2JpdHMsCi0JCQkJICAgICAgbGUzMl90b19jcHUoZXMtPnNfYmxvY2tzX2NvdW50KSkpIHsKKwllcnIgPSBnZW5lcmljX2NoZWNrX2FkZHJlc3NhYmxlKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzLAorCQkJCQlsZTMyX3RvX2NwdShlcy0+c19ibG9ja3NfY291bnQpKTsKKwlpZiAoZXJyKSB7CiAJCWV4dDNfbXNnKHNiLCBLRVJOX0VSUiwKIAkJCSJlcnJvcjogZmlsZXN5c3RlbSBpcyB0b28gbGFyZ2UgdG8gbW91bnQgc2FmZWx5Iik7CiAJCWlmIChzaXplb2Yoc2VjdG9yX3QpIDwgOCkKIAkJCWV4dDNfbXNnKHNiLCBLRVJOX0VSUiwKIAkJCQkiZXJyb3I6IENPTkZJR19MQkRBRiBub3QgZW5hYmxlZCIpOworCQlyZXQgPSBlcnI7CiAJCWdvdG8gZmFpbGVkX21vdW50OwogCX0KIApAQCAtMjI5Nyw3ICsyMzE3LDcgQEAKIAlFWFQzX1NCKHNiKS0+c19qb3VybmFsID0gam91cm5hbDsKIAlleHQzX2NsZWFyX2pvdXJuYWxfZXJyKHNiLCBlcyk7CiAKLQlpZiAoam91cm5hbF9kZXZudW0gJiYKKwlpZiAoIXJlYWxseV9yZWFkX29ubHkgJiYgam91cm5hbF9kZXZudW0gJiYKIAkgICAgam91cm5hbF9kZXZudW0gIT0gbGUzMl90b19jcHUoZXMtPnNfam91cm5hbF9kZXYpKSB7CiAJCWVzLT5zX2pvdXJuYWxfZGV2ID0gY3B1X3RvX2xlMzIoam91cm5hbF9kZXZudW0pOwogCmRpZmYgLS1naXQgYS9mcy9leHQzL3hhdHRyLmMgYi9mcy9leHQzL3hhdHRyLmMKaW5kZXggZTY5ZGM2ZC4uMzJlNmNjMiAxMDA2NDQKLS0tIGEvZnMvZXh0My94YXR0ci5jCisrKyBiL2ZzL2V4dDMveGF0dHIuYwpAQCAtOTI1LDcgKzkyNSw3IEBACiAvKgogICogZXh0M194YXR0cl9zZXRfaGFuZGxlKCkKICAqCi0gKiBDcmVhdGUsIHJlcGxhY2Ugb3IgcmVtb3ZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBmb3IgdGhpcyBpbm9kZS4gQnVmZmVyCisgKiBDcmVhdGUsIHJlcGxhY2Ugb3IgcmVtb3ZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBmb3IgdGhpcyBpbm9kZS4gIFZhbHVlCiAgKiBpcyBOVUxMIHRvIHJlbW92ZSBhbiBleGlzdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZCBub24tTlVMTCB0bwogICogZWl0aGVyIHJlcGxhY2UgYW4gZXhpc3RpbmcgZXh0ZW5kZWQgYXR0cmlidXRlLCBvciBjcmVhdGUgYSBuZXcgZXh0ZW5kZWQKICAqIGF0dHJpYnV0ZS4gVGhlIGZsYWdzIFhBVFRSX1JFUExBQ0UgYW5kIFhBVFRSX0NSRUFURQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmMKaW5kZXggMTRjM2FmMi4uYWRmOTZiOCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9iYWxsb2MuYworKysgYi9mcy9leHQ0L2JhbGxvYy5jCkBAIC01OTIsNyArNTkyLDggQEAKIAkgKiBBY2NvdW50IGZvciB0aGUgYWxsb2NhdGVkIG1ldGEgYmxvY2tzLiAgV2Ugd2lsbCBuZXZlcgogCSAqIGZhaWwgRURRVU9UIGZvciBtZXRkYXRhLCBidXQgd2UgZG8gYWNjb3VudCBmb3IgaXQuCiAJICovCi0JaWYgKCEoKmVycnApICYmIEVYVDRfSShpbm9kZSktPmlfZGVsYWxsb2NfcmVzZXJ2ZWRfZmxhZykgeworCWlmICghKCplcnJwKSAmJgorCSAgICBleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfREVMQUxMT0NfUkVTRVJWRUQpKSB7CiAJCXNwaW5fbG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKIAkJRVhUNF9JKGlub2RlKS0+aV9hbGxvY2F0ZWRfbWV0YV9ibG9ja3MgKz0gYXIubGVuOwogCQlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZGlyLmMgYi9mcy9leHQ0L2Rpci5jCmluZGV4IGVjZTc2ZmIuLjE2NGM1NjAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZGlyLmMKKysrIGIvZnMvZXh0NC9kaXIuYwpAQCAtNjAsOSArNjAsMTMgQEAKIAlyZXR1cm4gKGV4dDRfZmlsZXR5cGVfdGFibGVbZmlsZXR5cGVdKTsKIH0KIAotCisvKgorICogUmV0dXJuIDAgaWYgdGhlIGRpcmVjdG9yeSBlbnRyeSBpcyBPSywgYW5kIDEgaWYgdGhlcmUgaXMgYSBwcm9ibGVtCisgKgorICogTm90ZTogdGhpcyBpcyB0aGUgb3Bwb3NpdGUgb2Ygd2hhdCBleHQyIGFuZCBleHQzIGhpc3RvcmljYWxseSByZXR1cm5lZC4uLgorICovCiBpbnQgX19leHQ0X2NoZWNrX2Rpcl9lbnRyeShjb25zdCBjaGFyICpmdW5jdGlvbiwgdW5zaWduZWQgaW50IGxpbmUsCi0JCQkgICBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCSAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSAgIHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICpkZSwKIAkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCiAJCQkgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQpAQCAtNzEsMjYgKzc1LDM3IEBACiAJY29uc3QgaW50IHJsZW4gPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuLAogCQkJCQkJZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CiAKLQlpZiAocmxlbiA8IEVYVDRfRElSX1JFQ19MRU4oMSkpCisJaWYgKHVubGlrZWx5KHJsZW4gPCBFWFQ0X0RJUl9SRUNfTEVOKDEpKSkKIAkJZXJyb3JfbXNnID0gInJlY19sZW4gaXMgc21hbGxlciB0aGFuIG1pbmltYWwiOwotCWVsc2UgaWYgKHJsZW4gJSA0ICE9IDApCisJZWxzZSBpZiAodW5saWtlbHkocmxlbiAlIDQgIT0gMCkpCiAJCWVycm9yX21zZyA9ICJyZWNfbGVuICUgNCAhPSAwIjsKLQllbHNlIGlmIChybGVuIDwgRVhUNF9ESVJfUkVDX0xFTihkZS0+bmFtZV9sZW4pKQorCWVsc2UgaWYgKHVubGlrZWx5KHJsZW4gPCBFWFQ0X0RJUl9SRUNfTEVOKGRlLT5uYW1lX2xlbikpKQogCQllcnJvcl9tc2cgPSAicmVjX2xlbiBpcyB0b28gc21hbGwgZm9yIG5hbWVfbGVuIjsKLQllbHNlIGlmICgoKGNoYXIgKikgZGUgLSBiaC0+Yl9kYXRhKSArIHJsZW4gPiBkaXItPmlfc2ItPnNfYmxvY2tzaXplKQorCWVsc2UgaWYgKHVubGlrZWx5KCgoY2hhciAqKSBkZSAtIGJoLT5iX2RhdGEpICsgcmxlbiA+CisJCQkgIGRpci0+aV9zYi0+c19ibG9ja3NpemUpKQogCQllcnJvcl9tc2cgPSAiZGlyZWN0b3J5IGVudHJ5IGFjcm9zcyBibG9ja3MiOwotCWVsc2UgaWYgKGxlMzJfdG9fY3B1KGRlLT5pbm9kZSkgPgotCQkJbGUzMl90b19jcHUoRVhUNF9TQihkaXItPmlfc2IpLT5zX2VzLT5zX2lub2Rlc19jb3VudCkpCisJZWxzZSBpZiAodW5saWtlbHkobGUzMl90b19jcHUoZGUtPmlub2RlKSA+CisJCQlsZTMyX3RvX2NwdShFWFQ0X1NCKGRpci0+aV9zYiktPnNfZXMtPnNfaW5vZGVzX2NvdW50KSkpCiAJCWVycm9yX21zZyA9ICJpbm9kZSBvdXQgb2YgYm91bmRzIjsKKwllbHNlCisJCXJldHVybiAwOwogCi0JaWYgKGVycm9yX21zZyAhPSBOVUxMKQotCQlleHQ0X2Vycm9yX2lub2RlKGRpciwgZnVuY3Rpb24sIGxpbmUsIGJoLT5iX2Jsb2NrbnIsCi0JCQkiYmFkIGVudHJ5IGluIGRpcmVjdG9yeTogJXMgLSAiCi0JCQkib2Zmc2V0PSV1KCV1KSwgaW5vZGU9JXUsIHJlY19sZW49JWQsIG5hbWVfbGVuPSVkIiwKLQkJCWVycm9yX21zZywgKHVuc2lnbmVkKSAob2Zmc2V0JWJoLT5iX3NpemUpLCBvZmZzZXQsCi0JCQlsZTMyX3RvX2NwdShkZS0+aW5vZGUpLAotCQkJcmxlbiwgZGUtPm5hbWVfbGVuKTsKLQlyZXR1cm4gZXJyb3JfbXNnID09IE5VTEwgPyAxIDogMDsKKwlpZiAoZmlscCkKKwkJZXh0NF9lcnJvcl9maWxlKGZpbHAsIGZ1bmN0aW9uLCBsaW5lLCBiaCA/IGJoLT5iX2Jsb2NrbnIgOiAwLAorCQkJCSJiYWQgZW50cnkgaW4gZGlyZWN0b3J5OiAlcyAtIG9mZnNldD0ldSgldSksICIKKwkJCQkiaW5vZGU9JXUsIHJlY19sZW49JWQsIG5hbWVfbGVuPSVkIiwKKwkJCQllcnJvcl9tc2csICh1bnNpZ25lZCkgKG9mZnNldCViaC0+Yl9zaXplKSwKKwkJCQlvZmZzZXQsIGxlMzJfdG9fY3B1KGRlLT5pbm9kZSksCisJCQkJcmxlbiwgZGUtPm5hbWVfbGVuKTsKKwllbHNlCisJCWV4dDRfZXJyb3JfaW5vZGUoZGlyLCBmdW5jdGlvbiwgbGluZSwgYmggPyBiaC0+Yl9ibG9ja25yIDogMCwKKwkJCQkiYmFkIGVudHJ5IGluIGRpcmVjdG9yeTogJXMgLSBvZmZzZXQ9JXUoJXUpLCAiCisJCQkJImlub2RlPSV1LCByZWNfbGVuPSVkLCBuYW1lX2xlbj0lZCIsCisJCQkJZXJyb3JfbXNnLCAodW5zaWduZWQpIChvZmZzZXQlYmgtPmJfc2l6ZSksCisJCQkJb2Zmc2V0LCBsZTMyX3RvX2NwdShkZS0+aW5vZGUpLAorCQkJCXJsZW4sIGRlLT5uYW1lX2xlbik7CisKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCBleHQ0X3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbHAsCkBAIC0xNTIsOCArMTY3LDkgQEAKIAkJICovCiAJCWlmICghYmgpIHsKIAkJCWlmICghZGlyX2hhc19lcnJvcikgewotCQkJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsICJkaXJlY3RvcnkgIgotCQkJCQkgICAiY29udGFpbnMgYSBob2xlIGF0IG9mZnNldCAlTHUiLAorCQkJCUVYVDRfRVJST1JfRklMRShmaWxwLCAwLAorCQkJCQkJImRpcmVjdG9yeSBjb250YWlucyBhICIKKwkJCQkJCSJob2xlIGF0IG9mZnNldCAlbGx1IiwKIAkJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZmlscC0+Zl9wb3MpOwogCQkJCWRpcl9oYXNfZXJyb3IgPSAxOwogCQkJfQpAQCAtMTk0LDggKzIxMCw4IEBACiAJCXdoaWxlICghZXJyb3IgJiYgZmlscC0+Zl9wb3MgPCBpbm9kZS0+aV9zaXplCiAJCSAgICAgICAmJiBvZmZzZXQgPCBzYi0+c19ibG9ja3NpemUpIHsKIAkJCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopIChiaC0+Yl9kYXRhICsgb2Zmc2V0KTsKLQkJCWlmICghZXh0NF9jaGVja19kaXJfZW50cnkoaW5vZGUsIGRlLAotCQkJCQkJICBiaCwgb2Zmc2V0KSkgeworCQkJaWYgKGV4dDRfY2hlY2tfZGlyX2VudHJ5KGlub2RlLCBmaWxwLCBkZSwKKwkJCQkJCSBiaCwgb2Zmc2V0KSkgewogCQkJCS8qCiAJCQkJICogT24gZXJyb3IsIHNraXAgdGhlIGZfcG9zIHRvIHRoZSBuZXh0IGJsb2NrCiAJCQkJICovCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDk0Y2UzZDcuLjFkZTY1ZjUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCisrKyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC02Miw4ICs2Miw4IEBACiAjZGVmaW5lIEVYVDRfRVJST1JfSU5PREVfQkxPQ0soaW5vZGUsIGJsb2NrLCBmbXQsIGEuLi4pCQkJXAogCWV4dDRfZXJyb3JfaW5vZGUoKGlub2RlKSwgX19mdW5jX18sIF9fTElORV9fLCAoYmxvY2spLCAoZm10KSwgIyMgYSkKIAotI2RlZmluZSBFWFQ0X0VSUk9SX0ZJTEUoZmlsZSwgZm10LCBhLi4uKQlcCi0JZXh0NF9lcnJvcl9maWxlKF9fZnVuY19fLCBfX0xJTkVfXywgKGZpbGUpLCAoZm10KSwgIyMgYSkKKyNkZWZpbmUgRVhUNF9FUlJPUl9GSUxFKGZpbGUsIGJsb2NrLCBmbXQsIGEuLi4pCQkJCVwKKwlleHQ0X2Vycm9yX2ZpbGUoKGZpbGUpLCBfX2Z1bmNfXywgX19MSU5FX18sIChibG9jayksIChmbXQpLCAjIyBhKQogCiAvKiBkYXRhIHR5cGUgZm9yIGJsb2NrIG9mZnNldCBvZiBibG9jayBncm91cCAqLwogdHlwZWRlZiBpbnQgZXh0NF9ncnBibGtfdDsKQEAgLTU2MSwyMyArNTYxLDcgQEAKICNkZWZpbmUgRVhUNF9JT0MzMl9TRVRWRVJTSU9OX09MRAlGU19JT0MzMl9TRVRWRVJTSU9OCiAjZW5kaWYKIAotCi0vKgotICogIE1vdW50IG9wdGlvbnMKLSAqLwotc3RydWN0IGV4dDRfbW91bnRfb3B0aW9ucyB7Ci0JdW5zaWduZWQgbG9uZyBzX21vdW50X29wdDsKLQl1aWRfdCBzX3Jlc3VpZDsKLQlnaWRfdCBzX3Jlc2dpZDsKLQl1bnNpZ25lZCBsb25nIHNfY29tbWl0X2ludGVydmFsOwotCXUzMiBzX21pbl9iYXRjaF90aW1lLCBzX21heF9iYXRjaF90aW1lOwotI2lmZGVmIENPTkZJR19RVU9UQQotCWludCBzX2pxdW90YV9mbXQ7Ci0JY2hhciAqc19xZl9uYW1lc1tNQVhRVU9UQVNdOwotI2VuZGlmCi19OwotCi0vKiBNYXggcGh5c2ljYWwgYmxvY2sgd2UgY2FuIGFkZHJlcyB3L28gZXh0ZW50cyAqLworLyogTWF4IHBoeXNpY2FsIGJsb2NrIHdlIGNhbiBhZGRyZXNzIHcvbyBleHRlbnRzICovCiAjZGVmaW5lIEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUwkweEZGRkZGRkZGCiAKIC8qCkBAIC03MDksNiArNjkzLDggQEAKIAlpZiAoRVhUNF9GSVRTX0lOX0lOT0RFKHJhd19pbm9kZSwgRVhUNF9JKGlub2RlKSwgeHRpbWUgIyMgX2V4dHJhKSkgICAgIFwKIAkJZXh0NF9kZWNvZGVfZXh0cmFfdGltZSgmKGlub2RlKS0+eHRpbWUsCQkJICAgICAgIFwKIAkJCQkgICAgICAgcmF3X2lub2RlLT54dGltZSAjIyBfZXh0cmEpOwkgICAgICAgXAorCWVsc2UJCQkJCQkJCSAgICAgICBcCisJCShpbm9kZSktPnh0aW1lLnR2X25zZWMgPSAwOwkJCQkgICAgICAgXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBFWFQ0X0VJTk9ERV9HRVRfWFRJTUUoeHRpbWUsIGVpbm9kZSwgcmF3X2lub2RlKQkJCSAgICAgICBcCkBAIC03MTksNiArNzA1LDggQEAKIAlpZiAoRVhUNF9GSVRTX0lOX0lOT0RFKHJhd19pbm9kZSwgZWlub2RlLCB4dGltZSAjIyBfZXh0cmEpKQkgICAgICAgXAogCQlleHQ0X2RlY29kZV9leHRyYV90aW1lKCYoZWlub2RlKS0+eHRpbWUsCQkgICAgICAgXAogCQkJCSAgICAgICByYXdfaW5vZGUtPnh0aW1lICMjIF9leHRyYSk7CSAgICAgICBcCisJZWxzZQkJCQkJCQkJICAgICAgIFwKKwkJKGVpbm9kZSktPnh0aW1lLnR2X25zZWMgPSAwOwkJCQkgICAgICAgXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBpX2Rpc2tfdmVyc2lvbiBvc2QxLmxpbnV4MS5sX2lfdmVyc2lvbgpAQCAtNzUwLDEyICs3MzgsMTMgQEAKIAogLyoKICAqIHN0b3JhZ2UgZm9yIGNhY2hlZCBleHRlbnQKKyAqIElmIGVjX2xlbiA9PSAwLCB0aGVuIHRoZSBjYWNoZSBpcyBpbnZhbGlkLgorICogSWYgZWNfc3RhcnQgPT0gMCwgdGhlbiB0aGUgY2FjaGUgcmVwcmVzZW50cyBhIGdhcCAobnVsbCBtYXBwaW5nKQogICovCiBzdHJ1Y3QgZXh0NF9leHRfY2FjaGUgewogCWV4dDRfZnNibGtfdAllY19zdGFydDsKIAlleHQ0X2xibGtfdAllY19ibG9jazsKIAlfX3UzMgkJZWNfbGVuOyAvKiBtdXN0IGJlIDMyYml0IHRvIHJldHVybiBob2xlcyAqLwotCV9fdTMyCQllY190eXBlOwogfTsKIAogLyoKQEAgLTc3NCwxMCArNzYzLDEyIEBACiAJICogbmVhciB0byB0aGVpciBwYXJlbnQgZGlyZWN0b3J5J3MgaW5vZGUuCiAJICovCiAJZXh0NF9ncm91cF90CWlfYmxvY2tfZ3JvdXA7CisJZXh0NF9sYmxrX3QJaV9kaXJfc3RhcnRfbG9va3VwOworI2lmIChCSVRTX1BFUl9MT05HIDwgNjQpCiAJdW5zaWduZWQgbG9uZwlpX3N0YXRlX2ZsYWdzOwkJLyogRHluYW1pYyBzdGF0ZSBmbGFncyAqLworI2VuZGlmCiAJdW5zaWduZWQgbG9uZwlpX2ZsYWdzOwogCi0JZXh0NF9sYmxrX3QJCWlfZGlyX3N0YXJ0X2xvb2t1cDsKICNpZmRlZiBDT05GSUdfRVhUNF9GU19YQVRUUgogCS8qCiAJICogRXh0ZW5kZWQgYXR0cmlidXRlcyBjYW4gYmUgcmVhZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBtYWluIGZpbGUKQEAgLTgyMCw3ICs4MTEsNyBAQAogCSAqLwogCXN0cnVjdCByd19zZW1hcGhvcmUgaV9kYXRhX3NlbTsKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwotCXN0cnVjdCBqYmQyX2lub2RlIGppbm9kZTsKKwlzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlOwogCiAJc3RydWN0IGV4dDRfZXh0X2NhY2hlIGlfY2FjaGVkX2V4dGVudDsKIAkvKgpAQCAtODQwLDE0ICs4MzEsMTIgQEAKIAl1bnNpZ25lZCBpbnQgaV9yZXNlcnZlZF9kYXRhX2Jsb2NrczsKIAl1bnNpZ25lZCBpbnQgaV9yZXNlcnZlZF9tZXRhX2Jsb2NrczsKIAl1bnNpZ25lZCBpbnQgaV9hbGxvY2F0ZWRfbWV0YV9ibG9ja3M7Ci0JdW5zaWduZWQgc2hvcnQgaV9kZWxhbGxvY19yZXNlcnZlZF9mbGFnOwotCXNlY3Rvcl90IGlfZGFfbWV0YWRhdGFfY2FsY19sYXN0X2xibG9jazsKKwlleHQ0X2xibGtfdCBpX2RhX21ldGFkYXRhX2NhbGNfbGFzdF9sYmxvY2s7CiAJaW50IGlfZGFfbWV0YWRhdGFfY2FsY19sZW47CiAKIAkvKiBvbi1kaXNrIGFkZGl0aW9uYWwgbGVuZ3RoICovCiAJX191MTYgaV9leHRyYV9pc2l6ZTsKIAotCXNwaW5sb2NrX3QgaV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrOwogI2lmZGVmIENPTkZJR19RVU9UQQogCS8qIHF1b3RhIHNwYWNlIHJlc2VydmF0aW9uLCBtYW5hZ2VkIGludGVybmFsbHkgYnkgcXVvdGEgY29kZSAqLwogCXFzaXplX3QgaV9yZXNlcnZlZF9xdW90YTsKQEAgLTg1Niw5ICs4NDUsMTEgQEAKIAkvKiBjb21wbGV0ZWQgSU9zIHRoYXQgbWlnaHQgbmVlZCB1bndyaXR0ZW4gZXh0ZW50cyBoYW5kbGluZyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgaV9jb21wbGV0ZWRfaW9fbGlzdDsKIAlzcGlubG9ja190IGlfY29tcGxldGVkX2lvX2xvY2s7CisJYXRvbWljX3QgaV9pb2VuZF9jb3VudDsJLyogTnVtYmVyIG9mIG91dHN0YW5kaW5nIGlvX2VuZCBzdHJ1Y3RzICovCiAJLyogY3VycmVudCBpb19lbmQgc3RydWN0dXJlIGZvciBhc3luYyBESU8gd3JpdGUqLwogCWV4dDRfaW9fZW5kX3QgKmN1cl9haW9fZGlvOwotCWF0b21pY190IGlfaW9lbmRfY291bnQ7CS8qIE51bWJlciBvZiBvdXRzdGFuZGluZyBpb19lbmQgc3RydWN0cyAqLworCisJc3BpbmxvY2tfdCBpX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2s7CiAKIAkvKgogCSAqIFRyYW5zYWN0aW9ucyB0aGF0IGNvbnRhaW4gaW5vZGUncyBtZXRhZGF0YSBuZWVkZWQgdG8gY29tcGxldGUKQEAgLTkxNywxMSArOTA4LDIwIEBACiAjZGVmaW5lIEVYVDRfTU9VTlRfRElTQ0FSRAkJMHg0MDAwMDAwMCAvKiBJc3N1ZSBESVNDQVJEIHJlcXVlc3RzICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfSU5JVF9JTk9ERV9UQUJMRQkweDgwMDAwMDAwIC8qIEluaXRpYWxpemUgdW5pbml0aWFsaXplZCBpdGFibGVzICovCiAKLSNkZWZpbmUgY2xlYXJfb3B0KG8sIG9wdCkJCW8gJj0gfkVYVDRfTU9VTlRfIyNvcHQKLSNkZWZpbmUgc2V0X29wdChvLCBvcHQpCQkJbyB8PSBFWFQ0X01PVU5UXyMjb3B0CisjZGVmaW5lIGNsZWFyX29wdChzYiwgb3B0KQkJRVhUNF9TQihzYiktPnNfbW91bnRfb3B0ICY9IFwKKwkJCQkJCX5FWFQ0X01PVU5UXyMjb3B0CisjZGVmaW5lIHNldF9vcHQoc2IsIG9wdCkJCUVYVDRfU0Ioc2IpLT5zX21vdW50X29wdCB8PSBcCisJCQkJCQlFWFQ0X01PVU5UXyMjb3B0CiAjZGVmaW5lIHRlc3Rfb3B0KHNiLCBvcHQpCQkoRVhUNF9TQihzYiktPnNfbW91bnRfb3B0ICYgXAogCQkJCQkgRVhUNF9NT1VOVF8jI29wdCkKIAorI2RlZmluZSBjbGVhcl9vcHQyKHNiLCBvcHQpCQlFWFQ0X1NCKHNiKS0+c19tb3VudF9vcHQyICY9IFwKKwkJCQkJCX5FWFQ0X01PVU5UMl8jI29wdAorI2RlZmluZSBzZXRfb3B0MihzYiwgb3B0KQkJRVhUNF9TQihzYiktPnNfbW91bnRfb3B0MiB8PSBcCisJCQkJCQlFWFQ0X01PVU5UMl8jI29wdAorI2RlZmluZSB0ZXN0X29wdDIoc2IsIG9wdCkJCShFWFQ0X1NCKHNiKS0+c19tb3VudF9vcHQyICYgXAorCQkJCQkgRVhUNF9NT1VOVDJfIyNvcHQpCisKICNkZWZpbmUgZXh0NF9zZXRfYml0CQkJZXh0Ml9zZXRfYml0CiAjZGVmaW5lIGV4dDRfc2V0X2JpdF9hdG9taWMJCWV4dDJfc2V0X2JpdF9hdG9taWMKICNkZWZpbmUgZXh0NF9jbGVhcl9iaXQJCQlleHQyX2NsZWFyX2JpdApAQCAtMTA4Nyw2ICsxMDg3LDcgQEAKIAlzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqc19lczsJLyogUG9pbnRlciB0byB0aGUgc3VwZXIgYmxvY2sgaW4gdGhlIGJ1ZmZlciAqLwogCXN0cnVjdCBidWZmZXJfaGVhZCAqKnNfZ3JvdXBfZGVzYzsKIAl1bnNpZ25lZCBpbnQgc19tb3VudF9vcHQ7CisJdW5zaWduZWQgaW50IHNfbW91bnRfb3B0MjsKIAl1bnNpZ25lZCBpbnQgc19tb3VudF9mbGFnczsKIAlleHQ0X2ZzYmxrX3Qgc19zYl9ibG9jazsKIAl1aWRfdCBzX3Jlc3VpZDsKQEAgLTEyMzcsMjQgKzEyMzgsMzkgQEAKIAlFWFQ0X1NUQVRFX0VYVF9NSUdSQVRFLAkJLyogSW5vZGUgaXMgbWlncmF0aW5nICovCiAJRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOLAkvKiBuZWVkIGNvbnZlcnQgb24gZGlvIGRvbmUqLwogCUVYVDRfU1RBVEVfTkVXRU5UUlksCQkvKiBGaWxlIGp1c3QgYWRkZWQgdG8gZGlyICovCisJRVhUNF9TVEFURV9ERUxBTExPQ19SRVNFUlZFRCwJLyogYmxrcyBhbHJlYWR5IHJlc2VydmVkIGZvciBkZWxhbGxvYyAqLwogfTsKIAotI2RlZmluZSBFWFQ0X0lOT0RFX0JJVF9GTlMobmFtZSwgZmllbGQpCQkJCQlcCisjZGVmaW5lIEVYVDRfSU5PREVfQklUX0ZOUyhuYW1lLCBmaWVsZCwgb2Zmc2V0KQkJCQlcCiBzdGF0aWMgaW5saW5lIGludCBleHQ0X3Rlc3RfaW5vZGVfIyNuYW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBiaXQpCVwKIHsJCQkJCQkJCQlcCi0JcmV0dXJuIHRlc3RfYml0KGJpdCwgJkVYVDRfSShpbm9kZSktPmlfIyNmaWVsZCk7CQlcCisJcmV0dXJuIHRlc3RfYml0KGJpdCArIChvZmZzZXQpLCAmRVhUNF9JKGlub2RlKS0+aV8jI2ZpZWxkKTsJXAogfQkJCQkJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X3NldF9pbm9kZV8jI25hbWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGJpdCkJXAogewkJCQkJCQkJCVwKLQlzZXRfYml0KGJpdCwgJkVYVDRfSShpbm9kZSktPmlfIyNmaWVsZCk7CQkJXAorCXNldF9iaXQoYml0ICsgKG9mZnNldCksICZFWFQ0X0koaW5vZGUpLT5pXyMjZmllbGQpOwkJXAogfQkJCQkJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2NsZWFyX2lub2RlXyMjbmFtZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYml0KSBcCiB7CQkJCQkJCQkJXAotCWNsZWFyX2JpdChiaXQsICZFWFQ0X0koaW5vZGUpLT5pXyMjZmllbGQpOwkJCVwKKwljbGVhcl9iaXQoYml0ICsgKG9mZnNldCksICZFWFQ0X0koaW5vZGUpLT5pXyMjZmllbGQpOwkJXAogfQogCi1FWFQ0X0lOT0RFX0JJVF9GTlMoZmxhZywgZmxhZ3MpCi1FWFQ0X0lOT0RFX0JJVF9GTlMoc3RhdGUsIHN0YXRlX2ZsYWdzKQorRVhUNF9JTk9ERV9CSVRfRk5TKGZsYWcsIGZsYWdzLCAwKQorI2lmIChCSVRTX1BFUl9MT05HIDwgNjQpCitFWFQ0X0lOT0RFX0JJVF9GTlMoc3RhdGUsIHN0YXRlX2ZsYWdzLCAwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9jbGVhcl9zdGF0ZV9mbGFncyhzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSkKK3sKKwkoZWkpLT5pX3N0YXRlX2ZsYWdzID0gMDsKK30KKyNlbHNlCitFWFQ0X0lOT0RFX0JJVF9GTlMoc3RhdGUsIGZsYWdzLCAzMikKKworc3RhdGljIGlubGluZSB2b2lkIGV4dDRfY2xlYXJfc3RhdGVfZmxhZ3Moc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkpCit7CisJLyogV2UgZGVwZW5kIG9uIHRoZSBmYWN0IHRoYXQgY2FsbGVycyB3aWxsIHNldCBpX2ZsYWdzICovCit9CisjZW5kaWYKICNlbHNlCiAvKiBBc3N1bWUgdGhhdCB1c2VyIG1vZGUgcHJvZ3JhbXMgYXJlIHBhc3NpbmcgaW4gYW4gZXh0NGZzIHN1cGVyYmxvY2ssIG5vdAogICogYSBrZXJuZWwgc3RydWN0IHN1cGVyX2Jsb2NrLiAgVGhpcyB3aWxsIGFsbG93IHVzIHRvIGNhbGwgdGhlIGZlYXR1cmUtdGVzdApAQCAtMTY0MiwxMCArMTY1OCwxMiBAQAogCiAvKiBkaXIuYyAqLwogZXh0ZXJuIGludCBfX2V4dDRfY2hlY2tfZGlyX2VudHJ5KGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgaW5vZGUgKiwKKwkJCQkgIHN0cnVjdCBmaWxlICosCiAJCQkJICBzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqLAogCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHVuc2lnbmVkIGludCk7Ci0jZGVmaW5lIGV4dDRfY2hlY2tfZGlyX2VudHJ5KGRpciwgZGUsIGJoLCBvZmZzZXQpIFwKLQlfX2V4dDRfY2hlY2tfZGlyX2VudHJ5KF9fZnVuY19fLCBfX0xJTkVfXywgKGRpciksIChkZSksIChiaCksIChvZmZzZXQpKQorI2RlZmluZSBleHQ0X2NoZWNrX2Rpcl9lbnRyeShkaXIsIGZpbHAsIGRlLCBiaCwgb2Zmc2V0KQkJCVwKKwl1bmxpa2VseShfX2V4dDRfY2hlY2tfZGlyX2VudHJ5KF9fZnVuY19fLCBfX0xJTkVfXywgKGRpciksIChmaWxwKSwgXAorCQkJCQkoZGUpLCAoYmgpLCAob2Zmc2V0KSkpCiBleHRlcm4gaW50IGV4dDRfaHRyZWVfc3RvcmVfZGlyZW50KHN0cnVjdCBmaWxlICpkaXJfZmlsZSwgX191MzIgaGFzaCwKIAkJCQkgICAgX191MzIgbWlub3JfaGFzaCwKIAkJCQkgICAgc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRpcmVudCk7CkBAIC0xNjUzLDYgKzE2NzEsNyBAQAogCiAvKiBmc3luYy5jICovCiBleHRlcm4gaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICosIGludCk7CitleHRlcm4gaW50IGV4dDRfZmx1c2hfY29tcGxldGVkX0lPKHN0cnVjdCBpbm9kZSAqKTsKIAogLyogaGFzaC5jICovCiBleHRlcm4gaW50IGV4dDRmc19kaXJoYXNoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIHN0cnVjdApAQCAtMTc1Miw4ICsxNzcxLDggQEAKIAkJCSAgICAgZXh0NF9mc2Jsa190LCBjb25zdCBjaGFyICosIC4uLikKIAlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDUsIDYpKSk7CiBleHRlcm4gdm9pZCBleHQ0X2Vycm9yX2ZpbGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsCi0JCQkgICAgY29uc3QgY2hhciAqLCAuLi4pCi0JX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCA0LCA1KSkpOworCQkJICAgIGV4dDRfZnNibGtfdCwgY29uc3QgY2hhciAqLCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCA1LCA2KSkpOwogZXh0ZXJuIHZvaWQgX19leHQ0X3N0ZF9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLAogCQkJICAgICB1bnNpZ25lZCBpbnQsIGludCk7CiBleHRlcm4gdm9pZCBfX2V4dDRfYWJvcnQoc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0X2V4dGVudHMuaCBiL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgKaW5kZXggMjhjZTcwZi4uMmUyOWFiYiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0X2V4dGVudHMuaAorKysgYi9mcy9leHQ0L2V4dDRfZXh0ZW50cy5oCkBAIC0xMTksMTAgKzExOSw2IEBACiAgKiBzdHJ1Y3R1cmUgZm9yIGV4dGVybmFsIEFQSQogICovCiAKLSNkZWZpbmUgRVhUNF9FWFRfQ0FDSEVfTk8JMAotI2RlZmluZSBFWFQ0X0VYVF9DQUNIRV9HQVAJMQotI2RlZmluZSBFWFQ0X0VYVF9DQUNIRV9FWFRFTlQJMgotCiAvKgogICogdG8gYmUgY2FsbGVkIGJ5IGV4dDRfZXh0X3dhbGtfc3BhY2UoKQogICogbmVnYXRpdmUgcmV0Y29kZSAtIGVycm9yCkBAIC0xOTcsNyArMTkzLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZXh0NF9leHRfaW52YWxpZGF0ZV9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCUVYVDRfSShpbm9kZSktPmlfY2FjaGVkX2V4dGVudC5lY190eXBlID0gRVhUNF9FWFRfQ0FDSEVfTk87CisJRVhUNF9JKGlub2RlKS0+aV9jYWNoZWRfZXh0ZW50LmVjX2xlbiA9IDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoc3RydWN0IGV4dDRfZXh0ZW50ICpleHQpCkBAIC0yNzgsNyArMjc0LDcgQEAKIH0KIAogZXh0ZXJuIGludCBleHQ0X2V4dF9jYWxjX21ldGFkYXRhX2Ftb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgc2VjdG9yX3QgbGJsb2Nrcyk7CisJCQkJCSBleHQ0X2xibGtfdCBsYmxvY2tzKTsKIGV4dGVybiBpbnQgZXh0NF9leHRlbnRfdHJlZV9pbml0KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgZXh0NF9leHRfY2FsY19jcmVkaXRzX2Zvcl9zaW5nbGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCQkgICBpbnQgbnVtLApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0X2piZDIuaCBiL2ZzL2V4dDQvZXh0NF9qYmQyLmgKaW5kZXggYjBiZDc5Mi4uZDhiOTkyZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0X2piZDIuaAorKysgYi9mcy9leHQ0L2V4dDRfamJkMi5oCkBAIC0yNTMsNyArMjUzLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGV4dDRfamJkMl9maWxlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaWYgKGV4dDRfaGFuZGxlX3ZhbGlkKGhhbmRsZSkpCi0JCXJldHVybiBqYmQyX2pvdXJuYWxfZmlsZV9pbm9kZShoYW5kbGUsICZFWFQ0X0koaW5vZGUpLT5qaW5vZGUpOworCQlyZXR1cm4gamJkMl9qb3VybmFsX2ZpbGVfaW5vZGUoaGFuZGxlLCBFWFQ0X0koaW5vZGUpLT5qaW5vZGUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jCmluZGV4IDA1NTRjNDguLmM0MDY4ZjYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC0xMTcsMTEgKzExNywzMyBAQAogCQlzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4OwogCQlkZXB0aCA9IHBhdGgtPnBfZGVwdGg7CiAKLQkJLyogdHJ5IHRvIHByZWRpY3QgYmxvY2sgcGxhY2VtZW50ICovCisJCS8qCisJCSAqIFRyeSB0byBwcmVkaWN0IGJsb2NrIHBsYWNlbWVudCBhc3N1bWluZyB0aGF0IHdlIGFyZQorCQkgKiBmaWxsaW5nIGluIGEgZmlsZSB3aGljaCB3aWxsIGV2ZW50dWFsbHkgYmUKKwkJICogbm9uLXNwYXJzZSAtLS0gaS5lLiwgaW4gdGhlIGNhc2Ugb2YgbGliYmZkIHdyaXRpbmcKKwkJICogYW4gRUxGIG9iamVjdCBzZWN0aW9ucyBvdXQtb2Ytb3JkZXIgYnV0IGluIGEgd2F5CisJCSAqIHRoZSBldmVudHVhbGx5IHJlc3VsdHMgaW4gYSBjb250aWd1b3VzIG9iamVjdCBvcgorCQkgKiBleGVjdXRhYmxlIGZpbGUsIG9yIHNvbWUgZGF0YWJhc2UgZXh0ZW5kaW5nIGEgdGFibGUKKwkJICogc3BhY2UgZmlsZS4gIEhvd2V2ZXIsIHRoaXMgaXMgYWN0dWFsbHkgc29tZXdoYXQKKwkJICogbm9uLWlkZWFsIGlmIHdlIGFyZSB3cml0aW5nIGEgc3BhcnNlIGZpbGUgc3VjaCBhcworCQkgKiBxZW11IG9yIEtWTSB3cml0aW5nIGEgcmF3IGltYWdlIGZpbGUgdGhhdCBpcyBnb2luZworCQkgKiB0byBzdGF5IGZhaXJseSBzcGFyc2UsIHNpbmNlIGl0IHdpbGwgZW5kIHVwCisJCSAqIGZyYWdtZW50aW5nIHRoZSBmaWxlIHN5c3RlbSdzIGZyZWUgc3BhY2UuICBNYXliZSB3ZQorCQkgKiBzaG91bGQgaGF2ZSBzb21lIGh1ZXJpc3RpY3Mgb3Igc29tZSB3YXkgdG8gYWxsb3cKKwkJICogdXNlcnNwYWNlIHRvIHBhc3MgYSBoaW50IHRvIGZpbGUgc3lzdGVtLAorCQkgKiBlc3BlY2lpYWxseSBpZiB0aGUgbGF0dGVyIGNhc2UgdHVybnMgb3V0IHRvIGJlCisJCSAqIGNvbW1vbi4KKwkJICovCiAJCWV4ID0gcGF0aFtkZXB0aF0ucF9leHQ7Ci0JCWlmIChleCkKLQkJCXJldHVybiAoZXh0NF9leHRfcGJsb2NrKGV4KSArCi0JCQkJKGJsb2NrIC0gbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKSkpOworCQlpZiAoZXgpIHsKKwkJCWV4dDRfZnNibGtfdCBleHRfcGJsayA9IGV4dDRfZXh0X3BibG9jayhleCk7CisJCQlleHQ0X2xibGtfdCBleHRfYmxvY2sgPSBsZTMyX3RvX2NwdShleC0+ZWVfYmxvY2spOworCisJCQlpZiAoYmxvY2sgPiBleHRfYmxvY2spCisJCQkJcmV0dXJuIGV4dF9wYmxrICsgKGJsb2NrIC0gZXh0X2Jsb2NrKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gZXh0X3BibGsgLSAoZXh0X2Jsb2NrIC0gYmxvY2spOworCQl9CiAKIAkJLyogaXQgbG9va3MgbGlrZSBpbmRleCBpcyBlbXB0eTsKIAkJICogdHJ5IHRvIGZpbmQgc3RhcnRpbmcgYmxvY2sgZnJvbSBpbmRleCBpdHNlbGYgKi8KQEAgLTI0NCw3ICsyNjYsNyBAQAogICogdG8gYWxsb2NhdGUgQGJsb2NrcwogICogV29yc2UgY2FzZSBpcyBvbmUgYmxvY2sgcGVyIGV4dGVudAogICovCi1pbnQgZXh0NF9leHRfY2FsY19tZXRhZGF0YV9hbW91bnQoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgbGJsb2NrKQoraW50IGV4dDRfZXh0X2NhbGNfbWV0YWRhdGFfYW1vdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibG9jaykKIHsKIAlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiAJaW50IGlkeHMsIG51bSA9IDA7CkBAIC0xODcyLDEyICsxODk0LDEwIEBACiAJCQljYmV4LmVjX2Jsb2NrID0gc3RhcnQ7CiAJCQljYmV4LmVjX2xlbiA9IGVuZCAtIHN0YXJ0OwogCQkJY2JleC5lY19zdGFydCA9IDA7Ci0JCQljYmV4LmVjX3R5cGUgPSBFWFQ0X0VYVF9DQUNIRV9HQVA7CiAJCX0gZWxzZSB7CiAJCQljYmV4LmVjX2Jsb2NrID0gbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKTsKIAkJCWNiZXguZWNfbGVuID0gZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpOwogCQkJY2JleC5lY19zdGFydCA9IGV4dDRfZXh0X3BibG9jayhleCk7Ci0JCQljYmV4LmVjX3R5cGUgPSBFWFQ0X0VYVF9DQUNIRV9FWFRFTlQ7CiAJCX0KIAogCQlpZiAodW5saWtlbHkoY2JleC5lY19sZW4gPT0gMCkpIHsKQEAgLTE5MTcsMTMgKzE5MzcsMTIgQEAKIAogc3RhdGljIHZvaWQKIGV4dDRfZXh0X3B1dF9pbl9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jaywKLQkJCV9fdTMyIGxlbiwgZXh0NF9mc2Jsa190IHN0YXJ0LCBpbnQgdHlwZSkKKwkJCV9fdTMyIGxlbiwgZXh0NF9mc2Jsa190IHN0YXJ0KQogewogCXN0cnVjdCBleHQ0X2V4dF9jYWNoZSAqY2V4OwogCUJVR19PTihsZW4gPT0gMCk7CiAJc3Bpbl9sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOwogCWNleCA9ICZFWFQ0X0koaW5vZGUpLT5pX2NhY2hlZF9leHRlbnQ7Ci0JY2V4LT5lY190eXBlID0gdHlwZTsKIAljZXgtPmVjX2Jsb2NrID0gYmxvY2s7CiAJY2V4LT5lY19sZW4gPSBsZW47CiAJY2V4LT5lY19zdGFydCA9IHN0YXJ0OwpAQCAtMTk3NiwxNSArMTk5NSwxOCBAQAogCX0KIAogCWV4dF9kZWJ1ZygiIC0+ICV1OiVsdVxuIiwgbGJsb2NrLCBsZW4pOwotCWV4dDRfZXh0X3B1dF9pbl9jYWNoZShpbm9kZSwgbGJsb2NrLCBsZW4sIDAsIEVYVDRfRVhUX0NBQ0hFX0dBUCk7CisJZXh0NF9leHRfcHV0X2luX2NhY2hlKGlub2RlLCBsYmxvY2ssIGxlbiwgMCk7CiB9CiAKKy8qCisgKiBSZXR1cm4gMCBpZiBjYWNoZSBpcyBpbnZhbGlkOyAxIGlmIHRoZSBjYWNoZSBpcyB2YWxpZAorICovCiBzdGF0aWMgaW50CiBleHQ0X2V4dF9pbl9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jaywKIAkJCXN0cnVjdCBleHQ0X2V4dGVudCAqZXgpCiB7CiAJc3RydWN0IGV4dDRfZXh0X2NhY2hlICpjZXg7Ci0JaW50IHJldCA9IEVYVDRfRVhUX0NBQ0hFX05POworCWludCByZXQgPSAwOwogCiAJLyoKIAkgKiBXZSBib3Jyb3cgaV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrIHRvIHByb3RlY3QgaV9jYWNoZWRfZXh0ZW50CkBAIC0xOTkzLDExICsyMDE1LDkgQEAKIAljZXggPSAmRVhUNF9JKGlub2RlKS0+aV9jYWNoZWRfZXh0ZW50OwogCiAJLyogaGFzIGNhY2hlIHZhbGlkIGRhdGE/ICovCi0JaWYgKGNleC0+ZWNfdHlwZSA9PSBFWFQ0X0VYVF9DQUNIRV9OTykKKwlpZiAoY2V4LT5lY19sZW4gPT0gMCkKIAkJZ290byBlcnJvdXQ7CiAKLQlCVUdfT04oY2V4LT5lY190eXBlICE9IEVYVDRfRVhUX0NBQ0hFX0dBUCAmJgotCQkJY2V4LT5lY190eXBlICE9IEVYVDRfRVhUX0NBQ0hFX0VYVEVOVCk7CiAJaWYgKGluX3JhbmdlKGJsb2NrLCBjZXgtPmVjX2Jsb2NrLCBjZXgtPmVjX2xlbikpIHsKIAkJZXgtPmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoY2V4LT5lY19ibG9jayk7CiAJCWV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgY2V4LT5lY19zdGFydCk7CkBAIC0yMDA1LDcgKzIwMjUsNyBAQAogCQlleHRfZGVidWcoIiV1IGNhY2hlZCBieSAldToldTolbGx1XG4iLAogCQkJCWJsb2NrLAogCQkJCWNleC0+ZWNfYmxvY2ssIGNleC0+ZWNfbGVuLCBjZXgtPmVjX3N0YXJ0KTsKLQkJcmV0ID0gY2V4LT5lY190eXBlOworCQlyZXQgPSAxOwogCX0KIGVycm91dDoKIAlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKQEAgLTI4MjUsMTQgKzI4NDUsMTQgQEAKICAqIHRvIGFuIHVuaW5pdGlhbGl6ZWQgZXh0ZW50LgogICoKICAqIFdyaXRpbmcgdG8gYW4gdW5pbml0aXplZCBleHRlbnQgbWF5IHJlc3VsdCBpbiBzcGxpdHRpbmcgdGhlIHVuaW5pdGlhbGl6ZWQKLSAqIGV4dGVudCBpbnRvIG11bHRpcGxlIC9pbnRpYWxpemVkIHVuaW50aWFsaXplZCBleHRlbnRzICh1cCB0byB0aHJlZSkKKyAqIGV4dGVudCBpbnRvIG11bHRpcGxlIC9pbml0aWFsaXplZCB1bmluaXRpYWxpemVkIGV4dGVudHMgKHVwIHRvIHRocmVlKQogICogVGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXM6CiAgKiAgIGE+IFRoZXJlIGlzIG5vIHNwbGl0IHJlcXVpcmVkOiBFbnRpcmUgZXh0ZW50IHNob3VsZCBiZSB1bmluaXRpYWxpemVkCiAgKiAgIGI+IFNwbGl0cyBpbiB0d28gZXh0ZW50czogV3JpdGUgaXMgaGFwcGVuaW5nIGF0IGVpdGhlciBlbmQgb2YgdGhlIGV4dGVudAogICogICBjPiBTcGxpdHMgaW4gdGhyZWUgZXh0ZW50czogU29tb25lIGlzIHdyaXRpbmcgaW4gbWlkZGxlIG9mIHRoZSBleHRlbnQKICAqCiAgKiBPbmUgb2YgbW9yZSBpbmRleCBibG9ja3MgbWF5YmUgbmVlZGVkIGlmIHRoZSBleHRlbnQgdHJlZSBncm93IGFmdGVyCi0gKiB0aGUgdW5pbnRpYWxpemVkIGV4dGVudCBzcGxpdC4gVG8gcHJldmVudCBFTk9TUEMgb2NjdXIgYXQgdGhlIElPCisgKiB0aGUgdW5pbml0aWFsaXplZCBleHRlbnQgc3BsaXQuIFRvIHByZXZlbnQgRU5PU1BDIG9jY3VyIGF0IHRoZSBJTwogICogY29tcGxldGUsIHdlIG5lZWQgdG8gc3BsaXQgdGhlIHVuaW5pdGlhbGl6ZWQgZXh0ZW50IGJlZm9yZSBESU8gc3VibWl0CiAgKiB0aGUgSU8uIFRoZSB1bmluaXRpYWxpemVkIGV4dGVudCBjYWxsZWQgYXQgdGhpcyB0aW1lIHdpbGwgYmUgc3BsaXQKICAqIGludG8gdGhyZWUgdW5pbml0aWFsaXplZCBleHRlbnQoYXQgbW9zdCkuIEFmdGVyIElPIGNvbXBsZXRlLCB0aGUgcGFydApAQCAtMzA4Miw3ICszMTAyLDcgQEAKICAqIEhhbmRsZSBFT0ZCTE9DS1NfRkwgZmxhZywgY2xlYXJpbmcgaXQgaWYgbmVjZXNzYXJ5CiAgKi8KIHN0YXRpYyBpbnQgY2hlY2tfZW9mYmxvY2tzX2ZsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgICBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsCisJCQkgICAgICBleHQ0X2xibGtfdCBsYmxrLAogCQkJICAgICAgc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuKQogewpAQCAtMzExMiw3ICszMTMyLDcgQEAKIAkgKiB0aGlzIHR1cm5zIG91dCB0byBiZSBmYWxzZSwgd2UgY2FuIGJhaWwgb3V0IGZyb20gdGhpcwogCSAqIGZ1bmN0aW9uIGltbWVkaWF0ZWx5LgogCSAqLwotCWlmIChtYXAtPm1fbGJsayArIGxlbiA8IGxlMzJfdG9fY3B1KGxhc3RfZXgtPmVlX2Jsb2NrKSArCisJaWYgKGxibGsgKyBsZW4gPCBsZTMyX3RvX2NwdShsYXN0X2V4LT5lZV9ibG9jaykgKwogCSAgICBleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihsYXN0X2V4KSkKIAkJcmV0dXJuIDA7CiAJLyoKQEAgLTMxNjgsOCArMzE4OCw4IEBACiAJCQkJCQkJcGF0aCk7CiAJCWlmIChyZXQgPj0gMCkgewogCQkJZXh0NF91cGRhdGVfaW5vZGVfZnN5bmNfdHJhbnMoaGFuZGxlLCBpbm9kZSwgMSk7Ci0JCQllcnIgPSBjaGVja19lb2ZibG9ja3NfZmwoaGFuZGxlLCBpbm9kZSwgbWFwLCBwYXRoLAotCQkJCQkJIG1hcC0+bV9sZW4pOworCQkJZXJyID0gY2hlY2tfZW9mYmxvY2tzX2ZsKGhhbmRsZSwgaW5vZGUsIG1hcC0+bV9sYmxrLAorCQkJCQkJIHBhdGgsIG1hcC0+bV9sZW4pOwogCQl9IGVsc2UKIAkJCWVyciA9IHJldDsKIAkJZ290byBvdXQyOwpAQCAtMzE5OSw3ICszMjE5LDggQEAKIAlyZXQgPSBleHQ0X2V4dF9jb252ZXJ0X3RvX2luaXRpYWxpemVkKGhhbmRsZSwgaW5vZGUsIG1hcCwgcGF0aCk7CiAJaWYgKHJldCA+PSAwKSB7CiAJCWV4dDRfdXBkYXRlX2lub2RlX2ZzeW5jX3RyYW5zKGhhbmRsZSwgaW5vZGUsIDEpOwotCQllcnIgPSBjaGVja19lb2ZibG9ja3NfZmwoaGFuZGxlLCBpbm9kZSwgbWFwLCBwYXRoLCBtYXAtPm1fbGVuKTsKKwkJZXJyID0gY2hlY2tfZW9mYmxvY2tzX2ZsKGhhbmRsZSwgaW5vZGUsIG1hcC0+bV9sYmxrLCBwYXRoLAorCQkJCQkgbWFwLT5tX2xlbik7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBvdXQyOwogCX0KQEAgLTMyNzYsNyArMzI5Nyw3IEBACiAJc3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlciAqZWg7CiAJc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4LCAqZXg7CiAJZXh0NF9mc2Jsa190IG5ld2Jsb2NrOwotCWludCBlcnIgPSAwLCBkZXB0aCwgcmV0LCBjYWNoZV90eXBlOworCWludCBlcnIgPSAwLCBkZXB0aCwgcmV0OwogCXVuc2lnbmVkIGludCBhbGxvY2F0ZWQgPSAwOwogCXN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjsKIAlleHQ0X2lvX2VuZF90ICppbyA9IEVYVDRfSShpbm9kZSktPmN1cl9haW9fZGlvOwpAQCAtMzI4NSw5ICszMzA2LDggQEAKIAkJICBtYXAtPm1fbGJsaywgbWFwLT5tX2xlbiwgaW5vZGUtPmlfaW5vKTsKIAogCS8qIGNoZWNrIGluIGNhY2hlICovCi0JY2FjaGVfdHlwZSA9IGV4dDRfZXh0X2luX2NhY2hlKGlub2RlLCBtYXAtPm1fbGJsaywgJm5ld2V4KTsKLQlpZiAoY2FjaGVfdHlwZSkgewotCQlpZiAoY2FjaGVfdHlwZSA9PSBFWFQ0X0VYVF9DQUNIRV9HQVApIHsKKwlpZiAoZXh0NF9leHRfaW5fY2FjaGUoaW5vZGUsIG1hcC0+bV9sYmxrLCAmbmV3ZXgpKSB7CisJCWlmICghbmV3ZXguZWVfc3RhcnRfbG8gJiYgIW5ld2V4LmVlX3N0YXJ0X2hpKSB7CiAJCQlpZiAoKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSkgPT0gMCkgewogCQkJCS8qCiAJCQkJICogYmxvY2sgaXNuJ3QgYWxsb2NhdGVkIHlldCBhbmQKQEAgLTMyOTYsNyArMzMxNiw3IEBACiAJCQkJZ290byBvdXQyOwogCQkJfQogCQkJLyogd2Ugc2hvdWxkIGFsbG9jYXRlIHJlcXVlc3RlZCBibG9jayAqLwotCQl9IGVsc2UgaWYgKGNhY2hlX3R5cGUgPT0gRVhUNF9FWFRfQ0FDSEVfRVhURU5UKSB7CisJCX0gZWxzZSB7CiAJCQkvKiBibG9jayBpcyBhbHJlYWR5IGFsbG9jYXRlZCAqLwogCQkJbmV3YmxvY2sgPSBtYXAtPm1fbGJsawogCQkJCSAgIC0gbGUzMl90b19jcHUobmV3ZXguZWVfYmxvY2spCkBAIC0zMzA1LDggKzMzMjUsNiBAQAogCQkJYWxsb2NhdGVkID0gZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oJm5ld2V4KSAtCiAJCQkJKG1hcC0+bV9sYmxrIC0gbGUzMl90b19jcHUobmV3ZXguZWVfYmxvY2spKTsKIAkJCWdvdG8gb3V0OwotCQl9IGVsc2UgewotCQkJQlVHKCk7CiAJCX0KIAl9CiAKQEAgLTMzNTcsOCArMzM3NSw3IEBACiAJCQkvKiBEbyBub3QgcHV0IHVuaW5pdGlhbGl6ZWQgZXh0ZW50IGluIHRoZSBjYWNoZSAqLwogCQkJaWYgKCFleHQ0X2V4dF9pc191bmluaXRpYWxpemVkKGV4KSkgewogCQkJCWV4dDRfZXh0X3B1dF9pbl9jYWNoZShpbm9kZSwgZWVfYmxvY2ssCi0JCQkJCQkJZWVfbGVuLCBlZV9zdGFydCwKLQkJCQkJCQlFWFQ0X0VYVF9DQUNIRV9FWFRFTlQpOworCQkJCQkJCWVlX2xlbiwgZWVfc3RhcnQpOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJcmV0ID0gZXh0NF9leHRfaGFuZGxlX3VuaW5pdGlhbGl6ZWRfZXh0ZW50cyhoYW5kbGUsCkBAIC0zNDU2LDcgKzM0NzMsNyBAQAogCQkJbWFwLT5tX2ZsYWdzIHw9IEVYVDRfTUFQX1VOSU5JVDsKIAl9CiAKLQllcnIgPSBjaGVja19lb2ZibG9ja3NfZmwoaGFuZGxlLCBpbm9kZSwgbWFwLCBwYXRoLCBhci5sZW4pOworCWVyciA9IGNoZWNrX2VvZmJsb2Nrc19mbChoYW5kbGUsIGlub2RlLCBtYXAtPm1fbGJsaywgcGF0aCwgYXIubGVuKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDI7CiAKQEAgLTM0OTAsOCArMzUwNyw3IEBACiAJICogd2hlbiBpdCBpcyBfbm90XyBhbiB1bmluaXRpYWxpemVkIGV4dGVudC4KIAkgKi8KIAlpZiAoKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX1VOSU5JVF9FWFQpID09IDApIHsKLQkJZXh0NF9leHRfcHV0X2luX2NhY2hlKGlub2RlLCBtYXAtPm1fbGJsaywgYWxsb2NhdGVkLCBuZXdibG9jaywKLQkJCQkJCUVYVDRfRVhUX0NBQ0hFX0VYVEVOVCk7CisJCWV4dDRfZXh0X3B1dF9pbl9jYWNoZShpbm9kZSwgbWFwLT5tX2xibGssIGFsbG9jYXRlZCwgbmV3YmxvY2spOwogCQlleHQ0X3VwZGF0ZV9pbm9kZV9mc3luY190cmFucyhoYW5kbGUsIGlub2RlLCAxKTsKIAl9IGVsc2UKIAkJZXh0NF91cGRhdGVfaW5vZGVfZnN5bmNfdHJhbnMoaGFuZGxlLCBpbm9kZSwgMCk7CkBAIC0zNTE5LDYgKzM1MzUsMTIgQEAKIAlpbnQgZXJyID0gMDsKIAogCS8qCisJICogZmluaXNoIGFueSBwZW5kaW5nIGVuZF9pbyB3b3JrIHNvIHdlIHdvbid0IHJ1biB0aGUgcmlzayBvZgorCSAqIGNvbnZlcnRpbmcgYW55IHRydW5jYXRlZCBibG9ja3MgdG8gaW5pdGlhbGl6ZWQgbGF0ZXIKKwkgKi8KKwlleHQ0X2ZsdXNoX2NvbXBsZXRlZF9JTyhpbm9kZSk7CisKKwkvKgogCSAqIHByb2JhYmx5IGZpcnN0IGV4dGVudCB3ZSdyZSBnb25uYSBmcmVlIHdpbGwgYmUgbGFzdCBpbiBibG9jawogCSAqLwogCWVyciA9IGV4dDRfd3JpdGVwYWdlX3RyYW5zX2Jsb2Nrcyhpbm9kZSk7CkBAIC0zNjIyLDYgKzM2NDQsMTAgQEAKIAlzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDsKIAl1bnNpZ25lZCBpbnQgY3JlZGl0cywgYmxrYml0cyA9IGlub2RlLT5pX2Jsa2JpdHM7CiAKKwkvKiBXZSBvbmx5IHN1cHBvcnQgdGhlIEZBTExPQ19GTF9LRUVQX1NJWkUgbW9kZSAqLworCWlmIChtb2RlICYmIChtb2RlICE9IEZBTExPQ19GTF9LRUVQX1NJWkUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAkvKgogCSAqIGN1cnJlbnRseSBzdXBwb3J0aW5nIChwcmUpYWxsb2NhdGUgbW9kZSBmb3IgZXh0ZW50LWJhc2VkCiAJICogZmlsZXMgX29ubHlfCkBAIC0zNzY3LDcgKzM3OTMsNyBAQAogCiAJbG9naWNhbCA9ICAoX191NjQpbmV3ZXgtPmVjX2Jsb2NrIDw8IGJsa3NpemVfYml0czsKIAotCWlmIChuZXdleC0+ZWNfdHlwZSA9PSBFWFQ0X0VYVF9DQUNIRV9HQVApIHsKKwlpZiAobmV3ZXgtPmVjX3N0YXJ0ID09IDApIHsKIAkJcGdvZmZfdCBvZmZzZXQ7CiAJCXN0cnVjdCBwYWdlICpwYWdlOwogCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZmlsZS5jIGIvZnMvZXh0NC9maWxlLmMKaW5kZXggNWE1YzU1ZC4uYmIwMDNkYyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9maWxlLmMKKysrIGIvZnMvZXh0NC9maWxlLmMKQEAgLTEwNCw2ICsxMDQsNyBAQAogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiAJc3RydWN0IHZmc21vdW50ICptbnQgPSBmaWxwLT5mX3BhdGgubW50OwogCXN0cnVjdCBwYXRoIHBhdGg7CiAJY2hhciBidWZbNjRdLCAqY3A7CkBAIC0xMjcsNiArMTI4LDI3IEBACiAJCQlleHQ0X21hcmtfc3VwZXJfZGlydHkoc2IpOwogCQl9CiAJfQorCS8qCisJICogU2V0IHVwIHRoZSBqYmQyX2lub2RlIGlmIHdlIGFyZSBvcGVuaW5nIHRoZSBpbm9kZSBmb3IKKwkgKiB3cml0aW5nIGFuZCB0aGUgam91cm5hbCBpcyBwcmVzZW50CisJICovCisJaWYgKHNiaS0+c19qb3VybmFsICYmICFlaS0+amlub2RlICYmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkpIHsKKwkJc3RydWN0IGpiZDJfaW5vZGUgKmppbm9kZSA9IGpiZDJfYWxsb2NfaW5vZGUoR0ZQX0tFUk5FTCk7CisKKwkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJaWYgKCFlaS0+amlub2RlKSB7CisJCQlpZiAoIWppbm9kZSkgeworCQkJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCWVpLT5qaW5vZGUgPSBqaW5vZGU7CisJCQlqYmQyX2pvdXJuYWxfaW5pdF9qYmRfaW5vZGUoZWktPmppbm9kZSwgaW5vZGUpOworCQkJamlub2RlID0gTlVMTDsKKwkJfQorCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJCWlmICh1bmxpa2VseShqaW5vZGUgIT0gTlVMTCkpCisJCQlqYmQyX2ZyZWVfaW5vZGUoamlub2RlKTsKKwl9CiAJcmV0dXJuIGRxdW90X2ZpbGVfb3Blbihpbm9kZSwgZmlscCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZnN5bmMuYyBiL2ZzL2V4dDQvZnN5bmMuYwppbmRleCBjMWE3YmM5Li43ODI5YjI4IDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZzeW5jLmMKKysrIGIvZnMvZXh0NC9mc3luYy5jCkBAIC03NSw3ICs3NSw3IEBACiAgKiB0byB3cml0dGVuLgogICogVGhlIGZ1bmN0aW9uIHJldHVybiB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgSU9zIG9uIHN1Y2Nlc3MuCiAgKi8KLXN0YXRpYyBpbnQgZmx1c2hfY29tcGxldGVkX0lPKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitleHRlcm4gaW50IGV4dDRfZmx1c2hfY29tcGxldGVkX0lPKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJZXh0NF9pb19lbmRfdCAqaW87CiAJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJaWYgKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IGZsdXNoX2NvbXBsZXRlZF9JTyhpbm9kZSk7CisJcmV0ID0gZXh0NF9mbHVzaF9jb21wbGV0ZWRfSU8oaW5vZGUpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lhbGxvYy5jIGIvZnMvZXh0NC9pYWxsb2MuYwppbmRleCAxY2UyNDBhLi5lYjkwOTdhIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lhbGxvYy5jCisrKyBiL2ZzL2V4dDQvaWFsbG9jLmMKQEAgLTEwMjcsNyArMTAyNyw3IEBACiAJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IHNiaS0+c19uZXh0X2dlbmVyYXRpb24rKzsKIAlzcGluX3VubG9jaygmc2JpLT5zX25leHRfZ2VuX2xvY2spOwogCi0JZWktPmlfc3RhdGVfZmxhZ3MgPSAwOworCWV4dDRfY2xlYXJfc3RhdGVfZmxhZ3MoZWkpOyAvKiBPbmx5IHJlbGV2YW50IG9uIDMyLWJpdCBhcmNocyAqLwogCWV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX05FVyk7CiAKIAllaS0+aV9leHRyYV9pc2l6ZSA9IEVYVDRfU0Ioc2IpLT5zX3dhbnRfZXh0cmFfaXNpemU7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggZTY1OTU5Ny4uOWY3ZjllNCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMzksNyArMzksOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByaW50ay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9yYXRlbGltaXQuaD4KIAogI2luY2x1ZGUgImV4dDRfamJkMi5oIgogI2luY2x1ZGUgInhhdHRyLmgiCkBAIC01NCwxMCArNTYsMTcgQEAKIAkJCQkJICAgICAgbG9mZl90IG5ld19zaXplKQogewogCXRyYWNlX2V4dDRfYmVnaW5fb3JkZXJlZF90cnVuY2F0ZShpbm9kZSwgbmV3X3NpemUpOwotCXJldHVybiBqYmQyX2pvdXJuYWxfYmVnaW5fb3JkZXJlZF90cnVuY2F0ZSgKLQkJCQkJRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfam91cm5hbCwKLQkJCQkJJkVYVDRfSShpbm9kZSktPmppbm9kZSwKLQkJCQkJbmV3X3NpemUpOworCS8qCisJICogSWYgamlub2RlIGlzIHplcm8sIHRoZW4gd2UgbmV2ZXIgb3BlbmVkIHRoZSBmaWxlIGZvcgorCSAqIHdyaXRpbmcsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBjYWxsCisJICogamJkMl9qb3VybmFsX2JlZ2luX29yZGVyZWRfdHJ1bmNhdGUoKSBzaW5jZSB0aGVyZSdzIG5vCisJICogb3V0c3RhbmRpbmcgd3JpdGVzIHdlIG5lZWQgdG8gZmx1c2guCisJICovCisJaWYgKCFFWFQ0X0koaW5vZGUpLT5qaW5vZGUpCisJCXJldHVybiAwOworCXJldHVybiBqYmQyX2pvdXJuYWxfYmVnaW5fb3JkZXJlZF90cnVuY2F0ZShFWFQ0X0pPVVJOQUwoaW5vZGUpLAorCQkJCQkJICAgRVhUNF9JKGlub2RlKS0+amlub2RlLAorCQkJCQkJICAgbmV3X3NpemUpOwogfQogCiBzdGF0aWMgdm9pZCBleHQ0X2ludmFsaWRhdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CkBAIC01NTIsNyArNTYxLDcgQEAKIH0KIAogLyoqCi0gKglleHQ0X2Jsa3NfdG9fYWxsb2NhdGU6IExvb2sgdXAgdGhlIGJsb2NrIG1hcCBhbmQgY291bnQgdGhlIG51bWJlcgorICoJZXh0NF9ibGtzX3RvX2FsbG9jYXRlIC0gTG9vayB1cCB0aGUgYmxvY2sgbWFwIGFuZCBjb3VudCB0aGUgbnVtYmVyCiAgKglvZiBkaXJlY3QgYmxvY2tzIG5lZWQgdG8gYmUgYWxsb2NhdGVkIGZvciB0aGUgZ2l2ZW4gYnJhbmNoLgogICoKICAqCUBicmFuY2g6IGNoYWluIG9mIGluZGlyZWN0IGJsb2NrcwpAQCAtNTkxLDEzICs2MDAsMTkgQEAKIAogLyoqCiAgKglleHQ0X2FsbG9jX2Jsb2NrczogbXVsdGlwbGUgYWxsb2NhdGUgYmxvY2tzIG5lZWRlZCBmb3IgYSBicmFuY2gKKyAqCUBoYW5kbGU6IGhhbmRsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbgorICoJQGlub2RlOiBpbm9kZSB3aGljaCBuZWVkcyBhbGxvY2F0ZWQgYmxvY2tzCisgKglAaWJsb2NrOiB0aGUgbG9naWNhbCBibG9jayB0byBzdGFydCBhbGxvY2F0ZWQgYXQKKyAqCUBnb2FsOiBwcmVmZXJyZWQgcGh5c2ljYWwgYmxvY2sgb2YgYWxsb2NhdGlvbgogICoJQGluZGlyZWN0X2Jsa3M6IHRoZSBudW1iZXIgb2YgYmxvY2tzIG5lZWQgdG8gYWxsb2NhdGUgZm9yIGluZGlyZWN0CiAgKgkJCWJsb2NrcwotICoKKyAqCUBibGtzOiBudW1iZXIgb2YgZGVzaXJlZCBibG9ja3MKICAqCUBuZXdfYmxvY2tzOiBvbiByZXR1cm4gaXQgd2lsbCBzdG9yZSB0aGUgbmV3IGJsb2NrIG51bWJlcnMgZm9yCiAgKgl0aGUgaW5kaXJlY3QgYmxvY2tzKGlmIG5lZWRlZCkgYW5kIHRoZSBmaXJzdCBkaXJlY3QgYmxvY2ssCi0gKglAYmxrczoJb24gcmV0dXJuIGl0IHdpbGwgc3RvcmUgdGhlIHRvdGFsIG51bWJlciBvZiBhbGxvY2F0ZWQKLSAqCQlkaXJlY3QgYmxvY2tzCisgKglAZXJyOiBvbiByZXR1cm4gaXQgd2lsbCBzdG9yZSB0aGUgZXJyb3IgY29kZQorICoKKyAqCVRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIG51bWJlciBvZiBibG9ja3MgYWxsb2NhdGVkIGFzCisgKglyZXF1ZXN0ZWQgYnkgdGhlIHBhc3NlZC1pbiBwYXJhbWV0ZXJzLgogICovCiBzdGF0aWMgaW50IGV4dDRfYWxsb2NfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICAgIGV4dDRfbGJsa190IGlibG9jaywgZXh0NF9mc2Jsa190IGdvYWwsCkBAIC03MTEsOSArNzI2LDExIEBACiAKIC8qKgogICoJZXh0NF9hbGxvY19icmFuY2ggLSBhbGxvY2F0ZSBhbmQgc2V0IHVwIGEgY2hhaW4gb2YgYmxvY2tzLgorICoJQGhhbmRsZTogaGFuZGxlIGZvciB0aGlzIHRyYW5zYWN0aW9uCiAgKglAaW5vZGU6IG93bmVyCiAgKglAaW5kaXJlY3RfYmxrczogbnVtYmVyIG9mIGFsbG9jYXRlZCBpbmRpcmVjdCBibG9ja3MKICAqCUBibGtzOiBudW1iZXIgb2YgYWxsb2NhdGVkIGRpcmVjdCBibG9ja3MKKyAqCUBnb2FsOiBwcmVmZXJyZWQgcGxhY2UgZm9yIGFsbG9jYXRpb24KICAqCUBvZmZzZXRzOiBvZmZzZXRzIChpbiB0aGUgYmxvY2tzKSB0byBzdG9yZSB0aGUgcG9pbnRlcnMgdG8gbmV4dC4KICAqCUBicmFuY2g6IHBsYWNlIHRvIHN0b3JlIHRoZSBjaGFpbiBpbi4KICAqCkBAIC04MjYsNiArODQzLDcgQEAKIAogLyoqCiAgKiBleHQ0X3NwbGljZV9icmFuY2ggLSBzcGxpY2UgdGhlIGFsbG9jYXRlZCBicmFuY2ggb250byBpbm9kZS4KKyAqIEBoYW5kbGU6IGhhbmRsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbgogICogQGlub2RlOiBvd25lcgogICogQGJsb2NrOiAobG9naWNhbCkgbnVtYmVyIG9mIGJsb2NrIHdlIGFyZSBhZGRpbmcKICAqIEBjaGFpbjogY2hhaW4gb2YgaW5kaXJlY3QgYmxvY2tzICh3aXRoIGEgbWlzc2luZyBsaW5rIC0gc2VlCkBAIC0xMDgxLDcgKzEwOTksNyBAQAogICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgbWV0YWRhdGEgYmxvY2tzIG5lZWQgdG8gcmVzZXJ2ZQogICogdG8gYWxsb2NhdGUgYSBibG9jayBsb2NhdGVkIGF0IEBsYmxvY2sKICAqLwotc3RhdGljIGludCBleHQ0X2NhbGNfbWV0YWRhdGFfYW1vdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGxibG9jaykKK3N0YXRpYyBpbnQgZXh0NF9jYWxjX21ldGFkYXRhX2Ftb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxvY2spCiB7CiAJaWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKQogCQlyZXR1cm4gZXh0NF9leHRfY2FsY19tZXRhZGF0YV9hbW91bnQoaW5vZGUsIGxibG9jayk7CkBAIC0xMzIwLDcgKzEzMzgsNyBAQAogCSAqIGF2b2lkIGRvdWJsZSBhY2NvdW50aW5nCiAJICovCiAJaWYgKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX0RFTEFMTE9DX1JFU0VSVkUpCi0JCUVYVDRfSShpbm9kZSktPmlfZGVsYWxsb2NfcmVzZXJ2ZWRfZmxhZyA9IDE7CisJCWV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0RFTEFMTE9DX1JFU0VSVkVEKTsKIAkvKgogCSAqIFdlIG5lZWQgdG8gY2hlY2sgZm9yIEVYVDQgaGVyZSBiZWNhdXNlIG1pZ3JhdGUKIAkgKiBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIGlub2RlIHR5cGUgaW4gYmV0d2VlbgpAQCAtMTM1MCw3ICsxMzY4LDcgQEAKIAkJCWV4dDRfZGFfdXBkYXRlX3Jlc2VydmVfc3BhY2UoaW5vZGUsIHJldHZhbCwgMSk7CiAJfQogCWlmIChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19ERUxBTExPQ19SRVNFUlZFKQotCQlFWFQ0X0koaW5vZGUpLT5pX2RlbGFsbG9jX3Jlc2VydmVkX2ZsYWcgPSAwOworCQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0RFTEFMTE9DX1JFU0VSVkVEKTsKIAogCXVwX3dyaXRlKCgmRVhUNF9JKGlub2RlKS0+aV9kYXRhX3NlbSkpOwogCWlmIChyZXR2YWwgPiAwICYmIG1hcC0+bV9mbGFncyAmIEVYVDRfTUFQX01BUFBFRCkgewpAQCAtMTg3OCw3ICsxODk2LDcgQEAKIC8qCiAgKiBSZXNlcnZlIGEgc2luZ2xlIGJsb2NrIGxvY2F0ZWQgYXQgbGJsb2NrCiAgKi8KLXN0YXRpYyBpbnQgZXh0NF9kYV9yZXNlcnZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGxibG9jaykKK3N0YXRpYyBpbnQgZXh0NF9kYV9yZXNlcnZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibG9jaykKIHsKIAlpbnQgcmV0cmllcyA9IDA7CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS0+aV9zYik7CkBAIC0yMjM5LDcgKzIyNTcsNyBAQAogCSAqIGFmZmVjdHMgZnVuY3Rpb25zIGluIG1hbnkgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBhbGxvY2F0aW9uCiAJICogY2FsbCBwYXRoLiAgVGhpcyBmbGFnIGV4aXN0cyBwcmltYXJpbHkgYmVjYXVzZSB3ZSBkb24ndAogCSAqIHdhbnQgdG8gY2hhbmdlICptYW55KiBjYWxsIGZ1bmN0aW9ucywgc28gZXh0NF9tYXBfYmxvY2tzKCkKLQkgKiB3aWxsIHNldCB0aGUgbWFnaWMgaV9kZWxhbGxvY19yZXNlcnZlZF9mbGFnIG9uY2UgdGhlCisJICogd2lsbCBzZXQgdGhlIEVYVDRfU1RBVEVfREVMQUxMT0NfUkVTRVJWRUQgZmxhZyBvbmNlIHRoZQogCSAqIGlub2RlJ3MgYWxsb2NhdGlvbiBzZW1hcGhvcmUgaXMgdGFrZW4uCiAJICoKIAkgKiBJZiB0aGUgYmxvY2tzIGluIHF1ZXN0aW9ucyB3ZXJlIGRlbGFsbG9jIGJsb2Nrcywgc2V0CkBAIC0zMzYyLDcgKzMzODAsNyBAQAogCSAqIGRvaW5nIEkvTyBhdCBhbGwuCiAJICoKIAkgKiBXZSBjb3VsZCBjYWxsIHdyaXRlX2NhY2hlX3BhZ2VzKCksIGFuZCB0aGVuIHJlZGlydHkgYWxsIG9mCi0JICogdGhlIHBhZ2VzIGJ5IGNhbGxpbmcgcmVkaXJ0eV9wYWdlX2Zvcl93cml0ZWJhY2soKSBidXQgdGhhdAorCSAqIHRoZSBwYWdlcyBieSBjYWxsaW5nIHJlZGlydHlfcGFnZV9mb3Jfd3JpdGVwYWdlKCkgYnV0IHRoYXQKIAkgKiB3b3VsZCBiZSB1Z2x5IGluIHRoZSBleHRyZW1lLiAgU28gaW5zdGVhZCB3ZSB3b3VsZCBuZWVkIHRvCiAJICogcmVwbGljYXRlIHBhcnRzIG9mIHRoZSBjb2RlIGluIHRoZSBhYm92ZSBmdW5jdGlvbnMsCiAJICogc2ltcGxpZnlpbmcgdGhlbSBiZWN1YXNlIHdlIHdvdWxkbid0IGFjdHVhbGx5IGludGVuZCB0bwpAQCAtMzcyMCw4ICszNzM4LDcgQEAKIHJldHJ5OgogCWlvX2VuZCA9IGV4dDRfaW5pdF9pb19lbmQoaW5vZGUsIEdGUF9BVE9NSUMpOwogCWlmICghaW9fZW5kKSB7Ci0JCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYWxsb2NhdGlvbiBmYWlsXG4iLCBfX2Z1bmNfXyk7CisJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoIiVzOiBhbGxvY2F0aW9uIGZhaWxcbiIsIF9fZnVuY19fKTsKIAkJc2NoZWR1bGUoKTsKIAkJZ290byByZXRyeTsKIAl9CkBAIC0zNzQ1LDkgKzM3NjIsOSBAQAogICogcHJlYWxsb2NhdGVkIGV4dGVudHMsIGFuZCB0aG9zZSB3cml0ZSBleHRlbmQgdGhlIGZpbGUsIG5vIG5lZWQgdG8KICAqIGZhbGwgYmFjayB0byBidWZmZXJlZCBJTy4KICAqCi0gKiBGb3IgaG9sZXMsIHdlIGZhbGxvY2F0ZSB0aG9zZSBibG9ja3MsIG1hcmsgdGhlbSBhcyB1bmludGlhbGl6ZWQKKyAqIEZvciBob2xlcywgd2UgZmFsbG9jYXRlIHRob3NlIGJsb2NrcywgbWFyayB0aGVtIGFzIHVuaW5pdGlhbGl6ZWQKICAqIElmIHRob3NlIGJsb2NrcyB3ZXJlIHByZWFsbG9jYXRlZCwgd2UgbWFyayBzdXJlIHRoZXkgYXJlIHNwbGl0ZWQsIGJ1dAotICogc3RpbGwga2VlcCB0aGUgcmFuZ2UgdG8gd3JpdGUgYXMgdW5pbnRpYWxpemVkLgorICogc3RpbGwga2VlcCB0aGUgcmFuZ2UgdG8gd3JpdGUgYXMgdW5pbml0aWFsaXplZC4KICAqCiAgKiBUaGUgdW53cnJpdHRlbiBleHRlbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIHdyaXR0ZW4gd2hlbiBESU8gaXMgY29tcGxldGVkLgogICogRm9yIGFzeW5jIGRpcmVjdCBJTywgc2luY2UgdGhlIElPIG1heSBzdGlsbCBwZW5kaW5nIHdoZW4gcmV0dXJuLCB3ZQpAQCAtNDA0NSw3ICs0MDYyLDcgQEAKIAlpZiAoZXh0NF9zaG91bGRfam91cm5hbF9kYXRhKGlub2RlKSkgewogCQllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGlub2RlLCBiaCk7CiAJfSBlbHNlIHsKLQkJaWYgKGV4dDRfc2hvdWxkX29yZGVyX2RhdGEoaW5vZGUpKQorCQlpZiAoZXh0NF9zaG91bGRfb3JkZXJfZGF0YShpbm9kZSkgJiYgRVhUNF9JKGlub2RlKS0+amlub2RlKQogCQkJZXJyID0gZXh0NF9qYmQyX2ZpbGVfaW5vZGUoaGFuZGxlLCBpbm9kZSk7CiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAl9CkBAIC00MTY5LDYgKzQxODYsNyBAQAogewogCV9fbGUzMiAqcDsKIAlpbnQJZmxhZ3MgPSBFWFQ0X0ZSRUVfQkxPQ0tTX0ZPUkdFVCB8IEVYVDRfRlJFRV9CTE9DS1NfVkFMSURBVEVEOworCWludAllcnI7CiAKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLT5pX21vZGUpKQogCQlmbGFncyB8PSBFWFQ0X0ZSRUVfQkxPQ0tTX01FVEFEQVRBOwpAQCAtNDE4NCwxMSArNDIwMiwyMyBAQAogCWlmICh0cnlfdG9fZXh0ZW5kX3RyYW5zYWN0aW9uKGhhbmRsZSwgaW5vZGUpKSB7CiAJCWlmIChiaCkgewogCQkJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOwotCQkJZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgYmgpOworCQkJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgYmgpOworCQkJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJCQlleHQ0X3N0ZF9lcnJvcihpbm9kZS0+aV9zYiwgZXJyKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KIAkJfQotCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7Ci0JCWV4dDRfdHJ1bmNhdGVfcmVzdGFydF90cmFucyhoYW5kbGUsIGlub2RlLAotCQkJCQkgICAgYmxvY2tzX2Zvcl90cnVuY2F0ZShpbm9kZSkpOworCQllcnIgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CisJCWlmICh1bmxpa2VseShlcnIpKSB7CisJCQlleHQ0X3N0ZF9lcnJvcihpbm9kZS0+aV9zYiwgZXJyKTsKKwkJCXJldHVybiAxOworCQl9CisJCWVyciA9IGV4dDRfdHJ1bmNhdGVfcmVzdGFydF90cmFucyhoYW5kbGUsIGlub2RlLAorCQkJCQkJICBibG9ja3NfZm9yX3RydW5jYXRlKGlub2RlKSk7CisJCWlmICh1bmxpa2VseShlcnIpKSB7CisJCQlleHQ0X3N0ZF9lcnJvcihpbm9kZS0+aV9zYiwgZXJyKTsKKwkJCXJldHVybiAxOworCQl9CiAJCWlmIChiaCkgewogCQkJQlVGRkVSX1RSQUNFKGJoLCAicmV0YWtpbmcgd3JpdGUgYWNjZXNzIik7CiAJCQlleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGJoKTsKQEAgLTQzNDksNiArNDM3OSw3IEBACiAJCQkJCShfX2xlMzIgKikgYmgtPmJfZGF0YSwKIAkJCQkJKF9fbGUzMiAqKSBiaC0+Yl9kYXRhICsgYWRkcl9wZXJfYmxvY2ssCiAJCQkJCWRlcHRoKTsKKwkJCWJyZWxzZShiaCk7CiAKIAkJCS8qCiAJCQkgKiBFdmVyeXRoaW5nIGJlbG93IHRoaXMgdGhpcyBwb2ludGVyIGhhcyBiZWVuCkBAIC00ODU5LDcgKzQ4OTAsNyBAQAogCX0KIAlpbm9kZS0+aV9ubGluayA9IGxlMTZfdG9fY3B1KHJhd19pbm9kZS0+aV9saW5rc19jb3VudCk7CiAKLQllaS0+aV9zdGF0ZV9mbGFncyA9IDA7CisJZXh0NF9jbGVhcl9zdGF0ZV9mbGFncyhlaSk7CS8qIE9ubHkgcmVsZXZhbnQgb24gMzItYml0IGFyY2hzICovCiAJZWktPmlfZGlyX3N0YXJ0X2xvb2t1cCA9IDA7CiAJZWktPmlfZHRpbWUgPSBsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfZHRpbWUpOwogCS8qIFdlIG5vdyBoYXZlIGVub3VnaCBmaWVsZHMgdG8gY2hlY2sgaWYgdGhlIGlub2RlIHdhcyBhY3RpdmUgb3Igbm90LgpAQCAtNTExOCw3ICs1MTQ5LDcgQEAKIAlpZiAoZXh0NF9pbm9kZV9ibG9ja3Nfc2V0KGhhbmRsZSwgcmF3X2lub2RlLCBlaSkpCiAJCWdvdG8gb3V0X2JyZWxzZTsKIAlyYXdfaW5vZGUtPmlfZHRpbWUgPSBjcHVfdG9fbGUzMihlaS0+aV9kdGltZSk7Ci0JcmF3X2lub2RlLT5pX2ZsYWdzID0gY3B1X3RvX2xlMzIoZWktPmlfZmxhZ3MpOworCXJhd19pbm9kZS0+aV9mbGFncyA9IGNwdV90b19sZTMyKGVpLT5pX2ZsYWdzICYgMHhGRkZGRkZGRik7CiAJaWYgKEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2VzLT5zX2NyZWF0b3Jfb3MgIT0KIAkgICAgY3B1X3RvX2xlMzIoRVhUNF9PU19IVVJEKSkKIAkJcmF3X2lub2RlLT5pX2ZpbGVfYWNsX2hpZ2ggPQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuYwppbmRleCA1YjRkNGUzLi44NTFmNDliIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuYworKysgYi9mcy9leHQ0L21iYWxsb2MuYwpAQCAtMjYwOCwxOCArMjYwOCwxMiBAQAogc3RhdGljIGlubGluZSBpbnQgZXh0NF9pc3N1ZV9kaXNjYXJkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCWV4dDRfZ3JvdXBfdCBibG9ja19ncm91cCwgZXh0NF9ncnBibGtfdCBibG9jaywgaW50IGNvdW50KQogewotCWludCByZXQ7CiAJZXh0NF9mc2Jsa190IGRpc2NhcmRfYmxvY2s7CiAKIAlkaXNjYXJkX2Jsb2NrID0gYmxvY2sgKyBleHQ0X2dyb3VwX2ZpcnN0X2Jsb2NrX25vKHNiLCBibG9ja19ncm91cCk7CiAJdHJhY2VfZXh0NF9kaXNjYXJkX2Jsb2NrcyhzYiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGRpc2NhcmRfYmxvY2ssIGNvdW50KTsKLQlyZXQgPSBzYl9pc3N1ZV9kaXNjYXJkKHNiLCBkaXNjYXJkX2Jsb2NrLCBjb3VudCwgR0ZQX05PRlMsIDApOwotCWlmIChyZXQgPT0gLUVPUE5PVFNVUFApIHsKLQkJZXh0NF93YXJuaW5nKHNiLCAiZGlzY2FyZCBub3Qgc3VwcG9ydGVkLCBkaXNhYmxpbmciKTsKLQkJY2xlYXJfb3B0KEVYVDRfU0Ioc2IpLT5zX21vdW50X29wdCwgRElTQ0FSRCk7Ci0JfQotCXJldHVybiByZXQ7CisJcmV0dXJuIHNiX2lzc3VlX2Rpc2NhcmQoc2IsIGRpc2NhcmRfYmxvY2ssIGNvdW50LCBHRlBfTk9GUywgMCk7CiB9CiAKIC8qCkBAIC0yNjMxLDcgKzI2MjUsNyBAQAogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBqb3VybmFsLT5qX3ByaXZhdGU7CiAJc3RydWN0IGV4dDRfYnVkZHkgZTRiOwogCXN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmRiOwotCWludCBlcnIsIGNvdW50ID0gMCwgY291bnQyID0gMDsKKwlpbnQgZXJyLCByZXQsIGNvdW50ID0gMCwgY291bnQyID0gMDsKIAlzdHJ1Y3QgZXh0NF9mcmVlX2RhdGEgKmVudHJ5OwogCXN0cnVjdCBsaXN0X2hlYWQgKmwsICpsdG1wOwogCkBAIC0yNjQxLDkgKzI2MzUsMTUgQEAKIAkJbWJfZGVidWcoMSwgImdvbm5hIGZyZWUgJXUgYmxvY2tzIGluIGdyb3VwICV1ICgweCVwKToiLAogCQkJIGVudHJ5LT5jb3VudCwgZW50cnktPmdyb3VwLCBlbnRyeSk7CiAKLQkJaWYgKHRlc3Rfb3B0KHNiLCBESVNDQVJEKSkKLQkJCWV4dDRfaXNzdWVfZGlzY2FyZChzYiwgZW50cnktPmdyb3VwLAorCQlpZiAodGVzdF9vcHQoc2IsIERJU0NBUkQpKSB7CisJCQlyZXQgPSBleHQ0X2lzc3VlX2Rpc2NhcmQoc2IsIGVudHJ5LT5ncm91cCwKIAkJCQkJZW50cnktPnN0YXJ0X2JsaywgZW50cnktPmNvdW50KTsKKwkJCWlmICh1bmxpa2VseShyZXQgPT0gLUVPUE5PVFNVUFApKSB7CisJCQkJZXh0NF93YXJuaW5nKHNiLCAiZGlzY2FyZCBub3Qgc3VwcG9ydGVkLCAiCisJCQkJCQkgImRpc2FibGluZyIpOworCQkJCWNsZWFyX29wdChzYiwgRElTQ0FSRCk7CisJCQl9CisJCX0KIAogCQllcnIgPSBleHQ0X21iX2xvYWRfYnVkZHkoc2IsIGVudHJ5LT5ncm91cCwgJmU0Yik7CiAJCS8qIHdlIGV4cGVjdCB0byBmaW5kIGV4aXN0aW5nIGJ1ZGR5IGJlY2F1c2UgaXQncyBwaW5uZWQgKi8KQEAgLTM4ODEsMTkgKzM4ODEsNiBAQAogCX0KIH0KIAotLyoKLSAqIGZpbmRzIGFsbCBwcmVhbGxvY2F0ZWQgc3BhY2VzIGFuZCByZXR1cm4gYmxvY2tzIGJlaW5nIGZyZWVkIHRvIHRoZW0KLSAqIGlmIHByZWFsbG9jYXRlZCBzcGFjZSBiZWNvbWVzIGZ1bGwgKG5vIGJsb2NrIGlzIHVzZWQgZnJvbSB0aGUgc3BhY2UpCi0gKiB0aGVuIHRoZSBmdW5jdGlvbiBmcmVlcyBzcGFjZSBpbiBidWRkeQotICogWFhYOiBhdCB0aGUgbW9tZW50LCB0cnVuY2F0ZSAod2hpY2ggaXMgdGhlIG9ubHkgd2F5IHRvIGZyZWUgYmxvY2tzKQotICogZGlzY2FyZHMgYWxsIHByZWFsbG9jYXRpb25zCi0gKi8KLXN0YXRpYyB2b2lkIGV4dDRfbWJfcmV0dXJuX3RvX3ByZWFsbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJc3RydWN0IGV4dDRfYnVkZHkgKmU0YiwKLQkJCQkJc2VjdG9yX3QgYmxvY2ssIGludCBjb3VudCkKLXsKLQlCVUdfT04oIWxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfcHJlYWxsb2NfbGlzdCkpOwotfQogI2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHCiBzdGF0aWMgdm9pZCBleHQ0X21iX3Nob3dfYWMoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYykKIHsKQEAgLTQyODMsNyArNDI3MCw3IEBACiAJICogRURRVU9UIGNoZWNrLCBhcyBibG9ja3MgYW5kIHF1b3RhcyBoYXZlIGJlZW4gYWxyZWFkeQogCSAqIHJlc2VydmVkIHdoZW4gZGF0YSBiZWluZyBjb3BpZWQgaW50byBwYWdlY2FjaGUuCiAJICovCi0JaWYgKEVYVDRfSShhci0+aW5vZGUpLT5pX2RlbGFsbG9jX3Jlc2VydmVkX2ZsYWcpCisJaWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShhci0+aW5vZGUsIEVYVDRfU1RBVEVfREVMQUxMT0NfUkVTRVJWRUQpKQogCQlhci0+ZmxhZ3MgfD0gRVhUNF9NQl9ERUxBTExPQ19SRVNFUlZFRDsKIAllbHNlIHsKIAkJLyogV2l0aG91dCBkZWxheWVkIGFsbG9jYXRpb24gd2UgbmVlZCB0byB2ZXJpZnkKQEAgLTQzODAsNyArNDM2Nyw4IEBACiAJaWYgKGlucXVvdGEgJiYgYXItPmxlbiA8IGlucXVvdGEpCiAJCWRxdW90X2ZyZWVfYmxvY2soYXItPmlub2RlLCBpbnF1b3RhIC0gYXItPmxlbik7CiAJaWYgKCFhci0+bGVuKSB7Ci0JCWlmICghRVhUNF9JKGFyLT5pbm9kZSktPmlfZGVsYWxsb2NfcmVzZXJ2ZWRfZmxhZykKKwkJaWYgKCFleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoYXItPmlub2RlLAorCQkJCQkgICBFWFQ0X1NUQVRFX0RFTEFMTE9DX1JFU0VSVkVEKSkKIAkJCS8qIHJlbGVhc2UgYWxsIHRoZSByZXNlcnZlZCBibG9ja3MgaWYgbm9uIGRlbGFsbG9jICovCiAJCQlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyLAogCQkJCQkJcmVzZXJ2X2Jsa3MpOwpAQCAtNDYyNiw3ICs0NjE0LDExIEBACiAJCSAqIGJsb2NrcyBiZWluZyBmcmVlZCBhcmUgbWV0YWRhdGEuIHRoZXNlIGJsb2NrcyBzaG91bGRuJ3QKIAkJICogYmUgdXNlZCB1bnRpbCB0aGlzIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZAogCQkgKi8KLQkJbmV3X2VudHJ5ICA9IGttZW1fY2FjaGVfYWxsb2MoZXh0NF9mcmVlX2V4dF9jYWNoZXAsIEdGUF9OT0ZTKTsKKwkJbmV3X2VudHJ5ID0ga21lbV9jYWNoZV9hbGxvYyhleHQ0X2ZyZWVfZXh0X2NhY2hlcCwgR0ZQX05PRlMpOworCQlpZiAoIW5ld19lbnRyeSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQl9CiAJCW5ld19lbnRyeS0+c3RhcnRfYmxrID0gYml0OwogCQluZXdfZW50cnktPmdyb3VwICA9IGJsb2NrX2dyb3VwOwogCQluZXdfZW50cnktPmNvdW50ID0gY291bnQ7CkBAIC00NjQzLDcgKzQ2MzUsNiBAQAogCQlleHQ0X2xvY2tfZ3JvdXAoc2IsIGJsb2NrX2dyb3VwKTsKIAkJbWJfY2xlYXJfYml0cyhiaXRtYXBfYmgtPmJfZGF0YSwgYml0LCBjb3VudCk7CiAJCW1iX2ZyZWVfYmxvY2tzKGlub2RlLCAmZTRiLCBiaXQsIGNvdW50KTsKLQkJZXh0NF9tYl9yZXR1cm5fdG9fcHJlYWxsb2NhdGlvbihpbm9kZSwgJmU0YiwgYmxvY2ssIGNvdW50KTsKIAl9CiAKIAlyZXQgPSBleHQ0X2ZyZWVfYmxrc19jb3VudChzYiwgZ2RwKSArIGNvdW50OwpAQCAtNDcxOCw4ICs0NzA5LDYgQEAKIAlleHQ0X3VubG9ja19ncm91cChzYiwgZ3JvdXApOwogCiAJcmV0ID0gZXh0NF9pc3N1ZV9kaXNjYXJkKHNiLCBncm91cCwgc3RhcnQsIGNvdW50KTsKLQlpZiAocmV0KQotCQlleHQ0X3N0ZF9lcnJvcihzYiwgcmV0KTsKIAogCWV4dDRfbG9ja19ncm91cChzYiwgZ3JvdXApOwogCW1iX2ZyZWVfYmxvY2tzKE5VTEwsIGU0Yiwgc3RhcnQsIGV4LmZlX2xlbik7CkBAIC00ODE5LDYgKzQ4MDgsOCBAQAogCWV4dDRfZ3JvdXBfdCBncm91cCwgbmdyb3VwcyA9IGV4dDRfZ2V0X2dyb3Vwc19jb3VudChzYik7CiAJZXh0NF9ncnBibGtfdCBjbnQgPSAwLCBmaXJzdF9ibG9jaywgbGFzdF9ibG9jazsKIAl1aW50NjRfdCBzdGFydCwgbGVuLCBtaW5sZW4sIHRyaW1tZWQ7CisJZXh0NF9mc2Jsa190IGZpcnN0X2RhdGFfYmxrID0KKwkJCWxlMzJfdG9fY3B1KEVYVDRfU0Ioc2IpLT5zX2VzLT5zX2ZpcnN0X2RhdGFfYmxvY2spOwogCWludCByZXQgPSAwOwogCiAJc3RhcnQgPSByYW5nZS0+c3RhcnQgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7CkBAIC00ODI4LDYgKzQ4MTksMTAgQEAKIAogCWlmICh1bmxpa2VseShtaW5sZW4gPiBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHN0YXJ0IDwgZmlyc3RfZGF0YV9ibGspIHsKKwkJbGVuIC09IGZpcnN0X2RhdGFfYmxrIC0gc3RhcnQ7CisJCXN0YXJ0ID0gZmlyc3RfZGF0YV9ibGs7CisJfQogCiAJLyogRGV0ZXJtaW5lIGZpcnN0IGFuZCBsYXN0IGdyb3VwIHRvIGV4YW1pbmUgYmFzZWQgb24gc3RhcnQgYW5kIGxlbiAqLwogCWV4dDRfZ2V0X2dyb3VwX25vX2FuZF9vZmZzZXQoc2IsIChleHQ0X2ZzYmxrX3QpIHN0YXJ0LApAQCAtNDg1MSw3ICs0ODQ2LDcgQEAKIAkJaWYgKGxlbiA+PSBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKQogCQkJbGVuIC09IChFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpIC0gZmlyc3RfYmxvY2spOwogCQllbHNlCi0JCQlsYXN0X2Jsb2NrID0gbGVuOworCQkJbGFzdF9ibG9jayA9IGZpcnN0X2Jsb2NrICsgbGVuOwogCiAJCWlmIChlNGIuYmRfaW5mby0+YmJfZnJlZSA+PSBtaW5sZW4pIHsKIAkJCWNudCA9IGV4dDRfdHJpbV9hbGxfZnJlZShzYiwgJmU0YiwgZmlyc3RfYmxvY2ssCmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jCmluZGV4IDI1ZjNhOTcuLmIwYTEyNmYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jCisrKyBiL2ZzL2V4dDQvbWlncmF0ZS5jCkBAIC00OTYsNyArNDk2LDcgQEAKIAlnb2FsID0gKCgoaW5vZGUtPmlfaW5vIC0gMSkgLyBFWFQ0X0lOT0RFU19QRVJfR1JPVVAoaW5vZGUtPmlfc2IpKSAqCiAJCUVYVDRfSU5PREVTX1BFUl9HUk9VUChpbm9kZS0+aV9zYikpICsgMTsKIAl0bXBfaW5vZGUgPSBleHQ0X25ld19pbm9kZShoYW5kbGUsIGlub2RlLT5pX3NiLT5zX3Jvb3QtPmRfaW5vZGUsCi0JCQkJICAgU19JRlJFRywgMCwgZ29hbCk7CisJCQkJICAgU19JRlJFRywgTlVMTCwgZ29hbCk7CiAJaWYgKElTX0VSUih0bXBfaW5vZGUpKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmMKaW5kZXggZGM0MGU3NS4uNTQ4NTM5MCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9uYW1laS5jCisrKyBiL2ZzL2V4dDQvbmFtZWkuYwpAQCAtNTgxLDkgKzU4MSw5IEBACiAJCQkJCSAgIGRpci0+aV9zYi0+c19ibG9ja3NpemUgLQogCQkJCQkgICBFWFQ0X0RJUl9SRUNfTEVOKDApKTsKIAlmb3IgKDsgZGUgPCB0b3A7IGRlID0gZXh0NF9uZXh0X2VudHJ5KGRlLCBkaXItPmlfc2ItPnNfYmxvY2tzaXplKSkgewotCQlpZiAoIWV4dDRfY2hlY2tfZGlyX2VudHJ5KGRpciwgZGUsIGJoLAotCQkJCQkoYmxvY2s8PEVYVDRfQkxPQ0tfU0laRV9CSVRTKGRpci0+aV9zYikpCi0JCQkJCQkrKChjaGFyICopZGUgLSBiaC0+Yl9kYXRhKSkpIHsKKwkJaWYgKGV4dDRfY2hlY2tfZGlyX2VudHJ5KGRpciwgTlVMTCwgZGUsIGJoLAorCQkJCShibG9jazw8RVhUNF9CTE9DS19TSVpFX0JJVFMoZGlyLT5pX3NiKSkKKwkJCQkJICsgKChjaGFyICopZGUgLSBiaC0+Yl9kYXRhKSkpIHsKIAkJCS8qIE9uIGVycm9yLCBza2lwIHRoZSBmX3BvcyB0byB0aGUgbmV4dCBibG9jay4gKi8KIAkJCWRpcl9maWxlLT5mX3BvcyA9IChkaXJfZmlsZS0+Zl9wb3MgfAogCQkJCQkoZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpKSArIDE7CkBAIC04MjAsNyArODIwLDcgQEAKIAkJaWYgKChjaGFyICopIGRlICsgbmFtZWxlbiA8PSBkbGltaXQgJiYKIAkJICAgIGV4dDRfbWF0Y2ggKG5hbWVsZW4sIG5hbWUsIGRlKSkgewogCQkJLyogZm91bmQgYSBtYXRjaCAtIGp1c3QgdG8gYmUgc3VyZSwgZG8gYSBmdWxsIGNoZWNrICovCi0JCQlpZiAoIWV4dDRfY2hlY2tfZGlyX2VudHJ5KGRpciwgZGUsIGJoLCBvZmZzZXQpKQorCQkJaWYgKGV4dDRfY2hlY2tfZGlyX2VudHJ5KGRpciwgTlVMTCwgZGUsIGJoLCBvZmZzZXQpKQogCQkJCXJldHVybiAtMTsKIAkJCSpyZXNfZGlyID0gZGU7CiAJCQlyZXR1cm4gMTsKQEAgLTEwMzYsNyArMTAzNiw3IEBACiAJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKIAkJfQogCQlpbm9kZSA9IGV4dDRfaWdldChkaXItPmlfc2IsIGlubyk7Ci0JCWlmICh1bmxpa2VseShJU19FUlIoaW5vZGUpKSkgeworCQlpZiAoSVNfRVJSKGlub2RlKSkgewogCQkJaWYgKFBUUl9FUlIoaW5vZGUpID09IC1FU1RBTEUpIHsKIAkJCQlFWFQ0X0VSUk9SX0lOT0RFKGRpciwKIAkJCQkJCSAiZGVsZXRlZCBpbm9kZSByZWZlcmVuY2VkOiAldSIsCkBAIC0xMjY5LDcgKzEyNjksNyBAQAogCQlkZSA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJoLT5iX2RhdGE7CiAJCXRvcCA9IGJoLT5iX2RhdGEgKyBibG9ja3NpemUgLSByZWNsZW47CiAJCXdoaWxlICgoY2hhciAqKSBkZSA8PSB0b3ApIHsKLQkJCWlmICghZXh0NF9jaGVja19kaXJfZW50cnkoZGlyLCBkZSwgYmgsIG9mZnNldCkpCisJCQlpZiAoZXh0NF9jaGVja19kaXJfZW50cnkoZGlyLCBOVUxMLCBkZSwgYmgsIG9mZnNldCkpCiAJCQkJcmV0dXJuIC1FSU87CiAJCQlpZiAoZXh0NF9tYXRjaChuYW1lbGVuLCBuYW1lLCBkZSkpCiAJCQkJcmV0dXJuIC1FRVhJU1Q7CkBAIC0xNjAyLDcgKzE2MDIsMTEgQEAKIAkJCWlmIChlcnIpCiAJCQkJZ290byBqb3VybmFsX2Vycm9yOwogCQl9Ci0JCWV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsIGZyYW1lc1swXS5iaCk7CisJCWVyciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsIGZyYW1lc1swXS5iaCk7CisJCWlmIChlcnIpIHsKKwkJCWV4dDRfc3RkX2Vycm9yKGlub2RlLT5pX3NiLCBlcnIpOworCQkJZ290byBjbGVhbnVwOworCQl9CiAJfQogCWRlID0gZG9fc3BsaXQoaGFuZGxlLCBkaXIsICZiaCwgZnJhbWUsICZoaW5mbywgJmVycik7CiAJaWYgKCFkZSkKQEAgLTE2MzAsMTcgKzE2MzQsMjEgQEAKIHsKIAlzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqZGUsICpwZGU7CiAJdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IGRpci0+aV9zYi0+c19ibG9ja3NpemU7Ci0JaW50IGk7CisJaW50IGksIGVycjsKIAogCWkgPSAwOwogCXBkZSA9IE5VTEw7CiAJZGUgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgYmgtPmJfZGF0YTsKIAl3aGlsZSAoaSA8IGJoLT5iX3NpemUpIHsKLQkJaWYgKCFleHQ0X2NoZWNrX2Rpcl9lbnRyeShkaXIsIGRlLCBiaCwgaSkpCisJCWlmIChleHQ0X2NoZWNrX2Rpcl9lbnRyeShkaXIsIE5VTEwsIGRlLCBiaCwgaSkpCiAJCQlyZXR1cm4gLUVJTzsKIAkJaWYgKGRlID09IGRlX2RlbCkgIHsKIAkJCUJVRkZFUl9UUkFDRShiaCwgImdldF93cml0ZV9hY2Nlc3MiKTsKLQkJCWV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpOworCQkJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBiaCk7CisJCQlpZiAodW5saWtlbHkoZXJyKSkgeworCQkJCWV4dDRfc3RkX2Vycm9yKGRpci0+aV9zYiwgZXJyKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQogCQkJaWYgKHBkZSkKIAkJCQlwZGUtPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzaygKIAkJCQkJZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhwZGUtPnJlY19sZW4sCkBAIC0xNjUyLDcgKzE2NjAsMTEgQEAKIAkJCQlkZS0+aW5vZGUgPSAwOwogCQkJZGlyLT5pX3ZlcnNpb24rKzsKIAkJCUJVRkZFUl9UUkFDRShiaCwgImNhbGwgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEiKTsKLQkJCWV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgZGlyLCBiaCk7CisJCQllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGRpciwgYmgpOworCQkJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJCQlleHQ0X3N0ZF9lcnJvcihkaXItPmlfc2IsIGVycik7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KIAkJCXJldHVybiAwOwogCQl9CiAJCWkgKz0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbiwgYmxvY2tzaXplKTsKQEAgLTE3ODksNyArMTgwMSw3IEBACiB7CiAJaGFuZGxlX3QgKmhhbmRsZTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2Jsb2NrOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2Jsb2NrID0gTlVMTDsKIAlzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqZGU7CiAJdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IGRpci0+aV9zYi0+c19ibG9ja3NpemU7CiAJaW50IGVyciwgcmV0cmllcyA9IDA7CkBAIC0xODIyLDcgKzE4MzQsOSBAQAogCWlmICghZGlyX2Jsb2NrKQogCQlnb3RvIG91dF9jbGVhcl9pbm9kZTsKIAlCVUZGRVJfVFJBQ0UoZGlyX2Jsb2NrLCAiZ2V0X3dyaXRlX2FjY2VzcyIpOwotCWV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgZGlyX2Jsb2NrKTsKKwllcnIgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGRpcl9ibG9jayk7CisJaWYgKGVycikKKwkJZ290byBvdXRfY2xlYXJfaW5vZGU7CiAJZGUgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgZGlyX2Jsb2NrLT5iX2RhdGE7CiAJZGUtPmlub2RlID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfaW5vKTsKIAlkZS0+bmFtZV9sZW4gPSAxOwpAQCAtMTgzOSwxMCArMTg1MywxMiBAQAogCWV4dDRfc2V0X2RlX3R5cGUoZGlyLT5pX3NiLCBkZSwgU19JRkRJUik7CiAJaW5vZGUtPmlfbmxpbmsgPSAyOwogCUJVRkZFUl9UUkFDRShkaXJfYmxvY2ssICJjYWxsIGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhIik7Ci0JZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBkaXIsIGRpcl9ibG9jayk7Ci0JYnJlbHNlKGRpcl9ibG9jayk7Ci0JZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwotCWVyciA9IGV4dDRfYWRkX2VudHJ5KGhhbmRsZSwgZGVudHJ5LCBpbm9kZSk7CisJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBkaXIsIGRpcl9ibG9jayk7CisJaWYgKGVycikKKwkJZ290byBvdXRfY2xlYXJfaW5vZGU7CisJZXJyID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOworCWlmICghZXJyKQorCQllcnIgPSBleHQ0X2FkZF9lbnRyeShoYW5kbGUsIGRlbnRyeSwgaW5vZGUpOwogCWlmIChlcnIpIHsKIG91dF9jbGVhcl9pbm9kZToKIAkJY2xlYXJfbmxpbmsoaW5vZGUpOwpAQCAtMTg1MywxMCArMTg2OSwxMyBAQAogCX0KIAlleHQ0X2luY19jb3VudChoYW5kbGUsIGRpcik7CiAJZXh0NF91cGRhdGVfZHhfZmxhZyhkaXIpOwotCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGRpcik7CisJZXJyID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgZGlyKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9jbGVhcl9pbm9kZTsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwogb3V0X3N0b3A6CisJYnJlbHNlKGRpcl9ibG9jayk7CiAJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAlpZiAoZXJyID09IC1FTk9TUEMgJiYgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoZGlyLT5pX3NiLCAmcmV0cmllcykpCiAJCWdvdG8gcmV0cnk7CkBAIC0xOTE5LDcgKzE5MzgsNyBAQAogCQkJfQogCQkJZGUgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgYmgtPmJfZGF0YTsKIAkJfQotCQlpZiAoIWV4dDRfY2hlY2tfZGlyX2VudHJ5KGlub2RlLCBkZSwgYmgsIG9mZnNldCkpIHsKKwkJaWYgKGV4dDRfY2hlY2tfZGlyX2VudHJ5KGlub2RlLCBOVUxMLCBkZSwgYmgsIG9mZnNldCkpIHsKIAkJCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopKGJoLT5iX2RhdGEgKwogCQkJCQkJCSBzYi0+c19ibG9ja3NpemUpOwogCQkJb2Zmc2V0ID0gKG9mZnNldCB8IChzYi0+c19ibG9ja3NpemUgLSAxKSkgKyAxOwpAQCAtMjQwNyw3ICsyNDI2LDExIEBACiAJCQkJCWV4dDRfY3VycmVudF90aW1lKG5ld19kaXIpOwogCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBuZXdfZGlyKTsKIAkJQlVGRkVSX1RSQUNFKG5ld19iaCwgImNhbGwgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEiKTsKLQkJZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBuZXdfZGlyLCBuZXdfYmgpOworCQlyZXR2YWwgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIG5ld19kaXIsIG5ld19iaCk7CisJCWlmICh1bmxpa2VseShyZXR2YWwpKSB7CisJCQlleHQ0X3N0ZF9lcnJvcihuZXdfZGlyLT5pX3NiLCByZXR2YWwpOworCQkJZ290byBlbmRfcmVuYW1lOworCQl9CiAJCWJyZWxzZShuZXdfYmgpOwogCQluZXdfYmggPSBOVUxMOwogCX0KQEAgLTI0NTksNyArMjQ4MiwxMSBAQAogCQlQQVJFTlRfSU5PKGRpcl9iaC0+Yl9kYXRhLCBuZXdfZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkgPQogCQkJCQkJY3B1X3RvX2xlMzIobmV3X2Rpci0+aV9pbm8pOwogCQlCVUZGRVJfVFJBQ0UoZGlyX2JoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOwotCQlleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIG9sZF9kaXIsIGRpcl9iaCk7CisJCXJldHZhbCA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgb2xkX2RpciwgZGlyX2JoKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZXh0NF9zdGRfZXJyb3Iob2xkX2Rpci0+aV9zYiwgcmV0dmFsKTsKKwkJCWdvdG8gZW5kX3JlbmFtZTsKKwkJfQogCQlleHQ0X2RlY19jb3VudChoYW5kbGUsIG9sZF9kaXIpOwogCQlpZiAobmV3X2lub2RlKSB7CiAJCQkvKiBjaGVja2VkIGVtcHR5X2RpciBhYm92ZSwgY2FuJ3QgaGF2ZSBhbm90aGVyIHBhcmVudCwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcGFnZS1pby5jIGIvZnMvZXh0NC9wYWdlLWlvLmMKaW5kZXggYmVhY2NlMS4uNzI3MGRjZiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9wYWdlLWlvLmMKKysrIGIvZnMvZXh0NC9wYWdlLWlvLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlpZiAoaW9fcGFnZV9jYWNoZXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJaW9fZW5kX2NhY2hlcCA9IEtNRU1fQ0FDSEUoZXh0NF9pb19lbmQsIFNMQUJfUkVDTEFJTV9BQ0NPVU5UKTsKLQlpZiAoaW9fcGFnZV9jYWNoZXAgPT0gTlVMTCkgeworCWlmIChpb19lbmRfY2FjaGVwID09IE5VTEwpIHsKIAkJa21lbV9jYWNoZV9kZXN0cm95KGlvX3BhZ2VfY2FjaGVwKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMTU4LDExICsxNTgsOCBAQAogCiBleHQ0X2lvX2VuZF90ICpleHQ0X2luaXRfaW9fZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGdmcF90IGZsYWdzKQogewotCWV4dDRfaW9fZW5kX3QgKmlvID0gTlVMTDsKLQotCWlvID0ga21lbV9jYWNoZV9hbGxvYyhpb19lbmRfY2FjaGVwLCBmbGFncyk7CisJZXh0NF9pb19lbmRfdCAqaW8gPSBrbWVtX2NhY2hlX3phbGxvYyhpb19lbmRfY2FjaGVwLCBmbGFncyk7CiAJaWYgKGlvKSB7Ci0JCW1lbXNldChpbywgMCwgc2l6ZW9mKCppbykpOwogCQlhdG9taWNfaW5jKCZFWFQ0X0koaW5vZGUpLT5pX2lvZW5kX2NvdW50KTsKIAkJaW8tPmlub2RlID0gaW5vZGU7CiAJCUlOSVRfV09SSygmaW8tPndvcmssIGV4dDRfZW5kX2lvX3dvcmspOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9yZXNpemUuYyBiL2ZzL2V4dDQvcmVzaXplLmMKaW5kZXggOTgxYzg0Ny4uM2VjYzZlNCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9yZXNpemUuYworKysgYi9mcy9leHQ0L3Jlc2l6ZS5jCkBAIC0yMjAsNyArMjIwLDExIEBACiAJCW1lbWNweShnZGItPmJfZGF0YSwgc2JpLT5zX2dyb3VwX2Rlc2NbaV0tPmJfZGF0YSwgZ2RiLT5iX3NpemUpOwogCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGdkYik7CiAJCXVubG9ja19idWZmZXIoZ2RiKTsKLQkJZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLCBnZGIpOworCQllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIGdkYik7CisJCWlmICh1bmxpa2VseShlcnIpKSB7CisJCQlicmVsc2UoZ2RiKTsKKwkJCWdvdG8gZXhpdF9iaDsKKwkJfQogCQlleHQ0X3NldF9iaXQoYml0LCBiaC0+Yl9kYXRhKTsKIAkJYnJlbHNlKGdkYik7CiAJfQpAQCAtMjU4LDcgKzI2MiwxMSBAQAogCiAJZXh0NF9tYXJrX2JpdG1hcF9lbmQoaW5wdXQtPmJsb2Nrc19jb3VudCwgc2ItPnNfYmxvY2tzaXplICogOCwKIAkJCSAgICAgYmgtPmJfZGF0YSk7Ci0JZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLCBiaCk7CisJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLCBiaCk7CisJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJZXh0NF9zdGRfZXJyb3Ioc2IsIGVycik7CisJCWdvdG8gZXhpdF9iaDsKKwl9CiAJYnJlbHNlKGJoKTsKIAkvKiBNYXJrIHVudXNlZCBlbnRyaWVzIGluIGlub2RlIGJpdG1hcCB1c2VkICovCiAJZXh0NF9kZWJ1ZygiY2xlYXIgaW5vZGUgYml0bWFwICUjMDRsbHggKCslbGx1KVxuIiwKQEAgLTI3MCw3ICsyNzgsOSBAQAogCiAJZXh0NF9tYXJrX2JpdG1hcF9lbmQoRVhUNF9JTk9ERVNfUEVSX0dST1VQKHNiKSwgc2ItPnNfYmxvY2tzaXplICogOCwKIAkJCSAgICAgYmgtPmJfZGF0YSk7Ci0JZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLCBiaCk7CisJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLCBiaCk7CisJaWYgKHVubGlrZWx5KGVycikpCisJCWV4dDRfc3RkX2Vycm9yKHNiLCBlcnIpOwogZXhpdF9iaDoKIAlicmVsc2UoYmgpOwogCkBAIC00MjIsMTcgKzQzMiwyMSBAQAogCQlnb3RvIGV4aXRfZGluZDsKIAl9CiAKLQlpZiAoKGVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgRVhUNF9TQihzYiktPnNfc2JoKSkpCisJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBFWFQ0X1NCKHNiKS0+c19zYmgpOworCWlmICh1bmxpa2VseShlcnIpKQogCQlnb3RvIGV4aXRfZGluZDsKIAotCWlmICgoZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCAqcHJpbWFyeSkpKQorCWVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgKnByaW1hcnkpOworCWlmICh1bmxpa2VseShlcnIpKQogCQlnb3RvIGV4aXRfc2JoOwogCi0JaWYgKChlcnIgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGRpbmQpKSkKLQkJZ290byBleGl0X3ByaW1hcnk7CisJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBkaW5kKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJZXh0NF9zdGRfZXJyb3Ioc2IsIGVycik7CiAKIAkvKiBleHQ0X3Jlc2VydmVfaW5vZGVfd3JpdGUoKSBnZXRzIGEgcmVmZXJlbmNlIG9uIHRoZSBpbG9jICovCi0JaWYgKChlcnIgPSBleHQ0X3Jlc2VydmVfaW5vZGVfd3JpdGUoaGFuZGxlLCBpbm9kZSwgJmlsb2MpKSkKKwllcnIgPSBleHQ0X3Jlc2VydmVfaW5vZGVfd3JpdGUoaGFuZGxlLCBpbm9kZSwgJmlsb2MpOworCWlmICh1bmxpa2VseShlcnIpKQogCQlnb3RvIGV4aXRfZGluZGo7CiAKIAluX2dyb3VwX2Rlc2MgPSBrbWFsbG9jKChnZGJfbnVtICsgMSkgKiBzaXplb2Yoc3RydWN0IGJ1ZmZlcl9oZWFkICopLApAQCAtNDU0LDEyICs0NjgsMjAgQEAKIAkgKiByZXNlcnZlZCBpbm9kZSwgYW5kIHdpbGwgYmVjb21lIEdEVCBibG9ja3MgKHByaW1hcnkgYW5kIGJhY2t1cCkuCiAJICovCiAJZGF0YVtnZGJfbnVtICUgRVhUNF9BRERSX1BFUl9CTE9DSyhzYildID0gMDsKLQlleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIGRpbmQpOwotCWJyZWxzZShkaW5kKTsKKwllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIGRpbmQpOworCWlmICh1bmxpa2VseShlcnIpKSB7CisJCWV4dDRfc3RkX2Vycm9yKHNiLCBlcnIpOworCQlnb3RvIGV4aXRfaW5vZGU7CisJfQogCWlub2RlLT5pX2Jsb2NrcyAtPSAoZ2RiYWNrdXBzICsgMSkgKiBzYi0+c19ibG9ja3NpemUgPj4gOTsKIAlleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCAmaWxvYyk7CiAJbWVtc2V0KCgqcHJpbWFyeSktPmJfZGF0YSwgMCwgc2ItPnNfYmxvY2tzaXplKTsKLQlleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsICpwcmltYXJ5KTsKKwllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsICpwcmltYXJ5KTsKKwlpZiAodW5saWtlbHkoZXJyKSkgeworCQlleHQ0X3N0ZF9lcnJvcihzYiwgZXJyKTsKKwkJZ290byBleGl0X2lub2RlOworCX0KKwlicmVsc2UoZGluZCk7CiAKIAlvX2dyb3VwX2Rlc2MgPSBFWFQ0X1NCKHNiKS0+c19ncm91cF9kZXNjOwogCW1lbWNweShuX2dyb3VwX2Rlc2MsIG9fZ3JvdXBfZGVzYywKQEAgLTQ3MCwxOSArNDkyLDE5IEBACiAJa2ZyZWUob19ncm91cF9kZXNjKTsKIAogCWxlMTZfYWRkX2NwdSgmZXMtPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcywgLTEpOwotCWV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgTlVMTCwgRVhUNF9TQihzYiktPnNfc2JoKTsKKwllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIEVYVDRfU0Ioc2IpLT5zX3NiaCk7CisJaWYgKGVycikKKwkJZXh0NF9zdGRfZXJyb3Ioc2IsIGVycik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogCiBleGl0X2lub2RlOgogCS8qIGV4dDRfam91cm5hbF9yZWxlYXNlX2J1ZmZlcihoYW5kbGUsIGlsb2MuYmgpOyAqLwogCWJyZWxzZShpbG9jLmJoKTsKIGV4aXRfZGluZGo6CiAJLyogZXh0NF9qb3VybmFsX3JlbGVhc2VfYnVmZmVyKGhhbmRsZSwgZGluZCk7ICovCi1leGl0X3ByaW1hcnk6Ci0JLyogZXh0NF9qb3VybmFsX3JlbGVhc2VfYnVmZmVyKGhhbmRsZSwgKnByaW1hcnkpOyAqLwogZXhpdF9zYmg6Ci0JLyogZXh0NF9qb3VybmFsX3JlbGVhc2VfYnVmZmVyKGhhbmRsZSwgKnByaW1hcnkpOyAqLworCS8qIGV4dDRfam91cm5hbF9yZWxlYXNlX2J1ZmZlcihoYW5kbGUsIEVYVDRfU0Ioc2IpLT5zX3NiaCk7ICovCiBleGl0X2RpbmQ6CiAJYnJlbHNlKGRpbmQpOwogZXhpdF9iaDoKQEAgLTY2NSw3ICs2ODcsOSBAQAogCQkJbWVtc2V0KGJoLT5iX2RhdGEgKyBzaXplLCAwLCByZXN0KTsKIAkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJCXVubG9ja19idWZmZXIoYmgpOwotCQlleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIGJoKTsKKwkJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLCBiaCk7CisJCWlmICh1bmxpa2VseShlcnIpKQorCQkJZXh0NF9zdGRfZXJyb3Ioc2IsIGVycik7CiAJCWJyZWxzZShiaCk7CiAJfQogCWlmICgoZXJyMiA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSkpICYmICFlcnIpCkBAIC04ODMsNyArOTA3LDExIEBACiAJLyogVXBkYXRlIHRoZSBnbG9iYWwgZnMgc2l6ZSBmaWVsZHMgKi8KIAlzYmktPnNfZ3JvdXBzX2NvdW50Kys7CiAKLQlleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIHByaW1hcnkpOworCWVyciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgTlVMTCwgcHJpbWFyeSk7CisJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJZXh0NF9zdGRfZXJyb3Ioc2IsIGVycik7CisJCWdvdG8gZXhpdF9qb3VybmFsOworCX0KIAogCS8qIFVwZGF0ZSB0aGUgcmVzZXJ2ZWQgYmxvY2sgY291bnRzIG9ubHkgb25jZSB0aGUgbmV3IGdyb3VwIGlzCiAJICogYWN0aXZlLiAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IGNkMzdmOWQuLjI5YzgwZjYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTM4OCwxMyArMzg4LDE0IEBACiB2b2lkIF9fZXh0NF9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmdW5jdGlvbiwKIAkJICB1bnNpZ25lZCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CisJc3RydWN0IHZhX2Zvcm1hdCB2YWY7CiAJdmFfbGlzdCBhcmdzOwogCiAJdmFfc3RhcnQoYXJncywgZm10KTsKLQlwcmludGsoS0VSTl9DUklUICJFWFQ0LWZzIGVycm9yIChkZXZpY2UgJXMpOiAlczolZDogY29tbSAlczogIiwKLQkgICAgICAgc2ItPnNfaWQsIGZ1bmN0aW9uLCBsaW5lLCBjdXJyZW50LT5jb21tKTsKLQl2cHJpbnRrKGZtdCwgYXJncyk7Ci0JcHJpbnRrKCJcbiIpOworCXZhZi5mbXQgPSBmbXQ7CisJdmFmLnZhID0gJmFyZ3M7CisJcHJpbnRrKEtFUk5fQ1JJVCAiRVhUNC1mcyBlcnJvciAoZGV2aWNlICVzKTogJXM6JWQ6IGNvbW0gJXM6ICVwVlxuIiwKKwkgICAgICAgc2ItPnNfaWQsIGZ1bmN0aW9uLCBsaW5lLCBjdXJyZW50LT5jb21tLCAmdmFmKTsKIAl2YV9lbmQoYXJncyk7CiAKIAlleHQ0X2hhbmRsZV9lcnJvcihzYik7CkBAIC00MDUsMjggKzQwNiwzMSBAQAogCQkgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CisJc3RydWN0IHZhX2Zvcm1hdCB2YWY7CiAJc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzID0gRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfZXM7CiAKIAllcy0+c19sYXN0X2Vycm9yX2lubyA9IGNwdV90b19sZTMyKGlub2RlLT5pX2lubyk7CiAJZXMtPnNfbGFzdF9lcnJvcl9ibG9jayA9IGNwdV90b19sZTY0KGJsb2NrKTsKIAlzYXZlX2Vycm9yX2luZm8oaW5vZGUtPmlfc2IsIGZ1bmN0aW9uLCBsaW5lKTsKIAl2YV9zdGFydChhcmdzLCBmbXQpOworCXZhZi5mbXQgPSBmbXQ7CisJdmFmLnZhID0gJmFyZ3M7CiAJcHJpbnRrKEtFUk5fQ1JJVCAiRVhUNC1mcyBlcnJvciAoZGV2aWNlICVzKTogJXM6JWQ6IGlub2RlICMlbHU6ICIsCiAJICAgICAgIGlub2RlLT5pX3NiLT5zX2lkLCBmdW5jdGlvbiwgbGluZSwgaW5vZGUtPmlfaW5vKTsKIAlpZiAoYmxvY2spCi0JCXByaW50aygiYmxvY2sgJWxsdTogIiwgYmxvY2spOwotCXByaW50aygiY29tbSAlczogIiwgY3VycmVudC0+Y29tbSk7Ci0JdnByaW50ayhmbXQsIGFyZ3MpOwotCXByaW50aygiXG4iKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiYmxvY2sgJWxsdTogIiwgYmxvY2spOworCXByaW50ayhLRVJOX0NPTlQgImNvbW0gJXM6ICVwVlxuIiwgY3VycmVudC0+Y29tbSwgJnZhZik7CiAJdmFfZW5kKGFyZ3MpOwogCiAJZXh0NF9oYW5kbGVfZXJyb3IoaW5vZGUtPmlfc2IpOwogfQogCiB2b2lkIGV4dDRfZXJyb3JfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sCi0JCSAgICAgdW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCQkgICAgIHVuc2lnbmVkIGludCBsaW5lLCBleHQ0X2ZzYmxrX3QgYmxvY2ssCisJCSAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOworCXN0cnVjdCB2YV9mb3JtYXQgdmFmOwogCXN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplczsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CiAJY2hhciBwYXRobmFtZVs4MF0sICpwYXRoOwpAQCAtNDM0LDE3ICs0MzgsMTggQEAKIAllcyA9IEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2VzOwogCWVzLT5zX2xhc3RfZXJyb3JfaW5vID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfaW5vKTsKIAlzYXZlX2Vycm9yX2luZm8oaW5vZGUtPmlfc2IsIGZ1bmN0aW9uLCBsaW5lKTsKLQl2YV9zdGFydChhcmdzLCBmbXQpOwogCXBhdGggPSBkX3BhdGgoJihmaWxlLT5mX3BhdGgpLCBwYXRobmFtZSwgc2l6ZW9mKHBhdGhuYW1lKSk7Ci0JaWYgKCFwYXRoKQorCWlmIChJU19FUlIocGF0aCkpCiAJCXBhdGggPSAiKHVua25vd24pIjsKIAlwcmludGsoS0VSTl9DUklUCi0JICAgICAgICJFWFQ0LWZzIGVycm9yIChkZXZpY2UgJXMpOiAlczolZDogaW5vZGUgIyVsdSAiCi0JICAgICAgICIoY29tbSAlcyBwYXRoICVzKTogIiwKLQkgICAgICAgaW5vZGUtPmlfc2ItPnNfaWQsIGZ1bmN0aW9uLCBsaW5lLCBpbm9kZS0+aV9pbm8sCi0JICAgICAgIGN1cnJlbnQtPmNvbW0sIHBhdGgpOwotCXZwcmludGsoZm10LCBhcmdzKTsKLQlwcmludGsoIlxuIik7CisJICAgICAgICJFWFQ0LWZzIGVycm9yIChkZXZpY2UgJXMpOiAlczolZDogaW5vZGUgIyVsdTogIiwKKwkgICAgICAgaW5vZGUtPmlfc2ItPnNfaWQsIGZ1bmN0aW9uLCBsaW5lLCBpbm9kZS0+aV9pbm8pOworCWlmIChibG9jaykKKwkJcHJpbnRrKEtFUk5fQ09OVCAiYmxvY2sgJWxsdTogIiwgYmxvY2spOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdmFmLmZtdCA9IGZtdDsKKwl2YWYudmEgPSAmYXJnczsKKwlwcmludGsoS0VSTl9DT05UICJjb21tICVzOiBwYXRoICVzOiAlcFZcbiIsIGN1cnJlbnQtPmNvbW0sIHBhdGgsICZ2YWYpOwogCXZhX2VuZChhcmdzKTsKIAogCWV4dDRfaGFuZGxlX2Vycm9yKGlub2RlLT5pX3NiKTsKQEAgLTU0MywyOCArNTQ4LDI5IEBACiAJCXBhbmljKCJFWFQ0LWZzIHBhbmljIGZyb20gcHJldmlvdXMgZXJyb3JcbiIpOwogfQogCi12b2lkIGV4dDRfbXNnIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgY29uc3QgY2hhciAqcHJlZml4LAotCQkgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3ZvaWQgZXh0NF9tc2coc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKIAl2YV9saXN0IGFyZ3M7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50aygiJXNFWFQ0LWZzICglcyk6ICIsIHByZWZpeCwgc2ItPnNfaWQpOwotCXZwcmludGsoZm10LCBhcmdzKTsKLQlwcmludGsoIlxuIik7CisJdmFmLmZtdCA9IGZtdDsKKwl2YWYudmEgPSAmYXJnczsKKwlwcmludGsoIiVzRVhUNC1mcyAoJXMpOiAlcFZcbiIsIHByZWZpeCwgc2ItPnNfaWQsICZ2YWYpOwogCXZhX2VuZChhcmdzKTsKIH0KIAogdm9pZCBfX2V4dDRfd2FybmluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmdW5jdGlvbiwKIAkJICAgIHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKIAl2YV9saXN0IGFyZ3M7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50ayhLRVJOX1dBUk5JTkcgIkVYVDQtZnMgd2FybmluZyAoZGV2aWNlICVzKTogJXM6JWQ6ICIsCi0JICAgICAgIHNiLT5zX2lkLCBmdW5jdGlvbiwgbGluZSk7Ci0JdnByaW50ayhmbXQsIGFyZ3MpOwotCXByaW50aygiXG4iKTsKKwl2YWYuZm10ID0gZm10OworCXZhZi52YSA9ICZhcmdzOworCXByaW50ayhLRVJOX1dBUk5JTkcgIkVYVDQtZnMgd2FybmluZyAoZGV2aWNlICVzKTogJXM6JWQ6ICVwVlxuIiwKKwkgICAgICAgc2ItPnNfaWQsIGZ1bmN0aW9uLCBsaW5lLCAmdmFmKTsKIAl2YV9lbmQoYXJncyk7CiB9CiAKQEAgLTU3NSwyMSArNTgxLDI1IEBACiBfX3JlbGVhc2VzKGJpdGxvY2spCiBfX2FjcXVpcmVzKGJpdGxvY2spCiB7CisJc3RydWN0IHZhX2Zvcm1hdCB2YWY7CiAJdmFfbGlzdCBhcmdzOwogCXN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyA9IEVYVDRfU0Ioc2IpLT5zX2VzOwogCiAJZXMtPnNfbGFzdF9lcnJvcl9pbm8gPSBjcHVfdG9fbGUzMihpbm8pOwogCWVzLT5zX2xhc3RfZXJyb3JfYmxvY2sgPSBjcHVfdG9fbGU2NChibG9jayk7CiAJX19zYXZlX2Vycm9yX2luZm8oc2IsIGZ1bmN0aW9uLCBsaW5lKTsKKwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisKKwl2YWYuZm10ID0gZm10OworCXZhZi52YSA9ICZhcmdzOwogCXByaW50ayhLRVJOX0NSSVQgIkVYVDQtZnMgZXJyb3IgKGRldmljZSAlcyk6ICVzOiVkOiBncm91cCAldSIsCiAJICAgICAgIHNiLT5zX2lkLCBmdW5jdGlvbiwgbGluZSwgZ3JwKTsKIAlpZiAoaW5vKQotCQlwcmludGsoImlub2RlICVsdTogIiwgaW5vKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiaW5vZGUgJWx1OiAiLCBpbm8pOwogCWlmIChibG9jaykKLQkJcHJpbnRrKCJibG9jayAlbGx1OiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGJsb2NrKTsKLQl2cHJpbnRrKGZtdCwgYXJncyk7Ci0JcHJpbnRrKCJcbiIpOworCQlwcmludGsoS0VSTl9DT05UICJibG9jayAlbGx1OiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGJsb2NrKTsKKwlwcmludGsoS0VSTl9DT05UICIlcFZcbiIsICZ2YWYpOwogCXZhX2VuZChhcmdzKTsKIAogCWlmICh0ZXN0X29wdChzYiwgRVJST1JTX0NPTlQpKSB7CkBAIC04MDgsMjEgKzgxOCwxNSBAQAogCW1lbXNldCgmZWktPmlfY2FjaGVkX2V4dGVudCwgMCwgc2l6ZW9mKHN0cnVjdCBleHQ0X2V4dF9jYWNoZSkpOwogCUlOSVRfTElTVF9IRUFEKCZlaS0+aV9wcmVhbGxvY19saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmZWktPmlfcHJlYWxsb2NfbG9jayk7Ci0JLyoKLQkgKiBOb3RlOiAgV2UgY2FuIGJlIGNhbGxlZCBiZWZvcmUgRVhUNF9TQihzYiktPnNfam91cm5hbCBpcyBzZXQsCi0JICogdGhlcmVmb3JlIGl0IGNhbiBiZSBudWxsIGhlcmUuICBEb24ndCBjaGVjayBpdCwganVzdCBpbml0aWFsaXplCi0JICogamlub2RlLgotCSAqLwotCWpiZDJfam91cm5hbF9pbml0X2piZF9pbm9kZSgmZWktPmppbm9kZSwgJmVpLT52ZnNfaW5vZGUpOwogCWVpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzID0gMDsKIAllaS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrcyA9IDA7CiAJZWktPmlfYWxsb2NhdGVkX21ldGFfYmxvY2tzID0gMDsKIAllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbiA9IDA7Ci0JZWktPmlfZGVsYWxsb2NfcmVzZXJ2ZWRfZmxhZyA9IDA7CiAJc3Bpbl9sb2NrX2luaXQoJihlaS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKSk7CiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJZWktPmlfcmVzZXJ2ZWRfcXVvdGEgPSAwOwogI2VuZGlmCisJZWktPmppbm9kZSA9IE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJmVpLT5pX2NvbXBsZXRlZF9pb19saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmZWktPmlfY29tcGxldGVkX2lvX2xvY2spOwogCWVpLT5jdXJfYWlvX2RpbyA9IE5VTEw7CkBAIC04OTgsOSArOTAyLDEyIEBACiAJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiAJZHF1b3RfZHJvcChpbm9kZSk7CiAJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKLQlpZiAoRVhUNF9KT1VSTkFMKGlub2RlKSkKLQkJamJkMl9qb3VybmFsX3JlbGVhc2VfamJkX2lub2RlKEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2pvdXJuYWwsCi0JCQkJICAgICAgICZFWFQ0X0koaW5vZGUpLT5qaW5vZGUpOworCWlmIChFWFQ0X0koaW5vZGUpLT5qaW5vZGUpIHsKKwkJamJkMl9qb3VybmFsX3JlbGVhc2VfamJkX2lub2RlKEVYVDRfSk9VUk5BTChpbm9kZSksCisJCQkJCSAgICAgICBFWFQ0X0koaW5vZGUpLT5qaW5vZGUpOworCQlqYmQyX2ZyZWVfaW5vZGUoRVhUNF9JKGlub2RlKS0+amlub2RlKTsKKwkJRVhUNF9JKGlub2RlKS0+amlub2RlID0gTlVMTDsKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X3Nob3dfcXVvdGFfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKQEAgLTEzOTMsNyArMTQwMCw3IEBACiAJCXNiaS0+c19xZl9uYW1lc1txdHlwZV0gPSBOVUxMOwogCQlyZXR1cm4gMDsKIAl9Ci0Jc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBRVU9UQSk7CisJc2V0X29wdChzYiwgUVVPVEEpOwogCXJldHVybiAxOwogfQogCkBAIC0xNDQ4LDIxICsxNDU1LDIxIEBACiAJCXN3aXRjaCAodG9rZW4pIHsKIAkJY2FzZSBPcHRfYnNkX2RmOgogCQkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywgZGVwcmVjYXRlZF9tc2csIHAsICIyLjYuMzgiKTsKLQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBNSU5JWF9ERik7CisJCQljbGVhcl9vcHQoc2IsIE1JTklYX0RGKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9taW5peF9kZjoKIAkJCWV4dDRfbXNnKHNiLCBLRVJOX1dBUk5JTkcsIGRlcHJlY2F0ZWRfbXNnLCBwLCAiMi42LjM4Iik7Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIE1JTklYX0RGKTsKKwkJCXNldF9vcHQoc2IsIE1JTklYX0RGKTsKIAogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2dycGlkOgogCQkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywgZGVwcmVjYXRlZF9tc2csIHAsICIyLjYuMzgiKTsKLQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgR1JQSUQpOworCQkJc2V0X29wdChzYiwgR1JQSUQpOwogCiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbm9ncnBpZDoKIAkJCWV4dDRfbXNnKHNiLCBLRVJOX1dBUk5JTkcsIGRlcHJlY2F0ZWRfbXNnLCBwLCAiMi42LjM4Iik7Ci0JCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgR1JQSUQpOworCQkJY2xlYXJfb3B0KHNiLCBHUlBJRCk7CiAKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9yZXN1aWQ6CkBAIC0xNDgwLDM4ICsxNDg3LDM4IEBACiAJCQkvKiAqc2JfYmxvY2sgPSBtYXRjaF9pbnQoJmFyZ3NbMF0pOyAqLwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2Vycl9wYW5pYzoKLQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBFUlJPUlNfQ09OVCk7Ci0JCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgRVJST1JTX1JPKTsKLQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgRVJST1JTX1BBTklDKTsKKwkJCWNsZWFyX29wdChzYiwgRVJST1JTX0NPTlQpOworCQkJY2xlYXJfb3B0KHNiLCBFUlJPUlNfUk8pOworCQkJc2V0X29wdChzYiwgRVJST1JTX1BBTklDKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9lcnJfcm86Ci0JCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgRVJST1JTX0NPTlQpOwotCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIEVSUk9SU19QQU5JQyk7Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEVSUk9SU19STyk7CisJCQljbGVhcl9vcHQoc2IsIEVSUk9SU19DT05UKTsKKwkJCWNsZWFyX29wdChzYiwgRVJST1JTX1BBTklDKTsKKwkJCXNldF9vcHQoc2IsIEVSUk9SU19STyk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfZXJyX2NvbnQ6Ci0JCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgRVJST1JTX1JPKTsKLQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBFUlJPUlNfUEFOSUMpOwotCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBFUlJPUlNfQ09OVCk7CisJCQljbGVhcl9vcHQoc2IsIEVSUk9SU19STyk7CisJCQljbGVhcl9vcHQoc2IsIEVSUk9SU19QQU5JQyk7CisJCQlzZXRfb3B0KHNiLCBFUlJPUlNfQ09OVCk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbm91aWQzMjoKLQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9fVUlEMzIpOworCQkJc2V0X29wdChzYiwgTk9fVUlEMzIpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2RlYnVnOgotCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBERUJVRyk7CisJCQlzZXRfb3B0KHNiLCBERUJVRyk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfb2xkYWxsb2M6Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIE9MREFMTE9DKTsKKwkJCXNldF9vcHQoc2IsIE9MREFMTE9DKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9vcmxvdjoKLQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBPTERBTExPQyk7CisJCQljbGVhcl9vcHQoc2IsIE9MREFMTE9DKTsKIAkJCWJyZWFrOwogI2lmZGVmIENPTkZJR19FWFQ0X0ZTX1hBVFRSCiAJCWNhc2UgT3B0X3VzZXJfeGF0dHI6Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIFhBVFRSX1VTRVIpOworCQkJc2V0X29wdChzYiwgWEFUVFJfVVNFUik7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbm91c2VyX3hhdHRyOgotCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIFhBVFRSX1VTRVIpOworCQkJY2xlYXJfb3B0KHNiLCBYQVRUUl9VU0VSKTsKIAkJCWJyZWFrOwogI2Vsc2UKIAkJY2FzZSBPcHRfdXNlcl94YXR0cjoKQEAgLTE1MjEsMTAgKzE1MjgsMTAgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTAogCQljYXNlIE9wdF9hY2w6Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIFBPU0lYX0FDTCk7CisJCQlzZXRfb3B0KHNiLCBQT1NJWF9BQ0wpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vYWNsOgotCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIFBPU0lYX0FDTCk7CisJCQljbGVhcl9vcHQoc2IsIFBPU0lYX0FDTCk7CiAJCQlicmVhazsKICNlbHNlCiAJCWNhc2UgT3B0X2FjbDoKQEAgLTE1NDMsNyArMTU1MCw3IEBACiAJCQkJCSAiQ2Fubm90IHNwZWNpZnkgam91cm5hbCBvbiByZW1vdW50Iik7CiAJCQkJcmV0dXJuIDA7CiAJCQl9Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIFVQREFURV9KT1VSTkFMKTsKKwkJCXNldF9vcHQoc2IsIFVQREFURV9KT1VSTkFMKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9qb3VybmFsX2RldjoKIAkJCWlmIChpc19yZW1vdW50KSB7CkBAIC0xNTU2LDE0ICsxNTYzLDE0IEBACiAJCQkqam91cm5hbF9kZXZudW0gPSBvcHRpb247CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfam91cm5hbF9jaGVja3N1bToKLQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgSk9VUk5BTF9DSEVDS1NVTSk7CisJCQlzZXRfb3B0KHNiLCBKT1VSTkFMX0NIRUNLU1VNKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9qb3VybmFsX2FzeW5jX2NvbW1pdDoKLQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgSk9VUk5BTF9BU1lOQ19DT01NSVQpOwotCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBKT1VSTkFMX0NIRUNLU1VNKTsKKwkJCXNldF9vcHQoc2IsIEpPVVJOQUxfQVNZTkNfQ09NTUlUKTsKKwkJCXNldF9vcHQoc2IsIEpPVVJOQUxfQ0hFQ0tTVU0pOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vbG9hZDoKLQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9MT0FEKTsKKwkJCXNldF9vcHQoc2IsIE5PTE9BRCk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfY29tbWl0OgogCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCkBAIC0xNjA2LDE1ICsxNjEzLDE1IEBACiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCX0gZWxzZSB7Ci0JCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIERBVEFfRkxBR1MpOworCQkJCWNsZWFyX29wdChzYiwgREFUQV9GTEFHUyk7CiAJCQkJc2JpLT5zX21vdW50X29wdCB8PSBkYXRhX29wdDsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIE9wdF9kYXRhX2Vycl9hYm9ydDoKLQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgREFUQV9FUlJfQUJPUlQpOworCQkJc2V0X29wdChzYiwgREFUQV9FUlJfQUJPUlQpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2RhdGFfZXJyX2lnbm9yZToKLQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBEQVRBX0VSUl9BQk9SVCk7CisJCQljbGVhcl9vcHQoc2IsIERBVEFfRVJSX0FCT1JUKTsKIAkJCWJyZWFrOwogI2lmZGVmIENPTkZJR19RVU9UQQogCQljYXNlIE9wdF91c3JqcXVvdGE6CkBAIC0xNjU0LDEyICsxNjYxLDEyIEBACiAJCQlicmVhazsKIAkJY2FzZSBPcHRfcXVvdGE6CiAJCWNhc2UgT3B0X3VzcnF1b3RhOgotCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBRVU9UQSk7Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIFVTUlFVT1RBKTsKKwkJCXNldF9vcHQoc2IsIFFVT1RBKTsKKwkJCXNldF9vcHQoc2IsIFVTUlFVT1RBKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9ncnBxdW90YToKLQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgUVVPVEEpOwotCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBHUlBRVU9UQSk7CisJCQlzZXRfb3B0KHNiLCBRVU9UQSk7CisJCQlzZXRfb3B0KHNiLCBHUlBRVU9UQSk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbm9xdW90YToKIAkJCWlmIChzYl9hbnlfcXVvdGFfbG9hZGVkKHNiKSkgewpAQCAtMTY2Nyw5ICsxNjc0LDkgQEAKIAkJCQkJIm9wdGlvbnMgd2hlbiBxdW90YSB0dXJuZWQgb24iKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KLQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBRVU9UQSk7Ci0JCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgVVNSUVVPVEEpOwotCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIEdSUFFVT1RBKTsKKwkJCWNsZWFyX29wdChzYiwgUVVPVEEpOworCQkJY2xlYXJfb3B0KHNiLCBVU1JRVU9UQSk7CisJCQljbGVhcl9vcHQoc2IsIEdSUFFVT1RBKTsKIAkJCWJyZWFrOwogI2Vsc2UKIAkJY2FzZSBPcHRfcXVvdGE6CkBAIC0xNjk1LDcgKzE3MDIsNyBAQAogCQkJc2JpLT5zX21vdW50X2ZsYWdzIHw9IEVYVDRfTUZfRlNfQUJPUlRFRDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9ub2JhcnJpZXI6Ci0JCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgQkFSUklFUik7CisJCQljbGVhcl9vcHQoc2IsIEJBUlJJRVIpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2JhcnJpZXI6CiAJCQlpZiAoYXJnc1swXS5mcm9tKSB7CkBAIC0xNzA0LDkgKzE3MTEsOSBAQAogCQkJfSBlbHNlCiAJCQkJb3B0aW9uID0gMTsJLyogTm8gYXJndW1lbnQsIGRlZmF1bHQgdG8gMSAqLwogCQkJaWYgKG9wdGlvbikKLQkJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEJBUlJJRVIpOworCQkJCXNldF9vcHQoc2IsIEJBUlJJRVIpOwogCQkJZWxzZQotCQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBCQVJSSUVSKTsKKwkJCQljbGVhcl9vcHQoc2IsIEJBUlJJRVIpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2lnbm9yZToKIAkJCWJyZWFrOwpAQCAtMTczMCwxNyArMTczNywxNyBAQAogCQkJCSAiSWdub3JpbmcgZGVwcmVjYXRlZCBiaCBvcHRpb24iKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9pX3ZlcnNpb246Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIElfVkVSU0lPTik7CisJCQlzZXRfb3B0KHNiLCBJX1ZFUlNJT04pOwogCQkJc2ItPnNfZmxhZ3MgfD0gTVNfSV9WRVJTSU9OOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vZGVsYWxsb2M6Ci0JCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgREVMQUxMT0MpOworCQkJY2xlYXJfb3B0KHNiLCBERUxBTExPQyk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbWJsa19pb19zdWJtaXQ6Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIE1CTEtfSU9fU1VCTUlUKTsKKwkJCXNldF9vcHQoc2IsIE1CTEtfSU9fU1VCTUlUKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9ub21ibGtfaW9fc3VibWl0OgotCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIE1CTEtfSU9fU1VCTUlUKTsKKwkJCWNsZWFyX29wdChzYiwgTUJMS19JT19TVUJNSVQpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3N0cmlwZToKIAkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQpAQCAtMTc1MCwxMyArMTc1NywxMyBAQAogCQkJc2JpLT5zX3N0cmlwZSA9IG9wdGlvbjsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9kZWxhbGxvYzoKLQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgREVMQUxMT0MpOworCQkJc2V0X29wdChzYiwgREVMQUxMT0MpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2Jsb2NrX3ZhbGlkaXR5OgotCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBCTE9DS19WQUxJRElUWSk7CisJCQlzZXRfb3B0KHNiLCBCTE9DS19WQUxJRElUWSk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbm9ibG9ja192YWxpZGl0eToKLQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBCTE9DS19WQUxJRElUWSk7CisJCQljbGVhcl9vcHQoc2IsIEJMT0NLX1ZBTElESVRZKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9pbm9kZV9yZWFkYWhlYWRfYmxrczoKIAkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQpAQCAtMTc4MCw3ICsxNzg3LDcgQEAKIAkJCQkJCQkgICAgb3B0aW9uKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9ub2F1dG9fZGFfYWxsb2M6Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsTk9fQVVUT19EQV9BTExPQyk7CisJCQlzZXRfb3B0KHNiLCBOT19BVVRPX0RBX0FMTE9DKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9hdXRvX2RhX2FsbG9jOgogCQkJaWYgKGFyZ3NbMF0uZnJvbSkgewpAQCAtMTc4OSwyNCArMTc5NiwyNCBAQAogCQkJfSBlbHNlCiAJCQkJb3B0aW9uID0gMTsJLyogTm8gYXJndW1lbnQsIGRlZmF1bHQgdG8gMSAqLwogCQkJaWYgKG9wdGlvbikKLQkJCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9fQVVUT19EQV9BTExPQyk7CisJCQkJY2xlYXJfb3B0KHNiLCBOT19BVVRPX0RBX0FMTE9DKTsKIAkJCWVsc2UKLQkJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsTk9fQVVUT19EQV9BTExPQyk7CisJCQkJc2V0X29wdChzYixOT19BVVRPX0RBX0FMTE9DKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9kaXNjYXJkOgotCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBESVNDQVJEKTsKKwkJCXNldF9vcHQoc2IsIERJU0NBUkQpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vZGlzY2FyZDoKLQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBESVNDQVJEKTsKKwkJCWNsZWFyX29wdChzYiwgRElTQ0FSRCk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfZGlvcmVhZF9ub2xvY2s6Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIERJT1JFQURfTk9MT0NLKTsKKwkJCXNldF9vcHQoc2IsIERJT1JFQURfTk9MT0NLKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9kaW9yZWFkX2xvY2s6Ci0JCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgRElPUkVBRF9OT0xPQ0spOworCQkJY2xlYXJfb3B0KHNiLCBESU9SRUFEX05PTE9DSyk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfaW5pdF9pbm9kZV90YWJsZToKLQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgSU5JVF9JTk9ERV9UQUJMRSk7CisJCQlzZXRfb3B0KHNiLCBJTklUX0lOT0RFX1RBQkxFKTsKIAkJCWlmIChhcmdzWzBdLmZyb20pIHsKIAkJCQlpZiAobWF0Y2hfaW50KCZhcmdzWzBdLCAmb3B0aW9uKSkKIAkJCQkJcmV0dXJuIDA7CkBAIC0xODE3LDcgKzE4MjQsNyBAQAogCQkJc2JpLT5zX2xpX3dhaXRfbXVsdCA9IG9wdGlvbjsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9ub2luaXRfaW5vZGVfdGFibGU6Ci0JCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgSU5JVF9JTk9ERV9UQUJMRSk7CisJCQljbGVhcl9vcHQoc2IsIElOSVRfSU5PREVfVEFCTEUpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsCkBAIC0xODI5LDEwICsxODM2LDEwIEBACiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJaWYgKHNiaS0+c19xZl9uYW1lc1tVU1JRVU9UQV0gfHwgc2JpLT5zX3FmX25hbWVzW0dSUFFVT1RBXSkgewogCQlpZiAodGVzdF9vcHQoc2IsIFVTUlFVT1RBKSAmJiBzYmktPnNfcWZfbmFtZXNbVVNSUVVPVEFdKQotCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIFVTUlFVT1RBKTsKKwkJCWNsZWFyX29wdChzYiwgVVNSUVVPVEEpOwogCiAJCWlmICh0ZXN0X29wdChzYiwgR1JQUVVPVEEpICYmIHNiaS0+c19xZl9uYW1lc1tHUlBRVU9UQV0pCi0JCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgR1JQUVVPVEEpOworCQkJY2xlYXJfb3B0KHNiLCBHUlBRVU9UQSk7CiAKIAkJaWYgKHRlc3Rfb3B0KHNiLCBHUlBRVU9UQSkgfHwgdGVzdF9vcHQoc2IsIFVTUlFVT1RBKSkgewogCQkJZXh0NF9tc2coc2IsIEtFUk5fRVJSLCAib2xkIGFuZCBuZXcgcXVvdGEgIgpAQCAtMTkwMiwxMiArMTkwOSwxMiBAQAogCWV4dDRfY29tbWl0X3N1cGVyKHNiLCAxKTsKIAlpZiAodGVzdF9vcHQoc2IsIERFQlVHKSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiW0VYVDQgRlMgYnM9JWx1LCBnYz0ldSwgIgotCQkJCSJicGc9JWx1LCBpcGc9JWx1LCBtbz0lMDR4XVxuIiwKKwkJCQkiYnBnPSVsdSwgaXBnPSVsdSwgbW89JTA0eCwgbW8yPSUwNHhdXG4iLAogCQkJc2ItPnNfYmxvY2tzaXplLAogCQkJc2JpLT5zX2dyb3Vwc19jb3VudCwKIAkJCUVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYiksCiAJCQlFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpLAotCQkJc2JpLT5zX21vdW50X29wdCk7CisJCQlzYmktPnNfbW91bnRfb3B0LCBzYmktPnNfbW91bnRfb3B0Mik7CiAKIAlyZXR1cm4gcmVzOwogfQpAQCAtMTkzNywxNCArMTk0NCwxMyBAQAogCXNpemUgPSBmbGV4X2dyb3VwX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBmbGV4X2dyb3Vwcyk7CiAJc2JpLT5zX2ZsZXhfZ3JvdXBzID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoc2JpLT5zX2ZsZXhfZ3JvdXBzID09IE5VTEwpIHsKLQkJc2JpLT5zX2ZsZXhfZ3JvdXBzID0gdm1hbGxvYyhzaXplKTsKLQkJaWYgKHNiaS0+c19mbGV4X2dyb3VwcykKLQkJCW1lbXNldChzYmktPnNfZmxleF9ncm91cHMsIDAsIHNpemUpOwotCX0KLQlpZiAoc2JpLT5zX2ZsZXhfZ3JvdXBzID09IE5VTEwpIHsKLQkJZXh0NF9tc2coc2IsIEtFUk5fRVJSLCAibm90IGVub3VnaCBtZW1vcnkgZm9yICIKLQkJCQkiJXUgZmxleCBncm91cHMiLCBmbGV4X2dyb3VwX2NvdW50KTsKLQkJZ290byBmYWlsZWQ7CisJCXNiaS0+c19mbGV4X2dyb3VwcyA9IHZ6YWxsb2Moc2l6ZSk7CisJCWlmIChzYmktPnNfZmxleF9ncm91cHMgPT0gTlVMTCkgeworCQkJZXh0NF9tc2coc2IsIEtFUk5fRVJSLAorCQkJCSAibm90IGVub3VnaCBtZW1vcnkgZm9yICV1IGZsZXggZ3JvdXBzIiwKKwkJCQkgZmxleF9ncm91cF9jb3VudCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBzYmktPnNfZ3JvdXBzX2NvdW50OyBpKyspIHsKQEAgLTI5MjMsNyArMjkyOSw3IEBACiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7CiAJc3RydWN0IGV4dDRfbGlfcmVxdWVzdCAqZWxyOwogCWV4dDRfZ3JvdXBfdCBuZ3JvdXBzID0gRVhUNF9TQihzYiktPnNfZ3JvdXBzX2NvdW50OwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoc2JpLT5zX2xpX3JlcXVlc3QgIT0gTlVMTCkKIAkJcmV0dXJuIDA7CkBAIC0zMDc4LDQxICszMDg0LDQxIEBACiAKIAkvKiBTZXQgZGVmYXVsdHMgYmVmb3JlIHdlIHBhcnNlIHRoZSBtb3VudCBvcHRpb25zICovCiAJZGVmX21vdW50X29wdHMgPSBsZTMyX3RvX2NwdShlcy0+c19kZWZhdWx0X21vdW50X29wdHMpOwotCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgSU5JVF9JTk9ERV9UQUJMRSk7CisJc2V0X29wdChzYiwgSU5JVF9JTk9ERV9UQUJMRSk7CiAJaWYgKGRlZl9tb3VudF9vcHRzICYgRVhUNF9ERUZNX0RFQlVHKQotCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIERFQlVHKTsKKwkJc2V0X29wdChzYiwgREVCVUcpOwogCWlmIChkZWZfbW91bnRfb3B0cyAmIEVYVDRfREVGTV9CU0RHUk9VUFMpIHsKIAkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywgZGVwcmVjYXRlZF9tc2csICJic2Rncm91cHMiLAogCQkJIjIuNi4zOCIpOwotCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEdSUElEKTsKKwkJc2V0X29wdChzYiwgR1JQSUQpOwogCX0KIAlpZiAoZGVmX21vdW50X29wdHMgJiBFWFQ0X0RFRk1fVUlEMTYpCi0JCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9fVUlEMzIpOworCQlzZXRfb3B0KHNiLCBOT19VSUQzMik7CiAjaWZkZWYgQ09ORklHX0VYVDRfRlNfWEFUVFIKIAlpZiAoZGVmX21vdW50X29wdHMgJiBFWFQ0X0RFRk1fWEFUVFJfVVNFUikKLQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBYQVRUUl9VU0VSKTsKKwkJc2V0X29wdChzYiwgWEFUVFJfVVNFUik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wKIAlpZiAoZGVmX21vdW50X29wdHMgJiBFWFQ0X0RFRk1fQUNMKQotCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIFBPU0lYX0FDTCk7CisJCXNldF9vcHQoc2IsIFBPU0lYX0FDTCk7CiAjZW5kaWYKIAlpZiAoKGRlZl9tb3VudF9vcHRzICYgRVhUNF9ERUZNX0pNT0RFKSA9PSBFWFQ0X0RFRk1fSk1PREVfREFUQSkKLQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBKT1VSTkFMX0RBVEEpOworCQlzZXRfb3B0KHNiLCBKT1VSTkFMX0RBVEEpOwogCWVsc2UgaWYgKChkZWZfbW91bnRfb3B0cyAmIEVYVDRfREVGTV9KTU9ERSkgPT0gRVhUNF9ERUZNX0pNT0RFX09SREVSRUQpCi0JCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgT1JERVJFRF9EQVRBKTsKKwkJc2V0X29wdChzYiwgT1JERVJFRF9EQVRBKTsKIAllbHNlIGlmICgoZGVmX21vdW50X29wdHMgJiBFWFQ0X0RFRk1fSk1PREUpID09IEVYVDRfREVGTV9KTU9ERV9XQkFDSykKLQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBXUklURUJBQ0tfREFUQSk7CisJCXNldF9vcHQoc2IsIFdSSVRFQkFDS19EQVRBKTsKIAogCWlmIChsZTE2X3RvX2NwdShzYmktPnNfZXMtPnNfZXJyb3JzKSA9PSBFWFQ0X0VSUk9SU19QQU5JQykKLQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBFUlJPUlNfUEFOSUMpOworCQlzZXRfb3B0KHNiLCBFUlJPUlNfUEFOSUMpOwogCWVsc2UgaWYgKGxlMTZfdG9fY3B1KHNiaS0+c19lcy0+c19lcnJvcnMpID09IEVYVDRfRVJST1JTX0NPTlRJTlVFKQotCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEVSUk9SU19DT05UKTsKKwkJc2V0X29wdChzYiwgRVJST1JTX0NPTlQpOwogCWVsc2UKLQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBFUlJPUlNfUk8pOworCQlzZXRfb3B0KHNiLCBFUlJPUlNfUk8pOwogCWlmIChkZWZfbW91bnRfb3B0cyAmIEVYVDRfREVGTV9CTE9DS19WQUxJRElUWSkKLQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBCTE9DS19WQUxJRElUWSk7CisJCXNldF9vcHQoc2IsIEJMT0NLX1ZBTElESVRZKTsKIAlpZiAoZGVmX21vdW50X29wdHMgJiBFWFQ0X0RFRk1fRElTQ0FSRCkKLQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBESVNDQVJEKTsKKwkJc2V0X29wdChzYiwgRElTQ0FSRCk7CiAKIAlzYmktPnNfcmVzdWlkID0gbGUxNl90b19jcHUoZXMtPnNfZGVmX3Jlc3VpZCk7CiAJc2JpLT5zX3Jlc2dpZCA9IGxlMTZfdG9fY3B1KGVzLT5zX2RlZl9yZXNnaWQpOwpAQCAtMzEyMSw3ICszMTI3LDcgQEAKIAlzYmktPnNfbWF4X2JhdGNoX3RpbWUgPSBFWFQ0X0RFRl9NQVhfQkFUQ0hfVElNRTsKIAogCWlmICgoZGVmX21vdW50X29wdHMgJiBFWFQ0X0RFRk1fTk9CQVJSSUVSKSA9PSAwKQotCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEJBUlJJRVIpOworCQlzZXRfb3B0KHNiLCBCQVJSSUVSKTsKIAogCS8qCiAJICogZW5hYmxlIGRlbGF5ZWQgYWxsb2NhdGlvbiBieSBkZWZhdWx0CkBAIC0zMTI5LDcgKzMxMzUsNyBAQAogCSAqLwogCWlmICghSVNfRVhUM19TQihzYikgJiYKIAkgICAgKChkZWZfbW91bnRfb3B0cyAmIEVYVDRfREVGTV9OT0RFTEFMTE9DKSA9PSAwKSkKLQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBERUxBTExPQyk7CisJCXNldF9vcHQoc2IsIERFTEFMTE9DKTsKIAogCWlmICghcGFyc2Vfb3B0aW9ucygoY2hhciAqKSBzYmktPnNfZXMtPnNfbW91bnRfb3B0cywgc2IsCiAJCQkgICAmam91cm5hbF9kZXZudW0sICZqb3VybmFsX2lvcHJpbywgTlVMTCwgMCkpIHsKQEAgLTM0MzIsOCArMzQzOCw4IEBACiAJCSAgICAgICAic3VwcHJlc3NlZCBhbmQgbm90IG1vdW50ZWQgcmVhZC1vbmx5Iik7CiAJCWdvdG8gZmFpbGVkX21vdW50X3dxOwogCX0gZWxzZSB7Ci0JCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBEQVRBX0ZMQUdTKTsKLQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBXUklURUJBQ0tfREFUQSk7CisJCWNsZWFyX29wdChzYiwgREFUQV9GTEFHUyk7CisJCXNldF9vcHQoc2IsIFdSSVRFQkFDS19EQVRBKTsKIAkJc2JpLT5zX2pvdXJuYWwgPSBOVUxMOwogCQluZWVkc19yZWNvdmVyeSA9IDA7CiAJCWdvdG8gbm9fam91cm5hbDsKQEAgLTM0NzEsOSArMzQ3Nyw5IEBACiAJCSAqLwogCQlpZiAoamJkMl9qb3VybmFsX2NoZWNrX2F2YWlsYWJsZV9mZWF0dXJlcwogCQkgICAgKHNiaS0+c19qb3VybmFsLCAwLCAwLCBKQkQyX0ZFQVRVUkVfSU5DT01QQVRfUkVWT0tFKSkKLQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgT1JERVJFRF9EQVRBKTsKKwkJCXNldF9vcHQoc2IsIE9SREVSRURfREFUQSk7CiAJCWVsc2UKLQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgSk9VUk5BTF9EQVRBKTsKKwkJCXNldF9vcHQoc2IsIEpPVVJOQUxfREFUQSk7CiAJCWJyZWFrOwogCiAJY2FzZSBFWFQ0X01PVU5UX09SREVSRURfREFUQToKQEAgLTM1NjMsMTggKzM1NjksMTggQEAKIAkgICAgKHRlc3Rfb3B0KHNiLCBEQVRBX0ZMQUdTKSA9PSBFWFQ0X01PVU5UX0pPVVJOQUxfREFUQSkpIHsKIAkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywgIklnbm9yaW5nIGRlbGFsbG9jIG9wdGlvbiAtICIKIAkJCSAicmVxdWVzdGVkIGRhdGEgam91cm5hbGluZyBtb2RlIik7Ci0JCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBERUxBTExPQyk7CisJCWNsZWFyX29wdChzYiwgREVMQUxMT0MpOwogCX0KIAlpZiAodGVzdF9vcHQoc2IsIERJT1JFQURfTk9MT0NLKSkgewogCQlpZiAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBKSB7CiAJCQlleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLCAiSWdub3JpbmcgZGlvcmVhZF9ub2xvY2sgIgogCQkJCSJvcHRpb24gLSByZXF1ZXN0ZWQgZGF0YSBqb3VybmFsaW5nIG1vZGUiKTsKLQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBESU9SRUFEX05PTE9DSyk7CisJCQljbGVhcl9vcHQoc2IsIERJT1JFQURfTk9MT0NLKTsKIAkJfQogCQlpZiAoc2ItPnNfYmxvY2tzaXplIDwgUEFHRV9TSVpFKSB7CiAJCQlleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLCAiSWdub3JpbmcgZGlvcmVhZF9ub2xvY2sgIgogCQkJCSJvcHRpb24gLSBibG9jayBzaXplIGlzIHRvbyBzbWFsbCIpOwotCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIERJT1JFQURfTk9MT0NLKTsKKwkJCWNsZWFyX29wdChzYiwgRElPUkVBRF9OT0xPQ0spOwogCQl9CiAJfQogCkBAIC00MTczLDYgKzQxNzksMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFN0cnVjdHVyZSB0byBzYXZlIG1vdW50IG9wdGlvbnMgZm9yIGV4dDRfcmVtb3VudCdzIGJlbmVmaXQKKyAqLworc3RydWN0IGV4dDRfbW91bnRfb3B0aW9ucyB7CisJdW5zaWduZWQgbG9uZyBzX21vdW50X29wdDsKKwl1bnNpZ25lZCBsb25nIHNfbW91bnRfb3B0MjsKKwl1aWRfdCBzX3Jlc3VpZDsKKwlnaWRfdCBzX3Jlc2dpZDsKKwl1bnNpZ25lZCBsb25nIHNfY29tbWl0X2ludGVydmFsOworCXUzMiBzX21pbl9iYXRjaF90aW1lLCBzX21heF9iYXRjaF90aW1lOworI2lmZGVmIENPTkZJR19RVU9UQQorCWludCBzX2pxdW90YV9mbXQ7CisJY2hhciAqc19xZl9uYW1lc1tNQVhRVU9UQVNdOworI2VuZGlmCit9OworCiBzdGF0aWMgaW50IGV4dDRfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQogewogCXN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplczsKQEAgLTQxOTMsNiArNDIxNSw3IEBACiAJbG9ja19zdXBlcihzYik7CiAJb2xkX3NiX2ZsYWdzID0gc2ItPnNfZmxhZ3M7CiAJb2xkX29wdHMuc19tb3VudF9vcHQgPSBzYmktPnNfbW91bnRfb3B0OworCW9sZF9vcHRzLnNfbW91bnRfb3B0MiA9IHNiaS0+c19tb3VudF9vcHQyOwogCW9sZF9vcHRzLnNfcmVzdWlkID0gc2JpLT5zX3Jlc3VpZDsKIAlvbGRfb3B0cy5zX3Jlc2dpZCA9IHNiaS0+c19yZXNnaWQ7CiAJb2xkX29wdHMuc19jb21taXRfaW50ZXJ2YWwgPSBzYmktPnNfY29tbWl0X2ludGVydmFsOwpAQCAtNDM0Niw2ICs0MzY5LDcgQEAKIHJlc3RvcmVfb3B0czoKIAlzYi0+c19mbGFncyA9IG9sZF9zYl9mbGFnczsKIAlzYmktPnNfbW91bnRfb3B0ID0gb2xkX29wdHMuc19tb3VudF9vcHQ7CisJc2JpLT5zX21vdW50X29wdDIgPSBvbGRfb3B0cy5zX21vdW50X29wdDI7CiAJc2JpLT5zX3Jlc3VpZCA9IG9sZF9vcHRzLnNfcmVzdWlkOwogCXNiaS0+c19yZXNnaWQgPSBvbGRfb3B0cy5zX3Jlc2dpZDsKIAlzYmktPnNfY29tbWl0X2ludGVydmFsID0gb2xkX29wdHMuc19jb21taXRfaW50ZXJ2YWw7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmMKaW5kZXggZmE0Yjg5OS4uZmMzMjE3NiAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCisrKyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtNDI3LDIzICs0MjcsMjMgQEAKIHN0YXRpYyBpbnQKIGV4dDRfeGF0dHJfbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKQogewotCWludCBpX2Vycm9yLCBiX2Vycm9yOworCWludCByZXQsIHJldDI7CiAKIAlkb3duX3JlYWQoJkVYVDRfSShkZW50cnktPmRfaW5vZGUpLT54YXR0cl9zZW0pOwotCWlfZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X2xpc3QoZGVudHJ5LCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKLQlpZiAoaV9lcnJvciA8IDApIHsKLQkJYl9lcnJvciA9IDA7Ci0JfSBlbHNlIHsKLQkJaWYgKGJ1ZmZlcikgewotCQkJYnVmZmVyICs9IGlfZXJyb3I7Ci0JCQlidWZmZXJfc2l6ZSAtPSBpX2Vycm9yOwotCQl9Ci0JCWJfZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX2xpc3QoZGVudHJ5LCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKLQkJaWYgKGJfZXJyb3IgPCAwKQotCQkJaV9lcnJvciA9IDA7CisJcmV0ID0gcmV0MiA9IGV4dDRfeGF0dHJfaWJvZHlfbGlzdChkZW50cnksIGJ1ZmZlciwgYnVmZmVyX3NpemUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm91dDsKKwlpZiAoYnVmZmVyKSB7CisJCWJ1ZmZlciArPSByZXQ7CisJCWJ1ZmZlcl9zaXplIC09IHJldDsKIAl9CisJcmV0ID0gZXh0NF94YXR0cl9ibG9ja19saXN0KGRlbnRyeSwgYnVmZmVyLCBidWZmZXJfc2l6ZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3V0OworCXJldCArPSByZXQyOworZXJyb3V0OgogCXVwX3JlYWQoJkVYVDRfSShkZW50cnktPmRfaW5vZGUpLT54YXR0cl9zZW0pOwotCXJldHVybiBpX2Vycm9yICsgYl9lcnJvcjsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtOTQ3LDcgKzk0Nyw3IEBACiAvKgogICogZXh0NF94YXR0cl9zZXRfaGFuZGxlKCkKICAqCi0gKiBDcmVhdGUsIHJlcGxhY2Ugb3IgcmVtb3ZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBmb3IgdGhpcyBpbm9kZS4gQnVmZmVyCisgKiBDcmVhdGUsIHJlcGxhY2Ugb3IgcmVtb3ZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBmb3IgdGhpcyBpbm9kZS4gIFZhbHVlCiAgKiBpcyBOVUxMIHRvIHJlbW92ZSBhbiBleGlzdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZCBub24tTlVMTCB0bwogICogZWl0aGVyIHJlcGxhY2UgYW4gZXhpc3RpbmcgZXh0ZW5kZWQgYXR0cmlidXRlLCBvciBjcmVhdGUgYSBuZXcgZXh0ZW5kZWQKICAqIGF0dHJpYnV0ZS4gVGhlIGZsYWdzIFhBVFRSX1JFUExBQ0UgYW5kIFhBVFRSX0NSRUFURQpkaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdC5oIGIvZnMvZmF0L2ZhdC5oCmluZGV4IGQ3NWE3N2YuLmY1MDQwODkgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9mYXQuaAorKysgYi9mcy9mYXQvZmF0LmgKQEAgLTMxOSw3ICszMTksOCBAQAogCQkJc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGUsIGxvZmZfdCBpX3Bvcyk7CiBleHRlcm4gaW50IGZhdF9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIGludCBmYXRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50LAotCQkJY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKmZzX2Rpcl9pbm9kZV9vcHMsIGludCBpc3ZmYXQpOworCQkJY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKmZzX2Rpcl9pbm9kZV9vcHMsCisJCQlpbnQgaXN2ZmF0LCB2b2lkICgqc2V0dXApKHN0cnVjdCBzdXBlcl9ibG9jayAqKSk7CiAKIGV4dGVybiBpbnQgZmF0X2ZsdXNoX2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmkxLAogCQkgICAgICAgICAgICBzdHJ1Y3QgaW5vZGUgKmkyKTsKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9pbm9kZS5jIGIvZnMvZmF0L2lub2RlLmMKaW5kZXggMjA2MzUxYS4uODY3NTNmZSAxMDA2NDQKLS0tIGEvZnMvZmF0L2lub2RlLmMKKysrIGIvZnMvZmF0L2lub2RlLmMKQEAgLTcwMyw3ICs3MDMsNiBAQAogCQlzdHJ1Y3QgZmlkICpmaWQsIGludCBmaF9sZW4sIGludCBmaF90eXBlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwotCXN0cnVjdCBkZW50cnkgKnJlc3VsdDsKIAl1MzIgKmZoID0gZmlkLT5yYXc7CiAKIAlpZiAoZmhfbGVuIDwgNSB8fCBmaF90eXBlICE9IDMpCkBAIC03NDgsMTAgKzc0Nyw3IEBACiAJICogdGhlIGZhdF9pZ2V0IGxvb2t1cCBhZ2Fpbi4gIElmIHRoYXQgZmFpbHMsIHRoZW4gd2UgYXJlIHRvdGFsbHkgb3V0CiAJICogb2YgbHVjay4gIEJ1dCBhbGwgdGhhdCBpcyBmb3IgYW5vdGhlciBkYXkKIAkgKi8KLQlyZXN1bHQgPSBkX29idGFpbl9hbGlhcyhpbm9kZSk7Ci0JaWYgKCFJU19FUlIocmVzdWx0KSkKLQkJZF9zZXRfZF9vcChyZXN1bHQsIHNiLT5zX3Jvb3QtPmRfb3ApOwotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTsKIH0KIAogc3RhdGljIGludApAQCAtNzk5LDggKzc5NSw2IEBACiAJYnJlbHNlKGJoKTsKIAogCXBhcmVudCA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTsKLQlpZiAoIUlTX0VSUihwYXJlbnQpKQotCQlkX3NldF9kX29wKHBhcmVudCwgc2ItPnNfcm9vdC0+ZF9vcCk7CiBvdXQ6CiAJdW5sb2NrX3N1cGVyKHNiKTsKIApAQCAtMTI0NCw3ICsxMjM4LDggQEAKICAqIFJlYWQgdGhlIHN1cGVyIGJsb2NrIG9mIGFuIE1TLURPUyBGUy4KICAqLwogaW50IGZhdF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQsCi0JCSAgIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICpmc19kaXJfaW5vZGVfb3BzLCBpbnQgaXN2ZmF0KQorCQkgICBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyAqZnNfZGlyX2lub2RlX29wcywgaW50IGlzdmZhdCwKKwkJICAgdm9pZCAoKnNldHVwKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKikpCiB7CiAJc3RydWN0IGlub2RlICpyb290X2lub2RlID0gTlVMTCwgKmZhdF9pbm9kZSA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKQEAgLTEyODAsNiArMTI3NSw4IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9mYWlsOwogCisJc2V0dXAoc2IpOyAvKiBmbGF2b3VyLXNwZWNpZmljIHN0dWZmIHRoYXQgbmVlZHMgb3B0aW9ucyAqLworCiAJZXJyb3IgPSAtRUlPOwogCXNiX21pbl9ibG9ja3NpemUoc2IsIDUxMik7CiAJYmggPSBzYl9icmVhZChzYiwgMCk7CmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfbXNkb3MuYyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jCmluZGV4IDM1ZmZlNDMuLjcxMTQ5OTAgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jCisrKyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jCkBAIC0yMjcsMTEgKzIyNyw3IEBACiAJfQogb3V0OgogCXVubG9ja19zdXBlcihzYik7Ci0JZF9zZXRfZF9vcChkZW50cnksICZtc2Rvc19kZW50cnlfb3BlcmF0aW9ucyk7Ci0JZGVudHJ5ID0gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7Ci0JaWYgKGRlbnRyeSkKLQkJZF9zZXRfZF9vcChkZW50cnksICZtc2Rvc19kZW50cnlfb3BlcmF0aW9ucyk7Ci0JcmV0dXJuIGRlbnRyeTsKKwlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7CiAKIGVycm9yOgogCXVubG9ja19zdXBlcihzYik7CkBAIC02NjEsMjEgKzY1NywxNiBAQAogCS5nZXRhdHRyCT0gZmF0X2dldGF0dHIsCiB9OwogCitzdGF0aWMgdm9pZCBzZXR1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXNiLT5zX2Rfb3AgPSAmbXNkb3NfZGVudHJ5X29wZXJhdGlvbnM7CisJc2ItPnNfZmxhZ3MgfD0gTVNfTk9BVElNRTsKK30KKwogc3RhdGljIGludCBtc2Rvc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCiB7Ci0JaW50IHJlczsKLQotCWxvY2tfc3VwZXIoc2IpOwotCXJlcyA9IGZhdF9maWxsX3N1cGVyKHNiLCBkYXRhLCBzaWxlbnQsICZtc2Rvc19kaXJfaW5vZGVfb3BlcmF0aW9ucywgMCk7Ci0JaWYgKHJlcykgewotCQl1bmxvY2tfc3VwZXIoc2IpOwotCQlyZXR1cm4gcmVzOwotCX0KLQotCXNiLT5zX2ZsYWdzIHw9IE1TX05PQVRJTUU7Ci0JZF9zZXRfZF9vcChzYi0+c19yb290LCAmbXNkb3NfZGVudHJ5X29wZXJhdGlvbnMpOwotCXVubG9ja19zdXBlcihzYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhdF9maWxsX3N1cGVyKHNiLCBkYXRhLCBzaWxlbnQsICZtc2Rvc19kaXJfaW5vZGVfb3BlcmF0aW9ucywKKwkJCSAgICAgMCwgc2V0dXApOwogfQogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbXNkb3NfbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuYwppbmRleCBlM2ZmYzVlLi5mODhmNzUyIDEwMDY0NAotLS0gYS9mcy9mYXQvbmFtZWlfdmZhdC5jCisrKyBiL2ZzL2ZhdC9uYW1laV92ZmF0LmMKQEAgLTc3MiwxMyArNzcyLDEwIEBACiAKIG91dDoKIAl1bmxvY2tfc3VwZXIoc2IpOwotCWRfc2V0X2Rfb3AoZGVudHJ5LCBzYi0+c19yb290LT5kX29wKTsKIAlkZW50cnktPmRfdGltZSA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfdmVyc2lvbjsKIAlkZW50cnkgPSBkX3NwbGljZV9hbGlhcyhpbm9kZSwgZGVudHJ5KTsKLQlpZiAoZGVudHJ5KSB7Ci0JCWRfc2V0X2Rfb3AoZGVudHJ5LCBzYi0+c19yb290LT5kX29wKTsKKwlpZiAoZGVudHJ5KQogCQlkZW50cnktPmRfdGltZSA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfdmVyc2lvbjsKLQl9CiAJcmV0dXJuIGRlbnRyeTsKIAogZXJyb3I6CkBAIC0xMDY2LDI0ICsxMDYzLDE4IEBACiAJLmdldGF0dHIJPSBmYXRfZ2V0YXR0ciwKIH07CiAKK3N0YXRpYyB2b2lkIHNldHVwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaWYgKE1TRE9TX1NCKHNiKS0+b3B0aW9ucy5uYW1lX2NoZWNrICE9ICdzJykKKwkJc2ItPnNfZF9vcCA9ICZ2ZmF0X2NpX2RlbnRyeV9vcHM7CisJZWxzZQorCQlzYi0+c19kX29wID0gJnZmYXRfZGVudHJ5X29wczsKK30KKwogc3RhdGljIGludCB2ZmF0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKIHsKLQlpbnQgcmVzOwotCi0JbG9ja19zdXBlcihzYik7Ci0JcmVzID0gZmF0X2ZpbGxfc3VwZXIoc2IsIGRhdGEsIHNpbGVudCwgJnZmYXRfZGlyX2lub2RlX29wZXJhdGlvbnMsIDEpOwotCWlmIChyZXMpIHsKLQkJdW5sb2NrX3N1cGVyKHNiKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlpZiAoTVNET1NfU0Ioc2IpLT5vcHRpb25zLm5hbWVfY2hlY2sgIT0gJ3MnKQotCQlkX3NldF9kX29wKHNiLT5zX3Jvb3QsICZ2ZmF0X2NpX2RlbnRyeV9vcHMpOwotCWVsc2UKLQkJZF9zZXRfZF9vcChzYi0+c19yb290LCAmdmZhdF9kZW50cnlfb3BzKTsKLQotCXVubG9ja19zdXBlcihzYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhdF9maWxsX3N1cGVyKHNiLCBkYXRhLCBzaWxlbnQsICZ2ZmF0X2Rpcl9pbm9kZV9vcGVyYXRpb25zLAorCQkJICAgICAxLCBzZXR1cCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp2ZmF0X21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLApkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmMKaW5kZXggMDQyYWY3My4uYmZlZDg0NCAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYworKysgYi9mcy9mdXNlL2Rpci5jCkBAIC0zNTAsNyArMzUwLDYgQEAKIAl9CiAKIAllbnRyeSA9IG5ld2VudCA/IG5ld2VudCA6IGVudHJ5OwotCWRfc2V0X2Rfb3AoZW50cnksICZmdXNlX2RlbnRyeV9vcGVyYXRpb25zKTsKIAlpZiAob3V0YXJnX3ZhbGlkKQogCQlmdXNlX2NoYW5nZV9lbnRyeV90aW1lb3V0KGVudHJ5LCAmb3V0YXJnKTsKIAllbHNlCmRpZmYgLS1naXQgYS9mcy9mdXNlL2lub2RlLmMgYi9mcy9mdXNlL2lub2RlLmMKaW5kZXggZjYyYjMyYy4uOWUzZjY4YyAxMDA2NDQKLS0tIGEvZnMvZnVzZS9pbm9kZS5jCisrKyBiL2ZzL2Z1c2UvaW5vZGUuYwpAQCAtNjE3LDEwICs2MTcsOCBAQAogCQlnb3RvIG91dF9pcHV0OwogCiAJZW50cnkgPSBkX29idGFpbl9hbGlhcyhpbm9kZSk7Ci0JaWYgKCFJU19FUlIoZW50cnkpICYmIGdldF9ub2RlX2lkKGlub2RlKSAhPSBGVVNFX1JPT1RfSUQpIHsKLQkJZF9zZXRfZF9vcChlbnRyeSwgJmZ1c2VfZGVudHJ5X29wZXJhdGlvbnMpOworCWlmICghSVNfRVJSKGVudHJ5KSAmJiBnZXRfbm9kZV9pZChpbm9kZSkgIT0gRlVTRV9ST09UX0lEKQogCQlmdXNlX2ludmFsaWRhdGVfZW50cnlfY2FjaGUoZW50cnkpOwotCX0KIAogCXJldHVybiBlbnRyeTsKIApAQCAtNzE5LDEwICs3MTcsOCBAQAogCX0KIAogCXBhcmVudCA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTsKLQlpZiAoIUlTX0VSUihwYXJlbnQpICYmIGdldF9ub2RlX2lkKGlub2RlKSAhPSBGVVNFX1JPT1RfSUQpIHsKLQkJZF9zZXRfZF9vcChwYXJlbnQsICZmdXNlX2RlbnRyeV9vcGVyYXRpb25zKTsKKwlpZiAoIUlTX0VSUihwYXJlbnQpICYmIGdldF9ub2RlX2lkKGlub2RlKSAhPSBGVVNFX1JPT1RfSUQpCiAJCWZ1c2VfaW52YWxpZGF0ZV9lbnRyeV9jYWNoZShwYXJlbnQpOwotCX0KIAogCXJldHVybiBwYXJlbnQ7CiB9CkBAIC05ODksNiArOTg1LDggQEAKIAkJaXB1dChyb290KTsKIAkJZ290byBlcnJfcHV0X2Nvbm47CiAJfQorCS8qIG9ubHkgbm93IC0gd2Ugd2FudCByb290IGRlbnRyeSB3aXRoIE5VTEwgLT5kX29wICovCisJc2ItPnNfZF9vcCA9ICZmdXNlX2RlbnRyeV9vcGVyYXRpb25zOwogCiAJaW5pdF9yZXEgPSBmdXNlX3JlcXVlc3RfYWxsb2MoKTsKIAlpZiAoIWluaXRfcmVxKQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9leHBvcnQuYyBiL2ZzL2dmczIvZXhwb3J0LmMKaW5kZXggOTcwMTJlYy4uOTAyM2RiOCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9leHBvcnQuYworKysgYi9mcy9nZnMyL2V4cG9ydC5jCkBAIC0xMjYsMTIgKzEyNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpnZnMyX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCi0JZGVudHJ5ID0gZF9vYnRhaW5fYWxpYXMoZ2ZzMl9sb29rdXBpKGNoaWxkLT5kX2lub2RlLCAmZ2ZzMl9xZG90ZG90LCAxKSk7Ci0JaWYgKCFJU19FUlIoZGVudHJ5KSkKLQkJZF9zZXRfZF9vcChkZW50cnksICZnZnMyX2RvcHMpOwotCXJldHVybiBkZW50cnk7CisJcmV0dXJuIGRfb2J0YWluX2FsaWFzKGdmczJfbG9va3VwaShjaGlsZC0+ZF9pbm9kZSwgJmdmczJfcWRvdGRvdCwgMSkpOwogfQogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2ZzMl9nZXRfZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCkBAIC0xMzksNyArMTM0LDYgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHNiLT5zX2ZzX2luZm87CiAJc3RydWN0IGlub2RlICppbm9kZTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKIAlpbm9kZSA9IGdmczJfaWxvb2t1cChzYiwgaW51bS0+bm9fYWRkcik7CiAJaWYgKGlub2RlKSB7CkBAIC0xNTYsMTAgKzE1MCw3IEBACiAJCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7CiAKIG91dF9pbm9kZToKLQlkZW50cnkgPSBkX29idGFpbl9hbGlhcyhpbm9kZSk7Ci0JaWYgKCFJU19FUlIoZGVudHJ5KSkKLQkJZF9zZXRfZF9vcChkZW50cnksICZnZnMyX2RvcHMpOwotCXJldHVybiBkZW50cnk7CisJcmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKmdmczJfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCwKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKaW5kZXggMmFlYWJkNC4uNjkzZjQ0NyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKQEAgLTQ0MCw3ICs0NDAsNiBAQAogCQlpcHV0KGlub2RlKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWRfc2V0X2Rfb3AoZGVudHJ5LCAmZ2ZzMl9kb3BzKTsKIAkqZHB0ciA9IGRlbnRyeTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExMDYsNiArMTEwNSw3IEBACiAKIAlzYi0+c19tYWdpYyA9IEdGUzJfTUFHSUM7CiAJc2ItPnNfb3AgPSAmZ2ZzMl9zdXBlcl9vcHM7CisJc2ItPnNfZF9vcCA9ICZnZnMyX2RvcHM7CiAJc2ItPnNfZXhwb3J0X29wID0gJmdmczJfZXhwb3J0X29wczsKIAlzYi0+c194YXR0ciA9IGdmczJfeGF0dHJfaGFuZGxlcnM7CiAJc2ItPnNfcWNvcCA9ICZnZnMyX3F1b3RhY3RsX29wczsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2lub2RlLmMgYi9mcy9nZnMyL29wc19pbm9kZS5jCmluZGV4IDE1MDFkYjQuLjA0MGI1YTIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfaW5vZGUuYwpAQCAtMTA2LDggKzEwNiw2IEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAKLQlkX3NldF9kX29wKGRlbnRyeSwgJmdmczJfZG9wcyk7Ci0KIAlpbm9kZSA9IGdmczJfbG9va3VwaShkaXIsICZkZW50cnktPmRfbmFtZSwgMCk7CiAJaWYgKGlub2RlICYmIElTX0VSUihpbm9kZSkpCiAJCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7CkBAIC0xNDI3LDYgKzE0MjUsMTAgQEAKIAlsb2ZmX3QgbmV4dCA9IChvZmZzZXQgKyBsZW4gLSAxKSA+PiBzZHAtPnNkX3NiLnNiX2JzaXplX3NoaWZ0OwogCW5leHQgPSAobmV4dCArIDEpIDw8IHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQ7CiAKKwkvKiBXZSBvbmx5IHN1cHBvcnQgdGhlIEZBTExPQ19GTF9LRUVQX1NJWkUgbW9kZSAqLworCWlmIChtb2RlICYmIChtb2RlICE9IEZBTExPQ19GTF9LRUVQX1NJWkUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlvZmZzZXQgPSAob2Zmc2V0ID4+IHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQpIDw8CiAJCSBzZHAtPnNkX3NiLnNiX2JzaXplX3NoaWZ0OwogCmRpZmYgLS1naXQgYS9mcy9oZnMvZGlyLmMgYi9mcy9oZnMvZGlyLmMKaW5kZXggZWE0YWVmZS4uYWZhNjZhYSAxMDA2NDQKLS0tIGEvZnMvaGZzL2Rpci5jCisrKyBiL2ZzL2hmcy9kaXIuYwpAQCAtMjUsOCArMjUsNiBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCWludCByZXM7CiAKLQlkX3NldF9kX29wKGRlbnRyeSwgJmhmc19kZW50cnlfb3BlcmF0aW9ucyk7Ci0KIAloZnNfZmluZF9pbml0KEhGU19TQihkaXItPmlfc2IpLT5jYXRfdHJlZSwgJmZkKTsKIAloZnNfY2F0X2J1aWxkX2tleShkaXItPmlfc2IsIGZkLnNlYXJjaF9rZXksIGRpci0+aV9pbm8sICZkZW50cnktPmRfbmFtZSk7CiAJcmVzID0gaGZzX2JyZWNfcmVhZCgmZmQsICZyZWMsIHNpemVvZihyZWMpKTsKZGlmZiAtLWdpdCBhL2ZzL2hmcy9zdXBlci5jIGIvZnMvaGZzL3N1cGVyLmMKaW5kZXggMGJlZjYyYS4uMWI1NWY3MCAxMDA2NDQKLS0tIGEvZnMvaGZzL3N1cGVyLmMKKysrIGIvZnMvaGZzL3N1cGVyLmMKQEAgLTQyOSwxMyArNDI5LDEyIEBACiAJaWYgKCFyb290X2lub2RlKQogCQlnb3RvIGJhaWxfbm9fcm9vdDsKIAorCXNiLT5zX2Rfb3AgPSAmaGZzX2RlbnRyeV9vcGVyYXRpb25zOwogCXJlcyA9IC1FTk9NRU07CiAJc2ItPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChyb290X2lub2RlKTsKIAlpZiAoIXNiLT5zX3Jvb3QpCiAJCWdvdG8gYmFpbF9pcHV0OwogCi0JZF9zZXRfZF9vcChzYi0+c19yb290LCAmaGZzX2RlbnRyeV9vcGVyYXRpb25zKTsKLQogCS8qIGV2ZXJ5dGhpbmcncyBva2F5ICovCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZGlyLmMgYi9mcy9oZnNwbHVzL2Rpci5jCmluZGV4IGY4OTZkYzg0Li40ZGY1MDU5IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2Rpci5jCisrKyBiL2ZzL2hmc3BsdXMvZGlyLmMKQEAgLTM3LDcgKzM3LDYgQEAKIAogCXNiID0gZGlyLT5pX3NiOwogCi0JZF9zZXRfZF9vcChkZW50cnksICZoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zKTsKIAlkZW50cnktPmRfZnNkYXRhID0gTlVMTDsKIAloZnNfZmluZF9pbml0KEhGU1BMVVNfU0Ioc2IpLT5jYXRfdHJlZSwgJmZkKTsKIAloZnNwbHVzX2NhdF9idWlsZF9rZXkoc2IsIGZkLnNlYXJjaF9rZXksIGRpci0+aV9pbm8sICZkZW50cnktPmRfbmFtZSk7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3N1cGVyLmMgYi9mcy9oZnNwbHVzL3N1cGVyLmMKaW5kZXggNmVlNmFkMi4uOWEzYjQ3OSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9zdXBlci5jCisrKyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwpAQCAtNDQ0LDEzICs0NDQsMTMgQEAKIAkJZXJyID0gUFRSX0VSUihyb290KTsKIAkJZ290byBjbGVhbnVwOwogCX0KKwlzYi0+c19kX29wID0gJmhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnM7CiAJc2ItPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChyb290KTsKIAlpZiAoIXNiLT5zX3Jvb3QpIHsKIAkJaXB1dChyb290KTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBjbGVhbnVwOwogCX0KLQlkX3NldF9kX29wKHNiLT5zX3Jvb3QsICZoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zKTsKIAogCXN0ci5sZW4gPSBzaXplb2YoSEZTUF9ISURERU5ESVJfTkFNRSkgLSAxOwogCXN0ci5uYW1lID0gSEZTUF9ISURERU5ESVJfTkFNRTsKZGlmZiAtLWdpdCBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKaW5kZXggZDMyNDRkOS4uMjYzOGM4MzRlIDEwMDY0NAotLS0gYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYworKysgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYwpAQCAtNjEyLDcgKzYxMiw2IEBACiAJCWdvdG8gb3V0X3B1dDsKIAogCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwotCWRfc2V0X2Rfb3AoZGVudHJ5LCAmaG9zdGZzX2RlbnRyeV9vcHMpOwogCXJldHVybiBOVUxMOwogCiAgb3V0X3B1dDoKQEAgLTkyMiw2ICs5MjEsNyBAQAogCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gMTA7CiAJc2ItPnNfbWFnaWMgPSBIT1NURlNfU1VQRVJfTUFHSUM7CiAJc2ItPnNfb3AgPSAmaG9zdGZzX3Nib3BzOworCXNiLT5zX2Rfb3AgPSAmaG9zdGZzX2RlbnRyeV9vcHM7CiAJc2ItPnNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOwogCiAJLyogTlVMTCBpcyBwcmludGVkIGFzIDxOVUxMPiBieSBzcHJpbnRmOiBhdm9pZCB0aGF0LiAqLwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9kZW50cnkuYyBiL2ZzL2hwZnMvZGVudHJ5LmMKaW5kZXggMzJjMTNhOS4uMDVkNDgxNiAxMDA2NDQKLS0tIGEvZnMvaHBmcy9kZW50cnkuYworKysgYi9mcy9ocGZzL2RlbnRyeS5jCkBAIC01OCwxMiArNTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhwZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaHBmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9oYXNoCQk9IGhwZnNfaGFzaF9kZW50cnksCiAJLmRfY29tcGFyZQk9IGhwZnNfY29tcGFyZV9kZW50cnksCiB9OwotCi12b2lkIGhwZnNfc2V0X2RlbnRyeV9vcGVyYXRpb25zKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlkX3NldF9kX29wKGRlbnRyeSwgJmhwZnNfZGVudHJ5X29wZXJhdGlvbnMpOwotfQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9kaXIuYyBiL2ZzL2hwZnMvZGlyLmMKaW5kZXggMjMzODEzMC4uZDMyZjYzYSAxMDA2NDQKLS0tIGEvZnMvaHBmcy9kaXIuYworKysgYi9mcy9ocGZzL2Rpci5jCkBAIC0yOTgsNyArMjk4LDYgQEAKIAogCWVuZDoKIAllbmRfYWRkOgotCWhwZnNfc2V0X2RlbnRyeV9vcGVyYXRpb25zKGRlbnRyeSk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCWRfYWRkKGRlbnRyeSwgcmVzdWx0KTsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvaHBmc19mbi5oIGIvZnMvaHBmcy9ocGZzX2ZuLmgKaW5kZXggMmZlZTE3ZC4uMWM0M2RiZSAxMDA2NDQKLS0tIGEvZnMvaHBmcy9ocGZzX2ZuLmgKKysrIGIvZnMvaHBmcy9ocGZzX2ZuLmgKQEAgLTIzMyw3ICsyMzMsNyBAQAogCiAvKiBkZW50cnkuYyAqLwogCi12b2lkIGhwZnNfc2V0X2RlbnRyeV9vcGVyYXRpb25zKHN0cnVjdCBkZW50cnkgKik7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhwZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAKIC8qIGRpci5jICovCiAKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvc3VwZXIuYyBiL2ZzL2hwZnMvc3VwZXIuYwppbmRleCA0OTkzNWJhLi5iMzA0MjZiIDEwMDY0NAotLS0gYS9mcy9ocGZzL3N1cGVyLmMKKysrIGIvZnMvaHBmcy9zdXBlci5jCkBAIC01NTAsNiArNTUwLDcgQEAKIAkvKiBGaWxsIHN1cGVyYmxvY2sgc3R1ZmYgKi8KIAlzLT5zX21hZ2ljID0gSFBGU19TVVBFUl9NQUdJQzsKIAlzLT5zX29wID0gJmhwZnNfc29wczsKKwlzLT5zX2Rfb3AgPSAmaHBmc19kZW50cnlfb3BlcmF0aW9uczsKIAogCXNiaS0+c2Jfcm9vdCA9IHN1cGVyYmxvY2stPnJvb3Q7CiAJc2JpLT5zYl9mc19zaXplID0gc3VwZXJibG9jay0+bl9zZWN0b3JzOwpAQCAtNjUxLDcgKzY1Miw2IEBACiAJCWlwdXQocm9vdCk7CiAJCWdvdG8gYmFpbDA7CiAJfQotCWhwZnNfc2V0X2RlbnRyeV9vcGVyYXRpb25zKHMtPnNfcm9vdCk7CiAKIAkvKgogCSAqIGZpbmQgdGhlIHJvb3QgZGlyZWN0b3J5J3MgLiBwb2ludGVyICYgZmluaXNoIGZpbGxpbmcgaW4gdGhlIGlub2RlCmRpZmYgLS1naXQgYS9mcy9pc29mcy9pbm9kZS5jIGIvZnMvaXNvZnMvaW5vZGUuYwppbmRleCA4NDRhNzkwLi5hMGYzODMzIDEwMDY0NAotLS0gYS9mcy9pc29mcy9pbm9kZS5jCisrKyBiL2ZzL2lzb2ZzL2lub2RlLmMKQEAgLTkzOSwxNyArOTM5LDE4IEBACiAJCWdvdG8gb3V0X2lwdXQ7CiAJfQogCi0JLyogZ2V0IHRoZSByb290IGRlbnRyeSAqLwotCXMtPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChpbm9kZSk7Ci0JaWYgKCEocy0+c19yb290KSkKLQkJZ290byBvdXRfbm9fcm9vdDsKLQogCXRhYmxlID0gMDsKIAlpZiAoam9saWV0X2xldmVsKQogCQl0YWJsZSArPSAyOwogCWlmIChvcHQuY2hlY2sgPT0gJ3InKQogCQl0YWJsZSsrOwotCWRfc2V0X2Rfb3Aocy0+c19yb290LCAmaXNvZnNfZGVudHJ5X29wc1t0YWJsZV0pOworCisJcy0+c19kX29wID0gJmlzb2ZzX2RlbnRyeV9vcHNbdGFibGVdOworCisJLyogZ2V0IHRoZSByb290IGRlbnRyeSAqLworCXMtPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChpbm9kZSk7CisJaWYgKCEocy0+c19yb290KSkKKwkJZ290byBvdXRfbm9fcm9vdDsKIAogCWtmcmVlKG9wdC5pb2NoYXJzZXQpOwogCmRpZmYgLS1naXQgYS9mcy9pc29mcy9uYW1laS5jIGIvZnMvaXNvZnMvbmFtZWkuYwppbmRleCA2NzlhODQ5Li40ZmIzZTgwIDEwMDY0NAotLS0gYS9mcy9pc29mcy9uYW1laS5jCisrKyBiL2ZzL2lzb2ZzL25hbWVpLmMKQEAgLTE3Miw4ICsxNzIsNiBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQlkX3NldF9kX29wKGRlbnRyeSwgZGlyLT5pX3NiLT5zX3Jvb3QtPmRfb3ApOwotCiAJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX1VTRVIpOwogCWlmICghcGFnZSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CmRpZmYgLS1naXQgYS9mcy9qYmQvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZC90cmFuc2FjdGlvbi5jCmluZGV4IDg0NmEzZjMuLjViMmU0YzMgMTAwNjQ0Ci0tLSBhL2ZzL2piZC90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2piZC90cmFuc2FjdGlvbi5jCkBAIC0yMDcsNyArMjA3LDcgQEAKIAkgKiB0aGUgY29tbWl0dGluZyB0cmFuc2FjdGlvbi4gIFJlYWxseSwgd2Ugb25seSBuZWVkIHRvIGdpdmUgaXQKIAkgKiBjb21taXR0aW5nX3RyYW5zYWN0aW9uLT50X291dHN0YW5kaW5nX2NyZWRpdHMgcGx1cyAiZW5vdWdoIiBmb3IKIAkgKiB0aGUgbG9nIGNvbnRyb2wgYmxvY2tzLgotCSAqIEFsc28sIHRoaXMgdGVzdCBpcyBpbmNvbnNpdGVudCB3aXRoIHRoZSBtYXRjaGluZyBvbmUgaW4KKwkgKiBBbHNvLCB0aGlzIHRlc3QgaXMgaW5jb25zaXN0ZW50IHdpdGggdGhlIG1hdGNoaW5nIG9uZSBpbgogCSAqIGpvdXJuYWxfZXh0ZW5kKCkuCiAJICovCiAJaWYgKF9fbG9nX3NwYWNlX2xlZnQoam91cm5hbCkgPCBqYmRfc3BhY2VfbmVlZGVkKGpvdXJuYWwpKSB7CmRpZmYgLS1naXQgYS9mcy9qYmQyL2pvdXJuYWwuYyBiL2ZzL2piZDIvam91cm5hbC5jCmluZGV4IGY4MzdiYTkuLjllNDY4NjkgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvam91cm5hbC5jCisrKyBiL2ZzL2piZDIvam91cm5hbC5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9qYmQyLmg+CkBAIC05Myw2ICs5NCw3IEBACiBFWFBPUlRfU1lNQk9MKGpiZDJfam91cm5hbF9pbml0X2piZF9pbm9kZSk7CiBFWFBPUlRfU1lNQk9MKGpiZDJfam91cm5hbF9yZWxlYXNlX2piZF9pbm9kZSk7CiBFWFBPUlRfU1lNQk9MKGpiZDJfam91cm5hbF9iZWdpbl9vcmRlcmVkX3RydW5jYXRlKTsKK0VYUE9SVF9TWU1CT0woamJkMl9pbm9kZV9jYWNoZSk7CiAKIHN0YXRpYyBpbnQgam91cm5hbF9jb252ZXJ0X3N1cGVyYmxvY2tfdjEoam91cm5hbF90ICosIGpvdXJuYWxfc3VwZXJibG9ja190ICopOwogc3RhdGljIHZvaWQgX19qb3VybmFsX2Fib3J0X3NvZnQgKGpvdXJuYWxfdCAqam91cm5hbCwgaW50IGVycm5vKTsKQEAgLTgyNyw3ICs4MjksNyBAQAogCiAJam91cm5hbCA9IGt6YWxsb2Moc2l6ZW9mKCpqb3VybmFsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFqb3VybmFsKQotCQlnb3RvIGZhaWw7CisJCXJldHVybiBOVUxMOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmam91cm5hbC0+al93YWl0X3RyYW5zYWN0aW9uX2xvY2tlZCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmam91cm5hbC0+al93YWl0X2xvZ3NwYWNlKTsKQEAgLTg1MiwxNCArODU0LDEyIEBACiAJZXJyID0gamJkMl9qb3VybmFsX2luaXRfcmV2b2tlKGpvdXJuYWwsIEpPVVJOQUxfUkVWT0tFX0RFRkFVTFRfSEFTSCk7CiAJaWYgKGVycikgewogCQlrZnJlZShqb3VybmFsKTsKLQkJZ290byBmYWlsOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmam91cm5hbC0+al9oaXN0b3J5X2xvY2spOwogCiAJcmV0dXJuIGpvdXJuYWw7Ci1mYWlsOgotCXJldHVybiBOVUxMOwogfQogCiAvKiBqYmQyX2pvdXJuYWxfaW5pdF9kZXYgYW5kIGpiZDJfam91cm5hbF9pbml0X2lub2RlOgpAQCAtMTk4Miw3ICsxOTgyLDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgam91cm5hbF9oZWFkICpqb3VybmFsX2FsbG9jX2pvdXJuYWxfaGVhZCh2b2lkKQogewogCXN0cnVjdCBqb3VybmFsX2hlYWQgKnJldDsKLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X3dhcm5pbmc7CiAKICNpZmRlZiBDT05GSUdfSkJEMl9ERUJVRwogCWF0b21pY19pbmMoJm5yX2pvdXJuYWxfaGVhZHMpOwpAQCAtMTk5MCwxMSArMTk4OSw3IEBACiAJcmV0ID0ga21lbV9jYWNoZV9hbGxvYyhqYmQyX2pvdXJuYWxfaGVhZF9jYWNoZSwgR0ZQX05PRlMpOwogCWlmICghcmV0KSB7CiAJCWpiZF9kZWJ1ZygxLCAib3V0IG9mIG1lbW9yeSBmb3Igam91cm5hbF9oZWFkXG4iKTsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbGFzdF93YXJuaW5nICsgNSpIWikpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiRU5PTUVNIGluICVzLCByZXRyeWluZy5cbiIsCi0JCQkgICAgICAgX19mdW5jX18pOwotCQkJbGFzdF93YXJuaW5nID0gamlmZmllczsKLQkJfQorCQlwcl9ub3RpY2VfcmF0ZWxpbWl0ZWQoIkVOT01FTSBpbiAlcywgcmV0cnlpbmcuXG4iLCBfX2Z1bmNfXyk7CiAJCXdoaWxlICghcmV0KSB7CiAJCQl5aWVsZCgpOwogCQkJcmV0ID0ga21lbV9jYWNoZV9hbGxvYyhqYmQyX2pvdXJuYWxfaGVhZF9jYWNoZSwgR0ZQX05PRlMpOwpAQCAtMjI5MiwxNyArMjI4NywxOSBAQAogCiAjZW5kaWYKIAotc3RydWN0IGttZW1fY2FjaGUgKmpiZDJfaGFuZGxlX2NhY2hlOworc3RydWN0IGttZW1fY2FjaGUgKmpiZDJfaGFuZGxlX2NhY2hlLCAqamJkMl9pbm9kZV9jYWNoZTsKIAogc3RhdGljIGludCBfX2luaXQgam91cm5hbF9pbml0X2hhbmRsZV9jYWNoZSh2b2lkKQogewotCWpiZDJfaGFuZGxlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImpiZDJfam91cm5hbF9oYW5kbGUiLAotCQkJCXNpemVvZihoYW5kbGVfdCksCi0JCQkJMCwJCS8qIG9mZnNldCAqLwotCQkJCVNMQUJfVEVNUE9SQVJZLAkvKiBmbGFncyAqLwotCQkJCU5VTEwpOwkJLyogY3RvciAqLworCWpiZDJfaGFuZGxlX2NhY2hlID0gS01FTV9DQUNIRShqYmQyX2pvdXJuYWxfaGFuZGxlLCBTTEFCX1RFTVBPUkFSWSk7CiAJaWYgKGpiZDJfaGFuZGxlX2NhY2hlID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIkpCRDogZmFpbGVkIHRvIGNyZWF0ZSBoYW5kbGUgY2FjaGVcbiIpOworCQlwcmludGsoS0VSTl9FTUVSRyAiSkJEMjogZmFpbGVkIHRvIGNyZWF0ZSBoYW5kbGUgY2FjaGVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJamJkMl9pbm9kZV9jYWNoZSA9IEtNRU1fQ0FDSEUoamJkMl9pbm9kZSwgMCk7CisJaWYgKGpiZDJfaW5vZGVfY2FjaGUgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FTUVSRyAiSkJEMjogZmFpbGVkIHRvIGNyZWF0ZSBpbm9kZSBjYWNoZVxuIik7CisJCWttZW1fY2FjaGVfZGVzdHJveShqYmQyX2hhbmRsZV9jYWNoZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlyZXR1cm4gMDsKQEAgLTIzMTIsNiArMjMwOSw5IEBACiB7CiAJaWYgKGpiZDJfaGFuZGxlX2NhY2hlKQogCQlrbWVtX2NhY2hlX2Rlc3Ryb3koamJkMl9oYW5kbGVfY2FjaGUpOworCWlmIChqYmQyX2lub2RlX2NhY2hlKQorCQlrbWVtX2NhY2hlX2Rlc3Ryb3koamJkMl9pbm9kZV9jYWNoZSk7CisKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2piZDIvcmVjb3ZlcnkuYyBiL2ZzL2piZDIvcmVjb3ZlcnkuYwppbmRleCAyYmM0ZDVmLi4xY2FkODY5IDEwMDY0NAotLS0gYS9mcy9qYmQyL3JlY292ZXJ5LmMKKysrIGIvZnMvamJkMi9yZWNvdmVyeS5jCkBAIC0yOTksMTAgKzI5OSwxMCBAQAogI2lmZGVmIENPTkZJR19KQkQyX0RFQlVHCiAJCWludCBkcm9wcGVkID0gaW5mby5lbmRfdHJhbnNhY3Rpb24gLSAKIAkJCWJlMzJfdG9fY3B1KGpvdXJuYWwtPmpfc3VwZXJibG9jay0+c19zZXF1ZW5jZSk7Ci0jZW5kaWYKIAkJamJkX2RlYnVnKDEsCiAJCQkgICJKQkQ6IGlnbm9yaW5nICVkIHRyYW5zYWN0aW9uJXMgZnJvbSB0aGUgam91cm5hbC5cbiIsCiAJCQkgIGRyb3BwZWQsIChkcm9wcGVkID09IDEpID8gIiIgOiAicyIpOworI2VuZGlmCiAJCWpvdXJuYWwtPmpfdHJhbnNhY3Rpb25fc2VxdWVuY2UgPSArK2luZm8uZW5kX3RyYW5zYWN0aW9uOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvamJkMi90cmFuc2FjdGlvbi5jIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCmluZGV4IDZiZjBhMjQuLmZhYWQyYmQgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYworKysgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKQEAgLTI1MSw3ICsyNTEsNyBAQAogCSAqIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uLiAgUmVhbGx5LCB3ZSBvbmx5IG5lZWQgdG8gZ2l2ZSBpdAogCSAqIGNvbW1pdHRpbmdfdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0cyBwbHVzICJlbm91Z2giIGZvcgogCSAqIHRoZSBsb2cgY29udHJvbCBibG9ja3MuCi0JICogQWxzbywgdGhpcyB0ZXN0IGlzIGluY29uc2l0ZW50IHdpdGggdGhlIG1hdGNoaW5nIG9uZSBpbgorCSAqIEFsc28sIHRoaXMgdGVzdCBpcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgbWF0Y2hpbmcgb25lIGluCiAJICogamJkMl9qb3VybmFsX2V4dGVuZCgpLgogCSAqLwogCWlmIChfX2piZDJfbG9nX3NwYWNlX2xlZnQoam91cm5hbCkgPCBqYmRfc3BhY2VfbmVlZGVkKGpvdXJuYWwpKSB7CkBAIC0zNDAsOSArMzQwLDcgQEAKIAkJamJkMl9mcmVlX2hhbmRsZShoYW5kbGUpOwogCQljdXJyZW50LT5qb3VybmFsX2luZm8gPSBOVUxMOwogCQloYW5kbGUgPSBFUlJfUFRSKGVycik7Ci0JCWdvdG8gb3V0OwogCX0KLW91dDoKIAlyZXR1cm4gaGFuZGxlOwogfQogRVhQT1JUX1NZTUJPTChqYmQyX19qb3VybmFsX3N0YXJ0KTsKQEAgLTU4OSw3ICs1ODcsNyBAQAogCXRyYW5zYWN0aW9uID0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uOwogCWpvdXJuYWwgPSB0cmFuc2FjdGlvbi0+dF9qb3VybmFsOwogCi0JamJkX2RlYnVnKDUsICJidWZmZXJfaGVhZCAlcCwgZm9yY2VfY29weSAlZFxuIiwgamgsIGZvcmNlX2NvcHkpOworCWpiZF9kZWJ1Zyg1LCAiam91cm5hbF9oZWFkICVwLCBmb3JjZV9jb3B5ICVkXG4iLCBqaCwgZm9yY2VfY29weSk7CiAKIAlKQlVGRkVSX1RSQUNFKGpoLCAiZW50cnkiKTsKIHJlcGVhdDoKQEAgLTc3NCw3ICs3NzIsNyBAQAogCQlKX0VYUEVDVF9KSChqaCwgYnVmZmVyX3VwdG9kYXRlKGpoMmJoKGpoKSksCiAJCQkgICAgIlBvc3NpYmxlIElPIGZhaWx1cmUuXG4iKTsKIAkJcGFnZSA9IGpoMmJoKGpoKS0+Yl9wYWdlOwotCQlvZmZzZXQgPSAoKHVuc2lnbmVkIGxvbmcpIGpoMmJoKGpoKS0+Yl9kYXRhKSAmIH5QQUdFX01BU0s7CisJCW9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGpoMmJoKGpoKS0+Yl9kYXRhKTsKIAkJc291cmNlID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwogCQkvKiBGaXJlIGRhdGEgZnJvemVuIHRyaWdnZXIganVzdCBiZWZvcmUgd2UgY29weSB0aGUgZGF0YSAqLwogCQlqYmQyX2J1ZmZlcl9mcm96ZW5fdHJpZ2dlcihqaCwgc291cmNlICsgb2Zmc2V0LApkaWZmIC0tZ2l0IGEvZnMvamZzL25hbWVpLmMgYi9mcy9qZnMvbmFtZWkuYwppbmRleCA0NDE0ZTNhLi44MWVhZDg1IDEwMDY0NAotLS0gYS9mcy9qZnMvbmFtZWkuYworKysgYi9mcy9qZnMvbmFtZWkuYwpAQCAtMTQ2NSw5ICsxNDY1LDYgQEAKIAogCWpmc19pbmZvKCJqZnNfbG9va3VwOiBuYW1lID0gJXMiLCBuYW1lKTsKIAotCWlmIChKRlNfU0JJKGRpcC0+aV9zYiktPm1udGZsYWcgJiBKRlNfT1MyKQotCQlkX3NldF9kX29wKGRlbnRyeSwgJmpmc19jaV9kZW50cnlfb3BlcmF0aW9ucyk7Ci0KIAlpZiAoKG5hbWVbMF0gPT0gJy4nKSAmJiAobGVuID09IDEpKQogCQlpbnVtID0gZGlwLT5pX2lubzsKIAllbHNlIGlmIChzdHJjbXAobmFtZSwgIi4uIikgPT0gMCkKQEAgLTE0OTIsMTIgKzE0ODksNyBAQAogCQlyZXR1cm4gRVJSX0NBU1QoaXApOwogCX0KIAotCWRlbnRyeSA9IGRfc3BsaWNlX2FsaWFzKGlwLCBkZW50cnkpOwotCi0JaWYgKGRlbnRyeSAmJiAoSkZTX1NCSShkaXAtPmlfc2IpLT5tbnRmbGFnICYgSkZTX09TMikpCi0JCWRfc2V0X2Rfb3AoZGVudHJ5LCAmamZzX2NpX2RlbnRyeV9vcGVyYXRpb25zKTsKLQotCXJldHVybiBkZW50cnk7CisJcmV0dXJuIGRfc3BsaWNlX2FsaWFzKGlwLCBkZW50cnkpOwogfQogCiBzdGF0aWMgc3RydWN0IGlub2RlICpqZnNfbmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLApkaWZmIC0tZ2l0IGEvZnMvamZzL3N1cGVyLmMgYi9mcy9qZnMvc3VwZXIuYwppbmRleCAzMTUwZDc2Li5lZWNhNDhhIDEwMDY0NAotLS0gYS9mcy9qZnMvc3VwZXIuYworKysgYi9mcy9qZnMvc3VwZXIuYwpAQCAtNTE1LDYgKzUxNSw5IEBACiAKIAlzYi0+c19tYWdpYyA9IEpGU19TVVBFUl9NQUdJQzsKIAorCWlmIChzYmktPm1udGZsYWcgJiBKRlNfT1MyKQorCQlzYi0+c19kX29wID0gJmpmc19jaV9kZW50cnlfb3BlcmF0aW9uczsKKwogCWlub2RlID0gamZzX2lnZXQoc2IsIFJPT1RfSSk7CiAJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJcmV0ID0gUFRSX0VSUihpbm9kZSk7CkBAIC01MjQsOSArNTI3LDYgQEAKIAlpZiAoIXNiLT5zX3Jvb3QpCiAJCWdvdG8gb3V0X25vX3Jvb3Q7CiAKLQlpZiAoc2JpLT5tbnRmbGFnICYgSkZTX09TMikKLQkJZF9zZXRfZF9vcChzYi0+c19yb290LCAmamZzX2NpX2RlbnRyeV9vcGVyYXRpb25zKTsKLQogCS8qIGxvZ2ljYWwgYmxvY2tzIGFyZSByZXByZXNlbnRlZCBieSA0MCBiaXRzIGluIHB4ZF90LCBldGMuICovCiAJc2ItPnNfbWF4Ynl0ZXMgPSAoKHU2NCkgc2ItPnNfYmxvY2tzaXplKSA8PCA0MDsKICNpZiBCSVRTX1BFUl9MT05HID09IDMyCmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuYwppbmRleCA4ODkzMTFlLi5jODhlYWI1IDEwMDY0NAotLS0gYS9mcy9saWJmcy5jCisrKyBiL2ZzL2xpYmZzLmMKQEAgLTIxNyw3ICsyMTcsOCBAQAogICogd2lsbCBuZXZlciBiZSBtb3VudGFibGUpCiAgKi8KIHN0cnVjdCBkZW50cnkgKm1vdW50X3BzZXVkbyhzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgY2hhciAqbmFtZSwKLQljb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyAqb3BzLCB1bnNpZ25lZCBsb25nIG1hZ2ljKQorCWNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zICpvcHMsCisJY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICpkb3BzLCB1bnNpZ25lZCBsb25nIG1hZ2ljKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IHNnZXQoZnNfdHlwZSwgTlVMTCwgc2V0X2Fub25fc3VwZXIsIE5VTEwpOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKQEAgLTI1NCw2ICsyNTUsNyBAQAogCWRlbnRyeS0+ZF9wYXJlbnQgPSBkZW50cnk7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIHJvb3QpOwogCXMtPnNfcm9vdCA9IGRlbnRyeTsKKwlzLT5zX2Rfb3AgPSBkb3BzOwogCXMtPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOwogCXJldHVybiBkZ2V0KHMtPnNfcm9vdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL01ha2VmaWxlIGIvZnMvbG9ja2QvTWFrZWZpbGUKaW5kZXggOTdmNjA3My4uY2E1OGQ2NCAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvTWFrZWZpbGUKKysrIGIvZnMvbG9ja2QvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIG9iai0kKENPTkZJR19MT0NLRCkgKz0gbG9ja2QubwogCi1sb2NrZC1vYmpzLXkgOj0gY2xudGxvY2subyBjbG50cHJvYy5vIGhvc3QubyBzdmMubyBzdmNsb2NrLm8gc3Zjc2hhcmUubyBcCi0JICAgICAgICBzdmNwcm9jLm8gc3Zjc3Vicy5vIG1vbi5vIHhkci5vIGdyYWNlLm8KLWxvY2tkLW9ianMtJChDT05GSUdfTE9DS0RfVjQpICs9IHhkcjQubyBzdmM0cHJvYy5vCitsb2NrZC1vYmpzLXkgOj0gY2xudGxvY2subyBjbG50cHJvYy5vIGNsbnR4ZHIubyBob3N0Lm8gc3ZjLm8gc3ZjbG9jay5vIFwKKwkgICAgICAgIHN2Y3NoYXJlLm8gc3ZjcHJvYy5vIHN2Y3N1YnMubyBtb24ubyB4ZHIubyBncmFjZS5vCitsb2NrZC1vYmpzLSQoQ09ORklHX0xPQ0tEX1Y0KSArPSBjbG50NHhkci5vIHhkcjQubyBzdmM0cHJvYy5vCiBsb2NrZC1vYmpzCQkgICAgICA6PSAkKGxvY2tkLW9ianMteSkKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL2NsbnQ0eGRyLmMgYi9mcy9sb2NrZC9jbG50NHhkci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NDhiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9sb2NrZC9jbG50NHhkci5jCkBAIC0wLDAgKzEsNjA1IEBACisvKgorICogbGludXgvZnMvbG9ja2QvY2xudDR4ZHIuYworICoKKyAqIFhEUiBmdW5jdGlvbnMgdG8gZW5jb2RlL2RlY29kZSBOTE0gdmVyc2lvbiA0IFJQQyBhcmd1bWVudHMgYW5kIHJlc3VsdHMuCisgKgorICogTkxNIGNsaWVudC1zaWRlIG9ubHkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdGF0cy5oPgorI2luY2x1ZGUgPGxpbnV4L2xvY2tkL2xvY2tkLmg+CisKKyNkZWZpbmUgTkxNREJHX0ZBQ0lMSVRZCQlOTE1EQkdfWERSCisKKyNpZiAoTkxNQ0xOVF9PSFNJWkUgPiBYRFJfTUFYX05FVE9CSikKKyMgIGVycm9yICJOTE0gaG9zdCBuYW1lIGNhbm5vdCBiZSBsYXJnZXIgdGhhbiBYRFJfTUFYX05FVE9CSiEiCisjZW5kaWYKKworI2lmIChOTE1DTE5UX09IU0laRSA+IE5MTV9NQVhTVFJMRU4pCisjICBlcnJvciAiTkxNIGhvc3QgbmFtZSBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gTkxNJ3MgbWF4aW11bSBzdHJpbmcgbGVuZ3RoISIKKyNlbmRpZgorCisvKgorICogRGVjbGFyZSB0aGUgc3BhY2UgcmVxdWlyZW1lbnRzIGZvciBOTE0gYXJndW1lbnRzIGFuZCByZXBsaWVzIGFzCisgKiBudW1iZXIgb2YgMzJiaXQtd29yZHMKKyAqLworI2RlZmluZSBOTE00X3ZvaWRfc3oJCSgwKQorI2RlZmluZSBOTE00X2Nvb2tpZV9zegkJKDErKE5MTV9NQVhDT09LSUVMRU4+PjIpKQorI2RlZmluZSBOTE00X2NhbGxlcl9zegkJKDErKE5MTUNMTlRfT0hTSVpFPj4yKSkKKyNkZWZpbmUgTkxNNF9vd25lcl9zegkJKDErKE5MTUNMTlRfT0hTSVpFPj4yKSkKKyNkZWZpbmUgTkxNNF9maGFuZGxlX3N6CQkoMSsoTkZTM19GSFNJWkU+PjIpKQorI2RlZmluZSBOTE00X2xvY2tfc3oJCSg1K05MTTRfY2FsbGVyX3N6K05MTTRfb3duZXJfc3orTkxNNF9maGFuZGxlX3N6KQorI2RlZmluZSBOTE00X2hvbGRlcl9zegkJKDYrTkxNNF9vd25lcl9zeikKKworI2RlZmluZSBOTE00X3Rlc3RhcmdzX3N6CShOTE00X2Nvb2tpZV9zeisxK05MTTRfbG9ja19zeikKKyNkZWZpbmUgTkxNNF9sb2NrYXJnc19zegkoTkxNNF9jb29raWVfc3orNCtOTE00X2xvY2tfc3opCisjZGVmaW5lIE5MTTRfY2FuY2FyZ3Nfc3oJKE5MTTRfY29va2llX3N6KzIrTkxNNF9sb2NrX3N6KQorI2RlZmluZSBOTE00X3VubG9ja2FyZ3Nfc3oJKE5MTTRfY29va2llX3N6K05MTTRfbG9ja19zeikKKworI2RlZmluZSBOTE00X3Rlc3RyZXNfc3oJCShOTE00X2Nvb2tpZV9zeisxK05MTTRfaG9sZGVyX3N6KQorI2RlZmluZSBOTE00X3Jlc19zegkJKE5MTTRfY29va2llX3N6KzEpCisjZGVmaW5lIE5MTTRfbm9yZXBfc3oJCSgwKQorCisKK3N0YXRpYyBzNjQgbG9mZl90X3RvX3M2NChsb2ZmX3Qgb2Zmc2V0KQoreworCXM2NCByZXM7CisKKwlpZiAob2Zmc2V0ID49IE5MTTRfT0ZGU0VUX01BWCkKKwkJcmVzID0gTkxNNF9PRkZTRVRfTUFYOworCWVsc2UgaWYgKG9mZnNldCA8PSAtTkxNNF9PRkZTRVRfTUFYKQorCQlyZXMgPSAtTkxNNF9PRkZTRVRfTUFYOworCWVsc2UKKwkJcmVzID0gb2Zmc2V0OworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIG5sbTRfY29tcHV0ZV9vZmZzZXRzKGNvbnN0IHN0cnVjdCBubG1fbG9jayAqbG9jaywKKwkJCQkgdTY0ICpsX29mZnNldCwgdTY0ICpsX2xlbikKK3sKKwljb25zdCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCA9ICZsb2NrLT5mbDsKKworCUJVR19PTihmbC0+Zmxfc3RhcnQgPiBOTE00X09GRlNFVF9NQVgpOworCUJVR19PTihmbC0+ZmxfZW5kID4gTkxNNF9PRkZTRVRfTUFYICYmCisJCQkJZmwtPmZsX2VuZCAhPSBPRkZTRVRfTUFYKTsKKworCSpsX29mZnNldCA9IGxvZmZfdF90b19zNjQoZmwtPmZsX3N0YXJ0KTsKKwlpZiAoZmwtPmZsX2VuZCA9PSBPRkZTRVRfTUFYKQorCQkqbF9sZW4gPSAwOworCWVsc2UKKwkJKmxfbGVuID0gbG9mZl90X3RvX3M2NChmbC0+ZmxfZW5kIC0gZmwtPmZsX3N0YXJ0ICsgMSk7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVjb2RlIGJ1ZmZlciBvdmVyZmxvd3Mgb3V0LW9mLWxpbmUuCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X292ZXJmbG93X21zZyhjb25zdCBjaGFyICpmdW5jLCBjb25zdCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyKQoreworCWRwcmludGsoImxvY2tkOiAlcyBwcmVtYXR1cmVseSBoaXQgdGhlIGVuZCBvZiBvdXIgcmVjZWl2ZSBidWZmZXIuICIKKwkJIlJlbWFpbmluZyBidWZmZXIgbGVuZ3RoIGlzICV0dSB3b3Jkcy5cbiIsCisJCWZ1bmMsIHhkci0+ZW5kIC0geGRyLT5wKTsKK30KKworCisvKgorICogRW5jb2RlL2RlY29kZSBOTE12NCBiYXNpYyBkYXRhIHR5cGVzCisgKgorICogQmFzaWMgTkxNdjQgZGF0YSB0eXBlcyBhcmUgZGVmaW5lZCBpbiBBcHBlbmRpeCBJSSwgc2VjdGlvbiA2LjEuNAorICogb2YgUkZDIDE4MTM6ICJORlMgVmVyc2lvbiAzIFByb3RvY29sIFNwZWNpZmljYXRpb24iIGFuZCBpbiBDaGFwdGVyCisgKiAxMCBvZiBYL09wZW4ncyAiUHJvdG9jb2xzIGZvciBJbnRlcndvcmtpbmc6IFhORlMsIFZlcnNpb24gM1ciLgorICoKKyAqIE5vdCBhbGwgYmFzaWMgZGF0YSB0eXBlcyBoYXZlIHRoZWlyIG93biBlbmNvZGluZyBhbmQgZGVjb2RpbmcKKyAqIGZ1bmN0aW9ucy4gIEZvciBydW4tdGltZSBlZmZpY2llbmN5LCBzb21lIGRhdGEgdHlwZXMgYXJlIGVuY29kZWQKKyAqIG9yIGRlY29kZWQgaW5saW5lLgorICovCisKK3N0YXRpYyB2b2lkIGVuY29kZV9ib29sKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IGludCB2YWx1ZSkKK3sKKwlfX2JlMzIgKnA7CisKKwlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA0KTsKKwkqcCA9IHZhbHVlID8geGRyX29uZSA6IHhkcl96ZXJvOworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVfaW50MzIoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3QgczMyIHZhbHVlKQoreworCV9fYmUzMiAqcDsKKworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQpOworCSpwID0gY3B1X3RvX2JlMzIodmFsdWUpOworfQorCisvKgorICoJdHlwZWRlZiBvcGFxdWUgbmV0b2JqPE1BWE5FVE9CSl9TWj4KKyAqLworc3RhdGljIHZvaWQgZW5jb2RlX25ldG9iaihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICBjb25zdCB1OCAqZGF0YSwgY29uc3QgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKwlfX2JlMzIgKnA7CisKKwlCVUdfT04obGVuZ3RoID4gWERSX01BWF9ORVRPQkopOworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyBsZW5ndGgpOworCXhkcl9lbmNvZGVfb3BhcXVlKHAsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX25ldG9iaihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJIHN0cnVjdCB4ZHJfbmV0b2JqICpvYmopCit7CisJdTMyIGxlbmd0aDsKKwlfX2JlMzIgKnA7CisKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJbGVuZ3RoID0gYmUzMl90b19jcHVwKHArKyk7CisJaWYgKHVubGlrZWx5KGxlbmd0aCA+IFhEUl9NQVhfTkVUT0JKKSkKKwkJZ290byBvdXRfc2l6ZTsKKwlvYmotPmxlbiA9IGxlbmd0aDsKKwlvYmotPmRhdGEgPSAodTggKilwOworCXJldHVybiAwOworb3V0X3NpemU6CisJZHByaW50aygiTkZTOiByZXR1cm5lZCBuZXRvYmogd2FzIHRvbyBsb25nOiAldVxuIiwgbGVuZ3RoKTsKKwlyZXR1cm4gLUVJTzsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qCisgKgluZXRvYmogY29va2llOworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfY29va2llKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgIGNvbnN0IHN0cnVjdCBubG1fY29va2llICpjb29raWUpCit7CisJQlVHX09OKGNvb2tpZS0+bGVuID4gTkxNX01BWENPT0tJRUxFTik7CisJZW5jb2RlX25ldG9iaih4ZHIsICh1OCAqKSZjb29raWUtPmRhdGEsIGNvb2tpZS0+bGVuKTsKK30KKworc3RhdGljIGludCBkZWNvZGVfY29va2llKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgIHN0cnVjdCBubG1fY29va2llICpjb29raWUpCit7CisJdTMyIGxlbmd0aDsKKwlfX2JlMzIgKnA7CisKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJbGVuZ3RoID0gYmUzMl90b19jcHVwKHArKyk7CisJLyogYXBwYXJlbnRseSBIUFVYIGNhbiByZXR1cm4gZW1wdHkgY29va2llcyAqLworCWlmIChsZW5ndGggPT0gMCkKKwkJZ290byBvdXRfaHB1eDsKKwlpZiAobGVuZ3RoID4gTkxNX01BWENPT0tJRUxFTikKKwkJZ290byBvdXRfc2l6ZTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBsZW5ndGgpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwljb29raWUtPmxlbiA9IGxlbmd0aDsKKwltZW1jcHkoY29va2llLT5kYXRhLCBwLCBsZW5ndGgpOworCXJldHVybiAwOworb3V0X2hwdXg6CisJY29va2llLT5sZW4gPSA0OworCW1lbXNldChjb29raWUtPmRhdGEsIDAsIDQpOworCXJldHVybiAwOworb3V0X3NpemU6CisJZHByaW50aygiTkZTOiByZXR1cm5lZCBjb29raWUgd2FzIHRvbyBsb25nOiAldVxuIiwgbGVuZ3RoKTsKKwlyZXR1cm4gLUVJTzsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qCisgKgluZXRvYmogZmg7CisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV9maChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCBzdHJ1Y3QgbmZzX2ZoICpmaCkKK3sKKwlCVUdfT04oZmgtPnNpemUgPiBORlMzX0ZIU0laRSk7CisJZW5jb2RlX25ldG9iaih4ZHIsICh1OCAqKSZmaC0+ZGF0YSwgZmgtPnNpemUpOworfQorCisvKgorICoJZW51bSBubG00X3N0YXRzIHsKKyAqCQlOTE00X0dSQU5URUQgPSAwLAorICoJCU5MTTRfREVOSUVEID0gMSwKKyAqCQlOTE00X0RFTklFRF9OT0xPQ0tTID0gMiwKKyAqCQlOTE00X0JMT0NLRUQgPSAzLAorICoJCU5MTTRfREVOSUVEX0dSQUNFX1BFUklPRCA9IDQsCisgKgkJTkxNNF9ERUFETENLID0gNSwKKyAqCQlOTE00X1JPRlMgPSA2LAorICoJCU5MTTRfU1RBTEVfRkggPSA3LAorICoJCU5MTTRfRkJJRyA9IDgsCisgKgkJTkxNNF9GQUlMRUQgPSA5CisgKgl9OworICoKKyAqCXN0cnVjdCBubG00X3N0YXQgeworICoJCW5sbTRfc3RhdHMgc3RhdDsKKyAqCX07CisgKgorICogTkI6IHdlIGRvbid0IHN3YXAgYnl0ZXMgZm9yIHRoZSBOTE0gc3RhdHVzIHZhbHVlcy4gIFRoZSB1cHBlcgorICogbGF5ZXJzIGRlYWwgZGlyZWN0bHkgd2l0aCB0aGUgc3RhdHVzIHZhbHVlIGluIG5ldHdvcmsgYnl0ZQorICogb3JkZXIuCisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV9ubG00X3N0YXQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgY29uc3QgX19iZTMyIHN0YXQpCit7CisJX19iZTMyICpwOworCisJQlVHX09OKGJlMzJfdG9fY3B1KHN0YXQpID4gTkxNX0ZBSUxFRCk7CisJcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgNCk7CisJKnAgPSBzdGF0OworfQorCitzdGF0aWMgaW50IGRlY29kZV9ubG00X3N0YXQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgX19iZTMyICpzdGF0KQoreworCV9fYmUzMiAqcDsKKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlpZiAodW5saWtlbHkoKnAgPiBubG00X2ZhaWxlZCkpCisJCWdvdG8gb3V0X2JhZF94ZHI7CisJKnN0YXQgPSAqcDsKKwlyZXR1cm4gMDsKK291dF9iYWRfeGRyOgorCWRwcmludGsoIiVzOiBzZXJ2ZXIgcmV0dXJuZWQgaW52YWxpZCBubG00X3N0YXRzIHZhbHVlOiAldVxuIiwKKwkJCV9fZnVuY19fLCBiZTMyX3RvX2NwdXAocCkpOworCXJldHVybiAtRUlPOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKK30KKworLyoKKyAqCXN0cnVjdCBubG00X2hvbGRlciB7CisgKgkJYm9vbAlleGNsdXNpdmU7CisgKgkJaW50MzIJc3ZpZDsKKyAqCQluZXRvYmoJb2g7CisgKgkJdWludDY0CWxfb2Zmc2V0OworICoJCXVpbnQ2NAlsX2xlbjsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV9ubG00X2hvbGRlcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBubG1fcmVzICpyZXN1bHQpCit7CisJY29uc3Qgc3RydWN0IG5sbV9sb2NrICpsb2NrID0gJnJlc3VsdC0+bG9jazsKKwl1NjQgbF9vZmZzZXQsIGxfbGVuOworCV9fYmUzMiAqcDsKKworCWVuY29kZV9ib29sKHhkciwgbG9jay0+ZmwuZmxfdHlwZSA9PSBGX1JETENLKTsKKwllbmNvZGVfaW50MzIoeGRyLCBsb2NrLT5zdmlkKTsKKwllbmNvZGVfbmV0b2JqKHhkciwgbG9jay0+b2guZGF0YSwgbG9jay0+b2gubGVuKTsKKworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyA0KTsKKwlubG00X2NvbXB1dGVfb2Zmc2V0cyhsb2NrLCAmbF9vZmZzZXQsICZsX2xlbik7CisJcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgbF9vZmZzZXQpOworCXhkcl9lbmNvZGVfaHlwZXIocCwgbF9sZW4pOworfQorCitzdGF0aWMgaW50IGRlY29kZV9ubG00X2hvbGRlcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmxtX3JlcyAqcmVzdWx0KQoreworCXN0cnVjdCBubG1fbG9jayAqbG9jayA9ICZyZXN1bHQtPmxvY2s7CisJc3RydWN0IGZpbGVfbG9jayAqZmwgPSAmbG9jay0+Zmw7CisJdTY0IGxfb2Zmc2V0LCBsX2xlbjsKKwl1MzIgZXhjbHVzaXZlOworCWludCBlcnJvcjsKKwlfX2JlMzIgKnA7CisJczMyIGVuZDsKKworCW1lbXNldChsb2NrLCAwLCBzaXplb2YoKmxvY2spKTsKKwlsb2Nrc19pbml0X2xvY2soZmwpOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCArIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlleGNsdXNpdmUgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwlsb2NrLT5zdmlkID0gYmUzMl90b19jcHVwKHApOworCWZsLT5mbF9waWQgPSAocGlkX3QpbG9jay0+c3ZpZDsKKworCWVycm9yID0gZGVjb2RlX25ldG9iaih4ZHIsICZsb2NrLT5vaCk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA4ICsgOCk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCisJZmwtPmZsX2ZsYWdzID0gRkxfUE9TSVg7CisJZmwtPmZsX3R5cGUgID0gZXhjbHVzaXZlICE9IDAgPyBGX1dSTENLIDogRl9SRExDSzsKKwlwID0geGRyX2RlY29kZV9oeXBlcihwLCAmbF9vZmZzZXQpOworCXhkcl9kZWNvZGVfaHlwZXIocCwgJmxfbGVuKTsKKwllbmQgPSBsX29mZnNldCArIGxfbGVuIC0gMTsKKworCWZsLT5mbF9zdGFydCA9IChsb2ZmX3QpbF9vZmZzZXQ7CisJaWYgKGxfbGVuID09IDAgfHwgZW5kIDwgMCkKKwkJZmwtPmZsX2VuZCA9IE9GRlNFVF9NQVg7CisJZWxzZQorCQlmbC0+ZmxfZW5kID0gKGxvZmZfdCllbmQ7CisJZXJyb3IgPSAwOworb3V0OgorCXJldHVybiBlcnJvcjsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qCisgKglzdHJpbmcgY2FsbGVyX25hbWU8TE1fTUFYU1RSTEVOPjsKKyAqLworc3RhdGljIHZvaWQgZW5jb2RlX2NhbGxlcl9uYW1lKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJLyogTkI6IGNsaWVudC1zaWRlIGRvZXMgbm90IHNldCBsb2NrLT5sZW4gKi8KKwl1MzIgbGVuZ3RoID0gc3RybGVuKG5hbWUpOworCV9fYmUzMiAqcDsKKworCUJVR19PTihsZW5ndGggPiBOTE1fTUFYU1RSTEVOKTsKKwlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA0ICsgbGVuZ3RoKTsKKwl4ZHJfZW5jb2RlX29wYXF1ZShwLCBuYW1lLCBsZW5ndGgpOworfQorCisvKgorICoJc3RydWN0IG5sbTRfbG9jayB7CisgKgkJc3RyaW5nCWNhbGxlcl9uYW1lPExNX01BWFNUUkxFTj47CisgKgkJbmV0b2JqCWZoOworICoJCW5ldG9iaglvaDsKKyAqCQlpbnQzMglzdmlkOworICoJCXVpbnQ2NAlsX29mZnNldDsKKyAqCQl1aW50NjQJbF9sZW47CisgKgl9OworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfbmxtNF9sb2NrKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBubG1fbG9jayAqbG9jaykKK3sKKwl1NjQgbF9vZmZzZXQsIGxfbGVuOworCV9fYmUzMiAqcDsKKworCWVuY29kZV9jYWxsZXJfbmFtZSh4ZHIsIGxvY2stPmNhbGxlcik7CisJZW5jb2RlX2ZoKHhkciwgJmxvY2stPmZoKTsKKwllbmNvZGVfbmV0b2JqKHhkciwgbG9jay0+b2guZGF0YSwgbG9jay0+b2gubGVuKTsKKworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyA4ICsgOCk7CisJKnArKyA9IGNwdV90b19iZTMyKGxvY2stPnN2aWQpOworCisJbmxtNF9jb21wdXRlX29mZnNldHMobG9jaywgJmxfb2Zmc2V0LCAmbF9sZW4pOworCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIGxfb2Zmc2V0KTsKKwl4ZHJfZW5jb2RlX2h5cGVyKHAsIGxfbGVuKTsKK30KKworCisvKgorICogTkxNdjQgWERSIGVuY29kZSBmdW5jdGlvbnMKKyAqCisgKiBOTE12NCBhcmd1bWVudCB0eXBlcyBhcmUgZGVmaW5lZCBpbiBBcHBlbmRpeCBJSSBvZiBSRkMgMTgxMzoKKyAqICJORlMgVmVyc2lvbiAzIFByb3RvY29sIFNwZWNpZmljYXRpb24iIGFuZCBDaGFwdGVyIDEwIG9mIFgvT3BlbidzCisgKiAiUHJvdG9jb2xzIGZvciBJbnRlcndvcmtpbmc6IFhORlMsIFZlcnNpb24gM1ciLgorICovCisKKy8qCisgKglzdHJ1Y3QgbmxtNF90ZXN0YXJncyB7CisgKgkJbmV0b2JqIGNvb2tpZTsKKyAqCQlib29sIGV4Y2x1c2l2ZTsKKyAqCQlzdHJ1Y3QgbmxtNF9sb2NrIGFsb2NrOworICoJfTsKKyAqLworc3RhdGljIHZvaWQgbmxtNF94ZHJfZW5jX3Rlc3RhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBubG1fYXJncyAqYXJncykKK3sKKwljb25zdCBzdHJ1Y3QgbmxtX2xvY2sgKmxvY2sgPSAmYXJncy0+bG9jazsKKworCWVuY29kZV9jb29raWUoeGRyLCAmYXJncy0+Y29va2llKTsKKwllbmNvZGVfYm9vbCh4ZHIsIGxvY2stPmZsLmZsX3R5cGUgPT0gRl9XUkxDSyk7CisJZW5jb2RlX25sbTRfbG9jayh4ZHIsIGxvY2spOworfQorCisvKgorICoJc3RydWN0IG5sbTRfbG9ja2FyZ3MgeworICoJCW5ldG9iaiBjb29raWU7CisgKgkJYm9vbCBibG9jazsKKyAqCQlib29sIGV4Y2x1c2l2ZTsKKyAqCQlzdHJ1Y3QgbmxtNF9sb2NrIGFsb2NrOworICoJCWJvb2wgcmVjbGFpbTsKKyAqCQlpbnQgc3RhdGU7CisgKgl9OworICovCitzdGF0aWMgdm9pZCBubG00X3hkcl9lbmNfbG9ja2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgY29uc3Qgc3RydWN0IG5sbV9hcmdzICphcmdzKQoreworCWNvbnN0IHN0cnVjdCBubG1fbG9jayAqbG9jayA9ICZhcmdzLT5sb2NrOworCisJZW5jb2RlX2Nvb2tpZSh4ZHIsICZhcmdzLT5jb29raWUpOworCWVuY29kZV9ib29sKHhkciwgYXJncy0+YmxvY2spOworCWVuY29kZV9ib29sKHhkciwgbG9jay0+ZmwuZmxfdHlwZSA9PSBGX1dSTENLKTsKKwllbmNvZGVfbmxtNF9sb2NrKHhkciwgbG9jayk7CisJZW5jb2RlX2Jvb2woeGRyLCBhcmdzLT5yZWNsYWltKTsKKwllbmNvZGVfaW50MzIoeGRyLCBhcmdzLT5zdGF0ZSk7Cit9CisKKy8qCisgKglzdHJ1Y3QgbmxtNF9jYW5jYXJncyB7CisgKgkJbmV0b2JqIGNvb2tpZTsKKyAqCQlib29sIGJsb2NrOworICoJCWJvb2wgZXhjbHVzaXZlOworICoJCXN0cnVjdCBubG00X2xvY2sgYWxvY2s7CisgKgl9OworICovCitzdGF0aWMgdm9pZCBubG00X3hkcl9lbmNfY2FuY2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgY29uc3Qgc3RydWN0IG5sbV9hcmdzICphcmdzKQoreworCWNvbnN0IHN0cnVjdCBubG1fbG9jayAqbG9jayA9ICZhcmdzLT5sb2NrOworCisJZW5jb2RlX2Nvb2tpZSh4ZHIsICZhcmdzLT5jb29raWUpOworCWVuY29kZV9ib29sKHhkciwgYXJncy0+YmxvY2spOworCWVuY29kZV9ib29sKHhkciwgbG9jay0+ZmwuZmxfdHlwZSA9PSBGX1dSTENLKTsKKwllbmNvZGVfbmxtNF9sb2NrKHhkciwgbG9jayk7Cit9CisKKy8qCisgKglzdHJ1Y3QgbmxtNF91bmxvY2thcmdzIHsKKyAqCQluZXRvYmogY29va2llOworICoJCXN0cnVjdCBubG00X2xvY2sgYWxvY2s7CisgKgl9OworICovCitzdGF0aWMgdm9pZCBubG00X3hkcl9lbmNfdW5sb2NrYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgY29uc3Qgc3RydWN0IG5sbV9hcmdzICphcmdzKQoreworCWNvbnN0IHN0cnVjdCBubG1fbG9jayAqbG9jayA9ICZhcmdzLT5sb2NrOworCisJZW5jb2RlX2Nvb2tpZSh4ZHIsICZhcmdzLT5jb29raWUpOworCWVuY29kZV9ubG00X2xvY2soeGRyLCBsb2NrKTsKK30KKworLyoKKyAqCXN0cnVjdCBubG00X3JlcyB7CisgKgkJbmV0b2JqIGNvb2tpZTsKKyAqCQlubG00X3N0YXQgc3RhdDsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIG5sbTRfeGRyX2VuY19yZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBubG1fcmVzICpyZXN1bHQpCit7CisJZW5jb2RlX2Nvb2tpZSh4ZHIsICZyZXN1bHQtPmNvb2tpZSk7CisJZW5jb2RlX25sbTRfc3RhdCh4ZHIsIHJlc3VsdC0+c3RhdHVzKTsKK30KKworLyoKKyAqCXVuaW9uIG5sbTRfdGVzdHJwbHkgc3dpdGNoIChubG00X3N0YXRzIHN0YXQpIHsKKyAqCWNhc2UgTkxNNF9ERU5JRUQ6CisgKgkJc3RydWN0IG5sbTRfaG9sZGVyIGhvbGRlcjsKKyAqCWRlZmF1bHQ6CisgKgkJdm9pZDsKKyAqCX07CisgKgorICoJc3RydWN0IG5sbTRfdGVzdHJlcyB7CisgKgkJbmV0b2JqIGNvb2tpZTsKKyAqCQlubG00X3Rlc3RycGx5IHRlc3Rfc3RhdDsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIG5sbTRfeGRyX2VuY190ZXN0cmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSBjb25zdCBzdHJ1Y3QgbmxtX3JlcyAqcmVzdWx0KQoreworCWVuY29kZV9jb29raWUoeGRyLCAmcmVzdWx0LT5jb29raWUpOworCWVuY29kZV9ubG00X3N0YXQoeGRyLCByZXN1bHQtPnN0YXR1cyk7CisJaWYgKHJlc3VsdC0+c3RhdHVzID09IG5sbV9sY2tfZGVuaWVkKQorCQllbmNvZGVfbmxtNF9ob2xkZXIoeGRyLCByZXN1bHQpOworfQorCisKKy8qCisgKiBOTE12NCBYRFIgZGVjb2RlIGZ1bmN0aW9ucworICoKKyAqIE5MTXY0IGFyZ3VtZW50IHR5cGVzIGFyZSBkZWZpbmVkIGluIEFwcGVuZGl4IElJIG9mIFJGQyAxODEzOgorICogIk5GUyBWZXJzaW9uIDMgUHJvdG9jb2wgU3BlY2lmaWNhdGlvbiIgYW5kIENoYXB0ZXIgMTAgb2YgWC9PcGVuJ3MKKyAqICJQcm90b2NvbHMgZm9yIEludGVyd29ya2luZzogWE5GUywgVmVyc2lvbiAzVyIuCisgKi8KKworLyoKKyAqCXVuaW9uIG5sbTRfdGVzdHJwbHkgc3dpdGNoIChubG00X3N0YXRzIHN0YXQpIHsKKyAqCWNhc2UgTkxNNF9ERU5JRUQ6CisgKgkJc3RydWN0IG5sbTRfaG9sZGVyIGhvbGRlcjsKKyAqCWRlZmF1bHQ6CisgKgkJdm9pZDsKKyAqCX07CisgKgorICoJc3RydWN0IG5sbTRfdGVzdHJlcyB7CisgKgkJbmV0b2JqIGNvb2tpZTsKKyAqCQlubG00X3Rlc3RycGx5IHRlc3Rfc3RhdDsKKyAqCX07CisgKi8KK3N0YXRpYyBpbnQgZGVjb2RlX25sbTRfdGVzdHJwbHkoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQlzdHJ1Y3QgbmxtX3JlcyAqcmVzdWx0KQoreworCWludCBlcnJvcjsKKworCWVycm9yID0gZGVjb2RlX25sbTRfc3RhdCh4ZHIsICZyZXN1bHQtPnN0YXR1cyk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisJaWYgKHJlc3VsdC0+c3RhdHVzID09IG5sbV9sY2tfZGVuaWVkKQorCQllcnJvciA9IGRlY29kZV9ubG00X2hvbGRlcih4ZHIsIHJlc3VsdCk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IG5sbTRfeGRyX2RlY190ZXN0cmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCXN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJc3RydWN0IG5sbV9yZXMgKnJlc3VsdCkKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGRlY29kZV9jb29raWUoeGRyLCAmcmVzdWx0LT5jb29raWUpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gZGVjb2RlX25sbTRfdGVzdHJwbHkoeGRyLCByZXN1bHQpOworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqCXN0cnVjdCBubG00X3JlcyB7CisgKgkJbmV0b2JqIGNvb2tpZTsKKyAqCQlubG00X3N0YXQgc3RhdDsKKyAqCX07CisgKi8KK3N0YXRpYyBpbnQgbmxtNF94ZHJfZGVjX3JlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCSAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgIHN0cnVjdCBubG1fcmVzICpyZXN1bHQpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBkZWNvZGVfY29va2llKHhkciwgJnJlc3VsdC0+Y29va2llKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwllcnJvciA9IGRlY29kZV9ubG00X3N0YXQoeGRyLCAmcmVzdWx0LT5zdGF0dXMpOworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworCisvKgorICogRm9yIE5MTSwgYSB2b2lkIHByb2NlZHVyZSByZWFsbHkgcmV0dXJucyBub3RoaW5nCisgKi8KKyNkZWZpbmUgbmxtNF94ZHJfZGVjX25vcmVwCU5VTEwKKworI2RlZmluZSBQUk9DKHByb2MsIGFyZ3R5cGUsIHJlc3R5cGUpCQkJCQlcCitbTkxNUFJPQ18jI3Byb2NdID0gewkJCQkJCQlcCisJLnBfcHJvYyAgICAgID0gTkxNUFJPQ18jI3Byb2MsCQkJCQlcCisJLnBfZW5jb2RlICAgID0gKGt4ZHJlcHJvY190KW5sbTRfeGRyX2VuY18jI2FyZ3R5cGUsCQlcCisJLnBfZGVjb2RlICAgID0gKGt4ZHJkcHJvY190KW5sbTRfeGRyX2RlY18jI3Jlc3R5cGUsCQlcCisJLnBfYXJnbGVuICAgID0gTkxNNF8jI2FyZ3R5cGUjI19zeiwJCQkJXAorCS5wX3JlcGxlbiAgICA9IE5MTTRfIyNyZXN0eXBlIyNfc3osCQkJCVwKKwkucF9zdGF0aWR4ICAgPSBOTE1QUk9DXyMjcHJvYywJCQkJCVwKKwkucF9uYW1lICAgICAgPSAjcHJvYywJCQkJCQlcCisJfQorCitzdGF0aWMgc3RydWN0IHJwY19wcm9jaW5mbwlubG00X3Byb2NlZHVyZXNbXSA9IHsKKwlQUk9DKFRFU1QsCQl0ZXN0YXJncywJdGVzdHJlcyksCisJUFJPQyhMT0NLLAkJbG9ja2FyZ3MsCXJlcyksCisJUFJPQyhDQU5DRUwsCQljYW5jYXJncywJcmVzKSwKKwlQUk9DKFVOTE9DSywJCXVubG9ja2FyZ3MsCXJlcyksCisJUFJPQyhHUkFOVEVELAkJdGVzdGFyZ3MsCXJlcyksCisJUFJPQyhURVNUX01TRywJCXRlc3RhcmdzLAlub3JlcCksCisJUFJPQyhMT0NLX01TRywJCWxvY2thcmdzLAlub3JlcCksCisJUFJPQyhDQU5DRUxfTVNHLAljYW5jYXJncywJbm9yZXApLAorCVBST0MoVU5MT0NLX01TRywJdW5sb2NrYXJncywJbm9yZXApLAorCVBST0MoR1JBTlRFRF9NU0csCXRlc3RhcmdzLAlub3JlcCksCisJUFJPQyhURVNUX1JFUywJCXRlc3RyZXMsCW5vcmVwKSwKKwlQUk9DKExPQ0tfUkVTLAkJcmVzLAkJbm9yZXApLAorCVBST0MoQ0FOQ0VMX1JFUywJcmVzLAkJbm9yZXApLAorCVBST0MoVU5MT0NLX1JFUywJcmVzLAkJbm9yZXApLAorCVBST0MoR1JBTlRFRF9SRVMsCXJlcywJCW5vcmVwKSwKK307CisKK3N0cnVjdCBycGNfdmVyc2lvbglubG1fdmVyc2lvbjQgPSB7CisJLm51bWJlcgkJPSA0LAorCS5ucnByb2NzCT0gQVJSQVlfU0laRShubG00X3Byb2NlZHVyZXMpLAorCS5wcm9jcwkJPSBubG00X3Byb2NlZHVyZXMsCit9OwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvY2xudGxvY2suYyBiL2ZzL2xvY2tkL2NsbnRsb2NrLmMKaW5kZXggMjU1MDllYi4uOGQ0ZWE4MyAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvY2xudGxvY2suYworKysgYi9mcy9sb2NrZC9jbG50bG9jay5jCkBAIC03OSw3ICs3OSw3IEBACiAgKi8KIHZvaWQgbmxtY2xudF9kb25lKHN0cnVjdCBubG1faG9zdCAqaG9zdCkKIHsKLQlubG1fcmVsZWFzZV9ob3N0KGhvc3QpOworCW5sbWNsbnRfcmVsZWFzZV9ob3N0KGhvc3QpOwogCWxvY2tkX2Rvd24oKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5sbWNsbnRfZG9uZSk7CkBAIC0yNzMsNyArMjczLDcgQEAKIAlzcGluX3VubG9jaygmbmxtX2Jsb2NrZWRfbG9jayk7CiAKIAkvKiBSZWxlYXNlIGhvc3QgaGFuZGxlIGFmdGVyIHVzZSAqLwotCW5sbV9yZWxlYXNlX2hvc3QoaG9zdCk7CisJbmxtY2xudF9yZWxlYXNlX2hvc3QoaG9zdCk7CiAJbG9ja2RfZG93bigpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvY2xudHByb2MuYyBiL2ZzL2xvY2tkL2NsbnRwcm9jLmMKaW5kZXggMzMyYzU0Yy4uYWRiNDVlYyAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvY2xudHByb2MuYworKysgYi9mcy9sb2NrZC9jbG50cHJvYy5jCkBAIC01OCw3ICs1OCw3IEBACiAJCXJldHVybjsKIAlsaXN0X2RlbCgmbG9ja293bmVyLT5saXN0KTsKIAlzcGluX3VubG9jaygmbG9ja293bmVyLT5ob3N0LT5oX2xvY2spOwotCW5sbV9yZWxlYXNlX2hvc3QobG9ja293bmVyLT5ob3N0KTsKKwlubG1jbG50X3JlbGVhc2VfaG9zdChsb2Nrb3duZXItPmhvc3QpOwogCWtmcmVlKGxvY2tvd25lcik7CiB9CiAKQEAgLTIwNywyMiArMjA3LDIyIEBACiAJCXByaW50aygibmxtX2FsbG9jX2NhbGw6IGZhaWxlZCwgd2FpdGluZyBmb3IgbWVtb3J5XG4iKTsKIAkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKDUqSFopOwogCX0KLQlubG1fcmVsZWFzZV9ob3N0KGhvc3QpOworCW5sbWNsbnRfcmVsZWFzZV9ob3N0KGhvc3QpOwogCXJldHVybiBOVUxMOwogfQogCi12b2lkIG5sbV9yZWxlYXNlX2NhbGwoc3RydWN0IG5sbV9ycXN0ICpjYWxsKQordm9pZCBubG1jbG50X3JlbGVhc2VfY2FsbChzdHJ1Y3QgbmxtX3Jxc3QgKmNhbGwpCiB7CiAJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZjYWxsLT5hX2NvdW50KSkKIAkJcmV0dXJuOwotCW5sbV9yZWxlYXNlX2hvc3QoY2FsbC0+YV9ob3N0KTsKKwlubG1jbG50X3JlbGVhc2VfaG9zdChjYWxsLT5hX2hvc3QpOwogCW5sbWNsbnRfcmVsZWFzZV9sb2NrYXJncyhjYWxsKTsKIAlrZnJlZShjYWxsKTsKIH0KIAogc3RhdGljIHZvaWQgbmxtY2xudF9ycGNfcmVsZWFzZSh2b2lkICpkYXRhKQogewotCW5sbV9yZWxlYXNlX2NhbGwoZGF0YSk7CisJbmxtY2xudF9yZWxlYXNlX2NhbGwoZGF0YSk7CiB9CiAKIHN0YXRpYyBpbnQgbmxtX3dhaXRfb25fZ3JhY2Uod2FpdF9xdWV1ZV9oZWFkX3QgKnF1ZXVlKQpAQCAtNDM2LDcgKzQzNiw3IEBACiAJCQlzdGF0dXMgPSBubG1fc3RhdF90b19lcnJubyhyZXEtPmFfcmVzLnN0YXR1cyk7CiAJfQogb3V0OgotCW5sbV9yZWxlYXNlX2NhbGwocmVxKTsKKwlubG1jbG50X3JlbGVhc2VfY2FsbChyZXEpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTU5Myw3ICs1OTMsNyBAQAogb3V0X3VuYmxvY2s6CiAJbmxtY2xudF9maW5pc2hfYmxvY2soYmxvY2spOwogb3V0OgotCW5sbV9yZWxlYXNlX2NhbGwocmVxKTsKKwlubG1jbG50X3JlbGVhc2VfY2FsbChyZXEpOwogCXJldHVybiBzdGF0dXM7CiBvdXRfdW5sb2NrOgogCS8qIEZhdGFsIGVycm9yOiBlbnN1cmUgdGhhdCB3ZSByZW1vdmUgdGhlIGxvY2sgYWx0b2dldGhlciAqLwpAQCAtNjk0LDcgKzY5NCw3IEBACiAJLyogV2hhdCB0byBkbyBub3c/IEknbSBvdXQgb2YgbXkgZGVwdGguLi4gKi8KIAlzdGF0dXMgPSAtRU5PTENLOwogb3V0OgotCW5sbV9yZWxlYXNlX2NhbGwocmVxKTsKKwlubG1jbG50X3JlbGVhc2VfY2FsbChyZXEpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTc1NSw3ICs3NTUsNyBAQAogCQkJTkxNUFJPQ19DQU5DRUwsICZubG1jbG50X2NhbmNlbF9vcHMpOwogCWlmIChzdGF0dXMgPT0gMCAmJiByZXEtPmFfcmVzLnN0YXR1cyA9PSBubG1fbGNrX2RlbmllZCkKIAkJc3RhdHVzID0gLUVOT0xDSzsKLQlubG1fcmVsZWFzZV9jYWxsKHJlcSk7CisJbmxtY2xudF9yZWxlYXNlX2NhbGwocmVxKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9jbG50eGRyLmMgYi9mcy9sb2NrZC9jbG50eGRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwYWMzNAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2xvY2tkL2NsbnR4ZHIuYwpAQCAtMCwwICsxLDYyNyBAQAorLyoKKyAqIGxpbnV4L2ZzL2xvY2tkL2NsbnR4ZHIuYworICoKKyAqIFhEUiBmdW5jdGlvbnMgdG8gZW5jb2RlL2RlY29kZSBOTE0gdmVyc2lvbiAzIFJQQyBhcmd1bWVudHMgYW5kIHJlc3VsdHMuCisgKiBOTE0gdmVyc2lvbiAzIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggTkxNIHZlcnNpb25zIDEgYW5kIDIuCisgKgorICogTkxNIGNsaWVudC1zaWRlIG9ubHkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdGF0cy5oPgorI2luY2x1ZGUgPGxpbnV4L2xvY2tkL2xvY2tkLmg+CisKKyNkZWZpbmUgTkxNREJHX0ZBQ0lMSVRZCQlOTE1EQkdfWERSCisKKyNpZiAoTkxNQ0xOVF9PSFNJWkUgPiBYRFJfTUFYX05FVE9CSikKKyMgIGVycm9yICJOTE0gaG9zdCBuYW1lIGNhbm5vdCBiZSBsYXJnZXIgdGhhbiBYRFJfTUFYX05FVE9CSiEiCisjZW5kaWYKKworLyoKKyAqIERlY2xhcmUgdGhlIHNwYWNlIHJlcXVpcmVtZW50cyBmb3IgTkxNIGFyZ3VtZW50cyBhbmQgcmVwbGllcyBhcworICogbnVtYmVyIG9mIDMyYml0LXdvcmRzCisgKi8KKyNkZWZpbmUgTkxNX2Nvb2tpZV9zegkJKDErKE5MTV9NQVhDT09LSUVMRU4+PjIpKQorI2RlZmluZSBOTE1fY2FsbGVyX3N6CQkoMSsoTkxNQ0xOVF9PSFNJWkU+PjIpKQorI2RlZmluZSBOTE1fb3duZXJfc3oJCSgxKyhOTE1DTE5UX09IU0laRT4+MikpCisjZGVmaW5lIE5MTV9maGFuZGxlX3N6CQkoMSsoTkZTMl9GSFNJWkU+PjIpKQorI2RlZmluZSBOTE1fbG9ja19zegkJKDMrTkxNX2NhbGxlcl9zeitOTE1fb3duZXJfc3orTkxNX2ZoYW5kbGVfc3opCisjZGVmaW5lIE5MTV9ob2xkZXJfc3oJCSg0K05MTV9vd25lcl9zeikKKworI2RlZmluZSBOTE1fdGVzdGFyZ3Nfc3oJCShOTE1fY29va2llX3N6KzErTkxNX2xvY2tfc3opCisjZGVmaW5lIE5MTV9sb2NrYXJnc19zegkJKE5MTV9jb29raWVfc3orNCtOTE1fbG9ja19zeikKKyNkZWZpbmUgTkxNX2NhbmNhcmdzX3N6CQkoTkxNX2Nvb2tpZV9zeisyK05MTV9sb2NrX3N6KQorI2RlZmluZSBOTE1fdW5sb2NrYXJnc19zegkoTkxNX2Nvb2tpZV9zeitOTE1fbG9ja19zeikKKworI2RlZmluZSBOTE1fdGVzdHJlc19zegkJKE5MTV9jb29raWVfc3orMStOTE1faG9sZGVyX3N6KQorI2RlZmluZSBOTE1fcmVzX3N6CQkoTkxNX2Nvb2tpZV9zeisxKQorI2RlZmluZSBOTE1fbm9yZXBfc3oJCSgwKQorCisKK3N0YXRpYyBzMzIgbG9mZl90X3RvX3MzMihsb2ZmX3Qgb2Zmc2V0KQoreworCXMzMiByZXM7CisKKwlpZiAob2Zmc2V0ID49IE5MTV9PRkZTRVRfTUFYKQorCQlyZXMgPSBOTE1fT0ZGU0VUX01BWDsKKwllbHNlIGlmIChvZmZzZXQgPD0gLU5MTV9PRkZTRVRfTUFYKQorCQlyZXMgPSAtTkxNX09GRlNFVF9NQVg7CisJZWxzZQorCQlyZXMgPSBvZmZzZXQ7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgbmxtX2NvbXB1dGVfb2Zmc2V0cyhjb25zdCBzdHJ1Y3QgbmxtX2xvY2sgKmxvY2ssCisJCQkJdTMyICpsX29mZnNldCwgdTMyICpsX2xlbikKK3sKKwljb25zdCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCA9ICZsb2NrLT5mbDsKKworCUJVR19PTihmbC0+Zmxfc3RhcnQgPiBOTE1fT0ZGU0VUX01BWCk7CisJQlVHX09OKGZsLT5mbF9lbmQgPiBOTE1fT0ZGU0VUX01BWCAmJgorCQkJCWZsLT5mbF9lbmQgIT0gT0ZGU0VUX01BWCk7CisKKwkqbF9vZmZzZXQgPSBsb2ZmX3RfdG9fczMyKGZsLT5mbF9zdGFydCk7CisJaWYgKGZsLT5mbF9lbmQgPT0gT0ZGU0VUX01BWCkKKwkJKmxfbGVuID0gMDsKKwllbHNlCisJCSpsX2xlbiA9IGxvZmZfdF90b19zMzIoZmwtPmZsX2VuZCAtIGZsLT5mbF9zdGFydCArIDEpOworfQorCisvKgorICogSGFuZGxlIGRlY29kZSBidWZmZXIgb3ZlcmZsb3dzIG91dC1vZi1saW5lLgorICovCitzdGF0aWMgdm9pZCBwcmludF9vdmVyZmxvd19tc2coY29uc3QgY2hhciAqZnVuYywgY29uc3Qgc3RydWN0IHhkcl9zdHJlYW0gKnhkcikKK3sKKwlkcHJpbnRrKCJsb2NrZDogJXMgcHJlbWF0dXJlbHkgaGl0IHRoZSBlbmQgb2Ygb3VyIHJlY2VpdmUgYnVmZmVyLiAiCisJCSJSZW1haW5pbmcgYnVmZmVyIGxlbmd0aCBpcyAldHUgd29yZHMuXG4iLAorCQlmdW5jLCB4ZHItPmVuZCAtIHhkci0+cCk7Cit9CisKKworLyoKKyAqIEVuY29kZS9kZWNvZGUgTkxNdjMgYmFzaWMgZGF0YSB0eXBlcworICoKKyAqIEJhc2ljIE5MTXYzIGRhdGEgdHlwZXMgYXJlIG5vdCBkZWZpbmVkIGluIGFuIElFVEYgc3RhbmRhcmRzCisgKiBkb2N1bWVudC4gIFgvT3BlbiBoYXMgYSBkZXNjcmlwdGlvbiBvZiB0aGVzZSBkYXRhIHR5cGVzIHRoYXQKKyAqIGlzIHVzZWZ1bC4gIFNlZSBDaGFwdGVyIDEwIG9mICJQcm90b2NvbHMgZm9yIEludGVyd29ya2luZzoKKyAqIFhORlMsIFZlcnNpb24gM1ciLgorICoKKyAqIE5vdCBhbGwgYmFzaWMgZGF0YSB0eXBlcyBoYXZlIHRoZWlyIG93biBlbmNvZGluZyBhbmQgZGVjb2RpbmcKKyAqIGZ1bmN0aW9ucy4gIEZvciBydW4tdGltZSBlZmZpY2llbmN5LCBzb21lIGRhdGEgdHlwZXMgYXJlIGVuY29kZWQKKyAqIG9yIGRlY29kZWQgaW5saW5lLgorICovCisKK3N0YXRpYyB2b2lkIGVuY29kZV9ib29sKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IGludCB2YWx1ZSkKK3sKKwlfX2JlMzIgKnA7CisKKwlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA0KTsKKwkqcCA9IHZhbHVlID8geGRyX29uZSA6IHhkcl96ZXJvOworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVfaW50MzIoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3QgczMyIHZhbHVlKQoreworCV9fYmUzMiAqcDsKKworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQpOworCSpwID0gY3B1X3RvX2JlMzIodmFsdWUpOworfQorCisvKgorICoJdHlwZWRlZiBvcGFxdWUgbmV0b2JqPE1BWE5FVE9CSl9TWj4KKyAqLworc3RhdGljIHZvaWQgZW5jb2RlX25ldG9iaihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICBjb25zdCB1OCAqZGF0YSwgY29uc3QgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKwlfX2JlMzIgKnA7CisKKwlCVUdfT04obGVuZ3RoID4gWERSX01BWF9ORVRPQkopOworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyBsZW5ndGgpOworCXhkcl9lbmNvZGVfb3BhcXVlKHAsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX25ldG9iaihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJIHN0cnVjdCB4ZHJfbmV0b2JqICpvYmopCit7CisJdTMyIGxlbmd0aDsKKwlfX2JlMzIgKnA7CisKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJbGVuZ3RoID0gYmUzMl90b19jcHVwKHArKyk7CisJaWYgKHVubGlrZWx5KGxlbmd0aCA+IFhEUl9NQVhfTkVUT0JKKSkKKwkJZ290byBvdXRfc2l6ZTsKKwlvYmotPmxlbiA9IGxlbmd0aDsKKwlvYmotPmRhdGEgPSAodTggKilwOworCXJldHVybiAwOworb3V0X3NpemU6CisJZHByaW50aygiTkZTOiByZXR1cm5lZCBuZXRvYmogd2FzIHRvbyBsb25nOiAldVxuIiwgbGVuZ3RoKTsKKwlyZXR1cm4gLUVJTzsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qCisgKgluZXRvYmogY29va2llOworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfY29va2llKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgIGNvbnN0IHN0cnVjdCBubG1fY29va2llICpjb29raWUpCit7CisJQlVHX09OKGNvb2tpZS0+bGVuID4gTkxNX01BWENPT0tJRUxFTik7CisJZW5jb2RlX25ldG9iaih4ZHIsICh1OCAqKSZjb29raWUtPmRhdGEsIGNvb2tpZS0+bGVuKTsKK30KKworc3RhdGljIGludCBkZWNvZGVfY29va2llKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgc3RydWN0IG5sbV9jb29raWUgKmNvb2tpZSkKK3sKKwl1MzIgbGVuZ3RoOworCV9fYmUzMiAqcDsKKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlsZW5ndGggPSBiZTMyX3RvX2NwdXAocCsrKTsKKwkvKiBhcHBhcmVudGx5IEhQVVggY2FuIHJldHVybiBlbXB0eSBjb29raWVzICovCisJaWYgKGxlbmd0aCA9PSAwKQorCQlnb3RvIG91dF9ocHV4OworCWlmIChsZW5ndGggPiBOTE1fTUFYQ09PS0lFTEVOKQorCQlnb3RvIG91dF9zaXplOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIGxlbmd0aCk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWNvb2tpZS0+bGVuID0gbGVuZ3RoOworCW1lbWNweShjb29raWUtPmRhdGEsIHAsIGxlbmd0aCk7CisJcmV0dXJuIDA7CitvdXRfaHB1eDoKKwljb29raWUtPmxlbiA9IDQ7CisJbWVtc2V0KGNvb2tpZS0+ZGF0YSwgMCwgNCk7CisJcmV0dXJuIDA7CitvdXRfc2l6ZToKKwlkcHJpbnRrKCJORlM6IHJldHVybmVkIGNvb2tpZSB3YXMgdG9vIGxvbmc6ICV1XG4iLCBsZW5ndGgpOworCXJldHVybiAtRUlPOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKK30KKworLyoKKyAqCW5ldG9iaiBmaDsKKyAqLworc3RhdGljIHZvaWQgZW5jb2RlX2ZoKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IHN0cnVjdCBuZnNfZmggKmZoKQoreworCUJVR19PTihmaC0+c2l6ZSAhPSBORlMyX0ZIU0laRSk7CisJZW5jb2RlX25ldG9iaih4ZHIsICh1OCAqKSZmaC0+ZGF0YSwgTkZTMl9GSFNJWkUpOworfQorCisvKgorICoJZW51bSBubG1fc3RhdHMgeworICoJCUxDS19HUkFOVEVEID0gMCwKKyAqCQlMQ0tfREVOSUVEID0gMSwKKyAqCQlMQ0tfREVOSUVEX05PTE9DS1MgPSAyLAorICoJCUxDS19CTE9DS0VEID0gMywKKyAqCQlMQ0tfREVOSUVEX0dSQUNFX1BFUklPRCA9IDQKKyAqCX07CisgKgorICoKKyAqCXN0cnVjdCBubG1fc3RhdCB7CisgKgkJbmxtX3N0YXRzIHN0YXQ7CisgKgl9OworICoKKyAqIE5COiB3ZSBkb24ndCBzd2FwIGJ5dGVzIGZvciB0aGUgTkxNIHN0YXR1cyB2YWx1ZXMuICBUaGUgdXBwZXIKKyAqIGxheWVycyBkZWFsIGRpcmVjdGx5IHdpdGggdGhlIHN0YXR1cyB2YWx1ZSBpbiBuZXR3b3JrIGJ5dGUKKyAqIG9yZGVyLgorICovCisKK3N0YXRpYyB2b2lkIGVuY29kZV9ubG1fc3RhdChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgIGNvbnN0IF9fYmUzMiBzdGF0KQoreworCV9fYmUzMiAqcDsKKworCUJVR19PTihiZTMyX3RvX2NwdShzdGF0KSA+IE5MTV9MQ0tfREVOSUVEX0dSQUNFX1BFUklPRCk7CisJcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgNCk7CisJKnAgPSBzdGF0OworfQorCitzdGF0aWMgaW50IGRlY29kZV9ubG1fc3RhdChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgX19iZTMyICpzdGF0KQoreworCV9fYmUzMiAqcDsKKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlpZiAodW5saWtlbHkoKnAgPiBubG1fbGNrX2RlbmllZF9ncmFjZV9wZXJpb2QpKQorCQlnb3RvIG91dF9lbnVtOworCSpzdGF0ID0gKnA7CisJcmV0dXJuIDA7CitvdXRfZW51bToKKwlkcHJpbnRrKCIlczogc2VydmVyIHJldHVybmVkIGludmFsaWQgbmxtX3N0YXRzIHZhbHVlOiAldVxuIiwKKwkJX19mdW5jX18sIGJlMzJfdG9fY3B1cChwKSk7CisJcmV0dXJuIC1FSU87CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOworfQorCisvKgorICoJc3RydWN0IG5sbV9ob2xkZXIgeworICoJCWJvb2wgZXhjbHVzaXZlOworICoJCWludCB1cHBpZDsKKyAqCQluZXRvYmogb2g7CisgKgkJdW5zaWduZWQgbF9vZmZzZXQ7CisgKgkJdW5zaWduZWQgbF9sZW47CisgKgl9OworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfbmxtX2hvbGRlcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG5sbV9yZXMgKnJlc3VsdCkKK3sKKwljb25zdCBzdHJ1Y3QgbmxtX2xvY2sgKmxvY2sgPSAmcmVzdWx0LT5sb2NrOworCXUzMiBsX29mZnNldCwgbF9sZW47CisJX19iZTMyICpwOworCisJZW5jb2RlX2Jvb2woeGRyLCBsb2NrLT5mbC5mbF90eXBlID09IEZfUkRMQ0spOworCWVuY29kZV9pbnQzMih4ZHIsIGxvY2stPnN2aWQpOworCWVuY29kZV9uZXRvYmooeGRyLCBsb2NrLT5vaC5kYXRhLCBsb2NrLT5vaC5sZW4pOworCisJcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgNCArIDQpOworCW5sbV9jb21wdXRlX29mZnNldHMobG9jaywgJmxfb2Zmc2V0LCAmbF9sZW4pOworCSpwKysgPSBjcHVfdG9fYmUzMihsX29mZnNldCk7CisJKnAgICA9IGNwdV90b19iZTMyKGxfbGVuKTsKK30KKworc3RhdGljIGludCBkZWNvZGVfbmxtX2hvbGRlcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmxtX3JlcyAqcmVzdWx0KQoreworCXN0cnVjdCBubG1fbG9jayAqbG9jayA9ICZyZXN1bHQtPmxvY2s7CisJc3RydWN0IGZpbGVfbG9jayAqZmwgPSAmbG9jay0+Zmw7CisJdTMyIGV4Y2x1c2l2ZSwgbF9vZmZzZXQsIGxfbGVuOworCWludCBlcnJvcjsKKwlfX2JlMzIgKnA7CisJczMyIGVuZDsKKworCW1lbXNldChsb2NrLCAwLCBzaXplb2YoKmxvY2spKTsKKwlsb2Nrc19pbml0X2xvY2soZmwpOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCArIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlleGNsdXNpdmUgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwlsb2NrLT5zdmlkID0gYmUzMl90b19jcHVwKHApOworCWZsLT5mbF9waWQgPSAocGlkX3QpbG9jay0+c3ZpZDsKKworCWVycm9yID0gZGVjb2RlX25ldG9iaih4ZHIsICZsb2NrLT5vaCk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0ICsgNCk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCisJZmwtPmZsX2ZsYWdzID0gRkxfUE9TSVg7CisJZmwtPmZsX3R5cGUgID0gZXhjbHVzaXZlICE9IDAgPyBGX1dSTENLIDogRl9SRExDSzsKKwlsX29mZnNldCA9IGJlMzJfdG9fY3B1cChwKyspOworCWxfbGVuID0gYmUzMl90b19jcHVwKHApOworCWVuZCA9IGxfb2Zmc2V0ICsgbF9sZW4gLSAxOworCisJZmwtPmZsX3N0YXJ0ID0gKGxvZmZfdClsX29mZnNldDsKKwlpZiAobF9sZW4gPT0gMCB8fCBlbmQgPCAwKQorCQlmbC0+ZmxfZW5kID0gT0ZGU0VUX01BWDsKKwllbHNlCisJCWZsLT5mbF9lbmQgPSAobG9mZl90KWVuZDsKKwllcnJvciA9IDA7CitvdXQ6CisJcmV0dXJuIGVycm9yOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKK30KKworLyoKKyAqCXN0cmluZyBjYWxsZXJfbmFtZTxMTV9NQVhTVFJMRU4+OworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfY2FsbGVyX25hbWUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwkvKiBOQjogY2xpZW50LXNpZGUgZG9lcyBub3Qgc2V0IGxvY2stPmxlbiAqLworCXUzMiBsZW5ndGggPSBzdHJsZW4obmFtZSk7CisJX19iZTMyICpwOworCisJQlVHX09OKGxlbmd0aCA+IE5MTV9NQVhTVFJMRU4pOworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyBsZW5ndGgpOworCXhkcl9lbmNvZGVfb3BhcXVlKHAsIG5hbWUsIGxlbmd0aCk7Cit9CisKKy8qCisgKglzdHJ1Y3QgbmxtX2xvY2sgeworICoJCXN0cmluZyBjYWxsZXJfbmFtZTxMTV9NQVhTVFJMRU4+OworICoJCW5ldG9iaiBmaDsKKyAqCQluZXRvYmogb2g7CisgKgkJaW50IHVwcGlkOworICoJCXVuc2lnbmVkIGxfb2Zmc2V0OworICoJCXVuc2lnbmVkIGxfbGVuOworICoJfTsKKyAqLworc3RhdGljIHZvaWQgZW5jb2RlX25sbV9sb2NrKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgY29uc3Qgc3RydWN0IG5sbV9sb2NrICpsb2NrKQoreworCXUzMiBsX29mZnNldCwgbF9sZW47CisJX19iZTMyICpwOworCisJZW5jb2RlX2NhbGxlcl9uYW1lKHhkciwgbG9jay0+Y2FsbGVyKTsKKwllbmNvZGVfZmgoeGRyLCAmbG9jay0+ZmgpOworCWVuY29kZV9uZXRvYmooeGRyLCBsb2NrLT5vaC5kYXRhLCBsb2NrLT5vaC5sZW4pOworCisJcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgNCArIDQgKyA0KTsKKwkqcCsrID0gY3B1X3RvX2JlMzIobG9jay0+c3ZpZCk7CisKKwlubG1fY29tcHV0ZV9vZmZzZXRzKGxvY2ssICZsX29mZnNldCwgJmxfbGVuKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIobF9vZmZzZXQpOworCSpwICAgPSBjcHVfdG9fYmUzMihsX2xlbik7Cit9CisKKworLyoKKyAqIE5MTXYzIFhEUiBlbmNvZGUgZnVuY3Rpb25zCisgKgorICogTkxNdjMgYXJndW1lbnQgdHlwZXMgYXJlIGRlZmluZWQgaW4gQ2hhcHRlciAxMCBvZiBUaGUgT3BlbiBHcm91cCdzCisgKiAiUHJvdG9jb2xzIGZvciBJbnRlcndvcmtpbmc6IFhORlMsIFZlcnNpb24gM1ciLgorICovCisKKy8qCisgKglzdHJ1Y3QgbmxtX3Rlc3RhcmdzIHsKKyAqCQluZXRvYmogY29va2llOworICoJCWJvb2wgZXhjbHVzaXZlOworICoJCXN0cnVjdCBubG1fbG9jayBhbG9jazsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIG5sbV94ZHJfZW5jX3Rlc3RhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSBjb25zdCBzdHJ1Y3QgbmxtX2FyZ3MgKmFyZ3MpCit7CisJY29uc3Qgc3RydWN0IG5sbV9sb2NrICpsb2NrID0gJmFyZ3MtPmxvY2s7CisKKwllbmNvZGVfY29va2llKHhkciwgJmFyZ3MtPmNvb2tpZSk7CisJZW5jb2RlX2Jvb2woeGRyLCBsb2NrLT5mbC5mbF90eXBlID09IEZfV1JMQ0spOworCWVuY29kZV9ubG1fbG9jayh4ZHIsIGxvY2spOworfQorCisvKgorICoJc3RydWN0IG5sbV9sb2NrYXJncyB7CisgKgkJbmV0b2JqIGNvb2tpZTsKKyAqCQlib29sIGJsb2NrOworICoJCWJvb2wgZXhjbHVzaXZlOworICoJCXN0cnVjdCBubG1fbG9jayBhbG9jazsKKyAqCQlib29sIHJlY2xhaW07CisgKgkJaW50IHN0YXRlOworICoJfTsKKyAqLworc3RhdGljIHZvaWQgbmxtX3hkcl9lbmNfbG9ja2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJIGNvbnN0IHN0cnVjdCBubG1fYXJncyAqYXJncykKK3sKKwljb25zdCBzdHJ1Y3QgbmxtX2xvY2sgKmxvY2sgPSAmYXJncy0+bG9jazsKKworCWVuY29kZV9jb29raWUoeGRyLCAmYXJncy0+Y29va2llKTsKKwllbmNvZGVfYm9vbCh4ZHIsIGFyZ3MtPmJsb2NrKTsKKwllbmNvZGVfYm9vbCh4ZHIsIGxvY2stPmZsLmZsX3R5cGUgPT0gRl9XUkxDSyk7CisJZW5jb2RlX25sbV9sb2NrKHhkciwgbG9jayk7CisJZW5jb2RlX2Jvb2woeGRyLCBhcmdzLT5yZWNsYWltKTsKKwllbmNvZGVfaW50MzIoeGRyLCBhcmdzLT5zdGF0ZSk7Cit9CisKKy8qCisgKglzdHJ1Y3QgbmxtX2NhbmNhcmdzIHsKKyAqCQluZXRvYmogY29va2llOworICoJCWJvb2wgYmxvY2s7CisgKgkJYm9vbCBleGNsdXNpdmU7CisgKgkJc3RydWN0IG5sbV9sb2NrIGFsb2NrOworICoJfTsKKyAqLworc3RhdGljIHZvaWQgbmxtX3hkcl9lbmNfY2FuY2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJIGNvbnN0IHN0cnVjdCBubG1fYXJncyAqYXJncykKK3sKKwljb25zdCBzdHJ1Y3QgbmxtX2xvY2sgKmxvY2sgPSAmYXJncy0+bG9jazsKKworCWVuY29kZV9jb29raWUoeGRyLCAmYXJncy0+Y29va2llKTsKKwllbmNvZGVfYm9vbCh4ZHIsIGFyZ3MtPmJsb2NrKTsKKwllbmNvZGVfYm9vbCh4ZHIsIGxvY2stPmZsLmZsX3R5cGUgPT0gRl9XUkxDSyk7CisJZW5jb2RlX25sbV9sb2NrKHhkciwgbG9jayk7Cit9CisKKy8qCisgKglzdHJ1Y3QgbmxtX3VubG9ja2FyZ3MgeworICoJCW5ldG9iaiBjb29raWU7CisgKgkJc3RydWN0IG5sbV9sb2NrIGFsb2NrOworICoJfTsKKyAqLworc3RhdGljIHZvaWQgbmxtX3hkcl9lbmNfdW5sb2NrYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBubG1fYXJncyAqYXJncykKK3sKKwljb25zdCBzdHJ1Y3QgbmxtX2xvY2sgKmxvY2sgPSAmYXJncy0+bG9jazsKKworCWVuY29kZV9jb29raWUoeGRyLCAmYXJncy0+Y29va2llKTsKKwllbmNvZGVfbmxtX2xvY2soeGRyLCBsb2NrKTsKK30KKworLyoKKyAqCXN0cnVjdCBubG1fcmVzIHsKKyAqCQluZXRvYmogY29va2llOworICoJCW5sbV9zdGF0IHN0YXQ7CisgKgl9OworICovCitzdGF0aWMgdm9pZCBubG1feGRyX2VuY19yZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmxtX3JlcyAqcmVzdWx0KQoreworCWVuY29kZV9jb29raWUoeGRyLCAmcmVzdWx0LT5jb29raWUpOworCWVuY29kZV9ubG1fc3RhdCh4ZHIsIHJlc3VsdC0+c3RhdHVzKTsKK30KKworLyoKKyAqCXVuaW9uIG5sbV90ZXN0cnBseSBzd2l0Y2ggKG5sbV9zdGF0cyBzdGF0KSB7CisgKgljYXNlIExDS19ERU5JRUQ6CisgKgkJc3RydWN0IG5sbV9ob2xkZXIgaG9sZGVyOworICoJZGVmYXVsdDoKKyAqCQl2b2lkOworICoJfTsKKyAqCisgKglzdHJ1Y3QgbmxtX3Rlc3RyZXMgeworICoJCW5ldG9iaiBjb29raWU7CisgKgkJbmxtX3Rlc3RycGx5IHRlc3Rfc3RhdDsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV9ubG1fdGVzdHJwbHkoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQljb25zdCBzdHJ1Y3QgbmxtX3JlcyAqcmVzdWx0KQoreworCWlmIChyZXN1bHQtPnN0YXR1cyA9PSBubG1fbGNrX2RlbmllZCkKKwkJZW5jb2RlX25sbV9ob2xkZXIoeGRyLCByZXN1bHQpOworfQorCitzdGF0aWMgdm9pZCBubG1feGRyX2VuY190ZXN0cmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCXN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJY29uc3Qgc3RydWN0IG5sbV9yZXMgKnJlc3VsdCkKK3sKKwllbmNvZGVfY29va2llKHhkciwgJnJlc3VsdC0+Y29va2llKTsKKwllbmNvZGVfbmxtX3N0YXQoeGRyLCByZXN1bHQtPnN0YXR1cyk7CisJZW5jb2RlX25sbV90ZXN0cnBseSh4ZHIsIHJlc3VsdCk7Cit9CisKKworLyoKKyAqIE5MTXYzIFhEUiBkZWNvZGUgZnVuY3Rpb25zCisgKgorICogTkxNdjMgcmVzdWx0IHR5cGVzIGFyZSBkZWZpbmVkIGluIENoYXB0ZXIgMTAgb2YgVGhlIE9wZW4gR3JvdXAncworICogIlByb3RvY29scyBmb3IgSW50ZXJ3b3JraW5nOiBYTkZTLCBWZXJzaW9uIDNXIi4KKyAqLworCisvKgorICoJdW5pb24gbmxtX3Rlc3RycGx5IHN3aXRjaCAobmxtX3N0YXRzIHN0YXQpIHsKKyAqCWNhc2UgTENLX0RFTklFRDoKKyAqCQlzdHJ1Y3QgbmxtX2hvbGRlciBob2xkZXI7CisgKglkZWZhdWx0OgorICoJCXZvaWQ7CisgKgl9OworICoKKyAqCXN0cnVjdCBubG1fdGVzdHJlcyB7CisgKgkJbmV0b2JqIGNvb2tpZTsKKyAqCQlubG1fdGVzdHJwbHkgdGVzdF9zdGF0OworICoJfTsKKyAqLworc3RhdGljIGludCBkZWNvZGVfbmxtX3Rlc3RycGx5KHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgICAgc3RydWN0IG5sbV9yZXMgKnJlc3VsdCkKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGRlY29kZV9ubG1fc3RhdCh4ZHIsICZyZXN1bHQtPnN0YXR1cyk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisJaWYgKHJlc3VsdC0+c3RhdHVzID09IG5sbV9sY2tfZGVuaWVkKQorCQllcnJvciA9IGRlY29kZV9ubG1faG9sZGVyKHhkciwgcmVzdWx0KTsKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgbmxtX3hkcl9kZWNfdGVzdHJlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCSAgICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgIHN0cnVjdCBubG1fcmVzICpyZXN1bHQpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBkZWNvZGVfY29va2llKHhkciwgJnJlc3VsdC0+Y29va2llKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwllcnJvciA9IGRlY29kZV9ubG1fdGVzdHJwbHkoeGRyLCByZXN1bHQpOworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqCXN0cnVjdCBubG1fcmVzIHsKKyAqCQluZXRvYmogY29va2llOworICoJCW5sbV9zdGF0IHN0YXQ7CisgKgl9OworICovCitzdGF0aWMgaW50IG5sbV94ZHJfZGVjX3JlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCSAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICBzdHJ1Y3QgbmxtX3JlcyAqcmVzdWx0KQoreworCWludCBlcnJvcjsKKworCWVycm9yID0gZGVjb2RlX2Nvb2tpZSh4ZHIsICZyZXN1bHQtPmNvb2tpZSk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisJZXJyb3IgPSBkZWNvZGVfbmxtX3N0YXQoeGRyLCAmcmVzdWx0LT5zdGF0dXMpOworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworCisvKgorICogRm9yIE5MTSwgYSB2b2lkIHByb2NlZHVyZSByZWFsbHkgcmV0dXJucyBub3RoaW5nCisgKi8KKyNkZWZpbmUgbmxtX3hkcl9kZWNfbm9yZXAJTlVMTAorCisjZGVmaW5lIFBST0MocHJvYywgYXJndHlwZSwgcmVzdHlwZSkJXAorW05MTVBST0NfIyNwcm9jXSA9IHsJCQkJCQkJXAorCS5wX3Byb2MgICAgICA9IE5MTVBST0NfIyNwcm9jLAkJCQkJXAorCS5wX2VuY29kZSAgICA9IChreGRyZXByb2NfdClubG1feGRyX2VuY18jI2FyZ3R5cGUsCQlcCisJLnBfZGVjb2RlICAgID0gKGt4ZHJkcHJvY190KW5sbV94ZHJfZGVjXyMjcmVzdHlwZSwJCVwKKwkucF9hcmdsZW4gICAgPSBOTE1fIyNhcmd0eXBlIyNfc3osCQkJCVwKKwkucF9yZXBsZW4gICAgPSBOTE1fIyNyZXN0eXBlIyNfc3osCQkJCVwKKwkucF9zdGF0aWR4ICAgPSBOTE1QUk9DXyMjcHJvYywJCQkJCVwKKwkucF9uYW1lICAgICAgPSAjcHJvYywJCQkJCQlcCisJfQorCitzdGF0aWMgc3RydWN0IHJwY19wcm9jaW5mbwlubG1fcHJvY2VkdXJlc1tdID0geworCVBST0MoVEVTVCwJCXRlc3RhcmdzLAl0ZXN0cmVzKSwKKwlQUk9DKExPQ0ssCQlsb2NrYXJncywJcmVzKSwKKwlQUk9DKENBTkNFTCwJCWNhbmNhcmdzLAlyZXMpLAorCVBST0MoVU5MT0NLLAkJdW5sb2NrYXJncywJcmVzKSwKKwlQUk9DKEdSQU5URUQsCQl0ZXN0YXJncywJcmVzKSwKKwlQUk9DKFRFU1RfTVNHLAkJdGVzdGFyZ3MsCW5vcmVwKSwKKwlQUk9DKExPQ0tfTVNHLAkJbG9ja2FyZ3MsCW5vcmVwKSwKKwlQUk9DKENBTkNFTF9NU0csCWNhbmNhcmdzLAlub3JlcCksCisJUFJPQyhVTkxPQ0tfTVNHLAl1bmxvY2thcmdzLAlub3JlcCksCisJUFJPQyhHUkFOVEVEX01TRywJdGVzdGFyZ3MsCW5vcmVwKSwKKwlQUk9DKFRFU1RfUkVTLAkJdGVzdHJlcywJbm9yZXApLAorCVBST0MoTE9DS19SRVMsCQlyZXMsCQlub3JlcCksCisJUFJPQyhDQU5DRUxfUkVTLAlyZXMsCQlub3JlcCksCisJUFJPQyhVTkxPQ0tfUkVTLAlyZXMsCQlub3JlcCksCisJUFJPQyhHUkFOVEVEX1JFUywJcmVzLAkJbm9yZXApLAorfTsKKworc3RhdGljIHN0cnVjdCBycGNfdmVyc2lvbglubG1fdmVyc2lvbjEgPSB7CisJCS5udW1iZXIJCT0gMSwKKwkJLm5ycHJvY3MJPSBBUlJBWV9TSVpFKG5sbV9wcm9jZWR1cmVzKSwKKwkJLnByb2NzCQk9IG5sbV9wcm9jZWR1cmVzLAorfTsKKworc3RhdGljIHN0cnVjdCBycGNfdmVyc2lvbglubG1fdmVyc2lvbjMgPSB7CisJCS5udW1iZXIJCT0gMywKKwkJLm5ycHJvY3MJPSBBUlJBWV9TSVpFKG5sbV9wcm9jZWR1cmVzKSwKKwkJLnByb2NzCQk9IG5sbV9wcm9jZWR1cmVzLAorfTsKKworc3RhdGljIHN0cnVjdCBycGNfdmVyc2lvbgkqbmxtX3ZlcnNpb25zW10gPSB7CisJWzFdID0gJm5sbV92ZXJzaW9uMSwKKwlbM10gPSAmbmxtX3ZlcnNpb24zLAorI2lmZGVmIENPTkZJR19MT0NLRF9WNAorCVs0XSA9ICZubG1fdmVyc2lvbjQsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgcnBjX3N0YXQJCW5sbV9ycGNfc3RhdHM7CisKK3N0cnVjdCBycGNfcHJvZ3JhbQkJbmxtX3Byb2dyYW0gPSB7CisJCS5uYW1lCQk9ICJsb2NrZCIsCisJCS5udW1iZXIJCT0gTkxNX1BST0dSQU0sCisJCS5ucnZlcnMJCT0gQVJSQVlfU0laRShubG1fdmVyc2lvbnMpLAorCQkudmVyc2lvbgk9IG5sbV92ZXJzaW9ucywKKwkJLnN0YXRzCQk9ICZubG1fcnBjX3N0YXRzLAorfTsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL2hvc3QuYyBiL2ZzL2xvY2tkL2hvc3QuYwppbmRleCBlZDBjNTlmLi41ZjFiY2IyIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9ob3N0LmMKKysrIGIvZnMvbG9ja2QvaG9zdC5jCkBAIC0yNSw5ICsyNSwyMiBAQAogI2RlZmluZSBOTE1fSE9TVF9FWFBJUkUJCSgzMDAgKiBIWikKICNkZWZpbmUgTkxNX0hPU1RfQ09MTEVDVAkoMTIwICogSFopCiAKLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZAlubG1faG9zdHNbTkxNX0hPU1RfTlJIQVNIXTsKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZAlubG1fc2VydmVyX2hvc3RzW05MTV9IT1NUX05SSEFTSF07CitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQJbmxtX2NsaWVudF9ob3N0c1tOTE1fSE9TVF9OUkhBU0hdOworCisjZGVmaW5lIGZvcl9lYWNoX2hvc3QoaG9zdCwgcG9zLCBjaGFpbiwgdGFibGUpIFwKKwlmb3IgKChjaGFpbikgPSAodGFibGUpOyBcCisJICAgICAoY2hhaW4pIDwgKHRhYmxlKSArIE5MTV9IT1NUX05SSEFTSDsgKysoY2hhaW4pKSBcCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KChob3N0KSwgKHBvcyksIChjaGFpbiksIGhfaGFzaCkKKworI2RlZmluZSBmb3JfZWFjaF9ob3N0X3NhZmUoaG9zdCwgcG9zLCBuZXh0LCBjaGFpbiwgdGFibGUpIFwKKwlmb3IgKChjaGFpbikgPSAodGFibGUpOyBcCisJICAgICAoY2hhaW4pIDwgKHRhYmxlKSArIE5MTV9IT1NUX05SSEFTSDsgKysoY2hhaW4pKSBcCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoKGhvc3QpLCAocG9zKSwgKG5leHQpLCBcCisJCQkJCQkoY2hhaW4pLCBoX2hhc2gpCisKIHN0YXRpYyB1bnNpZ25lZCBsb25nCQluZXh0X2djOwotc3RhdGljIGludAkJCW5yaG9zdHM7CitzdGF0aWMgdW5zaWduZWQgbG9uZwkJbnJob3N0czsKIHN0YXRpYyBERUZJTkVfTVVURVgobmxtX2hvc3RfbXV0ZXgpOwogCiBzdGF0aWMgdm9pZAkJCW5sbV9nY19ob3N0cyh2b2lkKTsKQEAgLTQwLDggKzUzLDYgQEAKIAljb25zdCB1MzIJCXZlcnNpb247CS8qIE5MTSB2ZXJzaW9uIHRvIHNlYXJjaCBmb3IgKi8KIAljb25zdCBjaGFyCQkqaG9zdG5hbWU7CS8qIHJlbW90ZSdzIGhvc3RuYW1lICovCiAJY29uc3Qgc2l6ZV90CQlob3N0bmFtZV9sZW47CS8qIGl0J3MgbGVuZ3RoICovCi0JY29uc3Qgc3RydWN0IHNvY2thZGRyCSpzcmNfc2FwOwkvKiBvdXIgYWRkcmVzcyAob3B0aW9uYWwpICovCi0JY29uc3Qgc2l6ZV90CQlzcmNfbGVuOwkvKiBpdCdzIGxlbmd0aCAqLwogCWNvbnN0IGludAkJbm9yZXN2cG9ydDsJLyogdXNlIG5vbi1wcml2IHBvcnQgKi8KIH07CiAKQEAgLTg4LDEyNyArOTksODMgQEAKIH0KIAogLyoKLSAqIENvbW1vbiBob3N0IGxvb2t1cCByb3V0aW5lIGZvciBzZXJ2ZXIgJiBjbGllbnQKKyAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIG5sbV9ob3N0LiAgQ29tbW9uIHRvIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbmxtX2hvc3QgKm5sbV9sb29rdXBfaG9zdChzdHJ1Y3QgbmxtX2xvb2t1cF9ob3N0X2luZm8gKm5pKQorc3RhdGljIHN0cnVjdCBubG1faG9zdCAqbmxtX2FsbG9jX2hvc3Qoc3RydWN0IG5sbV9sb29rdXBfaG9zdF9pbmZvICpuaSwKKwkJCQkgICAgICAgc3RydWN0IG5zbV9oYW5kbGUgKm5zbSkKIHsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47Ci0Jc3RydWN0IGhsaXN0X25vZGUgKnBvczsKLQlzdHJ1Y3QgbmxtX2hvc3QJKmhvc3Q7Ci0Jc3RydWN0IG5zbV9oYW5kbGUgKm5zbSA9IE5VTEw7CisJc3RydWN0IG5sbV9ob3N0ICpob3N0ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAKLQltdXRleF9sb2NrKCZubG1faG9zdF9tdXRleCk7Ci0KLQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBuZXh0X2djKSkKLQkJbmxtX2djX2hvc3RzKCk7Ci0KLQkvKiBXZSBtYXkga2VlcCBzZXZlcmFsIG5sbV9ob3N0IG9iamVjdHMgZm9yIGEgcGVlciwgYmVjYXVzZSBlYWNoCi0JICogbmxtX2hvc3QgaXMgaWRlbnRpZmllZCBieQotCSAqIChhZGRyZXNzLCBwcm90b2NvbCwgdmVyc2lvbiwgc2VydmVyL2NsaWVudCkKLQkgKiBXZSBjb3VsZCBwcm9iYWJseSBzaW1wbGlmeSB0aGlzIGEgbGl0dGxlIGJ5IHB1dHRpbmcgYWxsIHRob3NlCi0JICogZGlmZmVyZW50IE5MTSBycGNfY2xpZW50cyBpbnRvIG9uZSBzaW5nbGUgbmxtX2hvc3Qgb2JqZWN0LgotCSAqIFRoaXMgd291bGQgYWxsb3cgdXMgdG8gaGF2ZSBvbmUgbmxtX2hvc3QgcGVyIGFkZHJlc3MuCi0JICovCi0JY2hhaW4gPSAmbmxtX2hvc3RzW25sbV9oYXNoX2FkZHJlc3MobmktPnNhcCldOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvc3QsIHBvcywgY2hhaW4sIGhfaGFzaCkgewotCQlpZiAoIXJwY19jbXBfYWRkcihubG1fYWRkcihob3N0KSwgbmktPnNhcCkpCi0JCQljb250aW51ZTsKLQotCQkvKiBTZWUgaWYgd2UgaGF2ZSBhbiBOU00gaGFuZGxlIGZvciB0aGlzIGNsaWVudCAqLwotCQlpZiAoIW5zbSkKLQkJCW5zbSA9IGhvc3QtPmhfbnNtaGFuZGxlOwotCi0JCWlmIChob3N0LT5oX3Byb3RvICE9IG5pLT5wcm90b2NvbCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoaG9zdC0+aF92ZXJzaW9uICE9IG5pLT52ZXJzaW9uKQotCQkJY29udGludWU7Ci0JCWlmIChob3N0LT5oX3NlcnZlciAhPSBuaS0+c2VydmVyKQotCQkJY29udGludWU7Ci0JCWlmIChuaS0+c2VydmVyICYmIG5pLT5zcmNfbGVuICE9IDAgJiYKLQkJICAgICFycGNfY21wX2FkZHIobmxtX3NyY2FkZHIoaG9zdCksIG5pLT5zcmNfc2FwKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIE1vdmUgdG8gaGVhZCBvZiBoYXNoIGNoYWluLiAqLwotCQlobGlzdF9kZWwoJmhvc3QtPmhfaGFzaCk7Ci0JCWhsaXN0X2FkZF9oZWFkKCZob3N0LT5oX2hhc2gsIGNoYWluKTsKLQotCQlubG1fZ2V0X2hvc3QoaG9zdCk7Ci0JCWRwcmludGsoImxvY2tkOiBubG1fbG9va3VwX2hvc3QgZm91bmQgaG9zdCAlcyAoJXMpXG4iLAotCQkJCWhvc3QtPmhfbmFtZSwgaG9zdC0+aF9hZGRyYnVmKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBUaGUgaG9zdCB3YXNuJ3QgaW4gb3VyIGhhc2ggdGFibGUuICBJZiB3ZSBkb24ndAotCSAqIGhhdmUgYW4gTlNNIGhhbmRsZSBmb3IgaXQgeWV0LCBjcmVhdGUgb25lLgotCSAqLwotCWlmIChuc20pCisJaWYgKG5zbSAhPSBOVUxMKQogCQlhdG9taWNfaW5jKCZuc20tPnNtX2NvdW50KTsKIAllbHNlIHsKIAkJaG9zdCA9IE5VTEw7CiAJCW5zbSA9IG5zbV9nZXRfaGFuZGxlKG5pLT5zYXAsIG5pLT5zYWxlbiwKIAkJCQkJbmktPmhvc3RuYW1lLCBuaS0+aG9zdG5hbWVfbGVuKTsKLQkJaWYgKCFuc20pIHsKLQkJCWRwcmludGsoImxvY2tkOiBubG1fbG9va3VwX2hvc3QgZmFpbGVkOyAiCi0JCQkJIm5vIG5zbSBoYW5kbGVcbiIpOworCQlpZiAodW5saWtlbHkobnNtID09IE5VTEwpKSB7CisJCQlkcHJpbnRrKCJsb2NrZDogJXMgZmFpbGVkOyBubyBuc20gaGFuZGxlXG4iLAorCQkJCV9fZnVuY19fKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQogCi0JaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKCpob3N0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFob3N0KSB7CisJaG9zdCA9IGttYWxsb2Moc2l6ZW9mKCpob3N0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KGhvc3QgPT0gTlVMTCkpIHsKKwkJZHByaW50aygibG9ja2Q6ICVzIGZhaWxlZDsgbm8gbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCW5zbV9yZWxlYXNlKG5zbSk7Ci0JCWRwcmludGsoImxvY2tkOiBubG1fbG9va3VwX2hvc3QgZmFpbGVkOyBubyBtZW1vcnlcbiIpOwogCQlnb3RvIG91dDsKIAl9Ci0JaG9zdC0+aF9uYW1lCSAgID0gbnNtLT5zbV9uYW1lOwotCWhvc3QtPmhfYWRkcmJ1ZiAgICA9IG5zbS0+c21fYWRkcmJ1ZjsKKwogCW1lbWNweShubG1fYWRkcihob3N0KSwgbmktPnNhcCwgbmktPnNhbGVuKTsKLQlob3N0LT5oX2FkZHJsZW4gPSBuaS0+c2FsZW47CisJaG9zdC0+aF9hZGRybGVuICAgID0gbmktPnNhbGVuOwogCXJwY19zZXRfcG9ydChubG1fYWRkcihob3N0KSwgMCk7Ci0JbWVtY3B5KG5sbV9zcmNhZGRyKGhvc3QpLCBuaS0+c3JjX3NhcCwgbmktPnNyY19sZW4pOwotCWhvc3QtPmhfc3JjYWRkcmxlbiA9IG5pLT5zcmNfbGVuOworCWhvc3QtPmhfc3JjYWRkcmxlbiA9IDA7CisKKwlob3N0LT5oX3JwY2NsbnQgICAgPSBOVUxMOworCWhvc3QtPmhfbmFtZQkgICA9IG5zbS0+c21fbmFtZTsKIAlob3N0LT5oX3ZlcnNpb24gICAgPSBuaS0+dmVyc2lvbjsKIAlob3N0LT5oX3Byb3RvICAgICAgPSBuaS0+cHJvdG9jb2w7Ci0JaG9zdC0+aF9ycGNjbG50ICAgID0gTlVMTDsKLQltdXRleF9pbml0KCZob3N0LT5oX211dGV4KTsKLQlob3N0LT5oX25leHRyZWJpbmQgPSBqaWZmaWVzICsgTkxNX0hPU1RfUkVCSU5EOwotCWhvc3QtPmhfZXhwaXJlcyAgICA9IGppZmZpZXMgKyBOTE1fSE9TVF9FWFBJUkU7Ci0JYXRvbWljX3NldCgmaG9zdC0+aF9jb3VudCwgMSk7CisJaG9zdC0+aF9yZWNsYWltaW5nID0gMDsKKwlob3N0LT5oX3NlcnZlciAgICAgPSBuaS0+c2VydmVyOworCWhvc3QtPmhfbm9yZXN2cG9ydCA9IG5pLT5ub3Jlc3Zwb3J0OworCWhvc3QtPmhfaW51c2UgICAgICA9IDA7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaG9zdC0+aF9ncmFjZXdhaXQpOwogCWluaXRfcndzZW0oJmhvc3QtPmhfcndzZW0pOwotCWhvc3QtPmhfc3RhdGUgICAgICA9IDA7CQkJLyogcHNldWRvIE5TTSBzdGF0ZSAqLwotCWhvc3QtPmhfbnNtc3RhdGUgICA9IDA7CQkJLyogcmVhbCBOU00gc3RhdGUgKi8KLQlob3N0LT5oX25zbWhhbmRsZSAgPSBuc207Ci0JaG9zdC0+aF9zZXJ2ZXIJICAgPSBuaS0+c2VydmVyOwotCWhvc3QtPmhfbm9yZXN2cG9ydCA9IG5pLT5ub3Jlc3Zwb3J0OwotCWhsaXN0X2FkZF9oZWFkKCZob3N0LT5oX2hhc2gsIGNoYWluKTsKKwlob3N0LT5oX3N0YXRlICAgICAgPSAwOworCWhvc3QtPmhfbnNtc3RhdGUgICA9IDA7CisJaG9zdC0+aF9waWRjb3VudCAgID0gMDsKKwlhdG9taWNfc2V0KCZob3N0LT5oX2NvdW50LCAxKTsKKwltdXRleF9pbml0KCZob3N0LT5oX211dGV4KTsKKwlob3N0LT5oX25leHRyZWJpbmQgPSBub3cgKyBOTE1fSE9TVF9SRUJJTkQ7CisJaG9zdC0+aF9leHBpcmVzICAgID0gbm93ICsgTkxNX0hPU1RfRVhQSVJFOwogCUlOSVRfTElTVF9IRUFEKCZob3N0LT5oX2xvY2tvd25lcnMpOwogCXNwaW5fbG9ja19pbml0KCZob3N0LT5oX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZob3N0LT5oX2dyYW50ZWQpOwogCUlOSVRfTElTVF9IRUFEKCZob3N0LT5oX3JlY2xhaW0pOwotCi0JbnJob3N0cysrOwotCi0JZHByaW50aygibG9ja2Q6IG5sbV9sb29rdXBfaG9zdCBjcmVhdGVkIGhvc3QgJXNcbiIsCi0JCQlob3N0LT5oX25hbWUpOworCWhvc3QtPmhfbnNtaGFuZGxlICA9IG5zbTsKKwlob3N0LT5oX2FkZHJidWYgICAgPSBuc20tPnNtX2FkZHJidWY7CiAKIG91dDoKLQltdXRleF91bmxvY2soJm5sbV9ob3N0X211dGV4KTsKIAlyZXR1cm4gaG9zdDsKIH0KIAogLyoKLSAqIERlc3Ryb3kgYSBob3N0CisgKiBEZXN0cm95IGFuIG5sbV9ob3N0IGFuZCBmcmVlIGFzc29jaWF0ZWQgcmVzb3VyY2VzCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCBubG1faG9zdF9tdXRleC4KICAqLwotc3RhdGljIHZvaWQKLW5sbV9kZXN0cm95X2hvc3Qoc3RydWN0IG5sbV9ob3N0ICpob3N0KQorc3RhdGljIHZvaWQgbmxtX2Rlc3Ryb3lfaG9zdF9sb2NrZWQoc3RydWN0IG5sbV9ob3N0ICpob3N0KQogewogCXN0cnVjdCBycGNfY2xudAkqY2xudDsKIAorCWRwcmludGsoImxvY2tkOiBkZXN0cm95IGhvc3QgJXNcbiIsIGhvc3QtPmhfbmFtZSk7CisKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmhvc3QtPmhfbG9ja293bmVycykpOwogCUJVR19PTihhdG9taWNfcmVhZCgmaG9zdC0+aF9jb3VudCkpOwogCisJaGxpc3RfZGVsX2luaXQoJmhvc3QtPmhfaGFzaCk7CisKIAluc21fdW5tb25pdG9yKGhvc3QpOwogCW5zbV9yZWxlYXNlKGhvc3QtPmhfbnNtaGFuZGxlKTsKIApAQCAtMjE2LDYgKzE4Myw4IEBACiAJaWYgKGNsbnQgIT0gTlVMTCkKIAkJcnBjX3NodXRkb3duX2NsaWVudChjbG50KTsKIAlrZnJlZShob3N0KTsKKworCW5yaG9zdHMtLTsKIH0KIAogLyoqCkBAIC0yNDksMTIgKzIxOCw3NiBAQAogCQkuaG9zdG5hbWVfbGVuCT0gc3RybGVuKGhvc3RuYW1lKSwKIAkJLm5vcmVzdnBvcnQJPSBub3Jlc3Zwb3J0LAogCX07CisJc3RydWN0IGhsaXN0X2hlYWQgKmNoYWluOworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisJc3RydWN0IG5sbV9ob3N0CSpob3N0OworCXN0cnVjdCBuc21faGFuZGxlICpuc20gPSBOVUxMOwogCiAJZHByaW50aygibG9ja2Q6ICVzKGhvc3Q9JyVzJywgdmVycz0ldSwgcHJvdG89JXMpXG4iLCBfX2Z1bmNfXywKIAkJCShob3N0bmFtZSA/IGhvc3RuYW1lIDogIjxub25lPiIpLCB2ZXJzaW9uLAogCQkJKHByb3RvY29sID09IElQUFJPVE9fVURQID8gInVkcCIgOiAidGNwIikpOwogCi0JcmV0dXJuIG5sbV9sb29rdXBfaG9zdCgmbmkpOworCW11dGV4X2xvY2soJm5sbV9ob3N0X211dGV4KTsKKworCWNoYWluID0gJm5sbV9jbGllbnRfaG9zdHNbbmxtX2hhc2hfYWRkcmVzcyhzYXApXTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShob3N0LCBwb3MsIGNoYWluLCBoX2hhc2gpIHsKKwkJaWYgKCFycGNfY21wX2FkZHIobmxtX2FkZHIoaG9zdCksIHNhcCkpCisJCQljb250aW51ZTsKKworCQkvKiBTYW1lIGFkZHJlc3MuIFNoYXJlIGFuIE5TTSBoYW5kbGUgaWYgd2UgYWxyZWFkeSBoYXZlIG9uZSAqLworCQlpZiAobnNtID09IE5VTEwpCisJCQluc20gPSBob3N0LT5oX25zbWhhbmRsZTsKKworCQlpZiAoaG9zdC0+aF9wcm90byAhPSBwcm90b2NvbCkKKwkJCWNvbnRpbnVlOworCQlpZiAoaG9zdC0+aF92ZXJzaW9uICE9IHZlcnNpb24pCisJCQljb250aW51ZTsKKworCQlubG1fZ2V0X2hvc3QoaG9zdCk7CisJCWRwcmludGsoImxvY2tkOiAlcyBmb3VuZCBob3N0ICVzICglcylcbiIsIF9fZnVuY19fLAorCQkJaG9zdC0+aF9uYW1lLCBob3N0LT5oX2FkZHJidWYpOworCQlnb3RvIG91dDsKKwl9CisKKwlob3N0ID0gbmxtX2FsbG9jX2hvc3QoJm5pLCBuc20pOworCWlmICh1bmxpa2VseShob3N0ID09IE5VTEwpKQorCQlnb3RvIG91dDsKKworCWhsaXN0X2FkZF9oZWFkKCZob3N0LT5oX2hhc2gsIGNoYWluKTsKKwlucmhvc3RzKys7CisKKwlkcHJpbnRrKCJsb2NrZDogJXMgY3JlYXRlZCBob3N0ICVzICglcylcbiIsIF9fZnVuY19fLAorCQlob3N0LT5oX25hbWUsIGhvc3QtPmhfYWRkcmJ1Zik7CisKK291dDoKKwltdXRleF91bmxvY2soJm5sbV9ob3N0X211dGV4KTsKKwlyZXR1cm4gaG9zdDsKK30KKworLyoqCisgKiBubG1jbG50X3JlbGVhc2VfaG9zdCAtIHJlbGVhc2UgY2xpZW50IG5sbV9ob3N0CisgKiBAaG9zdDogbmxtX2hvc3QgdG8gcmVsZWFzZQorICoKKyAqLwordm9pZCBubG1jbG50X3JlbGVhc2VfaG9zdChzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QpCit7CisJaWYgKGhvc3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZHByaW50aygibG9ja2Q6IHJlbGVhc2UgY2xpZW50IGhvc3QgJXNcbiIsIGhvc3QtPmhfbmFtZSk7CisKKwlCVUdfT04oYXRvbWljX3JlYWQoJmhvc3QtPmhfY291bnQpIDwgMCk7CisJQlVHX09OKGhvc3QtPmhfc2VydmVyKTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZob3N0LT5oX2NvdW50KSkgeworCQlCVUdfT04oIWxpc3RfZW1wdHkoJmhvc3QtPmhfbG9ja293bmVycykpOworCQlCVUdfT04oIWxpc3RfZW1wdHkoJmhvc3QtPmhfZ3JhbnRlZCkpOworCQlCVUdfT04oIWxpc3RfZW1wdHkoJmhvc3QtPmhfcmVjbGFpbSkpOworCisJCW11dGV4X2xvY2soJm5sbV9ob3N0X211dGV4KTsKKwkJbmxtX2Rlc3Ryb3lfaG9zdF9sb2NrZWQoaG9zdCk7CisJCW11dGV4X3VubG9jaygmbmxtX2hvc3RfbXV0ZXgpOworCX0KIH0KIAogLyoqCkBAIC0yNzksMTIgKzMxMiwxOCBAQAogCQkJCSAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKIAkJCQkgICAgY29uc3Qgc2l6ZV90IGhvc3RuYW1lX2xlbikKIHsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKwlzdHJ1Y3QgbmxtX2hvc3QJKmhvc3QgPSBOVUxMOworCXN0cnVjdCBuc21faGFuZGxlICpuc20gPSBOVUxMOwogCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW4gPSB7CiAJCS5zaW5fZmFtaWx5CT0gQUZfSU5FVCwKIAl9OwogCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNiA9IHsKIAkJLnNpbjZfZmFtaWx5CT0gQUZfSU5FVDYsCiAJfTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKnNyY19zYXA7CisJc2l6ZV90IHNyY19sZW4gPSBycXN0cC0+cnFfYWRkcmxlbjsKIAlzdHJ1Y3QgbmxtX2xvb2t1cF9ob3N0X2luZm8gbmkgPSB7CiAJCS5zZXJ2ZXIJCT0gMSwKIAkJLnNhcAkJPSBzdmNfYWRkcihycXN0cCksCkBAIC0yOTMsMjcgKzMzMiw5MSBAQAogCQkudmVyc2lvbgk9IHJxc3RwLT5ycV92ZXJzLAogCQkuaG9zdG5hbWUJPSBob3N0bmFtZSwKIAkJLmhvc3RuYW1lX2xlbgk9IGhvc3RuYW1lX2xlbiwKLQkJLnNyY19sZW4JPSBycXN0cC0+cnFfYWRkcmxlbiwKIAl9OwogCiAJZHByaW50aygibG9ja2Q6ICVzKGhvc3Q9JyUqcycsIHZlcnM9JXUsIHByb3RvPSVzKVxuIiwgX19mdW5jX18sCiAJCQkoaW50KWhvc3RuYW1lX2xlbiwgaG9zdG5hbWUsIHJxc3RwLT5ycV92ZXJzLAogCQkJKHJxc3RwLT5ycV9wcm90ID09IElQUFJPVE9fVURQID8gInVkcCIgOiAidGNwIikpOwogCisJbXV0ZXhfbG9jaygmbmxtX2hvc3RfbXV0ZXgpOworCiAJc3dpdGNoIChuaS5zYXAtPnNhX2ZhbWlseSkgewogCWNhc2UgQUZfSU5FVDoKIAkJc2luLnNpbl9hZGRyLnNfYWRkciA9IHJxc3RwLT5ycV9kYWRkci5hZGRyLnNfYWRkcjsKLQkJbmkuc3JjX3NhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luOworCQlzcmNfc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW47CiAJCWJyZWFrOwogCWNhc2UgQUZfSU5FVDY6CiAJCWlwdjZfYWRkcl9jb3B5KCZzaW42LnNpbjZfYWRkciwgJnJxc3RwLT5ycV9kYWRkci5hZGRyNik7Ci0JCW5pLnNyY19zYXAgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjY7CisJCXNyY19zYXAgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBOVUxMOworCQlkcHJpbnRrKCJsb2NrZDogJXMgZmFpbGVkOyB1bnJlY29nbml6ZWQgYWRkcmVzcyBmYW1pbHlcbiIsCisJCQlfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OwogCX0KIAotCXJldHVybiBubG1fbG9va3VwX2hvc3QoJm5pKTsKKwlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBuZXh0X2djKSkKKwkJbmxtX2djX2hvc3RzKCk7CisKKwljaGFpbiA9ICZubG1fc2VydmVyX2hvc3RzW25sbV9oYXNoX2FkZHJlc3Mobmkuc2FwKV07CisJaGxpc3RfZm9yX2VhY2hfZW50cnkoaG9zdCwgcG9zLCBjaGFpbiwgaF9oYXNoKSB7CisJCWlmICghcnBjX2NtcF9hZGRyKG5sbV9hZGRyKGhvc3QpLCBuaS5zYXApKQorCQkJY29udGludWU7CisKKwkJLyogU2FtZSBhZGRyZXNzLiBTaGFyZSBhbiBOU00gaGFuZGxlIGlmIHdlIGFscmVhZHkgaGF2ZSBvbmUgKi8KKwkJaWYgKG5zbSA9PSBOVUxMKQorCQkJbnNtID0gaG9zdC0+aF9uc21oYW5kbGU7CisKKwkJaWYgKGhvc3QtPmhfcHJvdG8gIT0gbmkucHJvdG9jb2wpCisJCQljb250aW51ZTsKKwkJaWYgKGhvc3QtPmhfdmVyc2lvbiAhPSBuaS52ZXJzaW9uKQorCQkJY29udGludWU7CisJCWlmICghcnBjX2NtcF9hZGRyKG5sbV9zcmNhZGRyKGhvc3QpLCBzcmNfc2FwKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE1vdmUgdG8gaGVhZCBvZiBoYXNoIGNoYWluLiAqLworCQlobGlzdF9kZWwoJmhvc3QtPmhfaGFzaCk7CisJCWhsaXN0X2FkZF9oZWFkKCZob3N0LT5oX2hhc2gsIGNoYWluKTsKKworCQlubG1fZ2V0X2hvc3QoaG9zdCk7CisJCWRwcmludGsoImxvY2tkOiAlcyBmb3VuZCBob3N0ICVzICglcylcbiIsCisJCQlfX2Z1bmNfXywgaG9zdC0+aF9uYW1lLCBob3N0LT5oX2FkZHJidWYpOworCQlnb3RvIG91dDsKKwl9CisKKwlob3N0ID0gbmxtX2FsbG9jX2hvc3QoJm5pLCBuc20pOworCWlmICh1bmxpa2VseShob3N0ID09IE5VTEwpKQorCQlnb3RvIG91dDsKKworCW1lbWNweShubG1fc3JjYWRkcihob3N0KSwgc3JjX3NhcCwgc3JjX2xlbik7CisJaG9zdC0+aF9zcmNhZGRybGVuID0gc3JjX2xlbjsKKwlobGlzdF9hZGRfaGVhZCgmaG9zdC0+aF9oYXNoLCBjaGFpbik7CisJbnJob3N0cysrOworCisJZHByaW50aygibG9ja2Q6ICVzIGNyZWF0ZWQgaG9zdCAlcyAoJXMpXG4iLAorCQlfX2Z1bmNfXywgaG9zdC0+aF9uYW1lLCBob3N0LT5oX2FkZHJidWYpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZubG1faG9zdF9tdXRleCk7CisJcmV0dXJuIGhvc3Q7Cit9CisKKy8qKgorICogbmxtc3ZjX3JlbGVhc2VfaG9zdCAtIHJlbGVhc2Ugc2VydmVyIG5sbV9ob3N0CisgKiBAaG9zdDogbmxtX2hvc3QgdG8gcmVsZWFzZQorICoKKyAqIEhvc3QgaXMgZGVzdHJveWVkIGxhdGVyIGluIG5sbV9nY19ob3N0KCkuCisgKi8KK3ZvaWQgbmxtc3ZjX3JlbGVhc2VfaG9zdChzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QpCit7CisJaWYgKGhvc3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZHByaW50aygibG9ja2Q6IHJlbGVhc2Ugc2VydmVyIGhvc3QgJXNcbiIsIGhvc3QtPmhfbmFtZSk7CisKKwlCVUdfT04oYXRvbWljX3JlYWQoJmhvc3QtPmhfY291bnQpIDwgMCk7CisJQlVHX09OKCFob3N0LT5oX3NlcnZlcik7CisJYXRvbWljX2RlYygmaG9zdC0+aF9jb3VudCk7CiB9CiAKIC8qCkBAIC00MTMsMjAgKzUxNiwyOCBAQAogCXJldHVybiBob3N0OwogfQogCi0vKgotICogUmVsZWFzZSBOTE0gaG9zdCBhZnRlciB1c2UKLSAqLwotdm9pZCBubG1fcmVsZWFzZV9ob3N0KHN0cnVjdCBubG1faG9zdCAqaG9zdCkKK3N0YXRpYyBzdHJ1Y3QgbmxtX2hvc3QgKm5leHRfaG9zdF9zdGF0ZShzdHJ1Y3QgaGxpc3RfaGVhZCAqY2FjaGUsCisJCQkJCXN0cnVjdCBuc21faGFuZGxlICpuc20sCisJCQkJCWNvbnN0IHN0cnVjdCBubG1fcmVib290ICppbmZvKQogewotCWlmIChob3N0ICE9IE5VTEwpIHsKLQkJZHByaW50aygibG9ja2Q6IHJlbGVhc2UgaG9zdCAlc1xuIiwgaG9zdC0+aF9uYW1lKTsKLQkJQlVHX09OKGF0b21pY19yZWFkKCZob3N0LT5oX2NvdW50KSA8IDApOwotCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaG9zdC0+aF9jb3VudCkpIHsKLQkJCUJVR19PTighbGlzdF9lbXB0eSgmaG9zdC0+aF9sb2Nrb3duZXJzKSk7Ci0JCQlCVUdfT04oIWxpc3RfZW1wdHkoJmhvc3QtPmhfZ3JhbnRlZCkpOwotCQkJQlVHX09OKCFsaXN0X2VtcHR5KCZob3N0LT5oX3JlY2xhaW0pKTsKKwlzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QgPSBOVUxMOworCXN0cnVjdCBobGlzdF9oZWFkICpjaGFpbjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCisJbXV0ZXhfbG9jaygmbmxtX2hvc3RfbXV0ZXgpOworCWZvcl9lYWNoX2hvc3QoaG9zdCwgcG9zLCBjaGFpbiwgY2FjaGUpIHsKKwkJaWYgKGhvc3QtPmhfbnNtaGFuZGxlID09IG5zbQorCQkgICAgJiYgaG9zdC0+aF9uc21zdGF0ZSAhPSBpbmZvLT5zdGF0ZSkgeworCQkJaG9zdC0+aF9uc21zdGF0ZSA9IGluZm8tPnN0YXRlOworCQkJaG9zdC0+aF9zdGF0ZSsrOworCisJCQlubG1fZ2V0X2hvc3QoaG9zdCk7CisJCQlnb3RvIG91dDsKIAkJfQogCX0KK291dDoKKwltdXRleF91bmxvY2soJm5sbV9ob3N0X211dGV4KTsKKwlyZXR1cm4gaG9zdDsKIH0KIAogLyoqCkBAIC00MzgsOCArNTQ5LDYgQEAKICAqLwogdm9pZCBubG1faG9zdF9yZWJvb3RlZChjb25zdCBzdHJ1Y3QgbmxtX3JlYm9vdCAqaW5mbykKIHsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47Ci0Jc3RydWN0IGhsaXN0X25vZGUgKnBvczsKIAlzdHJ1Y3QgbnNtX2hhbmRsZSAqbnNtOwogCXN0cnVjdCBubG1faG9zdAkqaG9zdDsKIApAQCAtNDUyLDMyICs1NjEsMTUgQEAKIAkgKiBsb2NrIGZvciB0aGlzLgogCSAqIFRvIGF2b2lkIHByb2Nlc3NpbmcgYSBob3N0IHNldmVyYWwgdGltZXMsIHdlIG1hdGNoIHRoZSBuc21zdGF0ZS4KIAkgKi8KLWFnYWluOgltdXRleF9sb2NrKCZubG1faG9zdF9tdXRleCk7Ci0JZm9yIChjaGFpbiA9IG5sbV9ob3N0czsgY2hhaW4gPCBubG1faG9zdHMgKyBOTE1fSE9TVF9OUkhBU0g7ICsrY2hhaW4pIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoaG9zdCwgcG9zLCBjaGFpbiwgaF9oYXNoKSB7Ci0JCQlpZiAoaG9zdC0+aF9uc21oYW5kbGUgPT0gbnNtCi0JCQkgJiYgaG9zdC0+aF9uc21zdGF0ZSAhPSBpbmZvLT5zdGF0ZSkgewotCQkJCWhvc3QtPmhfbnNtc3RhdGUgPSBpbmZvLT5zdGF0ZTsKLQkJCQlob3N0LT5oX3N0YXRlKys7Ci0KLQkJCQlubG1fZ2V0X2hvc3QoaG9zdCk7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZubG1faG9zdF9tdXRleCk7Ci0KLQkJCQlpZiAoaG9zdC0+aF9zZXJ2ZXIpIHsKLQkJCQkJLyogV2UncmUgc2VydmVyIGZvciB0aGlzIGd1eSwganVzdCBkaXRjaAotCQkJCQkgKiBhbGwgdGhlIGxvY2tzIGhlIGhlbGQuICovCi0JCQkJCW5sbXN2Y19mcmVlX2hvc3RfcmVzb3VyY2VzKGhvc3QpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIEhlJ3MgdGhlIHNlcnZlciwgaW5pdGlhdGUgbG9jayByZWNvdmVyeS4gKi8KLQkJCQkJbmxtY2xudF9yZWNvdmVyeShob3N0KTsKLQkJCQl9Ci0KLQkJCQlubG1fcmVsZWFzZV9ob3N0KGhvc3QpOwotCQkJCWdvdG8gYWdhaW47Ci0JCQl9Ci0JCX0KKwl3aGlsZSAoKGhvc3QgPSBuZXh0X2hvc3Rfc3RhdGUobmxtX3NlcnZlcl9ob3N0cywgbnNtLCBpbmZvKSkgIT0gTlVMTCkgeworCQlubG1zdmNfZnJlZV9ob3N0X3Jlc291cmNlcyhob3N0KTsKKwkJbmxtc3ZjX3JlbGVhc2VfaG9zdChob3N0KTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZubG1faG9zdF9tdXRleCk7CisJd2hpbGUgKChob3N0ID0gbmV4dF9ob3N0X3N0YXRlKG5sbV9jbGllbnRfaG9zdHMsIG5zbSwgaW5mbykpICE9IE5VTEwpIHsKKwkJbmxtY2xudF9yZWNvdmVyeShob3N0KTsKKwkJbmxtY2xudF9yZWxlYXNlX2hvc3QoaG9zdCk7CisJfQorCiAJbnNtX3JlbGVhc2UobnNtKTsKIH0KIApAQCAtNDk3LDEzICs1ODksMTEgQEAKIAogCS8qIEZpcnN0LCBtYWtlIGFsbCBob3N0cyBlbGlnaWJsZSBmb3IgZ2MgKi8KIAlkcHJpbnRrKCJsb2NrZDogbnVraW5nIGFsbCBob3N0cy4uLlxuIik7Ci0JZm9yIChjaGFpbiA9IG5sbV9ob3N0czsgY2hhaW4gPCBubG1faG9zdHMgKyBOTE1fSE9TVF9OUkhBU0g7ICsrY2hhaW4pIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoaG9zdCwgcG9zLCBjaGFpbiwgaF9oYXNoKSB7Ci0JCQlob3N0LT5oX2V4cGlyZXMgPSBqaWZmaWVzIC0gMTsKLQkJCWlmIChob3N0LT5oX3JwY2NsbnQpIHsKLQkJCQlycGNfc2h1dGRvd25fY2xpZW50KGhvc3QtPmhfcnBjY2xudCk7Ci0JCQkJaG9zdC0+aF9ycGNjbG50ID0gTlVMTDsKLQkJCX0KKwlmb3JfZWFjaF9ob3N0KGhvc3QsIHBvcywgY2hhaW4sIG5sbV9zZXJ2ZXJfaG9zdHMpIHsKKwkJaG9zdC0+aF9leHBpcmVzID0gamlmZmllcyAtIDE7CisJCWlmIChob3N0LT5oX3JwY2NsbnQpIHsKKwkJCXJwY19zaHV0ZG93bl9jbGllbnQoaG9zdC0+aF9ycGNjbG50KTsKKwkJCWhvc3QtPmhfcnBjY2xudCA9IE5VTEw7CiAJCX0KIAl9CiAKQEAgLTUxMiwxNSArNjAyLDEzIEBACiAJbXV0ZXhfdW5sb2NrKCZubG1faG9zdF9tdXRleCk7CiAKIAkvKiBjb21wbGFpbiBpZiBhbnkgaG9zdHMgYXJlIGxlZnQgKi8KLQlpZiAobnJob3N0cykgeworCWlmIChucmhvc3RzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAibG9ja2Q6IGNvdWxkbid0IHNodXRkb3duIGhvc3QgbW9kdWxlIVxuIik7Ci0JCWRwcmludGsoImxvY2tkOiAlZCBob3N0cyBsZWZ0OlxuIiwgbnJob3N0cyk7Ci0JCWZvciAoY2hhaW4gPSBubG1faG9zdHM7IGNoYWluIDwgbmxtX2hvc3RzICsgTkxNX0hPU1RfTlJIQVNIOyArK2NoYWluKSB7Ci0JCQlobGlzdF9mb3JfZWFjaF9lbnRyeShob3N0LCBwb3MsIGNoYWluLCBoX2hhc2gpIHsKLQkJCQlkcHJpbnRrKCIgICAgICAgJXMgKGNudCAlZCB1c2UgJWQgZXhwICVsZClcbiIsCi0JCQkJCWhvc3QtPmhfbmFtZSwgYXRvbWljX3JlYWQoJmhvc3QtPmhfY291bnQpLAotCQkJCQlob3N0LT5oX2ludXNlLCBob3N0LT5oX2V4cGlyZXMpOwotCQkJfQorCQlkcHJpbnRrKCJsb2NrZDogJWx1IGhvc3RzIGxlZnQ6XG4iLCBucmhvc3RzKTsKKwkJZm9yX2VhY2hfaG9zdChob3N0LCBwb3MsIGNoYWluLCBubG1fc2VydmVyX2hvc3RzKSB7CisJCQlkcHJpbnRrKCIgICAgICAgJXMgKGNudCAlZCB1c2UgJWQgZXhwICVsZClcbiIsCisJCQkJaG9zdC0+aF9uYW1lLCBhdG9taWNfcmVhZCgmaG9zdC0+aF9jb3VudCksCisJCQkJaG9zdC0+aF9pbnVzZSwgaG9zdC0+aF9leHBpcmVzKTsKIAkJfQogCX0KIH0KQEAgLTUzOCwyOSArNjI2LDIyIEBACiAJc3RydWN0IG5sbV9ob3N0CSpob3N0OwogCiAJZHByaW50aygibG9ja2Q6IGhvc3QgZ2FyYmFnZSBjb2xsZWN0aW9uXG4iKTsKLQlmb3IgKGNoYWluID0gbmxtX2hvc3RzOyBjaGFpbiA8IG5sbV9ob3N0cyArIE5MTV9IT1NUX05SSEFTSDsgKytjaGFpbikgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShob3N0LCBwb3MsIGNoYWluLCBoX2hhc2gpCi0JCQlob3N0LT5oX2ludXNlID0gMDsKLQl9CisJZm9yX2VhY2hfaG9zdChob3N0LCBwb3MsIGNoYWluLCBubG1fc2VydmVyX2hvc3RzKQorCQlob3N0LT5oX2ludXNlID0gMDsKIAogCS8qIE1hcmsgYWxsIGhvc3RzIHRoYXQgaG9sZCBsb2NrcywgYmxvY2tzIG9yIHNoYXJlcyAqLwogCW5sbXN2Y19tYXJrX3Jlc291cmNlcygpOwogCi0JZm9yIChjaGFpbiA9IG5sbV9ob3N0czsgY2hhaW4gPCBubG1faG9zdHMgKyBOTE1fSE9TVF9OUkhBU0g7ICsrY2hhaW4pIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob3N0LCBwb3MsIG5leHQsIGNoYWluLCBoX2hhc2gpIHsKLQkJCWlmIChhdG9taWNfcmVhZCgmaG9zdC0+aF9jb3VudCkgfHwgaG9zdC0+aF9pbnVzZQotCQkJIHx8IHRpbWVfYmVmb3JlKGppZmZpZXMsIGhvc3QtPmhfZXhwaXJlcykpIHsKLQkJCQlkcHJpbnRrKCJubG1fZ2NfaG9zdHMgc2tpcHBpbmcgJXMgKGNudCAlZCB1c2UgJWQgZXhwICVsZClcbiIsCi0JCQkJCWhvc3QtPmhfbmFtZSwgYXRvbWljX3JlYWQoJmhvc3QtPmhfY291bnQpLAotCQkJCQlob3N0LT5oX2ludXNlLCBob3N0LT5oX2V4cGlyZXMpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJZHByaW50aygibG9ja2Q6IGRlbGV0ZSBob3N0ICVzXG4iLCBob3N0LT5oX25hbWUpOwotCQkJaGxpc3RfZGVsX2luaXQoJmhvc3QtPmhfaGFzaCk7Ci0KLQkJCW5sbV9kZXN0cm95X2hvc3QoaG9zdCk7Ci0JCQlucmhvc3RzLS07CisJZm9yX2VhY2hfaG9zdF9zYWZlKGhvc3QsIHBvcywgbmV4dCwgY2hhaW4sIG5sbV9zZXJ2ZXJfaG9zdHMpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZob3N0LT5oX2NvdW50KSB8fCBob3N0LT5oX2ludXNlCisJCSB8fCB0aW1lX2JlZm9yZShqaWZmaWVzLCBob3N0LT5oX2V4cGlyZXMpKSB7CisJCQlkcHJpbnRrKCJubG1fZ2NfaG9zdHMgc2tpcHBpbmcgJXMgIgorCQkJCSIoY250ICVkIHVzZSAlZCBleHAgJWxkKVxuIiwKKwkJCQlob3N0LT5oX25hbWUsIGF0b21pY19yZWFkKCZob3N0LT5oX2NvdW50KSwKKwkJCQlob3N0LT5oX2ludXNlLCBob3N0LT5oX2V4cGlyZXMpOworCQkJY29udGludWU7CiAJCX0KKwkJbmxtX2Rlc3Ryb3lfaG9zdF9sb2NrZWQoaG9zdCk7CiAJfQogCiAJbmV4dF9nYyA9IGppZmZpZXMgKyBOTE1fSE9TVF9DT0xMRUNUOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvbW9uLmMgYi9mcy9sb2NrZC9tb24uYwppbmRleCBlMGM5MTg5Li4yM2Q3NDUxIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9tb24uYworKysgYi9mcy9sb2NrZC9tb24uYwpAQCAtNDAxLDI2ICs0MDEsMjIgQEAKICAqIFN0YXR1cyBNb25pdG9yIHdpcmUgcHJvdG9jb2wuCiAgKi8KIAotc3RhdGljIGludCBlbmNvZGVfbnNtX3N0cmluZyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCBjaGFyICpzdHJpbmcpCitzdGF0aWMgdm9pZCBlbmNvZGVfbnNtX3N0cmluZyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCBjaGFyICpzdHJpbmcpCiB7CiAJY29uc3QgdTMyIGxlbiA9IHN0cmxlbihzdHJpbmcpOwogCV9fYmUzMiAqcDsKIAotCWlmICh1bmxpa2VseShsZW4gPiBTTV9NQVhTVFJMRU4pKQotCQlyZXR1cm4gLUVJTzsKLQlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCBzaXplb2YodTMyKSArIGxlbik7Ci0JaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCi0JCXJldHVybiAtRUlPOworCUJVR19PTihsZW4gPiBTTV9NQVhTVFJMRU4pOworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyBsZW4pOwogCXhkcl9lbmNvZGVfb3BhcXVlKHAsIHN0cmluZywgbGVuKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqICJtb25fbmFtZSIgc3BlY2lmaWVzIHRoZSBob3N0IHRvIGJlIG1vbml0b3JlZC4KICAqLwotc3RhdGljIGludCBlbmNvZGVfbW9uX25hbWUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3Qgc3RydWN0IG5zbV9hcmdzICphcmdwKQorc3RhdGljIHZvaWQgZW5jb2RlX21vbl9uYW1lKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IHN0cnVjdCBuc21fYXJncyAqYXJncCkKIHsKLQlyZXR1cm4gZW5jb2RlX25zbV9zdHJpbmcoeGRyLCBhcmdwLT5tb25fbmFtZSk7CisJZW5jb2RlX25zbV9zdHJpbmcoeGRyLCBhcmdwLT5tb25fbmFtZSk7CiB9CiAKIC8qCkBAIC00MjksMzUgKzQyNSwyNSBAQAogICogKHZpYSB0aGUgTkxNUFJPQ19TTV9OT1RJRlkgY2FsbCkgdGhhdCB0aGUgc3RhdGUgb2YgaG9zdCAibW9uX25hbWUiCiAgKiBoYXMgY2hhbmdlZC4KICAqLwotc3RhdGljIGludCBlbmNvZGVfbXlfaWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3Qgc3RydWN0IG5zbV9hcmdzICphcmdwKQorc3RhdGljIHZvaWQgZW5jb2RlX215X2lkKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IHN0cnVjdCBuc21fYXJncyAqYXJncCkKIHsKLQlpbnQgc3RhdHVzOwogCV9fYmUzMiAqcDsKIAotCXN0YXR1cyA9IGVuY29kZV9uc21fc3RyaW5nKHhkciwgdXRzbmFtZSgpLT5ub2RlbmFtZSk7Ci0JaWYgKHVubGlrZWx5KHN0YXR1cyAhPSAwKSkKLQkJcmV0dXJuIHN0YXR1czsKLQlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCAzICogc2l6ZW9mKHUzMikpOwotCWlmICh1bmxpa2VseShwID09IE5VTEwpKQotCQlyZXR1cm4gLUVJTzsKLQkqcCsrID0gaHRvbmwoYXJncC0+cHJvZyk7Ci0JKnArKyA9IGh0b25sKGFyZ3AtPnZlcnMpOwotCSpwKysgPSBodG9ubChhcmdwLT5wcm9jKTsKLQlyZXR1cm4gMDsKKwllbmNvZGVfbnNtX3N0cmluZyh4ZHIsIHV0c25hbWUoKS0+bm9kZW5hbWUpOworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyA0ICsgNCk7CisJKnArKyA9IGNwdV90b19iZTMyKGFyZ3AtPnByb2cpOworCSpwKysgPSBjcHVfdG9fYmUzMihhcmdwLT52ZXJzKTsKKwkqcCA9IGNwdV90b19iZTMyKGFyZ3AtPnByb2MpOwogfQogCiAvKgogICogVGhlICJtb25faWQiIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbm9uLXByaXZhdGUgYXJndW1lbnRzCiAgKiBvZiBhbiBOU01QUk9DX01PTiBvciBOU01QUk9DX1VOTU9OIGNhbGwuCiAgKi8KLXN0YXRpYyBpbnQgZW5jb2RlX21vbl9pZChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCBzdHJ1Y3QgbnNtX2FyZ3MgKmFyZ3ApCitzdGF0aWMgdm9pZCBlbmNvZGVfbW9uX2lkKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IHN0cnVjdCBuc21fYXJncyAqYXJncCkKIHsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gZW5jb2RlX21vbl9uYW1lKHhkciwgYXJncCk7Ci0JaWYgKHVubGlrZWx5KHN0YXR1cyAhPSAwKSkKLQkJcmV0dXJuIHN0YXR1czsKLQlyZXR1cm4gZW5jb2RlX215X2lkKHhkciwgYXJncCk7CisJZW5jb2RlX21vbl9uYW1lKHhkciwgYXJncCk7CisJZW5jb2RlX215X2lkKHhkciwgYXJncCk7CiB9CiAKIC8qCkBAIC00NjUsNjggKzQ1MSw1NiBAQAogICogYnkgdGhlIE5TTVBST0NfTU9OIGNhbGwuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBzdXBwbGllZCBpbiB0aGUKICAqIE5MTVBST0NfU01fTk9USUZZIGNhbGwuCiAgKi8KLXN0YXRpYyBpbnQgZW5jb2RlX3ByaXYoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3Qgc3RydWN0IG5zbV9hcmdzICphcmdwKQorc3RhdGljIHZvaWQgZW5jb2RlX3ByaXYoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3Qgc3RydWN0IG5zbV9hcmdzICphcmdwKQogewogCV9fYmUzMiAqcDsKIAogCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIFNNX1BSSVZfU0laRSk7CisJeGRyX2VuY29kZV9vcGFxdWVfZml4ZWQocCwgYXJncC0+cHJpdi0+ZGF0YSwgU01fUFJJVl9TSVpFKTsKK30KKworc3RhdGljIHZvaWQgbnNtX3hkcl9lbmNfbW9uKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgIGNvbnN0IHN0cnVjdCBuc21fYXJncyAqYXJncCkKK3sKKwllbmNvZGVfbW9uX2lkKHhkciwgYXJncCk7CisJZW5jb2RlX3ByaXYoeGRyLCBhcmdwKTsKK30KKworc3RhdGljIHZvaWQgbnNtX3hkcl9lbmNfdW5tb24oc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgbnNtX2FyZ3MgKmFyZ3ApCit7CisJZW5jb2RlX21vbl9pZCh4ZHIsIGFyZ3ApOworfQorCitzdGF0aWMgaW50IG5zbV94ZHJfZGVjX3N0YXRfcmVzKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsCisJCQkJc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQlzdHJ1Y3QgbnNtX3JlcyAqcmVzcCkKK3sKKwlfX2JlMzIgKnA7CisKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0ICsgNCk7CiAJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCiAJCXJldHVybiAtRUlPOwotCXhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsIGFyZ3AtPnByaXYtPmRhdGEsIFNNX1BSSVZfU0laRSk7CisJcmVzcC0+c3RhdHVzID0gYmUzMl90b19jcHVwKHArKyk7CisJcmVzcC0+c3RhdGUgPSBiZTMyX3RvX2NwdXAocCk7CisKKwlkcHJpbnRrKCJsb2NrZDogJXMgc3RhdHVzICVkIHN0YXRlICVkXG4iLAorCQlfX2Z1bmNfXywgcmVzcC0+c3RhdHVzLCByZXNwLT5zdGF0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgeGRyX2VuY19tb24oc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBuc21fYXJncyAqYXJncCkKLXsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7Ci0JaW50IHN0YXR1czsKLQotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQlzdGF0dXMgPSBlbmNvZGVfbW9uX2lkKCZ4ZHIsIGFyZ3ApOwotCWlmICh1bmxpa2VseShzdGF0dXMpKQotCQlyZXR1cm4gc3RhdHVzOwotCXJldHVybiBlbmNvZGVfcHJpdigmeGRyLCBhcmdwKTsKLX0KLQotc3RhdGljIGludCB4ZHJfZW5jX3VubW9uKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsCi0JCQkgY29uc3Qgc3RydWN0IG5zbV9hcmdzICphcmdwKQotewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKLQotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQlyZXR1cm4gZW5jb2RlX21vbl9pZCgmeGRyLCBhcmdwKTsKLX0KLQotc3RhdGljIGludCB4ZHJfZGVjX3N0YXRfcmVzKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwKK3N0YXRpYyBpbnQgbnNtX3hkcl9kZWNfc3RhdChzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLAorCQkJICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCiAJCQkgICAgc3RydWN0IG5zbV9yZXMgKnJlc3ApCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOworCV9fYmUzMiAqcDsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXAgPSB4ZHJfaW5saW5lX2RlY29kZSgmeGRyLCAyICogc2l6ZW9mKHUzMikpOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOwogCWlmICh1bmxpa2VseShwID09IE5VTEwpKQogCQlyZXR1cm4gLUVJTzsKLQlyZXNwLT5zdGF0dXMgPSBudG9obCgqcCsrKTsKLQlyZXNwLT5zdGF0ZSA9IG50b2hsKCpwKTsKKwlyZXNwLT5zdGF0ZSA9IGJlMzJfdG9fY3B1cChwKTsKIAotCWRwcmludGsoImxvY2tkOiB4ZHJfZGVjX3N0YXRfcmVzIHN0YXR1cyAlZCBzdGF0ZSAlZFxuIiwKLQkJCXJlc3AtPnN0YXR1cywgcmVzcC0+c3RhdGUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHhkcl9kZWNfc3RhdChzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsCi0JCQlzdHJ1Y3QgbnNtX3JlcyAqcmVzcCkKLXsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7Ci0KLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKLQlwID0geGRyX2lubGluZV9kZWNvZGUoJnhkciwgc2l6ZW9mKHUzMikpOwotCWlmICh1bmxpa2VseShwID09IE5VTEwpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXNwLT5zdGF0ZSA9IG50b2hsKCpwKTsKLQotCWRwcmludGsoImxvY2tkOiB4ZHJfZGVjX3N0YXQgc3RhdGUgJWRcbiIsIHJlc3AtPnN0YXRlKTsKKwlkcHJpbnRrKCJsb2NrZDogJXMgc3RhdGUgJWRcbiIsIF9fZnVuY19fLCByZXNwLT5zdGF0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU0Miw4ICs1MTYsOCBAQAogc3RhdGljIHN0cnVjdCBycGNfcHJvY2luZm8JbnNtX3Byb2NlZHVyZXNbXSA9IHsKIFtOU01QUk9DX01PTl0gPSB7CiAJCS5wX3Byb2MJCT0gTlNNUFJPQ19NT04sCi0JCS5wX2VuY29kZQk9IChreGRycHJvY190KXhkcl9lbmNfbW9uLAotCQkucF9kZWNvZGUJPSAoa3hkcnByb2NfdCl4ZHJfZGVjX3N0YXRfcmVzLAorCQkucF9lbmNvZGUJPSAoa3hkcmVwcm9jX3QpbnNtX3hkcl9lbmNfbW9uLAorCQkucF9kZWNvZGUJPSAoa3hkcmRwcm9jX3QpbnNtX3hkcl9kZWNfc3RhdF9yZXMsCiAJCS5wX2FyZ2xlbgk9IFNNX21vbl9zeiwKIAkJLnBfcmVwbGVuCT0gU01fbW9ucmVzX3N6LAogCQkucF9zdGF0aWR4CT0gTlNNUFJPQ19NT04sCkBAIC01NTEsOCArNTI1LDggQEAKIAl9LAogW05TTVBST0NfVU5NT05dID0gewogCQkucF9wcm9jCQk9IE5TTVBST0NfVU5NT04sCi0JCS5wX2VuY29kZQk9IChreGRycHJvY190KXhkcl9lbmNfdW5tb24sCi0JCS5wX2RlY29kZQk9IChreGRycHJvY190KXhkcl9kZWNfc3RhdCwKKwkJLnBfZW5jb2RlCT0gKGt4ZHJlcHJvY190KW5zbV94ZHJfZW5jX3VubW9uLAorCQkucF9kZWNvZGUJPSAoa3hkcmRwcm9jX3QpbnNtX3hkcl9kZWNfc3RhdCwKIAkJLnBfYXJnbGVuCT0gU01fbW9uX2lkX3N6LAogCQkucF9yZXBsZW4JPSBTTV91bm1vbnJlc19zeiwKIAkJLnBfc3RhdGlkeAk9IE5TTVBST0NfVU5NT04sCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmM0cHJvYy5jIGIvZnMvbG9ja2Qvc3ZjNHByb2MuYwppbmRleCAzOGQyNjExLi45YTQxZmRjIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmM0cHJvYy5jCisrKyBiL2ZzL2xvY2tkL3N2YzRwcm9jLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAlyZXR1cm4gMDsKIAogbm9fbG9ja3M6Ci0JbmxtX3JlbGVhc2VfaG9zdChob3N0KTsKKwlubG1zdmNfcmVsZWFzZV9ob3N0KGhvc3QpOwogIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsJCiAJcmV0dXJuIG5sbV9sY2tfZGVuaWVkX25vbG9ja3M7CkBAIC05Miw3ICs5Miw3IEBACiAJZWxzZQogCQlkcHJpbnRrKCJsb2NrZDogVEVTVDQgICAgICAgIHN0YXR1cyAlZFxuIiwgbnRvaGwocmVzcC0+c3RhdHVzKSk7CiAKLQlubG1fcmVsZWFzZV9ob3N0KGhvc3QpOworCW5sbXN2Y19yZWxlYXNlX2hvc3QoaG9zdCk7CiAJbmxtX3JlbGVhc2VfZmlsZShmaWxlKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0xMzQsNyArMTM0LDcgQEAKIAllbHNlCiAJCWRwcmludGsoImxvY2tkOiBMT0NLICAgICAgICAgc3RhdHVzICVkXG4iLCBudG9obChyZXNwLT5zdGF0dXMpKTsKIAotCW5sbV9yZWxlYXNlX2hvc3QoaG9zdCk7CisJbmxtc3ZjX3JlbGVhc2VfaG9zdChob3N0KTsKIAlubG1fcmVsZWFzZV9maWxlKGZpbGUpOwogCXJldHVybiByYzsKIH0KQEAgLTE2NCw3ICsxNjQsNyBAQAogCXJlc3AtPnN0YXR1cyA9IG5sbXN2Y19jYW5jZWxfYmxvY2tlZChmaWxlLCAmYXJncC0+bG9jayk7CiAKIAlkcHJpbnRrKCJsb2NrZDogQ0FOQ0VMICAgICAgICBzdGF0dXMgJWRcbiIsIG50b2hsKHJlc3AtPnN0YXR1cykpOwotCW5sbV9yZWxlYXNlX2hvc3QoaG9zdCk7CisJbmxtc3ZjX3JlbGVhc2VfaG9zdChob3N0KTsKIAlubG1fcmVsZWFzZV9maWxlKGZpbGUpOwogCXJldHVybiBycGNfc3VjY2VzczsKIH0KQEAgLTE5Nyw3ICsxOTcsNyBAQAogCXJlc3AtPnN0YXR1cyA9IG5sbXN2Y191bmxvY2soZmlsZSwgJmFyZ3AtPmxvY2spOwogCiAJZHByaW50aygibG9ja2Q6IFVOTE9DSyAgICAgICAgc3RhdHVzICVkXG4iLCBudG9obChyZXNwLT5zdGF0dXMpKTsKLQlubG1fcmVsZWFzZV9ob3N0KGhvc3QpOworCW5sbXN2Y19yZWxlYXNlX2hvc3QoaG9zdCk7CiAJbmxtX3JlbGVhc2VfZmlsZShmaWxlKTsKIAlyZXR1cm4gcnBjX3N1Y2Nlc3M7CiB9CkBAIC0yMjksNyArMjI5LDcgQEAKIAogc3RhdGljIHZvaWQgbmxtNHN2Y19jYWxsYmFja19yZWxlYXNlKHZvaWQgKmRhdGEpCiB7Ci0JbmxtX3JlbGVhc2VfY2FsbChkYXRhKTsKKwlubG1zdmNfcmVsZWFzZV9jYWxsKGRhdGEpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBubG00c3ZjX2NhbGxiYWNrX29wcyA9IHsKQEAgLTI2MSw3ICsyNjEsNyBAQAogCiAJc3RhdCA9IGZ1bmMocnFzdHAsIGFyZ3AsICZjYWxsLT5hX3Jlcyk7CiAJaWYgKHN0YXQgIT0gMCkgewotCQlubG1fcmVsZWFzZV9jYWxsKGNhbGwpOworCQlubG1zdmNfcmVsZWFzZV9jYWxsKGNhbGwpOwogCQlyZXR1cm4gc3RhdDsKIAl9CiAKQEAgLTMzNCw3ICszMzQsNyBAQAogCXJlc3AtPnN0YXR1cyA9IG5sbXN2Y19zaGFyZV9maWxlKGhvc3QsIGZpbGUsIGFyZ3ApOwogCiAJZHByaW50aygibG9ja2Q6IFNIQVJFICAgICAgICAgc3RhdHVzICVkXG4iLCBudG9obChyZXNwLT5zdGF0dXMpKTsKLQlubG1fcmVsZWFzZV9ob3N0KGhvc3QpOworCW5sbXN2Y19yZWxlYXNlX2hvc3QoaG9zdCk7CiAJbmxtX3JlbGVhc2VfZmlsZShmaWxlKTsKIAlyZXR1cm4gcnBjX3N1Y2Nlc3M7CiB9CkBAIC0zNjcsNyArMzY3LDcgQEAKIAlyZXNwLT5zdGF0dXMgPSBubG1zdmNfdW5zaGFyZV9maWxlKGhvc3QsIGZpbGUsIGFyZ3ApOwogCiAJZHByaW50aygibG9ja2Q6IFVOU0hBUkUgICAgICAgc3RhdHVzICVkXG4iLCBudG9obChyZXNwLT5zdGF0dXMpKTsKLQlubG1fcmVsZWFzZV9ob3N0KGhvc3QpOworCW5sbXN2Y19yZWxlYXNlX2hvc3QoaG9zdCk7CiAJbmxtX3JlbGVhc2VfZmlsZShmaWxlKTsKIAlyZXR1cm4gcnBjX3N1Y2Nlc3M7CiB9CkBAIC0zOTksNyArMzk5LDcgQEAKIAkJcmV0dXJuIHJwY19zdWNjZXNzOwogCiAJbmxtc3ZjX2ZyZWVfaG9zdF9yZXNvdXJjZXMoaG9zdCk7Ci0JbmxtX3JlbGVhc2VfaG9zdChob3N0KTsKKwlubG1zdmNfcmVsZWFzZV9ob3N0KGhvc3QpOwogCXJldHVybiBycGNfc3VjY2VzczsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjbG9jay5jIGIvZnMvbG9ja2Qvc3ZjbG9jay5jCmluZGV4IGVmNTY1OWIuLjZlMzE2OTUgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y2xvY2suYworKysgYi9mcy9sb2NrZC9zdmNsb2NrLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKIHN0YXRpYyBpbnQgbmxtc3ZjX3NldGdyYW50YXJncyhzdHJ1Y3QgbmxtX3Jxc3QgKmNhbGwsIHN0cnVjdCBubG1fbG9jayAqbG9jayk7CiBzdGF0aWMgdm9pZCBubG1zdmNfZnJlZWdyYW50YXJncyhzdHJ1Y3QgbmxtX3Jxc3QgKmNhbGwpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgbmxtc3ZjX2dyYW50X29wczsKK3N0YXRpYyBjb25zdCBjaGFyICpubG1kYmdfY29va2llMmEoY29uc3Qgc3RydWN0IG5sbV9jb29raWUgKmNvb2tpZSk7CiAKIC8qCiAgKiBUaGUgbGlzdCBvZiBibG9ja2VkIGxvY2tzIHRvIHJldHJ5CkBAIC0yMzMsNyArMjM0LDcgQEAKIGZhaWxlZF9mcmVlOgogCWtmcmVlKGJsb2NrKTsKIGZhaWxlZDoKLQlubG1fcmVsZWFzZV9jYWxsKGNhbGwpOworCW5sbXN2Y19yZWxlYXNlX2NhbGwoY2FsbCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI2Niw3ICsyNjcsNyBAQAogCW11dGV4X3VubG9jaygmZmlsZS0+Zl9tdXRleCk7CiAKIAlubG1zdmNfZnJlZWdyYW50YXJncyhibG9jay0+Yl9jYWxsKTsKLQlubG1fcmVsZWFzZV9jYWxsKGJsb2NrLT5iX2NhbGwpOworCW5sbXN2Y19yZWxlYXNlX2NhbGwoYmxvY2stPmJfY2FsbCk7CiAJbmxtX3JlbGVhc2VfZmlsZShibG9jay0+Yl9maWxlKTsKIAlrZnJlZShibG9jay0+Yl9mbCk7CiAJa2ZyZWUoYmxvY2spOwpAQCAtOTM0LDMgKzkzNSwzMiBAQAogCiAJcmV0dXJuIHRpbWVvdXQ7CiB9CisKKyNpZmRlZiBSUENfREVCVUcKK3N0YXRpYyBjb25zdCBjaGFyICpubG1kYmdfY29va2llMmEoY29uc3Qgc3RydWN0IG5sbV9jb29raWUgKmNvb2tpZSkKK3sKKwkvKgorCSAqIFdlIGNhbiBnZXQgYXdheSB3aXRoIGEgc3RhdGljIGJ1ZmZlciBiZWNhdXNlIHdlJ3JlIG9ubHkKKwkgKiBjYWxsZWQgd2l0aCBCS0wgaGVsZC4KKwkgKi8KKwlzdGF0aWMgY2hhciBidWZbMipOTE1fTUFYQ09PS0lFTEVOKzFdOworCXVuc2lnbmVkIGludCBpLCBsZW4gPSBzaXplb2YoYnVmKTsKKwljaGFyICpwID0gYnVmOworCisJbGVuLS07CS8qIGFsbG93IGZvciB0cmFpbGluZyBcMCAqLworCWlmIChsZW4gPCAzKQorCQlyZXR1cm4gIj8/PyI7CisJZm9yIChpID0gMCA7IGkgPCBjb29raWUtPmxlbiA7IGkrKykgeworCQlpZiAobGVuIDwgMikgeworCQkJc3RyY3B5KHAtMywgIi4uLiIpOworCQkJYnJlYWs7CisJCX0KKwkJc3ByaW50ZihwLCAiJTAyeCIsIGNvb2tpZS0+ZGF0YVtpXSk7CisJCXAgKz0gMjsKKwkJbGVuIC09IDI7CisJfQorCSpwID0gJ1wwJzsKKworCXJldHVybiBidWY7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Y3Byb2MuYyBiL2ZzL2xvY2tkL3N2Y3Byb2MuYwppbmRleCAwY2FlYTUzLi5kMjdhYWIxIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmNwcm9jLmMKKysrIGIvZnMvbG9ja2Qvc3ZjcHJvYy5jCkBAIC04MCw3ICs4MCw3IEBACiAJcmV0dXJuIDA7CiAKIG5vX2xvY2tzOgotCW5sbV9yZWxlYXNlX2hvc3QoaG9zdCk7CisJbmxtc3ZjX3JlbGVhc2VfaG9zdChob3N0KTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAlyZXR1cm4gbmxtX2xja19kZW5pZWRfbm9sb2NrczsKQEAgLTEyMiw3ICsxMjIsNyBAQAogCQlkcHJpbnRrKCJsb2NrZDogVEVTVCAgICAgICAgICBzdGF0dXMgJWQgdmVycyAlZFxuIiwKIAkJCW50b2hsKHJlc3AtPnN0YXR1cyksIHJxc3RwLT5ycV92ZXJzKTsKIAotCW5sbV9yZWxlYXNlX2hvc3QoaG9zdCk7CisJbmxtc3ZjX3JlbGVhc2VfaG9zdChob3N0KTsKIAlubG1fcmVsZWFzZV9maWxlKGZpbGUpOwogCXJldHVybiByYzsKIH0KQEAgLTE2NCw3ICsxNjQsNyBAQAogCWVsc2UKIAkJZHByaW50aygibG9ja2Q6IExPQ0sgICAgICAgICBzdGF0dXMgJWRcbiIsIG50b2hsKHJlc3AtPnN0YXR1cykpOwogCi0JbmxtX3JlbGVhc2VfaG9zdChob3N0KTsKKwlubG1zdmNfcmVsZWFzZV9ob3N0KGhvc3QpOwogCW5sbV9yZWxlYXNlX2ZpbGUoZmlsZSk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMTk0LDcgKzE5NCw3IEBACiAJcmVzcC0+c3RhdHVzID0gY2FzdF9zdGF0dXMobmxtc3ZjX2NhbmNlbF9ibG9ja2VkKGZpbGUsICZhcmdwLT5sb2NrKSk7CiAKIAlkcHJpbnRrKCJsb2NrZDogQ0FOQ0VMICAgICAgICBzdGF0dXMgJWRcbiIsIG50b2hsKHJlc3AtPnN0YXR1cykpOwotCW5sbV9yZWxlYXNlX2hvc3QoaG9zdCk7CisJbmxtc3ZjX3JlbGVhc2VfaG9zdChob3N0KTsKIAlubG1fcmVsZWFzZV9maWxlKGZpbGUpOwogCXJldHVybiBycGNfc3VjY2VzczsKIH0KQEAgLTIyNyw3ICsyMjcsNyBAQAogCXJlc3AtPnN0YXR1cyA9IGNhc3Rfc3RhdHVzKG5sbXN2Y191bmxvY2soZmlsZSwgJmFyZ3AtPmxvY2spKTsKIAogCWRwcmludGsoImxvY2tkOiBVTkxPQ0sgICAgICAgIHN0YXR1cyAlZFxuIiwgbnRvaGwocmVzcC0+c3RhdHVzKSk7Ci0JbmxtX3JlbGVhc2VfaG9zdChob3N0KTsKKwlubG1zdmNfcmVsZWFzZV9ob3N0KGhvc3QpOwogCW5sbV9yZWxlYXNlX2ZpbGUoZmlsZSk7CiAJcmV0dXJuIHJwY19zdWNjZXNzOwogfQpAQCAtMjU3LDkgKzI1NywxNyBAQAogCQkJLXRhc2stPnRrX3N0YXR1cyk7CiB9CiAKK3ZvaWQgbmxtc3ZjX3JlbGVhc2VfY2FsbChzdHJ1Y3QgbmxtX3Jxc3QgKmNhbGwpCit7CisJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZjYWxsLT5hX2NvdW50KSkKKwkJcmV0dXJuOworCW5sbXN2Y19yZWxlYXNlX2hvc3QoY2FsbC0+YV9ob3N0KTsKKwlrZnJlZShjYWxsKTsKK30KKwogc3RhdGljIHZvaWQgbmxtc3ZjX2NhbGxiYWNrX3JlbGVhc2Uodm9pZCAqZGF0YSkKIHsKLQlubG1fcmVsZWFzZV9jYWxsKGRhdGEpOworCW5sbXN2Y19yZWxlYXNlX2NhbGwoZGF0YSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzIG5sbXN2Y19jYWxsYmFja19vcHMgPSB7CkBAIC0yOTEsNyArMjk5LDcgQEAKIAogCXN0YXQgPSBmdW5jKHJxc3RwLCBhcmdwLCAmY2FsbC0+YV9yZXMpOwogCWlmIChzdGF0ICE9IDApIHsKLQkJbmxtX3JlbGVhc2VfY2FsbChjYWxsKTsKKwkJbmxtc3ZjX3JlbGVhc2VfY2FsbChjYWxsKTsKIAkJcmV0dXJuIHN0YXQ7CiAJfQogCkBAIC0zNjYsNyArMzc0LDcgQEAKIAlyZXNwLT5zdGF0dXMgPSBjYXN0X3N0YXR1cyhubG1zdmNfc2hhcmVfZmlsZShob3N0LCBmaWxlLCBhcmdwKSk7CiAKIAlkcHJpbnRrKCJsb2NrZDogU0hBUkUgICAgICAgICBzdGF0dXMgJWRcbiIsIG50b2hsKHJlc3AtPnN0YXR1cykpOwotCW5sbV9yZWxlYXNlX2hvc3QoaG9zdCk7CisJbmxtc3ZjX3JlbGVhc2VfaG9zdChob3N0KTsKIAlubG1fcmVsZWFzZV9maWxlKGZpbGUpOwogCXJldHVybiBycGNfc3VjY2VzczsKIH0KQEAgLTM5OSw3ICs0MDcsNyBAQAogCXJlc3AtPnN0YXR1cyA9IGNhc3Rfc3RhdHVzKG5sbXN2Y191bnNoYXJlX2ZpbGUoaG9zdCwgZmlsZSwgYXJncCkpOwogCiAJZHByaW50aygibG9ja2Q6IFVOU0hBUkUgICAgICAgc3RhdHVzICVkXG4iLCBudG9obChyZXNwLT5zdGF0dXMpKTsKLQlubG1fcmVsZWFzZV9ob3N0KGhvc3QpOworCW5sbXN2Y19yZWxlYXNlX2hvc3QoaG9zdCk7CiAJbmxtX3JlbGVhc2VfZmlsZShmaWxlKTsKIAlyZXR1cm4gcnBjX3N1Y2Nlc3M7CiB9CkBAIC00MzEsNyArNDM5LDcgQEAKIAkJcmV0dXJuIHJwY19zdWNjZXNzOwogCiAJbmxtc3ZjX2ZyZWVfaG9zdF9yZXNvdXJjZXMoaG9zdCk7Ci0JbmxtX3JlbGVhc2VfaG9zdChob3N0KTsKKwlubG1zdmNfcmVsZWFzZV9ob3N0KGhvc3QpOwogCXJldHVybiBycGNfc3VjY2VzczsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbG9ja2QveGRyLmMgYi9mcy9sb2NrZC94ZHIuYwppbmRleCBiNTgzYWIwLi45NjQ2NjZjIDEwMDY0NAotLS0gYS9mcy9sb2NrZC94ZHIuYworKysgYi9mcy9sb2NrZC94ZHIuYwpAQCAtMTQ5LDM3ICsxNDksNiBAQAogfQogCiAvKgotICogRW5jb2RlIGEgbG9jayBhcyBwYXJ0IG9mIGFuIE5MTSBjYWxsCi0gKi8KLXN0YXRpYyBfX2JlMzIgKgotbmxtX2VuY29kZV9sb2NrKF9fYmUzMiAqcCwgc3RydWN0IG5sbV9sb2NrICpsb2NrKQotewotCXN0cnVjdCBmaWxlX2xvY2sJKmZsID0gJmxvY2stPmZsOwotCV9fczMyCQkJc3RhcnQsIGxlbjsKLQotCWlmICghKHAgPSB4ZHJfZW5jb2RlX3N0cmluZyhwLCBsb2NrLT5jYWxsZXIpKQotCSB8fCAhKHAgPSBubG1fZW5jb2RlX2ZoKHAsICZsb2NrLT5maCkpCi0JIHx8ICEocCA9IG5sbV9lbmNvZGVfb2gocCwgJmxvY2stPm9oKSkpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKGZsLT5mbF9zdGFydCA+IE5MTV9PRkZTRVRfTUFYCi0JIHx8IChmbC0+ZmxfZW5kID4gTkxNX09GRlNFVF9NQVggJiYgZmwtPmZsX2VuZCAhPSBPRkZTRVRfTUFYKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzdGFydCA9IGxvZmZfdF90b19zMzIoZmwtPmZsX3N0YXJ0KTsKLQlpZiAoZmwtPmZsX2VuZCA9PSBPRkZTRVRfTUFYKQotCQlsZW4gPSAwOwotCWVsc2UKLQkJbGVuID0gbG9mZl90X3RvX3MzMihmbC0+ZmxfZW5kIC0gZmwtPmZsX3N0YXJ0ICsgMSk7Ci0KLQkqcCsrID0gaHRvbmwobG9jay0+c3ZpZCk7Ci0JKnArKyA9IGh0b25sKHN0YXJ0KTsKLQkqcCsrID0gaHRvbmwobGVuKTsKLQotCXJldHVybiBwOwotfQotCi0vKgogICogRW5jb2RlIHJlc3VsdCBvZiBhIFRFU1QvVEVTVF9NU0cgY2FsbAogICovCiBzdGF0aWMgX19iZTMyICoKQEAgLTM3MiwyNTkgKzM0MSwzIEBACiB7CiAJcmV0dXJuIHhkcl9yZXNzaXplX2NoZWNrKHJxc3RwLCBwKTsKIH0KLQotLyoKLSAqIE5vdywgdGhlIGNsaWVudCBzaWRlIFhEUiBmdW5jdGlvbnMKLSAqLwotI2lmZGVmIE5MTUNMTlRfU1VQUE9SVF9TSEFSRVMKLXN0YXRpYyBpbnQKLW5sbWNsdF9kZWNvZGVfdm9pZChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgdTMyICpwLCB2b2lkICpwdHIpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludAotbmxtY2x0X2VuY29kZV90ZXN0YXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBubG1fYXJncyAqYXJncCkKLXsKLQlzdHJ1Y3QgbmxtX2xvY2sJKmxvY2sgPSAmYXJncC0+bG9jazsKLQotCWlmICghKHAgPSBubG1fZW5jb2RlX2Nvb2tpZShwLCAmYXJncC0+Y29va2llKSkpCi0JCXJldHVybiAtRUlPOwotCSpwKysgPSAobG9jay0+ZmwuZmxfdHlwZSA9PSBGX1dSTENLKT8geGRyX29uZSA6IHhkcl96ZXJvOwotCWlmICghKHAgPSBubG1fZW5jb2RlX2xvY2socCwgbG9jaykpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW5sbWNsdF9kZWNvZGVfdGVzdHJlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmxtX3JlcyAqcmVzcCkKLXsKLQlpZiAoIShwID0gbmxtX2RlY29kZV9jb29raWUocCwgJnJlc3AtPmNvb2tpZSkpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXNwLT5zdGF0dXMgPSAqcCsrOwotCWlmIChyZXNwLT5zdGF0dXMgPT0gbmxtX2xja19kZW5pZWQpIHsKLQkJc3RydWN0IGZpbGVfbG9jawkqZmwgPSAmcmVzcC0+bG9jay5mbDsKLQkJdTMyCQkJZXhjbDsKLQkJczMyCQkJc3RhcnQsIGxlbiwgZW5kOwotCi0JCW1lbXNldCgmcmVzcC0+bG9jaywgMCwgc2l6ZW9mKHJlc3AtPmxvY2spKTsKLQkJbG9ja3NfaW5pdF9sb2NrKGZsKTsKLQkJZXhjbCA9IG50b2hsKCpwKyspOwotCQlyZXNwLT5sb2NrLnN2aWQgPSBudG9obCgqcCsrKTsKLQkJZmwtPmZsX3BpZCA9IChwaWRfdClyZXNwLT5sb2NrLnN2aWQ7Ci0JCWlmICghKHAgPSBubG1fZGVjb2RlX29oKHAsICZyZXNwLT5sb2NrLm9oKSkpCi0JCQlyZXR1cm4gLUVJTzsKLQotCQlmbC0+ZmxfZmxhZ3MgPSBGTF9QT1NJWDsKLQkJZmwtPmZsX3R5cGUgID0gZXhjbD8gRl9XUkxDSyA6IEZfUkRMQ0s7Ci0JCXN0YXJ0ID0gbnRvaGwoKnArKyk7Ci0JCWxlbiA9IG50b2hsKCpwKyspOwotCQllbmQgPSBzdGFydCArIGxlbiAtIDE7Ci0KLQkJZmwtPmZsX3N0YXJ0ID0gczMyX3RvX2xvZmZfdChzdGFydCk7Ci0JCWlmIChsZW4gPT0gMCB8fCBlbmQgPCAwKQotCQkJZmwtPmZsX2VuZCA9IE9GRlNFVF9NQVg7Ci0JCWVsc2UKLQkJCWZsLT5mbF9lbmQgPSBzMzJfdG9fbG9mZl90KGVuZCk7Ci0JfQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQKLW5sbWNsdF9lbmNvZGVfbG9ja2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgbmxtX2FyZ3MgKmFyZ3ApCi17Ci0Jc3RydWN0IG5sbV9sb2NrCSpsb2NrID0gJmFyZ3AtPmxvY2s7Ci0KLQlpZiAoIShwID0gbmxtX2VuY29kZV9jb29raWUocCwgJmFyZ3AtPmNvb2tpZSkpKQotCQlyZXR1cm4gLUVJTzsKLQkqcCsrID0gYXJncC0+YmxvY2s/IHhkcl9vbmUgOiB4ZHJfemVybzsKLQkqcCsrID0gKGxvY2stPmZsLmZsX3R5cGUgPT0gRl9XUkxDSyk/IHhkcl9vbmUgOiB4ZHJfemVybzsKLQlpZiAoIShwID0gbmxtX2VuY29kZV9sb2NrKHAsIGxvY2spKSkKLQkJcmV0dXJuIC1FSU87Ci0JKnArKyA9IGFyZ3AtPnJlY2xhaW0/IHhkcl9vbmUgOiB4ZHJfemVybzsKLQkqcCsrID0gaHRvbmwoYXJncC0+c3RhdGUpOwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbmxtY2x0X2VuY29kZV9jYW5jYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBubG1fYXJncyAqYXJncCkKLXsKLQlzdHJ1Y3QgbmxtX2xvY2sJKmxvY2sgPSAmYXJncC0+bG9jazsKLQotCWlmICghKHAgPSBubG1fZW5jb2RlX2Nvb2tpZShwLCAmYXJncC0+Y29va2llKSkpCi0JCXJldHVybiAtRUlPOwotCSpwKysgPSBhcmdwLT5ibG9jaz8geGRyX29uZSA6IHhkcl96ZXJvOwotCSpwKysgPSAobG9jay0+ZmwuZmxfdHlwZSA9PSBGX1dSTENLKT8geGRyX29uZSA6IHhkcl96ZXJvOwotCWlmICghKHAgPSBubG1fZW5jb2RlX2xvY2socCwgbG9jaykpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW5sbWNsdF9lbmNvZGVfdW5sb2NrYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBubG1fYXJncyAqYXJncCkKLXsKLQlzdHJ1Y3QgbmxtX2xvY2sJKmxvY2sgPSAmYXJncC0+bG9jazsKLQotCWlmICghKHAgPSBubG1fZW5jb2RlX2Nvb2tpZShwLCAmYXJncC0+Y29va2llKSkpCi0JCXJldHVybiAtRUlPOwotCWlmICghKHAgPSBubG1fZW5jb2RlX2xvY2socCwgbG9jaykpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW5sbWNsdF9lbmNvZGVfcmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBubG1fcmVzICpyZXNwKQotewotCWlmICghKHAgPSBubG1fZW5jb2RlX2Nvb2tpZShwLCAmcmVzcC0+Y29va2llKSkpCi0JCXJldHVybiAtRUlPOwotCSpwKysgPSByZXNwLT5zdGF0dXM7Ci0JcmVxLT5ycV9zbGVuID0geGRyX2FkanVzdF9pb3ZlYyhyZXEtPnJxX3N2ZWMsIHApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1ubG1jbHRfZW5jb2RlX3Rlc3RyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5sbV9yZXMgKnJlc3ApCi17Ci0JaWYgKCEocCA9IG5sbV9lbmNvZGVfdGVzdHJlcyhwLCByZXNwKSkpCi0JCXJldHVybiAtRUlPOwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbmxtY2x0X2RlY29kZV9yZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5sbV9yZXMgKnJlc3ApCi17Ci0JaWYgKCEocCA9IG5sbV9kZWNvZGVfY29va2llKHAsICZyZXNwLT5jb29raWUpKSkKLQkJcmV0dXJuIC1FSU87Ci0JcmVzcC0+c3RhdHVzID0gKnArKzsKLQlyZXR1cm4gMDsKLX0KLQotI2lmIChOTE1DTE5UX09IU0laRSA+IFhEUl9NQVhfTkVUT0JKKQotIyAgZXJyb3IgIk5MTSBob3N0IG5hbWUgY2Fubm90IGJlIGxhcmdlciB0aGFuIFhEUl9NQVhfTkVUT0JKISIKLSNlbmRpZgotCi0vKgotICogQnVmZmVyIHJlcXVpcmVtZW50cyBmb3IgTkxNCi0gKi8KLSNkZWZpbmUgTkxNX3ZvaWRfc3oJCTAKLSNkZWZpbmUgTkxNX2Nvb2tpZV9zegkJMStYRFJfUVVBRExFTihOTE1fTUFYQ09PS0lFTEVOKQotI2RlZmluZSBOTE1fY2FsbGVyX3N6CQkxK1hEUl9RVUFETEVOKE5MTUNMTlRfT0hTSVpFKQotI2RlZmluZSBOTE1fb3duZXJfc3oJCTErWERSX1FVQURMRU4oTkxNQ0xOVF9PSFNJWkUpCi0jZGVmaW5lIE5MTV9maGFuZGxlX3N6CQkxK1hEUl9RVUFETEVOKE5GUzJfRkhTSVpFKQotI2RlZmluZSBOTE1fbG9ja19zegkJMytOTE1fY2FsbGVyX3N6K05MTV9vd25lcl9zeitOTE1fZmhhbmRsZV9zegotI2RlZmluZSBOTE1faG9sZGVyX3N6CQk0K05MTV9vd25lcl9zegotCi0jZGVmaW5lIE5MTV90ZXN0YXJnc19zegkJTkxNX2Nvb2tpZV9zeisxK05MTV9sb2NrX3N6Ci0jZGVmaW5lIE5MTV9sb2NrYXJnc19zegkJTkxNX2Nvb2tpZV9zeis0K05MTV9sb2NrX3N6Ci0jZGVmaW5lIE5MTV9jYW5jYXJnc19zegkJTkxNX2Nvb2tpZV9zeisyK05MTV9sb2NrX3N6Ci0jZGVmaW5lIE5MTV91bmxvY2thcmdzX3N6CU5MTV9jb29raWVfc3orTkxNX2xvY2tfc3oKLQotI2RlZmluZSBOTE1fdGVzdHJlc19zegkJTkxNX2Nvb2tpZV9zeisxK05MTV9ob2xkZXJfc3oKLSNkZWZpbmUgTkxNX3Jlc19zegkJTkxNX2Nvb2tpZV9zeisxCi0jZGVmaW5lIE5MTV9ub3JlcF9zegkJMAotCi0vKgotICogRm9yIE5MTSwgYSB2b2lkIHByb2NlZHVyZSByZWFsbHkgcmV0dXJucyBub3RoaW5nCi0gKi8KLSNkZWZpbmUgbmxtY2x0X2RlY29kZV9ub3JlcAlOVUxMCi0KLSNkZWZpbmUgUFJPQyhwcm9jLCBhcmd0eXBlLCByZXN0eXBlKQlcCi1bTkxNUFJPQ18jI3Byb2NdID0gewkJCQkJCQlcCi0JLnBfcHJvYyAgICAgID0gTkxNUFJPQ18jI3Byb2MsCQkJCQlcCi0JLnBfZW5jb2RlICAgID0gKGt4ZHJwcm9jX3QpIG5sbWNsdF9lbmNvZGVfIyNhcmd0eXBlLAkJXAotCS5wX2RlY29kZSAgICA9IChreGRycHJvY190KSBubG1jbHRfZGVjb2RlXyMjcmVzdHlwZSwJCVwKLQkucF9hcmdsZW4gICAgPSBOTE1fIyNhcmd0eXBlIyNfc3osCQkJCVwKLQkucF9yZXBsZW4gICAgPSBOTE1fIyNyZXN0eXBlIyNfc3osCQkJCVwKLQkucF9zdGF0aWR4ICAgPSBOTE1QUk9DXyMjcHJvYywJCQkJCVwKLQkucF9uYW1lICAgICAgPSAjcHJvYywJCQkJCQlcCi0JfQotCi1zdGF0aWMgc3RydWN0IHJwY19wcm9jaW5mbwlubG1fcHJvY2VkdXJlc1tdID0gewotICAgIFBST0MoVEVTVCwJCXRlc3RhcmdzLAl0ZXN0cmVzKSwKLSAgICBQUk9DKExPQ0ssCQlsb2NrYXJncywJcmVzKSwKLSAgICBQUk9DKENBTkNFTCwJY2FuY2FyZ3MsCXJlcyksCi0gICAgUFJPQyhVTkxPQ0ssCXVubG9ja2FyZ3MsCXJlcyksCi0gICAgUFJPQyhHUkFOVEVELAl0ZXN0YXJncywJcmVzKSwKLSAgICBQUk9DKFRFU1RfTVNHLAl0ZXN0YXJncywJbm9yZXApLAotICAgIFBST0MoTE9DS19NU0csCWxvY2thcmdzLAlub3JlcCksCi0gICAgUFJPQyhDQU5DRUxfTVNHLAljYW5jYXJncywJbm9yZXApLAotICAgIFBST0MoVU5MT0NLX01TRywJdW5sb2NrYXJncywJbm9yZXApLAotICAgIFBST0MoR1JBTlRFRF9NU0csCXRlc3RhcmdzLAlub3JlcCksCi0gICAgUFJPQyhURVNUX1JFUywJdGVzdHJlcywJbm9yZXApLAotICAgIFBST0MoTE9DS19SRVMsCXJlcywJCW5vcmVwKSwKLSAgICBQUk9DKENBTkNFTF9SRVMsCXJlcywJCW5vcmVwKSwKLSAgICBQUk9DKFVOTE9DS19SRVMsCXJlcywJCW5vcmVwKSwKLSAgICBQUk9DKEdSQU5URURfUkVTLAlyZXMsCQlub3JlcCksCi0jaWZkZWYgTkxNQ0xOVF9TVVBQT1JUX1NIQVJFUwotICAgIFBST0MoU0hBUkUsCQlzaGFyZWFyZ3MsCXNoYXJlcmVzKSwKLSAgICBQUk9DKFVOU0hBUkUsCXNoYXJlYXJncywJc2hhcmVyZXMpLAotICAgIFBST0MoTk1fTE9DSywJbG9ja2FyZ3MsCXJlcyksCi0gICAgUFJPQyhGUkVFX0FMTCwJbm90aWZ5LAkJdm9pZCksCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcnBjX3ZlcnNpb24JbmxtX3ZlcnNpb24xID0gewotCQkubnVtYmVyCQk9IDEsCi0JCS5ucnByb2NzCT0gMTYsCi0JCS5wcm9jcwkJPSBubG1fcHJvY2VkdXJlcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcnBjX3ZlcnNpb24JbmxtX3ZlcnNpb24zID0gewotCQkubnVtYmVyCQk9IDMsCi0JCS5ucnByb2NzCT0gMjQsCi0JCS5wcm9jcwkJPSBubG1fcHJvY2VkdXJlcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcnBjX3ZlcnNpb24gKglubG1fdmVyc2lvbnNbXSA9IHsKLQlbMV0gPSAmbmxtX3ZlcnNpb24xLAotCVszXSA9ICZubG1fdmVyc2lvbjMsCi0jaWZkZWYgCUNPTkZJR19MT0NLRF9WNAotCVs0XSA9ICZubG1fdmVyc2lvbjQsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcnBjX3N0YXQJCW5sbV9zdGF0czsKLQotc3RydWN0IHJwY19wcm9ncmFtCQlubG1fcHJvZ3JhbSA9IHsKLQkJLm5hbWUJCT0gImxvY2tkIiwKLQkJLm51bWJlcgkJPSBOTE1fUFJPR1JBTSwKLQkJLm5ydmVycwkJPSBBUlJBWV9TSVpFKG5sbV92ZXJzaW9ucyksCi0JCS52ZXJzaW9uCT0gbmxtX3ZlcnNpb25zLAotCQkuc3RhdHMJCT0gJm5sbV9zdGF0cywKLX07Ci0KLSNpZmRlZiBSUENfREVCVUcKLWNvbnN0IGNoYXIgKm5sbWRiZ19jb29raWUyYShjb25zdCBzdHJ1Y3QgbmxtX2Nvb2tpZSAqY29va2llKQotewotCS8qCi0JICogV2UgY2FuIGdldCBhd2F5IHdpdGggYSBzdGF0aWMgYnVmZmVyIGJlY2F1c2Ugd2UncmUgb25seQotCSAqIGNhbGxlZCB3aXRoIEJLTCBoZWxkLgotCSAqLwotCXN0YXRpYyBjaGFyIGJ1ZlsyKk5MTV9NQVhDT09LSUVMRU4rMV07Ci0JdW5zaWduZWQgaW50IGksIGxlbiA9IHNpemVvZihidWYpOwotCWNoYXIgKnAgPSBidWY7Ci0KLQlsZW4tLTsJLyogYWxsb3cgZm9yIHRyYWlsaW5nIFwwICovCi0JaWYgKGxlbiA8IDMpCi0JCXJldHVybiAiPz8/IjsKLQlmb3IgKGkgPSAwIDsgaSA8IGNvb2tpZS0+bGVuIDsgaSsrKSB7Ci0JCWlmIChsZW4gPCAyKSB7Ci0JCQlzdHJjcHkocC0zLCAiLi4uIik7Ci0JCQlicmVhazsKLQkJfQotCQlzcHJpbnRmKHAsICIlMDJ4IiwgY29va2llLT5kYXRhW2ldKTsKLQkJcCArPSAyOwotCQlsZW4gLT0gMjsKLQl9Ci0JKnAgPSAnXDAnOwotCi0JcmV0dXJuIGJ1ZjsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QveGRyNC5jIGIvZnMvbG9ja2QveGRyNC5jCmluZGV4IGFkOWRiYmMuLmRmYTQ3ODkgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3hkcjQuYworKysgYi9mcy9sb2NrZC94ZHI0LmMKQEAgLTkzLDE1ICs5Myw2IEBACiAJcmV0dXJuIHAgKyBYRFJfUVVBRExFTihmLT5zaXplKTsKIH0KIAotc3RhdGljIF9fYmUzMiAqCi1ubG00X2VuY29kZV9maChfX2JlMzIgKnAsIHN0cnVjdCBuZnNfZmggKmYpCi17Ci0JKnArKyA9IGh0b25sKGYtPnNpemUpOwotCWlmIChmLT5zaXplKSBwW1hEUl9RVUFETEVOKGYtPnNpemUpLTFdID0gMDsgLyogZG9uJ3QgbGVhayBhbnl0aGluZyAqLwotCW1lbWNweShwLCBmLT5kYXRhLCBmLT5zaXplKTsKLQlyZXR1cm4gcCArIFhEUl9RVUFETEVOKGYtPnNpemUpOwotfQotCiAvKgogICogRW5jb2RlIGFuZCBkZWNvZGUgb3duZXIgaGFuZGxlCiAgKi8KQEAgLTExMiwxMiArMTAzLDYgQEAKIH0KIAogc3RhdGljIF9fYmUzMiAqCi1ubG00X2VuY29kZV9vaChfX2JlMzIgKnAsIHN0cnVjdCB4ZHJfbmV0b2JqICpvaCkKLXsKLQlyZXR1cm4geGRyX2VuY29kZV9uZXRvYmoocCwgb2gpOwotfQotCi1zdGF0aWMgX19iZTMyICoKIG5sbTRfZGVjb2RlX2xvY2soX19iZTMyICpwLCBzdHJ1Y3QgbmxtX2xvY2sgKmxvY2spCiB7CiAJc3RydWN0IGZpbGVfbG9jawkqZmwgPSAmbG9jay0+Zmw7CkBAIC0xNTAsMzggKzEzNSw2IEBACiB9CiAKIC8qCi0gKiBFbmNvZGUgYSBsb2NrIGFzIHBhcnQgb2YgYW4gTkxNIGNhbGwKLSAqLwotc3RhdGljIF9fYmUzMiAqCi1ubG00X2VuY29kZV9sb2NrKF9fYmUzMiAqcCwgc3RydWN0IG5sbV9sb2NrICpsb2NrKQotewotCXN0cnVjdCBmaWxlX2xvY2sJKmZsID0gJmxvY2stPmZsOwotCV9fczY0CQkJc3RhcnQsIGxlbjsKLQotCWlmICghKHAgPSB4ZHJfZW5jb2RlX3N0cmluZyhwLCBsb2NrLT5jYWxsZXIpKQotCSB8fCAhKHAgPSBubG00X2VuY29kZV9maChwLCAmbG9jay0+ZmgpKQotCSB8fCAhKHAgPSBubG00X2VuY29kZV9vaChwLCAmbG9jay0+b2gpKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoZmwtPmZsX3N0YXJ0ID4gTkxNNF9PRkZTRVRfTUFYCi0JIHx8IChmbC0+ZmxfZW5kID4gTkxNNF9PRkZTRVRfTUFYICYmIGZsLT5mbF9lbmQgIT0gT0ZGU0VUX01BWCkpCi0JCXJldHVybiBOVUxMOwotCi0JKnArKyA9IGh0b25sKGxvY2stPnN2aWQpOwotCi0Jc3RhcnQgPSBsb2ZmX3RfdG9fczY0KGZsLT5mbF9zdGFydCk7Ci0JaWYgKGZsLT5mbF9lbmQgPT0gT0ZGU0VUX01BWCkKLQkJbGVuID0gMDsKLQllbHNlCi0JCWxlbiA9IGxvZmZfdF90b19zNjQoZmwtPmZsX2VuZCAtIGZsLT5mbF9zdGFydCArIDEpOwotCi0JcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgc3RhcnQpOwotCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIGxlbik7Ci0KLQlyZXR1cm4gcDsKLX0KLQotLyoKICAqIEVuY29kZSByZXN1bHQgb2YgYSBURVNUL1RFU1RfTVNHIGNhbGwKICAqLwogc3RhdGljIF9fYmUzMiAqCkBAIC0zNzksMjExICszMzIsMyBAQAogewogCXJldHVybiB4ZHJfcmVzc2l6ZV9jaGVjayhycXN0cCwgcCk7CiB9Ci0KLS8qCi0gKiBOb3csIHRoZSBjbGllbnQgc2lkZSBYRFIgZnVuY3Rpb25zCi0gKi8KLSNpZmRlZiBOTE1DTE5UX1NVUFBPUlRfU0hBUkVTCi1zdGF0aWMgaW50Ci1ubG00Y2x0X2RlY29kZV92b2lkKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHZvaWQgKnB0cikKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50Ci1ubG00Y2x0X2VuY29kZV90ZXN0YXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBubG1fYXJncyAqYXJncCkKLXsKLQlzdHJ1Y3QgbmxtX2xvY2sJKmxvY2sgPSAmYXJncC0+bG9jazsKLQotCWlmICghKHAgPSBubG00X2VuY29kZV9jb29raWUocCwgJmFyZ3AtPmNvb2tpZSkpKQotCQlyZXR1cm4gLUVJTzsKLQkqcCsrID0gKGxvY2stPmZsLmZsX3R5cGUgPT0gRl9XUkxDSyk/IHhkcl9vbmUgOiB4ZHJfemVybzsKLQlpZiAoIShwID0gbmxtNF9lbmNvZGVfbG9jayhwLCBsb2NrKSkpCi0JCXJldHVybiAtRUlPOwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbmxtNGNsdF9kZWNvZGVfdGVzdHJlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmxtX3JlcyAqcmVzcCkKLXsKLQlpZiAoIShwID0gbmxtNF9kZWNvZGVfY29va2llKHAsICZyZXNwLT5jb29raWUpKSkKLQkJcmV0dXJuIC1FSU87Ci0JcmVzcC0+c3RhdHVzID0gKnArKzsKLQlpZiAocmVzcC0+c3RhdHVzID09IG5sbV9sY2tfZGVuaWVkKSB7Ci0JCXN0cnVjdCBmaWxlX2xvY2sJKmZsID0gJnJlc3AtPmxvY2suZmw7Ci0JCXUzMgkJCWV4Y2w7Ci0JCV9fdTY0CQkJc3RhcnQsIGxlbjsKLQkJX19zNjQJCQllbmQ7Ci0KLQkJbWVtc2V0KCZyZXNwLT5sb2NrLCAwLCBzaXplb2YocmVzcC0+bG9jaykpOwotCQlsb2Nrc19pbml0X2xvY2soZmwpOwotCQlleGNsID0gbnRvaGwoKnArKyk7Ci0JCXJlc3AtPmxvY2suc3ZpZCA9IG50b2hsKCpwKyspOwotCQlmbC0+ZmxfcGlkID0gKHBpZF90KXJlc3AtPmxvY2suc3ZpZDsKLQkJaWYgKCEocCA9IG5sbTRfZGVjb2RlX29oKHAsICZyZXNwLT5sb2NrLm9oKSkpCi0JCQlyZXR1cm4gLUVJTzsKLQotCQlmbC0+ZmxfZmxhZ3MgPSBGTF9QT1NJWDsKLQkJZmwtPmZsX3R5cGUgID0gZXhjbD8gRl9XUkxDSyA6IEZfUkRMQ0s7Ci0JCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZzdGFydCk7Ci0JCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZsZW4pOwotCQllbmQgPSBzdGFydCArIGxlbiAtIDE7Ci0KLQkJZmwtPmZsX3N0YXJ0ID0gczY0X3RvX2xvZmZfdChzdGFydCk7Ci0JCWlmIChsZW4gPT0gMCB8fCBlbmQgPCAwKQotCQkJZmwtPmZsX2VuZCA9IE9GRlNFVF9NQVg7Ci0JCWVsc2UKLQkJCWZsLT5mbF9lbmQgPSBzNjRfdG9fbG9mZl90KGVuZCk7Ci0JfQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQKLW5sbTRjbHRfZW5jb2RlX2xvY2thcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIG5sbV9hcmdzICphcmdwKQotewotCXN0cnVjdCBubG1fbG9jawkqbG9jayA9ICZhcmdwLT5sb2NrOwotCi0JaWYgKCEocCA9IG5sbTRfZW5jb2RlX2Nvb2tpZShwLCAmYXJncC0+Y29va2llKSkpCi0JCXJldHVybiAtRUlPOwotCSpwKysgPSBhcmdwLT5ibG9jaz8geGRyX29uZSA6IHhkcl96ZXJvOwotCSpwKysgPSAobG9jay0+ZmwuZmxfdHlwZSA9PSBGX1dSTENLKT8geGRyX29uZSA6IHhkcl96ZXJvOwotCWlmICghKHAgPSBubG00X2VuY29kZV9sb2NrKHAsIGxvY2spKSkKLQkJcmV0dXJuIC1FSU87Ci0JKnArKyA9IGFyZ3AtPnJlY2xhaW0/IHhkcl9vbmUgOiB4ZHJfemVybzsKLQkqcCsrID0gaHRvbmwoYXJncC0+c3RhdGUpOwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbmxtNGNsdF9lbmNvZGVfY2FuY2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgbmxtX2FyZ3MgKmFyZ3ApCi17Ci0Jc3RydWN0IG5sbV9sb2NrCSpsb2NrID0gJmFyZ3AtPmxvY2s7Ci0KLQlpZiAoIShwID0gbmxtNF9lbmNvZGVfY29va2llKHAsICZhcmdwLT5jb29raWUpKSkKLQkJcmV0dXJuIC1FSU87Ci0JKnArKyA9IGFyZ3AtPmJsb2NrPyB4ZHJfb25lIDogeGRyX3plcm87Ci0JKnArKyA9IChsb2NrLT5mbC5mbF90eXBlID09IEZfV1JMQ0spPyB4ZHJfb25lIDogeGRyX3plcm87Ci0JaWYgKCEocCA9IG5sbTRfZW5jb2RlX2xvY2socCwgbG9jaykpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW5sbTRjbHRfZW5jb2RlX3VubG9ja2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgbmxtX2FyZ3MgKmFyZ3ApCi17Ci0Jc3RydWN0IG5sbV9sb2NrCSpsb2NrID0gJmFyZ3AtPmxvY2s7Ci0KLQlpZiAoIShwID0gbmxtNF9lbmNvZGVfY29va2llKHAsICZhcmdwLT5jb29raWUpKSkKLQkJcmV0dXJuIC1FSU87Ci0JaWYgKCEocCA9IG5sbTRfZW5jb2RlX2xvY2socCwgbG9jaykpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW5sbTRjbHRfZW5jb2RlX3JlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmxtX3JlcyAqcmVzcCkKLXsKLQlpZiAoIShwID0gbmxtNF9lbmNvZGVfY29va2llKHAsICZyZXNwLT5jb29raWUpKSkKLQkJcmV0dXJuIC1FSU87Ci0JKnArKyA9IHJlc3AtPnN0YXR1czsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW5sbTRjbHRfZW5jb2RlX3Rlc3RyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5sbV9yZXMgKnJlc3ApCi17Ci0JaWYgKCEocCA9IG5sbTRfZW5jb2RlX3Rlc3RyZXMocCwgcmVzcCkpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW5sbTRjbHRfZGVjb2RlX3JlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmxtX3JlcyAqcmVzcCkKLXsKLQlpZiAoIShwID0gbmxtNF9kZWNvZGVfY29va2llKHAsICZyZXNwLT5jb29raWUpKSkKLQkJcmV0dXJuIC1FSU87Ci0JcmVzcC0+c3RhdHVzID0gKnArKzsKLQlyZXR1cm4gMDsKLX0KLQotI2lmIChOTE1DTE5UX09IU0laRSA+IFhEUl9NQVhfTkVUT0JKKQotIyAgZXJyb3IgIk5MTSBob3N0IG5hbWUgY2Fubm90IGJlIGxhcmdlciB0aGFuIFhEUl9NQVhfTkVUT0JKISIKLSNlbmRpZgotCi0jaWYgKE5MTUNMTlRfT0hTSVpFID4gTkxNX01BWFNUUkxFTikKLSMgIGVycm9yICJOTE0gaG9zdCBuYW1lIGNhbm5vdCBiZSBsYXJnZXIgdGhhbiBOTE0ncyBtYXhpbXVtIHN0cmluZyBsZW5ndGghIgotI2VuZGlmCi0KLS8qCi0gKiBCdWZmZXIgcmVxdWlyZW1lbnRzIGZvciBOTE0KLSAqLwotI2RlZmluZSBOTE00X3ZvaWRfc3oJCTAKLSNkZWZpbmUgTkxNNF9jb29raWVfc3oJCTErWERSX1FVQURMRU4oTkxNX01BWENPT0tJRUxFTikKLSNkZWZpbmUgTkxNNF9jYWxsZXJfc3oJCTErWERSX1FVQURMRU4oTkxNQ0xOVF9PSFNJWkUpCi0jZGVmaW5lIE5MTTRfb3duZXJfc3oJCTErWERSX1FVQURMRU4oTkxNQ0xOVF9PSFNJWkUpCi0jZGVmaW5lIE5MTTRfZmhhbmRsZV9zegkJMStYRFJfUVVBRExFTihORlMzX0ZIU0laRSkKLSNkZWZpbmUgTkxNNF9sb2NrX3N6CQk1K05MTTRfY2FsbGVyX3N6K05MTTRfb3duZXJfc3orTkxNNF9maGFuZGxlX3N6Ci0jZGVmaW5lIE5MTTRfaG9sZGVyX3N6CQk2K05MTTRfb3duZXJfc3oKLQotI2RlZmluZSBOTE00X3Rlc3RhcmdzX3N6CU5MTTRfY29va2llX3N6KzErTkxNNF9sb2NrX3N6Ci0jZGVmaW5lIE5MTTRfbG9ja2FyZ3Nfc3oJTkxNNF9jb29raWVfc3orNCtOTE00X2xvY2tfc3oKLSNkZWZpbmUgTkxNNF9jYW5jYXJnc19zeglOTE00X2Nvb2tpZV9zeisyK05MTTRfbG9ja19zegotI2RlZmluZSBOTE00X3VubG9ja2FyZ3Nfc3oJTkxNNF9jb29raWVfc3orTkxNNF9sb2NrX3N6Ci0KLSNkZWZpbmUgTkxNNF90ZXN0cmVzX3N6CQlOTE00X2Nvb2tpZV9zeisxK05MTTRfaG9sZGVyX3N6Ci0jZGVmaW5lIE5MTTRfcmVzX3N6CQlOTE00X2Nvb2tpZV9zeisxCi0jZGVmaW5lIE5MTTRfbm9yZXBfc3oJCTAKLQotLyoKLSAqIEZvciBOTE0sIGEgdm9pZCBwcm9jZWR1cmUgcmVhbGx5IHJldHVybnMgbm90aGluZwotICovCi0jZGVmaW5lIG5sbTRjbHRfZGVjb2RlX25vcmVwCU5VTEwKLQotI2RlZmluZSBQUk9DKHByb2MsIGFyZ3R5cGUsIHJlc3R5cGUpCQkJCQlcCi1bTkxNUFJPQ18jI3Byb2NdID0gewkJCQkJCQlcCi0JLnBfcHJvYyAgICAgID0gTkxNUFJPQ18jI3Byb2MsCQkJCQlcCi0JLnBfZW5jb2RlICAgID0gKGt4ZHJwcm9jX3QpIG5sbTRjbHRfZW5jb2RlXyMjYXJndHlwZSwJCVwKLQkucF9kZWNvZGUgICAgPSAoa3hkcnByb2NfdCkgbmxtNGNsdF9kZWNvZGVfIyNyZXN0eXBlLAkJXAotCS5wX2FyZ2xlbiAgICA9IE5MTTRfIyNhcmd0eXBlIyNfc3osCQkJCVwKLQkucF9yZXBsZW4gICAgPSBOTE00XyMjcmVzdHlwZSMjX3N6LAkJCQlcCi0JLnBfc3RhdGlkeCAgID0gTkxNUFJPQ18jI3Byb2MsCQkJCQlcCi0JLnBfbmFtZSAgICAgID0gI3Byb2MsCQkJCQkJXAotCX0KLQotc3RhdGljIHN0cnVjdCBycGNfcHJvY2luZm8JbmxtNF9wcm9jZWR1cmVzW10gPSB7Ci0gICAgUFJPQyhURVNULAkJdGVzdGFyZ3MsCXRlc3RyZXMpLAotICAgIFBST0MoTE9DSywJCWxvY2thcmdzLAlyZXMpLAotICAgIFBST0MoQ0FOQ0VMLAljYW5jYXJncywJcmVzKSwKLSAgICBQUk9DKFVOTE9DSywJdW5sb2NrYXJncywJcmVzKSwKLSAgICBQUk9DKEdSQU5URUQsCXRlc3RhcmdzLAlyZXMpLAotICAgIFBST0MoVEVTVF9NU0csCXRlc3RhcmdzLAlub3JlcCksCi0gICAgUFJPQyhMT0NLX01TRywJbG9ja2FyZ3MsCW5vcmVwKSwKLSAgICBQUk9DKENBTkNFTF9NU0csCWNhbmNhcmdzLAlub3JlcCksCi0gICAgUFJPQyhVTkxPQ0tfTVNHLAl1bmxvY2thcmdzLAlub3JlcCksCi0gICAgUFJPQyhHUkFOVEVEX01TRywJdGVzdGFyZ3MsCW5vcmVwKSwKLSAgICBQUk9DKFRFU1RfUkVTLAl0ZXN0cmVzLAlub3JlcCksCi0gICAgUFJPQyhMT0NLX1JFUywJcmVzLAkJbm9yZXApLAotICAgIFBST0MoQ0FOQ0VMX1JFUywJcmVzLAkJbm9yZXApLAotICAgIFBST0MoVU5MT0NLX1JFUywJcmVzLAkJbm9yZXApLAotICAgIFBST0MoR1JBTlRFRF9SRVMsCXJlcywJCW5vcmVwKSwKLSNpZmRlZiBOTE1DTE5UX1NVUFBPUlRfU0hBUkVTCi0gICAgUFJPQyhTSEFSRSwJCXNoYXJlYXJncywJc2hhcmVyZXMpLAotICAgIFBST0MoVU5TSEFSRSwJc2hhcmVhcmdzLAlzaGFyZXJlcyksCi0gICAgUFJPQyhOTV9MT0NLLAlsb2NrYXJncywJcmVzKSwKLSAgICBQUk9DKEZSRUVfQUxMLAlub3RpZnksCQl2b2lkKSwKLSNlbmRpZgotfTsKLQotc3RydWN0IHJwY192ZXJzaW9uCW5sbV92ZXJzaW9uNCA9IHsKLQkubnVtYmVyCQk9IDQsCi0JLm5ycHJvY3MJPSAyNCwKLQkucHJvY3MJCT0gbmxtNF9wcm9jZWR1cmVzLAotfTsKZGlmZiAtLWdpdCBhL2ZzL21iY2FjaGUuYyBiL2ZzL21iY2FjaGUuYwppbmRleCA5MzQ0NDc0Li5hMjU0NDRhYiAxMDA2NDQKLS0tIGEvZnMvbWJjYWNoZS5jCisrKyBiL2ZzL21iY2FjaGUuYwpAQCAtNzYsMTggKzc2LDYgQEAKIEVYUE9SVF9TWU1CT0wobWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KTsKICNlbmRpZgogCi1zdHJ1Y3QgbWJfY2FjaGUgewotCXN0cnVjdCBsaXN0X2hlYWQJCWNfY2FjaGVfbGlzdDsKLQljb25zdCBjaGFyCQkJKmNfbmFtZTsKLQlhdG9taWNfdAkJCWNfZW50cnlfY291bnQ7Ci0JaW50CQkJCWNfbWF4X2VudHJpZXM7Ci0JaW50CQkJCWNfYnVja2V0X2JpdHM7Ci0Jc3RydWN0IGttZW1fY2FjaGUJCSpjX2VudHJ5X2NhY2hlOwotCXN0cnVjdCBsaXN0X2hlYWQJCSpjX2Jsb2NrX2hhc2g7Ci0Jc3RydWN0IGxpc3RfaGVhZAkJKmNfaW5kZXhfaGFzaDsKLX07Ci0KLQogLyoKICAqIEdsb2JhbCBkYXRhOiBsaXN0IG9mIGFsbCBtYmNhY2hlJ3MsIGxydSBsaXN0LCBhbmQgYSBzcGlubG9jayBmb3IKICAqIGFjY2Vzc2luZyBjYWNoZSBkYXRhIHN0cnVjdHVyZXMgb24gU01QIG1hY2hpbmVzLiBUaGUgbHJ1IGxpc3QgaXMKZGlmZiAtLWdpdCBhL2ZzL21pbml4L25hbWVpLmMgYi9mcy9taW5peC9uYW1laS5jCmluZGV4IDFiOWUwNzcuLmNlNzMzN2QgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L25hbWVpLmMKKysrIGIvZnMvbWluaXgvbmFtZWkuYwpAQCAtMjMsOCArMjMsNiBAQAogCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gTlVMTDsKIAlpbm9fdCBpbm87CiAKLQlkX3NldF9kX29wKGRlbnRyeSwgZGlyLT5pX3NiLT5zX3Jvb3QtPmRfb3ApOwotCiAJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+IG1pbml4X3NiKGRpci0+aV9zYiktPnNfbmFtZWxlbikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CiAKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDI0ZWNlMTAuLjBiMTRmNjkgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMTk1MCw4ICsxOTUwLDkgQEAKIAlyZXR1cm4gYnJlYWtfbGVhc2UoaW5vZGUsIGZsYWcpOwogfQogCi1zdGF0aWMgaW50IGhhbmRsZV90cnVuY2F0ZShzdHJ1Y3QgcGF0aCAqcGF0aCkKK3N0YXRpYyBpbnQgaGFuZGxlX3RydW5jYXRlKHN0cnVjdCBmaWxlICpmaWxwKQogeworCXN0cnVjdCBwYXRoICpwYXRoID0gJmZpbHAtPmZfcGF0aDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGF0aC0+ZGVudHJ5LT5kX2lub2RlOwogCWludCBlcnJvciA9IGdldF93cml0ZV9hY2Nlc3MoaW5vZGUpOwogCWlmIChlcnJvcikKQEAgLTE5NjUsNyArMTk2Niw3IEBACiAJaWYgKCFlcnJvcikgewogCQllcnJvciA9IGRvX3RydW5jYXRlKHBhdGgtPmRlbnRyeSwgMCwKIAkJCQkgICAgQVRUUl9NVElNRXxBVFRSX0NUSU1FfEFUVFJfT1BFTiwKLQkJCQkgICAgTlVMTCk7CisJCQkJICAgIGZpbHApOwogCX0KIAlwdXRfd3JpdGVfYWNjZXNzKGlub2RlKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC0yMDYzLDcgKzIwNjQsNyBAQAogCX0KIAlpZiAoIUlTX0VSUihmaWxwKSkgewogCQlpZiAod2lsbF90cnVuY2F0ZSkgewotCQkJZXJyb3IgPSBoYW5kbGVfdHJ1bmNhdGUoJm5kLT5wYXRoKTsKKwkJCWVycm9yID0gaGFuZGxlX3RydW5jYXRlKGZpbHApOwogCQkJaWYgKGVycm9yKSB7CiAJCQkJZnB1dChmaWxwKTsKIAkJCQlmaWxwID0gRVJSX1BUUihlcnJvcik7CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9kaXIuYyBiL2ZzL25jcGZzL2Rpci5jCmluZGV4IDI4ZjEzNmQuLmY2OTQ2YmIgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL2Rpci5jCisrKyBiL2ZzL25jcGZzL2Rpci5jCkBAIC0yMSw5ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9uY3BfZnMuaD4KLQotI2luY2x1ZGUgIm5jcGxpYl9rZXJuZWwuaCIKKyNpbmNsdWRlICJuY3BfZnMuaCIKIAogc3RhdGljIHZvaWQgbmNwX3JlYWRfdm9sdW1lX2xpc3Qoc3RydWN0IGZpbGUgKiwgdm9pZCAqLCBmaWxsZGlyX3QsCiAJCQkJc3RydWN0IG5jcF9jYWNoZV9jb250cm9sICopOwpAQCAtODIsNyArODAsNyBAQAogCQl1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7CiBzdGF0aWMgaW50IG5jcF9kZWxldGVfZGVudHJ5KGNvbnN0IHN0cnVjdCBkZW50cnkgKik7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmNwX2RlbnRyeV9vcGVyYXRpb25zID0KK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuY3BfZGVudHJ5X29wZXJhdGlvbnMgPQogewogCS5kX3JldmFsaWRhdGUJPSBuY3BfbG9va3VwX3ZhbGlkYXRlLAogCS5kX2hhc2gJCT0gbmNwX2hhc2hfZGVudHJ5LApAQCAtOTAsMTQgKzg4LDYgQEAKIAkuZF9kZWxldGUJPSBuY3BfZGVsZXRlX2RlbnRyeSwKIH07CiAKLWNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuY3Bfcm9vdF9kZW50cnlfb3BlcmF0aW9ucyA9Ci17Ci0JLmRfaGFzaAkJPSBuY3BfaGFzaF9kZW50cnksCi0JLmRfY29tcGFyZQk9IG5jcF9jb21wYXJlX2RlbnRyeSwKLQkuZF9kZWxldGUJPSBuY3BfZGVsZXRlX2RlbnRyeSwKLX07Ci0KLQogI2RlZmluZSBuY3BfbmFtZXNwYWNlKGkpCShOQ1BfU0VSVkVSKGkpLT5uYW1lX3NwYWNlW05DUF9GSU5GTyhpKS0+dm9sTnVtYmVyXSkKIAogc3RhdGljIGlubGluZSBpbnQgbmNwX3ByZXNlcnZlX2VudHJ5X2Nhc2Uoc3RydWN0IGlub2RlICppLCBfX3UzMiBuc2NyZWF0b3IpCkBAIC0zMDksNiArMjk5LDkgQEAKIAlpbnQgcmVzLCB2YWwgPSAwLCBsZW47CiAJX191OCBfX25hbWVbTkNQX01BWFBBVEhMRU4gKyAxXTsKIAorCWlmIChkZW50cnkgPT0gZGVudHJ5LT5kX3NiLT5zX3Jvb3QpCisJCXJldHVybiAxOworCiAJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCiAJCXJldHVybiAtRUNISUxEOwogCkBAIC02MzcsNyArNjMwLDYgQEAKIAkJZW50cnktPmlubyA9IGl1bmlxdWUoZGlyLT5pX3NiLCAyKTsKIAkJaW5vZGUgPSBuY3BfaWdldChkaXItPmlfc2IsIGVudHJ5KTsKIAkJaWYgKGlub2RlKSB7Ci0JCQlkX3NldF9kX29wKG5ld2RlbnQsICZuY3BfZGVudHJ5X29wZXJhdGlvbnMpOwogCQkJZF9pbnN0YW50aWF0ZShuZXdkZW50LCBpbm9kZSk7CiAJCQlpZiAoIWhhc2hlZCkKIAkJCQlkX3JlaGFzaChuZXdkZW50KTsKQEAgLTg5Myw3ICs4ODUsNiBAQAogCWlmIChpbm9kZSkgewogCQluY3BfbmV3X2RlbnRyeShkZW50cnkpOwogYWRkX2VudHJ5OgotCQlkX3NldF9kX29wKGRlbnRyeSwgJm5jcF9kZW50cnlfb3BlcmF0aW9ucyk7CiAJCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwogCQllcnJvciA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvZmlsZS5jIGIvZnMvbmNwZnMvZmlsZS5jCmluZGV4IGNiNTBhYWYuLjBlZDY1ZTAgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL2ZpbGUuYworKysgYi9mcy9uY3Bmcy9maWxlLmMKQEAgLTE4LDggKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAotI2luY2x1ZGUgPGxpbnV4L25jcF9mcy5oPgotI2luY2x1ZGUgIm5jcGxpYl9rZXJuZWwuaCIKKyNpbmNsdWRlICJuY3BfZnMuaCIKIAogc3RhdGljIGludCBuY3BfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGludCBkYXRhc3luYykKIHsKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL2lub2RlLmMgYi9mcy9uY3Bmcy9pbm9kZS5jCmluZGV4IDliMzlhNWQuLjAwYTFkMWMgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL2lub2RlLmMKKysrIGIvZnMvbmNwZnMvaW5vZGUuYwpAQCAtMzEsMTEgKzMxLDkgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9uY3BfZnMuaD4KLQogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKLSNpbmNsdWRlICJuY3BsaWJfa2VybmVsLmgiCisjaW5jbHVkZSAibmNwX2ZzLmgiCiAjaW5jbHVkZSAiZ2V0b3B0LmgiCiAKICNkZWZpbmUgTkNQX0RFRkFVTFRfRklMRV9NT0RFIDA2MDAKQEAgLTU0NCw2ICs1NDIsNyBAQAogCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gMTA7CiAJc2ItPnNfbWFnaWMgPSBOQ1BfU1VQRVJfTUFHSUM7CiAJc2ItPnNfb3AgPSAmbmNwX3NvcHM7CisJc2ItPnNfZF9vcCA9ICZuY3BfZGVudHJ5X29wZXJhdGlvbnM7CiAJc2ItPnNfYmRpID0gJnNlcnZlci0+YmRpOwogCiAJc2VydmVyID0gTkNQX1NCUChzYik7CkBAIC03MjMsNyArNzIyLDYgQEAKIAlzYi0+c19yb290ID0gZF9hbGxvY19yb290KHJvb3RfaW5vZGUpOwogICAgICAgICBpZiAoIXNiLT5zX3Jvb3QpCiAJCWdvdG8gb3V0X25vX3Jvb3Q7Ci0JZF9zZXRfZF9vcChzYi0+c19yb290LCAmbmNwX3Jvb3RfZGVudHJ5X29wZXJhdGlvbnMpOwogCXJldHVybiAwOwogCiBvdXRfbm9fcm9vdDoKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL2lvY3RsLmMgYi9mcy9uY3Bmcy9pb2N0bC5jCmluZGV4IGQ0MGE1NDcuLjc5MGU5MmEgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL2lvY3RsLmMKKysrIGIvZnMvbmNwZnMvaW9jdGwuYwpAQCAtMjAsMTEgKzIwLDkgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAotI2luY2x1ZGUgPGxpbnV4L25jcF9mcy5oPgotCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgIm5jcGxpYl9rZXJuZWwuaCIKKyNpbmNsdWRlICJuY3BfZnMuaCIKIAogLyogbWF4aW11bSBsaW1pdCBmb3IgbmNwX29iamVjdG5hbWVfaW9jdGwgKi8KICNkZWZpbmUgTkNQX09CSkVDVF9OQU1FX01BWF9MRU4JNDA5NgpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvbW1hcC5jIGIvZnMvbmNwZnMvbW1hcC5jCmluZGV4IDU2ZjViM2EuLmE3YzA3YjQgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL21tYXAuYworKysgYi9mcy9uY3Bmcy9tbWFwLmMKQEAgLTE2LDEyICsxNiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2luY2x1ZGUgPGxpbnV4L25jcF9mcy5oPgogCi0jaW5jbHVkZSAibmNwbGliX2tlcm5lbC5oIgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCisjaW5jbHVkZSAibmNwX2ZzLmgiCisKIC8qCiAgKiBGaWxsIGluIHRoZSBzdXBwbGllZCBwYWdlIGZvciBtbWFwCiAgKiBYWFg6IGhvdyBhcmUgd2UgZXhjbHVkaW5nIHRydW5jYXRlL2ludmFsaWRhdGUgaGVyZT8gTWF5YmUgbmVlZCB0byBsb2NrCmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9uY3BfZnMuaCBiL2ZzL25jcGZzL25jcF9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxODMxYWYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9uY3Bmcy9uY3BfZnMuaApAQCAtMCwwICsxLDk4IEBACisjaW5jbHVkZSA8bGludXgvbmNwX2ZzLmg+CisjaW5jbHVkZSAibmNwX2ZzX2kuaCIKKyNpbmNsdWRlICJuY3BfZnNfc2IuaCIKKworLyogZGVmaW5lIGJlY2F1c2UgaXQgaXMgZWFzeSB0byBjaGFuZ2UgUFJJTlRLIHRvIHsqfVBSSU5USyAqLworI2RlZmluZSBQUklOVEsoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQgLCAjIyBhcmdzKQorCisjdW5kZWYgTkNQRlNfUEFSQU5PSUEKKyNpZmRlZiBOQ1BGU19QQVJBTk9JQQorI2RlZmluZSBQUFJJTlRLKGZvcm1hdCwgYXJncy4uLikgUFJJTlRLKGZvcm1hdCAsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBQUFJJTlRLKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisjaWZuZGVmIERFQlVHX05DUAorI2RlZmluZSBERUJVR19OQ1AgMAorI2VuZGlmCisjaWYgREVCVUdfTkNQID4gMAorI2RlZmluZSBEUFJJTlRLKGZvcm1hdCwgYXJncy4uLikgUFJJTlRLKGZvcm1hdCAsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorI2lmIERFQlVHX05DUCA+IDEKKyNkZWZpbmUgRERQUklOVEsoZm9ybWF0LCBhcmdzLi4uKSBQUklOVEsoZm9ybWF0ICwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIEREUFJJTlRLKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisjZGVmaW5lIE5DUF9NQVhfUlBDX1RJTUVPVVQgKDYqSFopCisKKworc3RydWN0IG5jcF9lbnRyeV9pbmZvIHsKKwlzdHJ1Y3QgbndfaW5mb19zdHJ1Y3QJaTsKKwlpbm9fdAkJCWlubzsKKwlpbnQJCQlvcGVuZWQ7CisJaW50CQkJYWNjZXNzOworCXVuc2lnbmVkIGludAkJdm9sdW1lOworCV9fdTgJCQlmaWxlX2hhbmRsZVs2XTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5jcF9zZXJ2ZXIgKk5DUF9TQlAoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gc2ItPnNfZnNfaW5mbzsKK30KKworI2RlZmluZSBOQ1BfU0VSVkVSKGlub2RlKQlOQ1BfU0JQKChpbm9kZSktPmlfc2IpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuY3BfaW5vZGVfaW5mbyAqTkNQX0ZJTkZPKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IG5jcF9pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpOworfQorCisvKiBsaW51eC9mcy9uY3Bmcy9pbm9kZS5jICovCitpbnQgbmNwX25vdGlmeV9jaGFuZ2Uoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CitzdHJ1Y3QgaW5vZGUgKm5jcF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgbmNwX2VudHJ5X2luZm8gKik7Cit2b2lkIG5jcF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBuY3BfZW50cnlfaW5mbyAqKTsKK3ZvaWQgbmNwX3VwZGF0ZV9pbm9kZTIoc3RydWN0IGlub2RlICosIHN0cnVjdCBuY3BfZW50cnlfaW5mbyAqKTsKKworLyogbGludXgvZnMvbmNwZnMvZGlyLmMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuY3BfZGlyX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuY3BfZGlyX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5jcF9kZW50cnlfb3BlcmF0aW9uczsKK2ludCBuY3BfY29ubl9sb2dnZWRfaW4oc3RydWN0IHN1cGVyX2Jsb2NrICopOworaW50IG5jcF9kYXRlX2RvczJ1bml4KF9fbGUxNiB0aW1lLCBfX2xlMTYgZGF0ZSk7Cit2b2lkIG5jcF9kYXRlX3VuaXgyZG9zKGludCB1bml4X2RhdGUsIF9fbGUxNiAqIHRpbWUsIF9fbGUxNiAqIGRhdGUpOworCisvKiBsaW51eC9mcy9uY3Bmcy9pb2N0bC5jICovCitsb25nIG5jcF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworbG9uZyBuY3BfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CisKKy8qIGxpbnV4L2ZzL25jcGZzL3NvY2suYyAqLworaW50IG5jcF9yZXF1ZXN0MihzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyLCBpbnQgZnVuY3Rpb24sCisJdm9pZCogcmVwbHksIGludCBtYXhfcmVwbHlfc2l6ZSk7CitzdGF0aWMgaW5saW5lIGludCBuY3BfcmVxdWVzdChzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyLCBpbnQgZnVuY3Rpb24pIHsKKwlyZXR1cm4gbmNwX3JlcXVlc3QyKHNlcnZlciwgZnVuY3Rpb24sIHNlcnZlci0+cGFja2V0LCBzZXJ2ZXItPnBhY2tldF9zaXplKTsKK30KK2ludCBuY3BfY29ubmVjdChzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyKTsKK2ludCBuY3BfZGlzY29ubmVjdChzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyKTsKK3ZvaWQgbmNwX2xvY2tfc2VydmVyKHN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIpOwordm9pZCBuY3BfdW5sb2NrX3NlcnZlcihzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyKTsKKworLyogbGludXgvZnMvbmNwZnMvc3ltbGluay5jICovCisjaWYgZGVmaW5lZChDT05GSUdfTkNQRlNfRVhUUkFTKSB8fCBkZWZpbmVkKENPTkZJR19OQ1BGU19ORlNfTlMpCitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBuY3Bfc3ltbGlua19hb3BzOworaW50IG5jcF9zeW1saW5rKHN0cnVjdCBpbm9kZSosIHN0cnVjdCBkZW50cnkqLCBjb25zdCBjaGFyKik7CisjZW5kaWYKKworLyogbGludXgvZnMvbmNwZnMvZmlsZS5jICovCitleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmNwX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5jcF9maWxlX29wZXJhdGlvbnM7CitpbnQgbmNwX21ha2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKKworLyogbGludXgvZnMvbmNwZnMvbW1hcC5jICovCitpbnQgbmNwX21tYXAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOworCisvKiBsaW51eC9mcy9uY3Bmcy9uY3BsaWJfa2VybmVsLmMgKi8KK2ludCBuY3BfbWFrZV9jbG9zZWQoc3RydWN0IGlub2RlICopOworCisjaW5jbHVkZSAibmNwbGliX2tlcm5lbC5oIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uY3BfZnNfaS5oIGIvZnMvbmNwZnMvbmNwX2ZzX2kuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9saW51eC9uY3BfZnNfaS5oCnJlbmFtZSB0byBmcy9uY3Bmcy9uY3BfZnNfaS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25jcF9mc19zYi5oIGIvZnMvbmNwZnMvbmNwX2ZzX3NiLmgKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gaW5jbHVkZS9saW51eC9uY3BfZnNfc2IuaApyZW5hbWUgdG8gZnMvbmNwZnMvbmNwX2ZzX3NiLmgKaW5kZXggZDY0YjBlOC4uNGFmODAzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uY3BfZnNfc2IuaAorKysgYi9mcy9uY3Bmcy9uY3BfZnNfc2IuaApAQCAtMTMsMTUgKzEzLDMwIEBACiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgotCi0jaWZkZWYgX19LRVJORUxfXwotCiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNkZWZpbmUgTkNQX0RFRkFVTFRfT1BUSU9OUyAwCQkvKiAyIGZvciBwYWNrZXQgc2lnbmF0dXJlcyAqLwogCiBzdHJ1Y3Qgc29jazsKIAorc3RydWN0IG5jcF9tb3VudF9kYXRhX2tlcm5lbCB7CisJdW5zaWduZWQgbG9uZyAgICBmbGFnczsJCS8qIE5DUF9NT1VOVF8qIGZsYWdzICovCisJdW5zaWduZWQgaW50CSBpbnRfZmxhZ3M7CS8qIGludGVybmFsIGZsYWdzICovCisjZGVmaW5lIE5DUF9JTU9VTlRfTE9HR0VESU5fUE9TU0lCTEUJMHgwMDAxCisJX19rZXJuZWxfdWlkMzJfdCBtb3VudGVkX3VpZDsJLyogV2hvIG1heSB1bW91bnQoKSB0aGlzIGZpbGVzeXN0ZW0/ICovCisJc3RydWN0IHBpZCAgICAgICp3ZG9nX3BpZDsJLyogV2hvIGNhcmVzIGZvciBvdXIgd2F0Y2hkb2cgcGFja2V0cz8gKi8KKwl1bnNpZ25lZCBpbnQgICAgIG5jcF9mZDsJLyogVGhlIHNvY2tldCB0byB0aGUgbmNwIHBvcnQgKi8KKwl1bnNpZ25lZCBpbnQgICAgIHRpbWVfb3V0OwkvKiBIb3cgbG9uZyBzaG91bGQgSSB3YWl0IGFmdGVyCisJCQkJCSAgIHNlbmRpbmcgYSBOQ1AgcmVxdWVzdD8gKi8KKwl1bnNpZ25lZCBpbnQgICAgIHJldHJ5X2NvdW50OwkvKiBBbmQgaG93IG9mdGVuIHNob3VsZCBJIHJldHJ5PyAqLworCXVuc2lnbmVkIGNoYXIJIG1vdW50ZWRfdm9sW05DUF9WT0xOQU1FX0xFTiArIDFdOworCV9fa2VybmVsX3VpZDMyX3QgdWlkOworCV9fa2VybmVsX2dpZDMyX3QgZ2lkOworCV9fa2VybmVsX21vZGVfdCAgZmlsZV9tb2RlOworCV9fa2VybmVsX21vZGVfdCAgZGlyX21vZGU7CisJaW50CQkgaW5mb19mZDsKK307CisKIHN0cnVjdCBuY3Bfc2VydmVyIHsKIAogCXN0cnVjdCBuY3BfbW91bnRfZGF0YV9rZXJuZWwgbTsJLyogTmVhcmx5IGFsbCBvZiB0aGUgbW91bnQgZGF0YSBpcyBvZgpAQCAtMTU4LDcgKzE3Myw0IEBACiAJc2VydmVyLT5jb25uX3N0YXR1cyB8PSAweDAxOwogfQogCi0jZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwotCiAjZW5kaWYKLSAKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL25jcGxpYl9rZXJuZWwuYyBiL2ZzL25jcGZzL25jcGxpYl9rZXJuZWwuYwppbmRleCBhOTU2MTVhLi45ODFhOTU2IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9uY3BsaWJfa2VybmVsLmMKKysrIGIvZnMvbmNwZnMvbmNwbGliX2tlcm5lbC5jCkBAIC0xMSw3ICsxMSw3IEBACiAKIAogCi0jaW5jbHVkZSAibmNwbGliX2tlcm5lbC5oIgorI2luY2x1ZGUgIm5jcF9mcy5oIgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X3NlcnZlcl9sb2NrZWQoc3RydWN0IG5jcF9zZXJ2ZXIgKnNlcnZlcikKIHsKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL25jcGxpYl9rZXJuZWwuaCBiL2ZzL25jcGZzL25jcGxpYl9rZXJuZWwuaAppbmRleCAxMjIwZGY3Li4wOTg4MWU2IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9uY3BsaWJfa2VybmVsLmgKKysrIGIvZnMvbmNwZnMvbmNwbGliX2tlcm5lbC5oCkBAIC0zMiw4ICszMiw2IEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNlbmRpZiAvKiBDT05GSUdfTkNQRlNfTkxTICovCiAKLSNpbmNsdWRlIDxsaW51eC9uY3BfZnMuaD4KLQogI2RlZmluZSBOQ1BfTUlOX1NZTUxJTktfU0laRQk4CiAjZGVmaW5lIE5DUF9NQVhfU1lNTElOS19TSVpFCTUxMgogCmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9uY3BzaWduX2tlcm5lbC5jIGIvZnMvbmNwZnMvbmNwc2lnbl9rZXJuZWwuYwppbmRleCBkOGIyZDdlLi4wODkwNzU5IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9uY3BzaWduX2tlcm5lbC5jCisrKyBiL2ZzL25jcGZzL25jcHNpZ25fa2VybmVsLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9uY3AuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlICJuY3BfZnMuaCIKICNpbmNsdWRlICJuY3BzaWduX2tlcm5lbC5oIgogCiAvKiBpMzg2OiAzMi1iaXQsIGxpdHRsZSBlbmRpYW4sIGhhbmRsZXMgbWlzLWFsaWdubWVudCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvbmNwc2lnbl9rZXJuZWwuaCBiL2ZzL25jcGZzL25jcHNpZ25fa2VybmVsLmgKaW5kZXggNjQ1MWE2OC4uZDlhMTQzOCAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvbmNwc2lnbl9rZXJuZWwuaAorKysgYi9mcy9uY3Bmcy9uY3BzaWduX2tlcm5lbC5oCkBAIC04LDggKzgsNiBAQAogI2lmbmRlZiBfTkNQU0lHTl9LRVJORUxfSAogI2RlZmluZSBfTkNQU0lHTl9LRVJORUxfSAogCi0jaW5jbHVkZSA8bGludXgvbmNwX2ZzLmg+Ci0KICNpZmRlZiBDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkcKIHZvaWQgX19zaWduX3BhY2tldChzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSwgX191MzIgdG90YWxzaXplLCB2b2lkICpzaWduX2J1ZmYpOwogaW50IHNpZ25fdmVyaWZ5X3JlcGx5KHN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIsIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBzaXplLCBfX3UzMiB0b3RhbHNpemUsIGNvbnN0IHZvaWQgKnNpZ25fYnVmZik7CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9zb2NrLmMgYi9mcy9uY3Bmcy9zb2NrLmMKaW5kZXggNjY4YmQyNi4uM2ExNTg3MiAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvc29jay5jCisrKyBiL2ZzL25jcGZzL3NvY2suYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9uY3BfZnMuaD4KKyNpbmNsdWRlICJuY3BfZnMuaCIKIAogI2luY2x1ZGUgIm5jcHNpZ25fa2VybmVsLmgiCiAKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL3N5bWxpbmsuYyBiL2ZzL25jcGZzL3N5bWxpbmsuYwppbmRleCBjNjM0ZmQxLi42NjFmODYxIDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9zeW1saW5rLmMKKysrIGIvZnMvbmNwZnMvc3ltbGluay5jCkBAIC0yNSwxMyArMjUsMTEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9uY3BfZnMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgIm5jcGxpYl9rZXJuZWwuaCIKLQorI2luY2x1ZGUgIm5jcF9mcy5oIgogCiAvKiB0aGVzZSBtYWdpYyBudW1iZXJzIG11c3QgYXBwZWFyIGluIHRoZSBzeW1saW5rIGZpbGUgLS0gdGhpcyBtYWtlcyBpdCBhIGJpdAogICAgbW9yZSByZXNpbGllbnQgYWdhaW5zdCB0aGUgbWFnaWMgYXR0cmlidXRlcyBiZWluZyBzZXQgb24gcmFuZG9tIGZpbGVzLiAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmMgYi9mcy9uZnMvY2FsbGJhY2suYwppbmRleCA5M2E4YjNiLi4xOTkwMTY1IDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suYworKysgYi9mcy9uZnMvY2FsbGJhY2suYwpAQCAtMTYsOSArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Y2F1dGhfZ3NzLmg+Ci0jaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2JjX3hwcnQuaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8bmV0L2luZXRfc29jay5oPgogCkBAIC0xMzcsNiArMTM1LDMzIEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKIC8qCisgKiAgKiBDQl9TRVFVRU5DRSBvcGVyYXRpb25zIHdpbGwgZmFpbCB1bnRpbCB0aGUgY2FsbGJhY2sgc2Vzc2lvbmlkIGlzIHNldC4KKyAqICAgKi8KK2ludCBuZnM0X3NldF9jYWxsYmFja19zZXNzaW9uaWQoc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3sKKwlzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYgPSBjbHAtPmNsX3JwY2NsaWVudC0+Y2xfeHBydC0+YmNfc2VydjsKKwlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKmJjX3NpZDsKKworCWlmICghc2Vydi0+c3ZfYmNfeHBydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBvbiBzdWNjZXNzIGZyZWVkIGluIHhwcnRfZnJlZSAqLworCWJjX3NpZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZnM0X3Nlc3Npb25pZCksIEdGUF9LRVJORUwpOworCWlmICghYmNfc2lkKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoYmNfc2lkLT5kYXRhLCAmY2xwLT5jbF9zZXNzaW9uLT5zZXNzX2lkLmRhdGEsCisJCU5GUzRfTUFYX1NFU1NJT05JRF9MRU4pOworCXNwaW5fbG9ja19iaCgmc2Vydi0+c3ZfY2JfbG9jayk7CisJc2Vydi0+c3ZfYmNfeHBydC0+eHB0X2JjX3NpZCA9IGJjX3NpZDsKKwlzcGluX3VubG9ja19iaCgmc2Vydi0+c3ZfY2JfbG9jayk7CisJZHByaW50aygiJXMgc2V0IHhwdF9iY19zaWQ9JXU6JXU6JXU6JXUgZm9yIHN2X2JjX3hwcnQgJXBcbiIsIF9fZnVuY19fLAorCQkoKHUzMiAqKWJjX3NpZC0+ZGF0YSlbMF0sICgodTMyICopYmNfc2lkLT5kYXRhKVsxXSwKKwkJKCh1MzIgKiliY19zaWQtPmRhdGEpWzJdLCAoKHUzMiAqKWJjX3NpZC0+ZGF0YSlbM10sCisJCXNlcnYtPnN2X2JjX3hwcnQpOworCXJldHVybiAwOworfQorCisvKgogICogVGhlIGNhbGxiYWNrIHNlcnZpY2UgZm9yIE5GU3Y0LjEgY2FsbGJhY2tzCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTE3NywzMCArMjAyLDM4IEBACiBzdHJ1Y3Qgc3ZjX3Jxc3QgKgogbmZzNDFfY2FsbGJhY2tfdXAoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCiB7Ci0Jc3RydWN0IHN2Y194cHJ0ICpiY194cHJ0OwotCXN0cnVjdCBzdmNfcnFzdCAqcnFzdHAgPSBFUlJfUFRSKC1FTk9NRU0pOworCXN0cnVjdCBzdmNfcnFzdCAqcnFzdHA7CisJaW50IHJldDsKIAotCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOwotCS8qIENyZWF0ZSBhIHN2Y19zb2NrIGZvciB0aGUgc2VydmljZSAqLwotCWJjX3hwcnQgPSBzdmNfc29ja19jcmVhdGUoc2VydiwgeHBydC0+cHJvdCk7Ci0JaWYgKCFiY194cHJ0KQorCS8qCisJICogQ3JlYXRlIGFuIHN2Y19zb2NrIGZvciB0aGUgYmFjayBjaGFubmVsIHNlcnZpY2UgdGhhdCBzaGFyZXMgdGhlCisJICogZm9yZSBjaGFubmVsIGNvbm5lY3Rpb24uCisJICogUmV0dXJucyB0aGUgaW5wdXQgcG9ydCAoMCkgYW5kIHNldHMgdGhlIHN2Y19zZXJ2IGJjX3hwcnQgb24gc3VjY2VzcworCSAqLworCXJldCA9IHN2Y19jcmVhdGVfeHBydChzZXJ2LCAidGNwLWJjIiwgJmluaXRfbmV0LCBQRl9JTkVULCAwLAorCQkJICAgICAgU1ZDX1NPQ0tfQU5PTllNT1VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlycXN0cCA9IEVSUl9QVFIocmV0KTsKIAkJZ290byBvdXQ7CisJfQogCiAJLyoKIAkgKiBTYXZlIHRoZSBzdmNfc2VydiBpbiB0aGUgdHJhbnNwb3J0IHNvIHRoYXQgaXQgY2FuCiAJICogYmUgcmVmZXJlbmNlZCB3aGVuIHRoZSBzZXNzaW9uIGJhY2tjaGFubmVsIGlzIGluaXRpYWxpemVkCiAJICovCi0Jc2Vydi0+YmNfeHBydCA9IGJjX3hwcnQ7CiAJeHBydC0+YmNfc2VydiA9IHNlcnY7CiAKIAlJTklUX0xJU1RfSEVBRCgmc2Vydi0+c3ZfY2JfbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJnNlcnYtPnN2X2NiX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlcnYtPnN2X2NiX3dhaXRxKTsKIAlycXN0cCA9IHN2Y19wcmVwYXJlX3RocmVhZChzZXJ2LCAmc2Vydi0+c3ZfcG9vbHNbMF0pOwotCWlmIChJU19FUlIocnFzdHApKQotCQlzdmNfc29ja19kZXN0cm95KGJjX3hwcnQpOworCWlmIChJU19FUlIocnFzdHApKSB7CisJCXN2Y194cHJ0X3B1dChzZXJ2LT5zdl9iY194cHJ0KTsKKwkJc2Vydi0+c3ZfYmNfeHBydCA9IE5VTEw7CisJfQogb3V0OgotCWRwcmludGsoIi0tPiAlcyByZXR1cm4gJXBcbiIsIF9fZnVuY19fLCBycXN0cCk7CisJZHByaW50aygiLS0+ICVzIHJldHVybiAlbGRcbiIsIF9fZnVuY19fLAorCQlJU19FUlIocnFzdHApID8gUFRSX0VSUihycXN0cCkgOiAwKTsKIAlyZXR1cm4gcnFzdHA7CiB9CiAKQEAgLTIzMyw2ICsyNjYsMTAgQEAKIAkJc3RydWN0IG5mc19jYWxsYmFja19kYXRhICpjYl9pbmZvKQogewogfQoraW50IG5mczRfc2V0X2NhbGxiYWNrX3Nlc3Npb25pZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQoreworCXJldHVybiAwOworfQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwogCiAvKgpAQCAtMzI4LDYgKzM2NSw5IEBACiAJc3RydWN0IHJwY19jbG50ICpyID0gY2xwLT5jbF9ycGNjbGllbnQ7CiAJY2hhciAqcCA9IHN2Y19nc3NfcHJpbmNpcGFsKHJxc3RwKTsKIAorCS8qIE5vIFJQQ19BVVRIX0dTUyBvbiBORlN2NC4xIGJhY2sgY2hhbm5lbCB5ZXQgKi8KKwlpZiAoY2xwLT5jbF9taW5vcnZlcnNpb24gIT0gMCkKKwkJcmV0dXJuIFNWQ19EUk9QOwogCS8qCiAJICogSXQgbWlnaHQganVzdCBiZSBhIG5vcm1hbCB1c2VyIHByaW5jaXBhbCwgaW4gd2hpY2ggY2FzZQogCSAqIHVzZXJzcGFjZSB3b24ndCBib3RoZXIgdG8gdGVsbCB1cyB0aGUgbmFtZSBhdCBhbGwuCkBAIC0zNDUsNiArMzg1LDIzIEBACiAJcmV0dXJuIFNWQ19PSzsKIH0KIAorLyogcGdfYXV0aGVudGljYXRlIG1ldGhvZCBoZWxwZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgbmZzX2NsaWVudCAqbmZzX2NiX2ZpbmRfY2xpZW50KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCit7CisJc3RydWN0IG5mczRfc2Vzc2lvbmlkICpzZXNzaW9uaWQgPSBiY194cHJ0X3NpZChycXN0cCk7CisJaW50IGlzX2NiX2NvbXBvdW5kID0gcnFzdHAtPnJxX3Byb2MgPT0gQ0JfQ09NUE9VTkQgPyAxIDogMDsKKworCWRwcmludGsoIi0tPiAlcyBycV9wcm9jICVkXG4iLCBfX2Z1bmNfXywgcnFzdHAtPnJxX3Byb2MpOworCWlmIChzdmNfaXNfYmFja2NoYW5uZWwocnFzdHApKQorCQkvKiBTZXNzaW9uaWQgKHVzdWFsbHkpIHNldCBhZnRlciBDQl9OVUxMIHBpbmcgKi8KKwkJcmV0dXJuIG5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKHN2Y19hZGRyKHJxc3RwKSwgc2Vzc2lvbmlkLAorCQkJCQkJICBpc19jYl9jb21wb3VuZCk7CisJZWxzZQorCQkvKiBObyBjYWxsYmFjayBpZGVudGlmaWVyIGluIHBnX2F1dGhlbnRpY2F0ZSAqLworCQlyZXR1cm4gbmZzNF9maW5kX2NsaWVudF9ub19pZGVudChzdmNfYWRkcihycXN0cCkpOworfQorCisvKiBwZ19hdXRoZW50aWNhdGUgbWV0aG9kIGZvciBuZnN2NCBjYWxsYmFjayB0aHJlYWRzLiAqLwogc3RhdGljIGludCBuZnNfY2FsbGJhY2tfYXV0aGVudGljYXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscDsKQEAgLTM1Miw3ICs0MDksNyBAQAogCWludCByZXQgPSBTVkNfT0s7CiAKIAkvKiBEb24ndCB0YWxrIHRvIHN0cmFuZ2VycyAqLwotCWNscCA9IG5mc19maW5kX2NsaWVudChzdmNfYWRkcihycXN0cCksIDQpOworCWNscCA9IG5mc19jYl9maW5kX2NsaWVudChycXN0cCk7CiAJaWYgKGNscCA9PSBOVUxMKQogCQlyZXR1cm4gU1ZDX0RST1A7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFjay5oIGIvZnMvbmZzL2NhbGxiYWNrLmgKaW5kZXggODVhN2NmZC4uZDNiNDRmOSAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrLmgKKysrIGIvZnMvbmZzL2NhbGxiYWNrLmgKQEAgLTM0LDEwICszNCwxNyBAQAogCU9QX0NCX0lMTEVHQUwgPSAxMDA0NCwKIH07CiAKK3N0cnVjdCBjYl9wcm9jZXNzX3N0YXRlIHsKKwlfX2JlMzIJCQlkcmNfc3RhdHVzOworCXN0cnVjdCBuZnNfY2xpZW50CSpjbHA7CisJc3RydWN0IG5mczRfc2Vzc2lvbmlkCSpzdmNfc2lkOyAvKiB2NC4xIGNhbGxiYWNrIHNlcnZpY2Ugc2Vzc2lvbmlkICovCit9OworCiBzdHJ1Y3QgY2JfY29tcG91bmRfaGRyX2FyZyB7CiAJdW5zaWduZWQgaW50IHRhZ2xlbjsKIAljb25zdCBjaGFyICp0YWc7CiAJdW5zaWduZWQgaW50IG1pbm9ydmVyc2lvbjsKKwl1bnNpZ25lZCBpbnQgY2JfaWRlbnQ7IC8qIHY0LjAgY2FsbGJhY2sgaWRlbnRpZmllciAqLwogCXVuc2lnbmVkIG5vcHM7CiB9OwogCkBAIC0xMDMsMTQgKzExMCwyMyBAQAogCXVpbnQzMl90CQkJY3NyX3RhcmdldF9oaWdoZXN0c2xvdGlkOwogfTsKIAotZXh0ZXJuIHVuc2lnbmVkIG5mczRfY2FsbGJhY2tfc2VxdWVuY2Uoc3RydWN0IGNiX3NlcXVlbmNlYXJncyAqYXJncywKLQkJCQkgICAgICAgc3RydWN0IGNiX3NlcXVlbmNlcmVzICpyZXMpOworZXh0ZXJuIF9fYmUzMiBuZnM0X2NhbGxiYWNrX3NlcXVlbmNlKHN0cnVjdCBjYl9zZXF1ZW5jZWFyZ3MgKmFyZ3MsCisJCQkJICAgICAgIHN0cnVjdCBjYl9zZXF1ZW5jZXJlcyAqcmVzLAorCQkJCSAgICAgICBzdHJ1Y3QgY2JfcHJvY2Vzc19zdGF0ZSAqY3BzKTsKIAogZXh0ZXJuIGludCBuZnM0MV92YWxpZGF0ZV9kZWxlZ2F0aW9uX3N0YXRlaWQoc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uLAogCQkJCQkgICAgIGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZCk7CiAKICNkZWZpbmUgUkNBNF9UWVBFX01BU0tfUkRBVEFfRExHCTAKICNkZWZpbmUgUkNBNF9UWVBFX01BU0tfV0RBVEFfRExHCTEKKyNkZWZpbmUgUkNBNF9UWVBFX01BU0tfRElSX0RMRyAgICAgICAgIDIKKyNkZWZpbmUgUkNBNF9UWVBFX01BU0tfRklMRV9MQVlPVVQgICAgIDMKKyNkZWZpbmUgUkNBNF9UWVBFX01BU0tfQkxLX0xBWU9VVCAgICAgIDQKKyNkZWZpbmUgUkNBNF9UWVBFX01BU0tfT0JKX0xBWU9VVF9NSU4gIDgKKyNkZWZpbmUgUkNBNF9UWVBFX01BU0tfT0JKX0xBWU9VVF9NQVggIDkKKyNkZWZpbmUgUkNBNF9UWVBFX01BU0tfT1RIRVJfTEFZT1VUX01JTiAxMgorI2RlZmluZSBSQ0E0X1RZUEVfTUFTS19PVEhFUl9MQVlPVVRfTUFYIDE1CisjZGVmaW5lIFJDQTRfVFlQRV9NQVNLX0FMTCAweGYzMWYKIAogc3RydWN0IGNiX3JlY2FsbGFueWFyZ3MgewogCXN0cnVjdCBzb2NrYWRkcgkqY3JhYV9hZGRyOwpAQCAtMTE4LDI1ICsxMzQsNTIgQEAKIAl1aW50MzJfdAljcmFhX3R5cGVfbWFzazsKIH07CiAKLWV4dGVybiB1bnNpZ25lZCBuZnM0X2NhbGxiYWNrX3JlY2FsbGFueShzdHJ1Y3QgY2JfcmVjYWxsYW55YXJncyAqYXJncywgdm9pZCAqZHVtbXkpOworZXh0ZXJuIF9fYmUzMiBuZnM0X2NhbGxiYWNrX3JlY2FsbGFueShzdHJ1Y3QgY2JfcmVjYWxsYW55YXJncyAqYXJncywKKwkJCQkJdm9pZCAqZHVtbXksCisJCQkJCXN0cnVjdCBjYl9wcm9jZXNzX3N0YXRlICpjcHMpOwogCiBzdHJ1Y3QgY2JfcmVjYWxsc2xvdGFyZ3MgewogCXN0cnVjdCBzb2NrYWRkcgkqY3JzYV9hZGRyOwogCXVpbnQzMl90CWNyc2FfdGFyZ2V0X21heF9zbG90czsKIH07Ci1leHRlcm4gdW5zaWduZWQgbmZzNF9jYWxsYmFja19yZWNhbGxzbG90KHN0cnVjdCBjYl9yZWNhbGxzbG90YXJncyAqYXJncywKLQkJCQkJICB2b2lkICpkdW1teSk7CitleHRlcm4gX19iZTMyIG5mczRfY2FsbGJhY2tfcmVjYWxsc2xvdChzdHJ1Y3QgY2JfcmVjYWxsc2xvdGFyZ3MgKmFyZ3MsCisJCQkJCSB2b2lkICpkdW1teSwKKwkJCQkJIHN0cnVjdCBjYl9wcm9jZXNzX3N0YXRlICpjcHMpOwogCitzdHJ1Y3QgY2JfbGF5b3V0cmVjYWxsYXJncyB7CisJc3RydWN0IHNvY2thZGRyCQkqY2JsX2FkZHI7CisJdWludDMyX3QJCWNibF9yZWNhbGxfdHlwZTsKKwl1aW50MzJfdAkJY2JsX2xheW91dF90eXBlOworCXVpbnQzMl90CQljYmxfbGF5b3V0Y2hhbmdlZDsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgbmZzX2ZoCQljYmxfZmg7CisJCQlzdHJ1Y3QgcG5mc19sYXlvdXRfcmFuZ2UgY2JsX3JhbmdlOworCQkJbmZzNF9zdGF0ZWlkCQljYmxfc3RhdGVpZDsKKwkJfTsKKwkJc3RydWN0IG5mc19mc2lkCQljYmxfZnNpZDsKKwl9OworfTsKKworZXh0ZXJuIHVuc2lnbmVkIG5mczRfY2FsbGJhY2tfbGF5b3V0cmVjYWxsKAorCXN0cnVjdCBjYl9sYXlvdXRyZWNhbGxhcmdzICphcmdzLAorCXZvaWQgKmR1bW15LCBzdHJ1Y3QgY2JfcHJvY2Vzc19zdGF0ZSAqY3BzKTsKKworZXh0ZXJuIHZvaWQgbmZzNF9jaGVja19kcmFpbl9iY19jb21wbGV0ZShzdHJ1Y3QgbmZzNF9zZXNzaW9uICpzZXMpOworZXh0ZXJuIHZvaWQgbmZzNF9jYl90YWtlX3Nsb3Qoc3RydWN0IG5mc19jbGllbnQgKmNscCk7CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKLWV4dGVybiBfX2JlMzIgbmZzNF9jYWxsYmFja19nZXRhdHRyKHN0cnVjdCBjYl9nZXRhdHRyYXJncyAqYXJncywgc3RydWN0IGNiX2dldGF0dHJyZXMgKnJlcyk7Ci1leHRlcm4gX19iZTMyIG5mczRfY2FsbGJhY2tfcmVjYWxsKHN0cnVjdCBjYl9yZWNhbGxhcmdzICphcmdzLCB2b2lkICpkdW1teSk7Ci0KK2V4dGVybiBfX2JlMzIgbmZzNF9jYWxsYmFja19nZXRhdHRyKHN0cnVjdCBjYl9nZXRhdHRyYXJncyAqYXJncywKKwkJCQkgICAgc3RydWN0IGNiX2dldGF0dHJyZXMgKnJlcywKKwkJCQkgICAgc3RydWN0IGNiX3Byb2Nlc3Nfc3RhdGUgKmNwcyk7CitleHRlcm4gX19iZTMyIG5mczRfY2FsbGJhY2tfcmVjYWxsKHN0cnVjdCBjYl9yZWNhbGxhcmdzICphcmdzLCB2b2lkICpkdW1teSwKKwkJCQkgICBzdHJ1Y3QgY2JfcHJvY2Vzc19zdGF0ZSAqY3BzKTsKICNpZmRlZiBDT05GSUdfTkZTX1Y0CiBleHRlcm4gaW50IG5mc19jYWxsYmFja191cCh1MzIgbWlub3J2ZXJzaW9uLCBzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpOwogZXh0ZXJuIHZvaWQgbmZzX2NhbGxiYWNrX2Rvd24oaW50IG1pbm9ydmVyc2lvbik7CiBleHRlcm4gaW50IG5mczRfdmFsaWRhdGVfZGVsZWdhdGlvbl9zdGF0ZWlkKHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbiwKIAkJCQkJICAgIGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZCk7CitleHRlcm4gaW50IG5mczRfc2V0X2NhbGxiYWNrX3Nlc3Npb25pZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0ICovCiAvKgogICogbmZzNDE6IENhbGxiYWNrcyBhcmUgZXhwZWN0ZWQgdG8gbm90IGNhdXNlIHN1YnN0YW50aWFsIGxhdGVuY3ksCmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jIGIvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYwppbmRleCAyOTUwZmNhLi40YmI5MWNiIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCisrKyBiL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKQEAgLTEyLDMwICsxMiwzMyBAQAogI2luY2x1ZGUgImNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiZGVsZWdhdGlvbi5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAicG5mcy5oIgogCiAjaWZkZWYgTkZTX0RFQlVHCiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWSBORlNEQkdfQ0FMTEJBQ0sKICNlbmRpZgotIAotX19iZTMyIG5mczRfY2FsbGJhY2tfZ2V0YXR0cihzdHJ1Y3QgY2JfZ2V0YXR0cmFyZ3MgKmFyZ3MsIHN0cnVjdCBjYl9nZXRhdHRycmVzICpyZXMpCisKK19fYmUzMiBuZnM0X2NhbGxiYWNrX2dldGF0dHIoc3RydWN0IGNiX2dldGF0dHJhcmdzICphcmdzLAorCQkJICAgICBzdHJ1Y3QgY2JfZ2V0YXR0cnJlcyAqcmVzLAorCQkJICAgICBzdHJ1Y3QgY2JfcHJvY2Vzc19zdGF0ZSAqY3BzKQogewotCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOwogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2k7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAotCXJlcy0+Yml0bWFwWzBdID0gcmVzLT5iaXRtYXBbMV0gPSAwOwotCXJlcy0+c3RhdHVzID0gaHRvbmwoTkZTNEVSUl9CQURIQU5ETEUpOwotCWNscCA9IG5mc19maW5kX2NsaWVudChhcmdzLT5hZGRyLCA0KTsKLQlpZiAoY2xwID09IE5VTEwpCisJcmVzLT5zdGF0dXMgPSBodG9ubChORlM0RVJSX09QX05PVF9JTl9TRVNTSU9OKTsKKwlpZiAoIWNwcy0+Y2xwKSAvKiBBbHdheXMgc2V0IGZvciB2NC4wLiBTZXQgaW4gY2Jfc2VxdWVuY2UgZm9yIHY0LjEgKi8KIAkJZ290byBvdXQ7CiAKLQlkcHJpbnRrKCJORlM6IEdFVEFUVFIgY2FsbGJhY2sgcmVxdWVzdCBmcm9tICVzXG4iLAotCQlycGNfcGVlcmFkZHIyc3RyKGNscC0+Y2xfcnBjY2xpZW50LCBSUENfRElTUExBWV9BRERSKSk7CisJcmVzLT5iaXRtYXBbMF0gPSByZXMtPmJpdG1hcFsxXSA9IDA7CisJcmVzLT5zdGF0dXMgPSBodG9ubChORlM0RVJSX0JBREhBTkRMRSk7CiAKLQlpbm9kZSA9IG5mc19kZWxlZ2F0aW9uX2ZpbmRfaW5vZGUoY2xwLCAmYXJncy0+ZmgpOworCWRwcmludGsoIk5GUzogR0VUQVRUUiBjYWxsYmFjayByZXF1ZXN0IGZyb20gJXNcbiIsCisJCXJwY19wZWVyYWRkcjJzdHIoY3BzLT5jbHAtPmNsX3JwY2NsaWVudCwgUlBDX0RJU1BMQVlfQUREUikpOworCisJaW5vZGUgPSBuZnNfZGVsZWdhdGlvbl9maW5kX2lub2RlKGNwcy0+Y2xwLCAmYXJncy0+ZmgpOwogCWlmIChpbm9kZSA9PSBOVUxMKQotCQlnb3RvIG91dF9wdXRjbGllbnQ7CisJCWdvdG8gb3V0OwogCW5mc2kgPSBORlNfSShpbm9kZSk7CiAJcmN1X3JlYWRfbG9jaygpOwogCWRlbGVnYXRpb24gPSByY3VfZGVyZWZlcmVuY2UobmZzaS0+ZGVsZWdhdGlvbik7CkBAIC01NSw0OSArNTgsNDEgQEAKIG91dF9pcHV0OgogCXJjdV9yZWFkX3VubG9jaygpOwogCWlwdXQoaW5vZGUpOwotb3V0X3B1dGNsaWVudDoKLQluZnNfcHV0X2NsaWVudChjbHApOwogb3V0OgogCWRwcmludGsoIiVzOiBleGl0IHdpdGggc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCBudG9obChyZXMtPnN0YXR1cykpOwogCXJldHVybiByZXMtPnN0YXR1czsKIH0KIAotX19iZTMyIG5mczRfY2FsbGJhY2tfcmVjYWxsKHN0cnVjdCBjYl9yZWNhbGxhcmdzICphcmdzLCB2b2lkICpkdW1teSkKK19fYmUzMiBuZnM0X2NhbGxiYWNrX3JlY2FsbChzdHJ1Y3QgY2JfcmVjYWxsYXJncyAqYXJncywgdm9pZCAqZHVtbXksCisJCQkgICAgc3RydWN0IGNiX3Byb2Nlc3Nfc3RhdGUgKmNwcykKIHsKLQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJX19iZTMyIHJlczsKIAkKLQlyZXMgPSBodG9ubChORlM0RVJSX0JBREhBTkRMRSk7Ci0JY2xwID0gbmZzX2ZpbmRfY2xpZW50KGFyZ3MtPmFkZHIsIDQpOwotCWlmIChjbHAgPT0gTlVMTCkKKwlyZXMgPSBodG9ubChORlM0RVJSX09QX05PVF9JTl9TRVNTSU9OKTsKKwlpZiAoIWNwcy0+Y2xwKSAvKiBBbHdheXMgc2V0IGZvciB2NC4wLiBTZXQgaW4gY2Jfc2VxdWVuY2UgZm9yIHY0LjEgKi8KIAkJZ290byBvdXQ7CiAKIAlkcHJpbnRrKCJORlM6IFJFQ0FMTCBjYWxsYmFjayByZXF1ZXN0IGZyb20gJXNcbiIsCi0JCXJwY19wZWVyYWRkcjJzdHIoY2xwLT5jbF9ycGNjbGllbnQsIFJQQ19ESVNQTEFZX0FERFIpKTsKKwkJcnBjX3BlZXJhZGRyMnN0cihjcHMtPmNscC0+Y2xfcnBjY2xpZW50LCBSUENfRElTUExBWV9BRERSKSk7CiAKLQlkbyB7Ci0JCXN0cnVjdCBuZnNfY2xpZW50ICpwcmV2ID0gY2xwOwotCi0JCWlub2RlID0gbmZzX2RlbGVnYXRpb25fZmluZF9pbm9kZShjbHAsICZhcmdzLT5maCk7Ci0JCWlmIChpbm9kZSAhPSBOVUxMKSB7Ci0JCQkvKiBTZXQgdXAgYSBoZWxwZXIgdGhyZWFkIHRvIGFjdHVhbGx5IHJldHVybiB0aGUgZGVsZWdhdGlvbiAqLwotCQkJc3dpdGNoIChuZnNfYXN5bmNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUsICZhcmdzLT5zdGF0ZWlkKSkgewotCQkJCWNhc2UgMDoKLQkJCQkJcmVzID0gMDsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAtRU5PRU5UOgotCQkJCQlpZiAocmVzICE9IDApCi0JCQkJCQlyZXMgPSBodG9ubChORlM0RVJSX0JBRF9TVEFURUlEKTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmVzID0gaHRvbmwoTkZTNEVSUl9SRVNPVVJDRSk7Ci0JCQl9Ci0JCQlpcHV0KGlub2RlKTsKLQkJfQotCQljbHAgPSBuZnNfZmluZF9jbGllbnRfbmV4dChwcmV2KTsKLQkJbmZzX3B1dF9jbGllbnQocHJldik7Ci0JfSB3aGlsZSAoY2xwICE9IE5VTEwpOworCXJlcyA9IGh0b25sKE5GUzRFUlJfQkFESEFORExFKTsKKwlpbm9kZSA9IG5mc19kZWxlZ2F0aW9uX2ZpbmRfaW5vZGUoY3BzLT5jbHAsICZhcmdzLT5maCk7CisJaWYgKGlub2RlID09IE5VTEwpCisJCWdvdG8gb3V0OworCS8qIFNldCB1cCBhIGhlbHBlciB0aHJlYWQgdG8gYWN0dWFsbHkgcmV0dXJuIHRoZSBkZWxlZ2F0aW9uICovCisJc3dpdGNoIChuZnNfYXN5bmNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUsICZhcmdzLT5zdGF0ZWlkKSkgeworCWNhc2UgMDoKKwkJcmVzID0gMDsKKwkJYnJlYWs7CisJY2FzZSAtRU5PRU5UOgorCQlpZiAocmVzICE9IDApCisJCQlyZXMgPSBodG9ubChORlM0RVJSX0JBRF9TVEFURUlEKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzID0gaHRvbmwoTkZTNEVSUl9SRVNPVVJDRSk7CisJfQorCWlwdXQoaW5vZGUpOwogb3V0OgogCWRwcmludGsoIiVzOiBleGl0IHdpdGggc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCBudG9obChyZXMpKTsKIAlyZXR1cm4gcmVzOwpAQCAtMTEzLDYgKzEwOCwxMzkgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQogCitzdGF0aWMgdTMyIGluaXRpYXRlX2ZpbGVfZHJhaW5pbmcoc3RydWN0IG5mc19jbGllbnQgKmNscCwKKwkJCQkgIHN0cnVjdCBjYl9sYXlvdXRyZWNhbGxhcmdzICphcmdzKQoreworCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvOworCXN0cnVjdCBpbm9kZSAqaW5vOworCWJvb2wgZm91bmQgPSBmYWxzZTsKKwl1MzIgcnYgPSBORlM0RVJSX05PTUFUQ0hJTkdfTEFZT1VUOworCUxJU1RfSEVBRChmcmVlX21lX2xpc3QpOworCisJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkobG8sICZjbHAtPmNsX2xheW91dHMsIHBsaF9sYXlvdXRzKSB7CisJCWlmIChuZnNfY29tcGFyZV9maCgmYXJncy0+Y2JsX2ZoLAorCQkJCSAgICZORlNfSShsby0+cGxoX2lub2RlKS0+ZmgpKQorCQkJY29udGludWU7CisJCWlubyA9IGlncmFiKGxvLT5wbGhfaW5vZGUpOworCQlpZiAoIWlubykKKwkJCWNvbnRpbnVlOworCQlmb3VuZCA9IHRydWU7CisJCS8qIFdpdGhvdXQgdGhpcywgbGF5b3V0IGNhbiBiZSBmcmVlZCBhcyBzb29uCisJCSAqIGFzIHdlIHJlbGVhc2UgY2xfbG9jay4KKwkJICovCisJCWdldF9sYXlvdXRfaGRyKGxvKTsKKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOworCWlmICghZm91bmQpCisJCXJldHVybiBORlM0RVJSX05PTUFUQ0hJTkdfTEFZT1VUOworCisJc3Bpbl9sb2NrKCZpbm8tPmlfbG9jayk7CisJaWYgKHRlc3RfYml0KE5GU19MQVlPVVRfQlVMS19SRUNBTEwsICZsby0+cGxoX2ZsYWdzKSB8fAorCSAgICBtYXJrX21hdGNoaW5nX2xzZWdzX2ludmFsaWQobG8sICZmcmVlX21lX2xpc3QsCisJCQkJCWFyZ3MtPmNibF9yYW5nZS5pb21vZGUpKQorCQlydiA9IE5GUzRFUlJfREVMQVk7CisJZWxzZQorCQlydiA9IE5GUzRFUlJfTk9NQVRDSElOR19MQVlPVVQ7CisJcG5mc19zZXRfbGF5b3V0X3N0YXRlaWQobG8sICZhcmdzLT5jYmxfc3RhdGVpZCwgdHJ1ZSk7CisJc3Bpbl91bmxvY2soJmluby0+aV9sb2NrKTsKKwlwbmZzX2ZyZWVfbHNlZ19saXN0KCZmcmVlX21lX2xpc3QpOworCXB1dF9sYXlvdXRfaGRyKGxvKTsKKwlpcHV0KGlubyk7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgdTMyIGluaXRpYXRlX2J1bGtfZHJhaW5pbmcoc3RydWN0IG5mc19jbGllbnQgKmNscCwKKwkJCQkgIHN0cnVjdCBjYl9sYXlvdXRyZWNhbGxhcmdzICphcmdzKQoreworCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvOworCXN0cnVjdCBpbm9kZSAqaW5vOworCXUzMiBydiA9IE5GUzRFUlJfTk9NQVRDSElOR19MQVlPVVQ7CisJc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqdG1wOworCUxJU1RfSEVBRChyZWNhbGxfbGlzdCk7CisJTElTVF9IRUFEKGZyZWVfbWVfbGlzdCk7CisJc3RydWN0IHBuZnNfbGF5b3V0X3JhbmdlIHJhbmdlID0geworCQkuaW9tb2RlID0gSU9NT0RFX0FOWSwKKwkJLm9mZnNldCA9IDAsCisJCS5sZW5ndGggPSBORlM0X01BWF9VSU5UNjQsCisJfTsKKworCXNwaW5fbG9jaygmY2xwLT5jbF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvLCAmY2xwLT5jbF9sYXlvdXRzLCBwbGhfbGF5b3V0cykgeworCQlpZiAoKGFyZ3MtPmNibF9yZWNhbGxfdHlwZSA9PSBSRVRVUk5fRlNJRCkgJiYKKwkJICAgIG1lbWNtcCgmTkZTX1NFUlZFUihsby0+cGxoX2lub2RlKS0+ZnNpZCwKKwkJCSAgICZhcmdzLT5jYmxfZnNpZCwgc2l6ZW9mKHN0cnVjdCBuZnNfZnNpZCkpKQorCQkJY29udGludWU7CisJCWlmICghaWdyYWIobG8tPnBsaF9pbm9kZSkpCisJCQljb250aW51ZTsKKwkJZ2V0X2xheW91dF9oZHIobG8pOworCQlCVUdfT04oIWxpc3RfZW1wdHkoJmxvLT5wbGhfYnVsa19yZWNhbGwpKTsKKwkJbGlzdF9hZGQoJmxvLT5wbGhfYnVsa19yZWNhbGwsICZyZWNhbGxfbGlzdCk7CisJfQorCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsbywgdG1wLAorCQkJCSAmcmVjYWxsX2xpc3QsIHBsaF9idWxrX3JlY2FsbCkgeworCQlpbm8gPSBsby0+cGxoX2lub2RlOworCQlzcGluX2xvY2soJmluby0+aV9sb2NrKTsKKwkJc2V0X2JpdChORlNfTEFZT1VUX0JVTEtfUkVDQUxMLCAmbG8tPnBsaF9mbGFncyk7CisJCWlmIChtYXJrX21hdGNoaW5nX2xzZWdzX2ludmFsaWQobG8sICZmcmVlX21lX2xpc3QsIHJhbmdlLmlvbW9kZSkpCisJCQlydiA9IE5GUzRFUlJfREVMQVk7CisJCWxpc3RfZGVsX2luaXQoJmxvLT5wbGhfYnVsa19yZWNhbGwpOworCQlzcGluX3VubG9jaygmaW5vLT5pX2xvY2spOworCQlwdXRfbGF5b3V0X2hkcihsbyk7CisJCWlwdXQoaW5vKTsKKwl9CisJcG5mc19mcmVlX2xzZWdfbGlzdCgmZnJlZV9tZV9saXN0KTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyB1MzIgZG9fY2FsbGJhY2tfbGF5b3V0cmVjYWxsKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCisJCQkJICAgIHN0cnVjdCBjYl9sYXlvdXRyZWNhbGxhcmdzICphcmdzKQoreworCXUzMiByZXMgPSBORlM0RVJSX0RFTEFZOworCisJZHByaW50aygiJXMgZW50ZXIsIHR5cGU9JWlcbiIsIF9fZnVuY19fLCBhcmdzLT5jYmxfcmVjYWxsX3R5cGUpOworCWlmICh0ZXN0X2FuZF9zZXRfYml0KE5GUzRDTE5UX0xBWU9VVFJFQ0FMTCwgJmNscC0+Y2xfc3RhdGUpKQorCQlnb3RvIG91dDsKKwlpZiAoYXJncy0+Y2JsX3JlY2FsbF90eXBlID09IFJFVFVSTl9GSUxFKQorCQlyZXMgPSBpbml0aWF0ZV9maWxlX2RyYWluaW5nKGNscCwgYXJncyk7CisJZWxzZQorCQlyZXMgPSBpbml0aWF0ZV9idWxrX2RyYWluaW5nKGNscCwgYXJncyk7CisJY2xlYXJfYml0KE5GUzRDTE5UX0xBWU9VVFJFQ0FMTCwgJmNscC0+Y2xfc3RhdGUpOworb3V0OgorCWRwcmludGsoIiVzIHJldHVybmluZyAlaVxuIiwgX19mdW5jX18sIHJlcyk7CisJcmV0dXJuIHJlczsKKworfQorCitfX2JlMzIgbmZzNF9jYWxsYmFja19sYXlvdXRyZWNhbGwoc3RydWN0IGNiX2xheW91dHJlY2FsbGFyZ3MgKmFyZ3MsCisJCQkJICB2b2lkICpkdW1teSwgc3RydWN0IGNiX3Byb2Nlc3Nfc3RhdGUgKmNwcykKK3sKKwl1MzIgcmVzOworCisJZHByaW50aygiJXM6IC0tPlxuIiwgX19mdW5jX18pOworCisJaWYgKGNwcy0+Y2xwKQorCQlyZXMgPSBkb19jYWxsYmFja19sYXlvdXRyZWNhbGwoY3BzLT5jbHAsIGFyZ3MpOworCWVsc2UKKwkJcmVzID0gTkZTNEVSUl9PUF9OT1RfSU5fU0VTU0lPTjsKKworCWRwcmludGsoIiVzOiBleGl0IHdpdGggc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCByZXMpOworCXJldHVybiBjcHVfdG9fYmUzMihyZXMpOworfQorCitzdGF0aWMgdm9pZCBwbmZzX3JlY2FsbF9hbGxfbGF5b3V0cyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQoreworCXN0cnVjdCBjYl9sYXlvdXRyZWNhbGxhcmdzIGFyZ3M7CisKKwkvKiBQcmV0ZW5kIHdlIGdvdCBhIENCX0xBWU9VVFJFQ0FMTChBTEwpICovCisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCWFyZ3MuY2JsX3JlY2FsbF90eXBlID0gUkVUVVJOX0FMTDsKKwkvKiBGSVhNRSB3ZSBpZ25vcmUgZXJyb3JzLCB3aGF0IHNob3VsZCB3ZSBkbz8gKi8KKwlkb19jYWxsYmFja19sYXlvdXRyZWNhbGwoY2xwLCAmYXJncyk7Cit9CisKIGludCBuZnM0MV92YWxpZGF0ZV9kZWxlZ2F0aW9uX3N0YXRlaWQoc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uLCBjb25zdCBuZnM0X3N0YXRlaWQgKnN0YXRlaWQpCiB7CiAJaWYgKGRlbGVnYXRpb24gPT0gTlVMTCkKQEAgLTE4NSw0MiArMzEzLDYgQEAKIH0KIAogLyoKLSAqIFJldHVybnMgYSBwb2ludGVyIHRvIGEgaGVsZCAnc3RydWN0IG5mc19jbGllbnQnIHRoYXQgbWF0Y2hlcyB0aGUgc2VydmVyJ3MKLSAqIGFkZHJlc3MsIG1ham9yIHZlcnNpb24gbnVtYmVyLCBhbmQgc2Vzc2lvbiBJRC4gIEl0IGlzIHRoZSBjYWxsZXIncwotICogcmVzcG9uc2liaWxpdHkgdG8gcmVsZWFzZSB0aGUgcmV0dXJuZWQgcmVmZXJlbmNlLgotICoKLSAqIFJldHVybnMgTlVMTCBpZiB0aGVyZSBhcmUgbm8gY29ubmVjdGlvbnMgd2l0aCBzZXNzaW9ucywgb3IgaWYgbm8gc2Vzc2lvbgotICogbWF0Y2hlcyB0aGUgb25lIG9mIGludGVyZXN0LgotICovCi0gc3RhdGljIHN0cnVjdCBuZnNfY2xpZW50ICpmaW5kX2NsaWVudF93aXRoX3Nlc3Npb24oCi0JY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLCB1MzIgbmZzdmVyc2lvbiwKLQlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKnNlc3Npb25pZCkKLXsKLQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOwotCi0JY2xwID0gbmZzX2ZpbmRfY2xpZW50KGFkZHIsIDQpOwotCWlmIChjbHAgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlkbyB7Ci0JCXN0cnVjdCBuZnNfY2xpZW50ICpwcmV2ID0gY2xwOwotCi0JCWlmIChjbHAtPmNsX3Nlc3Npb24gIT0gTlVMTCkgewotCQkJaWYgKG1lbWNtcChjbHAtPmNsX3Nlc3Npb24tPnNlc3NfaWQuZGF0YSwKLQkJCQkJc2Vzc2lvbmlkLT5kYXRhLAotCQkJCQlORlM0X01BWF9TRVNTSU9OSURfTEVOKSA9PSAwKSB7Ci0JCQkJLyogUmV0dXJucyBhIGhlbGQgcmVmZXJlbmNlIHRvIGNscCAqLwotCQkJCXJldHVybiBjbHA7Ci0JCQl9Ci0JCX0KLQkJY2xwID0gbmZzX2ZpbmRfY2xpZW50X25leHQocHJldik7Ci0JCW5mc19wdXRfY2xpZW50KHByZXYpOwotCX0gd2hpbGUgKGNscCAhPSBOVUxMKTsKLQotCXJldHVybiBOVUxMOwotfQotCi0vKgogICogRm9yIGVhY2ggcmVmZXJyaW5nIGNhbGwgdHJpcGxlLCBjaGVjayB0aGUgc2Vzc2lvbidzIHNsb3QgdGFibGUgZm9yCiAgKiBhIG1hdGNoLiAgSWYgdGhlIHNsb3QgaXMgaW4gdXNlIGFuZCB0aGUgc2VxdWVuY2UgbnVtYmVycyBtYXRjaCwgdGhlCiAgKiBjbGllbnQgaXMgc3RpbGwgd2FpdGluZyBmb3IgYSByZXNwb25zZSB0byB0aGUgb3JpZ2luYWwgcmVxdWVzdC4KQEAgLTI3NiwyMCArMzY4LDM0IEBACiB9CiAKIF9fYmUzMiBuZnM0X2NhbGxiYWNrX3NlcXVlbmNlKHN0cnVjdCBjYl9zZXF1ZW5jZWFyZ3MgKmFyZ3MsCi0JCQkJc3RydWN0IGNiX3NlcXVlbmNlcmVzICpyZXMpCisJCQkgICAgICBzdHJ1Y3QgY2Jfc2VxdWVuY2VyZXMgKnJlcywKKwkJCSAgICAgIHN0cnVjdCBjYl9wcm9jZXNzX3N0YXRlICpjcHMpCiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscDsKIAlpbnQgaTsKIAlfX2JlMzIgc3RhdHVzOwogCisJY3BzLT5jbHAgPSBOVUxMOworCiAJc3RhdHVzID0gaHRvbmwoTkZTNEVSUl9CQURTRVNTSU9OKTsKLQljbHAgPSBmaW5kX2NsaWVudF93aXRoX3Nlc3Npb24oYXJncy0+Y3NhX2FkZHIsIDQsICZhcmdzLT5jc2Ffc2Vzc2lvbmlkKTsKKwkvKiBJbmNvbWluZyBzZXNzaW9uIG11c3QgbWF0Y2ggdGhlIGNhbGxiYWNrIHNlc3Npb24gKi8KKwlpZiAobWVtY21wKCZhcmdzLT5jc2Ffc2Vzc2lvbmlkLCBjcHMtPnN2Y19zaWQsIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pKQorCQlnb3RvIG91dDsKKworCWNscCA9IG5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKGFyZ3MtPmNzYV9hZGRyLAorCQkJCQkgJmFyZ3MtPmNzYV9zZXNzaW9uaWQsIDEpOwogCWlmIChjbHAgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKKwkvKiBzdGF0ZSBtYW5hZ2VyIGlzIHJlc2V0dGluZyB0aGUgc2Vzc2lvbiAqLworCWlmICh0ZXN0X2JpdChORlM0X1NFU1NJT05fRFJBSU5JTkcsICZjbHAtPmNsX3Nlc3Npb24tPnNlc3Npb25fc3RhdGUpKSB7CisJCXN0YXR1cyA9IE5GUzRFUlJfREVMQVk7CisJCWdvdG8gb3V0OworCX0KKwogCXN0YXR1cyA9IHZhbGlkYXRlX3NlcWlkKCZjbHAtPmNsX3Nlc3Npb24tPmJjX3Nsb3RfdGFibGUsIGFyZ3MpOwogCWlmIChzdGF0dXMpCi0JCWdvdG8gb3V0X3B1dGNsaWVudDsKKwkJZ290byBvdXQ7CiAKIAkvKgogCSAqIENoZWNrIGZvciBwZW5kaW5nIHJlZmVycmluZyBjYWxscy4gIElmIGEgbWF0Y2ggaXMgZm91bmQsIGEKQEAgLTI5OCw3ICs0MDQsNyBAQAogCSAqLwogCWlmIChyZWZlcnJpbmdfY2FsbF9leGlzdHMoY2xwLCBhcmdzLT5jc2FfbnJjbGlzdHMsIGFyZ3MtPmNzYV9yY2xpc3RzKSkgewogCQlzdGF0dXMgPSBodG9ubChORlM0RVJSX0RFTEFZKTsKLQkJZ290byBvdXRfcHV0Y2xpZW50OworCQlnb3RvIG91dDsKIAl9CiAKIAltZW1jcHkoJnJlcy0+Y3NyX3Nlc3Npb25pZCwgJmFyZ3MtPmNzYV9zZXNzaW9uaWQsCkBAIC0zMDcsODMgKzQxMyw5MyBAQAogCXJlcy0+Y3NyX3Nsb3RpZCA9IGFyZ3MtPmNzYV9zbG90aWQ7CiAJcmVzLT5jc3JfaGlnaGVzdHNsb3RpZCA9IE5GUzQxX0JDX01BWF9DQUxMQkFDS1MgLSAxOwogCXJlcy0+Y3NyX3RhcmdldF9oaWdoZXN0c2xvdGlkID0gTkZTNDFfQkNfTUFYX0NBTExCQUNLUyAtIDE7CisJbmZzNF9jYl90YWtlX3Nsb3QoY2xwKTsKKwljcHMtPmNscCA9IGNscDsgLyogcHV0IGluIG5mczRfY2FsbGJhY2tfY29tcG91bmQgKi8KIAotb3V0X3B1dGNsaWVudDoKLQluZnNfcHV0X2NsaWVudChjbHApOwogb3V0OgogCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5jc2FfbnJjbGlzdHM7IGkrKykKIAkJa2ZyZWUoYXJncy0+Y3NhX3JjbGlzdHNbaV0ucmNsX3JlZmNhbGxzKTsKIAlrZnJlZShhcmdzLT5jc2FfcmNsaXN0cyk7CiAKLQlpZiAoc3RhdHVzID09IGh0b25sKE5GUzRFUlJfUkVUUllfVU5DQUNIRURfUkVQKSkKLQkJcmVzLT5jc3Jfc3RhdHVzID0gMDsKLQllbHNlCisJaWYgKHN0YXR1cyA9PSBodG9ubChORlM0RVJSX1JFVFJZX1VOQ0FDSEVEX1JFUCkpIHsKKwkJY3BzLT5kcmNfc3RhdHVzID0gc3RhdHVzOworCQlzdGF0dXMgPSAwOworCX0gZWxzZQogCQlyZXMtPmNzcl9zdGF0dXMgPSBzdGF0dXM7CisKIAlkcHJpbnRrKCIlczogZXhpdCB3aXRoIHN0YXR1cyA9ICVkIHJlcy0+Y3NyX3N0YXR1cyAlZFxuIiwgX19mdW5jX18sCiAJCW50b2hsKHN0YXR1cyksIG50b2hsKHJlcy0+Y3NyX3N0YXR1cykpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKLV9fYmUzMiBuZnM0X2NhbGxiYWNrX3JlY2FsbGFueShzdHJ1Y3QgY2JfcmVjYWxsYW55YXJncyAqYXJncywgdm9pZCAqZHVtbXkpCitzdGF0aWMgYm9vbAordmFsaWRhdGVfYml0bWFwX3ZhbHVlcyh1bnNpZ25lZCBsb25nIG1hc2spCiB7Ci0Jc3RydWN0IG5mc19jbGllbnQgKmNscDsKKwlyZXR1cm4gKG1hc2sgJiB+UkNBNF9UWVBFX01BU0tfQUxMKSA9PSAwOworfQorCitfX2JlMzIgbmZzNF9jYWxsYmFja19yZWNhbGxhbnkoc3RydWN0IGNiX3JlY2FsbGFueWFyZ3MgKmFyZ3MsIHZvaWQgKmR1bW15LAorCQkJICAgICAgIHN0cnVjdCBjYl9wcm9jZXNzX3N0YXRlICpjcHMpCit7CiAJX19iZTMyIHN0YXR1czsKIAlmbW9kZV90IGZsYWdzID0gMDsKIAotCXN0YXR1cyA9IGh0b25sKE5GUzRFUlJfT1BfTk9UX0lOX1NFU1NJT04pOwotCWNscCA9IG5mc19maW5kX2NsaWVudChhcmdzLT5jcmFhX2FkZHIsIDQpOwotCWlmIChjbHAgPT0gTlVMTCkKKwlzdGF0dXMgPSBjcHVfdG9fYmUzMihORlM0RVJSX09QX05PVF9JTl9TRVNTSU9OKTsKKwlpZiAoIWNwcy0+Y2xwKSAvKiBzZXQgaW4gY2Jfc2VxdWVuY2UgKi8KIAkJZ290byBvdXQ7CiAKIAlkcHJpbnRrKCJORlM6IFJFQ0FMTF9BTlkgY2FsbGJhY2sgcmVxdWVzdCBmcm9tICVzXG4iLAotCQlycGNfcGVlcmFkZHIyc3RyKGNscC0+Y2xfcnBjY2xpZW50LCBSUENfRElTUExBWV9BRERSKSk7CisJCXJwY19wZWVyYWRkcjJzdHIoY3BzLT5jbHAtPmNsX3JwY2NsaWVudCwgUlBDX0RJU1BMQVlfQUREUikpOwogCisJc3RhdHVzID0gY3B1X3RvX2JlMzIoTkZTNEVSUl9JTlZBTCk7CisJaWYgKCF2YWxpZGF0ZV9iaXRtYXBfdmFsdWVzKGFyZ3MtPmNyYWFfdHlwZV9tYXNrKSkKKwkJZ290byBvdXQ7CisKKwlzdGF0dXMgPSBjcHVfdG9fYmUzMihORlM0X09LKTsKIAlpZiAodGVzdF9iaXQoUkNBNF9UWVBFX01BU0tfUkRBVEFfRExHLCAoY29uc3QgdW5zaWduZWQgbG9uZyAqKQogCQkgICAgICZhcmdzLT5jcmFhX3R5cGVfbWFzaykpCiAJCWZsYWdzID0gRk1PREVfUkVBRDsKIAlpZiAodGVzdF9iaXQoUkNBNF9UWVBFX01BU0tfV0RBVEFfRExHLCAoY29uc3QgdW5zaWduZWQgbG9uZyAqKQogCQkgICAgICZhcmdzLT5jcmFhX3R5cGVfbWFzaykpCiAJCWZsYWdzIHw9IEZNT0RFX1dSSVRFOwotCisJaWYgKHRlc3RfYml0KFJDQTRfVFlQRV9NQVNLX0ZJTEVfTEFZT1VULCAoY29uc3QgdW5zaWduZWQgbG9uZyAqKQorCQkgICAgICZhcmdzLT5jcmFhX3R5cGVfbWFzaykpCisJCXBuZnNfcmVjYWxsX2FsbF9sYXlvdXRzKGNwcy0+Y2xwKTsKIAlpZiAoZmxhZ3MpCi0JCW5mc19leHBpcmVfYWxsX2RlbGVnYXRpb25fdHlwZXMoY2xwLCBmbGFncyk7Ci0Jc3RhdHVzID0gaHRvbmwoTkZTNF9PSyk7CisJCW5mc19leHBpcmVfYWxsX2RlbGVnYXRpb25fdHlwZXMoY3BzLT5jbHAsIGZsYWdzKTsKIG91dDoKIAlkcHJpbnRrKCIlczogZXhpdCB3aXRoIHN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgbnRvaGwoc3RhdHVzKSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogLyogUmVkdWNlIHRoZSBmb3JlIGNoYW5uZWwncyBtYXhfc2xvdHMgdG8gdGhlIHRhcmdldCB2YWx1ZSAqLwotX19iZTMyIG5mczRfY2FsbGJhY2tfcmVjYWxsc2xvdChzdHJ1Y3QgY2JfcmVjYWxsc2xvdGFyZ3MgKmFyZ3MsIHZvaWQgKmR1bW15KQorX19iZTMyIG5mczRfY2FsbGJhY2tfcmVjYWxsc2xvdChzdHJ1Y3QgY2JfcmVjYWxsc2xvdGFyZ3MgKmFyZ3MsIHZvaWQgKmR1bW15LAorCQkJCXN0cnVjdCBjYl9wcm9jZXNzX3N0YXRlICpjcHMpCiB7Ci0Jc3RydWN0IG5mc19jbGllbnQgKmNscDsKIAlzdHJ1Y3QgbmZzNF9zbG90X3RhYmxlICpmY190Ymw7CiAJX19iZTMyIHN0YXR1czsKIAogCXN0YXR1cyA9IGh0b25sKE5GUzRFUlJfT1BfTk9UX0lOX1NFU1NJT04pOwotCWNscCA9IG5mc19maW5kX2NsaWVudChhcmdzLT5jcnNhX2FkZHIsIDQpOwotCWlmIChjbHAgPT0gTlVMTCkKKwlpZiAoIWNwcy0+Y2xwKSAvKiBzZXQgaW4gY2Jfc2VxdWVuY2UgKi8KIAkJZ290byBvdXQ7CiAKIAlkcHJpbnRrKCJORlM6IENCX1JFQ0FMTF9TTE9UIHJlcXVlc3QgZnJvbSAlcyB0YXJnZXQgbWF4IHNsb3RzICVkXG4iLAotCQlycGNfcGVlcmFkZHIyc3RyKGNscC0+Y2xfcnBjY2xpZW50LCBSUENfRElTUExBWV9BRERSKSwKKwkJcnBjX3BlZXJhZGRyMnN0cihjcHMtPmNscC0+Y2xfcnBjY2xpZW50LCBSUENfRElTUExBWV9BRERSKSwKIAkJYXJncy0+Y3JzYV90YXJnZXRfbWF4X3Nsb3RzKTsKIAotCWZjX3RibCA9ICZjbHAtPmNsX3Nlc3Npb24tPmZjX3Nsb3RfdGFibGU7CisJZmNfdGJsID0gJmNwcy0+Y2xwLT5jbF9zZXNzaW9uLT5mY19zbG90X3RhYmxlOwogCiAJc3RhdHVzID0gaHRvbmwoTkZTNEVSUl9CQURfSElHSF9TTE9UKTsKIAlpZiAoYXJncy0+Y3JzYV90YXJnZXRfbWF4X3Nsb3RzID4gZmNfdGJsLT5tYXhfc2xvdHMgfHwKIAkgICAgYXJncy0+Y3JzYV90YXJnZXRfbWF4X3Nsb3RzIDwgMSkKLQkJZ290byBvdXRfcHV0Y2xpZW50OworCQlnb3RvIG91dDsKIAogCXN0YXR1cyA9IGh0b25sKE5GUzRfT0spOwogCWlmIChhcmdzLT5jcnNhX3RhcmdldF9tYXhfc2xvdHMgPT0gZmNfdGJsLT5tYXhfc2xvdHMpCi0JCWdvdG8gb3V0X3B1dGNsaWVudDsKKwkJZ290byBvdXQ7CiAKIAlmY190YmwtPnRhcmdldF9tYXhfc2xvdHMgPSBhcmdzLT5jcnNhX3RhcmdldF9tYXhfc2xvdHM7Ci0JbmZzNDFfaGFuZGxlX3JlY2FsbF9zbG90KGNscCk7Ci1vdXRfcHV0Y2xpZW50OgotCW5mc19wdXRfY2xpZW50KGNscCk7CS8qIGJhbGFuY2UgbmZzX2ZpbmRfY2xpZW50ICovCisJbmZzNDFfaGFuZGxlX3JlY2FsbF9zbG90KGNwcy0+Y2xwKTsKIG91dDoKIAlkcHJpbnRrKCIlczogZXhpdCB3aXRoIHN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgbnRvaGwoc3RhdHVzKSk7CiAJcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFja194ZHIuYyBiL2ZzL25mcy9jYWxsYmFja194ZHIuYwppbmRleCAwNWFmMjEyLi4yMzExMmMyIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKKysrIGIvZnMvbmZzL2NhbGxiYWNrX3hkci5jCkBAIC0xMCw4ICsxMCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL2JjX3hwcnQuaD4KICNpbmNsdWRlICJuZnM0X2ZzLmgiCiAjaW5jbHVkZSAiY2FsbGJhY2suaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiAjZGVmaW5lIENCX09QX1RBR0xFTl9NQVhTWgkoNTEyKQogI2RlZmluZSBDQl9PUF9IRFJfUkVTX01BWFNaCSgyICsgQ0JfT1BfVEFHTEVOX01BWFNaKQpAQCAtMjIsNiArMjQsNyBAQAogI2RlZmluZSBDQl9PUF9SRUNBTExfUkVTX01BWFNaCShDQl9PUF9IRFJfUkVTX01BWFNaKQogCiAjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCisjZGVmaW5lIENCX09QX0xBWU9VVFJFQ0FMTF9SRVNfTUFYU1oJKENCX09QX0hEUl9SRVNfTUFYU1opCiAjZGVmaW5lIENCX09QX1NFUVVFTkNFX1JFU19NQVhTWgkoQ0JfT1BfSERSX1JFU19NQVhTWiArIFwKIAkJCQkJNCArIDEgKyAzKQogI2RlZmluZSBDQl9PUF9SRUNBTExBTllfUkVTX01BWFNaCShDQl9PUF9IRFJfUkVTX01BWFNaKQpAQCAtMzMsNyArMzYsOCBAQAogLyogSW50ZXJuYWwgZXJyb3IgY29kZSAqLwogI2RlZmluZSBORlM0RVJSX1JFU09VUkNFX0hEUgkxMTA1MAogCi10eXBlZGVmIF9fYmUzMiAoKmNhbGxiYWNrX3Byb2Nlc3Nfb3BfdCkodm9pZCAqLCB2b2lkICopOwordHlwZWRlZiBfX2JlMzIgKCpjYWxsYmFja19wcm9jZXNzX29wX3QpKHZvaWQgKiwgdm9pZCAqLAorCQkJCQlzdHJ1Y3QgY2JfcHJvY2Vzc19zdGF0ZSAqKTsKIHR5cGVkZWYgX19iZTMyICgqY2FsbGJhY2tfZGVjb2RlX2FyZ190KShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHhkcl9zdHJlYW0gKiwgdm9pZCAqKTsKIHR5cGVkZWYgX19iZTMyICgqY2FsbGJhY2tfZW5jb2RlX3Jlc190KShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHhkcl9zdHJlYW0gKiwgdm9pZCAqKTsKIApAQCAtMTYwLDcgKzE2NCw3IEBACiAJaGRyLT5taW5vcnZlcnNpb24gPSBudG9obCgqcCsrKTsKIAkvKiBDaGVjayBtaW5vciB2ZXJzaW9uIGlzIHplcm8gb3Igb25lLiAqLwogCWlmIChoZHItPm1pbm9ydmVyc2lvbiA8PSAxKSB7Ci0JCXArKzsJLyogc2tpcCBjYWxsYmFja19pZGVudCAqLworCQloZHItPmNiX2lkZW50ID0gbnRvaGwoKnArKyk7IC8qIGlnbm9yZWQgYnkgdjQuMSAqLwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBORlN2NCBzZXJ2ZXIgY2FsbGJhY2sgd2l0aCAiCiAJCQkiaWxsZWdhbCBtaW5vciB2ZXJzaW9uICV1IVxuIiwKQEAgLTIyMCw2ICsyMjQsNjYgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQogCitzdGF0aWMgX19iZTMyIGRlY29kZV9sYXlvdXRyZWNhbGxfYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAorCQkJCSAgICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICAgICBzdHJ1Y3QgY2JfbGF5b3V0cmVjYWxsYXJncyAqYXJncykKK3sKKwlfX2JlMzIgKnA7CisJX19iZTMyIHN0YXR1cyA9IDA7CisJdWludDMyX3QgaW9tb2RlOworCisJYXJncy0+Y2JsX2FkZHIgPSBzdmNfYWRkcihycXN0cCk7CisJcCA9IHJlYWRfYnVmKHhkciwgNCAqIHNpemVvZih1aW50MzJfdCkpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKSB7CisJCXN0YXR1cyA9IGh0b25sKE5GUzRFUlJfQkFEWERSKTsKKwkJZ290byBvdXQ7CisJfQorCisJYXJncy0+Y2JsX2xheW91dF90eXBlID0gbnRvaGwoKnArKyk7CisJLyogRGVwaXRlIHRoZSBzcGVjJ3MgeGRyLCBpb21vZGUgcmVhbGx5IGJlbG9uZ3MgaW4gdGhlIEZJTEUgc3dpdGNoLAorCSAqIGFzIGl0IGlzIHVudXNlYWJsZSBhbmQgaWdub3JlZCB3aXRoIHRoZSBvdGhlciB0eXBlcy4KKwkgKi8KKwlpb21vZGUgPSBudG9obCgqcCsrKTsKKwlhcmdzLT5jYmxfbGF5b3V0Y2hhbmdlZCA9IG50b2hsKCpwKyspOworCWFyZ3MtPmNibF9yZWNhbGxfdHlwZSA9IG50b2hsKCpwKyspOworCisJaWYgKGFyZ3MtPmNibF9yZWNhbGxfdHlwZSA9PSBSRVRVUk5fRklMRSkgeworCQlhcmdzLT5jYmxfcmFuZ2UuaW9tb2RlID0gaW9tb2RlOworCQlzdGF0dXMgPSBkZWNvZGVfZmgoeGRyLCAmYXJncy0+Y2JsX2ZoKTsKKwkJaWYgKHVubGlrZWx5KHN0YXR1cyAhPSAwKSkKKwkJCWdvdG8gb3V0OworCisJCXAgPSByZWFkX2J1Zih4ZHIsIDIgKiBzaXplb2YodWludDY0X3QpKTsKKwkJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpIHsKKwkJCXN0YXR1cyA9IGh0b25sKE5GUzRFUlJfQkFEWERSKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZhcmdzLT5jYmxfcmFuZ2Uub2Zmc2V0KTsKKwkJcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJmFyZ3MtPmNibF9yYW5nZS5sZW5ndGgpOworCQlzdGF0dXMgPSBkZWNvZGVfc3RhdGVpZCh4ZHIsICZhcmdzLT5jYmxfc3RhdGVpZCk7CisJCWlmICh1bmxpa2VseShzdGF0dXMgIT0gMCkpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKGFyZ3MtPmNibF9yZWNhbGxfdHlwZSA9PSBSRVRVUk5fRlNJRCkgeworCQlwID0gcmVhZF9idWYoeGRyLCAyICogc2l6ZW9mKHVpbnQ2NF90KSk7CisJCWlmICh1bmxpa2VseShwID09IE5VTEwpKSB7CisJCQlzdGF0dXMgPSBodG9ubChORlM0RVJSX0JBRFhEUik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlwID0geGRyX2RlY29kZV9oeXBlcihwLCAmYXJncy0+Y2JsX2ZzaWQubWFqb3IpOworCQlwID0geGRyX2RlY29kZV9oeXBlcihwLCAmYXJncy0+Y2JsX2ZzaWQubWlub3IpOworCX0gZWxzZSBpZiAoYXJncy0+Y2JsX3JlY2FsbF90eXBlICE9IFJFVFVSTl9BTEwpIHsKKwkJc3RhdHVzID0gaHRvbmwoTkZTNEVSUl9CQURYRFIpOworCQlnb3RvIG91dDsKKwl9CisJZHByaW50aygiJXM6IGx0eXBlIDB4JXggaW9tb2RlICVkIGNoYW5nZWQgJWQgcmVjYWxsX3R5cGUgJWRcbiIsCisJCV9fZnVuY19fLAorCQlhcmdzLT5jYmxfbGF5b3V0X3R5cGUsIGlvbW9kZSwKKwkJYXJncy0+Y2JsX2xheW91dGNoYW5nZWQsIGFyZ3MtPmNibF9yZWNhbGxfdHlwZSk7CitvdXQ6CisJZHByaW50aygiJXM6IGV4aXQgd2l0aCBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIG50b2hsKHN0YXR1cykpOworCXJldHVybiBzdGF0dXM7Cit9CisKIHN0YXRpYyBfX2JlMzIgZGVjb2RlX3Nlc3Npb25pZChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAogCQkJCSBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKnNpZCkKIHsKQEAgLTU3NCwxMCArNjM4LDEwIEBACiAJY2FzZSBPUF9DQl9TRVFVRU5DRToKIAljYXNlIE9QX0NCX1JFQ0FMTF9BTlk6CiAJY2FzZSBPUF9DQl9SRUNBTExfU0xPVDoKKwljYXNlIE9QX0NCX0xBWU9VVFJFQ0FMTDoKIAkJKm9wID0gJmNhbGxiYWNrX29wc1tvcF9ucl07CiAJCWJyZWFrOwogCi0JY2FzZSBPUF9DQl9MQVlPVVRSRUNBTEw6CiAJY2FzZSBPUF9DQl9OT1RJRllfREVWSUNFSUQ6CiAJY2FzZSBPUF9DQl9OT1RJRlk6CiAJY2FzZSBPUF9DQl9QVVNIX0RFTEVHOgpAQCAtNTkzLDYgKzY1NywzNyBAQAogCXJldHVybiBodG9ubChORlNfT0spOwogfQogCitzdGF0aWMgdm9pZCBuZnM0X2NhbGxiYWNrX2ZyZWVfc2xvdChzdHJ1Y3QgbmZzNF9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCBuZnM0X3Nsb3RfdGFibGUgKnRibCA9ICZzZXNzaW9uLT5iY19zbG90X3RhYmxlOworCisJc3Bpbl9sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOworCS8qCisJICogTGV0IHRoZSBzdGF0ZSBtYW5hZ2VyIGtub3cgY2FsbGJhY2sgcHJvY2Vzc2luZyBkb25lLgorCSAqIEEgc2luZ2xlIHNsb3QsIHNvIGhpZ2hlc3QgdXNlZCBzbG90aWQgaXMgZWl0aGVyIDAgb3IgLTEKKwkgKi8KKwl0YmwtPmhpZ2hlc3RfdXNlZF9zbG90aWQtLTsKKwluZnM0X2NoZWNrX2RyYWluX2JjX2NvbXBsZXRlKHNlc3Npb24pOworCXNwaW5fdW5sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBuZnM0X2NiX2ZyZWVfc2xvdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQoreworCWlmIChjbHAgJiYgY2xwLT5jbF9zZXNzaW9uKQorCQluZnM0X2NhbGxiYWNrX2ZyZWVfc2xvdChjbHAtPmNsX3Nlc3Npb24pOworfQorCisvKiBBIHNpbmdsZSBzbG90LCBzbyBoaWdoZXN0IHVzZWQgc2xvdGlkIGlzIGVpdGhlciAwIG9yIC0xICovCit2b2lkIG5mczRfY2JfdGFrZV9zbG90KHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCit7CisJc3RydWN0IG5mczRfc2xvdF90YWJsZSAqdGJsID0gJmNscC0+Y2xfc2Vzc2lvbi0+YmNfc2xvdF90YWJsZTsKKworCXNwaW5fbG9jaygmdGJsLT5zbG90X3RibF9sb2NrKTsKKwl0YmwtPmhpZ2hlc3RfdXNlZF9zbG90aWQrKzsKKwlCVUdfT04odGJsLT5oaWdoZXN0X3VzZWRfc2xvdGlkICE9IDApOworCXNwaW5fdW5sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOworfQorCiAjZWxzZSAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIAogc3RhdGljIF9fYmUzMgpAQCAtNjAxLDYgKzY5Niw5IEBACiAJcmV0dXJuIGh0b25sKE5GUzRFUlJfTUlOT1JfVkVSU19NSVNNQVRDSCk7CiB9CiAKK3N0YXRpYyB2b2lkIG5mczRfY2JfZnJlZV9zbG90KHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCit7Cit9CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKIHN0YXRpYyBfX2JlMzIKQEAgLTYyMSw3ICs3MTksOCBAQAogc3RhdGljIF9fYmUzMiBwcm9jZXNzX29wKHVpbnQzMl90IG1pbm9ydmVyc2lvbiwgaW50IG5vcCwKIAkJc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKIAkJc3RydWN0IHhkcl9zdHJlYW0gKnhkcl9pbiwgdm9pZCAqYXJncCwKLQkJc3RydWN0IHhkcl9zdHJlYW0gKnhkcl9vdXQsIHZvaWQgKnJlc3AsIGludCogZHJjX3N0YXR1cykKKwkJc3RydWN0IHhkcl9zdHJlYW0gKnhkcl9vdXQsIHZvaWQgKnJlc3AsCisJCXN0cnVjdCBjYl9wcm9jZXNzX3N0YXRlICpjcHMpCiB7CiAJc3RydWN0IGNhbGxiYWNrX29wICpvcCA9ICZjYWxsYmFja19vcHNbMF07CiAJdW5zaWduZWQgaW50IG9wX25yOwpAQCAtNjQ0LDggKzc0Myw4IEBACiAJaWYgKHN0YXR1cykKIAkJZ290byBlbmNvZGVfaGRyOwogCi0JaWYgKCpkcmNfc3RhdHVzKSB7Ci0JCXN0YXR1cyA9ICpkcmNfc3RhdHVzOworCWlmIChjcHMtPmRyY19zdGF0dXMpIHsKKwkJc3RhdHVzID0gY3BzLT5kcmNfc3RhdHVzOwogCQlnb3RvIGVuY29kZV9oZHI7CiAJfQogCkBAIC02NTMsMTYgKzc1MiwxMCBAQAogCWlmIChtYXhsZW4gPiAwICYmIG1heGxlbiA8IFBBR0VfU0laRSkgewogCQlzdGF0dXMgPSBvcC0+ZGVjb2RlX2FyZ3MocnFzdHAsIHhkcl9pbiwgYXJncCk7CiAJCWlmIChsaWtlbHkoc3RhdHVzID09IDApKQotCQkJc3RhdHVzID0gb3AtPnByb2Nlc3Nfb3AoYXJncCwgcmVzcCk7CisJCQlzdGF0dXMgPSBvcC0+cHJvY2Vzc19vcChhcmdwLCByZXNwLCBjcHMpOwogCX0gZWxzZQogCQlzdGF0dXMgPSBodG9ubChORlM0RVJSX1JFU09VUkNFKTsKIAotCS8qIE9ubHkgc2V0IGJ5IE9QX0NCX1NFUVVFTkNFIHByb2Nlc3NpbmcgKi8KLQlpZiAoc3RhdHVzID09IGh0b25sKE5GUzRFUlJfUkVUUllfVU5DQUNIRURfUkVQKSkgewotCQkqZHJjX3N0YXR1cyA9IHN0YXR1czsKLQkJc3RhdHVzID0gMDsKLQl9Ci0KIGVuY29kZV9oZHI6CiAJcmVzID0gZW5jb2RlX29wX2hkcih4ZHJfb3V0LCBvcF9uciwgc3RhdHVzKTsKIAlpZiAodW5saWtlbHkocmVzKSkKQEAgLTY4MSw4ICs3NzQsMTEgQEAKIAlzdHJ1Y3QgY2JfY29tcG91bmRfaGRyX2FyZyBoZHJfYXJnID0geyAwIH07CiAJc3RydWN0IGNiX2NvbXBvdW5kX2hkcl9yZXMgaGRyX3JlcyA9IHsgTlVMTCB9OwogCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcl9pbiwgeGRyX291dDsKLQlfX2JlMzIgKnA7Ci0JX19iZTMyIHN0YXR1cywgZHJjX3N0YXR1cyA9IDA7CisJX19iZTMyICpwLCBzdGF0dXM7CisJc3RydWN0IGNiX3Byb2Nlc3Nfc3RhdGUgY3BzID0geworCQkuZHJjX3N0YXR1cyA9IDAsCisJCS5jbHAgPSBOVUxMLAorCX07CiAJdW5zaWduZWQgaW50IG5vcHMgPSAwOwogCiAJZHByaW50aygiJXM6IHN0YXJ0XG4iLCBfX2Z1bmNfXyk7CkBAIC02OTYsNiArNzkyLDEzIEBACiAJaWYgKHN0YXR1cyA9PSBfX2NvbnN0YW50X2h0b25sKE5GUzRFUlJfUkVTT1VSQ0UpKQogCQlyZXR1cm4gcnBjX2dhcmJhZ2VfYXJnczsKIAorCWlmIChoZHJfYXJnLm1pbm9ydmVyc2lvbiA9PSAwKSB7CisJCWNwcy5jbHAgPSBuZnM0X2ZpbmRfY2xpZW50X2lkZW50KGhkcl9hcmcuY2JfaWRlbnQpOworCQlpZiAoIWNwcy5jbHApCisJCQlyZXR1cm4gcnBjX2Ryb3BfcmVwbHk7CisJfSBlbHNlCisJCWNwcy5zdmNfc2lkID0gYmNfeHBydF9zaWQocnFzdHApOworCiAJaGRyX3Jlcy50YWdsZW4gPSBoZHJfYXJnLnRhZ2xlbjsKIAloZHJfcmVzLnRhZyA9IGhkcl9hcmcudGFnOwogCWlmIChlbmNvZGVfY29tcG91bmRfaGRyX3JlcygmeGRyX291dCwgJmhkcl9yZXMpICE9IDApCkBAIC03MDMsNyArODA2LDcgQEAKIAogCXdoaWxlIChzdGF0dXMgPT0gMCAmJiBub3BzICE9IGhkcl9hcmcubm9wcykgewogCQlzdGF0dXMgPSBwcm9jZXNzX29wKGhkcl9hcmcubWlub3J2ZXJzaW9uLCBub3BzLCBycXN0cCwKLQkJCQkgICAgJnhkcl9pbiwgYXJncCwgJnhkcl9vdXQsIHJlc3AsICZkcmNfc3RhdHVzKTsKKwkJCQkgICAgJnhkcl9pbiwgYXJncCwgJnhkcl9vdXQsIHJlc3AsICZjcHMpOwogCQlub3BzKys7CiAJfQogCkBAIC03MTYsNiArODE5LDggQEAKIAogCSpoZHJfcmVzLnN0YXR1cyA9IHN0YXR1czsKIAkqaGRyX3Jlcy5ub3BzID0gaHRvbmwobm9wcyk7CisJbmZzNF9jYl9mcmVlX3Nsb3QoY3BzLmNscCk7CisJbmZzX3B1dF9jbGllbnQoY3BzLmNscCk7CiAJZHByaW50aygiJXM6IGRvbmUsIHN0YXR1cyA9ICV1XG4iLCBfX2Z1bmNfXywgbnRvaGwoc3RhdHVzKSk7CiAJcmV0dXJuIHJwY19zdWNjZXNzOwogfQpAQCAtNzM5LDYgKzg0NCwxMiBAQAogCQkucmVzX21heHNpemUgPSBDQl9PUF9SRUNBTExfUkVTX01BWFNaLAogCX0sCiAjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCisJW09QX0NCX0xBWU9VVFJFQ0FMTF0gPSB7CisJCS5wcm9jZXNzX29wID0gKGNhbGxiYWNrX3Byb2Nlc3Nfb3BfdCluZnM0X2NhbGxiYWNrX2xheW91dHJlY2FsbCwKKwkJLmRlY29kZV9hcmdzID0KKwkJCShjYWxsYmFja19kZWNvZGVfYXJnX3QpZGVjb2RlX2xheW91dHJlY2FsbF9hcmdzLAorCQkucmVzX21heHNpemUgPSBDQl9PUF9MQVlPVVRSRUNBTExfUkVTX01BWFNaLAorCX0sCiAJW09QX0NCX1NFUVVFTkNFXSA9IHsKIAkJLnByb2Nlc3Nfb3AgPSAoY2FsbGJhY2tfcHJvY2Vzc19vcF90KW5mczRfY2FsbGJhY2tfc2VxdWVuY2UsCiAJCS5kZWNvZGVfYXJncyA9IChjYWxsYmFja19kZWNvZGVfYXJnX3QpZGVjb2RlX2NiX3NlcXVlbmNlX2FyZ3MsCmRpZmYgLS1naXQgYS9mcy9uZnMvY2xpZW50LmMgYi9mcy9uZnMvY2xpZW50LmMKaW5kZXggMDg3MGQwZC4uMTkyZjJmOCAxMDA2NDQKLS0tIGEvZnMvbmZzL2NsaWVudC5jCisrKyBiL2ZzL25mcy9jbGllbnQuYwpAQCAtNTYsNiArNTYsMzAgQEAKIHN0YXRpYyBMSVNUX0hFQUQobmZzX2NsaWVudF9saXN0KTsKIHN0YXRpYyBMSVNUX0hFQUQobmZzX3ZvbHVtZV9saXN0KTsKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChuZnNfY2xpZW50X2FjdGl2ZV93cSk7CisjaWZkZWYgQ09ORklHX05GU19WNAorc3RhdGljIERFRklORV9JRFIoY2JfaWRlbnRfaWRyKTsgLyogUHJvdGVjdGVkIGJ5IG5mc19jbGllbnRfbG9jayAqLworCisvKgorICogR2V0IGEgdW5pcXVlIE5GU3Y0LjAgY2FsbGJhY2sgaWRlbnRpZmllciB3aGljaCB3aWxsIGJlIHVzZWQKKyAqIGJ5IHRoZSBWNC4wIGNhbGxiYWNrIHNlcnZpY2UgdG8gbG9va3VwIHRoZSBuZnNfY2xpZW50IHN0cnVjdAorICovCitzdGF0aWMgaW50IG5mc19nZXRfY2JfaWRlbnRfaWRyKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIGludCBtaW5vcnZlcnNpb24pCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoY2xwLT5ycGNfb3BzLT52ZXJzaW9uICE9IDQgfHwgbWlub3J2ZXJzaW9uICE9IDApCisJCXJldHVybiByZXQ7CityZXRyeToKKwlpZiAoIWlkcl9wcmVfZ2V0KCZjYl9pZGVudF9pZHIsIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2soJm5mc19jbGllbnRfbG9jayk7CisJcmV0ID0gaWRyX2dldF9uZXcoJmNiX2lkZW50X2lkciwgY2xwLCAmY2xwLT5jbF9jYl9pZGVudCk7CisJc3Bpbl91bmxvY2soJm5mc19jbGllbnRfbG9jayk7CisJaWYgKHJldCA9PSAtRUFHQUlOKQorCQlnb3RvIHJldHJ5OworCXJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogQ09ORklHX05GU19WNCAqLwogCiAvKgogICogUlBDIGNydWZ0IGZvciBORlMKQEAgLTE0NCw3ICsxNjgsMTAgQEAKIAljbHAtPmNsX3Byb3RvID0gY2xfaW5pdC0+cHJvdG87CiAKICNpZmRlZiBDT05GSUdfTkZTX1Y0Ci0JSU5JVF9MSVNUX0hFQUQoJmNscC0+Y2xfZGVsZWdhdGlvbnMpOworCWVyciA9IG5mc19nZXRfY2JfaWRlbnRfaWRyKGNscCwgY2xfaW5pdC0+bWlub3J2ZXJzaW9uKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yX2NsZWFudXA7CisKIAlzcGluX2xvY2tfaW5pdCgmY2xwLT5jbF9sb2NrKTsKIAlJTklUX0RFTEFZRURfV09SSygmY2xwLT5jbF9yZW5ld2QsIG5mczRfcmVuZXdfc3RhdGUpOwogCXJwY19pbml0X3dhaXRfcXVldWUoJmNscC0+Y2xfcnBjd2FpdHEsICJORlMgY2xpZW50Iik7CkBAIC0xNzAsMjEgKzE5NywxNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX05GU19WNAotLyoKLSAqIENsZWFycy9wdXRzIGFsbCBtaW5vciB2ZXJzaW9uIHNwZWNpZmljIHBhcnRzIGZyb20gYW4gbmZzX2NsaWVudCBzdHJ1Y3QKLSAqIHJldmVydGluZyBpdCB0byBtaW5vcnZlcnNpb24gMC4KLSAqLwotc3RhdGljIHZvaWQgbmZzNF9jbGVhcl9jbGllbnRfbWlub3JfdmVyc2lvbihzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQotewogI2lmZGVmIENPTkZJR19ORlNfVjRfMQotCWlmIChuZnM0X2hhc19zZXNzaW9uKGNscCkpIHsKK3N0YXRpYyB2b2lkIG5mczRfc2h1dGRvd25fc2Vzc2lvbihzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQoreworCWlmIChuZnM0X2hhc19zZXNzaW9uKGNscCkpCiAJCW5mczRfZGVzdHJveV9zZXNzaW9uKGNscC0+Y2xfc2Vzc2lvbik7Ci0JCWNscC0+Y2xfc2Vzc2lvbiA9IE5VTEw7Ci0JfQotCi0JY2xwLT5jbF9tdm9wcyA9IG5mc192NF9taW5vcl9vcHNbMF07Ci0jZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiB9CisjZWxzZSAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KK3N0YXRpYyB2b2lkIG5mczRfc2h1dGRvd25fc2Vzc2lvbihzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQoreworfQorI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwogCiAvKgogICogRGVzdHJveSB0aGUgTkZTNCBjYWxsYmFjayBzZXJ2aWNlCkBAIC0xOTksMTcgKzIyMiw0OSBAQAogewogCWlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChORlNfQ1NfUkVORVdELCAmY2xwLT5jbF9yZXNfc3RhdGUpKQogCQluZnM0X2tpbGxfcmVuZXdkKGNscCk7Ci0JbmZzNF9jbGVhcl9jbGllbnRfbWlub3JfdmVyc2lvbihjbHApOworCW5mczRfc2h1dGRvd25fc2Vzc2lvbihjbHApOwogCW5mczRfZGVzdHJveV9jYWxsYmFjayhjbHApOwogCWlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChORlNfQ1NfSURNQVAsICZjbHAtPmNsX3Jlc19zdGF0ZSkpCiAJCW5mc19pZG1hcF9kZWxldGUoY2xwKTsKIAogCXJwY19kZXN0cm95X3dhaXRfcXVldWUoJmNscC0+Y2xfcnBjd2FpdHEpOwogfQorCisvKiBpZHJfcmVtb3ZlX2FsbCBpcyBub3QgbmVlZGVkIGFzIGFsbCBpZCdzIGFyZSByZW1vdmVkIGJ5IG5mc19wdXRfY2xpZW50ICovCit2b2lkIG5mc19jbGVhbnVwX2NiX2lkZW50X2lkcih2b2lkKQoreworCWlkcl9kZXN0cm95KCZjYl9pZGVudF9pZHIpOworfQorCisvKiBuZnNfY2xpZW50X2xvY2sgaGVsZCAqLworc3RhdGljIHZvaWQgbmZzX2NiX2lkcl9yZW1vdmVfbG9ja2VkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCit7CisJaWYgKGNscC0+Y2xfY2JfaWRlbnQpCisJCWlkcl9yZW1vdmUoJmNiX2lkZW50X2lkciwgY2xwLT5jbF9jYl9pZGVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHBuZnNfaW5pdF9zZXJ2ZXIoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcikKK3sKKwlycGNfaW5pdF93YWl0X3F1ZXVlKCZzZXJ2ZXItPnJvY19ycGN3YWl0cSwgInBORlMgUk9DIik7Cit9CisKICNlbHNlCiBzdGF0aWMgdm9pZCBuZnM0X3NodXRkb3duX2NsaWVudChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQogewogfQorCit2b2lkIG5mc19jbGVhbnVwX2NiX2lkZW50X2lkcih2b2lkKQoreworfQorCitzdGF0aWMgdm9pZCBuZnNfY2JfaWRyX3JlbW92ZV9sb2NrZWQoc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3sKK30KKworc3RhdGljIHZvaWQgcG5mc19pbml0X3NlcnZlcihzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKQoreworfQorCiAjZW5kaWYgLyogQ09ORklHX05GU19WNCAqLwogCiAvKgpAQCAtMjQ4LDYgKzMwMyw3IEBACiAKIAlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmY2xwLT5jbF9jb3VudCwgJm5mc19jbGllbnRfbG9jaykpIHsKIAkJbGlzdF9kZWwoJmNscC0+Y2xfc2hhcmVfbGluayk7CisJCW5mc19jYl9pZHJfcmVtb3ZlX2xvY2tlZChjbHApOwogCQlzcGluX3VubG9jaygmbmZzX2NsaWVudF9sb2NrKTsKIAogCQlCVUdfT04oIWxpc3RfZW1wdHkoJmNscC0+Y2xfc3VwZXJibG9ja3MpKTsKQEAgLTM2Myw3MCArNDE5LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBGaW5kIGEgY2xpZW50IGJ5IElQIGFkZHJlc3MgYW5kIHByb3RvY29sIHZlcnNpb24KLSAqIC0gcmV0dXJucyBOVUxMIGlmIG5vIHN1Y2ggY2xpZW50Ci0gKi8KLXN0cnVjdCBuZnNfY2xpZW50ICpuZnNfZmluZF9jbGllbnQoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLCB1MzIgbmZzdmVyc2lvbikKKy8qIENvbW1vbiBtYXRjaCByb3V0aW5lIGZvciB2NC4wIGFuZCB2NC4xIGNhbGxiYWNrIHNlcnZpY2VzICovCitib29sCituZnM0X2NiX21hdGNoX2NsaWVudChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCisJCSAgICAgdTMyIG1pbm9ydmVyc2lvbikKIHsKLQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOworCXN0cnVjdCBzb2NrYWRkciAqY2xhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmY2xwLT5jbF9hZGRyOwogCi0Jc3Bpbl9sb2NrKCZuZnNfY2xpZW50X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xwLCAmbmZzX2NsaWVudF9saXN0LCBjbF9zaGFyZV9saW5rKSB7Ci0JCXN0cnVjdCBzb2NrYWRkciAqY2xhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmY2xwLT5jbF9hZGRyOworCS8qIERvbid0IG1hdGNoIGNsaWVudHMgdGhhdCBmYWlsZWQgdG8gaW5pdGlhbGlzZSAqLworCWlmICghKGNscC0+Y2xfY29uc19zdGF0ZSA9PSBORlNfQ1NfUkVBRFkgfHwKKwkgICAgY2xwLT5jbF9jb25zX3N0YXRlID09IE5GU19DU19TRVNTSU9OX0lOSVRJTkcpKQorCQlyZXR1cm4gZmFsc2U7CiAKLQkJLyogRG9uJ3QgbWF0Y2ggY2xpZW50cyB0aGF0IGZhaWxlZCB0byBpbml0aWFsaXNlIHByb3Blcmx5ICovCi0JCWlmICghKGNscC0+Y2xfY29uc19zdGF0ZSA9PSBORlNfQ1NfUkVBRFkgfHwKLQkJICAgICAgY2xwLT5jbF9jb25zX3N0YXRlID09IE5GU19DU19TRVNTSU9OX0lOSVRJTkcpKQotCQkJY29udGludWU7CisJLyogTWF0Y2ggdGhlIHZlcnNpb24gYW5kIG1pbm9ydmVyc2lvbiAqLworCWlmIChjbHAtPnJwY19vcHMtPnZlcnNpb24gIT0gNCB8fAorCSAgICBjbHAtPmNsX21pbm9ydmVyc2lvbiAhPSBtaW5vcnZlcnNpb24pCisJCXJldHVybiBmYWxzZTsKIAotCQkvKiBEaWZmZXJlbnQgTkZTIHZlcnNpb25zIGNhbm5vdCBzaGFyZSB0aGUgc2FtZSBuZnNfY2xpZW50ICovCi0JCWlmIChjbHAtPnJwY19vcHMtPnZlcnNpb24gIT0gbmZzdmVyc2lvbikKLQkJCWNvbnRpbnVlOworCS8qIE1hdGNoIG9ubHkgdGhlIElQIGFkZHJlc3MsIG5vdCB0aGUgcG9ydCBudW1iZXIgKi8KKwlpZiAoIW5mc19zb2NrYWRkcl9tYXRjaF9pcGFkZHIoYWRkciwgY2xhcCkpCisJCXJldHVybiBmYWxzZTsKIAotCQkvKiBNYXRjaCBvbmx5IHRoZSBJUCBhZGRyZXNzLCBub3QgdGhlIHBvcnQgbnVtYmVyICovCi0JCWlmICghbmZzX3NvY2thZGRyX21hdGNoX2lwYWRkcihhZGRyLCBjbGFwKSkKLQkJCWNvbnRpbnVlOwotCi0JCWF0b21pY19pbmMoJmNscC0+Y2xfY291bnQpOwotCQlzcGluX3VubG9jaygmbmZzX2NsaWVudF9sb2NrKTsKLQkJcmV0dXJuIGNscDsKLQl9Ci0Jc3Bpbl91bmxvY2soJm5mc19jbGllbnRfbG9jayk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBGaW5kIGEgY2xpZW50IGJ5IElQIGFkZHJlc3MgYW5kIHByb3RvY29sIHZlcnNpb24KLSAqIC0gcmV0dXJucyBOVUxMIGlmIG5vIHN1Y2ggY2xpZW50Ci0gKi8KLXN0cnVjdCBuZnNfY2xpZW50ICpuZnNfZmluZF9jbGllbnRfbmV4dChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQotewotCXN0cnVjdCBzb2NrYWRkciAqc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZjbHAtPmNsX2FkZHI7Ci0JdTMyIG5mc3ZlcnMgPSBjbHAtPnJwY19vcHMtPnZlcnNpb247Ci0KLQlzcGluX2xvY2soJm5mc19jbGllbnRfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShjbHAsICZuZnNfY2xpZW50X2xpc3QsIGNsX3NoYXJlX2xpbmspIHsKLQkJc3RydWN0IHNvY2thZGRyICpjbGFwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZjbHAtPmNsX2FkZHI7Ci0KLQkJLyogRG9uJ3QgbWF0Y2ggY2xpZW50cyB0aGF0IGZhaWxlZCB0byBpbml0aWFsaXNlIHByb3Blcmx5ICovCi0JCWlmIChjbHAtPmNsX2NvbnNfc3RhdGUgIT0gTkZTX0NTX1JFQURZKQotCQkJY29udGludWU7Ci0KLQkJLyogRGlmZmVyZW50IE5GUyB2ZXJzaW9ucyBjYW5ub3Qgc2hhcmUgdGhlIHNhbWUgbmZzX2NsaWVudCAqLwotCQlpZiAoY2xwLT5ycGNfb3BzLT52ZXJzaW9uICE9IG5mc3ZlcnMpCi0JCQljb250aW51ZTsKLQotCQkvKiBNYXRjaCBvbmx5IHRoZSBJUCBhZGRyZXNzLCBub3QgdGhlIHBvcnQgbnVtYmVyICovCi0JCWlmICghbmZzX3NvY2thZGRyX21hdGNoX2lwYWRkcihzYXAsIGNsYXApKQotCQkJY29udGludWU7Ci0KLQkJYXRvbWljX2luYygmY2xwLT5jbF9jb3VudCk7Ci0JCXNwaW5fdW5sb2NrKCZuZnNfY2xpZW50X2xvY2spOwotCQlyZXR1cm4gY2xwOwotCX0KLQlzcGluX3VubG9jaygmbmZzX2NsaWVudF9sb2NrKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTk4OCw2ICsxMDAyLDI3IEBACiAJdGFyZ2V0LT5vcHRpb25zID0gc291cmNlLT5vcHRpb25zOwogfQogCitzdGF0aWMgdm9pZCBuZnNfc2VydmVyX2luc2VydF9saXN0cyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKQoreworCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBzZXJ2ZXItPm5mc19jbGllbnQ7CisKKwlzcGluX2xvY2soJm5mc19jbGllbnRfbG9jayk7CisJbGlzdF9hZGRfdGFpbF9yY3UoJnNlcnZlci0+Y2xpZW50X2xpbmssICZjbHAtPmNsX3N1cGVyYmxvY2tzKTsKKwlsaXN0X2FkZF90YWlsKCZzZXJ2ZXItPm1hc3Rlcl9saW5rLCAmbmZzX3ZvbHVtZV9saXN0KTsKKwlzcGluX3VubG9jaygmbmZzX2NsaWVudF9sb2NrKTsKKworfQorCitzdGF0aWMgdm9pZCBuZnNfc2VydmVyX3JlbW92ZV9saXN0cyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKQoreworCXNwaW5fbG9jaygmbmZzX2NsaWVudF9sb2NrKTsKKwlsaXN0X2RlbF9yY3UoJnNlcnZlci0+Y2xpZW50X2xpbmspOworCWxpc3RfZGVsKCZzZXJ2ZXItPm1hc3Rlcl9saW5rKTsKKwlzcGluX3VubG9jaygmbmZzX2NsaWVudF9sb2NrKTsKKworCXN5bmNocm9uaXplX3JjdSgpOworfQorCiAvKgogICogQWxsb2NhdGUgYW5kIGluaXRpYWxpc2UgYSBzZXJ2ZXIgcmVjb3JkCiAgKi8KQEAgLTEwMDQsNiArMTAzOSw3IEBACiAJLyogWmVybyBvdXQgdGhlIE5GUyBzdGF0ZSBzdHVmZiAqLwogCUlOSVRfTElTVF9IRUFEKCZzZXJ2ZXItPmNsaWVudF9saW5rKTsKIAlJTklUX0xJU1RfSEVBRCgmc2VydmVyLT5tYXN0ZXJfbGluayk7CisJSU5JVF9MSVNUX0hFQUQoJnNlcnZlci0+ZGVsZWdhdGlvbnMpOwogCiAJYXRvbWljX3NldCgmc2VydmVyLT5hY3RpdmUsIDApOwogCkBAIC0xMDE5LDYgKzEwNTUsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwlwbmZzX2luaXRfc2VydmVyKHNlcnZlcik7CisKIAlyZXR1cm4gc2VydmVyOwogfQogCkBAIC0xMDI5LDExICsxMDY3LDggQEAKIHsKIAlkcHJpbnRrKCItLT4gbmZzX2ZyZWVfc2VydmVyKClcbiIpOwogCisJbmZzX3NlcnZlcl9yZW1vdmVfbGlzdHMoc2VydmVyKTsKIAl1bnNldF9wbmZzX2xheW91dGRyaXZlcihzZXJ2ZXIpOwotCXNwaW5fbG9jaygmbmZzX2NsaWVudF9sb2NrKTsKLQlsaXN0X2RlbCgmc2VydmVyLT5jbGllbnRfbGluayk7Ci0JbGlzdF9kZWwoJnNlcnZlci0+bWFzdGVyX2xpbmspOwotCXNwaW5fdW5sb2NrKCZuZnNfY2xpZW50X2xvY2spOwogCiAJaWYgKHNlcnZlci0+ZGVzdHJveSAhPSBOVUxMKQogCQlzZXJ2ZXItPmRlc3Ryb3koc2VydmVyKTsKQEAgLTExMDgsMTEgKzExNDMsNyBAQAogCQkodW5zaWduZWQgbG9uZyBsb25nKSBzZXJ2ZXItPmZzaWQubWFqb3IsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHNlcnZlci0+ZnNpZC5taW5vcik7CiAKLQlzcGluX2xvY2soJm5mc19jbGllbnRfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmc2VydmVyLT5jbGllbnRfbGluaywgJnNlcnZlci0+bmZzX2NsaWVudC0+Y2xfc3VwZXJibG9ja3MpOwotCWxpc3RfYWRkX3RhaWwoJnNlcnZlci0+bWFzdGVyX2xpbmssICZuZnNfdm9sdW1lX2xpc3QpOwotCXNwaW5fdW5sb2NrKCZuZnNfY2xpZW50X2xvY2spOwotCisJbmZzX3NlcnZlcl9pbnNlcnRfbGlzdHMoc2VydmVyKTsKIAlzZXJ2ZXItPm1vdW50X3RpbWUgPSBqaWZmaWVzOwogCW5mc19mcmVlX2ZhdHRyKGZhdHRyKTsKIAlyZXR1cm4gc2VydmVyOwpAQCAtMTEyNSw2ICsxMTU2LDEwMSBAQAogCiAjaWZkZWYgQ09ORklHX05GU19WNAogLyoKKyAqIE5GU3Y0LjAgY2FsbGJhY2sgdGhyZWFkIGhlbHBlcgorICoKKyAqIEZpbmQgYSBjbGllbnQgYnkgSVAgYWRkcmVzcywgcHJvdG9jb2wgdmVyc2lvbiwgYW5kIG1pbm9ydmVyc2lvbgorICoKKyAqIENhbGxlZCBmcm9tIHRoZSBwZ19hdXRoZW50aWNhdGUgbWV0aG9kLiBUaGUgY2FsbGJhY2sgaWRlbnRpZmllcgorICogaXMgbm90IHVzZWQgYXMgaXQgaGFzIG5vdCBiZWVuIGRlY29kZWQuCisgKgorICogUmV0dXJucyBOVUxMIGlmIG5vIHN1Y2ggY2xpZW50CisgKi8KK3N0cnVjdCBuZnNfY2xpZW50ICoKK25mczRfZmluZF9jbGllbnRfbm9faWRlbnQoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7CisKKwlzcGluX2xvY2soJm5mc19jbGllbnRfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbHAsICZuZnNfY2xpZW50X2xpc3QsIGNsX3NoYXJlX2xpbmspIHsKKwkJaWYgKG5mczRfY2JfbWF0Y2hfY2xpZW50KGFkZHIsIGNscCwgMCkgPT0gZmFsc2UpCisJCQljb250aW51ZTsKKwkJYXRvbWljX2luYygmY2xwLT5jbF9jb3VudCk7CisJCXNwaW5fdW5sb2NrKCZuZnNfY2xpZW50X2xvY2spOworCQlyZXR1cm4gY2xwOworCX0KKwlzcGluX3VubG9jaygmbmZzX2NsaWVudF9sb2NrKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIE5GU3Y0LjAgY2FsbGJhY2sgdGhyZWFkIGhlbHBlcgorICoKKyAqIEZpbmQgYSBjbGllbnQgYnkgY2FsbGJhY2sgaWRlbnRpZmllcgorICovCitzdHJ1Y3QgbmZzX2NsaWVudCAqCituZnM0X2ZpbmRfY2xpZW50X2lkZW50KGludCBjYl9pZGVudCkKK3sKKwlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOworCisJc3Bpbl9sb2NrKCZuZnNfY2xpZW50X2xvY2spOworCWNscCA9IGlkcl9maW5kKCZjYl9pZGVudF9pZHIsIGNiX2lkZW50KTsKKwlpZiAoY2xwKQorCQlhdG9taWNfaW5jKCZjbHAtPmNsX2NvdW50KTsKKwlzcGluX3VubG9jaygmbmZzX2NsaWVudF9sb2NrKTsKKwlyZXR1cm4gY2xwOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCisvKgorICogTkZTdjQuMSBjYWxsYmFjayB0aHJlYWQgaGVscGVyCisgKiBGb3IgQ0JfQ09NUE9VTkQgY2FsbHMsIGZpbmQgYSBjbGllbnQgYnkgSVAgYWRkcmVzcywgcHJvdG9jb2wgdmVyc2lvbiwKKyAqIG1pbm9ydmVyc2lvbiwgYW5kIHNlc3Npb25JRAorICoKKyAqIENSRUFURV9TRVNTSU9OIHRyaWdnZXJzIGEgQ0JfTlVMTCBwaW5nIGZyb20gc2VydmVycy4gVGhlIGNhbGxiYWNrIHNlcnZpY2UKKyAqIHNlc3Npb25pZCBjYW4gb25seSBiZSBzZXQgYWZ0ZXIgdGhlIENSRUFURV9TRVNTSU9OIHJldHVybiwgc28gYSBDQl9OVUxMCisgKiBjYW4gYXJyaXZlIGJlZm9yZSB0aGUgY2FsbGJhY2sgc2Vzc2lvbmlkIGlzIHNldC4gRm9yIENCX05VTEwgY2FsbHMsCisgKiBmaW5kIGEgY2xpZW50IGJ5IElQIGFkZHJlc3MgcHJvdG9jb2wgdmVyc2lvbiwgYW5kIG1pbm9ydmVyc2lvbi4KKyAqCisgKiBSZXR1cm5zIE5VTEwgaWYgbm8gc3VjaCBjbGllbnQKKyAqLworc3RydWN0IG5mc19jbGllbnQgKgorbmZzNF9maW5kX2NsaWVudF9zZXNzaW9uaWQoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLAorCQkJICAgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpzaWQsIGludCBpc19jYl9jb21wb3VuZCkKK3sKKwlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOworCisJc3Bpbl9sb2NrKCZuZnNfY2xpZW50X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xwLCAmbmZzX2NsaWVudF9saXN0LCBjbF9zaGFyZV9saW5rKSB7CisJCWlmIChuZnM0X2NiX21hdGNoX2NsaWVudChhZGRyLCBjbHAsIDEpID09IGZhbHNlKQorCQkJY29udGludWU7CisKKwkJaWYgKCFuZnM0X2hhc19zZXNzaW9uKGNscCkpCisJCQljb250aW51ZTsKKworCQkvKiBNYXRjaCBzZXNzaW9uaWQgdW5sZXNzIGNiX251bGwgY2FsbCovCisJCWlmIChpc19jYl9jb21wb3VuZCAmJiAobWVtY21wKGNscC0+Y2xfc2Vzc2lvbi0+c2Vzc19pZC5kYXRhLAorCQkgICAgc2lkLT5kYXRhLCBORlM0X01BWF9TRVNTSU9OSURfTEVOKSAhPSAwKSkKKwkJCWNvbnRpbnVlOworCisJCWF0b21pY19pbmMoJmNscC0+Y2xfY291bnQpOworCQlzcGluX3VubG9jaygmbmZzX2NsaWVudF9sb2NrKTsKKwkJcmV0dXJuIGNscDsKKwl9CisJc3Bpbl91bmxvY2soJm5mc19jbGllbnRfbG9jayk7CisJcmV0dXJuIE5VTEw7Cit9CisKKyNlbHNlIC8qIENPTkZJR19ORlNfVjRfMSAqLworCitzdHJ1Y3QgbmZzX2NsaWVudCAqCituZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisJCQkgICBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKnNpZCwgaW50IGlzX2NiX2NvbXBvdW5kKQoreworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLworCisvKgogICogSW5pdGlhbGl6ZSB0aGUgTkZTNCBjYWxsYmFjayBzZXJ2aWNlCiAgKi8KIHN0YXRpYyBpbnQgbmZzNF9pbml0X2NhbGxiYWNrKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCkBAIC0xMzQyLDExICsxNDY4LDcgQEAKIAlpZiAoc2VydmVyLT5uYW1lbGVuID09IDAgfHwgc2VydmVyLT5uYW1lbGVuID4gTkZTNF9NQVhOQU1MRU4pCiAJCXNlcnZlci0+bmFtZWxlbiA9IE5GUzRfTUFYTkFNTEVOOwogCi0Jc3Bpbl9sb2NrKCZuZnNfY2xpZW50X2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJnNlcnZlci0+Y2xpZW50X2xpbmssICZzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3N1cGVyYmxvY2tzKTsKLQlsaXN0X2FkZF90YWlsKCZzZXJ2ZXItPm1hc3Rlcl9saW5rLCAmbmZzX3ZvbHVtZV9saXN0KTsKLQlzcGluX3VubG9jaygmbmZzX2NsaWVudF9sb2NrKTsKLQorCW5mc19zZXJ2ZXJfaW5zZXJ0X2xpc3RzKHNlcnZlcik7CiAJc2VydmVyLT5tb3VudF90aW1lID0gamlmZmllczsKIG91dDoKIAluZnNfZnJlZV9mYXR0cihmYXR0cik7CkBAIC0xNTUxLDExICsxNjczLDcgQEAKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIG91dF9mcmVlX3NlcnZlcjsKIAotCXNwaW5fbG9jaygmbmZzX2NsaWVudF9sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZzZXJ2ZXItPmNsaWVudF9saW5rLCAmc2VydmVyLT5uZnNfY2xpZW50LT5jbF9zdXBlcmJsb2Nrcyk7Ci0JbGlzdF9hZGRfdGFpbCgmc2VydmVyLT5tYXN0ZXJfbGluaywgJm5mc192b2x1bWVfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJm5mc19jbGllbnRfbG9jayk7Ci0KKwluZnNfc2VydmVyX2luc2VydF9saXN0cyhzZXJ2ZXIpOwogCXNlcnZlci0+bW91bnRfdGltZSA9IGppZmZpZXM7CiAKIAluZnNfZnJlZV9mYXR0cihmYXR0cl9mc2luZm8pOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2RlbGVnYXRpb24uYyBiL2ZzL25mcy9kZWxlZ2F0aW9uLmMKaW5kZXggMWZkNjJmYy4uMzY0ZTQzMiAxMDA2NDQKLS0tIGEvZnMvbmZzL2RlbGVnYXRpb24uYworKysgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCkBAIC00MCwxMSArNDAsMjMgQEAKIAljYWxsX3JjdSgmZGVsZWdhdGlvbi0+cmN1LCBuZnNfZnJlZV9kZWxlZ2F0aW9uX2NhbGxiYWNrKTsKIH0KIAorLyoqCisgKiBuZnNfbWFya19kZWxlZ2F0aW9uX3JlZmVyZW5jZWQgLSBzZXQgZGVsZWdhdGlvbidzIFJFRkVSRU5DRUQgZmxhZworICogQGRlbGVnYXRpb246IGRlbGVnYXRpb24gdG8gcHJvY2VzcworICoKKyAqLwogdm9pZCBuZnNfbWFya19kZWxlZ2F0aW9uX3JlZmVyZW5jZWQoc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uKQogewogCXNldF9iaXQoTkZTX0RFTEVHQVRJT05fUkVGRVJFTkNFRCwgJmRlbGVnYXRpb24tPmZsYWdzKTsKIH0KIAorLyoqCisgKiBuZnNfaGF2ZV9kZWxlZ2F0aW9uIC0gY2hlY2sgaWYgaW5vZGUgaGFzIGEgZGVsZWdhdGlvbgorICogQGlub2RlOiBpbm9kZSB0byBjaGVjaworICogQGZsYWdzOiBkZWxlZ2F0aW9uIHR5cGVzIHRvIGNoZWNrIGZvcgorICoKKyAqIFJldHVybnMgb25lIGlmIGlub2RlIGhhcyB0aGUgaW5kaWNhdGVkIGRlbGVnYXRpb24sIG90aGVyd2lzZSB6ZXJvLgorICovCiBpbnQgbmZzX2hhdmVfZGVsZWdhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBmbW9kZV90IGZsYWdzKQogewogCXN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbjsKQEAgLTExOSwxMCArMTMxLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBTZXQgdXAgYSBkZWxlZ2F0aW9uIG9uIGFuIGlub2RlCisvKioKKyAqIG5mc19pbm9kZV9yZWNsYWltX2RlbGVnYXRpb24gLSBwcm9jZXNzIGEgZGVsZWdhdGlvbiByZWNsYWltIHJlcXVlc3QKKyAqIEBpbm9kZTogaW5vZGUgdG8gcHJvY2VzcworICogQGNyZWQ6IGNyZWRlbnRpYWwgdG8gdXNlIGZvciByZXF1ZXN0CisgKiBAcmVzOiBuZXcgZGVsZWdhdGlvbiBzdGF0ZSBmcm9tIHNlcnZlcgorICoKICAqLwotdm9pZCBuZnNfaW5vZGVfcmVjbGFpbV9kZWxlZ2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgc3RydWN0IG5mc19vcGVucmVzICpyZXMpCit2b2lkIG5mc19pbm9kZV9yZWNsYWltX2RlbGVnYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHJwY19jcmVkICpjcmVkLAorCQkJCSAgc3RydWN0IG5mc19vcGVucmVzICpyZXMpCiB7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOwogCXN0cnVjdCBycGNfY3JlZCAqb2xkY3JlZCA9IE5VTEw7CkBAIC0xNzUsMzggKzE5Miw1MiBAQAogCXJldHVybiBpbm9kZTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqbmZzX2RldGFjaF9kZWxlZ2F0aW9uX2xvY2tlZChzdHJ1Y3QgbmZzX2lub2RlICpuZnNpLAotCQkJCQkJCSAgIGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZCwKLQkJCQkJCQkgICBzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQorc3RhdGljIHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqCituZnNfZGV0YWNoX2RlbGVnYXRpb25fbG9ja2VkKHN0cnVjdCBuZnNfaW5vZGUgKm5mc2ksCisJCQkgICAgIHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCiB7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uID0KIAkJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChuZnNpLT5kZWxlZ2F0aW9uLAotCQkJCQkgIGxvY2tkZXBfaXNfaGVsZCgmY2xwLT5jbF9sb2NrKSk7CisJCQkJbG9ja2RlcF9pc19oZWxkKCZzZXJ2ZXItPm5mc19jbGllbnQtPmNsX2xvY2spKTsKIAogCWlmIChkZWxlZ2F0aW9uID09IE5VTEwpCiAJCWdvdG8gbm9tYXRjaDsKKwogCXNwaW5fbG9jaygmZGVsZWdhdGlvbi0+bG9jayk7Ci0JaWYgKHN0YXRlaWQgIT0gTlVMTCAmJiBtZW1jbXAoZGVsZWdhdGlvbi0+c3RhdGVpZC5kYXRhLCBzdGF0ZWlkLT5kYXRhLAotCQkJCXNpemVvZihkZWxlZ2F0aW9uLT5zdGF0ZWlkLmRhdGEpKSAhPSAwKQotCQlnb3RvIG5vbWF0Y2hfdW5sb2NrOwogCWxpc3RfZGVsX3JjdSgmZGVsZWdhdGlvbi0+c3VwZXJfbGlzdCk7CiAJZGVsZWdhdGlvbi0+aW5vZGUgPSBOVUxMOwogCW5mc2ktPmRlbGVnYXRpb25fc3RhdGUgPSAwOwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZnNpLT5kZWxlZ2F0aW9uLCBOVUxMKTsKIAlzcGluX3VubG9jaygmZGVsZWdhdGlvbi0+bG9jayk7CiAJcmV0dXJuIGRlbGVnYXRpb247Ci1ub21hdGNoX3VubG9jazoKLQlzcGluX3VubG9jaygmZGVsZWdhdGlvbi0+bG9jayk7CiBub21hdGNoOgogCXJldHVybiBOVUxMOwogfQogCi0vKgotICogU2V0IHVwIGEgZGVsZWdhdGlvbiBvbiBhbiBpbm9kZQorc3RhdGljIHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqbmZzX2RldGFjaF9kZWxlZ2F0aW9uKHN0cnVjdCBuZnNfaW5vZGUgKm5mc2ksCisJCQkJCQkgICAgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcikKK3sKKwlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gc2VydmVyLT5uZnNfY2xpZW50OworCXN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbjsKKworCXNwaW5fbG9jaygmY2xwLT5jbF9sb2NrKTsKKwlkZWxlZ2F0aW9uID0gbmZzX2RldGFjaF9kZWxlZ2F0aW9uX2xvY2tlZChuZnNpLCBzZXJ2ZXIpOworCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOworCXJldHVybiBkZWxlZ2F0aW9uOworfQorCisvKioKKyAqIG5mc19pbm9kZV9zZXRfZGVsZWdhdGlvbiAtIHNldCB1cCBhIGRlbGVnYXRpb24gb24gYW4gaW5vZGUKKyAqIEBpbm9kZTogaW5vZGUgdG8gd2hpY2ggZGVsZWdhdGlvbiBhcHBsaWVzCisgKiBAY3JlZDogY3JlZCB0byB1c2UgZm9yIHN1YnNlcXVlbnQgZGVsZWdhdGlvbiBwcm9jZXNzaW5nCisgKiBAcmVzOiBuZXcgZGVsZWdhdGlvbiBzdGF0ZSBmcm9tIHNlcnZlcgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLgogICovCiBpbnQgbmZzX2lub2RlX3NldF9kZWxlZ2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgc3RydWN0IG5mc19vcGVucmVzICpyZXMpCiB7Ci0Jc3RydWN0IG5mc19jbGllbnQgKmNscCA9IE5GU19TRVJWRVIoaW5vZGUpLT5uZnNfY2xpZW50OworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGlub2RlKTsKKwlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gc2VydmVyLT5uZnNfY2xpZW50OwogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uLCAqb2xkX2RlbGVnYXRpb247CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpmcmVlbWUgPSBOVUxMOwpAQCAtMjI3LDcgKzI1OCw3IEBACiAKIAlzcGluX2xvY2soJmNscC0+Y2xfbG9jayk7CiAJb2xkX2RlbGVnYXRpb24gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG5mc2ktPmRlbGVnYXRpb24sCi0JCQkJCQkgICBsb2NrZGVwX2lzX2hlbGQoJmNscC0+Y2xfbG9jaykpOworCQkJCQlsb2NrZGVwX2lzX2hlbGQoJmNscC0+Y2xfbG9jaykpOwogCWlmIChvbGRfZGVsZWdhdGlvbiAhPSBOVUxMKSB7CiAJCWlmIChtZW1jbXAoJmRlbGVnYXRpb24tPnN0YXRlaWQsICZvbGRfZGVsZWdhdGlvbi0+c3RhdGVpZCwKIAkJCQkJc2l6ZW9mKG9sZF9kZWxlZ2F0aW9uLT5zdGF0ZWlkKSkgPT0gMCAmJgpAQCAtMjQ2LDkgKzI3Nyw5IEBACiAJCQlkZWxlZ2F0aW9uID0gTlVMTDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWZyZWVtZSA9IG5mc19kZXRhY2hfZGVsZWdhdGlvbl9sb2NrZWQobmZzaSwgTlVMTCwgY2xwKTsKKwkJZnJlZW1lID0gbmZzX2RldGFjaF9kZWxlZ2F0aW9uX2xvY2tlZChuZnNpLCBzZXJ2ZXIpOwogCX0KLQlsaXN0X2FkZF9yY3UoJmRlbGVnYXRpb24tPnN1cGVyX2xpc3QsICZjbHAtPmNsX2RlbGVnYXRpb25zKTsKKwlsaXN0X2FkZF9yY3UoJmRlbGVnYXRpb24tPnN1cGVyX2xpc3QsICZzZXJ2ZXItPmRlbGVnYXRpb25zKTsKIAluZnNpLT5kZWxlZ2F0aW9uX3N0YXRlID0gZGVsZWdhdGlvbi0+dHlwZTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobmZzaS0+ZGVsZWdhdGlvbiwgZGVsZWdhdGlvbik7CiAJZGVsZWdhdGlvbiA9IE5VTEw7CkBAIC0yOTAsNzMgKzMyMSw4NSBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qCi0gKiBSZXR1cm4gYWxsIGRlbGVnYXRpb25zIHRoYXQgaGF2ZSBiZWVuIG1hcmtlZCBmb3IgcmV0dXJuCisvKioKKyAqIG5mc19jbGllbnRfcmV0dXJuX21hcmtlZF9kZWxlZ2F0aW9ucyAtIHJldHVybiBwcmV2aW91c2x5IG1hcmtlZCBkZWxlZ2F0aW9ucworICogQGNscDogbmZzX2NsaWVudCB0byBwcm9jZXNzCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUuCiAgKi8KIGludCBuZnNfY2xpZW50X3JldHVybl9tYXJrZWRfZGVsZWdhdGlvbnMoc3RydWN0IG5mc19jbGllbnQgKmNscCkKIHsKIAlzdHJ1Y3QgbmZzX2RlbGVnYXRpb24gKmRlbGVnYXRpb247CisJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCWludCBlcnIgPSAwOwogCiByZXN0YXJ0OgogCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZWxlZ2F0aW9uLCAmY2xwLT5jbF9kZWxlZ2F0aW9ucywgc3VwZXJfbGlzdCkgewotCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChORlNfREVMRUdBVElPTl9SRVRVUk4sICZkZWxlZ2F0aW9uLT5mbGFncykpCi0JCQljb250aW51ZTsKLQkJaW5vZGUgPSBuZnNfZGVsZWdhdGlvbl9ncmFiX2lub2RlKGRlbGVnYXRpb24pOwotCQlpZiAoaW5vZGUgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlzcGluX2xvY2soJmNscC0+Y2xfbG9jayk7Ci0JCWRlbGVnYXRpb24gPSBuZnNfZGV0YWNoX2RlbGVnYXRpb25fbG9ja2VkKE5GU19JKGlub2RlKSwgTlVMTCwgY2xwKTsKLQkJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlpZiAoZGVsZWdhdGlvbiAhPSBOVUxMKSB7Ci0JCQlmaWxlbWFwX2ZsdXNoKGlub2RlLT5pX21hcHBpbmcpOwotCQkJZXJyID0gX19uZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUsIGRlbGVnYXRpb24sIDApOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNlcnZlciwgJmNscC0+Y2xfc3VwZXJibG9ja3MsIGNsaWVudF9saW5rKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlbGVnYXRpb24sICZzZXJ2ZXItPmRlbGVnYXRpb25zLAorCQkJCQkJCQlzdXBlcl9saXN0KSB7CisJCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChORlNfREVMRUdBVElPTl9SRVRVUk4sCisJCQkJCQkJJmRlbGVnYXRpb24tPmZsYWdzKSkKKwkJCQljb250aW51ZTsKKwkJCWlub2RlID0gbmZzX2RlbGVnYXRpb25fZ3JhYl9pbm9kZShkZWxlZ2F0aW9uKTsKKwkJCWlmIChpbm9kZSA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCQkJZGVsZWdhdGlvbiA9IG5mc19kZXRhY2hfZGVsZWdhdGlvbihORlNfSShpbm9kZSksCisJCQkJCQkJCXNlcnZlcik7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKworCQkJaWYgKGRlbGVnYXRpb24gIT0gTlVMTCkgeworCQkJCWZpbGVtYXBfZmx1c2goaW5vZGUtPmlfbWFwcGluZyk7CisJCQkJZXJyID0gX19uZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUsCisJCQkJCQkJCWRlbGVnYXRpb24sIDApOworCQkJfQorCQkJaXB1dChpbm9kZSk7CisJCQlpZiAoIWVycikKKwkJCQlnb3RvIHJlc3RhcnQ7CisJCQlzZXRfYml0KE5GUzRDTE5UX0RFTEVHUkVUVVJOLCAmY2xwLT5jbF9zdGF0ZSk7CisJCQlyZXR1cm4gZXJyOwogCQl9Ci0JCWlwdXQoaW5vZGUpOwotCQlpZiAoIWVycikKLQkJCWdvdG8gcmVzdGFydDsKLQkJc2V0X2JpdChORlM0Q0xOVF9ERUxFR1JFVFVSTiwgJmNscC0+Y2xfc3RhdGUpOwotCQlyZXR1cm4gZXJyOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZGVsZWdhdGlvbiB3aXRob3V0IHJlY2xhaW1pbmcgb3BlbnMKLSAqIG9yIHByb3RlY3RpbmcgYWdhaW5zdCBkZWxlZ2F0aW9uIHJlY2xhaW1zLgotICogSXQgaXMgdGhlcmVmb3JlIHJlYWxseSBvbmx5IHNhZmUgdG8gYmUgY2FsbGVkIGZyb20KLSAqIG5mczRfY2xlYXJfaW5vZGUoKQorLyoqCisgKiBuZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb25fbm9yZWNsYWltIC0gcmV0dXJuIGRlbGVnYXRpb24sIGRvbid0IHJlY2xhaW0gb3BlbnMKKyAqIEBpbm9kZTogaW5vZGUgdG8gcHJvY2VzcworICoKKyAqIERvZXMgbm90IHByb3RlY3QgYWdhaW5zdCBkZWxlZ2F0aW9uIHJlY2xhaW1zLCB0aGVyZWZvcmUgcmVhbGx5IG9ubHkgc2FmZQorICogdG8gYmUgY2FsbGVkIGZyb20gbmZzNF9jbGVhcl9pbm9kZSgpLgogICovCiB2b2lkIG5mc19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbl9ub3JlY2xhaW0oc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gTkZTX1NFUlZFUihpbm9kZSktPm5mc19jbGllbnQ7CisJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoaW5vZGUpOwogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOwogCiAJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihuZnNpLT5kZWxlZ2F0aW9uKSAhPSBOVUxMKSB7Ci0JCXNwaW5fbG9jaygmY2xwLT5jbF9sb2NrKTsKLQkJZGVsZWdhdGlvbiA9IG5mc19kZXRhY2hfZGVsZWdhdGlvbl9sb2NrZWQobmZzaSwgTlVMTCwgY2xwKTsKLQkJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7CisJCWRlbGVnYXRpb24gPSBuZnNfZGV0YWNoX2RlbGVnYXRpb24obmZzaSwgc2VydmVyKTsKIAkJaWYgKGRlbGVnYXRpb24gIT0gTlVMTCkKIAkJCW5mc19kb19yZXR1cm5fZGVsZWdhdGlvbihpbm9kZSwgZGVsZWdhdGlvbiwgMCk7CiAJfQogfQogCisvKioKKyAqIG5mc19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbiAtIHN5bmNocm9ub3VzbHkgcmV0dXJuIGEgZGVsZWdhdGlvbgorICogQGlub2RlOiBpbm9kZSB0byBwcm9jZXNzCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUuCisgKi8KIGludCBuZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gTkZTX1NFUlZFUihpbm9kZSktPm5mc19jbGllbnQ7CisJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoaW5vZGUpOwogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOwogCWludCBlcnIgPSAwOwogCiAJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihuZnNpLT5kZWxlZ2F0aW9uKSAhPSBOVUxMKSB7Ci0JCXNwaW5fbG9jaygmY2xwLT5jbF9sb2NrKTsKLQkJZGVsZWdhdGlvbiA9IG5mc19kZXRhY2hfZGVsZWdhdGlvbl9sb2NrZWQobmZzaSwgTlVMTCwgY2xwKTsKLQkJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7CisJCWRlbGVnYXRpb24gPSBuZnNfZGV0YWNoX2RlbGVnYXRpb24obmZzaSwgc2VydmVyKTsKIAkJaWYgKGRlbGVnYXRpb24gIT0gTlVMTCkgewogCQkJbmZzX3diX2FsbChpbm9kZSk7CiAJCQllcnIgPSBfX25mc19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihpbm9kZSwgZGVsZWdhdGlvbiwgMSk7CkBAIC0zNjUsNDYgKzQwOCw2MSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIG5mc19tYXJrX3JldHVybl9kZWxlZ2F0aW9uKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbikKK3N0YXRpYyB2b2lkIG5mc19tYXJrX3JldHVybl9kZWxlZ2F0aW9uKHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbikKIHsKKwlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gTkZTX1NFUlZFUihkZWxlZ2F0aW9uLT5pbm9kZSktPm5mc19jbGllbnQ7CisKIAlzZXRfYml0KE5GU19ERUxFR0FUSU9OX1JFVFVSTiwgJmRlbGVnYXRpb24tPmZsYWdzKTsKIAlzZXRfYml0KE5GUzRDTE5UX0RFTEVHUkVUVVJOLCAmY2xwLT5jbF9zdGF0ZSk7CiB9CiAKLS8qCi0gKiBSZXR1cm4gYWxsIGRlbGVnYXRpb25zIGFzc29jaWF0ZWQgdG8gYSBzdXBlciBibG9jaworLyoqCisgKiBuZnNfc3VwZXJfcmV0dXJuX2FsbF9kZWxlZ2F0aW9ucyAtIHJldHVybiBkZWxlZ2F0aW9ucyBmb3Igb25lIHN1cGVyYmxvY2sKKyAqIEBzYjogc2IgdG8gcHJvY2VzcworICoKICAqLwogdm9pZCBuZnNfc3VwZXJfcmV0dXJuX2FsbF9kZWxlZ2F0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBORlNfU0Ioc2IpLT5uZnNfY2xpZW50OworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0Ioc2IpOworCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBzZXJ2ZXItPm5mc19jbGllbnQ7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOwogCiAJaWYgKGNscCA9PSBOVUxMKQogCQlyZXR1cm47CisKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVsZWdhdGlvbiwgJmNscC0+Y2xfZGVsZWdhdGlvbnMsIHN1cGVyX2xpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZWxlZ2F0aW9uLCAmc2VydmVyLT5kZWxlZ2F0aW9ucywgc3VwZXJfbGlzdCkgewogCQlzcGluX2xvY2soJmRlbGVnYXRpb24tPmxvY2spOwotCQlpZiAoZGVsZWdhdGlvbi0+aW5vZGUgIT0gTlVMTCAmJiBkZWxlZ2F0aW9uLT5pbm9kZS0+aV9zYiA9PSBzYikKLQkJCXNldF9iaXQoTkZTX0RFTEVHQVRJT05fUkVUVVJOLCAmZGVsZWdhdGlvbi0+ZmxhZ3MpOworCQlzZXRfYml0KE5GU19ERUxFR0FUSU9OX1JFVFVSTiwgJmRlbGVnYXRpb24tPmZsYWdzKTsKIAkJc3Bpbl91bmxvY2soJmRlbGVnYXRpb24tPmxvY2spOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKKwogCWlmIChuZnNfY2xpZW50X3JldHVybl9tYXJrZWRfZGVsZWdhdGlvbnMoY2xwKSAhPSAwKQogCQluZnM0X3NjaGVkdWxlX3N0YXRlX21hbmFnZXIoY2xwKTsKIH0KIAotc3RhdGljCi12b2lkIG5mc19jbGllbnRfbWFya19yZXR1cm5fYWxsX2RlbGVnYXRpb25fdHlwZXMoc3RydWN0IG5mc19jbGllbnQgKmNscCwgZm1vZGVfdCBmbGFncykKK3N0YXRpYyB2b2lkIG5mc19tYXJrX3JldHVybl9hbGxfZGVsZWdhdGlvbl90eXBlcyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLAorCQkJCQkJIGZtb2RlX3QgZmxhZ3MpCiB7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlbGVnYXRpb24sICZjbHAtPmNsX2RlbGVnYXRpb25zLCBzdXBlcl9saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVsZWdhdGlvbiwgJnNlcnZlci0+ZGVsZWdhdGlvbnMsIHN1cGVyX2xpc3QpIHsKIAkJaWYgKChkZWxlZ2F0aW9uLT50eXBlID09IChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKSkgJiYgIShmbGFncyAmIEZNT0RFX1dSSVRFKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoZGVsZWdhdGlvbi0+dHlwZSAmIGZsYWdzKQotCQkJbmZzX21hcmtfcmV0dXJuX2RlbGVnYXRpb24oY2xwLCBkZWxlZ2F0aW9uKTsKKwkJCW5mc19tYXJrX3JldHVybl9kZWxlZ2F0aW9uKGRlbGVnYXRpb24pOwogCX0KK30KKworc3RhdGljIHZvaWQgbmZzX2NsaWVudF9tYXJrX3JldHVybl9hbGxfZGVsZWdhdGlvbl90eXBlcyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAorCQkJCQkJCWZtb2RlX3QgZmxhZ3MpCit7CisJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZXJ2ZXIsICZjbHAtPmNsX3N1cGVyYmxvY2tzLCBjbGllbnRfbGluaykKKwkJbmZzX21hcmtfcmV0dXJuX2FsbF9kZWxlZ2F0aW9uX3R5cGVzKHNlcnZlciwgZmxhZ3MpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCkBAIC00MTksMTkgKzQ3NywzMiBAQAogCQluZnM0X3NjaGVkdWxlX3N0YXRlX21hbmFnZXIoY2xwKTsKIH0KIAorLyoqCisgKiBuZnNfZXhwaXJlX2FsbF9kZWxlZ2F0aW9uX3R5cGVzCisgKiBAY2xwOiBjbGllbnQgdG8gcHJvY2VzcworICogQGZsYWdzOiBkZWxlZ2F0aW9uIHR5cGVzIHRvIGV4cGlyZQorICoKKyAqLwogdm9pZCBuZnNfZXhwaXJlX2FsbF9kZWxlZ2F0aW9uX3R5cGVzKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIGZtb2RlX3QgZmxhZ3MpCiB7CiAJbmZzX2NsaWVudF9tYXJrX3JldHVybl9hbGxfZGVsZWdhdGlvbl90eXBlcyhjbHAsIGZsYWdzKTsKIAluZnNfZGVsZWdhdGlvbl9ydW5fc3RhdGVfbWFuYWdlcihjbHApOwogfQogCisvKioKKyAqIG5mc19leHBpcmVfYWxsX2RlbGVnYXRpb25zCisgKiBAY2xwOiBjbGllbnQgdG8gcHJvY2VzcworICoKKyAqLwogdm9pZCBuZnNfZXhwaXJlX2FsbF9kZWxlZ2F0aW9ucyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQogewogCW5mc19leHBpcmVfYWxsX2RlbGVnYXRpb25fdHlwZXMoY2xwLCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKIH0KIAotLyoKLSAqIFJldHVybiBhbGwgZGVsZWdhdGlvbnMgZm9sbG93aW5nIGFuIE5GUzRFUlJfQ0JfUEFUSF9ET1dOIGVycm9yLgorLyoqCisgKiBuZnNfaGFuZGxlX2NiX3BhdGhkb3duIC0gcmV0dXJuIGFsbCBkZWxlZ2F0aW9ucyBhZnRlciBORlM0RVJSX0NCX1BBVEhfRE9XTgorICogQGNscDogY2xpZW50IHRvIHByb2Nlc3MKKyAqCiAgKi8KIHZvaWQgbmZzX2hhbmRsZV9jYl9wYXRoZG93bihzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQogewpAQCAtNDQwLDI5ICs1MTEsNDMgQEAKIAluZnNfY2xpZW50X21hcmtfcmV0dXJuX2FsbF9kZWxlZ2F0aW9ucyhjbHApOwogfQogCi1zdGF0aWMgdm9pZCBuZnNfY2xpZW50X21hcmtfcmV0dXJuX3VucmVmZXJlbmNlZF9kZWxlZ2F0aW9ucyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQorc3RhdGljIHZvaWQgbmZzX21hcmtfcmV0dXJuX3VucmVmZXJlbmNlZF9kZWxlZ2F0aW9ucyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKQogewogCXN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbjsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZWxlZ2F0aW9uLCAmY2xwLT5jbF9kZWxlZ2F0aW9ucywgc3VwZXJfbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlbGVnYXRpb24sICZzZXJ2ZXItPmRlbGVnYXRpb25zLCBzdXBlcl9saXN0KSB7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTX0RFTEVHQVRJT05fUkVGRVJFTkNFRCwgJmRlbGVnYXRpb24tPmZsYWdzKSkKIAkJCWNvbnRpbnVlOwotCQluZnNfbWFya19yZXR1cm5fZGVsZWdhdGlvbihjbHAsIGRlbGVnYXRpb24pOworCQluZnNfbWFya19yZXR1cm5fZGVsZWdhdGlvbihkZWxlZ2F0aW9uKTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKKy8qKgorICogbmZzX2V4cGlyZV91bnJlZmVyZW5jZWRfZGVsZWdhdGlvbnMgLSBFbGltaW5hdGUgdW51c2VkIGRlbGVnYXRpb25zCisgKiBAY2xwOiBuZnNfY2xpZW50IHRvIHByb2Nlc3MKKyAqCisgKi8KIHZvaWQgbmZzX2V4cGlyZV91bnJlZmVyZW5jZWRfZGVsZWdhdGlvbnMoc3RydWN0IG5mc19jbGllbnQgKmNscCkKIHsKLQluZnNfY2xpZW50X21hcmtfcmV0dXJuX3VucmVmZXJlbmNlZF9kZWxlZ2F0aW9ucyhjbHApOworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXI7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2VydmVyLCAmY2xwLT5jbF9zdXBlcmJsb2NrcywgY2xpZW50X2xpbmspCisJCW5mc19tYXJrX3JldHVybl91bnJlZmVyZW5jZWRfZGVsZWdhdGlvbnMoc2VydmVyKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwogCW5mc19kZWxlZ2F0aW9uX3J1bl9zdGF0ZV9tYW5hZ2VyKGNscCk7CiB9CiAKLS8qCi0gKiBBc3luY2hyb25vdXMgZGVsZWdhdGlvbiByZWNhbGwhCisvKioKKyAqIG5mc19hc3luY19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbiAtIGFzeW5jaHJvbm91c2x5IHJldHVybiBhIGRlbGVnYXRpb24KKyAqIEBpbm9kZTogaW5vZGUgdG8gcHJvY2VzcworICogQHN0YXRlaWQ6IHN0YXRlIElEIGluZm9ybWF0aW9uIGZyb20gQ0JfUkVDQUxMIGFyZ3VtZW50cworICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLgogICovCi1pbnQgbmZzX2FzeW5jX2lub2RlX3JldHVybl9kZWxlZ2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZCkKK2ludCBuZnNfYXN5bmNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgICBjb25zdCBuZnM0X3N0YXRlaWQgKnN0YXRlaWQpCiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IE5GU19TRVJWRVIoaW5vZGUpLT5uZnNfY2xpZW50OwogCXN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbjsKQEAgLTQ3NCwyMiArNTU5LDIxIEBACiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0KLQluZnNfbWFya19yZXR1cm5fZGVsZWdhdGlvbihjbHAsIGRlbGVnYXRpb24pOworCW5mc19tYXJrX3JldHVybl9kZWxlZ2F0aW9uKGRlbGVnYXRpb24pOwogCXJjdV9yZWFkX3VubG9jaygpOworCiAJbmZzX2RlbGVnYXRpb25fcnVuX3N0YXRlX21hbmFnZXIoY2xwKTsKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFJldHJpZXZlIHRoZSBpbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBkZWxlZ2F0aW9uCi0gKi8KLXN0cnVjdCBpbm9kZSAqbmZzX2RlbGVnYXRpb25fZmluZF9pbm9kZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBjb25zdCBzdHJ1Y3QgbmZzX2ZoICpmaGFuZGxlKQorc3RhdGljIHN0cnVjdCBpbm9kZSAqCituZnNfZGVsZWdhdGlvbl9maW5kX2lub2RlX3NlcnZlcihzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLAorCQkJCSBjb25zdCBzdHJ1Y3QgbmZzX2ZoICpmaGFuZGxlKQogewogCXN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbjsKIAlzdHJ1Y3QgaW5vZGUgKnJlcyA9IE5VTEw7Ci0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlbGVnYXRpb24sICZjbHAtPmNsX2RlbGVnYXRpb25zLCBzdXBlcl9saXN0KSB7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZWxlZ2F0aW9uLCAmc2VydmVyLT5kZWxlZ2F0aW9ucywgc3VwZXJfbGlzdCkgewogCQlzcGluX2xvY2soJmRlbGVnYXRpb24tPmxvY2spOwogCQlpZiAoZGVsZWdhdGlvbi0+aW5vZGUgIT0gTlVMTCAmJgogCQkgICAgbmZzX2NvbXBhcmVfZmgoZmhhbmRsZSwgJk5GU19JKGRlbGVnYXRpb24tPmlub2RlKS0+ZmgpID09IDApIHsKQEAgLTQ5OSw0OSArNTgzLDEyMSBAQAogCQlpZiAocmVzICE9IE5VTEwpCiAJCQlicmVhazsKIAl9CisJcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBuZnNfZGVsZWdhdGlvbl9maW5kX2lub2RlIC0gcmV0cmlldmUgdGhlIGlub2RlIGFzc29jaWF0ZWQgd2l0aCBhIGRlbGVnYXRpb24KKyAqIEBjbHA6IGNsaWVudCBzdGF0ZSBoYW5kbGUKKyAqIEBmaGFuZGxlOiBmaWxlaGFuZGxlIGZyb20gYSBkZWxlZ2F0aW9uIHJlY2FsbAorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byBpbm9kZSBtYXRjaGluZyAiZmhhbmRsZSwiIG9yIE5VTEwgaWYgYSBtYXRjaGluZyBpbm9kZQorICogY2Fubm90IGJlIGZvdW5kLgorICovCitzdHJ1Y3QgaW5vZGUgKm5mc19kZWxlZ2F0aW9uX2ZpbmRfaW5vZGUoc3RydWN0IG5mc19jbGllbnQgKmNscCwKKwkJCQkJY29uc3Qgc3RydWN0IG5mc19maCAqZmhhbmRsZSkKK3sKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyOworCXN0cnVjdCBpbm9kZSAqcmVzID0gTlVMTDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZXJ2ZXIsICZjbHAtPmNsX3N1cGVyYmxvY2tzLCBjbGllbnRfbGluaykgeworCQlyZXMgPSBuZnNfZGVsZWdhdGlvbl9maW5kX2lub2RlX3NlcnZlcihzZXJ2ZXIsIGZoYW5kbGUpOworCQlpZiAocmVzICE9IE5VTEwpCisJCQlicmVhazsKKwl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJlczsKIH0KIAotLyoKLSAqIE1hcmsgYWxsIGRlbGVnYXRpb25zIGFzIG5lZWRpbmcgdG8gYmUgcmVjbGFpbWVkCitzdGF0aWMgdm9pZCBuZnNfZGVsZWdhdGlvbl9tYXJrX3JlY2xhaW1fc2VydmVyKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCit7CisJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVsZWdhdGlvbiwgJnNlcnZlci0+ZGVsZWdhdGlvbnMsIHN1cGVyX2xpc3QpCisJCXNldF9iaXQoTkZTX0RFTEVHQVRJT05fTkVFRF9SRUNMQUlNLCAmZGVsZWdhdGlvbi0+ZmxhZ3MpOworfQorCisvKioKKyAqIG5mc19kZWxlZ2F0aW9uX21hcmtfcmVjbGFpbSAtIG1hcmsgYWxsIGRlbGVnYXRpb25zIGFzIG5lZWRpbmcgdG8gYmUgcmVjbGFpbWVkCisgKiBAY2xwOiBuZnNfY2xpZW50IHRvIHByb2Nlc3MKKyAqCiAgKi8KIHZvaWQgbmZzX2RlbGVnYXRpb25fbWFya19yZWNsYWltKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCiB7Ci0Jc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXI7CisKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVsZWdhdGlvbiwgJmNscC0+Y2xfZGVsZWdhdGlvbnMsIHN1cGVyX2xpc3QpCi0JCXNldF9iaXQoTkZTX0RFTEVHQVRJT05fTkVFRF9SRUNMQUlNLCAmZGVsZWdhdGlvbi0+ZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNlcnZlciwgJmNscC0+Y2xfc3VwZXJibG9ja3MsIGNsaWVudF9saW5rKQorCQluZnNfZGVsZWdhdGlvbl9tYXJrX3JlY2xhaW1fc2VydmVyKHNlcnZlcik7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKLS8qCi0gKiBSZWFwIGFsbCB1bmNsYWltZWQgZGVsZWdhdGlvbnMgYWZ0ZXIgcmVib290IHJlY292ZXJ5IGlzIGRvbmUKKy8qKgorICogbmZzX2RlbGVnYXRpb25fcmVhcF91bmNsYWltZWQgLSByZWFwIHVuY2xhaW1lZCBkZWxlZ2F0aW9ucyBhZnRlciByZWJvb3QgcmVjb3ZlcnkgaXMgZG9uZQorICogQGNscDogbmZzX2NsaWVudCB0byBwcm9jZXNzCisgKgogICovCiB2b2lkIG5mc19kZWxlZ2F0aW9uX3JlYXBfdW5jbGFpbWVkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCiB7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXI7CiAJc3RydWN0IGlub2RlICppbm9kZTsKKwogcmVzdGFydDoKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVsZWdhdGlvbiwgJmNscC0+Y2xfZGVsZWdhdGlvbnMsIHN1cGVyX2xpc3QpIHsKLQkJaWYgKHRlc3RfYml0KE5GU19ERUxFR0FUSU9OX05FRURfUkVDTEFJTSwgJmRlbGVnYXRpb24tPmZsYWdzKSA9PSAwKQotCQkJY29udGludWU7Ci0JCWlub2RlID0gbmZzX2RlbGVnYXRpb25fZ3JhYl9pbm9kZShkZWxlZ2F0aW9uKTsKLQkJaWYgKGlub2RlID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOwotCQlkZWxlZ2F0aW9uID0gbmZzX2RldGFjaF9kZWxlZ2F0aW9uX2xvY2tlZChORlNfSShpbm9kZSksIE5VTEwsIGNscCk7Ci0JCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJaWYgKGRlbGVnYXRpb24gIT0gTlVMTCkKLQkJCW5mc19mcmVlX2RlbGVnYXRpb24oZGVsZWdhdGlvbik7Ci0JCWlwdXQoaW5vZGUpOwotCQlnb3RvIHJlc3RhcnQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2VydmVyLCAmY2xwLT5jbF9zdXBlcmJsb2NrcywgY2xpZW50X2xpbmspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVsZWdhdGlvbiwgJnNlcnZlci0+ZGVsZWdhdGlvbnMsCisJCQkJCQkJCXN1cGVyX2xpc3QpIHsKKwkJCWlmICh0ZXN0X2JpdChORlNfREVMRUdBVElPTl9ORUVEX1JFQ0xBSU0sCisJCQkJCQkmZGVsZWdhdGlvbi0+ZmxhZ3MpID09IDApCisJCQkJY29udGludWU7CisJCQlpbm9kZSA9IG5mc19kZWxlZ2F0aW9uX2dyYWJfaW5vZGUoZGVsZWdhdGlvbik7CisJCQlpZiAoaW5vZGUgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKwkJCWRlbGVnYXRpb24gPSBuZnNfZGV0YWNoX2RlbGVnYXRpb24oTkZTX0koaW5vZGUpLAorCQkJCQkJCQlzZXJ2ZXIpOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkJCWlmIChkZWxlZ2F0aW9uICE9IE5VTEwpCisJCQkJbmZzX2ZyZWVfZGVsZWdhdGlvbihkZWxlZ2F0aW9uKTsKKwkJCWlwdXQoaW5vZGUpOworCQkJZ290byByZXN0YXJ0OworCQl9CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCisvKioKKyAqIG5mc19kZWxlZ2F0aW9uc19wcmVzZW50IC0gY2hlY2sgZm9yIGV4aXN0ZW5jZSBvZiBkZWxlZ2F0aW9ucworICogQGNscDogY2xpZW50IHN0YXRlIGhhbmRsZQorICoKKyAqIFJldHVybnMgb25lIGlmIHRoZXJlIGFyZSBhbnkgbmZzX2RlbGVnYXRpb24gc3RydWN0dXJlcyBhdHRhY2hlZAorICogdG8gdGhpcyBuZnNfY2xpZW50LgorICovCitpbnQgbmZzX2RlbGVnYXRpb25zX3ByZXNlbnQoc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3sKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyOworCWludCByZXQgPSAwOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNlcnZlciwgJmNscC0+Y2xfc3VwZXJibG9ja3MsIGNsaWVudF9saW5rKQorCQlpZiAoIWxpc3RfZW1wdHkoJnNlcnZlci0+ZGVsZWdhdGlvbnMpKSB7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIG5mczRfY29weV9kZWxlZ2F0aW9uX3N0YXRlaWQgLSBDb3B5IGlub2RlJ3Mgc3RhdGUgSUQgaW5mb3JtYXRpb24KKyAqIEBkc3Q6IHN0YXRlaWQgZGF0YSBzdHJ1Y3R1cmUgdG8gZmlsbCBpbgorICogQGlub2RlOiBpbm9kZSB0byBjaGVjaworICoKKyAqIFJldHVybnMgb25lIGFuZCBmaWxscyBpbiAiZHN0LT5kYXRhIiAqIGlmIGlub2RlIGhhZCBhIGRlbGVnYXRpb24sCisgKiBvdGhlcndpc2UgemVybyBpcyByZXR1cm5lZC4KKyAqLwogaW50IG5mczRfY29weV9kZWxlZ2F0aW9uX3N0YXRlaWQobmZzNF9zdGF0ZWlkICpkc3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9kZWxlZ2F0aW9uLmggYi9mcy9uZnMvZGVsZWdhdGlvbi5oCmluZGV4IDIwMjYzMDQuLmQ5MzIyZTQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kZWxlZ2F0aW9uLmgKKysrIGIvZnMvbmZzL2RlbGVnYXRpb24uaApAQCAtNDQsNiArNDQsNyBAQAogdm9pZCBuZnNfZXhwaXJlX3VucmVmZXJlbmNlZF9kZWxlZ2F0aW9ucyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsKIHZvaWQgbmZzX2hhbmRsZV9jYl9wYXRoZG93bihzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsKIGludCBuZnNfY2xpZW50X3JldHVybl9tYXJrZWRfZGVsZWdhdGlvbnMoc3RydWN0IG5mc19jbGllbnQgKmNscCk7CitpbnQgbmZzX2RlbGVnYXRpb25zX3ByZXNlbnQoc3RydWN0IG5mc19jbGllbnQgKmNscCk7CiAKIHZvaWQgbmZzX2RlbGVnYXRpb25fbWFya19yZWNsYWltKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApOwogdm9pZCBuZnNfZGVsZWdhdGlvbl9yZWFwX3VuY2xhaW1lZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCBkMzNkYTUzLi45NWIwODFiIDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKKysrIGIvZnMvbmZzL2Rpci5jCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ttZW1sZWFrLmg+CisjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KIAogI2luY2x1ZGUgImRlbGVnYXRpb24uaCIKICNpbmNsdWRlICJpb3N0YXQuaCIKQEAgLTEyNSw5ICsxMjUsMTAgQEAKIAkucGVybWlzc2lvbgk9IG5mc19wZXJtaXNzaW9uLAogCS5nZXRhdHRyCT0gbmZzX2dldGF0dHIsCiAJLnNldGF0dHIJPSBuZnNfc2V0YXR0ciwKLQkuZ2V0eGF0dHIgICAgICAgPSBuZnM0X2dldHhhdHRyLAotCS5zZXR4YXR0ciAgICAgICA9IG5mczRfc2V0eGF0dHIsCi0JLmxpc3R4YXR0ciAgICAgID0gbmZzNF9saXN0eGF0dHIsCisJLmdldHhhdHRyCT0gZ2VuZXJpY19nZXR4YXR0ciwKKwkuc2V0eGF0dHIJPSBnZW5lcmljX3NldHhhdHRyLAorCS5saXN0eGF0dHIJPSBnZW5lcmljX2xpc3R4YXR0ciwKKwkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAogfTsKIAogI2VuZGlmIC8qIENPTkZJR19ORlNfVjQgKi8KQEAgLTE3Miw3ICsxNzMsNyBAQAogCXN0cnVjdCBuZnNfY2FjaGVfYXJyYXlfZW50cnkgYXJyYXlbMF07CiB9OwogCi10eXBlZGVmIF9fYmUzMiAqICgqZGVjb2RlX2RpcmVudF90KShzdHJ1Y3QgeGRyX3N0cmVhbSAqLCBzdHJ1Y3QgbmZzX2VudHJ5ICosIHN0cnVjdCBuZnNfc2VydmVyICosIGludCk7Cit0eXBlZGVmIGludCAoKmRlY29kZV9kaXJlbnRfdCkoc3RydWN0IHhkcl9zdHJlYW0gKiwgc3RydWN0IG5mc19lbnRyeSAqLCBpbnQpOwogdHlwZWRlZiBzdHJ1Y3QgewogCXN0cnVjdCBmaWxlCSpmaWxlOwogCXN0cnVjdCBwYWdlCSpwYWdlOwpAQCAtMzc4LDE0ICszNzksMTQgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLS8qIEZpbGwgaW4gYW4gZW50cnkgYmFzZWQgb24gdGhlIHhkciBjb2RlIHN0b3JlZCBpbiBkZXNjLT5wYWdlICovCi1zdGF0aWMKLWludCB4ZHJfZGVjb2RlKG5mc19yZWFkZGlyX2Rlc2NyaXB0b3JfdCAqZGVzYywgc3RydWN0IG5mc19lbnRyeSAqZW50cnksIHN0cnVjdCB4ZHJfc3RyZWFtICpzdHJlYW0pCitzdGF0aWMgaW50IHhkcl9kZWNvZGUobmZzX3JlYWRkaXJfZGVzY3JpcHRvcl90ICpkZXNjLAorCQkgICAgICBzdHJ1Y3QgbmZzX2VudHJ5ICplbnRyeSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkcikKIHsKLQlfX2JlMzIgKnAgPSBkZXNjLT5kZWNvZGUoc3RyZWFtLCBlbnRyeSwgTkZTX1NFUlZFUihkZXNjLT5maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSwgZGVzYy0+cGx1cyk7Ci0JaWYgKElTX0VSUihwKSkKLQkJcmV0dXJuIFBUUl9FUlIocCk7CisJaW50IGVycm9yOwogCisJZXJyb3IgPSBkZXNjLT5kZWNvZGUoeGRyLCBlbnRyeSwgZGVzYy0+cGx1cyk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CiAJZW50cnktPmZhdHRyLT50aW1lX3N0YXJ0ID0gZGVzYy0+dGltZXN0YW1wOwogCWVudHJ5LT5mYXR0ci0+Z2VuY291bnQgPSBkZXNjLT5nZW5jb3VudDsKIAlyZXR1cm4gMDsKQEAgLTQzOCw3ICs0MzksNiBAQAogCWlmIChkZW50cnkgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JZF9zZXRfZF9vcChkZW50cnksIE5GU19QUk9UTyhkaXIpLT5kZW50cnlfb3BzKTsKIAlpbm9kZSA9IG5mc19maGdldChkZW50cnktPmRfc2IsIGVudHJ5LT5maCwgZW50cnktPmZhdHRyKTsKIAlpZiAoSVNfRVJSKGlub2RlKSkKIAkJZ290byBvdXQ7CkBAIC00NTksMjUgKzQ1OSwyNiBAQAogLyogUGVyZm9ybSBjb252ZXJzaW9uIGZyb20geGRyIHRvIGNhY2hlIGFycmF5ICovCiBzdGF0aWMKIGludCBuZnNfcmVhZGRpcl9wYWdlX2ZpbGxlcihuZnNfcmVhZGRpcl9kZXNjcmlwdG9yX3QgKmRlc2MsIHN0cnVjdCBuZnNfZW50cnkgKmVudHJ5LAotCQkJCXZvaWQgKnhkcl9wYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IGJ1ZmxlbikKKwkJCQlzdHJ1Y3QgcGFnZSAqKnhkcl9wYWdlcywgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBidWZsZW4pCiB7CiAJc3RydWN0IHhkcl9zdHJlYW0gc3RyZWFtOwotCXN0cnVjdCB4ZHJfYnVmIGJ1ZjsKLQlfX2JlMzIgKnB0ciA9IHhkcl9wYWdlOworCXN0cnVjdCB4ZHJfYnVmIGJ1ZiA9IHsKKwkJLnBhZ2VzID0geGRyX3BhZ2VzLAorCQkucGFnZV9sZW4gPSBidWZsZW4sCisJCS5idWZsZW4gPSBidWZsZW4sCisJCS5sZW4gPSBidWZsZW4sCisJfTsKKwlzdHJ1Y3QgcGFnZSAqc2NyYXRjaDsKIAlzdHJ1Y3QgbmZzX2NhY2hlX2FycmF5ICphcnJheTsKIAl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwogCWludCBzdGF0dXM7CiAKLQlidWYuaGVhZC0+aW92X2Jhc2UgPSB4ZHJfcGFnZTsKLQlidWYuaGVhZC0+aW92X2xlbiA9IGJ1ZmxlbjsKLQlidWYudGFpbC0+aW92X2xlbiA9IDA7Ci0JYnVmLnBhZ2VfYmFzZSA9IDA7Ci0JYnVmLnBhZ2VfbGVuID0gMDsKLQlidWYuYnVmbGVuID0gYnVmLmhlYWQtPmlvdl9sZW47Ci0JYnVmLmxlbiA9IGJ1Zi5oZWFkLT5pb3ZfbGVuOworCXNjcmF0Y2ggPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCWlmIChzY3JhdGNoID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCi0JeGRyX2luaXRfZGVjb2RlKCZzdHJlYW0sICZidWYsIHB0cik7Ci0KKwl4ZHJfaW5pdF9kZWNvZGUoJnN0cmVhbSwgJmJ1ZiwgTlVMTCk7CisJeGRyX3NldF9zY3JhdGNoX2J1ZmZlcigmc3RyZWFtLCBwYWdlX2FkZHJlc3Moc2NyYXRjaCksIFBBR0VfU0laRSk7CiAKIAlkbyB7CiAJCXN0YXR1cyA9IHhkcl9kZWNvZGUoZGVzYywgZW50cnksICZzdHJlYW0pOwpAQCAtNTA2LDYgKzUwNyw4IEBACiAJCX0gZWxzZQogCQkJc3RhdHVzID0gUFRSX0VSUihhcnJheSk7CiAJfQorCisJcHV0X3BhZ2Uoc2NyYXRjaCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNTIxLDcgKzUyNCw2IEBACiB2b2lkIG5mc19yZWFkZGlyX2ZyZWVfbGFyZ2VfcGFnZSh2b2lkICpwdHIsIHN0cnVjdCBwYWdlICoqcGFnZXMsCiAJCXVuc2lnbmVkIGludCBucGFnZXMpCiB7Ci0Jdm1fdW5tYXBfcmFtKHB0ciwgbnBhZ2VzKTsKIAluZnNfcmVhZGRpcl9mcmVlX3BhZ2VhcnJheShwYWdlcywgbnBhZ2VzKTsKIH0KIApAQCAtNTMwLDkgKzUzMiw4IEBACiAgKiB0byBuZnNfcmVhZGRpcl9mcmVlX2xhcmdlX3BhZ2UKICAqLwogc3RhdGljCi12b2lkICpuZnNfcmVhZGRpcl9sYXJnZV9wYWdlKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucGFnZXMpCitpbnQgbmZzX3JlYWRkaXJfbGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnBhZ2VzKQogewotCXZvaWQgKnB0cjsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykgewpAQCAtNTQxLDEzICs1NDIsMTEgQEAKIAkJCWdvdG8gb3V0X2ZyZWVwYWdlczsKIAkJcGFnZXNbaV0gPSBwYWdlOwogCX0KKwlyZXR1cm4gMDsKIAotCXB0ciA9IHZtX21hcF9yYW0ocGFnZXMsIG5wYWdlcywgMCwgUEFHRV9LRVJORUwpOwotCWlmICghSVNfRVJSX09SX05VTEwocHRyKSkKLQkJcmV0dXJuIHB0cjsKIG91dF9mcmVlcGFnZXM6CiAJbmZzX3JlYWRkaXJfZnJlZV9wYWdlYXJyYXkocGFnZXMsIGkpOwotCXJldHVybiBOVUxMOworCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMKQEAgLTU2Niw2ICs1NjUsNyBAQAogCWVudHJ5LmVvZiA9IDA7CiAJZW50cnkuZmggPSBuZnNfYWxsb2NfZmhhbmRsZSgpOwogCWVudHJ5LmZhdHRyID0gbmZzX2FsbG9jX2ZhdHRyKCk7CisJZW50cnkuc2VydmVyID0gTkZTX1NFUlZFUihpbm9kZSk7CiAJaWYgKGVudHJ5LmZoID09IE5VTEwgfHwgZW50cnkuZmF0dHIgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKQEAgLTU3Nyw4ICs1NzcsOCBAQAogCW1lbXNldChhcnJheSwgMCwgc2l6ZW9mKHN0cnVjdCBuZnNfY2FjaGVfYXJyYXkpKTsKIAlhcnJheS0+ZW9mX2luZGV4ID0gLTE7CiAKLQlwYWdlc19wdHIgPSBuZnNfcmVhZGRpcl9sYXJnZV9wYWdlKHBhZ2VzLCBhcnJheV9zaXplKTsKLQlpZiAoIXBhZ2VzX3B0cikKKwlzdGF0dXMgPSBuZnNfcmVhZGRpcl9sYXJnZV9wYWdlKHBhZ2VzLCBhcnJheV9zaXplKTsKKwlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBvdXRfcmVsZWFzZV9hcnJheTsKIAlkbyB7CiAJCXVuc2lnbmVkIGludCBwZ2xlbjsKQEAgLTU4Nyw3ICs1ODcsNyBAQAogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCWJyZWFrOwogCQlwZ2xlbiA9IHN0YXR1czsKLQkJc3RhdHVzID0gbmZzX3JlYWRkaXJfcGFnZV9maWxsZXIoZGVzYywgJmVudHJ5LCBwYWdlc19wdHIsIHBhZ2UsIHBnbGVuKTsKKwkJc3RhdHVzID0gbmZzX3JlYWRkaXJfcGFnZV9maWxsZXIoZGVzYywgJmVudHJ5LCBwYWdlcywgcGFnZSwgcGdsZW4pOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJaWYgKHN0YXR1cyA9PSAtRU5PU1BDKQogCQkJCXN0YXR1cyA9IDA7CkBAIC0xMTkyLDggKzExOTIsNiBAQAogCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiBORlNfU0VSVkVSKGRpciktPm5hbWVsZW4pCiAJCWdvdG8gb3V0OwogCi0JZF9zZXRfZF9vcChkZW50cnksIE5GU19QUk9UTyhkaXIpLT5kZW50cnlfb3BzKTsKLQogCS8qCiAJICogSWYgd2UncmUgZG9pbmcgYW4gZXhjbHVzaXZlIGNyZWF0ZSwgb3B0aW1pemUgYXdheSB0aGUgbG9va3VwCiAJICogYnV0IGRvbid0IGhhc2ggdGhlIGRlbnRyeS4KQEAgLTEyMjEsNyArMTIxOSw3IEBACiAJCWdvdG8gb3V0X3VuYmxvY2tfc2lsbHlyZW5hbWU7CiAJfQogCWlub2RlID0gbmZzX2ZoZ2V0KGRlbnRyeS0+ZF9zYiwgZmhhbmRsZSwgZmF0dHIpOwotCXJlcyA9IChzdHJ1Y3QgZGVudHJ5ICopaW5vZGU7CisJcmVzID0gRVJSX0NBU1QoaW5vZGUpOwogCWlmIChJU19FUlIocmVzKSkKIAkJZ290byBvdXRfdW5ibG9ja19zaWxseXJlbmFtZTsKIApAQCAtMTMzNyw3ICsxMzM1LDYgQEAKIAkJcmVzID0gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKIAkJZ290byBvdXQ7CiAJfQotCWRfc2V0X2Rfb3AoZGVudHJ5LCBORlNfUFJPVE8oZGlyKS0+ZGVudHJ5X29wcyk7CiAKIAkvKiBMZXQgdmZzX2NyZWF0ZSgpIGRlYWwgd2l0aCBPX0VYQ0wuIEluc3RhbnRpYXRlLCBidXQgZG9uJ3QgaGFzaAogCSAqIHRoZSBkZW50cnkuICovCkBAIC0xMzU1LDggKzEzNTIsNyBAQAogCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfQ1JFQVRFKSB7CiAJCWF0dHIuaWFfbW9kZSA9IG5kLT5pbnRlbnQub3Blbi5jcmVhdGVfbW9kZTsKIAkJYXR0ci5pYV92YWxpZCA9IEFUVFJfTU9ERTsKLQkJaWYgKCFJU19QT1NJWEFDTChkaXIpKQotCQkJYXR0ci5pYV9tb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CisJCWF0dHIuaWFfbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCX0gZWxzZSB7CiAJCW9wZW5fZmxhZ3MgJj0gfihPX0VYQ0wgfCBPX0NSRUFUKTsKIAkJYXR0ci5pYV92YWxpZCA9IDA7CmRpZmYgLS1naXQgYS9mcy9uZnMvZ2V0cm9vdC5jIGIvZnMvbmZzL2dldHJvb3QuYwppbmRleCA1NTk2YzZhLi5iNWZmZThmIDEwMDY0NAotLS0gYS9mcy9uZnMvZ2V0cm9vdC5jCisrKyBiL2ZzL25mcy9nZXRyb290LmMKQEAgLTExOSw5ICsxMTksNiBAQAogCX0KIAogCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUocmV0LCBpbm9kZSk7Ci0KLQlpZiAocmV0LT5kX29wID09IE5VTEwpCi0JCWRfc2V0X2Rfb3AocmV0LCBzZXJ2ZXItPm5mc19jbGllbnQtPnJwY19vcHMtPmRlbnRyeV9vcHMpOwogb3V0OgogCW5mc19mcmVlX2ZhdHRyKGZzaW5mby5mYXR0cik7CiAJcmV0dXJuIHJldDsKQEAgLTIyNyw5ICsyMjQsNiBAQAogCiAJc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShyZXQsIGlub2RlKTsKIAotCWlmIChyZXQtPmRfb3AgPT0gTlVMTCkKLQkJZF9zZXRfZF9vcChyZXQsIHNlcnZlci0+bmZzX2NsaWVudC0+cnBjX29wcy0+ZGVudHJ5X29wcyk7Ci0KIG91dDoKIAluZnNfZnJlZV9mYXR0cihmYXR0cik7CiAJZHByaW50aygiPC0tIG5mczRfZ2V0X3Jvb3QoKVxuIik7CmRpZmYgLS1naXQgYS9mcy9uZnMvaWRtYXAuYyBiL2ZzL25mcy9pZG1hcC5jCmluZGV4IDRlMmQ5YjYuLjE4Njk2ODggMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pZG1hcC5jCisrKyBiL2ZzL25mcy9pZG1hcC5jCkBAIC0yMzgsNyArMjM4LDcgQEAKIAlyZXR1cm4gbmZzX2lkbWFwX2xvb2t1cF9uYW1lKGdpZCwgImdyb3VwIiwgYnVmLCBidWZsZW4pOwogfQogCi0jZWxzZSAgLyogQ09ORklHX05GU19VU0VfSURNQVBQRVIgbm90IGRlZmluZWQgKi8KKyNlbHNlICAvKiBDT05GSUdfTkZTX1VTRV9ORVdfSURNQVBQRVIgbm90IGRlZmluZWQgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CmRpZmYgLS1naXQgYS9mcy9uZnMvaW5vZGUuYyBiL2ZzL25mcy9pbm9kZS5jCmluZGV4IDAxN2RhYTMuLmNlMDBiNzAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbm9kZS5jCisrKyBiL2ZzL25mcy9pbm9kZS5jCkBAIC0xNDEwLDkgKzE0MTAsOSBAQAogICovCiB2b2lkIG5mczRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKKwlwbmZzX2Rlc3Ryb3lfbGF5b3V0KE5GU19JKGlub2RlKSk7CiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOwogCWVuZF93cml0ZWJhY2soaW5vZGUpOwotCXBuZnNfZGVzdHJveV9sYXlvdXQoTkZTX0koaW5vZGUpKTsKIAkvKiBJZiB3ZSBhcmUgaG9sZGluZyBhIGRlbGVnYXRpb24sIHJldHVybiBpdCEgKi8KIAluZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb25fbm9yZWNsYWltKGlub2RlKTsKIAkvKiBGaXJzdCBjYWxsIHN0YW5kYXJkIE5GUyBjbGVhcl9pbm9kZSgpIGNvZGUgKi8KQEAgLTE2MTksNiArMTYxOSw3IEBACiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlycGNfcHJvY191bnJlZ2lzdGVyKCJuZnMiKTsKICNlbmRpZgorCW5mc19jbGVhbnVwX2NiX2lkZW50X2lkcigpOwogCXVucmVnaXN0ZXJfbmZzX2ZzKCk7CiAJbmZzX2ZzX3Byb2NfZXhpdCgpOwogCW5mc2lvZF9zdG9wKCk7CmRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5oCmluZGV4IGU2MzU2YjcuLmJmYTNhMzQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbnRlcm5hbC5oCisrKyBiL2ZzL25mcy9pbnRlcm5hbC5oCkBAIC0xMjgsOSArMTI4LDEzIEBACiAvKiBjbGllbnQuYyAqLwogZXh0ZXJuIHN0cnVjdCBycGNfcHJvZ3JhbSBuZnNfcHJvZ3JhbTsKIAorZXh0ZXJuIHZvaWQgbmZzX2NsZWFudXBfY2JfaWRlbnRfaWRyKHZvaWQpOwogZXh0ZXJuIHZvaWQgbmZzX3B1dF9jbGllbnQoc3RydWN0IG5mc19jbGllbnQgKik7Ci1leHRlcm4gc3RydWN0IG5mc19jbGllbnQgKm5mc19maW5kX2NsaWVudChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgdTMyKTsKLWV4dGVybiBzdHJ1Y3QgbmZzX2NsaWVudCAqbmZzX2ZpbmRfY2xpZW50X25leHQoc3RydWN0IG5mc19jbGllbnQgKik7CitleHRlcm4gc3RydWN0IG5mc19jbGllbnQgKm5mczRfZmluZF9jbGllbnRfbm9faWRlbnQoY29uc3Qgc3RydWN0IHNvY2thZGRyICopOworZXh0ZXJuIHN0cnVjdCBuZnNfY2xpZW50ICpuZnM0X2ZpbmRfY2xpZW50X2lkZW50KGludCk7CitleHRlcm4gc3RydWN0IG5mc19jbGllbnQgKgorbmZzNF9maW5kX2NsaWVudF9zZXNzaW9uaWQoY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqLAorCQkJICAgaW50KTsKIGV4dGVybiBzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzX2NyZWF0ZV9zZXJ2ZXIoCiAJCQkJCWNvbnN0IHN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKiwKIAkJCQkJc3RydWN0IG5mc19maCAqKTsKQEAgLTE4NSwxNyArMTg5LDIwIEBACiBleHRlcm4gdm9pZCBuZnNfZGVzdHJveV9kaXJlY3RjYWNoZSh2b2lkKTsKIAogLyogbmZzMnhkci5jICovCi1leHRlcm4gaW50IG5mc19zdGF0X3RvX2Vycm5vKGludCk7CitleHRlcm4gaW50IG5mc19zdGF0X3RvX2Vycm5vKGVudW0gbmZzX3N0YXQpOwogZXh0ZXJuIHN0cnVjdCBycGNfcHJvY2luZm8gbmZzX3Byb2NlZHVyZXNbXTsKLWV4dGVybiBfX2JlMzIgKm5mc19kZWNvZGVfZGlyZW50KHN0cnVjdCB4ZHJfc3RyZWFtICosIHN0cnVjdCBuZnNfZW50cnkgKiwgc3RydWN0IG5mc19zZXJ2ZXIgKiwgaW50KTsKK2V4dGVybiBpbnQgbmZzMl9kZWNvZGVfZGlyZW50KHN0cnVjdCB4ZHJfc3RyZWFtICosCisJCQkJc3RydWN0IG5mc19lbnRyeSAqLCBpbnQpOwogCiAvKiBuZnMzeGRyLmMgKi8KIGV4dGVybiBzdHJ1Y3QgcnBjX3Byb2NpbmZvIG5mczNfcHJvY2VkdXJlc1tdOwotZXh0ZXJuIF9fYmUzMiAqbmZzM19kZWNvZGVfZGlyZW50KHN0cnVjdCB4ZHJfc3RyZWFtICosIHN0cnVjdCBuZnNfZW50cnkgKiwgc3RydWN0IG5mc19zZXJ2ZXIgKiwgaW50KTsKK2V4dGVybiBpbnQgbmZzM19kZWNvZGVfZGlyZW50KHN0cnVjdCB4ZHJfc3RyZWFtICosCisJCQkJc3RydWN0IG5mc19lbnRyeSAqLCBpbnQpOwogCiAvKiBuZnM0eGRyLmMgKi8KICNpZmRlZiBDT05GSUdfTkZTX1Y0Ci1leHRlcm4gX19iZTMyICpuZnM0X2RlY29kZV9kaXJlbnQoc3RydWN0IHhkcl9zdHJlYW0gKiwgc3RydWN0IG5mc19lbnRyeSAqLCBzdHJ1Y3QgbmZzX3NlcnZlciAqLCBpbnQpOworZXh0ZXJuIGludCBuZnM0X2RlY29kZV9kaXJlbnQoc3RydWN0IHhkcl9zdHJlYW0gKiwKKwkJCQlzdHJ1Y3QgbmZzX2VudHJ5ICosIGludCk7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTkZTX1Y0XzEKIGV4dGVybiBjb25zdCB1MzIgbmZzNDFfbWF4cmVhZF9vdmVyaGVhZDsKZGlmZiAtLWdpdCBhL2ZzL25mcy9tb3VudF9jbG50LmMgYi9mcy9uZnMvbW91bnRfY2xudC5jCmluZGV4IDRmOTgxZjEuLmQ0YzJkNmIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9tb3VudF9jbG50LmMKKysrIGIvZnMvbmZzL21vdW50X2NsbnQuYwpAQCAtMjM2LDEwICsyMzYsOCBAQAogCQkuYXV0aGZsYXZvcgk9IFJQQ19BVVRIX1VOSVgsCiAJCS5mbGFncwkJPSBSUENfQ0xOVF9DUkVBVEVfTk9QSU5HLAogCX07Ci0Jc3RydWN0IG1vdW50cmVzCXJlc3VsdDsKIAlzdHJ1Y3QgcnBjX21lc3NhZ2UgbXNnCT0gewogCQkucnBjX2FyZ3AJPSBpbmZvLT5kaXJwYXRoLAotCQkucnBjX3Jlc3AJPSAmcmVzdWx0LAogCX07CiAJc3RydWN0IHJwY19jbG50ICpjbG50OwogCWludCBzdGF0dXM7CkBAIC0yNDgsNyArMjQ2LDcgQEAKIAkJYXJncy5mbGFncyB8PSBSUENfQ0xOVF9DUkVBVEVfTk9OUFJJVlBPUlQ7CiAKIAljbG50ID0gcnBjX2NyZWF0ZSgmYXJncyk7Ci0JaWYgKHVubGlrZWx5KElTX0VSUihjbG50KSkpCisJaWYgKElTX0VSUihjbG50KSkKIAkJZ290byBvdXRfY2xudF9lcnI7CiAKIAlkcHJpbnRrKCJORlM6IHNlbmRpbmcgVU1OVCByZXF1ZXN0IGZvciAlczolc1xuIiwKQEAgLTI4MCwyOSArMjc4LDIwIEBACiAgKiBYRFIgZW5jb2RlL2RlY29kZSBmdW5jdGlvbnMgZm9yIE1PVU5UCiAgKi8KIAotc3RhdGljIGludCBlbmNvZGVfbW50ZGlycGF0aChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCBjaGFyICpwYXRobmFtZSkKK3N0YXRpYyB2b2lkIGVuY29kZV9tbnRkaXJwYXRoKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IGNoYXIgKnBhdGhuYW1lKQogewogCWNvbnN0IHUzMiBwYXRobmFtZV9sZW4gPSBzdHJsZW4ocGF0aG5hbWUpOwogCV9fYmUzMiAqcDsKIAotCWlmICh1bmxpa2VseShwYXRobmFtZV9sZW4gPiBNTlRQQVRITEVOKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCBzaXplb2YodTMyKSArIHBhdGhuYW1lX2xlbik7Ci0JaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCi0JCXJldHVybiAtRUlPOworCUJVR19PTihwYXRobmFtZV9sZW4gPiBNTlRQQVRITEVOKTsKKwlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA0ICsgcGF0aG5hbWVfbGVuKTsKIAl4ZHJfZW5jb2RlX29wYXF1ZShwLCBwYXRobmFtZSwgcGF0aG5hbWVfbGVuKTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1udF9lbmNfZGlycGF0aChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAotCQkJICAgY29uc3QgY2hhciAqZGlycGF0aCkKK3N0YXRpYyB2b2lkIG1udF94ZHJfZW5jX2RpcnBhdGgoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJY29uc3QgY2hhciAqZGlycGF0aCkKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7Ci0KLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JcmV0dXJuIGVuY29kZV9tbnRkaXJwYXRoKCZ4ZHIsIGRpcnBhdGgpOworCWVuY29kZV9tbnRkaXJwYXRoKHhkciwgZGlycGF0aCk7CiB9CiAKIC8qCkBAIC0zMjAsMTAgKzMwOSwxMCBAQAogCXUzMiBzdGF0dXM7CiAJX19iZTMyICpwOwogCi0JcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgc2l6ZW9mKHN0YXR1cykpOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOwogCWlmICh1bmxpa2VseShwID09IE5VTEwpKQogCQlyZXR1cm4gLUVJTzsKLQlzdGF0dXMgPSBudG9obCgqcCk7CisJc3RhdHVzID0gYmUzMl90b19jcHVwKHApOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobW50X2VycnRibCk7IGkrKykgewogCQlpZiAobW50X2VycnRibFtpXS5zdGF0dXMgPT0gc3RhdHVzKSB7CkBAIC0zNTEsMTggKzM0MCwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1udF9kZWNfbW91bnRyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKLQkJCSAgICBzdHJ1Y3QgbW91bnRyZXMgKnJlcykKK3N0YXRpYyBpbnQgbW50X3hkcl9kZWNfbW91bnRyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQlzdHJ1Y3QgbW91bnRyZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcmVxLT5ycV9yY3ZfYnVmLCBwKTsKLQotCXN0YXR1cyA9IGRlY29kZV9zdGF0dXMoJnhkciwgcmVzKTsKKwlzdGF0dXMgPSBkZWNvZGVfc3RhdHVzKHhkciwgcmVzKTsKIAlpZiAodW5saWtlbHkoc3RhdHVzICE9IDAgfHwgcmVzLT5lcnJubyAhPSAwKSkKIAkJcmV0dXJuIHN0YXR1czsKLQlyZXR1cm4gZGVjb2RlX2ZoYW5kbGUoJnhkciwgcmVzKTsKKwlyZXR1cm4gZGVjb2RlX2ZoYW5kbGUoeGRyLCByZXMpOwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9maHNfc3RhdHVzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBtb3VudHJlcyAqcmVzKQpAQCAtMzcxLDEwICszNTgsMTAgQEAKIAl1MzIgc3RhdHVzOwogCV9fYmUzMiAqcDsKIAotCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIHNpemVvZihzdGF0dXMpKTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKIAlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKIAkJcmV0dXJuIC1FSU87Ci0Jc3RhdHVzID0gbnRvaGwoKnApOworCXN0YXR1cyA9IGJlMzJfdG9fY3B1cChwKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1udDNfZXJydGJsKTsgaSsrKSB7CiAJCWlmIChtbnQzX2VycnRibFtpXS5zdGF0dXMgPT0gc3RhdHVzKSB7CkBAIC0zOTQsMTEgKzM4MSwxMSBAQAogCXUzMiBzaXplOwogCV9fYmUzMiAqcDsKIAotCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIHNpemVvZihzaXplKSk7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CiAJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCiAJCXJldHVybiAtRUlPOwogCi0Jc2l6ZSA9IG50b2hsKCpwKyspOworCXNpemUgPSBiZTMyX3RvX2NwdXAocCk7CiAJaWYgKHNpemUgPiBORlMzX0ZIU0laRSB8fCBzaXplID09IDApCiAJCXJldHVybiAtRUlPOwogCkBAIC00MjEsMTUgKzQwOCwxNSBAQAogCWlmICgqY291bnQgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBzaXplb2YoZW50cmllcykpOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOwogCWlmICh1bmxpa2VseShwID09IE5VTEwpKQogCQlyZXR1cm4gLUVJTzsKLQllbnRyaWVzID0gbnRvaGwoKnApOworCWVudHJpZXMgPSBiZTMyX3RvX2NwdXAocCk7CiAJZHByaW50aygiTkZTOiByZWNlaXZlZCAldSBhdXRoIGZsYXZvcnNcbiIsIGVudHJpZXMpOwogCWlmIChlbnRyaWVzID4gTkZTX01BWF9TRUNGTEFWT1JTKQogCQllbnRyaWVzID0gTkZTX01BWF9TRUNGTEFWT1JTOwogCi0JcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgc2l6ZW9mKHUzMikgKiBlbnRyaWVzKTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0ICogZW50cmllcyk7CiAJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCiAJCXJldHVybiAtRUlPOwogCkBAIC00MzcsNyArNDI0LDcgQEAKIAkJZW50cmllcyA9ICpjb3VudDsKIAogCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKLQkJZmxhdm9yc1tpXSA9IG50b2hsKCpwKyspOworCQlmbGF2b3JzW2ldID0gYmUzMl90b19jcHVwKHArKyk7CiAJCWRwcmludGsoIk5GUzogICBhdXRoIGZsYXZvclsldV06ICVkXG4iLCBpLCBmbGF2b3JzW2ldKTsKIAl9CiAJKmNvdW50ID0gaTsKQEAgLTQ0NSwzMCArNDMyLDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW50X2RlY19tb3VudHJlczMoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKLQkJCSAgICAgc3RydWN0IG1vdW50cmVzICpyZXMpCitzdGF0aWMgaW50IG1udF94ZHJfZGVjX21vdW50cmVzMyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgc3RydWN0IG1vdW50cmVzICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJlcS0+cnFfcmN2X2J1ZiwgcCk7Ci0KLQlzdGF0dXMgPSBkZWNvZGVfZmhzX3N0YXR1cygmeGRyLCByZXMpOworCXN0YXR1cyA9IGRlY29kZV9maHNfc3RhdHVzKHhkciwgcmVzKTsKIAlpZiAodW5saWtlbHkoc3RhdHVzICE9IDAgfHwgcmVzLT5lcnJubyAhPSAwKSkKIAkJcmV0dXJuIHN0YXR1czsKLQlzdGF0dXMgPSBkZWNvZGVfZmhhbmRsZTMoJnhkciwgcmVzKTsKKwlzdGF0dXMgPSBkZWNvZGVfZmhhbmRsZTMoeGRyLCByZXMpOwogCWlmICh1bmxpa2VseShzdGF0dXMgIT0gMCkpIHsKIAkJcmVzLT5lcnJubyA9IC1FQkFESEFORExFOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmV0dXJuIGRlY29kZV9hdXRoX2ZsYXZvcnMoJnhkciwgcmVzKTsKKwlyZXR1cm4gZGVjb2RlX2F1dGhfZmxhdm9ycyh4ZHIsIHJlcyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnBjX3Byb2NpbmZvIG1udF9wcm9jZWR1cmVzW10gPSB7CiAJW01PVU5UUFJPQ19NTlRdID0gewogCQkucF9wcm9jCQk9IE1PVU5UUFJPQ19NTlQsCi0JCS5wX2VuY29kZQk9IChreGRycHJvY190KW1udF9lbmNfZGlycGF0aCwKLQkJLnBfZGVjb2RlCT0gKGt4ZHJwcm9jX3QpbW50X2RlY19tb3VudHJlcywKKwkJLnBfZW5jb2RlCT0gKGt4ZHJlcHJvY190KW1udF94ZHJfZW5jX2RpcnBhdGgsCisJCS5wX2RlY29kZQk9IChreGRyZHByb2NfdCltbnRfeGRyX2RlY19tb3VudHJlcywKIAkJLnBfYXJnbGVuCT0gTU5UX2VuY19kaXJwYXRoX3N6LAogCQkucF9yZXBsZW4JPSBNTlRfZGVjX21vdW50cmVzX3N6LAogCQkucF9zdGF0aWR4CT0gTU9VTlRQUk9DX01OVCwKQEAgLTQ3Niw3ICs0NjEsNyBAQAogCX0sCiAJW01PVU5UUFJPQ19VTU5UXSA9IHsKIAkJLnBfcHJvYwkJPSBNT1VOVFBST0NfVU1OVCwKLQkJLnBfZW5jb2RlCT0gKGt4ZHJwcm9jX3QpbW50X2VuY19kaXJwYXRoLAorCQkucF9lbmNvZGUJPSAoa3hkcmVwcm9jX3QpbW50X3hkcl9lbmNfZGlycGF0aCwKIAkJLnBfYXJnbGVuCT0gTU5UX2VuY19kaXJwYXRoX3N6LAogCQkucF9zdGF0aWR4CT0gTU9VTlRQUk9DX1VNTlQsCiAJCS5wX25hbWUJCT0gIlVNT1VOVCIsCkBAIC00ODYsOCArNDcxLDggQEAKIHN0YXRpYyBzdHJ1Y3QgcnBjX3Byb2NpbmZvIG1udDNfcHJvY2VkdXJlc1tdID0gewogCVtNT1VOVFBST0MzX01OVF0gPSB7CiAJCS5wX3Byb2MJCT0gTU9VTlRQUk9DM19NTlQsCi0JCS5wX2VuY29kZQk9IChreGRycHJvY190KW1udF9lbmNfZGlycGF0aCwKLQkJLnBfZGVjb2RlCT0gKGt4ZHJwcm9jX3QpbW50X2RlY19tb3VudHJlczMsCisJCS5wX2VuY29kZQk9IChreGRyZXByb2NfdCltbnRfeGRyX2VuY19kaXJwYXRoLAorCQkucF9kZWNvZGUJPSAoa3hkcmRwcm9jX3QpbW50X3hkcl9kZWNfbW91bnRyZXMzLAogCQkucF9hcmdsZW4JPSBNTlRfZW5jX2RpcnBhdGhfc3osCiAJCS5wX3JlcGxlbgk9IE1OVF9kZWNfbW91bnRyZXMzX3N6LAogCQkucF9zdGF0aWR4CT0gTU9VTlRQUk9DM19NTlQsCkBAIC00OTUsNyArNDgwLDcgQEAKIAl9LAogCVtNT1VOVFBST0MzX1VNTlRdID0gewogCQkucF9wcm9jCQk9IE1PVU5UUFJPQzNfVU1OVCwKLQkJLnBfZW5jb2RlCT0gKGt4ZHJwcm9jX3QpbW50X2VuY19kaXJwYXRoLAorCQkucF9lbmNvZGUJPSAoa3hkcmVwcm9jX3QpbW50X3hkcl9lbmNfZGlycGF0aCwKIAkJLnBfYXJnbGVuCT0gTU5UX2VuY19kaXJwYXRoX3N6LAogCQkucF9zdGF0aWR4CT0gTU9VTlRQUk9DM19VTU5ULAogCQkucF9uYW1lCQk9ICJVTU9VTlQiLApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczJ4ZHIuYyBiL2ZzL25mcy9uZnMyeGRyLmMKaW5kZXggNTkxNGExOS4uNzkyY2IxMyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczJ4ZHIuYworKysgYi9mcy9uZnMvbmZzMnhkci5jCkBAIC02MSw1ODQgKzYxLDEwMDggQEAKICNkZWZpbmUgTkZTX3JlYWRkaXJyZXNfc3oJKDEpCiAjZGVmaW5lIE5GU19zdGF0ZnNyZXNfc3oJKDErTkZTX2luZm9fc3opCiAKLS8qCi0gKiBDb21tb24gTkZTIFhEUiBmdW5jdGlvbnMgYXMgaW5saW5lcwotICovCi1zdGF0aWMgaW5saW5lIF9fYmUzMiAqCi14ZHJfZW5jb2RlX2ZoYW5kbGUoX19iZTMyICpwLCBjb25zdCBzdHJ1Y3QgbmZzX2ZoICpmaGFuZGxlKQotewotCW1lbWNweShwLCBmaGFuZGxlLT5kYXRhLCBORlMyX0ZIU0laRSk7Ci0JcmV0dXJuIHAgKyBYRFJfUVVBRExFTihORlMyX0ZIU0laRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19iZTMyICoKLXhkcl9kZWNvZGVfZmhhbmRsZShfX2JlMzIgKnAsIHN0cnVjdCBuZnNfZmggKmZoYW5kbGUpCi17Ci0JLyogTkZTdjIgaGFuZGxlcyBoYXZlIGEgZml4ZWQgbGVuZ3RoICovCi0JZmhhbmRsZS0+c2l6ZSA9IE5GUzJfRkhTSVpFOwotCW1lbWNweShmaGFuZGxlLT5kYXRhLCBwLCBORlMyX0ZIU0laRSk7Ci0JcmV0dXJuIHAgKyBYRFJfUVVBRExFTihORlMyX0ZIU0laRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19iZTMyKgoteGRyX2VuY29kZV90aW1lKF9fYmUzMiAqcCwgc3RydWN0IHRpbWVzcGVjICp0aW1lcCkKLXsKLQkqcCsrID0gaHRvbmwodGltZXAtPnR2X3NlYyk7Ci0JLyogQ29udmVydCBuYW5vc2Vjb25kcyBpbnRvIG1pY3Jvc2Vjb25kcyAqLwotCSpwKysgPSBodG9ubCh0aW1lcC0+dHZfbnNlYyA/IHRpbWVwLT50dl9uc2VjIC8gMTAwMCA6IDApOwotCXJldHVybiBwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fYmUzMioKLXhkcl9lbmNvZGVfY3VycmVudF9zZXJ2ZXJfdGltZShfX2JlMzIgKnAsIHN0cnVjdCB0aW1lc3BlYyAqdGltZXApCi17Ci0JLyoKLQkgKiBQYXNzaW5nIHRoZSBpbnZhbGlkIHZhbHVlIHVzZWNvbmRzPTEwMDAwMDAgaXMgYQotCSAqIFN1biBjb252ZW50aW9uIGZvciAic2V0IHRvIGN1cnJlbnQgc2VydmVyIHRpbWUiLgotCSAqIEl0J3MgbmVlZGVkIHRvIG1ha2UgcGVybWlzc2lvbnMgY2hlY2tzIGZvciB0aGUKLQkgKiAidG91Y2giIHByb2dyYW0gYWNyb3NzIHYyIG1vdW50cyB0byBTb2xhcmlzIGFuZAotCSAqIElyaXggYm94ZXMgd29yayBjb3JyZWN0bHkuIFNlZSBkZXNjcmlwdGlvbiBvZgotCSAqIHNhdHRyIGluIHNlY3Rpb24gNi4xIG9mICJORlMgSWxsdXN0cmF0ZWQiIGJ5Ci0JICogQnJlbnQgQ2FsbGFnaGFuLCBBZGRpc29uLVdlc2xleSwgSVNCTiAwLTIwMS0zMjc1MC01Ci0JICovCi0JKnArKyA9IGh0b25sKHRpbWVwLT50dl9zZWMpOwotCSpwKysgPSBodG9ubCgxMDAwMDAwKTsKLQlyZXR1cm4gcDsKLX0KLQotc3RhdGljIGlubGluZSBfX2JlMzIqCi14ZHJfZGVjb2RlX3RpbWUoX19iZTMyICpwLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVwKQotewotCXRpbWVwLT50dl9zZWMgPSBudG9obCgqcCsrKTsKLQkvKiBDb252ZXJ0IG1pY3Jvc2Vjb25kcyBpbnRvIG5hbm9zZWNvbmRzICovCi0JdGltZXAtPnR2X25zZWMgPSBudG9obCgqcCsrKSAqIDEwMDA7Ci0JcmV0dXJuIHA7Ci19Ci0KLXN0YXRpYyBfX2JlMzIgKgoteGRyX2RlY29kZV9mYXR0cihfX2JlMzIgKnAsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQotewotCXUzMiByZGV2LCB0eXBlOwotCXR5cGUgPSBudG9obCgqcCsrKTsKLQlmYXR0ci0+bW9kZSA9IG50b2hsKCpwKyspOwotCWZhdHRyLT5ubGluayA9IG50b2hsKCpwKyspOwotCWZhdHRyLT51aWQgPSBudG9obCgqcCsrKTsKLQlmYXR0ci0+Z2lkID0gbnRvaGwoKnArKyk7Ci0JZmF0dHItPnNpemUgPSBudG9obCgqcCsrKTsKLQlmYXR0ci0+ZHUubmZzMi5ibG9ja3NpemUgPSBudG9obCgqcCsrKTsKLQlyZGV2ID0gbnRvaGwoKnArKyk7Ci0JZmF0dHItPmR1Lm5mczIuYmxvY2tzID0gbnRvaGwoKnArKyk7Ci0JZmF0dHItPmZzaWQubWFqb3IgPSBudG9obCgqcCsrKTsKLQlmYXR0ci0+ZnNpZC5taW5vciA9IDA7Ci0JZmF0dHItPmZpbGVpZCA9IG50b2hsKCpwKyspOwotCXAgPSB4ZHJfZGVjb2RlX3RpbWUocCwgJmZhdHRyLT5hdGltZSk7Ci0JcCA9IHhkcl9kZWNvZGVfdGltZShwLCAmZmF0dHItPm10aW1lKTsKLQlwID0geGRyX2RlY29kZV90aW1lKHAsICZmYXR0ci0+Y3RpbWUpOwotCWZhdHRyLT52YWxpZCB8PSBORlNfQVRUUl9GQVRUUl9WMjsKLQlmYXR0ci0+cmRldiA9IG5ld19kZWNvZGVfZGV2KHJkZXYpOwotCWlmICh0eXBlID09IE5GQ0hSICYmIHJkZXYgPT0gTkZTMl9GSUZPX0RFVikgewotCQlmYXR0ci0+bW9kZSA9IChmYXR0ci0+bW9kZSAmIH5TX0lGTVQpIHwgU19JRklGTzsKLQkJZmF0dHItPnJkZXYgPSAwOwotCX0KLQlyZXR1cm4gcDsKLX0KLQotc3RhdGljIGlubGluZSBfX2JlMzIgKgoteGRyX2VuY29kZV9zYXR0cihfX2JlMzIgKnAsIHN0cnVjdCBpYXR0ciAqYXR0cikKLXsKLQljb25zdCBfX2JlMzIgbm90X3NldCA9IF9fY29uc3RhbnRfaHRvbmwoMHhGRkZGRkZGRik7Ci0KLQkqcCsrID0gKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSA/IGh0b25sKGF0dHItPmlhX21vZGUpIDogbm90X3NldDsKLQkqcCsrID0gKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQpID8gaHRvbmwoYXR0ci0+aWFfdWlkKSA6IG5vdF9zZXQ7Ci0JKnArKyA9IChhdHRyLT5pYV92YWxpZCAmIEFUVFJfR0lEKSA/IGh0b25sKGF0dHItPmlhX2dpZCkgOiBub3Rfc2V0OwotCSpwKysgPSAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpID8gaHRvbmwoYXR0ci0+aWFfc2l6ZSkgOiBub3Rfc2V0OwotCi0JaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9BVElNRV9TRVQpIHsKLQkJcCA9IHhkcl9lbmNvZGVfdGltZShwLCAmYXR0ci0+aWFfYXRpbWUpOwotCX0gZWxzZSBpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0FUSU1FKSB7Ci0JCXAgPSB4ZHJfZW5jb2RlX2N1cnJlbnRfc2VydmVyX3RpbWUocCwgJmF0dHItPmlhX2F0aW1lKTsKLQl9IGVsc2UgewotCQkqcCsrID0gbm90X3NldDsKLQkJKnArKyA9IG5vdF9zZXQ7Ci0JfQotCi0JaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NVElNRV9TRVQpIHsKLQkJcCA9IHhkcl9lbmNvZGVfdGltZShwLCAmYXR0ci0+aWFfbXRpbWUpOwotCX0gZWxzZSBpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01USU1FKSB7Ci0JCXAgPSB4ZHJfZW5jb2RlX2N1cnJlbnRfc2VydmVyX3RpbWUocCwgJmF0dHItPmlhX210aW1lKTsKLQl9IGVsc2UgewotCQkqcCsrID0gbm90X3NldDsJCi0JCSpwKysgPSBub3Rfc2V0OwotCX0KLSAgCXJldHVybiBwOwotfQogCiAvKgotICogTkZTIGVuY29kZSBmdW5jdGlvbnMKKyAqIFdoaWxlIGVuY29kaW5nIGFyZ3VtZW50cywgc2V0IHVwIHRoZSByZXBseSBidWZmZXIgaW4gYWR2YW5jZSB0bworICogcmVjZWl2ZSByZXBseSBkYXRhIGRpcmVjdGx5IGludG8gdGhlIHBhZ2UgY2FjaGUuCiAgKi8KLS8qCi0gKiBFbmNvZGUgZmlsZSBoYW5kbGUgYXJndW1lbnQKLSAqIEdFVEFUVFIsIFJFQURMSU5LLCBTVEFURlMKLSAqLwotc3RhdGljIGludAotbmZzX3hkcl9maGFuZGxlKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfZmggKmZoKQotewotCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgZmgpOwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEVuY29kZSBTRVRBVFRSIGFyZ3VtZW50cwotICovCi1zdGF0aWMgaW50Ci1uZnNfeGRyX3NhdHRyYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3NhdHRyYXJncyAqYXJncykKLXsKLQlwID0geGRyX2VuY29kZV9maGFuZGxlKHAsIGFyZ3MtPmZoKTsKLQlwID0geGRyX2VuY29kZV9zYXR0cihwLCBhcmdzLT5zYXR0cik7Ci0JcmVxLT5ycV9zbGVuID0geGRyX2FkanVzdF9pb3ZlYyhyZXEtPnJxX3N2ZWMsIHApOwotCXJldHVybiAwOwotfQotCi0vKgotICogRW5jb2RlIGRpcmVjdG9yeSBvcHMgYXJndW1lbnQKLSAqIExPT0tVUCwgUk1ESVIKLSAqLwotc3RhdGljIGludAotbmZzX3hkcl9kaXJvcGFyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19kaXJvcGFyZ3MgKmFyZ3MpCi17Ci0JcCA9IHhkcl9lbmNvZGVfZmhhbmRsZShwLCBhcmdzLT5maCk7Ci0JcCA9IHhkcl9lbmNvZGVfYXJyYXkocCwgYXJncy0+bmFtZSwgYXJncy0+bGVuKTsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBFbmNvZGUgUkVNT1ZFIGFyZ3VtZW50Ci0gKi8KLXN0YXRpYyBpbnQKLW5mc194ZHJfcmVtb3ZlYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBjb25zdCBzdHJ1Y3QgbmZzX3JlbW92ZWFyZ3MgKmFyZ3MpCi17Ci0JcCA9IHhkcl9lbmNvZGVfZmhhbmRsZShwLCBhcmdzLT5maCk7Ci0JcCA9IHhkcl9lbmNvZGVfYXJyYXkocCwgYXJncy0+bmFtZS5uYW1lLCBhcmdzLT5uYW1lLmxlbik7Ci0JcmVxLT5ycV9zbGVuID0geGRyX2FkanVzdF9pb3ZlYyhyZXEtPnJxX3N2ZWMsIHApOwotCXJldHVybiAwOwotfQotCi0vKgotICogQXJndW1lbnRzIHRvIGEgUkVBRCBjYWxsLiBTaW5jZSB3ZSByZWFkIGRhdGEgZGlyZWN0bHkgaW50byB0aGUgcGFnZQotICogY2FjaGUsIHdlIGFsc28gc2V0IHVwIHRoZSByZXBseSBpb3ZlYyBoZXJlIHNvIHRoYXQgaW92WzFdIHBvaW50cwotICogZXhhY3RseSB0byB0aGUgcGFnZSB3ZSB3YW50IHRvIGZldGNoLgotICovCi1zdGF0aWMgaW50Ci1uZnNfeGRyX3JlYWRhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfcmVhZGFyZ3MgKmFyZ3MpCitzdGF0aWMgdm9pZCBwcmVwYXJlX3JlcGx5X2J1ZmZlcihzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJCQkgdW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCBsZW4sCisJCQkJIHVuc2lnbmVkIGludCBidWZzaXplKQogewogCXN0cnVjdCBycGNfYXV0aAkqYXV0aCA9IHJlcS0+cnFfY3JlZC0+Y3JfYXV0aDsKIAl1bnNpZ25lZCBpbnQgcmVwbGVuOwotCXUzMiBvZmZzZXQgPSAodTMyKWFyZ3MtPm9mZnNldDsKLQl1MzIgY291bnQgPSBhcmdzLT5jb3VudDsKIAotCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgYXJncy0+ZmgpOwotCSpwKysgPSBodG9ubChvZmZzZXQpOwotCSpwKysgPSBodG9ubChjb3VudCk7Ci0JKnArKyA9IGh0b25sKGNvdW50KTsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0KLQkvKiBJbmxpbmUgdGhlIHBhZ2UgYXJyYXkgKi8KLQlyZXBsZW4gPSAoUlBDX1JFUEhEUlNJWkUgKyBhdXRoLT5hdV9yc2xhY2sgKyBORlNfcmVhZHJlc19zeikgPDwgMjsKLQl4ZHJfaW5saW5lX3BhZ2VzKCZyZXEtPnJxX3Jjdl9idWYsIHJlcGxlbiwKLQkJCSBhcmdzLT5wYWdlcywgYXJncy0+cGdiYXNlLCBjb3VudCk7Ci0JcmVxLT5ycV9yY3ZfYnVmLmZsYWdzIHw9IFhEUkJVRl9SRUFEOwotCXJldHVybiAwOworCXJlcGxlbiA9IFJQQ19SRVBIRFJTSVpFICsgYXV0aC0+YXVfcnNsYWNrICsgYnVmc2l6ZTsKKwl4ZHJfaW5saW5lX3BhZ2VzKCZyZXEtPnJxX3Jjdl9idWYsIHJlcGxlbiA8PCAyLCBwYWdlcywgYmFzZSwgbGVuKTsKIH0KIAogLyoKLSAqIERlY29kZSBSRUFEIHJlcGx5CisgKiBIYW5kbGUgZGVjb2RlIGJ1ZmZlciBvdmVyZmxvd3Mgb3V0LW9mLWxpbmUuCiAgKi8KLXN0YXRpYyBpbnQKLW5mc194ZHJfcmVhZHJlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3JlYWRyZXMgKnJlcykKLXsKLQlzdHJ1Y3Qga3ZlYyAqaW92ID0gcmVxLT5ycV9yY3ZfYnVmLmhlYWQ7Ci0Jc2l6ZV90IGhkcmxlbjsKLQl1MzIgY291bnQsIHJlY3ZkOwotCWludCBzdGF0dXM7Ci0KLQlpZiAoKHN0YXR1cyA9IG50b2hsKCpwKyspKSkKLQkJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Ci0JcCA9IHhkcl9kZWNvZGVfZmF0dHIocCwgcmVzLT5mYXR0cik7Ci0KLQljb3VudCA9IG50b2hsKCpwKyspOwotCXJlcy0+ZW9mID0gMDsKLQloZHJsZW4gPSAodTggKikgcCAtICh1OCAqKSBpb3YtPmlvdl9iYXNlOwotCWlmIChpb3YtPmlvdl9sZW4gPCBoZHJsZW4pIHsKLQkJZHByaW50aygiTkZTOiBSRUFEIHJlcGx5IGhlYWRlciBvdmVyZmxvd2VkOiIKLQkJCQkibGVuZ3RoICVadSA+ICVadVxuIiwgaGRybGVuLCBpb3YtPmlvdl9sZW4pOwotCQlyZXR1cm4gLWVycm5vX05GU0VSUl9JTzsKLQl9IGVsc2UgaWYgKGlvdi0+aW92X2xlbiAhPSBoZHJsZW4pIHsKLQkJZHByaW50aygiTkZTOiBSRUFEIGhlYWRlciBpcyBzaG9ydC4gaW92ZWMgd2lsbCBiZSBzaGlmdGVkLlxuIik7Ci0JCXhkcl9zaGlmdF9idWYoJnJlcS0+cnFfcmN2X2J1ZiwgaW92LT5pb3ZfbGVuIC0gaGRybGVuKTsKLQl9Ci0KLQlyZWN2ZCA9IHJlcS0+cnFfcmN2X2J1Zi5sZW4gLSBoZHJsZW47Ci0JaWYgKGNvdW50ID4gcmVjdmQpIHsKLQkJZHByaW50aygiTkZTOiBzZXJ2ZXIgY2hlYXRpbmcgaW4gcmVhZCByZXBseTogIgotCQkJImNvdW50ICV1ID4gcmVjdmQgJXVcbiIsIGNvdW50LCByZWN2ZCk7Ci0JCWNvdW50ID0gcmVjdmQ7Ci0JfQotCi0JZHByaW50aygiUlBDOiAgICAgIHJlYWRyZXMgT0sgY291bnQgJXVcbiIsIGNvdW50KTsKLQlpZiAoY291bnQgPCByZXMtPmNvdW50KQotCQlyZXMtPmNvdW50ID0gY291bnQ7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLQotLyoKLSAqIFdyaXRlIGFyZ3VtZW50cy4gU3BsaWNlIHRoZSBidWZmZXIgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBpb3ZlYy4KLSAqLwotc3RhdGljIGludAotbmZzX3hkcl93cml0ZWFyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mc193cml0ZWFyZ3MgKmFyZ3MpCi17Ci0Jc3RydWN0IHhkcl9idWYgKnNuZGJ1ZiA9ICZyZXEtPnJxX3NuZF9idWY7Ci0JdTMyIG9mZnNldCA9ICh1MzIpYXJncy0+b2Zmc2V0OwotCXUzMiBjb3VudCA9IGFyZ3MtPmNvdW50OwotCi0JcCA9IHhkcl9lbmNvZGVfZmhhbmRsZShwLCBhcmdzLT5maCk7Ci0JKnArKyA9IGh0b25sKG9mZnNldCk7Ci0JKnArKyA9IGh0b25sKG9mZnNldCk7Ci0JKnArKyA9IGh0b25sKGNvdW50KTsKLQkqcCsrID0gaHRvbmwoY291bnQpOwotCXNuZGJ1Zi0+bGVuID0geGRyX2FkanVzdF9pb3ZlYyhzbmRidWYtPmhlYWQsIHApOwotCi0JLyogQ29weSB0aGUgcGFnZSBhcnJheSAqLwotCXhkcl9lbmNvZGVfcGFnZXMoc25kYnVmLCBhcmdzLT5wYWdlcywgYXJncy0+cGdiYXNlLCBjb3VudCk7Ci0Jc25kYnVmLT5mbGFncyB8PSBYRFJCVUZfV1JJVEU7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBFbmNvZGUgY3JlYXRlIGFyZ3VtZW50cwotICogQ1JFQVRFLCBNS0RJUgotICovCi1zdGF0aWMgaW50Ci1uZnNfeGRyX2NyZWF0ZWFyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19jcmVhdGVhcmdzICphcmdzKQotewotCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgYXJncy0+ZmgpOwotCXAgPSB4ZHJfZW5jb2RlX2FycmF5KHAsIGFyZ3MtPm5hbWUsIGFyZ3MtPmxlbik7Ci0JcCA9IHhkcl9lbmNvZGVfc2F0dHIocCwgYXJncy0+c2F0dHIpOwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEVuY29kZSBSRU5BTUUgYXJndW1lbnRzCi0gKi8KLXN0YXRpYyBpbnQKLW5mc194ZHJfcmVuYW1lYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3JlbmFtZWFyZ3MgKmFyZ3MpCi17Ci0JcCA9IHhkcl9lbmNvZGVfZmhhbmRsZShwLCBhcmdzLT5vbGRfZGlyKTsKLQlwID0geGRyX2VuY29kZV9hcnJheShwLCBhcmdzLT5vbGRfbmFtZS0+bmFtZSwgYXJncy0+b2xkX25hbWUtPmxlbik7Ci0JcCA9IHhkcl9lbmNvZGVfZmhhbmRsZShwLCBhcmdzLT5uZXdfZGlyKTsKLQlwID0geGRyX2VuY29kZV9hcnJheShwLCBhcmdzLT5uZXdfbmFtZS0+bmFtZSwgYXJncy0+bmV3X25hbWUtPmxlbik7Ci0JcmVxLT5ycV9zbGVuID0geGRyX2FkanVzdF9pb3ZlYyhyZXEtPnJxX3N2ZWMsIHApOwotCXJldHVybiAwOwotfQotCi0vKgotICogRW5jb2RlIExJTksgYXJndW1lbnRzCi0gKi8KLXN0YXRpYyBpbnQKLW5mc194ZHJfbGlua2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19saW5rYXJncyAqYXJncykKLXsKLQlwID0geGRyX2VuY29kZV9maGFuZGxlKHAsIGFyZ3MtPmZyb21maCk7Ci0JcCA9IHhkcl9lbmNvZGVfZmhhbmRsZShwLCBhcmdzLT50b2ZoKTsKLQlwID0geGRyX2VuY29kZV9hcnJheShwLCBhcmdzLT50b25hbWUsIGFyZ3MtPnRvbGVuKTsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBFbmNvZGUgU1lNTElOSyBhcmd1bWVudHMKLSAqLwotc3RhdGljIGludAotbmZzX3hkcl9zeW1saW5rYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3N5bWxpbmthcmdzICphcmdzKQotewotCXN0cnVjdCB4ZHJfYnVmICpzbmRidWYgPSAmcmVxLT5ycV9zbmRfYnVmOwotCXNpemVfdCBwYWQ7Ci0KLQlwID0geGRyX2VuY29kZV9maGFuZGxlKHAsIGFyZ3MtPmZyb21maCk7Ci0JcCA9IHhkcl9lbmNvZGVfYXJyYXkocCwgYXJncy0+ZnJvbW5hbWUsIGFyZ3MtPmZyb21sZW4pOwotCSpwKysgPSBodG9ubChhcmdzLT5wYXRobGVuKTsKLQlzbmRidWYtPmxlbiA9IHhkcl9hZGp1c3RfaW92ZWMoc25kYnVmLT5oZWFkLCBwKTsKLQotCXhkcl9lbmNvZGVfcGFnZXMoc25kYnVmLCBhcmdzLT5wYWdlcywgMCwgYXJncy0+cGF0aGxlbik7Ci0KLQkvKgotCSAqIHhkcl9lbmNvZGVfcGFnZXMgbWF5IGhhdmUgYWRkZWQgYSBmZXcgYnl0ZXMgdG8gZW5zdXJlIHRoZQotCSAqIHBhdGhuYW1lIGVuZHMgb24gYSA0LWJ5dGUgYm91bmRhcnkuICBTdGFydCBlbmNvZGluZyB0aGUKLQkgKiBhdHRyaWJ1dGVzIGFmdGVyIHRoZSBwYWQgYnl0ZXMuCi0JICovCi0JcGFkID0gc25kYnVmLT50YWlsLT5pb3ZfbGVuOwotCWlmIChwYWQgPiAwKQotCQlwKys7Ci0JcCA9IHhkcl9lbmNvZGVfc2F0dHIocCwgYXJncy0+c2F0dHIpOwotCXNuZGJ1Zi0+bGVuICs9IHhkcl9hZGp1c3RfaW92ZWMoc25kYnVmLT50YWlsLCBwKSAtIHBhZDsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEVuY29kZSBhcmd1bWVudHMgdG8gcmVhZGRpciBjYWxsCi0gKi8KLXN0YXRpYyBpbnQKLW5mc194ZHJfcmVhZGRpcmFyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19yZWFkZGlyYXJncyAqYXJncykKLXsKLQlzdHJ1Y3QgcnBjX2F1dGgJKmF1dGggPSByZXEtPnJxX2NyZWQtPmNyX2F1dGg7Ci0JdW5zaWduZWQgaW50IHJlcGxlbjsKLQl1MzIgY291bnQgPSBhcmdzLT5jb3VudDsKLQotCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgYXJncy0+ZmgpOwotCSpwKysgPSBodG9ubChhcmdzLT5jb29raWUpOwotCSpwKysgPSBodG9ubChjb3VudCk7IC8qIHNlZSBhYm92ZSAqLwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKLQotCS8qIElubGluZSB0aGUgcGFnZSBhcnJheSAqLwotCXJlcGxlbiA9IChSUENfUkVQSERSU0laRSArIGF1dGgtPmF1X3JzbGFjayArIE5GU19yZWFkZGlycmVzX3N6KSA8PCAyOwotCXhkcl9pbmxpbmVfcGFnZXMoJnJlcS0+cnFfcmN2X2J1ZiwgcmVwbGVuLCBhcmdzLT5wYWdlcywgMCwgY291bnQpOwotCXJldHVybiAwOwotfQotCi0vKgotICogRGVjb2RlIHRoZSByZXN1bHQgb2YgYSByZWFkZGlyIGNhbGwuCi0gKiBXZSdyZSBub3QgcmVhbGx5IGRlY29kaW5nIGFueW1vcmUsIHdlIGp1c3QgbGVhdmUgdGhlIGJ1ZmZlciB1bnRvdWNoZWQKLSAqIGFuZCBvbmx5IGNoZWNrIHRoYXQgaXQgaXMgc3ludGFjdGljYWxseSBjb3JyZWN0LgotICogVGhlIHJlYWwgZGVjb2RpbmcgaGFwcGVucyBpbiBuZnNfZGVjb2RlX2VudHJ5IGJlbG93LCBjYWxsZWQgZGlyZWN0bHkKLSAqIGZyb20gbmZzX3JlYWRkaXIgZm9yIGVhY2ggZW50cnkuCi0gKi8KLXN0YXRpYyBpbnQKLW5mc194ZHJfcmVhZGRpcnJlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCB2b2lkICpkdW1teSkKLXsKLQlzdHJ1Y3QgeGRyX2J1ZiAqcmN2YnVmID0gJnJlcS0+cnFfcmN2X2J1ZjsKLQlzdHJ1Y3Qga3ZlYyAqaW92ID0gcmN2YnVmLT5oZWFkOwotCXN0cnVjdCBwYWdlICoqcGFnZTsKLQlzaXplX3QgaGRybGVuOwotCXVuc2lnbmVkIGludCBwZ2xlbiwgcmVjdmQ7Ci0JaW50IHN0YXR1czsKLQotCWlmICgoc3RhdHVzID0gbnRvaGwoKnArKykpKQotCQlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKLQotCWhkcmxlbiA9ICh1OCAqKSBwIC0gKHU4ICopIGlvdi0+aW92X2Jhc2U7Ci0JaWYgKGlvdi0+aW92X2xlbiA8IGhkcmxlbikgewotCQlkcHJpbnRrKCJORlM6IFJFQURESVIgcmVwbHkgaGVhZGVyIG92ZXJmbG93ZWQ6IgotCQkJCSJsZW5ndGggJVp1ID4gJVp1XG4iLCBoZHJsZW4sIGlvdi0+aW92X2xlbik7Ci0JCXJldHVybiAtZXJybm9fTkZTRVJSX0lPOwotCX0gZWxzZSBpZiAoaW92LT5pb3ZfbGVuICE9IGhkcmxlbikgewotCQlkcHJpbnRrKCJORlM6IFJFQURESVIgaGVhZGVyIGlzIHNob3J0LiBpb3ZlYyB3aWxsIGJlIHNoaWZ0ZWQuXG4iKTsKLQkJeGRyX3NoaWZ0X2J1ZihyY3ZidWYsIGlvdi0+aW92X2xlbiAtIGhkcmxlbik7Ci0JfQotCi0JcGdsZW4gPSByY3ZidWYtPnBhZ2VfbGVuOwotCXJlY3ZkID0gcmN2YnVmLT5sZW4gLSBoZHJsZW47Ci0JaWYgKHBnbGVuID4gcmVjdmQpCi0JCXBnbGVuID0gcmVjdmQ7Ci0JcGFnZSA9IHJjdmJ1Zi0+cGFnZXM7Ci0JcmV0dXJuIHBnbGVuOwotfQotCiBzdGF0aWMgdm9pZCBwcmludF9vdmVyZmxvd19tc2coY29uc3QgY2hhciAqZnVuYywgY29uc3Qgc3RydWN0IHhkcl9zdHJlYW0gKnhkcikKIHsKLQlkcHJpbnRrKCJuZnM6ICVzOiBwcmVtYXR1cmVseSBoaXQgZW5kIG9mIHJlY2VpdmUgYnVmZmVyLiAiCisJZHByaW50aygiTkZTOiAlcyBwcmVtYXR1cmVseSBoaXQgdGhlIGVuZCBvZiBvdXIgcmVjZWl2ZSBidWZmZXIuICIKIAkJIlJlbWFpbmluZyBidWZmZXIgbGVuZ3RoIGlzICV0dSB3b3Jkcy5cbiIsCiAJCWZ1bmMsIHhkci0+ZW5kIC0geGRyLT5wKTsKIH0KIAotX19iZTMyICoKLW5mc19kZWNvZGVfZGlyZW50KHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnNfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBpbnQgcGx1cykKKworLyoKKyAqIEVuY29kZS9kZWNvZGUgTkZTdjIgYmFzaWMgZGF0YSB0eXBlcworICoKKyAqIEJhc2ljIE5GU3YyIGRhdGEgdHlwZXMgYXJlIGRlZmluZWQgaW4gc2VjdGlvbiAyLjMgb2YgUkZDIDEwOTQ6CisgKiAiTkZTOiBOZXR3b3JrIEZpbGUgU3lzdGVtIFByb3RvY29sIFNwZWNpZmljYXRpb24iLgorICoKKyAqIE5vdCBhbGwgYmFzaWMgZGF0YSB0eXBlcyBoYXZlIHRoZWlyIG93biBlbmNvZGluZyBhbmQgZGVjb2RpbmcKKyAqIGZ1bmN0aW9ucy4gIEZvciBydW4tdGltZSBlZmZpY2llbmN5LCBzb21lIGRhdGEgdHlwZXMgYXJlIGVuY29kZWQKKyAqIG9yIGRlY29kZWQgaW5saW5lLgorICovCisKKy8qCisgKgl0eXBlZGVmIG9wYXF1ZQluZnNkYXRhPD47CisgKi8KK3N0YXRpYyBpbnQgZGVjb2RlX25mc2RhdGEoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19yZWFkcmVzICpyZXN1bHQpCit7CisJdTMyIHJlY3ZkLCBjb3VudDsKKwlzaXplX3QgaGRybGVuOworCV9fYmUzMiAqcDsKKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwljb3VudCA9IGJlMzJfdG9fY3B1cChwKTsKKwloZHJsZW4gPSAodTggKil4ZHItPnAgLSAodTggKil4ZHItPmlvdi0+aW92X2Jhc2U7CisJcmVjdmQgPSB4ZHItPmJ1Zi0+bGVuIC0gaGRybGVuOworCWlmICh1bmxpa2VseShjb3VudCA+IHJlY3ZkKSkKKwkJZ290byBvdXRfY2hlYXRpbmc7CitvdXQ6CisJeGRyX3JlYWRfcGFnZXMoeGRyLCBjb3VudCk7CisJcmVzdWx0LT5lb2YgPSAwOwkvKiBORlN2MiBkb2VzIG5vdCBwYXNzIEVPRiBmbGFnIG9uIHRoZSB3aXJlLiAqLworCXJlc3VsdC0+Y291bnQgPSBjb3VudDsKKwlyZXR1cm4gY291bnQ7CitvdXRfY2hlYXRpbmc6CisJZHByaW50aygiTkZTOiBzZXJ2ZXIgY2hlYXRpbmcgaW4gcmVhZCByZXN1bHQ6ICIKKwkJImNvdW50ICV1ID4gcmVjdmQgJXVcbiIsIGNvdW50LCByZWN2ZCk7CisJY291bnQgPSByZWN2ZDsKKwlnb3RvIG91dDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qCisgKgllbnVtIHN0YXQgeworICoJCU5GU19PSyA9IDAsCisgKgkJTkZTRVJSX1BFUk0gPSAxLAorICoJCU5GU0VSUl9OT0VOVCA9IDIsCisgKgkJTkZTRVJSX0lPID0gNSwKKyAqCQlORlNFUlJfTlhJTyA9IDYsCisgKgkJTkZTRVJSX0FDQ0VTID0gMTMsCisgKgkJTkZTRVJSX0VYSVNUID0gMTcsCisgKgkJTkZTRVJSX05PREVWID0gMTksCisgKgkJTkZTRVJSX05PVERJUiA9IDIwLAorICoJCU5GU0VSUl9JU0RJUiA9IDIxLAorICoJCU5GU0VSUl9GQklHID0gMjcsCisgKgkJTkZTRVJSX05PU1BDID0gMjgsCisgKgkJTkZTRVJSX1JPRlMgPSAzMCwKKyAqCQlORlNFUlJfTkFNRVRPT0xPTkcgPSA2MywKKyAqCQlORlNFUlJfTk9URU1QVFkgPSA2NiwKKyAqCQlORlNFUlJfRFFVT1QgPSA2OSwKKyAqCQlORlNFUlJfU1RBTEUgPSA3MCwKKyAqCQlORlNFUlJfV0ZMVVNIID0gOTkKKyAqCX07CisgKi8KK3N0YXRpYyBpbnQgZGVjb2RlX3N0YXQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgZW51bSBuZnNfc3RhdCAqc3RhdHVzKQogewogCV9fYmUzMiAqcDsKKwogCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOwotCWlmICh1bmxpa2VseSghcCkpCisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCiAJCWdvdG8gb3V0X292ZXJmbG93OwotCWlmICghbnRvaGwoKnArKykpIHsKLQkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7Ci0JCWlmICh1bmxpa2VseSghcCkpCi0JCQlnb3RvIG91dF9vdmVyZmxvdzsKLQkJaWYgKCFudG9obCgqcCsrKSkKLQkJCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOwotCQllbnRyeS0+ZW9mID0gMTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVCQURDT09LSUUpOworCSpzdGF0dXMgPSBiZTMyX3RvX2NwdXAocCk7CisJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOworfQorCisvKgorICogMi4zLjIuICBmdHlwZQorICoKKyAqCWVudW0gZnR5cGUgeworICoJCU5GTk9OID0gMCwKKyAqCQlORlJFRyA9IDEsCisgKgkJTkZESVIgPSAyLAorICoJCU5GQkxLID0gMywKKyAqCQlORkNIUiA9IDQsCisgKgkJTkZMTksgPSA1CisgKgl9OworICoKKyAqLworc3RhdGljIF9fYmUzMiAqeGRyX2RlY29kZV9mdHlwZShfX2JlMzIgKnAsIHUzMiAqdHlwZSkKK3sKKwkqdHlwZSA9IGJlMzJfdG9fY3B1cChwKyspOworCWlmICh1bmxpa2VseSgqdHlwZSA+IE5GMkZJRk8pKQorCQkqdHlwZSA9IE5GQkFEOworCXJldHVybiBwOworfQorCisvKgorICogMi4zLjMuICBmaGFuZGxlCisgKgorICoJdHlwZWRlZiBvcGFxdWUgZmhhbmRsZVtGSFNJWkVdOworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfZmhhbmRsZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCBzdHJ1Y3QgbmZzX2ZoICpmaCkKK3sKKwlfX2JlMzIgKnA7CisKKwlCVUdfT04oZmgtPnNpemUgIT0gTkZTMl9GSFNJWkUpOworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIE5GUzJfRkhTSVpFKTsKKwltZW1jcHkocCwgZmgtPmRhdGEsIE5GUzJfRkhTSVpFKTsKK30KKworc3RhdGljIGludCBkZWNvZGVfZmhhbmRsZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzX2ZoICpmaCkKK3sKKwlfX2JlMzIgKnA7CisKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBORlMyX0ZIU0laRSk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWZoLT5zaXplID0gTkZTMl9GSFNJWkU7CisJbWVtY3B5KGZoLT5kYXRhLCBwLCBORlMyX0ZIU0laRSk7CisJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOworfQorCisvKgorICogMi4zLjQuICB0aW1ldmFsCisgKgorICoJc3RydWN0IHRpbWV2YWwgeworICoJCXVuc2lnbmVkIGludCBzZWNvbmRzOworICoJCXVuc2lnbmVkIGludCB1c2Vjb25kczsKKyAqCX07CisgKi8KK3N0YXRpYyBfX2JlMzIgKnhkcl9lbmNvZGVfdGltZShfX2JlMzIgKnAsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdGltZXApCit7CisJKnArKyA9IGNwdV90b19iZTMyKHRpbWVwLT50dl9zZWMpOworCWlmICh0aW1lcC0+dHZfbnNlYyAhPSAwKQorCQkqcCsrID0gY3B1X3RvX2JlMzIodGltZXAtPnR2X25zZWMgLyBOU0VDX1BFUl9VU0VDKTsKKwllbHNlCisJCSpwKysgPSBjcHVfdG9fYmUzMigwKTsKKwlyZXR1cm4gcDsKK30KKworLyoKKyAqIFBhc3NpbmcgdGhlIGludmFsaWQgdmFsdWUgdXNlY29uZHM9MTAwMDAwMCBpcyBhIFN1biBjb252ZW50aW9uIGZvcgorICogInNldCB0byBjdXJyZW50IHNlcnZlciB0aW1lIi4gIEl0J3MgbmVlZGVkIHRvIG1ha2UgcGVybWlzc2lvbnMgY2hlY2tzCisgKiBmb3IgdGhlICJ0b3VjaCIgcHJvZ3JhbSBhY3Jvc3MgdjIgbW91bnRzIHRvIFNvbGFyaXMgYW5kIElyaXggc2VydmVycworICogd29yayBjb3JyZWN0bHkuICBTZWUgZGVzY3JpcHRpb24gb2Ygc2F0dHIgaW4gc2VjdGlvbiA2LjEgb2YgIk5GUworICogSWxsdXN0cmF0ZWQiIGJ5IEJyZW50IENhbGxhZ2hhbiwgQWRkaXNvbi1XZXNsZXksIElTQk4gMC0yMDEtMzI3NTAtNS4KKyAqLworc3RhdGljIF9fYmUzMiAqeGRyX2VuY29kZV9jdXJyZW50X3NlcnZlcl90aW1lKF9fYmUzMiAqcCwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0aW1lcCkKK3sKKwkqcCsrID0gY3B1X3RvX2JlMzIodGltZXAtPnR2X3NlYyk7CisJKnArKyA9IGNwdV90b19iZTMyKDEwMDAwMDApOworCXJldHVybiBwOworfQorCitzdGF0aWMgX19iZTMyICp4ZHJfZGVjb2RlX3RpbWUoX19iZTMyICpwLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVwKQoreworCXRpbWVwLT50dl9zZWMgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwl0aW1lcC0+dHZfbnNlYyA9IGJlMzJfdG9fY3B1cChwKyspICogTlNFQ19QRVJfVVNFQzsKKwlyZXR1cm4gcDsKK30KKworLyoKKyAqIDIuMy41LiAgZmF0dHIKKyAqCisgKglzdHJ1Y3QgZmF0dHIgeworICoJCWZ0eXBlCQl0eXBlOworICoJCXVuc2lnbmVkIGludAltb2RlOworICoJCXVuc2lnbmVkIGludAlubGluazsKKyAqCQl1bnNpZ25lZCBpbnQJdWlkOworICoJCXVuc2lnbmVkIGludAlnaWQ7CisgKgkJdW5zaWduZWQgaW50CXNpemU7CisgKgkJdW5zaWduZWQgaW50CWJsb2Nrc2l6ZTsKKyAqCQl1bnNpZ25lZCBpbnQJcmRldjsKKyAqCQl1bnNpZ25lZCBpbnQJYmxvY2tzOworICoJCXVuc2lnbmVkIGludAlmc2lkOworICoJCXVuc2lnbmVkIGludAlmaWxlaWQ7CisgKgkJdGltZXZhbAkJYXRpbWU7CisgKgkJdGltZXZhbAkJbXRpbWU7CisgKgkJdGltZXZhbAkJY3RpbWU7CisgKgl9OworICoKKyAqLworc3RhdGljIGludCBkZWNvZGVfZmF0dHIoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCit7CisJdTMyIHJkZXYsIHR5cGU7CisJX19iZTMyICpwOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgTkZTX2ZhdHRyX3N6IDw8IDIpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKworCWZhdHRyLT52YWxpZCB8PSBORlNfQVRUUl9GQVRUUl9WMjsKKworCXAgPSB4ZHJfZGVjb2RlX2Z0eXBlKHAsICZ0eXBlKTsKKworCWZhdHRyLT5tb2RlID0gYmUzMl90b19jcHVwKHArKyk7CisJZmF0dHItPm5saW5rID0gYmUzMl90b19jcHVwKHArKyk7CisJZmF0dHItPnVpZCA9IGJlMzJfdG9fY3B1cChwKyspOworCWZhdHRyLT5naWQgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwlmYXR0ci0+c2l6ZSA9IGJlMzJfdG9fY3B1cChwKyspOworCWZhdHRyLT5kdS5uZnMyLmJsb2Nrc2l6ZSA9IGJlMzJfdG9fY3B1cChwKyspOworCisJcmRldiA9IGJlMzJfdG9fY3B1cChwKyspOworCWZhdHRyLT5yZGV2ID0gbmV3X2RlY29kZV9kZXYocmRldik7CisJaWYgKHR5cGUgPT0gKHUzMilORkNIUiAmJiByZGV2ID09ICh1MzIpTkZTMl9GSUZPX0RFVikgeworCQlmYXR0ci0+bW9kZSA9IChmYXR0ci0+bW9kZSAmIH5TX0lGTVQpIHwgU19JRklGTzsKKwkJZmF0dHItPnJkZXYgPSAwOwogCX0KIAotCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDgpOwotCWlmICh1bmxpa2VseSghcCkpCi0JCWdvdG8gb3V0X292ZXJmbG93OworCWZhdHRyLT5kdS5uZnMyLmJsb2NrcyA9IGJlMzJfdG9fY3B1cChwKyspOworCWZhdHRyLT5mc2lkLm1ham9yID0gYmUzMl90b19jcHVwKHArKyk7CisJZmF0dHItPmZzaWQubWlub3IgPSAwOworCWZhdHRyLT5maWxlaWQgPSBiZTMyX3RvX2NwdXAocCsrKTsKIAotCWVudHJ5LT5pbm8JICA9IG50b2hsKCpwKyspOwotCWVudHJ5LT5sZW4JICA9IG50b2hsKCpwKyspOworCXAgPSB4ZHJfZGVjb2RlX3RpbWUocCwgJmZhdHRyLT5hdGltZSk7CisJcCA9IHhkcl9kZWNvZGVfdGltZShwLCAmZmF0dHItPm10aW1lKTsKKwl4ZHJfZGVjb2RlX3RpbWUocCwgJmZhdHRyLT5jdGltZSk7CisJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOworfQogCi0JcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgZW50cnktPmxlbiArIDQpOwotCWlmICh1bmxpa2VseSghcCkpCisvKgorICogMi4zLjYuICBzYXR0cgorICoKKyAqCXN0cnVjdCBzYXR0ciB7CisgKgkJdW5zaWduZWQgaW50CW1vZGU7CisgKgkJdW5zaWduZWQgaW50CXVpZDsKKyAqCQl1bnNpZ25lZCBpbnQJZ2lkOworICoJCXVuc2lnbmVkIGludAlzaXplOworICoJCXRpbWV2YWwJCWF0aW1lOworICoJCXRpbWV2YWwJCW10aW1lOworICoJfTsKKyAqLworCisjZGVmaW5lIE5GUzJfU0FUVFJfTk9UX1NFVAkoMHhmZmZmZmZmZikKKworc3RhdGljIF9fYmUzMiAqeGRyX3RpbWVfbm90X3NldChfX2JlMzIgKnApCit7CisJKnArKyA9IGNwdV90b19iZTMyKE5GUzJfU0FUVFJfTk9UX1NFVCk7CisJKnArKyA9IGNwdV90b19iZTMyKE5GUzJfU0FUVFJfTk9UX1NFVCk7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZV9zYXR0cihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCit7CisJX19iZTMyICpwOworCisJcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgTkZTX3NhdHRyX3N6IDw8IDIpOworCisJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKQorCQkqcCsrID0gY3B1X3RvX2JlMzIoYXR0ci0+aWFfbW9kZSk7CisJZWxzZQorCQkqcCsrID0gY3B1X3RvX2JlMzIoTkZTMl9TQVRUUl9OT1RfU0VUKTsKKwlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1VJRCkKKwkJKnArKyA9IGNwdV90b19iZTMyKGF0dHItPmlhX3VpZCk7CisJZWxzZQorCQkqcCsrID0gY3B1X3RvX2JlMzIoTkZTMl9TQVRUUl9OT1RfU0VUKTsKKwlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCkKKwkJKnArKyA9IGNwdV90b19iZTMyKGF0dHItPmlhX2dpZCk7CisJZWxzZQorCQkqcCsrID0gY3B1X3RvX2JlMzIoTkZTMl9TQVRUUl9OT1RfU0VUKTsKKwlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpCisJCSpwKysgPSBjcHVfdG9fYmUzMigodTMyKWF0dHItPmlhX3NpemUpOworCWVsc2UKKwkJKnArKyA9IGNwdV90b19iZTMyKE5GUzJfU0FUVFJfTk9UX1NFVCk7CisKKwlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0FUSU1FX1NFVCkKKwkJcCA9IHhkcl9lbmNvZGVfdGltZShwLCAmYXR0ci0+aWFfYXRpbWUpOworCWVsc2UgaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9BVElNRSkKKwkJcCA9IHhkcl9lbmNvZGVfY3VycmVudF9zZXJ2ZXJfdGltZShwLCAmYXR0ci0+aWFfYXRpbWUpOworCWVsc2UKKwkJcCA9IHhkcl90aW1lX25vdF9zZXQocCk7CisJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NVElNRV9TRVQpCisJCXhkcl9lbmNvZGVfdGltZShwLCAmYXR0ci0+aWFfbXRpbWUpOworCWVsc2UgaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NVElNRSkKKwkJeGRyX2VuY29kZV9jdXJyZW50X3NlcnZlcl90aW1lKHAsICZhdHRyLT5pYV9tdGltZSk7CisJZWxzZQorCQl4ZHJfdGltZV9ub3Rfc2V0KHApOworfQorCisvKgorICogMi4zLjcuICBmaWxlbmFtZQorICoKKyAqCXR5cGVkZWYgc3RyaW5nIGZpbGVuYW1lPE1BWE5BTUxFTj47CisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV9maWxlbmFtZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBsZW5ndGgpCit7CisJX19iZTMyICpwOworCisJQlVHX09OKGxlbmd0aCA+IE5GUzJfTUFYTkFNTEVOKTsKKwlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA0ICsgbGVuZ3RoKTsKKwl4ZHJfZW5jb2RlX29wYXF1ZShwLCBuYW1lLCBsZW5ndGgpOworfQorCitzdGF0aWMgaW50IGRlY29kZV9maWxlbmFtZV9pbmxpbmUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgIGNvbnN0IGNoYXIgKipuYW1lLCB1MzIgKmxlbmd0aCkKK3sKKwlfX2JlMzIgKnA7CisJdTMyIGNvdW50OworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCiAJCWdvdG8gb3V0X292ZXJmbG93OwotCWVudHJ5LT5uYW1lCSAgPSAoY29uc3QgY2hhciAqKSBwOwotCXAJCSArPSBYRFJfUVVBRExFTihlbnRyeS0+bGVuKTsKLQllbnRyeS0+cHJldl9jb29raWUJICA9IGVudHJ5LT5jb29raWU7Ci0JZW50cnktPmNvb2tpZQkgID0gbnRvaGwoKnArKyk7CisJY291bnQgPSBiZTMyX3RvX2NwdXAocCk7CisJaWYgKGNvdW50ID4gTkZTM19NQVhOQU1MRU4pCisJCWdvdG8gb3V0X25hbWV0b29sb25nOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIGNvdW50KTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJKm5hbWUgPSAoY29uc3QgY2hhciAqKXA7CisJKmxlbmd0aCA9IGNvdW50OworCXJldHVybiAwOworb3V0X25hbWV0b29sb25nOgorCWRwcmludGsoIk5GUzogcmV0dXJuZWQgZmlsZW5hbWUgdG9vIGxvbmc6ICV1XG4iLCBjb3VudCk7CisJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOworfQorCisvKgorICogMi4zLjguICBwYXRoCisgKgorICoJdHlwZWRlZiBzdHJpbmcgcGF0aDxNQVhQQVRITEVOPjsKKyAqLworc3RhdGljIHZvaWQgZW5jb2RlX3BhdGgoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IHBhZ2UgKipwYWdlcywgdTMyIGxlbmd0aCkKK3sKKwlfX2JlMzIgKnA7CisKKwlCVUdfT04obGVuZ3RoID4gTkZTMl9NQVhQQVRITEVOKTsKKwlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA0KTsKKwkqcCA9IGNwdV90b19iZTMyKGxlbmd0aCk7CisJeGRyX3dyaXRlX3BhZ2VzKHhkciwgcGFnZXMsIDAsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX3BhdGgoc3RydWN0IHhkcl9zdHJlYW0gKnhkcikKK3sKKwl1MzIgbGVuZ3RoLCByZWN2ZDsKKwlzaXplX3QgaGRybGVuOworCV9fYmUzMiAqcDsKKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlsZW5ndGggPSBiZTMyX3RvX2NwdXAocCk7CisJaWYgKHVubGlrZWx5KGxlbmd0aCA+PSB4ZHItPmJ1Zi0+cGFnZV9sZW4gfHwgbGVuZ3RoID4gTkZTX01BWFBBVEhMRU4pKQorCQlnb3RvIG91dF9zaXplOworCWhkcmxlbiA9ICh1OCAqKXhkci0+cCAtICh1OCAqKXhkci0+aW92LT5pb3ZfYmFzZTsKKwlyZWN2ZCA9IHhkci0+YnVmLT5sZW4gLSBoZHJsZW47CisJaWYgKHVubGlrZWx5KGxlbmd0aCA+IHJlY3ZkKSkKKwkJZ290byBvdXRfY2hlYXRpbmc7CisKKwl4ZHJfcmVhZF9wYWdlcyh4ZHIsIGxlbmd0aCk7CisJeGRyX3Rlcm1pbmF0ZV9zdHJpbmcoeGRyLT5idWYsIGxlbmd0aCk7CisJcmV0dXJuIDA7CitvdXRfc2l6ZToKKwlkcHJpbnRrKCJORlM6IHJldHVybmVkIHBhdGhuYW1lIHRvbyBsb25nOiAldVxuIiwgbGVuZ3RoKTsKKwlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKK291dF9jaGVhdGluZzoKKwlkcHJpbnRrKCJORlM6IHNlcnZlciBjaGVhdGluZyBpbiBwYXRobmFtZSByZXN1bHQ6ICIKKwkJImxlbmd0aCAldSA+IHJlY2VpdmVkICV1XG4iLCBsZW5ndGgsIHJlY3ZkKTsKKwlyZXR1cm4gLUVJTzsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qCisgKiAyLjMuOS4gIGF0dHJzdGF0CisgKgorICoJdW5pb24gYXR0cnN0YXQgc3dpdGNoIChzdGF0IHN0YXR1cykgeworICoJY2FzZSBORlNfT0s6CisgKgkJZmF0dHIgYXR0cmlidXRlczsKKyAqCWRlZmF1bHQ6CisgKgkJdm9pZDsKKyAqCX07CisgKi8KK3N0YXRpYyBpbnQgZGVjb2RlX2F0dHJzdGF0KHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnNfZmF0dHIgKnJlc3VsdCkKK3sKKwllbnVtIG5mc19zdGF0IHN0YXR1czsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGRlY29kZV9zdGF0KHhkciwgJnN0YXR1cyk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisJaWYgKHN0YXR1cyAhPSBORlNfT0spCisJCWdvdG8gb3V0X2RlZmF1bHQ7CisJZXJyb3IgPSBkZWNvZGVfZmF0dHIoeGRyLCByZXN1bHQpOworb3V0OgorCXJldHVybiBlcnJvcjsKK291dF9kZWZhdWx0OgorCXJldHVybiBuZnNfc3RhdF90b19lcnJubyhzdGF0dXMpOworfQorCisvKgorICogMi4zLjEwLiAgZGlyb3BhcmdzCisgKgorICoJc3RydWN0IGRpcm9wYXJncyB7CisgKgkJZmhhbmRsZSAgZGlyOworICoJCWZpbGVuYW1lIG5hbWU7CisgKgl9OworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfZGlyb3BhcmdzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IHN0cnVjdCBuZnNfZmggKmZoLAorCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCB1MzIgbGVuZ3RoKQoreworCWVuY29kZV9maGFuZGxlKHhkciwgZmgpOworCWVuY29kZV9maWxlbmFtZSh4ZHIsIG5hbWUsIGxlbmd0aCk7Cit9CisKKy8qCisgKiAyLjMuMTEuICBkaXJvcHJlcworICoKKyAqCXVuaW9uIGRpcm9wcmVzIHN3aXRjaCAoc3RhdCBzdGF0dXMpIHsKKyAqCWNhc2UgTkZTX09LOgorICoJCXN0cnVjdCB7CisgKgkJCWZoYW5kbGUgZmlsZTsKKyAqCQkJZmF0dHIgICBhdHRyaWJ1dGVzOworICoJCX0gZGlyb3BvazsKKyAqCWRlZmF1bHQ6CisgKgkJdm9pZDsKKyAqCX07CisgKi8KK3N0YXRpYyBpbnQgZGVjb2RlX2Rpcm9wb2soc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19kaXJvcG9rICpyZXN1bHQpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBkZWNvZGVfZmhhbmRsZSh4ZHIsIHJlc3VsdC0+ZmgpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gZGVjb2RlX2ZhdHRyKHhkciwgcmVzdWx0LT5mYXR0cik7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IGRlY29kZV9kaXJvcHJlcyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzX2Rpcm9wb2sgKnJlc3VsdCkKK3sKKwllbnVtIG5mc19zdGF0IHN0YXR1czsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGRlY29kZV9zdGF0KHhkciwgJnN0YXR1cyk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisJaWYgKHN0YXR1cyAhPSBORlNfT0spCisJCWdvdG8gb3V0X2RlZmF1bHQ7CisJZXJyb3IgPSBkZWNvZGVfZGlyb3Bvayh4ZHIsIHJlc3VsdCk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworb3V0X2RlZmF1bHQ6CisJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Cit9CisKKworLyoKKyAqIE5GU3YyIFhEUiBlbmNvZGUgZnVuY3Rpb25zCisgKgorICogTkZTdjIgYXJndW1lbnQgdHlwZXMgYXJlIGRlZmluZWQgaW4gc2VjdGlvbiAyLjIgb2YgUkZDIDEwOTQ6CisgKiAiTkZTOiBOZXR3b3JrIEZpbGUgU3lzdGVtIFByb3RvY29sIFNwZWNpZmljYXRpb24iLgorICovCisKK3N0YXRpYyB2b2lkIG5mczJfeGRyX2VuY19maGFuZGxlKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSBjb25zdCBzdHJ1Y3QgbmZzX2ZoICpmaCkKK3sKKwllbmNvZGVfZmhhbmRsZSh4ZHIsIGZoKTsKK30KKworLyoKKyAqIDIuMi4zLiAgc2F0dHJhcmdzCisgKgorICoJc3RydWN0IHNhdHRyYXJncyB7CisgKgkJZmhhbmRsZSBmaWxlOworICoJCXNhdHRyIGF0dHJpYnV0ZXM7CisgKgl9OworICovCitzdGF0aWMgdm9pZCBuZnMyX3hkcl9lbmNfc2F0dHJhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgY29uc3Qgc3RydWN0IG5mc19zYXR0cmFyZ3MgKmFyZ3MpCit7CisJZW5jb2RlX2ZoYW5kbGUoeGRyLCBhcmdzLT5maCk7CisJZW5jb2RlX3NhdHRyKHhkciwgYXJncy0+c2F0dHIpOworfQorCitzdGF0aWMgdm9pZCBuZnMyX3hkcl9lbmNfZGlyb3BhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgY29uc3Qgc3RydWN0IG5mc19kaXJvcGFyZ3MgKmFyZ3MpCit7CisJZW5jb2RlX2Rpcm9wYXJncyh4ZHIsIGFyZ3MtPmZoLCBhcmdzLT5uYW1lLCBhcmdzLT5sZW4pOworfQorCitzdGF0aWMgdm9pZCBuZnMyX3hkcl9lbmNfcmVhZGxpbmthcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG5mc19yZWFkbGlua2FyZ3MgKmFyZ3MpCit7CisJZW5jb2RlX2ZoYW5kbGUoeGRyLCBhcmdzLT5maCk7CisJcHJlcGFyZV9yZXBseV9idWZmZXIocmVxLCBhcmdzLT5wYWdlcywgYXJncy0+cGdiYXNlLAorCQkJCQlhcmdzLT5wZ2xlbiwgTkZTX3JlYWRsaW5rcmVzX3N6KTsKK30KKworLyoKKyAqIDIuMi43LiAgcmVhZGFyZ3MKKyAqCisgKglzdHJ1Y3QgcmVhZGFyZ3MgeworICoJCWZoYW5kbGUgZmlsZTsKKyAqCQl1bnNpZ25lZCBvZmZzZXQ7CisgKgkJdW5zaWduZWQgY291bnQ7CisgKgkJdW5zaWduZWQgdG90YWxjb3VudDsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV9yZWFkYXJncyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgIGNvbnN0IHN0cnVjdCBuZnNfcmVhZGFyZ3MgKmFyZ3MpCit7CisJdTMyIG9mZnNldCA9IGFyZ3MtPm9mZnNldDsKKwl1MzIgY291bnQgPSBhcmdzLT5jb3VudDsKKwlfX2JlMzIgKnA7CisKKwllbmNvZGVfZmhhbmRsZSh4ZHIsIGFyZ3MtPmZoKTsKKworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyA0ICsgNCk7CisJKnArKyA9IGNwdV90b19iZTMyKG9mZnNldCk7CisJKnArKyA9IGNwdV90b19iZTMyKGNvdW50KTsKKwkqcCA9IGNwdV90b19iZTMyKGNvdW50KTsKK30KKworc3RhdGljIHZvaWQgbmZzMl94ZHJfZW5jX3JlYWRhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBuZnNfcmVhZGFyZ3MgKmFyZ3MpCit7CisJZW5jb2RlX3JlYWRhcmdzKHhkciwgYXJncyk7CisJcHJlcGFyZV9yZXBseV9idWZmZXIocmVxLCBhcmdzLT5wYWdlcywgYXJncy0+cGdiYXNlLAorCQkJCQlhcmdzLT5jb3VudCwgTkZTX3JlYWRyZXNfc3opOworCXJlcS0+cnFfcmN2X2J1Zi5mbGFncyB8PSBYRFJCVUZfUkVBRDsKK30KKworLyoKKyAqIDIuMi45LiAgd3JpdGVhcmdzCisgKgorICoJc3RydWN0IHdyaXRlYXJncyB7CisgKgkJZmhhbmRsZSBmaWxlOworICoJCXVuc2lnbmVkIGJlZ2lub2Zmc2V0OworICoJCXVuc2lnbmVkIG9mZnNldDsKKyAqCQl1bnNpZ25lZCB0b3RhbGNvdW50OworICoJCW5mc2RhdGEgZGF0YTsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV93cml0ZWFyZ3Moc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG5mc193cml0ZWFyZ3MgKmFyZ3MpCit7CisJdTMyIG9mZnNldCA9IGFyZ3MtPm9mZnNldDsKKwl1MzIgY291bnQgPSBhcmdzLT5jb3VudDsKKwlfX2JlMzIgKnA7CisKKwllbmNvZGVfZmhhbmRsZSh4ZHIsIGFyZ3MtPmZoKTsKKworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyA0ICsgNCArIDQpOworCSpwKysgPSBjcHVfdG9fYmUzMihvZmZzZXQpOworCSpwKysgPSBjcHVfdG9fYmUzMihvZmZzZXQpOworCSpwKysgPSBjcHVfdG9fYmUzMihjb3VudCk7CisKKwkvKiBuZnNkYXRhICovCisJKnAgPSBjcHVfdG9fYmUzMihjb3VudCk7CisJeGRyX3dyaXRlX3BhZ2VzKHhkciwgYXJncy0+cGFnZXMsIGFyZ3MtPnBnYmFzZSwgY291bnQpOworfQorCitzdGF0aWMgdm9pZCBuZnMyX3hkcl9lbmNfd3JpdGVhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgY29uc3Qgc3RydWN0IG5mc193cml0ZWFyZ3MgKmFyZ3MpCit7CisJZW5jb2RlX3dyaXRlYXJncyh4ZHIsIGFyZ3MpOworCXhkci0+YnVmLT5mbGFncyB8PSBYRFJCVUZfV1JJVEU7Cit9CisKKy8qCisgKiAyLjIuMTAuICBjcmVhdGVhcmdzCisgKgorICoJc3RydWN0IGNyZWF0ZWFyZ3MgeworICoJCWRpcm9wYXJncyB3aGVyZTsKKyAqCQlzYXR0ciBhdHRyaWJ1dGVzOworICoJfTsKKyAqLworc3RhdGljIHZvaWQgbmZzMl94ZHJfZW5jX2NyZWF0ZWFyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBuZnNfY3JlYXRlYXJncyAqYXJncykKK3sKKwllbmNvZGVfZGlyb3BhcmdzKHhkciwgYXJncy0+ZmgsIGFyZ3MtPm5hbWUsIGFyZ3MtPmxlbik7CisJZW5jb2RlX3NhdHRyKHhkciwgYXJncy0+c2F0dHIpOworfQorCitzdGF0aWMgdm9pZCBuZnMyX3hkcl9lbmNfcmVtb3ZlYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgY29uc3Qgc3RydWN0IG5mc19yZW1vdmVhcmdzICphcmdzKQoreworCWVuY29kZV9kaXJvcGFyZ3MoeGRyLCBhcmdzLT5maCwgYXJncy0+bmFtZS5uYW1lLCBhcmdzLT5uYW1lLmxlbik7Cit9CisKKy8qCisgKiAyLjIuMTIuICByZW5hbWVhcmdzCisgKgorICoJc3RydWN0IHJlbmFtZWFyZ3MgeworICoJCWRpcm9wYXJncyBmcm9tOworICoJCWRpcm9wYXJncyB0bzsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIG5mczJfeGRyX2VuY19yZW5hbWVhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgbmZzX3JlbmFtZWFyZ3MgKmFyZ3MpCit7CisJY29uc3Qgc3RydWN0IHFzdHIgKm9sZCA9IGFyZ3MtPm9sZF9uYW1lOworCWNvbnN0IHN0cnVjdCBxc3RyICpuZXcgPSBhcmdzLT5uZXdfbmFtZTsKKworCWVuY29kZV9kaXJvcGFyZ3MoeGRyLCBhcmdzLT5vbGRfZGlyLCBvbGQtPm5hbWUsIG9sZC0+bGVuKTsKKwllbmNvZGVfZGlyb3BhcmdzKHhkciwgYXJncy0+bmV3X2RpciwgbmV3LT5uYW1lLCBuZXctPmxlbik7Cit9CisKKy8qCisgKiAyLjIuMTMuICBsaW5rYXJncworICoKKyAqCXN0cnVjdCBsaW5rYXJncyB7CisgKgkJZmhhbmRsZSBmcm9tOworICoJCWRpcm9wYXJncyB0bzsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIG5mczJfeGRyX2VuY19saW5rYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICBjb25zdCBzdHJ1Y3QgbmZzX2xpbmthcmdzICphcmdzKQoreworCWVuY29kZV9maGFuZGxlKHhkciwgYXJncy0+ZnJvbWZoKTsKKwllbmNvZGVfZGlyb3BhcmdzKHhkciwgYXJncy0+dG9maCwgYXJncy0+dG9uYW1lLCBhcmdzLT50b2xlbik7Cit9CisKKy8qCisgKiAyLjIuMTQuICBzeW1saW5rYXJncworICoKKyAqCXN0cnVjdCBzeW1saW5rYXJncyB7CisgKgkJZGlyb3BhcmdzIGZyb207CisgKgkJcGF0aCB0bzsKKyAqCQlzYXR0ciBhdHRyaWJ1dGVzOworICoJfTsKKyAqLworc3RhdGljIHZvaWQgbmZzMl94ZHJfZW5jX3N5bWxpbmthcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZnNfc3ltbGlua2FyZ3MgKmFyZ3MpCit7CisJZW5jb2RlX2Rpcm9wYXJncyh4ZHIsIGFyZ3MtPmZyb21maCwgYXJncy0+ZnJvbW5hbWUsIGFyZ3MtPmZyb21sZW4pOworCWVuY29kZV9wYXRoKHhkciwgYXJncy0+cGFnZXMsIGFyZ3MtPnBhdGhsZW4pOworCWVuY29kZV9zYXR0cih4ZHIsIGFyZ3MtPnNhdHRyKTsKK30KKworLyoKKyAqIDIuMi4xNy4gIHJlYWRkaXJhcmdzCisgKgorICoJc3RydWN0IHJlYWRkaXJhcmdzIHsKKyAqCQlmaGFuZGxlIGRpcjsKKyAqCQluZnNjb29raWUgY29va2llOworICoJCXVuc2lnbmVkIGNvdW50OworICoJfTsKKyAqLworc3RhdGljIHZvaWQgZW5jb2RlX3JlYWRkaXJhcmdzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mc19yZWFkZGlyYXJncyAqYXJncykKK3sKKwlfX2JlMzIgKnA7CisKKwllbmNvZGVfZmhhbmRsZSh4ZHIsIGFyZ3MtPmZoKTsKKworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyA0KTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoYXJncy0+Y29va2llKTsKKwkqcCA9IGNwdV90b19iZTMyKGFyZ3MtPmNvdW50KTsKK30KKworc3RhdGljIHZvaWQgbmZzMl94ZHJfZW5jX3JlYWRkaXJhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZnNfcmVhZGRpcmFyZ3MgKmFyZ3MpCit7CisJZW5jb2RlX3JlYWRkaXJhcmdzKHhkciwgYXJncyk7CisJcHJlcGFyZV9yZXBseV9idWZmZXIocmVxLCBhcmdzLT5wYWdlcywgMCwKKwkJCQkJYXJncy0+Y291bnQsIE5GU19yZWFkZGlycmVzX3N6KTsKK30KKworLyoKKyAqIE5GU3YyIFhEUiBkZWNvZGUgZnVuY3Rpb25zCisgKgorICogTkZTdjIgcmVzdWx0IHR5cGVzIGFyZSBkZWZpbmVkIGluIHNlY3Rpb24gMi4yIG9mIFJGQyAxMDk0OgorICogIk5GUzogTmV0d29yayBGaWxlIFN5c3RlbSBQcm90b2NvbCBTcGVjaWZpY2F0aW9uIi4KKyAqLworCitzdGF0aWMgaW50IG5mczJfeGRyX2RlY19zdGF0KHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICB2b2lkICpfX3VudXNlZCkKK3sKKwllbnVtIG5mc19zdGF0IHN0YXR1czsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGRlY29kZV9zdGF0KHhkciwgJnN0YXR1cyk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisJaWYgKHN0YXR1cyAhPSBORlNfT0spCisJCWdvdG8gb3V0X2RlZmF1bHQ7CitvdXQ6CisJcmV0dXJuIGVycm9yOworb3V0X2RlZmF1bHQ6CisJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbnQgbmZzMl94ZHJfZGVjX2F0dHJzdGF0KHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSBzdHJ1Y3QgbmZzX2ZhdHRyICpyZXN1bHQpCit7CisJcmV0dXJuIGRlY29kZV9hdHRyc3RhdCh4ZHIsIHJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQgbmZzMl94ZHJfZGVjX2Rpcm9wcmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSBzdHJ1Y3QgbmZzX2Rpcm9wb2sgKnJlc3VsdCkKK3sKKwlyZXR1cm4gZGVjb2RlX2Rpcm9wcmVzKHhkciwgcmVzdWx0KTsKK30KKworLyoKKyAqIDIuMi42LiAgcmVhZGxpbmtyZXMKKyAqCisgKgl1bmlvbiByZWFkbGlua3JlcyBzd2l0Y2ggKHN0YXQgc3RhdHVzKSB7CisgKgljYXNlIE5GU19PSzoKKyAqCQlwYXRoIGRhdGE7CisgKglkZWZhdWx0OgorICoJCXZvaWQ7CisgKgl9OworICovCitzdGF0aWMgaW50IG5mczJfeGRyX2RlY19yZWFkbGlua3JlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdm9pZCAqX191bnVzZWQpCit7CisJZW51bSBuZnNfc3RhdCBzdGF0dXM7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBkZWNvZGVfc3RhdCh4ZHIsICZzdGF0dXMpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWlmIChzdGF0dXMgIT0gTkZTX09LKQorCQlnb3RvIG91dF9kZWZhdWx0OworCWVycm9yID0gZGVjb2RlX3BhdGgoeGRyKTsKK291dDoKKwlyZXR1cm4gZXJyb3I7CitvdXRfZGVmYXVsdDoKKwlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKK30KKworLyoKKyAqIDIuMi43LiAgcmVhZHJlcworICoKKyAqCXVuaW9uIHJlYWRyZXMgc3dpdGNoIChzdGF0IHN0YXR1cykgeworICoJY2FzZSBORlNfT0s6CisgKgkJZmF0dHIgYXR0cmlidXRlczsKKyAqCQluZnNkYXRhIGRhdGE7CisgKglkZWZhdWx0OgorICoJCXZvaWQ7CisgKgl9OworICovCitzdGF0aWMgaW50IG5mczJfeGRyX2RlY19yZWFkcmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCXN0cnVjdCBuZnNfcmVhZHJlcyAqcmVzdWx0KQoreworCWVudW0gbmZzX3N0YXQgc3RhdHVzOworCWludCBlcnJvcjsKKworCWVycm9yID0gZGVjb2RlX3N0YXQoeGRyLCAmc3RhdHVzKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwlpZiAoc3RhdHVzICE9IE5GU19PSykKKwkJZ290byBvdXRfZGVmYXVsdDsKKwllcnJvciA9IGRlY29kZV9mYXR0cih4ZHIsIHJlc3VsdC0+ZmF0dHIpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gZGVjb2RlX25mc2RhdGEoeGRyLCByZXN1bHQpOworb3V0OgorCXJldHVybiBlcnJvcjsKK291dF9kZWZhdWx0OgorCXJldHVybiBuZnNfc3RhdF90b19lcnJubyhzdGF0dXMpOworfQorCitzdGF0aWMgaW50IG5mczJfeGRyX2RlY193cml0ZXJlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgc3RydWN0IG5mc193cml0ZXJlcyAqcmVzdWx0KQoreworCS8qIEFsbCBORlN2MiB3cml0ZXMgYXJlICJmaWxlIHN5bmMiIHdyaXRlcyAqLworCXJlc3VsdC0+dmVyZi0+Y29tbWl0dGVkID0gTkZTX0ZJTEVfU1lOQzsKKwlyZXR1cm4gZGVjb2RlX2F0dHJzdGF0KHhkciwgcmVzdWx0LT5mYXR0cik7Cit9CisKKy8qKgorICogbmZzMl9kZWNvZGVfZGlyZW50IC0gRGVjb2RlIGEgc2luZ2xlIE5GU3YyIGRpcmVjdG9yeSBlbnRyeSBzdG9yZWQgaW4KKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBsb2NhbCBwYWdlIGNhY2hlLgorICogQHhkcjogWERSIHN0cmVhbSB3aGVyZSBlbnRyeSByZXNpZGVzCisgKiBAZW50cnk6IGJ1ZmZlciB0byBmaWxsIGluIHdpdGggZW50cnkgZGF0YQorICogQHBsdXM6IGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgc2hvdWxkIGJlIGEgcmVhZGRpcnBsdXMgZW50cnkKKyAqCisgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgaXMKKyAqIHJldHVybmVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IGludm9rZWQgZHVyaW5nIFJFQURESVIgcmVwbHkgZGVjb2RpbmcsIGJ1dAorICogcmF0aGVyIHdoZW5ldmVyIGFuIGFwcGxpY2F0aW9uIGludm9rZXMgdGhlIGdldGRlbnRzKDIpIHN5c3RlbSBjYWxsCisgKiBvbiBhIGRpcmVjdG9yeSBhbHJlYWR5IGluIG91ciBjYWNoZS4KKyAqCisgKiAyLjIuMTcuICBlbnRyeQorICoKKyAqCXN0cnVjdCBlbnRyeSB7CisgKgkJdW5zaWduZWQJZmlsZWlkOworICoJCWZpbGVuYW1lCW5hbWU7CisgKgkJbmZzY29va2llCWNvb2tpZTsKKyAqCQllbnRyeQkJKm5leHRlbnRyeTsKKyAqCX07CisgKi8KK2ludCBuZnMyX2RlY29kZV9kaXJlbnQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19lbnRyeSAqZW50cnksCisJCSAgICAgICBpbnQgcGx1cykKK3sKKwlfX2JlMzIgKnA7CisJaW50IGVycm9yOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWlmICgqcCsrID09IHhkcl96ZXJvKSB7CisJCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCQlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQlpZiAoKnArKyA9PSB4ZHJfemVybykKKwkJCXJldHVybiAtRUFHQUlOOworCQllbnRyeS0+ZW9mID0gMTsKKwkJcmV0dXJuIC1FQkFEQ09PS0lFOworCX0KKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwllbnRyeS0+aW5vID0gYmUzMl90b19jcHVwKHApOworCisJZXJyb3IgPSBkZWNvZGVfZmlsZW5hbWVfaW5saW5lKHhkciwgJmVudHJ5LT5uYW1lLCAmZW50cnktPmxlbik7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJcmV0dXJuIGVycm9yOworCisJLyoKKwkgKiBUaGUgdHlwZSAoc2l6ZSBhbmQgYnl0ZSBvcmRlcikgb2YgbmZzY29va2llIGlzbid0IGRlZmluZWQgaW4KKwkgKiBSRkMgMTA5NC4gIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IGl0J3MgYW4gWERSIHVpbnQzMi4KKwkgKi8KKwllbnRyeS0+cHJldl9jb29raWUgPSBlbnRyeS0+Y29va2llOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwllbnRyeS0+Y29va2llID0gYmUzMl90b19jcHVwKHApOwogCiAJZW50cnktPmRfdHlwZSA9IERUX1VOS05PV047CiAKLQlwID0geGRyX2lubGluZV9wZWVrKHhkciwgOCk7Ci0JaWYgKHAgIT0gTlVMTCkKLQkJZW50cnktPmVvZiA9ICFwWzBdICYmIHBbMV07Ci0JZWxzZQotCQllbnRyeS0+ZW9mID0gMDsKLQotCXJldHVybiBwOworCXJldHVybiAwOwogCiBvdXRfb3ZlcmZsb3c6CiAJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOwotCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOworCXJldHVybiAtRUFHQUlOOwogfQogCiAvKgotICogTkZTIFhEUiBkZWNvZGUgZnVuY3Rpb25zCisgKiAyLjIuMTcuICByZWFkZGlycmVzCisgKgorICoJdW5pb24gcmVhZGRpcnJlcyBzd2l0Y2ggKHN0YXQgc3RhdHVzKSB7CisgKgljYXNlIE5GU19PSzoKKyAqCQlzdHJ1Y3QgeworICoJCQllbnRyeSAqZW50cmllczsKKyAqCQkJYm9vbCBlb2Y7CisgKgkJfSByZWFkZGlyb2s7CisgKglkZWZhdWx0OgorICoJCXZvaWQ7CisgKgl9OworICoKKyAqIFJlYWQgdGhlIGRpcmVjdG9yeSBjb250ZW50cyBpbnRvIHRoZSBwYWdlIGNhY2hlLCBidXQgZG9uJ3QKKyAqIHRvdWNoIHRoZW0uICBUaGUgYWN0dWFsIGRlY29kaW5nIGlzIGRvbmUgYnkgbmZzMl9kZWNvZGVfZGlyZW50KCkKKyAqIGR1cmluZyBzdWJzZXF1ZW50IG5mc19yZWFkZGlyKCkgY2FsbHMuCiAgKi8KLS8qCi0gKiBEZWNvZGUgc2ltcGxlIHN0YXR1cyByZXBseQotICovCi1zdGF0aWMgaW50Ci1uZnNfeGRyX3N0YXQoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgdm9pZCAqZHVtbXkpCitzdGF0aWMgaW50IGRlY29kZV9yZWFkZGlyb2soc3RydWN0IHhkcl9zdHJlYW0gKnhkcikKIHsKLQlpbnQJc3RhdHVzOwotCi0JaWYgKChzdGF0dXMgPSBudG9obCgqcCsrKSkgIT0gMCkKLQkJc3RhdHVzID0gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogRGVjb2RlIGF0dHJzdGF0IHJlcGx5Ci0gKiBHRVRBVFRSLCBTRVRBVFRSLCBXUklURQotICovCi1zdGF0aWMgaW50Ci1uZnNfeGRyX2F0dHJzdGF0KHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQotewotCWludAlzdGF0dXM7Ci0KLQlpZiAoKHN0YXR1cyA9IG50b2hsKCpwKyspKSkKLQkJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Ci0JeGRyX2RlY29kZV9mYXR0cihwLCBmYXR0cik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBEZWNvZGUgZGlyb3ByZXMgcmVwbHkKLSAqIExPT0tVUCwgQ1JFQVRFLCBNS0RJUgotICovCi1zdGF0aWMgaW50Ci1uZnNfeGRyX2Rpcm9wcmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfZGlyb3BvayAqcmVzKQotewotCWludAlzdGF0dXM7Ci0KLQlpZiAoKHN0YXR1cyA9IG50b2hsKCpwKyspKSkKLQkJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Ci0JcCA9IHhkcl9kZWNvZGVfZmhhbmRsZShwLCByZXMtPmZoKTsKLQl4ZHJfZGVjb2RlX2ZhdHRyKHAsIHJlcy0+ZmF0dHIpOwotCXJldHVybiAwOwotfQotCi0vKgotICogRW5jb2RlIFJFQURMSU5LIGFyZ3MKLSAqLwotc3RhdGljIGludAotbmZzX3hkcl9yZWFkbGlua2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19yZWFkbGlua2FyZ3MgKmFyZ3MpCi17Ci0Jc3RydWN0IHJwY19hdXRoCSphdXRoID0gcmVxLT5ycV9jcmVkLT5jcl9hdXRoOwotCXVuc2lnbmVkIGludCByZXBsZW47Ci0KLQlwID0geGRyX2VuY29kZV9maGFuZGxlKHAsIGFyZ3MtPmZoKTsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0KLQkvKiBJbmxpbmUgdGhlIHBhZ2UgYXJyYXkgKi8KLQlyZXBsZW4gPSAoUlBDX1JFUEhEUlNJWkUgKyBhdXRoLT5hdV9yc2xhY2sgKyBORlNfcmVhZGxpbmtyZXNfc3opIDw8IDI7Ci0JeGRyX2lubGluZV9wYWdlcygmcmVxLT5ycV9yY3ZfYnVmLCByZXBsZW4sIGFyZ3MtPnBhZ2VzLCBhcmdzLT5wZ2Jhc2UsIGFyZ3MtPnBnbGVuKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIERlY29kZSBSRUFETElOSyByZXBseQotICovCi1zdGF0aWMgaW50Ci1uZnNfeGRyX3JlYWRsaW5rcmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHZvaWQgKmR1bW15KQotewotCXN0cnVjdCB4ZHJfYnVmICpyY3ZidWYgPSAmcmVxLT5ycV9yY3ZfYnVmOwotCXN0cnVjdCBrdmVjICppb3YgPSByY3ZidWYtPmhlYWQ7CisJdTMyIHJlY3ZkLCBwZ2xlbjsKIAlzaXplX3QgaGRybGVuOwotCXUzMiBsZW4sIHJlY3ZkOwotCWludAlzdGF0dXM7CiAKLQlpZiAoKHN0YXR1cyA9IG50b2hsKCpwKyspKSkKLQkJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Ci0JLyogQ29udmVydCBsZW5ndGggb2Ygc3ltbGluayAqLwotCWxlbiA9IG50b2hsKCpwKyspOwotCWlmIChsZW4gPj0gcmN2YnVmLT5wYWdlX2xlbikgewotCQlkcHJpbnRrKCJuZnM6IHNlcnZlciByZXR1cm5lZCBnaWFudCBzeW1saW5rIVxuIik7Ci0JCXJldHVybiAtRU5BTUVUT09MT05HOwotCX0KLQloZHJsZW4gPSAodTggKikgcCAtICh1OCAqKSBpb3YtPmlvdl9iYXNlOwotCWlmIChpb3YtPmlvdl9sZW4gPCBoZHJsZW4pIHsKLQkJZHByaW50aygiTkZTOiBSRUFETElOSyByZXBseSBoZWFkZXIgb3ZlcmZsb3dlZDoiCi0JCQkJImxlbmd0aCAlWnUgPiAlWnVcbiIsIGhkcmxlbiwgaW92LT5pb3ZfbGVuKTsKLQkJcmV0dXJuIC1lcnJub19ORlNFUlJfSU87Ci0JfSBlbHNlIGlmIChpb3YtPmlvdl9sZW4gIT0gaGRybGVuKSB7Ci0JCWRwcmludGsoIk5GUzogUkVBRExJTksgaGVhZGVyIGlzIHNob3J0LiBpb3ZlYyB3aWxsIGJlIHNoaWZ0ZWQuXG4iKTsKLQkJeGRyX3NoaWZ0X2J1ZihyY3ZidWYsIGlvdi0+aW92X2xlbiAtIGhkcmxlbik7Ci0JfQotCXJlY3ZkID0gcmVxLT5ycV9yY3ZfYnVmLmxlbiAtIGhkcmxlbjsKLQlpZiAocmVjdmQgPCBsZW4pIHsKLQkJZHByaW50aygiTkZTOiBzZXJ2ZXIgY2hlYXRpbmcgaW4gcmVhZGxpbmsgcmVwbHk6ICIKLQkJCQkiY291bnQgJXUgPiByZWN2ZCAldVxuIiwgbGVuLCByZWN2ZCk7Ci0JCXJldHVybiAtRUlPOwotCX0KKwlwZ2xlbiA9IHhkci0+YnVmLT5wYWdlX2xlbjsKKwloZHJsZW4gPSAodTggKil4ZHItPnAgLSAodTggKil4ZHItPmlvdi0+aW92X2Jhc2U7CisJcmVjdmQgPSB4ZHItPmJ1Zi0+bGVuIC0gaGRybGVuOworCWlmICh1bmxpa2VseShwZ2xlbiA+IHJlY3ZkKSkKKwkJZ290byBvdXRfY2hlYXRpbmc7CitvdXQ6CisJeGRyX3JlYWRfcGFnZXMoeGRyLCBwZ2xlbik7CisJcmV0dXJuIHBnbGVuOworb3V0X2NoZWF0aW5nOgorCWRwcmludGsoIk5GUzogc2VydmVyIGNoZWF0aW5nIGluIHJlYWRkaXIgcmVzdWx0OiAiCisJCSJwZ2xlbiAldSA+IHJlY3ZkICV1XG4iLCBwZ2xlbiwgcmVjdmQpOworCXBnbGVuID0gcmVjdmQ7CisJZ290byBvdXQ7Cit9CiAKLQl4ZHJfdGVybWluYXRlX3N0cmluZyhyY3ZidWYsIGxlbik7Ci0JcmV0dXJuIDA7CitzdGF0aWMgaW50IG5mczJfeGRyX2RlY19yZWFkZGlycmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHZvaWQgKl9fdW51c2VkKQoreworCWVudW0gbmZzX3N0YXQgc3RhdHVzOworCWludCBlcnJvcjsKKworCWVycm9yID0gZGVjb2RlX3N0YXQoeGRyLCAmc3RhdHVzKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwlpZiAoc3RhdHVzICE9IE5GU19PSykKKwkJZ290byBvdXRfZGVmYXVsdDsKKwllcnJvciA9IGRlY29kZV9yZWFkZGlyb2soeGRyKTsKK291dDoKKwlyZXR1cm4gZXJyb3I7CitvdXRfZGVmYXVsdDoKKwlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKIH0KIAogLyoKLSAqIERlY29kZSBXUklURSByZXBseQorICogMi4yLjE4LiAgc3RhdGZzcmVzCisgKgorICoJdW5pb24gc3RhdGZzcmVzIChzdGF0IHN0YXR1cykgeworICoJY2FzZSBORlNfT0s6CisgKgkJc3RydWN0IHsKKyAqCQkJdW5zaWduZWQgdHNpemU7CisgKgkJCXVuc2lnbmVkIGJzaXplOworICoJCQl1bnNpZ25lZCBibG9ja3M7CisgKgkJCXVuc2lnbmVkIGJmcmVlOworICoJCQl1bnNpZ25lZCBiYXZhaWw7CisgKgkJfSBpbmZvOworICoJZGVmYXVsdDoKKyAqCQl2b2lkOworICoJfTsKICAqLwotc3RhdGljIGludAotbmZzX3hkcl93cml0ZXJlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3dyaXRlcmVzICpyZXMpCitzdGF0aWMgaW50IGRlY29kZV9pbmZvKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnMyX2Zzc3RhdCAqcmVzdWx0KQogewotCXJlcy0+dmVyZi0+Y29tbWl0dGVkID0gTkZTX0ZJTEVfU1lOQzsKLQlyZXR1cm4gbmZzX3hkcl9hdHRyc3RhdChyZXEsIHAsIHJlcy0+ZmF0dHIpOwotfQorCV9fYmUzMiAqcDsKIAotLyoKLSAqIERlY29kZSBTVEFURlMgcmVwbHkKLSAqLwotc3RhdGljIGludAotbmZzX3hkcl9zdGF0ZnNyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mczJfZnNzdGF0ICpyZXMpCi17Ci0JaW50CXN0YXR1czsKLQotCWlmICgoc3RhdHVzID0gbnRvaGwoKnArKykpKQotCQlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKLQotCXJlcy0+dHNpemUgID0gbnRvaGwoKnArKyk7Ci0JcmVzLT5ic2l6ZSAgPSBudG9obCgqcCsrKTsKLQlyZXMtPmJsb2NrcyA9IG50b2hsKCpwKyspOwotCXJlcy0+YmZyZWUgID0gbnRvaGwoKnArKyk7Ci0JcmVzLT5iYXZhaWwgPSBudG9obCgqcCsrKTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBORlNfaW5mb19zeiA8PCAyKTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJcmVzdWx0LT50c2l6ZSAgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwlyZXN1bHQtPmJzaXplICA9IGJlMzJfdG9fY3B1cChwKyspOworCXJlc3VsdC0+YmxvY2tzID0gYmUzMl90b19jcHVwKHArKyk7CisJcmVzdWx0LT5iZnJlZSAgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwlyZXN1bHQtPmJhdmFpbCA9IGJlMzJfdG9fY3B1cChwKTsKIAlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKK3N0YXRpYyBpbnQgbmZzMl94ZHJfZGVjX3N0YXRmc3JlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgIHN0cnVjdCBuZnMyX2Zzc3RhdCAqcmVzdWx0KQoreworCWVudW0gbmZzX3N0YXQgc3RhdHVzOworCWludCBlcnJvcjsKKworCWVycm9yID0gZGVjb2RlX3N0YXQoeGRyLCAmc3RhdHVzKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwlpZiAoc3RhdHVzICE9IE5GU19PSykKKwkJZ290byBvdXRfZGVmYXVsdDsKKwllcnJvciA9IGRlY29kZV9pbmZvKHhkciwgcmVzdWx0KTsKK291dDoKKwlyZXR1cm4gZXJyb3I7CitvdXRfZGVmYXVsdDoKKwlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKK30KKworCiAvKgogICogV2UgbmVlZCB0byB0cmFuc2xhdGUgYmV0d2VlbiBuZnMgc3RhdHVzIHJldHVybiB2YWx1ZXMgYW5kCiAgKiB0aGUgbG9jYWwgZXJybm8gdmFsdWVzIHdoaWNoIG1heSBub3QgYmUgdGhlIHNhbWUuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgeworc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJaW50IHN0YXQ7CiAJaW50IGVycm5vOwogfSBuZnNfZXJydGJsW10gPSB7CkBAIC02NzgsMjggKzExMDIsMzAgQEAKIAl7IC0xLAkJCS1FSU8JCX0KIH07CiAKLS8qCi0gKiBDb252ZXJ0IGFuIE5GUyBlcnJvciBjb2RlIHRvIGEgbG9jYWwgb25lLgotICogVGhpcyBvbmUgaXMgdXNlZCBqb2ludGx5IGJ5IE5GU3YyIGFuZCBORlN2My4KKy8qKgorICogbmZzX3N0YXRfdG9fZXJybm8gLSBjb252ZXJ0IGFuIE5GUyBzdGF0dXMgY29kZSB0byBhIGxvY2FsIGVycm5vCisgKiBAc3RhdHVzOiBORlMgc3RhdHVzIGNvZGUgdG8gY29udmVydAorICoKKyAqIFJldHVybnMgYSBsb2NhbCBlcnJubyB2YWx1ZSwgb3IgLUVJTyBpZiB0aGUgTkZTIHN0YXR1cyBjb2RlIGlzCisgKiBub3QgcmVjb2duaXplZC4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBqb2ludGx5IGJ5IE5GU3YyIGFuZCBORlN2My4KICAqLwotaW50Ci1uZnNfc3RhdF90b19lcnJubyhpbnQgc3RhdCkKK2ludCBuZnNfc3RhdF90b19lcnJubyhlbnVtIG5mc19zdGF0IHN0YXR1cykKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IG5mc19lcnJ0YmxbaV0uc3RhdCAhPSAtMTsgaSsrKSB7Ci0JCWlmIChuZnNfZXJydGJsW2ldLnN0YXQgPT0gc3RhdCkKKwkJaWYgKG5mc19lcnJ0YmxbaV0uc3RhdCA9PSAoaW50KXN0YXR1cykKIAkJCXJldHVybiBuZnNfZXJydGJsW2ldLmVycm5vOwogCX0KLQlkcHJpbnRrKCJuZnNfc3RhdF90b19lcnJubzogYmFkIG5mcyBzdGF0dXMgcmV0dXJuIHZhbHVlOiAlZFxuIiwgc3RhdCk7CisJZHByaW50aygiTkZTOiBVbnJlY29nbml6ZWQgbmZzIHN0YXR1cyB2YWx1ZTogJXVcbiIsIHN0YXR1cyk7CiAJcmV0dXJuIG5mc19lcnJ0YmxbaV0uZXJybm87CiB9CiAKICNkZWZpbmUgUFJPQyhwcm9jLCBhcmd0eXBlLCByZXN0eXBlLCB0aW1lcikJCQkJXAogW05GU1BST0NfIyNwcm9jXSA9IHsJCQkJCQkJXAogCS5wX3Byb2MJICAgID0gIE5GU1BST0NfIyNwcm9jLAkJCQkJXAotCS5wX2VuY29kZSAgID0gIChreGRycHJvY190KSBuZnNfeGRyXyMjYXJndHlwZSwJCQlcCi0JLnBfZGVjb2RlICAgPSAgKGt4ZHJwcm9jX3QpIG5mc194ZHJfIyNyZXN0eXBlLAkJCVwKKwkucF9lbmNvZGUgICA9ICAoa3hkcmVwcm9jX3QpbmZzMl94ZHJfZW5jXyMjYXJndHlwZSwJCVwKKwkucF9kZWNvZGUgICA9ICAoa3hkcmRwcm9jX3QpbmZzMl94ZHJfZGVjXyMjcmVzdHlwZSwJCVwKIAkucF9hcmdsZW4gICA9ICBORlNfIyNhcmd0eXBlIyNfc3osCQkJCVwKIAkucF9yZXBsZW4gICA9ICBORlNfIyNyZXN0eXBlIyNfc3osCQkJCVwKIAkucF90aW1lciAgICA9ICB0aW1lciwJCQkJCQlcCkBAIC03MDcsMjEgKzExMzMsMjEgQEAKIAkucF9uYW1lICAgICA9ICAjcHJvYywJCQkJCQlcCiAJfQogc3RydWN0IHJwY19wcm9jaW5mbwluZnNfcHJvY2VkdXJlc1tdID0gewotICAgIFBST0MoR0VUQVRUUiwJZmhhbmRsZSwJYXR0cnN0YXQsIDEpLAotICAgIFBST0MoU0VUQVRUUiwJc2F0dHJhcmdzLAlhdHRyc3RhdCwgMCksCi0gICAgUFJPQyhMT09LVVAsCWRpcm9wYXJncywJZGlyb3ByZXMsIDIpLAotICAgIFBST0MoUkVBRExJTkssCXJlYWRsaW5rYXJncywJcmVhZGxpbmtyZXMsIDMpLAotICAgIFBST0MoUkVBRCwJCXJlYWRhcmdzLAlyZWFkcmVzLCAzKSwKLSAgICBQUk9DKFdSSVRFLAkJd3JpdGVhcmdzLAl3cml0ZXJlcywgNCksCi0gICAgUFJPQyhDUkVBVEUsCWNyZWF0ZWFyZ3MsCWRpcm9wcmVzLCAwKSwKLSAgICBQUk9DKFJFTU9WRSwJcmVtb3ZlYXJncywJc3RhdCwgMCksCi0gICAgUFJPQyhSRU5BTUUsCXJlbmFtZWFyZ3MsCXN0YXQsIDApLAotICAgIFBST0MoTElOSywJCWxpbmthcmdzLAlzdGF0LCAwKSwKLSAgICBQUk9DKFNZTUxJTkssCXN5bWxpbmthcmdzLAlzdGF0LCAwKSwKLSAgICBQUk9DKE1LRElSLAkJY3JlYXRlYXJncywJZGlyb3ByZXMsIDApLAotICAgIFBST0MoUk1ESVIsCQlkaXJvcGFyZ3MsCXN0YXQsIDApLAotICAgIFBST0MoUkVBRERJUiwJcmVhZGRpcmFyZ3MsCXJlYWRkaXJyZXMsIDMpLAotICAgIFBST0MoU1RBVEZTLAlmaGFuZGxlLAlzdGF0ZnNyZXMsIDApLAorCVBST0MoR0VUQVRUUiwJZmhhbmRsZSwJYXR0cnN0YXQsCTEpLAorCVBST0MoU0VUQVRUUiwJc2F0dHJhcmdzLAlhdHRyc3RhdCwJMCksCisJUFJPQyhMT09LVVAsCWRpcm9wYXJncywJZGlyb3ByZXMsCTIpLAorCVBST0MoUkVBRExJTkssCXJlYWRsaW5rYXJncywJcmVhZGxpbmtyZXMsCTMpLAorCVBST0MoUkVBRCwJcmVhZGFyZ3MsCXJlYWRyZXMsCTMpLAorCVBST0MoV1JJVEUsCXdyaXRlYXJncywJd3JpdGVyZXMsCTQpLAorCVBST0MoQ1JFQVRFLAljcmVhdGVhcmdzLAlkaXJvcHJlcywJMCksCisJUFJPQyhSRU1PVkUsCXJlbW92ZWFyZ3MsCXN0YXQsCQkwKSwKKwlQUk9DKFJFTkFNRSwJcmVuYW1lYXJncywJc3RhdCwJCTApLAorCVBST0MoTElOSywJbGlua2FyZ3MsCXN0YXQsCQkwKSwKKwlQUk9DKFNZTUxJTkssCXN5bWxpbmthcmdzLAlzdGF0LAkJMCksCisJUFJPQyhNS0RJUiwJY3JlYXRlYXJncywJZGlyb3ByZXMsCTApLAorCVBST0MoUk1ESVIsCWRpcm9wYXJncywJc3RhdCwJCTApLAorCVBST0MoUkVBRERJUiwJcmVhZGRpcmFyZ3MsCXJlYWRkaXJyZXMsCTMpLAorCVBST0MoU1RBVEZTLAlmaGFuZGxlLAlzdGF0ZnNyZXMsCTApLAogfTsKIAogc3RydWN0IHJwY192ZXJzaW9uCQluZnNfdmVyc2lvbjIgPSB7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzM3hkci5jIGIvZnMvbmZzL25mczN4ZHIuYwppbmRleCBmNmNjNjBmLi4wMWM1ZThiIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzM3hkci5jCisrKyBiL2ZzL25mcy9uZnMzeGRyLmMKQEAgLTM3LDE4ICszNywxNiBAQAogI2RlZmluZSBORlMzX2ZpbGVuYW1lX3N6CSgxKyhORlMzX01BWE5BTUxFTj4+MikpCiAjZGVmaW5lIE5GUzNfcGF0aF9zegkJKDErKE5GUzNfTUFYUEFUSExFTj4+MikpCiAjZGVmaW5lIE5GUzNfZmF0dHJfc3oJCSgyMSkKLSNkZWZpbmUgTkZTM193Y2NfYXR0cl9zegkJKDYpCisjZGVmaW5lIE5GUzNfY29va2lldmVyZl9zegkoTkZTM19DT09LSUVWRVJGU0laRT4+MikKKyNkZWZpbmUgTkZTM193Y2NfYXR0cl9zegkoNikKICNkZWZpbmUgTkZTM19wcmVfb3BfYXR0cl9zegkoMStORlMzX3djY19hdHRyX3N6KQogI2RlZmluZSBORlMzX3Bvc3Rfb3BfYXR0cl9zegkoMStORlMzX2ZhdHRyX3N6KQotI2RlZmluZSBORlMzX3djY19kYXRhX3N6CQkoTkZTM19wcmVfb3BfYXR0cl9zeitORlMzX3Bvc3Rfb3BfYXR0cl9zeikKLSNkZWZpbmUgTkZTM19mc3N0YXRfc3oJCQotI2RlZmluZSBORlMzX2ZzaW5mb19zegkJCi0jZGVmaW5lIE5GUzNfcGF0aGNvbmZfc3oJCQotI2RlZmluZSBORlMzX2VudHJ5X3N6CQkoTkZTM19maWxlbmFtZV9zeiszKQotCi0jZGVmaW5lIE5GUzNfc2F0dHJhcmdzX3N6CShORlMzX2ZoX3N6K05GUzNfc2F0dHJfc3orMykKKyNkZWZpbmUgTkZTM193Y2NfZGF0YV9zegkoTkZTM19wcmVfb3BfYXR0cl9zeitORlMzX3Bvc3Rfb3BfYXR0cl9zeikKICNkZWZpbmUgTkZTM19kaXJvcGFyZ3Nfc3oJKE5GUzNfZmhfc3orTkZTM19maWxlbmFtZV9zeikKLSNkZWZpbmUgTkZTM19yZW1vdmVhcmdzX3N6CShORlMzX2ZoX3N6K05GUzNfZmlsZW5hbWVfc3opCisKKyNkZWZpbmUgTkZTM19nZXRhdHRyYXJnc19zegkoTkZTM19maF9zeikKKyNkZWZpbmUgTkZTM19zZXRhdHRyYXJnc19zegkoTkZTM19maF9zeitORlMzX3NhdHRyX3N6KzMpCisjZGVmaW5lIE5GUzNfbG9va3VwYXJnc19zegkoTkZTM19maF9zeitORlMzX2ZpbGVuYW1lX3N6KQogI2RlZmluZSBORlMzX2FjY2Vzc2FyZ3Nfc3oJKE5GUzNfZmhfc3orMSkKICNkZWZpbmUgTkZTM19yZWFkbGlua2FyZ3Nfc3oJKE5GUzNfZmhfc3opCiAjZGVmaW5lIE5GUzNfcmVhZGFyZ3Nfc3oJKE5GUzNfZmhfc3orMykKQEAgLTU3LDE0ICs1NSwxNiBAQAogI2RlZmluZSBORlMzX21rZGlyYXJnc19zegkoTkZTM19kaXJvcGFyZ3Nfc3orTkZTM19zYXR0cl9zeikKICNkZWZpbmUgTkZTM19zeW1saW5rYXJnc19zegkoTkZTM19kaXJvcGFyZ3Nfc3orMStORlMzX3NhdHRyX3N6KQogI2RlZmluZSBORlMzX21rbm9kYXJnc19zegkoTkZTM19kaXJvcGFyZ3Nfc3orMitORlMzX3NhdHRyX3N6KQorI2RlZmluZSBORlMzX3JlbW92ZWFyZ3Nfc3oJKE5GUzNfZmhfc3orTkZTM19maWxlbmFtZV9zeikKICNkZWZpbmUgTkZTM19yZW5hbWVhcmdzX3N6CShORlMzX2Rpcm9wYXJnc19zeitORlMzX2Rpcm9wYXJnc19zeikKICNkZWZpbmUgTkZTM19saW5rYXJnc19zegkJKE5GUzNfZmhfc3orTkZTM19kaXJvcGFyZ3Nfc3opCi0jZGVmaW5lIE5GUzNfcmVhZGRpcmFyZ3Nfc3oJKE5GUzNfZmhfc3orMikKKyNkZWZpbmUgTkZTM19yZWFkZGlyYXJnc19zegkoTkZTM19maF9zeitORlMzX2Nvb2tpZXZlcmZfc3orMykKKyNkZWZpbmUgTkZTM19yZWFkZGlycGx1c2FyZ3Nfc3oJKE5GUzNfZmhfc3orTkZTM19jb29raWV2ZXJmX3N6KzQpCiAjZGVmaW5lIE5GUzNfY29tbWl0YXJnc19zegkoTkZTM19maF9zeiszKQogCi0jZGVmaW5lIE5GUzNfYXR0cnN0YXRfc3oJKDErTkZTM19mYXR0cl9zeikKLSNkZWZpbmUgTkZTM193Y2NzdGF0X3N6CQkoMStORlMzX3djY19kYXRhX3N6KQotI2RlZmluZSBORlMzX3JlbW92ZXJlc19zegkoTkZTM193Y2NzdGF0X3N6KQorI2RlZmluZSBORlMzX2dldGF0dHJyZXNfc3oJKDErTkZTM19mYXR0cl9zeikKKyNkZWZpbmUgTkZTM19zZXRhdHRycmVzX3N6CSgxK05GUzNfd2NjX2RhdGFfc3opCisjZGVmaW5lIE5GUzNfcmVtb3ZlcmVzX3N6CShORlMzX3NldGF0dHJyZXNfc3opCiAjZGVmaW5lIE5GUzNfbG9va3VwcmVzX3N6CSgxK05GUzNfZmhfc3orKDIgKiBORlMzX3Bvc3Rfb3BfYXR0cl9zeikpCiAjZGVmaW5lIE5GUzNfYWNjZXNzcmVzX3N6CSgxK05GUzNfcG9zdF9vcF9hdHRyX3N6KzEpCiAjZGVmaW5lIE5GUzNfcmVhZGxpbmtyZXNfc3oJKDErTkZTM19wb3N0X29wX2F0dHJfc3orMSkKQEAgLTEwMCwxMDc5ICsxMDAsMjM2MiBAQAogCVtORjNGSUZPXSA9IFNfSUZJRk8sCiB9OwogCisvKgorICogV2hpbGUgZW5jb2RpbmcgYXJndW1lbnRzLCBzZXQgdXAgdGhlIHJlcGx5IGJ1ZmZlciBpbiBhZHZhbmNlIHRvCisgKiByZWNlaXZlIHJlcGx5IGRhdGEgZGlyZWN0bHkgaW50byB0aGUgcGFnZSBjYWNoZS4KKyAqLworc3RhdGljIHZvaWQgcHJlcGFyZV9yZXBseV9idWZmZXIoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCBwYWdlICoqcGFnZXMsCisJCQkJIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCSB1bnNpZ25lZCBpbnQgYnVmc2l6ZSkKK3sKKwlzdHJ1Y3QgcnBjX2F1dGgJKmF1dGggPSByZXEtPnJxX2NyZWQtPmNyX2F1dGg7CisJdW5zaWduZWQgaW50IHJlcGxlbjsKKworCXJlcGxlbiA9IFJQQ19SRVBIRFJTSVpFICsgYXV0aC0+YXVfcnNsYWNrICsgYnVmc2l6ZTsKKwl4ZHJfaW5saW5lX3BhZ2VzKCZyZXEtPnJxX3Jjdl9idWYsIHJlcGxlbiA8PCAyLCBwYWdlcywgYmFzZSwgbGVuKTsKK30KKworLyoKKyAqIEhhbmRsZSBkZWNvZGUgYnVmZmVyIG92ZXJmbG93cyBvdXQtb2YtbGluZS4KKyAqLwogc3RhdGljIHZvaWQgcHJpbnRfb3ZlcmZsb3dfbXNnKGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIpCiB7Ci0JZHByaW50aygibmZzOiAlczogcHJlbWF0dXJlbHkgaGl0IGVuZCBvZiByZWNlaXZlIGJ1ZmZlci4gIgorCWRwcmludGsoIk5GUzogJXMgcHJlbWF0dXJlbHkgaGl0IHRoZSBlbmQgb2Ygb3VyIHJlY2VpdmUgYnVmZmVyLiAiCiAJCSJSZW1haW5pbmcgYnVmZmVyIGxlbmd0aCBpcyAldHUgd29yZHMuXG4iLAogCQlmdW5jLCB4ZHItPmVuZCAtIHhkci0+cCk7CiB9CiAKKwogLyoKLSAqIENvbW1vbiBORlMgWERSIGZ1bmN0aW9ucyBhcyBpbmxpbmVzCisgKiBFbmNvZGUvZGVjb2RlIE5GU3YzIGJhc2ljIGRhdGEgdHlwZXMKKyAqCisgKiBCYXNpYyBORlN2MyBkYXRhIHR5cGVzIGFyZSBkZWZpbmVkIGluIHNlY3Rpb24gMi41IG9mIFJGQyAxODEzOgorICogIk5GUyBWZXJzaW9uIDMgUHJvdG9jb2wgU3BlY2lmaWNhdGlvbiIuCisgKgorICogTm90IGFsbCBiYXNpYyBkYXRhIHR5cGVzIGhhdmUgdGhlaXIgb3duIGVuY29kaW5nIGFuZCBkZWNvZGluZworICogZnVuY3Rpb25zLiAgRm9yIHJ1bi10aW1lIGVmZmljaWVuY3ksIHNvbWUgZGF0YSB0eXBlcyBhcmUgZW5jb2RlZAorICogb3IgZGVjb2RlZCBpbmxpbmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgX19iZTMyICoKLXhkcl9lbmNvZGVfZmhhbmRsZShfX2JlMzIgKnAsIGNvbnN0IHN0cnVjdCBuZnNfZmggKmZoKQorCitzdGF0aWMgdm9pZCBlbmNvZGVfdWludDMyKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHUzMiB2YWx1ZSkKIHsKLQlyZXR1cm4geGRyX2VuY29kZV9hcnJheShwLCBmaC0+ZGF0YSwgZmgtPnNpemUpOworCV9fYmUzMiAqcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgNCk7CisJKnAgPSBjcHVfdG9fYmUzMih2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19iZTMyICoKLXhkcl9kZWNvZGVfZmhhbmRsZShfX2JlMzIgKnAsIHN0cnVjdCBuZnNfZmggKmZoKQotewotCWlmICgoZmgtPnNpemUgPSBudG9obCgqcCsrKSkgPD0gTkZTM19GSFNJWkUpIHsKLQkJbWVtY3B5KGZoLT5kYXRhLCBwLCBmaC0+c2l6ZSk7Ci0JCXJldHVybiBwICsgWERSX1FVQURMRU4oZmgtPnNpemUpOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSBfX2JlMzIgKgoteGRyX2RlY29kZV9maGFuZGxlX3N0cmVhbShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzX2ZoICpmaCkKK3N0YXRpYyBpbnQgZGVjb2RlX3VpbnQzMihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1MzIgKnZhbHVlKQogewogCV9fYmUzMiAqcDsKKwogCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOwotCWlmICh1bmxpa2VseSghcCkpCisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCiAJCWdvdG8gb3V0X292ZXJmbG93OwotCWZoLT5zaXplID0gbnRvaGwoKnArKyk7Ci0KLQlpZiAoZmgtPnNpemUgPD0gTkZTM19GSFNJWkUpIHsKLQkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgZmgtPnNpemUpOwotCQlpZiAodW5saWtlbHkoIXApKQotCQkJZ290byBvdXRfb3ZlcmZsb3c7Ci0JCW1lbWNweShmaC0+ZGF0YSwgcCwgZmgtPnNpemUpOwotCQlyZXR1cm4gcCArIFhEUl9RVUFETEVOKGZoLT5zaXplKTsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci0KKwkqdmFsdWUgPSBiZTMyX3RvX2NwdXAocCk7CisJcmV0dXJuIDA7CiBvdXRfb3ZlcmZsb3c6CiAJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOwotCXJldHVybiBFUlJfUFRSKC1FSU8pOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGRlY29kZV91aW50NjQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdTY0ICp2YWx1ZSkKK3sKKwlfX2JlMzIgKnA7CisKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA4KTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJeGRyX2RlY29kZV9oeXBlcihwLCB2YWx1ZSk7CisJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCiAvKgotICogRW5jb2RlL2RlY29kZSB0aW1lLgorICogZmlsZWlkMworICoKKyAqCXR5cGVkZWYgdWludDY0IGZpbGVpZDM7CiAgKi8KLXN0YXRpYyBpbmxpbmUgX19iZTMyICoKLXhkcl9lbmNvZGVfdGltZTMoX19iZTMyICpwLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVwKQorc3RhdGljIF9fYmUzMiAqeGRyX2RlY29kZV9maWxlaWQzKF9fYmUzMiAqcCwgdTY0ICpmaWxlaWQpCiB7Ci0JKnArKyA9IGh0b25sKHRpbWVwLT50dl9zZWMpOwotCSpwKysgPSBodG9ubCh0aW1lcC0+dHZfbnNlYyk7Ci0JcmV0dXJuIHA7CisJcmV0dXJuIHhkcl9kZWNvZGVfaHlwZXIocCwgZmlsZWlkKTsKIH0KIAotc3RhdGljIGlubGluZSBfX2JlMzIgKgoteGRyX2RlY29kZV90aW1lMyhfX2JlMzIgKnAsIHN0cnVjdCB0aW1lc3BlYyAqdGltZXApCitzdGF0aWMgaW50IGRlY29kZV9maWxlaWQzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHU2NCAqZmlsZWlkKQogewotCXRpbWVwLT50dl9zZWMgPSBudG9obCgqcCsrKTsKLQl0aW1lcC0+dHZfbnNlYyA9IG50b2hsKCpwKyspOwotCXJldHVybiBwOworCXJldHVybiBkZWNvZGVfdWludDY0KHhkciwgZmlsZWlkKTsKIH0KIAotc3RhdGljIF9fYmUzMiAqCi14ZHJfZGVjb2RlX2ZhdHRyKF9fYmUzMiAqcCwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCisvKgorICogZmlsZW5hbWUzCisgKgorICoJdHlwZWRlZiBzdHJpbmcgZmlsZW5hbWUzPD47CisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV9maWxlbmFtZTMoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgdTMyIGxlbmd0aCkKIHsKLQl1bnNpZ25lZCBpbnQJdHlwZSwgbWFqb3IsIG1pbm9yOwotCXVtb2RlX3QJCWZtb2RlOworCV9fYmUzMiAqcDsKIAotCXR5cGUgPSBudG9obCgqcCsrKTsKKwlCVUdfT04obGVuZ3RoID4gTkZTM19NQVhOQU1MRU4pOworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyBsZW5ndGgpOworCXhkcl9lbmNvZGVfb3BhcXVlKHAsIG5hbWUsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX2lubGluZV9maWxlbmFtZTMoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICBjb25zdCBjaGFyICoqbmFtZSwgdTMyICpsZW5ndGgpCit7CisJX19iZTMyICpwOworCXUzMiBjb3VudDsKKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwljb3VudCA9IGJlMzJfdG9fY3B1cChwKTsKKwlpZiAoY291bnQgPiBORlMzX01BWE5BTUxFTikKKwkJZ290byBvdXRfbmFtZXRvb2xvbmc7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgY291bnQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwkqbmFtZSA9IChjb25zdCBjaGFyICopcDsKKwkqbGVuZ3RoID0gY291bnQ7CisJcmV0dXJuIDA7CisKK291dF9uYW1ldG9vbG9uZzoKKwlkcHJpbnRrKCJORlM6IHJldHVybmVkIGZpbGVuYW1lIHRvbyBsb25nOiAldVxuIiwgY291bnQpOworCXJldHVybiAtRU5BTUVUT09MT05HOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKK30KKworLyoKKyAqIG5mc3BhdGgzCisgKgorICoJdHlwZWRlZiBzdHJpbmcgbmZzcGF0aDM8PjsKKyAqLworc3RhdGljIHZvaWQgZW5jb2RlX25mc3BhdGgzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBwYWdlICoqcGFnZXMsCisJCQkgICAgY29uc3QgdTMyIGxlbmd0aCkKK3sKKwlCVUdfT04obGVuZ3RoID4gTkZTM19NQVhQQVRITEVOKTsKKwllbmNvZGVfdWludDMyKHhkciwgbGVuZ3RoKTsKKwl4ZHJfd3JpdGVfcGFnZXMoeGRyLCBwYWdlcywgMCwgbGVuZ3RoKTsKK30KKworc3RhdGljIGludCBkZWNvZGVfbmZzcGF0aDMoc3RydWN0IHhkcl9zdHJlYW0gKnhkcikKK3sKKwl1MzIgcmVjdmQsIGNvdW50OworCXNpemVfdCBoZHJsZW47CisJX19iZTMyICpwOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWNvdW50ID0gYmUzMl90b19jcHVwKHApOworCWlmICh1bmxpa2VseShjb3VudCA+PSB4ZHItPmJ1Zi0+cGFnZV9sZW4gfHwgY291bnQgPiBORlMzX01BWFBBVEhMRU4pKQorCQlnb3RvIG91dF9uYW1ldG9vbG9uZzsKKwloZHJsZW4gPSAodTggKil4ZHItPnAgLSAodTggKil4ZHItPmlvdi0+aW92X2Jhc2U7CisJcmVjdmQgPSB4ZHItPmJ1Zi0+bGVuIC0gaGRybGVuOworCWlmICh1bmxpa2VseShjb3VudCA+IHJlY3ZkKSkKKwkJZ290byBvdXRfY2hlYXRpbmc7CisKKwl4ZHJfcmVhZF9wYWdlcyh4ZHIsIGNvdW50KTsKKwl4ZHJfdGVybWluYXRlX3N0cmluZyh4ZHItPmJ1ZiwgY291bnQpOworCXJldHVybiAwOworCitvdXRfbmFtZXRvb2xvbmc6CisJZHByaW50aygiTkZTOiByZXR1cm5lZCBwYXRobmFtZSB0b28gbG9uZzogJXVcbiIsIGNvdW50KTsKKwlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKK291dF9jaGVhdGluZzoKKwlkcHJpbnRrKCJORlM6IHNlcnZlciBjaGVhdGluZyBpbiBwYXRobmFtZSByZXN1bHQ6ICIKKwkJImNvdW50ICV1ID4gcmVjdmQgJXVcbiIsIGNvdW50LCByZWN2ZCk7CisJcmV0dXJuIC1FSU87CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOworfQorCisvKgorICogY29va2llMworICoKKyAqCXR5cGVkZWYgdWludDY0IGNvb2tpZTMKKyAqLworc3RhdGljIF9fYmUzMiAqeGRyX2VuY29kZV9jb29raWUzKF9fYmUzMiAqcCwgdTY0IGNvb2tpZSkKK3sKKwlyZXR1cm4geGRyX2VuY29kZV9oeXBlcihwLCBjb29raWUpOworfQorCitzdGF0aWMgaW50IGRlY29kZV9jb29raWUzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHU2NCAqY29va2llKQoreworCXJldHVybiBkZWNvZGVfdWludDY0KHhkciwgY29va2llKTsKK30KKworLyoKKyAqIGNvb2tpZXZlcmYzCisgKgorICoJdHlwZWRlZiBvcGFxdWUgY29va2lldmVyZjNbTkZTM19DT09LSUVWRVJGU0laRV07CisgKi8KK3N0YXRpYyBfX2JlMzIgKnhkcl9lbmNvZGVfY29va2lldmVyZjMoX19iZTMyICpwLCBjb25zdCBfX2JlMzIgKnZlcmlmaWVyKQoreworCW1lbWNweShwLCB2ZXJpZmllciwgTkZTM19DT09LSUVWRVJGU0laRSk7CisJcmV0dXJuIHAgKyBYRFJfUVVBRExFTihORlMzX0NPT0tJRVZFUkZTSVpFKTsKK30KKworc3RhdGljIGludCBkZWNvZGVfY29va2lldmVyZjMoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgX19iZTMyICp2ZXJpZmllcikKK3sKKwlfX2JlMzIgKnA7CisKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBORlMzX0NPT0tJRVZFUkZTSVpFKTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJbWVtY3B5KHZlcmlmaWVyLCBwLCBORlMzX0NPT0tJRVZFUkZTSVpFKTsKKwlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qCisgKiBjcmVhdGV2ZXJmMworICoKKyAqCXR5cGVkZWYgb3BhcXVlIGNyZWF0ZXZlcmYzW05GUzNfQ1JFQVRFVkVSRlNJWkVdOworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfY3JlYXRldmVyZjMoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3QgX19iZTMyICp2ZXJpZmllcikKK3sKKwlfX2JlMzIgKnA7CisKKwlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCBORlMzX0NSRUFURVZFUkZTSVpFKTsKKwltZW1jcHkocCwgdmVyaWZpZXIsIE5GUzNfQ1JFQVRFVkVSRlNJWkUpOworfQorCitzdGF0aWMgaW50IGRlY29kZV93cml0ZXZlcmYzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIF9fYmUzMiAqdmVyaWZpZXIpCit7CisJX19iZTMyICpwOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgTkZTM19XUklURVZFUkZTSVpFKTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJbWVtY3B5KHZlcmlmaWVyLCBwLCBORlMzX1dSSVRFVkVSRlNJWkUpOworCXJldHVybiAwOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKK30KKworLyoKKyAqIHNpemUzCisgKgorICoJdHlwZWRlZiB1aW50NjQgc2l6ZTM7CisgKi8KK3N0YXRpYyBfX2JlMzIgKnhkcl9kZWNvZGVfc2l6ZTMoX19iZTMyICpwLCB1NjQgKnNpemUpCit7CisJcmV0dXJuIHhkcl9kZWNvZGVfaHlwZXIocCwgc2l6ZSk7Cit9CisKKy8qCisgKiBuZnNzdGF0MworICoKKyAqCWVudW0gbmZzc3RhdDMgeworICoJCU5GUzNfT0sgPSAwLAorICoJCS4uLgorICoJfQorICovCisjZGVmaW5lIE5GUzNfT0sJCU5GU19PSworCitzdGF0aWMgaW50IGRlY29kZV9uZnNzdGF0MyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBlbnVtIG5mc19zdGF0ICpzdGF0dXMpCit7CisJX19iZTMyICpwOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCSpzdGF0dXMgPSBiZTMyX3RvX2NwdXAocCk7CisJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOworfQorCisvKgorICogZnR5cGUzCisgKgorICoJZW51bSBmdHlwZTMgeworICoJCU5GM1JFRwk9IDEsCisgKgkJTkYzRElSCT0gMiwKKyAqCQlORjNCTEsJPSAzLAorICoJCU5GM0NIUgk9IDQsCisgKgkJTkYzTE5LCT0gNSwKKyAqCQlORjNTT0NLCT0gNiwKKyAqCQlORjNGSUZPCT0gNworICoJfTsKKyAqLworc3RhdGljIHZvaWQgZW5jb2RlX2Z0eXBlMyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCB1MzIgdHlwZSkKK3sKKwlCVUdfT04odHlwZSA+IE5GM0ZJRk8pOworCWVuY29kZV91aW50MzIoeGRyLCB0eXBlKTsKK30KKworc3RhdGljIF9fYmUzMiAqeGRyX2RlY29kZV9mdHlwZTMoX19iZTMyICpwLCB1bW9kZV90ICptb2RlKQoreworCXUzMiB0eXBlOworCisJdHlwZSA9IGJlMzJfdG9fY3B1cChwKyspOwogCWlmICh0eXBlID4gTkYzRklGTykKIAkJdHlwZSA9IE5GM05PTjsKLQlmbW9kZSA9IG5mc190eXBlMmZtdFt0eXBlXTsKLQlmYXR0ci0+bW9kZSA9IChudG9obCgqcCsrKSAmIH5TX0lGTVQpIHwgZm1vZGU7Ci0JZmF0dHItPm5saW5rID0gbnRvaGwoKnArKyk7Ci0JZmF0dHItPnVpZCA9IG50b2hsKCpwKyspOwotCWZhdHRyLT5naWQgPSBudG9obCgqcCsrKTsKLQlwID0geGRyX2RlY29kZV9oeXBlcihwLCAmZmF0dHItPnNpemUpOwotCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZmYXR0ci0+ZHUubmZzMy51c2VkKTsKKwkqbW9kZSA9IG5mc190eXBlMmZtdFt0eXBlXTsKKwlyZXR1cm4gcDsKK30KIAotCS8qIFR1cm4gcmVtb3RlIGRldmljZSBpbmZvIGludG8gTGludXgtc3BlY2lmaWMgZGV2X3QgKi8KLQltYWpvciA9IG50b2hsKCpwKyspOwotCW1pbm9yID0gbnRvaGwoKnArKyk7Ci0JZmF0dHItPnJkZXYgPSBNS0RFVihtYWpvciwgbWlub3IpOwotCWlmIChNQUpPUihmYXR0ci0+cmRldikgIT0gbWFqb3IgfHwgTUlOT1IoZmF0dHItPnJkZXYpICE9IG1pbm9yKQotCQlmYXR0ci0+cmRldiA9IDA7CisvKgorICogc3BlY2RhdGEzCisgKgorICogICAgIHN0cnVjdCBzcGVjZGF0YTMgeworICogICAgICAgICAgICAgdWludDMyICBzcGVjZGF0YTE7CisgKiAgICAgICAgICAgICB1aW50MzIgIHNwZWNkYXRhMjsKKyAqICAgICB9OworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfc3BlY2RhdGEzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IGRldl90IHJkZXYpCit7CisJX19iZTMyICpwOworCisJcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgOCk7CisJKnArKyA9IGNwdV90b19iZTMyKE1BSk9SKHJkZXYpKTsKKwkqcCA9IGNwdV90b19iZTMyKE1JTk9SKHJkZXYpKTsKK30KKworc3RhdGljIF9fYmUzMiAqeGRyX2RlY29kZV9zcGVjZGF0YTMoX19iZTMyICpwLCBkZXZfdCAqcmRldikKK3sKKwl1bnNpZ25lZCBpbnQgbWFqb3IsIG1pbm9yOworCisJbWFqb3IgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwltaW5vciA9IGJlMzJfdG9fY3B1cChwKyspOworCSpyZGV2ID0gTUtERVYobWFqb3IsIG1pbm9yKTsKKwlpZiAoTUFKT1IoKnJkZXYpICE9IG1ham9yIHx8IE1JTk9SKCpyZGV2KSAhPSBtaW5vcikKKwkJKnJkZXYgPSAwOworCXJldHVybiBwOworfQorCisvKgorICogbmZzX2ZoMworICoKKyAqCXN0cnVjdCBuZnNfZmgzIHsKKyAqCQlvcGFxdWUgICAgICAgZGF0YTxORlMzX0ZIU0laRT47CisgKgl9OworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfbmZzX2ZoMyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCBzdHJ1Y3QgbmZzX2ZoICpmaCkKK3sKKwlfX2JlMzIgKnA7CisKKwlCVUdfT04oZmgtPnNpemUgPiBORlMzX0ZIU0laRSk7CisJcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgNCArIGZoLT5zaXplKTsKKwl4ZHJfZW5jb2RlX29wYXF1ZShwLCBmaC0+ZGF0YSwgZmgtPnNpemUpOworfQorCitzdGF0aWMgaW50IGRlY29kZV9uZnNfZmgzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnNfZmggKmZoKQoreworCXUzMiBsZW5ndGg7CisJX19iZTMyICpwOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWxlbmd0aCA9IGJlMzJfdG9fY3B1cChwKyspOworCWlmICh1bmxpa2VseShsZW5ndGggPiBORlMzX0ZIU0laRSkpCisJCWdvdG8gb3V0X3Rvb2JpZzsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBsZW5ndGgpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlmaC0+c2l6ZSA9IGxlbmd0aDsKKwltZW1jcHkoZmgtPmRhdGEsIHAsIGxlbmd0aCk7CisJcmV0dXJuIDA7CitvdXRfdG9vYmlnOgorCWRwcmludGsoIk5GUzogZmlsZSBoYW5kbGUgc2l6ZSAoJXUpIHRvbyBiaWdcbiIsIGxlbmd0aCk7CisJcmV0dXJuIC1FMkJJRzsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB2b2lkIHplcm9fbmZzX2ZoMyhzdHJ1Y3QgbmZzX2ZoICpmaCkKK3sKKwltZW1zZXQoZmgsIDAsIHNpemVvZigqZmgpKTsKK30KKworLyoKKyAqIG5mc3RpbWUzCisgKgorICoJc3RydWN0IG5mc3RpbWUzIHsKKyAqCQl1aW50MzIJc2Vjb25kczsKKyAqCQl1aW50MzIJbnNlY29uZHM7CisgKgl9OworICovCitzdGF0aWMgX19iZTMyICp4ZHJfZW5jb2RlX25mc3RpbWUzKF9fYmUzMiAqcCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0aW1lcCkKK3sKKwkqcCsrID0gY3B1X3RvX2JlMzIodGltZXAtPnR2X3NlYyk7CisJKnArKyA9IGNwdV90b19iZTMyKHRpbWVwLT50dl9uc2VjKTsKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIF9fYmUzMiAqeGRyX2RlY29kZV9uZnN0aW1lMyhfX2JlMzIgKnAsIHN0cnVjdCB0aW1lc3BlYyAqdGltZXApCit7CisJdGltZXAtPnR2X3NlYyA9IGJlMzJfdG9fY3B1cChwKyspOworCXRpbWVwLT50dl9uc2VjID0gYmUzMl90b19jcHVwKHArKyk7CisJcmV0dXJuIHA7Cit9CisKKy8qCisgKiBzYXR0cjMKKyAqCisgKgllbnVtIHRpbWVfaG93IHsKKyAqCQlET05UX0NIQU5HRQkJPSAwLAorICoJCVNFVF9UT19TRVJWRVJfVElNRQk9IDEsCisgKgkJU0VUX1RPX0NMSUVOVF9USU1FCT0gMgorICoJfTsKKyAqCisgKgl1bmlvbiBzZXRfbW9kZTMgc3dpdGNoIChib29sIHNldF9pdCkgeworICoJY2FzZSBUUlVFOgorICoJCW1vZGUzCW1vZGU7CisgKglkZWZhdWx0OgorICoJCXZvaWQ7CisgKgl9OworICoKKyAqCXVuaW9uIHNldF91aWQzIHN3aXRjaCAoYm9vbCBzZXRfaXQpIHsKKyAqCWNhc2UgVFJVRToKKyAqCQl1aWQzCXVpZDsKKyAqCWRlZmF1bHQ6CisgKgkJdm9pZDsKKyAqCX07CisgKgorICoJdW5pb24gc2V0X2dpZDMgc3dpdGNoIChib29sIHNldF9pdCkgeworICoJY2FzZSBUUlVFOgorICoJCWdpZDMJZ2lkOworICoJZGVmYXVsdDoKKyAqCQl2b2lkOworICoJfTsKKyAqCisgKgl1bmlvbiBzZXRfc2l6ZTMgc3dpdGNoIChib29sIHNldF9pdCkgeworICoJY2FzZSBUUlVFOgorICoJCXNpemUzCXNpemU7CisgKglkZWZhdWx0OgorICoJCXZvaWQ7CisgKgl9OworICoKKyAqCXVuaW9uIHNldF9hdGltZSBzd2l0Y2ggKHRpbWVfaG93IHNldF9pdCkgeworICoJY2FzZSBTRVRfVE9fQ0xJRU5UX1RJTUU6CisgKgkJbmZzdGltZTMJYXRpbWU7CisgKglkZWZhdWx0OgorICoJCXZvaWQ7CisgKgl9OworICoKKyAqCXVuaW9uIHNldF9tdGltZSBzd2l0Y2ggKHRpbWVfaG93IHNldF9pdCkgeworICoJY2FzZSBTRVRfVE9fQ0xJRU5UX1RJTUU6CisgKgkJbmZzdGltZTMgIG10aW1lOworICoJZGVmYXVsdDoKKyAqCQl2b2lkOworICoJfTsKKyAqCisgKglzdHJ1Y3Qgc2F0dHIzIHsKKyAqCQlzZXRfbW9kZTMJbW9kZTsKKyAqCQlzZXRfdWlkMwl1aWQ7CisgKgkJc2V0X2dpZDMJZ2lkOworICoJCXNldF9zaXplMwlzaXplOworICoJCXNldF9hdGltZQlhdGltZTsKKyAqCQlzZXRfbXRpbWUJbXRpbWU7CisgKgl9OworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfc2F0dHIzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IHN0cnVjdCBpYXR0ciAqYXR0cikKK3sKKwl1MzIgbmJ5dGVzOworCV9fYmUzMiAqcDsKKworCS8qCisJICogSW4gb3JkZXIgdG8gbWFrZSBvbmx5IGEgc2luZ2xlIHhkcl9yZXNlcnZlX3NwYWNlKCkgY2FsbCwKKwkgKiBwcmUtY29tcHV0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlc2VydmVkLgorCSAqIFNpeCBib29sZWFuIHZhbHVlcywgb25lIGZvciBlYWNoIHNldF9mb28gZmllbGQsIGFyZSBhbHdheXMKKwkgKiBwcmVzZW50IGluIHRoZSBlbmNvZGVkIHJlc3VsdCwgc28gc3RhcnQgdGhlcmUuCisJICovCisJbmJ5dGVzID0gNiAqIDQ7CisJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKQorCQluYnl0ZXMgKz0gNDsKKwlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1VJRCkKKwkJbmJ5dGVzICs9IDQ7CisJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQpCisJCW5ieXRlcyArPSA0OworCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkKKwkJbmJ5dGVzICs9IDg7CisJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9BVElNRV9TRVQpCisJCW5ieXRlcyArPSA4OworCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfTVRJTUVfU0VUKQorCQluYnl0ZXMgKz0gODsKKwlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCBuYnl0ZXMpOworCisJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSB7CisJCSpwKysgPSB4ZHJfb25lOworCQkqcCsrID0gY3B1X3RvX2JlMzIoYXR0ci0+aWFfbW9kZSAmIFNfSUFMTFVHTyk7CisJfSBlbHNlCisJCSpwKysgPSB4ZHJfemVybzsKKworCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfVUlEKSB7CisJCSpwKysgPSB4ZHJfb25lOworCQkqcCsrID0gY3B1X3RvX2JlMzIoYXR0ci0+aWFfdWlkKTsKKwl9IGVsc2UKKwkJKnArKyA9IHhkcl96ZXJvOworCisJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQpIHsKKwkJKnArKyA9IHhkcl9vbmU7CisJCSpwKysgPSBjcHVfdG9fYmUzMihhdHRyLT5pYV9naWQpOworCX0gZWxzZQorCQkqcCsrID0geGRyX3plcm87CisKKwlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKKwkJKnArKyA9IHhkcl9vbmU7CisJCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsICh1NjQpYXR0ci0+aWFfc2l6ZSk7CisJfSBlbHNlCisJCSpwKysgPSB4ZHJfemVybzsKKworCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfQVRJTUVfU0VUKSB7CisJCSpwKysgPSB4ZHJfdHdvOworCQlwID0geGRyX2VuY29kZV9uZnN0aW1lMyhwLCAmYXR0ci0+aWFfYXRpbWUpOworCX0gZWxzZSBpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0FUSU1FKSB7CisJCSpwKysgPSB4ZHJfb25lOworCX0gZWxzZQorCQkqcCsrID0geGRyX3plcm87CisKKwlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01USU1FX1NFVCkgeworCQkqcCsrID0geGRyX3R3bzsKKwkJeGRyX2VuY29kZV9uZnN0aW1lMyhwLCAmYXR0ci0+aWFfbXRpbWUpOworCX0gZWxzZSBpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01USU1FKSB7CisJCSpwID0geGRyX29uZTsKKwl9IGVsc2UKKwkJKnAgPSB4ZHJfemVybzsKK30KKworLyoKKyAqIGZhdHRyMworICoKKyAqCXN0cnVjdCBmYXR0cjMgeworICoJCWZ0eXBlMwkJdHlwZTsKKyAqCQltb2RlMwkJbW9kZTsKKyAqCQl1aW50MzIJCW5saW5rOworICoJCXVpZDMJCXVpZDsKKyAqCQlnaWQzCQlnaWQ7CisgKgkJc2l6ZTMJCXNpemU7CisgKgkJc2l6ZTMJCXVzZWQ7CisgKgkJc3BlY2RhdGEzCXJkZXY7CisgKgkJdWludDY0CQlmc2lkOworICoJCWZpbGVpZDMJCWZpbGVpZDsKKyAqCQluZnN0aW1lMwlhdGltZTsKKyAqCQluZnN0aW1lMwltdGltZTsKKyAqCQluZnN0aW1lMwljdGltZTsKKyAqCX07CisgKi8KK3N0YXRpYyBpbnQgZGVjb2RlX2ZhdHRyMyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3sKKwl1bW9kZV90IGZtb2RlOworCV9fYmUzMiAqcDsKKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIE5GUzNfZmF0dHJfc3ogPDwgMik7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCisJcCA9IHhkcl9kZWNvZGVfZnR5cGUzKHAsICZmbW9kZSk7CisKKwlmYXR0ci0+bW9kZSA9IChiZTMyX3RvX2NwdXAocCsrKSAmIH5TX0lGTVQpIHwgZm1vZGU7CisJZmF0dHItPm5saW5rID0gYmUzMl90b19jcHVwKHArKyk7CisJZmF0dHItPnVpZCA9IGJlMzJfdG9fY3B1cChwKyspOworCWZhdHRyLT5naWQgPSBiZTMyX3RvX2NwdXAocCsrKTsKKworCXAgPSB4ZHJfZGVjb2RlX3NpemUzKHAsICZmYXR0ci0+c2l6ZSk7CisJcCA9IHhkcl9kZWNvZGVfc2l6ZTMocCwgJmZhdHRyLT5kdS5uZnMzLnVzZWQpOworCXAgPSB4ZHJfZGVjb2RlX3NwZWNkYXRhMyhwLCAmZmF0dHItPnJkZXYpOwogCiAJcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJmZhdHRyLT5mc2lkLm1ham9yKTsKIAlmYXR0ci0+ZnNpZC5taW5vciA9IDA7Ci0JcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJmZhdHRyLT5maWxlaWQpOwotCXAgPSB4ZHJfZGVjb2RlX3RpbWUzKHAsICZmYXR0ci0+YXRpbWUpOwotCXAgPSB4ZHJfZGVjb2RlX3RpbWUzKHAsICZmYXR0ci0+bXRpbWUpOwotCXAgPSB4ZHJfZGVjb2RlX3RpbWUzKHAsICZmYXR0ci0+Y3RpbWUpOwogCi0JLyogVXBkYXRlIHRoZSBtb2RlIGJpdHMgKi8KKwlwID0geGRyX2RlY29kZV9maWxlaWQzKHAsICZmYXR0ci0+ZmlsZWlkKTsKKwlwID0geGRyX2RlY29kZV9uZnN0aW1lMyhwLCAmZmF0dHItPmF0aW1lKTsKKwlwID0geGRyX2RlY29kZV9uZnN0aW1lMyhwLCAmZmF0dHItPm10aW1lKTsKKwl4ZHJfZGVjb2RlX25mc3RpbWUzKHAsICZmYXR0ci0+Y3RpbWUpOworCiAJZmF0dHItPnZhbGlkIHw9IE5GU19BVFRSX0ZBVFRSX1YzOwotCXJldHVybiBwOworCXJldHVybiAwOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAotc3RhdGljIGlubGluZSBfX2JlMzIgKgoteGRyX2VuY29kZV9zYXR0cihfX2JlMzIgKnAsIHN0cnVjdCBpYXR0ciAqYXR0cikKKy8qCisgKiBwb3N0X29wX2F0dHIKKyAqCisgKgl1bmlvbiBwb3N0X29wX2F0dHIgc3dpdGNoIChib29sIGF0dHJpYnV0ZXNfZm9sbG93KSB7CisgKgljYXNlIFRSVUU6CisgKgkJZmF0dHIzCWF0dHJpYnV0ZXM7CisgKgljYXNlIEZBTFNFOgorICoJCXZvaWQ7CisgKgl9OworICovCitzdGF0aWMgaW50IGRlY29kZV9wb3N0X29wX2F0dHIoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCiB7Ci0JaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSB7Ci0JCSpwKysgPSB4ZHJfb25lOwotCQkqcCsrID0gaHRvbmwoYXR0ci0+aWFfbW9kZSAmIFNfSUFMTFVHTyk7Ci0JfSBlbHNlIHsKLQkJKnArKyA9IHhkcl96ZXJvOwotCX0KLQlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1VJRCkgewotCQkqcCsrID0geGRyX29uZTsKLQkJKnArKyA9IGh0b25sKGF0dHItPmlhX3VpZCk7Ci0JfSBlbHNlIHsKLQkJKnArKyA9IHhkcl96ZXJvOwotCX0KLQlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCkgewotCQkqcCsrID0geGRyX29uZTsKLQkJKnArKyA9IGh0b25sKGF0dHItPmlhX2dpZCk7Ci0JfSBlbHNlIHsKLQkJKnArKyA9IHhkcl96ZXJvOwotCX0KLQlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKLQkJKnArKyA9IHhkcl9vbmU7Ci0JCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIChfX3U2NCkgYXR0ci0+aWFfc2l6ZSk7Ci0JfSBlbHNlIHsKLQkJKnArKyA9IHhkcl96ZXJvOwotCX0KLQlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0FUSU1FX1NFVCkgewotCQkqcCsrID0geGRyX3R3bzsKLQkJcCA9IHhkcl9lbmNvZGVfdGltZTMocCwgJmF0dHItPmlhX2F0aW1lKTsKLQl9IGVsc2UgaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9BVElNRSkgewotCQkqcCsrID0geGRyX29uZTsKLQl9IGVsc2UgewotCQkqcCsrID0geGRyX3plcm87Ci0JfQotCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfTVRJTUVfU0VUKSB7Ci0JCSpwKysgPSB4ZHJfdHdvOwotCQlwID0geGRyX2VuY29kZV90aW1lMyhwLCAmYXR0ci0+aWFfbXRpbWUpOwotCX0gZWxzZSBpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01USU1FKSB7Ci0JCSpwKysgPSB4ZHJfb25lOwotCX0gZWxzZSB7Ci0JCSpwKysgPSB4ZHJfemVybzsKLQl9Ci0JcmV0dXJuIHA7CisJX19iZTMyICpwOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWlmICgqcCAhPSB4ZHJfemVybykKKwkJcmV0dXJuIGRlY29kZV9mYXR0cjMoeGRyLCBmYXR0cik7CisJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW5saW5lIF9fYmUzMiAqCi14ZHJfZGVjb2RlX3djY19hdHRyKF9fYmUzMiAqcCwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCisvKgorICogd2NjX2F0dHIKKyAqCXN0cnVjdCB3Y2NfYXR0ciB7CisgKgkJc2l6ZTMJCXNpemU7CisgKgkJbmZzdGltZTMJbXRpbWU7CisgKgkJbmZzdGltZTMJY3RpbWU7CisgKgl9OworICovCitzdGF0aWMgaW50IGRlY29kZV93Y2NfYXR0cihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKIHsKLQlwID0geGRyX2RlY29kZV9oeXBlcihwLCAmZmF0dHItPnByZV9zaXplKTsKLQlwID0geGRyX2RlY29kZV90aW1lMyhwLCAmZmF0dHItPnByZV9tdGltZSk7Ci0JcCA9IHhkcl9kZWNvZGVfdGltZTMocCwgJmZhdHRyLT5wcmVfY3RpbWUpOworCV9fYmUzMiAqcDsKKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIE5GUzNfd2NjX2F0dHJfc3ogPDwgMik7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCiAJZmF0dHItPnZhbGlkIHw9IE5GU19BVFRSX0ZBVFRSX1BSRVNJWkUKIAkJfCBORlNfQVRUUl9GQVRUUl9QUkVNVElNRQogCQl8IE5GU19BVFRSX0ZBVFRSX1BSRUNUSU1FOwotCXJldHVybiBwOworCisJcCA9IHhkcl9kZWNvZGVfc2l6ZTMocCwgJmZhdHRyLT5wcmVfc2l6ZSk7CisJcCA9IHhkcl9kZWNvZGVfbmZzdGltZTMocCwgJmZhdHRyLT5wcmVfbXRpbWUpOworCXhkcl9kZWNvZGVfbmZzdGltZTMocCwgJmZhdHRyLT5wcmVfY3RpbWUpOworCisJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW5saW5lIF9fYmUzMiAqCi14ZHJfZGVjb2RlX3Bvc3Rfb3BfYXR0cihfX2JlMzIgKnAsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQotewotCWlmICgqcCsrKQotCQlwID0geGRyX2RlY29kZV9mYXR0cihwLCBmYXR0cik7Ci0JcmV0dXJuIHA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19iZTMyICoKLXhkcl9kZWNvZGVfcG9zdF9vcF9hdHRyX3N0cmVhbShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKKy8qCisgKiBwcmVfb3BfYXR0cgorICoJdW5pb24gcHJlX29wX2F0dHIgc3dpdGNoIChib29sIGF0dHJpYnV0ZXNfZm9sbG93KSB7CisgKgljYXNlIFRSVUU6CisgKgkJd2NjX2F0dHIJYXR0cmlidXRlczsKKyAqCWNhc2UgRkFMU0U6CisgKgkJdm9pZDsKKyAqCX07CisgKgorICogd2NjX2RhdGEKKyAqCisgKglzdHJ1Y3Qgd2NjX2RhdGEgeworICoJCXByZV9vcF9hdHRyCWJlZm9yZTsKKyAqCQlwb3N0X29wX2F0dHIJYWZ0ZXI7CisgKgl9OworICovCitzdGF0aWMgaW50IGRlY29kZV9wcmVfb3BfYXR0cihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKIHsKIAlfX2JlMzIgKnA7CiAKIAlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKLQlpZiAodW5saWtlbHkoIXApKQorCWlmICh1bmxpa2VseShwID09IE5VTEwpKQogCQlnb3RvIG91dF9vdmVyZmxvdzsKLQlpZiAobnRvaGwoKnArKykpIHsKLQkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgODQpOwotCQlpZiAodW5saWtlbHkoIXApKQotCQkJZ290byBvdXRfb3ZlcmZsb3c7Ci0JCXAgPSB4ZHJfZGVjb2RlX2ZhdHRyKHAsIGZhdHRyKTsKLQl9Ci0JcmV0dXJuIHA7CisJaWYgKCpwICE9IHhkcl96ZXJvKQorCQlyZXR1cm4gZGVjb2RlX3djY19hdHRyKHhkciwgZmF0dHIpOworCXJldHVybiAwOwogb3V0X292ZXJmbG93OgogCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKLQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAotc3RhdGljIGlubGluZSBfX2JlMzIgKgoteGRyX2RlY29kZV9wcmVfb3BfYXR0cihfX2JlMzIgKnAsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQorc3RhdGljIGludCBkZWNvZGVfd2NjX2RhdGEoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCiB7Ci0JaWYgKCpwKyspCi0JCXJldHVybiB4ZHJfZGVjb2RlX3djY19hdHRyKHAsIGZhdHRyKTsKLQlyZXR1cm4gcDsKLX0KKwlpbnQgZXJyb3I7CiAKLQotc3RhdGljIGlubGluZSBfX2JlMzIgKgoteGRyX2RlY29kZV93Y2NfZGF0YShfX2JlMzIgKnAsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQotewotCXAgPSB4ZHJfZGVjb2RlX3ByZV9vcF9hdHRyKHAsIGZhdHRyKTsKLQlyZXR1cm4geGRyX2RlY29kZV9wb3N0X29wX2F0dHIocCwgZmF0dHIpOworCWVycm9yID0gZGVjb2RlX3ByZV9vcF9hdHRyKHhkciwgZmF0dHIpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gZGVjb2RlX3Bvc3Rfb3BfYXR0cih4ZHIsIGZhdHRyKTsKK291dDoKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qCi0gKiBORlMgZW5jb2RlIGZ1bmN0aW9ucworICogcG9zdF9vcF9maDMKKyAqCisgKgl1bmlvbiBwb3N0X29wX2ZoMyBzd2l0Y2ggKGJvb2wgaGFuZGxlX2ZvbGxvd3MpIHsKKyAqCWNhc2UgVFJVRToKKyAqCQluZnNfZmgzICBoYW5kbGU7CisgKgljYXNlIEZBTFNFOgorICoJCXZvaWQ7CisgKgl9OwogICovCi0KLS8qCi0gKiBFbmNvZGUgZmlsZSBoYW5kbGUgYXJndW1lbnQKLSAqLwotc3RhdGljIGludAotbmZzM194ZHJfZmhhbmRsZShzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX2ZoICpmaCkKK3N0YXRpYyBpbnQgZGVjb2RlX3Bvc3Rfb3BfZmgzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnNfZmggKmZoKQogewotCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgZmgpOwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKKwlfX2JlMzIgKnAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlpZiAoKnAgIT0geGRyX3plcm8pCisJCXJldHVybiBkZWNvZGVfbmZzX2ZoMyh4ZHIsIGZoKTsKKwl6ZXJvX25mc19maDMoZmgpOwogCXJldHVybiAwOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogLyoKLSAqIEVuY29kZSBTRVRBVFRSIGFyZ3VtZW50cworICogZGlyb3BhcmdzMworICoKKyAqCXN0cnVjdCBkaXJvcGFyZ3MzIHsKKyAqCQluZnNfZmgzCQlkaXI7CisgKgkJZmlsZW5hbWUzCW5hbWU7CisgKgl9OwogICovCi1zdGF0aWMgaW50Ci1uZnMzX3hkcl9zYXR0cmFyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mczNfc2F0dHJhcmdzICphcmdzKQorc3RhdGljIHZvaWQgZW5jb2RlX2Rpcm9wYXJnczMoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3Qgc3RydWN0IG5mc19maCAqZmgsCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCB1MzIgbGVuZ3RoKQogewotCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgYXJncy0+ZmgpOwotCXAgPSB4ZHJfZW5jb2RlX3NhdHRyKHAsIGFyZ3MtPnNhdHRyKTsKLQkqcCsrID0gaHRvbmwoYXJncy0+Z3VhcmQpOwotCWlmIChhcmdzLT5ndWFyZCkKLQkJcCA9IHhkcl9lbmNvZGVfdGltZTMocCwgJmFyZ3MtPmd1YXJkdGltZSk7Ci0JcmVxLT5ycV9zbGVuID0geGRyX2FkanVzdF9pb3ZlYyhyZXEtPnJxX3N2ZWMsIHApOwotCXJldHVybiAwOworCWVuY29kZV9uZnNfZmgzKHhkciwgZmgpOworCWVuY29kZV9maWxlbmFtZTMoeGRyLCBuYW1lLCBsZW5ndGgpOworfQorCisKKy8qCisgKiBORlN2MyBYRFIgZW5jb2RlIGZ1bmN0aW9ucworICoKKyAqIE5GU3YzIGFyZ3VtZW50IHR5cGVzIGFyZSBkZWZpbmVkIGluIHNlY3Rpb24gMy4zIG9mIFJGQyAxODEzOgorICogIk5GUyBWZXJzaW9uIDMgUHJvdG9jb2wgU3BlY2lmaWNhdGlvbiIuCisgKi8KKworLyoKKyAqIDMuMy4xICBHRVRBVFRSM2FyZ3MKKyAqCisgKglzdHJ1Y3QgR0VUQVRUUjNhcmdzIHsKKyAqCQluZnNfZmgzICBvYmplY3Q7CisgKgl9OworICovCitzdGF0aWMgdm9pZCBuZnMzX3hkcl9lbmNfZ2V0YXR0cjNhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG5mc19maCAqZmgpCit7CisJZW5jb2RlX25mc19maDMoeGRyLCBmaCk7CiB9CiAKIC8qCi0gKiBFbmNvZGUgZGlyZWN0b3J5IG9wcyBhcmd1bWVudAorICogMy4zLjIgIFNFVEFUVFIzYXJncworICoKKyAqCXVuaW9uIHNhdHRyZ3VhcmQzIHN3aXRjaCAoYm9vbCBjaGVjaykgeworICoJY2FzZSBUUlVFOgorICoJCW5mc3RpbWUzICBvYmpfY3RpbWU7CisgKgljYXNlIEZBTFNFOgorICoJCXZvaWQ7CisgKgl9OworICoKKyAqCXN0cnVjdCBTRVRBVFRSM2FyZ3MgeworICoJCW5mc19maDMJCW9iamVjdDsKKyAqCQlzYXR0cjMJCW5ld19hdHRyaWJ1dGVzOworICoJCXNhdHRyZ3VhcmQzCWd1YXJkOworICoJfTsKICAqLwotc3RhdGljIGludAotbmZzM194ZHJfZGlyb3BhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnMzX2Rpcm9wYXJncyAqYXJncykKK3N0YXRpYyB2b2lkIGVuY29kZV9zYXR0cmd1YXJkMyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZnMzX3NhdHRyYXJncyAqYXJncykKIHsKLQlwID0geGRyX2VuY29kZV9maGFuZGxlKHAsIGFyZ3MtPmZoKTsKLQlwID0geGRyX2VuY29kZV9hcnJheShwLCBhcmdzLT5uYW1lLCBhcmdzLT5sZW4pOwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKLQlyZXR1cm4gMDsKLX0KKwlfX2JlMzIgKnA7CiAKLS8qCi0gKiBFbmNvZGUgUkVNT1ZFIGFyZ3VtZW50Ci0gKi8KLXN0YXRpYyBpbnQKLW5mczNfeGRyX3JlbW92ZWFyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgY29uc3Qgc3RydWN0IG5mc19yZW1vdmVhcmdzICphcmdzKQotewotCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgYXJncy0+ZmgpOwotCXAgPSB4ZHJfZW5jb2RlX2FycmF5KHAsIGFyZ3MtPm5hbWUubmFtZSwgYXJncy0+bmFtZS5sZW4pOwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEVuY29kZSBhY2Nlc3MoKSBhcmd1bWVudAotICovCi1zdGF0aWMgaW50Ci1uZnMzX3hkcl9hY2Nlc3NhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnMzX2FjY2Vzc2FyZ3MgKmFyZ3MpCi17Ci0JcCA9IHhkcl9lbmNvZGVfZmhhbmRsZShwLCBhcmdzLT5maCk7Ci0JKnArKyA9IGh0b25sKGFyZ3MtPmFjY2Vzcyk7Ci0JcmVxLT5ycV9zbGVuID0geGRyX2FkanVzdF9pb3ZlYyhyZXEtPnJxX3N2ZWMsIHApOwotCXJldHVybiAwOwotfQotCi0vKgotICogQXJndW1lbnRzIHRvIGEgUkVBRCBjYWxsLiBTaW5jZSB3ZSByZWFkIGRhdGEgZGlyZWN0bHkgaW50byB0aGUgcGFnZQotICogY2FjaGUsIHdlIGFsc28gc2V0IHVwIHRoZSByZXBseSBpb3ZlYyBoZXJlIHNvIHRoYXQgaW92WzFdIHBvaW50cwotICogZXhhY3RseSB0byB0aGUgcGFnZSB3ZSB3YW50IHRvIGZldGNoLgotICovCi1zdGF0aWMgaW50Ci1uZnMzX3hkcl9yZWFkYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3JlYWRhcmdzICphcmdzKQotewotCXN0cnVjdCBycGNfYXV0aAkqYXV0aCA9IHJlcS0+cnFfY3JlZC0+Y3JfYXV0aDsKLQl1bnNpZ25lZCBpbnQgcmVwbGVuOwotCXUzMiBjb3VudCA9IGFyZ3MtPmNvdW50OwotCi0JcCA9IHhkcl9lbmNvZGVfZmhhbmRsZShwLCBhcmdzLT5maCk7Ci0JcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgYXJncy0+b2Zmc2V0KTsKLQkqcCsrID0gaHRvbmwoY291bnQpOwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKLQotCS8qIElubGluZSB0aGUgcGFnZSBhcnJheSAqLwotCXJlcGxlbiA9IChSUENfUkVQSERSU0laRSArIGF1dGgtPmF1X3JzbGFjayArIE5GUzNfcmVhZHJlc19zeikgPDwgMjsKLQl4ZHJfaW5saW5lX3BhZ2VzKCZyZXEtPnJxX3Jjdl9idWYsIHJlcGxlbiwKLQkJCSBhcmdzLT5wYWdlcywgYXJncy0+cGdiYXNlLCBjb3VudCk7Ci0JcmVxLT5ycV9yY3ZfYnVmLmZsYWdzIHw9IFhEUkJVRl9SRUFEOwotCXJldHVybiAwOwotfQotCi0vKgotICogV3JpdGUgYXJndW1lbnRzLiBTcGxpY2UgdGhlIGJ1ZmZlciB0byBiZSB3cml0dGVuIGludG8gdGhlIGlvdmVjLgotICovCi1zdGF0aWMgaW50Ci1uZnMzX3hkcl93cml0ZWFyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mc193cml0ZWFyZ3MgKmFyZ3MpCi17Ci0Jc3RydWN0IHhkcl9idWYgKnNuZGJ1ZiA9ICZyZXEtPnJxX3NuZF9idWY7Ci0JdTMyIGNvdW50ID0gYXJncy0+Y291bnQ7Ci0KLQlwID0geGRyX2VuY29kZV9maGFuZGxlKHAsIGFyZ3MtPmZoKTsKLQlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmdzLT5vZmZzZXQpOwotCSpwKysgPSBodG9ubChjb3VudCk7Ci0JKnArKyA9IGh0b25sKGFyZ3MtPnN0YWJsZSk7Ci0JKnArKyA9IGh0b25sKGNvdW50KTsKLQlzbmRidWYtPmxlbiA9IHhkcl9hZGp1c3RfaW92ZWMoc25kYnVmLT5oZWFkLCBwKTsKLQotCS8qIENvcHkgdGhlIHBhZ2UgYXJyYXkgKi8KLQl4ZHJfZW5jb2RlX3BhZ2VzKHNuZGJ1ZiwgYXJncy0+cGFnZXMsIGFyZ3MtPnBnYmFzZSwgY291bnQpOwotCXNuZGJ1Zi0+ZmxhZ3MgfD0gWERSQlVGX1dSSVRFOwotCXJldHVybiAwOwotfQotCi0vKgotICogRW5jb2RlIENSRUFURSBhcmd1bWVudHMKLSAqLwotc3RhdGljIGludAotbmZzM194ZHJfY3JlYXRlYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzM19jcmVhdGVhcmdzICphcmdzKQotewotCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgYXJncy0+ZmgpOwotCXAgPSB4ZHJfZW5jb2RlX2FycmF5KHAsIGFyZ3MtPm5hbWUsIGFyZ3MtPmxlbik7Ci0KLQkqcCsrID0gaHRvbmwoYXJncy0+Y3JlYXRlbW9kZSk7Ci0JaWYgKGFyZ3MtPmNyZWF0ZW1vZGUgPT0gTkZTM19DUkVBVEVfRVhDTFVTSVZFKSB7Ci0JCSpwKysgPSBhcmdzLT52ZXJpZmllclswXTsKLQkJKnArKyA9IGFyZ3MtPnZlcmlmaWVyWzFdOwotCX0gZWxzZQotCQlwID0geGRyX2VuY29kZV9zYXR0cihwLCBhcmdzLT5zYXR0cik7Ci0KLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBFbmNvZGUgTUtESVIgYXJndW1lbnRzCi0gKi8KLXN0YXRpYyBpbnQKLW5mczNfeGRyX21rZGlyYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzM19ta2RpcmFyZ3MgKmFyZ3MpCi17Ci0JcCA9IHhkcl9lbmNvZGVfZmhhbmRsZShwLCBhcmdzLT5maCk7Ci0JcCA9IHhkcl9lbmNvZGVfYXJyYXkocCwgYXJncy0+bmFtZSwgYXJncy0+bGVuKTsKLQlwID0geGRyX2VuY29kZV9zYXR0cihwLCBhcmdzLT5zYXR0cik7Ci0JcmVxLT5ycV9zbGVuID0geGRyX2FkanVzdF9pb3ZlYyhyZXEtPnJxX3N2ZWMsIHApOwotCXJldHVybiAwOwotfQotCi0vKgotICogRW5jb2RlIFNZTUxJTksgYXJndW1lbnRzCi0gKi8KLXN0YXRpYyBpbnQKLW5mczNfeGRyX3N5bWxpbmthcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnMzX3N5bWxpbmthcmdzICphcmdzKQotewotCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgYXJncy0+ZnJvbWZoKTsKLQlwID0geGRyX2VuY29kZV9hcnJheShwLCBhcmdzLT5mcm9tbmFtZSwgYXJncy0+ZnJvbWxlbik7Ci0JcCA9IHhkcl9lbmNvZGVfc2F0dHIocCwgYXJncy0+c2F0dHIpOwotCSpwKysgPSBodG9ubChhcmdzLT5wYXRobGVuKTsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0KLQkvKiBDb3B5IHRoZSBwYWdlICovCi0JeGRyX2VuY29kZV9wYWdlcygmcmVxLT5ycV9zbmRfYnVmLCBhcmdzLT5wYWdlcywgMCwgYXJncy0+cGF0aGxlbik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBFbmNvZGUgTUtOT0QgYXJndW1lbnRzCi0gKi8KLXN0YXRpYyBpbnQKLW5mczNfeGRyX21rbm9kYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzM19ta25vZGFyZ3MgKmFyZ3MpCi17Ci0JcCA9IHhkcl9lbmNvZGVfZmhhbmRsZShwLCBhcmdzLT5maCk7Ci0JcCA9IHhkcl9lbmNvZGVfYXJyYXkocCwgYXJncy0+bmFtZSwgYXJncy0+bGVuKTsKLQkqcCsrID0gaHRvbmwoYXJncy0+dHlwZSk7Ci0JcCA9IHhkcl9lbmNvZGVfc2F0dHIocCwgYXJncy0+c2F0dHIpOwotCWlmIChhcmdzLT50eXBlID09IE5GM0NIUiB8fCBhcmdzLT50eXBlID09IE5GM0JMSykgewotCQkqcCsrID0gaHRvbmwoTUFKT1IoYXJncy0+cmRldikpOwotCQkqcCsrID0gaHRvbmwoTUlOT1IoYXJncy0+cmRldikpOwotCX0KLQotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEVuY29kZSBSRU5BTUUgYXJndW1lbnRzCi0gKi8KLXN0YXRpYyBpbnQKLW5mczNfeGRyX3JlbmFtZWFyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19yZW5hbWVhcmdzICphcmdzKQotewotCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgYXJncy0+b2xkX2Rpcik7Ci0JcCA9IHhkcl9lbmNvZGVfYXJyYXkocCwgYXJncy0+b2xkX25hbWUtPm5hbWUsIGFyZ3MtPm9sZF9uYW1lLT5sZW4pOwotCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgYXJncy0+bmV3X2Rpcik7Ci0JcCA9IHhkcl9lbmNvZGVfYXJyYXkocCwgYXJncy0+bmV3X25hbWUtPm5hbWUsIGFyZ3MtPm5ld19uYW1lLT5sZW4pOwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEVuY29kZSBMSU5LIGFyZ3VtZW50cwotICovCi1zdGF0aWMgaW50Ci1uZnMzX3hkcl9saW5rYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzM19saW5rYXJncyAqYXJncykKLXsKLQlwID0geGRyX2VuY29kZV9maGFuZGxlKHAsIGFyZ3MtPmZyb21maCk7Ci0JcCA9IHhkcl9lbmNvZGVfZmhhbmRsZShwLCBhcmdzLT50b2ZoKTsKLQlwID0geGRyX2VuY29kZV9hcnJheShwLCBhcmdzLT50b25hbWUsIGFyZ3MtPnRvbGVuKTsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBFbmNvZGUgYXJndW1lbnRzIHRvIHJlYWRkaXIgY2FsbAotICovCi1zdGF0aWMgaW50Ci1uZnMzX3hkcl9yZWFkZGlyYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzM19yZWFkZGlyYXJncyAqYXJncykKLXsKLQlzdHJ1Y3QgcnBjX2F1dGgJKmF1dGggPSByZXEtPnJxX2NyZWQtPmNyX2F1dGg7Ci0JdW5zaWduZWQgaW50IHJlcGxlbjsKLQl1MzIgY291bnQgPSBhcmdzLT5jb3VudDsKLQotCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgYXJncy0+ZmgpOwotCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIGFyZ3MtPmNvb2tpZSk7Ci0JKnArKyA9IGFyZ3MtPnZlcmZbMF07Ci0JKnArKyA9IGFyZ3MtPnZlcmZbMV07Ci0JaWYgKGFyZ3MtPnBsdXMpIHsKLQkJLyogcmVhZGRpcnBsdXM6IG5lZWQgZGlyY291bnQgKyBidWZmZXIgc2l6ZS4KLQkJICogV2UganVzdCBtYWtlIHN1cmUgd2UgbWFrZSBkaXJjb3VudCBiaWcgZW5vdWdoICovCi0JCSpwKysgPSBodG9ubChjb3VudCA+PiAzKTsKLQl9Ci0JKnArKyA9IGh0b25sKGNvdW50KTsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0KLQkvKiBJbmxpbmUgdGhlIHBhZ2UgYXJyYXkgKi8KLQlyZXBsZW4gPSAoUlBDX1JFUEhEUlNJWkUgKyBhdXRoLT5hdV9yc2xhY2sgKyBORlMzX3JlYWRkaXJyZXNfc3opIDw8IDI7Ci0JeGRyX2lubGluZV9wYWdlcygmcmVxLT5ycV9yY3ZfYnVmLCByZXBsZW4sIGFyZ3MtPnBhZ2VzLCAwLCBjb3VudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBEZWNvZGUgdGhlIHJlc3VsdCBvZiBhIHJlYWRkaXIgY2FsbC4KLSAqIFdlIGp1c3QgY2hlY2sgZm9yIHN5bnRhY3RpY2FsIGNvcnJlY3RuZXNzLgotICovCi1zdGF0aWMgaW50Ci1uZnMzX3hkcl9yZWFkZGlycmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnMzX3JlYWRkaXJyZXMgKnJlcykKLXsKLQlzdHJ1Y3QgeGRyX2J1ZiAqcmN2YnVmID0gJnJlcS0+cnFfcmN2X2J1ZjsKLQlzdHJ1Y3Qga3ZlYyAqaW92ID0gcmN2YnVmLT5oZWFkOwotCXN0cnVjdCBwYWdlICoqcGFnZTsKLQlzaXplX3QgaGRybGVuOwotCXUzMiByZWN2ZCwgcGdsZW47Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IG50b2hsKCpwKyspOwotCS8qIERlY29kZSBwb3N0X29wX2F0dHJzICovCi0JcCA9IHhkcl9kZWNvZGVfcG9zdF9vcF9hdHRyKHAsIHJlcy0+ZGlyX2F0dHIpOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBuZnNfc3RhdF90b19lcnJubyhzdGF0dXMpOwotCS8qIERlY29kZSB2ZXJpZmllciBjb29raWUgKi8KLQlpZiAocmVzLT52ZXJmKSB7Ci0JCXJlcy0+dmVyZlswXSA9ICpwKys7Ci0JCXJlcy0+dmVyZlsxXSA9ICpwKys7CisJaWYgKGFyZ3MtPmd1YXJkKSB7CisJCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyA4KTsKKwkJKnArKyA9IHhkcl9vbmU7CisJCXhkcl9lbmNvZGVfbmZzdGltZTMocCwgJmFyZ3MtPmd1YXJkdGltZSk7CiAJfSBlbHNlIHsKLQkJcCArPSAyOworCQlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA0KTsKKwkJKnAgPSB4ZHJfemVybzsKIAl9Ci0KLQloZHJsZW4gPSAodTggKikgcCAtICh1OCAqKSBpb3YtPmlvdl9iYXNlOwotCWlmIChpb3YtPmlvdl9sZW4gPCBoZHJsZW4pIHsKLQkJZHByaW50aygiTkZTOiBSRUFERElSIHJlcGx5IGhlYWRlciBvdmVyZmxvd2VkOiIKLQkJCQkibGVuZ3RoICVadSA+ICVadVxuIiwgaGRybGVuLCBpb3YtPmlvdl9sZW4pOwotCQlyZXR1cm4gLWVycm5vX05GU0VSUl9JTzsKLQl9IGVsc2UgaWYgKGlvdi0+aW92X2xlbiAhPSBoZHJsZW4pIHsKLQkJZHByaW50aygiTkZTOiBSRUFERElSIGhlYWRlciBpcyBzaG9ydC4gaW92ZWMgd2lsbCBiZSBzaGlmdGVkLlxuIik7Ci0JCXhkcl9zaGlmdF9idWYocmN2YnVmLCBpb3YtPmlvdl9sZW4gLSBoZHJsZW4pOwotCX0KLQotCXBnbGVuID0gcmN2YnVmLT5wYWdlX2xlbjsKLQlyZWN2ZCA9IHJjdmJ1Zi0+bGVuIC0gaGRybGVuOwotCWlmIChwZ2xlbiA+IHJlY3ZkKQotCQlwZ2xlbiA9IHJlY3ZkOwotCXBhZ2UgPSByY3ZidWYtPnBhZ2VzOwotCi0JcmV0dXJuIHBnbGVuOwogfQogCi1fX2JlMzIgKgotbmZzM19kZWNvZGVfZGlyZW50KHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnNfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBpbnQgcGx1cykKK3N0YXRpYyB2b2lkIG5mczNfeGRyX2VuY19zZXRhdHRyM2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZzM19zYXR0cmFyZ3MgKmFyZ3MpCiB7Ci0JX19iZTMyICpwOwotCXN0cnVjdCBuZnNfZW50cnkgb2xkID0gKmVudHJ5OwotCi0JcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7Ci0JaWYgKHVubGlrZWx5KCFwKSkKLQkJZ290byBvdXRfb3ZlcmZsb3c7Ci0JaWYgKCFudG9obCgqcCsrKSkgewotCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKLQkJaWYgKHVubGlrZWx5KCFwKSkKLQkJCWdvdG8gb3V0X292ZXJmbG93OwotCQlpZiAoIW50b2hsKCpwKyspKQotCQkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7Ci0JCWVudHJ5LT5lb2YgPSAxOwotCQlyZXR1cm4gRVJSX1BUUigtRUJBRENPT0tJRSk7Ci0JfQotCi0JcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgMTIpOwotCWlmICh1bmxpa2VseSghcCkpCi0JCWdvdG8gb3V0X292ZXJmbG93OwotCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZlbnRyeS0+aW5vKTsKLQllbnRyeS0+bGVuICA9IG50b2hsKCpwKyspOwotCi0JcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgZW50cnktPmxlbiArIDgpOwotCWlmICh1bmxpa2VseSghcCkpCi0JCWdvdG8gb3V0X292ZXJmbG93OwotCWVudHJ5LT5uYW1lID0gKGNvbnN0IGNoYXIgKikgcDsKLQlwICs9IFhEUl9RVUFETEVOKGVudHJ5LT5sZW4pOwotCWVudHJ5LT5wcmV2X2Nvb2tpZSA9IGVudHJ5LT5jb29raWU7Ci0JcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJmVudHJ5LT5jb29raWUpOwotCi0JZW50cnktPmRfdHlwZSA9IERUX1VOS05PV047Ci0JaWYgKHBsdXMpIHsKLQkJZW50cnktPmZhdHRyLT52YWxpZCA9IDA7Ci0JCXAgPSB4ZHJfZGVjb2RlX3Bvc3Rfb3BfYXR0cl9zdHJlYW0oeGRyLCBlbnRyeS0+ZmF0dHIpOwotCQlpZiAoSVNfRVJSKHApKQotCQkJZ290byBvdXRfb3ZlcmZsb3dfZXhpdDsKLQkJZW50cnktPmRfdHlwZSA9IG5mc191bW9kZV90b19kdHlwZShlbnRyeS0+ZmF0dHItPm1vZGUpOwotCQkvKiBJbiBmYWN0LCBhIHBvc3Rfb3BfZmgzOiAqLwotCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKLQkJaWYgKHVubGlrZWx5KCFwKSkKLQkJCWdvdG8gb3V0X292ZXJmbG93OwotCQlpZiAoKnArKykgewotCQkJcCA9IHhkcl9kZWNvZGVfZmhhbmRsZV9zdHJlYW0oeGRyLCBlbnRyeS0+ZmgpOwotCQkJaWYgKElTX0VSUihwKSkKLQkJCQlnb3RvIG91dF9vdmVyZmxvd19leGl0OwotCQkJLyogVWdoIC0tIHNlcnZlciByZXBseSB3YXMgdHJ1bmNhdGVkICovCi0JCQlpZiAocCA9PSBOVUxMKSB7Ci0JCQkJZHByaW50aygiTkZTOiBGSCB0cnVuY2F0ZWRcbiIpOwotCQkJCSplbnRyeSA9IG9sZDsKLQkJCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKLQkJCX0KLQkJfSBlbHNlCi0JCQltZW1zZXQoKHU4KikoZW50cnktPmZoKSwgMCwgc2l6ZW9mKCplbnRyeS0+ZmgpKTsKLQl9Ci0KLQlwID0geGRyX2lubGluZV9wZWVrKHhkciwgOCk7Ci0JaWYgKHAgIT0gTlVMTCkKLQkJZW50cnktPmVvZiA9ICFwWzBdICYmIHBbMV07Ci0JZWxzZQotCQllbnRyeS0+ZW9mID0gMDsKLQotCXJldHVybiBwOwotCi1vdXRfb3ZlcmZsb3c6Ci0JcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOwotb3V0X292ZXJmbG93X2V4aXQ6Ci0JcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CisJZW5jb2RlX25mc19maDMoeGRyLCBhcmdzLT5maCk7CisJZW5jb2RlX3NhdHRyMyh4ZHIsIGFyZ3MtPnNhdHRyKTsKKwllbmNvZGVfc2F0dHJndWFyZDMoeGRyLCBhcmdzKTsKIH0KIAogLyoKLSAqIEVuY29kZSBDT01NSVQgYXJndW1lbnRzCisgKiAzLjMuMyAgTE9PS1VQM2FyZ3MKKyAqCisgKglzdHJ1Y3QgTE9PS1VQM2FyZ3MgeworICoJCWRpcm9wYXJnczMgIHdoYXQ7CisgKgl9OwogICovCi1zdGF0aWMgaW50Ci1uZnMzX3hkcl9jb21taXRhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfd3JpdGVhcmdzICphcmdzKQorc3RhdGljIHZvaWQgbmZzM194ZHJfZW5jX2xvb2t1cDNhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZnMzX2Rpcm9wYXJncyAqYXJncykKIHsKLQlwID0geGRyX2VuY29kZV9maGFuZGxlKHAsIGFyZ3MtPmZoKTsKKwllbmNvZGVfZGlyb3BhcmdzMyh4ZHIsIGFyZ3MtPmZoLCBhcmdzLT5uYW1lLCBhcmdzLT5sZW4pOworfQorCisvKgorICogMy4zLjQgIEFDQ0VTUzNhcmdzCisgKgorICoJc3RydWN0IEFDQ0VTUzNhcmdzIHsKKyAqCQluZnNfZmgzCQlvYmplY3Q7CisgKgkJdWludDMyCQlhY2Nlc3M7CisgKgl9OworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfYWNjZXNzM2FyZ3Moc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZzM19hY2Nlc3NhcmdzICphcmdzKQoreworCWVuY29kZV9uZnNfZmgzKHhkciwgYXJncy0+ZmgpOworCWVuY29kZV91aW50MzIoeGRyLCBhcmdzLT5hY2Nlc3MpOworfQorCitzdGF0aWMgdm9pZCBuZnMzX3hkcl9lbmNfYWNjZXNzM2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mczNfYWNjZXNzYXJncyAqYXJncykKK3sKKwllbmNvZGVfYWNjZXNzM2FyZ3MoeGRyLCBhcmdzKTsKK30KKworLyoKKyAqIDMuMy41ICBSRUFETElOSzNhcmdzCisgKgorICoJc3RydWN0IFJFQURMSU5LM2FyZ3MgeworICoJCW5mc19maDMJc3ltbGluazsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIG5mczNfeGRyX2VuY19yZWFkbGluazNhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZzM19yZWFkbGlua2FyZ3MgKmFyZ3MpCit7CisJZW5jb2RlX25mc19maDMoeGRyLCBhcmdzLT5maCk7CisJcHJlcGFyZV9yZXBseV9idWZmZXIocmVxLCBhcmdzLT5wYWdlcywgYXJncy0+cGdiYXNlLAorCQkJCQlhcmdzLT5wZ2xlbiwgTkZTM19yZWFkbGlua3Jlc19zeik7Cit9CisKKy8qCisgKiAzLjMuNiAgUkVBRDNhcmdzCisgKgorICoJc3RydWN0IFJFQUQzYXJncyB7CisgKgkJbmZzX2ZoMwkJZmlsZTsKKyAqCQlvZmZzZXQzCQlvZmZzZXQ7CisgKgkJY291bnQzCQljb3VudDsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV9yZWFkM2FyZ3Moc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG5mc19yZWFkYXJncyAqYXJncykKK3sKKwlfX2JlMzIgKnA7CisKKwllbmNvZGVfbmZzX2ZoMyh4ZHIsIGFyZ3MtPmZoKTsKKworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDggKyA0KTsKIAlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmdzLT5vZmZzZXQpOwotCSpwKysgPSBodG9ubChhcmdzLT5jb3VudCk7Ci0JcmVxLT5ycV9zbGVuID0geGRyX2FkanVzdF9pb3ZlYyhyZXEtPnJxX3N2ZWMsIHApOwotCXJldHVybiAwOworCSpwID0gY3B1X3RvX2JlMzIoYXJncy0+Y291bnQpOworfQorCitzdGF0aWMgdm9pZCBuZnMzX3hkcl9lbmNfcmVhZDNhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgY29uc3Qgc3RydWN0IG5mc19yZWFkYXJncyAqYXJncykKK3sKKwllbmNvZGVfcmVhZDNhcmdzKHhkciwgYXJncyk7CisJcHJlcGFyZV9yZXBseV9idWZmZXIocmVxLCBhcmdzLT5wYWdlcywgYXJncy0+cGdiYXNlLAorCQkJCQlhcmdzLT5jb3VudCwgTkZTM19yZWFkcmVzX3N6KTsKKwlyZXEtPnJxX3Jjdl9idWYuZmxhZ3MgfD0gWERSQlVGX1JFQUQ7Cit9CisKKy8qCisgKiAzLjMuNyAgV1JJVEUzYXJncworICoKKyAqCWVudW0gc3RhYmxlX2hvdyB7CisgKgkJVU5TVEFCTEUgID0gMCwKKyAqCQlEQVRBX1NZTkMgPSAxLAorICoJCUZJTEVfU1lOQyA9IDIKKyAqCX07CisgKgorICoJc3RydWN0IFdSSVRFM2FyZ3MgeworICoJCW5mc19maDMJCWZpbGU7CisgKgkJb2Zmc2V0MwkJb2Zmc2V0OworICoJCWNvdW50MwkJY291bnQ7CisgKgkJc3RhYmxlX2hvdwlzdGFibGU7CisgKgkJb3BhcXVlCQlkYXRhPD47CisgKgl9OworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfd3JpdGUzYXJncyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG5mc193cml0ZWFyZ3MgKmFyZ3MpCit7CisJX19iZTMyICpwOworCisJZW5jb2RlX25mc19maDMoeGRyLCBhcmdzLT5maCk7CisKKwlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA4ICsgNCArIDQgKyA0KTsKKwlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmdzLT5vZmZzZXQpOworCSpwKysgPSBjcHVfdG9fYmUzMihhcmdzLT5jb3VudCk7CisJKnArKyA9IGNwdV90b19iZTMyKGFyZ3MtPnN0YWJsZSk7CisJKnAgPSBjcHVfdG9fYmUzMihhcmdzLT5jb3VudCk7CisJeGRyX3dyaXRlX3BhZ2VzKHhkciwgYXJncy0+cGFnZXMsIGFyZ3MtPnBnYmFzZSwgYXJncy0+Y291bnQpOworfQorCitzdGF0aWMgdm9pZCBuZnMzX3hkcl9lbmNfd3JpdGUzYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgY29uc3Qgc3RydWN0IG5mc193cml0ZWFyZ3MgKmFyZ3MpCit7CisJZW5jb2RlX3dyaXRlM2FyZ3MoeGRyLCBhcmdzKTsKKwl4ZHItPmJ1Zi0+ZmxhZ3MgfD0gWERSQlVGX1dSSVRFOworfQorCisvKgorICogMy4zLjggIENSRUFURTNhcmdzCisgKgorICoJZW51bSBjcmVhdGVtb2RlMyB7CisgKgkJVU5DSEVDS0VEID0gMCwKKyAqCQlHVUFSREVEICAgPSAxLAorICoJCUVYQ0xVU0lWRSA9IDIKKyAqCX07CisgKgorICoJdW5pb24gY3JlYXRlaG93MyBzd2l0Y2ggKGNyZWF0ZW1vZGUzIG1vZGUpIHsKKyAqCWNhc2UgVU5DSEVDS0VEOgorICoJY2FzZSBHVUFSREVEOgorICoJCXNhdHRyMyAgICAgICBvYmpfYXR0cmlidXRlczsKKyAqCWNhc2UgRVhDTFVTSVZFOgorICoJCWNyZWF0ZXZlcmYzICB2ZXJmOworICoJfTsKKyAqCisgKglzdHJ1Y3QgQ1JFQVRFM2FyZ3MgeworICoJCWRpcm9wYXJnczMJd2hlcmU7CisgKgkJY3JlYXRlaG93Mwlob3c7CisgKgl9OworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfY3JlYXRlaG93MyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG5mczNfY3JlYXRlYXJncyAqYXJncykKK3sKKwllbmNvZGVfdWludDMyKHhkciwgYXJncy0+Y3JlYXRlbW9kZSk7CisJc3dpdGNoIChhcmdzLT5jcmVhdGVtb2RlKSB7CisJY2FzZSBORlMzX0NSRUFURV9VTkNIRUNLRUQ6CisJY2FzZSBORlMzX0NSRUFURV9HVUFSREVEOgorCQllbmNvZGVfc2F0dHIzKHhkciwgYXJncy0+c2F0dHIpOworCQlicmVhazsKKwljYXNlIE5GUzNfQ1JFQVRFX0VYQ0xVU0lWRToKKwkJZW5jb2RlX2NyZWF0ZXZlcmYzKHhkciwgYXJncy0+dmVyaWZpZXIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG5mczNfeGRyX2VuY19jcmVhdGUzYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZzM19jcmVhdGVhcmdzICphcmdzKQoreworCWVuY29kZV9kaXJvcGFyZ3MzKHhkciwgYXJncy0+ZmgsIGFyZ3MtPm5hbWUsIGFyZ3MtPmxlbik7CisJZW5jb2RlX2NyZWF0ZWhvdzMoeGRyLCBhcmdzKTsKK30KKworLyoKKyAqIDMuMy45ICBNS0RJUjNhcmdzCisgKgorICoJc3RydWN0IE1LRElSM2FyZ3MgeworICoJCWRpcm9wYXJnczMJd2hlcmU7CisgKgkJc2F0dHIzCQlhdHRyaWJ1dGVzOworICoJfTsKKyAqLworc3RhdGljIHZvaWQgbmZzM194ZHJfZW5jX21rZGlyM2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBuZnMzX21rZGlyYXJncyAqYXJncykKK3sKKwllbmNvZGVfZGlyb3BhcmdzMyh4ZHIsIGFyZ3MtPmZoLCBhcmdzLT5uYW1lLCBhcmdzLT5sZW4pOworCWVuY29kZV9zYXR0cjMoeGRyLCBhcmdzLT5zYXR0cik7Cit9CisKKy8qCisgKiAzLjMuMTAgIFNZTUxJTkszYXJncworICoKKyAqCXN0cnVjdCBzeW1saW5rZGF0YTMgeworICoJCXNhdHRyMwkJc3ltbGlua19hdHRyaWJ1dGVzOworICoJCW5mc3BhdGgzCXN5bWxpbmtfZGF0YTsKKyAqCX07CisgKgorICoJc3RydWN0IFNZTUxJTkszYXJncyB7CisgKgkJZGlyb3BhcmdzMwl3aGVyZTsKKyAqCQlzeW1saW5rZGF0YTMJc3ltbGluazsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV9zeW1saW5rZGF0YTMoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQljb25zdCBzdHJ1Y3QgbmZzM19zeW1saW5rYXJncyAqYXJncykKK3sKKwllbmNvZGVfc2F0dHIzKHhkciwgYXJncy0+c2F0dHIpOworCWVuY29kZV9uZnNwYXRoMyh4ZHIsIGFyZ3MtPnBhZ2VzLCBhcmdzLT5wYXRobGVuKTsKK30KKworc3RhdGljIHZvaWQgbmZzM194ZHJfZW5jX3N5bWxpbmszYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZnMzX3N5bWxpbmthcmdzICphcmdzKQoreworCWVuY29kZV9kaXJvcGFyZ3MzKHhkciwgYXJncy0+ZnJvbWZoLCBhcmdzLT5mcm9tbmFtZSwgYXJncy0+ZnJvbWxlbik7CisJZW5jb2RlX3N5bWxpbmtkYXRhMyh4ZHIsIGFyZ3MpOworfQorCisvKgorICogMy4zLjExICBNS05PRDNhcmdzCisgKgorICoJc3RydWN0IGRldmljZWRhdGEzIHsKKyAqCQlzYXR0cjMJCWRldl9hdHRyaWJ1dGVzOworICoJCXNwZWNkYXRhMwlzcGVjOworICoJfTsKKyAqCisgKgl1bmlvbiBta25vZGRhdGEzIHN3aXRjaCAoZnR5cGUzIHR5cGUpIHsKKyAqCWNhc2UgTkYzQ0hSOgorICoJY2FzZSBORjNCTEs6CisgKgkJZGV2aWNlZGF0YTMJZGV2aWNlOworICoJY2FzZSBORjNTT0NLOgorICoJY2FzZSBORjNGSUZPOgorICoJCXNhdHRyMwkJcGlwZV9hdHRyaWJ1dGVzOworICoJZGVmYXVsdDoKKyAqCQl2b2lkOworICoJfTsKKyAqCisgKglzdHJ1Y3QgTUtOT0QzYXJncyB7CisgKgkJZGlyb3BhcmdzMwl3aGVyZTsKKyAqCQlta25vZGRhdGEzCXdoYXQ7CisgKgl9OworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfZGV2aWNlZGF0YTMoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZzM19ta25vZGFyZ3MgKmFyZ3MpCit7CisJZW5jb2RlX3NhdHRyMyh4ZHIsIGFyZ3MtPnNhdHRyKTsKKwllbmNvZGVfc3BlY2RhdGEzKHhkciwgYXJncy0+cmRldik7Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZV9ta25vZGRhdGEzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZzM19ta25vZGFyZ3MgKmFyZ3MpCit7CisJZW5jb2RlX2Z0eXBlMyh4ZHIsIGFyZ3MtPnR5cGUpOworCXN3aXRjaCAoYXJncy0+dHlwZSkgeworCWNhc2UgTkYzQ0hSOgorCWNhc2UgTkYzQkxLOgorCQllbmNvZGVfZGV2aWNlZGF0YTMoeGRyLCBhcmdzKTsKKwkJYnJlYWs7CisJY2FzZSBORjNTT0NLOgorCWNhc2UgTkYzRklGTzoKKwkJZW5jb2RlX3NhdHRyMyh4ZHIsIGFyZ3MtPnNhdHRyKTsKKwkJYnJlYWs7CisJY2FzZSBORjNSRUc6CisJY2FzZSBORjNESVI6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworc3RhdGljIHZvaWQgbmZzM194ZHJfZW5jX21rbm9kM2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBuZnMzX21rbm9kYXJncyAqYXJncykKK3sKKwllbmNvZGVfZGlyb3BhcmdzMyh4ZHIsIGFyZ3MtPmZoLCBhcmdzLT5uYW1lLCBhcmdzLT5sZW4pOworCWVuY29kZV9ta25vZGRhdGEzKHhkciwgYXJncyk7Cit9CisKKy8qCisgKiAzLjMuMTIgIFJFTU9WRTNhcmdzCisgKgorICoJc3RydWN0IFJFTU9WRTNhcmdzIHsKKyAqCQlkaXJvcGFyZ3MzICBvYmplY3Q7CisgKgl9OworICovCitzdGF0aWMgdm9pZCBuZnMzX3hkcl9lbmNfcmVtb3ZlM2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mc19yZW1vdmVhcmdzICphcmdzKQoreworCWVuY29kZV9kaXJvcGFyZ3MzKHhkciwgYXJncy0+ZmgsIGFyZ3MtPm5hbWUubmFtZSwgYXJncy0+bmFtZS5sZW4pOworfQorCisvKgorICogMy4zLjE0ICBSRU5BTUUzYXJncworICoKKyAqCXN0cnVjdCBSRU5BTUUzYXJncyB7CisgKgkJZGlyb3BhcmdzMwlmcm9tOworICoJCWRpcm9wYXJnczMJdG87CisgKgl9OworICovCitzdGF0aWMgdm9pZCBuZnMzX3hkcl9lbmNfcmVuYW1lM2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mc19yZW5hbWVhcmdzICphcmdzKQoreworCWNvbnN0IHN0cnVjdCBxc3RyICpvbGQgPSBhcmdzLT5vbGRfbmFtZTsKKwljb25zdCBzdHJ1Y3QgcXN0ciAqbmV3ID0gYXJncy0+bmV3X25hbWU7CisKKwllbmNvZGVfZGlyb3BhcmdzMyh4ZHIsIGFyZ3MtPm9sZF9kaXIsIG9sZC0+bmFtZSwgb2xkLT5sZW4pOworCWVuY29kZV9kaXJvcGFyZ3MzKHhkciwgYXJncy0+bmV3X2RpciwgbmV3LT5uYW1lLCBuZXctPmxlbik7Cit9CisKKy8qCisgKiAzLjMuMTUgIExJTkszYXJncworICoKKyAqCXN0cnVjdCBMSU5LM2FyZ3MgeworICoJCW5mc19maDMJCWZpbGU7CisgKgkJZGlyb3BhcmdzMwlsaW5rOworICoJfTsKKyAqLworc3RhdGljIHZvaWQgbmZzM194ZHJfZW5jX2xpbmszYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBuZnMzX2xpbmthcmdzICphcmdzKQoreworCWVuY29kZV9uZnNfZmgzKHhkciwgYXJncy0+ZnJvbWZoKTsKKwllbmNvZGVfZGlyb3BhcmdzMyh4ZHIsIGFyZ3MtPnRvZmgsIGFyZ3MtPnRvbmFtZSwgYXJncy0+dG9sZW4pOworfQorCisvKgorICogMy4zLjE2ICBSRUFERElSM2FyZ3MKKyAqCisgKglzdHJ1Y3QgUkVBRERJUjNhcmdzIHsKKyAqCQluZnNfZmgzCQlkaXI7CisgKgkJY29va2llMwkJY29va2llOworICoJCWNvb2tpZXZlcmYzCWNvb2tpZXZlcmY7CisgKgkJY291bnQzCQljb3VudDsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV9yZWFkZGlyM2FyZ3Moc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQljb25zdCBzdHJ1Y3QgbmZzM19yZWFkZGlyYXJncyAqYXJncykKK3sKKwlfX2JlMzIgKnA7CisKKwllbmNvZGVfbmZzX2ZoMyh4ZHIsIGFyZ3MtPmZoKTsKKworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDggKyBORlMzX0NPT0tJRVZFUkZTSVpFICsgNCk7CisJcCA9IHhkcl9lbmNvZGVfY29va2llMyhwLCBhcmdzLT5jb29raWUpOworCXAgPSB4ZHJfZW5jb2RlX2Nvb2tpZXZlcmYzKHAsIGFyZ3MtPnZlcmYpOworCSpwID0gY3B1X3RvX2JlMzIoYXJncy0+Y291bnQpOworfQorCitzdGF0aWMgdm9pZCBuZnMzX3hkcl9lbmNfcmVhZGRpcjNhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG5mczNfcmVhZGRpcmFyZ3MgKmFyZ3MpCit7CisJZW5jb2RlX3JlYWRkaXIzYXJncyh4ZHIsIGFyZ3MpOworCXByZXBhcmVfcmVwbHlfYnVmZmVyKHJlcSwgYXJncy0+cGFnZXMsIDAsCisJCQkJYXJncy0+Y291bnQsIE5GUzNfcmVhZGRpcnJlc19zeik7Cit9CisKKy8qCisgKiAzLjMuMTcgIFJFQURESVJQTFVTM2FyZ3MKKyAqCisgKglzdHJ1Y3QgUkVBRERJUlBMVVMzYXJncyB7CisgKgkJbmZzX2ZoMwkJZGlyOworICoJCWNvb2tpZTMJCWNvb2tpZTsKKyAqCQljb29raWV2ZXJmMwljb29raWV2ZXJmOworICoJCWNvdW50MwkJZGlyY291bnQ7CisgKgkJY291bnQzCQltYXhjb3VudDsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV9yZWFkZGlycGx1czNhcmdzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBuZnMzX3JlYWRkaXJhcmdzICphcmdzKQoreworCV9fYmUzMiAqcDsKKworCWVuY29kZV9uZnNfZmgzKHhkciwgYXJncy0+ZmgpOworCisJcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgOCArIE5GUzNfQ09PS0lFVkVSRlNJWkUgKyA0ICsgNCk7CisJcCA9IHhkcl9lbmNvZGVfY29va2llMyhwLCBhcmdzLT5jb29raWUpOworCXAgPSB4ZHJfZW5jb2RlX2Nvb2tpZXZlcmYzKHAsIGFyZ3MtPnZlcmYpOworCisJLyoKKwkgKiByZWFkZGlycGx1czogbmVlZCBkaXJjb3VudCArIGJ1ZmZlciBzaXplLgorCSAqIFdlIGp1c3QgbWFrZSBzdXJlIHdlIG1ha2UgZGlyY291bnQgYmlnIGVub3VnaAorCSAqLworCSpwKysgPSBjcHVfdG9fYmUzMihhcmdzLT5jb3VudCA+PiAzKTsKKworCSpwID0gY3B1X3RvX2JlMzIoYXJncy0+Y291bnQpOworfQorCitzdGF0aWMgdm9pZCBuZnMzX3hkcl9lbmNfcmVhZGRpcnBsdXMzYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkJICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBuZnMzX3JlYWRkaXJhcmdzICphcmdzKQoreworCWVuY29kZV9yZWFkZGlycGx1czNhcmdzKHhkciwgYXJncyk7CisJcHJlcGFyZV9yZXBseV9idWZmZXIocmVxLCBhcmdzLT5wYWdlcywgMCwKKwkJCQlhcmdzLT5jb3VudCwgTkZTM19yZWFkZGlycmVzX3N6KTsKK30KKworLyoKKyAqIDMuMy4yMSAgQ09NTUlUM2FyZ3MKKyAqCisgKglzdHJ1Y3QgQ09NTUlUM2FyZ3MgeworICoJCW5mc19maDMJCWZpbGU7CisgKgkJb2Zmc2V0MwkJb2Zmc2V0OworICoJCWNvdW50MwkJY291bnQ7CisgKgl9OworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfY29tbWl0M2FyZ3Moc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZzX3dyaXRlYXJncyAqYXJncykKK3sKKwlfX2JlMzIgKnA7CisKKwllbmNvZGVfbmZzX2ZoMyh4ZHIsIGFyZ3MtPmZoKTsKKworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDggKyA0KTsKKwlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmdzLT5vZmZzZXQpOworCSpwID0gY3B1X3RvX2JlMzIoYXJncy0+Y291bnQpOworfQorCitzdGF0aWMgdm9pZCBuZnMzX3hkcl9lbmNfY29tbWl0M2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mc193cml0ZWFyZ3MgKmFyZ3MpCit7CisJZW5jb2RlX2NvbW1pdDNhcmdzKHhkciwgYXJncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfTkZTX1YzX0FDTAotLyoKLSAqIEVuY29kZSBHRVRBQ0wgYXJndW1lbnRzCi0gKi8KLXN0YXRpYyBpbnQKLW5mczNfeGRyX2dldGFjbGFyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKLQkJICAgIHN0cnVjdCBuZnMzX2dldGFjbGFyZ3MgKmFyZ3MpCisKK3N0YXRpYyB2b2lkIG5mczNfeGRyX2VuY19nZXRhY2wzYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZzM19nZXRhY2xhcmdzICphcmdzKQogewotCXN0cnVjdCBycGNfYXV0aAkqYXV0aCA9IHJlcS0+cnFfY3JlZC0+Y3JfYXV0aDsKLQl1bnNpZ25lZCBpbnQgcmVwbGVuOwotCi0JcCA9IHhkcl9lbmNvZGVfZmhhbmRsZShwLCBhcmdzLT5maCk7Ci0JKnArKyA9IGh0b25sKGFyZ3MtPm1hc2spOwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKLQotCWlmIChhcmdzLT5tYXNrICYgKE5GU19BQ0wgfCBORlNfREZBQ0wpKSB7Ci0JCS8qIElubGluZSB0aGUgcGFnZSBhcnJheSAqLwotCQlyZXBsZW4gPSAoUlBDX1JFUEhEUlNJWkUgKyBhdXRoLT5hdV9yc2xhY2sgKwotCQkJICBBQ0wzX2dldGFjbHJlc19zeikgPDwgMjsKLQkJeGRyX2lubGluZV9wYWdlcygmcmVxLT5ycV9yY3ZfYnVmLCByZXBsZW4sIGFyZ3MtPnBhZ2VzLCAwLAotCQkJCSBORlNBQ0xfTUFYUEFHRVMgPDwgUEFHRV9TSElGVCk7Ci0JfQotCXJldHVybiAwOworCWVuY29kZV9uZnNfZmgzKHhkciwgYXJncy0+ZmgpOworCWVuY29kZV91aW50MzIoeGRyLCBhcmdzLT5tYXNrKTsKKwlpZiAoYXJncy0+bWFzayAmIChORlNfQUNMIHwgTkZTX0RGQUNMKSkKKwkJcHJlcGFyZV9yZXBseV9idWZmZXIocmVxLCBhcmdzLT5wYWdlcywgMCwKKwkJCQkJTkZTQUNMX01BWFBBR0VTIDw8IFBBR0VfU0hJRlQsCisJCQkJCUFDTDNfZ2V0YWNscmVzX3N6KTsKIH0KIAotLyoKLSAqIEVuY29kZSBTRVRBQ0wgYXJndW1lbnRzCi0gKi8KLXN0YXRpYyBpbnQKLW5mczNfeGRyX3NldGFjbGFyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKLSAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzM19zZXRhY2xhcmdzICphcmdzKQorc3RhdGljIHZvaWQgbmZzM194ZHJfZW5jX3NldGFjbDNhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZnMzX3NldGFjbGFyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9idWYgKmJ1ZiA9ICZyZXEtPnJxX3NuZF9idWY7CiAJdW5zaWduZWQgaW50IGJhc2U7Ci0JaW50IGVycjsKKwlpbnQgZXJyb3I7CiAKLQlwID0geGRyX2VuY29kZV9maGFuZGxlKHAsIE5GU19GSChhcmdzLT5pbm9kZSkpOwotCSpwKysgPSBodG9ubChhcmdzLT5tYXNrKTsKLQlyZXEtPnJxX3NsZW4gPSB4ZHJfYWRqdXN0X2lvdmVjKHJlcS0+cnFfc3ZlYywgcCk7Ci0JYmFzZSA9IHJlcS0+cnFfc2xlbjsKLQorCWVuY29kZV9uZnNfZmgzKHhkciwgTkZTX0ZIKGFyZ3MtPmlub2RlKSk7CisJZW5jb2RlX3VpbnQzMih4ZHIsIGFyZ3MtPm1hc2spOwogCWlmIChhcmdzLT5ucGFnZXMgIT0gMCkKLQkJeGRyX2VuY29kZV9wYWdlcyhidWYsIGFyZ3MtPnBhZ2VzLCAwLCBhcmdzLT5sZW4pOwotCWVsc2UKLQkJcmVxLT5ycV9zbGVuID0geGRyX2FkanVzdF9pb3ZlYyhyZXEtPnJxX3N2ZWMsCi0JCQkJcCArIFhEUl9RVUFETEVOKGFyZ3MtPmxlbikpOworCQl4ZHJfd3JpdGVfcGFnZXMoeGRyLCBhcmdzLT5wYWdlcywgMCwgYXJncy0+bGVuKTsKIAotCWVyciA9IG5mc2FjbF9lbmNvZGUoYnVmLCBiYXNlLCBhcmdzLT5pbm9kZSwKKwliYXNlID0gcmVxLT5ycV9zbGVuOworCWVycm9yID0gbmZzYWNsX2VuY29kZSh4ZHItPmJ1ZiwgYmFzZSwgYXJncy0+aW5vZGUsCiAJCQkgICAgKGFyZ3MtPm1hc2sgJiBORlNfQUNMKSA/CiAJCQkgICAgYXJncy0+YWNsX2FjY2VzcyA6IE5VTEwsIDEsIDApOwotCWlmIChlcnIgPiAwKQotCQllcnIgPSBuZnNhY2xfZW5jb2RlKGJ1ZiwgYmFzZSArIGVyciwgYXJncy0+aW5vZGUsCi0JCQkJICAgIChhcmdzLT5tYXNrICYgTkZTX0RGQUNMKSA/Ci0JCQkJICAgIGFyZ3MtPmFjbF9kZWZhdWx0IDogTlVMTCwgMSwKLQkJCQkgICAgTkZTX0FDTF9ERUZBVUxUKTsKLQlyZXR1cm4gKGVyciA+IDApID8gMCA6IGVycjsKKwlCVUdfT04oZXJyb3IgPCAwKTsKKwllcnJvciA9IG5mc2FjbF9lbmNvZGUoeGRyLT5idWYsIGJhc2UgKyBlcnJvciwgYXJncy0+aW5vZGUsCisJCQkgICAgKGFyZ3MtPm1hc2sgJiBORlNfREZBQ0wpID8KKwkJCSAgICBhcmdzLT5hY2xfZGVmYXVsdCA6IE5VTEwsIDEsCisJCQkgICAgTkZTX0FDTF9ERUZBVUxUKTsKKwlCVUdfT04oZXJyb3IgPCAwKTsKIH0KKwogI2VuZGlmICAvKiBDT05GSUdfTkZTX1YzX0FDTCAqLwogCiAvKgotICogTkZTIFhEUiBkZWNvZGUgZnVuY3Rpb25zCisgKiBORlN2MyBYRFIgZGVjb2RlIGZ1bmN0aW9ucworICoKKyAqIE5GU3YzIHJlc3VsdCB0eXBlcyBhcmUgZGVmaW5lZCBpbiBzZWN0aW9uIDMuMyBvZiBSRkMgMTgxMzoKKyAqICJORlMgVmVyc2lvbiAzIFByb3RvY29sIFNwZWNpZmljYXRpb24iLgogICovCiAKIC8qCi0gKiBEZWNvZGUgYXR0cnN0YXQgcmVwbHkuCisgKiAzLjMuMSAgR0VUQVRUUjNyZXMKKyAqCisgKglzdHJ1Y3QgR0VUQVRUUjNyZXNvayB7CisgKgkJZmF0dHIzCQlvYmpfYXR0cmlidXRlczsKKyAqCX07CisgKgorICoJdW5pb24gR0VUQVRUUjNyZXMgc3dpdGNoIChuZnNzdGF0MyBzdGF0dXMpIHsKKyAqCWNhc2UgTkZTM19PSzoKKyAqCQlHRVRBVFRSM3Jlc29rICByZXNvazsKKyAqCWRlZmF1bHQ6CisgKgkJdm9pZDsKKyAqCX07CiAgKi8KLXN0YXRpYyBpbnQKLW5mczNfeGRyX2F0dHJzdGF0KHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQorc3RhdGljIGludCBuZnMzX3hkcl9kZWNfZ2V0YXR0cjNyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgIHN0cnVjdCBuZnNfZmF0dHIgKnJlc3VsdCkKIHsKLQlpbnQJc3RhdHVzOworCWVudW0gbmZzX3N0YXQgc3RhdHVzOworCWludCBlcnJvcjsKIAotCWlmICgoc3RhdHVzID0gbnRvaGwoKnArKykpKQotCQlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKLQl4ZHJfZGVjb2RlX2ZhdHRyKHAsIGZhdHRyKTsKLQlyZXR1cm4gMDsKKwllcnJvciA9IGRlY29kZV9uZnNzdGF0Myh4ZHIsICZzdGF0dXMpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWlmIChzdGF0dXMgIT0gTkZTM19PSykKKwkJZ290byBvdXRfZGVmYXVsdDsKKwllcnJvciA9IGRlY29kZV9mYXR0cjMoeGRyLCByZXN1bHQpOworb3V0OgorCXJldHVybiBlcnJvcjsKK291dF9kZWZhdWx0OgorCXJldHVybiBuZnNfc3RhdF90b19lcnJubyhzdGF0dXMpOwogfQogCiAvKgotICogRGVjb2RlIHN0YXR1cyt3Y2NfZGF0YSByZXBseQotICogU0FUVFIsIFJFTU9WRSwgUk1ESVIKKyAqIDMuMy4yICBTRVRBVFRSM3JlcworICoKKyAqCXN0cnVjdCBTRVRBVFRSM3Jlc29rIHsKKyAqCQl3Y2NfZGF0YSAgb2JqX3djYzsKKyAqCX07CisgKgorICoJc3RydWN0IFNFVEFUVFIzcmVzZmFpbCB7CisgKgkJd2NjX2RhdGEgIG9ial93Y2M7CisgKgl9OworICoKKyAqCXVuaW9uIFNFVEFUVFIzcmVzIHN3aXRjaCAobmZzc3RhdDMgc3RhdHVzKSB7CisgKgljYXNlIE5GUzNfT0s6CisgKgkJU0VUQVRUUjNyZXNvayAgIHJlc29rOworICoJZGVmYXVsdDoKKyAqCQlTRVRBVFRSM3Jlc2ZhaWwgcmVzZmFpbDsKKyAqCX07CiAgKi8KLXN0YXRpYyBpbnQKLW5mczNfeGRyX3djY3N0YXQoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCitzdGF0aWMgaW50IG5mczNfeGRyX2RlY19zZXRhdHRyM3JlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgc3RydWN0IG5mc19mYXR0ciAqcmVzdWx0KQogewotCWludAlzdGF0dXM7CisJZW51bSBuZnNfc3RhdCBzdGF0dXM7CisJaW50IGVycm9yOwogCi0JaWYgKChzdGF0dXMgPSBudG9obCgqcCsrKSkpCi0JCXN0YXR1cyA9IG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Ci0JeGRyX2RlY29kZV93Y2NfZGF0YShwLCBmYXR0cik7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGludAotbmZzM194ZHJfcmVtb3ZlcmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfcmVtb3ZlcmVzICpyZXMpCi17Ci0JcmV0dXJuIG5mczNfeGRyX3djY3N0YXQocmVxLCBwLCByZXMtPmRpcl9hdHRyKTsKKwllcnJvciA9IGRlY29kZV9uZnNzdGF0Myh4ZHIsICZzdGF0dXMpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gZGVjb2RlX3djY19kYXRhKHhkciwgcmVzdWx0KTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwlpZiAoc3RhdHVzICE9IE5GUzNfT0spCisJCWdvdG8gb3V0X3N0YXR1czsKK291dDoKKwlyZXR1cm4gZXJyb3I7CitvdXRfc3RhdHVzOgorCXJldHVybiBuZnNfc3RhdF90b19lcnJubyhzdGF0dXMpOwogfQogCiAvKgotICogRGVjb2RlIExPT0tVUCByZXBseQorICogMy4zLjMgIExPT0tVUDNyZXMKKyAqCisgKglzdHJ1Y3QgTE9PS1VQM3Jlc29rIHsKKyAqCQluZnNfZmgzCQlvYmplY3Q7CisgKgkJcG9zdF9vcF9hdHRyCW9ial9hdHRyaWJ1dGVzOworICoJCXBvc3Rfb3BfYXR0cglkaXJfYXR0cmlidXRlczsKKyAqCX07CisgKgorICoJc3RydWN0IExPT0tVUDNyZXNmYWlsIHsKKyAqCQlwb3N0X29wX2F0dHIJZGlyX2F0dHJpYnV0ZXM7CisgKgl9OworICoKKyAqCXVuaW9uIExPT0tVUDNyZXMgc3dpdGNoIChuZnNzdGF0MyBzdGF0dXMpIHsKKyAqCWNhc2UgTkZTM19PSzoKKyAqCQlMT09LVVAzcmVzb2sJcmVzb2s7CisgKglkZWZhdWx0OgorICoJCUxPT0tVUDNyZXNmYWlsCXJlc2ZhaWw7CisgKgl9OwogICovCi1zdGF0aWMgaW50Ci1uZnMzX3hkcl9sb29rdXByZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mczNfZGlyb3ByZXMgKnJlcykKK3N0YXRpYyBpbnQgbmZzM194ZHJfZGVjX2xvb2t1cDNyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICBzdHJ1Y3QgbmZzM19kaXJvcHJlcyAqcmVzdWx0KQogewotCWludAlzdGF0dXM7CisJZW51bSBuZnNfc3RhdCBzdGF0dXM7CisJaW50IGVycm9yOwogCi0JaWYgKChzdGF0dXMgPSBudG9obCgqcCsrKSkpIHsKLQkJc3RhdHVzID0gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKLQl9IGVsc2UgewotCQlpZiAoIShwID0geGRyX2RlY29kZV9maGFuZGxlKHAsIHJlcy0+ZmgpKSkKLQkJCXJldHVybiAtZXJybm9fTkZTRVJSX0lPOwotCQlwID0geGRyX2RlY29kZV9wb3N0X29wX2F0dHIocCwgcmVzLT5mYXR0cik7Ci0JfQotCXhkcl9kZWNvZGVfcG9zdF9vcF9hdHRyKHAsIHJlcy0+ZGlyX2F0dHIpOwotCXJldHVybiBzdGF0dXM7CisJZXJyb3IgPSBkZWNvZGVfbmZzc3RhdDMoeGRyLCAmc3RhdHVzKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwlpZiAoc3RhdHVzICE9IE5GUzNfT0spCisJCWdvdG8gb3V0X2RlZmF1bHQ7CisJZXJyb3IgPSBkZWNvZGVfbmZzX2ZoMyh4ZHIsIHJlc3VsdC0+ZmgpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gZGVjb2RlX3Bvc3Rfb3BfYXR0cih4ZHIsIHJlc3VsdC0+ZmF0dHIpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gZGVjb2RlX3Bvc3Rfb3BfYXR0cih4ZHIsIHJlc3VsdC0+ZGlyX2F0dHIpOworb3V0OgorCXJldHVybiBlcnJvcjsKK291dF9kZWZhdWx0OgorCWVycm9yID0gZGVjb2RlX3Bvc3Rfb3BfYXR0cih4ZHIsIHJlc3VsdC0+ZGlyX2F0dHIpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCXJldHVybiBuZnNfc3RhdF90b19lcnJubyhzdGF0dXMpOwogfQogCiAvKgotICogRGVjb2RlIEFDQ0VTUyByZXBseQorICogMy4zLjQgIEFDQ0VTUzNyZXMKKyAqCisgKglzdHJ1Y3QgQUNDRVNTM3Jlc29rIHsKKyAqCQlwb3N0X29wX2F0dHIJb2JqX2F0dHJpYnV0ZXM7CisgKgkJdWludDMyCQlhY2Nlc3M7CisgKgl9OworICoKKyAqCXN0cnVjdCBBQ0NFU1MzcmVzZmFpbCB7CisgKgkJcG9zdF9vcF9hdHRyCW9ial9hdHRyaWJ1dGVzOworICoJfTsKKyAqCisgKgl1bmlvbiBBQ0NFU1MzcmVzIHN3aXRjaCAobmZzc3RhdDMgc3RhdHVzKSB7CisgKgljYXNlIE5GUzNfT0s6CisgKgkJQUNDRVNTM3Jlc29rCXJlc29rOworICoJZGVmYXVsdDoKKyAqCQlBQ0NFU1MzcmVzZmFpbAlyZXNmYWlsOworICoJfTsKICAqLwotc3RhdGljIGludAotbmZzM194ZHJfYWNjZXNzcmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnMzX2FjY2Vzc3JlcyAqcmVzKQorc3RhdGljIGludCBuZnMzX3hkcl9kZWNfYWNjZXNzM3JlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgIHN0cnVjdCBuZnMzX2FjY2Vzc3JlcyAqcmVzdWx0KQogewotCWludAlzdGF0dXMgPSBudG9obCgqcCsrKTsKKwllbnVtIG5mc19zdGF0IHN0YXR1czsKKwlpbnQgZXJyb3I7CiAKLQlwID0geGRyX2RlY29kZV9wb3N0X29wX2F0dHIocCwgcmVzLT5mYXR0cik7Ci0JaWYgKHN0YXR1cykKLQkJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Ci0JcmVzLT5hY2Nlc3MgPSBudG9obCgqcCsrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbmZzM194ZHJfcmVhZGxpbmthcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnMzX3JlYWRsaW5rYXJncyAqYXJncykKLXsKLQlzdHJ1Y3QgcnBjX2F1dGgJKmF1dGggPSByZXEtPnJxX2NyZWQtPmNyX2F1dGg7Ci0JdW5zaWduZWQgaW50IHJlcGxlbjsKLQotCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgYXJncy0+ZmgpOwotCXJlcS0+cnFfc2xlbiA9IHhkcl9hZGp1c3RfaW92ZWMocmVxLT5ycV9zdmVjLCBwKTsKLQotCS8qIElubGluZSB0aGUgcGFnZSBhcnJheSAqLwotCXJlcGxlbiA9IChSUENfUkVQSERSU0laRSArIGF1dGgtPmF1X3JzbGFjayArIE5GUzNfcmVhZGxpbmtyZXNfc3opIDw8IDI7Ci0JeGRyX2lubGluZV9wYWdlcygmcmVxLT5ycV9yY3ZfYnVmLCByZXBsZW4sIGFyZ3MtPnBhZ2VzLCBhcmdzLT5wZ2Jhc2UsIGFyZ3MtPnBnbGVuKTsKLQlyZXR1cm4gMDsKKwllcnJvciA9IGRlY29kZV9uZnNzdGF0Myh4ZHIsICZzdGF0dXMpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gZGVjb2RlX3Bvc3Rfb3BfYXR0cih4ZHIsIHJlc3VsdC0+ZmF0dHIpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWlmIChzdGF0dXMgIT0gTkZTM19PSykKKwkJZ290byBvdXRfZGVmYXVsdDsKKwllcnJvciA9IGRlY29kZV91aW50MzIoeGRyLCAmcmVzdWx0LT5hY2Nlc3MpOworb3V0OgorCXJldHVybiBlcnJvcjsKK291dF9kZWZhdWx0OgorCXJldHVybiBuZnNfc3RhdF90b19lcnJubyhzdGF0dXMpOwogfQogCiAvKgotICogRGVjb2RlIFJFQURMSU5LIHJlcGx5CisgKiAzLjMuNSAgUkVBRExJTkszcmVzCisgKgorICoJc3RydWN0IFJFQURMSU5LM3Jlc29rIHsKKyAqCQlwb3N0X29wX2F0dHIJc3ltbGlua19hdHRyaWJ1dGVzOworICoJCW5mc3BhdGgzCWRhdGE7CisgKgl9OworICoKKyAqCXN0cnVjdCBSRUFETElOSzNyZXNmYWlsIHsKKyAqCQlwb3N0X29wX2F0dHIJc3ltbGlua19hdHRyaWJ1dGVzOworICoJfTsKKyAqCisgKgl1bmlvbiBSRUFETElOSzNyZXMgc3dpdGNoIChuZnNzdGF0MyBzdGF0dXMpIHsKKyAqCWNhc2UgTkZTM19PSzoKKyAqCQlSRUFETElOSzNyZXNvawlyZXNvazsKKyAqCWRlZmF1bHQ6CisgKgkJUkVBRExJTkszcmVzZmFpbCByZXNmYWlsOworICoJfTsKICAqLwotc3RhdGljIGludAotbmZzM194ZHJfcmVhZGxpbmtyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCitzdGF0aWMgaW50IG5mczNfeGRyX2RlY19yZWFkbGluazNyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICAgc3RydWN0IG5mc19mYXR0ciAqcmVzdWx0KQogewotCXN0cnVjdCB4ZHJfYnVmICpyY3ZidWYgPSAmcmVxLT5ycV9yY3ZfYnVmOwotCXN0cnVjdCBrdmVjICppb3YgPSByY3ZidWYtPmhlYWQ7CisJZW51bSBuZnNfc3RhdCBzdGF0dXM7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBkZWNvZGVfbmZzc3RhdDMoeGRyLCAmc3RhdHVzKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwllcnJvciA9IGRlY29kZV9wb3N0X29wX2F0dHIoeGRyLCByZXN1bHQpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWlmIChzdGF0dXMgIT0gTkZTM19PSykKKwkJZ290byBvdXRfZGVmYXVsdDsKKwllcnJvciA9IGRlY29kZV9uZnNwYXRoMyh4ZHIpOworb3V0OgorCXJldHVybiBlcnJvcjsKK291dF9kZWZhdWx0OgorCXJldHVybiBuZnNfc3RhdF90b19lcnJubyhzdGF0dXMpOworfQorCisvKgorICogMy4zLjYgIFJFQUQzcmVzCisgKgorICoJc3RydWN0IFJFQUQzcmVzb2sgeworICoJCXBvc3Rfb3BfYXR0cglmaWxlX2F0dHJpYnV0ZXM7CisgKgkJY291bnQzCQljb3VudDsKKyAqCQlib29sCQllb2Y7CisgKgkJb3BhcXVlCQlkYXRhPD47CisgKgl9OworICoKKyAqCXN0cnVjdCBSRUFEM3Jlc2ZhaWwgeworICoJCXBvc3Rfb3BfYXR0cglmaWxlX2F0dHJpYnV0ZXM7CisgKgl9OworICoKKyAqCXVuaW9uIFJFQUQzcmVzIHN3aXRjaCAobmZzc3RhdDMgc3RhdHVzKSB7CisgKgljYXNlIE5GUzNfT0s6CisgKgkJUkVBRDNyZXNvawlyZXNvazsKKyAqCWRlZmF1bHQ6CisgKgkJUkVBRDNyZXNmYWlsCXJlc2ZhaWw7CisgKgl9OworICovCitzdGF0aWMgaW50IGRlY29kZV9yZWFkM3Jlc29rKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgIHN0cnVjdCBuZnNfcmVhZHJlcyAqcmVzdWx0KQoreworCXUzMiBlb2YsIGNvdW50LCBvY291bnQsIHJlY3ZkOwogCXNpemVfdCBoZHJsZW47Ci0JdTMyIGxlbiwgcmVjdmQ7Ci0JaW50CXN0YXR1czsKKwlfX2JlMzIgKnA7CiAKLQlzdGF0dXMgPSBudG9obCgqcCsrKTsKLQlwID0geGRyX2RlY29kZV9wb3N0X29wX2F0dHIocCwgZmF0dHIpOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQgKyA0ICsgNCk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWNvdW50ID0gYmUzMl90b19jcHVwKHArKyk7CisJZW9mID0gYmUzMl90b19jcHVwKHArKyk7CisJb2NvdW50ID0gYmUzMl90b19jcHVwKHArKyk7CisJaWYgKHVubGlrZWx5KG9jb3VudCAhPSBjb3VudCkpCisJCWdvdG8gb3V0X21pc21hdGNoOworCWhkcmxlbiA9ICh1OCAqKXhkci0+cCAtICh1OCAqKXhkci0+aW92LT5pb3ZfYmFzZTsKKwlyZWN2ZCA9IHhkci0+YnVmLT5sZW4gLSBoZHJsZW47CisJaWYgKHVubGlrZWx5KGNvdW50ID4gcmVjdmQpKQorCQlnb3RvIG91dF9jaGVhdGluZzsKIAotCWlmIChzdGF0dXMgIT0gMCkKLQkJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Ci0KLQkvKiBDb252ZXJ0IGxlbmd0aCBvZiBzeW1saW5rICovCi0JbGVuID0gbnRvaGwoKnArKyk7Ci0JaWYgKGxlbiA+PSByY3ZidWYtPnBhZ2VfbGVuKSB7Ci0JCWRwcmludGsoIm5mczogc2VydmVyIHJldHVybmVkIGdpYW50IHN5bWxpbmshXG4iKTsKLQkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7Ci0JfQotCi0JaGRybGVuID0gKHU4ICopIHAgLSAodTggKikgaW92LT5pb3ZfYmFzZTsKLQlpZiAoaW92LT5pb3ZfbGVuIDwgaGRybGVuKSB7Ci0JCWRwcmludGsoIk5GUzogUkVBRExJTksgcmVwbHkgaGVhZGVyIG92ZXJmbG93ZWQ6IgotCQkJCSJsZW5ndGggJVp1ID4gJVp1XG4iLCBoZHJsZW4sIGlvdi0+aW92X2xlbik7Ci0JCXJldHVybiAtZXJybm9fTkZTRVJSX0lPOwotCX0gZWxzZSBpZiAoaW92LT5pb3ZfbGVuICE9IGhkcmxlbikgewotCQlkcHJpbnRrKCJORlM6IFJFQURMSU5LIGhlYWRlciBpcyBzaG9ydC4gIgotCQkJImlvdmVjIHdpbGwgYmUgc2hpZnRlZC5cbiIpOwotCQl4ZHJfc2hpZnRfYnVmKHJjdmJ1ZiwgaW92LT5pb3ZfbGVuIC0gaGRybGVuKTsKLQl9Ci0JcmVjdmQgPSByZXEtPnJxX3Jjdl9idWYubGVuIC0gaGRybGVuOwotCWlmIChyZWN2ZCA8IGxlbikgewotCQlkcHJpbnRrKCJORlM6IHNlcnZlciBjaGVhdGluZyBpbiByZWFkbGluayByZXBseTogIgotCQkJCSJjb3VudCAldSA+IHJlY3ZkICV1XG4iLCBsZW4sIHJlY3ZkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JeGRyX3Rlcm1pbmF0ZV9zdHJpbmcocmN2YnVmLCBsZW4pOwotCXJldHVybiAwOwotfQotCi0vKgotICogRGVjb2RlIFJFQUQgcmVwbHkKLSAqLwotc3RhdGljIGludAotbmZzM194ZHJfcmVhZHJlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3JlYWRyZXMgKnJlcykKLXsKLQlzdHJ1Y3Qga3ZlYyAqaW92ID0gcmVxLT5ycV9yY3ZfYnVmLmhlYWQ7Ci0Jc2l6ZV90IGhkcmxlbjsKLQl1MzIgY291bnQsIG9jb3VudCwgcmVjdmQ7Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IG50b2hsKCpwKyspOwotCXAgPSB4ZHJfZGVjb2RlX3Bvc3Rfb3BfYXR0cihwLCByZXMtPmZhdHRyKTsKLQotCWlmIChzdGF0dXMgIT0gMCkKLQkJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Ci0KLQkvKiBEZWNvZGUgcmVwbHkgY291bnQgYW5kIEVPRiBmbGFnLiBORlN2MyBpcyBzb21ld2hhdCByZWR1bmRhbnQKLQkgKiBpbiB0aGF0IGl0IHB1dHMgdGhlIGNvdW50IGJvdGggaW4gdGhlIHJlcyBzdHJ1Y3QgYW5kIGluIHRoZQotCSAqIG9wYXF1ZSBkYXRhIGNvdW50LiAqLwotCWNvdW50ICAgID0gbnRvaGwoKnArKyk7Ci0JcmVzLT5lb2YgPSBudG9obCgqcCsrKTsKLQlvY291bnQgICA9IG50b2hsKCpwKyspOwotCi0JaWYgKG9jb3VudCAhPSBjb3VudCkgewotCQlkcHJpbnRrKCJORlM6IFJFQUQgY291bnQgZG9lc24ndCBtYXRjaCBSUEMgb3BhcXVlIGNvdW50LlxuIik7Ci0JCXJldHVybiAtZXJybm9fTkZTRVJSX0lPOwotCX0KLQotCWhkcmxlbiA9ICh1OCAqKSBwIC0gKHU4ICopIGlvdi0+aW92X2Jhc2U7Ci0JaWYgKGlvdi0+aW92X2xlbiA8IGhkcmxlbikgewotCQlkcHJpbnRrKCJORlM6IFJFQUQgcmVwbHkgaGVhZGVyIG92ZXJmbG93ZWQ6IgotCQkJCSJsZW5ndGggJVp1ID4gJVp1XG4iLCBoZHJsZW4sIGlvdi0+aW92X2xlbik7Ci0gICAgICAgCQlyZXR1cm4gLWVycm5vX05GU0VSUl9JTzsKLQl9IGVsc2UgaWYgKGlvdi0+aW92X2xlbiAhPSBoZHJsZW4pIHsKLQkJZHByaW50aygiTkZTOiBSRUFEIGhlYWRlciBpcyBzaG9ydC4gaW92ZWMgd2lsbCBiZSBzaGlmdGVkLlxuIik7Ci0JCXhkcl9zaGlmdF9idWYoJnJlcS0+cnFfcmN2X2J1ZiwgaW92LT5pb3ZfbGVuIC0gaGRybGVuKTsKLQl9Ci0KLQlyZWN2ZCA9IHJlcS0+cnFfcmN2X2J1Zi5sZW4gLSBoZHJsZW47Ci0JaWYgKGNvdW50ID4gcmVjdmQpIHsKLQkJZHByaW50aygiTkZTOiBzZXJ2ZXIgY2hlYXRpbmcgaW4gcmVhZCByZXBseTogIgotCQkJImNvdW50ICV1ID4gcmVjdmQgJXVcbiIsIGNvdW50LCByZWN2ZCk7Ci0JCWNvdW50ID0gcmVjdmQ7Ci0JCXJlcy0+ZW9mID0gMDsKLQl9Ci0KLQlpZiAoY291bnQgPCByZXMtPmNvdW50KQotCQlyZXMtPmNvdW50ID0gY291bnQ7Ci0KK291dDoKKwl4ZHJfcmVhZF9wYWdlcyh4ZHIsIGNvdW50KTsKKwlyZXN1bHQtPmVvZiA9IGVvZjsKKwlyZXN1bHQtPmNvdW50ID0gY291bnQ7CiAJcmV0dXJuIGNvdW50Oworb3V0X21pc21hdGNoOgorCWRwcmludGsoIk5GUzogUkVBRCBjb3VudCBkb2Vzbid0IG1hdGNoIGxlbmd0aCBvZiBvcGFxdWU6ICIKKwkJImNvdW50ICV1ICE9IG9jb3VudCAldVxuIiwgY291bnQsIG9jb3VudCk7CisJcmV0dXJuIC1FSU87CitvdXRfY2hlYXRpbmc6CisJZHByaW50aygiTkZTOiBzZXJ2ZXIgY2hlYXRpbmcgaW4gcmVhZCByZXN1bHQ6ICIKKwkJImNvdW50ICV1ID4gcmVjdmQgJXVcbiIsIGNvdW50LCByZWN2ZCk7CisJY291bnQgPSByZWN2ZDsKKwllb2YgPSAwOworCWdvdG8gb3V0Oworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBuZnMzX3hkcl9kZWNfcmVhZDNyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJIHN0cnVjdCBuZnNfcmVhZHJlcyAqcmVzdWx0KQoreworCWVudW0gbmZzX3N0YXQgc3RhdHVzOworCWludCBlcnJvcjsKKworCWVycm9yID0gZGVjb2RlX25mc3N0YXQzKHhkciwgJnN0YXR1cyk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisJZXJyb3IgPSBkZWNvZGVfcG9zdF9vcF9hdHRyKHhkciwgcmVzdWx0LT5mYXR0cik7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisJaWYgKHN0YXR1cyAhPSBORlMzX09LKQorCQlnb3RvIG91dF9zdGF0dXM7CisJZXJyb3IgPSBkZWNvZGVfcmVhZDNyZXNvayh4ZHIsIHJlc3VsdCk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworb3V0X3N0YXR1czoKKwlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKIH0KIAogLyoKLSAqIERlY29kZSBXUklURSByZXNwb25zZQorICogMy4zLjcgIFdSSVRFM3JlcworICoKKyAqCWVudW0gc3RhYmxlX2hvdyB7CisgKgkJVU5TVEFCTEUgID0gMCwKKyAqCQlEQVRBX1NZTkMgPSAxLAorICoJCUZJTEVfU1lOQyA9IDIKKyAqCX07CisgKgorICoJc3RydWN0IFdSSVRFM3Jlc29rIHsKKyAqCQl3Y2NfZGF0YQlmaWxlX3djYzsKKyAqCQljb3VudDMJCWNvdW50OworICoJCXN0YWJsZV9ob3cJY29tbWl0dGVkOworICoJCXdyaXRldmVyZjMJdmVyZjsKKyAqCX07CisgKgorICoJc3RydWN0IFdSSVRFM3Jlc2ZhaWwgeworICoJCXdjY19kYXRhCWZpbGVfd2NjOworICoJfTsKKyAqCisgKgl1bmlvbiBXUklURTNyZXMgc3dpdGNoIChuZnNzdGF0MyBzdGF0dXMpIHsKKyAqCWNhc2UgTkZTM19PSzoKKyAqCQlXUklURTNyZXNvawlyZXNvazsKKyAqCWRlZmF1bHQ6CisgKgkJV1JJVEUzcmVzZmFpbAlyZXNmYWlsOworICoJfTsKICAqLwotc3RhdGljIGludAotbmZzM194ZHJfd3JpdGVyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mc193cml0ZXJlcyAqcmVzKQorc3RhdGljIGludCBkZWNvZGVfd3JpdGUzcmVzb2soc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgIHN0cnVjdCBuZnNfd3JpdGVyZXMgKnJlc3VsdCkKIHsKLQlpbnQJc3RhdHVzOworCV9fYmUzMiAqcDsKIAotCXN0YXR1cyA9IG50b2hsKCpwKyspOwotCXAgPSB4ZHJfZGVjb2RlX3djY19kYXRhKHAsIHJlcy0+ZmF0dHIpOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQgKyA0ICsgTkZTM19XUklURVZFUkZTSVpFKTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJcmVzdWx0LT5jb3VudCA9IGJlMzJfdG9fY3B1cChwKyspOworCXJlc3VsdC0+dmVyZi0+Y29tbWl0dGVkID0gYmUzMl90b19jcHVwKHArKyk7CisJaWYgKHVubGlrZWx5KHJlc3VsdC0+dmVyZi0+Y29tbWl0dGVkID4gTkZTX0ZJTEVfU1lOQykpCisJCWdvdG8gb3V0X2JhZHZhbHVlOworCW1lbWNweShyZXN1bHQtPnZlcmYtPnZlcmlmaWVyLCBwLCBORlMzX1dSSVRFVkVSRlNJWkUpOworCXJldHVybiByZXN1bHQtPmNvdW50Oworb3V0X2JhZHZhbHVlOgorCWRwcmludGsoIk5GUzogYmFkIHN0YWJsZV9ob3cgdmFsdWU6ICV1XG4iLCByZXN1bHQtPnZlcmYtPmNvbW1pdHRlZCk7CisJcmV0dXJuIC1FSU87CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOworfQogCi0JaWYgKHN0YXR1cyAhPSAwKQotCQlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKK3N0YXRpYyBpbnQgbmZzM194ZHJfZGVjX3dyaXRlM3JlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgIHN0cnVjdCBuZnNfd3JpdGVyZXMgKnJlc3VsdCkKK3sKKwllbnVtIG5mc19zdGF0IHN0YXR1czsKKwlpbnQgZXJyb3I7CiAKLQlyZXMtPmNvdW50ID0gbnRvaGwoKnArKyk7Ci0JcmVzLT52ZXJmLT5jb21taXR0ZWQgPSAoZW51bSBuZnMzX3N0YWJsZV9ob3cpbnRvaGwoKnArKyk7Ci0JcmVzLT52ZXJmLT52ZXJpZmllclswXSA9ICpwKys7Ci0JcmVzLT52ZXJmLT52ZXJpZmllclsxXSA9ICpwKys7Ci0KLQlyZXR1cm4gcmVzLT5jb3VudDsKKwllcnJvciA9IGRlY29kZV9uZnNzdGF0Myh4ZHIsICZzdGF0dXMpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gZGVjb2RlX3djY19kYXRhKHhkciwgcmVzdWx0LT5mYXR0cik7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisJaWYgKHN0YXR1cyAhPSBORlMzX09LKQorCQlnb3RvIG91dF9zdGF0dXM7CisJZXJyb3IgPSBkZWNvZGVfd3JpdGUzcmVzb2soeGRyLCByZXN1bHQpOworb3V0OgorCXJldHVybiBlcnJvcjsKK291dF9zdGF0dXM6CisJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7CiB9CiAKIC8qCi0gKiBEZWNvZGUgYSBDUkVBVEUgcmVzcG9uc2UKKyAqIDMuMy44ICBDUkVBVEUzcmVzCisgKgorICoJc3RydWN0IENSRUFURTNyZXNvayB7CisgKgkJcG9zdF9vcF9maDMJb2JqOworICoJCXBvc3Rfb3BfYXR0cglvYmpfYXR0cmlidXRlczsKKyAqCQl3Y2NfZGF0YQlkaXJfd2NjOworICoJfTsKKyAqCisgKglzdHJ1Y3QgQ1JFQVRFM3Jlc2ZhaWwgeworICoJCXdjY19kYXRhCWRpcl93Y2M7CisgKgl9OworICoKKyAqCXVuaW9uIENSRUFURTNyZXMgc3dpdGNoIChuZnNzdGF0MyBzdGF0dXMpIHsKKyAqCWNhc2UgTkZTM19PSzoKKyAqCQlDUkVBVEUzcmVzb2sJcmVzb2s7CisgKglkZWZhdWx0OgorICoJCUNSRUFURTNyZXNmYWlsCXJlc2ZhaWw7CisgKgl9OwogICovCi1zdGF0aWMgaW50Ci1uZnMzX3hkcl9jcmVhdGVyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mczNfZGlyb3ByZXMgKnJlcykKK3N0YXRpYyBpbnQgZGVjb2RlX2NyZWF0ZTNyZXNvayhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgIHN0cnVjdCBuZnMzX2Rpcm9wcmVzICpyZXN1bHQpCiB7Ci0JaW50CXN0YXR1czsKKwlpbnQgZXJyb3I7CiAKLQlzdGF0dXMgPSBudG9obCgqcCsrKTsKLQlpZiAoc3RhdHVzID09IDApIHsKLQkJaWYgKCpwKyspIHsKLQkJCWlmICghKHAgPSB4ZHJfZGVjb2RlX2ZoYW5kbGUocCwgcmVzLT5maCkpKQotCQkJCXJldHVybiAtZXJybm9fTkZTRVJSX0lPOwotCQkJcCA9IHhkcl9kZWNvZGVfcG9zdF9vcF9hdHRyKHAsIHJlcy0+ZmF0dHIpOwotCQl9IGVsc2UgewotCQkJbWVtc2V0KHJlcy0+ZmgsIDAsIHNpemVvZigqcmVzLT5maCkpOwotCQkJLyogRG8gZGVjb2RlIHBvc3Rfb3BfYXR0ciBidXQgc2V0IGl0IHRvIE5VTEwgKi8KLQkJCXAgPSB4ZHJfZGVjb2RlX3Bvc3Rfb3BfYXR0cihwLCByZXMtPmZhdHRyKTsKLQkJCXJlcy0+ZmF0dHItPnZhbGlkID0gMDsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0YXR1cyA9IG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7CisJZXJyb3IgPSBkZWNvZGVfcG9zdF9vcF9maDMoeGRyLCByZXN1bHQtPmZoKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwllcnJvciA9IGRlY29kZV9wb3N0X29wX2F0dHIoeGRyLCByZXN1bHQtPmZhdHRyKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwkvKiBUaGUgc2VydmVyIGlzbid0IHJlcXVpcmVkIHRvIHJldHVybiBhIGZpbGUgaGFuZGxlLgorCSAqIElmIGl0IGRpZG4ndCwgZm9yY2UgdGhlIGNsaWVudCB0byBwZXJmb3JtIGEgTE9PS1VQCisJICogdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZpbGUgaGFuZGxlIGFuZCBhdHRyaWJ1dGUKKwkgKiB2YWx1ZXMgZm9yIHRoZSBuZXcgb2JqZWN0LiAqLworCWlmIChyZXN1bHQtPmZoLT5zaXplID09IDApCisJCXJlc3VsdC0+ZmF0dHItPnZhbGlkID0gMDsKKwllcnJvciA9IGRlY29kZV93Y2NfZGF0YSh4ZHIsIHJlc3VsdC0+ZGlyX2F0dHIpOworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBuZnMzX3hkcl9kZWNfY3JlYXRlM3JlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgIHN0cnVjdCBuZnMzX2Rpcm9wcmVzICpyZXN1bHQpCit7CisJZW51bSBuZnNfc3RhdCBzdGF0dXM7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBkZWNvZGVfbmZzc3RhdDMoeGRyLCAmc3RhdHVzKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwlpZiAoc3RhdHVzICE9IE5GUzNfT0spCisJCWdvdG8gb3V0X2RlZmF1bHQ7CisJZXJyb3IgPSBkZWNvZGVfY3JlYXRlM3Jlc29rKHhkciwgcmVzdWx0KTsKK291dDoKKwlyZXR1cm4gZXJyb3I7CitvdXRfZGVmYXVsdDoKKwllcnJvciA9IGRlY29kZV93Y2NfZGF0YSh4ZHIsIHJlc3VsdC0+ZGlyX2F0dHIpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCXJldHVybiBuZnNfc3RhdF90b19lcnJubyhzdGF0dXMpOworfQorCisvKgorICogMy4zLjEyICBSRU1PVkUzcmVzCisgKgorICoJc3RydWN0IFJFTU9WRTNyZXNvayB7CisgKgkJd2NjX2RhdGEgICAgZGlyX3djYzsKKyAqCX07CisgKgorICoJc3RydWN0IFJFTU9WRTNyZXNmYWlsIHsKKyAqCQl3Y2NfZGF0YSAgICBkaXJfd2NjOworICoJfTsKKyAqCisgKgl1bmlvbiBSRU1PVkUzcmVzIHN3aXRjaCAobmZzc3RhdDMgc3RhdHVzKSB7CisgKgljYXNlIE5GUzNfT0s6CisgKgkJUkVNT1ZFM3Jlc29rICAgcmVzb2s7CisgKglkZWZhdWx0OgorICoJCVJFTU9WRTNyZXNmYWlsIHJlc2ZhaWw7CisgKgl9OworICovCitzdGF0aWMgaW50IG5mczNfeGRyX2RlY19yZW1vdmUzcmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgc3RydWN0IG5mc19yZW1vdmVyZXMgKnJlc3VsdCkKK3sKKwllbnVtIG5mc19zdGF0IHN0YXR1czsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGRlY29kZV9uZnNzdGF0Myh4ZHIsICZzdGF0dXMpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gZGVjb2RlX3djY19kYXRhKHhkciwgcmVzdWx0LT5kaXJfYXR0cik7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisJaWYgKHN0YXR1cyAhPSBORlMzX09LKQorCQlnb3RvIG91dF9zdGF0dXM7CitvdXQ6CisJcmV0dXJuIGVycm9yOworb3V0X3N0YXR1czoKKwlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKK30KKworLyoKKyAqIDMuMy4xNCAgUkVOQU1FM3JlcworICoKKyAqCXN0cnVjdCBSRU5BTUUzcmVzb2sgeworICoJCXdjY19kYXRhCWZyb21kaXJfd2NjOworICoJCXdjY19kYXRhCXRvZGlyX3djYzsKKyAqCX07CisgKgorICoJc3RydWN0IFJFTkFNRTNyZXNmYWlsIHsKKyAqCQl3Y2NfZGF0YQlmcm9tZGlyX3djYzsKKyAqCQl3Y2NfZGF0YQl0b2Rpcl93Y2M7CisgKgl9OworICoKKyAqCXVuaW9uIFJFTkFNRTNyZXMgc3dpdGNoIChuZnNzdGF0MyBzdGF0dXMpIHsKKyAqCWNhc2UgTkZTM19PSzoKKyAqCQlSRU5BTUUzcmVzb2sgICByZXNvazsKKyAqCWRlZmF1bHQ6CisgKgkJUkVOQU1FM3Jlc2ZhaWwgcmVzZmFpbDsKKyAqCX07CisgKi8KK3N0YXRpYyBpbnQgbmZzM194ZHJfZGVjX3JlbmFtZTNyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICBzdHJ1Y3QgbmZzX3JlbmFtZXJlcyAqcmVzdWx0KQoreworCWVudW0gbmZzX3N0YXQgc3RhdHVzOworCWludCBlcnJvcjsKKworCWVycm9yID0gZGVjb2RlX25mc3N0YXQzKHhkciwgJnN0YXR1cyk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisJZXJyb3IgPSBkZWNvZGVfd2NjX2RhdGEoeGRyLCByZXN1bHQtPm9sZF9mYXR0cik7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisJZXJyb3IgPSBkZWNvZGVfd2NjX2RhdGEoeGRyLCByZXN1bHQtPm5ld19mYXR0cik7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisJaWYgKHN0YXR1cyAhPSBORlMzX09LKQorCQlnb3RvIG91dF9zdGF0dXM7CitvdXQ6CisJcmV0dXJuIGVycm9yOworb3V0X3N0YXR1czoKKwlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKK30KKworLyoKKyAqIDMuMy4xNSAgTElOSzNyZXMKKyAqCisgKglzdHJ1Y3QgTElOSzNyZXNvayB7CisgKgkJcG9zdF9vcF9hdHRyCWZpbGVfYXR0cmlidXRlczsKKyAqCQl3Y2NfZGF0YQlsaW5rZGlyX3djYzsKKyAqCX07CisgKgorICoJc3RydWN0IExJTkszcmVzZmFpbCB7CisgKgkJcG9zdF9vcF9hdHRyCWZpbGVfYXR0cmlidXRlczsKKyAqCQl3Y2NfZGF0YQlsaW5rZGlyX3djYzsKKyAqCX07CisgKgorICoJdW5pb24gTElOSzNyZXMgc3dpdGNoIChuZnNzdGF0MyBzdGF0dXMpIHsKKyAqCWNhc2UgTkZTM19PSzoKKyAqCQlMSU5LM3Jlc29rCXJlc29rOworICoJZGVmYXVsdDoKKyAqCQlMSU5LM3Jlc2ZhaWwJcmVzZmFpbDsKKyAqCX07CisgKi8KK3N0YXRpYyBpbnQgbmZzM194ZHJfZGVjX2xpbmszcmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSBzdHJ1Y3QgbmZzM19saW5rcmVzICpyZXN1bHQpCit7CisJZW51bSBuZnNfc3RhdCBzdGF0dXM7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBkZWNvZGVfbmZzc3RhdDMoeGRyLCAmc3RhdHVzKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwllcnJvciA9IGRlY29kZV9wb3N0X29wX2F0dHIoeGRyLCByZXN1bHQtPmZhdHRyKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwllcnJvciA9IGRlY29kZV93Y2NfZGF0YSh4ZHIsIHJlc3VsdC0+ZGlyX2F0dHIpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWlmIChzdGF0dXMgIT0gTkZTM19PSykKKwkJZ290byBvdXRfc3RhdHVzOworb3V0OgorCXJldHVybiBlcnJvcjsKK291dF9zdGF0dXM6CisJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Cit9CisKKy8qKgorICogbmZzM19kZWNvZGVfZGlyZW50IC0gRGVjb2RlIGEgc2luZ2xlIE5GU3YzIGRpcmVjdG9yeSBlbnRyeSBzdG9yZWQgaW4KKyAqCQkJdGhlIGxvY2FsIHBhZ2UgY2FjaGUKKyAqIEB4ZHI6IFhEUiBzdHJlYW0gd2hlcmUgZW50cnkgcmVzaWRlcworICogQGVudHJ5OiBidWZmZXIgdG8gZmlsbCBpbiB3aXRoIGVudHJ5IGRhdGEKKyAqIEBwbHVzOiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGlzIHNob3VsZCBiZSBhIHJlYWRkaXJwbHVzIGVudHJ5CisgKgorICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIGlzCisgKiByZXR1cm5lZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBpbnZva2VkIGR1cmluZyBSRUFERElSIHJlcGx5IGRlY29kaW5nLCBidXQKKyAqIHJhdGhlciB3aGVuZXZlciBhbiBhcHBsaWNhdGlvbiBpbnZva2VzIHRoZSBnZXRkZW50cygyKSBzeXN0ZW0gY2FsbAorICogb24gYSBkaXJlY3RvcnkgYWxyZWFkeSBpbiBvdXIgY2FjaGUuCisgKgorICogMy4zLjE2ICBlbnRyeTMKKyAqCisgKglzdHJ1Y3QgZW50cnkzIHsKKyAqCQlmaWxlaWQzCQlmaWxlaWQ7CisgKgkJZmlsZW5hbWUzCW5hbWU7CisgKgkJY29va2llMwkJY29va2llOworICoJCWZoYW5kbGUzCWZpbGVoYW5kbGU7CisgKgkJcG9zdF9vcF9hdHRyMwlhdHRyaWJ1dGVzOworICoJCWVudHJ5MwkJKm5leHRlbnRyeTsKKyAqCX07CisgKgorICogMy4zLjE3ICBlbnRyeXBsdXMzCisgKglzdHJ1Y3QgZW50cnlwbHVzMyB7CisgKgkJZmlsZWlkMwkJZmlsZWlkOworICoJCWZpbGVuYW1lMwluYW1lOworICoJCWNvb2tpZTMJCWNvb2tpZTsKKyAqCQlwb3N0X29wX2F0dHIJbmFtZV9hdHRyaWJ1dGVzOworICoJCXBvc3Rfb3BfZmgzCW5hbWVfaGFuZGxlOworICoJCWVudHJ5cGx1czMJKm5leHRlbnRyeTsKKyAqCX07CisgKi8KK2ludCBuZnMzX2RlY29kZV9kaXJlbnQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19lbnRyeSAqZW50cnksCisJCSAgICAgICBpbnQgcGx1cykKK3sKKwlzdHJ1Y3QgbmZzX2VudHJ5IG9sZCA9ICplbnRyeTsKKwlfX2JlMzIgKnA7CisJaW50IGVycm9yOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWlmICgqcCA9PSB4ZHJfemVybykgeworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwkJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCQlnb3RvIG91dF9vdmVyZmxvdzsKKwkJaWYgKCpwID09IHhkcl96ZXJvKQorCQkJcmV0dXJuIC1FQUdBSU47CisJCWVudHJ5LT5lb2YgPSAxOworCQlyZXR1cm4gLUVCQURDT09LSUU7CiAJfQotCXAgPSB4ZHJfZGVjb2RlX3djY19kYXRhKHAsIHJlcy0+ZGlyX2F0dHIpOwotCXJldHVybiBzdGF0dXM7CisKKwllcnJvciA9IGRlY29kZV9maWxlaWQzKHhkciwgJmVudHJ5LT5pbm8pOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCXJldHVybiBlcnJvcjsKKworCWVycm9yID0gZGVjb2RlX2lubGluZV9maWxlbmFtZTMoeGRyLCAmZW50cnktPm5hbWUsICZlbnRyeS0+bGVuKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlyZXR1cm4gZXJyb3I7CisKKwllbnRyeS0+cHJldl9jb29raWUgPSBlbnRyeS0+Y29va2llOworCWVycm9yID0gZGVjb2RlX2Nvb2tpZTMoeGRyLCAmZW50cnktPmNvb2tpZSk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJcmV0dXJuIGVycm9yOworCisJZW50cnktPmRfdHlwZSA9IERUX1VOS05PV047CisKKwlpZiAocGx1cykgeworCQllbnRyeS0+ZmF0dHItPnZhbGlkID0gMDsKKwkJZXJyb3IgPSBkZWNvZGVfcG9zdF9vcF9hdHRyKHhkciwgZW50cnktPmZhdHRyKTsKKwkJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJCXJldHVybiBlcnJvcjsKKwkJaWYgKGVudHJ5LT5mYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9WMykKKwkJCWVudHJ5LT5kX3R5cGUgPSBuZnNfdW1vZGVfdG9fZHR5cGUoZW50cnktPmZhdHRyLT5tb2RlKTsKKworCQkvKiBJbiBmYWN0LCBhIHBvc3Rfb3BfZmgzOiAqLworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwkJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCQlnb3RvIG91dF9vdmVyZmxvdzsKKwkJaWYgKCpwICE9IHhkcl96ZXJvKSB7CisJCQllcnJvciA9IGRlY29kZV9uZnNfZmgzKHhkciwgZW50cnktPmZoKTsKKwkJCWlmICh1bmxpa2VseShlcnJvcikpIHsKKwkJCQlpZiAoZXJyb3IgPT0gLUUyQklHKQorCQkJCQlnb3RvIG91dF90cnVuY2F0ZWQ7CisJCQkJcmV0dXJuIGVycm9yOworCQkJfQorCQl9IGVsc2UKKwkJCXplcm9fbmZzX2ZoMyhlbnRyeS0+ZmgpOworCX0KKworCXJldHVybiAwOworCitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUFHQUlOOworb3V0X3RydW5jYXRlZDoKKwlkcHJpbnRrKCJORlM6IGRpcmVjdG9yeSBlbnRyeSBjb250YWlucyBpbnZhbGlkIGZpbGUgaGFuZGxlXG4iKTsKKwkqZW50cnkgPSBvbGQ7CisJcmV0dXJuIC1FQUdBSU47CiB9CiAKIC8qCi0gKiBEZWNvZGUgUkVOQU1FIHJlcGx5CisgKiAzLjMuMTYgIFJFQURESVIzcmVzCisgKgorICoJc3RydWN0IGRpcmxpc3QzIHsKKyAqCQllbnRyeTMJCSplbnRyaWVzOworICoJCWJvb2wJCWVvZjsKKyAqCX07CisgKgorICoJc3RydWN0IFJFQURESVIzcmVzb2sgeworICoJCXBvc3Rfb3BfYXR0cglkaXJfYXR0cmlidXRlczsKKyAqCQljb29raWV2ZXJmMwljb29raWV2ZXJmOworICoJCWRpcmxpc3QzCXJlcGx5OworICoJfTsKKyAqCisgKglzdHJ1Y3QgUkVBRERJUjNyZXNmYWlsIHsKKyAqCQlwb3N0X29wX2F0dHIJZGlyX2F0dHJpYnV0ZXM7CisgKgl9OworICoKKyAqCXVuaW9uIFJFQURESVIzcmVzIHN3aXRjaCAobmZzc3RhdDMgc3RhdHVzKSB7CisgKgljYXNlIE5GUzNfT0s6CisgKgkJUkVBRERJUjNyZXNvawlyZXNvazsKKyAqCWRlZmF1bHQ6CisgKgkJUkVBRERJUjNyZXNmYWlsCXJlc2ZhaWw7CisgKgl9OworICoKKyAqIFJlYWQgdGhlIGRpcmVjdG9yeSBjb250ZW50cyBpbnRvIHRoZSBwYWdlIGNhY2hlLCBidXQgb3RoZXJ3aXNlCisgKiBkb24ndCB0b3VjaCB0aGVtLiAgVGhlIGFjdHVhbCBkZWNvZGluZyBpcyBkb25lIGJ5IG5mczNfZGVjb2RlX2VudHJ5KCkKKyAqIGR1cmluZyBzdWJzZXF1ZW50IG5mc19yZWFkZGlyKCkgY2FsbHMuCiAgKi8KLXN0YXRpYyBpbnQKLW5mczNfeGRyX3JlbmFtZXJlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3JlbmFtZXJlcyAqcmVzKQorc3RhdGljIGludCBkZWNvZGVfZGlybGlzdDMoc3RydWN0IHhkcl9zdHJlYW0gKnhkcikKIHsKLQlpbnQJc3RhdHVzOworCXUzMiByZWN2ZCwgcGdsZW47CisJc2l6ZV90IGhkcmxlbjsKIAotCWlmICgoc3RhdHVzID0gbnRvaGwoKnArKykpICE9IDApCi0JCXN0YXR1cyA9IG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Ci0JcCA9IHhkcl9kZWNvZGVfd2NjX2RhdGEocCwgcmVzLT5vbGRfZmF0dHIpOwotCXAgPSB4ZHJfZGVjb2RlX3djY19kYXRhKHAsIHJlcy0+bmV3X2ZhdHRyKTsKLQlyZXR1cm4gc3RhdHVzOworCXBnbGVuID0geGRyLT5idWYtPnBhZ2VfbGVuOworCWhkcmxlbiA9ICh1OCAqKXhkci0+cCAtICh1OCAqKXhkci0+aW92LT5pb3ZfYmFzZTsKKwlyZWN2ZCA9IHhkci0+YnVmLT5sZW4gLSBoZHJsZW47CisJaWYgKHVubGlrZWx5KHBnbGVuID4gcmVjdmQpKQorCQlnb3RvIG91dF9jaGVhdGluZzsKK291dDoKKwl4ZHJfcmVhZF9wYWdlcyh4ZHIsIHBnbGVuKTsKKwlyZXR1cm4gcGdsZW47CitvdXRfY2hlYXRpbmc6CisJZHByaW50aygiTkZTOiBzZXJ2ZXIgY2hlYXRpbmcgaW4gcmVhZGRpciByZXN1bHQ6ICIKKwkJInBnbGVuICV1ID4gcmVjdmQgJXVcbiIsIHBnbGVuLCByZWN2ZCk7CisJcGdsZW4gPSByZWN2ZDsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIGludCBkZWNvZGVfcmVhZGRpcjNyZXNvayhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCXN0cnVjdCBuZnMzX3JlYWRkaXJyZXMgKnJlc3VsdCkKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGRlY29kZV9wb3N0X29wX2F0dHIoeGRyLCByZXN1bHQtPmRpcl9hdHRyKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwkvKiBYWFg6IGRvIHdlIG5lZWQgdG8gY2hlY2sgaWYgcmVzdWx0LT52ZXJmICE9IE5VTEwgPyAqLworCWVycm9yID0gZGVjb2RlX2Nvb2tpZXZlcmYzKHhkciwgcmVzdWx0LT52ZXJmKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwllcnJvciA9IGRlY29kZV9kaXJsaXN0Myh4ZHIpOworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBuZnMzX3hkcl9kZWNfcmVhZGRpcjNyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgIHN0cnVjdCBuZnMzX3JlYWRkaXJyZXMgKnJlc3VsdCkKK3sKKwllbnVtIG5mc19zdGF0IHN0YXR1czsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGRlY29kZV9uZnNzdGF0Myh4ZHIsICZzdGF0dXMpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWlmIChzdGF0dXMgIT0gTkZTM19PSykKKwkJZ290byBvdXRfZGVmYXVsdDsKKwllcnJvciA9IGRlY29kZV9yZWFkZGlyM3Jlc29rKHhkciwgcmVzdWx0KTsKK291dDoKKwlyZXR1cm4gZXJyb3I7CitvdXRfZGVmYXVsdDoKKwllcnJvciA9IGRlY29kZV9wb3N0X29wX2F0dHIoeGRyLCByZXN1bHQtPmRpcl9hdHRyKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKIH0KIAogLyoKLSAqIERlY29kZSBMSU5LIHJlcGx5CisgKiAzLjMuMTggIEZTU1RBVDNyZXMKKyAqCisgKglzdHJ1Y3QgRlNTVEFUM3Jlc29rIHsKKyAqCQlwb3N0X29wX2F0dHIJb2JqX2F0dHJpYnV0ZXM7CisgKgkJc2l6ZTMJCXRieXRlczsKKyAqCQlzaXplMwkJZmJ5dGVzOworICoJCXNpemUzCQlhYnl0ZXM7CisgKgkJc2l6ZTMJCXRmaWxlczsKKyAqCQlzaXplMwkJZmZpbGVzOworICoJCXNpemUzCQlhZmlsZXM7CisgKgkJdWludDMyCQlpbnZhcnNlYzsKKyAqCX07CisgKgorICoJc3RydWN0IEZTU1RBVDNyZXNmYWlsIHsKKyAqCQlwb3N0X29wX2F0dHIJb2JqX2F0dHJpYnV0ZXM7CisgKgl9OworICoKKyAqCXVuaW9uIEZTU1RBVDNyZXMgc3dpdGNoIChuZnNzdGF0MyBzdGF0dXMpIHsKKyAqCWNhc2UgTkZTM19PSzoKKyAqCQlGU1NUQVQzcmVzb2sJcmVzb2s7CisgKglkZWZhdWx0OgorICoJCUZTU1RBVDNyZXNmYWlsCXJlc2ZhaWw7CisgKgl9OwogICovCi1zdGF0aWMgaW50Ci1uZnMzX3hkcl9saW5rcmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnMzX2xpbmtyZXMgKnJlcykKK3N0YXRpYyBpbnQgZGVjb2RlX2Zzc3RhdDNyZXNvayhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgIHN0cnVjdCBuZnNfZnNzdGF0ICpyZXN1bHQpCiB7Ci0JaW50CXN0YXR1czsKKwlfX2JlMzIgKnA7CiAKLQlpZiAoKHN0YXR1cyA9IG50b2hsKCpwKyspKSAhPSAwKQotCQlzdGF0dXMgPSBuZnNfc3RhdF90b19lcnJubyhzdGF0dXMpOwotCXAgPSB4ZHJfZGVjb2RlX3Bvc3Rfb3BfYXR0cihwLCByZXMtPmZhdHRyKTsKLQlwID0geGRyX2RlY29kZV93Y2NfZGF0YShwLCByZXMtPmRpcl9hdHRyKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogRGVjb2RlIEZTU1RBVCByZXBseQotICovCi1zdGF0aWMgaW50Ci1uZnMzX3hkcl9mc3N0YXRyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19mc3N0YXQgKnJlcykKLXsKLQlpbnQJCXN0YXR1czsKLQotCXN0YXR1cyA9IG50b2hsKCpwKyspOwotCi0JcCA9IHhkcl9kZWNvZGVfcG9zdF9vcF9hdHRyKHAsIHJlcy0+ZmF0dHIpOwotCWlmIChzdGF0dXMgIT0gMCkKLQkJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Ci0KLQlwID0geGRyX2RlY29kZV9oeXBlcihwLCAmcmVzLT50Ynl0ZXMpOwotCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZyZXMtPmZieXRlcyk7Ci0JcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJnJlcy0+YWJ5dGVzKTsKLQlwID0geGRyX2RlY29kZV9oeXBlcihwLCAmcmVzLT50ZmlsZXMpOwotCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZyZXMtPmZmaWxlcyk7Ci0JcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJnJlcy0+YWZpbGVzKTsKLQorCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDggKiA2ICsgNCk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCXAgPSB4ZHJfZGVjb2RlX3NpemUzKHAsICZyZXN1bHQtPnRieXRlcyk7CisJcCA9IHhkcl9kZWNvZGVfc2l6ZTMocCwgJnJlc3VsdC0+ZmJ5dGVzKTsKKwlwID0geGRyX2RlY29kZV9zaXplMyhwLCAmcmVzdWx0LT5hYnl0ZXMpOworCXAgPSB4ZHJfZGVjb2RlX3NpemUzKHAsICZyZXN1bHQtPnRmaWxlcyk7CisJcCA9IHhkcl9kZWNvZGVfc2l6ZTMocCwgJnJlc3VsdC0+ZmZpbGVzKTsKKwl4ZHJfZGVjb2RlX3NpemUzKHAsICZyZXN1bHQtPmFmaWxlcyk7CiAJLyogaWdub3JlIGludmFyc2VjICovCiAJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IG5mczNfeGRyX2RlY19mc3N0YXQzcmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgc3RydWN0IG5mc19mc3N0YXQgKnJlc3VsdCkKK3sKKwllbnVtIG5mc19zdGF0IHN0YXR1czsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGRlY29kZV9uZnNzdGF0Myh4ZHIsICZzdGF0dXMpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gZGVjb2RlX3Bvc3Rfb3BfYXR0cih4ZHIsIHJlc3VsdC0+ZmF0dHIpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWlmIChzdGF0dXMgIT0gTkZTM19PSykKKwkJZ290byBvdXRfc3RhdHVzOworCWVycm9yID0gZGVjb2RlX2Zzc3RhdDNyZXNvayh4ZHIsIHJlc3VsdCk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworb3V0X3N0YXR1czoKKwlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKIH0KIAogLyoKLSAqIERlY29kZSBGU0lORk8gcmVwbHkKKyAqIDMuMy4xOSAgRlNJTkZPM3JlcworICoKKyAqCXN0cnVjdCBGU0lORk8zcmVzb2sgeworICoJCXBvc3Rfb3BfYXR0cglvYmpfYXR0cmlidXRlczsKKyAqCQl1aW50MzIJCXJ0bWF4OworICoJCXVpbnQzMgkJcnRwcmVmOworICoJCXVpbnQzMgkJcnRtdWx0OworICoJCXVpbnQzMgkJd3RtYXg7CisgKgkJdWludDMyCQl3dHByZWY7CisgKgkJdWludDMyCQl3dG11bHQ7CisgKgkJdWludDMyCQlkdHByZWY7CisgKgkJc2l6ZTMJCW1heGZpbGVzaXplOworICoJCW5mc3RpbWUzCXRpbWVfZGVsdGE7CisgKgkJdWludDMyCQlwcm9wZXJ0aWVzOworICoJfTsKKyAqCisgKglzdHJ1Y3QgRlNJTkZPM3Jlc2ZhaWwgeworICoJCXBvc3Rfb3BfYXR0cglvYmpfYXR0cmlidXRlczsKKyAqCX07CisgKgorICoJdW5pb24gRlNJTkZPM3JlcyBzd2l0Y2ggKG5mc3N0YXQzIHN0YXR1cykgeworICoJY2FzZSBORlMzX09LOgorICoJCUZTSU5GTzNyZXNvawlyZXNvazsKKyAqCWRlZmF1bHQ6CisgKgkJRlNJTkZPM3Jlc2ZhaWwJcmVzZmFpbDsKKyAqCX07CiAgKi8KLXN0YXRpYyBpbnQKLW5mczNfeGRyX2ZzaW5mb3JlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX2ZzaW5mbyAqcmVzKQorc3RhdGljIGludCBkZWNvZGVfZnNpbmZvM3Jlc29rKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgICAgc3RydWN0IG5mc19mc2luZm8gKnJlc3VsdCkKIHsKLQlpbnQJCXN0YXR1czsKKwlfX2JlMzIgKnA7CiAKLQlzdGF0dXMgPSBudG9obCgqcCsrKTsKLQotCXAgPSB4ZHJfZGVjb2RlX3Bvc3Rfb3BfYXR0cihwLCByZXMtPmZhdHRyKTsKLQlpZiAoc3RhdHVzICE9IDApCi0JCXJldHVybiBuZnNfc3RhdF90b19lcnJubyhzdGF0dXMpOwotCi0JcmVzLT5ydG1heCAgPSBudG9obCgqcCsrKTsKLQlyZXMtPnJ0cHJlZiA9IG50b2hsKCpwKyspOwotCXJlcy0+cnRtdWx0ID0gbnRvaGwoKnArKyk7Ci0JcmVzLT53dG1heCAgPSBudG9obCgqcCsrKTsKLQlyZXMtPnd0cHJlZiA9IG50b2hsKCpwKyspOwotCXJlcy0+d3RtdWx0ID0gbnRvaGwoKnArKyk7Ci0JcmVzLT5kdHByZWYgPSBudG9obCgqcCsrKTsKLQlwID0geGRyX2RlY29kZV9oeXBlcihwLCAmcmVzLT5tYXhmaWxlc2l6ZSk7Ci0JcCA9IHhkcl9kZWNvZGVfdGltZTMocCwgJnJlcy0+dGltZV9kZWx0YSk7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCAqIDcgKyA4ICsgOCArIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlyZXN1bHQtPnJ0bWF4ICA9IGJlMzJfdG9fY3B1cChwKyspOworCXJlc3VsdC0+cnRwcmVmID0gYmUzMl90b19jcHVwKHArKyk7CisJcmVzdWx0LT5ydG11bHQgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwlyZXN1bHQtPnd0bWF4ICA9IGJlMzJfdG9fY3B1cChwKyspOworCXJlc3VsdC0+d3RwcmVmID0gYmUzMl90b19jcHVwKHArKyk7CisJcmVzdWx0LT53dG11bHQgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwlyZXN1bHQtPmR0cHJlZiA9IGJlMzJfdG9fY3B1cChwKyspOworCXAgPSB4ZHJfZGVjb2RlX3NpemUzKHAsICZyZXN1bHQtPm1heGZpbGVzaXplKTsKKwl4ZHJfZGVjb2RlX25mc3RpbWUzKHAsICZyZXN1bHQtPnRpbWVfZGVsdGEpOwogCiAJLyogaWdub3JlIHByb3BlcnRpZXMgKi8KLQlyZXMtPmxlYXNlX3RpbWUgPSAwOworCXJlc3VsdC0+bGVhc2VfdGltZSA9IDA7CiAJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IG5mczNfeGRyX2RlY19mc2luZm8zcmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgc3RydWN0IG5mc19mc2luZm8gKnJlc3VsdCkKK3sKKwllbnVtIG5mc19zdGF0IHN0YXR1czsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGRlY29kZV9uZnNzdGF0Myh4ZHIsICZzdGF0dXMpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gZGVjb2RlX3Bvc3Rfb3BfYXR0cih4ZHIsIHJlc3VsdC0+ZmF0dHIpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWlmIChzdGF0dXMgIT0gTkZTM19PSykKKwkJZ290byBvdXRfc3RhdHVzOworCWVycm9yID0gZGVjb2RlX2ZzaW5mbzNyZXNvayh4ZHIsIHJlc3VsdCk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworb3V0X3N0YXR1czoKKwlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKIH0KIAogLyoKLSAqIERlY29kZSBQQVRIQ09ORiByZXBseQorICogMy4zLjIwICBQQVRIQ09ORjNyZXMKKyAqCisgKglzdHJ1Y3QgUEFUSENPTkYzcmVzb2sgeworICoJCXBvc3Rfb3BfYXR0cglvYmpfYXR0cmlidXRlczsKKyAqCQl1aW50MzIJCWxpbmttYXg7CisgKgkJdWludDMyCQluYW1lX21heDsKKyAqCQlib29sCQlub190cnVuYzsKKyAqCQlib29sCQljaG93bl9yZXN0cmljdGVkOworICoJCWJvb2wJCWNhc2VfaW5zZW5zaXRpdmU7CisgKgkJYm9vbAkJY2FzZV9wcmVzZXJ2aW5nOworICoJfTsKKyAqCisgKglzdHJ1Y3QgUEFUSENPTkYzcmVzZmFpbCB7CisgKgkJcG9zdF9vcF9hdHRyCW9ial9hdHRyaWJ1dGVzOworICoJfTsKKyAqCisgKgl1bmlvbiBQQVRIQ09ORjNyZXMgc3dpdGNoIChuZnNzdGF0MyBzdGF0dXMpIHsKKyAqCWNhc2UgTkZTM19PSzoKKyAqCQlQQVRIQ09ORjNyZXNvawlyZXNvazsKKyAqCWRlZmF1bHQ6CisgKgkJUEFUSENPTkYzcmVzZmFpbCByZXNmYWlsOworICoJfTsKICAqLwotc3RhdGljIGludAotbmZzM194ZHJfcGF0aGNvbmZyZXMoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19wYXRoY29uZiAqcmVzKQorc3RhdGljIGludCBkZWNvZGVfcGF0aGNvbmYzcmVzb2soc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgc3RydWN0IG5mc19wYXRoY29uZiAqcmVzdWx0KQogewotCWludAkJc3RhdHVzOworCV9fYmUzMiAqcDsKIAotCXN0YXR1cyA9IG50b2hsKCpwKyspOwotCi0JcCA9IHhkcl9kZWNvZGVfcG9zdF9vcF9hdHRyKHAsIHJlcy0+ZmF0dHIpOwotCWlmIChzdGF0dXMgIT0gMCkKLQkJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Ci0JcmVzLT5tYXhfbGluayA9IG50b2hsKCpwKyspOwotCXJlcy0+bWF4X25hbWVsZW4gPSBudG9obCgqcCsrKTsKLQorCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQgKiA2KTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJcmVzdWx0LT5tYXhfbGluayA9IGJlMzJfdG9fY3B1cChwKyspOworCXJlc3VsdC0+bWF4X25hbWVsZW4gPSBiZTMyX3RvX2NwdXAocCk7CiAJLyogaWdub3JlIHJlbWFpbmluZyBmaWVsZHMgKi8KIAlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgbmZzM194ZHJfZGVjX3BhdGhjb25mM3JlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgICBzdHJ1Y3QgbmZzX3BhdGhjb25mICpyZXN1bHQpCit7CisJZW51bSBuZnNfc3RhdCBzdGF0dXM7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBkZWNvZGVfbmZzc3RhdDMoeGRyLCAmc3RhdHVzKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwllcnJvciA9IGRlY29kZV9wb3N0X29wX2F0dHIoeGRyLCByZXN1bHQtPmZhdHRyKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwlpZiAoc3RhdHVzICE9IE5GUzNfT0spCisJCWdvdG8gb3V0X3N0YXR1czsKKwllcnJvciA9IGRlY29kZV9wYXRoY29uZjNyZXNvayh4ZHIsIHJlc3VsdCk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworb3V0X3N0YXR1czoKKwlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKIH0KIAogLyoKLSAqIERlY29kZSBDT01NSVQgcmVwbHkKKyAqIDMuMy4yMSAgQ09NTUlUM3JlcworICoKKyAqCXN0cnVjdCBDT01NSVQzcmVzb2sgeworICoJCXdjY19kYXRhCWZpbGVfd2NjOworICoJCXdyaXRldmVyZjMJdmVyZjsKKyAqCX07CisgKgorICoJc3RydWN0IENPTU1JVDNyZXNmYWlsIHsKKyAqCQl3Y2NfZGF0YQlmaWxlX3djYzsKKyAqCX07CisgKgorICoJdW5pb24gQ09NTUlUM3JlcyBzd2l0Y2ggKG5mc3N0YXQzIHN0YXR1cykgeworICoJY2FzZSBORlMzX09LOgorICoJCUNPTU1JVDNyZXNvawlyZXNvazsKKyAqCWRlZmF1bHQ6CisgKgkJQ09NTUlUM3Jlc2ZhaWwJcmVzZmFpbDsKKyAqCX07CiAgKi8KLXN0YXRpYyBpbnQKLW5mczNfeGRyX2NvbW1pdHJlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3dyaXRlcmVzICpyZXMpCitzdGF0aWMgaW50IG5mczNfeGRyX2RlY19jb21taXQzcmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgc3RydWN0IG5mc193cml0ZXJlcyAqcmVzdWx0KQogewotCWludAkJc3RhdHVzOworCWVudW0gbmZzX3N0YXQgc3RhdHVzOworCWludCBlcnJvcjsKIAotCXN0YXR1cyA9IG50b2hsKCpwKyspOwotCXAgPSB4ZHJfZGVjb2RlX3djY19kYXRhKHAsIHJlcy0+ZmF0dHIpOwotCWlmIChzdGF0dXMgIT0gMCkKLQkJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Ci0KLQlyZXMtPnZlcmYtPnZlcmlmaWVyWzBdID0gKnArKzsKLQlyZXMtPnZlcmYtPnZlcmlmaWVyWzFdID0gKnArKzsKLQlyZXR1cm4gMDsKKwllcnJvciA9IGRlY29kZV9uZnNzdGF0Myh4ZHIsICZzdGF0dXMpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gZGVjb2RlX3djY19kYXRhKHhkciwgcmVzdWx0LT5mYXR0cik7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisJaWYgKHN0YXR1cyAhPSBORlMzX09LKQorCQlnb3RvIG91dF9zdGF0dXM7CisJZXJyb3IgPSBkZWNvZGVfd3JpdGV2ZXJmMyh4ZHIsIHJlc3VsdC0+dmVyZi0+dmVyaWZpZXIpOworb3V0OgorCXJldHVybiBlcnJvcjsKK291dF9zdGF0dXM6CisJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7CiB9CiAKICNpZmRlZiBDT05GSUdfTkZTX1YzX0FDTAotLyoKLSAqIERlY29kZSBHRVRBQ0wgcmVwbHkKLSAqLwotc3RhdGljIGludAotbmZzM194ZHJfZ2V0YWNscmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsCi0JCSAgIHN0cnVjdCBuZnMzX2dldGFjbHJlcyAqcmVzKQorCitzdGF0aWMgaW5saW5lIGludCBkZWNvZGVfZ2V0YWNsM3Jlc29rKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgICAgc3RydWN0IG5mczNfZ2V0YWNscmVzICpyZXN1bHQpCiB7Ci0Jc3RydWN0IHhkcl9idWYgKmJ1ZiA9ICZyZXEtPnJxX3Jjdl9idWY7Ci0JaW50IHN0YXR1cyA9IG50b2hsKCpwKyspOwogCXN0cnVjdCBwb3NpeF9hY2wgKiphY2w7CiAJdW5zaWduZWQgaW50ICphY2xjbnQ7Ci0JaW50IGVyciwgYmFzZTsKKwlzaXplX3QgaGRybGVuOworCWludCBlcnJvcjsKIAotCWlmIChzdGF0dXMgIT0gMCkKLQkJcmV0dXJuIG5mc19zdGF0X3RvX2Vycm5vKHN0YXR1cyk7Ci0JcCA9IHhkcl9kZWNvZGVfcG9zdF9vcF9hdHRyKHAsIHJlcy0+ZmF0dHIpOwotCXJlcy0+bWFzayA9IG50b2hsKCpwKyspOwotCWlmIChyZXMtPm1hc2sgJiB+KE5GU19BQ0x8TkZTX0FDTENOVHxORlNfREZBQ0x8TkZTX0RGQUNMQ05UKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JYmFzZSA9IChjaGFyICopcCAtIChjaGFyICopcmVxLT5ycV9yY3ZfYnVmLmhlYWQtPmlvdl9iYXNlOworCWVycm9yID0gZGVjb2RlX3Bvc3Rfb3BfYXR0cih4ZHIsIHJlc3VsdC0+ZmF0dHIpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gZGVjb2RlX3VpbnQzMih4ZHIsICZyZXN1bHQtPm1hc2spOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWVycm9yID0gLUVJTlZBTDsKKwlpZiAocmVzdWx0LT5tYXNrICYgfihORlNfQUNMfE5GU19BQ0xDTlR8TkZTX0RGQUNMfE5GU19ERkFDTENOVCkpCisJCWdvdG8gb3V0OwogCi0JYWNsID0gKHJlcy0+bWFzayAmIE5GU19BQ0wpID8gJnJlcy0+YWNsX2FjY2VzcyA6IE5VTEw7Ci0JYWNsY250ID0gKHJlcy0+bWFzayAmIE5GU19BQ0xDTlQpID8gJnJlcy0+YWNsX2FjY2Vzc19jb3VudCA6IE5VTEw7Ci0JZXJyID0gbmZzYWNsX2RlY29kZShidWYsIGJhc2UsIGFjbGNudCwgYWNsKTsKKwloZHJsZW4gPSAodTggKil4ZHItPnAgLSAodTggKil4ZHItPmlvdi0+aW92X2Jhc2U7CiAKLQlhY2wgPSAocmVzLT5tYXNrICYgTkZTX0RGQUNMKSA/ICZyZXMtPmFjbF9kZWZhdWx0IDogTlVMTDsKLQlhY2xjbnQgPSAocmVzLT5tYXNrICYgTkZTX0RGQUNMQ05UKSA/ICZyZXMtPmFjbF9kZWZhdWx0X2NvdW50IDogTlVMTDsKLQlpZiAoZXJyID4gMCkKLQkJZXJyID0gbmZzYWNsX2RlY29kZShidWYsIGJhc2UgKyBlcnIsIGFjbGNudCwgYWNsKTsKLQlyZXR1cm4gKGVyciA+IDApID8gMCA6IGVycjsKKwlhY2wgPSBOVUxMOworCWlmIChyZXN1bHQtPm1hc2sgJiBORlNfQUNMKQorCQlhY2wgPSAmcmVzdWx0LT5hY2xfYWNjZXNzOworCWFjbGNudCA9IE5VTEw7CisJaWYgKHJlc3VsdC0+bWFzayAmIE5GU19BQ0xDTlQpCisJCWFjbGNudCA9ICZyZXN1bHQtPmFjbF9hY2Nlc3NfY291bnQ7CisJZXJyb3IgPSBuZnNhY2xfZGVjb2RlKHhkci0+YnVmLCBoZHJsZW4sIGFjbGNudCwgYWNsKTsKKwlpZiAodW5saWtlbHkoZXJyb3IgPD0gMCkpCisJCWdvdG8gb3V0OworCisJYWNsID0gTlVMTDsKKwlpZiAocmVzdWx0LT5tYXNrICYgTkZTX0RGQUNMKQorCQlhY2wgPSAmcmVzdWx0LT5hY2xfZGVmYXVsdDsKKwlhY2xjbnQgPSBOVUxMOworCWlmIChyZXN1bHQtPm1hc2sgJiBORlNfREZBQ0xDTlQpCisJCWFjbGNudCA9ICZyZXN1bHQtPmFjbF9kZWZhdWx0X2NvdW50OworCWVycm9yID0gbmZzYWNsX2RlY29kZSh4ZHItPmJ1ZiwgaGRybGVuICsgZXJyb3IsIGFjbGNudCwgYWNsKTsKKwlpZiAodW5saWtlbHkoZXJyb3IgPD0gMCkpCisJCXJldHVybiBlcnJvcjsKKwllcnJvciA9IDA7CitvdXQ6CisJcmV0dXJuIGVycm9yOwogfQogCi0vKgotICogRGVjb2RlIHNldGFjbCByZXBseS4KLSAqLwotc3RhdGljIGludAotbmZzM194ZHJfc2V0YWNscmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQorc3RhdGljIGludCBuZnMzX3hkcl9kZWNfZ2V0YWNsM3JlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgIHN0cnVjdCBuZnMzX2dldGFjbHJlcyAqcmVzdWx0KQogewotCWludCBzdGF0dXMgPSBudG9obCgqcCsrKTsKKwllbnVtIG5mc19zdGF0IHN0YXR1czsKKwlpbnQgZXJyb3I7CiAKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKLQl4ZHJfZGVjb2RlX3Bvc3Rfb3BfYXR0cihwLCBmYXR0cik7Ci0JcmV0dXJuIDA7CisJZXJyb3IgPSBkZWNvZGVfbmZzc3RhdDMoeGRyLCAmc3RhdHVzKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dDsKKwlpZiAoc3RhdHVzICE9IE5GUzNfT0spCisJCWdvdG8gb3V0X2RlZmF1bHQ7CisJZXJyb3IgPSBkZWNvZGVfZ2V0YWNsM3Jlc29rKHhkciwgcmVzdWx0KTsKK291dDoKKwlyZXR1cm4gZXJyb3I7CitvdXRfZGVmYXVsdDoKKwlyZXR1cm4gbmZzX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKIH0KKworc3RhdGljIGludCBuZnMzX3hkcl9kZWNfc2V0YWNsM3JlcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgIHN0cnVjdCBuZnNfZmF0dHIgKnJlc3VsdCkKK3sKKwllbnVtIG5mc19zdGF0IHN0YXR1czsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGRlY29kZV9uZnNzdGF0Myh4ZHIsICZzdGF0dXMpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0OworCWlmIChzdGF0dXMgIT0gTkZTM19PSykKKwkJZ290byBvdXRfZGVmYXVsdDsKKwllcnJvciA9IGRlY29kZV9wb3N0X29wX2F0dHIoeGRyLCByZXN1bHQpOworb3V0OgorCXJldHVybiBlcnJvcjsKK291dF9kZWZhdWx0OgorCXJldHVybiBuZnNfc3RhdF90b19lcnJubyhzdGF0dXMpOworfQorCiAjZW5kaWYgIC8qIENPTkZJR19ORlNfVjNfQUNMICovCiAKICNkZWZpbmUgUFJPQyhwcm9jLCBhcmd0eXBlLCByZXN0eXBlLCB0aW1lcikJCQkJXAogW05GUzNQUk9DXyMjcHJvY10gPSB7CQkJCQkJCVwKIAkucF9wcm9jICAgICAgPSBORlMzUFJPQ18jI3Byb2MsCQkJCQlcCi0JLnBfZW5jb2RlICAgID0gKGt4ZHJwcm9jX3QpIG5mczNfeGRyXyMjYXJndHlwZSwJCQlcCi0JLnBfZGVjb2RlICAgID0gKGt4ZHJwcm9jX3QpIG5mczNfeGRyXyMjcmVzdHlwZSwJCQlcCi0JLnBfYXJnbGVuICAgID0gTkZTM18jI2FyZ3R5cGUjI19zeiwJCQkJXAotCS5wX3JlcGxlbiAgICA9IE5GUzNfIyNyZXN0eXBlIyNfc3osCQkJCVwKKwkucF9lbmNvZGUgICAgPSAoa3hkcmVwcm9jX3QpbmZzM194ZHJfZW5jXyMjYXJndHlwZSMjM2FyZ3MsCVwKKwkucF9kZWNvZGUgICAgPSAoa3hkcmRwcm9jX3QpbmZzM194ZHJfZGVjXyMjcmVzdHlwZSMjM3JlcywJXAorCS5wX2FyZ2xlbiAgICA9IE5GUzNfIyNhcmd0eXBlIyNhcmdzX3N6LAkJCQlcCisJLnBfcmVwbGVuICAgID0gTkZTM18jI3Jlc3R5cGUjI3Jlc19zeiwJCQkJXAogCS5wX3RpbWVyICAgICA9IHRpbWVyLAkJCQkJCVwKIAkucF9zdGF0aWR4ICAgPSBORlMzUFJPQ18jI3Byb2MsCQkJCQlcCiAJLnBfbmFtZSAgICAgID0gI3Byb2MsCQkJCQkJXAogCX0KIAogc3RydWN0IHJwY19wcm9jaW5mbwluZnMzX3Byb2NlZHVyZXNbXSA9IHsKLSAgUFJPQyhHRVRBVFRSLAkJZmhhbmRsZSwJYXR0cnN0YXQsIDEpLAotICBQUk9DKFNFVEFUVFIsIAlzYXR0cmFyZ3MsCXdjY3N0YXQsIDApLAotICBQUk9DKExPT0tVUCwJCWRpcm9wYXJncywJbG9va3VwcmVzLCAyKSwKLSAgUFJPQyhBQ0NFU1MsCQlhY2Nlc3NhcmdzLAlhY2Nlc3NyZXMsIDEpLAotICBQUk9DKFJFQURMSU5LLAlyZWFkbGlua2FyZ3MsCXJlYWRsaW5rcmVzLCAzKSwKLSAgUFJPQyhSRUFELAkJcmVhZGFyZ3MsCXJlYWRyZXMsIDMpLAotICBQUk9DKFdSSVRFLAkJd3JpdGVhcmdzLAl3cml0ZXJlcywgNCksCi0gIFBST0MoQ1JFQVRFLAkJY3JlYXRlYXJncywJY3JlYXRlcmVzLCAwKSwKLSAgUFJPQyhNS0RJUiwJCW1rZGlyYXJncywJY3JlYXRlcmVzLCAwKSwKLSAgUFJPQyhTWU1MSU5LLAkJc3ltbGlua2FyZ3MsCWNyZWF0ZXJlcywgMCksCi0gIFBST0MoTUtOT0QsCQlta25vZGFyZ3MsCWNyZWF0ZXJlcywgMCksCi0gIFBST0MoUkVNT1ZFLAkJcmVtb3ZlYXJncywJcmVtb3ZlcmVzLCAwKSwKLSAgUFJPQyhSTURJUiwJCWRpcm9wYXJncywJd2Njc3RhdCwgMCksCi0gIFBST0MoUkVOQU1FLAkJcmVuYW1lYXJncywJcmVuYW1lcmVzLCAwKSwKLSAgUFJPQyhMSU5LLAkJbGlua2FyZ3MsCWxpbmtyZXMsIDApLAotICBQUk9DKFJFQURESVIsCQlyZWFkZGlyYXJncywJcmVhZGRpcnJlcywgMyksCi0gIFBST0MoUkVBRERJUlBMVVMsCXJlYWRkaXJhcmdzLAlyZWFkZGlycmVzLCAzKSwKLSAgUFJPQyhGU1NUQVQsCQlmaGFuZGxlLAlmc3N0YXRyZXMsIDApLAotICBQUk9DKEZTSU5GTywgIAlmaGFuZGxlLAlmc2luZm9yZXMsIDApLAotICBQUk9DKFBBVEhDT05GLAlmaGFuZGxlLAlwYXRoY29uZnJlcywgMCksCi0gIFBST0MoQ09NTUlULAkJY29tbWl0YXJncywJY29tbWl0cmVzLCA1KSwKKwlQUk9DKEdFVEFUVFIsCQlnZXRhdHRyLAlnZXRhdHRyLAkxKSwKKwlQUk9DKFNFVEFUVFIsCQlzZXRhdHRyLAlzZXRhdHRyLAkwKSwKKwlQUk9DKExPT0tVUCwJCWxvb2t1cCwJCWxvb2t1cCwJCTIpLAorCVBST0MoQUNDRVNTLAkJYWNjZXNzLAkJYWNjZXNzLAkJMSksCisJUFJPQyhSRUFETElOSywJCXJlYWRsaW5rLAlyZWFkbGluaywJMyksCisJUFJPQyhSRUFELAkJcmVhZCwJCXJlYWQsCQkzKSwKKwlQUk9DKFdSSVRFLAkJd3JpdGUsCQl3cml0ZSwJCTQpLAorCVBST0MoQ1JFQVRFLAkJY3JlYXRlLAkJY3JlYXRlLAkJMCksCisJUFJPQyhNS0RJUiwJCW1rZGlyLAkJY3JlYXRlLAkJMCksCisJUFJPQyhTWU1MSU5LLAkJc3ltbGluaywJY3JlYXRlLAkJMCksCisJUFJPQyhNS05PRCwJCW1rbm9kLAkJY3JlYXRlLAkJMCksCisJUFJPQyhSRU1PVkUsCQlyZW1vdmUsCQlyZW1vdmUsCQkwKSwKKwlQUk9DKFJNRElSLAkJbG9va3VwLAkJc2V0YXR0ciwJMCksCisJUFJPQyhSRU5BTUUsCQlyZW5hbWUsCQlyZW5hbWUsCQkwKSwKKwlQUk9DKExJTkssCQlsaW5rLAkJbGluaywJCTApLAorCVBST0MoUkVBRERJUiwJCXJlYWRkaXIsCXJlYWRkaXIsCTMpLAorCVBST0MoUkVBRERJUlBMVVMsCXJlYWRkaXJwbHVzLAlyZWFkZGlyLAkzKSwKKwlQUk9DKEZTU1RBVCwJCWdldGF0dHIsCWZzc3RhdCwJCTApLAorCVBST0MoRlNJTkZPLAkJZ2V0YXR0ciwJZnNpbmZvLAkJMCksCisJUFJPQyhQQVRIQ09ORiwJCWdldGF0dHIsCXBhdGhjb25mLAkwKSwKKwlQUk9DKENPTU1JVCwJCWNvbW1pdCwJCWNvbW1pdCwJCTUpLAogfTsKIAogc3RydWN0IHJwY192ZXJzaW9uCQluZnNfdmVyc2lvbjMgPSB7CkBAIC0xMTg1LDggKzI0NjgsOCBAQAogc3RhdGljIHN0cnVjdCBycGNfcHJvY2luZm8JbmZzM19hY2xfcHJvY2VkdXJlc1tdID0gewogCVtBQ0xQUk9DM19HRVRBQ0xdID0gewogCQkucF9wcm9jID0gQUNMUFJPQzNfR0VUQUNMLAotCQkucF9lbmNvZGUgPSAoa3hkcnByb2NfdCkgbmZzM194ZHJfZ2V0YWNsYXJncywKLQkJLnBfZGVjb2RlID0gKGt4ZHJwcm9jX3QpIG5mczNfeGRyX2dldGFjbHJlcywKKwkJLnBfZW5jb2RlID0gKGt4ZHJlcHJvY190KW5mczNfeGRyX2VuY19nZXRhY2wzYXJncywKKwkJLnBfZGVjb2RlID0gKGt4ZHJkcHJvY190KW5mczNfeGRyX2RlY19nZXRhY2wzcmVzLAogCQkucF9hcmdsZW4gPSBBQ0wzX2dldGFjbGFyZ3Nfc3osCiAJCS5wX3JlcGxlbiA9IEFDTDNfZ2V0YWNscmVzX3N6LAogCQkucF90aW1lciA9IDEsCkBAIC0xMTk0LDggKzI0NzcsOCBAQAogCX0sCiAJW0FDTFBST0MzX1NFVEFDTF0gPSB7CiAJCS5wX3Byb2MgPSBBQ0xQUk9DM19TRVRBQ0wsCi0JCS5wX2VuY29kZSA9IChreGRycHJvY190KSBuZnMzX3hkcl9zZXRhY2xhcmdzLAotCQkucF9kZWNvZGUgPSAoa3hkcnByb2NfdCkgbmZzM194ZHJfc2V0YWNscmVzLAorCQkucF9lbmNvZGUgPSAoa3hkcmVwcm9jX3QpbmZzM194ZHJfZW5jX3NldGFjbDNhcmdzLAorCQkucF9kZWNvZGUgPSAoa3hkcmRwcm9jX3QpbmZzM194ZHJfZGVjX3NldGFjbDNyZXMsCiAJCS5wX2FyZ2xlbiA9IEFDTDNfc2V0YWNsYXJnc19zeiwKIAkJLnBfcmVwbGVuID0gQUNMM19zZXRhY2xyZXNfc3osCiAJCS5wX3RpbWVyID0gMCwKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0X2ZzLmggYi9mcy9uZnMvbmZzNF9mcy5oCmluZGV4IDlmYTQ5NjMuLjdhNzQ3NDAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0X2ZzLmgKKysrIGIvZnMvbmZzL25mczRfZnMuaApAQCAtNDQsNiArNDQsNyBAQAogCU5GUzRDTE5UX1JFQ0xBSU1fUkVCT09ULAogCU5GUzRDTE5UX1JFQ0xBSU1fTk9HUkFDRSwKIAlORlM0Q0xOVF9ERUxFR1JFVFVSTiwKKwlORlM0Q0xOVF9MQVlPVVRSRUNBTEwsCiAJTkZTNENMTlRfU0VTU0lPTl9SRVNFVCwKIAlORlM0Q0xOVF9SRUNBTExfU0xPVCwKIH07CkBAIC0xMDksNyArMTEwLDcgQEAKIHN0cnVjdCBuZnM0X3N0YXRlX293bmVyIHsKIAlzdHJ1Y3QgbmZzX3VuaXF1ZV9pZCBzb19vd25lcl9pZDsKIAlzdHJ1Y3QgbmZzX3NlcnZlciAgICAqc29fc2VydmVyOwotCXN0cnVjdCByYl9ub2RlCSAgICAgc29fY2xpZW50X25vZGU7CisJc3RydWN0IHJiX25vZGUJICAgICBzb19zZXJ2ZXJfbm9kZTsKIAogCXN0cnVjdCBycGNfY3JlZAkgICAgICpzb19jcmVkOwkgLyogQXNzb2NpYXRlZCBjcmVkICovCiAKQEAgLTIyNywxMiArMjI4LDYgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmZzNF9kZW50cnlfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuZnM0X2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCi0vKiBpbm9kZS5jICovCi1leHRlcm4gc3NpemVfdCBuZnM0X2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKiwgY29uc3QgY2hhciAqLCB2b2lkICosIHNpemVfdCk7Ci1leHRlcm4gaW50IG5mczRfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOwotZXh0ZXJuIHNzaXplX3QgbmZzNF9saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIHNpemVfdCk7Ci0KLQogLyogbmZzNHByb2MuYyAqLwogZXh0ZXJuIGludCBuZnM0X3Byb2Nfc2V0Y2xpZW50aWQoc3RydWN0IG5mc19jbGllbnQgKiwgdTMyLCB1bnNpZ25lZCBzaG9ydCwgc3RydWN0IHJwY19jcmVkICosIHN0cnVjdCBuZnM0X3NldGNsaWVudGlkX3JlcyAqKTsKIGV4dGVybiBpbnQgbmZzNF9wcm9jX3NldGNsaWVudGlkX2NvbmZpcm0oc3RydWN0IG5mc19jbGllbnQgKiwgc3RydWN0IG5mczRfc2V0Y2xpZW50aWRfcmVzICphcmcsIHN0cnVjdCBycGNfY3JlZCAqKTsKQEAgLTI0MSwxMSArMjM2LDEyIEBACiBleHRlcm4gaW50IG5mczRfcHJvY19yZW5ldyhzdHJ1Y3QgbmZzX2NsaWVudCAqLCBzdHJ1Y3QgcnBjX2NyZWQgKik7CiBleHRlcm4gaW50IG5mczRfaW5pdF9jbGllbnRpZChzdHJ1Y3QgbmZzX2NsaWVudCAqLCBzdHJ1Y3QgcnBjX2NyZWQgKik7CiBleHRlcm4gaW50IG5mczQxX2luaXRfY2xpZW50aWQoc3RydWN0IG5mc19jbGllbnQgKiwgc3RydWN0IHJwY19jcmVkICopOwotZXh0ZXJuIGludCBuZnM0X2RvX2Nsb3NlKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsIGdmcF90IGdmcF9tYXNrLCBpbnQgd2FpdCk7CitleHRlcm4gaW50IG5mczRfZG9fY2xvc2Uoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCB3YWl0LCBib29sIHJvYyk7CiBleHRlcm4gaW50IG5mczRfc2VydmVyX2NhcGFiaWxpdGllcyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZzX2ZoICpmaGFuZGxlKTsKIGV4dGVybiBpbnQgbmZzNF9wcm9jX2ZzX2xvY2F0aW9ucyhzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCXN0cnVjdCBuZnM0X2ZzX2xvY2F0aW9ucyAqZnNfbG9jYXRpb25zLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gdm9pZCBuZnM0X3JlbGVhc2VfbG9ja293bmVyKGNvbnN0IHN0cnVjdCBuZnM0X2xvY2tfc3RhdGUgKik7CitleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKm5mczRfeGF0dHJfaGFuZGxlcnNbXTsKIAogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzNF9zZXNzaW9uICpuZnM0X2dldF9zZXNzaW9uKGNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCkBAIC0zMzEsNyArMzI3LDYgQEAKIGV4dGVybiBjb25zdCBuZnM0X3N0YXRlaWQgemVyb19zdGF0ZWlkOwogCiAvKiBuZnM0eGRyLmMgKi8KLWV4dGVybiBfX2JlMzIgKm5mczRfZGVjb2RlX2RpcmVudChzdHJ1Y3QgeGRyX3N0cmVhbSAqLCBzdHJ1Y3QgbmZzX2VudHJ5ICosIHN0cnVjdCBuZnNfc2VydmVyICosIGludCk7CiBleHRlcm4gc3RydWN0IHJwY19wcm9jaW5mbyBuZnM0X3Byb2NlZHVyZXNbXTsKIAogc3RydWN0IG5mczRfbW91bnRfZGF0YTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5jIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKaW5kZXggMmU5MmYwZC4uMjNmOTMwYyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKKysrIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKQEAgLTgyLDcgKzgyLDcgQEAKIHsKIAlzdHJ1Y3QgbmZzNF9maWxlX2xheW91dF9kc2FkZHIgKmRzYWRkcjsKIAlpbnQgc3RhdHVzID0gLUVJTlZBTDsKLQlzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzcyA9IE5GU19TRVJWRVIobG8tPmlub2RlKTsKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzcyA9IE5GU19TRVJWRVIobG8tPnBsaF9pbm9kZSk7CiAKIAlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKIApAQCAtMTAxLDcgKzEwMSw3IEBACiAJLyogZmluZCBhbmQgcmVmZXJlbmNlIHRoZSBkZXZpY2VpZCAqLwogCWRzYWRkciA9IG5mczRfZmxfZmluZF9nZXRfZGV2aWNlaWQobmZzcy0+bmZzX2NsaWVudCwgaWQpOwogCWlmIChkc2FkZHIgPT0gTlVMTCkgewotCQlkc2FkZHIgPSBnZXRfZGV2aWNlX2luZm8obG8tPmlub2RlLCBpZCk7CisJCWRzYWRkciA9IGdldF9kZXZpY2VfaW5mbyhsby0+cGxoX2lub2RlLCBpZCk7CiAJCWlmIChkc2FkZHIgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTI0Myw3ICsyNDMsNyBAQAogc3RhdGljIHZvaWQKIGZpbGVsYXlvdXRfZnJlZV9sc2VnKHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnKQogewotCXN0cnVjdCBuZnNfc2VydmVyICpuZnNzID0gTkZTX1NFUlZFUihsc2VnLT5sYXlvdXQtPmlub2RlKTsKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzcyA9IE5GU19TRVJWRVIobHNlZy0+cGxzX2xheW91dC0+cGxoX2lub2RlKTsKIAlzdHJ1Y3QgbmZzNF9maWxlbGF5b3V0X3NlZ21lbnQgKmZsID0gRklMRUxBWU9VVF9MU0VHKGxzZWcpOwogCiAJZHByaW50aygiLS0+ICVzXG4iLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IDQ0MzVlNWUuLjlkOTkyYjAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvYmNfeHBydC5oPgorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAKICNpbmNsdWRlICJuZnM0X2ZzLmgiCiAjaW5jbHVkZSAiZGVsZWdhdGlvbi5oIgpAQCAtMzU1LDkgKzM1Niw5IEBACiB9CiAKIC8qCi0gKiBTaWduYWwgc3RhdGUgbWFuYWdlciB0aHJlYWQgaWYgc2Vzc2lvbiBpcyBkcmFpbmVkCisgKiBTaWduYWwgc3RhdGUgbWFuYWdlciB0aHJlYWQgaWYgc2Vzc2lvbiBmb3JlIGNoYW5uZWwgaXMgZHJhaW5lZAogICovCi1zdGF0aWMgdm9pZCBuZnM0MV9jaGVja19kcmFpbl9zZXNzaW9uX2NvbXBsZXRlKHN0cnVjdCBuZnM0X3Nlc3Npb24gKnNlcykKK3N0YXRpYyB2b2lkIG5mczRfY2hlY2tfZHJhaW5fZmNfY29tcGxldGUoc3RydWN0IG5mczRfc2Vzc2lvbiAqc2VzKQogewogCXN0cnVjdCBycGNfdGFzayAqdGFzazsKIApAQCAtMzcxLDggKzM3MiwyMCBAQAogCWlmIChzZXMtPmZjX3Nsb3RfdGFibGUuaGlnaGVzdF91c2VkX3Nsb3RpZCAhPSAtMSkKIAkJcmV0dXJuOwogCi0JZHByaW50aygiJXMgQ09NUExFVEU6IFNlc3Npb24gRHJhaW5lZFxuIiwgX19mdW5jX18pOwotCWNvbXBsZXRlKCZzZXMtPmNvbXBsZXRlKTsKKwlkcHJpbnRrKCIlcyBDT01QTEVURTogU2Vzc2lvbiBGb3JlIENoYW5uZWwgRHJhaW5lZFxuIiwgX19mdW5jX18pOworCWNvbXBsZXRlKCZzZXMtPmZjX3Nsb3RfdGFibGUuY29tcGxldGUpOworfQorCisvKgorICogU2lnbmFsIHN0YXRlIG1hbmFnZXIgdGhyZWFkIGlmIHNlc3Npb24gYmFjayBjaGFubmVsIGlzIGRyYWluZWQKKyAqLwordm9pZCBuZnM0X2NoZWNrX2RyYWluX2JjX2NvbXBsZXRlKHN0cnVjdCBuZnM0X3Nlc3Npb24gKnNlcykKK3sKKwlpZiAoIXRlc3RfYml0KE5GUzRfU0VTU0lPTl9EUkFJTklORywgJnNlcy0+c2Vzc2lvbl9zdGF0ZSkgfHwKKwkgICAgc2VzLT5iY19zbG90X3RhYmxlLmhpZ2hlc3RfdXNlZF9zbG90aWQgIT0gLTEpCisJCXJldHVybjsKKwlkcHJpbnRrKCIlcyBDT01QTEVURTogU2Vzc2lvbiBCYWNrIENoYW5uZWwgRHJhaW5lZFxuIiwgX19mdW5jX18pOworCWNvbXBsZXRlKCZzZXMtPmJjX3Nsb3RfdGFibGUuY29tcGxldGUpOwogfQogCiBzdGF0aWMgdm9pZCBuZnM0MV9zZXF1ZW5jZV9mcmVlX3Nsb3Qoc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMpCkBAIC0zODksNyArNDAyLDcgQEAKIAogCXNwaW5fbG9jaygmdGJsLT5zbG90X3RibF9sb2NrKTsKIAluZnM0X2ZyZWVfc2xvdCh0YmwsIHJlcy0+c3Jfc2xvdCk7Ci0JbmZzNDFfY2hlY2tfZHJhaW5fc2Vzc2lvbl9jb21wbGV0ZShyZXMtPnNyX3Nlc3Npb24pOworCW5mczRfY2hlY2tfZHJhaW5fZmNfY29tcGxldGUocmVzLT5zcl9zZXNzaW9uKTsKIAlzcGluX3VubG9jaygmdGJsLT5zbG90X3RibF9sb2NrKTsKIAlyZXMtPnNyX3Nsb3QgPSBOVUxMOwogfQpAQCAtMTgyNiw2ICsxODM5LDggQEAKIAlzdHJ1Y3QgbmZzX2Nsb3NlcmVzIHJlczsKIAlzdHJ1Y3QgbmZzX2ZhdHRyIGZhdHRyOwogCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOworCWJvb2wgcm9jOworCXUzMiByb2NfYmFycmllcjsKIH07CiAKIHN0YXRpYyB2b2lkIG5mczRfZnJlZV9jbG9zZWRhdGEodm9pZCAqZGF0YSkKQEAgLTE4MzMsNiArMTg0OCw4IEBACiAJc3RydWN0IG5mczRfY2xvc2VkYXRhICpjYWxsZGF0YSA9IGRhdGE7CiAJc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKnNwID0gY2FsbGRhdGEtPnN0YXRlLT5vd25lcjsKIAorCWlmIChjYWxsZGF0YS0+cm9jKQorCQlwbmZzX3JvY19yZWxlYXNlKGNhbGxkYXRhLT5zdGF0ZS0+aW5vZGUpOwogCW5mczRfcHV0X29wZW5fc3RhdGUoY2FsbGRhdGEtPnN0YXRlKTsKIAluZnNfZnJlZV9zZXFpZChjYWxsZGF0YS0+YXJnLnNlcWlkKTsKIAluZnM0X3B1dF9zdGF0ZV9vd25lcihzcCk7CkBAIC0xODY1LDYgKzE4ODIsOSBAQAogCSAqLwogCXN3aXRjaCAodGFzay0+dGtfc3RhdHVzKSB7CiAJCWNhc2UgMDoKKwkJCWlmIChjYWxsZGF0YS0+cm9jKQorCQkJCXBuZnNfcm9jX3NldF9iYXJyaWVyKHN0YXRlLT5pbm9kZSwKKwkJCQkJCSAgICAgY2FsbGRhdGEtPnJvY19iYXJyaWVyKTsKIAkJCW5mc19zZXRfb3Blbl9zdGF0ZWlkKHN0YXRlLCAmY2FsbGRhdGEtPnJlcy5zdGF0ZWlkLCAwKTsKIAkJCXJlbmV3X2xlYXNlKHNlcnZlciwgY2FsbGRhdGEtPnRpbWVzdGFtcCk7CiAJCQluZnM0X2Nsb3NlX2NsZWFyX3N0YXRlaWRfZmxhZ3Moc3RhdGUsCkBAIC0xOTE3LDggKzE5MzcsMTUgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChjYWxsZGF0YS0+YXJnLmZtb2RlID09IDApCisJaWYgKGNhbGxkYXRhLT5hcmcuZm1vZGUgPT0gMCkgewogCQl0YXNrLT50a19tc2cucnBjX3Byb2MgPSAmbmZzNF9wcm9jZWR1cmVzW05GU1BST0M0X0NMTlRfQ0xPU0VdOworCQlpZiAoY2FsbGRhdGEtPnJvYyAmJgorCQkgICAgcG5mc19yb2NfZHJhaW4oY2FsbGRhdGEtPmlub2RlLCAmY2FsbGRhdGEtPnJvY19iYXJyaWVyKSkgeworCQkJcnBjX3NsZWVwX29uKCZORlNfU0VSVkVSKGNhbGxkYXRhLT5pbm9kZSktPnJvY19ycGN3YWl0cSwKKwkJCQkgICAgIHRhc2ssIE5VTEwpOworCQkJcmV0dXJuOworCQl9CisJfQogCiAJbmZzX2ZhdHRyX2luaXQoY2FsbGRhdGEtPnJlcy5mYXR0cik7CiAJY2FsbGRhdGEtPnRpbWVzdGFtcCA9IGppZmZpZXM7CkBAIC0xOTQ2LDcgKzE5NzMsNyBAQAogICoKICAqIE5PVEU6IENhbGxlciBtdXN0IGJlIGhvbGRpbmcgdGhlIHNwLT5zb19vd25lciBzZW1hcGhvcmUhCiAgKi8KLWludCBuZnM0X2RvX2Nsb3NlKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsIGdmcF90IGdmcF9tYXNrLCBpbnQgd2FpdCkKK2ludCBuZnM0X2RvX2Nsb3NlKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsIGdmcF90IGdmcF9tYXNrLCBpbnQgd2FpdCwgYm9vbCByb2MpCiB7CiAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoc3RhdGUtPmlub2RlKTsKIAlzdHJ1Y3QgbmZzNF9jbG9zZWRhdGEgKmNhbGxkYXRhOwpAQCAtMTk4MSwxMSArMjAwOCwxMiBAQAogCWNhbGxkYXRhLT5yZXMuZmF0dHIgPSAmY2FsbGRhdGEtPmZhdHRyOwogCWNhbGxkYXRhLT5yZXMuc2VxaWQgPSBjYWxsZGF0YS0+YXJnLnNlcWlkOwogCWNhbGxkYXRhLT5yZXMuc2VydmVyID0gc2VydmVyOworCWNhbGxkYXRhLT5yb2MgPSByb2M7CiAJcGF0aF9nZXQocGF0aCk7CiAJY2FsbGRhdGEtPnBhdGggPSAqcGF0aDsKIAotCW1zZy5ycGNfYXJncCA9ICZjYWxsZGF0YS0+YXJnLAotCW1zZy5ycGNfcmVzcCA9ICZjYWxsZGF0YS0+cmVzLAorCW1zZy5ycGNfYXJncCA9ICZjYWxsZGF0YS0+YXJnOworCW1zZy5ycGNfcmVzcCA9ICZjYWxsZGF0YS0+cmVzOwogCXRhc2tfc2V0dXBfZGF0YS5jYWxsYmFja19kYXRhID0gY2FsbGRhdGE7CiAJdGFzayA9IHJwY19ydW5fdGFzaygmdGFza19zZXR1cF9kYXRhKTsKIAlpZiAoSVNfRVJSKHRhc2spKQpAQCAtMTk5OCw2ICsyMDI2LDggQEAKIG91dF9mcmVlX2NhbGxkYXRhOgogCWtmcmVlKGNhbGxkYXRhKTsKIG91dDoKKwlpZiAocm9jKQorCQlwbmZzX3JvY19yZWxlYXNlKHN0YXRlLT5pbm9kZSk7CiAJbmZzNF9wdXRfb3Blbl9zdGF0ZShzdGF0ZSk7CiAJbmZzNF9wdXRfc3RhdGVfb3duZXIoc3ApOwogCXJldHVybiBzdGF0dXM7CkBAIC0yNDg2LDYgKzI1MTYsNyBAQAogCQlwYXRoID0gJmN0eC0+cGF0aDsKIAkJZm1vZGUgPSBjdHgtPm1vZGU7CiAJfQorCXNhdHRyLT5pYV9tb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJc3RhdGUgPSBuZnM0X2RvX29wZW4oZGlyLCBwYXRoLCBmbW9kZSwgZmxhZ3MsIHNhdHRyLCBjcmVkKTsKIAlkX2Ryb3AoZGVudHJ5KTsKIAlpZiAoSVNfRVJSKHN0YXRlKSkgewpAQCAtMjgxNiw2ICsyODQ3LDggQEAKIHsKIAlzdHJ1Y3QgbmZzNF9leGNlcHRpb24gZXhjZXB0aW9uID0geyB9OwogCWludCBlcnI7CisKKwlzYXR0ci0+aWFfbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCWRvIHsKIAkJZXJyID0gbmZzNF9oYW5kbGVfZXhjZXB0aW9uKE5GU19TRVJWRVIoZGlyKSwKIAkJCQlfbmZzNF9wcm9jX21rZGlyKGRpciwgZGVudHJ5LCBzYXR0ciksCkBAIC0yOTE2LDYgKzI5NDksOCBAQAogewogCXN0cnVjdCBuZnM0X2V4Y2VwdGlvbiBleGNlcHRpb24gPSB7IH07CiAJaW50IGVycjsKKworCXNhdHRyLT5pYV9tb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJZG8gewogCQllcnIgPSBuZnM0X2hhbmRsZV9leGNlcHRpb24oTkZTX1NFUlZFUihkaXIpLAogCQkJCV9uZnM0X3Byb2NfbWtub2QoZGlyLCBkZW50cnksIHNhdHRyLCByZGV2KSwKQEAgLTM0NzgsNiArMzUxMyw3IEBACiAJc3RydWN0IG5mczRfc2V0Y2xpZW50aWQgc2V0Y2xpZW50aWQgPSB7CiAJCS5zY192ZXJpZmllciA9ICZzY192ZXJpZmllciwKIAkJLnNjX3Byb2cgPSBwcm9ncmFtLAorCQkuc2NfY2JfaWRlbnQgPSBjbHAtPmNsX2NiX2lkZW50LAogCX07CiAJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKIAkJLnJwY19wcm9jID0gJm5mczRfcHJvY2VkdXJlc1tORlNQUk9DNF9DTE5UX1NFVENMSUVOVElEXSwKQEAgLTM1MTcsNyArMzU1Myw3IEBACiAJCWlmIChzaWduYWxsZWQoKSkKIAkJCWJyZWFrOwogCQlpZiAobG9vcCsrICYgMSkKLQkJCXNzbGVlcChjbHAtPmNsX2xlYXNlX3RpbWUgKyAxKTsKKwkJCXNzbGVlcChjbHAtPmNsX2xlYXNlX3RpbWUgLyBIWiArIDEpOwogCQllbHNlCiAJCQlpZiAoKytjbHAtPmNsX2lkX3VuaXF1aWZpZXIgPT0gMCkKIAkJCQlicmVhazsKQEAgLTM2NjMsOCArMzY5OSw4IEBACiAJZGF0YS0+cnBjX3N0YXR1cyA9IDA7CiAKIAl0YXNrX3NldHVwX2RhdGEuY2FsbGJhY2tfZGF0YSA9IGRhdGE7Ci0JbXNnLnJwY19hcmdwID0gJmRhdGEtPmFyZ3MsCi0JbXNnLnJwY19yZXNwID0gJmRhdGEtPnJlcywKKwltc2cucnBjX2FyZ3AgPSAmZGF0YS0+YXJnczsKKwltc2cucnBjX3Jlc3AgPSAmZGF0YS0+cmVzOwogCXRhc2sgPSBycGNfcnVuX3Rhc2soJnRhc2tfc2V0dXBfZGF0YSk7CiAJaWYgKElTX0VSUih0YXNrKSkKIAkJcmV0dXJuIFBUUl9FUlIodGFzayk7CkBAIC0zNzQzLDYgKzM3NzksNyBAQAogCQlnb3RvIG91dDsKIAlsc3AgPSByZXF1ZXN0LT5mbF91Lm5mczRfZmwub3duZXI7CiAJYXJnLmxvY2tfb3duZXIuaWQgPSBsc3AtPmxzX2lkLmlkOworCWFyZy5sb2NrX293bmVyLnNfZGV2ID0gc2VydmVyLT5zX2RldjsKIAlzdGF0dXMgPSBuZnM0X2NhbGxfc3luYyhzZXJ2ZXIsICZtc2csICZhcmcsICZyZXMsIDEpOwogCXN3aXRjaCAoc3RhdHVzKSB7CiAJCWNhc2UgMDoKQEAgLTM5MDgsOCArMzk0NSw4IEBACiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAotCW1zZy5ycGNfYXJncCA9ICZkYXRhLT5hcmcsCi0JbXNnLnJwY19yZXNwID0gJmRhdGEtPnJlcywKKwltc2cucnBjX2FyZ3AgPSAmZGF0YS0+YXJnOworCW1zZy5ycGNfcmVzcCA9ICZkYXRhLT5yZXM7CiAJdGFza19zZXR1cF9kYXRhLmNhbGxiYWNrX2RhdGEgPSBkYXRhOwogCXJldHVybiBycGNfcnVuX3Rhc2soJnRhc2tfc2V0dXBfZGF0YSk7CiB9CkBAIC0zOTg4LDYgKzQwMjUsNyBAQAogCXAtPmFyZy5sb2NrX3N0YXRlaWQgPSAmbHNwLT5sc19zdGF0ZWlkOwogCXAtPmFyZy5sb2NrX293bmVyLmNsaWVudGlkID0gc2VydmVyLT5uZnNfY2xpZW50LT5jbF9jbGllbnRpZDsKIAlwLT5hcmcubG9ja19vd25lci5pZCA9IGxzcC0+bHNfaWQuaWQ7CisJcC0+YXJnLmxvY2tfb3duZXIuc19kZXYgPSBzZXJ2ZXItPnNfZGV2OwogCXAtPnJlcy5sb2NrX3NlcWlkID0gcC0+YXJnLmxvY2tfc2VxaWQ7CiAJcC0+bHNwID0gbHNwOwogCXAtPnNlcnZlciA9IHNlcnZlcjsKQEAgLTQxNDUsOCArNDE4Myw4IEBACiAJCQlkYXRhLT5hcmcucmVjbGFpbSA9IE5GU19MT0NLX1JFQ0xBSU07CiAJCXRhc2tfc2V0dXBfZGF0YS5jYWxsYmFja19vcHMgPSAmbmZzNF9yZWNvdmVyX2xvY2tfb3BzOwogCX0KLQltc2cucnBjX2FyZ3AgPSAmZGF0YS0+YXJnLAotCW1zZy5ycGNfcmVzcCA9ICZkYXRhLT5yZXMsCisJbXNnLnJwY19hcmdwID0gJmRhdGEtPmFyZzsKKwltc2cucnBjX3Jlc3AgPSAmZGF0YS0+cmVzOwogCXRhc2tfc2V0dXBfZGF0YS5jYWxsYmFja19kYXRhID0gZGF0YTsKIAl0YXNrID0gcnBjX3J1bl90YXNrKCZ0YXNrX3NldHVwX2RhdGEpOwogCWlmIChJU19FUlIodGFzaykpCkBAIC00MzkyLDQ4ICs0NDMwLDQzIEBACiAJCXJldHVybjsKIAlhcmdzLT5sb2NrX293bmVyLmNsaWVudGlkID0gc2VydmVyLT5uZnNfY2xpZW50LT5jbF9jbGllbnRpZDsKIAlhcmdzLT5sb2NrX293bmVyLmlkID0gbHNwLT5sc19pZC5pZDsKKwlhcmdzLT5sb2NrX293bmVyLnNfZGV2ID0gc2VydmVyLT5zX2RldjsKIAltc2cucnBjX2FyZ3AgPSBhcmdzOwogCXJwY19jYWxsX2FzeW5jKHNlcnZlci0+Y2xpZW50LCAmbXNnLCAwLCAmbmZzNF9yZWxlYXNlX2xvY2tvd25lcl9vcHMsIGFyZ3MpOwogfQogCiAjZGVmaW5lIFhBVFRSX05BTUVfTkZTVjRfQUNMICJzeXN0ZW0ubmZzNF9hY2wiCiAKLWludCBuZnM0X3NldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqa2V5LCBjb25zdCB2b2lkICpidWYsCi0JCXNpemVfdCBidWZsZW4sIGludCBmbGFncykKK3N0YXRpYyBpbnQgbmZzNF94YXR0cl9zZXRfbmZzNF9hY2woc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICprZXksCisJCQkJICAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuLAorCQkJCSAgIGludCBmbGFncywgaW50IHR5cGUpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlpZiAoc3RyY21wKGtleSwgIiIpICE9IDApCisJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHN0cmNtcChrZXksIFhBVFRSX05BTUVfTkZTVjRfQUNMKSAhPSAwKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlyZXR1cm4gbmZzNF9wcm9jX3NldF9hY2woaW5vZGUsIGJ1ZiwgYnVmbGVuKTsKKwlyZXR1cm4gbmZzNF9wcm9jX3NldF9hY2woZGVudHJ5LT5kX2lub2RlLCBidWYsIGJ1Zmxlbik7CiB9CiAKLS8qIFRoZSBnZXR4YXR0ciBtYW4gcGFnZSBzdWdnZXN0cyByZXR1cm5pbmcgLUVOT0RBVEEgZm9yIHVua25vd24gYXR0cmlidXRlcywKLSAqIGFuZCB0aGF0J3Mgd2hhdCB3ZSdsbCBkbyBmb3IgZS5nLiB1c2VyIGF0dHJpYnV0ZXMgdGhhdCBoYXZlbid0IGJlZW4gc2V0LgotICogQnV0IHdlJ2xsIGZvbGxvdyBleHQyL2V4dDMncyBsZWFkIGJ5IHJldHVybmluZyAtRU9QTk9UU1VQUCBmb3IgdW5zdXBwb3J0ZWQKLSAqIGF0dHJpYnV0ZXMgaW4ga2VybmVsLW1hbmFnZWQgYXR0cmlidXRlIG5hbWVzcGFjZXMuICovCi1zc2l6ZV90IG5mczRfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICprZXksIHZvaWQgKmJ1ZiwKLQkJc2l6ZV90IGJ1ZmxlbikKK3N0YXRpYyBpbnQgbmZzNF94YXR0cl9nZXRfbmZzNF9hY2woc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICprZXksCisJCQkJICAgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuLCBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCWlmIChzdHJjbXAoa2V5LCAiIikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc3RyY21wKGtleSwgWEFUVFJfTkFNRV9ORlNWNF9BQ0wpICE9IDApCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXJldHVybiBuZnM0X3Byb2NfZ2V0X2FjbChpbm9kZSwgYnVmLCBidWZsZW4pOworCXJldHVybiBuZnM0X3Byb2NfZ2V0X2FjbChkZW50cnktPmRfaW5vZGUsIGJ1ZiwgYnVmbGVuKTsKIH0KIAotc3NpemVfdCBuZnM0X2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3N0YXRpYyBzaXplX3QgbmZzNF94YXR0cl9saXN0X25mczRfYWNsKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbGlzdCwKKwkJCQkgICAgICAgc2l6ZV90IGxpc3RfbGVuLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICAgICBzaXplX3QgbmFtZV9sZW4sIGludCB0eXBlKQogewotCXNpemVfdCBsZW4gPSBzdHJsZW4oWEFUVFJfTkFNRV9ORlNWNF9BQ0wpICsgMTsKKwlzaXplX3QgbGVuID0gc2l6ZW9mKFhBVFRSX05BTUVfTkZTVjRfQUNMKTsKIAogCWlmICghbmZzNF9zZXJ2ZXJfc3VwcG9ydHNfYWNscyhORlNfU0VSVkVSKGRlbnRyeS0+ZF9pbm9kZSkpKQogCQlyZXR1cm4gMDsKLQlpZiAoYnVmICYmIGJ1ZmxlbiA8IGxlbikKLQkJcmV0dXJuIC1FUkFOR0U7Ci0JaWYgKGJ1ZikKLQkJbWVtY3B5KGJ1ZiwgWEFUVFJfTkFNRV9ORlNWNF9BQ0wsIGxlbik7CisKKwlpZiAobGlzdCAmJiBsZW4gPD0gbGlzdF9sZW4pCisJCW1lbWNweShsaXN0LCBYQVRUUl9OQU1FX05GU1Y0X0FDTCwgbGVuKTsKIAlyZXR1cm4gbGVuOwogfQogCkBAIC00NDg2LDYgKzQ1MTksMjUgQEAKIAogI2lmZGVmIENPTkZJR19ORlNfVjRfMQogLyoKKyAqIENoZWNrIHRoZSBleGNoYW5nZSBmbGFncyByZXR1cm5lZCBieSB0aGUgc2VydmVyIGZvciBpbnZhbGlkIGZsYWdzLCBoYXZpbmcKKyAqIGJvdGggUE5GUyBhbmQgTk9OX1BORlMgZmxhZ3Mgc2V0LCBhbmQgbm90IGhhdmluZyBvbmUgb2YgTk9OX1BORlMsIFBORlMsIG9yCisgKiBEUyBmbGFncyBzZXQuCisgKi8KK3N0YXRpYyBpbnQgbmZzNF9jaGVja19jbF9leGNoYW5nZV9mbGFncyh1MzIgZmxhZ3MpCit7CisJaWYgKGZsYWdzICYgfkVYQ0hHSUQ0X0ZMQUdfTUFTS19SKQorCQlnb3RvIG91dF9pbnZhbDsKKwlpZiAoKGZsYWdzICYgRVhDSEdJRDRfRkxBR19VU0VfUE5GU19NRFMpICYmCisJICAgIChmbGFncyAmIEVYQ0hHSUQ0X0ZMQUdfVVNFX05PTl9QTkZTKSkKKwkJZ290byBvdXRfaW52YWw7CisJaWYgKCEoZmxhZ3MgJiAoRVhDSEdJRDRfRkxBR19NQVNLX1BORlMpKSkKKwkJZ290byBvdXRfaW52YWw7CisJcmV0dXJuIE5GU19PSzsKK291dF9pbnZhbDoKKwlyZXR1cm4gLU5GUzRFUlJfSU5WQUw7Cit9CisKKy8qCiAgKiBuZnM0X3Byb2NfZXhjaGFuZ2VfaWQoKQogICoKICAqIFNpbmNlIHRoZSBjbGllbnRpZCBoYXMgZXhwaXJlZCwgYWxsIGNvbXBvdW5kcyB1c2luZyBzZXNzaW9ucwpAQCAtNDQ5OCw3ICs0NTUwLDcgQEAKIAluZnM0X3ZlcmlmaWVyIHZlcmlmaWVyOwogCXN0cnVjdCBuZnM0MV9leGNoYW5nZV9pZF9hcmdzIGFyZ3MgPSB7CiAJCS5jbGllbnQgPSBjbHAsCi0JCS5mbGFncyA9IGNscC0+Y2xfZXhjaGFuZ2VfZmxhZ3MsCisJCS5mbGFncyA9IEVYQ0hHSUQ0X0ZMQUdfU1VQUF9NT1ZFRF9SRUZFUiwKIAl9OwogCXN0cnVjdCBuZnM0MV9leGNoYW5nZV9pZF9yZXMgcmVzID0gewogCQkuY2xpZW50ID0gY2xwLApAQCAtNDUxNSw5ICs0NTY3LDYgQEAKIAlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKIAlCVUdfT04oY2xwID09IE5VTEwpOwogCi0JLyogUmVtb3ZlIHNlcnZlci1vbmx5IGZsYWdzICovCi0JYXJncy5mbGFncyAmPSB+RVhDSEdJRDRfRkxBR19DT05GSVJNRURfUjsKLQogCXAgPSAodTMyICopdmVyaWZpZXIuZGF0YTsKIAkqcCsrID0gaHRvbmwoKHUzMiljbHAtPmNsX2Jvb3RfdGltZS50dl9zZWMpOwogCSpwID0gaHRvbmwoKHUzMiljbHAtPmNsX2Jvb3RfdGltZS50dl9uc2VjKTsKQEAgLTQ1NDMsNiArNDU5Miw3IEBACiAJCQlicmVhazsKIAl9CiAKKwlzdGF0dXMgPSBuZnM0X2NoZWNrX2NsX2V4Y2hhbmdlX2ZsYWdzKGNscC0+Y2xfZXhjaGFuZ2VfZmxhZ3MpOwogCWRwcmludGsoIjwtLSAlcyBzdGF0dXM9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNDc3NiwxNyArNDgyNiwxNyBAQAogCWlmICghc2Vzc2lvbikKIAkJcmV0dXJuIE5VTEw7CiAKLQlpbml0X2NvbXBsZXRpb24oJnNlc3Npb24tPmNvbXBsZXRlKTsKLQogCXRibCA9ICZzZXNzaW9uLT5mY19zbG90X3RhYmxlOwogCXRibC0+aGlnaGVzdF91c2VkX3Nsb3RpZCA9IC0xOwogCXNwaW5fbG9ja19pbml0KCZ0YmwtPnNsb3RfdGJsX2xvY2spOwogCXJwY19pbml0X3ByaW9yaXR5X3dhaXRfcXVldWUoJnRibC0+c2xvdF90Ymxfd2FpdHEsICJGb3JlQ2hhbm5lbCBTbG90IHRhYmxlIik7CisJaW5pdF9jb21wbGV0aW9uKCZ0YmwtPmNvbXBsZXRlKTsKIAogCXRibCA9ICZzZXNzaW9uLT5iY19zbG90X3RhYmxlOwogCXRibC0+aGlnaGVzdF91c2VkX3Nsb3RpZCA9IC0xOwogCXNwaW5fbG9ja19pbml0KCZ0YmwtPnNsb3RfdGJsX2xvY2spOwogCXJwY19pbml0X3dhaXRfcXVldWUoJnRibC0+c2xvdF90Ymxfd2FpdHEsICJCYWNrQ2hhbm5lbCBTbG90IHRhYmxlIik7CisJaW5pdF9jb21wbGV0aW9uKCZ0YmwtPmNvbXBsZXRlKTsKIAogCXNlc3Npb24tPnNlc3Npb25fc3RhdGUgPSAxPDxORlM0X1NFU1NJT05fSU5JVElORzsKIApAQCAtNTI4MCwxMyArNTMzMCwyMyBAQAogbmZzNF9sYXlvdXRnZXRfcHJlcGFyZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHZvaWQgKmNhbGxkYXRhKQogewogCXN0cnVjdCBuZnM0X2xheW91dGdldCAqbGdwID0gY2FsbGRhdGE7Ci0Jc3RydWN0IGlub2RlICppbm8gPSBsZ3AtPmFyZ3MuaW5vZGU7Ci0Jc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoaW5vKTsKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NFUlZFUihsZ3AtPmFyZ3MuaW5vZGUpOwogCiAJZHByaW50aygiLS0+ICVzXG4iLCBfX2Z1bmNfXyk7CisJLyogTm90ZSB0aGUgaXMgYSByYWNlIGhlcmUsIHdoZXJlIGEgQ0JfTEFZT1VUUkVDQUxMIGNhbiBjb21lIGluCisJICogcmlnaHQgbm93IGNvdmVyaW5nIHRoZSBMQVlPVVRHRVQgd2UgYXJlIGFib3V0IHRvIHNlbmQuCisJICogSG93ZXZlciwgdGhhdCBpcyBub3Qgc28gY2F0YXN0cm9waGljLCBhbmQgdGhlcmUgc2VlbXMKKwkgKiB0byBiZSBubyB3YXkgdG8gcHJldmVudCBpdCBjb21wbGV0ZWx5LgorCSAqLwogCWlmIChuZnM0X3NldHVwX3NlcXVlbmNlKHNlcnZlciwgJmxncC0+YXJncy5zZXFfYXJncywKIAkJCQkmbGdwLT5yZXMuc2VxX3JlcywgMCwgdGFzaykpCiAJCXJldHVybjsKKwlpZiAocG5mc19jaG9vc2VfbGF5b3V0Z2V0X3N0YXRlaWQoJmxncC0+YXJncy5zdGF0ZWlkLAorCQkJCQkgIE5GU19JKGxncC0+YXJncy5pbm9kZSktPmxheW91dCwKKwkJCQkJICBsZ3AtPmFyZ3MuY3R4LT5zdGF0ZSkpIHsKKwkJcnBjX2V4aXQodGFzaywgTkZTNF9PSyk7CisJCXJldHVybjsKKwl9CiAJcnBjX2NhbGxfc3RhcnQodGFzayk7CiB9CiAKQEAgLTUzMTMsNyArNTM3Myw2IEBACiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0JbGdwLT5zdGF0dXMgPSB0YXNrLT50a19zdGF0dXM7CiAJZHByaW50aygiPC0tICVzXG4iLCBfX2Z1bmNfXyk7CiB9CiAKQEAgLTUzMjIsNyArNTM4MSw2IEBACiAJc3RydWN0IG5mczRfbGF5b3V0Z2V0ICpsZ3AgPSBjYWxsZGF0YTsKIAogCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOwotCXB1dF9sYXlvdXRfaGRyKGxncC0+YXJncy5pbm9kZSk7CiAJaWYgKGxncC0+cmVzLmxheW91dC5idWYgIT0gTlVMTCkKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBsZ3AtPnJlcy5sYXlvdXQuYnVmKTsKIAlwdXRfbmZzX29wZW5fY29udGV4dChsZ3AtPmFyZ3MuY3R4KTsKQEAgLTUzNjcsMTMgKzU0MjUsMTAgQEAKIAlpZiAoSVNfRVJSKHRhc2spKQogCQlyZXR1cm4gUFRSX0VSUih0YXNrKTsKIAlzdGF0dXMgPSBuZnM0X3dhaXRfZm9yX2NvbXBsZXRpb25fcnBjX3Rhc2sodGFzayk7Ci0JaWYgKHN0YXR1cyAhPSAwKQotCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBsZ3AtPnN0YXR1czsKLQlpZiAoc3RhdHVzICE9IDApCi0JCWdvdG8gb3V0OwotCXN0YXR1cyA9IHBuZnNfbGF5b3V0X3Byb2Nlc3MobGdwKTsKLW91dDoKKwlpZiAoc3RhdHVzID09IDApCisJCXN0YXR1cyA9IHRhc2stPnRrX3N0YXR1czsKKwlpZiAoc3RhdHVzID09IDApCisJCXN0YXR1cyA9IHBuZnNfbGF5b3V0X3Byb2Nlc3MobGdwKTsKIAlycGNfcHV0X3Rhc2sodGFzayk7CiAJZHByaW50aygiPC0tICVzIHN0YXR1cz0lZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTU1MDQsOSArNTU1OSwxMCBAQAogCS5wZXJtaXNzaW9uCT0gbmZzX3Blcm1pc3Npb24sCiAJLmdldGF0dHIJPSBuZnNfZ2V0YXR0ciwKIAkuc2V0YXR0cgk9IG5mc19zZXRhdHRyLAotCS5nZXR4YXR0cgk9IG5mczRfZ2V0eGF0dHIsCi0JLnNldHhhdHRyCT0gbmZzNF9zZXR4YXR0ciwKLQkubGlzdHhhdHRyCT0gbmZzNF9saXN0eGF0dHIsCisJLmdldHhhdHRyCT0gZ2VuZXJpY19nZXR4YXR0ciwKKwkuc2V0eGF0dHIJPSBnZW5lcmljX3NldHhhdHRyLAorCS5saXN0eGF0dHIJPSBnZW5lcmljX2xpc3R4YXR0ciwKKwkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAogfTsKIAogY29uc3Qgc3RydWN0IG5mc19ycGNfb3BzIG5mc192NF9jbGllbnRvcHMgPSB7CkBAIC01NTUxLDYgKzU2MDcsMTggQEAKIAkub3Blbl9jb250ZXh0CT0gbmZzNF9hdG9taWNfb3BlbiwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBuZnM0X3hhdHRyX25mczRfYWNsX2hhbmRsZXIgPSB7CisJLnByZWZpeAk9IFhBVFRSX05BTUVfTkZTVjRfQUNMLAorCS5saXN0CT0gbmZzNF94YXR0cl9saXN0X25mczRfYWNsLAorCS5nZXQJPSBuZnM0X3hhdHRyX2dldF9uZnM0X2FjbCwKKwkuc2V0CT0gbmZzNF94YXR0cl9zZXRfbmZzNF9hY2wsCit9OworCitjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqbmZzNF94YXR0cl9oYW5kbGVyc1tdID0geworCSZuZnM0X3hhdHRyX25mczRfYWNsX2hhbmRsZXIsCisJTlVMTAorfTsKKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqICBjLWJhc2ljLW9mZnNldDogOApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRyZW5ld2QuYyBiL2ZzL25mcy9uZnM0cmVuZXdkLmMKaW5kZXggNzJiNmM1OC4uNDAyMTQzZCAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRyZW5ld2QuYworKysgYi9mcy9uZnMvbmZzNHJlbmV3ZC5jCkBAIC02Myw5ICs2MywxNCBAQAogCiAJb3BzID0gY2xwLT5jbF9tdm9wcy0+c3RhdGVfcmVuZXdhbF9vcHM7CiAJZHByaW50aygiJXM6IHN0YXJ0XG4iLCBfX2Z1bmNfXyk7Ci0JLyogQXJlIHRoZXJlIGFueSBhY3RpdmUgc3VwZXJibG9ja3M/ICovCi0JaWYgKGxpc3RfZW1wdHkoJmNscC0+Y2xfc3VwZXJibG9ja3MpKQorCisJcmN1X3JlYWRfbG9jaygpOworCWlmIChsaXN0X2VtcHR5KCZjbHAtPmNsX3N1cGVyYmxvY2tzKSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJZ290byBvdXQ7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCiAJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOwogCWxlYXNlID0gY2xwLT5jbF9sZWFzZV90aW1lOwogCWxhc3QgPSBjbHAtPmNsX2xhc3RfcmVuZXdhbDsKQEAgLTc1LDcgKzgwLDcgQEAKIAkJY3JlZCA9IG9wcy0+Z2V0X3N0YXRlX3JlbmV3YWxfY3JlZF9sb2NrZWQoY2xwKTsKIAkJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7CiAJCWlmIChjcmVkID09IE5VTEwpIHsKLQkJCWlmIChsaXN0X2VtcHR5KCZjbHAtPmNsX2RlbGVnYXRpb25zKSkgeworCQkJaWYgKCFuZnNfZGVsZWdhdGlvbnNfcHJlc2VudChjbHApKSB7CiAJCQkJc2V0X2JpdChORlM0Q0xOVF9MRUFTRV9FWFBJUkVELCAmY2xwLT5jbF9zdGF0ZSk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHN0YXRlLmMgYi9mcy9uZnMvbmZzNHN0YXRlLmMKaW5kZXggZjU3NWEzMS4uMjMzNmQ1MyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRzdGF0ZS5jCisrKyBiL2ZzL25mcy9uZnM0c3RhdGUuYwpAQCAtMTA1LDE0ICsxMDUsMTcgQEAKIAkJcHV0X3JwY2NyZWQoY3JlZCk7CiB9CiAKLXN0cnVjdCBycGNfY3JlZCAqbmZzNF9nZXRfcmVuZXdfY3JlZF9sb2NrZWQoc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3N0YXRpYyBzdHJ1Y3QgcnBjX2NyZWQgKgorbmZzNF9nZXRfcmVuZXdfY3JlZF9zZXJ2ZXJfbG9ja2VkKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCiB7CisJc3RydWN0IHJwY19jcmVkICpjcmVkID0gTlVMTDsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqc3A7CiAJc3RydWN0IHJiX25vZGUgKnBvczsKLQlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQgPSBOVUxMOwogCi0JZm9yIChwb3MgPSByYl9maXJzdCgmY2xwLT5jbF9zdGF0ZV9vd25lcnMpOyBwb3MgIT0gTlVMTDsgcG9zID0gcmJfbmV4dChwb3MpKSB7Ci0JCXNwID0gcmJfZW50cnkocG9zLCBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciwgc29fY2xpZW50X25vZGUpOworCWZvciAocG9zID0gcmJfZmlyc3QoJnNlcnZlci0+c3RhdGVfb3duZXJzKTsKKwkgICAgIHBvcyAhPSBOVUxMOworCSAgICAgcG9zID0gcmJfbmV4dChwb3MpKSB7CisJCXNwID0gcmJfZW50cnkocG9zLCBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciwgc29fc2VydmVyX25vZGUpOwogCQlpZiAobGlzdF9lbXB0eSgmc3AtPnNvX3N0YXRlcykpCiAJCQljb250aW51ZTsKIAkJY3JlZCA9IGdldF9ycGNjcmVkKHNwLT5zb19jcmVkKTsKQEAgLTEyMSw2ICsxMjQsMjggQEAKIAlyZXR1cm4gY3JlZDsKIH0KIAorLyoqCisgKiBuZnM0X2dldF9yZW5ld19jcmVkX2xvY2tlZCAtIEFjcXVpcmUgY3JlZGVudGlhbCBmb3IgYSByZW5ldyBvcGVyYXRpb24KKyAqIEBjbHA6IGNsaWVudCBzdGF0ZSBoYW5kbGUKKyAqCisgKiBSZXR1cm5zIGFuIHJwY19jcmVkIHdpdGggcmVmZXJlbmNlIGNvdW50IGJ1bXBlZCwgb3IgTlVMTC4KKyAqIENhbGxlciBtdXN0IGhvbGQgY2xwLT5jbF9sb2NrLgorICovCitzdHJ1Y3QgcnBjX2NyZWQgKm5mczRfZ2V0X3JlbmV3X2NyZWRfbG9ja2VkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCit7CisJc3RydWN0IHJwY19jcmVkICpjcmVkID0gTlVMTDsKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNlcnZlciwgJmNscC0+Y2xfc3VwZXJibG9ja3MsIGNsaWVudF9saW5rKSB7CisJCWNyZWQgPSBuZnM0X2dldF9yZW5ld19jcmVkX3NlcnZlcl9sb2NrZWQoc2VydmVyKTsKKwkJaWYgKGNyZWQgIT0gTlVMTCkKKwkJCWJyZWFrOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gY3JlZDsKK30KKwogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQogCiBzdGF0aWMgaW50IG5mczQxX3NldHVwX3N0YXRlX3JlbmV3YWwoc3RydWN0IG5mc19jbGllbnQgKmNscCkKQEAgLTE0Miw2ICsxNjcsMTEgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCisvKgorICogQmFjayBjaGFubmVsIHJldHVybnMgTkZTNEVSUl9ERUxBWSBmb3IgbmV3IHJlcXVlc3RzIHdoZW4KKyAqIE5GUzRfU0VTU0lPTl9EUkFJTklORyBpcyBzZXQgc28gdGhlcmUgaXMgbm8gd29yayB0byBiZSBkb25lIHdoZW4gZHJhaW5pbmcKKyAqIGlzIGVuZGVkLgorICovCiBzdGF0aWMgdm9pZCBuZnM0X2VuZF9kcmFpbl9zZXNzaW9uKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCiB7CiAJc3RydWN0IG5mczRfc2Vzc2lvbiAqc2VzID0gY2xwLT5jbF9zZXNzaW9uOwpAQCAtMTY1LDIyICsxOTUsMzIgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbmZzNF9iZWdpbl9kcmFpbl9zZXNzaW9uKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCitzdGF0aWMgaW50IG5mczRfd2FpdF9vbl9zbG90X3RibChzdHJ1Y3QgbmZzNF9zbG90X3RhYmxlICp0YmwpCiB7Ci0Jc3RydWN0IG5mczRfc2Vzc2lvbiAqc2VzID0gY2xwLT5jbF9zZXNzaW9uOwotCXN0cnVjdCBuZnM0X3Nsb3RfdGFibGUgKnRibCA9ICZzZXMtPmZjX3Nsb3RfdGFibGU7Ci0KIAlzcGluX2xvY2soJnRibC0+c2xvdF90YmxfbG9jayk7Ci0Jc2V0X2JpdChORlM0X1NFU1NJT05fRFJBSU5JTkcsICZzZXMtPnNlc3Npb25fc3RhdGUpOwogCWlmICh0YmwtPmhpZ2hlc3RfdXNlZF9zbG90aWQgIT0gLTEpIHsKLQkJSU5JVF9DT01QTEVUSU9OKHNlcy0+Y29tcGxldGUpOworCQlJTklUX0NPTVBMRVRJT04odGJsLT5jb21wbGV0ZSk7CiAJCXNwaW5fdW5sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOwotCQlyZXR1cm4gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZzZXMtPmNvbXBsZXRlKTsKKwkJcmV0dXJuIHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmdGJsLT5jb21wbGV0ZSk7CiAJfQogCXNwaW5fdW5sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG5mczRfYmVnaW5fZHJhaW5fc2Vzc2lvbihzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQoreworCXN0cnVjdCBuZnM0X3Nlc3Npb24gKnNlcyA9IGNscC0+Y2xfc2Vzc2lvbjsKKwlpbnQgcmV0ID0gMDsKKworCXNldF9iaXQoTkZTNF9TRVNTSU9OX0RSQUlOSU5HLCAmc2VzLT5zZXNzaW9uX3N0YXRlKTsKKwkvKiBiYWNrIGNoYW5uZWwgKi8KKwlyZXQgPSBuZnM0X3dhaXRfb25fc2xvdF90YmwoJnNlcy0+YmNfc2xvdF90YWJsZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkvKiBmb3JlIGNoYW5uZWwgKi8KKwlyZXR1cm4gbmZzNF93YWl0X29uX3Nsb3RfdGJsKCZzZXMtPmZjX3Nsb3RfdGFibGUpOworfQorCiBpbnQgbmZzNDFfaW5pdF9jbGllbnRpZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCiB7CiAJaW50IHN0YXR1czsKQEAgLTE5Miw2ICsyMzIsMTIgQEAKIAlzdGF0dXMgPSBuZnM0X3Byb2NfY3JlYXRlX3Nlc3Npb24oY2xwKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0OworCXN0YXR1cyA9IG5mczRfc2V0X2NhbGxiYWNrX3Nlc3Npb25pZChjbHApOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJTZXNzaW9uaWQgbm90IHNldC4gTm8gY2FsbGJhY2sgc2VydmljZVxuIik7CisJCW5mc19jYWxsYmFja19kb3duKDEpOworCQlzdGF0dXMgPSAwOworCX0KIAluZnM0MV9zZXR1cF9zdGF0ZV9yZW5ld2FsKGNscCk7CiAJbmZzX21hcmtfY2xpZW50X3JlYWR5KGNscCwgTkZTX0NTX1JFQURZKTsKIG91dDoKQEAgLTIxMCwyOCArMjU2LDU2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIAotc3RydWN0IHJwY19jcmVkICpuZnM0X2dldF9zZXRjbGllbnRpZF9jcmVkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCitzdGF0aWMgc3RydWN0IHJwY19jcmVkICoKK25mczRfZ2V0X3NldGNsaWVudGlkX2NyZWRfc2VydmVyKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCiB7CisJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHNlcnZlci0+bmZzX2NsaWVudDsKKwlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQgPSBOVUxMOwogCXN0cnVjdCBuZnM0X3N0YXRlX293bmVyICpzcDsKIAlzdHJ1Y3QgcmJfbm9kZSAqcG9zOwotCXN0cnVjdCBycGNfY3JlZCAqY3JlZDsKIAogCXNwaW5fbG9jaygmY2xwLT5jbF9sb2NrKTsKLQljcmVkID0gbmZzNF9nZXRfbWFjaGluZV9jcmVkX2xvY2tlZChjbHApOwotCWlmIChjcmVkICE9IE5VTEwpCi0JCWdvdG8gb3V0OwotCXBvcyA9IHJiX2ZpcnN0KCZjbHAtPmNsX3N0YXRlX293bmVycyk7CisJcG9zID0gcmJfZmlyc3QoJnNlcnZlci0+c3RhdGVfb3duZXJzKTsKIAlpZiAocG9zICE9IE5VTEwpIHsKLQkJc3AgPSByYl9lbnRyeShwb3MsIHN0cnVjdCBuZnM0X3N0YXRlX293bmVyLCBzb19jbGllbnRfbm9kZSk7CisJCXNwID0gcmJfZW50cnkocG9zLCBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciwgc29fc2VydmVyX25vZGUpOwogCQljcmVkID0gZ2V0X3JwY2NyZWQoc3AtPnNvX2NyZWQpOwogCX0KLW91dDoKIAlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKIAlyZXR1cm4gY3JlZDsKIH0KIAotc3RhdGljIHZvaWQgbmZzX2FsbG9jX3VuaXF1ZV9pZChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgc3RydWN0IG5mc191bmlxdWVfaWQgKm5ldywKLQkJX191NjQgbWludmFsLCBpbnQgbWF4Yml0cykKKy8qKgorICogbmZzNF9nZXRfc2V0Y2xpZW50aWRfY3JlZCAtIEFjcXVpcmUgY3JlZGVudGlhbCBmb3IgYSBzZXRjbGllbnRpZCBvcGVyYXRpb24KKyAqIEBjbHA6IGNsaWVudCBzdGF0ZSBoYW5kbGUKKyAqCisgKiBSZXR1cm5zIGFuIHJwY19jcmVkIHdpdGggcmVmZXJlbmNlIGNvdW50IGJ1bXBlZCwgb3IgTlVMTC4KKyAqLworc3RydWN0IHJwY19jcmVkICpuZnM0X2dldF9zZXRjbGllbnRpZF9jcmVkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCit7CisJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcjsKKwlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQ7CisKKwlzcGluX2xvY2soJmNscC0+Y2xfbG9jayk7CisJY3JlZCA9IG5mczRfZ2V0X21hY2hpbmVfY3JlZF9sb2NrZWQoY2xwKTsKKwlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKKwlpZiAoY3JlZCAhPSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZXJ2ZXIsICZjbHAtPmNsX3N1cGVyYmxvY2tzLCBjbGllbnRfbGluaykgeworCQljcmVkID0gbmZzNF9nZXRfc2V0Y2xpZW50aWRfY3JlZF9zZXJ2ZXIoc2VydmVyKTsKKwkJaWYgKGNyZWQgIT0gTlVMTCkKKwkJCWJyZWFrOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworb3V0OgorCXJldHVybiBjcmVkOworfQorCitzdGF0aWMgdm9pZCBuZnNfYWxsb2NfdW5pcXVlX2lkX2xvY2tlZChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwKKwkJCQkgICAgICAgc3RydWN0IG5mc191bmlxdWVfaWQgKm5ldywKKwkJCQkgICAgICAgX191NjQgbWludmFsLCBpbnQgbWF4Yml0cykKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqKnAsICpwYXJlbnQ7CiAJc3RydWN0IG5mc191bmlxdWVfaWQgKnBvczsKQEAgLTI4NiwxNiArMzYwLDE1IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqCi1uZnM0X2ZpbmRfc3RhdGVfb3duZXIoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IHJwY19jcmVkICpjcmVkKQorbmZzNF9maW5kX3N0YXRlX293bmVyX2xvY2tlZChzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCiB7Ci0Jc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHNlcnZlci0+bmZzX2NsaWVudDsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmY2xwLT5jbF9zdGF0ZV9vd25lcnMucmJfbm9kZSwKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmc2VydmVyLT5zdGF0ZV9vd25lcnMucmJfbm9kZSwKIAkJICAgICAgICpwYXJlbnQgPSBOVUxMOwogCXN0cnVjdCBuZnM0X3N0YXRlX293bmVyICpzcCwgKnJlcyA9IE5VTEw7CiAKIAl3aGlsZSAoKnAgIT0gTlVMTCkgewogCQlwYXJlbnQgPSAqcDsKLQkJc3AgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBuZnM0X3N0YXRlX293bmVyLCBzb19jbGllbnRfbm9kZSk7CisJCXNwID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciwgc29fc2VydmVyX25vZGUpOwogCiAJCWlmIChzZXJ2ZXIgPCBzcC0+c29fc2VydmVyKSB7CiAJCQlwID0gJnBhcmVudC0+cmJfbGVmdDsKQEAgLTMxOSwyNCArMzkyLDE3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqCi1uZnM0X2luc2VydF9zdGF0ZV9vd25lcihzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqbmV3KQorbmZzNF9pbnNlcnRfc3RhdGVfb3duZXJfbG9ja2VkKHN0cnVjdCBuZnM0X3N0YXRlX293bmVyICpuZXcpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKipwID0gJmNscC0+Y2xfc3RhdGVfb3duZXJzLnJiX25vZGUsCisJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IG5ldy0+c29fc2VydmVyOworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZzZXJ2ZXItPnN0YXRlX293bmVycy5yYl9ub2RlLAogCQkgICAgICAgKnBhcmVudCA9IE5VTEw7CiAJc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKnNwOwogCiAJd2hpbGUgKCpwICE9IE5VTEwpIHsKIAkJcGFyZW50ID0gKnA7Ci0JCXNwID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciwgc29fY2xpZW50X25vZGUpOworCQlzcCA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IG5mczRfc3RhdGVfb3duZXIsIHNvX3NlcnZlcl9ub2RlKTsKIAotCQlpZiAobmV3LT5zb19zZXJ2ZXIgPCBzcC0+c29fc2VydmVyKSB7Ci0JCQlwID0gJnBhcmVudC0+cmJfbGVmdDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChuZXctPnNvX3NlcnZlciA+IHNwLT5zb19zZXJ2ZXIpIHsKLQkJCXAgPSAmcGFyZW50LT5yYl9yaWdodDsKLQkJCWNvbnRpbnVlOwotCQl9CiAJCWlmIChuZXctPnNvX2NyZWQgPCBzcC0+c29fY3JlZCkKIAkJCXAgPSAmcGFyZW50LT5yYl9sZWZ0OwogCQllbHNlIGlmIChuZXctPnNvX2NyZWQgPiBzcC0+c29fY3JlZCkKQEAgLTM0NiwxOCArNDEyLDIxIEBACiAJCQlyZXR1cm4gc3A7CiAJCX0KIAl9Ci0JbmZzX2FsbG9jX3VuaXF1ZV9pZCgmY2xwLT5jbF9vcGVub3duZXJfaWQsICZuZXctPnNvX293bmVyX2lkLCAxLCA2NCk7Ci0JcmJfbGlua19ub2RlKCZuZXctPnNvX2NsaWVudF9ub2RlLCBwYXJlbnQsIHApOwotCXJiX2luc2VydF9jb2xvcigmbmV3LT5zb19jbGllbnRfbm9kZSwgJmNscC0+Y2xfc3RhdGVfb3duZXJzKTsKKwluZnNfYWxsb2NfdW5pcXVlX2lkX2xvY2tlZCgmc2VydmVyLT5vcGVub3duZXJfaWQsCisJCQkJCSZuZXctPnNvX293bmVyX2lkLCAxLCA2NCk7CisJcmJfbGlua19ub2RlKCZuZXctPnNvX3NlcnZlcl9ub2RlLCBwYXJlbnQsIHApOworCXJiX2luc2VydF9jb2xvcigmbmV3LT5zb19zZXJ2ZXJfbm9kZSwgJnNlcnZlci0+c3RhdGVfb3duZXJzKTsKIAlyZXR1cm4gbmV3OwogfQogCiBzdGF0aWMgdm9pZAotbmZzNF9yZW1vdmVfc3RhdGVfb3duZXIoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKnNwKQorbmZzNF9yZW1vdmVfc3RhdGVfb3duZXJfbG9ja2VkKHN0cnVjdCBuZnM0X3N0YXRlX293bmVyICpzcCkKIHsKLQlpZiAoIVJCX0VNUFRZX05PREUoJnNwLT5zb19jbGllbnRfbm9kZSkpCi0JCXJiX2VyYXNlKCZzcC0+c29fY2xpZW50X25vZGUsICZjbHAtPmNsX3N0YXRlX293bmVycyk7Ci0JbmZzX2ZyZWVfdW5pcXVlX2lkKCZjbHAtPmNsX29wZW5vd25lcl9pZCwgJnNwLT5zb19vd25lcl9pZCk7CisJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IHNwLT5zb19zZXJ2ZXI7CisKKwlpZiAoIVJCX0VNUFRZX05PREUoJnNwLT5zb19zZXJ2ZXJfbm9kZSkpCisJCXJiX2VyYXNlKCZzcC0+c29fc2VydmVyX25vZGUsICZzZXJ2ZXItPnN0YXRlX293bmVycyk7CisJbmZzX2ZyZWVfdW5pcXVlX2lkKCZzZXJ2ZXItPm9wZW5vd25lcl9pZCwgJnNwLT5zb19vd25lcl9pZCk7CiB9CiAKIC8qCkBAIC0zODYsMjMgKzQ1NSwzMiBAQAogc3RhdGljIHZvaWQKIG5mczRfZHJvcF9zdGF0ZV9vd25lcihzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqc3ApCiB7Ci0JaWYgKCFSQl9FTVBUWV9OT0RFKCZzcC0+c29fY2xpZW50X25vZGUpKSB7Ci0JCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBzcC0+c29fc2VydmVyLT5uZnNfY2xpZW50OworCWlmICghUkJfRU1QVFlfTk9ERSgmc3AtPnNvX3NlcnZlcl9ub2RlKSkgeworCQlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gc3AtPnNvX3NlcnZlcjsKKwkJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHNlcnZlci0+bmZzX2NsaWVudDsKIAogCQlzcGluX2xvY2soJmNscC0+Y2xfbG9jayk7Ci0JCXJiX2VyYXNlKCZzcC0+c29fY2xpZW50X25vZGUsICZjbHAtPmNsX3N0YXRlX293bmVycyk7Ci0JCVJCX0NMRUFSX05PREUoJnNwLT5zb19jbGllbnRfbm9kZSk7CisJCXJiX2VyYXNlKCZzcC0+c29fc2VydmVyX25vZGUsICZzZXJ2ZXItPnN0YXRlX293bmVycyk7CisJCVJCX0NMRUFSX05PREUoJnNwLT5zb19zZXJ2ZXJfbm9kZSk7CiAJCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOwogCX0KIH0KIAotc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKm5mczRfZ2V0X3N0YXRlX293bmVyKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBycGNfY3JlZCAqY3JlZCkKKy8qKgorICogbmZzNF9nZXRfc3RhdGVfb3duZXIgLSBMb29rIHVwIGEgc3RhdGUgb3duZXIgZ2l2ZW4gYSBjcmVkZW50aWFsCisgKiBAc2VydmVyOiBuZnNfc2VydmVyIHRvIHNlYXJjaAorICogQGNyZWQ6IFJQQyBjcmVkZW50aWFsIHRvIG1hdGNoCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gYW4gaW5zdGFudGlhdGVkIG5mczRfc3RhdGVfb3duZXIgc3RydWN0LCBvciBOVUxMLgorICovCitzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqbmZzNF9nZXRfc3RhdGVfb3duZXIoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwKKwkJCQkJICAgICAgc3RydWN0IHJwY19jcmVkICpjcmVkKQogewogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBzZXJ2ZXItPm5mc19jbGllbnQ7CiAJc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKnNwLCAqbmV3OwogCiAJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOwotCXNwID0gbmZzNF9maW5kX3N0YXRlX293bmVyKHNlcnZlciwgY3JlZCk7CisJc3AgPSBuZnM0X2ZpbmRfc3RhdGVfb3duZXJfbG9ja2VkKHNlcnZlciwgY3JlZCk7CiAJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7CiAJaWYgKHNwICE9IE5VTEwpCiAJCXJldHVybiBzcDsKQEAgLTQxMiw3ICs0OTAsNyBAQAogCW5ldy0+c29fc2VydmVyID0gc2VydmVyOwogCW5ldy0+c29fY3JlZCA9IGNyZWQ7CiAJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOwotCXNwID0gbmZzNF9pbnNlcnRfc3RhdGVfb3duZXIoY2xwLCBuZXcpOworCXNwID0gbmZzNF9pbnNlcnRfc3RhdGVfb3duZXJfbG9ja2VkKG5ldyk7CiAJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7CiAJaWYgKHNwID09IG5ldykKIAkJZ2V0X3JwY2NyZWQoY3JlZCk7CkBAIC00MjMsNiArNTAxLDExIEBACiAJcmV0dXJuIHNwOwogfQogCisvKioKKyAqIG5mczRfcHV0X3N0YXRlX293bmVyIC0gUmVsZWFzZSBhIG5mczRfc3RhdGVfb3duZXIKKyAqIEBzcDogc3RhdGUgb3duZXIgZGF0YSB0byByZWxlYXNlCisgKgorICovCiB2b2lkIG5mczRfcHV0X3N0YXRlX293bmVyKHN0cnVjdCBuZnM0X3N0YXRlX293bmVyICpzcCkKIHsKIAlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gc3AtPnNvX3NlcnZlci0+bmZzX2NsaWVudDsKQEAgLTQzMCw3ICs1MTMsNyBAQAogCiAJaWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKCZzcC0+c29fY291bnQsICZjbHAtPmNsX2xvY2spKQogCQlyZXR1cm47Ci0JbmZzNF9yZW1vdmVfc3RhdGVfb3duZXIoY2xwLCBzcCk7CisJbmZzNF9yZW1vdmVfc3RhdGVfb3duZXJfbG9ja2VkKHNwKTsKIAlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKIAlycGNfZGVzdHJveV93YWl0X3F1ZXVlKCZzcC0+c29fc2VxdWVuY2Uud2FpdCk7CiAJcHV0X3JwY2NyZWQoY3JlZCk7CkBAIC01ODUsOCArNjY4LDExIEBACiAJaWYgKCFjYWxsX2Nsb3NlKSB7CiAJCW5mczRfcHV0X29wZW5fc3RhdGUoc3RhdGUpOwogCQluZnM0X3B1dF9zdGF0ZV9vd25lcihvd25lcik7Ci0JfSBlbHNlCi0JCW5mczRfZG9fY2xvc2UocGF0aCwgc3RhdGUsIGdmcF9tYXNrLCB3YWl0KTsKKwl9IGVsc2UgeworCQlib29sIHJvYyA9IHBuZnNfcm9jKHN0YXRlLT5pbm9kZSk7CisKKwkJbmZzNF9kb19jbG9zZShwYXRoLCBzdGF0ZSwgZ2ZwX21hc2ssIHdhaXQsIHJvYyk7CisJfQogfQogCiB2b2lkIG5mczRfY2xvc2Vfc3RhdGUoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwgZm1vZGVfdCBmbW9kZSkKQEAgLTYzMyw3ICs3MTksOCBAQAogc3RhdGljIHN0cnVjdCBuZnM0X2xvY2tfc3RhdGUgKm5mczRfYWxsb2NfbG9ja19zdGF0ZShzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsIGZsX293bmVyX3QgZmxfb3duZXIsIHBpZF90IGZsX3BpZCwgdW5zaWduZWQgaW50IHR5cGUpCiB7CiAJc3RydWN0IG5mczRfbG9ja19zdGF0ZSAqbHNwOwotCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBzdGF0ZS0+b3duZXItPnNvX3NlcnZlci0+bmZzX2NsaWVudDsKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gc3RhdGUtPm93bmVyLT5zb19zZXJ2ZXI7CisJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHNlcnZlci0+bmZzX2NsaWVudDsKIAogCWxzcCA9IGt6YWxsb2Moc2l6ZW9mKCpsc3ApLCBHRlBfTk9GUyk7CiAJaWYgKGxzcCA9PSBOVUxMKQpAQCAtNjU3LDcgKzc0NCw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAlzcGluX2xvY2soJmNscC0+Y2xfbG9jayk7Ci0JbmZzX2FsbG9jX3VuaXF1ZV9pZCgmY2xwLT5jbF9sb2Nrb3duZXJfaWQsICZsc3AtPmxzX2lkLCAxLCA2NCk7CisJbmZzX2FsbG9jX3VuaXF1ZV9pZF9sb2NrZWQoJnNlcnZlci0+bG9ja293bmVyX2lkLCAmbHNwLT5sc19pZCwgMSwgNjQpOwogCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZsc3AtPmxzX2xvY2tzKTsKIAlyZXR1cm4gbHNwOwpAQCAtNjY1LDEwICs3NTIsMTEgQEAKIAogc3RhdGljIHZvaWQgbmZzNF9mcmVlX2xvY2tfc3RhdGUoc3RydWN0IG5mczRfbG9ja19zdGF0ZSAqbHNwKQogewotCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBsc3AtPmxzX3N0YXRlLT5vd25lci0+c29fc2VydmVyLT5uZnNfY2xpZW50OworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBsc3AtPmxzX3N0YXRlLT5vd25lci0+c29fc2VydmVyOworCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBzZXJ2ZXItPm5mc19jbGllbnQ7CiAKIAlzcGluX2xvY2soJmNscC0+Y2xfbG9jayk7Ci0JbmZzX2ZyZWVfdW5pcXVlX2lkKCZjbHAtPmNsX2xvY2tvd25lcl9pZCwgJmxzcC0+bHNfaWQpOworCW5mc19mcmVlX3VuaXF1ZV9pZCgmc2VydmVyLT5sb2Nrb3duZXJfaWQsICZsc3AtPmxzX2lkKTsKIAlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKIAlycGNfZGVzdHJveV93YWl0X3F1ZXVlKCZsc3AtPmxzX3NlcXVlbmNlLndhaXQpOwogCWtmcmVlKGxzcCk7CkBAIC0xMTE0LDE1ICsxMjAyLDE5IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBuZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9oZWxwZXIoc3RydWN0IG5mc19jbGllbnQgKmNscCwgaW50ICgqbWFya19yZWNsYWltKShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpKQorc3RhdGljIHZvaWQgbmZzNF9yZXNldF9zZXFpZHMoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwKKwlpbnQgKCptYXJrX3JlY2xhaW0pKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSkpCiB7CisJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHNlcnZlci0+bmZzX2NsaWVudDsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqc3A7CiAJc3RydWN0IHJiX25vZGUgKnBvczsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGU7CiAKLQkvKiBSZXNldCBhbGwgc2VxdWVuY2UgaWRzIHRvIHplcm8gKi8KLQlmb3IgKHBvcyA9IHJiX2ZpcnN0KCZjbHAtPmNsX3N0YXRlX293bmVycyk7IHBvcyAhPSBOVUxMOyBwb3MgPSByYl9uZXh0KHBvcykpIHsKLQkJc3AgPSByYl9lbnRyeShwb3MsIHN0cnVjdCBuZnM0X3N0YXRlX293bmVyLCBzb19jbGllbnRfbm9kZSk7CisJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOworCWZvciAocG9zID0gcmJfZmlyc3QoJnNlcnZlci0+c3RhdGVfb3duZXJzKTsKKwkgICAgIHBvcyAhPSBOVUxMOworCSAgICAgcG9zID0gcmJfbmV4dChwb3MpKSB7CisJCXNwID0gcmJfZW50cnkocG9zLCBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciwgc29fc2VydmVyX25vZGUpOwogCQlzcC0+c29fc2VxaWQuZmxhZ3MgPSAwOwogCQlzcGluX2xvY2soJnNwLT5zb19sb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGF0ZSwgJnNwLT5zb19zdGF0ZXMsIG9wZW5fc3RhdGVzKSB7CkBAIC0xMTMxLDYgKzEyMjMsMTggQEAKIAkJfQogCQlzcGluX3VubG9jaygmc3AtPnNvX2xvY2spOwogCX0KKwlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbmZzNF9zdGF0ZV9tYXJrX3JlY2xhaW1faGVscGVyKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCisJaW50ICgqbWFya19yZWNsYWltKShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpKQoreworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXI7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2VydmVyLCAmY2xwLT5jbF9zdXBlcmJsb2NrcywgY2xpZW50X2xpbmspCisJCW5mczRfcmVzZXRfc2VxaWRzKHNlcnZlciwgbWFya19yZWNsYWltKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogc3RhdGljIHZvaWQgbmZzNF9zdGF0ZV9zdGFydF9yZWNsYWltX3JlYm9vdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQpAQCAtMTE0OCwyNSArMTI1Miw0MSBAQAogCQkodm9pZClvcHMtPnJlY2xhaW1fY29tcGxldGUoY2xwKTsKIH0KIAotc3RhdGljIGludCBuZnM0X3N0YXRlX2NsZWFyX3JlY2xhaW1fcmVib290KHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCitzdGF0aWMgdm9pZCBuZnM0X2NsZWFyX3JlY2xhaW1fc2VydmVyKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCiB7CisJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHNlcnZlci0+bmZzX2NsaWVudDsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqc3A7CiAJc3RydWN0IHJiX25vZGUgKnBvczsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGU7CiAKLQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChORlM0Q0xOVF9SRUNMQUlNX1JFQk9PVCwgJmNscC0+Y2xfc3RhdGUpKQotCQlyZXR1cm4gMDsKLQotCWZvciAocG9zID0gcmJfZmlyc3QoJmNscC0+Y2xfc3RhdGVfb3duZXJzKTsgcG9zICE9IE5VTEw7IHBvcyA9IHJiX25leHQocG9zKSkgewotCQlzcCA9IHJiX2VudHJ5KHBvcywgc3RydWN0IG5mczRfc3RhdGVfb3duZXIsIHNvX2NsaWVudF9ub2RlKTsKKwlzcGluX2xvY2soJmNscC0+Y2xfbG9jayk7CisJZm9yIChwb3MgPSByYl9maXJzdCgmc2VydmVyLT5zdGF0ZV9vd25lcnMpOworCSAgICAgcG9zICE9IE5VTEw7CisJICAgICBwb3MgPSByYl9uZXh0KHBvcykpIHsKKwkJc3AgPSByYl9lbnRyeShwb3MsIHN0cnVjdCBuZnM0X3N0YXRlX293bmVyLCBzb19zZXJ2ZXJfbm9kZSk7CiAJCXNwaW5fbG9jaygmc3AtPnNvX2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0YXRlLCAmc3AtPnNvX3N0YXRlcywgb3Blbl9zdGF0ZXMpIHsKLQkJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KE5GU19TVEFURV9SRUNMQUlNX1JFQk9PVCwgJnN0YXRlLT5mbGFncykpCisJCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChORlNfU1RBVEVfUkVDTEFJTV9SRUJPT1QsCisJCQkJCQkmc3RhdGUtPmZsYWdzKSkKIAkJCQljb250aW51ZTsKIAkJCW5mczRfc3RhdGVfbWFya19yZWNsYWltX25vZ3JhY2UoY2xwLCBzdGF0ZSk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJnNwLT5zb19sb2NrKTsKIAl9CisJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgbmZzNF9zdGF0ZV9jbGVhcl9yZWNsYWltX3JlYm9vdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQoreworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXI7CisKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChORlM0Q0xOVF9SRUNMQUlNX1JFQk9PVCwgJmNscC0+Y2xfc3RhdGUpKQorCQlyZXR1cm4gMDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZXJ2ZXIsICZjbHAtPmNsX3N1cGVyYmxvY2tzLCBjbGllbnRfbGluaykKKwkJbmZzNF9jbGVhcl9yZWNsYWltX3NlcnZlcihzZXJ2ZXIpOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJbmZzX2RlbGVnYXRpb25fcmVhcF91bmNsYWltZWQoY2xwKTsKIAlyZXR1cm4gMTsKQEAgLTEyMzgsMjcgKzEzNTgsNDAgQEAKIAogc3RhdGljIGludCBuZnM0X2RvX3JlY2xhaW0oc3RydWN0IG5mc19jbGllbnQgKmNscCwgY29uc3Qgc3RydWN0IG5mczRfc3RhdGVfcmVjb3Zlcnlfb3BzICpvcHMpCiB7CisJc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKnNwOworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXI7CiAJc3RydWN0IHJiX25vZGUgKnBvczsKIAlpbnQgc3RhdHVzID0gMDsKIAogcmVzdGFydDoKLQlzcGluX2xvY2soJmNscC0+Y2xfbG9jayk7Ci0JZm9yIChwb3MgPSByYl9maXJzdCgmY2xwLT5jbF9zdGF0ZV9vd25lcnMpOyBwb3MgIT0gTlVMTDsgcG9zID0gcmJfbmV4dChwb3MpKSB7Ci0JCXN0cnVjdCBuZnM0X3N0YXRlX293bmVyICpzcCA9IHJiX2VudHJ5KHBvcywgc3RydWN0IG5mczRfc3RhdGVfb3duZXIsIHNvX2NsaWVudF9ub2RlKTsKLQkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQob3BzLT5vd25lcl9mbGFnX2JpdCwgJnNwLT5zb19mbGFncykpCi0JCQljb250aW51ZTsKLQkJYXRvbWljX2luYygmc3AtPnNvX2NvdW50KTsKLQkJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7Ci0JCXN0YXR1cyA9IG5mczRfcmVjbGFpbV9vcGVuX3N0YXRlKHNwLCBvcHMpOwotCQlpZiAoc3RhdHVzIDwgMCkgewotCQkJc2V0X2JpdChvcHMtPm93bmVyX2ZsYWdfYml0LCAmc3AtPnNvX2ZsYWdzKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2VydmVyLCAmY2xwLT5jbF9zdXBlcmJsb2NrcywgY2xpZW50X2xpbmspIHsKKwkJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOworCQlmb3IgKHBvcyA9IHJiX2ZpcnN0KCZzZXJ2ZXItPnN0YXRlX293bmVycyk7CisJCSAgICAgcG9zICE9IE5VTEw7CisJCSAgICAgcG9zID0gcmJfbmV4dChwb3MpKSB7CisJCQlzcCA9IHJiX2VudHJ5KHBvcywKKwkJCQlzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciwgc29fc2VydmVyX25vZGUpOworCQkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQob3BzLT5vd25lcl9mbGFnX2JpdCwKKwkJCQkJCQkmc3AtPnNvX2ZsYWdzKSkKKwkJCQljb250aW51ZTsKKwkJCWF0b21pY19pbmMoJnNwLT5zb19jb3VudCk7CisJCQlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCisJCQlzdGF0dXMgPSBuZnM0X3JlY2xhaW1fb3Blbl9zdGF0ZShzcCwgb3BzKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJc2V0X2JpdChvcHMtPm93bmVyX2ZsYWdfYml0LCAmc3AtPnNvX2ZsYWdzKTsKKwkJCQluZnM0X3B1dF9zdGF0ZV9vd25lcihzcCk7CisJCQkJcmV0dXJuIG5mczRfcmVjb3ZlcnlfaGFuZGxlX2Vycm9yKGNscCwgc3RhdHVzKTsKKwkJCX0KKwogCQkJbmZzNF9wdXRfc3RhdGVfb3duZXIoc3ApOwotCQkJcmV0dXJuIG5mczRfcmVjb3ZlcnlfaGFuZGxlX2Vycm9yKGNscCwgc3RhdHVzKTsKKwkJCWdvdG8gcmVzdGFydDsKIAkJfQotCQluZnM0X3B1dF9zdGF0ZV9vd25lcihzcCk7Ci0JCWdvdG8gcmVzdGFydDsKKwkJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IDlmMTgyNmIuLjJhYjhlNWMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtNzEsOCArNzEsOCBAQAogLyogbG9jayxvcGVuIG93bmVyIGlkOgogICogd2UgY3VycmVudGx5IHVzZSBzaXplIDIgKHU2NCkgb3V0IG9mIChORlM0X09QQVFVRV9MSU1JVCAgPj4gMikKICAqLwotI2RlZmluZSBvcGVuX293bmVyX2lkX21heHN6CSgxICsgNCkKLSNkZWZpbmUgbG9ja19vd25lcl9pZF9tYXhzegkoMSArIDQpCisjZGVmaW5lIG9wZW5fb3duZXJfaWRfbWF4c3oJKDEgKyAxICsgNCkKKyNkZWZpbmUgbG9ja19vd25lcl9pZF9tYXhzegkoMSArIDEgKyA0KQogI2RlZmluZSBkZWNvZGVfbG9ja293bmVyX21heHN6CSgxICsgWERSX1FVQURMRU4oSURNQVBfTkFNRVNaKSkKICNkZWZpbmUgY29tcG91bmRfZW5jb2RlX2hkcl9tYXhzegkoMyArIChORlM0X01BWFRBR0xFTiA+PiAyKSkKICNkZWZpbmUgY29tcG91bmRfZGVjb2RlX2hkcl9tYXhzegkoMyArIChORlM0X01BWFRBR0xFTiA+PiAyKSkKQEAgLTEwODgsMTAgKzEwODgsMTEgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDI4KTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDMyKTsKIAlwID0geGRyX2VuY29kZV9oeXBlcihwLCBsb3duZXItPmNsaWVudGlkKTsKLQkqcCsrID0gY3B1X3RvX2JlMzIoMTYpOworCSpwKysgPSBjcHVfdG9fYmUzMigyMCk7CiAJcCA9IHhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsICJsb2NrIGlkOiIsIDgpOworCSpwKysgPSBjcHVfdG9fYmUzMihsb3duZXItPnNfZGV2KTsKIAl4ZHJfZW5jb2RlX2h5cGVyKHAsIGxvd25lci0+aWQpOwogfQogCkBAIC0xMjEwLDEwICsxMjExLDExIEBACiAJKnArKyA9IGNwdV90b19iZTMyKE9QX09QRU4pOwogCSpwID0gY3B1X3RvX2JlMzIoYXJnLT5zZXFpZC0+c2VxdWVuY2UtPmNvdW50ZXIpOwogCWVuY29kZV9zaGFyZV9hY2Nlc3MoeGRyLCBhcmctPmZtb2RlKTsKLQlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDI4KTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDMyKTsKIAlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmctPmNsaWVudGlkKTsKLQkqcCsrID0gY3B1X3RvX2JlMzIoMTYpOworCSpwKysgPSBjcHVfdG9fYmUzMigyMCk7CiAJcCA9IHhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsICJvcGVuIGlkOiIsIDgpOworCSpwKysgPSBjcHVfdG9fYmUzMihhcmctPnNlcnZlci0+c19kZXYpOwogCXhkcl9lbmNvZGVfaHlwZXIocCwgYXJnLT5pZCk7CiB9CiAKQEAgLTE1MTAsNyArMTUxMiw3IEBACiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX3Jlc3RvcmVmaF9tYXhzejsKIH0KIAotc3RhdGljIGludAorc3RhdGljIHZvaWQKIGVuY29kZV9zZXRhY2woc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19zZXRhY2xhcmdzICphcmcsIHN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKIHsKIAlfX2JlMzIgKnA7CkBAIC0xNTIxLDE0ICsxNTIzLDEyIEBACiAJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCAyKjQpOwogCSpwKysgPSBjcHVfdG9fYmUzMigxKTsKIAkqcCA9IGNwdV90b19iZTMyKEZBVFRSNF9XT1JEMF9BQ0wpOwotCWlmIChhcmctPmFjbF9sZW4gJSA0KQotCQlyZXR1cm4gLUVJTlZBTDsKKwlCVUdfT04oYXJnLT5hY2xfbGVuICUgNCk7CiAJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0KTsKIAkqcCA9IGNwdV90b19iZTMyKGFyZy0+YWNsX2xlbik7CiAJeGRyX3dyaXRlX3BhZ2VzKHhkciwgYXJnLT5hY2xfcGFnZXMsIGFyZy0+YWNsX3BnYmFzZSwgYXJnLT5hY2xfbGVuKTsKIAloZHItPm5vcHMrKzsKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfc2V0YWNsX21heHN6OwotCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTc4OSw3ICsxNzg5LDYgQEAKIAkJICAgICAgY29uc3Qgc3RydWN0IG5mczRfbGF5b3V0Z2V0X2FyZ3MgKmFyZ3MsCiAJCSAgICAgIHN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKIHsKLQluZnM0X3N0YXRlaWQgc3RhdGVpZDsKIAlfX2JlMzIgKnA7CiAKIAlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQ0ICsgTkZTNF9TVEFURUlEX1NJWkUpOwpAQCAtMTgwMCw5ICsxNzk5LDcgQEAKIAlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmdzLT5yYW5nZS5vZmZzZXQpOwogCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIGFyZ3MtPnJhbmdlLmxlbmd0aCk7CiAJcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgYXJncy0+bWlubGVuZ3RoKTsKLQlwbmZzX2dldF9sYXlvdXRfc3RhdGVpZCgmc3RhdGVpZCwgTkZTX0koYXJncy0+aW5vZGUpLT5sYXlvdXQsCi0JCQkJYXJncy0+Y3R4LT5zdGF0ZSk7Ci0JcCA9IHhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsICZzdGF0ZWlkLmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKKwlwID0geGRyX2VuY29kZV9vcGFxdWVfZml4ZWQocCwgJmFyZ3MtPnN0YXRlaWQuZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOwogCSpwID0gY3B1X3RvX2JlMzIoYXJncy0+bWF4Y291bnQpOwogCiAJZHByaW50aygiJXM6IDFzdCB0eXBlOjB4JXggaW9tb2RlOiVkIG9mZjolbHUgbGVuOiVsdSBtYzolZFxuIiwKQEAgLTE4MzMsMzkzICsxODMwLDM2MiBAQAogLyoKICAqIEVuY29kZSBhbiBBQ0NFU1MgcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19hY2Nlc3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgY29uc3Qgc3RydWN0IG5mczRfYWNjZXNzYXJncyAqYXJncykKK3N0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19hY2Nlc3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJY29uc3Qgc3RydWN0IG5mczRfYWNjZXNzYXJncyAqYXJncykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CiAJCS5taW5vcnZlcnNpb24gPSBuZnM0X3hkcl9taW5vcnZlcnNpb24oJmFyZ3MtPnNlcV9hcmdzKSwKIAl9OwogCi0JeGRyX2luaXRfZW5jb2RlKCZ4ZHIsICZyZXEtPnJxX3NuZF9idWYsIHApOwotCWVuY29kZV9jb21wb3VuZF9oZHIoJnhkciwgcmVxLCAmaGRyKTsKLQllbmNvZGVfc2VxdWVuY2UoJnhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKLQllbmNvZGVfcHV0ZmgoJnhkciwgYXJncy0+ZmgsICZoZHIpOwotCWVuY29kZV9hY2Nlc3MoJnhkciwgYXJncy0+YWNjZXNzLCAmaGRyKTsKLQllbmNvZGVfZ2V0ZmF0dHIoJnhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX3NlcXVlbmNlKHhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKKwllbmNvZGVfcHV0ZmgoeGRyLCBhcmdzLT5maCwgJmhkcik7CisJZW5jb2RlX2FjY2Vzcyh4ZHIsIGFyZ3MtPmFjY2VzcywgJmhkcik7CisJZW5jb2RlX2dldGZhdHRyKHhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CiAJZW5jb2RlX25vcHMoJmhkcik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBFbmNvZGUgTE9PS1VQIHJlcXVlc3QKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9lbmNfbG9va3VwKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIGNvbnN0IHN0cnVjdCBuZnM0X2xvb2t1cF9hcmcgKmFyZ3MpCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfbG9va3VwKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCWNvbnN0IHN0cnVjdCBuZnM0X2xvb2t1cF9hcmcgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCiAJfTsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7Ci0JZW5jb2RlX3NlcXVlbmNlKCZ4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7Ci0JZW5jb2RlX3B1dGZoKCZ4ZHIsIGFyZ3MtPmRpcl9maCwgJmhkcik7Ci0JZW5jb2RlX2xvb2t1cCgmeGRyLCBhcmdzLT5uYW1lLCAmaGRyKTsKLQllbmNvZGVfZ2V0ZmgoJnhkciwgJmhkcik7Ci0JZW5jb2RlX2dldGZhdHRyKCZ4ZHIsIGFyZ3MtPmJpdG1hc2ssICZoZHIpOworCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZGlyX2ZoLCAmaGRyKTsKKwllbmNvZGVfbG9va3VwKHhkciwgYXJncy0+bmFtZSwgJmhkcik7CisJZW5jb2RlX2dldGZoKHhkciwgJmhkcik7CisJZW5jb2RlX2dldGZhdHRyKHhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CiAJZW5jb2RlX25vcHMoJmhkcik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBFbmNvZGUgTE9PS1VQX1JPT1QgcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19sb29rdXBfcm9vdChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBjb25zdCBzdHJ1Y3QgbmZzNF9sb29rdXBfcm9vdF9hcmcgKmFyZ3MpCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfbG9va3VwX3Jvb3Qoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mczRfbG9va3VwX3Jvb3RfYXJnICphcmdzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKIAkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+c2VxX2FyZ3MpLAogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9zZXF1ZW5jZSgmeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOwotCWVuY29kZV9wdXRyb290ZmgoJnhkciwgJmhkcik7Ci0JZW5jb2RlX2dldGZoKCZ4ZHIsICZoZHIpOwotCWVuY29kZV9nZXRmYXR0cigmeGRyLCBhcmdzLT5iaXRtYXNrLCAmaGRyKTsKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9wdXRyb290ZmgoeGRyLCAmaGRyKTsKKwllbmNvZGVfZ2V0ZmgoeGRyLCAmaGRyKTsKKwllbmNvZGVfZ2V0ZmF0dHIoeGRyLCBhcmdzLT5iaXRtYXNrLCAmaGRyKTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIEVuY29kZSBSRU1PVkUgcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19yZW1vdmUoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgY29uc3Qgc3RydWN0IG5mc19yZW1vdmVhcmdzICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX3JlbW92ZShzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQljb25zdCBzdHJ1Y3QgbmZzX3JlbW92ZWFyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCiAJfTsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7Ci0JZW5jb2RlX3NlcXVlbmNlKCZ4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7Ci0JZW5jb2RlX3B1dGZoKCZ4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKLQllbmNvZGVfcmVtb3ZlKCZ4ZHIsICZhcmdzLT5uYW1lLCAmaGRyKTsKLQllbmNvZGVfZ2V0ZmF0dHIoJnhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX3NlcXVlbmNlKHhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKKwllbmNvZGVfcHV0ZmgoeGRyLCBhcmdzLT5maCwgJmhkcik7CisJZW5jb2RlX3JlbW92ZSh4ZHIsICZhcmdzLT5uYW1lLCAmaGRyKTsKKwllbmNvZGVfZ2V0ZmF0dHIoeGRyLCBhcmdzLT5iaXRtYXNrLCAmaGRyKTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIEVuY29kZSBSRU5BTUUgcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19yZW5hbWUoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgY29uc3Qgc3RydWN0IG5mc19yZW5hbWVhcmdzICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX3JlbmFtZShzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQljb25zdCBzdHJ1Y3QgbmZzX3JlbmFtZWFyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCiAJfTsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7Ci0JZW5jb2RlX3NlcXVlbmNlKCZ4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7Ci0JZW5jb2RlX3B1dGZoKCZ4ZHIsIGFyZ3MtPm9sZF9kaXIsICZoZHIpOwotCWVuY29kZV9zYXZlZmgoJnhkciwgJmhkcik7Ci0JZW5jb2RlX3B1dGZoKCZ4ZHIsIGFyZ3MtPm5ld19kaXIsICZoZHIpOwotCWVuY29kZV9yZW5hbWUoJnhkciwgYXJncy0+b2xkX25hbWUsIGFyZ3MtPm5ld19uYW1lLCAmaGRyKTsKLQllbmNvZGVfZ2V0ZmF0dHIoJnhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7Ci0JZW5jb2RlX3Jlc3RvcmVmaCgmeGRyLCAmaGRyKTsKLQllbmNvZGVfZ2V0ZmF0dHIoJnhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX3NlcXVlbmNlKHhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKKwllbmNvZGVfcHV0ZmgoeGRyLCBhcmdzLT5vbGRfZGlyLCAmaGRyKTsKKwllbmNvZGVfc2F2ZWZoKHhkciwgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+bmV3X2RpciwgJmhkcik7CisJZW5jb2RlX3JlbmFtZSh4ZHIsIGFyZ3MtPm9sZF9uYW1lLCBhcmdzLT5uZXdfbmFtZSwgJmhkcik7CisJZW5jb2RlX2dldGZhdHRyKHhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CisJZW5jb2RlX3Jlc3RvcmVmaCh4ZHIsICZoZHIpOworCWVuY29kZV9nZXRmYXR0cih4ZHIsIGFyZ3MtPmJpdG1hc2ssICZoZHIpOwogCWVuY29kZV9ub3BzKCZoZHIpOwotCXJldHVybiAwOwogfQogCiAvKgogICogRW5jb2RlIExJTksgcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19saW5rKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIGNvbnN0IHN0cnVjdCBuZnM0X2xpbmtfYXJnICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX2xpbmsoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBuZnM0X2xpbmtfYXJnICphcmdzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKIAkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+c2VxX2FyZ3MpLAogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9zZXF1ZW5jZSgmeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOwotCWVuY29kZV9wdXRmaCgmeGRyLCBhcmdzLT5maCwgJmhkcik7Ci0JZW5jb2RlX3NhdmVmaCgmeGRyLCAmaGRyKTsKLQllbmNvZGVfcHV0ZmgoJnhkciwgYXJncy0+ZGlyX2ZoLCAmaGRyKTsKLQllbmNvZGVfbGluaygmeGRyLCBhcmdzLT5uYW1lLCAmaGRyKTsKLQllbmNvZGVfZ2V0ZmF0dHIoJnhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7Ci0JZW5jb2RlX3Jlc3RvcmVmaCgmeGRyLCAmaGRyKTsKLQllbmNvZGVfZ2V0ZmF0dHIoJnhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX3NlcXVlbmNlKHhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKKwllbmNvZGVfcHV0ZmgoeGRyLCBhcmdzLT5maCwgJmhkcik7CisJZW5jb2RlX3NhdmVmaCh4ZHIsICZoZHIpOworCWVuY29kZV9wdXRmaCh4ZHIsIGFyZ3MtPmRpcl9maCwgJmhkcik7CisJZW5jb2RlX2xpbmsoeGRyLCBhcmdzLT5uYW1lLCAmaGRyKTsKKwllbmNvZGVfZ2V0ZmF0dHIoeGRyLCBhcmdzLT5iaXRtYXNrLCAmaGRyKTsKKwllbmNvZGVfcmVzdG9yZWZoKHhkciwgJmhkcik7CisJZW5jb2RlX2dldGZhdHRyKHhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CiAJZW5jb2RlX25vcHMoJmhkcik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBFbmNvZGUgQ1JFQVRFIHJlcXVlc3QKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9lbmNfY3JlYXRlKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIGNvbnN0IHN0cnVjdCBuZnM0X2NyZWF0ZV9hcmcgKmFyZ3MpCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfY3JlYXRlKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCWNvbnN0IHN0cnVjdCBuZnM0X2NyZWF0ZV9hcmcgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCiAJfTsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7Ci0JZW5jb2RlX3NlcXVlbmNlKCZ4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7Ci0JZW5jb2RlX3B1dGZoKCZ4ZHIsIGFyZ3MtPmRpcl9maCwgJmhkcik7Ci0JZW5jb2RlX3NhdmVmaCgmeGRyLCAmaGRyKTsKLQllbmNvZGVfY3JlYXRlKCZ4ZHIsIGFyZ3MsICZoZHIpOwotCWVuY29kZV9nZXRmaCgmeGRyLCAmaGRyKTsKLQllbmNvZGVfZ2V0ZmF0dHIoJnhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7Ci0JZW5jb2RlX3Jlc3RvcmVmaCgmeGRyLCAmaGRyKTsKLQllbmNvZGVfZ2V0ZmF0dHIoJnhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX3NlcXVlbmNlKHhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKKwllbmNvZGVfcHV0ZmgoeGRyLCBhcmdzLT5kaXJfZmgsICZoZHIpOworCWVuY29kZV9zYXZlZmgoeGRyLCAmaGRyKTsKKwllbmNvZGVfY3JlYXRlKHhkciwgYXJncywgJmhkcik7CisJZW5jb2RlX2dldGZoKHhkciwgJmhkcik7CisJZW5jb2RlX2dldGZhdHRyKHhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CisJZW5jb2RlX3Jlc3RvcmVmaCh4ZHIsICZoZHIpOworCWVuY29kZV9nZXRmYXR0cih4ZHIsIGFyZ3MtPmJpdG1hc2ssICZoZHIpOwogCWVuY29kZV9ub3BzKCZoZHIpOwotCXJldHVybiAwOwogfQogCiAvKgogICogRW5jb2RlIFNZTUxJTksgcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19zeW1saW5rKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIGNvbnN0IHN0cnVjdCBuZnM0X2NyZWF0ZV9hcmcgKmFyZ3MpCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfc3ltbGluayhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgY29uc3Qgc3RydWN0IG5mczRfY3JlYXRlX2FyZyAqYXJncykKIHsKLQlyZXR1cm4gbmZzNF94ZHJfZW5jX2NyZWF0ZShyZXEsIHAsIGFyZ3MpOworCW5mczRfeGRyX2VuY19jcmVhdGUocmVxLCB4ZHIsIGFyZ3MpOwogfQogCiAvKgogICogRW5jb2RlIEdFVEFUVFIgcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19nZXRhdHRyKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIGNvbnN0IHN0cnVjdCBuZnM0X2dldGF0dHJfYXJnICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX2dldGF0dHIoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJIGNvbnN0IHN0cnVjdCBuZnM0X2dldGF0dHJfYXJnICphcmdzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKIAkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+c2VxX2FyZ3MpLAogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9zZXF1ZW5jZSgmeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOwotCWVuY29kZV9wdXRmaCgmeGRyLCBhcmdzLT5maCwgJmhkcik7Ci0JZW5jb2RlX2dldGZhdHRyKCZ4ZHIsIGFyZ3MtPmJpdG1hc2ssICZoZHIpOworCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZmgsICZoZHIpOworCWVuY29kZV9nZXRmYXR0cih4ZHIsIGFyZ3MtPmJpdG1hc2ssICZoZHIpOwogCWVuY29kZV9ub3BzKCZoZHIpOwotCXJldHVybiAwOwogfQogCiAvKgogICogRW5jb2RlIGEgQ0xPU0UgcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19jbG9zZShzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX2Nsb3NlYXJncyAqYXJncykKK3N0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19jbG9zZShzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgICBzdHJ1Y3QgbmZzX2Nsb3NlYXJncyAqYXJncykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CiAJCS5taW5vcnZlcnNpb24gPSBuZnM0X3hkcl9taW5vcnZlcnNpb24oJmFyZ3MtPnNlcV9hcmdzKSwKIAl9OwogCi0JeGRyX2luaXRfZW5jb2RlKCZ4ZHIsICZyZXEtPnJxX3NuZF9idWYsIHApOwotCWVuY29kZV9jb21wb3VuZF9oZHIoJnhkciwgcmVxLCAmaGRyKTsKLQllbmNvZGVfc2VxdWVuY2UoJnhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKLQllbmNvZGVfcHV0ZmgoJnhkciwgYXJncy0+ZmgsICZoZHIpOwotCWVuY29kZV9jbG9zZSgmeGRyLCBhcmdzLCAmaGRyKTsKLQllbmNvZGVfZ2V0ZmF0dHIoJnhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX3NlcXVlbmNlKHhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKKwllbmNvZGVfcHV0ZmgoeGRyLCBhcmdzLT5maCwgJmhkcik7CisJZW5jb2RlX2Nsb3NlKHhkciwgYXJncywgJmhkcik7CisJZW5jb2RlX2dldGZhdHRyKHhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CiAJZW5jb2RlX25vcHMoJmhkcik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBFbmNvZGUgYW4gT1BFTiByZXF1ZXN0CiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZW5jX29wZW4oc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19vcGVuYXJncyAqYXJncykKK3N0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19vcGVuKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgc3RydWN0IG5mc19vcGVuYXJncyAqYXJncykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CiAJCS5taW5vcnZlcnNpb24gPSBuZnM0X3hkcl9taW5vcnZlcnNpb24oJmFyZ3MtPnNlcV9hcmdzKSwKIAl9OwogCi0JeGRyX2luaXRfZW5jb2RlKCZ4ZHIsICZyZXEtPnJxX3NuZF9idWYsIHApOwotCWVuY29kZV9jb21wb3VuZF9oZHIoJnhkciwgcmVxLCAmaGRyKTsKLQllbmNvZGVfc2VxdWVuY2UoJnhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKLQllbmNvZGVfcHV0ZmgoJnhkciwgYXJncy0+ZmgsICZoZHIpOwotCWVuY29kZV9zYXZlZmgoJnhkciwgJmhkcik7Ci0JZW5jb2RlX29wZW4oJnhkciwgYXJncywgJmhkcik7Ci0JZW5jb2RlX2dldGZoKCZ4ZHIsICZoZHIpOwotCWVuY29kZV9nZXRmYXR0cigmeGRyLCBhcmdzLT5iaXRtYXNrLCAmaGRyKTsKLQllbmNvZGVfcmVzdG9yZWZoKCZ4ZHIsICZoZHIpOwotCWVuY29kZV9nZXRmYXR0cigmeGRyLCBhcmdzLT5iaXRtYXNrLCAmaGRyKTsKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9wdXRmaCh4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKKwllbmNvZGVfc2F2ZWZoKHhkciwgJmhkcik7CisJZW5jb2RlX29wZW4oeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfZ2V0ZmgoeGRyLCAmaGRyKTsKKwllbmNvZGVfZ2V0ZmF0dHIoeGRyLCBhcmdzLT5iaXRtYXNrLCAmaGRyKTsKKwllbmNvZGVfcmVzdG9yZWZoKHhkciwgJmhkcik7CisJZW5jb2RlX2dldGZhdHRyKHhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CiAJZW5jb2RlX25vcHMoJmhkcik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBFbmNvZGUgYW4gT1BFTl9DT05GSVJNIHJlcXVlc3QKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9lbmNfb3Blbl9jb25maXJtKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfb3Blbl9jb25maXJtYXJncyAqYXJncykKK3N0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19vcGVuX2NvbmZpcm0oc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgICBzdHJ1Y3QgbmZzX29wZW5fY29uZmlybWFyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubm9wcyAgID0gMCwKIAl9OwogCi0JeGRyX2luaXRfZW5jb2RlKCZ4ZHIsICZyZXEtPnJxX3NuZF9idWYsIHApOwotCWVuY29kZV9jb21wb3VuZF9oZHIoJnhkciwgcmVxLCAmaGRyKTsKLQllbmNvZGVfcHV0ZmgoJnhkciwgYXJncy0+ZmgsICZoZHIpOwotCWVuY29kZV9vcGVuX2NvbmZpcm0oJnhkciwgYXJncywgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZmgsICZoZHIpOworCWVuY29kZV9vcGVuX2NvbmZpcm0oeGRyLCBhcmdzLCAmaGRyKTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIEVuY29kZSBhbiBPUEVOIHJlcXVlc3Qgd2l0aCBubyBhdHRyaWJ1dGVzLgogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19vcGVuX25vYXR0cihzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX29wZW5hcmdzICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX29wZW5fbm9hdHRyKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgIHN0cnVjdCBuZnNfb3BlbmFyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCiAJfTsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7Ci0JZW5jb2RlX3NlcXVlbmNlKCZ4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7Ci0JZW5jb2RlX3B1dGZoKCZ4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKLQllbmNvZGVfb3BlbigmeGRyLCBhcmdzLCAmaGRyKTsKLQllbmNvZGVfZ2V0ZmF0dHIoJnhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX3NlcXVlbmNlKHhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKKwllbmNvZGVfcHV0ZmgoeGRyLCBhcmdzLT5maCwgJmhkcik7CisJZW5jb2RlX29wZW4oeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfZ2V0ZmF0dHIoeGRyLCBhcmdzLT5iaXRtYXNrLCAmaGRyKTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIEVuY29kZSBhbiBPUEVOX0RPV05HUkFERSByZXF1ZXN0CiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZW5jX29wZW5fZG93bmdyYWRlKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfY2xvc2VhcmdzICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX29wZW5fZG93bmdyYWRlKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCQlzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCQlzdHJ1Y3QgbmZzX2Nsb3NlYXJncyAqYXJncykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CiAJCS5taW5vcnZlcnNpb24gPSBuZnM0X3hkcl9taW5vcnZlcnNpb24oJmFyZ3MtPnNlcV9hcmdzKSwKIAl9OwogCi0JeGRyX2luaXRfZW5jb2RlKCZ4ZHIsICZyZXEtPnJxX3NuZF9idWYsIHApOwotCWVuY29kZV9jb21wb3VuZF9oZHIoJnhkciwgcmVxLCAmaGRyKTsKLQllbmNvZGVfc2VxdWVuY2UoJnhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKLQllbmNvZGVfcHV0ZmgoJnhkciwgYXJncy0+ZmgsICZoZHIpOwotCWVuY29kZV9vcGVuX2Rvd25ncmFkZSgmeGRyLCBhcmdzLCAmaGRyKTsKLQllbmNvZGVfZ2V0ZmF0dHIoJnhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX3NlcXVlbmNlKHhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKKwllbmNvZGVfcHV0ZmgoeGRyLCBhcmdzLT5maCwgJmhkcik7CisJZW5jb2RlX29wZW5fZG93bmdyYWRlKHhkciwgYXJncywgJmhkcik7CisJZW5jb2RlX2dldGZhdHRyKHhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CiAJZW5jb2RlX25vcHMoJmhkcik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBFbmNvZGUgYSBMT0NLIHJlcXVlc3QKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9lbmNfbG9jayhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX2xvY2tfYXJncyAqYXJncykKK3N0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19sb2NrKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgc3RydWN0IG5mc19sb2NrX2FyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCiAJfTsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7Ci0JZW5jb2RlX3NlcXVlbmNlKCZ4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7Ci0JZW5jb2RlX3B1dGZoKCZ4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKLQllbmNvZGVfbG9jaygmeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9wdXRmaCh4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKKwllbmNvZGVfbG9jayh4ZHIsIGFyZ3MsICZoZHIpOwogCWVuY29kZV9ub3BzKCZoZHIpOwotCXJldHVybiAwOwogfQogCiAvKgogICogRW5jb2RlIGEgTE9DS1QgcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19sb2NrdChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX2xvY2t0X2FyZ3MgKmFyZ3MpCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfbG9ja3Qoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgICAgc3RydWN0IG5mc19sb2NrdF9hcmdzICphcmdzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKIAkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+c2VxX2FyZ3MpLAogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9zZXF1ZW5jZSgmeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOwotCWVuY29kZV9wdXRmaCgmeGRyLCBhcmdzLT5maCwgJmhkcik7Ci0JZW5jb2RlX2xvY2t0KCZ4ZHIsIGFyZ3MsICZoZHIpOworCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZmgsICZoZHIpOworCWVuY29kZV9sb2NrdCh4ZHIsIGFyZ3MsICZoZHIpOwogCWVuY29kZV9ub3BzKCZoZHIpOwotCXJldHVybiAwOwogfQogCiAvKgogICogRW5jb2RlIGEgTE9DS1UgcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19sb2NrdShzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX2xvY2t1X2FyZ3MgKmFyZ3MpCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfbG9ja3Uoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgICAgc3RydWN0IG5mc19sb2NrdV9hcmdzICphcmdzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKIAkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+c2VxX2FyZ3MpLAogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9zZXF1ZW5jZSgmeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOwotCWVuY29kZV9wdXRmaCgmeGRyLCBhcmdzLT5maCwgJmhkcik7Ci0JZW5jb2RlX2xvY2t1KCZ4ZHIsIGFyZ3MsICZoZHIpOworCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZmgsICZoZHIpOworCWVuY29kZV9sb2NrdSh4ZHIsIGFyZ3MsICZoZHIpOwogCWVuY29kZV9ub3BzKCZoZHIpOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19yZWxlYXNlX2xvY2tvd25lcihzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3JlbGVhc2VfbG9ja293bmVyX2FyZ3MgKmFyZ3MpCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfcmVsZWFzZV9sb2Nrb3duZXIoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJCSAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJCXN0cnVjdCBuZnNfcmVsZWFzZV9sb2Nrb3duZXJfYXJncyAqYXJncykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CiAJCS5taW5vcnZlcnNpb24gPSAwLAogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9yZWxlYXNlX2xvY2tvd25lcigmeGRyLCAmYXJncy0+bG9ja19vd25lciwgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX3JlbGVhc2VfbG9ja293bmVyKHhkciwgJmFyZ3MtPmxvY2tfb3duZXIsICZoZHIpOwogCWVuY29kZV9ub3BzKCZoZHIpOwotCXJldHVybiAwOwogfQogCiAvKgogICogRW5jb2RlIGEgUkVBRExJTksgcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19yZWFkbGluayhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBjb25zdCBzdHJ1Y3QgbmZzNF9yZWFkbGluayAqYXJncykKK3N0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19yZWFkbGluayhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBuZnM0X3JlYWRsaW5rICphcmdzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKIAkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+c2VxX2FyZ3MpLAogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9zZXF1ZW5jZSgmeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOwotCWVuY29kZV9wdXRmaCgmeGRyLCBhcmdzLT5maCwgJmhkcik7Ci0JZW5jb2RlX3JlYWRsaW5rKCZ4ZHIsIGFyZ3MsIHJlcSwgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX3NlcXVlbmNlKHhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKKwllbmNvZGVfcHV0ZmgoeGRyLCBhcmdzLT5maCwgJmhkcik7CisJZW5jb2RlX3JlYWRsaW5rKHhkciwgYXJncywgcmVxLCAmaGRyKTsKIAogCXhkcl9pbmxpbmVfcGFnZXMoJnJlcS0+cnFfcmN2X2J1ZiwgaGRyLnJlcGxlbiA8PCAyLCBhcmdzLT5wYWdlcywKIAkJCWFyZ3MtPnBnYmFzZSwgYXJncy0+cGdsZW4pOwogCWVuY29kZV9ub3BzKCZoZHIpOwotCXJldHVybiAwOwogfQogCiAvKgogICogRW5jb2RlIGEgUkVBRERJUiByZXF1ZXN0CiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZW5jX3JlYWRkaXIoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgY29uc3Qgc3RydWN0IG5mczRfcmVhZGRpcl9hcmcgKmFyZ3MpCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfcmVhZGRpcihzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgY29uc3Qgc3RydWN0IG5mczRfcmVhZGRpcl9hcmcgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCiAJfTsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7Ci0JZW5jb2RlX3NlcXVlbmNlKCZ4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7Ci0JZW5jb2RlX3B1dGZoKCZ4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKLQllbmNvZGVfcmVhZGRpcigmeGRyLCBhcmdzLCByZXEsICZoZHIpOworCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZmgsICZoZHIpOworCWVuY29kZV9yZWFkZGlyKHhkciwgYXJncywgcmVxLCAmaGRyKTsKIAogCXhkcl9pbmxpbmVfcGFnZXMoJnJlcS0+cnFfcmN2X2J1ZiwgaGRyLnJlcGxlbiA8PCAyLCBhcmdzLT5wYWdlcywKIAkJCSBhcmdzLT5wZ2Jhc2UsIGFyZ3MtPmNvdW50KTsKQEAgLTIyMjcsNDI4ICsyMTkzLDM4NyBAQAogCQkJX19mdW5jX18sIGhkci5yZXBsZW4gPDwgMiwgYXJncy0+cGFnZXMsCiAJCQlhcmdzLT5wZ2Jhc2UsIGFyZ3MtPmNvdW50KTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIEVuY29kZSBhIFJFQUQgcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19yZWFkKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfcmVhZGFyZ3MgKmFyZ3MpCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfcmVhZChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgIHN0cnVjdCBuZnNfcmVhZGFyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCiAJfTsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7Ci0JZW5jb2RlX3NlcXVlbmNlKCZ4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7Ci0JZW5jb2RlX3B1dGZoKCZ4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKLQllbmNvZGVfcmVhZCgmeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9wdXRmaCh4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKKwllbmNvZGVfcmVhZCh4ZHIsIGFyZ3MsICZoZHIpOwogCiAJeGRyX2lubGluZV9wYWdlcygmcmVxLT5ycV9yY3ZfYnVmLCBoZHIucmVwbGVuIDw8IDIsCiAJCQkgYXJncy0+cGFnZXMsIGFyZ3MtPnBnYmFzZSwgYXJncy0+Y291bnQpOwogCXJlcS0+cnFfcmN2X2J1Zi5mbGFncyB8PSBYRFJCVUZfUkVBRDsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIEVuY29kZSBhbiBTRVRBVFRSIHJlcXVlc3QKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9lbmNfc2V0YXR0cihzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3NldGF0dHJhcmdzICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX3NldGF0dHIoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJIHN0cnVjdCBuZnNfc2V0YXR0cmFyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCiAJfTsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7Ci0JZW5jb2RlX3NlcXVlbmNlKCZ4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7Ci0JZW5jb2RlX3B1dGZoKCZ4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKLQllbmNvZGVfc2V0YXR0cigmeGRyLCBhcmdzLCBhcmdzLT5zZXJ2ZXIsICZoZHIpOwotCWVuY29kZV9nZXRmYXR0cigmeGRyLCBhcmdzLT5iaXRtYXNrLCAmaGRyKTsKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9wdXRmaCh4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKKwllbmNvZGVfc2V0YXR0cih4ZHIsIGFyZ3MsIGFyZ3MtPnNlcnZlciwgJmhkcik7CisJZW5jb2RlX2dldGZhdHRyKHhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CiAJZW5jb2RlX25vcHMoJmhkcik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBFbmNvZGUgYSBHRVRBQ0wgcmVxdWVzdAogICovCi1zdGF0aWMgaW50Ci1uZnM0X3hkcl9lbmNfZ2V0YWNsKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsCi0JCXN0cnVjdCBuZnNfZ2V0YWNsYXJncyAqYXJncykKK3N0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19nZXRhY2woc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJc3RydWN0IG5mc19nZXRhY2xhcmdzICphcmdzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKIAkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+c2VxX2FyZ3MpLAogCX07CiAJdWludDMyX3QgcmVwbGVuOwogCi0JeGRyX2luaXRfZW5jb2RlKCZ4ZHIsICZyZXEtPnJxX3NuZF9idWYsIHApOwotCWVuY29kZV9jb21wb3VuZF9oZHIoJnhkciwgcmVxLCAmaGRyKTsKLQllbmNvZGVfc2VxdWVuY2UoJnhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKLQllbmNvZGVfcHV0ZmgoJnhkciwgYXJncy0+ZmgsICZoZHIpOworCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZmgsICZoZHIpOwogCXJlcGxlbiA9IGhkci5yZXBsZW4gKyBvcF9kZWNvZGVfaGRyX21heHN6ICsgbmZzNF9mYXR0cl9iaXRtYXBfbWF4c3ogKyAxOwotCWVuY29kZV9nZXRhdHRyX3R3bygmeGRyLCBGQVRUUjRfV09SRDBfQUNMLCAwLCAmaGRyKTsKKwllbmNvZGVfZ2V0YXR0cl90d28oeGRyLCBGQVRUUjRfV09SRDBfQUNMLCAwLCAmaGRyKTsKIAogCXhkcl9pbmxpbmVfcGFnZXMoJnJlcS0+cnFfcmN2X2J1ZiwgcmVwbGVuIDw8IDIsCiAJCWFyZ3MtPmFjbF9wYWdlcywgYXJncy0+YWNsX3BnYmFzZSwgYXJncy0+YWNsX2xlbik7CiAJZW5jb2RlX25vcHMoJmhkcik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBFbmNvZGUgYSBXUklURSByZXF1ZXN0CiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZW5jX3dyaXRlKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfd3JpdGVhcmdzICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX3dyaXRlKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgIHN0cnVjdCBuZnNfd3JpdGVhcmdzICphcmdzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKIAkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+c2VxX2FyZ3MpLAogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9zZXF1ZW5jZSgmeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOwotCWVuY29kZV9wdXRmaCgmeGRyLCBhcmdzLT5maCwgJmhkcik7Ci0JZW5jb2RlX3dyaXRlKCZ4ZHIsIGFyZ3MsICZoZHIpOworCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZmgsICZoZHIpOworCWVuY29kZV93cml0ZSh4ZHIsIGFyZ3MsICZoZHIpOwogCXJlcS0+cnFfc25kX2J1Zi5mbGFncyB8PSBYRFJCVUZfV1JJVEU7Ci0JZW5jb2RlX2dldGZhdHRyKCZ4ZHIsIGFyZ3MtPmJpdG1hc2ssICZoZHIpOworCWVuY29kZV9nZXRmYXR0cih4ZHIsIGFyZ3MtPmJpdG1hc2ssICZoZHIpOwogCWVuY29kZV9ub3BzKCZoZHIpOwotCXJldHVybiAwOwogfQogCiAvKgogICogIGEgQ09NTUlUIHJlcXVlc3QKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9lbmNfY29tbWl0KHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfd3JpdGVhcmdzICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX2NvbW1pdChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQlzdHJ1Y3QgbmZzX3dyaXRlYXJncyAqYXJncykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CiAJCS5taW5vcnZlcnNpb24gPSBuZnM0X3hkcl9taW5vcnZlcnNpb24oJmFyZ3MtPnNlcV9hcmdzKSwKIAl9OwogCi0JeGRyX2luaXRfZW5jb2RlKCZ4ZHIsICZyZXEtPnJxX3NuZF9idWYsIHApOwotCWVuY29kZV9jb21wb3VuZF9oZHIoJnhkciwgcmVxLCAmaGRyKTsKLQllbmNvZGVfc2VxdWVuY2UoJnhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKLQllbmNvZGVfcHV0ZmgoJnhkciwgYXJncy0+ZmgsICZoZHIpOwotCWVuY29kZV9jb21taXQoJnhkciwgYXJncywgJmhkcik7Ci0JZW5jb2RlX2dldGZhdHRyKCZ4ZHIsIGFyZ3MtPmJpdG1hc2ssICZoZHIpOworCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZmgsICZoZHIpOworCWVuY29kZV9jb21taXQoeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfZ2V0ZmF0dHIoeGRyLCBhcmdzLT5iaXRtYXNrLCAmaGRyKTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIEZTSU5GTyByZXF1ZXN0CiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZW5jX2ZzaW5mbyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzNF9mc2luZm9fYXJnICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX2ZzaW5mbyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQlzdHJ1Y3QgbmZzNF9mc2luZm9fYXJnICphcmdzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKIAkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+c2VxX2FyZ3MpLAogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9zZXF1ZW5jZSgmeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOwotCWVuY29kZV9wdXRmaCgmeGRyLCBhcmdzLT5maCwgJmhkcik7Ci0JZW5jb2RlX2ZzaW5mbygmeGRyLCBhcmdzLT5iaXRtYXNrLCAmaGRyKTsKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9wdXRmaCh4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKKwllbmNvZGVfZnNpbmZvKHhkciwgYXJncy0+Yml0bWFzaywgJmhkcik7CiAJZW5jb2RlX25vcHMoJmhkcik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBhIFBBVEhDT05GIHJlcXVlc3QKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9lbmNfcGF0aGNvbmYoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgY29uc3Qgc3RydWN0IG5mczRfcGF0aGNvbmZfYXJnICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX3BhdGhjb25mKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgY29uc3Qgc3RydWN0IG5mczRfcGF0aGNvbmZfYXJnICphcmdzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKIAkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+c2VxX2FyZ3MpLAogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9zZXF1ZW5jZSgmeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOwotCWVuY29kZV9wdXRmaCgmeGRyLCBhcmdzLT5maCwgJmhkcik7Ci0JZW5jb2RlX2dldGF0dHJfb25lKCZ4ZHIsIGFyZ3MtPmJpdG1hc2tbMF0gJiBuZnM0X3BhdGhjb25mX2JpdG1hcFswXSwKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9wdXRmaCh4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKKwllbmNvZGVfZ2V0YXR0cl9vbmUoeGRyLCBhcmdzLT5iaXRtYXNrWzBdICYgbmZzNF9wYXRoY29uZl9iaXRtYXBbMF0sCiAJCQkgICAmaGRyKTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIGEgU1RBVEZTIHJlcXVlc3QKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9lbmNfc3RhdGZzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIGNvbnN0IHN0cnVjdCBuZnM0X3N0YXRmc19hcmcgKmFyZ3MpCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfc3RhdGZzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCWNvbnN0IHN0cnVjdCBuZnM0X3N0YXRmc19hcmcgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCiAJfTsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7Ci0JZW5jb2RlX3NlcXVlbmNlKCZ4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7Ci0JZW5jb2RlX3B1dGZoKCZ4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKLQllbmNvZGVfZ2V0YXR0cl90d28oJnhkciwgYXJncy0+Yml0bWFza1swXSAmIG5mczRfc3RhdGZzX2JpdG1hcFswXSwKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9wdXRmaCh4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKKwllbmNvZGVfZ2V0YXR0cl90d28oeGRyLCBhcmdzLT5iaXRtYXNrWzBdICYgbmZzNF9zdGF0ZnNfYml0bWFwWzBdLAogCQkJICAgYXJncy0+Yml0bWFza1sxXSAmIG5mczRfc3RhdGZzX2JpdG1hcFsxXSwgJmhkcik7CiAJZW5jb2RlX25vcHMoJmhkcik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBHRVRBVFRSX0JJVE1BUCByZXF1ZXN0CiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZW5jX3NlcnZlcl9jYXBzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsCi0JCQkJICAgIHN0cnVjdCBuZnM0X3NlcnZlcl9jYXBzX2FyZyAqYXJncykKK3N0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19zZXJ2ZXJfY2FwcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgICBzdHJ1Y3QgbmZzNF9zZXJ2ZXJfY2Fwc19hcmcgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCiAJfTsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7Ci0JZW5jb2RlX3NlcXVlbmNlKCZ4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7Ci0JZW5jb2RlX3B1dGZoKCZ4ZHIsIGFyZ3MtPmZoYW5kbGUsICZoZHIpOwotCWVuY29kZV9nZXRhdHRyX29uZSgmeGRyLCBGQVRUUjRfV09SRDBfU1VQUE9SVEVEX0FUVFJTfAorCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZmhhbmRsZSwgJmhkcik7CisJZW5jb2RlX2dldGF0dHJfb25lKHhkciwgRkFUVFI0X1dPUkQwX1NVUFBPUlRFRF9BVFRSU3wKIAkJCSAgIEZBVFRSNF9XT1JEMF9MSU5LX1NVUFBPUlR8CiAJCQkgICBGQVRUUjRfV09SRDBfU1lNTElOS19TVVBQT1JUfAogCQkJICAgRkFUVFI0X1dPUkQwX0FDTFNVUFBPUlQsICZoZHIpOwogCWVuY29kZV9ub3BzKCZoZHIpOwotCXJldHVybiAwOwogfQogCiAvKgogICogYSBSRU5FVyByZXF1ZXN0CiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZW5jX3JlbmV3KHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfcmVuZXcoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgICAgc3RydWN0IG5mc19jbGllbnQgKmNscCkKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CiAJCS5ub3BzCT0gMCwKIAl9OwogCi0JeGRyX2luaXRfZW5jb2RlKCZ4ZHIsICZyZXEtPnJxX3NuZF9idWYsIHApOwotCWVuY29kZV9jb21wb3VuZF9oZHIoJnhkciwgcmVxLCAmaGRyKTsKLQllbmNvZGVfcmVuZXcoJnhkciwgY2xwLCAmaGRyKTsKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfcmVuZXcoeGRyLCBjbHAsICZoZHIpOwogCWVuY29kZV9ub3BzKCZoZHIpOwotCXJldHVybiAwOwogfQogCiAvKgogICogYSBTRVRDTElFTlRJRCByZXF1ZXN0CiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZW5jX3NldGNsaWVudGlkKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnM0X3NldGNsaWVudGlkICpzYykKK3N0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19zZXRjbGllbnRpZChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgICBzdHJ1Y3QgbmZzNF9zZXRjbGllbnRpZCAqc2MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubm9wcwk9IDAsCiAJfTsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7Ci0JZW5jb2RlX3NldGNsaWVudGlkKCZ4ZHIsIHNjLCAmaGRyKTsKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2V0Y2xpZW50aWQoeGRyLCBzYywgJmhkcik7CiAJZW5jb2RlX25vcHMoJmhkcik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBhIFNFVENMSUVOVElEX0NPTkZJUk0gcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19zZXRjbGllbnRpZF9jb25maXJtKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnM0X3NldGNsaWVudGlkX3JlcyAqYXJnKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX3NldGNsaWVudGlkX2NvbmZpcm0oc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJCSAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkJICAgICBzdHJ1Y3QgbmZzNF9zZXRjbGllbnRpZF9yZXMgKmFyZykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CiAJCS5ub3BzCT0gMCwKIAl9OwogCWNvbnN0IHUzMiBsZWFzZV9iaXRtYXBbMl0gPSB7IEZBVFRSNF9XT1JEMF9MRUFTRV9USU1FLCAwIH07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9zZXRjbGllbnRpZF9jb25maXJtKCZ4ZHIsIGFyZywgJmhkcik7Ci0JZW5jb2RlX3B1dHJvb3RmaCgmeGRyLCAmaGRyKTsKLQllbmNvZGVfZnNpbmZvKCZ4ZHIsIGxlYXNlX2JpdG1hcCwgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX3NldGNsaWVudGlkX2NvbmZpcm0oeGRyLCBhcmcsICZoZHIpOworCWVuY29kZV9wdXRyb290ZmgoeGRyLCAmaGRyKTsKKwllbmNvZGVfZnNpbmZvKHhkciwgbGVhc2VfYml0bWFwLCAmaGRyKTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIERFTEVHUkVUVVJOIHJlcXVlc3QKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9lbmNfZGVsZWdyZXR1cm4oc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgY29uc3Qgc3RydWN0IG5mczRfZGVsZWdyZXR1cm5hcmdzICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX2RlbGVncmV0dXJuKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZnM0X2RlbGVncmV0dXJuYXJncyAqYXJncykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CiAJCS5taW5vcnZlcnNpb24gPSBuZnM0X3hkcl9taW5vcnZlcnNpb24oJmFyZ3MtPnNlcV9hcmdzKSwKIAl9OwogCi0JeGRyX2luaXRfZW5jb2RlKCZ4ZHIsICZyZXEtPnJxX3NuZF9idWYsIHApOwotCWVuY29kZV9jb21wb3VuZF9oZHIoJnhkciwgcmVxLCAmaGRyKTsKLQllbmNvZGVfc2VxdWVuY2UoJnhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKLQllbmNvZGVfcHV0ZmgoJnhkciwgYXJncy0+ZmhhbmRsZSwgJmhkcik7Ci0JZW5jb2RlX2RlbGVncmV0dXJuKCZ4ZHIsIGFyZ3MtPnN0YXRlaWQsICZoZHIpOwotCWVuY29kZV9nZXRmYXR0cigmeGRyLCBhcmdzLT5iaXRtYXNrLCAmaGRyKTsKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9wdXRmaCh4ZHIsIGFyZ3MtPmZoYW5kbGUsICZoZHIpOworCWVuY29kZV9kZWxlZ3JldHVybih4ZHIsIGFyZ3MtPnN0YXRlaWQsICZoZHIpOworCWVuY29kZV9nZXRmYXR0cih4ZHIsIGFyZ3MtPmJpdG1hc2ssICZoZHIpOwogCWVuY29kZV9ub3BzKCZoZHIpOwotCXJldHVybiAwOwogfQogCiAvKgogICogRW5jb2RlIEZTX0xPQ0FUSU9OUyByZXF1ZXN0CiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZW5jX2ZzX2xvY2F0aW9ucyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzNF9mc19sb2NhdGlvbnNfYXJnICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX2ZzX2xvY2F0aW9ucyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICAgIHN0cnVjdCBuZnM0X2ZzX2xvY2F0aW9uc19hcmcgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCiAJfTsKIAl1aW50MzJfdCByZXBsZW47CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9zZXF1ZW5jZSgmeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOwotCWVuY29kZV9wdXRmaCgmeGRyLCBhcmdzLT5kaXJfZmgsICZoZHIpOwotCWVuY29kZV9sb29rdXAoJnhkciwgYXJncy0+bmFtZSwgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX3NlcXVlbmNlKHhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKKwllbmNvZGVfcHV0ZmgoeGRyLCBhcmdzLT5kaXJfZmgsICZoZHIpOworCWVuY29kZV9sb29rdXAoeGRyLCBhcmdzLT5uYW1lLCAmaGRyKTsKIAlyZXBsZW4gPSBoZHIucmVwbGVuOwkvKiBnZXQgdGhlIGF0dHJpYnV0ZSBpbnRvIGFyZ3MtPnBhZ2UgKi8KLQllbmNvZGVfZnNfbG9jYXRpb25zKCZ4ZHIsIGFyZ3MtPmJpdG1hc2ssICZoZHIpOworCWVuY29kZV9mc19sb2NhdGlvbnMoeGRyLCBhcmdzLT5iaXRtYXNrLCAmaGRyKTsKIAogCXhkcl9pbmxpbmVfcGFnZXMoJnJlcS0+cnFfcmN2X2J1ZiwgcmVwbGVuIDw8IDIsICZhcmdzLT5wYWdlLAogCQkJMCwgUEFHRV9TSVpFKTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQogLyoKICAqIEVYQ0hBTkdFX0lEIHJlcXVlc3QKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9lbmNfZXhjaGFuZ2VfaWQoc3RydWN0IHJwY19ycXN0ICpyZXEsIHVpbnQzMl90ICpwLAotCQkJCSAgICBzdHJ1Y3QgbmZzNDFfZXhjaGFuZ2VfaWRfYXJncyAqYXJncykKK3N0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19leGNoYW5nZV9pZChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgICBzdHJ1Y3QgbmZzNDFfZXhjaGFuZ2VfaWRfYXJncyAqYXJncykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CiAJCS5taW5vcnZlcnNpb24gPSBhcmdzLT5jbGllbnQtPmNsX212b3BzLT5taW5vcl92ZXJzaW9uLAogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9leGNoYW5nZV9pZCgmeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfZXhjaGFuZ2VfaWQoeGRyLCBhcmdzLCAmaGRyKTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIGEgQ1JFQVRFX1NFU1NJT04gcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19jcmVhdGVfc2Vzc2lvbihzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgdWludDMyX3QgKnAsCi0JCQkJICAgICAgIHN0cnVjdCBuZnM0MV9jcmVhdGVfc2Vzc2lvbl9hcmdzICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX2NyZWF0ZV9zZXNzaW9uKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCQlzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCQlzdHJ1Y3QgbmZzNDFfY3JlYXRlX3Nlc3Npb25fYXJncyAqYXJncykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CiAJCS5taW5vcnZlcnNpb24gPSBhcmdzLT5jbGllbnQtPmNsX212b3BzLT5taW5vcl92ZXJzaW9uLAogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9jcmVhdGVfc2Vzc2lvbigmeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfY3JlYXRlX3Nlc3Npb24oeGRyLCBhcmdzLCAmaGRyKTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIGEgREVTVFJPWV9TRVNTSU9OIHJlcXVlc3QKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9lbmNfZGVzdHJveV9zZXNzaW9uKHN0cnVjdCBycGNfcnFzdCAqcmVxLCB1aW50MzJfdCAqcCwKLQkJCQkJc3RydWN0IG5mczRfc2Vzc2lvbiAqc2Vzc2lvbikKK3N0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19kZXN0cm95X3Nlc3Npb24oc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJCSBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCQkgc3RydWN0IG5mczRfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CiAJCS5taW5vcnZlcnNpb24gPSBzZXNzaW9uLT5jbHAtPmNsX212b3BzLT5taW5vcl92ZXJzaW9uLAogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9kZXN0cm95X3Nlc3Npb24oJnhkciwgc2Vzc2lvbiwgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX2Rlc3Ryb3lfc2Vzc2lvbih4ZHIsIHNlc3Npb24sICZoZHIpOwogCWVuY29kZV9ub3BzKCZoZHIpOwotCXJldHVybiAwOwogfQogCiAvKgogICogYSBTRVFVRU5DRSByZXF1ZXN0CiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZW5jX3NlcXVlbmNlKHN0cnVjdCBycGNfcnFzdCAqcmVxLCB1aW50MzJfdCAqcCwKLQkJCQkgc3RydWN0IG5mczRfc2VxdWVuY2VfYXJncyAqYXJncykKK3N0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19zZXF1ZW5jZShzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgIHN0cnVjdCBuZnM0X3NlcXVlbmNlX2FyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKGFyZ3MpLAogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9zZXF1ZW5jZSgmeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCBhcmdzLCAmaGRyKTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIGEgR0VUX0xFQVNFX1RJTUUgcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19nZXRfbGVhc2VfdGltZShzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgdWludDMyX3QgKnAsCi0JCQkJICAgICAgIHN0cnVjdCBuZnM0X2dldF9sZWFzZV90aW1lX2FyZ3MgKmFyZ3MpCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfZ2V0X2xlYXNlX3RpbWUoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJCXN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJCXN0cnVjdCBuZnM0X2dldF9sZWFzZV90aW1lX2FyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5sYV9zZXFfYXJncyksCiAJfTsKIAljb25zdCB1MzIgbGVhc2VfYml0bWFwWzJdID0geyBGQVRUUjRfV09SRDBfTEVBU0VfVElNRSwgMCB9OwogCi0JeGRyX2luaXRfZW5jb2RlKCZ4ZHIsICZyZXEtPnJxX3NuZF9idWYsIHApOwotCWVuY29kZV9jb21wb3VuZF9oZHIoJnhkciwgcmVxLCAmaGRyKTsKLQllbmNvZGVfc2VxdWVuY2UoJnhkciwgJmFyZ3MtPmxhX3NlcV9hcmdzLCAmaGRyKTsKLQllbmNvZGVfcHV0cm9vdGZoKCZ4ZHIsICZoZHIpOwotCWVuY29kZV9mc2luZm8oJnhkciwgbGVhc2VfYml0bWFwLCAmaGRyKTsKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+bGFfc2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9wdXRyb290ZmgoeGRyLCAmaGRyKTsKKwllbmNvZGVfZnNpbmZvKHhkciwgbGVhc2VfYml0bWFwLCAmaGRyKTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIGEgUkVDTEFJTV9DT01QTEVURSByZXF1ZXN0CiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZW5jX3JlY2xhaW1fY29tcGxldGUoc3RydWN0IHJwY19ycXN0ICpyZXEsIHVpbnQzMl90ICpwLAotCQkJCSAgICAgc3RydWN0IG5mczQxX3JlY2xhaW1fY29tcGxldGVfYXJncyAqYXJncykKK3N0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19yZWNsYWltX2NvbXBsZXRlKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCQkgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJc3RydWN0IG5mczQxX3JlY2xhaW1fY29tcGxldGVfYXJncyAqYXJncykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CiAJCS5taW5vcnZlcnNpb24gPSBuZnM0X3hkcl9taW5vcnZlcnNpb24oJmFyZ3MtPnNlcV9hcmdzKQogCX07CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOwotCWVuY29kZV9zZXF1ZW5jZSgmeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOwotCWVuY29kZV9yZWNsYWltX2NvbXBsZXRlKCZ4ZHIsIGFyZ3MsICZoZHIpOworCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3JlY2xhaW1fY29tcGxldGUoeGRyLCBhcmdzLCAmaGRyKTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIEVuY29kZSBHRVRERVZJQ0VJTkZPIHJlcXVlc3QKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9lbmNfZ2V0ZGV2aWNlaW5mbyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgdWludDMyX3QgKnAsCi0JCQkJICAgICAgc3RydWN0IG5mczRfZ2V0ZGV2aWNlaW5mb19hcmdzICphcmdzKQorc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX2dldGRldmljZWluZm8oc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgICAgIHN0cnVjdCBuZnM0X2dldGRldmljZWluZm9fYXJncyAqYXJncykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CiAJCS5taW5vcnZlcnNpb24gPSBuZnM0X3hkcl9taW5vcnZlcnNpb24oJmFyZ3MtPnNlcV9hcmdzKSwKIAl9OwogCi0JeGRyX2luaXRfZW5jb2RlKCZ4ZHIsICZyZXEtPnJxX3NuZF9idWYsIHApOwotCWVuY29kZV9jb21wb3VuZF9oZHIoJnhkciwgcmVxLCAmaGRyKTsKLQllbmNvZGVfc2VxdWVuY2UoJnhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKLQllbmNvZGVfZ2V0ZGV2aWNlaW5mbygmeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9nZXRkZXZpY2VpbmZvKHhkciwgYXJncywgJmhkcik7CiAKIAkvKiBzZXQgdXAgcmVwbHkga3ZlYy4gU3VidHJhY3Qgbm90aWZpY2F0aW9uIGJpdG1hcCBtYXggc2l6ZSAoMikKIAkgKiBzbyB0aGF0IG5vdGlmaWNhdGlvbiBiaXRtYXAgaXMgcHV0IGluIHhkcl9idWYgdGFpbCAqLwpAQCAtMjY1NywyNyArMjU4MiwyNCBAQAogCQkJIGFyZ3MtPnBkZXYtPnBnbGVuKTsKIAogCWVuY29kZV9ub3BzKCZoZHIpOwotCXJldHVybiAwOwogfQogCiAvKgogICogIEVuY29kZSBMQVlPVVRHRVQgcmVxdWVzdAogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2VuY19sYXlvdXRnZXQoc3RydWN0IHJwY19ycXN0ICpyZXEsIHVpbnQzMl90ICpwLAotCQkJCSAgc3RydWN0IG5mczRfbGF5b3V0Z2V0X2FyZ3MgKmFyZ3MpCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfbGF5b3V0Z2V0KHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgc3RydWN0IG5mczRfbGF5b3V0Z2V0X2FyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewogCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCiAJfTsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7Ci0JZW5jb2RlX3NlcXVlbmNlKCZ4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7Ci0JZW5jb2RlX3B1dGZoKCZ4ZHIsIE5GU19GSChhcmdzLT5pbm9kZSksICZoZHIpOwotCWVuY29kZV9sYXlvdXRnZXQoJnhkciwgYXJncywgJmhkcik7CisJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CisJZW5jb2RlX3NlcXVlbmNlKHhkciwgJmFyZ3MtPnNlcV9hcmdzLCAmaGRyKTsKKwllbmNvZGVfcHV0ZmgoeGRyLCBORlNfRkgoYXJncy0+aW5vZGUpLCAmaGRyKTsKKwllbmNvZGVfbGF5b3V0Z2V0KHhkciwgYXJncywgJmhkcik7CiAJZW5jb2RlX25vcHMoJmhkcik7Ci0JcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKQEAgLTQ0NzUsNyArNDM5Nyw3IEBACiAJCWdvdG8gb3V0X292ZXJmbG93OwogCWVvZiA9IGJlMzJfdG9fY3B1cChwKyspOwogCWNvdW50ID0gYmUzMl90b19jcHVwKHApOwotCWhkcmxlbiA9ICh1OCAqKSBwIC0gKHU4ICopIGlvdi0+aW92X2Jhc2U7CisJaGRybGVuID0gKHU4ICopIHhkci0+cCAtICh1OCAqKSBpb3YtPmlvdl9iYXNlOwogCXJlY3ZkID0gcmVxLT5ycV9yY3ZfYnVmLmxlbiAtIGhkcmxlbjsKIAlpZiAoY291bnQgPiByZWN2ZCkgewogCQlkcHJpbnRrKCJORlM6IHNlcnZlciBjaGVhdGluZyBpbiByZWFkIHJlcGx5OiAiCkBAIC01MDAwLDcgKzQ5MjIsNyBAQAogCQlnb3RvIG91dF9vdmVyZmxvdzsKIAlsZW4gPSBiZTMyX3RvX2NwdXAocCk7CiAJaWYgKGxlbikgewotCQlpbnQgaTsKKwkJdWludDMyX3QgaTsKIAogCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0ICogbGVuKTsKIAkJaWYgKHVubGlrZWx5KCFwKSkKQEAgLTUwOTAsMjYgKzUwMTIsMjYgQEAKIC8qCiAgKiBEZWNvZGUgT1BFTl9ET1dOR1JBREUgcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfb3Blbl9kb3duZ3JhZGUoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX2Nsb3NlcmVzICpyZXMpCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY19vcGVuX2Rvd25ncmFkZShzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLAorCQkJCSAgICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICAgICBzdHJ1Y3QgbmZzX2Nsb3NlcmVzICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoJnhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOworCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoJnhkcik7CisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX29wZW5fZG93bmdyYWRlKCZ4ZHIsIHJlcyk7CisJc3RhdHVzID0gZGVjb2RlX29wZW5fZG93bmdyYWRlKHhkciwgcmVzKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0OwotCWRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlciwKKwlkZWNvZGVfZ2V0ZmF0dHIoeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlciwKIAkJCSFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNTExOCwyNiArNTA0MCwyNSBAQAogLyoKICAqIERlY29kZSBBQ0NFU1MgcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfYWNjZXNzKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwgc3RydWN0IG5mczRfYWNjZXNzcmVzICpyZXMpCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY19hY2Nlc3Moc3RydWN0IHJwY19ycXN0ICpycXN0cCwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgICBzdHJ1Y3QgbmZzNF9hY2Nlc3NyZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSgmeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9wdXRmaCgmeGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoeGRyKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9hY2Nlc3MoJnhkciwgcmVzKTsKKwlzdGF0dXMgPSBkZWNvZGVfYWNjZXNzKHhkciwgcmVzKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0OwotCWRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlciwKKwlkZWNvZGVfZ2V0ZmF0dHIoeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlciwKIAkJCSFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNTE0NiwyNiArNTA2NywyOCBAQAogLyoKICAqIERlY29kZSBMT09LVVAgcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfbG9va3VwKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwgc3RydWN0IG5mczRfbG9va3VwX3JlcyAqcmVzKQorc3RhdGljIGludCBuZnM0X3hkcl9kZWNfbG9va3VwKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgICAgc3RydWN0IG5mczRfbG9va3VwX3JlcyAqcmVzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkcjsKIAlpbnQgc3RhdHVzOwogCi0JeGRyX2luaXRfZGVjb2RlKCZ4ZHIsICZycXN0cC0+cnFfcmN2X2J1ZiwgcCk7Ci0Jc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKHhkciwgJmhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKCZ4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKKwlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoJnhkcikpICE9IDApCisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CisJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfbG9va3VwKCZ4ZHIpKSAhPSAwKQorCXN0YXR1cyA9IGRlY29kZV9sb29rdXAoeGRyKTsKKwlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9nZXRmaCgmeGRyLCByZXMtPmZoKSkgIT0gMCkKKwlzdGF0dXMgPSBkZWNvZGVfZ2V0ZmgoeGRyLCByZXMtPmZoKTsKKwlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIKKwlzdGF0dXMgPSBkZWNvZGVfZ2V0ZmF0dHIoeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlcgogCQkJLCFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNTE3NCwyMyArNTA5NywyNSBAQAogLyoKICAqIERlY29kZSBMT09LVVBfUk9PVCByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19sb29rdXBfcm9vdChzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnM0X2xvb2t1cF9yZXMgKnJlcykKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2xvb2t1cF9yb290KHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsCisJCQkJICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgIHN0cnVjdCBuZnM0X2xvb2t1cF9yZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSgmeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCWlmICgoc3RhdHVzID0gZGVjb2RlX3B1dHJvb3RmaCgmeGRyKSkgIT0gMCkKKwlzdGF0dXMgPSBkZWNvZGVfcHV0cm9vdGZoKHhkcik7CisJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfZ2V0ZmgoJnhkciwgcmVzLT5maCkpID09IDApCi0JCXN0YXR1cyA9IGRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlciwKKwlzdGF0dXMgPSBkZWNvZGVfZ2V0ZmgoeGRyLCByZXMtPmZoKTsKKwlpZiAoc3RhdHVzID09IDApCisJCXN0YXR1cyA9IGRlY29kZV9nZXRmYXR0cih4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyLAogCQkJCSFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNTE5OSwyNCArNTEyNCwyNSBAQAogLyoKICAqIERlY29kZSBSRU1PVkUgcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfcmVtb3ZlKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19yZW1vdmVyZXMgKnJlcykKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX3JlbW92ZShzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgIHN0cnVjdCBuZnNfcmVtb3ZlcmVzICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoJnhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOworCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9wdXRmaCgmeGRyKSkgIT0gMCkKKwlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoeGRyKTsKKwlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9yZW1vdmUoJnhkciwgJnJlcy0+Y2luZm8pKSAhPSAwKQorCXN0YXR1cyA9IGRlY29kZV9yZW1vdmUoeGRyLCAmcmVzLT5jaW5mbyk7CisJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0JZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+ZGlyX2F0dHIsIHJlcy0+c2VydmVyLAorCWRlY29kZV9nZXRmYXR0cih4ZHIsIHJlcy0+ZGlyX2F0dHIsIHJlcy0+c2VydmVyLAogCQkJIVJQQ19JU19BU1lOQyhycXN0cC0+cnFfdGFzaykpOwogb3V0OgogCXJldHVybiBzdGF0dXM7CkBAIC01MjI1LDM0ICs1MTUxLDM4IEBACiAvKgogICogRGVjb2RlIFJFTkFNRSByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19yZW5hbWUoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3JlbmFtZXJlcyAqcmVzKQorc3RhdGljIGludCBuZnM0X3hkcl9kZWNfcmVuYW1lKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgICAgc3RydWN0IG5mc19yZW5hbWVyZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSgmeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCWlmICgoc3RhdHVzID0gZGVjb2RlX3B1dGZoKCZ4ZHIpKSAhPSAwKQorCXN0YXR1cyA9IGRlY29kZV9wdXRmaCh4ZHIpOworCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCWlmICgoc3RhdHVzID0gZGVjb2RlX3NhdmVmaCgmeGRyKSkgIT0gMCkKKwlzdGF0dXMgPSBkZWNvZGVfc2F2ZWZoKHhkcik7CisJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoJnhkcikpICE9IDApCisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CisJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfcmVuYW1lKCZ4ZHIsICZyZXMtPm9sZF9jaW5mbywgJnJlcy0+bmV3X2NpbmZvKSkgIT0gMCkKKwlzdGF0dXMgPSBkZWNvZGVfcmVuYW1lKHhkciwgJnJlcy0+b2xkX2NpbmZvLCAmcmVzLT5uZXdfY2luZm8pOworCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwogCS8qIEN1cnJlbnQgRkggaXMgdGFyZ2V0IGRpcmVjdG9yeSAqLwotCWlmIChkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5uZXdfZmF0dHIsIHJlcy0+c2VydmVyLAorCWlmIChkZWNvZGVfZ2V0ZmF0dHIoeGRyLCByZXMtPm5ld19mYXR0ciwgcmVzLT5zZXJ2ZXIsCiAJCQkJIVJQQ19JU19BU1lOQyhycXN0cC0+cnFfdGFzaykpICE9IDApCiAJCWdvdG8gb3V0OwotCWlmICgoc3RhdHVzID0gZGVjb2RlX3Jlc3RvcmVmaCgmeGRyKSkgIT0gMCkKKwlzdGF0dXMgPSBkZWNvZGVfcmVzdG9yZWZoKHhkcik7CisJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0JZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+b2xkX2ZhdHRyLCByZXMtPnNlcnZlciwKKwlkZWNvZGVfZ2V0ZmF0dHIoeGRyLCByZXMtPm9sZF9mYXR0ciwgcmVzLT5zZXJ2ZXIsCiAJCQkhUlBDX0lTX0FTWU5DKHJxc3RwLT5ycV90YXNrKSk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKQEAgLTUyNjEsMzcgKzUxOTEsNDEgQEAKIC8qCiAgKiBEZWNvZGUgTElOSyByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19saW5rKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwgc3RydWN0IG5mczRfbGlua19yZXMgKnJlcykKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2xpbmsoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgc3RydWN0IG5mczRfbGlua19yZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSgmeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCWlmICgoc3RhdHVzID0gZGVjb2RlX3B1dGZoKCZ4ZHIpKSAhPSAwKQorCXN0YXR1cyA9IGRlY29kZV9wdXRmaCh4ZHIpOworCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCWlmICgoc3RhdHVzID0gZGVjb2RlX3NhdmVmaCgmeGRyKSkgIT0gMCkKKwlzdGF0dXMgPSBkZWNvZGVfc2F2ZWZoKHhkcik7CisJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoJnhkcikpICE9IDApCisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CisJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfbGluaygmeGRyLCAmcmVzLT5jaW5mbykpICE9IDApCisJc3RhdHVzID0gZGVjb2RlX2xpbmsoeGRyLCAmcmVzLT5jaW5mbyk7CisJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7CiAJLyoKIAkgKiBOb3RlIG9yZGVyOiBPUF9MSU5LIGxlYXZlcyB0aGUgZGlyZWN0b3J5IGFzIHRoZSBjdXJyZW50CiAJICogICAgICAgICAgICAgZmlsZWhhbmRsZS4KIAkgKi8KLQlpZiAoZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+ZGlyX2F0dHIsIHJlcy0+c2VydmVyLAorCWlmIChkZWNvZGVfZ2V0ZmF0dHIoeGRyLCByZXMtPmRpcl9hdHRyLCByZXMtPnNlcnZlciwKIAkJCQkhUlBDX0lTX0FTWU5DKHJxc3RwLT5ycV90YXNrKSkgIT0gMCkKIAkJZ290byBvdXQ7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfcmVzdG9yZWZoKCZ4ZHIpKSAhPSAwKQorCXN0YXR1cyA9IGRlY29kZV9yZXN0b3JlZmgoeGRyKTsKKwlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIsCisJZGVjb2RlX2dldGZhdHRyKHhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIsCiAJCQkhUlBDX0lTX0FTWU5DKHJxc3RwLT5ycV90YXNrKSk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKQEAgLTUzMDAsMzMgKzUyMzQsMzcgQEAKIC8qCiAgKiBEZWNvZGUgQ1JFQVRFIHJlc3BvbnNlCiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2NyZWF0ZShzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnM0X2NyZWF0ZV9yZXMgKnJlcykKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2NyZWF0ZShzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgIHN0cnVjdCBuZnM0X2NyZWF0ZV9yZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSgmeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCWlmICgoc3RhdHVzID0gZGVjb2RlX3B1dGZoKCZ4ZHIpKSAhPSAwKQorCXN0YXR1cyA9IGRlY29kZV9wdXRmaCh4ZHIpOworCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCWlmICgoc3RhdHVzID0gZGVjb2RlX3NhdmVmaCgmeGRyKSkgIT0gMCkKKwlzdGF0dXMgPSBkZWNvZGVfc2F2ZWZoKHhkcik7CisJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfY3JlYXRlKCZ4ZHIsJnJlcy0+ZGlyX2NpbmZvKSkgIT0gMCkKKwlzdGF0dXMgPSBkZWNvZGVfY3JlYXRlKHhkciwgJnJlcy0+ZGlyX2NpbmZvKTsKKwlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9nZXRmaCgmeGRyLCByZXMtPmZoKSkgIT0gMCkKKwlzdGF0dXMgPSBkZWNvZGVfZ2V0ZmgoeGRyLCByZXMtPmZoKTsKKwlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlpZiAoZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyLAorCWlmIChkZWNvZGVfZ2V0ZmF0dHIoeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlciwKIAkJCQkhUlBDX0lTX0FTWU5DKHJxc3RwLT5ycV90YXNrKSkgIT0gMCkKIAkJZ290byBvdXQ7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfcmVzdG9yZWZoKCZ4ZHIpKSAhPSAwKQorCXN0YXR1cyA9IGRlY29kZV9yZXN0b3JlZmgoeGRyKTsKKwlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5kaXJfZmF0dHIsIHJlcy0+c2VydmVyLAorCWRlY29kZV9nZXRmYXR0cih4ZHIsIHJlcy0+ZGlyX2ZhdHRyLCByZXMtPnNlcnZlciwKIAkJCSFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNTMzNSwzMSArNTI3MywzMSBAQAogLyoKICAqIERlY29kZSBTWU1MSU5LIHJlc3BvbnNlCiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX3N5bWxpbmsoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzNF9jcmVhdGVfcmVzICpyZXMpCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY19zeW1saW5rKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJc3RydWN0IG5mczRfY3JlYXRlX3JlcyAqcmVzKQogewotCXJldHVybiBuZnM0X3hkcl9kZWNfY3JlYXRlKHJxc3RwLCBwLCByZXMpOworCXJldHVybiBuZnM0X3hkcl9kZWNfY3JlYXRlKHJxc3RwLCB4ZHIsIHJlcyk7CiB9CiAKIC8qCiAgKiBEZWNvZGUgR0VUQVRUUiByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19nZXRhdHRyKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwgc3RydWN0IG5mczRfZ2V0YXR0cl9yZXMgKnJlcykKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2dldGF0dHIoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQlzdHJ1Y3QgbmZzNF9nZXRhdHRyX3JlcyAqcmVzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkcjsKIAlpbnQgc3RhdHVzOwogCi0JeGRyX2luaXRfZGVjb2RlKCZ4ZHIsICZycXN0cC0+cnFfcmN2X2J1ZiwgcCk7Ci0Jc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKHhkciwgJmhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKCZ4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKKwlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3B1dGZoKCZ4ZHIpOworCXN0YXR1cyA9IGRlY29kZV9wdXRmaCh4ZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlciwKKwlzdGF0dXMgPSBkZWNvZGVfZ2V0ZmF0dHIoeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlciwKIAkJCSFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNTM2OCw0NiArNTMwNiw0MCBAQAogLyoKICAqIEVuY29kZSBhbiBTRVRBQ0wgcmVxdWVzdAogICovCi1zdGF0aWMgaW50Ci1uZnM0X3hkcl9lbmNfc2V0YWNsKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfc2V0YWNsYXJncyAqYXJncykKK3N0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19zZXRhY2woc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJc3RydWN0IG5mc19zZXRhY2xhcmdzICphcmdzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKIAkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+c2VxX2FyZ3MpLAogCX07Ci0JaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7Ci0JZW5jb2RlX3NlcXVlbmNlKCZ4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7Ci0JZW5jb2RlX3B1dGZoKCZ4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKLQlzdGF0dXMgPSBlbmNvZGVfc2V0YWNsKCZ4ZHIsIGFyZ3MsICZoZHIpOworCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZmgsICZoZHIpOworCWVuY29kZV9zZXRhY2woeGRyLCBhcmdzLCAmaGRyKTsKIAllbmNvZGVfbm9wcygmaGRyKTsKLQlyZXR1cm4gc3RhdHVzOwogfQogCiAvKgogICogRGVjb2RlIFNFVEFDTCByZXNwb25zZQogICovCiBzdGF0aWMgaW50Ci1uZnM0X3hkcl9kZWNfc2V0YWNsKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwKK25mczRfeGRyX2RlY19zZXRhY2woc3RydWN0IHJwY19ycXN0ICpycXN0cCwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKIAkJICAgIHN0cnVjdCBuZnNfc2V0YWNscmVzICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoJnhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOworCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoJnhkcik7CisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3NldGF0dHIoJnhkcik7CisJc3RhdHVzID0gZGVjb2RlX3NldGF0dHIoeGRyKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNTQxNiwyNCArNTM0OCwyMiBAQAogICogRGVjb2RlIEdFVEFDTCByZXNwb25zZQogICovCiBzdGF0aWMgaW50Ci1uZnM0X3hkcl9kZWNfZ2V0YWNsKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwKK25mczRfeGRyX2RlY19nZXRhY2woc3RydWN0IHJwY19ycXN0ICpycXN0cCwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKIAkJICAgIHN0cnVjdCBuZnNfZ2V0YWNscmVzICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoJnhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOworCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoJnhkcik7CisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX2dldGFjbCgmeGRyLCBycXN0cCwgJnJlcy0+YWNsX2xlbik7CisJc3RhdHVzID0gZGVjb2RlX2dldGFjbCh4ZHIsIHJxc3RwLCAmcmVzLT5hY2xfbGVuKTsKIAogb3V0OgogCXJldHVybiBzdGF0dXM7CkBAIC01NDQyLDIzICs1MzcyLDIyIEBACiAvKgogICogRGVjb2RlIENMT1NFIHJlc3BvbnNlCiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2Nsb3NlKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19jbG9zZXJlcyAqcmVzKQorc3RhdGljIGludCBuZnM0X3hkcl9kZWNfY2xvc2Uoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgIHN0cnVjdCBuZnNfY2xvc2VyZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSgmeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9wdXRmaCgmeGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoeGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfY2xvc2UoJnhkciwgcmVzKTsKKwlzdGF0dXMgPSBkZWNvZGVfY2xvc2UoeGRyLCByZXMpOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJZ290byBvdXQ7CiAJLyoKQEAgLTU0NjcsNyArNTM5Niw3IEBACiAJICogCWFuIEVTVEFMRSBlcnJvci4gU2hvdWxkbid0IGJlIGEgcHJvYmxlbSwKIAkgKiAJdGhvdWdoLCBzaW5jZSBmYXR0ci0+dmFsaWQgd2lsbCByZW1haW4gdW5zZXQuCiAJICovCi0JZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyLAorCWRlY29kZV9nZXRmYXR0cih4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyLAogCQkJIVJQQ19JU19BU1lOQyhycXN0cC0+cnFfdGFzaykpOwogb3V0OgogCXJldHVybiBzdGF0dXM7CkBAIC01NDc2LDM2ICs1NDA1LDM1IEBACiAvKgogICogRGVjb2RlIE9QRU4gcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfb3BlbihzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfb3BlbnJlcyAqcmVzKQorc3RhdGljIGludCBuZnM0X3hkcl9kZWNfb3BlbihzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICBzdHJ1Y3QgbmZzX29wZW5yZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSgmeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9wdXRmaCgmeGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoeGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfc2F2ZWZoKCZ4ZHIpOworCXN0YXR1cyA9IGRlY29kZV9zYXZlZmgoeGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfb3BlbigmeGRyLCByZXMpOworCXN0YXR1cyA9IGRlY29kZV9vcGVuKHhkciwgcmVzKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlpZiAoZGVjb2RlX2dldGZoKCZ4ZHIsICZyZXMtPmZoKSAhPSAwKQorCWlmIChkZWNvZGVfZ2V0ZmgoeGRyLCAmcmVzLT5maCkgIT0gMCkKIAkJZ290byBvdXQ7Ci0JaWYgKGRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZfYXR0ciwgcmVzLT5zZXJ2ZXIsCisJaWYgKGRlY29kZV9nZXRmYXR0cih4ZHIsIHJlcy0+Zl9hdHRyLCByZXMtPnNlcnZlciwKIAkJCQkhUlBDX0lTX0FTWU5DKHJxc3RwLT5ycV90YXNrKSkgIT0gMCkKIAkJZ290byBvdXQ7Ci0JaWYgKGRlY29kZV9yZXN0b3JlZmgoJnhkcikgIT0gMCkKKwlpZiAoZGVjb2RlX3Jlc3RvcmVmaCh4ZHIpICE9IDApCiAJCWdvdG8gb3V0OwotCWRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmRpcl9hdHRyLCByZXMtPnNlcnZlciwKKwlkZWNvZGVfZ2V0ZmF0dHIoeGRyLCByZXMtPmRpcl9hdHRyLCByZXMtPnNlcnZlciwKIAkJCSFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNTUxNCwyMCArNTQ0MiwyMCBAQAogLyoKICAqIERlY29kZSBPUEVOX0NPTkZJUk0gcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfb3Blbl9jb25maXJtKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19vcGVuX2NvbmZpcm1yZXMgKnJlcykKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX29wZW5fY29uZmlybShzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLAorCQkJCSAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgIHN0cnVjdCBuZnNfb3Blbl9jb25maXJtcmVzICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoJnhkcik7CisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX29wZW5fY29uZmlybSgmeGRyLCByZXMpOworCXN0YXR1cyA9IGRlY29kZV9vcGVuX2NvbmZpcm0oeGRyLCByZXMpOwogb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CkBAIC01NTM1LDI2ICs1NDYzLDI2IEBACiAvKgogICogRGVjb2RlIE9QRU4gcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfb3Blbl9ub2F0dHIoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX29wZW5yZXMgKnJlcykKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX29wZW5fbm9hdHRyKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsCisJCQkJICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgIHN0cnVjdCBuZnNfb3BlbnJlcyAqcmVzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkcjsKIAlpbnQgc3RhdHVzOwogCi0JeGRyX2luaXRfZGVjb2RlKCZ4ZHIsICZycXN0cC0+cnFfcmN2X2J1ZiwgcCk7Ci0Jc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKHhkciwgJmhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKCZ4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKKwlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3B1dGZoKCZ4ZHIpOworCXN0YXR1cyA9IGRlY29kZV9wdXRmaCh4ZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9vcGVuKCZ4ZHIsIHJlcyk7CisJc3RhdHVzID0gZGVjb2RlX29wZW4oeGRyLCByZXMpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCWRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZfYXR0ciwgcmVzLT5zZXJ2ZXIsCisJZGVjb2RlX2dldGZhdHRyKHhkciwgcmVzLT5mX2F0dHIsIHJlcy0+c2VydmVyLAogCQkJIVJQQ19JU19BU1lOQyhycXN0cC0+cnFfdGFzaykpOwogb3V0OgogCXJldHVybiBzdGF0dXM7CkBAIC01NTYzLDI2ICs1NDkxLDI2IEBACiAvKgogICogRGVjb2RlIFNFVEFUVFIgcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfc2V0YXR0cihzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfc2V0YXR0cnJlcyAqcmVzKQorc3RhdGljIGludCBuZnM0X3hkcl9kZWNfc2V0YXR0cihzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLAorCQkJCXN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJc3RydWN0IG5mc19zZXRhdHRycmVzICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoJnhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOworCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoJnhkcik7CisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3NldGF0dHIoJnhkcik7CisJc3RhdHVzID0gZGVjb2RlX3NldGF0dHIoeGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIsCisJZGVjb2RlX2dldGZhdHRyKHhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIsCiAJCQkhUlBDX0lTX0FTWU5DKHJxc3RwLT5ycV90YXNrKSk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKQEAgLTU1OTEsMjMgKzU1MTksMjIgQEAKIC8qCiAgKiBEZWNvZGUgTE9DSyByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19sb2NrKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwgc3RydWN0IG5mc19sb2NrX3JlcyAqcmVzKQorc3RhdGljIGludCBuZnM0X3hkcl9kZWNfbG9jayhzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICBzdHJ1Y3QgbmZzX2xvY2tfcmVzICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoJnhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOworCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoJnhkcik7CisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX2xvY2soJnhkciwgcmVzKTsKKwlzdGF0dXMgPSBkZWNvZGVfbG9jayh4ZHIsIHJlcyk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTU2MTUsMjMgKzU1NDIsMjIgQEAKIC8qCiAgKiBEZWNvZGUgTE9DS1QgcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfbG9ja3Qoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX2xvY2t0X3JlcyAqcmVzKQorc3RhdGljIGludCBuZnM0X3hkcl9kZWNfbG9ja3Qoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgIHN0cnVjdCBuZnNfbG9ja3RfcmVzICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoJnhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOworCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoJnhkcik7CisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX2xvY2t0KCZ4ZHIsIHJlcyk7CisJc3RhdHVzID0gZGVjb2RlX2xvY2t0KHhkciwgcmVzKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNTYzOSw2MSArNTU2NSw1OCBAQAogLyoKICAqIERlY29kZSBMT0NLVSByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19sb2NrdShzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfbG9ja3VfcmVzICpyZXMpCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY19sb2NrdShzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgc3RydWN0IG5mc19sb2NrdV9yZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSgmeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9wdXRmaCgmeGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoeGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfbG9ja3UoJnhkciwgcmVzKTsKKwlzdGF0dXMgPSBkZWNvZGVfbG9ja3UoeGRyLCByZXMpOwogb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX3JlbGVhc2VfbG9ja293bmVyKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwgdm9pZCAqZHVtbXkpCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY19yZWxlYXNlX2xvY2tvd25lcihzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLAorCQkJCQkgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHZvaWQgKmR1bW15KQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkcjsKIAlpbnQgc3RhdHVzOwogCi0JeGRyX2luaXRfZGVjb2RlKCZ4ZHIsICZycXN0cC0+cnFfcmN2X2J1ZiwgcCk7Ci0Jc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKHhkciwgJmhkcik7CiAJaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGRlY29kZV9yZWxlYXNlX2xvY2tvd25lcigmeGRyKTsKKwkJc3RhdHVzID0gZGVjb2RlX3JlbGVhc2VfbG9ja293bmVyKHhkcik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKICAqIERlY29kZSBSRUFETElOSyByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19yZWFkbGluayhzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY19yZWFkbGluayhzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLAorCQkJCSBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAogCQkJCSBzdHJ1Y3QgbmZzNF9yZWFkbGlua19yZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSgmeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9wdXRmaCgmeGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoeGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfcmVhZGxpbmsoJnhkciwgcnFzdHApOworCXN0YXR1cyA9IGRlY29kZV9yZWFkbGluayh4ZHIsIHJxc3RwKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNTcwMSwyMyArNTYyNCwyMiBAQAogLyoKICAqIERlY29kZSBSRUFERElSIHJlc3BvbnNlCiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX3JlYWRkaXIoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzNF9yZWFkZGlyX3JlcyAqcmVzKQorc3RhdGljIGludCBuZnM0X3hkcl9kZWNfcmVhZGRpcihzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCXN0cnVjdCBuZnM0X3JlYWRkaXJfcmVzICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoJnhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOworCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoJnhkcik7CisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3JlYWRkaXIoJnhkciwgcnFzdHAsIHJlcyk7CisJc3RhdHVzID0gZGVjb2RlX3JlYWRkaXIoeGRyLCBycXN0cCwgcmVzKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNTcyNSwyMyArNTY0NywyMiBAQAogLyoKICAqIERlY29kZSBSZWFkIHJlc3BvbnNlCiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX3JlYWQoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3JlYWRyZXMgKnJlcykKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX3JlYWQoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgc3RydWN0IG5mc19yZWFkcmVzICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoJnhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOworCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoJnhkcik7CisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3JlYWQoJnhkciwgcnFzdHAsIHJlcyk7CisJc3RhdHVzID0gZGVjb2RlX3JlYWQoeGRyLCBycXN0cCwgcmVzKTsKIAlpZiAoIXN0YXR1cykKIAkJc3RhdHVzID0gcmVzLT5jb3VudDsKIG91dDoKQEAgLTU3NTEsMjYgKzU2NzIsMjUgQEAKIC8qCiAgKiBEZWNvZGUgV1JJVEUgcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfd3JpdGUoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3dyaXRlcmVzICpyZXMpCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY193cml0ZShzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICAgc3RydWN0IG5mc193cml0ZXJlcyAqcmVzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkcjsKIAlpbnQgc3RhdHVzOwogCi0JeGRyX2luaXRfZGVjb2RlKCZ4ZHIsICZycXN0cC0+cnFfcmN2X2J1ZiwgcCk7Ci0Jc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKHhkciwgJmhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKCZ4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKKwlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3B1dGZoKCZ4ZHIpOworCXN0YXR1cyA9IGRlY29kZV9wdXRmaCh4ZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV93cml0ZSgmeGRyLCByZXMpOworCXN0YXR1cyA9IGRlY29kZV93cml0ZSh4ZHIsIHJlcyk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0JZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyLAorCWRlY29kZV9nZXRmYXR0cih4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyLAogCQkJIVJQQ19JU19BU1lOQyhycXN0cC0+cnFfdGFzaykpOwogCWlmICghc3RhdHVzKQogCQlzdGF0dXMgPSByZXMtPmNvdW50OwpAQCAtNTc4MSwyNiArNTcwMSwyNSBAQAogLyoKICAqIERlY29kZSBDT01NSVQgcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfY29tbWl0KHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwgc3RydWN0IG5mc193cml0ZXJlcyAqcmVzKQorc3RhdGljIGludCBuZnM0X3hkcl9kZWNfY29tbWl0KHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgICAgc3RydWN0IG5mc193cml0ZXJlcyAqcmVzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkcjsKIAlpbnQgc3RhdHVzOwogCi0JeGRyX2luaXRfZGVjb2RlKCZ4ZHIsICZycXN0cC0+cnFfcmN2X2J1ZiwgcCk7Ci0Jc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKHhkciwgJmhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKCZ4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKKwlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3B1dGZoKCZ4ZHIpOworCXN0YXR1cyA9IGRlY29kZV9wdXRmaCh4ZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9jb21taXQoJnhkciwgcmVzKTsKKwlzdGF0dXMgPSBkZWNvZGVfY29tbWl0KHhkciwgcmVzKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIsCisJZGVjb2RlX2dldGZhdHRyKHhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIsCiAJCQkhUlBDX0lTX0FTWU5DKHJxc3RwLT5ycV90YXNrKSk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKQEAgLTU4MDksODUgKzU3MjgsODAgQEAKIC8qCiAgKiBEZWNvZGUgRlNJTkZPIHJlc3BvbnNlCiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2ZzaW5mbyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAorc3RhdGljIGludCBuZnM0X3hkcl9kZWNfZnNpbmZvKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAogCQkJICAgICAgIHN0cnVjdCBuZnM0X2ZzaW5mb19yZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcmVxLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoIXN0YXR1cykKLQkJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKCZ4ZHIsICZyZXMtPnNlcV9yZXMsIHJlcSk7CisJCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJlcSk7CiAJaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGRlY29kZV9wdXRmaCgmeGRyKTsKKwkJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CiAJaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGRlY29kZV9mc2luZm8oJnhkciwgcmVzLT5mc2luZm8pOworCQlzdGF0dXMgPSBkZWNvZGVfZnNpbmZvKHhkciwgcmVzLT5mc2luZm8pOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qCiAgKiBEZWNvZGUgUEFUSENPTkYgcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfcGF0aGNvbmYoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX3BhdGhjb25mKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAogCQkJCSBzdHJ1Y3QgbmZzNF9wYXRoY29uZl9yZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcmVxLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoIXN0YXR1cykKLQkJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKCZ4ZHIsICZyZXMtPnNlcV9yZXMsIHJlcSk7CisJCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJlcSk7CiAJaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGRlY29kZV9wdXRmaCgmeGRyKTsKKwkJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CiAJaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGRlY29kZV9wYXRoY29uZigmeGRyLCByZXMtPnBhdGhjb25mKTsKKwkJc3RhdHVzID0gZGVjb2RlX3BhdGhjb25mKHhkciwgcmVzLT5wYXRoY29uZik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKICAqIERlY29kZSBTVEFURlMgcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfc3RhdGZzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY19zdGF0ZnMoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCiAJCQkgICAgICAgc3RydWN0IG5mczRfc3RhdGZzX3JlcyAqcmVzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkcjsKIAlpbnQgc3RhdHVzOwogCi0JeGRyX2luaXRfZGVjb2RlKCZ4ZHIsICZyZXEtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmICghc3RhdHVzKQotCQlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoJnhkciwgJnJlcy0+c2VxX3JlcywgcmVxKTsKKwkJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgJnJlcy0+c2VxX3JlcywgcmVxKTsKIAlpZiAoIXN0YXR1cykKLQkJc3RhdHVzID0gZGVjb2RlX3B1dGZoKCZ4ZHIpOworCQlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoeGRyKTsKIAlpZiAoIXN0YXR1cykKLQkJc3RhdHVzID0gZGVjb2RlX3N0YXRmcygmeGRyLCByZXMtPmZzc3RhdCk7CisJCXN0YXR1cyA9IGRlY29kZV9zdGF0ZnMoeGRyLCByZXMtPmZzc3RhdCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKICAqIERlY29kZSBHRVRBVFRSX0JJVE1BUCByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19zZXJ2ZXJfY2FwcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzNF9zZXJ2ZXJfY2Fwc19yZXMgKnJlcykKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX3NlcnZlcl9jYXBzKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCSAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICBzdHJ1Y3QgbmZzNF9zZXJ2ZXJfY2Fwc19yZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcmVxLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoJnhkciwgJnJlcy0+c2VxX3JlcywgcmVxKTsKKwlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoeGRyLCAmcmVzLT5zZXFfcmVzLCByZXEpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCWlmICgoc3RhdHVzID0gZGVjb2RlX3B1dGZoKCZ4ZHIpKSAhPSAwKQorCXN0YXR1cyA9IGRlY29kZV9wdXRmaCh4ZHIpOworCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9zZXJ2ZXJfY2FwcygmeGRyLCByZXMpOworCXN0YXR1cyA9IGRlY29kZV9zZXJ2ZXJfY2Fwcyh4ZHIsIHJlcyk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTU4OTUsNzkgKzU4MDksNzcgQEAKIC8qCiAgKiBEZWNvZGUgUkVORVcgcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfcmVuZXcoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgX19iZTMyICpwLCB2b2lkICpkdW1teSkKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX3JlbmV3KHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgICB2b2lkICpfX3VudXNlZCkKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmICghc3RhdHVzKQotCQlzdGF0dXMgPSBkZWNvZGVfcmVuZXcoJnhkcik7CisJCXN0YXR1cyA9IGRlY29kZV9yZW5ldyh4ZHIpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qCiAgKiBEZWNvZGUgU0VUQ0xJRU5USUQgcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfc2V0Y2xpZW50aWQoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKLQkJc3RydWN0IG5mczRfc2V0Y2xpZW50aWRfcmVzICpyZXMpCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY19zZXRjbGllbnRpZChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgc3RydWN0IG5mczRfc2V0Y2xpZW50aWRfcmVzICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJlcS0+cnFfcmN2X2J1ZiwgcCk7Ci0Jc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKHhkciwgJmhkcik7CiAJaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGRlY29kZV9zZXRjbGllbnRpZCgmeGRyLCByZXMpOworCQlzdGF0dXMgPSBkZWNvZGVfc2V0Y2xpZW50aWQoeGRyLCByZXMpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qCiAgKiBEZWNvZGUgU0VUQ0xJRU5USURfQ09ORklSTSByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19zZXRjbGllbnRpZF9jb25maXJtKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfZnNpbmZvICpmc2luZm8pCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY19zZXRjbGllbnRpZF9jb25maXJtKHN0cnVjdCBycGNfcnFzdCAqcmVxLAorCQkJCQkgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkJICAgIHN0cnVjdCBuZnNfZnNpbmZvICpmc2luZm8pCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJlcS0+cnFfcmN2X2J1ZiwgcCk7Ci0Jc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKHhkciwgJmhkcik7CiAJaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGRlY29kZV9zZXRjbGllbnRpZF9jb25maXJtKCZ4ZHIpOworCQlzdGF0dXMgPSBkZWNvZGVfc2V0Y2xpZW50aWRfY29uZmlybSh4ZHIpOwogCWlmICghc3RhdHVzKQotCQlzdGF0dXMgPSBkZWNvZGVfcHV0cm9vdGZoKCZ4ZHIpOworCQlzdGF0dXMgPSBkZWNvZGVfcHV0cm9vdGZoKHhkcik7CiAJaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGRlY29kZV9mc2luZm8oJnhkciwgZnNpbmZvKTsKKwkJc3RhdHVzID0gZGVjb2RlX2ZzaW5mbyh4ZHIsIGZzaW5mbyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKICAqIERlY29kZSBERUxFR1JFVFVSTiByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19kZWxlZ3JldHVybihzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnM0X2RlbGVncmV0dXJucmVzICpyZXMpCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY19kZWxlZ3JldHVybihzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLAorCQkJCSAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICBzdHJ1Y3QgbmZzNF9kZWxlZ3JldHVybnJlcyAqcmVzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkcjsKIAlpbnQgc3RhdHVzOwogCi0JeGRyX2luaXRfZGVjb2RlKCZ4ZHIsICZycXN0cC0+cnFfcmN2X2J1ZiwgcCk7Ci0Jc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKHhkciwgJmhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKCZ4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKKwlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3B1dGZoKCZ4ZHIpOworCXN0YXR1cyA9IGRlY29kZV9wdXRmaCh4ZHIpOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX2RlbGVncmV0dXJuKCZ4ZHIpOworCXN0YXR1cyA9IGRlY29kZV9kZWxlZ3JldHVybih4ZHIpOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJZ290byBvdXQ7Ci0JZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyLAorCWRlY29kZV9nZXRmYXR0cih4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyLAogCQkJIVJQQ19JU19BU1lOQyhycXN0cC0+cnFfdGFzaykpOwogb3V0OgogCXJldHVybiBzdGF0dXM7CkBAIC01OTc2LDI2ICs1ODg4LDI3IEBACiAvKgogICogRGVjb2RlIEZTX0xPQ0FUSU9OUyByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19mc19sb2NhdGlvbnMoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2ZzX2xvY2F0aW9ucyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCiAJCQkJICAgICBzdHJ1Y3QgbmZzNF9mc19sb2NhdGlvbnNfcmVzICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJlcS0+cnFfcmN2X2J1ZiwgcCk7Ci0Jc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKHhkciwgJmhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKCZ4ZHIsICZyZXMtPnNlcV9yZXMsIHJlcSk7CisJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgJnJlcy0+c2VxX3JlcywgcmVxKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9wdXRmaCgmeGRyKSkgIT0gMCkKKwlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoeGRyKTsKKwlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9sb29rdXAoJnhkcikpICE9IDApCisJc3RhdHVzID0gZGVjb2RlX2xvb2t1cCh4ZHIpOworCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXhkcl9lbnRlcl9wYWdlKCZ4ZHIsIFBBR0VfU0laRSk7Ci0Jc3RhdHVzID0gZGVjb2RlX2dldGZhdHRyKCZ4ZHIsICZyZXMtPmZzX2xvY2F0aW9ucy0+ZmF0dHIsCisJeGRyX2VudGVyX3BhZ2UoeGRyLCBQQUdFX1NJWkUpOworCXN0YXR1cyA9IGRlY29kZV9nZXRmYXR0cih4ZHIsICZyZXMtPmZzX2xvY2F0aW9ucy0+ZmF0dHIsCiAJCQkJIHJlcy0+ZnNfbG9jYXRpb25zLT5zZXJ2ZXIsCiAJCQkJICFSUENfSVNfQVNZTkMocmVxLT5ycV90YXNrKSk7CiBvdXQ6CkBAIC02MDA2LDEyOSArNTkxOSwxMjIgQEAKIC8qCiAgKiBEZWNvZGUgRVhDSEFOR0VfSUQgcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfZXhjaGFuZ2VfaWQoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgdWludDMyX3QgKnAsCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY19leGNoYW5nZV9pZChzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLAorCQkJCSAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAogCQkJCSAgICB2b2lkICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoIXN0YXR1cykKLQkJc3RhdHVzID0gZGVjb2RlX2V4Y2hhbmdlX2lkKCZ4ZHIsIHJlcyk7CisJCXN0YXR1cyA9IGRlY29kZV9leGNoYW5nZV9pZCh4ZHIsIHJlcyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKICAqIERlY29kZSBDUkVBVEVfU0VTU0lPTiByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19jcmVhdGVfc2Vzc2lvbihzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCB1aW50MzJfdCAqcCwKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2NyZWF0ZV9zZXNzaW9uKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsCisJCQkJICAgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCiAJCQkJICAgICAgIHN0cnVjdCBuZnM0MV9jcmVhdGVfc2Vzc2lvbl9yZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmICghc3RhdHVzKQotCQlzdGF0dXMgPSBkZWNvZGVfY3JlYXRlX3Nlc3Npb24oJnhkciwgcmVzKTsKKwkJc3RhdHVzID0gZGVjb2RlX2NyZWF0ZV9zZXNzaW9uKHhkciwgcmVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCiAvKgogICogRGVjb2RlIERFU1RST1lfU0VTU0lPTiByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19kZXN0cm95X3Nlc3Npb24oc3RydWN0IHJwY19ycXN0ICpycXN0cCwgdWludDMyX3QgKnAsCi0JCQkJCXZvaWQgKmR1bW15KQorc3RhdGljIGludCBuZnM0X3hkcl9kZWNfZGVzdHJveV9zZXNzaW9uKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsCisJCQkJCXN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJCXZvaWQgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmICghc3RhdHVzKQotCQlzdGF0dXMgPSBkZWNvZGVfZGVzdHJveV9zZXNzaW9uKCZ4ZHIsIGR1bW15KTsKKwkJc3RhdHVzID0gZGVjb2RlX2Rlc3Ryb3lfc2Vzc2lvbih4ZHIsIHJlcyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKICAqIERlY29kZSBTRVFVRU5DRSByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19zZXF1ZW5jZShzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCB1aW50MzJfdCAqcCwKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX3NlcXVlbmNlKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsCisJCQkJIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCiAJCQkJIHN0cnVjdCBuZnM0X3NlcXVlbmNlX3JlcyAqcmVzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkcjsKIAlpbnQgc3RhdHVzOwogCi0JeGRyX2luaXRfZGVjb2RlKCZ4ZHIsICZycXN0cC0+cnFfcmN2X2J1ZiwgcCk7Ci0Jc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKHhkciwgJmhkcik7CiAJaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSgmeGRyLCByZXMsIHJxc3RwKTsKKwkJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgcmVzLCBycXN0cCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKICAqIERlY29kZSBHRVRfTEVBU0VfVElNRSByZXNwb25zZQogICovCi1zdGF0aWMgaW50IG5mczRfeGRyX2RlY19nZXRfbGVhc2VfdGltZShzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCB1aW50MzJfdCAqcCwKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2dldF9sZWFzZV90aW1lKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsCisJCQkJICAgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCiAJCQkJICAgICAgIHN0cnVjdCBuZnM0X2dldF9sZWFzZV90aW1lX3JlcyAqcmVzKQogewotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkcjsKIAlpbnQgc3RhdHVzOwogCi0JeGRyX2luaXRfZGVjb2RlKCZ4ZHIsICZycXN0cC0+cnFfcmN2X2J1ZiwgcCk7Ci0Jc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKHhkciwgJmhkcik7CiAJaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSgmeGRyLCAmcmVzLT5scl9zZXFfcmVzLCBycXN0cCk7CisJCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPmxyX3NlcV9yZXMsIHJxc3RwKTsKIAlpZiAoIXN0YXR1cykKLQkJc3RhdHVzID0gZGVjb2RlX3B1dHJvb3RmaCgmeGRyKTsKKwkJc3RhdHVzID0gZGVjb2RlX3B1dHJvb3RmaCh4ZHIpOwogCWlmICghc3RhdHVzKQotCQlzdGF0dXMgPSBkZWNvZGVfZnNpbmZvKCZ4ZHIsIHJlcy0+bHJfZnNpbmZvKTsKKwkJc3RhdHVzID0gZGVjb2RlX2ZzaW5mbyh4ZHIsIHJlcy0+bHJfZnNpbmZvKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCiAvKgogICogRGVjb2RlIFJFQ0xBSU1fQ09NUExFVEUgcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfcmVjbGFpbV9jb21wbGV0ZShzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCB1aW50MzJfdCAqcCwKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX3JlY2xhaW1fY29tcGxldGUoc3RydWN0IHJwY19ycXN0ICpycXN0cCwKKwkJCQkJIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCiAJCQkJCSBzdHJ1Y3QgbmZzNDFfcmVjbGFpbV9jb21wbGV0ZV9yZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmICghc3RhdHVzKQotCQlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoJnhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOworCQlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CiAJaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGRlY29kZV9yZWNsYWltX2NvbXBsZXRlKCZ4ZHIsICh2b2lkICopTlVMTCk7CisJCXN0YXR1cyA9IGRlY29kZV9yZWNsYWltX2NvbXBsZXRlKHhkciwgKHZvaWQgKilOVUxMKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCiAvKgogICogRGVjb2RlIEdFVERFVklORk8gcmVzcG9uc2UKICAqLwotc3RhdGljIGludCBuZnM0X3hkcl9kZWNfZ2V0ZGV2aWNlaW5mbyhzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCB1aW50MzJfdCAqcCwKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2dldGRldmljZWluZm8oc3RydWN0IHJwY19ycXN0ICpycXN0cCwKKwkJCQkgICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAogCQkJCSAgICAgIHN0cnVjdCBuZnM0X2dldGRldmljZWluZm9fcmVzICpyZXMpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOwogCWludCBzdGF0dXM7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKLQlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSgmeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJZ290byBvdXQ7Ci0Jc3RhdHVzID0gZGVjb2RlX2dldGRldmljZWluZm8oJnhkciwgcmVzLT5wZGV2KTsKKwlzdGF0dXMgPSBkZWNvZGVfZ2V0ZGV2aWNlaW5mbyh4ZHIsIHJlcy0+cGRldik7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTYxMzYsMzEgKzYwNDIsNDQgQEAKIC8qCiAgKiBEZWNvZGUgTEFZT1VUR0VUIHJlc3BvbnNlCiAgKi8KLXN0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2xheW91dGdldChzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCB1aW50MzJfdCAqcCwKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2xheW91dGdldChzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLAorCQkJCSAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKIAkJCQkgIHN0cnVjdCBuZnM0X2xheW91dGdldF9yZXMgKnJlcykKIHsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSgmeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9wdXRmaCgmeGRyKTsKKwlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoeGRyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfbGF5b3V0Z2V0KCZ4ZHIsIHJxc3RwLCByZXMpOworCXN0YXR1cyA9IGRlY29kZV9sYXlvdXRnZXQoeGRyLCBycXN0cCwgcmVzKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwogfQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwogCi1fX2JlMzIgKm5mczRfZGVjb2RlX2RpcmVudChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzX2VudHJ5ICplbnRyeSwKLQkJCSAgIHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIGludCBwbHVzKQorLyoqCisgKiBuZnM0X2RlY29kZV9kaXJlbnQgLSBEZWNvZGUgYSBzaW5nbGUgTkZTdjQgZGlyZWN0b3J5IGVudHJ5IHN0b3JlZCBpbgorICogICAgICAgICAgICAgICAgICAgICAgdGhlIGxvY2FsIHBhZ2UgY2FjaGUuCisgKiBAeGRyOiBYRFIgc3RyZWFtIHdoZXJlIGVudHJ5IHJlc2lkZXMKKyAqIEBlbnRyeTogYnVmZmVyIHRvIGZpbGwgaW4gd2l0aCBlbnRyeSBkYXRhCisgKiBAcGx1czogYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBzaG91bGQgYmUgYSByZWFkZGlycGx1cyBlbnRyeQorICoKKyAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBpcworICogcmV0dXJuZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBub3QgaW52b2tlZCBkdXJpbmcgUkVBRERJUiByZXBseSBkZWNvZGluZywgYnV0CisgKiByYXRoZXIgd2hlbmV2ZXIgYW4gYXBwbGljYXRpb24gaW52b2tlcyB0aGUgZ2V0ZGVudHMoMikgc3lzdGVtIGNhbGwKKyAqIG9uIGEgZGlyZWN0b3J5IGFscmVhZHkgaW4gb3VyIGNhY2hlLgorICovCitpbnQgbmZzNF9kZWNvZGVfZGlyZW50KHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnNfZW50cnkgKmVudHJ5LAorCQkgICAgICAgaW50IHBsdXMpCiB7CiAJdWludDMyX3QgYml0bWFwWzJdID0gezB9OwogCXVpbnQzMl90IGxlbjsKQEAgLTYxNzIsOSArNjA5MSw5IEBACiAJCWlmICh1bmxpa2VseSghcCkpCiAJCQlnb3RvIG91dF9vdmVyZmxvdzsKIAkJaWYgKCFudG9obCgqcCsrKSkKLQkJCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOworCQkJcmV0dXJuIC1FQUdBSU47CiAJCWVudHJ5LT5lb2YgPSAxOwotCQlyZXR1cm4gRVJSX1BUUigtRUJBRENPT0tJRSk7CisJCXJldHVybiAtRUJBRENPT0tJRTsKIAl9CiAKIAlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCAxMik7CkBAIC02MjAzLDcgKzYxMjIsOCBAQAogCWlmIChkZWNvZGVfYXR0cl9sZW5ndGgoeGRyLCAmbGVuLCAmcCkgPCAwKQogCQlnb3RvIG91dF9vdmVyZmxvdzsKIAotCWlmIChkZWNvZGVfZ2V0ZmF0dHJfYXR0cnMoeGRyLCBiaXRtYXAsIGVudHJ5LT5mYXR0ciwgZW50cnktPmZoLCBzZXJ2ZXIsIDEpIDwgMCkKKwlpZiAoZGVjb2RlX2dldGZhdHRyX2F0dHJzKHhkciwgYml0bWFwLCBlbnRyeS0+ZmF0dHIsIGVudHJ5LT5maCwKKwkJCQkJZW50cnktPnNlcnZlciwgMSkgPCAwKQogCQlnb3RvIG91dF9vdmVyZmxvdzsKIAlpZiAoZW50cnktPmZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0ZJTEVJRCkKIAkJZW50cnktPmlubyA9IGVudHJ5LT5mYXR0ci0+ZmlsZWlkOwpAQCAtNjIxNSwxNyArNjEzNSwxMSBAQAogCWlmICh2ZXJpZnlfYXR0cl9sZW4oeGRyLCBwLCBsZW4pIDwgMCkKIAkJZ290byBvdXRfb3ZlcmZsb3c7CiAKLQlwID0geGRyX2lubGluZV9wZWVrKHhkciwgOCk7Ci0JaWYgKHAgIT0gTlVMTCkKLQkJZW50cnktPmVvZiA9ICFwWzBdICYmIHBbMV07Ci0JZWxzZQotCQllbnRyeS0+ZW9mID0gMDsKLQotCXJldHVybiBwOworCXJldHVybiAwOwogCiBvdXRfb3ZlcmZsb3c6CiAJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOwotCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOworCXJldHVybiAtRUFHQUlOOwogfQogCiAvKgpAQCAtNjMwMSw4ICs2MjE1LDggQEAKICNkZWZpbmUgUFJPQyhwcm9jLCBhcmd0eXBlLCByZXN0eXBlKQkJCQlcCiBbTkZTUFJPQzRfQ0xOVF8jI3Byb2NdID0gewkJCQkJXAogCS5wX3Byb2MgICA9IE5GU1BST0M0X0NPTVBPVU5ELAkJCQlcCi0JLnBfZW5jb2RlID0gKGt4ZHJwcm9jX3QpIG5mczRfeGRyXyMjYXJndHlwZSwJCVwKLQkucF9kZWNvZGUgPSAoa3hkcnByb2NfdCkgbmZzNF94ZHJfIyNyZXN0eXBlLAkJXAorCS5wX2VuY29kZSA9IChreGRyZXByb2NfdCluZnM0X3hkcl8jI2FyZ3R5cGUsCQlcCisJLnBfZGVjb2RlID0gKGt4ZHJkcHJvY190KW5mczRfeGRyXyMjcmVzdHlwZSwJCVwKIAkucF9hcmdsZW4gPSBORlM0XyMjYXJndHlwZSMjX3N6LAkJCVwKIAkucF9yZXBsZW4gPSBORlM0XyMjcmVzdHlwZSMjX3N6LAkJCVwKIAkucF9zdGF0aWR4ID0gTkZTUFJPQzRfQ0xOVF8jI3Byb2MsCQkJXApAQCAtNjMxMCw1MCArNjIyNCw1MCBAQAogfQogCiBzdHJ1Y3QgcnBjX3Byb2NpbmZvCW5mczRfcHJvY2VkdXJlc1tdID0gewotICBQUk9DKFJFQUQsCQllbmNfcmVhZCwJZGVjX3JlYWQpLAotICBQUk9DKFdSSVRFLAkJZW5jX3dyaXRlLAlkZWNfd3JpdGUpLAotICBQUk9DKENPTU1JVCwJCWVuY19jb21taXQsCWRlY19jb21taXQpLAotICBQUk9DKE9QRU4sCQllbmNfb3BlbiwJZGVjX29wZW4pLAotICBQUk9DKE9QRU5fQ09ORklSTSwJZW5jX29wZW5fY29uZmlybSwJZGVjX29wZW5fY29uZmlybSksCi0gIFBST0MoT1BFTl9OT0FUVFIsCWVuY19vcGVuX25vYXR0ciwJZGVjX29wZW5fbm9hdHRyKSwKLSAgUFJPQyhPUEVOX0RPV05HUkFERSwJZW5jX29wZW5fZG93bmdyYWRlLAlkZWNfb3Blbl9kb3duZ3JhZGUpLAotICBQUk9DKENMT1NFLAkJZW5jX2Nsb3NlLAlkZWNfY2xvc2UpLAotICBQUk9DKFNFVEFUVFIsCQllbmNfc2V0YXR0ciwJZGVjX3NldGF0dHIpLAotICBQUk9DKEZTSU5GTywJCWVuY19mc2luZm8sCWRlY19mc2luZm8pLAotICBQUk9DKFJFTkVXLAkJZW5jX3JlbmV3LAlkZWNfcmVuZXcpLAotICBQUk9DKFNFVENMSUVOVElELAllbmNfc2V0Y2xpZW50aWQsCWRlY19zZXRjbGllbnRpZCksCi0gIFBST0MoU0VUQ0xJRU5USURfQ09ORklSTSwJZW5jX3NldGNsaWVudGlkX2NvbmZpcm0sCWRlY19zZXRjbGllbnRpZF9jb25maXJtKSwKLSAgUFJPQyhMT0NLLCAgICAgICAgICAgIGVuY19sb2NrLCAgICAgICBkZWNfbG9jayksCi0gIFBST0MoTE9DS1QsICAgICAgICAgICBlbmNfbG9ja3QsICAgICAgZGVjX2xvY2t0KSwKLSAgUFJPQyhMT0NLVSwgICAgICAgICAgIGVuY19sb2NrdSwgICAgICBkZWNfbG9ja3UpLAotICBQUk9DKEFDQ0VTUywJCWVuY19hY2Nlc3MsCWRlY19hY2Nlc3MpLAotICBQUk9DKEdFVEFUVFIsCQllbmNfZ2V0YXR0ciwJZGVjX2dldGF0dHIpLAotICBQUk9DKExPT0tVUCwJCWVuY19sb29rdXAsCWRlY19sb29rdXApLAotICBQUk9DKExPT0tVUF9ST09ULAllbmNfbG9va3VwX3Jvb3QsCWRlY19sb29rdXBfcm9vdCksCi0gIFBST0MoUkVNT1ZFLAkJZW5jX3JlbW92ZSwJZGVjX3JlbW92ZSksCi0gIFBST0MoUkVOQU1FLAkJZW5jX3JlbmFtZSwJZGVjX3JlbmFtZSksCi0gIFBST0MoTElOSywJCWVuY19saW5rLAlkZWNfbGluayksCi0gIFBST0MoU1lNTElOSywJCWVuY19zeW1saW5rLAlkZWNfc3ltbGluayksCi0gIFBST0MoQ1JFQVRFLAkJZW5jX2NyZWF0ZSwJZGVjX2NyZWF0ZSksCi0gIFBST0MoUEFUSENPTkYsCWVuY19wYXRoY29uZiwJZGVjX3BhdGhjb25mKSwKLSAgUFJPQyhTVEFURlMsCQllbmNfc3RhdGZzLAlkZWNfc3RhdGZzKSwKLSAgUFJPQyhSRUFETElOSywJZW5jX3JlYWRsaW5rLAlkZWNfcmVhZGxpbmspLAotICBQUk9DKFJFQURESVIsCQllbmNfcmVhZGRpciwJZGVjX3JlYWRkaXIpLAotICBQUk9DKFNFUlZFUl9DQVBTLAllbmNfc2VydmVyX2NhcHMsIGRlY19zZXJ2ZXJfY2FwcyksCi0gIFBST0MoREVMRUdSRVRVUk4sCWVuY19kZWxlZ3JldHVybiwgZGVjX2RlbGVncmV0dXJuKSwKLSAgUFJPQyhHRVRBQ0wsCQllbmNfZ2V0YWNsLAlkZWNfZ2V0YWNsKSwKLSAgUFJPQyhTRVRBQ0wsCQllbmNfc2V0YWNsLAlkZWNfc2V0YWNsKSwKLSAgUFJPQyhGU19MT0NBVElPTlMsCWVuY19mc19sb2NhdGlvbnMsIGRlY19mc19sb2NhdGlvbnMpLAotICBQUk9DKFJFTEVBU0VfTE9DS09XTkVSLCBlbmNfcmVsZWFzZV9sb2Nrb3duZXIsIGRlY19yZWxlYXNlX2xvY2tvd25lciksCisJUFJPQyhSRUFELAkJZW5jX3JlYWQsCQlkZWNfcmVhZCksCisJUFJPQyhXUklURSwJCWVuY193cml0ZSwJCWRlY193cml0ZSksCisJUFJPQyhDT01NSVQsCQllbmNfY29tbWl0LAkJZGVjX2NvbW1pdCksCisJUFJPQyhPUEVOLAkJZW5jX29wZW4sCQlkZWNfb3BlbiksCisJUFJPQyhPUEVOX0NPTkZJUk0sCWVuY19vcGVuX2NvbmZpcm0sCWRlY19vcGVuX2NvbmZpcm0pLAorCVBST0MoT1BFTl9OT0FUVFIsCWVuY19vcGVuX25vYXR0ciwJZGVjX29wZW5fbm9hdHRyKSwKKwlQUk9DKE9QRU5fRE9XTkdSQURFLAllbmNfb3Blbl9kb3duZ3JhZGUsCWRlY19vcGVuX2Rvd25ncmFkZSksCisJUFJPQyhDTE9TRSwJCWVuY19jbG9zZSwJCWRlY19jbG9zZSksCisJUFJPQyhTRVRBVFRSLAkJZW5jX3NldGF0dHIsCQlkZWNfc2V0YXR0ciksCisJUFJPQyhGU0lORk8sCQllbmNfZnNpbmZvLAkJZGVjX2ZzaW5mbyksCisJUFJPQyhSRU5FVywJCWVuY19yZW5ldywJCWRlY19yZW5ldyksCisJUFJPQyhTRVRDTElFTlRJRCwJZW5jX3NldGNsaWVudGlkLAlkZWNfc2V0Y2xpZW50aWQpLAorCVBST0MoU0VUQ0xJRU5USURfQ09ORklSTSwgZW5jX3NldGNsaWVudGlkX2NvbmZpcm0sIGRlY19zZXRjbGllbnRpZF9jb25maXJtKSwKKwlQUk9DKExPQ0ssCQllbmNfbG9jaywJCWRlY19sb2NrKSwKKwlQUk9DKExPQ0tULAkJZW5jX2xvY2t0LAkJZGVjX2xvY2t0KSwKKwlQUk9DKExPQ0tVLAkJZW5jX2xvY2t1LAkJZGVjX2xvY2t1KSwKKwlQUk9DKEFDQ0VTUywJCWVuY19hY2Nlc3MsCQlkZWNfYWNjZXNzKSwKKwlQUk9DKEdFVEFUVFIsCQllbmNfZ2V0YXR0ciwJCWRlY19nZXRhdHRyKSwKKwlQUk9DKExPT0tVUCwJCWVuY19sb29rdXAsCQlkZWNfbG9va3VwKSwKKwlQUk9DKExPT0tVUF9ST09ULAllbmNfbG9va3VwX3Jvb3QsCWRlY19sb29rdXBfcm9vdCksCisJUFJPQyhSRU1PVkUsCQllbmNfcmVtb3ZlLAkJZGVjX3JlbW92ZSksCisJUFJPQyhSRU5BTUUsCQllbmNfcmVuYW1lLAkJZGVjX3JlbmFtZSksCisJUFJPQyhMSU5LLAkJZW5jX2xpbmssCQlkZWNfbGluayksCisJUFJPQyhTWU1MSU5LLAkJZW5jX3N5bWxpbmssCQlkZWNfc3ltbGluayksCisJUFJPQyhDUkVBVEUsCQllbmNfY3JlYXRlLAkJZGVjX2NyZWF0ZSksCisJUFJPQyhQQVRIQ09ORiwJCWVuY19wYXRoY29uZiwJCWRlY19wYXRoY29uZiksCisJUFJPQyhTVEFURlMsCQllbmNfc3RhdGZzLAkJZGVjX3N0YXRmcyksCisJUFJPQyhSRUFETElOSywJCWVuY19yZWFkbGluaywJCWRlY19yZWFkbGluayksCisJUFJPQyhSRUFERElSLAkJZW5jX3JlYWRkaXIsCQlkZWNfcmVhZGRpciksCisJUFJPQyhTRVJWRVJfQ0FQUywJZW5jX3NlcnZlcl9jYXBzLAlkZWNfc2VydmVyX2NhcHMpLAorCVBST0MoREVMRUdSRVRVUk4sCWVuY19kZWxlZ3JldHVybiwJZGVjX2RlbGVncmV0dXJuKSwKKwlQUk9DKEdFVEFDTCwJCWVuY19nZXRhY2wsCQlkZWNfZ2V0YWNsKSwKKwlQUk9DKFNFVEFDTCwJCWVuY19zZXRhY2wsCQlkZWNfc2V0YWNsKSwKKwlQUk9DKEZTX0xPQ0FUSU9OUywJZW5jX2ZzX2xvY2F0aW9ucywJZGVjX2ZzX2xvY2F0aW9ucyksCisJUFJPQyhSRUxFQVNFX0xPQ0tPV05FUiwJZW5jX3JlbGVhc2VfbG9ja293bmVyLAlkZWNfcmVsZWFzZV9sb2Nrb3duZXIpLAogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQotICBQUk9DKEVYQ0hBTkdFX0lELAllbmNfZXhjaGFuZ2VfaWQsCWRlY19leGNoYW5nZV9pZCksCi0gIFBST0MoQ1JFQVRFX1NFU1NJT04sCWVuY19jcmVhdGVfc2Vzc2lvbiwJZGVjX2NyZWF0ZV9zZXNzaW9uKSwKLSAgUFJPQyhERVNUUk9ZX1NFU1NJT04sCWVuY19kZXN0cm95X3Nlc3Npb24sCWRlY19kZXN0cm95X3Nlc3Npb24pLAotICBQUk9DKFNFUVVFTkNFLAllbmNfc2VxdWVuY2UsCWRlY19zZXF1ZW5jZSksCi0gIFBST0MoR0VUX0xFQVNFX1RJTUUsCWVuY19nZXRfbGVhc2VfdGltZSwJZGVjX2dldF9sZWFzZV90aW1lKSwKLSAgUFJPQyhSRUNMQUlNX0NPTVBMRVRFLCBlbmNfcmVjbGFpbV9jb21wbGV0ZSwgIGRlY19yZWNsYWltX2NvbXBsZXRlKSwKLSAgUFJPQyhHRVRERVZJQ0VJTkZPLCBlbmNfZ2V0ZGV2aWNlaW5mbywgZGVjX2dldGRldmljZWluZm8pLAotICBQUk9DKExBWU9VVEdFVCwgIGVuY19sYXlvdXRnZXQsICAgICBkZWNfbGF5b3V0Z2V0KSwKKwlQUk9DKEVYQ0hBTkdFX0lELAllbmNfZXhjaGFuZ2VfaWQsCWRlY19leGNoYW5nZV9pZCksCisJUFJPQyhDUkVBVEVfU0VTU0lPTiwJZW5jX2NyZWF0ZV9zZXNzaW9uLAlkZWNfY3JlYXRlX3Nlc3Npb24pLAorCVBST0MoREVTVFJPWV9TRVNTSU9OLAllbmNfZGVzdHJveV9zZXNzaW9uLAlkZWNfZGVzdHJveV9zZXNzaW9uKSwKKwlQUk9DKFNFUVVFTkNFLAkJZW5jX3NlcXVlbmNlLAkJZGVjX3NlcXVlbmNlKSwKKwlQUk9DKEdFVF9MRUFTRV9USU1FLAllbmNfZ2V0X2xlYXNlX3RpbWUsCWRlY19nZXRfbGVhc2VfdGltZSksCisJUFJPQyhSRUNMQUlNX0NPTVBMRVRFLAllbmNfcmVjbGFpbV9jb21wbGV0ZSwJZGVjX3JlY2xhaW1fY29tcGxldGUpLAorCVBST0MoR0VUREVWSUNFSU5GTywJZW5jX2dldGRldmljZWluZm8sCWRlY19nZXRkZXZpY2VpbmZvKSwKKwlQUk9DKExBWU9VVEdFVCwJCWVuY19sYXlvdXRnZXQsCQlkZWNfbGF5b3V0Z2V0KSwKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9wYWdlbGlzdC5jIGIvZnMvbmZzL3BhZ2VsaXN0LmMKaW5kZXggYjY4NTM2Yy4uZTExNjRlMyAxMDA2NDQKLS0tIGEvZnMvbmZzL3BhZ2VsaXN0LmMKKysrIGIvZnMvbmZzL3BhZ2VsaXN0LmMKQEAgLTI2LDEyICsyNiw5IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnNfcGFnZSAqCiBuZnNfcGFnZV9hbGxvYyh2b2lkKQogewotCXN0cnVjdCBuZnNfcGFnZQkqcDsKLQlwID0ga21lbV9jYWNoZV9hbGxvYyhuZnNfcGFnZV9jYWNoZXAsIEdGUF9LRVJORUwpOwotCWlmIChwKSB7Ci0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKKwlzdHJ1Y3QgbmZzX3BhZ2UJKnAgPSBrbWVtX2NhY2hlX3phbGxvYyhuZnNfcGFnZV9jYWNoZXAsIEdGUF9LRVJORUwpOworCWlmIChwKQogCQlJTklUX0xJU1RfSEVBRCgmcC0+d2JfbGlzdCk7Ci0JfQogCXJldHVybiBwOwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvcG5mcy5jIGIvZnMvbmZzL3BuZnMuYwppbmRleCBkYjc3MzQyLi5iYzQwODk3IDEwMDY0NAotLS0gYS9mcy9uZnMvcG5mcy5jCisrKyBiL2ZzL25mcy9wbmZzLmMKQEAgLTE3NywxMDUgKzE3NywxNDkgQEAKICAqIHBORlMgY2xpZW50IGxheW91dCBjYWNoZQogICovCiAKLXN0YXRpYyB2b2lkCi1nZXRfbGF5b3V0X2hkcl9sb2NrZWQoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8pCisvKiBOZWVkIHRvIGhvbGQgaV9sb2NrIGlmIGNhbGxlciBkb2VzIG5vdCBhbHJlYWR5IGhvbGQgcmVmZXJlbmNlICovCit2b2lkCitnZXRfbGF5b3V0X2hkcihzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbykKIHsKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmxvLT5pbm9kZS0+aV9sb2NrKTsKLQlsby0+cmVmY291bnQrKzsKKwlhdG9taWNfaW5jKCZsby0+cGxoX3JlZmNvdW50KTsKK30KKworc3RhdGljIHZvaWQKK2Rlc3Ryb3lfbGF5b3V0X2hkcihzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbykKK3sKKwlkcHJpbnRrKCIlczogZnJlZWluZyBsYXlvdXQgY2FjaGUgJXBcbiIsIF9fZnVuY19fLCBsbyk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZsby0+cGxoX2xheW91dHMpKTsKKwlORlNfSShsby0+cGxoX2lub2RlKS0+bGF5b3V0ID0gTlVMTDsKKwlrZnJlZShsbyk7CiB9CiAKIHN0YXRpYyB2b2lkCiBwdXRfbGF5b3V0X2hkcl9sb2NrZWQoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8pCiB7Ci0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZsby0+aW5vZGUtPmlfbG9jayk7Ci0JQlVHX09OKGxvLT5yZWZjb3VudCA9PSAwKTsKLQotCWxvLT5yZWZjb3VudC0tOwotCWlmICghbG8tPnJlZmNvdW50KSB7Ci0JCWRwcmludGsoIiVzOiBmcmVlaW5nIGxheW91dCBjYWNoZSAlcFxuIiwgX19mdW5jX18sIGxvKTsKLQkJQlVHX09OKCFsaXN0X2VtcHR5KCZsby0+bGF5b3V0cykpOwotCQlORlNfSShsby0+aW5vZGUpLT5sYXlvdXQgPSBOVUxMOwotCQlrZnJlZShsbyk7Ci0JfQorCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZsby0+cGxoX3JlZmNvdW50KSkKKwkJZGVzdHJveV9sYXlvdXRfaGRyKGxvKTsKIH0KIAogdm9pZAotcHV0X2xheW91dF9oZHIoc3RydWN0IGlub2RlICppbm9kZSkKK3B1dF9sYXlvdXRfaGRyKHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvKQogewotCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JcHV0X2xheW91dF9oZHJfbG9ja2VkKE5GU19JKGlub2RlKS0+bGF5b3V0KTsKLQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGxvLT5wbGhfaW5vZGU7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmbG8tPnBsaF9yZWZjb3VudCwgJmlub2RlLT5pX2xvY2spKSB7CisJCWRlc3Ryb3lfbGF5b3V0X2hkcihsbyk7CisJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCiBpbml0X2xzZWcoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnKQogewotCUlOSVRfTElTVF9IRUFEKCZsc2VnLT5maV9saXN0KTsKLQlrcmVmX2luaXQoJmxzZWctPmtyZWYpOwotCWxzZWctPmxheW91dCA9IGxvOworCUlOSVRfTElTVF9IRUFEKCZsc2VnLT5wbHNfbGlzdCk7CisJYXRvbWljX3NldCgmbHNlZy0+cGxzX3JlZmNvdW50LCAxKTsKKwlzbXBfbWIoKTsKKwlzZXRfYml0KE5GU19MU0VHX1ZBTElELCAmbHNlZy0+cGxzX2ZsYWdzKTsKKwlsc2VnLT5wbHNfbGF5b3V0ID0gbG87CiB9CiAKLS8qIENhbGxlZCB3aXRob3V0IGlfbG9jayBoZWxkLCBhcyB0aGUgZnJlZV9sc2VnIGNhbGwgbWF5IHNsZWVwICovCi1zdGF0aWMgdm9pZAotZGVzdHJveV9sc2VnKHN0cnVjdCBrcmVmICprcmVmKQorc3RhdGljIHZvaWQgZnJlZV9sc2VnKHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnKQogewotCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnID0KLQkJY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50LCBrcmVmKTsKLQlzdHJ1Y3QgaW5vZGUgKmlubyA9IGxzZWctPmxheW91dC0+aW5vZGU7CisJc3RydWN0IGlub2RlICppbm8gPSBsc2VnLT5wbHNfbGF5b3V0LT5wbGhfaW5vZGU7CiAKLQlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKIAlORlNfU0VSVkVSKGlubyktPnBuZnNfY3Vycl9sZC0+ZnJlZV9sc2VnKGxzZWcpOwotCS8qIE1hdGNoZWQgYnkgZ2V0X2xheW91dF9oZHJfbG9ja2VkIGluIHBuZnNfaW5zZXJ0X2xheW91dCAqLwotCXB1dF9sYXlvdXRfaGRyKGlubyk7CisJLyogTWF0Y2hlZCBieSBnZXRfbGF5b3V0X2hkciBpbiBwbmZzX2luc2VydF9sYXlvdXQgKi8KKwlwdXRfbGF5b3V0X2hkcihORlNfSShpbm8pLT5sYXlvdXQpOwogfQogCi1zdGF0aWMgdm9pZAotcHV0X2xzZWcoc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcpCisvKiBUaGUgdXNlIG9mIHRtcF9saXN0IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHBuZnNfY3Vycl9sZC0+ZnJlZV9sc2VnCisgKiBjb3VsZCBzbGVlcCwgc28gbXVzdCBiZSBjYWxsZWQgb3V0c2lkZSBvZiB0aGUgbG9jay4KKyAqIFJldHVybnMgMSBpZiBvYmplY3Qgd2FzIHJlbW92ZWQsIG90aGVyd2lzZSByZXR1cm4gMC4KKyAqLworc3RhdGljIGludAorcHV0X2xzZWdfbG9ja2VkKHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLAorCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXBfbGlzdCkKIHsKLQlpZiAoIWxzZWcpCi0JCXJldHVybjsKKwlkcHJpbnRrKCIlczogbHNlZyAlcCByZWYgJWQgdmFsaWQgJWRcbiIsIF9fZnVuY19fLCBsc2VnLAorCQlhdG9taWNfcmVhZCgmbHNlZy0+cGxzX3JlZmNvdW50KSwKKwkJdGVzdF9iaXQoTkZTX0xTRUdfVkFMSUQsICZsc2VnLT5wbHNfZmxhZ3MpKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbHNlZy0+cGxzX3JlZmNvdW50KSkgeworCQlzdHJ1Y3QgaW5vZGUgKmlubyA9IGxzZWctPnBsc19sYXlvdXQtPnBsaF9pbm9kZTsKIAotCWRwcmludGsoIiVzOiBsc2VnICVwIHJlZiAlZFxuIiwgX19mdW5jX18sIGxzZWcsCi0JCWF0b21pY19yZWFkKCZsc2VnLT5rcmVmLnJlZmNvdW50KSk7Ci0Ja3JlZl9wdXQoJmxzZWctPmtyZWYsIGRlc3Ryb3lfbHNlZyk7CisJCUJVR19PTih0ZXN0X2JpdChORlNfTFNFR19WQUxJRCwgJmxzZWctPnBsc19mbGFncykpOworCQlsaXN0X2RlbCgmbHNlZy0+cGxzX2xpc3QpOworCQlpZiAobGlzdF9lbXB0eSgmbHNlZy0+cGxzX2xheW91dC0+cGxoX3NlZ3MpKSB7CisJCQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOworCisJCQljbHAgPSBORlNfU0VSVkVSKGlubyktPm5mc19jbGllbnQ7CisJCQlzcGluX2xvY2soJmNscC0+Y2xfbG9jayk7CisJCQkvKiBMaXN0IGRvZXMgbm90IHRha2UgYSByZWZlcmVuY2UsIHNvIG5vIG5lZWQgZm9yIHB1dCBoZXJlICovCisJCQlsaXN0X2RlbF9pbml0KCZsc2VnLT5wbHNfbGF5b3V0LT5wbGhfbGF5b3V0cyk7CisJCQlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKKwkJCWNsZWFyX2JpdChORlNfTEFZT1VUX0JVTEtfUkVDQUxMLCAmbHNlZy0+cGxzX2xheW91dC0+cGxoX2ZsYWdzKTsKKwkJfQorCQlycGNfd2FrZV91cCgmTkZTX1NFUlZFUihpbm8pLT5yb2NfcnBjd2FpdHEpOworCQlsaXN0X2FkZCgmbHNlZy0+cGxzX2xpc3QsIHRtcF9saXN0KTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotcG5mc19jbGVhcl9sc2VnX2xpc3Qoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sIHN0cnVjdCBsaXN0X2hlYWQgKnRtcF9saXN0KQorc3RhdGljIGJvb2wKK3Nob3VsZF9mcmVlX2xzZWcodTMyIGxzZWdfaW9tb2RlLCB1MzIgcmVjYWxsX2lvbW9kZSkKK3sKKwlyZXR1cm4gKHJlY2FsbF9pb21vZGUgPT0gSU9NT0RFX0FOWSB8fAorCQlsc2VnX2lvbW9kZSA9PSByZWNhbGxfaW9tb2RlKTsKK30KKworLyogUmV0dXJucyAxIGlmIGxzZWcgaXMgcmVtb3ZlZCBmcm9tIGxpc3QsIDAgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IG1hcmtfbHNlZ19pbnZhbGlkKHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLAorCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXBfbGlzdCkKK3sKKwlpbnQgcnYgPSAwOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChORlNfTFNFR19WQUxJRCwgJmxzZWctPnBsc19mbGFncykpIHsKKwkJLyogUmVtb3ZlIHRoZSByZWZlcmVuY2Uga2VlcGluZyB0aGUgbHNlZyBpbiB0aGUKKwkJICogbGlzdC4gIEl0IHdpbGwgbm93IGJlIHJlbW92ZWQgd2hlbiBhbGwKKwkJICogb3V0c3RhbmRpbmcgaW8gaXMgZmluaXNoZWQuCisJCSAqLworCQlydiA9IHB1dF9sc2VnX2xvY2tlZChsc2VnLCB0bXBfbGlzdCk7CisJfQorCXJldHVybiBydjsKK30KKworLyogUmV0dXJucyBjb3VudCBvZiBudW1iZXIgb2YgbWF0Y2hpbmcgaW52YWxpZCBsc2VncyByZW1haW5pbmcgaW4gbGlzdAorICogYWZ0ZXIgY2FsbC4KKyAqLworaW50CittYXJrX21hdGNoaW5nX2xzZWdzX2ludmFsaWQoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sCisJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqdG1wX2xpc3QsCisJCQkgICAgdTMyIGlvbW9kZSkKIHsKIAlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywgKm5leHQ7Ci0Jc3RydWN0IG5mc19jbGllbnQgKmNscDsKKwlpbnQgaW52YWxpZCA9IDAsIHJlbW92ZWQgPSAwOwogCiAJZHByaW50aygiJXM6QmVnaW4gbG8gJXBcbiIsIF9fZnVuY19fLCBsbyk7CiAKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmxvLT5pbm9kZS0+aV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNlZywgbmV4dCwgJmxvLT5zZWdzLCBmaV9saXN0KSB7Ci0JCWRwcmludGsoIiVzOiBmcmVlaW5nIGxzZWcgJXBcbiIsIF9fZnVuY19fLCBsc2VnKTsKLQkJbGlzdF9tb3ZlKCZsc2VnLT5maV9saXN0LCB0bXBfbGlzdCk7Ci0JfQotCWNscCA9IE5GU19TRVJWRVIobG8tPmlub2RlKS0+bmZzX2NsaWVudDsKLQlzcGluX2xvY2soJmNscC0+Y2xfbG9jayk7Ci0JLyogTGlzdCBkb2VzIG5vdCB0YWtlIGEgcmVmZXJlbmNlLCBzbyBubyBuZWVkIGZvciBwdXQgaGVyZSAqLwotCWxpc3RfZGVsX2luaXQoJmxvLT5sYXlvdXRzKTsKLQlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKLQl3cml0ZV9zZXFsb2NrKCZsby0+c2VxbG9jayk7Ci0JY2xlYXJfYml0KE5GU19MQVlPVVRfU1RBVEVJRF9TRVQsICZsby0+c3RhdGUpOwotCXdyaXRlX3NlcXVubG9jaygmbG8tPnNlcWxvY2spOwotCi0JZHByaW50aygiJXM6UmV0dXJuXG4iLCBfX2Z1bmNfXyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzZWcsIG5leHQsICZsby0+cGxoX3NlZ3MsIHBsc19saXN0KQorCQlpZiAoc2hvdWxkX2ZyZWVfbHNlZyhsc2VnLT5wbHNfcmFuZ2UuaW9tb2RlLCBpb21vZGUpKSB7CisJCQlkcHJpbnRrKCIlczogZnJlZWluZyBsc2VnICVwIGlvbW9kZSAlZCAiCisJCQkJIm9mZnNldCAlbGx1IGxlbmd0aCAlbGx1XG4iLCBfX2Z1bmNfXywKKwkJCQlsc2VnLCBsc2VnLT5wbHNfcmFuZ2UuaW9tb2RlLCBsc2VnLT5wbHNfcmFuZ2Uub2Zmc2V0LAorCQkJCWxzZWctPnBsc19yYW5nZS5sZW5ndGgpOworCQkJaW52YWxpZCsrOworCQkJcmVtb3ZlZCArPSBtYXJrX2xzZWdfaW52YWxpZChsc2VnLCB0bXBfbGlzdCk7CisJCX0KKwlkcHJpbnRrKCIlczpSZXR1cm4gJWlcbiIsIF9fZnVuY19fLCBpbnZhbGlkIC0gcmVtb3ZlZCk7CisJcmV0dXJuIGludmFsaWQgLSByZW1vdmVkOwogfQogCi1zdGF0aWMgdm9pZAotcG5mc19mcmVlX2xzZWdfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICp0bXBfbGlzdCkKK3ZvaWQKK3BuZnNfZnJlZV9sc2VnX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZnJlZV9tZSkKIHsKLQlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZzsKKwlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywgKnRtcDsKIAotCXdoaWxlICghbGlzdF9lbXB0eSh0bXBfbGlzdCkpIHsKLQkJbHNlZyA9IGxpc3RfZW50cnkodG1wX2xpc3QtPm5leHQsIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50LAotCQkJCWZpX2xpc3QpOwotCQlkcHJpbnRrKCIlcyBjYWxsaW5nIHB1dF9sc2VnIG9uICVwXG4iLCBfX2Z1bmNfXywgbHNlZyk7Ci0JCWxpc3RfZGVsKCZsc2VnLT5maV9saXN0KTsKLQkJcHV0X2xzZWcobHNlZyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzZWcsIHRtcCwgZnJlZV9tZSwgcGxzX2xpc3QpIHsKKwkJbGlzdF9kZWwoJmxzZWctPnBsc19saXN0KTsKKwkJZnJlZV9sc2VnKGxzZWcpOwogCX0KIH0KIApAQCAtMjg4LDcgKzMzMiw4IEBACiAJc3Bpbl9sb2NrKCZuZnNpLT52ZnNfaW5vZGUuaV9sb2NrKTsKIAlsbyA9IG5mc2ktPmxheW91dDsKIAlpZiAobG8pIHsKLQkJcG5mc19jbGVhcl9sc2VnX2xpc3QobG8sICZ0bXBfbGlzdCk7CisJCXNldF9iaXQoTkZTX0xBWU9VVF9ERVNUUk9ZRUQsICZuZnNpLT5sYXlvdXQtPnBsaF9mbGFncyk7CisJCW1hcmtfbWF0Y2hpbmdfbHNlZ3NfaW52YWxpZChsbywgJnRtcF9saXN0LCBJT01PREVfQU5ZKTsKIAkJLyogTWF0Y2hlZCBieSByZWZjb3VudCBzZXQgdG8gMSBpbiBhbGxvY19pbml0X2xheW91dF9oZHIgKi8KIAkJcHV0X2xheW91dF9oZHJfbG9ja2VkKGxvKTsKIAl9CkBAIC0zMTIsNzYgKzM1Nyw4MCBAQAogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0bXBfbGlzdCkpIHsKIAkJbG8gPSBsaXN0X2VudHJ5KHRtcF9saXN0Lm5leHQsIHN0cnVjdCBwbmZzX2xheW91dF9oZHIsCi0JCQkJbGF5b3V0cyk7CisJCQkJcGxoX2xheW91dHMpOwogCQlkcHJpbnRrKCIlcyBmcmVlaW5nIGxheW91dCBmb3IgaW5vZGUgJWx1XG4iLCBfX2Z1bmNfXywKLQkJCWxvLT5pbm9kZS0+aV9pbm8pOwotCQlwbmZzX2Rlc3Ryb3lfbGF5b3V0KE5GU19JKGxvLT5pbm9kZSkpOworCQkJbG8tPnBsaF9pbm9kZS0+aV9pbm8pOworCQlwbmZzX2Rlc3Ryb3lfbGF5b3V0KE5GU19JKGxvLT5wbGhfaW5vZGUpKTsKIAl9CiB9CiAKLS8qIHVwZGF0ZSBsby0+c3RhdGVpZCB3aXRoIG5ldyBpZiBpcyBtb3JlIHJlY2VudAotICoKLSAqIGxvLT5zdGF0ZWlkIGNvdWxkIGJlIHRoZSBvcGVuIHN0YXRlaWQsIGluIHdoaWNoIGNhc2Ugd2UganVzdCB1c2Ugd2hhdCBnaXZlbi4KLSAqLwotc3RhdGljIHZvaWQKLXBuZnNfc2V0X2xheW91dF9zdGF0ZWlkKHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvLAotCQkJY29uc3QgbmZzNF9zdGF0ZWlkICpuZXcpCi17Ci0JbmZzNF9zdGF0ZWlkICpvbGQgPSAmbG8tPnN0YXRlaWQ7Ci0JYm9vbCBvdmVyd3JpdGUgPSBmYWxzZTsKLQotCXdyaXRlX3NlcWxvY2soJmxvLT5zZXFsb2NrKTsKLQlpZiAoIXRlc3RfYml0KE5GU19MQVlPVVRfU1RBVEVJRF9TRVQsICZsby0+c3RhdGUpIHx8Ci0JICAgIG1lbWNtcChvbGQtPnN0YXRlaWQub3RoZXIsIG5ldy0+c3RhdGVpZC5vdGhlciwgc2l6ZW9mKG5ldy0+c3RhdGVpZC5vdGhlcikpKQotCQlvdmVyd3JpdGUgPSB0cnVlOwotCWVsc2UgewotCQl1MzIgb2xkc2VxLCBuZXdzZXE7Ci0KLQkJb2xkc2VxID0gYmUzMl90b19jcHUob2xkLT5zdGF0ZWlkLnNlcWlkKTsKLQkJbmV3c2VxID0gYmUzMl90b19jcHUobmV3LT5zdGF0ZWlkLnNlcWlkKTsKLQkJaWYgKChpbnQpKG5ld3NlcSAtIG9sZHNlcSkgPiAwKQotCQkJb3ZlcndyaXRlID0gdHJ1ZTsKLQl9Ci0JaWYgKG92ZXJ3cml0ZSkKLQkJbWVtY3B5KCZvbGQtPnN0YXRlaWQsICZuZXctPnN0YXRlaWQsIHNpemVvZihuZXctPnN0YXRlaWQpKTsKLQl3cml0ZV9zZXF1bmxvY2soJmxvLT5zZXFsb2NrKTsKLX0KLQotc3RhdGljIHZvaWQKLXBuZnNfbGF5b3V0X2Zyb21fb3Blbl9zdGF0ZWlkKHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvLAotCQkJICAgICAgc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlKQotewotCWludCBzZXE7Ci0KLQlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKLQl3cml0ZV9zZXFsb2NrKCZsby0+c2VxbG9jayk7Ci0JZG8gewotCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZzdGF0ZS0+c2VxbG9jayk7Ci0JCW1lbWNweShsby0+c3RhdGVpZC5kYXRhLCBzdGF0ZS0+c3RhdGVpZC5kYXRhLAotCQkgICAgICAgc2l6ZW9mKHN0YXRlLT5zdGF0ZWlkLmRhdGEpKTsKLQl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZzdGF0ZS0+c2VxbG9jaywgc2VxKSk7Ci0Jc2V0X2JpdChORlNfTEFZT1VUX1NUQVRFSURfU0VULCAmbG8tPnN0YXRlKTsKLQl3cml0ZV9zZXF1bmxvY2soJmxvLT5zZXFsb2NrKTsKLQlkcHJpbnRrKCI8LS0gJXNcbiIsIF9fZnVuY19fKTsKLX0KLQorLyogdXBkYXRlIGxvLT5wbGhfc3RhdGVpZCB3aXRoIG5ldyBpZiBpcyBtb3JlIHJlY2VudCAqLwogdm9pZAotcG5mc19nZXRfbGF5b3V0X3N0YXRlaWQobmZzNF9zdGF0ZWlkICpkc3QsIHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvLAotCQkJc3RydWN0IG5mczRfc3RhdGUgKm9wZW5fc3RhdGUpCitwbmZzX3NldF9sYXlvdXRfc3RhdGVpZChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbywgY29uc3QgbmZzNF9zdGF0ZWlkICpuZXcsCisJCQlib29sIHVwZGF0ZV9iYXJyaWVyKQogewotCWludCBzZXE7CisJdTMyIG9sZHNlcSwgbmV3c2VxOworCisJb2xkc2VxID0gYmUzMl90b19jcHUobG8tPnBsaF9zdGF0ZWlkLnN0YXRlaWQuc2VxaWQpOworCW5ld3NlcSA9IGJlMzJfdG9fY3B1KG5ldy0+c3RhdGVpZC5zZXFpZCk7CisJaWYgKChpbnQpKG5ld3NlcSAtIG9sZHNlcSkgPiAwKSB7CisJCW1lbWNweSgmbG8tPnBsaF9zdGF0ZWlkLCAmbmV3LT5zdGF0ZWlkLCBzaXplb2YobmV3LT5zdGF0ZWlkKSk7CisJCWlmICh1cGRhdGVfYmFycmllcikgeworCQkJdTMyIG5ld19iYXJyaWVyID0gYmUzMl90b19jcHUobmV3LT5zdGF0ZWlkLnNlcWlkKTsKKworCQkJaWYgKChpbnQpKG5ld19iYXJyaWVyIC0gbG8tPnBsaF9iYXJyaWVyKSkKKwkJCQlsby0+cGxoX2JhcnJpZXIgPSBuZXdfYmFycmllcjsKKwkJfSBlbHNlIHsKKwkJCS8qIEJlY2F1c2Ugb2Ygd3JhcGFyb3VuZCwgd2Ugd2FudCB0byBrZWVwIHRoZSBiYXJyaWVyCisJCQkgKiAiY2xvc2UiIHRvIHRoZSBjdXJyZW50IHNlcWlkcy4gIEl0IG5lZWRzIHRvIGJlCisJCQkgKiB3aXRoaW4gMioqMzEgdG8gY291bnQgYXMgImJlaGluZCIsIHNvIGlmIGl0CisJCQkgKiBnZXRzIHRvbyBuZWFyIHRoYXQgbGltaXQsIGdpdmUgdXMgYSBsaXRsZSBsZWV3YXkKKwkJCSAqIGFuZCBicmluZyBpdCB0byB3aXRoaW4gMioqMzAuCisJCQkgKiBOT1RFIC0gYW5kIHllcywgdGhpcyBpcyBhbGwgdW5zaWduZWQgYXJpdGhtZXRpYy4KKwkJCSAqLworCQkJaWYgKHVubGlrZWx5KChuZXdzZXEgLSBsby0+cGxoX2JhcnJpZXIpID4gKDMgPDwgMjkpKSkKKwkJCQlsby0+cGxoX2JhcnJpZXIgPSBuZXdzZXEgLSAoMSA8PCAzMCk7CisJCX0KKwl9Cit9CisKKy8qIGxnZXQgaXMgc2V0IHRvIDEgaWYgY2FsbGVkIGZyb20gaW5zaWRlIHNlbmRfbGF5b3V0Z2V0IGNhbGwgY2hhaW4gKi8KK3N0YXRpYyBib29sCitwbmZzX2xheW91dGdldHNfYmxvY2tlZChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbywgbmZzNF9zdGF0ZWlkICpzdGF0ZWlkLAorCQkJaW50IGxnZXQpCit7CisJaWYgKChzdGF0ZWlkKSAmJgorCSAgICAoaW50KShsby0+cGxoX2JhcnJpZXIgLSBiZTMyX3RvX2NwdShzdGF0ZWlkLT5zdGF0ZWlkLnNlcWlkKSkgPj0gMCkKKwkJcmV0dXJuIHRydWU7CisJcmV0dXJuIGxvLT5wbGhfYmxvY2tfbGdldHMgfHwKKwkJdGVzdF9iaXQoTkZTX0xBWU9VVF9CVUxLX1JFQ0FMTCwgJmxvLT5wbGhfZmxhZ3MpIHx8CisJCShsaXN0X2VtcHR5KCZsby0+cGxoX3NlZ3MpICYmCisJCSAoYXRvbWljX3JlYWQoJmxvLT5wbGhfb3V0c3RhbmRpbmcpID4gbGdldCkpOworfQorCitpbnQKK3BuZnNfY2hvb3NlX2xheW91dGdldF9zdGF0ZWlkKG5mczRfc3RhdGVpZCAqZHN0LCBzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbywKKwkJCSAgICAgIHN0cnVjdCBuZnM0X3N0YXRlICpvcGVuX3N0YXRlKQoreworCWludCBzdGF0dXMgPSAwOwogCiAJZHByaW50aygiLS0+ICVzXG4iLCBfX2Z1bmNfXyk7Ci0JZG8gewotCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZsby0+c2VxbG9jayk7Ci0JCWlmICghdGVzdF9iaXQoTkZTX0xBWU9VVF9TVEFURUlEX1NFVCwgJmxvLT5zdGF0ZSkpIHsKLQkJCS8qIFRoaXMgd2lsbCB0cmlnZ2VyIHJldHJ5IG9mIHRoZSByZWFkICovCi0JCQlwbmZzX2xheW91dF9mcm9tX29wZW5fc3RhdGVpZChsbywgb3Blbl9zdGF0ZSk7Ci0JCX0gZWxzZQotCQkJbWVtY3B5KGRzdC0+ZGF0YSwgbG8tPnN0YXRlaWQuZGF0YSwKLQkJCSAgICAgICBzaXplb2YobG8tPnN0YXRlaWQuZGF0YSkpOwotCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJmxvLT5zZXFsb2NrLCBzZXEpKTsKKwlzcGluX2xvY2soJmxvLT5wbGhfaW5vZGUtPmlfbG9jayk7CisJaWYgKHBuZnNfbGF5b3V0Z2V0c19ibG9ja2VkKGxvLCBOVUxMLCAxKSkgeworCQlzdGF0dXMgPSAtRUFHQUlOOworCX0gZWxzZSBpZiAobGlzdF9lbXB0eSgmbG8tPnBsaF9zZWdzKSkgeworCQlpbnQgc2VxOworCisJCWRvIHsKKwkJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJm9wZW5fc3RhdGUtPnNlcWxvY2spOworCQkJbWVtY3B5KGRzdC0+ZGF0YSwgb3Blbl9zdGF0ZS0+c3RhdGVpZC5kYXRhLAorCQkJICAgICAgIHNpemVvZihvcGVuX3N0YXRlLT5zdGF0ZWlkLmRhdGEpKTsKKwkJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmb3Blbl9zdGF0ZS0+c2VxbG9jaywgc2VxKSk7CisJfSBlbHNlCisJCW1lbWNweShkc3QtPmRhdGEsIGxvLT5wbGhfc3RhdGVpZC5kYXRhLCBzaXplb2YobG8tPnBsaF9zdGF0ZWlkLmRhdGEpKTsKKwlzcGluX3VubG9jaygmbG8tPnBsaF9pbm9kZS0+aV9sb2NrKTsKIAlkcHJpbnRrKCI8LS0gJXNcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiAvKgpAQCAtMzk1LDcgKzQ0NCw3IEBACiAJICAgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKIAkgICB1MzIgaW9tb2RlKQogewotCXN0cnVjdCBpbm9kZSAqaW5vID0gbG8tPmlub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vID0gbG8tPnBsaF9pbm9kZTsKIAlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NFUlZFUihpbm8pOwogCXN0cnVjdCBuZnM0X2xheW91dGdldCAqbGdwOwogCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnID0gTlVMTDsKQEAgLTQwNCwxMCArNDUzLDggQEAKIAogCUJVR19PTihjdHggPT0gTlVMTCk7CiAJbGdwID0ga3phbGxvYyhzaXplb2YoKmxncCksIEdGUF9LRVJORUwpOwotCWlmIChsZ3AgPT0gTlVMTCkgewotCQlwdXRfbGF5b3V0X2hkcihsby0+aW5vZGUpOworCWlmIChsZ3AgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7Ci0JfQogCWxncC0+YXJncy5taW5sZW5ndGggPSBORlM0X01BWF9VSU5UNjQ7CiAJbGdwLT5hcmdzLm1heGNvdW50ID0gUE5GU19MQVlPVVRfTUFYU0laRTsKIAlsZ3AtPmFyZ3MucmFuZ2UuaW9tb2RlID0gaW9tb2RlOwpAQCAtNDI0LDExICs0NzEsODggQEAKIAluZnM0X3Byb2NfbGF5b3V0Z2V0KGxncCk7CiAJaWYgKCFsc2VnKSB7CiAJCS8qIHJlbWVtYmVyIHRoYXQgTEFZT1VUR0VUIGZhaWxlZCBhbmQgc3VzcGVuZCB0cnlpbmcgKi8KLQkJc2V0X2JpdChsb19mYWlsX2JpdChpb21vZGUpLCAmbG8tPnN0YXRlKTsKKwkJc2V0X2JpdChsb19mYWlsX2JpdChpb21vZGUpLCAmbG8tPnBsaF9mbGFncyk7CiAJfQogCXJldHVybiBsc2VnOwogfQogCitib29sIHBuZnNfcm9jKHN0cnVjdCBpbm9kZSAqaW5vKQoreworCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvOworCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLCAqdG1wOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJc3Bpbl9sb2NrKCZpbm8tPmlfbG9jayk7CisJbG8gPSBORlNfSShpbm8pLT5sYXlvdXQ7CisJaWYgKCFsbyB8fCAhdGVzdF9hbmRfY2xlYXJfYml0KE5GU19MQVlPVVRfUk9DLCAmbG8tPnBsaF9mbGFncykgfHwKKwkgICAgdGVzdF9iaXQoTkZTX0xBWU9VVF9CVUxLX1JFQ0FMTCwgJmxvLT5wbGhfZmxhZ3MpKQorCQlnb3RvIG91dF9ub2xheW91dDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNlZywgdG1wLCAmbG8tPnBsaF9zZWdzLCBwbHNfbGlzdCkKKwkJaWYgKHRlc3RfYml0KE5GU19MU0VHX1JPQywgJmxzZWctPnBsc19mbGFncykpIHsKKwkJCW1hcmtfbHNlZ19pbnZhbGlkKGxzZWcsICZ0bXBfbGlzdCk7CisJCQlmb3VuZCA9IHRydWU7CisJCX0KKwlpZiAoIWZvdW5kKQorCQlnb3RvIG91dF9ub2xheW91dDsKKwlsby0+cGxoX2Jsb2NrX2xnZXRzKys7CisJZ2V0X2xheW91dF9oZHIobG8pOyAvKiBtYXRjaGVkIGluIHBuZnNfcm9jX3JlbGVhc2UgKi8KKwlzcGluX3VubG9jaygmaW5vLT5pX2xvY2spOworCXBuZnNfZnJlZV9sc2VnX2xpc3QoJnRtcF9saXN0KTsKKwlyZXR1cm4gdHJ1ZTsKKworb3V0X25vbGF5b3V0OgorCXNwaW5fdW5sb2NrKCZpbm8tPmlfbG9jayk7CisJcmV0dXJuIGZhbHNlOworfQorCit2b2lkIHBuZnNfcm9jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm8pCit7CisJc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG87CisKKwlzcGluX2xvY2soJmluby0+aV9sb2NrKTsKKwlsbyA9IE5GU19JKGlubyktPmxheW91dDsKKwlsby0+cGxoX2Jsb2NrX2xnZXRzLS07CisJcHV0X2xheW91dF9oZHJfbG9ja2VkKGxvKTsKKwlzcGluX3VubG9jaygmaW5vLT5pX2xvY2spOworfQorCit2b2lkIHBuZnNfcm9jX3NldF9iYXJyaWVyKHN0cnVjdCBpbm9kZSAqaW5vLCB1MzIgYmFycmllcikKK3sKKwlzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbzsKKworCXNwaW5fbG9jaygmaW5vLT5pX2xvY2spOworCWxvID0gTkZTX0koaW5vKS0+bGF5b3V0OworCWlmICgoaW50KShiYXJyaWVyIC0gbG8tPnBsaF9iYXJyaWVyKSA+IDApCisJCWxvLT5wbGhfYmFycmllciA9IGJhcnJpZXI7CisJc3Bpbl91bmxvY2soJmluby0+aV9sb2NrKTsKK30KKworYm9vbCBwbmZzX3JvY19kcmFpbihzdHJ1Y3QgaW5vZGUgKmlubywgdTMyICpiYXJyaWVyKQoreworCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm8pOworCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnOworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCXNwaW5fbG9jaygmaW5vLT5pX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkobHNlZywgJm5mc2ktPmxheW91dC0+cGxoX3NlZ3MsIHBsc19saXN0KQorCQlpZiAodGVzdF9iaXQoTkZTX0xTRUdfUk9DLCAmbHNlZy0+cGxzX2ZsYWdzKSkgeworCQkJZm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwlpZiAoIWZvdW5kKSB7CisJCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvID0gbmZzaS0+bGF5b3V0OworCQl1MzIgY3VycmVudF9zZXFpZCA9IGJlMzJfdG9fY3B1KGxvLT5wbGhfc3RhdGVpZC5zdGF0ZWlkLnNlcWlkKTsKKworCQkvKiBTaW5jZSBjbG9zZSBkb2VzIG5vdCByZXR1cm4gYSBsYXlvdXQgc3RhdGVpZCBmb3IgdXNlIGFzCisJCSAqIGEgYmFycmllciwgd2UgY2hvb3NlIHRoZSB3b3JzdC1jYXNlIGJhcnJpZXIuCisJCSAqLworCQkqYmFycmllciA9IGN1cnJlbnRfc2VxaWQgKyBhdG9taWNfcmVhZCgmbG8tPnBsaF9vdXRzdGFuZGluZyk7CisJfQorCXNwaW5fdW5sb2NrKCZpbm8tPmlfbG9jayk7CisJcmV0dXJuIGZvdW5kOworfQorCiAvKgogICogQ29tcGFyZSB0d28gbGF5b3V0IHNlZ21lbnRzIGZvciBzb3J0aW5nIGludG8gbGF5b3V0IGNhY2hlLgogICogV2Ugd2FudCB0byBwcmVmZXJlbnRpYWxseSByZXR1cm4gUlcgb3ZlciBSTyBsYXlvdXRzLCBzbyBlbnN1cmUgdGhvc2UKQEAgLTQ1MCwzNyArNTc0LDI5IEBACiAKIAlkcHJpbnRrKCIlczpCZWdpblxuIiwgX19mdW5jX18pOwogCi0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZsby0+aW5vZGUtPmlfbG9jayk7Ci0JaWYgKGxpc3RfZW1wdHkoJmxvLT5zZWdzKSkgewotCQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gTkZTX1NFUlZFUihsby0+aW5vZGUpLT5uZnNfY2xpZW50OwotCi0JCXNwaW5fbG9jaygmY2xwLT5jbF9sb2NrKTsKLQkJQlVHX09OKCFsaXN0X2VtcHR5KCZsby0+bGF5b3V0cykpOwotCQlsaXN0X2FkZF90YWlsKCZsby0+bGF5b3V0cywgJmNscC0+Y2xfbGF5b3V0cyk7Ci0JCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOwotCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxwLCAmbG8tPnNlZ3MsIGZpX2xpc3QpIHsKLQkJaWYgKGNtcF9sYXlvdXQobHAtPnJhbmdlLmlvbW9kZSwgbHNlZy0+cmFuZ2UuaW9tb2RlKSA+IDApCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZsby0+cGxoX2lub2RlLT5pX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkobHAsICZsby0+cGxoX3NlZ3MsIHBsc19saXN0KSB7CisJCWlmIChjbXBfbGF5b3V0KGxwLT5wbHNfcmFuZ2UuaW9tb2RlLCBsc2VnLT5wbHNfcmFuZ2UuaW9tb2RlKSA+IDApCiAJCQljb250aW51ZTsKLQkJbGlzdF9hZGRfdGFpbCgmbHNlZy0+ZmlfbGlzdCwgJmxwLT5maV9saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmbHNlZy0+cGxzX2xpc3QsICZscC0+cGxzX2xpc3QpOwogCQlkcHJpbnRrKCIlczogaW5zZXJ0ZWQgbHNlZyAlcCAiCiAJCQkiaW9tb2RlICVkIG9mZnNldCAlbGx1IGxlbmd0aCAlbGx1IGJlZm9yZSAiCiAJCQkibHAgJXAgaW9tb2RlICVkIG9mZnNldCAlbGx1IGxlbmd0aCAlbGx1XG4iLAotCQkJX19mdW5jX18sIGxzZWcsIGxzZWctPnJhbmdlLmlvbW9kZSwKLQkJCWxzZWctPnJhbmdlLm9mZnNldCwgbHNlZy0+cmFuZ2UubGVuZ3RoLAotCQkJbHAsIGxwLT5yYW5nZS5pb21vZGUsIGxwLT5yYW5nZS5vZmZzZXQsCi0JCQlscC0+cmFuZ2UubGVuZ3RoKTsKKwkJCV9fZnVuY19fLCBsc2VnLCBsc2VnLT5wbHNfcmFuZ2UuaW9tb2RlLAorCQkJbHNlZy0+cGxzX3JhbmdlLm9mZnNldCwgbHNlZy0+cGxzX3JhbmdlLmxlbmd0aCwKKwkJCWxwLCBscC0+cGxzX3JhbmdlLmlvbW9kZSwgbHAtPnBsc19yYW5nZS5vZmZzZXQsCisJCQlscC0+cGxzX3JhbmdlLmxlbmd0aCk7CiAJCWZvdW5kID0gMTsKIAkJYnJlYWs7CiAJfQogCWlmICghZm91bmQpIHsKLQkJbGlzdF9hZGRfdGFpbCgmbHNlZy0+ZmlfbGlzdCwgJmxvLT5zZWdzKTsKKwkJbGlzdF9hZGRfdGFpbCgmbHNlZy0+cGxzX2xpc3QsICZsby0+cGxoX3NlZ3MpOwogCQlkcHJpbnRrKCIlczogaW5zZXJ0ZWQgbHNlZyAlcCAiCiAJCQkiaW9tb2RlICVkIG9mZnNldCAlbGx1IGxlbmd0aCAlbGx1IGF0IHRhaWxcbiIsCi0JCQlfX2Z1bmNfXywgbHNlZywgbHNlZy0+cmFuZ2UuaW9tb2RlLAotCQkJbHNlZy0+cmFuZ2Uub2Zmc2V0LCBsc2VnLT5yYW5nZS5sZW5ndGgpOworCQkJX19mdW5jX18sIGxzZWcsIGxzZWctPnBsc19yYW5nZS5pb21vZGUsCisJCQlsc2VnLT5wbHNfcmFuZ2Uub2Zmc2V0LCBsc2VnLT5wbHNfcmFuZ2UubGVuZ3RoKTsKIAl9Ci0JZ2V0X2xheW91dF9oZHJfbG9ja2VkKGxvKTsKKwlnZXRfbGF5b3V0X2hkcihsbyk7CiAKIAlkcHJpbnRrKCIlczpSZXR1cm5cbiIsIF9fZnVuY19fKTsKIH0KQEAgLTQ5MywxMSArNjA5LDExIEBACiAJbG8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsbykKIAkJcmV0dXJuIE5VTEw7Ci0JbG8tPnJlZmNvdW50ID0gMTsKLQlJTklUX0xJU1RfSEVBRCgmbG8tPmxheW91dHMpOwotCUlOSVRfTElTVF9IRUFEKCZsby0+c2Vncyk7Ci0Jc2VxbG9ja19pbml0KCZsby0+c2VxbG9jayk7Ci0JbG8tPmlub2RlID0gaW5vOworCWF0b21pY19zZXQoJmxvLT5wbGhfcmVmY291bnQsIDEpOworCUlOSVRfTElTVF9IRUFEKCZsby0+cGxoX2xheW91dHMpOworCUlOSVRfTElTVF9IRUFEKCZsby0+cGxoX3NlZ3MpOworCUlOSVRfTElTVF9IRUFEKCZsby0+cGxoX2J1bGtfcmVjYWxsKTsKKwlsby0+cGxoX2lub2RlID0gaW5vOwogCXJldHVybiBsbzsKIH0KIApAQCAtNTEwLDkgKzYyNiwxMiBAQAogCWRwcmludGsoIiVzIEJlZ2luIGlubz0lcCBsYXlvdXQ9JXBcbiIsIF9fZnVuY19fLCBpbm8sIG5mc2ktPmxheW91dCk7CiAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmluby0+aV9sb2NrKTsKLQlpZiAobmZzaS0+bGF5b3V0KQotCQlyZXR1cm4gbmZzaS0+bGF5b3V0OwotCisJaWYgKG5mc2ktPmxheW91dCkgeworCQlpZiAodGVzdF9iaXQoTkZTX0xBWU9VVF9ERVNUUk9ZRUQsICZuZnNpLT5sYXlvdXQtPnBsaF9mbGFncykpCisJCQlyZXR1cm4gTlVMTDsKKwkJZWxzZQorCQkJcmV0dXJuIG5mc2ktPmxheW91dDsKKwl9CiAJc3Bpbl91bmxvY2soJmluby0+aV9sb2NrKTsKIAluZXcgPSBhbGxvY19pbml0X2xheW91dF9oZHIoaW5vKTsKIAlzcGluX2xvY2soJmluby0+aV9sb2NrKTsKQEAgLTUzOCwzMSArNjU3LDMyIEBACiBzdGF0aWMgaW50CiBpc19tYXRjaGluZ19sc2VnKHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLCB1MzIgaW9tb2RlKQogewotCXJldHVybiAoaW9tb2RlICE9IElPTU9ERV9SVyB8fCBsc2VnLT5yYW5nZS5pb21vZGUgPT0gSU9NT0RFX1JXKTsKKwlyZXR1cm4gKGlvbW9kZSAhPSBJT01PREVfUlcgfHwgbHNlZy0+cGxzX3JhbmdlLmlvbW9kZSA9PSBJT01PREVfUlcpOwogfQogCiAvKgogICogbG9va3VwIHJhbmdlIGluIGxheW91dAogICovCiBzdGF0aWMgc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKgotcG5mc19oYXNfbGF5b3V0KHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvLCB1MzIgaW9tb2RlKQorcG5mc19maW5kX2xzZWcoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sIHUzMiBpb21vZGUpCiB7CiAJc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcsICpyZXQgPSBOVUxMOwogCiAJZHByaW50aygiJXM6QmVnaW5cbiIsIF9fZnVuY19fKTsKIAotCWFzc2VydF9zcGluX2xvY2tlZCgmbG8tPmlub2RlLT5pX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobHNlZywgJmxvLT5zZWdzLCBmaV9saXN0KSB7Ci0JCWlmIChpc19tYXRjaGluZ19sc2VnKGxzZWcsIGlvbW9kZSkpIHsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmxvLT5wbGhfaW5vZGUtPmlfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsc2VnLCAmbG8tPnBsaF9zZWdzLCBwbHNfbGlzdCkgeworCQlpZiAodGVzdF9iaXQoTkZTX0xTRUdfVkFMSUQsICZsc2VnLT5wbHNfZmxhZ3MpICYmCisJCSAgICBpc19tYXRjaGluZ19sc2VnKGxzZWcsIGlvbW9kZSkpIHsKIAkJCXJldCA9IGxzZWc7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoY21wX2xheW91dChpb21vZGUsIGxzZWctPnJhbmdlLmlvbW9kZSkgPiAwKQorCQlpZiAoY21wX2xheW91dChpb21vZGUsIGxzZWctPnBsc19yYW5nZS5pb21vZGUpID4gMCkKIAkJCWJyZWFrOwogCX0KIAogCWRwcmludGsoIiVzOlJldHVybiBsc2VnICVwIHJlZiAlZFxuIiwKLQkJX19mdW5jX18sIHJldCwgcmV0ID8gYXRvbWljX3JlYWQoJnJldC0+a3JlZi5yZWZjb3VudCkgOiAwKTsKKwkJX19mdW5jX18sIHJldCwgcmV0ID8gYXRvbWljX3JlYWQoJnJldC0+cGxzX3JlZmNvdW50KSA6IDApOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU3Niw2ICs2OTYsNyBAQAogCQkgICBlbnVtIHBuZnNfaW9tb2RlIGlvbW9kZSkKIHsKIAlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vKTsKKwlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gTkZTX1NFUlZFUihpbm8pLT5uZnNfY2xpZW50OwogCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvOwogCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnID0gTlVMTDsKIApAQCAtNTg4LDI1ICs3MDksNTMgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgbGF5b3V0IGZvciB0aGUgZ2l2ZW4gcmFuZ2UgYWxyZWFkeSBleGlzdHMgKi8KLQlsc2VnID0gcG5mc19oYXNfbGF5b3V0KGxvLCBpb21vZGUpOwotCWlmIChsc2VnKSB7Ci0JCWRwcmludGsoIiVzOiBVc2luZyBjYWNoZWQgbHNlZyAlcCBmb3IgaW9tb2RlICVkKVxuIiwKLQkJCV9fZnVuY19fLCBsc2VnLCBpb21vZGUpOworCS8qIERvIHdlIGV2ZW4gbmVlZCB0byBib3RoZXIgd2l0aCB0aGlzPyAqLworCWlmICh0ZXN0X2JpdChORlM0Q0xOVF9MQVlPVVRSRUNBTEwsICZjbHAtPmNsX3N0YXRlKSB8fAorCSAgICB0ZXN0X2JpdChORlNfTEFZT1VUX0JVTEtfUkVDQUxMLCAmbG8tPnBsaF9mbGFncykpIHsKKwkJZHByaW50aygiJXMgbWF0Y2hlcyByZWNhbGwsIHVzZSBNRFNcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQotCS8qIGlmIExBWU9VVEdFVCBhbHJlYWR5IGZhaWxlZCBvbmNlIHdlIGRvbid0IHRyeSBhZ2FpbiAqLwotCWlmICh0ZXN0X2JpdChsb19mYWlsX2JpdChpb21vZGUpLCAmbmZzaS0+bGF5b3V0LT5zdGF0ZSkpCisJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBsYXlvdXQgZm9yIHRoZSBnaXZlbiByYW5nZSBhbHJlYWR5IGV4aXN0cyAqLworCWxzZWcgPSBwbmZzX2ZpbmRfbHNlZyhsbywgaW9tb2RlKTsKKwlpZiAobHNlZykKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JZ2V0X2xheW91dF9oZHJfbG9ja2VkKGxvKTsgLyogTWF0Y2hlZCBpbiBuZnM0X2xheW91dGdldF9yZWxlYXNlICovCisJLyogaWYgTEFZT1VUR0VUIGFscmVhZHkgZmFpbGVkIG9uY2Ugd2UgZG9uJ3QgdHJ5IGFnYWluICovCisJaWYgKHRlc3RfYml0KGxvX2ZhaWxfYml0KGlvbW9kZSksICZuZnNpLT5sYXlvdXQtPnBsaF9mbGFncykpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWlmIChwbmZzX2xheW91dGdldHNfYmxvY2tlZChsbywgTlVMTCwgMCkpCisJCWdvdG8gb3V0X3VubG9jazsKKwlhdG9taWNfaW5jKCZsby0+cGxoX291dHN0YW5kaW5nKTsKKworCWdldF9sYXlvdXRfaGRyKGxvKTsKKwlpZiAobGlzdF9lbXB0eSgmbG8tPnBsaF9zZWdzKSkgeworCQkvKiBUaGUgbG8gbXVzdCBiZSBvbiB0aGUgY2xwIGxpc3QgaWYgdGhlcmUgaXMgYW55CisJCSAqIGNoYW5jZSBvZiBhIENCX0xBWU9VVFJFQ0FMTChGSUxFKSBjb21pbmcgaW4uCisJCSAqLworCQlzcGluX2xvY2soJmNscC0+Y2xfbG9jayk7CisJCUJVR19PTighbGlzdF9lbXB0eSgmbG8tPnBsaF9sYXlvdXRzKSk7CisJCWxpc3RfYWRkX3RhaWwoJmxvLT5wbGhfbGF5b3V0cywgJmNscC0+Y2xfbGF5b3V0cyk7CisJCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOworCX0KIAlzcGluX3VubG9jaygmaW5vLT5pX2xvY2spOwogCiAJbHNlZyA9IHNlbmRfbGF5b3V0Z2V0KGxvLCBjdHgsIGlvbW9kZSk7CisJaWYgKCFsc2VnKSB7CisJCXNwaW5fbG9jaygmaW5vLT5pX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmbG8tPnBsaF9zZWdzKSkgeworCQkJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOworCQkJbGlzdF9kZWxfaW5pdCgmbG8tPnBsaF9sYXlvdXRzKTsKKwkJCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOworCQkJY2xlYXJfYml0KE5GU19MQVlPVVRfQlVMS19SRUNBTEwsICZsby0+cGxoX2ZsYWdzKTsKKwkJfQorCQlzcGluX3VubG9jaygmaW5vLT5pX2xvY2spOworCX0KKwlhdG9taWNfZGVjKCZsby0+cGxoX291dHN0YW5kaW5nKTsKKwlwdXRfbGF5b3V0X2hkcihsbyk7CiBvdXQ6CiAJZHByaW50aygiJXMgZW5kLCBzdGF0ZSAweCVseCBsc2VnICVwXG4iLCBfX2Z1bmNfXywKLQkJbmZzaS0+bGF5b3V0LT5zdGF0ZSwgbHNlZyk7CisJCW5mc2ktPmxheW91dC0+cGxoX2ZsYWdzLCBsc2VnKTsKIAlyZXR1cm4gbHNlZzsKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2soJmluby0+aV9sb2NrKTsKQEAgLTYxOSw5ICs3NjgsMjEgQEAKIAlzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbyA9IE5GU19JKGxncC0+YXJncy5pbm9kZSktPmxheW91dDsKIAlzdHJ1Y3QgbmZzNF9sYXlvdXRnZXRfcmVzICpyZXMgPSAmbGdwLT5yZXM7CiAJc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWc7Ci0Jc3RydWN0IGlub2RlICppbm8gPSBsby0+aW5vZGU7CisJc3RydWN0IGlub2RlICppbm8gPSBsby0+cGxoX2lub2RlOworCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBORlNfU0VSVkVSKGlubyktPm5mc19jbGllbnQ7CiAJaW50IHN0YXR1cyA9IDA7CiAKKwkvKiBWZXJpZnkgd2UgZ290IHdoYXQgd2UgYXNrZWQgZm9yLgorCSAqIE5vdGUgdGhhdCBiZWNhdXNlIHRoZSB4ZHIgcGFyc2luZyBvbmx5IGFjY2VwdHMgYSBzaW5nbGUKKwkgKiBlbGVtZW50IGFycmF5LCB0aGlzIGNhbiBmYWlsIGV2ZW4gaWYgdGhlIHNlcnZlciBpcyBiZWhhdmluZworCSAqIGNvcnJlY3RseS4KKwkgKi8KKwlpZiAobGdwLT5hcmdzLnJhbmdlLmlvbW9kZSA+IHJlcy0+cmFuZ2UuaW9tb2RlIHx8CisJICAgIHJlcy0+cmFuZ2Uub2Zmc2V0ICE9IDAgfHwKKwkgICAgcmVzLT5yYW5nZS5sZW5ndGggIT0gTkZTNF9NQVhfVUlOVDY0KSB7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KIAkvKiBJbmplY3QgbGF5b3V0IGJsb2IgaW50byBJL08gZGV2aWNlIGRyaXZlciAqLwogCWxzZWcgPSBORlNfU0VSVkVSKGlubyktPnBuZnNfY3Vycl9sZC0+YWxsb2NfbHNlZyhsbywgcmVzKTsKIAlpZiAoIWxzZWcgfHwgSVNfRVJSKGxzZWcpKSB7CkBAIC02MzUsMTYgKzc5NiwzNyBAQAogCX0KIAogCXNwaW5fbG9jaygmaW5vLT5pX2xvY2spOworCWlmICh0ZXN0X2JpdChORlM0Q0xOVF9MQVlPVVRSRUNBTEwsICZjbHAtPmNsX3N0YXRlKSB8fAorCSAgICB0ZXN0X2JpdChORlNfTEFZT1VUX0JVTEtfUkVDQUxMLCAmbG8tPnBsaF9mbGFncykpIHsKKwkJZHByaW50aygiJXMgZm9yZ2V0IHJlcGx5IGR1ZSB0byByZWNhbGxcbiIsIF9fZnVuY19fKTsKKwkJZ290byBvdXRfZm9yZ2V0X3JlcGx5OworCX0KKworCWlmIChwbmZzX2xheW91dGdldHNfYmxvY2tlZChsbywgJnJlcy0+c3RhdGVpZCwgMSkpIHsKKwkJZHByaW50aygiJXMgZm9yZ2V0IHJlcGx5IGR1ZSB0byBzdGF0ZVxuIiwgX19mdW5jX18pOworCQlnb3RvIG91dF9mb3JnZXRfcmVwbHk7CisJfQogCWluaXRfbHNlZyhsbywgbHNlZyk7Ci0JbHNlZy0+cmFuZ2UgPSByZXMtPnJhbmdlOworCWxzZWctPnBsc19yYW5nZSA9IHJlcy0+cmFuZ2U7CiAJKmxncC0+bHNlZ3BwID0gbHNlZzsKIAlwbmZzX2luc2VydF9sYXlvdXQobG8sIGxzZWcpOwogCisJaWYgKHJlcy0+cmV0dXJuX29uX2Nsb3NlKSB7CisJCXNldF9iaXQoTkZTX0xTRUdfUk9DLCAmbHNlZy0+cGxzX2ZsYWdzKTsKKwkJc2V0X2JpdChORlNfTEFZT1VUX1JPQywgJmxvLT5wbGhfZmxhZ3MpOworCX0KKwogCS8qIERvbmUgcHJvY2Vzc2luZyBsYXlvdXRnZXQuIFNldCB0aGUgbGF5b3V0IHN0YXRlaWQgKi8KLQlwbmZzX3NldF9sYXlvdXRfc3RhdGVpZChsbywgJnJlcy0+c3RhdGVpZCk7CisJcG5mc19zZXRfbGF5b3V0X3N0YXRlaWQobG8sICZyZXMtPnN0YXRlaWQsIGZhbHNlKTsKIAlzcGluX3VubG9jaygmaW5vLT5pX2xvY2spOwogb3V0OgogCXJldHVybiBzdGF0dXM7CisKK291dF9mb3JnZXRfcmVwbHk6CisJc3Bpbl91bmxvY2soJmluby0+aV9sb2NrKTsKKwlsc2VnLT5wbHNfbGF5b3V0ID0gbG87CisJTkZTX1NFUlZFUihpbm8pLT5wbmZzX2N1cnJfbGQtPmZyZWVfbHNlZyhsc2VnKTsKKwlnb3RvIG91dDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL25mcy9wbmZzLmggYi9mcy9uZnMvcG5mcy5oCmluZGV4IGUxMjM2N2QuLmUyNjEyZWEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9wbmZzLmgKKysrIGIvZnMvbmZzL3BuZnMuaApAQCAtMzAsMTEgKzMwLDE3IEBACiAjaWZuZGVmIEZTX05GU19QTkZTX0gKICNkZWZpbmUgRlNfTkZTX1BORlNfSAogCitlbnVtIHsKKwlORlNfTFNFR19WQUxJRCA9IDAsCS8qIGNsZWFyZWQgd2hlbiBsc2VnIGlzIHJlY2FsbGVkL3JldHVybmVkICovCisJTkZTX0xTRUdfUk9DLAkJLyogcm9jIGJpdCByZWNlaXZlZCBmcm9tIHNlcnZlciAqLworfTsKKwogc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgewotCXN0cnVjdCBsaXN0X2hlYWQgZmlfbGlzdDsKLQlzdHJ1Y3QgcG5mc19sYXlvdXRfcmFuZ2UgcmFuZ2U7Ci0Jc3RydWN0IGtyZWYga3JlZjsKLQlzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsYXlvdXQ7CisJc3RydWN0IGxpc3RfaGVhZCBwbHNfbGlzdDsKKwlzdHJ1Y3QgcG5mc19sYXlvdXRfcmFuZ2UgcGxzX3JhbmdlOworCWF0b21pY190IHBsc19yZWZjb3VudDsKKwl1bnNpZ25lZCBsb25nIHBsc19mbGFnczsKKwlzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpwbHNfbGF5b3V0OwogfTsKIAogI2lmZGVmIENPTkZJR19ORlNfVjRfMQpAQCAtNDQsNyArNTAsOSBAQAogZW51bSB7CiAJTkZTX0xBWU9VVF9ST19GQUlMRUQgPSAwLAkvKiBnZXQgcm8gbGF5b3V0IGZhaWxlZCBzdG9wIHRyeWluZyAqLwogCU5GU19MQVlPVVRfUldfRkFJTEVELAkJLyogZ2V0IHJ3IGxheW91dCBmYWlsZWQgc3RvcCB0cnlpbmcgKi8KLQlORlNfTEFZT1VUX1NUQVRFSURfU0VULAkJLyogaGF2ZSBhIHZhbGlkIGxheW91dCBzdGF0ZWlkICovCisJTkZTX0xBWU9VVF9CVUxLX1JFQ0FMTCwJCS8qIGJ1bGsgcmVjYWxsIGFmZmVjdGluZyBsYXlvdXQgKi8KKwlORlNfTEFZT1VUX1JPQywJCQkvKiBzb21lIGxzZWcgaGFkIHJvYyBiaXQgc2V0ICovCisJTkZTX0xBWU9VVF9ERVNUUk9ZRUQsCQkvKiBubyBuZXcgdXNlIG9mIGxheW91dCBhbGxvd2VkICovCiB9OwogCiAvKiBQZXItbGF5b3V0IGRyaXZlciBzcGVjaWZpYyByZWdpc3RyYXRpb24gc3RydWN0dXJlICovCkBAIC02MCwxMyArNjgsMTYgQEAKIH07CiAKIHN0cnVjdCBwbmZzX2xheW91dF9oZHIgewotCXVuc2lnbmVkIGxvbmcJCXJlZmNvdW50OwotCXN0cnVjdCBsaXN0X2hlYWQJbGF5b3V0czsgICAvKiBvdGhlciBjbGllbnQgbGF5b3V0cyAqLwotCXN0cnVjdCBsaXN0X2hlYWQJc2VnczsgICAgICAvKiBsYXlvdXQgc2VnbWVudHMgbGlzdCAqLwotCXNlcWxvY2tfdAkJc2VxbG9jazsgICAvKiBQcm90ZWN0cyB0aGUgc3RhdGVpZCAqLwotCW5mczRfc3RhdGVpZAkJc3RhdGVpZDsKLQl1bnNpZ25lZCBsb25nCQlzdGF0ZTsKLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZTsKKwlhdG9taWNfdAkJcGxoX3JlZmNvdW50OworCXN0cnVjdCBsaXN0X2hlYWQJcGxoX2xheW91dHM7ICAgLyogb3RoZXIgY2xpZW50IGxheW91dHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXBsaF9idWxrX3JlY2FsbDsgLyogY2xudCBsaXN0IG9mIGJ1bGsgcmVjYWxscyAqLworCXN0cnVjdCBsaXN0X2hlYWQJcGxoX3NlZ3M7ICAgICAgLyogbGF5b3V0IHNlZ21lbnRzIGxpc3QgKi8KKwluZnM0X3N0YXRlaWQJCXBsaF9zdGF0ZWlkOworCWF0b21pY190CQlwbGhfb3V0c3RhbmRpbmc7IC8qIG51bWJlciBvZiBSUENzIG91dCAqLworCXVuc2lnbmVkIGxvbmcJCXBsaF9ibG9ja19sZ2V0czsgLyogYmxvY2sgTEFZT1VUR0VUIGlmID4wICovCisJdTMyCQkJcGxoX2JhcnJpZXI7IC8qIGlnbm9yZSBsb3dlciBzZXFpZHMgKi8KKwl1bnNpZ25lZCBsb25nCQlwbGhfZmxhZ3M7CisJc3RydWN0IGlub2RlCQkqcGxoX2lub2RlOwogfTsKIAogc3RydWN0IHBuZnNfZGV2aWNlIHsKQEAgLTEzNCwxNyArMTQ1LDMwIEBACiBleHRlcm4gaW50IG5mczRfcHJvY19sYXlvdXRnZXQoc3RydWN0IG5mczRfbGF5b3V0Z2V0ICpsZ3ApOwogCiAvKiBwbmZzLmMgKi8KK3ZvaWQgZ2V0X2xheW91dF9oZHIoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8pOwogc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKgogcG5mc191cGRhdGVfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAogCQkgICBlbnVtIHBuZnNfaW9tb2RlIGFjY2Vzc190eXBlKTsKIHZvaWQgc2V0X3BuZnNfbGF5b3V0ZHJpdmVyKHN0cnVjdCBuZnNfc2VydmVyICosIHUzMiBpZCk7CiB2b2lkIHVuc2V0X3BuZnNfbGF5b3V0ZHJpdmVyKHN0cnVjdCBuZnNfc2VydmVyICopOwogaW50IHBuZnNfbGF5b3V0X3Byb2Nlc3Moc3RydWN0IG5mczRfbGF5b3V0Z2V0ICpsZ3ApOwordm9pZCBwbmZzX2ZyZWVfbHNlZ19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKnRtcF9saXN0KTsKIHZvaWQgcG5mc19kZXN0cm95X2xheW91dChzdHJ1Y3QgbmZzX2lub2RlICopOwogdm9pZCBwbmZzX2Rlc3Ryb3lfYWxsX2xheW91dHMoc3RydWN0IG5mc19jbGllbnQgKik7Ci12b2lkIHB1dF9sYXlvdXRfaGRyKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotdm9pZCBwbmZzX2dldF9sYXlvdXRfc3RhdGVpZChuZnM0X3N0YXRlaWQgKmRzdCwgc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sCi0JCQkgICAgIHN0cnVjdCBuZnM0X3N0YXRlICpvcGVuX3N0YXRlKTsKK3ZvaWQgcHV0X2xheW91dF9oZHIoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8pOwordm9pZCBwbmZzX3NldF9sYXlvdXRfc3RhdGVpZChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbywKKwkJCSAgICAgY29uc3QgbmZzNF9zdGF0ZWlkICpuZXcsCisJCQkgICAgIGJvb2wgdXBkYXRlX2JhcnJpZXIpOworaW50IHBuZnNfY2hvb3NlX2xheW91dGdldF9zdGF0ZWlkKG5mczRfc3RhdGVpZCAqZHN0LAorCQkJCSAgc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sCisJCQkJICBzdHJ1Y3QgbmZzNF9zdGF0ZSAqb3Blbl9zdGF0ZSk7CitpbnQgbWFya19tYXRjaGluZ19sc2Vnc19pbnZhbGlkKHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnRtcF9saXN0LAorCQkJCXUzMiBpb21vZGUpOworYm9vbCBwbmZzX3JvYyhzdHJ1Y3QgaW5vZGUgKmlubyk7Cit2b2lkIHBuZnNfcm9jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm8pOwordm9pZCBwbmZzX3JvY19zZXRfYmFycmllcihzdHJ1Y3QgaW5vZGUgKmlubywgdTMyIGJhcnJpZXIpOworYm9vbCBwbmZzX3JvY19kcmFpbihzdHJ1Y3QgaW5vZGUgKmlubywgdTMyICpiYXJyaWVyKTsKIAogCiBzdGF0aWMgaW5saW5lIGludCBsb19mYWlsX2JpdCh1MzIgaW9tb2RlKQpAQCAtMTc2LDYgKzIwMCwyOCBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wKK3BuZnNfcm9jKHN0cnVjdCBpbm9kZSAqaW5vKQoreworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwbmZzX3JvY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BuZnNfcm9jX3NldF9iYXJyaWVyKHN0cnVjdCBpbm9kZSAqaW5vLCB1MzIgYmFycmllcikKK3sKK30KKworc3RhdGljIGlubGluZSBib29sCitwbmZzX3JvY19kcmFpbihzdHJ1Y3QgaW5vZGUgKmlubywgdTMyICpiYXJyaWVyKQoreworCXJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHNldF9wbmZzX2xheW91dGRyaXZlcihzdHJ1Y3QgbmZzX3NlcnZlciAqcywgdTMyIGlkKQogewogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL3Byb2MuYyBiL2ZzL25mcy9wcm9jLmMKaW5kZXggNThlN2Y4NC4uNzdkNWUyMSAxMDA2NDQKLS0tIGEvZnMvbmZzL3Byb2MuYworKysgYi9mcy9uZnMvcHJvYy5jCkBAIC00NTgsNyArNDU4LDcgQEAKIAlmYXR0ciA9IG5mc19hbGxvY19mYXR0cigpOwogCXN0YXR1cyA9IC1FTk9NRU07CiAJaWYgKGZoID09IE5VTEwgfHwgZmF0dHIgPT0gTlVMTCkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2ZyZWU7CiAKIAlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKE5GU19DTElFTlQoZGlyKSwgJm1zZywgMCk7CiAJbmZzX21hcmtfZm9yX3JldmFsaWRhdGUoZGlyKTsKQEAgLTQ3MSw2ICs0NzEsNyBAQAogCWlmIChzdGF0dXMgPT0gMCkKIAkJc3RhdHVzID0gbmZzX2luc3RhbnRpYXRlKGRlbnRyeSwgZmgsIGZhdHRyKTsKIAorb3V0X2ZyZWU6CiAJbmZzX2ZyZWVfZmF0dHIoZmF0dHIpOwogCW5mc19mcmVlX2ZoYW5kbGUoZmgpOwogb3V0OgpAQCAtNzMxLDcgKzczMiw3IEBACiAJLnN0YXRmcwkJPSBuZnNfcHJvY19zdGF0ZnMsCiAJLmZzaW5mbwkJPSBuZnNfcHJvY19mc2luZm8sCiAJLnBhdGhjb25mCT0gbmZzX3Byb2NfcGF0aGNvbmYsCi0JLmRlY29kZV9kaXJlbnQJPSBuZnNfZGVjb2RlX2RpcmVudCwKKwkuZGVjb2RlX2RpcmVudAk9IG5mczJfZGVjb2RlX2RpcmVudCwKIAkucmVhZF9zZXR1cAk9IG5mc19wcm9jX3JlYWRfc2V0dXAsCiAJLnJlYWRfZG9uZQk9IG5mc19yZWFkX2RvbmUsCiAJLndyaXRlX3NldHVwCT0gbmZzX3Byb2Nfd3JpdGVfc2V0dXAsCmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jCmluZGV4IDQxMDA2MzAuLmI2OGM4NjAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zdXBlci5jCisrKyBiL2ZzL25mcy9zdXBlci5jCkBAIC01OTgsNyArNTk4LDkgQEAKIAogCWlmIChuZnNzLT5tb3VudGRfdmVyc2lvbiB8fCBzaG93ZGVmYXVsdHMpCiAJCXNlcV9wcmludGYobSwgIixtb3VudHZlcnM9JXUiLCBuZnNzLT5tb3VudGRfdmVyc2lvbik7Ci0JaWYgKG5mc3MtPm1vdW50ZF9wb3J0IHx8IHNob3dkZWZhdWx0cykKKwlpZiAoKG5mc3MtPm1vdW50ZF9wb3J0ICYmCisJCW5mc3MtPm1vdW50ZF9wb3J0ICE9ICh1bnNpZ25lZCBzaG9ydClORlNfVU5TUEVDX1BPUlQpIHx8CisJCXNob3dkZWZhdWx0cykKIAkJc2VxX3ByaW50ZihtLCAiLG1vdW50cG9ydD0ldSIsIG5mc3MtPm1vdW50ZF9wb3J0KTsKIAogCW5mc19zaG93X21vdW50ZF9uZXRpZChtLCBuZnNzLCBzaG93ZGVmYXVsdHMpOwpAQCAtMjIwMCw2ICsyMjAyLDcgQEAKIAogCXMtPnNfZmxhZ3MgPSBzYl9tbnRkYXRhLT5tbnRmbGFnczsKIAlzLT5zX2ZzX2luZm8gPSBzZXJ2ZXI7CisJcy0+c19kX29wID0gc2VydmVyLT5uZnNfY2xpZW50LT5ycGNfb3BzLT5kZW50cnlfb3BzOwogCXJldCA9IHNldF9hbm9uX3N1cGVyKHMsIHNlcnZlcik7CiAJaWYgKHJldCA9PSAwKQogCQlzZXJ2ZXItPnNfZGV2ID0gcy0+c19kZXY7CkBAIC0yNDk0LDcgKzI0OTcsMTMgQEAKIAlzYi0+c19tYXhieXRlcyA9IG9sZF9zYi0+c19tYXhieXRlczsKIAlzYi0+c190aW1lX2dyYW4gPSAxOwogCXNiLT5zX29wID0gb2xkX3NiLT5zX29wOwotIAluZnNfaW5pdGlhbGlzZV9zYihzYik7CisJLyoKKwkgKiBUaGUgVkZTIHNob3VsZG4ndCBhcHBseSB0aGUgdW1hc2sgdG8gbW9kZSBiaXRzLiBXZSB3aWxsIGRvCisJICogc28gb3Vyc2VsdmVzIHdoZW4gbmVjZXNzYXJ5LgorCSAqLworCXNiLT5zX2ZsYWdzICB8PSBNU19QT1NJWEFDTDsKKwlzYi0+c194YXR0ciAgPSBvbGRfc2ItPnNfeGF0dHI7CisJbmZzX2luaXRpYWxpc2Vfc2Ioc2IpOwogfQogCiAvKgpAQCAtMjUwNCw2ICsyNTEzLDEyIEBACiB7CiAJc2ItPnNfdGltZV9ncmFuID0gMTsKIAlzYi0+c19vcCA9ICZuZnM0X3NvcHM7CisJLyoKKwkgKiBUaGUgVkZTIHNob3VsZG4ndCBhcHBseSB0aGUgdW1hc2sgdG8gbW9kZSBiaXRzLiBXZSB3aWxsIGRvCisJICogc28gb3Vyc2VsdmVzIHdoZW4gbmVjZXNzYXJ5LgorCSAqLworCXNiLT5zX2ZsYWdzICB8PSBNU19QT1NJWEFDTDsKKwlzYi0+c194YXR0ciA9IG5mczRfeGF0dHJfaGFuZGxlcnM7CiAJbmZzX2luaXRpYWxpc2Vfc2Ioc2IpOwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvdW5saW5rLmMgYi9mcy9uZnMvdW5saW5rLmMKaW5kZXggOGZlOWViNC4uZTMxM2E1MSAxMDA2NDQKLS0tIGEvZnMvbmZzL3VubGluay5jCisrKyBiL2ZzL25mcy91bmxpbmsuYwpAQCAtNDI5LDcgKzQyOSw3IEBACiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRhdGEgPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JdGFza19zZXR1cF9kYXRhLmNhbGxiYWNrX2RhdGEgPSBkYXRhLAorCXRhc2tfc2V0dXBfZGF0YS5jYWxsYmFja19kYXRhID0gZGF0YTsKIAogCWRhdGEtPmNyZWQgPSBycGNfbG9va3VwX2NyZWQoKTsKIAlpZiAoSVNfRVJSKGRhdGEtPmNyZWQpKSB7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRjYWxsYmFjay5jIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwppbmRleCAxNDNkYTJlLi4yMWE2M2RhIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRjYWxsYmFjay5jCisrKyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKQEAgLTUwLDExICs1MCw2IEBACiAJTkZTUFJPQzRfQ0xOVF9DQl9TRVFVRU5DRSwKIH07CiAKLWVudW0gbmZzX2NiX29wbnVtNCB7Ci0JT1BfQ0JfUkVDQUxMICAgICAgICAgICAgPSA0LAotCU9QX0NCX1NFUVVFTkNFICAgICAgICAgID0gMTEsCi19OwotCiAjZGVmaW5lIE5GUzRfTUFYVEFHTEVOCQkyMAogCiAjZGVmaW5lIE5GUzRfZW5jX2NiX251bGxfc3oJCTAKQEAgLTc5LDYxICs3NCw2IEBACiAJCQkJCWNiX3NlcXVlbmNlX2RlY19zeiArICAgICAgICAgICAgXAogCQkJCQlvcF9kZWNfc3opCiAKLS8qCi0qIEdlbmVyaWMgZW5jb2RlIHJvdXRpbmVzIGZyb20gZnMvbmZzL25mczR4ZHIuYwotKi8KLXN0YXRpYyBpbmxpbmUgX19iZTMyICoKLXhkcl93cml0ZW1lbShfX2JlMzIgKnAsIGNvbnN0IHZvaWQgKnB0ciwgaW50IG5ieXRlcykKLXsKLQlpbnQgdG1wID0gWERSX1FVQURMRU4obmJ5dGVzKTsKLQlpZiAoIXRtcCkKLQkJcmV0dXJuIHA7Ci0JcFt0bXAtMV0gPSAwOwotCW1lbWNweShwLCBwdHIsIG5ieXRlcyk7Ci0JcmV0dXJuIHAgKyB0bXA7Ci19Ci0KLSNkZWZpbmUgV1JJVEUzMihuKSAgICAgICAgICAgICAgICpwKysgPSBodG9ubChuKQotI2RlZmluZSBXUklURU1FTShwdHIsbmJ5dGVzKSAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlwID0geGRyX3dyaXRlbWVtKHAsIHB0ciwgbmJ5dGVzKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCi0jZGVmaW5lIFJFU0VSVkVfU1BBQ0UobmJ5dGVzKSAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIG5ieXRlcyk7ICAgICAgICAgICAgICAgICAgICAgXAotCWlmICghcCkgZHByaW50aygiTkZTRDogUkVTRVJWRV9TUEFDRSglZCkgZmFpbGVkIGluIGZ1bmN0aW9uICVzXG4iLCAoaW50KSAobmJ5dGVzKSwgX19mdW5jX18pOyBcCi0JQlVHX09OKCFwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlICgwKQotCi0vKgotICogR2VuZXJpYyBkZWNvZGUgcm91dGluZXMgZnJvbSBmcy9uZnMvbmZzNHhkci5jCi0gKi8KLSNkZWZpbmUgREVDT0RFX1RBSUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlzdGF0dXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotb3V0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXJldHVybiBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi14ZHJfZXJyb3I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZHByaW50aygiTkZTRDogeGRyIGVycm9yISAoJXM6JWQpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCi0Jc3RhdHVzID0gLUVJTzsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlnb3RvIG91dAotCi0jZGVmaW5lIFJFQUQzMih4KSAgICAgICAgICh4KSA9IG50b2hsKCpwKyspCi0jZGVmaW5lIFJFQUQ2NCh4KSAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICBcCi0JKHgpID0gKHU2NCludG9obCgqcCsrKSA8PCAzMjsgICAgICAgICAgIFwKLQkoeCkgfD0gbnRvaGwoKnArKyk7ICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVBRFRJTUUoeCkgICAgICAgZG8geyAgICAgICAgICAgICAgICAgIFwKLQlwKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSh4LnR2X3NlYykgPSBudG9obCgqcCsrKTsgICAgICAgICAgICAgICBcCi0JKHgudHZfbnNlYykgPSBudG9obCgqcCsrKTsgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCi0jZGVmaW5lIFJFQURfQlVGKG5ieXRlcykgIGRvIHsgXAotCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIG5ieXRlcyk7IFwKLQlpZiAoIXApIHsgXAotCQlkcHJpbnRrKCJORlNEOiAlczogcmVwbHkgYnVmZmVyIG92ZXJmbG93ZWQgaW4gbGluZSAlZC5cbiIsIFwKLQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7IFwKLQkJcmV0dXJuIC1FSU87IFwKLQl9IFwKLX0gd2hpbGUgKDApCi0KIHN0cnVjdCBuZnM0X2NiX2NvbXBvdW5kX2hkciB7CiAJLyogYXJncyAqLwogCXUzMgkJaWRlbnQ7CS8qIG1pbm9ydmVyc2lvbiAwIG9ubHkgKi8KQEAgLTE0NCwyOTUgKzg0LDUxMyBAQAogCWludAkJc3RhdHVzOwogfTsKIAotc3RhdGljIHN0cnVjdCB7Ci1pbnQgc3RhdDsKLWludCBlcnJubzsKLX0gbmZzX2NiX2VycnRibFtdID0gewotCXsgTkZTNF9PSywJCTAgICAgICAgICAgICAgICB9LAotCXsgTkZTNEVSUl9QRVJNLAkJRVBFUk0gICAgICAgICAgIH0sCi0JeyBORlM0RVJSX05PRU5ULAlFTk9FTlQgICAgICAgICAgfSwKLQl7IE5GUzRFUlJfSU8sCQlFSU8gICAgICAgICAgICAgfSwKLQl7IE5GUzRFUlJfTlhJTywJCUVOWElPICAgICAgICAgICB9LAotCXsgTkZTNEVSUl9BQ0NFU1MsCUVBQ0NFUyAgICAgICAgICB9LAotCXsgTkZTNEVSUl9FWElTVCwJRUVYSVNUICAgICAgICAgIH0sCi0JeyBORlM0RVJSX1hERVYsCQlFWERFViAgICAgICAgICAgfSwKLQl7IE5GUzRFUlJfTk9URElSLAlFTk9URElSICAgICAgICAgfSwKLQl7IE5GUzRFUlJfSVNESVIsCUVJU0RJUiAgICAgICAgICB9LAotCXsgTkZTNEVSUl9JTlZBTCwJRUlOVkFMICAgICAgICAgIH0sCi0JeyBORlM0RVJSX0ZCSUcsCQlFRkJJRyAgICAgICAgICAgfSwKLQl7IE5GUzRFUlJfTk9TUEMsCUVOT1NQQyAgICAgICAgICB9LAotCXsgTkZTNEVSUl9ST0ZTLAkJRVJPRlMgICAgICAgICAgIH0sCi0JeyBORlM0RVJSX01MSU5LLAlFTUxJTksgICAgICAgICAgfSwKLQl7IE5GUzRFUlJfTkFNRVRPT0xPTkcsCUVOQU1FVE9PTE9ORyAgICB9LAotCXsgTkZTNEVSUl9OT1RFTVBUWSwJRU5PVEVNUFRZICAgICAgIH0sCi0JeyBORlM0RVJSX0RRVU9ULAlFRFFVT1QgICAgICAgICAgfSwKLQl7IE5GUzRFUlJfU1RBTEUsCUVTVEFMRSAgICAgICAgICB9LAotCXsgTkZTNEVSUl9CQURIQU5ETEUsCUVCQURIQU5ETEUgICAgICB9LAotCXsgTkZTNEVSUl9CQURfQ09PS0lFLAlFQkFEQ09PS0lFICAgICAgfSwKLQl7IE5GUzRFUlJfTk9UU1VQUCwJRU5PVFNVUFAgICAgICAgIH0sCi0JeyBORlM0RVJSX1RPT1NNQUxMLAlFVE9PU01BTEwgICAgICAgfSwKLQl7IE5GUzRFUlJfU0VSVkVSRkFVTFQsCUVTRVJWRVJGQVVMVCAgICB9LAotCXsgTkZTNEVSUl9CQURUWVBFLAlFQkFEVFlQRSAgICAgICAgfSwKLQl7IE5GUzRFUlJfTE9DS0VELAlFQUdBSU4gICAgICAgICAgfSwKLQl7IE5GUzRFUlJfUkVTT1VSQ0UsCUVSRU1PVEVJTyAgICAgICB9LAotCXsgTkZTNEVSUl9TWU1MSU5LLAlFTE9PUCAgICAgICAgICAgfSwKLQl7IE5GUzRFUlJfT1BfSUxMRUdBTCwJRU9QTk9UU1VQUCAgICAgIH0sCi0JeyBORlM0RVJSX0RFQURMT0NLLAlFREVBRExLICAgICAgICAgfSwKLQl7IC0xLCAgICAgICAgICAgICAgICAgICBFSU8gICAgICAgICAgICAgfQotfTsKLQotc3RhdGljIGludAotbmZzX2NiX3N0YXRfdG9fZXJybm8oaW50IHN0YXQpCisvKgorICogSGFuZGxlIGRlY29kZSBidWZmZXIgb3ZlcmZsb3dzIG91dC1vZi1saW5lLgorICovCitzdGF0aWMgdm9pZCBwcmludF9vdmVyZmxvd19tc2coY29uc3QgY2hhciAqZnVuYywgY29uc3Qgc3RydWN0IHhkcl9zdHJlYW0gKnhkcikKIHsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBuZnNfY2JfZXJydGJsW2ldLnN0YXQgIT0gLTE7IGkrKykgewotCQlpZiAobmZzX2NiX2VycnRibFtpXS5zdGF0ID09IHN0YXQpCi0JCQlyZXR1cm4gbmZzX2NiX2VycnRibFtpXS5lcnJubzsKLQl9Ci0JLyogSWYgd2UgY2Fubm90IHRyYW5zbGF0ZSB0aGUgZXJyb3IsIHRoZSByZWNvdmVyeSByb3V0aW5lcyBzaG91bGQKLQkqIGhhbmRsZSBpdC4KLQkqIE5vdGU6IHJlbWFpbmluZyBORlN2NCBlcnJvciBjb2RlcyBoYXZlIHZhbHVlcyA+IDEwMDAwLCBzbyBzaG91bGQKLQkqIG5vdCBjb25mbGljdCB3aXRoIG5hdGl2ZSBMaW51eCBlcnJvciBjb2Rlcy4KLQkqLwotCXJldHVybiBzdGF0OworCWRwcmludGsoIk5GUzogJXMgcHJlbWF0dXJlbHkgaGl0IHRoZSBlbmQgb2Ygb3VyIHJlY2VpdmUgYnVmZmVyLiAiCisJCSJSZW1haW5pbmcgYnVmZmVyIGxlbmd0aCBpcyAldHUgd29yZHMuXG4iLAorCQlmdW5jLCB4ZHItPmVuZCAtIHhkci0+cCk7Cit9CisKK3N0YXRpYyBfX2JlMzIgKnhkcl9lbmNvZGVfZW1wdHlfYXJyYXkoX19iZTMyICpwKQoreworCSpwKysgPSB4ZHJfemVybzsKKwlyZXR1cm4gcDsKIH0KIAogLyoKLSAqIFhEUiBlbmNvZGUKKyAqIEVuY29kZS9kZWNvZGUgTkZTdjQgQ0IgYmFzaWMgZGF0YSB0eXBlcworICoKKyAqIEJhc2ljIE5GU3Y0IGNhbGxiYWNrIGRhdGEgdHlwZXMgYXJlIGRlZmluZWQgaW4gc2VjdGlvbiAxNSBvZiBSRkMKKyAqIDM1MzA6ICJOZXR3b3JrIEZpbGUgU3lzdGVtIChORlMpIHZlcnNpb24gNCBQcm90b2NvbCIgYW5kIHNlY3Rpb24KKyAqIDIwIG9mIFJGQyA1NjYxOiAiTmV0d29yayBGaWxlIFN5c3RlbSAoTkZTKSBWZXJzaW9uIDQgTWlub3IgVmVyc2lvbgorICogMSBQcm90b2NvbCIKICAqLwogCi1zdGF0aWMgdm9pZAotZW5jb2RlX3N0YXRlaWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RhdGVpZF90ICpzaWQpCisvKgorICoJbmZzX2NiX29wbnVtNAorICoKKyAqCWVudW0gbmZzX2NiX29wbnVtNCB7CisgKgkJT1BfQ0JfR0VUQVRUUgkJPSAzLAorICoJCSAgLi4uCisgKgl9OworICovCitlbnVtIG5mc19jYl9vcG51bTQgeworCU9QX0NCX0dFVEFUVFIJCQk9IDMsCisJT1BfQ0JfUkVDQUxMCQkJPSA0LAorCU9QX0NCX0xBWU9VVFJFQ0FMTAkJPSA1LAorCU9QX0NCX05PVElGWQkJCT0gNiwKKwlPUF9DQl9QVVNIX0RFTEVHCQk9IDcsCisJT1BfQ0JfUkVDQUxMX0FOWQkJPSA4LAorCU9QX0NCX1JFQ0FMTEFCTEVfT0JKX0FWQUlMCT0gOSwKKwlPUF9DQl9SRUNBTExfU0xPVAkJPSAxMCwKKwlPUF9DQl9TRVFVRU5DRQkJCT0gMTEsCisJT1BfQ0JfV0FOVFNfQ0FOQ0VMTEVECQk9IDEyLAorCU9QX0NCX05PVElGWV9MT0NLCQk9IDEzLAorCU9QX0NCX05PVElGWV9ERVZJQ0VJRAkJPSAxNCwKKwlPUF9DQl9JTExFR0FMCQkJPSAxMDA0NAorfTsKKworc3RhdGljIHZvaWQgZW5jb2RlX25mc19jYl9vcG51bTQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgZW51bSBuZnNfY2Jfb3BudW00IG9wKQogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0Uoc2l6ZW9mKHN0YXRlaWRfdCkpOwotCVdSSVRFMzIoc2lkLT5zaV9nZW5lcmF0aW9uKTsKLQlXUklURU1FTSgmc2lkLT5zaV9vcGFxdWUsIHNpemVvZihzdGF0ZWlkX29wYXF1ZV90KSk7CisJcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgNCk7CisJKnAgPSBjcHVfdG9fYmUzMihvcCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1lbmNvZGVfY2JfY29tcG91bmRfaGRyKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnM0X2NiX2NvbXBvdW5kX2hkciAqaGRyKQorLyoKKyAqIG5mc19maDQKKyAqCisgKgl0eXBlZGVmIG9wYXF1ZSBuZnNfZmg0PE5GUzRfRkhTSVpFPjsKKyAqLworc3RhdGljIHZvaWQgZW5jb2RlX25mc19maDQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3Qgc3RydWN0IGtuZnNkX2ZoICpmaCkKK3sKKwl1MzIgbGVuZ3RoID0gZmgtPmZoX3NpemU7CisJX19iZTMyICpwOworCisJQlVHX09OKGxlbmd0aCA+IE5GUzRfRkhTSVpFKTsKKwlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA0ICsgbGVuZ3RoKTsKKwl4ZHJfZW5jb2RlX29wYXF1ZShwLCAmZmgtPmZoX2Jhc2UsIGxlbmd0aCk7Cit9CisKKy8qCisgKiBzdGF0ZWlkNAorICoKKyAqCXN0cnVjdCBzdGF0ZWlkNCB7CisgKgkJdWludDMyX3QJc2VxaWQ7CisgKgkJb3BhcXVlCQlvdGhlclsxMl07CisgKgl9OworICovCitzdGF0aWMgdm9pZCBlbmNvZGVfc3RhdGVpZDQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3Qgc3RhdGVpZF90ICpzaWQpCit7CisJX19iZTMyICpwOworCisJcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgTkZTNF9TVEFURUlEX1NJWkUpOworCSpwKysgPSBjcHVfdG9fYmUzMihzaWQtPnNpX2dlbmVyYXRpb24pOworCXhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsICZzaWQtPnNpX29wYXF1ZSwgTkZTNF9TVEFURUlEX09USEVSX1NJWkUpOworfQorCisvKgorICogc2Vzc2lvbmlkNAorICoKKyAqCXR5cGVkZWYgb3BhcXVlIHNlc3Npb25pZDRbTkZTNF9TRVNTSU9OSURfU0laRV07CisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV9zZXNzaW9uaWQ0KHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZzZDRfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlfX2JlMzIgKnA7CisKKwlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCBORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKKwl4ZHJfZW5jb2RlX29wYXF1ZV9maXhlZChwLCBzZXNzaW9uLT5zZV9zZXNzaW9uaWQuZGF0YSwKKwkJCQkJTkZTNF9NQVhfU0VTU0lPTklEX0xFTik7Cit9CisKKy8qCisgKiBuZnNzdGF0NAorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlpbnQgc3RhdDsKKwlpbnQgZXJybm87Cit9IG5mc19jYl9lcnJ0YmxbXSA9IHsKKwl7IE5GUzRfT0ssCQkwCQl9LAorCXsgTkZTNEVSUl9QRVJNLAkJLUVQRVJNCQl9LAorCXsgTkZTNEVSUl9OT0VOVCwJLUVOT0VOVAkJfSwKKwl7IE5GUzRFUlJfSU8sCQktRUlPCQl9LAorCXsgTkZTNEVSUl9OWElPLAkJLUVOWElPCQl9LAorCXsgTkZTNEVSUl9BQ0NFU1MsCS1FQUNDRVMJCX0sCisJeyBORlM0RVJSX0VYSVNULAktRUVYSVNUCQl9LAorCXsgTkZTNEVSUl9YREVWLAkJLUVYREVWCQl9LAorCXsgTkZTNEVSUl9OT1RESVIsCS1FTk9URElSCX0sCisJeyBORlM0RVJSX0lTRElSLAktRUlTRElSCQl9LAorCXsgTkZTNEVSUl9JTlZBTCwJLUVJTlZBTAkJfSwKKwl7IE5GUzRFUlJfRkJJRywJCS1FRkJJRwkJfSwKKwl7IE5GUzRFUlJfTk9TUEMsCS1FTk9TUEMJCX0sCisJeyBORlM0RVJSX1JPRlMsCQktRVJPRlMJCX0sCisJeyBORlM0RVJSX01MSU5LLAktRU1MSU5LCQl9LAorCXsgTkZTNEVSUl9OQU1FVE9PTE9ORywJLUVOQU1FVE9PTE9ORwl9LAorCXsgTkZTNEVSUl9OT1RFTVBUWSwJLUVOT1RFTVBUWQl9LAorCXsgTkZTNEVSUl9EUVVPVCwJLUVEUVVPVAkJfSwKKwl7IE5GUzRFUlJfU1RBTEUsCS1FU1RBTEUJCX0sCisJeyBORlM0RVJSX0JBREhBTkRMRSwJLUVCQURIQU5ETEUJfSwKKwl7IE5GUzRFUlJfQkFEX0NPT0tJRSwJLUVCQURDT09LSUUJfSwKKwl7IE5GUzRFUlJfTk9UU1VQUCwJLUVOT1RTVVBQCX0sCisJeyBORlM0RVJSX1RPT1NNQUxMLAktRVRPT1NNQUxMCX0sCisJeyBORlM0RVJSX1NFUlZFUkZBVUxULAktRVNFUlZFUkZBVUxUCX0sCisJeyBORlM0RVJSX0JBRFRZUEUsCS1FQkFEVFlQRQl9LAorCXsgTkZTNEVSUl9MT0NLRUQsCS1FQUdBSU4JCX0sCisJeyBORlM0RVJSX1JFU09VUkNFLAktRVJFTU9URUlPCX0sCisJeyBORlM0RVJSX1NZTUxJTkssCS1FTE9PUAkJfSwKKwl7IE5GUzRFUlJfT1BfSUxMRUdBTCwJLUVPUE5PVFNVUFAJfSwKKwl7IE5GUzRFUlJfREVBRExPQ0ssCS1FREVBRExLCX0sCisJeyAtMSwJCQktRUlPCQl9Cit9OworCisvKgorICogSWYgd2UgY2Fubm90IHRyYW5zbGF0ZSB0aGUgZXJyb3IsIHRoZSByZWNvdmVyeSByb3V0aW5lcyBzaG91bGQKKyAqIGhhbmRsZSBpdC4KKyAqCisgKiBOb3RlOiByZW1haW5pbmcgTkZTdjQgZXJyb3IgY29kZXMgaGF2ZSB2YWx1ZXMgPiAxMDAwMCwgc28gc2hvdWxkCisgKiBub3QgY29uZmxpY3Qgd2l0aCBuYXRpdmUgTGludXggZXJyb3IgY29kZXMuCisgKi8KK3N0YXRpYyBpbnQgbmZzX2NiX3N0YXRfdG9fZXJybm8oaW50IHN0YXR1cykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IG5mc19jYl9lcnJ0YmxbaV0uc3RhdCAhPSAtMTsgaSsrKSB7CisJCWlmIChuZnNfY2JfZXJydGJsW2ldLnN0YXQgPT0gc3RhdHVzKQorCQkJcmV0dXJuIG5mc19jYl9lcnJ0YmxbaV0uZXJybm87CisJfQorCisJZHByaW50aygiTkZTRDogVW5yZWNvZ25pemVkIE5GUyBDQiBzdGF0dXMgdmFsdWU6ICV1XG4iLCBzdGF0dXMpOworCXJldHVybiAtc3RhdHVzOworfQorCitzdGF0aWMgaW50IGRlY29kZV9jYl9vcF9zdGF0dXMoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgZW51bSBuZnNfb3BudW00IGV4cGVjdGVkLAorCQkJICAgICAgIGVudW0gbmZzc3RhdDQgKnN0YXR1cykKK3sKKwlfX2JlMzIgKnA7CisJdTMyIG9wOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCArIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlvcCA9IGJlMzJfdG9fY3B1cChwKyspOworCWlmICh1bmxpa2VseShvcCAhPSBleHBlY3RlZCkpCisJCWdvdG8gb3V0X3VuZXhwZWN0ZWQ7CisJKnN0YXR1cyA9IGJlMzJfdG9fY3B1cChwKTsKKwlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CitvdXRfdW5leHBlY3RlZDoKKwlkcHJpbnRrKCJORlNEOiBDYWxsYmFjayBzZXJ2ZXIgcmV0dXJuZWQgb3BlcmF0aW9uICVkIGJ1dCAiCisJCSJ3ZSBpc3N1ZWQgYSByZXF1ZXN0IGZvciAlZFxuIiwgb3AsIGV4cGVjdGVkKTsKKwlyZXR1cm4gLUVJTzsKK30KKworLyoKKyAqIENCX0NPTVBPVU5ENGFyZ3MKKyAqCisgKglzdHJ1Y3QgQ0JfQ09NUE9VTkQ0YXJncyB7CisgKgkJdXRmOHN0cl9jcwl0YWc7CisgKgkJdWludDMyX3QJbWlub3J2ZXJzaW9uOworICoJCXVpbnQzMl90CWNhbGxiYWNrX2lkZW50OworICoJCW5mc19jYl9hcmdvcDQJYXJnYXJyYXk8PjsKKyAqCX07CisqLworc3RhdGljIHZvaWQgZW5jb2RlX2NiX2NvbXBvdW5kNGFyZ3Moc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgc3RydWN0IG5mczRfY2JfY29tcG91bmRfaGRyICpoZHIpCiB7CiAJX19iZTMyICogcDsKIAotCVJFU0VSVkVfU1BBQ0UoMTYpOwotCVdSSVRFMzIoMCk7ICAgICAgICAgICAgLyogdGFnIGxlbmd0aCBpcyBhbHdheXMgMCAqLwotCVdSSVRFMzIoaGRyLT5taW5vcnZlcnNpb24pOwotCVdSSVRFMzIoaGRyLT5pZGVudCk7CisJcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgNCArIDQgKyA0ICsgNCk7CisJcCA9IHhkcl9lbmNvZGVfZW1wdHlfYXJyYXkocCk7CQkvKiBlbXB0eSB0YWcgKi8KKwkqcCsrID0gY3B1X3RvX2JlMzIoaGRyLT5taW5vcnZlcnNpb24pOworCSpwKysgPSBjcHVfdG9fYmUzMihoZHItPmlkZW50KTsKKwogCWhkci0+bm9wc19wID0gcDsKLQlXUklURTMyKGhkci0+bm9wcyk7CisJKnAgPSBjcHVfdG9fYmUzMihoZHItPm5vcHMpOwkJLyogYXJnYXJyYXkgZWxlbWVudCBjb3VudCAqLwogfQogCisvKgorICogVXBkYXRlIGFyZ2FycmF5IGVsZW1lbnQgY291bnQKKyAqLwogc3RhdGljIHZvaWQgZW5jb2RlX2NiX25vcHMoc3RydWN0IG5mczRfY2JfY29tcG91bmRfaGRyICpoZHIpCiB7Ci0JKmhkci0+bm9wc19wID0gaHRvbmwoaGRyLT5ub3BzKTsKKwlCVUdfT04oaGRyLT5ub3BzID4gTkZTNF9NQVhfQkFDS19DSEFOTkVMX09QUyk7CisJKmhkci0+bm9wc19wID0gY3B1X3RvX2JlMzIoaGRyLT5ub3BzKTsKIH0KIAotc3RhdGljIHZvaWQKLWVuY29kZV9jYl9yZWNhbGwoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHAsCi0JCXN0cnVjdCBuZnM0X2NiX2NvbXBvdW5kX2hkciAqaGRyKQorLyoKKyAqIENCX0NPTVBPVU5ENHJlcworICoKKyAqCXN0cnVjdCBDQl9DT01QT1VORDRyZXMgeworICoJCW5mc3N0YXQ0CXN0YXR1czsKKyAqCQl1dGY4c3RyX2NzCXRhZzsKKyAqCQluZnNfY2JfcmVzb3A0CXJlc2FycmF5PD47CisgKgl9OworICovCitzdGF0aWMgaW50IGRlY29kZV9jYl9jb21wb3VuZDRyZXMoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgIHN0cnVjdCBuZnM0X2NiX2NvbXBvdW5kX2hkciAqaGRyKQoreworCXUzMiBsZW5ndGg7CisJX19iZTMyICpwOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCArIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwloZHItPnN0YXR1cyA9IGJlMzJfdG9fY3B1cChwKyspOworCS8qIElnbm9yZSB0aGUgdGFnICovCisJbGVuZ3RoID0gYmUzMl90b19jcHVwKHArKyk7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgbGVuZ3RoICsgNCk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWhkci0+bm9wcyA9IGJlMzJfdG9fY3B1cChwKTsKKwlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qCisgKiBDQl9SRUNBTEw0YXJncworICoKKyAqCXN0cnVjdCBDQl9SRUNBTEw0YXJncyB7CisgKgkJc3RhdGVpZDQJc3RhdGVpZDsKKyAqCQlib29sCQl0cnVuY2F0ZTsKKyAqCQluZnNfZmg0CQlmaDsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV9jYl9yZWNhbGw0YXJncyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgY29uc3Qgc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHAsCisJCQkJICBzdHJ1Y3QgbmZzNF9jYl9jb21wb3VuZF9oZHIgKmhkcikKIHsKIAlfX2JlMzIgKnA7Ci0JaW50IGxlbiA9IGRwLT5kbF9maC5maF9zaXplOwogCi0JUkVTRVJWRV9TUEFDRSg0KTsKLQlXUklURTMyKE9QX0NCX1JFQ0FMTCk7Ci0JZW5jb2RlX3N0YXRlaWQoeGRyLCAmZHAtPmRsX3N0YXRlaWQpOwotCVJFU0VSVkVfU1BBQ0UoOCArIChYRFJfUVVBRExFTihsZW4pIDw8IDIpKTsKLQlXUklURTMyKDApOyAvKiB0cnVuY2F0ZSBvcHRpbWl6YXRpb24gbm90IGltcGxlbWVudGVkICovCi0JV1JJVEUzMihsZW4pOwotCVdSSVRFTUVNKCZkcC0+ZGxfZmguZmhfYmFzZSwgbGVuKTsKKwllbmNvZGVfbmZzX2NiX29wbnVtNCh4ZHIsIE9QX0NCX1JFQ0FMTCk7CisJZW5jb2RlX3N0YXRlaWQ0KHhkciwgJmRwLT5kbF9zdGF0ZWlkKTsKKworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQpOworCSpwKysgPSB4ZHJfemVybzsJCQkvKiB0cnVuY2F0ZSAqLworCisJZW5jb2RlX25mc19maDQoeGRyLCAmZHAtPmRsX2ZoKTsKKwogCWhkci0+bm9wcysrOwogfQogCi1zdGF0aWMgdm9pZAotZW5jb2RlX2NiX3NlcXVlbmNlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnNkNF9jYWxsYmFjayAqY2IsCi0JCSAgIHN0cnVjdCBuZnM0X2NiX2NvbXBvdW5kX2hkciAqaGRyKQorLyoKKyAqIENCX1NFUVVFTkNFNGFyZ3MKKyAqCisgKglzdHJ1Y3QgQ0JfU0VRVUVOQ0U0YXJncyB7CisgKgkJc2Vzc2lvbmlkNAkJY3NhX3Nlc3Npb25pZDsKKyAqCQlzZXF1ZW5jZWlkNAkJY3NhX3NlcXVlbmNlaWQ7CisgKgkJc2xvdGlkNAkJCWNzYV9zbG90aWQ7CisgKgkJc2xvdGlkNAkJCWNzYV9oaWdoZXN0X3Nsb3RpZDsKKyAqCQlib29sCQkJY3NhX2NhY2hldGhpczsKKyAqCQlyZWZlcnJpbmdfY2FsbF9saXN0NAljc2FfcmVmZXJyaW5nX2NhbGxfbGlzdHM8PjsKKyAqCX07CisgKi8KK3N0YXRpYyB2b2lkIGVuY29kZV9jYl9zZXF1ZW5jZTRhcmdzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBuZnNkNF9jYWxsYmFjayAqY2IsCisJCQkJICAgIHN0cnVjdCBuZnM0X2NiX2NvbXBvdW5kX2hkciAqaGRyKQogeworCXN0cnVjdCBuZnNkNF9zZXNzaW9uICpzZXNzaW9uID0gY2ItPmNiX2NscC0+Y2xfY2Jfc2Vzc2lvbjsKIAlfX2JlMzIgKnA7Ci0Jc3RydWN0IG5mc2Q0X3Nlc3Npb24gKnNlcyA9IGNiLT5jYl9jbHAtPmNsX2NiX3Nlc3Npb247CiAKIAlpZiAoaGRyLT5taW5vcnZlcnNpb24gPT0gMCkKIAkJcmV0dXJuOwogCi0JUkVTRVJWRV9TUEFDRSgxICsgTkZTNF9NQVhfU0VTU0lPTklEX0xFTiArIDIwKTsKKwllbmNvZGVfbmZzX2NiX29wbnVtNCh4ZHIsIE9QX0NCX1NFUVVFTkNFKTsKKwllbmNvZGVfc2Vzc2lvbmlkNCh4ZHIsIHNlc3Npb24pOwogCi0JV1JJVEUzMihPUF9DQl9TRVFVRU5DRSk7Ci0JV1JJVEVNRU0oc2VzLT5zZV9zZXNzaW9uaWQuZGF0YSwgTkZTNF9NQVhfU0VTU0lPTklEX0xFTik7Ci0JV1JJVEUzMihzZXMtPnNlX2NiX3NlcV9ucik7Ci0JV1JJVEUzMigwKTsJCS8qIHNsb3RpZCwgYWx3YXlzIDAgKi8KLQlXUklURTMyKDApOwkJLyogaGlnaGVzdCBzbG90aWQgYWx3YXlzIDAgKi8KLQlXUklURTMyKDApOwkJLyogY2FjaGV0aGlzIGFsd2F5cyAwICovCi0JV1JJVEUzMigwKTsgLyogRklYTUU6IHN1cHBvcnQgcmVmZXJyaW5nX2NhbGxfbGlzdHMgKi8KKwlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA0ICsgNCArIDQgKyA0ICsgNCk7CisJKnArKyA9IGNwdV90b19iZTMyKHNlc3Npb24tPnNlX2NiX3NlcV9ucik7CS8qIGNzYV9zZXF1ZW5jZWlkICovCisJKnArKyA9IHhkcl96ZXJvOwkJCS8qIGNzYV9zbG90aWQgKi8KKwkqcCsrID0geGRyX3plcm87CQkJLyogY3NhX2hpZ2hlc3Rfc2xvdGlkICovCisJKnArKyA9IHhkcl96ZXJvOwkJCS8qIGNzYV9jYWNoZXRoaXMgKi8KKwl4ZHJfZW5jb2RlX2VtcHR5X2FycmF5KHApOwkJLyogY3NhX3JlZmVycmluZ19jYWxsX2xpc3RzICovCisKIAloZHItPm5vcHMrKzsKIH0KIAotc3RhdGljIGludAotbmZzNF94ZHJfZW5jX2NiX251bGwoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCkKLXsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHJzLCAqeGRyID0gJnhkcnM7Ci0KLQl4ZHJfaW5pdF9lbmNvZGUoJnhkcnMsICZyZXEtPnJxX3NuZF9idWYsIHApOwotICAgICAgICBSRVNFUlZFX1NQQUNFKDApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1uZnM0X3hkcl9lbmNfY2JfcmVjYWxsKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsCi0JCXN0cnVjdCBuZnNkNF9jYWxsYmFjayAqY2IpCi17Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwotCXN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmFyZ3MgPSBjYi0+Y2Jfb3A7Ci0Jc3RydWN0IG5mczRfY2JfY29tcG91bmRfaGRyIGhkciA9IHsKLQkJLmlkZW50ID0gY2ItPmNiX2NscC0+Y2xfY2JfaWRlbnQsCi0JCS5taW5vcnZlcnNpb24gPSBjYi0+Y2JfbWlub3J2ZXJzaW9uLAotCX07Ci0KLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7Ci0JZW5jb2RlX2NiX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKLQllbmNvZGVfY2Jfc2VxdWVuY2UoJnhkciwgY2IsICZoZHIpOwotCWVuY29kZV9jYl9yZWNhbGwoJnhkciwgYXJncywgJmhkcik7Ci0JZW5jb2RlX2NiX25vcHMoJmhkcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludAotZGVjb2RlX2NiX2NvbXBvdW5kX2hkcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzNF9jYl9jb21wb3VuZF9oZHIgKmhkcil7Ci0gICAgICAgIF9fYmUzMiAqcDsKLQl1MzIgdGFnbGVuOwotCi0gICAgICAgIFJFQURfQlVGKDgpOwotICAgICAgICBSRUFEMzIoaGRyLT5zdGF0dXMpOwotCS8qIFdlJ3ZlIGdvdCBubyB1c2UgZm9yIHRoZSB0YWc7IGlnbm9yZSBpdDogKi8KLSAgICAgICAgUkVBRDMyKHRhZ2xlbik7Ci0gICAgICAgIFJFQURfQlVGKHRhZ2xlbiArIDQpOwotICAgICAgICBwICs9IFhEUl9RVUFETEVOKHRhZ2xlbik7Ci0gICAgICAgIFJFQUQzMihoZHItPm5vcHMpOwotICAgICAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotZGVjb2RlX2NiX29wX2hkcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBlbnVtIG5mc19vcG51bTQgZXhwZWN0ZWQpCi17Ci0JX19iZTMyICpwOwotCXUzMiBvcDsKLQlpbnQzMl90IG5mc2VycjsKLQotCVJFQURfQlVGKDgpOwotCVJFQUQzMihvcCk7Ci0JaWYgKG9wICE9IGV4cGVjdGVkKSB7Ci0JCWRwcmludGsoIk5GU0Q6IGRlY29kZV9jYl9vcF9oZHI6IENhbGxiYWNrIHNlcnZlciByZXR1cm5lZCAiCi0JCSAgICAgICAgICIgb3BlcmF0aW9uICVkIGJ1dCB3ZSBpc3N1ZWQgYSByZXF1ZXN0IGZvciAlZFxuIiwKLQkJICAgICAgICAgb3AsIGV4cGVjdGVkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCVJFQUQzMihuZnNlcnIpOwotCWlmIChuZnNlcnIgIT0gTkZTX09LKQotCQlyZXR1cm4gLW5mc19jYl9zdGF0X3RvX2Vycm5vKG5mc2Vycik7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCisgKiBDQl9TRVFVRU5DRTRyZXNvaworICoKKyAqCXN0cnVjdCBDQl9TRVFVRU5DRTRyZXNvayB7CisgKgkJc2Vzc2lvbmlkNAljc3Jfc2Vzc2lvbmlkOworICoJCXNlcXVlbmNlaWQ0CWNzcl9zZXF1ZW5jZWlkOworICoJCXNsb3RpZDQJCWNzcl9zbG90aWQ7CisgKgkJc2xvdGlkNAkJY3NyX2hpZ2hlc3Rfc2xvdGlkOworICoJCXNsb3RpZDQJCWNzcl90YXJnZXRfaGlnaGVzdF9zbG90aWQ7CisgKgl9OworICoKKyAqCXVuaW9uIENCX1NFUVVFTkNFNHJlcyBzd2l0Y2ggKG5mc3N0YXQ0IGNzcl9zdGF0dXMpIHsKKyAqCWNhc2UgTkZTNF9PSzoKKyAqCQlDQl9TRVFVRU5DRTRyZXNvawljc3JfcmVzb2s0OworICoJZGVmYXVsdDoKKyAqCQl2b2lkOworICoJfTsKKyAqCiAgKiBPdXIgY3VycmVudCBiYWNrIGNoYW5uZWwgaW1wbG1lbnRhdGlvbiBzdXBwb3J0cyBhIHNpbmdsZSBiYWNrY2hhbm5lbAogICogd2l0aCBhIHNpbmdsZSBzbG90LgogICovCi1zdGF0aWMgaW50Ci1kZWNvZGVfY2Jfc2VxdWVuY2Uoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc2Q0X2NhbGxiYWNrICpjYiwKLQkJICAgc3RydWN0IHJwY19ycXN0ICpycXN0cCkKK3N0YXRpYyBpbnQgZGVjb2RlX2NiX3NlcXVlbmNlNHJlc29rKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgIHN0cnVjdCBuZnNkNF9jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5mc2Q0X3Nlc3Npb24gKnNlcyA9IGNiLT5jYl9jbHAtPmNsX2NiX3Nlc3Npb247CisJc3RydWN0IG5mc2Q0X3Nlc3Npb24gKnNlc3Npb24gPSBjYi0+Y2JfY2xwLT5jbF9jYl9zZXNzaW9uOwogCXN0cnVjdCBuZnM0X3Nlc3Npb25pZCBpZDsKIAlpbnQgc3RhdHVzOwotCXUzMiBkdW1teTsKIAlfX2JlMzIgKnA7CisJdTMyIGR1bW15OwogCi0JaWYgKGNiLT5jYl9taW5vcnZlcnNpb24gPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlzdGF0dXMgPSBkZWNvZGVfY2Jfb3BfaGRyKHhkciwgT1BfQ0JfU0VRVUVOQ0UpOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7CisJc3RhdHVzID0gLUVTRVJWRVJGQVVMVDsKIAogCS8qCiAJICogSWYgdGhlIHNlcnZlciByZXR1cm5zIGRpZmZlcmVudCB2YWx1ZXMgZm9yIHNlc3Npb25JRCwgc2xvdElEIG9yCiAJICogc2VxdWVuY2UgbnVtYmVyLCB0aGUgc2VydmVyIGlzIGxvb25leSB0dW5lcy4KIAkgKi8KLQlzdGF0dXMgPSAtRVNFUlZFUkZBVUxUOwotCi0JUkVBRF9CVUYoTkZTNF9NQVhfU0VTU0lPTklEX0xFTiArIDE2KTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBORlM0X01BWF9TRVNTSU9OSURfTEVOICsgNCArIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKIAltZW1jcHkoaWQuZGF0YSwgcCwgTkZTNF9NQVhfU0VTU0lPTklEX0xFTik7CisJaWYgKG1lbWNtcChpZC5kYXRhLCBzZXNzaW9uLT5zZV9zZXNzaW9uaWQuZGF0YSwKKwkJCQkJTkZTNF9NQVhfU0VTU0lPTklEX0xFTikgIT0gMCkgeworCQlkcHJpbnRrKCJORlM6ICVzIEludmFsaWQgc2Vzc2lvbiBpZFxuIiwgX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CiAJcCArPSBYRFJfUVVBRExFTihORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKLQlpZiAobWVtY21wKGlkLmRhdGEsIHNlcy0+c2Vfc2Vzc2lvbmlkLmRhdGEsIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pKSB7Ci0JCWRwcmludGsoIiVzIEludmFsaWQgc2Vzc2lvbiBpZFxuIiwgX19mdW5jX18pOworCisJZHVtbXkgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwlpZiAoZHVtbXkgIT0gc2Vzc2lvbi0+c2VfY2Jfc2VxX25yKSB7CisJCWRwcmludGsoIk5GUzogJXMgSW52YWxpZCBzZXF1ZW5jZSBudW1iZXJcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXQ7CiAJfQotCVJFQUQzMihkdW1teSk7Ci0JaWYgKGR1bW15ICE9IHNlcy0+c2VfY2Jfc2VxX25yKSB7Ci0JCWRwcmludGsoIiVzIEludmFsaWQgc2VxdWVuY2UgbnVtYmVyXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gb3V0OwotCX0KLQlSRUFEMzIoZHVtbXkpOyAJLyogc2xvdGlkIG11c3QgYmUgMCAqLworCisJZHVtbXkgPSBiZTMyX3RvX2NwdXAocCsrKTsKIAlpZiAoZHVtbXkgIT0gMCkgewotCQlkcHJpbnRrKCIlcyBJbnZhbGlkIHNsb3RpZFxuIiwgX19mdW5jX18pOworCQlkcHJpbnRrKCJORlM6ICVzIEludmFsaWQgc2xvdGlkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0OwogCX0KLQkvKiBGSVhNRTogcHJvY2VzcyBoaWdoZXN0IHNsb3RpZCBhbmQgdGFyZ2V0IGhpZ2hlc3Qgc2xvdGlkICovCisKKwkvKgorCSAqIEZJWE1FOiBwcm9jZXNzIGhpZ2hlc3Qgc2xvdGlkIGFuZCB0YXJnZXQgaGlnaGVzdCBzbG90aWQKKwkgKi8KIAlzdGF0dXMgPSAwOwogb3V0OgogCXJldHVybiBzdGF0dXM7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGRlY29kZV9jYl9zZXF1ZW5jZTRyZXMoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgIHN0cnVjdCBuZnNkNF9jYWxsYmFjayAqY2IpCit7CisJZW51bSBuZnNzdGF0NCBuZnNlcnI7CisJaW50IHN0YXR1czsKKworCWlmIChjYi0+Y2JfbWlub3J2ZXJzaW9uID09IDApCisJCXJldHVybiAwOworCisJc3RhdHVzID0gZGVjb2RlX2NiX29wX3N0YXR1cyh4ZHIsIE9QX0NCX1NFUVVFTkNFLCAmbmZzZXJyKTsKKwlpZiAodW5saWtlbHkoc3RhdHVzKSkKKwkJZ290byBvdXQ7CisJaWYgKHVubGlrZWx5KG5mc2VyciAhPSBORlM0X09LKSkKKwkJZ290byBvdXRfZGVmYXVsdDsKKwlzdGF0dXMgPSBkZWNvZGVfY2Jfc2VxdWVuY2U0cmVzb2soeGRyLCBjYik7CitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK291dF9kZWZhdWx0OgorCXJldHVybiBuZnNfY2Jfc3RhdF90b19lcnJubyhzdGF0dXMpOworfQorCisvKgorICogTkZTdjQuMCBhbmQgTkZTdjQuMSBYRFIgZW5jb2RlIGZ1bmN0aW9ucworICoKKyAqIE5GU3Y0LjAgY2FsbGJhY2sgYXJndW1lbnQgdHlwZXMgYXJlIGRlZmluZWQgaW4gc2VjdGlvbiAxNSBvZiBSRkMKKyAqIDM1MzA6ICJOZXR3b3JrIEZpbGUgU3lzdGVtIChORlMpIHZlcnNpb24gNCBQcm90b2NvbCIgYW5kIHNlY3Rpb24gMjAKKyAqIG9mIFJGQyA1NjYxOiAgIk5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykgVmVyc2lvbiA0IE1pbm9yIFZlcnNpb24gMQorICogUHJvdG9jb2wiLgorICovCisKKy8qCisgKiBOQjogV2l0aG91dCB0aGlzIHplcm8gc3BhY2UgcmVzZXJ2YXRpb24sIGNhbGxiYWNrcyBvdmVyIGtyYjVwIGZhaWwKKyAqLworc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX2NiX251bGwoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJIHZvaWQgKl9fdW51c2VkKQoreworCXhkcl9yZXNlcnZlX3NwYWNlKHhkciwgMCk7Cit9CisKKy8qCisgKiAyMC4yLiBPcGVyYXRpb24gNDogQ0JfUkVDQUxMIC0gUmVjYWxsIGEgRGVsZWdhdGlvbgorICovCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfY2JfcmVjYWxsKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBuZnNkNF9jYWxsYmFjayAqY2IpCit7CisJY29uc3Qgc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqYXJncyA9IGNiLT5jYl9vcDsKKwlzdHJ1Y3QgbmZzNF9jYl9jb21wb3VuZF9oZHIgaGRyID0geworCQkuaWRlbnQgPSBjYi0+Y2JfY2xwLT5jbF9jYl9pZGVudCwKKwkJLm1pbm9ydmVyc2lvbiA9IGNiLT5jYl9taW5vcnZlcnNpb24sCisJfTsKKworCWVuY29kZV9jYl9jb21wb3VuZDRhcmdzKHhkciwgJmhkcik7CisJZW5jb2RlX2NiX3NlcXVlbmNlNGFyZ3MoeGRyLCBjYiwgJmhkcik7CisJZW5jb2RlX2NiX3JlY2FsbDRhcmdzKHhkciwgYXJncywgJmhkcik7CisJZW5jb2RlX2NiX25vcHMoJmhkcik7CiB9CiAKIAotc3RhdGljIGludAotbmZzNF94ZHJfZGVjX2NiX251bGwoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCkKKy8qCisgKiBORlN2NC4wIGFuZCBORlN2NC4xIFhEUiBkZWNvZGUgZnVuY3Rpb25zCisgKgorICogTkZTdjQuMCBjYWxsYmFjayByZXN1bHQgdHlwZXMgYXJlIGRlZmluZWQgaW4gc2VjdGlvbiAxNSBvZiBSRkMKKyAqIDM1MzA6ICJOZXR3b3JrIEZpbGUgU3lzdGVtIChORlMpIHZlcnNpb24gNCBQcm90b2NvbCIgYW5kIHNlY3Rpb24gMjAKKyAqIG9mIFJGQyA1NjYxOiAgIk5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykgVmVyc2lvbiA0IE1pbm9yIFZlcnNpb24gMQorICogUHJvdG9jb2wiLgorICovCisKK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2NiX251bGwoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJdm9pZCAqX191bnVzZWQpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLW5mczRfeGRyX2RlY19jYl9yZWNhbGwoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgX19iZTMyICpwLAotCQlzdHJ1Y3QgbmZzZDRfY2FsbGJhY2sgKmNiKQorLyoKKyAqIDIwLjIuIE9wZXJhdGlvbiA0OiBDQl9SRUNBTEwgLSBSZWNhbGwgYSBEZWxlZ2F0aW9uCisgKi8KK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2NiX3JlY2FsbChzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLAorCQkJCSAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgIHN0cnVjdCBuZnNkNF9jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBuZnM0X2NiX2NvbXBvdW5kX2hkciBoZHI7CisJZW51bSBuZnNzdGF0NCBuZnNlcnI7CiAJaW50IHN0YXR1czsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcnFzdHAtPnJxX3Jjdl9idWYsIHApOwotCXN0YXR1cyA9IGRlY29kZV9jYl9jb21wb3VuZF9oZHIoJnhkciwgJmhkcik7Ci0JaWYgKHN0YXR1cykKKwlzdGF0dXMgPSBkZWNvZGVfY2JfY29tcG91bmQ0cmVzKHhkciwgJmhkcik7CisJaWYgKHVubGlrZWx5KHN0YXR1cykpCiAJCWdvdG8gb3V0OwotCWlmIChjYikgewotCQlzdGF0dXMgPSBkZWNvZGVfY2Jfc2VxdWVuY2UoJnhkciwgY2IsIHJxc3RwKTsKLQkJaWYgKHN0YXR1cykKKworCWlmIChjYiAhPSBOVUxMKSB7CisJCXN0YXR1cyA9IGRlY29kZV9jYl9zZXF1ZW5jZTRyZXMoeGRyLCBjYik7CisJCWlmICh1bmxpa2VseShzdGF0dXMpKQogCQkJZ290byBvdXQ7CiAJfQotCXN0YXR1cyA9IGRlY29kZV9jYl9vcF9oZHIoJnhkciwgT1BfQ0JfUkVDQUxMKTsKKworCXN0YXR1cyA9IGRlY29kZV9jYl9vcF9zdGF0dXMoeGRyLCBPUF9DQl9SRUNBTEwsICZuZnNlcnIpOworCWlmICh1bmxpa2VseShzdGF0dXMpKQorCQlnb3RvIG91dDsKKwlpZiAodW5saWtlbHkobmZzZXJyICE9IE5GUzRfT0spKQorCQlnb3RvIG91dF9kZWZhdWx0Owogb3V0OgogCXJldHVybiBzdGF0dXM7CitvdXRfZGVmYXVsdDoKKwlyZXR1cm4gbmZzX2NiX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKIH0KIAogLyoKICAqIFJQQyBwcm9jZWR1cmUgdGFibGVzCiAgKi8KLSNkZWZpbmUgUFJPQyhwcm9jLCBjYWxsLCBhcmd0eXBlLCByZXN0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLVtORlNQUk9DNF9DTE5UXyMjcHJvY10gPSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAotICAgICAgICAucF9wcm9jICAgPSBORlNQUk9DNF9DQl8jI2NhbGwsCQkJCQlcCi0gICAgICAgIC5wX2VuY29kZSA9IChreGRycHJvY190KSBuZnM0X3hkcl8jI2FyZ3R5cGUsICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC5wX2RlY29kZSA9IChreGRycHJvY190KSBuZnM0X3hkcl8jI3Jlc3R5cGUsICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC5wX2FyZ2xlbiA9IE5GUzRfIyNhcmd0eXBlIyNfc3osICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC5wX3JlcGxlbiA9IE5GUzRfIyNyZXN0eXBlIyNfc3osICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC5wX3N0YXRpZHggPSBORlNQUk9DNF9DQl8jI2NhbGwsCQkJCVwKLQkucF9uYW1lICAgPSAjcHJvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBQUk9DKHByb2MsIGNhbGwsIGFyZ3R5cGUsIHJlc3R5cGUpCQkJCVwKK1tORlNQUk9DNF9DTE5UXyMjcHJvY10gPSB7CQkJCQkJXAorCS5wX3Byb2MgICAgPSBORlNQUk9DNF9DQl8jI2NhbGwsCQkJCVwKKwkucF9lbmNvZGUgID0gKGt4ZHJlcHJvY190KW5mczRfeGRyX2VuY18jI2FyZ3R5cGUsCQlcCisJLnBfZGVjb2RlICA9IChreGRyZHByb2NfdCluZnM0X3hkcl9kZWNfIyNyZXN0eXBlLAkJXAorCS5wX2FyZ2xlbiAgPSBORlM0X2VuY18jI2FyZ3R5cGUjI19zeiwJCQkJXAorCS5wX3JlcGxlbiAgPSBORlM0X2RlY18jI3Jlc3R5cGUjI19zeiwJCQkJXAorCS5wX3N0YXRpZHggPSBORlNQUk9DNF9DQl8jI2NhbGwsCQkJCVwKKwkucF9uYW1lICAgID0gI3Byb2MsCQkJCQkJXAogfQogCi1zdGF0aWMgc3RydWN0IHJwY19wcm9jaW5mbyAgICAgbmZzNF9jYl9wcm9jZWR1cmVzW10gPSB7Ci0gICAgUFJPQyhDQl9OVUxMLCAgICAgIE5VTEwsICAgICBlbmNfY2JfbnVsbCwgICAgIGRlY19jYl9udWxsKSwKLSAgICBQUk9DKENCX1JFQ0FMTCwgICAgQ09NUE9VTkQsICAgZW5jX2NiX3JlY2FsbCwgICAgICBkZWNfY2JfcmVjYWxsKSwKK3N0YXRpYyBzdHJ1Y3QgcnBjX3Byb2NpbmZvIG5mczRfY2JfcHJvY2VkdXJlc1tdID0geworCVBST0MoQ0JfTlVMTCwJTlVMTCwJCWNiX251bGwsCWNiX251bGwpLAorCVBST0MoQ0JfUkVDQUxMLAlDT01QT1VORCwJY2JfcmVjYWxsLAljYl9yZWNhbGwpLAogfTsKIAotc3RhdGljIHN0cnVjdCBycGNfdmVyc2lvbiAgICAgICBuZnNfY2JfdmVyc2lvbjQgPSB7CitzdGF0aWMgc3RydWN0IHJwY192ZXJzaW9uIG5mc19jYl92ZXJzaW9uNCA9IHsKIC8qCiAgKiBOb3RlIG9uIHRoZSBjYWxsYmFjayBycGMgcHJvZ3JhbSB2ZXJzaW9uIG51bWJlcjogZGVzcGl0ZSBsYW5ndWFnZSBpbiByZmMKICAqIDU2NjEgc2VjdGlvbiAxOC4zNi4zIHJlcXVpcmluZyBzZXJ2ZXJzIHRvIHVzZSA0IGluIHRoaXMgZmllbGQsIHRoZQpAQCAtNDQwLDI5ICs1OTgsMjkgQEAKICAqIGluIHByYWN0aWNlIHRoYXQgYXBwZWFycyB0byBiZSB3aGF0IGltcGxlbWVudGF0aW9ucyB1c2UuICBUaGUgc2VjdGlvbgogICogMTguMzYuMyBsYW5ndWFnZSBpcyBleHBlY3RlZCB0byBiZSBmaXhlZCBpbiBhbiBlcnJhdHVtLgogICovCi0gICAgICAgIC5udW1iZXIgICAgICAgICAgICAgICAgID0gMSwKLSAgICAgICAgLm5ycHJvY3MgICAgICAgICAgICAgICAgPSBBUlJBWV9TSVpFKG5mczRfY2JfcHJvY2VkdXJlcyksCi0gICAgICAgIC5wcm9jcyAgICAgICAgICAgICAgICAgID0gbmZzNF9jYl9wcm9jZWR1cmVzCisJLm51bWJlcgkJCT0gMSwKKwkubnJwcm9jcwkJPSBBUlJBWV9TSVpFKG5mczRfY2JfcHJvY2VkdXJlcyksCisJLnByb2NzCQkJPSBuZnM0X2NiX3Byb2NlZHVyZXMKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcnBjX3ZlcnNpb24gKgluZnNfY2JfdmVyc2lvbltdID0geworc3RhdGljIHN0cnVjdCBycGNfdmVyc2lvbiAqbmZzX2NiX3ZlcnNpb25bXSA9IHsKIAkmbmZzX2NiX3ZlcnNpb240LAogfTsKIAogc3RhdGljIHN0cnVjdCBycGNfcHJvZ3JhbSBjYl9wcm9ncmFtOwogCiBzdGF0aWMgc3RydWN0IHJwY19zdGF0IGNiX3N0YXRzID0gewotCQkucHJvZ3JhbQk9ICZjYl9wcm9ncmFtCisJLnByb2dyYW0JCT0gJmNiX3Byb2dyYW0KIH07CiAKICNkZWZpbmUgTkZTNF9DQUxMQkFDSyAweDQwMDAwMDAwCiBzdGF0aWMgc3RydWN0IHJwY19wcm9ncmFtIGNiX3Byb2dyYW0gPSB7Ci0JCS5uYW1lIAkJPSAibmZzNF9jYiIsCi0JCS5udW1iZXIJCT0gTkZTNF9DQUxMQkFDSywKLQkJLm5ydmVycwkJPSBBUlJBWV9TSVpFKG5mc19jYl92ZXJzaW9uKSwKLQkJLnZlcnNpb24JPSBuZnNfY2JfdmVyc2lvbiwKLQkJLnN0YXRzCQk9ICZjYl9zdGF0cywKLQkJLnBpcGVfZGlyX25hbWUgID0gIi9uZnNkNF9jYiIsCisJLm5hbWUJCQk9ICJuZnM0X2NiIiwKKwkubnVtYmVyCQkJPSBORlM0X0NBTExCQUNLLAorCS5ucnZlcnMJCQk9IEFSUkFZX1NJWkUobmZzX2NiX3ZlcnNpb24pLAorCS52ZXJzaW9uCQk9IG5mc19jYl92ZXJzaW9uLAorCS5zdGF0cwkJCT0gJmNiX3N0YXRzLAorCS5waXBlX2Rpcl9uYW1lCQk9ICIvbmZzZDRfY2IiLAogfTsKIAogc3RhdGljIGludCBtYXhfY2JfdGltZSh2b2lkKQpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWcgYi9mcy9ub3RpZnkvZmFub3RpZnkvS2NvbmZpZwppbmRleCAzYWMzNmI3Li43ZGNlZmYwIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZmFub3RpZnkvS2NvbmZpZworKysgYi9mcy9ub3RpZnkvZmFub3RpZnkvS2NvbmZpZwpAQCAtNiw3ICs2LDcgQEAKIAktLS1oZWxwLS0tCiAJICAgU2F5IFkgaGVyZSB0byBlbmFibGUgZmFub3RpZnkgc3Vwb3J0LiAgZmFub3RpZnkgaXMgYSBmaWxlIGFjY2VzcwogCSAgIG5vdGlmaWNhdGlvbiBzeXN0ZW0gd2hpY2ggZGlmZmVycyBmcm9tIGlub3RpZnkgaW4gdGhhdCBpdCBzZW5kcwotCSAgIGFuZCBvcGVuIGZpbGUgZGVzY3JpcHRvciB0byB0aGUgdXNlcnNwYWNlIGxpc3RlbmVyIGFsb25nIHdpdGgKKwkgICBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciB0byB0aGUgdXNlcnNwYWNlIGxpc3RlbmVyIGFsb25nIHdpdGgKIAkgICB0aGUgZXZlbnQuCiAKIAkgICBJZiB1bnN1cmUsIHNheSBZLgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9NYWtlZmlsZSBiL2ZzL250ZnMvTWFrZWZpbGUKaW5kZXggNThiNmJlOS4uNGZmMDI4ZiAxMDA2NDQKLS0tIGEvZnMvbnRmcy9NYWtlZmlsZQorKysgYi9mcy9udGZzL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCSAgICAgaW5kZXgubyBpbm9kZS5vIG1mdC5vIG1zdC5vIG5hbWVpLm8gcnVubGlzdC5vIHN1cGVyLm8gc3lzY3RsLm8gXAogCSAgICAgdW5pc3RyLm8gdXBjYXNlLm8KIAotRVhUUkFfQ0ZMQUdTID0gLUROVEZTX1ZFUlNJT049XCIyLjEuMjlcIgorRVhUUkFfQ0ZMQUdTID0gLUROVEZTX1ZFUlNJT049XCIyLjEuMzBcIgogCiBpZmVxICgkKENPTkZJR19OVEZTX0RFQlVHKSx5KQogRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2ZzL250ZnMvZmlsZS5jIGIvZnMvbnRmcy9maWxlLmMKaW5kZXggMTEzZWJkOS4uZjRiMTA1NyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9maWxlLmMKKysrIGIvZnMvbnRmcy9maWxlLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogZmlsZS5jIC0gTlRGUyBrZXJuZWwgZmlsZSBvcGVyYXRpb25zLiAgUGFydCBvZiB0aGUgTGludXgtTlRGUyBwcm9qZWN0LgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3IEFudG9uIEFsdGFwYXJtYWtvdgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTEgQW50b24gQWx0YXBhcm1ha292IGFuZCBUdXhlcmEgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbS9pbmNsdWRlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKQEAgLTEzODAsMTUgKzEzODAsMTQgQEAKICAqIHBhZ2VzIChvdXQgdG8gb2Zmc2V0ICsgYnl0ZXMpLCB0byBlbXVsYXRlIG50ZnNfY29weV9mcm9tX3VzZXIoKSdzCiAgKiBzaW5nbGUtc2VnbWVudCBiZWhhdmlvdXIuCiAgKgotICogV2UgY2FsbCB0aGUgc2FtZSBoZWxwZXIgKF9fbnRmc19jb3B5X2Zyb21fdXNlcl9pb3ZlY19pbmF0b21pYygpKSBib3RoCi0gKiB3aGVuIGF0b21pYyBhbmQgd2hlbiBub3QgYXRvbWljLiAgVGhpcyBpcyBvayBiZWNhdXNlCi0gKiBfX250ZnNfY29weV9mcm9tX3VzZXJfaW92ZWNfaW5hdG9taWMoKSBjYWxscyBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKCkKLSAqIGFuZCBpdCBpcyBvayB0byBjYWxsIHRoaXMgd2hlbiBub24tYXRvbWljLgotICogSW5mYWN0LCB0aGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYygpIGFuZAorICogV2UgY2FsbCB0aGUgc2FtZSBoZWxwZXIgKF9fbnRmc19jb3B5X2Zyb21fdXNlcl9pb3ZlY19pbmF0b21pYygpKSBib3RoIHdoZW4KKyAqIGF0b21pYyBhbmQgd2hlbiBub3QgYXRvbWljLiAgVGhpcyBpcyBvayBiZWNhdXNlIGl0IGNhbGxzCisgKiBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKCkgYW5kIGl0IGlzIG9rIHRvIGNhbGwgdGhpcyB3aGVuIG5vbi1hdG9taWMuICBJbgorICogZmFjdCwgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoKSBhbmQKICAqIF9fY29weV9mcm9tX3VzZXIoKSBpcyB0aGF0IHRoZSBsYXR0ZXIgY2FsbHMgbWlnaHRfc2xlZXAoKSBhbmQgdGhlIGZvcm1lcgotICogc2hvdWxkIG5vdCB6ZXJvIHRoZSB0YWlsIG9mIHRoZSBidWZmZXIgb24gZXJyb3IuICBBbmQgb24gbWFueQotICogYXJjaGl0ZWN0dXJlcyBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKCkgaXMganVzdCBkZWZpbmVkIHRvCi0gKiBfX2NvcHlfZnJvbV91c2VyKCkgc28gaXQgbWFrZXMgbm8gZGlmZmVyZW5jZSBhdCBhbGwgb24gdGhvc2UgYXJjaGl0ZWN0dXJlcy4KKyAqIHNob3VsZCBub3QgemVybyB0aGUgdGFpbCBvZiB0aGUgYnVmZmVyIG9uIGVycm9yLiAgQW5kIG9uIG1hbnkgYXJjaGl0ZWN0dXJlcworICogX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYygpIGlzIGp1c3QgZGVmaW5lZCB0byBfX2NvcHlfZnJvbV91c2VyKCkgc28gaXQKKyAqIG1ha2VzIG5vIGRpZmZlcmVuY2UgYXQgYWxsIG9uIHRob3NlIGFyY2hpdGVjdHVyZXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG50ZnNfY29weV9mcm9tX3VzZXJfaW92ZWMoc3RydWN0IHBhZ2UgKipwYWdlcywKIAkJdW5zaWduZWQgbnJfcGFnZXMsIHVuc2lnbmVkIG9mcywgY29uc3Qgc3RydWN0IGlvdmVjICoqaW92LApAQCAtMTQwOSwyOCArMTQwOCwyOCBAQAogCQlpZiAodW5saWtlbHkoY29waWVkICE9IGxlbikpIHsKIAkJCS8qIERvIGl0IHRoZSBzbG93IHdheS4gKi8KIAkJCWFkZHIgPSBrbWFwKCpwYWdlcyk7Ci0JCQljb3BpZWQgPSBfX250ZnNfY29weV9mcm9tX3VzZXJfaW92ZWNfaW5hdG9taWMoYWRkciArIG9mcywKLQkJCQkJKmlvdiwgKmlvdl9vZnMsIGxlbik7Ci0JCQkvKgotCQkJICogWmVybyB0aGUgcmVzdCBvZiB0aGUgdGFyZ2V0IGxpa2UgX19jb3B5X2Zyb21fdXNlcigpLgotCQkJICovCi0JCQltZW1zZXQoYWRkciArIG9mcyArIGNvcGllZCwgMCwgbGVuIC0gY29waWVkKTsKLQkJCWt1bm1hcCgqcGFnZXMpOworCQkJY29waWVkID0gX19udGZzX2NvcHlfZnJvbV91c2VyX2lvdmVjX2luYXRvbWljKGFkZHIgKworCQkJCQlvZnMsICppb3YsICppb3Zfb2ZzLCBsZW4pOwogCQkJaWYgKHVubGlrZWx5KGNvcGllZCAhPSBsZW4pKQogCQkJCWdvdG8gZXJyX291dDsKKwkJCWt1bm1hcCgqcGFnZXMpOwogCQl9CiAJCXRvdGFsICs9IGxlbjsKKwkJbnRmc19zZXRfbmV4dF9pb3ZlYyhpb3YsIGlvdl9vZnMsIGxlbik7CiAJCWJ5dGVzIC09IGxlbjsKIAkJaWYgKCFieXRlcykKIAkJCWJyZWFrOwotCQludGZzX3NldF9uZXh0X2lvdmVjKGlvdiwgaW92X29mcywgbGVuKTsKIAkJb2ZzID0gMDsKIAl9IHdoaWxlICgrK3BhZ2VzIDwgbGFzdF9wYWdlKTsKIG91dDoKIAlyZXR1cm4gdG90YWw7CiBlcnJfb3V0OgotCXRvdGFsICs9IGNvcGllZDsKKwlCVUdfT04oY29waWVkID4gbGVuKTsKIAkvKiBaZXJvIHRoZSByZXN0IG9mIHRoZSB0YXJnZXQgbGlrZSBfX2NvcHlfZnJvbV91c2VyKCkuICovCisJbWVtc2V0KGFkZHIgKyBvZnMgKyBjb3BpZWQsIDAsIGxlbiAtIGNvcGllZCk7CisJa3VubWFwKCpwYWdlcyk7CisJdG90YWwgKz0gY29waWVkOworCW50ZnNfc2V0X25leHRfaW92ZWMoaW92LCBpb3Zfb2ZzLCBjb3BpZWQpOwogCXdoaWxlICgrK3BhZ2VzIDwgbGFzdF9wYWdlKSB7CiAJCWJ5dGVzIC09IGxlbjsKIAkJaWYgKCFieXRlcykKZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuYwppbmRleCBhMzBlY2FjYy4uMjkwOTlhMCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9zdXBlci5jCisrKyBiL2ZzL250ZnMvc3VwZXIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBzdXBlci5jIC0gTlRGUyBrZXJuZWwgc3VwZXIgYmxvY2sgaGFuZGxpbmcuIFBhcnQgb2YgdGhlIExpbnV4LU5URlMgcHJvamVjdC4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNyBBbnRvbiBBbHRhcGFybWFrb3YKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDExIEFudG9uIEFsdGFwYXJtYWtvdiBhbmQgVHV4ZXJhIEluYy4KICAqIENvcHlyaWdodCAoYykgMjAwMSwyMDAyIFJpY2hhcmQgUnVzc29uCiAgKgogICogVGhpcyBwcm9ncmFtL2luY2x1ZGUgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMxOTMsOCArMzE5Myw4IEBACiAJbnRmc19zeXNjdGwoMCk7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIkFudG9uIEFsdGFwYXJtYWtvdiA8YWlhMjFAY2FudGFiLm5ldD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTlRGUyAxLjIvMy54IGRyaXZlciAtIENvcHlyaWdodCAoYykgMjAwMS0yMDA3IEFudG9uIEFsdGFwYXJtYWtvdiIpOworTU9EVUxFX0FVVEhPUigiQW50b24gQWx0YXBhcm1ha292IDxhbnRvbkB0dXhlcmEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOVEZTIDEuMi8zLnggZHJpdmVyIC0gQ29weXJpZ2h0IChjKSAyMDAxLTIwMTEgQW50b24gQWx0YXBhcm1ha292IGFuZCBUdXhlcmEgSW5jLiIpOwogTU9EVUxFX1ZFUlNJT04oTlRGU19WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKICNpZmRlZiBERUJVRwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvS2NvbmZpZyBiL2ZzL29jZnMyL0tjb25maWcKaW5kZXggMGQ4NDA2Ni4uYWIxNTJjMCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvS2NvbmZpZworKysgYi9mcy9vY2ZzMi9LY29uZmlnCkBAIC01MSw3ICs1MSw3IEBACiAKIGNvbmZpZyBPQ0ZTMl9GU19TVEFUUwogCWJvb2wgIk9DRlMyIHN0YXRpc3RpY3MiCi0JZGVwZW5kcyBvbiBPQ0ZTMl9GUworCWRlcGVuZHMgb24gT0NGUzJfRlMgJiYgREVCVUdfRlMKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBhbGxvd3Mgc29tZSBmcyBzdGF0aXN0aWNzIHRvIGJlIGNhcHR1cmVkLiBFbmFibGluZwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWxsb2MuYyBiL2ZzL29jZnMyL2FsbG9jLmMKaW5kZXggNTkyZmFlNS4uZTQ5ODRlMiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWxsb2MuYworKysgYi9mcy9vY2ZzMi9hbGxvYy5jCkBAIC01NjUsNyArNTY1LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBvY2ZzMl9mcmVlX3RydW5jYXRlX2NvbnRleHQoc3RydWN0IG9jZnMyX3RydW5jYXRlX2NvbnRleHQgKnRjKTsKIHN0YXRpYyBpbnQgb2NmczJfY2FjaGVfZXh0ZW50X2Jsb2NrX2ZyZWUoc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmN0eHQsCiAJCQkJCSBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYik7CiBzdGF0aWMgdm9pZCBvY2ZzMl9hZGp1c3RfcmlnaHRtb3N0X3JlY29yZHMoaGFuZGxlX3QgKmhhbmRsZSwKQEAgLTU4NTgsNiArNTg1Nyw3IEBACiAKIAlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgdGxfYmgpOwogCisJb3NiLT50cnVuY2F0ZWRfY2x1c3RlcnMgKz0gbnVtX2NsdXN0ZXJzOwogYmFpbDoKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNTkyOSw2ICs1OTI5LDggQEAKIAkJaS0tOwogCX0KIAorCW9zYi0+dHJ1bmNhdGVkX2NsdXN0ZXJzID0gMDsKKwogYmFpbDoKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNzEzOSw2NCArNzE0MSw2IEBACiB9CiAKIC8qCi0gKiBFeHBlY3RzIHRoZSBpbm9kZSB0byBhbHJlYWR5IGJlIGxvY2tlZC4KLSAqLwotaW50IG9jZnMyX3ByZXBhcmVfdHJ1bmNhdGUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKLQkJCSAgIHN0cnVjdCBvY2ZzMl90cnVuY2F0ZV9jb250ZXh0ICoqdGMpCi17Ci0JaW50IHN0YXR1czsKLQl1bnNpZ25lZCBpbnQgbmV3X2lfY2x1c3RlcnM7Ci0Jc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmU7Ci0Jc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpsYXN0X2ViX2JoID0gTlVMTDsKLQotCW1sb2dfZW50cnlfdm9pZCgpOwotCi0JKnRjID0gTlVMTDsKLQotCW5ld19pX2NsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKG9zYi0+c2IsCi0JCQkJCQkgIGlfc2l6ZV9yZWFkKGlub2RlKSk7Ci0JZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBmZV9iaC0+Yl9kYXRhOwotCi0JbWxvZygwLCAiZmUtPmlfY2x1c3RlcnMgPSAldSwgbmV3X2lfY2x1c3RlcnMgPSAldSwgZmUtPmlfc2l6ZSA9IgotCSAgICAgIiVsbHVcbiIsIGxlMzJfdG9fY3B1KGZlLT5pX2NsdXN0ZXJzKSwgbmV3X2lfY2x1c3RlcnMsCi0JICAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGZlLT5pX3NpemUpKTsKLQotCSp0YyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvY2ZzMl90cnVuY2F0ZV9jb250ZXh0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEoKnRjKSkgewotCQlzdGF0dXMgPSAtRU5PTUVNOwotCQltbG9nX2Vycm5vKHN0YXR1cyk7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0Jb2NmczJfaW5pdF9kZWFsbG9jX2N0eHQoJigqdGMpLT50Y19kZWFsbG9jKTsKLQotCWlmIChmZS0+aWQyLmlfbGlzdC5sX3RyZWVfZGVwdGgpIHsKLQkJc3RhdHVzID0gb2NmczJfcmVhZF9leHRlbnRfYmxvY2soSU5PREVfQ0FDSEUoaW5vZGUpLAotCQkJCQkJIGxlNjRfdG9fY3B1KGZlLT5pX2xhc3RfZWJfYmxrKSwKLQkJCQkJCSAmbGFzdF9lYl9iaCk7Ci0JCWlmIChzdGF0dXMgPCAwKSB7Ci0JCQltbG9nX2Vycm5vKHN0YXR1cyk7Ci0JCQlnb3RvIGJhaWw7Ci0JCX0KLQkJZWIgPSAoc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqKSBsYXN0X2ViX2JoLT5iX2RhdGE7Ci0JfQotCi0JKCp0YyktPnRjX2xhc3RfZWJfYmggPSBsYXN0X2ViX2JoOwotCi0Jc3RhdHVzID0gMDsKLWJhaWw6Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJaWYgKCp0YykKLQkJCW9jZnMyX2ZyZWVfdHJ1bmNhdGVfY29udGV4dCgqdGMpOwotCQkqdGMgPSBOVUxMOwotCX0KLQltbG9nX2V4aXRfdm9pZCgpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCiAgKiAnc3RhcnQnIGlzIGluY2x1c2l2ZSwgJ2VuZCcgaXMgbm90LgogICovCiBpbnQgb2NmczJfdHJ1bmNhdGVfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCkBAIC03MjcwLDE4ICs3MjE0LDMgQEAKIG91dDoKIAlyZXR1cm4gcmV0OwogfQotCi1zdGF0aWMgdm9pZCBvY2ZzMl9mcmVlX3RydW5jYXRlX2NvbnRleHQoc3RydWN0IG9jZnMyX3RydW5jYXRlX2NvbnRleHQgKnRjKQotewotCS8qCi0JICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY29tcGxldGluZyBkZWFsbG9jYXRpb24KLQkgKiBiZWZvcmUgZnJlZWluZyB0aGUgY29udGV4dC4KLQkgKi8KLQlpZiAodGMtPnRjX2RlYWxsb2MuY19maXJzdF9zdWJhbGxvY2F0b3IgIT0gTlVMTCkKLQkJbWxvZyhNTF9OT1RJQ0UsCi0JCSAgICAgIlRydW5jYXRlIGNvbXBsZXRpb24gaGFzIG5vbi1lbXB0eSBkZWFsbG9jIGNvbnRleHRcbiIpOwotCi0JYnJlbHNlKHRjLT50Y19sYXN0X2ViX2JoKTsKLQotCWtmcmVlKHRjKTsKLX0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FsbG9jLmggYi9mcy9vY2ZzMi9hbGxvYy5oCmluZGV4IDU1NzYyYjUuLjNiZDA4YTAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FsbG9jLmgKKysrIGIvZnMvb2NmczIvYWxsb2MuaApAQCAtMjI4LDEwICsyMjgsNiBAQAogCiBpbnQgb2NmczJfemVyb19yYW5nZV9mb3JfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQkgIHU2NCByYW5nZV9zdGFydCwgdTY0IHJhbmdlX2VuZCk7Ci1pbnQgb2NmczJfcHJlcGFyZV90cnVuY2F0ZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAotCQkJICAgc3RydWN0IG9jZnMyX3RydW5jYXRlX2NvbnRleHQgKip0Yyk7CiBpbnQgb2NmczJfY29tbWl0X3RydW5jYXRlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FvcHMuYyBiL2ZzL29jZnMyL2FvcHMuYwppbmRleCAwZDdjNTU0Li4xZmJiMGUyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hb3BzLmMKKysrIGIvZnMvb2NmczIvYW9wcy5jCkBAIC0xNjMwLDYgKzE2MzAsNDMgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogVHJ5IHRvIGZsdXNoIHRydW5jYXRlIGxvZ3MgaWYgd2UgY2FuIGZyZWUgZW5vdWdoIGNsdXN0ZXJzIGZyb20gaXQuCisgKiBBcyBmb3IgcmV0dXJuIHZhbHVlLCAiPCAwIiBtZWFucyBlcnJvciwgIjAiIG5vIHNwYWNlIGFuZCAiMSIgbWVhbnMKKyAqIHdlIGhhdmUgZnJlZWQgZW5vdWdoIHNwYWNlcyBhbmQgbGV0IHRoZSBjYWxsZXIgdHJ5IHRvIGFsbG9jYXRlIGFnYWluLgorICovCitzdGF0aWMgaW50IG9jZnMyX3RyeV90b19mcmVlX3RydW5jYXRlX2xvZyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJICB1bnNpZ25lZCBpbnQgbmVlZGVkKQoreworCXRpZF90IHRhcmdldDsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgdHJ1bmNhdGVkX2NsdXN0ZXJzOworCisJbXV0ZXhfbG9jaygmb3NiLT5vc2JfdGxfaW5vZGUtPmlfbXV0ZXgpOworCXRydW5jYXRlZF9jbHVzdGVycyA9IG9zYi0+dHJ1bmNhdGVkX2NsdXN0ZXJzOworCW11dGV4X3VubG9jaygmb3NiLT5vc2JfdGxfaW5vZGUtPmlfbXV0ZXgpOworCisJLyoKKwkgKiBDaGVjayB3aGV0aGVyIHdlIGNhbiBzdWNjZWVkIGluIGFsbG9jYXRpbmcgaWYgd2UgZnJlZQorCSAqIHRoZSB0cnVuY2F0ZSBsb2cuCisJICovCisJaWYgKHRydW5jYXRlZF9jbHVzdGVycyA8IG5lZWRlZCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBvY2ZzMl9mbHVzaF90cnVuY2F0ZV9sb2cob3NiKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGpiZDJfam91cm5hbF9zdGFydF9jb21taXQob3NiLT5qb3VybmFsLT5qX2pvdXJuYWwsICZ0YXJnZXQpKSB7CisJCWpiZDJfbG9nX3dhaXRfY29tbWl0KG9zYi0+am91cm5hbC0+al9qb3VybmFsLCB0YXJnZXQpOworCQlyZXQgPSAxOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgb2NmczJfd3JpdGVfYmVnaW5fbm9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLAogCQkJICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCSAgICAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKQEAgLTE2MzcsNyArMTY3NCw3IEBACiAJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsIHN0cnVjdCBwYWdlICptbWFwX3BhZ2UpCiB7CiAJaW50IHJldCwgY2x1c3Rlcl9vZl9wYWdlcywgY3JlZGl0cyA9IE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTOwotCXVuc2lnbmVkIGludCBjbHVzdGVyc190b19hbGxvYywgZXh0ZW50c190b19zcGxpdDsKKwl1bnNpZ25lZCBpbnQgY2x1c3RlcnNfdG9fYWxsb2MsIGV4dGVudHNfdG9fc3BsaXQsIGNsdXN0ZXJzX25lZWQgPSAwOwogCXN0cnVjdCBvY2ZzMl93cml0ZV9jdHh0ICp3YzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKQEAgLTE2NDYsNyArMTY4Myw5IEBACiAJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMgPSBOVUxMOwogCWhhbmRsZV90ICpoYW5kbGU7CiAJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCWludCB0cnlfZnJlZSA9IDEsIHJldDE7CiAKK3RyeV9hZ2FpbjoKIAlyZXQgPSBvY2ZzMl9hbGxvY193cml0ZV9jdHh0KCZ3Yywgb3NiLCBwb3MsIGxlbiwgZGlfYmgpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTY4MSw2ICsxNzIwLDcgQEAKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKIAl9IGVsc2UgaWYgKHJldCA9PSAxKSB7CisJCWNsdXN0ZXJzX25lZWQgPSB3Yy0+d19jbGVuOwogCQlyZXQgPSBvY2ZzMl9yZWZjb3VudF9jb3coaW5vZGUsIGZpbHAsIGRpX2JoLAogCQkJCQkgd2MtPndfY3Bvcywgd2MtPndfY2xlbiwgVUlOVF9NQVgpOwogCQlpZiAocmV0KSB7CkBAIC0xNjk1LDYgKzE3MzUsNyBAQAogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwogCX0KKwljbHVzdGVyc19uZWVkICs9IGNsdXN0ZXJzX3RvX2FsbG9jOwogCiAJZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKXdjLT53X2RpX2JoLT5iX2RhdGE7CiAKQEAgLTE4MTcsNiArMTg1OCwyMiBAQAogCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoZGF0YV9hYyk7CiAJaWYgKG1ldGFfYWMpCiAJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKworCWlmIChyZXQgPT0gLUVOT1NQQyAmJiB0cnlfZnJlZSkgeworCQkvKgorCQkgKiBUcnkgdG8gZnJlZSBzb21lIHRydW5jYXRlIGxvZyBzbyB0aGF0IHdlIGNhbiBoYXZlIGVub3VnaAorCQkgKiBjbHVzdGVycyB0byBhbGxvY2F0ZS4KKwkJICovCisJCXRyeV9mcmVlID0gMDsKKworCQlyZXQxID0gb2NmczJfdHJ5X3RvX2ZyZWVfdHJ1bmNhdGVfbG9nKG9zYiwgY2x1c3RlcnNfbmVlZCk7CisJCWlmIChyZXQxID09IDEpCisJCQlnb3RvIHRyeV9hZ2FpbjsKKworCQlpZiAocmV0MSA8IDApCisJCQltbG9nX2Vycm5vKHJldDEpOworCX0KKwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCmluZGV4IDllM2Q0NWIuLmE2Y2MwNTMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwpAQCAtODIsNiArODIsNyBAQAogI2RlZmluZSBPMkhCX0RCX1RZUEVfUkVHSU9OX0xJVkVOT0RFUwk0CiAjZGVmaW5lIE8ySEJfREJfVFlQRV9SRUdJT05fTlVNQkVSCTUKICNkZWZpbmUgTzJIQl9EQl9UWVBFX1JFR0lPTl9FTEFQU0VEX1RJTUUJNgorI2RlZmluZSBPMkhCX0RCX1RZUEVfUkVHSU9OX1BJTk5FRAk3CiBzdHJ1Y3QgbzJoYl9kZWJ1Z19idWYgewogCWludCBkYl90eXBlOwogCWludCBkYl9zaXplOwpAQCAtMTAxLDYgKzEwMiw3IEBACiAjZGVmaW5lIE8ySEJfREVCVUdfRkFJTEVEUkVHSU9OUwkiZmFpbGVkX3JlZ2lvbnMiCiAjZGVmaW5lIE8ySEJfREVCVUdfUkVHSU9OX05VTUJFUgkibnVtIgogI2RlZmluZSBPMkhCX0RFQlVHX1JFR0lPTl9FTEFQU0VEX1RJTUUJImVsYXBzZWRfdGltZV9pbl9tcyIKKyNkZWZpbmUgTzJIQl9ERUJVR19SRUdJT05fUElOTkVECSJwaW5uZWQiCiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvMmhiX2RlYnVnX2RpcjsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvMmhiX2RlYnVnX2xpdmVub2RlczsKQEAgLTEzMiw2ICsxMzQsMzMgQEAKIHVuc2lnbmVkIGludCBvMmhiX2RlYWRfdGhyZXNob2xkID0gTzJIQl9ERUZBVUxUX0RFQURfVEhSRVNIT0xEOwogdW5zaWduZWQgaW50IG8yaGJfaGVhcnRiZWF0X21vZGUgPSBPMkhCX0hFQVJUQkVBVF9MT0NBTDsKIAorLyoKKyAqIG8yaGJfZGVwZW5kZW50X3VzZXJzIHRyYWNrcyB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgY2FsbGJhY2tzIHRoYXQgZGVwZW5kCisgKiBvbiBoZWFydGJlYXQuIG8ybmV0IGFuZCBvMmRsbSBhcmUgdHdvIGVudGl0aWVzIHRoYXQgcmVnaXN0ZXIgdGhpcyBjYWxsYmFjay4KKyAqIEhvd2V2ZXIgb25seSBvMmRsbSBkZXBlbmRzIG9uIHRoZSBoZWFydGJlYXQuIEl0IGRvZXMgbm90IHdhbnQgdGhlIGhlYXJ0YmVhdAorICogdG8gc3RvcCB3aGlsZSBhIGRsbSBkb21haW4gaXMgc3RpbGwgYWN0aXZlLgorICovCit1bnNpZ25lZCBpbnQgbzJoYl9kZXBlbmRlbnRfdXNlcnM7CisKKy8qCisgKiBJbiBnbG9iYWwgaGVhcnRiZWF0IG1vZGUsIGFsbCByZWdpb25zIGFyZSBwaW5uZWQgaWYgdGhlcmUgYXJlIG9uZSBvciBtb3JlCisgKiBkZXBlbmRlbnQgdXNlcnMgYW5kIHRoZSBxdW9ydW0gcmVnaW9uIGNvdW50IGlzIDw9IE8ySEJfUElOX0NVVF9PRkYuIEFsbAorICogcmVnaW9ucyBhcmUgdW5waW5uZWQgaWYgdGhlIHJlZ2lvbiBjb3VudCBleGNlZWRzIHRoZSBjdXQgb2ZmIG9yIHRoZSBudW1iZXIKKyAqIG9mIGRlcGVuZGVudCB1c2VycyBmYWxscyB0byB6ZXJvLgorICovCisjZGVmaW5lIE8ySEJfUElOX0NVVF9PRkYJCTMKKworLyoKKyAqIEluIGxvY2FsIGhlYXJ0YmVhdCBtb2RlLCB3ZSBhc3N1bWUgdGhlIGRsbSBkb21haW4gbmFtZSB0byBiZSB0aGUgc2FtZSBhcworICogcmVnaW9uIHV1aWQuIFRoaXMgaXMgdHJ1ZSBmb3IgZG9tYWlucyBjcmVhdGVkIGZvciB0aGUgZmlsZSBzeXN0ZW0gYnV0IG5vdAorICogbmVjZXNzYXJpbHkgdHJ1ZSBmb3IgdXNlcmRsbSBkb21haW5zLiBUaGlzIGlzIGEga25vd24gbGltaXRhdGlvbi4KKyAqCisgKiBJbiBnbG9iYWwgaGVhcnRiZWF0IG1vZGUsIHdlIHBpbi91bnBpbiBhbGwgbzJoYiByZWdpb25zLiBUaGlzIHNvbHV0aW9uCisgKiB3b3JrcyBmb3IgYm90aCBmaWxlIHN5c3RlbSBhbmQgdXNlcmRsbSBkb21haW5zLgorICovCitzdGF0aWMgaW50IG8yaGJfcmVnaW9uX3Bpbihjb25zdCBjaGFyICpyZWdpb25fdXVpZCk7CitzdGF0aWMgdm9pZCBvMmhiX3JlZ2lvbl91bnBpbihjb25zdCBjaGFyICpyZWdpb25fdXVpZCk7CisKIC8qIE9ubHkgc2V0cyBhIG5ldyB0aHJlc2hvbGQgaWYgdGhlcmUgYXJlIG5vIGFjdGl2ZSByZWdpb25zLgogICoKICAqIE5vIGxvY2tpbmcgb3Igb3RoZXJ3aXNlIGludGVyZXN0aW5nIGNvZGUgaXMgcmVxdWlyZWQgZm9yIHJlYWRpbmcKQEAgLTE4Niw3ICsyMTUsOSBAQAogCXN0cnVjdCBjb25maWdfaXRlbQlocl9pdGVtOwogCiAJc3RydWN0IGxpc3RfaGVhZAlocl9hbGxfaXRlbTsKLQl1bnNpZ25lZAkJaHJfdW5jbGVhbl9zdG9wOjE7CisJdW5zaWduZWQJCWhyX3VuY2xlYW5fc3RvcDoxLAorCQkJCWhyX2l0ZW1fcGlubmVkOjEsCisJCQkJaHJfaXRlbV9kcm9wcGVkOjE7CiAKIAkvKiBwcm90ZWN0ZWQgYnkgdGhlIGhyX2NhbGxiYWNrX3NlbSAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAJKmhyX3Rhc2s7CkBAIC0yMTIsOSArMjQzLDExIEBACiAJc3RydWN0IGRlbnRyeQkJKmhyX2RlYnVnX2xpdmVub2RlczsKIAlzdHJ1Y3QgZGVudHJ5CQkqaHJfZGVidWdfcmVnbnVtOwogCXN0cnVjdCBkZW50cnkJCSpocl9kZWJ1Z19lbGFwc2VkX3RpbWU7CisJc3RydWN0IGRlbnRyeQkJKmhyX2RlYnVnX3Bpbm5lZDsKIAlzdHJ1Y3QgbzJoYl9kZWJ1Z19idWYJKmhyX2RiX2xpdmVub2RlczsKIAlzdHJ1Y3QgbzJoYl9kZWJ1Z19idWYJKmhyX2RiX3JlZ251bTsKIAlzdHJ1Y3QgbzJoYl9kZWJ1Z19idWYJKmhyX2RiX2VsYXBzZWRfdGltZTsKKwlzdHJ1Y3QgbzJoYl9kZWJ1Z19idWYJKmhyX2RiX3Bpbm5lZDsKIAogCS8qIGxldCB0aGUgcGVyc29uIHNldHRpbmcgdXAgaGIgd2FpdCBmb3IgaXQgdG8gcmV0dXJuIHVudGlsIGl0CiAJICogaGFzIHJlYWNoZWQgYSAnc3RlYWR5JyBzdGF0ZS4gIFRoaXMgd2lsbCBiZSBmaXhlZCB3aGVuIHdlIGhhdmUKQEAgLTcwMSw2ICs3MzQsMTQgQEAKIAkgICAgICAgY29uZmlnX2l0ZW1fbmFtZSgmcmVnLT5ocl9pdGVtKSk7CiAKIAlzZXRfYml0KHJlZy0+aHJfcmVnaW9uX251bSwgbzJoYl9xdW9ydW1fcmVnaW9uX2JpdG1hcCk7CisKKwkvKgorCSAqIElmIGdsb2JhbCBoZWFydGJlYXQgYWN0aXZlLCB1bnBpbiBhbGwgcmVnaW9ucyBpZiB0aGUKKwkgKiByZWdpb24gY291bnQgPiBDVVRfT0ZGCisJICovCisJaWYgKG8yaGJfcG9wX2NvdW50KCZvMmhiX3F1b3J1bV9yZWdpb25fYml0bWFwLAorCQkJICAgTzJOTV9NQVhfUkVHSU9OUykgPiBPMkhCX1BJTl9DVVRfT0ZGKQorCQlvMmhiX3JlZ2lvbl91bnBpbihOVUxMKTsKIH0KIAogc3RhdGljIGludCBvMmhiX2NoZWNrX3Nsb3Qoc3RydWN0IG8yaGJfcmVnaW9uICpyZWcsCkBAIC0xMDQxLDYgKzEwODIsOSBAQAogCiAJc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOwogCisJLyogUGluIG5vZGUgKi8KKwlvMm5tX2RlcGVuZF90aGlzX25vZGUoKTsKKwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpICYmICFyZWctPmhyX3VuY2xlYW5fc3RvcCkgewogCQkvKiBXZSB0cmFjayB0aGUgdGltZSBzcGVudCBpbnNpZGUKIAkJICogbzJoYl9kb19kaXNrX2hlYXJ0YmVhdCBzbyB0aGF0IHdlIGF2b2lkIG1vcmUgdGhhbgpAQCAtMTA5MCw2ICsxMTM0LDkgQEAKIAkJbWxvZ19lcnJubyhyZXQpOwogCX0KIAorCS8qIFVucGluIG5vZGUgKi8KKwlvMm5tX3VuZGVwZW5kX3RoaXNfbm9kZSgpOworCiAJbWxvZyhNTF9IRUFSVEJFQVR8TUxfS1RIUkVBRCwgImhiIHRocmVhZCBleGl0aW5nXG4iKTsKIAogCXJldHVybiAwOwpAQCAtMTE0Miw2ICsxMTg5LDEyIEBACiAJCQkJCQkgcmVnLT5ocl9sYXN0X3RpbWVvdXRfc3RhcnQpKTsKIAkJZ290byBkb25lOwogCisJY2FzZSBPMkhCX0RCX1RZUEVfUkVHSU9OX1BJTk5FRDoKKwkJcmVnID0gKHN0cnVjdCBvMmhiX3JlZ2lvbiAqKWRiLT5kYl9kYXRhOworCQlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBQQUdFX1NJWkUgLSBvdXQsICIldVxuIiwKKwkJCQkhIXJlZy0+aHJfaXRlbV9waW5uZWQpOworCQlnb3RvIGRvbmU7CisKIAlkZWZhdWx0OgogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMTMxNSw2ICsxMzY4LDggQEAKIAltZW1zZXQobzJoYl9xdW9ydW1fcmVnaW9uX2JpdG1hcCwgMCwgc2l6ZW9mKG8yaGJfcXVvcnVtX3JlZ2lvbl9iaXRtYXApKTsKIAltZW1zZXQobzJoYl9mYWlsZWRfcmVnaW9uX2JpdG1hcCwgMCwgc2l6ZW9mKG8yaGJfZmFpbGVkX3JlZ2lvbl9iaXRtYXApKTsKIAorCW8yaGJfZGVwZW5kZW50X3VzZXJzID0gMDsKKwogCXJldHVybiBvMmhiX2RlYnVnX2luaXQoKTsKIH0KIApAQCAtMTM4NCw2ICsxNDM5LDcgQEAKIAlkZWJ1Z2ZzX3JlbW92ZShyZWctPmhyX2RlYnVnX2xpdmVub2Rlcyk7CiAJZGVidWdmc19yZW1vdmUocmVnLT5ocl9kZWJ1Z19yZWdudW0pOwogCWRlYnVnZnNfcmVtb3ZlKHJlZy0+aHJfZGVidWdfZWxhcHNlZF90aW1lKTsKKwlkZWJ1Z2ZzX3JlbW92ZShyZWctPmhyX2RlYnVnX3Bpbm5lZCk7CiAJZGVidWdmc19yZW1vdmUocmVnLT5ocl9kZWJ1Z19kaXIpOwogCiAJc3Bpbl9sb2NrKCZvMmhiX2xpdmVfbG9jayk7CkBAIC0xOTQ4LDYgKzIwMDQsMTggQEAKIAkJZ290byBiYWlsOwogCX0KIAorCXJlZy0+aHJfZGVidWdfcGlubmVkID0KKwkJCW8yaGJfZGVidWdfY3JlYXRlKE8ySEJfREVCVUdfUkVHSU9OX1BJTk5FRCwKKwkJCQkJICByZWctPmhyX2RlYnVnX2RpciwKKwkJCQkJICAmKHJlZy0+aHJfZGJfcGlubmVkKSwKKwkJCQkJICBzaXplb2YoKihyZWctPmhyX2RiX3Bpbm5lZCkpLAorCQkJCQkgIE8ySEJfREJfVFlQRV9SRUdJT05fUElOTkVELAorCQkJCQkgIDAsIDAsIHJlZyk7CisJaWYgKCFyZWctPmhyX2RlYnVnX3Bpbm5lZCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gYmFpbDsKKwl9CisKIAlyZXQgPSAwOwogYmFpbDoKIAlyZXR1cm4gcmV0OwpAQCAtMjAwMiwxNSArMjA3MCwyMCBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqaGJfdGFzazsKIAlzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZyA9IHRvX28yaGJfcmVnaW9uKGl0ZW0pOworCWludCBxdW9ydW1fcmVnaW9uID0gMDsKIAogCS8qIHN0b3AgdGhlIHRocmVhZCB3aGVuIHRoZSB1c2VyIHJlbW92ZXMgdGhlIHJlZ2lvbiBkaXIgKi8KIAlzcGluX2xvY2soJm8yaGJfbGl2ZV9sb2NrKTsKIAlpZiAobzJoYl9nbG9iYWxfaGVhcnRiZWF0X2FjdGl2ZSgpKSB7CiAJCWNsZWFyX2JpdChyZWctPmhyX3JlZ2lvbl9udW0sIG8yaGJfcmVnaW9uX2JpdG1hcCk7CiAJCWNsZWFyX2JpdChyZWctPmhyX3JlZ2lvbl9udW0sIG8yaGJfbGl2ZV9yZWdpb25fYml0bWFwKTsKKwkJaWYgKHRlc3RfYml0KHJlZy0+aHJfcmVnaW9uX251bSwgbzJoYl9xdW9ydW1fcmVnaW9uX2JpdG1hcCkpCisJCQlxdW9ydW1fcmVnaW9uID0gMTsKKwkJY2xlYXJfYml0KHJlZy0+aHJfcmVnaW9uX251bSwgbzJoYl9xdW9ydW1fcmVnaW9uX2JpdG1hcCk7CiAJfQogCWhiX3Rhc2sgPSByZWctPmhyX3Rhc2s7CiAJcmVnLT5ocl90YXNrID0gTlVMTDsKKwlyZWctPmhyX2l0ZW1fZHJvcHBlZCA9IDE7CiAJc3Bpbl91bmxvY2soJm8yaGJfbGl2ZV9sb2NrKTsKIAogCWlmIChoYl90YXNrKQpAQCAtMjAyOCw3ICsyMTAxLDI3IEBACiAJaWYgKG8yaGJfZ2xvYmFsX2hlYXJ0YmVhdF9hY3RpdmUoKSkKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJvMmhiOiBIZWFydGJlYXQgc3RvcHBlZCBvbiByZWdpb24gJXNcbiIsCiAJCSAgICAgICBjb25maWdfaXRlbV9uYW1lKCZyZWctPmhyX2l0ZW0pKTsKKwogCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKKworCWlmICghbzJoYl9nbG9iYWxfaGVhcnRiZWF0X2FjdGl2ZSgpIHx8ICFxdW9ydW1fcmVnaW9uKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIGdsb2JhbCBoZWFydGJlYXQgYWN0aXZlIGFuZCB0aGVyZSBhcmUgZGVwZW5kZW50IHVzZXJzLAorCSAqIHBpbiBhbGwgcmVnaW9ucyBpZiBxdW9ydW0gcmVnaW9uIGNvdW50IDw9IENVVF9PRkYKKwkgKi8KKwlzcGluX2xvY2soJm8yaGJfbGl2ZV9sb2NrKTsKKworCWlmICghbzJoYl9kZXBlbmRlbnRfdXNlcnMpCisJCWdvdG8gdW5sb2NrOworCisJaWYgKG8yaGJfcG9wX2NvdW50KCZvMmhiX3F1b3J1bV9yZWdpb25fYml0bWFwLAorCQkJICAgTzJOTV9NQVhfUkVHSU9OUykgPD0gTzJIQl9QSU5fQ1VUX09GRikKKwkJbzJoYl9yZWdpb25fcGluKE5VTEwpOworCit1bmxvY2s6CisJc3Bpbl91bmxvY2soJm8yaGJfbGl2ZV9sb2NrKTsKIH0KIAogc3RydWN0IG8yaGJfaGVhcnRiZWF0X2dyb3VwX2F0dHJpYnV0ZSB7CkBAIC0yMjE0LDYzICsyMzA3LDEzOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobzJoYl9zZXR1cF9jYWxsYmFjayk7CiAKLXN0YXRpYyBzdHJ1Y3QgbzJoYl9yZWdpb24gKm8yaGJfZmluZF9yZWdpb24oY29uc3QgY2hhciAqcmVnaW9uX3V1aWQpCisvKgorICogSW4gbG9jYWwgaGVhcnRiZWF0IG1vZGUsIHJlZ2lvbl91dWlkIHBhc3NlZCBtYXRjaGVzIHRoZSBkbG0gZG9tYWluIG5hbWUuCisgKiBJbiBnbG9iYWwgaGVhcnRiZWF0IG1vZGUsIHJlZ2lvbl91dWlkIHBhc3NlZCBpcyBOVUxMLgorICoKKyAqIEluIGxvY2FsLCB3ZSBvbmx5IHBpbiB0aGUgbWF0Y2hpbmcgcmVnaW9uLiBJbiBnbG9iYWwgd2UgcGluIGFsbCB0aGUgYWN0aXZlCisgKiByZWdpb25zLgorICovCitzdGF0aWMgaW50IG8yaGJfcmVnaW9uX3Bpbihjb25zdCBjaGFyICpyZWdpb25fdXVpZCkKIHsKLQlzdHJ1Y3QgbzJoYl9yZWdpb24gKnAsICpyZWcgPSBOVUxMOworCWludCByZXQgPSAwLCBmb3VuZCA9IDA7CisJc3RydWN0IG8yaGJfcmVnaW9uICpyZWc7CisJY2hhciAqdXVpZDsKIAogCWFzc2VydF9zcGluX2xvY2tlZCgmbzJoYl9saXZlX2xvY2spOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmbzJoYl9hbGxfcmVnaW9ucywgaHJfYWxsX2l0ZW0pIHsKLQkJaWYgKCFzdHJjbXAocmVnaW9uX3V1aWQsIGNvbmZpZ19pdGVtX25hbWUoJnAtPmhyX2l0ZW0pKSkgewotCQkJcmVnID0gcDsKLQkJCWJyZWFrOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVnLCAmbzJoYl9hbGxfcmVnaW9ucywgaHJfYWxsX2l0ZW0pIHsKKwkJdXVpZCA9IGNvbmZpZ19pdGVtX25hbWUoJnJlZy0+aHJfaXRlbSk7CisKKwkJLyogbG9jYWwgaGVhcnRiZWF0ICovCisJCWlmIChyZWdpb25fdXVpZCkgeworCQkJaWYgKHN0cmNtcChyZWdpb25fdXVpZCwgdXVpZCkpCisJCQkJY29udGludWU7CisJCQlmb3VuZCA9IDE7CiAJCX0KKworCQlpZiAocmVnLT5ocl9pdGVtX3Bpbm5lZCB8fCByZWctPmhyX2l0ZW1fZHJvcHBlZCkKKwkJCWdvdG8gc2tpcF9waW47CisKKwkJLyogSWdub3JlIEVOT0VOVCBvbmx5IGZvciBsb2NhbCBoYiAodXNlcmRsbSBkb21haW4pICovCisJCXJldCA9IG8ybm1fZGVwZW5kX2l0ZW0oJnJlZy0+aHJfaXRlbSk7CisJCWlmICghcmV0KSB7CisJCQltbG9nKE1MX0NMVVNURVIsICJQaW4gcmVnaW9uICVzXG4iLCB1dWlkKTsKKwkJCXJlZy0+aHJfaXRlbV9waW5uZWQgPSAxOworCQl9IGVsc2UgeworCQkJaWYgKHJldCA9PSAtRU5PRU5UICYmIGZvdW5kKQorCQkJCXJldCA9IDA7CisJCQllbHNlIHsKKwkJCQltbG9nKE1MX0VSUk9SLCAiUGluIHJlZ2lvbiAlcyBmYWlscyB3aXRoICVkXG4iLAorCQkJCSAgICAgdXVpZCwgcmV0KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorc2tpcF9waW46CisJCWlmIChmb3VuZCkKKwkJCWJyZWFrOwogCX0KIAotCXJldHVybiByZWc7Ci19Ci0KLXN0YXRpYyBpbnQgbzJoYl9yZWdpb25fZ2V0KGNvbnN0IGNoYXIgKnJlZ2lvbl91dWlkKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBvMmhiX3JlZ2lvbiAqcmVnOwotCi0Jc3Bpbl9sb2NrKCZvMmhiX2xpdmVfbG9jayk7Ci0KLQlyZWcgPSBvMmhiX2ZpbmRfcmVnaW9uKHJlZ2lvbl91dWlkKTsKLQlpZiAoIXJlZykKLQkJcmV0ID0gLUVOT0VOVDsKLQlzcGluX3VubG9jaygmbzJoYl9saXZlX2xvY2spOwotCi0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSBvMm5tX2RlcGVuZF90aGlzX25vZGUoKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCXJldCA9IG8ybm1fZGVwZW5kX2l0ZW0oJnJlZy0+aHJfaXRlbSk7Ci0JaWYgKHJldCkKLQkJbzJubV91bmRlcGVuZF90aGlzX25vZGUoKTsKLQotb3V0OgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG8yaGJfcmVnaW9uX3B1dChjb25zdCBjaGFyICpyZWdpb25fdXVpZCkKKy8qCisgKiBJbiBsb2NhbCBoZWFydGJlYXQgbW9kZSwgcmVnaW9uX3V1aWQgcGFzc2VkIG1hdGNoZXMgdGhlIGRsbSBkb21haW4gbmFtZS4KKyAqIEluIGdsb2JhbCBoZWFydGJlYXQgbW9kZSwgcmVnaW9uX3V1aWQgcGFzc2VkIGlzIE5VTEwuCisgKgorICogSW4gbG9jYWwsIHdlIG9ubHkgdW5waW4gdGhlIG1hdGNoaW5nIHJlZ2lvbi4gSW4gZ2xvYmFsIHdlIHVucGluIGFsbCB0aGUKKyAqIGFjdGl2ZSByZWdpb25zLgorICovCitzdGF0aWMgdm9pZCBvMmhiX3JlZ2lvbl91bnBpbihjb25zdCBjaGFyICpyZWdpb25fdXVpZCkKIHsKIAlzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZzsKKwljaGFyICp1dWlkOworCWludCBmb3VuZCA9IDA7CisKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJm8yaGJfbGl2ZV9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVnLCAmbzJoYl9hbGxfcmVnaW9ucywgaHJfYWxsX2l0ZW0pIHsKKwkJdXVpZCA9IGNvbmZpZ19pdGVtX25hbWUoJnJlZy0+aHJfaXRlbSk7CisJCWlmIChyZWdpb25fdXVpZCkgeworCQkJaWYgKHN0cmNtcChyZWdpb25fdXVpZCwgdXVpZCkpCisJCQkJY29udGludWU7CisJCQlmb3VuZCA9IDE7CisJCX0KKworCQlpZiAocmVnLT5ocl9pdGVtX3Bpbm5lZCkgeworCQkJbWxvZyhNTF9DTFVTVEVSLCAiVW5waW4gcmVnaW9uICVzXG4iLCB1dWlkKTsKKwkJCW8ybm1fdW5kZXBlbmRfaXRlbSgmcmVnLT5ocl9pdGVtKTsKKwkJCXJlZy0+aHJfaXRlbV9waW5uZWQgPSAwOworCQl9CisJCWlmIChmb3VuZCkKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBvMmhiX3JlZ2lvbl9pbmNfdXNlcihjb25zdCBjaGFyICpyZWdpb25fdXVpZCkKK3sKKwlpbnQgcmV0ID0gMDsKIAogCXNwaW5fbG9jaygmbzJoYl9saXZlX2xvY2spOwogCi0JcmVnID0gbzJoYl9maW5kX3JlZ2lvbihyZWdpb25fdXVpZCk7Ci0KLQlzcGluX3VubG9jaygmbzJoYl9saXZlX2xvY2spOwotCi0JaWYgKHJlZykgewotCQlvMm5tX3VuZGVwZW5kX2l0ZW0oJnJlZy0+aHJfaXRlbSk7Ci0JCW8ybm1fdW5kZXBlbmRfdGhpc19ub2RlKCk7CisJLyogbG9jYWwgaGVhcnRiZWF0ICovCisJaWYgKCFvMmhiX2dsb2JhbF9oZWFydGJlYXRfYWN0aXZlKCkpIHsKKwkgICAgcmV0ID0gbzJoYl9yZWdpb25fcGluKHJlZ2lvbl91dWlkKTsKKwkgICAgZ290byB1bmxvY2s7CiAJfQorCisJLyoKKwkgKiBpZiBnbG9iYWwgaGVhcnRiZWF0IGFjdGl2ZSBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgZGVwZW5kZW50IHVzZXIsCisJICogcGluIGFsbCByZWdpb25zIGlmIHF1b3J1bSByZWdpb24gY291bnQgPD0gQ1VUX09GRgorCSAqLworCW8yaGJfZGVwZW5kZW50X3VzZXJzKys7CisJaWYgKG8yaGJfZGVwZW5kZW50X3VzZXJzID4gMSkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAobzJoYl9wb3BfY291bnQoJm8yaGJfcXVvcnVtX3JlZ2lvbl9iaXRtYXAsCisJCQkgICBPMk5NX01BWF9SRUdJT05TKSA8PSBPMkhCX1BJTl9DVVRfT0ZGKQorCQlyZXQgPSBvMmhiX3JlZ2lvbl9waW4oTlVMTCk7CisKK3VubG9jazoKKwlzcGluX3VubG9jaygmbzJoYl9saXZlX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbzJoYl9yZWdpb25fZGVjX3VzZXIoY29uc3QgY2hhciAqcmVnaW9uX3V1aWQpCit7CisJc3Bpbl9sb2NrKCZvMmhiX2xpdmVfbG9jayk7CisKKwkvKiBsb2NhbCBoZWFydGJlYXQgKi8KKwlpZiAoIW8yaGJfZ2xvYmFsX2hlYXJ0YmVhdF9hY3RpdmUoKSkgeworCSAgICBvMmhiX3JlZ2lvbl91bnBpbihyZWdpb25fdXVpZCk7CisJICAgIGdvdG8gdW5sb2NrOworCX0KKworCS8qCisJICogaWYgZ2xvYmFsIGhlYXJ0YmVhdCBhY3RpdmUgYW5kIHRoZXJlIGFyZSBubyBkZXBlbmRlbnQgdXNlcnMsCisJICogdW5waW4gYWxsIHF1b3J1bSByZWdpb25zCisJICovCisJbzJoYl9kZXBlbmRlbnRfdXNlcnMtLTsKKwlpZiAoIW8yaGJfZGVwZW5kZW50X3VzZXJzKQorCQlvMmhiX3JlZ2lvbl91bnBpbihOVUxMKTsKKwordW5sb2NrOgorCXNwaW5fdW5sb2NrKCZvMmhiX2xpdmVfbG9jayk7CiB9CiAKIGludCBvMmhiX3JlZ2lzdGVyX2NhbGxiYWNrKGNvbnN0IGNoYXIgKnJlZ2lvbl91dWlkLApAQCAtMjI5MSw5ICsyNDU5LDExIEBACiAJfQogCiAJaWYgKHJlZ2lvbl91dWlkKSB7Ci0JCXJldCA9IG8yaGJfcmVnaW9uX2dldChyZWdpb25fdXVpZCk7Ci0JCWlmIChyZXQpCisJCXJldCA9IG8yaGJfcmVnaW9uX2luY191c2VyKHJlZ2lvbl91dWlkKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKIAlkb3duX3dyaXRlKCZvMmhiX2NhbGxiYWNrX3NlbSk7CkBAIC0yMzExLDcgKzI0ODEsNyBAQAogCXVwX3dyaXRlKCZvMmhiX2NhbGxiYWNrX3NlbSk7CiAJcmV0ID0gMDsKIG91dDoKLQltbG9nKE1MX0hFQVJUQkVBVCwgInJldHVybmluZyAlZCBvbiBiZWhhbGYgb2YgJXAgZm9yIGZ1bmNzICVwXG4iLAorCW1sb2coTUxfQ0xVU1RFUiwgInJldHVybmluZyAlZCBvbiBiZWhhbGYgb2YgJXAgZm9yIGZ1bmNzICVwXG4iLAogCSAgICAgcmV0LCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIGhjKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjMyMiw3ICsyNDkyLDcgQEAKIHsKIAlCVUdfT04oaGMtPmhjX21hZ2ljICE9IE8ySEJfQ0JfTUFHSUMpOwogCi0JbWxvZyhNTF9IRUFSVEJFQVQsICJvbiBiZWhhbGYgb2YgJXAgZm9yIGZ1bmNzICVwXG4iLAorCW1sb2coTUxfQ0xVU1RFUiwgIm9uIGJlaGFsZiBvZiAlcCBmb3IgZnVuY3MgJXBcbiIsCiAJICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIGhjKTsKIAogCS8qIFhYWCBDYW4gdGhpcyBoYXBwZW4gX3dpdGhfIGEgcmVnaW9uIHJlZmVyZW5jZT8gKi8KQEAgLTIzMzAsNyArMjUwMCw3IEBACiAJCXJldHVybjsKIAogCWlmIChyZWdpb25fdXVpZCkKLQkJbzJoYl9yZWdpb25fcHV0KHJlZ2lvbl91dWlkKTsKKwkJbzJoYl9yZWdpb25fZGVjX3VzZXIocmVnaW9uX3V1aWQpOwogCiAJZG93bl93cml0ZSgmbzJoYl9jYWxsYmFja19zZW0pOwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL25ldGRlYnVnLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL25ldGRlYnVnLmMKaW5kZXggYTNmMTUwZS4uM2E1ODM1OSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9uZXRkZWJ1Zy5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvbmV0ZGVidWcuYwpAQCAtNDYsMTAgKzQ2LDE1IEBACiAjZGVmaW5lIE8yTkVUX0RFQlVHX0RJUgkJIm8ybmV0IgogI2RlZmluZSBTQ19ERUJVR19OQU1FCQkic29ja19jb250YWluZXJzIgogI2RlZmluZSBOU1RfREVCVUdfTkFNRQkJInNlbmRfdHJhY2tpbmciCisjZGVmaW5lIFNUQVRTX0RFQlVHX05BTUUJInN0YXRzIgorCisjZGVmaW5lIFNIT1dfU09DS19DT05UQUlORVJTCTAKKyNkZWZpbmUgU0hPV19TT0NLX1NUQVRTCQkxCiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvMm5ldF9kZW50cnk7CiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqc2NfZGVudHJ5Owogc3RhdGljIHN0cnVjdCBkZW50cnkgKm5zdF9kZW50cnk7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqc3RhdHNfZGVudHJ5OwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG8ybmV0X2RlYnVnX2xvY2spOwogCkBAIC0xMjMsMzcgKzEyOCw0MiBAQAogc3RhdGljIGludCBuc3Rfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJc3RydWN0IG8ybmV0X3NlbmRfdHJhY2tpbmcgKm5zdCwgKmR1bW15X25zdCA9IHNlcS0+cHJpdmF0ZTsKKwlrdGltZV90IG5vdzsKKwlzNjQgc29jaywgc2VuZCwgc3RhdHVzOwogCiAJc3Bpbl9sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKIAluc3QgPSBuZXh0X25zdChkdW1teV9uc3QpOworCWlmICghbnN0KQorCQlnb3RvIG91dDsKIAotCWlmIChuc3QgIT0gTlVMTCkgewotCQkvKiBnZXRfdGFza19jb21tIGlzbid0IGV4cG9ydGVkLiAgb2ggd2VsbC4gKi8KLQkJc2VxX3ByaW50ZihzZXEsICIlcDpcbiIKLQkJCSAgICIgIHBpZDogICAgICAgICAgJWx1XG4iCi0JCQkgICAiICB0Z2lkOiAgICAgICAgICVsdVxuIgotCQkJICAgIiAgcHJvY2VzcyBuYW1lOiAlc1xuIgotCQkJICAgIiAgbm9kZTogICAgICAgICAldVxuIgotCQkJICAgIiAgc2M6ICAgICAgICAgICAlcFxuIgotCQkJICAgIiAgbWVzc2FnZSBpZDogICAlZFxuIgotCQkJICAgIiAgbWVzc2FnZSB0eXBlOiAldVxuIgotCQkJICAgIiAgbWVzc2FnZSBrZXk6ICAweCUwOHhcbiIKLQkJCSAgICIgIHNvY2sgYWNxdWlyeTogJWx1LiVsZFxuIgotCQkJICAgIiAgc2VuZCBzdGFydDogICAlbHUuJWxkXG4iCi0JCQkgICAiICB3YWl0IHN0YXJ0OiAgICVsdS4lbGRcbiIsCi0JCQkgICBuc3QsICh1bnNpZ25lZCBsb25nKW5zdC0+c3RfdGFzay0+cGlkLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpbnN0LT5zdF90YXNrLT50Z2lkLAotCQkJICAgbnN0LT5zdF90YXNrLT5jb21tLCBuc3QtPnN0X25vZGUsCi0JCQkgICBuc3QtPnN0X3NjLCBuc3QtPnN0X2lkLCBuc3QtPnN0X21zZ190eXBlLAotCQkJICAgbnN0LT5zdF9tc2dfa2V5LAotCQkJICAgbnN0LT5zdF9zb2NrX3RpbWUudHZfc2VjLAotCQkJICAgKGxvbmcpbnN0LT5zdF9zb2NrX3RpbWUudHZfdXNlYywKLQkJCSAgIG5zdC0+c3Rfc2VuZF90aW1lLnR2X3NlYywKLQkJCSAgIChsb25nKW5zdC0+c3Rfc2VuZF90aW1lLnR2X3VzZWMsCi0JCQkgICBuc3QtPnN0X3N0YXR1c190aW1lLnR2X3NlYywKLQkJCSAgIChsb25nKW5zdC0+c3Rfc3RhdHVzX3RpbWUudHZfdXNlYyk7Ci0JfQorCW5vdyA9IGt0aW1lX2dldCgpOworCXNvY2sgPSBrdGltZV90b191cyhrdGltZV9zdWIobm93LCBuc3QtPnN0X3NvY2tfdGltZSkpOworCXNlbmQgPSBrdGltZV90b191cyhrdGltZV9zdWIobm93LCBuc3QtPnN0X3NlbmRfdGltZSkpOworCXN0YXR1cyA9IGt0aW1lX3RvX3VzKGt0aW1lX3N1Yihub3csIG5zdC0+c3Rfc3RhdHVzX3RpbWUpKTsKIAorCS8qIGdldF90YXNrX2NvbW0gaXNuJ3QgZXhwb3J0ZWQuICBvaCB3ZWxsLiAqLworCXNlcV9wcmludGYoc2VxLCAiJXA6XG4iCisJCSAgICIgIHBpZDogICAgICAgICAgJWx1XG4iCisJCSAgICIgIHRnaWQ6ICAgICAgICAgJWx1XG4iCisJCSAgICIgIHByb2Nlc3MgbmFtZTogJXNcbiIKKwkJICAgIiAgbm9kZTogICAgICAgICAldVxuIgorCQkgICAiICBzYzogICAgICAgICAgICVwXG4iCisJCSAgICIgIG1lc3NhZ2UgaWQ6ICAgJWRcbiIKKwkJICAgIiAgbWVzc2FnZSB0eXBlOiAldVxuIgorCQkgICAiICBtZXNzYWdlIGtleTogIDB4JTA4eFxuIgorCQkgICAiICBzb2NrIGFjcXVpcnk6ICVsbGQgdXNlY3MgYWdvXG4iCisJCSAgICIgIHNlbmQgc3RhcnQ6ICAgJWxsZCB1c2VjcyBhZ29cbiIKKwkJICAgIiAgd2FpdCBzdGFydDogICAlbGxkIHVzZWNzIGFnb1xuIiwKKwkJICAgbnN0LCAodW5zaWduZWQgbG9uZyl0YXNrX3BpZF9ucihuc3QtPnN0X3Rhc2spLAorCQkgICAodW5zaWduZWQgbG9uZyluc3QtPnN0X3Rhc2stPnRnaWQsCisJCSAgIG5zdC0+c3RfdGFzay0+Y29tbSwgbnN0LT5zdF9ub2RlLAorCQkgICBuc3QtPnN0X3NjLCBuc3QtPnN0X2lkLCBuc3QtPnN0X21zZ190eXBlLAorCQkgICBuc3QtPnN0X21zZ19rZXksCisJCSAgIChsb25nIGxvbmcpc29jaywKKwkJICAgKGxvbmcgbG9uZylzZW5kLAorCQkgICAobG9uZyBsb25nKXN0YXR1cyk7CisKK291dDoKIAlzcGluX3VubG9jaygmbzJuZXRfZGVidWdfbG9jayk7CiAKIAlyZXR1cm4gMDsKQEAgLTIyOCw2ICsyMzgsMTEgQEAKIAlzcGluX3VubG9jaygmbzJuZXRfZGVidWdfbG9jayk7CiB9CiAKK3N0cnVjdCBvMm5ldF9zb2NrX2RlYnVnIHsKKwlpbnQgZGJnX2N0eHQ7CisJc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpkYmdfc29jazsKK307CisKIHN0YXRpYyBzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIKIAkJCSpuZXh0X3NjKHN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqc2Nfc3RhcnQpCiB7CkBAIC0yNTMsNyArMjY4LDggQEAKIAogc3RhdGljIHZvaWQgKnNjX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzYywgKmR1bW15X3NjID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBvMm5ldF9zb2NrX2RlYnVnICpzZCA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjLCAqZHVtbXlfc2MgPSBzZC0+ZGJnX3NvY2s7CiAKIAlzcGluX2xvY2soJm8ybmV0X2RlYnVnX2xvY2spOwogCXNjID0gbmV4dF9zYyhkdW1teV9zYyk7CkBAIC0yNjQsNyArMjgwLDggQEAKIAogc3RhdGljIHZvaWQgKnNjX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjLCAqZHVtbXlfc2MgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IG8ybmV0X3NvY2tfZGVidWcgKnNkID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqc2MsICpkdW1teV9zYyA9IHNkLT5kYmdfc29jazsKIAogCXNwaW5fbG9jaygmbzJuZXRfZGVidWdfbG9jayk7CiAJc2MgPSBuZXh0X3NjKGR1bW15X3NjKTsKQEAgLTI3Niw2NSArMjkzLDEwNyBAQAogCXJldHVybiBzYzsgLyogdW51c2VkLCBqdXN0IG5lZWRzIHRvIGJlIG51bGwgd2hlbiBkb25lICovCiB9CiAKLSNkZWZpbmUgVFZfU0VDX1VTRUMoVFYpIFRWLnR2X3NlYywgKGxvbmcpVFYudHZfdXNlYworI2lmZGVmIENPTkZJR19PQ0ZTMl9GU19TVEFUUworIyBkZWZpbmUgc2Nfc2VuZF9jb3VudChfcykJCSgoX3MpLT5zY19zZW5kX2NvdW50KQorIyBkZWZpbmUgc2NfcmVjdl9jb3VudChfcykJCSgoX3MpLT5zY19yZWN2X2NvdW50KQorIyBkZWZpbmUgc2NfdHZfYWNxdWlyeV90b3RhbF9ucyhfcykJKGt0aW1lX3RvX25zKChfcyktPnNjX3R2X2FjcXVpcnlfdG90YWwpKQorIyBkZWZpbmUgc2NfdHZfc2VuZF90b3RhbF9ucyhfcykJKGt0aW1lX3RvX25zKChfcyktPnNjX3R2X3NlbmRfdG90YWwpKQorIyBkZWZpbmUgc2NfdHZfc3RhdHVzX3RvdGFsX25zKF9zKQkoa3RpbWVfdG9fbnMoKF9zKS0+c2NfdHZfc3RhdHVzX3RvdGFsKSkKKyMgZGVmaW5lIHNjX3R2X3Byb2Nlc3NfdG90YWxfbnMoX3MpCShrdGltZV90b19ucygoX3MpLT5zY190dl9wcm9jZXNzX3RvdGFsKSkKKyNlbHNlCisjIGRlZmluZSBzY19zZW5kX2NvdW50KF9zKQkJKDBVKQorIyBkZWZpbmUgc2NfcmVjdl9jb3VudChfcykJCSgwVSkKKyMgZGVmaW5lIHNjX3R2X2FjcXVpcnlfdG90YWxfbnMoX3MpCSgwTEwpCisjIGRlZmluZSBzY190dl9zZW5kX3RvdGFsX25zKF9zKQkoMExMKQorIyBkZWZpbmUgc2NfdHZfc3RhdHVzX3RvdGFsX25zKF9zKQkoMExMKQorIyBkZWZpbmUgc2NfdHZfcHJvY2Vzc190b3RhbF9ucyhfcykJKDBMTCkKKyNlbmRpZgorCisvKiBTbyB0aGF0IGRlYnVnZnMub2NmczIgY2FuIGRldGVybWluZSB3aGljaCBmb3JtYXQgaXMgYmVpbmcgdXNlZCAqLworI2RlZmluZSBPMk5FVF9TVEFUU19TVFJfVkVSU0lPTgkJMQorc3RhdGljIHZvaWQgc2Nfc2hvd19zb2NrX3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqc2VxLAorCQkJICAgICAgIHN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqc2MpCit7CisJaWYgKCFzYykKKwkJcmV0dXJuOworCisJc2VxX3ByaW50ZihzZXEsICIlZCwldSwlbHUsJWxsZCwlbGxkLCVsbGQsJWx1LCVsbGRcbiIsIE8yTkVUX1NUQVRTX1NUUl9WRVJTSU9OLAorCQkgICBzYy0+c2Nfbm9kZS0+bmRfbnVtLCAodW5zaWduZWQgbG9uZylzY19zZW5kX2NvdW50KHNjKSwKKwkJICAgKGxvbmcgbG9uZylzY190dl9hY3F1aXJ5X3RvdGFsX25zKHNjKSwKKwkJICAgKGxvbmcgbG9uZylzY190dl9zZW5kX3RvdGFsX25zKHNjKSwKKwkJICAgKGxvbmcgbG9uZylzY190dl9zdGF0dXNfdG90YWxfbnMoc2MpLAorCQkgICAodW5zaWduZWQgbG9uZylzY19yZWN2X2NvdW50KHNjKSwKKwkJICAgKGxvbmcgbG9uZylzY190dl9wcm9jZXNzX3RvdGFsX25zKHNjKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNjX3Nob3dfc29ja19jb250YWluZXIoc3RydWN0IHNlcV9maWxlICpzZXEsCisJCQkJICAgc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzYykKK3sKKwlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gTlVMTDsKKwlfX2JlMzIgc2FkZHIgPSAwLCBkYWRkciA9IDA7CisJX19iZTE2IHNwb3J0ID0gMCwgZHBvcnQgPSAwOworCisJaWYgKCFzYykKKwkJcmV0dXJuOworCisJaWYgKHNjLT5zY19zb2NrKSB7CisJCWluZXQgPSBpbmV0X3NrKHNjLT5zY19zb2NrLT5zayk7CisJCS8qIHRoZSBzdGFjaydzIHN0cnVjdHMgYXJlbid0IHNwYXJzZSBlbmRpYW4gY2xlYW4gKi8KKwkJc2FkZHIgPSAoX19mb3JjZSBfX2JlMzIpaW5ldC0+aW5ldF9zYWRkcjsKKwkJZGFkZHIgPSAoX19mb3JjZSBfX2JlMzIpaW5ldC0+aW5ldF9kYWRkcjsKKwkJc3BvcnQgPSAoX19mb3JjZSBfX2JlMTYpaW5ldC0+aW5ldF9zcG9ydDsKKwkJZHBvcnQgPSAoX19mb3JjZSBfX2JlMTYpaW5ldC0+aW5ldF9kcG9ydDsKKwl9CisKKwkvKiBYWFggc2lnaCwgaW5ldC0+IGRvZXNuJ3QgaGF2ZSBzcGFyc2UgYW5ub3RhdGlvbiBzbyBhbnkKKwkgKiB1c2Ugb2YgaXQgaGVyZSBnZW5lcmF0ZXMgYSB3YXJuaW5nIHdpdGggLVdiaXR3aXNlICovCisJc2VxX3ByaW50ZihzZXEsICIlcDpcbiIKKwkJICAgIiAga3JlZnM6ICAgICAgICAgICAlZFxuIgorCQkgICAiICBzb2NrOiAgICAgICAgICAgICVwSTQ6JXUgLT4gIgorCQkJCSAgICAgICIlcEk0OiV1XG4iCisJCSAgICIgIHJlbW90ZSBub2RlOiAgICAgJXNcbiIKKwkJICAgIiAgcGFnZSBvZmY6ICAgICAgICAlenVcbiIKKwkJICAgIiAgaGFuZHNoYWtlIG9rOiAgICAldVxuIgorCQkgICAiICB0aW1lcjogICAgICAgICAgICVsbGQgdXNlY3NcbiIKKwkJICAgIiAgZGF0YSByZWFkeTogICAgICAlbGxkIHVzZWNzXG4iCisJCSAgICIgIGFkdmFuY2Ugc3RhcnQ6ICAgJWxsZCB1c2Vjc1xuIgorCQkgICAiICBhZHZhbmNlIHN0b3A6ICAgICVsbGQgdXNlY3NcbiIKKwkJICAgIiAgZnVuYyBzdGFydDogICAgICAlbGxkIHVzZWNzXG4iCisJCSAgICIgIGZ1bmMgc3RvcDogICAgICAgJWxsZCB1c2Vjc1xuIgorCQkgICAiICBmdW5jIGtleTogICAgICAgIDB4JTA4eFxuIgorCQkgICAiICBmdW5jIHR5cGU6ICAgICAgICV1XG4iLAorCQkgICBzYywKKwkJICAgYXRvbWljX3JlYWQoJnNjLT5zY19rcmVmLnJlZmNvdW50KSwKKwkJICAgJnNhZGRyLCBpbmV0ID8gbnRvaHMoc3BvcnQpIDogMCwKKwkJICAgJmRhZGRyLCBpbmV0ID8gbnRvaHMoZHBvcnQpIDogMCwKKwkJICAgc2MtPnNjX25vZGUtPm5kX25hbWUsCisJCSAgIHNjLT5zY19wYWdlX29mZiwKKwkJICAgc2MtPnNjX2hhbmRzaGFrZV9vaywKKwkJICAgKGxvbmcgbG9uZylrdGltZV90b191cyhzYy0+c2NfdHZfdGltZXIpLAorCQkgICAobG9uZyBsb25nKWt0aW1lX3RvX3VzKHNjLT5zY190dl9kYXRhX3JlYWR5KSwKKwkJICAgKGxvbmcgbG9uZylrdGltZV90b191cyhzYy0+c2NfdHZfYWR2YW5jZV9zdGFydCksCisJCSAgIChsb25nIGxvbmcpa3RpbWVfdG9fdXMoc2MtPnNjX3R2X2FkdmFuY2Vfc3RvcCksCisJCSAgIChsb25nIGxvbmcpa3RpbWVfdG9fdXMoc2MtPnNjX3R2X2Z1bmNfc3RhcnQpLAorCQkgICAobG9uZyBsb25nKWt0aW1lX3RvX3VzKHNjLT5zY190dl9mdW5jX3N0b3ApLAorCQkgICBzYy0+c2NfbXNnX2tleSwKKwkJICAgc2MtPnNjX21zZ190eXBlKTsKK30KIAogc3RhdGljIGludCBzY19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjLCAqZHVtbXlfc2MgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IG8ybmV0X3NvY2tfZGVidWcgKnNkID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqc2MsICpkdW1teV9zYyA9IHNkLT5kYmdfc29jazsKIAogCXNwaW5fbG9jaygmbzJuZXRfZGVidWdfbG9jayk7CiAJc2MgPSBuZXh0X3NjKGR1bW15X3NjKTsKIAotCWlmIChzYyAhPSBOVUxMKSB7Ci0JCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBOVUxMOwotCi0JCV9fYmUzMiBzYWRkciA9IDAsIGRhZGRyID0gMDsKLQkJX19iZTE2IHNwb3J0ID0gMCwgZHBvcnQgPSAwOwotCi0JCWlmIChzYy0+c2Nfc29jaykgewotCQkJaW5ldCA9IGluZXRfc2soc2MtPnNjX3NvY2stPnNrKTsKLQkJCS8qIHRoZSBzdGFjaydzIHN0cnVjdHMgYXJlbid0IHNwYXJzZSBlbmRpYW4gY2xlYW4gKi8KLQkJCXNhZGRyID0gKF9fZm9yY2UgX19iZTMyKWluZXQtPmluZXRfc2FkZHI7Ci0JCQlkYWRkciA9IChfX2ZvcmNlIF9fYmUzMilpbmV0LT5pbmV0X2RhZGRyOwotCQkJc3BvcnQgPSAoX19mb3JjZSBfX2JlMTYpaW5ldC0+aW5ldF9zcG9ydDsKLQkJCWRwb3J0ID0gKF9fZm9yY2UgX19iZTE2KWluZXQtPmluZXRfZHBvcnQ7Ci0JCX0KLQotCQkvKiBYWFggc2lnaCwgaW5ldC0+IGRvZXNuJ3QgaGF2ZSBzcGFyc2UgYW5ub3RhdGlvbiBzbyBhbnkKLQkJICogdXNlIG9mIGl0IGhlcmUgZ2VuZXJhdGVzIGEgd2FybmluZyB3aXRoIC1XYml0d2lzZSAqLwotCQlzZXFfcHJpbnRmKHNlcSwgIiVwOlxuIgotCQkJICAgIiAga3JlZnM6ICAgICAgICAgICAlZFxuIgotCQkJICAgIiAgc29jazogICAgICAgICAgICAlcEk0OiV1IC0+ICIKLQkJCQkJICAgICAgIiVwSTQ6JXVcbiIKLQkJCSAgICIgIHJlbW90ZSBub2RlOiAgICAgJXNcbiIKLQkJCSAgICIgIHBhZ2Ugb2ZmOiAgICAgICAgJXp1XG4iCi0JCQkgICAiICBoYW5kc2hha2Ugb2s6ICAgICV1XG4iCi0JCQkgICAiICB0aW1lcjogICAgICAgICAgICVsdS4lbGRcbiIKLQkJCSAgICIgIGRhdGEgcmVhZHk6ICAgICAgJWx1LiVsZFxuIgotCQkJICAgIiAgYWR2YW5jZSBzdGFydDogICAlbHUuJWxkXG4iCi0JCQkgICAiICBhZHZhbmNlIHN0b3A6ICAgICVsdS4lbGRcbiIKLQkJCSAgICIgIGZ1bmMgc3RhcnQ6ICAgICAgJWx1LiVsZFxuIgotCQkJICAgIiAgZnVuYyBzdG9wOiAgICAgICAlbHUuJWxkXG4iCi0JCQkgICAiICBmdW5jIGtleTogICAgICAgICV1XG4iCi0JCQkgICAiICBmdW5jIHR5cGU6ICAgICAgICV1XG4iLAotCQkJICAgc2MsCi0JCQkgICBhdG9taWNfcmVhZCgmc2MtPnNjX2tyZWYucmVmY291bnQpLAotCQkJICAgJnNhZGRyLCBpbmV0ID8gbnRvaHMoc3BvcnQpIDogMCwKLQkJCSAgICZkYWRkciwgaW5ldCA/IG50b2hzKGRwb3J0KSA6IDAsCi0JCQkgICBzYy0+c2Nfbm9kZS0+bmRfbmFtZSwKLQkJCSAgIHNjLT5zY19wYWdlX29mZiwKLQkJCSAgIHNjLT5zY19oYW5kc2hha2Vfb2ssCi0JCQkgICBUVl9TRUNfVVNFQyhzYy0+c2NfdHZfdGltZXIpLAotCQkJICAgVFZfU0VDX1VTRUMoc2MtPnNjX3R2X2RhdGFfcmVhZHkpLAotCQkJICAgVFZfU0VDX1VTRUMoc2MtPnNjX3R2X2FkdmFuY2Vfc3RhcnQpLAotCQkJICAgVFZfU0VDX1VTRUMoc2MtPnNjX3R2X2FkdmFuY2Vfc3RvcCksCi0JCQkgICBUVl9TRUNfVVNFQyhzYy0+c2NfdHZfZnVuY19zdGFydCksCi0JCQkgICBUVl9TRUNfVVNFQyhzYy0+c2NfdHZfZnVuY19zdG9wKSwKLQkJCSAgIHNjLT5zY19tc2dfa2V5LAotCQkJICAgc2MtPnNjX21zZ190eXBlKTsKKwlpZiAoc2MpIHsKKwkJaWYgKHNkLT5kYmdfY3R4dCA9PSBTSE9XX1NPQ0tfQ09OVEFJTkVSUykKKwkJCXNjX3Nob3dfc29ja19jb250YWluZXIoc2VxLCBzYyk7CisJCWVsc2UKKwkJCXNjX3Nob3dfc29ja19zdGF0cyhzZXEsIHNjKTsKIAl9CiAKLQogCXNwaW5fdW5sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtMzUxLDcgKzQxMCw3IEBACiAJLnNob3cgPSBzY19zZXFfc2hvdywKIH07CiAKLXN0YXRpYyBpbnQgc2NfZm9wX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHNjX2NvbW1vbl9vcGVuKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbzJuZXRfc29ja19kZWJ1ZyAqc2QpCiB7CiAJc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpkdW1teV9zYzsKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKQEAgLTM2OSw3ICs0MjgsOCBAQAogCQlnb3RvIG91dDsKIAogCXNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzZXEtPnByaXZhdGUgPSBkdW1teV9zYzsKKwlzZXEtPnByaXZhdGUgPSBzZDsKKwlzZC0+ZGJnX3NvY2sgPSBkdW1teV9zYzsKIAlvMm5ldF9kZWJ1Z19hZGRfc2MoZHVtbXlfc2MpOwogCiAJZHVtbXlfc2MgPSBOVUxMOwpAQCAtMzgyLDEyICs0NDIsNDggQEAKIHN0YXRpYyBpbnQgc2NfZm9wX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpkdW1teV9zYyA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbzJuZXRfc29ja19kZWJ1ZyAqc2QgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpkdW1teV9zYyA9IHNkLT5kYmdfc29jazsKIAogCW8ybmV0X2RlYnVnX2RlbF9zYyhkdW1teV9zYyk7CiAJcmV0dXJuIHNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpOwogfQogCitzdGF0aWMgaW50IHN0YXRzX2ZvcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBvMm5ldF9zb2NrX2RlYnVnICpzZDsKKworCXNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG8ybmV0X3NvY2tfZGVidWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2QgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzZC0+ZGJnX2N0eHQgPSBTSE9XX1NPQ0tfU1RBVFM7CisJc2QtPmRiZ19zb2NrID0gTlVMTDsKKworCXJldHVybiBzY19jb21tb25fb3BlbihmaWxlLCBzZCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YXRzX3NlcV9mb3BzID0geworCS5vcGVuID0gc3RhdHNfZm9wX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2NfZm9wX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHNjX2ZvcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBvMm5ldF9zb2NrX2RlYnVnICpzZDsKKworCXNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG8ybmV0X3NvY2tfZGVidWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2QgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzZC0+ZGJnX2N0eHQgPSBTSE9XX1NPQ0tfQ09OVEFJTkVSUzsKKwlzZC0+ZGJnX3NvY2sgPSBOVUxMOworCisJcmV0dXJuIHNjX2NvbW1vbl9vcGVuKGZpbGUsIHNkKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2Nfc2VxX2ZvcHMgPSB7CiAJLm9wZW4gPSBzY19mb3Bfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLApAQCAtNDE5LDI1ICs1MTUsMjkgQEAKIAkJZ290byBiYWlsOwogCX0KIAorCXN0YXRzX2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoU1RBVFNfREVCVUdfTkFNRSwgU19JRlJFR3xTX0lSVVNSLAorCQkJCQkgICBvMm5ldF9kZW50cnksIE5VTEwsCisJCQkJCSAgICZzdGF0c19zZXFfZm9wcyk7CisJaWYgKCFzdGF0c19kZW50cnkpIHsKKwkJbWxvZ19lcnJubygtRU5PTUVNKTsKKwkJZ290byBiYWlsOworCX0KKwogCXJldHVybiAwOwogYmFpbDoKLQlpZiAoc2NfZGVudHJ5KQotCQlkZWJ1Z2ZzX3JlbW92ZShzY19kZW50cnkpOwotCWlmIChuc3RfZGVudHJ5KQotCQlkZWJ1Z2ZzX3JlbW92ZShuc3RfZGVudHJ5KTsKLQlpZiAobzJuZXRfZGVudHJ5KQotCQlkZWJ1Z2ZzX3JlbW92ZShvMm5ldF9kZW50cnkpOworCWRlYnVnZnNfcmVtb3ZlKHN0YXRzX2RlbnRyeSk7CisJZGVidWdmc19yZW1vdmUoc2NfZGVudHJ5KTsKKwlkZWJ1Z2ZzX3JlbW92ZShuc3RfZGVudHJ5KTsKKwlkZWJ1Z2ZzX3JlbW92ZShvMm5ldF9kZW50cnkpOwogCXJldHVybiAtRU5PTUVNOwogfQogCiB2b2lkIG8ybmV0X2RlYnVnZnNfZXhpdCh2b2lkKQogewotCWlmIChzY19kZW50cnkpCi0JCWRlYnVnZnNfcmVtb3ZlKHNjX2RlbnRyeSk7Ci0JaWYgKG5zdF9kZW50cnkpCi0JCWRlYnVnZnNfcmVtb3ZlKG5zdF9kZW50cnkpOwotCWlmIChvMm5ldF9kZW50cnkpCi0JCWRlYnVnZnNfcmVtb3ZlKG8ybmV0X2RlbnRyeSk7CisJZGVidWdmc19yZW1vdmUoc3RhdHNfZGVudHJ5KTsKKwlkZWJ1Z2ZzX3JlbW92ZShzY19kZW50cnkpOworCWRlYnVnZnNfcmVtb3ZlKG5zdF9kZW50cnkpOworCWRlYnVnZnNfcmVtb3ZlKG8ybmV0X2RlbnRyeSk7CiB9CiAKICNlbmRpZgkvKiBDT05GSUdfREVCVUdfRlMgKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jCmluZGV4IDlhYTQyNmUuLjNiMTFjYjEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci90Y3AuYwpAQCAtMTUzLDYzICsxNTMsMTE0IEBACiAJbnN0LT5zdF9ub2RlID0gbm9kZTsKIH0KIAotc3RhdGljIHZvaWQgbzJuZXRfc2V0X25zdF9zb2NrX3RpbWUoc3RydWN0IG8ybmV0X3NlbmRfdHJhY2tpbmcgKm5zdCkKLXsKLQlkb19nZXR0aW1lb2ZkYXkoJm5zdC0+c3Rfc29ja190aW1lKTsKLX0KLQotc3RhdGljIHZvaWQgbzJuZXRfc2V0X25zdF9zZW5kX3RpbWUoc3RydWN0IG8ybmV0X3NlbmRfdHJhY2tpbmcgKm5zdCkKLXsKLQlkb19nZXR0aW1lb2ZkYXkoJm5zdC0+c3Rfc2VuZF90aW1lKTsKLX0KLQotc3RhdGljIHZvaWQgbzJuZXRfc2V0X25zdF9zdGF0dXNfdGltZShzdHJ1Y3QgbzJuZXRfc2VuZF90cmFja2luZyAqbnN0KQotewotCWRvX2dldHRpbWVvZmRheSgmbnN0LT5zdF9zdGF0dXNfdGltZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG8ybmV0X3NldF9uc3Rfc29ja19jb250YWluZXIoc3RydWN0IG8ybmV0X3NlbmRfdHJhY2tpbmcgKm5zdCwKLQkJCQkJIHN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqc2MpCi17Ci0JbnN0LT5zdF9zYyA9IHNjOwotfQotCi1zdGF0aWMgdm9pZCBvMm5ldF9zZXRfbnN0X21zZ19pZChzdHJ1Y3QgbzJuZXRfc2VuZF90cmFja2luZyAqbnN0LCB1MzIgbXNnX2lkKQotewotCW5zdC0+c3RfaWQgPSBtc2dfaWQ7Ci19Ci0KLSNlbHNlICAvKiBDT05GSUdfREVCVUdfRlMgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIG8ybmV0X2luaXRfbnN0KHN0cnVjdCBvMm5ldF9zZW5kX3RyYWNraW5nICpuc3QsIHUzMiBtc2d0eXBlLAotCQkJCSAgdTMyIG1zZ2tleSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1OCBub2RlKQotewotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgbzJuZXRfc2V0X25zdF9zb2NrX3RpbWUoc3RydWN0IG8ybmV0X3NlbmRfdHJhY2tpbmcgKm5zdCkKIHsKKwluc3QtPnN0X3NvY2tfdGltZSA9IGt0aW1lX2dldCgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbzJuZXRfc2V0X25zdF9zZW5kX3RpbWUoc3RydWN0IG8ybmV0X3NlbmRfdHJhY2tpbmcgKm5zdCkKIHsKKwluc3QtPnN0X3NlbmRfdGltZSA9IGt0aW1lX2dldCgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbzJuZXRfc2V0X25zdF9zdGF0dXNfdGltZShzdHJ1Y3QgbzJuZXRfc2VuZF90cmFja2luZyAqbnN0KQogeworCW5zdC0+c3Rfc3RhdHVzX3RpbWUgPSBrdGltZV9nZXQoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG8ybmV0X3NldF9uc3Rfc29ja19jb250YWluZXIoc3RydWN0IG8ybmV0X3NlbmRfdHJhY2tpbmcgKm5zdCwKIAkJCQkJCXN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqc2MpCiB7CisJbnN0LT5zdF9zYyA9IHNjOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbzJuZXRfc2V0X25zdF9tc2dfaWQoc3RydWN0IG8ybmV0X3NlbmRfdHJhY2tpbmcgKm5zdCwKIAkJCQkJdTMyIG1zZ19pZCkKIHsKKwluc3QtPnN0X2lkID0gbXNnX2lkOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbzJuZXRfc2V0X3NvY2tfdGltZXIoc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzYykKK3sKKwlzYy0+c2NfdHZfdGltZXIgPSBrdGltZV9nZXQoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG8ybmV0X3NldF9kYXRhX3JlYWR5X3RpbWUoc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzYykKK3sKKwlzYy0+c2NfdHZfZGF0YV9yZWFkeSA9IGt0aW1lX2dldCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbzJuZXRfc2V0X2FkdmFuY2Vfc3RhcnRfdGltZShzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjKQoreworCXNjLT5zY190dl9hZHZhbmNlX3N0YXJ0ID0ga3RpbWVfZ2V0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvMm5ldF9zZXRfYWR2YW5jZV9zdG9wX3RpbWUoc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzYykKK3sKKwlzYy0+c2NfdHZfYWR2YW5jZV9zdG9wID0ga3RpbWVfZ2V0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvMm5ldF9zZXRfZnVuY19zdGFydF90aW1lKHN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqc2MpCit7CisJc2MtPnNjX3R2X2Z1bmNfc3RhcnQgPSBrdGltZV9nZXQoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG8ybmV0X3NldF9mdW5jX3N0b3BfdGltZShzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjKQoreworCXNjLT5zY190dl9mdW5jX3N0b3AgPSBrdGltZV9nZXQoKTsKK30KKworc3RhdGljIGt0aW1lX3QgbzJuZXRfZ2V0X2Z1bmNfcnVuX3RpbWUoc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzYykKK3sKKwlyZXR1cm4ga3RpbWVfc3ViKHNjLT5zY190dl9mdW5jX3N0b3AsIHNjLT5zY190dl9mdW5jX3N0YXJ0KTsKK30KKyNlbHNlICAvKiBDT05GSUdfREVCVUdfRlMgKi8KKyMgZGVmaW5lIG8ybmV0X2luaXRfbnN0KGEsIGIsIGMsIGQsIGUpCisjIGRlZmluZSBvMm5ldF9zZXRfbnN0X3NvY2tfdGltZShhKQorIyBkZWZpbmUgbzJuZXRfc2V0X25zdF9zZW5kX3RpbWUoYSkKKyMgZGVmaW5lIG8ybmV0X3NldF9uc3Rfc3RhdHVzX3RpbWUoYSkKKyMgZGVmaW5lIG8ybmV0X3NldF9uc3Rfc29ja19jb250YWluZXIoYSwgYikKKyMgZGVmaW5lIG8ybmV0X3NldF9uc3RfbXNnX2lkKGEsIGIpCisjIGRlZmluZSBvMm5ldF9zZXRfc29ja190aW1lcihhKQorIyBkZWZpbmUgbzJuZXRfc2V0X2RhdGFfcmVhZHlfdGltZShhKQorIyBkZWZpbmUgbzJuZXRfc2V0X2FkdmFuY2Vfc3RhcnRfdGltZShhKQorIyBkZWZpbmUgbzJuZXRfc2V0X2FkdmFuY2Vfc3RvcF90aW1lKGEpCisjIGRlZmluZSBvMm5ldF9zZXRfZnVuY19zdGFydF90aW1lKGEpCisjIGRlZmluZSBvMm5ldF9zZXRfZnVuY19zdG9wX3RpbWUoYSkKKyMgZGVmaW5lIG8ybmV0X2dldF9mdW5jX3J1bl90aW1lKGEpCQkoa3RpbWVfdCkwCiAjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCiAKKyNpZmRlZiBDT05GSUdfT0NGUzJfRlNfU1RBVFMKK3N0YXRpYyB2b2lkIG8ybmV0X3VwZGF0ZV9zZW5kX3N0YXRzKHN0cnVjdCBvMm5ldF9zZW5kX3RyYWNraW5nICpuc3QsCisJCQkJICAgIHN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqc2MpCit7CisJc2MtPnNjX3R2X3N0YXR1c190b3RhbCA9IGt0aW1lX2FkZChzYy0+c2NfdHZfc3RhdHVzX3RvdGFsLAorCQkJCQkgICBrdGltZV9zdWIoa3RpbWVfZ2V0KCksCisJCQkJCQkgICAgIG5zdC0+c3Rfc3RhdHVzX3RpbWUpKTsKKwlzYy0+c2NfdHZfc2VuZF90b3RhbCA9IGt0aW1lX2FkZChzYy0+c2NfdHZfc2VuZF90b3RhbCwKKwkJCQkJIGt0aW1lX3N1Yihuc3QtPnN0X3N0YXR1c190aW1lLAorCQkJCQkJICAgbnN0LT5zdF9zZW5kX3RpbWUpKTsKKwlzYy0+c2NfdHZfYWNxdWlyeV90b3RhbCA9IGt0aW1lX2FkZChzYy0+c2NfdHZfYWNxdWlyeV90b3RhbCwKKwkJCQkJICAgIGt0aW1lX3N1Yihuc3QtPnN0X3NlbmRfdGltZSwKKwkJCQkJCSAgICAgIG5zdC0+c3Rfc29ja190aW1lKSk7CisJc2MtPnNjX3NlbmRfY291bnQrKzsKK30KKworc3RhdGljIHZvaWQgbzJuZXRfdXBkYXRlX3JlY3Zfc3RhdHMoc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzYykKK3sKKwlzYy0+c2NfdHZfcHJvY2Vzc190b3RhbCA9IGt0aW1lX2FkZChzYy0+c2NfdHZfcHJvY2Vzc190b3RhbCwKKwkJCQkJICAgIG8ybmV0X2dldF9mdW5jX3J1bl90aW1lKHNjKSk7CisJc2MtPnNjX3JlY3ZfY291bnQrKzsKK30KKworI2Vsc2UKKworIyBkZWZpbmUgbzJuZXRfdXBkYXRlX3NlbmRfc3RhdHMoYSwgYikKKworIyBkZWZpbmUgbzJuZXRfdXBkYXRlX3JlY3Zfc3RhdHMoc2MpCisKKyNlbmRpZiAvKiBDT05GSUdfT0NGUzJfRlNfU1RBVFMgKi8KKwogc3RhdGljIGlubGluZSBpbnQgbzJuZXRfcmVjb25uZWN0X2RlbGF5KHZvaWQpCiB7CiAJcmV0dXJuIG8ybm1fc2luZ2xlX2NsdXN0ZXItPmNsX3JlY29ubmVjdF9kZWxheV9tczsKQEAgLTM1NSw2ICs0MDYsNyBAQAogCQlzYy0+c2Nfc29jayA9IE5VTEw7CiAJfQogCisJbzJubV91bmRlcGVuZF9pdGVtKCZzYy0+c2Nfbm9kZS0+bmRfaXRlbSk7CiAJbzJubV9ub2RlX3B1dChzYy0+c2Nfbm9kZSk7CiAJc2MtPnNjX25vZGUgPSBOVUxMOwogCkBAIC0zNzYsNiArNDI4LDcgQEAKIHsKIAlzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjLCAqcmV0ID0gTlVMTDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CisJaW50IHN0YXR1cyA9IDA7CiAKIAlwYWdlID0gYWxsb2NfcGFnZShHRlBfTk9GUyk7CiAJc2MgPSBremFsbG9jKHNpemVvZigqc2MpLCBHRlBfTk9GUyk7CkBAIC0zODYsNiArNDM5LDEzIEBACiAJbzJubV9ub2RlX2dldChub2RlKTsKIAlzYy0+c2Nfbm9kZSA9IG5vZGU7CiAKKwkvKiBwaW4gdGhlIG5vZGUgaXRlbSBvZiB0aGUgcmVtb3RlIG5vZGUgKi8KKwlzdGF0dXMgPSBvMm5tX2RlcGVuZF9pdGVtKCZub2RlLT5uZF9pdGVtKTsKKwlpZiAoc3RhdHVzKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJbzJubV9ub2RlX3B1dChub2RlKTsKKwkJZ290byBvdXQ7CisJfQogCUlOSVRfV09SSygmc2MtPnNjX2Nvbm5lY3Rfd29yaywgbzJuZXRfc2NfY29ubmVjdF9jb21wbGV0ZWQpOwogCUlOSVRfV09SSygmc2MtPnNjX3J4X3dvcmssIG8ybmV0X3J4X3VudGlsX2VtcHR5KTsKIAlJTklUX1dPUksoJnNjLT5zY19zaHV0ZG93bl93b3JrLCBvMm5ldF9zaHV0ZG93bl9zYyk7CkBAIC01NDYsNyArNjA2LDcgQEAKIAlpZiAoc2stPnNrX3VzZXJfZGF0YSkgewogCQlzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjID0gc2stPnNrX3VzZXJfZGF0YTsKIAkJc2Nsb2coc2MsICJkYXRhX3JlYWR5IGhpdFxuIik7Ci0JCWRvX2dldHRpbWVvZmRheSgmc2MtPnNjX3R2X2RhdGFfcmVhZHkpOworCQlvMm5ldF9zZXRfZGF0YV9yZWFkeV90aW1lKHNjKTsKIAkJbzJuZXRfc2NfcXVldWVfd29yayhzYywgJnNjLT5zY19yeF93b3JrKTsKIAkJcmVhZHkgPSBzYy0+c2NfZGF0YV9yZWFkeTsKIAl9IGVsc2UgewpAQCAtMTA3MCw2ICsxMTMwLDggQEAKIAlvMm5ldF9zZXRfbnN0X3N0YXR1c190aW1lKCZuc3QpOwogCXdhaXRfZXZlbnQobnN3Lm5zX3dxLCBvMm5ldF9uc3dfY29tcGxldGVkKG5uLCAmbnN3KSk7CiAKKwlvMm5ldF91cGRhdGVfc2VuZF9zdGF0cygmbnN0LCBzYyk7CisKIAkvKiBOb3RlIHRoYXQgd2UgYXZvaWQgb3ZlcndyaXRpbmcgdGhlIGNhbGxlcnMgc3RhdHVzIHJldHVybgogCSAqIHZhcmlhYmxlIGlmIGEgc3lzdGVtIGVycm9yIHdhcyByZXBvcnRlZCBvbiB0aGUgb3RoZXIKIAkgKiBzaWRlLiBDYWxsZXJzIGJld2FyZS4gKi8KQEAgLTExODMsMTMgKzEyNDUsMTUgQEAKIAlpZiAoc3lzZXJyICE9IE8yTkVUX0VSUl9OT05FKQogCQlnb3RvIG91dF9yZXNwb25kOwogCi0JZG9fZ2V0dGltZW9mZGF5KCZzYy0+c2NfdHZfZnVuY19zdGFydCk7CisJbzJuZXRfc2V0X2Z1bmNfc3RhcnRfdGltZShzYyk7CiAJc2MtPnNjX21zZ19rZXkgPSBiZTMyX3RvX2NwdShoZHItPmtleSk7CiAJc2MtPnNjX21zZ190eXBlID0gYmUxNl90b19jcHUoaGRyLT5tc2dfdHlwZSk7CiAJaGFuZGxlcl9zdGF0dXMgPSAobm1oLT5uaF9mdW5jKShoZHIsIHNpemVvZihzdHJ1Y3QgbzJuZXRfbXNnKSArCiAJCQkJCSAgICAgYmUxNl90b19jcHUoaGRyLT5kYXRhX2xlbiksCiAJCQkJCW5taC0+bmhfZnVuY19kYXRhLCAmcmV0X2RhdGEpOwotCWRvX2dldHRpbWVvZmRheSgmc2MtPnNjX3R2X2Z1bmNfc3RvcCk7CisJbzJuZXRfc2V0X2Z1bmNfc3RvcF90aW1lKHNjKTsKKworCW8ybmV0X3VwZGF0ZV9yZWN2X3N0YXRzKHNjKTsKIAogb3V0X3Jlc3BvbmQ6CiAJLyogdGhpcyBkZXN0cm95cyB0aGUgaGRyLCBzbyBkb24ndCB1c2UgaXQgYWZ0ZXIgdGhpcyAqLwpAQCAtMTMwMCw3ICsxMzY0LDcgQEAKIAlzaXplX3QgZGF0YWxlbjsKIAogCXNjbG9nKHNjLCAicmVjZWl2aW5nXG4iKTsKLQlkb19nZXR0aW1lb2ZkYXkoJnNjLT5zY190dl9hZHZhbmNlX3N0YXJ0KTsKKwlvMm5ldF9zZXRfYWR2YW5jZV9zdGFydF90aW1lKHNjKTsKIAogCWlmICh1bmxpa2VseShzYy0+c2NfaGFuZHNoYWtlX29rID09IDApKSB7CiAJCWlmKHNjLT5zY19wYWdlX29mZiA8IHNpemVvZihzdHJ1Y3QgbzJuZXRfaGFuZHNoYWtlKSkgewpAQCAtMTM3NSw3ICsxNDM5LDcgQEAKIAogb3V0OgogCXNjbG9nKHNjLCAicmV0ID0gJWRcbiIsIHJldCk7Ci0JZG9fZ2V0dGltZW9mZGF5KCZzYy0+c2NfdHZfYWR2YW5jZV9zdG9wKTsKKwlvMm5ldF9zZXRfYWR2YW5jZV9zdG9wX3RpbWUoc2MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE0NzUsMjcgKzE1MzksMjggQEAKIHsKIAlzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjID0gKHN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqKWRhdGE7CiAJc3RydWN0IG8ybmV0X25vZGUgKm5uID0gbzJuZXRfbm5fZnJvbV9udW0oc2MtPnNjX25vZGUtPm5kX251bSk7Ci0Jc3RydWN0IHRpbWV2YWwgbm93OwogCi0JZG9fZ2V0dGltZW9mZGF5KCZub3cpOworI2lmZGVmIENPTkZJR19ERUJVR19GUworCWt0aW1lX3Qgbm93ID0ga3RpbWVfZ2V0KCk7CisjZW5kaWYKIAogCXByaW50ayhLRVJOX05PVElDRSAibzJuZXQ6IGNvbm5lY3Rpb24gdG8gIiBTQ19OT0RFRl9GTVQgIiBoYXMgYmVlbiBpZGxlIGZvciAldS4ldSAiCiAJICAgICAic2Vjb25kcywgc2h1dHRpbmcgaXQgZG93bi5cbiIsIFNDX05PREVGX0FSR1Moc2MpLAogCQkgICAgIG8ybmV0X2lkbGVfdGltZW91dCgpIC8gMTAwMCwKIAkJICAgICBvMm5ldF9pZGxlX3RpbWVvdXQoKSAlIDEwMDApOwotCW1sb2coTUxfTk9USUNFLCAiaGVyZSBhcmUgc29tZSB0aW1lcyB0aGF0IG1pZ2h0IGhlbHAgZGVidWcgdGhlICIKLQkgICAgICJzaXR1YXRpb246ICh0bXIgJWxkLiVsZCBub3cgJWxkLiVsZCBkciAlbGQuJWxkIGFkdiAiCi0JICAgICAiJWxkLiVsZDolbGQuJWxkIGZ1bmMgKCUwOHg6JXUpICVsZC4lbGQ6JWxkLiVsZClcbiIsCi0JICAgICBzYy0+c2NfdHZfdGltZXIudHZfc2VjLCAobG9uZykgc2MtPnNjX3R2X3RpbWVyLnR2X3VzZWMsCi0JICAgICBub3cudHZfc2VjLCAobG9uZykgbm93LnR2X3VzZWMsCi0JICAgICBzYy0+c2NfdHZfZGF0YV9yZWFkeS50dl9zZWMsIChsb25nKSBzYy0+c2NfdHZfZGF0YV9yZWFkeS50dl91c2VjLAotCSAgICAgc2MtPnNjX3R2X2FkdmFuY2Vfc3RhcnQudHZfc2VjLAotCSAgICAgKGxvbmcpIHNjLT5zY190dl9hZHZhbmNlX3N0YXJ0LnR2X3VzZWMsCi0JICAgICBzYy0+c2NfdHZfYWR2YW5jZV9zdG9wLnR2X3NlYywKLQkgICAgIChsb25nKSBzYy0+c2NfdHZfYWR2YW5jZV9zdG9wLnR2X3VzZWMsCisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwltbG9nKE1MX05PVElDRSwgIkhlcmUgYXJlIHNvbWUgdGltZXMgdGhhdCBtaWdodCBoZWxwIGRlYnVnIHRoZSAiCisJICAgICAic2l0dWF0aW9uOiAoVGltZXI6ICVsbGQsIE5vdyAlbGxkLCBEYXRhUmVhZHkgJWxsZCwgQWR2YW5jZSAlbGxkLSVsbGQsICIKKwkgICAgICJLZXkgMHglMDh4LCBGdW5jICV1LCBGdW5jVGltZSAlbGxkLSVsbGQpXG4iLAorCSAgICAgKGxvbmcgbG9uZylrdGltZV90b191cyhzYy0+c2NfdHZfdGltZXIpLCAobG9uZyBsb25nKWt0aW1lX3RvX3VzKG5vdyksCisJICAgICAobG9uZyBsb25nKWt0aW1lX3RvX3VzKHNjLT5zY190dl9kYXRhX3JlYWR5KSwKKwkgICAgIChsb25nIGxvbmcpa3RpbWVfdG9fdXMoc2MtPnNjX3R2X2FkdmFuY2Vfc3RhcnQpLAorCSAgICAgKGxvbmcgbG9uZylrdGltZV90b191cyhzYy0+c2NfdHZfYWR2YW5jZV9zdG9wKSwKIAkgICAgIHNjLT5zY19tc2dfa2V5LCBzYy0+c2NfbXNnX3R5cGUsCi0JICAgICBzYy0+c2NfdHZfZnVuY19zdGFydC50dl9zZWMsIChsb25nKSBzYy0+c2NfdHZfZnVuY19zdGFydC50dl91c2VjLAotCSAgICAgc2MtPnNjX3R2X2Z1bmNfc3RvcC50dl9zZWMsIChsb25nKSBzYy0+c2NfdHZfZnVuY19zdG9wLnR2X3VzZWMpOworCSAgICAgKGxvbmcgbG9uZylrdGltZV90b191cyhzYy0+c2NfdHZfZnVuY19zdGFydCksCisJICAgICAobG9uZyBsb25nKWt0aW1lX3RvX3VzKHNjLT5zY190dl9mdW5jX3N0b3ApKTsKKyNlbmRpZgogCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBubl90aW1lb3V0IHNvIHRoYXQgdGhlIG5leHQgY29ubmVjdGlvbiBhdHRlbXB0CkBAIC0xNTExLDcgKzE1NzYsNyBAQAogCW8ybmV0X3NjX2NhbmNlbF9kZWxheWVkX3dvcmsoc2MsICZzYy0+c2Nfa2VlcGFsaXZlX3dvcmspOwogCW8ybmV0X3NjX3F1ZXVlX2RlbGF5ZWRfd29yayhzYywgJnNjLT5zY19rZWVwYWxpdmVfd29yaywKIAkJICAgICAgbXNlY3NfdG9famlmZmllcyhvMm5ldF9rZWVwYWxpdmVfZGVsYXkoKSkpOwotCWRvX2dldHRpbWVvZmRheSgmc2MtPnNjX3R2X3RpbWVyKTsKKwlvMm5ldF9zZXRfc29ja190aW1lcihzYyk7CiAJbW9kX3RpbWVyKCZzYy0+c2NfaWRsZV90aW1lb3V0LAogCSAgICAgICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhvMm5ldF9pZGxlX3RpbWVvdXQoKSkpOwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci90Y3BfaW50ZXJuYWwuaCBiL2ZzL29jZnMyL2NsdXN0ZXIvdGNwX2ludGVybmFsLmgKaW5kZXggMTVmZGJkZi4uNGNiY2I2NSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci90Y3BfaW50ZXJuYWwuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL3RjcF9pbnRlcm5hbC5oCkBAIC0xNjYsMTggKzE2NiwyNyBAQAogCS8qIG9yaWdpbmFsIGhhbmRsZXJzIGZvciB0aGUgc29ja2V0cyAqLwogCXZvaWQJCQkoKnNjX3N0YXRlX2NoYW5nZSkoc3RydWN0IHNvY2sgKnNrKTsKIAl2b2lkCQkJKCpzY19kYXRhX3JlYWR5KShzdHJ1Y3Qgc29jayAqc2ssIGludCBieXRlcyk7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTCi0Jc3RydWN0IGxpc3RfaGVhZCAgICAgICAgc2NfbmV0X2RlYnVnX2l0ZW07Ci0jZW5kaWYKLQlzdHJ1Y3QgdGltZXZhbCAJCXNjX3R2X3RpbWVyOwotCXN0cnVjdCB0aW1ldmFsIAkJc2NfdHZfZGF0YV9yZWFkeTsKLQlzdHJ1Y3QgdGltZXZhbCAJCXNjX3R2X2FkdmFuY2Vfc3RhcnQ7Ci0Jc3RydWN0IHRpbWV2YWwgCQlzY190dl9hZHZhbmNlX3N0b3A7Ci0Jc3RydWN0IHRpbWV2YWwgCQlzY190dl9mdW5jX3N0YXJ0OwotCXN0cnVjdCB0aW1ldmFsIAkJc2NfdHZfZnVuY19zdG9wOworCiAJdTMyCQkJc2NfbXNnX2tleTsKIAl1MTYJCQlzY19tc2dfdHlwZTsKIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHNjX25ldF9kZWJ1Z19pdGVtOworCWt0aW1lX3QJCQlzY190dl90aW1lcjsKKwlrdGltZV90CQkJc2NfdHZfZGF0YV9yZWFkeTsKKwlrdGltZV90CQkJc2NfdHZfYWR2YW5jZV9zdGFydDsKKwlrdGltZV90CQkJc2NfdHZfYWR2YW5jZV9zdG9wOworCWt0aW1lX3QJCQlzY190dl9mdW5jX3N0YXJ0OworCWt0aW1lX3QJCQlzY190dl9mdW5jX3N0b3A7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfT0NGUzJfRlNfU1RBVFMKKwlrdGltZV90CQkJc2NfdHZfYWNxdWlyeV90b3RhbDsKKwlrdGltZV90CQkJc2NfdHZfc2VuZF90b3RhbDsKKwlrdGltZV90CQkJc2NfdHZfc3RhdHVzX3RvdGFsOworCXUzMgkJCXNjX3NlbmRfY291bnQ7CisJdTMyCQkJc2NfcmVjdl9jb3VudDsKKwlrdGltZV90CQkJc2NfdHZfcHJvY2Vzc190b3RhbDsKKyNlbmRpZgogCXN0cnVjdCBtdXRleAkJc2Nfc2VuZF9sb2NrOwogfTsKIApAQCAtMjIwLDkgKzIyOSw5IEBACiAJdTMyCQkJCXN0X21zZ190eXBlOwogCXUzMgkJCQlzdF9tc2dfa2V5OwogCXU4CQkJCXN0X25vZGU7Ci0Jc3RydWN0IHRpbWV2YWwJCQlzdF9zb2NrX3RpbWU7Ci0Jc3RydWN0IHRpbWV2YWwJCQlzdF9zZW5kX3RpbWU7Ci0Jc3RydWN0IHRpbWV2YWwJCQlzdF9zdGF0dXNfdGltZTsKKwlrdGltZV90CQkJCXN0X3NvY2tfdGltZTsKKwlrdGltZV90CQkJCXN0X3NlbmRfdGltZTsKKwlrdGltZV90CQkJCXN0X3N0YXR1c190aW1lOwogfTsKICNlbHNlCiBzdHJ1Y3QgbzJuZXRfc2VuZF90cmFja2luZyB7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtYXN0LmMgYi9mcy9vY2ZzMi9kbG0vZGxtYXN0LmMKaW5kZXggZjQ0OTk5MS4uM2EzZWQ0YiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWFzdC5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1hc3QuYwpAQCAtOTAsMTkgKzkwLDI5IEBACiAKIHZvaWQgX19kbG1fcXVldWVfYXN0KHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBzdHJ1Y3QgZGxtX2xvY2sgKmxvY2spCiB7Ci0JbWxvZ19lbnRyeV92b2lkKCk7CisJc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXM7CiAKIAlCVUdfT04oIWRsbSk7CiAJQlVHX09OKCFsb2NrKTsKIAorCXJlcyA9IGxvY2stPmxvY2tyZXM7CisKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRsbS0+YXN0X2xvY2spOworCiAJaWYgKCFsaXN0X2VtcHR5KCZsb2NrLT5hc3RfbGlzdCkpIHsKLQkJbWxvZyhNTF9FUlJPUiwgImFzdCBsaXN0IG5vdCBlbXB0eSEhICBwZW5kaW5nPSVkLCBuZXdsZXZlbD0lZFxuIiwKKwkJbWxvZyhNTF9FUlJPUiwgIiVzOiByZXMgJS4qcywgbG9jayAldTolbGx1LCAiCisJCSAgICAgIkFTVCBsaXN0IG5vdCBlbXB0eSwgcGVuZGluZyAlZCwgbmV3bGV2ZWwgJWRcbiIsCisJCSAgICAgZGxtLT5uYW1lLCByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLAorCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfbm9kZShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSwKKwkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSwKIAkJICAgICBsb2NrLT5hc3RfcGVuZGluZywgbG9jay0+bWwudHlwZSk7CiAJCUJVRygpOwogCX0KIAlpZiAobG9jay0+YXN0X3BlbmRpbmcpCi0JCW1sb2coMCwgImxvY2sgaGFzIGFuIGFzdCBnZXR0aW5nIGZsdXNoZWQgcmlnaHQgbm93XG4iKTsKKwkJbWxvZygwLCAiJXM6IHJlcyAlLipzLCBsb2NrICV1OiVsbHUsIEFTVCBnZXR0aW5nIGZsdXNoZWRcbiIsCisJCSAgICAgZGxtLT5uYW1lLCByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLAorCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfbm9kZShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSwKKwkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSk7CiAKIAkvKiBwdXR0aW5nIGxvY2sgb24gbGlzdCwgYWRkIGEgcmVmICovCiAJZGxtX2xvY2tfZ2V0KGxvY2spOwpAQCAtMTEwLDkgKzEyMCwxMCBAQAogCiAJLyogY2hlY2sgdG8gc2VlIGlmIHRoaXMgYXN0IG9ic29sZXRlcyB0aGUgYmFzdCAqLwogCWlmIChkbG1fc2hvdWxkX2NhbmNlbF9iYXN0KGRsbSwgbG9jaykpIHsKLQkJc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXMgPSBsb2NrLT5sb2NrcmVzOwotCQltbG9nKDAsICIlczogY2FuY2VsbGluZyBiYXN0IGZvciAlLipzXG4iLAotCQkgICAgIGRsbS0+bmFtZSwgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSk7CisJCW1sb2coMCwgIiVzOiByZXMgJS4qcywgbG9jayAldTolbGx1LCBDYW5jZWxsaW5nIEJBU1RcbiIsCisJCSAgICAgZGxtLT5uYW1lLCByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLAorCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfbm9kZShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSwKKwkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSk7CiAJCWxvY2stPmJhc3RfcGVuZGluZyA9IDA7CiAJCWxpc3RfZGVsX2luaXQoJmxvY2stPmJhc3RfbGlzdCk7CiAJCWxvY2stPm1sLmhpZ2hlc3RfYmxvY2tlZCA9IExLTV9JVk1PREU7CkBAIC0xMzQsOCArMTQ1LDYgQEAKIAogdm9pZCBkbG1fcXVldWVfYXN0KHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBzdHJ1Y3QgZGxtX2xvY2sgKmxvY2spCiB7Ci0JbWxvZ19lbnRyeV92b2lkKCk7Ci0KIAlCVUdfT04oIWRsbSk7CiAJQlVHX09OKCFsb2NrKTsKIApAQCAtMTQ3LDE1ICsxNTYsMjEgQEAKIAogdm9pZCBfX2RsbV9xdWV1ZV9iYXN0KHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBzdHJ1Y3QgZGxtX2xvY2sgKmxvY2spCiB7Ci0JbWxvZ19lbnRyeV92b2lkKCk7CisJc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXM7CiAKIAlCVUdfT04oIWRsbSk7CiAJQlVHX09OKCFsb2NrKTsKKwogCWFzc2VydF9zcGluX2xvY2tlZCgmZGxtLT5hc3RfbG9jayk7CiAKKwlyZXMgPSBsb2NrLT5sb2NrcmVzOworCiAJQlVHX09OKCFsaXN0X2VtcHR5KCZsb2NrLT5iYXN0X2xpc3QpKTsKIAlpZiAobG9jay0+YmFzdF9wZW5kaW5nKQotCQltbG9nKDAsICJsb2NrIGhhcyBhIGJhc3QgZ2V0dGluZyBmbHVzaGVkIHJpZ2h0IG5vd1xuIik7CisJCW1sb2coMCwgIiVzOiByZXMgJS4qcywgbG9jayAldTolbGx1LCBCQVNUIGdldHRpbmcgZmx1c2hlZFxuIiwKKwkJICAgICBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUsCisJCSAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9ub2RlKGJlNjRfdG9fY3B1KGxvY2stPm1sLmNvb2tpZSkpLAorCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfc2VxKGJlNjRfdG9fY3B1KGxvY2stPm1sLmNvb2tpZSkpKTsKIAogCS8qIHB1dHRpbmcgbG9jayBvbiBsaXN0LCBhZGQgYSByZWYgKi8KIAlkbG1fbG9ja19nZXQobG9jayk7CkBAIC0xNjcsOCArMTgyLDYgQEAKIAogdm9pZCBkbG1fcXVldWVfYmFzdChzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwgc3RydWN0IGRsbV9sb2NrICpsb2NrKQogewotCW1sb2dfZW50cnlfdm9pZCgpOwotCiAJQlVHX09OKCFkbG0pOwogCUJVR19PTighbG9jayk7CiAKQEAgLTIxMyw3ICsyMjYsMTAgQEAKIAlkbG1fYXN0bG9ja2Z1bmNfdCAqZm47CiAJc3RydWN0IGRsbV9sb2Nrc3RhdHVzICpsa3NiOwogCi0JbWxvZ19lbnRyeV92b2lkKCk7CisJbWxvZygwLCAiJXM6IHJlcyAlLipzLCBsb2NrICV1OiVsbHUsIExvY2FsIEFTVFxuIiwgZGxtLT5uYW1lLAorCSAgICAgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSwKKwkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfbm9kZShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSwKKwkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfc2VxKGJlNjRfdG9fY3B1KGxvY2stPm1sLmNvb2tpZSkpKTsKIAogCWxrc2IgPSBsb2NrLT5sa3NiOwogCWZuID0gbG9jay0+YXN0OwpAQCAtMjMxLDcgKzI0NywxMCBAQAogCXN0cnVjdCBkbG1fbG9ja3N0YXR1cyAqbGtzYjsKIAlpbnQgbGtzYmZsYWdzOwogCi0JbWxvZ19lbnRyeV92b2lkKCk7CisJbWxvZygwLCAiJXM6IHJlcyAlLipzLCBsb2NrICV1OiVsbHUsIFJlbW90ZSBBU1RcbiIsIGRsbS0+bmFtZSwKKwkgICAgIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUsCisJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX25vZGUoYmU2NF90b19jcHUobG9jay0+bWwuY29va2llKSksCisJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSk7CiAKIAlsa3NiID0gbG9jay0+bGtzYjsKIAlCVUdfT04obG9jay0+bWwubm9kZSA9PSBkbG0tPm5vZGVfbnVtKTsKQEAgLTI1MCw5ICsyNjksMTQgQEAKIHsKIAlkbG1fYmFzdGxvY2tmdW5jX3QgKmZuID0gbG9jay0+YmFzdDsKIAotCW1sb2dfZW50cnlfdm9pZCgpOwogCUJVR19PTihsb2NrLT5tbC5ub2RlICE9IGRsbS0+bm9kZV9udW0pOwogCisJbWxvZygwLCAiJXM6IHJlcyAlLipzLCBsb2NrICV1OiVsbHUsIExvY2FsIEJBU1QsIGJsb2NrZWQgJWRcbiIsCisJICAgICBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUsCisJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX25vZGUoYmU2NF90b19jcHUobG9jay0+bWwuY29va2llKSksCisJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSwKKwkgICAgIGJsb2NrZWRfdHlwZSk7CisKIAkoKmZuKShsb2NrLT5hc3RkYXRhLCBibG9ja2VkX3R5cGUpOwogfQogCkBAIC0zMzIsNyArMzU2LDggQEAKIAkvKiBjYW5ub3QgZ2V0IGEgcHJveHkgYXN0IG1lc3NhZ2UgaWYgdGhpcyBub2RlIG93bnMgaXQgKi8KIAlCVUdfT04ocmVzLT5vd25lciA9PSBkbG0tPm5vZGVfbnVtKTsKIAotCW1sb2coMCwgImxvY2tyZXMgJS4qc1xuIiwgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSk7CisJbWxvZygwLCAiJXM6IHJlcyAlLipzXG4iLCBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLAorCSAgICAgcmVzLT5sb2NrbmFtZS5uYW1lKTsKIAogCXNwaW5fbG9jaygmcmVzLT5zcGlubG9jayk7CiAJaWYgKHJlcy0+c3RhdGUgJiBETE1fTE9DS19SRVNfUkVDT1ZFUklORykgewpAQCAtMzgyLDggKzQwNywxMiBAQAogCWlmIChwYXN0LT50eXBlID09IERMTV9BU1QpIHsKIAkJLyogZG8gbm90IGFsdGVyIGxvY2sgcmVmY291bnQuICBzd2l0Y2hpbmcgbGlzdHMuICovCiAJCWxpc3RfbW92ZV90YWlsKCZsb2NrLT5saXN0LCAmcmVzLT5ncmFudGVkKTsKLQkJbWxvZygwLCAiYXN0OiBBZGRpbmcgdG8gZ3JhbnRlZCBsaXN0Li4uIHR5cGU9JWQsICIKLQkJICAgICAiY29udmVydF90eXBlPSVkXG4iLCBsb2NrLT5tbC50eXBlLCBsb2NrLT5tbC5jb252ZXJ0X3R5cGUpOworCQltbG9nKDAsICIlczogcmVzICUuKnMsIGxvY2sgJXU6JWxsdSwgR3JhbnRlZCB0eXBlICVkID0+ICVkXG4iLAorCQkgICAgIGRsbS0+bmFtZSwgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSwKKwkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX25vZGUoYmU2NF90b19jcHUoY29va2llKSksCisJCSAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9zZXEoYmU2NF90b19jcHUoY29va2llKSksCisJCSAgICAgbG9jay0+bWwudHlwZSwgbG9jay0+bWwuY29udmVydF90eXBlKTsKKwogCQlpZiAobG9jay0+bWwuY29udmVydF90eXBlICE9IExLTV9JVk1PREUpIHsKIAkJCWxvY2stPm1sLnR5cGUgPSBsb2NrLT5tbC5jb252ZXJ0X3R5cGU7CiAJCQlsb2NrLT5tbC5jb252ZXJ0X3R5cGUgPSBMS01fSVZNT0RFOwpAQCAtNDI2LDkgKzQ1NSw5IEBACiAJc2l6ZV90IHZlY2xlbiA9IDE7CiAJaW50IHN0YXR1czsKIAotCW1sb2dfZW50cnkoInJlcyAlLipzLCB0bz0ldSwgdHlwZT0lZCwgYmxvY2tlZF90eXBlPSVkXG4iLAotCQkgICByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLCBsb2NrLT5tbC5ub2RlLAotCQkgICBtc2dfdHlwZSwgYmxvY2tlZF90eXBlKTsKKwltbG9nKDAsICIlczogcmVzICUuKnMsIHRvICV1LCB0eXBlICVkLCBibG9ja2VkX3R5cGUgJWRcbiIsIGRsbS0+bmFtZSwKKwkgICAgIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUsIGxvY2stPm1sLm5vZGUsIG1zZ190eXBlLAorCSAgICAgYmxvY2tlZF90eXBlKTsKIAogCW1lbXNldCgmcGFzdCwgMCwgc2l6ZW9mKHN0cnVjdCBkbG1fcHJveHlfYXN0KSk7CiAJcGFzdC5ub2RlX2lkeCA9IGRsbS0+bm9kZV9udW07CkBAIC00NDEsNyArNDcwLDYgQEAKIAl2ZWNbMF0uaW92X2xlbiA9IHNpemVvZihzdHJ1Y3QgZGxtX3Byb3h5X2FzdCk7CiAJdmVjWzBdLmlvdl9iYXNlID0gJnBhc3Q7CiAJaWYgKGZsYWdzICYgRExNX0xLU0JfR0VUX0xWQikgewotCQltbG9nKDAsICJyZXR1cm5pbmcgcmVxdWVzdGVkIExWQiBkYXRhXG4iKTsKIAkJYmUzMl9hZGRfY3B1KCZwYXN0LmZsYWdzLCBMS01fR0VUX0xWQik7CiAJCXZlY1sxXS5pb3ZfbGVuID0gRExNX0xWQl9MRU47CiAJCXZlY1sxXS5pb3ZfYmFzZSA9IGxvY2stPmxrc2ItPmx2YjsKQEAgLTQ1MSw4ICs0NzksOCBAQAogCXJldCA9IG8ybmV0X3NlbmRfbWVzc2FnZV92ZWMoRExNX1BST1hZX0FTVF9NU0csIGRsbS0+a2V5LCB2ZWMsIHZlY2xlbiwKIAkJCQkgICAgIGxvY2stPm1sLm5vZGUsICZzdGF0dXMpOwogCWlmIChyZXQgPCAwKQotCQltbG9nKE1MX0VSUk9SLCAiRXJyb3IgJWQgd2hlbiBzZW5kaW5nIG1lc3NhZ2UgJXUgKGtleSAweCV4KSB0byAiCi0JCSAgICAgIm5vZGUgJXVcbiIsIHJldCwgRExNX1BST1hZX0FTVF9NU0csIGRsbS0+a2V5LAorCQltbG9nKE1MX0VSUk9SLCAiJXM6IHJlcyAlLipzLCBlcnJvciAlZCBzZW5kIEFTVCB0byBub2RlICV1XG4iLAorCQkgICAgIGRsbS0+bmFtZSwgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSwgcmV0LAogCQkgICAgIGxvY2stPm1sLm5vZGUpOwogCWVsc2UgewogCQlpZiAoc3RhdHVzID09IERMTV9SRUNPVkVSSU5HKSB7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtY29tbW9uLmggYi9mcy9vY2ZzMi9kbG0vZGxtY29tbW9uLmgKaW5kZXggYjM2ZDBiZi4uNGJkZjdiYSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWNvbW1vbi5oCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1jb21tb24uaApAQCAtNTAsMTAgKzUwLDEwIEBACiAjZGVmaW5lIGRsbV9sb2NraWRfaGFzaChfbiwgX2wpIGZ1bGxfbmFtZV9oYXNoKF9uLCBfbCkKIAogZW51bSBkbG1fbWxlX3R5cGUgewotCURMTV9NTEVfQkxPQ0ssCi0JRExNX01MRV9NQVNURVIsCi0JRExNX01MRV9NSUdSQVRJT04sCi0JRExNX01MRV9OVU1fVFlQRVMKKwlETE1fTUxFX0JMT0NLID0gMCwKKwlETE1fTUxFX01BU1RFUiA9IDEsCisJRExNX01MRV9NSUdSQVRJT04gPSAyLAorCURMTV9NTEVfTlVNX1RZUEVTID0gMywKIH07CiAKIHN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgewpAQCAtODIsOCArODIsOCBAQAogCiBlbnVtIGRsbV9hc3RfdHlwZSB7CiAJRExNX0FTVCA9IDAsCi0JRExNX0JBU1QsCi0JRExNX0FTVFVOTE9DSworCURMTV9CQVNUID0gMSwKKwlETE1fQVNUVU5MT0NLID0gMiwKIH07CiAKIApAQCAtMTE5LDkgKzExOSw5IEBACiAKIGVudW0gZGxtX2N0eHRfc3RhdGUgewogCURMTV9DVFhUX05FVyA9IDAsCi0JRExNX0NUWFRfSk9JTkVELAotCURMTV9DVFhUX0lOX1NIVVRET1dOLAotCURMTV9DVFhUX0xFQVZJTkcsCisJRExNX0NUWFRfSk9JTkVEID0gMSwKKwlETE1fQ1RYVF9JTl9TSFVURE9XTiA9IDIsCisJRExNX0NUWFRfTEVBVklORyA9IDMsCiB9OwogCiBzdHJ1Y3QgZGxtX2N0eHQKQEAgLTM4OCw4ICszODgsOCBAQAogCiBlbnVtIGRsbV9sb2NrcmVzX2xpc3QgewogCURMTV9HUkFOVEVEX0xJU1QgPSAwLAotCURMTV9DT05WRVJUSU5HX0xJU1QsCi0JRExNX0JMT0NLRURfTElTVAorCURMTV9DT05WRVJUSU5HX0xJU1QgPSAxLAorCURMTV9CTE9DS0VEX0xJU1QgPSAyLAogfTsKIAogc3RhdGljIGlubGluZSBpbnQgZGxtX2x2Yl9pc19lbXB0eShjaGFyICpsdmIpCkBAIC00MjcsMjcgKzQyNywyNyBAQAogCiAKIGVudW0gewotCURMTV9NQVNURVJfUkVRVUVTVF9NU0cgICAgPSA1MDAsCi0JRExNX1VOVVNFRF9NU0cxLCAgICAgICAgIC8qIDUwMSAqLwotCURMTV9BU1NFUlRfTUFTVEVSX01TRywJIC8qIDUwMiAqLwotCURMTV9DUkVBVEVfTE9DS19NU0csCSAvKiA1MDMgKi8KLQlETE1fQ09OVkVSVF9MT0NLX01TRywJIC8qIDUwNCAqLwotCURMTV9QUk9YWV9BU1RfTVNHLAkgLyogNTA1ICovCi0JRExNX1VOTE9DS19MT0NLX01TRywJIC8qIDUwNiAqLwotCURMTV9ERVJFRl9MT0NLUkVTX01TRywJIC8qIDUwNyAqLwotCURMTV9NSUdSQVRFX1JFUVVFU1RfTVNHLCAvKiA1MDggKi8KLQlETE1fTUlHX0xPQ0tSRVNfTVNHLCAJIC8qIDUwOSAqLwotCURMTV9RVUVSWV9KT0lOX01TRywJIC8qIDUxMCAqLwotCURMTV9BU1NFUlRfSk9JTkVEX01TRywJIC8qIDUxMSAqLwotCURMTV9DQU5DRUxfSk9JTl9NU0csCSAvKiA1MTIgKi8KLQlETE1fRVhJVF9ET01BSU5fTVNHLAkgLyogNTEzICovCi0JRExNX01BU1RFUl9SRVFVRVJZX01TRywJIC8qIDUxNCAqLwotCURMTV9MT0NLX1JFUVVFU1RfTVNHLAkgLyogNTE1ICovCi0JRExNX1JFQ09fREFUQV9ET05FX01TRywJIC8qIDUxNiAqLwotCURMTV9CRUdJTl9SRUNPX01TRywJIC8qIDUxNyAqLwotCURMTV9GSU5BTElaRV9SRUNPX01TRywJIC8qIDUxOCAqLwotCURMTV9RVUVSWV9SRUdJT04sCSAvKiA1MTkgKi8KLQlETE1fUVVFUllfTk9ERUlORk8sCSAvKiA1MjAgKi8KKwlETE1fTUFTVEVSX1JFUVVFU1RfTVNHCQk9IDUwMCwKKwlETE1fVU5VU0VEX01TRzEJCQk9IDUwMSwKKwlETE1fQVNTRVJUX01BU1RFUl9NU0cJCT0gNTAyLAorCURMTV9DUkVBVEVfTE9DS19NU0cJCT0gNTAzLAorCURMTV9DT05WRVJUX0xPQ0tfTVNHCQk9IDUwNCwKKwlETE1fUFJPWFlfQVNUX01TRwkJPSA1MDUsCisJRExNX1VOTE9DS19MT0NLX01TRwkJPSA1MDYsCisJRExNX0RFUkVGX0xPQ0tSRVNfTVNHCQk9IDUwNywKKwlETE1fTUlHUkFURV9SRVFVRVNUX01TRwkJPSA1MDgsCisJRExNX01JR19MT0NLUkVTX01TRwkJPSA1MDksCisJRExNX1FVRVJZX0pPSU5fTVNHCQk9IDUxMCwKKwlETE1fQVNTRVJUX0pPSU5FRF9NU0cJCT0gNTExLAorCURMTV9DQU5DRUxfSk9JTl9NU0cJCT0gNTEyLAorCURMTV9FWElUX0RPTUFJTl9NU0cJCT0gNTEzLAorCURMTV9NQVNURVJfUkVRVUVSWV9NU0cJCT0gNTE0LAorCURMTV9MT0NLX1JFUVVFU1RfTVNHCQk9IDUxNSwKKwlETE1fUkVDT19EQVRBX0RPTkVfTVNHCQk9IDUxNiwKKwlETE1fQkVHSU5fUkVDT19NU0cJCT0gNTE3LAorCURMTV9GSU5BTElaRV9SRUNPX01TRwkJPSA1MTgsCisJRExNX1FVRVJZX1JFR0lPTgkJPSA1MTksCisJRExNX1FVRVJZX05PREVJTkZPCQk9IDUyMCwKIH07CiAKIHN0cnVjdCBkbG1fcmVjb19ub2RlX2RhdGEKQEAgLTQ2MCwxOSArNDYwLDE5IEBACiBlbnVtIHsKIAlETE1fUkVDT19OT0RFX0RBVEFfREVBRCA9IC0xLAogCURMTV9SRUNPX05PREVfREFUQV9JTklUID0gMCwKLQlETE1fUkVDT19OT0RFX0RBVEFfUkVRVUVTVElORywKLQlETE1fUkVDT19OT0RFX0RBVEFfUkVRVUVTVEVELAotCURMTV9SRUNPX05PREVfREFUQV9SRUNFSVZJTkcsCi0JRExNX1JFQ09fTk9ERV9EQVRBX0RPTkUsCi0JRExNX1JFQ09fTk9ERV9EQVRBX0ZJTkFMSVpFX1NFTlQsCisJRExNX1JFQ09fTk9ERV9EQVRBX1JFUVVFU1RJTkcgPSAxLAorCURMTV9SRUNPX05PREVfREFUQV9SRVFVRVNURUQgPSAyLAorCURMTV9SRUNPX05PREVfREFUQV9SRUNFSVZJTkcgPSAzLAorCURMTV9SRUNPX05PREVfREFUQV9ET05FID0gNCwKKwlETE1fUkVDT19OT0RFX0RBVEFfRklOQUxJWkVfU0VOVCA9IDUsCiB9OwogCiAKIGVudW0gewogCURMTV9NQVNURVJfUkVTUF9OTyA9IDAsCi0JRExNX01BU1RFUl9SRVNQX1lFUywKLQlETE1fTUFTVEVSX1JFU1BfTUFZQkUsCi0JRExNX01BU1RFUl9SRVNQX0VSUk9SCisJRExNX01BU1RFUl9SRVNQX1lFUyA9IDEsCisJRExNX01BU1RFUl9SRVNQX01BWUJFID0gMiwKKwlETE1fTUFTVEVSX1JFU1BfRVJST1IgPSAzLAogfTsKIAogCkBAIC02NDksOSArNjQ5LDkgQEAKICNkZWZpbmUgRExNX01PRF9LRVkgKDB4NjY2YzYxNzIpCiBlbnVtIGRsbV9xdWVyeV9qb2luX3Jlc3BvbnNlX2NvZGUgewogCUpPSU5fRElTQUxMT1cgPSAwLAotCUpPSU5fT0ssCi0JSk9JTl9PS19OT19NQVAsCi0JSk9JTl9QUk9UT0NPTF9NSVNNQVRDSCwKKwlKT0lOX09LID0gMSwKKwlKT0lOX09LX05PX01BUCA9IDIsCisJSk9JTl9QUk9UT0NPTF9NSVNNQVRDSCA9IDMsCiB9OwogCiBzdHJ1Y3QgZGxtX3F1ZXJ5X2pvaW5fcGFja2V0IHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKaW5kZXggMjcyZWM4Ni4uMDRhMzJiZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKQEAgLTM3MCw5MiArMzcwLDQ2IEBACiAJa3JlZl9nZXQoJmRjLT5kZWJ1Z19yZWZjbnQpOwogfQogCi1zdGF0aWMgc3RydWN0IGRlYnVnX2J1ZmZlciAqZGVidWdfYnVmZmVyX2FsbG9jYXRlKHZvaWQpCitzdGF0aWMgaW50IGRlYnVnX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGRlYnVnX2J1ZmZlciAqZGIgPSBOVUxMOwotCi0JZGIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGVidWdfYnVmZmVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYikKLQkJZ290byBiYWlsOwotCi0JZGItPmxlbiA9IFBBR0VfU0laRTsKLQlkYi0+YnVmID0ga21hbGxvYyhkYi0+bGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRiLT5idWYpCi0JCWdvdG8gYmFpbDsKLQotCXJldHVybiBkYjsKLWJhaWw6Ci0Ja2ZyZWUoZGIpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3NpemVfdCBkZWJ1Z19idWZmZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQkgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBkZWJ1Z19idWZmZXIgKmRiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBkYi0+YnVmLCBkYi0+bGVuKTsKLX0KLQotc3RhdGljIGxvZmZfdCBkZWJ1Z19idWZmZXJfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2ZmLCBpbnQgd2hlbmNlKQotewotCXN0cnVjdCBkZWJ1Z19idWZmZXIgKmRiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWxvZmZfdCBuZXcgPSAtMTsKLQotCXN3aXRjaCAod2hlbmNlKSB7Ci0JY2FzZSAwOgotCQluZXcgPSBvZmY7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJbmV3ID0gZmlsZS0+Zl9wb3MgKyBvZmY7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChuZXcgPCAwIHx8IG5ldyA+IGRiLT5sZW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIChmaWxlLT5mX3BvcyA9IG5ldyk7Ci19Ci0KLXN0YXRpYyBpbnQgZGVidWdfYnVmZmVyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGRlYnVnX2J1ZmZlciAqZGIgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlpZiAoZGIpCi0JCWtmcmVlKGRiLT5idWYpOwotCWtmcmVlKGRiKTsKLQorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylmaWxlLT5wcml2YXRlX2RhdGEpOwogCXJldHVybiAwOwogfQorCitzdGF0aWMgc3NpemVfdCBkZWJ1Z19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBmaWxlLT5wcml2YXRlX2RhdGEsCisJCQkJICAgICAgIGlfc2l6ZV9yZWFkKGZpbGUtPmZfbWFwcGluZy0+aG9zdCkpOworfQogLyogZW5kIC0gdXRpbCBmdW5jcyAqLwogCiAvKiBiZWdpbiAtIHB1cmdlIGxpc3QgZnVuY3MgKi8KLXN0YXRpYyBpbnQgZGVidWdfcHVyZ2VsaXN0X3ByaW50KHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBzdHJ1Y3QgZGVidWdfYnVmZmVyICpkYikKK3N0YXRpYyBpbnQgZGVidWdfcHVyZ2VsaXN0X3ByaW50KHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBjaGFyICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXM7CiAJaW50IG91dCA9IDA7CiAJdW5zaWduZWQgbG9uZyB0b3RhbCA9IDA7CiAKLQlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCiAJCQkiRHVtcGluZyBQdXJnZWxpc3QgZm9yIERvbWFpbjogJXNcbiIsIGRsbS0+bmFtZSk7CiAKIAlzcGluX2xvY2soJmRsbS0+c3BpbmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocmVzLCAmZGxtLT5wdXJnZV9saXN0LCBwdXJnZSkgewogCQkrK3RvdGFsOwotCQlpZiAoZGItPmxlbiAtIG91dCA8IDEwMCkKKwkJaWYgKGxlbiAtIG91dCA8IDEwMCkKIAkJCWNvbnRpbnVlOwogCQlzcGluX2xvY2soJnJlcy0+c3BpbmxvY2spOwogCQlvdXQgKz0gc3RyaW5naWZ5X2xvY2tuYW1lKHJlcy0+bG9ja25hbWUubmFtZSwKIAkJCQkJICByZXMtPmxvY2tuYW1lLmxlbiwKLQkJCQkJICBkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0KTsKLQkJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsICJcdCVsZFxuIiwKKwkJCQkJICBidWYgKyBvdXQsIGxlbiAtIG91dCk7CisJCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwgIlx0JWxkXG4iLAogCQkJCShqaWZmaWVzIC0gcmVzLT5sYXN0X3VzZWQpL0haKTsKIAkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwogCX0KIAlzcGluX3VubG9jaygmZGxtLT5zcGlubG9jayk7CiAKLQlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKLQkJCSJUb3RhbCBvbiBsaXN0OiAlbGRcbiIsIHRvdGFsKTsKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICJUb3RhbCBvbiBsaXN0OiAlbGRcbiIsIHRvdGFsKTsKIAogCXJldHVybiBvdXQ7CiB9CkBAIC00NjMsMTUgKzQxNywxNSBAQAogc3RhdGljIGludCBkZWJ1Z19wdXJnZWxpc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgZGxtX2N0eHQgKmRsbSA9IGlub2RlLT5pX3ByaXZhdGU7Ci0Jc3RydWN0IGRlYnVnX2J1ZmZlciAqZGI7CisJY2hhciAqYnVmID0gTlVMTDsKIAotCWRiID0gZGVidWdfYnVmZmVyX2FsbG9jYXRlKCk7Ci0JaWYgKCFkYikKKwlidWYgPSAoY2hhciAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX05PRlMpOworCWlmICghYnVmKQogCQlnb3RvIGJhaWw7CiAKLQlkYi0+bGVuID0gZGVidWdfcHVyZ2VsaXN0X3ByaW50KGRsbSwgZGIpOworCWlfc2l6ZV93cml0ZShpbm9kZSwgZGVidWdfcHVyZ2VsaXN0X3ByaW50KGRsbSwgYnVmLCBQQUdFX1NJWkUgLSAxKSk7CiAKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBkYjsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBidWY7CiAKIAlyZXR1cm4gMDsKIGJhaWw6CkBAIC00ODAsMTQgKzQzNCwxNCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19wdXJnZWxpc3RfZm9wcyA9IHsKIAkub3BlbiA9CQlkZWJ1Z19wdXJnZWxpc3Rfb3BlbiwKLQkucmVsZWFzZSA9CWRlYnVnX2J1ZmZlcl9yZWxlYXNlLAotCS5yZWFkID0JCWRlYnVnX2J1ZmZlcl9yZWFkLAotCS5sbHNlZWsgPQlkZWJ1Z19idWZmZXJfbGxzZWVrLAorCS5yZWxlYXNlID0JZGVidWdfcmVsZWFzZSwKKwkucmVhZCA9CQlkZWJ1Z19yZWFkLAorCS5sbHNlZWsgPQlnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIC8qIGVuZCAtIHB1cmdlIGxpc3QgZnVuY3MgKi8KIAogLyogYmVnaW4gLSBkZWJ1ZyBtbGUgZnVuY3MgKi8KLXN0YXRpYyBpbnQgZGVidWdfbWxlX3ByaW50KHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBzdHJ1Y3QgZGVidWdfYnVmZmVyICpkYikKK3N0YXRpYyBpbnQgZGVidWdfbWxlX3ByaW50KHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBjaGFyICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlOwogCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CkBAIC00OTUsNyArNDQ5LDcgQEAKIAlpbnQgaSwgb3V0ID0gMDsKIAl1bnNpZ25lZCBsb25nIHRvdGFsID0gMCwgbG9uZ2VzdCA9IDAsIGJ1Y2tldF9jb3VudCA9IDA7CiAKLQlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCiAJCQkiRHVtcGluZyBNTEVzIGZvciBEb21haW46ICVzXG4iLCBkbG0tPm5hbWUpOwogCiAJc3Bpbl9sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKQEAgLTUwNiwxNiArNDYwLDE2IEBACiAJCQkJCSAgbWFzdGVyX2hhc2hfbm9kZSk7CiAJCQkrK3RvdGFsOwogCQkJKytidWNrZXRfY291bnQ7Ci0JCQlpZiAoZGItPmxlbiAtIG91dCA8IDIwMCkKKwkJCWlmIChsZW4gLSBvdXQgPCAyMDApCiAJCQkJY29udGludWU7Ci0JCQlvdXQgKz0gZHVtcF9tbGUobWxlLCBkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0KTsKKwkJCW91dCArPSBkdW1wX21sZShtbGUsIGJ1ZiArIG91dCwgbGVuIC0gb3V0KTsKIAkJfQogCQlsb25nZXN0ID0gbWF4KGxvbmdlc3QsIGJ1Y2tldF9jb3VudCk7CiAJCWJ1Y2tldF9jb3VudCA9IDA7CiAJfQogCXNwaW5fdW5sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKIAotCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKIAkJCSJUb3RhbDogJWxkLCBMb25nZXN0OiAlbGRcbiIsIHRvdGFsLCBsb25nZXN0KTsKIAlyZXR1cm4gb3V0OwogfQpAQCAtNTIzLDE1ICs0NzcsMTUgQEAKIHN0YXRpYyBpbnQgZGVidWdfbWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGRsbV9jdHh0ICpkbG0gPSBpbm9kZS0+aV9wcml2YXRlOwotCXN0cnVjdCBkZWJ1Z19idWZmZXIgKmRiOworCWNoYXIgKmJ1ZiA9IE5VTEw7CiAKLQlkYiA9IGRlYnVnX2J1ZmZlcl9hbGxvY2F0ZSgpOwotCWlmICghZGIpCisJYnVmID0gKGNoYXIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9OT0ZTKTsKKwlpZiAoIWJ1ZikKIAkJZ290byBiYWlsOwogCi0JZGItPmxlbiA9IGRlYnVnX21sZV9wcmludChkbG0sIGRiKTsKKwlpX3NpemVfd3JpdGUoaW5vZGUsIGRlYnVnX21sZV9wcmludChkbG0sIGJ1ZiwgUEFHRV9TSVpFIC0gMSkpOwogCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGI7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gYnVmOwogCiAJcmV0dXJuIDA7CiBiYWlsOgpAQCAtNTQwLDkgKzQ5NCw5IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX21sZV9mb3BzID0gewogCS5vcGVuID0JCWRlYnVnX21sZV9vcGVuLAotCS5yZWxlYXNlID0JZGVidWdfYnVmZmVyX3JlbGVhc2UsCi0JLnJlYWQgPQkJZGVidWdfYnVmZmVyX3JlYWQsCi0JLmxsc2VlayA9CWRlYnVnX2J1ZmZlcl9sbHNlZWssCisJLnJlbGVhc2UgPQlkZWJ1Z19yZWxlYXNlLAorCS5yZWFkID0JCWRlYnVnX3JlYWQsCisJLmxsc2VlayA9CWdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiAvKiBlbmQgLSBkZWJ1ZyBtbGUgZnVuY3MgKi8KQEAgLTc1Nyw3ICs3MTEsNyBAQAogLyogZW5kIC0gZGVidWcgbG9ja3JlcyBmdW5jcyAqLwogCiAvKiBiZWdpbiAtIGRlYnVnIHN0YXRlIGZ1bmNzICovCi1zdGF0aWMgaW50IGRlYnVnX3N0YXRlX3ByaW50KHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBzdHJ1Y3QgZGVidWdfYnVmZmVyICpkYikKK3N0YXRpYyBpbnQgZGVidWdfc3RhdGVfcHJpbnQoc3RydWN0IGRsbV9jdHh0ICpkbG0sIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgb3V0ID0gMDsKIAlzdHJ1Y3QgZGxtX3JlY29fbm9kZV9kYXRhICpub2RlOwpAQCAtNzgxLDM1ICs3MzUsMzUgQEAKIAl9CiAKIAkvKiBEb21haW46IHh4eHh4eHh4eHggIEtleTogMHhkZmJhYzc2OSAqLwotCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKIAkJCSJEb21haW46ICVzICBLZXk6IDB4JTA4eCAgUHJvdG9jb2w6ICVkLiVkXG4iLAogCQkJZGxtLT5uYW1lLCBkbG0tPmtleSwgZGxtLT5kbG1fbG9ja2luZ19wcm90by5wdl9tYWpvciwKIAkJCWRsbS0+ZGxtX2xvY2tpbmdfcHJvdG8ucHZfbWlub3IpOwogCiAJLyogVGhyZWFkIFBpZDogeHh4ICBOb2RlOiB4eHggIFN0YXRlOiB4eHh4eCAqLwotCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKIAkJCSJUaHJlYWQgUGlkOiAlZCAgTm9kZTogJWQgIFN0YXRlOiAlc1xuIiwKLQkJCWRsbS0+ZGxtX3RocmVhZF90YXNrLT5waWQsIGRsbS0+bm9kZV9udW0sIHN0YXRlKTsKKwkJCXRhc2tfcGlkX25yKGRsbS0+ZGxtX3RocmVhZF90YXNrKSwgZGxtLT5ub2RlX251bSwgc3RhdGUpOwogCiAJLyogTnVtYmVyIG9mIEpvaW5zOiB4eHggIEpvaW5pbmcgTm9kZTogeHh4ICovCi0Jb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAogCQkJIk51bWJlciBvZiBKb2luczogJWQgIEpvaW5pbmcgTm9kZTogJWRcbiIsCiAJCQlkbG0tPm51bV9qb2lucywgZGxtLT5qb2luaW5nX25vZGUpOwogCiAJLyogRG9tYWluIE1hcDogeHggeHggeHggKi8KLQlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwgIkRvbWFpbiBNYXA6ICIpOworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwgIkRvbWFpbiBNYXA6ICIpOwogCW91dCArPSBzdHJpbmdpZnlfbm9kZW1hcChkbG0tPmRvbWFpbl9tYXAsIE8yTk1fTUFYX05PREVTLAotCQkJCSBkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0KTsKLQlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwgIlxuIik7CisJCQkJIGJ1ZiArIG91dCwgbGVuIC0gb3V0KTsKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICJcbiIpOwogCiAJLyogTGl2ZSBNYXA6IHh4IHh4IHh4ICovCi0Jb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsICJMaXZlIE1hcDogIik7CisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiTGl2ZSBNYXA6ICIpOwogCW91dCArPSBzdHJpbmdpZnlfbm9kZW1hcChkbG0tPmxpdmVfbm9kZXNfbWFwLCBPMk5NX01BWF9OT0RFUywKLQkJCQkgZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCk7Ci0Jb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsICJcbiIpOworCQkJCSBidWYgKyBvdXQsIGxlbiAtIG91dCk7CisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiXG4iKTsKIAogCS8qIExvY2sgUmVzb3VyY2VzOiB4eHggKHh4eCkgKi8KLQlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCiAJCQkiTG9jayBSZXNvdXJjZXM6ICVkICglZClcbiIsCiAJCQlhdG9taWNfcmVhZCgmZGxtLT5yZXNfY3VyX2NvdW50KSwKIAkJCWF0b21pY19yZWFkKCZkbG0tPnJlc190b3RfY291bnQpKTsKQEAgLTgyMSwyOSArNzc1LDI5IEBACiAJCWN1cl9tbGVzICs9IGF0b21pY19yZWFkKCZkbG0tPm1sZV9jdXJfY291bnRbaV0pOwogCiAJLyogTUxFczogeHh4ICh4eHgpICovCi0Jb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAogCQkJIk1MRXM6ICVkICglZClcbiIsIGN1cl9tbGVzLCB0b3RfbWxlcyk7CiAKIAkvKiAgQmxvY2tpbmc6IHh4eCAoeHh4KSAqLwotCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKIAkJCSIgIEJsb2NraW5nOiAlZCAoJWQpXG4iLAogCQkJYXRvbWljX3JlYWQoJmRsbS0+bWxlX2N1cl9jb3VudFtETE1fTUxFX0JMT0NLXSksCiAJCQlhdG9taWNfcmVhZCgmZGxtLT5tbGVfdG90X2NvdW50W0RMTV9NTEVfQkxPQ0tdKSk7CiAKIAkvKiAgTWFzdGVyeTogeHh4ICh4eHgpICovCi0Jb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAogCQkJIiAgTWFzdGVyeTogJWQgKCVkKVxuIiwKIAkJCWF0b21pY19yZWFkKCZkbG0tPm1sZV9jdXJfY291bnRbRExNX01MRV9NQVNURVJdKSwKIAkJCWF0b21pY19yZWFkKCZkbG0tPm1sZV90b3RfY291bnRbRExNX01MRV9NQVNURVJdKSk7CiAKIAkvKiAgTWlncmF0aW9uOiB4eHggKHh4eCkgKi8KLQlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCiAJCQkiICBNaWdyYXRpb246ICVkICglZClcbiIsCiAJCQlhdG9taWNfcmVhZCgmZGxtLT5tbGVfY3VyX2NvdW50W0RMTV9NTEVfTUlHUkFUSU9OXSksCiAJCQlhdG9taWNfcmVhZCgmZGxtLT5tbGVfdG90X2NvdW50W0RMTV9NTEVfTUlHUkFUSU9OXSkpOwogCiAJLyogTGlzdHM6IERpcnR5PUVtcHR5ICBQdXJnZT1JblVzZSAgUGVuZGluZ0FTVHM9RW1wdHkgIC4uLiAqLwotCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKIAkJCSJMaXN0czogRGlydHk9JXMgIFB1cmdlPSVzICBQZW5kaW5nQVNUcz0lcyAgIgogCQkJIlBlbmRpbmdCQVNUcz0lc1xuIiwKIAkJCShsaXN0X2VtcHR5KCZkbG0tPmRpcnR5X2xpc3QpID8gIkVtcHR5IiA6ICJJblVzZSIpLApAQCAtODUyLDEyICs4MDYsMTIgQEAKIAkJCShsaXN0X2VtcHR5KCZkbG0tPnBlbmRpbmdfYmFzdHMpID8gIkVtcHR5IiA6ICJJblVzZSIpKTsKIAogCS8qIFB1cmdlIENvdW50OiB4eHggIFJlZnM6IHh4eCAqLwotCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKIAkJCSJQdXJnZSBDb3VudDogJWQgIFJlZnM6ICVkXG4iLCBkbG0tPnB1cmdlX2NvdW50LAogCQkJYXRvbWljX3JlYWQoJmRsbS0+ZGxtX3JlZnMucmVmY291bnQpKTsKIAogCS8qIERlYWQgTm9kZTogeHh4ICovCi0Jb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAogCQkJIkRlYWQgTm9kZTogJWRcbiIsIGRsbS0+cmVjby5kZWFkX25vZGUpOwogCiAJLyogV2hhdCBhYm91dCBETE1fUkVDT19TVEFURV9GSU5BTElaRT8gKi8KQEAgLTg2NywxOSArODIxLDE5IEBACiAJCXN0YXRlID0gIklOQUNUSVZFIjsKIAogCS8qIFJlY292ZXJ5IFBpZDogeHh4eCAgTWFzdGVyOiB4eHggIFN0YXRlOiB4eHh4ICovCi0Jb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAogCQkJIlJlY292ZXJ5IFBpZDogJWQgIE1hc3RlcjogJWQgIFN0YXRlOiAlc1xuIiwKLQkJCWRsbS0+ZGxtX3JlY29fdGhyZWFkX3Rhc2stPnBpZCwKKwkJCXRhc2tfcGlkX25yKGRsbS0+ZGxtX3JlY29fdGhyZWFkX3Rhc2spLAogCQkJZGxtLT5yZWNvLm5ld19tYXN0ZXIsIHN0YXRlKTsKIAogCS8qIFJlY292ZXJ5IE1hcDogeHggeHggKi8KLQlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwgIlJlY292ZXJ5IE1hcDogIik7CisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiUmVjb3ZlcnkgTWFwOiAiKTsKIAlvdXQgKz0gc3RyaW5naWZ5X25vZGVtYXAoZGxtLT5yZWNvdmVyeV9tYXAsIE8yTk1fTUFYX05PREVTLAotCQkJCSBkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0KTsKLQlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwgIlxuIik7CisJCQkJIGJ1ZiArIG91dCwgbGVuIC0gb3V0KTsKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICJcbiIpOwogCiAJLyogUmVjb3ZlcnkgTm9kZSBTdGF0ZTogKi8KLQlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwgIlJlY292ZXJ5IE5vZGUgU3RhdGU6XG4iKTsKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICJSZWNvdmVyeSBOb2RlIFN0YXRlOlxuIik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmZGxtLT5yZWNvLm5vZGVfZGF0YSwgbGlzdCkgewogCQlzd2l0Y2ggKG5vZGUtPnN0YXRlKSB7CiAJCWNhc2UgRExNX1JFQ09fTk9ERV9EQVRBX0lOSVQ6CkBAIC05MDcsNyArODYxLDcgQEAKIAkJCXN0YXRlID0gIkJBRCI7CiAJCQlicmVhazsKIAkJfQotCQlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwgIlx0JXUgLSAlc1xuIiwKKwkJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiXHQldSAtICVzXG4iLAogCQkJCW5vZGUtPm5vZGVfbnVtLCBzdGF0ZSk7CiAJfQogCkBAIC05MTksMTUgKzg3MywxNSBAQAogc3RhdGljIGludCBkZWJ1Z19zdGF0ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBkbG1fY3R4dCAqZGxtID0gaW5vZGUtPmlfcHJpdmF0ZTsKLQlzdHJ1Y3QgZGVidWdfYnVmZmVyICpkYiA9IE5VTEw7CisJY2hhciAqYnVmID0gTlVMTDsKIAotCWRiID0gZGVidWdfYnVmZmVyX2FsbG9jYXRlKCk7Ci0JaWYgKCFkYikKKwlidWYgPSAoY2hhciAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX05PRlMpOworCWlmICghYnVmKQogCQlnb3RvIGJhaWw7CiAKLQlkYi0+bGVuID0gZGVidWdfc3RhdGVfcHJpbnQoZGxtLCBkYik7CisJaV9zaXplX3dyaXRlKGlub2RlLCBkZWJ1Z19zdGF0ZV9wcmludChkbG0sIGJ1ZiwgUEFHRV9TSVpFIC0gMSkpOwogCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGI7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gYnVmOwogCiAJcmV0dXJuIDA7CiBiYWlsOgpAQCAtOTM2LDkgKzg5MCw5IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX3N0YXRlX2ZvcHMgPSB7CiAJLm9wZW4gPQkJZGVidWdfc3RhdGVfb3BlbiwKLQkucmVsZWFzZSA9CWRlYnVnX2J1ZmZlcl9yZWxlYXNlLAotCS5yZWFkID0JCWRlYnVnX2J1ZmZlcl9yZWFkLAotCS5sbHNlZWsgPQlkZWJ1Z19idWZmZXJfbGxzZWVrLAorCS5yZWxlYXNlID0JZGVidWdfcmVsZWFzZSwKKwkucmVhZCA9CQlkZWJ1Z19yZWFkLAorCS5sbHNlZWsgPQlnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIC8qIGVuZCAgLSBkZWJ1ZyBzdGF0ZSBmdW5jcyAqLwogCkBAIC0xMDAyLDE0ICs5NTYsMTAgQEAKIAlzdHJ1Y3QgZGxtX2RlYnVnX2N0eHQgKmRjID0gZGxtLT5kbG1fZGVidWdfY3R4dDsKIAogCWlmIChkYykgewotCQlpZiAoZGMtPmRlYnVnX3B1cmdlbGlzdF9kZW50cnkpCi0JCQlkZWJ1Z2ZzX3JlbW92ZShkYy0+ZGVidWdfcHVyZ2VsaXN0X2RlbnRyeSk7Ci0JCWlmIChkYy0+ZGVidWdfbWxlX2RlbnRyeSkKLQkJCWRlYnVnZnNfcmVtb3ZlKGRjLT5kZWJ1Z19tbGVfZGVudHJ5KTsKLQkJaWYgKGRjLT5kZWJ1Z19sb2NrcmVzX2RlbnRyeSkKLQkJCWRlYnVnZnNfcmVtb3ZlKGRjLT5kZWJ1Z19sb2NrcmVzX2RlbnRyeSk7Ci0JCWlmIChkYy0+ZGVidWdfc3RhdGVfZGVudHJ5KQotCQkJZGVidWdmc19yZW1vdmUoZGMtPmRlYnVnX3N0YXRlX2RlbnRyeSk7CisJCWRlYnVnZnNfcmVtb3ZlKGRjLT5kZWJ1Z19wdXJnZWxpc3RfZGVudHJ5KTsKKwkJZGVidWdmc19yZW1vdmUoZGMtPmRlYnVnX21sZV9kZW50cnkpOworCQlkZWJ1Z2ZzX3JlbW92ZShkYy0+ZGVidWdfbG9ja3Jlc19kZW50cnkpOworCQlkZWJ1Z2ZzX3JlbW92ZShkYy0+ZGVidWdfc3RhdGVfZGVudHJ5KTsKIAkJZGxtX2RlYnVnX3B1dChkYyk7CiAJfQogfQpAQCAtMTA0MCw4ICs5OTAsNyBAQAogCiB2b2lkIGRsbV9kZXN0cm95X2RlYnVnZnNfc3Vicm9vdChzdHJ1Y3QgZGxtX2N0eHQgKmRsbSkKIHsKLQlpZiAoZGxtLT5kbG1fZGVidWdmc19zdWJyb290KQotCQlkZWJ1Z2ZzX3JlbW92ZShkbG0tPmRsbV9kZWJ1Z2ZzX3N1YnJvb3QpOworCWRlYnVnZnNfcmVtb3ZlKGRsbS0+ZGxtX2RlYnVnZnNfc3Vicm9vdCk7CiB9CiAKIC8qIGRlYnVnZnMgcm9vdCAqLwpAQCAtMTA1Nyw3ICsxMDA2LDYgQEAKIAogdm9pZCBkbG1fZGVzdHJveV9kZWJ1Z2ZzX3Jvb3Qodm9pZCkKIHsKLQlpZiAoZGxtX2RlYnVnZnNfcm9vdCkKLQkJZGVidWdmc19yZW1vdmUoZGxtX2RlYnVnZnNfcm9vdCk7CisJZGVidWdmc19yZW1vdmUoZGxtX2RlYnVnZnNfcm9vdCk7CiB9CiAjZW5kaWYJLyogQ09ORklHX0RFQlVHX0ZTICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuaCBiL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5oCmluZGV4IDhjNjg2ZDIuLjFmMjdjNDggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5oCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5oCkBAIC0zNywxMSArMzcsNiBAQAogCXN0cnVjdCBkZW50cnkgKmRlYnVnX3B1cmdlbGlzdF9kZW50cnk7CiB9OwogCi1zdHJ1Y3QgZGVidWdfYnVmZmVyIHsKLQlpbnQgbGVuOwotCWNoYXIgKmJ1ZjsKLX07Ci0KIHN0cnVjdCBkZWJ1Z19sb2NrcmVzIHsKIAlpbnQgZGxfbGVuOwogCWNoYXIgKmRsX2J1ZjsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYyBiL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYwppbmRleCBjYzJhYWE5Li43ZTM4YTA3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCkBAIC00NjAsOCArNDYwLDYgQEAKIAkJfQogCQljb25kX3Jlc2NoZWRfbG9jaygmZGxtLT5zcGlubG9jayk7CiAJCW51bSArPSBuOwotCQltbG9nKDAsICIlczogdG91Y2hlZCAlZCBsb2NrcmVzZXMgaW4gYnVja2V0ICVkICIKLQkJICAgICAiKHRvdD0lZClcbiIsIGRsbS0+bmFtZSwgbiwgaSwgbnVtKTsKIAl9CiAJc3Bpbl91bmxvY2soJmRsbS0+c3BpbmxvY2spOwogCXdha2VfdXAoJmRsbS0+ZGxtX3RocmVhZF93cSk7CkBAIC0xNjYxLDggKzE2NTksOCBAQAogCiBzdGF0aWMgdm9pZCBkbG1fdW5yZWdpc3Rlcl9kb21haW5faGFuZGxlcnMoc3RydWN0IGRsbV9jdHh0ICpkbG0pCiB7Ci0JbzJoYl91bnJlZ2lzdGVyX2NhbGxiYWNrKE5VTEwsICZkbG0tPmRsbV9oYl91cCk7Ci0JbzJoYl91bnJlZ2lzdGVyX2NhbGxiYWNrKE5VTEwsICZkbG0tPmRsbV9oYl9kb3duKTsKKwlvMmhiX3VucmVnaXN0ZXJfY2FsbGJhY2soZGxtLT5uYW1lLCAmZGxtLT5kbG1faGJfdXApOworCW8yaGJfdW5yZWdpc3Rlcl9jYWxsYmFjayhkbG0tPm5hbWUsICZkbG0tPmRsbV9oYl9kb3duKTsKIAlvMm5ldF91bnJlZ2lzdGVyX2hhbmRsZXJfbGlzdCgmZGxtLT5kbG1fZG9tYWluX2hhbmRsZXJzKTsKIH0KIApAQCAtMTY3NCwxMyArMTY3MiwxMyBAQAogCiAJbzJoYl9zZXR1cF9jYWxsYmFjaygmZGxtLT5kbG1faGJfZG93biwgTzJIQl9OT0RFX0RPV05fQ0IsCiAJCQkgICAgZGxtX2hiX25vZGVfZG93bl9jYiwgZGxtLCBETE1fSEJfTk9ERV9ET1dOX1BSSSk7Ci0Jc3RhdHVzID0gbzJoYl9yZWdpc3Rlcl9jYWxsYmFjayhOVUxMLCAmZGxtLT5kbG1faGJfZG93bik7CisJc3RhdHVzID0gbzJoYl9yZWdpc3Rlcl9jYWxsYmFjayhkbG0tPm5hbWUsICZkbG0tPmRsbV9oYl9kb3duKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIGJhaWw7CiAKIAlvMmhiX3NldHVwX2NhbGxiYWNrKCZkbG0tPmRsbV9oYl91cCwgTzJIQl9OT0RFX1VQX0NCLAogCQkJICAgIGRsbV9oYl9ub2RlX3VwX2NiLCBkbG0sIERMTV9IQl9OT0RFX1VQX1BSSSk7Ci0Jc3RhdHVzID0gbzJoYl9yZWdpc3Rlcl9jYWxsYmFjayhOVUxMLCAmZGxtLT5kbG1faGJfdXApOworCXN0YXR1cyA9IG8yaGJfcmVnaXN0ZXJfY2FsbGJhY2soZGxtLT5uYW1lLCAmZGxtLT5kbG1faGJfdXApOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gYmFpbDsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWxvY2suYyBiL2ZzL29jZnMyL2RsbS9kbG1sb2NrLmMKaW5kZXggNjljZjM2OS4uNzAwOTI5MiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWxvY2suYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtbG9jay5jCkBAIC0xMDYsNiArMTA2LDkgQEAKIAogCQlpZiAoIWRsbV9sb2NrX2NvbXBhdGlibGUodG1wbG9jay0+bWwudHlwZSwgbG9jay0+bWwudHlwZSkpCiAJCQlyZXR1cm4gMDsKKwkJaWYgKCFkbG1fbG9ja19jb21wYXRpYmxlKHRtcGxvY2stPm1sLmNvbnZlcnRfdHlwZSwKKwkJCQkJIGxvY2stPm1sLnR5cGUpKQorCQkJcmV0dXJuIDA7CiAJfQogCiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtdGhyZWFkLmMgYi9mcy9vY2ZzMi9kbG0vZGxtdGhyZWFkLmMKaW5kZXggMjIxMWFjZi4uMWQ2ZDFkMiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbXRocmVhZC5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG10aHJlYWQuYwpAQCAtMTIyLDE1ICsxMjIsMTMgQEAKIHZvaWQgX19kbG1fbG9ja3Jlc19jYWxjX3VzYWdlKHN0cnVjdCBkbG1fY3R4dCAqZGxtLAogCQkJICAgICAgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXMpCiB7Ci0JbWxvZ19lbnRyeSgiJS4qc1xuIiwgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSk7Ci0KIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRsbS0+c3BpbmxvY2spOwogCWFzc2VydF9zcGluX2xvY2tlZCgmcmVzLT5zcGlubG9jayk7CiAKIAlpZiAoX19kbG1fbG9ja3Jlc191bnVzZWQocmVzKSl7CiAJCWlmIChsaXN0X2VtcHR5KCZyZXMtPnB1cmdlKSkgewotCQkJbWxvZygwLCAicHV0dGluZyBsb2NrcmVzICUuKnM6JXAgb250byBwdXJnZSBsaXN0XG4iLAotCQkJICAgICByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLCByZXMpOworCQkJbWxvZygwLCAiJXM6IEFkZGluZyByZXMgJS4qcyB0byBwdXJnZSBsaXN0XG4iLAorCQkJICAgICBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUpOwogCiAJCQlyZXMtPmxhc3RfdXNlZCA9IGppZmZpZXM7CiAJCQlkbG1fbG9ja3Jlc19nZXQocmVzKTsKQEAgLTEzOCw4ICsxMzYsOCBAQAogCQkJZGxtLT5wdXJnZV9jb3VudCsrOwogCQl9CiAJfSBlbHNlIGlmICghbGlzdF9lbXB0eSgmcmVzLT5wdXJnZSkpIHsKLQkJbWxvZygwLCAicmVtb3ZpbmcgbG9ja3JlcyAlLipzOiVwIGZyb20gcHVyZ2UgbGlzdCwgb3duZXI9JXVcbiIsCi0JCSAgICAgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSwgcmVzLCByZXMtPm93bmVyKTsKKwkJbWxvZygwLCAiJXM6IFJlbW92aW5nIHJlcyAlLipzIGZyb20gcHVyZ2UgbGlzdFxuIiwKKwkJICAgICBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUpOwogCiAJCWxpc3RfZGVsX2luaXQoJnJlcy0+cHVyZ2UpOwogCQlkbG1fbG9ja3Jlc19wdXQocmVzKTsKQEAgLTE1MCw3ICsxNDgsNiBAQAogdm9pZCBkbG1fbG9ja3Jlc19jYWxjX3VzYWdlKHN0cnVjdCBkbG1fY3R4dCAqZGxtLAogCQkJICAgIHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzKQogewotCW1sb2dfZW50cnkoIiUuKnNcbiIsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUpOwogCXNwaW5fbG9jaygmZGxtLT5zcGlubG9jayk7CiAJc3Bpbl9sb2NrKCZyZXMtPnNwaW5sb2NrKTsKIApAQCAtMTcxLDkgKzE2OCw4IEBACiAKIAltYXN0ZXIgPSAocmVzLT5vd25lciA9PSBkbG0tPm5vZGVfbnVtKTsKIAotCi0JbWxvZygwLCAicHVyZ2luZyBsb2NrcmVzICUuKnMsIG1hc3RlciA9ICVkXG4iLCByZXMtPmxvY2tuYW1lLmxlbiwKLQkgICAgIHJlcy0+bG9ja25hbWUubmFtZSwgbWFzdGVyKTsKKwltbG9nKDAsICIlczogUHVyZ2luZyByZXMgJS4qcywgbWFzdGVyICVkXG4iLCBkbG0tPm5hbWUsCisJICAgICByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLCBtYXN0ZXIpOwogCiAJaWYgKCFtYXN0ZXIpIHsKIAkJcmVzLT5zdGF0ZSB8PSBETE1fTE9DS19SRVNfRFJPUFBJTkdfUkVGOwpAQCAtMTg5LDI3ICsxODUsMjUgQEAKIAkJLyogY2xlYXIgb3VyIGJpdCBmcm9tIHRoZSBtYXN0ZXIncyByZWZtYXAsIGlnbm9yZSBlcnJvcnMgKi8KIAkJcmV0ID0gZGxtX2Ryb3BfbG9ja3Jlc19yZWYoZGxtLCByZXMpOwogCQlpZiAocmV0IDwgMCkgewotCQkJbWxvZ19lcnJubyhyZXQpOworCQkJbWxvZyhNTF9FUlJPUiwgIiVzOiBkZXJlZiAlLipzIGZhaWxlZCAlZFxuIiwgZGxtLT5uYW1lLAorCQkJICAgICByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLCByZXQpOwogCQkJaWYgKCFkbG1faXNfaG9zdF9kb3duKHJldCkpCiAJCQkJQlVHKCk7CiAJCX0KLQkJbWxvZygwLCAiJXM6JS4qczogZGxtX2RlcmVmX2xvY2tyZXMgcmV0dXJuZWQgJWRcbiIsCi0JCSAgICAgZGxtLT5uYW1lLCByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLCByZXQpOwogCQlzcGluX2xvY2soJmRsbS0+c3BpbmxvY2spOwogCQlzcGluX2xvY2soJnJlcy0+c3BpbmxvY2spOwogCX0KIAogCWlmICghbGlzdF9lbXB0eSgmcmVzLT5wdXJnZSkpIHsKLQkJbWxvZygwLCAicmVtb3ZpbmcgbG9ja3JlcyAlLipzOiVwIGZyb20gcHVyZ2VsaXN0LCAiCi0JCSAgICAgIm1hc3RlciA9ICVkXG4iLCByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLAotCQkgICAgIHJlcywgbWFzdGVyKTsKKwkJbWxvZygwLCAiJXM6IFJlbW92aW5nIHJlcyAlLipzIGZyb20gcHVyZ2VsaXN0LCBtYXN0ZXIgJWRcbiIsCisJCSAgICAgZGxtLT5uYW1lLCByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLCBtYXN0ZXIpOwogCQlsaXN0X2RlbF9pbml0KCZyZXMtPnB1cmdlKTsKIAkJZGxtX2xvY2tyZXNfcHV0KHJlcyk7CiAJCWRsbS0+cHVyZ2VfY291bnQtLTsKIAl9CiAKIAlpZiAoIV9fZGxtX2xvY2tyZXNfdW51c2VkKHJlcykpIHsKLQkJbWxvZyhNTF9FUlJPUiwgImZvdW5kIGxvY2tyZXMgJXM6JS4qczogaW4gdXNlIGFmdGVyIGRlcmVmXG4iLAorCQltbG9nKE1MX0VSUk9SLCAiJXM6IHJlcyAlLipzIGluIHVzZSBhZnRlciBkZXJlZlxuIiwKIAkJICAgICBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUpOwogCQlfX2RsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShyZXMpOwogCQlCVUcoKTsKQEAgLTI2NiwxMCArMjYwLDEwIEBACiAJCXVudXNlZCA9IF9fZGxtX2xvY2tyZXNfdW51c2VkKGxvY2tyZXMpOwogCQlpZiAoIXVudXNlZCB8fAogCQkgICAgKGxvY2tyZXMtPnN0YXRlICYgRExNX0xPQ0tfUkVTX01JR1JBVElORykpIHsKLQkJCW1sb2coMCwgImxvY2tyZXMgJXM6JS4qczogaXMgaW4gdXNlIG9yICIKLQkJCSAgICAgImJlaW5nIHJlbWFzdGVyZWQsIHVzZWQgJWQsIHN0YXRlICVkXG4iLAotCQkJICAgICBkbG0tPm5hbWUsIGxvY2tyZXMtPmxvY2tuYW1lLmxlbiwKLQkJCSAgICAgbG9ja3Jlcy0+bG9ja25hbWUubmFtZSwgIXVudXNlZCwgbG9ja3Jlcy0+c3RhdGUpOworCQkJbWxvZygwLCAiJXM6IHJlcyAlLipzIGlzIGluIHVzZSBvciBiZWluZyByZW1hc3RlcmVkLCAiCisJCQkgICAgICJ1c2VkICVkLCBzdGF0ZSAlZFxuIiwgZGxtLT5uYW1lLAorCQkJICAgICBsb2NrcmVzLT5sb2NrbmFtZS5sZW4sIGxvY2tyZXMtPmxvY2tuYW1lLm5hbWUsCisJCQkgICAgICF1bnVzZWQsIGxvY2tyZXMtPnN0YXRlKTsKIAkJCWxpc3RfbW92ZV90YWlsKCZkbG0tPnB1cmdlX2xpc3QsICZsb2NrcmVzLT5wdXJnZSk7CiAJCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+c3BpbmxvY2spOwogCQkJY29udGludWU7CkBAIC0yOTYsMTUgKzI5MCwxMiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CiAJaW50IGNhbl9ncmFudCA9IDE7CiAKLQkvL21sb2coMCwgInJlcy0+bG9ja25hbWUubGVuPSVkXG4iLCByZXMtPmxvY2tuYW1lLmxlbik7Ci0JLy9tbG9nKDAsICJyZXMtPmxvY2tuYW1lLm5hbWU9JXBcbiIsIHJlcy0+bG9ja25hbWUubmFtZSk7Ci0JLy9tbG9nKDAsICJzaHVmZmxlIHJlcyAlLipzXG4iLCByZXMtPmxvY2tuYW1lLmxlbiwKLQkvLwkgIHJlcy0+bG9ja25hbWUubmFtZSk7Ci0KLQkvKiBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGxvY2tyZXMKKwkvKgorCSAqIEJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgbG9ja3JlcwogCSAqIHNwaW5sb2NrLCBhbmQgYmVjYXVzZSB3ZSBrbm93IHRoYXQgaXQgaXMgbm90IG1pZ3JhdGluZy8KIAkgKiByZWNvdmVyaW5nL2luLXByb2dyZXNzLCBpdCBpcyBmaW5lIHRvIHJlc2VydmUgYXN0cyBhbmQKLQkgKiBiYXN0cyByaWdodCBiZWZvcmUgcXVldWVpbmcgdGhlbSBhbGwgdGhyb3VnaG91dCAqLworCSAqIGJhc3RzIHJpZ2h0IGJlZm9yZSBxdWV1ZWluZyB0aGVtIGFsbCB0aHJvdWdob3V0CisJICovCiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZkbG0tPmFzdF9sb2NrKTsKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJnJlcy0+c3BpbmxvY2spOwogCUJVR19PTigocmVzLT5zdGF0ZSAmIChETE1fTE9DS19SRVNfTUlHUkFUSU5HfApAQCAtMzE0LDEzICszMDUsMTMgQEAKIGNvbnZlcnRpbmc6CiAJaWYgKGxpc3RfZW1wdHkoJnJlcy0+Y29udmVydGluZykpCiAJCWdvdG8gYmxvY2tlZDsKLQltbG9nKDAsICJyZXMgJS4qcyBoYXMgbG9ja3Mgb24gYSBjb252ZXJ0IHF1ZXVlXG4iLCByZXMtPmxvY2tuYW1lLmxlbiwKLQkgICAgIHJlcy0+bG9ja25hbWUubmFtZSk7CisJbWxvZygwLCAiJXM6IHJlcyAlLipzIGhhcyBsb2NrcyBvbiB0aGUgY29udmVydCBxdWV1ZVxuIiwgZGxtLT5uYW1lLAorCSAgICAgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSk7CiAKIAl0YXJnZXQgPSBsaXN0X2VudHJ5KHJlcy0+Y29udmVydGluZy5uZXh0LCBzdHJ1Y3QgZGxtX2xvY2ssIGxpc3QpOwogCWlmICh0YXJnZXQtPm1sLmNvbnZlcnRfdHlwZSA9PSBMS01fSVZNT0RFKSB7Ci0JCW1sb2coTUxfRVJST1IsICIlLipzOiBjb252ZXJ0aW5nIGEgbG9jayB3aXRoIG5vICIKLQkJICAgICAiY29udmVydF90eXBlIVxuIiwgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSk7CisJCW1sb2coTUxfRVJST1IsICIlczogcmVzICUuKnMgY29udmVydGluZyBsb2NrIHRvIGludmFsaWQgbW9kZVxuIiwKKwkJICAgICBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUpOwogCQlCVUcoKTsKIAl9CiAJaGVhZCA9ICZyZXMtPmdyYW50ZWQ7CkBAIC0zNjUsOSArMzU2LDEyIEBACiAJCXNwaW5fbG9jaygmdGFyZ2V0LT5zcGlubG9jayk7CiAJCUJVR19PTih0YXJnZXQtPm1sLmhpZ2hlc3RfYmxvY2tlZCAhPSBMS01fSVZNT0RFKTsKIAotCQltbG9nKDAsICJjYWxsaW5nIGFzdCBmb3IgY29udmVydGluZyBsb2NrOiAlLipzLCBoYXZlOiAlZCwgIgotCQkgICAgICJncmFudGluZzogJWQsIG5vZGU6ICV1XG4iLCByZXMtPmxvY2tuYW1lLmxlbiwKLQkJICAgICByZXMtPmxvY2tuYW1lLm5hbWUsIHRhcmdldC0+bWwudHlwZSwKKwkJbWxvZygwLCAiJXM6IHJlcyAlLipzLCBBU1QgZm9yIENvbnZlcnRpbmcgbG9jayAldTolbGx1LCB0eXBlICIKKwkJICAgICAiJWQgPT4gJWQsIG5vZGUgJXVcbiIsIGRsbS0+bmFtZSwgcmVzLT5sb2NrbmFtZS5sZW4sCisJCSAgICAgcmVzLT5sb2NrbmFtZS5uYW1lLAorCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfbm9kZShiZTY0X3RvX2NwdSh0YXJnZXQtPm1sLmNvb2tpZSkpLAorCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfc2VxKGJlNjRfdG9fY3B1KHRhcmdldC0+bWwuY29va2llKSksCisJCSAgICAgdGFyZ2V0LT5tbC50eXBlLAogCQkgICAgIHRhcmdldC0+bWwuY29udmVydF90eXBlLCB0YXJnZXQtPm1sLm5vZGUpOwogCiAJCXRhcmdldC0+bWwudHlwZSA9IHRhcmdldC0+bWwuY29udmVydF90eXBlOwpAQCAtNDI4LDExICs0MjIsMTQgQEAKIAkJc3Bpbl9sb2NrKCZ0YXJnZXQtPnNwaW5sb2NrKTsKIAkJQlVHX09OKHRhcmdldC0+bWwuaGlnaGVzdF9ibG9ja2VkICE9IExLTV9JVk1PREUpOwogCi0JCW1sb2coMCwgImNhbGxpbmcgYXN0IGZvciBibG9ja2VkIGxvY2s6ICUuKnMsIGdyYW50aW5nOiAlZCwgIgotCQkgICAgICJub2RlOiAldVxuIiwgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSwKKwkJbWxvZygwLCAiJXM6IHJlcyAlLipzLCBBU1QgZm9yIEJsb2NrZWQgbG9jayAldTolbGx1LCB0eXBlICVkLCAiCisJCSAgICAgIm5vZGUgJXVcbiIsIGRsbS0+bmFtZSwgcmVzLT5sb2NrbmFtZS5sZW4sCisJCSAgICAgcmVzLT5sb2NrbmFtZS5uYW1lLAorCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfbm9kZShiZTY0X3RvX2NwdSh0YXJnZXQtPm1sLmNvb2tpZSkpLAorCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfc2VxKGJlNjRfdG9fY3B1KHRhcmdldC0+bWwuY29va2llKSksCiAJCSAgICAgdGFyZ2V0LT5tbC50eXBlLCB0YXJnZXQtPm1sLm5vZGUpOwogCi0JCS8vIHRhcmdldC0+bWwudHlwZSBpcyBhbHJlYWR5IGNvcnJlY3QKKwkJLyogdGFyZ2V0LT5tbC50eXBlIGlzIGFscmVhZHkgY29ycmVjdCAqLwogCQlsaXN0X21vdmVfdGFpbCgmdGFyZ2V0LT5saXN0LCAmcmVzLT5ncmFudGVkKTsKIAogCQlCVUdfT04oIXRhcmdldC0+bGtzYik7CkBAIC00NTMsNyArNDUwLDYgQEAKIC8qIG11c3QgaGF2ZSBOTyBsb2NrcyB3aGVuIGNhbGxpbmcgdGhpcyB3aXRoIHJlcyAhPU5VTEwgKiAqLwogdm9pZCBkbG1fa2lja190aHJlYWQoc3RydWN0IGRsbV9jdHh0ICpkbG0sIHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzKQogewotCW1sb2dfZW50cnkoImRsbT0lcCwgcmVzPSVwXG4iLCBkbG0sIHJlcyk7CiAJaWYgKHJlcykgewogCQlzcGluX2xvY2soJmRsbS0+c3BpbmxvY2spOwogCQlzcGluX2xvY2soJnJlcy0+c3BpbmxvY2spOwpAQCAtNDY2LDggKzQ2Miw2IEBACiAKIHZvaWQgX19kbG1fZGlydHlfbG9ja3JlcyhzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXMpCiB7Ci0JbWxvZ19lbnRyeSgiZGxtPSVwLCByZXM9JXBcbiIsIGRsbSwgcmVzKTsKLQogCWFzc2VydF9zcGluX2xvY2tlZCgmZGxtLT5zcGlubG9jayk7CiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZyZXMtPnNwaW5sb2NrKTsKIApAQCAtNDg0LDEzICs0NzgsMTYgQEAKIAkJCXJlcy0+c3RhdGUgfD0gRExNX0xPQ0tfUkVTX0RJUlRZOwogCQl9CiAJfQorCisJbWxvZygwLCAiJXM6IHJlcyAlLipzXG4iLCBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLAorCSAgICAgcmVzLT5sb2NrbmFtZS5uYW1lKTsKIH0KIAogCiAvKiBMYXVuY2ggdGhlIE5NIHRocmVhZCBmb3IgdGhlIG1vdW50ZWQgdm9sdW1lICovCiBpbnQgZGxtX2xhdW5jaF90aHJlYWQoc3RydWN0IGRsbV9jdHh0ICpkbG0pCiB7Ci0JbWxvZygwLCAic3RhcnRpbmcgZGxtIHRocmVhZC4uLlxuIik7CisJbWxvZygwLCAiU3RhcnRpbmcgZGxtX3RocmVhZC4uLlxuIik7CiAKIAlkbG0tPmRsbV90aHJlYWRfdGFzayA9IGt0aHJlYWRfcnVuKGRsbV90aHJlYWQsIGRsbSwgImRsbV90aHJlYWQiKTsKIAlpZiAoSVNfRVJSKGRsbS0+ZGxtX3RocmVhZF90YXNrKSkgewpAQCAtNTA1LDcgKzUwMiw3IEBACiB2b2lkIGRsbV9jb21wbGV0ZV90aHJlYWQoc3RydWN0IGRsbV9jdHh0ICpkbG0pCiB7CiAJaWYgKGRsbS0+ZGxtX3RocmVhZF90YXNrKSB7Ci0JCW1sb2coTUxfS1RIUkVBRCwgIndhaXRpbmcgZm9yIGRsbSB0aHJlYWQgdG8gZXhpdFxuIik7CisJCW1sb2coTUxfS1RIUkVBRCwgIldhaXRpbmcgZm9yIGRsbSB0aHJlYWQgdG8gZXhpdFxuIik7CiAJCWt0aHJlYWRfc3RvcChkbG0tPmRsbV90aHJlYWRfdGFzayk7CiAJCWRsbS0+ZGxtX3RocmVhZF90YXNrID0gTlVMTDsKIAl9CkBAIC01MzYsNyArNTMzLDEyIEBACiAJCS8qIGdldCBhbiBleHRyYSByZWYgb24gbG9jayAqLwogCQlkbG1fbG9ja19nZXQobG9jayk7CiAJCXJlcyA9IGxvY2stPmxvY2tyZXM7Ci0JCW1sb2coMCwgImRlbGl2ZXJpbmcgYW4gYXN0IGZvciB0aGlzIGxvY2tyZXNcbiIpOworCQltbG9nKDAsICIlczogcmVzICUuKnMsIEZsdXNoIEFTVCBmb3IgbG9jayAldTolbGx1LCB0eXBlICVkLCAiCisJCSAgICAgIm5vZGUgJXVcbiIsIGRsbS0+bmFtZSwgcmVzLT5sb2NrbmFtZS5sZW4sCisJCSAgICAgcmVzLT5sb2NrbmFtZS5uYW1lLAorCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfbm9kZShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSwKKwkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSwKKwkJICAgICBsb2NrLT5tbC50eXBlLCBsb2NrLT5tbC5ub2RlKTsKIAogCQlCVUdfT04oIWxvY2stPmFzdF9wZW5kaW5nKTsKIApAQCAtNTU3LDkgKzU1OSw5IEBACiAJCS8qIHBvc3NpYmxlIHRoYXQgYW5vdGhlciBhc3Qgd2FzIHF1ZXVlZCB3aGlsZQogCQkgKiB3ZSB3ZXJlIGRlbGl2ZXJpbmcgdGhlIGxhc3Qgb25lICovCiAJCWlmICghbGlzdF9lbXB0eSgmbG9jay0+YXN0X2xpc3QpKSB7Ci0JCQltbG9nKDAsICJhaGEgYW5vdGhlciBhc3QgZ290IHF1ZXVlZCB3aGlsZSAiCi0JCQkgICAgICJ3ZSB3ZXJlIGZpbmlzaGluZyB0aGUgbGFzdCBvbmUuICB3aWxsICIKLQkJCSAgICAgImtlZXAgdGhlIGFzdF9wZW5kaW5nIGZsYWcgc2V0LlxuIik7CisJCQltbG9nKDAsICIlczogcmVzICUuKnMsIEFTVCBxdWV1ZWQgd2hpbGUgZmx1c2hpbmcgbGFzdCAiCisJCQkgICAgICJvbmVcbiIsIGRsbS0+bmFtZSwgcmVzLT5sb2NrbmFtZS5sZW4sCisJCQkgICAgIHJlcy0+bG9ja25hbWUubmFtZSk7CiAJCX0gZWxzZQogCQkJbG9jay0+YXN0X3BlbmRpbmcgPSAwOwogCkBAIC01OTAsOCArNTkyLDEyIEBACiAJCWRsbV9sb2NrX3B1dChsb2NrKTsKIAkJc3Bpbl91bmxvY2soJmRsbS0+YXN0X2xvY2spOwogCi0JCW1sb2coMCwgImRlbGl2ZXJpbmcgYSBiYXN0IGZvciB0aGlzIGxvY2tyZXMgIgotCQkgICAgICIoYmxvY2tlZCA9ICVkXG4iLCBoaSk7CisJCW1sb2coMCwgIiVzOiByZXMgJS4qcywgRmx1c2ggQkFTVCBmb3IgbG9jayAldTolbGx1LCAiCisJCSAgICAgImJsb2NrZWQgJWQsIG5vZGUgJXVcbiIsCisJCSAgICAgZGxtLT5uYW1lLCByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLAorCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfbm9kZShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSwKKwkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSwKKwkJICAgICBoaSwgbG9jay0+bWwubm9kZSk7CiAKIAkJaWYgKGxvY2stPm1sLm5vZGUgIT0gZGxtLT5ub2RlX251bSkgewogCQkJcmV0ID0gZGxtX3NlbmRfcHJveHlfYmFzdChkbG0sIHJlcywgbG9jaywgaGkpOwpAQCAtNjA1LDkgKzYxMSw5IEBACiAJCS8qIHBvc3NpYmxlIHRoYXQgYW5vdGhlciBiYXN0IHdhcyBxdWV1ZWQgd2hpbGUKIAkJICogd2Ugd2VyZSBkZWxpdmVyaW5nIHRoZSBsYXN0IG9uZSAqLwogCQlpZiAoIWxpc3RfZW1wdHkoJmxvY2stPmJhc3RfbGlzdCkpIHsKLQkJCW1sb2coMCwgImFoYSBhbm90aGVyIGJhc3QgZ290IHF1ZXVlZCB3aGlsZSAiCi0JCQkgICAgICJ3ZSB3ZXJlIGZpbmlzaGluZyB0aGUgbGFzdCBvbmUuICB3aWxsICIKLQkJCSAgICAgImtlZXAgdGhlIGJhc3RfcGVuZGluZyBmbGFnIHNldC5cbiIpOworCQkJbWxvZygwLCAiJXM6IHJlcyAlLipzLCBCQVNUIHF1ZXVlZCB3aGlsZSBmbHVzaGluZyBsYXN0ICIKKwkJCSAgICAgIm9uZVxuIiwgZGxtLT5uYW1lLCByZXMtPmxvY2tuYW1lLmxlbiwKKwkJCSAgICAgcmVzLT5sb2NrbmFtZS5uYW1lKTsKIAkJfSBlbHNlCiAJCQlsb2NrLT5iYXN0X3BlbmRpbmcgPSAwOwogCkBAIC02NzUsMTEgKzY4MSwxMiBAQAogCQkJc3Bpbl9sb2NrKCZyZXMtPnNwaW5sb2NrKTsKIAkJCWlmIChyZXMtPm93bmVyICE9IGRsbS0+bm9kZV9udW0pIHsKIAkJCQlfX2RsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShyZXMpOwotCQkJCW1sb2coTUxfRVJST1IsICJpbnByb2c6JXMsIG1pZzolcywgcmVjbzolcywgZGlydHk6JXNcbiIsCi0JCQkJICAgICByZXMtPnN0YXRlICYgRExNX0xPQ0tfUkVTX0lOX1BST0dSRVNTID8gInllcyIgOiAibm8iLAotCQkJCSAgICAgcmVzLT5zdGF0ZSAmIERMTV9MT0NLX1JFU19NSUdSQVRJTkcgPyAieWVzIiA6ICJubyIsCi0JCQkJICAgICByZXMtPnN0YXRlICYgRExNX0xPQ0tfUkVTX1JFQ09WRVJJTkcgPyAieWVzIiA6ICJubyIsCi0JCQkJICAgICByZXMtPnN0YXRlICYgRExNX0xPQ0tfUkVTX0RJUlRZID8gInllcyIgOiAibm8iKTsKKwkJCQltbG9nKE1MX0VSUk9SLCAiJXM6IGlucHJvZyAlZCwgbWlnICVkLCByZWNvICVkLCIKKwkJCQkgICAgICIgZGlydHkgJWRcbiIsIGRsbS0+bmFtZSwKKwkJCQkgICAgICEhKHJlcy0+c3RhdGUgJiBETE1fTE9DS19SRVNfSU5fUFJPR1JFU1MpLAorCQkJCSAgICAgISEocmVzLT5zdGF0ZSAmIERMTV9MT0NLX1JFU19NSUdSQVRJTkcpLAorCQkJCSAgICAgISEocmVzLT5zdGF0ZSAmIERMTV9MT0NLX1JFU19SRUNPVkVSSU5HKSwKKwkJCQkgICAgICEhKHJlcy0+c3RhdGUgJiBETE1fTE9DS19SRVNfRElSVFkpKTsKIAkJCX0KIAkJCUJVR19PTihyZXMtPm93bmVyICE9IGRsbS0+bm9kZV9udW0pOwogCkBAIC02OTMsOCArNzAwLDggQEAKIAkJCQlyZXMtPnN0YXRlICY9IH5ETE1fTE9DS19SRVNfRElSVFk7CiAJCQkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwogCQkJCXNwaW5fdW5sb2NrKCZkbG0tPmFzdF9sb2NrKTsKLQkJCQltbG9nKDAsICJkZWxheWluZyBsaXN0IHNodWZmbGluZyBmb3IgaW4tIgotCQkJCSAgICAgInByb2dyZXNzIGxvY2tyZXMgJS4qcywgc3RhdGU9JWRcbiIsCisJCQkJbWxvZygwLCAiJXM6IHJlcyAlLipzLCBpbnByb2dyZXNzLCBkZWxheSBsaXN0ICIKKwkJCQkgICAgICJzaHVmZmxlLCBzdGF0ZSAlZFxuIiwgZGxtLT5uYW1lLAogCQkJCSAgICAgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSwKIAkJCQkgICAgIHJlcy0+c3RhdGUpOwogCQkJCWRlbGF5ID0gMTsKQEAgLTcwNiwxMCArNzEzLDYgQEAKIAkJCSAqIHNwaW5sb2NrIGFuZCBkbyBOT1QgaGF2ZSB0aGUgZGxtIGxvY2suCiAJCQkgKiBzYWZlIHRvIHJlc2VydmUvcXVldWUgYXN0cyBhbmQgcnVuIHRoZSBsaXN0cy4gKi8KIAotCQkJbWxvZygwLCAiY2FsbGluZyBkbG1fc2h1ZmZsZV9saXN0cyB3aXRoIGRsbT0lcywgIgotCQkJICAgICAicmVzPSUuKnNcbiIsIGRsbS0+bmFtZSwKLQkJCSAgICAgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSk7Ci0KIAkJCS8qIGNhbGxlZCB3aGlsZSBob2xkaW5nIGxvY2tyZXMgbG9jayAqLwogCQkJZGxtX3NodWZmbGVfbGlzdHMoZGxtLCByZXMpOwogCQkJcmVzLT5zdGF0ZSAmPSB+RExNX0xPQ0tfUkVTX0RJUlRZOwpAQCAtNzMzLDcgKzczNiw4IEBACiAJCQkvKiB1bmxpa2VseSwgYnV0IHdlIG1heSBuZWVkIHRvIGdpdmUgdGltZSB0bwogCQkJICogb3RoZXIgdGFza3MgKi8KIAkJCWlmICghLS1uKSB7Ci0JCQkJbWxvZygwLCAidGhyb3R0bGluZyBkbG1fdGhyZWFkXG4iKTsKKwkJCQltbG9nKDAsICIlczogVGhyb3R0bGluZyBkbG0gdGhyZWFkXG4iLAorCQkJCSAgICAgZGxtLT5uYW1lKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZXhwb3J0LmMgYi9mcy9vY2ZzMi9leHBvcnQuYwppbmRleCA2YWRhZmE1Li41ZGJjMzA2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9leHBvcnQuYworKysgYi9mcy9vY2ZzMi9leHBvcnQuYwpAQCAtMTM3LDkgKzEzNyw3IEBACiAJfQogCiAJcmVzdWx0ID0gZF9vYnRhaW5fYWxpYXMoaW5vZGUpOwotCWlmICghSVNfRVJSKHJlc3VsdCkpCi0JCWRfc2V0X2Rfb3AocmVzdWx0LCAmb2NmczJfZGVudHJ5X29wcyk7Ci0JZWxzZQorCWlmIChJU19FUlIocmVzdWx0KSkKIAkJbWxvZ19lcnJubyhQVFJfRVJSKHJlc3VsdCkpOwogCiBiYWlsOgpAQCAtMTc1LDggKzE3Myw2IEBACiAJfQogCiAJcGFyZW50ID0gZF9vYnRhaW5fYWxpYXMob2NmczJfaWdldChPQ0ZTMl9TQihkaXItPmlfc2IpLCBibGtubywgMCwgMCkpOwotCWlmICghSVNfRVJSKHBhcmVudCkpCi0JCWRfc2V0X2Rfb3AocGFyZW50LCAmb2NmczJfZGVudHJ5X29wcyk7CiAKIGJhaWxfdW5sb2NrOgogCW9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZmlsZS5jIGIvZnMvb2NmczIvZmlsZS5jCmluZGV4IGJkYWRiYWUwLi42M2UzZmNhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmMKKysrIGIvZnMvb2NmczIvZmlsZS5jCkBAIC0xOTk1LDYgKzE5OTUsNyBAQAogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCXN0cnVjdCBvY2ZzMl9zcGFjZV9yZXN2IHNyOwogCWludCBjaGFuZ2Vfc2l6ZSA9IDE7CisJaW50IGNtZCA9IE9DRlMyX0lPQ19SRVNWU1A2NDsKIAogCWlmICghb2NmczJfd3JpdGVzX3Vud3JpdHRlbl9leHRlbnRzKG9zYikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTIwMDUsMTIgKzIwMDYsMTUgQEAKIAlpZiAobW9kZSAmIEZBTExPQ19GTF9LRUVQX1NJWkUpCiAJCWNoYW5nZV9zaXplID0gMDsKIAorCWlmIChtb2RlICYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpCisJCWNtZCA9IE9DRlMyX0lPQ19VTlJFU1ZTUDY0OworCiAJc3IubF93aGVuY2UgPSAwOwogCXNyLmxfc3RhcnQgPSAoczY0KW9mZnNldDsKIAlzci5sX2xlbiA9IChzNjQpbGVuOwogCi0JcmV0dXJuIF9fb2NmczJfY2hhbmdlX2ZpbGVfc3BhY2UoTlVMTCwgaW5vZGUsIG9mZnNldCwKLQkJCQkJIE9DRlMyX0lPQ19SRVNWU1A2NCwgJnNyLCBjaGFuZ2Vfc2l6ZSk7CisJcmV0dXJuIF9fb2NmczJfY2hhbmdlX2ZpbGVfc3BhY2UoTlVMTCwgaW5vZGUsIG9mZnNldCwgY21kLCAmc3IsCisJCQkJCSBjaGFuZ2Vfc2l6ZSk7CiB9CiAKIGludCBvY2ZzMl9jaGVja19yYW5nZV9mb3JfcmVmY291bnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lub2RlLmMgYi9mcy9vY2ZzMi9pbm9kZS5jCmluZGV4IGY5MzVmZDYuLjQwNjhjNmMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmMKKysrIGIvZnMvb2NmczIvaW5vZGUuYwpAQCAtNDM0LDcgKzQzNCw3IEBACiAJICogIzEgYW5kICMyIGNhbiBiZSBzaW1wbHkgc29sdmVkIGJ5IG5ldmVyIHRha2luZyB0aGUgbG9jawogCSAqIGhlcmUgZm9yIHN5c3RlbSBmaWxlcyAod2hpY2ggYXJlIHRoZSBvbmx5IHR5cGUgd2UgcmVhZAogCSAqIGR1cmluZyBtb3VudCkuIEl0J3MgYSBoZWF2aWVyIGFwcHJvYWNoLCBidXQgb3VyIG1haW4KLQkgKiBjb25jZXJuIGlzIHVzZXItYWNjZXNpYmxlIGZpbGVzIGFueXdheS4KKwkgKiBjb25jZXJuIGlzIHVzZXItYWNjZXNzaWJsZSBmaWxlcyBhbnl3YXkuCiAJICoKIAkgKiAjMyB3b3JrcyBpdHNlbGYgb3V0IGJlY2F1c2Ugd2UnbGwgZXZlbnR1YWxseSB0YWtlIHRoZQogCSAqIGNsdXN0ZXIgbG9jayBiZWZvcmUgdHJ1c3RpbmcgYW55dGhpbmcgYW55d2F5LgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmMKaW5kZXggZDE0Y2FkNi4uODQ5ZmI0YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYworKysgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC0xNDcsNyArMTQ3LDYgQEAKIAlzcGluX3VubG9jaygmb2ktPmlwX2xvY2spOwogCiBiYWlsX2FkZDoKLQlkX3NldF9kX29wKGRlbnRyeSwgJm9jZnMyX2RlbnRyeV9vcHMpOwogCXJldCA9IGRfc3BsaWNlX2FsaWFzKGlub2RlLCBkZW50cnkpOwogCiAJaWYgKGlub2RlKSB7CkBAIC00MTUsNyArNDE0LDYgQEAKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGxlYXZlOwogCX0KLQlkX3NldF9kX29wKGRlbnRyeSwgJm9jZnMyX2RlbnRyeV9vcHMpOwogCiAJc3RhdHVzID0gb2NmczJfYWRkX2VudHJ5KGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwKIAkJCQkgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCBwYXJlbnRfZmVfYmgsCkBAIC03NDMsNyArNzQxLDYgQEAKIAl9CiAKIAlpaG9sZChpbm9kZSk7Ci0JZF9zZXRfZF9vcChkZW50cnksICZvY2ZzMl9kZW50cnlfb3BzKTsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCiBvdXRfY29tbWl0OgpAQCAtMTAxNyw4ICsxMDE0LDExIEBACiAJCSAqIEFuIGVycm9yIHJldHVybiBtdXN0IG1lYW4gdGhhdCBubyBjbHVzdGVyIGxvY2tzCiAJCSAqIHdlcmUgaGVsZCBvbiBmdW5jdGlvbiBleGl0LgogCQkgKi8KLQkJaWYgKG9pMS0+aXBfYmxrbm8gIT0gb2kyLT5pcF9ibGtubykKKwkJaWYgKG9pMS0+aXBfYmxrbm8gIT0gb2kyLT5pcF9ibGtubykgewogCQkJb2NmczJfaW5vZGVfdW5sb2NrKGlub2RlMiwgMSk7CisJCQlicmVsc2UoKmJoMik7CisJCQkqYmgyID0gTlVMTDsKKwkJfQogCiAJCWlmIChzdGF0dXMgIT0gLUVOT0VOVCkKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTE3OTQsNyArMTc5NCw2IEBACiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwogCX0KLQlkX3NldF9kX29wKGRlbnRyeSwgJm9jZnMyX2RlbnRyeV9vcHMpOwogCiAJc3RhdHVzID0gb2NmczJfYWRkX2VudHJ5KGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwKIAkJCQkgbGU2NF90b19jcHUoZmUtPmlfYmxrbm8pLCBwYXJlbnRfZmVfYmgsCkBAIC0yNDU5LDcgKzI0NTgsNiBAQAogCQlnb3RvIG91dF9jb21taXQ7CiAJfQogCi0JZF9zZXRfZF9vcChkZW50cnksICZvY2ZzMl9kZW50cnlfb3BzKTsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCXN0YXR1cyA9IDA7CiBvdXRfY29tbWl0OgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczIuaCBiL2ZzL29jZnMyL29jZnMyLmgKaW5kZXggNzBkZDNiMS4uNTFjZDY4OSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczIuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMi5oCkBAIC00MjAsNiArNDIwLDExIEBACiAJc3RydWN0IGlub2RlCQkJKm9zYl90bF9pbm9kZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQJCSpvc2JfdGxfYmg7CiAJc3RydWN0IGRlbGF5ZWRfd29yawkJb3NiX3RydW5jYXRlX2xvZ193cTsKKwkvKgorCSAqIEhvdyBtYW55IGNsdXN0ZXJzIGluIG91ciB0cnVuY2F0ZSBsb2cuCisJICogSXQgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgb3NiX3RsX2lub2RlLT5pX211dGV4LgorCSAqLworCXVuc2lnbmVkIGludCB0cnVuY2F0ZWRfY2x1c3RlcnM7CiAKIAlzdHJ1Y3Qgb2NmczJfbm9kZV9tYXAJCW9zYl9yZWNvdmVyaW5nX29ycGhhbl9kaXJzOwogCXVuc2lnbmVkIGludAkJCSpvc2Jfb3JwaGFuX3dpcGVzOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3ViYWxsb2MuYyBiL2ZzL29jZnMyL3N1YmFsbG9jLmMKaW5kZXggNWZlZDYwZC4uNzE5OThkNCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ViYWxsb2MuYworKysgYi9mcy9vY2ZzMi9zdWJhbGxvYy5jCkBAIC0xOTE2LDcgKzE5MTYsNyBAQAogCWlmIChyZXMtPnNyX2JnX2Jsa25vKSB7CiAJCS8qIEF0dGVtcHQgdG8gc2hvcnQtY2lyY3VpdCB0aGUgdXN1YWwgc2VhcmNoIG1lY2hhbmlzbQogCQkgKiBieSBqdW1waW5nIHN0cmFpZ2h0IHRvIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQKLQkJICogYWxsb2NhdGlvbiBncm91cC4gVGhpcyBoZWxwcyB1cyBtYW50YWluIHNvbWUKKwkJICogYWxsb2NhdGlvbiBncm91cC4gVGhpcyBoZWxwcyB1cyBtYWludGFpbiBzb21lCiAJCSAqIGNvbnRpZ3VvdXNuZXNzIGFjcm9zcyBhbGxvY2F0aW9ucy4gKi8KIAkJc3RhdHVzID0gb2NmczJfc2VhcmNoX29uZV9ncm91cChhYywgaGFuZGxlLCBiaXRzX3dhbnRlZCwKIAkJCQkJCW1pbl9iaXRzLCByZXMsICZiaXRzX2xlZnQpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3VwZXIuYyBiL2ZzL29jZnMyL3N1cGVyLmMKaW5kZXggMTdmZjQ2Zi4uMDZkMWY3NCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3VwZXIuYworKysgYi9mcy9vY2ZzMi9zdXBlci5jCkBAIC0yMDk3LDYgKzIwOTcsNyBAQAogCiAJc2ItPnNfZnNfaW5mbyA9IG9zYjsKIAlzYi0+c19vcCA9ICZvY2ZzMl9zb3BzOworCXNiLT5zX2Rfb3AgPSAmb2NmczJfZGVudHJ5X29wczsKIAlzYi0+c19leHBvcnRfb3AgPSAmb2NmczJfZXhwb3J0X29wczsKIAlzYi0+c19xY29wID0gJm9jZnMyX3F1b3RhY3RsX29wczsKIAlzYi0+ZHFfb3AgPSAmb2NmczJfcXVvdGFfb3BlcmF0aW9uczsKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCA0MTk3YjllLi41YjZlZjdlIDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC0yMjMsNyArMjIzLDEyIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogUmV0dXJuIGVycm9yIGlmIG1vZGUgaXMgbm90IHN1cHBvcnRlZCAqLwotCWlmIChtb2RlICYmICEobW9kZSAmIEZBTExPQ19GTF9LRUVQX1NJWkUpKQorCWlmIChtb2RlICYgfihGQUxMT0NfRkxfS0VFUF9TSVpFIHwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkvKiBQdW5jaCBob2xlIG11c3QgaGF2ZSBrZWVwIHNpemUgc2V0ICovCisJaWYgKChtb2RlICYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpICYmCisJICAgICEobW9kZSAmIEZBTExPQ19GTF9LRUVQX1NJWkUpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCmRpZmYgLS1naXQgYS9mcy9waXBlLmMgYi9mcy9waXBlLmMKaW5kZXggNjhmMWY4ZS4uZTJlOTVmYiAxMDA2NDQKLS0tIGEvZnMvcGlwZS5jCisrKyBiL2ZzL3BpcGUuYwpAQCAtNDQxLDcgKzQ0MSw3IEBACiAJCQlicmVhazsKIAkJfQogCQlpZiAoZG9fd2FrZXVwKSB7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYygmcGlwZS0+d2FpdCk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luY19wb2xsKCZwaXBlLT53YWl0LCBQT0xMT1VUKTsKICAJCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3dyaXRlcnMsIFNJR0lPLCBQT0xMX09VVCk7CiAJCX0KIAkJcGlwZV93YWl0KHBpcGUpOwpAQCAtNDUwLDcgKzQ1MCw3IEBACiAKIAkvKiBTaWduYWwgd3JpdGVycyBhc3luY2hyb25vdXNseSB0aGF0IHRoZXJlIGlzIG1vcmUgcm9vbS4gKi8KIAlpZiAoZG9fd2FrZXVwKSB7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKCZwaXBlLT53YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbCgmcGlwZS0+d2FpdCwgUE9MTE9VVCk7CiAJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfd3JpdGVycywgU0lHSU8sIFBPTExfT1VUKTsKIAl9CiAJaWYgKHJldCA+IDApCkBAIC02MTIsNyArNjEyLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChkb193YWtldXApIHsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKCZwaXBlLT53YWl0KTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jX3BvbGwoJnBpcGUtPndhaXQsIFBPTExJTik7CiAJCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3JlYWRlcnMsIFNJR0lPLCBQT0xMX0lOKTsKIAkJCWRvX3dha2V1cCA9IDA7CiAJCX0KQEAgLTYyMyw3ICs2MjMsNyBAQAogb3V0OgogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChkb193YWtldXApIHsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoJnBpcGUtPndhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luY19wb2xsKCZwaXBlLT53YWl0LCBQT0xMSU4pOwogCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3JlYWRlcnMsIFNJR0lPLCBQT0xMX0lOKTsKIAl9CiAJaWYgKHJldCA+IDApCkBAIC03MTUsNyArNzE1LDcgQEAKIAlpZiAoIXBpcGUtPnJlYWRlcnMgJiYgIXBpcGUtPndyaXRlcnMpIHsKIAkJZnJlZV9waXBlX2luZm8oaW5vZGUpOwogCX0gZWxzZSB7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKCZwaXBlLT53YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbCgmcGlwZS0+d2FpdCwgUE9MTElOIHwgUE9MTE9VVCk7CiAJCWtpbGxfZmFzeW5jKCZwaXBlLT5mYXN5bmNfcmVhZGVycywgU0lHSU8sIFBPTExfSU4pOwogCQlraWxsX2Zhc3luYygmcGlwZS0+ZmFzeW5jX3dyaXRlcnMsIFNJR0lPLCBQT0xMX09VVCk7CiAJfQpAQCAtMTAwNCw3ICsxMDA0LDYgQEAKIAkJZ290byBlcnJfaW5vZGU7CiAJcGF0aC5tbnQgPSBtbnRnZXQocGlwZV9tbnQpOwogCi0JZF9zZXRfZF9vcChwYXRoLmRlbnRyeSwgJnBpcGVmc19kZW50cnlfb3BlcmF0aW9ucyk7CiAJZF9pbnN0YW50aWF0ZShwYXRoLmRlbnRyeSwgaW5vZGUpOwogCiAJZXJyID0gLUVORklMRTsKQEAgLTEyNjYsNyArMTI2NSw4IEBACiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqcGlwZWZzX21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAogCQkJIGludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEpCiB7Ci0JcmV0dXJuIG1vdW50X3BzZXVkbyhmc190eXBlLCAicGlwZToiLCAmcGlwZWZzX29wcywgUElQRUZTX01BR0lDKTsKKwlyZXR1cm4gbW91bnRfcHNldWRvKGZzX3R5cGUsICJwaXBlOiIsICZwaXBlZnNfb3BzLAorCQkJJnBpcGVmc19kZW50cnlfb3BlcmF0aW9ucywgUElQRUZTX01BR0lDKTsKIH0KIAogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHBpcGVfZnNfdHlwZSA9IHsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvTWFrZWZpbGUgYi9mcy9wcm9jL01ha2VmaWxlCmluZGV4IDI4OGE0OWUuLmRmNDM0YzUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvTWFrZWZpbGUKKysrIGIvZnMvcHJvYy9NYWtlZmlsZQpAQCAtMTAsMTIgKzEwLDEyIEBACiBwcm9jLXkgICAgICAgKz0gaW5vZGUubyByb290Lm8gYmFzZS5vIGdlbmVyaWMubyBhcnJheS5vIFwKIAkJcHJvY190dHkubwogcHJvYy15CSs9IGNtZGxpbmUubworcHJvYy15CSs9IGNvbnNvbGVzLm8KIHByb2MteQkrPSBjcHVpbmZvLm8KIHByb2MteQkrPSBkZXZpY2VzLm8KIHByb2MteQkrPSBpbnRlcnJ1cHRzLm8KIHByb2MteQkrPSBsb2FkYXZnLm8KIHByb2MteQkrPSBtZW1pbmZvLm8KLXByb2MteQkrPSBwcm9jX2NvbnNvbGUubwogcHJvYy15CSs9IHN0YXQubwogcHJvYy15CSs9IHVwdGltZS5vCiBwcm9jLXkJKz0gdmVyc2lvbi5vCmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggZmZmNjU3Mi4uZGYyYjcwMyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtOTUsNyArOTUsNyBAQAogCiAJZ2V0X3Rhc2tfY29tbSh0Y29tbSwgcCk7CiAKLQlzZXFfcHJpbnRmKG0sICJOYW1lOlx0Iik7CisJc2VxX3B1dHMobSwgIk5hbWU6XHQiKTsKIAllbmQgPSBtLT5idWYgKyBtLT5zaXplOwogCWJ1ZiA9IG0tPmJ1ZiArIG0tPmNvdW50OwogCW5hbWUgPSB0Y29tbTsKQEAgLTEyMiw3ICsxMjIsNyBAQAogCQlidWYrKzsKIAl9CiAJbS0+Y291bnQgPSBidWYgLSBtLT5idWY7Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KIAogLyoKQEAgLTIwOCw3ICsyMDgsNyBAQAogCQlzZXFfcHJpbnRmKG0sICIlZCAiLCBHUk9VUF9BVChncm91cF9pbmZvLCBnKSk7CiAJcHV0X2NyZWQoY3JlZCk7CiAKLQlzZXFfcHJpbnRmKG0sICJcbiIpOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogCiBzdGF0aWMgdm9pZCByZW5kZXJfc2lnc2V0X3Qoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCBjaGFyICpoZWFkZXIsCkBAIC0yMTYsNyArMjE2LDcgQEAKIHsKIAlpbnQgaTsKIAotCXNlcV9wcmludGYobSwgIiVzIiwgaGVhZGVyKTsKKwlzZXFfcHV0cyhtLCBoZWFkZXIpOwogCiAJaSA9IF9OU0lHOwogCWRvIHsKQEAgLTIzMCw3ICsyMzAsNyBAQAogCQlzZXFfcHJpbnRmKG0sICIleCIsIHgpOwogCX0gd2hpbGUgKGkgPj0gNCk7CiAKLQlzZXFfcHJpbnRmKG0sICJcbiIpOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogCiBzdGF0aWMgdm9pZCBjb2xsZWN0X3NpZ2lnbl9zaWdjYXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHNpZ3NldF90ICppZ24sCkBAIC0yOTEsMTIgKzI5MSwxMiBAQAogewogCXVuc2lnbmVkIF9fY2FwaTsKIAotCXNlcV9wcmludGYobSwgIiVzIiwgaGVhZGVyKTsKKwlzZXFfcHV0cyhtLCBoZWFkZXIpOwogCUNBUF9GT1JfRUFDSF9VMzIoX19jYXBpKSB7CiAJCXNlcV9wcmludGYobSwgIiUwOHgiLAogCQkJICAgYS0+Y2FwWyhfS0VSTkVMX0NBUEFCSUxJVFlfVTMyUy0xKSAtIF9fY2FwaV0pOwogCX0KLQlzZXFfcHJpbnRmKG0sICJcbiIpOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19jYXAoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCkBAIC0zMjksMTIgKzMyOSwxMiBAQAogCiBzdGF0aWMgdm9pZCB0YXNrX2NwdXNfYWxsb3dlZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKLQlzZXFfcHJpbnRmKG0sICJDcHVzX2FsbG93ZWQ6XHQiKTsKKwlzZXFfcHV0cyhtLCAiQ3B1c19hbGxvd2VkOlx0Iik7CiAJc2VxX2NwdW1hc2sobSwgJnRhc2stPmNwdXNfYWxsb3dlZCk7Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKLQlzZXFfcHJpbnRmKG0sICJDcHVzX2FsbG93ZWRfbGlzdDpcdCIpOworCXNlcV9wdXRjKG0sICdcbicpOworCXNlcV9wdXRzKG0sICJDcHVzX2FsbG93ZWRfbGlzdDpcdCIpOwogCXNlcV9jcHVtYXNrX2xpc3QobSwgJnRhc2stPmNwdXNfYWxsb3dlZCk7Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KIAogaW50IHByb2NfcGlkX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucywKQEAgLTUzNSwxNSArNTM1LDE1IEBACiBpbnQgcHJvY19waWRfc3RhdG0oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMsCiAJCQlzdHJ1Y3QgcGlkICpwaWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKLQlpbnQgc2l6ZSA9IDAsIHJlc2lkZW50ID0gMCwgc2hhcmVkID0gMCwgdGV4dCA9IDAsIGxpYiA9IDAsIGRhdGEgPSAwOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDAsIHJlc2lkZW50ID0gMCwgc2hhcmVkID0gMCwgdGV4dCA9IDAsIGRhdGEgPSAwOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZ2V0X3Rhc2tfbW0odGFzayk7CiAKIAlpZiAobW0pIHsKIAkJc2l6ZSA9IHRhc2tfc3RhdG0obW0sICZzaGFyZWQsICZ0ZXh0LCAmZGF0YSwgJnJlc2lkZW50KTsKIAkJbW1wdXQobW0pOwogCX0KLQlzZXFfcHJpbnRmKG0sICIlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwKLQkJCXNpemUsIHJlc2lkZW50LCBzaGFyZWQsIHRleHQsIGxpYiwgZGF0YSwgMCk7CisJc2VxX3ByaW50ZihtLCAiJWx1ICVsdSAlbHUgJWx1IDAgJWx1IDBcbiIsCisJCQlzaXplLCByZXNpZGVudCwgc2hhcmVkLCB0ZXh0LCBkYXRhKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCBiMjA5NjJjLi45M2YxY2RkIDEwMDY0NAotLS0gYS9mcy9wcm9jL2Jhc2UuYworKysgYi9mcy9wcm9jL2Jhc2UuYwpAQCAtMzczLDI2ICszNzMsMjAgQEAKIAkJcmV0dXJuIC1FU1JDSDsKIAlzZXFfcHV0cyhtLCAiTGF0ZW5jeSBUb3AgdmVyc2lvbiA6IHYwLjFcbiIpOwogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCWlmICh0YXNrLT5sYXRlbmN5X3JlY29yZFtpXS5iYWNrdHJhY2VbMF0pIHsKKwkJc3RydWN0IGxhdGVuY3lfcmVjb3JkICpsciA9ICZ0YXNrLT5sYXRlbmN5X3JlY29yZFtpXTsKKwkJaWYgKGxyLT5iYWNrdHJhY2VbMF0pIHsKIAkJCWludCBxOwotCQkJc2VxX3ByaW50ZihtLCAiJWkgJWxpICVsaSAiLAotCQkJCXRhc2stPmxhdGVuY3lfcmVjb3JkW2ldLmNvdW50LAotCQkJCXRhc2stPmxhdGVuY3lfcmVjb3JkW2ldLnRpbWUsCi0JCQkJdGFzay0+bGF0ZW5jeV9yZWNvcmRbaV0ubWF4KTsKKwkJCXNlcV9wcmludGYobSwgIiVpICVsaSAlbGkiLAorCQkJCSAgIGxyLT5jb3VudCwgbHItPnRpbWUsIGxyLT5tYXgpOwogCQkJZm9yIChxID0gMDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIOyBxKyspIHsKLQkJCQljaGFyIHN5bVtLU1lNX1NZTUJPTF9MRU5dOwotCQkJCWNoYXIgKmM7Ci0JCQkJaWYgKCF0YXNrLT5sYXRlbmN5X3JlY29yZFtpXS5iYWNrdHJhY2VbcV0pCisJCQkJdW5zaWduZWQgbG9uZyBidCA9IGxyLT5iYWNrdHJhY2VbcV07CisJCQkJaWYgKCFidCkKIAkJCQkJYnJlYWs7Ci0JCQkJaWYgKHRhc2stPmxhdGVuY3lfcmVjb3JkW2ldLmJhY2t0cmFjZVtxXSA9PSBVTE9OR19NQVgpCisJCQkJaWYgKGJ0ID09IFVMT05HX01BWCkKIAkJCQkJYnJlYWs7Ci0JCQkJc3ByaW50X3N5bWJvbChzeW0sIHRhc2stPmxhdGVuY3lfcmVjb3JkW2ldLmJhY2t0cmFjZVtxXSk7Ci0JCQkJYyA9IHN0cmNocihzeW0sICcrJyk7Ci0JCQkJaWYgKGMpCi0JCQkJCSpjID0gMDsKLQkJCQlzZXFfcHJpbnRmKG0sICIlcyAiLCBzeW0pOworCQkJCXNlcV9wcmludGYobSwgIiAlcHMiLCAodm9pZCAqKWJ0KTsKIAkJCX0KLQkJCXNlcV9wcmludGYobSwgIlxuIik7CisJCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAkJfQogCiAJfQpAQCAtNzUxLDE0ICs3NDUsNyBAQAogCiBzdGF0aWMgaW50IHByb2Nfc2luZ2xlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JaW50IHJldDsKLQlyZXQgPSBzaW5nbGVfb3BlbihmaWxwLCBwcm9jX3NpbmdsZV9zaG93LCBOVUxMKTsKLQlpZiAoIXJldCkgewotCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0KLQkJbS0+cHJpdmF0ZSA9IGlub2RlOwotCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCBwcm9jX3NpbmdsZV9zaG93LCBpbm9kZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfc2luZ2xlX2ZpbGVfb3BlcmF0aW9ucyA9IHsKQEAgLTEzODYsMTUgKzEzNzMsNyBAQAogCiBzdGF0aWMgaW50IHNjaGVkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IHNpbmdsZV9vcGVuKGZpbHAsIHNjaGVkX3Nob3csIE5VTEwpOwotCWlmICghcmV0KSB7Ci0JCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQotCQltLT5wcml2YXRlID0gaW5vZGU7Ci0JfQotCXJldHVybiByZXQ7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIHNjaGVkX3Nob3csIGlub2RlKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19waWRfc2NoZWRfb3BlcmF0aW9ucyA9IHsKQEAgLTE1MzAsMTUgKzE1MDksNyBAQAogCiBzdGF0aWMgaW50IGNvbW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2luZ2xlX29wZW4oZmlscCwgY29tbV9zaG93LCBOVUxMKTsKLQlpZiAoIXJldCkgewotCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0KLQkJbS0+cHJpdmF0ZSA9IGlub2RlOwotCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCBjb21tX3Nob3csIGlub2RlKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19waWRfc2V0X2NvbW1fb3BlcmF0aW9ucyA9IHsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19jb25zb2xlLmMgYi9mcy9wcm9jL2NvbnNvbGVzLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gZnMvcHJvYy9wcm9jX2NvbnNvbGUuYwpyZW5hbWUgdG8gZnMvcHJvYy9jb25zb2xlcy5jCmluZGV4IDhhNzA3NjAuLmVhZmMyMmEgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY19jb25zb2xlLmMKKysrIGIvZnMvcHJvYy9jb25zb2xlcy5jCkBAIC0xMDYsOSArMTA2LDkgQEAKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAogfTsKIAotc3RhdGljIGludCByZWdpc3Rlcl9wcm9jX2NvbnNvbGVzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBwcm9jX2NvbnNvbGVzX2luaXQodm9pZCkKIHsKIAlwcm9jX2NyZWF0ZSgiY29uc29sZXMiLCAwLCBOVUxMLCAmcHJvY19jb25zb2xlc19vcGVyYXRpb25zKTsKIAlyZXR1cm4gMDsKIH0KLW1vZHVsZV9pbml0KHJlZ2lzdGVyX3Byb2NfY29uc29sZXMpOworbW9kdWxlX2luaXQocHJvY19jb25zb2xlc19pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvZGV2aWNlcy5jIGIvZnMvcHJvYy9kZXZpY2VzLmMKaW5kZXggNTllZTdkYS4uYjE0MzQ3MSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9kZXZpY2VzLmMKKysrIGIvZnMvcHJvYy9kZXZpY2VzLmMKQEAgLTksMTQgKzksMTQgQEAKIAogCWlmIChpIDwgQ0hSREVWX01BSk9SX0hBU0hfU0laRSkgewogCQlpZiAoaSA9PSAwKQotCQkJc2VxX3ByaW50ZihmLCAiQ2hhcmFjdGVyIGRldmljZXM6XG4iKTsKKwkJCXNlcV9wdXRzKGYsICJDaGFyYWN0ZXIgZGV2aWNlczpcbiIpOwogCQljaHJkZXZfc2hvdyhmLCBpKTsKIAl9CiAjaWZkZWYgQ09ORklHX0JMT0NLCiAJZWxzZSB7CiAJCWkgLT0gQ0hSREVWX01BSk9SX0hBU0hfU0laRTsKIAkJaWYgKGkgPT0gMCkKLQkJCXNlcV9wcmludGYoZiwgIlxuQmxvY2sgZGV2aWNlczpcbiIpOworCQkJc2VxX3B1dHMoZiwgIlxuQmxvY2sgZGV2aWNlczpcbiIpOwogCQlibGtkZXZfc2hvdyhmLCBpKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvZ2VuZXJpYy5jIGIvZnMvcHJvYy9nZW5lcmljLmMKaW5kZXggZjc2NmJlMi4uMDFlMDdmMiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9nZW5lcmljLmMKKysrIGIvZnMvcHJvYy9nZW5lcmljLmMKQEAgLTQyNSwxMyArNDI1LDEwIEBACiAJCWlmIChkZS0+bmFtZWxlbiAhPSBkZW50cnktPmRfbmFtZS5sZW4pCiAJCQljb250aW51ZTsKIAkJaWYgKCFtZW1jbXAoZGVudHJ5LT5kX25hbWUubmFtZSwgZGUtPm5hbWUsIGRlLT5uYW1lbGVuKSkgewotCQkJdW5zaWduZWQgaW50IGlubzsKLQotCQkJaW5vID0gZGUtPmxvd19pbm87CiAJCQlwZGVfZ2V0KGRlKTsKIAkJCXNwaW5fdW5sb2NrKCZwcm9jX3N1YmRpcl9sb2NrKTsKIAkJCWVycm9yID0gLUVJTlZBTDsKLQkJCWlub2RlID0gcHJvY19nZXRfaW5vZGUoZGlyLT5pX3NiLCBpbm8sIGRlKTsKKwkJCWlub2RlID0gcHJvY19nZXRfaW5vZGUoZGlyLT5pX3NiLCBkZSk7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAl9CkBAIC03NjgsMTIgKzc2NSw3IEBACiAKIHN0YXRpYyB2b2lkIGZyZWVfcHJvY19lbnRyeShzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlKQogewotCXVuc2lnbmVkIGludCBpbm8gPSBkZS0+bG93X2lubzsKLQotCWlmIChpbm8gPCBQUk9DX0RZTkFNSUNfRklSU1QpCi0JCXJldHVybjsKLQotCXJlbGVhc2VfaW5vZGVfbnVtYmVyKGlubyk7CisJcmVsZWFzZV9pbm9kZV9udW1iZXIoZGUtPmxvd19pbm8pOwogCiAJaWYgKFNfSVNMTksoZGUtPm1vZGUpKQogCQlrZnJlZShkZS0+ZGF0YSk7CkBAIC04MzQsMTIgKzgyNiw5IEBACiAKIAkJd2FpdF9mb3JfY29tcGxldGlvbihkZS0+cGRlX3VubG9hZF9jb21wbGV0aW9uKTsKIAotCQlnb3RvIGNvbnRpbnVlX3JlbW92aW5nOworCQlzcGluX2xvY2soJmRlLT5wZGVfdW5sb2FkX2xvY2spOwogCX0KLQlzcGluX3VubG9jaygmZGUtPnBkZV91bmxvYWRfbG9jayk7CiAKLWNvbnRpbnVlX3JlbW92aW5nOgotCXNwaW5fbG9jaygmZGUtPnBkZV91bmxvYWRfbG9jayk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZS0+cGRlX29wZW5lcnMpKSB7CiAJCXN0cnVjdCBwZGVfb3BlbmVyICpwZGVvOwogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2lub2RlLmMgYi9mcy9wcm9jL2lub2RlLmMKaW5kZXggNmJjYjkyNi4uMTc2Y2U0YyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9pbm9kZS5jCisrKyBiL2ZzL3Byb2MvaW5vZGUuYwpAQCAtNDE2LDEyICs0MTYsMTEgQEAKIH07CiAjZW5kaWYKIAotc3RydWN0IGlub2RlICpwcm9jX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgaW5vLAotCQkJCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpCitzdHJ1Y3QgaW5vZGUgKnByb2NfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpCiB7CiAJc3RydWN0IGlub2RlICogaW5vZGU7CiAKLQlpbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBpbm8pOworCWlub2RlID0gaWdldF9sb2NrZWQoc2IsIGRlLT5sb3dfaW5vKTsKIAlpZiAoIWlub2RlKQogCQlyZXR1cm4gTlVMTDsKIAlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykgewpAQCAtNDcxLDcgKzQ3MCw3IEBACiAJcy0+c190aW1lX2dyYW4gPSAxOwogCQogCXBkZV9nZXQoJnByb2Nfcm9vdCk7Ci0Jcm9vdF9pbm9kZSA9IHByb2NfZ2V0X2lub2RlKHMsIFBST0NfUk9PVF9JTk8sICZwcm9jX3Jvb3QpOworCXJvb3RfaW5vZGUgPSBwcm9jX2dldF9pbm9kZShzLCAmcHJvY19yb290KTsKIAlpZiAoIXJvb3RfaW5vZGUpCiAJCWdvdG8gb3V0X25vX3Jvb3Q7CiAJcm9vdF9pbm9kZS0+aV91aWQgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbnRlcm5hbC5oIGIvZnMvcHJvYy9pbnRlcm5hbC5oCmluZGV4IDFmMjRhM2UuLjlhZDU2MWQgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvaW50ZXJuYWwuaAorKysgYi9mcy9wcm9jL2ludGVybmFsLmgKQEAgLTk2LDcgKzk2LDggQEAKIHN0cnVjdCBkZW50cnkgKnByb2NfcGlkX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIGludCBwcm9jX3BpZF9yZWFkZGlyKHN0cnVjdCBmaWxlICogZmlscCwgdm9pZCAqIGRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpOwogdW5zaWduZWQgbG9uZyB0YXNrX3ZzaXplKHN0cnVjdCBtbV9zdHJ1Y3QgKik7Ci1pbnQgdGFza19zdGF0bShzdHJ1Y3QgbW1fc3RydWN0ICosIGludCAqLCBpbnQgKiwgaW50ICosIGludCAqKTsKK3Vuc2lnbmVkIGxvbmcgdGFza19zdGF0bShzdHJ1Y3QgbW1fc3RydWN0ICosCisJdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqKTsKIHZvaWQgdGFza19tZW0oc3RydWN0IHNlcV9maWxlICosIHN0cnVjdCBtbV9zdHJ1Y3QgKik7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGVfZ2V0KHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlKQpAQCAtMTA4LDcgKzEwOSw3IEBACiAKIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKnByb2NfbW50OwogaW50IHByb2NfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Ci1zdHJ1Y3QgaW5vZGUgKnByb2NfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKTsKK3N0cnVjdCBpbm9kZSAqcHJvY19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKTsKIAogLyoKICAqIFRoZXNlIGFyZSBnZW5lcmljIC9wcm9jIHJvdXRpbmVzIHRoYXQgdXNlIHRoZSBpbnRlcm5hbApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9rY29yZS5jIGIvZnMvcHJvYy9rY29yZS5jCmluZGV4IDZmMzdjMzkuLmQyNDVjYjIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mva2NvcmUuYworKysgYi9mcy9wcm9jL2tjb3JlLmMKQEAgLTU1OCw3ICs1NTgsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19rY29yZV9vcGVyYXRpb25zID0gewogCS5yZWFkCQk9IHJlYWRfa2NvcmUsCiAJLm9wZW4JCT0gb3Blbl9rY29yZSwKLQkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCisJLmxsc2VlawkJPSBkZWZhdWx0X2xsc2VlaywKIH07CiAKICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcGFnZS5jIGIvZnMvcHJvYy9wYWdlLmMKaW5kZXggM2I4YjQ1Ni4uYjA2YzY3NCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wYWdlLmMKKysrIGIvZnMvcHJvYy9wYWdlLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAkJCXBwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAkJZWxzZQogCQkJcHBhZ2UgPSBOVUxMOwotCQlpZiAoIXBwYWdlKQorCQlpZiAoIXBwYWdlIHx8IFBhZ2VTbGFiKHBwYWdlKSkKIAkJCXBjb3VudCA9IDA7CiAJCWVsc2UKIAkJCXBjb3VudCA9IHBhZ2VfbWFwY291bnQocHBhZ2UpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wcm9jX3R0eS5jIGIvZnMvcHJvYy9wcm9jX3R0eS5jCmluZGV4IDgzYWRjYzguLmNiNzYxZjAgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY190dHkuYworKysgYi9mcy9wcm9jL3Byb2NfdHR5LmMKQEAgLTM2LDI3ICszNiwyNyBAQAogCX0KIAlzd2l0Y2ggKHAtPnR5cGUpIHsKIAljYXNlIFRUWV9EUklWRVJfVFlQRV9TWVNURU06Ci0JCXNlcV9wcmludGYobSwgInN5c3RlbSIpOworCQlzZXFfcHV0cyhtLCAic3lzdGVtIik7CiAJCWlmIChwLT5zdWJ0eXBlID09IFNZU1RFTV9UWVBFX1RUWSkKLQkJCXNlcV9wcmludGYobSwgIjovZGV2L3R0eSIpOworCQkJc2VxX3B1dHMobSwgIjovZGV2L3R0eSIpOwogCQllbHNlIGlmIChwLT5zdWJ0eXBlID09IFNZU1RFTV9UWVBFX1NZU0NPTlMpCi0JCQlzZXFfcHJpbnRmKG0sICI6Y29uc29sZSIpOworCQkJc2VxX3B1dHMobSwgIjpjb25zb2xlIik7CiAJCWVsc2UgaWYgKHAtPnN1YnR5cGUgPT0gU1lTVEVNX1RZUEVfQ09OU09MRSkKLQkJCXNlcV9wcmludGYobSwgIjp2dG1hc3RlciIpOworCQkJc2VxX3B1dHMobSwgIjp2dG1hc3RlciIpOwogCQlicmVhazsKIAljYXNlIFRUWV9EUklWRVJfVFlQRV9DT05TT0xFOgotCQlzZXFfcHJpbnRmKG0sICJjb25zb2xlIik7CisJCXNlcV9wdXRzKG0sICJjb25zb2xlIik7CiAJCWJyZWFrOwogCWNhc2UgVFRZX0RSSVZFUl9UWVBFX1NFUklBTDoKLQkJc2VxX3ByaW50ZihtLCAic2VyaWFsIik7CisJCXNlcV9wdXRzKG0sICJzZXJpYWwiKTsKIAkJYnJlYWs7CiAJY2FzZSBUVFlfRFJJVkVSX1RZUEVfUFRZOgogCQlpZiAocC0+c3VidHlwZSA9PSBQVFlfVFlQRV9NQVNURVIpCi0JCQlzZXFfcHJpbnRmKG0sICJwdHk6bWFzdGVyIik7CisJCQlzZXFfcHV0cyhtLCAicHR5Om1hc3RlciIpOwogCQllbHNlIGlmIChwLT5zdWJ0eXBlID09IFBUWV9UWVBFX1NMQVZFKQotCQkJc2VxX3ByaW50ZihtLCAicHR5OnNsYXZlIik7CisJCQlzZXFfcHV0cyhtLCAicHR5OnNsYXZlIik7CiAJCWVsc2UKLQkJCXNlcV9wcmludGYobSwgInB0eSIpOworCQkJc2VxX3B1dHMobSwgInB0eSIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlzZXFfcHJpbnRmKG0sICJ0eXBlOiVkLiVkIiwgcC0+dHlwZSwgcC0+c3VidHlwZSk7CkBAIC03NCwxOSArNzQsMTkgQEAKIAkJLyogcHNldWRvLWRyaXZlcnMgZmlyc3QgKi8KIAkJc2VxX3ByaW50ZihtLCAiJS0yMHMgL2Rldi8lLThzICIsICIvZGV2L3R0eSIsICJ0dHkiKTsKIAkJc2VxX3ByaW50ZihtLCAiJTNkICU3ZCAiLCBUVFlBVVhfTUFKT1IsIDApOwotCQlzZXFfcHJpbnRmKG0sICJzeXN0ZW06L2Rldi90dHlcbiIpOworCQlzZXFfcHV0cyhtLCAic3lzdGVtOi9kZXYvdHR5XG4iKTsKIAkJc2VxX3ByaW50ZihtLCAiJS0yMHMgL2Rldi8lLThzICIsICIvZGV2L2NvbnNvbGUiLCAiY29uc29sZSIpOwogCQlzZXFfcHJpbnRmKG0sICIlM2QgJTdkICIsIFRUWUFVWF9NQUpPUiwgMSk7Ci0JCXNlcV9wcmludGYobSwgInN5c3RlbTpjb25zb2xlXG4iKTsKKwkJc2VxX3B1dHMobSwgInN5c3RlbTpjb25zb2xlXG4iKTsKICNpZmRlZiBDT05GSUdfVU5JWDk4X1BUWVMKIAkJc2VxX3ByaW50ZihtLCAiJS0yMHMgL2Rldi8lLThzICIsICIvZGV2L3B0bXgiLCAicHRteCIpOwogCQlzZXFfcHJpbnRmKG0sICIlM2QgJTdkICIsIFRUWUFVWF9NQUpPUiwgMik7Ci0JCXNlcV9wcmludGYobSwgInN5c3RlbVxuIik7CisJCXNlcV9wdXRzKG0sICJzeXN0ZW1cbiIpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1ZUCiAJCXNlcV9wcmludGYobSwgIiUtMjBzIC9kZXYvJS04cyAiLCAiL2Rldi92Yy8wIiwgInZjLzAiKTsKIAkJc2VxX3ByaW50ZihtLCAiJTNkICU3ZCAiLCBUVFlfTUFKT1IsIDApOwotCQlzZXFfcHJpbnRmKG0sICJzeXN0ZW06dnRtYXN0ZXJcbiIpOworCQlzZXFfcHV0cyhtLCAic3lzdGVtOnZ0bWFzdGVyXG4iKTsKICNlbmRpZgogCX0KIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9zb2Z0aXJxcy5jIGIvZnMvcHJvYy9zb2Z0aXJxcy5jCmluZGV4IDM3OTk0NzMuLjYyNjA0YmUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvc29mdGlycXMuYworKysgYi9mcy9wcm9jL3NvZnRpcnFzLmMKQEAgLTEwLDE2ICsxMCwxNiBAQAogewogCWludCBpLCBqOwogCi0Jc2VxX3ByaW50ZihwLCAiICAgICAgICAgICAgICAgICAgICAiKTsKKwlzZXFfcHV0cyhwLCAiICAgICAgICAgICAgICAgICAgICAiKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKIAkJc2VxX3ByaW50ZihwLCAiQ1BVJS04ZCIsIGkpOwotCXNlcV9wcmludGYocCwgIlxuIik7CisJc2VxX3B1dGMocCwgJ1xuJyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfU09GVElSUVM7IGkrKykgewogCQlzZXFfcHJpbnRmKHAsICIlMTJzOiIsIHNvZnRpcnFfdG9fbmFtZVtpXSk7CiAJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShqKQogCQkJc2VxX3ByaW50ZihwLCAiICUxMHUiLCBrc3RhdF9zb2Z0aXJxc19jcHUoaSwgaikpOwotCQlzZXFfcHJpbnRmKHAsICJcbiIpOworCQlzZXFfcHV0YyhwLCAnXG4nKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9wcm9jL3N0YXQuYyBiL2ZzL3Byb2Mvc3RhdC5jCmluZGV4IGUxNWExOWMuLjFjZmZhMmIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvc3RhdC5jCisrKyBiL2ZzL3Byb2Mvc3RhdC5jCkBAIC0xMjYsNyArMTI2LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9TT0ZUSVJRUzsgaSsrKQogCQlzZXFfcHJpbnRmKHAsICIgJXUiLCBwZXJfc29mdGlycV9zdW1zW2ldKTsKLQlzZXFfcHJpbnRmKHAsICJcbiIpOworCXNlcV9wdXRjKHAsICdcbicpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmMKaW5kZXggYzEyNmM4My4uYzM3NTViZCAxMDA2NDQKLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jCisrKyBiL2ZzL3Byb2MvdGFza19tbXUuYwpAQCAtNjYsOCArNjYsOSBAQAogCXJldHVybiBQQUdFX1NJWkUgKiBtbS0+dG90YWxfdm07CiB9CiAKLWludCB0YXNrX3N0YXRtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgKnNoYXJlZCwgaW50ICp0ZXh0LAotCSAgICAgICBpbnQgKmRhdGEsIGludCAqcmVzaWRlbnQpCit1bnNpZ25lZCBsb25nIHRhc2tfc3RhdG0oc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkgdW5zaWduZWQgbG9uZyAqc2hhcmVkLCB1bnNpZ25lZCBsb25nICp0ZXh0LAorCQkJIHVuc2lnbmVkIGxvbmcgKmRhdGEsIHVuc2lnbmVkIGxvbmcgKnJlc2lkZW50KQogewogCSpzaGFyZWQgPSBnZXRfbW1fY291bnRlcihtbSwgTU1fRklMRVBBR0VTKTsKIAkqdGV4dCA9IChQQUdFX0FMSUdOKG1tLT5lbmRfY29kZSkgLSAobW0tPnN0YXJ0X2NvZGUgJiBQQUdFX01BU0spKQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX25vbW11LmMgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwppbmRleCBjYjYzMDZlLi5iNTM1ZDNlIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbm9tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwpAQCAtOTIsMTMgKzkyLDE0IEBACiAJcmV0dXJuIHZzaXplOwogfQogCi1pbnQgdGFza19zdGF0bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50ICpzaGFyZWQsIGludCAqdGV4dCwKLQkgICAgICAgaW50ICpkYXRhLCBpbnQgKnJlc2lkZW50KQordW5zaWduZWQgbG9uZyB0YXNrX3N0YXRtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJIHVuc2lnbmVkIGxvbmcgKnNoYXJlZCwgdW5zaWduZWQgbG9uZyAqdGV4dCwKKwkJCSB1bnNpZ25lZCBsb25nICpkYXRhLCB1bnNpZ25lZCBsb25nICpyZXNpZGVudCkKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlzdHJ1Y3Qgdm1fcmVnaW9uICpyZWdpb247CiAJc3RydWN0IHJiX25vZGUgKnA7Ci0JaW50IHNpemUgPSBrb2Jqc2l6ZShtbSk7CisJdW5zaWduZWQgbG9uZyBzaXplID0ga29ianNpemUobW0pOwogCiAJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCWZvciAocCA9IHJiX2ZpcnN0KCZtbS0+bW1fcmIpOyBwOyBwID0gcmJfbmV4dChwKSkgewpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmMKaW5kZXggMGZlZDQxZS4uODRiZWNkMyAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvZHF1b3QuYworKysgYi9mcy9xdW90YS9kcXVvdC5jCkBAIC0xMzMsMTYgKzEzMywyMCBAQAogRVhQT1JUX1NZTUJPTChkcV9kYXRhX2xvY2spOwogCiB2b2lkIF9fcXVvdGFfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqZnVuYywKLQkJICBjb25zdCBjaGFyICpmbXQsIC4uLikKKwkJICAgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7Ci0JdmFfbGlzdCBhcmdzOwotCiAJaWYgKHByaW50a19yYXRlbGltaXQoKSkgeworCQl2YV9saXN0IGFyZ3M7CisJCXN0cnVjdCB2YV9mb3JtYXQgdmFmOworCiAJCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JCXByaW50ayhLRVJOX0VSUiAiUXVvdGEgZXJyb3IgKGRldmljZSAlcyk6ICVzOiAiLAotCQkgICAgICAgc2ItPnNfaWQsIGZ1bmMpOwotCQl2cHJpbnRrKGZtdCwgYXJncyk7Ci0JCXByaW50aygiXG4iKTsKKworCQl2YWYuZm10ID0gZm10OworCQl2YWYudmEgPSAmYXJnczsKKworCQlwcmludGsoS0VSTl9FUlIgIlF1b3RhIGVycm9yIChkZXZpY2UgJXMpOiAlczogJXBWXG4iLAorCQkgICAgICAgc2ItPnNfaWQsIGZ1bmMsICZ2YWYpOworCiAJCXZhX2VuZChhcmdzKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YV90cmVlLmMgYi9mcy9xdW90YS9xdW90YV90cmVlLmMKaW5kZXggOWU0ODg3NC4uZTQxYzFiZWNmIDEwMDY0NAotLS0gYS9mcy9xdW90YS9xdW90YV90cmVlLmMKKysrIGIvZnMvcXVvdGEvcXVvdGFfdHJlZS5jCkBAIC00NjgsOCArNDY4LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0ID0gcmVhZF9ibGsoaW5mbywgKmJsaywgYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlxdW90YV9lcnJvcihkcXVvdC0+ZHFfc2IsICJDYW4ndCByZWFkIHF1b3RhIGRhdGEgIgotCQkJICAgICJibG9jayAldSIsIGJsayk7CisJCXF1b3RhX2Vycm9yKGRxdW90LT5kcV9zYiwgIkNhbid0IHJlYWQgcXVvdGEgZGF0YSBibG9jayAldSIsCisJCQkgICAgKmJsayk7CiAJCWdvdG8gb3V0X2J1ZjsKIAl9CiAJbmV3YmxrID0gbGUzMl90b19jcHUocmVmW2dldF9pbmRleChpbmZvLCBkcXVvdC0+ZHFfaWQsIGRlcHRoKV0pOwpAQCAtNDkzLDggKzQ5Myw5IEBACiAJCX0gZWxzZSB7CiAJCQlyZXQgPSB3cml0ZV9ibGsoaW5mbywgKmJsaywgYnVmKTsKIAkJCWlmIChyZXQgPCAwKQotCQkJCXF1b3RhX2Vycm9yKGRxdW90LT5kcV9zYiwgIkNhbid0IHdyaXRlIHF1b3RhICIKLQkJCQkJICAgICJ0cmVlIGJsb2NrICV1IiwgYmxrKTsKKwkJCQlxdW90YV9lcnJvcihkcXVvdC0+ZHFfc2IsCisJCQkJCSAgICAiQ2FuJ3Qgd3JpdGUgcXVvdGEgdHJlZSBibG9jayAldSIsCisJCQkJCSAgICAqYmxrKTsKIAkJfQogCX0KIG91dF9idWY6CmRpZmYgLS1naXQgYS9mcy9yZWFkX3dyaXRlLmMgYi9mcy9yZWFkX3dyaXRlLmMKaW5kZXggNWQ0MzFiYS4uNTUyMGY4YSAxMDA2NDQKLS0tIGEvZnMvcmVhZF93cml0ZS5jCisrKyBiL2ZzL3JlYWRfd3JpdGUuYwpAQCAtMzAsMTggKzMwLDkgQEAKIAogRVhQT1JUX1NZTUJPTChnZW5lcmljX3JvX2ZvcHMpOwogCi1zdGF0aWMgaW50Ci1fX25lZ2F0aXZlX2Zwb3NfY2hlY2soc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBpbmxpbmUgaW50IHVuc2lnbmVkX29mZnNldHMoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JLyoKLQkgKiBwb3Mgb3IgcG9zK2NvdW50IGlzIG5lZ2F0aXZlIGhlcmUsIGNoZWNrIG92ZXJmbG93LgotCSAqIHRvbyBiaWcgImNvdW50IiB3aWxsIGJlIGNhdWdodCBpbiByd192ZXJpZnlfYXJlYSgpLgotCSAqLwotCWlmICgocG9zIDwgMCkgJiYgKHBvcyArIGNvdW50IDwgcG9zKSkKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1VOU0lHTkVEX09GRlNFVCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGZpbGUtPmZfbW9kZSAmIEZNT0RFX1VOU0lHTkVEX09GRlNFVDsKIH0KIAogLyoqCkBAIC03NSw3ICs2Niw3IEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChvZmZzZXQgPCAwICYmIF9fbmVnYXRpdmVfZnBvc19jaGVjayhmaWxlLCBvZmZzZXQsIDApKQorCWlmIChvZmZzZXQgPCAwICYmICF1bnNpZ25lZF9vZmZzZXRzKGZpbGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAob2Zmc2V0ID4gaW5vZGUtPmlfc2ItPnNfbWF4Ynl0ZXMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTUyLDcgKzE0Myw3IEBACiAJCQlvZmZzZXQgKz0gZmlsZS0+Zl9wb3M7CiAJfQogCXJldHZhbCA9IC1FSU5WQUw7Ci0JaWYgKG9mZnNldCA+PSAwIHx8ICFfX25lZ2F0aXZlX2Zwb3NfY2hlY2soZmlsZSwgb2Zmc2V0LCAwKSkgeworCWlmIChvZmZzZXQgPj0gMCB8fCB1bnNpZ25lZF9vZmZzZXRzKGZpbGUpKSB7CiAJCWlmIChvZmZzZXQgIT0gZmlsZS0+Zl9wb3MpIHsKIAkJCWZpbGUtPmZfcG9zID0gb2Zmc2V0OwogCQkJZmlsZS0+Zl92ZXJzaW9uID0gMDsKQEAgLTI1Miw5ICsyNDMsMTMgQEAKIAlpZiAodW5saWtlbHkoKHNzaXplX3QpIGNvdW50IDwgMCkpCiAJCXJldHVybiByZXR2YWw7CiAJcG9zID0gKnBwb3M7Ci0JaWYgKHVubGlrZWx5KChwb3MgPCAwKSB8fCAobG9mZl90KSAocG9zICsgY291bnQpIDwgMCkpIHsKLQkJcmV0dmFsID0gX19uZWdhdGl2ZV9mcG9zX2NoZWNrKGZpbGUsIHBvcywgY291bnQpOwotCQlpZiAocmV0dmFsKQorCWlmICh1bmxpa2VseShwb3MgPCAwKSkgeworCQlpZiAoIXVuc2lnbmVkX29mZnNldHMoZmlsZSkpCisJCQlyZXR1cm4gcmV0dmFsOworCQlpZiAoY291bnQgPj0gLXBvcykgLyogYm90aCB2YWx1ZXMgYXJlIGluIDAuLkxMT05HX01BWCAqLworCQkJcmV0dXJuIC1FT1ZFUkZMT1c7CisJfSBlbHNlIGlmICh1bmxpa2VseSgobG9mZl90KSAocG9zICsgY291bnQpIDwgMCkpIHsKKwkJaWYgKCF1bnNpZ25lZF9vZmZzZXRzKGZpbGUpKQogCQkJcmV0dXJuIHJldHZhbDsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3ByaW50cy5jIGIvZnMvcmVpc2VyZnMvcHJpbnRzLmMKaW5kZXggYWRiYzZmNS4uNDVkZTk4YiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcHJpbnRzLmMKKysrIGIvZnMvcmVpc2VyZnMvcHJpbnRzLmMKQEAgLTU4NiwxMyArNTg2LDEzIEBACiAJdmFfbGlzdCBhcmdzOwogCWludCBtb2RlLCBmaXJzdCwgbGFzdDsKIAotCXZhX3N0YXJ0KGFyZ3MsIGJoKTsKLQogCWlmICghYmgpIHsKIAkJcHJpbnRrKCJwcmludF9ibG9jazogYnVmZmVyIGlzIE5VTExcbiIpOwogCQlyZXR1cm47CiAJfQogCisJdmFfc3RhcnQoYXJncywgYmgpOworCiAJbW9kZSA9IHZhX2FyZyhhcmdzLCBpbnQpOwogCWZpcnN0ID0gdmFfYXJnKGFyZ3MsIGludCk7CiAJbGFzdCA9IHZhX2FyZyhhcmdzLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZnMvc2VsZWN0LmMgYi9mcy9zZWxlY3QuYwppbmRleCBiN2IxMGFhLi5lNTY1NjBkIDEwMDY0NAotLS0gYS9mcy9zZWxlY3QuYworKysgYi9mcy9zZWxlY3QuYwpAQCAtMzA2LDYgKzMwNiw4IEBACiAJCXJ0cy50dl9zZWMgPSBydHMudHZfbnNlYyA9IDA7CiAKIAlpZiAodGltZXZhbCkgeworCQlpZiAoc2l6ZW9mKHJ0dikgPiBzaXplb2YocnR2LnR2X3NlYykgKyBzaXplb2YocnR2LnR2X3VzZWMpKQorCQkJbWVtc2V0KCZydHYsIDAsIHNpemVvZihydHYpKTsKIAkJcnR2LnR2X3NlYyA9IHJ0cy50dl9zZWM7CiAJCXJ0di50dl91c2VjID0gcnRzLnR2X25zZWMgLyBOU0VDX1BFUl9VU0VDOwogCmRpZmYgLS1naXQgYS9mcy9zeXN2L25hbWVpLmMgYi9mcy9zeXN2L25hbWVpLmMKaW5kZXggYjVlNjhkYS4uYjQyN2IxMiAxMDA2NDQKLS0tIGEvZnMvc3lzdi9uYW1laS5jCisrKyBiL2ZzL3N5c3YvbmFtZWkuYwpAQCAtNDgsNyArNDgsNiBAQAogCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gTlVMTDsKIAlpbm9fdCBpbm87CiAKLQlkX3NldF9kX29wKGRlbnRyeSwgZGlyLT5pX3NiLT5zX3Jvb3QtPmRfb3ApOwogCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiBTWVNWX05BTUVMRU4pCiAJCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOwogCWlubyA9IHN5c3ZfaW5vZGVfYnlfbmFtZShkZW50cnkpOwpkaWZmIC0tZ2l0IGEvZnMvc3lzdi9zdXBlci5jIGIvZnMvc3lzdi9zdXBlci5jCmluZGV4IDc2NzEyYWUuLmY2MGMxOTYgMTAwNjQ0Ci0tLSBhL2ZzL3N5c3Yvc3VwZXIuYworKysgYi9mcy9zeXN2L3N1cGVyLmMKQEAgLTMzMiw2ICszMzIsMTAgQEAKIAlzYi0+c19tYWdpYyA9IFNZU1ZfTUFHSUNfQkFTRSArIHNiaS0+c190eXBlOwogCS8qIHNldCB1cCBlbm91Z2ggc28gdGhhdCBpdCBjYW4gcmVhZCBhbiBpbm9kZSAqLwogCXNiLT5zX29wID0gJnN5c3Zfc29wczsKKwlpZiAoc2JpLT5zX2ZvcmNlZF9ybykKKwkJc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOworCWlmIChzYmktPnNfdHJ1bmNhdGUpCisJCXNiLT5zX2Rfb3AgPSAmc3lzdl9kZW50cnlfb3BlcmF0aW9uczsKIAlyb290X2lub2RlID0gc3lzdl9pZ2V0KHNiLCBTWVNWX1JPT1RfSU5PKTsKIAlpZiAoSVNfRVJSKHJvb3RfaW5vZGUpKSB7CiAJCXByaW50aygiU3lzViBGUzogZ2V0IHJvb3QgaW5vZGUgZmFpbGVkXG4iKTsKQEAgLTM0MywxMCArMzQ3LDYgQEAKIAkJcHJpbnRrKCJTeXNWIEZTOiBnZXQgcm9vdCBkZW50cnkgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmIChzYmktPnNfZm9yY2VkX3JvKQotCQlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7Ci0JaWYgKHNiaS0+c190cnVuY2F0ZSkKLQkJZF9zZXRfZF9vcChzYi0+c19yb290LCAmc3lzdl9kZW50cnlfb3BlcmF0aW9ucyk7CiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3VkZi9LY29uZmlnIGIvZnMvdWRmL0tjb25maWcKaW5kZXggZjhkZWYzYy4uMGUwZTk5YiAxMDA2NDQKLS0tIGEvZnMvdWRmL0tjb25maWcKKysrIGIvZnMvdWRmL0tjb25maWcKQEAgLTEsNiArMSw1IEBACiBjb25maWcgVURGX0ZTCiAJdHJpc3RhdGUgIlVERiBmaWxlIHN5c3RlbSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQktMICMgbmVlZHMgc2VyaW91cyB3b3JrIHRvIHJlbW92ZQogCXNlbGVjdCBDUkNfSVRVX1QKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBuZXcgZmlsZSBzeXN0ZW0gdXNlZCBvbiBzb21lIENELVJPTXMgYW5kIERWRHMuIFNheSBZIGlmCmRpZmYgLS1naXQgYS9mcy91ZGYvYmFsbG9jLmMgYi9mcy91ZGYvYmFsbG9jLmMKaW5kZXggYjYwOGVmYS4uMzA2ZWUzOSAxMDA2NDQKLS0tIGEvZnMvdWRmL2JhbGxvYy5jCisrKyBiL2ZzL3VkZi9iYWxsb2MuYwpAQCAtMTU3LDEwICsxNTcsOSBAQAogCQkJCXVkZl9kZWJ1ZygiYml0ICVsZCBhbHJlYWR5IHNldFxuIiwgYml0ICsgaSk7CiAJCQkJdWRmX2RlYnVnKCJieXRlPSUyeFxuIiwKIAkJCQkJKChjaGFyICopYmgtPmJfZGF0YSlbKGJpdCArIGkpID4+IDNdKTsKLQkJCX0gZWxzZSB7Ci0JCQkJdWRmX2FkZF9mcmVlX3NwYWNlKHNiLCBzYmktPnNfcGFydGl0aW9uLCAxKTsKIAkJCX0KIAkJfQorCQl1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2IsIHNiaS0+c19wYXJ0aXRpb24sIGNvdW50KTsKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQlpZiAob3ZlcmZsb3cpIHsKIAkJCWJsb2NrICs9IGNvdW50OwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2Rpci5jIGIvZnMvdWRmL2Rpci5jCmluZGV4IDUxNTUyYmYuLmViOGJmZTIgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9kaXIuYworKysgYi9mcy91ZGYvZGlyLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KIAogI2luY2x1ZGUgInVkZl9pLmgiCkBAIC0xOTAsMTggKzE4OSwxNCBAQAogCXN0cnVjdCBpbm9kZSAqZGlyID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgcmVzdWx0OwogCi0JbG9ja19rZXJuZWwoKTsKLQogCWlmIChmaWxwLT5mX3BvcyA9PSAwKSB7CiAJCWlmIChmaWxsZGlyKGRpcmVudCwgIi4iLCAxLCBmaWxwLT5mX3BvcywgZGlyLT5pX2lubywgRFRfRElSKSA8IDApIHsKLQkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWZpbHAtPmZfcG9zKys7CiAJfQogCiAJcmVzdWx0ID0gZG9fdWRmX3JlYWRkaXIoZGlyLCBmaWxwLCBmaWxsZGlyLCBkaXJlbnQpOwotCXVubG9ja19rZXJuZWwoKTsKICAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmMKaW5kZXggNjZiOWU3ZS4uODljNzg0OCAxMDA2NDQKLS0tIGEvZnMvdWRmL2ZpbGUuYworKysgYi9mcy91ZGYvZmlsZS5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+IC8qIG1lbXNldCAqLwogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvYWlvLmg+CkBAIC0xMTQsNiArMTEzLDcgQEAKIAlzaXplX3QgY291bnQgPSBpb2NiLT5raV9sZWZ0OwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSShpbm9kZSk7CiAKKwlkb3duX3dyaXRlKCZpaW5mby0+aV9kYXRhX3NlbSk7CiAJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCKSB7CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpCiAJCQlwb3MgPSBpbm9kZS0+aV9zaXplOwpAQCAtMTI2LDYgKzEyNiw3IEBACiAJCQl1ZGZfZXhwYW5kX2ZpbGVfYWRpbmljYihpbm9kZSwgcG9zICsgY291bnQsICZlcnIpOwogCQkJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCKSB7CiAJCQkJdWRmX2RlYnVnKCJ1ZGZfZXhwYW5kX2FkaW5pY2I6IGVycj0lZFxuIiwgZXJyKTsKKwkJCQl1cF93cml0ZSgmaWluZm8tPmlfZGF0YV9zZW0pOwogCQkJCXJldHVybiBlcnI7CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0xMzUsNiArMTM2LDcgQEAKIAkJCQlpaW5mby0+aV9sZW5BbGxvYyA9IGlub2RlLT5pX3NpemU7CiAJCX0KIAl9CisJdXBfd3JpdGUoJmlpbmZvLT5pX2RhdGFfc2VtKTsKIAogCXJldHZhbCA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwcG9zKTsKIAlpZiAocmV0dmFsID4gMCkKQEAgLTE0OSw4ICsxNTEsNiBAQAogCWxvbmcgb2xkX2Jsb2NrLCBuZXdfYmxvY2s7CiAJaW50IHJlc3VsdCA9IC1FSU5WQUw7CiAKLQlsb2NrX2tlcm5lbCgpOwotCiAJaWYgKGZpbGVfcGVybWlzc2lvbihmaWxwLCBNQVlfUkVBRCkgIT0gMCkgewogCQl1ZGZfZGVidWcoIm5vIHBlcm1pc3Npb24gdG8gYWNjZXNzIGlub2RlICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKIAkJcmVzdWx0ID0gLUVQRVJNOwpAQCAtMTk2LDcgKzE5Niw2IEBACiAJfQogCiBvdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIwNCwxMCArMjAzLDEwIEBACiB7CiAJaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CiAJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQkJbG9ja19rZXJuZWwoKTsKKwkJZG93bl93cml0ZSgmVURGX0koaW5vZGUpLT5pX2RhdGFfc2VtKTsKIAkJdWRmX2Rpc2NhcmRfcHJlYWxsb2MoaW5vZGUpOwogCQl1ZGZfdHJ1bmNhdGVfdGFpbF9leHRlbnQoaW5vZGUpOwotCQl1bmxvY2tfa2VybmVsKCk7CisJCXVwX3dyaXRlKCZVREZfSShpbm9kZSktPmlfZGF0YV9zZW0pOwogCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy91ZGYvaWFsbG9jLmMgYi9mcy91ZGYvaWFsbG9jLmMKaW5kZXggNzVkOTMwNC4uNmZiN2UwYSAxMDA2NDQKLS0tIGEvZnMvdWRmL2lhbGxvYy5jCisrKyBiL2ZzL3VkZi9pYWxsb2MuYwpAQCAtOTIsMjggKzkyLDE5IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCW11dGV4X2xvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJaWYgKHNiaS0+c19sdmlkX2JoKSB7Ci0JCXN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzYyAqbHZpZCA9Ci0JCQkoc3RydWN0IGxvZ2ljYWxWb2xJbnRlZ3JpdHlEZXNjICopCi0JCQlzYmktPnNfbHZpZF9iaC0+Yl9kYXRhOwotCQlzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2NJbXBVc2UgKmx2aWRpdSA9Ci0JCQkJCQkJdWRmX3NiX2x2aWRpdShzYmkpOwotCQlzdHJ1Y3QgbG9naWNhbFZvbEhlYWRlckRlc2MgKmx2aGQ7Ci0JCXVpbnQ2NF90IHVuaXF1ZUlEOwotCQlsdmhkID0gKHN0cnVjdCBsb2dpY2FsVm9sSGVhZGVyRGVzYyAqKQotCQkJCShsdmlkLT5sb2dpY2FsVm9sQ29udGVudHNVc2UpOworCQlzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2NJbXBVc2UgKmx2aWRpdTsKKworCQlpaW5mby0+aV91bmlxdWUgPSBsdmlkX2dldF91bmlxdWVfaWQoc2IpOworCQltdXRleF9sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOworCQlsdmlkaXUgPSB1ZGZfc2JfbHZpZGl1KHNiaSk7CiAJCWlmIChTX0lTRElSKG1vZGUpKQogCQkJbGUzMl9hZGRfY3B1KCZsdmlkaXUtPm51bURpcnMsIDEpOwogCQllbHNlCiAJCQlsZTMyX2FkZF9jcHUoJmx2aWRpdS0+bnVtRmlsZXMsIDEpOwotCQlpaW5mby0+aV91bmlxdWUgPSB1bmlxdWVJRCA9IGxlNjRfdG9fY3B1KGx2aGQtPnVuaXF1ZUlEKTsKLQkJaWYgKCEoKyt1bmlxdWVJRCAmIDB4MDAwMDAwMDBGRkZGRkZGRlVMKSkKLQkJCXVuaXF1ZUlEICs9IDE2OwotCQlsdmhkLT51bmlxdWVJRCA9IGNwdV90b19sZTY0KHVuaXF1ZUlEKTsKIAkJdWRmX3VwZGF0ZWRfbHZpZChzYik7CisJCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCiAJaW5vZGVfaW5pdF9vd25lcihpbm9kZSwgZGlyLCBtb2RlKTsKIApkaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuYwppbmRleCBmYzQ4ZjM3Li5jNmEyZTc4IDEwMDY0NAotLS0gYS9mcy91ZGYvaW5vZGUuYworKysgYi9mcy91ZGYvaW5vZGUuYwpAQCAtMzEsNyArMzEsNiBAQAogCiAjaW5jbHVkZSAidWRmZGVjbC5oIgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KQEAgLTUxLDYgKzUwLDcgQEAKIHN0YXRpYyBtb2RlX3QgdWRmX2NvbnZlcnRfcGVybWlzc2lvbnMoc3RydWN0IGZpbGVFbnRyeSAqKTsKIHN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKIHN0YXRpYyB2b2lkIHVkZl9maWxsX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CitzdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogc3RhdGljIGludCB1ZGZfYWxsb2NfaV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCBzaXplKTsKIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmlub2RlX2dldGJsayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIGludCAqLAogCQkJCQlzZWN0b3JfdCAqLCBpbnQgKik7CkBAIC03OSw5ICs3OSw3IEBACiAJCXdhbnRfZGVsZXRlID0gMTsKIAkJaW5vZGUtPmlfc2l6ZSA9IDA7CiAJCXVkZl90cnVuY2F0ZShpbm9kZSk7Ci0JCWxvY2tfa2VybmVsKCk7CiAJCXVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIElTX1NZTkMoaW5vZGUpKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCX0KIAlpbnZhbGlkYXRlX2lub2RlX2J1ZmZlcnMoaW5vZGUpOwogCWVuZF93cml0ZWJhY2soaW5vZGUpOwpAQCAtOTcsOSArOTUsNyBAQAogCWtmcmVlKGlpbmZvLT5pX2V4dC5pX2RhdGEpOwogCWlpbmZvLT5pX2V4dC5pX2RhdGEgPSBOVUxMOwogCWlmICh3YW50X2RlbGV0ZSkgewotCQlsb2NrX2tlcm5lbCgpOwogCQl1ZGZfZnJlZV9pbm9kZShpbm9kZSk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAl9CiB9CiAKQEAgLTMwMiwxMCArMjk4LDkgQEAKIAllcnIgPSAtRUlPOwogCW5ldyA9IDA7CiAJYmggPSBOVUxMOwotCi0JbG9ja19rZXJuZWwoKTsKLQogCWlpbmZvID0gVURGX0koaW5vZGUpOworCisJZG93bl93cml0ZSgmaWluZm8tPmlfZGF0YV9zZW0pOwogCWlmIChibG9jayA9PSBpaW5mby0+aV9uZXh0X2FsbG9jX2Jsb2NrICsgMSkgewogCQlpaW5mby0+aV9uZXh0X2FsbG9jX2Jsb2NrKys7CiAJCWlpbmZvLT5pX25leHRfYWxsb2NfZ29hbCsrOwpAQCAtMzI0LDcgKzMxOSw3IEBACiAJbWFwX2JoKGJoX3Jlc3VsdCwgaW5vZGUtPmlfc2IsIHBoeXMpOwogCiBhYm9ydDoKLQl1bmxvY2tfa2VybmVsKCk7CisJdXBfd3JpdGUoJmlpbmZvLT5pX2RhdGFfc2VtKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMDIyLDE2ICsxMDE3LDE2IEBACiAJaWYgKElTX0FQUEVORChpbm9kZSkgfHwgSVNfSU1NVVRBQkxFKGlub2RlKSkKIAkJcmV0dXJuOwogCi0JbG9ja19rZXJuZWwoKTsKIAlpaW5mbyA9IFVERl9JKGlub2RlKTsKIAlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IpIHsKKwkJZG93bl93cml0ZSgmaWluZm8tPmlfZGF0YV9zZW0pOwogCQlpZiAoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIDwKIAkJCQkodWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKSArCiAJCQkJIGlub2RlLT5pX3NpemUpKSB7CiAJCQl1ZGZfZXhwYW5kX2ZpbGVfYWRpbmljYihpbm9kZSwgaW5vZGUtPmlfc2l6ZSwgJmVycik7CiAJCQlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IpIHsKIAkJCQlpbm9kZS0+aV9zaXplID0gaWluZm8tPmlfbGVuQWxsb2M7Ci0JCQkJdW5sb2NrX2tlcm5lbCgpOworCQkJCXVwX3dyaXRlKCZpaW5mby0+aV9kYXRhX3NlbSk7CiAJCQkJcmV0dXJuOwogCQkJfSBlbHNlCiAJCQkJdWRmX3RydW5jYXRlX2V4dGVudHMoaW5vZGUpOwpAQCAtMTA0MiwxMCArMTAzNywxMyBAQAogCQkJCW9mZnNldCAtIHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSkpOwogCQkJaWluZm8tPmlfbGVuQWxsb2MgPSBpbm9kZS0+aV9zaXplOwogCQl9CisJCXVwX3dyaXRlKCZpaW5mby0+aV9kYXRhX3NlbSk7CiAJfSBlbHNlIHsKIAkJYmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplLAogCQkJCSAgICB1ZGZfZ2V0X2Jsb2NrKTsKKwkJZG93bl93cml0ZSgmaWluZm8tPmlfZGF0YV9zZW0pOwogCQl1ZGZfdHJ1bmNhdGVfZXh0ZW50cyhpbm9kZSk7CisJCXVwX3dyaXRlKCZpaW5mby0+aV9kYXRhX3NlbSk7CiAJfQogCiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IGN1cnJlbnRfZnNfdGltZShpbm9kZS0+aV9zYik7CkBAIC0xMDUzLDcgKzEwNTEsNiBAQAogCQl1ZGZfc3luY19pbm9kZShpbm9kZSk7CiAJZWxzZQogCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQl1bmxvY2tfa2VybmVsKCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fdWRmX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTEyMDIsNiArMTE5OSw3IEBACiAJCXJldHVybjsKIAl9CiAKKwlyZWFkX2xvY2soJnNiaS0+c19jcmVkX2xvY2spOwogCWlub2RlLT5pX3VpZCA9IGxlMzJfdG9fY3B1KGZlLT51aWQpOwogCWlmIChpbm9kZS0+aV91aWQgPT0gLTEgfHwKIAkgICAgVURGX1FVRVJZX0ZMQUcoaW5vZGUtPmlfc2IsIFVERl9GTEFHX1VJRF9JR05PUkUpIHx8CkBAIC0xMjE0LDEzICsxMjEyLDYgQEAKIAkgICAgVURGX1FVRVJZX0ZMQUcoaW5vZGUtPmlfc2IsIFVERl9GTEFHX0dJRF9TRVQpKQogCQlpbm9kZS0+aV9naWQgPSBVREZfU0IoaW5vZGUtPmlfc2IpLT5zX2dpZDsKIAotCWlub2RlLT5pX25saW5rID0gbGUxNl90b19jcHUoZmUtPmZpbGVMaW5rQ291bnQpOwotCWlmICghaW5vZGUtPmlfbmxpbmspCi0JCWlub2RlLT5pX25saW5rID0gMTsKLQotCWlub2RlLT5pX3NpemUgPSBsZTY0X3RvX2NwdShmZS0+aW5mb3JtYXRpb25MZW5ndGgpOwotCWlpbmZvLT5pX2xlbkV4dGVudHMgPSBpbm9kZS0+aV9zaXplOwotCiAJaWYgKGZlLT5pY2JUYWcuZmlsZVR5cGUgIT0gSUNCVEFHX0ZJTEVfVFlQRV9ESVJFQ1RPUlkgJiYKIAkJCXNiaS0+c19mbW9kZSAhPSBVREZfSU5WQUxJRF9NT0RFKQogCQlpbm9kZS0+aV9tb2RlID0gc2JpLT5zX2Ztb2RlOwpAQCAtMTIzMCw2ICsxMjIxLDE0IEBACiAJZWxzZQogCQlpbm9kZS0+aV9tb2RlID0gdWRmX2NvbnZlcnRfcGVybWlzc2lvbnMoZmUpOwogCWlub2RlLT5pX21vZGUgJj0gfnNiaS0+c191bWFzazsKKwlyZWFkX3VubG9jaygmc2JpLT5zX2NyZWRfbG9jayk7CisKKwlpbm9kZS0+aV9ubGluayA9IGxlMTZfdG9fY3B1KGZlLT5maWxlTGlua0NvdW50KTsKKwlpZiAoIWlub2RlLT5pX25saW5rKQorCQlpbm9kZS0+aV9ubGluayA9IDE7CisKKwlpbm9kZS0+aV9zaXplID0gbGU2NF90b19jcHUoZmUtPmluZm9ybWF0aW9uTGVuZ3RoKTsKKwlpaW5mby0+aV9sZW5FeHRlbnRzID0gaW5vZGUtPmlfc2l6ZTsKIAogCWlmIChpaW5mby0+aV9lZmUgPT0gMCkgewogCQlpbm9kZS0+aV9ibG9ja3MgPSBsZTY0X3RvX2NwdShmZS0+bG9naWNhbEJsb2Nrc1JlY29yZGVkKSA8PApAQCAtMTM3MywxNiArMTM3MiwxMCBAQAogCiBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewotCWludCByZXQ7Ci0KLQlsb2NrX2tlcm5lbCgpOwotCXJldCA9IHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiB1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCB3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7CiB9CiAKLWludCB1ZGZfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIGludCB1ZGZfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXJldHVybiB1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCAxKTsKIH0KQEAgLTIwNDgsNyArMjA0MSw3IEBACiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0ge307CiAJaW50IHJldDsKIAotCWxvY2tfa2VybmVsKCk7CisJZG93bl9yZWFkKCZVREZfSShpbm9kZSktPmlfZGF0YV9zZW0pOwogCiAJaWYgKGlub2RlX2JtYXAoaW5vZGUsIGJsb2NrLCAmZXBvcywgJmVsb2MsICZlbGVuLCAmb2Zmc2V0KSA9PQogCQkJCQkJKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQpAQCAtMjA1Niw3ICsyMDQ5LDcgQEAKIAllbHNlCiAJCXJldCA9IDA7CiAKLQl1bmxvY2tfa2VybmVsKCk7CisJdXBfcmVhZCgmVURGX0koaW5vZGUpLT5pX2RhdGFfc2VtKTsKIAlicmVsc2UoZXBvcy5iaCk7CiAKIAlpZiAoVURGX1FVRVJZX0ZMQUcoaW5vZGUtPmlfc2IsIFVERl9GTEFHX1ZBUkNPTlYpKQpkaWZmIC0tZ2l0IGEvZnMvdWRmL25hbWVpLmMgYi9mcy91ZGYvbmFtZWkuYwppbmRleCA2ZDhkYzAyLi4yYmUwZjllIDEwMDY0NAotLS0gYS9mcy91ZGYvbmFtZWkuYworKysgYi9mcy91ZGYvbmFtZWkuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjLWl0dS10Lmg+CkBAIC0yMjgsMTAgKzIyNyw4IEBACiAJCX0KIAogCQlpZiAoKGNmaS0+ZmlsZUNoYXJhY3RlcmlzdGljcyAmIEZJRF9GSUxFX0NIQVJfUEFSRU5UKSAmJgotCQkgICAgaXNkb3Rkb3QpIHsKLQkJCWJyZWxzZShlcG9zLmJoKTsKLQkJCXJldHVybiBmaTsKLQkJfQorCQkgICAgaXNkb3Rkb3QpCisJCQlnb3RvIG91dF9vazsKIAogCQlpZiAoIWxmaSkKIAkJCWNvbnRpbnVlOwpAQCAtMjYzLDcgKzI2MCw2IEBACiAJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+IFVERl9OQU1FX0xFTiAtIDIpCiAJCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOwogCi0JbG9ja19rZXJuZWwoKTsKICNpZmRlZiBVREZfUkVDT1ZFUlkKIAkvKiB0ZW1wb3Jhcnkgc2hvcnRoYW5kIGZvciBzcGVjaWZ5aW5nIGZpbGVzIGJ5IGlub2RlIG51bWJlciAqLwogCWlmICghc3RybmNtcChkZW50cnktPmRfbmFtZS5uYW1lLCAiLkI9IiwgMykpIHsKQEAgLTI3NSw3ICsyNzEsNiBAQAogCQl9OwogCQlpbm9kZSA9IHVkZl9pZ2V0KGRpci0+aV9zYiwgbGIpOwogCQlpZiAoIWlub2RlKSB7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKIAkJfQogCX0gZWxzZQpAQCAtMjkxLDExICsyODYsOSBAQAogCQlsb2MgPSBsZWxiX3RvX2NwdShjZmkuaWNiLmV4dExvY2F0aW9uKTsKIAkJaW5vZGUgPSB1ZGZfaWdldChkaXItPmlfc2IsICZsb2MpOwogCQlpZiAoIWlub2RlKSB7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKIAkJfQogCX0KLQl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7CiB9CkBAIC00NzYsMTUgKzQ2OSwxOSBAQAogCQkJCWZfcG9zID4+IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cywgMSwgZXJyKTsKIAkJaWYgKCFmaWJoLT5lYmgpCiAJCQlnb3RvIG91dF9lcnI7CisJCS8qIEV4dGVudHMgY291bGQgaGF2ZSBiZWVuIG1lcmdlZCwgaW52YWxpZGF0ZSBvdXIgcG9zaXRpb24gKi8KKwkJYnJlbHNlKGVwb3MuYmgpOworCQllcG9zLmJoID0gTlVMTDsKKwkJZXBvcy5ibG9jayA9IGRpbmZvLT5pX2xvY2F0aW9uOworCQllcG9zLm9mZnNldCA9IHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChkaXIpOwogCiAJCWlmICghZmliaC0+c29mZnNldCkgewotCQkJaWYgKHVkZl9uZXh0X2FleHQoZGlyLCAmZXBvcywgJmVsb2MsICZlbGVuLCAxKSA9PQotCQkJICAgIChFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkgewotCQkJCWJsb2NrID0gZWxvYy5sb2dpY2FsQmxvY2tOdW0gKyAoKGVsZW4gLSAxKSA+PgorCQkJLyogRmluZCB0aGUgZnJlc2hseSBhbGxvY2F0ZWQgYmxvY2sgKi8KKwkJCXdoaWxlICh1ZGZfbmV4dF9hZXh0KGRpciwgJmVwb3MsICZlbG9jLCAmZWxlbiwgMSkgPT0KKwkJCQkoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpCisJCQkJOworCQkJYmxvY2sgPSBlbG9jLmxvZ2ljYWxCbG9ja051bSArICgoZWxlbiAtIDEpID4+CiAJCQkJCWRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cyk7Ci0JCQl9IGVsc2UKLQkJCQlibG9jaysrOwotCiAJCQlicmVsc2UoZmliaC0+c2JoKTsKIAkJCWZpYmgtPnNiaCA9IGZpYmgtPmViaDsKIAkJCWZpID0gKHN0cnVjdCBmaWxlSWRlbnREZXNjICopKGZpYmgtPnNiaC0+Yl9kYXRhKTsKQEAgLTU2MiwxMCArNTU5LDggQEAKIAlpbnQgZXJyOwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm87CiAKLQlsb2NrX2tlcm5lbCgpOwogCWlub2RlID0gdWRmX25ld19pbm9kZShkaXIsIG1vZGUsICZlcnIpOwogCWlmICghaW5vZGUpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNTgzLDcgKzU3OCw2IEBACiAJCWlub2RlLT5pX25saW5rLS07CiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCQlpcHV0KGlub2RlKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gZXJyOwogCX0KIAljZmkuaWNiLmV4dExlbmd0aCA9IGNwdV90b19sZTMyKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CkBAIC01OTYsNyArNTkwLDYgQEAKIAlpZiAoZmliaC5zYmggIT0gZmliaC5lYmgpCiAJCWJyZWxzZShmaWJoLmViaCk7CiAJYnJlbHNlKGZpYmguc2JoKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAogCXJldHVybiAwOwpAQCAtNjE0LDcgKzYwNyw2IEBACiAJaWYgKCFvbGRfdmFsaWRfZGV2KHJkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWxvY2tfa2VybmVsKCk7CiAJZXJyID0gLUVJTzsKIAlpbm9kZSA9IHVkZl9uZXdfaW5vZGUoZGlyLCBtb2RlLCAmZXJyKTsKIAlpZiAoIWlub2RlKQpAQCAtNjI3LDcgKzYxOSw2IEBACiAJCWlub2RlLT5pX25saW5rLS07CiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCQlpcHV0KGlub2RlKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gZXJyOwogCX0KIAljZmkuaWNiLmV4dExlbmd0aCA9IGNwdV90b19sZTMyKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CkBAIC02NDYsNyArNjM3LDYgQEAKIAllcnIgPSAwOwogCiBvdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY1OSw3ICs2NDksNiBAQAogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqZGluZm8gPSBVREZfSShkaXIpOwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm87CiAKLQlsb2NrX2tlcm5lbCgpOwogCWVyciA9IC1FTUxJTks7CiAJaWYgKGRpci0+aV9ubGluayA+PSAoMjU2IDw8IHNpemVvZihkaXItPmlfbmxpbmspKSAtIDEpCiAJCWdvdG8gb3V0OwpAQCAtNzEyLDcgKzcwMSw2IEBACiAJZXJyID0gMDsKIAogb3V0OgotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03OTQsNyArNzgyLDYgQEAKIAlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgdGxvYzsKIAogCXJldHZhbCA9IC1FTk9FTlQ7Ci0JbG9ja19rZXJuZWwoKTsKIAlmaSA9IHVkZl9maW5kX2VudHJ5KGRpciwgJmRlbnRyeS0+ZF9uYW1lLCAmZmliaCwgJmNmaSk7CiAJaWYgKCFmaSkKIAkJZ290byBvdXQ7CkBAIC04MjYsNyArODEzLDYgQEAKIAlicmVsc2UoZmliaC5zYmgpOwogCiBvdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTg0MCw3ICs4MjYsNiBAQAogCXN0cnVjdCBrZXJuZWxfbGJfYWRkciB0bG9jOwogCiAJcmV0dmFsID0gLUVOT0VOVDsKLQlsb2NrX2tlcm5lbCgpOwogCWZpID0gdWRmX2ZpbmRfZW50cnkoZGlyLCAmZGVudHJ5LT5kX25hbWUsICZmaWJoLCAmY2ZpKTsKIAlpZiAoIWZpKQogCQlnb3RvIG91dDsKQEAgLTg3MCw3ICs4NTUsNiBAQAogCWJyZWxzZShmaWJoLnNiaCk7CiAKIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtODkwLDIxICs4NzQsMjEgQEAKIAlpbnQgYmxvY2s7CiAJdW5zaWduZWQgY2hhciAqbmFtZSA9IE5VTEw7CiAJaW50IG5hbWVsZW47Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItPmlfc2I7CiAKLQlsb2NrX2tlcm5lbCgpOwogCWlub2RlID0gdWRmX25ld19pbm9kZShkaXIsIFNfSUZMTksgfCBTX0lSV1hVR08sICZlcnIpOwogCWlmICghaW5vZGUpCiAJCWdvdG8gb3V0OwogCisJaWluZm8gPSBVREZfSShpbm9kZSk7CisJZG93bl93cml0ZSgmaWluZm8tPmlfZGF0YV9zZW0pOwogCW5hbWUgPSBrbWFsbG9jKFVERl9OQU1FX0xFTiwgR0ZQX05PRlMpOwogCWlmICghbmFtZSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9ub19lbnRyeTsKIAl9CiAKLQlpaW5mbyA9IFVERl9JKGlub2RlKTsKIAlpbm9kZS0+aV9kYXRhLmFfb3BzID0gJnVkZl9zeW1saW5rX2FvcHM7CiAJaW5vZGUtPmlfb3AgPSAmdWRmX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIApAQCAtOTEyLDcgKzg5Niw3IEBACiAJCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCQl1aW50MzJfdCBic2l6ZTsKIAotCQlibG9jayA9IHVkZl9uZXdfYmxvY2soaW5vZGUtPmlfc2IsIGlub2RlLAorCQlibG9jayA9IHVkZl9uZXdfYmxvY2soc2IsIGlub2RlLAogCQkJCWlpbmZvLT5pX2xvY2F0aW9uLnBhcnRpdGlvblJlZmVyZW5jZU51bSwKIAkJCQlpaW5mby0+aV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0sICZlcnIpOwogCQlpZiAoIWJsb2NrKQpAQCAtOTIzLDE3ICs5MDcsMTcgQEAKIAkJZWxvYy5sb2dpY2FsQmxvY2tOdW0gPSBibG9jazsKIAkJZWxvYy5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPQogCQkJCWlpbmZvLT5pX2xvY2F0aW9uLnBhcnRpdGlvblJlZmVyZW5jZU51bTsKLQkJYnNpemUgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisJCWJzaXplID0gc2ItPnNfYmxvY2tzaXplOwogCQlpaW5mby0+aV9sZW5FeHRlbnRzID0gYnNpemU7CiAJCXVkZl9hZGRfYWV4dChpbm9kZSwgJmVwb3MsICZlbG9jLCBic2l6ZSwgMCk7CiAJCWJyZWxzZShlcG9zLmJoKTsKIAotCQlibG9jayA9IHVkZl9nZXRfcGJsb2NrKGlub2RlLT5pX3NiLCBibG9jaywKKwkJYmxvY2sgPSB1ZGZfZ2V0X3BibG9jayhzYiwgYmxvY2ssCiAJCQkJaWluZm8tPmlfbG9jYXRpb24ucGFydGl0aW9uUmVmZXJlbmNlTnVtLAogCQkJCTApOwotCQllcG9zLmJoID0gdWRmX3RnZXRibGsoaW5vZGUtPmlfc2IsIGJsb2NrKTsKKwkJZXBvcy5iaCA9IHVkZl90Z2V0YmxrKHNiLCBibG9jayk7CiAJCWxvY2tfYnVmZmVyKGVwb3MuYmgpOwotCQltZW1zZXQoZXBvcy5iaC0+Yl9kYXRhLCAweDAwLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOworCQltZW1zZXQoZXBvcy5iaC0+Yl9kYXRhLCAweDAwLCBic2l6ZSk7CiAJCXNldF9idWZmZXJfdXB0b2RhdGUoZXBvcy5iaCk7CiAJCXVubG9ja19idWZmZXIoZXBvcy5iaCk7CiAJCW1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKGVwb3MuYmgsIGlub2RlKTsKQEAgLTk0MSw3ICs5MjUsNyBAQAogCX0gZWxzZQogCQllYSA9IGlpbmZvLT5pX2V4dC5pX2RhdGEgKyBpaW5mby0+aV9sZW5FQXR0cjsKIAotCWVvZmZzZXQgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSB1ZGZfZXh0MF9vZmZzZXQoaW5vZGUpOworCWVvZmZzZXQgPSBzYi0+c19ibG9ja3NpemUgLSB1ZGZfZXh0MF9vZmZzZXQoaW5vZGUpOwogCXBjID0gKHN0cnVjdCBwYXRoQ29tcG9uZW50ICopZWE7CiAKIAlpZiAoKnN5bW5hbWUgPT0gJy8nKSB7CkBAIC05ODEsNyArOTY1LDcgQEAKIAkJfQogCiAJCWlmIChwYy0+Y29tcG9uZW50VHlwZSA9PSA1KSB7Ci0JCQluYW1lbGVuID0gdWRmX3B1dF9maWxlbmFtZShpbm9kZS0+aV9zYiwgY29tcHN0YXJ0LCBuYW1lLAorCQkJbmFtZWxlbiA9IHVkZl9wdXRfZmlsZW5hbWUoc2IsIGNvbXBzdGFydCwgbmFtZSwKIAkJCQkJCSAgIHN5bW5hbWUgLSBjb21wc3RhcnQpOwogCQkJaWYgKCFuYW1lbGVuKQogCQkJCWdvdG8gb3V0X25vX2VudHJ5OwpAQCAtMTAxNSwyNyArOTk5LDE2IEBACiAJZmkgPSB1ZGZfYWRkX2VudHJ5KGRpciwgZGVudHJ5LCAmZmliaCwgJmNmaSwgJmVycik7CiAJaWYgKCFmaSkKIAkJZ290byBvdXRfbm9fZW50cnk7Ci0JY2ZpLmljYi5leHRMZW5ndGggPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOworCWNmaS5pY2IuZXh0TGVuZ3RoID0gY3B1X3RvX2xlMzIoc2ItPnNfYmxvY2tzaXplKTsKIAljZmkuaWNiLmV4dExvY2F0aW9uID0gY3B1X3RvX2xlbGIoaWluZm8tPmlfbG9jYXRpb24pOwotCWJoID0gVURGX1NCKGlub2RlLT5pX3NiKS0+c19sdmlkX2JoOwotCWlmIChiaCkgewotCQlzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2MgKmx2aWQgPQotCQkJCShzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2MgKiliaC0+Yl9kYXRhOwotCQlzdHJ1Y3QgbG9naWNhbFZvbEhlYWRlckRlc2MgKmx2aGQ7Ci0JCXVpbnQ2NF90IHVuaXF1ZUlEOwotCQlsdmhkID0gKHN0cnVjdCBsb2dpY2FsVm9sSGVhZGVyRGVzYyAqKQotCQkJCWx2aWQtPmxvZ2ljYWxWb2xDb250ZW50c1VzZTsKLQkJdW5pcXVlSUQgPSBsZTY0X3RvX2NwdShsdmhkLT51bmlxdWVJRCk7CisJaWYgKFVERl9TQihpbm9kZS0+aV9zYiktPnNfbHZpZF9iaCkgewogCQkqKF9fbGUzMiAqKSgoc3RydWN0IGFsbG9jRGVzY0ltcFVzZSAqKWNmaS5pY2IuaW1wVXNlKS0+aW1wVXNlID0KLQkJCWNwdV90b19sZTMyKHVuaXF1ZUlEICYgMHgwMDAwMDAwMEZGRkZGRkZGVUwpOwotCQlpZiAoISgrK3VuaXF1ZUlEICYgMHgwMDAwMDAwMEZGRkZGRkZGVUwpKQotCQkJdW5pcXVlSUQgKz0gMTY7Ci0JCWx2aGQtPnVuaXF1ZUlEID0gY3B1X3RvX2xlNjQodW5pcXVlSUQpOwotCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CisJCQljcHVfdG9fbGUzMihsdmlkX2dldF91bmlxdWVfaWQoc2IpKTsKIAl9CiAJdWRmX3dyaXRlX2ZpKGRpciwgJmNmaSwgZmksICZmaWJoLCBOVUxMLCBOVUxMKTsKIAlpZiAoVURGX0koZGlyKS0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0lOX0lDQikKIAkJbWFya19pbm9kZV9kaXJ0eShkaXIpOworCXVwX3dyaXRlKCZpaW5mby0+aV9kYXRhX3NlbSk7CiAJaWYgKGZpYmguc2JoICE9IGZpYmguZWJoKQogCQlicmVsc2UoZmliaC5lYmgpOwogCWJyZWxzZShmaWJoLnNiaCk7CkBAIC0xMDQ0LDEwICsxMDE3LDEwIEBACiAKIG91dDoKIAlrZnJlZShuYW1lKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGVycjsKIAogb3V0X25vX2VudHJ5OgorCXVwX3dyaXRlKCZpaW5mby0+aV9kYXRhX3NlbSk7CiAJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCWlwdXQoaW5vZGUpOwogCWdvdG8gb3V0OwpAQCAtMTA2MCwzNiArMTAzMywyMCBAQAogCXN0cnVjdCB1ZGZfZmlsZWlkZW50X2JoIGZpYmg7CiAJc3RydWN0IGZpbGVJZGVudERlc2MgY2ZpLCAqZmk7CiAJaW50IGVycjsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCi0JbG9ja19rZXJuZWwoKTsKIAlpZiAoaW5vZGUtPmlfbmxpbmsgPj0gKDI1NiA8PCBzaXplb2YoaW5vZGUtPmlfbmxpbmspKSAtIDEpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVNTElOSzsKIAl9CiAKIAlmaSA9IHVkZl9hZGRfZW50cnkoZGlyLCBkZW50cnksICZmaWJoLCAmY2ZpLCAmZXJyKTsKIAlpZiAoIWZpKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJY2ZpLmljYi5leHRMZW5ndGggPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOwogCWNmaS5pY2IuZXh0TG9jYXRpb24gPSBjcHVfdG9fbGVsYihVREZfSShpbm9kZSktPmlfbG9jYXRpb24pOwotCWJoID0gVURGX1NCKGlub2RlLT5pX3NiKS0+c19sdmlkX2JoOwotCWlmIChiaCkgewotCQlzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2MgKmx2aWQgPQotCQkJCShzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2MgKiliaC0+Yl9kYXRhOwotCQlzdHJ1Y3QgbG9naWNhbFZvbEhlYWRlckRlc2MgKmx2aGQ7Ci0JCXVpbnQ2NF90IHVuaXF1ZUlEOwotCQlsdmhkID0gKHN0cnVjdCBsb2dpY2FsVm9sSGVhZGVyRGVzYyAqKQotCQkJCShsdmlkLT5sb2dpY2FsVm9sQ29udGVudHNVc2UpOwotCQl1bmlxdWVJRCA9IGxlNjRfdG9fY3B1KGx2aGQtPnVuaXF1ZUlEKTsKKwlpZiAoVURGX1NCKGlub2RlLT5pX3NiKS0+c19sdmlkX2JoKSB7CiAJCSooX19sZTMyICopKChzdHJ1Y3QgYWxsb2NEZXNjSW1wVXNlICopY2ZpLmljYi5pbXBVc2UpLT5pbXBVc2UgPQotCQkJY3B1X3RvX2xlMzIodW5pcXVlSUQgJiAweDAwMDAwMDAwRkZGRkZGRkZVTCk7Ci0JCWlmICghKCsrdW5pcXVlSUQgJiAweDAwMDAwMDAwRkZGRkZGRkZVTCkpCi0JCQl1bmlxdWVJRCArPSAxNjsKLQkJbHZoZC0+dW5pcXVlSUQgPSBjcHVfdG9fbGU2NCh1bmlxdWVJRCk7Ci0JCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwkJCWNwdV90b19sZTMyKGx2aWRfZ2V0X3VuaXF1ZV9pZChpbm9kZS0+aV9zYikpOwogCX0KIAl1ZGZfd3JpdGVfZmkoZGlyLCAmY2ZpLCBmaSwgJmZpYmgsIE5VTEwsIE5VTEwpOwogCWlmIChVREZfSShkaXIpLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCKQpAQCAtMTEwMyw3ICsxMDYwLDYgQEAKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlpaG9sZChpbm9kZSk7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMjQsNyArMTA4MCw2IEBACiAJc3RydWN0IGtlcm5lbF9sYl9hZGRyIHRsb2M7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICpvbGRfaWluZm8gPSBVREZfSShvbGRfaW5vZGUpOwogCi0JbG9ja19rZXJuZWwoKTsKIAlvZmkgPSB1ZGZfZmluZF9lbnRyeShvbGRfZGlyLCAmb2xkX2RlbnRyeS0+ZF9uYW1lLCAmb2ZpYmgsICZvY2ZpKTsKIAlpZiAob2ZpKSB7CiAJCWlmIChvZmliaC5zYmggIT0gb2ZpYmguZWJoKQpAQCAtMTI0OCw3ICsxMjAzLDYgQEAKIAkJCWJyZWxzZShuZmliaC5lYmgpOwogCQlicmVsc2UobmZpYmguc2JoKTsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTEyNjEsNyArMTIxNSw2IEBACiAJc3RydWN0IGZpbGVJZGVudERlc2MgY2ZpOwogCXN0cnVjdCB1ZGZfZmlsZWlkZW50X2JoIGZpYmg7CiAKLQlsb2NrX2tlcm5lbCgpOwogCWlmICghdWRmX2ZpbmRfZW50cnkoY2hpbGQtPmRfaW5vZGUsICZkb3Rkb3QsICZmaWJoLCAmY2ZpKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCkBAIC0xMjczLDExICsxMjI2LDkgQEAKIAlpbm9kZSA9IHVkZl9pZ2V0KGNoaWxkLT5kX2lub2RlLT5pX3NiLCAmdGxvYyk7CiAJaWYgKCFpbm9kZSkKIAkJZ290byBvdXRfdW5sb2NrOwotCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7CiBvdXRfdW5sb2NrOgotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvdWRmL3BhcnRpdGlvbi5jIGIvZnMvdWRmL3BhcnRpdGlvbi5jCmluZGV4IDc0NWViMjAuLmE3MTA5MGUgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9wYXJ0aXRpb24uYworKysgYi9mcy91ZGYvcGFydGl0aW9uLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogdWludDMyX3QgdWRmX2dldF9wYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdWludDMyX3QgYmxvY2ssCiAJCQl1aW50MTZfdCBwYXJ0aXRpb24sIHVpbnQzMl90IG9mZnNldCkKQEAgLTE1OSw3ICsxNjAsOSBAQAogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKIAl1MTYgcmVhbGxvY2F0aW9uVGFibGVMZW47CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKwlpbnQgcmV0ID0gMDsKIAorCW11dGV4X2xvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IHNiaS0+c19wYXJ0aXRpb25zOyBpKyspIHsKIAkJc3RydWN0IHVkZl9wYXJ0X21hcCAqbWFwID0gJnNiaS0+c19wYXJ0bWFwc1tpXTsKIAkJaWYgKG9sZF9ibG9jayA+IG1hcC0+c19wYXJ0aXRpb25fcm9vdCAmJgpAQCAtMTc1LDggKzE3OCwxMCBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAKLQkJCWlmICghc3QpCi0JCQkJcmV0dXJuIDE7CisJCQlpZiAoIXN0KSB7CisJCQkJcmV0ID0gMTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KIAogCQkJcmVhbGxvY2F0aW9uVGFibGVMZW4gPQogCQkJCQlsZTE2X3RvX2NwdShzdC0+cmVhbGxvY2F0aW9uVGFibGVMZW4pOwpAQCAtMjA3LDE0ICsyMTIsMTYgQEAKIAkJCQkJCSAgICAgKChvbGRfYmxvY2sgLQogCQkJCQkJCW1hcC0+c19wYXJ0aXRpb25fcm9vdCkgJgogCQkJCQkJICAgICAoc2RhdGEtPnNfcGFja2V0X2xlbiAtIDEpKTsKLQkJCQkJcmV0dXJuIDA7CisJCQkJCXJldCA9IDA7CisJCQkJCWdvdG8gb3V0OwogCQkJCX0gZWxzZSBpZiAob3JpZ0xvYyA9PSBwYWNrZXQpIHsKIAkJCQkJKm5ld19ibG9jayA9IGxlMzJfdG9fY3B1KAogCQkJCQkJCWVudHJ5LT5tYXBwZWRMb2NhdGlvbikgKwogCQkJCQkJICAgICAoKG9sZF9ibG9jayAtCiAJCQkJCQkJbWFwLT5zX3BhcnRpdGlvbl9yb290KSAmCiAJCQkJCQkgICAgIChzZGF0YS0+c19wYWNrZXRfbGVuIC0gMSkpOwotCQkJCQlyZXR1cm4gMDsKKwkJCQkJcmV0ID0gMDsKKwkJCQkJZ290byBvdXQ7CiAJCQkJfSBlbHNlIGlmIChvcmlnTG9jID4gcGFja2V0KQogCQkJCQlicmVhazsKIAkJCX0KQEAgLTI1MSwyMCArMjU4LDI0IEBACiAJCQkJCSAgICAgIHN0LT5tYXBFbnRyeVtrXS5tYXBwZWRMb2NhdGlvbikgKwogCQkJCQkoKG9sZF9ibG9jayAtIG1hcC0+c19wYXJ0aXRpb25fcm9vdCkgJgogCQkJCQkgKHNkYXRhLT5zX3BhY2tldF9sZW4gLSAxKSk7Ci0JCQkJcmV0dXJuIDA7CisJCQkJcmV0ID0gMDsKKwkJCQlnb3RvIG91dDsKIAkJCX0KIAotCQkJcmV0dXJuIDE7CisJCQlyZXQgPSAxOworCQkJZ290byBvdXQ7CiAJCX0gLyogaWYgb2xkX2Jsb2NrICovCiAJfQogCiAJaWYgKGkgPT0gc2JpLT5zX3BhcnRpdGlvbnMpIHsKIAkJLyogb3V0c2lkZSBvZiBwYXJ0aXRpb25zICovCiAJCS8qIGZvciBub3csIGZhaWwgPSkgKi8KLQkJcmV0dXJuIDE7CisJCXJldCA9IDE7CiAJfQogCi0JcmV0dXJuIDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB1aW50MzJfdCB1ZGZfdHJ5X3JlYWRfbWV0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBibG9jaywKZGlmZiAtLWdpdCBhL2ZzL3VkZi9zdXBlci5jIGIvZnMvdWRmL3N1cGVyLmMKaW5kZXggYjUzOWQ1My4uN2IyN2IwNiAxMDA2NDQKLS0tIGEvZnMvdWRmL3N1cGVyLmMKKysrIGIvZnMvdWRmL3N1cGVyLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KICNpbmNsdWRlIDxsaW51eC9ubHMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvdmZzLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtMTM1LDYgKzEzNCw3IEBACiAJZWktPmlfbmV4dF9hbGxvY19ibG9jayA9IDA7CiAJZWktPmlfbmV4dF9hbGxvY19nb2FsID0gMDsKIAllaS0+aV9zdHJhdDQwOTYgPSAwOworCWluaXRfcndzZW0oJmVpLT5pX2RhdGFfc2VtKTsKIAogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KQEAgLTU3NCwxMyArNTc0LDE0IEBACiAJaWYgKCF1ZGZfcGFyc2Vfb3B0aW9ucyhvcHRpb25zLCAmdW9wdCwgdHJ1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbG9ja19rZXJuZWwoKTsKKwl3cml0ZV9sb2NrKCZzYmktPnNfY3JlZF9sb2NrKTsKIAlzYmktPnNfZmxhZ3MgPSB1b3B0LmZsYWdzOwogCXNiaS0+c191aWQgICA9IHVvcHQudWlkOwogCXNiaS0+c19naWQgICA9IHVvcHQuZ2lkOwogCXNiaS0+c191bWFzayA9IHVvcHQudW1hc2s7CiAJc2JpLT5zX2Ztb2RlID0gdW9wdC5mbW9kZTsKIAlzYmktPnNfZG1vZGUgPSB1b3B0LmRtb2RlOworCXdyaXRlX3VubG9jaygmc2JpLT5zX2NyZWRfbG9jayk7CiAKIAlpZiAoc2JpLT5zX2x2aWRfYmgpIHsKIAkJaW50IHdyaXRlX3JldiA9IGxlMTZfdG9fY3B1KHVkZl9zYl9sdmlkaXUoc2JpKS0+bWluVURGV3JpdGVSZXYpOwpAQCAtNTk3LDcgKzU5OCw2IEBACiAJCXVkZl9vcGVuX2x2aWQoc2IpOwogCiBvdXRfdW5sb2NrOgotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTk2Niw5ICs5NjYsOSBAQAogCQkoc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCAqKSAqIG5yX2dyb3Vwcyk7CiAKIAlpZiAoc2l6ZSA8PSBQQUdFX1NJWkUpCi0JCWJpdG1hcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWJpdG1hcCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJZWxzZQotCQliaXRtYXAgPSB2bWFsbG9jKHNpemUpOyAvKiBUT0RPOiBnZXQgcmlkIG9mIHZtYWxsb2MgKi8KKwkJYml0bWFwID0gdnphbGxvYyhzaXplKTsgLyogVE9ETzogZ2V0IHJpZCBvZiB2emFsbG9jICovCiAKIAlpZiAoYml0bWFwID09IE5VTEwpIHsKIAkJdWRmX2Vycm9yKHNiLCBfX2Z1bmNfXywKQEAgLTk3Nyw3ICs5NzcsNiBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQltZW1zZXQoYml0bWFwLCAweDAwLCBzaXplKTsKIAliaXRtYXAtPnNfYmxvY2tfYml0bWFwID0gKHN0cnVjdCBidWZmZXJfaGVhZCAqKikoYml0bWFwICsgMSk7CiAJYml0bWFwLT5zX25yX2dyb3VwcyA9IG5yX2dyb3VwczsKIAlyZXR1cm4gYml0bWFwOwpAQCAtMTc4MSw2ICsxNzgwLDggQEAKIAogCWlmICghYmgpCiAJCXJldHVybjsKKworCW11dGV4X2xvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJbHZpZCA9IChzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2MgKiliaC0+Yl9kYXRhOwogCWx2aWRpdSA9IHVkZl9zYl9sdmlkaXUoc2JpKTsKIApAQCAtMTc5Nyw2ICsxNzk4LDcgQEAKIAlsdmlkLT5kZXNjVGFnLnRhZ0NoZWNrc3VtID0gdWRmX3RhZ19jaGVja3N1bSgmbHZpZC0+ZGVzY1RhZyk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCXNiaS0+c19sdmlkX2RpcnR5ID0gMDsKKwltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIHVkZl9jbG9zZV9sdmlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCkBAIC0xODA5LDYgKzE4MTEsNyBAQAogCWlmICghYmgpCiAJCXJldHVybjsKIAorCW11dGV4X2xvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJbHZpZCA9IChzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2MgKiliaC0+Yl9kYXRhOwogCWx2aWRpdSA9IHVkZl9zYl9sdmlkaXUoc2JpKTsKIAlsdmlkaXUtPmltcElkZW50LmlkZW50U3VmZml4WzBdID0gVURGX09TX0NMQVNTX1VOSVg7CkBAIC0xODI5LDYgKzE4MzIsMzQgQEAKIAlsdmlkLT5kZXNjVGFnLnRhZ0NoZWNrc3VtID0gdWRmX3RhZ19jaGVja3N1bSgmbHZpZC0+ZGVzY1RhZyk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCXNiaS0+c19sdmlkX2RpcnR5ID0gMDsKKwltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7Cit9CisKK3U2NCBsdmlkX2dldF91bmlxdWVfaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKKwlzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2MgKmx2aWQ7CisJc3RydWN0IGxvZ2ljYWxWb2xIZWFkZXJEZXNjICpsdmhkOworCXU2NCB1bmlxdWVJRDsKKwl1NjQgcmV0OworCisJYmggPSBzYmktPnNfbHZpZF9iaDsKKwlpZiAoIWJoKQorCQlyZXR1cm4gMDsKKworCWx2aWQgPSAoc3RydWN0IGxvZ2ljYWxWb2xJbnRlZ3JpdHlEZXNjICopYmgtPmJfZGF0YTsKKwlsdmhkID0gKHN0cnVjdCBsb2dpY2FsVm9sSGVhZGVyRGVzYyAqKWx2aWQtPmxvZ2ljYWxWb2xDb250ZW50c1VzZTsKKworCW11dGV4X2xvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CisJcmV0ID0gdW5pcXVlSUQgPSBsZTY0X3RvX2NwdShsdmhkLT51bmlxdWVJRCk7CisJaWYgKCEoKyt1bmlxdWVJRCAmIDB4RkZGRkZGRkYpKQorCQl1bmlxdWVJRCArPSAxNjsKKwlsdmhkLT51bmlxdWVJRCA9IGNwdV90b19sZTY0KHVuaXF1ZUlEKTsKKwltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CisJbWFya19idWZmZXJfZGlydHkoYmgpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgdWRmX3NiX2ZyZWVfYml0bWFwKHN0cnVjdCB1ZGZfYml0bWFwICpiaXRtYXApCkBAIC0xODg2LDggKzE5MTcsNiBAQAogCXN0cnVjdCBrZXJuZWxfbGJfYWRkciByb290ZGlyLCBmaWxlc2V0OwogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpOwogCi0JbG9ja19rZXJuZWwoKTsKLQogCXVvcHQuZmxhZ3MgPSAoMSA8PCBVREZfRkxBR19VU0VfQURfSU5fSUNCKSB8ICgxIDw8IFVERl9GTEFHX1NUUklDVCk7CiAJdW9wdC51aWQgPSAtMTsKIAl1b3B0LmdpZCA9IC0xOwpAQCAtMTg5NiwxMCArMTkyNSw4IEBACiAJdW9wdC5kbW9kZSA9IFVERl9JTlZBTElEX01PREU7CiAKIAlzYmkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWRmX3NiX2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNiaSkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJaWYgKCFzYmkpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCXNiLT5zX2ZzX2luZm8gPSBzYmk7CiAKQEAgLTE5MzYsNiArMTk2Myw3IEBACiAJc2JpLT5zX2Ztb2RlID0gdW9wdC5mbW9kZTsKIAlzYmktPnNfZG1vZGUgPSB1b3B0LmRtb2RlOwogCXNiaS0+c19ubHNfbWFwID0gdW9wdC5ubHNfbWFwOworCXJ3bG9ja19pbml0KCZzYmktPnNfY3JlZF9sb2NrKTsKIAogCWlmICh1b3B0LnNlc3Npb24gPT0gMHhGRkZGRkZGRikKIAkJc2JpLT5zX3Nlc3Npb24gPSB1ZGZfZ2V0X2xhc3Rfc2Vzc2lvbihzYik7CkBAIC0yMDQ1LDcgKzIwNzMsNiBAQAogCQlnb3RvIGVycm9yX291dDsKIAl9CiAJc2ItPnNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOwotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIAogZXJyb3Jfb3V0OgpAQCAtMjA2Niw3ICsyMDkzLDYgQEAKIAlrZnJlZShzYmkpOwogCXNiLT5zX2ZzX2luZm8gPSBOVUxMOwogCi0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAtRUlOVkFMOwogfQogCkBAIC0yMTA1LDggKzIxMzEsNiBAQAogCiAJc2JpID0gVURGX1NCKHNiKTsKIAotCWxvY2tfa2VybmVsKCk7Ci0KIAlpZiAoc2JpLT5zX3ZhdF9pbm9kZSkKIAkJaXB1dChzYmktPnNfdmF0X2lub2RlKTsKIAlpZiAoc2JpLT5zX3BhcnRpdGlvbnMpCkBAIC0yMTIyLDggKzIxNDYsNiBAQAogCWtmcmVlKHNiaS0+c19wYXJ0bWFwcyk7CiAJa2ZyZWUoc2ItPnNfZnNfaW5mbyk7CiAJc2ItPnNfZnNfaW5mbyA9IE5VTEw7Ci0KLQl1bmxvY2tfa2VybmVsKCk7CiB9CiAKIHN0YXRpYyBpbnQgdWRmX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpCkBAIC0yMTg2LDggKzIyMDgsNiBAQAogCXVpbnQxNl90IGlkZW50OwogCXN0cnVjdCBzcGFjZUJpdG1hcERlc2MgKmJtOwogCi0JbG9ja19rZXJuZWwoKTsKLQogCWxvYy5sb2dpY2FsQmxvY2tOdW0gPSBiaXRtYXAtPnNfZXh0UG9zaXRpb247CiAJbG9jLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IFVERl9TQihzYiktPnNfcGFydGl0aW9uOwogCWJoID0gdWRmX3JlYWRfcHRhZ2dlZChzYiwgJmxvYywgMCwgJmlkZW50KTsKQEAgLTIyMjQsMTAgKzIyNDQsNyBAQAogCQl9CiAJfQogCWJyZWxzZShiaCk7Ci0KIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7Ci0KIAlyZXR1cm4gYWNjdW07CiB9CiAKQEAgLTIyNDAsOCArMjI1Nyw3IEBACiAJaW50OF90IGV0eXBlOwogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvczsKIAotCWxvY2tfa2VybmVsKCk7Ci0KKwltdXRleF9sb2NrKCZVREZfU0Ioc2IpLT5zX2FsbG9jX211dGV4KTsKIAllcG9zLmJsb2NrID0gVURGX0kodGFibGUpLT5pX2xvY2F0aW9uOwogCWVwb3Mub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCB1bmFsbG9jU3BhY2VFbnRyeSk7CiAJZXBvcy5iaCA9IE5VTEw7CkBAIC0yMjUwLDggKzIyNjYsNyBAQAogCQlhY2N1bSArPSAoZWxlbiA+PiB0YWJsZS0+aV9zYi0+c19ibG9ja3NpemVfYml0cyk7CiAKIAlicmVsc2UoZXBvcy5iaCk7Ci0KLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZVREZfU0Ioc2IpLT5zX2FsbG9jX211dGV4KTsKIAogCXJldHVybiBhY2N1bTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3VkZi9zeW1saW5rLmMgYi9mcy91ZGYvc3ltbGluay5jCmluZGV4IDE2MDY0NzguLmIxZDQ0ODggMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9zeW1saW5rLmMKKysrIGIvZnMvdWRmL3N5bWxpbmsuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSAidWRmX2kuaCIKIApAQCAtNzgsMTMgKzc3LDE2IEBACiAJaW50IGVyciA9IC1FSU87CiAJdW5zaWduZWQgY2hhciAqcCA9IGttYXAocGFnZSk7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbzsKKwl1aW50MzJfdCBwb3M7CiAKLQlsb2NrX2tlcm5lbCgpOwogCWlpbmZvID0gVURGX0koaW5vZGUpOworCXBvcyA9IHVkZl9ibG9ja19tYXAoaW5vZGUsIDApOworCisJZG93bl9yZWFkKCZpaW5mby0+aV9kYXRhX3NlbSk7CiAJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCKSB7CiAJCXN5bWxpbmsgPSBpaW5mby0+aV9leHQuaV9kYXRhICsgaWluZm8tPmlfbGVuRUF0dHI7CiAJfSBlbHNlIHsKLQkJYmggPSBzYl9icmVhZChpbm9kZS0+aV9zYiwgdWRmX2Jsb2NrX21hcChpbm9kZSwgMCkpOworCQliaCA9IHNiX2JyZWFkKGlub2RlLT5pX3NiLCBwb3MpOwogCiAJCWlmICghYmgpCiAJCQlnb3RvIG91dDsKQEAgLTk1LDE0ICs5NywxNCBAQAogCXVkZl9wY190b19jaGFyKGlub2RlLT5pX3NiLCBzeW1saW5rLCBpbm9kZS0+aV9zaXplLCBwKTsKIAlicmVsc2UoYmgpOwogCi0JdW5sb2NrX2tlcm5lbCgpOworCXVwX3JlYWQoJmlpbmZvLT5pX2RhdGFfc2VtKTsKIAlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJa3VubWFwKHBhZ2UpOwogCXVubG9ja19wYWdlKHBhZ2UpOwogCXJldHVybiAwOwogCiBvdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOworCXVwX3JlYWQoJmlpbmZvLT5pX2RhdGFfc2VtKTsKIAlTZXRQYWdlRXJyb3IocGFnZSk7CiAJa3VubWFwKHBhZ2UpOwogCXVubG9ja19wYWdlKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZl9pLmggYi9mcy91ZGYvdWRmX2kuaAppbmRleCBlNThkMWRlLi5kMWJkMzFlIDEwMDY0NAotLS0gYS9mcy91ZGYvdWRmX2kuaAorKysgYi9mcy91ZGYvdWRmX2kuaApAQCAtMSw2ICsxLDE4IEBACiAjaWZuZGVmIF9VREZfSV9ICiAjZGVmaW5lIF9VREZfSV9ICiAKKy8qCisgKiBUaGUgaV9kYXRhX3NlbSBhbmQgaV9tdXRleCBzZXJ2ZSBmb3IgcHJvdGVjdGlvbiBvZiBhbGxvY2F0aW9uIGluZm9ybWF0aW9uCisgKiBvZiBhIHJlZ3VsYXIgZmlsZXMgYW5kIHN5bWxpbmtzLiBUaGlzIGluY2x1ZGVzIGFsbCBleHRlbnRzIGJlbG9uZ2luZyB0bworICogdGhlIGZpbGUvc3ltbGluaywgYSBmYWN0IHdoZXRoZXIgZGF0YSBhcmUgaW4taW5vZGUgb3IgaW4gZXh0ZXJuYWwgZGF0YQorICogYmxvY2tzLCBwcmVhbGxvY2F0aW9uLCBnb2FsIGJsb2NrIGluZm9ybWF0aW9uLi4uIFdoZW4gZXh0ZW50cyBhcmUgcmVhZCwKKyAqIGlfbXV0ZXggb3IgaV9kYXRhX3NlbSBtdXN0IGJlIGhlbGQgKGZvciByZWFkaW5nIGlzIGVub3VnaCBpbiBjYXNlIG9mCisgKiBpX2RhdGFfc2VtKS4gV2hlbiBleHRlbnRzIGFyZSBjaGFuZ2VkLCBpX2RhdGFfc2VtIG11c3QgYmUgaGVsZCBmb3Igd3JpdGluZworICogYW5kIGFsc28gaV9tdXRleCBtdXN0IGJlIGhlbGQuCisgKgorICogRm9yIGRpcmVjdG9yaWVzIGlfbXV0ZXggaXMgdXNlZCBmb3IgYWxsIHRoZSBuZWNlc3NhcnkgcHJvdGVjdGlvbi4KKyAqLworCiBzdHJ1Y3QgdWRmX2lub2RlX2luZm8gewogCXN0cnVjdCB0aW1lc3BlYwkJaV9jcnRpbWU7CiAJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBpbm9kZSAqLwpAQCAtMjEsNiArMzMsNyBAQAogCQlzdHJ1Y3QgbG9uZ19hZAkJKmlfbGFkOwogCQlfX3U4CQkqaV9kYXRhOwogCX0gaV9leHQ7CisJc3RydWN0IHJ3X3NlbWFwaG9yZQlpX2RhdGFfc2VtOwogCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CiB9OwogCmRpZmYgLS1naXQgYS9mcy91ZGYvdWRmX3NiLmggYi9mcy91ZGYvdWRmX3NiLmgKaW5kZXggZDExM2I3Mi4uNDg1OGMxOSAxMDA2NDQKLS0tIGEvZnMvdWRmL3VkZl9zYi5oCisrKyBiL2ZzL3VkZi91ZGZfc2IuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX19MSU5VWF9VREZfU0JfSAogCiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogLyogU2luY2UgVURGIDIuMDEgaXMgSVNPIDEzMzQ2IGJhc2VkLi4uICovCiAjZGVmaW5lIFVERl9TVVBFUl9NQUdJQwkJCTB4MTUwMTMzNDYKQEAgLTEyOCw2ICsxMjksOCBAQAogCXVpZF90CQkJc191aWQ7CiAJbW9kZV90CQkJc19mbW9kZTsKIAltb2RlX3QJCQlzX2Rtb2RlOworCS8qIExvY2sgcHJvdGVjdGluZyBjb25zaXN0ZW5jeSBvZiBhYm92ZSBwZXJtaXNzaW9uIHNldHRpbmdzICovCisJcndsb2NrX3QJCXNfY3JlZF9sb2NrOwogCiAJLyogUm9vdCBJbmZvICovCiAJc3RydWN0IHRpbWVzcGVjCQlzX3JlY29yZF90aW1lOwpAQCAtMTM5LDcgKzE0Miw3IEBACiAJX191MTYJCQlzX3VkZnJldjsKIAogCS8qIE1pc2NlbGxhbmVvdXMgZmxhZ3MgKi8KLQlfX3UzMgkJCXNfZmxhZ3M7CisJdW5zaWduZWQgbG9uZwkJc19mbGFnczsKIAogCS8qIEVuY29kaW5nIGluZm8gKi8KIAlzdHJ1Y3QgbmxzX3RhYmxlCSpzX25sc19tYXA7CkBAIC0xNjEsOCArMTY0LDE5IEBACiAKIGludCB1ZGZfY29tcHV0ZV9ucl9ncm91cHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHBhcnRpdGlvbik7CiAKLSNkZWZpbmUgVURGX1FVRVJZX0ZMQUcoWCxZKQkJCSggVURGX1NCKFgpLT5zX2ZsYWdzICYgKCAxIDw8IChZKSApICkKLSNkZWZpbmUgVURGX1NFVF9GTEFHKFgsWSkJCQkoIFVERl9TQihYKS0+c19mbGFncyB8PSAoIDEgPDwgKFkpICkgKQotI2RlZmluZSBVREZfQ0xFQVJfRkxBRyhYLFkpCQkJKCBVREZfU0IoWCktPnNfZmxhZ3MgJj0gfiggMSA8PCAoWSkgKSApCitzdGF0aWMgaW5saW5lIGludCBVREZfUVVFUllfRkxBRyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZmxhZykKK3sKKwlyZXR1cm4gdGVzdF9iaXQoZmxhZywgJlVERl9TQihzYiktPnNfZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgVURGX1NFVF9GTEFHKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBmbGFnKQoreworCXNldF9iaXQoZmxhZywgJlVERl9TQihzYiktPnNfZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgVURGX0NMRUFSX0ZMQUcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGZsYWcpCit7CisJY2xlYXJfYml0KGZsYWcsICZVREZfU0Ioc2IpLT5zX2ZsYWdzKTsKK30KIAogI2VuZGlmIC8qIF9fTElOVVhfVURGX1NCX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZkZWNsLmggYi9mcy91ZGYvdWRmZGVjbC5oCmluZGV4IDY5OTVhYjEuLmViYTQ4MjAgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi91ZGZkZWNsLmgKKysrIGIvZnMvdWRmL3VkZmRlY2wuaApAQCAtMTExLDYgKzExMSw4IEBACiB9OwogCiAvKiBzdXBlci5jICovCisKK19fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDMsIDQpKSkKIGV4dGVybiB2b2lkIHVkZl93YXJuaW5nKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCB1ZGZfdXBkYXRlZF9sdmlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CkBAIC0xMjMsNiArMTI1LDcgQEAKIAlzYi0+c19kaXJ0ID0gMTsKIAlVREZfU0Ioc2IpLT5zX2x2aWRfZGlydHkgPSAxOwogfQorZXh0ZXJuIHU2NCBsdmlkX2dldF91bmlxdWVfaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiAKIC8qIG5hbWVpLmMgKi8KIGV4dGVybiBpbnQgdWRmX3dyaXRlX2ZpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlSWRlbnREZXNjICosCkBAIC0xMzMsNyArMTM2LDYgQEAKIGV4dGVybiBsb25nIHVkZl9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogLyogaW5vZGUuYyAqLwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqKTsKLWV4dGVybiBpbnQgdWRmX3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHZvaWQgdWRmX2V4cGFuZF9maWxlX2FkaW5pY2Ioc3RydWN0IGlub2RlICosIGludCwgaW50ICopOwogZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX2V4cGFuZF9kaXJfYWRpbmljYihzdHJ1Y3QgaW5vZGUgKiwgaW50ICosIGludCAqKTsKIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVkZl9icmVhZChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBpbnQsIGludCAqKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYvc3YuaCBiL2ZzL3hmcy9saW51eC0yLjYvc3YuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRmYzdjMy4uMDAwMDAwMAotLS0gYS9mcy94ZnMvbGludXgtMi42L3N2LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIsMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0jaWZuZGVmIF9fWEZTX1NVUFBPUlRfU1ZfSF9fCi0jZGVmaW5lIF9fWEZTX1NVUFBPUlRfU1ZfSF9fCi0KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotCi0vKgotICogU3luY2hyb25pc2F0aW9uIHZhcmlhYmxlcy4KLSAqCi0gKiAoUGFyYW1ldGVycyAicHJpIiwgInN2ZiIgYW5kICJydHMiIGFyZSBub3QgaW1wbGVtZW50ZWQpCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3Qgc3ZfcyB7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdGVyczsKLX0gc3ZfdDsKLQotc3RhdGljIGlubGluZSB2b2lkIF9zdl93YWl0KHN2X3QgKnN2LCBzcGlubG9ja190ICpsb2NrKQotewotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCi0JYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKCZzdi0+d2FpdGVycywgJndhaXQpOwotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwotCXNwaW5fdW5sb2NrKGxvY2spOwotCi0Jc2NoZWR1bGUoKTsKLQotCXJlbW92ZV93YWl0X3F1ZXVlKCZzdi0+d2FpdGVycywgJndhaXQpOwotfQotCi0jZGVmaW5lIHN2X2luaXQoc3YsZmxhZyxuYW1lKSBcCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmKHN2KS0+d2FpdGVycykKLSNkZWZpbmUgc3ZfZGVzdHJveShzdikgXAotCS8qTk9USElORyovCi0jZGVmaW5lIHN2X3dhaXQoc3YsIHByaSwgbG9jaywgcykgXAotCV9zdl93YWl0KHN2LCBsb2NrKQotI2RlZmluZSBzdl9zaWduYWwoc3YpIFwKLQl3YWtlX3VwKCYoc3YpLT53YWl0ZXJzKQotI2RlZmluZSBzdl9icm9hZGNhc3Qoc3YpIFwKLQl3YWtlX3VwX2FsbCgmKHN2KS0+d2FpdGVycykKLQotI2VuZGlmIC8qIF9fWEZTX1NVUFBPUlRfU1ZfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKaW5kZXggNjkxZjYxMi4uZWM3YmJiNSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwpAQCAtMzgsMTUgKzM4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAKLS8qCi0gKiBUeXBlcyBvZiBJL08gZm9yIGJtYXAgY2x1c3RlcmluZyBhbmQgSS9PIGNvbXBsZXRpb24gdHJhY2tpbmcuCi0gKi8KLWVudW0gewotCUlPX1JFQUQsCS8qIG1hcHBpbmcgZm9yIGEgcmVhZCAqLwotCUlPX0RFTEFZLAkvKiBtYXBwaW5nIGNvdmVycyBkZWxhbGxvYyByZWdpb24gKi8KLQlJT19VTldSSVRURU4sCS8qIG1hcHBpbmcgY292ZXJzIGFsbG9jYXRlZCBidXQgdW5pbml0aWFsaXplZCBkYXRhICovCi0JSU9fTkVXCQkvKiBqdXN0IGFsbG9jYXRlZCAqLwotfTsKIAogLyoKICAqIFByaW1lIG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgc2luY2UgYWRkcmVzcyBpcyB1c2VkIGFzIHRoZSBrZXkuCkBAIC0xODIsOSArMTczLDYgQEAKIAl4ZnNfaW5vZGVfdAkJKmlwID0gWEZTX0koaW9lbmQtPmlvX2lub2RlKTsKIAl4ZnNfZnNpemVfdAkJaXNpemU7CiAKLQlBU1NFUlQoKGlwLT5pX2QuZGlfbW9kZSAmIFNfSUZNVCkgPT0gU19JRlJFRyk7Ci0JQVNTRVJUKGlvZW5kLT5pb190eXBlICE9IElPX1JFQUQpOwotCiAJaWYgKHVubGlrZWx5KGlvZW5kLT5pb19lcnJvcikpCiAJCXJldHVybiAwOwogCkBAIC0yNDQsMTAgKzIzMiw4IEBACiAJICogV2UgbWlnaHQgaGF2ZSB0byB1cGRhdGUgdGhlIG9uLWRpc2sgZmlsZSBzaXplIGFmdGVyIGV4dGVuZGluZwogCSAqIHdyaXRlcy4KIAkgKi8KLQlpZiAoaW9lbmQtPmlvX3R5cGUgIT0gSU9fUkVBRCkgewotCQllcnJvciA9IHhmc19zZXRmaWxlc2l6ZShpb2VuZCk7Ci0JCUFTU0VSVCghZXJyb3IgfHwgZXJyb3IgPT0gRUFHQUlOKTsKLQl9CisJZXJyb3IgPSB4ZnNfc2V0ZmlsZXNpemUoaW9lbmQpOworCUFTU0VSVCghZXJyb3IgfHwgZXJyb3IgPT0gRUFHQUlOKTsKIAogCS8qCiAJICogSWYgd2UgZGlkbid0IGNvbXBsZXRlIHByb2Nlc3Npbmcgb2YgdGhlIGlvZW5kLCByZXF1ZXVlIGl0IHRvIHRoZQpAQCAtMzE4LDE0ICszMDQsNjMgQEAKIHhmc19tYXBfYmxvY2tzKAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLAogCWxvZmZfdAkJCW9mZnNldCwKLQlzc2l6ZV90CQkJY291bnQsCiAJc3RydWN0IHhmc19ibWJ0X2lyZWMJKmltYXAsCi0JaW50CQkJZmxhZ3MpCisJaW50CQkJdHlwZSwKKwlpbnQJCQlub25ibG9ja2luZykKIHsKLQlpbnQJCQlubWFwcyA9IDE7Ci0JaW50CQkJbmV3ID0gMDsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OworCXNzaXplX3QJCQljb3VudCA9IDEgPDwgaW5vZGUtPmlfYmxrYml0czsKKwl4ZnNfZmlsZW9mZl90CQlvZmZzZXRfZnNiLCBlbmRfZnNiOworCWludAkJCWVycm9yID0gMDsKKwlpbnQJCQlibWFwaV9mbGFncyA9IFhGU19CTUFQSV9FTlRJUkU7CisJaW50CQkJbmltYXBzID0gMTsKIAotCXJldHVybiAteGZzX2lvbWFwKFhGU19JKGlub2RlKSwgb2Zmc2V0LCBjb3VudCwgZmxhZ3MsIGltYXAsICZubWFwcywgJm5ldyk7CisJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQorCQlyZXR1cm4gLVhGU19FUlJPUihFSU8pOworCisJaWYgKHR5cGUgPT0gSU9fVU5XUklUVEVOKQorCQlibWFwaV9mbGFncyB8PSBYRlNfQk1BUElfSUdTVEFURTsKKworCWlmICgheGZzX2lsb2NrX25vd2FpdChpcCwgWEZTX0lMT0NLX1NIQVJFRCkpIHsKKwkJaWYgKG5vbmJsb2NraW5nKQorCQkJcmV0dXJuIC1YRlNfRVJST1IoRUFHQUlOKTsKKwkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKwl9CisKKwlBU1NFUlQoaXAtPmlfZC5kaV9mb3JtYXQgIT0gWEZTX0RJTk9ERV9GTVRfQlRSRUUgfHwKKwkgICAgICAgKGlwLT5pX2RmLmlmX2ZsYWdzICYgWEZTX0lGRVhURU5UUykpOworCUFTU0VSVChvZmZzZXQgPD0gbXAtPm1fbWF4aW9mZnNldCk7CisKKwlpZiAob2Zmc2V0ICsgY291bnQgPiBtcC0+bV9tYXhpb2Zmc2V0KQorCQljb3VudCA9IG1wLT5tX21heGlvZmZzZXQgLSBvZmZzZXQ7CisJZW5kX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgKHhmc191ZnNpemVfdClvZmZzZXQgKyBjb3VudCk7CisJb2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIG9mZnNldCk7CisJZXJyb3IgPSB4ZnNfYm1hcGkoTlVMTCwgaXAsIG9mZnNldF9mc2IsIGVuZF9mc2IgLSBvZmZzZXRfZnNiLAorCQkJICBibWFwaV9mbGFncywgIE5VTEwsIDAsIGltYXAsICZuaW1hcHMsIE5VTEwpOworCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKworCWlmIChlcnJvcikKKwkJcmV0dXJuIC1YRlNfRVJST1IoZXJyb3IpOworCisJaWYgKHR5cGUgPT0gSU9fREVMQUxMT0MgJiYKKwkgICAgKCFuaW1hcHMgfHwgaXNudWxsc3RhcnRibG9jayhpbWFwLT5icl9zdGFydGJsb2NrKSkpIHsKKwkJZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVfYWxsb2NhdGUoaXAsIG9mZnNldCwgY291bnQsIGltYXApOworCQlpZiAoIWVycm9yKQorCQkJdHJhY2VfeGZzX21hcF9ibG9ja3NfYWxsb2MoaXAsIG9mZnNldCwgY291bnQsIHR5cGUsIGltYXApOworCQlyZXR1cm4gLVhGU19FUlJPUihlcnJvcik7CisJfQorCisjaWZkZWYgREVCVUcKKwlpZiAodHlwZSA9PSBJT19VTldSSVRURU4pIHsKKwkJQVNTRVJUKG5pbWFwcyk7CisJCUFTU0VSVChpbWFwLT5icl9zdGFydGJsb2NrICE9IEhPTEVTVEFSVEJMT0NLKTsKKwkJQVNTRVJUKGltYXAtPmJyX3N0YXJ0YmxvY2sgIT0gREVMQVlTVEFSVEJMT0NLKTsKKwl9CisjZW5kaWYKKwlpZiAobmltYXBzKQorCQl0cmFjZV94ZnNfbWFwX2Jsb2Nrc19mb3VuZChpcCwgb2Zmc2V0LCBjb3VudCwgdHlwZSwgaW1hcCk7CisJcmV0dXJuIDA7CiB9CiAKIFNUQVRJQyBpbnQKQEAgLTM4MCwyNiArNDE1LDE4IEBACiAKIAlzdWJtaXRfYmlvKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMID8KIAkJICAgV1JJVEVfU1lOQ19QTFVHIDogV1JJVEUsIGJpbyk7Ci0JQVNTRVJUKCFiaW9fZmxhZ2dlZChiaW8sIEJJT19FT1BOT1RTVVBQKSk7Ci0JYmlvX3B1dChiaW8pOwogfQogCiBTVEFUSUMgc3RydWN0IGJpbyAqCiB4ZnNfYWxsb2NfaW9lbmRfYmlvKAogCXN0cnVjdCBidWZmZXJfaGVhZAkqYmgpCiB7Ci0Jc3RydWN0IGJpbwkJKmJpbzsKIAlpbnQJCQludmVjcyA9IGJpb19nZXRfbnJfdmVjcyhiaC0+Yl9iZGV2KTsKLQotCWRvIHsKLQkJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0lPLCBudmVjcyk7Ci0JCW52ZWNzID4+PSAxOwotCX0gd2hpbGUgKCFiaW8pOworCXN0cnVjdCBiaW8JCSpiaW8gPSBiaW9fYWxsb2MoR0ZQX05PSU8sIG52ZWNzKTsKIAogCUFTU0VSVChiaW8tPmJpX3ByaXZhdGUgPT0gTlVMTCk7CiAJYmlvLT5iaV9zZWN0b3IgPSBiaC0+Yl9ibG9ja25yICogKGJoLT5iX3NpemUgPj4gOSk7CiAJYmlvLT5iaV9iZGV2ID0gYmgtPmJfYmRldjsKLQliaW9fZ2V0KGJpbyk7CiAJcmV0dXJuIGJpbzsKIH0KIApAQCAtNDcwLDkgKzQ5Nyw4IEBACiAJLyogUGFzcyAxIC0gc3RhcnQgd3JpdGViYWNrICovCiAJZG8gewogCQluZXh0ID0gaW9lbmQtPmlvX2xpc3Q7Ci0JCWZvciAoYmggPSBpb2VuZC0+aW9fYnVmZmVyX2hlYWQ7IGJoOyBiaCA9IGJoLT5iX3ByaXZhdGUpIHsKKwkJZm9yIChiaCA9IGlvZW5kLT5pb19idWZmZXJfaGVhZDsgYmg7IGJoID0gYmgtPmJfcHJpdmF0ZSkKIAkJCXhmc19zdGFydF9idWZmZXJfd3JpdGViYWNrKGJoKTsKLQkJfQogCX0gd2hpbGUgKChpb2VuZCA9IG5leHQpICE9IE5VTEwpOwogCiAJLyogUGFzcyAyIC0gc3VibWl0IEkvTyAqLwpAQCAtNjAwLDExNyArNjI2LDEzIEBACiAJQVNTRVJUKGltYXAtPmJyX3N0YXJ0YmxvY2sgIT0gSE9MRVNUQVJUQkxPQ0spOwogCUFTU0VSVChpbWFwLT5icl9zdGFydGJsb2NrICE9IERFTEFZU1RBUlRCTE9DSyk7CiAKLQlsb2NrX2J1ZmZlcihiaCk7CiAJeGZzX21hcF9idWZmZXIoaW5vZGUsIGJoLCBpbWFwLCBvZmZzZXQpOwotCWJoLT5iX2JkZXYgPSB4ZnNfZmluZF9iZGV2X2Zvcl9pbm9kZShpbm9kZSk7CiAJc2V0X2J1ZmZlcl9tYXBwZWQoYmgpOwogCWNsZWFyX2J1ZmZlcl9kZWxheShiaCk7CiAJY2xlYXJfYnVmZmVyX3Vud3JpdHRlbihiaCk7CiB9CiAKIC8qCi0gKiBMb29rIGZvciBhIHBhZ2UgYXQgaW5kZXggdGhhdCBpcyBzdWl0YWJsZSBmb3IgY2x1c3RlcmluZy4KLSAqLwotU1RBVElDIHVuc2lnbmVkIGludAoteGZzX3Byb2JlX3BhZ2UoCi0Jc3RydWN0IHBhZ2UJCSpwYWdlLAotCXVuc2lnbmVkIGludAkJcGdfb2Zmc2V0KQotewotCXN0cnVjdCBidWZmZXJfaGVhZAkqYmgsICpoZWFkOwotCWludAkJCXJldCA9IDA7Ci0KLQlpZiAoUGFnZVdyaXRlYmFjayhwYWdlKSkKLQkJcmV0dXJuIDA7Ci0JaWYgKCFQYWdlRGlydHkocGFnZSkpCi0JCXJldHVybiAwOwotCWlmICghcGFnZS0+bWFwcGluZykKLQkJcmV0dXJuIDA7Ci0JaWYgKCFwYWdlX2hhc19idWZmZXJzKHBhZ2UpKQotCQlyZXR1cm4gMDsKLQotCWJoID0gaGVhZCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKLQlkbyB7Ci0JCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkKLQkJCWJyZWFrOwotCQlpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKQotCQkJYnJlYWs7Ci0JCXJldCArPSBiaC0+Yl9zaXplOwotCQlpZiAocmV0ID49IHBnX29mZnNldCkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKChiaCA9IGJoLT5iX3RoaXNfcGFnZSkgIT0gaGVhZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1TVEFUSUMgc2l6ZV90Ci14ZnNfcHJvYmVfY2x1c3RlcigKLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKLQlzdHJ1Y3QgcGFnZQkJKnN0YXJ0cGFnZSwKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQJKmJoLAotCXN0cnVjdCBidWZmZXJfaGVhZAkqaGVhZCkKLXsKLQlzdHJ1Y3QgcGFnZXZlYwkJcHZlYzsKLQlwZ29mZl90CQkJdGluZGV4LCB0bGFzdCwgdGxvZmY7Ci0Jc2l6ZV90CQkJdG90YWwgPSAwOwotCWludAkJCWRvbmUgPSAwLCBpOwotCi0JLyogRmlyc3Qgc3VtIGZvcndhcmRzIGluIHRoaXMgcGFnZSAqLwotCWRvIHsKLQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpIHx8ICFidWZmZXJfbWFwcGVkKGJoKSkKLQkJCXJldHVybiB0b3RhbDsKLQkJdG90YWwgKz0gYmgtPmJfc2l6ZTsKLQl9IHdoaWxlICgoYmggPSBiaC0+Yl90aGlzX3BhZ2UpICE9IGhlYWQpOwotCi0JLyogaWYgd2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBwYWdlLCBzdW0gZm9yd2FyZHMgaW4gZm9sbG93aW5nIHBhZ2VzICovCi0JdGxhc3QgPSBpX3NpemVfcmVhZChpbm9kZSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKLQl0aW5kZXggPSBzdGFydHBhZ2UtPmluZGV4ICsgMTsKLQotCS8qIFBydW5lIHRoaXMgYmFjayB0byBhdm9pZCBwYXRob2xvZ2ljYWwgYmVoYXZpb3IgKi8KLQl0bG9mZiA9IG1pbih0bGFzdCwgc3RhcnRwYWdlLT5pbmRleCArIDY0KTsKLQotCXBhZ2V2ZWNfaW5pdCgmcHZlYywgMCk7Ci0Jd2hpbGUgKCFkb25lICYmIHRpbmRleCA8PSB0bG9mZikgewotCQl1bnNpZ25lZCBsZW4gPSBtaW5fdChwZ29mZl90LCBQQUdFVkVDX1NJWkUsIHRsYXN0IC0gdGluZGV4ICsgMSk7Ci0KLQkJaWYgKCFwYWdldmVjX2xvb2t1cCgmcHZlYywgaW5vZGUtPmlfbWFwcGluZywgdGluZGV4LCBsZW4pKQotCQkJYnJlYWs7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHBhZ2V2ZWNfY291bnQoJnB2ZWMpOyBpKyspIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKLQkJCXNpemVfdCBwZ19vZmZzZXQsIHBnX2xlbiA9IDA7Ci0KLQkJCWlmICh0aW5kZXggPT0gdGxhc3QpIHsKLQkJCQlwZ19vZmZzZXQgPQotCQkJCSAgICBpX3NpemVfcmVhZChpbm9kZSkgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7Ci0JCQkJaWYgKCFwZ19vZmZzZXQpIHsKLQkJCQkJZG9uZSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZQotCQkJCXBnX29mZnNldCA9IFBBR0VfQ0FDSEVfU0laRTsKLQotCQkJaWYgKHBhZ2UtPmluZGV4ID09IHRpbmRleCAmJiB0cnlsb2NrX3BhZ2UocGFnZSkpIHsKLQkJCQlwZ19sZW4gPSB4ZnNfcHJvYmVfcGFnZShwYWdlLCBwZ19vZmZzZXQpOwotCQkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQkJfQotCi0JCQlpZiAoIXBnX2xlbikgewotCQkJCWRvbmUgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQl0b3RhbCArPSBwZ19sZW47Ci0JCQl0aW5kZXgrKzsKLQkJfQotCi0JCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7Ci0JCWNvbmRfcmVzY2hlZCgpOwotCX0KLQotCXJldHVybiB0b3RhbDsKLX0KLQotLyoKICAqIFRlc3QgaWYgYSBnaXZlbiBwYWdlIGlzIHN1aXRhYmxlIGZvciB3cml0aW5nIGFzIHBhcnQgb2YgYW4gdW53cml0dGVuCiAgKiBvciBkZWxheWVkIGFsbG9jYXRlIGV4dGVudC4KICAqLwpAQCAtNzMxLDkgKzY1Myw5IEBACiAJCQlpZiAoYnVmZmVyX3Vud3JpdHRlbihiaCkpCiAJCQkJYWNjZXB0YWJsZSA9ICh0eXBlID09IElPX1VOV1JJVFRFTik7CiAJCQllbHNlIGlmIChidWZmZXJfZGVsYXkoYmgpKQotCQkJCWFjY2VwdGFibGUgPSAodHlwZSA9PSBJT19ERUxBWSk7CisJCQkJYWNjZXB0YWJsZSA9ICh0eXBlID09IElPX0RFTEFMTE9DKTsKIAkJCWVsc2UgaWYgKGJ1ZmZlcl9kaXJ0eShiaCkgJiYgYnVmZmVyX21hcHBlZChiaCkpCi0JCQkJYWNjZXB0YWJsZSA9ICh0eXBlID09IElPX05FVyk7CisJCQkJYWNjZXB0YWJsZSA9ICh0eXBlID09IElPX09WRVJXUklURSk7CiAJCQllbHNlCiAJCQkJYnJlYWs7CiAJCX0gd2hpbGUgKChiaCA9IGJoLT5iX3RoaXNfcGFnZSkgIT0gaGVhZCk7CkBAIC03NTgsOCArNjgwLDcgQEAKIAlsb2ZmX3QJCQl0aW5kZXgsCiAJc3RydWN0IHhmc19ibWJ0X2lyZWMJKmltYXAsCiAJeGZzX2lvZW5kX3QJCSoqaW9lbmRwLAotCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLAotCWludAkJCWFsbF9iaCkKKwlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQJKmJoLCAqaGVhZDsKIAl4ZnNfb2ZmX3QJCWVuZF9vZmZzZXQ7CkBAIC04MTQsMzcgKzczNSwzMCBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoYnVmZmVyX3Vud3JpdHRlbihiaCkgfHwgYnVmZmVyX2RlbGF5KGJoKSkgeworCQlpZiAoYnVmZmVyX3Vud3JpdHRlbihiaCkgfHwgYnVmZmVyX2RlbGF5KGJoKSB8fAorCQkgICAgYnVmZmVyX21hcHBlZChiaCkpIHsKIAkJCWlmIChidWZmZXJfdW53cml0dGVuKGJoKSkKIAkJCQl0eXBlID0gSU9fVU5XUklUVEVOOworCQkJZWxzZSBpZiAoYnVmZmVyX2RlbGF5KGJoKSkKKwkJCQl0eXBlID0gSU9fREVMQUxMT0M7CiAJCQllbHNlCi0JCQkJdHlwZSA9IElPX0RFTEFZOworCQkJCXR5cGUgPSBJT19PVkVSV1JJVEU7CiAKIAkJCWlmICgheGZzX2ltYXBfdmFsaWQoaW5vZGUsIGltYXAsIG9mZnNldCkpIHsKIAkJCQlkb25lID0gMTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAotCQkJQVNTRVJUKGltYXAtPmJyX3N0YXJ0YmxvY2sgIT0gSE9MRVNUQVJUQkxPQ0spOwotCQkJQVNTRVJUKGltYXAtPmJyX3N0YXJ0YmxvY2sgIT0gREVMQVlTVEFSVEJMT0NLKTsKLQotCQkJeGZzX21hcF9hdF9vZmZzZXQoaW5vZGUsIGJoLCBpbWFwLCBvZmZzZXQpOworCQkJbG9ja19idWZmZXIoYmgpOworCQkJaWYgKHR5cGUgIT0gSU9fT1ZFUldSSVRFKQorCQkJCXhmc19tYXBfYXRfb2Zmc2V0KGlub2RlLCBiaCwgaW1hcCwgb2Zmc2V0KTsKIAkJCXhmc19hZGRfdG9faW9lbmQoaW5vZGUsIGJoLCBvZmZzZXQsIHR5cGUsCiAJCQkJCSBpb2VuZHAsIGRvbmUpOwogCiAJCQlwYWdlX2RpcnR5LS07CiAJCQljb3VudCsrOwogCQl9IGVsc2UgewotCQkJdHlwZSA9IElPX05FVzsKLQkJCWlmIChidWZmZXJfbWFwcGVkKGJoKSAmJiBhbGxfYmgpIHsKLQkJCQlsb2NrX2J1ZmZlcihiaCk7Ci0JCQkJeGZzX2FkZF90b19pb2VuZChpbm9kZSwgYmgsIG9mZnNldCwKLQkJCQkJCXR5cGUsIGlvZW5kcCwgZG9uZSk7Ci0JCQkJY291bnQrKzsKLQkJCQlwYWdlX2RpcnR5LS07Ci0JCQl9IGVsc2UgewotCQkJCWRvbmUgPSAxOwotCQkJfQorCQkJZG9uZSA9IDE7CiAJCX0KIAl9IHdoaWxlIChvZmZzZXQgKz0gbGVuLCAoYmggPSBiaC0+Yl90aGlzX3BhZ2UpICE9IGhlYWQpOwogCkBAIC04NzYsNyArNzkwLDYgQEAKIAlzdHJ1Y3QgeGZzX2JtYnRfaXJlYwkqaW1hcCwKIAl4ZnNfaW9lbmRfdAkJKippb2VuZHAsCiAJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCi0JaW50CQkJYWxsX2JoLAogCXBnb2ZmX3QJCQl0bGFzdCkKIHsKIAlzdHJ1Y3QgcGFnZXZlYwkJcHZlYzsKQEAgLTg5MSw3ICs4MDQsNyBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBwYWdldmVjX2NvdW50KCZwdmVjKTsgaSsrKSB7CiAJCQlkb25lID0geGZzX2NvbnZlcnRfcGFnZShpbm9kZSwgcHZlYy5wYWdlc1tpXSwgdGluZGV4KyssCi0JCQkJCWltYXAsIGlvZW5kcCwgd2JjLCBhbGxfYmgpOworCQkJCQlpbWFwLCBpb2VuZHAsIHdiYyk7CiAJCQlpZiAoZG9uZSkKIAkJCQlicmVhazsKIAkJfQpAQCAtOTM1LDcgKzg0OCw3IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkCSpiaCwgKmhlYWQ7CiAJbG9mZl90CQkJb2Zmc2V0ID0gcGFnZV9vZmZzZXQocGFnZSk7CiAKLQlpZiAoIXhmc19pc19kZWxheWVkX3BhZ2UocGFnZSwgSU9fREVMQVkpKQorCWlmICgheGZzX2lzX2RlbGF5ZWRfcGFnZShwYWdlLCBJT19ERUxBTExPQykpCiAJCWdvdG8gb3V0X2ludmFsaWRhdGU7CiAKIAlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihpcC0+aV9tb3VudCkpCkBAIC0xMDAyLDEwICs5MTUsMTAgQEAKIAl1bnNpZ25lZCBpbnQJCXR5cGU7CiAJX191aW50NjRfdCAgICAgICAgICAgICAgZW5kX29mZnNldDsKIAlwZ29mZl90ICAgICAgICAgICAgICAgICBlbmRfaW5kZXgsIGxhc3RfaW5kZXg7Ci0Jc3NpemVfdAkJCXNpemUsIGxlbjsKLQlpbnQJCQlmbGFncywgZXJyLCBpbWFwX3ZhbGlkID0gMCwgdXB0b2RhdGUgPSAxOworCXNzaXplX3QJCQlsZW47CisJaW50CQkJZXJyLCBpbWFwX3ZhbGlkID0gMCwgdXB0b2RhdGUgPSAxOwogCWludAkJCWNvdW50ID0gMDsKLQlpbnQJCQlhbGxfYmggPSAwOworCWludAkJCW5vbmJsb2NraW5nID0gMDsKIAogCXRyYWNlX3hmc193cml0ZXBhZ2UoaW5vZGUsIHBhZ2UsIDApOwogCkBAIC0xMDU2LDEwICs5NjksMTQgQEAKIAogCWJoID0gaGVhZCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKIAlvZmZzZXQgPSBwYWdlX29mZnNldChwYWdlKTsKLQlmbGFncyA9IEJNQVBJX1JFQUQ7Ci0JdHlwZSA9IElPX05FVzsKKwl0eXBlID0gSU9fT1ZFUldSSVRFOworCisJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfTk9ORSAmJiB3YmMtPm5vbmJsb2NraW5nKQorCQlub25ibG9ja2luZyA9IDE7CiAKIAlkbyB7CisJCWludCBuZXdfaW9lbmQgPSAwOworCiAJCWlmIChvZmZzZXQgPj0gZW5kX29mZnNldCkKIAkJCWJyZWFrOwogCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpCkBAIC0xMDc2LDkwICs5OTMsNTQgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKGltYXBfdmFsaWQpCi0JCQlpbWFwX3ZhbGlkID0geGZzX2ltYXBfdmFsaWQoaW5vZGUsICZpbWFwLCBvZmZzZXQpOwotCi0JCWlmIChidWZmZXJfdW53cml0dGVuKGJoKSB8fCBidWZmZXJfZGVsYXkoYmgpKSB7Ci0JCQlpbnQgbmV3X2lvZW5kID0gMDsKLQotCQkJLyoKLQkJCSAqIE1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgYSByZWFkLW9ubHkgaW9tYXAKLQkJCSAqLwotCQkJaWYgKGZsYWdzID09IEJNQVBJX1JFQUQpCi0JCQkJaW1hcF92YWxpZCA9IDA7Ci0KLQkJCWlmIChidWZmZXJfdW53cml0dGVuKGJoKSkgeworCQlpZiAoYnVmZmVyX3Vud3JpdHRlbihiaCkpIHsKKwkJCWlmICh0eXBlICE9IElPX1VOV1JJVFRFTikgewogCQkJCXR5cGUgPSBJT19VTldSSVRURU47Ci0JCQkJZmxhZ3MgPSBCTUFQSV9XUklURSB8IEJNQVBJX0lHTlNUQVRFOwotCQkJfSBlbHNlIGlmIChidWZmZXJfZGVsYXkoYmgpKSB7Ci0JCQkJdHlwZSA9IElPX0RFTEFZOwotCQkJCWZsYWdzID0gQk1BUElfQUxMT0NBVEU7Ci0KLQkJCQlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKQotCQkJCQlmbGFncyB8PSBCTUFQSV9UUllMT0NLOworCQkJCWltYXBfdmFsaWQgPSAwOwogCQkJfQotCi0JCQlpZiAoIWltYXBfdmFsaWQpIHsKLQkJCQkvKgotCQkJCSAqIElmIHdlIGRpZG4ndCBoYXZlIGEgdmFsaWQgbWFwcGluZyB0aGVuIHdlCi0JCQkJICogbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBwdXQgdGhlIG5ldyBtYXBwaW5nCi0JCQkJICogaW4gYSBuZXcgaW9lbmQgc3RydWN0dXJlLiBUaGlzIG5lZWRzIHRvIGJlCi0JCQkJICogZG9uZSB0byBlbnN1cmUgdGhhdCB0aGUgaW9lbmRzIGNvcnJlY3RseQotCQkJCSAqIHJlZmxlY3QgdGhlIGJsb2NrIG1hcHBpbmdzIGF0IGlvIGNvbXBsZXRpb24KLQkJCQkgKiBmb3IgdW53cml0dGVuIGV4dGVudCBjb252ZXJzaW9uLgotCQkJCSAqLwotCQkJCW5ld19pb2VuZCA9IDE7Ci0JCQkJZXJyID0geGZzX21hcF9ibG9ja3MoaW5vZGUsIG9mZnNldCwgbGVuLAotCQkJCQkJJmltYXAsIGZsYWdzKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlnb3RvIGVycm9yOwotCQkJCWltYXBfdmFsaWQgPSB4ZnNfaW1hcF92YWxpZChpbm9kZSwgJmltYXAsCi0JCQkJCQkJICAgIG9mZnNldCk7Ci0JCQl9Ci0JCQlpZiAoaW1hcF92YWxpZCkgewotCQkJCXhmc19tYXBfYXRfb2Zmc2V0KGlub2RlLCBiaCwgJmltYXAsIG9mZnNldCk7Ci0JCQkJeGZzX2FkZF90b19pb2VuZChpbm9kZSwgYmgsIG9mZnNldCwgdHlwZSwKLQkJCQkJCSAmaW9lbmQsIG5ld19pb2VuZCk7Ci0JCQkJY291bnQrKzsKKwkJfSBlbHNlIGlmIChidWZmZXJfZGVsYXkoYmgpKSB7CisJCQlpZiAodHlwZSAhPSBJT19ERUxBTExPQykgeworCQkJCXR5cGUgPSBJT19ERUxBTExPQzsKKwkJCQlpbWFwX3ZhbGlkID0gMDsKIAkJCX0KIAkJfSBlbHNlIGlmIChidWZmZXJfdXB0b2RhdGUoYmgpKSB7Ci0JCQkvKgotCQkJICogd2UgZ290IGhlcmUgYmVjYXVzZSB0aGUgYnVmZmVyIGlzIGFscmVhZHkgbWFwcGVkLgotCQkJICogVGhhdCBtZWFucyBpdCBtdXN0IGFscmVhZHkgaGF2ZSBleHRlbnRzIGFsbG9jYXRlZAotCQkJICogdW5kZXJuZWF0aCBpdC4gTWFwIHRoZSBleHRlbnQgYnkgcmVhZGluZyBpdC4KLQkJCSAqLwotCQkJaWYgKCFpbWFwX3ZhbGlkIHx8IGZsYWdzICE9IEJNQVBJX1JFQUQpIHsKLQkJCQlmbGFncyA9IEJNQVBJX1JFQUQ7Ci0JCQkJc2l6ZSA9IHhmc19wcm9iZV9jbHVzdGVyKGlub2RlLCBwYWdlLCBiaCwgaGVhZCk7Ci0JCQkJZXJyID0geGZzX21hcF9ibG9ja3MoaW5vZGUsIG9mZnNldCwgc2l6ZSwKLQkJCQkJCSZpbWFwLCBmbGFncyk7Ci0JCQkJaWYgKGVycikKLQkJCQkJZ290byBlcnJvcjsKLQkJCQlpbWFwX3ZhbGlkID0geGZzX2ltYXBfdmFsaWQoaW5vZGUsICZpbWFwLAotCQkJCQkJCSAgICBvZmZzZXQpOwotCQkJfQotCi0JCQkvKgotCQkJICogV2Ugc2V0IHRoZSB0eXBlIHRvIElPX05FVyBpbiBjYXNlIHdlIGFyZSBkb2luZyBhCi0JCQkgKiBzbWFsbCB3cml0ZSBhdCBFT0YgdGhhdCBpcyBleHRlbmRpbmcgdGhlIGZpbGUgYnV0Ci0JCQkgKiB3aXRob3V0IG5lZWRpbmcgYW4gYWxsb2NhdGlvbi4gV2UgbmVlZCB0byB1cGRhdGUgdGhlCi0JCQkgKiBmaWxlIHNpemUgb24gSS9PIGNvbXBsZXRpb24gaW4gdGhpcyBjYXNlIHNvIGl0IGlzCi0JCQkgKiB0aGUgc2FtZSBjYXNlIGFzIGhhdmluZyBqdXN0IGFsbG9jYXRlZCBhIG5ldyBleHRlbnQKLQkJCSAqIHRoYXQgd2UgYXJlIHdyaXRpbmcgaW50byBmb3IgdGhlIGZpcnN0IHRpbWUuCi0JCQkgKi8KLQkJCXR5cGUgPSBJT19ORVc7Ci0JCQlpZiAodHJ5bG9ja19idWZmZXIoYmgpKSB7Ci0JCQkJaWYgKGltYXBfdmFsaWQpCi0JCQkJCWFsbF9iaCA9IDE7Ci0JCQkJeGZzX2FkZF90b19pb2VuZChpbm9kZSwgYmgsIG9mZnNldCwgdHlwZSwKLQkJCQkJCSZpb2VuZCwgIWltYXBfdmFsaWQpOwotCQkJCWNvdW50Kys7Ci0JCQl9IGVsc2UgeworCQkJaWYgKHR5cGUgIT0gSU9fT1ZFUldSSVRFKSB7CisJCQkJdHlwZSA9IElPX09WRVJXUklURTsKIAkJCQlpbWFwX3ZhbGlkID0gMDsKIAkJCX0KLQkJfSBlbHNlIGlmIChQYWdlVXB0b2RhdGUocGFnZSkpIHsKLQkJCUFTU0VSVChidWZmZXJfbWFwcGVkKGJoKSk7Ci0JCQlpbWFwX3ZhbGlkID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChQYWdlVXB0b2RhdGUocGFnZSkpIHsKKwkJCQlBU1NFUlQoYnVmZmVyX21hcHBlZChiaCkpOworCQkJCWltYXBfdmFsaWQgPSAwOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQlpZiAoaW1hcF92YWxpZCkKKwkJCWltYXBfdmFsaWQgPSB4ZnNfaW1hcF92YWxpZChpbm9kZSwgJmltYXAsIG9mZnNldCk7CisJCWlmICghaW1hcF92YWxpZCkgeworCQkJLyoKKwkJCSAqIElmIHdlIGRpZG4ndCBoYXZlIGEgdmFsaWQgbWFwcGluZyB0aGVuIHdlIG5lZWQgdG8KKwkJCSAqIHB1dCB0aGUgbmV3IG1hcHBpbmcgaW50byBhIHNlcGFyYXRlIGlvZW5kIHN0cnVjdHVyZS4KKwkJCSAqIFRoaXMgZW5zdXJlcyBub24tY29udGlndW91cyBleHRlbnRzIGFsd2F5cyBoYXZlCisJCQkgKiBzZXBhcmF0ZSBpb2VuZHMsIHdoaWNoIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQKKwkJCSAqIGZvciB1bndyaXR0ZW4gZXh0ZW50IGNvbnZlcnNpb24gYXQgSS9PIGNvbXBsZXRpb24KKwkJCSAqIHRpbWUuCisJCQkgKi8KKwkJCW5ld19pb2VuZCA9IDE7CisJCQllcnIgPSB4ZnNfbWFwX2Jsb2Nrcyhpbm9kZSwgb2Zmc2V0LCAmaW1hcCwgdHlwZSwKKwkJCQkJICAgICBub25ibG9ja2luZyk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyb3I7CisJCQlpbWFwX3ZhbGlkID0geGZzX2ltYXBfdmFsaWQoaW5vZGUsICZpbWFwLCBvZmZzZXQpOworCQl9CisJCWlmIChpbWFwX3ZhbGlkKSB7CisJCQlsb2NrX2J1ZmZlcihiaCk7CisJCQlpZiAodHlwZSAhPSBJT19PVkVSV1JJVEUpCisJCQkJeGZzX21hcF9hdF9vZmZzZXQoaW5vZGUsIGJoLCAmaW1hcCwgb2Zmc2V0KTsKKwkJCXhmc19hZGRfdG9faW9lbmQoaW5vZGUsIGJoLCBvZmZzZXQsIHR5cGUsICZpb2VuZCwKKwkJCQkJIG5ld19pb2VuZCk7CisJCQljb3VudCsrOwogCQl9CiAKIAkJaWYgKCFpb2hlYWQpCkBAIC0xMTg4LDcgKzEwNjksNyBAQAogCQkJZW5kX2luZGV4ID0gbGFzdF9pbmRleDsKIAogCQl4ZnNfY2x1c3Rlcl93cml0ZShpbm9kZSwgcGFnZS0+aW5kZXggKyAxLCAmaW1hcCwgJmlvZW5kLAotCQkJCQl3YmMsIGFsbF9iaCwgZW5kX2luZGV4KTsKKwkJCQkgIHdiYywgZW5kX2luZGV4KTsKIAl9CiAKIAlpZiAoaW9oZWFkKQpAQCAtMTI1NywxMyArMTEzOCwxOSBAQAogCWludAkJCWNyZWF0ZSwKIAlpbnQJCQlkaXJlY3QpCiB7Ci0JaW50CQkJZmxhZ3MgPSBjcmVhdGUgPyBCTUFQSV9XUklURSA6IEJNQVBJX1JFQUQ7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKKwl4ZnNfZmlsZW9mZl90CQlvZmZzZXRfZnNiLCBlbmRfZnNiOworCWludAkJCWVycm9yID0gMDsKKwlpbnQJCQlsb2NrbW9kZSA9IDA7CiAJc3RydWN0IHhmc19ibWJ0X2lyZWMJaW1hcDsKKwlpbnQJCQluaW1hcHMgPSAxOwogCXhmc19vZmZfdAkJb2Zmc2V0OwogCXNzaXplX3QJCQlzaXplOwotCWludAkJCW5pbWFwID0gMTsKIAlpbnQJCQluZXcgPSAwOwotCWludAkJCWVycm9yOworCisJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQorCQlyZXR1cm4gLVhGU19FUlJPUihFSU8pOwogCiAJb2Zmc2V0ID0gKHhmc19vZmZfdClpYmxvY2sgPDwgaW5vZGUtPmlfYmxrYml0czsKIAlBU1NFUlQoYmhfcmVzdWx0LT5iX3NpemUgPj0gKDEgPDwgaW5vZGUtPmlfYmxrYml0cykpOwpAQCAtMTI3MiwxNSArMTE1OSw0NSBAQAogCWlmICghY3JlYXRlICYmIGRpcmVjdCAmJiBvZmZzZXQgPj0gaV9zaXplX3JlYWQoaW5vZGUpKQogCQlyZXR1cm4gMDsKIAotCWlmIChkaXJlY3QgJiYgY3JlYXRlKQotCQlmbGFncyB8PSBCTUFQSV9ESVJFQ1Q7CisJaWYgKGNyZWF0ZSkgeworCQlsb2NrbW9kZSA9IFhGU19JTE9DS19FWENMOworCQl4ZnNfaWxvY2soaXAsIGxvY2ttb2RlKTsKKwl9IGVsc2UgeworCQlsb2NrbW9kZSA9IHhmc19pbG9ja19tYXBfc2hhcmVkKGlwKTsKKwl9CiAKLQllcnJvciA9IHhmc19pb21hcChYRlNfSShpbm9kZSksIG9mZnNldCwgc2l6ZSwgZmxhZ3MsICZpbWFwLCAmbmltYXAsCi0JCQkgICZuZXcpOworCUFTU0VSVChvZmZzZXQgPD0gbXAtPm1fbWF4aW9mZnNldCk7CisJaWYgKG9mZnNldCArIHNpemUgPiBtcC0+bV9tYXhpb2Zmc2V0KQorCQlzaXplID0gbXAtPm1fbWF4aW9mZnNldCAtIG9mZnNldDsKKwllbmRfZnNiID0gWEZTX0JfVE9fRlNCKG1wLCAoeGZzX3Vmc2l6ZV90KW9mZnNldCArIHNpemUpOworCW9mZnNldF9mc2IgPSBYRlNfQl9UT19GU0JUKG1wLCBvZmZzZXQpOworCisJZXJyb3IgPSB4ZnNfYm1hcGkoTlVMTCwgaXAsIG9mZnNldF9mc2IsIGVuZF9mc2IgLSBvZmZzZXRfZnNiLAorCQkJICBYRlNfQk1BUElfRU5USVJFLCAgTlVMTCwgMCwgJmltYXAsICZuaW1hcHMsIE5VTEwpOwogCWlmIChlcnJvcikKLQkJcmV0dXJuIC1lcnJvcjsKLQlpZiAobmltYXAgPT0gMCkKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0X3VubG9jazsKKworCWlmIChjcmVhdGUgJiYKKwkgICAgKCFuaW1hcHMgfHwKKwkgICAgIChpbWFwLmJyX3N0YXJ0YmxvY2sgPT0gSE9MRVNUQVJUQkxPQ0sgfHwKKwkgICAgICBpbWFwLmJyX3N0YXJ0YmxvY2sgPT0gREVMQVlTVEFSVEJMT0NLKSkpIHsKKwkJaWYgKGRpcmVjdCkgeworCQkJZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVfZGlyZWN0KGlwLCBvZmZzZXQsIHNpemUsCisJCQkJCQkgICAgICAgJmltYXAsIG5pbWFwcyk7CisJCX0gZWxzZSB7CisJCQllcnJvciA9IHhmc19pb21hcF93cml0ZV9kZWxheShpcCwgb2Zmc2V0LCBzaXplLCAmaW1hcCk7CisJCX0KKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfdW5sb2NrOworCisJCXRyYWNlX3hmc19nZXRfYmxvY2tzX2FsbG9jKGlwLCBvZmZzZXQsIHNpemUsIDAsICZpbWFwKTsKKwl9IGVsc2UgaWYgKG5pbWFwcykgeworCQl0cmFjZV94ZnNfZ2V0X2Jsb2Nrc19mb3VuZChpcCwgb2Zmc2V0LCBzaXplLCAwLCAmaW1hcCk7CisJfSBlbHNlIHsKKwkJdHJhY2VfeGZzX2dldF9ibG9ja3Nfbm90Zm91bmQoaXAsIG9mZnNldCwgc2l6ZSk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJeGZzX2l1bmxvY2soaXAsIGxvY2ttb2RlKTsKIAogCWlmIChpbWFwLmJyX3N0YXJ0YmxvY2sgIT0gSE9MRVNUQVJUQkxPQ0sgJiYKIAkgICAgaW1hcC5icl9zdGFydGJsb2NrICE9IERFTEFZU1RBUlRCTE9DSykgewpAQCAtMTM0Nyw2ICsxMjY0LDEwIEBACiAJfQogCiAJcmV0dXJuIDA7CisKK291dF91bmxvY2s6CisJeGZzX2l1bmxvY2soaXAsIGxvY2ttb2RlKTsKKwlyZXR1cm4gLWVycm9yOwogfQogCiBpbnQKQEAgLTE0MzQsNyArMTM1NSw3IEBACiAJc3NpemVfdAkJCXJldDsKIAogCWlmIChydyAmIFdSSVRFKSB7Ci0JCWlvY2ItPnByaXZhdGUgPSB4ZnNfYWxsb2NfaW9lbmQoaW5vZGUsIElPX05FVyk7CisJCWlvY2ItPnByaXZhdGUgPSB4ZnNfYWxsb2NfaW9lbmQoaW5vZGUsIElPX0RJUkVDVCk7CiAKIAkJcmV0ID0gX19ibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLCBiZGV2LCBpb3YsCiAJCQkJCSAgICBvZmZzZXQsIG5yX3NlZ3MsCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmgKaW5kZXggYzUwNTdmYi4uNzFmNzIxZSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuaApAQCAtMjMsNiArMjMsMjIgQEAKIGV4dGVybiBtZW1wb29sX3QgKnhmc19pb2VuZF9wb29sOwogCiAvKgorICogVHlwZXMgb2YgSS9PIGZvciBibWFwIGNsdXN0ZXJpbmcgYW5kIEkvTyBjb21wbGV0aW9uIHRyYWNraW5nLgorICovCitlbnVtIHsKKwlJT19ESVJFQ1QgPSAwLAkvKiBzcGVjaWFsIGNhc2UgZm9yIGRpcmVjdCBJL08gaW9lbmRzICovCisJSU9fREVMQUxMT0MsCS8qIG1hcHBpbmcgY292ZXJzIGRlbGFsbG9jIHJlZ2lvbiAqLworCUlPX1VOV1JJVFRFTiwJLyogbWFwcGluZyBjb3ZlcnMgYWxsb2NhdGVkIGJ1dCB1bmluaXRpYWxpemVkIGRhdGEgKi8KKwlJT19PVkVSV1JJVEUsCS8qIG1hcHBpbmcgY292ZXJzIGFscmVhZHkgYWxsb2NhdGVkIGV4dGVudCAqLworfTsKKworI2RlZmluZSBYRlNfSU9fVFlQRVMgXAorCXsgMCwJCQkiIiB9LCBcCisJeyBJT19ERUxBTExPQywJCSJkZWxhbGxvYyIgfSwgXAorCXsgSU9fVU5XUklUVEVOLAkJInVud3JpdHRlbiIgfSwgXAorCXsgSU9fT1ZFUldSSVRFLAkJIm92ZXJ3cml0ZSIgfQorCisvKgogICogeGZzX2lvZW5kIHN0cnVjdCBtYW5hZ2VzIGxhcmdlIGV4dGVudCB3cml0ZXMgZm9yIFhGUy4KICAqIEl0IGNhbiBtYW5hZ2Ugc2V2ZXJhbCBtdWx0aS1wYWdlIGJpbydzIGF0IG9uY2UuCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKaW5kZXggNGM1ZGViNi4uOTJmMWYyYSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKQEAgLTQ0LDEyICs0NCw3IEBACiAKIHN0YXRpYyBrbWVtX3pvbmVfdCAqeGZzX2J1Zl96b25lOwogU1RBVElDIGludCB4ZnNidWZkKHZvaWQgKik7Ci1TVEFUSUMgaW50IHhmc2J1ZmRfd2FrZXVwKHN0cnVjdCBzaHJpbmtlciAqLCBpbnQsIGdmcF90KTsKIFNUQVRJQyB2b2lkIHhmc19idWZfZGVsd3JpX3F1ZXVlKHhmc19idWZfdCAqLCBpbnQpOwotc3RhdGljIHN0cnVjdCBzaHJpbmtlciB4ZnNfYnVmX3NoYWtlID0gewotCS5zaHJpbmsgPSB4ZnNidWZkX3dha2V1cCwKLQkuc2Vla3MgPSBERUZBVUxUX1NFRUtTLAotfTsKIAogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp4ZnNsb2dkX3dvcmtxdWV1ZTsKIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp4ZnNkYXRhZF93b3JrcXVldWU7CkBAIC0xNjgsOCArMTYzLDc5IEBACiB9CiAKIC8qCi0gKglJbnRlcm5hbCB4ZnNfYnVmX3Qgb2JqZWN0IG1hbmlwdWxhdGlvbgorICogeGZzX2J1Zl9scnVfYWRkIC0gYWRkIGEgYnVmZmVyIHRvIHRoZSBMUlUuCisgKgorICogVGhlIExSVSB0YWtlcyBhIG5ldyByZWZlcmVuY2UgdG8gdGhlIGJ1ZmZlciBzbyB0aGF0IGl0IHdpbGwgb25seSBiZSBmcmVlZAorICogb25jZSB0aGUgc2hyaW5rZXIgdGFrZXMgdGhlIGJ1ZmZlciBvZmYgdGhlIExSVS4KICAqLworU1RBVElDIHZvaWQKK3hmc19idWZfbHJ1X2FkZCgKKwlzdHJ1Y3QgeGZzX2J1ZgkqYnApCit7CisJc3RydWN0IHhmc19idWZ0YXJnICpidHAgPSBicC0+Yl90YXJnZXQ7CisKKwlzcGluX2xvY2soJmJ0cC0+YnRfbHJ1X2xvY2spOworCWlmIChsaXN0X2VtcHR5KCZicC0+Yl9scnUpKSB7CisJCWF0b21pY19pbmMoJmJwLT5iX2hvbGQpOworCQlsaXN0X2FkZF90YWlsKCZicC0+Yl9scnUsICZidHAtPmJ0X2xydSk7CisJCWJ0cC0+YnRfbHJ1X25yKys7CisJfQorCXNwaW5fdW5sb2NrKCZidHAtPmJ0X2xydV9sb2NrKTsKK30KKworLyoKKyAqIHhmc19idWZfbHJ1X2RlbCAtIHJlbW92ZSBhIGJ1ZmZlciBmcm9tIHRoZSBMUlUKKyAqCisgKiBUaGUgdW5sb2NrZWQgY2hlY2sgaXMgc2FmZSBoZXJlIGJlY2F1c2UgaXQgb25seSBvY2N1cnMgd2hlbiB0aGVyZSBhcmUgbm90CisgKiBiX2xydV9yZWYgY291bnRzIGxlZnQgb24gdGhlIGlub2RlIHVuZGVyIHRoZSBwYWctPnBhZ19idWZfbG9jay4gaXQgaXMgdGhlcmUKKyAqIHRvIG9wdGltaXNlIHRoZSBzaHJpbmtlciByZW1vdmluZyB0aGUgYnVmZmVyIGZyb20gdGhlIExSVSBhbmQgY2FsbGluZworICogeGZzX2J1Zl9mcmVlKCkuIGkuZS4gaXQgcmVtb3ZlcyBhbiB1bm5lY2Nlc3Nhcnkgcm91bmQgdHJpcCBvbiB0aGUKKyAqIGJ0X2xydV9sb2NrLgorICovCitTVEFUSUMgdm9pZAoreGZzX2J1Zl9scnVfZGVsKAorCXN0cnVjdCB4ZnNfYnVmCSpicCkKK3sKKwlzdHJ1Y3QgeGZzX2J1ZnRhcmcgKmJ0cCA9IGJwLT5iX3RhcmdldDsKKworCWlmIChsaXN0X2VtcHR5KCZicC0+Yl9scnUpKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJmJ0cC0+YnRfbHJ1X2xvY2spOworCWlmICghbGlzdF9lbXB0eSgmYnAtPmJfbHJ1KSkgeworCQlsaXN0X2RlbF9pbml0KCZicC0+Yl9scnUpOworCQlidHAtPmJ0X2xydV9uci0tOworCX0KKwlzcGluX3VubG9jaygmYnRwLT5idF9scnVfbG9jayk7Cit9CisKKy8qCisgKiBXaGVuIHdlIG1hcmsgYSBidWZmZXIgc3RhbGUsIHdlIHJlbW92ZSB0aGUgYnVmZmVyIGZyb20gdGhlIExSVSBhbmQgY2xlYXIgdGhlCisgKiBiX2xydV9yZWYgY291bnQgc28gdGhhdCB0aGUgYnVmZmVyIGlzIGZyZWVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGJ1ZmZlcgorICogcmVmZXJlbmNlIGNvdW50IGZhbGxzIHRvIHplcm8uIElmIHRoZSBidWZmZXIgaXMgYWxyZWFkeSBvbiB0aGUgTFJVLCB3ZSBuZWVkCisgKiB0byByZW1vdmUgdGhlIHJlZmVyZW5jZSB0aGF0IExSVSBob2xkcyBvbiB0aGUgYnVmZmVyLgorICoKKyAqIFRoaXMgcHJldmVudHMgYnVpbGQtdXAgb2Ygc3RhbGUgYnVmZmVycyBvbiB0aGUgTFJVLgorICovCit2b2lkCit4ZnNfYnVmX3N0YWxlKAorCXN0cnVjdCB4ZnNfYnVmCSpicCkKK3sKKwlicC0+Yl9mbGFncyB8PSBYQkZfU1RBTEU7CisJYXRvbWljX3NldCgmKGJwKS0+Yl9scnVfcmVmLCAwKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmJwLT5iX2xydSkpIHsKKwkJc3RydWN0IHhmc19idWZ0YXJnICpidHAgPSBicC0+Yl90YXJnZXQ7CisKKwkJc3Bpbl9sb2NrKCZidHAtPmJ0X2xydV9sb2NrKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZicC0+Yl9scnUpKSB7CisJCQlsaXN0X2RlbF9pbml0KCZicC0+Yl9scnUpOworCQkJYnRwLT5idF9scnVfbnItLTsKKwkJCWF0b21pY19kZWMoJmJwLT5iX2hvbGQpOworCQl9CisJCXNwaW5fdW5sb2NrKCZidHAtPmJ0X2xydV9sb2NrKTsKKwl9CisJQVNTRVJUKGF0b21pY19yZWFkKCZicC0+Yl9ob2xkKSA+PSAxKTsKK30KIAogU1RBVElDIHZvaWQKIF94ZnNfYnVmX2luaXRpYWxpemUoCkBAIC0xODYsNyArMjUyLDkgQEAKIAogCW1lbXNldChicCwgMCwgc2l6ZW9mKHhmc19idWZfdCkpOwogCWF0b21pY19zZXQoJmJwLT5iX2hvbGQsIDEpOworCWF0b21pY19zZXQoJmJwLT5iX2xydV9yZWYsIDEpOwogCWluaXRfY29tcGxldGlvbigmYnAtPmJfaW93YWl0KTsKKwlJTklUX0xJU1RfSEVBRCgmYnAtPmJfbHJ1KTsKIAlJTklUX0xJU1RfSEVBRCgmYnAtPmJfbGlzdCk7CiAJUkJfQ0xFQVJfTk9ERSgmYnAtPmJfcmJub2RlKTsKIAlzZW1hX2luaXQoJmJwLT5iX3NlbWEsIDApOyAvKiBoZWxkLCBubyB3YWl0ZXJzICovCkBAIC0yNjIsNiArMzMwLDggQEAKIHsKIAl0cmFjZV94ZnNfYnVmX2ZyZWUoYnAsIF9SRVRfSVBfKTsKIAorCUFTU0VSVChsaXN0X2VtcHR5KCZicC0+Yl9scnUpKTsKKwogCWlmIChicC0+Yl9mbGFncyAmIChfWEJGX1BBR0VfQ0FDSEV8X1hCRl9QQUdFUykpIHsKIAkJdWludAkJaTsKIApAQCAtMzM3LDcgKzQwNyw2IEBACiAJCQkJCV9fZnVuY19fLCBnZnBfbWFzayk7CiAKIAkJCVhGU19TVEFUU19JTkMoeGJfcGFnZV9yZXRyaWVzKTsKLQkJCXhmc2J1ZmRfd2FrZXVwKE5VTEwsIDAsIGdmcF9tYXNrKTsKIAkJCWNvbmdlc3Rpb25fd2FpdChCTEtfUldfQVNZTkMsIEhaLzUwKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KQEAgLTgyOCw2ICs4OTcsNyBAQAogCiAJaWYgKCFwYWcpIHsKIAkJQVNTRVJUKCFicC0+Yl9yZWxzZSk7CisJCUFTU0VSVChsaXN0X2VtcHR5KCZicC0+Yl9scnUpKTsKIAkJQVNTRVJUKFJCX0VNUFRZX05PREUoJmJwLT5iX3Jibm9kZSkpOwogCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYnAtPmJfaG9sZCkpCiAJCQl4ZnNfYnVmX2ZyZWUoYnApOwpAQCAtODM1LDEzICs5MDUsMTkgQEAKIAl9CiAKIAlBU1NFUlQoIVJCX0VNUFRZX05PREUoJmJwLT5iX3Jibm9kZSkpOworCiAJQVNTRVJUKGF0b21pY19yZWFkKCZicC0+Yl9ob2xkKSA+IDApOwogCWlmIChhdG9taWNfZGVjX2FuZF9sb2NrKCZicC0+Yl9ob2xkLCAmcGFnLT5wYWdfYnVmX2xvY2spKSB7CiAJCWlmIChicC0+Yl9yZWxzZSkgewogCQkJYXRvbWljX2luYygmYnAtPmJfaG9sZCk7CiAJCQlzcGluX3VubG9jaygmcGFnLT5wYWdfYnVmX2xvY2spOwogCQkJYnAtPmJfcmVsc2UoYnApOworCQl9IGVsc2UgaWYgKCEoYnAtPmJfZmxhZ3MgJiBYQkZfU1RBTEUpICYmCisJCQkgICBhdG9taWNfcmVhZCgmYnAtPmJfbHJ1X3JlZikpIHsKKwkJCXhmc19idWZfbHJ1X2FkZChicCk7CisJCQlzcGluX3VubG9jaygmcGFnLT5wYWdfYnVmX2xvY2spOwogCQl9IGVsc2UgeworCQkJeGZzX2J1Zl9scnVfZGVsKGJwKTsKIAkJCUFTU0VSVCghKGJwLT5iX2ZsYWdzICYgKFhCRl9ERUxXUkl8X1hCRl9ERUxXUklfUSkpKTsKIAkJCXJiX2VyYXNlKCZicC0+Yl9yYm5vZGUsICZwYWctPnBhZ19idWZfdHJlZSk7CiAJCQlzcGluX3VubG9jaygmcGFnLT5wYWdfYnVmX2xvY2spOwpAQCAtMTQzOCw1MSArMTUxNCw4NCBAQAogICovCiAKIC8qCi0gKglXYWl0IGZvciBhbnkgYnVmcyB3aXRoIGNhbGxiYWNrcyB0aGF0IGhhdmUgYmVlbiBzdWJtaXR0ZWQgYnV0Ci0gKgloYXZlIG5vdCB5ZXQgcmV0dXJuZWQuLi4gd2FsayB0aGUgaGFzaCBsaXN0IGZvciB0aGUgdGFyZ2V0LgorICogV2FpdCBmb3IgYW55IGJ1ZnMgd2l0aCBjYWxsYmFja3MgdGhhdCBoYXZlIGJlZW4gc3VibWl0dGVkIGJ1dCBoYXZlIG5vdCB5ZXQKKyAqIHJldHVybmVkLiBUaGVzZSBidWZmZXJzIHdpbGwgaGF2ZSBhbiBlbGV2YXRlZCBob2xkIGNvdW50LCBzbyB3YWl0IG9uIHRob3NlCisgKiB3aGlsZSBmcmVlaW5nIGFsbCB0aGUgYnVmZmVycyBvbmx5IGhlbGQgYnkgdGhlIExSVS4KICAqLwogdm9pZAogeGZzX3dhaXRfYnVmdGFyZygKIAlzdHJ1Y3QgeGZzX2J1ZnRhcmcJKmJ0cCkKIHsKLQlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7Ci0JdWludAkJCWk7CisJc3RydWN0IHhmc19idWYJCSpicDsKIAotCWZvciAoaSA9IDA7IGkgPCBidHAtPmJ0X21vdW50LT5tX3NiLnNiX2FnY291bnQ7IGkrKykgewotCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KGJ0cC0+YnRfbW91bnQsIGkpOwotCQlzcGluX2xvY2soJnBhZy0+cGFnX2J1Zl9sb2NrKTsKLQkJd2hpbGUgKHJiX2ZpcnN0KCZwYWctPnBhZ19idWZfdHJlZSkpIHsKLQkJCXNwaW5fdW5sb2NrKCZwYWctPnBhZ19idWZfbG9jayk7CityZXN0YXJ0OgorCXNwaW5fbG9jaygmYnRwLT5idF9scnVfbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZidHAtPmJ0X2xydSkpIHsKKwkJYnAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZidHAtPmJ0X2xydSwgc3RydWN0IHhmc19idWYsIGJfbHJ1KTsKKwkJaWYgKGF0b21pY19yZWFkKCZicC0+Yl9ob2xkKSA+IDEpIHsKKwkJCXNwaW5fdW5sb2NrKCZidHAtPmJ0X2xydV9sb2NrKTsKIAkJCWRlbGF5KDEwMCk7Ci0JCQlzcGluX2xvY2soJnBhZy0+cGFnX2J1Zl9sb2NrKTsKKwkJCWdvdG8gcmVzdGFydDsKIAkJfQotCQlzcGluX3VubG9jaygmcGFnLT5wYWdfYnVmX2xvY2spOwotCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJCS8qCisJCSAqIGNsZWFyIHRoZSBMUlUgcmVmZXJlbmNlIGNvdW50IHNvIHRoZSBidWZlciBkb2Vzbid0IGdldAorCQkgKiBpZ25vcmVkIGluIHhmc19idWZfcmVsZSgpLgorCQkgKi8KKwkJYXRvbWljX3NldCgmYnAtPmJfbHJ1X3JlZiwgMCk7CisJCXNwaW5fdW5sb2NrKCZidHAtPmJ0X2xydV9sb2NrKTsKKwkJeGZzX2J1Zl9yZWxlKGJwKTsKKwkJc3Bpbl9sb2NrKCZidHAtPmJ0X2xydV9sb2NrKTsKIAl9CisJc3Bpbl91bmxvY2soJmJ0cC0+YnRfbHJ1X2xvY2spOwogfQogCi0vKgotICoJYnVmdGFyZyBsaXN0IGZvciBkZWx3cml0ZSBxdWV1ZSBwcm9jZXNzaW5nCi0gKi8KLXN0YXRpYyBMSVNUX0hFQUQoeGZzX2J1ZnRhcmdfbGlzdCk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmc19idWZ0YXJnX2xvY2spOwotCi1TVEFUSUMgdm9pZAoteGZzX3JlZ2lzdGVyX2J1ZnRhcmcoCi0JeGZzX2J1ZnRhcmdfdCAgICAgICAgICAgKmJ0cCkKK2ludAoreGZzX2J1ZnRhcmdfc2hyaW5rKAorCXN0cnVjdCBzaHJpbmtlcgkJKnNocmluaywKKwlpbnQJCQlucl90b19zY2FuLAorCWdmcF90CQkJbWFzaykKIHsKLQlzcGluX2xvY2soJnhmc19idWZ0YXJnX2xvY2spOwotCWxpc3RfYWRkKCZidHAtPmJ0X2xpc3QsICZ4ZnNfYnVmdGFyZ19saXN0KTsKLQlzcGluX3VubG9jaygmeGZzX2J1ZnRhcmdfbG9jayk7Ci19CisJc3RydWN0IHhmc19idWZ0YXJnCSpidHAgPSBjb250YWluZXJfb2Yoc2hyaW5rLAorCQkJCQlzdHJ1Y3QgeGZzX2J1ZnRhcmcsIGJ0X3Nocmlua2VyKTsKKwlzdHJ1Y3QgeGZzX2J1ZgkJKmJwOworCUxJU1RfSEVBRChkaXNwb3NlKTsKIAotU1RBVElDIHZvaWQKLXhmc191bnJlZ2lzdGVyX2J1ZnRhcmcoCi0JeGZzX2J1ZnRhcmdfdCAgICAgICAgICAgKmJ0cCkKLXsKLQlzcGluX2xvY2soJnhmc19idWZ0YXJnX2xvY2spOwotCWxpc3RfZGVsKCZidHAtPmJ0X2xpc3QpOwotCXNwaW5fdW5sb2NrKCZ4ZnNfYnVmdGFyZ19sb2NrKTsKKwlpZiAoIW5yX3RvX3NjYW4pCisJCXJldHVybiBidHAtPmJ0X2xydV9ucjsKKworCXNwaW5fbG9jaygmYnRwLT5idF9scnVfbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZidHAtPmJ0X2xydSkpIHsKKwkJaWYgKG5yX3RvX3NjYW4tLSA8PSAwKQorCQkJYnJlYWs7CisKKwkJYnAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZidHAtPmJ0X2xydSwgc3RydWN0IHhmc19idWYsIGJfbHJ1KTsKKworCQkvKgorCQkgKiBEZWNyZW1lbnQgdGhlIGJfbHJ1X3JlZiBjb3VudCB1bmxlc3MgdGhlIHZhbHVlIGlzIGFscmVhZHkKKwkJICogemVyby4gSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgemVybywgd2UgbmVlZCB0byByZWNsYWltIHRoZQorCQkgKiBidWZmZXIsIG90aGVyd2lzZSBpdCBnZXRzIGFub3RoZXIgdHJpcCB0aHJvdWdoIHRoZSBMUlUuCisJCSAqLworCQlpZiAoIWF0b21pY19hZGRfdW5sZXNzKCZicC0+Yl9scnVfcmVmLCAtMSwgMCkpIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZicC0+Yl9scnUsICZidHAtPmJ0X2xydSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIHJlbW92ZSB0aGUgYnVmZmVyIGZyb20gdGhlIExSVSBub3cgdG8gYXZvaWQgbmVlZGluZyBhbm90aGVyCisJCSAqIGxvY2sgcm91bmQgdHJpcCBpbnNpZGUgeGZzX2J1Zl9yZWxlKCkuCisJCSAqLworCQlsaXN0X21vdmUoJmJwLT5iX2xydSwgJmRpc3Bvc2UpOworCQlidHAtPmJ0X2xydV9uci0tOworCX0KKwlzcGluX3VubG9jaygmYnRwLT5idF9scnVfbG9jayk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRpc3Bvc2UpKSB7CisJCWJwID0gbGlzdF9maXJzdF9lbnRyeSgmZGlzcG9zZSwgc3RydWN0IHhmc19idWYsIGJfbHJ1KTsKKwkJbGlzdF9kZWxfaW5pdCgmYnAtPmJfbHJ1KTsKKwkJeGZzX2J1Zl9yZWxlKGJwKTsKKwl9CisKKwlyZXR1cm4gYnRwLT5idF9scnVfbnI7CiB9CiAKIHZvaWQKQEAgLTE0OTAsMTcgKzE1OTksMTQgQEAKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCwKIAlzdHJ1Y3QgeGZzX2J1ZnRhcmcJKmJ0cCkKIHsKKwl1bnJlZ2lzdGVyX3Nocmlua2VyKCZidHAtPmJ0X3Nocmlua2VyKTsKKwogCXhmc19mbHVzaF9idWZ0YXJnKGJ0cCwgMSk7CiAJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpCiAJCXhmc19ibGtkZXZfaXNzdWVfZmx1c2goYnRwKTsKIAlpcHV0KGJ0cC0+YnRfbWFwcGluZy0+aG9zdCk7CiAKLQkvKiBVbnJlZ2lzdGVyIHRoZSBidWZ0YXJnIGZpcnN0IHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGEKLQkgKiB3YWtldXAgZmluZGluZyBhIG5vbi1leGlzdGVudCB0YXNrCi0JICovCi0JeGZzX3VucmVnaXN0ZXJfYnVmdGFyZyhidHApOwogCWt0aHJlYWRfc3RvcChidHAtPmJ0X3Rhc2spOwotCiAJa21lbV9mcmVlKGJ0cCk7CiB9CiAKQEAgLTE1OTcsMjAgKzE3MDMsMTMgQEAKIAl4ZnNfYnVmdGFyZ190CQkqYnRwLAogCWNvbnN0IGNoYXIJCSpmc25hbWUpCiB7Ci0JaW50CWVycm9yID0gMDsKLQotCUlOSVRfTElTVF9IRUFEKCZidHAtPmJ0X2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZidHAtPmJ0X2RlbHdyaXRlX3F1ZXVlKTsKIAlzcGluX2xvY2tfaW5pdCgmYnRwLT5idF9kZWx3cml0ZV9sb2NrKTsKIAlidHAtPmJ0X2ZsYWdzID0gMDsKIAlidHAtPmJ0X3Rhc2sgPSBrdGhyZWFkX3J1bih4ZnNidWZkLCBidHAsICJ4ZnNidWZkLyVzIiwgZnNuYW1lKTsKLQlpZiAoSVNfRVJSKGJ0cC0+YnRfdGFzaykpIHsKLQkJZXJyb3IgPSBQVFJfRVJSKGJ0cC0+YnRfdGFzayk7Ci0JCWdvdG8gb3V0X2Vycm9yOwotCX0KLQl4ZnNfcmVnaXN0ZXJfYnVmdGFyZyhidHApOwotb3V0X2Vycm9yOgotCXJldHVybiBlcnJvcjsKKwlpZiAoSVNfRVJSKGJ0cC0+YnRfdGFzaykpCisJCXJldHVybiBQVFJfRVJSKGJ0cC0+YnRfdGFzayk7CisJcmV0dXJuIDA7CiB9CiAKIHhmc19idWZ0YXJnX3QgKgpAQCAtMTYyNywxMiArMTcyNiwxNyBAQAogCWJ0cC0+YnRfbW91bnQgPSBtcDsKIAlidHAtPmJ0X2RldiA9ICBiZGV2LT5iZF9kZXY7CiAJYnRwLT5idF9iZGV2ID0gYmRldjsKKwlJTklUX0xJU1RfSEVBRCgmYnRwLT5idF9scnUpOworCXNwaW5fbG9ja19pbml0KCZidHAtPmJ0X2xydV9sb2NrKTsKIAlpZiAoeGZzX3NldHNpemVfYnVmdGFyZ19lYXJseShidHAsIGJkZXYpKQogCQlnb3RvIGVycm9yOwogCWlmICh4ZnNfbWFwcGluZ19idWZ0YXJnKGJ0cCwgYmRldikpCiAJCWdvdG8gZXJyb3I7CiAJaWYgKHhmc19hbGxvY19kZWx3cml0ZV9xdWV1ZShidHAsIGZzbmFtZSkpCiAJCWdvdG8gZXJyb3I7CisJYnRwLT5idF9zaHJpbmtlci5zaHJpbmsgPSB4ZnNfYnVmdGFyZ19zaHJpbms7CisJYnRwLT5idF9zaHJpbmtlci5zZWVrcyA9IERFRkFVTFRfU0VFS1M7CisJcmVnaXN0ZXJfc2hyaW5rZXIoJmJ0cC0+YnRfc2hyaW5rZXIpOwogCXJldHVybiBidHA7CiAKIGVycm9yOgpAQCAtMTczNywyNyArMTg0MSw2IEBACiAJZmx1c2hfd29ya3F1ZXVlKHF1ZXVlKTsKIH0KIAotU1RBVElDIGludAoteGZzYnVmZF93YWtldXAoCi0Jc3RydWN0IHNocmlua2VyCQkqc2hyaW5rLAotCWludAkJCXByaW9yaXR5LAotCWdmcF90CQkJbWFzaykKLXsKLQl4ZnNfYnVmdGFyZ190CQkqYnRwOwotCi0Jc3Bpbl9sb2NrKCZ4ZnNfYnVmdGFyZ19sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ0cCwgJnhmc19idWZ0YXJnX2xpc3QsIGJ0X2xpc3QpIHsKLQkJaWYgKHRlc3RfYml0KFhCVF9GT1JDRV9TTEVFUCwgJmJ0cC0+YnRfZmxhZ3MpKQotCQkJY29udGludWU7Ci0JCWlmIChsaXN0X2VtcHR5KCZidHAtPmJ0X2RlbHdyaXRlX3F1ZXVlKSkKLQkJCWNvbnRpbnVlOwotCQlzZXRfYml0KFhCVF9GT1JDRV9GTFVTSCwgJmJ0cC0+YnRfZmxhZ3MpOwotCQl3YWtlX3VwX3Byb2Nlc3MoYnRwLT5idF90YXNrKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJnhmc19idWZ0YXJnX2xvY2spOwotCXJldHVybiAwOwotfQotCiAvKgogICogTW92ZSBhcyBtYW55IGJ1ZmZlcnMgYXMgc3BlY2lmaWVkIHRvIHRoZSBzdXBwbGllZCBsaXN0CiAgKiBpZGljYXRpbmcgaWYgd2Ugc2tpcHBlZCBhbnkgYnVmZmVycyB0byBwcmV2ZW50IGRlYWRsb2Nrcy4KQEAgLTE5NTIsNyArMjAzNSw2IEBACiAJaWYgKCF4ZnNjb252ZXJ0ZF93b3JrcXVldWUpCiAJCWdvdG8gb3V0X2Rlc3Ryb3lfeGZzZGF0YWRfd29ya3F1ZXVlOwogCi0JcmVnaXN0ZXJfc2hyaW5rZXIoJnhmc19idWZfc2hha2UpOwogCXJldHVybiAwOwogCiAgb3V0X2Rlc3Ryb3lfeGZzZGF0YWRfd29ya3F1ZXVlOgpAQCAtMTk2OCw3ICsyMDUwLDYgQEAKIHZvaWQKIHhmc19idWZfdGVybWluYXRlKHZvaWQpCiB7Ci0JdW5yZWdpc3Rlcl9zaHJpbmtlcigmeGZzX2J1Zl9zaGFrZSk7CiAJZGVzdHJveV93b3JrcXVldWUoeGZzY29udmVydGRfd29ya3F1ZXVlKTsKIAlkZXN0cm95X3dvcmtxdWV1ZSh4ZnNkYXRhZF93b3JrcXVldWUpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHhmc2xvZ2Rfd29ya3F1ZXVlKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKaW5kZXggMzgzYTNmMy4uYTc2YzI0MiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKQEAgLTEyOCwxMCArMTI4LDE1IEBACiAKIAkvKiBwZXIgZGV2aWNlIGRlbHdyaSBxdWV1ZSAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdAkqYnRfdGFzazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWJ0X2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAlidF9kZWx3cml0ZV9xdWV1ZTsKIAlzcGlubG9ja190CQlidF9kZWx3cml0ZV9sb2NrOwogCXVuc2lnbmVkIGxvbmcJCWJ0X2ZsYWdzOworCisJLyogTFJVIGNvbnRyb2wgc3RydWN0dXJlcyAqLworCXN0cnVjdCBzaHJpbmtlcgkJYnRfc2hyaW5rZXI7CisJc3RydWN0IGxpc3RfaGVhZAlidF9scnU7CisJc3BpbmxvY2tfdAkJYnRfbHJ1X2xvY2s7CisJdW5zaWduZWQgaW50CQlidF9scnVfbnI7CiB9IHhmc19idWZ0YXJnX3Q7CiAKIC8qCkBAIC0xNjQsOSArMTY5LDExIEBACiAJeGZzX29mZl90CQliX2ZpbGVfb2Zmc2V0OwkvKiBvZmZzZXQgaW4gZmlsZSAqLwogCXNpemVfdAkJCWJfYnVmZmVyX2xlbmd0aDsvKiBzaXplIG9mIGJ1ZmZlciBpbiBieXRlcyAqLwogCWF0b21pY190CQliX2hvbGQ7CQkvKiByZWZlcmVuY2UgY291bnQgKi8KKwlhdG9taWNfdAkJYl9scnVfcmVmOwkvKiBscnUgcmVjbGFpbSByZWYgY291bnQgKi8KIAl4ZnNfYnVmX2ZsYWdzX3QJCWJfZmxhZ3M7CS8qIHN0YXR1cyBmbGFncyAqLwogCXN0cnVjdCBzZW1hcGhvcmUJYl9zZW1hOwkJLyogc2VtYXBob3JlIGZvciBsb2NrYWJsZXMgKi8KIAorCXN0cnVjdCBsaXN0X2hlYWQJYl9scnU7CQkvKiBscnUgbGlzdCAqLwogCXdhaXRfcXVldWVfaGVhZF90CWJfd2FpdGVyczsJLyogdW5waW4gd2FpdGVycyAqLwogCXN0cnVjdCBsaXN0X2hlYWQJYl9saXN0OwogCXN0cnVjdCB4ZnNfcGVyYWcJKmJfcGFnOwkJLyogY29udGFpbnMgcmJ0cmVlIHJvb3QgKi8KQEAgLTI2NCw3ICsyNzEsOCBAQAogI2RlZmluZSBYRlNfQlVGX1pFUk9GTEFHUyhicCkJKChicCktPmJfZmxhZ3MgJj0gXAogCQl+KFhCRl9SRUFEfFhCRl9XUklURXxYQkZfQVNZTkN8WEJGX0RFTFdSSXxYQkZfT1JERVJFRCkpCiAKLSNkZWZpbmUgWEZTX0JVRl9TVEFMRShicCkJKChicCktPmJfZmxhZ3MgfD0gWEJGX1NUQUxFKQordm9pZCB4ZnNfYnVmX3N0YWxlKHN0cnVjdCB4ZnNfYnVmICpicCk7CisjZGVmaW5lIFhGU19CVUZfU1RBTEUoYnApCXhmc19idWZfc3RhbGUoYnApOwogI2RlZmluZSBYRlNfQlVGX1VOU1RBTEUoYnApCSgoYnApLT5iX2ZsYWdzICY9IH5YQkZfU1RBTEUpCiAjZGVmaW5lIFhGU19CVUZfSVNTVEFMRShicCkJKChicCktPmJfZmxhZ3MgJiBYQkZfU1RBTEUpCiAjZGVmaW5lIFhGU19CVUZfU1VQRVJfU1RBTEUoYnApCWRvIHsJCQkJXApAQCAtMzI4LDkgKzMzNiwxNSBAQAogI2RlZmluZSBYRlNfQlVGX1NJWkUoYnApCQkoKGJwKS0+Yl9idWZmZXJfbGVuZ3RoKQogI2RlZmluZSBYRlNfQlVGX1NFVF9TSVpFKGJwLCBjbnQpCSgoYnApLT5iX2J1ZmZlcl9sZW5ndGggPSAoY250KSkKIAotI2RlZmluZSBYRlNfQlVGX1NFVF9WVFlQRV9SRUYoYnAsIHR5cGUsIHJlZikJZG8geyB9IHdoaWxlICgwKQorc3RhdGljIGlubGluZSB2b2lkCit4ZnNfYnVmX3NldF9yZWYoCisJc3RydWN0IHhmc19idWYJKmJwLAorCWludAkJbHJ1X3JlZikKK3sKKwlhdG9taWNfc2V0KCZicC0+Yl9scnVfcmVmLCBscnVfcmVmKTsKK30KKyNkZWZpbmUgWEZTX0JVRl9TRVRfVlRZUEVfUkVGKGJwLCB0eXBlLCByZWYpCXhmc19idWZfc2V0X3JlZihicCwgcmVmKQogI2RlZmluZSBYRlNfQlVGX1NFVF9WVFlQRShicCwgdHlwZSkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgWEZTX0JVRl9TRVRfUkVGKGJwLCByZWYpCQlkbyB7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgWEZTX0JVRl9JU1BJTk5FRChicCkJYXRvbWljX3JlYWQoJigoYnApLT5iX3Bpbl9jb3VudCkpCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2V4cG9ydC5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZXhwb3J0LmMKaW5kZXggMzc2NGQ3NC4uZmMwMTE0ZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZXhwb3J0LmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZXhwb3J0LmMKQEAgLTcwLDggKzcwLDE2IEBACiAJZWxzZQogCQlmaWxlaWRfdHlwZSA9IEZJTEVJRF9JTk8zMl9HRU5fUEFSRU5UOwogCi0JLyogZmlsZXN5c3RlbSBtYXkgY29udGFpbiA2NGJpdCBpbm9kZSBudW1iZXJzICovCi0JaWYgKCEoWEZTX00oaW5vZGUtPmlfc2IpLT5tX2ZsYWdzICYgWEZTX01PVU5UX1NNQUxMX0lOVU1TKSkKKwkvKgorCSAqIElmIHRoZSB0aGUgZmlsZXN5c3RlbSBtYXkgY29udGFpbiA2NGJpdCBpbm9kZSBudW1iZXJzLCB3ZSBuZWVkCisJICogdG8gdXNlIGxhcmdlciBmaWxlIGhhbmRsZXMgdGhhdCBjYW4gcmVwcmVzZW50IHRoZW0uCisJICoKKwkgKiBXaGlsZSB3ZSBvbmx5IGFsbG9jYXRlIGlub2RlcyB0aGF0IGRvIG5vdCBmaXQgaW50byAzMiBiaXRzIGFueQorCSAqIGxhcmdlIGVub3VnaCBmaWxlc3lzdGVtIG1heSBjb250YWluIHRoZW0sIHRodXMgdGhlIHNsaWdodGx5CisJICogY29uZnVzaW5nIGxvb2tpbmcgY29uZGl0aW9uYWwgYmVsb3cuCisJICovCisJaWYgKCEoWEZTX00oaW5vZGUtPmlfc2IpLT5tX2ZsYWdzICYgWEZTX01PVU5UX1NNQUxMX0lOVU1TKSB8fAorCSAgICAoWEZTX00oaW5vZGUtPmlfc2IpLT5tX2ZsYWdzICYgWEZTX01PVU5UXzMyQklUSU5PREVTKSkKIAkJZmlsZWlkX3R5cGUgfD0gWEZTX0ZJTEVJRF9UWVBFXzY0RkxBRzsKIAogCS8qCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKaW5kZXggOTRkNWZkNi4uZGE1NDQwMyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwpAQCAtNTE2LDYgKzUxNiw3IEBACiAJbG9mZl90CQluZXdfc2l6ZSA9IDA7CiAJeGZzX2Zsb2NrNjRfdAliZjsKIAl4ZnNfaW5vZGVfdAkqaXAgPSBYRlNfSShpbm9kZSk7CisJaW50CQljbWQgPSBYRlNfSU9DX1JFU1ZTUDsKIAogCS8qIHByZWFsbG9jYXRpb24gb24gZGlyZWN0b3JpZXMgbm90IHlldCBzdXBwb3J0ZWQgKi8KIAllcnJvciA9IC1FTk9ERVY7CkBAIC01MjgsNiArNTI5LDkgQEAKIAogCXhmc19pbG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKIAorCWlmIChtb2RlICYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpCisJCWNtZCA9IFhGU19JT0NfVU5SRVNWU1A7CisKIAkvKiBjaGVjayB0aGUgbmV3IGlub2RlIHNpemUgaXMgdmFsaWQgYmVmb3JlIGFsbG9jYXRpbmcgKi8KIAlpZiAoIShtb2RlICYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgJiYKIAkgICAgb2Zmc2V0ICsgbGVuID4gaV9zaXplX3JlYWQoaW5vZGUpKSB7CkBAIC01MzcsOCArNTQxLDcgQEAKIAkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQllcnJvciA9IC14ZnNfY2hhbmdlX2ZpbGVfc3BhY2UoaXAsIFhGU19JT0NfUkVTVlNQLCAmYmYsCi0JCQkJICAgICAgIDAsIFhGU19BVFRSX05PTE9DSyk7CisJZXJyb3IgPSAteGZzX2NoYW5nZV9maWxlX3NwYWNlKGlwLCBjbWQsICZiZiwgMCwgWEZTX0FUVFJfTk9MT0NLKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X3VubG9jazsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKaW5kZXggMjE0ZGRkNy4uMDk2NDk0OSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCkBAIC0zNyw3ICszNyw2IEBACiAKICNpbmNsdWRlIDxrbWVtLmg+CiAjaW5jbHVkZSA8bXJsb2NrLmg+Ci0jaW5jbHVkZSA8c3YuaD4KICNpbmNsdWRlIDx0aW1lLmg+CiAKICNpbmNsdWRlIDxzdXBwb3J0L2RlYnVnLmg+CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwppbmRleCAwNjRmOTY0Li5hMTBmNjQxIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKQEAgLTgzNCw4ICs4MzQsMTEgQEAKIAlzdHJ1Y3QgeGZzX2FpbAkJKmFpbHAsCiAJeGZzX2xzbl90CQl0aHJlc2hvbGRfbHNuKQogewotCWFpbHAtPnhhX3RhcmdldCA9IHRocmVzaG9sZF9sc247Ci0Jd2FrZV91cF9wcm9jZXNzKGFpbHAtPnhhX3Rhc2spOworCS8qIG9ubHkgZXZlciBtb3ZlIHRoZSB0YXJnZXQgZm9yd2FyZHMgKi8KKwlpZiAoWEZTX0xTTl9DTVAodGhyZXNob2xkX2xzbiwgYWlscC0+eGFfdGFyZ2V0KSA+IDApIHsKKwkJYWlscC0+eGFfdGFyZ2V0ID0gdGhyZXNob2xkX2xzbjsKKwkJd2FrZV91cF9wcm9jZXNzKGFpbHAtPnhhX3Rhc2spOworCX0KIH0KIAogU1RBVElDIGludApAQCAtODQ3LDggKzg1MCwxNyBAQAogCWxvbmcJCXRvdXQgPSAwOyAvKiBtaWxsaXNlY29uZHMgKi8KIAogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSh0b3V0ID8KLQkJCQltc2Vjc190b19qaWZmaWVzKHRvdXQpIDogTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCQkvKgorCQkgKiBmb3Igc2hvcnQgc2xlZXBzIGluZGljYXRpbmcgY29uZ2VzdGlvbiwgZG9uJ3QgYWxsb3cgdXMgdG8KKwkJICogZ2V0IHdva2VuIGVhcmx5LiBPdGhlcndpc2UgYWxsIHdlIGRvIGlzIGJhbmcgb24gdGhlIEFJTCBsb2NrCisJCSAqIHdpdGhvdXQgbWFraW5nIHByb2dyZXNzLgorCQkgKi8KKwkJaWYgKHRvdXQgJiYgdG91dCA8PSAyMCkKKwkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19LSUxMQUJMRSk7CisJCWVsc2UKKwkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dCh0b3V0ID8KKwkJCQkgbXNlY3NfdG9famlmZmllcyh0b3V0KSA6IE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKIAogCQkvKiBzd3N1c3AgKi8KIAkJdHJ5X3RvX2ZyZWV6ZSgpOwpAQCAtOTM1LDcgKzk0Nyw3IEBACiAgKiBTbGFiIG9iamVjdCBjcmVhdGlvbiBpbml0aWFsaXNhdGlvbiBmb3IgdGhlIFhGUyBpbm9kZS4KICAqIFRoaXMgY292ZXJzIG9ubHkgdGhlIGlkZW1wb3RlbnQgZmllbGRzIGluIHRoZSBYRlMgaW5vZGU7CiAgKiBhbGwgb3RoZXIgZmllbGRzIG5lZWQgdG8gYmUgaW5pdGlhbGlzZWQgb24gYWxsb2NhdGlvbgotICogZnJvbSB0aGUgc2xhYi4gVGhpcyBhdm9pZHMgdGhlIG5lZWQgdG8gcmVwZWF0ZWRseSBpbnRpYWxpc2UKKyAqIGZyb20gdGhlIHNsYWIuIFRoaXMgYXZvaWRzIHRoZSBuZWVkIHRvIHJlcGVhdGVkbHkgaW5pdGlhbGlzZQogICogZmllbGRzIGluIHRoZSB4ZnMgaW5vZGUgdGhhdCBsZWZ0IGluIHRoZSBpbml0aWFsaXNlIHN0YXRlCiAgKiB3aGVuIGZyZWVpbmcgdGhlIGlub2RlLgogICovCkBAIC0xMTE4LDYgKzExMzAsOCBAQAogCSAqLwogCUFTU0VSVCghcndzZW1faXNfbG9ja2VkKCZpcC0+aV9pb2xvY2subXJfbG9jaykpOwogCW1ybG9ja19pbml0KCZpcC0+aV9pb2xvY2ssIE1STE9DS19CQVJSSUVSLCAieGZzaW8iLCBpcC0+aV9pbm8pOworCWxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKCZpcC0+aV9pb2xvY2subXJfbG9jaywKKwkJCSZ4ZnNfaW9sb2NrX3JlY2xhaW1hYmxlLCAieGZzX2lvbG9ja19yZWNsYWltYWJsZSIpOwogCiAJeGZzX2luYWN0aXZlKGlwKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwppbmRleCBhZmIwZDdjLi5hMDI0ODBkIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCkBAIC01MywxNCArNTMsMzAgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IFZGU19JKGlwKTsKIAorCUFTU0VSVChyY3VfcmVhZF9sb2NrX2hlbGQoKSk7CisKKwkvKgorCSAqIGNoZWNrIGZvciBzdGFsZSBSQ1UgZnJlZWQgaW5vZGUKKwkgKgorCSAqIElmIHRoZSBpbm9kZSBoYXMgYmVlbiByZWFsbG9jYXRlZCwgaXQgZG9lc24ndCBtYXR0ZXIgaWYgaXQncyBub3QgaW4KKwkgKiB0aGUgQUcgd2UgYXJlIHdhbGtpbmcgLSB3ZSBhcmUgd2Fsa2luZyBmb3Igd3JpdGViYWNrLCBzbyBpZiBpdAorCSAqIHBhc3NlcyBhbGwgdGhlICJ2YWxpZCBpbm9kZSIgY2hlY2tzIGFuZCBpcyBkaXJ0eSwgdGhlbiB3ZSdsbCB3cml0ZQorCSAqIGl0IGJhY2sgYW55d2F5LiAgSWYgaXQgaGFzIGJlZW4gcmVhbGxvY2F0ZWQgYW5kIHN0aWxsIGJlaW5nCisJICogaW5pdGlhbGlzZWQsIHRoZSBYRlNfSU5FVyBjaGVjayBiZWxvdyB3aWxsIGNhdGNoIGl0LgorCSAqLworCXNwaW5fbG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CisJaWYgKCFpcC0+aV9pbm8pCisJCWdvdG8gb3V0X3VubG9ja19ub2VudDsKKworCS8qIGF2b2lkIG5ldyBvciByZWNsYWltYWJsZSBpbm9kZXMuIExlYXZlIGZvciByZWNsYWltIGNvZGUgdG8gZmx1c2ggKi8KKwlpZiAoX194ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19JTkVXIHwgWEZTX0lSRUNMQUlNQUJMRSB8IFhGU19JUkVDTEFJTSkpCisJCWdvdG8gb3V0X3VubG9ja19ub2VudDsKKwlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CisKIAkvKiBub3RoaW5nIHRvIHN5bmMgZHVyaW5nIHNodXRkb3duICovCiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKQogCQlyZXR1cm4gRUZTQ09SUlVQVEVEOwogCi0JLyogYXZvaWQgbmV3IG9yIHJlY2xhaW1hYmxlIGlub2Rlcy4gTGVhdmUgZm9yIHJlY2xhaW0gY29kZSB0byBmbHVzaCAqLwotCWlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19JTkVXIHwgWEZTX0lSRUNMQUlNQUJMRSB8IFhGU19JUkVDTEFJTSkpCi0JCXJldHVybiBFTk9FTlQ7Ci0KIAkvKiBJZiB3ZSBjYW4ndCBncmFiIHRoZSBpbm9kZSwgaXQgbXVzdCBvbiBpdCdzIHdheSB0byByZWNsYWltLiAqLwogCWlmICghaWdyYWIoaW5vZGUpKQogCQlyZXR1cm4gRU5PRU5UOwpAQCAtNzIsNiArODgsMTAgQEAKIAogCS8qIGlub2RlIGlzIHZhbGlkICovCiAJcmV0dXJuIDA7CisKK291dF91bmxvY2tfbm9lbnQ6CisJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOworCXJldHVybiBFTk9FTlQ7CiB9CiAKIFNUQVRJQyBpbnQKQEAgLTk4LDEyICsxMTgsMTIgQEAKIAkJaW50CQllcnJvciA9IDA7CiAJCWludAkJaTsKIAotCQlyZWFkX2xvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKKwkJcmN1X3JlYWRfbG9jaygpOwogCQlucl9mb3VuZCA9IHJhZGl4X3RyZWVfZ2FuZ19sb29rdXAoJnBhZy0+cGFnX2ljaV9yb290LAogCQkJCQkodm9pZCAqKiliYXRjaCwgZmlyc3RfaW5kZXgsCiAJCQkJCVhGU19MT09LVVBfQkFUQ0gpOwogCQlpZiAoIW5yX2ZvdW5kKSB7Ci0JCQlyZWFkX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMTgsMTggKzEzOCwyNiBAQAogCQkJCWJhdGNoW2ldID0gTlVMTDsKIAogCQkJLyoKLQkJCSAqIFVwZGF0ZSB0aGUgaW5kZXggZm9yIHRoZSBuZXh0IGxvb2t1cC4gQ2F0Y2ggb3ZlcmZsb3dzCi0JCQkgKiBpbnRvIHRoZSBuZXh0IEFHIHJhbmdlIHdoaWNoIGNhbiBvY2N1ciBpZiB3ZSBoYXZlIGlub2RlcwotCQkJICogaW4gdGhlIGxhc3QgYmxvY2sgb2YgdGhlIEFHIGFuZCB3ZSBhcmUgY3VycmVudGx5Ci0JCQkgKiBwb2ludGluZyB0byB0aGUgbGFzdCBpbm9kZS4KKwkJCSAqIFVwZGF0ZSB0aGUgaW5kZXggZm9yIHRoZSBuZXh0IGxvb2t1cC4gQ2F0Y2gKKwkJCSAqIG92ZXJmbG93cyBpbnRvIHRoZSBuZXh0IEFHIHJhbmdlIHdoaWNoIGNhbiBvY2N1ciBpZgorCQkJICogd2UgaGF2ZSBpbm9kZXMgaW4gdGhlIGxhc3QgYmxvY2sgb2YgdGhlIEFHIGFuZCB3ZQorCQkJICogYXJlIGN1cnJlbnRseSBwb2ludGluZyB0byB0aGUgbGFzdCBpbm9kZS4KKwkJCSAqCisJCQkgKiBCZWNhdXNlIHdlIG1heSBzZWUgaW5vZGVzIHRoYXQgYXJlIGZyb20gdGhlIHdyb25nIEFHCisJCQkgKiBkdWUgdG8gUkNVIGZyZWVpbmcgYW5kIHJlYWxsb2NhdGlvbiwgb25seSB1cGRhdGUgdGhlCisJCQkgKiBpbmRleCBpZiBpdCBsaWVzIGluIHRoaXMgQUcuIEl0IHdhcyBhIHJhY2UgdGhhdCBsZWFkCisJCQkgKiB1cyB0byBzZWUgdGhpcyBpbm9kZSwgc28gYW5vdGhlciBsb29rdXAgZnJvbSB0aGUKKwkJCSAqIHNhbWUgaW5kZXggd2lsbCBub3QgZmluZCBpdCBhZ2Fpbi4KIAkJCSAqLworCQkJaWYgKFhGU19JTk9fVE9fQUdOTyhtcCwgaXAtPmlfaW5vKSAhPSBwYWctPnBhZ19hZ25vKQorCQkJCWNvbnRpbnVlOwogCQkJZmlyc3RfaW5kZXggPSBYRlNfSU5PX1RPX0FHSU5PKG1wLCBpcC0+aV9pbm8gKyAxKTsKIAkJCWlmIChmaXJzdF9pbmRleCA8IFhGU19JTk9fVE9fQUdJTk8obXAsIGlwLT5pX2lubykpCiAJCQkJZG9uZSA9IDE7CiAJCX0KIAogCQkvKiB1bmxvY2sgbm93IHdlJ3ZlIGdyYWJiZWQgdGhlIGlub2Rlcy4gKi8KLQkJcmVhZF91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJZm9yIChpID0gMDsgaSA8IG5yX2ZvdW5kOyBpKyspIHsKIAkJCWlmICghYmF0Y2hbaV0pCkBAIC01OTIsMTIgKzYyMCwxMiBAQAogCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKIAogCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIFhGU19JTk9fVE9fQUdOTyhtcCwgaXAtPmlfaW5vKSk7Ci0Jd3JpdGVfbG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCXNwaW5fbG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOwogCXNwaW5fbG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CiAJX194ZnNfaW5vZGVfc2V0X3JlY2xhaW1fdGFnKHBhZywgaXApOwogCV9feGZzX2lmbGFnc19zZXQoaXAsIFhGU19JUkVDTEFJTUFCTEUpOwogCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKLQl3cml0ZV91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKKwlzcGluX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOwogCXhmc19wZXJhZ19wdXQocGFnKTsKIH0KIApAQCAtNjM5LDkgKzY2NywxNCBAQAogCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAogCWludAkJCWZsYWdzKQogeworCUFTU0VSVChyY3VfcmVhZF9sb2NrX2hlbGQoKSk7CisKKwkvKiBxdWljayBjaGVjayBmb3Igc3RhbGUgUkNVIGZyZWVkIGlub2RlICovCisJaWYgKCFpcC0+aV9pbm8pCisJCXJldHVybiAxOwogCiAJLyoKLQkgKiBkbyBzb21lIHVubG9ja2VkIGNoZWNrcyBmaXJzdCB0byBhdm9pZCB1bm5lY2NlYXJ5IGxvY2sgdHJhZmZpYy4KKwkgKiBkbyBzb21lIHVubG9ja2VkIGNoZWNrcyBmaXJzdCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBsb2NrIHRyYWZmaWMuCiAJICogVGhlIGZpcnN0IGlzIGEgZmx1c2ggbG9jayBjaGVjaywgdGhlIHNlY29uZCBpcyBhIGFscmVhZHkgaW4gcmVjbGFpbQogCSAqIGNoZWNrLiBPbmx5IGRvIHRoZXNlIGNoZWNrcyBpZiB3ZSBhcmUgbm90IGdvaW5nIHRvIGJsb2NrIG9uIGxvY2tzLgogCSAqLwpAQCAtNjU0LDExICs2ODcsMTYgQEAKIAkgKiBUaGUgcmFkaXggdHJlZSBsb2NrIGhlcmUgcHJvdGVjdHMgYSB0aHJlYWQgaW4geGZzX2lnZXQgZnJvbSByYWNpbmcKIAkgKiB3aXRoIHVzIHN0YXJ0aW5nIHJlY2xhaW0gb24gdGhlIGlub2RlLiAgT25jZSB3ZSBoYXZlIHRoZQogCSAqIFhGU19JUkVDTEFJTSBmbGFnIHNldCBpdCB3aWxsIG5vdCB0b3VjaCB1cy4KKwkgKgorCSAqIER1ZSB0byBSQ1UgbG9va3VwLCB3ZSBtYXkgZmluZCBpbm9kZXMgdGhhdCBoYXZlIGJlZW4gZnJlZWQgYW5kIG9ubHkKKwkgKiBoYXZlIFhGU19JUkVDTEFJTSBzZXQuICBJbmRlZWQsIHdlIG1heSBzZWUgcmVhbGxvY2F0ZWQgaW5vZGVzIHRoYXQKKwkgKiBhcmVuJ3QgY2FuZGlkYXRlcyBmb3IgcmVjbGFpbSBhdCBhbGwsIHNvIHdlIG11c3QgY2hlY2sgdGhlCisJICogWEZTX0lSRUNMQUlNQUJMRSBpcyBzZXQgZmlyc3QgYmVmb3JlIHByb2NlZWRpbmcgdG8gcmVjbGFpbS4KIAkgKi8KIAlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwotCUFTU0VSVF9BTFdBWVMoX194ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19JUkVDTEFJTUFCTEUpKTsKLQlpZiAoX194ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19JUkVDTEFJTSkpIHsKLQkJLyogaWdub3JlIGFzIGl0IGlzIGFscmVhZHkgdW5kZXIgcmVjbGFpbSAqLworCWlmICghX194ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19JUkVDTEFJTUFCTEUpIHx8CisJICAgIF9feGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfSVJFQ0xBSU0pKSB7CisJCS8qIG5vdCBhIHJlY2xhaW0gY2FuZGlkYXRlLiAqLwogCQlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CiAJCXJldHVybiAxOwogCX0KQEAgLTc5NSwxMiArODMzLDEyIEBACiAJICogYWRkZWQgdG8gdGhlIHRyZWUgYXNzZXJ0IHRoYXQgaXQncyBiZWVuIHRoZXJlIGJlZm9yZSB0byBjYXRjaAogCSAqIHByb2JsZW1zIHdpdGggdGhlIGlub2RlIGxpZmUgdGltZSBlYXJseSBvbi4KIAkgKi8KLQl3cml0ZV9sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CisJc3Bpbl9sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CiAJaWYgKCFyYWRpeF90cmVlX2RlbGV0ZSgmcGFnLT5wYWdfaWNpX3Jvb3QsCiAJCQkJWEZTX0lOT19UT19BR0lOTyhpcC0+aV9tb3VudCwgaXAtPmlfaW5vKSkpCiAJCUFTU0VSVCgwKTsKIAlfX3hmc19pbm9kZV9jbGVhcl9yZWNsYWltKHBhZywgaXApOwotCXdyaXRlX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCXNwaW5fdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CiAKIAkvKgogCSAqIEhlcmUgd2UgZG8gYW4gKGFsbW9zdCkgc3B1cmlvdXMgaW5vZGUgbG9jayBpbiBvcmRlciB0byBjb29yZGluYXRlCkBAIC04NjQsMTQgKzkwMiwxNCBAQAogCQkJc3RydWN0IHhmc19pbm9kZSAqYmF0Y2hbWEZTX0xPT0tVUF9CQVRDSF07CiAJCQlpbnQJaTsKIAotCQkJd3JpdGVfbG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJbnJfZm91bmQgPSByYWRpeF90cmVlX2dhbmdfbG9va3VwX3RhZygKIAkJCQkJJnBhZy0+cGFnX2ljaV9yb290LAogCQkJCQkodm9pZCAqKiliYXRjaCwgZmlyc3RfaW5kZXgsCiAJCQkJCVhGU19MT09LVVBfQkFUQ0gsCiAJCQkJCVhGU19JQ0lfUkVDTEFJTV9UQUcpOwogCQkJaWYgKCFucl9mb3VuZCkgewotCQkJCXdyaXRlX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC04OTEsMTQgKzkyOSwyNCBAQAogCQkJCSAqIG9jY3VyIGlmIHdlIGhhdmUgaW5vZGVzIGluIHRoZSBsYXN0IGJsb2NrIG9mCiAJCQkJICogdGhlIEFHIGFuZCB3ZSBhcmUgY3VycmVudGx5IHBvaW50aW5nIHRvIHRoZQogCQkJCSAqIGxhc3QgaW5vZGUuCisJCQkJICoKKwkJCQkgKiBCZWNhdXNlIHdlIG1heSBzZWUgaW5vZGVzIHRoYXQgYXJlIGZyb20gdGhlCisJCQkJICogd3JvbmcgQUcgZHVlIHRvIFJDVSBmcmVlaW5nIGFuZAorCQkJCSAqIHJlYWxsb2NhdGlvbiwgb25seSB1cGRhdGUgdGhlIGluZGV4IGlmIGl0CisJCQkJICogbGllcyBpbiB0aGlzIEFHLiBJdCB3YXMgYSByYWNlIHRoYXQgbGVhZCB1cworCQkJCSAqIHRvIHNlZSB0aGlzIGlub2RlLCBzbyBhbm90aGVyIGxvb2t1cCBmcm9tCisJCQkJICogdGhlIHNhbWUgaW5kZXggd2lsbCBub3QgZmluZCBpdCBhZ2Fpbi4KIAkJCQkgKi8KKwkJCQlpZiAoWEZTX0lOT19UT19BR05PKG1wLCBpcC0+aV9pbm8pICE9CisJCQkJCQkJCXBhZy0+cGFnX2Fnbm8pCisJCQkJCWNvbnRpbnVlOwogCQkJCWZpcnN0X2luZGV4ID0gWEZTX0lOT19UT19BR0lOTyhtcCwgaXAtPmlfaW5vICsgMSk7CiAJCQkJaWYgKGZpcnN0X2luZGV4IDwgWEZTX0lOT19UT19BR0lOTyhtcCwgaXAtPmlfaW5vKSkKIAkJCQkJZG9uZSA9IDE7CiAJCQl9CiAKIAkJCS8qIHVubG9jayBub3cgd2UndmUgZ3JhYmJlZCB0aGUgaW5vZGVzLiAqLwotCQkJd3JpdGVfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKIAogCQkJZm9yIChpID0gMDsgaSA8IG5yX2ZvdW5kOyBpKyspIHsKIAkJCQlpZiAoIWJhdGNoW2ldKQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmgKaW5kZXggYWNlZjJlOS4uNjQ3YWYyYSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5oCkBAIC03NjYsOCArNzY2LDggQEAKIAkJX19maWVsZChpbnQsIGN1cnJfcmVzKQogCQlfX2ZpZWxkKGludCwgdW5pdF9yZXMpCiAJCV9fZmllbGQodW5zaWduZWQgaW50LCBmbGFncykKLQkJX19maWVsZCh2b2lkICosIHJlc2VydmVfaGVhZHEpCi0JCV9fZmllbGQodm9pZCAqLCB3cml0ZV9oZWFkcSkKKwkJX19maWVsZChpbnQsIHJlc2VydmVxKQorCQlfX2ZpZWxkKGludCwgd3JpdGVxKQogCQlfX2ZpZWxkKGludCwgZ3JhbnRfcmVzZXJ2ZV9jeWNsZSkKIAkJX19maWVsZChpbnQsIGdyYW50X3Jlc2VydmVfYnl0ZXMpCiAJCV9fZmllbGQoaW50LCBncmFudF93cml0ZV9jeWNsZSkKQEAgLTc4NCwxOSArNzg0LDIxIEBACiAJCV9fZW50cnktPmN1cnJfcmVzID0gdGljLT50X2N1cnJfcmVzOwogCQlfX2VudHJ5LT51bml0X3JlcyA9IHRpYy0+dF91bml0X3JlczsKIAkJX19lbnRyeS0+ZmxhZ3MgPSB0aWMtPnRfZmxhZ3M7Ci0JCV9fZW50cnktPnJlc2VydmVfaGVhZHEgPSBsb2ctPmxfcmVzZXJ2ZV9oZWFkcTsKLQkJX19lbnRyeS0+d3JpdGVfaGVhZHEgPSBsb2ctPmxfd3JpdGVfaGVhZHE7Ci0JCV9fZW50cnktPmdyYW50X3Jlc2VydmVfY3ljbGUgPSBsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9jeWNsZTsKLQkJX19lbnRyeS0+Z3JhbnRfcmVzZXJ2ZV9ieXRlcyA9IGxvZy0+bF9ncmFudF9yZXNlcnZlX2J5dGVzOwotCQlfX2VudHJ5LT5ncmFudF93cml0ZV9jeWNsZSA9IGxvZy0+bF9ncmFudF93cml0ZV9jeWNsZTsKLQkJX19lbnRyeS0+Z3JhbnRfd3JpdGVfYnl0ZXMgPSBsb2ctPmxfZ3JhbnRfd3JpdGVfYnl0ZXM7CisJCV9fZW50cnktPnJlc2VydmVxID0gbGlzdF9lbXB0eSgmbG9nLT5sX3Jlc2VydmVxKTsKKwkJX19lbnRyeS0+d3JpdGVxID0gbGlzdF9lbXB0eSgmbG9nLT5sX3dyaXRlcSk7CisJCXhsb2dfY3JhY2tfZ3JhbnRfaGVhZCgmbG9nLT5sX2dyYW50X3Jlc2VydmVfaGVhZCwKKwkJCQkmX19lbnRyeS0+Z3JhbnRfcmVzZXJ2ZV9jeWNsZSwKKwkJCQkmX19lbnRyeS0+Z3JhbnRfcmVzZXJ2ZV9ieXRlcyk7CisJCXhsb2dfY3JhY2tfZ3JhbnRfaGVhZCgmbG9nLT5sX2dyYW50X3dyaXRlX2hlYWQsCisJCQkJJl9fZW50cnktPmdyYW50X3dyaXRlX2N5Y2xlLAorCQkJCSZfX2VudHJ5LT5ncmFudF93cml0ZV9ieXRlcyk7CiAJCV9fZW50cnktPmN1cnJfY3ljbGUgPSBsb2ctPmxfY3Vycl9jeWNsZTsKIAkJX19lbnRyeS0+Y3Vycl9ibG9jayA9IGxvZy0+bF9jdXJyX2Jsb2NrOwotCQlfX2VudHJ5LT50YWlsX2xzbiA9IGxvZy0+bF90YWlsX2xzbjsKKwkJX19lbnRyeS0+dGFpbF9sc24gPSBhdG9taWM2NF9yZWFkKCZsb2ctPmxfdGFpbF9sc24pOwogCSksCiAJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgdHlwZSAlcyB0X29jbnQgJXUgdF9jbnQgJXUgdF9jdXJyX3JlcyAldSAiCi0JCSAgInRfdW5pdF9yZXMgJXUgdF9mbGFncyAlcyByZXNlcnZlX2hlYWRxIDB4JXAgIgotCQkgICJ3cml0ZV9oZWFkcSAweCVwIGdyYW50X3Jlc2VydmVfY3ljbGUgJWQgIgorCQkgICJ0X3VuaXRfcmVzICV1IHRfZmxhZ3MgJXMgcmVzZXJ2ZXEgJXMgIgorCQkgICJ3cml0ZXEgJXMgZ3JhbnRfcmVzZXJ2ZV9jeWNsZSAlZCAiCiAJCSAgImdyYW50X3Jlc2VydmVfYnl0ZXMgJWQgZ3JhbnRfd3JpdGVfY3ljbGUgJWQgIgogCQkgICJncmFudF93cml0ZV9ieXRlcyAlZCBjdXJyX2N5Y2xlICVkIGN1cnJfYmxvY2sgJWQgIgogCQkgICJ0YWlsX2N5Y2xlICVkIHRhaWxfYmxvY2sgJWQiLApAQCAtODA3LDggKzgwOSw4IEBACiAJCSAgX19lbnRyeS0+Y3Vycl9yZXMsCiAJCSAgX19lbnRyeS0+dW5pdF9yZXMsCiAJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5mbGFncywgInwiLCBYTE9HX1RJQ19GTEFHUyksCi0JCSAgX19lbnRyeS0+cmVzZXJ2ZV9oZWFkcSwKLQkJICBfX2VudHJ5LT53cml0ZV9oZWFkcSwKKwkJICBfX2VudHJ5LT5yZXNlcnZlcSA/ICJlbXB0eSIgOiAiYWN0aXZlIiwKKwkJICBfX2VudHJ5LT53cml0ZXEgPyAiZW1wdHkiIDogImFjdGl2ZSIsCiAJCSAgX19lbnRyeS0+Z3JhbnRfcmVzZXJ2ZV9jeWNsZSwKIAkJICBfX2VudHJ5LT5ncmFudF9yZXNlcnZlX2J5dGVzLAogCQkgIF9fZW50cnktPmdyYW50X3dyaXRlX2N5Y2xlLApAQCAtODM1LDYgKzgzNyw3IEBACiBERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19ncmFudF93YWtlMSk7CiBERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19ncmFudF9zbGVlcDIpOwogREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfZ3JhbnRfd2FrZTIpOworREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfZ3JhbnRfd2FrZV91cCk7CiBERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19yZWdyYW50X3dyaXRlX2VudGVyKTsKIERFRklORV9MT0dHUkFOVF9FVkVOVCh4ZnNfbG9nX3JlZ3JhbnRfd3JpdGVfZXhpdCk7CiBERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19yZWdyYW50X3dyaXRlX2Vycm9yKTsKQEAgLTg0Miw2ICs4NDUsNyBAQAogREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfcmVncmFudF93cml0ZV93YWtlMSk7CiBERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19yZWdyYW50X3dyaXRlX3NsZWVwMik7CiBERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19yZWdyYW50X3dyaXRlX3dha2UyKTsKK0RFRklORV9MT0dHUkFOVF9FVkVOVCh4ZnNfbG9nX3JlZ3JhbnRfd3JpdGVfd2FrZV91cCk7CiBERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19yZWdyYW50X3Jlc2VydmVfZW50ZXIpOwogREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfcmVncmFudF9yZXNlcnZlX2V4aXQpOwogREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfcmVncmFudF9yZXNlcnZlX3N1Yik7CkBAIC05MzUsMTAgKzkzOSwxMCBAQAogREVGSU5FX1BBR0VfRVZFTlQoeGZzX3JlbGVhc2VwYWdlKTsKIERFRklORV9QQUdFX0VWRU5UKHhmc19pbnZhbGlkYXRlcGFnZSk7CiAKLURFQ0xBUkVfRVZFTlRfQ0xBU1MoeGZzX2lvbWFwX2NsYXNzLAorREVDTEFSRV9FVkVOVF9DTEFTUyh4ZnNfaW1hcF9jbGFzcywKIAlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2lub2RlICppcCwgeGZzX29mZl90IG9mZnNldCwgc3NpemVfdCBjb3VudCwKLQkJIGludCBmbGFncywgc3RydWN0IHhmc19ibWJ0X2lyZWMgKmlyZWMpLAotCVRQX0FSR1MoaXAsIG9mZnNldCwgY291bnQsIGZsYWdzLCBpcmVjKSwKKwkJIGludCB0eXBlLCBzdHJ1Y3QgeGZzX2JtYnRfaXJlYyAqaXJlYyksCisJVFBfQVJHUyhpcCwgb2Zmc2V0LCBjb3VudCwgdHlwZSwgaXJlYyksCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19maWVsZChkZXZfdCwgZGV2KQogCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKQpAQCAtOTQ2LDcgKzk1MCw3IEBACiAJCV9fZmllbGQobG9mZl90LCBuZXdfc2l6ZSkKIAkJX19maWVsZChsb2ZmX3QsIG9mZnNldCkKIAkJX19maWVsZChzaXplX3QsIGNvdW50KQotCQlfX2ZpZWxkKGludCwgZmxhZ3MpCisJCV9fZmllbGQoaW50LCB0eXBlKQogCQlfX2ZpZWxkKHhmc19maWxlb2ZmX3QsIHN0YXJ0b2ZmKQogCQlfX2ZpZWxkKHhmc19mc2Jsb2NrX3QsIHN0YXJ0YmxvY2spCiAJCV9fZmllbGQoeGZzX2ZpbGJsa3NfdCwgYmxvY2tjb3VudCkKQEAgLTk1OCwxMyArOTYyLDEzIEBACiAJCV9fZW50cnktPm5ld19zaXplID0gaXAtPmlfbmV3X3NpemU7CiAJCV9fZW50cnktPm9mZnNldCA9IG9mZnNldDsKIAkJX19lbnRyeS0+Y291bnQgPSBjb3VudDsKLQkJX19lbnRyeS0+ZmxhZ3MgPSBmbGFnczsKKwkJX19lbnRyeS0+dHlwZSA9IHR5cGU7CiAJCV9fZW50cnktPnN0YXJ0b2ZmID0gaXJlYyA/IGlyZWMtPmJyX3N0YXJ0b2ZmIDogMDsKIAkJX19lbnRyeS0+c3RhcnRibG9jayA9IGlyZWMgPyBpcmVjLT5icl9zdGFydGJsb2NrIDogMDsKIAkJX19lbnRyeS0+YmxvY2tjb3VudCA9IGlyZWMgPyBpcmVjLT5icl9ibG9ja2NvdW50IDogMDsKIAkpLAogCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggc2l6ZSAweCVsbHggbmV3X3NpemUgMHglbGx4ICIKLQkJICAib2Zmc2V0IDB4JWxseCBjb3VudCAlemQgZmxhZ3MgJXMgIgorCQkgICJvZmZzZXQgMHglbGx4IGNvdW50ICV6ZCB0eXBlICVzICIKIAkJICAic3RhcnRvZmYgMHglbGx4IHN0YXJ0YmxvY2sgJWxsZCBibG9ja2NvdW50IDB4JWxseCIsCiAJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKIAkJICBfX2VudHJ5LT5pbm8sCkBAIC05NzIsMjAgKzk3NiwyMSBAQAogCQkgIF9fZW50cnktPm5ld19zaXplLAogCQkgIF9fZW50cnktPm9mZnNldCwKIAkJICBfX2VudHJ5LT5jb3VudCwKLQkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmZsYWdzLCAifCIsIEJNQVBJX0ZMQUdTKSwKKwkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPnR5cGUsIFhGU19JT19UWVBFUyksCiAJCSAgX19lbnRyeS0+c3RhcnRvZmYsCiAJCSAgKF9faW50NjRfdClfX2VudHJ5LT5zdGFydGJsb2NrLAogCQkgIF9fZW50cnktPmJsb2NrY291bnQpCiApCiAKICNkZWZpbmUgREVGSU5FX0lPTUFQX0VWRU5UKG5hbWUpCVwKLURFRklORV9FVkVOVCh4ZnNfaW9tYXBfY2xhc3MsIG5hbWUsCVwKK0RFRklORV9FVkVOVCh4ZnNfaW1hcF9jbGFzcywgbmFtZSwJXAogCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB4ZnNfb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGNvdW50LAlcCi0JCSBpbnQgZmxhZ3MsIHN0cnVjdCB4ZnNfYm1idF9pcmVjICppcmVjKSwJCVwKLQlUUF9BUkdTKGlwLCBvZmZzZXQsIGNvdW50LCBmbGFncywgaXJlYykpCi1ERUZJTkVfSU9NQVBfRVZFTlQoeGZzX2lvbWFwX2VudGVyKTsKLURFRklORV9JT01BUF9FVkVOVCh4ZnNfaW9tYXBfZm91bmQpOwotREVGSU5FX0lPTUFQX0VWRU5UKHhmc19pb21hcF9hbGxvYyk7CisJCSBpbnQgdHlwZSwgc3RydWN0IHhmc19ibWJ0X2lyZWMgKmlyZWMpLAkJXAorCVRQX0FSR1MoaXAsIG9mZnNldCwgY291bnQsIHR5cGUsIGlyZWMpKQorREVGSU5FX0lPTUFQX0VWRU5UKHhmc19tYXBfYmxvY2tzX2ZvdW5kKTsKK0RFRklORV9JT01BUF9FVkVOVCh4ZnNfbWFwX2Jsb2Nrc19hbGxvYyk7CitERUZJTkVfSU9NQVBfRVZFTlQoeGZzX2dldF9ibG9ja3NfZm91bmQpOworREVGSU5FX0lPTUFQX0VWRU5UKHhmc19nZXRfYmxvY2tzX2FsbG9jKTsKIAogREVDTEFSRV9FVkVOVF9DTEFTUyh4ZnNfc2ltcGxlX2lvX2NsYXNzLAogCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB4ZnNfb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGNvdW50KSwKQEAgLTEwMjIsNiArMTAyNyw3IEBACiAJVFBfQVJHUyhpcCwgb2Zmc2V0LCBjb3VudCkpCiBERUZJTkVfU0lNUExFX0lPX0VWRU5UKHhmc19kZWxhbGxvY19lbm9zcGMpOwogREVGSU5FX1NJTVBMRV9JT19FVkVOVCh4ZnNfdW53cml0dGVuX2NvbnZlcnQpOworREVGSU5FX1NJTVBMRV9JT19FVkVOVCh4ZnNfZ2V0X2Jsb2Nrc19ub3Rmb3VuZCk7CiAKIAogVFJBQ0VfRVZFTlQoeGZzX2l0cnVuY2F0ZV9zdGFydCwKQEAgLTE0MjAsNiArMTQyNiw3IEBACiAJVFBfUFJPVE8oc3RydWN0IHhmc19hbGxvY19hcmcgKmFyZ3MpLCBcCiAJVFBfQVJHUyhhcmdzKSkKIERFRklORV9BTExPQ19FVkVOVCh4ZnNfYWxsb2NfZXhhY3RfZG9uZSk7CitERUZJTkVfQUxMT0NfRVZFTlQoeGZzX2FsbG9jX2V4YWN0X25vdGZvdW5kKTsKIERFRklORV9BTExPQ19FVkVOVCh4ZnNfYWxsb2NfZXhhY3RfZXJyb3IpOwogREVGSU5FX0FMTE9DX0VWRU5UKHhmc19hbGxvY19uZWFyX25vbWlubGVmdCk7CiBERUZJTkVfQUxMT0NfRVZFTlQoeGZzX2FsbG9jX25lYXJfZmlyc3QpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCmluZGV4IGZhZjhlMWEuLmQyMmFhMzEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKQEAgLTE0OSw3ICsxNDksNiBAQAogCUFTU0VSVChsaXN0X2VtcHR5KCZkcXAtPnFfZnJlZWxpc3QpKTsKIAogCW11dGV4X2Rlc3Ryb3koJmRxcC0+cV9xbG9jayk7Ci0Jc3ZfZGVzdHJveSgmZHFwLT5xX3BpbndhaXQpOwogCWttZW1fem9uZV9mcmVlKHhmc19HcW0tPnFtX2Rxem9uZSwgZHFwKTsKIAogCWF0b21pY19kZWMoJnhmc19HcW0tPnFtX3RvdGFsZHF1b3RzKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYWcuaCBiL2ZzL3hmcy94ZnNfYWcuaAppbmRleCA2M2M3YTFhLi41ODYzMmNjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FnLmgKKysrIGIvZnMveGZzL3hmc19hZy5oCkBAIC0yMjcsNyArMjI3LDcgQEAKIAogCWF0b21pY190ICAgICAgICBwYWdmX2ZzdHJtczsgICAgLyogIyBvZiBmaWxlc3RyZWFtcyBhY3RpdmUgaW4gdGhpcyBBRyAqLwogCi0Jcndsb2NrX3QJcGFnX2ljaV9sb2NrOwkvKiBpbmNvcmUgaW5vZGUgbG9jayAqLworCXNwaW5sb2NrX3QJcGFnX2ljaV9sb2NrOwkvKiBpbmNvcmUgaW5vZGUgY2FjaGUgbG9jayAqLwogCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QgcGFnX2ljaV9yb290OwkvKiBpbmNvcmUgaW5vZGUgY2FjaGUgcm9vdCAqLwogCWludAkJcGFnX2ljaV9yZWNsYWltYWJsZTsJLyogcmVjbGFpbWFibGUgaW5vZGVzICovCiAJc3RydWN0IG11dGV4CXBhZ19pY2lfcmVjbGFpbV9sb2NrOwkvKiBzZXJpYWxpc2F0aW9uIHBvaW50ICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmMgYi9mcy94ZnMveGZzX2FsbG9jLmMKaW5kZXggMTEyYWJjNC4uZmE4NzIzZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwpAQCAtNTc3LDYxICs1NzcsNTggQEAKIAl4ZnNfZXh0bGVuX3QJcmxlbjsJLyogbGVuZ3RoIG9mIHJldHVybmVkIGV4dGVudCAqLwogCiAJQVNTRVJUKGFyZ3MtPmFsaWdubWVudCA9PSAxKTsKKwogCS8qCiAJICogQWxsb2NhdGUvaW5pdGlhbGl6ZSBhIGN1cnNvciBmb3IgdGhlIGJ5LW51bWJlciBmcmVlc3BhY2UgYnRyZWUuCiAJICovCiAJYm5vX2N1ciA9IHhmc19hbGxvY2J0X2luaXRfY3Vyc29yKGFyZ3MtPm1wLCBhcmdzLT50cCwgYXJncy0+YWdicCwKLQkJYXJncy0+YWdubywgWEZTX0JUTlVNX0JOTyk7CisJCQkJCSAgYXJncy0+YWdubywgWEZTX0JUTlVNX0JOTyk7CisKIAkvKgogCSAqIExvb2t1cCBibm8gYW5kIG1pbmxlbiBpbiB0aGUgYnRyZWUgKG1pbmxlbiBpcyBpcnJlbGV2YW50LCByZWFsbHkpLgogCSAqIExvb2sgZm9yIHRoZSBjbG9zZXN0IGZyZWUgYmxvY2sgPD0gYm5vLCBpdCBtdXN0IGNvbnRhaW4gYm5vCiAJICogaWYgYW55IGZyZWUgYmxvY2sgZG9lcy4KIAkgKi8KLQlpZiAoKGVycm9yID0geGZzX2FsbG9jX2xvb2t1cF9sZShibm9fY3VyLCBhcmdzLT5hZ2JubywgYXJncy0+bWlubGVuLCAmaSkpKQorCWVycm9yID0geGZzX2FsbG9jX2xvb2t1cF9sZShibm9fY3VyLCBhcmdzLT5hZ2JubywgYXJncy0+bWlubGVuLCAmaSk7CisJaWYgKGVycm9yKQogCQlnb3RvIGVycm9yMDsKLQlpZiAoIWkpIHsKLQkJLyoKLQkJICogRGlkbid0IGZpbmQgaXQsIHJldHVybiBudWxsLgotCQkgKi8KLQkJeGZzX2J0cmVlX2RlbF9jdXJzb3IoYm5vX2N1ciwgWEZTX0JUUkVFX05PRVJST1IpOwotCQlhcmdzLT5hZ2JubyA9IE5VTExBR0JMT0NLOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKCFpKQorCQlnb3RvIG5vdF9mb3VuZDsKKwogCS8qCiAJICogR3JhYiB0aGUgZnJlZXNwYWNlIHJlY29yZC4KIAkgKi8KLQlpZiAoKGVycm9yID0geGZzX2FsbG9jX2dldF9yZWMoYm5vX2N1ciwgJmZibm8sICZmbGVuLCAmaSkpKQorCWVycm9yID0geGZzX2FsbG9jX2dldF9yZWMoYm5vX2N1ciwgJmZibm8sICZmbGVuLCAmaSk7CisJaWYgKGVycm9yKQogCQlnb3RvIGVycm9yMDsKIAlYRlNfV0FOVF9DT1JSVVBURURfR09UTyhpID09IDEsIGVycm9yMCk7CiAJQVNTRVJUKGZibm8gPD0gYXJncy0+YWdibm8pOwogCW1pbmVuZCA9IGFyZ3MtPmFnYm5vICsgYXJncy0+bWlubGVuOwogCW1heGVuZCA9IGFyZ3MtPmFnYm5vICsgYXJncy0+bWF4bGVuOwogCWZlbmQgPSBmYm5vICsgZmxlbjsKKwogCS8qCiAJICogR2l2ZSB1cCBpZiB0aGUgZnJlZXNwYWNlIGlzbid0IGxvbmcgZW5vdWdoIGZvciB0aGUgbWluaW11bSByZXF1ZXN0LgogCSAqLwotCWlmIChmZW5kIDwgbWluZW5kKSB7Ci0JCXhmc19idHJlZV9kZWxfY3Vyc29yKGJub19jdXIsIFhGU19CVFJFRV9OT0VSUk9SKTsKLQkJYXJncy0+YWdibm8gPSBOVUxMQUdCTE9DSzsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmIChmZW5kIDwgbWluZW5kKQorCQlnb3RvIG5vdF9mb3VuZDsKKwogCS8qCiAJICogRW5kIG9mIGV4dGVudCB3aWxsIGJlIHNtYWxsZXIgb2YgdGhlIGZyZWVzcGFjZSBlbmQgYW5kIHRoZQogCSAqIG1heGltYWwgcmVxdWVzdGVkIGVuZC4KLQkgKi8KLQllbmQgPSBYRlNfQUdCTE9DS19NSU4oZmVuZCwgbWF4ZW5kKTsKLQkvKgorCSAqCiAJICogRml4IHRoZSBsZW5ndGggYWNjb3JkaW5nIHRvIG1vZCBhbmQgcHJvZCBpZiBnaXZlbi4KIAkgKi8KKwllbmQgPSBYRlNfQUdCTE9DS19NSU4oZmVuZCwgbWF4ZW5kKTsKIAlhcmdzLT5sZW4gPSBlbmQgLSBhcmdzLT5hZ2JubzsKIAl4ZnNfYWxsb2NfZml4X2xlbihhcmdzKTsKLQlpZiAoIXhmc19hbGxvY19maXhfbWlubGVmdChhcmdzKSkgewotCQl4ZnNfYnRyZWVfZGVsX2N1cnNvcihibm9fY3VyLCBYRlNfQlRSRUVfTk9FUlJPUik7Ci0JCXJldHVybiAwOwotCX0KKwlpZiAoIXhmc19hbGxvY19maXhfbWlubGVmdChhcmdzKSkKKwkJZ290byBub3RfZm91bmQ7CisKIAlybGVuID0gYXJncy0+bGVuOwogCUFTU0VSVChhcmdzLT5hZ2JubyArIHJsZW4gPD0gZmVuZCk7CiAJZW5kID0gYXJncy0+YWdibm8gKyBybGVuOworCiAJLyoKIAkgKiBXZSBhcmUgYWxsb2NhdGluZyBhZ2JubyBmb3IgcmxlbiBbYWdibm8gLi4gZW5kXQogCSAqIEFsbG9jYXRlL2luaXRpYWxpemUgYSBjdXJzb3IgZm9yIHRoZSBieS1zaXplIGJ0cmVlLgpAQCAtNjQwLDE2ICs2MzcsMjUgQEAKIAkJYXJncy0+YWdubywgWEZTX0JUTlVNX0NOVCk7CiAJQVNTRVJUKGFyZ3MtPmFnYm5vICsgYXJncy0+bGVuIDw9CiAJCWJlMzJfdG9fY3B1KFhGU19CVUZfVE9fQUdGKGFyZ3MtPmFnYnApLT5hZ2ZfbGVuZ3RoKSk7Ci0JaWYgKChlcnJvciA9IHhmc19hbGxvY19maXh1cF90cmVlcyhjbnRfY3VyLCBibm9fY3VyLCBmYm5vLCBmbGVuLAotCQkJYXJncy0+YWdibm8sIGFyZ3MtPmxlbiwgWEZTQV9GSVhVUF9CTk9fT0spKSkgeworCWVycm9yID0geGZzX2FsbG9jX2ZpeHVwX3RyZWVzKGNudF9jdXIsIGJub19jdXIsIGZibm8sIGZsZW4sIGFyZ3MtPmFnYm5vLAorCQkJCSAgICAgIGFyZ3MtPmxlbiwgWEZTQV9GSVhVUF9CTk9fT0spOworCWlmIChlcnJvcikgewogCQl4ZnNfYnRyZWVfZGVsX2N1cnNvcihjbnRfY3VyLCBYRlNfQlRSRUVfRVJST1IpOwogCQlnb3RvIGVycm9yMDsKIAl9CisKIAl4ZnNfYnRyZWVfZGVsX2N1cnNvcihibm9fY3VyLCBYRlNfQlRSRUVfTk9FUlJPUik7CiAJeGZzX2J0cmVlX2RlbF9jdXJzb3IoY250X2N1ciwgWEZTX0JUUkVFX05PRVJST1IpOwogCi0JdHJhY2VfeGZzX2FsbG9jX2V4YWN0X2RvbmUoYXJncyk7CiAJYXJncy0+d2FzZnJvbWZsID0gMDsKKwl0cmFjZV94ZnNfYWxsb2NfZXhhY3RfZG9uZShhcmdzKTsKKwlyZXR1cm4gMDsKKworbm90X2ZvdW5kOgorCS8qIERpZG4ndCBmaW5kIGl0LCByZXR1cm4gbnVsbC4gKi8KKwl4ZnNfYnRyZWVfZGVsX2N1cnNvcihibm9fY3VyLCBYRlNfQlRSRUVfTk9FUlJPUik7CisJYXJncy0+YWdibm8gPSBOVUxMQUdCTE9DSzsKKwl0cmFjZV94ZnNfYWxsb2NfZXhhY3Rfbm90Zm91bmQoYXJncyk7CiAJcmV0dXJuIDA7CiAKIGVycm9yMDoKQEAgLTY1OSw2ICs2NjUsOTUgQEAKIH0KIAogLyoKKyAqIFNlYXJjaCB0aGUgYnRyZWUgaW4gYSBnaXZlbiBkaXJlY3Rpb24gdmlhIHRoZSBzZWFyY2ggY3Vyc29yIGFuZCBjb21wYXJlCisgKiB0aGUgcmVjb3JkcyBmb3VuZCBhZ2FpbnN0IHRoZSBnb29kIGV4dGVudCB3ZSd2ZSBhbHJlYWR5IGZvdW5kLgorICovCitTVEFUSUMgaW50Cit4ZnNfYWxsb2NfZmluZF9iZXN0X2V4dGVudCgKKwlzdHJ1Y3QgeGZzX2FsbG9jX2FyZwkqYXJncywJLyogYWxsb2NhdGlvbiBhcmd1bWVudCBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgeGZzX2J0cmVlX2N1cgkqKmdjdXIsCS8qIGdvb2QgY3Vyc29yICovCisJc3RydWN0IHhmc19idHJlZV9jdXIJKipzY3VyLAkvKiBzZWFyY2hpbmcgY3Vyc29yICovCisJeGZzX2FnYmxvY2tfdAkJZ2RpZmYsCS8qIGRpZmZlcmVuY2UgZm9yIHNlYXJjaCBjb21wYXJpc29uICovCisJeGZzX2FnYmxvY2tfdAkJKnNibm8sCS8qIGV4dGVudCBmb3VuZCBieSBzZWFyY2ggKi8KKwl4ZnNfZXh0bGVuX3QJCSpzbGVuLAorCXhmc19leHRsZW5fdAkJKnNsZW5hLAkvKiBhbGlnbmVkIGxlbmd0aCAqLworCWludAkJCWRpcikJLyogMCA9IHNlYXJjaCByaWdodCwgMSA9IHNlYXJjaCBsZWZ0ICovCit7CisJeGZzX2FnYmxvY2tfdAkJYm5vOworCXhmc19hZ2Jsb2NrX3QJCW5ldzsKKwl4ZnNfYWdibG9ja190CQlzZGlmZjsKKwlpbnQJCQllcnJvcjsKKwlpbnQJCQlpOworCisJLyogVGhlIGdvb2QgZXh0ZW50IGlzIHBlcmZlY3QsIG5vIG5lZWQgdG8gIHNlYXJjaC4gKi8KKwlpZiAoIWdkaWZmKQorCQlnb3RvIG91dF91c2VfZ29vZDsKKworCS8qCisJICogTG9vayB1bnRpbCB3ZSBmaW5kIGEgYmV0dGVyIG9uZSwgcnVuIG91dCBvZiBzcGFjZSBvciBydW4gb2ZmIHRoZSBlbmQuCisJICovCisJZG8geworCQllcnJvciA9IHhmc19hbGxvY19nZXRfcmVjKCpzY3VyLCBzYm5vLCBzbGVuLCAmaSk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZXJyb3IwOworCQlYRlNfV0FOVF9DT1JSVVBURURfR09UTyhpID09IDEsIGVycm9yMCk7CisJCXhmc19hbGxvY19jb21wdXRlX2FsaWduZWQoKnNibm8sICpzbGVuLCBhcmdzLT5hbGlnbm1lbnQsCisJCQkJCSAgYXJncy0+bWlubGVuLCAmYm5vLCBzbGVuYSk7CisKKwkJLyoKKwkJICogVGhlIGdvb2QgZXh0ZW50IGlzIGNsb3NlciB0aGFuIHRoaXMgb25lLgorCQkgKi8KKwkJaWYgKCFkaXIpIHsKKwkJCWlmIChibm8gPj0gYXJncy0+YWdibm8gKyBnZGlmZikKKwkJCQlnb3RvIG91dF91c2VfZ29vZDsKKwkJfSBlbHNlIHsKKwkJCWlmIChibm8gPD0gYXJncy0+YWdibm8gLSBnZGlmZikKKwkJCQlnb3RvIG91dF91c2VfZ29vZDsKKwkJfQorCisJCS8qCisJCSAqIFNhbWUgZGlzdGFuY2UsIGNvbXBhcmUgbGVuZ3RoIGFuZCBwaWNrIHRoZSBiZXN0LgorCQkgKi8KKwkJaWYgKCpzbGVuYSA+PSBhcmdzLT5taW5sZW4pIHsKKwkJCWFyZ3MtPmxlbiA9IFhGU19FWFRMRU5fTUlOKCpzbGVuYSwgYXJncy0+bWF4bGVuKTsKKwkJCXhmc19hbGxvY19maXhfbGVuKGFyZ3MpOworCisJCQlzZGlmZiA9IHhmc19hbGxvY19jb21wdXRlX2RpZmYoYXJncy0+YWdibm8sIGFyZ3MtPmxlbiwKKwkJCQkJCSAgICAgICBhcmdzLT5hbGlnbm1lbnQsICpzYm5vLAorCQkJCQkJICAgICAgICpzbGVuLCAmbmV3KTsKKworCQkJLyoKKwkJCSAqIENob29zZSBjbG9zZXIgc2l6ZSBhbmQgaW52YWxpZGF0ZSBvdGhlciBjdXJzb3IuCisJCQkgKi8KKwkJCWlmIChzZGlmZiA8IGdkaWZmKQorCQkJCWdvdG8gb3V0X3VzZV9zZWFyY2g7CisJCQlnb3RvIG91dF91c2VfZ29vZDsKKwkJfQorCisJCWlmICghZGlyKQorCQkJZXJyb3IgPSB4ZnNfYnRyZWVfaW5jcmVtZW50KCpzY3VyLCAwLCAmaSk7CisJCWVsc2UKKwkJCWVycm9yID0geGZzX2J0cmVlX2RlY3JlbWVudCgqc2N1ciwgMCwgJmkpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGVycm9yMDsKKwl9IHdoaWxlIChpKTsKKworb3V0X3VzZV9nb29kOgorCXhmc19idHJlZV9kZWxfY3Vyc29yKCpzY3VyLCBYRlNfQlRSRUVfTk9FUlJPUik7CisJKnNjdXIgPSBOVUxMOworCXJldHVybiAwOworCitvdXRfdXNlX3NlYXJjaDoKKwl4ZnNfYnRyZWVfZGVsX2N1cnNvcigqZ2N1ciwgWEZTX0JUUkVFX05PRVJST1IpOworCSpnY3VyID0gTlVMTDsKKwlyZXR1cm4gMDsKKworZXJyb3IwOgorCS8qIGNhbGxlciBpbnZhbGlkYXRlcyBjdXJzb3JzICovCisJcmV0dXJuIGVycm9yOworfQorCisvKgogICogQWxsb2NhdGUgYSB2YXJpYWJsZSBleHRlbnQgbmVhciBibm8gaW4gdGhlIGFsbG9jYXRpb24gZ3JvdXAgYWduby4KICAqIEV4dGVudCdzIGxlbmd0aCAocmV0dXJuZWQgaW4gbGVuKSB3aWxsIGJlIGJldHdlZW4gbWlubGVuIGFuZCBtYXhsZW4sCiAgKiBhbmQgb2YgdGhlIGZvcm0gayAqIHByb2QgKyBtb2QgdW5sZXNzIHRoZXJlJ3Mgbm90aGluZyB0aGF0IGxhcmdlLgpAQCAtOTI1LDIwMyArMTAyMCw0NSBAQAogCQkJfQogCQl9CiAJfSB3aGlsZSAoYm5vX2N1cl9sdCB8fCBibm9fY3VyX2d0KTsKKwogCS8qCiAJICogR290IGJvdGggY3Vyc29ycyBzdGlsbCBhY3RpdmUsIG5lZWQgdG8gZmluZCBiZXR0ZXIgZW50cnkuCiAJICovCiAJaWYgKGJub19jdXJfbHQgJiYgYm5vX2N1cl9ndCkgewotCQkvKgotCQkgKiBMZWZ0IHNpZGUgaXMgbG9uZyBlbm91Z2gsIGxvb2sgZm9yIGEgcmlnaHQgc2lkZSBlbnRyeS4KLQkJICovCiAJCWlmIChsdGxlbmEgPj0gYXJncy0+bWlubGVuKSB7CiAJCQkvKgotCQkJICogRml4IHVwIHRoZSBsZW5ndGguCisJCQkgKiBMZWZ0IHNpZGUgaXMgZ29vZCwgbG9vayBmb3IgYSByaWdodCBzaWRlIGVudHJ5LgogCQkJICovCiAJCQlhcmdzLT5sZW4gPSBYRlNfRVhUTEVOX01JTihsdGxlbmEsIGFyZ3MtPm1heGxlbik7CiAJCQl4ZnNfYWxsb2NfZml4X2xlbihhcmdzKTsKLQkJCXJsZW4gPSBhcmdzLT5sZW47Ci0JCQlsdGRpZmYgPSB4ZnNfYWxsb2NfY29tcHV0ZV9kaWZmKGFyZ3MtPmFnYm5vLCBybGVuLAorCQkJbHRkaWZmID0geGZzX2FsbG9jX2NvbXB1dGVfZGlmZihhcmdzLT5hZ2JubywgYXJncy0+bGVuLAogCQkJCWFyZ3MtPmFsaWdubWVudCwgbHRibm8sIGx0bGVuLCAmbHRuZXcpOworCisJCQllcnJvciA9IHhmc19hbGxvY19maW5kX2Jlc3RfZXh0ZW50KGFyZ3MsCisJCQkJCQkmYm5vX2N1cl9sdCwgJmJub19jdXJfZ3QsCisJCQkJCQlsdGRpZmYsICZndGJubywgJmd0bGVuLCAmZ3RsZW5hLAorCQkJCQkJMCAvKiBzZWFyY2ggcmlnaHQgKi8pOworCQl9IGVsc2UgeworCQkJQVNTRVJUKGd0bGVuYSA+PSBhcmdzLT5taW5sZW4pOworCiAJCQkvKgotCQkJICogTm90IHBlcmZlY3QuCi0JCQkgKi8KLQkJCWlmIChsdGRpZmYpIHsKLQkJCQkvKgotCQkJCSAqIExvb2sgdW50aWwgd2UgZmluZCBhIGJldHRlciBvbmUsIHJ1biBvdXQgb2YKLQkJCQkgKiBzcGFjZSwgb3IgcnVuIG9mZiB0aGUgZW5kLgotCQkJCSAqLwotCQkJCXdoaWxlIChibm9fY3VyX2x0ICYmIGJub19jdXJfZ3QpIHsKLQkJCQkJaWYgKChlcnJvciA9IHhmc19hbGxvY19nZXRfcmVjKAotCQkJCQkJCWJub19jdXJfZ3QsICZndGJubywKLQkJCQkJCQkmZ3RsZW4sICZpKSkpCi0JCQkJCQlnb3RvIGVycm9yMDsKLQkJCQkJWEZTX1dBTlRfQ09SUlVQVEVEX0dPVE8oaSA9PSAxLCBlcnJvcjApOwotCQkJCQl4ZnNfYWxsb2NfY29tcHV0ZV9hbGlnbmVkKGd0Ym5vLCBndGxlbiwKLQkJCQkJCWFyZ3MtPmFsaWdubWVudCwgYXJncy0+bWlubGVuLAotCQkJCQkJJmd0Ym5vYSwgJmd0bGVuYSk7Ci0JCQkJCS8qCi0JCQkJCSAqIFRoZSBsZWZ0IG9uZSBpcyBjbGVhcmx5IGJldHRlci4KLQkJCQkJICovCi0JCQkJCWlmIChndGJub2EgPj0gYXJncy0+YWdibm8gKyBsdGRpZmYpIHsKLQkJCQkJCXhmc19idHJlZV9kZWxfY3Vyc29yKAotCQkJCQkJCWJub19jdXJfZ3QsCi0JCQkJCQkJWEZTX0JUUkVFX05PRVJST1IpOwotCQkJCQkJYm5vX2N1cl9ndCA9IE5VTEw7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQkvKgotCQkJCQkgKiBJZiB3ZSByZWFjaCBhIGJpZyBlbm91Z2ggZW50cnksCi0JCQkJCSAqIGNvbXBhcmUgdGhlIHR3byBhbmQgcGljayB0aGUgYmVzdC4KLQkJCQkJICovCi0JCQkJCWlmIChndGxlbmEgPj0gYXJncy0+bWlubGVuKSB7Ci0JCQkJCQlhcmdzLT5sZW4gPQotCQkJCQkJCVhGU19FWFRMRU5fTUlOKGd0bGVuYSwKLQkJCQkJCQkJYXJncy0+bWF4bGVuKTsKLQkJCQkJCXhmc19hbGxvY19maXhfbGVuKGFyZ3MpOwotCQkJCQkJcmxlbiA9IGFyZ3MtPmxlbjsKLQkJCQkJCWd0ZGlmZiA9IHhmc19hbGxvY19jb21wdXRlX2RpZmYoCi0JCQkJCQkJYXJncy0+YWdibm8sIHJsZW4sCi0JCQkJCQkJYXJncy0+YWxpZ25tZW50LAotCQkJCQkJCWd0Ym5vLCBndGxlbiwgJmd0bmV3KTsKLQkJCQkJCS8qCi0JCQkJCQkgKiBSaWdodCBzaWRlIGlzIGJldHRlci4KLQkJCQkJCSAqLwotCQkJCQkJaWYgKGd0ZGlmZiA8IGx0ZGlmZikgewotCQkJCQkJCXhmc19idHJlZV9kZWxfY3Vyc29yKAotCQkJCQkJCQlibm9fY3VyX2x0LAotCQkJCQkJCQlYRlNfQlRSRUVfTk9FUlJPUik7Ci0JCQkJCQkJYm5vX2N1cl9sdCA9IE5VTEw7Ci0JCQkJCQl9Ci0JCQkJCQkvKgotCQkJCQkJICogTGVmdCBzaWRlIGlzIGJldHRlci4KLQkJCQkJCSAqLwotCQkJCQkJZWxzZSB7Ci0JCQkJCQkJeGZzX2J0cmVlX2RlbF9jdXJzb3IoCi0JCQkJCQkJCWJub19jdXJfZ3QsCi0JCQkJCQkJCVhGU19CVFJFRV9OT0VSUk9SKTsKLQkJCQkJCQlibm9fY3VyX2d0ID0gTlVMTDsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCS8qCi0JCQkJCSAqIEZlbGwgb2ZmIHRoZSByaWdodCBlbmQuCi0JCQkJCSAqLwotCQkJCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2luY3JlbWVudCgKLQkJCQkJCQlibm9fY3VyX2d0LCAwLCAmaSkpKQotCQkJCQkJZ290byBlcnJvcjA7Ci0JCQkJCWlmICghaSkgewotCQkJCQkJeGZzX2J0cmVlX2RlbF9jdXJzb3IoCi0JCQkJCQkJYm5vX2N1cl9ndCwKLQkJCQkJCQlYRlNfQlRSRUVfTk9FUlJPUik7Ci0JCQkJCQlibm9fY3VyX2d0ID0gTlVMTDsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJLyoKLQkJCSAqIFRoZSBsZWZ0IHNpZGUgaXMgcGVyZmVjdCwgdHJhc2ggdGhlIHJpZ2h0IHNpZGUuCi0JCQkgKi8KLQkJCWVsc2UgewotCQkJCXhmc19idHJlZV9kZWxfY3Vyc29yKGJub19jdXJfZ3QsCi0JCQkJCQkgICAgIFhGU19CVFJFRV9OT0VSUk9SKTsKLQkJCQlibm9fY3VyX2d0ID0gTlVMTDsKLQkJCX0KLQkJfQotCQkvKgotCQkgKiBJdCdzIHRoZSByaWdodCBzaWRlIHRoYXQgd2FzIGZvdW5kIGZpcnN0LCBsb29rIGxlZnQuCi0JCSAqLwotCQllbHNlIHsKLQkJCS8qCi0JCQkgKiBGaXggdXAgdGhlIGxlbmd0aC4KKwkJCSAqIFJpZ2h0IHNpZGUgaXMgZ29vZCwgbG9vayBmb3IgYSBsZWZ0IHNpZGUgZW50cnkuCiAJCQkgKi8KIAkJCWFyZ3MtPmxlbiA9IFhGU19FWFRMRU5fTUlOKGd0bGVuYSwgYXJncy0+bWF4bGVuKTsKIAkJCXhmc19hbGxvY19maXhfbGVuKGFyZ3MpOwotCQkJcmxlbiA9IGFyZ3MtPmxlbjsKLQkJCWd0ZGlmZiA9IHhmc19hbGxvY19jb21wdXRlX2RpZmYoYXJncy0+YWdibm8sIHJsZW4sCisJCQlndGRpZmYgPSB4ZnNfYWxsb2NfY29tcHV0ZV9kaWZmKGFyZ3MtPmFnYm5vLCBhcmdzLT5sZW4sCiAJCQkJYXJncy0+YWxpZ25tZW50LCBndGJubywgZ3RsZW4sICZndG5ldyk7Ci0JCQkvKgotCQkJICogUmlnaHQgc2lkZSBlbnRyeSBpc24ndCBwZXJmZWN0LgotCQkJICovCi0JCQlpZiAoZ3RkaWZmKSB7Ci0JCQkJLyoKLQkJCQkgKiBMb29rIHVudGlsIHdlIGZpbmQgYSBiZXR0ZXIgb25lLCBydW4gb3V0IG9mCi0JCQkJICogc3BhY2UsIG9yIHJ1biBvZmYgdGhlIGVuZC4KLQkJCQkgKi8KLQkJCQl3aGlsZSAoYm5vX2N1cl9sdCAmJiBibm9fY3VyX2d0KSB7Ci0JCQkJCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfZ2V0X3JlYygKLQkJCQkJCQlibm9fY3VyX2x0LCAmbHRibm8sCi0JCQkJCQkJJmx0bGVuLCAmaSkpKQotCQkJCQkJZ290byBlcnJvcjA7Ci0JCQkJCVhGU19XQU5UX0NPUlJVUFRFRF9HT1RPKGkgPT0gMSwgZXJyb3IwKTsKLQkJCQkJeGZzX2FsbG9jX2NvbXB1dGVfYWxpZ25lZChsdGJubywgbHRsZW4sCi0JCQkJCQlhcmdzLT5hbGlnbm1lbnQsIGFyZ3MtPm1pbmxlbiwKLQkJCQkJCSZsdGJub2EsICZsdGxlbmEpOwotCQkJCQkvKgotCQkJCQkgKiBUaGUgcmlnaHQgb25lIGlzIGNsZWFybHkgYmV0dGVyLgotCQkJCQkgKi8KLQkJCQkJaWYgKGx0Ym5vYSA8PSBhcmdzLT5hZ2JubyAtIGd0ZGlmZikgewotCQkJCQkJeGZzX2J0cmVlX2RlbF9jdXJzb3IoCi0JCQkJCQkJYm5vX2N1cl9sdCwKLQkJCQkJCQlYRlNfQlRSRUVfTk9FUlJPUik7Ci0JCQkJCQlibm9fY3VyX2x0ID0gTlVMTDsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCS8qCi0JCQkJCSAqIElmIHdlIHJlYWNoIGEgYmlnIGVub3VnaCBlbnRyeSwKLQkJCQkJICogY29tcGFyZSB0aGUgdHdvIGFuZCBwaWNrIHRoZSBiZXN0LgotCQkJCQkgKi8KLQkJCQkJaWYgKGx0bGVuYSA+PSBhcmdzLT5taW5sZW4pIHsKLQkJCQkJCWFyZ3MtPmxlbiA9IFhGU19FWFRMRU5fTUlOKAotCQkJCQkJCWx0bGVuYSwgYXJncy0+bWF4bGVuKTsKLQkJCQkJCXhmc19hbGxvY19maXhfbGVuKGFyZ3MpOwotCQkJCQkJcmxlbiA9IGFyZ3MtPmxlbjsKLQkJCQkJCWx0ZGlmZiA9IHhmc19hbGxvY19jb21wdXRlX2RpZmYoCi0JCQkJCQkJYXJncy0+YWdibm8sIHJsZW4sCi0JCQkJCQkJYXJncy0+YWxpZ25tZW50LAotCQkJCQkJCWx0Ym5vLCBsdGxlbiwgJmx0bmV3KTsKLQkJCQkJCS8qCi0JCQkJCQkgKiBMZWZ0IHNpZGUgaXMgYmV0dGVyLgotCQkJCQkJICovCi0JCQkJCQlpZiAobHRkaWZmIDwgZ3RkaWZmKSB7Ci0JCQkJCQkJeGZzX2J0cmVlX2RlbF9jdXJzb3IoCi0JCQkJCQkJCWJub19jdXJfZ3QsCi0JCQkJCQkJCVhGU19CVFJFRV9OT0VSUk9SKTsKLQkJCQkJCQlibm9fY3VyX2d0ID0gTlVMTDsKLQkJCQkJCX0KLQkJCQkJCS8qCi0JCQkJCQkgKiBSaWdodCBzaWRlIGlzIGJldHRlci4KLQkJCQkJCSAqLwotCQkJCQkJZWxzZSB7Ci0JCQkJCQkJeGZzX2J0cmVlX2RlbF9jdXJzb3IoCi0JCQkJCQkJCWJub19jdXJfbHQsCi0JCQkJCQkJCVhGU19CVFJFRV9OT0VSUk9SKTsKLQkJCQkJCQlibm9fY3VyX2x0ID0gTlVMTDsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCS8qCi0JCQkJCSAqIEZlbGwgb2ZmIHRoZSBsZWZ0IGVuZC4KLQkJCQkJICovCi0JCQkJCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfZGVjcmVtZW50KAotCQkJCQkJCWJub19jdXJfbHQsIDAsICZpKSkpCi0JCQkJCQlnb3RvIGVycm9yMDsKLQkJCQkJaWYgKCFpKSB7Ci0JCQkJCQl4ZnNfYnRyZWVfZGVsX2N1cnNvcihibm9fY3VyX2x0LAotCQkJCQkJCVhGU19CVFJFRV9OT0VSUk9SKTsKLQkJCQkJCWJub19jdXJfbHQgPSBOVUxMOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQkvKgotCQkJICogVGhlIHJpZ2h0IHNpZGUgaXMgcGVyZmVjdCwgdHJhc2ggdGhlIGxlZnQgc2lkZS4KLQkJCSAqLwotCQkJZWxzZSB7Ci0JCQkJeGZzX2J0cmVlX2RlbF9jdXJzb3IoYm5vX2N1cl9sdCwKLQkJCQkJWEZTX0JUUkVFX05PRVJST1IpOwotCQkJCWJub19jdXJfbHQgPSBOVUxMOwotCQkJfQorCisJCQllcnJvciA9IHhmc19hbGxvY19maW5kX2Jlc3RfZXh0ZW50KGFyZ3MsCisJCQkJCQkmYm5vX2N1cl9ndCwgJmJub19jdXJfbHQsCisJCQkJCQlndGRpZmYsICZsdGJubywgJmx0bGVuLCAmbHRsZW5hLAorCQkJCQkJMSAvKiBzZWFyY2ggbGVmdCAqLyk7CiAJCX0KKworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGVycm9yMDsKIAl9CisKIAkvKgogCSAqIElmIHdlIGNvdWxkbid0IGdldCBhbnl0aGluZywgZ2l2ZSB1cC4KIAkgKi8KQEAgLTExMzAsNiArMTA2Nyw3IEBACiAJCWFyZ3MtPmFnYm5vID0gTlVMTEFHQkxPQ0s7CiAJCXJldHVybiAwOwogCX0KKwogCS8qCiAJICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHNlbGVjdGVkIGEgZnJlZXNwYWNlIGVudHJ5LCBlaXRoZXIgdG8gdGhlCiAJICogbGVmdCBvciB0byB0aGUgcmlnaHQuICBJZiBpdCdzIG9uIHRoZSByaWdodCwgY29weSBhbGwgdGhlCkBAIC0xMTQ2LDYgKzEwODQsNyBAQAogCQlqID0gMTsKIAl9IGVsc2UKIAkJaiA9IDA7CisKIAkvKgogCSAqIEZpeCB1cCB0aGUgbGVuZ3RoIGFuZCBjb21wdXRlIHRoZSB1c2VmdWwgYWRkcmVzcy4KIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMgYi9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCmluZGV4IGE2Y2ZmOGUuLjcxZTkwZGMyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCisrKyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKQEAgLTYzNyw3ICs2MzcsNyBAQAogCSAqIEl0IGRpZG4ndCBhbGwgZml0LCBzbyB3ZSBoYXZlIHRvIHNvcnQgZXZlcnl0aGluZyBvbiBoYXNodmFsLgogCSAqLwogCXNic2l6ZSA9IHNmLT5oZHIuY291bnQgKiBzaXplb2YoKnNidWYpOwotCXNicCA9IHNidWYgPSBrbWVtX2FsbG9jKHNic2l6ZSwgS01fU0xFRVApOworCXNicCA9IHNidWYgPSBrbWVtX2FsbG9jKHNic2l6ZSwgS01fU0xFRVAgfCBLTV9OT0ZTKTsKIAogCS8qCiAJICogU2NhbiB0aGUgYXR0cmlidXRlIGxpc3QgZm9yIHRoZSByZXN0IG9mIHRoZSBlbnRyaWVzLCBzdG9yaW5nCkBAIC0yMzg2LDcgKzIzODYsNyBAQAogCQkJCWFyZ3MuZHAgPSBjb250ZXh0LT5kcDsKIAkJCQlhcmdzLndoaWNoZm9yayA9IFhGU19BVFRSX0ZPUks7CiAJCQkJYXJncy52YWx1ZWxlbiA9IHZhbHVlbGVuOwotCQkJCWFyZ3MudmFsdWUgPSBrbWVtX2FsbG9jKHZhbHVlbGVuLCBLTV9TTEVFUCk7CisJCQkJYXJncy52YWx1ZSA9IGttZW1fYWxsb2ModmFsdWVsZW4sIEtNX1NMRUVQIHwgS01fTk9GUyk7CiAJCQkJYXJncy5ybXRibGtubyA9IGJlMzJfdG9fY3B1KG5hbWVfcm10LT52YWx1ZWJsayk7CiAJCQkJYXJncy5ybXRibGtjbnQgPSBYRlNfQl9UT19GU0IoYXJncy5kcC0+aV9tb3VudCwgdmFsdWVsZW4pOwogCQkJCXJldHZhbCA9IHhmc19hdHRyX3JtdHZhbF9nZXQoJmFyZ3MpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19idHJlZS5jIGIvZnMveGZzL3hmc19idHJlZS5jCmluZGV4IDA0ZjljY2EuLjJmOWU5N2MgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2J0cmVlLmMKQEAgLTYzNCw5ICs2MzQsOCBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCUFTU0VSVCghYnAgfHwgIVhGU19CVUZfR0VURVJST1IoYnApKTsKLQlpZiAoYnAgIT0gTlVMTCkgeworCWlmIChicCkKIAkJWEZTX0JVRl9TRVRfVlRZUEVfUkVGKGJwLCBCX0ZTX01BUCwgcmVmdmFsKTsKLQl9CiAJKmJwcCA9IGJwOwogCXJldHVybiAwOwogfQpAQCAtOTQ0LDEzICs5NDMsMTMgQEAKIAlzd2l0Y2ggKGN1ci0+YmNfYnRudW0pIHsKIAljYXNlIFhGU19CVE5VTV9CTk86CiAJY2FzZSBYRlNfQlROVU1fQ05UOgotCQlYRlNfQlVGX1NFVF9WVFlQRV9SRUYoKmJwcCwgQl9GU19NQVAsIFhGU19BTExPQ19CVFJFRV9SRUYpOworCQlYRlNfQlVGX1NFVF9WVFlQRV9SRUYoYnAsIEJfRlNfTUFQLCBYRlNfQUxMT0NfQlRSRUVfUkVGKTsKIAkJYnJlYWs7CiAJY2FzZSBYRlNfQlROVU1fSU5POgotCQlYRlNfQlVGX1NFVF9WVFlQRV9SRUYoKmJwcCwgQl9GU19JTk9NQVAsIFhGU19JTk9fQlRSRUVfUkVGKTsKKwkJWEZTX0JVRl9TRVRfVlRZUEVfUkVGKGJwLCBCX0ZTX0lOT01BUCwgWEZTX0lOT19CVFJFRV9SRUYpOwogCQlicmVhazsKIAljYXNlIFhGU19CVE5VTV9CTUFQOgotCQlYRlNfQlVGX1NFVF9WVFlQRV9SRUYoKmJwcCwgQl9GU19NQVAsIFhGU19CTUFQX0JUUkVFX1JFRik7CisJCVhGU19CVUZfU0VUX1ZUWVBFX1JFRihicCwgQl9GU19NQVAsIFhGU19CTUFQX0JUUkVFX1JFRik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUFTU0VSVCgwKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwppbmRleCAyNjg2ZDBkLi5lZDJiNjVmIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCkBAIC0xNDIsNyArMTQyLDcgQEAKICNlbmRpZgogCiBTVEFUSUMgdm9pZAl4ZnNfYnVmX2Vycm9yX3JlbHNlKHhmc19idWZfdCAqYnApOwotU1RBVElDIHZvaWQJeGZzX2J1Zl9kb19jYWxsYmFja3MoeGZzX2J1Zl90ICpicCwgeGZzX2xvZ19pdGVtX3QgKmxpcCk7CitTVEFUSUMgdm9pZAl4ZnNfYnVmX2RvX2NhbGxiYWNrcyhzdHJ1Y3QgeGZzX2J1ZiAqYnApOwogCiAvKgogICogVGhpcyByZXR1cm5zIHRoZSBudW1iZXIgb2YgbG9nIGlvdmVjcyBuZWVkZWQgdG8gbG9nIHRoZQpAQCAtNDUwLDcgKzQ1MCw3IEBACiAJCSAqIHhmc190cmFuc19haWxfZGVsZXRlKCkgZHJvcHMgdGhlIEFJTCBsb2NrLgogCQkgKi8KIAkJaWYgKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRV9JTk9ERSkgewotCQkJeGZzX2J1Zl9kb19jYWxsYmFja3MoYnAsICh4ZnNfbG9nX2l0ZW1fdCAqKWJpcCk7CisJCQl4ZnNfYnVmX2RvX2NhbGxiYWNrcyhicCk7CiAJCQlYRlNfQlVGX1NFVF9GU1BSSVZBVEUoYnAsIE5VTEwpOwogCQkJWEZTX0JVRl9DTFJfSU9ET05FX0ZVTkMoYnApOwogCQl9IGVsc2UgewpAQCAtOTE4LDE1ICs5MTgsMjYgQEAKIAlYRlNfQlVGX1NFVF9JT0RPTkVfRlVOQyhicCwgeGZzX2J1Zl9pb2RvbmVfY2FsbGJhY2tzKTsKIH0KIAorLyoKKyAqIFdlIGNhbiBoYXZlIG1hbnkgY2FsbGJhY2tzIG9uIGEgYnVmZmVyLiBSdW5uaW5nIHRoZSBjYWxsYmFja3MgaW5kaXZpZHVhbGx5CisgKiBjYW4gY2F1c2UgYSBsb3Qgb2YgY29udGVudGlvbiBvbiB0aGUgQUlMIGxvY2ssIHNvIHdlIGFsbG93IGZvciBhIHNpbmdsZQorICogY2FsbGJhY2sgdG8gYmUgYWJsZSB0byBzY2FuIHRoZSByZW1haW5pbmcgbGlwLT5saV9iaW9fbGlzdCBmb3Igb3RoZXIgaXRlbXMKKyAqIG9mIHRoZSBzYW1lIHR5cGUgYW5kIGNhbGxiYWNrIHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUgZmlyc3QgY2FsbC4KKyAqCisgKiBBcyBhIHJlc3VsdCwgdGhlIGxvb3Agd2Fsa2luZyB0aGUgY2FsbGJhY2sgbGlzdCBiZWxvdyB3aWxsIGFsc28gbW9kaWZ5IHRoZQorICogbGlzdC4gaXQgcmVtb3ZlcyB0aGUgZmlyc3QgaXRlbSBmcm9tIHRoZSBsaXN0IGFuZCB0aGVuIHJ1bnMgdGhlIGNhbGxiYWNrLgorICogVGhlIGxvb3AgdGhlbiByZXN0YXJ0cyBmcm9tIHRoZSBuZXcgaGVhZCBvZiB0aGUgbGlzdC4gVGhpcyBhbGxvd3MgdGhlCisgKiBjYWxsYmFjayB0byBzY2FuIGFuZCBtb2RpZnkgdGhlIGxpc3QgYXR0YWNoZWQgdG8gdGhlIGJ1ZmZlciBhbmQgd2UgZG9uJ3QKKyAqIGhhdmUgdG8gY2FyZSBhYm91dCBtYWludGFpbmluZyBhIG5leHQgaXRlbSBwb2ludGVyLgorICovCiBTVEFUSUMgdm9pZAogeGZzX2J1Zl9kb19jYWxsYmFja3MoCi0JeGZzX2J1Zl90CSpicCwKLQl4ZnNfbG9nX2l0ZW1fdAkqbGlwKQorCXN0cnVjdCB4ZnNfYnVmCQkqYnApCiB7Ci0JeGZzX2xvZ19pdGVtX3QJKm5saXA7CisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwOwogCi0Jd2hpbGUgKGxpcCAhPSBOVUxMKSB7Ci0JCW5saXAgPSBsaXAtPmxpX2Jpb19saXN0OworCXdoaWxlICgobGlwID0gWEZTX0JVRl9GU1BSSVZBVEUoYnAsIHhmc19sb2dfaXRlbV90ICopKSAhPSBOVUxMKSB7CisJCVhGU19CVUZfU0VUX0ZTUFJJVkFURShicCwgbGlwLT5saV9iaW9fbGlzdCk7CiAJCUFTU0VSVChsaXAtPmxpX2NiICE9IE5VTEwpOwogCQkvKgogCQkgKiBDbGVhciB0aGUgbmV4dCBwb2ludGVyIHNvIHdlIGRvbid0IGhhdmUgYW55CkBAIC05MzYsNyArOTQ3LDYgQEAKIAkJICovCiAJCWxpcC0+bGlfYmlvX2xpc3QgPSBOVUxMOwogCQlsaXAtPmxpX2NiKGJwLCBsaXApOwotCQlsaXAgPSBubGlwOwogCX0KIH0KIApAQCAtOTcwLDcgKzk4MCw3IEBACiAJCQlBU1NFUlQoWEZTX0JVRl9UQVJHRVQoYnApID09IG1wLT5tX2RkZXZfdGFyZ3ApOwogCQkJWEZTX0JVRl9TVVBFUl9TVEFMRShicCk7CiAJCQl0cmFjZV94ZnNfYnVmX2l0ZW1faW9kb25lKGJwLCBfUkVUX0lQXyk7Ci0JCQl4ZnNfYnVmX2RvX2NhbGxiYWNrcyhicCwgbGlwKTsKKwkJCXhmc19idWZfZG9fY2FsbGJhY2tzKGJwKTsKIAkJCVhGU19CVUZfU0VUX0ZTUFJJVkFURShicCwgTlVMTCk7CiAJCQlYRlNfQlVGX0NMUl9JT0RPTkVfRlVOQyhicCk7CiAJCQl4ZnNfYnVmX2lvZW5kKGJwLCAwKTsKQEAgLTEwMjksNyArMTAzOSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQl4ZnNfYnVmX2RvX2NhbGxiYWNrcyhicCwgbGlwKTsKKwl4ZnNfYnVmX2RvX2NhbGxiYWNrcyhicCk7CiAJWEZTX0JVRl9TRVRfRlNQUklWQVRFKGJwLCBOVUxMKTsKIAlYRlNfQlVGX0NMUl9JT0RPTkVfRlVOQyhicCk7CiAJeGZzX2J1Zl9pb2VuZChicCwgMCk7CkBAIC0xMDYzLDcgKzEwNzMsNyBAQAogCSAqIFdlIGhhdmUgdG8gdW5waW4gdGhlIHBpbm5lZCBidWZmZXJzIHNvIGRvIHRoZQogCSAqIGNhbGxiYWNrcy4KIAkgKi8KLQl4ZnNfYnVmX2RvX2NhbGxiYWNrcyhicCwgbGlwKTsKKwl4ZnNfYnVmX2RvX2NhbGxiYWNrcyhicCk7CiAJWEZTX0JVRl9TRVRfRlNQUklWQVRFKGJwLCBOVUxMKTsKIAlYRlNfQlVGX0NMUl9JT0RPTkVfRlVOQyhicCk7CiAJWEZTX0JVRl9TRVRfQlJFTFNFX0ZVTkMoYnAsTlVMTCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmggYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmgKaW5kZXggMGUyZWQ0My4uYjZlY2QyMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idWZfaXRlbS5oCisrKyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uaApAQCAtMTA1LDE3ICsxMDUsNiBAQAogCXhmc19idWZfbG9nX2Zvcm1hdF90CWJsaV9mb3JtYXQ7CS8qIGluLWxvZyBoZWFkZXIgKi8KIH0geGZzX2J1Zl9sb2dfaXRlbV90OwogCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBkdXJpbmcgcmVjb3ZlcnkgdG8gcmVjb3JkIHRoZSBidWYgbG9nCi0gKiBpdGVtcyB3aGljaCBoYXZlIGJlZW4gY2FuY2VsZWQgYW5kIHNob3VsZCBub3QgYmUgcmVwbGF5ZWQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHhmc19idWZfY2FuY2VsIHsKLQl4ZnNfZGFkZHJfdAkJYmNfYmxrbm87Ci0JdWludAkJCWJjX2xlbjsKLQlpbnQJCQliY19yZWZjb3VudDsKLQlzdHJ1Y3QgeGZzX2J1Zl9jYW5jZWwJKmJjX25leHQ7Ci19IHhmc19idWZfY2FuY2VsX3Q7Ci0KIHZvaWQJeGZzX2J1Zl9pdGVtX2luaXQoc3RydWN0IHhmc19idWYgKiwgc3RydWN0IHhmc19tb3VudCAqKTsKIHZvaWQJeGZzX2J1Zl9pdGVtX3JlbHNlKHN0cnVjdCB4ZnNfYnVmICopOwogdm9pZAl4ZnNfYnVmX2l0ZW1fbG9nKHhmc19idWZfbG9nX2l0ZW1fdCAqLCB1aW50LCB1aW50KTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMgYi9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCmluZGV4IGE1NWU2ODcuLjc1ZjJlZjYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYwpAQCAtNDgsNiArNDgsMjggQEAKIH0KIAogLyoKKyAqIEZyZWVpbmcgdGhlIGVmaSByZXF1aXJlcyB0aGF0IHdlIHJlbW92ZSBpdCBmcm9tIHRoZSBBSUwgaWYgaXQgaGFzIGFscmVhZHkKKyAqIGJlZW4gcGxhY2VkIHRoZXJlLiBIb3dldmVyLCB0aGUgRUZJIG1heSBub3QgeWV0IGhhdmUgYmVlbiBwbGFjZWQgaW4gdGhlIEFJTAorICogd2hlbiBjYWxsZWQgYnkgeGZzX2VmaV9yZWxlYXNlKCkgZnJvbSBFRkQgcHJvY2Vzc2luZyBkdWUgdG8gdGhlIG9yZGVyaW5nIG9mCisgKiBjb21taXR0ZWQgdnMgdW5waW4gb3BlcmF0aW9ucyBpbiBidWxrIGluc2VydCBvcGVyYXRpb25zLiBIZW5jZSB0aGUKKyAqIHRlc3RfYW5kX2NsZWFyX2JpdChYRlNfRUZJX0NPTU1JVFRFRCkgdG8gZW5zdXJlIG9ubHkgdGhlIGxhc3QgY2FsbGVyIGZyZWVzCisgKiB0aGUgRUZJLgorICovCitTVEFUSUMgdm9pZAorX194ZnNfZWZpX3JlbGVhc2UoCisJc3RydWN0IHhmc19lZmlfbG9nX2l0ZW0JKmVmaXApCit7CisJc3RydWN0IHhmc19haWwJCSphaWxwID0gZWZpcC0+ZWZpX2l0ZW0ubGlfYWlscDsKKworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFhGU19FRklfQ09NTUlUVEVELCAmZWZpcC0+ZWZpX2ZsYWdzKSkgeworCQlzcGluX2xvY2soJmFpbHAtPnhhX2xvY2spOworCQkvKiB4ZnNfdHJhbnNfYWlsX2RlbGV0ZSgpIGRyb3BzIHRoZSBBSUwgbG9jay4gKi8KKwkJeGZzX3RyYW5zX2FpbF9kZWxldGUoYWlscCwgJmVmaXAtPmVmaV9pdGVtKTsKKwkJeGZzX2VmaV9pdGVtX2ZyZWUoZWZpcCk7CisJfQorfQorCisvKgogICogVGhpcyByZXR1cm5zIHRoZSBudW1iZXIgb2YgaW92ZWNzIG5lZWRlZCB0byBsb2cgdGhlIGdpdmVuIGVmaSBpdGVtLgogICogV2Ugb25seSBuZWVkIDEgaW92ZWMgZm9yIGFuIGVmaSBpdGVtLiAgSXQganVzdCBsb2dzIHRoZSBlZmlfbG9nX2Zvcm1hdAogICogc3RydWN0dXJlLgpAQCAtNzQsNyArOTYsOCBAQAogCXN0cnVjdCB4ZnNfZWZpX2xvZ19pdGVtCSplZmlwID0gRUZJX0lURU0obGlwKTsKIAl1aW50CQkJc2l6ZTsKIAotCUFTU0VSVChlZmlwLT5lZmlfbmV4dF9leHRlbnQgPT0gZWZpcC0+ZWZpX2Zvcm1hdC5lZmlfbmV4dGVudHMpOworCUFTU0VSVChhdG9taWNfcmVhZCgmZWZpcC0+ZWZpX25leHRfZXh0ZW50KSA9PQorCQkJCWVmaXAtPmVmaV9mb3JtYXQuZWZpX25leHRlbnRzKTsKIAogCWVmaXAtPmVmaV9mb3JtYXQuZWZpX3R5cGUgPSBYRlNfTElfRUZJOwogCkBAIC05OSwxMCArMTIyLDEyIEBACiB9CiAKIC8qCi0gKiBXaGlsZSBFRklzIGNhbm5vdCByZWFsbHkgYmUgcGlubmVkLCB0aGUgdW5waW4gb3BlcmF0aW9uIGlzIHRoZQotICogbGFzdCBwbGFjZSBhdCB3aGljaCB0aGUgRUZJIGlzIG1hbmlwdWxhdGVkIGR1cmluZyBhIHRyYW5zYWN0aW9uLgotICogSGVyZSB3ZSBjb29yZGluYXRlIHdpdGggeGZzX2VmaV9jYW5jZWwoKSB0byBkZXRlcm1pbmUgd2hvIGdldHMgdG8KLSAqIGZyZWUgdGhlIEVGSS4KKyAqIFdoaWxlIEVGSXMgY2Fubm90IHJlYWxseSBiZSBwaW5uZWQsIHRoZSB1bnBpbiBvcGVyYXRpb24gaXMgdGhlIGxhc3QgcGxhY2UgYXQKKyAqIHdoaWNoIHRoZSBFRkkgaXMgbWFuaXB1bGF0ZWQgZHVyaW5nIGEgdHJhbnNhY3Rpb24uICBJZiB3ZSBhcmUgYmVpbmcgYXNrZWQgdG8KKyAqIHJlbW92ZSB0aGUgRUZJIGl0J3MgYmVjYXVzZSB0aGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gY2FuY2VsbGVkIGFuZCBieQorICogZGVmaW5pdGlvbiB0aGF0IG1lYW5zIHRoZSBFRkkgY2Fubm90IGJlIGluIHRoZSBBSUwgc28gcmVtb3ZlIGl0IGZyb20gdGhlCisgKiB0cmFuc2FjdGlvbiBhbmQgZnJlZSBpdC4gIE90aGVyd2lzZSBjb29yZGluYXRlIHdpdGggeGZzX2VmaV9yZWxlYXNlKCkgKHZpYQorICogWEZTX0VGSV9DT01NSVRURUQpIHRvIGRldGVybWluZSB3aG8gZ2V0cyB0byBmcmVlIHRoZSBFRkkuCiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfZWZpX2l0ZW1fdW5waW4oCkBAIC0xMTAsMjAgKzEzNSwxNCBAQAogCWludAkJCXJlbW92ZSkKIHsKIAlzdHJ1Y3QgeGZzX2VmaV9sb2dfaXRlbQkqZWZpcCA9IEVGSV9JVEVNKGxpcCk7Ci0Jc3RydWN0IHhmc19haWwJCSphaWxwID0gbGlwLT5saV9haWxwOwogCi0Jc3Bpbl9sb2NrKCZhaWxwLT54YV9sb2NrKTsKLQlpZiAoZWZpcC0+ZWZpX2ZsYWdzICYgWEZTX0VGSV9DQU5DRUxFRCkgewotCQlpZiAocmVtb3ZlKQotCQkJeGZzX3RyYW5zX2RlbF9pdGVtKGxpcCk7Ci0KLQkJLyogeGZzX3RyYW5zX2FpbF9kZWxldGUoKSBkcm9wcyB0aGUgQUlMIGxvY2suICovCi0JCXhmc190cmFuc19haWxfZGVsZXRlKGFpbHAsIGxpcCk7CisJaWYgKHJlbW92ZSkgeworCQlBU1NFUlQoIShsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkpOworCQl4ZnNfdHJhbnNfZGVsX2l0ZW0obGlwKTsKIAkJeGZzX2VmaV9pdGVtX2ZyZWUoZWZpcCk7Ci0JfSBlbHNlIHsKLQkJZWZpcC0+ZWZpX2ZsYWdzIHw9IFhGU19FRklfQ09NTUlUVEVEOwotCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7CisJCXJldHVybjsKIAl9CisJX194ZnNfZWZpX3JlbGVhc2UoZWZpcCk7CiB9CiAKIC8qCkBAIC0xNTIsMTYgKzE3MSwyMCBAQAogfQogCiAvKgotICogVGhlIEVGSSBpcyBsb2dnZWQgb25seSBvbmNlIGFuZCBjYW5ub3QgYmUgbW92ZWQgaW4gdGhlIGxvZywgc28KLSAqIHNpbXBseSByZXR1cm4gdGhlIGxzbiBhdCB3aGljaCBpdCdzIGJlZW4gbG9nZ2VkLiAgVGhlIGNhbmNlbGVkCi0gKiBmbGFnIGlzIG5vdCBwYWlkIGFueSBhdHRlbnRpb24gaGVyZS4gIENoZWNraW5nIGZvciB0aGF0IGlzIGRlbGF5ZWQKLSAqIHVudGlsIHRoZSBFRkkgaXMgdW5waW5uZWQuCisgKiBUaGUgRUZJIGlzIGxvZ2dlZCBvbmx5IG9uY2UgYW5kIGNhbm5vdCBiZSBtb3ZlZCBpbiB0aGUgbG9nLCBzbyBzaW1wbHkgcmV0dXJuCisgKiB0aGUgbHNuIGF0IHdoaWNoIGl0J3MgYmVlbiBsb2dnZWQuICBGb3IgYnVsayB0cmFuc2FjdGlvbiBjb21taXR0ZWQKKyAqIHByb2Nlc3NpbmcsIHRoZSBFRkkgbWF5IGJlIHByb2Nlc3NlZCBidXQgbm90IHlldCB1bnBpbm5lZCBwcmlvciB0byB0aGUgRUZECisgKiBiZWluZyBwcm9jZXNzZWQuIFNldCB0aGUgWEZTX0VGSV9DT01NSVRURUQgZmxhZyBzbyB0aGlzIGNhc2UgY2FuIGJlIGRldGVjdGVkCisgKiB3aGVuIHByb2Nlc3NpbmcgdGhlIEVGRC4KICAqLwogU1RBVElDIHhmc19sc25fdAogeGZzX2VmaV9pdGVtX2NvbW1pdHRlZCgKIAlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXAsCiAJeGZzX2xzbl90CQlsc24pCiB7CisJc3RydWN0IHhmc19lZmlfbG9nX2l0ZW0JKmVmaXAgPSBFRklfSVRFTShsaXApOworCisJc2V0X2JpdChYRlNfRUZJX0NPTU1JVFRFRCwgJmVmaXAtPmVmaV9mbGFncyk7CiAJcmV0dXJuIGxzbjsKIH0KIApAQCAtMjMwLDYgKzI1Myw3IEBACiAJeGZzX2xvZ19pdGVtX2luaXQobXAsICZlZmlwLT5lZmlfaXRlbSwgWEZTX0xJX0VGSSwgJnhmc19lZmlfaXRlbV9vcHMpOwogCWVmaXAtPmVmaV9mb3JtYXQuZWZpX25leHRlbnRzID0gbmV4dGVudHM7CiAJZWZpcC0+ZWZpX2Zvcm1hdC5lZmlfaWQgPSAoX19wc2ludF90KSh2b2lkKillZmlwOworCWF0b21pY19zZXQoJmVmaXAtPmVmaV9uZXh0X2V4dGVudCwgMCk7CiAKIAlyZXR1cm4gZWZpcDsKIH0KQEAgLTI4OSwzNyArMzEzLDE4IEBACiB9CiAKIC8qCi0gKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgZWZkIGl0ZW0gY29kZSBiZWxvdyB0byByZWxlYXNlIHJlZmVyZW5jZXMgdG8KLSAqIHRoZSBnaXZlbiBlZmkgaXRlbS4gIEVhY2ggZWZkIGNhbGxzIHRoaXMgd2l0aCB0aGUgbnVtYmVyIG9mCi0gKiBleHRlbnRzIHRoYXQgaXQgaGFzIGxvZ2dlZCwgYW5kIHdoZW4gdGhlIHN1bSBvZiB0aGVzZSByZWFjaGVzCi0gKiB0aGUgdG90YWwgbnVtYmVyIG9mIGV4dGVudHMgbG9nZ2VkIGJ5IHRoaXMgZWZpIGl0ZW0gd2UgY2FuIGZyZWUKLSAqIHRoZSBlZmkgaXRlbS4KLSAqCi0gKiBGcmVlaW5nIHRoZSBlZmkgaXRlbSByZXF1aXJlcyB0aGF0IHdlIHJlbW92ZSBpdCBmcm9tIHRoZSBBSUwuCi0gKiBXZSdsbCB1c2UgdGhlIEFJTCBsb2NrIHRvIHByb3RlY3Qgb3VyIGNvdW50ZXJzIGFzIHdlbGwgYXMKLSAqIHRoZSByZW1vdmFsIGZyb20gdGhlIEFJTC4KKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBlZmQgaXRlbSBjb2RlIGJlbG93IHRvIHJlbGVhc2UgcmVmZXJlbmNlcyB0byB0aGUgZ2l2ZW4KKyAqIGVmaSBpdGVtLiAgRWFjaCBlZmQgY2FsbHMgdGhpcyB3aXRoIHRoZSBudW1iZXIgb2YgZXh0ZW50cyB0aGF0IGl0IGhhcworICogbG9nZ2VkLCBhbmQgd2hlbiB0aGUgc3VtIG9mIHRoZXNlIHJlYWNoZXMgdGhlIHRvdGFsIG51bWJlciBvZiBleHRlbnRzIGxvZ2dlZAorICogYnkgdGhpcyBlZmkgaXRlbSB3ZSBjYW4gZnJlZSB0aGUgZWZpIGl0ZW0uCiAgKi8KIHZvaWQKIHhmc19lZmlfcmVsZWFzZSh4ZnNfZWZpX2xvZ19pdGVtX3QJKmVmaXAsCiAJCXVpbnQJCQluZXh0ZW50cykKIHsKLQlzdHJ1Y3QgeGZzX2FpbAkJKmFpbHAgPSBlZmlwLT5lZmlfaXRlbS5saV9haWxwOwotCWludAkJCWV4dGVudHNfbGVmdDsKLQotCUFTU0VSVChlZmlwLT5lZmlfbmV4dF9leHRlbnQgPiAwKTsKLQlBU1NFUlQoZWZpcC0+ZWZpX2ZsYWdzICYgWEZTX0VGSV9DT01NSVRURUQpOwotCi0Jc3Bpbl9sb2NrKCZhaWxwLT54YV9sb2NrKTsKLQlBU1NFUlQoZWZpcC0+ZWZpX25leHRfZXh0ZW50ID49IG5leHRlbnRzKTsKLQllZmlwLT5lZmlfbmV4dF9leHRlbnQgLT0gbmV4dGVudHM7Ci0JZXh0ZW50c19sZWZ0ID0gZWZpcC0+ZWZpX25leHRfZXh0ZW50OwotCWlmIChleHRlbnRzX2xlZnQgPT0gMCkgewotCQkvKiB4ZnNfdHJhbnNfYWlsX2RlbGV0ZSgpIGRyb3BzIHRoZSBBSUwgbG9jay4gKi8KLQkJeGZzX3RyYW5zX2FpbF9kZWxldGUoYWlscCwgKHhmc19sb2dfaXRlbV90ICopZWZpcCk7Ci0JCXhmc19lZmlfaXRlbV9mcmVlKGVmaXApOwotCX0gZWxzZSB7Ci0JCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKLQl9CisJQVNTRVJUKGF0b21pY19yZWFkKCZlZmlwLT5lZmlfbmV4dF9leHRlbnQpID49IG5leHRlbnRzKTsKKwlpZiAoYXRvbWljX3N1Yl9hbmRfdGVzdChuZXh0ZW50cywgJmVmaXAtPmVmaV9uZXh0X2V4dGVudCkpCisJCV9feGZzX2VmaV9yZWxlYXNlKGVmaXApOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnNfZWZkX2xvZ19pdGVtICpFRkRfSVRFTShzdHJ1Y3QgeGZzX2xvZ19pdGVtICpsaXApCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5oIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uaAppbmRleCAwZDIyYzU2Li4zNzVmNjhlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5oCisrKyBiL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmgKQEAgLTExMSwxMSArMTExLDEwIEBACiAjZGVmaW5lCVhGU19FRklfTUFYX0ZBU1RfRVhURU5UUwkxNgogCiAvKgotICogRGVmaW5lIEVGSSBmbGFncy4KKyAqIERlZmluZSBFRkkgZmxhZyBiaXRzLiBNYW5pcHVsYXRlZCBieSBzZXQvY2xlYXIvdGVzdF9iaXQgb3BlcmF0b3JzLgogICovCi0jZGVmaW5lCVhGU19FRklfUkVDT1ZFUkVECTB4MQotI2RlZmluZQlYRlNfRUZJX0NPTU1JVFRFRAkweDIKLSNkZWZpbmUJWEZTX0VGSV9DQU5DRUxFRAkweDQKKyNkZWZpbmUJWEZTX0VGSV9SRUNPVkVSRUQJMQorI2RlZmluZQlYRlNfRUZJX0NPTU1JVFRFRAkyCiAKIC8qCiAgKiBUaGlzIGlzIHRoZSAiZXh0ZW50IGZyZWUgaW50ZW50aW9uIiBsb2cgaXRlbS4gIEl0IGlzIHVzZWQKQEAgLTEyNSw4ICsxMjQsOCBAQAogICovCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZWZpX2xvZ19pdGVtIHsKIAl4ZnNfbG9nX2l0ZW1fdAkJZWZpX2l0ZW07Ci0JdWludAkJCWVmaV9mbGFnczsJLyogbWlzYyBmbGFncyAqLwotCXVpbnQJCQllZmlfbmV4dF9leHRlbnQ7CisJYXRvbWljX3QJCWVmaV9uZXh0X2V4dGVudDsKKwl1bnNpZ25lZCBsb25nCQllZmlfZmxhZ3M7CS8qIG1pc2MgZmxhZ3MgKi8KIAl4ZnNfZWZpX2xvZ19mb3JtYXRfdAllZmlfZm9ybWF0OwogfSB4ZnNfZWZpX2xvZ19pdGVtX3Q7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNvcHMuYyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwppbmRleCBhN2MxMTZlLi5mNTZkMzBlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Zzb3BzLmMKKysrIGIvZnMveGZzL3hmc19mc29wcy5jCkBAIC0zNzQsNiArMzc0LDcgQEAKIAkJbXAtPm1fbWF4aWNvdW50ID0gaWNvdW50IDw8IG1wLT5tX3NiLnNiX2lub3BibG9nOwogCX0gZWxzZQogCQltcC0+bV9tYXhpY291bnQgPSAwOworCXhmc19zZXRfbG93X3NwYWNlX3RocmVzaG9sZHMobXApOwogCiAJLyogdXBkYXRlIHNlY29uZGFyeSBzdXBlcmJsb2Nrcy4gKi8KIAlmb3IgKGFnbm8gPSAxOyBhZ25vIDwgbmFnY291bnQ7IGFnbm8rKykgewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pZ2V0LmMgYi9mcy94ZnMveGZzX2lnZXQuYwppbmRleCBkN2RlNWEzLi5jYjliNmQxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lnZXQuYworKysgYi9mcy94ZnMveGZzX2lnZXQuYwpAQCAtNDMsNiArNDMsMTcgQEAKIAogCiAvKgorICogRGVmaW5lIHhmcyBpbm9kZSBpb2xvY2sgbG9ja2RlcCBjbGFzc2VzLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFsbCBhY3RpdmUKKyAqIGlub2RlcyBhcmUgY29uc2lkZXJlZCB0aGUgc2FtZSBmb3IgbG9ja2RlcCBwdXJwb3NlcywgaW5jbHVkaW5nIGlub2RlcyB0aGF0CisgKiBhcmUgcmVjeWNsZWQgdGhyb3VnaCB0aGUgWEZTX0lSRUNMQUlNQUJMRSBzdGF0ZS4gVGhpcyBpcyB0aGUgdGhlIG9ubHkgd2F5IHRvCisgKiBndWFyYW50ZWUgdGhlIGxvY2tzIGFyZSBjb25zaWRlcmVkIHRoZSBzYW1lIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGxvY2sKKyAqIGluaXRpYWxpc2F0aW9uIHNpdGXRlS4gQWxzbywgZGVmaW5lIGEgcmVjbGFpbWFibGUgaW5vZGUgY2xhc3Mgc28gaXQgaXMKKyAqIG9idmlvdXMgaW4gbG9ja2RlcCByZXBvcnRzIHdoaWNoIGNsYXNzIHRoZSByZXBvcnQgaXMgYWdhaW5zdC4KKyAqLworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSB4ZnNfaW9sb2NrX2FjdGl2ZTsKK3N0cnVjdCBsb2NrX2NsYXNzX2tleSB4ZnNfaW9sb2NrX3JlY2xhaW1hYmxlOworCisvKgogICogQWxsb2NhdGUgYW5kIGluaXRpYWxpc2UgYW4geGZzX2lub2RlLgogICovCiBTVEFUSUMgc3RydWN0IHhmc19pbm9kZSAqCkBAIC02OSw4ICs4MCwxMSBAQAogCUFTU0VSVChhdG9taWNfcmVhZCgmaXAtPmlfcGluY291bnQpID09IDApOwogCUFTU0VSVCghc3Bpbl9pc19sb2NrZWQoJmlwLT5pX2ZsYWdzX2xvY2spKTsKIAlBU1NFUlQoY29tcGxldGlvbl9kb25lKCZpcC0+aV9mbHVzaCkpOworCUFTU0VSVChpcC0+aV9pbm8gPT0gMCk7CiAKIAltcmxvY2tfaW5pdCgmaXAtPmlfaW9sb2NrLCBNUkxPQ0tfQkFSUklFUiwgInhmc2lvIiwgaXAtPmlfaW5vKTsKKwlsb2NrZGVwX3NldF9jbGFzc19hbmRfbmFtZSgmaXAtPmlfaW9sb2NrLm1yX2xvY2ssCisJCQkmeGZzX2lvbG9ja19hY3RpdmUsICJ4ZnNfaW9sb2NrX2FjdGl2ZSIpOwogCiAJLyogaW5pdGlhbGlzZSB0aGUgeGZzIGlub2RlICovCiAJaXAtPmlfaW5vID0gaW5vOwpAQCAtODUsOSArOTksNiBAQAogCWlwLT5pX3NpemUgPSAwOwogCWlwLT5pX25ld19zaXplID0gMDsKIAotCS8qIHByZXZlbnQgYW55b25lIGZyb20gdXNpbmcgdGhpcyB5ZXQgKi8KLQlWRlNfSShpcCktPmlfc3RhdGUgPSBJX05FVzsKLQogCXJldHVybiBpcDsKIH0KIApAQCAtMTQ1LDcgKzE1NiwxOCBAQAogCUFTU0VSVCghc3Bpbl9pc19sb2NrZWQoJmlwLT5pX2ZsYWdzX2xvY2spKTsKIAlBU1NFUlQoY29tcGxldGlvbl9kb25lKCZpcC0+aV9mbHVzaCkpOwogCi0JY2FsbF9yY3UoJmlwLT5pX3Zub2RlLmlfcmN1LCB4ZnNfaW5vZGVfZnJlZV9jYWxsYmFjayk7CisJLyoKKwkgKiBCZWNhdXNlIHdlIHVzZSBSQ1UgZnJlZWluZyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgaW5vZGUgYWx3YXlzCisJICogYXBwZWFycyB0byBiZSByZWNsYWltZWQgd2l0aCBhbiBpbnZhbGlkIGlub2RlIG51bWJlciB3aGVuIGluIHRoZQorCSAqIGZyZWUgc3RhdGUuIFRoZSBpcC0+aV9mbGFnc19sb2NrIHByb3ZpZGVzIHRoZSBiYXJyaWVyIGFnYWluc3QgbG9va3VwCisJICogcmFjZXMuCisJICovCisJc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKKwlpcC0+aV9mbGFncyA9IFhGU19JUkVDTEFJTTsKKwlpcC0+aV9pbm8gPSAwOworCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKKworCWNhbGxfcmN1KCZWRlNfSShpcCktPmlfcmN1LCB4ZnNfaW5vZGVfZnJlZV9jYWxsYmFjayk7CiB9CiAKIC8qCkBAIC0xNTUsMTQgKzE3NywyOSBAQAogeGZzX2lnZXRfY2FjaGVfaGl0KAogCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZywKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKKwl4ZnNfaW5vX3QJCWlubywKIAlpbnQJCQlmbGFncywKLQlpbnQJCQlsb2NrX2ZsYWdzKSBfX3JlbGVhc2VzKHBhZy0+cGFnX2ljaV9sb2NrKQorCWludAkJCWxvY2tfZmxhZ3MpIF9fcmVsZWFzZXMoUkNVKQogewogCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gVkZTX0koaXApOwogCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtPmlfbW91bnQ7CiAJaW50CQkJZXJyb3I7CiAKKwkvKgorCSAqIGNoZWNrIGZvciByZS11c2Ugb2YgYW4gaW5vZGUgd2l0aGluIGFuIFJDVSBncmFjZSBwZXJpb2QgZHVlIHRvIHRoZQorCSAqIHJhZGl4IHRyZWUgbm9kZXMgbm90IGJlaW5nIHVwZGF0ZWQgeWV0LiBXZSBtb25pdG9yIGZvciB0aGlzIGJ5CisJICogc2V0dGluZyB0aGUgaW5vZGUgbnVtYmVyIHRvIHplcm8gYmVmb3JlIGZyZWVpbmcgdGhlIGlub2RlIHN0cnVjdHVyZS4KKwkgKiBJZiB0aGUgaW5vZGUgaGFzIGJlZW4gcmVhbGxvY2F0ZWQgYW5kIHNldCB1cCwgdGhlbiB0aGUgaW5vZGUgbnVtYmVyCisJICogd2lsbCBub3QgbWF0Y2gsIHNvIGNoZWNrIGZvciB0aGF0LCB0b28uCisJICovCiAJc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKKwlpZiAoaXAtPmlfaW5vICE9IGlubykgeworCQl0cmFjZV94ZnNfaWdldF9za2lwKGlwKTsKKwkJWEZTX1NUQVRTX0lOQyh4c19pZ19mcmVjeWNsZSk7CisJCWVycm9yID0gRUFHQUlOOworCQlnb3RvIG91dF9lcnJvcjsKKwl9CisKIAogCS8qCiAJICogSWYgd2UgYXJlIHJhY2luZyB3aXRoIGFub3RoZXIgY2FjaGUgaGl0IHRoYXQgaXMgY3VycmVudGx5CkBAIC0yMDUsNyArMjQyLDcgQEAKIAkJaXAtPmlfZmxhZ3MgfD0gWEZTX0lSRUNMQUlNOwogCiAJCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKLQkJcmVhZF91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJZXJyb3IgPSAtaW5vZGVfaW5pdF9hbHdheXMobXAtPm1fc3VwZXIsIGlub2RlKTsKIAkJaWYgKGVycm9yKSB7CkBAIC0yMTMsNyArMjUwLDcgQEAKIAkJCSAqIFJlLWluaXRpYWxpemluZyB0aGUgaW5vZGUgZmFpbGVkLCBhbmQgd2UgYXJlIGluIGRlZXAKIAkJCSAqIHRyb3VibGUuICBUcnkgdG8gcmUtYWRkIGl0IHRvIHRoZSByZWNsYWltIGxpc3QuCiAJCQkgKi8KLQkJCXJlYWRfbG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAogCQkJaXAtPmlfZmxhZ3MgJj0gflhGU19JTkVXOwpAQCAtMjIzLDE0ICsyNjAsMjAgQEAKIAkJCWdvdG8gb3V0X2Vycm9yOwogCQl9CiAKLQkJd3JpdGVfbG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCQlzcGluX2xvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAkJc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAkJaXAtPmlfZmxhZ3MgJj0gfihYRlNfSVJFQ0xBSU1BQkxFIHwgWEZTX0lSRUNMQUlNKTsKIAkJaXAtPmlfZmxhZ3MgfD0gWEZTX0lORVc7CiAJCV9feGZzX2lub2RlX2NsZWFyX3JlY2xhaW1fdGFnKG1wLCBwYWcsIGlwKTsKIAkJaW5vZGUtPmlfc3RhdGUgPSBJX05FVzsKKworCQlBU1NFUlQoIXJ3c2VtX2lzX2xvY2tlZCgmaXAtPmlfaW9sb2NrLm1yX2xvY2spKTsKKwkJbXJsb2NrX2luaXQoJmlwLT5pX2lvbG9jaywgTVJMT0NLX0JBUlJJRVIsICJ4ZnNpbyIsIGlwLT5pX2lubyk7CisJCWxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKCZpcC0+aV9pb2xvY2subXJfbG9jaywKKwkJCQkmeGZzX2lvbG9ja19hY3RpdmUsICJ4ZnNfaW9sb2NrX2FjdGl2ZSIpOworCiAJCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKLQkJd3JpdGVfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CiAJfSBlbHNlIHsKIAkJLyogSWYgdGhlIFZGUyBpbm9kZSBpcyBiZWluZyB0b3JuIGRvd24sIHBhdXNlIGFuZCB0cnkgYWdhaW4uICovCiAJCWlmICghaWdyYWIoaW5vZGUpKSB7CkBAIC0yNDEsNyArMjg0LDcgQEAKIAogCQkvKiBXZSd2ZSBnb3QgYSBsaXZlIG9uZS4gKi8KIAkJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwotCQlyZWFkX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJdHJhY2VfeGZzX2lnZXRfaGl0KGlwKTsKIAl9CiAKQEAgLTI1NSw3ICsyOTgsNyBAQAogCiBvdXRfZXJyb3I6CiAJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwotCXJlYWRfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0zMDgsNyArMzUxLDcgQEAKIAkJCUJVRygpOwogCX0KIAotCXdyaXRlX2xvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKKwlzcGluX2xvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAogCS8qIGluc2VydCB0aGUgbmV3IGlub2RlICovCiAJZXJyb3IgPSByYWRpeF90cmVlX2luc2VydCgmcGFnLT5wYWdfaWNpX3Jvb3QsIGFnaW5vLCBpcCk7CkBAIC0zMjMsMTQgKzM2NiwxNCBAQAogCWlwLT5pX3VkcXVvdCA9IGlwLT5pX2dkcXVvdCA9IE5VTEw7CiAJeGZzX2lmbGFnc19zZXQoaXAsIFhGU19JTkVXKTsKIAotCXdyaXRlX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCXNwaW5fdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CiAJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwogCiAJKmlwcCA9IGlwOwogCXJldHVybiAwOwogCiBvdXRfcHJlbG9hZF9lbmQ6Ci0Jd3JpdGVfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CisJc3Bpbl91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CiAJaWYgKGxvY2tfZmxhZ3MpCiAJCXhmc19pdW5sb2NrKGlwLCBsb2NrX2ZsYWdzKTsKQEAgLTM3Nyw3ICs0MjAsNyBAQAogCXhmc19hZ2lub190CWFnaW5vOwogCiAJLyogcmVqZWN0IGlub2RlIG51bWJlcnMgb3V0c2lkZSBleGlzdGluZyBBR3MgKi8KLQlpZiAoWEZTX0lOT19UT19BR05PKG1wLCBpbm8pID49IG1wLT5tX3NiLnNiX2FnY291bnQpCisJaWYgKCFpbm8gfHwgWEZTX0lOT19UT19BR05PKG1wLCBpbm8pID49IG1wLT5tX3NiLnNiX2FnY291bnQpCiAJCXJldHVybiBFSU5WQUw7CiAKIAkvKiBnZXQgdGhlIHBlcmFnIHN0cnVjdHVyZSBhbmQgZW5zdXJlIHRoYXQgaXQncyBpbm9kZSBjYXBhYmxlICovCkBAIC0zODYsMTUgKzQyOSwxNSBAQAogCiBhZ2FpbjoKIAllcnJvciA9IDA7Ci0JcmVhZF9sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCWlwID0gcmFkaXhfdHJlZV9sb29rdXAoJnBhZy0+cGFnX2ljaV9yb290LCBhZ2lubyk7CiAKIAlpZiAoaXApIHsKLQkJZXJyb3IgPSB4ZnNfaWdldF9jYWNoZV9oaXQocGFnLCBpcCwgZmxhZ3MsIGxvY2tfZmxhZ3MpOworCQllcnJvciA9IHhmc19pZ2V0X2NhY2hlX2hpdChwYWcsIGlwLCBpbm8sIGZsYWdzLCBsb2NrX2ZsYWdzKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXRfZXJyb3Jfb3JfYWdhaW47CiAJfSBlbHNlIHsKLQkJcmVhZF91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCVhGU19TVEFUU19JTkMoeHNfaWdfbWlzc2VkKTsKIAogCQllcnJvciA9IHhmc19pZ2V0X2NhY2hlX21pc3MobXAsIHBhZywgdHAsIGlubywgJmlwLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5jIGIvZnMveGZzL3hmc19pbm9kZS5jCmluZGV4IDEwOGM3YTAuLmJlN2NmNjIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuYworKysgYi9mcy94ZnMveGZzX2lub2RlLmMKQEAgLTg4Nyw3ICs4ODcsNyBAQAogCSAqIGFyb3VuZCBmb3IgYSB3aGlsZS4gIFRoaXMgaGVscHMgdG8ga2VlcCByZWNlbnRseSBhY2Nlc3NlZAogCSAqIG1ldGEtZGF0YSBpbi1jb3JlIGxvbmdlci4KIAkgKi8KLQlYRlNfQlVGX1NFVF9SRUYoYnAsIFhGU19JTk9fUkVGKTsKKwl4ZnNfYnVmX3NldF9yZWYoYnAsIFhGU19JTk9fUkVGKTsKIAogCS8qCiAJICogVXNlIHhmc190cmFuc19icmVsc2UoKSB0byByZWxlYXNlIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUKQEAgLTIwMDAsMTcgKzIwMDAsMzMgQEAKIAkJICovCiAJCWZvciAoaSA9IDA7IGkgPCBuaW5vZGVzOyBpKyspIHsKIHJldHJ5OgotCQkJcmVhZF9sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CisJCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQlpcCA9IHJhZGl4X3RyZWVfbG9va3VwKCZwYWctPnBhZ19pY2lfcm9vdCwKIAkJCQkJWEZTX0lOT19UT19BR0lOTyhtcCwgKGludW0gKyBpKSkpOwogCi0JCQkvKiBJbm9kZSBub3QgaW4gbWVtb3J5IG9yIHN0YWxlLCBub3RoaW5nIHRvIGRvICovCi0JCQlpZiAoIWlwIHx8IHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX0lTVEFMRSkpIHsKLQkJCQlyZWFkX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCQkJLyogSW5vZGUgbm90IGluIG1lbW9yeSwgbm90aGluZyB0byBkbyAqLworCQkJaWYgKCFpcCkgeworCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCiAJCQkvKgorCQkJICogYmVjYXVzZSB0aGlzIGlzIGFuIFJDVSBwcm90ZWN0ZWQgbG9va3VwLCB3ZSBjb3VsZAorCQkJICogZmluZCBhIHJlY2VudGx5IGZyZWVkIG9yIGV2ZW4gcmVhbGxvY2F0ZWQgaW5vZGUKKwkJCSAqIGR1cmluZyB0aGUgbG9va3VwLiBXZSBuZWVkIHRvIGNoZWNrIHVuZGVyIHRoZQorCQkJICogaV9mbGFnc19sb2NrIGZvciBhIHZhbGlkIGlub2RlIGhlcmUuIFNraXAgaXQgaWYgaXQKKwkJCSAqIGlzIG5vdCB2YWxpZCwgdGhlIHdyb25nIGlub2RlIG9yIHN0YWxlLgorCQkJICovCisJCQlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOworCQkJaWYgKGlwLT5pX2lubyAhPSBpbnVtICsgaSB8fAorCQkJICAgIF9feGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfSVNUQUxFKSkgeworCQkJCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKKworCQkJLyoKIAkJCSAqIERvbid0IHRyeSB0byBsb2NrL3VubG9jayB0aGUgY3VycmVudCBpbm9kZSwgYnV0IHdlCiAJCQkgKiBfY2Fubm90XyBza2lwIHRoZSBvdGhlciBpbm9kZXMgdGhhdCB3ZSBkaWQgbm90IGZpbmQKIAkJCSAqIGluIHRoZSBsaXN0IGF0dGFjaGVkIHRvIHRoZSBidWZmZXIgYW5kIGFyZSBub3QKQEAgLTIwMTksMTEgKzIwMzUsMTEgQEAKIAkJCSAqLwogCQkJaWYgKGlwICE9IGZyZWVfaXAgJiYKIAkJCSAgICAheGZzX2lsb2NrX25vd2FpdChpcCwgWEZTX0lMT0NLX0VYQ0wpKSB7Ci0JCQkJcmVhZF91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQlkZWxheSgxKTsKIAkJCQlnb3RvIHJldHJ5OwogCQkJfQotCQkJcmVhZF91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOwogCiAJCQl4ZnNfaWZsb2NrKGlwKTsKIAkJCXhmc19pZmxhZ3Nfc2V0KGlwLCBYRlNfSVNUQUxFKTsKQEAgLTI2MjksNyArMjY0NSw3IEBACiAKIAltYXNrID0gfigoKFhGU19JTk9ERV9DTFVTVEVSX1NJWkUobXApID4+IG1wLT5tX3NiLnNiX2lub2RlbG9nKSkgLSAxKTsKIAlmaXJzdF9pbmRleCA9IFhGU19JTk9fVE9fQUdJTk8obXAsIGlwLT5pX2lubykgJiBtYXNrOwotCXJlYWRfbG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCXJjdV9yZWFkX2xvY2soKTsKIAkvKiByZWFsbHkgbmVlZCBhIGdhbmcgbG9va3VwIHJhbmdlIGNhbGwgaGVyZSAqLwogCW5yX2ZvdW5kID0gcmFkaXhfdHJlZV9nYW5nX2xvb2t1cCgmcGFnLT5wYWdfaWNpX3Jvb3QsICh2b2lkKiopaWxpc3QsCiAJCQkJCWZpcnN0X2luZGV4LCBpbm9kZXNfcGVyX2NsdXN0ZXIpOwpAQCAtMjY0MCw5ICsyNjU2LDIxIEBACiAJCWlxID0gaWxpc3RbaV07CiAJCWlmIChpcSA9PSBpcCkKIAkJCWNvbnRpbnVlOwotCQkvKiBpZiB0aGUgaW5vZGUgbGllcyBvdXRzaWRlIHRoaXMgY2x1c3Rlciwgd2UncmUgZG9uZS4gKi8KLQkJaWYgKChYRlNfSU5PX1RPX0FHSU5PKG1wLCBpcS0+aV9pbm8pICYgbWFzaykgIT0gZmlyc3RfaW5kZXgpCi0JCQlicmVhazsKKworCQkvKgorCQkgKiBiZWNhdXNlIHRoaXMgaXMgYW4gUkNVIHByb3RlY3RlZCBsb29rdXAsIHdlIGNvdWxkIGZpbmQgYQorCQkgKiByZWNlbnRseSBmcmVlZCBvciBldmVuIHJlYWxsb2NhdGVkIGlub2RlIGR1cmluZyB0aGUgbG9va3VwLgorCQkgKiBXZSBuZWVkIHRvIGNoZWNrIHVuZGVyIHRoZSBpX2ZsYWdzX2xvY2sgZm9yIGEgdmFsaWQgaW5vZGUKKwkJICogaGVyZS4gU2tpcCBpdCBpZiBpdCBpcyBub3QgdmFsaWQgb3IgdGhlIHdyb25nIGlub2RlLgorCQkgKi8KKwkJc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKKwkJaWYgKCFpcC0+aV9pbm8gfHwKKwkJICAgIChYRlNfSU5PX1RPX0FHSU5PKG1wLCBpcS0+aV9pbm8pICYgbWFzaykgIT0gZmlyc3RfaW5kZXgpIHsKKwkJCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKKwogCQkvKgogCQkgKiBEbyBhbiB1bi1wcm90ZWN0ZWQgY2hlY2sgdG8gc2VlIGlmIHRoZSBpbm9kZSBpcyBkaXJ0eSBhbmQKIAkJICogaXMgYSBjYW5kaWRhdGUgZm9yIGZsdXNoaW5nLiAgVGhlc2UgY2hlY2tzIHdpbGwgYmUgcmVwZWF0ZWQKQEAgLTI2OTIsNyArMjcyMCw3IEBACiAJfQogCiBvdXRfZnJlZToKLQlyZWFkX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCWttZW1fZnJlZShpbGlzdCk7CiBvdXRfcHV0OgogCXhmc19wZXJhZ19wdXQocGFnKTsKQEAgLTI3MDQsNyArMjczMiw3IEBACiAJICogQ29ycnVwdGlvbiBkZXRlY3RlZCBpbiB0aGUgY2x1c3RlcmluZyBsb29wLiAgSW52YWxpZGF0ZSB0aGUKIAkgKiBpbm9kZSBidWZmZXIgYW5kIHNodXQgZG93biB0aGUgZmlsZXN5c3RlbS4KIAkgKi8KLQlyZWFkX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCS8qCiAJICogQ2xlYW4gdXAgdGhlIGJ1ZmZlci4gIElmIGl0IHdhcyBCX0RFTFdSSSwganVzdCByZWxlYXNlIGl0IC0tCiAJICogYnJlbHNlIGNhbiBoYW5kbGUgaXQgd2l0aCBubyBwcm9ibGVtcy4gIElmIG5vdCwgc2h1dCBkb3duIHRoZQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oCmluZGV4IGZiMmNhMmUuLjVjOTVmYTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaAorKysgYi9mcy94ZnMveGZzX2lub2RlLmgKQEAgLTM3NiwxMiArMzc2LDEzIEBACiAvKgogICogSW4tY29yZSBpbm9kZSBmbGFncy4KICAqLwotI2RlZmluZSBYRlNfSVJFQ0xBSU0gICAgMHgwMDAxICAvKiB3ZSBoYXZlIHN0YXJ0ZWQgcmVjbGFpbWluZyB0aGlzIGlub2RlICAgICovCi0jZGVmaW5lIFhGU19JU1RBTEUJMHgwMDAyCS8qIGlub2RlIGhhcyBiZWVuIHN0YWxlZCAqLwotI2RlZmluZSBYRlNfSVJFQ0xBSU1BQkxFIDB4MDAwNCAvKiBpbm9kZSBjYW4gYmUgcmVjbGFpbWVkICovCi0jZGVmaW5lIFhGU19JTkVXCTB4MDAwOAkvKiBpbm9kZSBoYXMganVzdCBiZWVuIGFsbG9jYXRlZCAqLwotI2RlZmluZSBYRlNfSUZJTEVTVFJFQU0JMHgwMDEwCS8qIGlub2RlIGlzIGluIGEgZmlsZXN0cmVhbSBkaXJlY3RvcnkgKi8KLSNkZWZpbmUgWEZTX0lUUlVOQ0FURUQJMHgwMDIwCS8qIHRydW5jYXRlZCBkb3duIHNvIGZsdXNoLW9uLWNsb3NlICovCisjZGVmaW5lIFhGU19JUkVDTEFJTQkJMHgwMDAxICAvKiBzdGFydGVkIHJlY2xhaW1pbmcgdGhpcyBpbm9kZSAqLworI2RlZmluZSBYRlNfSVNUQUxFCQkweDAwMDIJLyogaW5vZGUgaGFzIGJlZW4gc3RhbGVkICovCisjZGVmaW5lIFhGU19JUkVDTEFJTUFCTEUJMHgwMDA0CS8qIGlub2RlIGNhbiBiZSByZWNsYWltZWQgKi8KKyNkZWZpbmUgWEZTX0lORVcJCTB4MDAwOAkvKiBpbm9kZSBoYXMganVzdCBiZWVuIGFsbG9jYXRlZCAqLworI2RlZmluZSBYRlNfSUZJTEVTVFJFQU0JCTB4MDAxMAkvKiBpbm9kZSBpcyBpbiBhIGZpbGVzdHJlYW0gZGlyZWN0b3J5ICovCisjZGVmaW5lIFhGU19JVFJVTkNBVEVECQkweDAwMjAJLyogdHJ1bmNhdGVkIGRvd24gc28gZmx1c2gtb24tY2xvc2UgKi8KKyNkZWZpbmUgWEZTX0lESVJUWV9SRUxFQVNFCTB4MDA0MAkvKiBkaXJ0eSByZWxlYXNlIGFscmVhZHkgc2VlbiAqLwogCiAvKgogICogRmxhZ3MgZm9yIGlub2RlIGxvY2tpbmcuCkBAIC00MzgsNiArNDM5LDggQEAKICNkZWZpbmUgWEZTX0lPTE9DS19ERVAoZmxhZ3MpCSgoKGZsYWdzKSAmIFhGU19JT0xPQ0tfREVQX01BU0spID4+IFhGU19JT0xPQ0tfU0hJRlQpCiAjZGVmaW5lIFhGU19JTE9DS19ERVAoZmxhZ3MpCSgoKGZsYWdzKSAmIFhGU19JTE9DS19ERVBfTUFTSykgPj4gWEZTX0lMT0NLX1NISUZUKQogCitleHRlcm4gc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHhmc19pb2xvY2tfcmVjbGFpbWFibGU7CisKIC8qCiAgKiBGbGFncyBmb3IgeGZzX2l0cnVuY2F0ZV9zdGFydCgpLgogICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCmluZGV4IDdjOGQzMGMuLmZkNGYzOTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCkBAIC04NDIsMTUgKzg0Miw2NCBAQAogICogZmx1c2hlZCB0byBkaXNrLiAgSXQgaXMgcmVzcG9uc2libGUgZm9yIHJlbW92aW5nIHRoZSBpbm9kZSBpdGVtCiAgKiBmcm9tIHRoZSBBSUwgaWYgaXQgaGFzIG5vdCBiZWVuIHJlLWxvZ2dlZCwgYW5kIHVubG9ja2luZyB0aGUgaW5vZGUncwogICogZmx1c2ggbG9jay4KKyAqCisgKiBUbyByZWR1Y2UgQUlMIGxvY2sgdHJhZmZpYyBhcyBtdWNoIGFzIHBvc3NpYmxlLCB3ZSBzY2FuIHRoZSBidWZmZXIgbG9nIGl0ZW0KKyAqIGxpc3QgZm9yIG90aGVyIGlub2RlcyB0aGF0IHdpbGwgcnVuIHRoaXMgZnVuY3Rpb24uIFdlIHJlbW92ZSB0aGVtIGZyb20gdGhlCisgKiBidWZmZXIgbGlzdCBzbyB3ZSBjYW4gcHJvY2VzcyBhbGwgdGhlIGlub2RlIElPIGNvbXBsZXRpb25zIGluIG9uZSBBSUwgbG9jaworICogdHJhdmVyc2FsLgogICovCiB2b2lkCiB4ZnNfaWZsdXNoX2RvbmUoCiAJc3RydWN0IHhmc19idWYJCSpicCwKIAlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXApCiB7Ci0Jc3RydWN0IHhmc19pbm9kZV9sb2dfaXRlbSAqaWlwID0gSU5PREVfSVRFTShsaXApOwotCXhmc19pbm9kZV90CQkqaXAgPSBpaXAtPmlsaV9pbm9kZTsKKwlzdHJ1Y3QgeGZzX2lub2RlX2xvZ19pdGVtICppaXA7CisJc3RydWN0IHhmc19sb2dfaXRlbQkqYmxpcDsKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpuZXh0OworCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKnByZXY7CiAJc3RydWN0IHhmc19haWwJCSphaWxwID0gbGlwLT5saV9haWxwOworCWludAkJCW5lZWRfYWlsID0gMDsKKworCS8qCisJICogU2NhbiB0aGUgYnVmZmVyIElPIGNvbXBsZXRpb25zIGZvciBvdGhlciBpbm9kZXMgYmVpbmcgY29tcGxldGVkIGFuZAorCSAqIGF0dGFjaCB0aGVtIHRvIHRoZSBjdXJyZW50IGlub2RlIGxvZyBpdGVtLgorCSAqLworCWJsaXAgPSBYRlNfQlVGX0ZTUFJJVkFURShicCwgeGZzX2xvZ19pdGVtX3QgKik7CisJcHJldiA9IE5VTEw7CisJd2hpbGUgKGJsaXAgIT0gTlVMTCkgeworCQlpZiAobGlwLT5saV9jYiAhPSB4ZnNfaWZsdXNoX2RvbmUpIHsKKwkJCXByZXYgPSBibGlwOworCQkJYmxpcCA9IGJsaXAtPmxpX2Jpb19saXN0OworCQkJY29udGludWU7CisJCX0KKworCQkvKiByZW1vdmUgZnJvbSBsaXN0ICovCisJCW5leHQgPSBibGlwLT5saV9iaW9fbGlzdDsKKwkJaWYgKCFwcmV2KSB7CisJCQlYRlNfQlVGX1NFVF9GU1BSSVZBVEUoYnAsIG5leHQpOworCQl9IGVsc2UgeworCQkJcHJldi0+bGlfYmlvX2xpc3QgPSBuZXh0OworCQl9CisKKwkJLyogYWRkIHRvIGN1cnJlbnQgbGlzdCAqLworCQlibGlwLT5saV9iaW9fbGlzdCA9IGxpcC0+bGlfYmlvX2xpc3Q7CisJCWxpcC0+bGlfYmlvX2xpc3QgPSBibGlwOworCisJCS8qCisJCSAqIHdoaWxlIHdlIGhhdmUgdGhlIGl0ZW0sIGRvIHRoZSB1bmxvY2tlZCBjaGVjayBmb3IgbmVlZGluZworCQkgKiB0aGUgQUlMIGxvY2suCisJCSAqLworCQlpaXAgPSBJTk9ERV9JVEVNKGJsaXApOworCQlpZiAoaWlwLT5pbGlfbG9nZ2VkICYmIGJsaXAtPmxpX2xzbiA9PSBpaXAtPmlsaV9mbHVzaF9sc24pCisJCQluZWVkX2FpbCsrOworCisJCWJsaXAgPSBuZXh0OworCX0KKworCS8qIG1ha2Ugc3VyZSB3ZSBjYXB0dXJlIHRoZSBzdGF0ZSBvZiB0aGUgaW5pdGlhbCBpbm9kZS4gKi8KKwlpaXAgPSBJTk9ERV9JVEVNKGxpcCk7CisJaWYgKGlpcC0+aWxpX2xvZ2dlZCAmJiBsaXAtPmxpX2xzbiA9PSBpaXAtPmlsaV9mbHVzaF9sc24pCisJCW5lZWRfYWlsKys7CiAKIAkvKgogCSAqIFdlIG9ubHkgd2FudCB0byBwdWxsIHRoZSBpdGVtIGZyb20gdGhlIEFJTCBpZiBpdCBpcwpAQCAtODYxLDI4ICs5MTAsMzcgQEAKIAkgKiB0aGUgbG9jayBzaW5jZSBpdCdzIGNoZWFwZXIsIGFuZCB0aGVuIHdlIHJlY2hlY2sgd2hpbGUKIAkgKiBob2xkaW5nIHRoZSBsb2NrIGJlZm9yZSByZW1vdmluZyB0aGUgaW5vZGUgZnJvbSB0aGUgQUlMLgogCSAqLwotCWlmIChpaXAtPmlsaV9sb2dnZWQgJiYgbGlwLT5saV9sc24gPT0gaWlwLT5pbGlfZmx1c2hfbHNuKSB7CisJaWYgKG5lZWRfYWlsKSB7CisJCXN0cnVjdCB4ZnNfbG9nX2l0ZW0gKmxvZ19pdGVtc1tuZWVkX2FpbF07CisJCWludCBpID0gMDsKIAkJc3Bpbl9sb2NrKCZhaWxwLT54YV9sb2NrKTsKLQkJaWYgKGxpcC0+bGlfbHNuID09IGlpcC0+aWxpX2ZsdXNoX2xzbikgewotCQkJLyogeGZzX3RyYW5zX2FpbF9kZWxldGUoKSBkcm9wcyB0aGUgQUlMIGxvY2suICovCi0JCQl4ZnNfdHJhbnNfYWlsX2RlbGV0ZShhaWxwLCBsaXApOwotCQl9IGVsc2UgewotCQkJc3Bpbl91bmxvY2soJmFpbHAtPnhhX2xvY2spOworCQlmb3IgKGJsaXAgPSBsaXA7IGJsaXA7IGJsaXAgPSBibGlwLT5saV9iaW9fbGlzdCkgeworCQkJaWlwID0gSU5PREVfSVRFTShibGlwKTsKKwkJCWlmIChpaXAtPmlsaV9sb2dnZWQgJiYKKwkJCSAgICBibGlwLT5saV9sc24gPT0gaWlwLT5pbGlfZmx1c2hfbHNuKSB7CisJCQkJbG9nX2l0ZW1zW2krK10gPSBibGlwOworCQkJfQorCQkJQVNTRVJUKGkgPD0gbmVlZF9haWwpOwogCQl9CisJCS8qIHhmc190cmFuc19haWxfZGVsZXRlX2J1bGsoKSBkcm9wcyB0aGUgQUlMIGxvY2suICovCisJCXhmc190cmFuc19haWxfZGVsZXRlX2J1bGsoYWlscCwgbG9nX2l0ZW1zLCBpKTsKIAl9CiAKLQlpaXAtPmlsaV9sb2dnZWQgPSAwOwogCiAJLyoKLQkgKiBDbGVhciB0aGUgaWxpX2xhc3RfZmllbGRzIGJpdHMgbm93IHRoYXQgd2Uga25vdyB0aGF0IHRoZQotCSAqIGRhdGEgY29ycmVzcG9uZGluZyB0byB0aGVtIGlzIHNhZmVseSBvbiBkaXNrLgorCSAqIGNsZWFuIHVwIGFuZCB1bmxvY2sgdGhlIGZsdXNoIGxvY2sgbm93IHdlIGFyZSBkb25lLiBXZSBjYW4gY2xlYXIgdGhlCisJICogaWxpX2xhc3RfZmllbGRzIGJpdHMgbm93IHRoYXQgd2Uga25vdyB0aGF0IHRoZSBkYXRhIGNvcnJlc3BvbmRpbmcgdG8KKwkgKiB0aGVtIGlzIHNhZmVseSBvbiBkaXNrLgogCSAqLwotCWlpcC0+aWxpX2xhc3RfZmllbGRzID0gMDsKKwlmb3IgKGJsaXAgPSBsaXA7IGJsaXA7IGJsaXAgPSBuZXh0KSB7CisJCW5leHQgPSBibGlwLT5saV9iaW9fbGlzdDsKKwkJYmxpcC0+bGlfYmlvX2xpc3QgPSBOVUxMOwogCi0JLyoKLQkgKiBSZWxlYXNlIHRoZSBpbm9kZSdzIGZsdXNoIGxvY2sgc2luY2Ugd2UncmUgZG9uZSB3aXRoIGl0LgotCSAqLwotCXhmc19pZnVubG9jayhpcCk7CisJCWlpcCA9IElOT0RFX0lURU0oYmxpcCk7CisJCWlpcC0+aWxpX2xvZ2dlZCA9IDA7CisJCWlpcC0+aWxpX2xhc3RfZmllbGRzID0gMDsKKwkJeGZzX2lmdW5sb2NrKGlpcC0+aWxpX2lub2RlKTsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmMgYi9mcy94ZnMveGZzX2lvbWFwLmMKaW5kZXggMjA1NzYxNC4uNTU1ODJiZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb21hcC5jCisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwpAQCAtNDcsMTI3ICs0Nyw4IEBACiAKICNkZWZpbmUgWEZTX1dSSVRFSU9fQUxJR04obXAsb2ZmKQkoKChvZmYpID4+IG1wLT5tX3dyaXRlaW9fbG9nKSBcCiAJCQkJCQk8PCBtcC0+bV93cml0ZWlvX2xvZykKLSNkZWZpbmUgWEZTX1NUUkFUX1dSSVRFX0lNQVBTCTIKICNkZWZpbmUgWEZTX1dSSVRFX0lNQVBTCQlYRlNfQk1BUF9NQVhfTk1BUAogCi1TVEFUSUMgaW50IHhmc19pb21hcF93cml0ZV9kaXJlY3Qoc3RydWN0IHhmc19pbm9kZSAqLCB4ZnNfb2ZmX3QsIHNpemVfdCwKLQkJCQkgIGludCwgc3RydWN0IHhmc19ibWJ0X2lyZWMgKiwgaW50ICopOwotU1RBVElDIGludCB4ZnNfaW9tYXBfd3JpdGVfZGVsYXkoc3RydWN0IHhmc19pbm9kZSAqLCB4ZnNfb2ZmX3QsIHNpemVfdCwgaW50LAotCQkJCSBzdHJ1Y3QgeGZzX2JtYnRfaXJlYyAqLCBpbnQgKik7Ci1TVEFUSUMgaW50IHhmc19pb21hcF93cml0ZV9hbGxvY2F0ZShzdHJ1Y3QgeGZzX2lub2RlICosIHhmc19vZmZfdCwgc2l6ZV90LAotCQkJCXN0cnVjdCB4ZnNfYm1idF9pcmVjICosIGludCAqKTsKLQotaW50Ci14ZnNfaW9tYXAoCi0Jc3RydWN0IHhmc19pbm9kZQkqaXAsCi0JeGZzX29mZl90CQlvZmZzZXQsCi0Jc3NpemVfdAkJCWNvdW50LAotCWludAkJCWZsYWdzLAotCXN0cnVjdCB4ZnNfYm1idF9pcmVjCSppbWFwLAotCWludAkJCSpuaW1hcHMsCi0JaW50CQkJKm5ldykKLXsKLQlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OwotCXhmc19maWxlb2ZmX3QJCW9mZnNldF9mc2IsIGVuZF9mc2I7Ci0JaW50CQkJZXJyb3IgPSAwOwotCWludAkJCWxvY2ttb2RlID0gMDsKLQlpbnQJCQlibWFwaV9mbGFncyA9IDA7Ci0KLQlBU1NFUlQoKGlwLT5pX2QuZGlfbW9kZSAmIFNfSUZNVCkgPT0gU19JRlJFRyk7Ci0KLQkqbmV3ID0gMDsKLQotCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKLQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCi0JdHJhY2VfeGZzX2lvbWFwX2VudGVyKGlwLCBvZmZzZXQsIGNvdW50LCBmbGFncywgTlVMTCk7Ci0KLQlzd2l0Y2ggKGZsYWdzICYgKEJNQVBJX1JFQUQgfCBCTUFQSV9XUklURSB8IEJNQVBJX0FMTE9DQVRFKSkgewotCWNhc2UgQk1BUElfUkVBRDoKLQkJbG9ja21vZGUgPSB4ZnNfaWxvY2tfbWFwX3NoYXJlZChpcCk7Ci0JCWJtYXBpX2ZsYWdzID0gWEZTX0JNQVBJX0VOVElSRTsKLQkJYnJlYWs7Ci0JY2FzZSBCTUFQSV9XUklURToKLQkJbG9ja21vZGUgPSBYRlNfSUxPQ0tfRVhDTDsKLQkJaWYgKGZsYWdzICYgQk1BUElfSUdOU1RBVEUpCi0JCQlibWFwaV9mbGFncyB8PSBYRlNfQk1BUElfSUdTVEFURXxYRlNfQk1BUElfRU5USVJFOwotCQl4ZnNfaWxvY2soaXAsIGxvY2ttb2RlKTsKLQkJYnJlYWs7Ci0JY2FzZSBCTUFQSV9BTExPQ0FURToKLQkJbG9ja21vZGUgPSBYRlNfSUxPQ0tfU0hBUkVEOwotCQlibWFwaV9mbGFncyA9IFhGU19CTUFQSV9FTlRJUkU7Ci0KLQkJLyogQXR0ZW1wdCBub24tYmxvY2tpbmcgbG9jayAqLwotCQlpZiAoZmxhZ3MgJiBCTUFQSV9UUllMT0NLKSB7Ci0JCQlpZiAoIXhmc19pbG9ja19ub3dhaXQoaXAsIGxvY2ttb2RlKSkKLQkJCQlyZXR1cm4gWEZTX0VSUk9SKEVBR0FJTik7Ci0JCX0gZWxzZSB7Ci0JCQl4ZnNfaWxvY2soaXAsIGxvY2ttb2RlKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9Ci0KLQlBU1NFUlQob2Zmc2V0IDw9IG1wLT5tX21heGlvZmZzZXQpOwotCWlmICgoeGZzX2ZzaXplX3Qpb2Zmc2V0ICsgY291bnQgPiBtcC0+bV9tYXhpb2Zmc2V0KQotCQljb3VudCA9IG1wLT5tX21heGlvZmZzZXQgLSBvZmZzZXQ7Ci0JZW5kX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgKHhmc191ZnNpemVfdClvZmZzZXQgKyBjb3VudCk7Ci0Jb2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIG9mZnNldCk7Ci0KLQllcnJvciA9IHhmc19ibWFwaShOVUxMLCBpcCwgb2Zmc2V0X2ZzYiwKLQkJCSh4ZnNfZmlsYmxrc190KShlbmRfZnNiIC0gb2Zmc2V0X2ZzYiksCi0JCQlibWFwaV9mbGFncywgIE5VTEwsIDAsIGltYXAsCi0JCQluaW1hcHMsIE5VTEwpOwotCi0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQotCXN3aXRjaCAoZmxhZ3MgJiAoQk1BUElfV1JJVEV8Qk1BUElfQUxMT0NBVEUpKSB7Ci0JY2FzZSBCTUFQSV9XUklURToKLQkJLyogSWYgd2UgZm91bmQgYW4gZXh0ZW50LCByZXR1cm4gaXQgKi8KLQkJaWYgKCpuaW1hcHMgJiYKLQkJICAgIChpbWFwLT5icl9zdGFydGJsb2NrICE9IEhPTEVTVEFSVEJMT0NLKSAmJgotCQkgICAgKGltYXAtPmJyX3N0YXJ0YmxvY2sgIT0gREVMQVlTVEFSVEJMT0NLKSkgewotCQkJdHJhY2VfeGZzX2lvbWFwX2ZvdW5kKGlwLCBvZmZzZXQsIGNvdW50LCBmbGFncywgaW1hcCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChmbGFncyAmIEJNQVBJX0RJUkVDVCkgewotCQkJZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVfZGlyZWN0KGlwLCBvZmZzZXQsIGNvdW50LCBmbGFncywKLQkJCQkJCSAgICAgICBpbWFwLCBuaW1hcHMpOwotCQl9IGVsc2UgewotCQkJZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVfZGVsYXkoaXAsIG9mZnNldCwgY291bnQsIGZsYWdzLAotCQkJCQkJICAgICAgaW1hcCwgbmltYXBzKTsKLQkJfQotCQlpZiAoIWVycm9yKSB7Ci0JCQl0cmFjZV94ZnNfaW9tYXBfYWxsb2MoaXAsIG9mZnNldCwgY291bnQsIGZsYWdzLCBpbWFwKTsKLQkJfQotCQkqbmV3ID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBCTUFQSV9BTExPQ0FURToKLQkJLyogSWYgd2UgZm91bmQgYW4gZXh0ZW50LCByZXR1cm4gaXQgKi8KLQkJeGZzX2l1bmxvY2soaXAsIGxvY2ttb2RlKTsKLQkJbG9ja21vZGUgPSAwOwotCi0JCWlmICgqbmltYXBzICYmICFpc251bGxzdGFydGJsb2NrKGltYXAtPmJyX3N0YXJ0YmxvY2spKSB7Ci0JCQl0cmFjZV94ZnNfaW9tYXBfZm91bmQoaXAsIG9mZnNldCwgY291bnQsIGZsYWdzLCBpbWFwKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVfYWxsb2NhdGUoaXAsIG9mZnNldCwgY291bnQsCi0JCQkJCQkgaW1hcCwgbmltYXBzKTsKLQkJYnJlYWs7Ci0JfQotCi0JQVNTRVJUKCpuaW1hcHMgPD0gMSk7Ci0KLW91dDoKLQlpZiAobG9ja21vZGUpCi0JCXhmc19pdW5sb2NrKGlwLCBsb2NrbW9kZSk7Ci0JcmV0dXJuIFhGU19FUlJPUihlcnJvcik7Ci19Ci0KIFNUQVRJQyBpbnQKIHhmc19pb21hcF9lb2ZfYWxpZ25fbGFzdF9mc2IoCiAJeGZzX21vdW50X3QJKm1wLApAQCAtMjM2LDE0ICsxMTcsMTMgQEAKIAlyZXR1cm4gRUZTQ09SUlVQVEVEOwogfQogCi1TVEFUSUMgaW50CitpbnQKIHhmc19pb21hcF93cml0ZV9kaXJlY3QoCiAJeGZzX2lub2RlX3QJKmlwLAogCXhmc19vZmZfdAlvZmZzZXQsCiAJc2l6ZV90CQljb3VudCwKLQlpbnQJCWZsYWdzLAogCXhmc19ibWJ0X2lyZWNfdCAqaW1hcCwKLQlpbnQJCSpubWFwcykKKwlpbnQJCW5tYXBzKQogewogCXhmc19tb3VudF90CSptcCA9IGlwLT5pX21vdW50OwogCXhmc19maWxlb2ZmX3QJb2Zmc2V0X2ZzYjsKQEAgLTI3OSw3ICsxNTksNyBAQAogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGVycm9yX291dDsKIAl9IGVsc2UgewotCQlpZiAoKm5tYXBzICYmIChpbWFwLT5icl9zdGFydGJsb2NrID09IEhPTEVTVEFSVEJMT0NLKSkKKwkJaWYgKG5tYXBzICYmIChpbWFwLT5icl9zdGFydGJsb2NrID09IEhPTEVTVEFSVEJMT0NLKSkKIAkJCWxhc3RfZnNiID0gTUlOKGxhc3RfZnNiLCAoeGZzX2ZpbGVvZmZfdCkKIAkJCQkJaW1hcC0+YnJfYmxvY2tjb3VudCArCiAJCQkJCWltYXAtPmJyX3N0YXJ0b2ZmKTsKQEAgLTMzMSw3ICsyMTEsNyBAQAogCXhmc190cmFuc19pam9pbih0cCwgaXApOwogCiAJYm1hcGlfZmxhZyA9IFhGU19CTUFQSV9XUklURTsKLQlpZiAoKGZsYWdzICYgQk1BUElfRElSRUNUKSAmJiAob2Zmc2V0IDwgaXAtPmlfc2l6ZSB8fCBleHRzeikpCisJaWYgKG9mZnNldCA8IGlwLT5pX3NpemUgfHwgZXh0c3opCiAJCWJtYXBpX2ZsYWcgfD0gWEZTX0JNQVBJX1BSRUFMTE9DOwogCiAJLyoKQEAgLTM3MCw3ICsyNTAsNiBAQAogCQlnb3RvIGVycm9yX291dDsKIAl9CiAKLQkqbm1hcHMgPSAxOwogCXJldHVybiAwOwogCiBlcnJvcjA6CS8qIENhbmNlbCBibWFwLCB1bmxvY2sgaW5vZGUsIHVucmVzZXJ2ZSBxdW90YSBibG9ja3MsIGNhbmNlbCB0cmFucyAqLwpAQCAtMzc5LDcgKzI1OCw2IEBACiAKIGVycm9yMToJLyogSnVzdCBjYW5jZWwgdHJhbnNhY3Rpb24gKi8KIAl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTIHwgWEZTX1RSQU5TX0FCT1JUKTsKLQkqbm1hcHMgPSAwOwkvKiBub3RoaW5nIHNldC11cCBoZXJlICovCiAKIGVycm9yX291dDoKIAlyZXR1cm4gWEZTX0VSUk9SKGVycm9yKTsKQEAgLTM4OSw2ICsyNjcsOSBAQAogICogSWYgdGhlIGNhbGxlciBpcyBkb2luZyBhIHdyaXRlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIHRoZW4gZXh0ZW5kIHRoZQogICogYWxsb2NhdGlvbiBvdXQgdG8gdGhlIGZpbGUgc3lzdGVtJ3Mgd3JpdGUgaW9zaXplLiAgV2UgY2xlYW4gdXAgYW55IGV4dHJhCiAgKiBzcGFjZSBsZWZ0IG92ZXIgd2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQgaW4geGZzX2luYWN0aXZlKCkuCisgKgorICogSWYgd2UgZmluZCB3ZSBhbHJlYWR5IGhhdmUgZGVsYWxsb2MgcHJlYWxsb2NhdGlvbiBiZXlvbmQgRU9GLCBkb24ndCBkbyBtb3JlCisgKiBwcmVhbGxvY2F0aW9uIGFzIGl0IGl0IG5vdCBuZWVkZWQuCiAgKi8KIFNUQVRJQyBpbnQKIHhmc19pb21hcF9lb2Zfd2FudF9wcmVhbGxvY2F0ZSgKQEAgLTM5Niw3ICsyNzcsNiBAQAogCXhmc19pbm9kZV90CSppcCwKIAl4ZnNfb2ZmX3QJb2Zmc2V0LAogCXNpemVfdAkJY291bnQsCi0JaW50CQlpb2ZsYWcsCiAJeGZzX2JtYnRfaXJlY190ICppbWFwLAogCWludAkJbmltYXBzLAogCWludAkJKnByZWFsbG9jKQpAQCAtNDA1LDYgKzI4NSw3IEBACiAJeGZzX2ZpbGJsa3NfdCAgIGNvdW50X2ZzYjsKIAl4ZnNfZnNibG9ja190CWZpcnN0YmxvY2s7CiAJaW50CQluLCBlcnJvciwgaW1hcHM7CisJaW50CQlmb3VuZF9kZWxhbGxvYyA9IDA7CiAKIAkqcHJlYWxsb2MgPSAwOwogCWlmICgob2Zmc2V0ICsgY291bnQpIDw9IGlwLT5pX3NpemUpCkBAIC00MjksMjAgKzMxMCw2NiBAQAogCQkJCXJldHVybiAwOwogCQkJc3RhcnRfZnNiICs9IGltYXBbbl0uYnJfYmxvY2tjb3VudDsKIAkJCWNvdW50X2ZzYiAtPSBpbWFwW25dLmJyX2Jsb2NrY291bnQ7CisKKwkJCWlmIChpbWFwW25dLmJyX3N0YXJ0YmxvY2sgPT0gREVMQVlTVEFSVEJMT0NLKQorCQkJCWZvdW5kX2RlbGFsbG9jID0gMTsKIAkJfQogCX0KLQkqcHJlYWxsb2MgPSAxOworCWlmICghZm91bmRfZGVsYWxsb2MpCisJCSpwcmVhbGxvYyA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKLVNUQVRJQyBpbnQKKy8qCisgKiBJZiB3ZSBkb24ndCBoYXZlIGEgdXNlciBzcGVjaWZpZWQgcHJlYWxsb2NhdGlvbiBzaXplLCBkeW5hbWljYWxseSBpbmNyZWFzZQorICogdGhlIHByZWFsbG9jYXRpb24gc2l6ZSBhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBncm93cy4gQ2FwIHRoZSBtYXhpbXVtIHNpemUKKyAqIGF0IGEgc2luZ2xlIGV4dGVudCBvciBsZXNzIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG5lYXIgZnVsbC4gVGhlIGNsb3NlciB0aGUKKyAqIGZpbGVzeXN0ZW0gaXMgdG8gZnVsbCwgdGhlIHNtYWxsZXIgdGhlIG1heGltdW0gcHJlYWxvY2F0aW9uLgorICovCitTVEFUSUMgeGZzX2ZzYmxvY2tfdAoreGZzX2lvbWFwX3ByZWFsbG9jX3NpemUoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19pbm9kZQkqaXApCit7CisJeGZzX2ZzYmxvY2tfdAkJYWxsb2NfYmxvY2tzID0gMDsKKworCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0RGTFRfSU9TSVpFKSkgeworCQlpbnQgc2hpZnQgPSAwOworCQlpbnQ2NF90IGZyZWVzcDsKKworCQlhbGxvY19ibG9ja3MgPSBYRlNfQl9UT19GU0IobXAsIGlwLT5pX3NpemUpOworCQlhbGxvY19ibG9ja3MgPSBYRlNfRklMRU9GRl9NSU4oTUFYRVhUTEVOLAorCQkJCQlyb3VuZGRvd25fcG93X29mX3R3byhhbGxvY19ibG9ja3MpKTsKKworCQl4ZnNfaWNzYl9zeW5jX2NvdW50ZXJzKG1wLCBYRlNfSUNTQl9MQVpZX0NPVU5UKTsKKwkJZnJlZXNwID0gbXAtPm1fc2Iuc2JfZmRibG9ja3M7CisJCWlmIChmcmVlc3AgPCBtcC0+bV9sb3dfc3BhY2VbWEZTX0xPV1NQXzVfUENOVF0pIHsKKwkJCXNoaWZ0ID0gMjsKKwkJCWlmIChmcmVlc3AgPCBtcC0+bV9sb3dfc3BhY2VbWEZTX0xPV1NQXzRfUENOVF0pCisJCQkJc2hpZnQrKzsKKwkJCWlmIChmcmVlc3AgPCBtcC0+bV9sb3dfc3BhY2VbWEZTX0xPV1NQXzNfUENOVF0pCisJCQkJc2hpZnQrKzsKKwkJCWlmIChmcmVlc3AgPCBtcC0+bV9sb3dfc3BhY2VbWEZTX0xPV1NQXzJfUENOVF0pCisJCQkJc2hpZnQrKzsKKwkJCWlmIChmcmVlc3AgPCBtcC0+bV9sb3dfc3BhY2VbWEZTX0xPV1NQXzFfUENOVF0pCisJCQkJc2hpZnQrKzsKKwkJfQorCQlpZiAoc2hpZnQpCisJCQlhbGxvY19ibG9ja3MgPj49IHNoaWZ0OworCX0KKworCWlmIChhbGxvY19ibG9ja3MgPCBtcC0+bV93cml0ZWlvX2Jsb2NrcykKKwkJYWxsb2NfYmxvY2tzID0gbXAtPm1fd3JpdGVpb19ibG9ja3M7CisKKwlyZXR1cm4gYWxsb2NfYmxvY2tzOworfQorCitpbnQKIHhmc19pb21hcF93cml0ZV9kZWxheSgKIAl4ZnNfaW5vZGVfdAkqaXAsCiAJeGZzX29mZl90CW9mZnNldCwKIAlzaXplX3QJCWNvdW50LAotCWludAkJaW9mbGFnLAotCXhmc19ibWJ0X2lyZWNfdCAqcmV0X2ltYXAsCi0JaW50CQkqbm1hcHMpCisJeGZzX2JtYnRfaXJlY190ICpyZXRfaW1hcCkKIHsKIAl4ZnNfbW91bnRfdAkqbXAgPSBpcC0+aV9tb3VudDsKIAl4ZnNfZmlsZW9mZl90CW9mZnNldF9mc2I7CkBAIC00NjksMTYgKzM5NiwxOSBAQAogCWV4dHN6ID0geGZzX2dldF9leHRzel9oaW50KGlwKTsKIAlvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgb2Zmc2V0KTsKIAorCiAJZXJyb3IgPSB4ZnNfaW9tYXBfZW9mX3dhbnRfcHJlYWxsb2NhdGUobXAsIGlwLCBvZmZzZXQsIGNvdW50LAotCQkJCWlvZmxhZywgaW1hcCwgWEZTX1dSSVRFX0lNQVBTLCAmcHJlYWxsb2MpOworCQkJCWltYXAsIFhGU19XUklURV9JTUFQUywgJnByZWFsbG9jKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAogcmV0cnk6CiAJaWYgKHByZWFsbG9jKSB7CisJCXhmc19mc2Jsb2NrX3QJYWxsb2NfYmxvY2tzID0geGZzX2lvbWFwX3ByZWFsbG9jX3NpemUobXAsIGlwKTsKKwogCQlhbGlnbmVkX29mZnNldCA9IFhGU19XUklURUlPX0FMSUdOKG1wLCAob2Zmc2V0ICsgY291bnQgLSAxKSk7CiAJCWlvYWxpZ24gPSBYRlNfQl9UT19GU0JUKG1wLCBhbGlnbmVkX29mZnNldCk7Ci0JCWxhc3RfZnNiID0gaW9hbGlnbiArIG1wLT5tX3dyaXRlaW9fYmxvY2tzOworCQlsYXN0X2ZzYiA9IGlvYWxpZ24gKyBhbGxvY19ibG9ja3M7CiAJfSBlbHNlIHsKIAkJbGFzdF9mc2IgPSBYRlNfQl9UT19GU0IobXAsICgoeGZzX3Vmc2l6ZV90KShvZmZzZXQgKyBjb3VudCkpKTsKIAl9CkBAIC00OTYsMjIgKzQyNiwzMSBAQAogCQkJICBYRlNfQk1BUElfREVMQVkgfCBYRlNfQk1BUElfV1JJVEUgfAogCQkJICBYRlNfQk1BUElfRU5USVJFLCAmZmlyc3RibG9jaywgMSwgaW1hcCwKIAkJCSAgJm5pbWFwcywgTlVMTCk7Ci0JaWYgKGVycm9yICYmIChlcnJvciAhPSBFTk9TUEMpKQorCXN3aXRjaCAoZXJyb3IpIHsKKwljYXNlIDA6CisJY2FzZSBFTk9TUEM6CisJY2FzZSBFRFFVT1Q6CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJldHVybiBYRlNfRVJST1IoZXJyb3IpOworCX0KIAogCS8qCi0JICogSWYgYm1hcGkgcmV0dXJuZWQgdXMgbm90aGluZywgYW5kIGlmIHdlIGRpZG4ndCBnZXQgYmFjayBFRFFVT1QsCi0JICogdGhlbiB3ZSBtdXN0IGhhdmUgcnVuIG91dCBvZiBzcGFjZSAtIGZsdXNoIGFsbCBvdGhlciBpbm9kZXMgd2l0aAotCSAqIGRlbGFsbG9jIGJsb2NrcyBhbmQgcmV0cnkgd2l0aG91dCBFT0YgcHJlYWxsb2NhdGlvbi4KKwkgKiBJZiBibWFwaSByZXR1cm5lZCB1cyBub3RoaW5nLCB3ZSBnb3QgZWl0aGVyIEVOT1NQQyBvciBFRFFVT1QuICBGb3IKKwkgKiBFTk9TUEMsICogZmx1c2ggYWxsIG90aGVyIGlub2RlcyB3aXRoIGRlbGFsbG9jIGJsb2NrcyB0byBmcmVlIHVwCisJICogc29tZSBvZiB0aGUgZXhjZXNzIHJlc2VydmVkIG1ldGFkYXRhIHNwYWNlLiBGb3IgYm90aCBjYXNlcywgcmV0cnkKKwkgKiB3aXRob3V0IEVPRiBwcmVhbGxvY2F0aW9uLgogCSAqLwogCWlmIChuaW1hcHMgPT0gMCkgewogCQl0cmFjZV94ZnNfZGVsYWxsb2NfZW5vc3BjKGlwLCBvZmZzZXQsIGNvdW50KTsKIAkJaWYgKGZsdXNoZWQpCi0JCQlyZXR1cm4gWEZTX0VSUk9SKEVOT1NQQyk7CisJCQlyZXR1cm4gWEZTX0VSUk9SKGVycm9yID8gZXJyb3IgOiBFTk9TUEMpOwogCi0JCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCXhmc19mbHVzaF9pbm9kZXMoaXApOwotCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwkJaWYgKGVycm9yID09IEVOT1NQQykgeworCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwkJCXhmc19mbHVzaF9pbm9kZXMoaXApOworCQkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJCX0KIAogCQlmbHVzaGVkID0gMTsKIAkJZXJyb3IgPSAwOwpAQCAtNTIzLDggKzQ2Miw2IEBACiAJCXJldHVybiB4ZnNfY21uX2Vycl9mc2Jsb2NrX3plcm8oaXAsICZpbWFwWzBdKTsKIAogCSpyZXRfaW1hcCA9IGltYXBbMF07Ci0JKm5tYXBzID0gMTsKLQogCXJldHVybiAwOwogfQogCkBAIC01MzgsMTMgKzQ3NSwxMiBAQAogICogV2Ugbm8gbG9uZ2VyIGJvdGhlciB0byBsb29rIGF0IHRoZSBpbmNvbWluZyBtYXAgLSBhbGwgd2UgaGF2ZSB0bwogICogZ3VhcmFudGVlIGlzIHRoYXQgd2hhdGV2ZXIgd2UgYWxsb2NhdGUgZmlsbHMgdGhlIHJlcXVpcmVkIHJhbmdlLgogICovCi1TVEFUSUMgaW50CitpbnQKIHhmc19pb21hcF93cml0ZV9hbGxvY2F0ZSgKIAl4ZnNfaW5vZGVfdAkqaXAsCiAJeGZzX29mZl90CW9mZnNldCwKIAlzaXplX3QJCWNvdW50LAotCXhmc19ibWJ0X2lyZWNfdCAqaW1hcCwKLQlpbnQJCSpyZXRtYXApCisJeGZzX2JtYnRfaXJlY190ICppbWFwKQogewogCXhmc19tb3VudF90CSptcCA9IGlwLT5pX21vdW50OwogCXhmc19maWxlb2ZmX3QJb2Zmc2V0X2ZzYiwgbGFzdF9ibG9jazsKQEAgLTU1Nyw4ICs0OTMsNiBAQAogCWludAkJZXJyb3IgPSAwOwogCWludAkJbnJlczsKIAotCSpyZXRtYXAgPSAwOwotCiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgZHF1b3RzIGFyZSB0aGVyZS4KIAkgKi8KQEAgLTY4MCw3ICs2MTQsNiBAQAogCQlpZiAoKG9mZnNldF9mc2IgPj0gaW1hcC0+YnJfc3RhcnRvZmYpICYmCiAJCSAgICAob2Zmc2V0X2ZzYiA8IChpbWFwLT5icl9zdGFydG9mZiArCiAJCQkJICAgaW1hcC0+YnJfYmxvY2tjb3VudCkpKSB7Ci0JCQkqcmV0bWFwID0gMTsKIAkJCVhGU19TVEFUU19JTkMoeHNfeHN0cmF0X3F1aWNrKTsKIAkJCXJldHVybiAwOwogCQl9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmggYi9mcy94ZnMveGZzX2lvbWFwLmgKaW5kZXggNzc0OGE0My4uODA2MTU3NiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb21hcC5oCisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuaApAQCAtMTgsMzAgKzE4LDE1IEBACiAjaWZuZGVmIF9fWEZTX0lPTUFQX0hfXwogI2RlZmluZSBfX1hGU19JT01BUF9IX18KIAotLyogYmFzZSBleHRlbnQgbWFuaXB1bGF0aW9uIGNhbGxzICovCi0jZGVmaW5lIEJNQVBJX1JFQUQJKDEgPDwgMCkJLyogcmVhZCBleHRlbnRzICovCi0jZGVmaW5lIEJNQVBJX1dSSVRFCSgxIDw8IDEpCS8qIGNyZWF0ZSBleHRlbnRzICovCi0jZGVmaW5lIEJNQVBJX0FMTE9DQVRFCSgxIDw8IDIpCS8qIGRlbGF5ZWQgYWxsb2NhdGUgdG8gcmVhbCBleHRlbnRzICovCi0KLS8qIG1vZGlmaWVycyAqLwotI2RlZmluZSBCTUFQSV9JR05TVEFURQkoMSA8PCA0KQkvKiBpZ25vcmUgdW53cml0dGVuIHN0YXRlIG9uIHJlYWQgKi8KLSNkZWZpbmUgQk1BUElfRElSRUNUCSgxIDw8IDUpCS8qIGRpcmVjdCBpbnN0ZWFkIG9mIGJ1ZmZlcmVkIHdyaXRlICovCi0jZGVmaW5lIEJNQVBJX01NQQkoMSA8PCA2KQkvKiBhbGxvY2F0ZSBmb3IgbW1hcCB3cml0ZSAqLwotI2RlZmluZSBCTUFQSV9UUllMT0NLCSgxIDw8IDcpCS8qIG5vbi1ibG9ja2luZyByZXF1ZXN0ICovCi0KLSNkZWZpbmUgQk1BUElfRkxBR1MgXAotCXsgQk1BUElfUkVBRCwJCSJSRUFEIiB9LCBcCi0JeyBCTUFQSV9XUklURSwJCSJXUklURSIgfSwgXAotCXsgQk1BUElfQUxMT0NBVEUsCSJBTExPQ0FURSIgfSwgXAotCXsgQk1BUElfSUdOU1RBVEUsCSJJR05TVEFURSIgfSwgXAotCXsgQk1BUElfRElSRUNULAkJIkRJUkVDVCIgfSwgXAotCXsgQk1BUElfVFJZTE9DSywJIlRSWUxPQ0siIH0KLQogc3RydWN0IHhmc19pbm9kZTsKIHN0cnVjdCB4ZnNfYm1idF9pcmVjOwogCi1leHRlcm4gaW50IHhmc19pb21hcChzdHJ1Y3QgeGZzX2lub2RlICosIHhmc19vZmZfdCwgc3NpemVfdCwgaW50LAotCQkgICAgIHN0cnVjdCB4ZnNfYm1idF9pcmVjICosIGludCAqLCBpbnQgKik7CitleHRlcm4gaW50IHhmc19pb21hcF93cml0ZV9kaXJlY3Qoc3RydWN0IHhmc19pbm9kZSAqLCB4ZnNfb2ZmX3QsIHNpemVfdCwKKwkJCXN0cnVjdCB4ZnNfYm1idF9pcmVjICosIGludCk7CitleHRlcm4gaW50IHhmc19pb21hcF93cml0ZV9kZWxheShzdHJ1Y3QgeGZzX2lub2RlICosIHhmc19vZmZfdCwgc2l6ZV90LAorCQkJc3RydWN0IHhmc19ibWJ0X2lyZWMgKik7CitleHRlcm4gaW50IHhmc19pb21hcF93cml0ZV9hbGxvY2F0ZShzdHJ1Y3QgeGZzX2lub2RlICosIHhmc19vZmZfdCwgc2l6ZV90LAorCQkJc3RydWN0IHhmc19ibWJ0X2lyZWMgKik7CiBleHRlcm4gaW50IHhmc19pb21hcF93cml0ZV91bndyaXR0ZW4oc3RydWN0IHhmc19pbm9kZSAqLCB4ZnNfb2ZmX3QsIHNpemVfdCk7CiAKICNlbmRpZiAvKiBfX1hGU19JT01BUF9IX18qLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuYyBiL2ZzL3hmcy94ZnNfbG9nLmMKaW5kZXggY2VlNGFiOS4uMGJmMjRiMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuYworKysgYi9mcy94ZnMveGZzX2xvZy5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJCQkJeGZzX2J1ZnRhcmdfdAkqbG9nX3RhcmdldCwKIAkJCQl4ZnNfZGFkZHJfdAlibGtfb2Zmc2V0LAogCQkJCWludAkJbnVtX2JibGtzKTsKLVNUQVRJQyBpbnQJIHhsb2dfc3BhY2VfbGVmdCh4bG9nX3QgKmxvZywgaW50IGN5Y2xlLCBpbnQgYnl0ZXMpOworU1RBVElDIGludAkgeGxvZ19zcGFjZV9sZWZ0KHN0cnVjdCBsb2cgKmxvZywgYXRvbWljNjRfdCAqaGVhZCk7CiBTVEFUSUMgaW50CSB4bG9nX3N5bmMoeGxvZ190ICpsb2csIHhsb2dfaW5fY29yZV90ICppY2xvZyk7CiBTVEFUSUMgdm9pZAkgeGxvZ19kZWFsbG9jX2xvZyh4bG9nX3QgKmxvZyk7CiAKQEAgLTcwLDcgKzcwLDcgQEAKIC8qIGxvY2FsIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIGdyYW50IGhlYWQgKi8KIFNUQVRJQyBpbnQgIHhsb2dfZ3JhbnRfbG9nX3NwYWNlKHhsb2dfdAkJKmxvZywKIAkJCQkgeGxvZ190aWNrZXRfdAkqeHRpYyk7Ci1TVEFUSUMgdm9pZCB4bG9nX2dyYW50X3B1c2hfYWlsKHhmc19tb3VudF90CSptcCwKK1NUQVRJQyB2b2lkIHhsb2dfZ3JhbnRfcHVzaF9haWwoc3RydWN0IGxvZwkqbG9nLAogCQkJCWludAkJbmVlZF9ieXRlcyk7CiBTVEFUSUMgdm9pZCB4bG9nX3JlZ3JhbnRfcmVzZXJ2ZV9sb2dfc3BhY2UoeGxvZ190CSAqbG9nLAogCQkJCQkgICB4bG9nX3RpY2tldF90ICp0aWNrZXQpOwpAQCAtODEsOTggKzgxLDczIEBACiAKICNpZiBkZWZpbmVkKERFQlVHKQogU1RBVElDIHZvaWQJeGxvZ192ZXJpZnlfZGVzdF9wdHIoeGxvZ190ICpsb2csIGNoYXIgKnB0cik7Ci1TVEFUSUMgdm9pZAl4bG9nX3ZlcmlmeV9ncmFudF9oZWFkKHhsb2dfdCAqbG9nLCBpbnQgZXF1YWxzKTsKK1NUQVRJQyB2b2lkCXhsb2dfdmVyaWZ5X2dyYW50X3RhaWwoc3RydWN0IGxvZyAqbG9nKTsKIFNUQVRJQyB2b2lkCXhsb2dfdmVyaWZ5X2ljbG9nKHhsb2dfdCAqbG9nLCB4bG9nX2luX2NvcmVfdCAqaWNsb2csCiAJCQkJICBpbnQgY291bnQsIGJvb2xlYW5fdCBzeW5jaW5nKTsKIFNUQVRJQyB2b2lkCXhsb2dfdmVyaWZ5X3RhaWxfbHNuKHhsb2dfdCAqbG9nLCB4bG9nX2luX2NvcmVfdCAqaWNsb2csCiAJCQkJICAgICB4ZnNfbHNuX3QgdGFpbF9sc24pOwogI2Vsc2UKICNkZWZpbmUgeGxvZ192ZXJpZnlfZGVzdF9wdHIoYSxiKQotI2RlZmluZSB4bG9nX3ZlcmlmeV9ncmFudF9oZWFkKGEsYikKKyNkZWZpbmUgeGxvZ192ZXJpZnlfZ3JhbnRfdGFpbChhKQogI2RlZmluZSB4bG9nX3ZlcmlmeV9pY2xvZyhhLGIsYyxkKQogI2RlZmluZSB4bG9nX3ZlcmlmeV90YWlsX2xzbihhLGIsYykKICNlbmRpZgogCiBTVEFUSUMgaW50CXhsb2dfaWNsb2dzX2VtcHR5KHhsb2dfdCAqbG9nKTsKIAotCiBzdGF0aWMgdm9pZAoteGxvZ19pbnNfdGlja2V0cShzdHJ1Y3QgeGxvZ190aWNrZXQgKipxcCwgc3RydWN0IHhsb2dfdGlja2V0ICp0aWMpCit4bG9nX2dyYW50X3N1Yl9zcGFjZSgKKwlzdHJ1Y3QgbG9nCSpsb2csCisJYXRvbWljNjRfdAkqaGVhZCwKKwlpbnQJCWJ5dGVzKQogewotCWlmICgqcXApIHsKLQkJdGljLT50X25leHQJICAgID0gKCpxcCk7Ci0JCXRpYy0+dF9wcmV2CSAgICA9ICgqcXApLT50X3ByZXY7Ci0JCSgqcXApLT50X3ByZXYtPnRfbmV4dCA9IHRpYzsKLQkJKCpxcCktPnRfcHJldgkgICAgPSB0aWM7Ci0JfSBlbHNlIHsKLQkJdGljLT50X3ByZXYgPSB0aWMtPnRfbmV4dCA9IHRpYzsKLQkJKnFwID0gdGljOwotCX0KKwlpbnQ2NF90CWhlYWRfdmFsID0gYXRvbWljNjRfcmVhZChoZWFkKTsKKwlpbnQ2NF90IG5ldywgb2xkOwogCi0JdGljLT50X2ZsYWdzIHw9IFhMT0dfVElDX0lOX1E7CisJZG8geworCQlpbnQJY3ljbGUsIHNwYWNlOworCisJCXhsb2dfY3JhY2tfZ3JhbnRfaGVhZF92YWwoaGVhZF92YWwsICZjeWNsZSwgJnNwYWNlKTsKKworCQlzcGFjZSAtPSBieXRlczsKKwkJaWYgKHNwYWNlIDwgMCkgeworCQkJc3BhY2UgKz0gbG9nLT5sX2xvZ3NpemU7CisJCQljeWNsZS0tOworCQl9CisKKwkJb2xkID0gaGVhZF92YWw7CisJCW5ldyA9IHhsb2dfYXNzaWduX2dyYW50X2hlYWRfdmFsKGN5Y2xlLCBzcGFjZSk7CisJCWhlYWRfdmFsID0gYXRvbWljNjRfY21weGNoZyhoZWFkLCBvbGQsIG5ldyk7CisJfSB3aGlsZSAoaGVhZF92YWwgIT0gb2xkKTsKIH0KIAogc3RhdGljIHZvaWQKLXhsb2dfZGVsX3RpY2tldHEoc3RydWN0IHhsb2dfdGlja2V0ICoqcXAsIHN0cnVjdCB4bG9nX3RpY2tldCAqdGljKQoreGxvZ19ncmFudF9hZGRfc3BhY2UoCisJc3RydWN0IGxvZwkqbG9nLAorCWF0b21pYzY0X3QJKmhlYWQsCisJaW50CQlieXRlcykKIHsKLQlpZiAodGljID09IHRpYy0+dF9uZXh0KSB7Ci0JCSpxcCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJKnFwID0gdGljLT50X25leHQ7Ci0JCXRpYy0+dF9uZXh0LT50X3ByZXYgPSB0aWMtPnRfcHJldjsKLQkJdGljLT50X3ByZXYtPnRfbmV4dCA9IHRpYy0+dF9uZXh0OwotCX0KKwlpbnQ2NF90CWhlYWRfdmFsID0gYXRvbWljNjRfcmVhZChoZWFkKTsKKwlpbnQ2NF90IG5ldywgb2xkOwogCi0JdGljLT50X25leHQgPSB0aWMtPnRfcHJldiA9IE5VTEw7Ci0JdGljLT50X2ZsYWdzICY9IH5YTE9HX1RJQ19JTl9ROwotfQorCWRvIHsKKwkJaW50CQl0bXA7CisJCWludAkJY3ljbGUsIHNwYWNlOwogCi1zdGF0aWMgdm9pZAoteGxvZ19ncmFudF9zdWJfc3BhY2Uoc3RydWN0IGxvZyAqbG9nLCBpbnQgYnl0ZXMpCi17Ci0JbG9nLT5sX2dyYW50X3dyaXRlX2J5dGVzIC09IGJ5dGVzOwotCWlmIChsb2ctPmxfZ3JhbnRfd3JpdGVfYnl0ZXMgPCAwKSB7Ci0JCWxvZy0+bF9ncmFudF93cml0ZV9ieXRlcyArPSBsb2ctPmxfbG9nc2l6ZTsKLQkJbG9nLT5sX2dyYW50X3dyaXRlX2N5Y2xlLS07Ci0JfQorCQl4bG9nX2NyYWNrX2dyYW50X2hlYWRfdmFsKGhlYWRfdmFsLCAmY3ljbGUsICZzcGFjZSk7CiAKLQlsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9ieXRlcyAtPSBieXRlczsKLQlpZiAoKGxvZyktPmxfZ3JhbnRfcmVzZXJ2ZV9ieXRlcyA8IDApIHsKLQkJbG9nLT5sX2dyYW50X3Jlc2VydmVfYnl0ZXMgKz0gbG9nLT5sX2xvZ3NpemU7Ci0JCWxvZy0+bF9ncmFudF9yZXNlcnZlX2N5Y2xlLS07Ci0JfQorCQl0bXAgPSBsb2ctPmxfbG9nc2l6ZSAtIHNwYWNlOworCQlpZiAodG1wID4gYnl0ZXMpCisJCQlzcGFjZSArPSBieXRlczsKKwkJZWxzZSB7CisJCQlzcGFjZSA9IGJ5dGVzIC0gdG1wOworCQkJY3ljbGUrKzsKKwkJfQogCi19Ci0KLXN0YXRpYyB2b2lkCi14bG9nX2dyYW50X2FkZF9zcGFjZV93cml0ZShzdHJ1Y3QgbG9nICpsb2csIGludCBieXRlcykKLXsKLQlpbnQgdG1wID0gbG9nLT5sX2xvZ3NpemUgLSBsb2ctPmxfZ3JhbnRfd3JpdGVfYnl0ZXM7Ci0JaWYgKHRtcCA+IGJ5dGVzKQotCQlsb2ctPmxfZ3JhbnRfd3JpdGVfYnl0ZXMgKz0gYnl0ZXM7Ci0JZWxzZSB7Ci0JCWxvZy0+bF9ncmFudF93cml0ZV9jeWNsZSsrOwotCQlsb2ctPmxfZ3JhbnRfd3JpdGVfYnl0ZXMgPSBieXRlcyAtIHRtcDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi14bG9nX2dyYW50X2FkZF9zcGFjZV9yZXNlcnZlKHN0cnVjdCBsb2cgKmxvZywgaW50IGJ5dGVzKQotewotCWludCB0bXAgPSBsb2ctPmxfbG9nc2l6ZSAtIGxvZy0+bF9ncmFudF9yZXNlcnZlX2J5dGVzOwotCWlmICh0bXAgPiBieXRlcykKLQkJbG9nLT5sX2dyYW50X3Jlc2VydmVfYnl0ZXMgKz0gYnl0ZXM7Ci0JZWxzZSB7Ci0JCWxvZy0+bF9ncmFudF9yZXNlcnZlX2N5Y2xlKys7Ci0JCWxvZy0+bF9ncmFudF9yZXNlcnZlX2J5dGVzID0gYnl0ZXMgLSB0bXA7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXhsb2dfZ3JhbnRfYWRkX3NwYWNlKHN0cnVjdCBsb2cgKmxvZywgaW50IGJ5dGVzKQotewotCXhsb2dfZ3JhbnRfYWRkX3NwYWNlX3dyaXRlKGxvZywgYnl0ZXMpOwotCXhsb2dfZ3JhbnRfYWRkX3NwYWNlX3Jlc2VydmUobG9nLCBieXRlcyk7CisJCW9sZCA9IGhlYWRfdmFsOworCQluZXcgPSB4bG9nX2Fzc2lnbl9ncmFudF9oZWFkX3ZhbChjeWNsZSwgc3BhY2UpOworCQloZWFkX3ZhbCA9IGF0b21pYzY0X2NtcHhjaGcoaGVhZCwgb2xkLCBuZXcpOworCX0gd2hpbGUgKGhlYWRfdmFsICE9IG9sZCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zNTUsNyArMzMwLDcgQEAKIAogCQl0cmFjZV94ZnNfbG9nX3Jlc2VydmUobG9nLCBpbnRlcm5hbF90aWNrZXQpOwogCi0JCXhsb2dfZ3JhbnRfcHVzaF9haWwobXAsIGludGVybmFsX3RpY2tldC0+dF91bml0X3Jlcyk7CisJCXhsb2dfZ3JhbnRfcHVzaF9haWwobG9nLCBpbnRlcm5hbF90aWNrZXQtPnRfdW5pdF9yZXMpOwogCQlyZXR2YWwgPSB4bG9nX3JlZ3JhbnRfd3JpdGVfbG9nX3NwYWNlKGxvZywgaW50ZXJuYWxfdGlja2V0KTsKIAl9IGVsc2UgewogCQkvKiBtYXkgc2xlZXAgaWYgbmVlZCB0byBhbGxvY2F0ZSBtb3JlIHRpY2tldHMgKi8KQEAgLTM2OSw3ICszNDQsNyBAQAogCiAJCXRyYWNlX3hmc19sb2dfcmVzZXJ2ZShsb2csIGludGVybmFsX3RpY2tldCk7CiAKLQkJeGxvZ19ncmFudF9wdXNoX2FpbChtcCwKKwkJeGxvZ19ncmFudF9wdXNoX2FpbChsb2csCiAJCQkJICAgIChpbnRlcm5hbF90aWNrZXQtPnRfdW5pdF9yZXMgKgogCQkJCSAgICAgaW50ZXJuYWxfdGlja2V0LT50X2NudCkpOwogCQlyZXR2YWwgPSB4bG9nX2dyYW50X2xvZ19zcGFjZShsb2csIGludGVybmFsX3RpY2tldCk7CkBAIC01ODQsOCArNTU5LDggQEAKIAkJaWYgKCEoaWNsb2ctPmljX3N0YXRlID09IFhMT0dfU1RBVEVfQUNUSVZFIHx8CiAJCSAgICAgIGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX0RJUlRZKSkgewogCQkJaWYgKCFYTE9HX0ZPUkNFRF9TSFVURE9XTihsb2cpKSB7Ci0JCQkJc3Zfd2FpdCgmaWNsb2ctPmljX2ZvcmNlX3dhaXQsIFBNRU0sCi0JCQkJCSZsb2ctPmxfaWNsb2dsb2NrLCBzKTsKKwkJCQl4bG9nX3dhaXQoJmljbG9nLT5pY19mb3JjZV93YWl0LAorCQkJCQkJCSZsb2ctPmxfaWNsb2dsb2NrKTsKIAkJCX0gZWxzZSB7CiAJCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCQkJfQpAQCAtNjI1LDggKzYwMCw4IEBACiAJCQl8fCBpY2xvZy0+aWNfc3RhdGUgPT0gWExPR19TVEFURV9ESVJUWQogCQkJfHwgaWNsb2ctPmljX3N0YXRlID09IFhMT0dfU1RBVEVfSU9FUlJPUikgKSB7CiAKLQkJCQlzdl93YWl0KCZpY2xvZy0+aWNfZm9yY2Vfd2FpdCwgUE1FTSwKLQkJCQkJJmxvZy0+bF9pY2xvZ2xvY2ssIHMpOworCQkJCXhsb2dfd2FpdCgmaWNsb2ctPmljX2ZvcmNlX3dhaXQsCisJCQkJCQkJJmxvZy0+bF9pY2xvZ2xvY2spOwogCQl9IGVsc2UgewogCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCQl9CkBAIC03MDMsNTUgKzY3OCw0NiBAQAogewogCXhsb2dfdGlja2V0X3QJKnRpYzsKIAl4bG9nX3QJCSpsb2cgPSBtcC0+bV9sb2c7Ci0JaW50CQluZWVkX2J5dGVzLCBmcmVlX2J5dGVzLCBjeWNsZSwgYnl0ZXM7CisJaW50CQluZWVkX2J5dGVzLCBmcmVlX2J5dGVzOwogCiAJaWYgKFhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykpCiAJCXJldHVybjsKIAotCWlmICh0YWlsX2xzbiA9PSAwKSB7Ci0JCS8qIG5lZWRlZCBzaW5jZSBzeW5jX2xzbiBpcyA2NCBiaXRzICovCi0JCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7Ci0JCXRhaWxfbHNuID0gbG9nLT5sX2xhc3Rfc3luY19sc247Ci0JCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLQl9CisJaWYgKHRhaWxfbHNuID09IDApCisJCXRhaWxfbHNuID0gYXRvbWljNjRfcmVhZCgmbG9nLT5sX2xhc3Rfc3luY19sc24pOwogCi0Jc3Bpbl9sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7CisJLyogdGFpbF9sc24gPT0gMSBpbXBsaWVzIHRoYXQgd2Ugd2VyZW4ndCBwYXNzZWQgYSB2YWxpZCB2YWx1ZS4gICovCisJaWYgKHRhaWxfbHNuICE9IDEpCisJCWF0b21pYzY0X3NldCgmbG9nLT5sX3RhaWxfbHNuLCB0YWlsX2xzbik7CiAKLQkvKiBBbHNvIGFuIGludmFsaWQgbHNuLiAgMSBpbXBsaWVzIHRoYXQgd2UgYXJlbid0IHBhc3NpbmcgaW4gYSB2YWxpZAotCSAqIHRhaWxfbHNuLgotCSAqLwotCWlmICh0YWlsX2xzbiAhPSAxKSB7Ci0JCWxvZy0+bF90YWlsX2xzbiA9IHRhaWxfbHNuOwotCX0KLQotCWlmICgodGljID0gbG9nLT5sX3dyaXRlX2hlYWRxKSkgeworCWlmICghbGlzdF9lbXB0eV9jYXJlZnVsKCZsb2ctPmxfd3JpdGVxKSkgewogI2lmZGVmIERFQlVHCiAJCWlmIChsb2ctPmxfZmxhZ3MgJiBYTE9HX0FDVElWRV9SRUNPVkVSWSkKIAkJCXBhbmljKCJSZWNvdmVyeSBwcm9ibGVtIik7CiAjZW5kaWYKLQkJY3ljbGUgPSBsb2ctPmxfZ3JhbnRfd3JpdGVfY3ljbGU7Ci0JCWJ5dGVzID0gbG9nLT5sX2dyYW50X3dyaXRlX2J5dGVzOwotCQlmcmVlX2J5dGVzID0geGxvZ19zcGFjZV9sZWZ0KGxvZywgY3ljbGUsIGJ5dGVzKTsKLQkJZG8geworCQlzcGluX2xvY2soJmxvZy0+bF9ncmFudF93cml0ZV9sb2NrKTsKKwkJZnJlZV9ieXRlcyA9IHhsb2dfc3BhY2VfbGVmdChsb2csICZsb2ctPmxfZ3JhbnRfd3JpdGVfaGVhZCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodGljLCAmbG9nLT5sX3dyaXRlcSwgdF9xdWV1ZSkgewogCQkJQVNTRVJUKHRpYy0+dF9mbGFncyAmIFhMT0dfVElDX1BFUk1fUkVTRVJWKTsKIAogCQkJaWYgKGZyZWVfYnl0ZXMgPCB0aWMtPnRfdW5pdF9yZXMgJiYgdGFpbF9sc24gIT0gMSkKIAkJCQlicmVhazsKIAkJCXRhaWxfbHNuID0gMDsKIAkJCWZyZWVfYnl0ZXMgLT0gdGljLT50X3VuaXRfcmVzOwotCQkJc3Zfc2lnbmFsKCZ0aWMtPnRfd2FpdCk7Ci0JCQl0aWMgPSB0aWMtPnRfbmV4dDsKLQkJfSB3aGlsZSAodGljICE9IGxvZy0+bF93cml0ZV9oZWFkcSk7CisJCQl0cmFjZV94ZnNfbG9nX3JlZ3JhbnRfd3JpdGVfd2FrZV91cChsb2csIHRpYyk7CisJCQl3YWtlX3VwKCZ0aWMtPnRfd2FpdCk7CisJCX0KKwkJc3Bpbl91bmxvY2soJmxvZy0+bF9ncmFudF93cml0ZV9sb2NrKTsKIAl9Ci0JaWYgKCh0aWMgPSBsb2ctPmxfcmVzZXJ2ZV9oZWFkcSkpIHsKKworCWlmICghbGlzdF9lbXB0eV9jYXJlZnVsKCZsb2ctPmxfcmVzZXJ2ZXEpKSB7CiAjaWZkZWYgREVCVUcKIAkJaWYgKGxvZy0+bF9mbGFncyAmIFhMT0dfQUNUSVZFX1JFQ09WRVJZKQogCQkJcGFuaWMoIlJlY292ZXJ5IHByb2JsZW0iKTsKICNlbmRpZgotCQljeWNsZSA9IGxvZy0+bF9ncmFudF9yZXNlcnZlX2N5Y2xlOwotCQlieXRlcyA9IGxvZy0+bF9ncmFudF9yZXNlcnZlX2J5dGVzOwotCQlmcmVlX2J5dGVzID0geGxvZ19zcGFjZV9sZWZ0KGxvZywgY3ljbGUsIGJ5dGVzKTsKLQkJZG8geworCQlzcGluX2xvY2soJmxvZy0+bF9ncmFudF9yZXNlcnZlX2xvY2spOworCQlmcmVlX2J5dGVzID0geGxvZ19zcGFjZV9sZWZ0KGxvZywgJmxvZy0+bF9ncmFudF9yZXNlcnZlX2hlYWQpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRpYywgJmxvZy0+bF9yZXNlcnZlcSwgdF9xdWV1ZSkgewogCQkJaWYgKHRpYy0+dF9mbGFncyAmIFhMT0dfVElDX1BFUk1fUkVTRVJWKQogCQkJCW5lZWRfYnl0ZXMgPSB0aWMtPnRfdW5pdF9yZXMqdGljLT50X2NudDsKIAkJCWVsc2UKQEAgLTc2MCwxMiArNzI2LDEyIEBACiAJCQkJYnJlYWs7CiAJCQl0YWlsX2xzbiA9IDA7CiAJCQlmcmVlX2J5dGVzIC09IG5lZWRfYnl0ZXM7Ci0JCQlzdl9zaWduYWwoJnRpYy0+dF93YWl0KTsKLQkJCXRpYyA9IHRpYy0+dF9uZXh0OwotCQl9IHdoaWxlICh0aWMgIT0gbG9nLT5sX3Jlc2VydmVfaGVhZHEpOworCQkJdHJhY2VfeGZzX2xvZ19ncmFudF93YWtlX3VwKGxvZywgdGljKTsKKwkJCXdha2VfdXAoJnRpYy0+dF93YWl0KTsKKwkJfQorCQlzcGluX3VubG9jaygmbG9nLT5sX2dyYW50X3Jlc2VydmVfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7Ci19CS8qIHhmc19sb2dfbW92ZV90YWlsICovCit9CiAKIC8qCiAgKiBEZXRlcm1pbmUgaWYgd2UgaGF2ZSBhIHRyYW5zYWN0aW9uIHRoYXQgaGFzIGdvbmUgdG8gZGlzawpAQCAtODMxLDIzICs3OTcsMTkgQEAKICAqIFdlIG1heSBiZSBob2xkaW5nIHRoZSBsb2cgaWNsb2cgbG9jayB1cG9uIGVudGVyaW5nIHRoaXMgcm91dGluZS4KICAqLwogeGZzX2xzbl90Ci14bG9nX2Fzc2lnbl90YWlsX2xzbih4ZnNfbW91bnRfdCAqbXApCit4bG9nX2Fzc2lnbl90YWlsX2xzbigKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCkKIHsKLQl4ZnNfbHNuX3QgdGFpbF9sc247Ci0JeGxvZ190CSAgKmxvZyA9IG1wLT5tX2xvZzsKKwl4ZnNfbHNuX3QJCXRhaWxfbHNuOworCXN0cnVjdCBsb2cJCSpsb2cgPSBtcC0+bV9sb2c7CiAKIAl0YWlsX2xzbiA9IHhmc190cmFuc19haWxfdGFpbChtcC0+bV9haWwpOwotCXNwaW5fbG9jaygmbG9nLT5sX2dyYW50X2xvY2spOwotCWlmICh0YWlsX2xzbiAhPSAwKSB7Ci0JCWxvZy0+bF90YWlsX2xzbiA9IHRhaWxfbHNuOwotCX0gZWxzZSB7Ci0JCXRhaWxfbHNuID0gbG9nLT5sX3RhaWxfbHNuID0gbG9nLT5sX2xhc3Rfc3luY19sc247Ci0JfQotCXNwaW5fdW5sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7CisJaWYgKCF0YWlsX2xzbikKKwkJdGFpbF9sc24gPSBhdG9taWM2NF9yZWFkKCZsb2ctPmxfbGFzdF9zeW5jX2xzbik7CiAKKwlhdG9taWM2NF9zZXQoJmxvZy0+bF90YWlsX2xzbiwgdGFpbF9sc24pOwogCXJldHVybiB0YWlsX2xzbjsKLX0JLyogeGxvZ19hc3NpZ25fdGFpbF9sc24gKi8KLQorfQogCiAvKgogICogUmV0dXJuIHRoZSBzcGFjZSBpbiB0aGUgbG9nIGJldHdlZW4gdGhlIHRhaWwgYW5kIHRoZSBoZWFkLiAgVGhlIGhlYWQKQEAgLTg2NCwyMSArODI2LDI2IEBACiAgKiByZXN1bHQgaXMgdGhhdCB3ZSByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGxvZyBhcyB0aGUgYW1vdW50IG9mIHNwYWNlIGxlZnQuCiAgKi8KIFNUQVRJQyBpbnQKLXhsb2dfc3BhY2VfbGVmdCh4bG9nX3QgKmxvZywgaW50IGN5Y2xlLCBpbnQgYnl0ZXMpCit4bG9nX3NwYWNlX2xlZnQoCisJc3RydWN0IGxvZwkqbG9nLAorCWF0b21pYzY0X3QJKmhlYWQpCiB7Ci0JaW50IGZyZWVfYnl0ZXM7Ci0JaW50IHRhaWxfYnl0ZXM7Ci0JaW50IHRhaWxfY3ljbGU7CisJaW50CQlmcmVlX2J5dGVzOworCWludAkJdGFpbF9ieXRlczsKKwlpbnQJCXRhaWxfY3ljbGU7CisJaW50CQloZWFkX2N5Y2xlOworCWludAkJaGVhZF9ieXRlczsKIAotCXRhaWxfYnl0ZXMgPSBCQlRPQihCTE9DS19MU04obG9nLT5sX3RhaWxfbHNuKSk7Ci0JdGFpbF9jeWNsZSA9IENZQ0xFX0xTTihsb2ctPmxfdGFpbF9sc24pOwotCWlmICgodGFpbF9jeWNsZSA9PSBjeWNsZSkgJiYgKGJ5dGVzID49IHRhaWxfYnl0ZXMpKSB7Ci0JCWZyZWVfYnl0ZXMgPSBsb2ctPmxfbG9nc2l6ZSAtIChieXRlcyAtIHRhaWxfYnl0ZXMpOwotCX0gZWxzZSBpZiAoKHRhaWxfY3ljbGUgKyAxKSA8IGN5Y2xlKSB7CisJeGxvZ19jcmFja19ncmFudF9oZWFkKGhlYWQsICZoZWFkX2N5Y2xlLCAmaGVhZF9ieXRlcyk7CisJeGxvZ19jcmFja19hdG9taWNfbHNuKCZsb2ctPmxfdGFpbF9sc24sICZ0YWlsX2N5Y2xlLCAmdGFpbF9ieXRlcyk7CisJdGFpbF9ieXRlcyA9IEJCVE9CKHRhaWxfYnl0ZXMpOworCWlmICh0YWlsX2N5Y2xlID09IGhlYWRfY3ljbGUgJiYgaGVhZF9ieXRlcyA+PSB0YWlsX2J5dGVzKQorCQlmcmVlX2J5dGVzID0gbG9nLT5sX2xvZ3NpemUgLSAoaGVhZF9ieXRlcyAtIHRhaWxfYnl0ZXMpOworCWVsc2UgaWYgKHRhaWxfY3ljbGUgKyAxIDwgaGVhZF9jeWNsZSkKIAkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmICh0YWlsX2N5Y2xlIDwgY3ljbGUpIHsKLQkJQVNTRVJUKHRhaWxfY3ljbGUgPT0gKGN5Y2xlIC0gMSkpOwotCQlmcmVlX2J5dGVzID0gdGFpbF9ieXRlcyAtIGJ5dGVzOworCWVsc2UgaWYgKHRhaWxfY3ljbGUgPCBoZWFkX2N5Y2xlKSB7CisJCUFTU0VSVCh0YWlsX2N5Y2xlID09IChoZWFkX2N5Y2xlIC0gMSkpOworCQlmcmVlX2J5dGVzID0gdGFpbF9ieXRlcyAtIGhlYWRfYnl0ZXM7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogVGhlIHJlc2VydmF0aW9uIGhlYWQgaXMgYmVoaW5kIHRoZSB0YWlsLgpAQCAtODg5LDEyICs4NTYsMTIgQEAKIAkJCSJ4bG9nX3NwYWNlX2xlZnQ6IGhlYWQgYmVoaW5kIHRhaWxcbiIKIAkJCSIgIHRhaWxfY3ljbGUgPSAlZCwgdGFpbF9ieXRlcyA9ICVkXG4iCiAJCQkiICBHSCAgIGN5Y2xlID0gJWQsIEdIICAgYnl0ZXMgPSAlZCIsCi0JCQl0YWlsX2N5Y2xlLCB0YWlsX2J5dGVzLCBjeWNsZSwgYnl0ZXMpOworCQkJdGFpbF9jeWNsZSwgdGFpbF9ieXRlcywgaGVhZF9jeWNsZSwgaGVhZF9ieXRlcyk7CiAJCUFTU0VSVCgwKTsKIAkJZnJlZV9ieXRlcyA9IGxvZy0+bF9sb2dzaXplOwogCX0KIAlyZXR1cm4gZnJlZV9ieXRlczsKLX0JLyogeGxvZ19zcGFjZV9sZWZ0ICovCit9CiAKIAogLyoKQEAgLTEwNDcsMTIgKzEwMTQsMTYgQEAKIAlsb2ctPmxfZmxhZ3MJICAgfD0gWExPR19BQ1RJVkVfUkVDT1ZFUlk7CiAKIAlsb2ctPmxfcHJldl9ibG9jayAgPSAtMTsKLQlsb2ctPmxfdGFpbF9sc24JICAgPSB4bG9nX2Fzc2lnbl9sc24oMSwgMCk7CiAJLyogbG9nLT5sX3RhaWxfbHNuID0gMHgxMDAwMDAwMDBMTDsgY3ljbGUgPSAxOyBjdXJyZW50IGJsb2NrID0gMCAqLwotCWxvZy0+bF9sYXN0X3N5bmNfbHNuID0gbG9nLT5sX3RhaWxfbHNuOworCXhsb2dfYXNzaWduX2F0b21pY19sc24oJmxvZy0+bF90YWlsX2xzbiwgMSwgMCk7CisJeGxvZ19hc3NpZ25fYXRvbWljX2xzbigmbG9nLT5sX2xhc3Rfc3luY19sc24sIDEsIDApOwogCWxvZy0+bF9jdXJyX2N5Y2xlICA9IDE7CSAgICAvKiAwIGlzIGJhZCBzaW5jZSB0aGlzIGlzIGluaXRpYWwgdmFsdWUgKi8KLQlsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9jeWNsZSA9IDE7Ci0JbG9nLT5sX2dyYW50X3dyaXRlX2N5Y2xlID0gMTsKKwl4bG9nX2Fzc2lnbl9ncmFudF9oZWFkKCZsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9oZWFkLCAxLCAwKTsKKwl4bG9nX2Fzc2lnbl9ncmFudF9oZWFkKCZsb2ctPmxfZ3JhbnRfd3JpdGVfaGVhZCwgMSwgMCk7CisJSU5JVF9MSVNUX0hFQUQoJmxvZy0+bF9yZXNlcnZlcSk7CisJSU5JVF9MSVNUX0hFQUQoJmxvZy0+bF93cml0ZXEpOworCXNwaW5fbG9ja19pbml0KCZsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmbG9nLT5sX2dyYW50X3dyaXRlX2xvY2spOwogCiAJZXJyb3IgPSBFRlNDT1JSVVBURUQ7CiAJaWYgKHhmc19zYl92ZXJzaW9uX2hhc3NlY3RvcigmbXAtPm1fc2IpKSB7CkBAIC0xMDk0LDggKzEwNjUsNyBAQAogCWxvZy0+bF94YnVmID0gYnA7CiAKIAlzcGluX2xvY2tfaW5pdCgmbG9nLT5sX2ljbG9nbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmxvZy0+bF9ncmFudF9sb2NrKTsKLQlzdl9pbml0KCZsb2ctPmxfZmx1c2hfd2FpdCwgMCwgImZsdXNoX3dhaXQiKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZsb2ctPmxfZmx1c2hfd2FpdCk7CiAKIAkvKiBsb2cgcmVjb3JkIHNpemUgbXVzdCBiZSBtdWx0aXBsZSBvZiBCQlNJWkU7IHNlZSB4bG9nX3JlY19oZWFkZXJfdCAqLwogCUFTU0VSVCgoWEZTX0JVRl9TSVpFKGJwKSAmIEJCTUFTSykgPT0gMCk7CkBAIC0xMTUxLDggKzExMjEsOCBAQAogCiAJCUFTU0VSVChYRlNfQlVGX0lTQlVTWShpY2xvZy0+aWNfYnApKTsKIAkJQVNTRVJUKFhGU19CVUZfVkFMVVNFTUEoaWNsb2ctPmljX2JwKSA8PSAwKTsKLQkJc3ZfaW5pdCgmaWNsb2ctPmljX2ZvcmNlX3dhaXQsIFNWX0RFRkFVTFQsICJpY2xvZy1mb3JjZSIpOwotCQlzdl9pbml0KCZpY2xvZy0+aWNfd3JpdGVfd2FpdCwgU1ZfREVGQVVMVCwgImljbG9nLXdyaXRlIik7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmljbG9nLT5pY19mb3JjZV93YWl0KTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmaWNsb2ctPmljX3dyaXRlX3dhaXQpOwogCiAJCWljbG9ncCA9ICZpY2xvZy0+aWNfbmV4dDsKIAl9CkBAIC0xMTY3LDE1ICsxMTM3LDExIEBACiBvdXRfZnJlZV9pY2xvZzoKIAlmb3IgKGljbG9nID0gbG9nLT5sX2ljbG9nOyBpY2xvZzsgaWNsb2cgPSBwcmV2X2ljbG9nKSB7CiAJCXByZXZfaWNsb2cgPSBpY2xvZy0+aWNfbmV4dDsKLQkJaWYgKGljbG9nLT5pY19icCkgewotCQkJc3ZfZGVzdHJveSgmaWNsb2ctPmljX2ZvcmNlX3dhaXQpOwotCQkJc3ZfZGVzdHJveSgmaWNsb2ctPmljX3dyaXRlX3dhaXQpOworCQlpZiAoaWNsb2ctPmljX2JwKQogCQkJeGZzX2J1Zl9mcmVlKGljbG9nLT5pY19icCk7Ci0JCX0KIAkJa21lbV9mcmVlKGljbG9nKTsKIAl9CiAJc3BpbmxvY2tfZGVzdHJveSgmbG9nLT5sX2ljbG9nbG9jayk7Ci0Jc3BpbmxvY2tfZGVzdHJveSgmbG9nLT5sX2dyYW50X2xvY2spOwogCXhmc19idWZfZnJlZShsb2ctPmxfeGJ1Zik7CiBvdXRfZnJlZV9sb2c6CiAJa21lbV9mcmVlKGxvZyk7CkBAIC0xMjIzLDYxICsxMTg5LDYwIEBACiAgKiB3YXRlciBtYXJrLiAgSW4gdGhpcyBtYW5uZXIsIHdlIHdvdWxkIGJlIGNyZWF0aW5nIGEgbG93IHdhdGVyIG1hcmsuCiAgKi8KIFNUQVRJQyB2b2lkCi14bG9nX2dyYW50X3B1c2hfYWlsKHhmc19tb3VudF90CSptcCwKLQkJICAgIGludAkJbmVlZF9ieXRlcykKK3hsb2dfZ3JhbnRfcHVzaF9haWwoCisJc3RydWN0IGxvZwkqbG9nLAorCWludAkJbmVlZF9ieXRlcykKIHsKLSAgICB4bG9nX3QJKmxvZyA9IG1wLT5tX2xvZzsJLyogcG9pbnRlciB0byB0aGUgbG9nICovCi0gICAgeGZzX2xzbl90CXRhaWxfbHNuOwkJLyogbHNuIG9mIHRoZSBsb2cgdGFpbCAqLwotICAgIHhmc19sc25fdAl0aHJlc2hvbGRfbHNuID0gMDsJLyogbHNuIHdlJ2QgbGlrZSB0byBiZSBhdCAqLwotICAgIGludAkJZnJlZV9ibG9ja3M7CQkvKiBmcmVlIGJsb2NrcyBsZWZ0IHRvIHdyaXRlIHRvICovCi0gICAgaW50CQlmcmVlX2J5dGVzOwkJLyogZnJlZSBieXRlcyBsZWZ0IHRvIHdyaXRlIHRvICovCi0gICAgaW50CQl0aHJlc2hvbGRfYmxvY2s7CS8qIGJsb2NrIGluIGxzbiB3ZSdkIGxpa2UgdG8gYmUgYXQgKi8KLSAgICBpbnQJCXRocmVzaG9sZF9jeWNsZTsJLyogbHNuIGN5Y2xlIHdlJ2QgbGlrZSB0byBiZSBhdCAqLwotICAgIGludAkJZnJlZV90aHJlc2hvbGQ7CisJeGZzX2xzbl90CXRocmVzaG9sZF9sc24gPSAwOworCXhmc19sc25fdAlsYXN0X3N5bmNfbHNuOworCWludAkJZnJlZV9ibG9ja3M7CisJaW50CQlmcmVlX2J5dGVzOworCWludAkJdGhyZXNob2xkX2Jsb2NrOworCWludAkJdGhyZXNob2xkX2N5Y2xlOworCWludAkJZnJlZV90aHJlc2hvbGQ7CiAKLSAgICBBU1NFUlQoQlRPQkIobmVlZF9ieXRlcykgPCBsb2ctPmxfbG9nQkJzaXplKTsKKwlBU1NFUlQoQlRPQkIobmVlZF9ieXRlcykgPCBsb2ctPmxfbG9nQkJzaXplKTsKIAotICAgIHNwaW5fbG9jaygmbG9nLT5sX2dyYW50X2xvY2spOwotICAgIGZyZWVfYnl0ZXMgPSB4bG9nX3NwYWNlX2xlZnQobG9nLAotCQkJCSBsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9jeWNsZSwKLQkJCQkgbG9nLT5sX2dyYW50X3Jlc2VydmVfYnl0ZXMpOwotICAgIHRhaWxfbHNuID0gbG9nLT5sX3RhaWxfbHNuOwotICAgIGZyZWVfYmxvY2tzID0gQlRPQkJUKGZyZWVfYnl0ZXMpOworCWZyZWVfYnl0ZXMgPSB4bG9nX3NwYWNlX2xlZnQobG9nLCAmbG9nLT5sX2dyYW50X3Jlc2VydmVfaGVhZCk7CisJZnJlZV9ibG9ja3MgPSBCVE9CQlQoZnJlZV9ieXRlcyk7CiAKLSAgICAvKgotICAgICAqIFNldCB0aGUgdGhyZXNob2xkIGZvciB0aGUgbWluaW11bSBudW1iZXIgb2YgZnJlZSBibG9ja3MgaW4gdGhlCi0gICAgICogbG9nIHRvIHRoZSBtYXhpbXVtIG9mIHdoYXQgdGhlIGNhbGxlciBuZWVkcywgb25lIHF1YXJ0ZXIgb2YgdGhlCi0gICAgICogbG9nLCBhbmQgMjU2IGJsb2Nrcy4KLSAgICAgKi8KLSAgICBmcmVlX3RocmVzaG9sZCA9IEJUT0JCKG5lZWRfYnl0ZXMpOwotICAgIGZyZWVfdGhyZXNob2xkID0gTUFYKGZyZWVfdGhyZXNob2xkLCAobG9nLT5sX2xvZ0JCc2l6ZSA+PiAyKSk7Ci0gICAgZnJlZV90aHJlc2hvbGQgPSBNQVgoZnJlZV90aHJlc2hvbGQsIDI1Nik7Ci0gICAgaWYgKGZyZWVfYmxvY2tzIDwgZnJlZV90aHJlc2hvbGQpIHsKLQl0aHJlc2hvbGRfYmxvY2sgPSBCTE9DS19MU04odGFpbF9sc24pICsgZnJlZV90aHJlc2hvbGQ7Ci0JdGhyZXNob2xkX2N5Y2xlID0gQ1lDTEVfTFNOKHRhaWxfbHNuKTsKLQlpZiAodGhyZXNob2xkX2Jsb2NrID49IGxvZy0+bF9sb2dCQnNpemUpIHsKLQkgICAgdGhyZXNob2xkX2Jsb2NrIC09IGxvZy0+bF9sb2dCQnNpemU7Ci0JICAgIHRocmVzaG9sZF9jeWNsZSArPSAxOwotCX0KLQl0aHJlc2hvbGRfbHNuID0geGxvZ19hc3NpZ25fbHNuKHRocmVzaG9sZF9jeWNsZSwgdGhyZXNob2xkX2Jsb2NrKTsKLQotCS8qIERvbid0IHBhc3MgaW4gYW4gbHNuIGdyZWF0ZXIgdGhhbiB0aGUgbHNuIG9mIHRoZSBsYXN0Ci0JICogbG9nIHJlY29yZCBrbm93biB0byBiZSBvbiBkaXNrLgorCS8qCisJICogU2V0IHRoZSB0aHJlc2hvbGQgZm9yIHRoZSBtaW5pbXVtIG51bWJlciBvZiBmcmVlIGJsb2NrcyBpbiB0aGUKKwkgKiBsb2cgdG8gdGhlIG1heGltdW0gb2Ygd2hhdCB0aGUgY2FsbGVyIG5lZWRzLCBvbmUgcXVhcnRlciBvZiB0aGUKKwkgKiBsb2csIGFuZCAyNTYgYmxvY2tzLgogCSAqLwotCWlmIChYRlNfTFNOX0NNUCh0aHJlc2hvbGRfbHNuLCBsb2ctPmxfbGFzdF9zeW5jX2xzbikgPiAwKQotCSAgICB0aHJlc2hvbGRfbHNuID0gbG9nLT5sX2xhc3Rfc3luY19sc247Ci0gICAgfQotICAgIHNwaW5fdW5sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7CisJZnJlZV90aHJlc2hvbGQgPSBCVE9CQihuZWVkX2J5dGVzKTsKKwlmcmVlX3RocmVzaG9sZCA9IE1BWChmcmVlX3RocmVzaG9sZCwgKGxvZy0+bF9sb2dCQnNpemUgPj4gMikpOworCWZyZWVfdGhyZXNob2xkID0gTUFYKGZyZWVfdGhyZXNob2xkLCAyNTYpOworCWlmIChmcmVlX2Jsb2NrcyA+PSBmcmVlX3RocmVzaG9sZCkKKwkJcmV0dXJuOwogCi0gICAgLyoKLSAgICAgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIGxheWVyIHRvIGtpY2sgdGhlIGRpcnR5IGJ1ZmZlcnMgb3V0IHRvCi0gICAgICogZGlzayBhc3luY2hyb25vdXNseS4gTm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGRvIHRoaXMgaWYKLSAgICAgKiB0aGUgZmlsZXN5c3RlbSBpcyBzaHV0dGluZyBkb3duLgotICAgICAqLwotICAgIGlmICh0aHJlc2hvbGRfbHNuICYmCi0JIVhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykpCi0JICAgIHhmc190cmFuc19haWxfcHVzaChsb2ctPmxfYWlscCwgdGhyZXNob2xkX2xzbik7Ci19CS8qIHhsb2dfZ3JhbnRfcHVzaF9haWwgKi8KKwl4bG9nX2NyYWNrX2F0b21pY19sc24oJmxvZy0+bF90YWlsX2xzbiwgJnRocmVzaG9sZF9jeWNsZSwKKwkJCQkJCSZ0aHJlc2hvbGRfYmxvY2spOworCXRocmVzaG9sZF9ibG9jayArPSBmcmVlX3RocmVzaG9sZDsKKwlpZiAodGhyZXNob2xkX2Jsb2NrID49IGxvZy0+bF9sb2dCQnNpemUpIHsKKwkJdGhyZXNob2xkX2Jsb2NrIC09IGxvZy0+bF9sb2dCQnNpemU7CisJCXRocmVzaG9sZF9jeWNsZSArPSAxOworCX0KKwl0aHJlc2hvbGRfbHNuID0geGxvZ19hc3NpZ25fbHNuKHRocmVzaG9sZF9jeWNsZSwKKwkJCQkJdGhyZXNob2xkX2Jsb2NrKTsKKwkvKgorCSAqIERvbid0IHBhc3MgaW4gYW4gbHNuIGdyZWF0ZXIgdGhhbiB0aGUgbHNuIG9mIHRoZSBsYXN0CisJICogbG9nIHJlY29yZCBrbm93biB0byBiZSBvbiBkaXNrLiBVc2UgYSBzbmFwc2hvdCBvZiB0aGUgbGFzdCBzeW5jIGxzbgorCSAqIHNvIHRoYXQgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiB0aGUgY29tcGFyZSBhbmQgdGhlIHNldC4KKwkgKi8KKwlsYXN0X3N5bmNfbHNuID0gYXRvbWljNjRfcmVhZCgmbG9nLT5sX2xhc3Rfc3luY19sc24pOworCWlmIChYRlNfTFNOX0NNUCh0aHJlc2hvbGRfbHNuLCBsYXN0X3N5bmNfbHNuKSA+IDApCisJCXRocmVzaG9sZF9sc24gPSBsYXN0X3N5bmNfbHNuOworCisJLyoKKwkgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIGxheWVyIHRvIGtpY2sgdGhlIGRpcnR5IGJ1ZmZlcnMgb3V0IHRvCisJICogZGlzayBhc3luY2hyb25vdXNseS4gTm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGRvIHRoaXMgaWYKKwkgKiB0aGUgZmlsZXN5c3RlbSBpcyBzaHV0dGluZyBkb3duLgorCSAqLworCWlmICghWExPR19GT1JDRURfU0hVVERPV04obG9nKSkKKwkJeGZzX3RyYW5zX2FpbF9wdXNoKGxvZy0+bF9haWxwLCB0aHJlc2hvbGRfbHNuKTsKK30KIAogLyoKICAqIFRoZSBiZHN0cmF0IGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBsb2cgYnVmcy4gVGhpcyBnaXZlcyB1cyBhIGNlbnRyYWwKQEAgLTEzNzIsOSArMTMzNyw4IEBACiAJCSByb3VuZG9mZiA8IEJCVE9CKDEpKSk7CiAKIAkvKiBtb3ZlIGdyYW50IGhlYWRzIGJ5IHJvdW5kb2ZmIGluIHN5bmMgKi8KLQlzcGluX2xvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKLQl4bG9nX2dyYW50X2FkZF9zcGFjZShsb2csIHJvdW5kb2ZmKTsKLQlzcGluX3VubG9jaygmbG9nLT5sX2dyYW50X2xvY2spOworCXhsb2dfZ3JhbnRfYWRkX3NwYWNlKGxvZywgJmxvZy0+bF9ncmFudF9yZXNlcnZlX2hlYWQsIHJvdW5kb2ZmKTsKKwl4bG9nX2dyYW50X2FkZF9zcGFjZShsb2csICZsb2ctPmxfZ3JhbnRfd3JpdGVfaGVhZCwgcm91bmRvZmYpOwogCiAJLyogcHV0IGN5Y2xlIG51bWJlciBpbiBldmVyeSBibG9jayAqLwogCXhsb2dfcGFja19kYXRhKGxvZywgaWNsb2csIHJvdW5kb2ZmKTsgCkBAIC0xNDg5LDE1ICsxNDUzLDEyIEBACiAKIAlpY2xvZyA9IGxvZy0+bF9pY2xvZzsKIAlmb3IgKGk9MDsgaTxsb2ctPmxfaWNsb2dfYnVmczsgaSsrKSB7Ci0JCXN2X2Rlc3Ryb3koJmljbG9nLT5pY19mb3JjZV93YWl0KTsKLQkJc3ZfZGVzdHJveSgmaWNsb2ctPmljX3dyaXRlX3dhaXQpOwogCQl4ZnNfYnVmX2ZyZWUoaWNsb2ctPmljX2JwKTsKIAkJbmV4dF9pY2xvZyA9IGljbG9nLT5pY19uZXh0OwogCQlrbWVtX2ZyZWUoaWNsb2cpOwogCQlpY2xvZyA9IG5leHRfaWNsb2c7CiAJfQogCXNwaW5sb2NrX2Rlc3Ryb3koJmxvZy0+bF9pY2xvZ2xvY2spOwotCXNwaW5sb2NrX2Rlc3Ryb3koJmxvZy0+bF9ncmFudF9sb2NrKTsKIAogCXhmc19idWZfZnJlZShsb2ctPmxfeGJ1Zik7CiAJbG9nLT5sX21wLT5tX2xvZyA9IE5VTEw7CkBAIC0yMjMyLDcgKzIxOTMsNyBAQAogCQkJCWxvd2VzdF9sc24gPSB4bG9nX2dldF9sb3dlc3RfbHNuKGxvZyk7CiAJCQkJaWYgKGxvd2VzdF9sc24gJiYKIAkJCQkgICAgWEZTX0xTTl9DTVAobG93ZXN0X2xzbiwKLQkJCQkgICAgCQliZTY0X3RvX2NwdShpY2xvZy0+aWNfaGVhZGVyLmhfbHNuKSkgPCAwKSB7CisJCQkJCQliZTY0X3RvX2NwdShpY2xvZy0+aWNfaGVhZGVyLmhfbHNuKSkgPCAwKSB7CiAJCQkJCWljbG9nID0gaWNsb2ctPmljX25leHQ7CiAJCQkJCWNvbnRpbnVlOyAvKiBMZWF2ZSB0aGlzIGljbG9nIGZvcgogCQkJCQkJICAgKiBhbm90aGVyIHRocmVhZCAqLwpAQCAtMjI0MCwyMyArMjIwMSwyMSBAQAogCiAJCQkJaWNsb2ctPmljX3N0YXRlID0gWExPR19TVEFURV9DQUxMQkFDSzsKIAotCQkJCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAotCQkJCS8qIGxfbGFzdF9zeW5jX2xzbiBmaWVsZCBwcm90ZWN0ZWQgYnkKLQkJCQkgKiBsX2dyYW50X2xvY2suIERvbid0IHdvcnJ5IGFib3V0IGljbG9nJ3MgbHNuLgotCQkJCSAqIE5vIG9uZSBlbHNlIGNhbiBiZSBoZXJlIGV4Y2VwdCB1cy4KKwkJCQkvKgorCQkJCSAqIHVwZGF0ZSB0aGUgbGFzdF9zeW5jX2xzbiBiZWZvcmUgd2UgZHJvcCB0aGUKKwkJCQkgKiBpY2xvZ2xvY2sgdG8gZW5zdXJlIHdlIGFyZSB0aGUgb25seSBvbmUgdGhhdAorCQkJCSAqIGNhbiB1cGRhdGUgaXQuCiAJCQkJICovCi0JCQkJc3Bpbl9sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7Ci0JCQkJQVNTRVJUKFhGU19MU05fQ01QKGxvZy0+bF9sYXN0X3N5bmNfbHNuLAotCQkJCSAgICAgICBiZTY0X3RvX2NwdShpY2xvZy0+aWNfaGVhZGVyLmhfbHNuKSkgPD0gMCk7Ci0JCQkJbG9nLT5sX2xhc3Rfc3luY19sc24gPQotCQkJCQliZTY0X3RvX2NwdShpY2xvZy0+aWNfaGVhZGVyLmhfbHNuKTsKLQkJCQlzcGluX3VubG9jaygmbG9nLT5sX2dyYW50X2xvY2spOworCQkJCUFTU0VSVChYRlNfTFNOX0NNUChhdG9taWM2NF9yZWFkKCZsb2ctPmxfbGFzdF9zeW5jX2xzbiksCisJCQkJCWJlNjRfdG9fY3B1KGljbG9nLT5pY19oZWFkZXIuaF9sc24pKSA8PSAwKTsKKwkJCQlhdG9taWM2NF9zZXQoJmxvZy0+bF9sYXN0X3N5bmNfbHNuLAorCQkJCQliZTY0X3RvX2NwdShpY2xvZy0+aWNfaGVhZGVyLmhfbHNuKSk7CiAKLQkJCX0gZWxzZSB7Ci0JCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOworCQkJfSBlbHNlCiAJCQkJaW9lcnJvcnMrKzsKLQkJCX0KKworCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCiAJCQkvKgogCQkJICogS2VlcCBwcm9jZXNzaW5nIGVudHJpZXMgaW4gdGhlIGNhbGxiYWNrIGxpc3QgdW50aWwKQEAgLTIyOTcsNyArMjI1Niw3IEBACiAJCQl4bG9nX3N0YXRlX2NsZWFuX2xvZyhsb2cpOwogCiAJCQkvKiB3YWtlIHVwIHRocmVhZHMgd2FpdGluZyBpbiB4ZnNfbG9nX2ZvcmNlKCkgKi8KLQkJCXN2X2Jyb2FkY2FzdCgmaWNsb2ctPmljX2ZvcmNlX3dhaXQpOworCQkJd2FrZV91cF9hbGwoJmljbG9nLT5pY19mb3JjZV93YWl0KTsKIAogCQkJaWNsb2cgPSBpY2xvZy0+aWNfbmV4dDsKIAkJfSB3aGlsZSAoZmlyc3RfaWNsb2cgIT0gaWNsb2cpOwpAQCAtMjM0NCw3ICsyMzAzLDcgQEAKIAlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAKIAlpZiAod2FrZSkKLQkJc3ZfYnJvYWRjYXN0KCZsb2ctPmxfZmx1c2hfd2FpdCk7CisJCXdha2VfdXBfYWxsKCZsb2ctPmxfZmx1c2hfd2FpdCk7CiB9CiAKIApAQCAtMjM5NSw3ICsyMzU0LDcgQEAKIAkgKiBpY2xvZyBidWZmZXIsIHdlIHdha2UgdGhlbSBhbGwsIG9uZSB3aWxsIGdldCB0byBkbyB0aGUKIAkgKiBJL08sIHRoZSBvdGhlcnMgZ2V0IHRvIHdhaXQgZm9yIHRoZSByZXN1bHQuCiAJICovCi0Jc3ZfYnJvYWRjYXN0KCZpY2xvZy0+aWNfd3JpdGVfd2FpdCk7CisJd2FrZV91cF9hbGwoJmljbG9nLT5pY193cml0ZV93YWl0KTsKIAlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJeGxvZ19zdGF0ZV9kb19jYWxsYmFjayhsb2csIGFib3J0ZWQsIGljbG9nKTsJLyogYWxzbyBjbGVhbnMgbG9nICovCiB9CS8qIHhsb2dfc3RhdGVfZG9uZV9zeW5jaW5nICovCkBAIC0yNDQ0LDcgKzI0MDMsNyBAQAogCQlYRlNfU1RBVFNfSU5DKHhzX2xvZ19ub2ljbG9ncyk7CiAKIAkJLyogV2FpdCBmb3IgbG9nIHdyaXRlcyB0byBoYXZlIGZsdXNoZWQgKi8KLQkJc3Zfd2FpdCgmbG9nLT5sX2ZsdXNoX3dhaXQsIDAsICZsb2ctPmxfaWNsb2dsb2NrLCAwKTsKKwkJeGxvZ193YWl0KCZsb2ctPmxfZmx1c2hfd2FpdCwgJmxvZy0+bF9pY2xvZ2xvY2spOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCkBAIC0yNTI3LDYgKzI0ODYsMTggQEAKICAqCiAgKiBPbmNlIGEgdGlja2V0IGdldHMgcHV0IG9udG8gdGhlIHJlc2VydmVxLCBpdCB3aWxsIG9ubHkgcmV0dXJuIGFmdGVyCiAgKiB0aGUgbmVlZGVkIHJlc2VydmF0aW9uIGlzIHNhdGlzZmllZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHN0cnVjdHVyZWQgc28gdGhhdCBpdCBoYXMgYSBsb2NrIGZyZWUgZmFzdCBwYXRoLiBUaGlzIGlzCisgKiBuZWNlc3NhcnkgYmVjYXVzZSBldmVyeSBuZXcgdHJhbnNhY3Rpb24gcmVzZXJ2YXRpb24gd2lsbCBjb21lIHRocm91Z2ggdGhpcworICogcGF0aC4gSGVuY2UgYW55IGxvY2sgd2lsbCBiZSBnbG9iYWxseSBob3QgaWYgd2UgdGFrZSBpdCB1bmNvbmRpdGlvbmFsbHkgb24KKyAqIGV2ZXJ5IHBhc3MuCisgKgorICogQXMgdGlja2V0cyBhcmUgb25seSBldmVyIG1vdmVkIG9uIGFuZCBvZmYgdGhlIHJlc2VydmVxIHVuZGVyIHRoZQorICogbF9ncmFudF9yZXNlcnZlX2xvY2ssIHdlIG9ubHkgbmVlZCB0byB0YWtlIHRoYXQgbG9jayBpZiB3ZSBhcmUgZ29pbmcKKyAqIHRvIGFkZCB0aGUgdGlja2V0IHRvIHRoZSBxdWV1ZSBhbmQgc2xlZXAuIFdlIGNhbiBhdm9pZCB0YWtpbmcgdGhlIGxvY2sgaWYgdGhlCisgKiB0aWNrZXQgd2FzIG5ldmVyIGFkZGVkIHRvIHRoZSByZXNlcnZlcSBiZWNhdXNlIHRoZSB0X3F1ZXVlIGxpc3QgaGVhZCB3aWxsIGJlCisgKiBlbXB0eSBhbmQgd2UgaG9sZCB0aGUgb25seSByZWZlcmVuY2UgdG8gaXQgc28gaXQgY2FuIHNhZmVseSBiZSBjaGVja2VkCisgKiB1bmxvY2tlZC4KICAqLwogU1RBVElDIGludAogeGxvZ19ncmFudF9sb2dfc3BhY2UoeGxvZ190CSAgICpsb2csCkBAIC0yNTM0LDI0ICsyNTA1LDI3IEBACiB7CiAJaW50CQkgZnJlZV9ieXRlczsKIAlpbnQJCSBuZWVkX2J5dGVzOwotI2lmZGVmIERFQlVHCi0JeGZzX2xzbl90CSB0YWlsX2xzbjsKLSNlbmRpZgotCiAKICNpZmRlZiBERUJVRwogCWlmIChsb2ctPmxfZmxhZ3MgJiBYTE9HX0FDVElWRV9SRUNPVkVSWSkKIAkJcGFuaWMoImdyYW50IFJlY292ZXJ5IHByb2JsZW0iKTsKICNlbmRpZgogCi0JLyogSXMgdGhlcmUgc3BhY2Ugb3IgZG8gd2UgbmVlZCB0byBzbGVlcD8gKi8KLQlzcGluX2xvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKLQogCXRyYWNlX3hmc19sb2dfZ3JhbnRfZW50ZXIobG9nLCB0aWMpOwogCisJbmVlZF9ieXRlcyA9IHRpYy0+dF91bml0X3JlczsKKwlpZiAodGljLT50X2ZsYWdzICYgWEZTX0xPR19QRVJNX1JFU0VSVikKKwkJbmVlZF9ieXRlcyAqPSB0aWMtPnRfb2NudDsKKwogCS8qIHNvbWV0aGluZyBpcyBhbHJlYWR5IHNsZWVwaW5nOyBpbnNlcnQgbmV3IHRyYW5zYWN0aW9uIGF0IGVuZCAqLwotCWlmIChsb2ctPmxfcmVzZXJ2ZV9oZWFkcSkgewotCQl4bG9nX2luc190aWNrZXRxKCZsb2ctPmxfcmVzZXJ2ZV9oZWFkcSwgdGljKTsKKwlpZiAoIWxpc3RfZW1wdHlfY2FyZWZ1bCgmbG9nLT5sX3Jlc2VydmVxKSkgeworCQlzcGluX2xvY2soJmxvZy0+bF9ncmFudF9yZXNlcnZlX2xvY2spOworCQkvKiByZWNoZWNrIHRoZSBxdWV1ZSBub3cgd2UgYXJlIGxvY2tlZCAqLworCQlpZiAobGlzdF9lbXB0eSgmbG9nLT5sX3Jlc2VydmVxKSkgeworCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9ncmFudF9yZXNlcnZlX2xvY2spOworCQkJZ290byByZWRvOworCQl9CisJCWxpc3RfYWRkX3RhaWwoJnRpYy0+dF9xdWV1ZSwgJmxvZy0+bF9yZXNlcnZlcSk7CiAKIAkJdHJhY2VfeGZzX2xvZ19ncmFudF9zbGVlcDEobG9nLCB0aWMpOwogCkBAIC0yNTYzLDcyICsyNTM3LDU3IEBACiAJCQlnb3RvIGVycm9yX3JldHVybjsKIAogCQlYRlNfU1RBVFNfSU5DKHhzX3NsZWVwX2xvZ3NwYWNlKTsKLQkJc3Zfd2FpdCgmdGljLT50X3dhaXQsIFBJTk9EfFBMVFdBSVQsICZsb2ctPmxfZ3JhbnRfbG9jaywgcyk7CisJCXhsb2dfd2FpdCgmdGljLT50X3dhaXQsICZsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9sb2NrKTsKKwogCQkvKgogCQkgKiBJZiB3ZSBnb3QgYW4gZXJyb3IsIGFuZCB0aGUgZmlsZXN5c3RlbSBpcyBzaHV0dGluZyBkb3duLAogCQkgKiB3ZSdsbCBjYXRjaCBpdCBkb3duIGJlbG93LiBTbyBqdXN0IGNvbnRpbnVlLi4uCiAJCSAqLwogCQl0cmFjZV94ZnNfbG9nX2dyYW50X3dha2UxKGxvZywgdGljKTsKLQkJc3Bpbl9sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7CiAJfQotCWlmICh0aWMtPnRfZmxhZ3MgJiBYRlNfTE9HX1BFUk1fUkVTRVJWKQotCQluZWVkX2J5dGVzID0gdGljLT50X3VuaXRfcmVzKnRpYy0+dF9vY250OwotCWVsc2UKLQkJbmVlZF9ieXRlcyA9IHRpYy0+dF91bml0X3JlczsKIAogcmVkbzoKIAlpZiAoWExPR19GT1JDRURfU0hVVERPV04obG9nKSkKLQkJZ290byBlcnJvcl9yZXR1cm47CisJCWdvdG8gZXJyb3JfcmV0dXJuX3VubG9ja2VkOwogCi0JZnJlZV9ieXRlcyA9IHhsb2dfc3BhY2VfbGVmdChsb2csIGxvZy0+bF9ncmFudF9yZXNlcnZlX2N5Y2xlLAotCQkJCSAgICAgbG9nLT5sX2dyYW50X3Jlc2VydmVfYnl0ZXMpOworCWZyZWVfYnl0ZXMgPSB4bG9nX3NwYWNlX2xlZnQobG9nLCAmbG9nLT5sX2dyYW50X3Jlc2VydmVfaGVhZCk7CiAJaWYgKGZyZWVfYnl0ZXMgPCBuZWVkX2J5dGVzKSB7Ci0JCWlmICgodGljLT50X2ZsYWdzICYgWExPR19USUNfSU5fUSkgPT0gMCkKLQkJCXhsb2dfaW5zX3RpY2tldHEoJmxvZy0+bF9yZXNlcnZlX2hlYWRxLCB0aWMpOworCQlzcGluX2xvY2soJmxvZy0+bF9ncmFudF9yZXNlcnZlX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmdGljLT50X3F1ZXVlKSkKKwkJCWxpc3RfYWRkX3RhaWwoJnRpYy0+dF9xdWV1ZSwgJmxvZy0+bF9yZXNlcnZlcSk7CiAKIAkJdHJhY2VfeGZzX2xvZ19ncmFudF9zbGVlcDIobG9nLCB0aWMpOwogCi0JCXNwaW5fdW5sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7Ci0JCXhsb2dfZ3JhbnRfcHVzaF9haWwobG9nLT5sX21wLCBuZWVkX2J5dGVzKTsKLQkJc3Bpbl9sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7Ci0KLQkJWEZTX1NUQVRTX0lOQyh4c19zbGVlcF9sb2dzcGFjZSk7Ci0JCXN2X3dhaXQoJnRpYy0+dF93YWl0LCBQSU5PRHxQTFRXQUlULCAmbG9nLT5sX2dyYW50X2xvY2ssIHMpOwotCi0JCXNwaW5fbG9jaygmbG9nLT5sX2dyYW50X2xvY2spOwogCQlpZiAoWExPR19GT1JDRURfU0hVVERPV04obG9nKSkKIAkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCi0JCXRyYWNlX3hmc19sb2dfZ3JhbnRfd2FrZTIobG9nLCB0aWMpOworCQl4bG9nX2dyYW50X3B1c2hfYWlsKGxvZywgbmVlZF9ieXRlcyk7CiAKKwkJWEZTX1NUQVRTX0lOQyh4c19zbGVlcF9sb2dzcGFjZSk7CisJCXhsb2dfd2FpdCgmdGljLT50X3dhaXQsICZsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9sb2NrKTsKKworCQl0cmFjZV94ZnNfbG9nX2dyYW50X3dha2UyKGxvZywgdGljKTsKIAkJZ290byByZWRvOwotCX0gZWxzZSBpZiAodGljLT50X2ZsYWdzICYgWExPR19USUNfSU5fUSkKLQkJeGxvZ19kZWxfdGlja2V0cSgmbG9nLT5sX3Jlc2VydmVfaGVhZHEsIHRpYyk7CisJfQorCisJaWYgKCFsaXN0X2VtcHR5KCZ0aWMtPnRfcXVldWUpKSB7CisJCXNwaW5fbG9jaygmbG9nLT5sX2dyYW50X3Jlc2VydmVfbG9jayk7CisJCWxpc3RfZGVsX2luaXQoJnRpYy0+dF9xdWV1ZSk7CisJCXNwaW5fdW5sb2NrKCZsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9sb2NrKTsKKwl9CiAKIAkvKiB3ZSd2ZSBnb3QgZW5vdWdoIHNwYWNlICovCi0JeGxvZ19ncmFudF9hZGRfc3BhY2UobG9nLCBuZWVkX2J5dGVzKTsKLSNpZmRlZiBERUJVRwotCXRhaWxfbHNuID0gbG9nLT5sX3RhaWxfbHNuOwotCS8qCi0JICogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBncmFudCB3cml0ZSBoZWFkIGRpZG4ndCBqdXN0IG92ZXIgbGFwIHRoZQotCSAqIHRhaWwuICBJZiB0aGUgY3ljbGVzIGFyZSB0aGUgc2FtZSwgd2UgY2FuJ3QgYmUgb3ZlcmxhcHBpbmcuCi0JICogT3RoZXJ3aXNlLCBtYWtlIHN1cmUgdGhhdCB0aGUgY3ljbGVzIGRpZmZlciBieSBleGFjdGx5IG9uZSBhbmQKLQkgKiBjaGVjayB0aGUgYnl0ZSBjb3VudC4KLQkgKi8KLQlpZiAoQ1lDTEVfTFNOKHRhaWxfbHNuKSAhPSBsb2ctPmxfZ3JhbnRfd3JpdGVfY3ljbGUpIHsKLQkJQVNTRVJUKGxvZy0+bF9ncmFudF93cml0ZV9jeWNsZS0xID09IENZQ0xFX0xTTih0YWlsX2xzbikpOwotCQlBU1NFUlQobG9nLT5sX2dyYW50X3dyaXRlX2J5dGVzIDw9IEJCVE9CKEJMT0NLX0xTTih0YWlsX2xzbikpKTsKLQl9Ci0jZW5kaWYKKwl4bG9nX2dyYW50X2FkZF9zcGFjZShsb2csICZsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9oZWFkLCBuZWVkX2J5dGVzKTsKKwl4bG9nX2dyYW50X2FkZF9zcGFjZShsb2csICZsb2ctPmxfZ3JhbnRfd3JpdGVfaGVhZCwgbmVlZF9ieXRlcyk7CiAJdHJhY2VfeGZzX2xvZ19ncmFudF9leGl0KGxvZywgdGljKTsKLQl4bG9nX3ZlcmlmeV9ncmFudF9oZWFkKGxvZywgMSk7Ci0Jc3Bpbl91bmxvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKKwl4bG9nX3ZlcmlmeV9ncmFudF90YWlsKGxvZyk7CiAJcmV0dXJuIDA7CiAKLSBlcnJvcl9yZXR1cm46Ci0JaWYgKHRpYy0+dF9mbGFncyAmIFhMT0dfVElDX0lOX1EpCi0JCXhsb2dfZGVsX3RpY2tldHEoJmxvZy0+bF9yZXNlcnZlX2hlYWRxLCB0aWMpOwotCitlcnJvcl9yZXR1cm5fdW5sb2NrZWQ6CisJc3Bpbl9sb2NrKCZsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9sb2NrKTsKK2Vycm9yX3JldHVybjoKKwlsaXN0X2RlbF9pbml0KCZ0aWMtPnRfcXVldWUpOworCXNwaW5fdW5sb2NrKCZsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9sb2NrKTsKIAl0cmFjZV94ZnNfbG9nX2dyYW50X2Vycm9yKGxvZywgdGljKTsKIAogCS8qCkBAIC0yNjM4LDcgKzI1OTcsNiBAQAogCSAqLwogCXRpYy0+dF9jdXJyX3JlcyA9IDA7CiAJdGljLT50X2NudCA9IDA7IC8qIHVuZ3JhbnQgd2lsbCBnaXZlIGJhY2sgdW5pdF9yZXMgKiB0X2NudC4gKi8KLQlzcGluX3VubG9jaygmbG9nLT5sX2dyYW50X2xvY2spOwogCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIH0JLyogeGxvZ19ncmFudF9sb2dfc3BhY2UgKi8KIApAQCAtMjY0NiwxNyArMjYwNCwxNCBAQAogLyoKICAqIFJlcGxlbmlzaCB0aGUgYnl0ZSByZXNlcnZhdGlvbiByZXF1aXJlZCBieSBtb3ZpbmcgdGhlIGdyYW50IHdyaXRlIGhlYWQuCiAgKgotICoKKyAqIFNpbWlsYXIgdG8geGxvZ19ncmFudF9sb2dfc3BhY2UsIHRoZSBmdW5jdGlvbiBpcyBzdHJ1Y3R1cmVkIHRvIGhhdmUgYSBsb2NrCisgKiBmcmVlIGZhc3QgcGF0aC4KICAqLwogU1RBVElDIGludAogeGxvZ19yZWdyYW50X3dyaXRlX2xvZ19zcGFjZSh4bG9nX3QJICAgKmxvZywKIAkJCSAgICAgeGxvZ190aWNrZXRfdCAqdGljKQogewogCWludAkJZnJlZV9ieXRlcywgbmVlZF9ieXRlczsKLQl4bG9nX3RpY2tldF90CSpudGljOwotI2lmZGVmIERFQlVHCi0JeGZzX2xzbl90CXRhaWxfbHNuOwotI2VuZGlmCiAKIAl0aWMtPnRfY3Vycl9yZXMgPSB0aWMtPnRfdW5pdF9yZXM7CiAJeGxvZ190aWNfcmVzZXRfcmVzKHRpYyk7CkBAIC0yNjY5LDEyICsyNjI0LDkgQEAKIAkJcGFuaWMoInJlZ3JhbnQgUmVjb3ZlcnkgcHJvYmxlbSIpOwogI2VuZGlmCiAKLQlzcGluX2xvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKLQogCXRyYWNlX3hmc19sb2dfcmVncmFudF93cml0ZV9lbnRlcihsb2csIHRpYyk7Ci0KIAlpZiAoWExPR19GT1JDRURfU0hVVERPV04obG9nKSkKLQkJZ290byBlcnJvcl9yZXR1cm47CisJCWdvdG8gZXJyb3JfcmV0dXJuX3VubG9ja2VkOwogCiAJLyogSWYgdGhlcmUgYXJlIG90aGVyIHdhaXRlcnMgb24gdGhlIHF1ZXVlIHRoZW4gZ2l2ZSB0aGVtIGEKIAkgKiBjaGFuY2UgYXQgbG9nc3BhY2UgYmVmb3JlIHVzLiBXYWtlIHVwIHRoZSBmaXJzdCB3YWl0ZXJzLApAQCAtMjY4Myw5MiArMjYzNSw3NiBAQAogCSAqIHRoaXMgdHJhbnNhY3Rpb24uCiAJICovCiAJbmVlZF9ieXRlcyA9IHRpYy0+dF91bml0X3JlczsKLQlpZiAoKG50aWMgPSBsb2ctPmxfd3JpdGVfaGVhZHEpKSB7Ci0JCWZyZWVfYnl0ZXMgPSB4bG9nX3NwYWNlX2xlZnQobG9nLCBsb2ctPmxfZ3JhbnRfd3JpdGVfY3ljbGUsCi0JCQkJCSAgICAgbG9nLT5sX2dyYW50X3dyaXRlX2J5dGVzKTsKLQkJZG8geworCWlmICghbGlzdF9lbXB0eV9jYXJlZnVsKCZsb2ctPmxfd3JpdGVxKSkgeworCQlzdHJ1Y3QgeGxvZ190aWNrZXQgKm50aWM7CisKKwkJc3Bpbl9sb2NrKCZsb2ctPmxfZ3JhbnRfd3JpdGVfbG9jayk7CisJCWZyZWVfYnl0ZXMgPSB4bG9nX3NwYWNlX2xlZnQobG9nLCAmbG9nLT5sX2dyYW50X3dyaXRlX2hlYWQpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG50aWMsICZsb2ctPmxfd3JpdGVxLCB0X3F1ZXVlKSB7CiAJCQlBU1NFUlQobnRpYy0+dF9mbGFncyAmIFhMT0dfVElDX1BFUk1fUkVTRVJWKTsKIAogCQkJaWYgKGZyZWVfYnl0ZXMgPCBudGljLT50X3VuaXRfcmVzKQogCQkJCWJyZWFrOwogCQkJZnJlZV9ieXRlcyAtPSBudGljLT50X3VuaXRfcmVzOwotCQkJc3Zfc2lnbmFsKCZudGljLT50X3dhaXQpOwotCQkJbnRpYyA9IG50aWMtPnRfbmV4dDsKLQkJfSB3aGlsZSAobnRpYyAhPSBsb2ctPmxfd3JpdGVfaGVhZHEpOworCQkJd2FrZV91cCgmbnRpYy0+dF93YWl0KTsKKwkJfQogCi0JCWlmIChudGljICE9IGxvZy0+bF93cml0ZV9oZWFkcSkgewotCQkJaWYgKCh0aWMtPnRfZmxhZ3MgJiBYTE9HX1RJQ19JTl9RKSA9PSAwKQotCQkJCXhsb2dfaW5zX3RpY2tldHEoJmxvZy0+bF93cml0ZV9oZWFkcSwgdGljKTsKLQorCQlpZiAobnRpYyAhPSBsaXN0X2ZpcnN0X2VudHJ5KCZsb2ctPmxfd3JpdGVxLAorCQkJCQkJc3RydWN0IHhsb2dfdGlja2V0LCB0X3F1ZXVlKSkgeworCQkJaWYgKGxpc3RfZW1wdHkoJnRpYy0+dF9xdWV1ZSkpCisJCQkJbGlzdF9hZGRfdGFpbCgmdGljLT50X3F1ZXVlLCAmbG9nLT5sX3dyaXRlcSk7CiAJCQl0cmFjZV94ZnNfbG9nX3JlZ3JhbnRfd3JpdGVfc2xlZXAxKGxvZywgdGljKTsKIAotCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKLQkJCXhsb2dfZ3JhbnRfcHVzaF9haWwobG9nLT5sX21wLCBuZWVkX2J5dGVzKTsKLQkJCXNwaW5fbG9jaygmbG9nLT5sX2dyYW50X2xvY2spOworCQkJeGxvZ19ncmFudF9wdXNoX2FpbChsb2csIG5lZWRfYnl0ZXMpOwogCiAJCQlYRlNfU1RBVFNfSU5DKHhzX3NsZWVwX2xvZ3NwYWNlKTsKLQkJCXN2X3dhaXQoJnRpYy0+dF93YWl0LCBQSU5PRHxQTFRXQUlULAotCQkJCSZsb2ctPmxfZ3JhbnRfbG9jaywgcyk7Ci0KLQkJCS8qIElmIHdlJ3JlIHNodXR0aW5nIGRvd24sIHRoaXMgdGljIGlzIGFscmVhZHkKLQkJCSAqIG9mZiB0aGUgcXVldWUgKi8KLQkJCXNwaW5fbG9jaygmbG9nLT5sX2dyYW50X2xvY2spOwotCQkJaWYgKFhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykpCi0JCQkJZ290byBlcnJvcl9yZXR1cm47Ci0KKwkJCXhsb2dfd2FpdCgmdGljLT50X3dhaXQsICZsb2ctPmxfZ3JhbnRfd3JpdGVfbG9jayk7CiAJCQl0cmFjZV94ZnNfbG9nX3JlZ3JhbnRfd3JpdGVfd2FrZTEobG9nLCB0aWMpOwotCQl9CisJCX0gZWxzZQorCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9ncmFudF93cml0ZV9sb2NrKTsKIAl9CiAKIHJlZG86CiAJaWYgKFhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykpCi0JCWdvdG8gZXJyb3JfcmV0dXJuOworCQlnb3RvIGVycm9yX3JldHVybl91bmxvY2tlZDsKIAotCWZyZWVfYnl0ZXMgPSB4bG9nX3NwYWNlX2xlZnQobG9nLCBsb2ctPmxfZ3JhbnRfd3JpdGVfY3ljbGUsCi0JCQkJICAgICBsb2ctPmxfZ3JhbnRfd3JpdGVfYnl0ZXMpOworCWZyZWVfYnl0ZXMgPSB4bG9nX3NwYWNlX2xlZnQobG9nLCAmbG9nLT5sX2dyYW50X3dyaXRlX2hlYWQpOwogCWlmIChmcmVlX2J5dGVzIDwgbmVlZF9ieXRlcykgewotCQlpZiAoKHRpYy0+dF9mbGFncyAmIFhMT0dfVElDX0lOX1EpID09IDApCi0JCQl4bG9nX2luc190aWNrZXRxKCZsb2ctPmxfd3JpdGVfaGVhZHEsIHRpYyk7Ci0JCXNwaW5fdW5sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7Ci0JCXhsb2dfZ3JhbnRfcHVzaF9haWwobG9nLT5sX21wLCBuZWVkX2J5dGVzKTsKLQkJc3Bpbl9sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7CisJCXNwaW5fbG9jaygmbG9nLT5sX2dyYW50X3dyaXRlX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmdGljLT50X3F1ZXVlKSkKKwkJCWxpc3RfYWRkX3RhaWwoJnRpYy0+dF9xdWV1ZSwgJmxvZy0+bF93cml0ZXEpOwogCi0JCVhGU19TVEFUU19JTkMoeHNfc2xlZXBfbG9nc3BhY2UpOwotCQl0cmFjZV94ZnNfbG9nX3JlZ3JhbnRfd3JpdGVfc2xlZXAyKGxvZywgdGljKTsKLQotCQlzdl93YWl0KCZ0aWMtPnRfd2FpdCwgUElOT0R8UExUV0FJVCwgJmxvZy0+bF9ncmFudF9sb2NrLCBzKTsKLQotCQkvKiBJZiB3ZSdyZSBzaHV0dGluZyBkb3duLCB0aGlzIHRpYyBpcyBhbHJlYWR5IG9mZiB0aGUgcXVldWUgKi8KLQkJc3Bpbl9sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7CiAJCWlmIChYTE9HX0ZPUkNFRF9TSFVURE9XTihsb2cpKQogCQkJZ290byBlcnJvcl9yZXR1cm47CiAKKwkJeGxvZ19ncmFudF9wdXNoX2FpbChsb2csIG5lZWRfYnl0ZXMpOworCisJCVhGU19TVEFUU19JTkMoeHNfc2xlZXBfbG9nc3BhY2UpOworCQl0cmFjZV94ZnNfbG9nX3JlZ3JhbnRfd3JpdGVfc2xlZXAyKGxvZywgdGljKTsKKwkJeGxvZ193YWl0KCZ0aWMtPnRfd2FpdCwgJmxvZy0+bF9ncmFudF93cml0ZV9sb2NrKTsKKwogCQl0cmFjZV94ZnNfbG9nX3JlZ3JhbnRfd3JpdGVfd2FrZTIobG9nLCB0aWMpOwogCQlnb3RvIHJlZG87Ci0JfSBlbHNlIGlmICh0aWMtPnRfZmxhZ3MgJiBYTE9HX1RJQ19JTl9RKQotCQl4bG9nX2RlbF90aWNrZXRxKCZsb2ctPmxfd3JpdGVfaGVhZHEsIHRpYyk7CisJfQorCisJaWYgKCFsaXN0X2VtcHR5KCZ0aWMtPnRfcXVldWUpKSB7CisJCXNwaW5fbG9jaygmbG9nLT5sX2dyYW50X3dyaXRlX2xvY2spOworCQlsaXN0X2RlbF9pbml0KCZ0aWMtPnRfcXVldWUpOworCQlzcGluX3VubG9jaygmbG9nLT5sX2dyYW50X3dyaXRlX2xvY2spOworCX0KIAogCS8qIHdlJ3ZlIGdvdCBlbm91Z2ggc3BhY2UgKi8KLQl4bG9nX2dyYW50X2FkZF9zcGFjZV93cml0ZShsb2csIG5lZWRfYnl0ZXMpOwotI2lmZGVmIERFQlVHCi0JdGFpbF9sc24gPSBsb2ctPmxfdGFpbF9sc247Ci0JaWYgKENZQ0xFX0xTTih0YWlsX2xzbikgIT0gbG9nLT5sX2dyYW50X3dyaXRlX2N5Y2xlKSB7Ci0JCUFTU0VSVChsb2ctPmxfZ3JhbnRfd3JpdGVfY3ljbGUtMSA9PSBDWUNMRV9MU04odGFpbF9sc24pKTsKLQkJQVNTRVJUKGxvZy0+bF9ncmFudF93cml0ZV9ieXRlcyA8PSBCQlRPQihCTE9DS19MU04odGFpbF9sc24pKSk7Ci0JfQotI2VuZGlmCi0KKwl4bG9nX2dyYW50X2FkZF9zcGFjZShsb2csICZsb2ctPmxfZ3JhbnRfd3JpdGVfaGVhZCwgbmVlZF9ieXRlcyk7CiAJdHJhY2VfeGZzX2xvZ19yZWdyYW50X3dyaXRlX2V4aXQobG9nLCB0aWMpOwotCi0JeGxvZ192ZXJpZnlfZ3JhbnRfaGVhZChsb2csIDEpOwotCXNwaW5fdW5sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7CisJeGxvZ192ZXJpZnlfZ3JhbnRfdGFpbChsb2cpOwogCXJldHVybiAwOwogCiAKKyBlcnJvcl9yZXR1cm5fdW5sb2NrZWQ6CisJc3Bpbl9sb2NrKCZsb2ctPmxfZ3JhbnRfd3JpdGVfbG9jayk7CiAgZXJyb3JfcmV0dXJuOgotCWlmICh0aWMtPnRfZmxhZ3MgJiBYTE9HX1RJQ19JTl9RKQotCQl4bG9nX2RlbF90aWNrZXRxKCZsb2ctPmxfcmVzZXJ2ZV9oZWFkcSwgdGljKTsKLQorCWxpc3RfZGVsX2luaXQoJnRpYy0+dF9xdWV1ZSk7CisJc3Bpbl91bmxvY2soJmxvZy0+bF9ncmFudF93cml0ZV9sb2NrKTsKIAl0cmFjZV94ZnNfbG9nX3JlZ3JhbnRfd3JpdGVfZXJyb3IobG9nLCB0aWMpOwogCiAJLyoKQEAgLTI3NzgsNyArMjcxNCw2IEBACiAJICovCiAJdGljLT50X2N1cnJfcmVzID0gMDsKIAl0aWMtPnRfY250ID0gMDsgLyogdW5ncmFudCB3aWxsIGdpdmUgYmFjayB1bml0X3JlcyAqIHRfY250LiAqLwotCXNwaW5fdW5sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7CiAJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogfQkvKiB4bG9nX3JlZ3JhbnRfd3JpdGVfbG9nX3NwYWNlICovCiAKQEAgLTI3OTksMjcgKzI3MzQsMjQgQEAKIAlpZiAodGlja2V0LT50X2NudCA+IDApCiAJCXRpY2tldC0+dF9jbnQtLTsKIAotCXNwaW5fbG9jaygmbG9nLT5sX2dyYW50X2xvY2spOwotCXhsb2dfZ3JhbnRfc3ViX3NwYWNlKGxvZywgdGlja2V0LT50X2N1cnJfcmVzKTsKKwl4bG9nX2dyYW50X3N1Yl9zcGFjZShsb2csICZsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9oZWFkLAorCQkJCQl0aWNrZXQtPnRfY3Vycl9yZXMpOworCXhsb2dfZ3JhbnRfc3ViX3NwYWNlKGxvZywgJmxvZy0+bF9ncmFudF93cml0ZV9oZWFkLAorCQkJCQl0aWNrZXQtPnRfY3Vycl9yZXMpOwogCXRpY2tldC0+dF9jdXJyX3JlcyA9IHRpY2tldC0+dF91bml0X3JlczsKIAl4bG9nX3RpY19yZXNldF9yZXModGlja2V0KTsKIAogCXRyYWNlX3hmc19sb2dfcmVncmFudF9yZXNlcnZlX3N1Yihsb2csIHRpY2tldCk7CiAKLQl4bG9nX3ZlcmlmeV9ncmFudF9oZWFkKGxvZywgMSk7Ci0KIAkvKiBqdXN0IHJldHVybiBpZiB3ZSBzdGlsbCBoYXZlIHNvbWUgb2YgdGhlIHByZS1yZXNlcnZlZCBzcGFjZSAqLwotCWlmICh0aWNrZXQtPnRfY250ID4gMCkgewotCQlzcGluX3VubG9jaygmbG9nLT5sX2dyYW50X2xvY2spOworCWlmICh0aWNrZXQtPnRfY250ID4gMCkKIAkJcmV0dXJuOwotCX0KIAotCXhsb2dfZ3JhbnRfYWRkX3NwYWNlX3Jlc2VydmUobG9nLCB0aWNrZXQtPnRfdW5pdF9yZXMpOworCXhsb2dfZ3JhbnRfYWRkX3NwYWNlKGxvZywgJmxvZy0+bF9ncmFudF9yZXNlcnZlX2hlYWQsCisJCQkJCXRpY2tldC0+dF91bml0X3Jlcyk7CiAKIAl0cmFjZV94ZnNfbG9nX3JlZ3JhbnRfcmVzZXJ2ZV9leGl0KGxvZywgdGlja2V0KTsKIAotCXhsb2dfdmVyaWZ5X2dyYW50X2hlYWQobG9nLCAwKTsKLQlzcGluX3VubG9jaygmbG9nLT5sX2dyYW50X2xvY2spOwogCXRpY2tldC0+dF9jdXJyX3JlcyA9IHRpY2tldC0+dF91bml0X3JlczsKIAl4bG9nX3RpY19yZXNldF9yZXModGlja2V0KTsKIH0JLyogeGxvZ19yZWdyYW50X3Jlc2VydmVfbG9nX3NwYWNlICovCkBAIC0yODQzLDI4ICsyNzc1LDI5IEBACiB4bG9nX3VuZ3JhbnRfbG9nX3NwYWNlKHhsb2dfdAkgICAgICpsb2csCiAJCSAgICAgICB4bG9nX3RpY2tldF90ICp0aWNrZXQpCiB7CisJaW50CWJ5dGVzOworCiAJaWYgKHRpY2tldC0+dF9jbnQgPiAwKQogCQl0aWNrZXQtPnRfY250LS07CiAKLQlzcGluX2xvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKIAl0cmFjZV94ZnNfbG9nX3VuZ3JhbnRfZW50ZXIobG9nLCB0aWNrZXQpOwotCi0JeGxvZ19ncmFudF9zdWJfc3BhY2UobG9nLCB0aWNrZXQtPnRfY3Vycl9yZXMpOwotCiAJdHJhY2VfeGZzX2xvZ191bmdyYW50X3N1Yihsb2csIHRpY2tldCk7CiAKLQkvKiBJZiB0aGlzIGlzIGEgcGVybWFuZW50IHJlc2VydmF0aW9uIHRpY2tldCwgd2UgbWF5IGJlIGFibGUgdG8gZnJlZQorCS8qCisJICogSWYgdGhpcyBpcyBhIHBlcm1hbmVudCByZXNlcnZhdGlvbiB0aWNrZXQsIHdlIG1heSBiZSBhYmxlIHRvIGZyZWUKIAkgKiB1cCBtb3JlIHNwYWNlIGJhc2VkIG9uIHRoZSByZW1haW5pbmcgY291bnQuCiAJICovCisJYnl0ZXMgPSB0aWNrZXQtPnRfY3Vycl9yZXM7CiAJaWYgKHRpY2tldC0+dF9jbnQgPiAwKSB7CiAJCUFTU0VSVCh0aWNrZXQtPnRfZmxhZ3MgJiBYTE9HX1RJQ19QRVJNX1JFU0VSVik7Ci0JCXhsb2dfZ3JhbnRfc3ViX3NwYWNlKGxvZywgdGlja2V0LT50X3VuaXRfcmVzKnRpY2tldC0+dF9jbnQpOworCQlieXRlcyArPSB0aWNrZXQtPnRfdW5pdF9yZXMqdGlja2V0LT50X2NudDsKIAl9CiAKKwl4bG9nX2dyYW50X3N1Yl9zcGFjZShsb2csICZsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9oZWFkLCBieXRlcyk7CisJeGxvZ19ncmFudF9zdWJfc3BhY2UobG9nLCAmbG9nLT5sX2dyYW50X3dyaXRlX2hlYWQsIGJ5dGVzKTsKKwogCXRyYWNlX3hmc19sb2dfdW5ncmFudF9leGl0KGxvZywgdGlja2V0KTsKIAotCXhsb2dfdmVyaWZ5X2dyYW50X2hlYWQobG9nLCAxKTsKLQlzcGluX3VubG9jaygmbG9nLT5sX2dyYW50X2xvY2spOwogCXhmc19sb2dfbW92ZV90YWlsKGxvZy0+bF9tcCwgMSk7CiB9CS8qIHhsb2dfdW5ncmFudF9sb2dfc3BhY2UgKi8KIApAQCAtMjkwMSwxMSArMjgzNCwxMSBAQAogCiAJaWYgKGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX1dBTlRfU1lOQykgewogCQkvKiB1cGRhdGUgdGFpbCBiZWZvcmUgd3JpdGluZyB0byBpY2xvZyAqLwotCQl4bG9nX2Fzc2lnbl90YWlsX2xzbihsb2ctPmxfbXApOworCQl4ZnNfbHNuX3QgdGFpbF9sc24gPSB4bG9nX2Fzc2lnbl90YWlsX2xzbihsb2ctPmxfbXApOwogCQlzeW5jKys7CiAJCWljbG9nLT5pY19zdGF0ZSA9IFhMT0dfU1RBVEVfU1lOQ0lORzsKLQkJaWNsb2ctPmljX2hlYWRlci5oX3RhaWxfbHNuID0gY3B1X3RvX2JlNjQobG9nLT5sX3RhaWxfbHNuKTsKLQkJeGxvZ192ZXJpZnlfdGFpbF9sc24obG9nLCBpY2xvZywgbG9nLT5sX3RhaWxfbHNuKTsKKwkJaWNsb2ctPmljX2hlYWRlci5oX3RhaWxfbHNuID0gY3B1X3RvX2JlNjQodGFpbF9sc24pOworCQl4bG9nX3ZlcmlmeV90YWlsX2xzbihsb2csIGljbG9nLCB0YWlsX2xzbik7CiAJCS8qIGN5Y2xlIGluY3JlbWVudGVkIHdoZW4gaW5jcmVtZW50aW5nIGN1cnJfYmxvY2sgKi8KIAl9CiAJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwpAQCAtMzA4OCw3ICszMDIxLDcgQEAKIAkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAkJfQogCQlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZV9zbGVlcCk7Ci0JCXN2X3dhaXQoJmljbG9nLT5pY19mb3JjZV93YWl0LCBQSU5PRCwgJmxvZy0+bF9pY2xvZ2xvY2ssIHMpOworCQl4bG9nX3dhaXQoJmljbG9nLT5pY19mb3JjZV93YWl0LCAmbG9nLT5sX2ljbG9nbG9jayk7CiAJCS8qCiAJCSAqIE5vIG5lZWQgdG8gZ3JhYiB0aGUgbG9nIGxvY2sgaGVyZSBzaW5jZSB3ZSdyZQogCQkgKiBvbmx5IGRlY2lkaW5nIHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiBFSU8KQEAgLTMyMDYsOCArMzEzOSw4IEBACiAKIAkJCQlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZV9zbGVlcCk7CiAKLQkJCQlzdl93YWl0KCZpY2xvZy0+aWNfcHJldi0+aWNfd3JpdGVfd2FpdCwKLQkJCQkJUFNXUCwgJmxvZy0+bF9pY2xvZ2xvY2ssIHMpOworCQkJCXhsb2dfd2FpdCgmaWNsb2ctPmljX3ByZXYtPmljX3dyaXRlX3dhaXQsCisJCQkJCQkJJmxvZy0+bF9pY2xvZ2xvY2spOwogCQkJCWlmIChsb2dfZmx1c2hlZCkKIAkJCQkJKmxvZ19mbHVzaGVkID0gMTsKIAkJCQlhbHJlYWR5X3NsZXB0ID0gMTsKQEAgLTMyMzUsNyArMzE2OCw3IEBACiAJCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCQkJfQogCQkJWEZTX1NUQVRTX0lOQyh4c19sb2dfZm9yY2Vfc2xlZXApOwotCQkJc3Zfd2FpdCgmaWNsb2ctPmljX2ZvcmNlX3dhaXQsIFBTV1AsICZsb2ctPmxfaWNsb2dsb2NrLCBzKTsKKwkJCXhsb2dfd2FpdCgmaWNsb2ctPmljX2ZvcmNlX3dhaXQsICZsb2ctPmxfaWNsb2dsb2NrKTsKIAkJCS8qCiAJCQkgKiBObyBuZWVkIHRvIGdyYWIgdGhlIGxvZyBsb2NrIGhlcmUgc2luY2Ugd2UncmUKIAkJCSAqIG9ubHkgZGVjaWRpbmcgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIEVJTwpAQCAtMzMxMCwxMCArMzI0Myw4IEBACiAJeGxvZ190aWNrZXRfdAkqdGlja2V0KQogewogCUFTU0VSVChhdG9taWNfcmVhZCgmdGlja2V0LT50X3JlZikgPiAwKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdGlja2V0LT50X3JlZikpIHsKLQkJc3ZfZGVzdHJveSgmdGlja2V0LT50X3dhaXQpOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0aWNrZXQtPnRfcmVmKSkKIAkJa21lbV96b25lX2ZyZWUoeGZzX2xvZ190aWNrZXRfem9uZSwgdGlja2V0KTsKLQl9CiB9CiAKIHhsb2dfdGlja2V0X3QgKgpAQCAtMzQzNSw2ICszMzY2LDcgQEAKICAgICAgICAgfQogCiAJYXRvbWljX3NldCgmdGljLT50X3JlZiwgMSk7CisJSU5JVF9MSVNUX0hFQUQoJnRpYy0+dF9xdWV1ZSk7CiAJdGljLT50X3VuaXRfcmVzCQk9IHVuaXRfYnl0ZXM7CiAJdGljLT50X2N1cnJfcmVzCQk9IHVuaXRfYnl0ZXM7CiAJdGljLT50X2NudAkJPSBjbnQ7CkBAIC0zNDQ1LDcgKzMzNzcsNyBAQAogCXRpYy0+dF90cmFuc190eXBlCT0gMDsKIAlpZiAoeGZsYWdzICYgWEZTX0xPR19QRVJNX1JFU0VSVikKIAkJdGljLT50X2ZsYWdzIHw9IFhMT0dfVElDX1BFUk1fUkVTRVJWOwotCXN2X2luaXQoJnRpYy0+dF93YWl0LCBTVl9ERUZBVUxULCAibG9ndGljayIpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnRpYy0+dF93YWl0KTsKIAogCXhsb2dfdGljX3Jlc2V0X3Jlcyh0aWMpOwogCkBAIC0zNDg0LDE4ICszNDE2LDI1IEBACiB9CiAKIFNUQVRJQyB2b2lkCi14bG9nX3ZlcmlmeV9ncmFudF9oZWFkKHhsb2dfdCAqbG9nLCBpbnQgZXF1YWxzKQoreGxvZ192ZXJpZnlfZ3JhbnRfdGFpbCgKKwlzdHJ1Y3QgbG9nCSpsb2cpCiB7Ci0gICAgaWYgKGxvZy0+bF9ncmFudF9yZXNlcnZlX2N5Y2xlID09IGxvZy0+bF9ncmFudF93cml0ZV9jeWNsZSkgewotCWlmIChlcXVhbHMpCi0JICAgIEFTU0VSVChsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9ieXRlcyA+PSBsb2ctPmxfZ3JhbnRfd3JpdGVfYnl0ZXMpOwotCWVsc2UKLQkgICAgQVNTRVJUKGxvZy0+bF9ncmFudF9yZXNlcnZlX2J5dGVzID4gbG9nLT5sX2dyYW50X3dyaXRlX2J5dGVzKTsKLSAgICB9IGVsc2UgewotCUFTU0VSVChsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9jeWNsZS0xID09IGxvZy0+bF9ncmFudF93cml0ZV9jeWNsZSk7Ci0JQVNTRVJUKGxvZy0+bF9ncmFudF93cml0ZV9ieXRlcyA+PSBsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9ieXRlcyk7Ci0gICAgfQotfQkvKiB4bG9nX3ZlcmlmeV9ncmFudF9oZWFkICovCisJaW50CQl0YWlsX2N5Y2xlLCB0YWlsX2Jsb2NrczsKKwlpbnQJCWN5Y2xlLCBzcGFjZTsKKworCS8qCisJICogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBncmFudCB3cml0ZSBoZWFkIGRpZG4ndCBqdXN0IG92ZXIgbGFwIHRoZQorCSAqIHRhaWwuICBJZiB0aGUgY3ljbGVzIGFyZSB0aGUgc2FtZSwgd2UgY2FuJ3QgYmUgb3ZlcmxhcHBpbmcuCisJICogT3RoZXJ3aXNlLCBtYWtlIHN1cmUgdGhhdCB0aGUgY3ljbGVzIGRpZmZlciBieSBleGFjdGx5IG9uZSBhbmQKKwkgKiBjaGVjayB0aGUgYnl0ZSBjb3VudC4KKwkgKi8KKwl4bG9nX2NyYWNrX2dyYW50X2hlYWQoJmxvZy0+bF9ncmFudF93cml0ZV9oZWFkLCAmY3ljbGUsICZzcGFjZSk7CisJeGxvZ19jcmFja19hdG9taWNfbHNuKCZsb2ctPmxfdGFpbF9sc24sICZ0YWlsX2N5Y2xlLCAmdGFpbF9ibG9ja3MpOworCWlmICh0YWlsX2N5Y2xlICE9IGN5Y2xlKSB7CisJCUFTU0VSVChjeWNsZSAtIDEgPT0gdGFpbF9jeWNsZSk7CisJCUFTU0VSVChzcGFjZSA8PSBCQlRPQih0YWlsX2Jsb2NrcykpOworCX0KK30KIAogLyogY2hlY2sgaWYgaXQgd2lsbCBmaXQgKi8KIFNUQVRJQyB2b2lkCkBAIC0zNzE2LDEyICszNjU1LDEwIEBACiAJCXhsb2dfY2lsX2ZvcmNlKGxvZyk7CiAKIAkvKgotCSAqIFdlIG11c3QgaG9sZCBib3RoIHRoZSBHUkFOVCBsb2NrIGFuZCB0aGUgTE9HIGxvY2ssCi0JICogYmVmb3JlIHdlIG1hcmsgdGhlIGZpbGVzeXN0ZW0gU0hVVERPV04gYW5kIHdha2UKLQkgKiBldmVyeWJvZHkgdXAgdG8gdGVsbCB0aGUgYmFkIG5ld3MuCisJICogbWFyayB0aGUgZmlsZXN5c3RlbSBhbmQgdGhlIGFzIGluIGEgc2h1dGRvd24gc3RhdGUgYW5kIHdha2UKKwkgKiBldmVyeWJvZHkgdXAgdG8gdGVsbCB0aGVtIHRoZSBiYWQgbmV3cy4KIAkgKi8KIAlzcGluX2xvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwotCXNwaW5fbG9jaygmbG9nLT5sX2dyYW50X2xvY2spOwogCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9GU19TSFVURE9XTjsKIAlpZiAobXAtPm1fc2JfYnApCiAJCVhGU19CVUZfRE9ORShtcC0+bV9zYl9icCk7CkBAIC0zNzQyLDI3ICszNjc5LDIxIEBACiAJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCiAJLyoKLQkgKiBXZSBkb24ndCB3YW50IGFueWJvZHkgd2FpdGluZyBmb3IgbG9nIHJlc2VydmF0aW9ucwotCSAqIGFmdGVyIHRoaXMuIFRoYXQgbWVhbnMgd2UgaGF2ZSB0byB3YWtlIHVwIGV2ZXJ5Ym9keQotCSAqIHF1ZXVlZCB1cCBvbiByZXNlcnZlX2hlYWRxIGFzIHdlbGwgYXMgd3JpdGVfaGVhZHEuCi0JICogSW4gYWRkaXRpb24sIHdlIG1ha2Ugc3VyZSBpbiB4bG9nX3tyZX1ncmFudF9sb2dfc3BhY2UKLQkgKiB0aGF0IHdlIGRvbid0IGVucXVldWUgYW55dGhpbmcgb25jZSB0aGUgU0hVVERPV04gZmxhZwotCSAqIGlzIHNldCwgYW5kIHRoaXMgYWN0aW9uIGlzIHByb3RlY3RlZCBieSB0aGUgR1JBTlRMT0NLLgorCSAqIFdlIGRvbid0IHdhbnQgYW55Ym9keSB3YWl0aW5nIGZvciBsb2cgcmVzZXJ2YXRpb25zIGFmdGVyIHRoaXMuIFRoYXQKKwkgKiBtZWFucyB3ZSBoYXZlIHRvIHdha2UgdXAgZXZlcnlib2R5IHF1ZXVlZCB1cCBvbiByZXNlcnZlcSBhcyB3ZWxsIGFzCisJICogd3JpdGVxLiAgSW4gYWRkaXRpb24sIHdlIG1ha2Ugc3VyZSBpbiB4bG9nX3tyZX1ncmFudF9sb2dfc3BhY2UgdGhhdAorCSAqIHdlIGRvbid0IGVucXVldWUgYW55dGhpbmcgb25jZSB0aGUgU0hVVERPV04gZmxhZyBpcyBzZXQsIGFuZCB0aGlzCisJICogYWN0aW9uIGlzIHByb3RlY3RlZCBieSB0aGUgZ3JhbnQgbG9ja3MuCiAJICovCi0JaWYgKCh0aWMgPSBsb2ctPmxfcmVzZXJ2ZV9oZWFkcSkpIHsKLQkJZG8gewotCQkJc3Zfc2lnbmFsKCZ0aWMtPnRfd2FpdCk7Ci0JCQl0aWMgPSB0aWMtPnRfbmV4dDsKLQkJfSB3aGlsZSAodGljICE9IGxvZy0+bF9yZXNlcnZlX2hlYWRxKTsKLQl9CisJc3Bpbl9sb2NrKCZsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRpYywgJmxvZy0+bF9yZXNlcnZlcSwgdF9xdWV1ZSkKKwkJd2FrZV91cCgmdGljLT50X3dhaXQpOworCXNwaW5fdW5sb2NrKCZsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9sb2NrKTsKIAotCWlmICgodGljID0gbG9nLT5sX3dyaXRlX2hlYWRxKSkgewotCQlkbyB7Ci0JCQlzdl9zaWduYWwoJnRpYy0+dF93YWl0KTsKLQkJCXRpYyA9IHRpYy0+dF9uZXh0OwotCQl9IHdoaWxlICh0aWMgIT0gbG9nLT5sX3dyaXRlX2hlYWRxKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKKwlzcGluX2xvY2soJmxvZy0+bF9ncmFudF93cml0ZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRpYywgJmxvZy0+bF93cml0ZXEsIHRfcXVldWUpCisJCXdha2VfdXAoJnRpYy0+dF93YWl0KTsKKwlzcGluX3VubG9jaygmbG9nLT5sX2dyYW50X3dyaXRlX2xvY2spOwogCiAJaWYgKCEobG9nLT5sX2ljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikpIHsKIAkJQVNTRVJUKCFsb2dlcnJvcik7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19jaWwuYyBiL2ZzL3hmcy94ZnNfbG9nX2NpbC5jCmluZGV4IDIzZDZjZWIuLjlkYzgxMjUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX2NpbC5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX2NpbC5jCkBAIC02MSw3ICs2MSw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmNpbC0+eGNfY29tbWl0dGluZyk7CiAJc3Bpbl9sb2NrX2luaXQoJmNpbC0+eGNfY2lsX2xvY2spOwogCWluaXRfcndzZW0oJmNpbC0+eGNfY3R4X2xvY2spOwotCXN2X2luaXQoJmNpbC0+eGNfY29tbWl0X3dhaXQsIFNWX0RFRkFVTFQsICJjaWx3YWl0Iik7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY2lsLT54Y19jb21taXRfd2FpdCk7CiAKIAlJTklUX0xJU1RfSEVBRCgmY3R4LT5jb21taXR0aW5nKTsKIAlJTklUX0xJU1RfSEVBRCgmY3R4LT5idXN5X2V4dGVudHMpOwpAQCAtMzYxLDE1ICszNjEsMTAgQEAKIAlpbnQJYWJvcnQpCiB7CiAJc3RydWN0IHhmc19jaWxfY3R4CSpjdHggPSBhcmdzOwotCXN0cnVjdCB4ZnNfbG9nX3ZlYwkqbHY7Ci0JaW50CQkJYWJvcnRmbGFnID0gYWJvcnQgPyBYRlNfTElfQUJPUlRFRCA6IDA7CiAJc3RydWN0IHhmc19idXN5X2V4dGVudAkqYnVzeXAsICpuOwogCi0JLyogdW5waW4gYWxsIHRoZSBsb2cgaXRlbXMgKi8KLQlmb3IgKGx2ID0gY3R4LT5sdl9jaGFpbjsgbHY7IGx2ID0gbHYtPmx2X25leHQgKSB7Ci0JCXhmc190cmFuc19pdGVtX2NvbW1pdHRlZChsdi0+bHZfaXRlbSwgY3R4LT5zdGFydF9sc24sCi0JCQkJCQkJYWJvcnRmbGFnKTsKLQl9CisJeGZzX3RyYW5zX2NvbW1pdHRlZF9idWxrKGN0eC0+Y2lsLT54Y19sb2ctPmxfYWlscCwgY3R4LT5sdl9jaGFpbiwKKwkJCQkJY3R4LT5zdGFydF9sc24sIGFib3J0KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShidXN5cCwgbiwgJmN0eC0+YnVzeV9leHRlbnRzLCBsaXN0KQogCQl4ZnNfYWxsb2NfYnVzeV9jbGVhcihjdHgtPmNpbC0+eGNfbG9nLT5sX21wLCBidXN5cCk7CkBAIC01NjgsNyArNTYzLDcgQEAKIAkJCSAqIEl0IGlzIHN0aWxsIGJlaW5nIHB1c2hlZCEgV2FpdCBmb3IgdGhlIHB1c2ggdG8KIAkJCSAqIGNvbXBsZXRlLCB0aGVuIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZy4KIAkJCSAqLwotCQkJc3Zfd2FpdCgmY2lsLT54Y19jb21taXRfd2FpdCwgMCwgJmNpbC0+eGNfY2lsX2xvY2ssIDApOworCQkJeGxvZ193YWl0KCZjaWwtPnhjX2NvbW1pdF93YWl0LCAmY2lsLT54Y19jaWxfbG9jayk7CiAJCQlnb3RvIHJlc3RhcnQ7CiAJCX0KIAl9CkBAIC01OTIsNyArNTg3LDcgQEAKIAkgKi8KIAlzcGluX2xvY2soJmNpbC0+eGNfY2lsX2xvY2spOwogCWN0eC0+Y29tbWl0X2xzbiA9IGNvbW1pdF9sc247Ci0Jc3ZfYnJvYWRjYXN0KCZjaWwtPnhjX2NvbW1pdF93YWl0KTsKKwl3YWtlX3VwX2FsbCgmY2lsLT54Y19jb21taXRfd2FpdCk7CiAJc3Bpbl91bmxvY2soJmNpbC0+eGNfY2lsX2xvY2spOwogCiAJLyogcmVsZWFzZSB0aGUgaG91bmRzISAqLwpAQCAtNzU3LDcgKzc1Miw3IEBACiAJCQkgKiBJdCBpcyBzdGlsbCBiZWluZyBwdXNoZWQhIFdhaXQgZm9yIHRoZSBwdXNoIHRvCiAJCQkgKiBjb21wbGV0ZSwgdGhlbiBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcuCiAJCQkgKi8KLQkJCXN2X3dhaXQoJmNpbC0+eGNfY29tbWl0X3dhaXQsIDAsICZjaWwtPnhjX2NpbF9sb2NrLCAwKTsKKwkJCXhsb2dfd2FpdCgmY2lsLT54Y19jb21taXRfd2FpdCwgJmNpbC0+eGNfY2lsX2xvY2spOwogCQkJZ290byByZXN0YXJ0OwogCQl9CiAJCWlmIChjdHgtPnNlcXVlbmNlICE9IHNlcXVlbmNlKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcHJpdi5oIGIvZnMveGZzL3hmc19sb2dfcHJpdi5oCmluZGV4IGVkY2RmZTAuLmQ1ZjhiZTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaAorKysgYi9mcy94ZnMveGZzX2xvZ19wcml2LmgKQEAgLTIxLDcgKzIxLDYgQEAKIHN0cnVjdCB4ZnNfYnVmOwogc3RydWN0IGxvZzsKIHN0cnVjdCB4bG9nX3RpY2tldDsKLXN0cnVjdCB4ZnNfYnVmX2NhbmNlbDsKIHN0cnVjdCB4ZnNfbW91bnQ7CiAKIC8qCkBAIC01NCw3ICs1Myw2IEBACiAJQlRPQkIoWExPR19NQVhfSUNMT0dTIDw8ICh4ZnNfc2JfdmVyc2lvbl9oYXNsb2d2MigmbG9nLT5sX21wLT5tX3NiKSA/IFwKIAkgWExPR19NQVhfUkVDT1JEX0JTSElGVCA6IFhMT0dfQklHX1JFQ09SRF9CU0hJRlQpKQogCi0KIHN0YXRpYyBpbmxpbmUgeGZzX2xzbl90IHhsb2dfYXNzaWduX2xzbih1aW50IGN5Y2xlLCB1aW50IGJsb2NrKQogewogCXJldHVybiAoKHhmc19sc25fdCljeWNsZSA8PCAzMikgfCBibG9jazsKQEAgLTEzMywxMiArMTMxLDEwIEBACiAgKi8KICNkZWZpbmUgWExPR19USUNfSU5JVEVECQkweDEJLyogaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKi8KICNkZWZpbmUgWExPR19USUNfUEVSTV9SRVNFUlYJMHgyCS8qIHBlcm1hbmVudCByZXNlcnZhdGlvbiAqLwotI2RlZmluZSBYTE9HX1RJQ19JTl9RCQkweDQKIAogI2RlZmluZSBYTE9HX1RJQ19GTEFHUyBcCiAJeyBYTE9HX1RJQ19JTklURUQsCSJYTE9HX1RJQ19JTklURUQiIH0sIFwKLQl7IFhMT0dfVElDX1BFUk1fUkVTRVJWLAkiWExPR19USUNfUEVSTV9SRVNFUlYiIH0sIFwKLQl7IFhMT0dfVElDX0lOX1EsCSJYTE9HX1RJQ19JTl9RIiB9CisJeyBYTE9HX1RJQ19QRVJNX1JFU0VSViwJIlhMT0dfVElDX1BFUk1fUkVTRVJWIiB9CiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKQEAgLTI0NCw5ICsyNDAsOCBAQAogfSB4bG9nX3Jlc190OwogCiB0eXBlZGVmIHN0cnVjdCB4bG9nX3RpY2tldCB7Ci0Jc3ZfdAkJICAgdF93YWl0OwkgLyogdGlja2V0IHdhaXQgcXVldWUgICAgICAgICAgICA6IDIwICovCi0Jc3RydWN0IHhsb2dfdGlja2V0ICp0X25leHQ7CSAvKgkJCSAgICAgICAgIDo0fDggKi8KLQlzdHJ1Y3QgeGxvZ190aWNrZXQgKnRfcHJldjsJIC8qCQkJCSA6NHw4ICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgIHRfd2FpdDsJIC8qIHRpY2tldCB3YWl0IHF1ZXVlICovCisJc3RydWN0IGxpc3RfaGVhZCAgIHRfcXVldWU7CSAvKiByZXNlcnZlL3dyaXRlIHF1ZXVlICovCiAJeGxvZ190aWRfdAkgICB0X3RpZDsJIC8qIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIJIDogNCAgKi8KIAlhdG9taWNfdAkgICB0X3JlZjsJIC8qIHRpY2tldCByZWZlcmVuY2UgY291bnQgICAgICAgOiA0ICAqLwogCWludAkJICAgdF9jdXJyX3JlczsJIC8qIGN1cnJlbnQgcmVzZXJ2YXRpb24gaW4gYnl0ZXMgOiA0ICAqLwpAQCAtMzUzLDggKzM0OCw4IEBACiAgKiBhbmQgbW92ZSBldmVyeXRoaW5nIGVsc2Ugb3V0IHRvIHN1YnNlcXVlbnQgY2FjaGVsaW5lcy4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgeGxvZ19pbl9jb3JlIHsKLQlzdl90CQkJaWNfZm9yY2Vfd2FpdDsKLQlzdl90CQkJaWNfd3JpdGVfd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlpY19mb3JjZV93YWl0OworCXdhaXRfcXVldWVfaGVhZF90CWljX3dyaXRlX3dhaXQ7CiAJc3RydWN0IHhsb2dfaW5fY29yZQkqaWNfbmV4dDsKIAlzdHJ1Y3QgeGxvZ19pbl9jb3JlCSppY19wcmV2OwogCXN0cnVjdCB4ZnNfYnVmCQkqaWNfYnA7CkBAIC00MjEsNyArNDE2LDcgQEAKIAlzdHJ1Y3QgeGZzX2NpbF9jdHgJKnhjX2N0eDsKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlCXhjX2N0eF9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJeGNfY29tbWl0dGluZzsKLQlzdl90CQkJeGNfY29tbWl0X3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJeGNfY29tbWl0X3dhaXQ7CiAJeGZzX2xzbl90CQl4Y19jdXJyZW50X3NlcXVlbmNlOwogfTsKIApAQCAtNDkxLDcgKzQ4Niw3IEBACiAJc3RydWN0IHhmc19idWZ0YXJnCSpsX3Rhcmc7ICAgICAgICAvKiBidWZ0YXJnIG9mIGxvZyAqLwogCXVpbnQJCQlsX2ZsYWdzOwogCXVpbnQJCQlsX3F1b3Rhb2Zmc19mbGFnOyAvKiBYRlNfRFFfKiwgZm9yIFFVT1RBT0ZGcyAqLwotCXN0cnVjdCB4ZnNfYnVmX2NhbmNlbAkqKmxfYnVmX2NhbmNlbF90YWJsZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSpsX2J1Zl9jYW5jZWxfdGFibGU7CiAJaW50CQkJbF9pY2xvZ19oc2l6ZTsgIC8qIHNpemUgb2YgaWNsb2cgaGVhZGVyICovCiAJaW50CQkJbF9pY2xvZ19oZWFkczsgIC8qICMgb2YgaWNsb2cgaGVhZGVyIHNlY3RvcnMgKi8KIAl1aW50CQkJbF9zZWN0QkJzaXplOyAgIC8qIHNlY3RvciBzaXplIGluIEJCcyAoMl5uKSAqLwpAQCAtNTAzLDI5ICs0OTgsNDAgQEAKIAlpbnQJCQlsX2xvZ0JCc2l6ZTsgICAgLyogc2l6ZSBvZiBsb2cgaW4gQkIgY2h1bmtzICovCiAKIAkvKiBUaGUgZm9sbG93aW5nIGJsb2NrIG9mIGZpZWxkcyBhcmUgY2hhbmdlZCB3aGlsZSBob2xkaW5nIGljbG9nbG9jayAqLwotCXN2X3QJCQlsX2ZsdXNoX3dhaXQgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlsX2ZsdXNoX3dhaXQgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAkJCQkJCS8qIHdhaXRpbmcgZm9yIGljbG9nIGZsdXNoICovCiAJaW50CQkJbF9jb3ZlcmVkX3N0YXRlOy8qIHN0YXRlIG9mICJjb3ZlcmluZyBkaXNrCiAJCQkJCQkgKiBsb2cgZW50cmllcyIgKi8KIAl4bG9nX2luX2NvcmVfdAkJKmxfaWNsb2c7ICAgICAgIC8qIGhlYWQgbG9nIHF1ZXVlCSovCiAJc3BpbmxvY2tfdAkJbF9pY2xvZ2xvY2s7ICAgIC8qIGdyYWIgdG8gY2hhbmdlIGljbG9nIHN0YXRlICovCi0JeGZzX2xzbl90CQlsX3RhaWxfbHNuOyAgICAgLyogbHNuIG9mIDFzdCBMUiB3aXRoIHVuZmx1c2hlZAotCQkJCQkJICogYnVmZmVycyAqLwotCXhmc19sc25fdAkJbF9sYXN0X3N5bmNfbHNuOy8qIGxzbiBvZiBsYXN0IExSIG9uIGRpc2sgKi8KIAlpbnQJCQlsX2N1cnJfY3ljbGU7ICAgLyogQ3ljbGUgbnVtYmVyIG9mIGxvZyB3cml0ZXMgKi8KIAlpbnQJCQlsX3ByZXZfY3ljbGU7ICAgLyogQ3ljbGUgbnVtYmVyIGJlZm9yZSBsYXN0CiAJCQkJCQkgKiBibG9jayBpbmNyZW1lbnQgKi8KIAlpbnQJCQlsX2N1cnJfYmxvY2s7ICAgLyogY3VycmVudCBsb2dpY2FsIGxvZyBibG9jayAqLwogCWludAkJCWxfcHJldl9ibG9jazsgICAvKiBwcmV2aW91cyBsb2dpY2FsIGxvZyBibG9jayAqLwogCi0JLyogVGhlIGZvbGxvd2luZyBibG9jayBvZiBmaWVsZHMgYXJlIGNoYW5nZWQgd2hpbGUgaG9sZGluZyBncmFudF9sb2NrICovCi0Jc3BpbmxvY2tfdAkJbF9ncmFudF9sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7Ci0JeGxvZ190aWNrZXRfdAkJKmxfcmVzZXJ2ZV9oZWFkcTsKLQl4bG9nX3RpY2tldF90CQkqbF93cml0ZV9oZWFkcTsKLQlpbnQJCQlsX2dyYW50X3Jlc2VydmVfY3ljbGU7Ci0JaW50CQkJbF9ncmFudF9yZXNlcnZlX2J5dGVzOwotCWludAkJCWxfZ3JhbnRfd3JpdGVfY3ljbGU7Ci0JaW50CQkJbF9ncmFudF93cml0ZV9ieXRlczsKKwkvKgorCSAqIGxfbGFzdF9zeW5jX2xzbiBhbmQgbF90YWlsX2xzbiBhcmUgYXRvbWljcyBzbyB0aGV5IGNhbiBiZSBzZXQgYW5kCisJICogcmVhZCB3aXRob3V0IG5lZWRpbmcgdG8gaG9sZCBzcGVjaWZpYyBsb2Nrcy4gVG8gYXZvaWQgb3BlcmF0aW9ucworCSAqIGNvbnRlbmRpbmcgd2l0aCBvdGhlciBob3Qgb2JqZWN0cywgcGxhY2UgZWFjaCBvZiB0aGVtIG9uIGEgc2VwYXJhdGUKKwkgKiBjYWNoZWxpbmUuCisJICovCisJLyogbHNuIG9mIGxhc3QgTFIgb24gZGlzayAqLworCWF0b21pYzY0X3QJCWxfbGFzdF9zeW5jX2xzbiBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCS8qIGxzbiBvZiAxc3QgTFIgd2l0aCB1bmZsdXNoZWQgKiBidWZmZXJzICovCisJYXRvbWljNjRfdAkJbF90YWlsX2xzbiBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCisJLyoKKwkgKiB0aWNrZXQgZ3JhbnQgbG9ja3MsIHF1ZXVlcyBhbmQgYWNjb3VudGluZyBoYXZlIHRoZWlyIG93biBjYWNobGluZXMKKwkgKiBhcyB0aGVzZSBhcmUgcXVpdGUgaG90IGFuZCBjYW4gYmUgb3BlcmF0ZWQgb24gY29uY3VycmVudGx5LgorCSAqLworCXNwaW5sb2NrX3QJCWxfZ3JhbnRfcmVzZXJ2ZV9sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisJc3RydWN0IGxpc3RfaGVhZAlsX3Jlc2VydmVxOworCWF0b21pYzY0X3QJCWxfZ3JhbnRfcmVzZXJ2ZV9oZWFkOworCisJc3BpbmxvY2tfdAkJbF9ncmFudF93cml0ZV9sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisJc3RydWN0IGxpc3RfaGVhZAlsX3dyaXRlcTsKKwlhdG9taWM2NF90CQlsX2dyYW50X3dyaXRlX2hlYWQ7CiAKIAkvKiBUaGUgZm9sbG93aW5nIGZpZWxkIGFyZSB1c2VkIGZvciBkZWJ1Z2dpbmc7IG5lZWQgdG8gaG9sZCBpY2xvZ2xvY2sgKi8KICNpZmRlZiBERUJVRwpAQCAtNTM0LDYgKzU0MCw5IEBACiAKIH0geGxvZ190OwogCisjZGVmaW5lIFhMT0dfQlVGX0NBTkNFTF9CVUNLRVQobG9nLCBibGtubykgXAorCSgobG9nKS0+bF9idWZfY2FuY2VsX3RhYmxlICsgKChfX3VpbnQ2NF90KWJsa25vICUgWExPR19CQ19UQUJMRV9TSVpFKSkKKwogI2RlZmluZSBYTE9HX0ZPUkNFRF9TSFVURE9XTihsb2cpCSgobG9nKS0+bF9mbGFncyAmIFhMT0dfSU9fRVJST1IpCiAKIC8qIGNvbW1vbiByb3V0aW5lcyAqLwpAQCAtNTYyLDYgKzU3MSw2MSBAQAogCQkJCXhsb2dfaW5fY29yZV90ICoqY29tbWl0X2ljbG9nLCB1aW50IGZsYWdzKTsKIAogLyoKKyAqIFdoZW4gd2UgY3JhY2sgYW4gYXRvbWljIExTTiwgd2Ugc2FtcGxlIGl0IGZpcnN0IHNvIHRoYXQgdGhlIHZhbHVlIHdpbGwgbm90CisgKiBjaGFuZ2Ugd2hpbGUgd2UgYXJlIGNyYWNraW5nIGl0IGludG8gdGhlIGNvbXBvbmVudCB2YWx1ZXMuIFRoaXMgbWVhbnMgd2UKKyAqIHdpbGwgYWx3YXlzIGdldCBjb25zaXN0ZW50IGNvbXBvbmVudCB2YWx1ZXMgdG8gd29yayBmcm9tLiBUaGlzIHNob3VsZCBhbHdheXMKKyAqIGJlIHVzZWQgdG8gc21hcGxlIGFuZCBjcmFjayBMU05zIHRhaHQgYXJlIHN0b3JlZCBhbmQgdXBkYXRlZCBpbiBhdG9taWMKKyAqIHZhcmlhYmxlcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit4bG9nX2NyYWNrX2F0b21pY19sc24oYXRvbWljNjRfdCAqbHNuLCB1aW50ICpjeWNsZSwgdWludCAqYmxvY2spCit7CisJeGZzX2xzbl90IHZhbCA9IGF0b21pYzY0X3JlYWQobHNuKTsKKworCSpjeWNsZSA9IENZQ0xFX0xTTih2YWwpOworCSpibG9jayA9IEJMT0NLX0xTTih2YWwpOworfQorCisvKgorICogQ2FsY3VsYXRlIGFuZCBhc3NpZ24gYSB2YWx1ZSB0byBhbiBhdG9taWMgTFNOIHZhcmlhYmxlIGZyb20gY29tcG9uZW50IHBpZWNlcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit4bG9nX2Fzc2lnbl9hdG9taWNfbHNuKGF0b21pYzY0X3QgKmxzbiwgdWludCBjeWNsZSwgdWludCBibG9jaykKK3sKKwlhdG9taWM2NF9zZXQobHNuLCB4bG9nX2Fzc2lnbl9sc24oY3ljbGUsIGJsb2NrKSk7Cit9CisKKy8qCisgKiBXaGVuIHdlIGNyYWNrIHRoZSBncmFudCBoZWFkLCB3ZSBzYW1wbGUgaXQgZmlyc3Qgc28gdGhhdCB0aGUgdmFsdWUgd2lsbCBub3QKKyAqIGNoYW5nZSB3aGlsZSB3ZSBhcmUgY3JhY2tpbmcgaXQgaW50byB0aGUgY29tcG9uZW50IHZhbHVlcy4gVGhpcyBtZWFucyB3ZQorICogd2lsbCBhbHdheXMgZ2V0IGNvbnNpc3RlbnQgY29tcG9uZW50IHZhbHVlcyB0byB3b3JrIGZyb20uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoreGxvZ19jcmFja19ncmFudF9oZWFkX3ZhbChpbnQ2NF90IHZhbCwgaW50ICpjeWNsZSwgaW50ICpzcGFjZSkKK3sKKwkqY3ljbGUgPSB2YWwgPj4gMzI7CisJKnNwYWNlID0gdmFsICYgMHhmZmZmZmZmZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit4bG9nX2NyYWNrX2dyYW50X2hlYWQoYXRvbWljNjRfdCAqaGVhZCwgaW50ICpjeWNsZSwgaW50ICpzcGFjZSkKK3sKKwl4bG9nX2NyYWNrX2dyYW50X2hlYWRfdmFsKGF0b21pYzY0X3JlYWQoaGVhZCksIGN5Y2xlLCBzcGFjZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50NjRfdAoreGxvZ19hc3NpZ25fZ3JhbnRfaGVhZF92YWwoaW50IGN5Y2xlLCBpbnQgc3BhY2UpCit7CisJcmV0dXJuICgoaW50NjRfdCljeWNsZSA8PCAzMikgfCBzcGFjZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit4bG9nX2Fzc2lnbl9ncmFudF9oZWFkKGF0b21pYzY0X3QgKmhlYWQsIGludCBjeWNsZSwgaW50IHNwYWNlKQoreworCWF0b21pYzY0X3NldChoZWFkLCB4bG9nX2Fzc2lnbl9ncmFudF9oZWFkX3ZhbChjeWNsZSwgc3BhY2UpKTsKK30KKworLyoKICAqIENvbW1pdHRlZCBJdGVtIExpc3QgaW50ZXJmYWNlcwogICovCiBpbnQJeGxvZ19jaWxfaW5pdChzdHJ1Y3QgbG9nICpsb2cpOwpAQCAtNTg1LDYgKzY0OSwyMSBAQAogICovCiAjZGVmaW5lIFhMT0dfVU5NT1VOVF9SRUNfVFlQRQkoLTFVKQogCisvKgorICogV3JhcHBlciBmdW5jdGlvbiBmb3Igd2FpdGluZyBvbiBhIHdhaXQgcXVldWUgc2VyaWFsaXNlZCBhZ2FpbnN0IHdha2V1cHMKKyAqIGJ5IGEgc3BpbmxvY2suIFRoaXMgbWF0Y2hlcyB0aGUgc2VtYW50aWNzIG9mIGFsbCB0aGUgd2FpdCBxdWV1ZXMgdXNlZCBpbiB0aGUKKyAqIGxvZyBjb2RlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgeGxvZ193YWl0KHdhaXRfcXVldWVfaGVhZF90ICp3cSwgc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSh3cSwgJndhaXQpOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCXNwaW5fdW5sb2NrKGxvY2spOworCXNjaGVkdWxlKCk7CisJcmVtb3ZlX3dhaXRfcXVldWUod3EsICZ3YWl0KTsKK30KICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgkvKiBfX1hGU19MT0dfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwppbmRleCA5NjZkM2Y5Li4yMDRkOGU1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKKysrIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCkBAIC01Myw2ICs1MywxNyBAQAogI2VuZGlmCiAKIC8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGR1cmluZyByZWNvdmVyeSB0byByZWNvcmQgdGhlIGJ1ZiBsb2cgaXRlbXMgd2hpY2gKKyAqIGhhdmUgYmVlbiBjYW5jZWxlZCBhbmQgc2hvdWxkIG5vdCBiZSByZXBsYXllZC4KKyAqLworc3RydWN0IHhmc19idWZfY2FuY2VsIHsKKwl4ZnNfZGFkZHJfdAkJYmNfYmxrbm87CisJdWludAkJCWJjX2xlbjsKKwlpbnQJCQliY19yZWZjb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWJjX2xpc3Q7Cit9OworCisvKgogICogU2VjdG9yIGFsaWduZWQgYnVmZmVyIHJvdXRpbmVzIGZvciBidWZmZXIgY3JlYXRlL3JlYWQvd3JpdGUvYWNjZXNzCiAgKi8KIApAQCAtOTI1LDEyICs5MzYsMTIgQEAKIAlsb2ctPmxfY3Vycl9jeWNsZSA9IGJlMzJfdG9fY3B1KHJoZWFkLT5oX2N5Y2xlKTsKIAlpZiAoZm91bmQgPT0gMikKIAkJbG9nLT5sX2N1cnJfY3ljbGUrKzsKLQlsb2ctPmxfdGFpbF9sc24gPSBiZTY0X3RvX2NwdShyaGVhZC0+aF90YWlsX2xzbik7Ci0JbG9nLT5sX2xhc3Rfc3luY19sc24gPSBiZTY0X3RvX2NwdShyaGVhZC0+aF9sc24pOwotCWxvZy0+bF9ncmFudF9yZXNlcnZlX2N5Y2xlID0gbG9nLT5sX2N1cnJfY3ljbGU7Ci0JbG9nLT5sX2dyYW50X3Jlc2VydmVfYnl0ZXMgPSBCQlRPQihsb2ctPmxfY3Vycl9ibG9jayk7Ci0JbG9nLT5sX2dyYW50X3dyaXRlX2N5Y2xlID0gbG9nLT5sX2N1cnJfY3ljbGU7Ci0JbG9nLT5sX2dyYW50X3dyaXRlX2J5dGVzID0gQkJUT0IobG9nLT5sX2N1cnJfYmxvY2spOworCWF0b21pYzY0X3NldCgmbG9nLT5sX3RhaWxfbHNuLCBiZTY0X3RvX2NwdShyaGVhZC0+aF90YWlsX2xzbikpOworCWF0b21pYzY0X3NldCgmbG9nLT5sX2xhc3Rfc3luY19sc24sIGJlNjRfdG9fY3B1KHJoZWFkLT5oX2xzbikpOworCXhsb2dfYXNzaWduX2dyYW50X2hlYWQoJmxvZy0+bF9ncmFudF9yZXNlcnZlX2hlYWQsIGxvZy0+bF9jdXJyX2N5Y2xlLAorCQkJCQlCQlRPQihsb2ctPmxfY3Vycl9ibG9jaykpOworCXhsb2dfYXNzaWduX2dyYW50X2hlYWQoJmxvZy0+bF9ncmFudF93cml0ZV9oZWFkLCBsb2ctPmxfY3Vycl9jeWNsZSwKKwkJCQkJQkJUT0IobG9nLT5sX2N1cnJfYmxvY2spKTsKIAogCS8qCiAJICogTG9vayBmb3IgdW5tb3VudCByZWNvcmQuICBJZiB3ZSBmaW5kIGl0LCB0aGVuIHdlIGtub3cgdGhlcmUKQEAgLTk2MCw3ICs5NzEsNyBAQAogCX0KIAlhZnRlcl91bW91bnRfYmxrID0gKGkgKyBoYmxrcyArIChpbnQpCiAJCUJUT0JCKGJlMzJfdG9fY3B1KHJoZWFkLT5oX2xlbikpKSAlIGxvZy0+bF9sb2dCQnNpemU7Ci0JdGFpbF9sc24gPSBsb2ctPmxfdGFpbF9sc247CisJdGFpbF9sc24gPSBhdG9taWM2NF9yZWFkKCZsb2ctPmxfdGFpbF9sc24pOwogCWlmICgqaGVhZF9ibGsgPT0gYWZ0ZXJfdW1vdW50X2JsayAmJgogCSAgICBiZTMyX3RvX2NwdShyaGVhZC0+aF9udW1fbG9nb3BzKSA9PSAxKSB7CiAJCXVtb3VudF9kYXRhX2JsayA9IChpICsgaGJsa3MpICUgbG9nLT5sX2xvZ0JCc2l6ZTsKQEAgLTk3NSwxMiArOTg2LDEwIEBACiAJCQkgKiBsb2cgcmVjb3JkcyB3aWxsIHBvaW50IHJlY292ZXJ5IHRvIGFmdGVyIHRoZQogCQkJICogY3VycmVudCB1bm1vdW50IHJlY29yZC4KIAkJCSAqLwotCQkJbG9nLT5sX3RhaWxfbHNuID0KLQkJCQl4bG9nX2Fzc2lnbl9sc24obG9nLT5sX2N1cnJfY3ljbGUsCi0JCQkJCQlhZnRlcl91bW91bnRfYmxrKTsKLQkJCWxvZy0+bF9sYXN0X3N5bmNfbHNuID0KLQkJCQl4bG9nX2Fzc2lnbl9sc24obG9nLT5sX2N1cnJfY3ljbGUsCi0JCQkJCQlhZnRlcl91bW91bnRfYmxrKTsKKwkJCXhsb2dfYXNzaWduX2F0b21pY19sc24oJmxvZy0+bF90YWlsX2xzbiwKKwkJCQkJbG9nLT5sX2N1cnJfY3ljbGUsIGFmdGVyX3Vtb3VudF9ibGspOworCQkJeGxvZ19hc3NpZ25fYXRvbWljX2xzbigmbG9nLT5sX2xhc3Rfc3luY19sc24sCisJCQkJCWxvZy0+bF9jdXJyX2N5Y2xlLCBhZnRlcl91bW91bnRfYmxrKTsKIAkJCSp0YWlsX2JsayA9IGFmdGVyX3Vtb3VudF9ibGs7CiAKIAkJCS8qCkBAIC0xNjA1LDgyICsxNjE0LDQ1IEBACiAgKiByZWNvcmQgaW4gdGhlIHRhYmxlIHRvIHRlbGwgdXMgaG93IG1hbnkgdGltZXMgd2UgZXhwZWN0IHRvIHNlZSB0aGlzCiAgKiByZWNvcmQgZHVyaW5nIHRoZSBzZWNvbmQgcGFzcy4KICAqLwotU1RBVElDIHZvaWQKLXhsb2dfcmVjb3Zlcl9kb19idWZmZXJfcGFzczEoCi0JeGxvZ190CQkJKmxvZywKLQl4ZnNfYnVmX2xvZ19mb3JtYXRfdAkqYnVmX2YpCitTVEFUSUMgaW50Cit4bG9nX3JlY292ZXJfYnVmZmVyX3Bhc3MxKAorCXN0cnVjdCBsb2cJCSpsb2csCisJeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSkKIHsKLQl4ZnNfYnVmX2NhbmNlbF90CSpiY3A7Ci0JeGZzX2J1Zl9jYW5jZWxfdAkqbmV4dHA7Ci0JeGZzX2J1Zl9jYW5jZWxfdAkqcHJldnA7Ci0JeGZzX2J1Zl9jYW5jZWxfdAkqKmJ1Y2tldDsKLQl4ZnNfZGFkZHJfdAkJYmxrbm8gPSAwOwotCXVpbnQJCQlsZW4gPSAwOwotCXVzaG9ydAkJCWZsYWdzID0gMDsKLQotCXN3aXRjaCAoYnVmX2YtPmJsZl90eXBlKSB7Ci0JY2FzZSBYRlNfTElfQlVGOgotCQlibGtubyA9IGJ1Zl9mLT5ibGZfYmxrbm87Ci0JCWxlbiA9IGJ1Zl9mLT5ibGZfbGVuOwotCQlmbGFncyA9IGJ1Zl9mLT5ibGZfZmxhZ3M7Ci0JCWJyZWFrOwotCX0KKwl4ZnNfYnVmX2xvZ19mb3JtYXRfdAkqYnVmX2YgPSBpdGVtLT5yaV9idWZbMF0uaV9hZGRyOworCXN0cnVjdCBsaXN0X2hlYWQJKmJ1Y2tldDsKKwlzdHJ1Y3QgeGZzX2J1Zl9jYW5jZWwJKmJjcDsKIAogCS8qCiAJICogSWYgdGhpcyBpc24ndCBhIGNhbmNlbCBidWZmZXIgaXRlbSwgdGhlbiBqdXN0IHJldHVybi4KIAkgKi8KLQlpZiAoIShmbGFncyAmIFhGU19CTEZfQ0FOQ0VMKSkgeworCWlmICghKGJ1Zl9mLT5ibGZfZmxhZ3MgJiBYRlNfQkxGX0NBTkNFTCkpIHsKIAkJdHJhY2VfeGZzX2xvZ19yZWNvdmVyX2J1Zl9ub3RfY2FuY2VsKGxvZywgYnVmX2YpOwotCQlyZXR1cm47CisJCXJldHVybiAwOwogCX0KIAogCS8qCi0JICogSW5zZXJ0IGFuIHhmc19idWZfY2FuY2VsIHJlY29yZCBpbnRvIHRoZSBoYXNoIHRhYmxlIG9mCi0JICogdGhlbS4gIElmIHRoZXJlIGlzIGFscmVhZHkgYW4gaWRlbnRpY2FsIHJlY29yZCwgYnVtcAotCSAqIGl0cyByZWZlcmVuY2UgY291bnQuCisJICogSW5zZXJ0IGFuIHhmc19idWZfY2FuY2VsIHJlY29yZCBpbnRvIHRoZSBoYXNoIHRhYmxlIG9mIHRoZW0uCisJICogSWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBpZGVudGljYWwgcmVjb3JkLCBidW1wIGl0cyByZWZlcmVuY2UgY291bnQuCiAJICovCi0JYnVja2V0ID0gJmxvZy0+bF9idWZfY2FuY2VsX3RhYmxlWyhfX3VpbnQ2NF90KWJsa25vICUKLQkJCQkJICBYTE9HX0JDX1RBQkxFX1NJWkVdOwotCS8qCi0JICogSWYgdGhlIGhhc2ggYnVja2V0IGlzIGVtcHR5IHRoZW4ganVzdCBpbnNlcnQgYSBuZXcgcmVjb3JkIGludG8KLQkgKiB0aGUgYnVja2V0LgotCSAqLwotCWlmICgqYnVja2V0ID09IE5VTEwpIHsKLQkJYmNwID0gKHhmc19idWZfY2FuY2VsX3QgKilrbWVtX2FsbG9jKHNpemVvZih4ZnNfYnVmX2NhbmNlbF90KSwKLQkJCQkJCSAgICAgS01fU0xFRVApOwotCQliY3AtPmJjX2Jsa25vID0gYmxrbm87Ci0JCWJjcC0+YmNfbGVuID0gbGVuOwotCQliY3AtPmJjX3JlZmNvdW50ID0gMTsKLQkJYmNwLT5iY19uZXh0ID0gTlVMTDsKLQkJKmJ1Y2tldCA9IGJjcDsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogVGhlIGhhc2ggYnVja2V0IGlzIG5vdCBlbXB0eSwgc28gc2VhcmNoIGZvciBkdXBsaWNhdGVzIG9mIG91cgotCSAqIHJlY29yZC4gIElmIHdlIGZpbmQgb25lIHRoZW0ganVzdCBidW1wIGl0cyByZWZjb3VudC4gIElmIG5vdAotCSAqIHRoZW4gYWRkIHVzIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuCi0JICovCi0JcHJldnAgPSBOVUxMOwotCW5leHRwID0gKmJ1Y2tldDsKLQl3aGlsZSAobmV4dHAgIT0gTlVMTCkgewotCQlpZiAobmV4dHAtPmJjX2Jsa25vID09IGJsa25vICYmIG5leHRwLT5iY19sZW4gPT0gbGVuKSB7Ci0JCQluZXh0cC0+YmNfcmVmY291bnQrKzsKKwlidWNrZXQgPSBYTE9HX0JVRl9DQU5DRUxfQlVDS0VUKGxvZywgYnVmX2YtPmJsZl9ibGtubyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShiY3AsIGJ1Y2tldCwgYmNfbGlzdCkgeworCQlpZiAoYmNwLT5iY19ibGtubyA9PSBidWZfZi0+YmxmX2Jsa25vICYmCisJCSAgICBiY3AtPmJjX2xlbiA9PSBidWZfZi0+YmxmX2xlbikgeworCQkJYmNwLT5iY19yZWZjb3VudCsrOwogCQkJdHJhY2VfeGZzX2xvZ19yZWNvdmVyX2J1Zl9jYW5jZWxfcmVmX2luYyhsb2csIGJ1Zl9mKTsKLQkJCXJldHVybjsKKwkJCXJldHVybiAwOwogCQl9Ci0JCXByZXZwID0gbmV4dHA7Ci0JCW5leHRwID0gbmV4dHAtPmJjX25leHQ7CiAJfQotCUFTU0VSVChwcmV2cCAhPSBOVUxMKTsKLQliY3AgPSAoeGZzX2J1Zl9jYW5jZWxfdCAqKWttZW1fYWxsb2Moc2l6ZW9mKHhmc19idWZfY2FuY2VsX3QpLAotCQkJCQkgICAgIEtNX1NMRUVQKTsKLQliY3AtPmJjX2Jsa25vID0gYmxrbm87Ci0JYmNwLT5iY19sZW4gPSBsZW47CisKKwliY3AgPSBrbWVtX2FsbG9jKHNpemVvZihzdHJ1Y3QgeGZzX2J1Zl9jYW5jZWwpLCBLTV9TTEVFUCk7CisJYmNwLT5iY19ibGtubyA9IGJ1Zl9mLT5ibGZfYmxrbm87CisJYmNwLT5iY19sZW4gPSBidWZfZi0+YmxmX2xlbjsKIAliY3AtPmJjX3JlZmNvdW50ID0gMTsKLQliY3AtPmJjX25leHQgPSBOVUxMOwotCXByZXZwLT5iY19uZXh0ID0gYmNwOworCWxpc3RfYWRkX3RhaWwoJmJjcC0+YmNfbGlzdCwgYnVja2V0KTsKKwogCXRyYWNlX3hmc19sb2dfcmVjb3Zlcl9idWZfY2FuY2VsX2FkZChsb2csIGJ1Zl9mKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTE2OTgsMTQgKzE2NzAsMTMgQEAKICAqLwogU1RBVElDIGludAogeGxvZ19jaGVja19idWZmZXJfY2FuY2VsbGVkKAotCXhsb2dfdAkJCSpsb2csCisJc3RydWN0IGxvZwkJKmxvZywKIAl4ZnNfZGFkZHJfdAkJYmxrbm8sCiAJdWludAkJCWxlbiwKIAl1c2hvcnQJCQlmbGFncykKIHsKLQl4ZnNfYnVmX2NhbmNlbF90CSpiY3A7Ci0JeGZzX2J1Zl9jYW5jZWxfdAkqcHJldnA7Ci0JeGZzX2J1Zl9jYW5jZWxfdAkqKmJ1Y2tldDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSpidWNrZXQ7CisJc3RydWN0IHhmc19idWZfY2FuY2VsCSpiY3A7CiAKIAlpZiAobG9nLT5sX2J1Zl9jYW5jZWxfdGFibGUgPT0gTlVMTCkgewogCQkvKgpAQCAtMTcxNiwxMjggKzE2ODcsNzAgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JYnVja2V0ID0gJmxvZy0+bF9idWZfY2FuY2VsX3RhYmxlWyhfX3VpbnQ2NF90KWJsa25vICUKLQkJCQkJICBYTE9HX0JDX1RBQkxFX1NJWkVdOwotCWJjcCA9ICpidWNrZXQ7Ci0JaWYgKGJjcCA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIHRhYmxlIGJ1aWx0Ci0JCSAqIGluIHBhc3Mgb25lLCBzbyB0aGlzIGJ1ZmZlciBoYXMgbm90IGJlZW4gY2FuY2VsbGVkLgotCQkgKi8KLQkJQVNTRVJUKCEoZmxhZ3MgJiBYRlNfQkxGX0NBTkNFTCkpOwotCQlyZXR1cm4gMDsKKwkvKgorCSAqIFNlYXJjaCBmb3IgYW4gZW50cnkgaW4gdGhlICBjYW5jZWwgdGFibGUgdGhhdCBtYXRjaGVzIG91ciBidWZmZXIuCisJICovCisJYnVja2V0ID0gWExPR19CVUZfQ0FOQ0VMX0JVQ0tFVChsb2csIGJsa25vKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJjcCwgYnVja2V0LCBiY19saXN0KSB7CisJCWlmIChiY3AtPmJjX2Jsa25vID09IGJsa25vICYmIGJjcC0+YmNfbGVuID09IGxlbikKKwkJCWdvdG8gZm91bmQ7CiAJfQogCiAJLyoKLQkgKiBTZWFyY2ggZm9yIGFuIGVudHJ5IGluIHRoZSBidWZmZXIgY2FuY2VsIHRhYmxlIHRoYXQKLQkgKiBtYXRjaGVzIG91ciBidWZmZXIuCi0JICovCi0JcHJldnAgPSBOVUxMOwotCXdoaWxlIChiY3AgIT0gTlVMTCkgewotCQlpZiAoYmNwLT5iY19ibGtubyA9PSBibGtubyAmJiBiY3AtPmJjX2xlbiA9PSBsZW4pIHsKLQkJCS8qCi0JCQkgKiBXZSd2ZSBnbyBhIG1hdGNoLCBzbyByZXR1cm4gMSBzbyB0aGF0IHRoZQotCQkJICogcmVjb3Zlcnkgb2YgdGhpcyBidWZmZXIgaXMgY2FuY2VsbGVkLgotCQkJICogSWYgdGhpcyBidWZmZXIgaXMgYWN0dWFsbHkgYSBidWZmZXIgY2FuY2VsCi0JCQkgKiBsb2cgaXRlbSwgdGhlbiBkZWNyZW1lbnQgdGhlIHJlZmNvdW50IG9uIHRoZQotCQkJICogb25lIGluIHRoZSB0YWJsZSBhbmQgcmVtb3ZlIGl0IGlmIHRoaXMgaXMgdGhlCi0JCQkgKiBsYXN0IHJlZmVyZW5jZS4KLQkJCSAqLwotCQkJaWYgKGZsYWdzICYgWEZTX0JMRl9DQU5DRUwpIHsKLQkJCQliY3AtPmJjX3JlZmNvdW50LS07Ci0JCQkJaWYgKGJjcC0+YmNfcmVmY291bnQgPT0gMCkgewotCQkJCQlpZiAocHJldnAgPT0gTlVMTCkgewotCQkJCQkJKmJ1Y2tldCA9IGJjcC0+YmNfbmV4dDsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXByZXZwLT5iY19uZXh0ID0gYmNwLT5iY19uZXh0OwotCQkJCQl9Ci0JCQkJCWttZW1fZnJlZShiY3ApOwotCQkJCX0KLQkJCX0KLQkJCXJldHVybiAxOwotCQl9Ci0JCXByZXZwID0gYmNwOwotCQliY3AgPSBiY3AtPmJjX25leHQ7Ci0JfQotCS8qCi0JICogV2UgZGlkbid0IGZpbmQgYSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSB0YWJsZSwgc28KLQkgKiByZXR1cm4gMCBzbyB0aGF0IHRoZSBidWZmZXIgaXMgTk9UIGNhbmNlbGxlZC4KKwkgKiBXZSBkaWRuJ3QgZmluZCBhIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIHRhYmxlLCBzbyByZXR1cm4gMCBzbworCSAqIHRoYXQgdGhlIGJ1ZmZlciBpcyBOT1QgY2FuY2VsbGVkLgogCSAqLwogCUFTU0VSVCghKGZsYWdzICYgWEZTX0JMRl9DQU5DRUwpKTsKIAlyZXR1cm4gMDsKLX0KIAotU1RBVElDIGludAoteGxvZ19yZWNvdmVyX2RvX2J1ZmZlcl9wYXNzMigKLQl4bG9nX3QJCQkqbG9nLAotCXhmc19idWZfbG9nX2Zvcm1hdF90CSpidWZfZikKLXsKLQl4ZnNfZGFkZHJfdAkJYmxrbm8gPSAwOwotCXVzaG9ydAkJCWZsYWdzID0gMDsKLQl1aW50CQkJbGVuID0gMDsKLQotCXN3aXRjaCAoYnVmX2YtPmJsZl90eXBlKSB7Ci0JY2FzZSBYRlNfTElfQlVGOgotCQlibGtubyA9IGJ1Zl9mLT5ibGZfYmxrbm87Ci0JCWZsYWdzID0gYnVmX2YtPmJsZl9mbGFnczsKLQkJbGVuID0gYnVmX2YtPmJsZl9sZW47Ci0JCWJyZWFrOworZm91bmQ6CisJLyoKKwkgKiBXZSd2ZSBnbyBhIG1hdGNoLCBzbyByZXR1cm4gMSBzbyB0aGF0IHRoZSByZWNvdmVyeSBvZiB0aGlzIGJ1ZmZlcgorCSAqIGlzIGNhbmNlbGxlZC4gIElmIHRoaXMgYnVmZmVyIGlzIGFjdHVhbGx5IGEgYnVmZmVyIGNhbmNlbCBsb2cKKwkgKiBpdGVtLCB0aGVuIGRlY3JlbWVudCB0aGUgcmVmY291bnQgb24gdGhlIG9uZSBpbiB0aGUgdGFibGUgYW5kCisJICogcmVtb3ZlIGl0IGlmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLgorCSAqLworCWlmIChmbGFncyAmIFhGU19CTEZfQ0FOQ0VMKSB7CisJCWlmICgtLWJjcC0+YmNfcmVmY291bnQgPT0gMCkgeworCQkJbGlzdF9kZWwoJmJjcC0+YmNfbGlzdCk7CisJCQlrbWVtX2ZyZWUoYmNwKTsKKwkJfQogCX0KLQotCXJldHVybiB4bG9nX2NoZWNrX2J1ZmZlcl9jYW5jZWxsZWQobG9nLCBibGtubywgbGVuLCBmbGFncyk7CisJcmV0dXJuIDE7CiB9CiAKIC8qCi0gKiBQZXJmb3JtIHJlY292ZXJ5IGZvciBhIGJ1ZmZlciBmdWxsIG9mIGlub2Rlcy4gIEluIHRoZXNlIGJ1ZmZlcnMsCi0gKiB0aGUgb25seSBkYXRhIHdoaWNoIHNob3VsZCBiZSByZWNvdmVyZWQgaXMgdGhhdCB3aGljaCBjb3JyZXNwb25kcwotICogdG8gdGhlIGRpX25leHRfdW5saW5rZWQgcG9pbnRlcnMgaW4gdGhlIG9uIGRpc2sgaW5vZGUgc3RydWN0dXJlcy4KLSAqIFRoZSByZXN0IG9mIHRoZSBkYXRhIGZvciB0aGUgaW5vZGVzIGlzIGFsd2F5cyBsb2dnZWQgdGhyb3VnaCB0aGUKLSAqIGlub2RlcyB0aGVtc2VsdmVzIHJhdGhlciB0aGFuIHRoZSBpbm9kZSBidWZmZXIgYW5kIGlzIHJlY292ZXJlZAotICogaW4geGxvZ19yZWNvdmVyX2RvX2lub2RlX3RyYW5zKCkuCisgKiBQZXJmb3JtIHJlY292ZXJ5IGZvciBhIGJ1ZmZlciBmdWxsIG9mIGlub2Rlcy4gIEluIHRoZXNlIGJ1ZmZlcnMsIHRoZSBvbmx5CisgKiBkYXRhIHdoaWNoIHNob3VsZCBiZSByZWNvdmVyZWQgaXMgdGhhdCB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUKKyAqIGRpX25leHRfdW5saW5rZWQgcG9pbnRlcnMgaW4gdGhlIG9uIGRpc2sgaW5vZGUgc3RydWN0dXJlcy4gIFRoZSByZXN0IG9mIHRoZQorICogZGF0YSBmb3IgdGhlIGlub2RlcyBpcyBhbHdheXMgbG9nZ2VkIHRocm91Z2ggdGhlIGlub2RlcyB0aGVtc2VsdmVzIHJhdGhlcgorICogdGhhbiB0aGUgaW5vZGUgYnVmZmVyIGFuZCBpcyByZWNvdmVyZWQgaW4geGxvZ19yZWNvdmVyX2lub2RlX3Bhc3MyKCkuCiAgKgotICogVGhlIG9ubHkgdGltZSB3aGVuIGJ1ZmZlcnMgZnVsbCBvZiBpbm9kZXMgYXJlIGZ1bGx5IHJlY292ZXJlZCBpcwotICogd2hlbiB0aGUgYnVmZmVyIGlzIGZ1bGwgb2YgbmV3bHkgYWxsb2NhdGVkIGlub2Rlcy4gIEluIHRoaXMgY2FzZQotICogdGhlIGJ1ZmZlciB3aWxsIG5vdCBiZSBtYXJrZWQgYXMgYW4gaW5vZGUgYnVmZmVyIGFuZCBzbyB3aWxsIGJlCi0gKiBzZW50IHRvIHhsb2dfcmVjb3Zlcl9kb19yZWdfYnVmZmVyKCkgYmVsb3cgZHVyaW5nIHJlY292ZXJ5LgorICogVGhlIG9ubHkgdGltZSB3aGVuIGJ1ZmZlcnMgZnVsbCBvZiBpbm9kZXMgYXJlIGZ1bGx5IHJlY292ZXJlZCBpcyB3aGVuIHRoZQorICogYnVmZmVyIGlzIGZ1bGwgb2YgbmV3bHkgYWxsb2NhdGVkIGlub2Rlcy4gIEluIHRoaXMgY2FzZSB0aGUgYnVmZmVyIHdpbGwKKyAqIG5vdCBiZSBtYXJrZWQgYXMgYW4gaW5vZGUgYnVmZmVyIGFuZCBzbyB3aWxsIGJlIHNlbnQgdG8KKyAqIHhsb2dfcmVjb3Zlcl9kb19yZWdfYnVmZmVyKCkgYmVsb3cgZHVyaW5nIHJlY292ZXJ5LgogICovCiBTVEFUSUMgaW50CiB4bG9nX3JlY292ZXJfZG9faW5vZGVfYnVmZmVyKAotCXhmc19tb3VudF90CQkqbXAsCisJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSwKLQl4ZnNfYnVmX3QJCSpicCwKKwlzdHJ1Y3QgeGZzX2J1ZgkJKmJwLAogCXhmc19idWZfbG9nX2Zvcm1hdF90CSpidWZfZikKIHsKIAlpbnQJCQlpOwotCWludAkJCWl0ZW1faW5kZXg7Ci0JaW50CQkJYml0OwotCWludAkJCW5iaXRzOwotCWludAkJCXJlZ19idWZfb2Zmc2V0OwotCWludAkJCXJlZ19idWZfYnl0ZXM7CisJaW50CQkJaXRlbV9pbmRleCA9IDA7CisJaW50CQkJYml0ID0gMDsKKwlpbnQJCQluYml0cyA9IDA7CisJaW50CQkJcmVnX2J1Zl9vZmZzZXQgPSAwOworCWludAkJCXJlZ19idWZfYnl0ZXMgPSAwOwogCWludAkJCW5leHRfdW5saW5rZWRfb2Zmc2V0OwogCWludAkJCWlub2Rlc19wZXJfYnVmOwogCXhmc19hZ2lub190CQkqbG9nZ2VkX25leHRwOwogCXhmc19hZ2lub190CQkqYnVmZmVyX25leHRwOwotCXVuc2lnbmVkIGludAkJKmRhdGFfbWFwID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQJCW1hcF9zaXplID0gMDsKIAogCXRyYWNlX3hmc19sb2dfcmVjb3Zlcl9idWZfaW5vZGVfYnVmKG1wLT5tX2xvZywgYnVmX2YpOwogCi0Jc3dpdGNoIChidWZfZi0+YmxmX3R5cGUpIHsKLQljYXNlIFhGU19MSV9CVUY6Ci0JCWRhdGFfbWFwID0gYnVmX2YtPmJsZl9kYXRhX21hcDsKLQkJbWFwX3NpemUgPSBidWZfZi0+YmxmX21hcF9zaXplOwotCQlicmVhazsKLQl9Ci0JLyoKLQkgKiBTZXQgdGhlIHZhcmlhYmxlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IHJlZ2lvbiB0bwotCSAqIDAgc28gdGhhdCB3ZSdsbCBpbml0aWFsaXplIHRoZW0gb24gdGhlIGZpcnN0IHBhc3MgdGhyb3VnaAotCSAqIHRoZSBsb29wLgotCSAqLwotCXJlZ19idWZfb2Zmc2V0ID0gMDsKLQlyZWdfYnVmX2J5dGVzID0gMDsKLQliaXQgPSAwOwotCW5iaXRzID0gMDsKLQlpdGVtX2luZGV4ID0gMDsKIAlpbm9kZXNfcGVyX2J1ZiA9IFhGU19CVUZfQ09VTlQoYnApID4+IG1wLT5tX3NiLnNiX2lub2RlbG9nOwogCWZvciAoaSA9IDA7IGkgPCBpbm9kZXNfcGVyX2J1ZjsgaSsrKSB7CiAJCW5leHRfdW5saW5rZWRfb2Zmc2V0ID0gKGkgKiBtcC0+bV9zYi5zYl9pbm9kZXNpemUpICsKQEAgLTE4NTIsMTggKzE3NjUsMTggQEAKIAkJCSAqIHRoZSBjdXJyZW50IGRpX25leHRfdW5saW5rZWQgZmllbGQuCiAJCQkgKi8KIAkJCWJpdCArPSBuYml0czsKLQkJCWJpdCA9IHhmc19uZXh0X2JpdChkYXRhX21hcCwgbWFwX3NpemUsIGJpdCk7CisJCQliaXQgPSB4ZnNfbmV4dF9iaXQoYnVmX2YtPmJsZl9kYXRhX21hcCwKKwkJCQkJICAgYnVmX2YtPmJsZl9tYXBfc2l6ZSwgYml0KTsKIAogCQkJLyoKIAkJCSAqIElmIHRoZXJlIGFyZSBubyBtb3JlIGxvZ2dlZCByZWdpb25zIGluIHRoZQogCQkJICogYnVmZmVyLCB0aGVuIHdlJ3JlIGRvbmUuCiAJCQkgKi8KLQkJCWlmIChiaXQgPT0gLTEpIHsKKwkJCWlmIChiaXQgPT0gLTEpCiAJCQkJcmV0dXJuIDA7Ci0JCQl9CiAKLQkJCW5iaXRzID0geGZzX2NvbnRpZ19iaXRzKGRhdGFfbWFwLCBtYXBfc2l6ZSwKLQkJCQkJCQkgYml0KTsKKwkJCW5iaXRzID0geGZzX2NvbnRpZ19iaXRzKGJ1Zl9mLT5ibGZfZGF0YV9tYXAsCisJCQkJCQlidWZfZi0+YmxmX21hcF9zaXplLCBiaXQpOwogCQkJQVNTRVJUKG5iaXRzID4gMCk7CiAJCQlyZWdfYnVmX29mZnNldCA9IGJpdCA8PCBYRlNfQkxGX1NISUZUOwogCQkJcmVnX2J1Zl9ieXRlcyA9IG5iaXRzIDw8IFhGU19CTEZfU0hJRlQ7CkBAIC0xODc1LDkgKzE3ODgsOCBAQAogCQkgKiBkaV9uZXh0X3VubGlua2VkIGZpZWxkLCB0aGVuIG1vdmUgb24gdG8gdGhlIG5leHQKIAkJICogZGlfbmV4dF91bmxpbmtlZCBmaWVsZC4KIAkJICovCi0JCWlmIChuZXh0X3VubGlua2VkX29mZnNldCA8IHJlZ19idWZfb2Zmc2V0KSB7CisJCWlmIChuZXh0X3VubGlua2VkX29mZnNldCA8IHJlZ19idWZfb2Zmc2V0KQogCQkJY29udGludWU7Ci0JCX0KIAogCQlBU1NFUlQoaXRlbS0+cmlfYnVmW2l0ZW1faW5kZXhdLmlfYWRkciAhPSBOVUxMKTsKIAkJQVNTRVJUKChpdGVtLT5yaV9idWZbaXRlbV9pbmRleF0uaV9sZW4gJSBYRlNfQkxGX0NIVU5LKSA9PSAwKTsKQEAgLTE5MTMsMzYgKzE4MjUsMjkgQEAKICAqIGdpdmVuIGJ1ZmZlci4gIFRoZSBiaXRtYXAgaW4gdGhlIGJ1ZiBsb2cgZm9ybWF0IHN0cnVjdHVyZSBpbmRpY2F0ZXMKICAqIHdoZXJlIHRvIHBsYWNlIHRoZSBsb2dnZWQgZGF0YS4KICAqLwotLypBUkdTVVNFRCovCiBTVEFUSUMgdm9pZAogeGxvZ19yZWNvdmVyX2RvX3JlZ19idWZmZXIoCiAJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSwKLQl4ZnNfYnVmX3QJCSpicCwKKwlzdHJ1Y3QgeGZzX2J1ZgkJKmJwLAogCXhmc19idWZfbG9nX2Zvcm1hdF90CSpidWZfZikKIHsKIAlpbnQJCQlpOwogCWludAkJCWJpdDsKIAlpbnQJCQluYml0czsKLQl1bnNpZ25lZCBpbnQJCSpkYXRhX21hcCA9IE5VTEw7Ci0JdW5zaWduZWQgaW50CQltYXBfc2l6ZSA9IDA7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgZXJyb3I7CiAKIAl0cmFjZV94ZnNfbG9nX3JlY292ZXJfYnVmX3JlZ19idWYobXAtPm1fbG9nLCBidWZfZik7CiAKLQlzd2l0Y2ggKGJ1Zl9mLT5ibGZfdHlwZSkgewotCWNhc2UgWEZTX0xJX0JVRjoKLQkJZGF0YV9tYXAgPSBidWZfZi0+YmxmX2RhdGFfbWFwOwotCQltYXBfc2l6ZSA9IGJ1Zl9mLT5ibGZfbWFwX3NpemU7Ci0JCWJyZWFrOwotCX0KIAliaXQgPSAwOwogCWkgPSAxOyAgLyogMCBpcyB0aGUgYnVmIGZvcm1hdCBzdHJ1Y3R1cmUgKi8KIAl3aGlsZSAoMSkgewotCQliaXQgPSB4ZnNfbmV4dF9iaXQoZGF0YV9tYXAsIG1hcF9zaXplLCBiaXQpOworCQliaXQgPSB4ZnNfbmV4dF9iaXQoYnVmX2YtPmJsZl9kYXRhX21hcCwKKwkJCQkgICBidWZfZi0+YmxmX21hcF9zaXplLCBiaXQpOwogCQlpZiAoYml0ID09IC0xKQogCQkJYnJlYWs7Ci0JCW5iaXRzID0geGZzX2NvbnRpZ19iaXRzKGRhdGFfbWFwLCBtYXBfc2l6ZSwgYml0KTsKKwkJbmJpdHMgPSB4ZnNfY29udGlnX2JpdHMoYnVmX2YtPmJsZl9kYXRhX21hcCwKKwkJCQkJYnVmX2YtPmJsZl9tYXBfc2l6ZSwgYml0KTsKIAkJQVNTRVJUKG5iaXRzID4gMCk7CiAJCUFTU0VSVChpdGVtLT5yaV9idWZbaV0uaV9hZGRyICE9IE5VTEwpOwogCQlBU1NFUlQoaXRlbS0+cmlfYnVmW2ldLmlfbGVuICUgWEZTX0JMRl9DSFVOSyA9PSAwKTsKQEAgLTIxNzYsNzcgKzIwODEsNDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSB0YWJsZSBvZiBjYW5jZWwgcmVjb3Jkcy4KICAqLwogU1RBVElDIGludAoteGxvZ19yZWNvdmVyX2RvX2J1ZmZlcl90cmFucygKK3hsb2dfcmVjb3Zlcl9idWZmZXJfcGFzczIoCiAJeGxvZ190CQkJKmxvZywKLQl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLAotCWludAkJCXBhc3MpCisJeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSkKIHsKIAl4ZnNfYnVmX2xvZ19mb3JtYXRfdAkqYnVmX2YgPSBpdGVtLT5yaV9idWZbMF0uaV9hZGRyOwotCXhmc19tb3VudF90CQkqbXA7CisJeGZzX21vdW50X3QJCSptcCA9IGxvZy0+bF9tcDsKIAl4ZnNfYnVmX3QJCSpicDsKIAlpbnQJCQllcnJvcjsKLQlpbnQJCQljYW5jZWw7Ci0JeGZzX2RhZGRyX3QJCWJsa25vOwotCWludAkJCWxlbjsKLQl1c2hvcnQJCQlmbGFnczsKIAl1aW50CQkJYnVmX2ZsYWdzOwogCi0JaWYgKHBhc3MgPT0gWExPR19SRUNPVkVSX1BBU1MxKSB7Ci0JCS8qCi0JCSAqIEluIHRoaXMgcGFzcyB3ZSdyZSBvbmx5IGxvb2tpbmcgZm9yIGJ1ZiBpdGVtcwotCQkgKiB3aXRoIHRoZSBYRlNfQkxGX0NBTkNFTCBiaXQgc2V0LgotCQkgKi8KLQkJeGxvZ19yZWNvdmVyX2RvX2J1ZmZlcl9wYXNzMShsb2csIGJ1Zl9mKTsKKwkvKgorCSAqIEluIHRoaXMgcGFzcyB3ZSBvbmx5IHdhbnQgdG8gcmVjb3ZlciBhbGwgdGhlIGJ1ZmZlcnMgd2hpY2ggaGF2ZQorCSAqIG5vdCBiZWVuIGNhbmNlbGxlZCBhbmQgYXJlIG5vdCBjYW5jZWxsYXRpb24gYnVmZmVycyB0aGVtc2VsdmVzLgorCSAqLworCWlmICh4bG9nX2NoZWNrX2J1ZmZlcl9jYW5jZWxsZWQobG9nLCBidWZfZi0+YmxmX2Jsa25vLAorCQkJYnVmX2YtPmJsZl9sZW4sIGJ1Zl9mLT5ibGZfZmxhZ3MpKSB7CisJCXRyYWNlX3hmc19sb2dfcmVjb3Zlcl9idWZfY2FuY2VsKGxvZywgYnVmX2YpOwogCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBJbiB0aGlzIHBhc3Mgd2Ugd2FudCB0byByZWNvdmVyIGFsbCB0aGUgYnVmZmVycwotCQkgKiB3aGljaCBoYXZlIG5vdCBiZWVuIGNhbmNlbGxlZCBhbmQgYXJlIG5vdAotCQkgKiBjYW5jZWxsYXRpb24gYnVmZmVycyB0aGVtc2VsdmVzLiAgVGhlIHJvdXRpbmUKLQkJICogd2UgY2FsbCBoZXJlIHdpbGwgdGVsbCB1cyB3aGV0aGVyIG9yIG5vdCB0bwotCQkgKiBjb250aW51ZSB3aXRoIHRoZSByZXBsYXkgb2YgdGhpcyBidWZmZXIuCi0JCSAqLwotCQljYW5jZWwgPSB4bG9nX3JlY292ZXJfZG9fYnVmZmVyX3Bhc3MyKGxvZywgYnVmX2YpOwotCQlpZiAoY2FuY2VsKSB7Ci0JCQl0cmFjZV94ZnNfbG9nX3JlY292ZXJfYnVmX2NhbmNlbChsb2csIGJ1Zl9mKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCXRyYWNlX3hmc19sb2dfcmVjb3Zlcl9idWZfcmVjb3Zlcihsb2csIGJ1Zl9mKTsKLQlzd2l0Y2ggKGJ1Zl9mLT5ibGZfdHlwZSkgewotCWNhc2UgWEZTX0xJX0JVRjoKLQkJYmxrbm8gPSBidWZfZi0+YmxmX2Jsa25vOwotCQlsZW4gPSBidWZfZi0+YmxmX2xlbjsKLQkJZmxhZ3MgPSBidWZfZi0+YmxmX2ZsYWdzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgbG9nLT5sX21wLAotCQkJInhmc19sb2dfcmVjb3ZlcjogdW5rbm93biBidWZmZXIgdHlwZSAweCV4LCBsb2dkZXYgJXMiLAotCQkJYnVmX2YtPmJsZl90eXBlLCBsb2ctPmxfbXAtPm1fbG9nbmFtZSA/Ci0JCQlsb2ctPmxfbXAtPm1fbG9nbmFtZSA6ICJpbnRlcm5hbCIpOwotCQlYRlNfRVJST1JfUkVQT1JUKCJ4bG9nX3JlY292ZXJfZG9fYnVmZmVyX3RyYW5zIiwKLQkJCQkgWEZTX0VSUkxFVkVMX0xPVywgbG9nLT5sX21wKTsKLQkJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwogCX0KIAotCW1wID0gbG9nLT5sX21wOworCXRyYWNlX3hmc19sb2dfcmVjb3Zlcl9idWZfcmVjb3Zlcihsb2csIGJ1Zl9mKTsKKwogCWJ1Zl9mbGFncyA9IFhCRl9MT0NLOwotCWlmICghKGZsYWdzICYgWEZTX0JMRl9JTk9ERV9CVUYpKQorCWlmICghKGJ1Zl9mLT5ibGZfZmxhZ3MgJiBYRlNfQkxGX0lOT0RFX0JVRikpCiAJCWJ1Zl9mbGFncyB8PSBYQkZfTUFQUEVEOwogCi0JYnAgPSB4ZnNfYnVmX3JlYWQobXAtPm1fZGRldl90YXJncCwgYmxrbm8sIGxlbiwgYnVmX2ZsYWdzKTsKKwlicCA9IHhmc19idWZfcmVhZChtcC0+bV9kZGV2X3RhcmdwLCBidWZfZi0+YmxmX2Jsa25vLCBidWZfZi0+YmxmX2xlbiwKKwkJCSAgYnVmX2ZsYWdzKTsKIAlpZiAoWEZTX0JVRl9JU0VSUk9SKGJwKSkgewotCQl4ZnNfaW9lcnJvcl9hbGVydCgieGxvZ19yZWNvdmVyX2RvLi4ocmVhZCMxKSIsIGxvZy0+bF9tcCwKLQkJCQkgIGJwLCBibGtubyk7CisJCXhmc19pb2Vycm9yX2FsZXJ0KCJ4bG9nX3JlY292ZXJfZG8uLihyZWFkIzEpIiwgbXAsCisJCQkJICBicCwgYnVmX2YtPmJsZl9ibGtubyk7CiAJCWVycm9yID0gWEZTX0JVRl9HRVRFUlJPUihicCk7CiAJCXhmc19idWZfcmVsc2UoYnApOwogCQlyZXR1cm4gZXJyb3I7CiAJfQogCiAJZXJyb3IgPSAwOwotCWlmIChmbGFncyAmIFhGU19CTEZfSU5PREVfQlVGKSB7CisJaWYgKGJ1Zl9mLT5ibGZfZmxhZ3MgJiBYRlNfQkxGX0lOT0RFX0JVRikgewogCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19pbm9kZV9idWZmZXIobXAsIGl0ZW0sIGJwLCBidWZfZik7Ci0JfSBlbHNlIGlmIChmbGFncyAmCisJfSBlbHNlIGlmIChidWZfZi0+YmxmX2ZsYWdzICYKIAkJICAoWEZTX0JMRl9VRFFVT1RfQlVGfFhGU19CTEZfUERRVU9UX0JVRnxYRlNfQkxGX0dEUVVPVF9CVUYpKSB7CiAJCXhsb2dfcmVjb3Zlcl9kb19kcXVvdF9idWZmZXIobXAsIGxvZywgaXRlbSwgYnAsIGJ1Zl9mKTsKIAl9IGVsc2UgewpAQCAtMjI4NiwxNiArMjE2MCwxNCBAQAogfQogCiBTVEFUSUMgaW50Ci14bG9nX3JlY292ZXJfZG9faW5vZGVfdHJhbnMoCit4bG9nX3JlY292ZXJfaW5vZGVfcGFzczIoCiAJeGxvZ190CQkJKmxvZywKLQl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLAotCWludAkJCXBhc3MpCisJeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSkKIHsKIAl4ZnNfaW5vZGVfbG9nX2Zvcm1hdF90CSppbl9mOwotCXhmc19tb3VudF90CQkqbXA7CisJeGZzX21vdW50X3QJCSptcCA9IGxvZy0+bF9tcDsKIAl4ZnNfYnVmX3QJCSpicDsKIAl4ZnNfZGlub2RlX3QJCSpkaXA7Ci0JeGZzX2lub190CQlpbm87CiAJaW50CQkJbGVuOwogCXhmc19jYWRkcl90CQlzcmM7CiAJeGZzX2NhZGRyX3QJCWRlc3Q7CkBAIC0yMzA1LDEwICsyMTc3LDYgQEAKIAl4ZnNfaWNkaW5vZGVfdAkJKmRpY3A7CiAJaW50CQkJbmVlZF9mcmVlID0gMDsKIAotCWlmIChwYXNzID09IFhMT0dfUkVDT1ZFUl9QQVNTMSkgewotCQlyZXR1cm4gMDsKLQl9Ci0KIAlpZiAoaXRlbS0+cmlfYnVmWzBdLmlfbGVuID09IHNpemVvZih4ZnNfaW5vZGVfbG9nX2Zvcm1hdF90KSkgewogCQlpbl9mID0gaXRlbS0+cmlfYnVmWzBdLmlfYWRkcjsKIAl9IGVsc2UgewpAQCAtMjMxOCw4ICsyMTg2LDYgQEAKIAkJaWYgKGVycm9yKQogCQkJZ290byBlcnJvcjsKIAl9Ci0JaW5vID0gaW5fZi0+aWxmX2lubzsKLQltcCA9IGxvZy0+bF9tcDsKIAogCS8qCiAJICogSW5vZGUgYnVmZmVycyBjYW4gYmUgZnJlZWQsIGxvb2sgb3V0IGZvciBpdCwKQEAgLTIzNTQsOCArMjIyMCw4IEBACiAJCXhmc19idWZfcmVsc2UoYnApOwogCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgbXAsCiAJCQkieGZzX2lub2RlX3JlY292ZXI6IEJhZCBpbm9kZSBtYWdpYyBudW1iZXIsIGRpbm8gcHRyID0gMHglcCwgZGlubyBicCA9IDB4JXAsIGlubyA9ICVMZCIsCi0JCQlkaXAsIGJwLCBpbm8pOwotCQlYRlNfRVJST1JfUkVQT1JUKCJ4bG9nX3JlY292ZXJfZG9faW5vZGVfdHJhbnMoMSkiLAorCQkJZGlwLCBicCwgaW5fZi0+aWxmX2lubyk7CisJCVhGU19FUlJPUl9SRVBPUlQoInhsb2dfcmVjb3Zlcl9pbm9kZV9wYXNzMigxKSIsCiAJCQkJIFhGU19FUlJMRVZFTF9MT1csIG1wKTsKIAkJZXJyb3IgPSBFRlNDT1JSVVBURUQ7CiAJCWdvdG8gZXJyb3I7CkBAIC0yMzY1LDggKzIyMzEsOCBAQAogCQl4ZnNfYnVmX3JlbHNlKGJwKTsKIAkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLAogCQkJInhmc19pbm9kZV9yZWNvdmVyOiBCYWQgaW5vZGUgbG9nIHJlY29yZCwgcmVjIHB0ciAweCVwLCBpbm8gJUxkIiwKLQkJCWl0ZW0sIGlubyk7Ci0JCVhGU19FUlJPUl9SRVBPUlQoInhsb2dfcmVjb3Zlcl9kb19pbm9kZV90cmFucygyKSIsCisJCQlpdGVtLCBpbl9mLT5pbGZfaW5vKTsKKwkJWEZTX0VSUk9SX1JFUE9SVCgieGxvZ19yZWNvdmVyX2lub2RlX3Bhc3MyKDIpIiwKIAkJCQkgWEZTX0VSUkxFVkVMX0xPVywgbXApOwogCQllcnJvciA9IEVGU0NPUlJVUFRFRDsKIAkJZ290byBlcnJvcjsKQEAgLTIzOTQsMTIgKzIyNjAsMTIgQEAKIAlpZiAodW5saWtlbHkoKGRpY3AtPmRpX21vZGUgJiBTX0lGTVQpID09IFNfSUZSRUcpKSB7CiAJCWlmICgoZGljcC0+ZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0VYVEVOVFMpICYmCiAJCSAgICAoZGljcC0+ZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0JUUkVFKSkgewotCQkJWEZTX0NPUlJVUFRJT05fRVJST1IoInhsb2dfcmVjb3Zlcl9kb19pbm9kZV90cmFucygzKSIsCisJCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGxvZ19yZWNvdmVyX2lub2RlX3Bhc3MyKDMpIiwKIAkJCQkJIFhGU19FUlJMRVZFTF9MT1csIG1wLCBkaWNwKTsKIAkJCXhmc19idWZfcmVsc2UoYnApOwogCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLAogCQkJCSJ4ZnNfaW5vZGVfcmVjb3ZlcjogQmFkIHJlZ3VsYXIgaW5vZGUgbG9nIHJlY29yZCwgcmVjIHB0ciAweCVwLCBpbm8gcHRyID0gMHglcCwgaW5vIGJwID0gMHglcCwgaW5vICVMZCIsCi0JCQkJaXRlbSwgZGlwLCBicCwgaW5vKTsKKwkJCQlpdGVtLCBkaXAsIGJwLCBpbl9mLT5pbGZfaW5vKTsKIAkJCWVycm9yID0gRUZTQ09SUlVQVEVEOwogCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtMjQwNyw0MCArMjI3Myw0MCBAQAogCQlpZiAoKGRpY3AtPmRpX2Zvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9FWFRFTlRTKSAmJgogCQkgICAgKGRpY3AtPmRpX2Zvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9CVFJFRSkgJiYKIAkJICAgIChkaWNwLT5kaV9mb3JtYXQgIT0gWEZTX0RJTk9ERV9GTVRfTE9DQUwpKSB7Ci0JCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGxvZ19yZWNvdmVyX2RvX2lub2RlX3RyYW5zKDQpIiwKKwkJCVhGU19DT1JSVVBUSU9OX0VSUk9SKCJ4bG9nX3JlY292ZXJfaW5vZGVfcGFzczIoNCkiLAogCQkJCQkgICAgIFhGU19FUlJMRVZFTF9MT1csIG1wLCBkaWNwKTsKIAkJCXhmc19idWZfcmVsc2UoYnApOwogCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLAogCQkJCSJ4ZnNfaW5vZGVfcmVjb3ZlcjogQmFkIGRpciBpbm9kZSBsb2cgcmVjb3JkLCByZWMgcHRyIDB4JXAsIGlubyBwdHIgPSAweCVwLCBpbm8gYnAgPSAweCVwLCBpbm8gJUxkIiwKLQkJCQlpdGVtLCBkaXAsIGJwLCBpbm8pOworCQkJCWl0ZW0sIGRpcCwgYnAsIGluX2YtPmlsZl9pbm8pOwogCQkJZXJyb3IgPSBFRlNDT1JSVVBURUQ7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAJfQogCWlmICh1bmxpa2VseShkaWNwLT5kaV9uZXh0ZW50cyArIGRpY3AtPmRpX2FuZXh0ZW50cyA+IGRpY3AtPmRpX25ibG9ja3MpKXsKLQkJWEZTX0NPUlJVUFRJT05fRVJST1IoInhsb2dfcmVjb3Zlcl9kb19pbm9kZV90cmFucyg1KSIsCisJCVhGU19DT1JSVVBUSU9OX0VSUk9SKCJ4bG9nX3JlY292ZXJfaW5vZGVfcGFzczIoNSkiLAogCQkJCSAgICAgWEZTX0VSUkxFVkVMX0xPVywgbXAsIGRpY3ApOwogCQl4ZnNfYnVmX3JlbHNlKGJwKTsKIAkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLAogCQkJInhmc19pbm9kZV9yZWNvdmVyOiBCYWQgaW5vZGUgbG9nIHJlY29yZCwgcmVjIHB0ciAweCVwLCBkaW5vIHB0ciAweCVwLCBkaW5vIGJwIDB4JXAsIGlubyAlTGQsIHRvdGFsIGV4dGVudHMgPSAlZCwgbmJsb2NrcyA9ICVMZCIsCi0JCQlpdGVtLCBkaXAsIGJwLCBpbm8sCisJCQlpdGVtLCBkaXAsIGJwLCBpbl9mLT5pbGZfaW5vLAogCQkJZGljcC0+ZGlfbmV4dGVudHMgKyBkaWNwLT5kaV9hbmV4dGVudHMsCiAJCQlkaWNwLT5kaV9uYmxvY2tzKTsKIAkJZXJyb3IgPSBFRlNDT1JSVVBURUQ7CiAJCWdvdG8gZXJyb3I7CiAJfQogCWlmICh1bmxpa2VseShkaWNwLT5kaV9mb3Jrb2ZmID4gbXAtPm1fc2Iuc2JfaW5vZGVzaXplKSkgewotCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGxvZ19yZWNvdmVyX2RvX2lub2RlX3RyYW5zKDYpIiwKKwkJWEZTX0NPUlJVUFRJT05fRVJST1IoInhsb2dfcmVjb3Zlcl9pbm9kZV9wYXNzMig2KSIsCiAJCQkJICAgICBYRlNfRVJSTEVWRUxfTE9XLCBtcCwgZGljcCk7CiAJCXhmc19idWZfcmVsc2UoYnApOwogCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgbXAsCiAJCQkieGZzX2lub2RlX3JlY292ZXI6IEJhZCBpbm9kZSBsb2cgcmVjIHB0ciAweCVwLCBkaW5vIHB0ciAweCVwLCBkaW5vIGJwIDB4JXAsIGlubyAlTGQsIGZvcmtvZmYgMHgleCIsCi0JCQlpdGVtLCBkaXAsIGJwLCBpbm8sIGRpY3AtPmRpX2ZvcmtvZmYpOworCQkJaXRlbSwgZGlwLCBicCwgaW5fZi0+aWxmX2lubywgZGljcC0+ZGlfZm9ya29mZik7CiAJCWVycm9yID0gRUZTQ09SUlVQVEVEOwogCQlnb3RvIGVycm9yOwogCX0KIAlpZiAodW5saWtlbHkoaXRlbS0+cmlfYnVmWzFdLmlfbGVuID4gc2l6ZW9mKHN0cnVjdCB4ZnNfaWNkaW5vZGUpKSkgewotCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGxvZ19yZWNvdmVyX2RvX2lub2RlX3RyYW5zKDcpIiwKKwkJWEZTX0NPUlJVUFRJT05fRVJST1IoInhsb2dfcmVjb3Zlcl9pbm9kZV9wYXNzMig3KSIsCiAJCQkJICAgICBYRlNfRVJSTEVWRUxfTE9XLCBtcCwgZGljcCk7CiAJCXhmc19idWZfcmVsc2UoYnApOwogCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgbXAsCkBAIC0yNTMyLDcgKzIzOTgsNyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXhsb2dfd2FybigiWEZTOiB4bG9nX3JlY292ZXJfZG9faW5vZGVfdHJhbnM6IEludmFsaWQgZmxhZyIpOworCQkJeGxvZ193YXJuKCJYRlM6IHhsb2dfcmVjb3Zlcl9pbm9kZV9wYXNzMjogSW52YWxpZCBmbGFnIik7CiAJCQlBU1NFUlQoMCk7CiAJCQl4ZnNfYnVmX3JlbHNlKGJwKTsKIAkJCWVycm9yID0gRUlPOwpAQCAtMjU1NiwxOCArMjQyMiwxMSBAQAogICogb2YgdGhhdCB0eXBlLgogICovCiBTVEFUSUMgaW50Ci14bG9nX3JlY292ZXJfZG9fcXVvdGFvZmZfdHJhbnMoCit4bG9nX3JlY292ZXJfcXVvdGFvZmZfcGFzczEoCiAJeGxvZ190CQkJKmxvZywKLQl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLAotCWludAkJCXBhc3MpCisJeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSkKIHsKLQl4ZnNfcW9mZl9sb2dmb3JtYXRfdAkqcW9mZl9mOwotCi0JaWYgKHBhc3MgPT0gWExPR19SRUNPVkVSX1BBU1MyKSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JcW9mZl9mID0gaXRlbS0+cmlfYnVmWzBdLmlfYWRkcjsKKwl4ZnNfcW9mZl9sb2dmb3JtYXRfdAkqcW9mZl9mID0gaXRlbS0+cmlfYnVmWzBdLmlfYWRkcjsKIAlBU1NFUlQocW9mZl9mKTsKIAogCS8qCkBAIC0yNTg4LDIyICsyNDQ3LDE3IEBACiAgKiBSZWNvdmVyIGEgZHF1b3QgcmVjb3JkCiAgKi8KIFNUQVRJQyBpbnQKLXhsb2dfcmVjb3Zlcl9kb19kcXVvdF90cmFucygKK3hsb2dfcmVjb3Zlcl9kcXVvdF9wYXNzMigKIAl4bG9nX3QJCQkqbG9nLAotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW0sCi0JaW50CQkJcGFzcykKKwl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtKQogewotCXhmc19tb3VudF90CQkqbXA7CisJeGZzX21vdW50X3QJCSptcCA9IGxvZy0+bF9tcDsKIAl4ZnNfYnVmX3QJCSpicDsKIAlzdHJ1Y3QgeGZzX2Rpc2tfZHF1b3QJKmRkcSwgKnJlY2RkcTsKIAlpbnQJCQllcnJvcjsKIAl4ZnNfZHFfbG9nZm9ybWF0X3QJKmRxX2Y7CiAJdWludAkJCXR5cGU7CiAKLQlpZiAocGFzcyA9PSBYTE9HX1JFQ09WRVJfUEFTUzEpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCW1wID0gbG9nLT5sX21wOwogCiAJLyoKIAkgKiBGaWxlc3lzdGVtcyBhcmUgcmVxdWlyZWQgdG8gc2VuZCBpbiBxdW90YSBmbGFncyBhdCBtb3VudCB0aW1lLgpAQCAtMjY0Nyw3ICsyNTAxLDcgQEAKIAlpZiAoKGVycm9yID0geGZzX3FtX2RxY2hlY2socmVjZGRxLAogCQkJICAgZHFfZi0+cWxmX2lkLAogCQkJICAgMCwgWEZTX1FNT1BUX0RPV0FSTiwKLQkJCSAgICJ4bG9nX3JlY292ZXJfZG9fZHF1b3RfdHJhbnMgKGxvZyBjb3B5KSIpKSkgeworCQkJICAgInhsb2dfcmVjb3Zlcl9kcXVvdF9wYXNzMiAobG9nIGNvcHkpIikpKSB7CiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAl9CiAJQVNTRVJUKGRxX2YtPnFsZl9sZW4gPT0gMSk7CkBAIC0yNjcwLDcgKzI1MjQsNyBAQAogCSAqIG1pbmltYWwgaW5pdGlhbGl6YXRpb24gdGhlbi4KIAkgKi8KIAlpZiAoeGZzX3FtX2RxY2hlY2soZGRxLCBkcV9mLT5xbGZfaWQsIDAsIFhGU19RTU9QVF9ET1dBUk4sCi0JCQkgICAieGxvZ19yZWNvdmVyX2RvX2RxdW90X3RyYW5zIikpIHsKKwkJCSAgICJ4bG9nX3JlY292ZXJfZHF1b3RfcGFzczIiKSkgewogCQl4ZnNfYnVmX3JlbHNlKGJwKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCX0KQEAgLTI2OTMsMzggKzI1NDcsMzEgQEAKICAqIExTTi4KICAqLwogU1RBVElDIGludAoteGxvZ19yZWNvdmVyX2RvX2VmaV90cmFucygKK3hsb2dfcmVjb3Zlcl9lZmlfcGFzczIoCiAJeGxvZ190CQkJKmxvZywKIAl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLAotCXhmc19sc25fdAkJbHNuLAotCWludAkJCXBhc3MpCisJeGZzX2xzbl90CQlsc24pCiB7CiAJaW50CQkJZXJyb3I7Ci0JeGZzX21vdW50X3QJCSptcDsKKwl4ZnNfbW91bnRfdAkJKm1wID0gbG9nLT5sX21wOwogCXhmc19lZmlfbG9nX2l0ZW1fdAkqZWZpcDsKIAl4ZnNfZWZpX2xvZ19mb3JtYXRfdAkqZWZpX2Zvcm1hdHA7CiAKLQlpZiAocGFzcyA9PSBYTE9HX1JFQ09WRVJfUEFTUzEpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJZWZpX2Zvcm1hdHAgPSBpdGVtLT5yaV9idWZbMF0uaV9hZGRyOwogCi0JbXAgPSBsb2ctPmxfbXA7CiAJZWZpcCA9IHhmc19lZmlfaW5pdChtcCwgZWZpX2Zvcm1hdHAtPmVmaV9uZXh0ZW50cyk7CiAJaWYgKChlcnJvciA9IHhmc19lZmlfY29weV9mb3JtYXQoJihpdGVtLT5yaV9idWZbMF0pLAogCQkJCQkgJihlZmlwLT5lZmlfZm9ybWF0KSkpKSB7CiAJCXhmc19lZmlfaXRlbV9mcmVlKGVmaXApOwogCQlyZXR1cm4gZXJyb3I7CiAJfQotCWVmaXAtPmVmaV9uZXh0X2V4dGVudCA9IGVmaV9mb3JtYXRwLT5lZmlfbmV4dGVudHM7Ci0JZWZpcC0+ZWZpX2ZsYWdzIHw9IFhGU19FRklfQ09NTUlUVEVEOworCWF0b21pY19zZXQoJmVmaXAtPmVmaV9uZXh0X2V4dGVudCwgZWZpX2Zvcm1hdHAtPmVmaV9uZXh0ZW50cyk7CiAKIAlzcGluX2xvY2soJmxvZy0+bF9haWxwLT54YV9sb2NrKTsKIAkvKgogCSAqIHhmc190cmFuc19haWxfdXBkYXRlKCkgZHJvcHMgdGhlIEFJTCBsb2NrLgogCSAqLwotCXhmc190cmFuc19haWxfdXBkYXRlKGxvZy0+bF9haWxwLCAoeGZzX2xvZ19pdGVtX3QgKillZmlwLCBsc24pOworCXhmc190cmFuc19haWxfdXBkYXRlKGxvZy0+bF9haWxwLCAmZWZpcC0+ZWZpX2l0ZW0sIGxzbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3MzcsMTEgKzI1ODQsMTAgQEAKICAqIGVmZCBmb3JtYXQgc3RydWN0dXJlLiAgSWYgd2UgZmluZCBpdCwgd2UgcmVtb3ZlIHRoZSBlZmkgZnJvbSB0aGUKICAqIEFJTCBhbmQgZnJlZSBpdC4KICAqLwotU1RBVElDIHZvaWQKLXhsb2dfcmVjb3Zlcl9kb19lZmRfdHJhbnMoCitTVEFUSUMgaW50Cit4bG9nX3JlY292ZXJfZWZkX3Bhc3MyKAogCXhsb2dfdAkJCSpsb2csCi0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSwKLQlpbnQJCQlwYXNzKQorCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW0pCiB7CiAJeGZzX2VmZF9sb2dfZm9ybWF0X3QJKmVmZF9mb3JtYXRwOwogCXhmc19lZmlfbG9nX2l0ZW1fdAkqZWZpcCA9IE5VTEw7CkBAIC0yNzUwLDEwICsyNTk2LDYgQEAKIAlzdHJ1Y3QgeGZzX2FpbF9jdXJzb3IJY3VyOwogCXN0cnVjdCB4ZnNfYWlsCQkqYWlscCA9IGxvZy0+bF9haWxwOwogCi0JaWYgKHBhc3MgPT0gWExPR19SRUNPVkVSX1BBU1MxKSB7Ci0JCXJldHVybjsKLQl9Ci0KIAllZmRfZm9ybWF0cCA9IGl0ZW0tPnJpX2J1ZlswXS5pX2FkZHI7CiAJQVNTRVJUKChpdGVtLT5yaV9idWZbMF0uaV9sZW4gPT0gKHNpemVvZih4ZnNfZWZkX2xvZ19mb3JtYXRfMzJfdCkgKwogCQkoKGVmZF9mb3JtYXRwLT5lZmRfbmV4dGVudHMgLSAxKSAqIHNpemVvZih4ZnNfZXh0ZW50XzMyX3QpKSkpIHx8CkBAIC0yNzg1LDYyICsyNjI3LDYgQEAKIAl9CiAJeGZzX3RyYW5zX2FpbF9jdXJzb3JfZG9uZShhaWxwLCAmY3VyKTsKIAlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7Ci19Ci0KLS8qCi0gKiBQZXJmb3JtIHRoZSB0cmFuc2FjdGlvbgotICoKLSAqIElmIHRoZSB0cmFuc2FjdGlvbiBtb2RpZmllcyBhIGJ1ZmZlciBvciBpbm9kZSwgZG8gaXQgbm93LiAgT3RoZXJ3aXNlLAotICogRUZJcyBhbmQgRUZEcyBnZXQgcXVldWVkIHVwIGJ5IGFkZGluZyBlbnRyaWVzIGludG8gdGhlIEFJTCBmb3IgdGhlbS4KLSAqLwotU1RBVElDIGludAoteGxvZ19yZWNvdmVyX2RvX3RyYW5zKAotCXhsb2dfdAkJCSpsb2csCi0JeGxvZ19yZWNvdmVyX3QJCSp0cmFucywKLQlpbnQJCQlwYXNzKQotewotCWludAkJCWVycm9yID0gMDsKLQl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtOwotCi0JZXJyb3IgPSB4bG9nX3JlY292ZXJfcmVvcmRlcl90cmFucyhsb2csIHRyYW5zLCBwYXNzKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlbSwgJnRyYW5zLT5yX2l0ZW1xLCByaV9saXN0KSB7Ci0JCXRyYWNlX3hmc19sb2dfcmVjb3Zlcl9pdGVtX3JlY292ZXIobG9nLCB0cmFucywgaXRlbSwgcGFzcyk7Ci0JCXN3aXRjaCAoSVRFTV9UWVBFKGl0ZW0pKSB7Ci0JCWNhc2UgWEZTX0xJX0JVRjoKLQkJCWVycm9yID0geGxvZ19yZWNvdmVyX2RvX2J1ZmZlcl90cmFucyhsb2csIGl0ZW0sIHBhc3MpOwotCQkJYnJlYWs7Ci0JCWNhc2UgWEZTX0xJX0lOT0RFOgotCQkJZXJyb3IgPSB4bG9nX3JlY292ZXJfZG9faW5vZGVfdHJhbnMobG9nLCBpdGVtLCBwYXNzKTsKLQkJCWJyZWFrOwotCQljYXNlIFhGU19MSV9FRkk6Ci0JCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19lZmlfdHJhbnMobG9nLCBpdGVtLAotCQkJCQkJCSAgdHJhbnMtPnJfbHNuLCBwYXNzKTsKLQkJCWJyZWFrOwotCQljYXNlIFhGU19MSV9FRkQ6Ci0JCQl4bG9nX3JlY292ZXJfZG9fZWZkX3RyYW5zKGxvZywgaXRlbSwgcGFzcyk7Ci0JCQllcnJvciA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBYRlNfTElfRFFVT1Q6Ci0JCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19kcXVvdF90cmFucyhsb2csIGl0ZW0sIHBhc3MpOwotCQkJYnJlYWs7Ci0JCWNhc2UgWEZTX0xJX1FVT1RBT0ZGOgotCQkJZXJyb3IgPSB4bG9nX3JlY292ZXJfZG9fcXVvdGFvZmZfdHJhbnMobG9nLCBpdGVtLAotCQkJCQkJCSAgICAgICBwYXNzKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJeGxvZ193YXJuKAotCSJYRlM6IGludmFsaWQgaXRlbSB0eXBlICglZCkgeGxvZ19yZWNvdmVyX2RvX3RyYW5zIiwgSVRFTV9UWVBFKGl0ZW0pKTsKLQkJCUFTU0VSVCgwKTsKLQkJCWVycm9yID0gWEZTX0VSUk9SKEVJTyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI4NTIsNyArMjYzOCw3IEBACiAgKi8KIFNUQVRJQyB2b2lkCiB4bG9nX3JlY292ZXJfZnJlZV90cmFucygKLQl4bG9nX3JlY292ZXJfdAkJKnRyYW5zKQorCXN0cnVjdCB4bG9nX3JlY292ZXIJKnRyYW5zKQogewogCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW0sICpuOwogCWludAkJCWk7CkBAIC0yODcxLDE3ICsyNjU3LDk1IEBACiB9CiAKIFNUQVRJQyBpbnQKK3hsb2dfcmVjb3Zlcl9jb21taXRfcGFzczEoCisJc3RydWN0IGxvZwkJKmxvZywKKwlzdHJ1Y3QgeGxvZ19yZWNvdmVyCSp0cmFucywKKwl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtKQoreworCXRyYWNlX3hmc19sb2dfcmVjb3Zlcl9pdGVtX3JlY292ZXIobG9nLCB0cmFucywgaXRlbSwgWExPR19SRUNPVkVSX1BBU1MxKTsKKworCXN3aXRjaCAoSVRFTV9UWVBFKGl0ZW0pKSB7CisJY2FzZSBYRlNfTElfQlVGOgorCQlyZXR1cm4geGxvZ19yZWNvdmVyX2J1ZmZlcl9wYXNzMShsb2csIGl0ZW0pOworCWNhc2UgWEZTX0xJX1FVT1RBT0ZGOgorCQlyZXR1cm4geGxvZ19yZWNvdmVyX3F1b3Rhb2ZmX3Bhc3MxKGxvZywgaXRlbSk7CisJY2FzZSBYRlNfTElfSU5PREU6CisJY2FzZSBYRlNfTElfRUZJOgorCWNhc2UgWEZTX0xJX0VGRDoKKwljYXNlIFhGU19MSV9EUVVPVDoKKwkJLyogbm90aGluZyB0byBkbyBpbiBwYXNzIDEgKi8KKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJeGxvZ193YXJuKAorCSJYRlM6IGludmFsaWQgaXRlbSB0eXBlICglZCkgeGxvZ19yZWNvdmVyX2NvbW1pdF9wYXNzMSIsCisJCQlJVEVNX1RZUEUoaXRlbSkpOworCQlBU1NFUlQoMCk7CisJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKKwl9Cit9CisKK1NUQVRJQyBpbnQKK3hsb2dfcmVjb3Zlcl9jb21taXRfcGFzczIoCisJc3RydWN0IGxvZwkJKmxvZywKKwlzdHJ1Y3QgeGxvZ19yZWNvdmVyCSp0cmFucywKKwl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtKQoreworCXRyYWNlX3hmc19sb2dfcmVjb3Zlcl9pdGVtX3JlY292ZXIobG9nLCB0cmFucywgaXRlbSwgWExPR19SRUNPVkVSX1BBU1MyKTsKKworCXN3aXRjaCAoSVRFTV9UWVBFKGl0ZW0pKSB7CisJY2FzZSBYRlNfTElfQlVGOgorCQlyZXR1cm4geGxvZ19yZWNvdmVyX2J1ZmZlcl9wYXNzMihsb2csIGl0ZW0pOworCWNhc2UgWEZTX0xJX0lOT0RFOgorCQlyZXR1cm4geGxvZ19yZWNvdmVyX2lub2RlX3Bhc3MyKGxvZywgaXRlbSk7CisJY2FzZSBYRlNfTElfRUZJOgorCQlyZXR1cm4geGxvZ19yZWNvdmVyX2VmaV9wYXNzMihsb2csIGl0ZW0sIHRyYW5zLT5yX2xzbik7CisJY2FzZSBYRlNfTElfRUZEOgorCQlyZXR1cm4geGxvZ19yZWNvdmVyX2VmZF9wYXNzMihsb2csIGl0ZW0pOworCWNhc2UgWEZTX0xJX0RRVU9UOgorCQlyZXR1cm4geGxvZ19yZWNvdmVyX2RxdW90X3Bhc3MyKGxvZywgaXRlbSk7CisJY2FzZSBYRlNfTElfUVVPVEFPRkY6CisJCS8qIG5vdGhpbmcgdG8gZG8gaW4gcGFzczIgKi8KKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJeGxvZ193YXJuKAorCSJYRlM6IGludmFsaWQgaXRlbSB0eXBlICglZCkgeGxvZ19yZWNvdmVyX2NvbW1pdF9wYXNzMiIsCisJCQlJVEVNX1RZUEUoaXRlbSkpOworCQlBU1NFUlQoMCk7CisJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKKwl9Cit9CisKKy8qCisgKiBQZXJmb3JtIHRoZSB0cmFuc2FjdGlvbi4KKyAqCisgKiBJZiB0aGUgdHJhbnNhY3Rpb24gbW9kaWZpZXMgYSBidWZmZXIgb3IgaW5vZGUsIGRvIGl0IG5vdy4gIE90aGVyd2lzZSwKKyAqIEVGSXMgYW5kIEVGRHMgZ2V0IHF1ZXVlZCB1cCBieSBhZGRpbmcgZW50cmllcyBpbnRvIHRoZSBBSUwgZm9yIHRoZW0uCisgKi8KK1NUQVRJQyBpbnQKIHhsb2dfcmVjb3Zlcl9jb21taXRfdHJhbnMoCi0JeGxvZ190CQkJKmxvZywKLQl4bG9nX3JlY292ZXJfdAkJKnRyYW5zLAorCXN0cnVjdCBsb2cJCSpsb2csCisJc3RydWN0IHhsb2dfcmVjb3ZlcgkqdHJhbnMsCiAJaW50CQkJcGFzcykKIHsKLQlpbnQJCQllcnJvcjsKKwlpbnQJCQllcnJvciA9IDA7CisJeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbTsKIAogCWhsaXN0X2RlbCgmdHJhbnMtPnJfbGlzdCk7Ci0JaWYgKChlcnJvciA9IHhsb2dfcmVjb3Zlcl9kb190cmFucyhsb2csIHRyYW5zLCBwYXNzKSkpCisKKwllcnJvciA9IHhsb2dfcmVjb3Zlcl9yZW9yZGVyX3RyYW5zKGxvZywgdHJhbnMsIHBhc3MpOworCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCXhsb2dfcmVjb3Zlcl9mcmVlX3RyYW5zKHRyYW5zKTsJCQkvKiBubyBlcnJvciAqLworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVtLCAmdHJhbnMtPnJfaXRlbXEsIHJpX2xpc3QpIHsKKwkJaWYgKHBhc3MgPT0gWExPR19SRUNPVkVSX1BBU1MxKQorCQkJZXJyb3IgPSB4bG9nX3JlY292ZXJfY29tbWl0X3Bhc3MxKGxvZywgdHJhbnMsIGl0ZW0pOworCQllbHNlCisJCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9jb21taXRfcGFzczIobG9nLCB0cmFucywgaXRlbSk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKwl4bG9nX3JlY292ZXJfZnJlZV90cmFucyh0cmFucyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwMTEsNyArMjg3NSw3IEBACiAJeGZzX2V4dGVudF90CQkqZXh0cDsKIAl4ZnNfZnNibG9ja190CQlzdGFydGJsb2NrX2ZzYjsKIAotCUFTU0VSVCghKGVmaXAtPmVmaV9mbGFncyAmIFhGU19FRklfUkVDT1ZFUkVEKSk7CisJQVNTRVJUKCF0ZXN0X2JpdChYRlNfRUZJX1JFQ09WRVJFRCwgJmVmaXAtPmVmaV9mbGFncykpOwogCiAJLyoKIAkgKiBGaXJzdCBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGV4dGVudHMgZGVzY3JpYmVkIGJ5IHRoZQpAQCAtMzA1MCw3ICsyOTE0LDcgQEAKIAkJCQkJIGV4dHAtPmV4dF9sZW4pOwogCX0KIAotCWVmaXAtPmVmaV9mbGFncyB8PSBYRlNfRUZJX1JFQ09WRVJFRDsKKwlzZXRfYml0KFhGU19FRklfUkVDT1ZFUkVELCAmZWZpcC0+ZWZpX2ZsYWdzKTsKIAllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOwogCXJldHVybiBlcnJvcjsKIApAQCAtMzEwNyw3ICsyOTcxLDcgQEAKIAkJICogU2tpcCBFRklzIHRoYXQgd2UndmUgYWxyZWFkeSBwcm9jZXNzZWQuCiAJCSAqLwogCQllZmlwID0gKHhmc19lZmlfbG9nX2l0ZW1fdCAqKWxpcDsKLQkJaWYgKGVmaXAtPmVmaV9mbGFncyAmIFhGU19FRklfUkVDT1ZFUkVEKSB7CisJCWlmICh0ZXN0X2JpdChYRlNfRUZJX1JFQ09WRVJFRCwgJmVmaXAtPmVmaV9mbGFncykpIHsKIAkJCWxpcCA9IHhmc190cmFuc19haWxfY3Vyc29yX25leHQoYWlscCwgJmN1cik7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMzcyNCw3ICszNTg4LDcgQEAKIAl4ZnNfZGFkZHJfdAloZWFkX2JsaywKIAl4ZnNfZGFkZHJfdAl0YWlsX2JsaykKIHsKLQlpbnQJCWVycm9yOworCWludAkJZXJyb3IsIGk7CiAKIAlBU1NFUlQoaGVhZF9ibGsgIT0gdGFpbF9ibGspOwogCkBAIC0zNzMyLDEwICszNTk2LDEyIEBACiAJICogRmlyc3QgZG8gYSBwYXNzIHRvIGZpbmQgYWxsIG9mIHRoZSBjYW5jZWxsZWQgYnVmIGxvZyBpdGVtcy4KIAkgKiBTdG9yZSB0aGVtIGluIHRoZSBidWZfY2FuY2VsX3RhYmxlIGZvciB1c2UgaW4gdGhlIHNlY29uZCBwYXNzLgogCSAqLwotCWxvZy0+bF9idWZfY2FuY2VsX3RhYmxlID0KLQkJKHhmc19idWZfY2FuY2VsX3QgKiopa21lbV96YWxsb2MoWExPR19CQ19UQUJMRV9TSVpFICoKLQkJCQkJCSBzaXplb2YoeGZzX2J1Zl9jYW5jZWxfdCopLAorCWxvZy0+bF9idWZfY2FuY2VsX3RhYmxlID0ga21lbV96YWxsb2MoWExPR19CQ19UQUJMRV9TSVpFICoKKwkJCQkJCSBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksCiAJCQkJCQkgS01fU0xFRVApOworCWZvciAoaSA9IDA7IGkgPCBYTE9HX0JDX1RBQkxFX1NJWkU7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJmxvZy0+bF9idWZfY2FuY2VsX3RhYmxlW2ldKTsKKwogCWVycm9yID0geGxvZ19kb19yZWNvdmVyeV9wYXNzKGxvZywgaGVhZF9ibGssIHRhaWxfYmxrLAogCQkJCSAgICAgIFhMT0dfUkVDT1ZFUl9QQVNTMSk7CiAJaWYgKGVycm9yICE9IDApIHsKQEAgLTM3NTQsNyArMzYyMCw3IEBACiAJCWludAlpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBYTE9HX0JDX1RBQkxFX1NJWkU7IGkrKykKLQkJCUFTU0VSVChsb2ctPmxfYnVmX2NhbmNlbF90YWJsZVtpXSA9PSBOVUxMKTsKKwkJCUFTU0VSVChsaXN0X2VtcHR5KCZsb2ctPmxfYnVmX2NhbmNlbF90YWJsZVtpXSkpOwogCX0KICNlbmRpZgkvKiBERUJVRyAqLwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmMgYi9mcy94ZnMveGZzX21vdW50LmMKaW5kZXggMTllOWRmYTEuLmQ0NDdhZWYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTQ3Miw3ICs0NzIsNyBAQAogCQkJZ290byBvdXRfdW53aW5kOwogCQlwYWctPnBhZ19hZ25vID0gaW5kZXg7CiAJCXBhZy0+cGFnX21vdW50ID0gbXA7Ci0JCXJ3bG9ja19pbml0KCZwYWctPnBhZ19pY2lfbG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZwYWctPnBhZ19pY2lfbG9jayk7CiAJCW11dGV4X2luaXQoJnBhZy0+cGFnX2ljaV9yZWNsYWltX2xvY2spOwogCQlJTklUX1JBRElYX1RSRUUoJnBhZy0+cGFnX2ljaV9yb290LCBHRlBfQVRPTUlDKTsKIAkJc3Bpbl9sb2NrX2luaXQoJnBhZy0+cGFnX2J1Zl9sb2NrKTsKQEAgLTk3NSw2ICs5NzUsMjQgQEAKIH0KIAogLyoKKyAqIHByZWNhbGN1bGF0ZSB0aGUgbG93IHNwYWNlIHRocmVzaG9sZHMgZm9yIGR5bmFtaWMgc3BlY3VsYXRpdmUgcHJlYWxsb2NhdGlvbi4KKyAqLwordm9pZAoreGZzX3NldF9sb3dfc3BhY2VfdGhyZXNob2xkcygKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBYRlNfTE9XU1BfTUFYOyBpKyspIHsKKwkJX191aW50NjRfdCBzcGFjZSA9IG1wLT5tX3NiLnNiX2RibG9ja3M7CisKKwkJZG9fZGl2KHNwYWNlLCAxMDApOworCQltcC0+bV9sb3dfc3BhY2VbaV0gPSBzcGFjZSAqIChpICsgMSk7CisJfQorfQorCisKKy8qCiAgKiBTZXQgd2hldGhlciB3ZSdyZSB1c2luZyBpbm9kZSBhbGlnbm1lbnQuCiAgKi8KIFNUQVRJQyB2b2lkCkBAIC0xMTk2LDYgKzEyMTQsOSBAQAogCSAqLwogCXhmc19zZXRfcndfc2l6ZXMobXApOwogCisJLyogc2V0IHRoZSBsb3cgc3BhY2UgdGhyZXNob2xkcyBmb3IgZHluYW1pYyBwcmVhbGxvY2F0aW9uICovCisJeGZzX3NldF9sb3dfc3BhY2VfdGhyZXNob2xkcyhtcCk7CisKIAkvKgogCSAqIFNldCB0aGUgaW5vZGUgY2x1c3RlciBzaXplLgogCSAqIFRoaXMgbWF5IHN0aWxsIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGZpbGUgc3lzdGVtCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmgKaW5kZXggNTg2MWI0OS4uYTYyZTg5NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtMTAzLDYgKzEwMywxNiBAQAogCXhmc19tb2RfaW5jb3JlX3NiKG1wLCBmaWVsZCwgZGVsdGEsIHJzdmQpCiAjZW5kaWYKIAorLyogZHluYW1pYyBwcmVhbGxvY2F0aW9uIGZyZWUgc3BhY2UgdGhyZXNob2xkcywgNSUgZG93biB0byAxJSAqLworZW51bSB7CisJWEZTX0xPV1NQXzFfUENOVCA9IDAsCisJWEZTX0xPV1NQXzJfUENOVCwKKwlYRlNfTE9XU1BfM19QQ05ULAorCVhGU19MT1dTUF80X1BDTlQsCisJWEZTX0xPV1NQXzVfUENOVCwKKwlYRlNfTE9XU1BfTUFYLAorfTsKKwogdHlwZWRlZiBzdHJ1Y3QgeGZzX21vdW50IHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKm1fc3VwZXI7CiAJeGZzX3RpZF90CQltX3RpZDsJCS8qIG5leHQgdW51c2VkIHRpZCBmb3IgZnMgKi8KQEAgLTIwMiw2ICsyMTIsOCBAQAogCV9faW50NjRfdAkJbV91cGRhdGVfZmxhZ3M7CS8qIHNiIGZsYWdzIHdlIG5lZWQgdG8gdXBkYXRlCiAJCQkJCQkgICBvbiB0aGUgbmV4dCByZW1vdW50LHJ3ICovCiAJc3RydWN0IHNocmlua2VyCQltX2lub2RlX3NocmluazsJLyogaW5vZGUgcmVjbGFpbSBzaHJpbmtlciAqLworCWludDY0X3QJCQltX2xvd19zcGFjZVtYRlNfTE9XU1BfTUFYXTsKKwkJCQkJCS8qIGxvdyBmcmVlIHNwYWNlIHRocmVzaG9sZHMgKi8KIH0geGZzX21vdW50X3Q7CiAKIC8qCkBAIC0zNzksNiArMzkxLDggQEAKIAogZXh0ZXJuIGludAl4ZnNfZGV2X2lzX3JlYWRfb25seShzdHJ1Y3QgeGZzX21vdW50ICosIGNoYXIgKik7CiAKK2V4dGVybiB2b2lkCXhmc19zZXRfbG93X3NwYWNlX3RocmVzaG9sZHMoc3RydWN0IHhmc19tb3VudCAqKTsKKwogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KIAogZXh0ZXJuIHZvaWQJeGZzX21vZF9zYihzdHJ1Y3QgeGZzX3RyYW5zICosIF9faW50NjRfdCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zLmMgYi9mcy94ZnMveGZzX3RyYW5zLmMKaW5kZXggZjZkOTU2Yi4uZjgwYTA2NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFucy5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnMuYwpAQCAtMTM1MCw3ICsxMzUwLDcgQEAKICAqIHRoZXkgY291bGQgYmUgaW1tZWRpYXRlbHkgZmx1c2hlZCBhbmQgd2UnZCBoYXZlIHRvIHJhY2Ugd2l0aCB0aGUgZmx1c2hlcgogICogdHJ5aW5nIHRvIHB1bGwgdGhlIGl0ZW0gZnJvbSB0aGUgQUlMIGFzIHdlIGFkZCBpdC4KICAqLwotdm9pZAorc3RhdGljIHZvaWQKIHhmc190cmFuc19pdGVtX2NvbW1pdHRlZCgKIAlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXAsCiAJeGZzX2xzbl90CQljb21taXRfbHNuLApAQCAtMTQyNSw2ICsxNDI1LDgzIEBACiAJeGZzX3RyYW5zX2ZyZWUodHApOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK3hmc19sb2dfaXRlbV9iYXRjaF9pbnNlcnQoCisJc3RydWN0IHhmc19haWwJCSphaWxwLAorCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKipsb2dfaXRlbXMsCisJaW50CQkJbnJfaXRlbXMsCisJeGZzX2xzbl90CQljb21taXRfbHNuKQoreworCWludAlpOworCisJc3Bpbl9sb2NrKCZhaWxwLT54YV9sb2NrKTsKKwkvKiB4ZnNfdHJhbnNfYWlsX3VwZGF0ZV9idWxrIGRyb3BzIGFpbHAtPnhhX2xvY2sgKi8KKwl4ZnNfdHJhbnNfYWlsX3VwZGF0ZV9idWxrKGFpbHAsIGxvZ19pdGVtcywgbnJfaXRlbXMsIGNvbW1pdF9sc24pOworCisJZm9yIChpID0gMDsgaSA8IG5yX2l0ZW1zOyBpKyspCisJCUlPUF9VTlBJTihsb2dfaXRlbXNbaV0sIDApOworfQorCisvKgorICogQnVsayBvcGVyYXRpb24gdmVyc2lvbiBvZiB4ZnNfdHJhbnNfY29tbWl0dGVkIHRoYXQgdGFrZXMgYSBsb2cgdmVjdG9yIG9mCisgKiBpdGVtcyB0byBpbnNlcnQgaW50byB0aGUgQUlMLiBUaGlzIHVzZXMgYnVsayBBSUwgaW5zZXJ0aW9uIHRlY2huaXF1ZXMgdG8KKyAqIG1pbmltaXNlIGxvY2sgdHJhZmZpYy4KKyAqLwordm9pZAoreGZzX3RyYW5zX2NvbW1pdHRlZF9idWxrKAorCXN0cnVjdCB4ZnNfYWlsCQkqYWlscCwKKwlzdHJ1Y3QgeGZzX2xvZ192ZWMJKmxvZ192ZWN0b3IsCisJeGZzX2xzbl90CQljb21taXRfbHNuLAorCWludAkJCWFib3J0ZWQpCit7CisjZGVmaW5lIExPR19JVEVNX0JBVENIX1NJWkUJMzIKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsb2dfaXRlbXNbTE9HX0lURU1fQkFUQ0hfU0laRV07CisJc3RydWN0IHhmc19sb2dfdmVjCSpsdjsKKwlpbnQJCQlpID0gMDsKKworCS8qIHVucGluIGFsbCB0aGUgbG9nIGl0ZW1zICovCisJZm9yIChsdiA9IGxvZ192ZWN0b3I7IGx2OyBsdiA9IGx2LT5sdl9uZXh0ICkgeworCQlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXAgPSBsdi0+bHZfaXRlbTsKKwkJeGZzX2xzbl90CQlpdGVtX2xzbjsKKworCQlpZiAoYWJvcnRlZCkKKwkJCWxpcC0+bGlfZmxhZ3MgfD0gWEZTX0xJX0FCT1JURUQ7CisJCWl0ZW1fbHNuID0gSU9QX0NPTU1JVFRFRChsaXAsIGNvbW1pdF9sc24pOworCisJCS8qIGl0ZW1fbHNuIG9mIC0xIG1lYW5zIHRoZSBpdGVtIHdhcyBmcmVlZCAqLworCQlpZiAoWEZTX0xTTl9DTVAoaXRlbV9sc24sICh4ZnNfbHNuX3QpLTEpID09IDApCisJCQljb250aW51ZTsKKworCQlpZiAoaXRlbV9sc24gIT0gY29tbWl0X2xzbikgeworCisJCQkvKgorCQkJICogTm90IGEgYnVsayB1cGRhdGUgb3B0aW9uIGR1ZSB0byB1bnVzdWFsIGl0ZW1fbHNuLgorCQkJICogUHVzaCBpbnRvIEFJTCBpbW1lZGlhdGVseSwgcmVjaGVja2luZyB0aGUgbHNuIG9uY2UKKwkJCSAqIHdlIGhhdmUgdGhlIGFpbCBsb2NrLiBUaGVuIHVucGluIHRoZSBpdGVtLgorCQkJICovCisJCQlzcGluX2xvY2soJmFpbHAtPnhhX2xvY2spOworCQkJaWYgKFhGU19MU05fQ01QKGl0ZW1fbHNuLCBsaXAtPmxpX2xzbikgPiAwKQorCQkJCXhmc190cmFuc19haWxfdXBkYXRlKGFpbHAsIGxpcCwgaXRlbV9sc24pOworCQkJZWxzZQorCQkJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKKwkJCUlPUF9VTlBJTihsaXAsIDApOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBJdGVtIGlzIGEgY2FuZGlkYXRlIGZvciBidWxrIEFJTCBpbnNlcnQuICAqLworCQlsb2dfaXRlbXNbaSsrXSA9IGx2LT5sdl9pdGVtOworCQlpZiAoaSA+PSBMT0dfSVRFTV9CQVRDSF9TSVpFKSB7CisJCQl4ZnNfbG9nX2l0ZW1fYmF0Y2hfaW5zZXJ0KGFpbHAsIGxvZ19pdGVtcywKKwkJCQkJTE9HX0lURU1fQkFUQ0hfU0laRSwgY29tbWl0X2xzbik7CisJCQlpID0gMDsKKwkJfQorCX0KKworCS8qIG1ha2Ugc3VyZSB3ZSBpbnNlcnQgdGhlIHJlbWFpbmRlciEgKi8KKwlpZiAoaSkKKwkJeGZzX2xvZ19pdGVtX2JhdGNoX2luc2VydChhaWxwLCBsb2dfaXRlbXMsIGksIGNvbW1pdF9sc24pOworfQorCiAvKgogICogQ2FsbGVkIGZyb20gdGhlIHRyYW5zX2NvbW1pdCBjb2RlIHdoZW4gd2Ugbm90aWNlIHRoYXQKICAqIHRoZSBmaWxlc3lzdGVtIGlzIGluIHRoZSBtaWRkbGUgb2YgYSBmb3JjZWQgc2h1dGRvd24uCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zLmggYi9mcy94ZnMveGZzX3RyYW5zLmgKaW5kZXggMjQ2Mjg2Yi4uYzIwNDJiNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFucy5oCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnMuaApAQCAtMjk0LDggKzI5NCw4IEBACiAjZGVmaW5lCVhGU19BTExPQ19CVFJFRV9SRUYJMgogI2RlZmluZQlYRlNfQk1BUF9CVFJFRV9SRUYJMgogI2RlZmluZQlYRlNfRElSX0JUUkVFX1JFRgkyCisjZGVmaW5lCVhGU19JTk9fUkVGCQkyCiAjZGVmaW5lCVhGU19BVFRSX0JUUkVFX1JFRgkxCi0jZGVmaW5lCVhGU19JTk9fUkVGCQkxCiAjZGVmaW5lCVhGU19EUVVPVF9SRUYJCTEKIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCmluZGV4IGRjOTA2OTUuLmM1YmJiYzQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19haWwuYwpAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUgInhmc190cmFuc19wcml2LmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAKLVNUQVRJQyB2b2lkIHhmc19haWxfaW5zZXJ0KHN0cnVjdCB4ZnNfYWlsICosIHhmc19sb2dfaXRlbV90ICopOwotU1RBVElDIHhmc19sb2dfaXRlbV90ICogeGZzX2FpbF9kZWxldGUoc3RydWN0IHhmc19haWwgKiwgeGZzX2xvZ19pdGVtX3QgKik7CitTVEFUSUMgdm9pZCB4ZnNfYWlsX3NwbGljZShzdHJ1Y3QgeGZzX2FpbCAqLCBzdHJ1Y3QgbGlzdF9oZWFkICosIHhmc19sc25fdCk7CitTVEFUSUMgdm9pZCB4ZnNfYWlsX2RlbGV0ZShzdHJ1Y3QgeGZzX2FpbCAqLCB4ZnNfbG9nX2l0ZW1fdCAqKTsKIFNUQVRJQyB4ZnNfbG9nX2l0ZW1fdCAqIHhmc19haWxfbWluKHN0cnVjdCB4ZnNfYWlsICopOwogU1RBVElDIHhmc19sb2dfaXRlbV90ICogeGZzX2FpbF9uZXh0KHN0cnVjdCB4ZnNfYWlsICosIHhmc19sb2dfaXRlbV90ICopOwogCkBAIC00NDksMTI5ICs0NDksMTUyIEBACiAJCXhmc19sb2dfbW92ZV90YWlsKGFpbHAtPnhhX21vdW50LCAxKTsKIH0JLyogeGZzX3RyYW5zX3VubG9ja2VkX2l0ZW0gKi8KIAotCiAvKgotICogVXBkYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgaXRlbSBpbiB0aGUgQUlMIHdpdGggdGhlIG5ldwotICogbHNuLiAgSWYgaXQgaXMgbm90IHlldCBpbiB0aGUgQUlMLCBhZGQgaXQuICBPdGhlcndpc2UsIG1vdmUKLSAqIGl0IHRvIGl0cyBuZXcgcG9zaXRpb24gYnkgcmVtb3ZpbmcgaXQgYW5kIHJlLWFkZGluZyBpdC4KKyAqIHhmc190cmFuc19haWxfdXBkYXRlIC0gYnVsayBBSUwgaW5zZXJ0aW9uIG9wZXJhdGlvbi4KICAqCi0gKiBXYWtldXAgYW55b25lIHdpdGggYW4gbHNuIGxlc3MgdGhhbiB0aGUgaXRlbSdzIGxzbi4gIElmIHRoZSBpdGVtCi0gKiB3ZSBtb3ZlIGluIHRoZSBBSUwgaXMgdGhlIG1pbmltdW0gb25lLCB1cGRhdGUgdGhlIHRhaWwgbHNuIGluIHRoZQotICogbG9nIG1hbmFnZXIuCisgKiBAeGZzX3RyYW5zX2FpbF91cGRhdGUgdGFrZXMgYW4gYXJyYXkgb2YgbG9nIGl0ZW1zIHRoYXQgYWxsIG5lZWQgdG8gYmUKKyAqIHBvc2l0aW9uZWQgYXQgdGhlIHNhbWUgTFNOIGluIHRoZSBBSUwuIElmIGFuIGl0ZW0gaXMgbm90IGluIHRoZSBBSUwsIGl0IHdpbGwKKyAqIGJlIGFkZGVkLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIGJlIHJlcG9zaXRpb25lZCAgYnkgcmVtb3ZpbmcgaXQgYW5kIHJlLWFkZGluZworICogaXQgdG8gdGhlIEFJTC4gSWYgd2UgbW92ZSB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgQUlMLCB1cGRhdGUgdGhlIGxvZyB0YWlsIHRvCisgKiBtYXRjaCB0aGUgbmV3IG1pbmltdW0gTFNOIGluIHRoZSBBSUwuCiAgKgotICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBBSUwgbG9jayBoZWxkLiAgVGhlIGxvY2sKLSAqIGlzIGRyb3BwZWQgYmVmb3JlIHJldHVybmluZy4KKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIEFJTCBsb2NrIG9uY2UgdG8gZXhlY3V0ZSB0aGUgdXBkYXRlIG9wZXJhdGlvbnMgb24KKyAqIGFsbCB0aGUgaXRlbXMgaW4gdGhlIGFycmF5LCBhbmQgYXMgc3VjaCBzaG91bGQgbm90IGJlIGNhbGxlZCB3aXRoIHRoZSBBSUwKKyAqIGxvY2sgaGVsZC4gQXMgYSByZXN1bHQsIG9uY2Ugd2UgaGF2ZSB0aGUgQUlMIGxvY2ssIHdlIG5lZWQgdG8gY2hlY2sgZWFjaCBsb2cKKyAqIGl0ZW0gTFNOIHRvIGNvbmZpcm0gaXQgbmVlZHMgdG8gYmUgbW92ZWQgZm9yd2FyZCBpbiB0aGUgQUlMLgorICoKKyAqIFRvIG9wdGltaXNlIHRoZSBpbnNlcnQgb3BlcmF0aW9uLCB3ZSBkZWxldGUgYWxsIHRoZSBpdGVtcyBmcm9tIHRoZSBBSUwgaW4KKyAqIHRoZSBmaXJzdCBwYXNzLCBtb3ZpbmcgdGhlbSBpbnRvIGEgdGVtcG9yYXJ5IGxpc3QsIHRoZW4gc3BsaWNlIHRoZSB0ZW1wb3JhcnkKKyAqIGxpc3QgaW50byB0aGUgY29ycmVjdCBwb3NpdGlvbiBpbiB0aGUgQUlMLiBUaGlzIGF2b2lkcyBuZWVkaW5nIHRvIGRvIGFuCisgKiBpbnNlcnQgb3BlcmF0aW9uIG9uIGV2ZXJ5IGl0ZW0uCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBBSUwgbG9jayBoZWxkLiAgVGhlIGxvY2sgaXMgZHJvcHBlZAorICogYmVmb3JlIHJldHVybmluZy4KICAqLwogdm9pZAoteGZzX3RyYW5zX2FpbF91cGRhdGUoCi0Jc3RydWN0IHhmc19haWwJKmFpbHAsCi0JeGZzX2xvZ19pdGVtX3QJKmxpcCwKLQl4ZnNfbHNuX3QJbHNuKSBfX3JlbGVhc2VzKGFpbHAtPnhhX2xvY2spCit4ZnNfdHJhbnNfYWlsX3VwZGF0ZV9idWxrKAorCXN0cnVjdCB4ZnNfYWlsCQkqYWlscCwKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSoqbG9nX2l0ZW1zLAorCWludAkJCW5yX2l0ZW1zLAorCXhmc19sc25fdAkJbHNuKSBfX3JlbGVhc2VzKGFpbHAtPnhhX2xvY2spCiB7Ci0JeGZzX2xvZ19pdGVtX3QJCSpkbGlwID0gTlVMTDsKLQl4ZnNfbG9nX2l0ZW1fdAkJKm1saXA7CS8qIHB0ciB0byBtaW5pbXVtIGxpcCAqLworCXhmc19sb2dfaXRlbV90CQkqbWxpcDsKIAl4ZnNfbHNuX3QJCXRhaWxfbHNuOworCWludAkJCW1saXBfY2hhbmdlZCA9IDA7CisJaW50CQkJaTsKKwlMSVNUX0hFQUQodG1wKTsKIAogCW1saXAgPSB4ZnNfYWlsX21pbihhaWxwKTsKIAotCWlmIChsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgewotCQlkbGlwID0geGZzX2FpbF9kZWxldGUoYWlscCwgbGlwKTsKLQkJQVNTRVJUKGRsaXAgPT0gbGlwKTsKLQkJeGZzX3RyYW5zX2FpbF9jdXJzb3JfY2xlYXIoYWlscCwgZGxpcCk7Ci0JfSBlbHNlIHsKLQkJbGlwLT5saV9mbGFncyB8PSBYRlNfTElfSU5fQUlMOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnJfaXRlbXM7IGkrKykgeworCQlzdHJ1Y3QgeGZzX2xvZ19pdGVtICpsaXAgPSBsb2dfaXRlbXNbaV07CisJCWlmIChsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgeworCQkJLyogY2hlY2sgaWYgd2UgcmVhbGx5IG5lZWQgdG8gbW92ZSB0aGUgaXRlbSAqLworCQkJaWYgKFhGU19MU05fQ01QKGxzbiwgbGlwLT5saV9sc24pIDw9IDApCisJCQkJY29udGludWU7CiAKLQlsaXAtPmxpX2xzbiA9IGxzbjsKLQl4ZnNfYWlsX2luc2VydChhaWxwLCBsaXApOwotCi0JaWYgKG1saXAgPT0gZGxpcCkgewotCQltbGlwID0geGZzX2FpbF9taW4oYWlscCk7Ci0JCS8qCi0JCSAqIEl0IGlzIG5vdCBzYWZlIHRvIGFjY2VzcyBtbGlwIGFmdGVyIHRoZSBBSUwgbG9jayBpcwotCQkgKiBkcm9wcGVkLCBzbyB3ZSBtdXN0IGdldCBhIGNvcHkgb2YgbGlfbHNuIGJlZm9yZSB3ZSBkbwotCQkgKiBzby4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgb24gMzItYml0IHBsYXRmb3JtcwotCQkgKiB3aGVyZSBhY2Nlc3NpbmcgYW5kIHVwZGF0aW5nIDY0LWJpdCB2YWx1ZXMgbGlrZSBsaV9sc24KLQkJICogaXMgbm90IGF0b21pYy4KLQkJICovCi0JCXRhaWxfbHNuID0gbWxpcC0+bGlfbHNuOwotCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7Ci0JCXhmc19sb2dfbW92ZV90YWlsKGFpbHAtPnhhX21vdW50LCB0YWlsX2xzbik7Ci0JfSBlbHNlIHsKLQkJc3Bpbl91bmxvY2soJmFpbHAtPnhhX2xvY2spOwotCX0KLQotCi19CS8qIHhmc190cmFuc191cGRhdGVfYWlsICovCi0KLS8qCi0gKiBEZWxldGUgdGhlIGdpdmVuIGl0ZW0gZnJvbSB0aGUgQUlMLiAgSXQgbXVzdCBhbHJlYWR5IGJlIGluCi0gKiB0aGUgQUlMLgotICoKLSAqIFdha2V1cCBhbnlvbmUgd2l0aCBhbiBsc24gbGVzcyB0aGFuIGl0ZW0ncyBsc24uICAgIElmIHRoZSBpdGVtCi0gKiB3ZSBkZWxldGUgaW4gdGhlIEFJTCBpcyB0aGUgbWluaW11bSBvbmUsIHVwZGF0ZSB0aGUgdGFpbCBsc24gaW4gdGhlCi0gKiBsb2cgbWFuYWdlci4KLSAqCi0gKiBDbGVhciB0aGUgSU5fQUlMIGZsYWcgZnJvbSB0aGUgaXRlbSwgcmVzZXQgaXRzIGxzbiB0byAwLCBhbmQKLSAqIGJ1bXAgdGhlIEFJTCdzIGdlbmVyYXRpb24gY291bnQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdHJlZQotICogaGFzIGNoYW5nZWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBBSUwgbG9jayBoZWxkLiAgVGhlIGxvY2sKLSAqIGlzIGRyb3BwZWQgYmVmb3JlIHJldHVybmluZy4KLSAqLwotdm9pZAoteGZzX3RyYW5zX2FpbF9kZWxldGUoCi0Jc3RydWN0IHhmc19haWwJKmFpbHAsCi0JeGZzX2xvZ19pdGVtX3QJKmxpcCkgX19yZWxlYXNlcyhhaWxwLT54YV9sb2NrKQotewotCXhmc19sb2dfaXRlbV90CQkqZGxpcDsKLQl4ZnNfbG9nX2l0ZW1fdAkJKm1saXA7Ci0JeGZzX2xzbl90CQl0YWlsX2xzbjsKLQotCWlmIChsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgewotCQltbGlwID0geGZzX2FpbF9taW4oYWlscCk7Ci0JCWRsaXAgPSB4ZnNfYWlsX2RlbGV0ZShhaWxwLCBsaXApOwotCQlBU1NFUlQoZGxpcCA9PSBsaXApOwotCQl4ZnNfdHJhbnNfYWlsX2N1cnNvcl9jbGVhcihhaWxwLCBkbGlwKTsKLQotCi0JCWxpcC0+bGlfZmxhZ3MgJj0gflhGU19MSV9JTl9BSUw7Ci0JCWxpcC0+bGlfbHNuID0gMDsKLQotCQlpZiAobWxpcCA9PSBkbGlwKSB7Ci0JCQltbGlwID0geGZzX2FpbF9taW4oYWlscCk7Ci0JCQkvKgotCQkJICogSXQgaXMgbm90IHNhZmUgdG8gYWNjZXNzIG1saXAgYWZ0ZXIgdGhlIEFJTCBsb2NrCi0JCQkgKiBpcyBkcm9wcGVkLCBzbyB3ZSBtdXN0IGdldCBhIGNvcHkgb2YgbGlfbHNuCi0JCQkgKiBiZWZvcmUgd2UgZG8gc28uICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50Ci0JCQkgKiBvbiAzMi1iaXQgcGxhdGZvcm1zIHdoZXJlIGFjY2Vzc2luZyBhbmQgdXBkYXRpbmcKLQkJCSAqIDY0LWJpdCB2YWx1ZXMgbGlrZSBsaV9sc24gaXMgbm90IGF0b21pYy4KLQkJCSAqLwotCQkJdGFpbF9sc24gPSBtbGlwID8gbWxpcC0+bGlfbHNuIDogMDsKLQkJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKLQkJCXhmc19sb2dfbW92ZV90YWlsKGFpbHAtPnhhX21vdW50LCB0YWlsX2xzbik7CisJCQl4ZnNfYWlsX2RlbGV0ZShhaWxwLCBsaXApOworCQkJaWYgKG1saXAgPT0gbGlwKQorCQkJCW1saXBfY2hhbmdlZCA9IDE7CiAJCX0gZWxzZSB7Ci0JCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7CisJCQlsaXAtPmxpX2ZsYWdzIHw9IFhGU19MSV9JTl9BSUw7CiAJCX0KKwkJbGlwLT5saV9sc24gPSBsc247CisJCWxpc3RfYWRkKCZsaXAtPmxpX2FpbCwgJnRtcCk7CiAJfQotCWVsc2UgewotCQkvKgotCQkgKiBJZiB0aGUgZmlsZSBzeXN0ZW0gaXMgbm90IGJlaW5nIHNodXRkb3duLCB3ZSBhcmUgaW4KLQkJICogc2VyaW91cyB0cm91YmxlIGlmIHdlIGdldCB0byB0aGlzIHN0YWdlLgotCQkgKi8KLQkJc3RydWN0IHhmc19tb3VudAkqbXAgPSBhaWxwLT54YV9tb3VudDsKIAorCXhmc19haWxfc3BsaWNlKGFpbHAsICZ0bXAsIGxzbik7CisKKwlpZiAoIW1saXBfY2hhbmdlZCkgewogCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7Ci0JCWlmICghWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKLQkJCXhmc19jbW5fZXJyKFhGU19QVEFHX0FJTERFTEVURSwgQ0VfQUxFUlQsIG1wLAotCQkiJXM6IGF0dGVtcHRpbmcgdG8gZGVsZXRlIGEgbG9nIGl0ZW0gdGhhdCBpcyBub3QgaW4gdGhlIEFJTCIsCi0JCQkJCV9fZnVuY19fKTsKLQkJCXhmc19mb3JjZV9zaHV0ZG93bihtcCwgU0hVVERPV05fQ09SUlVQVF9JTkNPUkUpOwotCQl9CisJCXJldHVybjsKIAl9CisKKwkvKgorCSAqIEl0IGlzIG5vdCBzYWZlIHRvIGFjY2VzcyBtbGlwIGFmdGVyIHRoZSBBSUwgbG9jayBpcyBkcm9wcGVkLCBzbyB3ZQorCSAqIG11c3QgZ2V0IGEgY29weSBvZiBsaV9sc24gYmVmb3JlIHdlIGRvIHNvLiAgVGhpcyBpcyBlc3BlY2lhbGx5CisJICogaW1wb3J0YW50IG9uIDMyLWJpdCBwbGF0Zm9ybXMgd2hlcmUgYWNjZXNzaW5nIGFuZCB1cGRhdGluZyA2NC1iaXQKKwkgKiB2YWx1ZXMgbGlrZSBsaV9sc24gaXMgbm90IGF0b21pYy4KKwkgKi8KKwltbGlwID0geGZzX2FpbF9taW4oYWlscCk7CisJdGFpbF9sc24gPSBtbGlwLT5saV9sc247CisJc3Bpbl91bmxvY2soJmFpbHAtPnhhX2xvY2spOworCXhmc19sb2dfbW92ZV90YWlsKGFpbHAtPnhhX21vdW50LCB0YWlsX2xzbik7CiB9CiAKKy8qCisgKiB4ZnNfdHJhbnNfYWlsX2RlbGV0ZV9idWxrIC0gcmVtb3ZlIG11bHRpcGxlIGxvZyBpdGVtcyBmcm9tIHRoZSBBSUwKKyAqCisgKiBAeGZzX3RyYW5zX2FpbF9kZWxldGVfYnVsayB0YWtlcyBhbiBhcnJheSBvZiBsb2cgaXRlbXMgdGhhdCBhbGwgbmVlZCB0bworICogcmVtb3ZlZCBmcm9tIHRoZSBBSUwuIFRoZSBjYWxsZXIgaXMgYWxyZWFkeSBob2xkaW5nIHRoZSBBSUwgbG9jaywgYW5kIGRvbmUKKyAqIGFsbCB0aGUgY2hlY2tzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGl0ZW1zIHBhc3NlZCBpbiB2aWEgQGxvZ19pdGVtcyBhcmUKKyAqIHJlYWR5IGZvciBkZWxldGlvbi4gVGhpcyBpbmNsdWRlcyBjaGVja2luZyB0aGF0IHRoZSBpdGVtcyBhcmUgaW4gdGhlIEFJTC4KKyAqCisgKiBGb3IgZWFjaCBsb2cgaXRlbSB0byBiZSByZW1vdmVkLCB1bmxpbmsgaXQgIGZyb20gdGhlIEFJTCwgY2xlYXIgdGhlIElOX0FJTAorICogZmxhZyBmcm9tIHRoZSBpdGVtIGFuZCByZXNldCB0aGUgaXRlbSdzIGxzbiB0byAwLiBJZiB3ZSByZW1vdmUgdGhlIGZpcnN0CisgKiBpdGVtIGluIHRoZSBBSUwsIHVwZGF0ZSB0aGUgbG9nIHRhaWwgdG8gbWF0Y2ggdGhlIG5ldyBtaW5pbXVtIExTTiBpbiB0aGUKKyAqIEFJTC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGRyb3AgdGhlIEFJTCBsb2NrIHVudGlsIGFsbCBpdGVtcyBhcmUgcmVtb3ZlZCBmcm9tCisgKiB0aGUgQUlMIHRvIG1pbmltaXNlIHRoZSBhbW91bnQgb2YgbG9jayB0cmFmZmljIG9uIHRoZSBBSUwuIFRoaXMgZG9lcyBub3QKKyAqIGdyZWF0bHkgaW5jcmVhc2UgdGhlIEFJTCBob2xkIHRpbWUsIGJ1dCBkb2VzIHNpZ25pZmljYW50bHkgcmVkdWNlIHRoZSBhbW91bnQKKyAqIG9mIHRyYWZmaWMgb24gdGhlIGxvY2ssIGVzcGVjaWFsbHkgZHVyaW5nIElPIGNvbXBsZXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBBSUwgbG9jayBoZWxkLiAgVGhlIGxvY2sgaXMgZHJvcHBlZAorICogYmVmb3JlIHJldHVybmluZy4KKyAqLwordm9pZAoreGZzX3RyYW5zX2FpbF9kZWxldGVfYnVsaygKKwlzdHJ1Y3QgeGZzX2FpbAkJKmFpbHAsCisJc3RydWN0IHhmc19sb2dfaXRlbQkqKmxvZ19pdGVtcywKKwlpbnQJCQlucl9pdGVtcykgX19yZWxlYXNlcyhhaWxwLT54YV9sb2NrKQoreworCXhmc19sb2dfaXRlbV90CQkqbWxpcDsKKwl4ZnNfbHNuX3QJCXRhaWxfbHNuOworCWludAkJCW1saXBfY2hhbmdlZCA9IDA7CisJaW50CQkJaTsKIAorCW1saXAgPSB4ZnNfYWlsX21pbihhaWxwKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9pdGVtczsgaSsrKSB7CisJCXN0cnVjdCB4ZnNfbG9nX2l0ZW0gKmxpcCA9IGxvZ19pdGVtc1tpXTsKKwkJaWYgKCEobGlwLT5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpKSB7CisJCQlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGFpbHAtPnhhX21vdW50OworCisJCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7CisJCQlpZiAoIVhGU19GT1JDRURfU0hVVERPV04obXApKSB7CisJCQkJeGZzX2Ntbl9lcnIoWEZTX1BUQUdfQUlMREVMRVRFLCBDRV9BTEVSVCwgbXAsCisJCSIlczogYXR0ZW1wdGluZyB0byBkZWxldGUgYSBsb2cgaXRlbSB0aGF0IGlzIG5vdCBpbiB0aGUgQUlMIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJCQl4ZnNfZm9yY2Vfc2h1dGRvd24obXAsIFNIVVRET1dOX0NPUlJVUFRfSU5DT1JFKTsKKwkJCX0KKwkJCXJldHVybjsKKwkJfQorCisJCXhmc19haWxfZGVsZXRlKGFpbHAsIGxpcCk7CisJCWxpcC0+bGlfZmxhZ3MgJj0gflhGU19MSV9JTl9BSUw7CisJCWxpcC0+bGlfbHNuID0gMDsKKwkJaWYgKG1saXAgPT0gbGlwKQorCQkJbWxpcF9jaGFuZ2VkID0gMTsKKwl9CisKKwlpZiAoIW1saXBfY2hhbmdlZCkgeworCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEl0IGlzIG5vdCBzYWZlIHRvIGFjY2VzcyBtbGlwIGFmdGVyIHRoZSBBSUwgbG9jayBpcyBkcm9wcGVkLCBzbyB3ZQorCSAqIG11c3QgZ2V0IGEgY29weSBvZiBsaV9sc24gYmVmb3JlIHdlIGRvIHNvLiAgVGhpcyBpcyBlc3BlY2lhbGx5CisJICogaW1wb3J0YW50IG9uIDMyLWJpdCBwbGF0Zm9ybXMgd2hlcmUgYWNjZXNzaW5nIGFuZCB1cGRhdGluZyA2NC1iaXQKKwkgKiB2YWx1ZXMgbGlrZSBsaV9sc24gaXMgbm90IGF0b21pYy4gSXQgaXMgcG9zc2libGUgd2UndmUgZW1wdGllZCB0aGUKKwkgKiBBSUwgaGVyZSwgc28gaWYgdGhhdCBpcyB0aGUgY2FzZSwgcGFzcyBhbiBMU04gb2YgMCB0byB0aGUgdGFpbCBtb3ZlLgorCSAqLworCW1saXAgPSB4ZnNfYWlsX21pbihhaWxwKTsKKwl0YWlsX2xzbiA9IG1saXAgPyBtbGlwLT5saV9sc24gOiAwOworCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKKwl4ZnNfbG9nX21vdmVfdGFpbChhaWxwLT54YV9tb3VudCwgdGFpbF9sc24pOworfQogCiAvKgogICogVGhlIGFjdGl2ZSBpdGVtIGxpc3QgKEFJTCkgaXMgYSBkb3VibHkgbGlua2VkIGxpc3Qgb2YgbG9nCkBAIC02MjMsMTYgKzY0NiwxMyBAQAogfQogCiAvKgotICogSW5zZXJ0IHRoZSBnaXZlbiBsb2cgaXRlbSBpbnRvIHRoZSBBSUwuCi0gKiBXZSBhbG1vc3QgYWx3YXlzIGluc2VydCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LCBzbyBvbiBpbnNlcnRzCi0gKiB3ZSBzZWFyY2ggZnJvbSB0aGUgZW5kIG9mIHRoZSBsaXN0IHRvIGZpbmQgd2hlcmUgdGhlCi0gKiBuZXcgaXRlbSBiZWxvbmdzLgorICogc3BsaWNlIHRoZSBsb2cgaXRlbSBsaXN0IGludG8gdGhlIEFJTCBhdCB0aGUgZ2l2ZW4gTFNOLgogICovCiBTVEFUSUMgdm9pZAoteGZzX2FpbF9pbnNlcnQoCit4ZnNfYWlsX3NwbGljZSgKIAlzdHJ1Y3QgeGZzX2FpbAkqYWlscCwKLQl4ZnNfbG9nX2l0ZW1fdAkqbGlwKQotLyogQVJHU1VTRUQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCXhmc19sc25fdAlsc24pCiB7CiAJeGZzX2xvZ19pdGVtX3QJKm5leHRfbGlwOwogCkBAIC02NDAsMzkgKzY2MCwzMyBAQAogCSAqIElmIHRoZSBsaXN0IGlzIGVtcHR5LCBqdXN0IGluc2VydCB0aGUgaXRlbS4KIAkgKi8KIAlpZiAobGlzdF9lbXB0eSgmYWlscC0+eGFfYWlsKSkgewotCQlsaXN0X2FkZCgmbGlwLT5saV9haWwsICZhaWxwLT54YV9haWwpOworCQlsaXN0X3NwbGljZShsaXN0LCAmYWlscC0+eGFfYWlsKTsKIAkJcmV0dXJuOwogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShuZXh0X2xpcCwgJmFpbHAtPnhhX2FpbCwgbGlfYWlsKSB7Ci0JCWlmIChYRlNfTFNOX0NNUChuZXh0X2xpcC0+bGlfbHNuLCBsaXAtPmxpX2xzbikgPD0gMCkKKwkJaWYgKFhGU19MU05fQ01QKG5leHRfbGlwLT5saV9sc24sIGxzbikgPD0gMCkKIAkJCWJyZWFrOwogCX0KIAogCUFTU0VSVCgoJm5leHRfbGlwLT5saV9haWwgPT0gJmFpbHAtPnhhX2FpbCkgfHwKLQkgICAgICAgKFhGU19MU05fQ01QKG5leHRfbGlwLT5saV9sc24sIGxpcC0+bGlfbHNuKSA8PSAwKSk7CisJICAgICAgIChYRlNfTFNOX0NNUChuZXh0X2xpcC0+bGlfbHNuLCBsc24pIDw9IDApKTsKIAotCWxpc3RfYWRkKCZsaXAtPmxpX2FpbCwgJm5leHRfbGlwLT5saV9haWwpOwotCi0JeGZzX2FpbF9jaGVjayhhaWxwLCBsaXApOworCWxpc3Rfc3BsaWNlX2luaXQobGlzdCwgJm5leHRfbGlwLT5saV9haWwpOwogCXJldHVybjsKIH0KIAogLyoKICAqIERlbGV0ZSB0aGUgZ2l2ZW4gaXRlbSBmcm9tIHRoZSBBSUwuICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpdGVtLgogICovCi0vKkFSR1NVU0VEKi8KLVNUQVRJQyB4ZnNfbG9nX2l0ZW1fdCAqCitTVEFUSUMgdm9pZAogeGZzX2FpbF9kZWxldGUoCiAJc3RydWN0IHhmc19haWwJKmFpbHAsCiAJeGZzX2xvZ19pdGVtX3QJKmxpcCkKLS8qIEFSR1NVU0VEICovCiB7CiAJeGZzX2FpbF9jaGVjayhhaWxwLCBsaXApOwotCiAJbGlzdF9kZWwoJmxpcC0+bGlfYWlsKTsKLQotCXJldHVybiBsaXA7CisJeGZzX3RyYW5zX2FpbF9jdXJzb3JfY2xlYXIoYWlscCwgbGlwKTsKIH0KIAogLyoKQEAgLTY4Miw3ICs2OTYsNiBAQAogU1RBVElDIHhmc19sb2dfaXRlbV90ICoKIHhmc19haWxfbWluKAogCXN0cnVjdCB4ZnNfYWlsCSphaWxwKQotLyogQVJHU1VTRUQgKi8KIHsKIAlpZiAobGlzdF9lbXB0eSgmYWlscC0+eGFfYWlsKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC02OTksNyArNzEyLDYgQEAKIHhmc19haWxfbmV4dCgKIAlzdHJ1Y3QgeGZzX2FpbAkqYWlscCwKIAl4ZnNfbG9nX2l0ZW1fdAkqbGlwKQotLyogQVJHU1VTRUQgKi8KIHsKIAlpZiAobGlwLT5saV9haWwubmV4dCA9PSAmYWlscC0+eGFfYWlsKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfZXh0ZnJlZS5jIGIvZnMveGZzL3hmc190cmFuc19leHRmcmVlLmMKaW5kZXggZjc4M2Q1ZS4uZjc1OTBmNSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19leHRmcmVlLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19leHRmcmVlLmMKQEAgLTY5LDEyICs2OSwxNiBAQAogCXRwLT50X2ZsYWdzIHw9IFhGU19UUkFOU19ESVJUWTsKIAllZmlwLT5lZmlfaXRlbS5saV9kZXNjLT5saWRfZmxhZ3MgfD0gWEZTX0xJRF9ESVJUWTsKIAotCW5leHRfZXh0ZW50ID0gZWZpcC0+ZWZpX25leHRfZXh0ZW50OworCS8qCisJICogYXRvbWljX2luY19yZXR1cm4gZ2l2ZXMgdXMgdGhlIHZhbHVlIGFmdGVyIHRoZSBpbmNyZW1lbnQ7CisJICogd2Ugd2FudCB0byB1c2UgaXQgYXMgYW4gYXJyYXkgaW5kZXggc28gd2UgbmVlZCB0byBzdWJ0cmFjdCAxIGZyb20KKwkgKiBpdC4KKwkgKi8KKwluZXh0X2V4dGVudCA9IGF0b21pY19pbmNfcmV0dXJuKCZlZmlwLT5lZmlfbmV4dF9leHRlbnQpIC0gMTsKIAlBU1NFUlQobmV4dF9leHRlbnQgPCBlZmlwLT5lZmlfZm9ybWF0LmVmaV9uZXh0ZW50cyk7CiAJZXh0cCA9ICYoZWZpcC0+ZWZpX2Zvcm1hdC5lZmlfZXh0ZW50c1tuZXh0X2V4dGVudF0pOwogCWV4dHAtPmV4dF9zdGFydCA9IHN0YXJ0X2Jsb2NrOwogCWV4dHAtPmV4dF9sZW4gPSBleHRfbGVuOwotCWVmaXAtPmVmaV9uZXh0X2V4dGVudCsrOwogfQogCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfcHJpdi5oIGIvZnMveGZzL3hmc190cmFuc19wcml2LmgKaW5kZXggNjJkYTg2Yy4uMzUxNjJjMiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19wcml2LmgKKysrIGIvZnMveGZzL3hmc190cmFuc19wcml2LmgKQEAgLTIyLDE1ICsyMiwxNyBAQAogc3RydWN0IHhmc19sb2dfaXRlbV9kZXNjOwogc3RydWN0IHhmc19tb3VudDsKIHN0cnVjdCB4ZnNfdHJhbnM7CitzdHJ1Y3QgeGZzX2FpbDsKK3N0cnVjdCB4ZnNfbG9nX3ZlYzsKIAogdm9pZAl4ZnNfdHJhbnNfYWRkX2l0ZW0oc3RydWN0IHhmc190cmFucyAqLCBzdHJ1Y3QgeGZzX2xvZ19pdGVtICopOwogdm9pZAl4ZnNfdHJhbnNfZGVsX2l0ZW0oc3RydWN0IHhmc19sb2dfaXRlbSAqKTsKIHZvaWQJeGZzX3RyYW5zX2ZyZWVfaXRlbXMoc3RydWN0IHhmc190cmFucyAqdHAsIHhmc19sc25fdCBjb21taXRfbHNuLAogCQkJCWludCBmbGFncyk7Ci12b2lkCXhmc190cmFuc19pdGVtX2NvbW1pdHRlZChzdHJ1Y3QgeGZzX2xvZ19pdGVtICpsaXAsCi0JCQkJeGZzX2xzbl90IGNvbW1pdF9sc24sIGludCBhYm9ydGVkKTsKIHZvaWQJeGZzX3RyYW5zX3VucmVzZXJ2ZV9hbmRfbW9kX3NiKHN0cnVjdCB4ZnNfdHJhbnMgKnRwKTsKIAordm9pZAl4ZnNfdHJhbnNfY29tbWl0dGVkX2J1bGsoc3RydWN0IHhmc19haWwgKmFpbHAsIHN0cnVjdCB4ZnNfbG9nX3ZlYyAqbHYsCisJCQkJeGZzX2xzbl90IGNvbW1pdF9sc24sIGludCBhYm9ydGVkKTsKIC8qCiAgKiBBSUwgdHJhdmVyc2FsIGN1cnNvci4KICAqCkBAIC03MywxMiArNzUsMjkgQEAKIC8qCiAgKiBGcm9tIHhmc190cmFuc19haWwuYwogICovCi12b2lkCQkJeGZzX3RyYW5zX2FpbF91cGRhdGUoc3RydWN0IHhmc19haWwgKmFpbHAsCi0JCQkJCXN0cnVjdCB4ZnNfbG9nX2l0ZW0gKmxpcCwgeGZzX2xzbl90IGxzbikKLQkJCQkJX19yZWxlYXNlcyhhaWxwLT54YV9sb2NrKTsKLXZvaWQJCQl4ZnNfdHJhbnNfYWlsX2RlbGV0ZShzdHJ1Y3QgeGZzX2FpbCAqYWlscCwKLQkJCQkJc3RydWN0IHhmc19sb2dfaXRlbSAqbGlwKQotCQkJCQlfX3JlbGVhc2VzKGFpbHAtPnhhX2xvY2spOwordm9pZAl4ZnNfdHJhbnNfYWlsX3VwZGF0ZV9idWxrKHN0cnVjdCB4ZnNfYWlsICphaWxwLAorCQkJCXN0cnVjdCB4ZnNfbG9nX2l0ZW0gKipsb2dfaXRlbXMsIGludCBucl9pdGVtcywKKwkJCQl4ZnNfbHNuX3QgbHNuKSBfX3JlbGVhc2VzKGFpbHAtPnhhX2xvY2spOworc3RhdGljIGlubGluZSB2b2lkCit4ZnNfdHJhbnNfYWlsX3VwZGF0ZSgKKwlzdHJ1Y3QgeGZzX2FpbAkJKmFpbHAsCisJc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwLAorCXhmc19sc25fdAkJbHNuKSBfX3JlbGVhc2VzKGFpbHAtPnhhX2xvY2spCit7CisJeGZzX3RyYW5zX2FpbF91cGRhdGVfYnVsayhhaWxwLCAmbGlwLCAxLCBsc24pOworfQorCit2b2lkCXhmc190cmFuc19haWxfZGVsZXRlX2J1bGsoc3RydWN0IHhmc19haWwgKmFpbHAsCisJCQkJc3RydWN0IHhmc19sb2dfaXRlbSAqKmxvZ19pdGVtcywgaW50IG5yX2l0ZW1zKQorCQkJCV9fcmVsZWFzZXMoYWlscC0+eGFfbG9jayk7CitzdGF0aWMgaW5saW5lIHZvaWQKK3hmc190cmFuc19haWxfZGVsZXRlKAorCXN0cnVjdCB4ZnNfYWlsCSphaWxwLAorCXhmc19sb2dfaXRlbV90CSpsaXApIF9fcmVsZWFzZXMoYWlscC0+eGFfbG9jaykKK3sKKwl4ZnNfdHJhbnNfYWlsX2RlbGV0ZV9idWxrKGFpbHAsICZsaXAsIDEpOworfQorCiB2b2lkCQkJeGZzX3RyYW5zX2FpbF9wdXNoKHN0cnVjdCB4ZnNfYWlsICosIHhmc19sc25fdCk7CiB2b2lkCQkJeGZzX3RyYW5zX3VubG9ja2VkX2l0ZW0oc3RydWN0IHhmc19haWwgKiwKIAkJCQkJeGZzX2xvZ19pdGVtX3QgKik7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKaW5kZXggOGU0YTYzYy4uZDhlNmY4YyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc192bm9kZW9wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwpAQCAtOTY0LDI5ICs5NjQsNDggQEAKIAkJCXhmc19mbHVzaF9wYWdlcyhpcCwgMCwgLTEsIFhCRl9BU1lOQywgRklfTk9ORSk7CiAJfQogCi0JaWYgKGlwLT5pX2QuZGlfbmxpbmsgIT0gMCkgewotCQlpZiAoKCgoaXAtPmlfZC5kaV9tb2RlICYgU19JRk1UKSA9PSBTX0lGUkVHKSAmJgotCQkgICAgICgoaXAtPmlfc2l6ZSA+IDApIHx8IChWTl9DQUNIRUQoVkZTX0koaXApKSA+IDAgfHwKLQkJICAgICAgIGlwLT5pX2RlbGF5ZWRfYmxrcyA+IDApKSAmJgotCQkgICAgIChpcC0+aV9kZi5pZl9mbGFncyAmIFhGU19JRkVYVEVOVFMpKSAgJiYKLQkJICAgICghKGlwLT5pX2QuZGlfZmxhZ3MgJgotCQkJCShYRlNfRElGTEFHX1BSRUFMTE9DIHwgWEZTX0RJRkxBR19BUFBFTkQpKSkpIHsKKwlpZiAoaXAtPmlfZC5kaV9ubGluayA9PSAwKQorCQlyZXR1cm4gMDsKIAotCQkJLyoKLQkJCSAqIElmIHdlIGNhbid0IGdldCB0aGUgaW9sb2NrIGp1c3Qgc2tpcCB0cnVuY2F0aW5nCi0JCQkgKiB0aGUgYmxvY2tzIHBhc3QgRU9GIGJlY2F1c2Ugd2UgY291bGQgZGVhZGxvY2sKLQkJCSAqIHdpdGggdGhlIG1tYXBfc2VtIG90aGVyd2lzZS4gIFdlJ2xsIGdldCBhbm90aGVyCi0JCQkgKiBjaGFuY2UgdG8gZHJvcCB0aGVtIG9uY2UgdGhlIGxhc3QgcmVmZXJlbmNlIHRvCi0JCQkgKiB0aGUgaW5vZGUgaXMgZHJvcHBlZCwgc28gd2UnbGwgbmV2ZXIgbGVhayBibG9ja3MKLQkJCSAqIHBlcm1hbmVudGx5LgotCQkJICovCi0JCQllcnJvciA9IHhmc19mcmVlX2VvZmJsb2NrcyhtcCwgaXAsCi0JCQkJCQkgICBYRlNfRlJFRV9FT0ZfVFJZTE9DSyk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJcmV0dXJuIGVycm9yOwotCQl9CisJaWYgKCgoKGlwLT5pX2QuZGlfbW9kZSAmIFNfSUZNVCkgPT0gU19JRlJFRykgJiYKKwkgICAgICgoaXAtPmlfc2l6ZSA+IDApIHx8IChWTl9DQUNIRUQoVkZTX0koaXApKSA+IDAgfHwKKwkgICAgICAgaXAtPmlfZGVsYXllZF9ibGtzID4gMCkpICYmCisJICAgICAoaXAtPmlfZGYuaWZfZmxhZ3MgJiBYRlNfSUZFWFRFTlRTKSkgICYmCisJICAgICghKGlwLT5pX2QuZGlfZmxhZ3MgJiAoWEZTX0RJRkxBR19QUkVBTExPQyB8IFhGU19ESUZMQUdfQVBQRU5EKSkpKSB7CisKKwkJLyoKKwkJICogSWYgd2UgY2FuJ3QgZ2V0IHRoZSBpb2xvY2sganVzdCBza2lwIHRydW5jYXRpbmcgdGhlIGJsb2NrcworCQkgKiBwYXN0IEVPRiBiZWNhdXNlIHdlIGNvdWxkIGRlYWRsb2NrIHdpdGggdGhlIG1tYXBfc2VtCisJCSAqIG90aGVyd2lzZS4gIFdlJ2xsIGdldCBhbm90aGVyIGNoYW5jZSB0byBkcm9wIHRoZW0gb25jZSB0aGUKKwkJICogbGFzdCByZWZlcmVuY2UgdG8gdGhlIGlub2RlIGlzIGRyb3BwZWQsIHNvIHdlJ2xsIG5ldmVyIGxlYWsKKwkJICogYmxvY2tzIHBlcm1hbmVudGx5LgorCQkgKgorCQkgKiBGdXJ0aGVyLCBjaGVjayBpZiB0aGUgaW5vZGUgaXMgYmVpbmcgb3BlbmVkLCB3cml0dGVuIGFuZAorCQkgKiBjbG9zZWQgZnJlcXVlbnRseSBhbmQgd2UgaGF2ZSBkZWxheWVkIGFsbG9jYXRpb24gYmxvY2tzCisJCSAqIG91c3RhbmRpbmcgKGUuZy4gc3RyZWFtaW5nIHdyaXRlcyBmcm9tIHRoZSBORlMgc2VydmVyKSwKKwkJICogdHJ1bmNhdGluZyB0aGUgYmxvY2tzIHBhc3QgRU9GIHdpbGwgY2F1c2UgZnJhZ21lbnRhdGlvbiB0bworCQkgKiBvY2N1ci4KKwkJICoKKwkJICogSW4gdGhpcyBjYXNlIGRvbid0IGRvIHRoZSB0cnVuY2F0aW9uLCBlaXRoZXIsIGJ1dCB3ZSBoYXZlIHRvCisJCSAqIGJlIGNhcmVmdWwgaG93IHdlIGRldGVjdCB0aGlzIGNhc2UuIEJsb2NrcyBiZXlvbmQgRU9GIHNob3cKKwkJICogdXAgYXMgaV9kZWxheWVkX2Jsa3MgZXZlbiB3aGVuIHRoZSBpbm9kZSBpcyBjbGVhbiwgc28gd2UKKwkJICogbmVlZCB0byB0cnVuY2F0ZSB0aGVtIGF3YXkgZmlyc3QgYmVmb3JlIGNoZWNraW5nIGZvciBhIGRpcnR5CisJCSAqIHJlbGVhc2UuIEhlbmNlIG9uIHRoZSBmaXJzdCBkaXJ0eSBjbG9zZSB3ZSB3aWxsIHN0aWxsIHJlbW92ZQorCQkgKiB0aGUgc3BlY3VsYXRpdmUgYWxsb2NhdGlvbiwgYnV0IGFmdGVyIHRoYXQgd2Ugd2lsbCBsZWF2ZSBpdAorCQkgKiBpbiBwbGFjZS4KKwkJICovCisJCWlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19JRElSVFlfUkVMRUFTRSkpCisJCQlyZXR1cm4gMDsKKworCQllcnJvciA9IHhmc19mcmVlX2VvZmJsb2NrcyhtcCwgaXAsCisJCQkJCSAgIFhGU19GUkVFX0VPRl9UUllMT0NLKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCisJCS8qIGRlbGFsbG9jIGJsb2NrcyBhZnRlciB0cnVuY2F0aW9uIG1lYW5zIGl0IHJlYWxseSBpcyBkaXJ0eSAqLworCQlpZiAoaXAtPmlfZGVsYXllZF9ibGtzKQorCQkJeGZzX2lmbGFnc19zZXQoaXAsIFhGU19JRElSVFlfUkVMRUFTRSk7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibDEuaCBiL2luY2x1ZGUvYWNwaS9hY3RibDEuaAppbmRleCBjNjM3Yjc1Li5jZDc3YWE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwxLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjdGJsMS5oCkBAIC0xMTksNyArMTE5LDcgQEAKIHN0cnVjdCBhY3BpX3RhYmxlX2JlcnQgewogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLwogCXUzMiByZWdpb25fbGVuZ3RoOwkvKiBMZW5ndGggb2YgdGhlIGJvb3QgZXJyb3IgcmVnaW9uICovCi0JdTY0IGFkZHJlc3M7CQkvKiBQaHlzaWNhbCBhZGRyZXNzcyBvZiB0aGUgZXJyb3IgcmVnaW9uICovCisJdTY0IGFkZHJlc3M7CQkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBlcnJvciByZWdpb24gKi8KIH07CiAKIC8qIEJvb3QgRXJyb3IgUmVnaW9uIChub3QgYSBzdWJ0YWJsZSwgcG9pbnRlZCB0byBieSBBZGRyZXNzIGZpZWxkIGFib3ZlKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaAppbmRleCBmZjVjNjYwLi42MDk4Y2FlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaApAQCAtMTQ3LDExICsxNDcsMTEgQEAKIC8qIEFsd2F5cyB1c2UgdGhlIGxpYnJhcnkgY29kZSBmb3IgR1BJTyBtYW5hZ2VtZW50IGNhbGxzLAogICogb3Igd2hlbiBzbGVlcGluZyBtYXkgYmUgaW52b2x2ZWQuCiAgKi8KLWV4dGVybiBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKTsKK2V4dGVybiBpbnQgX19tdXN0X2NoZWNrIGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCk7CiBleHRlcm4gdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3Bpbyk7CiAKLWV4dGVybiBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOworZXh0ZXJuIGludCBfX211c3RfY2hlY2sgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7CitleHRlcm4gaW50IF9fbXVzdF9jaGVjayBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKIAogZXh0ZXJuIGludCBncGlvX3NldF9kZWJvdW5jZSh1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBkZWJvdW5jZSk7CiAKQEAgLTE5Miw4ICsxOTIsOCBAQAogCWNvbnN0IGNoYXIJKmxhYmVsOwogfTsKIAotZXh0ZXJuIGludCBncGlvX3JlcXVlc3Rfb25lKHVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmxhYmVsKTsKLWV4dGVybiBpbnQgZ3Bpb19yZXF1ZXN0X2FycmF5KHN0cnVjdCBncGlvICphcnJheSwgc2l6ZV90IG51bSk7CitleHRlcm4gaW50IF9fbXVzdF9jaGVjayBncGlvX3JlcXVlc3Rfb25lKHVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmxhYmVsKTsKK2V4dGVybiBpbnQgX19tdXN0X2NoZWNrIGdwaW9fcmVxdWVzdF9hcnJheShzdHJ1Y3QgZ3BpbyAqYXJyYXksIHNpemVfdCBudW0pOwogZXh0ZXJuIHZvaWQgZ3Bpb19mcmVlX2FycmF5KHN0cnVjdCBncGlvICphcnJheSwgc2l6ZV90IG51bSk7CiAKICNpZmRlZiBDT05GSUdfR1BJT19TWVNGUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9pby5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9pby5oCmluZGV4IDM1NzdjYTEuLjQ2NDRjOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2lvLmgKQEAgLTIxMSw2ICsyMTEsMzYgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW5saW5lIHZvaWQgcmVhZHNsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCWluc2woKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVhZHN3KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCWluc3coKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVhZHNiKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCWluc2IoKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVzbChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwlvdXRzbCgodW5zaWduZWQgbG9uZylhZGRyLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXN3KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCW91dHN3KCh1bnNpZ25lZCBsb25nKWFkZHIsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlc2IoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4pCit7CisJb3V0c2IoKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOworfQorCiAjaWZuZGVmIENPTkZJR19HRU5FUklDX0lPTUFQCiAjZGVmaW5lIGlvcmVhZDgoYWRkcikJCXJlYWRiKGFkZHIpCiAjZGVmaW5lIGlvcmVhZDE2KGFkZHIpCQlyZWFkdyhhZGRyKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCmluZGV4IDA1Y2JhZDAuLjY4NjQ5MzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKQEAgLTIwMCw3ICsyMDAsOCBAQAogCiAjZGVmaW5lIFJFQURfTU9TVExZX0RBVEEoYWxpZ24pCQkJCQkJXAogCS4gPSBBTElHTihhbGlnbik7CQkJCQkJXAotCSooLmRhdGEuLnJlYWRfbW9zdGx5KQorCSooLmRhdGEuLnJlYWRfbW9zdGx5KQkJCQkJCVwKKwkuID0gQUxJR04oYWxpZ24pOwogCiAjZGVmaW5lIENBQ0hFTElORV9BTElHTkVEX0RBVEEoYWxpZ24pCQkJCQlcCiAJLiA9IEFMSUdOKGFsaWduKTsJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9pZl9hbGcuaCBiL2luY2x1ZGUvY3J5cHRvL2lmX2FsZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ODEzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by9pZl9hbGcuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogaWZfYWxnOiBVc2VyLXNwYWNlIGFsZ29yaXRobSBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX0NSWVBUT19JRl9BTEdfSAorI2RlZmluZSBfQ1JZUFRPX0lGX0FMR19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hbGcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKyNkZWZpbmUgQUxHX01BWF9QQUdFUwkJCTE2CisKK3N0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdDsKKworc3RydWN0IGFsZ19zb2NrIHsKKwkvKiBzdHJ1Y3Qgc29jayBtdXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIgb2Ygc3RydWN0IGFsZ19zb2NrICovCisJc3RydWN0IHNvY2sgc2s7CisKKwlzdHJ1Y3Qgc29jayAqcGFyZW50OworCisJY29uc3Qgc3RydWN0IGFmX2FsZ190eXBlICp0eXBlOworCXZvaWQgKnByaXZhdGU7Cit9OworCitzdHJ1Y3QgYWZfYWxnX2NvbXBsZXRpb24geworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247CisJaW50IGVycjsKK307CisKK3N0cnVjdCBhZl9hbGdfY29udHJvbCB7CisJc3RydWN0IGFmX2FsZ19pdiAqaXY7CisJaW50IG9wOworfTsKKworc3RydWN0IGFmX2FsZ190eXBlIHsKKwl2b2lkICooKmJpbmQpKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiB0eXBlLCB1MzIgbWFzayk7CisJdm9pZCAoKnJlbGVhc2UpKHZvaWQgKnByaXZhdGUpOworCWludCAoKnNldGtleSkodm9pZCAqcHJpdmF0ZSwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbik7CisJaW50ICgqYWNjZXB0KSh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc29jayAqc2spOworCisJc3RydWN0IHByb3RvX29wcyAqb3BzOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCWNoYXIgbmFtZVsxNF07Cit9OworCitzdHJ1Y3QgYWZfYWxnX3NnbCB7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnW0FMR19NQVhfUEFHRVNdOworCXN0cnVjdCBwYWdlICpwYWdlc1tBTEdfTUFYX1BBR0VTXTsKK307CisKK2ludCBhZl9hbGdfcmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYWZfYWxnX3R5cGUgKnR5cGUpOworaW50IGFmX2FsZ191bnJlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGFmX2FsZ190eXBlICp0eXBlKTsKKworaW50IGFmX2FsZ19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spOworaW50IGFmX2FsZ19hY2NlcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKTsKKworaW50IGFmX2FsZ19tYWtlX3NnKHN0cnVjdCBhZl9hbGdfc2dsICpzZ2wsIHZvaWQgX191c2VyICphZGRyLCBpbnQgbGVuLAorCQkgICBpbnQgd3JpdGUpOwordm9pZCBhZl9hbGdfZnJlZV9zZyhzdHJ1Y3QgYWZfYWxnX3NnbCAqc2dsKTsKKworaW50IGFmX2FsZ19jbXNnX3NlbmQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgYWZfYWxnX2NvbnRyb2wgKmNvbik7CisKK2ludCBhZl9hbGdfd2FpdF9mb3JfY29tcGxldGlvbihpbnQgZXJyLCBzdHJ1Y3QgYWZfYWxnX2NvbXBsZXRpb24gKmNvbXBsZXRpb24pOwordm9pZCBhZl9hbGdfY29tcGxldGUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsIGludCBlcnIpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhbGdfc29jayAqYWxnX3NrKHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gKHN0cnVjdCBhbGdfc29jayAqKXNrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWZfYWxnX3JlbGVhc2VfcGFyZW50KHN0cnVjdCBzb2NrICpzaykKK3sKKwlzb2NrX3B1dChhbGdfc2soc2spLT5wYXJlbnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWZfYWxnX2luaXRfY29tcGxldGlvbihzdHJ1Y3QgYWZfYWxnX2NvbXBsZXRpb24gKmNvbXBsZXRpb24pCit7CisJaW5pdF9jb21wbGV0aW9uKCZjb21wbGV0aW9uLT5jb21wbGV0aW9uKTsKK30KKworI2VuZGlmCS8qIF9DUllQVE9fSUZfQUxHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2suaCBiL2luY2x1ZGUvY3J5cHRvL3BhZGxvY2suaApzaW1pbGFyaXR5IGluZGV4IDgyJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NyeXB0by9wYWRsb2NrLmgKcmVuYW1lIHRvIGluY2x1ZGUvY3J5cHRvL3BhZGxvY2suaAppbmRleCBiNzI4ZTQ1Li5kMmNmYTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLmgKKysrIGIvaW5jbHVkZS9jcnlwdG8vcGFkbG9jay5oCkBAIC0xNSw5ICsxNSwxNSBAQAogCiAjZGVmaW5lIFBBRExPQ0tfQUxJR05NRU5UIDE2CiAKLSNkZWZpbmUgUEZYCSJwYWRsb2NrOiAiCisjZGVmaW5lIFBGWAlLQlVJTERfTU9ETkFNRSAiOiAiCiAKICNkZWZpbmUgUEFETE9DS19DUkFfUFJJT1JJVFkJMzAwCiAjZGVmaW5lIFBBRExPQ0tfQ09NUE9TSVRFX1BSSU9SSVRZIDQwMAogCisjaWZkZWYgQ09ORklHXzY0QklUCisjZGVmaW5lIFNUQUNLX0FMSUdOIDE2CisjZWxzZQorI2RlZmluZSBTVEFDS19BTElHTiA0CisjZW5kaWYKKwogI2VuZGlmCS8qIF9DUllQVE9fUEFETE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9zY2F0dGVyd2Fsay5oIGIvaW5jbHVkZS9jcnlwdG8vc2NhdHRlcndhbGsuaAppbmRleCA4MzNkMjA4Li40ZmQ5NWEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NyeXB0by9zY2F0dGVyd2Fsay5oCisrKyBiL2luY2x1ZGUvY3J5cHRvL3NjYXR0ZXJ3YWxrLmgKQEAgLTY4LDYgKzY4LDIxIEBACiAJcmV0dXJuICgrK3NnKS0+bGVuZ3RoID8gc2cgOiAodm9pZCAqKXNnX3BhZ2Uoc2cpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2NhdHRlcndhbGtfY3J5cHRvX2NoYWluKHN0cnVjdCBzY2F0dGVybGlzdCAqaGVhZCwKKwkJCQkJICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJCSAgICBpbnQgY2hhaW4sIGludCBudW0pCit7CisJaWYgKGNoYWluKSB7CisJCWhlYWQtPmxlbmd0aCArPSBzZy0+bGVuZ3RoOworCQlzZyA9IHNjYXR0ZXJ3YWxrX3NnX25leHQoc2cpOworCX0KKworCWlmIChzZykKKwkJc2NhdHRlcndhbGtfc2dfY2hhaW4oaGVhZCwgbnVtLCBzZyk7CisJZWxzZQorCQlzZ19tYXJrX2VuZChoZWFkKTsKK30KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNjYXR0ZXJ3YWxrX3NhbWVidWYoc3RydWN0IHNjYXR0ZXJfd2FsayAqd2Fsa19pbiwKIAkJCQkJCXN0cnVjdCBzY2F0dGVyX3dhbGsgKndhbGtfb3V0KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IDI3NGVhYWEuLmE0Njk0YzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTY4Myw2ICs2ODMsMjEgQEAKIAl2b2lkICpkcml2ZXJfcHJpdjsgLyoqPCBQcml2YXRlIHN0cnVjdHVyZSBmb3IgZHJpdmVyIHRvIHVzZSAqLwogfTsKIAorLyogU2l6ZSBvZiByaW5nYnVmZmVyIGZvciB2YmxhbmsgdGltZXN0YW1wcy4gSnVzdCBkb3VibGUtYnVmZmVyCisgKiBpbiBpbml0aWFsIGltcGxlbWVudGF0aW9uLgorICovCisjZGVmaW5lIERSTV9WQkxBTktUSU1FX1JCU0laRSAyCisKKy8qIEZsYWdzIGFuZCByZXR1cm4gY29kZXMgZm9yIGdldF92YmxhbmtfdGltZXN0YW1wKCkgZHJpdmVyIGZ1bmN0aW9uLiAqLworI2RlZmluZSBEUk1fQ0FMTEVEX0ZST01fVkJMSVJRIDEKKyNkZWZpbmUgRFJNX1ZCTEFOS1RJTUVfU0NBTk9VVFBPU19NRVRIT0QgKDEgPDwgMCkKKyNkZWZpbmUgRFJNX1ZCTEFOS1RJTUVfSU5WQkwgICAgICAgICAgICAgKDEgPDwgMSkKKworLyogZ2V0X3NjYW5vdXRfcG9zaXRpb24oKSByZXR1cm4gZmxhZ3MgKi8KKyNkZWZpbmUgRFJNX1NDQU5PVVRQT1NfVkFMSUQgICAgICAgICgxIDw8IDApCisjZGVmaW5lIERSTV9TQ0FOT1VUUE9TX0lOVkJMICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBEUk1fU0NBTk9VVFBPU19BQ0NVUkFURSAgICAgKDEgPDwgMikKKwogLyoqCiAgKiBEUk0gZHJpdmVyIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50IHRoZSBjb21tb24gY29kZSBmb3IKICAqIGEgZmFtaWx5IG9mIGNhcmRzLiBUaGVyZSB3aWxsIG9uZSBkcm1fZGV2aWNlIGZvciBlYWNoIGNhcmQgcHJlc2VudApAQCAtNzYwLDYgKzc3NSw2OCBAQAogCSAqLwogCWludCAoKmRldmljZV9pc19hZ3ApIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAorCS8qKgorCSAqIENhbGxlZCBieSB2YmxhbmsgdGltZXN0YW1waW5nIGNvZGUuCisJICoKKwkgKiBSZXR1cm4gdGhlIGN1cnJlbnQgZGlzcGxheSBzY2Fub3V0IHBvc2l0aW9uIGZyb20gYSBjcnRjLgorCSAqCisJICogXHBhcmFtIGRldiAgRFJNIGRldmljZS4KKwkgKiBccGFyYW0gY3J0YyBJZCBvZiB0aGUgY3J0YyB0byBxdWVyeS4KKwkgKiBccGFyYW0gKnZwb3MgVGFyZ2V0IGxvY2F0aW9uIGZvciBjdXJyZW50IHZlcnRpY2FsIHNjYW5vdXQgcG9zaXRpb24uCisJICogXHBhcmFtICpocG9zIFRhcmdldCBsb2NhdGlvbiBmb3IgY3VycmVudCBob3Jpem9udGFsIHNjYW5vdXQgcG9zaXRpb24uCisJICoKKwkgKiBSZXR1cm5zIHZwb3MgYXMgYSBwb3NpdGl2ZSBudW1iZXIgd2hpbGUgaW4gYWN0aXZlIHNjYW5vdXQgYXJlYS4KKwkgKiBSZXR1cm5zIHZwb3MgYXMgYSBuZWdhdGl2ZSBudW1iZXIgaW5zaWRlIHZibGFuaywgY291bnRpbmcgdGhlIG51bWJlcgorCSAqIG9mIHNjYW5saW5lcyB0byBnbyB1bnRpbCBlbmQgb2YgdmJsYW5rLCBlLmcuLCAtMSBtZWFucyAib25lIHNjYW5saW5lCisJICogdW50aWwgc3RhcnQgb2YgYWN0aXZlIHNjYW5vdXQgLyBlbmQgb2YgdmJsYW5rLiIKKwkgKgorCSAqIFxyZXR1cm4gRmxhZ3MsIG9yJ2VkIHRvZ2V0aGVyIGFzIGZvbGxvd3M6CisJICoKKwkgKiBEUk1fU0NBTk9VVFBPU19WQUxJRCA9IFF1ZXJ5IHN1Y2Nlc3NmdWxsLgorCSAqIERSTV9TQ0FOT1VUUE9TX0lOVkJMID0gSW5zaWRlIHZibGFuay4KKwkgKiBEUk1fU0NBTk9VVFBPU19BQ0NVUkFURSA9IFJldHVybmVkIHBvc2l0aW9uIGlzIGFjY3VyYXRlLiBBIGxhY2sgb2YKKwkgKiB0aGlzIGZsYWcgbWVhbnMgdGhhdCByZXR1cm5lZCBwb3NpdGlvbiBtYXkgYmUgb2Zmc2V0IGJ5IGEgY29uc3RhbnQKKwkgKiBidXQgdW5rbm93biBzbWFsbCBudW1iZXIgb2Ygc2NhbmxpbmVzIHdydC4gcmVhbCBzY2Fub3V0IHBvc2l0aW9uLgorCSAqCisJICovCisJaW50ICgqZ2V0X3NjYW5vdXRfcG9zaXRpb24pIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKKwkJCQkgICAgIGludCAqdnBvcywgaW50ICpocG9zKTsKKworCS8qKgorCSAqIENhbGxlZCBieSBcYyBkcm1fZ2V0X2xhc3RfdmJsdGltZXN0YW1wLiBTaG91bGQgcmV0dXJuIGEgcHJlY2lzZQorCSAqIHRpbWVzdGFtcCB3aGVuIHRoZSBtb3N0IHJlY2VudCBWQkxBTksgaW50ZXJ2YWwgZW5kZWQgb3Igd2lsbCBlbmQuCisJICoKKwkgKiBTcGVjaWZpY2FsbHksIHRoZSB0aW1lc3RhbXAgaW4gQHZibGFua190aW1lIHNob3VsZCBjb3JyZXNwb25kIGFzCisJICogY2xvc2VseSBhcyBwb3NzaWJsZSB0byB0aGUgdGltZSB3aGVuIHRoZSBmaXJzdCB2aWRlbyBzY2FubGluZSBvZgorCSAqIHRoZSB2aWRlbyBmcmFtZSBhZnRlciB0aGUgZW5kIG9mIFZCTEFOSyB3aWxsIHN0YXJ0IHNjYW5uaW5nIG91dCwKKwkgKiB0aGUgdGltZSBpbW1tZWRpYXRlbHkgYWZ0ZXIgZW5kIG9mIHRoZSBWQkxBTksgaW50ZXJ2YWwuIElmIHRoZQorCSAqIEBjcnRjIGlzIGN1cnJlbnRseSBpbnNpZGUgVkJMQU5LLCB0aGlzIHdpbGwgYmUgYSB0aW1lIGluIHRoZSBmdXR1cmUuCisJICogSWYgdGhlIEBjcnRjIGlzIGN1cnJlbnRseSBzY2FubmluZyBvdXQgYSBmcmFtZSwgdGhpcyB3aWxsIGJlIHRoZQorCSAqIHBhc3Qgc3RhcnQgdGltZSBvZiB0aGUgY3VycmVudCBzY2Fub3V0LiBUaGlzIGlzIG1lYW50IHRvIGFkaGVyZQorCSAqIHRvIHRoZSBPcGVuTUwgT01MX3N5bmNfY29udHJvbCBleHRlbnNpb24gc3BlY2lmaWNhdGlvbi4KKwkgKgorCSAqIFxwYXJhbSBkZXYgZGV2IERSTSBkZXZpY2UgaGFuZGxlLgorCSAqIFxwYXJhbSBjcnRjIGNydGMgZm9yIHdoaWNoIHRpbWVzdGFtcCBzaG91bGQgYmUgcmV0dXJuZWQuCisJICogXHBhcmFtICptYXhfZXJyb3IgTWF4aW11bSBhbGxvd2FibGUgdGltZXN0YW1wIGVycm9yIGluIG5hbm9zZWNvbmRzLgorCSAqICAgICAgICAgICAgICAgICAgIEltcGxlbWVudGF0aW9uIHNob3VsZCBzdHJpdmUgdG8gcHJvdmlkZSB0aW1lc3RhbXAKKwkgKiAgICAgICAgICAgICAgICAgICB3aXRoIGFuIGVycm9yIG9mIGF0IG1vc3QgKm1heF9lcnJvciBuYW5vc2Vjb25kcy4KKwkgKiAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRydWUgdXBwZXIgYm91bmQgb24gZXJyb3IgZm9yIHRpbWVzdGFtcC4KKwkgKiBccGFyYW0gKnZibGFua190aW1lIFRhcmdldCBsb2NhdGlvbiBmb3IgcmV0dXJuZWQgdmJsYW5rIHRpbWVzdGFtcC4KKwkgKiBccGFyYW0gZmxhZ3MgMCA9IERlZmF1bHRzLCBubyBzcGVjaWFsIHRyZWF0bWVudCBuZWVkZWQuCisJICogXHBhcmFtICAgICAgIERSTV9DQUxMRURfRlJPTV9WQkxJUlEgPSBGdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB2YmxhbmsKKwkgKgkgICAgICAgIGlycSBoYW5kbGVyLiBTb21lIGRyaXZlcnMgbmVlZCB0byBhcHBseSBzb21lIHdvcmthcm91bmRzCisJICogICAgICAgICAgICAgIGZvciBncHUtc3BlY2lmaWMgdmJsYW5rIGlycSBxdWlya3MgaWYgZmxhZyBpcyBzZXQuCisJICoKKwkgKiBccmV0dXJucworCSAqIFplcm8gaWYgdGltZXN0YW1waW5nIGlzbid0IHN1cHBvcnRlZCBpbiBjdXJyZW50IGRpc3BsYXkgbW9kZSBvciBhCisJICogbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuIEEgcG9zaXRpdmUgc3RhdHVzIGNvZGUgb24gc3VjY2VzcywKKwkgKiB3aGljaCBkZXNjcmliZXMgaG93IHRoZSB2YmxhbmtfdGltZSB0aW1lc3RhbXAgd2FzIGNvbXB1dGVkLgorCSAqLworCWludCAoKmdldF92YmxhbmtfdGltZXN0YW1wKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMsCisJCQkJICAgICBpbnQgKm1heF9lcnJvciwKKwkJCQkgICAgIHN0cnVjdCB0aW1ldmFsICp2YmxhbmtfdGltZSwKKwkJCQkgICAgIHVuc2lnbmVkIGZsYWdzKTsKKwogCS8qIHRoZXNlIGhhdmUgdG8gYmUgZmlsbGVkIGluICovCiAKIAlpcnFyZXR1cm5fdCgqaXJxX2hhbmRsZXIpIChEUk1fSVJRX0FSR1MpOwpAQCAtOTgzLDYgKzEwNjAsOCBAQAogCiAJd2FpdF9xdWV1ZV9oZWFkX3QgKnZibF9xdWV1ZTsgICAvKio8IFZCTEFOSyB3YWl0IHF1ZXVlICovCiAJYXRvbWljX3QgKl92YmxhbmtfY291bnQ7ICAgICAgICAvKio8IG51bWJlciBvZiBWQkxBTksgaW50ZXJydXB0cyAoZHJpdmVyIG11c3QgYWxsb2MgdGhlIHJpZ2h0IG51bWJlciBvZiBjb3VudGVycykgKi8KKwlzdHJ1Y3QgdGltZXZhbCAqX3ZibGFua190aW1lOyAgIC8qKjwgdGltZXN0YW1wIG9mIGN1cnJlbnQgdmJsYW5rX2NvdW50IChkcml2ZXJzIG11c3QgYWxsb2MgcmlnaHQgbnVtYmVyIG9mIGZpZWxkcykgKi8KKwlzcGlubG9ja190IHZibGFua190aW1lX2xvY2s7ICAgIC8qKjwgUHJvdGVjdHMgdmJsYW5rIGNvdW50IGFuZCB0aW1lIHVwZGF0ZXMgZHVyaW5nIHZibGFuayBlbmFibGUvZGlzYWJsZSAqLwogCXNwaW5sb2NrX3QgdmJsX2xvY2s7CiAJYXRvbWljX3QgKnZibGFua19yZWZjb3VudDsgICAgICAvKiBudW1iZXIgb2YgdXNlcnMgb2YgdmJsYW5rIGludGVycnVwdHNwZXIgY3J0YyAqLwogCXUzMiAqbGFzdF92Ymxhbms7ICAgICAgICAgICAgICAgLyogcHJvdGVjdGVkIGJ5IGRldi0+dmJsX2xvY2ssIHVzZWQgKi8KQEAgLTEwNDEsMTIgKzExMjAsMTQgQEAKIAkvKkB7ICovCiAJc3BpbmxvY2tfdCBvYmplY3RfbmFtZV9sb2NrOwogCXN0cnVjdCBpZHIgb2JqZWN0X25hbWVfaWRyOwotCXVpbnQzMl90IGludmFsaWRhdGVfZG9tYWluczsgICAgLyogZG9tYWlucyBwZW5kaW5nIGludmFsaWRhdGlvbiAqLwotCXVpbnQzMl90IGZsdXNoX2RvbWFpbnM7ICAgICAgICAgLyogZG9tYWlucyBwZW5kaW5nIGZsdXNoICovCiAJLypAfSAqLwotCisJaW50IHN3aXRjaF9wb3dlcl9zdGF0ZTsKIH07CiAKKyNkZWZpbmUgRFJNX1NXSVRDSF9QT1dFUl9PTiAwCisjZGVmaW5lIERSTV9TV0lUQ0hfUE9XRVJfT0ZGIDEKKyNkZWZpbmUgRFJNX1NXSVRDSF9QT1dFUl9DSEFOR0lORyAyCisKIHN0YXRpYyBfX2lubGluZV9fIGludCBkcm1fY29yZV9jaGVja19mZWF0dXJlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgICAgaW50IGZlYXR1cmUpCiB7CkBAIC0xMjg0LDExICsxMzY1LDIyIEBACiAJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHApOwogZXh0ZXJuIGludCBkcm1fdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICp2Ymxfc2VxKTsKIGV4dGVybiB1MzIgZHJtX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdTMyIGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMsCisJCQkJICAgICBzdHJ1Y3QgdGltZXZhbCAqdmJsYW5rdGltZSk7CiBleHRlcm4gdm9pZCBkcm1faGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gaW50IGRybV92YmxhbmtfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKIGV4dGVybiB2b2lkIGRybV92YmxhbmtfcHV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKIGV4dGVybiB2b2lkIGRybV92Ymxhbmtfb2ZmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKIGV4dGVybiB2b2lkIGRybV92YmxhbmtfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB1MzIgZHJtX2dldF9sYXN0X3ZibHRpbWVzdGFtcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKKwkJCQkgICAgIHN0cnVjdCB0aW1ldmFsICp0dmJsYW5rLCB1bnNpZ25lZCBmbGFncyk7CitleHRlcm4gaW50IGRybV9jYWxjX3ZibHRpbWVzdGFtcF9mcm9tX3NjYW5vdXRwb3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSBpbnQgY3J0YywgaW50ICptYXhfZXJyb3IsCisJCQkJCQkgc3RydWN0IHRpbWV2YWwgKnZibGFua190aW1lLAorCQkJCQkJIHVuc2lnbmVkIGZsYWdzLAorCQkJCQkJIHN0cnVjdCBkcm1fY3J0YyAqcmVmY3J0Yyk7CitleHRlcm4gdm9pZCBkcm1fY2FsY190aW1lc3RhbXBpbmdfY29uc3RhbnRzKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CisKIC8qIE1vZGVzZXR0aW5nIHN1cHBvcnQgKi8KIGV4dGVybiB2b2lkIGRybV92YmxhbmtfcHJlX21vZGVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIHZvaWQgZHJtX3ZibGFua19wb3N0X21vZGVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwpAQCAtMTMyMSw3ICsxNDEzLDYgQEAKIGV4dGVybiBpbnQgZHJtX2FncF9iaW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYWdwX2JpbmRpbmcgKnJlcXVlc3QpOwogZXh0ZXJuIGludCBkcm1fYWdwX2JpbmRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKLWV4dGVybiB2b2lkIGRybV9hZ3BfY2hpcHNldF9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogCQkJCS8qIFN0dWIgc3VwcG9ydCAoZHJtX3N0dWIuaCkgKi8KIGV4dGVybiBpbnQgZHJtX3NldG1hc3Rlcl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtMTM0MCw2ICsxNDMxLDkgQEAKIGV4dGVybiBpbnQgZHJtX3B1dF9taW5vcihzdHJ1Y3QgZHJtX21pbm9yICoqbWlub3IpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBkcm1fZGVidWc7CiAKK2V4dGVybiB1bnNpZ25lZCBpbnQgZHJtX3ZibGFua19vZmZkZWxheTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZHJtX3RpbWVzdGFtcF9wcmVjaXNpb247CisKIGV4dGVybiBzdHJ1Y3QgY2xhc3MgKmRybV9jbGFzczsKIGV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRybV9wcm9jX3Jvb3Q7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqZHJtX2RlYnVnZnNfcm9vdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCmluZGV4IDAyOWFhNjguLmFjZDdmYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaApAQCAtMzUxLDggKzM1MSwxNCBAQAogCiAJYm9vbCBlbmFibGVkOwogCisJLyogUmVxdWVzdGVkIG1vZGUgZnJvbSBtb2Rlc2V0dGluZy4gKi8KIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOwogCisJLyogUHJvZ3JhbW1lZCBtb2RlIGluIGh3LCBhZnRlciBhZGp1c3RtZW50cyBmb3IgZW5jb2RlcnMsCisJICogY3J0YywgcGFuZWwgc2NhbGluZyBldGMuIE5lZWRlZCBmb3IgdGltZXN0YW1waW5nIGV0Yy4KKwkgKi8KKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBod21vZGU7CisKIAlpbnQgeCwgeTsKIAljb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgKmZ1bmNzOwogCkBAIC0zNjAsNiArMzY2LDkgQEAKIAl1aW50MzJfdCBnYW1tYV9zaXplOwogCXVpbnQxNl90ICpnYW1tYV9zdG9yZTsKIAorCS8qIENvbnN0YW50cyBuZWVkZWQgZm9yIHByZWNpc2UgdmJsYW5rIGFuZCBzd2FwIHRpbWVzdGFtcGluZy4gKi8KKwlzNjQgZnJhbWVkdXJfbnMsIGxpbmVkdXJfbnMsIHBpeGVsZHVyX25zOworCiAJLyogaWYgeW91IGFyZSB1c2luZyB0aGUgaGVscGVyICovCiAJdm9pZCAqaGVscGVyX3ByaXZhdGU7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCmluZGV4IGYyMmU3ZmUuLmFhYzI3YmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKQEAgLTEyMSw5ICsxMjEsNiBAQAogdm9pZCBkcm1fZmJfaGVscGVyX3Jlc3RvcmUodm9pZCk7CiB2b2lkIGRybV9mYl9oZWxwZXJfZmlsbF92YXIoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJCQkgICAgdWludDMyX3QgZmJfd2lkdGgsIHVpbnQzMl90IGZiX2hlaWdodCk7Ci12b2lkIGRybV9mYl9oZWxwZXJfZmlsbF9maXgoc3RydWN0IGZiX2luZm8gKmluZm8sIHVpbnQzMl90IHBpdGNoLAotCQkJICAgIHVpbnQzMl90IGRlcHRoKTsKLQogaW50IGRybV9mYl9oZWxwZXJfc2V0Y21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCiBib29sIGRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9tbS5oIGIvaW5jbHVkZS9kcm0vZHJtX21tLmgKaW5kZXggYmYwMTUzMS4uZTM5MTc3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21tLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX21tLmgKQEAgLTYyLDExICs2MiwxNCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgdW51c2VkX25vZGVzOwogCWludCBudW1fdW51c2VkOwogCXNwaW5sb2NrX3QgdW51c2VkX2xvY2s7CisJdW5zaWduZWQgaW50IHNjYW5fY2hlY2tfcmFuZ2UgOiAxOwogCXVuc2lnbmVkIHNjYW5fYWxpZ25tZW50OwogCXVuc2lnbmVkIGxvbmcgc2Nhbl9zaXplOwogCXVuc2lnbmVkIGxvbmcgc2Nhbl9oaXRfc3RhcnQ7CiAJdW5zaWduZWQgc2Nhbl9oaXRfc2l6ZTsKIAl1bnNpZ25lZCBzY2FubmVkX2Jsb2NrczsKKwl1bnNpZ25lZCBsb25nIHNjYW5fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzY2FuX2VuZDsKIH07CiAKIC8qCkBAIC0xNDUsNiArMTQ4LDEwIEBACiAKIHZvaWQgZHJtX21tX2luaXRfc2NhbihzdHJ1Y3QgZHJtX21tICptbSwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkgICAgICB1bnNpZ25lZCBhbGlnbm1lbnQpOwordm9pZCBkcm1fbW1faW5pdF9zY2FuX3dpdGhfcmFuZ2Uoc3RydWN0IGRybV9tbSAqbW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgdW5zaWduZWQgYWxpZ25tZW50LAorCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCSB1bnNpZ25lZCBsb25nIGVuZCk7CiBpbnQgZHJtX21tX3NjYW5fYWRkX2Jsb2NrKHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSk7CiBpbnQgZHJtX21tX3NjYW5fcmVtb3ZlX2Jsb2NrKHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaCBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAppbmRleCA4ODNjMWQ0Li5mZTI5YWUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCkBAIC0xNDIsNiArMTQyLDQyIEBACiAJezB4MTAwMiwgMHg1ZTRjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWU0ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDVlNGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2NzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0JBUlRTfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3MjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQkFSVFN8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjcyMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9CQVJUU3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3MjMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQkFSVFN8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2NzI0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0JBUlRTfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3MjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQkFSVFN8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjcyNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9CQVJUU3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3MjcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQkFSVFN8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2NzI4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0JBUlRTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjcyOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9CQVJUU3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3MzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQkFSVFN8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2NzM5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0JBUlRTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4Njc0MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9UVVJLU3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2NzQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1RVUktTfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3NDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfVFVSS1N8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4Njc0MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9UVVJLU3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2NzQ0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1RVUktTfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3NDUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfVFVSS1N8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4Njc0NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9UVVJLU3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3NDcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfVFVSS1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2NzQ4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1RVUktTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4Njc0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9UVVJLU3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3NTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfVFVSS1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2NzU4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1RVUktTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4Njc1OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9UVVJLU3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3NjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0FJQ09TfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3NjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0FJQ09TfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3NjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0FJQ09TfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4Njc2MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DQUlDT1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2NzY0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NBSUNPU3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2NzY1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NBSUNPU3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2NzY2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NBSUNPU3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3NjcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0FJQ09TfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4Njc2OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DQUlDT1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2NzcwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NBSUNPU3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY3NzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0FJQ09TfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njg4MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DWVBSRVNTfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4ODgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ1lQUkVTU3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4ODksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ1lQUkVTU3xSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTQxOSw2ICs0NTUsMTAgQEAKIAl7MHgxMDAyLCAweDk3MTMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM4ODB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCiAJezB4MTAwMiwgMHg5NzE0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTODgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCiAJezB4MTAwMiwgMHg5NzE1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTODgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5ODAyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1BBTE18UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk4MDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUEFMTXxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTgwNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9QQUxNfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5ODA1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1BBTE18UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MCwgMCwgMH0KIAogI2RlZmluZSByMTI4X1BDSV9JRFMgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKaW5kZXggYTI3NzZlMi4uMDAzOWYxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCkBAIC0yODksNiArMjg5LDcgQEAKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfQkxUCQkgMTEKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfUkVMQVhFRF9GRU5DSU5HCSAxMgogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19DT0hFUkVOVF9SSU5HUwkgMTMKKyNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfRVhFQ19DT05TVEFOVFMJIDE0CiAKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2dldHBhcmFtIHsKIAlpbnQgcGFyYW07CkBAIC02MzUsNiArNjM2LDE3IEBACiAjZGVmaW5lIEk5MTVfRVhFQ19SRU5ERVIgICAgICAgICAgICAgICAgICgxPDwwKQogI2RlZmluZSBJOTE1X0VYRUNfQlNEICAgICAgICAgICAgICAgICAgICAoMjw8MCkKICNkZWZpbmUgSTkxNV9FWEVDX0JMVCAgICAgICAgICAgICAgICAgICAgKDM8PDApCisKKy8qIFVzZWQgZm9yIHN3aXRjaGluZyB0aGUgY29uc3RhbnRzIGFkZHJlc3NpbmcgbW9kZSBvbiBnZW40KyBSRU5ERVIgcmluZy4KKyAqIEdlbjYrIG9ubHkgc3VwcG9ydHMgcmVsYXRpdmUgYWRkcmVzc2luZyB0byBkeW5hbWljIHN0YXRlIChkZWZhdWx0KSBhbmQKKyAqIGFic29sdXRlIGFkZHJlc3NpbmcuCisgKgorICogVGhlc2UgZmxhZ3MgYXJlIGlnbm9yZWQgZm9yIHRoZSBCU0QgYW5kIEJMVCByaW5ncy4KKyAqLworI2RlZmluZSBJOTE1X0VYRUNfQ09OU1RBTlRTX01BU0sgCSgzPDw2KQorI2RlZmluZSBJOTE1X0VYRUNfQ09OU1RBTlRTX1JFTF9HRU5FUkFMICgwPDw2KSAvKiBkZWZhdWx0ICovCisjZGVmaW5lIEk5MTVfRVhFQ19DT05TVEFOVFNfQUJTT0xVVEUgCSgxPDw2KQorI2RlZmluZSBJOTE1X0VYRUNfQ09OU1RBTlRTX1JFTF9TVVJGQUNFICgyPDw2KSAvKiBnZW40LzUgb25seSAqLwogCV9fdTY0IGZsYWdzOwogCV9fdTY0IHJzdmQxOwogCV9fdTY0IHJzdmQyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vaW50ZWwtZ3R0LmggYi9pbmNsdWRlL2RybS9pbnRlbC1ndHQuaAppbmRleCBkM2M4MTk0Ni4uOWUzNDNjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vaW50ZWwtZ3R0LmgKKysrIGIvaW5jbHVkZS9kcm0vaW50ZWwtZ3R0LmgKQEAgLTIsMTcgKzIsNDAgQEAKIAogI2lmbmRlZiBfRFJNX0lOVEVMX0dUVF9ICiAjZGVmaW5lCV9EUk1fSU5URUxfR1RUX0gKLXN0cnVjdCBpbnRlbF9ndHQgewotCS8qIE51bWJlciBvZiBzdG9sZW4gZ3R0IGVudHJpZXMgYXQgdGhlIGJlZ2lubmluZy4gKi8KLQl1bnNpZ25lZCBpbnQgZ3R0X3N0b2xlbl9lbnRyaWVzOworCitjb25zdCBzdHJ1Y3QgaW50ZWxfZ3R0IHsKKwkvKiBTaXplIG9mIG1lbW9yeSByZXNlcnZlZCBmb3IgZ3JhcGhpY3MgYnkgdGhlIEJJT1MgKi8KKwl1bnNpZ25lZCBpbnQgc3RvbGVuX3NpemU7CiAJLyogVG90YWwgbnVtYmVyIG9mIGd0dCBlbnRyaWVzLiAqLwogCXVuc2lnbmVkIGludCBndHRfdG90YWxfZW50cmllczsKIAkvKiBQYXJ0IG9mIHRoZSBndHQgdGhhdCBpcyBtYXBwYWJsZSBieSB0aGUgY3B1LCBmb3IgdGhvc2UgY2hpcHMgd2hlcmUKIAkgKiB0aGlzIGlzIG5vdCB0aGUgZnVsbCBndHQuICovCiAJdW5zaWduZWQgaW50IGd0dF9tYXBwYWJsZV9lbnRyaWVzOwotfTsKKwkvKiBXaGV0aGVyIGk5MTUgbmVlZHMgdG8gdXNlIHRoZSBkbWFyIGFwaXMgb3Igbm90LiAqLworCXVuc2lnbmVkIGludCBuZWVkc19kbWFyIDogMTsKK30gKmludGVsX2d0dF9nZXQodm9pZCk7CiAKLXN0cnVjdCBpbnRlbF9ndHQgKmludGVsX2d0dF9nZXQodm9pZCk7Cit2b2lkIGludGVsX2d0dF9jaGlwc2V0X2ZsdXNoKHZvaWQpOwordm9pZCBpbnRlbF9ndHRfdW5tYXBfbWVtb3J5KHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfbGlzdCwgaW50IG51bV9zZyk7Cit2b2lkIGludGVsX2d0dF9jbGVhcl9yYW5nZSh1bnNpZ25lZCBpbnQgZmlyc3RfZW50cnksIHVuc2lnbmVkIGludCBudW1fZW50cmllcyk7CitpbnQgaW50ZWxfZ3R0X21hcF9tZW1vcnkoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG51bV9lbnRyaWVzLAorCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqKnNnX2xpc3QsIGludCAqbnVtX3NnKTsKK3ZvaWQgaW50ZWxfZ3R0X2luc2VydF9zZ19lbnRyaWVzKHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfbGlzdCwKKwkJCQkgdW5zaWduZWQgaW50IHNnX2xlbiwKKwkJCQkgdW5zaWduZWQgaW50IHBnX3N0YXJ0LAorCQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpOwordm9pZCBpbnRlbF9ndHRfaW5zZXJ0X3BhZ2VzKHVuc2lnbmVkIGludCBmaXJzdF9lbnRyeSwgdW5zaWduZWQgaW50IG51bV9lbnRyaWVzLAorCQkJICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBmbGFncyk7CisKKy8qIFNwZWNpYWwgZ3R0IG1lbW9yeSB0eXBlcyAqLworI2RlZmluZSBBR1BfRENBQ0hFX01FTU9SWQkxCisjZGVmaW5lIEFHUF9QSFlTX01FTU9SWQkJMgorCisvKiBOZXcgY2FjaGluZyBhdHRyaWJ1dGVzIGZvciBnZW42L3NhbmR5YnJpZGdlICovCisjZGVmaW5lIEFHUF9VU0VSX0NBQ0hFRF9NRU1PUllfTExDX01MQyAoQUdQX1VTRVJfVFlQRVMgKyAyKQorI2RlZmluZSBBR1BfVVNFUl9VTkNBQ0hFRF9NRU1PUlkgKEFHUF9VU0VSX1RZUEVTICsgNCkKKworLyogZmxhZyBmb3IgR0ZEVCB0eXBlICovCisjZGVmaW5lIEFHUF9VU0VSX0NBQ0hFRF9NRU1PUllfR0ZEVCAoMSA8PCAzKQogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vbm91dmVhdV9kcm0uaCBiL2luY2x1ZGUvZHJtL25vdXZlYXVfZHJtLmgKaW5kZXggYmM1NTkwYi4uZTJjZmU4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vbm91dmVhdV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9ub3V2ZWF1X2RybS5oCkBAIC03MSwxNiArNzEsMTQgQEAKICNkZWZpbmUgTk9VVkVBVV9HRVRQQVJBTV9QQ0lfVkVORE9SICAgICAgMwogI2RlZmluZSBOT1VWRUFVX0dFVFBBUkFNX1BDSV9ERVZJQ0UgICAgICA0CiAjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fQlVTX1RZUEUgICAgICAgIDUKLSNkZWZpbmUgTk9VVkVBVV9HRVRQQVJBTV9GQl9QSFlTSUNBTCAgICAgNgotI2RlZmluZSBOT1VWRUFVX0dFVFBBUkFNX0FHUF9QSFlTSUNBTCAgICA3CiAjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fRkJfU0laRSAgICAgICAgIDgKICNkZWZpbmUgTk9VVkVBVV9HRVRQQVJBTV9BR1BfU0laRSAgICAgICAgOQotI2RlZmluZSBOT1VWRUFVX0dFVFBBUkFNX1BDSV9QSFlTSUNBTCAgICAxMAogI2RlZmluZSBOT1VWRUFVX0dFVFBBUkFNX0NISVBTRVRfSUQgICAgICAxMQogI2RlZmluZSBOT1VWRUFVX0dFVFBBUkFNX1ZNX1ZSQU1fQkFTRSAgICAxMgogI2RlZmluZSBOT1VWRUFVX0dFVFBBUkFNX0dSQVBIX1VOSVRTICAgICAxMwogI2RlZmluZSBOT1VWRUFVX0dFVFBBUkFNX1BUSU1FUl9USU1FICAgICAxNAogI2RlZmluZSBOT1VWRUFVX0dFVFBBUkFNX0hBU19CT19VU0FHRSAgICAxNQorI2RlZmluZSBOT1VWRUFVX0dFVFBBUkFNX0hBU19QQUdFRkxJUCAgICAxNgogc3RydWN0IGRybV9ub3V2ZWF1X2dldHBhcmFtIHsKIAl1aW50NjRfdCBwYXJhbTsKIAl1aW50NjRfdCB2YWx1ZTsKQEAgLTE3MSw3ICsxNjksNiBAQAogfTsKIAogI2RlZmluZSBOT1VWRUFVX0dFTV9DUFVfUFJFUF9OT1dBSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBOT1VWRUFVX0dFTV9DUFVfUFJFUF9OT0JMT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgogI2RlZmluZSBOT1VWRUFVX0dFTV9DUFVfUFJFUF9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAogc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9jcHVfcHJlcCB7CiAJdWludDMyX3QgaGFuZGxlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCmluZGV4IDEwZjhiNTMuLmU5NWE4NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKQEAgLTkwNiw2ICs5MDYsNyBAQAogI2RlZmluZSBSQURFT05fSU5GT19BQ0NFTF9XT1JLSU5HMgkweDA1CiAjZGVmaW5lIFJBREVPTl9JTkZPX1RJTElOR19DT05GSUcJMHgwNgogI2RlZmluZSBSQURFT05fSU5GT19XQU5UX0hZUEVSWgkJMHgwNworI2RlZmluZSBSQURFT05fSU5GT19XQU5UX0NNQVNLCQkweDA4IC8qIGdldCBhY2Nlc3MgdG8gQ01BU0sgb24gcjMwMCAqLwogCiBzdHJ1Y3QgZHJtX3JhZGVvbl9pbmZvIHsKIAl1aW50MzJfdAkJcmVxdWVzdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmggYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2FwaS5oCmluZGV4IGJlYWZjMTUuLjUwODUyYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmgKKysrIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19hcGkuaApAQCAtNzQsNiArNzQsOCBAQAogICogQGlzX2lvbWVtOgkJaXMgdGhpcyBpbyBtZW1vcnkgPwogICogQHNpemU6CQlzaXplIGluIGJ5dGUKICAqIEBvZmZzZXQ6CQlvZmZzZXQgZnJvbSB0aGUgYmFzZSBhZGRyZXNzCisgKiBAaW9fcmVzZXJ2ZWRfdm06ICAgICBUaGUgVk0gc3lzdGVtIGhhcyBhIHJlZmNvdW50IGluIEBpb19yZXNlcnZlZF9jb3VudAorICogQGlvX3Jlc2VydmVkX2NvdW50OiAgUmVmY291bnRpbmcgdGhlIG51bWJlcnMgb2YgY2FsbGVycyB0byB0dG1fbWVtX2lvX3Jlc2VydmUKICAqCiAgKiBTdHJ1Y3R1cmUgaW5kaWNhdGluZyB0aGUgYnVzIHBsYWNlbWVudCBvZiBhbiBvYmplY3QuCiAgKi8KQEAgLTgzLDcgKzg1LDggQEAKIAl1bnNpZ25lZCBsb25nCXNpemU7CiAJdW5zaWduZWQgbG9uZwlvZmZzZXQ7CiAJYm9vbAkJaXNfaW9tZW07Ci0JYm9vbAkJaW9fcmVzZXJ2ZWQ7CisJYm9vbAkJaW9fcmVzZXJ2ZWRfdm07CisJdWludDY0X3QgICAgICAgIGlvX3Jlc2VydmVkX2NvdW50OwogfTsKIAogCkBAIC0xNTQsNyArMTU3LDYgQEAKICAqIGtlZXBzIG9uZSByZWZjb3VudC4gV2hlbiB0aGlzIHJlZmNvdW50IHJlYWNoZXMgemVybywKICAqIHRoZSBvYmplY3QgaXMgZGVzdHJveWVkLgogICogQGV2ZW50X3F1ZXVlOiBRdWV1ZSBmb3IgcHJvY2Vzc2VzIHdhaXRpbmcgb24gYnVmZmVyIG9iamVjdCBzdGF0dXMgY2hhbmdlLgotICogQGxvY2s6IHNwaW5sb2NrIHByb3RlY3RpbmcgbW9zdGx5IHN5bmNocm9uaXphdGlvbiBtZW1iZXJzLgogICogQG1lbTogc3RydWN0dXJlIGRlc2NyaWJpbmcgY3VycmVudCBwbGFjZW1lbnQuCiAgKiBAcGVyc2lzdGFudF9zd2FwX3N0b3JhZ2U6IFVzdWFsbHkgdGhlIHN3YXAgc3RvcmFnZSBpcyBkZWxldGVkIGZvciBidWZmZXJzCiAgKiBwaW5uZWQgaW4gcGh5c2ljYWwgbWVtb3J5LiBJZiB0aGlzIGJlaGF2aW91ciBpcyBub3QgZGVzaXJlZCwgdGhpcyBtZW1iZXIKQEAgLTIxMyw3ICsyMTUsNiBAQAogCXN0cnVjdCBrcmVmIGtyZWY7CiAJc3RydWN0IGtyZWYgbGlzdF9rcmVmOwogCXdhaXRfcXVldWVfaGVhZF90IGV2ZW50X3F1ZXVlOwotCXNwaW5sb2NrX3QgbG9jazsKIAogCS8qKgogCSAqIE1lbWJlcnMgcHJvdGVjdGVkIGJ5IHRoZSBibzo6cmVzZXJ2ZWQgbG9jay4KQEAgLTIzNyw2ICsyMzgsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwogCXN0cnVjdCBsaXN0X2hlYWQgZGRlc3Ryb3k7CiAJc3RydWN0IGxpc3RfaGVhZCBzd2FwOworCXN0cnVjdCBsaXN0X2hlYWQgaW9fcmVzZXJ2ZV9scnU7CiAJdWludDMyX3QgdmFsX3NlcTsKIAlib29sIHNlcV92YWxpZDsKIApAQCAtMjQ4LDEwICsyNTAsMTAgQEAKIAlhdG9taWNfdCByZXNlcnZlZDsKIAogCS8qKgotCSAqIE1lbWJlcnMgcHJvdGVjdGVkIGJ5IHRoZSBibzo6bG9jaworCSAqIE1lbWJlcnMgcHJvdGVjdGVkIGJ5IHN0cnVjdCBidWZmZXJfb2JqZWN0X2RldmljZTo6ZmVuY2VfbG9jawogCSAqIEluIGFkZGl0aW9uLCBzZXR0aW5nIHN5bmNfb2JqIHRvIGFueXRoaW5nIGVsc2UKIAkgKiB0aGFuIE5VTEwgcmVxdWlyZXMgYm86OnJlc2VydmVkIHRvIGJlIGhlbGQuIFRoaXMgYWxsb3dzIGZvcgotCSAqIGNoZWNraW5nIE5VTEwgd2hpbGUgcmVzZXJ2ZWQgYnV0IG5vdCBob2xkaW5nIGJvOjpsb2NrLgorCSAqIGNoZWNraW5nIE5VTEwgd2hpbGUgcmVzZXJ2ZWQgYnV0IG5vdCBob2xkaW5nIHRoZSBtZW50aW9uZWQgbG9jay4KIAkgKi8KIAogCXZvaWQgKnN5bmNfb2JqX2FyZzsKQEAgLTM2NCw2ICszNjYsNDQgQEAKICAqLwogZXh0ZXJuIHZvaWQgdHRtX2JvX3VucmVmKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqKmJvKTsKIAorCisvKioKKyAqIHR0bV9ib19saXN0X3JlZl9zdWIKKyAqCisgKiBAYm86IFRoZSBidWZmZXIgb2JqZWN0LgorICogQGNvdW50OiBUaGUgbnVtYmVyIG9mIHJlZmVyZW5jZXMgd2l0aCB3aGljaCB0byBkZWNyZWFzZSBAYm86Omxpc3Rfa3JlZjsKKyAqIEBuZXZlcl9mcmVlOiBUaGUgcmVmY291bnQgc2hvdWxkIG5vdCByZWFjaCB6ZXJvIHdpdGggdGhpcyBvcGVyYXRpb24uCisgKgorICogUmVsZWFzZSBAY291bnQgbHJ1IGxpc3QgcmVmZXJlbmNlcyB0byB0aGlzIGJ1ZmZlciBvYmplY3QuCisgKi8KK2V4dGVybiB2b2lkIHR0bV9ib19saXN0X3JlZl9zdWIoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywgaW50IGNvdW50LAorCQkJCWJvb2wgbmV2ZXJfZnJlZSk7CisKKy8qKgorICogdHRtX2JvX2FkZF90b19scnUKKyAqCisgKiBAYm86IFRoZSBidWZmZXIgb2JqZWN0LgorICoKKyAqIEFkZCB0aGlzIGJvIHRvIHRoZSByZWxldmFudCBtZW0gdHlwZSBscnUgYW5kLCBpZiBpdCdzIGJhY2tlZCBieQorICogc3lzdGVtIHBhZ2VzICh0dG1zKSB0byB0aGUgc3dhcCBsaXN0LgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHN0cnVjdCB0dG1fYm9fZ2xvYmFsOjpscnVfbG9jayBoZWxkLCBhbmQKKyAqIGlzIHR5cGljYWxseSBjYWxsZWQgaW1tZWRpYXRlbHkgcHJpb3IgdG8gdW5yZXNlcnZpbmcgYSBiby4KKyAqLworZXh0ZXJuIHZvaWQgdHRtX2JvX2FkZF90b19scnUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7CisKKy8qKgorICogdHRtX2JvX2RlbF9mcm9tX2xydQorICoKKyAqIEBibzogVGhlIGJ1ZmZlciBvYmplY3QuCisgKgorICogUmVtb3ZlIHRoaXMgYm8gZnJvbSBhbGwgbHJ1IGxpc3RzIHVzZWQgdG8gbG9va3VwIGFuZCByZXNlcnZlIGFuIG9iamVjdC4KKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBzdHJ1Y3QgdHRtX2JvX2dsb2JhbDo6bHJ1X2xvY2sgaGVsZCwKKyAqIGFuZCBpcyB1c3VhbGx5IGNhbGxlZCBqdXN0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBibyBoYXMgYmVlbiByZXNlcnZlZCB0bworICogYXZvaWQgcmVjdXJzaXZlIHJlc2VydmF0aW9uIGZyb20gbHJ1IGxpc3RzLgorICovCitleHRlcm4gaW50IHR0bV9ib19kZWxfZnJvbV9scnUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7CisKKwogLyoqCiAgKiB0dG1fYm9fbG9ja19kZWxheWVkX3dvcmtxdWV1ZQogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmggYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2RyaXZlci5oCmluZGV4IDhlMGM4NDguLjFkYThhZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaApAQCAtMTc5LDMwICsxNzksNiBAQAogI2RlZmluZSBUVE1fTUVNVFlQRV9GTEFHX01BUFBBQkxFICAgICAgKDEgPDwgMSkJLyogTWVtb3J5IG1hcHBhYmxlICovCiAjZGVmaW5lIFRUTV9NRU1UWVBFX0ZMQUdfQ01BICAgICAgICAgICAoMSA8PCAzKQkvKiBDYW4ndCBtYXAgYXBlcnR1cmUgKi8KIAotLyoqCi0gKiBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIKLSAqCi0gKiBAaGFzX3R5cGU6IFRoZSBtZW1vcnkgdHlwZSBoYXMgYmVlbiBpbml0aWFsaXplZC4KLSAqIEB1c2VfdHlwZTogVGhlIG1lbW9yeSB0eXBlIGlzIGVuYWJsZWQuCi0gKiBAZmxhZ3M6IFRUTV9NRU1UWVBFX1hYIGZsYWdzIGlkZW50aWZ5aW5nIHRoZSB0cmFpdHMgb2YgdGhlIG1lbW9yeQotICogbWFuYWdlZCBieSB0aGlzIG1lbW9yeSB0eXBlLgotICogQGdwdV9vZmZzZXQ6IElmIHVzZWQsIHRoZSBHUFUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBtYW5hZ2VkIHBhZ2Ugb2YKLSAqIGZpeGVkIG1lbW9yeSBvciB0aGUgZmlyc3QgbWFuYWdlZCBsb2NhdGlvbiBpbiBhbiBhcGVydHVyZS4KLSAqIEBzaXplOiBTaXplIG9mIHRoZSBtYW5hZ2VkIHJlZ2lvbi4KLSAqIEBhdmFpbGFibGVfY2FjaGluZzogQSBtYXNrIG9mIGF2YWlsYWJsZSBjYWNoaW5nIHR5cGVzLCBUVE1fUExfRkxBR19YWCwKLSAqIGFzIGRlZmluZWQgaW4gdHRtX3BsYWNlbWVudF9jb21tb24uaAotICogQGRlZmF1bHRfY2FjaGluZzogVGhlIGRlZmF1bHQgY2FjaGluZyBwb2xpY3kgdXNlZCBmb3IgYSBidWZmZXIgb2JqZWN0Ci0gKiBwbGFjZWQgaW4gdGhpcyBtZW1vcnkgdHlwZSBpZiB0aGUgdXNlciBkb2Vzbid0IHByb3ZpZGUgb25lLgotICogQG1hbmFnZXI6IFRoZSByYW5nZSBtYW5hZ2VyIHVzZWQgZm9yIHRoaXMgbWVtb3J5IHR5cGUuIEZJWE1FOiBJZiB0aGUgYXBlcnR1cmUKLSAqIGhhcyBhIHBhZ2Ugc2l6ZSBkaWZmZXJlbnQgZnJvbSB0aGUgdW5kZXJseWluZyBzeXN0ZW0sIHRoZSBncmFudWxhcml0eQotICogb2YgdGhpcyBtYW5hZ2VyIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhpcy4gQnV0IHRoZSByYW5nZSBhbGxvY2F0aW5nIGNvZGUKLSAqIGluIHR0bV9iby5jIG5lZWRzIHRvIGJlIG1vZGlmaWVkIGZvciB0aGlzLgotICogQGxydTogVGhlIGxydSBsaXN0IGZvciB0aGlzIG1lbW9yeSB0eXBlLgotICoKLSAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gaWRlbnRpZnkgYW5kIG1hbmFnZSBtZW1vcnkgdHlwZXMgZm9yIGEgZGV2aWNlLgotICogSXQncyBzZXQgdXAgYnkgdGhlIHR0bV9ib19kcml2ZXI6OmluaXRfbWVtX3R5cGUgbWV0aG9kLgotICovCi0KIHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlcjsKIAogc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyX2Z1bmMgewpAQCAtMjg3LDYgKzI2MywzNiBAQAogCXZvaWQgKCpkZWJ1Zykoc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sIGNvbnN0IGNoYXIgKnByZWZpeCk7CiB9OwogCisvKioKKyAqIHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlcgorICoKKyAqIEBoYXNfdHlwZTogVGhlIG1lbW9yeSB0eXBlIGhhcyBiZWVuIGluaXRpYWxpemVkLgorICogQHVzZV90eXBlOiBUaGUgbWVtb3J5IHR5cGUgaXMgZW5hYmxlZC4KKyAqIEBmbGFnczogVFRNX01FTVRZUEVfWFggZmxhZ3MgaWRlbnRpZnlpbmcgdGhlIHRyYWl0cyBvZiB0aGUgbWVtb3J5CisgKiBtYW5hZ2VkIGJ5IHRoaXMgbWVtb3J5IHR5cGUuCisgKiBAZ3B1X29mZnNldDogSWYgdXNlZCwgdGhlIEdQVSBvZmZzZXQgb2YgdGhlIGZpcnN0IG1hbmFnZWQgcGFnZSBvZgorICogZml4ZWQgbWVtb3J5IG9yIHRoZSBmaXJzdCBtYW5hZ2VkIGxvY2F0aW9uIGluIGFuIGFwZXJ0dXJlLgorICogQHNpemU6IFNpemUgb2YgdGhlIG1hbmFnZWQgcmVnaW9uLgorICogQGF2YWlsYWJsZV9jYWNoaW5nOiBBIG1hc2sgb2YgYXZhaWxhYmxlIGNhY2hpbmcgdHlwZXMsIFRUTV9QTF9GTEFHX1hYLAorICogYXMgZGVmaW5lZCBpbiB0dG1fcGxhY2VtZW50X2NvbW1vbi5oCisgKiBAZGVmYXVsdF9jYWNoaW5nOiBUaGUgZGVmYXVsdCBjYWNoaW5nIHBvbGljeSB1c2VkIGZvciBhIGJ1ZmZlciBvYmplY3QKKyAqIHBsYWNlZCBpbiB0aGlzIG1lbW9yeSB0eXBlIGlmIHRoZSB1c2VyIGRvZXNuJ3QgcHJvdmlkZSBvbmUuCisgKiBAZnVuYzogc3RydWN0dXJlIHBvaW50ZXIgaW1wbGVtZW50aW5nIHRoZSByYW5nZSBtYW5hZ2VyLiBTZWUgYWJvdmUKKyAqIEBwcml2OiBEcml2ZXIgcHJpdmF0ZSBjbG9zdXJlIGZvciBAZnVuYy4KKyAqIEBpb19yZXNlcnZlX211dGV4OiBNdXRleCBvcHRpb25hbGx5IHByb3RlY3Rpbmcgc2hhcmVkIGlvX3Jlc2VydmUgc3RydWN0dXJlcworICogQHVzZV9pb19yZXNlcnZlX2xydTogVXNlIGFuIGxydSBsaXN0IHRvIHRyeSB0byB1bnJlc2VydmUgaW9fbWVtX3JlZ2lvbnMKKyAqIHJlc2VydmVkIGJ5IHRoZSBUVE0gdm0gc3lzdGVtLgorICogQGlvX3Jlc2VydmVfbHJ1OiBPcHRpb25hbCBscnUgbGlzdCBmb3IgdW5yZXNlcnZpbmcgaW8gbWVtIHJlZ2lvbnMuCisgKiBAaW9fcmVzZXJ2ZV9mYXN0cGF0aDogT25seSB1c2UgYmRldjo6ZHJpdmVyOjppb19tZW1fcmVzZXJ2ZSB0byBvYnRhaW4KKyAqIHN0YXRpYyBpbmZvcm1hdGlvbi4gYmRldjo6ZHJpdmVyOjppb19tZW1fZnJlZSBpcyBuZXZlciB1c2VkLgorICogQGxydTogVGhlIGxydSBsaXN0IGZvciB0aGlzIG1lbW9yeSB0eXBlLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gaWRlbnRpZnkgYW5kIG1hbmFnZSBtZW1vcnkgdHlwZXMgZm9yIGEgZGV2aWNlLgorICogSXQncyBzZXQgdXAgYnkgdGhlIHR0bV9ib19kcml2ZXI6OmluaXRfbWVtX3R5cGUgbWV0aG9kLgorICovCisKKworCiBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgewogCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2OwogCkBAIC0zMDMsNiArMzA5LDE1IEBACiAJdWludDMyX3QgZGVmYXVsdF9jYWNoaW5nOwogCWNvbnN0IHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlcl9mdW5jICpmdW5jOwogCXZvaWQgKnByaXY7CisJc3RydWN0IG11dGV4IGlvX3Jlc2VydmVfbXV0ZXg7CisJYm9vbCB1c2VfaW9fcmVzZXJ2ZV9scnU7CisJYm9vbCBpb19yZXNlcnZlX2Zhc3RwYXRoOworCisJLyoKKwkgKiBQcm90ZWN0ZWQgYnkgQGlvX3Jlc2VydmVfbXV0ZXg6CisJICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlvX3Jlc2VydmVfbHJ1OwogCiAJLyoKIAkgKiBQcm90ZWN0ZWQgYnkgdGhlIGdsb2JhbC0+bHJ1X2xvY2suCkBAIC01MTAsOSArNTI1LDEyIEBACiAgKgogICogQGRyaXZlcjogUG9pbnRlciB0byBhIHN0cnVjdCB0dG1fYm9fZHJpdmVyIHN0cnVjdCBzZXR1cCBieSB0aGUgZHJpdmVyLgogICogQG1hbjogQW4gYXJyYXkgb2YgbWVtX3R5cGVfbWFuYWdlcnMuCisgKiBAZmVuY2VfbG9jazogUHJvdGVjdHMgdGhlIHN5bmNocm9uaXppbmcgbWVtYmVycyBvbiAqYWxsKiBib3MgYmVsb25naW5nCisgKiB0byB0aGlzIGRldmljZS4KICAqIEBhZGRyX3NwYWNlX21tOiBSYW5nZSBtYW5hZ2VyIGZvciB0aGUgZGV2aWNlIGFkZHJlc3Mgc3BhY2UuCiAgKiBscnVfbG9jazogU3BpbmxvY2sgdGhhdCBwcm90ZWN0cyB0aGUgYnVmZmVyK2RldmljZSBscnUgbGlzdHMgYW5kCiAgKiBkZGVzdHJveSBsaXN0cy4KKyAqIEB2YWxfc2VxOiBDdXJyZW50IHZhbGlkYXRpb24gc2VxdWVuY2UuCiAgKiBAbmljZV9tb2RlOiBUcnkgbmljZWx5IHRvIHdhaXQgZm9yIGJ1ZmZlciBpZGxlIHdoZW4gY2xlYW5pbmcgYSBtYW5hZ2VyLgogICogSWYgYSBHUFUgbG9ja3VwIGhhcyBiZWVuIGRldGVjdGVkLCB0aGlzIGlzIGZvcmNlZCB0byAwLgogICogQGRldl9tYXBwaW5nOiBBIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBhZGRyZXNzX3NwYWNlIHJlcHJlc2VudGluZyB0aGUKQEAgLTUzMSw2ICs1NDksNyBAQAogCXN0cnVjdCB0dG1fYm9fZHJpdmVyICpkcml2ZXI7CiAJcndsb2NrX3Qgdm1fbG9jazsKIAlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgbWFuW1RUTV9OVU1fTUVNX1RZUEVTXTsKKwlzcGlubG9ja190IGZlbmNlX2xvY2s7CiAJLyoKIAkgKiBQcm90ZWN0ZWQgYnkgdGhlIHZtIGxvY2suCiAJICovCkBAIC01NDEsNiArNTYwLDcgQEAKIAkgKiBQcm90ZWN0ZWQgYnkgdGhlIGdsb2JhbDpscnUgbG9jay4KIAkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRkZXN0cm95OworCXVpbnQzMl90IHZhbF9zZXE7CiAKIAkvKgogCSAqIFByb3RlY3RlZCBieSBsb2FkIC8gZmlyc3RvcGVuIC8gbGFzdGNsb3NlIC91bmxvYWQgc3luYy4KQEAgLTc1MywzMSArNzczLDYgQEAKIAogZXh0ZXJuIGludCB0dG1fYm9fd2FpdF9jcHUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywgYm9vbCBub193YWl0KTsKIAotLyoqCi0gKiB0dG1fYm9fcGNpX29mZnNldCAtIEdldCB0aGUgUENJIG9mZnNldCBmb3IgdGhlIGJ1ZmZlciBvYmplY3QgbWVtb3J5LgotICoKLSAqIEBibyBQb2ludGVyIHRvIGEgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0LgotICogQGJ1c19iYXNlIE9uIHJldHVybiB0aGUgYmFzZSBvZiB0aGUgUENJIHJlZ2lvbgotICogQGJ1c19vZmZzZXQgT24gcmV0dXJuIHRoZSBieXRlIG9mZnNldCBpbnRvIHRoZSBQQ0kgcmVnaW9uCi0gKiBAYnVzX3NpemUgT24gcmV0dXJuIHRoZSBieXRlIHNpemUgb2YgdGhlIGJ1ZmZlciBvYmplY3Qgb3IgemVybyBpZgotICogdGhlIGJ1ZmZlciBvYmplY3QgbWVtb3J5IGlzIG5vdCBhY2Nlc3NpYmxlIHRocm91Z2ggYSBQQ0kgcmVnaW9uLgotICoKLSAqIFJldHVybnM6Ci0gKiAtRUlOVkFMIGlmIHRoZSBidWZmZXIgb2JqZWN0IGlzIGN1cnJlbnRseSBub3QgbWFwcGFibGUuCi0gKiAwIG90aGVyd2lzZS4KLSAqLwotCi1leHRlcm4gaW50IHR0bV9ib19wY2lfb2Zmc2V0KHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LAotCQkJICAgICBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyAqYnVzX2Jhc2UsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgKmJ1c19vZmZzZXQsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgKmJ1c19zaXplKTsKLQotZXh0ZXJuIGludCB0dG1fbWVtX2lvX3Jlc2VydmUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCi0JCQkJc3RydWN0IHR0bV9tZW1fcmVnICptZW0pOwotZXh0ZXJuIHZvaWQgdHRtX21lbV9pb19mcmVlKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LAotCQkJCXN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKTsKLQogZXh0ZXJuIHZvaWQgdHRtX2JvX2dsb2JhbF9yZWxlYXNlKHN0cnVjdCBkcm1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKTsKIGV4dGVybiBpbnQgdHRtX2JvX2dsb2JhbF9pbml0KHN0cnVjdCBkcm1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKTsKIApAQCAtODEwLDYgKzgwNSwyMiBAQAogZXh0ZXJuIHZvaWQgdHRtX2JvX3VubWFwX3ZpcnR1YWwoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7CiAKIC8qKgorICogdHRtX2JvX3VubWFwX3ZpcnR1YWwKKyAqCisgKiBAYm86IHRlYXIgZG93biB0aGUgdmlydHVhbCBtYXBwaW5ncyBmb3IgdGhpcyBCTworICoKKyAqIFRoZSBjYWxsZXIgbXVzdCB0YWtlIHR0bV9tZW1faW9fbG9jayBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICovCitleHRlcm4gdm9pZCB0dG1fYm9fdW5tYXBfdmlydHVhbF9sb2NrZWQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7CisKK2V4dGVybiBpbnQgdHRtX21lbV9pb19yZXNlcnZlX3ZtKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pOworZXh0ZXJuIHZvaWQgdHRtX21lbV9pb19mcmVlX3ZtKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pOworZXh0ZXJuIGludCB0dG1fbWVtX2lvX2xvY2soc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCisJCQkgICBib29sIGludGVycnVwdGlibGUpOworZXh0ZXJuIHZvaWQgdHRtX21lbV9pb191bmxvY2soc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4pOworCisKKy8qKgogICogdHRtX2JvX3Jlc2VydmU6CiAgKgogICogQGJvOiBBIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QuCkBAIC04NTksMTEgKzg3MCw0NCBAQAogICogdHJ5IGFnYWluLiAob25seSBpZiB1c2Vfc2VxdWVuY2UgPT0gMSkuCiAgKiAtRVJFU1RBUlRTWVM6IEEgd2FpdCBmb3IgdGhlIGJ1ZmZlciB0byBiZWNvbWUgdW5yZXNlcnZlZCB3YXMgaW50ZXJydXB0ZWQgYnkKICAqIGEgc2lnbmFsLiBSZWxlYXNlIGFsbCBidWZmZXIgcmVzZXJ2YXRpb25zIGFuZCByZXR1cm4gdG8gdXNlci1zcGFjZS4KKyAqIC1FQlVTWTogVGhlIGZ1bmN0aW9uIG5lZWRlZCB0byBzbGVlcCwgYnV0IEBub193YWl0IHdhcyB0cnVlCisgKiAtRURFQURMSzogQm8gYWxyZWFkeSByZXNlcnZlZCB1c2luZyBAc2VxdWVuY2UuIFRoaXMgZXJyb3IgY29kZSB3aWxsIG9ubHkKKyAqIGJlIHJldHVybmVkIGlmIEB1c2Vfc2VxdWVuY2UgaXMgc2V0IHRvIHRydWUuCiAgKi8KIGV4dGVybiBpbnQgdHRtX2JvX3Jlc2VydmUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKIAkJCSAgYm9vbCBpbnRlcnJ1cHRpYmxlLAogCQkJICBib29sIG5vX3dhaXQsIGJvb2wgdXNlX3NlcXVlbmNlLCB1aW50MzJfdCBzZXF1ZW5jZSk7CiAKKworLyoqCisgKiB0dG1fYm9fcmVzZXJ2ZV9sb2NrZWQ6CisgKgorICogQGJvOiBBIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QuCisgKiBAaW50ZXJydXB0aWJsZTogU2xlZXAgaW50ZXJydXB0aWJsZSBpZiB3YWl0aW5nLgorICogQG5vX3dhaXQ6IERvbid0IHNsZWVwIHdoaWxlIHRyeWluZyB0byByZXNlcnZlLCByYXRoZXIgcmV0dXJuIC1FQlVTWS4KKyAqIEB1c2Vfc2VxdWVuY2U6IElmIEBibyBpcyBhbHJlYWR5IHJlc2VydmVkLCBPbmx5IHNsZWVwIHdhaXRpbmcgZm9yCisgKiBpdCB0byBiZWNvbWUgdW5yZXNlcnZlZCBpZiBAc2VxdWVuY2UgPCAoQGJvKS0+c2VxdWVuY2UuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBzdHJ1Y3QgdHRtX2JvX2dsb2JhbDo6bHJ1X2xvY2sgaGVsZCwKKyAqIGFuZCB3aWxsIG5vdCByZW1vdmUgcmVzZXJ2ZWQgYnVmZmVycyBmcm9tIHRoZSBscnUgbGlzdHMuCisgKiBUaGUgZnVuY3Rpb24gbWF5IHJlbGVhc2UgdGhlIExSVSBzcGlubG9jayBpZiBpdCBuZWVkcyB0byBzbGVlcC4KKyAqIE90aGVyd2lzZSBpZGVudGljYWwgdG8gdHRtX2JvX3Jlc2VydmUuCisgKgorICogUmV0dXJuczoKKyAqIC1FQUdBSU46IFRoZSByZXNlcnZhdGlvbiBtYXkgY2F1c2UgYSBkZWFkbG9jay4KKyAqIFJlbGVhc2UgYWxsIGJ1ZmZlciByZXNlcnZhdGlvbnMsIHdhaXQgZm9yIEBibyB0byBiZWNvbWUgdW5yZXNlcnZlZCBhbmQKKyAqIHRyeSBhZ2Fpbi4gKG9ubHkgaWYgdXNlX3NlcXVlbmNlID09IDEpLgorICogLUVSRVNUQVJUU1lTOiBBIHdhaXQgZm9yIHRoZSBidWZmZXIgdG8gYmVjb21lIHVucmVzZXJ2ZWQgd2FzIGludGVycnVwdGVkIGJ5CisgKiBhIHNpZ25hbC4gUmVsZWFzZSBhbGwgYnVmZmVyIHJlc2VydmF0aW9ucyBhbmQgcmV0dXJuIHRvIHVzZXItc3BhY2UuCisgKiAtRUJVU1k6IFRoZSBmdW5jdGlvbiBuZWVkZWQgdG8gc2xlZXAsIGJ1dCBAbm9fd2FpdCB3YXMgdHJ1ZQorICogLUVERUFETEs6IEJvIGFscmVhZHkgcmVzZXJ2ZWQgdXNpbmcgQHNlcXVlbmNlLiBUaGlzIGVycm9yIGNvZGUgd2lsbCBvbmx5CisgKiBiZSByZXR1cm5lZCBpZiBAdXNlX3NlcXVlbmNlIGlzIHNldCB0byB0cnVlLgorICovCitleHRlcm4gaW50IHR0bV9ib19yZXNlcnZlX2xvY2tlZChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAorCQkJCSBib29sIGludGVycnVwdGlibGUsCisJCQkJIGJvb2wgbm9fd2FpdCwgYm9vbCB1c2Vfc2VxdWVuY2UsCisJCQkJIHVpbnQzMl90IHNlcXVlbmNlKTsKKwogLyoqCiAgKiB0dG1fYm9fdW5yZXNlcnZlCiAgKgpAQCAtODc0LDYgKzkxOCwxNiBAQAogZXh0ZXJuIHZvaWQgdHRtX2JvX3VucmVzZXJ2ZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKTsKIAogLyoqCisgKiB0dG1fYm9fdW5yZXNlcnZlX2xvY2tlZAorICoKKyAqIEBibzogQSBwb2ludGVyIHRvIGEgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0LgorICoKKyAqIFVucmVzZXJ2ZSBhIHByZXZpb3VzIHJlc2VydmF0aW9uIG9mIEBiby4KKyAqIE5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHN0cnVjdCB0dG1fYm9fZ2xvYmFsOjpscnVfbG9jayBoZWxkLgorICovCitleHRlcm4gdm9pZCB0dG1fYm9fdW5yZXNlcnZlX2xvY2tlZChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKTsKKworLyoqCiAgKiB0dG1fYm9fd2FpdF91bnJlc2VydmVkCiAgKgogICogQGJvOiBBIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90dG0vdHRtX2V4ZWNidWZfdXRpbC5oIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9leGVjYnVmX3V0aWwuaAppbmRleCBjZDJjNDc1Li4yNmNjN2Y5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS90dG0vdHRtX2V4ZWNidWZfdXRpbC5oCisrKyBiL2luY2x1ZGUvZHJtL3R0bS90dG1fZXhlY2J1Zl91dGlsLmgKQEAgLTQxLDcgKzQxLDEwIEBACiAgKiBAYm86ICAgICAgICAgICAgIHJlZmNvdW50ZWQgYnVmZmVyIG9iamVjdCBwb2ludGVyLgogICogQG5ld19zeW5jX29ial9hcmc6IE5ldyBzeW5jX29ial9hcmcgZm9yIEBibywgdG8gYmUgdXNlZCBvbmNlCiAgKiBhZGRpbmcgYSBuZXcgc3luYyBvYmplY3QuCi0gKiBAcmVzZXJ2aWVkOiAgICAgIEluZGljYXRlcyB3aGV0aGVyIEBibyBoYXMgYmVlbiByZXNlcnZlZCBmb3IgdmFsaWRhdGlvbi4KKyAqIEByZXNlcnZlZDogICAgICAgSW5kaWNhdGVzIHdoZXRoZXIgQGJvIGhhcyBiZWVuIHJlc2VydmVkIGZvciB2YWxpZGF0aW9uLgorICogQHJlbW92ZWQ6ICAgICAgICBJbmRpY2F0ZXMgd2hldGhlciBAYm8gaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGxydSBsaXN0cy4KKyAqIEBwdXRfY291bnQ6ICAgICAgTnVtYmVyIG9mIG91dHN0YW5kaW5nIHJlZmVyZW5jZXMgb24gYm86Omxpc3Rfa3JlZi4KKyAqIEBvbGRfc3luY19vYmo6ICAgUG9pbnRlciB0byBhIHN5bmMgb2JqZWN0IGFib3V0IHRvIGJlIHVucmVmZXJlbmNlZAogICovCiAKIHN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyIHsKQEAgLTQ5LDYgKzUyLDkgQEAKIAlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvOwogCXZvaWQgKm5ld19zeW5jX29ial9hcmc7CiAJYm9vbCByZXNlcnZlZDsKKwlib29sIHJlbW92ZWQ7CisJaW50IHB1dF9jb3VudDsKKwl2b2lkICpvbGRfc3luY19vYmo7CiB9OwogCiAvKioKQEAgLTY2LDcgKzcyLDYgQEAKICAqIGZ1bmN0aW9uIHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMKICAqCiAgKiBAbGlzdDogICAgdGhyZWFkIHByaXZhdGUgbGlzdCBvZiB0dG1fdmFsaWRhdGVfYnVmZmVyIHN0cnVjdHMuCi0gKiBAdmFsX3NlcTogQSB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyLgogICoKICAqIFRyaWVzIHRvIHJlc2VydmUgYm9zIHBvaW50ZWQgdG8gYnkgdGhlIGxpc3QgZW50cmllcyBmb3IgdmFsaWRhdGlvbi4KICAqIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAsIGFsbCBidWZmZXJzIGFyZSBtYXJrZWQgYXMgInVuZmVuY2VkIiwKQEAgLTg4LDcgKzkzLDcgQEAKICAqIGhhcyBmYWlsZWQuCiAgKi8KIAotZXh0ZXJuIGludCB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHVpbnQzMl90IHZhbF9zZXEpOworZXh0ZXJuIGludCB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOwogCiAvKioKICAqIGZ1bmN0aW9uIHR0bV9ldV9mZW5jZV9idWZmZXJfb2JqZWN0cy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKaW5kZXggZDE1ODBjMS4uMjI5NmQ4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKQEAgLTE1OCw2ICsxNTgsNyBAQAogaGVhZGVyLXkgKz0gaWYuaAogaGVhZGVyLXkgKz0gaWZfYWRkci5oCiBoZWFkZXIteSArPSBpZl9hZGRybGFiZWwuaAoraGVhZGVyLXkgKz0gaWZfYWxnLmgKIGhlYWRlci15ICs9IGlmX2FyY25ldC5oCiBoZWFkZXIteSArPSBpZl9hcnAuaAogaGVhZGVyLXkgKz0gaWZfYm9uZGluZy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FncF9iYWNrZW5kLmggYi9pbmNsdWRlL2xpbnV4L2FncF9iYWNrZW5kLmgKaW5kZXggMDllYTRhMS4uZWFmNmNkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hZ3BfYmFja2VuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvYWdwX2JhY2tlbmQuaApAQCAtMTAyLDEwICsxMDIsOCBAQAogZXh0ZXJuIGludCBhZ3BfY29weV9pbmZvKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKiwgc3RydWN0IGFncF9rZXJuX2luZm8gKik7CiBleHRlcm4gaW50IGFncF9iaW5kX21lbW9yeShzdHJ1Y3QgYWdwX21lbW9yeSAqLCBvZmZfdCk7CiBleHRlcm4gaW50IGFncF91bmJpbmRfbWVtb3J5KHN0cnVjdCBhZ3BfbWVtb3J5ICopOwotZXh0ZXJuIGludCBhZ3BfcmViaW5kX21lbW9yeSh2b2lkKTsKIGV4dGVybiB2b2lkIGFncF9lbmFibGUoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqLCB1MzIpOwogZXh0ZXJuIHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmFncF9iYWNrZW5kX2FjcXVpcmUoc3RydWN0IHBjaV9kZXYgKik7CiBleHRlcm4gdm9pZCBhZ3BfYmFja2VuZF9yZWxlYXNlKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKik7Ci1leHRlcm4gdm9pZCBhZ3BfZmx1c2hfY2hpcHNldChzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICopOwogCiAjZW5kaWYJCQkJLyogX0FHUF9CQUNLRU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmZpbl9tYWMuaCBiL2luY2x1ZGUvbGludXgvYmZpbl9tYWMuaAppbmRleCA5MDRkZWM3Li5hNjk1NTRlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iZmluX21hYy5oCisrKyBiL2luY2x1ZGUvbGludXgvYmZpbl9tYWMuaApAQCAtMjQsNiArMjQsNyBAQAogCWNvbnN0IHVuc2lnbmVkIHNob3J0ICptYWNfcGVyaXBoZXJhbHM7CiAJaW50IHBoeV9tb2RlOwogCXVuc2lnbmVkIGludCBwaHlfbWFzazsKKwl1bnNpZ25lZCBzaG9ydCB2bGFuMV9tYXNrLCB2bGFuMl9tYXNrOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCBiL2luY2x1ZGUvbGludXgvYmluZm10cy5oCmluZGV4IDY0YTcxMTQuLmMzZDY1MTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oCisrKyBiL2luY2x1ZGUvbGludXgvYmluZm10cy5oCkBAIC0yNSw3ICsyNSw3IEBACiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBob2xkIHRoZSBhcmd1bWVudHMgdGhhdCBhcmUgdXNlZCB3aGVuIGxvYWRpbmcgYmluYXJpZXMuCiAgKi8KLXN0cnVjdCBsaW51eF9iaW5wcm17CitzdHJ1Y3QgbGludXhfYmlucHJtIHsKIAljaGFyIGJ1ZltCSU5QUk1fQlVGX1NJWkVdOwogI2lmZGVmIENPTkZJR19NTVUKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKQEAgLTkzLDcgKzkzLDYgQEAKIAlpbnQgKCpsb2FkX3NobGliKShzdHJ1Y3QgZmlsZSAqKTsKIAlpbnQgKCpjb3JlX2R1bXApKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pOwogCXVuc2lnbmVkIGxvbmcgbWluX2NvcmVkdW1wOwkvKiBtaW5pbWFsIGR1bXAgc2l6ZSAqLwotCWludCBoYXN2ZHNvOwogfTsKIAogZXh0ZXJuIGludCBfX3JlZ2lzdGVyX2JpbmZtdChzdHJ1Y3QgbGludXhfYmluZm10ICpmbXQsIGludCBpbnNlcnQpOwpAQCAtMTEzLDcgKzExMiw3IEBACiAKIGV4dGVybiBpbnQgcHJlcGFyZV9iaW5wcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqKTsKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIHJlbW92ZV9hcmdfemVybyhzdHJ1Y3QgbGludXhfYmlucHJtICopOwotZXh0ZXJuIGludCBzZWFyY2hfYmluYXJ5X2hhbmRsZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqLHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGludCBzZWFyY2hfYmluYXJ5X2hhbmRsZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiBpbnQgZmx1c2hfb2xkX2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pOwogZXh0ZXJuIHZvaWQgc2V0dXBfbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NkZXYuaCBiL2luY2x1ZGUvbGludXgvY2Rldi5oCmluZGV4IGYzODllMzEuLmZiNDU5MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvY2Rldi5oCkBAIC0yOCw4ICsyOCw2IEBACiAKIHZvaWQgY2Rldl9kZWwoc3RydWN0IGNkZXYgKik7CiAKLWludCBjZGV2X2luZGV4KHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotCiB2b2lkIGNkX2ZvcmdldChzdHJ1Y3QgaW5vZGUgKik7CiAKIGV4dGVybiBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBkaXJlY3RseV9tYXBwYWJsZV9jZGV2X2JkaTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2VwaC9jZXBoX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2NlcGgvY2VwaF9mcy5oCmluZGV4IGMzYzc0YWUuLjA5ZGNjMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2VwaC9jZXBoX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZXBoL2NlcGhfZnMuaApAQCAtNDMsNiArNDMsMTAgQEAKICNkZWZpbmUgQ0VQSF9GRUFUVVJFX05PU1JDQUREUiAgICAgICgxPDwxKQogI2RlZmluZSBDRVBIX0ZFQVRVUkVfTU9OQ0xPQ0tDSEVDSyAgKDE8PDIpCiAjZGVmaW5lIENFUEhfRkVBVFVSRV9GTE9DSyAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgQ0VQSF9GRUFUVVJFX1NVQlNDUklCRTIgICAgICgxPDw0KQorI2RlZmluZSBDRVBIX0ZFQVRVUkVfTU9OTkFNRVMgICAgICAgKDE8PDUpCisjZGVmaW5lIENFUEhfRkVBVFVSRV9SRUNPTk5FQ1RfU0VRICAoMTw8NikKKyNkZWZpbmUgQ0VQSF9GRUFUVVJFX0RJUkxBWU9VVEhBU0ggICgxPDw3KQogCiAKIC8qCkBAIC01NSwxMCArNTksMTAgQEAKIAlfX2xlMzIgZmxfc3RyaXBlX2NvdW50OyAgICAvKiBvdmVyIHRoaXMgbWFueSBvYmplY3RzICovCiAJX19sZTMyIGZsX29iamVjdF9zaXplOyAgICAgLyogdW50aWwgb2JqZWN0cyBhcmUgdGhpcyBiaWcsIHRoZW4gbW92ZSB0bwogCQkJCSAgICAgIG5ldyBvYmplY3RzICovCi0JX19sZTMyIGZsX2Nhc19oYXNoOyAgICAgICAgLyogMCA9IG5vbmU7IDEgPSBzaGEyNTYgKi8KKwlfX2xlMzIgZmxfY2FzX2hhc2g7ICAgICAgICAvKiBVTlVTRUQuICAwID0gbm9uZTsgMSA9IHNoYTI1NiAqLwogCiAJLyogcGcgLT4gZGlzayBsYXlvdXQgKi8KLQlfX2xlMzIgZmxfb2JqZWN0X3N0cmlwZV91bml0OyAgLyogZm9yIHBlci1vYmplY3QgcGFyaXR5LCBpZiBhbnkgKi8KKwlfX2xlMzIgZmxfb2JqZWN0X3N0cmlwZV91bml0OyAgLyogVU5VU0VELiAgZm9yIHBlci1vYmplY3QgcGFyaXR5LCBpZiBhbnkgKi8KIAogCS8qIG9iamVjdCAtPiBwZyBsYXlvdXQgKi8KIAlfX2xlMzIgZmxfcGdfcHJlZmVycmVkOyAvKiBwcmVmZXJyZWQgcHJpbWFyeSBmb3IgcGcgKC0xIGZvciBub25lKSAqLwpAQCAtNjksNiArNzMsMTIgQEAKIAogaW50IGNlcGhfZmlsZV9sYXlvdXRfaXNfdmFsaWQoY29uc3Qgc3RydWN0IGNlcGhfZmlsZV9sYXlvdXQgKmxheW91dCk7CiAKK3N0cnVjdCBjZXBoX2Rpcl9sYXlvdXQgeworCV9fdTggICBkbF9kaXJfaGFzaDsgICAvKiBzZWUgY2VwaF9oYXNoLmggZm9yIGlkcyAqLworCV9fdTggICBkbF91bnVzZWQxOworCV9fdTE2ICBkbF91bnVzZWQyOworCV9fdTMyICBkbF91bnVzZWQzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIGNyeXB0byBhbGdvcml0aG1zICovCiAjZGVmaW5lIENFUEhfQ1JZUFRPX05PTkUgMHgwCkBAIC00NTcsNyArNDY3LDcgQEAKIAlzdHJ1Y3QgY2VwaF90aW1lc3BlYyByY3RpbWU7CiAJc3RydWN0IGNlcGhfZnJhZ190cmVlX2hlYWQgZnJhZ3RyZWU7ICAvKiAobXVzdCBiZSBhdCBlbmQgb2Ygc3RydWN0KSAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0vKiBmb2xsb3dlZCBieSBmcmFnIGFycmF5LCB0aGVuIHN5bWxpbmsgc3RyaW5nLCB0aGVuIHhhdHRyIGJsb2IgKi8KKy8qIGZvbGxvd2VkIGJ5IGZyYWcgYXJyYXksIHN5bWxpbmsgc3RyaW5nLCBkaXIgbGF5b3V0LCB4YXR0ciBibG9iICovCiAKIC8qIHJlcGx5X2xlYXNlIGZvbGxvd3MgZG5hbWUsIGFuZCByZXBseV9pbm9kZSAqLwogc3RydWN0IGNlcGhfbWRzX3JlcGx5X2xlYXNlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2VwaC9tZXNzZW5nZXIuaCBiL2luY2x1ZGUvbGludXgvY2VwaC9tZXNzZW5nZXIuaAppbmRleCBhMTA4YjQyLi5jMzAxMWJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NlcGgvbWVzc2VuZ2VyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZXBoL21lc3Nlbmdlci5oCkBAIC0xMTAsMTcgKzExMCwxMiBAQAogCiAvKgogICogY2VwaF9jb25uZWN0aW9uIHN0YXRlIGJpdCBmbGFncwotICoKLSAqIFFVRVVFRCBhbmQgQlVTWSBhcmUgdXNlZCB0b2dldGhlciB0byBlbnN1cmUgdGhhdCBvbmx5IGEgc2luZ2xlCi0gKiB0aHJlYWQgaXMgY3VycmVudGx5IG9wZW5pbmcsIHJlYWRpbmcgb3Igd3JpdGluZyBkYXRhIHRvIHRoZSBzb2NrZXQuCiAgKi8KICNkZWZpbmUgTE9TU1lUWCAgICAgICAgIDAgIC8qIHdlIGNhbiBjbG9zZSBjaGFubmVsIG9yIGRyb3AgbWVzc2FnZXMgb24gZXJyb3JzICovCiAjZGVmaW5lIENPTk5FQ1RJTkcJMQogI2RlZmluZSBORUdPVElBVElORwkyCiAjZGVmaW5lIEtFRVBBTElWRV9QRU5ESU5HICAgICAgMwogI2RlZmluZSBXUklURV9QRU5ESU5HCTQgIC8qIHdlIGhhdmUgZGF0YSByZWFkeSB0byBzZW5kICovCi0jZGVmaW5lIFFVRVVFRCAgICAgICAgICA1ICAvKiB0aGVyZSBpcyB3b3JrIHF1ZXVlZCBvbiB0aGlzIGNvbm5lY3Rpb24gKi8KLSNkZWZpbmUgQlVTWSAgICAgICAgICAgIDYgIC8qIHdvcmsgaXMgYmVpbmcgZG9uZSAqLwogI2RlZmluZSBTVEFOREJZCQk4ICAvKiBubyBvdXRnb2luZyBtZXNzYWdlcywgc29ja2V0IGNsb3NlZC4gIHdlIGtlZXAKIAkJCSAgICAqIHRoZSBjZXBoX2Nvbm5lY3Rpb24gYXJvdW5kIHRvIG1haW50YWluIHNoYXJlZAogCQkJICAgICogc3RhdGUgd2l0aCB0aGUgcGVlci4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCmluZGV4IGVkNGJhMTEuLmNlMTA0ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApAQCAtNTY0LDcgKzU2NCw3IEBACiAvKgogICogVG8gaXRlcmF0ZSBhY3Jvc3MgdGhlIHRhc2tzIGluIGEgY2dyb3VwOgogICoKLSAqIDEpIGNhbGwgY2dyb3VwX2l0ZXJfc3RhcnQgdG8gaW50aWFsaXplIGFuIGl0ZXJhdG9yCisgKiAxKSBjYWxsIGNncm91cF9pdGVyX3N0YXJ0IHRvIGluaXRpYWxpemUgYW4gaXRlcmF0b3IKICAqCiAgKiAyKSBjYWxsIGNncm91cF9pdGVyX25leHQoKSB0byByZXRyaWV2ZSBtZW1iZXIgdGFza3MgdW50aWwgaXQKICAqICAgIHJldHVybnMgTlVMTCBvciB1bnRpbCB5b3Ugd2FudCB0byBlbmQgdGhlIGl0ZXJhdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmFtZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvY3JhbWZzX2ZzLmgKaW5kZXggNmZjMmJlZC4uMGU3YmYyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcmFtZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyYW1mc19mcy5oCkBAIC04NCw5ICs4NCwxMSBAQAogCQkJCXwgQ1JBTUZTX0ZMQUdfV1JPTkdfU0lHTkFUVVJFIFwKIAkJCQl8IENSQU1GU19GTEFHX1NISUZURURfUk9PVF9PRkZTRVQgKQogCisjaWZkZWYgX19LRVJORUxfXwogLyogVW5jb21wcmVzc2lvbiBpbnRlcmZhY2VzIHRvIHRoZSB1bmRlcmx5aW5nIHpsaWIgKi8KIGludCBjcmFtZnNfdW5jb21wcmVzc19ibG9jayh2b2lkICpkc3QsIGludCBkc3RsZW4sIHZvaWQgKnNyYywgaW50IHNyY2xlbik7CiBpbnQgY3JhbWZzX3VuY29tcHJlc3NfaW5pdCh2b2lkKTsKIHZvaWQgY3JhbWZzX3VuY29tcHJlc3NfZXhpdCh2b2lkKTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jczU1MzUuaCBiL2luY2x1ZGUvbGludXgvY3M1NTM1LmgKaW5kZXggZDVhMWQ0OC4uNmZlMjExNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jczU1MzUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NzNTUzNS5oCkBAIC0xMDMsMTQgKzEwMywyMCBAQAogI2RlZmluZSBHUElPX1BPU0lUSVZFX0VER0VfU1RTCTB4NDgKICNkZWZpbmUgR1BJT19ORUdBVElWRV9FREdFX1NUUwkweDRDCiAKKyNkZWZpbmUgR1BJT19GTFRSN19BTU9VTlQJMHhEOAorCiAjZGVmaW5lIEdQSU9fTUFQX1gJCTB4RTAKICNkZWZpbmUgR1BJT19NQVBfWQkJMHhFNAogI2RlZmluZSBHUElPX01BUF9aCQkweEU4CiAjZGVmaW5lIEdQSU9fTUFQX1cJCTB4RUMKIAorI2RlZmluZSBHUElPX0ZFN19TRUwJCTB4RjcKKwogdm9pZCBjczU1MzVfZ3Bpb19zZXQodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgcmVnKTsKIHZvaWQgY3M1NTM1X2dwaW9fY2xlYXIodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgcmVnKTsKIGludCBjczU1MzVfZ3Bpb19pc3NldCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGludCByZWcpOworaW50IGNzNTUzNV9ncGlvX3NldF9pcnEodW5zaWduZWQgZ3JvdXAsIHVuc2lnbmVkIGlycSk7Cit2b2lkIGNzNTUzNV9ncGlvX3NldHVwX2V2ZW50KHVuc2lnbmVkIG9mZnNldCwgaW50IHBhaXIsIGludCBwbWUpOwogCiAvKiBNRkdQVHMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL2luZmxhdGUuaCBiL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9pbmZsYXRlLmgKaW5kZXggZjliMDZjYy4uOGMwYWVmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL2luZmxhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvaW5mbGF0ZS5oCkBAIC0xLDkgKzEsNiBAQAogI2lmbmRlZiBJTkZMQVRFX0gKICNkZWZpbmUgSU5GTEFURV9ICiAKLS8qIE90aGVyIGhvdXNla2VlcGluZyBjb25zdGFudHMgKi8KLSNkZWZpbmUgSU5CVUZTSVogNDA5NgotCiBpbnQgZ3VuemlwKHVuc2lnbmVkIGNoYXIgKmluYnVmLCBpbnQgbGVuLAogCSAgIGludCgqZmlsbCkodm9pZCosIHVuc2lnbmVkIGludCksCiAJICAgaW50KCpmbHVzaCkodm9pZCosIHVuc2lnbmVkIGludCksCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvbW0uaCBiL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9tbS5oCmluZGV4IGFkNWVjMWQuLjRjYjcyYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9tbS5oCkBAIC02MSw4ICs2MSw2IEBACiAjZGVmaW5lIGxhcmdlX21hbGxvYyhhKSBtYWxsb2MoYSkKICNkZWZpbmUgbGFyZ2VfZnJlZShhKSBmcmVlKGEpCiAKLSNkZWZpbmUgc2V0X2Vycm9yX2ZuKHgpCi0KICNkZWZpbmUgSU5JVAogCiAjZWxzZSAvKiBTVEFUSUMgKi8KQEAgLTcyLDYgKzcwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKIC8qIFVzZSBkZWZpbmVzIHJhdGhlciB0aGFuIHN0YXRpYyBpbmxpbmUgaW4gb3JkZXIgdG8gYXZvaWQgc3B1cmlvdXMKQEAgLTg0LDkgKzgzLDYgQEAKICNkZWZpbmUgbGFyZ2VfbWFsbG9jKGEpIHZtYWxsb2MoYSkKICNkZWZpbmUgbGFyZ2VfZnJlZShhKSB2ZnJlZShhKQogCi1zdGF0aWMgdm9pZCgqZXJyb3IpKGNoYXIgKm0pOwotI2RlZmluZSBzZXRfZXJyb3JfZm4oeCkgZXJyb3IgPSB4OwotCiAjZGVmaW5lIElOSVQgX19pbml0CiAjZGVmaW5lIFNUQVRJQwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvdW54ei5oIGIvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL3VueHouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTcyOGZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL3VueHouaApAQCAtMCwwICsxLDE5IEBACisvKgorICogV3JhcHBlciBmb3IgZGVjb21wcmVzc2luZyBYWi1jb21wcmVzc2VkIGtlcm5lbCwgaW5pdHJhbWZzLCBhbmQgaW5pdHJkCisgKgorICogQXV0aG9yOiBMYXNzZSBDb2xsaW4gPGxhc3NlLmNvbGxpbkB0dWthYW5pLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gcHV0IGludG8gdGhlIHB1YmxpYyBkb21haW4uCisgKiBZb3UgY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhpcyBmaWxlLgorICovCisKKyNpZm5kZWYgREVDT01QUkVTU19VTlhaX0gKKyNkZWZpbmUgREVDT01QUkVTU19VTlhaX0gKKworaW50IHVueHoodW5zaWduZWQgY2hhciAqaW4sIGludCBpbl9zaXplLAorCSBpbnQgKCpmaWxsKSh2b2lkICpkZXN0LCB1bnNpZ25lZCBpbnQgc2l6ZSksCisJIGludCAoKmZsdXNoKSh2b2lkICpzcmMsIHVuc2lnbmVkIGludCBzaXplKSwKKwkgdW5zaWduZWQgY2hhciAqb3V0LCBpbnQgKmluX3VzZWQsCisJIHZvaWQgKCplcnJvcikoY2hhciAqeCkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHluYW1pY19kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC9keW5hbWljX2RlYnVnLmgKaW5kZXggYTkwYjM4OS4uMWM3MDAyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9keW5hbWljX2RlYnVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9keW5hbWljX2RlYnVnLmgKQEAgLTQ0LDM0ICs0NCwyNCBAQAogZXh0ZXJuIGludCBkZGVidWdfcmVtb3ZlX21vZHVsZShjb25zdCBjaGFyICptb2RfbmFtZSk7CiAKICNkZWZpbmUgZHluYW1pY19wcl9kZWJ1ZyhmbXQsIC4uLikgZG8gewkJCQkJXAotCV9fbGFiZWxfXyBkb19wcmludGs7CQkJCQkJXAotCV9fbGFiZWxfXyBvdXQ7CQkJCQkJCVwKIAlzdGF0aWMgc3RydWN0IF9kZGVidWcgZGVzY3JpcHRvcgkJCQlcCiAJX191c2VkCQkJCQkJCQlcCiAJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlIiksIGFsaWduZWQoOCkpKSA9CQlcCiAJeyBLQlVJTERfTU9ETkFNRSwgX19mdW5jX18sIF9fRklMRV9fLCBmbXQsIF9fTElORV9fLAkJXAogCQlfRFBSSU5US19GTEFHU19ERUZBVUxUIH07CQkJCVwKLQlKVU1QX0xBQkVMKCZkZXNjcmlwdG9yLmVuYWJsZWQsIGRvX3ByaW50ayk7CQkJXAotCWdvdG8gb3V0OwkJCQkJCQlcCi1kb19wcmludGs6CQkJCQkJCQlcCi0JcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KGZtdCksCSMjX19WQV9BUkdTX18pOwkJCVwKLW91dDoJOwkJCQkJCQkJXAorCWlmICh1bmxpa2VseShkZXNjcmlwdG9yLmVuYWJsZWQpKQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHIHByX2ZtdChmbXQpLAkjI19fVkFfQVJHU19fKTsJCVwKIAl9IHdoaWxlICgwKQogCiAKICNkZWZpbmUgZHluYW1pY19kZXZfZGJnKGRldiwgZm10LCAuLi4pIGRvIHsJCQkJXAotCV9fbGFiZWxfXyBkb19wcmludGs7CQkJCQkJXAotCV9fbGFiZWxfXyBvdXQ7CQkJCQkJCVwKIAlzdGF0aWMgc3RydWN0IF9kZGVidWcgZGVzY3JpcHRvcgkJCQlcCiAJX191c2VkCQkJCQkJCQlcCiAJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlIiksIGFsaWduZWQoOCkpKSA9CQlcCiAJeyBLQlVJTERfTU9ETkFNRSwgX19mdW5jX18sIF9fRklMRV9fLCBmbXQsIF9fTElORV9fLAkJXAogCQlfRFBSSU5US19GTEFHU19ERUZBVUxUIH07CQkJCVwKLQlKVU1QX0xBQkVMKCZkZXNjcmlwdG9yLmVuYWJsZWQsIGRvX3ByaW50ayk7CQkJXAotCWdvdG8gb3V0OwkJCQkJCQlcCi1kb19wcmludGs6CQkJCQkJCQlcCi0JZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXyk7CQlcCi1vdXQ6CTsJCQkJCQkJCVwKKwlpZiAodW5saWtlbHkoZGVzY3JpcHRvci5lbmFibGVkKSkJCQkJXAorCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgZm10LCAjI19fVkFfQVJHU19fKTsJXAogCX0gd2hpbGUgKDApCiAKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgKaW5kZXggZjE2YTAxMC4uYmVjOGI4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaApAQCAtNDgsOCArNDgsMTAgQEAKIAogCiAKLWV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfZXRoZXJkZXZfbXEoaW50IHNpemVvZl9wcml2LCB1bnNpZ25lZCBpbnQgcXVldWVfY291bnQpOworZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19ldGhlcmRldl9tcXMoaW50IHNpemVvZl9wcml2LCB1bnNpZ25lZCBpbnQgdHhxcywKKwkJCQkJICAgIHVuc2lnbmVkIGludCByeHFzKTsKICNkZWZpbmUgYWxsb2NfZXRoZXJkZXYoc2l6ZW9mX3ByaXYpIGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZl9wcml2LCAxKQorI2RlZmluZSBhbGxvY19ldGhlcmRldl9tcShzaXplb2ZfcHJpdiwgY291bnQpIGFsbG9jX2V0aGVyZGV2X21xcyhzaXplb2ZfcHJpdiwgY291bnQsIGNvdW50KQogCiAvKioKICAqIGlzX3plcm9fZXRoZXJfYWRkciAtIERldGVybWluZSBpZiBnaXZlIEV0aGVybmV0IGFkZHJlc3MgaXMgYWxsIHplcm9zLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAppbmRleCA2Y2UxYmNhLi42NTk5MGVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaApAQCAtNzI0LDIxICs3MjQsMzAgQEAKIAkJCQkJIH5FWFQzX0RJUl9ST1VORCkKICNkZWZpbmUgRVhUM19NQVhfUkVDX0xFTgkJKCgxPDwxNiktMSkKIAorLyoKKyAqIFRlc3RzIGFnYWluc3QgTUFYX1JFQ19MRU4gZXRjIHdlcmUgcHV0IGluIHBsYWNlIGZvciA2NGsgYmxvY2sKKyAqIHNpemVzOyBpZiB0aGF0IGlzIG5vdCBwb3NzaWJsZSBvbiB0aGlzIGFyY2gsIHdlIGNhbiBza2lwCisgKiB0aG9zZSB0ZXN0cyBhbmQgc3BlZWQgdGhpbmdzIHVwLgorICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGV4dDNfcmVjX2xlbl9mcm9tX2Rpc2soX19sZTE2IGRsZW4pCiB7CiAJdW5zaWduZWQgbGVuID0gbGUxNl90b19jcHUoZGxlbik7CiAKKyNpZiAoUEFHRV9DQUNIRV9TSVpFID49IDY1NTM2KQogCWlmIChsZW4gPT0gRVhUM19NQVhfUkVDX0xFTikKIAkJcmV0dXJuIDEgPDwgMTY7CisjZW5kaWYKIAlyZXR1cm4gbGVuOwogfQogCiBzdGF0aWMgaW5saW5lIF9fbGUxNiBleHQzX3JlY19sZW5fdG9fZGlzayh1bnNpZ25lZCBsZW4pCiB7CisjaWYgKFBBR0VfQ0FDSEVfU0laRSA+PSA2NTUzNikKIAlpZiAobGVuID09ICgxIDw8IDE2KSkKIAkJcmV0dXJuIGNwdV90b19sZTE2KEVYVDNfTUFYX1JFQ19MRU4pOwogCWVsc2UgaWYgKGxlbiA+ICgxIDw8IDE2KSkKIAkJQlVHKCk7CisjZW5kaWYKIAlyZXR1cm4gY3B1X3RvX2xlMTYobGVuKTsKIH0KIApAQCAtODU2LDYgKzg2NSw3IEBACiBleHRlcm4gaW50IGV4dDNfc2hvdWxkX3JldHJ5X2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqcmV0cmllcyk7CiBleHRlcm4gdm9pZCBleHQzX2luaXRfYmxvY2tfYWxsb2NfaW5mbyhzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBleHQzX3Jzdl93aW5kb3dfYWRkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQzX3Jlc2VydmVfd2luZG93X25vZGUgKnJzdik7CitleHRlcm4gaW50IGV4dDNfdHJpbV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnN0cmltX3JhbmdlICpyYW5nZSk7CiAKIC8qIGRpci5jICovCiBleHRlcm4gaW50IGV4dDNfY2hlY2tfZGlyX2VudHJ5KGNvbnN0IGNoYXIgKiwgc3RydWN0IGlub2RlICosCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZhbGxvYy5oIGIvaW5jbHVkZS9saW51eC9mYWxsb2MuaAppbmRleCAzYzE1NTEwLi43M2UwYjYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZhbGxvYy5oCisrKyBiL2luY2x1ZGUvbGludXgvZmFsbG9jLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9GQUxMT0NfSF8KIAogI2RlZmluZSBGQUxMT0NfRkxfS0VFUF9TSVpFCTB4MDEgLyogZGVmYXVsdCBpcyBleHRlbmQgc2l6ZSAqLworI2RlZmluZSBGQUxMT0NfRkxfUFVOQ0hfSE9MRQkweDAyIC8qIGRlLWFsbG9jYXRlcyByYW5nZSAqLwogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZlYy5oIGIvaW5jbHVkZS9saW51eC9mZWMuaAppbmRleCA1ZDM1MjNkLi5iY2ZmNDU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZlYy5oCisrKyBiL2luY2x1ZGUvbGludXgvZmVjLmgKQEAgLTMsNiArMyw4IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDkgT3JleCBDb21wdXRlZCBSYWRpb2dyYXBoeQogICogICBCYXJ1Y2ggU2lhY2ggPGJhcnVjaEB0a29zLmNvLmlsPgogICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKICAqIEhlYWRlciBmaWxlIGZvciB0aGUgRkVDIHBsYXRmb3JtIGRhdGEKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTYsNiArMTgsNyBAQAogCiBzdHJ1Y3QgZmVjX3BsYXRmb3JtX2RhdGEgewogCXBoeV9pbnRlcmZhY2VfdCBwaHk7CisJdW5zaWduZWQgY2hhciBtYWNbRVRIX0FMRU5dOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaCBiL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCmluZGV4IDY4YzY0MmQuLjU5ZWE0MDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCkBAIC0yNzMsNyArMjczLDcgQEAKICAqIEBjbG9zdXJlOglTZWUgJmZ3X2NkZXZfZXZlbnRfY29tbW9uOwogICoJCXNldCBieSAlRldfQ0RFVl9DUkVBVEVfSVNPX0NPTlRFWFQgaW9jdGwKICAqIEB0eXBlOgklRldfQ0RFVl9FVkVOVF9JU09fSU5URVJSVVBUX01VTFRJQ0hBTk5FTAotICogQGNvbXBsZXRlZDoJT2Zmc2V0IGludG8gdGhlIHJlY2VpdmUgYnVmZmVyOyBkYXRhIGJlZm9yZSB0aGlzIG9mZmVzdCBpcyB2YWxpZAorICogQGNvbXBsZXRlZDoJT2Zmc2V0IGludG8gdGhlIHJlY2VpdmUgYnVmZmVyOyBkYXRhIGJlZm9yZSB0aGlzIG9mZnNldCBpcyB2YWxpZAogICoKICAqIFRoaXMgZXZlbnQgaXMgc2VudCBpbiBtdWx0aWNoYW5uZWwgY29udGV4dHMgKGNvbnRleHQgdHlwZQogICogJUZXX0NERVZfSVNPX0NPTlRFWFRfUkVDRUlWRV9NVUxUSUNIQU5ORUwpIGZvciAmZndfY2Rldl9pc29fcGFja2V0IGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGY4NGQ5OTIuLmMwNzAxMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTE0MjMsNiArMTQyMyw3IEBACiAJICogZ2VuZXJpY19zaG93X29wdGlvbnMoKQogCSAqLwogCWNoYXIgX19yY3UgKnNfb3B0aW9uczsKKwljb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgKnNfZF9vcDsgLyogZGVmYXVsdCBkX29wIGZvciBkZW50cmllcyAqLwogfTsKIAogZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyBjdXJyZW50X2ZzX3RpbWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CkBAIC0xODM0LDcgKzE4MzUsOSBAQAogCQkJaW50ICgqc2V0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKix2b2lkICopLAogCQkJdm9pZCAqZGF0YSk7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqbW91bnRfcHNldWRvKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICosIGNoYXIgKiwKLQljb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyAqb3BzLCB1bnNpZ25lZCBsb25nKTsKKwljb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyAqb3BzLAorCWNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqZG9wcywKKwl1bnNpZ25lZCBsb25nKTsKIGV4dGVybiB2b2lkIHNpbXBsZV9zZXRfbW50KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNiX21hcmtfZGlydHkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ3Bpby1pMmNtdXguaCBiL2luY2x1ZGUvbGludXgvZ3Bpby1pMmNtdXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTMzM2JiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9ncGlvLWkyY211eC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBncGlvLWkyY211eCBpbnRlcmZhY2UgdG8gcGxhdGZvcm0gY29kZQorICoKKyAqIFBldGVyIEtvcnNnYWFyZCA8cGV0ZXIua29yc2dhYXJkQGJhcmNvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0dQSU9fSTJDTVVYX0gKKyNkZWZpbmUgX0xJTlVYX0dQSU9fSTJDTVVYX0gKKworLyogTVVYIGhhcyBubyBzcGVjaWZpYyBpZGxlIG1vZGUgKi8KKyNkZWZpbmUgR1BJT19JMkNNVVhfTk9fSURMRQkoKHVuc2lnbmVkKS0xKQorCisvKioKKyAqIHN0cnVjdCBncGlvX2kyY211eF9wbGF0Zm9ybV9kYXRhIC0gUGxhdGZvcm0tZGVwZW5kZW50IGRhdGEgZm9yIGdwaW8taTJjbXV4CisgKiBAcGFyZW50OiBQYXJlbnQgSTJDIGJ1cyBhZGFwdGVyIG51bWJlcgorICogQGJhc2VfbnI6IEJhc2UgSTJDIGJ1cyBudW1iZXIgdG8gbnVtYmVyIGFkYXB0ZXJzIGZyb20gb3IgemVybyBmb3IgZHluYW1pYworICogQHZhbHVlczogQXJyYXkgb2YgYml0bWFza3Mgb2YgR1BJTyBzZXR0aW5ncyAobG93L2hpZ2gpIGZvciBlYWNoCisgKglwb3NpdGlvbgorICogQG5fdmFsdWVzOiBOdW1iZXIgb2YgbXVsdGlwbGV4ZXIgcG9zaXRpb25zIChidXNzZXMgdG8gaW5zdGFudGlhdGUpCisgKiBAZ3Bpb3M6IEFycmF5IG9mIEdQSU8gbnVtYmVycyB1c2VkIHRvIGNvbnRyb2wgTVVYCisgKiBAbl9ncGlvczogTnVtYmVyIG9mIEdQSU9zIHVzZWQgdG8gY29udHJvbCBNVVgKKyAqIEBpZGxlOiBCaXRtYXNrIHRvIHdyaXRlIHRvIE1VWCB3aGVuIGlkbGUgb3IgR1BJT19JMkNNVVhfTk9fSURMRSBpZiBub3QgdXNlZAorICovCitzdHJ1Y3QgZ3Bpb19pMmNtdXhfcGxhdGZvcm1fZGF0YSB7CisJaW50IHBhcmVudDsKKwlpbnQgYmFzZV9ucjsKKwljb25zdCB1bnNpZ25lZCAqdmFsdWVzOworCWludCBuX3ZhbHVlczsKKwljb25zdCB1bnNpZ25lZCAqZ3Bpb3M7CisJaW50IG5fZ3Bpb3M7CisJdW5zaWduZWQgaWRsZTsKK307CisKKyNlbmRpZiAvKiBfTElOVVhfR1BJT19JMkNNVVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ncGlvLmggYi9pbmNsdWRlL2xpbnV4L2dwaW8uaAppbmRleCBlNDFmN2RkLi5mNzlkNjdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dwaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2dwaW8uaApAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKIHN0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgZ3BpbzsKIHN0cnVjdCBncGlvX2NoaXA7CiAKIC8qCkBAIC0yOSw3ICszMCwxOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgZ3Bpb19yZXF1ZXN0X29uZSh1bnNpZ25lZCBncGlvLAorCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIGdwaW9fcmVxdWVzdF9hcnJheShzdHJ1Y3QgZ3BpbyAqYXJyYXksIHNpemVfdCBudW0pCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CkBAIC00MiwxMiArNTQsMjAgQEAKIAlXQVJOX09OKDEpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQorc3RhdGljIGlubGluZSB2b2lkIGdwaW9fZnJlZV9hcnJheShzdHJ1Y3QgZ3BpbyAqYXJyYXksIHNpemVfdCBudW0pCit7CisJbWlnaHRfc2xlZXAoKTsKKworCS8qIEdQSU8gY2FuIG5ldmVyIGhhdmUgYmVlbiByZXF1ZXN0ZWQgKi8KKwlXQVJOX09OKDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewogCXJldHVybiAtRU5PU1lTOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWQuaCBiL2luY2x1ZGUvbGludXgvaGlkLmgKaW5kZXggMjBiOTgwMS4uZDkxYzI1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZC5oCkBAIC00MDIsNyArNDAyLDcgQEAKIAlfX3UxNiBkcGFkOwkJCS8qIGRwYWQgaW5wdXQgY29kZSAqLwogfTsKIAotI2RlZmluZSBISURfTUFYX0ZJRUxEUyA2NAorI2RlZmluZSBISURfTUFYX0ZJRUxEUyAxMjgKIAogc3RydWN0IGhpZF9yZXBvcnQgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTU5Myw2ICs1OTMsNyBAQAogICogQHJlcG9ydF9maXh1cDogY2FsbGVkIGJlZm9yZSByZXBvcnQgZGVzY3JpcHRvciBwYXJzaW5nIChOVUxMIG1lYW5zIG5vcCkKICAqIEBpbnB1dF9tYXBwaW5nOiBpbnZva2VkIG9uIGlucHV0IHJlZ2lzdGVyaW5nIGJlZm9yZSBtYXBwaW5nIGFuIHVzYWdlCiAgKiBAaW5wdXRfbWFwcGVkOiBpbnZva2VkIG9uIGlucHV0IHJlZ2lzdGVyaW5nIGFmdGVyIG1hcHBpbmcgYW4gdXNhZ2UKKyAqIEBmZWF0dXJlX21hcHBpbmc6IGludm9rZWQgb24gZmVhdHVyZSByZWdpc3RlcmluZwogICogQHN1c3BlbmQ6IGludm9rZWQgb24gc3VzcGVuZCAoTlVMTCBtZWFucyBub3ApCiAgKiBAcmVzdW1lOiBpbnZva2VkIG9uIHJlc3VtZSBpZiBkZXZpY2Ugd2FzIG5vdCByZXNldCAoTlVMTCBtZWFucyBub3ApCiAgKiBAcmVzZXRfcmVzdW1lOiBpbnZva2VkIG9uIHJlc3VtZSBpZiBkZXZpY2Ugd2FzIHJlc2V0IChOVUxMIG1lYW5zIG5vcCkKQEAgLTYzNiw2ICs2MzcsOSBAQAogCWludCAoKmlucHV0X21hcHBlZCkoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCiAJCQlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCiAJCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpOworCXZvaWQgKCpmZWF0dXJlX21hcHBpbmcpKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAorCQkJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UpOwogI2lmZGVmIENPTkZJR19QTQogCWludCAoKnN1c3BlbmQpKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSk7CiAJaW50ICgqcmVzdW1lKShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy5oIGIvaW5jbHVkZS9saW51eC9pMmMuaAppbmRleCA1NmNmZTIzLi45MDM1NzZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLmgKQEAgLTU3LDkgKzU3LDEwIEBACiAgKiB0cmFuc21pdCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIG1lc3NhZ2VzIHdpdGhvdXQgaW50ZXJydXB0aW9uLgogICogQGNvdW50IG11c3QgYmUgYmUgbGVzcyB0aGFuIDY0ayBzaW5jZSBtc2cubGVuIGlzIHUxNi4KICAqLwotZXh0ZXJuIGludCBpMmNfbWFzdGVyX3NlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqYnVmLAorZXh0ZXJuIGludCBpMmNfbWFzdGVyX3NlbmQoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqYnVmLAogCQkJICAgaW50IGNvdW50KTsKLWV4dGVybiBpbnQgaTJjX21hc3Rlcl9yZWN2KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK2V4dGVybiBpbnQgaTJjX21hc3Rlcl9yZWN2KGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNoYXIgKmJ1ZiwKKwkJCSAgIGludCBjb3VudCk7CiAKIC8qIFRyYW5zZmVyIG51bSBtZXNzYWdlcy4KICAqLwpAQCAtNzgsMjMgKzc5LDI1IEBACiAvKiBOb3cgZm9sbG93IHRoZSAnbmljZScgYWNjZXNzIHJvdXRpbmVzLiBUaGVzZSBhbHNvIGRvY3VtZW50IHRoZSBjYWxsaW5nCiAgICBjb252ZW50aW9ucyBvZiBpMmNfc21idXNfeGZlci4gKi8KIAotZXh0ZXJuIHMzMiBpMmNfc21idXNfcmVhZF9ieXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCB2YWx1ZSk7Ci1leHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kKTsKLWV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorZXh0ZXJuIHMzMiBpMmNfc21idXNfcmVhZF9ieXRlKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfYnl0ZShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCB2YWx1ZSk7CitleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICB1OCBjb21tYW5kKTsKK2V4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJCSAgICAgdTggY29tbWFuZCwgdTggdmFsdWUpOwotZXh0ZXJuIHMzMiBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCk7Ci1leHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKK2V4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJICAgIHU4IGNvbW1hbmQpOworZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkJICAgICB1OCBjb21tYW5kLCB1MTYgdmFsdWUpOwogLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMgKi8KLWV4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorZXh0ZXJuIHMzMiBpMmNfc21idXNfcmVhZF9ibG9ja19kYXRhKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkJICAgICB1OCBjb21tYW5kLCB1OCAqdmFsdWVzKTsKLWV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKK2V4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCQkgICAgICB1OCBjb21tYW5kLCB1OCBsZW5ndGgsIGNvbnN0IHU4ICp2YWx1ZXMpOwogLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMgKi8KLWV4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKK2V4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCQkJIHU4IGNvbW1hbmQsIHU4IGxlbmd0aCwgdTggKnZhbHVlcyk7Ci1leHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCQkJICB1OCBjb21tYW5kLCB1OCBsZW5ndGgsCiAJCQkJCSAgY29uc3QgdTggKnZhbHVlcyk7CiAjZW5kaWYgLyogSTJDICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2FsZy5oIGIvaW5jbHVkZS9saW51eC9pZl9hbGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjlhY2NlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pZl9hbGcuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogaWZfYWxnOiBVc2VyLXNwYWNlIGFsZ29yaXRobSBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX0lGX0FMR19ICisjZGVmaW5lIF9MSU5VWF9JRl9BTEdfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHNvY2thZGRyX2FsZyB7CisJX191MTYJc2FsZ19mYW1pbHk7CisJX191OAlzYWxnX3R5cGVbMTRdOworCV9fdTMyCXNhbGdfZmVhdDsKKwlfX3UzMglzYWxnX21hc2s7CisJX191OAlzYWxnX25hbWVbNjRdOworfTsKKworc3RydWN0IGFmX2FsZ19pdiB7CisJX191MzIJaXZsZW47CisJX191OAlpdlswXTsKK307CisKKy8qIFNvY2tldCBvcHRpb25zICovCisjZGVmaW5lIEFMR19TRVRfS0VZCQkJMQorI2RlZmluZSBBTEdfU0VUX0lWCQkJMgorI2RlZmluZSBBTEdfU0VUX09QCQkJMworCisvKiBPcGVyYXRpb25zICovCisjZGVmaW5lIEFMR19PUF9ERUNSWVBUCQkJMAorI2RlZmluZSBBTEdfT1BfRU5DUllQVAkJCTEKKworI2VuZGlmCS8qIF9MSU5VWF9JRl9BTEdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmgKaW5kZXggZjdlNzNjMy4uZGQzZjIwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oCkBAIC0xMDMsNyArMTAzLDcgQEAKIAogZXh0ZXJuIHZvaWQgYnJpb2N0bF9zZXQoaW50ICgqaW9jdGxfaG9vaykoc3RydWN0IG5ldCAqLCB1bnNpZ25lZCBpbnQsIHZvaWQgX191c2VyICopKTsKIAotdHlwZWRlZiBpbnQgKCpicl9zaG91bGRfcm91dGVfaG9va190KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3R5cGVkZWYgaW50IGJyX3Nob3VsZF9yb3V0ZV9ob29rX3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gYnJfc2hvdWxkX3JvdXRlX2hvb2tfdCBfX3JjdSAqYnJfc2hvdWxkX3JvdXRlX2hvb2s7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IGM0ZTlkOTEuLmU0MjgzODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTgwMiw2ICs4MDIsNyBAQAogI2RlZmluZSBTV19DQU1FUkFfTEVOU19DT1ZFUgkweDA5ICAvKiBzZXQgPSBsZW5zIGNvdmVyZWQgKi8KICNkZWZpbmUgU1dfS0VZUEFEX1NMSURFCQkweDBhICAvKiBzZXQgPSBrZXlwYWQgc2xpZGUgb3V0ICovCiAjZGVmaW5lIFNXX0ZST05UX1BST1hJTUlUWQkweDBiICAvKiBzZXQgPSBmcm9udCBwcm94aW1pdHkgc2Vuc29yIGFjdGl2ZSAqLworI2RlZmluZSBTV19ST1RBVEVfTE9DSwkJMHgwYyAgLyogc2V0ID0gcm90YXRlIGxvY2tlZC9kaXNhYmxlZCAqLwogI2RlZmluZSBTV19NQVgJCQkweDBmCiAjZGVmaW5lIFNXX0NOVAkJCShTV19NQVgrMSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC9hczUwMTEuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQvYXM1MDExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFmZmQwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQvYXM1MDExLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfQVM1MDExX0gKKyNkZWZpbmUgX0FTNTAxMV9ICisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIDIwMTEgRmFiaWVuIE1hcnRlYXUgPGZhYmllbi5tYXJ0ZWF1QGFybWFkZXVzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKK3N0cnVjdCBhczUwMTFfcGxhdGZvcm1fZGF0YSB7CisJdW5zaWduZWQgaW50IGJ1dHRvbl9ncGlvOworCXVuc2lnbmVkIGludCBheGlzX2lycTsgLyogaXJxIG51bWJlciAqLworCXVuc2lnbmVkIGxvbmcgYXhpc19pcnFmbGFnczsKKwljaGFyIHhwLCB4bjsgLyogdGhyZXNob2xkIGZvciB4IGF4aXMgKi8KKwljaGFyIHlwLCB5bjsgLyogdGhyZXNob2xkIGZvciB5IGF4aXMgKi8KK307CisKKyNlbmRpZiAvKiBfQVM1MDExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZWwtZ3R0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVsLWd0dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDE5YWIyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvaW50ZWwtZ3R0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKgotICogQ29tbW9uIEludGVsIEFHUEdBUlQgYW5kIEdUVCBkZWZpbml0aW9ucy4KLSAqLwotI2lmbmRlZiBfSU5URUxfR1RUX0gKLSNkZWZpbmUgX0lOVEVMX0dUVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9hZ3BfYmFja2VuZC5oPgotCi0vKiBUaGlzIGlzIGZvciBJbnRlbCBvbmx5IEdUVCBjb250cm9scy4KLSAqCi0gKiBTYW5keWJyaWRnZTogQUdQX1VTRVJfQ0FDSEVEX01FTU9SWSBkZWZhdWx0IHRvIExMQyBvbmx5Ci0gKi8KLQotI2RlZmluZSBBR1BfVVNFUl9DQUNIRURfTUVNT1JZX0xMQ19NTEMgKEFHUF9VU0VSX1RZUEVTICsgMikKLSNkZWZpbmUgQUdQX1VTRVJfVU5DQUNIRURfTUVNT1JZIChBR1BfVVNFUl9UWVBFUyArIDQpCi0KLS8qIGZsYWcgZm9yIEdGRFQgdHlwZSAqLwotI2RlZmluZSBBR1BfVVNFUl9DQUNIRURfTUVNT1JZX0dGRFQgKDEgPDwgMykKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZDIuaCBiL2luY2x1ZGUvbGludXgvamJkMi5oCmluZGV4IDJhZTg2YWEuLjI3ZTc5YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkMi5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkMi5oCkBAIC05NCw3ICs5NCw3IEBACiAgKgogICogVGhpcyBpcyBhbiBvcGFxdWUgZGF0YXR5cGUuCiAgKiovCi10eXBlZGVmIHN0cnVjdCBoYW5kbGVfcwkJaGFuZGxlX3Q7CS8qIEF0b21pYyBvcGVyYXRpb24gdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3QgamJkMl9qb3VybmFsX2hhbmRsZSBoYW5kbGVfdDsJLyogQXRvbWljIG9wZXJhdGlvbiB0eXBlICovCiAKIAogLyoqCkBAIC00MTYsNyArNDE2LDcgQEAKICAqIGluIHNvIGl0IGNhbiBiZSBmaXhlZCBsYXRlci4KICAqLwogCi1zdHJ1Y3QgaGFuZGxlX3MKK3N0cnVjdCBqYmQyX2pvdXJuYWxfaGFuZGxlCiB7CiAJLyogV2hpY2ggY29tcG91bmQgdHJhbnNhY3Rpb24gaXMgdGhpcyB1cGRhdGUgYSBwYXJ0IG9mPyAqLwogCXRyYW5zYWN0aW9uX3QJCSpoX3RyYW5zYWN0aW9uOwpAQCAtMTE1OCw2ICsxMTU4LDIyIEBACiAJa21lbV9jYWNoZV9mcmVlKGpiZDJfaGFuZGxlX2NhY2hlLCBoYW5kbGUpOwogfQogCisvKgorICogamJkMl9pbm9kZSBtYW5hZ2VtZW50IChvcHRpb25hbCwgZm9yIHRob3NlIGZpbGUgc3lzdGVtcyB0aGF0IHdhbnQgdG8gdXNlCisgKiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgamJkMl9pbm9kZSBzdHJ1Y3R1cmVzKQorICovCitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmpiZDJfaW5vZGVfY2FjaGU7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGpiZDJfaW5vZGUgKmpiZDJfYWxsb2NfaW5vZGUoZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGpiZDJfaW5vZGVfY2FjaGUsIGdmcF9mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBqYmQyX2ZyZWVfaW5vZGUoc3RydWN0IGpiZDJfaW5vZGUgKmppbm9kZSkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUoamJkMl9pbm9kZV9jYWNoZSwgamlub2RlKTsKK30KKwogLyogUHJpbWFyeSByZXZva2Ugc3VwcG9ydCAqLwogI2RlZmluZSBKT1VSTkFMX1JFVk9LRV9ERUZBVUxUX0hBU0ggMjU2CiBleHRlcm4gaW50CSAgIGpiZDJfam91cm5hbF9pbml0X3Jldm9rZShqb3VybmFsX3QgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IGQwZmJjMDQuLjU3ZGFjNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMTQzLDkgKzE0MywyMiBAQAogCiAjZGVmaW5lIG1pZ2h0X3NsZWVwX2lmKGNvbmQpIGRvIHsgaWYgKGNvbmQpIG1pZ2h0X3NsZWVwKCk7IH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgYWJzKHgpICh7CQkJCVwKLQkJbG9uZyBfX3ggPSAoeCk7CQkJXAotCQkoX194IDwgMCkgPyAtX194IDogX194OwkJXAorLyoKKyAqIGFicygpIGhhbmRsZXMgdW5zaWduZWQgYW5kIHNpZ25lZCBsb25ncywgaW50cywgc2hvcnRzIGFuZCBjaGFycy4gIEZvciBhbGwKKyAqIGlucHV0IHR5cGVzIGFicygpIHJldHVybnMgYSBzaWduZWQgbG9uZy4KKyAqIGFicygpIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgNjQtYml0IHR5cGVzIChzNjQsIHU2NCwgbG9uZyBsb25nKSAtIHVzZSBhYnM2NCgpCisgKiBmb3IgdGhvc2UuCisgKi8KKyNkZWZpbmUgYWJzKHgpICh7CQkJCQkJXAorCQlsb25nIHJldDsJCQkJCVwKKwkJaWYgKHNpemVvZih4KSA9PSBzaXplb2YobG9uZykpIHsJCVwKKwkJCWxvbmcgX194ID0gKHgpOwkJCQlcCisJCQlyZXQgPSAoX194IDwgMCkgPyAtX194IDogX194OwkJXAorCQl9IGVsc2UgewkJCQkJXAorCQkJaW50IF9feCA9ICh4KTsJCQkJXAorCQkJcmV0ID0gKF9feCA8IDApID8gLV9feCA6IF9feDsJCVwKKwkJfQkJCQkJCVwKKwkJcmV0OwkJCQkJCVwKIAl9KQogCiAjZGVmaW5lIGFiczY0KHgpICh7CQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21zZ19kdW1wLmggYi9pbmNsdWRlL2xpbnV4L2ttc2dfZHVtcC5oCmluZGV4IDI0YjQ0MTQuLjJhMGQ3ZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21zZ19kdW1wLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbXNnX2R1bXAuaApAQCAtMTgsNiArMTgsMTAgQEAKIAlLTVNHX0RVTVBfT09QUywKIAlLTVNHX0RVTVBfUEFOSUMsCiAJS01TR19EVU1QX0tFWEVDLAorCUtNU0dfRFVNUF9SRVNUQVJULAorCUtNU0dfRFVNUF9IQUxULAorCUtNU0dfRFVNUF9QT1dFUk9GRiwKKwlLTVNHX0RVTVBfRU1FUkcsCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3JlZi5oIGIvaW5jbHVkZS9saW51eC9rcmVmLmgKaW5kZXggNmNjMzhmYy4uZDRhNjJhYjJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tyZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tyZWYuaApAQCAtMjQsNSArMjQsNyBAQAogdm9pZCBrcmVmX2luaXQoc3RydWN0IGtyZWYgKmtyZWYpOwogdm9pZCBrcmVmX2dldChzdHJ1Y3Qga3JlZiAqa3JlZik7CiBpbnQga3JlZl9wdXQoc3RydWN0IGtyZWYgKmtyZWYsIHZvaWQgKCpyZWxlYXNlKSAoc3RydWN0IGtyZWYgKmtyZWYpKTsKK2ludCBrcmVmX3N1YihzdHJ1Y3Qga3JlZiAqa3JlZiwgdW5zaWduZWQgaW50IGNvdW50LAorCSAgICAgdm9pZCAoKnJlbGVhc2UpIChzdHJ1Y3Qga3JlZiAqa3JlZikpOwogCiAjZW5kaWYgLyogX0tSRUZfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtLmggYi9pbmNsdWRlL2xpbnV4L2t2bS5oCmluZGV4IDkxOWFlNTMuLmVhMmRjMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtLmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm0uaApAQCAtNTQwLDYgKzU0MCw3IEBACiAjZW5kaWYKICNkZWZpbmUgS1ZNX0NBUF9QUENfR0VUX1BWSU5GTyA1NwogI2RlZmluZSBLVk1fQ0FQX1BQQ19JUlFfTEVWRUwgNTgKKyNkZWZpbmUgS1ZNX0NBUF9BU1lOQ19QRiA1OQogCiAjaWZkZWYgS1ZNX0NBUF9JUlFfUk9VVElORwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYTA1NTc0Mi4uYjUwMjFkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgogI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgpAQCAtNDAsNiArNDIsNyBAQAogI2RlZmluZSBLVk1fUkVRX0tJQ0sgICAgICAgICAgICAgICA5CiAjZGVmaW5lIEtWTV9SRVFfREVBQ1RJVkFURV9GUFUgICAgMTAKICNkZWZpbmUgS1ZNX1JFUV9FVkVOVCAgICAgICAgICAgICAxMQorI2RlZmluZSBLVk1fUkVRX0FQRl9IQUxUICAgICAgICAgIDEyCiAKICNkZWZpbmUgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lECTAKIApAQCAtNzQsNiArNzcsMjcgQEAKIGludCBrdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KHN0cnVjdCBrdm0gKmt2bSwgZW51bSBrdm1fYnVzIGJ1c19pZHgsCiAJCQkgICAgICBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KTsKIAorI2lmZGVmIENPTkZJR19LVk1fQVNZTkNfUEYKK3N0cnVjdCBrdm1fYXN5bmNfcGYgeworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlndmFfdCBndmE7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXN0cnVjdCBrdm1fYXJjaF9hc3luY19wZiBhcmNoOworCXN0cnVjdCBwYWdlICpwYWdlOworCWJvb2wgZG9uZTsKK307CisKK3ZvaWQga3ZtX2NsZWFyX2FzeW5jX3BmX2NvbXBsZXRpb25fcXVldWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK3ZvaWQga3ZtX2NoZWNrX2FzeW5jX3BmX2NvbXBsZXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBrdm1fc2V0dXBfYXN5bmNfcGYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIGdmbl90IGdmbiwKKwkJICAgICAgIHN0cnVjdCBrdm1fYXJjaF9hc3luY19wZiAqYXJjaCk7CitpbnQga3ZtX2FzeW5jX3BmX3dha2V1cF9hbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKyNlbmRpZgorCiBzdHJ1Y3Qga3ZtX3ZjcHUgewogCXN0cnVjdCBrdm0gKmt2bTsKICNpZmRlZiBDT05GSUdfUFJFRU1QVF9OT1RJRklFUlMKQEAgLTEwNCw2ICsxMjgsMTUgQEAKIAlncGFfdCBtbWlvX3BoeXNfYWRkcjsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0tWTV9BU1lOQ19QRgorCXN0cnVjdCB7CisJCXUzMiBxdWV1ZWQ7CisJCXN0cnVjdCBsaXN0X2hlYWQgcXVldWU7CisJCXN0cnVjdCBsaXN0X2hlYWQgZG9uZTsKKwkJc3BpbmxvY2tfdCBsb2NrOworCX0gYXN5bmNfcGY7CisjZW5kaWYKKwogCXN0cnVjdCBrdm1fdmNwdV9hcmNoIGFyY2g7CiB9OwogCkBAIC0xMTMsMTYgKzE0NiwxOSBAQAogICovCiAjZGVmaW5lIEtWTV9NRU1fTUFYX05SX1BBR0VTICgoMVVMIDw8IDMxKSAtIDEpCiAKK3N0cnVjdCBrdm1fbHBhZ2VfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBybWFwX3BkZTsKKwlpbnQgd3JpdGVfY291bnQ7Cit9OworCiBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90IHsKIAlnZm5fdCBiYXNlX2dmbjsKIAl1bnNpZ25lZCBsb25nIG5wYWdlczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgKnJtYXA7CiAJdW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwOwotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGxvbmcgcm1hcF9wZGU7Ci0JCWludCB3cml0ZV9jb3VudDsKLQl9ICpscGFnZV9pbmZvW0tWTV9OUl9QQUdFX1NJWkVTIC0gMV07CisJdW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwX2hlYWQ7CisJc3RydWN0IGt2bV9scGFnZV9pbmZvICpscGFnZV9pbmZvW0tWTV9OUl9QQUdFX1NJWkVTIC0gMV07CiAJdW5zaWduZWQgbG9uZyB1c2Vyc3BhY2VfYWRkcjsKIAlpbnQgdXNlcl9hbGxvYzsKIAlpbnQgaWQ7CkBAIC0xNjksNiArMjA1LDcgQEAKIAogc3RydWN0IGt2bV9tZW1zbG90cyB7CiAJaW50IG5tZW1zbG90czsKKwl1NjQgZ2VuZXJhdGlvbjsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90IG1lbXNsb3RzW0tWTV9NRU1PUllfU0xPVFMgKwogCQkJCQlLVk1fUFJJVkFURV9NRU1fU0xPVFNdOwogfTsKQEAgLTIwNiw2ICsyNDMsMTAgQEAKIAogCXN0cnVjdCBtdXRleCBpcnFfbG9jazsKICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUAorCS8qCisJICogVXBkYXRlIHNpZGUgaXMgcHJvdGVjdGVkIGJ5IGlycV9sb2NrIGFuZCwKKwkgKiBpZiBjb25maWd1cmVkLCBpcnFmZHMubG9jay4KKwkgKi8KIAlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3RhYmxlIF9fcmN1ICppcnFfcm91dGluZzsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBtYXNrX25vdGlmaWVyX2xpc3Q7CiAJc3RydWN0IGhsaXN0X2hlYWQgaXJxX2Fja19ub3RpZmllcl9saXN0OwpAQCAtMjE2LDYgKzI1Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBtbXVfbm90aWZpZXJfc2VxOwogCWxvbmcgbW11X25vdGlmaWVyX2NvdW50OwogI2VuZGlmCisJbG9uZyB0bGJzX2RpcnR5OwogfTsKIAogLyogVGhlIGd1ZXN0IGRpZCBzb21ldGhpbmcgd2UgZG9uJ3Qgc3VwcG9ydC4gKi8KQEAgLTMwMiw3ICszNDQsMTEgQEAKIAogcGZuX3QgaHZhX3RvX3Bmbl9hdG9taWMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIpOwogcGZuX3QgZ2ZuX3RvX3Bmbl9hdG9taWMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pOworcGZuX3QgZ2ZuX3RvX3Bmbl9hc3luYyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgYm9vbCAqYXN5bmMsCisJCSAgICAgICBib29sIHdyaXRlX2ZhdWx0LCBib29sICp3cml0YWJsZSk7CiBwZm5fdCBnZm5fdG9fcGZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKK3Bmbl90IGdmbl90b19wZm5fcHJvdChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgYm9vbCB3cml0ZV9mYXVsdCwKKwkJICAgICAgYm9vbCAqd3JpdGFibGUpOwogcGZuX3QgZ2ZuX3RvX3Bmbl9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwKIAkJCSBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4pOwogaW50IG1lbXNsb3RfaWQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pOwpAQCAtMzIxLDE4ICszNjcsMjUgQEAKIAkJCSBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKIGludCBrdm1fd3JpdGVfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGNvbnN0IHZvaWQgKmRhdGEsCiAJCSAgICB1bnNpZ25lZCBsb25nIGxlbik7CitpbnQga3ZtX3dyaXRlX2d1ZXN0X2NhY2hlZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMsCisJCQkgICB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGxlbik7CitpbnQga3ZtX2dmbl90b19odmFfY2FjaGVfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMsCisJCQkgICAgICBncGFfdCBncGEpOwogaW50IGt2bV9jbGVhcl9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKIGludCBrdm1fY2xlYXJfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgbGVuKTsKIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmdmbl90b19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKIGludCBrdm1faXNfdmlzaWJsZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pOwogdW5zaWduZWQgbG9uZyBrdm1faG9zdF9wYWdlX3NpemUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pOwogdm9pZCBtYXJrX3BhZ2VfZGlydHkoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pOwordm9pZCBtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCisJCQkgICAgIGdmbl90IGdmbik7CiAKIHZvaWQga3ZtX3ZjcHVfYmxvY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3ZjcHVfb25fc3BpbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fcmVzY2hlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fbG9hZF9ndWVzdF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3B1dF9ndWVzdF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwogdm9pZCBrdm1fZmx1c2hfcmVtb3RlX3RsYnMoc3RydWN0IGt2bSAqa3ZtKTsKIHZvaWQga3ZtX3JlbG9hZF9yZW1vdGVfbW11cyhzdHJ1Y3Qga3ZtICprdm0pOwogCkBAIC0zOTgsNyArNDUxLDE5IEBACiAKIHZvaWQga3ZtX2ZyZWVfcGh5c21lbShzdHJ1Y3Qga3ZtICprdm0pOwogCi1zdHJ1Y3QgIGt2bSAqa3ZtX2FyY2hfY3JlYXRlX3ZtKHZvaWQpOworI2lmbmRlZiBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0MKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZCkKK3sKKwlyZXR1cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bSksIEdGUF9LRVJORUwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2FyY2hfZnJlZV92bShzdHJ1Y3Qga3ZtICprdm0pCit7CisJa2ZyZWUoa3ZtKTsKK30KKyNlbmRpZgorCitpbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0pOwogdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSk7CiB2b2lkIGt2bV9mcmVlX2FsbF9hc3NpZ25lZF9kZXZpY2VzKHN0cnVjdCBrdm0gKmt2bSk7CiB2b2lkIGt2bV9hcmNoX3N5bmNfZXZlbnRzKHN0cnVjdCBrdm0gKmt2bSk7CkBAIC00MTQsMTYgKzQ3OSw4IEBACiAJdm9pZCAoKmlycV9hY2tlZCkoc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKTsKIH07CiAKLSNkZWZpbmUgS1ZNX0FTU0lHTkVEX01TSVhfUEVORElORwkJMHgxCi1zdHJ1Y3Qga3ZtX2d1ZXN0X21zaXhfZW50cnkgewotCXUzMiB2ZWN0b3I7Ci0JdTE2IGVudHJ5OwotCXUxNiBmbGFnczsKLX07Ci0KIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCB7CiAJc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyIGFja19ub3RpZmllcjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW50ZXJydXB0X3dvcms7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWludCBhc3NpZ25lZF9kZXZfaWQ7CiAJaW50IGhvc3Rfc2VnbnI7CkBAIC00MzQsMTMgKzQ5MSwxNCBAQAogCWJvb2wgaG9zdF9pcnFfZGlzYWJsZWQ7CiAJc3RydWN0IG1zaXhfZW50cnkgKmhvc3RfbXNpeF9lbnRyaWVzOwogCWludCBndWVzdF9pcnE7Ci0Jc3RydWN0IGt2bV9ndWVzdF9tc2l4X2VudHJ5ICpndWVzdF9tc2l4X2VudHJpZXM7CisJc3RydWN0IG1zaXhfZW50cnkgKmd1ZXN0X21zaXhfZW50cmllczsKIAl1bnNpZ25lZCBsb25nIGlycV9yZXF1ZXN0ZWRfdHlwZTsKIAlpbnQgaXJxX3NvdXJjZV9pZDsKIAlpbnQgZmxhZ3M7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3Qga3ZtICprdm07Ci0Jc3BpbmxvY2tfdCBhc3NpZ25lZF9kZXZfbG9jazsKKwlzcGlubG9ja190IGludHhfbG9jazsKKwljaGFyIGlycV9uYW1lWzMyXTsKIH07CiAKIHN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgewpAQCAtNDYyLDYgKzUyMCw4IEBACiAJCQkJICAgdW5zaWduZWQgbG9uZyAqZGVsaXZlcl9iaXRtYXNrKTsKICNlbmRpZgogaW50IGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIHUzMiBpcnEsIGludCBsZXZlbCk7CitpbnQga3ZtX3NldF9tc2koc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmlycV9lbnRyeSwgc3RydWN0IGt2bSAqa3ZtLAorCQlpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsKTsKIHZvaWQga3ZtX25vdGlmeV9hY2tlZF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpcnFjaGlwLCB1bnNpZ25lZCBwaW4pOwogdm9pZCBrdm1fcmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJICAgc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKTsKQEAgLTYwMywxNyArNjYzLDI4IEBACiB2b2lkIGt2bV9ldmVudGZkX2luaXQoc3RydWN0IGt2bSAqa3ZtKTsKIGludCBrdm1faXJxZmQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgZmQsIGludCBnc2ksIGludCBmbGFncyk7CiB2b2lkIGt2bV9pcnFmZF9yZWxlYXNlKHN0cnVjdCBrdm0gKmt2bSk7Cit2b2lkIGt2bV9pcnFfcm91dGluZ191cGRhdGUoc3RydWN0IGt2bSAqLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3RhYmxlICopOwogaW50IGt2bV9pb2V2ZW50ZmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lvZXZlbnRmZCAqYXJncyk7CiAKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZXZlbnRmZF9pbml0KHN0cnVjdCBrdm0gKmt2bSkge30KKwogc3RhdGljIGlubGluZSBpbnQga3ZtX2lycWZkKHN0cnVjdCBrdm0gKmt2bSwgaW50IGZkLCBpbnQgZ3NpLCBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1faXJxZmRfcmVsZWFzZShzdHJ1Y3Qga3ZtICprdm0pIHt9CisKKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUAorc3RhdGljIGlubGluZSB2b2lkIGt2bV9pcnFfcm91dGluZ191cGRhdGUoc3RydWN0IGt2bSAqa3ZtLAorCQkJCQkgIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfdGFibGUgKmlycV9ydCkKK3sKKwlyY3VfYXNzaWduX3BvaW50ZXIoa3ZtLT5pcnFfcm91dGluZywgaXJxX3J0KTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIGludCBrdm1faW9ldmVudGZkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb2V2ZW50ZmQgKmFyZ3MpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9rdm1fdHlwZXMuaAppbmRleCA3YWMwZDRlLi5mYTdjYzcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtX3R5cGVzLmgKQEAgLTY3LDQgKzY3LDExIEBACiAJdTMyIGRlc3RfaWQ7CiB9OwogCitzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSB7CisJdTY0IGdlbmVyYXRpb247CisJZ3BhX3QgZ3BhOworCXVuc2lnbmVkIGxvbmcgaHZhOworCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7Cit9OworCiAjZW5kaWYgLyogX19LVk1fVFlQRVNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlZHMtbHA1NTIxLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMtbHA1NTIxLmgKaW5kZXggMzgzNjhkNy4uZmQ1NDhkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sZWRzLWxwNTUyMS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGVkcy1scDU1MjEuaApAQCAtNDIsNiArNDIsNyBAQAogCWludAkoKnNldHVwX3Jlc291cmNlcykodm9pZCk7CiAJdm9pZAkoKnJlbGVhc2VfcmVzb3VyY2VzKSh2b2lkKTsKIAl2b2lkCSgqZW5hYmxlKShib29sIHN0YXRlKTsKKwljb25zdCBjaGFyICpsYWJlbDsKIH07CiAKICNlbmRpZiAvKiBfX0xJTlVYX0xQNTUyMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlZHMtbHA1NTIzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMtbHA1NTIzLmgKaW5kZXggNzk2NzQ3Ni4uMjY5NDI4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sZWRzLWxwNTUyMy5oCisrKyBiL2luY2x1ZGUvbGludXgvbGVkcy1scDU1MjMuaApAQCAtNDIsNiArNDIsNyBAQAogCWludAkoKnNldHVwX3Jlc291cmNlcykodm9pZCk7CiAJdm9pZAkoKnJlbGVhc2VfcmVzb3VyY2VzKSh2b2lkKTsKIAl2b2lkCSgqZW5hYmxlKShib29sIHN0YXRlKTsKKwljb25zdAljaGFyICpsYWJlbDsKIH07CiAKICNlbmRpZiAvKiBfX0xJTlVYX0xQNTUyM19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2RlYnVnLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2RlYnVnLmgKaW5kZXggMzRiMmI3Zi4uMjU3ZDM3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZC9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2QvZGVidWcuaApAQCAtNDQsMTQgKzQ0LDQgQEAKICNkZWZpbmUgTkxNREJHX1hEUgkJMHgwMTAwCiAjZGVmaW5lIE5MTURCR19BTEwJCTB4N2ZmZgogCi0KLS8qCi0gKiBTdXBwb3J0IGZvciBwcmludGluZyBOTE0gY29va2llcyBpbiBkcHJpbnRrKCkKLSAqLwotI2lmZGVmIFJQQ19ERUJVRwotc3RydWN0IG5sbV9jb29raWU7Ci0vKiBDYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgQktMIGhlbGQgKGl0IHVzZXMgYSBzdGF0aWMgYnVmZmVyKSAqLwotZXh0ZXJuIGNvbnN0IGNoYXIgKm5sbWRiZ19jb29raWUyYShjb25zdCBzdHJ1Y3QgbmxtX2Nvb2tpZSAqKTsKLSNlbmRpZgotCiAjZW5kaWYgLyogTElOVVhfTE9DS0RfREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCmluZGV4IDJkZWUwNWUuLmZmOWFiZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmgKQEAgLTIwMiw5ICsyMDIsOSBAQAogICogTG9ja2QgY2xpZW50IGZ1bmN0aW9ucwogICovCiBzdHJ1Y3QgbmxtX3Jxc3QgKiBubG1fYWxsb2NfY2FsbChzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QpOwotdm9pZAkJICBubG1fcmVsZWFzZV9jYWxsKHN0cnVjdCBubG1fcnFzdCAqKTsKIGludAkJICBubG1fYXN5bmNfY2FsbChzdHJ1Y3QgbmxtX3Jxc3QgKiwgdTMyLCBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzICopOwogaW50CQkgIG5sbV9hc3luY19yZXBseShzdHJ1Y3QgbmxtX3Jxc3QgKiwgdTMyLCBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzICopOwordm9pZAkJICBubG1jbG50X3JlbGVhc2VfY2FsbChzdHJ1Y3QgbmxtX3Jxc3QgKik7CiBzdHJ1Y3QgbmxtX3dhaXQgKiBubG1jbG50X3ByZXBhcmVfYmxvY2soc3RydWN0IG5sbV9ob3N0ICpob3N0LCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7CiB2b2lkCQkgIG5sbWNsbnRfZmluaXNoX2Jsb2NrKHN0cnVjdCBubG1fd2FpdCAqYmxvY2spOwogaW50CQkgIG5sbWNsbnRfYmxvY2soc3RydWN0IG5sbV93YWl0ICpibG9jaywgc3RydWN0IG5sbV9ycXN0ICpyZXEsIGxvbmcgdGltZW91dCk7CkBAIC0yMjMsMTMgKzIyMywxNCBAQAogCQkJCQljb25zdCB1MzIgdmVyc2lvbiwKIAkJCQkJY29uc3QgY2hhciAqaG9zdG5hbWUsCiAJCQkJCWludCBub3Jlc3Zwb3J0KTsKK3ZvaWQJCSAgbmxtY2xudF9yZWxlYXNlX2hvc3Qoc3RydWN0IG5sbV9ob3N0ICopOwogc3RydWN0IG5sbV9ob3N0ICAqbmxtc3ZjX2xvb2t1cF9ob3N0KGNvbnN0IHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCiAJCQkJCWNvbnN0IGNoYXIgKmhvc3RuYW1lLAogCQkJCQljb25zdCBzaXplX3QgaG9zdG5hbWVfbGVuKTsKK3ZvaWQJCSAgbmxtc3ZjX3JlbGVhc2VfaG9zdChzdHJ1Y3QgbmxtX2hvc3QgKik7CiBzdHJ1Y3QgcnBjX2NsbnQgKiBubG1fYmluZF9ob3N0KHN0cnVjdCBubG1faG9zdCAqKTsKIHZvaWQJCSAgbmxtX3JlYmluZF9ob3N0KHN0cnVjdCBubG1faG9zdCAqKTsKIHN0cnVjdCBubG1faG9zdCAqIG5sbV9nZXRfaG9zdChzdHJ1Y3QgbmxtX2hvc3QgKik7Ci12b2lkCQkgIG5sbV9yZWxlYXNlX2hvc3Qoc3RydWN0IG5sbV9ob3N0ICopOwogdm9pZAkJICBubG1fc2h1dGRvd25faG9zdHModm9pZCk7CiB2b2lkCQkgIG5sbV9ob3N0X3JlYm9vdGVkKGNvbnN0IHN0cnVjdCBubG1fcmVib290ICopOwogCkBAIC0yNjcsNiArMjY4LDcgQEAKIHZvaWQJCSAgbmxtc3ZjX3RyYXZlcnNlX2Jsb2NrcyhzdHJ1Y3QgbmxtX2hvc3QgKiwgc3RydWN0IG5sbV9maWxlICosCiAJCQkJCW5sbV9ob3N0X21hdGNoX2ZuX3QgbWF0Y2gpOwogdm9pZAkJICBubG1zdmNfZ3JhbnRfcmVwbHkoc3RydWN0IG5sbV9jb29raWUgKiwgX19iZTMyKTsKK3ZvaWQJCSAgbmxtc3ZjX3JlbGVhc2VfY2FsbChzdHJ1Y3QgbmxtX3Jxc3QgKik7CiAKIC8qCiAgKiBGaWxlIGhhbmRsaW5nIGZvciB0aGUgc2VydmVyIHBlcnNvbmFsaXR5CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21iY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvbWJjYWNoZS5oCmluZGV4IDU0Y2JiYWMuLjU1MjVkMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWJjYWNoZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWJjYWNoZS5oCkBAIC0xOCw2ICsxOCwxNyBAQAogCX0gZV9pbmRleDsKIH07CiAKK3N0cnVjdCBtYl9jYWNoZSB7CisJc3RydWN0IGxpc3RfaGVhZAkJY19jYWNoZV9saXN0OworCWNvbnN0IGNoYXIJCQkqY19uYW1lOworCWF0b21pY190CQkJY19lbnRyeV9jb3VudDsKKwlpbnQJCQkJY19tYXhfZW50cmllczsKKwlpbnQJCQkJY19idWNrZXRfYml0czsKKwlzdHJ1Y3Qga21lbV9jYWNoZQkJKmNfZW50cnlfY2FjaGU7CisJc3RydWN0IGxpc3RfaGVhZAkJKmNfYmxvY2tfaGFzaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQkqY19pbmRleF9oYXNoOworfTsKKwogLyogRnVuY3Rpb25zIG9uIGNhY2hlcyAqLwogCiBzdHJ1Y3QgbWJfY2FjaGUgKm1iX2NhY2hlX2NyZWF0ZShjb25zdCBjaGFyICosIGludCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9hYjg1MDAuaCBiL2luY2x1ZGUvbGludXgvbWZkL2FiODUwMC5oCmluZGV4IGQ2M2I2MDUuLjg1Y2YyYzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL2FiODUwMC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2FiODUwMC5oCkBAIC05OSw4ICs5OSw2IEBACiAjZGVmaW5lIEFCODUwMF9OUl9JUlFTCQkJMTA0CiAjZGVmaW5lIEFCODUwMF9OVU1fSVJRX1JFR1MJCTEzCiAKLSNkZWZpbmUgQUI4NTAwX05VTV9SRUdVTEFUT1JTICAgMTUKLQogLyoqCiAgKiBzdHJ1Y3QgYWI4NTAwIC0gYWI4NTAwIGludGVybmFsIHN0cnVjdHVyZQogICogQGRldjogcGFyZW50IGRldmljZQpAQCAtMTQ1LDcgKzE0Myw4IEBACiBzdHJ1Y3QgYWI4NTAwX3BsYXRmb3JtX2RhdGEgewogCWludCBpcnFfYmFzZTsKIAl2b2lkICgqaW5pdCkgKHN0cnVjdCBhYjg1MDAgKik7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKnJlZ3VsYXRvcltBQjg1MDBfTlVNX1JFR1VMQVRPUlNdOworCWludCBudW1fcmVndWxhdG9yOworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpyZWd1bGF0b3I7CiB9OwogCiBleHRlcm4gaW50IF9fZGV2aW5pdCBhYjg1MDBfaW5pdChzdHJ1Y3QgYWI4NTAwICphYjg1MDApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvY29yZS5oIGIvaW5jbHVkZS9saW51eC9tZmQvY29yZS5oCmluZGV4IGNiOTNkODAuLjU1ODJhYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9jb3JlLmgKQEAgLTM5LDcgKzM5LDcgQEAKIAlzaXplX3QJCQlkYXRhX3NpemU7CiAKIAkvKgotCSAqIFRoaXMgcmVzb3VyY2VzIGNhbiBiZSBzcGVjaWZpZWQgcmVsYXRpZXZseSB0byB0aGUgcGFyZW50IGRldmljZS4KKwkgKiBUaGlzIHJlc291cmNlcyBjYW4gYmUgc3BlY2lmaWVkIHJlbGF0aXZlbHkgdG8gdGhlIHBhcmVudCBkZXZpY2UuCiAJICogRm9yIGFjY2Vzc2luZyBkZXZpY2UgeW91IHNob3VsZCB1c2UgcmVzb3VyY2VzIGZyb20gZGV2aWNlCiAJICovCiAJaW50CQkJbnVtX3Jlc291cmNlczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL21jMTM3ODMuaCBiL2luY2x1ZGUvbGludXgvbWZkL21jMTM3ODMuaAppbmRleCBiNGM3NDFlLi43ZDBmM2Q2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9tYzEzNzgzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvbWMxMzc4My5oCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdodCAyMDEwIFlvbmcgU2hlbiA8eW9uZy5zaGVuQGxpbmFyby5vcmc+CiAgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIFBlbmd1dHJvbml4CiAgKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgogICoKQEAgLTEyMiwzOSArMTIzLDM5IEBACiAJCXVuc2lnbmVkIGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgKnNhbXBsZSk7CiAKIAotI2RlZmluZQlNQzEzNzgzX1NXX1NXMUEJCTAKLSNkZWZpbmUJTUMxMzc4M19TV19TVzFCCQkxCi0jZGVmaW5lCU1DMTM3ODNfU1dfU1cyQQkJMgotI2RlZmluZQlNQzEzNzgzX1NXX1NXMkIJCTMKLSNkZWZpbmUJTUMxMzc4M19TV19TVzMJCTQKLSNkZWZpbmUJTUMxMzc4M19TV19QTEwJCTUKLSNkZWZpbmUJTUMxMzc4M19SRUdVX1ZBVURJTwk2Ci0jZGVmaW5lCU1DMTM3ODNfUkVHVV9WSU9ISQk3Ci0jZGVmaW5lCU1DMTM3ODNfUkVHVV9WSU9MTwk4Ci0jZGVmaW5lCU1DMTM3ODNfUkVHVV9WRElHCTkKLSNkZWZpbmUJTUMxMzc4M19SRUdVX1ZHRU4JMTAKLSNkZWZpbmUJTUMxMzc4M19SRUdVX1ZSRkRJRwkxMQotI2RlZmluZQlNQzEzNzgzX1JFR1VfVlJGUkVGCTEyCi0jZGVmaW5lCU1DMTM3ODNfUkVHVV9WUkZDUAkxMwotI2RlZmluZQlNQzEzNzgzX1JFR1VfVlNJTQkxNAotI2RlZmluZQlNQzEzNzgzX1JFR1VfVkVTSU0JMTUKLSNkZWZpbmUJTUMxMzc4M19SRUdVX1ZDQU0JMTYKLSNkZWZpbmUJTUMxMzc4M19SRUdVX1ZSRkJHCTE3Ci0jZGVmaW5lCU1DMTM3ODNfUkVHVV9WVklCCTE4Ci0jZGVmaW5lCU1DMTM3ODNfUkVHVV9WUkYxCTE5Ci0jZGVmaW5lCU1DMTM3ODNfUkVHVV9WUkYyCTIwCi0jZGVmaW5lCU1DMTM3ODNfUkVHVV9WTU1DMQkyMQotI2RlZmluZQlNQzEzNzgzX1JFR1VfVk1NQzIJMjIKLSNkZWZpbmUJTUMxMzc4M19SRUdVX0dQTzEJMjMKLSNkZWZpbmUJTUMxMzc4M19SRUdVX0dQTzIJMjQKLSNkZWZpbmUJTUMxMzc4M19SRUdVX0dQTzMJMjUKLSNkZWZpbmUJTUMxMzc4M19SRUdVX0dQTzQJMjYKLSNkZWZpbmUJTUMxMzc4M19SRUdVX1YxCQkyNwotI2RlZmluZQlNQzEzNzgzX1JFR1VfVjIJCTI4Ci0jZGVmaW5lCU1DMTM3ODNfUkVHVV9WMwkJMjkKLSNkZWZpbmUJTUMxMzc4M19SRUdVX1Y0CQkzMAotI2RlZmluZQlNQzEzNzgzX1JFR1VfUFdHVDFTUEkJMzEKLSNkZWZpbmUJTUMxMzc4M19SRUdVX1BXR1QyU1BJCTMyCisjZGVmaW5lCU1DMTM3ODNfUkVHX1NXMUEJCTAKKyNkZWZpbmUJTUMxMzc4M19SRUdfU1cxQgkJMQorI2RlZmluZQlNQzEzNzgzX1JFR19TVzJBCQkyCisjZGVmaW5lCU1DMTM3ODNfUkVHX1NXMkIJCTMKKyNkZWZpbmUJTUMxMzc4M19SRUdfU1czCQk0CisjZGVmaW5lCU1DMTM3ODNfUkVHX1BMTAkJNQorI2RlZmluZQlNQzEzNzgzX1JFR19WQVVESU8JNgorI2RlZmluZQlNQzEzNzgzX1JFR19WSU9ISQk3CisjZGVmaW5lCU1DMTM3ODNfUkVHX1ZJT0xPCTgKKyNkZWZpbmUJTUMxMzc4M19SRUdfVkRJRwk5CisjZGVmaW5lCU1DMTM3ODNfUkVHX1ZHRU4JMTAKKyNkZWZpbmUJTUMxMzc4M19SRUdfVlJGRElHCTExCisjZGVmaW5lCU1DMTM3ODNfUkVHX1ZSRlJFRgkxMgorI2RlZmluZQlNQzEzNzgzX1JFR19WUkZDUAkxMworI2RlZmluZQlNQzEzNzgzX1JFR19WU0lNCTE0CisjZGVmaW5lCU1DMTM3ODNfUkVHX1ZFU0lNCTE1CisjZGVmaW5lCU1DMTM3ODNfUkVHX1ZDQU0JMTYKKyNkZWZpbmUJTUMxMzc4M19SRUdfVlJGQkcJMTcKKyNkZWZpbmUJTUMxMzc4M19SRUdfVlZJQgkxOAorI2RlZmluZQlNQzEzNzgzX1JFR19WUkYxCTE5CisjZGVmaW5lCU1DMTM3ODNfUkVHX1ZSRjIJMjAKKyNkZWZpbmUJTUMxMzc4M19SRUdfVk1NQzEJMjEKKyNkZWZpbmUJTUMxMzc4M19SRUdfVk1NQzIJMjIKKyNkZWZpbmUJTUMxMzc4M19SRUdfR1BPMQkyMworI2RlZmluZQlNQzEzNzgzX1JFR19HUE8yCTI0CisjZGVmaW5lCU1DMTM3ODNfUkVHX0dQTzMJMjUKKyNkZWZpbmUJTUMxMzc4M19SRUdfR1BPNAkyNgorI2RlZmluZQlNQzEzNzgzX1JFR19WMQkJMjcKKyNkZWZpbmUJTUMxMzc4M19SRUdfVjIJCTI4CisjZGVmaW5lCU1DMTM3ODNfUkVHX1YzCQkyOQorI2RlZmluZQlNQzEzNzgzX1JFR19WNAkJMzAKKyNkZWZpbmUJTUMxMzc4M19SRUdfUFdHVDFTUEkJMzEKKyNkZWZpbmUJTUMxMzc4M19SRUdfUFdHVDJTUEkJMzIKIAogI2RlZmluZSBNQzEzNzgzX0lSUV9BRENET05FCU1DMTNYWFhfSVJRX0FEQ0RPTkUKICNkZWZpbmUgTUMxMzc4M19JUlFfQURDQklTRE9ORQlNQzEzWFhYX0lSUV9BRENCSVNET05FCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9tYzEzODkyLmggYi9pbmNsdWRlL2xpbnV4L21mZC9tYzEzODkyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwZjJiZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL21jMTM4OTIuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgWW9uZyBTaGVuIDx5b25nLnNoZW5AbGluYXJvLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9NRkRfTUMxMzg5Ml9ICisjZGVmaW5lIF9fTElOVVhfTUZEX01DMTM4OTJfSAorCisjaW5jbHVkZSA8bGludXgvbWZkL21jMTN4eHguaD4KKworI2RlZmluZSBNQzEzODkyX1NXMQkJMAorI2RlZmluZSBNQzEzODkyX1NXMgkJMQorI2RlZmluZSBNQzEzODkyX1NXMwkJMgorI2RlZmluZSBNQzEzODkyX1NXNAkJMworI2RlZmluZSBNQzEzODkyX1NXQlNUCTQKKyNkZWZpbmUgTUMxMzg5Ml9WSU9ISQk1CisjZGVmaW5lIE1DMTM4OTJfVlBMTAk2CisjZGVmaW5lIE1DMTM4OTJfVkRJRwk3CisjZGVmaW5lIE1DMTM4OTJfVlNECTgKKyNkZWZpbmUgTUMxMzg5Ml9WVVNCMgk5CisjZGVmaW5lIE1DMTM4OTJfVlZJREVPCTEwCisjZGVmaW5lIE1DMTM4OTJfVkFVRElPCTExCisjZGVmaW5lIE1DMTM4OTJfVkNBTQkxMgorI2RlZmluZSBNQzEzODkyX1ZHRU4xCTEzCisjZGVmaW5lIE1DMTM4OTJfVkdFTjIJMTQKKyNkZWZpbmUgTUMxMzg5Ml9WR0VOMwkxNQorI2RlZmluZSBNQzEzODkyX1ZVU0IJMTYKKyNkZWZpbmUgTUMxMzg5Ml9HUE8xCTE3CisjZGVmaW5lIE1DMTM4OTJfR1BPMgkxOAorI2RlZmluZSBNQzEzODkyX0dQTzMJMTkKKyNkZWZpbmUgTUMxMzg5Ml9HUE80CTIwCisjZGVmaW5lIE1DMTM4OTJfUFdHVDFTUEkJMjEKKyNkZWZpbmUgTUMxMzg5Ml9QV0dUMlNQSQkyMgorI2RlZmluZSBNQzEzODkyX1ZDT0lOQ0VMTAkyMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3RtaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3RtaW8uaAppbmRleCAwODVmMDQxLi44ZTcwMzEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC90bWlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdG1pby5oCkBAIC01Nyw2ICs1NywxMCBAQAogICogaXMgY29uZmlndXJlZCBpbiA0LWJpdCBtb2RlLgogICovCiAjZGVmaW5lIFRNSU9fTU1DX0JMS1NaXzJCWVRFUwkJKDEgPDwgMSkKKy8qCisgKiBTb21lIGNvbnRyb2xsZXJzIGNhbiBzdXBwb3J0IFNESU8gSVJRIHNpZ25hbGxpbmcuCisgKi8KKyNkZWZpbmUgVE1JT19NTUNfU0RJT19JUlEJCSgxIDw8IDIpCiAKIGludCB0bWlvX2NvcmVfbW1jX2VuYWJsZSh2b2lkIF9faW9tZW0gKmNuZiwgaW50IHNoaWZ0LCB1bnNpZ25lZCBsb25nIGJhc2UpOwogaW50IHRtaW9fY29yZV9tbWNfcmVzdW1lKHZvaWQgX19pb21lbSAqY25mLCBpbnQgc2hpZnQsIHVuc2lnbmVkIGxvbmcgYmFzZSk7CkBAIC02Niw2ICs3MCw3IEBACiBzdHJ1Y3QgdG1pb19tbWNfZG1hIHsKIAl2b2lkICpjaGFuX3ByaXZfdHg7CiAJdm9pZCAqY2hhbl9wcml2X3J4OworCWludCBhbGlnbm1lbnRfc2hpZnQ7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L2NvcmUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9jb3JlLmgKaW5kZXggZGU3OWJhZS4uM2ZkMzY4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvY29yZS5oCkBAIC0xNyw2ICsxNywxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKK2VudW0gd204OTk0X3R5cGUgeworCVdNODk5NCA9IDAsCisJV004OTU4ID0gMSwKK307CisKIHN0cnVjdCByZWd1bGF0b3JfZGV2Owogc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGE7CiAKQEAgLTQ4LDYgKzUzLDggQEAKIAlzdHJ1Y3QgbXV0ZXggaW9fbG9jazsKIAlzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7CiAKKwllbnVtIHdtODk5NF90eXBlIHR5cGU7CisKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJaW50ICgqcmVhZF9kZXYpKHN0cnVjdCB3bTg5OTQgKndtODk5NCwgdW5zaWduZWQgc2hvcnQgcmVnLAogCQkJaW50IGJ5dGVzLCB2b2lkICpkZXN0KTsKQEAgLTY4LDYgKzc1LDcgQEAKIAl1MTYgZ3Bpb19yZWdzW1dNODk5NF9OVU1fR1BJT19SRUdTXTsKIAogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpkYnZkZDsKKwlpbnQgbnVtX3N1cHBsaWVzOwogCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhICpzdXBwbGllczsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9wZGF0YS5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L3BkYXRhLmgKaW5kZXggYWRkOGExYi4uOWVhYjI2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L3BkYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L3BkYXRhLmgKQEAgLTMwLDYgKzMwLDggQEAKIAogI2RlZmluZSBXTTg5OTRfRFJDX1JFR1MgNQogI2RlZmluZSBXTTg5OTRfRVFfUkVHUyAgMjAKKyNkZWZpbmUgV004OTU4X01CQ19DVVRPRkZfUkVHUyAyMAorI2RlZmluZSBXTTg5NThfTUJDX0NPRUZGX1JFR1MgIDQ4CiAKIC8qKgogICogRFJDIGNvbmZpZ3VyYXRpb25zIGFyZSBzcGVjaWZpZWQgd2l0aCBhIGxhYmVsIGFuZCBhIHNldCBvZiByZWdpc3RlcgpAQCAtNTksNiArNjEsMTggQEAKICAgICAgICAgdTE2IHJlZ3NbV004OTk0X0VRX1JFR1NdOwogfTsKIAorLyoqCisgKiBNdWx0aWJhbmQgY29tcHJlc3NvciBjb25maWd1cmF0aW9ucyBhcmUgc3BlY2lmaWVkIHdpdGggYSBsYWJlbCBhbmQKKyAqIHR3byBzZXRzIG9mIHZhbHVlcyB0byB3cml0ZS4gIENvbmZpZ3VyYXRpb25zIGFyZSBleHBlY3RlZCB0byBiZQorICogZ2VuZXJhdGVkIHVzaW5nIHRoZSBtdWx0aWJhbmQgY29tcHJlc3NvciBjb25maWd1cmF0aW9uIHBhbmVsIGluCisgKiBXSVNDRSAtIHNlZSBodHRwOi8vd3d3LndvbGZzb25taWNyby5jb20vd2lzY2UvCisgKi8KK3N0cnVjdCB3bTg5NThfbWJjX2NmZyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1MTYgY3V0b2ZmX3JlZ3NbV004OTU4X01CQ19DVVRPRkZfUkVHU107CisJdTE2IGNvZWZmX3JlZ3NbV004OTU4X01CQ19DT0VGRl9SRUdTXTsKK307CisKIHN0cnVjdCB3bTg5OTRfcGRhdGEgewogCWludCBncGlvX2Jhc2U7CiAKQEAgLTc4LDYgKzkyLDkgQEAKICAgICAgICAgaW50IG51bV9yZXR1bmVfbW9iaWxlX2NmZ3M7CiAgICAgICAgIHN0cnVjdCB3bTg5OTRfcmV0dW5lX21vYmlsZV9jZmcgKnJldHVuZV9tb2JpbGVfY2ZnczsKIAorCWludCBudW1fbWJjX2NmZ3M7CisJc3RydWN0IHdtODk1OF9tYmNfY2ZnICptYmNfY2ZnczsKKwogICAgICAgICAvKiBMSU5FT1VUIGNhbiBiZSBkaWZmZXJlbnRpYWwgb3Igc2luZ2xlIGVuZGVkICovCiAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lb3V0MV9kaWZmOjE7CiAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lb3V0Ml9kaWZmOjE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvcmVnaXN0ZXJzLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvcmVnaXN0ZXJzLmgKaW5kZXggOTY3ZjYyZi4uYmUwNzJmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L3JlZ2lzdGVycy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9yZWdpc3RlcnMuaApAQCAtNjQsMTIgKzY0LDE2IEBACiAjZGVmaW5lIFdNODk5NF9MRE9fMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNCCiAjZGVmaW5lIFdNODk5NF9MRE9fMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNDCiAjZGVmaW5lIFdNODk5NF9DSEFSR0VfUFVNUF8xICAgICAgICAgICAgICAgICAgICAweDRDCisjZGVmaW5lIFdNODk1OF9DSEFSR0VfUFVNUF8yICAgICAgICAgICAgICAgICAgICAweDRECiAjZGVmaW5lIFdNODk5NF9DTEFTU19XXzEgICAgICAgICAgICAgICAgICAgICAgICAweDUxCiAjZGVmaW5lIFdNODk5NF9EQ19TRVJWT18xICAgICAgICAgICAgICAgICAgICAgICAweDU0CiAjZGVmaW5lIFdNODk5NF9EQ19TRVJWT18yICAgICAgICAgICAgICAgICAgICAgICAweDU1CiAjZGVmaW5lIFdNODk5NF9EQ19TRVJWT180ICAgICAgICAgICAgICAgICAgICAgICAweDU3CiAjZGVmaW5lIFdNODk5NF9EQ19TRVJWT19SRUFEQkFDSyAgICAgICAgICAgICAgICAweDU4CiAjZGVmaW5lIFdNODk5NF9BTkFMT0dVRV9IUF8xICAgICAgICAgICAgICAgICAgICAweDYwCisjZGVmaW5lIFdNODk1OF9NSUNfREVURUNUXzEgICAgICAgICAgICAgICAgICAgICAweEQwCisjZGVmaW5lIFdNODk1OF9NSUNfREVURUNUXzIgICAgICAgICAgICAgICAgICAgICAweEQxCisjZGVmaW5lIFdNODk1OF9NSUNfREVURUNUXzMgICAgICAgICAgICAgICAgICAgICAweEQyCiAjZGVmaW5lIFdNODk5NF9DSElQX1JFVklTSU9OICAgICAgICAgICAgICAgICAgICAweDEwMAogI2RlZmluZSBXTTg5OTRfQ09OVFJPTF9JTlRFUkZBQ0UgICAgICAgICAgICAgICAgMHgxMDEKICNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl9DVFJMXzEgICAgICAgICAgIDB4MTEwCkBAIC0xMDksNiArMTEzLDEwIEBACiAjZGVmaW5lIFdNODk5NF9BSUYyREFDX0xSQ0xLICAgICAgICAgICAgICAgICAgICAweDMxNQogI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19EQVRBICAgICAgICAgICAgICAgICAgICAgMHgzMTYKICNkZWZpbmUgV004OTk0X0FJRjJBRENfREFUQSAgICAgICAgICAgICAgICAgICAgIDB4MzE3CisjZGVmaW5lIFdNODk1OF9BSUYzX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgICAweDMyMAorI2RlZmluZSBXTTg5NThfQUlGM19DT05UUk9MXzIgICAgICAgICAgICAgICAgICAgMHgzMjEKKyNkZWZpbmUgV004OTU4X0FJRjNEQUNfREFUQSAgICAgICAgICAgICAgICAgICAgIDB4MzIyCisjZGVmaW5lIFdNODk1OF9BSUYzQURDX0RBVEEgICAgICAgICAgICAgICAgICAgICAweDMyMwogI2RlZmluZSBXTTg5OTRfQUlGMV9BREMxX0xFRlRfVk9MVU1FICAgICAgICAgICAgMHg0MDAKICNkZWZpbmUgV004OTk0X0FJRjFfQURDMV9SSUdIVF9WT0xVTUUgICAgICAgICAgIDB4NDAxCiAjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfTEVGVF9WT0xVTUUgICAgICAgICAgICAweDQwMgpAQCAtMjQyLDYgKzI1MCw4MyBAQAogI2RlZmluZSBXTTg5OTRfSU5URVJSVVBUX1NUQVRVU18yX01BU0sgICAgICAgICAgMHg3MzkKICNkZWZpbmUgV004OTk0X0lOVEVSUlVQVF9DT05UUk9MICAgICAgICAgICAgICAgIDB4NzQwCiAjZGVmaW5lIFdNODk5NF9JUlFfREVCT1VOQ0UgICAgICAgICAgICAgICAgICAgICAweDc0OAorI2RlZmluZSBXTTg5NThfRFNQMl9QUk9HUkFNICAgICAgICAgICAgICAgICAgICAgMHg5MDAKKyNkZWZpbmUgV004OTU4X0RTUDJfQ09ORklHICAgICAgICAgICAgICAgICAgICAgIDB4OTAxCisjZGVmaW5lIFdNODk1OF9EU1AyX01BR0lDTlVNICAgICAgICAgICAgICAgICAgICAweEEwMAorI2RlZmluZSBXTTg5NThfRFNQMl9SRUxFQVNFWUVBUiAgICAgICAgICAgICAgICAgMHhBMDEKKyNkZWZpbmUgV004OTU4X0RTUDJfUkVMRUFTRU1PTlRIREFZICAgICAgICAgICAgIDB4QTAyCisjZGVmaW5lIFdNODk1OF9EU1AyX1JFTEVBU0VUSU1FICAgICAgICAgICAgICAgICAweEEwMworI2RlZmluZSBXTTg5NThfRFNQMl9WRVJNQUpNSU4gICAgICAgICAgICAgICAgICAgMHhBMDQKKyNkZWZpbmUgV004OTU4X0RTUDJfVkVSQlVJTEQgICAgICAgICAgICAgICAgICAgIDB4QTA1CisjZGVmaW5lIFdNODk1OF9EU1AyX0VYRUNDT05UUk9MICAgICAgICAgICAgICAgICAweEEwRAorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMl9MT1dFUl9DVVRPRkZfQzFfMSAgICAgMHgyMjAwCisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8yX0xPV0VSX0NVVE9GRl9DMV8yICAgICAweDIyMDEKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzJfTE9XRVJfQ1VUT0ZGX0MyXzEgICAgIDB4MjIwMgorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMl9MT1dFUl9DVVRPRkZfQzJfMiAgICAgMHgyMjAzCisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8yX0xPV0VSX0NVVE9GRl9DM18xICAgICAweDIyMDQKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzJfTE9XRVJfQ1VUT0ZGX0MzXzIgICAgIDB4MjIwNQorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMl9VUFBFUl9DVVRPRkZfQzJfMSAgICAgMHgyMjA2CisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8yX1VQUEVSX0NVVE9GRl9DMl8yICAgICAweDIyMDcKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzJfVVBQRVJfQ1VUT0ZGX0MzXzEgICAgIDB4MjIwOAorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMl9VUFBFUl9DVVRPRkZfQzNfMiAgICAgMHgyMjA5CisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8yX1VQUEVSX0NVVE9GRl9DMV8xICAgICAweDIyMEEKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzJfVVBQRVJfQ1VUT0ZGX0MxXzIgICAgIDB4MjIwQgorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMV9VUFBFUl9DVVRPRkZfQzFfMSAgICAgMHgyMjBDCisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8xX1VQUEVSX0NVVE9GRl9DMV8yICAgICAweDIyMEQKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzFfVVBQRVJfQ1VUT0ZGX0MyXzEgICAgIDB4MjIwRQorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMV9VUFBFUl9DVVRPRkZfQzJfMiAgICAgMHgyMjBGCisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8xX1VQUEVSX0NVVE9GRl9DM18xICAgICAweDIyMTAKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzFfVVBQRVJfQ1VUT0ZGX0MzXzIgICAgIDB4MjIxMQorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMV9MT1dFUl9DVVRPRkZfMSAgICAgICAgMHgyMjEyCisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8xX0xPV0VSX0NVVE9GRl8yICAgICAgICAweDIyMTMKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzFfS18xICAgICAgICAgICAgICAgICAgIDB4MjQwMAorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMV9LXzIgICAgICAgICAgICAgICAgICAgMHgyNDAxCisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8xX04xXzEgICAgICAgICAgICAgICAgICAweDI0MDIKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzFfTjFfMiAgICAgICAgICAgICAgICAgIDB4MjQwMworI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMV9OMl8xICAgICAgICAgICAgICAgICAgMHgyNDA0CisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8xX04yXzIgICAgICAgICAgICAgICAgICAweDI0MDUKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzFfTjNfMSAgICAgICAgICAgICAgICAgIDB4MjQwNgorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMV9OM18yICAgICAgICAgICAgICAgICAgMHgyNDA3CisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8xX040XzEgICAgICAgICAgICAgICAgICAweDI0MDgKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzFfTjRfMiAgICAgICAgICAgICAgICAgIDB4MjQwOQorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMV9ONV8xICAgICAgICAgICAgICAgICAgMHgyNDBBCisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8xX041XzIgICAgICAgICAgICAgICAgICAweDI0MEIKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzFfWDFfMSAgICAgICAgICAgICAgICAgIDB4MjQwQworI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMV9YMV8yICAgICAgICAgICAgICAgICAgMHgyNDBECisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8xX1gyXzEgICAgICAgICAgICAgICAgICAweDI0MEUKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzFfWDJfMiAgICAgICAgICAgICAgICAgIDB4MjQwRgorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMV9YM18xICAgICAgICAgICAgICAgICAgMHgyNDEwCisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8xX1gzXzIgICAgICAgICAgICAgICAgICAweDI0MTEKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzFfQVRUQUNLXzEgICAgICAgICAgICAgIDB4MjQxMgorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMV9BVFRBQ0tfMiAgICAgICAgICAgICAgMHgyNDEzCisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8xX0RFQ0FZXzEgICAgICAgICAgICAgICAweDI0MTQKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzFfREVDQVlfMiAgICAgICAgICAgICAgIDB4MjQxNQorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMl9LXzEgICAgICAgICAgICAgICAgICAgMHgyNDE2CisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8yX0tfMiAgICAgICAgICAgICAgICAgICAweDI0MTcKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzJfTjFfMSAgICAgICAgICAgICAgICAgIDB4MjQxOAorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMl9OMV8yICAgICAgICAgICAgICAgICAgMHgyNDE5CisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8yX04yXzEgICAgICAgICAgICAgICAgICAweDI0MUEKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzJfTjJfMiAgICAgICAgICAgICAgICAgIDB4MjQxQgorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMl9OM18xICAgICAgICAgICAgICAgICAgMHgyNDFDCisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8yX04zXzIgICAgICAgICAgICAgICAgICAweDI0MUQKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzJfTjRfMSAgICAgICAgICAgICAgICAgIDB4MjQxRQorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMl9ONF8yICAgICAgICAgICAgICAgICAgMHgyNDFGCisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8yX041XzEgICAgICAgICAgICAgICAgICAweDI0MjAKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzJfTjVfMiAgICAgICAgICAgICAgICAgIDB4MjQyMQorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMl9YMV8xICAgICAgICAgICAgICAgICAgMHgyNDIyCisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8yX1gxXzIgICAgICAgICAgICAgICAgICAweDI0MjMKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzJfWDJfMSAgICAgICAgICAgICAgICAgIDB4MjQyNAorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMl9YMl8yICAgICAgICAgICAgICAgICAgMHgyNDI1CisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8yX1gzXzEgICAgICAgICAgICAgICAgICAweDI0MjYKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzJfWDNfMiAgICAgICAgICAgICAgICAgIDB4MjQyNworI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMl9BVFRBQ0tfMSAgICAgICAgICAgICAgMHgyNDI4CisjZGVmaW5lIFdNODk1OF9NQkNfQkFORF8yX0FUVEFDS18yICAgICAgICAgICAgICAweDI0MjkKKyNkZWZpbmUgV004OTU4X01CQ19CQU5EXzJfREVDQVlfMSAgICAgICAgICAgICAgIDB4MjQyQQorI2RlZmluZSBXTTg5NThfTUJDX0JBTkRfMl9ERUNBWV8yICAgICAgICAgICAgICAgMHgyNDJCCisjZGVmaW5lIFdNODk1OF9NQkNfQjJfUEcyXzEgICAgICAgICAgICAgICAgICAgICAweDI0MkMKKyNkZWZpbmUgV004OTU4X01CQ19CMl9QRzJfMiAgICAgICAgICAgICAgICAgICAgIDB4MjQyRAorI2RlZmluZSBXTTg5NThfTUJDX0IxX1BHMl8xICAgICAgICAgICAgICAgICAgICAgMHgyNDJFCisjZGVmaW5lIFdNODk1OF9NQkNfQjFfUEcyXzIgICAgICAgICAgICAgICAgICAgICAweDI0MkYKICNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8wICAgICAgICAgICAgICAgIDB4MzAwMAogI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEgICAgICAgICAgICAgICAgMHgzMDAxCiAjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMiAgICAgICAgICAgICAgICAweDMwMDIKQEAgLTk5Miw2ICsxMDc3LDEyIEBACiAvKgogICogUjYgKDB4MDYpIC0gUG93ZXIgTWFuYWdlbWVudCAoNikKICAqLworI2RlZmluZSBXTTg5NThfQUlGM0FEQ19TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHgwNjAwICAvKiBBSUYzQURDX1NSQyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5NThfQUlGM0FEQ19TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICA5ICAvKiBBSUYzQURDX1NSQyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5NThfQUlGM0FEQ19TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYzQURDX1NSQyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5NThfQUlGMkRBQ19TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTgwICAvKiBBSUYyREFDX1NSQyAtIFs4OjddICovCisjZGVmaW5lIFdNODk1OF9BSUYyREFDX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEFJRjJEQUNfU1JDIC0gWzg6N10gKi8KKyNkZWZpbmUgV004OTU4X0FJRjJEQUNfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMkRBQ19TUkMgLSBbODo3XSAqLwogI2RlZmluZSBXTTg5OTRfQUlGM19UUkkgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBSUYzX1RSSSAqLwogI2RlZmluZSBXTTg5OTRfQUlGM19UUklfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBSUYzX1RSSSAqLwogI2RlZmluZSBXTTg5OTRfQUlGM19UUklfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBBSUYzX1RSSSAqLwpAQCAtMTgzNiw2ICsxOTI3LDE0IEBACiAjZGVmaW5lIFdNODk5NF9DUF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENQX0VOQSAqLwogCiAvKgorICogUjc3ICgweDREKSAtIENoYXJnZSBQdW1wICgyKQorICovCisjZGVmaW5lIFdNODk1OF9DUF9ESVNDSCAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIENQX0RJU0NIICovCisjZGVmaW5lIFdNODk1OF9DUF9ESVNDSF9NQVNLICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIENQX0RJU0NIICovCisjZGVmaW5lIFdNODk1OF9DUF9ESVNDSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIENQX0RJU0NIICovCisjZGVmaW5lIFdNODk1OF9DUF9ESVNDSF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENQX0RJU0NIICovCisKKy8qCiAgKiBSODEgKDB4NTEpIC0gQ2xhc3MgVyAoMSkKICAqLwogI2RlZmluZSBXTTg5OTRfQ1BfRFlOX1NSQ19TRUxfTUFTSyAgICAgICAgICAgICAgMHgwMzAwICAvKiBDUF9EWU5fU1JDX1NFTCAtIFs5OjhdICovCkBAIC0xOTUyLDYgKzIwNTEsNDYgQEAKICNkZWZpbmUgV004OTk0X0hQT1VUMVJfRExZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxUl9ETFkgKi8KIAogLyoKKyAqIFIyMDggKDB4RDApIC0gTWljIERldGVjdCAxCisgKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfQklBU19TVEFSVFRJTUVfTUFTSyAgICAgICAgIDB4RjAwMCAgLyogTUlDRF9CSUFTX1NUQVJUVElNRSAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfQklBU19TVEFSVFRJTUVfU0hJRlQgICAgICAgICAgICAxMiAgLyogTUlDRF9CSUFTX1NUQVJUVElNRSAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfQklBU19TVEFSVFRJTUVfV0lEVEggICAgICAgICAgICAgNCAgLyogTUlDRF9CSUFTX1NUQVJUVElNRSAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfUkFURV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MEYwMCAgLyogTUlDRF9SQVRFIC0gWzExOjhdICovCisjZGVmaW5lIFdNODk1OF9NSUNEX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIE1JQ0RfUkFURSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5NThfTUlDRF9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBNSUNEX1JBVEUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfREJUSU1FICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDRF9EQlRJTUUgKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfREJUSU1FX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDRF9EQlRJTUUgKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfREJUSU1FX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9EQlRJTUUgKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfREJUSU1FX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9EQlRJTUUgKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDRF9FTkEgKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDRF9FTkEgKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTUlDRF9FTkEgKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9FTkEgKi8KKworLyoKKyAqIFIyMDkgKDB4RDEpIC0gTWljIERldGVjdCAyCisgKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfTFZMX1NFTF9NQVNLICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogTUlDRF9MVkxfU0VMIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfTFZMX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogTUlDRF9MVkxfU0VMIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfTFZMX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgOCAgLyogTUlDRF9MVkxfU0VMIC0gWzc6MF0gKi8KKworLyoKKyAqIFIyMTAgKDB4RDIpIC0gTWljIERldGVjdCAzCisgKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDdGQyAgLyogTUlDRF9MVkwgLSBbMTA6Ml0gKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTUlDRF9MVkwgLSBbMTA6Ml0gKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogTUlDRF9MVkwgLSBbMTA6Ml0gKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfVkFMSUQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDRF9WQUxJRCAqLworI2RlZmluZSBXTTg5NThfTUlDRF9WQUxJRF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNEX1ZBTElEICovCisjZGVmaW5lIFdNODk1OF9NSUNEX1ZBTElEX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0RfVkFMSUQgKi8KKyNkZWZpbmUgV004OTU4X01JQ0RfVkFMSURfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9WQUxJRCAqLworI2RlZmluZSBXTTg5NThfTUlDRF9TVFMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNEX1NUUyAqLworI2RlZmluZSBXTTg5NThfTUlDRF9TVFNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNEX1NUUyAqLworI2RlZmluZSBXTTg5NThfTUlDRF9TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBNSUNEX1NUUyAqLworI2RlZmluZSBXTTg5NThfTUlDRF9TVFNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNEX1NUUyAqLworCisvKgogICogUjI1NiAoMHgxMDApIC0gQ2hpcCBSZXZpc2lvbgogICovCiAjZGVmaW5lIFdNODk5NF9DSElQX1JFVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIENISVBfUkVWIC0gWzM6MF0gKi8KQEAgLTIwNjksNiArMjIwOCwxNCBAQAogLyoKICAqIFI1MjAgKDB4MjA4KSAtIENsb2NraW5nICgxKQogICovCisjZGVmaW5lIFdNODk1OF9EU1AyQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIERTUDJDTEtfRU5BICovCisjZGVmaW5lIFdNODk1OF9EU1AyQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIERTUDJDTEtfRU5BICovCisjZGVmaW5lIFdNODk1OF9EU1AyQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTQgIC8qIERTUDJDTEtfRU5BICovCisjZGVmaW5lIFdNODk1OF9EU1AyQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJDTEtfRU5BICovCisjZGVmaW5lIFdNODk1OF9EU1AyQ0xLX1NSQyAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERTUDJDTEtfU1JDICovCisjZGVmaW5lIFdNODk1OF9EU1AyQ0xLX1NSQ19NQVNLICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERTUDJDTEtfU1JDICovCisjZGVmaW5lIFdNODk1OF9EU1AyQ0xLX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgMTIgIC8qIERTUDJDTEtfU1JDICovCisjZGVmaW5lIFdNODk1OF9EU1AyQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJDTEtfU1JDICovCiAjZGVmaW5lIFdNODk5NF9UT0NMS19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFRPQ0xLX0VOQSAqLwogI2RlZmluZSBXTTg5OTRfVE9DTEtfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBUT0NMS19FTkEgKi8KICNkZWZpbmUgV004OTk0X1RPQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogVE9DTEtfRU5BICovCkBAIC0yNTUzLDYgKzI3MDAsNjMgQEAKICNkZWZpbmUgV004OTk0X0FJRjJBRENSX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMkFEQ1JfREFUX0lOViAqLwogCiAvKgorICogUjgwMCAoMHgzMjApIC0gQUlGMyBDb250cm9sICgxKQorICovCisjZGVmaW5lIFdNODk1OF9BSUYzX0xSQ0xLX0lOViAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRjNfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk1OF9BSUYzX0xSQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRjNfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk1OF9BSUYzX0xSQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgIDcgIC8qIEFJRjNfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk1OF9BSUYzX0xSQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjNfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk1OF9BSUYzX1dMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNjAgIC8qIEFJRjNfV0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5NThfQUlGM19XTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBBSUYzX1dMIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTU4X0FJRjNfV0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGM19XTCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk1OF9BSUYzX0ZNVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTggIC8qIEFJRjNfRk1UIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTU4X0FJRjNfRk1UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogQUlGM19GTVQgLSBbNDozXSAqLworI2RlZmluZSBXTTg5NThfQUlGM19GTVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYzX0ZNVCAtIFs0OjNdICovCisKKy8qCisgKiBSODAxICgweDMyMSkgLSBBSUYzIENvbnRyb2wgKDIpCisgKi8KKyNkZWZpbmUgV004OTU4X0FJRjNEQUNfQk9PU1RfTUFTSyAgICAgICAgICAgICAgIDB4MEMwMCAgLyogQUlGM0RBQ19CT09TVCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTU4X0FJRjNEQUNfQk9PU1RfU0hJRlQgICAgICAgICAgICAgICAgICAxMCAgLyogQUlGM0RBQ19CT09TVCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTU4X0FJRjNEQUNfQk9PU1RfV0lEVEggICAgICAgICAgICAgICAgICAgMiAgLyogQUlGM0RBQ19CT09TVCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTU4X0FJRjNEQUNfQ09NUCAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGM0RBQ19DT01QICovCisjZGVmaW5lIFdNODk1OF9BSUYzREFDX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjNEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5NThfQUlGM0RBQ19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYzREFDX0NPTVAgKi8KKyNkZWZpbmUgV004OTU4X0FJRjNEQUNfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGM0RBQ19DT01QICovCisjZGVmaW5lIFdNODk1OF9BSUYzREFDX0NPTVBNT0RFICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFJRjNEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTU4X0FJRjNEQUNfQ09NUE1PREVfTUFTSyAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGM0RBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5NThfQUlGM0RBQ19DT01QTU9ERV9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBBSUYzREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk1OF9BSUYzREFDX0NPTVBNT0RFX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjNEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTU4X0FJRjNBRENfQ09NUCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGM0FEQ19DT01QICovCisjZGVmaW5lIFdNODk1OF9BSUYzQURDX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjNBRENfQ09NUCAqLworI2RlZmluZSBXTTg5NThfQUlGM0FEQ19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYzQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTU4X0FJRjNBRENfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGM0FEQ19DT01QICovCisjZGVmaW5lIFdNODk1OF9BSUYzQURDX0NPTVBNT0RFICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjNBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTU4X0FJRjNBRENfQ09NUE1PREVfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGM0FEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5NThfQUlGM0FEQ19DT01QTU9ERV9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBSUYzQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk1OF9BSUYzQURDX0NPTVBNT0RFX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjNBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTU4X0FJRjNfTE9PUEJBQ0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGM19MT09QQkFDSyAqLworI2RlZmluZSBXTTg5NThfQUlGM19MT09QQkFDS19NQVNLICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYzX0xPT1BCQUNLICovCisjZGVmaW5lIFdNODk1OF9BSUYzX0xPT1BCQUNLX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjNfTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTU4X0FJRjNfTE9PUEJBQ0tfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGM19MT09QQkFDSyAqLworCisvKgorICogUjgwMiAoMHgzMjIpIC0gQUlGM0RBQyBEYXRhCisgKi8KKyNkZWZpbmUgV004OTU4X0FJRjNEQUNfREFUX0lOViAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGM0RBQ19EQVRfSU5WICovCisjZGVmaW5lIFdNODk1OF9BSUYzREFDX0RBVF9JTlZfTUFTSyAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjNEQUNfREFUX0lOViAqLworI2RlZmluZSBXTTg5NThfQUlGM0RBQ19EQVRfSU5WX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYzREFDX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTU4X0FJRjNEQUNfREFUX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogQUlGM0RBQ19EQVRfSU5WICovCisKKy8qCisgKiBSODAzICgweDMyMykgLSBBSUYzQURDIERhdGEKKyAqLworI2RlZmluZSBXTTg5NThfQUlGM0FEQ19EQVRfSU5WICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYzQURDX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTU4X0FJRjNBRENfREFUX0lOVl9NQVNLICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGM0FEQ19EQVRfSU5WICovCisjZGVmaW5lIFdNODk1OF9BSUYzQURDX0RBVF9JTlZfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjNBRENfREFUX0lOViAqLworI2RlZmluZSBXTTg5NThfQUlGM0FEQ19EQVRfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBBSUYzQURDX0RBVF9JTlYgKi8KKworLyoKICAqIFIxMDI0ICgweDQwMCkgLSBBSUYxIEFEQzEgTGVmdCBWb2x1bWUKICAqLwogI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFfVlUgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxQURDMV9WVSAqLwpAQCAtNDI4OSw0ICs0NDkzLDEwMiBAQAogI2RlZmluZSBXTTg5OTRfVEVNUF9TSFVUX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBURU1QX1NIVVRfREIgKi8KICNkZWZpbmUgV004OTk0X1RFTVBfU0hVVF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogVEVNUF9TSFVUX0RCICovCiAKKy8qCisgKiBSMjMwNCAoMHg5MDApIC0gRFNQMl9Qcm9ncmFtCisgKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMl9FTkEgKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMl9FTkEgKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMl9FTkEgKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMl9FTkEgKi8KKworLyoKKyAqIFIyMzA1ICgweDkwMSkgLSBEU1AyX0NvbmZpZworICovCisjZGVmaW5lIFdNODk1OF9NQkNfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMzAgIC8qIE1CQ19TRUwgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5NThfTUJDX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBNQkNfU0VMIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTU4X01CQ19TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTUJDX1NFTCAtIFs1OjRdICovCisjZGVmaW5lIFdNODk1OF9NQkNfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1CQ19FTkEgKi8KKyNkZWZpbmUgV004OTU4X01CQ19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUJDX0VOQSAqLworI2RlZmluZSBXTTg5NThfTUJDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBNQkNfRU5BICovCisjZGVmaW5lIFdNODk1OF9NQkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1CQ19FTkEgKi8KKworLyoKKyAqIFIyNTYwICgweEEwMCkgLSBEU1AyX01hZ2ljTnVtCisgKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfTUFHSUNfTlVNX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMl9NQUdJQ19OVU0gLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfTUFHSUNfTlVNX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMl9NQUdJQ19OVU0gLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfTUFHSUNfTlVNX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMl9NQUdJQ19OVU0gLSBbMTU6MF0gKi8KKworLyoKKyAqIFIyNTYxICgweEEwMSkgLSBEU1AyX1JlbGVhc2VZZWFyCisgKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfUkVMRUFTRV9ZRUFSX01BU0sgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMl9SRUxFQVNFX1lFQVIgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfUkVMRUFTRV9ZRUFSX1NISUZUICAgICAgICAgICAgICAgMCAgLyogRFNQMl9SRUxFQVNFX1lFQVIgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfUkVMRUFTRV9ZRUFSX1dJRFRIICAgICAgICAgICAgICAxNiAgLyogRFNQMl9SRUxFQVNFX1lFQVIgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIyNTYyICgweEEwMikgLSBEU1AyX1JlbGVhc2VNb250aERheQorICovCisjZGVmaW5lIFdNODk1OF9EU1AyX1JFTEVBU0VfTU9OVEhfTUFTSyAgICAgICAgICAweEZGMDAgIC8qIERTUDJfUkVMRUFTRV9NT05USCAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5NThfRFNQMl9SRUxFQVNFX01PTlRIX1NISUZUICAgICAgICAgICAgICA4ICAvKiBEU1AyX1JFTEVBU0VfTU9OVEggLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfUkVMRUFTRV9NT05USF9XSURUSCAgICAgICAgICAgICAgOCAgLyogRFNQMl9SRUxFQVNFX01PTlRIIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODk1OF9EU1AyX1JFTEVBU0VfREFZX01BU0sgICAgICAgICAgICAweDAwRkYgIC8qIERTUDJfUkVMRUFTRV9EQVkgLSBbNzowXSAqLworI2RlZmluZSBXTTg5NThfRFNQMl9SRUxFQVNFX0RBWV9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEU1AyX1JFTEVBU0VfREFZIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfUkVMRUFTRV9EQVlfV0lEVEggICAgICAgICAgICAgICAgOCAgLyogRFNQMl9SRUxFQVNFX0RBWSAtIFs3OjBdICovCisKKy8qCisgKiBSMjU2MyAoMHhBMDMpIC0gRFNQMl9SZWxlYXNlVGltZQorICovCisjZGVmaW5lIFdNODk1OF9EU1AyX1JFTEVBU0VfSE9VUlNfTUFTSyAgICAgICAgICAweEZGMDAgIC8qIERTUDJfUkVMRUFTRV9IT1VSUyAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5NThfRFNQMl9SRUxFQVNFX0hPVVJTX1NISUZUICAgICAgICAgICAgICA4ICAvKiBEU1AyX1JFTEVBU0VfSE9VUlMgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfUkVMRUFTRV9IT1VSU19XSURUSCAgICAgICAgICAgICAgOCAgLyogRFNQMl9SRUxFQVNFX0hPVVJTIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODk1OF9EU1AyX1JFTEVBU0VfTUlOU19NQVNLICAgICAgICAgICAweDAwRkYgIC8qIERTUDJfUkVMRUFTRV9NSU5TIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfUkVMRUFTRV9NSU5TX1NISUZUICAgICAgICAgICAgICAgMCAgLyogRFNQMl9SRUxFQVNFX01JTlMgLSBbNzowXSAqLworI2RlZmluZSBXTTg5NThfRFNQMl9SRUxFQVNFX01JTlNfV0lEVEggICAgICAgICAgICAgICA4ICAvKiBEU1AyX1JFTEVBU0VfTUlOUyAtIFs3OjBdICovCisKKy8qCisgKiBSMjU2NCAoMHhBMDQpIC0gRFNQMl9WZXJNYWpNaW4KKyAqLworI2RlZmluZSBXTTg5NThfRFNQMl9NQUpPUl9WRVJfTUFTSyAgICAgICAgICAgICAgMHhGRjAwICAvKiBEU1AyX01BSk9SX1ZFUiAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5NThfRFNQMl9NQUpPUl9WRVJfU0hJRlQgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyX01BSk9SX1ZFUiAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5NThfRFNQMl9NQUpPUl9WRVJfV0lEVEggICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyX01BSk9SX1ZFUiAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5NThfRFNQMl9NSU5PUl9WRVJfTUFTSyAgICAgICAgICAgICAgMHgwMEZGICAvKiBEU1AyX01JTk9SX1ZFUiAtIFs3OjBdICovCisjZGVmaW5lIFdNODk1OF9EU1AyX01JTk9SX1ZFUl9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJfTUlOT1JfVkVSIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfTUlOT1JfVkVSX1dJRFRIICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMl9NSU5PUl9WRVIgLSBbNzowXSAqLworCisvKgorICogUjI1NjUgKDB4QTA1KSAtIERTUDJfVmVyQnVpbGQKKyAqLworI2RlZmluZSBXTTg5NThfRFNQMl9CVUlMRF9WRVJfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyX0JVSUxEX1ZFUiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5NThfRFNQMl9CVUlMRF9WRVJfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyX0JVSUxEX1ZFUiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5NThfRFNQMl9CVUlMRF9WRVJfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyX0JVSUxEX1ZFUiAtIFsxNTowXSAqLworCisvKgorICogUjI1NzMgKDB4QTBEKSAtIERTUDJfRXhlY0NvbnRyb2wKKyAqLworI2RlZmluZSBXTTg5NThfRFNQMl9TVE9QQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEU1AyX1NUT1BDICovCisjZGVmaW5lIFdNODk1OF9EU1AyX1NUT1BDX01BU0sgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERTUDJfU1RPUEMgKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfU1RPUENfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNSAgLyogRFNQMl9TVE9QQyAqLworI2RlZmluZSBXTTg5NThfRFNQMl9TVE9QQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AyX1NUT1BDICovCisjZGVmaW5lIFdNODk1OF9EU1AyX1NUT1BTICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERTUDJfU1RPUFMgKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfU1RPUFNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogRFNQMl9TVE9QUyAqLworI2RlZmluZSBXTTg5NThfRFNQMl9TVE9QU19TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEU1AyX1NUT1BTICovCisjZGVmaW5lIFdNODk1OF9EU1AyX1NUT1BTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJfU1RPUFMgKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfU1RPUEkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogRFNQMl9TVE9QSSAqLworI2RlZmluZSBXTTg5NThfRFNQMl9TVE9QSV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEU1AyX1NUT1BJICovCisjZGVmaW5lIFdNODk1OF9EU1AyX1NUT1BJX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERTUDJfU1RPUEkgKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfU1RPUElfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMl9TVE9QSSAqLworI2RlZmluZSBXTTg5NThfRFNQMl9TVE9QICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEU1AyX1NUT1AgKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfU1RPUF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRFNQMl9TVE9QICovCisjZGVmaW5lIFdNODk1OF9EU1AyX1NUT1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERTUDJfU1RPUCAqLworI2RlZmluZSBXTTg5NThfRFNQMl9TVE9QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AyX1NUT1AgKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfUlVOUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRFNQMl9SVU5SICovCisjZGVmaW5lIFdNODk1OF9EU1AyX1JVTlJfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERTUDJfUlVOUiAqLworI2RlZmluZSBXTTg5NThfRFNQMl9SVU5SX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AyX1JVTlIgKi8KKyNkZWZpbmUgV004OTU4X0RTUDJfUlVOUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMl9SVU5SICovCisjZGVmaW5lIFdNODk1OF9EU1AyX1JVTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDJfUlVOICovCisjZGVmaW5lIFdNODk1OF9EU1AyX1JVTl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDJfUlVOICovCisjZGVmaW5lIFdNODk1OF9EU1AyX1JVTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJfUlVOICovCisjZGVmaW5lIFdNODk1OF9EU1AyX1JVTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJfUlVOICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmggYi9pbmNsdWRlL2xpbnV4L21tYy9kd19tbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmIwMjYxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmgKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBTeW5vcHN5cyBEZXNpZ25XYXJlIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgZHJpdmVyCisgKiAgKEJhc2VkIG9uIE5YUCBkcml2ZXIgZm9yIGxwYyAzMXh4KQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOWFAgU2VtaWNvbmR1Y3RvcnMKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfTU1DX0RXX01NQ19IXworI2RlZmluZSBfTElOVVhfTU1DX0RXX01NQ19IXworCisjZGVmaW5lIE1BWF9NQ0lfU0xPVFMJMgorCitlbnVtIGR3X21jaV9zdGF0ZSB7CisJU1RBVEVfSURMRSA9IDAsCisJU1RBVEVfU0VORElOR19DTUQsCisJU1RBVEVfU0VORElOR19EQVRBLAorCVNUQVRFX0RBVEFfQlVTWSwKKwlTVEFURV9TRU5ESU5HX1NUT1AsCisJU1RBVEVfREFUQV9FUlJPUiwKK307CisKK2VudW0geworCUVWRU5UX0NNRF9DT01QTEVURSA9IDAsCisJRVZFTlRfWEZFUl9DT01QTEVURSwKKwlFVkVOVF9EQVRBX0NPTVBMRVRFLAorCUVWRU5UX0RBVEFfRVJST1IsCisJRVZFTlRfWEZFUl9FUlJPUgorfTsKKworc3RydWN0IG1tY19kYXRhOworCisvKioKKyAqIHN0cnVjdCBkd19tY2kgLSBNTUMgY29udHJvbGxlciBzdGF0ZSBzaGFyZWQgYmV0d2VlbiBhbGwgc2xvdHMKKyAqIEBsb2NrOiBTcGlubG9jayBwcm90ZWN0aW5nIHRoZSBxdWV1ZSBhbmQgYXNzb2NpYXRlZCBkYXRhLgorICogQHJlZ3M6IFBvaW50ZXIgdG8gTU1JTyByZWdpc3RlcnMuCisgKiBAc2c6IFNjYXR0ZXJsaXN0IGVudHJ5IGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQgYnkgUElPIGNvZGUsIGlmIGFueS4KKyAqIEBwaW9fb2Zmc2V0OiBPZmZzZXQgaW50byB0aGUgY3VycmVudCBzY2F0dGVybGlzdCBlbnRyeS4KKyAqIEBjdXJfc2xvdDogVGhlIHNsb3Qgd2hpY2ggaXMgY3VycmVudGx5IHVzaW5nIHRoZSBjb250cm9sbGVyLgorICogQG1ycTogVGhlIHJlcXVlc3QgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZCBvbiBAY3VyX3Nsb3QsCisgKglvciBOVUxMIGlmIHRoZSBjb250cm9sbGVyIGlzIGlkbGUuCisgKiBAY21kOiBUaGUgY29tbWFuZCBjdXJyZW50bHkgYmVpbmcgc2VudCB0byB0aGUgY2FyZCwgb3IgTlVMTC4KKyAqIEBkYXRhOiBUaGUgZGF0YSBjdXJyZW50bHkgYmVpbmcgdHJhbnNmZXJyZWQsIG9yIE5VTEwgaWYgbm8gZGF0YQorICoJdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MuCisgKiBAdXNlX2RtYTogV2hldGhlciBETUEgY2hhbm5lbCBpcyBpbml0aWFsaXplZCBvciBub3QuCisgKiBAc2dfZG1hOiBCdXMgYWRkcmVzcyBvZiBETUEgYnVmZmVyLgorICogQHNnX2NwdTogVmlydHVhbCBhZGRyZXNzIG9mIERNQSBidWZmZXIuCisgKiBAZG1hX29wczogUG9pbnRlciB0byBwbGF0Zm9ybS1zcGVjaWZpYyBETUEgY2FsbGJhY2tzLgorICogQGNtZF9zdGF0dXM6IFNuYXBzaG90IG9mIFNSIHRha2VuIHVwb24gY29tcGxldGlvbiBvZiB0aGUgY3VycmVudAorICoJY29tbWFuZC4gT25seSB2YWxpZCB3aGVuIEVWRU5UX0NNRF9DT01QTEVURSBpcyBwZW5kaW5nLgorICogQGRhdGFfc3RhdHVzOiBTbmFwc2hvdCBvZiBTUiB0YWtlbiB1cG9uIGNvbXBsZXRpb24gb2YgdGhlIGN1cnJlbnQKKyAqCWRhdGEgdHJhbnNmZXIuIE9ubHkgdmFsaWQgd2hlbiBFVkVOVF9EQVRBX0NPTVBMRVRFIG9yCisgKglFVkVOVF9EQVRBX0VSUk9SIGlzIHBlbmRpbmcuCisgKiBAc3RvcF9jbWRyOiBWYWx1ZSB0byBiZSBsb2FkZWQgaW50byBDTURSIHdoZW4gdGhlIHN0b3AgY29tbWFuZCBpcworICoJdG8gYmUgc2VudC4KKyAqIEBkaXJfc3RhdHVzOiBEaXJlY3Rpb24gb2YgY3VycmVudCB0cmFuc2Zlci4KKyAqIEB0YXNrbGV0OiBUYXNrbGV0IHJ1bm5pbmcgdGhlIHJlcXVlc3Qgc3RhdGUgbWFjaGluZS4KKyAqIEBjYXJkX3Rhc2tsZXQ6IFRhc2tsZXQgaGFuZGxpbmcgY2FyZCBkZXRlY3QuCisgKiBAcGVuZGluZ19ldmVudHM6IEJpdG1hc2sgb2YgZXZlbnRzIGZsYWdnZWQgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyCisgKgl0byBiZSBwcm9jZXNzZWQgYnkgdGhlIHRhc2tsZXQuCisgKiBAY29tcGxldGVkX2V2ZW50czogQml0bWFzayBvZiBldmVudHMgd2hpY2ggdGhlIHN0YXRlIG1hY2hpbmUgaGFzCisgKglwcm9jZXNzZWQuCisgKiBAc3RhdGU6IFRhc2tsZXQgc3RhdGUuCisgKiBAcXVldWU6IExpc3Qgb2Ygc2xvdHMgd2FpdGluZyBmb3IgYWNjZXNzIHRvIHRoZSBjb250cm9sbGVyLgorICogQGJ1c19oejogVGhlIHJhdGUgb2YgQG1jayBpbiBIei4gVGhpcyBmb3JtcyB0aGUgYmFzaXMgZm9yIE1NQyBidXMKKyAqCXJhdGUgYW5kIHRpbWVvdXQgY2FsY3VsYXRpb25zLgorICogQGN1cnJlbnRfc3BlZWQ6IENvbmZpZ3VyZWQgcmF0ZSBvZiB0aGUgY29udHJvbGxlci4KKyAqIEBudW1fc2xvdHM6IE51bWJlciBvZiBzbG90cyBhdmFpbGFibGUuCisgKiBAcGRldjogUGxhdGZvcm0gZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgTU1DIGNvbnRyb2xsZXIuCisgKiBAcGRhdGE6IFBsYXRmb3JtIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBNTUMgY29udHJvbGxlci4KKyAqIEBzbG90OiBTbG90cyBzaGFyaW5nIHRoaXMgTU1DIGNvbnRyb2xsZXIuCisgKiBAZGF0YV9zaGlmdDogbG9nMiBvZiBGSUZPIGl0ZW0gc2l6ZS4KKyAqIEBwdXNoX2RhdGE6IFBvaW50ZXIgdG8gRklGTyBwdXNoIGZ1bmN0aW9uLgorICogQHB1bGxfZGF0YTogUG9pbnRlciB0byBGSUZPIHB1bGwgZnVuY3Rpb24uCisgKiBAcXVpcmtzOiBTZXQgb2YgcXVpcmtzIHRoYXQgYXBwbHkgdG8gc3BlY2lmaWMgdmVyc2lvbnMgb2YgdGhlIElQLgorICoKKyAqIExvY2tpbmcKKyAqID09PT09PT0KKyAqCisgKiBAbG9jayBpcyBhIHNvZnRpcnEtc2FmZSBzcGlubG9jayBwcm90ZWN0aW5nIEBxdWV1ZSBhcyB3ZWxsIGFzCisgKiBAY3VyX3Nsb3QsIEBtcnEgYW5kIEBzdGF0ZS4gVGhlc2UgbXVzdCBhbHdheXMgYmUgdXBkYXRlZAorICogYXQgdGhlIHNhbWUgdGltZSB3aGlsZSBob2xkaW5nIEBsb2NrLgorICoKKyAqIFRoZSBAbXJxIGZpZWxkIG9mIHN0cnVjdCBkd19tY2lfc2xvdCBpcyBhbHNvIHByb3RlY3RlZCBieSBAbG9jaywKKyAqIGFuZCBtdXN0IGFsd2F5cyBiZSB3cml0dGVuIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIHNsb3QgaXMgYWRkZWQgdG8KKyAqIEBxdWV1ZS4KKyAqCisgKiBAcGVuZGluZ19ldmVudHMgYW5kIEBjb21wbGV0ZWRfZXZlbnRzIGFyZSBhY2Nlc3NlZCB1c2luZyBhdG9taWMgYml0CisgKiBvcGVyYXRpb25zLCBzbyB0aGV5IGRvbid0IG5lZWQgYW55IGxvY2tpbmcuCisgKgorICogTm9uZSBvZiB0aGUgZmllbGRzIHRvdWNoZWQgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyIG5lZWQgYW55CisgKiBsb2NraW5nLiBIb3dldmVyLCBvcmRlcmluZyBpcyBpbXBvcnRhbnQ6IEJlZm9yZSBFVkVOVF9EQVRBX0VSUk9SIG9yCisgKiBFVkVOVF9EQVRBX0NPTVBMRVRFIGlzIHNldCBpbiBAcGVuZGluZ19ldmVudHMsIGFsbCBkYXRhLXJlbGF0ZWQKKyAqIGludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZCBhbmQgQGRhdGFfc3RhdHVzIHVwZGF0ZWQgd2l0aCBhCisgKiBzbmFwc2hvdCBvZiBTUi4gU2ltaWxhcmx5LCBiZWZvcmUgRVZFTlRfQ01EX0NPTVBMRVRFIGlzIHNldCwgdGhlCisgKiBDTURSRFkgaW50ZXJ1cHQgbXVzdCBiZSBkaXNhYmxlZCBhbmQgQGNtZF9zdGF0dXMgdXBkYXRlZCB3aXRoIGEKKyAqIHNuYXBzaG90IG9mIFNSLCBhbmQgYmVmb3JlIEVWRU5UX1hGRVJfQ09NUExFVEUgY2FuIGJlIHNldCwgdGhlCisgKiBieXRlc194ZmVyZWQgZmllbGQgb2YgQGRhdGEgbXVzdCBiZSB3cml0dGVuLiBUaGlzIGlzIGVuc3VyZWQgYnkKKyAqIHVzaW5nIGJhcnJpZXJzLgorICovCitzdHJ1Y3QgZHdfbWNpIHsKKwlzcGlubG9ja190CQlsb2NrOworCXZvaWQgX19pb21lbQkJKnJlZ3M7CisKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNnOworCXVuc2lnbmVkIGludAkJcGlvX29mZnNldDsKKworCXN0cnVjdCBkd19tY2lfc2xvdAkqY3VyX3Nsb3Q7CisJc3RydWN0IG1tY19yZXF1ZXN0CSptcnE7CisJc3RydWN0IG1tY19jb21tYW5kCSpjbWQ7CisJc3RydWN0IG1tY19kYXRhCQkqZGF0YTsKKworCS8qIERNQSBpbnRlcmZhY2UgbWVtYmVycyovCisJaW50CQkJdXNlX2RtYTsKKworCWRtYV9hZGRyX3QJCXNnX2RtYTsKKwl2b2lkCQkJKnNnX2NwdTsKKwlzdHJ1Y3QgZHdfbWNpX2RtYV9vcHMJKmRtYV9vcHM7CisjaWZkZWYgQ09ORklHX01NQ19EV19JRE1BQworCXVuc2lnbmVkIGludAkJcmluZ19zaXplOworI2Vsc2UKKwlzdHJ1Y3QgZHdfbWNpX2RtYV9kYXRhCSpkbWFfZGF0YTsKKyNlbmRpZgorCXUzMgkJCWNtZF9zdGF0dXM7CisJdTMyCQkJZGF0YV9zdGF0dXM7CisJdTMyCQkJc3RvcF9jbWRyOworCXUzMgkJCWRpcl9zdGF0dXM7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CXRhc2tsZXQ7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CWNhcmRfdGFza2xldDsKKwl1bnNpZ25lZCBsb25nCQlwZW5kaW5nX2V2ZW50czsKKwl1bnNpZ25lZCBsb25nCQljb21wbGV0ZWRfZXZlbnRzOworCWVudW0gZHdfbWNpX3N0YXRlCXN0YXRlOworCXN0cnVjdCBsaXN0X2hlYWQJcXVldWU7CisKKwl1MzIJCQlidXNfaHo7CisJdTMyCQkJY3VycmVudF9zcGVlZDsKKwl1MzIJCQludW1fc2xvdHM7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKKwlzdHJ1Y3QgZHdfbWNpX2JvYXJkCSpwZGF0YTsKKwlzdHJ1Y3QgZHdfbWNpX3Nsb3QJKnNsb3RbTUFYX01DSV9TTE9UU107CisKKwkvKiBGSUZPIHB1c2ggYW5kIHB1bGwgKi8KKwlpbnQJCQlkYXRhX3NoaWZ0OworCXZvaWQgKCpwdXNoX2RhdGEpKHN0cnVjdCBkd19tY2kgKmhvc3QsIHZvaWQgKmJ1ZiwgaW50IGNudCk7CisJdm9pZCAoKnB1bGxfZGF0YSkoc3RydWN0IGR3X21jaSAqaG9zdCwgdm9pZCAqYnVmLCBpbnQgY250KTsKKworCS8qIFdvcmthcm91bmQgZmxhZ3MgKi8KKwl1MzIJCQlxdWlya3M7Cit9OworCisvKiBETUEgb3BzIGZvciBJbnRlcm5hbC9FeHRlcm5hbCBETUFDIGludGVyZmFjZSAqLworc3RydWN0IGR3X21jaV9kbWFfb3BzIHsKKwkvKiBETUEgT3BzICovCisJaW50ICgqaW5pdCkoc3RydWN0IGR3X21jaSAqaG9zdCk7CisJdm9pZCAoKnN0YXJ0KShzdHJ1Y3QgZHdfbWNpICpob3N0LCB1bnNpZ25lZCBpbnQgc2dfbGVuKTsKKwl2b2lkICgqY29tcGxldGUpKHN0cnVjdCBkd19tY2kgKmhvc3QpOworCXZvaWQgKCpzdG9wKShzdHJ1Y3QgZHdfbWNpICpob3N0KTsKKwl2b2lkICgqY2xlYW51cCkoc3RydWN0IGR3X21jaSAqaG9zdCk7CisJdm9pZCAoKmV4aXQpKHN0cnVjdCBkd19tY2kgKmhvc3QpOworfTsKKworLyogSVAgUXVpcmtzL2ZsYWdzLiAqLworLyogTm8gc3BlY2lhbCBxdWlya3Mgb3IgZmxhZ3MgdG8gY2F0ZXIgZm9yICovCisjZGVmaW5lIERXX01DSV9RVUlSS19OT05FCQkwCisvKiBEVE8gZml4IGZvciBjb21tYW5kIHRyYW5zbWlzc2lvbiB3aXRoIElETUFDIGNvbmZpZ3VyZWQgKi8KKyNkZWZpbmUgRFdfTUNJX1FVSVJLX0lETUFDX0RUTwkJMQorLyogZGVsYXkgbmVlZGVkIGJldHdlZW4gcmV0cmllcyBvbiBzb21lIDIuMTFhIGltcGxlbWVudGF0aW9ucyAqLworI2RlZmluZSBEV19NQ0lfUVVJUktfUkVUUllfREVMQVkJMgorLyogSGlnaCBTcGVlZCBDYXBhYmxlIC0gU3VwcG9ydHMgSFMgY2FyZHMgKHVwdG8gNTBNSHopICovCisjZGVmaW5lIERXX01DSV9RVUlSS19ISUdIU1BFRUQJCTQKKworCitzdHJ1Y3QgZG1hX3BkYXRhOworCitzdHJ1Y3QgYmxvY2tfc2V0dGluZ3MgeworCXVuc2lnbmVkIHNob3J0CW1heF9zZWdzOwkvKiBzZWUgYmxrX3F1ZXVlX21heF9zZWdtZW50cyAqLworCXVuc2lnbmVkIGludAltYXhfYmxrX3NpemU7CS8qIG1heGltdW0gc2l6ZSBvZiBvbmUgbW1jIGJsb2NrICovCisJdW5zaWduZWQgaW50CW1heF9ibGtfY291bnQ7CS8qIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyBpbiBvbmUgcmVxKi8KKwl1bnNpZ25lZCBpbnQJbWF4X3JlcV9zaXplOwkvKiBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBvbmUgcmVxKi8KKwl1bnNpZ25lZCBpbnQJbWF4X3NlZ19zaXplOwkvKiBzZWUgYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUgKi8KK307CisKKy8qIEJvYXJkIHBsYXRmb3JtIGRhdGEgKi8KK3N0cnVjdCBkd19tY2lfYm9hcmQgeworCXUzMiBudW1fc2xvdHM7CisKKwl1MzIgcXVpcmtzOyAvKiBXb3JrYXJvdW5kIC8gUXVpcmsgZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgYnVzX2h6OyAvKiBCdXMgc3BlZWQgKi8KKworCS8qIGRlbGF5IGluIG1TIGJlZm9yZSBkZXRlY3RpbmcgY2FyZHMgYWZ0ZXIgaW50ZXJydXB0ICovCisJdTMyIGRldGVjdF9kZWxheV9tczsKKworCWludCAoKmluaXQpKHUzMiBzbG90X2lkLCBpcnFfaGFuZGxlcl90ICwgdm9pZCAqKTsKKwlpbnQgKCpnZXRfcm8pKHUzMiBzbG90X2lkKTsKKwlpbnQgKCpnZXRfY2QpKHUzMiBzbG90X2lkKTsKKwlpbnQgKCpnZXRfb2NyKSh1MzIgc2xvdF9pZCk7CisJaW50ICgqZ2V0X2J1c193ZCkodTMyIHNsb3RfaWQpOworCS8qCisJICogRW5hYmxlIHBvd2VyIHRvIHNlbGVjdGVkIHNsb3QgYW5kIHNldCB2b2x0YWdlIHRvIGRlc2lyZWQgbGV2ZWwuCisJICogVm9sdGFnZSBsZXZlbHMgYXJlIHNwZWNpZmllZCB1c2luZyBNTUNfVkREX3h4eCBkZWZpbmVzIGRlZmluZWQKKwkgKiBpbiBsaW51eC9tbWMvaG9zdC5oIGZpbGUuCisJICovCisJdm9pZCAoKnNldHBvd2VyKSh1MzIgc2xvdF9pZCwgdTMyIHZvbHQpOworCXZvaWQgKCpleGl0KSh1MzIgc2xvdF9pZCk7CisJdm9pZCAoKnNlbGVjdF9zbG90KSh1MzIgc2xvdF9pZCk7CisKKwlzdHJ1Y3QgZHdfbWNpX2RtYV9vcHMgKmRtYV9vcHM7CisJc3RydWN0IGRtYV9wZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgYmxvY2tfc2V0dGluZ3MgKmJsa19zZXR0aW5nczsKK307CisKKyNlbmRpZiAvKiBfTElOVVhfTU1DX0RXX01NQ19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oIGIvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCmluZGV4IDMwZjZmYWQuLmJjYjc5M2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKQEAgLTEzMSw2ICsxMzEsOSBAQAogCXVuc2lnbmVkIGludAkJZl9tYXg7CiAJdW5zaWduZWQgaW50CQlmX2luaXQ7CiAJdTMyCQkJb2NyX2F2YWlsOworCXUzMgkJCW9jcl9hdmFpbF9zZGlvOwkvKiBTRElPLXNwZWNpZmljIE9DUiAqLworCXUzMgkJCW9jcl9hdmFpbF9zZDsJLyogU0Qtc3BlY2lmaWMgT0NSICovCisJdTMyCQkJb2NyX2F2YWlsX21tYzsJLyogTU1DLXNwZWNpZmljIE9DUiAqLwogCXN0cnVjdCBub3RpZmllcl9ibG9jawlwbV9ub3RpZnk7CiAKICNkZWZpbmUgTU1DX1ZERF8xNjVfMTk1CQkweDAwMDAwMDgwCS8qIFZERCB2b2x0YWdlIDEuNjUgLSAxLjk1ICovCkBAIC0xNjksOSArMTcyLDIwIEBACiAjZGVmaW5lIE1NQ19DQVBfMV8yVl9ERFIJKDEgPDwgMTIpCS8qIGNhbiBzdXBwb3J0ICovCiAJCQkJCQkvKiBERFIgbW9kZSBhdCAxLjJWICovCiAjZGVmaW5lIE1NQ19DQVBfUE9XRVJfT0ZGX0NBUkQJKDEgPDwgMTMpCS8qIENhbiBwb3dlciBvZmYgYWZ0ZXIgYm9vdCAqLworI2RlZmluZSBNTUNfQ0FQX0JVU19XSURUSF9URVNUCSgxIDw8IDE0KQkvKiBDTUQxNC9DTUQxOSBidXMgd2lkdGggb2sgKi8KIAogCW1tY19wbV9mbGFnX3QJCXBtX2NhcHM7CS8qIHN1cHBvcnRlZCBwbSBmZWF0dXJlcyAqLwogCisjaWZkZWYgQ09ORklHX01NQ19DTEtHQVRFCisJaW50CQkJY2xrX3JlcXVlc3RzOwkvKiBpbnRlcm5hbCByZWZlcmVuY2UgY291bnRlciAqLworCXVuc2lnbmVkIGludAkJY2xrX2RlbGF5OwkvKiBudW1iZXIgb2YgTUNJIGNsayBob2xkIGN5Y2xlcyAqLworCWJvb2wJCQljbGtfZ2F0ZWQ7CS8qIGNsb2NrIGdhdGVkICovCisJc3RydWN0IHdvcmtfc3RydWN0CWNsa19nYXRlX3dvcms7IC8qIGRlbGF5ZWQgY2xvY2sgZ2F0ZSAqLworCXVuc2lnbmVkIGludAkJY2xrX29sZDsJLyogb2xkIGNsb2NrIHZhbHVlIGNhY2hlICovCisJc3BpbmxvY2tfdAkJY2xrX2xvY2s7CS8qIGxvY2sgZm9yIGNsayBmaWVsZHMgKi8KKwlzdHJ1Y3QgbXV0ZXgJCWNsa19nYXRlX211dGV4OwkvKiBtdXRleCBmb3IgY2xvY2sgZ2F0aW5nICovCisjZW5kaWYKKwogCS8qIGhvc3Qgc3BlY2lmaWMgYmxvY2sgZGF0YSAqLwogCXVuc2lnbmVkIGludAkJbWF4X3NlZ19zaXplOwkvKiBzZWUgYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUgKi8KIAl1bnNpZ25lZCBzaG9ydAkJbWF4X3NlZ3M7CS8qIHNlZSBibGtfcXVldWVfbWF4X3NlZ21lbnRzICovCkBAIC0zMDcsNSArMzIxLDEwIEBACiAJcmV0dXJuICEoaG9zdC0+Y2FwcyAmIE1NQ19DQVBfTk9OUkVNT1ZBQkxFKSAmJiBtbWNfYXNzdW1lX3JlbW92YWJsZTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbW1jX2NhcmRfaXNfcG93ZXJlZF9yZXN1bWVkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gaG9zdC0+cG1fZmxhZ3MgJiBNTUNfUE1fS0VFUF9QT1dFUjsKK30KKwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL21tYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKaW5kZXggOTU2ZmJkODcuLjYxMjMwMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL21tYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL21tYy5oCkBAIC00MCw3ICs0MCw5IEBACiAjZGVmaW5lIE1NQ19SRUFEX0RBVF9VTlRJTF9TVE9QICAxMSAgIC8qIGFkdGMgWzMxOjBdIGRhZHIgICAgICAgIFIxICAqLwogI2RlZmluZSBNTUNfU1RPUF9UUkFOU01JU1NJT04gICAgMTIgICAvKiBhYyAgICAgICAgICAgICAgICAgICAgICBSMWIgKi8KICNkZWZpbmUgTU1DX1NFTkRfU1RBVFVTICAgICAgICAgIDEzICAgLyogYWMgICBbMzE6MTZdIFJDQSAgICAgICAgUjEgICovCisjZGVmaW5lIE1NQ19CVVNfVEVTVF9SICAgICAgICAgICAxNCAgIC8qIGFkdGMgICAgICAgICAgICAgICAgICAgIFIxICAqLwogI2RlZmluZSBNTUNfR09fSU5BQ1RJVkVfU1RBVEUgICAgMTUgICAvKiBhYyAgIFszMToxNl0gUkNBICAgICAgICAgICAgKi8KKyNkZWZpbmUgTU1DX0JVU19URVNUX1cgICAgICAgICAgIDE5ICAgLyogYWR0YyAgICAgICAgICAgICAgICAgICAgUjEgICovCiAjZGVmaW5lIE1NQ19TUElfUkVBRF9PQ1IgICAgICAgICA1OCAgIC8qIHNwaSAgICAgICAgICAgICAgICAgIHNwaV9SMyAqLwogI2RlZmluZSBNTUNfU1BJX0NSQ19PTl9PRkYgICAgICAgNTkgICAvKiBzcGkgIFswOjBdIGZsYWcgICAgICBzcGlfUjEgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvc2RoY2kuaCBiL2luY2x1ZGUvbGludXgvbW1jL3NkaGNpLmgKaW5kZXggMWZkYzY3My4uODNiZDlmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvc2RoY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9zZGhjaS5oCkBAIC04Myw2ICs4Myw4IEBACiAjZGVmaW5lIFNESENJX1FVSVJLX01VTFRJQkxPQ0tfUkVBRF9BQ01EMTIJCSgxPDwyOCkKIC8qIENvbnRyb2xsZXIgZG9lc24ndCBoYXZlIEhJU1BEIGJpdCBmaWVsZCBpbiBISS1TUEVFRCBTRCBjYXJkICovCiAjZGVmaW5lIFNESENJX1FVSVJLX05PX0hJU1BEX0JJVAkJCSgxPDwyOSkKKy8qIENvbnRyb2xsZXIgdHJlYXRzIEFETUEgZGVzY3JpcHRvcnMgd2l0aCBsZW5ndGggMDAwMGggaW5jb3JyZWN0bHkgKi8KKyNkZWZpbmUgU0RIQ0lfUVVJUktfQlJPS0VOX0FETUFfWkVST0xFTl9ERVNDCQkoMTw8MzApCiAKIAlpbnQgaXJxOwkJLyogRGV2aWNlIElSUSAqLwogCXZvaWQgX19pb21lbSAqaW9hZGRyOwkvKiBNYXBwZWQgYWRkcmVzcyAqLwpAQCAtMTM5LDYgKzE0MSwxMCBAQAogCiAJdW5zaWduZWQgaW50IGNhcHM7CS8qIEFsdGVybmF0aXZlIGNhcGFiaWxpdGllcyAqLwogCisJdW5zaWduZWQgaW50ICAgICAgICAgICAgb2NyX2F2YWlsX3NkaW87CS8qIE9DUiBiaXQgbWFza3MgKi8KKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBvY3JfYXZhaWxfc2Q7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgb2NyX2F2YWlsX21tYzsKKwogCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZVswXSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiB9OwogI2VuZGlmIC8qIF9fU0RIQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uY3BfZnMuaCBiL2luY2x1ZGUvbGludXgvbmNwX2ZzLmgKaW5kZXggMWMyN2YyMC4uZTEzZWVmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uY3BfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25jcF9mcy5oCkBAIC0xNDMsMTA0ICsxNDMsNCBAQAogI2RlZmluZSBOQ1BfTUFYUEFUSExFTiAyNTUKICNkZWZpbmUgTkNQX01BWE5BTUVMRU4gMTQKIAotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L25jcF9mc19pLmg+Ci0jaW5jbHVkZSA8bGludXgvbmNwX2ZzX3NiLmg+Ci0KLS8qIGRlZmluZSBiZWNhdXNlIGl0IGlzIGVhc3kgdG8gY2hhbmdlIFBSSU5USyB0byB7Kn1QUklOVEsgKi8KLSNkZWZpbmUgUFJJTlRLKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0ICwgIyMgYXJncykKLQotI3VuZGVmIE5DUEZTX1BBUkFOT0lBCi0jaWZkZWYgTkNQRlNfUEFSQU5PSUEKLSNkZWZpbmUgUFBSSU5USyhmb3JtYXQsIGFyZ3MuLi4pIFBSSU5USyhmb3JtYXQgLCAjIyBhcmdzKQotI2Vsc2UKLSNkZWZpbmUgUFBSSU5USyhmb3JtYXQsIGFyZ3MuLi4pCi0jZW5kaWYKLQotI2lmbmRlZiBERUJVR19OQ1AKLSNkZWZpbmUgREVCVUdfTkNQIDAKLSNlbmRpZgotI2lmIERFQlVHX05DUCA+IDAKLSNkZWZpbmUgRFBSSU5USyhmb3JtYXQsIGFyZ3MuLi4pIFBSSU5USyhmb3JtYXQgLCAjIyBhcmdzKQotI2Vsc2UKLSNkZWZpbmUgRFBSSU5USyhmb3JtYXQsIGFyZ3MuLi4pCi0jZW5kaWYKLSNpZiBERUJVR19OQ1AgPiAxCi0jZGVmaW5lIEREUFJJTlRLKGZvcm1hdCwgYXJncy4uLikgUFJJTlRLKGZvcm1hdCAsICMjIGFyZ3MpCi0jZWxzZQotI2RlZmluZSBERFBSSU5USyhmb3JtYXQsIGFyZ3MuLi4pCi0jZW5kaWYKLQotI2RlZmluZSBOQ1BfTUFYX1JQQ19USU1FT1VUICg2KkhaKQotCi0KLXN0cnVjdCBuY3BfZW50cnlfaW5mbyB7Ci0Jc3RydWN0IG53X2luZm9fc3RydWN0CWk7Ci0JaW5vX3QJCQlpbm87Ci0JaW50CQkJb3BlbmVkOwotCWludAkJCWFjY2VzczsKLQl1bnNpZ25lZCBpbnQJCXZvbHVtZTsKLQlfX3U4CQkJZmlsZV9oYW5kbGVbNl07Ci19OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBuY3Bfc2VydmVyICpOQ1BfU0JQKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0JcmV0dXJuIHNiLT5zX2ZzX2luZm87Ci19Ci0KLSNkZWZpbmUgTkNQX1NFUlZFUihpbm9kZSkJTkNQX1NCUCgoaW5vZGUpLT5pX3NiKQotc3RhdGljIGlubGluZSBzdHJ1Y3QgbmNwX2lub2RlX2luZm8gKk5DUF9GSU5GTyhjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBuY3BfaW5vZGVfaW5mbywgdmZzX2lub2RlKTsKLX0KLQotLyogbGludXgvZnMvbmNwZnMvaW5vZGUuYyAqLwotaW50IG5jcF9ub3RpZnlfY2hhbmdlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwotc3RydWN0IGlub2RlICpuY3BfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IG5jcF9lbnRyeV9pbmZvICopOwotdm9pZCBuY3BfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmNwX2VudHJ5X2luZm8gKik7Ci12b2lkIG5jcF91cGRhdGVfaW5vZGUyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmNwX2VudHJ5X2luZm8gKik7Ci0KLS8qIGxpbnV4L2ZzL25jcGZzL2Rpci5jICovCi1leHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmNwX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmNwX2Rpcl9vcGVyYXRpb25zOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuY3Bfcm9vdF9kZW50cnlfb3BlcmF0aW9uczsKLWludCBuY3BfY29ubl9sb2dnZWRfaW4oc3RydWN0IHN1cGVyX2Jsb2NrICopOwotaW50IG5jcF9kYXRlX2RvczJ1bml4KF9fbGUxNiB0aW1lLCBfX2xlMTYgZGF0ZSk7Ci12b2lkIG5jcF9kYXRlX3VuaXgyZG9zKGludCB1bml4X2RhdGUsIF9fbGUxNiAqIHRpbWUsIF9fbGUxNiAqIGRhdGUpOwotCi0vKiBsaW51eC9mcy9uY3Bmcy9pb2N0bC5jICovCi1sb25nIG5jcF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwotbG9uZyBuY3BfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7Ci0KLS8qIGxpbnV4L2ZzL25jcGZzL3NvY2suYyAqLwotaW50IG5jcF9yZXF1ZXN0MihzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyLCBpbnQgZnVuY3Rpb24sCi0Jdm9pZCogcmVwbHksIGludCBtYXhfcmVwbHlfc2l6ZSk7Ci1zdGF0aWMgaW5saW5lIGludCBuY3BfcmVxdWVzdChzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyLCBpbnQgZnVuY3Rpb24pIHsKLQlyZXR1cm4gbmNwX3JlcXVlc3QyKHNlcnZlciwgZnVuY3Rpb24sIHNlcnZlci0+cGFja2V0LCBzZXJ2ZXItPnBhY2tldF9zaXplKTsKLX0KLWludCBuY3BfY29ubmVjdChzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyKTsKLWludCBuY3BfZGlzY29ubmVjdChzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyKTsKLXZvaWQgbmNwX2xvY2tfc2VydmVyKHN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIpOwotdm9pZCBuY3BfdW5sb2NrX3NlcnZlcihzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyKTsKLQotLyogbGludXgvZnMvbmNwZnMvc3ltbGluay5jICovCi0jaWYgZGVmaW5lZChDT05GSUdfTkNQRlNfRVhUUkFTKSB8fCBkZWZpbmVkKENPTkZJR19OQ1BGU19ORlNfTlMpCi1leHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBuY3Bfc3ltbGlua19hb3BzOwotaW50IG5jcF9zeW1saW5rKHN0cnVjdCBpbm9kZSosIHN0cnVjdCBkZW50cnkqLCBjb25zdCBjaGFyKik7Ci0jZW5kaWYKLQotLyogbGludXgvZnMvbmNwZnMvZmlsZS5jICovCi1leHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmNwX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5jcF9maWxlX29wZXJhdGlvbnM7Ci1pbnQgbmNwX21ha2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKLQotLyogbGludXgvZnMvbmNwZnMvbW1hcC5jICovCi1pbnQgbmNwX21tYXAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwotCi0vKiBsaW51eC9mcy9uY3Bmcy9uY3BsaWJfa2VybmVsLmMgKi8KLWludCBuY3BfbWFrZV9jbG9zZWQoc3RydWN0IGlub2RlICopOwotCi0jZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwotCiAjZW5kaWYJCQkJLyogX0xJTlVYX05DUF9GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oIGIvaW5jbHVkZS9saW51eC9uY3BfbW91bnQuaAppbmRleCBhMmI1NDllLi5kZmNiZWEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmNwX21vdW50LmgKQEAgLTY4LDI2ICs2OCw0IEBACiAKICNkZWZpbmUgTkNQX01PVU5UX1ZFUlNJT05fVjUJKDUpCS8qIFRleHQgb25seSAqLwogCi0jaWZkZWYgX19LRVJORUxfXwotCi1zdHJ1Y3QgbmNwX21vdW50X2RhdGFfa2VybmVsIHsKLQl1bnNpZ25lZCBsb25nICAgIGZsYWdzOwkJLyogTkNQX01PVU5UXyogZmxhZ3MgKi8KLQl1bnNpZ25lZCBpbnQJIGludF9mbGFnczsJLyogaW50ZXJuYWwgZmxhZ3MgKi8KLSNkZWZpbmUgTkNQX0lNT1VOVF9MT0dHRURJTl9QT1NTSUJMRQkweDAwMDEKLQlfX2tlcm5lbF91aWQzMl90IG1vdW50ZWRfdWlkOwkvKiBXaG8gbWF5IHVtb3VudCgpIHRoaXMgZmlsZXN5c3RlbT8gKi8KLQlzdHJ1Y3QgcGlkICAgICAgKndkb2dfcGlkOwkvKiBXaG8gY2FyZXMgZm9yIG91ciB3YXRjaGRvZyBwYWNrZXRzPyAqLwotCXVuc2lnbmVkIGludCAgICAgbmNwX2ZkOwkvKiBUaGUgc29ja2V0IHRvIHRoZSBuY3AgcG9ydCAqLwotCXVuc2lnbmVkIGludCAgICAgdGltZV9vdXQ7CS8qIEhvdyBsb25nIHNob3VsZCBJIHdhaXQgYWZ0ZXIKLQkJCQkJICAgc2VuZGluZyBhIE5DUCByZXF1ZXN0PyAqLwotCXVuc2lnbmVkIGludCAgICAgcmV0cnlfY291bnQ7CS8qIEFuZCBob3cgb2Z0ZW4gc2hvdWxkIEkgcmV0cnk/ICovCi0JdW5zaWduZWQgY2hhcgkgbW91bnRlZF92b2xbTkNQX1ZPTE5BTUVfTEVOICsgMV07Ci0JX19rZXJuZWxfdWlkMzJfdCB1aWQ7Ci0JX19rZXJuZWxfZ2lkMzJfdCBnaWQ7Ci0JX19rZXJuZWxfbW9kZV90ICBmaWxlX21vZGU7Ci0JX19rZXJuZWxfbW9kZV90ICBkaXJfbW9kZTsKLQlpbnQJCSBpbmZvX2ZkOwotfTsKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCAwZjZiMWM5Li5iZTQ5NTdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTIxOTEsMTEgKzIxOTEsMTUgQEAKIGV4dGVybiB2b2lkCQlldGhlcl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyogU3VwcG9ydCBmb3IgbG9hZGFibGUgbmV0LWRyaXZlcnMgKi8KLWV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSwKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJICAgICAgIHZvaWQgKCpzZXR1cCkoc3RydWN0IG5ldF9kZXZpY2UgKiksCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBxdWV1ZV9jb3VudCk7CisJCQkJICAgICAgIHVuc2lnbmVkIGludCB0eHFzLCB1bnNpZ25lZCBpbnQgcnhxcyk7CiAjZGVmaW5lIGFsbG9jX25ldGRldihzaXplb2ZfcHJpdiwgbmFtZSwgc2V0dXApIFwKLQlhbGxvY19uZXRkZXZfbXEoc2l6ZW9mX3ByaXYsIG5hbWUsIHNldHVwLCAxKQorCWFsbG9jX25ldGRldl9tcXMoc2l6ZW9mX3ByaXYsIG5hbWUsIHNldHVwLCAxLCAxKQorCisjZGVmaW5lIGFsbG9jX25ldGRldl9tcShzaXplb2ZfcHJpdiwgbmFtZSwgc2V0dXAsIGNvdW50KSBcCisJYWxsb2NfbmV0ZGV2X21xcyhzaXplb2ZfcHJpdiwgbmFtZSwgc2V0dXAsIGNvdW50LCBjb3VudCkKKwogZXh0ZXJuIGludAkJcmVnaXN0ZXJfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQJCXVucmVnaXN0ZXJfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCkBAIC0yMzAzLDcgKzIzMDcsNyBAQAogdm9pZCBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldiwKIAkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKLWludCBuZXRpZl9nZXRfdmxhbl9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCBuZXRpZl9za2JfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG5ldF9nc29fb2soaW50IGZlYXR1cmVzLCBpbnQgZ3NvX3R5cGUpCiB7CkBAIC0yMzE3LDE2ICsyMzIxLDEwIEBACiAJICAgICAgICghc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSB8fCAoZmVhdHVyZXMgJiBORVRJRl9GX0ZSQUdMSVNUKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG5ldGlmX25lZWRzX2dzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSBpbnQgbmV0aWZfbmVlZHNfZ3NvKHN0cnVjdCBza19idWZmICpza2IsIGludCBmZWF0dXJlcykKIHsKLQlpZiAoc2tiX2lzX2dzbyhza2IpKSB7Ci0JCWludCBmZWF0dXJlcyA9IG5ldGlmX2dldF92bGFuX2ZlYXR1cmVzKHNrYiwgZGV2KTsKLQotCQlyZXR1cm4gKCFza2JfZ3NvX29rKHNrYiwgZmVhdHVyZXMpIHx8Ci0JCQl1bmxpa2VseShza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKSk7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHNrYl9pc19nc28oc2tiKSAmJiAoIXNrYl9nc29fb2soc2tiLCBmZWF0dXJlcykgfHwKKwkJdW5saWtlbHkoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfc2V0X2dzb19tYXhfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKaW5kZXggNzQyYmVjMC4uNjcxMmU3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC00NzIsNyArNDcyLDcgQEAKICAqICBuZWNlc3NhcnkgZm9yIHJlYWRpbmcgdGhlIGNvdW50ZXJzLgogICovCiBzdHJ1Y3QgeHRfaW5mb19sb2NrIHsKLQlzcGlubG9ja190IGxvY2s7CisJc2VxbG9ja190IGxvY2s7CiAJdW5zaWduZWQgY2hhciByZWFkZXJzOwogfTsKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgeHRfaW5mb19sb2NrLCB4dF9pbmZvX2xvY2tzKTsKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlsb2NrID0gJl9fZ2V0X2NwdV92YXIoeHRfaW5mb19sb2Nrcyk7CiAJaWYgKGxpa2VseSghbG9jay0+cmVhZGVycysrKSkKLQkJc3Bpbl9sb2NrKCZsb2NrLT5sb2NrKTsKKwkJd3JpdGVfc2VxbG9jaygmbG9jay0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB4dF9pbmZvX3JkdW5sb2NrX2JoKHZvaWQpCkBAIC01MDUsNyArNTA1LDcgQEAKIAlzdHJ1Y3QgeHRfaW5mb19sb2NrICpsb2NrID0gJl9fZ2V0X2NwdV92YXIoeHRfaW5mb19sb2Nrcyk7CiAKIAlpZiAobGlrZWx5KCEtLWxvY2stPnJlYWRlcnMpKQotCQlzcGluX3VubG9jaygmbG9jay0+bG9jayk7CisJCXdyaXRlX3NlcXVubG9jaygmbG9jay0+bG9jayk7CiAJbG9jYWxfYmhfZW5hYmxlKCk7CiB9CiAKQEAgLTUxNiwxMiArNTE2LDEyIEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB4dF9pbmZvX3dybG9jayh1bnNpZ25lZCBpbnQgY3B1KQogewotCXNwaW5fbG9jaygmcGVyX2NwdSh4dF9pbmZvX2xvY2tzLCBjcHUpLmxvY2spOworCXdyaXRlX3NlcWxvY2soJnBlcl9jcHUoeHRfaW5mb19sb2NrcywgY3B1KS5sb2NrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHh0X2luZm9fd3J1bmxvY2sodW5zaWduZWQgaW50IGNwdSkKIHsKLQlzcGluX3VubG9jaygmcGVyX2NwdSh4dF9pbmZvX2xvY2tzLCBjcHUpLmxvY2spOworCXdyaXRlX3NlcXVubG9jaygmcGVyX2NwdSh4dF9pbmZvX2xvY2tzLCBjcHUpLmxvY2spOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZmMvcG41NDQuaCBiL2luY2x1ZGUvbGludXgvbmZjL3BuNTQ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FiODUyMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmZjL3BuNTQ0LmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIERyaXZlciBpbmNsdWRlIGZvciB0aGUgUE41NDQgTkZDIGNoaXAuCisgKgorICogQ29weXJpZ2h0IChDKSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcjogSmFyaSBWYW5oYWxhIDxleHQtamFyaS52YW5oYWxhQG5va2lhLmNvbT4KKyAqIENvbnRhY3Q6IE1hdHRpIEFhbHRvZW5uIDxtYXR0aS5qLmFhbHRvbmVuQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfUE41NDRfSF8KKyNkZWZpbmUgX1BONTQ0X0hfCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2RlZmluZSBQTjU0NF9EUklWRVJfTkFNRQkicG41NDQiCisjZGVmaW5lIFBONTQ0X01BWFdJTkRPV19TSVpFCTcKKyNkZWZpbmUgUE41NDRfV0lORE9XX1NJWkUJNAorI2RlZmluZSBQTjU0NF9SRVRSSUVTCQkxMAorI2RlZmluZSBQTjU0NF9NQVhfSTJDX1RSQU5TRkVSCTB4MDQwMAorI2RlZmluZSBQTjU0NF9NU0dfTUFYX1NJWkUJMHgyMSAvKiBhdCBub3JtYWwgSENJIG1vZGUgKi8KKworLyogaW9jdGwgKi8KKyNkZWZpbmUgUE41NDRfQ0hBUl9CQVNFCQknUCcKKyNkZWZpbmUgUE41NDRfSU9SKG51bSwgZHR5cGUpCV9JT1IoUE41NDRfQ0hBUl9CQVNFLCBudW0sIGR0eXBlKQorI2RlZmluZSBQTjU0NF9JT1cobnVtLCBkdHlwZSkJX0lPVyhQTjU0NF9DSEFSX0JBU0UsIG51bSwgZHR5cGUpCisjZGVmaW5lIFBONTQ0X0dFVF9GV19NT0RFCVBONTQ0X0lPVygxLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFBONTQ0X1NFVF9GV19NT0RFCVBONTQ0X0lPVygyLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFBONTQ0X0dFVF9ERUJVRwkJUE41NDRfSU9XKDMsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgUE41NDRfU0VUX0RFQlVHCQlQTjU0NF9JT1coNCwgdW5zaWduZWQgaW50KQorCisvKiBUaW1pbmcgcmVzdHJpY3Rpb25zIChtcykgKi8KKyNkZWZpbmUgUE41NDRfUkVTRVRWRU5fVElNRQkzMCAvKiA3ICovCisjZGVmaW5lIFBONTQ0X1BWRERWRU5fVElNRQkwCisjZGVmaW5lIFBONTQ0X1ZCQVRWRU5fVElNRQkwCisjZGVmaW5lIFBONTQ0X0dQSU80VkVOX1RJTUUJMAorI2RlZmluZSBQTjU0NF9XQUtFVVBfQUNLCTUKKyNkZWZpbmUgUE41NDRfV0FLRVVQX0dVQVJECShQTjU0NF9XQUtFVVBfQUNLICsgMSkKKyNkZWZpbmUgUE41NDRfSU5BQ1RJVklUWV9USU1FCTEwMDAKKyNkZWZpbmUgUE41NDRfSU5URVJGUkFNRV9ERUxBWQkyMDAgLyogdXMgKi8KKyNkZWZpbmUgUE41NDRfQkFVRFJBVEVfQ0hBTkdFCTE1MCAvKiB1cyAqLworCisvKiBEZWJ1ZyBiaXRzICovCisjZGVmaW5lIFBONTQ0X0RFQlVHX0JVRgkJMHgwMQorI2RlZmluZSBQTjU0NF9ERUJVR19SRUFECTB4MDIKKyNkZWZpbmUgUE41NDRfREVCVUdfV1JJVEUJMHgwNAorI2RlZmluZSBQTjU0NF9ERUJVR19JUlEJCTB4MDgKKyNkZWZpbmUgUE41NDRfREVCVUdfQ0FMTFMJMHgxMAorI2RlZmluZSBQTjU0NF9ERUJVR19NT0RFCTB4MjAKKworLyogTm9ybWFsIChIQ0kpIG1vZGUgKi8KKyNkZWZpbmUgUE41NDRfTExDX0hDSV9PVkVSSEVBRAkzIC8qIGhlYWRlciArIGNyYyAodG8gbGVuZ3RoKSAqLworI2RlZmluZSBQTjU0NF9MTENfTUlOX1NJWkUJKDEgKyBQTjU0NF9MTENfSENJX09WRVJIRUFEKSAvKiBsZW5ndGggKyAqLworI2RlZmluZSBQTjU0NF9MTENfTUFYX0RBVEEJKFBONTQ0X01TR19NQVhfU0laRSAtIDIpCisjZGVmaW5lIFBONTQ0X0xMQ19NQVhfSENJX1NJWkUJKFBONTQ0X0xMQ19NQVhfREFUQSAtIDIpCisKK3N0cnVjdCBwbjU0NF9sbGNfcGFja2V0IHsKKwl1bnNpZ25lZCBjaGFyIGxlbmd0aDsgLyogb2YgcmVzdCBvZiBwYWNrZXQgKi8KKwl1bnNpZ25lZCBjaGFyIGhlYWRlcjsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbUE41NDRfTExDX01BWF9EQVRBXTsgLyogaW5jbHVkZXMgY3JjLWNjaXR0ICovCit9OworCisvKiBGaXJtd2FyZSB1cGdyYWRlIG1vZGUgKi8KKyNkZWZpbmUgUE41NDRfRldfSEVBREVSX1NJWkUJMworLyogbWF4IGZ3IHRyYW5zZmVyIGlzIDEwMjRieXRlcywgYnV0IEkyQyBsaW1pdHMgaXQgdG8gMHhDMCAqLworI2RlZmluZSBQTjU0NF9NQVhfRldfREFUQQkoUE41NDRfTUFYX0kyQ19UUkFOU0ZFUiAtIFBONTQ0X0ZXX0hFQURFUl9TSVpFKQorCitzdHJ1Y3QgcG41NDRfZndfcGFja2V0IHsKKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7IC8qIHN0YXR1cyBpbiBhbnN3ZXIgKi8KKwl1bnNpZ25lZCBjaGFyIGxlbmd0aFsyXTsgLyogYmlnLWVuZGlhbiBvcmRlciAobXNmKSAqLworCXVuc2lnbmVkIGNoYXIgZGF0YVtQTjU0NF9NQVhfRldfREFUQV07Cit9OworCisjaWZkZWYgX19LRVJORUxfXworLyogYm9hcmQgY29uZmlnICovCitzdHJ1Y3QgcG41NDRfbmZjX3BsYXRmb3JtX2RhdGEgeworCWludCAoKnJlcXVlc3RfcmVzb3VyY2VzKSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CisJdm9pZCAoKmZyZWVfcmVzb3VyY2VzKSAodm9pZCk7CisJdm9pZCAoKmVuYWJsZSkgKGludCBmdyk7CisJaW50ICgqdGVzdCkgKHZvaWQpOworCXZvaWQgKCpkaXNhYmxlKSAodm9pZCk7Cit9OworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9QTjU0NF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnMzLmggYi9pbmNsdWRlL2xpbnV4L25mczMuaAppbmRleCBhYzMzODA2Li42Y2NmZTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mczMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mczMuaApAQCAtMTEsNiArMTEsOSBAQAogI2RlZmluZSBORlMzX01BWEdST1VQUwkJMTYKICNkZWZpbmUgTkZTM19GSFNJWkUJCTY0CiAjZGVmaW5lIE5GUzNfQ09PS0lFU0laRQkJNAorI2RlZmluZSBORlMzX0NSRUFURVZFUkZTSVpFCTgKKyNkZWZpbmUgTkZTM19DT09LSUVWRVJGU0laRQk4CisjZGVmaW5lIE5GUzNfV1JJVEVWRVJGU0laRQk4CiAjZGVmaW5lIE5GUzNfRklGT19ERVYJCSgtMSkKICNkZWZpbmUgTkZTM01PREVfRk1UCQkwMTcwMDAwCiAjZGVmaW5lIE5GUzNNT0RFX0RJUgkJMDA0MDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnM0LmggYi9pbmNsdWRlL2xpbnV4L25mczQuaAppbmRleCA0OTI1YjIyLi45YjQ2MzAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mczQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mczQuaApAQCAtMTExLDkgKzExMSwxMyBAQAogCiAjZGVmaW5lIEVYQ0hHSUQ0X0ZMQUdfU1VQUF9NT1ZFRF9SRUZFUgkJMHgwMDAwMDAwMQogI2RlZmluZSBFWENIR0lENF9GTEFHX1NVUFBfTU9WRURfTUlHUgkJMHgwMDAwMDAwMgorI2RlZmluZSBFWENIR0lENF9GTEFHX0JJTkRfUFJJTkNfU1RBVEVJRAkweDAwMDAwMTAwCisKICNkZWZpbmUgRVhDSEdJRDRfRkxBR19VU0VfTk9OX1BORlMJCTB4MDAwMTAwMDAKICNkZWZpbmUgRVhDSEdJRDRfRkxBR19VU0VfUE5GU19NRFMJCTB4MDAwMjAwMDAKICNkZWZpbmUgRVhDSEdJRDRfRkxBR19VU0VfUE5GU19EUwkJMHgwMDA0MDAwMAorI2RlZmluZSBFWENIR0lENF9GTEFHX01BU0tfUE5GUwkJCTB4MDAwNzAwMDAKKwogI2RlZmluZSBFWENIR0lENF9GTEFHX1VQRF9DT05GSVJNRURfUkVDX0EJMHg0MDAwMDAwMAogI2RlZmluZSBFWENIR0lENF9GTEFHX0NPTkZJUk1FRF9SCQkweDgwMDAwMDAwCiAvKgpAQCAtMTIxLDggKzEyNSw4IEBACiAgKiB0aGV5J3JlIHNldCBpbiB0aGUgYXJndW1lbnQgb3IgcmVzcG9uc2UsIGhhdmUgc2VwYXJhdGUKICAqIGludmFsaWQgZmxhZyBtYXNrcyBmb3IgYXJnIChfQSkgYW5kIHJlc3AgKF9SKS4KICAqLwotI2RlZmluZSBFWENIR0lENF9GTEFHX01BU0tfQQkJCTB4NDAwNzAwMDMKLSNkZWZpbmUgRVhDSEdJRDRfRkxBR19NQVNLX1IJCQkweDgwMDcwMDAzCisjZGVmaW5lIEVYQ0hHSUQ0X0ZMQUdfTUFTS19BCQkJMHg0MDA3MDEwMworI2RlZmluZSBFWENIR0lENF9GTEFHX01BU0tfUgkJCTB4ODAwNzAxMDMKIAogI2RlZmluZSBTRVE0X1NUQVRVU19DQl9QQVRIX0RPV04JCTB4MDAwMDAwMDEKICNkZWZpbmUgU0VRNF9TVEFUVVNfQ0JfR1NTX0NPTlRFWFRTX0VYUElSSU5HCTB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCmluZGV4IDQ1MmQ5NjQuLmIxOTc1NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaApAQCAtNDcsMTEgKzQ3LDYgQEAKIAl1NjQJCQljbF9jbGllbnRpZDsJLyogY29uc3RhbnQgKi8KIAl1bnNpZ25lZCBsb25nCQljbF9zdGF0ZTsKIAotCXN0cnVjdCByYl9yb290CQljbF9vcGVub3duZXJfaWQ7Ci0Jc3RydWN0IHJiX3Jvb3QJCWNsX2xvY2tvd25lcl9pZDsKLQotCXN0cnVjdCBsaXN0X2hlYWQJY2xfZGVsZWdhdGlvbnM7Ci0Jc3RydWN0IHJiX3Jvb3QJCWNsX3N0YXRlX293bmVyczsKIAlzcGlubG9ja190CQljbF9sb2NrOwogCiAJdW5zaWduZWQgbG9uZwkJY2xfbGVhc2VfdGltZTsKQEAgLTcxLDYgKzY2LDcgQEAKIAkgKi8KIAljaGFyCQkJY2xfaXBhZGRyWzQ4XTsKIAl1bnNpZ25lZCBjaGFyCQljbF9pZF91bmlxdWlmaWVyOworCXUzMgkJCWNsX2NiX2lkZW50OwkvKiB2NC4wIGNhbGxiYWNrIGlkZW50aWZpZXIgKi8KIAljb25zdCBzdHJ1Y3QgbmZzNF9taW5vcl92ZXJzaW9uX29wcyAqY2xfbXZvcHM7CiAjZW5kaWYgLyogQ09ORklHX05GU19WNCAqLwogCkBAIC0xNDgsNyArMTQ0LDE0IEBACiAJCQkJCQkgICB0aGF0IGFyZSBzdXBwb3J0ZWQgb24gdGhpcwogCQkJCQkJICAgZmlsZXN5c3RlbSAqLwogCXN0cnVjdCBwbmZzX2xheW91dGRyaXZlcl90eXBlICAqcG5mc19jdXJyX2xkOyAvKiBBY3RpdmUgbGF5b3V0IGRyaXZlciAqLworCXN0cnVjdCBycGNfd2FpdF9xdWV1ZQlyb2NfcnBjd2FpdHE7CisKKwkvKiB0aGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgcHJvdGVjdGVkIGJ5IG5mc19jbGllbnQtPmNsX2xvY2sgKi8KKwlzdHJ1Y3QgcmJfcm9vdAkJc3RhdGVfb3duZXJzOworCXN0cnVjdCByYl9yb290CQlvcGVub3duZXJfaWQ7CisJc3RydWN0IHJiX3Jvb3QJCWxvY2tvd25lcl9pZDsKICNlbmRpZgorCXN0cnVjdCBsaXN0X2hlYWQJZGVsZWdhdGlvbnM7CiAJdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBuZnNfc2VydmVyICopOwogCiAJYXRvbWljX3QgYWN0aXZlOyAvKiBLZWVwIHRyYWNlIG9mIGFueSBhY3Rpdml0eSB0byB0aGlzIHNlcnZlciAqLwpAQCAtMTk2LDYgKzE5OSw3IEBACiAJCQkJCQkgKiBvcCBmb3IgZHluYW1pYyByZXNpemluZyAqLwogCWludAkJdGFyZ2V0X21heF9zbG90czsJLyogU2V0IGJ5IENCX1JFQ0FMTF9TTE9UIGFzCiAJCQkJCQkgKiB0aGUgbmV3IG1heF9zbG90cyAqLworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRlOwogfTsKIAogc3RhdGljIGlubGluZSBpbnQgc2xvdF9pZHgoc3RydWN0IG5mczRfc2xvdF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmZzNF9zbG90ICpzcCkKQEAgLTIxMiw3ICsyMTYsNiBAQAogCXVuc2lnbmVkIGxvbmcJCQlzZXNzaW9uX3N0YXRlOwogCXUzMgkJCQloYXNoX2FsZzsKIAl1MzIJCQkJc3N2X2xlbjsKLQlzdHJ1Y3QgY29tcGxldGlvbgkJY29tcGxldGU7CiAKIAkvKiBUaGUgZm9yZSBhbmQgYmFjayBjaGFubmVsICovCiAJc3RydWN0IG5mczRfY2hhbm5lbF9hdHRycwlmY19hdHRyczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKaW5kZXggODBmMDcxOS4uYjAwNjg1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKQEAgLTIwOCw2ICsyMDgsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eDsKIAlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzIHNlcV9hcmdzOworCW5mczRfc3RhdGVpZCBzdGF0ZWlkOwogfTsKIAogc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyB7CkBAIC0yMjMsNyArMjI0LDYgQEAKIAlzdHJ1Y3QgbmZzNF9sYXlvdXRnZXRfYXJncyBhcmdzOwogCXN0cnVjdCBuZnM0X2xheW91dGdldF9yZXMgcmVzOwogCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICoqbHNlZ3BwOwotCWludCBzdGF0dXM7CiB9OwogCiBzdHJ1Y3QgbmZzNF9nZXRkZXZpY2VpbmZvX2FyZ3MgewpAQCAtMzE3LDYgKzMxNyw3IEBACiBzdHJ1Y3QgbmZzX2xvd25lciB7CiAJX191NjQJCQljbGllbnRpZDsKIAlfX3U2NAkJCWlkOworCWRldl90CQkJc19kZXY7CiB9OwogCiBzdHJ1Y3QgbmZzX2xvY2tfYXJncyB7CkBAIC00ODQsNiArNDg1LDcgQEAKIAlzdHJ1Y3QgbmZzX2ZoICoJCWZoOwogCXN0cnVjdCBuZnNfZmF0dHIgKglmYXR0cjsKIAl1bnNpZ25lZCBjaGFyCQlkX3R5cGU7CisJc3RydWN0IG5mc19zZXJ2ZXIgKglzZXJ2ZXI7CiB9OwogCiAvKgpAQCAtMTA4OSw3ICsxMDkxLDcgQEAKIAlpbnQJKCpwYXRoY29uZikgKHN0cnVjdCBuZnNfc2VydmVyICosIHN0cnVjdCBuZnNfZmggKiwKIAkJCSAgICAgc3RydWN0IG5mc19wYXRoY29uZiAqKTsKIAlpbnQJKCpzZXRfY2FwYWJpbGl0aWVzKShzdHJ1Y3QgbmZzX3NlcnZlciAqLCBzdHJ1Y3QgbmZzX2ZoICopOwotCV9fYmUzMiAqKCpkZWNvZGVfZGlyZW50KShzdHJ1Y3QgeGRyX3N0cmVhbSAqLCBzdHJ1Y3QgbmZzX2VudHJ5ICosIHN0cnVjdCBuZnNfc2VydmVyICosIGludCBwbHVzKTsKKwlpbnQJKCpkZWNvZGVfZGlyZW50KShzdHJ1Y3QgeGRyX3N0cmVhbSAqLCBzdHJ1Y3QgbmZzX2VudHJ5ICosIGludCk7CiAJdm9pZAkoKnJlYWRfc2V0dXApICAgKHN0cnVjdCBuZnNfcmVhZF9kYXRhICosIHN0cnVjdCBycGNfbWVzc2FnZSAqKTsKIAlpbnQJKCpyZWFkX2RvbmUpICAoc3RydWN0IHJwY190YXNrICosIHN0cnVjdCBuZnNfcmVhZF9kYXRhICopOwogCXZvaWQJKCp3cml0ZV9zZXR1cCkgIChzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKiwgc3RydWN0IHJwY19tZXNzYWdlICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCBjYjg0NWMxLi5hZTBkYzQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtNTE4LDYgKzUxOCw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzExSF9OQl9NSVNDCTB4MTMwMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xMUhfTkJfTElOSwkweDEzMDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX05CX01JU0MJMHgxNjAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NOQjE3SF9GMwkweDE3MDMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTEFOQ0UJCTB4MjAwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9MQU5DRV9IT01FCTB4MjAwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TQ1NJCQkweDIwMjAKQEAgLTE2NTAsNiArMTY1MSwxMSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY4MzYJCTB4NjgzNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY4MTIJCTB4Njg3MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY5MzMJCTB4NjkzMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzgxMjAJCTB4ODEyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzgyMjAJCTB4ODIyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzgyMjEJCTB4ODIyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzgzMjAJCTB4ODMyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzgzMjEJCTB4ODMyMQogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfM0RGWAkJMHgxMjFhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0RGWF9WT09ET08JMHgwMDAxCkBAIC0yMzYzLDYgKzIzNjksMTAgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4WF9TRAkweDIzODEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4WF9NTUMgMHgyMzgyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzOFhfTVMJMHgyMzgzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzODVfTVMJMHgyMzg4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzODhfU0QJMHgyMzkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzODhfRVNEIDB4MjM5MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzkwX01TCTB4MjM5MwogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfS09SRU5JWAkJMHgxOTgyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfS09SRU5JWF9KRVRDQVJERjAJMHgxNjAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BvbGwuaCBiL2luY2x1ZGUvbGludXgvcG9sbC5oCmluZGV4IDU2ZTc2YWYuLjFhMmNjZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG9sbC5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9sbC5oCkBAIC01Nyw3ICs1Nyw3IEBACiB9OwogCiAvKgotICogU3RydWN0dXJlcyBhbmQgaGVscGVycyBmb3Igc3lzX3BvbGwvc3lzX3BvbGwKKyAqIFN0cnVjdHVyZXMgYW5kIGhlbHBlcnMgZm9yIHNlbGVjdC9wb2xsIHN5c2NhbGwKICAqLwogc3RydWN0IHBvbGxfd3F1ZXVlcyB7CiAJcG9sbF90YWJsZSBwdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHBzLmggYi9pbmNsdWRlL2xpbnV4L3Bwcy5oCmluZGV4IDAxOTRhYjAuLmE5YmIxZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcHMuaApAQCAtMTE0LDExICsxMTQsMTggQEAKIAlzdHJ1Y3QgcHBzX2t0aW1lIHRpbWVvdXQ7CiB9OwogCitzdHJ1Y3QgcHBzX2JpbmRfYXJncyB7CisJaW50IHRzZm9ybWF0OwkvKiBmb3JtYXQgb2YgdGltZSBzdGFtcHMgKi8KKwlpbnQgZWRnZTsJLyogc2VsZWN0ZWQgZXZlbnQgdHlwZSAqLworCWludCBjb25zdW1lcjsJLyogc2VsZWN0ZWQga2VybmVsIGNvbnN1bWVyICovCit9OworCiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KIAogI2RlZmluZSBQUFNfR0VUUEFSQU1TCQlfSU9SKCdwJywgMHhhMSwgc3RydWN0IHBwc19rcGFyYW1zICopCiAjZGVmaW5lIFBQU19TRVRQQVJBTVMJCV9JT1coJ3AnLCAweGEyLCBzdHJ1Y3QgcHBzX2twYXJhbXMgKikKICNkZWZpbmUgUFBTX0dFVENBUAkJX0lPUigncCcsIDB4YTMsIGludCAqKQogI2RlZmluZSBQUFNfRkVUQ0gJCV9JT1dSKCdwJywgMHhhNCwgc3RydWN0IHBwc19mZGF0YSAqKQorI2RlZmluZSBQUFNfS0NfQklORAkJX0lPVygncCcsIDB4YTUsIHN0cnVjdCBwcHNfYmluZF9hcmdzICopCiAKICNlbmRpZiAvKiBfUFBTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bwc19rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgvcHBzX2tlcm5lbC5oCmluZGV4IGUwYTE5M2YuLjk0MDQ4NTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBzX2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgvcHBzX2tlcm5lbC5oCkBAIC0xOCw2ICsxOCw5IEBACiAgKiAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNpZm5kZWYgTElOVVhfUFBTX0tFUk5FTF9ICisjZGVmaW5lIExJTlVYX1BQU19LRVJORUxfSAorCiAjaW5jbHVkZSA8bGludXgvcHBzLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CkBAIC0yOCwxOCArMzEsMjggQEAKICAqIEdsb2JhbCBkZWZpbmVzCiAgKi8KIAorc3RydWN0IHBwc19kZXZpY2U7CisKIC8qIFRoZSBzcGVjaWZpYyBQUFMgc291cmNlIGluZm8gKi8KIHN0cnVjdCBwcHNfc291cmNlX2luZm8gewogCWNoYXIgbmFtZVtQUFNfTUFYX05BTUVfTEVOXTsJCS8qIHNpbWJvbGljIG5hbWUgKi8KIAljaGFyIHBhdGhbUFBTX01BWF9OQU1FX0xFTl07CQkvKiBwYXRoIG9mIGNvbm5lY3RlZCBkZXZpY2UgKi8KIAlpbnQgbW9kZTsJCQkJLyogUFBTJ3MgYWxsb3dlZCBtb2RlICovCiAKLQl2b2lkICgqZWNobykoaW50IHNvdXJjZSwgaW50IGV2ZW50LCB2b2lkICpkYXRhKTsgLyogUFBTIGVjaG8gZnVuY3Rpb24gKi8KKwl2b2lkICgqZWNobykoc3RydWN0IHBwc19kZXZpY2UgKnBwcywKKwkJCWludCBldmVudCwgdm9pZCAqZGF0YSk7CS8qIFBQUyBlY2hvIGZ1bmN0aW9uICovCiAKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiB9OwogCitzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUgeworI2lmZGVmIENPTkZJR19OVFBfUFBTCisJc3RydWN0IHRpbWVzcGVjIHRzX3JhdzsKKyNlbmRpZiAvKiBDT05GSUdfTlRQX1BQUyAqLworCXN0cnVjdCB0aW1lc3BlYyB0c19yZWFsOworfTsKKwogLyogVGhlIG1haW4gc3RydWN0ICovCiBzdHJ1Y3QgcHBzX2RldmljZSB7CiAJc3RydWN0IHBwc19zb3VyY2VfaW5mbyBpbmZvOwkJLyogUFNTIHNvdXJjZSBpbmZvICovCkBAIC01MiwzOCArNjUsNTYgQEAKIAlzdHJ1Y3QgcHBzX2t0aW1lIGNsZWFyX3R1OwogCWludCBjdXJyZW50X21vZGU7CQkJLyogUFBTIG1vZGUgYXQgZXZlbnQgdGltZSAqLwogCi0JaW50IGdvOwkJCQkJLyogUFBTIGV2ZW50IGlzIGFycml2ZWQ/ICovCisJdW5zaWduZWQgaW50IGxhc3RfZXY7CQkJLyogbGFzdCBQUFMgZXZlbnQgaWQgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsJCS8qIFBQUyBldmVudCBxdWV1ZSAqLwogCiAJdW5zaWduZWQgaW50IGlkOwkJCS8qIFBQUyBzb3VyY2UgdW5pcXVlIElEICovCiAJc3RydWN0IGNkZXYgY2RldjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0JaW50IGRldm5vOwogCXN0cnVjdCBmYXN5bmNfc3RydWN0ICphc3luY19xdWV1ZTsJLyogZmFzeW5jIG1ldGhvZCAqLwogCXNwaW5sb2NrX3QgbG9jazsKLQotCWF0b21pY190IHVzYWdlOwkJCQkvKiB1c2FnZSBjb3VudCAqLwogfTsKIAogLyoKICAqIEdsb2JhbCB2YXJpYWJsZXMKICAqLwogCi1leHRlcm4gc3BpbmxvY2tfdCBwcHNfaWRyX2xvY2s7Ci1leHRlcm4gc3RydWN0IGlkciBwcHNfaWRyOwotZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyBwcHNfaXJxX3RzW107Ci0KIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwcHNfYXR0cnNbXTsKIAogLyoKICAqIEV4cG9ydGVkIGZ1bmN0aW9ucwogICovCiAKLXN0cnVjdCBwcHNfZGV2aWNlICpwcHNfZ2V0X3NvdXJjZShpbnQgc291cmNlKTsKLWV4dGVybiB2b2lkIHBwc19wdXRfc291cmNlKHN0cnVjdCBwcHNfZGV2aWNlICpwcHMpOwotZXh0ZXJuIGludCBwcHNfcmVnaXN0ZXJfc291cmNlKHN0cnVjdCBwcHNfc291cmNlX2luZm8gKmluZm8sCi0JCQkJaW50IGRlZmF1bHRfcGFyYW1zKTsKLWV4dGVybiB2b2lkIHBwc191bnJlZ2lzdGVyX3NvdXJjZShpbnQgc291cmNlKTsKK2V4dGVybiBzdHJ1Y3QgcHBzX2RldmljZSAqcHBzX3JlZ2lzdGVyX3NvdXJjZSgKKwkJc3RydWN0IHBwc19zb3VyY2VfaW5mbyAqaW5mbywgaW50IGRlZmF1bHRfcGFyYW1zKTsKK2V4dGVybiB2b2lkIHBwc191bnJlZ2lzdGVyX3NvdXJjZShzdHJ1Y3QgcHBzX2RldmljZSAqcHBzKTsKIGV4dGVybiBpbnQgcHBzX3JlZ2lzdGVyX2NkZXYoc3RydWN0IHBwc19kZXZpY2UgKnBwcyk7CiBleHRlcm4gdm9pZCBwcHNfdW5yZWdpc3Rlcl9jZGV2KHN0cnVjdCBwcHNfZGV2aWNlICpwcHMpOwotZXh0ZXJuIHZvaWQgcHBzX2V2ZW50KGludCBzb3VyY2UsIHN0cnVjdCBwcHNfa3RpbWUgKnRzLCBpbnQgZXZlbnQsIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgcHBzX2V2ZW50KHN0cnVjdCBwcHNfZGV2aWNlICpwcHMsCisJCXN0cnVjdCBwcHNfZXZlbnRfdGltZSAqdHMsIGludCBldmVudCwgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lc3BlY190b19wcHNfa3RpbWUoc3RydWN0IHBwc19rdGltZSAqa3QsCisJCXN0cnVjdCB0aW1lc3BlYyB0cykKK3sKKwlrdC0+c2VjID0gdHMudHZfc2VjOworCWt0LT5uc2VjID0gdHMudHZfbnNlYzsKK30KKworI2lmZGVmIENPTkZJR19OVFBfUFBTCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcHNfZ2V0X3RzKHN0cnVjdCBwcHNfZXZlbnRfdGltZSAqdHMpCit7CisJZ2V0bnN0aW1lX3Jhd19hbmRfcmVhbCgmdHMtPnRzX3JhdywgJnRzLT50c19yZWFsKTsKK30KKworI2Vsc2UgLyogQ09ORklHX05UUF9QUFMgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHBwc19nZXRfdHMoc3RydWN0IHBwc19ldmVudF90aW1lICp0cykKK3sKKwlnZXRuc3RpbWVvZmRheSgmdHMtPnRzX3JlYWwpOworfQorCisjZW5kaWYgLyogQ09ORklHX05UUF9QUFMgKi8KKworI2VuZGlmIC8qIExJTlVYX1BQU19LRVJORUxfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByaW50ay5oIGIvaW5jbHVkZS9saW51eC9wcmludGsuaAppbmRleCBiNzcyY2E1Li5lZTA0OGU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ByaW50ay5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJpbnRrLmgKQEAgLTQsMTQgKzQsMTQgQEAKIGV4dGVybiBjb25zdCBjaGFyIGxpbnV4X2Jhbm5lcltdOwogZXh0ZXJuIGNvbnN0IGNoYXIgbGludXhfcHJvY19iYW5uZXJbXTsKIAotI2RlZmluZQlLRVJOX0VNRVJHCSI8MD4iCS8qIHN5c3RlbSBpcyB1bnVzYWJsZQkJCSovCi0jZGVmaW5lCUtFUk5fQUxFUlQJIjwxPiIJLyogYWN0aW9uIG11c3QgYmUgdGFrZW4gaW1tZWRpYXRlbHkJKi8KLSNkZWZpbmUJS0VSTl9DUklUCSI8Mj4iCS8qIGNyaXRpY2FsIGNvbmRpdGlvbnMJCQkqLwotI2RlZmluZQlLRVJOX0VSUgkiPDM+IgkvKiBlcnJvciBjb25kaXRpb25zCQkJKi8KLSNkZWZpbmUJS0VSTl9XQVJOSU5HCSI8ND4iCS8qIHdhcm5pbmcgY29uZGl0aW9ucwkJCSovCi0jZGVmaW5lCUtFUk5fTk9USUNFCSI8NT4iCS8qIG5vcm1hbCBidXQgc2lnbmlmaWNhbnQgY29uZGl0aW9uCSovCi0jZGVmaW5lCUtFUk5fSU5GTwkiPDY+IgkvKiBpbmZvcm1hdGlvbmFsCQkJKi8KLSNkZWZpbmUJS0VSTl9ERUJVRwkiPDc+IgkvKiBkZWJ1Zy1sZXZlbCBtZXNzYWdlcwkJCSovCisjZGVmaW5lIEtFUk5fRU1FUkcJIjwwPiIJLyogc3lzdGVtIGlzIHVudXNhYmxlCQkJKi8KKyNkZWZpbmUgS0VSTl9BTEVSVAkiPDE+IgkvKiBhY3Rpb24gbXVzdCBiZSB0YWtlbiBpbW1lZGlhdGVseQkqLworI2RlZmluZSBLRVJOX0NSSVQJIjwyPiIJLyogY3JpdGljYWwgY29uZGl0aW9ucwkJCSovCisjZGVmaW5lIEtFUk5fRVJSCSI8Mz4iCS8qIGVycm9yIGNvbmRpdGlvbnMJCQkqLworI2RlZmluZSBLRVJOX1dBUk5JTkcJIjw0PiIJLyogd2FybmluZyBjb25kaXRpb25zCQkJKi8KKyNkZWZpbmUgS0VSTl9OT1RJQ0UJIjw1PiIJLyogbm9ybWFsIGJ1dCBzaWduaWZpY2FudCBjb25kaXRpb24JKi8KKyNkZWZpbmUgS0VSTl9JTkZPCSI8Nj4iCS8qIGluZm9ybWF0aW9uYWwJCQkqLworI2RlZmluZSBLRVJOX0RFQlVHCSI8Nz4iCS8qIGRlYnVnLWxldmVsIG1lc3NhZ2VzCQkJKi8KIAogLyogVXNlIHRoZSBkZWZhdWx0IGtlcm5lbCBsb2dsZXZlbCAqLwogI2RlZmluZSBLRVJOX0RFRkFVTFQJIjxkPiIKQEAgLTIwLDcgKzIwLDcgQEAKICAqIGxpbmUgdGhhdCBoYWQgbm8gZW5jbG9zaW5nIFxuKS4gT25seSB0byBiZSB1c2VkIGJ5IGNvcmUvYXJjaCBjb2RlCiAgKiBkdXJpbmcgZWFybHkgYm9vdHVwIChhIGNvbnRpbnVlZCBsaW5lIGlzIG5vdCBTTVAtc2FmZSBvdGhlcndpc2UpLgogICovCi0jZGVmaW5lCUtFUk5fQ09OVAkiPGM+IgorI2RlZmluZSBLRVJOX0NPTlQJIjxjPiIKIAogZXh0ZXJuIGludCBjb25zb2xlX3ByaW50a1tdOwogCkBAIC0yOSw2ICsyOSwxNyBAQAogI2RlZmluZSBtaW5pbXVtX2NvbnNvbGVfbG9nbGV2ZWwgKGNvbnNvbGVfcHJpbnRrWzJdKQogI2RlZmluZSBkZWZhdWx0X2NvbnNvbGVfbG9nbGV2ZWwgKGNvbnNvbGVfcHJpbnRrWzNdKQogCitzdGF0aWMgaW5saW5lIHZvaWQgY29uc29sZV9zaWxlbnQodm9pZCkKK3sKKwljb25zb2xlX2xvZ2xldmVsID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvbnNvbGVfdmVyYm9zZSh2b2lkKQoreworCWlmIChjb25zb2xlX2xvZ2xldmVsKQorCQljb25zb2xlX2xvZ2xldmVsID0gMTU7Cit9CisKIHN0cnVjdCB2YV9mb3JtYXQgewogCWNvbnN0IGNoYXIgKmZtdDsKIAl2YV9saXN0ICp2YTsKQEAgLTY1LDExICs3NiwyNyBAQAogICovCiAjZGVmaW5lIEhXX0VSUgkJIltIYXJkd2FyZSBFcnJvcl06ICIKIAorLyoKKyAqIER1bW15IHByaW50ayBmb3IgZGlzYWJsZWQgZGVidWdnaW5nIHN0YXRlbWVudHMgdG8gdXNlIHdoaWxzdCBtYWludGFpbmluZworICogZ2NjJ3MgZm9ybWF0IGFuZCBzaWRlLWVmZmVjdCBjaGVja2luZy4KKyAqLworc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK2ludCBub19wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiBhc21saW5rYWdlIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQordm9pZCBlYXJseV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOworCitleHRlcm4gaW50IHByaW50a19uZWVkc19jcHUoaW50IGNwdSk7CitleHRlcm4gdm9pZCBwcmludGtfdGljayh2b2lkKTsKKwogI2lmZGVmIENPTkZJR19QUklOVEsKLWFzbWxpbmthZ2UgaW50IHZwcmludGsoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCi0JX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAwKSkpOwotYXNtbGlua2FnZSBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKLQlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkgX19jb2xkOworYXNtbGlua2FnZSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDApKSkKK2ludCB2cHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTsKK2FzbWxpbmthZ2UgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpIF9fY29sZAoraW50IHByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7CiAKIC8qCiAgKiBQbGVhc2UgZG9uJ3QgdXNlIHByaW50a19yYXRlbGltaXQoKSwgYmVjYXVzZSBpdCBzaGFyZXMgcmF0ZWxpbWl0aW5nIHN0YXRlCkBAIC04Myw5OSArMTEwLDU2IEBACiAKIGV4dGVybiBpbnQgcHJpbnRrX2RlbGF5X21zZWM7CiBleHRlcm4gaW50IGRtZXNnX3Jlc3RyaWN0OwotCi0vKgotICogUHJpbnQgYSBvbmUtdGltZSBtZXNzYWdlIChhbmFsb2dvdXMgdG8gV0FSTl9PTkNFKCkgZXQgYWwpOgotICovCi0jZGVmaW5lIHByaW50a19vbmNlKHguLi4pICh7CQkJXAotCXN0YXRpYyBib29sIF9fcHJpbnRfb25jZTsJCVwKLQkJCQkJCVwKLQlpZiAoIV9fcHJpbnRfb25jZSkgewkJCVwKLQkJX19wcmludF9vbmNlID0gdHJ1ZTsJCVwKLQkJcHJpbnRrKHgpOwkJCVwKLQl9CQkJCQlcCi19KQorZXh0ZXJuIGludCBrcHRyX3Jlc3RyaWN0OwogCiB2b2lkIGxvZ19idWZfa2V4ZWNfc2V0dXAodm9pZCk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgdnByaW50ayhjb25zdCBjaGFyICpzLCB2YV9saXN0IGFyZ3MpCi0JX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAwKSkpOwotc3RhdGljIGlubGluZSBpbnQgdnByaW50ayhjb25zdCBjaGFyICpzLCB2YV9saXN0IGFyZ3MpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHByaW50ayhjb25zdCBjaGFyICpzLCAuLi4pCi0JX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwotc3RhdGljIGlubGluZSBpbnQgX19jb2xkIHByaW50ayhjb25zdCBjaGFyICpzLCAuLi4pIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHByaW50a19yYXRlbGltaXQodm9pZCkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSBib29sIHByaW50a190aW1lZF9yYXRlbGltaXQodW5zaWduZWQgbG9uZyAqY2FsbGVyX2ppZmZpZXMsIFwKLQkJCQkJICB1bnNpZ25lZCBpbnQgaW50ZXJ2YWxfbXNlYykJXAotCQl7IHJldHVybiBmYWxzZTsgfQotCi0vKiBObyBlZmZlY3QsIGJ1dCB3ZSBzdGlsbCBnZXQgdHlwZSBjaGVja2luZyBldmVuIGluIHRoZSAhUFJJTlRLIGNhc2U6ICovCi0jZGVmaW5lIHByaW50a19vbmNlKHguLi4pIHByaW50ayh4KQorc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDApKSkKK2ludCB2cHJpbnRrKGNvbnN0IGNoYXIgKnMsIHZhX2xpc3QgYXJncykKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpIF9fY29sZAoraW50IHByaW50ayhjb25zdCBjaGFyICpzLCAuLi4pCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCBwcmludGtfcmF0ZWxpbWl0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGJvb2wgcHJpbnRrX3RpbWVkX3JhdGVsaW1pdCh1bnNpZ25lZCBsb25nICpjYWxsZXJfamlmZmllcywKKwkJCQkJICB1bnNpZ25lZCBpbnQgaW50ZXJ2YWxfbXNlYykKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2dfYnVmX2tleGVjX3NldHVwKHZvaWQpCiB7CiB9CiAjZW5kaWYKIAotLyoKLSAqIER1bW15IHByaW50ayBmb3IgZGlzYWJsZWQgZGVidWdnaW5nIHN0YXRlbWVudHMgdG8gdXNlIHdoaWxzdCBtYWludGFpbmluZwotICogZ2NjJ3MgZm9ybWF0IGFuZCBzaWRlLWVmZmVjdCBjaGVja2luZy4KLSAqLwotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKLWludCBub19wcmludGsoY29uc3QgY2hhciAqcywgLi4uKSB7IHJldHVybiAwOyB9Ci0KLWV4dGVybiBpbnQgcHJpbnRrX25lZWRzX2NwdShpbnQgY3B1KTsKLWV4dGVybiB2b2lkIHByaW50a190aWNrKHZvaWQpOwotCi1leHRlcm4gdm9pZCBhc21saW5rYWdlIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSkKLQllYXJseV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uc29sZV9zaWxlbnQodm9pZCkKLXsKLQljb25zb2xlX2xvZ2xldmVsID0gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvbnNvbGVfdmVyYm9zZSh2b2lkKQotewotCWlmIChjb25zb2xlX2xvZ2xldmVsKQotCQljb25zb2xlX2xvZ2xldmVsID0gMTU7Ci19Ci0KIGV4dGVybiB2b2lkIGR1bXBfc3RhY2sodm9pZCkgX19jb2xkOwogCi1lbnVtIHsKLQlEVU1QX1BSRUZJWF9OT05FLAotCURVTVBfUFJFRklYX0FERFJFU1MsCi0JRFVNUF9QUkVGSVhfT0ZGU0VUCi19OwotZXh0ZXJuIHZvaWQgaGV4X2R1bXBfdG9fYnVmZmVyKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKLQkJCQlpbnQgcm93c2l6ZSwgaW50IGdyb3Vwc2l6ZSwKLQkJCQljaGFyICpsaW5lYnVmLCBzaXplX3QgbGluZWJ1ZmxlbiwgYm9vbCBhc2NpaSk7Ci1leHRlcm4gdm9pZCBwcmludF9oZXhfZHVtcChjb25zdCBjaGFyICpsZXZlbCwgY29uc3QgY2hhciAqcHJlZml4X3N0ciwKLQkJCQlpbnQgcHJlZml4X3R5cGUsIGludCByb3dzaXplLCBpbnQgZ3JvdXBzaXplLAotCQkJCWNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgYm9vbCBhc2NpaSk7Ci1leHRlcm4gdm9pZCBwcmludF9oZXhfZHVtcF9ieXRlcyhjb25zdCBjaGFyICpwcmVmaXhfc3RyLCBpbnQgcHJlZml4X3R5cGUsCi0JCQljb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pOwotCiAjaWZuZGVmIHByX2ZtdAogI2RlZmluZSBwcl9mbXQoZm10KSBmbXQKICNlbmRpZgogCiAjZGVmaW5lIHByX2VtZXJnKGZtdCwgLi4uKSBcCi0gICAgICAgIHByaW50ayhLRVJOX0VNRVJHIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorCXByaW50ayhLRVJOX0VNRVJHIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBwcl9hbGVydChmbXQsIC4uLikgXAotICAgICAgICBwcmludGsoS0VSTl9BTEVSVCBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKKwlwcmludGsoS0VSTl9BTEVSVCBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgcHJfY3JpdChmbXQsIC4uLikgXAotICAgICAgICBwcmludGsoS0VSTl9DUklUIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorCXByaW50ayhLRVJOX0NSSVQgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIHByX2VycihmbXQsIC4uLikgXAotICAgICAgICBwcmludGsoS0VSTl9FUlIgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisJcHJpbnRrKEtFUk5fRVJSIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBwcl93YXJuaW5nKGZtdCwgLi4uKSBcCi0gICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisJcHJpbnRrKEtFUk5fV0FSTklORyBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgcHJfd2FybiBwcl93YXJuaW5nCiAjZGVmaW5lIHByX25vdGljZShmbXQsIC4uLikgXAotICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisJcHJpbnRrKEtFUk5fTk9USUNFIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBwcl9pbmZvKGZtdCwgLi4uKSBcCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisJcHJpbnRrKEtFUk5fSU5GTyBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgcHJfY29udChmbXQsIC4uLikgXAogCXByaW50ayhLRVJOX0NPTlQgZm10LCAjI19fVkFfQVJHU19fKQogCkBAIC0xODUsNyArMTY5LDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKICNlbHNlCiAjZGVmaW5lIHByX2RldmVsKGZtdCwgLi4uKSBcCi0JKHsgaWYgKDApIHByaW50ayhLRVJOX0RFQlVHIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKTsgMDsgfSkKKwlub19wcmludGsoS0VSTl9ERUJVRyBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKICNlbmRpZgogCiAvKiBJZiB5b3UgYXJlIHdyaXRpbmcgYSBkcml2ZXIsIHBsZWFzZSB1c2UgZGV2X2RiZyBpbnN0ZWFkICovCkBAIC0xOTgsNyArMTgyLDUxIEBACiAJZHluYW1pY19wcl9kZWJ1ZyhmbXQsICMjX19WQV9BUkdTX18pCiAjZWxzZQogI2RlZmluZSBwcl9kZWJ1ZyhmbXQsIC4uLikgXAotCSh7IGlmICgwKSBwcmludGsoS0VSTl9ERUJVRyBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXyk7IDA7IH0pCisJbm9fcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisjZW5kaWYKKworLyoKKyAqIFByaW50IGEgb25lLXRpbWUgbWVzc2FnZSAoYW5hbG9nb3VzIHRvIFdBUk5fT05DRSgpIGV0IGFsKToKKyAqLworCisjaWZkZWYgQ09ORklHX1BSSU5USworI2RlZmluZSBwcmludGtfb25jZShmbXQsIC4uLikJCQlcCisoewkJCQkJCVwKKwlzdGF0aWMgYm9vbCBfX3ByaW50X29uY2U7CQlcCisJCQkJCQlcCisJaWYgKCFfX3ByaW50X29uY2UpIHsJCQlcCisJCV9fcHJpbnRfb25jZSA9IHRydWU7CQlcCisJCXByaW50ayhmbXQsICMjX19WQV9BUkdTX18pOwlcCisJfQkJCQkJXAorfSkKKyNlbHNlCisjZGVmaW5lIHByaW50a19vbmNlKGZtdCwgLi4uKQkJCVwKKwlub19wcmludGsoZm10LCAjI19fVkFfQVJHU19fKQorI2VuZGlmCisKKyNkZWZpbmUgcHJfZW1lcmdfb25jZShmbXQsIC4uLikJCQkJCVwKKwlwcmludGtfb25jZShLRVJOX0VNRVJHIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBwcl9hbGVydF9vbmNlKGZtdCwgLi4uKQkJCQkJXAorCXByaW50a19vbmNlKEtFUk5fQUxFUlQgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIHByX2NyaXRfb25jZShmbXQsIC4uLikJCQkJCVwKKwlwcmludGtfb25jZShLRVJOX0NSSVQgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIHByX2Vycl9vbmNlKGZtdCwgLi4uKQkJCQkJXAorCXByaW50a19vbmNlKEtFUk5fRVJSIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBwcl93YXJuX29uY2UoZm10LCAuLi4pCQkJCQlcCisJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBwcl9ub3RpY2Vfb25jZShmbXQsIC4uLikJCQkJXAorCXByaW50a19vbmNlKEtFUk5fTk9USUNFIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBwcl9pbmZvX29uY2UoZm10LCAuLi4pCQkJCQlcCisJcHJpbnRrX29uY2UoS0VSTl9JTkZPIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBwcl9jb250X29uY2UoZm10LCAuLi4pCQkJCQlcCisJcHJpbnRrX29uY2UoS0VSTl9DT05UIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorLyogSWYgeW91IGFyZSB3cml0aW5nIGEgZHJpdmVyLCBwbGVhc2UgdXNlIGRldl9kYmcgaW5zdGVhZCAqLworI2lmIGRlZmluZWQoREVCVUcpCisjZGVmaW5lIHByX2RlYnVnX29uY2UoZm10LCAuLi4pCQkJCQlcCisJcHJpbnRrX29uY2UoS0VSTl9ERUJVRyBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIHByX2RlYnVnX29uY2UoZm10LCAuLi4pCQkJCQlcCisJbm9fcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCiAjZW5kaWYKIAogLyoKQEAgLTIwNiw3ICsyMzQsOCBAQAogICogbm8gbG9jYWwgcmF0ZWxpbWl0X3N0YXRlIHVzZWQgaW4gdGhlICFQUklOVEsgY2FzZQogICovCiAjaWZkZWYgQ09ORklHX1BSSU5USwotI2RlZmluZSBwcmludGtfcmF0ZWxpbWl0ZWQoZm10LCAuLi4pICAoewkJCQlcCisjZGVmaW5lIHByaW50a19yYXRlbGltaXRlZChmbXQsIC4uLikJCQkJCVwKKyh7CQkJCQkJCQkJXAogCXN0YXRpYyBERUZJTkVfUkFURUxJTUlUX1NUQVRFKF9ycywJCQkJXAogCQkJCSAgICAgIERFRkFVTFRfUkFURUxJTUlUX0lOVEVSVkFMLAlcCiAJCQkJICAgICAgREVGQVVMVF9SQVRFTElNSVRfQlVSU1QpOwkJXApAQCAtMjE1LDM0ICsyNDQsNTkgQEAKIAkJcHJpbnRrKGZtdCwgIyNfX1ZBX0FSR1NfXyk7CQkJCVwKIH0pCiAjZWxzZQotLyogTm8gZWZmZWN0LCBidXQgd2Ugc3RpbGwgZ2V0IHR5cGUgY2hlY2tpbmcgZXZlbiBpbiB0aGUgIVBSSU5USyBjYXNlOiAqLwotI2RlZmluZSBwcmludGtfcmF0ZWxpbWl0ZWQgcHJpbnRrCisjZGVmaW5lIHByaW50a19yYXRlbGltaXRlZChmbXQsIC4uLikJCQkJCVwKKwlub19wcmludGsoZm10LCAjI19fVkFfQVJHU19fKQogI2VuZGlmCiAKLSNkZWZpbmUgcHJfZW1lcmdfcmF0ZWxpbWl0ZWQoZm10LCAuLi4pIFwKKyNkZWZpbmUgcHJfZW1lcmdfcmF0ZWxpbWl0ZWQoZm10LCAuLi4pCQkJCQlcCiAJcHJpbnRrX3JhdGVsaW1pdGVkKEtFUk5fRU1FUkcgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCi0jZGVmaW5lIHByX2FsZXJ0X3JhdGVsaW1pdGVkKGZtdCwgLi4uKSBcCisjZGVmaW5lIHByX2FsZXJ0X3JhdGVsaW1pdGVkKGZtdCwgLi4uKQkJCQkJXAogCXByaW50a19yYXRlbGltaXRlZChLRVJOX0FMRVJUIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQotI2RlZmluZSBwcl9jcml0X3JhdGVsaW1pdGVkKGZtdCwgLi4uKSBcCisjZGVmaW5lIHByX2NyaXRfcmF0ZWxpbWl0ZWQoZm10LCAuLi4pCQkJCQlcCiAJcHJpbnRrX3JhdGVsaW1pdGVkKEtFUk5fQ1JJVCBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKLSNkZWZpbmUgcHJfZXJyX3JhdGVsaW1pdGVkKGZtdCwgLi4uKSBcCisjZGVmaW5lIHByX2Vycl9yYXRlbGltaXRlZChmbXQsIC4uLikJCQkJCVwKIAlwcmludGtfcmF0ZWxpbWl0ZWQoS0VSTl9FUlIgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCi0jZGVmaW5lIHByX3dhcm5pbmdfcmF0ZWxpbWl0ZWQoZm10LCAuLi4pIFwKKyNkZWZpbmUgcHJfd2Fybl9yYXRlbGltaXRlZChmbXQsIC4uLikJCQkJCVwKIAlwcmludGtfcmF0ZWxpbWl0ZWQoS0VSTl9XQVJOSU5HIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQotI2RlZmluZSBwcl93YXJuX3JhdGVsaW1pdGVkIHByX3dhcm5pbmdfcmF0ZWxpbWl0ZWQKLSNkZWZpbmUgcHJfbm90aWNlX3JhdGVsaW1pdGVkKGZtdCwgLi4uKSBcCisjZGVmaW5lIHByX25vdGljZV9yYXRlbGltaXRlZChmbXQsIC4uLikJCQkJCVwKIAlwcmludGtfcmF0ZWxpbWl0ZWQoS0VSTl9OT1RJQ0UgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCi0jZGVmaW5lIHByX2luZm9fcmF0ZWxpbWl0ZWQoZm10LCAuLi4pIFwKKyNkZWZpbmUgcHJfaW5mb19yYXRlbGltaXRlZChmbXQsIC4uLikJCQkJCVwKIAlwcmludGtfcmF0ZWxpbWl0ZWQoS0VSTl9JTkZPIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQogLyogbm8gcHJfY29udF9yYXRlbGltaXRlZCwgZG9uJ3QgZG8gdGhhdC4uLiAqLwogLyogSWYgeW91IGFyZSB3cml0aW5nIGEgZHJpdmVyLCBwbGVhc2UgdXNlIGRldl9kYmcgaW5zdGVhZCAqLwogI2lmIGRlZmluZWQoREVCVUcpCi0jZGVmaW5lIHByX2RlYnVnX3JhdGVsaW1pdGVkKGZtdCwgLi4uKSBcCisjZGVmaW5lIHByX2RlYnVnX3JhdGVsaW1pdGVkKGZtdCwgLi4uKQkJCQkJXAogCXByaW50a19yYXRlbGltaXRlZChLRVJOX0RFQlVHIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQogI2Vsc2UKICNkZWZpbmUgcHJfZGVidWdfcmF0ZWxpbWl0ZWQoZm10LCAuLi4pIFwKLQkoeyBpZiAoMCkgcHJpbnRrX3JhdGVsaW1pdGVkKEtFUk5fREVCVUcgcHJfZm10KGZtdCksIFwKLQkJCQkgICAgICMjX19WQV9BUkdTX18pOyAwOyB9KQorCW5vX3ByaW50ayhLRVJOX0RFQlVHIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorI2VuZGlmCisKK2VudW0geworCURVTVBfUFJFRklYX05PTkUsCisJRFVNUF9QUkVGSVhfQUREUkVTUywKKwlEVU1QX1BSRUZJWF9PRkZTRVQKK307CitleHRlcm4gdm9pZCBoZXhfZHVtcF90b19idWZmZXIoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAorCQkJICAgICAgIGludCByb3dzaXplLCBpbnQgZ3JvdXBzaXplLAorCQkJICAgICAgIGNoYXIgKmxpbmVidWYsIHNpemVfdCBsaW5lYnVmbGVuLCBib29sIGFzY2lpKTsKKyNpZmRlZiBDT05GSUdfUFJJTlRLCitleHRlcm4gdm9pZCBwcmludF9oZXhfZHVtcChjb25zdCBjaGFyICpsZXZlbCwgY29uc3QgY2hhciAqcHJlZml4X3N0ciwKKwkJCSAgIGludCBwcmVmaXhfdHlwZSwgaW50IHJvd3NpemUsIGludCBncm91cHNpemUsCisJCQkgICBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIGJvb2wgYXNjaWkpOworZXh0ZXJuIHZvaWQgcHJpbnRfaGV4X2R1bXBfYnl0ZXMoY29uc3QgY2hhciAqcHJlZml4X3N0ciwgaW50IHByZWZpeF90eXBlLAorCQkJCSBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmludF9oZXhfZHVtcChjb25zdCBjaGFyICpsZXZlbCwgY29uc3QgY2hhciAqcHJlZml4X3N0ciwKKwkJCQkgIGludCBwcmVmaXhfdHlwZSwgaW50IHJvd3NpemUsIGludCBncm91cHNpemUsCisJCQkJICBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIGJvb2wgYXNjaWkpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfaGV4X2R1bXBfYnl0ZXMoY29uc3QgY2hhciAqcHJlZml4X3N0ciwgaW50IHByZWZpeF90eXBlLAorCQkJCQljb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7Cit9CisKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaCBiL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaAppbmRleCBkMWE5MTkzLi4yMjNiMTRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKKysrIGIvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCkBAIC0zMSw4ICszMSw5IEBACiAjZGVmaW5lIHF1b3RhX2Vycm9yKHNiLCBmbXQsIGFyZ3MuLi4pIFwKIAlfX3F1b3RhX2Vycm9yKChzYiksIF9fZnVuY19fLCBmbXQgLCAjIyBhcmdzKQogCi1leHRlcm4gdm9pZCBfX3F1b3RhX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmZ1bmMsCi0JCQkgY29uc3QgY2hhciAqZm10LCAuLi4pOworZXh0ZXJuIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCit2b2lkIF9fcXVvdGFfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqZnVuYywKKwkJICAgY29uc3QgY2hhciAqZm10LCAuLi4pOwogCiAvKgogICogZGVjbGFyYXRpb24gb2YgcXVvdGFfZnVuY3Rpb24gY2FsbHMgaW4ga2VybmVsLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvYWI4NTAwLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9hYjg1MDAuaAppbmRleCBmNTA5ODc3Li42YTIxMGYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9hYjg1MDAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9hYjg1MDAuaApAQCAtMTEsMTUgKzExLDE3IEBACiAjZGVmaW5lIF9fTElOVVhfTUZEX0FCODUwMF9SRUdVTEFUT1JfSAogCiAvKiBBQjg1MDAgcmVndWxhdG9ycyAqLwotI2RlZmluZSBBQjg1MDBfTERPX0FVWDEgICAgICAgICAwCi0jZGVmaW5lIEFCODUwMF9MRE9fQVVYMiAgICAgICAgIDEKLSNkZWZpbmUgQUI4NTAwX0xET19BVVgzICAgICAgICAgMgotI2RlZmluZSBBQjg1MDBfTERPX0lOVENPUkUgICAgICAzCi0jZGVmaW5lIEFCODUwMF9MRE9fVFZPVVQgICAgICAgIDQKLSNkZWZpbmUgQUI4NTAwX0xET19BVURJTwk1Ci0jZGVmaW5lIEFCODUwMF9MRE9fQU5BTUlDMSAgICAgIDYKLSNkZWZpbmUgQUI4NTAwX0xET19BTkFNSUMyICAgICAgNwotI2RlZmluZSBBQjg1MDBfTERPX0RNSUMgICAgICAgICA4Ci0jZGVmaW5lIEFCODUwMF9MRE9fQU5BICAgICAgICAgIDkKLQorZW51bSBhYjg1MDBfcmVndWxhdG9yX2lkIHsKKwlBQjg1MDBfTERPX0FVWDEsCisJQUI4NTAwX0xET19BVVgyLAorCUFCODUwMF9MRE9fQVVYMywKKwlBQjg1MDBfTERPX0lOVENPUkUsCisJQUI4NTAwX0xET19UVk9VVCwKKwlBQjg1MDBfTERPX0FVRElPLAorCUFCODUwMF9MRE9fQU5BTUlDMSwKKwlBQjg1MDBfTERPX0FOQU1JQzIsCisJQUI4NTAwX0xET19ETUlDLAorCUFCODUwMF9MRE9fQU5BLAorCUFCODUwMF9OVU1fUkVHVUxBVE9SUywKK307CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oCmluZGV4IGViZDc0NzIuLjc5NTRmNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaApAQCAtMTU0LDYgKzE1NCw3IEBACiAJCQkJICAgaW50IG1pbl91ViwgaW50IG1heF91Vik7CiBpbnQgcmVndWxhdG9yX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciwgaW50IG1pbl91ViwgaW50IG1heF91Vik7CiBpbnQgcmVndWxhdG9yX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcik7CitpbnQgcmVndWxhdG9yX3N5bmNfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IpOwogaW50IHJlZ3VsYXRvcl9zZXRfY3VycmVudF9saW1pdChzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IsCiAJCQkgICAgICAgaW50IG1pbl91QSwgaW50IG1heF91QSk7CiBpbnQgcmVndWxhdG9yX2dldF9jdXJyZW50X2xpbWl0KHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCmluZGV4IDU5MmNkN2MuLmI4ZWQxNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCkBAIC00Miw3ICs0MiwxMSBAQAogICoKICAqIEBzZXRfdm9sdGFnZTogU2V0IHRoZSB2b2x0YWdlIGZvciB0aGUgcmVndWxhdG9yIHdpdGhpbiB0aGUgcmFuZ2Ugc3BlY2lmaWVkLgogICogICAgICAgICAgICAgICBUaGUgZHJpdmVyIHNob3VsZCBzZWxlY3QgdGhlIHZvbHRhZ2UgY2xvc2VzdCB0byBtaW5fdVYuCisgKiBAc2V0X3ZvbHRhZ2Vfc2VsOiBTZXQgdGhlIHZvbHRhZ2UgZm9yIHRoZSByZWd1bGF0b3IgdXNpbmcgdGhlIHNwZWNpZmllZAorICogICAgICAgICAgICAgICAgICAgc2VsZWN0b3IuCiAgKiBAZ2V0X3ZvbHRhZ2U6IFJldHVybiB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgdm9sdGFnZSBmb3IgdGhlIHJlZ3VsYXRvci4KKyAqIEBnZXRfdm9sdGFnZV9zZWw6IFJldHVybiB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgdm9sdGFnZSBzZWxlY3RvciBmb3IgdGhlCisgKiAgICAgICAgICAgICAgICAgICByZWd1bGF0b3IuCiAgKiBAbGlzdF92b2x0YWdlOiBSZXR1cm4gb25lIG9mIHRoZSBzdXBwb3J0ZWQgdm9sdGFnZXMsIGluIG1pY3Jvdm9sdHM7IHplcm8KICAqCWlmIHRoZSBzZWxlY3RvciBpbmRpY2F0ZXMgYSB2b2x0YWdlIHRoYXQgaXMgdW51c2FibGUgb24gdGhpcyBzeXN0ZW07CiAgKglvciBuZWdhdGl2ZSBlcnJuby4gIFNlbGVjdG9ycyByYW5nZSBmcm9tIHplcm8gdG8gb25lIGxlc3MgdGhhbgpAQCAtNzksOCArODMsMTEgQEAKIAlpbnQgKCpsaXN0X3ZvbHRhZ2UpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqLCB1bnNpZ25lZCBzZWxlY3Rvcik7CiAKIAkvKiBnZXQvc2V0IHJlZ3VsYXRvciB2b2x0YWdlICovCi0JaW50ICgqc2V0X3ZvbHRhZ2UpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqLCBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKTsKKwlpbnQgKCpzZXRfdm9sdGFnZSkgKHN0cnVjdCByZWd1bGF0b3JfZGV2ICosIGludCBtaW5fdVYsIGludCBtYXhfdVYsCisJCQkgICAgdW5zaWduZWQgKnNlbGVjdG9yKTsKKwlpbnQgKCpzZXRfdm9sdGFnZV9zZWwpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqLCB1bnNpZ25lZCBzZWxlY3Rvcik7CiAJaW50ICgqZ2V0X3ZvbHRhZ2UpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKTsKKwlpbnQgKCpnZXRfdm9sdGFnZV9zZWwpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKTsKIAogCS8qIGdldC9zZXQgcmVndWxhdG9yIGN1cnJlbnQgICovCiAJaW50ICgqc2V0X2N1cnJlbnRfbGltaXQpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqLApAQCAtMTY4LDkgKzE3NSw5IEBACiAgKi8KIHN0cnVjdCByZWd1bGF0b3JfZGV2IHsKIAlzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2M7Ci0JaW50IHVzZV9jb3VudDsKLQlpbnQgb3Blbl9jb3VudDsKIAlpbnQgZXhjbHVzaXZlOworCXUzMiB1c2VfY291bnQ7CisJdTMyIG9wZW5fY291bnQ7CiAKIAkvKiBsaXN0cyB3ZSBiZWxvbmcgdG8gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IC8qIGxpc3Qgb2YgYWxsIHJlZ3VsYXRvcnMgKi8KQEAgLTE4OCwxMCArMTk1LDE0IEBACiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnN1cHBseTsJLyogZm9yIHRyZWUgKi8KIAogCXZvaWQgKnJlZ19kYXRhOwkJLyogcmVndWxhdG9yX2RldiBkYXRhICovCisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzOworI2VuZGlmCiB9OwogCiBzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqcmVndWxhdG9yX2Rlc2MsCi0Jc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhLAorCXN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YSwKIAl2b2lkICpkcml2ZXJfZGF0YSk7CiB2b2lkIHJlZ3VsYXRvcl91bnJlZ2lzdGVyKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaW8uaCBiL2luY2x1ZGUvbGludXgvcmlvLmgKaW5kZXggMGJlZDk0MS4uZmY2ODFlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jpby5oCkBAIC02NiwxNCArNjYsNjIgQEAKIAogI2RlZmluZSBSSU9fUFdfTVNHX1NJWkUJCTY0CiAKKy8qCisgKiBBIGNvbXBvbmVudCB0YWcgdmFsdWUgKHN0b3JlZCBpbiB0aGUgY29tcG9uZW50IHRhZyBDU1IpIGlzIHVzZWQgYXMgZGV2aWNlJ3MKKyAqIHVuaXF1ZSBpZGVudGlmaWVyIGFzc2lnbmVkIGR1cmluZyBlbnVtZXJhdGlvbi4gQmVzaWRlcyBiZWluZyB1c2VkIGZvcgorICogaWRlbnRpZnlpbmcgc3dpdGNoZXMgKHdoaWNoIGRvIG5vdCBoYXZlIGRldmljZSBJRCByZWdpc3RlciksIGl0IGFsc28gaXMgdXNlZAorICogYnkgZXJyb3IgbWFuYWdlbWVudCBub3RpZmljYXRpb24gYW5kIHRoZXJlZm9yZSBoYXMgdG8gYmUgYXNzaWduZWQKKyAqIHRvIGVuZHBvaW50cyBhcyB3ZWxsLgorICovCisjZGVmaW5lIFJJT19DVEFHX1JFU1JWRAkweGZmZmUwMDAwIC8qIFJlc2VydmVkICovCisjZGVmaW5lIFJJT19DVEFHX1VERVZJRAkweDAwMDFmZmZmIC8qIFVuaXF1ZSBkZXZpY2UgaWRlbnRpZmllciAqLworCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIHJpb19idXNfdHlwZTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlIHJpb19idXM7CiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCByaW9fZGV2aWNlczsJLyogbGlzdCBvZiBhbGwgZGV2aWNlcyAqLwogCiBzdHJ1Y3QgcmlvX21wb3J0Oworc3RydWN0IHJpb19kZXY7CiB1bmlvbiByaW9fcHdfbXNnOwogCiAvKioKKyAqIHN0cnVjdCByaW9fc3dpdGNoIC0gUklPIHN3aXRjaCBpbmZvCisgKiBAbm9kZTogTm9kZSBpbiBnbG9iYWwgbGlzdCBvZiBzd2l0Y2hlcworICogQHN3aXRjaGlkOiBTd2l0Y2ggSUQgdGhhdCBpcyB1bmlxdWUgYWNyb3NzIGEgbmV0d29yaworICogQHJvdXRlX3RhYmxlOiBDb3B5IG9mIHN3aXRjaCByb3V0aW5nIHRhYmxlCisgKiBAcG9ydF9vazogU3RhdHVzIG9mIGVhY2ggcG9ydCAob25lIGJpdCBwZXIgcG9ydCkgLSBPSz0xIG9yIFVOSU5JVD0wCisgKiBAYWRkX2VudHJ5OiBDYWxsYmFjayBmb3Igc3dpdGNoLXNwZWNpZmljIHJvdXRlIGFkZCBmdW5jdGlvbgorICogQGdldF9lbnRyeTogQ2FsbGJhY2sgZm9yIHN3aXRjaC1zcGVjaWZpYyByb3V0ZSBnZXQgZnVuY3Rpb24KKyAqIEBjbHJfdGFibGU6IENhbGxiYWNrIGZvciBzd2l0Y2gtc3BlY2lmaWMgY2xlYXIgcm91dGUgdGFibGUgZnVuY3Rpb24KKyAqIEBzZXRfZG9tYWluOiBDYWxsYmFjayBmb3Igc3dpdGNoLXNwZWNpZmljIGRvbWFpbiBzZXR0aW5nIGZ1bmN0aW9uCisgKiBAZ2V0X2RvbWFpbjogQ2FsbGJhY2sgZm9yIHN3aXRjaC1zcGVjaWZpYyBkb21haW4gZ2V0IGZ1bmN0aW9uCisgKiBAZW1faW5pdDogQ2FsbGJhY2sgZm9yIHN3aXRjaC1zcGVjaWZpYyBlcnJvciBtYW5hZ2VtZW50IGluaXQgZnVuY3Rpb24KKyAqIEBlbV9oYW5kbGU6IENhbGxiYWNrIGZvciBzd2l0Y2gtc3BlY2lmaWMgZXJyb3IgbWFuYWdlbWVudCBoYW5kbGVyIGZ1bmN0aW9uCisgKiBAc3dfc3lzZnM6IENhbGxiYWNrIHRoYXQgaW5pdGlhbGl6ZXMgc3dpdGNoLXNwZWNpZmljIHN5c2ZzIGF0dHJpYnV0ZXMKKyAqIEBuZXh0ZGV2OiBBcnJheSBvZiBwZXItcG9ydCBwb2ludGVycyB0byB0aGUgbmV4dCBhdHRhY2hlZCBkZXZpY2UKKyAqLworc3RydWN0IHJpb19zd2l0Y2ggeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwl1MTYgc3dpdGNoaWQ7CisJdTggKnJvdXRlX3RhYmxlOworCXUzMiBwb3J0X29rOworCWludCAoKmFkZF9lbnRyeSkgKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCB1MTYgZGVzdGlkLCB1OCBob3Bjb3VudCwKKwkJCSAgdTE2IHRhYmxlLCB1MTYgcm91dGVfZGVzdGlkLCB1OCByb3V0ZV9wb3J0KTsKKwlpbnQgKCpnZXRfZW50cnkpIChzdHJ1Y3QgcmlvX21wb3J0ICptcG9ydCwgdTE2IGRlc3RpZCwgdTggaG9wY291bnQsCisJCQkgIHUxNiB0YWJsZSwgdTE2IHJvdXRlX2Rlc3RpZCwgdTggKnJvdXRlX3BvcnQpOworCWludCAoKmNscl90YWJsZSkgKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCB1MTYgZGVzdGlkLCB1OCBob3Bjb3VudCwKKwkJCSAgdTE2IHRhYmxlKTsKKwlpbnQgKCpzZXRfZG9tYWluKSAoc3RydWN0IHJpb19tcG9ydCAqbXBvcnQsIHUxNiBkZXN0aWQsIHU4IGhvcGNvdW50LAorCQkJICAgdTggc3dfZG9tYWluKTsKKwlpbnQgKCpnZXRfZG9tYWluKSAoc3RydWN0IHJpb19tcG9ydCAqbXBvcnQsIHUxNiBkZXN0aWQsIHU4IGhvcGNvdW50LAorCQkJICAgdTggKnN3X2RvbWFpbik7CisJaW50ICgqZW1faW5pdCkgKHN0cnVjdCByaW9fZGV2ICpkZXYpOworCWludCAoKmVtX2hhbmRsZSkgKHN0cnVjdCByaW9fZGV2ICpkZXYsIHU4IHN3cG9ydCk7CisJaW50ICgqc3dfc3lzZnMpIChzdHJ1Y3QgcmlvX2RldiAqZGV2LCBpbnQgY3JlYXRlKTsKKwlzdHJ1Y3QgcmlvX2RldiAqbmV4dGRldlswXTsKK307CisKKy8qKgogICogc3RydWN0IHJpb19kZXYgLSBSSU8gZGV2aWNlIGluZm8KICAqIEBnbG9iYWxfbGlzdDogTm9kZSBpbiBsaXN0IG9mIGFsbCBSSU8gZGV2aWNlcwogICogQG5ldF9saXN0OiBOb2RlIGluIGxpc3Qgb2YgUklPIGRldmljZXMgaW4gYSBuZXR3b3JrCkBAIC05MywxMyArMTQxLDE0IEBACiAgKiBAcGh5c19lZnB0cjogUklPIGRldmljZSBleHRlbmRlZCBmZWF0dXJlcyBwb2ludGVyCiAgKiBAZW1fZWZwdHI6IFJJTyBFcnJvciBNYW5hZ2VtZW50IGZlYXR1cmVzIHBvaW50ZXIKICAqIEBkbWFfbWFzazogTWFzayBvZiBiaXRzIG9mIFJJTyBhZGRyZXNzIHRoaXMgZGV2aWNlIGltcGxlbWVudHMKLSAqIEByc3dpdGNoOiBQb2ludGVyIHRvICZzdHJ1Y3QgcmlvX3N3aXRjaCBpZiB2YWxpZCBmb3IgdGhpcyBkZXZpY2UKICAqIEBkcml2ZXI6IERyaXZlciBjbGFpbWluZyB0aGlzIGRldmljZQogICogQGRldjogRGV2aWNlIG1vZGVsIGRldmljZQogICogQHJpb3JlczogUklPIHJlc291cmNlcyB0aGlzIGRldmljZSBvd25zCiAgKiBAcHdjYmFjazogcG9ydC13cml0ZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhpcyBkZXZpY2UKLSAqIEBkZXN0aWQ6IE5ldHdvcmsgZGVzdGluYXRpb24gSUQKKyAqIEBkZXN0aWQ6IE5ldHdvcmsgZGVzdGluYXRpb24gSUQgKG9yIGFzc29jaWF0ZWQgZGVzdGlkIGZvciBzd2l0Y2gpCisgKiBAaG9wY291bnQ6IEhvcGNvdW50IHRvIHRoaXMgZGV2aWNlCiAgKiBAcHJldjogUHJldmlvdXMgUklPIGRldmljZSBjb25uZWN0ZWQgdG8gdGhlIGN1cnJlbnQgb25lCisgKiBAcnN3aXRjaDogc3RydWN0IHJpb19zd2l0Y2ggKGlmIHZhbGlkIGZvciB0aGlzIGRldmljZSkKICAqLwogc3RydWN0IHJpb19kZXYgewogCXN0cnVjdCBsaXN0X2hlYWQgZ2xvYmFsX2xpc3Q7CS8qIG5vZGUgaW4gbGlzdCBvZiBhbGwgUklPIGRldmljZXMgKi8KQEAgLTEyMCwxOCArMTY5LDIwIEBACiAJdTMyIHBoeXNfZWZwdHI7CiAJdTMyIGVtX2VmcHRyOwogCXU2NCBkbWFfbWFzazsKLQlzdHJ1Y3QgcmlvX3N3aXRjaCAqcnN3aXRjaDsJLyogUklPIHN3aXRjaCBpbmZvICovCiAJc3RydWN0IHJpb19kcml2ZXIgKmRyaXZlcjsJLyogUklPIGRyaXZlciBjbGFpbWluZyB0aGlzIGRldmljZSAqLwogCXN0cnVjdCBkZXZpY2UgZGV2OwkvKiBMRE0gZGV2aWNlIHN0cnVjdHVyZSAqLwogCXN0cnVjdCByZXNvdXJjZSByaW9yZXNbUklPX01BWF9ERVZfUkVTT1VSQ0VTXTsKIAlpbnQgKCpwd2NiYWNrKSAoc3RydWN0IHJpb19kZXYgKnJkZXYsIHVuaW9uIHJpb19wd19tc2cgKm1zZywgaW50IHN0ZXApOwogCXUxNiBkZXN0aWQ7CisJdTggaG9wY291bnQ7CiAJc3RydWN0IHJpb19kZXYgKnByZXY7CisJc3RydWN0IHJpb19zd2l0Y2ggcnN3aXRjaFswXTsJLyogUklPIHN3aXRjaCBpbmZvICovCiB9OwogCiAjZGVmaW5lIHJpb19kZXZfZyhuKSBsaXN0X2VudHJ5KG4sIHN0cnVjdCByaW9fZGV2LCBnbG9iYWxfbGlzdCkKICNkZWZpbmUgcmlvX2Rldl9mKG4pIGxpc3RfZW50cnkobiwgc3RydWN0IHJpb19kZXYsIG5ldF9saXN0KQogI2RlZmluZQl0b19yaW9fZGV2KG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgcmlvX2RldiwgZGV2KQorI2RlZmluZSBzd190b19yaW9fZGV2KG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgcmlvX2RldiwgcnN3aXRjaFswXSkKIAogLyoqCiAgKiBzdHJ1Y3QgcmlvX21zZyAtIFJJTyBtZXNzYWdlIGV2ZW50CkBAIC0yMjQsNDkgKzI3NSw2IEBACiAjZGVmaW5lIFJJT19TV19TWVNGU19DUkVBVEUJMQkvKiBDcmVhdGUgc3dpdGNoIGF0dHJpYnV0ZXMgKi8KICNkZWZpbmUgUklPX1NXX1NZU0ZTX1JFTU9WRQkwCS8qIFJlbW92ZSBzd2l0Y2ggYXR0cmlidXRlcyAqLwogCi0vKioKLSAqIHN0cnVjdCByaW9fc3dpdGNoIC0gUklPIHN3aXRjaCBpbmZvCi0gKiBAbm9kZTogTm9kZSBpbiBnbG9iYWwgbGlzdCBvZiBzd2l0Y2hlcwotICogQHJkZXY6IEFzc29jaWF0ZWQgUklPIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBzd2l0Y2hpZDogU3dpdGNoIElEIHRoYXQgaXMgdW5pcXVlIGFjcm9zcyBhIG5ldHdvcmsKLSAqIEBob3Bjb3VudDogSG9wY291bnQgdG8gdGhpcyBzd2l0Y2gKLSAqIEBkZXN0aWQ6IEFzc29jaWF0ZWQgZGVzdGlkIGluIHRoZSBwYXRoCi0gKiBAcm91dGVfdGFibGU6IENvcHkgb2Ygc3dpdGNoIHJvdXRpbmcgdGFibGUKLSAqIEBwb3J0X29rOiBTdGF0dXMgb2YgZWFjaCBwb3J0IChvbmUgYml0IHBlciBwb3J0KSAtIE9LPTEgb3IgVU5JTklUPTAKLSAqIEBhZGRfZW50cnk6IENhbGxiYWNrIGZvciBzd2l0Y2gtc3BlY2lmaWMgcm91dGUgYWRkIGZ1bmN0aW9uCi0gKiBAZ2V0X2VudHJ5OiBDYWxsYmFjayBmb3Igc3dpdGNoLXNwZWNpZmljIHJvdXRlIGdldCBmdW5jdGlvbgotICogQGNscl90YWJsZTogQ2FsbGJhY2sgZm9yIHN3aXRjaC1zcGVjaWZpYyBjbGVhciByb3V0ZSB0YWJsZSBmdW5jdGlvbgotICogQHNldF9kb21haW46IENhbGxiYWNrIGZvciBzd2l0Y2gtc3BlY2lmaWMgZG9tYWluIHNldHRpbmcgZnVuY3Rpb24KLSAqIEBnZXRfZG9tYWluOiBDYWxsYmFjayBmb3Igc3dpdGNoLXNwZWNpZmljIGRvbWFpbiBnZXQgZnVuY3Rpb24KLSAqIEBlbV9pbml0OiBDYWxsYmFjayBmb3Igc3dpdGNoLXNwZWNpZmljIGVycm9yIG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24KLSAqIEBlbV9oYW5kbGU6IENhbGxiYWNrIGZvciBzd2l0Y2gtc3BlY2lmaWMgZXJyb3IgbWFuYWdlbWVudCBoYW5kbGVyIGZ1bmN0aW9uCi0gKiBAc3dfc3lzZnM6IENhbGxiYWNrIHRoYXQgaW5pdGlhbGl6ZXMgc3dpdGNoLXNwZWNpZmljIHN5c2ZzIGF0dHJpYnV0ZXMKLSAqIEBuZXh0ZGV2OiBBcnJheSBvZiBwZXItcG9ydCBwb2ludGVycyB0byB0aGUgbmV4dCBhdHRhY2hlZCBkZXZpY2UKLSAqLwotc3RydWN0IHJpb19zd2l0Y2ggewotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQlzdHJ1Y3QgcmlvX2RldiAqcmRldjsKLQl1MTYgc3dpdGNoaWQ7Ci0JdTE2IGhvcGNvdW50OwotCXUxNiBkZXN0aWQ7Ci0JdTggKnJvdXRlX3RhYmxlOwotCXUzMiBwb3J0X29rOwotCWludCAoKmFkZF9lbnRyeSkgKHN0cnVjdCByaW9fbXBvcnQgKiBtcG9ydCwgdTE2IGRlc3RpZCwgdTggaG9wY291bnQsCi0JCQkgIHUxNiB0YWJsZSwgdTE2IHJvdXRlX2Rlc3RpZCwgdTggcm91dGVfcG9ydCk7Ci0JaW50ICgqZ2V0X2VudHJ5KSAoc3RydWN0IHJpb19tcG9ydCAqIG1wb3J0LCB1MTYgZGVzdGlkLCB1OCBob3Bjb3VudCwKLQkJCSAgdTE2IHRhYmxlLCB1MTYgcm91dGVfZGVzdGlkLCB1OCAqIHJvdXRlX3BvcnQpOwotCWludCAoKmNscl90YWJsZSkgKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCB1MTYgZGVzdGlkLCB1OCBob3Bjb3VudCwKLQkJCSAgdTE2IHRhYmxlKTsKLQlpbnQgKCpzZXRfZG9tYWluKSAoc3RydWN0IHJpb19tcG9ydCAqbXBvcnQsIHUxNiBkZXN0aWQsIHU4IGhvcGNvdW50LAotCQkJICAgdTggc3dfZG9tYWluKTsKLQlpbnQgKCpnZXRfZG9tYWluKSAoc3RydWN0IHJpb19tcG9ydCAqbXBvcnQsIHUxNiBkZXN0aWQsIHU4IGhvcGNvdW50LAotCQkJICAgdTggKnN3X2RvbWFpbik7Ci0JaW50ICgqZW1faW5pdCkgKHN0cnVjdCByaW9fZGV2ICpkZXYpOwotCWludCAoKmVtX2hhbmRsZSkgKHN0cnVjdCByaW9fZGV2ICpkZXYsIHU4IHN3cG9ydCk7Ci0JaW50ICgqc3dfc3lzZnMpIChzdHJ1Y3QgcmlvX2RldiAqZGV2LCBpbnQgY3JlYXRlKTsKLQlzdHJ1Y3QgcmlvX2RldiAqbmV4dGRldlswXTsKLX07Ci0KIC8qIExvdy1sZXZlbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHJvdXRpbmVzICovCiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaW9fZHJ2LmggYi9pbmNsdWRlL2xpbnV4L3Jpb19kcnYuaAppbmRleCBlZGM1NWRhLi5lMDllNTY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Jpb19kcnYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jpb19kcnYuaApAQCAtMTUwLDE2ICsxNTAsOCBAQAogc3RhdGljIGlubGluZSBpbnQgcmlvX3JlYWRfY29uZmlnXzMyKHN0cnVjdCByaW9fZGV2ICpyZGV2LCB1MzIgb2Zmc2V0LAogCQkJCSAgICAgdTMyICogZGF0YSkKIHsKLQl1OCBob3Bjb3VudCA9IDB4ZmY7Ci0JdTE2IGRlc3RpZCA9IHJkZXYtPmRlc3RpZDsKLQotCWlmIChyZGV2LT5yc3dpdGNoKSB7Ci0JCWRlc3RpZCA9IHJkZXYtPnJzd2l0Y2gtPmRlc3RpZDsKLQkJaG9wY291bnQgPSByZGV2LT5yc3dpdGNoLT5ob3Bjb3VudDsKLQl9Ci0KLQlyZXR1cm4gcmlvX21wb3J0X3JlYWRfY29uZmlnXzMyKHJkZXYtPm5ldC0+aHBvcnQsIGRlc3RpZCwgaG9wY291bnQsCi0JCQkJCW9mZnNldCwgZGF0YSk7CisJcmV0dXJuIHJpb19tcG9ydF9yZWFkX2NvbmZpZ18zMihyZGV2LT5uZXQtPmhwb3J0LCByZGV2LT5kZXN0aWQsCisJCQkJCXJkZXYtPmhvcGNvdW50LCBvZmZzZXQsIGRhdGEpOwogfTsKIAogLyoqCkBAIC0xNzQsMTYgKzE2Niw4IEBACiBzdGF0aWMgaW5saW5lIGludCByaW9fd3JpdGVfY29uZmlnXzMyKHN0cnVjdCByaW9fZGV2ICpyZGV2LCB1MzIgb2Zmc2V0LAogCQkJCSAgICAgIHUzMiBkYXRhKQogewotCXU4IGhvcGNvdW50ID0gMHhmZjsKLQl1MTYgZGVzdGlkID0gcmRldi0+ZGVzdGlkOwotCi0JaWYgKHJkZXYtPnJzd2l0Y2gpIHsKLQkJZGVzdGlkID0gcmRldi0+cnN3aXRjaC0+ZGVzdGlkOwotCQlob3Bjb3VudCA9IHJkZXYtPnJzd2l0Y2gtPmhvcGNvdW50OwotCX0KLQotCXJldHVybiByaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKHJkZXYtPm5ldC0+aHBvcnQsIGRlc3RpZCwgaG9wY291bnQsCi0JCQkJCSBvZmZzZXQsIGRhdGEpOworCXJldHVybiByaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKHJkZXYtPm5ldC0+aHBvcnQsIHJkZXYtPmRlc3RpZCwKKwkJCQkJIHJkZXYtPmhvcGNvdW50LCBvZmZzZXQsIGRhdGEpOwogfTsKIAogLyoqCkBAIC0xOTgsMTYgKzE4Miw4IEBACiBzdGF0aWMgaW5saW5lIGludCByaW9fcmVhZF9jb25maWdfMTYoc3RydWN0IHJpb19kZXYgKnJkZXYsIHUzMiBvZmZzZXQsCiAJCQkJICAgICB1MTYgKiBkYXRhKQogewotCXU4IGhvcGNvdW50ID0gMHhmZjsKLQl1MTYgZGVzdGlkID0gcmRldi0+ZGVzdGlkOwotCi0JaWYgKHJkZXYtPnJzd2l0Y2gpIHsKLQkJZGVzdGlkID0gcmRldi0+cnN3aXRjaC0+ZGVzdGlkOwotCQlob3Bjb3VudCA9IHJkZXYtPnJzd2l0Y2gtPmhvcGNvdW50OwotCX0KLQotCXJldHVybiByaW9fbXBvcnRfcmVhZF9jb25maWdfMTYocmRldi0+bmV0LT5ocG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKLQkJCQkJb2Zmc2V0LCBkYXRhKTsKKwlyZXR1cm4gcmlvX21wb3J0X3JlYWRfY29uZmlnXzE2KHJkZXYtPm5ldC0+aHBvcnQsIHJkZXYtPmRlc3RpZCwKKwkJCQkJcmRldi0+aG9wY291bnQsIG9mZnNldCwgZGF0YSk7CiB9OwogCiAvKioKQEAgLTIyMiwxNiArMTk4LDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IHJpb193cml0ZV9jb25maWdfMTYoc3RydWN0IHJpb19kZXYgKnJkZXYsIHUzMiBvZmZzZXQsCiAJCQkJICAgICAgdTE2IGRhdGEpCiB7Ci0JdTggaG9wY291bnQgPSAweGZmOwotCXUxNiBkZXN0aWQgPSByZGV2LT5kZXN0aWQ7Ci0KLQlpZiAocmRldi0+cnN3aXRjaCkgewotCQlkZXN0aWQgPSByZGV2LT5yc3dpdGNoLT5kZXN0aWQ7Ci0JCWhvcGNvdW50ID0gcmRldi0+cnN3aXRjaC0+aG9wY291bnQ7Ci0JfQotCi0JcmV0dXJuIHJpb19tcG9ydF93cml0ZV9jb25maWdfMTYocmRldi0+bmV0LT5ocG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKLQkJCQkJIG9mZnNldCwgZGF0YSk7CisJcmV0dXJuIHJpb19tcG9ydF93cml0ZV9jb25maWdfMTYocmRldi0+bmV0LT5ocG9ydCwgcmRldi0+ZGVzdGlkLAorCQkJCQkgcmRldi0+aG9wY291bnQsIG9mZnNldCwgZGF0YSk7CiB9OwogCiAvKioKQEAgLTI0NSwxNiArMjEzLDggQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgcmlvX3JlYWRfY29uZmlnXzgoc3RydWN0IHJpb19kZXYgKnJkZXYsIHUzMiBvZmZzZXQsIHU4ICogZGF0YSkKIHsKLQl1OCBob3Bjb3VudCA9IDB4ZmY7Ci0JdTE2IGRlc3RpZCA9IHJkZXYtPmRlc3RpZDsKLQotCWlmIChyZGV2LT5yc3dpdGNoKSB7Ci0JCWRlc3RpZCA9IHJkZXYtPnJzd2l0Y2gtPmRlc3RpZDsKLQkJaG9wY291bnQgPSByZGV2LT5yc3dpdGNoLT5ob3Bjb3VudDsKLQl9Ci0KLQlyZXR1cm4gcmlvX21wb3J0X3JlYWRfY29uZmlnXzgocmRldi0+bmV0LT5ocG9ydCwgZGVzdGlkLCBob3Bjb3VudCwKLQkJCQkgICAgICAgb2Zmc2V0LCBkYXRhKTsKKwlyZXR1cm4gcmlvX21wb3J0X3JlYWRfY29uZmlnXzgocmRldi0+bmV0LT5ocG9ydCwgcmRldi0+ZGVzdGlkLAorCQkJCSAgICAgICByZGV2LT5ob3Bjb3VudCwgb2Zmc2V0LCBkYXRhKTsKIH07CiAKIC8qKgpAQCAtMjY4LDE2ICsyMjgsOCBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCByaW9fd3JpdGVfY29uZmlnXzgoc3RydWN0IHJpb19kZXYgKnJkZXYsIHUzMiBvZmZzZXQsIHU4IGRhdGEpCiB7Ci0JdTggaG9wY291bnQgPSAweGZmOwotCXUxNiBkZXN0aWQgPSByZGV2LT5kZXN0aWQ7Ci0KLQlpZiAocmRldi0+cnN3aXRjaCkgewotCQlkZXN0aWQgPSByZGV2LT5yc3dpdGNoLT5kZXN0aWQ7Ci0JCWhvcGNvdW50ID0gcmRldi0+cnN3aXRjaC0+aG9wY291bnQ7Ci0JfQotCi0JcmV0dXJuIHJpb19tcG9ydF93cml0ZV9jb25maWdfOChyZGV2LT5uZXQtPmhwb3J0LCBkZXN0aWQsIGhvcGNvdW50LAotCQkJCQlvZmZzZXQsIGRhdGEpOworCXJldHVybiByaW9fbXBvcnRfd3JpdGVfY29uZmlnXzgocmRldi0+bmV0LT5ocG9ydCwgcmRldi0+ZGVzdGlkLAorCQkJCQlyZGV2LT5ob3Bjb3VudCwgb2Zmc2V0LCBkYXRhKTsKIH07CiAKIGV4dGVybiBpbnQgcmlvX21wb3J0X3NlbmRfZG9vcmJlbGwoc3RydWN0IHJpb19tcG9ydCAqbXBvcnQsIHUxNiBkZXN0aWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jpb19pZHMuaCBiL2luY2x1ZGUvbGludXgvcmlvX2lkcy5oCmluZGV4IGVlN2I2YWQuLjc0MTBkMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmlvX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmlvX2lkcy5oCkBAIC0zNiw1ICszNiw3IEBACiAjZGVmaW5lIFJJT19ESURfSURUQ1BTMTBRCQkweDAzNWUKICNkZWZpbmUgUklPX0RJRF9JRFRDUFMxODQ4CQkweDAzNzQKICNkZWZpbmUgUklPX0RJRF9JRFRDUFMxNjE2CQkweDAzNzkKKyNkZWZpbmUgUklPX0RJRF9JRFRWUFMxNjE2CQkweDAzNzcKKyNkZWZpbmUgUklPX0RJRF9JRFRTUFMxNjE2CQkweDAzNzgKIAogI2VuZGlmCQkJCS8qIExJTlVYX1JJT19JRFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yb21mc19mcy5oIGIvaW5jbHVkZS9saW51eC9yb21mc19mcy5oCmluZGV4IGM0OTBmYmMuLjVmNTdmOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcm9tZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JvbWZzX2ZzLmgKQEAgLTEsNiArMSw5IEBACiAjaWZuZGVmIF9fTElOVVhfUk9NRlNfRlNfSAogI2RlZmluZSBfX0xJTlVYX1JPTUZTX0ZTX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKwogLyogVGhlIGJhc2ljIHN0cnVjdHVyZXMgb2YgdGhlIHJvbWZzIGZpbGVzeXN0ZW0gKi8KIAogI2RlZmluZSBST01CU0laRSBCTE9DS19TSVpFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0Yy5oIGIvaW5jbHVkZS9saW51eC9ydGMuaAppbmRleCAxNGRiYzgzLi4zYzk5NWI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRjLmgKQEAgLTEwNywxMiArMTA3LDE3IEBACiBleHRlcm4gaW50IHJ0Y192YWxpZF90bShzdHJ1Y3QgcnRjX3RpbWUgKnRtKTsKIGV4dGVybiBpbnQgcnRjX3RtX3RvX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0bSwgdW5zaWduZWQgbG9uZyAqdGltZSk7CiBleHRlcm4gdm9pZCBydGNfdGltZV90b190bSh1bnNpZ25lZCBsb25nIHRpbWUsIHN0cnVjdCBydGNfdGltZSAqdG0pOwora3RpbWVfdCBydGNfdG1fdG9fa3RpbWUoc3RydWN0IHJ0Y190aW1lIHRtKTsKK3N0cnVjdCBydGNfdGltZSBydGNfa3RpbWVfdG9fdG0oa3RpbWVfdCBrdCk7CisKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVycXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogZXh0ZXJuIHN0cnVjdCBjbGFzcyAqcnRjX2NsYXNzOwogCkBAIC0xNTEsNyArMTU2LDE5IEBACiB9OwogCiAjZGVmaW5lIFJUQ19ERVZJQ0VfTkFNRV9TSVpFIDIwCi1zdHJ1Y3QgcnRjX3Rhc2s7Cit0eXBlZGVmIHN0cnVjdCBydGNfdGFzayB7CisJdm9pZCAoKmZ1bmMpKHZvaWQgKnByaXZhdGVfZGF0YSk7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworfSBydGNfdGFza190OworCisKK3N0cnVjdCBydGNfdGltZXIgeworCXN0cnVjdCBydGNfdGFzawl0YXNrOworCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgbm9kZTsKKwlrdGltZV90IHBlcmlvZDsKKwlpbnQgZW5hYmxlZDsKK307CisKIAogLyogZmxhZ3MgKi8KICNkZWZpbmUgUlRDX0RFVl9CVVNZIDAKQEAgLTE3OSwxNiArMTk2LDEzIEBACiAJc3BpbmxvY2tfdCBpcnFfdGFza19sb2NrOwogCWludCBpcnFfZnJlcTsKIAlpbnQgbWF4X3VzZXJfZnJlcTsKLSNpZmRlZiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMCi0Jc3RydWN0IHdvcmtfc3RydWN0IHVpZV90YXNrOwotCXN0cnVjdCB0aW1lcl9saXN0IHVpZV90aW1lcjsKLQkvKiBUaG9zZSBmaWVsZHMgYXJlIHByb3RlY3RlZCBieSBydGMtPmlycV9sb2NrICovCi0JdW5zaWduZWQgaW50IG9sZHNlY3M7Ci0JdW5zaWduZWQgaW50IHVpZV9pcnFfYWN0aXZlOjE7Ci0JdW5zaWduZWQgaW50IHN0b3BfdWllX3BvbGxpbmc6MTsKLQl1bnNpZ25lZCBpbnQgdWllX3Rhc2tfYWN0aXZlOjE7Ci0JdW5zaWduZWQgaW50IHVpZV90aW1lcl9hY3RpdmU6MTsKLSNlbmRpZgorCisJc3RydWN0IHRpbWVycXVldWVfaGVhZCB0aW1lcnF1ZXVlOworCXN0cnVjdCBydGNfdGltZXIgYWllX3RpbWVyOworCXN0cnVjdCBydGNfdGltZXIgdWllX3J0Y3RpbWVyOworCXN0cnVjdCBocnRpbWVyIHBpZV90aW1lcjsgLyogc3ViIHNlY29uZCBleHAsIHNvIG5lZWRzIGhydGltZXIgKi8KKwlpbnQgcGllX2VuYWJsZWQ7CisJc3RydWN0IHdvcmtfc3RydWN0IGlycXdvcms7CiB9OwogI2RlZmluZSB0b19ydGNfZGV2aWNlKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgcnRjX2RldmljZSwgZGV2KQogCkBAIC0yMjQsMTUgKzIzOCwyMiBAQAogZXh0ZXJuIGludCBydGNfZGV2X3VwZGF0ZV9pcnFfZW5hYmxlX2VtdWwoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywKIAkJCQkJCXVuc2lnbmVkIGludCBlbmFibGVkKTsKIAotdHlwZWRlZiBzdHJ1Y3QgcnRjX3Rhc2sgewotCXZvaWQgKCpmdW5jKSh2b2lkICpwcml2YXRlX2RhdGEpOwotCXZvaWQgKnByaXZhdGVfZGF0YTsKLX0gcnRjX3Rhc2tfdDsKK3ZvaWQgcnRjX2FpZV91cGRhdGVfaXJxKHZvaWQgKnByaXZhdGUpOwordm9pZCBydGNfdWllX3VwZGF0ZV9pcnEodm9pZCAqcHJpdmF0ZSk7CitlbnVtIGhydGltZXJfcmVzdGFydCBydGNfcGllX3VwZGF0ZV9pcnEoc3RydWN0IGhydGltZXIgKnRpbWVyKTsKIAogaW50IHJ0Y19yZWdpc3RlcihydGNfdGFza190ICp0YXNrKTsKIGludCBydGNfdW5yZWdpc3RlcihydGNfdGFza190ICp0YXNrKTsKIGludCBydGNfY29udHJvbChydGNfdGFza190ICp0LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKK3ZvaWQgcnRjX3RpbWVyX2VucXVldWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lciAqdGltZXIpOwordm9pZCBydGNfdGltZXJfcmVtb3ZlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKTsKK3ZvaWQgcnRjX3RpbWVyX2luaXQoc3RydWN0IHJ0Y190aW1lciAqdGltZXIsIHZvaWQgKCpmKSh2b2lkKiBwKSwgdm9pZCogZGF0YSk7CitpbnQgcnRjX3RpbWVyX3N0YXJ0KHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIqIHRpbWVyLAorCQkJa3RpbWVfdCBleHBpcmVzLCBrdGltZV90IHBlcmlvZCk7CitpbnQgcnRjX3RpbWVyX2NhbmNlbChzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWVyKiB0aW1lcik7Cit2b2lkIHJ0Y190aW1lcl9kb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19sZWFwX3llYXIodW5zaWduZWQgaW50IHllYXIpCiB7CiAJcmV0dXJuICghKHllYXIgJSA0KSAmJiAoeWVhciAlIDEwMCkpIHx8ICEoeWVhciAlIDQwMCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggYWJjNTI3YS4uOTZlMjMyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtNjgzLDcgKzY4Myw3IEBACiAJYXRvbWljX3QgZmFub3RpZnlfbGlzdGVuZXJzOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0VQT0xMCi0JYXRvbWljX3QgZXBvbGxfd2F0Y2hlczsJLyogVGhlIG51bWJlciBvZiBmaWxlIGRlc2NyaXB0b3JzIGN1cnJlbnRseSB3YXRjaGVkICovCisJYXRvbWljX2xvbmdfdCBlcG9sbF93YXRjaGVzOyAvKiBUaGUgbnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMgY3VycmVudGx5IHdhdGNoZWQgKi8KICNlbmRpZgogI2lmZGVmIENPTkZJR19QT1NJWF9NUVVFVUUKIAkvKiBwcm90ZWN0ZWQgYnkgbXFfbG9jawkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IGEyM2ZhMjkuLjc1OGM1YjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTIxMiw2ICsyMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wcHNfa2VybmVsLmg+CiAKIHN0cnVjdCB1YXJ0X3BvcnQ7CiBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdDsKQEAgLTUyOCwxMCArNTI5LDEwIEBACiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdXBvcnQtPnN0YXRlOwogCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIAlzdHJ1Y3QgdHR5X2xkaXNjICpsZCA9IHR0eV9sZGlzY19yZWYocG9ydC0+dHR5KTsKLQlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJc3RydWN0IHBwc19ldmVudF90aW1lIHRzOwogCiAJaWYgKGxkICYmIGxkLT5vcHMtPmRjZF9jaGFuZ2UpCi0JCWdldG5zdGltZW9mZGF5KCZ0cyk7CisJCXBwc19nZXRfdHMoJnRzKTsKIAogCXVwb3J0LT5pY291bnQuZGNkKys7CiAjaWZkZWYgQ09ORklHX0hBUkRfUFBTCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaAppbmRleCA1ZjY1ZjE0Li5lZGJiMWQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCisrKyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKQEAgLTE5MSw3ICsxOTEsOCBAQAogI2RlZmluZSBBRl9QSE9ORVQJMzUJLyogUGhvbmV0IHNvY2tldHMJCSovCiAjZGVmaW5lIEFGX0lFRUU4MDIxNTQJMzYJLyogSUVFRTgwMjE1NCBzb2NrZXRzCQkqLwogI2RlZmluZSBBRl9DQUlGCQkzNwkvKiBDQUlGIHNvY2tldHMJCQkqLwotI2RlZmluZSBBRl9NQVgJCTM4CS8qIEZvciBub3cuLiAqLworI2RlZmluZSBBRl9BTEcJCTM4CS8qIEFsZ29yaXRobSBzb2NrZXRzCQkqLworI2RlZmluZSBBRl9NQVgJCTM5CS8qIEZvciBub3cuLiAqLwogCiAvKiBQcm90b2NvbCBmYW1pbGllcywgc2FtZSBhcyBhZGRyZXNzIGZhbWlsaWVzLiAqLwogI2RlZmluZSBQRl9VTlNQRUMJQUZfVU5TUEVDCkBAIC0yMzIsNiArMjMzLDcgQEAKICNkZWZpbmUgUEZfUEhPTkVUCUFGX1BIT05FVAogI2RlZmluZSBQRl9JRUVFODAyMTU0CUFGX0lFRUU4MDIxNTQKICNkZWZpbmUgUEZfQ0FJRgkJQUZfQ0FJRgorI2RlZmluZSBQRl9BTEcJCUFGX0FMRwogI2RlZmluZSBQRl9NQVgJCUFGX01BWAogCiAvKiBNYXhpbXVtIHF1ZXVlIGxlbmd0aCBzcGVjaWZpYWJsZSBieSBsaXN0ZW4uICAqLwpAQCAtMzA1LDYgKzMwNyw3IEBACiAjZGVmaW5lIFNPTF9SRFMJCTI3NgogI2RlZmluZSBTT0xfSVVDVgkyNzcKICNkZWZpbmUgU09MX0NBSUYJMjc4CisjZGVmaW5lIFNPTF9BTEcJCTI3OQogCiAvKiBJUFggb3B0aW9ucyAqLwogI2RlZmluZSBJUFhfVFlQRQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmgKaW5kZXggYjIwMjQ3NS4uODUyMTA2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaApAQCAtMTEwLDkgKzExMCw5IEBACiAJX19iZTMyICoJCSgqY3JtYXJzaGFsKShzdHJ1Y3QgcnBjX3Rhc2sgKiwgX19iZTMyICopOwogCWludAkJCSgqY3JyZWZyZXNoKShzdHJ1Y3QgcnBjX3Rhc2sgKik7CiAJX19iZTMyICoJCSgqY3J2YWxpZGF0ZSkoc3RydWN0IHJwY190YXNrICosIF9fYmUzMiAqKTsKLQlpbnQJCQkoKmNyd3JhcF9yZXEpKHN0cnVjdCBycGNfdGFzayAqLCBreGRycHJvY190LAorCWludAkJCSgqY3J3cmFwX3JlcSkoc3RydWN0IHJwY190YXNrICosIGt4ZHJlcHJvY190LAogCQkJCQkJdm9pZCAqLCBfX2JlMzIgKiwgdm9pZCAqKTsKLQlpbnQJCQkoKmNydW53cmFwX3Jlc3ApKHN0cnVjdCBycGNfdGFzayAqLCBreGRycHJvY190LAorCWludAkJCSgqY3J1bndyYXBfcmVzcCkoc3RydWN0IHJwY190YXNrICosIGt4ZHJkcHJvY190LAogCQkJCQkJdm9pZCAqLCBfX2JlMzIgKiwgdm9pZCAqKTsKIH07CiAKQEAgLTEzOSw4ICsxMzksOCBAQAogdm9pZAkJCXB1dF9ycGNjcmVkKHN0cnVjdCBycGNfY3JlZCAqKTsKIF9fYmUzMiAqCQlycGNhdXRoX21hcnNoY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKiwgX19iZTMyICopOwogX19iZTMyICoJCXJwY2F1dGhfY2hlY2t2ZXJmKHN0cnVjdCBycGNfdGFzayAqLCBfX2JlMzIgKik7Ci1pbnQJCQlycGNhdXRoX3dyYXBfcmVxKHN0cnVjdCBycGNfdGFzayAqdGFzaywga3hkcnByb2NfdCBlbmNvZGUsIHZvaWQgKnJxc3RwLCBfX2JlMzIgKmRhdGEsIHZvaWQgKm9iaik7Ci1pbnQJCQlycGNhdXRoX3Vud3JhcF9yZXNwKHN0cnVjdCBycGNfdGFzayAqdGFzaywga3hkcnByb2NfdCBkZWNvZGUsIHZvaWQgKnJxc3RwLCBfX2JlMzIgKmRhdGEsIHZvaWQgKm9iaik7CitpbnQJCQlycGNhdXRoX3dyYXBfcmVxKHN0cnVjdCBycGNfdGFzayAqdGFzaywga3hkcmVwcm9jX3QgZW5jb2RlLCB2b2lkICpycXN0cCwgX19iZTMyICpkYXRhLCB2b2lkICpvYmopOworaW50CQkJcnBjYXV0aF91bndyYXBfcmVzcChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIGt4ZHJkcHJvY190IGRlY29kZSwgdm9pZCAqcnFzdHAsIF9fYmUzMiAqZGF0YSwgdm9pZCAqb2JqKTsKIGludAkJCXJwY2F1dGhfcmVmcmVzaGNyZWQoc3RydWN0IHJwY190YXNrICopOwogdm9pZAkJCXJwY2F1dGhfaW52YWxjcmVkKHN0cnVjdCBycGNfdGFzayAqKTsKIGludAkJCXJwY2F1dGhfdXB0b2RhdGVjcmVkKHN0cnVjdCBycGNfdGFzayAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2JjX3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2JjX3hwcnQuaAppbmRleCA3YzkxMjYwLi5jNTBiNDU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9iY194cHJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvYmNfeHBydC5oCkBAIC00MywxMCArNDMsMTggQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgc3ZjX2lzX2JhY2tjaGFubmVsKGNvbnN0IHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiB7Ci0JaWYgKHJxc3RwLT5ycV9zZXJ2ZXItPmJjX3hwcnQpCisJaWYgKHJxc3RwLT5ycV9zZXJ2ZXItPnN2X2JjX3hwcnQpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKmJjX3hwcnRfc2lkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCit7CisJaWYgKHN2Y19pc19iYWNrY2hhbm5lbChycXN0cCkpCisJCXJldHVybiAoc3RydWN0IG5mczRfc2Vzc2lvbmlkICopCisJCQlycXN0cC0+cnFfc2VydmVyLT5zdl9iY194cHJ0LT54cHRfYmNfc2lkOworCXJldHVybiBOVUxMOworfQorCiAjZWxzZSAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHhwcnRfc2V0dXBfYmFja2NoYW5uZWwoc3RydWN0IHJwY194cHJ0ICp4cHJ0LAogCQkJCQkgdW5zaWduZWQgaW50IG1pbl9yZXFzKQpAQCAtNTksNiArNjcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKmJjX3hwcnRfc2lkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCit7CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB4cHJ0X2ZyZWVfYmNfcmVxdWVzdChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSkKIHsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaAppbmRleCBhNWE1NWYyLi5lZjk0NzZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oCkBAIC04OSw4ICs4OSw4IEBACiAgKi8KIHN0cnVjdCBycGNfcHJvY2luZm8gewogCXUzMgkJCXBfcHJvYzsJCS8qIFJQQyBwcm9jZWR1cmUgbnVtYmVyICovCi0Ja3hkcnByb2NfdAkJcF9lbmNvZGU7CS8qIFhEUiBlbmNvZGUgZnVuY3Rpb24gKi8KLQlreGRycHJvY190CQlwX2RlY29kZTsJLyogWERSIGRlY29kZSBmdW5jdGlvbiAqLworCWt4ZHJlcHJvY190CQlwX2VuY29kZTsJLyogWERSIGVuY29kZSBmdW5jdGlvbiAqLworCWt4ZHJkcHJvY190CQlwX2RlY29kZTsJLyogWERSIGRlY29kZSBmdW5jdGlvbiAqLwogCXVuc2lnbmVkIGludAkJcF9hcmdsZW47CS8qIGFyZ3VtZW50IGhkciBsZW5ndGggKHUzMikgKi8KIAl1bnNpZ25lZCBpbnQJCXBfcmVwbGVuOwkvKiByZXBseSBoZHIgbGVuZ3RoICh1MzIpICovCiAJdW5zaWduZWQgaW50CQlwX2NvdW50OwkvKiBjYWxsIGNvdW50ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCmluZGV4IDVhMzA4NWIuLmM4MWQ0ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCkBAIC05OSw3ICs5OSw3IEBACiAJc3BpbmxvY2tfdAkJc3ZfY2JfbG9jazsJLyogcHJvdGVjdHMgdGhlIHN2Y19jYl9saXN0ICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QJc3ZfY2Jfd2FpdHE7CS8qIHNsZWVwIGhlcmUgaWYgdGhlcmUgYXJlIG5vCiAJCQkJCQkgKiBlbnRyaWVzIGluIHRoZSBzdmNfY2JfbGlzdCAqLwotCXN0cnVjdCBzdmNfeHBydAkJKmJjX3hwcnQ7CisJc3RydWN0IHN2Y194cHJ0CQkqc3ZfYmNfeHBydDsJLyogY2FsbGJhY2sgb24gZm9yZSBjaGFubmVsICovCiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaAppbmRleCBhZWEwZDQzOC4uMzU3ZGE1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oCkBAIC03OCw2ICs3OCw3IEBACiAJc2l6ZV90CQkJeHB0X3JlbW90ZWxlbjsJLyogbGVuZ3RoIG9mIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgcnBjX3dhaXRfcXVldWUJeHB0X2JjX3BlbmRpbmc7CS8qIGJhY2tjaGFubmVsIHdhaXQgcXVldWUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXhwdF91c2VyczsJLyogY2FsbGJhY2tzIG9uIGZyZWUgKi8KKwl2b2lkCQkJKnhwdF9iY19zaWQ7CS8qIGJhY2sgY2hhbm5lbCBzZXNzaW9uIElEICovCiAKIAlzdHJ1Y3QgbmV0CQkqeHB0X25ldDsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94ZHIuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hkci5oCmluZGV4IDQ5OGFiOTMuLmZjODRiN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hkci5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hkci5oCkBAIC0zMyw4ICszMyw4IEBACiB9OwogCiAvKgotICogVGhpcyBpcyB0aGUgZ2VuZXJpYyBYRFIgZnVuY3Rpb24uIHJxc3RwIGlzIGVpdGhlciBhIHJwY19ycXN0IChjbGllbnQKLSAqIHNpZGUpIG9yIHN2Y19ycXN0IHBvaW50ZXIgKHNlcnZlciBzaWRlKS4KKyAqIFRoaXMgaXMgdGhlIGxlZ2FjeSBnZW5lcmljIFhEUiBmdW5jdGlvbi4gcnFzdHAgaXMgZWl0aGVyIGEgcnBjX3Jxc3QKKyAqIChjbGllbnQgc2lkZSkgb3Igc3ZjX3Jxc3QgcG9pbnRlciAoc2VydmVyIHNpZGUpLgogICogRW5jb2RlIGZ1bmN0aW9ucyBhbHdheXMgYXNzdW1lIHRoZXJlJ3MgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlci4KICAqLwogdHlwZWRlZiBpbnQJKCpreGRycHJvY190KSh2b2lkICpycXN0cCwgX19iZTMyICpkYXRhLCB2b2lkICpvYmopOwpAQCAtMjAxLDE0ICsyMDEsMjIgQEAKIAogCV9fYmUzMiAqZW5kOwkJLyogZW5kIG9mIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UgKi8KIAlzdHJ1Y3Qga3ZlYyAqaW92OwkvKiBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGt2ZWMgKi8KKwlzdHJ1Y3Qga3ZlYyBzY3JhdGNoOwkvKiBTY3JhdGNoIGJ1ZmZlciAqLworCXN0cnVjdCBwYWdlICoqcGFnZV9wdHI7CS8qIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgcGFnZSAqLwogfTsKIAorLyoKKyAqIFRoZXNlIGFyZSB0aGUgeGRyX3N0cmVhbSBzdHlsZSBnZW5lcmljIFhEUiBlbmNvZGUgYW5kIGRlY29kZSBmdW5jdGlvbnMuCisgKi8KK3R5cGVkZWYgdm9pZAkoKmt4ZHJlcHJvY190KSh2b2lkICpycXN0cCwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdm9pZCAqb2JqKTsKK3R5cGVkZWYgaW50CSgqa3hkcmRwcm9jX3QpKHZvaWQgKnJxc3RwLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB2b2lkICpvYmopOworCiBleHRlcm4gdm9pZCB4ZHJfaW5pdF9lbmNvZGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IHhkcl9idWYgKmJ1ZiwgX19iZTMyICpwKTsKIGV4dGVybiBfX2JlMzIgKnhkcl9yZXNlcnZlX3NwYWNlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHNpemVfdCBuYnl0ZXMpOwogZXh0ZXJuIHZvaWQgeGRyX3dyaXRlX3BhZ2VzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBwYWdlICoqcGFnZXMsCiAJCXVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgbGVuKTsKIGV4dGVybiB2b2lkIHhkcl9pbml0X2RlY29kZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCBfX2JlMzIgKnApOwotZXh0ZXJuIF9fYmUzMiAqeGRyX2lubGluZV9wZWVrKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHNpemVfdCBuYnl0ZXMpOworZXh0ZXJuIHZvaWQgeGRyX3NldF9zY3JhdGNoX2J1ZmZlcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pOwogZXh0ZXJuIF9fYmUzMiAqeGRyX2lubGluZV9kZWNvZGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc2l6ZV90IG5ieXRlcyk7CiBleHRlcm4gdm9pZCB4ZHJfcmVhZF9wYWdlcyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1bnNpZ25lZCBpbnQgbGVuKTsKIGV4dGVybiB2b2lkIHhkcl9lbnRlcl9wYWdlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVuc2lnbmVkIGludCBsZW4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdXNwZW5kLmggYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaAppbmRleCAxNDRiMzRiLi5jMWY0OTk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaApAQCAtMTIyLDcgKzEyMiw3IEBACiAgKiBzdXNwZW5kX3NldF9vcHMgLSBzZXQgcGxhdGZvcm0gZGVwZW5kZW50IHN1c3BlbmQgb3BlcmF0aW9ucwogICogQG9wczogVGhlIG5ldyBzdXNwZW5kIG9wZXJhdGlvbnMgdG8gc2V0LgogICovCi1leHRlcm4gdm9pZCBzdXNwZW5kX3NldF9vcHMoc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzICpvcHMpOworZXh0ZXJuIHZvaWQgc3VzcGVuZF9zZXRfb3BzKGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyAqb3BzKTsKIGV4dGVybiBpbnQgc3VzcGVuZF92YWxpZF9vbmx5X21lbShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpOwogCiAvKioKQEAgLTE0Nyw3ICsxNDcsNyBAQAogI2Vsc2UgLyogIUNPTkZJR19TVVNQRU5EICovCiAjZGVmaW5lIHN1c3BlbmRfdmFsaWRfb25seV9tZW0JTlVMTAogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3VzcGVuZF9zZXRfb3BzKHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyAqb3BzKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHN1c3BlbmRfc2V0X29wcyhjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgKm9wcykge30KIHN0YXRpYyBpbmxpbmUgaW50IHBtX3N1c3BlbmQoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKSB7IHJldHVybiAtRU5PU1lTOyB9CiAjZW5kaWYgLyogIUNPTkZJR19TVVNQRU5EICovCiAKQEAgLTI0NSw3ICsyNDUsNyBAQAogZXh0ZXJuIHZvaWQgc3dzdXNwX3Vuc2V0X3BhZ2VfZnJlZShzdHJ1Y3QgcGFnZSAqKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGdldF9zYWZlX3BhZ2UoZ2ZwX3QgZ2ZwX21hc2spOwogCi1leHRlcm4gdm9pZCBoaWJlcm5hdGlvbl9zZXRfb3BzKHN0cnVjdCBwbGF0Zm9ybV9oaWJlcm5hdGlvbl9vcHMgKm9wcyk7CitleHRlcm4gdm9pZCBoaWJlcm5hdGlvbl9zZXRfb3BzKGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9oaWJlcm5hdGlvbl9vcHMgKm9wcyk7CiBleHRlcm4gaW50IGhpYmVybmF0ZSh2b2lkKTsKIGV4dGVybiBib29sIHN5c3RlbV9lbnRlcmluZ19oaWJlcm5hdGlvbih2b2lkKTsKICNlbHNlIC8qIENPTkZJR19ISUJFUk5BVElPTiAqLwpAQCAtMjUzLDcgKzI1Myw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc3dzdXNwX3NldF9wYWdlX2ZyZWUoc3RydWN0IHBhZ2UgKnApIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgc3dzdXNwX3Vuc2V0X3BhZ2VfZnJlZShzdHJ1Y3QgcGFnZSAqcCkge30KIAotc3RhdGljIGlubGluZSB2b2lkIGhpYmVybmF0aW9uX3NldF9vcHMoc3RydWN0IHBsYXRmb3JtX2hpYmVybmF0aW9uX29wcyAqb3BzKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGhpYmVybmF0aW9uX3NldF9vcHMoY29uc3Qgc3RydWN0IHBsYXRmb3JtX2hpYmVybmF0aW9uX29wcyAqb3BzKSB7fQogc3RhdGljIGlubGluZSBpbnQgaGliZXJuYXRlKHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fZW50ZXJpbmdfaGliZXJuYXRpb24odm9pZCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZiAvKiBDT05GSUdfSElCRVJOQVRJT04gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZS5oIGIvaW5jbHVkZS9saW51eC90aW1lLmgKaW5kZXggOWYxNWFjNy4uMWU2ZDNiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lLmgKQEAgLTE1OCw2ICsxNTgsOCBAQAogZXh0ZXJuIGludCBkb19nZXRpdGltZXIoaW50IHdoaWNoLCBzdHJ1Y3QgaXRpbWVydmFsICp2YWx1ZSk7CiBleHRlcm4gdm9pZCBnZXRuc3RpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KTsKIGV4dGVybiB2b2lkIGdldHJhd21vbm90b25pYyhzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKK2V4dGVybiB2b2lkIGdldG5zdGltZV9yYXdfYW5kX3JlYWwoc3RydWN0IHRpbWVzcGVjICp0c19yYXcsCisJCXN0cnVjdCB0aW1lc3BlYyAqdHNfcmVhbCk7CiBleHRlcm4gdm9pZCBnZXRib290dGltZShzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKIGV4dGVybiB2b2lkIG1vbm90b25pY190b19ib290YmFzZWQoc3RydWN0IHRpbWVzcGVjICp0cyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXguaCBiL2luY2x1ZGUvbGludXgvdGltZXguaAppbmRleCAzMmQ4NTJmLi5kMjM5OTlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1leC5oCkBAIC0yNjgsNiArMjY4LDcgQEAKIGV4dGVybiB2b2lkIHNlY29uZF9vdmVyZmxvdyh2b2lkKTsKIGV4dGVybiB2b2lkIHVwZGF0ZV9udHBfb25lX3RpY2sodm9pZCk7CiBleHRlcm4gaW50IGRvX2FkanRpbWV4KHN0cnVjdCB0aW1leCAqKTsKK2V4dGVybiB2b2lkIGhhcmRwcHMoY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqKTsKIAogaW50IHJlYWRfY3VycmVudF90aW1lcih1bnNpZ25lZCBsb25nICp0aW1lcl92YWwpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Rvc2hpYmEuaCBiL2luY2x1ZGUvbGludXgvdG9zaGliYS5oCmluZGV4IDZhN2M0ZWQuLjc3MmRlZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdG9zaGliYS5oCisrKyBiL2luY2x1ZGUvbGludXgvdG9zaGliYS5oCkBAIC0zMyw2ICszMyw4IEBACiAJdW5zaWduZWQgaW50IGVkaSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiB9IFNNTVJlZ2lzdGVyczsKIAorI2lmZGVmIF9fS0VSTkVMX18KIGludCB0b3NoX3NtbShTTU1SZWdpc3RlcnMgKnJlZ3MpOworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCmluZGV4IGQzZTRmODcuLmM2ODE0NjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCkBAIC0zMiw3ICszMiw3IEBACiAJaW50IHN0YXRlOwkJCS8qIFN0YXRlLiAqLwogCXZvaWQgKCpyZWdmdW5jKSh2b2lkKTsKIAl2b2lkICgqdW5yZWdmdW5jKSh2b2lkKTsKLQlzdHJ1Y3QgdHJhY2Vwb2ludF9mdW5jICpmdW5jczsKKwlzdHJ1Y3QgdHJhY2Vwb2ludF9mdW5jIF9fcmN1ICpmdW5jczsKIH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsJCS8qCiAJCQkJCSAqIEFsaWduZWQgb24gMzIgYnl0ZXMgYmVjYXVzZSBpdCBpcwogCQkJCQkgKiBnbG9iYWxseSB2aXNpYmxlIGFuZCBnY2MgaGFwcGlseQpAQCAtMzI2LDcgKzMyNiw3IEBACiAgKgkJbWVtY3B5KF9fZW50cnktPnByZXZfY29tbSwgcHJldi0+Y29tbSwgVEFTS19DT01NX0xFTik7CiAgKgkJX19lbnRyeS0+bmV4dF9waWQJPSBuZXh0LT5waWQ7CiAgKgkJX19lbnRyeS0+bmV4dF9wcmlvCT0gbmV4dC0+cHJpbzsKLSAqCSkKKyAqCSksCiAgKgogICoJKgogICoJKiBGb3JtYXR0ZWQgb3V0cHV0IG9mIGEgdHJhY2UgcmVjb3JkIHZpYSBUUF9wcmludGsoKS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmggYi9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oCmluZGV4IDUyNmQ2NmYuLmZmN2RjMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgKKysrIGIvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaApAQCAtMTAxLDE0ICsxMDEsMTUgQEAKICAqCWFueSBwZW5kaW5nIGRyaXZlciBJL08gaXMgY29tcGxldGVkLgogICoKICAqIHZvaWQgKCpkY2RfY2hhbmdlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBpbnQgc3RhdHVzLAotICogCQkJc3RydWN0IHRpbWVzcGVjICp0cykKKyAqCQkJc3RydWN0IHBwc19ldmVudF90aW1lICp0cykKICAqCiAgKglUZWxscyB0aGUgZGlzY2lwbGluZSB0aGF0IHRoZSBEQ0QgcGluIGhhcyBjaGFuZ2VkIGl0cyBzdGF0dXMgYW5kCi0gKgl0aGUgcmVsYXRpdmUgdGltZXN0YW1wLiBQb2ludGVyIHRzIGNhbiBiZSBOVUxMLgorICoJdGhlIHJlbGF0aXZlIHRpbWVzdGFtcC4gUG9pbnRlciB0cyBjYW5ub3QgYmUgTlVMTC4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvcHBzX2tlcm5lbC5oPgogCiBzdHJ1Y3QgdHR5X2xkaXNjX29wcyB7CiAJaW50CW1hZ2ljOwpAQCAtMTQzLDcgKzE0NCw3IEBACiAJCQkgICAgICAgY2hhciAqZnAsIGludCBjb3VudCk7CiAJdm9pZAkoKndyaXRlX3dha2V1cCkoc3RydWN0IHR0eV9zdHJ1Y3QgKik7CiAJdm9pZAkoKmRjZF9jaGFuZ2UpKHN0cnVjdCB0dHlfc3RydWN0ICosIHVuc2lnbmVkIGludCwKLQkJCQlzdHJ1Y3QgdGltZXNwZWMgKik7CisJCQkJc3RydWN0IHBwc19ldmVudF90aW1lICopOwogCiAJc3RydWN0ICBtb2R1bGUgKm93bmVyOwogCQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91NjRfc3RhdHNfc3luYy5oIGIvaW5jbHVkZS9saW51eC91NjRfc3RhdHNfc3luYy5oCmluZGV4IGZhMjYxYTAuLjhkYThjNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdTY0X3N0YXRzX3N5bmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3U2NF9zdGF0c19zeW5jLmgKQEAgLTY3LDIxICs2NywyMSBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgdm9pZCBpbmxpbmUgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgKnN5bmNwKQorc3RhdGljIGlubGluZSB2b2lkIHU2NF9zdGF0c191cGRhdGVfYmVnaW4oc3RydWN0IHU2NF9zdGF0c19zeW5jICpzeW5jcCkKIHsKICNpZiBCSVRTX1BFUl9MT05HPT0zMiAmJiBkZWZpbmVkKENPTkZJR19TTVApCiAJd3JpdGVfc2VxY291bnRfYmVnaW4oJnN5bmNwLT5zZXEpOwogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGlubGluZSB1NjRfc3RhdHNfdXBkYXRlX2VuZChzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgKnN5bmNwKQorc3RhdGljIGlubGluZSB2b2lkIHU2NF9zdGF0c191cGRhdGVfZW5kKHN0cnVjdCB1NjRfc3RhdHNfc3luYyAqc3luY3ApCiB7CiAjaWYgQklUU19QRVJfTE9ORz09MzIgJiYgZGVmaW5lZChDT05GSUdfU01QKQogCXdyaXRlX3NlcWNvdW50X2VuZCgmc3luY3AtPnNlcSk7CiAjZW5kaWYKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgdTY0X3N0YXRzX2ZldGNoX2JlZ2luKGNvbnN0IHN0cnVjdCB1NjRfc3RhdHNfc3luYyAqc3luY3ApCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oY29uc3Qgc3RydWN0IHU2NF9zdGF0c19zeW5jICpzeW5jcCkKIHsKICNpZiBCSVRTX1BFUl9MT05HPT0zMiAmJiBkZWZpbmVkKENPTkZJR19TTVApCiAJcmV0dXJuIHJlYWRfc2VxY291bnRfYmVnaW4oJnN5bmNwLT5zZXEpOwpAQCAtOTMsNyArOTMsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBib29sIGlubGluZSB1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoY29uc3Qgc3RydWN0IHU2NF9zdGF0c19zeW5jICpzeW5jcCwKK3N0YXRpYyBpbmxpbmUgYm9vbCB1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoY29uc3Qgc3RydWN0IHU2NF9zdGF0c19zeW5jICpzeW5jcCwKIAkJCQkJIHVuc2lnbmVkIGludCBzdGFydCkKIHsKICNpZiBCSVRTX1BFUl9MT05HPT0zMiAmJiBkZWZpbmVkKENPTkZJR19TTVApCkBAIC0xMTIsNyArMTEyLDcgQEAKICAqIC0gVVAgMzJiaXQgbXVzdCBkaXNhYmxlIEJILgogICogLSA2NGJpdCBoYXZlIG5vIHByb2JsZW0gYXRvbWljYWxseSByZWFkaW5nIHU2NCB2YWx1ZXMsIGlycSBzYWZlLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGlubGluZSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW5fYmgoY29uc3Qgc3RydWN0IHU2NF9zdGF0c19zeW5jICpzeW5jcCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHU2NF9zdGF0c19mZXRjaF9iZWdpbl9iaChjb25zdCBzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgKnN5bmNwKQogewogI2lmIEJJVFNfUEVSX0xPTkc9PTMyICYmIGRlZmluZWQoQ09ORklHX1NNUCkKIAlyZXR1cm4gcmVhZF9zZXFjb3VudF9iZWdpbigmc3luY3AtPnNlcSk7CkBAIC0xMjQsNyArMTI0LDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgYm9vbCBpbmxpbmUgdTY0X3N0YXRzX2ZldGNoX3JldHJ5X2JoKGNvbnN0IHN0cnVjdCB1NjRfc3RhdHNfc3luYyAqc3luY3AsCitzdGF0aWMgaW5saW5lIGJvb2wgdTY0X3N0YXRzX2ZldGNoX3JldHJ5X2JoKGNvbnN0IHN0cnVjdCB1NjRfc3RhdHNfc3luYyAqc3luY3AsCiAJCQkJCSB1bnNpZ25lZCBpbnQgc3RhcnQpCiB7CiAjaWYgQklUU19QRVJfTE9ORz09MzIgJiYgZGVmaW5lZChDT05GSUdfU01QKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91bmFsaWduZWQvcGFja2VkX3N0cnVjdC5oIGIvaW5jbHVkZS9saW51eC91bmFsaWduZWQvcGFja2VkX3N0cnVjdC5oCmluZGV4IGM5YTZhYmQuLmMwZDgxN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdW5hbGlnbmVkL3BhY2tlZF9zdHJ1Y3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VuYWxpZ25lZC9wYWNrZWRfc3RydWN0LmgKQEAgLTMsOSArMyw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAotc3RydWN0IF9fdW5hX3UxNiB7IHUxNiB4OyB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotc3RydWN0IF9fdW5hX3UzMiB7IHUzMiB4OyB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotc3RydWN0IF9fdW5hX3U2NCB7IHU2NCB4OyB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworc3RydWN0IF9fdW5hX3UxNiB7IHUxNiB4OyB9IF9fcGFja2VkOworc3RydWN0IF9fdW5hX3UzMiB7IHUzMiB4OyB9IF9fcGFja2VkOworc3RydWN0IF9fdW5hX3U2NCB7IHU2NCB4OyB9IF9fcGFja2VkOwogCiBzdGF0aWMgaW5saW5lIHUxNiBfX2dldF91bmFsaWduZWRfY3B1MTYoY29uc3Qgdm9pZCAqcCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvdXNlcl9uYW1lc3BhY2UuaAppbmRleCA4MTc4MTU2Li5mYWY0Njc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzZXJfbmFtZXNwYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2VyX25hbWVzcGFjZS5oCkBAIC02LDcgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKLSNkZWZpbmUgVUlESEFTSF9CSVRTCShDT05GSUdfQkFTRV9TTUFMTCA/IDMgOiA4KQorI2RlZmluZSBVSURIQVNIX0JJVFMJKENPTkZJR19CQVNFX1NNQUxMID8gMyA6IDcpCiAjZGVmaW5lIFVJREhBU0hfU1oJKDEgPDwgVUlESEFTSF9CSVRTKQogCiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92Z2Ffc3dpdGNoZXJvby5oIGIvaW5jbHVkZS9saW51eC92Z2Ffc3dpdGNoZXJvby5oCmluZGV4IGFlOWFiMTMuLjRiOWE3ZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmdhX3N3aXRjaGVyb28uaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZnYV9zd2l0Y2hlcm9vLmgKQEAgLTMzLDYgKzMzLDcgQEAKIHZvaWQgdmdhX3N3aXRjaGVyb29fdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgdmdhX3N3aXRjaGVyb29fcmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJICAgdm9pZCAoKnNldF9ncHVfc3RhdGUpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGVudW0gdmdhX3N3aXRjaGVyb29fc3RhdGUpLAorCQkJCSAgIHZvaWQgKCpyZXByb2JlKShzdHJ1Y3QgcGNpX2RldiAqZGV2KSwKIAkJCQkgICBib29sICgqY2FuX3N3aXRjaCkoc3RydWN0IHBjaV9kZXYgKmRldikpOwogCiB2b2lkIHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9mYl9zZXQoc3RydWN0IHBjaV9kZXYgKmRldiwKQEAgLTQ4LDYgKzQ5LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2Z2Ffc3dpdGNoZXJvb191bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQogc3RhdGljIGlubGluZSBpbnQgdmdhX3N3aXRjaGVyb29fcmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJCSAgdm9pZCAoKnNldF9ncHVfc3RhdGUpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGVudW0gdmdhX3N3aXRjaGVyb29fc3RhdGUpLAorCQkJCQkgIHZvaWQgKCpyZXByb2JlKShzdHJ1Y3QgcGNpX2RldiAqZGV2KSwKIAkJCQkJICBib29sICgqY2FuX3N3aXRjaCkoc3RydWN0IHBjaV9kZXYgKmRldikpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB2Z2Ffc3dpdGNoZXJvb19jbGllbnRfZmJfc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBmYl9pbmZvICppbmZvKSB7fQogc3RhdGljIGlubGluZSBpbnQgdmdhX3N3aXRjaGVyb29fcmVnaXN0ZXJfaGFuZGxlcihzdHJ1Y3QgdmdhX3N3aXRjaGVyb29faGFuZGxlciAqaGFuZGxlcikgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC94ei5oIGIvaW5jbHVkZS9saW51eC94ei5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0Y2ZmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3h6LmgKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBYWiBkZWNvbXByZXNzb3IKKyAqCisgKiBBdXRob3JzOiBMYXNzZSBDb2xsaW4gPGxhc3NlLmNvbGxpbkB0dWthYW5pLm9yZz4KKyAqICAgICAgICAgIElnb3IgUGF2bG92IDxodHRwOi8vNy16aXAub3JnLz4KKyAqCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gcHV0IGludG8gdGhlIHB1YmxpYyBkb21haW4uCisgKiBZb3UgY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhpcyBmaWxlLgorICovCisKKyNpZm5kZWYgWFpfSAorI2RlZmluZSBYWl9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjCWluY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorIwlpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2Vsc2UKKyMJaW5jbHVkZSA8c3RkZGVmLmg+CisjCWluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKy8qIEluIExpbnV4LCB0aGlzIGlzIHVzZWQgdG8gbWFrZSBleHRlcm4gZnVuY3Rpb25zIHN0YXRpYyB3aGVuIG5lZWRlZC4gKi8KKyNpZm5kZWYgWFpfRVhURVJOCisjCWRlZmluZSBYWl9FWFRFUk4gZXh0ZXJuCisjZW5kaWYKKworLyoqCisgKiBlbnVtIHh6X21vZGUgLSBPcGVyYXRpb24gbW9kZQorICoKKyAqIEBYWl9TSU5HTEU6ICAgICAgICAgICAgICBTaW5nbGUtY2FsbCBtb2RlLiBUaGlzIHVzZXMgbGVzcyBSQU0gdGhhbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoYW4gbXVsdGktY2FsbCBtb2RlcywgYmVjYXVzZSB0aGUgTFpNQTIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5IGRvZXNuJ3QgbmVlZCB0byBiZSBhbGxvY2F0ZWQgYXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBkZWNvZGVyIHN0YXRlLiBBbGwgcmVxdWlyZWQgZGF0YQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBhdCBpbml0aWFsaXphdGlvbiwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBzbyB4el9kZWNfcnVuKCkgY2Fubm90IHJldHVybiBYWl9NRU1fRVJST1IuCisgKiBAWFpfUFJFQUxMT0M6ICAgICAgICAgICAgTXVsdGktY2FsbCBtb2RlIHdpdGggcHJlYWxsb2NhdGVkIExaTUEyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeSBidWZmZXIuIEFsbCBkYXRhIHN0cnVjdHVyZXMgYXJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkIGF0IGluaXRpYWxpemF0aW9uLCBzbyB4el9kZWNfcnVuKCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5ub3QgcmV0dXJuIFhaX01FTV9FUlJPUi4KKyAqIEBYWl9EWU5BTExPQzogICAgICAgICAgICBNdWx0aS1jYWxsIG1vZGUuIFRoZSBMWk1BMiBkaWN0aW9uYXJ5IGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkIG9uY2UgdGhlIHJlcXVpcmVkIHNpemUgaGFzIGJlZW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgZnJvbSB0aGUgc3RyZWFtIGhlYWRlcnMuIElmIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24gZmFpbHMsIHh6X2RlY19ydW4oKSB3aWxsIHJldHVybgorICogICAgICAgICAgICAgICAgICAgICAgICAgIFhaX01FTV9FUlJPUi4KKyAqCisgKiBJdCBpcyBwb3NzaWJsZSB0byBlbmFibGUgc3VwcG9ydCBvbmx5IGZvciBhIHN1YnNldCBvZiB0aGUgYWJvdmUKKyAqIG1vZGVzIGF0IGNvbXBpbGUgdGltZSBieSBkZWZpbmluZyBYWl9ERUNfU0lOR0xFLCBYWl9ERUNfUFJFQUxMT0MsCisgKiBvciBYWl9ERUNfRFlOQUxMT0MuIFRoZSB4el9kZWMga2VybmVsIG1vZHVsZSBpcyBhbHdheXMgY29tcGlsZWQKKyAqIHdpdGggc3VwcG9ydCBmb3IgYWxsIG9wZXJhdGlvbiBtb2RlcywgYnV0IHRoZSBwcmVib290IGNvZGUgbWF5CisgKiBiZSBidWlsdCB3aXRoIGZld2VyIGZlYXR1cmVzIHRvIG1pbmltaXplIGNvZGUgc2l6ZS4KKyAqLworZW51bSB4el9tb2RlIHsKKwlYWl9TSU5HTEUsCisJWFpfUFJFQUxMT0MsCisJWFpfRFlOQUxMT0MKK307CisKKy8qKgorICogZW51bSB4el9yZXQgLSBSZXR1cm4gY29kZXMKKyAqIEBYWl9PSzogICAgICAgICAgICAgICAgICBFdmVyeXRoaW5nIGlzIE9LIHNvIGZhci4gTW9yZSBpbnB1dCBvciBtb3JlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHNwYWNlIGlzIHJlcXVpcmVkIHRvIGNvbnRpbnVlLiBUaGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGUgaXMgcG9zc2libGUgb25seSBpbiBtdWx0aS1jYWxsIG1vZGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAoWFpfUFJFQUxMT0Mgb3IgWFpfRFlOQUxMT0MpLgorICogQFhaX1NUUkVBTV9FTkQ6ICAgICAgICAgIE9wZXJhdGlvbiBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuCisgKiBAWFpfVU5TVVBQT1JURURfQ0hFQ0s6ICAgSW50ZWdyaXR5IGNoZWNrIHR5cGUgaXMgbm90IHN1cHBvcnRlZC4gRGVjb2RpbmcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBzdGlsbCBwb3NzaWJsZSBpbiBtdWx0aS1jYWxsIG1vZGUgYnkgc2ltcGx5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGluZyB4el9kZWNfcnVuKCkgYWdhaW4uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgcmV0dXJuIHZhbHVlIGlzIHVzZWQgb25seSBpZgorICogICAgICAgICAgICAgICAgICAgICAgICAgIFhaX0RFQ19BTllfQ0hFQ0sgd2FzIGRlZmluZWQgYXQgYnVpbGQgdGltZSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBub3QgdXNlZCBpbiB0aGUga2VybmVsLiBVbnN1cHBvcnRlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrIHR5cGVzIHJldHVybiBYWl9PUFRJT05TX0VSUk9SIGlmCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgWFpfREVDX0FOWV9DSEVDSyB3YXMgbm90IGRlZmluZWQgYXQgYnVpbGQgdGltZS4KKyAqIEBYWl9NRU1fRVJST1I6ICAgICAgICAgICBBbGxvY2F0aW5nIG1lbW9yeSBmYWlsZWQuIFRoaXMgcmV0dXJuIGNvZGUgaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZSBvbmx5IGlmIHRoZSBkZWNvZGVyIHdhcyBpbml0aWFsaXplZAorICogICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggWFpfRFlOQUxMT0MuIFRoZSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgd2FzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZWQgdG8gYmUgYWxsb2NhdGVkIHdhcyBubyBtb3JlIHRoYW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdF9tYXggYXJndW1lbnQgZ2l2ZW4gdG8geHpfZGVjX2luaXQoKS4KKyAqIEBYWl9NRU1MSU1JVF9FUlJPUjogICAgICBBIGJpZ2dlciBMWk1BMiBkaWN0aW9uYXJ5IHdvdWxkIGJlIG5lZWRlZCB0aGFuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZCBieSB0aGUgZGljdF9tYXggYXJndW1lbnQgZ2l2ZW4gdG8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB4el9kZWNfaW5pdCgpLiBUaGlzIHJldHVybiB2YWx1ZSBpcyBwb3NzaWJsZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgaW4gbXVsdGktY2FsbCBtb2RlIChYWl9QUkVBTExPQyBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgIFhaX0RZTkFMTE9DKTsgdGhlIHNpbmdsZS1jYWxsIG1vZGUgKFhaX1NJTkdMRSkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVzIHRoZSBkaWN0X21heCBhcmd1bWVudC4KKyAqIEBYWl9GT1JNQVRfRVJST1I6ICAgICAgICBGaWxlIGZvcm1hdCB3YXMgbm90IHJlY29nbml6ZWQgKHdyb25nIG1hZ2ljCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMpLgorICogQFhaX09QVElPTlNfRVJST1I6ICAgICAgIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbiBvcHRpb25zLiBJbiB0aGUgZGVjb2RlciB0aGlzIG1lYW5zCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgaGVhZGVyIENSQzMyIG1hdGNoZXMsIGJ1dCB0aGUgaGVhZGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRzZWxmIHNwZWNpZmllcyBzb21ldGhpbmcgdGhhdCB3ZSBkb24ndCBzdXBwb3J0LgorICogQFhaX0RBVEFfRVJST1I6ICAgICAgICAgIENvbXByZXNzZWQgZGF0YSBpcyBjb3JydXB0LgorICogQFhaX0JVRl9FUlJPUjogICAgICAgICAgIENhbm5vdCBtYWtlIGFueSBwcm9ncmVzcy4gRGV0YWlscyBhcmUgc2xpZ2h0bHkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgYmV0d2VlbiBtdWx0aS1jYWxsIGFuZCBzaW5nbGUtY2FsbAorICogICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU7IG1vcmUgaW5mb3JtYXRpb24gYmVsb3cuCisgKgorICogSW4gbXVsdGktY2FsbCBtb2RlLCBYWl9CVUZfRVJST1IgaXMgcmV0dXJuZWQgd2hlbiB0d28gY29uc2VjdXRpdmUgY2FsbHMKKyAqIHRvIFhaIGNvZGUgY2Fubm90IGNvbnN1bWUgYW55IGlucHV0IGFuZCBjYW5ub3QgcHJvZHVjZSBhbnkgbmV3IG91dHB1dC4KKyAqIFRoaXMgaGFwcGVucyB3aGVuIHRoZXJlIGlzIG5vIG5ldyBpbnB1dCBhdmFpbGFibGUsIG9yIHRoZSBvdXRwdXQgYnVmZmVyCisgKiBpcyBmdWxsIHdoaWxlIGF0IGxlYXN0IG9uZSBvdXRwdXQgYnl0ZSBpcyBzdGlsbCBwZW5kaW5nLiBBc3N1bWluZyB5b3VyCisgKiBjb2RlIGlzIG5vdCBidWdneSwgeW91IGNhbiBnZXQgdGhpcyBlcnJvciBvbmx5IHdoZW4gZGVjb2RpbmcgYSBjb21wcmVzc2VkCisgKiBzdHJlYW0gdGhhdCBpcyB0cnVuY2F0ZWQgb3Igb3RoZXJ3aXNlIGNvcnJ1cHQuCisgKgorICogSW4gc2luZ2xlLWNhbGwgbW9kZSwgWFpfQlVGX0VSUk9SIGlzIHJldHVybmVkIG9ubHkgd2hlbiB0aGUgb3V0cHV0IGJ1ZmZlcgorICogaXMgdG9vIHNtYWxsIG9yIHRoZSBjb21wcmVzc2VkIGlucHV0IGlzIGNvcnJ1cHQgaW4gYSB3YXkgdGhhdCBtYWtlcyB0aGUKKyAqIGRlY29kZXIgcHJvZHVjZSBtb3JlIG91dHB1dCB0aGFuIHRoZSBjYWxsZXIgZXhwZWN0ZWQuIFdoZW4gaXQgaXMKKyAqIChyZWxhdGl2ZWx5KSBjbGVhciB0aGF0IHRoZSBjb21wcmVzc2VkIGlucHV0IGlzIHRydW5jYXRlZCwgWFpfREFUQV9FUlJPUgorICogaXMgdXNlZCBpbnN0ZWFkIG9mIFhaX0JVRl9FUlJPUi4KKyAqLworZW51bSB4el9yZXQgeworCVhaX09LLAorCVhaX1NUUkVBTV9FTkQsCisJWFpfVU5TVVBQT1JURURfQ0hFQ0ssCisJWFpfTUVNX0VSUk9SLAorCVhaX01FTUxJTUlUX0VSUk9SLAorCVhaX0ZPUk1BVF9FUlJPUiwKKwlYWl9PUFRJT05TX0VSUk9SLAorCVhaX0RBVEFfRVJST1IsCisJWFpfQlVGX0VSUk9SCit9OworCisvKioKKyAqIHN0cnVjdCB4el9idWYgLSBQYXNzaW5nIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyB0byBYWiBjb2RlCisgKiBAaW46ICAgICAgICAgQmVnaW5uaW5nIG9mIHRoZSBpbnB1dCBidWZmZXIuIFRoaXMgbWF5IGJlIE5VTEwgaWYgYW5kIG9ubHkKKyAqICAgICAgICAgICAgICBpZiBpbl9wb3MgaXMgZXF1YWwgdG8gaW5fc2l6ZS4KKyAqIEBpbl9wb3M6ICAgICBDdXJyZW50IHBvc2l0aW9uIGluIHRoZSBpbnB1dCBidWZmZXIuIFRoaXMgbXVzdCBub3QgZXhjZWVkCisgKiAgICAgICAgICAgICAgaW5fc2l6ZS4KKyAqIEBpbl9zaXplOiAgICBTaXplIG9mIHRoZSBpbnB1dCBidWZmZXIKKyAqIEBvdXQ6ICAgICAgICBCZWdpbm5pbmcgb2YgdGhlIG91dHB1dCBidWZmZXIuIFRoaXMgbWF5IGJlIE5VTEwgaWYgYW5kIG9ubHkKKyAqICAgICAgICAgICAgICBpZiBvdXRfcG9zIGlzIGVxdWFsIHRvIG91dF9zaXplLgorICogQG91dF9wb3M6ICAgIEN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIG91dHB1dCBidWZmZXIuIFRoaXMgbXVzdCBub3QgZXhjZWVkCisgKiAgICAgICAgICAgICAgb3V0X3NpemUuCisgKiBAb3V0X3NpemU6ICAgU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlcgorICoKKyAqIE9ubHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBvdXRwdXQgYnVmZmVyIGZyb20gb3V0W291dF9wb3NdIG9ud2FyZCwgYW5kCisgKiB0aGUgdmFyaWFibGVzIGluX3BvcyBhbmQgb3V0X3BvcyBhcmUgbW9kaWZpZWQgYnkgdGhlIFhaIGNvZGUuCisgKi8KK3N0cnVjdCB4el9idWYgeworCWNvbnN0IHVpbnQ4X3QgKmluOworCXNpemVfdCBpbl9wb3M7CisJc2l6ZV90IGluX3NpemU7CisKKwl1aW50OF90ICpvdXQ7CisJc2l6ZV90IG91dF9wb3M7CisJc2l6ZV90IG91dF9zaXplOworfTsKKworLyoqCisgKiBzdHJ1Y3QgeHpfZGVjIC0gT3BhcXVlIHR5cGUgdG8gaG9sZCB0aGUgWFogZGVjb2RlciBzdGF0ZQorICovCitzdHJ1Y3QgeHpfZGVjOworCisvKioKKyAqIHh6X2RlY19pbml0KCkgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIFhaIGRlY29kZXIgc3RhdGUKKyAqIEBtb2RlOiAgICAgICBPcGVyYXRpb24gbW9kZQorICogQGRpY3RfbWF4OiAgIE1heGltdW0gc2l6ZSBvZiB0aGUgTFpNQTIgZGljdGlvbmFyeSAoaGlzdG9yeSBidWZmZXIpIGZvcgorICogICAgICAgICAgICAgIG11bHRpLWNhbGwgZGVjb2RpbmcuIFRoaXMgaXMgaWdub3JlZCBpbiBzaW5nbGUtY2FsbCBtb2RlCisgKiAgICAgICAgICAgICAgKG1vZGUgPT0gWFpfU0lOR0xFKS4gTFpNQTIgZGljdGlvbmFyeSBpcyBhbHdheXMgMl5uIGJ5dGVzCisgKiAgICAgICAgICAgICAgb3IgMl5uICsgMl4obi0xKSBieXRlcyAodGhlIGxhdHRlciBzaXplcyBhcmUgbGVzcyBjb21tb24KKyAqICAgICAgICAgICAgICBpbiBwcmFjdGljZSksIHNvIG90aGVyIHZhbHVlcyBmb3IgZGljdF9tYXggZG9uJ3QgbWFrZSBzZW5zZS4KKyAqICAgICAgICAgICAgICBJbiB0aGUga2VybmVsLCBkaWN0aW9uYXJ5IHNpemVzIG9mIDY0IEtpQiwgMTI4IEtpQiwgMjU2IEtpQiwKKyAqICAgICAgICAgICAgICA1MTIgS2lCLCBhbmQgMSBNaUIgYXJlIHByb2JhYmx5IHRoZSBvbmx5IHJlYXNvbmFibGUgdmFsdWVzLAorICogICAgICAgICAgICAgIGV4Y2VwdCBmb3Iga2VybmVsIGFuZCBpbml0cmFtZnMgaW1hZ2VzIHdoZXJlIGEgYmlnZ2VyCisgKiAgICAgICAgICAgICAgZGljdGlvbmFyeSBjYW4gYmUgZmluZSBhbmQgdXNlZnVsLgorICoKKyAqIFNpbmdsZS1jYWxsIG1vZGUgKFhaX1NJTkdMRSk6IHh6X2RlY19ydW4oKSBkZWNvZGVzIHRoZSB3aG9sZSBzdHJlYW0gYXQKKyAqIG9uY2UuIFRoZSBjYWxsZXIgbXVzdCBwcm92aWRlIGVub3VnaCBvdXRwdXQgc3BhY2Ugb3IgdGhlIGRlY29kaW5nIHdpbGwKKyAqIGZhaWwuIFRoZSBvdXRwdXQgc3BhY2UgaXMgdXNlZCBhcyB0aGUgZGljdGlvbmFyeSBidWZmZXIsIHdoaWNoIGlzIHdoeQorICogdGhlcmUgaXMgbm8gbmVlZCB0byBhbGxvY2F0ZSB0aGUgZGljdGlvbmFyeSBhcyBwYXJ0IG9mIHRoZSBkZWNvZGVyJ3MKKyAqIGludGVybmFsIHN0YXRlLgorICoKKyAqIEJlY2F1c2UgdGhlIG91dHB1dCBidWZmZXIgaXMgdXNlZCBhcyB0aGUgd29ya3NwYWNlLCBzdHJlYW1zIGVuY29kZWQgdXNpbmcKKyAqIGEgYmlnIGRpY3Rpb25hcnkgYXJlIG5vdCBhIHByb2JsZW0gaW4gc2luZ2xlLWNhbGwgbW9kZS4gSXQgaXMgZW5vdWdoIHRoYXQKKyAqIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGJpZyBlbm91Z2ggdG8gaG9sZCB0aGUgYWN0dWFsIHVuY29tcHJlc3NlZCBkYXRhOyBpdAorICogY2FuIGJlIHNtYWxsZXIgdGhhbiB0aGUgZGljdGlvbmFyeSBzaXplIHN0b3JlZCBpbiB0aGUgc3RyZWFtIGhlYWRlcnMuCisgKgorICogTXVsdGktY2FsbCBtb2RlIHdpdGggcHJlYWxsb2NhdGVkIGRpY3Rpb25hcnkgKFhaX1BSRUFMTE9DKTogZGljdF9tYXggYnl0ZXMKKyAqIG9mIG1lbW9yeSBpcyBwcmVhbGxvY2F0ZWQgZm9yIHRoZSBMWk1BMiBkaWN0aW9uYXJ5LiBUaGlzIHdheSB0aGVyZSBpcyBubworICogcmlzayB0aGF0IHh6X2RlY19ydW4oKSBjb3VsZCBydW4gb3V0IG9mIG1lbW9yeSwgc2luY2UgeHpfZGVjX3J1bigpIHdpbGwKKyAqIG5ldmVyIGFsbG9jYXRlIGFueSBtZW1vcnkuIEluc3RlYWQsIGlmIHRoZSBwcmVhbGxvY2F0ZWQgZGljdGlvbmFyeSBpcyB0b28KKyAqIHNtYWxsIGZvciBkZWNvZGluZyB0aGUgZ2l2ZW4gaW5wdXQgc3RyZWFtLCB4el9kZWNfcnVuKCkgd2lsbCByZXR1cm4KKyAqIFhaX01FTUxJTUlUX0VSUk9SLiBUaHVzLCBpdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGF0IGtpbmQgb2YgZGF0YSB3aWxsIGJlCisgKiBkZWNvZGVkIHRvIGF2b2lkIGFsbG9jYXRpbmcgZXhjZXNzaXZlIGFtb3VudCBvZiBtZW1vcnkgZm9yIHRoZSBkaWN0aW9uYXJ5LgorICoKKyAqIE11bHRpLWNhbGwgbW9kZSB3aXRoIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBkaWN0aW9uYXJ5IChYWl9EWU5BTExPQyk6CisgKiBkaWN0X21heCBzcGVjaWZpZXMgdGhlIG1heGltdW0gYWxsb3dlZCBkaWN0aW9uYXJ5IHNpemUgdGhhdCB4el9kZWNfcnVuKCkKKyAqIG1heSBhbGxvY2F0ZSBvbmNlIGl0IGhhcyBwYXJzZWQgdGhlIGRpY3Rpb25hcnkgc2l6ZSBmcm9tIHRoZSBzdHJlYW0KKyAqIGhlYWRlcnMuIFRoaXMgd2F5IGV4Y2Vzc2l2ZSBhbGxvY2F0aW9ucyBjYW4gYmUgYXZvaWRlZCB3aGlsZSBzdGlsbAorICogbGltaXRpbmcgdGhlIG1heGltdW0gbWVtb3J5IHVzYWdlIHRvIGEgc2FuZSB2YWx1ZSB0byBwcmV2ZW50IHJ1bm5pbmcgdGhlCisgKiBzeXN0ZW0gb3V0IG9mIG1lbW9yeSB3aGVuIGRlY29tcHJlc3Npbmcgc3RyZWFtcyBmcm9tIHVudHJ1c3RlZCBzb3VyY2VzLgorICoKKyAqIE9uIHN1Y2Nlc3MsIHh6X2RlY19pbml0KCkgcmV0dXJucyBhIHBvaW50ZXIgdG8gc3RydWN0IHh6X2RlYywgd2hpY2ggaXMKKyAqIHJlYWR5IHRvIGJlIHVzZWQgd2l0aCB4el9kZWNfcnVuKCkuIElmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLAorICogeHpfZGVjX2luaXQoKSByZXR1cm5zIE5VTEwuCisgKi8KK1haX0VYVEVSTiBzdHJ1Y3QgeHpfZGVjICp4el9kZWNfaW5pdChlbnVtIHh6X21vZGUgbW9kZSwgdWludDMyX3QgZGljdF9tYXgpOworCisvKioKKyAqIHh6X2RlY19ydW4oKSAtIFJ1biB0aGUgWFogZGVjb2RlcgorICogQHM6ICAgICAgICAgIERlY29kZXIgc3RhdGUgYWxsb2NhdGVkIHVzaW5nIHh6X2RlY19pbml0KCkKKyAqIEBiOiAgICAgICAgICBJbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMKKyAqCisgKiBUaGUgcG9zc2libGUgcmV0dXJuIHZhbHVlcyBkZXBlbmQgb24gYnVpbGQgb3B0aW9ucyBhbmQgb3BlcmF0aW9uIG1vZGUuCisgKiBTZWUgZW51bSB4el9yZXQgZm9yIGRldGFpbHMuCisgKgorICogTm90ZSB0aGF0IGlmIGFuIGVycm9yIG9jY3VycyBpbiBzaW5nbGUtY2FsbCBtb2RlIChyZXR1cm4gdmFsdWUgaXMgbm90CisgKiBYWl9TVFJFQU1fRU5EKSwgYi0+aW5fcG9zIGFuZCBiLT5vdXRfcG9zIGFyZSBub3QgbW9kaWZpZWQgYW5kIHRoZQorICogY29udGVudHMgb2YgdGhlIG91dHB1dCBidWZmZXIgZnJvbSBiLT5vdXRbYi0+b3V0X3Bvc10gb253YXJkIGFyZQorICogdW5kZWZpbmVkLiBUaGlzIGlzIHRydWUgZXZlbiBhZnRlciBYWl9CVUZfRVJST1IsIGJlY2F1c2Ugd2l0aCBzb21lIGZpbHRlcgorICogY2hhaW5zLCB0aGVyZSBtYXkgYmUgYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBvdXRwdXQgYnVmZmVyLCBhbmQgdGhpcyBwYXNzCisgKiBjYW5ub3QgYmUgcHJvcGVybHkgZG9uZSBpZiB0aGUgb3V0cHV0IGJ1ZmZlciBpcyB0cnVuY2F0ZWQuIFRodXMsIHlvdQorICogY2Fubm90IGdpdmUgdGhlIHNpbmdsZS1jYWxsIGRlY29kZXIgYSB0b28gc21hbGwgYnVmZmVyIGFuZCB0aGVuIGV4cGVjdCB0bworICogZ2V0IHRoYXQgYW1vdW50IHZhbGlkIGRhdGEgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJlYW0uIFlvdSBtdXN0IHVzZQorICogdGhlIG11bHRpLWNhbGwgZGVjb2RlciBpZiB5b3UgZG9uJ3Qgd2FudCB0byB1bmNvbXByZXNzIHRoZSB3aG9sZSBzdHJlYW0uCisgKi8KK1haX0VYVEVSTiBlbnVtIHh6X3JldCB4el9kZWNfcnVuKHN0cnVjdCB4el9kZWMgKnMsIHN0cnVjdCB4el9idWYgKmIpOworCisvKioKKyAqIHh6X2RlY19yZXNldCgpIC0gUmVzZXQgYW4gYWxyZWFkeSBhbGxvY2F0ZWQgZGVjb2RlciBzdGF0ZQorICogQHM6ICAgICAgICAgIERlY29kZXIgc3RhdGUgYWxsb2NhdGVkIHVzaW5nIHh6X2RlY19pbml0KCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHJlc2V0IHRoZSBtdWx0aS1jYWxsIGRlY29kZXIgc3RhdGUgd2l0aG91dAorICogZnJlZWluZyBhbmQgcmVhbGxvY2F0aW5nIG1lbW9yeSB3aXRoIHh6X2RlY19lbmQoKSBhbmQgeHpfZGVjX2luaXQoKS4KKyAqCisgKiBJbiBzaW5nbGUtY2FsbCBtb2RlLCB4el9kZWNfcmVzZXQoKSBpcyBhbHdheXMgY2FsbGVkIGluIHRoZSBiZWdpbm5pbmcgb2YKKyAqIHh6X2RlY19ydW4oKS4gVGh1cywgZXhwbGljaXQgY2FsbCB0byB4el9kZWNfcmVzZXQoKSBpcyB1c2VmdWwgb25seSBpbgorICogbXVsdGktY2FsbCBtb2RlLgorICovCitYWl9FWFRFUk4gdm9pZCB4el9kZWNfcmVzZXQoc3RydWN0IHh6X2RlYyAqcyk7CisKKy8qKgorICogeHpfZGVjX2VuZCgpIC0gRnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIGRlY29kZXIgc3RhdGUKKyAqIEBzOiAgICAgICAgICBEZWNvZGVyIHN0YXRlIGFsbG9jYXRlZCB1c2luZyB4el9kZWNfaW5pdCgpLiBJZiBzIGlzIE5VTEwsCisgKiAgICAgICAgICAgICAgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuCisgKi8KK1haX0VYVEVSTiB2b2lkIHh6X2RlY19lbmQoc3RydWN0IHh6X2RlYyAqcyk7CisKKy8qCisgKiBTdGFuZGFsb25lIGJ1aWxkICh1c2Vyc3BhY2UgYnVpbGQgb3IgaW4ta2VybmVsIGJ1aWxkIGZvciBib290IHRpbWUgdXNlKQorICogbmVlZHMgYSBDUkMzMiBpbXBsZW1lbnRhdGlvbi4gRm9yIG5vcm1hbCBpbi1rZXJuZWwgdXNlLCBrZXJuZWwncyBvd24KKyAqIENSQzMyIG1vZHVsZSBpcyB1c2VkIGluc3RlYWQsIGFuZCB1c2VycyBvZiB0aGlzIG1vZHVsZSBkb24ndCBuZWVkIHRvCisgKiBjYXJlIGFib3V0IHRoZSBmdW5jdGlvbnMgYmVsb3cuCisgKi8KKyNpZm5kZWYgWFpfSU5URVJOQUxfQ1JDMzIKKyMJaWZkZWYgX19LRVJORUxfXworIwkJZGVmaW5lIFhaX0lOVEVSTkFMX0NSQzMyIDAKKyMJZWxzZQorIwkJZGVmaW5lIFhaX0lOVEVSTkFMX0NSQzMyIDEKKyMJZW5kaWYKKyNlbmRpZgorCisjaWYgWFpfSU5URVJOQUxfQ1JDMzIKKy8qCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgeHpfKiBmdW5jdGlvbiB0byBpbml0aWFsaXplCisgKiB0aGUgQ1JDMzIgbG9va3VwIHRhYmxlLgorICovCitYWl9FWFRFUk4gdm9pZCB4el9jcmMzMl9pbml0KHZvaWQpOworCisvKgorICogVXBkYXRlIENSQzMyIHZhbHVlIHVzaW5nIHRoZSBwb2x5bm9taWFsIGZyb20gSUVFRS04MDIuMy4gVG8gc3RhcnQgYSBuZXcKKyAqIGNhbGN1bGF0aW9uLCB0aGUgdGhpcmQgYXJndW1lbnQgbXVzdCBiZSB6ZXJvLiBUbyBjb250aW51ZSB0aGUgY2FsY3VsYXRpb24sCisgKiB0aGUgcHJldmlvdXNseSByZXR1cm5lZCB2YWx1ZSBpcyBwYXNzZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LgorICovCitYWl9FWFRFUk4gdWludDMyX3QgeHpfY3JjMzIoY29uc3QgdWludDhfdCAqYnVmLCBzaXplX3Qgc2l6ZSwgdWludDMyX3QgY3JjKTsKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBzcy5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3Zwc3MuaAppbmRleCBjNTljYzAyLi5iNTg2NDk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBzcy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cHNzLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlzaG9ydCBwcGxlbjsKIH07CiAKLS8qIFVzZWQgZm9yIGVuYWJsZS9kaWFibGUgVlBTUyBDbG9jayAqLworLyogVXNlZCBmb3IgZW5hYmxlL2Rpc2FibGUgVlBTUyBDbG9jayAqLwogZW51bSB2cHNzX2Nsb2NrX3NlbCB7CiAJLyogRE0zNTUvRE0zNjUgKi8KIAlWUFNTX0NDRENfQ0xPQ0ssCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9haC5oIGIvaW5jbHVkZS9uZXQvYWguaAppbmRleCBmMDEyOWY3Li5iZTc3OThkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9haC5oCisrKyBiL2luY2x1ZGUvbmV0L2FoLmgKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKIC8qIFRoaXMgaXMgdGhlIG1heGltdW0gdHJ1bmNhdGVkIElDViBsZW5ndGggdGhhdCB3ZSBrbm93IG9mLiAqLwotI2RlZmluZSBNQVhfQUhfQVVUSF9MRU4JMTIKKyNkZWZpbmUgTUFYX0FIX0FVVEhfTEVOCTE2CiAKIHN0cnVjdCBjcnlwdG9fYWhhc2g7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FycC5oIGIvaW5jbHVkZS9uZXQvYXJwLmgKaW5kZXggZjRjZjZjZS4uOTFmMDU2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXJwLmgKKysrIGIvaW5jbHVkZS9uZXQvYXJwLmgKQEAgLTI1LDUgKzI1LDYgQEAKIAkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyY19odywKIAkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhcmdldF9odyk7CiBleHRlcm4gdm9pZCBhcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBhcnBfaW52YWxpZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMzIgaXApOwogCiAjZW5kaWYJLyogX0FSUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9waG9uZXQvcGhvbmV0LmggYi9pbmNsdWRlL25ldC9waG9uZXQvcGhvbmV0LmgKaW5kZXggZDVkZjc5Ny4uNTM5NWUwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcGhvbmV0L3Bob25ldC5oCisrKyBiL2luY2x1ZGUvbmV0L3Bob25ldC9waG9uZXQuaApAQCAtMTA3LDggKzEwNyw4IEBACiAJaW50CQkJc29ja190eXBlOwogfTsKIAotaW50IHBob25ldF9wcm90b19yZWdpc3RlcihpbnQgcHJvdG9jb2wsIHN0cnVjdCBwaG9uZXRfcHJvdG9jb2wgKnBwKTsKLXZvaWQgcGhvbmV0X3Byb3RvX3VucmVnaXN0ZXIoaW50IHByb3RvY29sLCBzdHJ1Y3QgcGhvbmV0X3Byb3RvY29sICpwcCk7CitpbnQgcGhvbmV0X3Byb3RvX3JlZ2lzdGVyKHVuc2lnbmVkIGludCBwcm90b2NvbCwgc3RydWN0IHBob25ldF9wcm90b2NvbCAqcHApOwordm9pZCBwaG9uZXRfcHJvdG9fdW5yZWdpc3Rlcih1bnNpZ25lZCBpbnQgcHJvdG9jb2wsIHN0cnVjdCBwaG9uZXRfcHJvdG9jb2wgKnBwKTsKIAogaW50IHBob25ldF9zeXNjdGxfaW5pdCh2b2lkKTsKIHZvaWQgcGhvbmV0X3N5c2N0bF9leGl0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKaW5kZXggMGFmNTdlYi4uZTllZWU5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCkBAIC0yMDcsNyArMjA3LDcgQEAKIAlyZXR1cm4gcS0+cS5xbGVuOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBxZGlzY19za2JfY2IgKnFkaXNjX3NrYl9jYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcWRpc2Nfc2tiX2NiICpxZGlzY19za2JfY2IoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gKHN0cnVjdCBxZGlzY19za2JfY2IgKilza2ItPmNiOwogfQpAQCAtMzk0LDcgKzM5NCw3IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHFkaXNjX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHFkaXNjX3BrdF9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gcWRpc2Nfc2tiX2NiKHNrYiktPnBrdF9sZW47CiB9CkBAIC00MjYsMTAgKzQyNiwxOCBAQAogCXJldHVybiBxZGlzY19lbnF1ZXVlKHNrYiwgc2NoKSAmIE5FVF9YTUlUX01BU0s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3FkaXNjX3VwZGF0ZV9ic3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGludCBsZW4pCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBic3RhdHNfdXBkYXRlKHN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljX3BhY2tlZCAqYnN0YXRzLAorCQkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXNjaC0+YnN0YXRzLmJ5dGVzICs9IGxlbjsKLQlzY2gtPmJzdGF0cy5wYWNrZXRzKys7CisJYnN0YXRzLT5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7CisJYnN0YXRzLT5wYWNrZXRzICs9IHNrYl9pc19nc28oc2tiKSA/IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgOiAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWRpc2NfYnN0YXRzX3VwZGF0ZShzdHJ1Y3QgUWRpc2MgKnNjaCwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlic3RhdHNfdXBkYXRlKCZzY2gtPmJzdGF0cywgc2tiKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgX19xZGlzY19lbnF1ZXVlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsCkBAIC00MzcsNyArNDQ1LDcgQEAKIHsKIAlfX3NrYl9xdWV1ZV90YWlsKGxpc3QsIHNrYik7CiAJc2NoLT5xc3RhdHMuYmFja2xvZyArPSBxZGlzY19wa3RfbGVuKHNrYik7Ci0JX19xZGlzY191cGRhdGVfYnN0YXRzKHNjaCwgcWRpc2NfcGt0X2xlbihza2IpKTsKKwlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAogCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmggYi9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaAppbmRleCAyYjI3NjljLi4yYTEyOGM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaApAQCAtOTksOCArOTksOCBAQAogI2RlZmluZSBTQ1RQX1NPQ0tPUFRfUEVFTE9GRgkxMDIJLyogcGVlbCBvZmYgYXNzb2NpYXRpb24uICovCiAvKiBPcHRpb25zIDEwNC0xMDYgYXJlIGRlcHJlY2F0ZWQgYW5kIHJlbW92ZWQuIERvIG5vdCB1c2UgdGhpcyBzcGFjZSAqLwogI2RlZmluZSBTQ1RQX1NPQ0tPUFRfQ09OTkVDVFhfT0xECTEwNwkvKiBDT05ORUNUWCBvbGQgcmVxdWVzdHMuICovCi0jZGVmaW5lIFNDVFBfR0VUX1BFRVJfQUREUlMJMTA4CQkvKiBHZXQgYWxsIHBlZXIgYWRkcmVzc3MuICovCi0jZGVmaW5lIFNDVFBfR0VUX0xPQ0FMX0FERFJTCTEwOQkJLyogR2V0IGFsbCBsb2NhbCBhZGRyZXNzcy4gKi8KKyNkZWZpbmUgU0NUUF9HRVRfUEVFUl9BRERSUwkxMDgJCS8qIEdldCBhbGwgcGVlciBhZGRyZXNzLiAqLworI2RlZmluZSBTQ1RQX0dFVF9MT0NBTF9BRERSUwkxMDkJCS8qIEdldCBhbGwgbG9jYWwgYWRkcmVzcy4gKi8KICNkZWZpbmUgU0NUUF9TT0NLT1BUX0NPTk5FQ1RYCTExMAkJLyogQ09OTkVDVFggcmVxdWVzdHMuICovCiAjZGVmaW5lIFNDVFBfU09DS09QVF9DT05ORUNUWDMJMTExCS8qIENPTk5FQ1RYIHJlcXVlc3RzICh1cGRhdGVkKSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggMjFhMDJmNy4uZDg4NGQyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtMTUyLDE0ICsxNTIsMTggQEAKIAkgKiBmaWVsZHMgYmV0d2VlbiBkb250Y29weV9iZWdpbi9kb250Y29weV9lbmQKIAkgKiBhcmUgbm90IGNvcGllZCBpbiBzb2NrX2NvcHkoKQogCSAqLworCS8qIHByaXZhdGU6ICovCiAJaW50CQkJc2tjX2RvbnRjb3B5X2JlZ2luWzBdOworCS8qIHB1YmxpYzogKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCBobGlzdF9ub2RlCXNrY19ub2RlOwogCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBza2NfbnVsbHNfbm9kZTsKIAl9OwogCWludAkJCXNrY190eF9xdWV1ZV9tYXBwaW5nOwogCWF0b21pY190CQlza2NfcmVmY250OworCS8qIHByaXZhdGU6ICovCiAJaW50ICAgICAgICAgICAgICAgICAgICAgc2tjX2RvbnRjb3B5X2VuZFswXTsKKwkvKiBwdWJsaWM6ICovCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9mYy9mY19mY3AuaCBiL2luY2x1ZGUvc2NzaS9mYy9mY19mY3AuaAppbmRleCA4ZTliMjIyLi44YTE0M2NhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvZmMvZmNfZmNwLmgKKysrIGIvaW5jbHVkZS9zY3NpL2ZjL2ZjX2ZjcC5oCkBAIC00Niw3ICs0Niw3IEBACiAgKi8KIHN0cnVjdCBmY3BfY21uZCB7CiAJX191OAkJZmNfbHVuWzhdOwkvKiBsb2dpY2FsIHVuaXQgbnVtYmVyICovCi0JX191OAkJZmNfY21kcmVmOwkvKiBjb21tbWFuZCByZWZlcmVuY2UgbnVtYmVyICovCisJX191OAkJZmNfY21kcmVmOwkvKiBjb21tYW5kIHJlZmVyZW5jZSBudW1iZXIgKi8KIAlfX3U4CQlmY19wcmlfdGE7CS8qIHByaW9yaXR5IGFuZCB0YXNrIGF0dHJpYnV0ZSAqLwogCV9fdTgJCWZjX3RtX2ZsYWdzOwkvKiB0YXNrIG1hbmFnZW1lbnQgZmxhZ3MgKi8KIAlfX3U4CQlmY19mbGFnczsJLyogYWRkaXRpb25hbCBsZW4gJiBmbGFncyAqLwpAQCAtNTgsNyArNTgsNyBAQAogCiBzdHJ1Y3QgZmNwX2NtbmQzMiB7CiAJX191OAkJZmNfbHVuWzhdOwkvKiBsb2dpY2FsIHVuaXQgbnVtYmVyICovCi0JX191OAkJZmNfY21kcmVmOwkvKiBjb21tbWFuZCByZWZlcmVuY2UgbnVtYmVyICovCisJX191OAkJZmNfY21kcmVmOwkvKiBjb21tYW5kIHJlZmVyZW5jZSBudW1iZXIgKi8KIAlfX3U4CQlmY19wcmlfdGE7CS8qIHByaW9yaXR5IGFuZCB0YXNrIGF0dHJpYnV0ZSAqLwogCV9fdTgJCWZjX3RtX2ZsYWdzOwkvKiB0YXNrIG1hbmFnZW1lbnQgZmxhZ3MgKi8KIAlfX3U4CQlmY19mbGFnczsJLyogYWRkaXRpb25hbCBsZW4gJiBmbGFncyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9hbGM1NjIzLmggYi9pbmNsdWRlL3NvdW5kL2FsYzU2MjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjJjOTdkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9hbGM1NjIzLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfSU5DTFVERV9TT1VORF9BTEM1NjIzX0gKKyNkZWZpbmUgX0lOQ0xVREVfU09VTkRfQUxDNTYyM19ICitzdHJ1Y3QgYWxjNTYyM19wbGF0Zm9ybV9kYXRhIHsKKwkvKiBjb25maWd1cmUgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogTGluZW91dC9TcGVha2VyIEFtcHMgVm1pZCByYXRpbyBjb250cm9sICAqLworCS8qIGVuYWJsZS9kaXNhYmxlIGFkYy9kYWMgaGlnaCBwYXNzIGZpbHRlcnMgKi8KKwl1bnNpZ25lZCBpbnQgYWRkX2N0cmw7CisJLyogY29uZmlndXJlIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIG91dHB1dCB0byBlbmFibGUgd2hlbiBqYWNrIGlzIGxvdyAgICAgICAgKi8KKwkvKiBvdXRwdXQgdG8gZW5hYmxlIHdoZW4gamFjayBpcyBoaWdoICAgICAgICovCisJLyogamFjayBkZXRlY3QgKGdwaW8vbmMvamFjayBkZXRlY3QgWzEyXSAgICAqLworCXVuc2lnbmVkIGludCBqYWNrX2RldF9jdHJsOworfTsKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oIGIvaW5jbHVkZS9zb3VuZC9hc291bmQuaAppbmRleCBhMTgwM2VjLi41ZDYwNzRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oCisrKyBiL2luY2x1ZGUvc291bmQvYXNvdW5kLmgKQEAgLTI1OSw2ICsyNTksNyBAQAogI2RlZmluZSBTTkRSVl9QQ01fSU5GT19IQUxGX0RVUExFWAkweDAwMTAwMDAwCS8qIG9ubHkgaGFsZiBkdXBsZXggKi8KICNkZWZpbmUgU05EUlZfUENNX0lORk9fSk9JTlRfRFVQTEVYCTB4MDAyMDAwMDAJLyogcGxheWJhY2sgYW5kIGNhcHR1cmUgc3RyZWFtIGFyZSBzb21ld2hhdCBjb3JyZWxhdGVkICovCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQJMHgwMDQwMDAwMAkvKiBwY20gc3VwcG9ydCBzb21lIGtpbmQgb2Ygc3luYyBnbyAqLworI2RlZmluZSBTTkRSVl9QQ01fSU5GT19OT19QRVJJT0RfV0FLRVVQCTB4MDA4MDAwMDAJLyogcGVyaW9kIHdha2V1cCBjYW4gYmUgZGlzYWJsZWQgKi8KICNkZWZpbmUgU05EUlZfUENNX0lORk9fRklGT19JTl9GUkFNRVMJMHg4MDAwMDAwMAkvKiBpbnRlcm5hbCBrZXJuZWwgZmxhZyAtIEZJRk8gc2l6ZSBpcyBpbiBmcmFtZXMgKi8KIAogdHlwZWRlZiBpbnQgX19iaXR3aXNlIHNuZF9wY21fc3RhdGVfdDsKQEAgLTMzNCw2ICszMzUsOCBAQAogI2RlZmluZQlTTkRSVl9QQ01fSFdfUEFSQU1fTEFTVF9JTlRFUlZBTAlTTkRSVl9QQ01fSFdfUEFSQU1fVElDS19USU1FCiAKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNU19OT1JFU0FNUExFCSgxPDwwKQkvKiBhdm9pZCByYXRlIHJlc2FtcGxpbmcgKi8KKyNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNU19FWFBPUlRfQlVGRkVSCSgxPDwxKQkvKiBleHBvcnQgYnVmZmVyICovCisjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTVNfTk9fUEVSSU9EX1dBS0VVUAkoMTw8MikJLyogZGlzYWJsZSBwZXJpb2Qgd2FrZXVwcyAqLwogCiBzdHJ1Y3Qgc25kX2ludGVydmFsIHsKIAl1bnNpZ25lZCBpbnQgbWluLCBtYXg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaCBiL2luY2x1ZGUvc291bmQvY29udHJvbC5oCmluZGV4IDExMjM3NGQuLjc3MTVlNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY29udHJvbC5oCisrKyBiL2luY2x1ZGUvc291bmQvY29udHJvbC5oCkBAIC0xNjAsMTIgKzE2MCwxNCBAQAogfQogCiAvKgotICogRnJlcXVlbnRseSB1c2VkIGNvbnRyb2wgY2FsbGJhY2tzCisgKiBGcmVxdWVudGx5IHVzZWQgY29udHJvbCBjYWxsYmFja3MvaGVscGVycwogICovCiBpbnQgc25kX2N0bF9ib29sZWFuX21vbm9faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pOwogaW50IHNuZF9jdGxfYm9vbGVhbl9zdGVyZW9faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKTsKK2ludCBzbmRfY3RsX2VudW1faW5mbyhzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjaGFubmVscywKKwkJICAgICAgdW5zaWduZWQgaW50IGl0ZW1zLCBjb25zdCBjaGFyICpjb25zdCBuYW1lc1tdKTsKIAogLyoKICAqIHZpcnR1YWwgbWFzdGVyIGNvbnRyb2wKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvaGRzcC5oIGIvaW5jbHVkZS9zb3VuZC9oZHNwLmgKaW5kZXggZDk4YTc4ZC4uMDkwOWEzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9oZHNwLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9oZHNwLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAlNdWx0aWZhY2UsCiAJSDk2NTIsCiAJSDk2MzIsCisJUlBNLAogCVVuZGVmaW5lZCwKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvbWlub3JzLmggYi9pbmNsdWRlL3NvdW5kL21pbm9ycy5oCmluZGV4IGE4MTc5OGEuLjhmNzY0MjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvbWlub3JzLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9taW5vcnMuaApAQCAtMzEsOCArMzEsOCBAQAogLyogdGhlc2UgbWlub3JzIGNhbiBzdGlsbCBiZSB1c2VkIGZvciBhdXRvbG9hZGluZyBkZXZpY2VzICgvZGV2L2Fsb2FkKikgKi8KICNkZWZpbmUgU05EUlZfTUlOT1JfQ09OVFJPTAkJMAkvKiAwICovCiAjZGVmaW5lIFNORFJWX01JTk9SX0dMT0JBTAkJMQkvKiAxICovCi0jZGVmaW5lIFNORFJWX01JTk9SX1NFUVVFTkNFUgkJKFNORFJWX01JTk9SX0dMT0JBTCArIDAgKiAzMikKLSNkZWZpbmUgU05EUlZfTUlOT1JfVElNRVIJCShTTkRSVl9NSU5PUl9HTE9CQUwgKyAxICogMzIpCisjZGVmaW5lIFNORFJWX01JTk9SX1NFUVVFTkNFUgkJMQkvKiBTTkRSVl9NSU5PUl9HTE9CQUwgKyAwICogMzIgKi8KKyNkZWZpbmUgU05EUlZfTUlOT1JfVElNRVIJCTMzCS8qIFNORFJWX01JTk9SX0dMT0JBTCArIDEgKiAzMiAqLwogCiAjaWZuZGVmIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMKIAkJCQkJCS8qIDIgLSAzIChyZXNlcnZlZCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcGNtLmggYi9pbmNsdWRlL3NvdW5kL3BjbS5oCmluZGV4IGRmZDliNzYuLmU3MzFmOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcGNtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9wY20uaApAQCAtMjk3LDYgKzI5Nyw3IEBACiAJdW5zaWduZWQgaW50IGluZm87CiAJdW5zaWduZWQgaW50IHJhdGVfbnVtOwogCXVuc2lnbmVkIGludCByYXRlX2RlbjsKKwl1bnNpZ25lZCBpbnQgbm9fcGVyaW9kX3dha2V1cDogMTsKIAogCS8qIC0tIFNXIHBhcmFtcyAtLSAqLwogCWludCB0c3RhbXBfbW9kZTsJCS8qIG1tYXAgdGltZXN0YW1wIGlzIHVwZGF0ZWQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLWRhaS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKaW5kZXggZTdiNjgwMi4uMWJhZmU5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKQEAgLTE2LDggKzE2LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAotI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotCiBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW07CiAKIC8qCkBAIC0yMDUsNyArMjAzLDcgQEAKIAlpbnQgKCpyZXN1bWUpKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKTsKIAogCS8qIG9wcyAqLwotCXN0cnVjdCBzbmRfc29jX2RhaV9vcHMgKm9wczsKKwljb25zdCBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzICpvcHM7CiAKIAkvKiBEQUkgY2FwYWJpbGl0aWVzICovCiAJc3RydWN0IHNuZF9zb2NfcGNtX3N0cmVhbSBjYXB0dXJlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCmluZGV4IDhmZDNiNDEuLjgwMzE3NjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KIAogLyogd2lkZ2V0IGhhcyBubyBQTSByZWdpc3RlciBiaXQgKi8KICNkZWZpbmUgU05EX1NPQ19OT1BNCS0xCkBAIC03Miw2ICs3MSwxMCBAQAogCSB3Y29udHJvbHMsIHduY29udHJvbHMpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX3BnYSwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAogCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IHduY29udHJvbHN9CisjZGVmaW5lIFNORF9TT0NfREFQTV9PVVRfRFJWKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsXAorCSB3Y29udHJvbHMsIHduY29udHJvbHMpIFwKK3sJLmlkID0gc25kX3NvY19kYXBtX291dF9kcnYsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzfQogI2RlZmluZSBTTkRfU09DX0RBUE1fTUlYRVIod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgXAogCSB3Y29udHJvbHMsIHduY29udHJvbHMpXAogewkuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKQEAgLTkwLDYgKzkzLDkgQEAKICNkZWZpbmUgU05EX1NPQ19EQVBNX01VWCh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3Y29udHJvbHMpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX211eCwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAogCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IDF9CisjZGVmaW5lIFNORF9TT0NfREFQTV9WSVJUX01VWCh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3Y29udHJvbHMpIFwKK3sJLmlkID0gc25kX3NvY19kYXBtX3ZpcnRfbXV4LCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCisJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gMX0KICNkZWZpbmUgU05EX1NPQ19EQVBNX1ZBTFVFX01VWCh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3Y29udHJvbHMpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX3ZhbHVlX211eCwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIFwKIAkuc2hpZnQgPSB3c2hpZnQsIC5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCBcCkBAIC0xMTYsNiArMTIyLDExIEBACiB7CS5pZCA9IHNuZF9zb2NfZGFwbV9wZ2EsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKIAkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzLCBcCiAJLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CisjZGVmaW5lIFNORF9TT0NfREFQTV9PVVRfRFJWX0Uod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgd2NvbnRyb2xzLCBcCisJd25jb250cm9scywgd2V2ZW50LCB3ZmxhZ3MpIFwKK3sJLmlkID0gc25kX3NvY19kYXBtX291dF9kcnYsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzLCBcCisJLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9NSVhFUl9FKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIHdjb250cm9scywgXAogCXduY29udHJvbHMsIHdldmVudCwgd2ZsYWdzKSBcCiB7CS5pZCA9IHNuZF9zb2NfZGFwbV9taXhlciwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXApAQCAtMTQwLDYgKzE1MSwxMSBAQAogewkuaWQgPSBzbmRfc29jX2RhcG1fbXV4LCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCiAJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gMSwgXAogCS5ldmVudCA9IHdldmVudCwgLmV2ZW50X2ZsYWdzID0gd2ZsYWdzfQorI2RlZmluZSBTTkRfU09DX0RBUE1fVklSVF9NVVhfRSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3Y29udHJvbHMsIFwKKwl3ZXZlbnQsIHdmbGFncykgXAorewkuaWQgPSBzbmRfc29jX2RhcG1fdmlydF9tdXgsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSAxLCBcCisJLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CiAKIC8qIFNpbXBsaWZpZWQgdmVyc2lvbnMgb2YgYWJvdmUgbWFjcm9zLCBhc3N1bWluZyB3bmNvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpICovCiAjZGVmaW5lIFNPQ19QR0FfRV9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3Y29udHJvbHMsIFwKQEAgLTIxOSwxMyArMjM1LDYgQEAKIAkuaW5mbyA9IHNuZF9zb2NfaW5mb192b2xzdywgXAogCS5nZXQgPSBzbmRfc29jX2RhcG1fZ2V0X3ZvbHN3LCAucHV0ID0gc25kX3NvY19kYXBtX3B1dF92b2xzdywgXAogCS5wcml2YXRlX3ZhbHVlID0gIFNPQ19TSU5HTEVfVkFMVUUocmVnLCBzaGlmdCwgbWF4LCBpbnZlcnQpIH0KLSNkZWZpbmUgU09DX0RBUE1fRE9VQkxFKHhuYW1lLCByZWcsIHNoaWZ0X2xlZnQsIHNoaWZ0X3JpZ2h0LCBtYXgsIGludmVydCwgXAotCXBvd2VyKSBcCi17CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9ICh4bmFtZSksIFwKLQkuaW5mbyA9IHNuZF9zb2NfaW5mb192b2xzdywgXAotIAkuZ2V0ID0gc25kX3NvY19kYXBtX2dldF92b2xzdywgLnB1dCA9IHNuZF9zb2NfZGFwbV9wdXRfdm9sc3csIFwKLSAJLnByaXZhdGVfdmFsdWUgPSAocmVnKSB8ICgoc2hpZnRfbGVmdCkgPDwgOCkgfCAoKHNoaWZ0X3JpZ2h0KSA8PCAxMikgfFwKLQkJKChtYXgpIDw8IDE2KSB8ICgoaW52ZXJ0KSA8PCAyNCkgfQogI2RlZmluZSBTT0NfREFQTV9TSU5HTEVfVExWKHhuYW1lLCByZWcsIHNoaWZ0LCBtYXgsIGludmVydCwgdGx2X2FycmF5KSBcCiB7CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCBcCiAJLmluZm8gPSBzbmRfc29jX2luZm9fdm9sc3csIFwKQEAgLTIzMywxNSArMjQyLDYgQEAKIAkudGx2LnAgPSAodGx2X2FycmF5KSwgXAogCS5nZXQgPSBzbmRfc29jX2RhcG1fZ2V0X3ZvbHN3LCAucHV0ID0gc25kX3NvY19kYXBtX3B1dF92b2xzdywgXAogCS5wcml2YXRlX3ZhbHVlID0gIFNPQ19TSU5HTEVfVkFMVUUocmVnLCBzaGlmdCwgbWF4LCBpbnZlcnQpIH0KLSNkZWZpbmUgU09DX0RBUE1fRE9VQkxFX1RMVih4bmFtZSwgcmVnLCBzaGlmdF9sZWZ0LCBzaGlmdF9yaWdodCwgbWF4LCBpbnZlcnQsIFwKLQlwb3dlciwgdGx2X2FycmF5KSBcCi17CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9ICh4bmFtZSksIFwKLQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSxcCi0JLnRsdi5wID0gKHRsdl9hcnJheSksIFwKLQkuaW5mbyA9IHNuZF9zb2NfaW5mb192b2xzdywgXAotCS5nZXQgPSBzbmRfc29jX2RhcG1fZ2V0X3ZvbHN3LCAucHV0ID0gc25kX3NvY19kYXBtX3B1dF92b2xzdywgXAotCS5wcml2YXRlX3ZhbHVlID0gKHJlZykgfCAoKHNoaWZ0X2xlZnQpIDw8IDgpIHwgKChzaGlmdF9yaWdodCkgPDwgMTIpIHxcCi0JCSgobWF4KSA8PCAxNikgfCAoKGludmVydCkgPDwgMjQpIH0KICNkZWZpbmUgU09DX0RBUE1fRU5VTSh4bmFtZSwgeGVudW0pIFwKIHsJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIFwKIAkuaW5mbyA9IHNuZF9zb2NfaW5mb19lbnVtX2RvdWJsZSwgXApAQCAtMjk3LDYgKzI5Nyw3IEBACiBzdHJ1Y3Qgc25kX3NvY19kYXBtX3BhdGg7CiBzdHJ1Y3Qgc25kX3NvY19kYXBtX3BpbjsKIHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGU7CitzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQ7CiAKIGludCBkYXBtX3JlZ19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCk7CkBAIC0zMjQsMTYgKzMyNSwxNiBAQAogCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVuY29udHJvbCk7CiBpbnQgc25kX3NvY19kYXBtX3B1dF9waW5fc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVuY29udHJvbCk7Ci1pbnQgc25kX3NvY19kYXBtX25ld19jb250cm9sKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKK2ludCBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2woc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAogCWNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQpOwotaW50IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAoraW50IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAogCWNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQsCiAJaW50IG51bSk7CiAKIC8qIGRhcG0gcGF0aCBzZXR1cCAqLwotaW50IHNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOwotdm9pZCBzbmRfc29jX2RhcG1fZnJlZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOwotaW50IHNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKK2ludCBzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtKTsKK3ZvaWQgc25kX3NvY19kYXBtX2ZyZWUoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtKTsKK2ludCBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCiAJCQkgICAgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSAqcm91dGUsIGludCBudW0pOwogCiAvKiBkYXBtIGV2ZW50cyAqLwpAQCAtMzQzLDI3ICszNDQsMzMgQEAKIAogLyogZGFwbSBzeXMgZnMgLSB1c2VkIGJ5IHRoZSBjb3JlICovCiBpbnQgc25kX3NvY19kYXBtX3N5c19hZGQoc3RydWN0IGRldmljZSAqZGV2KTsKLXZvaWQgc25kX3NvY19kYXBtX2RlYnVnZnNfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOwordm9pZCBzbmRfc29jX2RhcG1fZGVidWdmc19pbml0KHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSk7CiAKIC8qIGRhcG0gYXVkaW8gcGluIGNvbnRyb2wgYW5kIHN0YXR1cyAqLwotaW50IHNuZF9zb2NfZGFwbV9lbmFibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKTsKLWludCBzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pOwotaW50IHNuZF9zb2NfZGFwbV9uY19waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pOwotaW50IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbik7Ci1pbnQgc25kX3NvY19kYXBtX3N5bmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKTsKLWludCBzbmRfc29jX2RhcG1fZm9yY2VfZW5hYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCitpbnQgc25kX3NvY19kYXBtX2VuYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAorCQkJICAgIGNvbnN0IGNoYXIgKnBpbik7CitpbnQgc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKKwkJCSAgICAgY29uc3QgY2hhciAqcGluKTsKK2ludCBzbmRfc29jX2RhcG1fbmNfcGluKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwgY29uc3QgY2hhciAqcGluKTsKK2ludCBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAorCQkJCWNvbnN0IGNoYXIgKnBpbik7CitpbnQgc25kX3NvY19kYXBtX3N5bmMoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtKTsKK2ludCBzbmRfc29jX2RhcG1fZm9yY2VfZW5hYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCiAJCQkJICBjb25zdCBjaGFyICpwaW4pOwotaW50IHNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbik7CitpbnQgc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKKwkJCQljb25zdCBjaGFyICpwaW4pOwogCiAvKiBkYXBtIHdpZGdldCB0eXBlcyAqLwogZW51bSBzbmRfc29jX2RhcG1fdHlwZSB7CiAJc25kX3NvY19kYXBtX2lucHV0ID0gMCwJCS8qIGlucHV0IHBpbiAqLwogCXNuZF9zb2NfZGFwbV9vdXRwdXQsCQkvKiBvdXRwdXQgcGluICovCiAJc25kX3NvY19kYXBtX211eCwJCQkvKiBzZWxlY3RzIDEgYW5hbG9nIHNpZ25hbCBmcm9tIG1hbnkgaW5wdXRzICovCisJc25kX3NvY19kYXBtX3ZpcnRfbXV4LAkJCS8qIHZpcnR1YWwgdmVyc2lvbiBvZiBzbmRfc29jX2RhcG1fbXV4ICovCiAJc25kX3NvY19kYXBtX3ZhbHVlX211eCwJCQkvKiBzZWxlY3RzIDEgYW5hbG9nIHNpZ25hbCBmcm9tIG1hbnkgaW5wdXRzICovCiAJc25kX3NvY19kYXBtX21peGVyLAkJCS8qIG1peGVzIHNldmVyYWwgYW5hbG9nIHNpZ25hbHMgdG9nZXRoZXIgKi8KIAlzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsLAkJLyogbWl4ZXIgd2l0aCBuYW1lZCBjb250cm9scyAqLwogCXNuZF9zb2NfZGFwbV9wZ2EsCQkJLyogcHJvZ3JhbW1hYmxlIGdhaW4vYXR0ZW51YXRpb24gKHZvbHVtZSkgKi8KKwlzbmRfc29jX2RhcG1fb3V0X2RydiwJCQkvKiBvdXRwdXQgZHJpdmVyICovCiAJc25kX3NvY19kYXBtX2FkYywJCQkvKiBhbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0ZXIgKi8KIAlzbmRfc29jX2RhcG1fZGFjLAkJCS8qIGRpZ2l0YWwgdG8gYW5hbG9nIGNvbnZlcnRlciAqLwogCXNuZF9zb2NfZGFwbV9taWNiaWFzLAkJLyogbWljcm9waG9uZSBiaWFzIChwb3dlcikgKi8KQEAgLTQyNSw2ICs0MzIsNyBAQAogCWNoYXIgKnNuYW1lOwkvKiBzdHJlYW0gbmFtZSAqLwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtOwogCiAJLyogZGFwbSBjb250cm9sICovCiAJc2hvcnQgcmVnOwkJCQkJCS8qIG5lZ2F0aXZlIHJlZyA9IG5vIGRpcmVjdCBkYXBtICovCkBAIC00NjEsNCArNDY5LDM1IEBACiAJc3RydWN0IGxpc3RfaGVhZCBwb3dlcl9saXN0OwogfTsKIAorc3RydWN0IHNuZF9zb2NfZGFwbV91cGRhdGUgeworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQ7CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2w7CisJaW50IHJlZzsKKwlpbnQgbWFzazsKKwlpbnQgdmFsOworfTsKKworLyogREFQTSBjb250ZXh0ICovCitzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgeworCWludCBuX3dpZGdldHM7IC8qIG51bWJlciBvZiB3aWRnZXRzIGluIHRoaXMgY29udGV4dCAqLworCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGJpYXNfbGV2ZWw7CisJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgc3VzcGVuZF9iaWFzX2xldmVsOworCXN0cnVjdCBkZWxheWVkX3dvcmsgZGVsYXllZF93b3JrOworCXVuc2lnbmVkIGludCBpZGxlX2JpYXNfb2ZmOjE7IC8qIFVzZSBCSUFTX09GRiBpbnN0ZWFkIG9mIFNUQU5EQlkgKi8KKworCXN0cnVjdCBzbmRfc29jX2RhcG1fdXBkYXRlICp1cGRhdGU7CisKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7IC8qIGZyb20gcGFyZW50IC0gZm9yIGRlYnVnICovCisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOyAvKiBwYXJlbnQgY29kZWMgKi8KKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkOyAvKiBwYXJlbnQgY2FyZCAqLworCisJLyogdXNlZCBkdXJpbmcgREFQTSB1cGRhdGVzICovCisJaW50IGRldl9wb3dlcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RhcG07CisjZW5kaWYKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MuaCBiL2luY2x1ZGUvc291bmQvc29jLmgKaW5kZXggNWMzYmNlOC4uNzQ5MjFmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy5oCkBAIC0yMjIsMTAgKzIyMiw4IEBACiAKIHN0cnVjdCBzbmRfamFjazsKIHN0cnVjdCBzbmRfc29jX2NhcmQ7Ci1zdHJ1Y3Qgc25kX3NvY19kZXZpY2U7CiBzdHJ1Y3Qgc25kX3NvY19wY21fc3RyZWFtOwogc3RydWN0IHNuZF9zb2Nfb3BzOwotc3RydWN0IHNuZF9zb2NfZGFpX21vZGU7CiBzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZTsKIHN0cnVjdCBzbmRfc29jX2RhaTsKIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXI7CkBAIC0yMzUsOSArMjMzLDEwIEBACiBzdHJ1Y3Qgc25kX3NvY19jb2RlYzsKIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlcjsKIHN0cnVjdCBzb2NfZW51bTsKLXN0cnVjdCBzbmRfc29jX2FjOTdfb3BzOwogc3RydWN0IHNuZF9zb2NfamFjazsKIHN0cnVjdCBzbmRfc29jX2phY2tfcGluOworc3RydWN0IHNuZF9zb2NfY2FjaGVfb3BzOworI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKICNpZmRlZiBDT05GSUdfR1BJT0xJQgogc3RydWN0IHNuZF9zb2NfamFja19ncGlvOwpAQCAtMjUzLDE3ICsyNTIsMzAgQEAKIAlTTkRfU09DX1NQSSwKIH07CiAKK2VudW0gc25kX3NvY19jb21wcmVzc190eXBlIHsKKwlTTkRfU09DX0ZMQVRfQ09NUFJFU1NJT04gPSAxLAorCVNORF9TT0NfTFpPX0NPTVBSRVNTSU9OLAorCVNORF9TT0NfUkJUUkVFX0NPTVBSRVNTSU9OCit9OworCiBpbnQgc25kX3NvY19yZWdpc3Rlcl9wbGF0Zm9ybShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtX2RyaXZlciAqcGxhdGZvcm1fZHJ2KTsKIHZvaWQgc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKHN0cnVjdCBkZXZpY2UgKmRldik7CiBpbnQgc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciAqY29kZWNfZHJ2LAorCQljb25zdCBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgKmNvZGVjX2RydiwKIAkJc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciAqZGFpX2RydiwgaW50IG51bV9kYWkpOwogdm9pZCBzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoc3RydWN0IGRldmljZSAqZGV2KTsKIGludCBzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHJlZyk7CiBpbnQgc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJICAgICAgIGludCBhZGRyX2JpdHMsIGludCBkYXRhX2JpdHMsCiAJCQkgICAgICAgZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sKTsKK2ludCBzbmRfc29jX2NhY2hlX3N5bmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKTsKK2ludCBzbmRfc29jX2NhY2hlX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKTsKK2ludCBzbmRfc29jX2NhY2hlX2V4aXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKTsKK2ludCBzbmRfc29jX2NhY2hlX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCXVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSk7CitpbnQgc25kX3NvY19jYWNoZV9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJICAgICAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCAqdmFsdWUpOwogCiAvKiBVdGlsaXR5IGZ1bmN0aW9ucyB0byBnZXQgY2xvY2sgcmF0ZXMgZnJvbSB2YXJpb3VzIHRoaW5ncyAqLwogaW50IHNuZF9zb2NfY2FsY19mcmFtZV9zaXplKGludCBzYW1wbGVfc2l6ZSwgaW50IGNoYW5uZWxzLCBpbnQgdGRtX3Nsb3RzKTsKQEAgLTQyMCwyMyArNDMyLDM3IEBACiAJaW50ICgqdHJpZ2dlcikoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICosIGludCk7CiB9OwogCisvKiBTb0MgY2FjaGUgb3BzICovCitzdHJ1Y3Qgc25kX3NvY19jYWNoZV9vcHMgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJZW51bSBzbmRfc29jX2NvbXByZXNzX3R5cGUgaWQ7CisJaW50ICgqaW5pdCkoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKTsKKwlpbnQgKCpleGl0KShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOworCWludCAoKnJlYWQpKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwkJdW5zaWduZWQgaW50ICp2YWx1ZSk7CisJaW50ICgqd3JpdGUpKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwkJdW5zaWduZWQgaW50IHZhbHVlKTsKKwlpbnQgKCpzeW5jKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOworfTsKKwogLyogU29DIEF1ZGlvIENvZGVjIGRldmljZSAqLwogc3RydWN0IHNuZF9zb2NfY29kZWMgewogCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqbmFtZV9wcmVmaXg7CiAJaW50IGlkOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgKmRyaXZlcjsKKwljb25zdCBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgKmRyaXZlcjsKIAogCXN0cnVjdCBtdXRleCBtdXRleDsKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNhcmRfbGlzdDsKIAlpbnQgbnVtX2RhaTsKKwllbnVtIHNuZF9zb2NfY29tcHJlc3NfdHlwZSBjb21wcmVzc190eXBlOwogCiAJLyogcnVudGltZSAqLwogCXN0cnVjdCBzbmRfYWM5NyAqYWM5NzsgIC8qIGZvciBhZC1ob2MgYWM5NyBkZXZpY2VzICovCiAJdW5zaWduZWQgaW50IGFjdGl2ZTsKLQl1bnNpZ25lZCBpbnQgaWRsZV9iaWFzX29mZjoxOyAvKiBVc2UgQklBU19PRkYgaW5zdGVhZCBvZiBTVEFOREJZICovCiAJdW5zaWduZWQgaW50IGNhY2hlX29ubHk6MTsgIC8qIFN1cHByZXNzIHdyaXRlcyB0byBoYXJkd2FyZSAqLwogCXVuc2lnbmVkIGludCBjYWNoZV9zeW5jOjE7IC8qIENhY2hlIG5lZWRzIHRvIGJlIHN5bmNlZCB0byBoYXJkd2FyZSAqLwogCXVuc2lnbmVkIGludCBzdXNwZW5kZWQ6MTsgLyogQ29kZWMgaXMgaW4gc3VzcGVuZCBQTSBzdGF0ZSAqLwpAQCAtNDQ0LDI1ICs0NzAsMjUgQEAKIAl1bnNpZ25lZCBpbnQgYWM5N19yZWdpc3RlcmVkOjE7IC8qIENvZGVjIGhhcyBiZWVuIEFDOTcgcmVnaXN0ZXJlZCAqLwogCXVuc2lnbmVkIGludCBhYzk3X2NyZWF0ZWQ6MTsgLyogQ29kZWMgaGFzIGJlZW4gY3JlYXRlZCBieSBTb0MgKi8KIAl1bnNpZ25lZCBpbnQgc3lzZnNfcmVnaXN0ZXJlZDoxOyAvKiBjb2RlYyBoYXMgYmVlbiBzeXNmcyByZWdpc3RlcmVkICovCisJdW5zaWduZWQgaW50IGNhY2hlX2luaXQ6MTsgLyogY29kZWMgY2FjaGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKi8KIAogCS8qIGNvZGVjIElPICovCiAJdm9pZCAqY29udHJvbF9kYXRhOyAvKiBjb2RlYyBjb250cm9sIChpMmMvM3dpcmUpIGRhdGEgKi8KIAlod193cml0ZV90IGh3X3dyaXRlOwogCXVuc2lnbmVkIGludCAoKmh3X3JlYWQpKHN0cnVjdCBzbmRfc29jX2NvZGVjICosIHVuc2lnbmVkIGludCk7CisJdW5zaWduZWQgaW50ICgqcmVhZCkoc3RydWN0IHNuZF9zb2NfY29kZWMgKiwgdW5zaWduZWQgaW50KTsKKwlpbnQgKCp3cml0ZSkoc3RydWN0IHNuZF9zb2NfY29kZWMgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogCXZvaWQgKnJlZ19jYWNoZTsKKwljb25zdCB2b2lkICpyZWdfZGVmX2NvcHk7CisJY29uc3Qgc3RydWN0IHNuZF9zb2NfY2FjaGVfb3BzICpjYWNoZV9vcHM7CisJc3RydWN0IG11dGV4IGNhY2hlX3J3X211dGV4OwogCiAJLyogZGFwbSAqLwotCXUzMiBwb3BfdGltZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRhcG1fd2lkZ2V0czsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRhcG1fcGF0aHM7Ci0JZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgYmlhc19sZXZlbDsKLQllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBzdXNwZW5kX2JpYXNfbGV2ZWw7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBkZWxheWVkX3dvcms7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0IGRhcG07CiAKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NvZGVjX3Jvb3Q7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19yZWc7Ci0Jc3RydWN0IGRlbnRyeSAqZGVidWdmc19wb3BfdGltZTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RhcG07CiAjZW5kaWYKIH07CkBAIC00ODgsNiArNTE0LDcgQEAKIAlzaG9ydCByZWdfY2FjaGVfc3RlcDsKIAlzaG9ydCByZWdfd29yZF9zaXplOwogCWNvbnN0IHZvaWQgKnJlZ19jYWNoZV9kZWZhdWx0OworCWVudW0gc25kX3NvY19jb21wcmVzc190eXBlIGNvbXByZXNzX3R5cGU7CiAKIAkvKiBjb2RlYyBiaWFzIGxldmVsICovCiAJaW50ICgqc2V0X2JpYXNfbGV2ZWwpKHN0cnVjdCBzbmRfc29jX2NvZGVjICosCkBAIC01NTQsNiArNTgxLDMwIEBACiAJc3RydWN0IHNuZF9zb2Nfb3BzICpvcHM7CiB9OwogCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19jb25mIHsKKwljb25zdCBjaGFyICpkZXZfbmFtZTsKKworCS8qCisJICogb3B0aW9uYWwgbWFwIG9mIGtjb250cm9sLCB3aWRnZXQgYW5kIHBhdGggbmFtZSBwcmVmaXhlcyB0aGF0IGFyZQorCSAqIGFzc29jaWF0ZWQgcGVyIGRldmljZQorCSAqLworCWNvbnN0IGNoYXIgKm5hbWVfcHJlZml4OworCisJLyoKKwkgKiBzZXQgdGhpcyB0byB0aGUgZGVzaXJlZCBjb21wcmVzc2lvbiB0eXBlIGlmIHlvdSB3YW50IHRvCisJICogb3ZlcnJpZGUgdGhlIG9uZSBzdXBwbGllZCBpbiBjb2RlYy0+ZHJpdmVyLT5jb21wcmVzc190eXBlCisJICovCisJZW51bSBzbmRfc29jX2NvbXByZXNzX3R5cGUgY29tcHJlc3NfdHlwZTsKK307CisKK3N0cnVjdCBzbmRfc29jX2F1eF9kZXYgeworCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiBDb2RlYyBuYW1lICovCisJY29uc3QgY2hhciAqY29kZWNfbmFtZTsJCS8qIGZvciBtdWx0aS1jb2RlYyAqLworCisJLyogY29kZWMvbWFjaGluZSBzcGVjaWZpYyBpbml0IC0gZS5nLiBhZGQgbWFjaGluZSBjb250cm9scyAqLworCWludCAoKmluaXQpKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSk7Cit9OworCiAvKiBTb0MgY2FyZCAqLwogc3RydWN0IHNuZF9zb2NfY2FyZCB7CiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTU3OSw2ICs2MzAsOCBAQAogCS8qIGNhbGxiYWNrcyAqLwogCWludCAoKnNldF9iaWFzX2xldmVsKShzdHJ1Y3Qgc25kX3NvY19jYXJkICosCiAJCQkgICAgICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCk7CisJaW50ICgqc2V0X2JpYXNfbGV2ZWxfcG9zdCkoc3RydWN0IHNuZF9zb2NfY2FyZCAqLAorCQkJCSAgIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKTsKIAogCWxvbmcgcG1kb3duX3RpbWU7CiAKQEAgLTU4OCwxMiArNjQxLDM1IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKIAlpbnQgbnVtX3J0ZDsKIAorCS8qIG9wdGlvbmFsIGNvZGVjIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3Qgc25kX3NvY19jb2RlY19jb25mICpjb2RlY19jb25mOworCWludCBudW1fY29uZmlnczsKKworCS8qCisJICogb3B0aW9uYWwgYXV4aWxpYXJ5IGRldmljZXMgc3VjaCBhcyBhbXBsaWZpZXJzIG9yIGNvZGVjcyB3aXRoIERBSQorCSAqIGxpbmsgdW51c2VkCisJICovCisJc3RydWN0IHNuZF9zb2NfYXV4X2RldiAqYXV4X2RldjsKKwlpbnQgbnVtX2F1eF9kZXZzOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGRfYXV4OworCWludCBudW1fYXV4X3J0ZDsKKwogCXN0cnVjdCB3b3JrX3N0cnVjdCBkZWZlcnJlZF9yZXN1bWVfd29yazsKIAogCS8qIGxpc3RzIG9mIHByb2JlZCBkZXZpY2VzIGJlbG9uZ2luZyB0byB0aGlzIGNhcmQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGNvZGVjX2Rldl9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgcGxhdGZvcm1fZGV2X2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBkYWlfZGV2X2xpc3Q7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHdpZGdldHM7CisJc3RydWN0IGxpc3RfaGVhZCBwYXRoczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRhcG1fbGlzdDsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfY2FyZF9yb290OworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcG9wX3RpbWU7CisjZW5kaWYKKwl1MzIgcG9wX3RpbWU7CiB9OwogCiAvKiBTb0MgbWFjaGluZSBEQUkgY29uZmlndXJhdGlvbiwgZ2x1ZXMgYSBjb2RlYyBhbmQgY3B1IERBSSB0b2dldGhlciAqLwpAQCAtNjM5LDE3ICs3MTUsOSBAQAogfTsKIAogLyogY29kZWMgSU8gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNuZF9zb2NfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJCXVuc2lnbmVkIGludCByZWcpCi17Ci0JcmV0dXJuIGNvZGVjLT5kcml2ZXItPnJlYWQoY29kZWMsIHJlZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNuZF9zb2Nfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQkJCQkgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCkKLXsKLQlyZXR1cm4gY29kZWMtPmRyaXZlci0+d3JpdGUoY29kZWMsIHJlZywgdmFsKTsKLX0KK3Vuc2lnbmVkIGludCBzbmRfc29jX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnKTsKK3Vuc2lnbmVkIGludCBzbmRfc29jX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCSAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpOwogCiAvKiBkZXZpY2UgZHJpdmVyIGRhdGEgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9kZWZpbmVfdHJhY2UuaCBiL2luY2x1ZGUvdHJhY2UvZGVmaW5lX3RyYWNlLmgKaW5kZXggYjBiNGViMi4uZGEzOWIyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9kZWZpbmVfdHJhY2UuaAorKysgYi9pbmNsdWRlL3RyYWNlL2RlZmluZV90cmFjZS5oCkBAIC0yMSw2ICsyMSwxNiBAQAogI3VuZGVmIENSRUFURV9UUkFDRV9QT0lOVFMKIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorLyoKKyAqIG1vZHVsZS5oIGluY2x1ZGVzIHRyYWNlcG9pbnRzLCBhbmQgYmVjYXVzZSBmdHJhY2UuaAorICogcHVsbHMgaW4gbW9kdWxlLmg6CisgKiAgdHJhY2UvZnRyYWNlLmggLT4gbGludXgvZnRyYWNlX2V2ZW50LmggLT4gbGludXgvcGVyZl9ldmVudC5oIC0+CisgKiAgbGludXgvZnRyYWNlLmggLT4gbGludXgvbW9kdWxlLmgKKyAqIHdlIG11c3QgaW5jbHVkZSBtb2R1bGUuaCBoZXJlIGJlZm9yZSB3ZSBwbGF5IHdpdGggYW55IG9mCisgKiB0aGUgVFJBQ0VfRVZFTlQoKSBtYWNyb3MsIG90aGVyd2lzZSB0aGUgdHJhY2Vwb2ludHMgaW5jbHVkZWQKKyAqIGJ5IG1vZHVsZS5oIG1heSBicmVhayB0aGUgYnVpbGQuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI3VuZGVmIFRSQUNFX0VWRU5UCiAjZGVmaW5lIFRSQUNFX0VWRU5UKG5hbWUsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hc29jLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hc29jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg2ZTg0ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fzb2MuaApAQCAtMCwwICsxLDIzNSBAQAorI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gYXNvYworCisjaWYgIWRlZmluZWQoX1RSQUNFX0FTT0NfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKKyNkZWZpbmUgX1RSQUNFX0FTT0NfSAorCisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKK3N0cnVjdCBzbmRfc29jX2phY2s7CitzdHJ1Y3Qgc25kX3NvY19jb2RlYzsKK3N0cnVjdCBzbmRfc29jX2NhcmQ7CitzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldDsKKworLyoKKyAqIExvZyByZWdpc3RlciBldmVudHMKKyAqLworREVDTEFSRV9FVkVOVF9DTEFTUyhzbmRfc29jX3JlZywKKworCVRQX1BST1RPKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwkJIHVuc2lnbmVkIGludCB2YWwpLAorCisJVFBfQVJHUyhjb2RlYywgcmVnLCB2YWwpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19zdHJpbmcoCW5hbWUsCQljb2RlYy0+bmFtZQkpCisJCV9fZmllbGQoCWludCwJCWlkCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJcmVnCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJdmFsCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2Fzc2lnbl9zdHIobmFtZSwgY29kZWMtPm5hbWUpOworCQlfX2VudHJ5LT5pZCA9IGNvZGVjLT5pZDsKKwkJX19lbnRyeS0+cmVnID0gcmVnOworCQlfX2VudHJ5LT52YWwgPSB2YWw7CisJKSwKKworCVRQX3ByaW50aygiY29kZWM9JXMuJWQgcmVnPSV4IHZhbD0leCIsIF9fZ2V0X3N0cihuYW1lKSwKKwkJICAoaW50KV9fZW50cnktPmlkLCAodW5zaWduZWQgaW50KV9fZW50cnktPnJlZywKKwkJICAodW5zaWduZWQgaW50KV9fZW50cnktPnZhbCkKKyk7CisKK0RFRklORV9FVkVOVChzbmRfc29jX3JlZywgc25kX3NvY19yZWdfd3JpdGUsCisKKwlUUF9QUk9UTyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCSB1bnNpZ25lZCBpbnQgdmFsKSwKKworCVRQX0FSR1MoY29kZWMsIHJlZywgdmFsKQorCispOworCitERUZJTkVfRVZFTlQoc25kX3NvY19yZWcsIHNuZF9zb2NfcmVnX3JlYWQsCisKKwlUUF9QUk9UTyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCSB1bnNpZ25lZCBpbnQgdmFsKSwKKworCVRQX0FSR1MoY29kZWMsIHJlZywgdmFsKQorCispOworCitERUNMQVJFX0VWRU5UX0NMQVNTKHNuZF9zb2NfY2FyZCwKKworCVRQX1BST1RPKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsIGludCB2YWwpLAorCisJVFBfQVJHUyhjYXJkLCB2YWwpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19zdHJpbmcoCW5hbWUsCQljYXJkLT5uYW1lCSkKKwkJX19maWVsZCgJaW50LAkJdmFsCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2Fzc2lnbl9zdHIobmFtZSwgY2FyZC0+bmFtZSk7CisJCV9fZW50cnktPnZhbCA9IHZhbDsKKwkpLAorCisJVFBfcHJpbnRrKCJjYXJkPSVzIHZhbD0lZCIsIF9fZ2V0X3N0cihuYW1lKSwgKGludClfX2VudHJ5LT52YWwpCispOworCitERUZJTkVfRVZFTlQoc25kX3NvY19jYXJkLCBzbmRfc29jX2JpYXNfbGV2ZWxfc3RhcnQsCisKKwlUUF9QUk9UTyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLCBpbnQgdmFsKSwKKworCVRQX0FSR1MoY2FyZCwgdmFsKQorCispOworCitERUZJTkVfRVZFTlQoc25kX3NvY19jYXJkLCBzbmRfc29jX2JpYXNfbGV2ZWxfZG9uZSwKKworCVRQX1BST1RPKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsIGludCB2YWwpLAorCisJVFBfQVJHUyhjYXJkLCB2YWwpCisKKyk7CisKK0RFQ0xBUkVfRVZFTlRfQ0xBU1Moc25kX3NvY19kYXBtX2Jhc2ljLAorCisJVFBfUFJPVE8oc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCksCisKKwlUUF9BUkdTKGNhcmQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19zdHJpbmcoCW5hbWUsCWNhcmQtPm5hbWUJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19hc3NpZ25fc3RyKG5hbWUsIGNhcmQtPm5hbWUpOworCSksCisKKwlUUF9wcmludGsoImNhcmQ9JXMiLCBfX2dldF9zdHIobmFtZSkpCispOworCitERUZJTkVfRVZFTlQoc25kX3NvY19kYXBtX2Jhc2ljLCBzbmRfc29jX2RhcG1fc3RhcnQsCisKKwlUUF9QUk9UTyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKSwKKworCVRQX0FSR1MoY2FyZCkKKworKTsKKworREVGSU5FX0VWRU5UKHNuZF9zb2NfZGFwbV9iYXNpYywgc25kX3NvY19kYXBtX2RvbmUsCisKKwlUUF9QUk9UTyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKSwKKworCVRQX0FSR1MoY2FyZCkKKworKTsKKworREVDTEFSRV9FVkVOVF9DTEFTUyhzbmRfc29jX2RhcG1fd2lkZ2V0LAorCisJVFBfUFJPVE8oc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsIGludCB2YWwpLAorCisJVFBfQVJHUyh3LCB2YWwpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19zdHJpbmcoCW5hbWUsCXctPm5hbWUJCSkKKwkJX19maWVsZCgJaW50LAl2YWwJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fYXNzaWduX3N0cihuYW1lLCB3LT5uYW1lKTsKKwkJX19lbnRyeS0+dmFsID0gdmFsOworCSksCisKKwlUUF9wcmludGsoIndpZGdldD0lcyB2YWw9JWQiLCBfX2dldF9zdHIobmFtZSksCisJCSAgKGludClfX2VudHJ5LT52YWwpCispOworCitERUZJTkVfRVZFTlQoc25kX3NvY19kYXBtX3dpZGdldCwgc25kX3NvY19kYXBtX3dpZGdldF9wb3dlciwKKworCVRQX1BST1RPKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LCBpbnQgdmFsKSwKKworCVRQX0FSR1ModywgdmFsKQorCispOworCitERUZJTkVfRVZFTlQoc25kX3NvY19kYXBtX3dpZGdldCwgc25kX3NvY19kYXBtX3dpZGdldF9ldmVudF9zdGFydCwKKworCVRQX1BST1RPKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LCBpbnQgdmFsKSwKKworCVRQX0FSR1ModywgdmFsKQorCispOworCitERUZJTkVfRVZFTlQoc25kX3NvY19kYXBtX3dpZGdldCwgc25kX3NvY19kYXBtX3dpZGdldF9ldmVudF9kb25lLAorCisJVFBfUFJPVE8oc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsIGludCB2YWwpLAorCisJVFBfQVJHUyh3LCB2YWwpCisKKyk7CisKK1RSQUNFX0VWRU5UKHNuZF9zb2NfamFja19pcnEsCisKKwlUUF9QUk9UTyhjb25zdCBjaGFyICpuYW1lKSwKKworCVRQX0FSR1MobmFtZSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX3N0cmluZygJbmFtZSwJbmFtZQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19hc3NpZ25fc3RyKG5hbWUsIG5hbWUpOworCSksCisKKwlUUF9wcmludGsoIiVzIiwgX19nZXRfc3RyKG5hbWUpKQorKTsKKworVFJBQ0VfRVZFTlQoc25kX3NvY19qYWNrX3JlcG9ydCwKKworCVRQX1BST1RPKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBtYXNrLCBpbnQgdmFsKSwKKworCVRQX0FSR1MoamFjaywgbWFzaywgdmFsKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fc3RyaW5nKAluYW1lLAkJamFjay0+amFjay0+bmFtZQkpCisJCV9fZmllbGQoCWludCwJCW1hc2sJCQkpCisJCV9fZmllbGQoCWludCwJCXZhbAkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fYXNzaWduX3N0cihuYW1lLCBqYWNrLT5qYWNrLT5uYW1lKTsKKwkJX19lbnRyeS0+bWFzayA9IG1hc2s7CisJCV9fZW50cnktPnZhbCA9IHZhbDsKKwkpLAorCisJVFBfcHJpbnRrKCJqYWNrPSVzICV4LyV4IiwgX19nZXRfc3RyKG5hbWUpLCAoaW50KV9fZW50cnktPnZhbCwKKwkJICAoaW50KV9fZW50cnktPm1hc2spCispOworCitUUkFDRV9FVkVOVChzbmRfc29jX2phY2tfbm90aWZ5LAorCisJVFBfUFJPVE8oc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IHZhbCksCisKKwlUUF9BUkdTKGphY2ssIHZhbCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX3N0cmluZygJbmFtZSwJCWphY2stPmphY2stPm5hbWUJKQorCQlfX2ZpZWxkKAlpbnQsCQl2YWwJCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2Fzc2lnbl9zdHIobmFtZSwgamFjay0+amFjay0+bmFtZSk7CisJCV9fZW50cnktPnZhbCA9IHZhbDsKKwkpLAorCisJVFBfcHJpbnRrKCJqYWNrPSVzICV4IiwgX19nZXRfc3RyKG5hbWUpLCAoaW50KV9fZW50cnktPnZhbCkKKyk7CisKKyNlbmRpZiAvKiBfVFJBQ0VfQVNPQ19IICovCisKKy8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLworI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMva3ZtLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaAppbmRleCA2ZGQzYTUxLi40NmUzY2Q4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaApAQCAtNiw2ICs2LDM2IEBACiAjdW5kZWYgVFJBQ0VfU1lTVEVNCiAjZGVmaW5lIFRSQUNFX1NZU1RFTSBrdm0KIAorI2RlZmluZSBFUlNOKHgpIHsgS1ZNX0VYSVRfIyN4LCAiS1ZNX0VYSVRfIiAjeCB9CisKKyNkZWZpbmUga3ZtX3RyYWNlX2V4aXRfcmVhc29uCQkJCQkJXAorCUVSU04oVU5LTk9XTiksIEVSU04oRVhDRVBUSU9OKSwgRVJTTihJTyksIEVSU04oSFlQRVJDQUxMKSwJXAorCUVSU04oREVCVUcpLCBFUlNOKEhMVCksIEVSU04oTU1JTyksIEVSU04oSVJRX1dJTkRPV19PUEVOKSwJXAorCUVSU04oU0hVVERPV04pLCBFUlNOKEZBSUxfRU5UUlkpLCBFUlNOKElOVFIpLCBFUlNOKFNFVF9UUFIpLAlcCisJRVJTTihUUFJfQUNDRVNTKSwgRVJTTihTMzkwX1NJRUlDKSwgRVJTTihTMzkwX1JFU0VUKSwgRVJTTihEQ1IpLFwKKwlFUlNOKE5NSSksIEVSU04oSU5URVJOQUxfRVJST1IpLCBFUlNOKE9TSSkKKworVFJBQ0VfRVZFTlQoa3ZtX3VzZXJzcGFjZV9leGl0LAorCSAgICBUUF9QUk9UTyhfX3UzMiByZWFzb24sIGludCBlcnJubyksCisJICAgIFRQX0FSR1MocmVhc29uLCBlcnJubyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlfX3UzMiwJCXJlYXNvbgkJKQorCQlfX2ZpZWxkKAlpbnQsCQllcnJubwkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+cmVhc29uCQk9IHJlYXNvbjsKKwkJX19lbnRyeS0+ZXJybm8JCT0gZXJybm87CisJKSwKKworCVRQX3ByaW50aygicmVhc29uICVzICglZCkiLAorCQkgIF9fZW50cnktPmVycm5vIDwgMCA/CisJCSAgKF9fZW50cnktPmVycm5vID09IC1FSU5UUiA/ICJyZXN0YXJ0IiA6ICJlcnJvciIpIDoKKwkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPnJlYXNvbiwga3ZtX3RyYWNlX2V4aXRfcmVhc29uKSwKKwkJICBfX2VudHJ5LT5lcnJubyA8IDAgPyAtX19lbnRyeS0+ZXJybm8gOiBfX2VudHJ5LT5yZWFzb24pCispOworCiAjaWYgZGVmaW5lZChfX0tWTV9IQVZFX0lPQVBJQykKIFRSQUNFX0VWRU5UKGt2bV9zZXRfaXJxLAogCVRQX1BST1RPKHVuc2lnbmVkIGludCBnc2ksIGludCBsZXZlbCwgaW50IGlycV9zb3VyY2VfaWQpLApAQCAtMTg1LDYgKzIxNSw5NyBAQAogCQkgIF9fZW50cnktPnJlZmVyZW5jZWQgPyAiWU9VTkciIDogIk9MRCIpCiApOwogCisjaWZkZWYgQ09ORklHX0tWTV9BU1lOQ19QRgorREVDTEFSRV9FVkVOVF9DTEFTUyhrdm1fYXN5bmNfZ2V0X3BhZ2VfY2xhc3MsCisKKwlUUF9QUk9UTyh1NjQgZ3ZhLCB1NjQgZ2ZuKSwKKworCVRQX0FSR1MoZ3ZhLCBnZm4pLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChfX3U2NCwgZ3ZhKQorCQlfX2ZpZWxkKHU2NCwgZ2ZuKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+Z3ZhID0gZ3ZhOworCQlfX2VudHJ5LT5nZm4gPSBnZm47CisJKSwKKworCVRQX3ByaW50aygiZ3ZhID0gJSNsbHgsIGdmbiA9ICUjbGx4IiwgX19lbnRyeS0+Z3ZhLCBfX2VudHJ5LT5nZm4pCispOworCitERUZJTkVfRVZFTlQoa3ZtX2FzeW5jX2dldF9wYWdlX2NsYXNzLCBrdm1fdHJ5X2FzeW5jX2dldF9wYWdlLAorCisJVFBfUFJPVE8odTY0IGd2YSwgdTY0IGdmbiksCisKKwlUUF9BUkdTKGd2YSwgZ2ZuKQorKTsKKworREVGSU5FX0VWRU5UKGt2bV9hc3luY19nZXRfcGFnZV9jbGFzcywga3ZtX2FzeW5jX3BmX2RvdWJsZWZhdWx0LAorCisJVFBfUFJPVE8odTY0IGd2YSwgdTY0IGdmbiksCisKKwlUUF9BUkdTKGd2YSwgZ2ZuKQorKTsKKworREVDTEFSRV9FVkVOVF9DTEFTUyhrdm1fYXN5bmNfcGZfbm9wcmVzZW50X3JlYWR5LAorCisJVFBfUFJPVE8odTY0IHRva2VuLCB1NjQgZ3ZhKSwKKworCVRQX0FSR1ModG9rZW4sIGd2YSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9fdTY0LCB0b2tlbikKKwkJX19maWVsZChfX3U2NCwgZ3ZhKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dG9rZW4gPSB0b2tlbjsKKwkJX19lbnRyeS0+Z3ZhID0gZ3ZhOworCSksCisKKwlUUF9wcmludGsoInRva2VuICUjbGx4IGd2YSAlI2xseCIsIF9fZW50cnktPnRva2VuLCBfX2VudHJ5LT5ndmEpCisKKyk7CisKK0RFRklORV9FVkVOVChrdm1fYXN5bmNfcGZfbm9wcmVzZW50X3JlYWR5LCBrdm1fYXN5bmNfcGZfbm90X3ByZXNlbnQsCisKKwlUUF9QUk9UTyh1NjQgdG9rZW4sIHU2NCBndmEpLAorCisJVFBfQVJHUyh0b2tlbiwgZ3ZhKQorKTsKKworREVGSU5FX0VWRU5UKGt2bV9hc3luY19wZl9ub3ByZXNlbnRfcmVhZHksIGt2bV9hc3luY19wZl9yZWFkeSwKKworCVRQX1BST1RPKHU2NCB0b2tlbiwgdTY0IGd2YSksCisKKwlUUF9BUkdTKHRva2VuLCBndmEpCispOworCitUUkFDRV9FVkVOVCgKKwlrdm1fYXN5bmNfcGZfY29tcGxldGVkLAorCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgc3RydWN0IHBhZ2UgKnBhZ2UsIHU2NCBndmEpLAorCVRQX0FSR1MoYWRkcmVzcywgcGFnZSwgZ3ZhKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgYWRkcmVzcykKKwkJX19maWVsZChwZm5fdCwgcGZuKQorCQlfX2ZpZWxkKHU2NCwgZ3ZhKQorCQkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmFkZHJlc3MgPSBhZGRyZXNzOworCQlfX2VudHJ5LT5wZm4gPSBwYWdlID8gcGFnZV90b19wZm4ocGFnZSkgOiAwOworCQlfX2VudHJ5LT5ndmEgPSBndmE7CisJCSksCisKKwlUUF9wcmludGsoImd2YSAlI2xseCBhZGRyZXNzICUjbHggcGZuICUjbGx4IiwgIF9fZW50cnktPmd2YSwKKwkJICBfX2VudHJ5LT5hZGRyZXNzLCBfX2VudHJ5LT5wZm4pCispOworCisjZW5kaWYKKwogI2VuZGlmIC8qIF9UUkFDRV9LVk1fTUFJTl9IICovCiAKIC8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcmVndWxhdG9yLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yZWd1bGF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzUwMmE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcmVndWxhdG9yLmgKQEAgLTAsMCArMSwxNDEgQEAKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIHJlZ3VsYXRvcgorCisjaWYgIWRlZmluZWQoX1RSQUNFX1JFR1VMQVRPUl9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfVFJBQ0VfUkVHVUxBVE9SX0gKKworI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCisvKgorICogRXZlbnRzIHdoaWNoIGp1c3QgbG9nIHRoZW1zZWx2ZXMgYW5kIHRoZSByZWd1bGF0b3IgbmFtZSBmb3IgZW5hYmxlL2Rpc2FibGUKKyAqIHR5cGUgdHJhY2tpbmcuCisgKi8KK0RFQ0xBUkVfRVZFTlRfQ0xBU1MocmVndWxhdG9yX2Jhc2ljLAorCisJVFBfUFJPVE8oY29uc3QgY2hhciAqbmFtZSksCisKKwlUUF9BUkdTKG5hbWUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19zdHJpbmcoCW5hbWUsCW5hbWUJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19hc3NpZ25fc3RyKG5hbWUsIG5hbWUpOworCSksCisKKwlUUF9wcmludGsoIm5hbWU9JXMiLCBfX2dldF9zdHIobmFtZSkpCisKKyk7CisKK0RFRklORV9FVkVOVChyZWd1bGF0b3JfYmFzaWMsIHJlZ3VsYXRvcl9lbmFibGUsCisKKwlUUF9QUk9UTyhjb25zdCBjaGFyICpuYW1lKSwKKworCVRQX0FSR1MobmFtZSkKKworKTsKKworREVGSU5FX0VWRU5UKHJlZ3VsYXRvcl9iYXNpYywgcmVndWxhdG9yX2VuYWJsZV9kZWxheSwKKworCVRQX1BST1RPKGNvbnN0IGNoYXIgKm5hbWUpLAorCisJVFBfQVJHUyhuYW1lKQorCispOworCitERUZJTkVfRVZFTlQocmVndWxhdG9yX2Jhc2ljLCByZWd1bGF0b3JfZW5hYmxlX2NvbXBsZXRlLAorCisJVFBfUFJPVE8oY29uc3QgY2hhciAqbmFtZSksCisKKwlUUF9BUkdTKG5hbWUpCisKKyk7CisKK0RFRklORV9FVkVOVChyZWd1bGF0b3JfYmFzaWMsIHJlZ3VsYXRvcl9kaXNhYmxlLAorCisJVFBfUFJPVE8oY29uc3QgY2hhciAqbmFtZSksCisKKwlUUF9BUkdTKG5hbWUpCisKKyk7CisKK0RFRklORV9FVkVOVChyZWd1bGF0b3JfYmFzaWMsIHJlZ3VsYXRvcl9kaXNhYmxlX2NvbXBsZXRlLAorCisJVFBfUFJPVE8oY29uc3QgY2hhciAqbmFtZSksCisKKwlUUF9BUkdTKG5hbWUpCisKKyk7CisKKy8qCisgKiBFdmVudHMgdGhhdCB0YWtlIGEgcmFuZ2Ugb2YgbnVtZXJpY2FsIHZhbHVlcywgbW9zdGx5IGZvciB2b2x0YWdlcworICogYW5kIHNvIG9uLgorICovCitERUNMQVJFX0VWRU5UX0NMQVNTKHJlZ3VsYXRvcl9yYW5nZSwKKworCVRQX1BST1RPKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtaW4sIGludCBtYXgpLAorCisJVFBfQVJHUyhuYW1lLCBtaW4sIG1heCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX3N0cmluZygJbmFtZSwJCW5hbWUJCSkKKwkJX19maWVsZCggICAgICAgIGludCwgICAgICAgICAgICBtaW4gICAgICAgICAgICAgKQorCQlfX2ZpZWxkKCAgICAgICAgaW50LCAgICAgICAgICAgIG1heCAgICAgICAgICAgICApCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2Fzc2lnbl9zdHIobmFtZSwgbmFtZSk7CisJCV9fZW50cnktPm1pbiAgPSBtaW47CisJCV9fZW50cnktPm1heCAgPSBtYXg7CisJKSwKKworCVRQX3ByaW50aygibmFtZT0lcyAoJWQtJWQpIiwgX19nZXRfc3RyKG5hbWUpLAorCQkgIChpbnQpX19lbnRyeS0+bWluLCAoaW50KV9fZW50cnktPm1heCkKKyk7CisKK0RFRklORV9FVkVOVChyZWd1bGF0b3JfcmFuZ2UsIHJlZ3VsYXRvcl9zZXRfdm9sdGFnZSwKKworCVRQX1BST1RPKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtaW4sIGludCBtYXgpLAorCisJVFBfQVJHUyhuYW1lLCBtaW4sIG1heCkKKworKTsKKworCisvKgorICogRXZlbnRzIHRoYXQgdGFrZSBhIHNpbmdsZSB2YWx1ZSwgbW9zdGx5IGZvciByZWFkYmFjayBhbmQgcmVmY291bnRzLgorICovCitERUNMQVJFX0VWRU5UX0NMQVNTKHJlZ3VsYXRvcl92YWx1ZSwKKworCVRQX1BST1RPKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCB2YWwpLAorCisJVFBfQVJHUyhuYW1lLCB2YWwpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19zdHJpbmcoCW5hbWUsCQluYW1lCQkpCisJCV9fZmllbGQoICAgICAgICB1bnNpZ25lZCBpbnQsICAgdmFsICAgICAgICAgICAgICkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fYXNzaWduX3N0cihuYW1lLCBuYW1lKTsKKwkJX19lbnRyeS0+dmFsICA9IHZhbDsKKwkpLAorCisJVFBfcHJpbnRrKCJuYW1lPSVzLCB2YWw9JXUiLCBfX2dldF9zdHIobmFtZSksCisJCSAgKGludClfX2VudHJ5LT52YWwpCispOworCitERUZJTkVfRVZFTlQocmVndWxhdG9yX3ZhbHVlLCByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2VfY29tcGxldGUsCisKKwlUUF9QUk9UTyhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgdmFsdWUpLAorCisJVFBfQVJHUyhuYW1lLCB2YWx1ZSkKKworKTsKKworI2VuZGlmIC8qIF9UUkFDRV9QT1dFUl9IICovCisKKy8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLworI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc2tiLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9za2IuaAppbmRleCA3NWNlOWQ1Li5mMTAyOTNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9za2IuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9za2IuaApAQCAtMjUsOSArMjUsNyBAQAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCV9fZW50cnktPnNrYmFkZHIgPSBza2I7Ci0JCWlmIChza2IpIHsKLQkJCV9fZW50cnktPnByb3RvY29sID0gbnRvaHMoc2tiLT5wcm90b2NvbCk7Ci0JCX0KKwkJX19lbnRyeS0+cHJvdG9jb2wgPSBudG9ocyhza2ItPnByb3RvY29sKTsKIAkJX19lbnRyeS0+bG9jYXRpb24gPSBsb2NhdGlvbjsKIAkpLAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi94ZW5idXMuaCBiL2luY2x1ZGUveGVuL3hlbmJ1cy5oCmluZGV4IDQzZTJkN2QuLjdhMWQxNWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveGVuL3hlbmJ1cy5oCisrKyBiL2luY2x1ZGUveGVuL3hlbmJ1cy5oCkBAIC05NCw3ICs5NCw3IEBACiAJaW50ICgqcmVtb3ZlKShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2KTsKIAlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogCWludCAoKnJlc3VtZSkoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldik7Ci0JaW50ICgqdWV2ZW50KShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqLCBjaGFyICoqLCBpbnQsIGNoYXIgKiwgaW50KTsKKwlpbnQgKCp1ZXZlbnQpKHN0cnVjdCB4ZW5idXNfZGV2aWNlICosIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKik7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOwogCWludCAoKnJlYWRfb3RoZXJlbmRfZGV0YWlscykoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldik7CiAJaW50ICgqaXNfcmVhZHkpKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDhkZmQwOTQuLjRmNmNkYmYgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTEzMCwxMyArMTMwLDE2IEBACiBjb25maWcgSEFWRV9LRVJORUxfTFpNQQogCWJvb2wKIAorY29uZmlnIEhBVkVfS0VSTkVMX1haCisJYm9vbAorCiBjb25maWcgSEFWRV9LRVJORUxfTFpPCiAJYm9vbAogCiBjaG9pY2UKIAlwcm9tcHQgIktlcm5lbCBjb21wcmVzc2lvbiBtb2RlIgogCWRlZmF1bHQgS0VSTkVMX0daSVAKLQlkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX0daSVAgfHwgSEFWRV9LRVJORUxfQlpJUDIgfHwgSEFWRV9LRVJORUxfTFpNQSB8fCBIQVZFX0tFUk5FTF9MWk8KKwlkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX0daSVAgfHwgSEFWRV9LRVJORUxfQlpJUDIgfHwgSEFWRV9LRVJORUxfTFpNQSB8fCBIQVZFX0tFUk5FTF9YWiB8fCBIQVZFX0tFUk5FTF9MWk8KIAloZWxwCiAJICBUaGUgbGludXgga2VybmVsIGlzIGEga2luZCBvZiBzZWxmLWV4dHJhY3RpbmcgZXhlY3V0YWJsZS4KIAkgIFNldmVyYWwgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBhcmUgYXZhaWxhYmxlLCB3aGljaCBkaWZmZXIKQEAgLTE4MSw2ICsxODQsMjEgQEAKIAkgIHR3by4gQ29tcHJlc3Npb24gaXMgc2xvd2VzdC4JVGhlIGtlcm5lbCBzaXplIGlzIGFib3V0IDMzJQogCSAgc21hbGxlciB3aXRoIExaTUEgaW4gY29tcGFyaXNvbiB0byBnemlwLgogCitjb25maWcgS0VSTkVMX1haCisJYm9vbCAiWFoiCisJZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9YWgorCWhlbHAKKwkgIFhaIHVzZXMgdGhlIExaTUEyIGFsZ29yaXRobSBhbmQgaW5zdHJ1Y3Rpb24gc2V0IHNwZWNpZmljCisJICBCQ0ogZmlsdGVycyB3aGljaCBjYW4gaW1wcm92ZSBjb21wcmVzc2lvbiByYXRpbyBvZiBleGVjdXRhYmxlCisJICBjb2RlLiBUaGUgc2l6ZSBvZiB0aGUga2VybmVsIGlzIGFib3V0IDMwJSBzbWFsbGVyIHdpdGggWFogaW4KKwkgIGNvbXBhcmlzb24gdG8gZ3ppcC4gT24gYXJjaGl0ZWN0dXJlcyBmb3Igd2hpY2ggdGhlcmUgaXMgYSBCQ0oKKwkgIGZpbHRlciAoaTM4NiwgeDg2XzY0LCBBUk0sIElBLTY0LCBQb3dlclBDLCBhbmQgU1BBUkMpLCBYWgorCSAgd2lsbCBjcmVhdGUgYSBmZXcgcGVyY2VudCBzbWFsbGVyIGtlcm5lbCB0aGFuIHBsYWluIExaTUEuCisKKwkgIFRoZSBzcGVlZCBpcyBhYm91dCB0aGUgc2FtZSBhcyB3aXRoIExaTUE6IFRoZSBkZWNvbXByZXNzaW9uCisJICBzcGVlZCBvZiBYWiBpcyBiZXR0ZXIgdGhhbiB0aGF0IG9mIGJ6aXAyIGJ1dCB3b3JzZSB0aGFuIGd6aXAKKwkgIGFuZCBMWk8uIENvbXByZXNzaW9uIGlzIHNsb3cuCisKIGNvbmZpZyBLRVJORUxfTFpPCiAJYm9vbCAiTFpPIgogCWRlcGVuZHMgb24gSEFWRV9LRVJORUxfTFpPCkBAIC02NzMsNyArNjkxLDcgQEAKIAloZWxwCiAJICBNZW1vcnkgUmVzb3VyY2UgQ29udHJvbGxlciBTd2FwIEV4dGVuc2lvbiBjb21lcyB3aXRoIGl0cyBwcmljZSBpbgogCSAgYSBiaWdnZXIgbWVtb3J5IGNvbnN1bXB0aW9uLiBHZW5lcmFsIHB1cnBvc2UgZGlzdHJpYnV0aW9uIGtlcm5lbHMKLQkgIHdoaWNoIHdhbnQgdG8gZW5hYmxlIHRoZSBmZWF1dHJlIGJ1dCBrZWVwIGl0IGRpc2FibGVkIGJ5IGRlZmF1bHQKKwkgIHdoaWNoIHdhbnQgdG8gZW5hYmxlIHRoZSBmZWF0dXJlIGJ1dCBrZWVwIGl0IGRpc2FibGVkIGJ5IGRlZmF1bHQKIAkgIGFuZCBsZXQgdGhlIHVzZXIgZW5hYmxlIGl0IGJ5IHN3YXBhY2NvdW50IGJvb3QgY29tbWFuZCBsaW5lCiAJICBwYXJhbWV0ZXIgc2hvdWxkIGhhdmUgdGhpcyBvcHRpb24gdW5zZWxlY3RlZC4KIAkgIEZvciB0aG9zZSB3aG8gd2FudCB0byBoYXZlIHRoZSBmZWF0dXJlIGVuYWJsZWQgYnkgZGVmYXVsdCBzaG91bGQKZGlmZiAtLWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQppbmRleCAzM2UwYTM5Li4zNTNkM2ZlIDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIva2VybmVsL01ha2VmaWxlCkBAIC00Myw3ICs0Myw3IEBACiBvYmotJChDT05GSUdfREVCVUdfUlRfTVVURVhFUykgKz0gcnRtdXRleC1kZWJ1Zy5vCiBvYmotJChDT05GSUdfUlRfTVVURVhfVEVTVEVSKSArPSBydG11dGV4LXRlc3Rlci5vCiBvYmotJChDT05GSUdfR0VORVJJQ19JU0FfRE1BKSArPSBkbWEubwotb2JqLSQoQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTKSArPSBzbXAubworb2JqLSQoQ09ORklHX1NNUCkgKz0gc21wLm8KIGlmbmVxICgkKENPTkZJR19TTVApLHkpCiBvYmoteSArPSB1cC5vCiBlbmRpZgpAQCAtMTAwLDYgKzEwMCw3IEBACiBvYmotJChDT05GSUdfVFJBQ0lORykgKz0gdHJhY2UvCiBvYmotJChDT05GSUdfWDg2X0RTKSArPSB0cmFjZS8KIG9iai0kKENPTkZJR19SSU5HX0JVRkZFUikgKz0gdHJhY2UvCitvYmotJChDT05GSUdfVFJBQ0VQT0lOVFMpICs9IHRyYWNlLwogb2JqLSQoQ09ORklHX1NNUCkgKz0gc2NoZWRfY3B1cHJpLm8KIG9iai0kKENPTkZJR19JUlFfV09SSykgKz0gaXJxX3dvcmsubwogb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKSArPSBwZXJmX2V2ZW50Lm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdC5jIGIva2VybmVsL2F1ZGl0LmMKaW5kZXggNzc3NzBhMC4uZTQ5NTYyNCAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmMKKysrIGIva2VybmVsL2F1ZGl0LmMKQEAgLTQwMCw3ICs0MDAsNyBAQAogCWlmIChlcnIgPCAwKSB7CiAJCUJVR19PTihlcnIgIT0gLUVDT05OUkVGVVNFRCk7IC8qIFNob3VsZG4ndCBoYXBwZW4gKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJhdWRpdDogKk5PKiBkYWVtb24gYXQgYXVkaXRfcGlkPSVkXG4iLCBhdWRpdF9waWQpOwotCQlhdWRpdF9sb2dfbG9zdCgiYXVkaXRkIGRpc3NhcGVhcmVkXG4iKTsKKwkJYXVkaXRfbG9nX2xvc3QoImF1ZGl0ZCBkaXNhcHBlYXJlZFxuIik7CiAJCWF1ZGl0X3BpZCA9IDA7CiAJCS8qIHdlIG1pZ2h0IGdldCBsdWNreSBhbmQgZ2V0IHRoaXMgaW4gdGhlIG5leHQgYXVkaXRkICovCiAJCWF1ZGl0X2hvbGRfc2tiKHNrYik7CmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwLmMgYi9rZXJuZWwvY2dyb3VwLmMKaW5kZXggNTFjZGRjMS4uNWM1ZjRjYyAxMDA2NDQKLS0tIGEva2VybmVsL2Nncm91cC5jCisrKyBiL2tlcm5lbC9jZ3JvdXAuYwpAQCAtNzYzLDggKzc2Myw2IEBACiAgKiAtPiBjZ3JvdXBfbWtkaXIuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBkZW50cnkgKmNncm91cF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKTsKIHN0YXRpYyBpbnQgY2dyb3VwX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKTsKIHN0YXRpYyBpbnQgY2dyb3VwX3JtZGlyKHN0cnVjdCBpbm9kZSAqdW51c2VkX2Rpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIHN0YXRpYyBpbnQgY2dyb3VwX3BvcHVsYXRlX2RpcihzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKQEAgLTE0NTEsNiArMTQ0OSwxMCBAQAogCiBzdGF0aWMgaW50IGNncm91cF9nZXRfcm9vdGRpcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogeworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2dyb3VwX2RvcHMgPSB7CisJCS5kX2lwdXQgPSBjZ3JvdXBfZGlwdXQsCisJfTsKKwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPQogCQljZ3JvdXBfbmV3X2lub2RlKFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTyB8IFNfSVdVU1IsIHNiKTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CkBAIC0xNDY4LDYgKzE0NzAsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc2ItPnNfcm9vdCA9IGRlbnRyeTsKKwkvKiBmb3IgZXZlcnl0aGluZyBlbHNlIHdlIHdhbnQgLT5kX29wIHNldCAqLworCXNiLT5zX2Rfb3AgPSAmY2dyb3VwX2RvcHM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxOTEsNyArMjE5NSw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2dyb3VwX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0gewotCS5sb29rdXAgPSBjZ3JvdXBfbG9va3VwLAorCS5sb29rdXAgPSBzaW1wbGVfbG9va3VwLAogCS5ta2RpciA9IGNncm91cF9ta2RpciwKIAkucm1kaXIgPSBjZ3JvdXBfcm1kaXIsCiAJLnJlbmFtZSA9IGNncm91cF9yZW5hbWUsCkBAIC0yMjA3LDI2ICsyMjExLDYgQEAKIAlyZXR1cm4gX19kX2NmdChmaWxlLT5mX2RlbnRyeSk7CiB9CiAKLXN0YXRpYyBpbnQgY2dyb3VwX2RlbGV0ZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXJldHVybiAxOwotfQotCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY2dyb3VwX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCi17Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjZ3JvdXBfZGVudHJ5X29wZXJhdGlvbnMgPSB7Ci0JCS5kX2RlbGV0ZSA9IGNncm91cF9kZWxldGVfZGVudHJ5LAotCQkuZF9pcHV0ID0gY2dyb3VwX2RpcHV0LAotCX07Ci0KLQlpZiAoZGVudHJ5LT5kX25hbWUubGVuID4gTkFNRV9NQVgpCi0JCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOwotCWRfc2V0X2Rfb3AoZGVudHJ5LCAmY2dyb3VwX2RlbnRyeV9vcGVyYXRpb25zKTsKLQlkX2FkZChkZW50cnksIE5VTEwpOwotCXJldHVybiBOVUxMOwotfQotCiBzdGF0aWMgaW50IGNncm91cF9jcmVhdGVfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIG1vZGVfdCBtb2RlLAogCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvZGVidWcva2RiL2tkYl9tYWluLmMgYi9rZXJuZWwvZGVidWcva2RiL2tkYl9tYWluLmMKaW5kZXggYTZlNzI5Ny4uYmQzZThlMiAxMDA2NDQKLS0tIGEva2VybmVsL2RlYnVnL2tkYi9rZGJfbWFpbi5jCisrKyBiL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX21haW4uYwpAQCAtMjkxNCw3ICsyOTE0LDcgQEAKIAl9CiB9CiAKLS8qIEludGlhbGl6ZSBrZGJfcHJpbnRmLCBicmVha3BvaW50IHRhYmxlcyBhbmQga2RiIHN0YXRlICovCisvKiBJbml0aWFsaXplIGtkYl9wcmludGYsIGJyZWFrcG9pbnQgdGFibGVzIGFuZCBrZGIgc3RhdGUgKi8KIHZvaWQgX19pbml0IGtkYl9pbml0KGludCBsdmwpCiB7CiAJc3RhdGljIGludCBrZGJfaW5pdF9sdmwgPSBLREJfTk9UX0lOSVRJQUxJWkVEOwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggODljNzQ4Ni4uZjlhNDVlYiAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC05OTQsNiArOTk0LDE1IEBACiAJZXhpdF9mcyh0c2spOwogCWNoZWNrX3N0YWNrX3VzYWdlKCk7CiAJZXhpdF90aHJlYWQoKTsKKworCS8qCisJICogRmx1c2ggaW5oZXJpdGVkIGNvdW50ZXJzIHRvIHRoZSBwYXJlbnQgLSBiZWZvcmUgdGhlIHBhcmVudAorCSAqIGdldHMgd29rZW4gdXAgYnkgY2hpbGQtZXhpdCBub3RpZmljYXRpb25zLgorCSAqCisJICogYmVjYXVzZSBvZiBjZ3JvdXAgbW9kZSwgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGNncm91cF9leGl0KCkKKwkgKi8KKwlwZXJmX2V2ZW50X2V4aXRfdGFzayh0c2spOworCiAJY2dyb3VwX2V4aXQodHNrLCAxKTsKIAogCWlmIChncm91cF9kZWFkKQpAQCAtMTAwNywxMSArMTAxNiw2IEBACiAJICogRklYTUU6IGRvIHRoYXQgb25seSB3aGVuIG5lZWRlZCwgdXNpbmcgc2NoZWRfZXhpdCB0cmFjZXBvaW50CiAJICovCiAJZmx1c2hfcHRyYWNlX2h3X2JyZWFrcG9pbnQodHNrKTsKLQkvKgotCSAqIEZsdXNoIGluaGVyaXRlZCBjb3VudGVycyB0byB0aGUgcGFyZW50IC0gYmVmb3JlIHRoZSBwYXJlbnQKLQkgKiBnZXRzIHdva2VuIHVwIGJ5IGNoaWxkLWV4aXQgbm90aWZpY2F0aW9ucy4KLQkgKi8KLQlwZXJmX2V2ZW50X2V4aXRfdGFzayh0c2spOwogCiAJZXhpdF9ub3RpZnkodHNrLCBncm91cF9kZWFkKTsKICNpZmRlZiBDT05GSUdfTlVNQQpkaWZmIC0tZ2l0IGEva2VybmVsL2hydGltZXIuYyBiL2tlcm5lbC9ocnRpbWVyLmMKaW5kZXggNDVkYTJiNi4uMGM4ZDdjMCAxMDA2NDQKLS0tIGEva2VybmVsL2hydGltZXIuYworKysgYi9rZXJuZWwvaHJ0aW1lci5jCkBAIC0xNzQ1LDcgKzE3NDUsNyBAQAogCX0KIAogCS8qCi0JICogQSBOVUxMIHBhcmFtZXRlciBtZWFucyAiaW5pZmludGUiCisJICogQSBOVUxMIHBhcmFtZXRlciBtZWFucyAiaW5maW5pdGUiCiAJICovCiAJaWYgKCFleHBpcmVzKSB7CiAJCXNjaGVkdWxlKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWMuYyBiL2tlcm5lbC9rZXhlYy5jCmluZGV4IGI1NTA0NWIuLmVjMTliOTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlYy5jCisrKyBiL2tlcm5lbC9rZXhlYy5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAkgKiBqdXN0IHZlcmlmaWVzIGl0IGlzIGFuIGFkZHJlc3Mgd2UgY2FuIHVzZS4KIAkgKgogCSAqIFNpbmNlIHRoZSBrZXJuZWwgZG9lcyBldmVyeXRoaW5nIGluIHBhZ2Ugc2l6ZSBjaHVua3MgZW5zdXJlCi0JICogdGhlIGRlc3RpbmF0aW9uIGFkZHJlc2VzIGFyZSBwYWdlIGFsaWduZWQuICBUb28gbWFueQorCSAqIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYXJlIHBhZ2UgYWxpZ25lZC4gIFRvbyBtYW55CiAJICogc3BlY2lhbCBjYXNlcyBjcm9wIG9mIHdoZW4gd2UgZG9uJ3QgZG8gdGhpcy4gIFRoZSBtb3N0CiAJICogaW5zaWRpb3VzIGlzIGdldHRpbmcgb3ZlcmxhcHBpbmcgZGVzdGluYXRpb24gYWRkcmVzc2VzCiAJICogc2ltcGx5IGJlY2F1c2UgYWRkcmVzc2VzIGFyZSBjaGFuZ2VkIHRvIHBhZ2Ugc2l6ZQpkaWZmIC0tZ2l0IGEva2VybmVsL2xhdGVuY3l0b3AuYyBiL2tlcm5lbC9sYXRlbmN5dG9wLmMKaW5kZXggMTcxMTBhNC4uZWU3NGIzNSAxMDA2NDQKLS0tIGEva2VybmVsL2xhdGVuY3l0b3AuYworKysgYi9rZXJuZWwvbGF0ZW5jeXRvcC5jCkBAIC0yNDEsMjQgKzI0MSwxOSBAQAogCXNlcV9wdXRzKG0sICJMYXRlbmN5IFRvcCB2ZXJzaW9uIDogdjAuMVxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYTFI7IGkrKykgewotCQlpZiAobGF0ZW5jeV9yZWNvcmRbaV0uYmFja3RyYWNlWzBdKSB7CisJCXN0cnVjdCBsYXRlbmN5X3JlY29yZCAqbHIgPSAmbGF0ZW5jeV9yZWNvcmRbaV07CisKKwkJaWYgKGxyLT5iYWNrdHJhY2VbMF0pIHsKIAkJCWludCBxOwotCQkJc2VxX3ByaW50ZihtLCAiJWkgJWx1ICVsdSAiLAotCQkJCWxhdGVuY3lfcmVjb3JkW2ldLmNvdW50LAotCQkJCWxhdGVuY3lfcmVjb3JkW2ldLnRpbWUsCi0JCQkJbGF0ZW5jeV9yZWNvcmRbaV0ubWF4KTsKKwkJCXNlcV9wcmludGYobSwgIiVpICVsdSAlbHUiLAorCQkJCSAgIGxyLT5jb3VudCwgbHItPnRpbWUsIGxyLT5tYXgpOwogCQkJZm9yIChxID0gMDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIOyBxKyspIHsKLQkJCQljaGFyIHN5bVtLU1lNX1NZTUJPTF9MRU5dOwotCQkJCWNoYXIgKmM7Ci0JCQkJaWYgKCFsYXRlbmN5X3JlY29yZFtpXS5iYWNrdHJhY2VbcV0pCisJCQkJdW5zaWduZWQgbG9uZyBidCA9IGxyLT5iYWNrdHJhY2VbcV07CisJCQkJaWYgKCFidCkKIAkJCQkJYnJlYWs7Ci0JCQkJaWYgKGxhdGVuY3lfcmVjb3JkW2ldLmJhY2t0cmFjZVtxXSA9PSBVTE9OR19NQVgpCisJCQkJaWYgKGJ0ID09IFVMT05HX01BWCkKIAkJCQkJYnJlYWs7Ci0JCQkJc3ByaW50X3N5bWJvbChzeW0sIGxhdGVuY3lfcmVjb3JkW2ldLmJhY2t0cmFjZVtxXSk7Ci0JCQkJYyA9IHN0cmNocihzeW0sICcrJyk7Ci0JCQkJaWYgKGMpCi0JCQkJCSpjID0gMDsKLQkJCQlzZXFfcHJpbnRmKG0sICIlcyAiLCBzeW0pOworCQkJCXNlcV9wcmludGYobSwgIiAlcHMiLCAodm9pZCAqKWJ0KTsKIAkJCX0KIAkJCXNlcV9wcmludGYobSwgIlxuIik7CiAJCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDExODQ3YmYuLjA1ZWJlODQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMzgsNiArMzgsMTIgQEAKIAogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogCitlbnVtIGV2ZW50X3R5cGVfdCB7CisJRVZFTlRfRkxFWElCTEUgPSAweDEsCisJRVZFTlRfUElOTkVEID0gMHgyLAorCUVWRU5UX0FMTCA9IEVWRU5UX0ZMRVhJQkxFIHwgRVZFTlRfUElOTkVELAorfTsKKwogYXRvbWljX3QgcGVyZl90YXNrX2V2ZW50cyBfX3JlYWRfbW9zdGx5Owogc3RhdGljIGF0b21pY190IG5yX21tYXBfZXZlbnRzIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgYXRvbWljX3QgbnJfY29tbV9ldmVudHMgX19yZWFkX21vc3RseTsKQEAgLTY1LDYgKzcxLDEyIEBACiAKIHN0YXRpYyBhdG9taWM2NF90IHBlcmZfZXZlbnRfaWQ7CiAKK3N0YXRpYyB2b2lkIGNwdV9jdHhfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCisJCQkgICAgICBlbnVtIGV2ZW50X3R5cGVfdCBldmVudF90eXBlKTsKKworc3RhdGljIHZvaWQgY3B1X2N0eF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCQkJICAgICBlbnVtIGV2ZW50X3R5cGVfdCBldmVudF90eXBlKTsKKwogdm9pZCBfX3dlYWsgcGVyZl9ldmVudF9wcmludF9kZWJ1Zyh2b2lkKQl7IH0KIAogZXh0ZXJuIF9fd2VhayBjb25zdCBjaGFyICpwZXJmX3BtdV9uYW1lKHZvaWQpCkBAIC03Miw2ICs4NCwxMSBAQAogCXJldHVybiAicG11IjsKIH0KIAorc3RhdGljIGlubGluZSB1NjQgcGVyZl9jbG9jayh2b2lkKQoreworCXJldHVybiBsb2NhbF9jbG9jaygpOworfQorCiB2b2lkIHBlcmZfcG11X2Rpc2FibGUoc3RydWN0IHBtdSAqcG11KQogewogCWludCAqY291bnQgPSB0aGlzX2NwdV9wdHIocG11LT5wbXVfZGlzYWJsZV9jb3VudCk7CkBAIC0yNDAsMTEgKzI1Nyw2IEBACiAJcHV0X2N0eChjdHgpOwogfQogCi1zdGF0aWMgaW5saW5lIHU2NCBwZXJmX2Nsb2NrKHZvaWQpCi17Ci0JcmV0dXJuIGxvY2FsX2Nsb2NrKCk7Ci19Ci0KIC8qCiAgKiBVcGRhdGUgdGhlIHJlY29yZCBvZiB0aGUgY3VycmVudCB0aW1lIGluIGEgY29udGV4dC4KICAqLwpAQCAtMjU2LDYgKzI2OCwxMiBAQAogCWN0eC0+dGltZXN0YW1wID0gbm93OwogfQogCitzdGF0aWMgdTY0IHBlcmZfZXZlbnRfdGltZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gZXZlbnQtPmN0eDsKKwlyZXR1cm4gY3R4ID8gY3R4LT50aW1lIDogMDsKK30KKwogLyoKICAqIFVwZGF0ZSB0aGUgdG90YWxfdGltZV9lbmFibGVkIGFuZCB0b3RhbF90aW1lX3J1bm5pbmcgZmllbGRzIGZvciBhIGV2ZW50LgogICovCkBAIC0yNjksNyArMjg3LDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKGN0eC0+aXNfYWN0aXZlKQotCQlydW5fZW5kID0gY3R4LT50aW1lOworCQlydW5fZW5kID0gcGVyZl9ldmVudF90aW1lKGV2ZW50KTsKIAllbHNlCiAJCXJ1bl9lbmQgPSBldmVudC0+dHN0YW1wX3N0b3BwZWQ7CiAKQEAgLTI3OCw3ICsyOTYsNyBAQAogCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKIAkJcnVuX2VuZCA9IGV2ZW50LT50c3RhbXBfc3RvcHBlZDsKIAllbHNlCi0JCXJ1bl9lbmQgPSBjdHgtPnRpbWU7CisJCXJ1bl9lbmQgPSBwZXJmX2V2ZW50X3RpbWUoZXZlbnQpOwogCiAJZXZlbnQtPnRvdGFsX3RpbWVfcnVubmluZyA9IHJ1bl9lbmQgLSBldmVudC0+dHN0YW1wX3J1bm5pbmc7CiB9CkBAIC01MzQsNiArNTUyLDcgQEAKIAkJICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAogCQkgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKKwl1NjQgdHN0YW1wID0gcGVyZl9ldmVudF90aW1lKGV2ZW50KTsKIAl1NjQgZGVsdGE7CiAJLyoKIAkgKiBBbiBldmVudCB3aGljaCBjb3VsZCBub3QgYmUgYWN0aXZhdGVkIGJlY2F1c2Ugb2YKQEAgLTU0NSw3ICs1NjQsNyBAQAogCSAgICAmJiAhZXZlbnRfZmlsdGVyX21hdGNoKGV2ZW50KSkgewogCQlkZWx0YSA9IGN0eC0+dGltZSAtIGV2ZW50LT50c3RhbXBfc3RvcHBlZDsKIAkJZXZlbnQtPnRzdGFtcF9ydW5uaW5nICs9IGRlbHRhOwotCQlldmVudC0+dHN0YW1wX3N0b3BwZWQgPSBjdHgtPnRpbWU7CisJCWV2ZW50LT50c3RhbXBfc3RvcHBlZCA9IHRzdGFtcDsKIAl9CiAKIAlpZiAoZXZlbnQtPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQpAQCAtNTU2LDcgKzU3NSw3IEBACiAJCWV2ZW50LT5wZW5kaW5nX2Rpc2FibGUgPSAwOwogCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX09GRjsKIAl9Ci0JZXZlbnQtPnRzdGFtcF9zdG9wcGVkID0gY3R4LT50aW1lOworCWV2ZW50LT50c3RhbXBfc3RvcHBlZCA9IHRzdGFtcDsKIAlldmVudC0+cG11LT5kZWwoZXZlbnQsIDApOwogCWV2ZW50LT5vbmNwdSA9IC0xOwogCkBAIC03NjgsNiArNzg3LDggQEAKIAkJIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCiAJCSBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCiB7CisJdTY0IHRzdGFtcCA9IHBlcmZfZXZlbnRfdGltZShldmVudCk7CisKIAlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQogCQlyZXR1cm4gMDsKIApAQCAtNzg0LDkgKzgwNSw5IEBACiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWV2ZW50LT50c3RhbXBfcnVubmluZyArPSBjdHgtPnRpbWUgLSBldmVudC0+dHN0YW1wX3N0b3BwZWQ7CisJZXZlbnQtPnRzdGFtcF9ydW5uaW5nICs9IHRzdGFtcCAtIGV2ZW50LT50c3RhbXBfc3RvcHBlZDsKIAotCWV2ZW50LT5zaGFkb3dfY3R4X3RpbWUgPSBjdHgtPnRpbWUgLSBjdHgtPnRpbWVzdGFtcDsKKwlldmVudC0+c2hhZG93X2N0eF90aW1lID0gdHN0YW1wIC0gY3R4LT50aW1lc3RhbXA7CiAKIAlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSkKIAkJY3B1Y3R4LT5hY3RpdmVfb25jcHUrKzsKQEAgLTg5OCwxMSArOTE5LDEzIEBACiBzdGF0aWMgdm9pZCBhZGRfZXZlbnRfdG9fY3R4KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKIAkJCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCiB7CisJdTY0IHRzdGFtcCA9IHBlcmZfZXZlbnRfdGltZShldmVudCk7CisKIAlsaXN0X2FkZF9ldmVudChldmVudCwgY3R4KTsKIAlwZXJmX2dyb3VwX2F0dGFjaChldmVudCk7Ci0JZXZlbnQtPnRzdGFtcF9lbmFibGVkID0gY3R4LT50aW1lOwotCWV2ZW50LT50c3RhbXBfcnVubmluZyA9IGN0eC0+dGltZTsKLQlldmVudC0+dHN0YW1wX3N0b3BwZWQgPSBjdHgtPnRpbWU7CisJZXZlbnQtPnRzdGFtcF9lbmFibGVkID0gdHN0YW1wOworCWV2ZW50LT50c3RhbXBfcnVubmluZyA9IHRzdGFtcDsKKwlldmVudC0+dHN0YW1wX3N0b3BwZWQgPSB0c3RhbXA7CiB9CiAKIC8qCkBAIC05MzcsNyArOTYwLDcgQEAKIAogCWFkZF9ldmVudF90b19jdHgoZXZlbnQsIGN0eCk7CiAKLQlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwlpZiAoIWV2ZW50X2ZpbHRlcl9tYXRjaChldmVudCkpCiAJCWdvdG8gdW5sb2NrOwogCiAJLyoKQEAgLTEwNDIsMTQgKzEwNjUsMTMgQEAKIAkJCQkJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpzdWI7CisJdTY0IHRzdGFtcCA9IHBlcmZfZXZlbnRfdGltZShldmVudCk7CiAKIAlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFOwotCWV2ZW50LT50c3RhbXBfZW5hYmxlZCA9IGN0eC0+dGltZSAtIGV2ZW50LT50b3RhbF90aW1lX2VuYWJsZWQ7CisJZXZlbnQtPnRzdGFtcF9lbmFibGVkID0gdHN0YW1wIC0gZXZlbnQtPnRvdGFsX3RpbWVfZW5hYmxlZDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YiwgJmV2ZW50LT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7Ci0JCWlmIChzdWItPnN0YXRlID49IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpIHsKLQkJCXN1Yi0+dHN0YW1wX2VuYWJsZWQgPQotCQkJCWN0eC0+dGltZSAtIHN1Yi0+dG90YWxfdGltZV9lbmFibGVkOwotCQl9CisJCWlmIChzdWItPnN0YXRlID49IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpCisJCQlzdWItPnRzdGFtcF9lbmFibGVkID0gdHN0YW1wIC0gc3ViLT50b3RhbF90aW1lX2VuYWJsZWQ7CiAJfQogfQogCkBAIC0xMDgyLDcgKzExMDQsNyBAQAogCQlnb3RvIHVubG9jazsKIAlfX3BlcmZfZXZlbnRfbWFya19lbmFibGVkKGV2ZW50LCBjdHgpOwogCi0JaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJaWYgKCFldmVudF9maWx0ZXJfbWF0Y2goZXZlbnQpKQogCQlnb3RvIHVubG9jazsKIAogCS8qCkBAIC0xMTkzLDEyICsxMjE1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotZW51bSBldmVudF90eXBlX3QgewotCUVWRU5UX0ZMRVhJQkxFID0gMHgxLAotCUVWRU5UX1BJTk5FRCA9IDB4MiwKLQlFVkVOVF9BTEwgPSBFVkVOVF9GTEVYSUJMRSB8IEVWRU5UX1BJTk5FRCwKLX07Ci0KIHN0YXRpYyB2b2lkIGN0eF9zY2hlZF9vdXQoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAogCQkJICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAogCQkJICBlbnVtIGV2ZW50X3R5cGVfdCBldmVudF90eXBlKQpAQCAtMTQzNSw3ICsxNDUxLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5waW5uZWRfZ3JvdXBzLCBncm91cF9lbnRyeSkgewogCQlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQogCQkJY29udGludWU7Ci0JCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQlpZiAoIWV2ZW50X2ZpbHRlcl9tYXRjaChldmVudCkpCiAJCQljb250aW51ZTsKIAogCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIDEpKQpAQCAtMTQ2Nyw3ICsxNDgzLDcgQEAKIAkJICogTGlzdGVuIHRvIHRoZSAnY3B1JyBzY2hlZHVsaW5nIGZpbHRlciBjb25zdHJhaW50CiAJCSAqIG9mIGV2ZW50czoKIAkJICovCi0JCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQlpZiAoIWV2ZW50X2ZpbHRlcl9tYXRjaChldmVudCkpCiAJCQljb250aW51ZTsKIAogCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIGNhbl9hZGRfaHcpKSB7CkBAIC0xNjk0LDcgKzE3MTAsNyBAQAogCQlpZiAoZXZlbnQtPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQogCQkJY29udGludWU7CiAKLQkJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCWlmICghZXZlbnRfZmlsdGVyX21hdGNoKGV2ZW50KSkKIAkJCWNvbnRpbnVlOwogCiAJCWh3YyA9ICZldmVudC0+aHc7CkBAIC0zODkzLDcgKzM5MDksNyBAQAogCWlmIChldmVudC0+c3RhdGUgPCBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQogCQlyZXR1cm4gMDsKIAotCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCWlmICghZXZlbnRfZmlsdGVyX21hdGNoKGV2ZW50KSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZXZlbnQtPmF0dHIuY29tbSB8fCBldmVudC0+YXR0ci5tbWFwIHx8CkBAIC00MDMwLDcgKzQwNDYsNyBAQAogCWlmIChldmVudC0+c3RhdGUgPCBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQogCQlyZXR1cm4gMDsKIAotCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCWlmICghZXZlbnRfZmlsdGVyX21hdGNoKGV2ZW50KSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZXZlbnQtPmF0dHIuY29tbSkKQEAgLTQxNzgsNyArNDE5NCw3IEBACiAJaWYgKGV2ZW50LT5zdGF0ZSA8IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpCiAJCXJldHVybiAwOwogCi0JaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJaWYgKCFldmVudF9maWx0ZXJfbWF0Y2goZXZlbnQpKQogCQlyZXR1cm4gMDsKIAogCWlmICgoIWV4ZWN1dGFibGUgJiYgZXZlbnQtPmF0dHIubW1hcF9kYXRhKSB8fApAQCAtNDY0OCw3ICs0NjY0LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQpOwogCi12b2lkIGlubGluZSBwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KGludCByY3R4KQoraW5saW5lIHZvaWQgcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChpbnQgcmN0eCkKIHsKIAlzdHJ1Y3Qgc3dldmVudF9odGFibGUgKnN3aGFzaCA9ICZfX2dldF9jcHVfdmFyKHN3ZXZlbnRfaHRhYmxlKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jIGIva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCmluZGV4IDg3MGY3MmIuLjE4MzJiZDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYworKysgYi9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKQEAgLTUxLDE0ICs1MSwxNCBAQAogCiBzdGF0aWMgaW50IGhpYmVybmF0aW9uX21vZGUgPSBISUJFUk5BVElPTl9TSFVURE9XTjsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9oaWJlcm5hdGlvbl9vcHMgKmhpYmVybmF0aW9uX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1faGliZXJuYXRpb25fb3BzICpoaWJlcm5hdGlvbl9vcHM7CiAKIC8qKgogICogaGliZXJuYXRpb25fc2V0X29wcyAtIHNldCB0aGUgZ2xvYmFsIGhpYmVybmF0ZSBvcGVyYXRpb25zCiAgKiBAb3BzOiB0aGUgaGliZXJuYXRpb24gb3BlcmF0aW9ucyB0byB1c2UgaW4gc3Vic2VxdWVudCBoaWJlcm5hdGlvbiB0cmFuc2l0aW9ucwogICovCiAKLXZvaWQgaGliZXJuYXRpb25fc2V0X29wcyhzdHJ1Y3QgcGxhdGZvcm1faGliZXJuYXRpb25fb3BzICpvcHMpCit2b2lkIGhpYmVybmF0aW9uX3NldF9vcHMoY29uc3Qgc3RydWN0IHBsYXRmb3JtX2hpYmVybmF0aW9uX29wcyAqb3BzKQogewogCWlmIChvcHMgJiYgIShvcHMtPmJlZ2luICYmIG9wcy0+ZW5kICYmICBvcHMtPnByZV9zbmFwc2hvdAogCSAgICAmJiBvcHMtPnByZXBhcmUgJiYgb3BzLT5maW5pc2ggJiYgb3BzLT5lbnRlciAmJiBvcHMtPnByZV9yZXN0b3JlCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3VzcGVuZC5jIGIva2VybmVsL3Bvd2VyL3N1c3BlbmQuYwppbmRleCA4ODUwZGY2Li5kZTZmODZiIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3VzcGVuZC5jCisrKyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kLmMKQEAgLTMxLDEzICszMSwxMyBAQAogCVtQTV9TVVNQRU5EX01FTV0JPSAibWVtIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgKnN1c3BlbmRfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyAqc3VzcGVuZF9vcHM7CiAKIC8qKgogICoJc3VzcGVuZF9zZXRfb3BzIC0gU2V0IHRoZSBnbG9iYWwgc3VzcGVuZCBtZXRob2QgdGFibGUuCiAgKglAb3BzOglQb2ludGVyIHRvIG9wcyBzdHJ1Y3R1cmUuCiAgKi8KLXZvaWQgc3VzcGVuZF9zZXRfb3BzKHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyAqb3BzKQordm9pZCBzdXNwZW5kX3NldF9vcHMoY29uc3Qgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzICpvcHMpCiB7CiAJbXV0ZXhfbG9jaygmcG1fbXV0ZXgpOwogCXN1c3BlbmRfb3BzID0gb3BzOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N3YXAuYyBiL2tlcm5lbC9wb3dlci9zd2FwLmMKaW5kZXggOGM3ZTQ4My4uNjk0MjU4OCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N3YXAuYworKysgYi9rZXJuZWwvcG93ZXIvc3dhcC5jCkBAIC04ODgsNyArODg4LDcgQEAKIC8qKgogICoJc3dzdXNwX3JlYWQgLSByZWFkIHRoZSBoaWJlcm5hdGlvbiBpbWFnZS4KICAqCUBmbGFnc19wOiBmbGFncyBwYXNzZWQgYnkgdGhlICJmcm96ZW4iIGtlcm5lbCBpbiB0aGUgaW1hZ2UgaGVhZGVyIHNob3VsZAotICoJCSAgYmUgd3JpdHRlbiBpbnRvIHRoaXMgbWVtZW9yeSBsb2NhdGlvbgorICoJCSAgYmUgd3JpdHRlbiBpbnRvIHRoaXMgbWVtb3J5IGxvY2F0aW9uCiAgKi8KIAogaW50IHN3c3VzcF9yZWFkKHVuc2lnbmVkIGludCAqZmxhZ3NfcCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCBmNjRiODk5Li41M2Q5YTllIDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzbG9nLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC0xNTAyLDcgKzE1MDMsNyBAQAogCS8qIERvbid0IGFsbG93IHJlZ2lzdGVyaW5nIG11bHRpcGxlIHRpbWVzICovCiAJaWYgKCFkdW1wZXItPnJlZ2lzdGVyZWQpIHsKIAkJZHVtcGVyLT5yZWdpc3RlcmVkID0gMTsKLQkJbGlzdF9hZGRfdGFpbCgmZHVtcGVyLT5saXN0LCAmZHVtcF9saXN0KTsKKwkJbGlzdF9hZGRfdGFpbF9yY3UoJmR1bXBlci0+bGlzdCwgJmR1bXBfbGlzdCk7CiAJCWVyciA9IDA7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR1bXBfbGlzdF9sb2NrLCBmbGFncyk7CkBAIC0xNTI2LDI5ICsxNTI3LDE2IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmR1bXBfbGlzdF9sb2NrLCBmbGFncyk7CiAJaWYgKGR1bXBlci0+cmVnaXN0ZXJlZCkgewogCQlkdW1wZXItPnJlZ2lzdGVyZWQgPSAwOwotCQlsaXN0X2RlbCgmZHVtcGVyLT5saXN0KTsKKwkJbGlzdF9kZWxfcmN1KCZkdW1wZXItPmxpc3QpOwogCQllcnIgPSAwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkdW1wX2xpc3RfbG9jaywgZmxhZ3MpOworCXN5bmNocm9uaXplX3JjdSgpOwogCiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGttc2dfZHVtcF91bnJlZ2lzdGVyKTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBrbXNnX3JlYXNvbnNbXSA9IHsKLQlbS01TR19EVU1QX09PUFNdCT0gIm9vcHMiLAotCVtLTVNHX0RVTVBfUEFOSUNdCT0gInBhbmljIiwKLQlbS01TR19EVU1QX0tFWEVDXQk9ICJrZXhlYyIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqa21zZ190b19zdHIoZW51bSBrbXNnX2R1bXBfcmVhc29uIHJlYXNvbikKLXsKLQlpZiAocmVhc29uID49IEFSUkFZX1NJWkUoa21zZ19yZWFzb25zKSB8fCByZWFzb24gPCAwKQotCQlyZXR1cm4gInVua25vd24iOwotCi0JcmV0dXJuIGttc2dfcmVhc29uc1tyZWFzb25dOwotfQotCiAvKioKICAqIGttc2dfZHVtcCAtIGR1bXAga2VybmVsIGxvZyB0byBrZXJuZWwgbWVzc2FnZSBkdW1wZXJzLgogICogQHJlYXNvbjogdGhlIHJlYXNvbiAob29wcywgcGFuaWMgZXRjKSBmb3IgZHVtcGluZwpAQCAtMTU4NywxMyArMTU3NSw5IEBACiAJCWwyID0gY2hhcnM7CiAJfQogCi0JaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmZHVtcF9saXN0X2xvY2ssIGZsYWdzKSkgewotCQlwcmludGsoS0VSTl9FUlIgImR1bXBfa21zZzogZHVtcCBsaXN0IGxvY2sgaXMgaGVsZCBkdXJpbmcgJXMsIHNraXBwaW5nIGR1bXBcbiIsCi0JCQkJa21zZ190b19zdHIocmVhc29uKSk7Ci0JCXJldHVybjsKLQl9Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkdW1wZXIsICZkdW1wX2xpc3QsIGxpc3QpCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGR1bXBlciwgJmR1bXBfbGlzdCwgbGlzdCkKIAkJZHVtcGVyLT5kdW1wKGR1bXBlciwgcmVhc29uLCBzMSwgbDEsIHMyLCBsMik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHVtcF9saXN0X2xvY2ssIGZsYWdzKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCBhMGViMDk0Li5lYTNlNWVmIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMjUwNSw3ICsyNTA1LDcgQEAKICAqIHRyeV90b193YWtlX3VwX2xvY2FsIC0gdHJ5IHRvIHdha2UgdXAgYSBsb2NhbCB0YXNrIHdpdGggcnEgbG9jayBoZWxkCiAgKiBAcDogdGhlIHRocmVhZCB0byBiZSBhd2FrZW5lZAogICoKLSAqIFB1dCBAcCBvbiB0aGUgcnVuLXF1ZXVlIGlmIGl0J3Mgbm90IGFscmVkeSB0aGVyZS4gIFRoZSBjYWxsZXIgbXVzdAorICogUHV0IEBwIG9uIHRoZSBydW4tcXVldWUgaWYgaXQncyBub3QgYWxyZWFkeSB0aGVyZS4gIFRoZSBjYWxsZXIgbXVzdAogICogZW5zdXJlIHRoYXQgdGhpc19ycSgpIGlzIGxvY2tlZCwgQHAgaXMgYm91bmQgdG8gdGhpc19ycSgpIGFuZCBub3QKICAqIHRoZSBjdXJyZW50IHRhc2suICB0aGlzX3JxKCkgc3RheXMgbG9ja2VkIG92ZXIgaW52b2NhdGlvbi4KICAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NtcC5jIGIva2VybmVsL3NtcC5jCmluZGV4IDEyZWQ4YjAuLjRlYzMwZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zbXAuYworKysgYi9rZXJuZWwvc21wLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KIAorI2lmZGVmIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUwogc3RhdGljIHN0cnVjdCB7CiAJc3RydWN0IGxpc3RfaGVhZAlxdWV1ZTsKIAlyYXdfc3BpbmxvY2tfdAkJbG9jazsKQEAgLTUyOSwzICs1MzAsMjEgQEAKIHsKIAlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjYWxsX2Z1bmN0aW9uLmxvY2spOwogfQorI2VuZGlmIC8qIFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTICovCisKKy8qCisgKiBDYWxsIGEgZnVuY3Rpb24gb24gYWxsIHByb2Nlc3NvcnMKKyAqLworaW50IG9uX2VhY2hfY3B1KHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCB3YWl0KQoreworCWludCByZXQgPSAwOworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJcmV0ID0gc21wX2NhbGxfZnVuY3Rpb24oZnVuYywgaW5mbywgd2FpdCk7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlmdW5jKGluZm8pOworCWxvY2FsX2lycV9lbmFibGUoKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG9uX2VhY2hfY3B1KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IDA4MjM3NzguLjY4ZWI1ZWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKKysrIGIva2VybmVsL3NvZnRpcnEuYwpAQCAtODg1LDI1ICs4ODUsNiBAQAogfQogZWFybHlfaW5pdGNhbGwoc3Bhd25fa3NvZnRpcnFkKTsKIAotI2lmZGVmIENPTkZJR19TTVAKLS8qCi0gKiBDYWxsIGEgZnVuY3Rpb24gb24gYWxsIHByb2Nlc3NvcnMKLSAqLwotaW50IG9uX2VhY2hfY3B1KHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCB3YWl0KQotewotCWludCByZXQgPSAwOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JcmV0ID0gc21wX2NhbGxfZnVuY3Rpb24oZnVuYywgaW5mbywgd2FpdCk7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlmdW5jKGluZm8pOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKG9uX2VhY2hfY3B1KTsKLSNlbmRpZgotCiAvKgogICogWyBUaGVzZSBfX3dlYWsgYWxpYXNlcyBhcmUga2VwdCBpbiBhIHNlcGFyYXRlIGNvbXBpbGF0aW9uIHVuaXQsIHNvIHRoYXQKICAqICAgR0NDIGRvZXMgbm90IGlubGluZSB0aGVtIGluY29ycmVjdGx5LiBdCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggMjc0NWRjZC4uMzFiNzFhMiAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtNDMsNiArNDMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyX25hbWVzcGFjZS5oPgogCisjaW5jbHVkZSA8bGludXgva21zZ19kdW1wLmg+CisKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KQEAgLTI4NSw2ICsyODcsNyBAQAogICovCiB2b2lkIGVtZXJnZW5jeV9yZXN0YXJ0KHZvaWQpCiB7CisJa21zZ19kdW1wKEtNU0dfRFVNUF9FTUVSRyk7CiAJbWFjaGluZV9lbWVyZ2VuY3lfcmVzdGFydCgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZW1lcmdlbmN5X3Jlc3RhcnQpOwpAQCAtMzEyLDYgKzMxNSw3IEBACiAJCXByaW50ayhLRVJOX0VNRVJHICJSZXN0YXJ0aW5nIHN5c3RlbS5cbiIpOwogCWVsc2UKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIlJlc3RhcnRpbmcgc3lzdGVtIHdpdGggY29tbWFuZCAnJXMnLlxuIiwgY21kKTsKKwlrbXNnX2R1bXAoS01TR19EVU1QX1JFU1RBUlQpOwogCW1hY2hpbmVfcmVzdGFydChjbWQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa2VybmVsX3Jlc3RhcnQpOwpAQCAtMzMzLDYgKzMzNyw3IEBACiAJa2VybmVsX3NodXRkb3duX3ByZXBhcmUoU1lTVEVNX0hBTFQpOwogCXN5c2Rldl9zaHV0ZG93bigpOwogCXByaW50ayhLRVJOX0VNRVJHICJTeXN0ZW0gaGFsdGVkLlxuIik7CisJa21zZ19kdW1wKEtNU0dfRFVNUF9IQUxUKTsKIAltYWNoaW5lX2hhbHQoKTsKIH0KIApAQCAtMzUxLDYgKzM1Niw3IEBACiAJZGlzYWJsZV9ub25ib290X2NwdXMoKTsKIAlzeXNkZXZfc2h1dGRvd24oKTsKIAlwcmludGsoS0VSTl9FTUVSRyAiUG93ZXIgZG93bi5cbiIpOworCWttc2dfZHVtcChLTVNHX0RVTVBfUE9XRVJPRkYpOwogCW1hY2hpbmVfcG93ZXJfb2ZmKCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrZXJuZWxfcG93ZXJfb2ZmKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCBhZTVjYmIxLi5iYzg2YmIzIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByaW50ay5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CkBAIC0yNDUsMTAgKzI0Niw2IEBACiAJCS5tb2RlCQk9IDA1NTUsCiAJCS5jaGlsZAkJPSBkZXZfdGFibGUsCiAJfSwKLS8qCi0gKiBOT1RFOiBkbyBub3QgYWRkIG5ldyBlbnRyaWVzIHRvIHRoaXMgdGFibGUgdW5sZXNzIHlvdSBoYXZlIHJlYWQKLSAqIERvY3VtZW50YXRpb24vc3lzY3RsL2N0bF91bm51bWJlcmVkLnR4dAotICovCiAJeyB9CiB9OwogCkBAIC03MTAsNiArNzA3LDE1IEBACiAJCS5leHRyYTEJCT0gJnplcm8sCiAJCS5leHRyYTIJCT0gJm9uZSwKIAl9LAorCXsKKwkJLnByb2NuYW1lCT0gImtwdHJfcmVzdHJpY3QiLAorCQkuZGF0YQkJPSAma3B0cl9yZXN0cmljdCwKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZ6ZXJvLAorCQkuZXh0cmEyCQk9ICZ0d28sCisJfSwKICNlbmRpZgogCXsKIAkJLnByb2NuYW1lCT0gIm5ncm91cHNfbWF4IiwKQEAgLTk2MiwxMCArOTY4LDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCiAJfSwKICNlbmRpZgotLyoKLSAqIE5PVEU6IGRvIG5vdCBhZGQgbmV3IGVudHJpZXMgdG8gdGhpcyB0YWJsZSB1bmxlc3MgeW91IGhhdmUgcmVhZAotICogRG9jdW1lbnRhdGlvbi9zeXNjdGwvY3RsX3VubnVtYmVyZWQudHh0Ci0gKi8KIAl7IH0KIH07CiAKQEAgLTEzMjYsMTEgKzEzMjgsNiBAQAogCQkuZXh0cmEyCQk9ICZvbmUsCiAJfSwKICNlbmRpZgotCi0vKgotICogTk9URTogZG8gbm90IGFkZCBuZXcgZW50cmllcyB0byB0aGlzIHRhYmxlIHVubGVzcyB5b3UgaGF2ZSByZWFkCi0gKiBEb2N1bWVudGF0aW9uL3N5c2N0bC9jdGxfdW5udW1iZXJlZC50eHQKLSAqLwogCXsgfQogfTsKIApAQCAtMTQ4NiwxMCArMTQ4Myw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcGlwZV9wcm9jX2ZuLAogCQkuZXh0cmExCQk9ICZwaXBlX21pbl9zaXplLAogCX0sCi0vKgotICogTk9URTogZG8gbm90IGFkZCBuZXcgZW50cmllcyB0byB0aGlzIHRhYmxlIHVubGVzcyB5b3UgaGF2ZSByZWFkCi0gKiBEb2N1bWVudGF0aW9uL3N5c2N0bC9jdGxfdW5udW1iZXJlZC50eHQKLSAqLwogCXsgfQogfTsKIApAQCAtMjg5OSw3ICsyODkyLDcgQEAKIAl9CiB9CiAKLSNlbHNlIC8qIENPTkZJR19QUk9DX0ZTICovCisjZWxzZSAvKiBDT05GSUdfUFJPQ19TWVNDVEwgKi8KIAogaW50IHByb2NfZG9zdHJpbmcoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAkJICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKQEAgLTI5NTEsNyArMjk0NCw3IEBACiB9CiAKIAotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisjZW5kaWYgLyogQ09ORklHX1BST0NfU1lTQ1RMICovCiAKIC8qCiAgKiBObyBzZW5zZSBwdXR0aW5nIHRoaXMgYWZ0ZXIgZWFjaCBzeW1ib2wgZGVmaW5pdGlvbiwgdHdpY2UsCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsX2JpbmFyeS5jIGIva2VybmVsL3N5c2N0bF9iaW5hcnkuYwppbmRleCA0YjI1NDVhLi5iODc1YmVkIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsX2JpbmFyeS5jCisrKyBiL2tlcm5lbC9zeXNjdGxfYmluYXJ5LmMKQEAgLTExOTIsNyArMTE5Miw3IEBACiAKIAkJYnVmW3Jlc3VsdF0gPSAnXDAnOwogCi0JCS8qIENvbnZlcnQgdGhlIGRlY25ldCBhZGRyZXNzcyB0byBiaW5hcnkgKi8KKwkJLyogQ29udmVydCB0aGUgZGVjbmV0IGFkZHJlc3MgdG8gYmluYXJ5ICovCiAJCXJlc3VsdCA9IC1FSU87CiAJCW5vZGVwID0gc3RyY2hyKGJ1ZiwgJy4nKSArIDE7CiAJCWlmICghbm9kZXApCmRpZmYgLS1naXQgYS9rZXJuZWwvdGFza3N0YXRzLmMgYi9rZXJuZWwvdGFza3N0YXRzLmMKaW5kZXggNjk2OTFlYi4uMzk3MWM2YiAxMDA2NDQKLS0tIGEva2VybmVsL3Rhc2tzdGF0cy5jCisrKyBiL2tlcm5lbC90YXNrc3RhdHMuYwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIENPTkZJR19JQTY0CisjaWYgZGVmaW5lZChDT05GSUdfNjRCSVQpICYmICFkZWZpbmVkKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKQogI2RlZmluZSBUQVNLU1RBVFNfTkVFRFNfUEFERElORyAxCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUuYyBiL2tlcm5lbC90aW1lLmMKaW5kZXggYmE5YjMzOC4uMzIxNzQzNSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUuYworKysgYi9rZXJuZWwvdGltZS5jCkBAIC0yMzgsNyArMjM4LDcgQEAKICAqIEF2b2lkIHVubmVjZXNzYXJ5IG11bHRpcGxpY2F0aW9ucy9kaXZpc2lvbnMgaW4gdGhlCiAgKiB0d28gbW9zdCBjb21tb24gSFogY2FzZXM6CiAgKi8KLXVuc2lnbmVkIGludCBpbmxpbmUgamlmZmllc190b19tc2Vjcyhjb25zdCB1bnNpZ25lZCBsb25nIGopCitpbmxpbmUgdW5zaWduZWQgaW50IGppZmZpZXNfdG9fbXNlY3MoY29uc3QgdW5zaWduZWQgbG9uZyBqKQogewogI2lmIEhaIDw9IE1TRUNfUEVSX1NFQyAmJiAhKE1TRUNfUEVSX1NFQyAlIEhaKQogCXJldHVybiAoTVNFQ19QRVJfU0VDIC8gSFopICogajsKQEAgLTI1NCw3ICsyNTQsNyBAQAogfQogRVhQT1JUX1NZTUJPTChqaWZmaWVzX3RvX21zZWNzKTsKIAotdW5zaWduZWQgaW50IGlubGluZSBqaWZmaWVzX3RvX3VzZWNzKGNvbnN0IHVuc2lnbmVkIGxvbmcgaikKK2lubGluZSB1bnNpZ25lZCBpbnQgamlmZmllc190b191c2Vjcyhjb25zdCB1bnNpZ25lZCBsb25nIGopCiB7CiAjaWYgSFogPD0gVVNFQ19QRVJfU0VDICYmICEoVVNFQ19QRVJfU0VDICUgSFopCiAJcmV0dXJuIChVU0VDX1BFUl9TRUMgLyBIWikgKiBqOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKaW5kZXggZGYxNDBjZC4uYzUwYTAzNCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCkBAIC02NzksNyArNjc5LDcgQEAKIGludCBfX2Nsb2Nrc291cmNlX3JlZ2lzdGVyX3NjYWxlKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIHUzMiBzY2FsZSwgdTMyIGZyZXEpCiB7CiAKLQkvKiBJbnRpYWxpemUgbXVsdC9zaGlmdCBhbmQgbWF4X2lkbGVfbnMgKi8KKwkvKiBJbml0aWFsaXplIG11bHQvc2hpZnQgYW5kIG1heF9pZGxlX25zICovCiAJX19jbG9ja3NvdXJjZV91cGRhdGVmcmVxX3NjYWxlKGNzLCBzY2FsZSwgZnJlcSk7CiAKIAkvKiBBZGQgY2xvY2tzb3VyY2UgdG8gdGhlIGNsY29rc291cmNlIGxpc3QgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL250cC5jIGIva2VybmVsL3RpbWUvbnRwLmMKaW5kZXggZDIzMjE4OS4uNWMwMDI0MiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvbnRwLmMKKysrIGIva2VybmVsL3RpbWUvbnRwLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAvKgogICogTlRQIHRpbWVrZWVwaW5nIHZhcmlhYmxlczoKQEAgLTc0LDYgKzc1LDE2MiBAQAogLyogY29uc3RhbnQgKGJvb3QtcGFyYW0gY29uZmlndXJhYmxlKSBOVFAgdGljayBhZGp1c3RtZW50ICh1cHNjYWxlZCkJKi8KIHN0YXRpYyBzNjQJCQludHBfdGlja19hZGo7CiAKKyNpZmRlZiBDT05GSUdfTlRQX1BQUworCisvKgorICogVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIHVzZWQgd2hlbiBhIHB1bHNlLXBlci1zZWNvbmQgKFBQUykgc2lnbmFsCisgKiBpcyBhdmFpbGFibGUuIFRoZXkgZXN0YWJsaXNoIHRoZSBlbmdpbmVlcmluZyBwYXJhbWV0ZXJzIG9mIHRoZSBjbG9jaworICogZGlzY2lwbGluZSBsb29wIHdoZW4gY29udHJvbGxlZCBieSB0aGUgUFBTIHNpZ25hbC4KKyAqLworI2RlZmluZSBQUFNfVkFMSUQJMTAJLyogUFBTIHNpZ25hbCB3YXRjaGRvZyBtYXggKHMpICovCisjZGVmaW5lIFBQU19QT1BDT1JOCTQJLyogcG9wY29ybiBzcGlrZSB0aHJlc2hvbGQgKHNoaWZ0KSAqLworI2RlZmluZSBQUFNfSU5UTUlOCTIJLyogbWluIGZyZXEgaW50ZXJ2YWwgKHMpIChzaGlmdCkgKi8KKyNkZWZpbmUgUFBTX0lOVE1BWAk4CS8qIG1heCBmcmVxIGludGVydmFsIChzKSAoc2hpZnQpICovCisjZGVmaW5lIFBQU19JTlRDT1VOVAk0CS8qIG51bWJlciBvZiBjb25zZWN1dGl2ZSBnb29kIGludGVydmFscyB0bworCQkJCSAgIGluY3JlYXNlIHBwc19zaGlmdCBvciBjb25zZWN1dGl2ZSBiYWQKKwkJCQkgICBpbnRlcnZhbHMgdG8gZGVjcmVhc2UgaXQgKi8KKyNkZWZpbmUgUFBTX01BWFdBTkRFUgkxMDAwMDAJLyogbWF4IFBQUyBmcmVxIHdhbmRlciAobnMvcykgKi8KKworc3RhdGljIGludCBwcHNfdmFsaWQ7CQkvKiBzaWduYWwgd2F0Y2hkb2cgY291bnRlciAqLworc3RhdGljIGxvbmcgcHBzX3RmWzNdOwkJLyogcGhhc2UgbWVkaWFuIGZpbHRlciAqLworc3RhdGljIGxvbmcgcHBzX2ppdHRlcjsJCS8qIGN1cnJlbnQgaml0dGVyIChucykgKi8KK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgcHBzX2ZiYXNlOyAvKiBiZWdpbm5pbmcgb2YgdGhlIGxhc3QgZnJlcSBpbnRlcnZhbCAqLworc3RhdGljIGludCBwcHNfc2hpZnQ7CQkvKiBjdXJyZW50IGludGVydmFsIGR1cmF0aW9uIChzKSAoc2hpZnQpICovCitzdGF0aWMgaW50IHBwc19pbnRjbnQ7CQkvKiBpbnRlcnZhbCBjb3VudGVyICovCitzdGF0aWMgczY0IHBwc19mcmVxOwkJLyogZnJlcXVlbmN5IG9mZnNldCAoc2NhbGVkIG5zL3MpICovCitzdGF0aWMgbG9uZyBwcHNfc3RhYmlsOwkJLyogY3VycmVudCBzdGFiaWxpdHkgKHNjYWxlZCBucy9zKSAqLworCisvKgorICogUFBTIHNpZ25hbCBxdWFsaXR5IG1vbml0b3JzCisgKi8KK3N0YXRpYyBsb25nIHBwc19jYWxjbnQ7CQkvKiBjYWxpYnJhdGlvbiBpbnRlcnZhbHMgKi8KK3N0YXRpYyBsb25nIHBwc19qaXRjbnQ7CQkvKiBqaXR0ZXIgbGltaXQgZXhjZWVkZWQgKi8KK3N0YXRpYyBsb25nIHBwc19zdGJjbnQ7CQkvKiBzdGFiaWxpdHkgbGltaXQgZXhjZWVkZWQgKi8KK3N0YXRpYyBsb25nIHBwc19lcnJjbnQ7CQkvKiBjYWxpYnJhdGlvbiBlcnJvcnMgKi8KKworCisvKiBQUFMga2VybmVsIGNvbnN1bWVyIGNvbXBlbnNhdGVzIHRoZSB3aG9sZSBwaGFzZSBlcnJvciBpbW1lZGlhdGVseS4KKyAqIE90aGVyd2lzZSwgcmVkdWNlIHRoZSBvZmZzZXQgYnkgYSBmaXhlZCBmYWN0b3IgdGltZXMgdGhlIHRpbWUgY29uc3RhbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgczY0IG50cF9vZmZzZXRfY2h1bmsoczY0IG9mZnNldCkKK3sKKwlpZiAodGltZV9zdGF0dXMgJiBTVEFfUFBTVElNRSAmJiB0aW1lX3N0YXR1cyAmIFNUQV9QUFNTSUdOQUwpCisJCXJldHVybiBvZmZzZXQ7CisJZWxzZQorCQlyZXR1cm4gc2hpZnRfcmlnaHQob2Zmc2V0LCBTSElGVF9QTEwgKyB0aW1lX2NvbnN0YW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBwc19yZXNldF9mcmVxX2ludGVydmFsKHZvaWQpCit7CisJLyogdGhlIFBQUyBjYWxpYnJhdGlvbiBpbnRlcnZhbCBtYXkgZW5kCisJICAgc3VycHJpc2luZ2x5IGVhcmx5ICovCisJcHBzX3NoaWZ0ID0gUFBTX0lOVE1JTjsKKwlwcHNfaW50Y250ID0gMDsKK30KKworLyoqCisgKiBwcHNfY2xlYXIgLSBDbGVhcnMgdGhlIFBQUyBzdGF0ZSB2YXJpYWJsZXMKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgd3JpdGUgb24gdGhlIHh0aW1lX2xvY2sKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBwc19jbGVhcih2b2lkKQoreworCXBwc19yZXNldF9mcmVxX2ludGVydmFsKCk7CisJcHBzX3RmWzBdID0gMDsKKwlwcHNfdGZbMV0gPSAwOworCXBwc190ZlsyXSA9IDA7CisJcHBzX2ZiYXNlLnR2X3NlYyA9IHBwc19mYmFzZS50dl9uc2VjID0gMDsKKwlwcHNfZnJlcSA9IDA7Cit9CisKKy8qIERlY3JlYXNlIHBwc192YWxpZCB0byBpbmRpY2F0ZSB0aGF0IGFub3RoZXIgc2Vjb25kIGhhcyBwYXNzZWQgc2luY2UKKyAqIHRoZSBsYXN0IFBQUyBzaWduYWwuIFdoZW4gaXQgcmVhY2hlcyAwLCBpbmRpY2F0ZSB0aGF0IFBQUyBzaWduYWwgaXMKKyAqIG1pc3NpbmcuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBhIHdyaXRlIG9uIHRoZSB4dGltZV9sb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwcHNfZGVjX3ZhbGlkKHZvaWQpCit7CisJaWYgKHBwc192YWxpZCA+IDApCisJCXBwc192YWxpZC0tOworCWVsc2UgeworCQl0aW1lX3N0YXR1cyAmPSB+KFNUQV9QUFNTSUdOQUwgfCBTVEFfUFBTSklUVEVSIHwKKwkJCQkgU1RBX1BQU1dBTkRFUiB8IFNUQV9QUFNFUlJPUik7CisJCXBwc19jbGVhcigpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHBwc19zZXRfZnJlcShzNjQgZnJlcSkKK3sKKwlwcHNfZnJlcSA9IGZyZXE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2Vycm9yX3N0YXR1cyhpbnQgc3RhdHVzKQoreworCXJldHVybiAodGltZV9zdGF0dXMgJiAoU1RBX1VOU1lOQ3xTVEFfQ0xPQ0tFUlIpKQorCQkvKiBQUFMgc2lnbmFsIGxvc3Qgd2hlbiBlaXRoZXIgUFBTIHRpbWUgb3IKKwkJICogUFBTIGZyZXF1ZW5jeSBzeW5jaHJvbml6YXRpb24gcmVxdWVzdGVkCisJCSAqLworCQl8fCAoKHRpbWVfc3RhdHVzICYgKFNUQV9QUFNGUkVRfFNUQV9QUFNUSU1FKSkKKwkJCSYmICEodGltZV9zdGF0dXMgJiBTVEFfUFBTU0lHTkFMKSkKKwkJLyogUFBTIGppdHRlciBleGNlZWRlZCB3aGVuCisJCSAqIFBQUyB0aW1lIHN5bmNocm9uaXphdGlvbiByZXF1ZXN0ZWQgKi8KKwkJfHwgKCh0aW1lX3N0YXR1cyAmIChTVEFfUFBTVElNRXxTVEFfUFBTSklUVEVSKSkKKwkJCT09IChTVEFfUFBTVElNRXxTVEFfUFBTSklUVEVSKSkKKwkJLyogUFBTIHdhbmRlciBleGNlZWRlZCBvciBjYWxpYnJhdGlvbiBlcnJvciB3aGVuCisJCSAqIFBQUyBmcmVxdWVuY3kgc3luY2hyb25pemF0aW9uIHJlcXVlc3RlZAorCQkgKi8KKwkJfHwgKCh0aW1lX3N0YXR1cyAmIFNUQV9QUFNGUkVRKQorCQkJJiYgKHRpbWVfc3RhdHVzICYgKFNUQV9QUFNXQU5ERVJ8U1RBX1BQU0VSUk9SKSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHBzX2ZpbGxfdGltZXgoc3RydWN0IHRpbWV4ICp0eGMpCit7CisJdHhjLT5wcHNmcmVxCSAgID0gc2hpZnRfcmlnaHQoKHBwc19mcmVxID4+IFBQTV9TQ0FMRV9JTlZfU0hJRlQpICoKKwkJCQkJIFBQTV9TQ0FMRV9JTlYsIE5UUF9TQ0FMRV9TSElGVCk7CisJdHhjLT5qaXR0ZXIJICAgPSBwcHNfaml0dGVyOworCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX05BTk8pKQorCQl0eGMtPmppdHRlciAvPSBOU0VDX1BFUl9VU0VDOworCXR4Yy0+c2hpZnQJICAgPSBwcHNfc2hpZnQ7CisJdHhjLT5zdGFiaWwJICAgPSBwcHNfc3RhYmlsOworCXR4Yy0+aml0Y250CSAgID0gcHBzX2ppdGNudDsKKwl0eGMtPmNhbGNudAkgICA9IHBwc19jYWxjbnQ7CisJdHhjLT5lcnJjbnQJICAgPSBwcHNfZXJyY250OworCXR4Yy0+c3RiY250CSAgID0gcHBzX3N0YmNudDsKK30KKworI2Vsc2UgLyogIUNPTkZJR19OVFBfUFBTICovCisKK3N0YXRpYyBpbmxpbmUgczY0IG50cF9vZmZzZXRfY2h1bmsoczY0IG9mZnNldCkKK3sKKwlyZXR1cm4gc2hpZnRfcmlnaHQob2Zmc2V0LCBTSElGVF9QTEwgKyB0aW1lX2NvbnN0YW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBwc19yZXNldF9mcmVxX2ludGVydmFsKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcHBzX2NsZWFyKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcHBzX2RlY192YWxpZCh2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHBwc19zZXRfZnJlcShzNjQgZnJlcSkge30KKworc3RhdGljIGlubGluZSBpbnQgaXNfZXJyb3Jfc3RhdHVzKGludCBzdGF0dXMpCit7CisJcmV0dXJuIHN0YXR1cyAmIChTVEFfVU5TWU5DfFNUQV9DTE9DS0VSUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcHNfZmlsbF90aW1leChzdHJ1Y3QgdGltZXggKnR4YykKK3sKKwkvKiBQUFMgaXMgbm90IGltcGxlbWVudGVkLCBzbyB0aGVzZSBhcmUgemVybyAqLworCXR4Yy0+cHBzZnJlcQkgICA9IDA7CisJdHhjLT5qaXR0ZXIJICAgPSAwOworCXR4Yy0+c2hpZnQJICAgPSAwOworCXR4Yy0+c3RhYmlsCSAgID0gMDsKKwl0eGMtPmppdGNudAkgICA9IDA7CisJdHhjLT5jYWxjbnQJICAgPSAwOworCXR4Yy0+ZXJyY250CSAgID0gMDsKKwl0eGMtPnN0YmNudAkgICA9IDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfTlRQX1BQUyAqLworCiAvKgogICogTlRQIG1ldGhvZHM6CiAgKi8KQEAgLTE4NSw2ICszNDIsOSBAQAogCiAJdGlja19sZW5ndGgJPSB0aWNrX2xlbmd0aF9iYXNlOwogCXRpbWVfb2Zmc2V0CT0gMDsKKworCS8qIENsZWFyIFBQUyBzdGF0ZSB2YXJpYWJsZXMgKi8KKwlwcHNfY2xlYXIoKTsKIH0KIAogLyoKQEAgLTI1MCwxNiArNDEwLDE2IEBACiAJCXRpbWVfc3RhdHVzIHw9IFNUQV9VTlNZTkM7CiAJfQogCi0JLyoKLQkgKiBDb21wdXRlIHRoZSBwaGFzZSBhZGp1c3RtZW50IGZvciB0aGUgbmV4dCBzZWNvbmQuIFRoZSBvZmZzZXQgaXMKLQkgKiByZWR1Y2VkIGJ5IGEgZml4ZWQgZmFjdG9yIHRpbWVzIHRoZSB0aW1lIGNvbnN0YW50LgotCSAqLworCS8qIENvbXB1dGUgdGhlIHBoYXNlIGFkanVzdG1lbnQgZm9yIHRoZSBuZXh0IHNlY29uZCAqLwogCXRpY2tfbGVuZ3RoCSA9IHRpY2tfbGVuZ3RoX2Jhc2U7CiAKLQlkZWx0YQkJID0gc2hpZnRfcmlnaHQodGltZV9vZmZzZXQsIFNISUZUX1BMTCArIHRpbWVfY29uc3RhbnQpOworCWRlbHRhCQkgPSBudHBfb2Zmc2V0X2NodW5rKHRpbWVfb2Zmc2V0KTsKIAl0aW1lX29mZnNldAktPSBkZWx0YTsKIAl0aWNrX2xlbmd0aAkrPSBkZWx0YTsKIAorCS8qIENoZWNrIFBQUyBzaWduYWwgKi8KKwlwcHNfZGVjX3ZhbGlkKCk7CisKIAlpZiAoIXRpbWVfYWRqdXN0KQogCQlyZXR1cm47CiAKQEAgLTM2OSw2ICs1MjksOCBAQAogCWlmICgodGltZV9zdGF0dXMgJiBTVEFfUExMKSAmJiAhKHR4Yy0+c3RhdHVzICYgU1RBX1BMTCkpIHsKIAkJdGltZV9zdGF0ZSA9IFRJTUVfT0s7CiAJCXRpbWVfc3RhdHVzID0gU1RBX1VOU1lOQzsKKwkJLyogcmVzdGFydCBQUFMgZnJlcXVlbmN5IGNhbGlicmF0aW9uICovCisJCXBwc19yZXNldF9mcmVxX2ludGVydmFsKCk7CiAJfQogCiAJLyoKQEAgLTQxOCw2ICs1ODAsOCBAQAogCQl0aW1lX2ZyZXEgPSB0eGMtPmZyZXEgKiBQUE1fU0NBTEU7CiAJCXRpbWVfZnJlcSA9IG1pbih0aW1lX2ZyZXEsIE1BWEZSRVFfU0NBTEVEKTsKIAkJdGltZV9mcmVxID0gbWF4KHRpbWVfZnJlcSwgLU1BWEZSRVFfU0NBTEVEKTsKKwkJLyogdXBkYXRlIHBwc19mcmVxICovCisJCXBwc19zZXRfZnJlcSh0aW1lX2ZyZXEpOwogCX0KIAogCWlmICh0eGMtPm1vZGVzICYgQURKX01BWEVSUk9SKQpAQCAtNTA4LDcgKzY3Miw4IEBACiAJfQogCiAJcmVzdWx0ID0gdGltZV9zdGF0ZTsJLyogbW9zdGx5IGBUSU1FX09LJyAqLwotCWlmICh0aW1lX3N0YXR1cyAmIChTVEFfVU5TWU5DfFNUQV9DTE9DS0VSUikpCisJLyogY2hlY2sgZm9yIGVycm9ycyAqLworCWlmIChpc19lcnJvcl9zdGF0dXModGltZV9zdGF0dXMpKQogCQlyZXN1bHQgPSBUSU1FX0VSUk9SOwogCiAJdHhjLT5mcmVxCSAgID0gc2hpZnRfcmlnaHQoKHRpbWVfZnJlcSA+PiBQUE1fU0NBTEVfSU5WX1NISUZUKSAqCkBAIC01MjIsMTUgKzY4Nyw4IEBACiAJdHhjLT50aWNrCSAgID0gdGlja191c2VjOwogCXR4Yy0+dGFpCSAgID0gdGltZV90YWk7CiAKLQkvKiBQUFMgaXMgbm90IGltcGxlbWVudGVkLCBzbyB0aGVzZSBhcmUgemVybyAqLwotCXR4Yy0+cHBzZnJlcQkgICA9IDA7Ci0JdHhjLT5qaXR0ZXIJICAgPSAwOwotCXR4Yy0+c2hpZnQJICAgPSAwOwotCXR4Yy0+c3RhYmlsCSAgID0gMDsKLQl0eGMtPmppdGNudAkgICA9IDA7Ci0JdHhjLT5jYWxjbnQJICAgPSAwOwotCXR4Yy0+ZXJyY250CSAgID0gMDsKLQl0eGMtPnN0YmNudAkgICA9IDA7CisJLyogZmlsbCBQUFMgc3RhdHVzIGZpZWxkcyAqLworCXBwc19maWxsX3RpbWV4KHR4Yyk7CiAKIAl3cml0ZV9zZXF1bmxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKIApAQCAtNTQ0LDYgKzcwMiwyNDMgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCisjaWZkZWYJQ09ORklHX05UUF9QUFMKKworLyogYWN0dWFsbHkgc3RydWN0IHBwc19ub3JtdGltZSBpcyBnb29kIG9sZCBzdHJ1Y3QgdGltZXNwZWMsIGJ1dCBpdCBpcworICogc2VtYW50aWNhbGx5IGRpZmZlcmVudCAoYW5kIGl0IGlzIHRoZSByZWFzb24gd2h5IGl0IHdhcyBpbnZlbnRlZCk6CisgKiBwcHNfbm9ybXRpbWUubnNlYyBoYXMgYSByYW5nZSBvZiAoIC1OU0VDX1BFUl9TRUMgLyAyLCBOU0VDX1BFUl9TRUMgLyAyIF0KKyAqIHdoaWxlIHRpbWVzcGVjLnR2X25zZWMgaGFzIGEgcmFuZ2Ugb2YgWzAsIE5TRUNfUEVSX1NFQykgKi8KK3N0cnVjdCBwcHNfbm9ybXRpbWUgeworCV9fa2VybmVsX3RpbWVfdAlzZWM7CS8qIHNlY29uZHMgKi8KKwlsb25nCQluc2VjOwkvKiBuYW5vc2Vjb25kcyAqLworfTsKKworLyogbm9ybWFsaXplIHRoZSB0aW1lc3RhbXAgc28gdGhhdCBuc2VjIGlzIGluIHRoZQorICAgKCAtTlNFQ19QRVJfU0VDIC8gMiwgTlNFQ19QRVJfU0VDIC8gMiBdIGludGVydmFsICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHNfbm9ybXRpbWUgcHBzX25vcm1hbGl6ZV90cyhzdHJ1Y3QgdGltZXNwZWMgdHMpCit7CisJc3RydWN0IHBwc19ub3JtdGltZSBub3JtID0geworCQkuc2VjID0gdHMudHZfc2VjLAorCQkubnNlYyA9IHRzLnR2X25zZWMKKwl9OworCisJaWYgKG5vcm0ubnNlYyA+IChOU0VDX1BFUl9TRUMgPj4gMSkpIHsKKwkJbm9ybS5uc2VjIC09IE5TRUNfUEVSX1NFQzsKKwkJbm9ybS5zZWMrKzsKKwl9CisKKwlyZXR1cm4gbm9ybTsKK30KKworLyogZ2V0IGN1cnJlbnQgcGhhc2UgY29ycmVjdGlvbiBhbmQgaml0dGVyICovCitzdGF0aWMgaW5saW5lIGxvbmcgcHBzX3BoYXNlX2ZpbHRlcl9nZXQobG9uZyAqaml0dGVyKQoreworCSpqaXR0ZXIgPSBwcHNfdGZbMF0gLSBwcHNfdGZbMV07CisJaWYgKCpqaXR0ZXIgPCAwKQorCQkqaml0dGVyID0gLSpqaXR0ZXI7CisKKwkvKiBUT0RPOiB0ZXN0IHZhcmlvdXMgZmlsdGVycyAqLworCXJldHVybiBwcHNfdGZbMF07Cit9CisKKy8qIGFkZCB0aGUgc2FtcGxlIHRvIHRoZSBwaGFzZSBmaWx0ZXIgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwcHNfcGhhc2VfZmlsdGVyX2FkZChsb25nIGVycikKK3sKKwlwcHNfdGZbMl0gPSBwcHNfdGZbMV07CisJcHBzX3RmWzFdID0gcHBzX3RmWzBdOworCXBwc190ZlswXSA9IGVycjsKK30KKworLyogZGVjcmVhc2UgZnJlcXVlbmN5IGNhbGlicmF0aW9uIGludGVydmFsIGxlbmd0aC4KKyAqIEl0IGlzIGhhbHZlZCBhZnRlciBmb3VyIGNvbnNlY3V0aXZlIHVuc3RhYmxlIGludGVydmFscy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBwc19kZWNfZnJlcV9pbnRlcnZhbCh2b2lkKQoreworCWlmICgtLXBwc19pbnRjbnQgPD0gLVBQU19JTlRDT1VOVCkgeworCQlwcHNfaW50Y250ID0gLVBQU19JTlRDT1VOVDsKKwkJaWYgKHBwc19zaGlmdCA+IFBQU19JTlRNSU4pIHsKKwkJCXBwc19zaGlmdC0tOworCQkJcHBzX2ludGNudCA9IDA7CisJCX0KKwl9Cit9CisKKy8qIGluY3JlYXNlIGZyZXF1ZW5jeSBjYWxpYnJhdGlvbiBpbnRlcnZhbCBsZW5ndGguCisgKiBJdCBpcyBkb3VibGVkIGFmdGVyIGZvdXIgY29uc2VjdXRpdmUgc3RhYmxlIGludGVydmFscy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBwc19pbmNfZnJlcV9pbnRlcnZhbCh2b2lkKQoreworCWlmICgrK3Bwc19pbnRjbnQgPj0gUFBTX0lOVENPVU5UKSB7CisJCXBwc19pbnRjbnQgPSBQUFNfSU5UQ09VTlQ7CisJCWlmIChwcHNfc2hpZnQgPCBQUFNfSU5UTUFYKSB7CisJCQlwcHNfc2hpZnQrKzsKKwkJCXBwc19pbnRjbnQgPSAwOworCQl9CisJfQorfQorCisvKiB1cGRhdGUgY2xvY2sgZnJlcXVlbmN5IGJhc2VkIG9uIE1PTk9UT05JQ19SQVcgY2xvY2sgUFBTIHNpZ25hbAorICogdGltZXN0YW1wcworICoKKyAqIEF0IHRoZSBlbmQgb2YgdGhlIGNhbGlicmF0aW9uIGludGVydmFsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlCisgKiBmaXJzdCBhbmQgbGFzdCBNT05PVE9OSUNfUkFXIGNsb2NrIHRpbWVzdGFtcHMgZGl2aWRlZCBieSB0aGUgbGVuZ3RoCisgKiBvZiB0aGUgaW50ZXJ2YWwgYmVjb21lcyB0aGUgZnJlcXVlbmN5IHVwZGF0ZS4gSWYgdGhlIGludGVydmFsIHdhcworICogdG9vIGxvbmcsIHRoZSBkYXRhIGFyZSBkaXNjYXJkZWQuCisgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb2xkIGFuZCBuZXcgZnJlcXVlbmN5IHZhbHVlcy4KKyAqLworc3RhdGljIGxvbmcgaGFyZHBwc191cGRhdGVfZnJlcShzdHJ1Y3QgcHBzX25vcm10aW1lIGZyZXFfbm9ybSkKK3sKKwlsb25nIGRlbHRhLCBkZWx0YV9tb2Q7CisJczY0IGZ0ZW1wOworCisJLyogY2hlY2sgaWYgdGhlIGZyZXF1ZW5jeSBpbnRlcnZhbCB3YXMgdG9vIGxvbmcgKi8KKwlpZiAoZnJlcV9ub3JtLnNlYyA+ICgyIDw8IHBwc19zaGlmdCkpIHsKKwkJdGltZV9zdGF0dXMgfD0gU1RBX1BQU0VSUk9SOworCQlwcHNfZXJyY250Kys7CisJCXBwc19kZWNfZnJlcV9pbnRlcnZhbCgpOworCQlwcl9lcnIoImhhcmRwcHM6IFBQU0VSUk9SOiBpbnRlcnZhbCB0b28gbG9uZyAtICVsZCBzXG4iLAorCQkJCWZyZXFfbm9ybS5zZWMpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBoZXJlIHRoZSByYXcgZnJlcXVlbmN5IG9mZnNldCBhbmQgd2FuZGVyIChzdGFiaWxpdHkpIGlzCisJICogY2FsY3VsYXRlZC4gSWYgdGhlIHdhbmRlciBpcyBsZXNzIHRoYW4gdGhlIHdhbmRlciB0aHJlc2hvbGQKKwkgKiB0aGUgaW50ZXJ2YWwgaXMgaW5jcmVhc2VkOyBvdGhlcndpc2UgaXQgaXMgZGVjcmVhc2VkLgorCSAqLworCWZ0ZW1wID0gZGl2X3M2NCgoKHM2NCkoLWZyZXFfbm9ybS5uc2VjKSkgPDwgTlRQX1NDQUxFX1NISUZULAorCQkJZnJlcV9ub3JtLnNlYyk7CisJZGVsdGEgPSBzaGlmdF9yaWdodChmdGVtcCAtIHBwc19mcmVxLCBOVFBfU0NBTEVfU0hJRlQpOworCXBwc19mcmVxID0gZnRlbXA7CisJaWYgKGRlbHRhID4gUFBTX01BWFdBTkRFUiB8fCBkZWx0YSA8IC1QUFNfTUFYV0FOREVSKSB7CisJCXByX3dhcm5pbmcoImhhcmRwcHM6IFBQU1dBTkRFUjogY2hhbmdlPSVsZFxuIiwgZGVsdGEpOworCQl0aW1lX3N0YXR1cyB8PSBTVEFfUFBTV0FOREVSOworCQlwcHNfc3RiY250Kys7CisJCXBwc19kZWNfZnJlcV9pbnRlcnZhbCgpOworCX0gZWxzZSB7CS8qIGdvb2Qgc2FtcGxlICovCisJCXBwc19pbmNfZnJlcV9pbnRlcnZhbCgpOworCX0KKworCS8qIHRoZSBzdGFiaWxpdHkgbWV0cmljIGlzIGNhbGN1bGF0ZWQgYXMgdGhlIGF2ZXJhZ2Ugb2YgcmVjZW50CisJICogZnJlcXVlbmN5IGNoYW5nZXMsIGJ1dCBpcyB1c2VkIG9ubHkgZm9yIHBlcmZvcm1hbmNlCisJICogbW9uaXRvcmluZworCSAqLworCWRlbHRhX21vZCA9IGRlbHRhOworCWlmIChkZWx0YV9tb2QgPCAwKQorCQlkZWx0YV9tb2QgPSAtZGVsdGFfbW9kOworCXBwc19zdGFiaWwgKz0gKGRpdl9zNjQoKChzNjQpZGVsdGFfbW9kKSA8PAorCQkJCShOVFBfU0NBTEVfU0hJRlQgLSBTSElGVF9VU0VDKSwKKwkJCQlOU0VDX1BFUl9VU0VDKSAtIHBwc19zdGFiaWwpID4+IFBQU19JTlRNSU47CisKKwkvKiBpZiBlbmFibGVkLCB0aGUgc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSBpcyB1cGRhdGVkICovCisJaWYgKCh0aW1lX3N0YXR1cyAmIFNUQV9QUFNGUkVRKSAhPSAwICYmCisJICAgICh0aW1lX3N0YXR1cyAmIFNUQV9GUkVRSE9MRCkgPT0gMCkgeworCQl0aW1lX2ZyZXEgPSBwcHNfZnJlcTsKKwkJbnRwX3VwZGF0ZV9mcmVxdWVuY3koKTsKKwl9CisKKwlyZXR1cm4gZGVsdGE7Cit9CisKKy8qIGNvcnJlY3QgUkVBTFRJTUUgY2xvY2sgcGhhc2UgZXJyb3IgYWdhaW5zdCBQUFMgc2lnbmFsICovCitzdGF0aWMgdm9pZCBoYXJkcHBzX3VwZGF0ZV9waGFzZShsb25nIGVycm9yKQoreworCWxvbmcgY29ycmVjdGlvbiA9IC1lcnJvcjsKKwlsb25nIGppdHRlcjsKKworCS8qIGFkZCB0aGUgc2FtcGxlIHRvIHRoZSBtZWRpYW4gZmlsdGVyICovCisJcHBzX3BoYXNlX2ZpbHRlcl9hZGQoY29ycmVjdGlvbik7CisJY29ycmVjdGlvbiA9IHBwc19waGFzZV9maWx0ZXJfZ2V0KCZqaXR0ZXIpOworCisJLyogTm9taW5hbCBqaXR0ZXIgaXMgZHVlIHRvIFBQUyBzaWduYWwgbm9pc2UuIElmIGl0IGV4Y2VlZHMgdGhlCisJICogdGhyZXNob2xkLCB0aGUgc2FtcGxlIGlzIGRpc2NhcmRlZDsgb3RoZXJ3aXNlLCBpZiBzbyBlbmFibGVkLAorCSAqIHRoZSB0aW1lIG9mZnNldCBpcyB1cGRhdGVkLgorCSAqLworCWlmIChqaXR0ZXIgPiAocHBzX2ppdHRlciA8PCBQUFNfUE9QQ09STikpIHsKKwkJcHJfd2FybmluZygiaGFyZHBwczogUFBTSklUVEVSOiBqaXR0ZXI9JWxkLCBsaW1pdD0lbGRcbiIsCisJCSAgICAgICBqaXR0ZXIsIChwcHNfaml0dGVyIDw8IFBQU19QT1BDT1JOKSk7CisJCXRpbWVfc3RhdHVzIHw9IFNUQV9QUFNKSVRURVI7CisJCXBwc19qaXRjbnQrKzsKKwl9IGVsc2UgaWYgKHRpbWVfc3RhdHVzICYgU1RBX1BQU1RJTUUpIHsKKwkJLyogY29ycmVjdCB0aGUgdGltZSB1c2luZyB0aGUgcGhhc2Ugb2Zmc2V0ICovCisJCXRpbWVfb2Zmc2V0ID0gZGl2X3M2NCgoKHM2NCljb3JyZWN0aW9uKSA8PCBOVFBfU0NBTEVfU0hJRlQsCisJCQkJTlRQX0lOVEVSVkFMX0ZSRVEpOworCQkvKiBjYW5jZWwgcnVubmluZyBhZGp0aW1lKCkgKi8KKwkJdGltZV9hZGp1c3QgPSAwOworCX0KKwkvKiB1cGRhdGUgaml0dGVyICovCisJcHBzX2ppdHRlciArPSAoaml0dGVyIC0gcHBzX2ppdHRlcikgPj4gUFBTX0lOVE1JTjsKK30KKworLyoKKyAqIGhhcmRwcHMoKSAtIGRpc2NpcGxpbmUgQ1BVIGNsb2NrIG9zY2lsbGF0b3IgdG8gZXh0ZXJuYWwgUFBTIHNpZ25hbAorICoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYXQgZWFjaCBQUFMgc2lnbmFsIGFycml2YWwgaW4gb3JkZXIgdG8KKyAqIGRpc2NpcGxpbmUgdGhlIENQVSBjbG9jayBvc2NpbGxhdG9yIHRvIHRoZSBQUFMgc2lnbmFsLiBJdCB0YWtlcyB0d28KKyAqIHBhcmFtZXRlcnM6IFJFQUxUSU1FIGFuZCBNT05PVE9OSUNfUkFXIGNsb2NrIHRpbWVzdGFtcHMuIFRoZSBmb3JtZXIKKyAqIGlzIHVzZWQgdG8gY29ycmVjdCBjbG9jayBwaGFzZSBlcnJvciBhbmQgdGhlIGxhdHRlciBpcyB1c2VkIHRvCisgKiBjb3JyZWN0IHRoZSBmcmVxdWVuY3kuCisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIERhdmlkIE1pbGxzJ3MgcmVmZXJlbmNlIG5hbm9rZXJuZWwKKyAqIGltcGxlbWVudGF0aW9uLiBJdCB3YXMgbW9zdGx5IHJld3JpdHRlbiBidXQga2VlcHMgdGhlIHNhbWUgaWRlYS4KKyAqLwordm9pZCBoYXJkcHBzKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcGhhc2VfdHMsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcmF3X3RzKQoreworCXN0cnVjdCBwcHNfbm9ybXRpbWUgcHRzX25vcm0sIGZyZXFfbm9ybTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHRzX25vcm0gPSBwcHNfbm9ybWFsaXplX3RzKCpwaGFzZV90cyk7CisKKwl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKworCS8qIGNsZWFyIHRoZSBlcnJvciBiaXRzLCB0aGV5IHdpbGwgYmUgc2V0IGFnYWluIGlmIG5lZWRlZCAqLworCXRpbWVfc3RhdHVzICY9IH4oU1RBX1BQU0pJVFRFUiB8IFNUQV9QUFNXQU5ERVIgfCBTVEFfUFBTRVJST1IpOworCisJLyogaW5kaWNhdGUgc2lnbmFsIHByZXNlbmNlICovCisJdGltZV9zdGF0dXMgfD0gU1RBX1BQU1NJR05BTDsKKwlwcHNfdmFsaWQgPSBQUFNfVkFMSUQ7CisKKwkvKiB3aGVuIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUsCisJICoganVzdCBzdGFydCB0aGUgZnJlcXVlbmN5IGludGVydmFsICovCisJaWYgKHVubGlrZWx5KHBwc19mYmFzZS50dl9zZWMgPT0gMCkpIHsKKwkJcHBzX2ZiYXNlID0gKnJhd190czsKKwkJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIG9rLCBub3cgd2UgaGF2ZSBhIGJhc2UgZm9yIGZyZXF1ZW5jeSBjYWxjdWxhdGlvbiAqLworCWZyZXFfbm9ybSA9IHBwc19ub3JtYWxpemVfdHModGltZXNwZWNfc3ViKCpyYXdfdHMsIHBwc19mYmFzZSkpOworCisJLyogY2hlY2sgdGhhdCB0aGUgc2lnbmFsIGlzIGluIHRoZSByYW5nZQorCSAqIFsxcyAtIE1BWEZSRVEgdXMsIDFzICsgTUFYRlJFUSB1c10sIG90aGVyd2lzZSByZWplY3QgaXQgKi8KKwlpZiAoKGZyZXFfbm9ybS5zZWMgPT0gMCkgfHwKKwkJCShmcmVxX25vcm0ubnNlYyA+IE1BWEZSRVEgKiBmcmVxX25vcm0uc2VjKSB8fAorCQkJKGZyZXFfbm9ybS5uc2VjIDwgLU1BWEZSRVEgKiBmcmVxX25vcm0uc2VjKSkgeworCQl0aW1lX3N0YXR1cyB8PSBTVEFfUFBTSklUVEVSOworCQkvKiByZXN0YXJ0IHRoZSBmcmVxdWVuY3kgY2FsaWJyYXRpb24gaW50ZXJ2YWwgKi8KKwkJcHBzX2ZiYXNlID0gKnJhd190czsKKwkJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKwkJcHJfZXJyKCJoYXJkcHBzOiBQUFNKSVRURVI6IGJhZCBwdWxzZVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBzaWduYWwgaXMgb2sgKi8KKworCS8qIGNoZWNrIGlmIHRoZSBjdXJyZW50IGZyZXF1ZW5jeSBpbnRlcnZhbCBpcyBmaW5pc2hlZCAqLworCWlmIChmcmVxX25vcm0uc2VjID49ICgxIDw8IHBwc19zaGlmdCkpIHsKKwkJcHBzX2NhbGNudCsrOworCQkvKiByZXN0YXJ0IHRoZSBmcmVxdWVuY3kgY2FsaWJyYXRpb24gaW50ZXJ2YWwgKi8KKwkJcHBzX2ZiYXNlID0gKnJhd190czsKKwkJaGFyZHBwc191cGRhdGVfZnJlcShmcmVxX25vcm0pOworCX0KKworCWhhcmRwcHNfdXBkYXRlX3BoYXNlKHB0c19ub3JtLm5zZWMpOworCisJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woaGFyZHBwcyk7CisKKyNlbmRpZgkvKiBDT05GSUdfTlRQX1BQUyAqLworCiBzdGF0aWMgaW50IF9faW5pdCBudHBfdGlja19hZGpfc2V0dXAoY2hhciAqc3RyKQogewogCW50cF90aWNrX2FkaiA9IHNpbXBsZV9zdHJ0b2woc3RyLCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IDViYjg2ZGEuLjU1MzZhYWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwpAQCAtMjg4LDYgKzI4OCw0OSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3RpbWVfZ2V0X3RzKTsKIAorI2lmZGVmIENPTkZJR19OVFBfUFBTCisKKy8qKgorICogZ2V0bnN0aW1lX3Jhd19hbmRfcmVhbCAtIGdldCBkYXkgYW5kIHJhdyBtb25vdG9uaWMgdGltZSBpbiB0aW1lc3BlYyBmb3JtYXQKKyAqIEB0c19yYXc6CXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjIHRvIGJlIHNldCB0byByYXcgbW9ub3RvbmljIHRpbWUKKyAqIEB0c19yZWFsOglwb2ludGVyIHRvIHRoZSB0aW1lc3BlYyB0byBiZSBzZXQgdG8gdGhlIHRpbWUgb2YgZGF5CisgKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyBib3RoIHRoZSB0aW1lIG9mIGRheSBhbmQgcmF3IG1vbm90b25pYyB0aW1lIGF0IHRoZQorICogc2FtZSB0aW1lIGF0b21pY2FsbHkgYW5kIHN0b3JlcyB0aGUgcmVzdWx0aW5nIHRpbWVzdGFtcHMgaW4gdGltZXNwZWMKKyAqIGZvcm1hdC4KKyAqLwordm9pZCBnZXRuc3RpbWVfcmF3X2FuZF9yZWFsKHN0cnVjdCB0aW1lc3BlYyAqdHNfcmF3LCBzdHJ1Y3QgdGltZXNwZWMgKnRzX3JlYWwpCit7CisJdW5zaWduZWQgbG9uZyBzZXE7CisJczY0IG5zZWNzX3JhdywgbnNlY3NfcmVhbDsKKworCVdBUk5fT05fT05DRSh0aW1la2VlcGluZ19zdXNwZW5kZWQpOworCisJZG8geworCQl1MzIgYXJjaF9vZmZzZXQ7CisKKwkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7CisKKwkJKnRzX3JhdyA9IHJhd190aW1lOworCQkqdHNfcmVhbCA9IHh0aW1lOworCisJCW5zZWNzX3JhdyA9IHRpbWVrZWVwaW5nX2dldF9uc19yYXcoKTsKKwkJbnNlY3NfcmVhbCA9IHRpbWVrZWVwaW5nX2dldF9ucygpOworCisJCS8qIElmIGFyY2ggcmVxdWlyZXMsIGFkZCBpbiBnZXR0aW1lb2Zmc2V0KCkgKi8KKwkJYXJjaF9vZmZzZXQgPSBhcmNoX2dldHRpbWVvZmZzZXQoKTsKKwkJbnNlY3NfcmF3ICs9IGFyY2hfb2Zmc2V0OworCQluc2Vjc19yZWFsICs9IGFyY2hfb2Zmc2V0OworCisJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CisKKwl0aW1lc3BlY19hZGRfbnModHNfcmF3LCBuc2Vjc19yYXcpOworCXRpbWVzcGVjX2FkZF9ucyh0c19yZWFsLCBuc2Vjc19yZWFsKTsKK30KK0VYUE9SVF9TWU1CT0woZ2V0bnN0aW1lX3Jhd19hbmRfcmVhbCk7CisKKyNlbmRpZiAvKiBDT05GSUdfTlRQX1BQUyAqLworCiAvKioKICAqIGRvX2dldHRpbWVvZmRheSAtIFJldHVybnMgdGhlIHRpbWUgb2YgZGF5IGluIGEgdGltZXZhbAogICogQHR2OgkJcG9pbnRlciB0byB0aGUgdGltZXZhbCB0byBiZSBzZXQKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9NYWtlZmlsZSBiL2tlcm5lbC90cmFjZS9NYWtlZmlsZQppbmRleCA1M2YzMzgxLi43NjFjNTEwIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKKysrIGIva2VybmVsL3RyYWNlL01ha2VmaWxlCkBAIC01Miw3ICs1Miw3IEBACiBlbmRpZgogb2JqLSQoQ09ORklHX0VWRU5UX1RSQUNJTkcpICs9IHRyYWNlX2V2ZW50c19maWx0ZXIubwogb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVCkgKz0gdHJhY2Vfa3Byb2JlLm8KLW9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSBwb3dlci10cmFjZXMubworb2JqLSQoQ09ORklHX1RSQUNFUE9JTlRTKSArPSBwb3dlci10cmFjZXMubwogaWZlcSAoJChDT05GSUdfVFJBQ0lORykseSkKIG9iai0kKENPTkZJR19LR0RCX0tEQikgKz0gdHJhY2Vfa2RiLm8KIGVuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCmluZGV4IGY4Y2Y5NTkuLmRjNTNlY2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCkBAIC0xMzEzLDEyICsxMzEzLDEwIEBACiAKIAlfX3RoaXNfY3B1X2luYyh1c2VyX3N0YWNrX2NvdW50KTsKIAotCi0KIAlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9VU0VSX1NUQUNLLAogCQkJCQkgIHNpemVvZigqZW50cnkpLCBmbGFncywgcGMpOwogCWlmICghZXZlbnQpCi0JCXJldHVybjsKKwkJZ290byBvdXRfZHJvcF9jb3VudDsKIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwogCiAJZW50cnktPnRnaWQJCT0gY3VycmVudC0+dGdpZDsKQEAgLTEzMzMsOCArMTMzMSw4IEBACiAJaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCiAJCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCk7CiAKKyBvdXRfZHJvcF9jb3VudDoKIAlfX3RoaXNfY3B1X2RlYyh1c2VyX3N0YWNrX2NvdW50KTsKLQogIG91dDoKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2VudHJpZXMuaCBiL2tlcm5lbC90cmFjZS90cmFjZV9lbnRyaWVzLmgKaW5kZXggZTNkZmVjYS4uNmNmMjIzNyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2VudHJpZXMuaAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZW50cmllcy5oCkBAIC01Myw3ICs1Myw3IEBACiAgKi8KIAogLyoKLSAqIEZ1bmN0aW9uIHRyYWNlIGVudHJ5IC0gZnVuY3Rpb24gYWRkcmVzcyBhbmQgcGFyZW50IGZ1bmN0aW9uIGFkZHJlczoKKyAqIEZ1bmN0aW9uIHRyYWNlIGVudHJ5IC0gZnVuY3Rpb24gYWRkcmVzcyBhbmQgcGFyZW50IGZ1bmN0aW9uIGFkZHJlc3M6CiAgKi8KIEZUUkFDRV9FTlRSWShmdW5jdGlvbiwgZnRyYWNlX2VudHJ5LAogCmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCmluZGV4IDI1OTE1ODMuLjlkYTI4OWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCisrKyBiL2tlcm5lbC91c2VyX25hbWVzcGFjZS5jCkBAIC0xMiw2ICsxMiw4IEBACiAjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyZWQuaD4KIAorc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp1c2VyX25zX2NhY2hlcCBfX3JlYWRfbW9zdGx5OworCiAvKgogICogQ3JlYXRlIGEgbmV3IHVzZXIgbmFtZXNwYWNlLCBkZXJpdmluZyB0aGUgY3JlYXRvciBmcm9tIHRoZSB1c2VyIGluIHRoZQogICogcGFzc2VkIGNyZWRlbnRpYWxzLCBhbmQgcmVwbGFjaW5nIHRoYXQgdXNlciB3aXRoIHRoZSBuZXcgcm9vdCB1c2VyIGZvciB0aGUKQEAgLTI2LDcgKzI4LDcgQEAKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnJvb3RfdXNlcjsKIAlpbnQgbjsKIAotCW5zID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzZXJfbmFtZXNwYWNlKSwgR0ZQX0tFUk5FTCk7CisJbnMgPSBrbWVtX2NhY2hlX2FsbG9jKHVzZXJfbnNfY2FjaGVwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5zKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMzgsNyArNDAsNyBAQAogCS8qIEFsbG9jIG5ldyByb290IHVzZXIuICAqLwogCXJvb3RfdXNlciA9IGFsbG9jX3VpZChucywgMCk7CiAJaWYgKCFyb290X3VzZXIpIHsKLQkJa2ZyZWUobnMpOworCQlrbWVtX2NhY2hlX2ZyZWUodXNlcl9uc19jYWNoZXAsIG5zKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC03MSw3ICs3Myw3IEBACiAJc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucyA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UsIGRlc3Ryb3llcik7CiAJZnJlZV91aWQobnMtPmNyZWF0b3IpOwotCWtmcmVlKG5zKTsKKwlrbWVtX2NhY2hlX2ZyZWUodXNlcl9uc19jYWNoZXAsIG5zKTsKIH0KIAogdm9pZCBmcmVlX3VzZXJfbnMoc3RydWN0IGtyZWYgKmtyZWYpCkBAIC0xMjYsMyArMTI4LDEwIEBACiAJLyogTm8gdXNlZnVsIHJlbGF0aW9uc2hpcCBzbyBubyBtYXBwaW5nICovCiAJcmV0dXJuIG92ZXJmbG93Z2lkOwogfQorCitzdGF0aWMgX19pbml0IGludCB1c2VyX25hbWVzcGFjZXNfaW5pdCh2b2lkKQoreworCXVzZXJfbnNfY2FjaGVwID0gS01FTV9DQUNIRSh1c2VyX25hbWVzcGFjZSwgU0xBQl9QQU5JQyk7CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdCh1c2VyX25hbWVzcGFjZXNfaW5pdCk7CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmlnCmluZGV4IDMxMTZhYTYuLjBlZTY3ZTAgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnCisrKyBiL2xpYi9LY29uZmlnCkBAIC0xMDYsNiArMTA2LDggQEAKIGNvbmZpZyBMWk9fREVDT01QUkVTUwogCXRyaXN0YXRlCiAKK3NvdXJjZSAibGliL3h6L0tjb25maWciCisKICMKICMgVGhlc2UgYWxsIHByb3ZpZGUgYSBjb21tb24gaW50ZXJmYWNlIChoZW5jZSB0aGUgYXBwYXJlbnQgZHVwbGljYXRpb24gd2l0aAogIyBaTElCX0lORkxBVEU7IERFQ09NUFJFU1NfR1pJUCBpcyBqdXN0IGEgd3JhcHBlci4pCkBAIC0xMjAsNiArMTIyLDEwIEBACiBjb25maWcgREVDT01QUkVTU19MWk1BCiAJdHJpc3RhdGUKIAorY29uZmlnIERFQ09NUFJFU1NfWFoKKwlzZWxlY3QgWFpfREVDCisJdHJpc3RhdGUKKwogY29uZmlnIERFQ09NUFJFU1NfTFpPCiAJc2VsZWN0IExaT19ERUNPTVBSRVNTCiAJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCBkN2I2ZTMwLi5jYmI3NzRmIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC0xMiw3ICsxMiw3IEBACiAJIGlkci5vIGludF9zcXJ0Lm8gZXh0YWJsZS5vIHByaW9fdHJlZS5vIFwKIAkgc2hhMS5vIGlycV9yZWdzLm8gcmVjaXByb2NhbF9kaXYubyBhcmd2X3NwbGl0Lm8gXAogCSBwcm9wb3J0aW9ucy5vIHByaW9faGVhcC5vIHJhdGVsaW1pdC5vIHNob3dfbWVtLm8gXAotCSBpc19zaW5nbGVfdGhyZWFkZWQubyBwbGlzdC5vIGRlY29tcHJlc3MubyBmbGV4X2FycmF5Lm8KKwkgaXNfc2luZ2xlX3RocmVhZGVkLm8gcGxpc3QubyBkZWNvbXByZXNzLm8KIAogbGliLSQoQ09ORklHX01NVSkgKz0gaW9yZW1hcC5vCiBsaWItJChDT05GSUdfU01QKSArPSBjcHVtYXNrLm8KQEAgLTIxLDcgKzIxLDcgQEAKIAogb2JqLXkgKz0gYmNkLm8gZGl2NjQubyBzb3J0Lm8gcGFyc2VyLm8gaGFsZm1kNC5vIGRlYnVnX2xvY2tzLm8gcmFuZG9tMzIubyBcCiAJIGJ1c3Rfc3BpbmxvY2tzLm8gaGV4ZHVtcC5vIGthc3ByaW50Zi5vIGJpdG1hcC5vIHNjYXR0ZXJsaXN0Lm8gXAotCSBzdHJpbmdfaGVscGVycy5vIGdjZC5vIGxjbS5vIGxpc3Rfc29ydC5vIHV1aWQubworCSBzdHJpbmdfaGVscGVycy5vIGdjZC5vIGxjbS5vIGxpc3Rfc29ydC5vIHV1aWQubyBmbGV4X2FycmF5Lm8KIAogaWZlcSAoJChDT05GSUdfREVCVUdfS09CSkVDVCkseSkKIENGTEFHU19rb2JqZWN0Lm8gKz0gLURERUJVRwpAQCAtNjksMTEgKzY5LDEzIEBACiBvYmotJChDT05GSUdfUkVFRF9TT0xPTU9OKSArPSByZWVkX3NvbG9tb24vCiBvYmotJChDT05GSUdfTFpPX0NPTVBSRVNTKSArPSBsem8vCiBvYmotJChDT05GSUdfTFpPX0RFQ09NUFJFU1MpICs9IGx6by8KK29iai0kKENPTkZJR19YWl9ERUMpICs9IHh6Lwogb2JqLSQoQ09ORklHX1JBSUQ2X1BRKSArPSByYWlkNi8KIAogbGliLSQoQ09ORklHX0RFQ09NUFJFU1NfR1pJUCkgKz0gZGVjb21wcmVzc19pbmZsYXRlLm8KIGxpYi0kKENPTkZJR19ERUNPTVBSRVNTX0JaSVAyKSArPSBkZWNvbXByZXNzX2J1bnppcDIubwogbGliLSQoQ09ORklHX0RFQ09NUFJFU1NfTFpNQSkgKz0gZGVjb21wcmVzc191bmx6bWEubworbGliLSQoQ09ORklHX0RFQ09NUFJFU1NfWFopICs9IGRlY29tcHJlc3NfdW54ei5vCiBsaWItJChDT05GSUdfREVDT01QUkVTU19MWk8pICs9IGRlY29tcHJlc3NfdW5sem8ubwogCiBvYmotJChDT05GSUdfVEVYVFNFQVJDSCkgKz0gdGV4dHNlYXJjaC5vCmRpZmYgLS1naXQgYS9saWIvZGVjb21wcmVzcy5jIGIvbGliL2RlY29tcHJlc3MuYwppbmRleCBhNzYwNjgxLi4zZDc2NmI3IDEwMDY0NAotLS0gYS9saWIvZGVjb21wcmVzcy5jCisrKyBiL2xpYi9kZWNvbXByZXNzLmMKQEAgLTgsNiArOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWNvbXByZXNzL2J1bnppcDIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWNvbXByZXNzL3VubHptYS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlY29tcHJlc3MvdW54ei5oPgogI2luY2x1ZGUgPGxpbnV4L2RlY29tcHJlc3MvaW5mbGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlY29tcHJlc3MvdW5sem8uaD4KIApAQCAtMjMsNiArMjQsOSBAQAogI2lmbmRlZiBDT05GSUdfREVDT01QUkVTU19MWk1BCiAjIGRlZmluZSB1bmx6bWEgTlVMTAogI2VuZGlmCisjaWZuZGVmIENPTkZJR19ERUNPTVBSRVNTX1haCisjIGRlZmluZSB1bnh6IE5VTEwKKyNlbmRpZgogI2lmbmRlZiBDT05GSUdfREVDT01QUkVTU19MWk8KICMgZGVmaW5lIHVubHpvIE5VTEwKICNlbmRpZgpAQCAtMzYsNiArNDAsNyBAQAogCXsgezAzNywgMDIzNn0sICJnemlwIiwgZ3VuemlwIH0sCiAJeyB7MHg0MiwgMHg1YX0sICJiemlwMiIsIGJ1bnppcDIgfSwKIAl7IHsweDVkLCAweDAwfSwgImx6bWEiLCB1bmx6bWEgfSwKKwl7IHsweGZkLCAweDM3fSwgInh6IiwgdW54eiB9LAogCXsgezB4ODksIDB4NGN9LCAibHpvIiwgdW5sem8gfSwKIAl7IHswLCAwfSwgTlVMTCwgTlVMTCB9CiB9OwpkaWZmIC0tZ2l0IGEvbGliL2RlY29tcHJlc3NfYnVuemlwMi5jIGIvbGliL2RlY29tcHJlc3NfYnVuemlwMi5jCmluZGV4IDgxYzhiYjEuLmE3YjgwYzEgMTAwNjQ0Ci0tLSBhL2xpYi9kZWNvbXByZXNzX2J1bnppcDIuYworKysgYi9saWIvZGVjb21wcmVzc19idW56aXAyLmMKQEAgLTQ5LDcgKzQ5LDYgQEAKICNkZWZpbmUgUFJFQk9PVAogI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9kZWNvbXByZXNzL2J1bnppcDIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjZW5kaWYgLyogU1RBVElDICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWNvbXByZXNzL21tLmg+CkBAIC02ODIsMTMgKzY4MSwxMiBAQAogCQkJaW50KCpmbHVzaCkodm9pZCosIHVuc2lnbmVkIGludCksCiAJCQl1bnNpZ25lZCBjaGFyICpvdXRidWYsCiAJCQlpbnQgKnBvcywKLQkJCXZvaWQoKmVycm9yX2ZuKShjaGFyICp4KSkKKwkJCXZvaWQoKmVycm9yKShjaGFyICp4KSkKIHsKIAlzdHJ1Y3QgYnVuemlwX2RhdGEgKmJkOwogCWludCBpID0gLTE7CiAJdW5zaWduZWQgY2hhciAqaW5idWY7CiAKLQlzZXRfZXJyb3JfZm4oZXJyb3JfZm4pOwogCWlmIChmbHVzaCkKIAkJb3V0YnVmID0gbWFsbG9jKEJaSVAyX0lPQlVGX1NJWkUpOwogCkBAIC03NTEsOCArNzQ5LDggQEAKIAkJCWludCgqZmx1c2gpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAogCQkJdW5zaWduZWQgY2hhciAqb3V0YnVmLAogCQkJaW50ICpwb3MsCi0JCQl2b2lkKCplcnJvcl9mbikoY2hhciAqeCkpCisJCQl2b2lkKCplcnJvcikoY2hhciAqeCkpCiB7Ci0JcmV0dXJuIGJ1bnppcDIoYnVmLCBsZW4gLSA0LCBmaWxsLCBmbHVzaCwgb3V0YnVmLCBwb3MsIGVycm9yX2ZuKTsKKwlyZXR1cm4gYnVuemlwMihidWYsIGxlbiAtIDQsIGZpbGwsIGZsdXNoLCBvdXRidWYsIHBvcywgZXJyb3IpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZGVjb21wcmVzc19pbmZsYXRlLmMgYi9saWIvZGVjb21wcmVzc19pbmZsYXRlLmMKaW5kZXggZmM2ODZjNy4uMTlmZjg5ZSAxMDA2NDQKLS0tIGEvbGliL2RlY29tcHJlc3NfaW5mbGF0ZS5jCisrKyBiL2xpYi9kZWNvbXByZXNzX2luZmxhdGUuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgInpsaWJfaW5mbGF0ZS9pbmZsYXRlLmgiCiAKICNpbmNsdWRlICJ6bGliX2luZmxhdGUvaW5mdXRpbC5oIgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2VuZGlmIC8qIFNUQVRJQyAqLwogCkBAIC0yNyw3ICsyNiw3IEBACiAKICNkZWZpbmUgR1pJUF9JT0JVRl9TSVpFICgxNioxMDI0KQogCi1zdGF0aWMgaW50IG5vZmlsbCh2b2lkICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgaW50IElOSVQgbm9maWxsKHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlyZXR1cm4gLTE7CiB9CkBAIC0zOCwxMyArMzcsMTIgQEAKIAkJICAgICAgIGludCgqZmx1c2gpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAogCQkgICAgICAgdW5zaWduZWQgY2hhciAqb3V0X2J1ZiwKIAkJICAgICAgIGludCAqcG9zLAotCQkgICAgICAgdm9pZCgqZXJyb3JfZm4pKGNoYXIgKngpKSB7CisJCSAgICAgICB2b2lkKCplcnJvcikoY2hhciAqeCkpIHsKIAl1OCAqemJ1ZjsKIAlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RybTsKIAlpbnQgcmM7CiAJc2l6ZV90IG91dF9sZW47CiAKLQlzZXRfZXJyb3JfZm4oZXJyb3JfZm4pOwogCXJjID0gLTE7CiAJaWYgKGZsdXNoKSB7CiAJCW91dF9sZW4gPSAweDgwMDA7IC8qIDMyIEsgKi8KQEAgLTEwMCwxMyArOTgsMjIgQEAKIAkgKiBwb3NzaWJsZSBhc2NpeiBmaWxlbmFtZSkKIAkgKi8KIAlzdHJtLT5uZXh0X2luID0gemJ1ZiArIDEwOworCXN0cm0tPmF2YWlsX2luID0gbGVuIC0gMTA7CiAJLyogc2tpcCBvdmVyIGFzY2l6IGZpbGVuYW1lICovCiAJaWYgKHpidWZbM10gJiAweDgpIHsKLQkJd2hpbGUgKHN0cm0tPm5leHRfaW5bMF0pCi0JCQlzdHJtLT5uZXh0X2luKys7Ci0JCXN0cm0tPm5leHRfaW4rKzsKKwkJZG8geworCQkJLyoKKwkJCSAqIElmIHRoZSBmaWxlbmFtZSBkb2Vzbid0IGZpdCBpbnRvIHRoZSBidWZmZXIsCisJCQkgKiB0aGUgZmlsZSBpcyB2ZXJ5IHByb2JhYmx5IGNvcnJ1cHQuIERvbid0IHRyeQorCQkJICogdG8gcmVhZCBtb3JlIGRhdGEuCisJCQkgKi8KKwkJCWlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKSB7CisJCQkJZXJyb3IoImhlYWRlciBlcnJvciIpOworCQkJCWdvdG8gZ3VuemlwXzU7CisJCQl9CisJCQktLXN0cm0tPmF2YWlsX2luOworCQl9IHdoaWxlICgqc3RybS0+bmV4dF9pbisrKTsKIAl9Ci0Jc3RybS0+YXZhaWxfaW4gPSBsZW4gLSAoc3RybS0+bmV4dF9pbiAtIHpidWYpOwogCiAJc3RybS0+bmV4dF9vdXQgPSBvdXRfYnVmOwogCXN0cm0tPmF2YWlsX291dCA9IG91dF9sZW47CmRpZmYgLS1naXQgYS9saWIvZGVjb21wcmVzc191bmx6bWEuYyBiL2xpYi9kZWNvbXByZXNzX3VubHptYS5jCmluZGV4IGNhODJmZGUuLjQ3NmM2NWEgMTAwNjQ0Ci0tLSBhL2xpYi9kZWNvbXByZXNzX3VubHptYS5jCisrKyBiL2xpYi9kZWNvbXByZXNzX3VubHptYS5jCkBAIC0zMyw3ICszMyw2IEBACiAjZGVmaW5lIFBSRUJPT1QKICNlbHNlCiAjaW5jbHVkZSA8bGludXgvZGVjb21wcmVzcy91bmx6bWEuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjZW5kaWYgLyogU1RBVElDICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWNvbXByZXNzL21tLmg+CkBAIC03NCw2ICs3Myw3IEBACiAJdWludDMyX3QgY29kZTsKIAl1aW50MzJfdCByYW5nZTsKIAl1aW50MzJfdCBib3VuZDsKKwl2b2lkICgqZXJyb3IpKGNoYXIgKik7CiB9OwogCiAKQEAgLTgyLDcgKzgyLDcgQEAKICNkZWZpbmUgUkNfTU9ERUxfVE9UQUxfQklUUyAxMQogCiAKLXN0YXRpYyBpbnQgbm9maWxsKHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyBpbnQgSU5JVCBub2ZpbGwodm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXJldHVybiAtMTsKIH0KQEAgLTkyLDcgKzkyLDcgQEAKIHsKIAlyYy0+YnVmZmVyX3NpemUgPSByYy0+ZmlsbCgoY2hhciAqKXJjLT5idWZmZXIsIExaTUFfSU9CVUZfU0laRSk7CiAJaWYgKHJjLT5idWZmZXJfc2l6ZSA8PSAwKQotCQllcnJvcigidW5leHBlY3RlZCBFT0YiKTsKKwkJcmMtPmVycm9yKCJ1bmV4cGVjdGVkIEVPRiIpOwogCXJjLT5wdHIgPSByYy0+YnVmZmVyOwogCXJjLT5idWZmZXJfZW5kID0gcmMtPmJ1ZmZlciArIHJjLT5idWZmZXJfc2l6ZTsKIH0KQEAgLTEyNywxMiArMTI3LDYgQEAKIH0KIAogCi0vKiBDYWxsZWQgb25jZS4gVE9ETzogYmJfbWF5YmVfZnJlZSgpICovCi1zdGF0aWMgaW5saW5lIHZvaWQgSU5JVCByY19mcmVlKHN0cnVjdCByYyAqcmMpCi17Ci0JZnJlZShyYy0+YnVmZmVyKTsKLX0KLQogLyogQ2FsbGVkIHR3aWNlLCBidXQgb25lIGNhbGxzaXRlIGlzIGluIGlubGluZSdkIHJjX2lzX2JpdF8wX2hlbHBlcigpICovCiBzdGF0aWMgdm9pZCBJTklUIHJjX2RvX25vcm1hbGl6ZShzdHJ1Y3QgcmMgKnJjKQogewpAQCAtMTY5LDcgKzE2Myw3IEBACiAJcmMtPnJhbmdlID0gcmMtPmJvdW5kOwogCSpwICs9ICgoMSA8PCBSQ19NT0RFTF9UT1RBTF9CSVRTKSAtICpwKSA+PiBSQ19NT1ZFX0JJVFM7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmNfdXBkYXRlX2JpdF8xKHN0cnVjdCByYyAqcmMsIHVpbnQxNl90ICpwKQorc3RhdGljIGlubGluZSB2b2lkIElOSVQgcmNfdXBkYXRlX2JpdF8xKHN0cnVjdCByYyAqcmMsIHVpbnQxNl90ICpwKQogewogCXJjLT5yYW5nZSAtPSByYy0+Ym91bmQ7CiAJcmMtPmNvZGUgLT0gcmMtPmJvdW5kOwpAQCAtMzE5LDMyICszMTMsMzggQEAKIAogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgSU5JVCB3cml0ZV9ieXRlKHN0cnVjdCB3cml0ZXIgKndyLCB1aW50OF90IGJ5dGUpCitzdGF0aWMgaW5saW5lIGludCBJTklUIHdyaXRlX2J5dGUoc3RydWN0IHdyaXRlciAqd3IsIHVpbnQ4X3QgYnl0ZSkKIHsKIAl3ci0+YnVmZmVyW3dyLT5idWZmZXJfcG9zKytdID0gd3ItPnByZXZpb3VzX2J5dGUgPSBieXRlOwogCWlmICh3ci0+Zmx1c2ggJiYgd3ItPmJ1ZmZlcl9wb3MgPT0gd3ItPmhlYWRlci0+ZGljdF9zaXplKSB7CiAJCXdyLT5idWZmZXJfcG9zID0gMDsKIAkJd3ItPmdsb2JhbF9wb3MgKz0gd3ItPmhlYWRlci0+ZGljdF9zaXplOwotCQl3ci0+Zmx1c2goKGNoYXIgKil3ci0+YnVmZmVyLCB3ci0+aGVhZGVyLT5kaWN0X3NpemUpOworCQlpZiAod3ItPmZsdXNoKChjaGFyICopd3ItPmJ1ZmZlciwgd3ItPmhlYWRlci0+ZGljdF9zaXplKQorCQkJCSE9IHdyLT5oZWFkZXItPmRpY3Rfc2l6ZSkKKwkJCXJldHVybiAtMTsKIAl9CisJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIGlubGluZSB2b2lkIElOSVQgY29weV9ieXRlKHN0cnVjdCB3cml0ZXIgKndyLCB1aW50MzJfdCBvZmZzKQorc3RhdGljIGlubGluZSBpbnQgSU5JVCBjb3B5X2J5dGUoc3RydWN0IHdyaXRlciAqd3IsIHVpbnQzMl90IG9mZnMpCiB7Ci0Jd3JpdGVfYnl0ZSh3ciwgcGVla19vbGRfYnl0ZSh3ciwgb2ZmcykpOworCXJldHVybiB3cml0ZV9ieXRlKHdyLCBwZWVrX29sZF9ieXRlKHdyLCBvZmZzKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBJTklUIGNvcHlfYnl0ZXMoc3RydWN0IHdyaXRlciAqd3IsCitzdGF0aWMgaW5saW5lIGludCBJTklUIGNvcHlfYnl0ZXMoc3RydWN0IHdyaXRlciAqd3IsCiAJCQkJCSB1aW50MzJfdCByZXAwLCBpbnQgbGVuKQogewogCWRvIHsKLQkJY29weV9ieXRlKHdyLCByZXAwKTsKKwkJaWYgKGNvcHlfYnl0ZSh3ciwgcmVwMCkpCisJCQlyZXR1cm4gLTE7CiAJCWxlbi0tOwogCX0gd2hpbGUgKGxlbiAhPSAwICYmIHdyLT5idWZmZXJfcG9zIDwgd3ItPmhlYWRlci0+ZHN0X3NpemUpOworCisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIElOSVQgcHJvY2Vzc19iaXQwKHN0cnVjdCB3cml0ZXIgKndyLCBzdHJ1Y3QgcmMgKnJjLAorc3RhdGljIGlubGluZSBpbnQgSU5JVCBwcm9jZXNzX2JpdDAoc3RydWN0IHdyaXRlciAqd3IsIHN0cnVjdCByYyAqcmMsCiAJCQkJICAgICBzdHJ1Y3QgY3N0YXRlICpjc3QsIHVpbnQxNl90ICpwLAogCQkJCSAgICAgaW50IHBvc19zdGF0ZSwgdWludDE2X3QgKnByb2IsCiAJCQkJICAgICBpbnQgbGMsIHVpbnQzMl90IGxpdGVyYWxfcG9zX21hc2spIHsKQEAgLTM3OCwxNiArMzc4LDE3IEBACiAJCXVpbnQxNl90ICpwcm9iX2xpdCA9IHByb2IgKyBtaTsKIAkJcmNfZ2V0X2JpdChyYywgcHJvYl9saXQsICZtaSk7CiAJfQotCXdyaXRlX2J5dGUod3IsIG1pKTsKIAlpZiAoY3N0LT5zdGF0ZSA8IDQpCiAJCWNzdC0+c3RhdGUgPSAwOwogCWVsc2UgaWYgKGNzdC0+c3RhdGUgPCAxMCkKIAkJY3N0LT5zdGF0ZSAtPSAzOwogCWVsc2UKIAkJY3N0LT5zdGF0ZSAtPSA2OworCisJcmV0dXJuIHdyaXRlX2J5dGUod3IsIG1pKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIElOSVQgcHJvY2Vzc19iaXQxKHN0cnVjdCB3cml0ZXIgKndyLCBzdHJ1Y3QgcmMgKnJjLAorc3RhdGljIGlubGluZSBpbnQgSU5JVCBwcm9jZXNzX2JpdDEoc3RydWN0IHdyaXRlciAqd3IsIHN0cnVjdCByYyAqcmMsCiAJCQkJCSAgICBzdHJ1Y3QgY3N0YXRlICpjc3QsIHVpbnQxNl90ICpwLAogCQkJCQkgICAgaW50IHBvc19zdGF0ZSwgdWludDE2X3QgKnByb2IpIHsKICAgaW50IG9mZnNldDsKQEAgLTQxOCw4ICs0MTksNyBAQAogCiAJCQkJY3N0LT5zdGF0ZSA9IGNzdC0+c3RhdGUgPCBMWk1BX05VTV9MSVRfU1RBVEVTID8KIAkJCQkJOSA6IDExOwotCQkJCWNvcHlfYnl0ZSh3ciwgY3N0LT5yZXAwKTsKLQkJCQlyZXR1cm47CisJCQkJcmV0dXJuIGNvcHlfYnl0ZSh3ciwgY3N0LT5yZXAwKTsKIAkJCX0gZWxzZSB7CiAJCQkJcmNfdXBkYXRlX2JpdF8xKHJjLCBwcm9iKTsKIAkJCX0KQEAgLTUyMSwxMiArNTIxLDE1IEBACiAJCX0gZWxzZQogCQkJY3N0LT5yZXAwID0gcG9zX3Nsb3Q7CiAJCWlmICgrKyhjc3QtPnJlcDApID09IDApCi0JCQlyZXR1cm47CisJCQlyZXR1cm4gMDsKKwkJaWYgKGNzdC0+cmVwMCA+IHdyLT5oZWFkZXItPmRpY3Rfc2l6ZQorCQkJCXx8IGNzdC0+cmVwMCA+IGdldF9wb3Mod3IpKQorCQkJcmV0dXJuIC0xOwogCX0KIAogCWxlbiArPSBMWk1BX01BVENIX01JTl9MRU47CiAKLQljb3B5X2J5dGVzKHdyLCBjc3QtPnJlcDAsIGxlbik7CisJcmV0dXJuIGNvcHlfYnl0ZXMod3IsIGNzdC0+cmVwMCwgbGVuKTsKIH0KIAogCkBAIC01MzYsNyArNTM5LDcgQEAKIAkJCSAgICAgIGludCgqZmx1c2gpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAogCQkJICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LAogCQkJICAgICAgaW50ICpwb3NwLAotCQkJICAgICAgdm9pZCgqZXJyb3JfZm4pKGNoYXIgKngpCisJCQkgICAgICB2b2lkKCplcnJvcikoY2hhciAqeCkKIAkpCiB7CiAJc3RydWN0IGx6bWFfaGVhZGVyIGhlYWRlcjsKQEAgLTU1Miw3ICs1NTUsNyBAQAogCXVuc2lnbmVkIGNoYXIgKmluYnVmOwogCWludCByZXQgPSAtMTsKIAotCXNldF9lcnJvcl9mbihlcnJvcl9mbik7CisJcmMuZXJyb3IgPSBlcnJvcjsKIAogCWlmIChidWYpCiAJCWluYnVmID0gYnVmOwpAQCAtNTgwLDggKzU4MywxMCBAQAogCQkoKHVuc2lnbmVkIGNoYXIgKikmaGVhZGVyKVtpXSA9ICpyYy5wdHIrKzsKIAl9CiAKLQlpZiAoaGVhZGVyLnBvcyA+PSAoOSAqIDUgKiA1KSkKKwlpZiAoaGVhZGVyLnBvcyA+PSAoOSAqIDUgKiA1KSkgewogCQllcnJvcigiYmFkIGhlYWRlciIpOworCQlnb3RvIGV4aXRfMTsKKwl9CiAKIAltaSA9IDA7CiAJbGMgPSBoZWFkZXIucG9zOwpAQCAtNjI3LDIxICs2MzIsMjkgQEAKIAkJaW50IHBvc19zdGF0ZSA9CWdldF9wb3MoJndyKSAmIHBvc19zdGF0ZV9tYXNrOwogCQl1aW50MTZfdCAqcHJvYiA9IHAgKyBMWk1BX0lTX01BVENIICsKIAkJCShjc3Quc3RhdGUgPDwgTFpNQV9OVU1fUE9TX0JJVFNfTUFYKSArIHBvc19zdGF0ZTsKLQkJaWYgKHJjX2lzX2JpdF8wKCZyYywgcHJvYikpCi0JCQlwcm9jZXNzX2JpdDAoJndyLCAmcmMsICZjc3QsIHAsIHBvc19zdGF0ZSwgcHJvYiwKLQkJCQkgICAgIGxjLCBsaXRlcmFsX3Bvc19tYXNrKTsKLQkJZWxzZSB7Ci0JCQlwcm9jZXNzX2JpdDEoJndyLCAmcmMsICZjc3QsIHAsIHBvc19zdGF0ZSwgcHJvYik7CisJCWlmIChyY19pc19iaXRfMCgmcmMsIHByb2IpKSB7CisJCQlpZiAocHJvY2Vzc19iaXQwKCZ3ciwgJnJjLCAmY3N0LCBwLCBwb3Nfc3RhdGUsIHByb2IsCisJCQkJCWxjLCBsaXRlcmFsX3Bvc19tYXNrKSkgeworCQkJCWVycm9yKCJMWk1BIGRhdGEgaXMgY29ycnVwdCIpOworCQkJCWdvdG8gZXhpdF8zOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHByb2Nlc3NfYml0MSgmd3IsICZyYywgJmNzdCwgcCwgcG9zX3N0YXRlLCBwcm9iKSkgeworCQkJCWVycm9yKCJMWk1BIGRhdGEgaXMgY29ycnVwdCIpOworCQkJCWdvdG8gZXhpdF8zOworCQkJfQogCQkJaWYgKGNzdC5yZXAwID09IDApCiAJCQkJYnJlYWs7CiAJCX0KKwkJaWYgKHJjLmJ1ZmZlcl9zaXplIDw9IDApCisJCQlnb3RvIGV4aXRfMzsKIAl9CiAKIAlpZiAocG9zcCkKIAkJKnBvc3AgPSByYy5wdHItcmMuYnVmZmVyOwotCWlmICh3ci5mbHVzaCkKLQkJd3IuZmx1c2god3IuYnVmZmVyLCB3ci5idWZmZXJfcG9zKTsKLQlyZXQgPSAwOworCWlmICghd3IuZmx1c2ggfHwgd3IuZmx1c2god3IuYnVmZmVyLCB3ci5idWZmZXJfcG9zKSA9PSB3ci5idWZmZXJfcG9zKQorCQlyZXQgPSAwOworZXhpdF8zOgogCWxhcmdlX2ZyZWUocCk7CiBleGl0XzI6CiAJaWYgKCFvdXRwdXQpCkBAIC02NTksOSArNjcyLDkgQEAKIAkJCSAgICAgIGludCgqZmx1c2gpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAogCQkJICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LAogCQkJICAgICAgaW50ICpwb3NwLAotCQkJICAgICAgdm9pZCgqZXJyb3JfZm4pKGNoYXIgKngpCisJCQkgICAgICB2b2lkKCplcnJvcikoY2hhciAqeCkKIAkpCiB7Ci0JcmV0dXJuIHVubHptYShidWYsIGluX2xlbiAtIDQsIGZpbGwsIGZsdXNoLCBvdXRwdXQsIHBvc3AsIGVycm9yX2ZuKTsKKwlyZXR1cm4gdW5sem1hKGJ1ZiwgaW5fbGVuIC0gNCwgZmlsbCwgZmx1c2gsIG91dHB1dCwgcG9zcCwgZXJyb3IpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZGVjb21wcmVzc191bmx6by5jIGIvbGliL2RlY29tcHJlc3NfdW5sem8uYwppbmRleCBiY2IzYTRiLi41YTdhMmFkIDEwMDY0NAotLS0gYS9saWIvZGVjb21wcmVzc191bmx6by5jCisrKyBiL2xpYi9kZWNvbXByZXNzX3VubHpvLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpZmRlZiBTVEFUSUMKICNpbmNsdWRlICJsem8vbHpvMXhfZGVjb21wcmVzcy5jIgogI2Vsc2UKLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVjb21wcmVzcy91bmx6by5oPgogI2VuZGlmCiAKQEAgLTQ5LDE0ICs0OCwyNSBAQAogCiAjZGVmaW5lIExaT19CTE9DS19TSVpFICAgICAgICAoMjU2KjEwMjRsKQogI2RlZmluZSBIRUFERVJfSEFTX0ZJTFRFUiAgICAgIDB4MDAwMDA4MDBMCisjZGVmaW5lIEhFQURFUl9TSVpFX01JTiAgICAgICAoOSArIDcgICAgICsgNCArIDggICAgICsgMSAgICAgICArIDQpCisjZGVmaW5lIEhFQURFUl9TSVpFX01BWCAgICAgICAoOSArIDcgKyAxICsgOCArIDggKyA0ICsgMSArIDI1NSArIDQpCiAKLVNUQVRJQyBpbmxpbmUgaW50IElOSVQgcGFyc2VfaGVhZGVyKHU4ICppbnB1dCwgdTggKnNraXApCitTVEFUSUMgaW5saW5lIGludCBJTklUIHBhcnNlX2hlYWRlcih1OCAqaW5wdXQsIGludCAqc2tpcCwgaW50IGluX2xlbikKIHsKIAlpbnQgbDsKIAl1OCAqcGFyc2UgPSBpbnB1dDsKKwl1OCAqZW5kID0gaW5wdXQgKyBpbl9sZW47CiAJdTggbGV2ZWwgPSAwOwogCXUxNiB2ZXJzaW9uOwogCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZXJlJ3MgZW5vdWdoIGlucHV0IHRvIHBvc3NpYmx5IGhhdmUgYSB2YWxpZCBoZWFkZXIuCisJICogVGhlbiBpdCBpcyBwb3NzaWJsZSB0byBwYXJzZSBzZXZlcmFsIGZpZWxkcyB1bnRpbCB0aGUgbWluaW11bQorCSAqIHNpemUgbWF5IGhhdmUgYmVlbiB1c2VkLgorCSAqLworCWlmIChpbl9sZW4gPCBIRUFERVJfU0laRV9NSU4pCisJCXJldHVybiAwOworCiAJLyogcmVhZCBtYWdpYzogOSBmaXJzdCBiaXRzICovCiAJZm9yIChsID0gMDsgbCA8IDk7IGwrKykgewogCQlpZiAoKnBhcnNlKysgIT0gbHpvcF9tYWdpY1tsXSkKQEAgLTc0LDYgKzg0LDE1IEBACiAJZWxzZQogCQlwYXJzZSArPSA0OyAvKiBmbGFncyAqLwogCisJLyoKKwkgKiBBdCBsZWFzdCBtb2RlLCBtdGltZV9sb3csIGZpbGVuYW1lIGxlbmd0aCwgYW5kIGNoZWNrc3VtIG11c3QKKwkgKiBiZSBsZWZ0IHRvIGJlIHBhcnNlZC4gSWYgYWxzbyBtdGltZV9oaWdoIGlzIHByZXNlbnQsIGl0J3MgT0sKKwkgKiBiZWNhdXNlIHRoZSBuZXh0IGlucHV0IGJ1ZmZlciBjaGVjayBpcyBhZnRlciByZWFkaW5nIHRoZQorCSAqIGZpbGVuYW1lIGxlbmd0aC4KKwkgKi8KKwlpZiAoZW5kIC0gcGFyc2UgPCA4ICsgMSArIDQpCisJCXJldHVybiAwOworCiAJLyogc2tpcCBtb2RlIGFuZCBtdGltZV9sb3cgKi8KIAlwYXJzZSArPSA4OwogCWlmICh2ZXJzaW9uID49IDB4MDk0MCkKQEAgLTgxLDYgKzEwMCw4IEBACiAKIAlsID0gKnBhcnNlKys7CiAJLyogZG9uJ3QgY2FyZSBhYm91dCB0aGUgZmlsZSBuYW1lLCBhbmQgc2tpcCBjaGVja3N1bSAqLworCWlmIChlbmQgLSBwYXJzZSA8IGwgKyA0KQorCQlyZXR1cm4gMDsKIAlwYXJzZSArPSBsICsgNDsKIAogCSpza2lwID0gcGFyc2UgLSBpbnB1dDsKQEAgLTkxLDE2ICsxMTIsMTUgQEAKIAkJCQlpbnQgKCpmaWxsKSAodm9pZCAqLCB1bnNpZ25lZCBpbnQpLAogCQkJCWludCAoKmZsdXNoKSAodm9pZCAqLCB1bnNpZ25lZCBpbnQpLAogCQkJCXU4ICpvdXRwdXQsIGludCAqcG9zcCwKLQkJCQl2b2lkICgqZXJyb3JfZm4pIChjaGFyICp4KSkKKwkJCQl2b2lkICgqZXJyb3IpIChjaGFyICp4KSkKIHsKLQl1OCBza2lwID0gMCwgciA9IDA7CisJdTggciA9IDA7CisJaW50IHNraXAgPSAwOwogCXUzMiBzcmNfbGVuLCBkc3RfbGVuOwogCXNpemVfdCB0bXA7CiAJdTggKmluX2J1ZiwgKmluX2J1Zl9zYXZlLCAqb3V0X2J1ZjsKIAlpbnQgcmV0ID0gLTE7CiAKLQlzZXRfZXJyb3JfZm4oZXJyb3JfZm4pOwotCiAJaWYgKG91dHB1dCkgewogCQlvdXRfYnVmID0gb3V0cHV0OwogCX0gZWxzZSBpZiAoIWZsdXNoKSB7CkBAIC0xMTksOCArMTM5LDggQEAKIAkJZ290byBleGl0XzE7CiAJfSBlbHNlIGlmIChpbnB1dCkgewogCQlpbl9idWYgPSBpbnB1dDsKLQl9IGVsc2UgaWYgKCFmaWxsIHx8ICFwb3NwKSB7Ci0JCWVycm9yKCJOVUxMIGlucHV0IHBvaW50ZXIgYW5kIG1pc3NpbmcgcG9zaXRpb24gcG9pbnRlciBvciBmaWxsIGZ1bmN0aW9uIik7CisJfSBlbHNlIGlmICghZmlsbCkgeworCQllcnJvcigiTlVMTCBpbnB1dCBwb2ludGVyIGFuZCBtaXNzaW5nIGZpbGwgZnVuY3Rpb24iKTsKIAkJZ290byBleGl0XzE7CiAJfSBlbHNlIHsKIAkJaW5fYnVmID0gbWFsbG9jKGx6bzF4X3dvcnN0X2NvbXByZXNzKExaT19CTE9DS19TSVpFKSk7CkBAIC0xMzQsMjIgKzE1NCw0NyBAQAogCWlmIChwb3NwKQogCQkqcG9zcCA9IDA7CiAKLQlpZiAoZmlsbCkKLQkJZmlsbChpbl9idWYsIGx6bzF4X3dvcnN0X2NvbXByZXNzKExaT19CTE9DS19TSVpFKSk7CisJaWYgKGZpbGwpIHsKKwkJLyoKKwkJICogU3RhcnQgZnJvbSBpbl9idWYgKyBIRUFERVJfU0laRV9NQVggdG8gbWFrZSBpdCBwb3NzaWJsZQorCQkgKiB0byB1c2UgbWVtY3B5KCkgdG8gY29weSB0aGUgdW51c2VkIGRhdGEgdG8gdGhlIGJlZ2lubmluZworCQkgKiBvZiB0aGUgYnVmZmVyLiBUaGlzIHdheSBtZW1tb3ZlKCkgaXNuJ3QgbmVlZGVkIHdoaWNoCisJCSAqIGlzIG1pc3NpbmcgZnJvbSBwcmUtYm9vdCBlbnZpcm9ubWVudHMgb2YgbW9zdCBhcmNocy4KKwkJICovCisJCWluX2J1ZiArPSBIRUFERVJfU0laRV9NQVg7CisJCWluX2xlbiA9IGZpbGwoaW5fYnVmLCBIRUFERVJfU0laRV9NQVgpOworCX0KIAotCWlmICghcGFyc2VfaGVhZGVyKGlucHV0LCAmc2tpcCkpIHsKKwlpZiAoIXBhcnNlX2hlYWRlcihpbl9idWYsICZza2lwLCBpbl9sZW4pKSB7CiAJCWVycm9yKCJpbnZhbGlkIGhlYWRlciIpOwogCQlnb3RvIGV4aXRfMjsKIAl9CiAJaW5fYnVmICs9IHNraXA7CisJaW5fbGVuIC09IHNraXA7CisKKwlpZiAoZmlsbCkgeworCQkvKiBNb3ZlIHRoZSB1bnVzZWQgZGF0YSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIuICovCisJCW1lbWNweShpbl9idWZfc2F2ZSwgaW5fYnVmLCBpbl9sZW4pOworCQlpbl9idWYgPSBpbl9idWZfc2F2ZTsKKwl9CiAKIAlpZiAocG9zcCkKIAkJKnBvc3AgPSBza2lwOwogCiAJZm9yICg7OykgewogCQkvKiByZWFkIHVuY29tcHJlc3NlZCBibG9jayBzaXplICovCisJCWlmIChmaWxsICYmIGluX2xlbiA8IDQpIHsKKwkJCXNraXAgPSBmaWxsKGluX2J1ZiArIGluX2xlbiwgNCAtIGluX2xlbik7CisJCQlpZiAoc2tpcCA+IDApCisJCQkJaW5fbGVuICs9IHNraXA7CisJCX0KKwkJaWYgKGluX2xlbiA8IDQpIHsKKwkJCWVycm9yKCJmaWxlIGNvcnJ1cHRlZCIpOworCQkJZ290byBleGl0XzI7CisJCX0KIAkJZHN0X2xlbiA9IGdldF91bmFsaWduZWRfYmUzMihpbl9idWYpOwogCQlpbl9idWYgKz0gNDsKKwkJaW5fbGVuIC09IDQ7CiAKIAkJLyogZXhpdCBpZiBsYXN0IGJsb2NrICovCiAJCWlmIChkc3RfbGVuID09IDApIHsKQEAgLTE2NCw4ICsyMDksMTggQEAKIAkJfQogCiAJCS8qIHJlYWQgY29tcHJlc3NlZCBibG9jayBzaXplLCBhbmQgc2tpcCBibG9jayBjaGVja3N1bSBpbmZvICovCisJCWlmIChmaWxsICYmIGluX2xlbiA8IDgpIHsKKwkJCXNraXAgPSBmaWxsKGluX2J1ZiArIGluX2xlbiwgOCAtIGluX2xlbik7CisJCQlpZiAoc2tpcCA+IDApCisJCQkJaW5fbGVuICs9IHNraXA7CisJCX0KKwkJaWYgKGluX2xlbiA8IDgpIHsKKwkJCWVycm9yKCJmaWxlIGNvcnJ1cHRlZCIpOworCQkJZ290byBleGl0XzI7CisJCX0KIAkJc3JjX2xlbiA9IGdldF91bmFsaWduZWRfYmUzMihpbl9idWYpOwogCQlpbl9idWYgKz0gODsKKwkJaW5fbGVuIC09IDg7CiAKIAkJaWYgKHNyY19sZW4gPD0gMCB8fCBzcmNfbGVuID4gZHN0X2xlbikgewogCQkJZXJyb3IoImZpbGUgY29ycnVwdGVkIik7CkBAIC0xNzMsNiArMjI4LDE1IEBACiAJCX0KIAogCQkvKiBkZWNvbXByZXNzICovCisJCWlmIChmaWxsICYmIGluX2xlbiA8IHNyY19sZW4pIHsKKwkJCXNraXAgPSBmaWxsKGluX2J1ZiArIGluX2xlbiwgc3JjX2xlbiAtIGluX2xlbik7CisJCQlpZiAoc2tpcCA+IDApCisJCQkJaW5fbGVuICs9IHNraXA7CisJCX0KKwkJaWYgKGluX2xlbiA8IHNyY19sZW4pIHsKKwkJCWVycm9yKCJmaWxlIGNvcnJ1cHRlZCIpOworCQkJZ290byBleGl0XzI7CisJCX0KIAkJdG1wID0gZHN0X2xlbjsKIAogCQkvKiBXaGVuIHRoZSBpbnB1dCBkYXRhIGlzIG5vdCBjb21wcmVzc2VkIGF0IGFsbCwKQEAgLTE5MCwxNyArMjU0LDI2IEBACiAJCQl9CiAJCX0KIAotCQlpZiAoZmx1c2gpCi0JCQlmbHVzaChvdXRfYnVmLCBkc3RfbGVuKTsKKwkJaWYgKGZsdXNoICYmIGZsdXNoKG91dF9idWYsIGRzdF9sZW4pICE9IGRzdF9sZW4pCisJCQlnb3RvIGV4aXRfMjsKIAkJaWYgKG91dHB1dCkKIAkJCW91dF9idWYgKz0gZHN0X2xlbjsKIAkJaWYgKHBvc3ApCiAJCQkqcG9zcCArPSBzcmNfbGVuICsgMTI7CisKKwkJaW5fYnVmICs9IHNyY19sZW47CisJCWluX2xlbiAtPSBzcmNfbGVuOwogCQlpZiAoZmlsbCkgeworCQkJLyoKKwkJCSAqIElmIHRoZXJlIGhhcHBlbnMgdG8gc3RpbGwgYmUgdW51c2VkIGRhdGEgbGVmdCBpbgorCQkJICogaW5fYnVmLCBtb3ZlIGl0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4KKwkJCSAqIFVzZSBhIGxvb3AgdG8gYXZvaWQgbWVtbW92ZSgpIGRlcGVuZGVuY3kuCisJCQkgKi8KKwkJCWlmIChpbl9sZW4gPiAwKQorCQkJCWZvciAoc2tpcCA9IDA7IHNraXAgPCBpbl9sZW47ICsrc2tpcCkKKwkJCQkJaW5fYnVmX3NhdmVbc2tpcF0gPSBpbl9idWZbc2tpcF07CiAJCQlpbl9idWYgPSBpbl9idWZfc2F2ZTsKLQkJCWZpbGwoaW5fYnVmLCBsem8xeF93b3JzdF9jb21wcmVzcyhMWk9fQkxPQ0tfU0laRSkpOwotCQl9IGVsc2UKLQkJCWluX2J1ZiArPSBzcmNfbGVuOworCQl9CiAJfQogCiAJcmV0ID0gMDsKZGlmZiAtLWdpdCBhL2xpYi9kZWNvbXByZXNzX3VueHouYyBiL2xpYi9kZWNvbXByZXNzX3VueHouYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWNkMjNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2RlY29tcHJlc3NfdW54ei5jCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICogV3JhcHBlciBmb3IgZGVjb21wcmVzc2luZyBYWi1jb21wcmVzc2VkIGtlcm5lbCwgaW5pdHJhbWZzLCBhbmQgaW5pdHJkCisgKgorICogQXV0aG9yOiBMYXNzZSBDb2xsaW4gPGxhc3NlLmNvbGxpbkB0dWthYW5pLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gcHV0IGludG8gdGhlIHB1YmxpYyBkb21haW4uCisgKiBZb3UgY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhpcyBmaWxlLgorICovCisKKy8qCisgKiBJbXBvcnRhbnQgbm90ZXMgYWJvdXQgaW4tcGxhY2UgZGVjb21wcmVzc2lvbgorICoKKyAqIEF0IGxlYXN0IG9uIHg4NiwgdGhlIGtlcm5lbCBpcyBkZWNvbXByZXNzZWQgaW4gcGxhY2U6IHRoZSBjb21wcmVzc2VkIGRhdGEKKyAqIGlzIHBsYWNlZCB0byB0aGUgZW5kIG9mIHRoZSBvdXRwdXQgYnVmZmVyLCBhbmQgdGhlIGRlY29tcHJlc3NvciBvdmVyd3JpdGVzCisgKiBtb3N0IG9mIHRoZSBjb21wcmVzc2VkIGRhdGEuIFRoZXJlIG11c3QgYmUgZW5vdWdoIHNhZmV0eSBtYXJnaW4gdG8KKyAqIGd1YXJhbnRlZSB0aGF0IHRoZSB3cml0ZSBwb3NpdGlvbiBpcyBhbHdheXMgYmVoaW5kIHRoZSByZWFkIHBvc2l0aW9uLgorICoKKyAqIFRoZSBzYWZldHkgbWFyZ2luIGZvciBYWiB3aXRoIExaTUEyIG9yIEJDSitMWk1BMiBpcyBjYWxjdWxhdGVkIGJlbG93LgorICogTm90ZSB0aGF0IHRoZSBtYXJnaW4gd2l0aCBYWiBpcyBiaWdnZXIgdGhhbiB3aXRoIERlZmxhdGUgKGd6aXApIQorICoKKyAqIFRoZSB3b3JzdCBjYXNlIGZvciBpbi1wbGFjZSBkZWNvbXByZXNzaW9uIGlzIHRoYXQgdGhlIGJlZ2lubmluZyBvZgorICogdGhlIGZpbGUgaXMgY29tcHJlc3NlZCBleHRyZW1lbHkgd2VsbCwgYW5kIHRoZSByZXN0IG9mIHRoZSBmaWxlIGlzCisgKiB1bmNvbXByZXNzaWJsZS4gVGh1cywgd2UgbXVzdCBsb29rIGZvciB3b3JzdC1jYXNlIGV4cGFuc2lvbiB3aGVuIHRoZQorICogY29tcHJlc3NvciBpcyBlbmNvZGluZyB1bmNvbXByZXNzaWJsZSBkYXRhLgorICoKKyAqIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIC54eiBmaWxlIGluIGNhc2Ugb2YgYSBjb21wcmVzZWQga2VybmVsIGlzIGFzIGZvbGxvd3MuCisgKiBTaXplcyAoYXMgYnl0ZXMpIG9mIHRoZSBmaWVsZHMgYXJlIGluIHBhcmVudGhlc2lzLgorICoKKyAqICAgIFN0cmVhbSBIZWFkZXIgKDEyKQorICogICAgQmxvY2sgSGVhZGVyOgorICogICAgICBCbG9jayBIZWFkZXIgKDgtMTIpCisgKiAgICAgIENvbXByZXNzZWQgRGF0YSAoTikKKyAqICAgICAgQmxvY2sgUGFkZGluZyAoMC0zKQorICogICAgICBDUkMzMiAoNCkKKyAqICAgIEluZGV4ICg4LTIwKQorICogICAgU3RyZWFtIEZvb3RlciAoMTIpCisgKgorICogTm9ybWFsbHkgdGhlcmUgaXMgZXhhY3RseSBvbmUgQmxvY2ssIGJ1dCBsZXQncyBhc3N1bWUgdGhhdCB0aGVyZSBhcmUKKyAqIDItNCBCbG9ja3MganVzdCBpbiBjYXNlLiBCZWNhdXNlIFN0cmVhbSBIZWFkZXIgYW5kIGFsc28gQmxvY2sgSGVhZGVyCisgKiBvZiB0aGUgZmlyc3QgQmxvY2sgZG9uJ3QgbWFrZSB0aGUgZGVjb21wcmVzc29yIHByb2R1Y2UgYW55IHVuY29tcHJlc3NlZAorICogZGF0YSwgd2UgY2FuIGlnbm9yZSB0aGVtIGZyb20gb3VyIGNhbGN1bGF0aW9ucy4gQmxvY2sgSGVhZGVycyBvZiBwb3NzaWJsZQorICogYWRkaXRpb25hbCBCbG9ja3MgaGF2ZSB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQgc3RpbGwuIFdpdGggdGhlc2UKKyAqIGFzc3VtcHRpb25zLCBpdCBpcyBzYWZlIHRvIGFzc3VtZSB0aGF0IHRoZSB0b3RhbCBoZWFkZXIgb3ZlcmhlYWQgaXMKKyAqIGxlc3MgdGhhbiAxMjggYnl0ZXMuCisgKgorICogQ29tcHJlc3NlZCBEYXRhIGNvbnRhaW5zIExaTUEyIG9yIEJDSitMWk1BMiBlbmNvZGVkIGRhdGEuIFNpbmNlIEJDSgorICogZG9lc24ndCBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGRhdGEsIGl0IGlzIGVub3VnaCB0byBjYWxjdWxhdGUgdGhlCisgKiBzYWZldHkgbWFyZ2luIGZvciBMWk1BMi4KKyAqCisgKiBMWk1BMiBzdG9yZXMgdGhlIGRhdGEgaW4gY2h1bmtzLiBFYWNoIGNodW5rIGhhcyBhIGhlYWRlciB3aG9zZSBzaXplIGlzCisgKiBhIG1heGltdW0gb2YgNiBieXRlcywgYnV0IHRvIGdldCByb3VuZCAyXm4gbnVtYmVycywgbGV0J3MgYXNzdW1lIHRoYXQKKyAqIHRoZSBtYXhpbXVtIGNodW5rIGhlYWRlciBzaXplIGlzIDggYnl0ZXMuIEFmdGVyIHRoZSBjaHVuayBoZWFkZXIsIHRoZXJlCisgKiBtYXkgYmUgdXAgdG8gNjQgS2lCIG9mIGFjdHVhbCBwYXlsb2FkIGluIHRoZSBjaHVuay4gT2Z0ZW4gdGhlIHBheWxvYWQgaXMKKyAqIHF1aXRlIGEgYml0IHNtYWxsZXIgdGhvdWdoOyB0byBiZSBzYWZlLCBsZXQncyBhc3N1bWUgdGhhdCBhbiBhdmVyYWdlCisgKiBjaHVuayBoYXMgb25seSAzMiBLaUIgb2YgcGF5bG9hZC4KKyAqCisgKiBUaGUgbWF4aW11bSB1bmNvbXByZXNzZWQgc2l6ZSBvZiB0aGUgcGF5bG9hZCBpcyAyIE1pQi4gVGhlIG1pbmltdW0KKyAqIHVuY29tcHJlc3NlZCBzaXplIG9mIHRoZSBwYXlsb2FkIGlzIGluIHByYWN0aWNlIG5ldmVyIGxlc3MgdGhhbiB0aGUKKyAqIHBheWxvYWQgc2l6ZSBpdHNlbGYuIFRoZSBMWk1BMiBmb3JtYXQgd291bGQgYWxsb3cgdW5jb21wcmVzc2VkIHNpemUKKyAqIHRvIGJlIGxlc3MgdGhhbiB0aGUgcGF5bG9hZCBzaXplLCBidXQgbm8gc2FuZSBjb21wcmVzc29yIGNyZWF0ZXMgc3VjaAorICogZmlsZXMuIExaTUEyIHN1cHBvcnRzIHN0b3JpbmcgdW5jb21wcmVzc2libGUgZGF0YSBpbiB1bmNvbXByZXNzZWQgZm9ybSwKKyAqIHNvIHRoZXJlJ3MgbmV2ZXIgYSBuZWVkIHRvIGNyZWF0ZSBwYXlsb2FkcyB3aG9zZSB1bmNvbXByZXNzZWQgc2l6ZSBpcworICogc21hbGxlciB0aGFuIHRoZSBjb21wcmVzc2VkIHNpemUuCisgKgorICogVGhlIGFzc3VtcHRpb24sIHRoYXQgdGhlIHVuY29tcHJlc3NlZCBzaXplIG9mIHRoZSBwYXlsb2FkIGlzIG5ldmVyCisgKiBzbWFsbGVyIHRoYW4gdGhlIHBheWxvYWQgaXRzZWxmLCBpcyB2YWxpZCBvbmx5IHdoZW4gdGFsa2luZyBhYm91dAorICogdGhlIHBheWxvYWQgYXMgYSB3aG9sZS4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgcGF5bG9hZCBoYXMgcGFydHMgd2hlcmUKKyAqIHRoZSBkZWNvbXByZXNzb3IgY29uc3VtZXMgbW9yZSBpbnB1dCB0aGFuIGl0IHByb2R1Y2VzIG91dHB1dC4gQ2FsY3VsYXRpbmcKKyAqIHRoZSB3b3JzdCBjYXNlIGZvciB0aGlzIHdvdWxkIGJlIHRyaWNreS4gSW5zdGVhZCBvZiB0cnlpbmcgdG8gZG8gdGhhdCwKKyAqIGxldCdzIHNpbXBseSBtYWtlIHN1cmUgdGhhdCB0aGUgZGVjb21wcmVzc29yIG5ldmVyIG92ZXJ3cml0ZXMgYW55IGJ5dGVzCisgKiBvZiB0aGUgcGF5bG9hZCB3aGljaCBpdCBpcyBjdXJyZW50bHkgcmVhZGluZy4KKyAqCisgKiBOb3cgd2UgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gY2FsY3VsYXRlIHRoZSBzYWZldHkgbWFyZ2luLiBXZSBuZWVkCisgKiAgIC0gMTI4IGJ5dGVzIGZvciB0aGUgLnh6IGZpbGUgZm9ybWF0IGhlYWRlcnM7CisgKiAgIC0gOCBieXRlcyBwZXIgZXZlcnkgMzIgS2lCIG9mIHVuY29tcHJlc3NlZCBzaXplIChvbmUgTFpNQTIgY2h1bmsgaGVhZGVyCisgKiAgICAgcGVyIGNodW5rLCBlYWNoIGNodW5rIGhhdmluZyBhdmVyYWdlIHBheWxvYWQgc2l6ZSBvZiAzMiBLaUIpOyBhbmQKKyAqICAgLSA2NCBLaUIgKGJpZ2dlc3QgcG9zc2libGUgTFpNQTIgY2h1bmsgcGF5bG9hZCBzaXplKSB0byBtYWtlIHN1cmUgdGhhdAorICogICAgIHRoZSBkZWNvbXByZXNzb3IgbmV2ZXIgb3ZlcndyaXRlcyBhbnl0aGluZyBmcm9tIHRoZSBMWk1BMiBjaHVuaworICogICAgIHBheWxvYWQgaXQgaXMgY3VycmVudGx5IHJlYWRpbmcuCisgKgorICogV2UgZ2V0IHRoZSBmb2xsb3dpbmcgZm9ybXVsYToKKyAqCisgKiAgICBzYWZldHlfbWFyZ2luID0gMTI4ICsgdW5jb21wcmVzc2VkX3NpemUgKiA4IC8gMzI3NjggKyA2NTUzNgorICogICAgICAgICAgICAgICAgICA9IDEyOCArICh1bmNvbXByZXNzZWRfc2l6ZSA+PiAxMikgKyA2NTUzNgorICoKKyAqIEZvciBjb21wYXJpc2lvbiwgYWNjb3JkaW5nIHRvIGFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMsIHRoZQorICogZXF1aXZhbGVudCBmb3JtdWxhIGZvciBEZWZsYXRlIGlzIHRoaXM6CisgKgorICogICAgc2FmZXR5X21hcmdpbiA9IDE4ICsgKHVuY29tcHJlc3NlZF9zaXplID4+IDEyKSArIDMyNzY4CisgKgorICogVGh1cywgd2hlbiB1cGRhdGluZyBEZWZsYXRlLW9ubHkgaW4tcGxhY2Uga2VybmVsIGRlY29tcHJlc3NvciB0bworICogc3VwcG9ydCBYWiwgdGhlIGZpeGVkIG92ZXJoZWFkIGhhcyB0byBiZSBpbmNyZWFzZWQgZnJvbSAxOCszMjc2OCBieXRlcworICogdG8gMTI4KzY1NTM2IGJ5dGVzLgorICovCisKKy8qCisgKiBTVEFUSUMgaXMgZGVmaW5lZCB0byAic3RhdGljIiBpZiB3ZSBhcmUgYmVpbmcgYnVpbHQgZm9yIGtlcm5lbAorICogZGVjb21wcmVzc2lvbiAocHJlLWJvb3QgY29kZSkuIDxsaW51eC9kZWNvbXByZXNzL21tLmg+IHdpbGwgZGVmaW5lCisgKiBTVEFUSUMgdG8gZW1wdHkgaWYgaXQgd2Fzbid0IGFscmVhZHkgZGVmaW5lZC4gU2luY2Ugd2Ugd2lsbCBuZWVkIHRvCisgKiBrbm93IGxhdGVyIGlmIHdlIGFyZSBiZWluZyB1c2VkIGZvciBrZXJuZWwgZGVjb21wcmVzc2lvbiwgd2UgZGVmaW5lCisgKiBYWl9QUkVCT09UIGhlcmUuCisgKi8KKyNpZmRlZiBTVEFUSUMKKyMJZGVmaW5lIFhaX1BSRUJPT1QKKyNlbmRpZgorI2lmZGVmIF9fS0VSTkVMX18KKyMJaW5jbHVkZSA8bGludXgvZGVjb21wcmVzcy9tbS5oPgorI2VuZGlmCisjZGVmaW5lIFhaX0VYVEVSTiBTVEFUSUMKKworI2lmbmRlZiBYWl9QUkVCT09UCisjCWluY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyMJaW5jbHVkZSA8bGludXgveHouaD4KKyNlbHNlCisvKgorICogVXNlIHRoZSBpbnRlcm5hbCBDUkMzMiBjb2RlIGluc3RlYWQgb2Yga2VybmVsJ3MgQ1JDMzIgbW9kdWxlLCB3aGljaAorICogaXMgbm90IGF2YWlsYWJsZSBpbiBlYXJseSBwaGFzZSBvZiBib290aW5nLgorICovCisjZGVmaW5lIFhaX0lOVEVSTkFMX0NSQzMyIDEKKworLyoKKyAqIEZvciBib290IHRpbWUgdXNlLCB3ZSBlbmFibGUgb25seSB0aGUgQkNKIGZpbHRlciBvZiB0aGUgY3VycmVudAorICogYXJjaGl0ZWN0dXJlIG9yIG5vbmUgaWYgbm8gQkNKIGZpbHRlciBpcyBhdmFpbGFibGUgZm9yIHRoZSBhcmNoaXRlY3R1cmUuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2CisjCWRlZmluZSBYWl9ERUNfWDg2CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFBDCisjCWRlZmluZSBYWl9ERUNfUE9XRVJQQworI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSTQorIwlkZWZpbmUgWFpfREVDX0FSTQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0lBNjQKKyMJZGVmaW5lIFhaX0RFQ19JQTY0CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1BBUkMKKyMJZGVmaW5lIFhaX0RFQ19TUEFSQworI2VuZGlmCisKKy8qCisgKiBUaGlzIHdpbGwgZ2V0IHRoZSBiYXNpYyBoZWFkZXJzIHNvIHRoYXQgbWVtZXEoKSBhbmQgb3RoZXJzCisgKiBjYW4gYmUgZGVmaW5lZC4KKyAqLworI2luY2x1ZGUgInh6L3h6X3ByaXZhdGUuaCIKKworLyoKKyAqIFJlcGxhY2UgdGhlIG5vcm1hbCBhbGxvY2F0aW9uIGZ1bmN0aW9ucyB3aXRoIHRoZSB2ZXJzaW9ucyBmcm9tCisgKiA8bGludXgvZGVjb21wcmVzcy9tbS5oPi4gdmZyZWUoKSBuZWVkcyB0byBzdXBwb3J0IHZmcmVlKE5VTEwpCisgKiB3aGVuIFhaX0RZTkFMTE9DIGlzIHVzZWQsIGJ1dCB0aGUgcHJlLWJvb3QgZnJlZSgpIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKyAqIFdvcmthcm91bmQgaXQgaGVyZSBiZWNhdXNlIHRoZSBvdGhlciBkZWNvbXByZXNzb3JzIGRvbid0IG5lZWQgaXQuCisgKi8KKyN1bmRlZiBrbWFsbG9jCisjdW5kZWYga2ZyZWUKKyN1bmRlZiB2bWFsbG9jCisjdW5kZWYgdmZyZWUKKyNkZWZpbmUga21hbGxvYyhzaXplLCBmbGFncykgbWFsbG9jKHNpemUpCisjZGVmaW5lIGtmcmVlKHB0cikgZnJlZShwdHIpCisjZGVmaW5lIHZtYWxsb2Moc2l6ZSkgbWFsbG9jKHNpemUpCisjZGVmaW5lIHZmcmVlKHB0cikgZG8geyBpZiAocHRyICE9IE5VTEwpIGZyZWUocHRyKTsgfSB3aGlsZSAoMCkKKworLyoKKyAqIEZJWE1FOiBOb3QgYWxsIGJhc2ljIG1lbW9yeSBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIGluIGFyY2hpdGVjdHVyZS1zcGVjaWZpYworICogZmlsZXMgKHlldCkuIFdlIGRlZmluZSBvdXIgb3duIHZlcnNpb25zIGhlcmUgZm9yIG5vdywgYnV0IHRoaXMgc2hvdWxkIGJlCisgKiBvbmx5IGEgdGVtcG9yYXJ5IHNvbHV0aW9uLgorICoKKyAqIG1lbWVxIGFuZCBtZW16ZXJvIGFyZSBub3QgdXNlZCBtdWNoIGFuZCBhbnkgcmVtb3RlbHkgc2FuZSBpbXBsZW1lbnRhdGlvbgorICogaXMgZmFzdCBlbm91Z2guIG1lbWNweS9tZW1tb3ZlIHNwZWVkIG1hdHRlcnMgaW4gbXVsdGktY2FsbCBtb2RlLCBidXQKKyAqIHRoZSBrZXJuZWwgaW1hZ2UgaXMgZGVjb21wcmVzc2VkIGluIHNpbmdsZS1jYWxsIG1vZGUsIGluIHdoaWNoIG9ubHkKKyAqIG1lbWNweSBzcGVlZCBjYW4gbWF0dGVyIGFuZCBvbmx5IGlmIHRoZXJlIGlzIGEgbG90IG9mIHVuY29tcHJlc3NpYmxlIGRhdGEKKyAqIChMWk1BMiBzdG9yZXMgdW5jb21wcmVzc2libGUgY2h1bmtzIGluIHVuY29tcHJlc3NlZCBmb3JtKS4gVGh1cywgdGhlCisgKiBmdW5jdGlvbnMgYmVsb3cgc2hvdWxkIGp1c3QgYmUga2VwdCBzbWFsbDsgaXQncyBwcm9iYWJseSBub3Qgd29ydGgKKyAqIG9wdGltaXppbmcgZm9yIHNwZWVkLgorICovCisKKyNpZm5kZWYgbWVtZXEKK3N0YXRpYyBib29sIG1lbWVxKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHNpemVfdCBzaXplKQoreworCWNvbnN0IHVpbnQ4X3QgKnggPSBhOworCWNvbnN0IHVpbnQ4X3QgKnkgPSBiOworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkKKwkJaWYgKHhbaV0gIT0geVtpXSkKKwkJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorI2VuZGlmCisKKyNpZm5kZWYgbWVtemVybworc3RhdGljIHZvaWQgbWVtemVybyh2b2lkICpidWYsIHNpemVfdCBzaXplKQoreworCXVpbnQ4X3QgKmIgPSBidWY7CisJdWludDhfdCAqZSA9IGIgKyBzaXplOworCisJd2hpbGUgKGIgIT0gZSkKKwkJKmIrKyA9ICdcMCc7Cit9CisjZW5kaWYKKworI2lmbmRlZiBtZW1tb3ZlCisvKiBOb3Qgc3RhdGljIHRvIGF2b2lkIGEgY29uZmxpY3Qgd2l0aCB0aGUgcHJvdG90eXBlIGluIHRoZSBMaW51eCBoZWFkZXJzLiAqLwordm9pZCAqbWVtbW92ZSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKQoreworCXVpbnQ4X3QgKmQgPSBkZXN0OworCWNvbnN0IHVpbnQ4X3QgKnMgPSBzcmM7CisJc2l6ZV90IGk7CisKKwlpZiAoZCA8IHMpIHsKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkKKwkJCWRbaV0gPSBzW2ldOworCX0gZWxzZSBpZiAoZCA+IHMpIHsKKwkJaSA9IHNpemU7CisJCXdoaWxlIChpLS0gPiAwKQorCQkJZFtpXSA9IHNbaV07CisJfQorCisJcmV0dXJuIGRlc3Q7Cit9CisjZW5kaWYKKworLyoKKyAqIFNpbmNlIHdlIG5lZWQgbWVtbW92ZSBhbnl3YXksIHdvdWxkIHVzZSBpdCBhcyBtZW1jcHkgdG9vLgorICogQ29tbWVudGVkIG91dCBmb3Igbm93IHRvIGF2b2lkIGJyZWFraW5nIHRoaW5ncy4KKyAqLworLyoKKyNpZm5kZWYgbWVtY3B5CisjCWRlZmluZSBtZW1jcHkgbWVtbW92ZQorI2VuZGlmCisqLworCisjaW5jbHVkZSAieHoveHpfY3JjMzIuYyIKKyNpbmNsdWRlICJ4ei94el9kZWNfc3RyZWFtLmMiCisjaW5jbHVkZSAieHoveHpfZGVjX2x6bWEyLmMiCisjaW5jbHVkZSAieHoveHpfZGVjX2Jjai5jIgorCisjZW5kaWYgLyogWFpfUFJFQk9PVCAqLworCisvKiBTaXplIG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgaW4gbXVsdGktY2FsbCBtb2RlICovCisjZGVmaW5lIFhaX0lPQlVGX1NJWkUgNDA5NgorCisvKgorICogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBBUEkgZGVmaW5lZCBpbiA8bGludXgvZGVjb21wcmVzcy9nZW5lcmljLmg+LgorICoKKyAqIFRoaXMgd3JhcHBlciB3aWxsIGF1dG9tYXRpY2FsbHkgY2hvb3NlIHNpbmdsZS1jYWxsIG9yIG11bHRpLWNhbGwgbW9kZQorICogb2YgdGhlIG5hdGl2ZSBYWiBkZWNvZGVyIEFQSS4gVGhlIHNpbmdsZS1jYWxsIG1vZGUgY2FuIGJlIHVzZWQgb25seSB3aGVuCisgKiBib3RoIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBhcmUgYXZhaWxhYmxlIGFzIGEgc2luZ2xlIGNodW5rLCBpLmUuIHdoZW4KKyAqIGZpbGwoKSBhbmQgZmx1c2goKSB3b24ndCBiZSB1c2VkLgorICovCitTVEFUSUMgaW50IElOSVQgdW54eih1bnNpZ25lZCBjaGFyICppbiwgaW50IGluX3NpemUsCisJCSAgICAgaW50ICgqZmlsbCkodm9pZCAqZGVzdCwgdW5zaWduZWQgaW50IHNpemUpLAorCQkgICAgIGludCAoKmZsdXNoKSh2b2lkICpzcmMsIHVuc2lnbmVkIGludCBzaXplKSwKKwkJICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIGludCAqaW5fdXNlZCwKKwkJICAgICB2b2lkICgqZXJyb3IpKGNoYXIgKngpKQoreworCXN0cnVjdCB4el9idWYgYjsKKwlzdHJ1Y3QgeHpfZGVjICpzOworCWVudW0geHpfcmV0IHJldDsKKwlib29sIG11c3RfZnJlZV9pbiA9IGZhbHNlOworCisjaWYgWFpfSU5URVJOQUxfQ1JDMzIKKwl4el9jcmMzMl9pbml0KCk7CisjZW5kaWYKKworCWlmIChpbl91c2VkICE9IE5VTEwpCisJCSppbl91c2VkID0gMDsKKworCWlmIChmaWxsID09IE5VTEwgJiYgZmx1c2ggPT0gTlVMTCkKKwkJcyA9IHh6X2RlY19pbml0KFhaX1NJTkdMRSwgMCk7CisJZWxzZQorCQlzID0geHpfZGVjX2luaXQoWFpfRFlOQUxMT0MsICh1aW50MzJfdCktMSk7CisKKwlpZiAocyA9PSBOVUxMKQorCQlnb3RvIGVycm9yX2FsbG9jX3N0YXRlOworCisJaWYgKGZsdXNoID09IE5VTEwpIHsKKwkJYi5vdXQgPSBvdXQ7CisJCWIub3V0X3NpemUgPSAoc2l6ZV90KS0xOworCX0gZWxzZSB7CisJCWIub3V0X3NpemUgPSBYWl9JT0JVRl9TSVpFOworCQliLm91dCA9IG1hbGxvYyhYWl9JT0JVRl9TSVpFKTsKKwkJaWYgKGIub3V0ID09IE5VTEwpCisJCQlnb3RvIGVycm9yX2FsbG9jX291dDsKKwl9CisKKwlpZiAoaW4gPT0gTlVMTCkgeworCQltdXN0X2ZyZWVfaW4gPSB0cnVlOworCQlpbiA9IG1hbGxvYyhYWl9JT0JVRl9TSVpFKTsKKwkJaWYgKGluID09IE5VTEwpCisJCQlnb3RvIGVycm9yX2FsbG9jX2luOworCX0KKworCWIuaW4gPSBpbjsKKwliLmluX3BvcyA9IDA7CisJYi5pbl9zaXplID0gaW5fc2l6ZTsKKwliLm91dF9wb3MgPSAwOworCisJaWYgKGZpbGwgPT0gTlVMTCAmJiBmbHVzaCA9PSBOVUxMKSB7CisJCXJldCA9IHh6X2RlY19ydW4ocywgJmIpOworCX0gZWxzZSB7CisJCWRvIHsKKwkJCWlmIChiLmluX3BvcyA9PSBiLmluX3NpemUgJiYgZmlsbCAhPSBOVUxMKSB7CisJCQkJaWYgKGluX3VzZWQgIT0gTlVMTCkKKwkJCQkJKmluX3VzZWQgKz0gYi5pbl9wb3M7CisKKwkJCQliLmluX3BvcyA9IDA7CisKKwkJCQlpbl9zaXplID0gZmlsbChpbiwgWFpfSU9CVUZfU0laRSk7CisJCQkJaWYgKGluX3NpemUgPCAwKSB7CisJCQkJCS8qCisJCQkJCSAqIFRoaXMgaXNuJ3QgYW4gb3B0aW1hbCBlcnJvciBjb2RlCisJCQkJCSAqIGJ1dCBpdCBwcm9iYWJseSBpc24ndCB3b3J0aCBtYWtpbmcKKwkJCQkJICogYSBuZXcgb25lIGVpdGhlci4KKwkJCQkJICovCisJCQkJCXJldCA9IFhaX0JVRl9FUlJPUjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJYi5pbl9zaXplID0gaW5fc2l6ZTsKKwkJCX0KKworCQkJcmV0ID0geHpfZGVjX3J1bihzLCAmYik7CisKKwkJCWlmIChmbHVzaCAhPSBOVUxMICYmIChiLm91dF9wb3MgPT0gYi5vdXRfc2l6ZQorCQkJCQl8fCAocmV0ICE9IFhaX09LICYmIGIub3V0X3BvcyA+IDApKSkgeworCQkJCS8qCisJCQkJICogU2V0dGluZyByZXQgaGVyZSBtYXkgaGlkZSBhbiBlcnJvcgorCQkJCSAqIHJldHVybmVkIGJ5IHh6X2RlY19ydW4oKSwgYnV0IHByb2JhYmx5CisJCQkJICogaXQncyBub3QgdG9vIGJhZC4KKwkJCQkgKi8KKwkJCQlpZiAoZmx1c2goYi5vdXQsIGIub3V0X3BvcykgIT0gKGludCliLm91dF9wb3MpCisJCQkJCXJldCA9IFhaX0JVRl9FUlJPUjsKKworCQkJCWIub3V0X3BvcyA9IDA7CisJCQl9CisJCX0gd2hpbGUgKHJldCA9PSBYWl9PSyk7CisKKwkJaWYgKG11c3RfZnJlZV9pbikKKwkJCWZyZWUoaW4pOworCisJCWlmIChmbHVzaCAhPSBOVUxMKQorCQkJZnJlZShiLm91dCk7CisJfQorCisJaWYgKGluX3VzZWQgIT0gTlVMTCkKKwkJKmluX3VzZWQgKz0gYi5pbl9wb3M7CisKKwl4el9kZWNfZW5kKHMpOworCisJc3dpdGNoIChyZXQpIHsKKwljYXNlIFhaX1NUUkVBTV9FTkQ6CisJCXJldHVybiAwOworCisJY2FzZSBYWl9NRU1fRVJST1I6CisJCS8qIFRoaXMgY2FuIG9jY3VyIG9ubHkgaW4gbXVsdGktY2FsbCBtb2RlLiAqLworCQllcnJvcigiWFogZGVjb21wcmVzc29yIHJhbiBvdXQgb2YgbWVtb3J5Iik7CisJCWJyZWFrOworCisJY2FzZSBYWl9GT1JNQVRfRVJST1I6CisJCWVycm9yKCJJbnB1dCBpcyBub3QgaW4gdGhlIFhaIGZvcm1hdCAod3JvbmcgbWFnaWMgYnl0ZXMpIik7CisJCWJyZWFrOworCisJY2FzZSBYWl9PUFRJT05TX0VSUk9SOgorCQllcnJvcigiSW5wdXQgd2FzIGVuY29kZWQgd2l0aCBzZXR0aW5ncyB0aGF0IGFyZSBub3QgIgorCQkJCSJzdXBwb3J0ZWQgYnkgdGhpcyBYWiBkZWNvZGVyIik7CisJCWJyZWFrOworCisJY2FzZSBYWl9EQVRBX0VSUk9SOgorCWNhc2UgWFpfQlVGX0VSUk9SOgorCQllcnJvcigiWFotY29tcHJlc3NlZCBkYXRhIGlzIGNvcnJ1cHQiKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnJvcigiQnVnIGluIHRoZSBYWiBkZWNvbXByZXNzb3IiKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIC0xOworCitlcnJvcl9hbGxvY19pbjoKKwlpZiAoZmx1c2ggIT0gTlVMTCkKKwkJZnJlZShiLm91dCk7CisKK2Vycm9yX2FsbG9jX291dDoKKwl4el9kZWNfZW5kKHMpOworCitlcnJvcl9hbGxvY19zdGF0ZToKKwllcnJvcigiWFogZGVjb21wcmVzc29yIHJhbiBvdXQgb2YgbWVtb3J5Iik7CisJcmV0dXJuIC0xOworfQorCisvKgorICogVGhpcyBtYWNybyBpcyB1c2VkIGJ5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmaWxlcyB0byBkZWNvbXByZXNzCisgKiB0aGUga2VybmVsIGltYWdlLgorICovCisjZGVmaW5lIGRlY29tcHJlc3MgdW54egpkaWZmIC0tZ2l0IGEvbGliL2R5bmFtaWNfZGVidWcuYyBiL2xpYi9keW5hbWljX2RlYnVnLmMKaW5kZXggMzA5NDMxOC4uYjMzNWFjYiAxMDA2NDQKLS0tIGEvbGliL2R5bmFtaWNfZGVidWcuYworKysgYi9saWIvZHluYW1pY19kZWJ1Zy5jCkBAIC0xNDEsMTEgKzE0MSwxMCBAQAogCQkJZWxzZSBpZiAoIWRwLT5mbGFncykKIAkJCQlkdC0+bnVtX2VuYWJsZWQrKzsKIAkJCWRwLT5mbGFncyA9IG5ld2ZsYWdzOwotCQkJaWYgKG5ld2ZsYWdzKSB7Ci0JCQkJanVtcF9sYWJlbF9lbmFibGUoJmRwLT5lbmFibGVkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJanVtcF9sYWJlbF9kaXNhYmxlKCZkcC0+ZW5hYmxlZCk7Ci0JCQl9CisJCQlpZiAobmV3ZmxhZ3MpCisJCQkJZHAtPmVuYWJsZWQgPSAxOworCQkJZWxzZQorCQkJCWRwLT5lbmFibGVkID0gMDsKIAkJCWlmICh2ZXJib3NlKQogCQkJCXByaW50ayhLRVJOX0lORk8KIAkJCQkJImRkZWJ1ZzogY2hhbmdlZCAlczolZCBbJXNdJXMgJXNcbiIsCmRpZmYgLS1naXQgYS9saWIvZmxleF9hcnJheS5jIGIvbGliL2ZsZXhfYXJyYXkuYwppbmRleCA3N2E2ZmVhLi5jMGVhNDBiIDEwMDY0NAotLS0gYS9saWIvZmxleF9hcnJheS5jCisrKyBiL2xpYi9mbGV4X2FycmF5LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9mbGV4X2FycmF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiBzdHJ1Y3QgZmxleF9hcnJheV9wYXJ0IHsKIAljaGFyIGVsZW1lbnRzW0ZMRVhfQVJSQVlfUEFSVF9TSVpFXTsKQEAgLTEwMyw2ICsxMDQsNyBAQAogCQkJCQkJRkxFWF9BUlJBWV9CQVNFX0JZVEVTX0xFRlQpOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGZsZXhfYXJyYXlfYWxsb2MpOwogCiBzdGF0aWMgaW50IGZhX2VsZW1lbnRfdG9fcGFydF9ucihzdHJ1Y3QgZmxleF9hcnJheSAqZmEsCiAJCQkJCXVuc2lnbmVkIGludCBlbGVtZW50X25yKQpAQCAtMTI2LDEyICsxMjgsMTQgQEAKIAlmb3IgKHBhcnRfbnIgPSAwOyBwYXJ0X25yIDwgRkxFWF9BUlJBWV9OUl9CQVNFX1BUUlM7IHBhcnRfbnIrKykKIAkJa2ZyZWUoZmEtPnBhcnRzW3BhcnRfbnJdKTsKIH0KK0VYUE9SVF9TWU1CT0woZmxleF9hcnJheV9mcmVlX3BhcnRzKTsKIAogdm9pZCBmbGV4X2FycmF5X2ZyZWUoc3RydWN0IGZsZXhfYXJyYXkgKmZhKQogewogCWZsZXhfYXJyYXlfZnJlZV9wYXJ0cyhmYSk7CiAJa2ZyZWUoZmEpOwogfQorRVhQT1JUX1NZTUJPTChmbGV4X2FycmF5X2ZyZWUpOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGluZGV4X2luc2lkZV9wYXJ0KHN0cnVjdCBmbGV4X2FycmF5ICpmYSwKIAkJCQkJdW5zaWduZWQgaW50IGVsZW1lbnRfbnIpCkBAIC0xOTYsNiArMjAwLDcgQEAKIAltZW1jcHkoZHN0LCBzcmMsIGZhLT5lbGVtZW50X3NpemUpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChmbGV4X2FycmF5X3B1dCk7CiAKIC8qKgogICogZmxleF9hcnJheV9jbGVhciAtIGNsZWFyIGVsZW1lbnQgaW4gYXJyYXkgYXQgQGVsZW1lbnRfbnIKQEAgLTIyMyw2ICsyMjgsNyBAQAogCW1lbXNldChkc3QsIEZMRVhfQVJSQVlfRlJFRSwgZmEtPmVsZW1lbnRfc2l6ZSk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGZsZXhfYXJyYXlfY2xlYXIpOwogCiAvKioKICAqIGZsZXhfYXJyYXlfcHJlYWxsb2MgLSBndWFyYW50ZWUgdGhhdCBhcnJheSBzcGFjZSBleGlzdHMKQEAgLTI1OSw2ICsyNjUsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woZmxleF9hcnJheV9wcmVhbGxvYyk7CiAKIC8qKgogICogZmxleF9hcnJheV9nZXQgLSBwdWxsIGRhdGEgYmFjayBvdXQgb2YgdGhlIGFycmF5CkBAIC0yODgsNiArMjk1LDcgQEAKIAl9CiAJcmV0dXJuICZwYXJ0LT5lbGVtZW50c1tpbmRleF9pbnNpZGVfcGFydChmYSwgZWxlbWVudF9ucildOwogfQorRVhQT1JUX1NZTUJPTChmbGV4X2FycmF5X2dldCk7CiAKIC8qKgogICogZmxleF9hcnJheV9nZXRfcHRyIC0gcHVsbCBhIHB0ciBiYWNrIG91dCBvZiB0aGUgYXJyYXkKQEAgLTMwOCw2ICszMTYsNyBAQAogCiAJcmV0dXJuICp0bXA7CiB9CitFWFBPUlRfU1lNQk9MKGZsZXhfYXJyYXlfZ2V0X3B0cik7CiAKIHN0YXRpYyBpbnQgcGFydF9pc19mcmVlKHN0cnVjdCBmbGV4X2FycmF5X3BhcnQgKnBhcnQpCiB7CkBAIC0zNDgsMyArMzU3LDQgQEAKIAl9CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woZmxleF9hcnJheV9zaHJpbmspOwpkaWZmIC0tZ2l0IGEvbGliL2hleGR1bXAuYyBiL2xpYi9oZXhkdW1wLmMKaW5kZXggYjY2YjJiZC4uZjVmZTZiYSAxMDA2NDQKLS0tIGEvbGliL2hleGR1bXAuYworKysgYi9saWIvaGV4ZHVtcC5jCkBAIC0xNTQsNiArMTU0LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaGV4X2R1bXBfdG9fYnVmZmVyKTsKIAorI2lmZGVmIENPTkZJR19QUklOVEsKIC8qKgogICogcHJpbnRfaGV4X2R1bXAgLSBwcmludCBhIHRleHQgaGV4IGR1bXAgdG8gc3lzbG9nIGZvciBhIGJpbmFyeSBibG9iIG9mIGRhdGEKICAqIEBsZXZlbDoga2VybmVsIGxvZyBsZXZlbCAoZS5nLiBLRVJOX0RFQlVHKQpAQCAtMjM4LDMgKzIzOSw0IEBACiAJCSAgICAgICBidWYsIGxlbiwgdHJ1ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKHByaW50X2hleF9kdW1wX2J5dGVzKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2tyZWYuYyBiL2xpYi9rcmVmLmMKaW5kZXggZDNkMjI3YS4uM2VmYjg4MiAxMDA2NDQKLS0tIGEvbGliL2tyZWYuYworKysgYi9saWIva3JlZi5jCkBAIC02Miw2ICs2MiwzNiBAQAogCXJldHVybiAwOwogfQogCisKKy8qKgorICoga3JlZl9zdWIgLSBzdWJ0cmFjdCBhIG51bWJlciBvZiByZWZjb3VudHMgZm9yIG9iamVjdC4KKyAqIEBrcmVmOiBvYmplY3QuCisgKiBAY291bnQ6IE51bWJlciBvZiByZWNvdW50cyB0byBzdWJ0cmFjdC4KKyAqIEByZWxlYXNlOiBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgY2xlYW4gdXAgdGhlIG9iamVjdCB3aGVuIHRoZQorICoJICAgICBsYXN0IHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IGlzIHJlbGVhc2VkLgorICoJICAgICBUaGlzIHBvaW50ZXIgaXMgcmVxdWlyZWQsIGFuZCBpdCBpcyBub3QgYWNjZXB0YWJsZSB0byBwYXNzIGtmcmVlCisgKgkgICAgIGluIGFzIHRoaXMgZnVuY3Rpb24uCisgKgorICogU3VidHJhY3QgQGNvdW50IGZyb20gdGhlIHJlZmNvdW50LCBhbmQgaWYgMCwgY2FsbCByZWxlYXNlKCkuCisgKiBSZXR1cm4gMSBpZiB0aGUgb2JqZWN0IHdhcyByZW1vdmVkLCBvdGhlcndpc2UgcmV0dXJuIDAuICBCZXdhcmUsIGlmIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMgMCwgeW91IHN0aWxsIGNhbiBub3QgY291bnQgb24gdGhlIGtyZWYgZnJvbSByZW1haW5pbmcgaW4KKyAqIG1lbW9yeS4gIE9ubHkgdXNlIHRoZSByZXR1cm4gdmFsdWUgaWYgeW91IHdhbnQgdG8gc2VlIGlmIHRoZSBrcmVmIGlzIG5vdworICogZ29uZSwgbm90IHByZXNlbnQuCisgKi8KK2ludCBrcmVmX3N1YihzdHJ1Y3Qga3JlZiAqa3JlZiwgdW5zaWduZWQgaW50IGNvdW50LAorCSAgICAgdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBrcmVmICprcmVmKSkKK3sKKwlXQVJOX09OKHJlbGVhc2UgPT0gTlVMTCk7CisJV0FSTl9PTihyZWxlYXNlID09ICh2b2lkICgqKShzdHJ1Y3Qga3JlZiAqKSlrZnJlZSk7CisKKwlpZiAoYXRvbWljX3N1Yl9hbmRfdGVzdCgoaW50KSBjb3VudCwgJmtyZWYtPnJlZmNvdW50KSkgeworCQlyZWxlYXNlKGtyZWYpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIEVYUE9SVF9TWU1CT0woa3JlZl9pbml0KTsKIEVYUE9SVF9TWU1CT0woa3JlZl9nZXQpOwogRVhQT1JUX1NZTUJPTChrcmVmX3B1dCk7CitFWFBPUlRfU1lNQk9MKGtyZWZfc3ViKTsKZGlmZiAtLWdpdCBhL2xpYi9ubGF0dHIuYyBiL2xpYi9ubGF0dHIuYwppbmRleCAwMGU4YTAyLi41MDIxY2JjIDEwMDY0NAotLS0gYS9saWIvbmxhdHRyLmMKKysrIGIvbGliL25sYXR0ci5jCkBAIC0xNjcsNyArMTY3LDcgQEAKICAqIEBwb2xpY3k6IHZhbGlkYXRpb24gcG9saWN5CiAgKgogICogUGFyc2VzIGEgc3RyZWFtIG9mIGF0dHJpYnV0ZXMgYW5kIHN0b3JlcyBhIHBvaW50ZXIgdG8gZWFjaCBhdHRyaWJ1dGUgaW4KLSAqIHRoZSB0YiBhcnJheSBhY2Nlc3NhYmxlIHZpYSB0aGUgYXR0cmlidXRlIHR5cGUuIEF0dHJpYnV0ZXMgd2l0aCBhIHR5cGUKKyAqIHRoZSB0YiBhcnJheSBhY2Nlc3NpYmxlIHZpYSB0aGUgYXR0cmlidXRlIHR5cGUuIEF0dHJpYnV0ZXMgd2l0aCBhIHR5cGUKICAqIGV4Y2VlZGluZyBtYXh0eXBlIHdpbGwgYmUgc2lsZW50bHkgaWdub3JlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKICAqIHJlYXNvbnMuIHBvbGljeSBtYXkgYmUgc2V0IHRvIE5VTEwgaWYgbm8gdmFsaWRhdGlvbiBpcyByZXF1aXJlZC4KICAqCmRpZmYgLS1naXQgYS9saWIvc3dpb3RsYi5jIGIvbGliL3N3aW90bGIuYwppbmRleCA3YzA2ZWU1Li5jNDdiYmUxIDEwMDY0NAotLS0gYS9saWIvc3dpb3RsYi5jCisrKyBiL2xpYi9zd2lvdGxiLmMKQEAgLTYwLDcgKzYwLDcgQEAKIHN0YXRpYyBjaGFyICppb190bGJfc3RhcnQsICppb190bGJfZW5kOwogCiAvKgotICogVGhlIG51bWJlciBvZiBJTyBUTEIgYmxvY2tzIChpbiBncm91cHMgb2YgNjQpIGJldHdlZWVuIGlvX3RsYl9zdGFydCBhbmQKKyAqIFRoZSBudW1iZXIgb2YgSU8gVExCIGJsb2NrcyAoaW4gZ3JvdXBzIG9mIDY0KSBiZXR3ZWVuIGlvX3RsYl9zdGFydCBhbmQKICAqIGlvX3RsYl9lbmQuICBUaGlzIGlzIGNvbW1hbmQgbGluZSBhZGp1c3RhYmxlIHZpYSBzZXR1cF9pb190bGJfbnBhZ2VzLgogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpb190bGJfbnNsYWJzOwpkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCBjMTUwZDNkLi5kMzAyM2RmIDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYworKysgYi9saWIvdnNwcmludGYuYwpAQCAtOTM2LDYgKzkzNiw4IEBACiAJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgdXVpZCwgc3BlYyk7CiB9CiAKK2ludCBrcHRyX3Jlc3RyaWN0ID0gMTsKKwogLyoKICAqIFNob3cgYSAnJXAnIHRoaW5nLiAgQSBrZXJuZWwgZXh0ZW5zaW9uIGlzIHRoYXQgdGhlICclcCcgaXMgZm9sbG93ZWQKICAqIGJ5IGFuIGV4dHJhIHNldCBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyB0aGF0IGFyZSBleHRlbmRlZCBmb3JtYXQKQEAgLTk3OSw2ICs5ODEsNyBAQAogICogICAgICAgSW1wbGVtZW50cyBhICJyZWN1cnNpdmUgdnNucHJpbnRmIi4KICAqICAgICAgIERvIG5vdCB1c2UgdGhpcyBmZWF0dXJlIHdpdGhvdXQgc29tZSBtZWNoYW5pc20gdG8gdmVyaWZ5IHRoZQogICogICAgICAgY29ycmVjdG5lc3Mgb2YgdGhlIGZvcm1hdCBzdHJpbmcgYW5kIHZhX2xpc3QgYXJndW1lbnRzLgorICogLSAnSycgRm9yIGEga2VybmVsIHBvaW50ZXIgdGhhdCBzaG91bGQgYmUgaGlkZGVuIGZyb20gdW5wcml2aWxlZ2VkIHVzZXJzCiAgKgogICogTm90ZTogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAnUycgYW5kICdGJyBpcyB0aGF0IG9uIGlhNjQgYW5kIHBwYzY0CiAgKiBmdW5jdGlvbiBwb2ludGVycyBhcmUgcmVhbGx5IGZ1bmN0aW9uIGRlc2NyaXB0b3JzLCB3aGljaCBjb250YWluIGEKQEAgLTEwMzUsNiArMTAzOCwyNSBAQAogCQlyZXR1cm4gYnVmICsgdnNucHJpbnRmKGJ1ZiwgZW5kIC0gYnVmLAogCQkJCSAgICAgICAoKHN0cnVjdCB2YV9mb3JtYXQgKilwdHIpLT5mbXQsCiAJCQkJICAgICAgICooKChzdHJ1Y3QgdmFfZm9ybWF0ICopcHRyKS0+dmEpKTsKKwljYXNlICdLJzoKKwkJLyoKKwkJICogJXBLIGNhbm5vdCBiZSB1c2VkIGluIElSUSBjb250ZXh0IGJlY2F1c2UgaXRzIHRlc3QKKwkJICogZm9yIENBUF9TWVNMT0cgd291bGQgYmUgbWVhbmluZ2xlc3MuCisJCSAqLworCQlpZiAoaW5faXJxKCkgfHwgaW5fc2VydmluZ19zb2Z0aXJxKCkgfHwgaW5fbm1pKCkpIHsKKwkJCWlmIChzcGVjLmZpZWxkX3dpZHRoID09IC0xKQorCQkJCXNwZWMuZmllbGRfd2lkdGggPSAyICogc2l6ZW9mKHZvaWQgKik7CisJCQlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCAicEstZXJyb3IiLCBzcGVjKTsKKwkJfSBlbHNlIGlmICgoa3B0cl9yZXN0cmljdCA9PSAwKSB8fAorCQkJIChrcHRyX3Jlc3RyaWN0ID09IDEgJiYKKwkJCSAgaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChjdXJyZW50LCBDQVBfU1lTTE9HKSkpCisJCQlicmVhazsKKworCQlpZiAoc3BlYy5maWVsZF93aWR0aCA9PSAtMSkgeworCQkJc3BlYy5maWVsZF93aWR0aCA9IDIgKiBzaXplb2Yodm9pZCAqKTsKKwkJCXNwZWMuZmxhZ3MgfD0gWkVST1BBRDsKKwkJfQorCQlyZXR1cm4gbnVtYmVyKGJ1ZiwgZW5kLCAwLCBzcGVjKTsKIAl9CiAJc3BlYy5mbGFncyB8PSBTTUFMTDsKIAlpZiAoc3BlYy5maWVsZF93aWR0aCA9PSAtMSkgewpAQCAtMTQ1MSw3ICsxNDczLDcgQEAKICAqIEBhcmdzOiBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3RyaW5nCiAgKgogICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2hpY2ggaGF2ZSBiZWVuIHdyaXR0ZW4gaW50bwotICogdGhlIEBidWYgbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgJ1wwJy4gSWYgQHNpemUgaXMgPD0gMCB0aGUgZnVuY3Rpb24KKyAqIHRoZSBAYnVmIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nICdcMCcuIElmIEBzaXplIGlzID09IDAgdGhlIGZ1bmN0aW9uCiAgKiByZXR1cm5zIDAuCiAgKgogICogQ2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBhcmUgYWxyZWFkeSBkZWFsaW5nIHdpdGggYSB2YV9saXN0LgpAQCAtMTQ2NSw3ICsxNDg3LDExIEBACiAKIAlpID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZSwgZm10LCBhcmdzKTsKIAotCXJldHVybiAoaSA+PSBzaXplKSA/IChzaXplIC0gMSkgOiBpOworCWlmIChsaWtlbHkoaSA8IHNpemUpKQorCQlyZXR1cm4gaTsKKwlpZiAoc2l6ZSAhPSAwKQorCQlyZXR1cm4gc2l6ZSAtIDE7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHZzY25wcmludGYpOwogCkBAIC0xNTEzLDE0ICsxNTM5LDEwIEBACiAJaW50IGk7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCWkgPSB2c25wcmludGYoYnVmLCBzaXplLCBmbXQsIGFyZ3MpOworCWkgPSB2c2NucHJpbnRmKGJ1Ziwgc2l6ZSwgZm10LCBhcmdzKTsKIAl2YV9lbmQoYXJncyk7CiAKLQlpZiAobGlrZWx5KGkgPCBzaXplKSkKLQkJcmV0dXJuIGk7Ci0JaWYgKHNpemUgIT0gMCkKLQkJcmV0dXJuIHNpemUgLSAxOwotCXJldHVybiAwOworCXJldHVybiBpOwogfQogRVhQT1JUX1NZTUJPTChzY25wcmludGYpOwogCmRpZmYgLS1naXQgYS9saWIveHovS2NvbmZpZyBiL2xpYi94ei9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYjZlMTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIveHovS2NvbmZpZwpAQCAtMCwwICsxLDU5IEBACitjb25maWcgWFpfREVDCisJdHJpc3RhdGUgIlhaIGRlY29tcHJlc3Npb24gc3VwcG9ydCIKKwlzZWxlY3QgQ1JDMzIKKwloZWxwCisJICBMWk1BMiBjb21wcmVzc2lvbiBhbGdvcml0aG0gYW5kIEJDSiBmaWx0ZXJzIGFyZSBzdXBwb3J0ZWQgdXNpbmcKKwkgIHRoZSAueHogZmlsZSBmb3JtYXQgYXMgdGhlIGNvbnRhaW5lci4gRm9yIGludGVncml0eSBjaGVja2luZywKKwkgIENSQzMyIGlzIHN1cHBvcnRlZC4gU2VlIERvY3VtZW50YXRpb24veHoudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitjb25maWcgWFpfREVDX1g4NgorCWJvb2wgIng4NiBCQ0ogZmlsdGVyIGRlY29kZXIiIGlmIEVNQkVEREVECisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBYWl9ERUMKKwlzZWxlY3QgWFpfREVDX0JDSgorCitjb25maWcgWFpfREVDX1BPV0VSUEMKKwlib29sICJQb3dlclBDIEJDSiBmaWx0ZXIgZGVjb2RlciIgaWYgRU1CRURERUQKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFhaX0RFQworCXNlbGVjdCBYWl9ERUNfQkNKCisKK2NvbmZpZyBYWl9ERUNfSUE2NAorCWJvb2wgIklBLTY0IEJDSiBmaWx0ZXIgZGVjb2RlciIgaWYgRU1CRURERUQKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFhaX0RFQworCXNlbGVjdCBYWl9ERUNfQkNKCisKK2NvbmZpZyBYWl9ERUNfQVJNCisJYm9vbCAiQVJNIEJDSiBmaWx0ZXIgZGVjb2RlciIgaWYgRU1CRURERUQKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFhaX0RFQworCXNlbGVjdCBYWl9ERUNfQkNKCisKK2NvbmZpZyBYWl9ERUNfQVJNVEhVTUIKKwlib29sICJBUk0tVGh1bWIgQkNKIGZpbHRlciBkZWNvZGVyIiBpZiBFTUJFRERFRAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gWFpfREVDCisJc2VsZWN0IFhaX0RFQ19CQ0oKKworY29uZmlnIFhaX0RFQ19TUEFSQworCWJvb2wgIlNQQVJDIEJDSiBmaWx0ZXIgZGVjb2RlciIgaWYgRU1CRURERUQKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFhaX0RFQworCXNlbGVjdCBYWl9ERUNfQkNKCisKK2NvbmZpZyBYWl9ERUNfQkNKCisJYm9vbAorCWRlZmF1bHQgbgorCitjb25maWcgWFpfREVDX1RFU1QKKwl0cmlzdGF0ZSAiWFogZGVjb21wcmVzc29yIHRlc3RlciIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIFhaX0RFQworCWhlbHAKKwkgIFRoaXMgYWxsb3dzIHBhc3NpbmcgLnh6IGZpbGVzIHRvIHRoZSBpbi1rZXJuZWwgWFogZGVjb2RlciB2aWEKKwkgIGEgY2hhcmFjdGVyIHNwZWNpYWwgZmlsZS4gSXQgY2FsY3VsYXRlcyBDUkMzMiBvZiB0aGUgZGVjb21wcmVzc2VkCisJICBkYXRhIGFuZCB3cml0ZXMgZGlhZ25vc3RpY3MgdG8gdGhlIHN5c3RlbSBsb2cuCisKKwkgIFVubGVzcyB5b3UgYXJlIGRldmVsb3BpbmcgdGhlIFhaIGRlY29kZXIsIHlvdSBkb24ndCBuZWVkIHRoaXMKKwkgIGFuZCBzaG91bGQgc2F5IE4uCmRpZmYgLS1naXQgYS9saWIveHovTWFrZWZpbGUgYi9saWIveHovTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmYTc2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi94ei9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK29iai0kKENPTkZJR19YWl9ERUMpICs9IHh6X2RlYy5vCit4el9kZWMteSA6PSB4el9kZWNfc3ltcy5vIHh6X2RlY19zdHJlYW0ubyB4el9kZWNfbHptYTIubworeHpfZGVjLSQoQ09ORklHX1haX0RFQ19CQ0opICs9IHh6X2RlY19iY2oubworCitvYmotJChDT05GSUdfWFpfREVDX1RFU1QpICs9IHh6X2RlY190ZXN0Lm8KZGlmZiAtLWdpdCBhL2xpYi94ei94el9jcmMzMi5jIGIvbGliL3h6L3h6X2NyYzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1MzJkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi94ei94el9jcmMzMi5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDUkMzMiB1c2luZyB0aGUgcG9seW5vbWlhbCBmcm9tIElFRUUtODAyLjMKKyAqCisgKiBBdXRob3JzOiBMYXNzZSBDb2xsaW4gPGxhc3NlLmNvbGxpbkB0dWthYW5pLm9yZz4KKyAqICAgICAgICAgIElnb3IgUGF2bG92IDxodHRwOi8vNy16aXAub3JnLz4KKyAqCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gcHV0IGludG8gdGhlIHB1YmxpYyBkb21haW4uCisgKiBZb3UgY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhpcyBmaWxlLgorICovCisKKy8qCisgKiBUaGlzIGlzIG5vdCB0aGUgZmFzdGVzdCBpbXBsZW1lbnRhdGlvbiwgYnV0IGl0IGlzIHByZXR0eSBjb21wYWN0LgorICogVGhlIGZhc3Rlc3QgdmVyc2lvbnMgb2YgeHpfY3JjMzIoKSBvbiBtb2Rlcm4gQ1BVcyB3aXRob3V0IGhhcmR3YXJlCisgKiBhY2NlbGVyYXRlZCBDUkMgaW5zdHJ1Y3Rpb24gYXJlIDMtNSB0aW1lcyBhcyBmYXN0IGFzIHRoaXMgdmVyc2lvbiwKKyAqIGJ1dCB0aGV5IGFyZSBiaWdnZXIgYW5kIHVzZSBtb3JlIG1lbW9yeSBmb3IgdGhlIGxvb2t1cCB0YWJsZS4KKyAqLworCisjaW5jbHVkZSAieHpfcHJpdmF0ZS5oIgorCisvKgorICogU1RBVElDX1JXX0RBVEEgaXMgdXNlZCBpbiB0aGUgcHJlLWJvb3QgZW52aXJvbm1lbnQgb24gc29tZSBhcmNoaXRlY3R1cmVzLgorICogU2VlIDxsaW51eC9kZWNvbXByZXNzL21tLmg+IGZvciBkZXRhaWxzLgorICovCisjaWZuZGVmIFNUQVRJQ19SV19EQVRBCisjCWRlZmluZSBTVEFUSUNfUldfREFUQSBzdGF0aWMKKyNlbmRpZgorCitTVEFUSUNfUldfREFUQSB1aW50MzJfdCB4el9jcmMzMl90YWJsZVsyNTZdOworCitYWl9FWFRFUk4gdm9pZCB4el9jcmMzMl9pbml0KHZvaWQpCit7CisJY29uc3QgdWludDMyX3QgcG9seSA9IDB4RURCODgzMjA7CisKKwl1aW50MzJfdCBpOworCXVpbnQzMl90IGo7CisJdWludDMyX3QgcjsKKworCWZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkgeworCQlyID0gaTsKKwkJZm9yIChqID0gMDsgaiA8IDg7ICsraikKKwkJCXIgPSAociA+PiAxKSBeIChwb2x5ICYgfigociAmIDEpIC0gMSkpOworCisJCXh6X2NyYzMyX3RhYmxlW2ldID0gcjsKKwl9CisKKwlyZXR1cm47Cit9CisKK1haX0VYVEVSTiB1aW50MzJfdCB4el9jcmMzMihjb25zdCB1aW50OF90ICpidWYsIHNpemVfdCBzaXplLCB1aW50MzJfdCBjcmMpCit7CisJY3JjID0gfmNyYzsKKworCXdoaWxlIChzaXplICE9IDApIHsKKwkJY3JjID0geHpfY3JjMzJfdGFibGVbKmJ1ZisrIF4gKGNyYyAmIDB4RkYpXSBeIChjcmMgPj4gOCk7CisJCS0tc2l6ZTsKKwl9CisKKwlyZXR1cm4gfmNyYzsKK30KZGlmZiAtLWdpdCBhL2xpYi94ei94el9kZWNfYmNqLmMgYi9saWIveHoveHpfZGVjX2Jjai5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MWUyNTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIveHoveHpfZGVjX2Jjai5jCkBAIC0wLDAgKzEsNTYxIEBACisvKgorICogQnJhbmNoL0NhbGwvSnVtcCAoQkNKKSBmaWx0ZXIgZGVjb2RlcnMKKyAqCisgKiBBdXRob3JzOiBMYXNzZSBDb2xsaW4gPGxhc3NlLmNvbGxpbkB0dWthYW5pLm9yZz4KKyAqICAgICAgICAgIElnb3IgUGF2bG92IDxodHRwOi8vNy16aXAub3JnLz4KKyAqCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gcHV0IGludG8gdGhlIHB1YmxpYyBkb21haW4uCisgKiBZb3UgY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhpcyBmaWxlLgorICovCisKKyNpbmNsdWRlICJ4el9wcml2YXRlLmgiCisKKy8qCisgKiBUaGUgcmVzdCBvZiB0aGUgZmlsZSBpcyBpbnNpZGUgdGhpcyBpZmRlZi4gSXQgbWFrZXMgdGhpbmdzIGEgbGl0dGxlIG1vcmUKKyAqIGNvbnZlbmllbnQgd2hlbiBidWlsZGluZyB3aXRob3V0IHN1cHBvcnQgZm9yIGFueSBCQ0ogZmlsdGVycy4KKyAqLworI2lmZGVmIFhaX0RFQ19CQ0oKKworc3RydWN0IHh6X2RlY19iY2ogeworCS8qIFR5cGUgb2YgdGhlIEJDSiBmaWx0ZXIgYmVpbmcgdXNlZCAqLworCWVudW0geworCQlCQ0pfWDg2ID0gNCwgICAgICAgIC8qIHg4NiBvciB4ODYtNjQgKi8KKwkJQkNKX1BPV0VSUEMgPSA1LCAgICAvKiBCaWcgZW5kaWFuIG9ubHkgKi8KKwkJQkNKX0lBNjQgPSA2LCAgICAgICAvKiBCaWcgb3IgbGl0dGxlIGVuZGlhbiAqLworCQlCQ0pfQVJNID0gNywgICAgICAgIC8qIExpdHRsZSBlbmRpYW4gb25seSAqLworCQlCQ0pfQVJNVEhVTUIgPSA4LCAgIC8qIExpdHRsZSBlbmRpYW4gb25seSAqLworCQlCQ0pfU1BBUkMgPSA5ICAgICAgIC8qIEJpZyBvciBsaXR0bGUgZW5kaWFuICovCisJfSB0eXBlOworCisJLyoKKwkgKiBSZXR1cm4gdmFsdWUgb2YgdGhlIG5leHQgZmlsdGVyIGluIHRoZSBjaGFpbi4gV2UgbmVlZCB0byBwcmVzZXJ2ZQorCSAqIHRoaXMgaW5mb3JtYXRpb24gYWNyb3NzIGNhbGxzLCBiZWNhdXNlIHdlIG11c3Qgbm90IGNhbGwgdGhlIG5leHQKKwkgKiBmaWx0ZXIgYW55bW9yZSBvbmNlIGl0IGhhcyByZXR1cm5lZCBYWl9TVFJFQU1fRU5ELgorCSAqLworCWVudW0geHpfcmV0IHJldDsKKworCS8qIFRydWUgaWYgd2UgYXJlIG9wZXJhdGluZyBpbiBzaW5nbGUtY2FsbCBtb2RlLiAqLworCWJvb2wgc2luZ2xlX2NhbGw7CisKKwkvKgorCSAqIEFic29sdXRlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVuY29tcHJlc3NlZAorCSAqIGRhdGEgKGluIGEgc2luZ2xlIC54eiBCbG9jaykuIFdlIGNhcmUgb25seSBhYm91dCB0aGUgbG93ZXN0IDMyCisJICogYml0cyBzbyB0aGlzIGRvZXNuJ3QgbmVlZCB0byBiZSB1aW50NjRfdCBldmVuIHdpdGggYmlnIGZpbGVzLgorCSAqLworCXVpbnQzMl90IHBvczsKKworCS8qIHg4NiBmaWx0ZXIgc3RhdGUgKi8KKwl1aW50MzJfdCB4ODZfcHJldl9tYXNrOworCisJLyogVGVtcG9yYXJ5IHNwYWNlIHRvIGhvbGQgdGhlIHZhcmlhYmxlcyBmcm9tIHN0cnVjdCB4el9idWYgKi8KKwl1aW50OF90ICpvdXQ7CisJc2l6ZV90IG91dF9wb3M7CisJc2l6ZV90IG91dF9zaXplOworCisJc3RydWN0IHsKKwkJLyogQW1vdW50IG9mIGFscmVhZHkgZmlsdGVyZWQgZGF0YSBpbiB0aGUgYmVnaW5uaW5nIG9mIGJ1ZiAqLworCQlzaXplX3QgZmlsdGVyZWQ7CisKKwkJLyogVG90YWwgYW1vdW50IG9mIGRhdGEgY3VycmVudGx5IHN0b3JlZCBpbiBidWYgICovCisJCXNpemVfdCBzaXplOworCisJCS8qCisJCSAqIEJ1ZmZlciB0byBob2xkIGEgbWl4IG9mIGZpbHRlcmVkIGFuZCB1bmZpbHRlcmVkIGRhdGEuIFRoaXMKKwkJICogbmVlZHMgdG8gYmUgYmlnIGVub3VnaCB0byBob2xkIEFsaWdubWVudCArIDIgKiBMb29rLWFoZWFkOgorCQkgKgorCQkgKiBUeXBlICAgICAgICAgQWxpZ25tZW50ICAgTG9vay1haGVhZAorCQkgKiB4ODYgICAgICAgICAgICAgIDEgICAgICAgICAgIDQKKwkJICogUG93ZXJQQyAgICAgICAgICA0ICAgICAgICAgICAwCisJCSAqIElBLTY0ICAgICAgICAgICAxNiAgICAgICAgICAgMAorCQkgKiBBUk0gICAgICAgICAgICAgIDQgICAgICAgICAgIDAKKwkJICogQVJNLVRodW1iICAgICAgICAyICAgICAgICAgICAyCisJCSAqIFNQQVJDICAgICAgICAgICAgNCAgICAgICAgICAgMAorCQkgKi8KKwkJdWludDhfdCBidWZbMTZdOworCX0gdGVtcDsKK307CisKKyNpZmRlZiBYWl9ERUNfWDg2CisvKgorICogVGhpcyBpcyB1c2VkIHRvIHRlc3QgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiBhIG1lbW9yeSBhZGRyZXNzCisgKiBpbiBhbiB4ODYgaW5zdHJ1Y3Rpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJjal94ODZfdGVzdF9tc2J5dGUodWludDhfdCBiKQoreworCXJldHVybiBiID09IDB4MDAgfHwgYiA9PSAweEZGOworfQorCitzdGF0aWMgc2l6ZV90IGJjal94ODYoc3RydWN0IHh6X2RlY19iY2ogKnMsIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3RhdGljIGNvbnN0IGJvb2wgbWFza190b19hbGxvd2VkX3N0YXR1c1s4XQorCQk9IHsgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UgfTsKKworCXN0YXRpYyBjb25zdCB1aW50OF90IG1hc2tfdG9fYml0X251bVs4XSA9IHsgMCwgMSwgMiwgMiwgMywgMywgMywgMyB9OworCisJc2l6ZV90IGk7CisJc2l6ZV90IHByZXZfcG9zID0gKHNpemVfdCktMTsKKwl1aW50MzJfdCBwcmV2X21hc2sgPSBzLT54ODZfcHJldl9tYXNrOworCXVpbnQzMl90IHNyYzsKKwl1aW50MzJfdCBkZXN0OworCXVpbnQzMl90IGo7CisJdWludDhfdCBiOworCisJaWYgKHNpemUgPD0gNCkKKwkJcmV0dXJuIDA7CisKKwlzaXplIC09IDQ7CisJZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkgeworCQlpZiAoKGJ1ZltpXSAmIDB4RkUpICE9IDB4RTgpCisJCQljb250aW51ZTsKKworCQlwcmV2X3BvcyA9IGkgLSBwcmV2X3BvczsKKwkJaWYgKHByZXZfcG9zID4gMykgeworCQkJcHJldl9tYXNrID0gMDsKKwkJfSBlbHNlIHsKKwkJCXByZXZfbWFzayA9IChwcmV2X21hc2sgPDwgKHByZXZfcG9zIC0gMSkpICYgNzsKKwkJCWlmIChwcmV2X21hc2sgIT0gMCkgeworCQkJCWIgPSBidWZbaSArIDQgLSBtYXNrX3RvX2JpdF9udW1bcHJldl9tYXNrXV07CisJCQkJaWYgKCFtYXNrX3RvX2FsbG93ZWRfc3RhdHVzW3ByZXZfbWFza10KKwkJCQkJCXx8IGJjal94ODZfdGVzdF9tc2J5dGUoYikpIHsKKwkJCQkJcHJldl9wb3MgPSBpOworCQkJCQlwcmV2X21hc2sgPSAocHJldl9tYXNrIDw8IDEpIHwgMTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQl9CisKKwkJcHJldl9wb3MgPSBpOworCisJCWlmIChiY2pfeDg2X3Rlc3RfbXNieXRlKGJ1ZltpICsgNF0pKSB7CisJCQlzcmMgPSBnZXRfdW5hbGlnbmVkX2xlMzIoYnVmICsgaSArIDEpOworCQkJd2hpbGUgKHRydWUpIHsKKwkJCQlkZXN0ID0gc3JjIC0gKHMtPnBvcyArICh1aW50MzJfdClpICsgNSk7CisJCQkJaWYgKHByZXZfbWFzayA9PSAwKQorCQkJCQlicmVhazsKKworCQkJCWogPSBtYXNrX3RvX2JpdF9udW1bcHJldl9tYXNrXSAqIDg7CisJCQkJYiA9ICh1aW50OF90KShkZXN0ID4+ICgyNCAtIGopKTsKKwkJCQlpZiAoIWJjal94ODZfdGVzdF9tc2J5dGUoYikpCisJCQkJCWJyZWFrOworCisJCQkJc3JjID0gZGVzdCBeICgoKHVpbnQzMl90KTEgPDwgKDMyIC0gaikpIC0gMSk7CisJCQl9CisKKwkJCWRlc3QgJj0gMHgwMUZGRkZGRjsKKwkJCWRlc3QgfD0gKHVpbnQzMl90KTAgLSAoZGVzdCAmIDB4MDEwMDAwMDApOworCQkJcHV0X3VuYWxpZ25lZF9sZTMyKGRlc3QsIGJ1ZiArIGkgKyAxKTsKKwkJCWkgKz0gNDsKKwkJfSBlbHNlIHsKKwkJCXByZXZfbWFzayA9IChwcmV2X21hc2sgPDwgMSkgfCAxOworCQl9CisJfQorCisJcHJldl9wb3MgPSBpIC0gcHJldl9wb3M7CisJcy0+eDg2X3ByZXZfbWFzayA9IHByZXZfcG9zID4gMyA/IDAgOiBwcmV2X21hc2sgPDwgKHByZXZfcG9zIC0gMSk7CisJcmV0dXJuIGk7Cit9CisjZW5kaWYKKworI2lmZGVmIFhaX0RFQ19QT1dFUlBDCitzdGF0aWMgc2l6ZV90IGJjal9wb3dlcnBjKHN0cnVjdCB4el9kZWNfYmNqICpzLCB1aW50OF90ICpidWYsIHNpemVfdCBzaXplKQoreworCXNpemVfdCBpOworCXVpbnQzMl90IGluc3RyOworCisJZm9yIChpID0gMDsgaSArIDQgPD0gc2l6ZTsgaSArPSA0KSB7CisJCWluc3RyID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1ZiArIGkpOworCQlpZiAoKGluc3RyICYgMHhGQzAwMDAwMykgPT0gMHg0ODAwMDAwMSkgeworCQkJaW5zdHIgJj0gMHgwM0ZGRkZGQzsKKwkJCWluc3RyIC09IHMtPnBvcyArICh1aW50MzJfdClpOworCQkJaW5zdHIgJj0gMHgwM0ZGRkZGQzsKKwkJCWluc3RyIHw9IDB4NDgwMDAwMDE7CisJCQlwdXRfdW5hbGlnbmVkX2JlMzIoaW5zdHIsIGJ1ZiArIGkpOworCQl9CisJfQorCisJcmV0dXJuIGk7Cit9CisjZW5kaWYKKworI2lmZGVmIFhaX0RFQ19JQTY0CitzdGF0aWMgc2l6ZV90IGJjal9pYTY0KHN0cnVjdCB4el9kZWNfYmNqICpzLCB1aW50OF90ICpidWYsIHNpemVfdCBzaXplKQoreworCXN0YXRpYyBjb25zdCB1aW50OF90IGJyYW5jaF90YWJsZVszMl0gPSB7CisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCTQsIDQsIDYsIDYsIDAsIDAsIDcsIDcsCisJCTQsIDQsIDAsIDAsIDQsIDQsIDAsIDAKKwl9OworCisJLyoKKwkgKiBUaGUgbG9jYWwgdmFyaWFibGVzIHRha2UgYSBsaXR0bGUgYml0IHN0YWNrIHNwYWNlLCBidXQgaXQncyBsZXNzCisJICogdGhhbiB3aGF0IExaTUEyIGRlY29kZXIgdGFrZXMsIHNvIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byByZWR1Y2UKKwkgKiBzdGFjayB1c2FnZSBoZXJlIHdpdGhvdXQgZG9pbmcgdGhhdCBmb3IgdGhlIExaTUEyIGRlY29kZXIgdG9vLgorCSAqLworCisJLyogTG9vcCBjb3VudGVycyAqLworCXNpemVfdCBpOworCXNpemVfdCBqOworCisJLyogSW5zdHJ1Y3Rpb24gc2xvdCAoMCwgMSwgb3IgMikgaW4gdGhlIDEyOC1iaXQgaW5zdHJ1Y3Rpb24gd29yZCAqLworCXVpbnQzMl90IHNsb3Q7CisKKwkvKiBCaXR3aXNlIG9mZnNldCBvZiB0aGUgaW5zdHJ1Y3Rpb24gaW5kaWNhdGVkIGJ5IHNsb3QgKi8KKwl1aW50MzJfdCBiaXRfcG9zOworCisJLyogYml0X3BvcyBzcGxpdCBpbnRvIGJ5dGUgYW5kIGJpdCBwYXJ0cyAqLworCXVpbnQzMl90IGJ5dGVfcG9zOworCXVpbnQzMl90IGJpdF9yZXM7CisKKwkvKiBBZGRyZXNzIHBhcnQgb2YgYW4gaW5zdHJ1Y3Rpb24gKi8KKwl1aW50MzJfdCBhZGRyOworCisJLyogTWFzayB1c2VkIHRvIGRldGVjdCB3aGljaCBpbnN0cnVjdGlvbnMgdG8gY29udmVydCAqLworCXVpbnQzMl90IG1hc2s7CisKKwkvKiA0MS1iaXQgaW5zdHJ1Y3Rpb24gc3RvcmVkIHNvbWV3aGVyZSBpbiB0aGUgbG93ZXN0IDQ4IGJpdHMgKi8KKwl1aW50NjRfdCBpbnN0cjsKKworCS8qIEluc3RydWN0aW9uIG5vcm1hbGl6ZWQgd2l0aCBiaXRfcmVzIGZvciBlYXNpZXIgbWFuaXB1bGF0aW9uICovCisJdWludDY0X3Qgbm9ybTsKKworCWZvciAoaSA9IDA7IGkgKyAxNiA8PSBzaXplOyBpICs9IDE2KSB7CisJCW1hc2sgPSBicmFuY2hfdGFibGVbYnVmW2ldICYgMHgxRl07CisJCWZvciAoc2xvdCA9IDAsIGJpdF9wb3MgPSA1OyBzbG90IDwgMzsgKytzbG90LCBiaXRfcG9zICs9IDQxKSB7CisJCQlpZiAoKChtYXNrID4+IHNsb3QpICYgMSkgPT0gMCkKKwkJCQljb250aW51ZTsKKworCQkJYnl0ZV9wb3MgPSBiaXRfcG9zID4+IDM7CisJCQliaXRfcmVzID0gYml0X3BvcyAmIDc7CisJCQlpbnN0ciA9IDA7CisJCQlmb3IgKGogPSAwOyBqIDwgNjsgKytqKQorCQkJCWluc3RyIHw9ICh1aW50NjRfdCkoYnVmW2kgKyBqICsgYnl0ZV9wb3NdKQorCQkJCQkJPDwgKDggKiBqKTsKKworCQkJbm9ybSA9IGluc3RyID4+IGJpdF9yZXM7CisKKwkJCWlmICgoKG5vcm0gPj4gMzcpICYgMHgwRikgPT0gMHgwNQorCQkJCQkmJiAoKG5vcm0gPj4gOSkgJiAweDA3KSA9PSAwKSB7CisJCQkJYWRkciA9IChub3JtID4+IDEzKSAmIDB4MEZGRkZGOworCQkJCWFkZHIgfD0gKCh1aW50MzJfdCkobm9ybSA+PiAzNikgJiAxKSA8PCAyMDsKKwkJCQlhZGRyIDw8PSA0OworCQkJCWFkZHIgLT0gcy0+cG9zICsgKHVpbnQzMl90KWk7CisJCQkJYWRkciA+Pj0gNDsKKworCQkJCW5vcm0gJj0gfigodWludDY0X3QpMHg4RkZGRkYgPDwgMTMpOworCQkJCW5vcm0gfD0gKHVpbnQ2NF90KShhZGRyICYgMHgwRkZGRkYpIDw8IDEzOworCQkJCW5vcm0gfD0gKHVpbnQ2NF90KShhZGRyICYgMHgxMDAwMDApCisJCQkJCQk8PCAoMzYgLSAyMCk7CisKKwkJCQlpbnN0ciAmPSAoMSA8PCBiaXRfcmVzKSAtIDE7CisJCQkJaW5zdHIgfD0gbm9ybSA8PCBiaXRfcmVzOworCisJCQkJZm9yIChqID0gMDsgaiA8IDY7IGorKykKKwkJCQkJYnVmW2kgKyBqICsgYnl0ZV9wb3NdCisJCQkJCQk9ICh1aW50OF90KShpbnN0ciA+PiAoOCAqIGopKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBpOworfQorI2VuZGlmCisKKyNpZmRlZiBYWl9ERUNfQVJNCitzdGF0aWMgc2l6ZV90IGJjal9hcm0oc3RydWN0IHh6X2RlY19iY2ogKnMsIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IGk7CisJdWludDMyX3QgYWRkcjsKKworCWZvciAoaSA9IDA7IGkgKyA0IDw9IHNpemU7IGkgKz0gNCkgeworCQlpZiAoYnVmW2kgKyAzXSA9PSAweEVCKSB7CisJCQlhZGRyID0gKHVpbnQzMl90KWJ1ZltpXSB8ICgodWludDMyX3QpYnVmW2kgKyAxXSA8PCA4KQorCQkJCQl8ICgodWludDMyX3QpYnVmW2kgKyAyXSA8PCAxNik7CisJCQlhZGRyIDw8PSAyOworCQkJYWRkciAtPSBzLT5wb3MgKyAodWludDMyX3QpaSArIDg7CisJCQlhZGRyID4+PSAyOworCQkJYnVmW2ldID0gKHVpbnQ4X3QpYWRkcjsKKwkJCWJ1ZltpICsgMV0gPSAodWludDhfdCkoYWRkciA+PiA4KTsKKwkJCWJ1ZltpICsgMl0gPSAodWludDhfdCkoYWRkciA+PiAxNik7CisJCX0KKwl9CisKKwlyZXR1cm4gaTsKK30KKyNlbmRpZgorCisjaWZkZWYgWFpfREVDX0FSTVRIVU1CCitzdGF0aWMgc2l6ZV90IGJjal9hcm10aHVtYihzdHJ1Y3QgeHpfZGVjX2JjaiAqcywgdWludDhfdCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzaXplX3QgaTsKKwl1aW50MzJfdCBhZGRyOworCisJZm9yIChpID0gMDsgaSArIDQgPD0gc2l6ZTsgaSArPSAyKSB7CisJCWlmICgoYnVmW2kgKyAxXSAmIDB4RjgpID09IDB4RjAKKwkJCQkmJiAoYnVmW2kgKyAzXSAmIDB4RjgpID09IDB4RjgpIHsKKwkJCWFkZHIgPSAoKCh1aW50MzJfdClidWZbaSArIDFdICYgMHgwNykgPDwgMTkpCisJCQkJCXwgKCh1aW50MzJfdClidWZbaV0gPDwgMTEpCisJCQkJCXwgKCgodWludDMyX3QpYnVmW2kgKyAzXSAmIDB4MDcpIDw8IDgpCisJCQkJCXwgKHVpbnQzMl90KWJ1ZltpICsgMl07CisJCQlhZGRyIDw8PSAxOworCQkJYWRkciAtPSBzLT5wb3MgKyAodWludDMyX3QpaSArIDQ7CisJCQlhZGRyID4+PSAxOworCQkJYnVmW2kgKyAxXSA9ICh1aW50OF90KSgweEYwIHwgKChhZGRyID4+IDE5KSAmIDB4MDcpKTsKKwkJCWJ1ZltpXSA9ICh1aW50OF90KShhZGRyID4+IDExKTsKKwkJCWJ1ZltpICsgM10gPSAodWludDhfdCkoMHhGOCB8ICgoYWRkciA+PiA4KSAmIDB4MDcpKTsKKwkJCWJ1ZltpICsgMl0gPSAodWludDhfdClhZGRyOworCQkJaSArPSAyOworCQl9CisJfQorCisJcmV0dXJuIGk7Cit9CisjZW5kaWYKKworI2lmZGVmIFhaX0RFQ19TUEFSQworc3RhdGljIHNpemVfdCBiY2pfc3BhcmMoc3RydWN0IHh6X2RlY19iY2ogKnMsIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IGk7CisJdWludDMyX3QgaW5zdHI7CisKKwlmb3IgKGkgPSAwOyBpICsgNCA8PSBzaXplOyBpICs9IDQpIHsKKwkJaW5zdHIgPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmICsgaSk7CisJCWlmICgoaW5zdHIgPj4gMjIpID09IDB4MTAwIHx8IChpbnN0ciA+PiAyMikgPT0gMHgxRkYpIHsKKwkJCWluc3RyIDw8PSAyOworCQkJaW5zdHIgLT0gcy0+cG9zICsgKHVpbnQzMl90KWk7CisJCQlpbnN0ciA+Pj0gMjsKKwkJCWluc3RyID0gKCh1aW50MzJfdCkweDQwMDAwMDAwIC0gKGluc3RyICYgMHg0MDAwMDApKQorCQkJCQl8IDB4NDAwMDAwMDAgfCAoaW5zdHIgJiAweDNGRkZGRik7CisJCQlwdXRfdW5hbGlnbmVkX2JlMzIoaW5zdHIsIGJ1ZiArIGkpOworCQl9CisJfQorCisJcmV0dXJuIGk7Cit9CisjZW5kaWYKKworLyoKKyAqIEFwcGx5IHRoZSBzZWxlY3RlZCBCQ0ogZmlsdGVyLiBVcGRhdGUgKnBvcyBhbmQgcy0+cG9zIHRvIG1hdGNoIHRoZSBhbW91bnQKKyAqIG9mIGRhdGEgdGhhdCBnb3QgZmlsdGVyZWQuCisgKgorICogTk9URTogVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIHN3aXRjaCBzdGF0ZW1lbnQgdG8gYXZvaWQgdXNpbmcgZnVuY3Rpb24KKyAqIHBvaW50ZXJzLCB3aGljaCBjb3VsZCBiZSBwcm9ibGVtYXRpYyBpbiB0aGUga2VybmVsIGJvb3QgY29kZSwgd2hpY2ggbXVzdAorICogYXZvaWQgcG9pbnRlcnMgdG8gc3RhdGljIGRhdGEgKGF0IGxlYXN0IG9uIHg4NikuCisgKi8KK3N0YXRpYyB2b2lkIGJjal9hcHBseShzdHJ1Y3QgeHpfZGVjX2JjaiAqcywKKwkJICAgICAgdWludDhfdCAqYnVmLCBzaXplX3QgKnBvcywgc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IGZpbHRlcmVkOworCisJYnVmICs9ICpwb3M7CisJc2l6ZSAtPSAqcG9zOworCisJc3dpdGNoIChzLT50eXBlKSB7CisjaWZkZWYgWFpfREVDX1g4NgorCWNhc2UgQkNKX1g4NjoKKwkJZmlsdGVyZWQgPSBiY2pfeDg2KHMsIGJ1Ziwgc2l6ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgWFpfREVDX1BPV0VSUEMKKwljYXNlIEJDSl9QT1dFUlBDOgorCQlmaWx0ZXJlZCA9IGJjal9wb3dlcnBjKHMsIGJ1Ziwgc2l6ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgWFpfREVDX0lBNjQKKwljYXNlIEJDSl9JQTY0OgorCQlmaWx0ZXJlZCA9IGJjal9pYTY0KHMsIGJ1Ziwgc2l6ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgWFpfREVDX0FSTQorCWNhc2UgQkNKX0FSTToKKwkJZmlsdGVyZWQgPSBiY2pfYXJtKHMsIGJ1Ziwgc2l6ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgWFpfREVDX0FSTVRIVU1CCisJY2FzZSBCQ0pfQVJNVEhVTUI6CisJCWZpbHRlcmVkID0gYmNqX2FybXRodW1iKHMsIGJ1Ziwgc2l6ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgWFpfREVDX1NQQVJDCisJY2FzZSBCQ0pfU1BBUkM6CisJCWZpbHRlcmVkID0gYmNqX3NwYXJjKHMsIGJ1Ziwgc2l6ZSk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJLyogTmV2ZXIgcmVhY2hlZCBidXQgc2lsZW5jZSBjb21waWxlciB3YXJuaW5ncy4gKi8KKwkJZmlsdGVyZWQgPSAwOworCQlicmVhazsKKwl9CisKKwkqcG9zICs9IGZpbHRlcmVkOworCXMtPnBvcyArPSBmaWx0ZXJlZDsKK30KKworLyoKKyAqIEZsdXNoIHBlbmRpbmcgZmlsdGVyZWQgZGF0YSBmcm9tIHRlbXAgdG8gdGhlIG91dHB1dCBidWZmZXIuCisgKiBNb3ZlIHRoZSByZW1haW5pbmcgbWl4dHVyZSBvZiBwb3NzaWJseSBmaWx0ZXJlZCBhbmQgdW5maWx0ZXJlZAorICogZGF0YSB0byB0aGUgYmVnaW5uaW5nIG9mIHRlbXAuCisgKi8KK3N0YXRpYyB2b2lkIGJjal9mbHVzaChzdHJ1Y3QgeHpfZGVjX2JjaiAqcywgc3RydWN0IHh6X2J1ZiAqYikKK3sKKwlzaXplX3QgY29weV9zaXplOworCisJY29weV9zaXplID0gbWluX3Qoc2l6ZV90LCBzLT50ZW1wLmZpbHRlcmVkLCBiLT5vdXRfc2l6ZSAtIGItPm91dF9wb3MpOworCW1lbWNweShiLT5vdXQgKyBiLT5vdXRfcG9zLCBzLT50ZW1wLmJ1ZiwgY29weV9zaXplKTsKKwliLT5vdXRfcG9zICs9IGNvcHlfc2l6ZTsKKworCXMtPnRlbXAuZmlsdGVyZWQgLT0gY29weV9zaXplOworCXMtPnRlbXAuc2l6ZSAtPSBjb3B5X3NpemU7CisJbWVtbW92ZShzLT50ZW1wLmJ1Ziwgcy0+dGVtcC5idWYgKyBjb3B5X3NpemUsIHMtPnRlbXAuc2l6ZSk7Cit9CisKKy8qCisgKiBUaGUgQkNKIGZpbHRlciBmdW5jdGlvbnMgYXJlIHByaW1pdGl2ZSBpbiBzZW5zZSB0aGF0IHRoZXkgcHJvY2VzcyB0aGUKKyAqIGRhdGEgaW4gY2h1bmtzIG9mIDEtMTYgYnl0ZXMuIFRvIGhpZGUgdGhpcyBpc3N1ZSwgdGhpcyBmdW5jdGlvbiBkb2VzCisgKiBzb21lIGJ1ZmZlcmluZy4KKyAqLworWFpfRVhURVJOIGVudW0geHpfcmV0IHh6X2RlY19iY2pfcnVuKHN0cnVjdCB4el9kZWNfYmNqICpzLAorCQkJCSAgICAgc3RydWN0IHh6X2RlY19sem1hMiAqbHptYTIsCisJCQkJICAgICBzdHJ1Y3QgeHpfYnVmICpiKQoreworCXNpemVfdCBvdXRfc3RhcnQ7CisKKwkvKgorCSAqIEZsdXNoIHBlbmRpbmcgYWxyZWFkeSBmaWx0ZXJlZCBkYXRhIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiBSZXR1cm4KKwkgKiBpbW1lZGlhdGVsbHkgaWYgd2UgY291bGRuJ3QgZmx1c2ggZXZlcnl0aGluZywgb3IgaWYgdGhlIG5leHQKKwkgKiBmaWx0ZXIgaW4gdGhlIGNoYWluIGhhZCBhbHJlYWR5IHJldHVybmVkIFhaX1NUUkVBTV9FTkQuCisJICovCisJaWYgKHMtPnRlbXAuZmlsdGVyZWQgPiAwKSB7CisJCWJjal9mbHVzaChzLCBiKTsKKwkJaWYgKHMtPnRlbXAuZmlsdGVyZWQgPiAwKQorCQkJcmV0dXJuIFhaX09LOworCisJCWlmIChzLT5yZXQgPT0gWFpfU1RSRUFNX0VORCkKKwkJCXJldHVybiBYWl9TVFJFQU1fRU5EOworCX0KKworCS8qCisJICogSWYgd2UgaGF2ZSBtb3JlIG91dHB1dCBzcGFjZSB0aGFuIHdoYXQgaXMgY3VycmVudGx5IHBlbmRpbmcgaW4KKwkgKiB0ZW1wLCBjb3B5IHRoZSB1bmZpbHRlcmVkIGRhdGEgZnJvbSB0ZW1wIHRvIHRoZSBvdXRwdXQgYnVmZmVyCisJICogYW5kIHRyeSB0byBmaWxsIHRoZSBvdXRwdXQgYnVmZmVyIGJ5IGRlY29kaW5nIG1vcmUgZGF0YSBmcm9tIHRoZQorCSAqIG5leHQgZmlsdGVyIGluIHRoZSBjaGFpbi4gQXBwbHkgdGhlIEJDSiBmaWx0ZXIgb24gdGhlIG5ldyBkYXRhCisJICogaW4gdGhlIG91dHB1dCBidWZmZXIuIElmIGV2ZXJ5dGhpbmcgY2Fubm90IGJlIGZpbHRlcmVkLCBjb3B5IGl0CisJICogdG8gdGVtcCBhbmQgcmV3aW5kIHRoZSBvdXRwdXQgYnVmZmVyIHBvc2l0aW9uIGFjY29yZGluZ2x5LgorCSAqLworCWlmIChzLT50ZW1wLnNpemUgPCBiLT5vdXRfc2l6ZSAtIGItPm91dF9wb3MpIHsKKwkJb3V0X3N0YXJ0ID0gYi0+b3V0X3BvczsKKwkJbWVtY3B5KGItPm91dCArIGItPm91dF9wb3MsIHMtPnRlbXAuYnVmLCBzLT50ZW1wLnNpemUpOworCQliLT5vdXRfcG9zICs9IHMtPnRlbXAuc2l6ZTsKKworCQlzLT5yZXQgPSB4el9kZWNfbHptYTJfcnVuKGx6bWEyLCBiKTsKKwkJaWYgKHMtPnJldCAhPSBYWl9TVFJFQU1fRU5ECisJCQkJJiYgKHMtPnJldCAhPSBYWl9PSyB8fCBzLT5zaW5nbGVfY2FsbCkpCisJCQlyZXR1cm4gcy0+cmV0OworCisJCWJjal9hcHBseShzLCBiLT5vdXQsICZvdXRfc3RhcnQsIGItPm91dF9wb3MpOworCisJCS8qCisJCSAqIEFzIGFuIGV4Y2VwdGlvbiwgaWYgdGhlIG5leHQgZmlsdGVyIHJldHVybmVkIFhaX1NUUkVBTV9FTkQsCisJCSAqIHdlIGNhbiBkbyB0aGF0IHRvbywgc2luY2UgdGhlIGxhc3QgZmV3IGJ5dGVzIHRoYXQgcmVtYWluCisJCSAqIHVuZmlsdGVyZWQgYXJlIG1lYW50IHRvIHJlbWFpbiB1bmZpbHRlcmVkLgorCQkgKi8KKwkJaWYgKHMtPnJldCA9PSBYWl9TVFJFQU1fRU5EKQorCQkJcmV0dXJuIFhaX1NUUkVBTV9FTkQ7CisKKwkJcy0+dGVtcC5zaXplID0gYi0+b3V0X3BvcyAtIG91dF9zdGFydDsKKwkJYi0+b3V0X3BvcyAtPSBzLT50ZW1wLnNpemU7CisJCW1lbWNweShzLT50ZW1wLmJ1ZiwgYi0+b3V0ICsgYi0+b3V0X3Bvcywgcy0+dGVtcC5zaXplKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGhhdmUgdW5maWx0ZXJlZCBkYXRhIGluIHRlbXAsIHRyeSB0byBmaWxsIGJ5IGRlY29kaW5nIG1vcmUKKwkgKiBkYXRhIGZyb20gdGhlIG5leHQgZmlsdGVyLiBBcHBseSB0aGUgQkNKIGZpbHRlciBvbiB0ZW1wLiBUaGVuIHdlCisJICogaG9wZWZ1bGx5IGNhbiBmaWxsIHRoZSBhY3R1YWwgb3V0cHV0IGJ1ZmZlciBieSBjb3B5aW5nIGZpbHRlcmVkCisJICogZGF0YSBmcm9tIHRlbXAuIEEgbWl4IG9mIGZpbHRlcmVkIGFuZCB1bmZpbHRlcmVkIGRhdGEgbWF5IGJlIGxlZnQKKwkgKiBpbiB0ZW1wOyBpdCB3aWxsIGJlIHRha2VuIGNhcmUgb24gdGhlIG5leHQgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorCSAqLworCWlmIChzLT50ZW1wLnNpemUgPiAwKSB7CisJCS8qIE1ha2UgYi0+b3V0eyxfcG9zLF9zaXplfSB0ZW1wb3JhcmlseSBwb2ludCB0byBzLT50ZW1wLiAqLworCQlzLT5vdXQgPSBiLT5vdXQ7CisJCXMtPm91dF9wb3MgPSBiLT5vdXRfcG9zOworCQlzLT5vdXRfc2l6ZSA9IGItPm91dF9zaXplOworCQliLT5vdXQgPSBzLT50ZW1wLmJ1ZjsKKwkJYi0+b3V0X3BvcyA9IHMtPnRlbXAuc2l6ZTsKKwkJYi0+b3V0X3NpemUgPSBzaXplb2Yocy0+dGVtcC5idWYpOworCisJCXMtPnJldCA9IHh6X2RlY19sem1hMl9ydW4obHptYTIsIGIpOworCisJCXMtPnRlbXAuc2l6ZSA9IGItPm91dF9wb3M7CisJCWItPm91dCA9IHMtPm91dDsKKwkJYi0+b3V0X3BvcyA9IHMtPm91dF9wb3M7CisJCWItPm91dF9zaXplID0gcy0+b3V0X3NpemU7CisKKwkJaWYgKHMtPnJldCAhPSBYWl9PSyAmJiBzLT5yZXQgIT0gWFpfU1RSRUFNX0VORCkKKwkJCXJldHVybiBzLT5yZXQ7CisKKwkJYmNqX2FwcGx5KHMsIHMtPnRlbXAuYnVmLCAmcy0+dGVtcC5maWx0ZXJlZCwgcy0+dGVtcC5zaXplKTsKKworCQkvKgorCQkgKiBJZiB0aGUgbmV4dCBmaWx0ZXIgcmV0dXJuZWQgWFpfU1RSRUFNX0VORCwgd2UgbWFyayB0aGF0CisJCSAqIGV2ZXJ5dGhpbmcgaXMgZmlsdGVyZWQsIHNpbmNlIHRoZSBsYXN0IHVuZmlsdGVyZWQgYnl0ZXMKKwkJICogb2YgdGhlIHN0cmVhbSBhcmUgbWVhbnQgdG8gYmUgbGVmdCBhcyBpcy4KKwkJICovCisJCWlmIChzLT5yZXQgPT0gWFpfU1RSRUFNX0VORCkKKwkJCXMtPnRlbXAuZmlsdGVyZWQgPSBzLT50ZW1wLnNpemU7CisKKwkJYmNqX2ZsdXNoKHMsIGIpOworCQlpZiAocy0+dGVtcC5maWx0ZXJlZCA+IDApCisJCQlyZXR1cm4gWFpfT0s7CisJfQorCisJcmV0dXJuIHMtPnJldDsKK30KKworWFpfRVhURVJOIHN0cnVjdCB4el9kZWNfYmNqICp4el9kZWNfYmNqX2NyZWF0ZShib29sIHNpbmdsZV9jYWxsKQoreworCXN0cnVjdCB4el9kZWNfYmNqICpzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAocyAhPSBOVUxMKQorCQlzLT5zaW5nbGVfY2FsbCA9IHNpbmdsZV9jYWxsOworCisJcmV0dXJuIHM7Cit9CisKK1haX0VYVEVSTiBlbnVtIHh6X3JldCB4el9kZWNfYmNqX3Jlc2V0KHN0cnVjdCB4el9kZWNfYmNqICpzLCB1aW50OF90IGlkKQoreworCXN3aXRjaCAoaWQpIHsKKyNpZmRlZiBYWl9ERUNfWDg2CisJY2FzZSBCQ0pfWDg2OgorI2VuZGlmCisjaWZkZWYgWFpfREVDX1BPV0VSUEMKKwljYXNlIEJDSl9QT1dFUlBDOgorI2VuZGlmCisjaWZkZWYgWFpfREVDX0lBNjQKKwljYXNlIEJDSl9JQTY0OgorI2VuZGlmCisjaWZkZWYgWFpfREVDX0FSTQorCWNhc2UgQkNKX0FSTToKKyNlbmRpZgorI2lmZGVmIFhaX0RFQ19BUk1USFVNQgorCWNhc2UgQkNKX0FSTVRIVU1COgorI2VuZGlmCisjaWZkZWYgWFpfREVDX1NQQVJDCisJY2FzZSBCQ0pfU1BBUkM6CisjZW5kaWYKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBVbnN1cHBvcnRlZCBGaWx0ZXIgSUQgKi8KKwkJcmV0dXJuIFhaX09QVElPTlNfRVJST1I7CisJfQorCisJcy0+dHlwZSA9IGlkOworCXMtPnJldCA9IFhaX09LOworCXMtPnBvcyA9IDA7CisJcy0+eDg2X3ByZXZfbWFzayA9IDA7CisJcy0+dGVtcC5maWx0ZXJlZCA9IDA7CisJcy0+dGVtcC5zaXplID0gMDsKKworCXJldHVybiBYWl9PSzsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIveHoveHpfZGVjX2x6bWEyLmMgYi9saWIveHoveHpfZGVjX2x6bWEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE1ZmE0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi94ei94el9kZWNfbHptYTIuYwpAQCAtMCwwICsxLDExNzEgQEAKKy8qCisgKiBMWk1BMiBkZWNvZGVyCisgKgorICogQXV0aG9yczogTGFzc2UgQ29sbGluIDxsYXNzZS5jb2xsaW5AdHVrYWFuaS5vcmc+CisgKiAgICAgICAgICBJZ29yIFBhdmxvdiA8aHR0cDovLzctemlwLm9yZy8+CisgKgorICogVGhpcyBmaWxlIGhhcyBiZWVuIHB1dCBpbnRvIHRoZSBwdWJsaWMgZG9tYWluLgorICogWW91IGNhbiBkbyB3aGF0ZXZlciB5b3Ugd2FudCB3aXRoIHRoaXMgZmlsZS4KKyAqLworCisjaW5jbHVkZSAieHpfcHJpdmF0ZS5oIgorI2luY2x1ZGUgInh6X2x6bWEyLmgiCisKKy8qCisgKiBSYW5nZSBkZWNvZGVyIGluaXRpYWxpemF0aW9uIGVhdHMgdGhlIGZpcnN0IGZpdmUgYnl0ZXMgb2YgZWFjaCBMWk1BIGNodW5rLgorICovCisjZGVmaW5lIFJDX0lOSVRfQllURVMgNQorCisvKgorICogTWluaW11bSBudW1iZXIgb2YgdXNhYmxlIGlucHV0IGJ1ZmZlciB0byBzYWZlbHkgZGVjb2RlIG9uZSBMWk1BIHN5bWJvbC4KKyAqIFRoZSB3b3JzdCBjYXNlIGlzIHRoYXQgd2UgZGVjb2RlIDIyIGJpdHMgdXNpbmcgcHJvYmFiaWxpdGllcyBhbmQgMjYKKyAqIGRpcmVjdCBiaXRzLiBUaGlzIG1heSBkZWNvZGUgYXQgbWF4aW11bSBvZiAyMCBieXRlcyBvZiBpbnB1dC4gSG93ZXZlciwKKyAqIGx6bWFfbWFpbigpIGRvZXMgYW4gZXh0cmEgbm9ybWFsaXphdGlvbiBiZWZvcmUgcmV0dXJuaW5nLCB0aHVzIHdlCisgKiBuZWVkIHRvIHB1dCAyMSBoZXJlLgorICovCisjZGVmaW5lIExaTUFfSU5fUkVRVUlSRUQgMjEKKworLyoKKyAqIERpY3Rpb25hcnkgKGhpc3RvcnkgYnVmZmVyKQorICoKKyAqIFRoZXNlIGFyZSBhbHdheXMgdHJ1ZToKKyAqICAgIHN0YXJ0IDw9IHBvcyA8PSBmdWxsIDw9IGVuZAorICogICAgcG9zIDw9IGxpbWl0IDw9IGVuZAorICoKKyAqIEluIG11bHRpLWNhbGwgbW9kZSwgYWxzbyB0aGVzZSBhcmUgdHJ1ZToKKyAqICAgIGVuZCA9PSBzaXplCisgKiAgICBzaXplIDw9IHNpemVfbWF4CisgKiAgICBhbGxvY2F0ZWQgPD0gc2l6ZQorICoKKyAqIE1vc3Qgb2YgdGhlc2UgdmFyaWFibGVzIGFyZSBzaXplX3QgdG8gc3VwcG9ydCBzaW5nbGUtY2FsbCBtb2RlLAorICogaW4gd2hpY2ggdGhlIGRpY3Rpb25hcnkgdmFyaWFibGVzIGFkZHJlc3MgdGhlIGFjdHVhbCBvdXRwdXQKKyAqIGJ1ZmZlciBkaXJlY3RseS4KKyAqLworc3RydWN0IGRpY3Rpb25hcnkgeworCS8qIEJlZ2lubmluZyBvZiB0aGUgaGlzdG9yeSBidWZmZXIgKi8KKwl1aW50OF90ICpidWY7CisKKwkvKiBPbGQgcG9zaXRpb24gaW4gYnVmIChiZWZvcmUgZGVjb2RpbmcgbW9yZSBkYXRhKSAqLworCXNpemVfdCBzdGFydDsKKworCS8qIFBvc2l0aW9uIGluIGJ1ZiAqLworCXNpemVfdCBwb3M7CisKKwkvKgorCSAqIEhvdyBmdWxsIGRpY3Rpb25hcnkgaXMuIFRoaXMgaXMgdXNlZCB0byBkZXRlY3QgY29ycnVwdCBpbnB1dCB0aGF0CisJICogd291bGQgcmVhZCBiZXlvbmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbS4KKwkgKi8KKwlzaXplX3QgZnVsbDsKKworCS8qIFdyaXRlIGxpbWl0OyB3ZSBkb24ndCB3cml0ZSB0byBidWZbbGltaXRdIG9yIGxhdGVyIGJ5dGVzLiAqLworCXNpemVfdCBsaW1pdDsKKworCS8qCisJICogRW5kIG9mIHRoZSBkaWN0aW9uYXJ5IGJ1ZmZlci4gSW4gbXVsdGktY2FsbCBtb2RlLCB0aGlzIGlzCisJICogdGhlIHNhbWUgYXMgdGhlIGRpY3Rpb25hcnkgc2l6ZS4gSW4gc2luZ2xlLWNhbGwgbW9kZSwgdGhpcworCSAqIGluZGljYXRlcyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlci4KKwkgKi8KKwlzaXplX3QgZW5kOworCisJLyoKKwkgKiBTaXplIG9mIHRoZSBkaWN0aW9uYXJ5IGFzIHNwZWNpZmllZCBpbiBCbG9jayBIZWFkZXIuIFRoaXMgaXMgdXNlZAorCSAqIHRvZ2V0aGVyIHdpdGggImZ1bGwiIHRvIGRldGVjdCBjb3JydXB0IGlucHV0IHRoYXQgd291bGQgbWFrZSB1cworCSAqIHJlYWQgYmV5b25kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVuY29tcHJlc3NlZCBzdHJlYW0uCisJICovCisJdWludDMyX3Qgc2l6ZTsKKworCS8qCisJICogTWF4aW11bSBhbGxvd2VkIGRpY3Rpb25hcnkgc2l6ZSBpbiBtdWx0aS1jYWxsIG1vZGUuCisJICogVGhpcyBpcyBpZ25vcmVkIGluIHNpbmdsZS1jYWxsIG1vZGUuCisJICovCisJdWludDMyX3Qgc2l6ZV9tYXg7CisKKwkvKgorCSAqIEFtb3VudCBvZiBtZW1vcnkgY3VycmVudGx5IGFsbG9jYXRlZCBmb3IgdGhlIGRpY3Rpb25hcnkuCisJICogVGhpcyBpcyB1c2VkIG9ubHkgd2l0aCBYWl9EWU5BTExPQy4gKFdpdGggWFpfUFJFQUxMT0MsCisJICogc2l6ZV9tYXggaXMgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBhbGxvY2F0ZWQgc2l6ZS4pCisJICovCisJdWludDMyX3QgYWxsb2NhdGVkOworCisJLyogT3BlcmF0aW9uIG1vZGUgKi8KKwllbnVtIHh6X21vZGUgbW9kZTsKK307CisKKy8qIFJhbmdlIGRlY29kZXIgKi8KK3N0cnVjdCByY19kZWMgeworCXVpbnQzMl90IHJhbmdlOworCXVpbnQzMl90IGNvZGU7CisKKwkvKgorCSAqIE51bWJlciBvZiBpbml0aWFsaXppbmcgYnl0ZXMgcmVtYWluaW5nIHRvIGJlIHJlYWQKKwkgKiBieSByY19yZWFkX2luaXQoKS4KKwkgKi8KKwl1aW50MzJfdCBpbml0X2J5dGVzX2xlZnQ7CisKKwkvKgorCSAqIEJ1ZmZlciBmcm9tIHdoaWNoIHdlIHJlYWQgb3VyIGlucHV0LiBJdCBjYW4gYmUgZWl0aGVyCisJICogdGVtcC5idWYgb3IgdGhlIGNhbGxlci1wcm92aWRlZCBpbnB1dCBidWZmZXIuCisJICovCisJY29uc3QgdWludDhfdCAqaW47CisJc2l6ZV90IGluX3BvczsKKwlzaXplX3QgaW5fbGltaXQ7Cit9OworCisvKiBQcm9iYWJpbGl0aWVzIGZvciBhIGxlbmd0aCBkZWNvZGVyLiAqLworc3RydWN0IGx6bWFfbGVuX2RlYyB7CisJLyogUHJvYmFiaWxpdHkgb2YgbWF0Y2ggbGVuZ3RoIGJlaW5nIGF0IGxlYXN0IDEwICovCisJdWludDE2X3QgY2hvaWNlOworCisJLyogUHJvYmFiaWxpdHkgb2YgbWF0Y2ggbGVuZ3RoIGJlaW5nIGF0IGxlYXN0IDE4ICovCisJdWludDE2X3QgY2hvaWNlMjsKKworCS8qIFByb2JhYmlsaXRpZXMgZm9yIG1hdGNoIGxlbmd0aHMgMi05ICovCisJdWludDE2X3QgbG93W1BPU19TVEFURVNfTUFYXVtMRU5fTE9XX1NZTUJPTFNdOworCisJLyogUHJvYmFiaWxpdGllcyBmb3IgbWF0Y2ggbGVuZ3RocyAxMC0xNyAqLworCXVpbnQxNl90IG1pZFtQT1NfU1RBVEVTX01BWF1bTEVOX01JRF9TWU1CT0xTXTsKKworCS8qIFByb2JhYmlsaXRpZXMgZm9yIG1hdGNoIGxlbmd0aHMgMTgtMjczICovCisJdWludDE2X3QgaGlnaFtMRU5fSElHSF9TWU1CT0xTXTsKK307CisKK3N0cnVjdCBsem1hX2RlYyB7CisJLyogRGlzdGFuY2VzIG9mIGxhdGVzdCBmb3VyIG1hdGNoZXMgKi8KKwl1aW50MzJfdCByZXAwOworCXVpbnQzMl90IHJlcDE7CisJdWludDMyX3QgcmVwMjsKKwl1aW50MzJfdCByZXAzOworCisJLyogVHlwZXMgb2YgdGhlIG1vc3QgcmVjZW50bHkgc2VlbiBMWk1BIHN5bWJvbHMgKi8KKwllbnVtIGx6bWFfc3RhdGUgc3RhdGU7CisKKwkvKgorCSAqIExlbmd0aCBvZiBhIG1hdGNoLiBUaGlzIGlzIHVwZGF0ZWQgc28gdGhhdCBkaWN0X3JlcGVhdCBjYW4KKwkgKiBiZSBjYWxsZWQgYWdhaW4gdG8gZmluaXNoIHJlcGVhdGluZyB0aGUgd2hvbGUgbWF0Y2guCisJICovCisJdWludDMyX3QgbGVuOworCisJLyoKKwkgKiBMWk1BIHByb3BlcnRpZXMgb3IgcmVsYXRlZCBiaXQgbWFza3MgKG51bWJlciBvZiBsaXRlcmFsCisJICogY29udGV4dCBiaXRzLCBhIG1hc2sgZGVydmllZCBmcm9tIHRoZSBudW1iZXIgb2YgbGl0ZXJhbAorCSAqIHBvc2l0aW9uIGJpdHMsIGFuZCBhIG1hc2sgZGVydmllZCBmcm9tIHRoZSBudW1iZXIKKwkgKiBwb3NpdGlvbiBiaXRzKQorCSAqLworCXVpbnQzMl90IGxjOworCXVpbnQzMl90IGxpdGVyYWxfcG9zX21hc2s7IC8qICgxIDw8IGxwKSAtIDEgKi8KKwl1aW50MzJfdCBwb3NfbWFzazsgICAgICAgICAvKiAoMSA8PCBwYikgLSAxICovCisKKwkvKiBJZiAxLCBpdCdzIGEgbWF0Y2guIE90aGVyd2lzZSBpdCdzIGEgc2luZ2xlIDgtYml0IGxpdGVyYWwuICovCisJdWludDE2X3QgaXNfbWF0Y2hbU1RBVEVTXVtQT1NfU1RBVEVTX01BWF07CisKKwkvKiBJZiAxLCBpdCdzIGEgcmVwZWF0ZWQgbWF0Y2guIFRoZSBkaXN0YW5jZSBpcyBvbmUgb2YgcmVwMCAuLiByZXAzLiAqLworCXVpbnQxNl90IGlzX3JlcFtTVEFURVNdOworCisJLyoKKwkgKiBJZiAwLCBkaXN0YW5jZSBvZiBhIHJlcGVhdGVkIG1hdGNoIGlzIHJlcDAuCisJICogT3RoZXJ3aXNlIGNoZWNrIGlzX3JlcDEuCisJICovCisJdWludDE2X3QgaXNfcmVwMFtTVEFURVNdOworCisJLyoKKwkgKiBJZiAwLCBkaXN0YW5jZSBvZiBhIHJlcGVhdGVkIG1hdGNoIGlzIHJlcDEuCisJICogT3RoZXJ3aXNlIGNoZWNrIGlzX3JlcDIuCisJICovCisJdWludDE2X3QgaXNfcmVwMVtTVEFURVNdOworCisJLyogSWYgMCwgZGlzdGFuY2Ugb2YgYSByZXBlYXRlZCBtYXRjaCBpcyByZXAyLiBPdGhlcndpc2UgaXQgaXMgcmVwMy4gKi8KKwl1aW50MTZfdCBpc19yZXAyW1NUQVRFU107CisKKwkvKgorCSAqIElmIDEsIHRoZSByZXBlYXRlZCBtYXRjaCBoYXMgbGVuZ3RoIG9mIG9uZSBieXRlLiBPdGhlcndpc2UKKwkgKiB0aGUgbGVuZ3RoIGlzIGRlY29kZWQgZnJvbSByZXBfbGVuX2RlY29kZXIuCisJICovCisJdWludDE2X3QgaXNfcmVwMF9sb25nW1NUQVRFU11bUE9TX1NUQVRFU19NQVhdOworCisJLyoKKwkgKiBQcm9iYWJpbGl0eSB0cmVlIGZvciB0aGUgaGlnaGVzdCB0d28gYml0cyBvZiB0aGUgbWF0Y2gKKwkgKiBkaXN0YW5jZS4gVGhlcmUgaXMgYSBzZXBhcmF0ZSBwcm9iYWJpbGl0eSB0cmVlIGZvciBtYXRjaAorCSAqIGxlbmd0aHMgb2YgMiAoaS5lLiBNQVRDSF9MRU5fTUlOKSwgMywgNCwgYW5kIFs1LCAyNzNdLgorCSAqLworCXVpbnQxNl90IGRpc3Rfc2xvdFtESVNUX1NUQVRFU11bRElTVF9TTE9UU107CisKKwkvKgorCSAqIFByb2JpbGl0eSB0cmVlcyBmb3IgYWRkaXRpb25hbCBiaXRzIGZvciBtYXRjaCBkaXN0YW5jZQorCSAqIHdoZW4gdGhlIGRpc3RhbmNlIGlzIGluIHRoZSByYW5nZSBbNCwgMTI3XS4KKwkgKi8KKwl1aW50MTZfdCBkaXN0X3NwZWNpYWxbRlVMTF9ESVNUQU5DRVMgLSBESVNUX01PREVMX0VORF07CisKKwkvKgorCSAqIFByb2JhYmlsaXR5IHRyZWUgZm9yIHRoZSBsb3dlc3QgZm91ciBiaXRzIG9mIGEgbWF0Y2gKKwkgKiBkaXN0YW5jZSB0aGF0IGlzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAxMjguCisJICovCisJdWludDE2X3QgZGlzdF9hbGlnbltBTElHTl9TSVpFXTsKKworCS8qIExlbmd0aCBvZiBhIG5vcm1hbCBtYXRjaCAqLworCXN0cnVjdCBsem1hX2xlbl9kZWMgbWF0Y2hfbGVuX2RlYzsKKworCS8qIExlbmd0aCBvZiBhIHJlcGVhdGVkIG1hdGNoICovCisJc3RydWN0IGx6bWFfbGVuX2RlYyByZXBfbGVuX2RlYzsKKworCS8qIFByb2JhYmlsaXRpZXMgb2YgbGl0ZXJhbHMgKi8KKwl1aW50MTZfdCBsaXRlcmFsW0xJVEVSQUxfQ09ERVJTX01BWF1bTElURVJBTF9DT0RFUl9TSVpFXTsKK307CisKK3N0cnVjdCBsem1hMl9kZWMgeworCS8qIFBvc2l0aW9uIGluIHh6X2RlY19sem1hMl9ydW4oKS4gKi8KKwllbnVtIGx6bWEyX3NlcSB7CisJCVNFUV9DT05UUk9MLAorCQlTRVFfVU5DT01QUkVTU0VEXzEsCisJCVNFUV9VTkNPTVBSRVNTRURfMiwKKwkJU0VRX0NPTVBSRVNTRURfMCwKKwkJU0VRX0NPTVBSRVNTRURfMSwKKwkJU0VRX1BST1BFUlRJRVMsCisJCVNFUV9MWk1BX1BSRVBBUkUsCisJCVNFUV9MWk1BX1JVTiwKKwkJU0VRX0NPUFkKKwl9IHNlcXVlbmNlOworCisJLyogTmV4dCBwb3NpdGlvbiBhZnRlciBkZWNvZGluZyB0aGUgY29tcHJlc3NlZCBzaXplIG9mIHRoZSBjaHVuay4gKi8KKwllbnVtIGx6bWEyX3NlcSBuZXh0X3NlcXVlbmNlOworCisJLyogVW5jb21wcmVzc2VkIHNpemUgb2YgTFpNQSBjaHVuayAoMiBNaUIgYXQgbWF4aW11bSkgKi8KKwl1aW50MzJfdCB1bmNvbXByZXNzZWQ7CisKKwkvKgorCSAqIENvbXByZXNzZWQgc2l6ZSBvZiBMWk1BIGNodW5rIG9yIGNvbXByZXNzZWQvdW5jb21wcmVzc2VkCisJICogc2l6ZSBvZiB1bmNvbXByZXNzZWQgY2h1bmsgKDY0IEtpQiBhdCBtYXhpbXVtKQorCSAqLworCXVpbnQzMl90IGNvbXByZXNzZWQ7CisKKwkvKgorCSAqIFRydWUgaWYgZGljdGlvbmFyeSByZXNldCBpcyBuZWVkZWQuIFRoaXMgaXMgZmFsc2UgYmVmb3JlCisJICogdGhlIGZpcnN0IGNodW5rIChMWk1BIG9yIHVuY29tcHJlc3NlZCkuCisJICovCisJYm9vbCBuZWVkX2RpY3RfcmVzZXQ7CisKKwkvKgorCSAqIFRydWUgaWYgbmV3IExaTUEgcHJvcGVydGllcyBhcmUgbmVlZGVkLiBUaGlzIGlzIGZhbHNlCisJICogYmVmb3JlIHRoZSBmaXJzdCBMWk1BIGNodW5rLgorCSAqLworCWJvb2wgbmVlZF9wcm9wczsKK307CisKK3N0cnVjdCB4el9kZWNfbHptYTIgeworCS8qCisJICogVGhlIG9yZGVyIGJlbG93IGlzIGltcG9ydGFudCBvbiB4ODYgdG8gcmVkdWNlIGNvZGUgc2l6ZSBhbmQKKwkgKiBpdCBzaG91bGRuJ3QgaHVydCBvbiBvdGhlciBwbGF0Zm9ybXMuIEV2ZXJ5dGhpbmcgdXAgdG8gYW5kCisJICogaW5jbHVkaW5nIGx6bWEucG9zX21hc2sgYXJlIGluIHRoZSBmaXJzdCAxMjggYnl0ZXMgb24geDg2LTMyLAorCSAqIHdoaWNoIGFsbG93cyB1c2luZyBzbWFsbGVyIGluc3RydWN0aW9ucyB0byBhY2Nlc3MgdGhvc2UKKwkgKiB2YXJpYWJsZXMuIE9uIHg4Ni02NCwgZmV3ZXIgdmFyaWFibGVzIGZpdCBpbnRvIHRoZSBmaXJzdCAxMjgKKwkgKiBieXRlcywgYnV0IHRoaXMgaXMgc3RpbGwgdGhlIGJlc3Qgb3JkZXIgd2l0aG91dCBzYWNyaWZpY2luZworCSAqIHRoZSByZWFkYWJpbGl0eSBieSBzcGxpdHRpbmcgdGhlIHN0cnVjdHVyZXMuCisJICovCisJc3RydWN0IHJjX2RlYyByYzsKKwlzdHJ1Y3QgZGljdGlvbmFyeSBkaWN0OworCXN0cnVjdCBsem1hMl9kZWMgbHptYTI7CisJc3RydWN0IGx6bWFfZGVjIGx6bWE7CisKKwkvKgorCSAqIFRlbXBvcmFyeSBidWZmZXIgd2hpY2ggaG9sZHMgc21hbGwgbnVtYmVyIG9mIGlucHV0IGJ5dGVzIGJldHdlZW4KKwkgKiBkZWNvZGVyIGNhbGxzLiBTZWUgbHptYTJfbHptYSgpIGZvciBkZXRhaWxzLgorCSAqLworCXN0cnVjdCB7CisJCXVpbnQzMl90IHNpemU7CisJCXVpbnQ4X3QgYnVmWzMgKiBMWk1BX0lOX1JFUVVJUkVEXTsKKwl9IHRlbXA7Cit9OworCisvKioqKioqKioqKioqKioKKyAqIERpY3Rpb25hcnkgKgorICoqKioqKioqKioqKioqLworCisvKgorICogUmVzZXQgdGhlIGRpY3Rpb25hcnkgc3RhdGUuIFdoZW4gaW4gc2luZ2xlLWNhbGwgbW9kZSwgc2V0IHVwIHRoZSBiZWdpbm5pbmcKKyAqIG9mIHRoZSBkaWN0aW9uYXJ5IHRvIHBvaW50IHRvIHRoZSBhY3R1YWwgb3V0cHV0IGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgZGljdF9yZXNldChzdHJ1Y3QgZGljdGlvbmFyeSAqZGljdCwgc3RydWN0IHh6X2J1ZiAqYikKK3sKKwlpZiAoREVDX0lTX1NJTkdMRShkaWN0LT5tb2RlKSkgeworCQlkaWN0LT5idWYgPSBiLT5vdXQgKyBiLT5vdXRfcG9zOworCQlkaWN0LT5lbmQgPSBiLT5vdXRfc2l6ZSAtIGItPm91dF9wb3M7CisJfQorCisJZGljdC0+c3RhcnQgPSAwOworCWRpY3QtPnBvcyA9IDA7CisJZGljdC0+bGltaXQgPSAwOworCWRpY3QtPmZ1bGwgPSAwOworfQorCisvKiBTZXQgZGljdGlvbmFyeSB3cml0ZSBsaW1pdCAqLworc3RhdGljIHZvaWQgZGljdF9saW1pdChzdHJ1Y3QgZGljdGlvbmFyeSAqZGljdCwgc2l6ZV90IG91dF9tYXgpCit7CisJaWYgKGRpY3QtPmVuZCAtIGRpY3QtPnBvcyA8PSBvdXRfbWF4KQorCQlkaWN0LT5saW1pdCA9IGRpY3QtPmVuZDsKKwllbHNlCisJCWRpY3QtPmxpbWl0ID0gZGljdC0+cG9zICsgb3V0X21heDsKK30KKworLyogUmV0dXJuIHRydWUgaWYgYXQgbGVhc3Qgb25lIGJ5dGUgY2FuIGJlIHdyaXR0ZW4gaW50byB0aGUgZGljdGlvbmFyeS4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBkaWN0X2hhc19zcGFjZShjb25zdCBzdHJ1Y3QgZGljdGlvbmFyeSAqZGljdCkKK3sKKwlyZXR1cm4gZGljdC0+cG9zIDwgZGljdC0+bGltaXQ7Cit9CisKKy8qCisgKiBHZXQgYSBieXRlIGZyb20gdGhlIGRpY3Rpb25hcnkgYXQgdGhlIGdpdmVuIGRpc3RhbmNlLiBUaGUgZGlzdGFuY2UgaXMKKyAqIGFzc3VtZWQgdG8gdmFsaWQsIG9yIGFzIGEgc3BlY2lhbCBjYXNlLCB6ZXJvIHdoZW4gdGhlIGRpY3Rpb25hcnkgaXMKKyAqIHN0aWxsIGVtcHR5LiBUaGlzIHNwZWNpYWwgY2FzZSBpcyBuZWVkZWQgZm9yIHNpbmdsZS1jYWxsIGRlY29kaW5nIHRvCisgKiBhdm9pZCB3cml0aW5nIGEgJ1wwJyB0byB0aGUgZW5kIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZGljdF9nZXQoY29uc3Qgc3RydWN0IGRpY3Rpb25hcnkgKmRpY3QsIHVpbnQzMl90IGRpc3QpCit7CisJc2l6ZV90IG9mZnNldCA9IGRpY3QtPnBvcyAtIGRpc3QgLSAxOworCisJaWYgKGRpc3QgPj0gZGljdC0+cG9zKQorCQlvZmZzZXQgKz0gZGljdC0+ZW5kOworCisJcmV0dXJuIGRpY3QtPmZ1bGwgPiAwID8gZGljdC0+YnVmW29mZnNldF0gOiAwOworfQorCisvKgorICogUHV0IG9uZSBieXRlIGludG8gdGhlIGRpY3Rpb25hcnkuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGVyZSBpcyBzcGFjZSBmb3IgaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkaWN0X3B1dChzdHJ1Y3QgZGljdGlvbmFyeSAqZGljdCwgdWludDhfdCBieXRlKQoreworCWRpY3QtPmJ1ZltkaWN0LT5wb3MrK10gPSBieXRlOworCisJaWYgKGRpY3QtPmZ1bGwgPCBkaWN0LT5wb3MpCisJCWRpY3QtPmZ1bGwgPSBkaWN0LT5wb3M7Cit9CisKKy8qCisgKiBSZXBlYXQgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIGdpdmVuIGRpc3RhbmNlLiBJZiB0aGUgZGlzdGFuY2UgaXMKKyAqIGludmFsaWQsIGZhbHNlIGlzIHJldHVybmVkLiBPbiBzdWNjZXNzLCB0cnVlIGlzIHJldHVybmVkIGFuZCAqbGVuIGlzCisgKiB1cGRhdGVkIHRvIGluZGljYXRlIGhvdyBtYW55IGJ5dGVzIHdlcmUgbGVmdCB0byBiZSByZXBlYXRlZC4KKyAqLworc3RhdGljIGJvb2wgZGljdF9yZXBlYXQoc3RydWN0IGRpY3Rpb25hcnkgKmRpY3QsIHVpbnQzMl90ICpsZW4sIHVpbnQzMl90IGRpc3QpCit7CisJc2l6ZV90IGJhY2s7CisJdWludDMyX3QgbGVmdDsKKworCWlmIChkaXN0ID49IGRpY3QtPmZ1bGwgfHwgZGlzdCA+PSBkaWN0LT5zaXplKQorCQlyZXR1cm4gZmFsc2U7CisKKwlsZWZ0ID0gbWluX3Qoc2l6ZV90LCBkaWN0LT5saW1pdCAtIGRpY3QtPnBvcywgKmxlbik7CisJKmxlbiAtPSBsZWZ0OworCisJYmFjayA9IGRpY3QtPnBvcyAtIGRpc3QgLSAxOworCWlmIChkaXN0ID49IGRpY3QtPnBvcykKKwkJYmFjayArPSBkaWN0LT5lbmQ7CisKKwlkbyB7CisJCWRpY3QtPmJ1ZltkaWN0LT5wb3MrK10gPSBkaWN0LT5idWZbYmFjaysrXTsKKwkJaWYgKGJhY2sgPT0gZGljdC0+ZW5kKQorCQkJYmFjayA9IDA7CisJfSB3aGlsZSAoLS1sZWZ0ID4gMCk7CisKKwlpZiAoZGljdC0+ZnVsbCA8IGRpY3QtPnBvcykKKwkJZGljdC0+ZnVsbCA9IGRpY3QtPnBvczsKKworCXJldHVybiB0cnVlOworfQorCisvKiBDb3B5IHVuY29tcHJlc3NlZCBkYXRhIGFzIGlzIGZyb20gaW5wdXQgdG8gZGljdGlvbmFyeSBhbmQgb3V0cHV0IGJ1ZmZlcnMuICovCitzdGF0aWMgdm9pZCBkaWN0X3VuY29tcHJlc3NlZChzdHJ1Y3QgZGljdGlvbmFyeSAqZGljdCwgc3RydWN0IHh6X2J1ZiAqYiwKKwkJCSAgICAgIHVpbnQzMl90ICpsZWZ0KQoreworCXNpemVfdCBjb3B5X3NpemU7CisKKwl3aGlsZSAoKmxlZnQgPiAwICYmIGItPmluX3BvcyA8IGItPmluX3NpemUKKwkJCSYmIGItPm91dF9wb3MgPCBiLT5vdXRfc2l6ZSkgeworCQljb3B5X3NpemUgPSBtaW4oYi0+aW5fc2l6ZSAtIGItPmluX3BvcywKKwkJCQliLT5vdXRfc2l6ZSAtIGItPm91dF9wb3MpOworCQlpZiAoY29weV9zaXplID4gZGljdC0+ZW5kIC0gZGljdC0+cG9zKQorCQkJY29weV9zaXplID0gZGljdC0+ZW5kIC0gZGljdC0+cG9zOworCQlpZiAoY29weV9zaXplID4gKmxlZnQpCisJCQljb3B5X3NpemUgPSAqbGVmdDsKKworCQkqbGVmdCAtPSBjb3B5X3NpemU7CisKKwkJbWVtY3B5KGRpY3QtPmJ1ZiArIGRpY3QtPnBvcywgYi0+aW4gKyBiLT5pbl9wb3MsIGNvcHlfc2l6ZSk7CisJCWRpY3QtPnBvcyArPSBjb3B5X3NpemU7CisKKwkJaWYgKGRpY3QtPmZ1bGwgPCBkaWN0LT5wb3MpCisJCQlkaWN0LT5mdWxsID0gZGljdC0+cG9zOworCisJCWlmIChERUNfSVNfTVVMVEkoZGljdC0+bW9kZSkpIHsKKwkJCWlmIChkaWN0LT5wb3MgPT0gZGljdC0+ZW5kKQorCQkJCWRpY3QtPnBvcyA9IDA7CisKKwkJCW1lbWNweShiLT5vdXQgKyBiLT5vdXRfcG9zLCBiLT5pbiArIGItPmluX3BvcywKKwkJCQkJY29weV9zaXplKTsKKwkJfQorCisJCWRpY3QtPnN0YXJ0ID0gZGljdC0+cG9zOworCisJCWItPm91dF9wb3MgKz0gY29weV9zaXplOworCQliLT5pbl9wb3MgKz0gY29weV9zaXplOworCX0KK30KKworLyoKKyAqIEZsdXNoIHBlbmRpbmcgZGF0YSBmcm9tIGRpY3Rpb25hcnkgdG8gYi0+b3V0LiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlcmUgaXMKKyAqIGVub3VnaCBzcGFjZSBpbiBiLT5vdXQuIFRoaXMgaXMgZ3VhcmFudGVlZCBiZWNhdXNlIGNhbGxlciB1c2VzIGRpY3RfbGltaXQoKQorICogYmVmb3JlIGRlY29kaW5nIGRhdGEgaW50byB0aGUgZGljdGlvbmFyeS4KKyAqLworc3RhdGljIHVpbnQzMl90IGRpY3RfZmx1c2goc3RydWN0IGRpY3Rpb25hcnkgKmRpY3QsIHN0cnVjdCB4el9idWYgKmIpCit7CisJc2l6ZV90IGNvcHlfc2l6ZSA9IGRpY3QtPnBvcyAtIGRpY3QtPnN0YXJ0OworCisJaWYgKERFQ19JU19NVUxUSShkaWN0LT5tb2RlKSkgeworCQlpZiAoZGljdC0+cG9zID09IGRpY3QtPmVuZCkKKwkJCWRpY3QtPnBvcyA9IDA7CisKKwkJbWVtY3B5KGItPm91dCArIGItPm91dF9wb3MsIGRpY3QtPmJ1ZiArIGRpY3QtPnN0YXJ0LAorCQkJCWNvcHlfc2l6ZSk7CisJfQorCisJZGljdC0+c3RhcnQgPSBkaWN0LT5wb3M7CisJYi0+b3V0X3BvcyArPSBjb3B5X3NpemU7CisJcmV0dXJuIGNvcHlfc2l6ZTsKK30KKworLyoqKioqKioqKioqKioqKioqCisgKiBSYW5nZSBkZWNvZGVyICoKKyAqKioqKioqKioqKioqKioqKi8KKworLyogUmVzZXQgdGhlIHJhbmdlIGRlY29kZXIuICovCitzdGF0aWMgdm9pZCByY19yZXNldChzdHJ1Y3QgcmNfZGVjICpyYykKK3sKKwlyYy0+cmFuZ2UgPSAodWludDMyX3QpLTE7CisJcmMtPmNvZGUgPSAwOworCXJjLT5pbml0X2J5dGVzX2xlZnQgPSBSQ19JTklUX0JZVEVTOworfQorCisvKgorICogUmVhZCB0aGUgZmlyc3QgZml2ZSBpbml0aWFsIGJ5dGVzIGludG8gcmMtPmNvZGUgaWYgdGhleSBoYXZlbid0IGJlZW4KKyAqIHJlYWQgYWxyZWFkeS4gKFllcywgdGhlIGZpcnN0IGJ5dGUgZ2V0cyBjb21wbGV0ZWx5IGlnbm9yZWQuKQorICovCitzdGF0aWMgYm9vbCByY19yZWFkX2luaXQoc3RydWN0IHJjX2RlYyAqcmMsIHN0cnVjdCB4el9idWYgKmIpCit7CisJd2hpbGUgKHJjLT5pbml0X2J5dGVzX2xlZnQgPiAwKSB7CisJCWlmIChiLT5pbl9wb3MgPT0gYi0+aW5fc2l6ZSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlyYy0+Y29kZSA9IChyYy0+Y29kZSA8PCA4KSArIGItPmluW2ItPmluX3BvcysrXTsKKwkJLS1yYy0+aW5pdF9ieXRlc19sZWZ0OworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBtYXkgbm90IGJlIGVub3VnaCBpbnB1dCBmb3IgdGhlIG5leHQgZGVjb2RpbmcgbG9vcC4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCByY19saW1pdF9leGNlZWRlZChjb25zdCBzdHJ1Y3QgcmNfZGVjICpyYykKK3sKKwlyZXR1cm4gcmMtPmluX3BvcyA+IHJjLT5pbl9saW1pdDsKK30KKworLyoKKyAqIFJldHVybiB0cnVlIGlmIGl0IGlzIHBvc3NpYmxlIChmcm9tIHBvaW50IG9mIHZpZXcgb2YgcmFuZ2UgZGVjb2RlcikgdGhhdAorICogd2UgaGF2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIExaTUEgY2h1bmsuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCByY19pc19maW5pc2hlZChjb25zdCBzdHJ1Y3QgcmNfZGVjICpyYykKK3sKKwlyZXR1cm4gcmMtPmNvZGUgPT0gMDsKK30KKworLyogUmVhZCB0aGUgbmV4dCBpbnB1dCBieXRlIGlmIG5lZWRlZC4gKi8KK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCByY19ub3JtYWxpemUoc3RydWN0IHJjX2RlYyAqcmMpCit7CisJaWYgKHJjLT5yYW5nZSA8IFJDX1RPUF9WQUxVRSkgeworCQlyYy0+cmFuZ2UgPDw9IFJDX1NISUZUX0JJVFM7CisJCXJjLT5jb2RlID0gKHJjLT5jb2RlIDw8IFJDX1NISUZUX0JJVFMpICsgcmMtPmluW3JjLT5pbl9wb3MrK107CisJfQorfQorCisvKgorICogRGVjb2RlIG9uZSBiaXQuIEluIHNvbWUgdmVyc2lvbnMsIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gc3BsaXR0ZWQgaW4gdGhyZWUKKyAqIGZ1bmN0aW9ucyBzbyB0aGF0IHRoZSBjb21waWxlciBpcyBzdXBwb3NlZCB0byBiZSBhYmxlIHRvIG1vcmUgZWFzaWx5IGF2b2lkCisgKiBhbiBleHRyYSBicmFuY2guIEluIHRoaXMgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMWk1BIGRlY29kZXIsIHRoaXMKKyAqIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGdvb2QgaWRlYSAodGVzdGVkIHdpdGggR0NDIDMuMy42LCAzLjQuNiwgYW5kIDQuMy4zCisgKiBvbiB4ODYpLiBVc2luZyBhIG5vbi1zcGxpdHRlZCB2ZXJzaW9uIHJlc3VsdHMgaW4gbmljZXIgbG9va2luZyBjb2RlIHRvby4KKyAqCisgKiBOT1RFOiBUaGlzIG11c3QgcmV0dXJuIGFuIGludC4gRG8gbm90IG1ha2UgaXQgcmV0dXJuIGEgYm9vbCBvciB0aGUgc3BlZWQKKyAqIG9mIHRoZSBjb2RlIGdlbmVyYXRlZCBieSBHQ0MgMy54IGRlY3JlYXNlcyAxMC0xNSAlLiAoR0NDIDQuMyBkb2Vzbid0IGNhcmUsCisgKiBhbmQgaXQgZ2VuZXJhdGVzIDEwLTIwICUgZmFzdGVyIGNvZGUgdGhhbiBHQ0MgMy54IGZyb20gdGhpcyBmaWxlIGFueXdheS4pCisgKi8KK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJjX2JpdChzdHJ1Y3QgcmNfZGVjICpyYywgdWludDE2X3QgKnByb2IpCit7CisJdWludDMyX3QgYm91bmQ7CisJaW50IGJpdDsKKworCXJjX25vcm1hbGl6ZShyYyk7CisJYm91bmQgPSAocmMtPnJhbmdlID4+IFJDX0JJVF9NT0RFTF9UT1RBTF9CSVRTKSAqICpwcm9iOworCWlmIChyYy0+Y29kZSA8IGJvdW5kKSB7CisJCXJjLT5yYW5nZSA9IGJvdW5kOworCQkqcHJvYiArPSAoUkNfQklUX01PREVMX1RPVEFMIC0gKnByb2IpID4+IFJDX01PVkVfQklUUzsKKwkJYml0ID0gMDsKKwl9IGVsc2UgeworCQlyYy0+cmFuZ2UgLT0gYm91bmQ7CisJCXJjLT5jb2RlIC09IGJvdW5kOworCQkqcHJvYiAtPSAqcHJvYiA+PiBSQ19NT1ZFX0JJVFM7CisJCWJpdCA9IDE7CisJfQorCisJcmV0dXJuIGJpdDsKK30KKworLyogRGVjb2RlIGEgYml0dHJlZSBzdGFydGluZyBmcm9tIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gKi8KK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdWludDMyX3QgcmNfYml0dHJlZShzdHJ1Y3QgcmNfZGVjICpyYywKKwkJCQkJICAgdWludDE2X3QgKnByb2JzLCB1aW50MzJfdCBsaW1pdCkKK3sKKwl1aW50MzJfdCBzeW1ib2wgPSAxOworCisJZG8geworCQlpZiAocmNfYml0KHJjLCAmcHJvYnNbc3ltYm9sXSkpCisJCQlzeW1ib2wgPSAoc3ltYm9sIDw8IDEpICsgMTsKKwkJZWxzZQorCQkJc3ltYm9sIDw8PSAxOworCX0gd2hpbGUgKHN5bWJvbCA8IGxpbWl0KTsKKworCXJldHVybiBzeW1ib2w7Cit9CisKKy8qIERlY29kZSBhIGJpdHRyZWUgc3RhcnRpbmcgZnJvbSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAqLworc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHJjX2JpdHRyZWVfcmV2ZXJzZShzdHJ1Y3QgcmNfZGVjICpyYywKKwkJCQkJICAgICAgIHVpbnQxNl90ICpwcm9icywKKwkJCQkJICAgICAgIHVpbnQzMl90ICpkZXN0LCB1aW50MzJfdCBsaW1pdCkKK3sKKwl1aW50MzJfdCBzeW1ib2wgPSAxOworCXVpbnQzMl90IGkgPSAwOworCisJZG8geworCQlpZiAocmNfYml0KHJjLCAmcHJvYnNbc3ltYm9sXSkpIHsKKwkJCXN5bWJvbCA9IChzeW1ib2wgPDwgMSkgKyAxOworCQkJKmRlc3QgKz0gMSA8PCBpOworCQl9IGVsc2UgeworCQkJc3ltYm9sIDw8PSAxOworCQl9CisJfSB3aGlsZSAoKytpIDwgbGltaXQpOworfQorCisvKiBEZWNvZGUgZGlyZWN0IGJpdHMgKGZpeGVkIGZpZnR5LWZpZnR5IHByb2JhYmlsaXR5KSAqLworc3RhdGljIGlubGluZSB2b2lkIHJjX2RpcmVjdChzdHJ1Y3QgcmNfZGVjICpyYywgdWludDMyX3QgKmRlc3QsIHVpbnQzMl90IGxpbWl0KQoreworCXVpbnQzMl90IG1hc2s7CisKKwlkbyB7CisJCXJjX25vcm1hbGl6ZShyYyk7CisJCXJjLT5yYW5nZSA+Pj0gMTsKKwkJcmMtPmNvZGUgLT0gcmMtPnJhbmdlOworCQltYXNrID0gKHVpbnQzMl90KTAgLSAocmMtPmNvZGUgPj4gMzEpOworCQlyYy0+Y29kZSArPSByYy0+cmFuZ2UgJiBtYXNrOworCQkqZGVzdCA9ICgqZGVzdCA8PCAxKSArIChtYXNrICsgMSk7CisJfSB3aGlsZSAoLS1saW1pdCA+IDApOworfQorCisvKioqKioqKioKKyAqIExaTUEgKgorICoqKioqKioqLworCisvKiBHZXQgcG9pbnRlciB0byBsaXRlcmFsIGNvZGVyIHByb2JhYmlsaXR5IGFycmF5LiAqLworc3RhdGljIHVpbnQxNl90ICpsem1hX2xpdGVyYWxfcHJvYnMoc3RydWN0IHh6X2RlY19sem1hMiAqcykKK3sKKwl1aW50MzJfdCBwcmV2X2J5dGUgPSBkaWN0X2dldCgmcy0+ZGljdCwgMCk7CisJdWludDMyX3QgbG93ID0gcHJldl9ieXRlID4+ICg4IC0gcy0+bHptYS5sYyk7CisJdWludDMyX3QgaGlnaCA9IChzLT5kaWN0LnBvcyAmIHMtPmx6bWEubGl0ZXJhbF9wb3NfbWFzaykgPDwgcy0+bHptYS5sYzsKKwlyZXR1cm4gcy0+bHptYS5saXRlcmFsW2xvdyArIGhpZ2hdOworfQorCisvKiBEZWNvZGUgYSBsaXRlcmFsIChvbmUgOC1iaXQgYnl0ZSkgKi8KK3N0YXRpYyB2b2lkIGx6bWFfbGl0ZXJhbChzdHJ1Y3QgeHpfZGVjX2x6bWEyICpzKQoreworCXVpbnQxNl90ICpwcm9iczsKKwl1aW50MzJfdCBzeW1ib2w7CisJdWludDMyX3QgbWF0Y2hfYnl0ZTsKKwl1aW50MzJfdCBtYXRjaF9iaXQ7CisJdWludDMyX3Qgb2Zmc2V0OworCXVpbnQzMl90IGk7CisKKwlwcm9icyA9IGx6bWFfbGl0ZXJhbF9wcm9icyhzKTsKKworCWlmIChsem1hX3N0YXRlX2lzX2xpdGVyYWwocy0+bHptYS5zdGF0ZSkpIHsKKwkJc3ltYm9sID0gcmNfYml0dHJlZSgmcy0+cmMsIHByb2JzLCAweDEwMCk7CisJfSBlbHNlIHsKKwkJc3ltYm9sID0gMTsKKwkJbWF0Y2hfYnl0ZSA9IGRpY3RfZ2V0KCZzLT5kaWN0LCBzLT5sem1hLnJlcDApIDw8IDE7CisJCW9mZnNldCA9IDB4MTAwOworCisJCWRvIHsKKwkJCW1hdGNoX2JpdCA9IG1hdGNoX2J5dGUgJiBvZmZzZXQ7CisJCQltYXRjaF9ieXRlIDw8PSAxOworCQkJaSA9IG9mZnNldCArIG1hdGNoX2JpdCArIHN5bWJvbDsKKworCQkJaWYgKHJjX2JpdCgmcy0+cmMsICZwcm9ic1tpXSkpIHsKKwkJCQlzeW1ib2wgPSAoc3ltYm9sIDw8IDEpICsgMTsKKwkJCQlvZmZzZXQgJj0gbWF0Y2hfYml0OworCQkJfSBlbHNlIHsKKwkJCQlzeW1ib2wgPDw9IDE7CisJCQkJb2Zmc2V0ICY9IH5tYXRjaF9iaXQ7CisJCQl9CisJCX0gd2hpbGUgKHN5bWJvbCA8IDB4MTAwKTsKKwl9CisKKwlkaWN0X3B1dCgmcy0+ZGljdCwgKHVpbnQ4X3Qpc3ltYm9sKTsKKwlsem1hX3N0YXRlX2xpdGVyYWwoJnMtPmx6bWEuc3RhdGUpOworfQorCisvKiBEZWNvZGUgdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2ggaW50byBzLT5sem1hLmxlbi4gKi8KK3N0YXRpYyB2b2lkIGx6bWFfbGVuKHN0cnVjdCB4el9kZWNfbHptYTIgKnMsIHN0cnVjdCBsem1hX2xlbl9kZWMgKmwsCisJCSAgICAgdWludDMyX3QgcG9zX3N0YXRlKQoreworCXVpbnQxNl90ICpwcm9iczsKKwl1aW50MzJfdCBsaW1pdDsKKworCWlmICghcmNfYml0KCZzLT5yYywgJmwtPmNob2ljZSkpIHsKKwkJcHJvYnMgPSBsLT5sb3dbcG9zX3N0YXRlXTsKKwkJbGltaXQgPSBMRU5fTE9XX1NZTUJPTFM7CisJCXMtPmx6bWEubGVuID0gTUFUQ0hfTEVOX01JTjsKKwl9IGVsc2UgeworCQlpZiAoIXJjX2JpdCgmcy0+cmMsICZsLT5jaG9pY2UyKSkgeworCQkJcHJvYnMgPSBsLT5taWRbcG9zX3N0YXRlXTsKKwkJCWxpbWl0ID0gTEVOX01JRF9TWU1CT0xTOworCQkJcy0+bHptYS5sZW4gPSBNQVRDSF9MRU5fTUlOICsgTEVOX0xPV19TWU1CT0xTOworCQl9IGVsc2UgeworCQkJcHJvYnMgPSBsLT5oaWdoOworCQkJbGltaXQgPSBMRU5fSElHSF9TWU1CT0xTOworCQkJcy0+bHptYS5sZW4gPSBNQVRDSF9MRU5fTUlOICsgTEVOX0xPV19TWU1CT0xTCisJCQkJCSsgTEVOX01JRF9TWU1CT0xTOworCQl9CisJfQorCisJcy0+bHptYS5sZW4gKz0gcmNfYml0dHJlZSgmcy0+cmMsIHByb2JzLCBsaW1pdCkgLSBsaW1pdDsKK30KKworLyogRGVjb2RlIGEgbWF0Y2guIFRoZSBkaXN0YW5jZSB3aWxsIGJlIHN0b3JlZCBpbiBzLT5sem1hLnJlcDAuICovCitzdGF0aWMgdm9pZCBsem1hX21hdGNoKHN0cnVjdCB4el9kZWNfbHptYTIgKnMsIHVpbnQzMl90IHBvc19zdGF0ZSkKK3sKKwl1aW50MTZfdCAqcHJvYnM7CisJdWludDMyX3QgZGlzdF9zbG90OworCXVpbnQzMl90IGxpbWl0OworCisJbHptYV9zdGF0ZV9tYXRjaCgmcy0+bHptYS5zdGF0ZSk7CisKKwlzLT5sem1hLnJlcDMgPSBzLT5sem1hLnJlcDI7CisJcy0+bHptYS5yZXAyID0gcy0+bHptYS5yZXAxOworCXMtPmx6bWEucmVwMSA9IHMtPmx6bWEucmVwMDsKKworCWx6bWFfbGVuKHMsICZzLT5sem1hLm1hdGNoX2xlbl9kZWMsIHBvc19zdGF0ZSk7CisKKwlwcm9icyA9IHMtPmx6bWEuZGlzdF9zbG90W2x6bWFfZ2V0X2Rpc3Rfc3RhdGUocy0+bHptYS5sZW4pXTsKKwlkaXN0X3Nsb3QgPSByY19iaXR0cmVlKCZzLT5yYywgcHJvYnMsIERJU1RfU0xPVFMpIC0gRElTVF9TTE9UUzsKKworCWlmIChkaXN0X3Nsb3QgPCBESVNUX01PREVMX1NUQVJUKSB7CisJCXMtPmx6bWEucmVwMCA9IGRpc3Rfc2xvdDsKKwl9IGVsc2UgeworCQlsaW1pdCA9IChkaXN0X3Nsb3QgPj4gMSkgLSAxOworCQlzLT5sem1hLnJlcDAgPSAyICsgKGRpc3Rfc2xvdCAmIDEpOworCisJCWlmIChkaXN0X3Nsb3QgPCBESVNUX01PREVMX0VORCkgeworCQkJcy0+bHptYS5yZXAwIDw8PSBsaW1pdDsKKwkJCXByb2JzID0gcy0+bHptYS5kaXN0X3NwZWNpYWwgKyBzLT5sem1hLnJlcDAKKwkJCQkJLSBkaXN0X3Nsb3QgLSAxOworCQkJcmNfYml0dHJlZV9yZXZlcnNlKCZzLT5yYywgcHJvYnMsCisJCQkJCSZzLT5sem1hLnJlcDAsIGxpbWl0KTsKKwkJfSBlbHNlIHsKKwkJCXJjX2RpcmVjdCgmcy0+cmMsICZzLT5sem1hLnJlcDAsIGxpbWl0IC0gQUxJR05fQklUUyk7CisJCQlzLT5sem1hLnJlcDAgPDw9IEFMSUdOX0JJVFM7CisJCQlyY19iaXR0cmVlX3JldmVyc2UoJnMtPnJjLCBzLT5sem1hLmRpc3RfYWxpZ24sCisJCQkJCSZzLT5sem1hLnJlcDAsIEFMSUdOX0JJVFMpOworCQl9CisJfQorfQorCisvKgorICogRGVjb2RlIGEgcmVwZWF0ZWQgbWF0Y2guIFRoZSBkaXN0YW5jZSBpcyBvbmUgb2YgdGhlIGZvdXIgbW9zdCByZWNlbnRseQorICogc2VlbiBtYXRjaGVzLiBUaGUgZGlzdGFuY2Ugd2lsbCBiZSBzdG9yZWQgaW4gcy0+bHptYS5yZXAwLgorICovCitzdGF0aWMgdm9pZCBsem1hX3JlcF9tYXRjaChzdHJ1Y3QgeHpfZGVjX2x6bWEyICpzLCB1aW50MzJfdCBwb3Nfc3RhdGUpCit7CisJdWludDMyX3QgdG1wOworCisJaWYgKCFyY19iaXQoJnMtPnJjLCAmcy0+bHptYS5pc19yZXAwW3MtPmx6bWEuc3RhdGVdKSkgeworCQlpZiAoIXJjX2JpdCgmcy0+cmMsICZzLT5sem1hLmlzX3JlcDBfbG9uZ1sKKwkJCQlzLT5sem1hLnN0YXRlXVtwb3Nfc3RhdGVdKSkgeworCQkJbHptYV9zdGF0ZV9zaG9ydF9yZXAoJnMtPmx6bWEuc3RhdGUpOworCQkJcy0+bHptYS5sZW4gPSAxOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCFyY19iaXQoJnMtPnJjLCAmcy0+bHptYS5pc19yZXAxW3MtPmx6bWEuc3RhdGVdKSkgeworCQkJdG1wID0gcy0+bHptYS5yZXAxOworCQl9IGVsc2UgeworCQkJaWYgKCFyY19iaXQoJnMtPnJjLCAmcy0+bHptYS5pc19yZXAyW3MtPmx6bWEuc3RhdGVdKSkgeworCQkJCXRtcCA9IHMtPmx6bWEucmVwMjsKKwkJCX0gZWxzZSB7CisJCQkJdG1wID0gcy0+bHptYS5yZXAzOworCQkJCXMtPmx6bWEucmVwMyA9IHMtPmx6bWEucmVwMjsKKwkJCX0KKworCQkJcy0+bHptYS5yZXAyID0gcy0+bHptYS5yZXAxOworCQl9CisKKwkJcy0+bHptYS5yZXAxID0gcy0+bHptYS5yZXAwOworCQlzLT5sem1hLnJlcDAgPSB0bXA7CisJfQorCisJbHptYV9zdGF0ZV9sb25nX3JlcCgmcy0+bHptYS5zdGF0ZSk7CisJbHptYV9sZW4ocywgJnMtPmx6bWEucmVwX2xlbl9kZWMsIHBvc19zdGF0ZSk7Cit9CisKKy8qIExaTUEgZGVjb2RlciBjb3JlICovCitzdGF0aWMgYm9vbCBsem1hX21haW4oc3RydWN0IHh6X2RlY19sem1hMiAqcykKK3sKKwl1aW50MzJfdCBwb3Nfc3RhdGU7CisKKwkvKgorCSAqIElmIHRoZSBkaWN0aW9uYXJ5IHdhcyByZWFjaGVkIGR1cmluZyB0aGUgcHJldmlvdXMgY2FsbCwgdHJ5IHRvCisJICogZmluaXNoIHRoZSBwb3NzaWJseSBwZW5kaW5nIHJlcGVhdCBpbiB0aGUgZGljdGlvbmFyeS4KKwkgKi8KKwlpZiAoZGljdF9oYXNfc3BhY2UoJnMtPmRpY3QpICYmIHMtPmx6bWEubGVuID4gMCkKKwkJZGljdF9yZXBlYXQoJnMtPmRpY3QsICZzLT5sem1hLmxlbiwgcy0+bHptYS5yZXAwKTsKKworCS8qCisJICogRGVjb2RlIG1vcmUgTFpNQSBzeW1ib2xzLiBPbmUgaXRlcmF0aW9uIG1heSBjb25zdW1lIHVwIHRvCisJICogTFpNQV9JTl9SRVFVSVJFRCAtIDEgYnl0ZXMuCisJICovCisJd2hpbGUgKGRpY3RfaGFzX3NwYWNlKCZzLT5kaWN0KSAmJiAhcmNfbGltaXRfZXhjZWVkZWQoJnMtPnJjKSkgeworCQlwb3Nfc3RhdGUgPSBzLT5kaWN0LnBvcyAmIHMtPmx6bWEucG9zX21hc2s7CisKKwkJaWYgKCFyY19iaXQoJnMtPnJjLCAmcy0+bHptYS5pc19tYXRjaFsKKwkJCQlzLT5sem1hLnN0YXRlXVtwb3Nfc3RhdGVdKSkgeworCQkJbHptYV9saXRlcmFsKHMpOworCQl9IGVsc2UgeworCQkJaWYgKHJjX2JpdCgmcy0+cmMsICZzLT5sem1hLmlzX3JlcFtzLT5sem1hLnN0YXRlXSkpCisJCQkJbHptYV9yZXBfbWF0Y2gocywgcG9zX3N0YXRlKTsKKwkJCWVsc2UKKwkJCQlsem1hX21hdGNoKHMsIHBvc19zdGF0ZSk7CisKKwkJCWlmICghZGljdF9yZXBlYXQoJnMtPmRpY3QsICZzLT5sem1hLmxlbiwgcy0+bHptYS5yZXAwKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwkvKgorCSAqIEhhdmluZyB0aGUgcmFuZ2UgZGVjb2RlciBhbHdheXMgbm9ybWFsaXplZCB3aGVuIHdlIGFyZSBvdXRzaWRlCisJICogdGhpcyBmdW5jdGlvbiBtYWtlcyBpdCBlYXNpZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBlbmQgb2YgdGhlIGNodW5rLgorCSAqLworCXJjX25vcm1hbGl6ZSgmcy0+cmMpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBSZXNldCB0aGUgTFpNQSBkZWNvZGVyIGFuZCByYW5nZSBkZWNvZGVyIHN0YXRlLiBEaWN0aW9uYXJ5IGlzIG5vcmUgcmVzZXQKKyAqIGhlcmUsIGJlY2F1c2UgTFpNQSBzdGF0ZSBtYXkgYmUgcmVzZXQgd2l0aG91dCByZXNldHRpbmcgdGhlIGRpY3Rpb25hcnkuCisgKi8KK3N0YXRpYyB2b2lkIGx6bWFfcmVzZXQoc3RydWN0IHh6X2RlY19sem1hMiAqcykKK3sKKwl1aW50MTZfdCAqcHJvYnM7CisJc2l6ZV90IGk7CisKKwlzLT5sem1hLnN0YXRlID0gU1RBVEVfTElUX0xJVDsKKwlzLT5sem1hLnJlcDAgPSAwOworCXMtPmx6bWEucmVwMSA9IDA7CisJcy0+bHptYS5yZXAyID0gMDsKKwlzLT5sem1hLnJlcDMgPSAwOworCisJLyoKKwkgKiBBbGwgcHJvYmFiaWxpdGllcyBhcmUgaW5pdGlhbGl6ZWQgdG8gdGhlIHNhbWUgdmFsdWUuIFRoaXMgaGFjaworCSAqIG1ha2VzIHRoZSBjb2RlIHNtYWxsZXIgYnkgYXZvaWRpbmcgYSBzZXBhcmF0ZSBsb29wIGZvciBlYWNoCisJICogcHJvYmFiaWxpdHkgYXJyYXkuCisJICoKKwkgKiBUaGlzIGNvdWxkIGJlIG9wdGltaXplZCBzbyB0aGF0IG9ubHkgdGhhdCBwYXJ0IG9mIGxpdGVyYWwKKwkgKiBwcm9iYWJpbGl0aWVzIHRoYXQgYXJlIGFjdHVhbGx5IHJlcXVpcmVkLiBJbiB0aGUgY29tbW9uIGNhc2UKKwkgKiB3ZSB3b3VsZCB3cml0ZSAxMiBLaUIgbGVzcy4KKwkgKi8KKwlwcm9icyA9IHMtPmx6bWEuaXNfbWF0Y2hbMF07CisJZm9yIChpID0gMDsgaSA8IFBST0JTX1RPVEFMOyArK2kpCisJCXByb2JzW2ldID0gUkNfQklUX01PREVMX1RPVEFMIC8gMjsKKworCXJjX3Jlc2V0KCZzLT5yYyk7Cit9CisKKy8qCisgKiBEZWNvZGUgYW5kIHZhbGlkYXRlIExaTUEgcHJvcGVydGllcyAobGMvbHAvcGIpIGFuZCBjYWxjdWxhdGUgdGhlIGJpdCBtYXNrcworICogZnJvbSB0aGUgZGVjb2RlZCBscCBhbmQgcGIgdmFsdWVzLiBPbiBzdWNjZXNzLCB0aGUgTFpNQSBkZWNvZGVyIHN0YXRlIGlzCisgKiByZXNldCBhbmQgdHJ1ZSBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIGJvb2wgbHptYV9wcm9wcyhzdHJ1Y3QgeHpfZGVjX2x6bWEyICpzLCB1aW50OF90IHByb3BzKQoreworCWlmIChwcm9wcyA+ICg0ICogNSArIDQpICogOSArIDgpCisJCXJldHVybiBmYWxzZTsKKworCXMtPmx6bWEucG9zX21hc2sgPSAwOworCXdoaWxlIChwcm9wcyA+PSA5ICogNSkgeworCQlwcm9wcyAtPSA5ICogNTsKKwkJKytzLT5sem1hLnBvc19tYXNrOworCX0KKworCXMtPmx6bWEucG9zX21hc2sgPSAoMSA8PCBzLT5sem1hLnBvc19tYXNrKSAtIDE7CisKKwlzLT5sem1hLmxpdGVyYWxfcG9zX21hc2sgPSAwOworCXdoaWxlIChwcm9wcyA+PSA5KSB7CisJCXByb3BzIC09IDk7CisJCSsrcy0+bHptYS5saXRlcmFsX3Bvc19tYXNrOworCX0KKworCXMtPmx6bWEubGMgPSBwcm9wczsKKworCWlmIChzLT5sem1hLmxjICsgcy0+bHptYS5saXRlcmFsX3Bvc19tYXNrID4gNCkKKwkJcmV0dXJuIGZhbHNlOworCisJcy0+bHptYS5saXRlcmFsX3Bvc19tYXNrID0gKDEgPDwgcy0+bHptYS5saXRlcmFsX3Bvc19tYXNrKSAtIDE7CisKKwlsem1hX3Jlc2V0KHMpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKioqKioqKioKKyAqIExaTUEyICoKKyAqKioqKioqKiovCisKKy8qCisgKiBUaGUgTFpNQSBkZWNvZGVyIGFzc3VtZXMgdGhhdCBpZiB0aGUgaW5wdXQgbGltaXQgKHMtPnJjLmluX2xpbWl0KSBoYXNuJ3QKKyAqIGJlZW4gZXhjZWVkZWQsIGl0IGlzIHNhZmUgdG8gcmVhZCB1cCB0byBMWk1BX0lOX1JFUVVJUkVEIGJ5dGVzLiBUaGlzCisgKiB3cmFwcGVyIGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgbWFraW5nIHRoZSBMWk1BIGRlY29kZXIncyBhc3N1bXB0aW9uIHNhZmUuCisgKgorICogQXMgbG9uZyBhcyB0aGVyZSBpcyBwbGVudHkgb2YgaW5wdXQgbGVmdCB0byBiZSBkZWNvZGVkIGluIHRoZSBjdXJyZW50IExaTUEKKyAqIGNodW5rLCB3ZSBkZWNvZGUgZGlyZWN0bHkgZnJvbSB0aGUgY2FsbGVyLXN1cHBsaWVkIGlucHV0IGJ1ZmZlciB1bnRpbAorICogdGhlcmUncyBMWk1BX0lOX1JFUVVJUkVEIGJ5dGVzIGxlZnQuIFRob3NlIHJlbWFpbmluZyBieXRlcyBhcmUgY29waWVkIGludG8KKyAqIHMtPnRlbXAuYnVmLCB3aGljaCAoaG9wZWZ1bGx5KSBnZXRzIGZpbGxlZCBvbiB0aGUgbmV4dCBjYWxsIHRvIHRoaXMKKyAqIGZ1bmN0aW9uLiBXZSBkZWNvZGUgYSBmZXcgYnl0ZXMgZnJvbSB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciBzbyB0aGF0IHdlIGNhbgorICogY29udGludWUgZGVjb2RpbmcgZnJvbSB0aGUgY2FsbGVyLXN1cHBsaWVkIGlucHV0IGJ1ZmZlciBhZ2Fpbi4KKyAqLworc3RhdGljIGJvb2wgbHptYTJfbHptYShzdHJ1Y3QgeHpfZGVjX2x6bWEyICpzLCBzdHJ1Y3QgeHpfYnVmICpiKQoreworCXNpemVfdCBpbl9hdmFpbDsKKwl1aW50MzJfdCB0bXA7CisKKwlpbl9hdmFpbCA9IGItPmluX3NpemUgLSBiLT5pbl9wb3M7CisJaWYgKHMtPnRlbXAuc2l6ZSA+IDAgfHwgcy0+bHptYTIuY29tcHJlc3NlZCA9PSAwKSB7CisJCXRtcCA9IDIgKiBMWk1BX0lOX1JFUVVJUkVEIC0gcy0+dGVtcC5zaXplOworCQlpZiAodG1wID4gcy0+bHptYTIuY29tcHJlc3NlZCAtIHMtPnRlbXAuc2l6ZSkKKwkJCXRtcCA9IHMtPmx6bWEyLmNvbXByZXNzZWQgLSBzLT50ZW1wLnNpemU7CisJCWlmICh0bXAgPiBpbl9hdmFpbCkKKwkJCXRtcCA9IGluX2F2YWlsOworCisJCW1lbWNweShzLT50ZW1wLmJ1ZiArIHMtPnRlbXAuc2l6ZSwgYi0+aW4gKyBiLT5pbl9wb3MsIHRtcCk7CisKKwkJaWYgKHMtPnRlbXAuc2l6ZSArIHRtcCA9PSBzLT5sem1hMi5jb21wcmVzc2VkKSB7CisJCQltZW16ZXJvKHMtPnRlbXAuYnVmICsgcy0+dGVtcC5zaXplICsgdG1wLAorCQkJCQlzaXplb2Yocy0+dGVtcC5idWYpCisJCQkJCQktIHMtPnRlbXAuc2l6ZSAtIHRtcCk7CisJCQlzLT5yYy5pbl9saW1pdCA9IHMtPnRlbXAuc2l6ZSArIHRtcDsKKwkJfSBlbHNlIGlmIChzLT50ZW1wLnNpemUgKyB0bXAgPCBMWk1BX0lOX1JFUVVJUkVEKSB7CisJCQlzLT50ZW1wLnNpemUgKz0gdG1wOworCQkJYi0+aW5fcG9zICs9IHRtcDsKKwkJCXJldHVybiB0cnVlOworCQl9IGVsc2UgeworCQkJcy0+cmMuaW5fbGltaXQgPSBzLT50ZW1wLnNpemUgKyB0bXAgLSBMWk1BX0lOX1JFUVVJUkVEOworCQl9CisKKwkJcy0+cmMuaW4gPSBzLT50ZW1wLmJ1ZjsKKwkJcy0+cmMuaW5fcG9zID0gMDsKKworCQlpZiAoIWx6bWFfbWFpbihzKSB8fCBzLT5yYy5pbl9wb3MgPiBzLT50ZW1wLnNpemUgKyB0bXApCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJcy0+bHptYTIuY29tcHJlc3NlZCAtPSBzLT5yYy5pbl9wb3M7CisKKwkJaWYgKHMtPnJjLmluX3BvcyA8IHMtPnRlbXAuc2l6ZSkgeworCQkJcy0+dGVtcC5zaXplIC09IHMtPnJjLmluX3BvczsKKwkJCW1lbW1vdmUocy0+dGVtcC5idWYsIHMtPnRlbXAuYnVmICsgcy0+cmMuaW5fcG9zLAorCQkJCQlzLT50ZW1wLnNpemUpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQliLT5pbl9wb3MgKz0gcy0+cmMuaW5fcG9zIC0gcy0+dGVtcC5zaXplOworCQlzLT50ZW1wLnNpemUgPSAwOworCX0KKworCWluX2F2YWlsID0gYi0+aW5fc2l6ZSAtIGItPmluX3BvczsKKwlpZiAoaW5fYXZhaWwgPj0gTFpNQV9JTl9SRVFVSVJFRCkgeworCQlzLT5yYy5pbiA9IGItPmluOworCQlzLT5yYy5pbl9wb3MgPSBiLT5pbl9wb3M7CisKKwkJaWYgKGluX2F2YWlsID49IHMtPmx6bWEyLmNvbXByZXNzZWQgKyBMWk1BX0lOX1JFUVVJUkVEKQorCQkJcy0+cmMuaW5fbGltaXQgPSBiLT5pbl9wb3MgKyBzLT5sem1hMi5jb21wcmVzc2VkOworCQllbHNlCisJCQlzLT5yYy5pbl9saW1pdCA9IGItPmluX3NpemUgLSBMWk1BX0lOX1JFUVVJUkVEOworCisJCWlmICghbHptYV9tYWluKHMpKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWluX2F2YWlsID0gcy0+cmMuaW5fcG9zIC0gYi0+aW5fcG9zOworCQlpZiAoaW5fYXZhaWwgPiBzLT5sem1hMi5jb21wcmVzc2VkKQorCQkJcmV0dXJuIGZhbHNlOworCisJCXMtPmx6bWEyLmNvbXByZXNzZWQgLT0gaW5fYXZhaWw7CisJCWItPmluX3BvcyA9IHMtPnJjLmluX3BvczsKKwl9CisKKwlpbl9hdmFpbCA9IGItPmluX3NpemUgLSBiLT5pbl9wb3M7CisJaWYgKGluX2F2YWlsIDwgTFpNQV9JTl9SRVFVSVJFRCkgeworCQlpZiAoaW5fYXZhaWwgPiBzLT5sem1hMi5jb21wcmVzc2VkKQorCQkJaW5fYXZhaWwgPSBzLT5sem1hMi5jb21wcmVzc2VkOworCisJCW1lbWNweShzLT50ZW1wLmJ1ZiwgYi0+aW4gKyBiLT5pbl9wb3MsIGluX2F2YWlsKTsKKwkJcy0+dGVtcC5zaXplID0gaW5fYXZhaWw7CisJCWItPmluX3BvcyArPSBpbl9hdmFpbDsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFRha2UgY2FyZSBvZiB0aGUgTFpNQTIgY29udHJvbCBsYXllciwgYW5kIGZvcndhcmQgdGhlIGpvYiBvZiBhY3R1YWwgTFpNQQorICogZGVjb2Rpbmcgb3IgY29weWluZyBvZiB1bmNvbXByZXNzZWQgY2h1bmtzIHRvIG90aGVyIGZ1bmN0aW9ucy4KKyAqLworWFpfRVhURVJOIGVudW0geHpfcmV0IHh6X2RlY19sem1hMl9ydW4oc3RydWN0IHh6X2RlY19sem1hMiAqcywKKwkJCQkgICAgICAgc3RydWN0IHh6X2J1ZiAqYikKK3sKKwl1aW50MzJfdCB0bXA7CisKKwl3aGlsZSAoYi0+aW5fcG9zIDwgYi0+aW5fc2l6ZSB8fCBzLT5sem1hMi5zZXF1ZW5jZSA9PSBTRVFfTFpNQV9SVU4pIHsKKwkJc3dpdGNoIChzLT5sem1hMi5zZXF1ZW5jZSkgeworCQljYXNlIFNFUV9DT05UUk9MOgorCQkJLyoKKwkJCSAqIExaTUEyIGNvbnRyb2wgYnl0ZQorCQkJICoKKwkJCSAqIEV4YWN0IHZhbHVlczoKKwkJCSAqICAgMHgwMCAgIEVuZCBtYXJrZXIKKwkJCSAqICAgMHgwMSAgIERpY3Rpb25hcnkgcmVzZXQgZm9sbG93ZWQgYnkKKwkJCSAqICAgICAgICAgIGFuIHVuY29tcHJlc3NlZCBjaHVuaworCQkJICogICAweDAyICAgVW5jb21wcmVzc2VkIGNodW5rIChubyBkaWN0aW9uYXJ5IHJlc2V0KQorCQkJICoKKwkJCSAqIEhpZ2hlc3QgdGhyZWUgYml0cyAocy0+Y29udHJvbCAmIDB4RTApOgorCQkJICogICAweEUwICAgRGljdGlvbmFyeSByZXNldCwgbmV3IHByb3BlcnRpZXMgYW5kIHN0YXRlCisJCQkgKiAgICAgICAgICByZXNldCwgZm9sbG93ZWQgYnkgTFpNQSBjb21wcmVzc2VkIGNodW5rCisJCQkgKiAgIDB4QzAgICBOZXcgcHJvcGVydGllcyBhbmQgc3RhdGUgcmVzZXQsIGZvbGxvd2VkCisJCQkgKiAgICAgICAgICBieSBMWk1BIGNvbXByZXNzZWQgY2h1bmsgKG5vIGRpY3Rpb25hcnkKKwkJCSAqICAgICAgICAgIHJlc2V0KQorCQkJICogICAweEEwICAgU3RhdGUgcmVzZXQgdXNpbmcgb2xkIHByb3BlcnRpZXMsCisJCQkgKiAgICAgICAgICBmb2xsb3dlZCBieSBMWk1BIGNvbXByZXNzZWQgY2h1bmsgKG5vCisJCQkgKiAgICAgICAgICBkaWN0aW9uYXJ5IHJlc2V0KQorCQkJICogICAweDgwICAgTFpNQSBjaHVuayAobm8gZGljdGlvbmFyeSBvciBzdGF0ZSByZXNldCkKKwkJCSAqCisJCQkgKiBGb3IgTFpNQSBjb21wcmVzc2VkIGNodW5rcywgdGhlIGxvd2VzdCBmaXZlIGJpdHMKKwkJCSAqIChzLT5jb250cm9sICYgMUYpIGFyZSB0aGUgaGlnaGVzdCBiaXRzIG9mIHRoZQorCQkJICogdW5jb21wcmVzc2VkIHNpemUgKGJpdHMgMTYtMjApLgorCQkJICoKKwkJCSAqIEEgbmV3IExaTUEyIHN0cmVhbSBtdXN0IGJlZ2luIHdpdGggYSBkaWN0aW9uYXJ5CisJCQkgKiByZXNldC4gVGhlIGZpcnN0IExaTUEgY2h1bmsgbXVzdCBzZXQgbmV3CisJCQkgKiBwcm9wZXJ0aWVzIGFuZCByZXNldCB0aGUgTFpNQSBzdGF0ZS4KKwkJCSAqCisJCQkgKiBWYWx1ZXMgdGhhdCBkb24ndCBtYXRjaCBhbnl0aGluZyBkZXNjcmliZWQgYWJvdmUKKwkJCSAqIGFyZSBpbnZhbGlkIGFuZCB3ZSByZXR1cm4gWFpfREFUQV9FUlJPUi4KKwkJCSAqLworCQkJdG1wID0gYi0+aW5bYi0+aW5fcG9zKytdOworCisJCQlpZiAodG1wID49IDB4RTAgfHwgdG1wID09IDB4MDEpIHsKKwkJCQlzLT5sem1hMi5uZWVkX3Byb3BzID0gdHJ1ZTsKKwkJCQlzLT5sem1hMi5uZWVkX2RpY3RfcmVzZXQgPSBmYWxzZTsKKwkJCQlkaWN0X3Jlc2V0KCZzLT5kaWN0LCBiKTsKKwkJCX0gZWxzZSBpZiAocy0+bHptYTIubmVlZF9kaWN0X3Jlc2V0KSB7CisJCQkJcmV0dXJuIFhaX0RBVEFfRVJST1I7CisJCQl9CisKKwkJCWlmICh0bXAgPj0gMHg4MCkgeworCQkJCXMtPmx6bWEyLnVuY29tcHJlc3NlZCA9ICh0bXAgJiAweDFGKSA8PCAxNjsKKwkJCQlzLT5sem1hMi5zZXF1ZW5jZSA9IFNFUV9VTkNPTVBSRVNTRURfMTsKKworCQkJCWlmICh0bXAgPj0gMHhDMCkgeworCQkJCQkvKgorCQkJCQkgKiBXaGVuIHRoZXJlIGFyZSBuZXcgcHJvcGVydGllcywKKwkJCQkJICogc3RhdGUgcmVzZXQgaXMgZG9uZSBhdAorCQkJCQkgKiBTRVFfUFJPUEVSVElFUy4KKwkJCQkJICovCisJCQkJCXMtPmx6bWEyLm5lZWRfcHJvcHMgPSBmYWxzZTsKKwkJCQkJcy0+bHptYTIubmV4dF9zZXF1ZW5jZQorCQkJCQkJCT0gU0VRX1BST1BFUlRJRVM7CisKKwkJCQl9IGVsc2UgaWYgKHMtPmx6bWEyLm5lZWRfcHJvcHMpIHsKKwkJCQkJcmV0dXJuIFhaX0RBVEFfRVJST1I7CisKKwkJCQl9IGVsc2UgeworCQkJCQlzLT5sem1hMi5uZXh0X3NlcXVlbmNlCisJCQkJCQkJPSBTRVFfTFpNQV9QUkVQQVJFOworCQkJCQlpZiAodG1wID49IDB4QTApCisJCQkJCQlsem1hX3Jlc2V0KHMpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKHRtcCA9PSAweDAwKQorCQkJCQlyZXR1cm4gWFpfU1RSRUFNX0VORDsKKworCQkJCWlmICh0bXAgPiAweDAyKQorCQkJCQlyZXR1cm4gWFpfREFUQV9FUlJPUjsKKworCQkJCXMtPmx6bWEyLnNlcXVlbmNlID0gU0VRX0NPTVBSRVNTRURfMDsKKwkJCQlzLT5sem1hMi5uZXh0X3NlcXVlbmNlID0gU0VRX0NPUFk7CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgU0VRX1VOQ09NUFJFU1NFRF8xOgorCQkJcy0+bHptYTIudW5jb21wcmVzc2VkCisJCQkJCSs9ICh1aW50MzJfdCliLT5pbltiLT5pbl9wb3MrK10gPDwgODsKKwkJCXMtPmx6bWEyLnNlcXVlbmNlID0gU0VRX1VOQ09NUFJFU1NFRF8yOworCQkJYnJlYWs7CisKKwkJY2FzZSBTRVFfVU5DT01QUkVTU0VEXzI6CisJCQlzLT5sem1hMi51bmNvbXByZXNzZWQKKwkJCQkJKz0gKHVpbnQzMl90KWItPmluW2ItPmluX3BvcysrXSArIDE7CisJCQlzLT5sem1hMi5zZXF1ZW5jZSA9IFNFUV9DT01QUkVTU0VEXzA7CisJCQlicmVhazsKKworCQljYXNlIFNFUV9DT01QUkVTU0VEXzA6CisJCQlzLT5sem1hMi5jb21wcmVzc2VkCisJCQkJCT0gKHVpbnQzMl90KWItPmluW2ItPmluX3BvcysrXSA8PCA4OworCQkJcy0+bHptYTIuc2VxdWVuY2UgPSBTRVFfQ09NUFJFU1NFRF8xOworCQkJYnJlYWs7CisKKwkJY2FzZSBTRVFfQ09NUFJFU1NFRF8xOgorCQkJcy0+bHptYTIuY29tcHJlc3NlZAorCQkJCQkrPSAodWludDMyX3QpYi0+aW5bYi0+aW5fcG9zKytdICsgMTsKKwkJCXMtPmx6bWEyLnNlcXVlbmNlID0gcy0+bHptYTIubmV4dF9zZXF1ZW5jZTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0VRX1BST1BFUlRJRVM6CisJCQlpZiAoIWx6bWFfcHJvcHMocywgYi0+aW5bYi0+aW5fcG9zKytdKSkKKwkJCQlyZXR1cm4gWFpfREFUQV9FUlJPUjsKKworCQkJcy0+bHptYTIuc2VxdWVuY2UgPSBTRVFfTFpNQV9QUkVQQVJFOworCisJCWNhc2UgU0VRX0xaTUFfUFJFUEFSRToKKwkJCWlmIChzLT5sem1hMi5jb21wcmVzc2VkIDwgUkNfSU5JVF9CWVRFUykKKwkJCQlyZXR1cm4gWFpfREFUQV9FUlJPUjsKKworCQkJaWYgKCFyY19yZWFkX2luaXQoJnMtPnJjLCBiKSkKKwkJCQlyZXR1cm4gWFpfT0s7CisKKwkJCXMtPmx6bWEyLmNvbXByZXNzZWQgLT0gUkNfSU5JVF9CWVRFUzsKKwkJCXMtPmx6bWEyLnNlcXVlbmNlID0gU0VRX0xaTUFfUlVOOworCisJCWNhc2UgU0VRX0xaTUFfUlVOOgorCQkJLyoKKwkJCSAqIFNldCBkaWN0aW9uYXJ5IGxpbWl0IHRvIGluZGljYXRlIGhvdyBtdWNoIHdlIHdhbnQKKwkJCSAqIHRvIGJlIGVuY29kZWQgYXQgbWF4aW11bS4gRGVjb2RlIG5ldyBkYXRhIGludG8gdGhlCisJCQkgKiBkaWN0aW9uYXJ5LiBGbHVzaCB0aGUgbmV3IGRhdGEgZnJvbSBkaWN0aW9uYXJ5IHRvCisJCQkgKiBiLT5vdXQuIENoZWNrIGlmIHdlIGZpbmlzaGVkIGRlY29kaW5nIHRoaXMgY2h1bmsuCisJCQkgKiBJbiBjYXNlIHRoZSBkaWN0aW9uYXJ5IGdvdCBmdWxsIGJ1dCB3ZSBkaWRuJ3QgZmlsbAorCQkJICogdGhlIG91dHB1dCBidWZmZXIgeWV0LCB3ZSBtYXkgcnVuIHRoaXMgbG9vcAorCQkJICogbXVsdGlwbGUgdGltZXMgd2l0aG91dCBjaGFuZ2luZyBzLT5sem1hMi5zZXF1ZW5jZS4KKwkJCSAqLworCQkJZGljdF9saW1pdCgmcy0+ZGljdCwgbWluX3Qoc2l6ZV90LAorCQkJCQliLT5vdXRfc2l6ZSAtIGItPm91dF9wb3MsCisJCQkJCXMtPmx6bWEyLnVuY29tcHJlc3NlZCkpOworCQkJaWYgKCFsem1hMl9sem1hKHMsIGIpKQorCQkJCXJldHVybiBYWl9EQVRBX0VSUk9SOworCisJCQlzLT5sem1hMi51bmNvbXByZXNzZWQgLT0gZGljdF9mbHVzaCgmcy0+ZGljdCwgYik7CisKKwkJCWlmIChzLT5sem1hMi51bmNvbXByZXNzZWQgPT0gMCkgeworCQkJCWlmIChzLT5sem1hMi5jb21wcmVzc2VkID4gMCB8fCBzLT5sem1hLmxlbiA+IDAKKwkJCQkJCXx8ICFyY19pc19maW5pc2hlZCgmcy0+cmMpKQorCQkJCQlyZXR1cm4gWFpfREFUQV9FUlJPUjsKKworCQkJCXJjX3Jlc2V0KCZzLT5yYyk7CisJCQkJcy0+bHptYTIuc2VxdWVuY2UgPSBTRVFfQ09OVFJPTDsKKworCQkJfSBlbHNlIGlmIChiLT5vdXRfcG9zID09IGItPm91dF9zaXplCisJCQkJCXx8IChiLT5pbl9wb3MgPT0gYi0+aW5fc2l6ZQorCQkJCQkJJiYgcy0+dGVtcC5zaXplCisJCQkJCQk8IHMtPmx6bWEyLmNvbXByZXNzZWQpKSB7CisJCQkJcmV0dXJuIFhaX09LOworCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIFNFUV9DT1BZOgorCQkJZGljdF91bmNvbXByZXNzZWQoJnMtPmRpY3QsIGIsICZzLT5sem1hMi5jb21wcmVzc2VkKTsKKwkJCWlmIChzLT5sem1hMi5jb21wcmVzc2VkID4gMCkKKwkJCQlyZXR1cm4gWFpfT0s7CisKKwkJCXMtPmx6bWEyLnNlcXVlbmNlID0gU0VRX0NPTlRST0w7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBYWl9PSzsKK30KKworWFpfRVhURVJOIHN0cnVjdCB4el9kZWNfbHptYTIgKnh6X2RlY19sem1hMl9jcmVhdGUoZW51bSB4el9tb2RlIG1vZGUsCisJCQkJCQkgICB1aW50MzJfdCBkaWN0X21heCkKK3sKKwlzdHJ1Y3QgeHpfZGVjX2x6bWEyICpzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAocyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXMtPmRpY3QubW9kZSA9IG1vZGU7CisJcy0+ZGljdC5zaXplX21heCA9IGRpY3RfbWF4OworCisJaWYgKERFQ19JU19QUkVBTExPQyhtb2RlKSkgeworCQlzLT5kaWN0LmJ1ZiA9IHZtYWxsb2MoZGljdF9tYXgpOworCQlpZiAocy0+ZGljdC5idWYgPT0gTlVMTCkgeworCQkJa2ZyZWUocyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxzZSBpZiAoREVDX0lTX0RZTkFMTE9DKG1vZGUpKSB7CisJCXMtPmRpY3QuYnVmID0gTlVMTDsKKwkJcy0+ZGljdC5hbGxvY2F0ZWQgPSAwOworCX0KKworCXJldHVybiBzOworfQorCitYWl9FWFRFUk4gZW51bSB4el9yZXQgeHpfZGVjX2x6bWEyX3Jlc2V0KHN0cnVjdCB4el9kZWNfbHptYTIgKnMsIHVpbnQ4X3QgcHJvcHMpCit7CisJLyogVGhpcyBsaW1pdHMgZGljdGlvbmFyeSBzaXplIHRvIDMgR2lCIHRvIGtlZXAgcGFyc2luZyBzaW1wbGVyLiAqLworCWlmIChwcm9wcyA+IDM5KQorCQlyZXR1cm4gWFpfT1BUSU9OU19FUlJPUjsKKworCXMtPmRpY3Quc2l6ZSA9IDIgKyAocHJvcHMgJiAxKTsKKwlzLT5kaWN0LnNpemUgPDw9IChwcm9wcyA+PiAxKSArIDExOworCisJaWYgKERFQ19JU19NVUxUSShzLT5kaWN0Lm1vZGUpKSB7CisJCWlmIChzLT5kaWN0LnNpemUgPiBzLT5kaWN0LnNpemVfbWF4KQorCQkJcmV0dXJuIFhaX01FTUxJTUlUX0VSUk9SOworCisJCXMtPmRpY3QuZW5kID0gcy0+ZGljdC5zaXplOworCisJCWlmIChERUNfSVNfRFlOQUxMT0Mocy0+ZGljdC5tb2RlKSkgeworCQkJaWYgKHMtPmRpY3QuYWxsb2NhdGVkIDwgcy0+ZGljdC5zaXplKSB7CisJCQkJdmZyZWUocy0+ZGljdC5idWYpOworCQkJCXMtPmRpY3QuYnVmID0gdm1hbGxvYyhzLT5kaWN0LnNpemUpOworCQkJCWlmIChzLT5kaWN0LmJ1ZiA9PSBOVUxMKSB7CisJCQkJCXMtPmRpY3QuYWxsb2NhdGVkID0gMDsKKwkJCQkJcmV0dXJuIFhaX01FTV9FUlJPUjsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlzLT5sem1hLmxlbiA9IDA7CisKKwlzLT5sem1hMi5zZXF1ZW5jZSA9IFNFUV9DT05UUk9MOworCXMtPmx6bWEyLm5lZWRfZGljdF9yZXNldCA9IHRydWU7CisKKwlzLT50ZW1wLnNpemUgPSAwOworCisJcmV0dXJuIFhaX09LOworfQorCitYWl9FWFRFUk4gdm9pZCB4el9kZWNfbHptYTJfZW5kKHN0cnVjdCB4el9kZWNfbHptYTIgKnMpCit7CisJaWYgKERFQ19JU19NVUxUSShzLT5kaWN0Lm1vZGUpKQorCQl2ZnJlZShzLT5kaWN0LmJ1Zik7CisKKwlrZnJlZShzKTsKK30KZGlmZiAtLWdpdCBhL2xpYi94ei94el9kZWNfc3RyZWFtLmMgYi9saWIveHoveHpfZGVjX3N0cmVhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjODA5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIveHoveHpfZGVjX3N0cmVhbS5jCkBAIC0wLDAgKzEsODIxIEBACisvKgorICogLnh6IFN0cmVhbSBkZWNvZGVyCisgKgorICogQXV0aG9yOiBMYXNzZSBDb2xsaW4gPGxhc3NlLmNvbGxpbkB0dWthYW5pLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gcHV0IGludG8gdGhlIHB1YmxpYyBkb21haW4uCisgKiBZb3UgY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhpcyBmaWxlLgorICovCisKKyNpbmNsdWRlICJ4el9wcml2YXRlLmgiCisjaW5jbHVkZSAieHpfc3RyZWFtLmgiCisKKy8qIEhhc2ggdXNlZCB0byB2YWxpZGF0ZSB0aGUgSW5kZXggZmllbGQgKi8KK3N0cnVjdCB4el9kZWNfaGFzaCB7CisJdmxpX3R5cGUgdW5wYWRkZWQ7CisJdmxpX3R5cGUgdW5jb21wcmVzc2VkOworCXVpbnQzMl90IGNyYzMyOworfTsKKworc3RydWN0IHh6X2RlYyB7CisJLyogUG9zaXRpb24gaW4gZGVjX21haW4oKSAqLworCWVudW0geworCQlTRVFfU1RSRUFNX0hFQURFUiwKKwkJU0VRX0JMT0NLX1NUQVJULAorCQlTRVFfQkxPQ0tfSEVBREVSLAorCQlTRVFfQkxPQ0tfVU5DT01QUkVTUywKKwkJU0VRX0JMT0NLX1BBRERJTkcsCisJCVNFUV9CTE9DS19DSEVDSywKKwkJU0VRX0lOREVYLAorCQlTRVFfSU5ERVhfUEFERElORywKKwkJU0VRX0lOREVYX0NSQzMyLAorCQlTRVFfU1RSRUFNX0ZPT1RFUgorCX0gc2VxdWVuY2U7CisKKwkvKiBQb3NpdGlvbiBpbiB2YXJpYWJsZS1sZW5ndGggaW50ZWdlcnMgYW5kIENoZWNrIGZpZWxkcyAqLworCXVpbnQzMl90IHBvczsKKworCS8qIFZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGRlY29kZWQgYnkgZGVjX3ZsaSgpICovCisJdmxpX3R5cGUgdmxpOworCisJLyogU2F2ZWQgaW5fcG9zIGFuZCBvdXRfcG9zICovCisJc2l6ZV90IGluX3N0YXJ0OworCXNpemVfdCBvdXRfc3RhcnQ7CisKKwkvKiBDUkMzMiB2YWx1ZSBpbiBCbG9jayBvciBJbmRleCAqLworCXVpbnQzMl90IGNyYzMyOworCisJLyogVHlwZSBvZiB0aGUgaW50ZWdyaXR5IGNoZWNrIGNhbGN1bGF0ZWQgZnJvbSB1bmNvbXByZXNzZWQgZGF0YSAqLworCWVudW0geHpfY2hlY2sgY2hlY2tfdHlwZTsKKworCS8qIE9wZXJhdGlvbiBtb2RlICovCisJZW51bSB4el9tb2RlIG1vZGU7CisKKwkvKgorCSAqIFRydWUgaWYgdGhlIG5leHQgY2FsbCB0byB4el9kZWNfcnVuKCkgaXMgYWxsb3dlZCB0byByZXR1cm4KKwkgKiBYWl9CVUZfRVJST1IuCisJICovCisJYm9vbCBhbGxvd19idWZfZXJyb3I7CisKKwkvKiBJbmZvcm1hdGlvbiBzdG9yZWQgaW4gQmxvY2sgSGVhZGVyICovCisJc3RydWN0IHsKKwkJLyoKKwkJICogVmFsdWUgc3RvcmVkIGluIHRoZSBDb21wcmVzc2VkIFNpemUgZmllbGQsIG9yCisJCSAqIFZMSV9VTktOT1dOIGlmIENvbXByZXNzZWQgU2l6ZSBpcyBub3QgcHJlc2VudC4KKwkJICovCisJCXZsaV90eXBlIGNvbXByZXNzZWQ7CisKKwkJLyoKKwkJICogVmFsdWUgc3RvcmVkIGluIHRoZSBVbmNvbXByZXNzZWQgU2l6ZSBmaWVsZCwgb3IKKwkJICogVkxJX1VOS05PV04gaWYgVW5jb21wcmVzc2VkIFNpemUgaXMgbm90IHByZXNlbnQuCisJCSAqLworCQl2bGlfdHlwZSB1bmNvbXByZXNzZWQ7CisKKwkJLyogU2l6ZSBvZiB0aGUgQmxvY2sgSGVhZGVyIGZpZWxkICovCisJCXVpbnQzMl90IHNpemU7CisJfSBibG9ja19oZWFkZXI7CisKKwkvKiBJbmZvcm1hdGlvbiBjb2xsZWN0ZWQgd2hlbiBkZWNvZGluZyBCbG9ja3MgKi8KKwlzdHJ1Y3QgeworCQkvKiBPYnNlcnZlZCBjb21wcmVzc2VkIHNpemUgb2YgdGhlIGN1cnJlbnQgQmxvY2sgKi8KKwkJdmxpX3R5cGUgY29tcHJlc3NlZDsKKworCQkvKiBPYnNlcnZlZCB1bmNvbXByZXNzZWQgc2l6ZSBvZiB0aGUgY3VycmVudCBCbG9jayAqLworCQl2bGlfdHlwZSB1bmNvbXByZXNzZWQ7CisKKwkJLyogTnVtYmVyIG9mIEJsb2NrcyBkZWNvZGVkIHNvIGZhciAqLworCQl2bGlfdHlwZSBjb3VudDsKKworCQkvKgorCQkgKiBIYXNoIGNhbGN1bGF0ZWQgZnJvbSB0aGUgQmxvY2sgc2l6ZXMuIFRoaXMgaXMgdXNlZCB0bworCQkgKiB2YWxpZGF0ZSB0aGUgSW5kZXggZmllbGQuCisJCSAqLworCQlzdHJ1Y3QgeHpfZGVjX2hhc2ggaGFzaDsKKwl9IGJsb2NrOworCisJLyogVmFyaWFibGVzIG5lZWRlZCB3aGVuIHZlcmlmeWluZyB0aGUgSW5kZXggZmllbGQgKi8KKwlzdHJ1Y3QgeworCQkvKiBQb3NpdGlvbiBpbiBkZWNfaW5kZXgoKSAqLworCQllbnVtIHsKKwkJCVNFUV9JTkRFWF9DT1VOVCwKKwkJCVNFUV9JTkRFWF9VTlBBRERFRCwKKwkJCVNFUV9JTkRFWF9VTkNPTVBSRVNTRUQKKwkJfSBzZXF1ZW5jZTsKKworCQkvKiBTaXplIG9mIHRoZSBJbmRleCBpbiBieXRlcyAqLworCQl2bGlfdHlwZSBzaXplOworCisJCS8qIE51bWJlciBvZiBSZWNvcmRzIChtYXRjaGVzIGJsb2NrLmNvdW50IGluIHZhbGlkIGZpbGVzKSAqLworCQl2bGlfdHlwZSBjb3VudDsKKworCQkvKgorCQkgKiBIYXNoIGNhbGN1bGF0ZWQgZnJvbSB0aGUgUmVjb3JkcyAobWF0Y2hlcyBibG9jay5oYXNoIGluCisJCSAqIHZhbGlkIGZpbGVzKS4KKwkJICovCisJCXN0cnVjdCB4el9kZWNfaGFzaCBoYXNoOworCX0gaW5kZXg7CisKKwkvKgorCSAqIFRlbXBvcmFyeSBidWZmZXIgbmVlZGVkIHRvIGhvbGQgU3RyZWFtIEhlYWRlciwgQmxvY2sgSGVhZGVyLAorCSAqIGFuZCBTdHJlYW0gRm9vdGVyLiBUaGUgQmxvY2sgSGVhZGVyIGlzIHRoZSBiaWdnZXN0ICgxIEtpQikKKwkgKiBzbyB3ZSByZXNlcnZlIHNwYWNlIGFjY29yZGluZyB0byB0aGF0LiBidWZbXSBoYXMgdG8gYmUgYWxpZ25lZAorCSAqIHRvIGEgbXVsdGlwbGUgb2YgZm91ciBieXRlczsgdGhlIHNpemVfdCB2YXJpYWJsZXMgYmVmb3JlIGl0CisJICogc2hvdWxkIGd1YXJhbnRlZSB0aGlzLgorCSAqLworCXN0cnVjdCB7CisJCXNpemVfdCBwb3M7CisJCXNpemVfdCBzaXplOworCQl1aW50OF90IGJ1ZlsxMDI0XTsKKwl9IHRlbXA7CisKKwlzdHJ1Y3QgeHpfZGVjX2x6bWEyICpsem1hMjsKKworI2lmZGVmIFhaX0RFQ19CQ0oKKwlzdHJ1Y3QgeHpfZGVjX2JjaiAqYmNqOworCWJvb2wgYmNqX2FjdGl2ZTsKKyNlbmRpZgorfTsKKworI2lmZGVmIFhaX0RFQ19BTllfQ0hFQ0sKKy8qIFNpemVzIG9mIHRoZSBDaGVjayBmaWVsZCB3aXRoIGRpZmZlcmVudCBDaGVjayBJRHMgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IGNoZWNrX3NpemVzWzE2XSA9IHsKKwkwLAorCTQsIDQsIDQsCisJOCwgOCwgOCwKKwkxNiwgMTYsIDE2LAorCTMyLCAzMiwgMzIsCisJNjQsIDY0LCA2NAorfTsKKyNlbmRpZgorCisvKgorICogRmlsbCBzLT50ZW1wIGJ5IGNvcHlpbmcgZGF0YSBzdGFydGluZyBmcm9tIGItPmluW2ItPmluX3Bvc10uIENhbGxlcgorICogbXVzdCBoYXZlIHNldCBzLT50ZW1wLnBvcyB0byBpbmRpY2F0ZSBob3cgbXVjaCBkYXRhIHdlIGFyZSBzdXBwb3NlZAorICogdG8gY29weSBpbnRvIHMtPnRlbXAuYnVmLiBSZXR1cm4gdHJ1ZSBvbmNlIHMtPnRlbXAucG9zIGhhcyByZWFjaGVkCisgKiBzLT50ZW1wLnNpemUuCisgKi8KK3N0YXRpYyBib29sIGZpbGxfdGVtcChzdHJ1Y3QgeHpfZGVjICpzLCBzdHJ1Y3QgeHpfYnVmICpiKQoreworCXNpemVfdCBjb3B5X3NpemUgPSBtaW5fdChzaXplX3QsCisJCQliLT5pbl9zaXplIC0gYi0+aW5fcG9zLCBzLT50ZW1wLnNpemUgLSBzLT50ZW1wLnBvcyk7CisKKwltZW1jcHkocy0+dGVtcC5idWYgKyBzLT50ZW1wLnBvcywgYi0+aW4gKyBiLT5pbl9wb3MsIGNvcHlfc2l6ZSk7CisJYi0+aW5fcG9zICs9IGNvcHlfc2l6ZTsKKwlzLT50ZW1wLnBvcyArPSBjb3B5X3NpemU7CisKKwlpZiAocy0+dGVtcC5wb3MgPT0gcy0+dGVtcC5zaXplKSB7CisJCXMtPnRlbXAucG9zID0gMDsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKiBEZWNvZGUgYSB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciAobGl0dGxlLWVuZGlhbiBiYXNlLTEyOCBlbmNvZGluZykgKi8KK3N0YXRpYyBlbnVtIHh6X3JldCBkZWNfdmxpKHN0cnVjdCB4el9kZWMgKnMsIGNvbnN0IHVpbnQ4X3QgKmluLAorCQkJICAgc2l6ZV90ICppbl9wb3MsIHNpemVfdCBpbl9zaXplKQoreworCXVpbnQ4X3QgYnl0ZTsKKworCWlmIChzLT5wb3MgPT0gMCkKKwkJcy0+dmxpID0gMDsKKworCXdoaWxlICgqaW5fcG9zIDwgaW5fc2l6ZSkgeworCQlieXRlID0gaW5bKmluX3Bvc107CisJCSsrKmluX3BvczsKKworCQlzLT52bGkgfD0gKHZsaV90eXBlKShieXRlICYgMHg3RikgPDwgcy0+cG9zOworCisJCWlmICgoYnl0ZSAmIDB4ODApID09IDApIHsKKwkJCS8qIERvbid0IGFsbG93IG5vbi1taW5pbWFsIGVuY29kaW5ncy4gKi8KKwkJCWlmIChieXRlID09IDAgJiYgcy0+cG9zICE9IDApCisJCQkJcmV0dXJuIFhaX0RBVEFfRVJST1I7CisKKwkJCXMtPnBvcyA9IDA7CisJCQlyZXR1cm4gWFpfU1RSRUFNX0VORDsKKwkJfQorCisJCXMtPnBvcyArPSA3OworCQlpZiAocy0+cG9zID09IDcgKiBWTElfQllURVNfTUFYKQorCQkJcmV0dXJuIFhaX0RBVEFfRVJST1I7CisJfQorCisJcmV0dXJuIFhaX09LOworfQorCisvKgorICogRGVjb2RlIHRoZSBDb21wcmVzc2VkIERhdGEgZmllbGQgZnJvbSBhIEJsb2NrLiBVcGRhdGUgYW5kIHZhbGlkYXRlCisgKiB0aGUgb2JzZXJ2ZWQgY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkIHNpemVzIG9mIHRoZSBCbG9jayBzbyB0aGF0CisgKiB0aGV5IGRvbid0IGV4Y2VlZCB0aGUgdmFsdWVzIHBvc3NpYmx5IHN0b3JlZCBpbiB0aGUgQmxvY2sgSGVhZGVyCisgKiAodmFsaWRhdGlvbiBhc3N1bWVzIHRoYXQgbm8gaW50ZWdlciBvdmVyZmxvdyBvY2N1cnMsIHNpbmNlIHZsaV90eXBlCisgKiBpcyBub3JtYWxseSB1aW50NjRfdCkuIFVwZGF0ZSB0aGUgQ1JDMzIgaWYgcHJlc2VuY2Ugb2YgdGhlIENSQzMyCisgKiBmaWVsZCB3YXMgaW5kaWNhdGVkIGluIFN0cmVhbSBIZWFkZXIuCisgKgorICogT25jZSB0aGUgZGVjb2RpbmcgaXMgZmluaXNoZWQsIHZhbGlkYXRlIHRoYXQgdGhlIG9ic2VydmVkIHNpemVzIG1hdGNoCisgKiB0aGUgc2l6ZXMgcG9zc2libHkgc3RvcmVkIGluIHRoZSBCbG9jayBIZWFkZXIuIFVwZGF0ZSB0aGUgaGFzaCBhbmQKKyAqIEJsb2NrIGNvdW50LCB3aGljaCBhcmUgbGF0ZXIgdXNlZCB0byB2YWxpZGF0ZSB0aGUgSW5kZXggZmllbGQuCisgKi8KK3N0YXRpYyBlbnVtIHh6X3JldCBkZWNfYmxvY2soc3RydWN0IHh6X2RlYyAqcywgc3RydWN0IHh6X2J1ZiAqYikKK3sKKwllbnVtIHh6X3JldCByZXQ7CisKKwlzLT5pbl9zdGFydCA9IGItPmluX3BvczsKKwlzLT5vdXRfc3RhcnQgPSBiLT5vdXRfcG9zOworCisjaWZkZWYgWFpfREVDX0JDSgorCWlmIChzLT5iY2pfYWN0aXZlKQorCQlyZXQgPSB4el9kZWNfYmNqX3J1bihzLT5iY2osIHMtPmx6bWEyLCBiKTsKKwllbHNlCisjZW5kaWYKKwkJcmV0ID0geHpfZGVjX2x6bWEyX3J1bihzLT5sem1hMiwgYik7CisKKwlzLT5ibG9jay5jb21wcmVzc2VkICs9IGItPmluX3BvcyAtIHMtPmluX3N0YXJ0OworCXMtPmJsb2NrLnVuY29tcHJlc3NlZCArPSBiLT5vdXRfcG9zIC0gcy0+b3V0X3N0YXJ0OworCisJLyoKKwkgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHNlcGFyYXRlbHkgY2hlY2sgZm9yIFZMSV9VTktOT1dOLCBzaW5jZQorCSAqIHRoZSBvYnNlcnZlZCBzaXplcyBhcmUgYWx3YXlzIHNtYWxsZXIgdGhhbiBWTElfVU5LTk9XTi4KKwkgKi8KKwlpZiAocy0+YmxvY2suY29tcHJlc3NlZCA+IHMtPmJsb2NrX2hlYWRlci5jb21wcmVzc2VkCisJCQl8fCBzLT5ibG9jay51bmNvbXByZXNzZWQKKwkJCQk+IHMtPmJsb2NrX2hlYWRlci51bmNvbXByZXNzZWQpCisJCXJldHVybiBYWl9EQVRBX0VSUk9SOworCisJaWYgKHMtPmNoZWNrX3R5cGUgPT0gWFpfQ0hFQ0tfQ1JDMzIpCisJCXMtPmNyYzMyID0geHpfY3JjMzIoYi0+b3V0ICsgcy0+b3V0X3N0YXJ0LAorCQkJCWItPm91dF9wb3MgLSBzLT5vdXRfc3RhcnQsIHMtPmNyYzMyKTsKKworCWlmIChyZXQgPT0gWFpfU1RSRUFNX0VORCkgeworCQlpZiAocy0+YmxvY2tfaGVhZGVyLmNvbXByZXNzZWQgIT0gVkxJX1VOS05PV04KKwkJCQkmJiBzLT5ibG9ja19oZWFkZXIuY29tcHJlc3NlZAorCQkJCQkhPSBzLT5ibG9jay5jb21wcmVzc2VkKQorCQkJcmV0dXJuIFhaX0RBVEFfRVJST1I7CisKKwkJaWYgKHMtPmJsb2NrX2hlYWRlci51bmNvbXByZXNzZWQgIT0gVkxJX1VOS05PV04KKwkJCQkmJiBzLT5ibG9ja19oZWFkZXIudW5jb21wcmVzc2VkCisJCQkJCSE9IHMtPmJsb2NrLnVuY29tcHJlc3NlZCkKKwkJCXJldHVybiBYWl9EQVRBX0VSUk9SOworCisJCXMtPmJsb2NrLmhhc2gudW5wYWRkZWQgKz0gcy0+YmxvY2tfaGVhZGVyLnNpemUKKwkJCQkrIHMtPmJsb2NrLmNvbXByZXNzZWQ7CisKKyNpZmRlZiBYWl9ERUNfQU5ZX0NIRUNLCisJCXMtPmJsb2NrLmhhc2gudW5wYWRkZWQgKz0gY2hlY2tfc2l6ZXNbcy0+Y2hlY2tfdHlwZV07CisjZWxzZQorCQlpZiAocy0+Y2hlY2tfdHlwZSA9PSBYWl9DSEVDS19DUkMzMikKKwkJCXMtPmJsb2NrLmhhc2gudW5wYWRkZWQgKz0gNDsKKyNlbmRpZgorCisJCXMtPmJsb2NrLmhhc2gudW5jb21wcmVzc2VkICs9IHMtPmJsb2NrLnVuY29tcHJlc3NlZDsKKwkJcy0+YmxvY2suaGFzaC5jcmMzMiA9IHh6X2NyYzMyKAorCQkJCShjb25zdCB1aW50OF90ICopJnMtPmJsb2NrLmhhc2gsCisJCQkJc2l6ZW9mKHMtPmJsb2NrLmhhc2gpLCBzLT5ibG9jay5oYXNoLmNyYzMyKTsKKworCQkrK3MtPmJsb2NrLmNvdW50OworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIFVwZGF0ZSB0aGUgSW5kZXggc2l6ZSBhbmQgdGhlIENSQzMyIHZhbHVlLiAqLworc3RhdGljIHZvaWQgaW5kZXhfdXBkYXRlKHN0cnVjdCB4el9kZWMgKnMsIGNvbnN0IHN0cnVjdCB4el9idWYgKmIpCit7CisJc2l6ZV90IGluX3VzZWQgPSBiLT5pbl9wb3MgLSBzLT5pbl9zdGFydDsKKwlzLT5pbmRleC5zaXplICs9IGluX3VzZWQ7CisJcy0+Y3JjMzIgPSB4el9jcmMzMihiLT5pbiArIHMtPmluX3N0YXJ0LCBpbl91c2VkLCBzLT5jcmMzMik7Cit9CisKKy8qCisgKiBEZWNvZGUgdGhlIE51bWJlciBvZiBSZWNvcmRzLCBVbnBhZGRlZCBTaXplLCBhbmQgVW5jb21wcmVzc2VkIFNpemUKKyAqIGZpZWxkcyBmcm9tIHRoZSBJbmRleCBmaWVsZC4gVGhhdCBpcywgSW5kZXggUGFkZGluZyBhbmQgQ1JDMzIgYXJlIG5vdAorICogZGVjb2RlZCBieSB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgY2FuIHJldHVybiBYWl9PSyAobW9yZSBpbnB1dCBuZWVkZWQpLCBYWl9TVFJFQU1fRU5EIChldmVyeXRoaW5nCisgKiBzdWNjZXNzZnVsbHkgZGVjb2RlZCksIG9yIFhaX0RBVEFfRVJST1IgKGlucHV0IGlzIGNvcnJ1cHQpLgorICovCitzdGF0aWMgZW51bSB4el9yZXQgZGVjX2luZGV4KHN0cnVjdCB4el9kZWMgKnMsIHN0cnVjdCB4el9idWYgKmIpCit7CisJZW51bSB4el9yZXQgcmV0OworCisJZG8geworCQlyZXQgPSBkZWNfdmxpKHMsIGItPmluLCAmYi0+aW5fcG9zLCBiLT5pbl9zaXplKTsKKwkJaWYgKHJldCAhPSBYWl9TVFJFQU1fRU5EKSB7CisJCQlpbmRleF91cGRhdGUocywgYik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJc3dpdGNoIChzLT5pbmRleC5zZXF1ZW5jZSkgeworCQljYXNlIFNFUV9JTkRFWF9DT1VOVDoKKwkJCXMtPmluZGV4LmNvdW50ID0gcy0+dmxpOworCisJCQkvKgorCQkJICogVmFsaWRhdGUgdGhhdCB0aGUgTnVtYmVyIG9mIFJlY29yZHMgZmllbGQKKwkJCSAqIGluZGljYXRlcyB0aGUgc2FtZSBudW1iZXIgb2YgUmVjb3JkcyBhcworCQkJICogdGhlcmUgd2VyZSBCbG9ja3MgaW4gdGhlIFN0cmVhbS4KKwkJCSAqLworCQkJaWYgKHMtPmluZGV4LmNvdW50ICE9IHMtPmJsb2NrLmNvdW50KQorCQkJCXJldHVybiBYWl9EQVRBX0VSUk9SOworCisJCQlzLT5pbmRleC5zZXF1ZW5jZSA9IFNFUV9JTkRFWF9VTlBBRERFRDsKKwkJCWJyZWFrOworCisJCWNhc2UgU0VRX0lOREVYX1VOUEFEREVEOgorCQkJcy0+aW5kZXguaGFzaC51bnBhZGRlZCArPSBzLT52bGk7CisJCQlzLT5pbmRleC5zZXF1ZW5jZSA9IFNFUV9JTkRFWF9VTkNPTVBSRVNTRUQ7CisJCQlicmVhazsKKworCQljYXNlIFNFUV9JTkRFWF9VTkNPTVBSRVNTRUQ6CisJCQlzLT5pbmRleC5oYXNoLnVuY29tcHJlc3NlZCArPSBzLT52bGk7CisJCQlzLT5pbmRleC5oYXNoLmNyYzMyID0geHpfY3JjMzIoCisJCQkJCShjb25zdCB1aW50OF90ICopJnMtPmluZGV4Lmhhc2gsCisJCQkJCXNpemVvZihzLT5pbmRleC5oYXNoKSwKKwkJCQkJcy0+aW5kZXguaGFzaC5jcmMzMik7CisJCQktLXMtPmluZGV4LmNvdW50OworCQkJcy0+aW5kZXguc2VxdWVuY2UgPSBTRVFfSU5ERVhfVU5QQURERUQ7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKHMtPmluZGV4LmNvdW50ID4gMCk7CisKKwlyZXR1cm4gWFpfU1RSRUFNX0VORDsKK30KKworLyoKKyAqIFZhbGlkYXRlIHRoYXQgdGhlIG5leHQgZm91ciBpbnB1dCBieXRlcyBtYXRjaCB0aGUgdmFsdWUgb2Ygcy0+Y3JjMzIuCisgKiBzLT5wb3MgbXVzdCBiZSB6ZXJvIHdoZW4gc3RhcnRpbmcgdG8gdmFsaWRhdGUgdGhlIGZpcnN0IGJ5dGUuCisgKi8KK3N0YXRpYyBlbnVtIHh6X3JldCBjcmMzMl92YWxpZGF0ZShzdHJ1Y3QgeHpfZGVjICpzLCBzdHJ1Y3QgeHpfYnVmICpiKQoreworCWRvIHsKKwkJaWYgKGItPmluX3BvcyA9PSBiLT5pbl9zaXplKQorCQkJcmV0dXJuIFhaX09LOworCisJCWlmICgoKHMtPmNyYzMyID4+IHMtPnBvcykgJiAweEZGKSAhPSBiLT5pbltiLT5pbl9wb3MrK10pCisJCQlyZXR1cm4gWFpfREFUQV9FUlJPUjsKKworCQlzLT5wb3MgKz0gODsKKworCX0gd2hpbGUgKHMtPnBvcyA8IDMyKTsKKworCXMtPmNyYzMyID0gMDsKKwlzLT5wb3MgPSAwOworCisJcmV0dXJuIFhaX1NUUkVBTV9FTkQ7Cit9CisKKyNpZmRlZiBYWl9ERUNfQU5ZX0NIRUNLCisvKgorICogU2tpcCBvdmVyIHRoZSBDaGVjayBmaWVsZCB3aGVuIHRoZSBDaGVjayBJRCBpcyBub3Qgc3VwcG9ydGVkLgorICogUmV0dXJucyB0cnVlIG9uY2UgdGhlIHdob2xlIENoZWNrIGZpZWxkIGhhcyBiZWVuIHNraXBwZWQgb3Zlci4KKyAqLworc3RhdGljIGJvb2wgY2hlY2tfc2tpcChzdHJ1Y3QgeHpfZGVjICpzLCBzdHJ1Y3QgeHpfYnVmICpiKQoreworCXdoaWxlIChzLT5wb3MgPCBjaGVja19zaXplc1tzLT5jaGVja190eXBlXSkgeworCQlpZiAoYi0+aW5fcG9zID09IGItPmluX3NpemUpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJKytiLT5pbl9wb3M7CisJCSsrcy0+cG9zOworCX0KKworCXMtPnBvcyA9IDA7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCisvKiBEZWNvZGUgdGhlIFN0cmVhbSBIZWFkZXIgZmllbGQgKHRoZSBmaXJzdCAxMiBieXRlcyBvZiB0aGUgLnh6IFN0cmVhbSkuICovCitzdGF0aWMgZW51bSB4el9yZXQgZGVjX3N0cmVhbV9oZWFkZXIoc3RydWN0IHh6X2RlYyAqcykKK3sKKwlpZiAoIW1lbWVxKHMtPnRlbXAuYnVmLCBIRUFERVJfTUFHSUMsIEhFQURFUl9NQUdJQ19TSVpFKSkKKwkJcmV0dXJuIFhaX0ZPUk1BVF9FUlJPUjsKKworCWlmICh4el9jcmMzMihzLT50ZW1wLmJ1ZiArIEhFQURFUl9NQUdJQ19TSVpFLCAyLCAwKQorCQkJIT0gZ2V0X2xlMzIocy0+dGVtcC5idWYgKyBIRUFERVJfTUFHSUNfU0laRSArIDIpKQorCQlyZXR1cm4gWFpfREFUQV9FUlJPUjsKKworCWlmIChzLT50ZW1wLmJ1ZltIRUFERVJfTUFHSUNfU0laRV0gIT0gMCkKKwkJcmV0dXJuIFhaX09QVElPTlNfRVJST1I7CisKKwkvKgorCSAqIE9mIGludGVncml0eSBjaGVja3MsIHdlIHN1cHBvcnQgb25seSBub25lIChDaGVjayBJRCA9IDApIGFuZAorCSAqIENSQzMyIChDaGVjayBJRCA9IDEpLiBIb3dldmVyLCBpZiBYWl9ERUNfQU5ZX0NIRUNLIGlzIGRlZmluZWQsCisJICogd2Ugd2lsbCBhY2NlcHQgb3RoZXIgY2hlY2sgdHlwZXMgdG9vLCBidXQgdGhlbiB0aGUgY2hlY2sgd29uJ3QKKwkgKiBiZSB2ZXJpZmllZCBhbmQgYSB3YXJuaW5nIChYWl9VTlNVUFBPUlRFRF9DSEVDSykgd2lsbCBiZSBnaXZlbi4KKwkgKi8KKwlzLT5jaGVja190eXBlID0gcy0+dGVtcC5idWZbSEVBREVSX01BR0lDX1NJWkUgKyAxXTsKKworI2lmZGVmIFhaX0RFQ19BTllfQ0hFQ0sKKwlpZiAocy0+Y2hlY2tfdHlwZSA+IFhaX0NIRUNLX01BWCkKKwkJcmV0dXJuIFhaX09QVElPTlNfRVJST1I7CisKKwlpZiAocy0+Y2hlY2tfdHlwZSA+IFhaX0NIRUNLX0NSQzMyKQorCQlyZXR1cm4gWFpfVU5TVVBQT1JURURfQ0hFQ0s7CisjZWxzZQorCWlmIChzLT5jaGVja190eXBlID4gWFpfQ0hFQ0tfQ1JDMzIpCisJCXJldHVybiBYWl9PUFRJT05TX0VSUk9SOworI2VuZGlmCisKKwlyZXR1cm4gWFpfT0s7Cit9CisKKy8qIERlY29kZSB0aGUgU3RyZWFtIEZvb3RlciBmaWVsZCAodGhlIGxhc3QgMTIgYnl0ZXMgb2YgdGhlIC54eiBTdHJlYW0pICovCitzdGF0aWMgZW51bSB4el9yZXQgZGVjX3N0cmVhbV9mb290ZXIoc3RydWN0IHh6X2RlYyAqcykKK3sKKwlpZiAoIW1lbWVxKHMtPnRlbXAuYnVmICsgMTAsIEZPT1RFUl9NQUdJQywgRk9PVEVSX01BR0lDX1NJWkUpKQorCQlyZXR1cm4gWFpfREFUQV9FUlJPUjsKKworCWlmICh4el9jcmMzMihzLT50ZW1wLmJ1ZiArIDQsIDYsIDApICE9IGdldF9sZTMyKHMtPnRlbXAuYnVmKSkKKwkJcmV0dXJuIFhaX0RBVEFfRVJST1I7CisKKwkvKgorCSAqIFZhbGlkYXRlIEJhY2t3YXJkIFNpemUuIE5vdGUgdGhhdCB3ZSBuZXZlciBhZGRlZCB0aGUgc2l6ZSBvZiB0aGUKKwkgKiBJbmRleCBDUkMzMiBmaWVsZCB0byBzLT5pbmRleC5zaXplLCB0aHVzIHdlIHVzZSBzLT5pbmRleC5zaXplIC8gNAorCSAqIGluc3RlYWQgb2Ygcy0+aW5kZXguc2l6ZSAvIDQgLSAxLgorCSAqLworCWlmICgocy0+aW5kZXguc2l6ZSA+PiAyKSAhPSBnZXRfbGUzMihzLT50ZW1wLmJ1ZiArIDQpKQorCQlyZXR1cm4gWFpfREFUQV9FUlJPUjsKKworCWlmIChzLT50ZW1wLmJ1Zls4XSAhPSAwIHx8IHMtPnRlbXAuYnVmWzldICE9IHMtPmNoZWNrX3R5cGUpCisJCXJldHVybiBYWl9EQVRBX0VSUk9SOworCisJLyoKKwkgKiBVc2UgWFpfU1RSRUFNX0VORCBpbnN0ZWFkIG9mIFhaX09LIHRvIGJlIG1vcmUgY29udmVuaWVudAorCSAqIGZvciB0aGUgY2FsbGVyLgorCSAqLworCXJldHVybiBYWl9TVFJFQU1fRU5EOworfQorCisvKiBEZWNvZGUgdGhlIEJsb2NrIEhlYWRlciBhbmQgaW5pdGlhbGl6ZSB0aGUgZmlsdGVyIGNoYWluLiAqLworc3RhdGljIGVudW0geHpfcmV0IGRlY19ibG9ja19oZWFkZXIoc3RydWN0IHh6X2RlYyAqcykKK3sKKwllbnVtIHh6X3JldCByZXQ7CisKKwkvKgorCSAqIFZhbGlkYXRlIHRoZSBDUkMzMi4gV2Uga25vdyB0aGF0IHRoZSB0ZW1wIGJ1ZmZlciBpcyBhdCBsZWFzdAorCSAqIGVpZ2h0IGJ5dGVzIHNvIHRoaXMgaXMgc2FmZS4KKwkgKi8KKwlzLT50ZW1wLnNpemUgLT0gNDsKKwlpZiAoeHpfY3JjMzIocy0+dGVtcC5idWYsIHMtPnRlbXAuc2l6ZSwgMCkKKwkJCSE9IGdldF9sZTMyKHMtPnRlbXAuYnVmICsgcy0+dGVtcC5zaXplKSkKKwkJcmV0dXJuIFhaX0RBVEFfRVJST1I7CisKKwlzLT50ZW1wLnBvcyA9IDI7CisKKwkvKgorCSAqIENhdGNoIHVuc3VwcG9ydGVkIEJsb2NrIEZsYWdzLiBXZSBzdXBwb3J0IG9ubHkgb25lIG9yIHR3byBmaWx0ZXJzCisJICogaW4gdGhlIGNoYWluLCBzbyB3ZSBjYXRjaCB0aGF0IHdpdGggdGhlIHNhbWUgdGVzdC4KKwkgKi8KKyNpZmRlZiBYWl9ERUNfQkNKCisJaWYgKHMtPnRlbXAuYnVmWzFdICYgMHgzRSkKKyNlbHNlCisJaWYgKHMtPnRlbXAuYnVmWzFdICYgMHgzRikKKyNlbmRpZgorCQlyZXR1cm4gWFpfT1BUSU9OU19FUlJPUjsKKworCS8qIENvbXByZXNzZWQgU2l6ZSAqLworCWlmIChzLT50ZW1wLmJ1ZlsxXSAmIDB4NDApIHsKKwkJaWYgKGRlY192bGkocywgcy0+dGVtcC5idWYsICZzLT50ZW1wLnBvcywgcy0+dGVtcC5zaXplKQorCQkJCQkhPSBYWl9TVFJFQU1fRU5EKQorCQkJcmV0dXJuIFhaX0RBVEFfRVJST1I7CisKKwkJcy0+YmxvY2tfaGVhZGVyLmNvbXByZXNzZWQgPSBzLT52bGk7CisJfSBlbHNlIHsKKwkJcy0+YmxvY2tfaGVhZGVyLmNvbXByZXNzZWQgPSBWTElfVU5LTk9XTjsKKwl9CisKKwkvKiBVbmNvbXByZXNzZWQgU2l6ZSAqLworCWlmIChzLT50ZW1wLmJ1ZlsxXSAmIDB4ODApIHsKKwkJaWYgKGRlY192bGkocywgcy0+dGVtcC5idWYsICZzLT50ZW1wLnBvcywgcy0+dGVtcC5zaXplKQorCQkJCSE9IFhaX1NUUkVBTV9FTkQpCisJCQlyZXR1cm4gWFpfREFUQV9FUlJPUjsKKworCQlzLT5ibG9ja19oZWFkZXIudW5jb21wcmVzc2VkID0gcy0+dmxpOworCX0gZWxzZSB7CisJCXMtPmJsb2NrX2hlYWRlci51bmNvbXByZXNzZWQgPSBWTElfVU5LTk9XTjsKKwl9CisKKyNpZmRlZiBYWl9ERUNfQkNKCisJLyogSWYgdGhlcmUgYXJlIHR3byBmaWx0ZXJzLCB0aGUgZmlyc3Qgb25lIG11c3QgYmUgYSBCQ0ogZmlsdGVyLiAqLworCXMtPmJjal9hY3RpdmUgPSBzLT50ZW1wLmJ1ZlsxXSAmIDB4MDE7CisJaWYgKHMtPmJjal9hY3RpdmUpIHsKKwkJaWYgKHMtPnRlbXAuc2l6ZSAtIHMtPnRlbXAucG9zIDwgMikKKwkJCXJldHVybiBYWl9PUFRJT05TX0VSUk9SOworCisJCXJldCA9IHh6X2RlY19iY2pfcmVzZXQocy0+YmNqLCBzLT50ZW1wLmJ1ZltzLT50ZW1wLnBvcysrXSk7CisJCWlmIChyZXQgIT0gWFpfT0spCisJCQlyZXR1cm4gcmV0OworCisJCS8qCisJCSAqIFdlIGRvbid0IHN1cHBvcnQgY3VzdG9tIHN0YXJ0IG9mZnNldCwKKwkJICogc28gU2l6ZSBvZiBQcm9wZXJ0aWVzIG11c3QgYmUgemVyby4KKwkJICovCisJCWlmIChzLT50ZW1wLmJ1ZltzLT50ZW1wLnBvcysrXSAhPSAweDAwKQorCQkJcmV0dXJuIFhaX09QVElPTlNfRVJST1I7CisJfQorI2VuZGlmCisKKwkvKiBWYWxpZCBGaWx0ZXIgRmxhZ3MgYWx3YXlzIHRha2UgYXQgbGVhc3QgdHdvIGJ5dGVzLiAqLworCWlmIChzLT50ZW1wLnNpemUgLSBzLT50ZW1wLnBvcyA8IDIpCisJCXJldHVybiBYWl9EQVRBX0VSUk9SOworCisJLyogRmlsdGVyIElEID0gTFpNQTIgKi8KKwlpZiAocy0+dGVtcC5idWZbcy0+dGVtcC5wb3MrK10gIT0gMHgyMSkKKwkJcmV0dXJuIFhaX09QVElPTlNfRVJST1I7CisKKwkvKiBTaXplIG9mIFByb3BlcnRpZXMgPSAxLWJ5dGUgRmlsdGVyIFByb3BlcnRpZXMgKi8KKwlpZiAocy0+dGVtcC5idWZbcy0+dGVtcC5wb3MrK10gIT0gMHgwMSkKKwkJcmV0dXJuIFhaX09QVElPTlNfRVJST1I7CisKKwkvKiBGaWx0ZXIgUHJvcGVydGllcyBjb250YWlucyBMWk1BMiBkaWN0aW9uYXJ5IHNpemUuICovCisJaWYgKHMtPnRlbXAuc2l6ZSAtIHMtPnRlbXAucG9zIDwgMSkKKwkJcmV0dXJuIFhaX0RBVEFfRVJST1I7CisKKwlyZXQgPSB4el9kZWNfbHptYTJfcmVzZXQocy0+bHptYTIsIHMtPnRlbXAuYnVmW3MtPnRlbXAucG9zKytdKTsKKwlpZiAocmV0ICE9IFhaX09LKQorCQlyZXR1cm4gcmV0OworCisJLyogVGhlIHJlc3QgbXVzdCBiZSBIZWFkZXIgUGFkZGluZy4gKi8KKwl3aGlsZSAocy0+dGVtcC5wb3MgPCBzLT50ZW1wLnNpemUpCisJCWlmIChzLT50ZW1wLmJ1ZltzLT50ZW1wLnBvcysrXSAhPSAweDAwKQorCQkJcmV0dXJuIFhaX09QVElPTlNfRVJST1I7CisKKwlzLT50ZW1wLnBvcyA9IDA7CisJcy0+YmxvY2suY29tcHJlc3NlZCA9IDA7CisJcy0+YmxvY2sudW5jb21wcmVzc2VkID0gMDsKKworCXJldHVybiBYWl9PSzsKK30KKworc3RhdGljIGVudW0geHpfcmV0IGRlY19tYWluKHN0cnVjdCB4el9kZWMgKnMsIHN0cnVjdCB4el9idWYgKmIpCit7CisJZW51bSB4el9yZXQgcmV0OworCisJLyoKKwkgKiBTdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gZm9yIHRoZSBjYXNlIHdoZW4gd2UgYXJlIGluIHRoZSBtaWRkbGUKKwkgKiBvZiB0aGUgSW5kZXggZmllbGQuCisJICovCisJcy0+aW5fc3RhcnQgPSBiLT5pbl9wb3M7CisKKwl3aGlsZSAodHJ1ZSkgeworCQlzd2l0Y2ggKHMtPnNlcXVlbmNlKSB7CisJCWNhc2UgU0VRX1NUUkVBTV9IRUFERVI6CisJCQkvKgorCQkJICogU3RyZWFtIEhlYWRlciBpcyBjb3BpZWQgdG8gcy0+dGVtcCwgYW5kIHRoZW4KKwkJCSAqIGRlY29kZWQgZnJvbSB0aGVyZS4gVGhpcyB3YXkgaWYgdGhlIGNhbGxlcgorCQkJICogZ2l2ZXMgdXMgb25seSBsaXR0bGUgaW5wdXQgYXQgYSB0aW1lLCB3ZSBjYW4KKwkJCSAqIHN0aWxsIGtlZXAgdGhlIFN0cmVhbSBIZWFkZXIgZGVjb2RpbmcgY29kZQorCQkJICogc2ltcGxlLiBTaW1pbGFyIGFwcHJvYWNoIGlzIHVzZWQgaW4gbWFueSBwbGFjZXMKKwkJCSAqIGluIHRoaXMgZmlsZS4KKwkJCSAqLworCQkJaWYgKCFmaWxsX3RlbXAocywgYikpCisJCQkJcmV0dXJuIFhaX09LOworCisJCQkvKgorCQkJICogSWYgZGVjX3N0cmVhbV9oZWFkZXIoKSByZXR1cm5zCisJCQkgKiBYWl9VTlNVUFBPUlRFRF9DSEVDSywgaXQgaXMgc3RpbGwgcG9zc2libGUKKwkJCSAqIHRvIGNvbnRpbnVlIGRlY29kaW5nIGlmIHdvcmtpbmcgaW4gbXVsdGktY2FsbAorCQkJICogbW9kZS4gVGh1cywgdXBkYXRlIHMtPnNlcXVlbmNlIGJlZm9yZSBjYWxsaW5nCisJCQkgKiBkZWNfc3RyZWFtX2hlYWRlcigpLgorCQkJICovCisJCQlzLT5zZXF1ZW5jZSA9IFNFUV9CTE9DS19TVEFSVDsKKworCQkJcmV0ID0gZGVjX3N0cmVhbV9oZWFkZXIocyk7CisJCQlpZiAocmV0ICE9IFhaX09LKQorCQkJCXJldHVybiByZXQ7CisKKwkJY2FzZSBTRVFfQkxPQ0tfU1RBUlQ6CisJCQkvKiBXZSBuZWVkIG9uZSBieXRlIG9mIGlucHV0IHRvIGNvbnRpbnVlLiAqLworCQkJaWYgKGItPmluX3BvcyA9PSBiLT5pbl9zaXplKQorCQkJCXJldHVybiBYWl9PSzsKKworCQkJLyogU2VlIGlmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgSW5kZXggZmllbGQuICovCisJCQlpZiAoYi0+aW5bYi0+aW5fcG9zXSA9PSAwKSB7CisJCQkJcy0+aW5fc3RhcnQgPSBiLT5pbl9wb3MrKzsKKwkJCQlzLT5zZXF1ZW5jZSA9IFNFUV9JTkRFWDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyoKKwkJCSAqIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgQmxvY2sgSGVhZGVyIGFuZAorCQkJICogcHJlcGFyZSB0byBkZWNvZGUgaXQuCisJCQkgKi8KKwkJCXMtPmJsb2NrX2hlYWRlci5zaXplCisJCQkJPSAoKHVpbnQzMl90KWItPmluW2ItPmluX3Bvc10gKyAxKSAqIDQ7CisKKwkJCXMtPnRlbXAuc2l6ZSA9IHMtPmJsb2NrX2hlYWRlci5zaXplOworCQkJcy0+dGVtcC5wb3MgPSAwOworCQkJcy0+c2VxdWVuY2UgPSBTRVFfQkxPQ0tfSEVBREVSOworCisJCWNhc2UgU0VRX0JMT0NLX0hFQURFUjoKKwkJCWlmICghZmlsbF90ZW1wKHMsIGIpKQorCQkJCXJldHVybiBYWl9PSzsKKworCQkJcmV0ID0gZGVjX2Jsb2NrX2hlYWRlcihzKTsKKwkJCWlmIChyZXQgIT0gWFpfT0spCisJCQkJcmV0dXJuIHJldDsKKworCQkJcy0+c2VxdWVuY2UgPSBTRVFfQkxPQ0tfVU5DT01QUkVTUzsKKworCQljYXNlIFNFUV9CTE9DS19VTkNPTVBSRVNTOgorCQkJcmV0ID0gZGVjX2Jsb2NrKHMsIGIpOworCQkJaWYgKHJldCAhPSBYWl9TVFJFQU1fRU5EKQorCQkJCXJldHVybiByZXQ7CisKKwkJCXMtPnNlcXVlbmNlID0gU0VRX0JMT0NLX1BBRERJTkc7CisKKwkJY2FzZSBTRVFfQkxPQ0tfUEFERElORzoKKwkJCS8qCisJCQkgKiBTaXplIG9mIENvbXByZXNzZWQgRGF0YSArIEJsb2NrIFBhZGRpbmcKKwkJCSAqIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBmb3VyLiBXZSBkb24ndCBuZWVkCisJCQkgKiBzLT5ibG9jay5jb21wcmVzc2VkIGZvciBhbnl0aGluZyBlbHNlCisJCQkgKiBhbnltb3JlLCBzbyB3ZSB1c2UgaXQgaGVyZSB0byB0ZXN0IHRoZSBzaXplCisJCQkgKiBvZiB0aGUgQmxvY2sgUGFkZGluZyBmaWVsZC4KKwkJCSAqLworCQkJd2hpbGUgKHMtPmJsb2NrLmNvbXByZXNzZWQgJiAzKSB7CisJCQkJaWYgKGItPmluX3BvcyA9PSBiLT5pbl9zaXplKQorCQkJCQlyZXR1cm4gWFpfT0s7CisKKwkJCQlpZiAoYi0+aW5bYi0+aW5fcG9zKytdICE9IDApCisJCQkJCXJldHVybiBYWl9EQVRBX0VSUk9SOworCisJCQkJKytzLT5ibG9jay5jb21wcmVzc2VkOworCQkJfQorCisJCQlzLT5zZXF1ZW5jZSA9IFNFUV9CTE9DS19DSEVDSzsKKworCQljYXNlIFNFUV9CTE9DS19DSEVDSzoKKwkJCWlmIChzLT5jaGVja190eXBlID09IFhaX0NIRUNLX0NSQzMyKSB7CisJCQkJcmV0ID0gY3JjMzJfdmFsaWRhdGUocywgYik7CisJCQkJaWYgKHJldCAhPSBYWl9TVFJFQU1fRU5EKQorCQkJCQlyZXR1cm4gcmV0OworCQkJfQorI2lmZGVmIFhaX0RFQ19BTllfQ0hFQ0sKKwkJCWVsc2UgaWYgKCFjaGVja19za2lwKHMsIGIpKSB7CisJCQkJcmV0dXJuIFhaX09LOworCQkJfQorI2VuZGlmCisKKwkJCXMtPnNlcXVlbmNlID0gU0VRX0JMT0NLX1NUQVJUOworCQkJYnJlYWs7CisKKwkJY2FzZSBTRVFfSU5ERVg6CisJCQlyZXQgPSBkZWNfaW5kZXgocywgYik7CisJCQlpZiAocmV0ICE9IFhaX1NUUkVBTV9FTkQpCisJCQkJcmV0dXJuIHJldDsKKworCQkJcy0+c2VxdWVuY2UgPSBTRVFfSU5ERVhfUEFERElORzsKKworCQljYXNlIFNFUV9JTkRFWF9QQURESU5HOgorCQkJd2hpbGUgKChzLT5pbmRleC5zaXplICsgKGItPmluX3BvcyAtIHMtPmluX3N0YXJ0KSkKKwkJCQkJJiAzKSB7CisJCQkJaWYgKGItPmluX3BvcyA9PSBiLT5pbl9zaXplKSB7CisJCQkJCWluZGV4X3VwZGF0ZShzLCBiKTsKKwkJCQkJcmV0dXJuIFhaX09LOworCQkJCX0KKworCQkJCWlmIChiLT5pbltiLT5pbl9wb3MrK10gIT0gMCkKKwkJCQkJcmV0dXJuIFhaX0RBVEFfRVJST1I7CisJCQl9CisKKwkJCS8qIEZpbmlzaCB0aGUgQ1JDMzIgdmFsdWUgYW5kIEluZGV4IHNpemUuICovCisJCQlpbmRleF91cGRhdGUocywgYik7CisKKwkJCS8qIENvbXBhcmUgdGhlIGhhc2hlcyB0byB2YWxpZGF0ZSB0aGUgSW5kZXggZmllbGQuICovCisJCQlpZiAoIW1lbWVxKCZzLT5ibG9jay5oYXNoLCAmcy0+aW5kZXguaGFzaCwKKwkJCQkJc2l6ZW9mKHMtPmJsb2NrLmhhc2gpKSkKKwkJCQlyZXR1cm4gWFpfREFUQV9FUlJPUjsKKworCQkJcy0+c2VxdWVuY2UgPSBTRVFfSU5ERVhfQ1JDMzI7CisKKwkJY2FzZSBTRVFfSU5ERVhfQ1JDMzI6CisJCQlyZXQgPSBjcmMzMl92YWxpZGF0ZShzLCBiKTsKKwkJCWlmIChyZXQgIT0gWFpfU1RSRUFNX0VORCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQlzLT50ZW1wLnNpemUgPSBTVFJFQU1fSEVBREVSX1NJWkU7CisJCQlzLT5zZXF1ZW5jZSA9IFNFUV9TVFJFQU1fRk9PVEVSOworCisJCWNhc2UgU0VRX1NUUkVBTV9GT09URVI6CisJCQlpZiAoIWZpbGxfdGVtcChzLCBiKSkKKwkJCQlyZXR1cm4gWFpfT0s7CisKKwkJCXJldHVybiBkZWNfc3RyZWFtX2Zvb3RlcihzKTsKKwkJfQorCX0KKworCS8qIE5ldmVyIHJlYWNoZWQgKi8KK30KKworLyoKKyAqIHh6X2RlY19ydW4oKSBpcyBhIHdyYXBwZXIgZm9yIGRlY19tYWluKCkgdG8gaGFuZGxlIHNvbWUgc3BlY2lhbCBjYXNlcyBpbgorICogbXVsdGktY2FsbCBhbmQgc2luZ2xlLWNhbGwgZGVjb2RpbmcuCisgKgorICogSW4gbXVsdGktY2FsbCBtb2RlLCB3ZSBtdXN0IHJldHVybiBYWl9CVUZfRVJST1Igd2hlbiBpdCBzZWVtcyBjbGVhciB0aGF0IHdlCisgKiBhcmUgbm90IGdvaW5nIHRvIG1ha2UgYW55IHByb2dyZXNzIGFueW1vcmUuIFRoaXMgaXMgdG8gcHJldmVudCB0aGUgY2FsbGVyCisgKiBmcm9tIGNhbGxpbmcgdXMgaW5maW5pdGVseSB3aGVuIHRoZSBpbnB1dCBmaWxlIGlzIHRydW5jYXRlZCBvciBvdGhlcndpc2UKKyAqIGNvcnJ1cHQuIFNpbmNlIHpsaWItc3R5bGUgQVBJIGFsbG93cyB0aGF0IHRoZSBjYWxsZXIgZmlsbHMgdGhlIGlucHV0IGJ1ZmZlcgorICogb25seSB3aGVuIHRoZSBkZWNvZGVyIGRvZXNuJ3QgcHJvZHVjZSBhbnkgbmV3IG91dHB1dCwgd2UgaGF2ZSB0byBiZSBjYXJlZnVsCisgKiB0byBhdm9pZCByZXR1cm5pbmcgWFpfQlVGX0VSUk9SIHRvbyBlYXNpbHk6IFhaX0JVRl9FUlJPUiBpcyByZXR1cm5lZCBvbmx5CisgKiBhZnRlciB0aGUgc2Vjb25kIGNvbnNlY3V0aXZlIGNhbGwgdG8geHpfZGVjX3J1bigpIHRoYXQgbWFrZXMgbm8gcHJvZ3Jlc3MuCisgKgorICogSW4gc2luZ2xlLWNhbGwgbW9kZSwgaWYgd2UgY291bGRuJ3QgZGVjb2RlIGV2ZXJ5dGhpbmcgYW5kIG5vIGVycm9yCisgKiBvY2N1cnJlZCwgZWl0aGVyIHRoZSBpbnB1dCBpcyB0cnVuY2F0ZWQgb3IgdGhlIG91dHB1dCBidWZmZXIgaXMgdG9vIHNtYWxsLgorICogU2luY2Ugd2Uga25vdyB0aGF0IHRoZSBsYXN0IGlucHV0IGJ5dGUgbmV2ZXIgcHJvZHVjZXMgYW55IG91dHB1dCwgd2Uga25vdworICogdGhhdCBpZiBhbGwgdGhlIGlucHV0IHdhcyBjb25zdW1lZCBhbmQgZGVjb2Rpbmcgd2Fzbid0IGZpbmlzaGVkLCB0aGUgZmlsZQorICogbXVzdCBiZSBjb3JydXB0LiBPdGhlcndpc2UgdGhlIG91dHB1dCBidWZmZXIgaGFzIHRvIGJlIHRvbyBzbWFsbCBvciB0aGUKKyAqIGZpbGUgaXMgY29ycnVwdCBpbiBhIHdheSB0aGF0IGRlY29kaW5nIGl0IHByb2R1Y2VzIHRvbyBiaWcgb3V0cHV0LgorICoKKyAqIElmIHNpbmdsZS1jYWxsIGRlY29kaW5nIGZhaWxzLCB3ZSByZXNldCBiLT5pbl9wb3MgYW5kIGItPm91dF9wb3MgYmFjayB0bworICogdGhlaXIgb3JpZ2luYWwgdmFsdWVzLiBUaGlzIGlzIGJlY2F1c2Ugd2l0aCBzb21lIGZpbHRlciBjaGFpbnMgdGhlcmUgd29uJ3QKKyAqIGJlIGFueSB2YWxpZCB1bmNvbXByZXNzZWQgZGF0YSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciB1bmxlc3MgdGhlIGRlY29kaW5nCisgKiBhY3R1YWxseSBzdWNjZWVkcyAodGhhdCdzIHRoZSBwcmljZSB0byBwYXkgb2YgdXNpbmcgdGhlIG91dHB1dCBidWZmZXIgYXMKKyAqIHRoZSB3b3Jrc3BhY2UpLgorICovCitYWl9FWFRFUk4gZW51bSB4el9yZXQgeHpfZGVjX3J1bihzdHJ1Y3QgeHpfZGVjICpzLCBzdHJ1Y3QgeHpfYnVmICpiKQoreworCXNpemVfdCBpbl9zdGFydDsKKwlzaXplX3Qgb3V0X3N0YXJ0OworCWVudW0geHpfcmV0IHJldDsKKworCWlmIChERUNfSVNfU0lOR0xFKHMtPm1vZGUpKQorCQl4el9kZWNfcmVzZXQocyk7CisKKwlpbl9zdGFydCA9IGItPmluX3BvczsKKwlvdXRfc3RhcnQgPSBiLT5vdXRfcG9zOworCXJldCA9IGRlY19tYWluKHMsIGIpOworCisJaWYgKERFQ19JU19TSU5HTEUocy0+bW9kZSkpIHsKKwkJaWYgKHJldCA9PSBYWl9PSykKKwkJCXJldCA9IGItPmluX3BvcyA9PSBiLT5pbl9zaXplCisJCQkJCT8gWFpfREFUQV9FUlJPUiA6IFhaX0JVRl9FUlJPUjsKKworCQlpZiAocmV0ICE9IFhaX1NUUkVBTV9FTkQpIHsKKwkJCWItPmluX3BvcyA9IGluX3N0YXJ0OworCQkJYi0+b3V0X3BvcyA9IG91dF9zdGFydDsKKwkJfQorCisJfSBlbHNlIGlmIChyZXQgPT0gWFpfT0sgJiYgaW5fc3RhcnQgPT0gYi0+aW5fcG9zCisJCQkmJiBvdXRfc3RhcnQgPT0gYi0+b3V0X3BvcykgeworCQlpZiAocy0+YWxsb3dfYnVmX2Vycm9yKQorCQkJcmV0ID0gWFpfQlVGX0VSUk9SOworCisJCXMtPmFsbG93X2J1Zl9lcnJvciA9IHRydWU7CisJfSBlbHNlIHsKKwkJcy0+YWxsb3dfYnVmX2Vycm9yID0gZmFsc2U7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworWFpfRVhURVJOIHN0cnVjdCB4el9kZWMgKnh6X2RlY19pbml0KGVudW0geHpfbW9kZSBtb2RlLCB1aW50MzJfdCBkaWN0X21heCkKK3sKKwlzdHJ1Y3QgeHpfZGVjICpzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAocyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXMtPm1vZGUgPSBtb2RlOworCisjaWZkZWYgWFpfREVDX0JDSgorCXMtPmJjaiA9IHh6X2RlY19iY2pfY3JlYXRlKERFQ19JU19TSU5HTEUobW9kZSkpOworCWlmIChzLT5iY2ogPT0gTlVMTCkKKwkJZ290byBlcnJvcl9iY2o7CisjZW5kaWYKKworCXMtPmx6bWEyID0geHpfZGVjX2x6bWEyX2NyZWF0ZShtb2RlLCBkaWN0X21heCk7CisJaWYgKHMtPmx6bWEyID09IE5VTEwpCisJCWdvdG8gZXJyb3JfbHptYTI7CisKKwl4el9kZWNfcmVzZXQocyk7CisJcmV0dXJuIHM7CisKK2Vycm9yX2x6bWEyOgorI2lmZGVmIFhaX0RFQ19CQ0oKKwl4el9kZWNfYmNqX2VuZChzLT5iY2opOworZXJyb3JfYmNqOgorI2VuZGlmCisJa2ZyZWUocyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK1haX0VYVEVSTiB2b2lkIHh6X2RlY19yZXNldChzdHJ1Y3QgeHpfZGVjICpzKQoreworCXMtPnNlcXVlbmNlID0gU0VRX1NUUkVBTV9IRUFERVI7CisJcy0+YWxsb3dfYnVmX2Vycm9yID0gZmFsc2U7CisJcy0+cG9zID0gMDsKKwlzLT5jcmMzMiA9IDA7CisJbWVtemVybygmcy0+YmxvY2ssIHNpemVvZihzLT5ibG9jaykpOworCW1lbXplcm8oJnMtPmluZGV4LCBzaXplb2Yocy0+aW5kZXgpKTsKKwlzLT50ZW1wLnBvcyA9IDA7CisJcy0+dGVtcC5zaXplID0gU1RSRUFNX0hFQURFUl9TSVpFOworfQorCitYWl9FWFRFUk4gdm9pZCB4el9kZWNfZW5kKHN0cnVjdCB4el9kZWMgKnMpCit7CisJaWYgKHMgIT0gTlVMTCkgeworCQl4el9kZWNfbHptYTJfZW5kKHMtPmx6bWEyKTsKKyNpZmRlZiBYWl9ERUNfQkNKCisJCXh6X2RlY19iY2pfZW5kKHMtPmJjaik7CisjZW5kaWYKKwkJa2ZyZWUocyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvbGliL3h6L3h6X2RlY19zeW1zLmMgYi9saWIveHoveHpfZGVjX3N5bXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmViM2MwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3h6L3h6X2RlY19zeW1zLmMKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIFhaIGRlY29kZXIgbW9kdWxlIGluZm9ybWF0aW9uCisgKgorICogQXV0aG9yOiBMYXNzZSBDb2xsaW4gPGxhc3NlLmNvbGxpbkB0dWthYW5pLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gcHV0IGludG8gdGhlIHB1YmxpYyBkb21haW4uCisgKiBZb3UgY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhpcyBmaWxlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC94ei5oPgorCitFWFBPUlRfU1lNQk9MKHh6X2RlY19pbml0KTsKK0VYUE9SVF9TWU1CT0woeHpfZGVjX3Jlc2V0KTsKK0VYUE9SVF9TWU1CT0woeHpfZGVjX3J1bik7CitFWFBPUlRfU1lNQk9MKHh6X2RlY19lbmQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlhaIGRlY29tcHJlc3NvciIpOworTU9EVUxFX1ZFUlNJT04oIjEuMCIpOworTU9EVUxFX0FVVEhPUigiTGFzc2UgQ29sbGluIDxsYXNzZS5jb2xsaW5AdHVrYWFuaS5vcmc+IGFuZCBJZ29yIFBhdmxvdiIpOworCisvKgorICogVGhpcyBjb2RlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBidXQgaW4gTGludXggaXQncyBzaW1wbGVzdCB0byBqdXN0CisgKiBzYXkgaXQncyBHUEwgYW5kIGNvbnNpZGVyIHRoZSBhdXRob3JzIGFzIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KKyAqLworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvbGliL3h6L3h6X2RlY190ZXN0LmMgYi9saWIveHoveHpfZGVjX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTI4YTE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3h6L3h6X2RlY190ZXN0LmMKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBYWiBkZWNvZGVyIHRlc3RlcgorICoKKyAqIEF1dGhvcjogTGFzc2UgQ29sbGluIDxsYXNzZS5jb2xsaW5AdHVrYWFuaS5vcmc+CisgKgorICogVGhpcyBmaWxlIGhhcyBiZWVuIHB1dCBpbnRvIHRoZSBwdWJsaWMgZG9tYWluLgorICogWW91IGNhbiBkbyB3aGF0ZXZlciB5b3Ugd2FudCB3aXRoIHRoaXMgZmlsZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC94ei5oPgorCisvKiBNYXhpbXVtIHN1cHBvcnRlZCBkaWN0aW9uYXJ5IHNpemUgKi8KKyNkZWZpbmUgRElDVF9NQVggKDEgPDwgMjApCisKKy8qIERldmljZSBuYW1lIHRvIHBhc3MgdG8gcmVnaXN0ZXJfY2hyZGV2KCkuICovCisjZGVmaW5lIERFVklDRV9OQU1FICJ4el9kZWNfdGVzdCIKKworLyogRHluYW1pY2FsbHkgYWxsb2NhdGVkIGRldmljZSBtYWpvciBudW1iZXIgKi8KK3N0YXRpYyBpbnQgZGV2aWNlX21ham9yOworCisvKgorICogV2UgcmV1c2UgdGhlIHNhbWUgZGVjb2RlciBzdGF0ZSwgYW5kIHRodXMgY2FuIGRlY29kZSBvbmx5IG9uZQorICogZmlsZSBhdCBhIHRpbWUuCisgKi8KK3N0YXRpYyBib29sIGRldmljZV9pc19vcGVuOworCisvKiBYWiBkZWNvZGVyIHN0YXRlICovCitzdGF0aWMgc3RydWN0IHh6X2RlYyAqc3RhdGU7CisKKy8qCisgKiBSZXR1cm4gdmFsdWUgb2YgeHpfZGVjX3J1bigpLiBXZSBuZWVkIHRvIGF2b2lkIGNhbGxpbmcgeHpfZGVjX3J1bigpIGFmdGVyCisgKiBpdCBoYXMgcmV0dXJuZWQgWFpfU1RSRUFNX0VORCwgc28gd2UgbWFrZSB0aGlzIHN0YXRpYy4KKyAqLworc3RhdGljIGVudW0geHpfcmV0IHJldDsKKworLyoKKyAqIElucHV0IGFuZCBvdXRwdXQgYnVmZmVycy4gVGhlIGlucHV0IGJ1ZmZlciBpcyB1c2VkIGFzIGEgdGVtcG9yYXJ5IHNhZmUKKyAqIHBsYWNlIGZvciB0aGUgZGF0YSBjb21pbmcgZnJvbSB0aGUgdXNlcnNwYWNlLgorICovCitzdGF0aWMgdWludDhfdCBidWZmZXJfaW5bMTAyNF07CitzdGF0aWMgdWludDhfdCBidWZmZXJfb3V0WzEwMjRdOworCisvKgorICogU3RydWN0dXJlIHRvIHBhc3MgdGhlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyB0byB0aGUgWFogZGVjb2Rlci4KKyAqIEEgZmV3IG9mIHRoZSBmaWVsZHMgYXJlIG5ldmVyIG1vZGlmaWVkIHNvIHdlIGluaXRpYWxpemUgdGhlbSBoZXJlLgorICovCitzdGF0aWMgc3RydWN0IHh6X2J1ZiBidWZmZXJzID0geworCS5pbiA9IGJ1ZmZlcl9pbiwKKwkub3V0ID0gYnVmZmVyX291dCwKKwkub3V0X3NpemUgPSBzaXplb2YoYnVmZmVyX291dCkKK307CisKKy8qCisgKiBDUkMzMiBvZiB1bmNvbXByZXNzZWQgZGF0YS4gVGhpcyBpcyB1c2VkIHRvIGdpdmUgdGhlIHVzZXIgYSBzaW1wbGUgd2F5CisgKiB0byBjaGVjayB0aGF0IHRoZSBkZWNvZGVyIHByb2R1Y2VzIGNvcnJlY3Qgb3V0cHV0LgorICovCitzdGF0aWMgdWludDMyX3QgY3JjOworCitzdGF0aWMgaW50IHh6X2RlY190ZXN0X29wZW4oc3RydWN0IGlub2RlICppLCBzdHJ1Y3QgZmlsZSAqZikKK3sKKwlpZiAoZGV2aWNlX2lzX29wZW4pCisJCXJldHVybiAtRUJVU1k7CisKKwlkZXZpY2VfaXNfb3BlbiA9IHRydWU7CisKKwl4el9kZWNfcmVzZXQoc3RhdGUpOworCXJldCA9IFhaX09LOworCWNyYyA9IDB4RkZGRkZGRkY7CisKKwlidWZmZXJzLmluX3BvcyA9IDA7CisJYnVmZmVycy5pbl9zaXplID0gMDsKKwlidWZmZXJzLm91dF9wb3MgPSAwOworCisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBvcGVuZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHh6X2RlY190ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppLCBzdHJ1Y3QgZmlsZSAqZikKK3sKKwlkZXZpY2VfaXNfb3BlbiA9IGZhbHNlOworCisJaWYgKHJldCA9PSBYWl9PSykKKwkJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBpbnB1dCB3YXMgdHJ1bmNhdGVkXG4iKTsKKworCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogY2xvc2VkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERlY29kZSB0aGUgZGF0YSBnaXZlbiB0byB1cyBmcm9tIHRoZSB1c2Vyc3BhY2UuIENSQzMyIG9mIHRoZSB1bmNvbXByZXNzZWQKKyAqIGRhdGEgaXMgY2FsY3VsYXRlZCBhbmQgaXMgcHJpbnRlZCBhdCB0aGUgZW5kIG9mIHN1Y2Nlc3NmdWwgZGVjb2RpbmcuIFRoZQorICogdW5jb21wcmVzc2VkIGRhdGEgaXNuJ3Qgc3RvcmVkIGFueXdoZXJlIGZvciBmdXJ0aGVyIHVzZS4KKyAqCisgKiBUaGUgLnh6IGZpbGUgbXVzdCBoYXZlIGV4YWN0bHkgb25lIFN0cmVhbSBhbmQgbm8gU3RyZWFtIFBhZGRpbmcuIFRoZSBkYXRhCisgKiBhZnRlciB0aGUgZmlyc3QgU3RyZWFtIGlzIGNvbnNpZGVyZWQgdG8gYmUgZ2FyYmFnZS4KKyAqLworc3RhdGljIHNzaXplX3QgeHpfZGVjX3Rlc3Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJIHNpemVfdCBzaXplLCBsb2ZmX3QgKnBvcykKK3sKKwlzaXplX3QgcmVtYWluaW5nOworCisJaWYgKHJldCAhPSBYWl9PSykgeworCQlpZiAoc2l6ZSA+IDApCisJCQlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6ICV6dSBieXRlcyBvZiAiCisJCQkJCSJnYXJiYWdlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGVcbiIsCisJCQkJCXNpemUpOworCisJCXJldHVybiAtRU5PU1BDOworCX0KKworCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogZGVjb2RpbmcgJXp1IGJ5dGVzIG9mIGlucHV0XG4iLAorCQkJc2l6ZSk7CisKKwlyZW1haW5pbmcgPSBzaXplOworCXdoaWxlICgocmVtYWluaW5nID4gMCB8fCBidWZmZXJzLm91dF9wb3MgPT0gYnVmZmVycy5vdXRfc2l6ZSkKKwkJCSYmIHJldCA9PSBYWl9PSykgeworCQlpZiAoYnVmZmVycy5pbl9wb3MgPT0gYnVmZmVycy5pbl9zaXplKSB7CisJCQlidWZmZXJzLmluX3BvcyA9IDA7CisJCQlidWZmZXJzLmluX3NpemUgPSBtaW4ocmVtYWluaW5nLCBzaXplb2YoYnVmZmVyX2luKSk7CisJCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyX2luLCBidWYsIGJ1ZmZlcnMuaW5fc2l6ZSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCWJ1ZiArPSBidWZmZXJzLmluX3NpemU7CisJCQlyZW1haW5pbmcgLT0gYnVmZmVycy5pbl9zaXplOworCQl9CisKKwkJYnVmZmVycy5vdXRfcG9zID0gMDsKKwkJcmV0ID0geHpfZGVjX3J1bihzdGF0ZSwgJmJ1ZmZlcnMpOworCQljcmMgPSBjcmMzMihjcmMsIGJ1ZmZlcl9vdXQsIGJ1ZmZlcnMub3V0X3Bvcyk7CisJfQorCisJc3dpdGNoIChyZXQpIHsKKwljYXNlIFhaX09LOgorCQlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6IFhaX09LXG4iKTsKKwkJcmV0dXJuIHNpemU7CisKKwljYXNlIFhaX1NUUkVBTV9FTkQ6CisJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogWFpfU1RSRUFNX0VORCwgIgorCQkJCSJDUkMzMiA9IDB4JTA4WFxuIiwgfmNyYyk7CisJCXJldHVybiBzaXplIC0gcmVtYWluaW5nIC0gKGJ1ZmZlcnMuaW5fc2l6ZSAtIGJ1ZmZlcnMuaW5fcG9zKTsKKworCWNhc2UgWFpfTUVNTElNSVRfRVJST1I6CisJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogWFpfTUVNTElNSVRfRVJST1JcbiIpOworCQlicmVhazsKKworCWNhc2UgWFpfRk9STUFUX0VSUk9SOgorCQlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6IFhaX0ZPUk1BVF9FUlJPUlxuIik7CisJCWJyZWFrOworCisJY2FzZSBYWl9PUFRJT05TX0VSUk9SOgorCQlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6IFhaX09QVElPTlNfRVJST1JcbiIpOworCQlicmVhazsKKworCWNhc2UgWFpfREFUQV9FUlJPUjoKKwkJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBYWl9EQVRBX0VSUk9SXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIFhaX0JVRl9FUlJPUjoKKwkJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBYWl9CVUZfRVJST1JcbiIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogQnVnIGRldGVjdGVkIVxuIik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRUlPOworfQorCisvKiBBbGxvY2F0ZSB0aGUgWFogZGVjb2RlciBzdGF0ZSBhbmQgcmVnaXN0ZXIgdGhlIGNoYXJhY3RlciBkZXZpY2UuICovCitzdGF0aWMgaW50IF9faW5pdCB4el9kZWNfdGVzdF9pbml0KHZvaWQpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmlsZW9wcyA9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vcGVuID0gJnh6X2RlY190ZXN0X29wZW4sCisJCS5yZWxlYXNlID0gJnh6X2RlY190ZXN0X3JlbGVhc2UsCisJCS53cml0ZSA9ICZ4el9kZWNfdGVzdF93cml0ZQorCX07CisKKwlzdGF0ZSA9IHh6X2RlY19pbml0KFhaX1BSRUFMTE9DLCBESUNUX01BWCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2aWNlX21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsIERFVklDRV9OQU1FLCAmZmlsZW9wcyk7CisJaWYgKGRldmljZV9tYWpvciA8IDApIHsKKwkJeHpfZGVjX2VuZChzdGF0ZSk7CisJCXJldHVybiBkZXZpY2VfbWFqb3I7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBtb2R1bGUgbG9hZGVkXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6IENyZWF0ZSBhIGRldmljZSBub2RlIHdpdGggIgorCQkJIidta25vZCAiIERFVklDRV9OQU1FICIgYyAlZCAwJyBhbmQgd3JpdGUgLnh6IGZpbGVzICIKKwkJCSJ0byBpdC5cbiIsIGRldmljZV9tYWpvcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB4el9kZWNfdGVzdF9leGl0KHZvaWQpCit7CisJdW5yZWdpc3Rlcl9jaHJkZXYoZGV2aWNlX21ham9yLCBERVZJQ0VfTkFNRSk7CisJeHpfZGVjX2VuZChzdGF0ZSk7CisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBtb2R1bGUgdW5sb2FkZWRcbiIpOworfQorCittb2R1bGVfaW5pdCh4el9kZWNfdGVzdF9pbml0KTsKK21vZHVsZV9leGl0KHh6X2RlY190ZXN0X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlhaIGRlY29tcHJlc3NvciB0ZXN0ZXIiKTsKK01PRFVMRV9WRVJTSU9OKCIxLjAiKTsKK01PRFVMRV9BVVRIT1IoIkxhc3NlIENvbGxpbiA8bGFzc2UuY29sbGluQHR1a2Fhbmkub3JnPiIpOworCisvKgorICogVGhpcyBjb2RlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBidXQgaW4gTGludXggaXQncyBzaW1wbGVzdCB0byBqdXN0CisgKiBzYXkgaXQncyBHUEwgYW5kIGNvbnNpZGVyIHRoZSBhdXRob3JzIGFzIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KKyAqLworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvbGliL3h6L3h6X2x6bWEyLmggYi9saWIveHoveHpfbHptYTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzFkNjdiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3h6L3h6X2x6bWEyLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBMWk1BMiBkZWZpbml0aW9ucworICoKKyAqIEF1dGhvcnM6IExhc3NlIENvbGxpbiA8bGFzc2UuY29sbGluQHR1a2Fhbmkub3JnPgorICogICAgICAgICAgSWdvciBQYXZsb3YgPGh0dHA6Ly83LXppcC5vcmcvPgorICoKKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBwdXQgaW50byB0aGUgcHVibGljIGRvbWFpbi4KKyAqIFlvdSBjYW4gZG8gd2hhdGV2ZXIgeW91IHdhbnQgd2l0aCB0aGlzIGZpbGUuCisgKi8KKworI2lmbmRlZiBYWl9MWk1BMl9ICisjZGVmaW5lIFhaX0xaTUEyX0gKKworLyogUmFuZ2UgY29kZXIgY29uc3RhbnRzICovCisjZGVmaW5lIFJDX1NISUZUX0JJVFMgOAorI2RlZmluZSBSQ19UT1BfQklUUyAyNAorI2RlZmluZSBSQ19UT1BfVkFMVUUgKDEgPDwgUkNfVE9QX0JJVFMpCisjZGVmaW5lIFJDX0JJVF9NT0RFTF9UT1RBTF9CSVRTIDExCisjZGVmaW5lIFJDX0JJVF9NT0RFTF9UT1RBTCAoMSA8PCBSQ19CSVRfTU9ERUxfVE9UQUxfQklUUykKKyNkZWZpbmUgUkNfTU9WRV9CSVRTIDUKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIHBvc2l0aW9uIHN0YXRlcy4gQSBwb3NpdGlvbiBzdGF0ZSBpcyB0aGUgbG93ZXN0IHBiCisgKiBudW1iZXIgb2YgYml0cyBvZiB0aGUgY3VycmVudCB1bmNvbXByZXNzZWQgb2Zmc2V0LiBJbiBzb21lIHBsYWNlcyB0aGVyZQorICogYXJlIGRpZmZlcmVudCBzZXRzIG9mIHByb2JhYmlsaXRpZXMgZm9yIGRpZmZlcmVudCBwb3NpdGlvbiBzdGF0ZXMuCisgKi8KKyNkZWZpbmUgUE9TX1NUQVRFU19NQVggKDEgPDwgNCkKKworLyoKKyAqIFRoaXMgZW51bSBpcyB1c2VkIHRvIHRyYWNrIHdoaWNoIExaTUEgc3ltYm9scyBoYXZlIG9jY3VycmVkIG1vc3QgcmVjZW50bHkKKyAqIGFuZCBpbiB3aGljaCBvcmRlci4gVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIHByZWRpY3QgdGhlIG5leHQgc3ltYm9sLgorICoKKyAqIFN5bWJvbHM6CisgKiAgLSBMaXRlcmFsOiBPbmUgOC1iaXQgYnl0ZQorICogIC0gTWF0Y2g6IFJlcGVhdCBhIGNodW5rIG9mIGRhdGEgYXQgc29tZSBkaXN0YW5jZQorICogIC0gTG9uZyByZXBlYXQ6IE11bHRpLWJ5dGUgbWF0Y2ggYXQgYSByZWNlbnRseSBzZWVuIGRpc3RhbmNlCisgKiAgLSBTaG9ydCByZXBlYXQ6IE9uZS1ieXRlIHJlcGVhdCBhdCBhIHJlY2VudGx5IHNlZW4gZGlzdGFuY2UKKyAqCisgKiBUaGUgc3ltYm9sIG5hbWVzIGFyZSBpbiBmcm9tIFNUQVRFX29sZGVzdF9vbGRlcl9wcmV2aW91cy4gUkVQIG1lYW5zCisgKiBlaXRoZXIgc2hvcnQgb3IgbG9uZyByZXBlYXRlZCBtYXRjaCwgYW5kIE5PTkxJVCBtZWFucyBhbnkgbm9uLWxpdGVyYWwuCisgKi8KK2VudW0gbHptYV9zdGF0ZSB7CisJU1RBVEVfTElUX0xJVCwKKwlTVEFURV9NQVRDSF9MSVRfTElULAorCVNUQVRFX1JFUF9MSVRfTElULAorCVNUQVRFX1NIT1JUUkVQX0xJVF9MSVQsCisJU1RBVEVfTUFUQ0hfTElULAorCVNUQVRFX1JFUF9MSVQsCisJU1RBVEVfU0hPUlRSRVBfTElULAorCVNUQVRFX0xJVF9NQVRDSCwKKwlTVEFURV9MSVRfTE9OR1JFUCwKKwlTVEFURV9MSVRfU0hPUlRSRVAsCisJU1RBVEVfTk9OTElUX01BVENILAorCVNUQVRFX05PTkxJVF9SRVAKK307CisKKy8qIFRvdGFsIG51bWJlciBvZiBzdGF0ZXMgKi8KKyNkZWZpbmUgU1RBVEVTIDEyCisKKy8qIFRoZSBsb3dlc3QgNyBzdGF0ZXMgaW5kaWNhdGUgdGhhdCB0aGUgcHJldmlvdXMgc3RhdGUgd2FzIGEgbGl0ZXJhbC4gKi8KKyNkZWZpbmUgTElUX1NUQVRFUyA3CisKKy8qIEluZGljYXRlIHRoYXQgdGhlIGxhdGVzdCBzeW1ib2wgd2FzIGEgbGl0ZXJhbC4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsem1hX3N0YXRlX2xpdGVyYWwoZW51bSBsem1hX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoKnN0YXRlIDw9IFNUQVRFX1NIT1JUUkVQX0xJVF9MSVQpCisJCSpzdGF0ZSA9IFNUQVRFX0xJVF9MSVQ7CisJZWxzZSBpZiAoKnN0YXRlIDw9IFNUQVRFX0xJVF9TSE9SVFJFUCkKKwkJKnN0YXRlIC09IDM7CisJZWxzZQorCQkqc3RhdGUgLT0gNjsKK30KKworLyogSW5kaWNhdGUgdGhhdCB0aGUgbGF0ZXN0IHN5bWJvbCB3YXMgYSBtYXRjaC4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsem1hX3N0YXRlX21hdGNoKGVudW0gbHptYV9zdGF0ZSAqc3RhdGUpCit7CisJKnN0YXRlID0gKnN0YXRlIDwgTElUX1NUQVRFUyA/IFNUQVRFX0xJVF9NQVRDSCA6IFNUQVRFX05PTkxJVF9NQVRDSDsKK30KKworLyogSW5kaWNhdGUgdGhhdCB0aGUgbGF0ZXN0IHN0YXRlIHdhcyBhIGxvbmcgcmVwZWF0ZWQgbWF0Y2guICovCitzdGF0aWMgaW5saW5lIHZvaWQgbHptYV9zdGF0ZV9sb25nX3JlcChlbnVtIGx6bWFfc3RhdGUgKnN0YXRlKQoreworCSpzdGF0ZSA9ICpzdGF0ZSA8IExJVF9TVEFURVMgPyBTVEFURV9MSVRfTE9OR1JFUCA6IFNUQVRFX05PTkxJVF9SRVA7Cit9CisKKy8qIEluZGljYXRlIHRoYXQgdGhlIGxhdGVzdCBzeW1ib2wgd2FzIGEgc2hvcnQgbWF0Y2guICovCitzdGF0aWMgaW5saW5lIHZvaWQgbHptYV9zdGF0ZV9zaG9ydF9yZXAoZW51bSBsem1hX3N0YXRlICpzdGF0ZSkKK3sKKwkqc3RhdGUgPSAqc3RhdGUgPCBMSVRfU1RBVEVTID8gU1RBVEVfTElUX1NIT1JUUkVQIDogU1RBVEVfTk9OTElUX1JFUDsKK30KKworLyogVGVzdCBpZiB0aGUgcHJldmlvdXMgc3ltYm9sIHdhcyBhIGxpdGVyYWwuICovCitzdGF0aWMgaW5saW5lIGJvb2wgbHptYV9zdGF0ZV9pc19saXRlcmFsKGVudW0gbHptYV9zdGF0ZSBzdGF0ZSkKK3sKKwlyZXR1cm4gc3RhdGUgPCBMSVRfU1RBVEVTOworfQorCisvKiBFYWNoIGxpdGVyYWwgY29kZXIgaXMgZGl2aWRlZCBpbiB0aHJlZSBzZWN0aW9uczoKKyAqICAgLSAweDAwMS0weDBGRjogV2l0aG91dCBtYXRjaCBieXRlCisgKiAgIC0gMHgxMDEtMHgxRkY6IFdpdGggbWF0Y2ggYnl0ZTsgbWF0Y2ggYml0IGlzIDAKKyAqICAgLSAweDIwMS0weDJGRjogV2l0aCBtYXRjaCBieXRlOyBtYXRjaCBiaXQgaXMgMQorICoKKyAqIE1hdGNoIGJ5dGUgaXMgdXNlZCB3aGVuIHRoZSBwcmV2aW91cyBMWk1BIHN5bWJvbCB3YXMgc29tZXRoaW5nIGVsc2UgdGhhbgorICogYSBsaXRlcmFsICh0aGF0IGlzLCBpdCB3YXMgc29tZSBraW5kIG9mIG1hdGNoKS4KKyAqLworI2RlZmluZSBMSVRFUkFMX0NPREVSX1NJWkUgMHgzMDAKKworLyogTWF4aW11bSBudW1iZXIgb2YgbGl0ZXJhbCBjb2RlcnMgKi8KKyNkZWZpbmUgTElURVJBTF9DT0RFUlNfTUFYICgxIDw8IDQpCisKKy8qIE1pbmltdW0gbGVuZ3RoIG9mIGEgbWF0Y2ggaXMgdHdvIGJ5dGVzLiAqLworI2RlZmluZSBNQVRDSF9MRU5fTUlOIDIKKworLyogTWF0Y2ggbGVuZ3RoIGlzIGVuY29kZWQgd2l0aCA0LCA1LCBvciAxMCBiaXRzLgorICoKKyAqIExlbmd0aCAgIEJpdHMKKyAqICAyLTkgICAgICA0ID0gQ2hvaWNlPTAgKyAzIGJpdHMKKyAqIDEwLTE3ICAgICA1ID0gQ2hvaWNlPTEgKyBDaG9pY2UyPTAgKyAzIGJpdHMKKyAqIDE4LTI3MyAgIDEwID0gQ2hvaWNlPTEgKyBDaG9pY2UyPTEgKyA4IGJpdHMKKyAqLworI2RlZmluZSBMRU5fTE9XX0JJVFMgMworI2RlZmluZSBMRU5fTE9XX1NZTUJPTFMgKDEgPDwgTEVOX0xPV19CSVRTKQorI2RlZmluZSBMRU5fTUlEX0JJVFMgMworI2RlZmluZSBMRU5fTUlEX1NZTUJPTFMgKDEgPDwgTEVOX01JRF9CSVRTKQorI2RlZmluZSBMRU5fSElHSF9CSVRTIDgKKyNkZWZpbmUgTEVOX0hJR0hfU1lNQk9MUyAoMSA8PCBMRU5fSElHSF9CSVRTKQorI2RlZmluZSBMRU5fU1lNQk9MUyAoTEVOX0xPV19TWU1CT0xTICsgTEVOX01JRF9TWU1CT0xTICsgTEVOX0hJR0hfU1lNQk9MUykKKworLyoKKyAqIE1heGltdW0gbGVuZ3RoIG9mIGEgbWF0Y2ggaXMgMjczIHdoaWNoIGlzIGEgcmVzdWx0IG9mIHRoZSBlbmNvZGluZworICogZGVzY3JpYmVkIGFib3ZlLgorICovCisjZGVmaW5lIE1BVENIX0xFTl9NQVggKE1BVENIX0xFTl9NSU4gKyBMRU5fU1lNQk9MUyAtIDEpCisKKy8qCisgKiBEaWZmZXJlbnQgc2V0cyBvZiBwcm9iYWJpbGl0aWVzIGFyZSB1c2VkIGZvciBtYXRjaCBkaXN0YW5jZXMgdGhhdCBoYXZlCisgKiB2ZXJ5IHNob3J0IG1hdGNoIGxlbmd0aDogTGVuZ3RocyBvZiAyLCAzLCBhbmQgNCBieXRlcyBoYXZlIGEgc2VwYXJhdGUKKyAqIHNldCBvZiBwcm9iYWJpbGl0aWVzIGZvciBlYWNoIGxlbmd0aC4gVGhlIG1hdGNoZXMgd2l0aCBsb25nZXIgbGVuZ3RoCisgKiB1c2UgYSBzaGFyZWQgc2V0IG9mIHByb2JhYmlsaXRpZXMuCisgKi8KKyNkZWZpbmUgRElTVF9TVEFURVMgNAorCisvKgorICogR2V0IHRoZSBpbmRleCBvZiB0aGUgYXBwcm9wcmlhdGUgcHJvYmFiaWxpdHkgYXJyYXkgZm9yIGRlY29kaW5nCisgKiB0aGUgZGlzdGFuY2Ugc2xvdC4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBsem1hX2dldF9kaXN0X3N0YXRlKHVpbnQzMl90IGxlbikKK3sKKwlyZXR1cm4gbGVuIDwgRElTVF9TVEFURVMgKyBNQVRDSF9MRU5fTUlOCisJCQk/IGxlbiAtIE1BVENIX0xFTl9NSU4gOiBESVNUX1NUQVRFUyAtIDE7Cit9CisKKy8qCisgKiBUaGUgaGlnaGVzdCB0d28gYml0cyBvZiBhIDMyLWJpdCBtYXRjaCBkaXN0YW5jZSBhcmUgZW5jb2RlZCB1c2luZyBzaXggYml0cy4KKyAqIFRoaXMgc2l4LWJpdCB2YWx1ZSBpcyBjYWxsZWQgYSBkaXN0YW5jZSBzbG90LiBUaGlzIHdheSBlbmNvZGluZyBhIDMyLWJpdAorICogdmFsdWUgdGFrZXMgNi0zNiBiaXRzLCBsYXJnZXIgdmFsdWVzIHRha2luZyBtb3JlIGJpdHMuCisgKi8KKyNkZWZpbmUgRElTVF9TTE9UX0JJVFMgNgorI2RlZmluZSBESVNUX1NMT1RTICgxIDw8IERJU1RfU0xPVF9CSVRTKQorCisvKiBNYXRjaCBkaXN0YW5jZXMgdXAgdG8gMTI3IGFyZSBmdWxseSBlbmNvZGVkIHVzaW5nIHByb2JhYmlsaXRpZXMuIFNpbmNlCisgKiB0aGUgaGlnaGVzdCB0d28gYml0cyAoZGlzdGFuY2Ugc2xvdCkgYXJlIGFsd2F5cyBlbmNvZGVkIHVzaW5nIHNpeCBiaXRzLAorICogdGhlIGRpc3RhbmNlcyAwLTMgZG9uJ3QgbmVlZCBhbnkgYWRkaXRpb25hbCBiaXRzIHRvIGVuY29kZSwgc2luY2UgdGhlCisgKiBkaXN0YW5jZSBzbG90IGl0c2VsZiBpcyB0aGUgc2FtZSBhcyB0aGUgYWN0dWFsIGRpc3RhbmNlLiBESVNUX01PREVMX1NUQVJUCisgKiBpbmRpY2F0ZXMgdGhlIGZpcnN0IGRpc3RhbmNlIHNsb3Qgd2hlcmUgYXQgbGVhc3Qgb25lIGFkZGl0aW9uYWwgYml0IGlzCisgKiBuZWVkZWQuCisgKi8KKyNkZWZpbmUgRElTVF9NT0RFTF9TVEFSVCA0CisKKy8qCisgKiBNYXRjaCBkaXN0YW5jZXMgZ3JlYXRlciB0aGFuIDEyNyBhcmUgZW5jb2RlZCBpbiB0aHJlZSBwaWVjZXM6CisgKiAgIC0gZGlzdGFuY2Ugc2xvdDogdGhlIGhpZ2hlc3QgdHdvIGJpdHMKKyAqICAgLSBkaXJlY3QgYml0czogMi0yNiBiaXRzIGJlbG93IHRoZSBoaWdoZXN0IHR3byBiaXRzCisgKiAgIC0gYWxpZ25tZW50IGJpdHM6IGZvdXIgbG93ZXN0IGJpdHMKKyAqCisgKiBEaXJlY3QgYml0cyBkb24ndCB1c2UgYW55IHByb2JhYmlsaXRpZXMuCisgKgorICogVGhlIGRpc3RhbmNlIHNsb3QgdmFsdWUgb2YgMTQgaXMgZm9yIGRpc3RhbmNlcyAxMjgtMTkxLgorICovCisjZGVmaW5lIERJU1RfTU9ERUxfRU5EIDE0CisKKy8qIERpc3RhbmNlIHNsb3RzIHRoYXQgaW5kaWNhdGUgYSBkaXN0YW5jZSA8PSAxMjcuICovCisjZGVmaW5lIEZVTExfRElTVEFOQ0VTX0JJVFMgKERJU1RfTU9ERUxfRU5EIC8gMikKKyNkZWZpbmUgRlVMTF9ESVNUQU5DRVMgKDEgPDwgRlVMTF9ESVNUQU5DRVNfQklUUykKKworLyoKKyAqIEZvciBtYXRjaCBkaXN0YW5jZXMgZ3JlYXRlciB0aGFuIDEyNywgb25seSB0aGUgaGlnaGVzdCB0d28gYml0cyBhbmQgdGhlCisgKiBsb3dlc3QgZm91ciBiaXRzIChhbGlnbm1lbnQpIGlzIGVuY29kZWQgdXNpbmcgcHJvYmFiaWxpdGllcy4KKyAqLworI2RlZmluZSBBTElHTl9CSVRTIDQKKyNkZWZpbmUgQUxJR05fU0laRSAoMSA8PCBBTElHTl9CSVRTKQorI2RlZmluZSBBTElHTl9NQVNLIChBTElHTl9TSVpFIC0gMSkKKworLyogVG90YWwgbnVtYmVyIG9mIGFsbCBwcm9iYWJpbGl0eSB2YXJpYWJsZXMgKi8KKyNkZWZpbmUgUFJPQlNfVE9UQUwgKDE4NDYgKyBMSVRFUkFMX0NPREVSU19NQVggKiBMSVRFUkFMX0NPREVSX1NJWkUpCisKKy8qCisgKiBMWk1BIHJlbWVtYmVycyB0aGUgZm91ciBtb3N0IHJlY2VudCBtYXRjaCBkaXN0YW5jZXMuIFJldXNpbmcgdGhlc2UKKyAqIGRpc3RhbmNlcyB0ZW5kcyB0byB0YWtlIGxlc3Mgc3BhY2UgdGhhbiByZS1lbmNvZGluZyB0aGUgYWN0dWFsCisgKiBkaXN0YW5jZSB2YWx1ZS4KKyAqLworI2RlZmluZSBSRVBTIDQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIveHoveHpfcHJpdmF0ZS5oIGIvbGliL3h6L3h6X3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjU2MzNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3h6L3h6X3ByaXZhdGUuaApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIFByaXZhdGUgaW5jbHVkZXMgYW5kIGRlZmluaXRpb25zCisgKgorICogQXV0aG9yOiBMYXNzZSBDb2xsaW4gPGxhc3NlLmNvbGxpbkB0dWthYW5pLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gcHV0IGludG8gdGhlIHB1YmxpYyBkb21haW4uCisgKiBZb3UgY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhpcyBmaWxlLgorICovCisKKyNpZm5kZWYgWFpfUFJJVkFURV9ICisjZGVmaW5lIFhaX1BSSVZBVEVfSAorCisjaWZkZWYgX19LRVJORUxfXworIwlpbmNsdWRlIDxsaW51eC94ei5oPgorIwlpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjCWluY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKwkvKiBYWl9QUkVCT09UIG1heSBiZSBkZWZpbmVkIG9ubHkgdmlhIGRlY29tcHJlc3NfdW54ei5jLiAqLworIwlpZm5kZWYgWFpfUFJFQk9PVAorIwkJaW5jbHVkZSA8bGludXgvc2xhYi5oPgorIwkJaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorIwkJaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjCQlpZmRlZiBDT05GSUdfWFpfREVDX1g4NgorIwkJCWRlZmluZSBYWl9ERUNfWDg2CisjCQllbmRpZgorIwkJaWZkZWYgQ09ORklHX1haX0RFQ19QT1dFUlBDCisjCQkJZGVmaW5lIFhaX0RFQ19QT1dFUlBDCisjCQllbmRpZgorIwkJaWZkZWYgQ09ORklHX1haX0RFQ19JQTY0CisjCQkJZGVmaW5lIFhaX0RFQ19JQTY0CisjCQllbmRpZgorIwkJaWZkZWYgQ09ORklHX1haX0RFQ19BUk0KKyMJCQlkZWZpbmUgWFpfREVDX0FSTQorIwkJZW5kaWYKKyMJCWlmZGVmIENPTkZJR19YWl9ERUNfQVJNVEhVTUIKKyMJCQlkZWZpbmUgWFpfREVDX0FSTVRIVU1CCisjCQllbmRpZgorIwkJaWZkZWYgQ09ORklHX1haX0RFQ19TUEFSQworIwkJCWRlZmluZSBYWl9ERUNfU1BBUkMKKyMJCWVuZGlmCisjCQlkZWZpbmUgbWVtZXEoYSwgYiwgc2l6ZSkgKG1lbWNtcChhLCBiLCBzaXplKSA9PSAwKQorIwkJZGVmaW5lIG1lbXplcm8oYnVmLCBzaXplKSBtZW1zZXQoYnVmLCAwLCBzaXplKQorIwllbmRpZgorIwlkZWZpbmUgZ2V0X2xlMzIocCkgbGUzMl90b19jcHVwKChjb25zdCB1aW50MzJfdCAqKShwKSkKKyNlbHNlCisJLyoKKwkgKiBGb3IgdXNlcnNwYWNlIGJ1aWxkcywgdXNlIGEgc2VwYXJhdGUgaGVhZGVyIHRvIGRlZmluZSB0aGUgcmVxdWlyZWQKKwkgKiBtYWNyb3MgYW5kIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gYWRhcHQgdGhlIGNvZGUgaW50bworCSAqIGRpZmZlcmVudCBlbnZpcm9ubWVudHMgYW5kIGF2b2lkcyBjbHV0dGVyIGluIHRoZSBMaW51eCBrZXJuZWwgdHJlZS4KKwkgKi8KKyMJaW5jbHVkZSAieHpfY29uZmlnLmgiCisjZW5kaWYKKworLyogSWYgbm8gc3BlY2lmaWMgZGVjb2RpbmcgbW9kZSBpcyByZXF1ZXN0ZWQsIGVuYWJsZSBzdXBwb3J0IGZvciBhbGwgbW9kZXMuICovCisjaWYgIWRlZmluZWQoWFpfREVDX1NJTkdMRSkgJiYgIWRlZmluZWQoWFpfREVDX1BSRUFMTE9DKSBcCisJCSYmICFkZWZpbmVkKFhaX0RFQ19EWU5BTExPQykKKyMJZGVmaW5lIFhaX0RFQ19TSU5HTEUKKyMJZGVmaW5lIFhaX0RFQ19QUkVBTExPQworIwlkZWZpbmUgWFpfREVDX0RZTkFMTE9DCisjZW5kaWYKKworLyoKKyAqIFRoZSBERUNfSVNfZm9vKG1vZGUpIG1hY3JvcyBhcmUgdXNlZCBpbiAiaWYiIHN0YXRlbWVudHMuIElmIG9ubHkgc29tZQorICogb2YgdGhlIHN1cHBvcnRlZCBtb2RlcyBhcmUgZW5hYmxlZCwgdGhlc2UgbWFjcm9zIHdpbGwgZXZhbHVhdGUgdG8gdHJ1ZSBvcgorICogZmFsc2UgYXQgY29tcGlsZSB0aW1lIGFuZCB0aHVzIGFsbG93IHRoZSBjb21waWxlciB0byBvbWl0IHVubmVlZGVkIGNvZGUuCisgKi8KKyNpZmRlZiBYWl9ERUNfU0lOR0xFCisjCWRlZmluZSBERUNfSVNfU0lOR0xFKG1vZGUpICgobW9kZSkgPT0gWFpfU0lOR0xFKQorI2Vsc2UKKyMJZGVmaW5lIERFQ19JU19TSU5HTEUobW9kZSkgKGZhbHNlKQorI2VuZGlmCisKKyNpZmRlZiBYWl9ERUNfUFJFQUxMT0MKKyMJZGVmaW5lIERFQ19JU19QUkVBTExPQyhtb2RlKSAoKG1vZGUpID09IFhaX1BSRUFMTE9DKQorI2Vsc2UKKyMJZGVmaW5lIERFQ19JU19QUkVBTExPQyhtb2RlKSAoZmFsc2UpCisjZW5kaWYKKworI2lmZGVmIFhaX0RFQ19EWU5BTExPQworIwlkZWZpbmUgREVDX0lTX0RZTkFMTE9DKG1vZGUpICgobW9kZSkgPT0gWFpfRFlOQUxMT0MpCisjZWxzZQorIwlkZWZpbmUgREVDX0lTX0RZTkFMTE9DKG1vZGUpIChmYWxzZSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoWFpfREVDX1NJTkdMRSkKKyMJZGVmaW5lIERFQ19JU19NVUxUSShtb2RlKSAodHJ1ZSkKKyNlbGlmIGRlZmluZWQoWFpfREVDX1BSRUFMTE9DKSB8fCBkZWZpbmVkKFhaX0RFQ19EWU5BTExPQykKKyMJZGVmaW5lIERFQ19JU19NVUxUSShtb2RlKSAoKG1vZGUpICE9IFhaX1NJTkdMRSkKKyNlbHNlCisjCWRlZmluZSBERUNfSVNfTVVMVEkobW9kZSkgKGZhbHNlKQorI2VuZGlmCisKKy8qCisgKiBJZiBhbnkgb2YgdGhlIEJDSiBmaWx0ZXIgZGVjb2RlcnMgYXJlIHdhbnRlZCwgZGVmaW5lIFhaX0RFQ19CQ0ouCisgKiBYWl9ERUNfQkNKIGlzIHVzZWQgdG8gZW5hYmxlIGdlbmVyaWMgc3VwcG9ydCBmb3IgQkNKIGRlY29kZXJzLgorICovCisjaWZuZGVmIFhaX0RFQ19CQ0oKKyMJaWYgZGVmaW5lZChYWl9ERUNfWDg2KSB8fCBkZWZpbmVkKFhaX0RFQ19QT1dFUlBDKSBcCisJCQl8fCBkZWZpbmVkKFhaX0RFQ19JQTY0KSB8fCBkZWZpbmVkKFhaX0RFQ19BUk0pIFwKKwkJCXx8IGRlZmluZWQoWFpfREVDX0FSTSkgfHwgZGVmaW5lZChYWl9ERUNfQVJNVEhVTUIpIFwKKwkJCXx8IGRlZmluZWQoWFpfREVDX1NQQVJDKQorIwkJZGVmaW5lIFhaX0RFQ19CQ0oKKyMJZW5kaWYKKyNlbmRpZgorCisvKgorICogQWxsb2NhdGUgbWVtb3J5IGZvciBMWk1BMiBkZWNvZGVyLiB4el9kZWNfbHptYTJfcmVzZXQoKSBtdXN0IGJlIHVzZWQKKyAqIGJlZm9yZSBjYWxsaW5nIHh6X2RlY19sem1hMl9ydW4oKS4KKyAqLworWFpfRVhURVJOIHN0cnVjdCB4el9kZWNfbHptYTIgKnh6X2RlY19sem1hMl9jcmVhdGUoZW51bSB4el9tb2RlIG1vZGUsCisJCQkJCQkgICB1aW50MzJfdCBkaWN0X21heCk7CisKKy8qCisgKiBEZWNvZGUgdGhlIExaTUEyIHByb3BlcnRpZXMgKG9uZSBieXRlKSBhbmQgcmVzZXQgdGhlIGRlY29kZXIuIFJldHVybgorICogWFpfT0sgb24gc3VjY2VzcywgWFpfTUVNTElNSVRfRVJST1IgaWYgdGhlIHByZWFsbG9jYXRlZCBkaWN0aW9uYXJ5IGlzIG5vdAorICogYmlnIGVub3VnaCwgYW5kIFhaX09QVElPTlNfRVJST1IgaWYgcHJvcHMgaW5kaWNhdGVzIHNvbWV0aGluZyB0aGF0IHRoaXMKKyAqIGRlY29kZXIgZG9lc24ndCBzdXBwb3J0LgorICovCitYWl9FWFRFUk4gZW51bSB4el9yZXQgeHpfZGVjX2x6bWEyX3Jlc2V0KHN0cnVjdCB4el9kZWNfbHptYTIgKnMsCisJCQkJCSB1aW50OF90IHByb3BzKTsKKworLyogRGVjb2RlIHJhdyBMWk1BMiBzdHJlYW0gZnJvbSBiLT5pbiB0byBiLT5vdXQuICovCitYWl9FWFRFUk4gZW51bSB4el9yZXQgeHpfZGVjX2x6bWEyX3J1bihzdHJ1Y3QgeHpfZGVjX2x6bWEyICpzLAorCQkJCSAgICAgICBzdHJ1Y3QgeHpfYnVmICpiKTsKKworLyogRnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIExaTUEyIGRlY29kZXIuICovCitYWl9FWFRFUk4gdm9pZCB4el9kZWNfbHptYTJfZW5kKHN0cnVjdCB4el9kZWNfbHptYTIgKnMpOworCisjaWZkZWYgWFpfREVDX0JDSgorLyoKKyAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgQkNKIGRlY29kZXJzLiB4el9kZWNfYmNqX3Jlc2V0KCkgbXVzdCBiZSB1c2VkIGJlZm9yZQorICogY2FsbGluZyB4el9kZWNfYmNqX3J1bigpLgorICovCitYWl9FWFRFUk4gc3RydWN0IHh6X2RlY19iY2ogKnh6X2RlY19iY2pfY3JlYXRlKGJvb2wgc2luZ2xlX2NhbGwpOworCisvKgorICogRGVjb2RlIHRoZSBGaWx0ZXIgSUQgb2YgYSBCQ0ogZmlsdGVyLiBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QKKyAqIHN1cHBvcnQgY3VzdG9tIHN0YXJ0IG9mZnNldHMsIHNvIG5vIGRlY29kaW5nIG9mIEZpbHRlciBQcm9wZXJ0aWVzCisgKiBpcyBuZWVkZWQuIFJldHVybnMgWFpfT0sgaWYgdGhlIGdpdmVuIEZpbHRlciBJRCBpcyBzdXBwb3J0ZWQuCisgKiBPdGhlcndpc2UgWFpfT1BUSU9OU19FUlJPUiBpcyByZXR1cm5lZC4KKyAqLworWFpfRVhURVJOIGVudW0geHpfcmV0IHh6X2RlY19iY2pfcmVzZXQoc3RydWN0IHh6X2RlY19iY2ogKnMsIHVpbnQ4X3QgaWQpOworCisvKgorICogRGVjb2RlIHJhdyBCQ0ogKyBMWk1BMiBzdHJlYW0uIFRoaXMgbXVzdCBiZSB1c2VkIG9ubHkgaWYgdGhlcmUgYWN0dWFsbHkgaXMKKyAqIGEgQkNKIGZpbHRlciBpbiB0aGUgY2hhaW4uIElmIHRoZSBjaGFpbiBoYXMgb25seSBMWk1BMiwgeHpfZGVjX2x6bWEyX3J1bigpCisgKiBtdXN0IGJlIGNhbGxlZCBkaXJlY3RseS4KKyAqLworWFpfRVhURVJOIGVudW0geHpfcmV0IHh6X2RlY19iY2pfcnVuKHN0cnVjdCB4el9kZWNfYmNqICpzLAorCQkJCSAgICAgc3RydWN0IHh6X2RlY19sem1hMiAqbHptYTIsCisJCQkJICAgICBzdHJ1Y3QgeHpfYnVmICpiKTsKKworLyogRnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIEJDSiBmaWx0ZXJzLiAqLworI2RlZmluZSB4el9kZWNfYmNqX2VuZChzKSBrZnJlZShzKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3h6L3h6X3N0cmVhbS5oIGIvbGliL3h6L3h6X3N0cmVhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2Y2I1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIveHoveHpfc3RyZWFtLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciBoYW5kbGluZyB0aGUgLnh6IGZpbGUgZm9ybWF0CisgKgorICogQXV0aG9yOiBMYXNzZSBDb2xsaW4gPGxhc3NlLmNvbGxpbkB0dWthYW5pLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gcHV0IGludG8gdGhlIHB1YmxpYyBkb21haW4uCisgKiBZb3UgY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhpcyBmaWxlLgorICovCisKKyNpZm5kZWYgWFpfU1RSRUFNX0gKKyNkZWZpbmUgWFpfU1RSRUFNX0gKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIVhaX0lOVEVSTkFMX0NSQzMyCisjCWluY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjCXVuZGVmIGNyYzMyCisjCWRlZmluZSB4el9jcmMzMihidWYsIHNpemUsIGNyYykgXAorCQkofmNyYzMyX2xlKH4odWludDMyX3QpKGNyYyksIGJ1Ziwgc2l6ZSkpCisjZW5kaWYKKworLyoKKyAqIFNlZSB0aGUgLnh6IGZpbGUgZm9ybWF0IHNwZWNpZmljYXRpb24gYXQKKyAqIGh0dHA6Ly90dWthYW5pLm9yZy94ei94ei1maWxlLWZvcm1hdC50eHQKKyAqIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRhaW5lciBmb3JtYXQuCisgKi8KKworI2RlZmluZSBTVFJFQU1fSEVBREVSX1NJWkUgMTIKKworI2RlZmluZSBIRUFERVJfTUFHSUMgIlwzNzU3elhaIgorI2RlZmluZSBIRUFERVJfTUFHSUNfU0laRSA2CisKKyNkZWZpbmUgRk9PVEVSX01BR0lDICJZWiIKKyNkZWZpbmUgRk9PVEVSX01BR0lDX1NJWkUgMgorCisvKgorICogVmFyaWFibGUtbGVuZ3RoIGludGVnZXIgY2FuIGhvbGQgYSA2My1iaXQgdW5zaWduZWQgaW50ZWdlciBvciBhIHNwZWNpYWwKKyAqIHZhbHVlIGluZGljYXRpbmcgdGhhdCB0aGUgdmFsdWUgaXMgdW5rbm93bi4KKyAqCisgKiBFeHBlcmltZW50YWw6IHZsaV90eXBlIGNhbiBiZSBkZWZpbmVkIHRvIHVpbnQzMl90IHRvIHNhdmUgYSBmZXcgYnl0ZXMKKyAqIGluIGNvZGUgc2l6ZSAobm8gZWZmZWN0IG9uIHNwZWVkKS4gRG9pbmcgc28gbGltaXRzIHRoZSB1bmNvbXByZXNzZWQgYW5kCisgKiBjb21wcmVzc2VkIHNpemUgb2YgdGhlIGZpbGUgdG8gbGVzcyB0aGFuIDI1NiBNaUIgYW5kIG1heSBhbHNvIHdlYWtlbgorICogZXJyb3IgZGV0ZWN0aW9uIHNsaWdodGx5LgorICovCit0eXBlZGVmIHVpbnQ2NF90IHZsaV90eXBlOworCisjZGVmaW5lIFZMSV9NQVggKCh2bGlfdHlwZSktMSAvIDIpCisjZGVmaW5lIFZMSV9VTktOT1dOICgodmxpX3R5cGUpLTEpCisKKy8qIE1heGltdW0gZW5jb2RlZCBzaXplIG9mIGEgVkxJICovCisjZGVmaW5lIFZMSV9CWVRFU19NQVggKHNpemVvZih2bGlfdHlwZSkgKiA4IC8gNykKKworLyogSW50ZWdyaXR5IENoZWNrIHR5cGVzICovCitlbnVtIHh6X2NoZWNrIHsKKwlYWl9DSEVDS19OT05FID0gMCwKKwlYWl9DSEVDS19DUkMzMiA9IDEsCisJWFpfQ0hFQ0tfQ1JDNjQgPSA0LAorCVhaX0NIRUNLX1NIQTI1NiA9IDEwCit9OworCisvKiBNYXhpbXVtIHBvc3NpYmxlIENoZWNrIElEICovCisjZGVmaW5lIFhaX0NIRUNLX01BWCAxNQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IGI0ZWRmZTcuLmI1ZDhhMWYgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKKysrIGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtNDA0LDcgKzQwNCw3IEBACiAgKiAtIHZtLmRpcnR5X2JhY2tncm91bmRfcmF0aW8gIG9yICB2bS5kaXJ0eV9iYWNrZ3JvdW5kX2J5dGVzCiAgKiAtIHZtLmRpcnR5X3JhdGlvICAgICAgICAgICAgIG9yICB2bS5kaXJ0eV9ieXRlcwogICogVGhlIGRpcnR5IGxpbWl0cyB3aWxsIGJlIGxpZnRlZCBieSAxLzQgZm9yIFBGX0xFU1NfVEhST1RUTEUgKGllLiBuZnNkKSBhbmQKLSAqIHJ1bnRpbWUgdGFza3MuCisgKiByZWFsLXRpbWUgdGFza3MuCiAgKi8KIHZvaWQgZ2xvYmFsX2RpcnR5X2xpbWl0cyh1bnNpZ25lZCBsb25nICpwYmFja2dyb3VuZCwgdW5zaWduZWQgbG9uZyAqcGRpcnR5KQogewpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IGZmN2UxNTguLjgyNmJhNjkgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTQwMTQsNyArNDAxNCw3IEBACiAJCXpvbmUtPnBhZ2VibG9ja19mbGFncyA9IGFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgdXNlbWFwc2l6ZSk7CiB9CiAjZWxzZQotc3RhdGljIHZvaWQgaW5saW5lIHNldHVwX3VzZW1hcChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAorc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3VzZW1hcChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCXN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHpvbmVzaXplKSB7fQogI2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi8KIApkaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LmMgYi9tbS9wZXJjcHUuYwppbmRleCAzZGQ0OTg0Li4zZjkzMDAxIDEwMDY0NAotLS0gYS9tbS9wZXJjcHUuYworKysgYi9tbS9wZXJjcHUuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAKIC8qCiAgKiAoVW4pcG9wdWxhdGVkIHBhZ2UgcmVnaW9uIGl0ZXJhdG9ycy4gIEl0ZXJhdGUgb3ZlciAodW4pcG9wdWxhdGVkCi0gKiBwYWdlIHJlZ2lvbnMgYmV0d2VuIEBzdGFydCBhbmQgQGVuZCBpbiBAY2h1bmsuICBAcnMgYW5kIEByZSBzaG91bGQKKyAqIHBhZ2UgcmVnaW9ucyBiZXR3ZWVuIEBzdGFydCBhbmQgQGVuZCBpbiBAY2h1bmsuICBAcnMgYW5kIEByZSBzaG91bGQKICAqIGJlIGludGVnZXIgdmFyaWFibGVzIGFuZCB3aWxsIGJlIHNldCB0byBzdGFydCBhbmQgZW5kIHBhZ2UgaW5kZXggb2YKICAqIHRoZSBjdXJyZW50IHJlZ2lvbi4KICAqLwpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IDFhOGJmNzYuLmM5NWQyYmEgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYworKysgYi9tbS9ybWFwLmMKQEAgLTk0LDcgKzk0LDcgQEAKICAqIGFub255bW91cyBwYWdlcyBtYXBwZWQgaW50byBpdCB3aXRoIHRoYXQgYW5vbl92bWEuCiAgKgogICogVGhlIGNvbW1vbiBjYXNlIHdpbGwgYmUgdGhhdCB3ZSBhbHJlYWR5IGhhdmUgb25lLCBidXQgaWYKLSAqIGlmIG5vdCB3ZSBlaXRoZXIgbmVlZCB0byBmaW5kIGFuIGFkamFjZW50IG1hcHBpbmcgdGhhdCB3ZQorICogbm90IHdlIGVpdGhlciBuZWVkIHRvIGZpbmQgYW4gYWRqYWNlbnQgbWFwcGluZyB0aGF0IHdlCiAgKiBjYW4gcmUtdXNlIHRoZSBhbm9uX3ZtYSBmcm9tICh2ZXJ5IGNvbW1vbiB3aGVuIHRoZSBvbmx5CiAgKiByZWFzb24gZm9yIHNwbGl0dGluZyBhIHZtYSBoYXMgYmVlbiBtcHJvdGVjdCgpKSwgb3Igd2UKICAqIGFsbG9jYXRlIGEgbmV3IG9uZS4KZGlmZiAtLWdpdCBhL21tL3NwYXJzZS12bWVtbWFwLmMgYi9tbS9zcGFyc2Utdm1lbW1hcC5jCmluZGV4IDI5ZDZjYmYuLjY0Yjk4NDAgMTAwNjQ0Ci0tLSBhL21tL3NwYXJzZS12bWVtbWFwLmMKKysrIGIvbW0vc3BhcnNlLXZtZW1tYXAuYwpAQCAtOSw3ICs5LDcgQEAKICAqCiAgKiBIb3dldmVyLCB2aXJ0dWFsIG1hcHBpbmdzIG5lZWQgYSBwYWdlIHRhYmxlIGFuZCBUTEJzLiBNYW55IExpbnV4CiAgKiBhcmNoaXRlY3R1cmVzIGFscmVhZHkgbWFwIHRoZWlyIHBoeXNpY2FsIHNwYWNlIHVzaW5nIDEtMSBtYXBwaW5ncwotICogdmlhIFRMQnMuIEZvciB0aG9zZSBhcmNoZXMgdGhlIHZpcnR1YWwgbWVtbW9yeSBtYXAgaXMgZXNzZW50aWFsbHkKKyAqIHZpYSBUTEJzLiBGb3IgdGhvc2UgYXJjaGVzIHRoZSB2aXJ0dWFsIG1lbW9yeSBtYXAgaXMgZXNzZW50aWFsbHkKICAqIGZvciBmcmVlIGlmIHdlIHVzZSB0aGUgc2FtZSBwYWdlIHNpemUgYXMgdGhlIDEtMSBtYXBwaW5ncy4gSW4gdGhhdAogICogY2FzZSB0aGUgb3ZlcmhlYWQgY29uc2lzdHMgb2YgYSBmZXcgYWRkaXRpb25hbCBwYWdlcyB0aGF0IGFyZQogICogYWxsb2NhdGVkIHRvIGNyZWF0ZSBhIHZpZXcgb2YgbWVtb3J5IGZvciB2bWVtbWFwLgpkaWZmIC0tZ2l0IGEvbmV0LzlwL3Byb3RvY29sLmMgYi9uZXQvOXAvcHJvdG9jb2wuYwppbmRleCA3OThiZWFjLi4xZTMwOGYyIDEwMDY0NAotLS0gYS9uZXQvOXAvcHJvdG9jb2wuYworKysgYi9uZXQvOXAvcHJvdG9jb2wuYwpAQCAtMTc4LDI3ICsxNzgsMjQgQEAKIAkJCWJyZWFrOwogCQljYXNlICdzJzp7CiAJCQkJY2hhciAqKnNwdHIgPSB2YV9hcmcoYXAsIGNoYXIgKiopOwotCQkJCWludDE2X3QgbGVuOwotCQkJCWludCBzaXplOworCQkJCXVpbnQxNl90IGxlbjsKIAogCQkJCWVycmNvZGUgPSBwOXBkdV9yZWFkZihwZHUsIHByb3RvX3ZlcnNpb24sCiAJCQkJCQkJCSJ3IiwgJmxlbik7CiAJCQkJaWYgKGVycmNvZGUpCiAJCQkJCWJyZWFrOwogCi0JCQkJc2l6ZSA9IG1heF90KGludDE2X3QsIGxlbiwgMCk7Ci0KLQkJCQkqc3B0ciA9IGttYWxsb2Moc2l6ZSArIDEsIEdGUF9LRVJORUwpOworCQkJCSpzcHRyID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAoKnNwdHIgPT0gTlVMTCkgewogCQkJCQllcnJjb2RlID0gLUVGQVVMVDsKIAkJCQkJYnJlYWs7CiAJCQkJfQotCQkJCWlmIChwZHVfcmVhZChwZHUsICpzcHRyLCBzaXplKSkgeworCQkJCWlmIChwZHVfcmVhZChwZHUsICpzcHRyLCBsZW4pKSB7CiAJCQkJCWVycmNvZGUgPSAtRUZBVUxUOwogCQkJCQlrZnJlZSgqc3B0cik7CiAJCQkJCSpzcHRyID0gTlVMTDsKIAkJCQl9IGVsc2UKLQkJCQkJKCpzcHRyKVtzaXplXSA9IDA7CisJCQkJCSgqc3B0cilbbGVuXSA9IDA7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAnUSc6ewpAQCAtMjM0LDE0ICsyMzEsMTQgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlICdEJzp7Ci0JCQkJaW50MzJfdCAqY291bnQgPSB2YV9hcmcoYXAsIGludDMyX3QgKik7CisJCQkJdWludDMyX3QgKmNvdW50ID0gdmFfYXJnKGFwLCB1aW50MzJfdCAqKTsKIAkJCQl2b2lkICoqZGF0YSA9IHZhX2FyZyhhcCwgdm9pZCAqKik7CiAKIAkJCQllcnJjb2RlID0KIAkJCQkgICAgcDlwZHVfcmVhZGYocGR1LCBwcm90b192ZXJzaW9uLCAiZCIsIGNvdW50KTsKIAkJCQlpZiAoIWVycmNvZGUpIHsKIAkJCQkJKmNvdW50ID0KLQkJCQkJICAgIG1pbl90KGludDMyX3QsICpjb3VudCwKKwkJCQkJICAgIG1pbl90KHVpbnQzMl90LCAqY291bnQsCiAJCQkJCQkgIHBkdS0+c2l6ZSAtIHBkdS0+b2Zmc2V0KTsKIAkJCQkJKmRhdGEgPSAmcGR1LT5zZGF0YVtwZHUtPm9mZnNldF07CiAJCQkJfQpAQCAtNDA0LDkgKzQwMSwxMCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgJ3MnOnsKIAkJCQljb25zdCBjaGFyICpzcHRyID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyICopOwotCQkJCWludDE2X3QgbGVuID0gMDsKKwkJCQl1aW50MTZfdCBsZW4gPSAwOwogCQkJCWlmIChzcHRyKQotCQkJCQlsZW4gPSBtaW5fdChpbnQxNl90LCBzdHJsZW4oc3B0ciksIFVTSFJUX01BWCk7CisJCQkJCWxlbiA9IG1pbl90KHVpbnQxNl90LCBzdHJsZW4oc3B0ciksCisJCQkJCQkJCVVTSFJUX01BWCk7CiAKIAkJCQllcnJjb2RlID0gcDlwZHVfd3JpdGVmKHBkdSwgcHJvdG9fdmVyc2lvbiwKIAkJCQkJCQkJInciLCBsZW4pOwpAQCAtNDM4LDcgKzQzNiw3IEBACiAJCQkJCQkgc3RidWYtPm5fZ2lkLCBzdGJ1Zi0+bl9tdWlkKTsKIAkJCX0gYnJlYWs7CiAJCWNhc2UgJ0QnOnsKLQkJCQlpbnQzMl90IGNvdW50ID0gdmFfYXJnKGFwLCBpbnQzMl90KTsKKwkJCQl1aW50MzJfdCBjb3VudCA9IHZhX2FyZyhhcCwgdWludDMyX3QpOwogCQkJCWNvbnN0IHZvaWQgKmRhdGEgPSB2YV9hcmcoYXAsIGNvbnN0IHZvaWQgKik7CiAKIAkJCQllcnJjb2RlID0gcDlwZHVfd3JpdGVmKHBkdSwgcHJvdG9fdmVyc2lvbiwgImQiLApkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCBhZDBhYWZlLi43Mjg0MDYyIDEwMDY0NAotLS0gYS9uZXQvS2NvbmZpZworKysgYi9uZXQvS2NvbmZpZwpAQCAtMjUzLDcgKzI1Myw5IEBACiAJd2hhdCB3YXMganVzdCBzYWlkLCB5b3UgZG9uJ3QgbmVlZCBpdDogc2F5IE4uCiAKIAlEb2N1bWVudGF0aW9uIG9uIGhvdyB0byB1c2UgVENQIGNvbm5lY3Rpb24gcHJvYmluZyBjYW4gYmUgZm91bmQKLQlhdCBodHRwOi8vbGludXgtbmV0Lm9zZGwub3JnL2luZGV4LnBocC9UY3BQcm9iZQorCWF0OgorCQorCSAgaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy90Y3Bwcm9iZQogCiAJVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0Y3BfcHJvYmUuCmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jYWlmX3NvY2tldC5jIGIvbmV0L2NhaWYvY2FpZl9zb2NrZXQuYwppbmRleCAxYmYwY2Y1Li44MTg0YzAzIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jYWlmX3NvY2tldC5jCisrKyBiL25ldC9jYWlmL2NhaWZfc29ja2V0LmMKQEAgLTc0MCwxMiArNzQwLDEyIEBACiAJCWlmIChjZl9zay0+c2suc2tfcHJvdG9jb2wgIT0gQ0FJRlBST1RPX1VUSUwpCiAJCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCQlsb2NrX3NvY2soJihjZl9zay0+c2spKTsKLQkJY2Zfc2stPmNvbm5fcmVxLnBhcmFtLnNpemUgPSBvbDsKIAkJaWYgKG9sID4gc2l6ZW9mKGNmX3NrLT5jb25uX3JlcS5wYXJhbS5kYXRhKSB8fAogCQkJY29weV9mcm9tX3VzZXIoJmNmX3NrLT5jb25uX3JlcS5wYXJhbS5kYXRhLCBvdiwgb2wpKSB7CiAJCQlyZWxlYXNlX3NvY2soJmNmX3NrLT5zayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQljZl9zay0+Y29ubl9yZXEucGFyYW0uc2l6ZSA9IG9sOwogCQlyZWxlYXNlX3NvY2soJmNmX3NrLT5zayk7CiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jaG5sX25ldC5jIGIvbmV0L2NhaWYvY2hubF9uZXQuYwppbmRleCA4NGE0MjJjLi5mYTlkYWIzIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jaG5sX25ldC5jCisrKyBiL25ldC9jYWlmL2NobmxfbmV0LmMKQEAgLTc2LDYgKzc2LDggQEAKIAlzdHJ1Y3QgY2hubF9uZXQgKnByaXYgID0gY29udGFpbmVyX29mKGxheXIsIHN0cnVjdCBjaG5sX25ldCwgY2hubCk7CiAJaW50IHBrdGxlbjsKIAlpbnQgZXJyID0gMDsKKwljb25zdCB1OCAqaXBfdmVyc2lvbjsKKwl1OCBidWY7CiAKIAlwcml2ID0gY29udGFpbmVyX29mKGxheXIsIHN0cnVjdCBjaG5sX25ldCwgY2hubCk7CiAKQEAgLTkwLDcgKzkyLDIxIEBACiAJICogc2VuZCB0aGUgcGFja2V0IHRvIHRoZSBuZXQgc3RhY2suCiAJICovCiAJc2tiLT5kZXYgPSBwcml2LT5uZXRkZXY7Ci0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKKworCS8qIGNoZWNrIHRoZSB2ZXJzaW9uIG9mIElQICovCisJaXBfdmVyc2lvbiA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIDAsIDEsICZidWYpOworCWlmICghaXBfdmVyc2lvbikKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoICgqaXBfdmVyc2lvbiA+PiA0KSB7CisJY2FzZSA0OgorCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOworCQlicmVhazsKKwljYXNlIDY6CisJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJLyogSWYgd2UgY2hhbmdlIHRoZSBoZWFkZXIgaW4gbG9vcCBtb2RlLCB0aGUgY2hlY2tzdW0gaXMgY29ycnVwdGVkLiAqLwogCWlmIChwcml2LT5jb25uX3JlcS5wcm90b2NvbCA9PSBDQUlGUFJPVE9fREFUQUdSQU1fTE9PUCkKZGlmZiAtLWdpdCBhL25ldC9jZXBoL2NlcGhfaGFzaC5jIGIvbmV0L2NlcGgvY2VwaF9oYXNoLmMKaW5kZXggODE1ZWY4OC4uMGExYjUzYiAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvY2VwaF9oYXNoLmMKKysrIGIvbmV0L2NlcGgvY2VwaF9oYXNoLmMKQEAgLTEsNSArMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jZXBoL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKIC8qCiAgKiBSb2JlcnQgSmVua2luJ3MgaGFzaCBmdW5jdGlvbi4KQEAgLTEwNCw2ICsxMDUsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogfQorRVhQT1JUX1NZTUJPTChjZXBoX3N0cl9oYXNoKTsKIAogY29uc3QgY2hhciAqY2VwaF9zdHJfaGFzaF9uYW1lKGludCB0eXBlKQogewpAQCAtMTE2LDMgKzExOCw0IEBACiAJCXJldHVybiAidW5rbm93biI7CiAJfQogfQorRVhQT1JUX1NZTUJPTChjZXBoX3N0cl9oYXNoX25hbWUpOwpkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXIuYwppbmRleCBiNmZmNGExLi5kZmY2MzNkIDEwMDY0NAotLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXIuYworKysgYi9uZXQvY2VwaC9tZXNzZW5nZXIuYwpAQCAtOTYsNyArOTYsNyBAQAogCiBpbnQgY2VwaF9tc2dyX2luaXQodm9pZCkKIHsKLQljZXBoX21zZ3Jfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJjZXBoLW1zZ3IiKTsKKwljZXBoX21zZ3Jfd3EgPSBhbGxvY193b3JrcXVldWUoImNlcGgtbXNnciIsIFdRX05PTl9SRUVOVFJBTlQsIDApOwogCWlmICghY2VwaF9tc2dyX3dxKSB7CiAJCXByX2VycigibXNncl9pbml0IGZhaWxlZCB0byBjcmVhdGUgd29ya3F1ZXVlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xOTIwLDIwICsxOTIwLDYgQEAKIC8qCiAgKiBBdG9taWNhbGx5IHF1ZXVlIHdvcmsgb24gYSBjb25uZWN0aW9uLiAgQnVtcCBAY29uIHJlZmVyZW5jZSB0bwogICogYXZvaWQgcmFjZXMgd2l0aCBjb25uZWN0aW9uIHRlYXJkb3duLgotICoKLSAqIFRoZXJlIGlzIHNvbWUgdHJpY2tlcnkgZ29pbmcgb24gd2l0aCBRVUVVRUQgYW5kIEJVU1kgYmVjYXVzZSB3ZQotICogb25seSB3YW50IGEgX3NpbmdsZV8gdGhyZWFkIG9wZXJhdGluZyBvbiBlYWNoIGNvbm5lY3Rpb24gYXQgYW55Ci0gKiBwb2ludCBpbiB0aW1lLCBidXQgd2Ugd2FudCB0byB1c2UgYWxsIGF2YWlsYWJsZSBDUFVzLgotICoKLSAqIFRoZSB3b3JrZXIgdGhyZWFkIG9ubHkgcHJvY2VlZHMgaWYgaXQgY2FuIGF0b21pY2FsbHkgc2V0IEJVU1kuICBJdAotICogY2xlYXJzIFFVRVVFRCBhbmQgZG9lcyBpdCdzIHRoaW5nLiAgV2hlbiBpdCB0aGlua3MgaXQncyBkb25lLCBpdAotICogY2xlYXJzIEJVU1ksIHRoZW4gcmVjaGVja3MgUVVFVUVELi4gaWYgaXQncyBzZXQgYWdhaW4sIGl0IGxvb3BzCi0gKiAodHJpZXMgYWdhaW4gdG8gc2V0IEJVU1kpLgotICoKLSAqIFRvIHF1ZXVlIHdvcmssIHdlIGZpcnN0IHNldCBRVUVVRUQsIF90aGVuXyBpZiBCVVNZIGlzbid0IHNldCwgd2UKLSAqIHRyeSB0byBxdWV1ZSB3b3JrLiAgSWYgdGhhdCBmYWlscyAod29yayBpcyBhbHJlYWR5IHF1ZXVlZCwgb3IgQlVTWSkKLSAqIHdlIGdpdmUgdXAgKHdvcmsgYWxzbyBhbHJlYWR5IGJlaW5nIGRvbmUgb3IgaXMgcXVldWVkKSBidXQgbGVhdmUgUVVFVUVECi0gKiBzZXQgc28gdGhhdCB0aGUgd29ya2VyIHRocmVhZCB3aWxsIGxvb3AgaWYgbmVjZXNzYXJ5LgogICovCiBzdGF0aWMgdm9pZCBxdWV1ZV9jb24oc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKQogewpAQCAtMTk0OCwxMSArMTkzNCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlzZXRfYml0KFFVRVVFRCwgJmNvbi0+c3RhdGUpOwotCWlmICh0ZXN0X2JpdChCVVNZLCAmY29uLT5zdGF0ZSkpIHsKLQkJZG91dCgicXVldWVfY29uICVwIC0gYWxyZWFkeSBCVVNZXG4iLCBjb24pOwotCQljb24tPm9wcy0+cHV0KGNvbik7Ci0JfSBlbHNlIGlmICghcXVldWVfd29yayhjZXBoX21zZ3Jfd3EsICZjb24tPndvcmsud29yaykpIHsKKwlpZiAoIXF1ZXVlX2RlbGF5ZWRfd29yayhjZXBoX21zZ3Jfd3EsICZjb24tPndvcmssIDApKSB7CiAJCWRvdXQoInF1ZXVlX2NvbiAlcCAtIGFscmVhZHkgcXVldWVkXG4iLCBjb24pOwogCQljb24tPm9wcy0+cHV0KGNvbik7CiAJfSBlbHNlIHsKQEAgLTE5NjcsMTUgKzE5NDksNiBAQAogewogCXN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uLAogCQkJCQkJICAgd29yay53b3JrKTsKLQlpbnQgYmFja29mZiA9IDA7Ci0KLW1vcmU6Ci0JaWYgKHRlc3RfYW5kX3NldF9iaXQoQlVTWSwgJmNvbi0+c3RhdGUpICE9IDApIHsKLQkJZG91dCgiY29uX3dvcmsgJXAgQlVTWSBhbHJlYWR5IHNldFxuIiwgY29uKTsKLQkJZ290byBvdXQ7Ci0JfQotCWRvdXQoImNvbl93b3JrICVwIHN0YXJ0LCBjbGVhcmluZyBRVUVVRURcbiIsIGNvbik7Ci0JY2xlYXJfYml0KFFVRVVFRCwgJmNvbi0+c3RhdGUpOwogCiAJbXV0ZXhfbG9jaygmY29uLT5tdXRleCk7CiAKQEAgLTE5OTQsMjggKzE5NjcsMTMgQEAKIAkgICAgdHJ5X3JlYWQoY29uKSA8IDAgfHwKIAkgICAgdHJ5X3dyaXRlKGNvbikgPCAwKSB7CiAJCW11dGV4X3VubG9jaygmY29uLT5tdXRleCk7Ci0JCWJhY2tvZmYgPSAxOwogCQljZXBoX2ZhdWx0KGNvbik7ICAgICAvKiBlcnJvci9mYXVsdCBwYXRoICovCiAJCWdvdG8gZG9uZV91bmxvY2tlZDsKIAl9CiAKIGRvbmU6CiAJbXV0ZXhfdW5sb2NrKCZjb24tPm11dGV4KTsKLQogZG9uZV91bmxvY2tlZDoKLQljbGVhcl9iaXQoQlVTWSwgJmNvbi0+c3RhdGUpOwotCWRvdXQoImNvbi0+c3RhdGU9JWx1XG4iLCBjb24tPnN0YXRlKTsKLQlpZiAodGVzdF9iaXQoUVVFVUVELCAmY29uLT5zdGF0ZSkpIHsKLQkJaWYgKCFiYWNrb2ZmIHx8IHRlc3RfYml0KE9QRU5JTkcsICZjb24tPnN0YXRlKSkgewotCQkJZG91dCgiY29uX3dvcmsgJXAgUVVFVUVEIHJlc2V0LCBsb29waW5nXG4iLCBjb24pOwotCQkJZ290byBtb3JlOwotCQl9Ci0JCWRvdXQoImNvbl93b3JrICVwIFFVRVVFRCByZXNldCwgYnV0IGp1c3QgZmF1bHRlZFxuIiwgY29uKTsKLQkJY2xlYXJfYml0KFFVRVVFRCwgJmNvbi0+c3RhdGUpOwotCX0KLQlkb3V0KCJjb25fd29yayAlcCBkb25lXG4iLCBjb24pOwotCi1vdXQ6CiAJY29uLT5vcHMtPnB1dChjb24pOwogfQogCmRpZmYgLS1naXQgYS9uZXQvY2VwaC9vc2RtYXAuYyBiL25ldC9jZXBoL29zZG1hcC5jCmluZGV4IGQ3M2YzZjYuLjcxNjAzYWMgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL29zZG1hcC5jCisrKyBiL25ldC9jZXBoL29zZG1hcC5jCkBAIC02MDUsOCArNjA1LDEwIEBACiAJCQlnb3RvIGJhZDsKIAkJfQogCQllcnIgPSBfX2RlY29kZV9wb29sKHAsIGVuZCwgcGkpOwotCQlpZiAoZXJyIDwgMCkKKwkJaWYgKGVyciA8IDApIHsKKwkJCWtmcmVlKHBpKTsKIAkJCWdvdG8gYmFkOworCQl9CiAJCV9faW5zZXJ0X3BnX3Bvb2woJm1hcC0+cGdfcG9vbHMsIHBpKTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggYTIxNTI2OS4uMDZkMGU3YiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTE3MzIsMzMgKzE3MzIsNiBAQAogfQogRVhQT1JUX1NZTUJPTChuZXRpZl9kZXZpY2VfYXR0YWNoKTsKIAotc3RhdGljIGJvb2wgY2FuX2NoZWNrc3VtX3Byb3RvY29sKHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMsIF9fYmUxNiBwcm90b2NvbCkKLXsKLQlyZXR1cm4gKChmZWF0dXJlcyAmIE5FVElGX0ZfTk9fQ1NVTSkgfHwKLQkJKChmZWF0dXJlcyAmIE5FVElGX0ZfVjRfQ1NVTSkgJiYKLQkJIHByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgfHwKLQkJKChmZWF0dXJlcyAmIE5FVElGX0ZfVjZfQ1NVTSkgJiYKLQkJIHByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB8fAotCQkoKGZlYXR1cmVzICYgTkVUSUZfRl9GQ09FX0NSQykgJiYKLQkJIHByb3RvY29sID09IGh0b25zKEVUSF9QX0ZDT0UpKSk7Ci19Ci0KLXN0YXRpYyBib29sIGRldl9jYW5fY2hlY2tzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlfX2JlMTYgcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOwotCWludCBmZWF0dXJlcyA9IGRldi0+ZmVhdHVyZXM7Ci0KLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCWZlYXR1cmVzICY9IGRldi0+dmxhbl9mZWF0dXJlczsKLQl9IGVsc2UgaWYgKHByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSkgewotCQlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZlaCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2ItPmRhdGE7Ci0JCXByb3RvY29sID0gdmVoLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOwotCQlmZWF0dXJlcyAmPSBkZXYtPnZsYW5fZmVhdHVyZXM7Ci0JfQotCi0JcmV0dXJuIGNhbl9jaGVja3N1bV9wcm90b2NvbChmZWF0dXJlcywgcHJvdG9jb2wpOwotfQotCiAvKioKICAqIHNrYl9kZXZfc2V0IC0tIGFzc2lnbiBhIG5ldyBkZXZpY2UgdG8gYSBidWZmZXIKICAqIEBza2I6IGJ1ZmZlciBmb3IgdGhlIG5ldyBkZXZpY2UKQEAgLTE5NzEsMTYgKzE5NDQsMTQgQEAKIC8qKgogICoJZGV2X2dzb19zZWdtZW50IC0gUGVyZm9ybSBlbXVsYXRlZCBoYXJkd2FyZSBzZWdtZW50YXRpb24gb24gc2tiLgogICoJQHNrYjogYnVmZmVyIHRvIHNlZ21lbnQKKyAqCUBmZWF0dXJlczogZGV2aWNlIGZlYXR1cmVzIGFzIGFwcGxpY2FibGUgdG8gdGhpcyBza2IKICAqCiAgKglUaGlzIGZ1bmN0aW9uIHNlZ21lbnRzIHRoZSBnaXZlbiBza2IgYW5kIHN0b3JlcyB0aGUgbGlzdCBvZiBzZWdtZW50cwogICoJaW4gc2tiLT5uZXh0LgogICovCi1zdGF0aWMgaW50IGRldl9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBkZXZfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZlYXR1cmVzKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2VnczsKLQlpbnQgZmVhdHVyZXMgPSBkZXYtPmZlYXR1cmVzICYgfihpbGxlZ2FsX2hpZ2hkbWEoZGV2LCBza2IpID8KLQkJCQkJIE5FVElGX0ZfU0cgOiAwKTsKIAogCXNlZ3MgPSBza2JfZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7CiAKQEAgLTIwMTcsMjIgKzE5ODgsNTIgQEAKIAl9CiB9CiAKLWludCBuZXRpZl9nZXRfdmxhbl9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGJvb2wgY2FuX2NoZWNrc3VtX3Byb3RvY29sKHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMsIF9fYmUxNiBwcm90b2NvbCkKK3sKKwlyZXR1cm4gKChmZWF0dXJlcyAmIE5FVElGX0ZfR0VOX0NTVU0pIHx8CisJCSgoZmVhdHVyZXMgJiBORVRJRl9GX1Y0X0NTVU0pICYmCisJCSBwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHx8CisJCSgoZmVhdHVyZXMgJiBORVRJRl9GX1Y2X0NTVU0pICYmCisJCSBwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgfHwKKwkJKChmZWF0dXJlcyAmIE5FVElGX0ZfRkNPRV9DUkMpICYmCisJCSBwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9GQ09FKSkpOworfQorCitzdGF0aWMgaW50IGhhcm1vbml6ZV9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgcHJvdG9jb2wsIGludCBmZWF0dXJlcykKK3sKKwlpZiAoIWNhbl9jaGVja3N1bV9wcm90b2NvbChwcm90b2NvbCwgZmVhdHVyZXMpKSB7CisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX0FMTF9DU1VNOworCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9TRzsKKwl9IGVsc2UgaWYgKGlsbGVnYWxfaGlnaGRtYShza2ItPmRldiwgc2tiKSkgeworCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9TRzsKKwl9CisKKwlyZXR1cm4gZmVhdHVyZXM7Cit9CisKK2ludCBuZXRpZl9za2JfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlfX2JlMTYgcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOworCWludCBmZWF0dXJlcyA9IHNrYi0+ZGV2LT5mZWF0dXJlczsKIAogCWlmIChwcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxUSkpIHsKIAkJc3RydWN0IHZsYW5fZXRoaGRyICp2ZWggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiLT5kYXRhOwogCQlwcm90b2NvbCA9IHZlaC0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKLQl9IGVsc2UgaWYgKCFza2ItPnZsYW5fdGNpKQotCQlyZXR1cm4gZGV2LT5mZWF0dXJlczsKKwl9IGVsc2UgaWYgKCF2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwkJcmV0dXJuIGhhcm1vbml6ZV9mZWF0dXJlcyhza2IsIHByb3RvY29sLCBmZWF0dXJlcyk7CisJfQogCi0JaWYgKHByb3RvY29sICE9IGh0b25zKEVUSF9QXzgwMjFRKSkKLQkJcmV0dXJuIGRldi0+ZmVhdHVyZXMgJiBkZXYtPnZsYW5fZmVhdHVyZXM7Ci0JZWxzZQotCQlyZXR1cm4gMDsKKwlmZWF0dXJlcyAmPSBza2ItPmRldi0+dmxhbl9mZWF0dXJlczsKKworCWlmIChwcm90b2NvbCAhPSBodG9ucyhFVEhfUF84MDIxUSkpIHsKKwkJcmV0dXJuIGhhcm1vbml6ZV9mZWF0dXJlcyhza2IsIHByb3RvY29sLCBmZWF0dXJlcyk7CisJfSBlbHNlIHsKKwkJZmVhdHVyZXMgJj0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfRlJBR0xJU1QgfAorCQkJCU5FVElGX0ZfR0VOX0NTVU07CisJCXJldHVybiBoYXJtb25pemVfZmVhdHVyZXMoc2tiLCBwcm90b2NvbCwgZmVhdHVyZXMpOworCX0KIH0KLUVYUE9SVF9TWU1CT0wobmV0aWZfZ2V0X3ZsYW5fZmVhdHVyZXMpOworRVhQT1JUX1NZTUJPTChuZXRpZl9za2JfZmVhdHVyZXMpOwogCiAvKgogICogUmV0dXJucyB0cnVlIGlmIGVpdGhlcjoKQEAgLTIwNDIsMjIgKzIwNDMsMTMgQEAKICAqCSAgIHN1cHBvcnQgRE1BIGZyb20gaXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNrYl9uZWVkc19saW5lYXJpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorCQkJCSAgICAgIGludCBmZWF0dXJlcykKIHsKLQlpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKSB7Ci0JCWludCBmZWF0dXJlcyA9IGRldi0+ZmVhdHVyZXM7Ci0KLQkJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKLQkJCWZlYXR1cmVzICY9IGRldi0+dmxhbl9mZWF0dXJlczsKLQotCQlyZXR1cm4gKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgJiYKLQkJCSEoZmVhdHVyZXMgJiBORVRJRl9GX0ZSQUdMSVNUKSkgfHwKKwlyZXR1cm4gc2tiX2lzX25vbmxpbmVhcihza2IpICYmCisJCQkoKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgJiYKKwkJCQkhKGZlYXR1cmVzICYgTkVUSUZfRl9GUkFHTElTVCkpIHx8CiAJCQkoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAmJgotCQkJKCEoZmVhdHVyZXMgJiBORVRJRl9GX1NHKSB8fAotCQkJaWxsZWdhbF9oaWdoZG1hKGRldiwgc2tiKSkpOwotCX0KLQotCXJldHVybiAwOworCQkJCSEoZmVhdHVyZXMgJiBORVRJRl9GX1NHKSkpOwogfQogCiBpbnQgZGV2X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMjA2Nyw2ICsyMDU5LDggQEAKIAlpbnQgcmMgPSBORVRERVZfVFhfT0s7CiAKIAlpZiAobGlrZWx5KCFza2ItPm5leHQpKSB7CisJCWludCBmZWF0dXJlczsKKwogCQkvKgogCQkgKiBJZiBkZXZpY2UgZG9lc250IG5lZWQgc2tiLT5kc3QsIHJlbGVhc2UgaXQgcmlnaHQgbm93IHdoaWxlCiAJCSAqIGl0cyBob3QgaW4gdGhpcyBjcHUgY2FjaGUKQEAgLTIwNzksOCArMjA3MywxMCBAQAogCiAJCXNrYl9vcnBoYW5fdHJ5KHNrYik7CiAKKwkJZmVhdHVyZXMgPSBuZXRpZl9za2JfZmVhdHVyZXMoc2tiKTsKKwogCQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpICYmCi0JCSAgICAhKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fVFgpKSB7CisJCSAgICAhKGZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1RYKSkgewogCQkJc2tiID0gX192bGFuX3B1dF90YWcoc2tiLCB2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CiAJCQlpZiAodW5saWtlbHkoIXNrYikpCiAJCQkJZ290byBvdXQ7CkBAIC0yMDg4LDEzICsyMDg0LDEzIEBACiAJCQlza2ItPnZsYW5fdGNpID0gMDsKIAkJfQogCi0JCWlmIChuZXRpZl9uZWVkc19nc28oZGV2LCBza2IpKSB7Ci0JCQlpZiAodW5saWtlbHkoZGV2X2dzb19zZWdtZW50KHNrYikpKQorCQlpZiAobmV0aWZfbmVlZHNfZ3NvKHNrYiwgZmVhdHVyZXMpKSB7CisJCQlpZiAodW5saWtlbHkoZGV2X2dzb19zZWdtZW50KHNrYiwgZmVhdHVyZXMpKSkKIAkJCQlnb3RvIG91dF9rZnJlZV9za2I7CiAJCQlpZiAoc2tiLT5uZXh0KQogCQkJCWdvdG8gZ3NvOwogCQl9IGVsc2UgewotCQkJaWYgKHNrYl9uZWVkc19saW5lYXJpemUoc2tiLCBkZXYpICYmCisJCQlpZiAoc2tiX25lZWRzX2xpbmVhcml6ZShza2IsIGZlYXR1cmVzKSAmJgogCQkJICAgIF9fc2tiX2xpbmVhcml6ZShza2IpKQogCQkJCWdvdG8gb3V0X2tmcmVlX3NrYjsKIApAQCAtMjEwNSw3ICsyMTAxLDcgQEAKIAkJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCQkJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwKIAkJCQkJc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpKTsKLQkJCQlpZiAoIWRldl9jYW5fY2hlY2tzdW0oZGV2LCBza2IpICYmCisJCQkJaWYgKCEoZmVhdHVyZXMgJiBORVRJRl9GX0FMTF9DU1VNKSAmJgogCQkJCSAgICAgc2tiX2NoZWNrc3VtX2hlbHAoc2tiKSkKIAkJCQkJZ290byBvdXRfa2ZyZWVfc2tiOwogCQkJfQpAQCAtMjMwMSw3ICsyMjk3LDEwIEBACiAJCSAqLwogCQlpZiAoIShkZXYtPnByaXZfZmxhZ3MgJiBJRkZfWE1JVF9EU1RfUkVMRUFTRSkpCiAJCQlza2JfZHN0X2ZvcmNlKHNrYik7Ci0JCV9fcWRpc2NfdXBkYXRlX2JzdGF0cyhxLCBza2ItPmxlbik7CisKKwkJcWRpc2Nfc2tiX2NiKHNrYiktPnBrdF9sZW4gPSBza2ItPmxlbjsKKwkJcWRpc2NfYnN0YXRzX3VwZGF0ZShxLCBza2IpOworCiAJCWlmIChzY2hfZGlyZWN0X3htaXQoc2tiLCBxLCBkZXYsIHR4cSwgcm9vdF9sb2NrKSkgewogCQkJaWYgKHVubGlrZWx5KGNvbnRlbmRlZCkpIHsKIAkJCQlzcGluX3VubG9jaygmcS0+YnVzeWxvY2spOwpAQCAtNTYyMSwxOCArNTYyMCwyMCBAQAogfQogCiAvKioKLSAqCWFsbG9jX25ldGRldl9tcSAtIGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlCisgKglhbGxvY19uZXRkZXZfbXFzIC0gYWxsb2NhdGUgbmV0d29yayBkZXZpY2UKICAqCUBzaXplb2ZfcHJpdjoJc2l6ZSBvZiBwcml2YXRlIGRhdGEgdG8gYWxsb2NhdGUgc3BhY2UgZm9yCiAgKglAbmFtZToJCWRldmljZSBuYW1lIGZvcm1hdCBzdHJpbmcKICAqCUBzZXR1cDoJCWNhbGxiYWNrIHRvIGluaXRpYWxpemUgZGV2aWNlCi0gKglAcXVldWVfY291bnQ6CXRoZSBudW1iZXIgb2Ygc3VicXVldWVzIHRvIGFsbG9jYXRlCisgKglAdHhxczoJCXRoZSBudW1iZXIgb2YgVFggc3VicXVldWVzIHRvIGFsbG9jYXRlCisgKglAcnhxczoJCXRoZSBudW1iZXIgb2YgUlggc3VicXVldWVzIHRvIGFsbG9jYXRlCiAgKgogICoJQWxsb2NhdGVzIGEgc3RydWN0IG5ldF9kZXZpY2Ugd2l0aCBwcml2YXRlIGRhdGEgYXJlYSBmb3IgZHJpdmVyIHVzZQogICoJYW5kIHBlcmZvcm1zIGJhc2ljIGluaXRpYWxpemF0aW9uLiAgQWxzbyBhbGxvY2F0ZXMgc3VicXV1ZSBzdHJ1Y3RzCi0gKglmb3IgZWFjaCBxdWV1ZSBvbiB0aGUgZGV2aWNlIGF0IHRoZSBlbmQgb2YgdGhlIG5ldGRldmljZS4KKyAqCWZvciBlYWNoIHF1ZXVlIG9uIHRoZSBkZXZpY2UuCiAgKi8KLXN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXEoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLAotCQl2b2lkICgqc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICopLCB1bnNpZ25lZCBpbnQgcXVldWVfY291bnQpCitzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCXZvaWQgKCpzZXR1cCkoc3RydWN0IG5ldF9kZXZpY2UgKiksCisJCXVuc2lnbmVkIGludCB0eHFzLCB1bnNpZ25lZCBpbnQgcnhxcykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXNpemVfdCBhbGxvY19zaXplOwpAQCAtNTY0MCwxMiArNTY0MSwyMCBAQAogCiAJQlVHX09OKHN0cmxlbihuYW1lKSA+PSBzaXplb2YoZGV2LT5uYW1lKSk7CiAKLQlpZiAocXVldWVfY291bnQgPCAxKSB7CisJaWYgKHR4cXMgPCAxKSB7CiAJCXByX2VycigiYWxsb2NfbmV0ZGV2OiBVbmFibGUgdG8gYWxsb2NhdGUgZGV2aWNlICIKIAkJICAgICAgICJ3aXRoIHplcm8gcXVldWVzLlxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAorI2lmZGVmIENPTkZJR19SUFMKKwlpZiAocnhxcyA8IDEpIHsKKwkJcHJfZXJyKCJhbGxvY19uZXRkZXY6IFVuYWJsZSB0byBhbGxvY2F0ZSBkZXZpY2UgIgorCQkgICAgICAgIndpdGggemVybyBSWCBxdWV1ZXMuXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorI2VuZGlmCisKIAlhbGxvY19zaXplID0gc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlKTsKIAlpZiAoc2l6ZW9mX3ByaXYpIHsKIAkJLyogZW5zdXJlIDMyLWJ5dGUgYWxpZ25tZW50IG9mIHByaXZhdGUgYXJlYSAqLwpAQCAtNTY3NiwxNCArNTY4NSwxNCBAQAogCiAJZGV2X25ldF9zZXQoZGV2LCAmaW5pdF9uZXQpOwogCi0JZGV2LT5udW1fdHhfcXVldWVzID0gcXVldWVfY291bnQ7Ci0JZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSBxdWV1ZV9jb3VudDsKKwlkZXYtPm51bV90eF9xdWV1ZXMgPSB0eHFzOworCWRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gdHhxczsKIAlpZiAobmV0aWZfYWxsb2NfbmV0ZGV2X3F1ZXVlcyhkZXYpKQogCQlnb3RvIGZyZWVfcGNwdTsKIAogI2lmZGVmIENPTkZJR19SUFMKLQlkZXYtPm51bV9yeF9xdWV1ZXMgPSBxdWV1ZV9jb3VudDsKLQlkZXYtPnJlYWxfbnVtX3J4X3F1ZXVlcyA9IHF1ZXVlX2NvdW50OworCWRldi0+bnVtX3J4X3F1ZXVlcyA9IHJ4cXM7CisJZGV2LT5yZWFsX251bV9yeF9xdWV1ZXMgPSByeHFzOwogCWlmIChuZXRpZl9hbGxvY19yeF9xdWV1ZXMoZGV2KSkKIAkJZ290byBmcmVlX3BjcHU7CiAjZW5kaWYKQEAgLTU3MTEsNyArNTcyMCw3IEBACiAJa2ZyZWUocCk7CiAJcmV0dXJuIE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MKGFsbG9jX25ldGRldl9tcSk7CitFWFBPUlRfU1lNQk9MKGFsbG9jX25ldGRldl9tcXMpOwogCiAvKioKICAqCWZyZWVfbmV0ZGV2IC0gZnJlZSBuZXR3b3JrIGRldmljZQpAQCAtNjIwOSw3ICs2MjE4LDcgQEAKIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfbGlzdCkKIHsKIAkvKiBBdCBleGl0IGFsbCBuZXR3b3JrIGRldmljZXMgbW9zdCBiZSByZW1vdmVkIGZyb20gYSBuZXR3b3JrCi0JICogbmFtZXNwYWNlLiAgRG8gdGhpcyBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZiByZWdpc3RlcmF0aW9uLgorCSAqIG5hbWVzcGFjZS4gIERvIHRoaXMgaW4gdGhlIHJldmVyc2Ugb3JkZXIgb2YgcmVnaXN0cmF0aW9uLgogCSAqIERvIHRoaXMgYWNyb3NzIGFzIG1hbnkgbmV0d29yayBuYW1lc3BhY2VzIGFzIHBvc3NpYmxlIHRvCiAJICogaW1wcm92ZSBiYXRjaGluZyBlZmZpY2llbmN5LgogCSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCAyYjI3ZDRlLi5hZmM1ODM3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYworKysgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAvKioKICAqCXNrX3J1bl9maWx0ZXIgLSBydW4gYSBmaWx0ZXIgb24gYSBzb2NrZXQKICAqCUBza2I6IGJ1ZmZlciB0byBydW4gdGhlIGZpbHRlciBvbgotICoJQGZpbHRlcjogZmlsdGVyIHRvIGFwcGx5CisgKglAZmVudHJ5OiBmaWx0ZXIgdG8gYXBwbHkKICAqCiAgKiBEZWNvZGUgYW5kIGFwcGx5IGZpbHRlciBpbnN0cnVjdGlvbnMgdG8gdGhlIHNrYi0+ZGF0YS4KICAqIFJldHVybiBsZW5ndGggdG8ga2VlcCwgMCBmb3Igbm9uZS4gQHNrYiBpcyB0aGUgZGF0YSB3ZSBhcmUKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggNzUwZGI1Ny4uYTVmNzUzNSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTE4MjAsNyArMTgyMCw3IEBACiAJaWYgKGtpbmQgIT0gMiAmJiBzZWN1cml0eV9uZXRsaW5rX3JlY3Yoc2tiLCBDQVBfTkVUX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWlmIChraW5kID09IDIgJiYgbmxoLT5ubG1zZ19mbGFncyZOTE1fRl9EVU1QKSB7CisJaWYgKGtpbmQgPT0gMiAmJiAobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0RVTVApID09IE5MTV9GX0RVTVApIHsKIAkJc3RydWN0IHNvY2sgKnJ0bmw7CiAJCXJ0bmxfZHVtcGl0X2Z1bmMgZHVtcGl0OwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggYTY1OGFlYi4uN2RmZWQ3OSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICJza19sb2NrLTI3IiAgICAgICAsICJza19sb2NrLTI4IiAgICAgICAgICAsICJza19sb2NrLUFGX0NBTiIgICAgICAsCiAgICJza19sb2NrLUFGX1RJUEMiICAsICJza19sb2NrLUFGX0JMVUVUT09USCIsICJza19sb2NrLUlVQ1YiICAgICAgICAsCiAgICJza19sb2NrLUFGX1JYUlBDIiAsICJza19sb2NrLUFGX0lTRE4iICAgICAsICJza19sb2NrLUFGX1BIT05FVCIgICAsCi0gICJza19sb2NrLUFGX0lFRUU4MDIxNTQiLCAic2tfbG9jay1BRl9DQUlGIiAsCisgICJza19sb2NrLUFGX0lFRUU4MDIxNTQiLCAic2tfbG9jay1BRl9DQUlGIiAsICJza19sb2NrLUFGX0FMRyIgICAgICAsCiAgICJza19sb2NrLUFGX01BWCIKIH07CiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYWZfZmFtaWx5X3Nsb2NrX2tleV9zdHJpbmdzW0FGX01BWCsxXSA9IHsKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAic2xvY2stMjciICAgICAgICwgInNsb2NrLTI4IiAgICAgICAgICAsICJzbG9jay1BRl9DQU4iICAgICAgLAogICAic2xvY2stQUZfVElQQyIgICwgInNsb2NrLUFGX0JMVUVUT09USCIsICJzbG9jay1BRl9JVUNWIiAgICAgLAogICAic2xvY2stQUZfUlhSUEMiICwgInNsb2NrLUFGX0lTRE4iICAgICAsICJzbG9jay1BRl9QSE9ORVQiICAgLAotICAic2xvY2stQUZfSUVFRTgwMjE1NCIsICJzbG9jay1BRl9DQUlGIiAsCisgICJzbG9jay1BRl9JRUVFODAyMTU0IiwgInNsb2NrLUFGX0NBSUYiICwgInNsb2NrLUFGX0FMRyIgICAgICAsCiAgICJzbG9jay1BRl9NQVgiCiB9Owogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGFmX2ZhbWlseV9jbG9ja19rZXlfc3RyaW5nc1tBRl9NQVgrMV0gPSB7CkBAIC0xODksNyArMTg5LDcgQEAKICAgImNsb2NrLTI3IiAgICAgICAsICJjbG9jay0yOCIgICAgICAgICAgLCAiY2xvY2stQUZfQ0FOIiAgICAgICwKICAgImNsb2NrLUFGX1RJUEMiICAsICJjbG9jay1BRl9CTFVFVE9PVEgiLCAiY2xvY2stQUZfSVVDViIgICAgICwKICAgImNsb2NrLUFGX1JYUlBDIiAsICJjbG9jay1BRl9JU0ROIiAgICAgLCAiY2xvY2stQUZfUEhPTkVUIiAgICwKLSAgImNsb2NrLUFGX0lFRUU4MDIxNTQiLCAiY2xvY2stQUZfQ0FJRiIgLAorICAiY2xvY2stQUZfSUVFRTgwMjE1NCIsICJjbG9jay1BRl9DQUlGIiAsICJjbG9jay1BRl9BTEciICAgICAgLAogICAiY2xvY2stQUZfTUFYIgogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvS2NvbmZpZyBiL25ldC9kY2NwL0tjb25maWcKaW5kZXggYWQ2ZGZmZC4uYjc1OTY4YSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvS2NvbmZpZworKysgYi9uZXQvZGNjcC9LY29uZmlnCkBAIC00OSw3ICs0OSw5IEBACiAJd2hhdCB3YXMganVzdCBzYWlkLCB5b3UgZG9uJ3QgbmVlZCBpdDogc2F5IE4uCiAKIAlEb2N1bWVudGF0aW9uIG9uIGhvdyB0byB1c2UgRENDUCBjb25uZWN0aW9uIHByb2JpbmcgY2FuIGJlIGZvdW5kCi0JYXQgaHR0cDovL2xpbnV4LW5ldC5vc2RsLm9yZy9pbmRleC5waHAvRGNjcFByb2JlCisJYXQ6CisJCisJICBodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2RjY3Bwcm9iZQogCiAJVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBkY2NwX3Byb2JlLgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvZGNjcC5oIGIvbmV0L2RjY3AvZGNjcC5oCmluZGV4IDQ1MDg3MDUuLjVmZGIwNzIgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2RjY3AuaAorKysgYi9uZXQvZGNjcC9kY2NwLmgKQEAgLTQyNiw3ICs0MjYsOCBAQAogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAKLQlkcC0+ZGNjcHNfZ3NyID0gc2VxOworCWlmIChhZnRlcjQ4KHNlcSwgZHAtPmRjY3BzX2dzcikpCisJCWRwLT5kY2Nwc19nc3IgPSBzZXE7CiAJLyogU2VxdWVuY2UgdmFsaWRpdHkgd2luZG93IGRlcGVuZHMgb24gcmVtb3RlIFNlcXVlbmNlIFdpbmRvdyAoNy41LjEpICovCiAJZHAtPmRjY3BzX3N3bCA9IFNVQjQ4KEFERDQ4KGRwLT5kY2Nwc19nc3IsIDEpLCBkcC0+ZGNjcHNfcl9zZXFfd2luIC8gNCk7CiAJLyoKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lucHV0LmMgYi9uZXQvZGNjcC9pbnB1dC5jCmluZGV4IDE1YWYyNDcuLjhjZGUwMDkgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lucHV0LmMKKysrIGIvbmV0L2RjY3AvaW5wdXQuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJCSAqLwogCQlpZiAodGltZV9iZWZvcmUobm93LCAoZHAtPmRjY3BzX3JhdGVfbGFzdCArCiAJCQkJICAgICAgc3lzY3RsX2RjY3Bfc3luY19yYXRlbGltaXQpKSkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC0xOwogCiAJCURDQ1BfV0FSTigiU3RlcCA2IGZhaWxlZCBmb3IgJXMgcGFja2V0LCAiCiAJCQkgICIoTFNXTCglbGx1KSA8PSBQLnNlcW5vKCVsbHUpIDw9IFMuU1dIKCVsbHUpKSBhbmQgIgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avc3lzY3RsLmMgYi9uZXQvZGNjcC9zeXNjdGwuYwppbmRleCA1NjM5NDM4Li40MjM0ODgyIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9zeXNjdGwuYworKysgYi9uZXQvZGNjcC9zeXNjdGwuYwpAQCAtMjEsNyArMjEsOCBAQAogLyogQm91bmRhcnkgdmFsdWVzICovCiBzdGF0aWMgaW50CQl6ZXJvICAgICA9IDAsCiAJCQl1OF9tYXggICA9IDB4RkY7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZwlzZXF3X21pbiA9IDMyOworc3RhdGljIHVuc2lnbmVkIGxvbmcJc2Vxd19taW4gPSBEQ0NQRl9TRVFfV01JTiwKKwkJCXNlcXdfbWF4ID0gMHhGRkZGRkZGRjsJCS8qIG1heGltdW0gb24gMzIgYml0ICovCiAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGRjY3BfZGVmYXVsdF90YWJsZVtdID0gewogCXsKQEAgLTMxLDYgKzMyLDcgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG91bG9uZ3ZlY19taW5tYXgsCiAJCS5leHRyYTEJCT0gJnNlcXdfbWluLAkJLyogUkZDIDQzNDAsIDcuNS4yICovCisJCS5leHRyYTIJCT0gJnNlcXdfbWF4LAogCX0sCiAJewogCQkucHJvY25hbWUJPSAicnhfY2NpZCIsCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX2Rldi5jIGIvbmV0L2RlY25ldC9kbl9kZXYuYwppbmRleCAwYmExNTYzLi4wZGNhYTkwIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX2Rldi5jCisrKyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKQEAgLTExMzAsNyArMTEzMCw3IEBACiAvKgogICogVGhpcyBwcm9jZXNzZXMgYSBkZXZpY2UgdXAgZXZlbnQuIFdlIG9ubHkgc3RhcnQgdXAKICAqIHRoZSBsb29wYmFjayBkZXZpY2UgJiBldGhlcm5ldCBkZXZpY2VzIHdpdGggY29ycmVjdAotICogTUFDIGFkZHJlc2VzIGF1dG9tYXRpY2FsbHkuIE90aGVycyBtdXN0IGJlIHN0YXJ0ZWQKKyAqIE1BQyBhZGRyZXNzZXMgYXV0b21hdGljYWxseS4gT3RoZXJzIG11c3QgYmUgc3RhcnRlZAogICogc3BlY2lmaWNhbGx5LgogICoKICAqIEZJWE1FOiBIb3cgc2hvdWxkIHdlIGNvbmZpZ3VyZSB0aGUgbG9vcGJhY2sgYWRkcmVzcyA/IElmIHdlIGNvdWxkIGRpc3BlbnNlCmRpZmYgLS1naXQgYS9uZXQvZXRoZXJuZXQvZXRoLmMgYi9uZXQvZXRoZXJuZXQvZXRoLmMKaW5kZXggZjAwZWYyZi4uZjlkN2FjOSAxMDA2NDQKLS0tIGEvbmV0L2V0aGVybmV0L2V0aC5jCisrKyBiL25ldC9ldGhlcm5ldC9ldGguYwpAQCAtMzQ3LDEwICszNDcsMTEgQEAKIEVYUE9SVF9TWU1CT0woZXRoZXJfc2V0dXApOwogCiAvKioKLSAqIGFsbG9jX2V0aGVyZGV2X21xIC0gQWxsb2NhdGVzIGFuZCBzZXRzIHVwIGFuIEV0aGVybmV0IGRldmljZQorICogYWxsb2NfZXRoZXJkZXZfbXFzIC0gQWxsb2NhdGVzIGFuZCBzZXRzIHVwIGFuIEV0aGVybmV0IGRldmljZQogICogQHNpemVvZl9wcml2OiBTaXplIG9mIGFkZGl0aW9uYWwgZHJpdmVyLXByaXZhdGUgc3RydWN0dXJlIHRvIGJlIGFsbG9jYXRlZAogICoJZm9yIHRoaXMgRXRoZXJuZXQgZGV2aWNlCi0gKiBAcXVldWVfY291bnQ6IFRoZSBudW1iZXIgb2YgcXVldWVzIHRoaXMgZGV2aWNlIGhhcy4KKyAqIEB0eHFzOiBUaGUgbnVtYmVyIG9mIFRYIHF1ZXVlcyB0aGlzIGRldmljZSBoYXMuCisgKiBAdHhxczogVGhlIG51bWJlciBvZiBSWCBxdWV1ZXMgdGhpcyBkZXZpY2UgaGFzLgogICoKICAqIEZpbGwgaW4gdGhlIGZpZWxkcyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSB3aXRoIEV0aGVybmV0LWdlbmVyaWMKICAqIHZhbHVlcy4gQmFzaWNhbGx5IGRvZXMgZXZlcnl0aGluZyBleGNlcHQgcmVnaXN0ZXJpbmcgdGhlIGRldmljZS4KQEAgLTM2MCwxMSArMzYxLDEyIEBACiAgKiB0aGlzIHByaXZhdGUgZGF0YSBhcmVhLgogICovCiAKLXN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19ldGhlcmRldl9tcShpbnQgc2l6ZW9mX3ByaXYsIHVuc2lnbmVkIGludCBxdWV1ZV9jb3VudCkKK3N0cnVjdCBuZXRfZGV2aWNlICphbGxvY19ldGhlcmRldl9tcXMoaW50IHNpemVvZl9wcml2LCB1bnNpZ25lZCBpbnQgdHhxcywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcnhxcykKIHsKLQlyZXR1cm4gYWxsb2NfbmV0ZGV2X21xKHNpemVvZl9wcml2LCAiZXRoJWQiLCBldGhlcl9zZXR1cCwgcXVldWVfY291bnQpOworCXJldHVybiBhbGxvY19uZXRkZXZfbXFzKHNpemVvZl9wcml2LCAiZXRoJWQiLCBldGhlcl9zZXR1cCwgdHhxcywgcnhxcyk7CiB9Ci1FWFBPUlRfU1lNQk9MKGFsbG9jX2V0aGVyZGV2X21xKTsKK0VYUE9SVF9TWU1CT0woYWxsb2NfZXRoZXJkZXZfbXFzKTsKIAogc3RhdGljIHNpemVfdCBfZm9ybWF0X21hY19hZGRyKGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwKIAkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgbGVuKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvS2NvbmZpZyBiL25ldC9pcHY0L0tjb25maWcKaW5kZXggOWU5NWQ3Zi4uYTVhMTA1MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvS2NvbmZpZworKysgYi9uZXQvaXB2NC9LY29uZmlnCkBAIC00MzIsNyArNDMyLDkgQEAKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBJTkVUIChUQ1AsIERDQ1AsIGV0Yykgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkKIAkgIG5hdGl2ZSBMaW51eCB0b29scyBzdWNoIGFzIHNzLiBzcyBpcyBpbmNsdWRlZCBpbiBpcHJvdXRlMiwgY3VycmVudGx5Ci0JICBkb3dubG9hZGFibGUgYXQgPGh0dHA6Ly9saW51eC1uZXQub3NkbC5vcmcvaW5kZXgucGhwL0lwcm91dGUyPi4KKwkgIGRvd25sb2FkYWJsZSBhdDoKKwkgIAorCSAgICBodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2lwcm91dGUyCiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FoNC5jIGIvbmV0L2lwdjQvYWg0LmMKaW5kZXggODgwYTVlYy4uODY5NjFiZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWg0LmMKKysrIGIvbmV0L2lwdjQvYWg0LmMKQEAgLTMxNCwxNCArMzE0LDE1IEBACiAKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAKLQlhaCA9IChzdHJ1Y3QgaXBfYXV0aF9oZHIgKilza2ItPmRhdGE7Ci0JaXBoID0gaXBfaGRyKHNrYik7Ci0JaWhsID0gaXBfaGRybGVuKHNrYik7CiAKIAlpZiAoKGVyciA9IHNrYl9jb3dfZGF0YShza2IsIDAsICZ0cmFpbGVyKSkgPCAwKQogCQlnb3RvIG91dDsKIAluZnJhZ3MgPSBlcnI7CiAKKwlhaCA9IChzdHJ1Y3QgaXBfYXV0aF9oZHIgKilza2ItPmRhdGE7CisJaXBoID0gaXBfaGRyKHNrYik7CisJaWhsID0gaXBfaGRybGVuKHNrYik7CisKIAl3b3JrX2lwaCA9IGFoX2FsbG9jX3RtcChhaGFzaCwgbmZyYWdzLCBpaGwgKyBhaHAtPmljdl90cnVuY19sZW4pOwogCWlmICghd29ya19pcGgpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCBhMmZjN2I5Li4wNGM4YjY5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtMTE0Myw2ICsxMTQzLDIzIEBACiAJcmV0dXJuIGVycjsKIH0KIAoraW50IGFycF9pbnZhbGlkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiBpcCkKK3sKKwlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCA9IG5laWdoX2xvb2t1cCgmYXJwX3RibCwgJmlwLCBkZXYpOworCWludCBlcnIgPSAtRU5YSU87CisKKwlpZiAobmVpZ2gpIHsKKwkJaWYgKG5laWdoLT5udWRfc3RhdGUgJiB+TlVEX05PQVJQKQorCQkJZXJyID0gbmVpZ2hfdXBkYXRlKG5laWdoLCBOVUxMLCBOVURfRkFJTEVELAorCQkJCQkgICBORUlHSF9VUERBVEVfRl9PVkVSUklERXwKKwkJCQkJICAgTkVJR0hfVVBEQVRFX0ZfQURNSU4pOworCQluZWlnaF9yZWxlYXNlKG5laWdoKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChhcnBfaW52YWxpZGF0ZSk7CisKIHN0YXRpYyBpbnQgYXJwX3JlcV9kZWxldGVfcHVibGljKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHJlcSAqciwKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTExNjMsNyArMTE4MCw2IEBACiB7CiAJaW50IGVycjsKIAlfX2JlMzIgaXA7Ci0Jc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CiAKIAlpZiAoci0+YXJwX2ZsYWdzICYgQVRGX1BVQkwpCiAJCXJldHVybiBhcnBfcmVxX2RlbGV0ZV9wdWJsaWMobmV0LCByLCBkZXYpOwpAQCAtMTE4MSwxNiArMTE5Nyw3IEBACiAJCWlmICghZGV2KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWVyciA9IC1FTlhJTzsKLQluZWlnaCA9IG5laWdoX2xvb2t1cCgmYXJwX3RibCwgJmlwLCBkZXYpOwotCWlmIChuZWlnaCkgewotCQlpZiAobmVpZ2gtPm51ZF9zdGF0ZSAmIH5OVURfTk9BUlApCi0JCQllcnIgPSBuZWlnaF91cGRhdGUobmVpZ2gsIE5VTEwsIE5VRF9GQUlMRUQsCi0JCQkJCSAgIE5FSUdIX1VQREFURV9GX09WRVJSSURFfAotCQkJCQkgICBORUlHSF9VUERBVEVfRl9BRE1JTik7Ci0JCW5laWdoX3JlbGVhc2UobmVpZ2gpOwotCX0KLQlyZXR1cm4gZXJyOworCXJldHVybiBhcnBfaW52YWxpZGF0ZShkZXYsIGlwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCmluZGV4IDI1ZTMxODEuLjk3ZTVmYjcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwpAQCAtNzMsNyArNzMsNyBAQAogCQkgICAgICFzazItPnNrX2JvdW5kX2Rldl9pZiB8fAogCQkgICAgIHNrLT5za19ib3VuZF9kZXZfaWYgPT0gc2syLT5za19ib3VuZF9kZXZfaWYpKSB7CiAJCQlpZiAoIXJldXNlIHx8ICFzazItPnNrX3JldXNlIHx8Ci0JCQkgICAgc2syLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7CisJCQkgICAgKCgxIDw8IHNrMi0+c2tfc3RhdGUpICYgKFRDUEZfTElTVEVOIHwgVENQRl9DTE9TRSkpKSB7CiAJCQkJY29uc3QgX19iZTMyIHNrMl9yY3Zfc2FkZHIgPSBza19yY3Zfc2FkZHIoc2syKTsKIAkJCQlpZiAoIXNrMl9yY3Zfc2FkZHIgfHwgIXNrX3Jjdl9zYWRkcihzaykgfHwKIAkJCQkgICAgc2syX3Jjdl9zYWRkciA9PSBza19yY3Zfc2FkZHIoc2spKQpAQCAtMTIyLDcgKzEyMiw4IEBACiAJCQkJCSAgICAodGItPm51bV9vd25lcnMgPCBzbWFsbGVzdF9zaXplIHx8IHNtYWxsZXN0X3NpemUgPT0gLTEpKSB7CiAJCQkJCQlzbWFsbGVzdF9zaXplID0gdGItPm51bV9vd25lcnM7CiAJCQkJCQlzbWFsbGVzdF9yb3ZlciA9IHJvdmVyOwotCQkJCQkJaWYgKGF0b21pY19yZWFkKCZoYXNoaW5mby0+YnNvY2tldHMpID4gKGhpZ2ggLSBsb3cpICsgMSkgeworCQkJCQkJaWYgKGF0b21pY19yZWFkKCZoYXNoaW5mby0+YnNvY2tldHMpID4gKGhpZ2ggLSBsb3cpICsgMSAmJgorCQkJCQkJICAgICFpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5iaW5kX2NvbmZsaWN0KHNrLCB0YikpIHsKIAkJCQkJCQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7CiAJCQkJCQkJc251bSA9IHNtYWxsZXN0X3JvdmVyOwogCQkJCQkJCWdvdG8gaGF2ZV9zbnVtOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwppbmRleCAyYWRhMTcxLi4yNzQ2YzFmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuYworKysgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwpAQCAtODU4LDcgKzg1OCw3IEBACiAJICAgIG5sbXNnX2xlbihubGgpIDwgaGRybGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRFVNUCkgeworCWlmICgobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0RVTVApID09IE5MTV9GX0RVTVApIHsKIAkJaWYgKG5sbXNnX2F0dHJsZW4obmxoLCBoZHJsZW4pKSB7CiAJCQlzdHJ1Y3QgbmxhdHRyICphdHRyOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwppbmRleCAzZmFjMzQwLi5lODU1ZmZmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKQEAgLTcxMCw0MiArNzEwLDI1IEBACiAJc3RydWN0IGFycHRfZW50cnkgKml0ZXI7CiAJdW5zaWduZWQgaW50IGNwdTsKIAl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgY3VyY3B1ID0gZ2V0X2NwdSgpOwotCi0JLyogSW5zdGVhZCBvZiBjbGVhcmluZyAoYnkgYSBwcmV2aW91cyBjYWxsIHRvIG1lbXNldCgpKQotCSAqIHRoZSBjb3VudGVycyBhbmQgdXNpbmcgYWRkcywgd2Ugc2V0IHRoZSBjb3VudGVycwotCSAqIHdpdGggZGF0YSB1c2VkIGJ5ICdjdXJyZW50JyBDUFUKLQkgKgotCSAqIEJvdHRvbSBoYWxmIGhhcyB0byBiZSBkaXNhYmxlZCB0byBwcmV2ZW50IGRlYWRsb2NrCi0JICogaWYgbmV3IHNvZnRpcnEgd2VyZSB0byBydW4gYW5kIGNhbGwgaXB0X2RvX3RhYmxlCi0JICovCi0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCWkgPSAwOwotCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgdC0+ZW50cmllc1tjdXJjcHVdLCB0LT5zaXplKSB7Ci0JCVNFVF9DT1VOVEVSKGNvdW50ZXJzW2ldLCBpdGVyLT5jb3VudGVycy5iY250LAotCQkJICAgIGl0ZXItPmNvdW50ZXJzLnBjbnQpOwotCQkrK2k7Ci0JfQotCWxvY2FsX2JoX2VuYWJsZSgpOwotCS8qIFByb2Nlc3NpbmcgY291bnRlcnMgZnJvbSBvdGhlciBjcHVzLCB3ZSBjYW4gbGV0IGJvdHRvbSBoYWxmIGVuYWJsZWQsCi0JICogKHByZWVtcHRpb24gaXMgZGlzYWJsZWQpCi0JICovCiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCWlmIChjcHUgPT0gY3VyY3B1KQotCQkJY29udGludWU7CisJCXNlcWxvY2tfdCAqbG9jayA9ICZwZXJfY3B1KHh0X2luZm9fbG9ja3MsIGNwdSkubG9jazsKKwogCQlpID0gMDsKLQkJbG9jYWxfYmhfZGlzYWJsZSgpOwotCQl4dF9pbmZvX3dybG9jayhjcHUpOwogCQl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHQtPmVudHJpZXNbY3B1XSwgdC0+c2l6ZSkgewotCQkJQUREX0NPVU5URVIoY291bnRlcnNbaV0sIGl0ZXItPmNvdW50ZXJzLmJjbnQsCi0JCQkJICAgIGl0ZXItPmNvdW50ZXJzLnBjbnQpOworCQkJdTY0IGJjbnQsIHBjbnQ7CisJCQl1bnNpZ25lZCBpbnQgc3RhcnQ7CisKKwkJCWRvIHsKKwkJCQlzdGFydCA9IHJlYWRfc2VxYmVnaW4obG9jayk7CisJCQkJYmNudCA9IGl0ZXItPmNvdW50ZXJzLmJjbnQ7CisJCQkJcGNudCA9IGl0ZXItPmNvdW50ZXJzLnBjbnQ7CisJCQl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KGxvY2ssIHN0YXJ0KSk7CisKKwkJCUFERF9DT1VOVEVSKGNvdW50ZXJzW2ldLCBiY250LCBwY250KTsKIAkJCSsraTsKIAkJfQotCQl4dF9pbmZvX3dydW5sb2NrKGNwdSk7Ci0JCWxvY2FsX2JoX2VuYWJsZSgpOwogCX0KLQlwdXRfY3B1KCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCkBAIC03NTksNyArNzQyLDcgQEAKIAkgKiBhYm91dCkuCiAJICovCiAJY291bnRlcnNpemUgPSBzaXplb2Yoc3RydWN0IHh0X2NvdW50ZXJzKSAqIHByaXZhdGUtPm51bWJlcjsKLQljb3VudGVycyA9IHZtYWxsb2MoY291bnRlcnNpemUpOworCWNvdW50ZXJzID0gdnphbGxvYyhjb3VudGVyc2l6ZSk7CiAKIAlpZiAoY291bnRlcnMgPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CkBAIC0xMDA3LDcgKzk5MCw3IEBACiAJc3RydWN0IGFycHRfZW50cnkgKml0ZXI7CiAKIAlyZXQgPSAwOwotCWNvdW50ZXJzID0gdm1hbGxvYyhudW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IHh0X2NvdW50ZXJzKSk7CisJY291bnRlcnMgPSB2emFsbG9jKG51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpKTsKIAlpZiAoIWNvdW50ZXJzKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCmluZGV4IGE4NDZkNjMuLjY1MmVmZWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKQEAgLTg4NCw0MiArODg0LDI1IEBACiAJc3RydWN0IGlwdF9lbnRyeSAqaXRlcjsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBjdXJjcHUgPSBnZXRfY3B1KCk7Ci0KLQkvKiBJbnN0ZWFkIG9mIGNsZWFyaW5nIChieSBhIHByZXZpb3VzIGNhbGwgdG8gbWVtc2V0KCkpCi0JICogdGhlIGNvdW50ZXJzIGFuZCB1c2luZyBhZGRzLCB3ZSBzZXQgdGhlIGNvdW50ZXJzCi0JICogd2l0aCBkYXRhIHVzZWQgYnkgJ2N1cnJlbnQnIENQVS4KLQkgKgotCSAqIEJvdHRvbSBoYWxmIGhhcyB0byBiZSBkaXNhYmxlZCB0byBwcmV2ZW50IGRlYWRsb2NrCi0JICogaWYgbmV3IHNvZnRpcnEgd2VyZSB0byBydW4gYW5kIGNhbGwgaXB0X2RvX3RhYmxlCi0JICovCi0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCWkgPSAwOwotCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgdC0+ZW50cmllc1tjdXJjcHVdLCB0LT5zaXplKSB7Ci0JCVNFVF9DT1VOVEVSKGNvdW50ZXJzW2ldLCBpdGVyLT5jb3VudGVycy5iY250LAotCQkJICAgIGl0ZXItPmNvdW50ZXJzLnBjbnQpOwotCQkrK2k7Ci0JfQotCWxvY2FsX2JoX2VuYWJsZSgpOwotCS8qIFByb2Nlc3NpbmcgY291bnRlcnMgZnJvbSBvdGhlciBjcHVzLCB3ZSBjYW4gbGV0IGJvdHRvbSBoYWxmIGVuYWJsZWQsCi0JICogKHByZWVtcHRpb24gaXMgZGlzYWJsZWQpCi0JICovCiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCWlmIChjcHUgPT0gY3VyY3B1KQotCQkJY29udGludWU7CisJCXNlcWxvY2tfdCAqbG9jayA9ICZwZXJfY3B1KHh0X2luZm9fbG9ja3MsIGNwdSkubG9jazsKKwogCQlpID0gMDsKLQkJbG9jYWxfYmhfZGlzYWJsZSgpOwotCQl4dF9pbmZvX3dybG9jayhjcHUpOwogCQl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHQtPmVudHJpZXNbY3B1XSwgdC0+c2l6ZSkgewotCQkJQUREX0NPVU5URVIoY291bnRlcnNbaV0sIGl0ZXItPmNvdW50ZXJzLmJjbnQsCi0JCQkJICAgIGl0ZXItPmNvdW50ZXJzLnBjbnQpOworCQkJdTY0IGJjbnQsIHBjbnQ7CisJCQl1bnNpZ25lZCBpbnQgc3RhcnQ7CisKKwkJCWRvIHsKKwkJCQlzdGFydCA9IHJlYWRfc2VxYmVnaW4obG9jayk7CisJCQkJYmNudCA9IGl0ZXItPmNvdW50ZXJzLmJjbnQ7CisJCQkJcGNudCA9IGl0ZXItPmNvdW50ZXJzLnBjbnQ7CisJCQl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KGxvY2ssIHN0YXJ0KSk7CisKKwkJCUFERF9DT1VOVEVSKGNvdW50ZXJzW2ldLCBiY250LCBwY250KTsKIAkJCSsraTsgLyogbWFjcm8gZG9lcyBtdWx0aSBldmFsIG9mIGkgKi8KIAkJfQotCQl4dF9pbmZvX3dydW5sb2NrKGNwdSk7Ci0JCWxvY2FsX2JoX2VuYWJsZSgpOwogCX0KLQlwdXRfY3B1KCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCkBAIC05MzIsNyArOTE1LDcgQEAKIAkgICAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQogCSAgIGFib3V0KS4gKi8KIAljb3VudGVyc2l6ZSA9IHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpICogcHJpdmF0ZS0+bnVtYmVyOwotCWNvdW50ZXJzID0gdm1hbGxvYyhjb3VudGVyc2l6ZSk7CisJY291bnRlcnMgPSB2emFsbG9jKGNvdW50ZXJzaXplKTsKIAogCWlmIChjb3VudGVycyA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTEyMDMsNyArMTE4Niw3IEBACiAJc3RydWN0IGlwdF9lbnRyeSAqaXRlcjsKIAogCXJldCA9IDA7Ci0JY291bnRlcnMgPSB2bWFsbG9jKG51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpKTsKKwljb3VudGVycyA9IHZ6YWxsb2MobnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCB4dF9jb3VudGVycykpOwogCWlmICghY291bnRlcnMpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggZGM3YzA5Ni4uNDA2ZjMyMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtMTM1MCw3ICsxMzUwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogSW50aWFsaXplIFRTTyBzdGF0ZSBvZiBhIHNrYi4KKy8qIEluaXRpYWxpemUgVFNPIHN0YXRlIG9mIGEgc2tiLgogICogVGhpcyBtdXN0IGJlIGludm9rZWQgdGhlIGZpcnN0IHRpbWUgd2UgY29uc2lkZXIgdHJhbnNtaXR0aW5nCiAgKiBTS0Igb250byB0aGUgd2lyZS4KICAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggMDU5YTNkZS4uOTc4ZTgwZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC0zMDAsNyArMzAwLDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJLyogUmVwcm9kdWNlIEFGX0lORVQgY2hlY2tzIHRvIG1ha2UgdGhlIGJpbmRpbmdzIGNvbnNpdGFudCAqLworCQkvKiBSZXByb2R1Y2UgQUZfSU5FVCBjaGVja3MgdG8gbWFrZSB0aGUgYmluZGluZ3MgY29uc2lzdGVudCAqLwogCQl2NGFkZHIgPSBhZGRyLT5zaW42X2FkZHIuczZfYWRkcjMyWzNdOwogCQljaGtfYWRkcl9yZXQgPSBpbmV0X2FkZHJfdHlwZShuZXQsIHY0YWRkcik7CiAJCWlmICghc3lzY3RsX2lwX25vbmxvY2FsX2JpbmQgJiYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FoNi5jIGIvbmV0L2lwdjYvYWg2LmMKaW5kZXggZWU4MmQ0ZS4uMWFiYTU0YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWg2LmMKKysrIGIvbmV0L2lwdjYvYWg2LmMKQEAgLTUzOCwxNCArNTM4LDE2IEBACiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgYWhfaGxlbikpCiAJCWdvdG8gb3V0OwogCi0JaXA2aCA9IGlwdjZfaGRyKHNrYik7Ci0KLQlza2JfcHVzaChza2IsIGhkcl9sZW4pOwogCiAJaWYgKChlcnIgPSBza2JfY293X2RhdGEoc2tiLCAwLCAmdHJhaWxlcikpIDwgMCkKIAkJZ290byBvdXQ7CiAJbmZyYWdzID0gZXJyOwogCisJYWggPSAoc3RydWN0IGlwX2F1dGhfaGRyICopc2tiLT5kYXRhOworCWlwNmggPSBpcHY2X2hkcihza2IpOworCisJc2tiX3B1c2goc2tiLCBoZHJfbGVuKTsKKwogCXdvcmtfaXBoID0gYWhfYWxsb2NfdG1wKGFoYXNoLCBuZnJhZ3MsIGhkcl9sZW4gKyBhaHAtPmljdl90cnVuY19sZW4pOwogCWlmICghd29ya19pcGgpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYwppbmRleCBlNDYzMDVkLi5kMTQ0ZTYyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYwpAQCAtNDQsNyArNDQsNyBAQAogCQkgICAgICFzazItPnNrX2JvdW5kX2Rldl9pZiB8fAogCQkgICAgIHNrLT5za19ib3VuZF9kZXZfaWYgPT0gc2syLT5za19ib3VuZF9kZXZfaWYpICYmCiAJCSAgICAoIXNrLT5za19yZXVzZSB8fCAhc2syLT5za19yZXVzZSB8fAotCQkgICAgIHNrMi0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgJiYKKwkJICAgICAoKDEgPDwgc2syLT5za19zdGF0ZSkgJiAoVENQRl9MSVNURU4gfCBUQ1BGX0NMT1NFKSkpICYmCiAJCSAgICAgaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoc2ssIHNrMikpCiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwppbmRleCA0NTU1ODIzLi43ZDIyN2M2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKQEAgLTg5Nyw0MiArODk3LDI1IEBACiAJc3RydWN0IGlwNnRfZW50cnkgKml0ZXI7CiAJdW5zaWduZWQgaW50IGNwdTsKIAl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgY3VyY3B1ID0gZ2V0X2NwdSgpOwotCi0JLyogSW5zdGVhZCBvZiBjbGVhcmluZyAoYnkgYSBwcmV2aW91cyBjYWxsIHRvIG1lbXNldCgpKQotCSAqIHRoZSBjb3VudGVycyBhbmQgdXNpbmcgYWRkcywgd2Ugc2V0IHRoZSBjb3VudGVycwotCSAqIHdpdGggZGF0YSB1c2VkIGJ5ICdjdXJyZW50JyBDUFUKLQkgKgotCSAqIEJvdHRvbSBoYWxmIGhhcyB0byBiZSBkaXNhYmxlZCB0byBwcmV2ZW50IGRlYWRsb2NrCi0JICogaWYgbmV3IHNvZnRpcnEgd2VyZSB0byBydW4gYW5kIGNhbGwgaXB0X2RvX3RhYmxlCi0JICovCi0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCWkgPSAwOwotCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgdC0+ZW50cmllc1tjdXJjcHVdLCB0LT5zaXplKSB7Ci0JCVNFVF9DT1VOVEVSKGNvdW50ZXJzW2ldLCBpdGVyLT5jb3VudGVycy5iY250LAotCQkJICAgIGl0ZXItPmNvdW50ZXJzLnBjbnQpOwotCQkrK2k7Ci0JfQotCWxvY2FsX2JoX2VuYWJsZSgpOwotCS8qIFByb2Nlc3NpbmcgY291bnRlcnMgZnJvbSBvdGhlciBjcHVzLCB3ZSBjYW4gbGV0IGJvdHRvbSBoYWxmIGVuYWJsZWQsCi0JICogKHByZWVtcHRpb24gaXMgZGlzYWJsZWQpCi0JICovCiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCWlmIChjcHUgPT0gY3VyY3B1KQotCQkJY29udGludWU7CisJCXNlcWxvY2tfdCAqbG9jayA9ICZwZXJfY3B1KHh0X2luZm9fbG9ja3MsIGNwdSkubG9jazsKKwogCQlpID0gMDsKLQkJbG9jYWxfYmhfZGlzYWJsZSgpOwotCQl4dF9pbmZvX3dybG9jayhjcHUpOwogCQl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHQtPmVudHJpZXNbY3B1XSwgdC0+c2l6ZSkgewotCQkJQUREX0NPVU5URVIoY291bnRlcnNbaV0sIGl0ZXItPmNvdW50ZXJzLmJjbnQsCi0JCQkJICAgIGl0ZXItPmNvdW50ZXJzLnBjbnQpOworCQkJdTY0IGJjbnQsIHBjbnQ7CisJCQl1bnNpZ25lZCBpbnQgc3RhcnQ7CisKKwkJCWRvIHsKKwkJCQlzdGFydCA9IHJlYWRfc2VxYmVnaW4obG9jayk7CisJCQkJYmNudCA9IGl0ZXItPmNvdW50ZXJzLmJjbnQ7CisJCQkJcGNudCA9IGl0ZXItPmNvdW50ZXJzLnBjbnQ7CisJCQl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KGxvY2ssIHN0YXJ0KSk7CisKKwkJCUFERF9DT1VOVEVSKGNvdW50ZXJzW2ldLCBiY250LCBwY250KTsKIAkJCSsraTsKIAkJfQotCQl4dF9pbmZvX3dydW5sb2NrKGNwdSk7Ci0JCWxvY2FsX2JoX2VuYWJsZSgpOwogCX0KLQlwdXRfY3B1KCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCkBAIC05NDUsNyArOTI4LDcgQEAKIAkgICAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQogCSAgIGFib3V0KS4gKi8KIAljb3VudGVyc2l6ZSA9IHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpICogcHJpdmF0ZS0+bnVtYmVyOwotCWNvdW50ZXJzID0gdm1hbGxvYyhjb3VudGVyc2l6ZSk7CisJY291bnRlcnMgPSB2emFsbG9jKGNvdW50ZXJzaXplKTsKIAogCWlmIChjb3VudGVycyA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTEyMTYsNyArMTE5OSw3IEBACiAJc3RydWN0IGlwNnRfZW50cnkgKml0ZXI7CiAKIAlyZXQgPSAwOwotCWNvdW50ZXJzID0gdm1hbGxvYyhudW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IHh0X2NvdW50ZXJzKSk7CisJY291bnRlcnMgPSB2emFsbG9jKG51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpKTsKIAlpZiAoIWNvdW50ZXJzKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDBjZGJhNTAuLjVjYjhkMzAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTY0NSwyNSArNjQ1LDIzIEBACiAJc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItPm5saCk7CiAJdV9pbnQ4X3QgbDNwcm90byA9IG5mbXNnLT5uZmdlbl9mYW1pbHk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CisJc3Bpbl9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiAJbGFzdCA9IChzdHJ1Y3QgbmZfY29ubiAqKWNiLT5hcmdzWzFdOwogCWZvciAoOyBjYi0+YXJnc1swXSA8IG5ldC0+Y3QuaHRhYmxlX3NpemU7IGNiLT5hcmdzWzBdKyspIHsKIHJlc3RhcnQ6Ci0JCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmbmV0LT5jdC5oYXNoW2NiLT5hcmdzWzBdXSwKKwkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkoaCwgbiwgJm5ldC0+Y3QuaGFzaFtjYi0+YXJnc1swXV0sCiAJCQkJCSBobm5vZGUpIHsKIAkJCWlmIChORl9DVF9ESVJFQ1RJT04oaCkgIT0gSVBfQ1RfRElSX09SSUdJTkFMKQogCQkJCWNvbnRpbnVlOwogCQkJY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwotCQkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZjdC0+Y3RfZ2VuZXJhbC51c2UpKQotCQkJCWNvbnRpbnVlOwogCQkJLyogRHVtcCBlbnRyaWVzIG9mIGEgZ2l2ZW4gTDMgcHJvdG9jb2wgbnVtYmVyLgogCQkJICogSWYgaXQgaXMgbm90IHNwZWNpZmllZCwgaWUuIGwzcHJvdG8gPT0gMCwKIAkJCSAqIHRoZW4gZHVtcCBldmVyeXRoaW5nLiAqLwogCQkJaWYgKGwzcHJvdG8gJiYgbmZfY3RfbDNudW0oY3QpICE9IGwzcHJvdG8pCi0JCQkJZ290byByZWxlYXNlY3Q7CisJCQkJY29udGludWU7CiAJCQlpZiAoY2ItPmFyZ3NbMV0pIHsKIAkJCQlpZiAoY3QgIT0gbGFzdCkKLQkJCQkJZ290byByZWxlYXNlY3Q7CisJCQkJCWNvbnRpbnVlOwogCQkJCWNiLT5hcmdzWzFdID0gMDsKIAkJCX0KIAkJCWlmIChjdG5ldGxpbmtfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCkBAIC02ODEsOCArNjc5LDYgQEAKIAkJCQlpZiAoYWNjdCkKIAkJCQkJbWVtc2V0KGFjY3QsIDAsIHNpemVvZihzdHJ1Y3QgbmZfY29ubl9jb3VudGVyW0lQX0NUX0RJUl9NQVhdKSk7CiAJCQl9Ci1yZWxlYXNlY3Q6Ci0JCW5mX2N0X3B1dChjdCk7CiAJCX0KIAkJaWYgKGNiLT5hcmdzWzFdKSB7CiAJCQljYi0+YXJnc1sxXSA9IDA7CkBAIC02OTAsNyArNjg2LDcgQEAKIAkJfQogCX0KIG91dDoKLQlyY3VfcmVhZF91bmxvY2soKTsKKwlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwogCWlmIChsYXN0KQogCQluZl9jdF9wdXQobGFzdCk7CiAKQEAgLTkyOCw3ICs5MjQsNyBAQAogCXUxNiB6b25lOwogCWludCBlcnI7CiAKLQlpZiAobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0RVTVApCisJaWYgKChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRFVNUCkgPT0gTkxNX0ZfRFVNUCkKIAkJcmV0dXJuIG5ldGxpbmtfZHVtcF9zdGFydChjdG5sLCBza2IsIG5saCwgY3RuZXRsaW5rX2R1bXBfdGFibGUsCiAJCQkJCSAgY3RuZXRsaW5rX2RvbmUpOwogCkBAIC0xNzkwLDcgKzE3ODYsNyBAQAogCXUxNiB6b25lOwogCWludCBlcnI7CiAKLQlpZiAobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0RVTVApIHsKKwlpZiAoKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9EVU1QKSA9PSBOTE1fRl9EVU1QKSB7CiAJCXJldHVybiBuZXRsaW5rX2R1bXBfc3RhcnQoY3RubCwgc2tiLCBubGgsCiAJCQkJCSAgY3RuZXRsaW5rX2V4cF9kdW1wX3RhYmxlLAogCQkJCQkgIGN0bmV0bGlua19leHBfZG9uZSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKaW5kZXggODA0NjM1MC4uYzk0MjM3NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwpAQCAtMTMyNSw3ICsxMzI1LDggQEAKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCB4dF9pbmZvX2xvY2sgKmxvY2sgPSAmcGVyX2NwdSh4dF9pbmZvX2xvY2tzLCBpKTsKLQkJc3Bpbl9sb2NrX2luaXQoJmxvY2stPmxvY2spOworCisJCXNlcWxvY2tfaW5pdCgmbG9jay0+bG9jayk7CiAJCWxvY2stPnJlYWRlcnMgPSAwOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwppbmRleCAxNzgxZDk5Li5mODNjYjM3IDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwpAQCAtNTE5LDcgKzUxOSw3IEBACiAJICAgIHNlY3VyaXR5X25ldGxpbmtfcmVjdihza2IsIENBUF9ORVRfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JaWYgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9EVU1QKSB7CisJaWYgKChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRFVNUCkgPT0gTkxNX0ZfRFVNUCkgewogCQlpZiAob3BzLT5kdW1waXQgPT0gTlVMTCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIApkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9hZl9waG9uZXQuYyBiL25ldC9waG9uZXQvYWZfcGhvbmV0LmMKaW5kZXggZmQ5NWJlYi4uMTA3MmIyYyAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9hZl9waG9uZXQuYworKysgYi9uZXQvcGhvbmV0L2FmX3Bob25ldC5jCkBAIC0zNyw3ICszNyw3IEBACiAvKiBUcmFuc3BvcnQgcHJvdG9jb2wgcmVnaXN0cmF0aW9uICovCiBzdGF0aWMgc3RydWN0IHBob25ldF9wcm90b2NvbCAqcHJvdG9fdGFiW1BIT05FVF9OUFJPVE9dIF9fcmVhZF9tb3N0bHk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGhvbmV0X3Byb3RvY29sICpwaG9uZXRfcHJvdG9fZ2V0KGludCBwcm90b2NvbCkKK3N0YXRpYyBzdHJ1Y3QgcGhvbmV0X3Byb3RvY29sICpwaG9uZXRfcHJvdG9fZ2V0KHVuc2lnbmVkIGludCBwcm90b2NvbCkKIHsKIAlzdHJ1Y3QgcGhvbmV0X3Byb3RvY29sICpwcDsKIApAQCAtNDU4LDcgKzQ1OCw3IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgocHJvdG9fdGFiX2xvY2spOwogCi1pbnQgX19pbml0X29yX21vZHVsZSBwaG9uZXRfcHJvdG9fcmVnaXN0ZXIoaW50IHByb3RvY29sLAoraW50IF9faW5pdF9vcl9tb2R1bGUgcGhvbmV0X3Byb3RvX3JlZ2lzdGVyKHVuc2lnbmVkIGludCBwcm90b2NvbCwKIAkJCQkJCXN0cnVjdCBwaG9uZXRfcHJvdG9jb2wgKnBwKQogewogCWludCBlcnIgPSAwOwpAQCAtNDgxLDcgKzQ4MSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHBob25ldF9wcm90b19yZWdpc3Rlcik7CiAKLXZvaWQgcGhvbmV0X3Byb3RvX3VucmVnaXN0ZXIoaW50IHByb3RvY29sLCBzdHJ1Y3QgcGhvbmV0X3Byb3RvY29sICpwcCkKK3ZvaWQgcGhvbmV0X3Byb3RvX3VucmVnaXN0ZXIodW5zaWduZWQgaW50IHByb3RvY29sLCBzdHJ1Y3QgcGhvbmV0X3Byb3RvY29sICpwcCkKIHsKIAltdXRleF9sb2NrKCZwcm90b190YWJfbG9jayk7CiAJQlVHX09OKHByb3RvX3RhYltwcm90b2NvbF0gIT0gcHApOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL0tjb25maWcgYi9uZXQvc2NoZWQvS2NvbmZpZwppbmRleCBhMzYyNzBhLi5mMDRkNGE0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvS2NvbmZpZworKysgYi9uZXQvc2NoZWQvS2NvbmZpZwpAQCAtMjQsNyArMjQsNyBAQAogCSAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UnbGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXMKIAkgIGZyb20gdGhlIHBhY2thZ2UgaXByb3V0ZTIrdGMgYXQgPGZ0cDovL2Z0cC50dXgub3JnL3B1Yi9uZXQvaXAtcm91dGluZy8+LgogCSAgVGhhdCBwYWNrYWdlIGFsc28gY29udGFpbnMgc29tZSBkb2N1bWVudGF0aW9uOyBmb3IgbW9yZSwgY2hlY2sgb3V0Ci0JICA8aHR0cDovL2xpbnV4LW5ldC5vc2RsLm9yZy9pbmRleC5waHAvSXByb3V0ZTI+LgorCSAgPGh0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTI+LgogCiAJICBUaGlzIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBzdXBwb3J0IHdpbGwgZW5hYmxlIHlvdSB0byB1c2UKIAkgIERpZmZlcmVudGlhdGVkIFNlcnZpY2VzIChkaWZmc2VydikgYW5kIFJlc291cmNlIFJlc2VydmF0aW9uIFByb3RvY29sCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2NzdW0uYyBiL25ldC9zY2hlZC9hY3RfY3N1bS5jCmluZGV4IDY3ZGM3Y2UuLjgzZGRmYzAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfY3N1bS5jCisrKyBiL25ldC9zY2hlZC9hY3RfY3N1bS5jCkBAIC01MDgsOCArNTA4LDcgQEAKIAogCXNwaW5fbG9jaygmcC0+dGNmX2xvY2spOwogCXAtPnRjZl90bS5sYXN0dXNlID0gamlmZmllczsKLQlwLT50Y2ZfYnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKLQlwLT50Y2ZfYnN0YXRzLnBhY2tldHMrKzsKKwlic3RhdHNfdXBkYXRlKCZwLT50Y2ZfYnN0YXRzLCBza2IpOwogCWFjdGlvbiA9IHAtPnRjZl9hY3Rpb247CiAJdXBkYXRlX2ZsYWdzID0gcC0+dXBkYXRlX2ZsYWdzOwogCXNwaW5fdW5sb2NrKCZwLT50Y2ZfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2lwdC5jIGIvbmV0L3NjaGVkL2FjdF9pcHQuYwppbmRleCA4ZGFlZjk2Li5jMmE3YzIwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2lwdC5jCisrKyBiL25ldC9zY2hlZC9hY3RfaXB0LmMKQEAgLTIwOSw4ICsyMDksNyBAQAogCXNwaW5fbG9jaygmaXB0LT50Y2ZfbG9jayk7CiAKIAlpcHQtPnRjZl90bS5sYXN0dXNlID0gamlmZmllczsKLQlpcHQtPnRjZl9ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCWlwdC0+dGNmX2JzdGF0cy5wYWNrZXRzKys7CisJYnN0YXRzX3VwZGF0ZSgmaXB0LT50Y2ZfYnN0YXRzLCBza2IpOwogCiAJLyogeWVzLCB3ZSBoYXZlIHRvIHdvcnJ5IGFib3V0IGJvdGggaW4gYW5kIG91dCBkZXYKIAkgd29ycnkgbGF0ZXIgLSBkYW5nZXIgLSB0aGlzIEFQSSBzZWVtcyB0byBoYXZlIGNoYW5nZWQKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfbWlycmVkLmMgYi9uZXQvc2NoZWQvYWN0X21pcnJlZC5jCmluZGV4IDBjMzExYmUuLmQ3NjUwNjcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfbWlycmVkLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9taXJyZWQuYwpAQCAtMTY1LDggKzE2NSw3IEBACiAKIAlzcGluX2xvY2soJm0tPnRjZl9sb2NrKTsKIAltLT50Y2ZfdG0ubGFzdHVzZSA9IGppZmZpZXM7Ci0JbS0+dGNmX2JzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7Ci0JbS0+dGNmX2JzdGF0cy5wYWNrZXRzKys7CisJYnN0YXRzX3VwZGF0ZSgmbS0+dGNmX2JzdGF0cywgc2tiKTsKIAogCWRldiA9IG0tPnRjZm1fZGV2OwogCWlmICghZGV2KSB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X25hdC5jIGIvbmV0L3NjaGVkL2FjdF9uYXQuYwppbmRleCAxODZlYjgzLi4xNzhhNGJkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X25hdC5jCisrKyBiL25ldC9zY2hlZC9hY3RfbmF0LmMKQEAgLTEyNSw4ICsxMjUsNyBAQAogCWVncmVzcyA9IHAtPmZsYWdzICYgVENBX05BVF9GTEFHX0VHUkVTUzsKIAlhY3Rpb24gPSBwLT50Y2ZfYWN0aW9uOwogCi0JcC0+dGNmX2JzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7Ci0JcC0+dGNmX2JzdGF0cy5wYWNrZXRzKys7CisJYnN0YXRzX3VwZGF0ZSgmcC0+dGNmX2JzdGF0cywgc2tiKTsKIAogCXNwaW5fdW5sb2NrKCZwLT50Y2ZfbG9jayk7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfcGVkaXQuYyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuYwppbmRleCBhMDU5M2M5Li40NDViZWY3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKKysrIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCkBAIC0xODcsOCArMTg3LDcgQEAKIGJhZDoKIAlwLT50Y2ZfcXN0YXRzLm92ZXJsaW1pdHMrKzsKIGRvbmU6Ci0JcC0+dGNmX2JzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7Ci0JcC0+dGNmX2JzdGF0cy5wYWNrZXRzKys7CisJYnN0YXRzX3VwZGF0ZSgmcC0+dGNmX2JzdGF0cywgc2tiKTsKIAlzcGluX3VubG9jaygmcC0+dGNmX2xvY2spOwogCXJldHVybiBwLT50Y2ZfYWN0aW9uOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKaW5kZXggN2ViZjc0My4uZTJmMDhiMSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYworKysgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCkBAIC0yOTgsOCArMjk4LDcgQEAKIAogCXNwaW5fbG9jaygmcG9saWNlLT50Y2ZfbG9jayk7CiAKLQlwb2xpY2UtPnRjZl9ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCXBvbGljZS0+dGNmX2JzdGF0cy5wYWNrZXRzKys7CisJYnN0YXRzX3VwZGF0ZSgmcG9saWNlLT50Y2ZfYnN0YXRzLCBza2IpOwogCiAJaWYgKHBvbGljZS0+dGNmcF9ld21hX3JhdGUgJiYKIAkgICAgcG9saWNlLT50Y2ZfcmF0ZV9lc3QuYnBzID49IHBvbGljZS0+dGNmcF9ld21hX3JhdGUpIHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3Rfc2ltcGxlLmMgYi9uZXQvc2NoZWQvYWN0X3NpbXBsZS5jCmluZGV4IDk3ZTg0ZjMuLjcyODdjZmYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3Rfc2ltcGxlLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9zaW1wbGUuYwpAQCAtNDIsOCArNDIsNyBAQAogCiAJc3Bpbl9sb2NrKCZkLT50Y2ZfbG9jayk7CiAJZC0+dGNmX3RtLmxhc3R1c2UgPSBqaWZmaWVzOwotCWQtPnRjZl9ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCWQtPnRjZl9ic3RhdHMucGFja2V0cysrOworCWJzdGF0c191cGRhdGUoJmQtPnRjZl9ic3RhdHMsIHNrYik7CiAKIAkvKiBwcmludCBwb2xpY3kgc3RyaW5nIGZvbGxvd2VkIGJ5IF8gdGhlbiBwYWNrZXQgY291bnQKIAkgKiBFeGFtcGxlIGlmIHRoaXMgd2FzIHRoZSAzcmQgcGFja2V0IGFuZCB0aGUgc3RyaW5nIHdhcyAiaGVsbG8iCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYyBiL25ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jCmluZGV4IDY2Y2JmNGUuLjgzNmY1ZmUgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jCisrKyBiL25ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jCkBAIC00Niw4ICs0Niw3IEBACiAKIAlzcGluX2xvY2soJmQtPnRjZl9sb2NrKTsKIAlkLT50Y2ZfdG0ubGFzdHVzZSA9IGppZmZpZXM7Ci0JZC0+dGNmX2JzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7Ci0JZC0+dGNmX2JzdGF0cy5wYWNrZXRzKys7CisJYnN0YXRzX3VwZGF0ZSgmZC0+dGNmX2JzdGF0cywgc2tiKTsKIAogCWlmIChkLT5mbGFncyAmIFNLQkVESVRfRl9QUklPUklUWSkKIAkJc2tiLT5wcmlvcml0eSA9IGQtPnByaW9yaXR5OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hdG0uYyBiL25ldC9zY2hlZC9zY2hfYXRtLmMKaW5kZXggMjgyNTQwNy4uOTQzZDczMyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9hdG0uYworKysgYi9uZXQvc2NoZWQvc2NoX2F0bS5jCkBAIC00MjIsMTAgKzQyMiw4IEBACiAJCX0KIAkJcmV0dXJuIHJldDsKIAl9Ci0Jc2NoLT5ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKLQlmbG93LT5ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCWZsb3ctPmJzdGF0cy5wYWNrZXRzKys7CisJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CisJYnN0YXRzX3VwZGF0ZSgmZmxvdy0+YnN0YXRzLCBza2IpOwogCS8qCiAJICogT2theSwgdGhpcyBtYXkgc2VlbSB3ZWlyZC4gV2UgcHJldGVuZCB3ZSd2ZSBkcm9wcGVkIHRoZSBwYWNrZXQgaWYKIAkgKiBpdCBnb2VzIHZpYSBBVE0uIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGUgb3V0ZXIgcWRpc2MKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfY2JxLmMgYi9uZXQvc2NoZWQvc2NoX2NicS5jCmluZGV4IGViNzYzMTUuLmM4MGQxYzIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfY2JxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9jYnEuYwpAQCAtMzkwLDggKzM5MCw3IEBACiAJcmV0ID0gcWRpc2NfZW5xdWV1ZShza2IsIGNsLT5xKTsKIAlpZiAocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpIHsKIAkJc2NoLT5xLnFsZW4rKzsKLQkJc2NoLT5ic3RhdHMucGFja2V0cysrOwotCQlzY2gtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7CisJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQljYnFfbWFya190b3BsZXZlbChxLCBjbCk7CiAJCWlmICghY2wtPm5leHRfYWxpdmUpCiAJCQljYnFfYWN0aXZhdGVfY2xhc3MoY2wpOwpAQCAtNjUwLDggKzY0OSw3IEBACiAJCXJldCA9IHFkaXNjX2VucXVldWUoc2tiLCBjbC0+cSk7CiAJCWlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykgewogCQkJc2NoLT5xLnFsZW4rKzsKLQkJCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKLQkJCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKKwkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJaWYgKCFjbC0+bmV4dF9hbGl2ZSkKIAkJCQljYnFfYWN0aXZhdGVfY2xhc3MoY2wpOwogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2Ryci5jIGIvbmV0L3NjaGVkL3NjaF9kcnIuYwppbmRleCBhYThiNTMxLi5kZTU1ZTY0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2Ryci5jCisrKyBiL25ldC9zY2hlZC9zY2hfZHJyLmMKQEAgLTM1MSw3ICszNTEsNiBAQAogewogCXN0cnVjdCBkcnJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAJc3RydWN0IGRycl9jbGFzcyAqY2w7Ci0JdW5zaWduZWQgaW50IGxlbjsKIAlpbnQgZXJyOwogCiAJY2wgPSBkcnJfY2xhc3NpZnkoc2tiLCBzY2gsICZlcnIpOwpAQCAtMzYyLDcgKzM2MSw2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JbGVuID0gcWRpc2NfcGt0X2xlbihza2IpOwogCWVyciA9IHFkaXNjX2VucXVldWUoc2tiLCBjbC0+cWRpc2MpOwogCWlmICh1bmxpa2VseShlcnIgIT0gTkVUX1hNSVRfU1VDQ0VTUykpIHsKIAkJaWYgKG5ldF94bWl0X2Ryb3BfY291bnQoZXJyKSkgewpAQCAtMzc3LDEwICszNzUsOCBAQAogCQljbC0+ZGVmaWNpdCA9IGNsLT5xdWFudHVtOwogCX0KIAotCWNsLT5ic3RhdHMucGFja2V0cysrOwotCWNsLT5ic3RhdHMuYnl0ZXMgKz0gbGVuOwotCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKLQlzY2gtPmJzdGF0cy5ieXRlcyArPSBsZW47CisJYnN0YXRzX3VwZGF0ZSgmY2wtPmJzdGF0cywgc2tiKTsKKwlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAogCXNjaC0+cS5xbGVuKys7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMgYi9uZXQvc2NoZWQvc2NoX2RzbWFyay5jCmluZGV4IDFkMjk1ZDYuLjYwZjRiZGQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9kc21hcmsuYwpAQCAtMjYwLDggKzI2MCw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0Jc2NoLT5ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKKwlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzY2gtPnEucWxlbisrOwogCiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCmluZGV4IDA2OWM2MmIuLjJlNDU3OTEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCkBAIC0xNTk5LDEwICsxNTk5LDggQEAKIAlpZiAoY2wtPnFkaXNjLT5xLnFsZW4gPT0gMSkKIAkJc2V0X2FjdGl2ZShjbCwgcWRpc2NfcGt0X2xlbihza2IpKTsKIAotCWNsLT5ic3RhdHMucGFja2V0cysrOwotCWNsLT5ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKLQlzY2gtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7CisJYnN0YXRzX3VwZGF0ZSgmY2wtPmJzdGF0cywgc2tiKTsKKwlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzY2gtPnEucWxlbisrOwogCiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuYwppbmRleCAwMWI1MTlkLi45ODRjMWIwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jCisrKyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKQEAgLTU2OSwxNSArNTY5LDEyIEBACiAJCX0KIAkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewotCQljbC0+YnN0YXRzLnBhY2tldHMgKz0KLQkJCXNrYl9pc19nc28oc2tiKT9za2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzOjE7Ci0JCWNsLT5ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOworCQlic3RhdHNfdXBkYXRlKCZjbC0+YnN0YXRzLCBza2IpOwogCQlodGJfYWN0aXZhdGUocSwgY2wpOwogCX0KIAogCXNjaC0+cS5xbGVuKys7Ci0Jc2NoLT5ic3RhdHMucGFja2V0cyArPSBza2JfaXNfZ3NvKHNrYik/c2tiX3NoaW5mbyhza2IpLT5nc29fc2VnczoxOwotCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKKwlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIH0KIApAQCAtNjQ4LDEyICs2NDUsMTAgQEAKIAkJCQlodGJfYWRkX3RvX3dhaXRfdHJlZShxLCBjbCwgZGlmZik7CiAJCX0KIAotCQkvKiB1cGRhdGUgYnl0ZSBzdGF0cyBleGNlcHQgZm9yIGxlYXZlcyB3aGljaCBhcmUgYWxyZWFkeSB1cGRhdGVkICovCi0JCWlmIChjbC0+bGV2ZWwpIHsKLQkJCWNsLT5ic3RhdHMuYnl0ZXMgKz0gYnl0ZXM7Ci0JCQljbC0+YnN0YXRzLnBhY2tldHMgKz0gc2tiX2lzX2dzbyhza2IpPwotCQkJCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzOjE7Ci0JCX0KKwkJLyogdXBkYXRlIGJhc2ljIHN0YXRzIGV4Y2VwdCBmb3IgbGVhdmVzIHdoaWNoIGFyZSBhbHJlYWR5IHVwZGF0ZWQgKi8KKwkJaWYgKGNsLT5sZXZlbCkKKwkJCWJzdGF0c191cGRhdGUoJmNsLT5ic3RhdHMsIHNrYik7CisKIAkJY2wgPSBjbC0+cGFyZW50OwogCX0KIH0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaW5ncmVzcy5jIGIvbmV0L3NjaGVkL3NjaF9pbmdyZXNzLmMKaW5kZXggZjEwZTM0YS4uYmNlMTY2NSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9pbmdyZXNzLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9pbmdyZXNzLmMKQEAgLTYzLDggKzYzLDcgQEAKIAogCXJlc3VsdCA9IHRjX2NsYXNzaWZ5KHNrYiwgcC0+ZmlsdGVyX2xpc3QsICZyZXMpOwogCi0Jc2NoLT5ic3RhdHMucGFja2V0cysrOwotCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKKwlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzd2l0Y2ggKHJlc3VsdCkgewogCWNhc2UgVENfQUNUX1NIT1Q6CiAJCXJlc3VsdCA9IFRDX0FDVF9TSE9UOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKaW5kZXggMzI2OTBkZS4uMjFmMTNkYSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYworKysgYi9uZXQvc2NoZWQvc2NoX211bHRpcS5jCkBAIC04Myw4ICs4Myw3IEBACiAKIAlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgcWRpc2MpOwogCWlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykgewotCQlzY2gtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7Ci0JCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKKwkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCXNjaC0+cS5xbGVuKys7CiAJCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogCX0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfbmV0ZW0uYyBiL25ldC9zY2hlZC9zY2hfbmV0ZW0uYwppbmRleCBlNTU5M2MwLi4xYzRiY2U4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX25ldGVtLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCkBAIC0yNDAsOCArMjQwLDcgQEAKIAogCWlmIChsaWtlbHkocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpKSB7CiAJCXNjaC0+cS5xbGVuKys7Ci0JCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKLQkJc2NoLT5ic3RhdHMucGFja2V0cysrOworCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAl9IGVsc2UgaWYgKG5ldF94bWl0X2Ryb3BfY291bnQocmV0KSkgewogCQlzY2gtPnFzdGF0cy5kcm9wcysrOwogCX0KQEAgLTQ3Nyw4ICs0NzYsNyBAQAogCQlfX3NrYl9xdWV1ZV9hZnRlcihsaXN0LCBza2IsIG5za2IpOwogCiAJCXNjaC0+cXN0YXRzLmJhY2tsb2cgKz0gcWRpc2NfcGt0X2xlbihuc2tiKTsKLQkJc2NoLT5ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihuc2tiKTsKLQkJc2NoLT5ic3RhdHMucGFja2V0cysrOworCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgbnNrYik7CiAKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9wcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3ByaW8uYwppbmRleCBiMWM5NWJjLi45NjYxNThkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3ByaW8uYworKysgYi9uZXQvc2NoZWQvc2NoX3ByaW8uYwpAQCAtODQsOCArODQsNyBAQAogCiAJcmV0ID0gcWRpc2NfZW5xdWV1ZShza2IsIHFkaXNjKTsKIAlpZiAocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpIHsKLQkJc2NoLT5ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCQlzY2gtPmJzdGF0cy5wYWNrZXRzKys7CisJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQlzY2gtPnEucWxlbisrOwogCQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIAl9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3JlZC5jIGIvbmV0L3NjaGVkL3NjaF9yZWQuYwppbmRleCBhNjdiYTNjLi5hNjAwOWM1IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3JlZC5jCisrKyBiL25ldC9zY2hlZC9zY2hfcmVkLmMKQEAgLTk0LDggKzk0LDcgQEAKIAogCXJldCA9IHFkaXNjX2VucXVldWUoc2tiLCBjaGlsZCk7CiAJaWYgKGxpa2VseShyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykpIHsKLQkJc2NoLT5ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCQlzY2gtPmJzdGF0cy5wYWNrZXRzKys7CisJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQlzY2gtPnEucWxlbisrOwogCX0gZWxzZSBpZiAobmV0X3htaXRfZHJvcF9jb3VudChyZXQpKSB7CiAJCXEtPnN0YXRzLnBkcm9wKys7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmcS5jIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwppbmRleCBkNTRhYzk0Li4yMzllYzUzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jCisrKyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKQEAgLTQwMyw4ICs0MDMsNyBAQAogCQlzbG90LT5hbGxvdCA9IHEtPnNjYWxlZF9xdWFudHVtOwogCX0KIAlpZiAoKytzY2gtPnEucWxlbiA8PSBxLT5saW1pdCkgewotCQlzY2gtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7Ci0JCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKKwkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YmYuYyBiL25ldC9zY2hlZC9zY2hfdGJmLmMKaW5kZXggNjQxYTMwZC4uNzc1NjVlNyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90YmYuYworKysgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCkBAIC0xMzQsOCArMTM0LDcgQEAKIAl9CiAKIAlzY2gtPnEucWxlbisrOwotCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKLQlzY2gtPmJzdGF0cy5wYWNrZXRzKys7CisJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGVxbC5jIGIvbmV0L3NjaGVkL3NjaF90ZXFsLmMKaW5kZXggMTA2NDc5YS4uYWY5MzYwZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90ZXFsLmMKKysrIGIvbmV0L3NjaGVkL3NjaF90ZXFsLmMKQEAgLTgzLDggKzgzLDcgQEAKIAogCWlmIChxLT5xLnFsZW4gPCBkZXYtPnR4X3F1ZXVlX2xlbikgewogCQlfX3NrYl9xdWV1ZV90YWlsKCZxLT5xLCBza2IpOwotCQlzY2gtPmJzdGF0cy5ieXRlcyArPSBxZGlzY19wa3RfbGVuKHNrYik7Ci0JCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKKwkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IGNjYzU3NmEuLmFjMjIxOWYgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTMwNiwyMCArMzA2LDYgQEAKIAkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqc29ja2ZzX21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAotCQkJIGludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuIG1vdW50X3BzZXVkbyhmc190eXBlLCAic29ja2V0OiIsICZzb2NrZnNfb3BzLCBTT0NLRlNfTUFHSUMpOwotfQotCi1zdGF0aWMgc3RydWN0IHZmc21vdW50ICpzb2NrX21udCBfX3JlYWRfbW9zdGx5OwotCi1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgc29ja19mc190eXBlID0gewotCS5uYW1lID0JCSJzb2NrZnMiLAotCS5tb3VudCA9CXNvY2tmc19tb3VudCwKLQkua2lsbF9zYiA9CWtpbGxfYW5vbl9zdXBlciwKLX07Ci0KIC8qCiAgKiBzb2NrZnNfZG5hbWUoKSBpcyBjYWxsZWQgZnJvbSBkX3BhdGgoKS4KICAqLwpAQCAtMzMzLDYgKzMxOSwyMSBAQAogCS5kX2RuYW1lICA9IHNvY2tmc19kbmFtZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzb2NrZnNfbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCisJCQkgaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gbW91bnRfcHNldWRvKGZzX3R5cGUsICJzb2NrZXQ6IiwgJnNvY2tmc19vcHMsCisJCSZzb2NrZnNfZGVudHJ5X29wZXJhdGlvbnMsIFNPQ0tGU19NQUdJQyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNvY2tfbW50IF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBzb2NrX2ZzX3R5cGUgPSB7CisJLm5hbWUgPQkJInNvY2tmcyIsCisJLm1vdW50ID0Jc29ja2ZzX21vdW50LAorCS5raWxsX3NiID0Ja2lsbF9hbm9uX3N1cGVyLAorfTsKKwogLyoKICAqCU9idGFpbnMgdGhlIGZpcnN0IGF2YWlsYWJsZSBmaWxlIGRlc2NyaXB0b3IgYW5kIHNldHMgaXQgdXAgZm9yIHVzZS4KICAqCkBAIC0zNjgsNyArMzY5LDYgQEAKIAl9CiAJcGF0aC5tbnQgPSBtbnRnZXQoc29ja19tbnQpOwogCi0JZF9zZXRfZF9vcChwYXRoLmRlbnRyeSwgJnNvY2tmc19kZW50cnlfb3BlcmF0aW9ucyk7CiAJZF9pbnN0YW50aWF0ZShwYXRoLmRlbnRyeSwgU09DS19JTk9ERShzb2NrKSk7CiAJU09DS19JTk9ERShzb2NrKS0+aV9mb3AgPSAmc29ja2V0X2ZpbGVfb3BzOwogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGguYyBiL25ldC9zdW5ycGMvYXV0aC5jCmluZGV4IGFmZTY3ODQuLjY3ZTMxMjcgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aC5jCkBAIC01NjMsOCArNTYzLDE3IEBACiAJcmV0dXJuIGNyZWQtPmNyX29wcy0+Y3J2YWxpZGF0ZSh0YXNrLCBwKTsKIH0KIAorc3RhdGljIHZvaWQgcnBjYXV0aF93cmFwX3JlcV9lbmNvZGUoa3hkcmVwcm9jX3QgZW5jb2RlLCBzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLAorCQkJCSAgIF9fYmUzMiAqZGF0YSwgdm9pZCAqb2JqKQoreworCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKKworCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcnFzdHAtPnJxX3NuZF9idWYsIGRhdGEpOworCWVuY29kZShycXN0cCwgJnhkciwgb2JqKTsKK30KKwogaW50Ci1ycGNhdXRoX3dyYXBfcmVxKHN0cnVjdCBycGNfdGFzayAqdGFzaywga3hkcnByb2NfdCBlbmNvZGUsIHZvaWQgKnJxc3RwLAorcnBjYXV0aF93cmFwX3JlcShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIGt4ZHJlcHJvY190IGVuY29kZSwgdm9pZCAqcnFzdHAsCiAJCV9fYmUzMiAqZGF0YSwgdm9pZCAqb2JqKQogewogCXN0cnVjdCBycGNfY3JlZCAqY3JlZCA9IHRhc2stPnRrX3Jxc3RwLT5ycV9jcmVkOwpAQCAtNTc0LDExICs1ODMsMjIgQEAKIAlpZiAoY3JlZC0+Y3Jfb3BzLT5jcndyYXBfcmVxKQogCQlyZXR1cm4gY3JlZC0+Y3Jfb3BzLT5jcndyYXBfcmVxKHRhc2ssIGVuY29kZSwgcnFzdHAsIGRhdGEsIG9iaik7CiAJLyogQnkgZGVmYXVsdCwgd2UgZW5jb2RlIHRoZSBhcmd1bWVudHMgbm9ybWFsbHkuICovCi0JcmV0dXJuIGVuY29kZShycXN0cCwgZGF0YSwgb2JqKTsKKwlycGNhdXRoX3dyYXBfcmVxX2VuY29kZShlbmNvZGUsIHJxc3RwLCBkYXRhLCBvYmopOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitycGNhdXRoX3Vud3JhcF9yZXFfZGVjb2RlKGt4ZHJkcHJvY190IGRlY29kZSwgc3RydWN0IHJwY19ycXN0ICpycXN0cCwKKwkJCSAgX19iZTMyICpkYXRhLCB2b2lkICpvYmopCit7CisJc3RydWN0IHhkcl9zdHJlYW0geGRyOworCisJeGRyX2luaXRfZGVjb2RlKCZ4ZHIsICZycXN0cC0+cnFfcmN2X2J1ZiwgZGF0YSk7CisJcmV0dXJuIGRlY29kZShycXN0cCwgJnhkciwgb2JqKTsKIH0KIAogaW50Ci1ycGNhdXRoX3Vud3JhcF9yZXNwKHN0cnVjdCBycGNfdGFzayAqdGFzaywga3hkcnByb2NfdCBkZWNvZGUsIHZvaWQgKnJxc3RwLAorcnBjYXV0aF91bndyYXBfcmVzcChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIGt4ZHJkcHJvY190IGRlY29kZSwgdm9pZCAqcnFzdHAsCiAJCV9fYmUzMiAqZGF0YSwgdm9pZCAqb2JqKQogewogCXN0cnVjdCBycGNfY3JlZCAqY3JlZCA9IHRhc2stPnRrX3Jxc3RwLT5ycV9jcmVkOwpAQCAtNTg5LDcgKzYwOSw3IEBACiAJCXJldHVybiBjcmVkLT5jcl9vcHMtPmNydW53cmFwX3Jlc3AodGFzaywgZGVjb2RlLCBycXN0cCwKIAkJCQkJCSAgIGRhdGEsIG9iaik7CiAJLyogQnkgZGVmYXVsdCwgd2UgZGVjb2RlIHRoZSBhcmd1bWVudHMgbm9ybWFsbHkuICovCi0JcmV0dXJuIGRlY29kZShycXN0cCwgZGF0YSwgb2JqKTsKKwlyZXR1cm4gcnBjYXV0aF91bndyYXBfcmVxX2RlY29kZShkZWNvZGUsIHJxc3RwLCBkYXRhLCBvYmopOwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwppbmRleCAzODM1Y2UzLi40NWRiZjE1IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCkBAIC0xMjMxLDkgKzEyMzEsMTkgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgZ3NzX3dyYXBfcmVxX2VuY29kZShreGRyZXByb2NfdCBlbmNvZGUsIHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsCisJCQkJX19iZTMyICpwLCB2b2lkICpvYmopCit7CisJc3RydWN0IHhkcl9zdHJlYW0geGRyOworCisJeGRyX2luaXRfZW5jb2RlKCZ4ZHIsICZycXN0cC0+cnFfc25kX2J1ZiwgcCk7CisJZW5jb2RlKHJxc3RwLCAmeGRyLCBvYmopOworfQorCiBzdGF0aWMgaW5saW5lIGludAogZ3NzX3dyYXBfcmVxX2ludGVnKHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgc3RydWN0IGdzc19jbF9jdHggKmN0eCwKLQkJa3hkcnByb2NfdCBlbmNvZGUsIHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwgdm9pZCAqb2JqKQorCQkgICBreGRyZXByb2NfdCBlbmNvZGUsIHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsCisJCSAgIF9fYmUzMiAqcCwgdm9pZCAqb2JqKQogewogCXN0cnVjdCB4ZHJfYnVmCSpzbmRfYnVmID0gJnJxc3RwLT5ycV9zbmRfYnVmOwogCXN0cnVjdCB4ZHJfYnVmCWludGVnX2J1ZjsKQEAgLTEyNDksOSArMTI1OSw3IEBACiAJb2Zmc2V0ID0gKHU4ICopcCAtICh1OCAqKXNuZF9idWYtPmhlYWRbMF0uaW92X2Jhc2U7CiAJKnArKyA9IGh0b25sKHJxc3RwLT5ycV9zZXFubyk7CiAKLQlzdGF0dXMgPSBlbmNvZGUocnFzdHAsIHAsIG9iaik7Ci0JaWYgKHN0YXR1cykKLQkJcmV0dXJuIHN0YXR1czsKKwlnc3Nfd3JhcF9yZXFfZW5jb2RlKGVuY29kZSwgcnFzdHAsIHAsIG9iaik7CiAKIAlpZiAoeGRyX2J1Zl9zdWJzZWdtZW50KHNuZF9idWYsICZpbnRlZ19idWYsCiAJCQkJb2Zmc2V0LCBzbmRfYnVmLT5sZW4gLSBvZmZzZXQpKQpAQCAtMTMyNSw3ICsxMzMzLDggQEAKIAogc3RhdGljIGlubGluZSBpbnQKIGdzc193cmFwX3JlcV9wcml2KHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgc3RydWN0IGdzc19jbF9jdHggKmN0eCwKLQkJa3hkcnByb2NfdCBlbmNvZGUsIHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwgdm9pZCAqb2JqKQorCQkgIGt4ZHJlcHJvY190IGVuY29kZSwgc3RydWN0IHJwY19ycXN0ICpycXN0cCwKKwkJICBfX2JlMzIgKnAsIHZvaWQgKm9iaikKIHsKIAlzdHJ1Y3QgeGRyX2J1Zgkqc25kX2J1ZiA9ICZycXN0cC0+cnFfc25kX2J1ZjsKIAl1MzIJCW9mZnNldDsKQEAgLTEzNDIsOSArMTM1MSw3IEBACiAJb2Zmc2V0ID0gKHU4ICopcCAtICh1OCAqKXNuZF9idWYtPmhlYWRbMF0uaW92X2Jhc2U7CiAJKnArKyA9IGh0b25sKHJxc3RwLT5ycV9zZXFubyk7CiAKLQlzdGF0dXMgPSBlbmNvZGUocnFzdHAsIHAsIG9iaik7Ci0JaWYgKHN0YXR1cykKLQkJcmV0dXJuIHN0YXR1czsKKwlnc3Nfd3JhcF9yZXFfZW5jb2RlKGVuY29kZSwgcnFzdHAsIHAsIG9iaik7CiAKIAlzdGF0dXMgPSBhbGxvY19lbmNfcGFnZXMocnFzdHApOwogCWlmIChzdGF0dXMpCkBAIC0xMzk0LDcgKzE0MDEsNyBAQAogCiBzdGF0aWMgaW50CiBnc3Nfd3JhcF9yZXEoc3RydWN0IHJwY190YXNrICp0YXNrLAotCSAgICAga3hkcnByb2NfdCBlbmNvZGUsIHZvaWQgKnJxc3RwLCBfX2JlMzIgKnAsIHZvaWQgKm9iaikKKwkgICAgIGt4ZHJlcHJvY190IGVuY29kZSwgdm9pZCAqcnFzdHAsIF9fYmUzMiAqcCwgdm9pZCAqb2JqKQogewogCXN0cnVjdCBycGNfY3JlZCAqY3JlZCA9IHRhc2stPnRrX3Jxc3RwLT5ycV9jcmVkOwogCXN0cnVjdCBnc3NfY3JlZAkqZ3NzX2NyZWQgPSBjb250YWluZXJfb2YoY3JlZCwgc3RydWN0IGdzc19jcmVkLApAQCAtMTQwNywxMiArMTQxNCwxNCBAQAogCQkvKiBUaGUgc3BlYyBzZWVtcyBhIGxpdHRsZSBhbWJpZ3VvdXMgaGVyZSwgYnV0IEkgdGhpbmsgdGhhdCBub3QKIAkJICogd3JhcHBpbmcgY29udGV4dCBkZXN0cnVjdGlvbiByZXF1ZXN0cyBtYWtlcyB0aGUgbW9zdCBzZW5zZS4KIAkJICovCi0JCXN0YXR1cyA9IGVuY29kZShycXN0cCwgcCwgb2JqKTsKKwkJZ3NzX3dyYXBfcmVxX2VuY29kZShlbmNvZGUsIHJxc3RwLCBwLCBvYmopOworCQlzdGF0dXMgPSAwOwogCQlnb3RvIG91dDsKIAl9CiAJc3dpdGNoIChnc3NfY3JlZC0+Z2Nfc2VydmljZSkgewogCQljYXNlIFJQQ19HU1NfU1ZDX05PTkU6Ci0JCQlzdGF0dXMgPSBlbmNvZGUocnFzdHAsIHAsIG9iaik7CisJCQlnc3Nfd3JhcF9yZXFfZW5jb2RlKGVuY29kZSwgcnFzdHAsIHAsIG9iaik7CisJCQlzdGF0dXMgPSAwOwogCQkJYnJlYWs7CiAJCWNhc2UgUlBDX0dTU19TVkNfSU5URUdSSVRZOgogCQkJc3RhdHVzID0gZ3NzX3dyYXBfcmVxX2ludGVnKGNyZWQsIGN0eCwgZW5jb2RlLApAQCAtMTQ5NCwxMCArMTUwMywxOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50Citnc3NfdW53cmFwX3JlcV9kZWNvZGUoa3hkcmRwcm9jX3QgZGVjb2RlLCBzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLAorCQkgICAgICBfX2JlMzIgKnAsIHZvaWQgKm9iaikKK3sKKwlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CisKKwl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKKwlyZXR1cm4gZGVjb2RlKHJxc3RwLCAmeGRyLCBvYmopOworfQogCiBzdGF0aWMgaW50CiBnc3NfdW53cmFwX3Jlc3Aoc3RydWN0IHJwY190YXNrICp0YXNrLAotCQlreGRycHJvY190IGRlY29kZSwgdm9pZCAqcnFzdHAsIF9fYmUzMiAqcCwgdm9pZCAqb2JqKQorCQlreGRyZHByb2NfdCBkZWNvZGUsIHZvaWQgKnJxc3RwLCBfX2JlMzIgKnAsIHZvaWQgKm9iaikKIHsKIAlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQgPSB0YXNrLT50a19ycXN0cC0+cnFfY3JlZDsKIAlzdHJ1Y3QgZ3NzX2NyZWQgKmdzc19jcmVkID0gY29udGFpbmVyX29mKGNyZWQsIHN0cnVjdCBnc3NfY3JlZCwKQEAgLTE1MjgsNyArMTU0Niw3IEBACiAJY3JlZC0+Y3JfYXV0aC0+YXVfcnNsYWNrID0gY3JlZC0+Y3JfYXV0aC0+YXVfdmVyZnNpemUgKyAocCAtIHNhdmVkcCkKIAkJCQkJCSsgKHNhdmVkbGVuIC0gaGVhZC0+aW92X2xlbik7CiBvdXRfZGVjb2RlOgotCXN0YXR1cyA9IGRlY29kZShycXN0cCwgcCwgb2JqKTsKKwlzdGF0dXMgPSBnc3NfdW53cmFwX3JlcV9kZWNvZGUoZGVjb2RlLCBycXN0cCwgcCwgb2JqKTsKIG91dDoKIAlnc3NfcHV0X2N0eChjdHgpOwogCWRwcmludGsoIlJQQzogJTV1IGdzc191bndyYXBfcmVzcCByZXR1cm5pbmcgJWRcbiIsIHRhc2stPnRrX3BpZCwKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYmNfc3ZjLmMgYi9uZXQvc3VucnBjL2JjX3N2Yy5jCmluZGV4IDdkY2ZlMGMuLjFkZDFhNjggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYmNfc3ZjLmMKKysrIGIvbmV0L3N1bnJwYy9iY19zdmMuYwpAQCAtNTksOCArNTksOCBAQAogCQlyZXQgPSB0YXNrLT50a19zdGF0dXM7CiAJCXJwY19wdXRfdGFzayh0YXNrKTsKIAl9Ci0JcmV0dXJuIHJldDsKIAlkcHJpbnRrKCJSUEM6ICAgICAgIGJjX3NlbmQgcmV0PSAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2NsbnQuYyBiL25ldC9zdW5ycGMvY2xudC5jCmluZGV4IDkyY2U5NGYuLjU3ZDM0NGMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvY2xudC5jCisrKyBiL25ldC9zdW5ycGMvY2xudC5jCkBAIC0xMDk1LDcgKzEwOTUsNyBAQAogcnBjX3hkcl9lbmNvZGUoc3RydWN0IHJwY190YXNrICp0YXNrKQogewogCXN0cnVjdCBycGNfcnFzdAkqcmVxID0gdGFzay0+dGtfcnFzdHA7Ci0Ja3hkcnByb2NfdAllbmNvZGU7CisJa3hkcmVwcm9jX3QJZW5jb2RlOwogCV9fYmUzMgkJKnA7CiAKIAlkcHJpbnRfc3RhdHVzKHRhc2spOwpAQCAtMTUzNSw3ICsxNTM1LDcgQEAKIHsKIAlzdHJ1Y3QgcnBjX2NsbnQJKmNsbnQgPSB0YXNrLT50a19jbGllbnQ7CiAJc3RydWN0IHJwY19ycXN0CSpyZXEgPSB0YXNrLT50a19ycXN0cDsKLQlreGRycHJvY190CWRlY29kZSA9IHRhc2stPnRrX21zZy5ycGNfcHJvYy0+cF9kZWNvZGU7CisJa3hkcmRwcm9jX3QJZGVjb2RlID0gdGFzay0+dGtfbXNnLnJwY19wcm9jLT5wX2RlY29kZTsKIAlfX2JlMzIJCSpwOwogCiAJZHByaW50aygiUlBDOiAlNXUgY2FsbF9kZWNvZGUgKHN0YXR1cyAlZClcbiIsCkBAIC0xNzc2LDEyICsxNzc2LDExIEBACiAJZ290byBvdXRfZ2FyYmFnZTsKIH0KIAotc3RhdGljIGludCBycGNwcm9jX2VuY29kZV9udWxsKHZvaWQgKnJxc3RwLCBfX2JlMzIgKmRhdGEsIHZvaWQgKm9iaikKK3N0YXRpYyB2b2lkIHJwY3Byb2NfZW5jb2RlX251bGwodm9pZCAqcnFzdHAsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHZvaWQgKm9iaikKIHsKLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBycGNwcm9jX2RlY29kZV9udWxsKHZvaWQgKnJxc3RwLCBfX2JlMzIgKmRhdGEsIHZvaWQgKm9iaikKK3N0YXRpYyBpbnQgcnBjcHJvY19kZWNvZGVfbnVsbCh2b2lkICpycXN0cCwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdm9pZCAqb2JqKQogewogCXJldHVybiAwOwogfQpAQCAtMTgzMCwyMyArMTgyOSwxNSBAQAogCQkJICBjb25zdCBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7CiAJY29uc3QgY2hhciAqcnBjX3dhaXRxID0gIm5vbmUiOwotCWNoYXIgKnAsIGFjdGlvbltLU1lNX1NZTUJPTF9MRU5dOwogCiAJaWYgKFJQQ19JU19RVUVVRUQodGFzaykpCiAJCXJwY193YWl0cSA9IHJwY19xbmFtZSh0YXNrLT50a193YWl0cXVldWUpOwogCi0JLyogbWFwIHRrX2FjdGlvbiBwb2ludGVyIHRvIGEgZnVuY3Rpb24gbmFtZTsgdGhlbiB0cmltIG9mZgotCSAqIHRoZSAiKzB4MCBbc3VucnBjXSIgKi8KLQlzcHJpbnRfc3ltYm9sKGFjdGlvbiwgKHVuc2lnbmVkIGxvbmcpdGFzay0+dGtfYWN0aW9uKTsKLQlwID0gc3RyY2hyKGFjdGlvbiwgJysnKTsKLQlpZiAocCkKLQkJKnAgPSAnXDAnOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJTV1ICUwNHggJTZkICU4cCAlOHAgJThsZCAlOHAgJXN2JXUgJXMgYTolcyBxOiVzXG4iLAorCXByaW50ayhLRVJOX0lORk8gIiU1dSAlMDR4ICU2ZCAlOHAgJThwICU4bGQgJThwICVzdiV1ICVzIGE6JXBzIHE6JXNcbiIsCiAJCXRhc2stPnRrX3BpZCwgdGFzay0+dGtfZmxhZ3MsIHRhc2stPnRrX3N0YXR1cywKIAkJY2xudCwgdGFzay0+dGtfcnFzdHAsIHRhc2stPnRrX3RpbWVvdXQsIHRhc2stPnRrX29wcywKIAkJY2xudC0+Y2xfcHJvdG5hbWUsIGNsbnQtPmNsX3ZlcnMsIHJwY19wcm9jX25hbWUodGFzayksCi0JCWFjdGlvbiwgcnBjX3dhaXRxKTsKKwkJdGFzay0+dGtfYWN0aW9uLCBycGNfd2FpdHEpOwogfQogCiB2b2lkIHJwY19zaG93X3Rhc2tzKHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3JwY19waXBlLmMgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKaW5kZXggMDlmMDFmNC4uNzJiYzUzNiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCisrKyBiL25ldC9zdW5ycGMvcnBjX3BpcGUuYwpAQCAtNDc0LDcgKzQ3NCw3IEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAotCUJVR19PTighZF91bmhhc2hlZChkZW50cnkpKTsKKwlkX2Ryb3AoZGVudHJ5KTsKIAlpbm9kZSA9IHJwY19nZXRfaW5vZGUoZGlyLT5pX3NiLCBtb2RlKTsKIAlpZiAoIWlub2RlKQogCQlnb3RvIG91dF9lcnI7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3JwY2JfY2xudC5jIGIvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYwppbmRleCBmYTZkN2NhLi5jNjUyZTRjIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3JwY2JfY2xudC5jCisrKyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKQEAgLTU3LDEwICs1Nyw2IEBACiAJUlBDQlBST0NfR0VUU1RBVCwKIH07CiAKLSNkZWZpbmUgUlBDQl9ISUdIUFJPQ18yCQlSUENCUFJPQ19DQUxMSVQKLSNkZWZpbmUgUlBDQl9ISUdIUFJPQ18zCQlSUENCUFJPQ19UQUREUjJVQUREUgotI2RlZmluZSBSUENCX0hJR0hQUk9DXzQJCVJQQ0JQUk9DX0dFVFNUQVQKLQogLyoKICAqIHJfb3duZXIKICAqCkBAIC02OTMsNDYgKzY4OSwzNyBAQAogICogWERSIGZ1bmN0aW9ucyBmb3IgcnBjYmluZAogICovCiAKLXN0YXRpYyBpbnQgcnBjYl9lbmNfbWFwcGluZyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAotCQkJICAgIGNvbnN0IHN0cnVjdCBycGNiaW5kX2FyZ3MgKnJwY2IpCitzdGF0aWMgdm9pZCBycGNiX2VuY19tYXBwaW5nKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgcnBjYmluZF9hcmdzICpycGNiKQogewogCXN0cnVjdCBycGNfdGFzayAqdGFzayA9IHJlcS0+cnFfdGFzazsKLQlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CisJX19iZTMyICpwOwogCiAJZHByaW50aygiUlBDOiAlNXUgZW5jb2RpbmcgUE1BUF8lcyBjYWxsICgldSwgJXUsICVkLCAldSlcbiIsCiAJCQl0YXNrLT50a19waWQsIHRhc2stPnRrX21zZy5ycGNfcHJvYy0+cF9uYW1lLAogCQkJcnBjYi0+cl9wcm9nLCBycGNiLT5yX3ZlcnMsIHJwY2ItPnJfcHJvdCwgcnBjYi0+cl9wb3J0KTsKIAotCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKLQotCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSgmeGRyLCBzaXplb2YoX19iZTMyKSAqIFJQQ0JfbWFwcGluZ2FyZ3Nfc3opOwotCWlmICh1bmxpa2VseShwID09IE5VTEwpKQotCQlyZXR1cm4gLUVJTzsKLQotCSpwKysgPSBodG9ubChycGNiLT5yX3Byb2cpOwotCSpwKysgPSBodG9ubChycGNiLT5yX3ZlcnMpOwotCSpwKysgPSBodG9ubChycGNiLT5yX3Byb3QpOwotCSpwICAgPSBodG9ubChycGNiLT5yX3BvcnQpOwotCi0JcmV0dXJuIDA7CisJcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgUlBDQl9tYXBwaW5nYXJnc19zeiA8PCAyKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIocnBjYi0+cl9wcm9nKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIocnBjYi0+cl92ZXJzKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIocnBjYi0+cl9wcm90KTsKKwkqcCAgID0gY3B1X3RvX2JlMzIocnBjYi0+cl9wb3J0KTsKIH0KIAotc3RhdGljIGludCBycGNiX2RlY19nZXRwb3J0KHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsCitzdGF0aWMgaW50IHJwY2JfZGVjX2dldHBvcnQoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCiAJCQkgICAgc3RydWN0IHJwY2JpbmRfYXJncyAqcnBjYikKIHsKIAlzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2sgPSByZXEtPnJxX3Rhc2s7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXVuc2lnbmVkIGxvbmcgcG9ydDsKLQotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcmVxLT5ycV9yY3ZfYnVmLCBwKTsKKwlfX2JlMzIgKnA7CiAKIAlycGNiLT5yX3BvcnQgPSAwOwogCi0JcCA9IHhkcl9pbmxpbmVfZGVjb2RlKCZ4ZHIsIHNpemVvZihfX2JlMzIpKTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKIAlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlwb3J0ID0gbnRvaGwoKnApOworCXBvcnQgPSBiZTMyX3RvX2NwdXAocCk7CiAJZHByaW50aygiUlBDOiAlNXUgUE1BUF8lcyByZXN1bHQ6ICVsdVxuIiwgdGFzay0+dGtfcGlkLAogCQkJdGFzay0+dGtfbXNnLnJwY19wcm9jLT5wX25hbWUsIHBvcnQpOwogCWlmICh1bmxpa2VseShwb3J0ID4gVVNIUlRfTUFYKSkKQEAgLTc0MiwyMCArNzI5LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnBjYl9kZWNfc2V0KHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsCitzdGF0aWMgaW50IHJwY2JfZGVjX3NldChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKIAkJCXVuc2lnbmVkIGludCAqYm9vbHApCiB7CiAJc3RydWN0IHJwY190YXNrICp0YXNrID0gcmVxLT5ycV90YXNrOwotCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKKwlfX2JlMzIgKnA7CiAKLQl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJlcS0+cnFfcmN2X2J1ZiwgcCk7Ci0KLQlwID0geGRyX2lubGluZV9kZWNvZGUoJnhkciwgc2l6ZW9mKF9fYmUzMikpOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOwogCWlmICh1bmxpa2VseShwID09IE5VTEwpKQogCQlyZXR1cm4gLUVJTzsKIAogCSpib29scCA9IDA7Ci0JaWYgKCpwKQorCWlmICgqcCAhPSB4ZHJfemVybykKIAkJKmJvb2xwID0gMTsKIAogCWRwcmludGsoIlJQQzogJTV1IFJQQ0JfJXMgY2FsbCAlc1xuIiwKQEAgLTc2NCw3MyArNzQ5LDUzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZW5jb2RlX3JwY2Jfc3RyaW5nKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IGNoYXIgKnN0cmluZywKLQkJCQljb25zdCB1MzIgbWF4c3RybGVuKQorc3RhdGljIHZvaWQgZW5jb2RlX3JwY2Jfc3RyaW5nKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJCSAgICAgICBjb25zdCB1MzIgbWF4c3RybGVuKQogewotCXUzMiBsZW47CiAJX19iZTMyICpwOworCXUzMiBsZW47CiAKLQlpZiAodW5saWtlbHkoc3RyaW5nID09IE5VTEwpKQotCQlyZXR1cm4gLUVJTzsKIAlsZW4gPSBzdHJsZW4oc3RyaW5nKTsKLQlpZiAodW5saWtlbHkobGVuID4gbWF4c3RybGVuKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCBzaXplb2YoX19iZTMyKSArIGxlbik7Ci0JaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCi0JCXJldHVybiAtRUlPOworCUJVR19PTihsZW4gPiBtYXhzdHJsZW4pOworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyBsZW4pOwogCXhkcl9lbmNvZGVfb3BhcXVlKHAsIHN0cmluZywgbGVuKTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJwY2JfZW5jX2dldGFkZHIoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgcnBjYmluZF9hcmdzICpycGNiKQorc3RhdGljIHZvaWQgcnBjYl9lbmNfZ2V0YWRkcihzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHJwY2JpbmRfYXJncyAqcnBjYikKIHsKIAlzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2sgPSByZXEtPnJxX3Rhc2s7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOworCV9fYmUzMiAqcDsKIAogCWRwcmludGsoIlJQQzogJTV1IGVuY29kaW5nIFJQQ0JfJXMgY2FsbCAoJXUsICV1LCAnJXMnLCAnJXMnKVxuIiwKIAkJCXRhc2stPnRrX3BpZCwgdGFzay0+dGtfbXNnLnJwY19wcm9jLT5wX25hbWUsCiAJCQlycGNiLT5yX3Byb2csIHJwY2ItPnJfdmVycywKIAkJCXJwY2ItPnJfbmV0aWQsIHJwY2ItPnJfYWRkcik7CiAKLQl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7CisJcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgKFJQQ0JfcHJvZ3JhbV9zeiArIFJQQ0JfdmVyc2lvbl9zeikgPDwgMik7CisJKnArKyA9IGNwdV90b19iZTMyKHJwY2ItPnJfcHJvZyk7CisJKnAgPSBjcHVfdG9fYmUzMihycGNiLT5yX3ZlcnMpOwogCi0JcCA9IHhkcl9yZXNlcnZlX3NwYWNlKCZ4ZHIsCi0JCQlzaXplb2YoX19iZTMyKSAqIChSUENCX3Byb2dyYW1fc3ogKyBSUENCX3ZlcnNpb25fc3opKTsKLQlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FSU87Ci0JKnArKyA9IGh0b25sKHJwY2ItPnJfcHJvZyk7Ci0JKnAgPSBodG9ubChycGNiLT5yX3ZlcnMpOwotCi0JaWYgKGVuY29kZV9ycGNiX3N0cmluZygmeGRyLCBycGNiLT5yX25ldGlkLCBSUENCSU5EX01BWE5FVElETEVOKSkKLQkJcmV0dXJuIC1FSU87Ci0JaWYgKGVuY29kZV9ycGNiX3N0cmluZygmeGRyLCBycGNiLT5yX2FkZHIsIFJQQ0JJTkRfTUFYVUFERFJMRU4pKQotCQlyZXR1cm4gLUVJTzsKLQlpZiAoZW5jb2RlX3JwY2Jfc3RyaW5nKCZ4ZHIsIHJwY2ItPnJfb3duZXIsIFJQQ0JfTUFYT1dORVJMRU4pKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiAwOworCWVuY29kZV9ycGNiX3N0cmluZyh4ZHIsIHJwY2ItPnJfbmV0aWQsIFJQQ0JJTkRfTUFYTkVUSURMRU4pOworCWVuY29kZV9ycGNiX3N0cmluZyh4ZHIsIHJwY2ItPnJfYWRkciwgUlBDQklORF9NQVhVQUREUkxFTik7CisJZW5jb2RlX3JwY2Jfc3RyaW5nKHhkciwgcnBjYi0+cl9vd25lciwgUlBDQl9NQVhPV05FUkxFTik7CiB9CiAKLXN0YXRpYyBpbnQgcnBjYl9kZWNfZ2V0YWRkcihzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAorc3RhdGljIGludCBycGNiX2RlY19nZXRhZGRyKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAogCQkJICAgIHN0cnVjdCBycGNiaW5kX2FyZ3MgKnJwY2IpCiB7CiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcmVzczsKIAlzdHJ1Y3Qgc29ja2FkZHIgKnNhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcmVzczsKIAlzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2sgPSByZXEtPnJxX3Rhc2s7Ci0Jc3RydWN0IHhkcl9zdHJlYW0geGRyOworCV9fYmUzMiAqcDsKIAl1MzIgbGVuOwogCiAJcnBjYi0+cl9wb3J0ID0gMDsKIAotCXhkcl9pbml0X2RlY29kZSgmeGRyLCAmcmVxLT5ycV9yY3ZfYnVmLCBwKTsKLQotCXAgPSB4ZHJfaW5saW5lX2RlY29kZSgmeGRyLCBzaXplb2YoX19iZTMyKSk7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CiAJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCiAJCWdvdG8gb3V0X2ZhaWw7Ci0JbGVuID0gbnRvaGwoKnApOworCWxlbiA9IGJlMzJfdG9fY3B1cChwKTsKIAogCS8qCiAJICogSWYgdGhlIHJldHVybmVkIHVuaXZlcnNhbCBhZGRyZXNzIGlzIGEgbnVsbCBzdHJpbmcsCkBAIC04NDUsNyArODEwLDcgQEAKIAlpZiAodW5saWtlbHkobGVuID4gUlBDQklORF9NQVhVQUREUkxFTikpCiAJCWdvdG8gb3V0X2ZhaWw7CiAKLQlwID0geGRyX2lubGluZV9kZWNvZGUoJnhkciwgbGVuKTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBsZW4pOwogCWlmICh1bmxpa2VseShwID09IE5VTEwpKQogCQlnb3RvIG91dF9mYWlsOwogCWRwcmludGsoIlJQQzogJTV1IFJQQ0JfJXMgcmVwbHk6ICVzXG4iLCB0YXNrLT50a19waWQsCkBAIC04NzEsOCArODM2LDggQEAKIHN0YXRpYyBzdHJ1Y3QgcnBjX3Byb2NpbmZvIHJwY2JfcHJvY2VkdXJlczJbXSA9IHsKIAlbUlBDQlBST0NfU0VUXSA9IHsKIAkJLnBfcHJvYwkJPSBSUENCUFJPQ19TRVQsCi0JCS5wX2VuY29kZQk9IChreGRycHJvY190KXJwY2JfZW5jX21hcHBpbmcsCi0JCS5wX2RlY29kZQk9IChreGRycHJvY190KXJwY2JfZGVjX3NldCwKKwkJLnBfZW5jb2RlCT0gKGt4ZHJlcHJvY190KXJwY2JfZW5jX21hcHBpbmcsCisJCS5wX2RlY29kZQk9IChreGRyZHByb2NfdClycGNiX2RlY19zZXQsCiAJCS5wX2FyZ2xlbgk9IFJQQ0JfbWFwcGluZ2FyZ3Nfc3osCiAJCS5wX3JlcGxlbgk9IFJQQ0Jfc2V0cmVzX3N6LAogCQkucF9zdGF0aWR4CT0gUlBDQlBST0NfU0VULApAQCAtODgxLDggKzg0Niw4IEBACiAJfSwKIAlbUlBDQlBST0NfVU5TRVRdID0gewogCQkucF9wcm9jCQk9IFJQQ0JQUk9DX1VOU0VULAotCQkucF9lbmNvZGUJPSAoa3hkcnByb2NfdClycGNiX2VuY19tYXBwaW5nLAotCQkucF9kZWNvZGUJPSAoa3hkcnByb2NfdClycGNiX2RlY19zZXQsCisJCS5wX2VuY29kZQk9IChreGRyZXByb2NfdClycGNiX2VuY19tYXBwaW5nLAorCQkucF9kZWNvZGUJPSAoa3hkcmRwcm9jX3QpcnBjYl9kZWNfc2V0LAogCQkucF9hcmdsZW4JPSBSUENCX21hcHBpbmdhcmdzX3N6LAogCQkucF9yZXBsZW4JPSBSUENCX3NldHJlc19zeiwKIAkJLnBfc3RhdGlkeAk9IFJQQ0JQUk9DX1VOU0VULApAQCAtODkxLDggKzg1Niw4IEBACiAJfSwKIAlbUlBDQlBST0NfR0VUUE9SVF0gPSB7CiAJCS5wX3Byb2MJCT0gUlBDQlBST0NfR0VUUE9SVCwKLQkJLnBfZW5jb2RlCT0gKGt4ZHJwcm9jX3QpcnBjYl9lbmNfbWFwcGluZywKLQkJLnBfZGVjb2RlCT0gKGt4ZHJwcm9jX3QpcnBjYl9kZWNfZ2V0cG9ydCwKKwkJLnBfZW5jb2RlCT0gKGt4ZHJlcHJvY190KXJwY2JfZW5jX21hcHBpbmcsCisJCS5wX2RlY29kZQk9IChreGRyZHByb2NfdClycGNiX2RlY19nZXRwb3J0LAogCQkucF9hcmdsZW4JPSBSUENCX21hcHBpbmdhcmdzX3N6LAogCQkucF9yZXBsZW4JPSBSUENCX2dldHBvcnRyZXNfc3osCiAJCS5wX3N0YXRpZHgJPSBSUENCUFJPQ19HRVRQT1JULApAQCAtOTA0LDggKzg2OSw4IEBACiBzdGF0aWMgc3RydWN0IHJwY19wcm9jaW5mbyBycGNiX3Byb2NlZHVyZXMzW10gPSB7CiAJW1JQQ0JQUk9DX1NFVF0gPSB7CiAJCS5wX3Byb2MJCT0gUlBDQlBST0NfU0VULAotCQkucF9lbmNvZGUJPSAoa3hkcnByb2NfdClycGNiX2VuY19nZXRhZGRyLAotCQkucF9kZWNvZGUJPSAoa3hkcnByb2NfdClycGNiX2RlY19zZXQsCisJCS5wX2VuY29kZQk9IChreGRyZXByb2NfdClycGNiX2VuY19nZXRhZGRyLAorCQkucF9kZWNvZGUJPSAoa3hkcmRwcm9jX3QpcnBjYl9kZWNfc2V0LAogCQkucF9hcmdsZW4JPSBSUENCX2dldGFkZHJhcmdzX3N6LAogCQkucF9yZXBsZW4JPSBSUENCX3NldHJlc19zeiwKIAkJLnBfc3RhdGlkeAk9IFJQQ0JQUk9DX1NFVCwKQEAgLTkxNCw4ICs4NzksOCBAQAogCX0sCiAJW1JQQ0JQUk9DX1VOU0VUXSA9IHsKIAkJLnBfcHJvYwkJPSBSUENCUFJPQ19VTlNFVCwKLQkJLnBfZW5jb2RlCT0gKGt4ZHJwcm9jX3QpcnBjYl9lbmNfZ2V0YWRkciwKLQkJLnBfZGVjb2RlCT0gKGt4ZHJwcm9jX3QpcnBjYl9kZWNfc2V0LAorCQkucF9lbmNvZGUJPSAoa3hkcmVwcm9jX3QpcnBjYl9lbmNfZ2V0YWRkciwKKwkJLnBfZGVjb2RlCT0gKGt4ZHJkcHJvY190KXJwY2JfZGVjX3NldCwKIAkJLnBfYXJnbGVuCT0gUlBDQl9nZXRhZGRyYXJnc19zeiwKIAkJLnBfcmVwbGVuCT0gUlBDQl9zZXRyZXNfc3osCiAJCS5wX3N0YXRpZHgJPSBSUENCUFJPQ19VTlNFVCwKQEAgLTkyNCw4ICs4ODksOCBAQAogCX0sCiAJW1JQQ0JQUk9DX0dFVEFERFJdID0gewogCQkucF9wcm9jCQk9IFJQQ0JQUk9DX0dFVEFERFIsCi0JCS5wX2VuY29kZQk9IChreGRycHJvY190KXJwY2JfZW5jX2dldGFkZHIsCi0JCS5wX2RlY29kZQk9IChreGRycHJvY190KXJwY2JfZGVjX2dldGFkZHIsCisJCS5wX2VuY29kZQk9IChreGRyZXByb2NfdClycGNiX2VuY19nZXRhZGRyLAorCQkucF9kZWNvZGUJPSAoa3hkcmRwcm9jX3QpcnBjYl9kZWNfZ2V0YWRkciwKIAkJLnBfYXJnbGVuCT0gUlBDQl9nZXRhZGRyYXJnc19zeiwKIAkJLnBfcmVwbGVuCT0gUlBDQl9nZXRhZGRycmVzX3N6LAogCQkucF9zdGF0aWR4CT0gUlBDQlBST0NfR0VUQUREUiwKQEAgLTkzNyw4ICs5MDIsOCBAQAogc3RhdGljIHN0cnVjdCBycGNfcHJvY2luZm8gcnBjYl9wcm9jZWR1cmVzNFtdID0gewogCVtSUENCUFJPQ19TRVRdID0gewogCQkucF9wcm9jCQk9IFJQQ0JQUk9DX1NFVCwKLQkJLnBfZW5jb2RlCT0gKGt4ZHJwcm9jX3QpcnBjYl9lbmNfZ2V0YWRkciwKLQkJLnBfZGVjb2RlCT0gKGt4ZHJwcm9jX3QpcnBjYl9kZWNfc2V0LAorCQkucF9lbmNvZGUJPSAoa3hkcmVwcm9jX3QpcnBjYl9lbmNfZ2V0YWRkciwKKwkJLnBfZGVjb2RlCT0gKGt4ZHJkcHJvY190KXJwY2JfZGVjX3NldCwKIAkJLnBfYXJnbGVuCT0gUlBDQl9nZXRhZGRyYXJnc19zeiwKIAkJLnBfcmVwbGVuCT0gUlBDQl9zZXRyZXNfc3osCiAJCS5wX3N0YXRpZHgJPSBSUENCUFJPQ19TRVQsCkBAIC05NDcsOCArOTEyLDggQEAKIAl9LAogCVtSUENCUFJPQ19VTlNFVF0gPSB7CiAJCS5wX3Byb2MJCT0gUlBDQlBST0NfVU5TRVQsCi0JCS5wX2VuY29kZQk9IChreGRycHJvY190KXJwY2JfZW5jX2dldGFkZHIsCi0JCS5wX2RlY29kZQk9IChreGRycHJvY190KXJwY2JfZGVjX3NldCwKKwkJLnBfZW5jb2RlCT0gKGt4ZHJlcHJvY190KXJwY2JfZW5jX2dldGFkZHIsCisJCS5wX2RlY29kZQk9IChreGRyZHByb2NfdClycGNiX2RlY19zZXQsCiAJCS5wX2FyZ2xlbgk9IFJQQ0JfZ2V0YWRkcmFyZ3Nfc3osCiAJCS5wX3JlcGxlbgk9IFJQQ0Jfc2V0cmVzX3N6LAogCQkucF9zdGF0aWR4CT0gUlBDQlBST0NfVU5TRVQsCkBAIC05NTcsOCArOTIyLDggQEAKIAl9LAogCVtSUENCUFJPQ19HRVRBRERSXSA9IHsKIAkJLnBfcHJvYwkJPSBSUENCUFJPQ19HRVRBRERSLAotCQkucF9lbmNvZGUJPSAoa3hkcnByb2NfdClycGNiX2VuY19nZXRhZGRyLAotCQkucF9kZWNvZGUJPSAoa3hkcnByb2NfdClycGNiX2RlY19nZXRhZGRyLAorCQkucF9lbmNvZGUJPSAoa3hkcmVwcm9jX3QpcnBjYl9lbmNfZ2V0YWRkciwKKwkJLnBfZGVjb2RlCT0gKGt4ZHJkcHJvY190KXJwY2JfZGVjX2dldGFkZHIsCiAJCS5wX2FyZ2xlbgk9IFJQQ0JfZ2V0YWRkcmFyZ3Nfc3osCiAJCS5wX3JlcGxlbgk9IFJQQ0JfZ2V0YWRkcnJlc19zeiwKIAkJLnBfc3RhdGlkeAk9IFJQQ0JQUk9DX0dFVEFERFIsCkBAIC05OTMsMTkgKzk1OCwxOSBAQAogCiBzdGF0aWMgc3RydWN0IHJwY192ZXJzaW9uIHJwY2JfdmVyc2lvbjIgPSB7CiAJLm51bWJlcgkJPSBSUENCVkVSU18yLAotCS5ucnByb2NzCT0gUlBDQl9ISUdIUFJPQ18yLAorCS5ucnByb2NzCT0gQVJSQVlfU0laRShycGNiX3Byb2NlZHVyZXMyKSwKIAkucHJvY3MJCT0gcnBjYl9wcm9jZWR1cmVzMgogfTsKIAogc3RhdGljIHN0cnVjdCBycGNfdmVyc2lvbiBycGNiX3ZlcnNpb24zID0gewogCS5udW1iZXIJCT0gUlBDQlZFUlNfMywKLQkubnJwcm9jcwk9IFJQQ0JfSElHSFBST0NfMywKKwkubnJwcm9jcwk9IEFSUkFZX1NJWkUocnBjYl9wcm9jZWR1cmVzMyksCiAJLnByb2NzCQk9IHJwY2JfcHJvY2VkdXJlczMKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcnBjX3ZlcnNpb24gcnBjYl92ZXJzaW9uNCA9IHsKIAkubnVtYmVyCQk9IFJQQ0JWRVJTXzQsCi0JLm5ycHJvY3MJPSBSUENCX0hJR0hQUk9DXzQsCisJLm5ycHJvY3MJPSBBUlJBWV9TSVpFKHJwY2JfcHJvY2VkdXJlczQpLAogCS5wcm9jcwkJPSBycGNiX3Byb2NlZHVyZXM0CiB9OwogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuYwppbmRleCA2MzU5YzQyLi4wZTY1OWM2IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Yy5jCisrKyBiL25ldC9zdW5ycGMvc3ZjLmMKQEAgLTQ4OCwxMCArNDg4LDYgQEAKIAlpZiAoc3ZjX3NlcnZfaXNfcG9vbGVkKHNlcnYpKQogCQlzdmNfcG9vbF9tYXBfcHV0KCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKLQlzdmNfc29ja19kZXN0cm95KHNlcnYtPmJjX3hwcnQpOwotI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwotCiAJc3ZjX3VucmVnaXN0ZXIoc2Vydik7CiAJa2ZyZWUoc2Vydi0+c3ZfcG9vbHMpOwogCWtmcmVlKHNlcnYpOwpAQCAtMTE0Nyw3ICsxMTQzLDYgQEAKICBkcm9waXQ6CiAJc3ZjX2F1dGhvcmlzZShycXN0cCk7CS8qIGRvZXNuJ3QgaHVydCB0byBjYWxsIHRoaXMgdHdpY2UgKi8KIAlkcHJpbnRrKCJzdmM6IHN2Y19wcm9jZXNzIGRyb3BpdFxuIik7Ci0Jc3ZjX2Ryb3AocnFzdHApOwogCXJldHVybiAwOwogCiBlcnJfc2hvcnRfbGVuOgpAQCAtMTIxOCw3ICsxMjEzLDYgQEAKIAlzdHJ1Y3Qga3ZlYwkJKnJlc3YgPSAmcnFzdHAtPnJxX3Jlcy5oZWFkWzBdOwogCXN0cnVjdCBzdmNfc2VydgkJKnNlcnYgPSBycXN0cC0+cnFfc2VydmVyOwogCXUzMgkJCWRpcjsKLQlpbnQJCQllcnJvcjsKIAogCS8qCiAJICogU2V0dXAgcmVzcG9uc2UgeGRyX2J1Zi4KQEAgLTEyNDYsMTEgKzEyNDAsMTMgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZXJyb3IgPSBzdmNfcHJvY2Vzc19jb21tb24ocnFzdHAsIGFyZ3YsIHJlc3YpOwotCWlmIChlcnJvciA8PSAwKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlyZXR1cm4gc3ZjX3NlbmQocnFzdHApOworCS8qIFJldHVybnMgMSBmb3Igc2VuZCwgMCBmb3IgZHJvcCAqLworCWlmIChzdmNfcHJvY2Vzc19jb21tb24ocnFzdHAsIGFyZ3YsIHJlc3YpKQorCQlyZXR1cm4gc3ZjX3NlbmQocnFzdHApOworCWVsc2UgeworCQlzdmNfZHJvcChycXN0cCk7CisJCXJldHVybiAwOworCX0KIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQpAQCAtMTI2NCwxMCArMTI2MCw5IEBACiB7CiAJc3RydWN0IGt2ZWMJKmFyZ3YgPSAmcnFzdHAtPnJxX2FyZy5oZWFkWzBdOwogCXN0cnVjdCBrdmVjCSpyZXN2ID0gJnJxc3RwLT5ycV9yZXMuaGVhZFswXTsKLQlpbnQgCQllcnJvcjsKIAogCS8qIEJ1aWxkIHRoZSBzdmNfcnFzdCB1c2VkIGJ5IHRoZSBjb21tb24gcHJvY2Vzc2luZyByb3V0aW5lICovCi0JcnFzdHAtPnJxX3hwcnQgPSBzZXJ2LT5iY194cHJ0OworCXJxc3RwLT5ycV94cHJ0ID0gc2Vydi0+c3ZfYmNfeHBydDsKIAlycXN0cC0+cnFfeGlkID0gcmVxLT5ycV94aWQ7CiAJcnFzdHAtPnJxX3Byb3QgPSByZXEtPnJxX3hwcnQtPnByb3Q7CiAJcnFzdHAtPnJxX3NlcnZlciA9IHNlcnY7CkBAIC0xMjkyLDEyICsxMjg3LDE1IEBACiAJc3ZjX2dldHUzMihhcmd2KTsJLyogWElEICovCiAJc3ZjX2dldG5sKGFyZ3YpOwkvKiBDQUxMRElSICovCiAKLQllcnJvciA9IHN2Y19wcm9jZXNzX2NvbW1vbihycXN0cCwgYXJndiwgcmVzdik7Ci0JaWYgKGVycm9yIDw9IDApCi0JCXJldHVybiBlcnJvcjsKLQotCW1lbWNweSgmcmVxLT5ycV9zbmRfYnVmLCAmcnFzdHAtPnJxX3Jlcywgc2l6ZW9mKHJlcS0+cnFfc25kX2J1ZikpOwotCXJldHVybiBiY19zZW5kKHJlcSk7CisJLyogUmV0dXJucyAxIGZvciBzZW5kLCAwIGZvciBkcm9wICovCisJaWYgKHN2Y19wcm9jZXNzX2NvbW1vbihycXN0cCwgYXJndiwgcmVzdikpIHsKKwkJbWVtY3B5KCZyZXEtPnJxX3NuZF9idWYsICZycXN0cC0+cnFfcmVzLAorCQkJCQkJc2l6ZW9mKHJlcS0+cnFfc25kX2J1ZikpOworCQlyZXR1cm4gYmNfc2VuZChyZXEpOworCX0gZWxzZSB7CisJCS8qIE5vdGhpbmcgdG8gZG8gdG8gZHJvcCByZXF1ZXN0ICovCisJCXJldHVybiAwOworCX0KIH0KIEVYUE9SVF9TWU1CT0woYmNfc3ZjX3Byb2Nlc3MpOwogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCAwNzkxOWUxLi5kMjY1YWE3IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suYworKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwpAQCAtNjYsNiArNjYsMTMgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3ZjX3hwcnQgKnN2Y19jcmVhdGVfc29ja2V0KHN0cnVjdCBzdmNfc2VydiAqLCBpbnQsCiAJCQkJCSAgc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKIAkJCQkJICBpbnQsIGludCk7CisjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCitzdGF0aWMgc3RydWN0IHN2Y194cHJ0ICpzdmNfYmNfY3JlYXRlX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKiwgaW50LAorCQkJCQkgICAgIHN0cnVjdCBuZXQgKiwgc3RydWN0IHNvY2thZGRyICosCisJCQkJCSAgICAgaW50LCBpbnQpOworc3RhdGljIHZvaWQgc3ZjX2JjX3NvY2tfZnJlZShzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpOworI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLworCiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgc3ZjX2tleVsyXTsKIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgc3ZjX3Nsb2NrX2tleVsyXTsKQEAgLTExODQsNiArMTE5MSw1NyBAQAogCXJldHVybiBzdmNfY3JlYXRlX3NvY2tldChzZXJ2LCBJUFBST1RPX1RDUCwgbmV0LCBzYSwgc2FsZW4sIGZsYWdzKTsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQorc3RhdGljIHN0cnVjdCBzdmNfeHBydCAqc3ZjX2JjX2NyZWF0ZV9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICosIGludCwKKwkJCQkJICAgICBzdHJ1Y3QgbmV0ICosIHN0cnVjdCBzb2NrYWRkciAqLAorCQkJCQkgICAgIGludCwgaW50KTsKK3N0YXRpYyB2b2lkIHN2Y19iY19zb2NrX2ZyZWUoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KTsKKworc3RhdGljIHN0cnVjdCBzdmNfeHBydCAqc3ZjX2JjX3RjcF9jcmVhdGUoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc2EsIGludCBzYWxlbiwKKwkJCQkgICAgICAgaW50IGZsYWdzKQoreworCXJldHVybiBzdmNfYmNfY3JlYXRlX3NvY2tldChzZXJ2LCBJUFBST1RPX1RDUCwgbmV0LCBzYSwgc2FsZW4sIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc3ZjX2JjX3RjcF9zb2NrX2RldGFjaChzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3ZjX3hwcnRfb3BzIHN2Y190Y3BfYmNfb3BzID0geworCS54cG9fY3JlYXRlID0gc3ZjX2JjX3RjcF9jcmVhdGUsCisJLnhwb19kZXRhY2ggPSBzdmNfYmNfdGNwX3NvY2tfZGV0YWNoLAorCS54cG9fZnJlZSA9IHN2Y19iY19zb2NrX2ZyZWUsCisJLnhwb19wcmVwX3JlcGx5X2hkciA9IHN2Y190Y3BfcHJlcF9yZXBseV9oZHIsCit9OworCitzdGF0aWMgc3RydWN0IHN2Y194cHJ0X2NsYXNzIHN2Y190Y3BfYmNfY2xhc3MgPSB7CisJLnhjbF9uYW1lID0gInRjcC1iYyIsCisJLnhjbF9vd25lciA9IFRISVNfTU9EVUxFLAorCS54Y2xfb3BzID0gJnN2Y190Y3BfYmNfb3BzLAorCS54Y2xfbWF4X3BheWxvYWQgPSBSUENTVkNfTUFYUEFZTE9BRF9UQ1AsCit9OworCitzdGF0aWMgdm9pZCBzdmNfaW5pdF9iY194cHJ0X3NvY2sodm9pZCkKK3sKKwlzdmNfcmVnX3hwcnRfY2xhc3MoJnN2Y190Y3BfYmNfY2xhc3MpOworfQorCitzdGF0aWMgdm9pZCBzdmNfY2xlYW51cF9iY194cHJ0X3NvY2sodm9pZCkKK3sKKwlzdmNfdW5yZWdfeHBydF9jbGFzcygmc3ZjX3RjcF9iY19jbGFzcyk7Cit9CisjZWxzZSAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KK3N0YXRpYyB2b2lkIHN2Y19pbml0X2JjX3hwcnRfc29jayh2b2lkKQoreworfQorCitzdGF0aWMgdm9pZCBzdmNfY2xlYW51cF9iY194cHJ0X3NvY2sodm9pZCkKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KKwogc3RhdGljIHN0cnVjdCBzdmNfeHBydF9vcHMgc3ZjX3RjcF9vcHMgPSB7CiAJLnhwb19jcmVhdGUgPSBzdmNfdGNwX2NyZWF0ZSwKIAkueHBvX3JlY3Zmcm9tID0gc3ZjX3RjcF9yZWN2ZnJvbSwKQEAgLTEyMDcsMTIgKzEyNjUsMTQgQEAKIHsKIAlzdmNfcmVnX3hwcnRfY2xhc3MoJnN2Y190Y3BfY2xhc3MpOwogCXN2Y19yZWdfeHBydF9jbGFzcygmc3ZjX3VkcF9jbGFzcyk7CisJc3ZjX2luaXRfYmNfeHBydF9zb2NrKCk7CiB9CiAKIHZvaWQgc3ZjX2NsZWFudXBfeHBydF9zb2NrKHZvaWQpCiB7CiAJc3ZjX3VucmVnX3hwcnRfY2xhc3MoJnN2Y190Y3BfY2xhc3MpOwogCXN2Y191bnJlZ194cHJ0X2NsYXNzKCZzdmNfdWRwX2NsYXNzKTsKKwlzdmNfY2xlYW51cF9iY194cHJ0X3NvY2soKTsKIH0KIAogc3RhdGljIHZvaWQgc3ZjX3RjcF9pbml0KHN0cnVjdCBzdmNfc29jayAqc3Zzaywgc3RydWN0IHN2Y19zZXJ2ICpzZXJ2KQpAQCAtMTUwOSw0MSArMTU2OSw0NSBAQAogCWtmcmVlKHN2c2spOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCiAvKgotICogQ3JlYXRlIGEgc3ZjX3hwcnQuCi0gKgotICogRm9yIGludGVybmFsIHVzZSBvbmx5IChlLmcuIG5mc3Y0LjEgYmFja2NoYW5uZWwpLgotICogQ2FsbGVycyBzaG91bGQgdHlwaWNhbGx5IHVzZSB0aGUgeHBvX2NyZWF0ZSgpIG1ldGhvZC4KKyAqIENyZWF0ZSBhIGJhY2sgY2hhbm5lbCBzdmNfeHBydCB3aGljaCBzaGFyZXMgdGhlIGZvcmUgY2hhbm5lbCBzb2NrZXQuCiAgKi8KLXN0cnVjdCBzdmNfeHBydCAqc3ZjX3NvY2tfY3JlYXRlKHN0cnVjdCBzdmNfc2VydiAqc2VydiwgaW50IHByb3QpCitzdGF0aWMgc3RydWN0IHN2Y194cHJ0ICpzdmNfYmNfY3JlYXRlX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsCisJCQkJCSAgICAgaW50IHByb3RvY29sLAorCQkJCQkgICAgIHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNpbiwgaW50IGxlbiwKKwkJCQkJICAgICBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHN2Y19zb2NrICpzdnNrOwotCXN0cnVjdCBzdmNfeHBydCAqeHBydCA9IE5VTEw7CisJc3RydWN0IHN2Y194cHJ0ICp4cHJ0OwogCi0JZHByaW50aygic3ZjOiAlc1xuIiwgX19mdW5jX18pOworCWlmIChwcm90b2NvbCAhPSBJUFBST1RPX1RDUCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzdmM6IG9ubHkgVENQIHNvY2tldHMiCisJCQkiIHN1cHBvcnRlZCBvbiBzaGFyZWQgYmFjayBjaGFubmVsXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCiAJc3ZzayA9IGt6YWxsb2Moc2l6ZW9mKCpzdnNrKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzdnNrKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAl4cHJ0ID0gJnN2c2stPnNrX3hwcnQ7Ci0JaWYgKHByb3QgPT0gSVBQUk9UT19UQ1ApCi0JCXN2Y194cHJ0X2luaXQoJnN2Y190Y3BfY2xhc3MsIHhwcnQsIHNlcnYpOwotCWVsc2UgaWYgKHByb3QgPT0gSVBQUk9UT19VRFApCi0JCXN2Y194cHJ0X2luaXQoJnN2Y191ZHBfY2xhc3MsIHhwcnQsIHNlcnYpOwotCWVsc2UKLQkJQlVHKCk7Ci1vdXQ6Ci0JZHByaW50aygic3ZjOiAlcyByZXR1cm4gJXBcbiIsIF9fZnVuY19fLCB4cHJ0KTsKKwlzdmNfeHBydF9pbml0KCZzdmNfdGNwX2JjX2NsYXNzLCB4cHJ0LCBzZXJ2KTsKKworCXNlcnYtPnN2X2JjX3hwcnQgPSB4cHJ0OworCiAJcmV0dXJuIHhwcnQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChzdmNfc29ja19jcmVhdGUpOwogCiAvKgotICogRGVzdHJveSBhIHN2Y19zb2NrLgorICogRnJlZSBhIGJhY2sgY2hhbm5lbCBzdmNfc29jay4KICAqLwotdm9pZCBzdmNfc29ja19kZXN0cm95KHN0cnVjdCBzdmNfeHBydCAqeHBydCkKK3N0YXRpYyB2b2lkIHN2Y19iY19zb2NrX2ZyZWUoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KQogewotCWlmICh4cHJ0KQorCWlmICh4cHJ0KSB7CisJCWtmcmVlKHhwcnQtPnhwdF9iY19zaWQpOwogCQlrZnJlZShjb250YWluZXJfb2YoeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KSk7CisJfQogfQotRVhQT1JUX1NZTUJPTF9HUEwoc3ZjX3NvY2tfZGVzdHJveSk7CisjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hkci5jIGIvbmV0L3N1bnJwYy94ZHIuYwppbmRleCBjZDllODQxLi42NzljZDY3IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hkci5jCisrKyBiL25ldC9zdW5ycGMveGRyLmMKQEAgLTU1Miw2ICs1NTIsNzQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHhkcl93cml0ZV9wYWdlcyk7CiAKK3N0YXRpYyB2b2lkIHhkcl9zZXRfaW92KHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBrdmVjICppb3YsCisJCV9fYmUzMiAqcCwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZiAobGVuID4gaW92LT5pb3ZfbGVuKQorCQlsZW4gPSBpb3YtPmlvdl9sZW47CisJaWYgKHAgPT0gTlVMTCkKKwkJcCA9IChfX2JlMzIqKWlvdi0+aW92X2Jhc2U7CisJeGRyLT5wID0gcDsKKwl4ZHItPmVuZCA9IChfX2JlMzIqKShpb3YtPmlvdl9iYXNlICsgbGVuKTsKKwl4ZHItPmlvdiA9IGlvdjsKKwl4ZHItPnBhZ2VfcHRyID0gTlVMTDsKK30KKworc3RhdGljIGludCB4ZHJfc2V0X3BhZ2VfYmFzZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQl1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgcGducjsKKwl1bnNpZ25lZCBpbnQgbWF4bGVuOworCXVuc2lnbmVkIGludCBwZ29mZjsKKwl1bnNpZ25lZCBpbnQgcGdlbmQ7CisJdm9pZCAqa2FkZHI7CisKKwltYXhsZW4gPSB4ZHItPmJ1Zi0+cGFnZV9sZW47CisJaWYgKGJhc2UgPj0gbWF4bGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltYXhsZW4gLT0gYmFzZTsKKwlpZiAobGVuID4gbWF4bGVuKQorCQlsZW4gPSBtYXhsZW47CisKKwliYXNlICs9IHhkci0+YnVmLT5wYWdlX2Jhc2U7CisKKwlwZ25yID0gYmFzZSA+PiBQQUdFX1NISUZUOworCXhkci0+cGFnZV9wdHIgPSAmeGRyLT5idWYtPnBhZ2VzW3BnbnJdOworCWthZGRyID0gcGFnZV9hZGRyZXNzKCp4ZHItPnBhZ2VfcHRyKTsKKworCXBnb2ZmID0gYmFzZSAmIH5QQUdFX01BU0s7CisJeGRyLT5wID0gKF9fYmUzMiopKGthZGRyICsgcGdvZmYpOworCisJcGdlbmQgPSBwZ29mZiArIGxlbjsKKwlpZiAocGdlbmQgPiBQQUdFX1NJWkUpCisJCXBnZW5kID0gUEFHRV9TSVpFOworCXhkci0+ZW5kID0gKF9fYmUzMiopKGthZGRyICsgcGdlbmQpOworCXhkci0+aW92ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgeGRyX3NldF9uZXh0X3BhZ2Uoc3RydWN0IHhkcl9zdHJlYW0gKnhkcikKK3sKKwl1bnNpZ25lZCBpbnQgbmV3YmFzZTsKKworCW5ld2Jhc2UgPSAoMSArIHhkci0+cGFnZV9wdHIgLSB4ZHItPmJ1Zi0+cGFnZXMpIDw8IFBBR0VfU0hJRlQ7CisJbmV3YmFzZSAtPSB4ZHItPmJ1Zi0+cGFnZV9iYXNlOworCisJaWYgKHhkcl9zZXRfcGFnZV9iYXNlKHhkciwgbmV3YmFzZSwgUEFHRV9TSVpFKSA8IDApCisJCXhkcl9zZXRfaW92KHhkciwgeGRyLT5idWYtPnRhaWwsIE5VTEwsIHhkci0+YnVmLT5sZW4pOworfQorCitzdGF0aWMgYm9vbCB4ZHJfc2V0X25leHRfYnVmZmVyKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIpCit7CisJaWYgKHhkci0+cGFnZV9wdHIgIT0gTlVMTCkKKwkJeGRyX3NldF9uZXh0X3BhZ2UoeGRyKTsKKwllbHNlIGlmICh4ZHItPmlvdiA9PSB4ZHItPmJ1Zi0+aGVhZCkgeworCQlpZiAoeGRyX3NldF9wYWdlX2Jhc2UoeGRyLCAwLCBQQUdFX1NJWkUpIDwgMCkKKwkJCXhkcl9zZXRfaW92KHhkciwgeGRyLT5idWYtPnRhaWwsIE5VTEwsIHhkci0+YnVmLT5sZW4pOworCX0KKwlyZXR1cm4geGRyLT5wICE9IHhkci0+ZW5kOworfQorCiAvKioKICAqIHhkcl9pbml0X2RlY29kZSAtIEluaXRpYWxpemUgYW4geGRyX3N0cmVhbSBmb3IgZGVjb2RpbmcgZGF0YS4KICAqIEB4ZHI6IHBvaW50ZXIgdG8geGRyX3N0cmVhbSBzdHJ1Y3QKQEAgLTU2MCw0MSArNjI4LDY3IEBACiAgKi8KIHZvaWQgeGRyX2luaXRfZGVjb2RlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCB4ZHJfYnVmICpidWYsIF9fYmUzMiAqcCkKIHsKLQlzdHJ1Y3Qga3ZlYyAqaW92ID0gYnVmLT5oZWFkOwotCXVuc2lnbmVkIGludCBsZW4gPSBpb3YtPmlvdl9sZW47Ci0KLQlpZiAobGVuID4gYnVmLT5sZW4pCi0JCWxlbiA9IGJ1Zi0+bGVuOwogCXhkci0+YnVmID0gYnVmOwotCXhkci0+aW92ID0gaW92OwotCXhkci0+cCA9IHA7Ci0JeGRyLT5lbmQgPSAoX19iZTMyICopKChjaGFyICopaW92LT5pb3ZfYmFzZSArIGxlbik7CisJeGRyLT5zY3JhdGNoLmlvdl9iYXNlID0gTlVMTDsKKwl4ZHItPnNjcmF0Y2guaW92X2xlbiA9IDA7CisJaWYgKGJ1Zi0+aGVhZFswXS5pb3ZfbGVuICE9IDApCisJCXhkcl9zZXRfaW92KHhkciwgYnVmLT5oZWFkLCBwLCBidWYtPmxlbik7CisJZWxzZSBpZiAoYnVmLT5wYWdlX2xlbiAhPSAwKQorCQl4ZHJfc2V0X3BhZ2VfYmFzZSh4ZHIsIDAsIGJ1Zi0+bGVuKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHhkcl9pbml0X2RlY29kZSk7CiAKLS8qKgotICogeGRyX2lubGluZV9wZWVrIC0gQWxsb3cgcmVhZC1haGVhZCBpbiB0aGUgWERSIGRhdGEgc3RyZWFtCi0gKiBAeGRyOiBwb2ludGVyIHRvIHhkcl9zdHJlYW0gc3RydWN0Ci0gKiBAbmJ5dGVzOiBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YSB0byBkZWNvZGUKLSAqCi0gKiBDaGVjayBpZiB0aGUgaW5wdXQgYnVmZmVyIGlzIGxvbmcgZW5vdWdoIHRvIGVuYWJsZSB1cyB0byBkZWNvZGUKLSAqICduYnl0ZXMnIG1vcmUgYnl0ZXMgb2YgZGF0YSBzdGFydGluZyBhdCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqIElmIHNvIHJldHVybiB0aGUgY3VycmVudCBwb2ludGVyIHdpdGhvdXQgdXBkYXRpbmcgdGhlIGN1cnJlbnQKLSAqIHBvaW50ZXIgcG9zaXRpb24uCi0gKi8KLV9fYmUzMiAqIHhkcl9pbmxpbmVfcGVlayhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzaXplX3QgbmJ5dGVzKQorc3RhdGljIF9fYmUzMiAqIF9feGRyX2lubGluZV9kZWNvZGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc2l6ZV90IG5ieXRlcykKIHsKIAlfX2JlMzIgKnAgPSB4ZHItPnA7CiAJX19iZTMyICpxID0gcCArIFhEUl9RVUFETEVOKG5ieXRlcyk7CiAKIAlpZiAodW5saWtlbHkocSA+IHhkci0+ZW5kIHx8IHEgPCBwKSkKIAkJcmV0dXJuIE5VTEw7CisJeGRyLT5wID0gcTsKIAlyZXR1cm4gcDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHhkcl9pbmxpbmVfcGVlayk7CiAKIC8qKgotICogeGRyX2lubGluZV9kZWNvZGUgLSBSZXRyaWV2ZSBub24tcGFnZSBYRFIgZGF0YSB0byBkZWNvZGUKKyAqIHhkcl9zZXRfc2NyYXRjaF9idWZmZXIgLSBBdHRhY2ggYSBzY3JhdGNoIGJ1ZmZlciBmb3IgZGVjb2RpbmcgZGF0YS4KKyAqIEB4ZHI6IHBvaW50ZXIgdG8geGRyX3N0cmVhbSBzdHJ1Y3QKKyAqIEBidWY6IHBvaW50ZXIgdG8gYW4gZW1wdHkgYnVmZmVyCisgKiBAYnVmbGVuOiBzaXplIG9mICdidWYnCisgKgorICogVGhlIHNjcmF0Y2ggYnVmZmVyIGlzIHVzZWQgd2hlbiBkZWNvZGluZyBmcm9tIGFuIGFycmF5IG9mIHBhZ2VzLgorICogSWYgYW4geGRyX2lubGluZV9kZWNvZGUoKSBjYWxsIHNwYW5zIGFjcm9zcyBwYWdlIGJvdW5kYXJpZXMsIHRoZW4KKyAqIHdlIGNvcHkgdGhlIGRhdGEgaW50byB0aGUgc2NyYXRjaCBidWZmZXIgaW4gb3JkZXIgdG8gYWxsb3cgbGluZWFyCisgKiBhY2Nlc3MuCisgKi8KK3ZvaWQgeGRyX3NldF9zY3JhdGNoX2J1ZmZlcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pCit7CisJeGRyLT5zY3JhdGNoLmlvdl9iYXNlID0gYnVmOworCXhkci0+c2NyYXRjaC5pb3ZfbGVuID0gYnVmbGVuOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGRyX3NldF9zY3JhdGNoX2J1ZmZlcik7CisKK3N0YXRpYyBfX2JlMzIgKnhkcl9jb3B5X3RvX3NjcmF0Y2goc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc2l6ZV90IG5ieXRlcykKK3sKKwlfX2JlMzIgKnA7CisJdm9pZCAqY3BkZXN0ID0geGRyLT5zY3JhdGNoLmlvdl9iYXNlOworCXNpemVfdCBjcGxlbiA9IChjaGFyICopeGRyLT5lbmQgLSAoY2hhciAqKXhkci0+cDsKKworCWlmIChuYnl0ZXMgPiB4ZHItPnNjcmF0Y2guaW92X2xlbikKKwkJcmV0dXJuIE5VTEw7CisJbWVtY3B5KGNwZGVzdCwgeGRyLT5wLCBjcGxlbik7CisJY3BkZXN0ICs9IGNwbGVuOworCW5ieXRlcyAtPSBjcGxlbjsKKwlpZiAoIXhkcl9zZXRfbmV4dF9idWZmZXIoeGRyKSkKKwkJcmV0dXJuIE5VTEw7CisJcCA9IF9feGRyX2lubGluZV9kZWNvZGUoeGRyLCBuYnl0ZXMpOworCWlmIChwID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCW1lbWNweShjcGRlc3QsIHAsIG5ieXRlcyk7CisJcmV0dXJuIHhkci0+c2NyYXRjaC5pb3ZfYmFzZTsKK30KKworLyoqCisgKiB4ZHJfaW5saW5lX2RlY29kZSAtIFJldHJpZXZlIFhEUiBkYXRhIHRvIGRlY29kZQogICogQHhkcjogcG9pbnRlciB0byB4ZHJfc3RyZWFtIHN0cnVjdAogICogQG5ieXRlczogbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgdG8gZGVjb2RlCiAgKgpAQCAtNjA1LDEzICs2OTksMTYgQEAKICAqLwogX19iZTMyICogeGRyX2lubGluZV9kZWNvZGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc2l6ZV90IG5ieXRlcykKIHsKLQlfX2JlMzIgKnAgPSB4ZHItPnA7Ci0JX19iZTMyICpxID0gcCArIFhEUl9RVUFETEVOKG5ieXRlcyk7CisJX19iZTMyICpwOwogCi0JaWYgKHVubGlrZWx5KHEgPiB4ZHItPmVuZCB8fCBxIDwgcCkpCisJaWYgKG5ieXRlcyA9PSAwKQorCQlyZXR1cm4geGRyLT5wOworCWlmICh4ZHItPnAgPT0geGRyLT5lbmQgJiYgIXhkcl9zZXRfbmV4dF9idWZmZXIoeGRyKSkKIAkJcmV0dXJuIE5VTEw7Ci0JeGRyLT5wID0gcTsKLQlyZXR1cm4gcDsKKwlwID0gX194ZHJfaW5saW5lX2RlY29kZSh4ZHIsIG5ieXRlcyk7CisJaWYgKHAgIT0gTlVMTCkKKwkJcmV0dXJuIHA7CisJcmV0dXJuIHhkcl9jb3B5X3RvX3NjcmF0Y2goeGRyLCBuYnl0ZXMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoeGRyX2lubGluZV9kZWNvZGUpOwogCkBAIC02NzEsMTYgKzc2OCwxMiBAQAogICovCiB2b2lkIHhkcl9lbnRlcl9wYWdlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JY2hhciAqIGthZGRyID0gcGFnZV9hZGRyZXNzKHhkci0+YnVmLT5wYWdlc1swXSk7CiAJeGRyX3JlYWRfcGFnZXMoeGRyLCBsZW4pOwogCS8qCiAJICogUG9zaXRpb24gY3VycmVudCBwb2ludGVyIGF0IGJlZ2lubmluZyBvZiB0YWlsLCBhbmQKIAkgKiBzZXQgcmVtYWluaW5nIG1lc3NhZ2UgbGVuZ3RoLgogCSAqLwotCWlmIChsZW4gPiBQQUdFX0NBQ0hFX1NJWkUgLSB4ZHItPmJ1Zi0+cGFnZV9iYXNlKQotCQlsZW4gPSBQQUdFX0NBQ0hFX1NJWkUgLSB4ZHItPmJ1Zi0+cGFnZV9iYXNlOwotCXhkci0+cCA9IChfX2JlMzIgKikoa2FkZHIgKyB4ZHItPmJ1Zi0+cGFnZV9iYXNlKTsKLQl4ZHItPmVuZCA9IChfX2JlMzIgKikoKGNoYXIgKil4ZHItPnAgKyBsZW4pOworCXhkcl9zZXRfcGFnZV9iYXNlKHhkciwgMCwgbGVuKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHhkcl9lbnRlcl9wYWdlKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuYwppbmRleCA4ZWI4ODk1Li5kNWUxZTBiIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYworKysgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgorI2luY2x1ZGUgPG5ldC9haC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CkBAIC0zMDIsNyArMzAzLDggQEAKIAlhbGdvID0geGZybV9hYWxnX2dldF9ieW5hbWUodWFsZy0+YWxnX25hbWUsIDEpOwogCWlmICghYWxnbykKIAkJcmV0dXJuIC1FTk9TWVM7Ci0JaWYgKHVhbGctPmFsZ190cnVuY19sZW4gPiBhbGdvLT51aW5mby5hdXRoLmljdl9mdWxsYml0cykKKwlpZiAoKHVhbGctPmFsZ190cnVuY19sZW4gLyA4KSA+IE1BWF9BSF9BVVRIX0xFTiB8fAorCSAgICB1YWxnLT5hbGdfdHJ1bmNfbGVuID4gYWxnby0+dWluZm8uYXV0aC5pY3ZfZnVsbGJpdHMpCiAJCXJldHVybiAtRUlOVkFMOwogCSpwcm9wcyA9IGFsZ28tPmRlc2Muc2FkYl9hbGdfaWQ7CiAKQEAgLTIxODcsNyArMjE4OSw3IEBACiAKIAlpZiAoKHR5cGUgPT0gKFhGUk1fTVNHX0dFVFNBIC0gWEZSTV9NU0dfQkFTRSkgfHwKIAkgICAgIHR5cGUgPT0gKFhGUk1fTVNHX0dFVFBPTElDWSAtIFhGUk1fTVNHX0JBU0UpKSAmJgotCSAgICAobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0RVTVApKSB7CisJICAgIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRFVNUCkgPT0gTkxNX0ZfRFVNUCkgewogCQlpZiAobGluay0+ZHVtcCA9PSBOVUxMKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUubGliIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKaW5kZXggMzk2ZGExNi4uMWM3MDJjYSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5saWIKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKQEAgLTI2Miw2ICsyNjIsMzQgQEAKIAlsem9wIC05ICYmICQoY2FsbCBzaXplX2FwcGVuZCwgJChmaWx0ZXItb3V0IEZPUkNFLCReKSkpID4gJEAgfHwgXAogCShybSAtZiAkQCA7IGZhbHNlKQogCisjIFhaCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVc2UgeHprZXJuIHRvIGNvbXByZXNzIHRoZSBrZXJuZWwgaW1hZ2UgYW5kIHh6bWlzYyB0byBjb21wcmVzcyBvdGhlciB0aGluZ3MuCisjCisjIHh6a2VybiB1c2VzIGEgYmlnIExaTUEyIGRpY3Rpb25hcnkgc2luY2UgaXQgZG9lc24ndCBpbmNyZWFzZSBtZW1vcnkgdXNhZ2UKKyMgb2YgdGhlIGtlcm5lbCBkZWNvbXByZXNzb3IuIEEgQkNKIGZpbHRlciBpcyB1c2VkIGlmIGl0IGlzIGF2YWlsYWJsZSBmb3IKKyMgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIHh6a2VybiBhbHNvIGFwcGVuZHMgdW5jb21wcmVzc2VkIHNpemUgb2YgdGhlIGRhdGEKKyMgdXNpbmcgc2l6ZV9hcHBlbmQuIFRoZSAueHogZm9ybWF0IGhhcyB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgYXQKKyMgdGhlIGVuZCBvZiB0aGUgZmlsZSB0b28sIGJ1dCBpdCdzIGluIG1vcmUgY29tcGxleCBmb3JtYXQgYW5kIGl0J3MgZ29vZCB0bworIyBhdm9pZCBjaGFuZ2luZyB0aGUgcGFydCBvZiB0aGUgYm9vdCBjb2RlIHRoYXQgcmVhZHMgdGhlIHVuY29tcHJlc3NlZCBzaXplLgorIyBOb3RlIHRoYXQgdGhlIGJ5dGVzIGFkZGVkIGJ5IHNpemVfYXBwZW5kIHdpbGwgbWFrZSB0aGUgeHogdG9vbCB0aGluayB0aGF0CisjIHRoZSBmaWxlIGlzIGNvcnJ1cHQuIFRoaXMgaXMgZXhwZWN0ZWQuCisjCisjIHh6bWlzYyBkb2Vzbid0IHVzZSBzaXplX2FwcGVuZCwgc28gaXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIG5vcm1hbCAueHoKKyMgZmlsZXMuIHh6bWlzYyB1c2VzIHNtYWxsZXIgTFpNQTIgZGljdGlvbmFyeSB0aGFuIHh6a2VybiwgYmVjYXVzZSBhIHZlcnkKKyMgYmlnIGRpY3Rpb25hcnkgd291bGQgaW5jcmVhc2UgdGhlIG1lbW9yeSB1c2FnZSB0b28gbXVjaCBpbiB0aGUgbXVsdGktY2FsbAorIyBkZWNvbXByZXNzaW9uIG1vZGUuIEEgQkNKIGZpbHRlciBpc24ndCB1c2VkIGVpdGhlci4KK3F1aWV0X2NtZF94emtlcm4gPSBYWktFUk4gICRACitjbWRfeHprZXJuID0gKGNhdCAkKGZpbHRlci1vdXQgRk9SQ0UsJF4pIHwgXAorCXNoICQoc3JjdHJlZSkvc2NyaXB0cy94el93cmFwLnNoICYmIFwKKwkkKGNhbGwgc2l6ZV9hcHBlbmQsICQoZmlsdGVyLW91dCBGT1JDRSwkXikpKSA+ICRAIHx8IFwKKwkocm0gLWYgJEAgOyBmYWxzZSkKKworcXVpZXRfY21kX3h6bWlzYyA9IFhaTUlTQyAgJEAKK2NtZF94em1pc2MgPSAoY2F0ICQoZmlsdGVyLW91dCBGT1JDRSwkXikgfCBcCisJeHogLS1jaGVjaz1jcmMzMiAtLWx6bWEyPWRpY3Q9MU1pQikgPiAkQCB8fCBcCisJKHJtIC1mICRAIDsgZmFsc2UpCisKICMgbWlzYyBzdHVmZgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHF1b3RlOj0iCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKaW5kZXggZTNjN2ZjMC4uNGMwMzgzZCAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsCisrKyBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbApAQCAtODU5LDcgKzg1OSw3IEBACiAJCQkJJGF2X3ByZXByb2Nlc3NvciA9IDA7CiAJCQl9CiAKLQkJfSBlbHNpZiAoJGN1ciA9fiAvXihcKFxzKiRUeXBlXHMqKVwpLykgeworCQl9IGVsc2lmICgkY3VyID1+IC9eKFwoXHMqJFR5cGVccyopXCkvICYmICRhdl9wZW5kaW5nIGVxICdfJykgewogCQkJcHJpbnQgIkNBU1QoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOwogCQkJcHVzaChAYXZfcGFyZW5fdHlwZSwgJHR5cGUpOwogCQkJJHR5cGUgPSAnQyc7CkBAIC0yNzQzLDYgKzI3NDMsMTEgQEAKIAkJCVdBUk4oInBsYWluIGlubGluZSBpcyBwcmVmZXJyZWQgb3ZlciAkMVxuIiAuICRoZXJlY3Vycik7CiAJCX0KIAorIyBDaGVjayBmb3IgX19hdHRyaWJ1dGVfXyBwYWNrZWQsIHByZWZlciBfX3BhY2tlZAorCQlpZiAoJGxpbmUgPX4gL1xiX19hdHRyaWJ1dGVfX1xzKlwoXHMqXCguKlxicGFja2VkXGIvKSB7CisJCQlXQVJOKCJfX3BhY2tlZCBpcyBwcmVmZXJyZWQgb3ZlciBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKVxuIiAuICRoZXJlY3Vycik7CisJCX0KKwogIyBjaGVjayBmb3Igc2l6ZW9mKCYpCiAJCWlmICgkbGluZSA9fiAvXGJzaXplb2ZccypcKFxzKlwmLykgewogCQkJV0FSTigic2l6ZW9mKCYgc2hvdWxkIGJlIGF2b2lkZWRcbiIgLiAkaGVyZWN1cnIpOwpAQCAtMjc4NSwxMCArMjc5MCwxNSBAQAogCQl9CiAKICMgY2hlY2sgZm9yIHBvaW50bGVzcyBjYXN0aW5nIG9mIGttYWxsb2MgcmV0dXJuCi0JCWlmICgkbGluZSA9fiAvXCpccypcKVxzKmtbY3ptXWFsbG9jXGIvKSB7CisJCWlmICgkbGluZSA9fiAvXCpccypcKVxzKltrdl1bY3ptXWFsbG9jKF9ub2RlKXswLDF9XGIvKSB7CiAJCQlXQVJOKCJ1bm5lY2Vzc2FyeSBjYXN0IG1heSBoaWRlIGJ1Z3MsIHNlZSBodHRwOi8vYy1mYXEuY29tL21hbGxvYy9tYWxsb2Nub2Nhc3QuaHRtbFxuIiAuICRoZXJlY3Vycik7CiAJCX0KIAorIyBjaGVjayBmb3IgbXVsdGlwbGUgc2VtaWNvbG9ucworCQlpZiAoJGxpbmUgPX4gLztccyo7XHMqJC8pIHsKKwkJICAgIFdBUk4oIlN0YXRlbWVudHMgdGVybWluYXRpb25zIHVzZSAxIHNlbWljb2xvblxuIiAuICRoZXJlY3Vycik7CisJCX0KKwogIyBjaGVjayBmb3IgZ2NjIHNwZWNpZmljIF9fRlVOQ1RJT05fXwogCQlpZiAoJGxpbmUgPX4gL19fRlVOQ1RJT05fXy8pIHsKIAkJCVdBUk4oIl9fZnVuY19fIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgZ2NjIHNwZWNpZmljIF9fRlVOQ1RJT05fX1xuIiAgLiAkaGVyZWN1cnIpOwpAQCAtMjg5Miw2ICsyOTAyLDExIEBACiAJCQkJRVJST1IoImxvY2tkZXBfbm9fdmFsaWRhdGUgY2xhc3MgaXMgcmVzZXJ2ZWQgZm9yIGRldmljZS0+bXV0ZXguXG4iIC4gJGhlcmVjdXJyKTsKIAkJCX0KIAkJfQorCisJCWlmICgkbGluZSA9fiAvZGVidWdmc19jcmVhdGVfZmlsZS4qU19JV1VHTy8gfHwKKwkJICAgICRsaW5lID1+IC9ERVZJQ0VfQVRUUi4qU19JV1VHTy8gKSB7CisJCQlXQVJOKCJFeHBvcnRpbmcgd29ybGQgd3JpdGFibGUgZmlsZXMgaXMgdXN1YWxseSBhbiBlcnJvci4gQ29uc2lkZXIgbW9yZSByZXN0cmljdGl2ZSBwZXJtaXNzaW9ucy5cbiIgLiAkaGVyZWN1cnIpOworCQl9CiAJfQogCiAJIyBJZiB3ZSBoYXZlIG5vIGlucHV0IGF0IGFsbCwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIHJlcG9ydCBvbgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5faW5pdHJhbWZzX2xpc3Quc2ggYi9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaAppbmRleCA1OTU4ZmZmLi41NWNhZWNkIDEwMDY0NAotLS0gYS9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaAorKysgYi9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaApAQCAtMjQzLDYgKzI0Myw4IEBACiAJCWVjaG8gIiRvdXRwdXRfZmlsZSIgfCBncmVwIC1xICJcLmd6JCIgJiYgY29tcHI9Imd6aXAgLTkgLWYiCiAJCWVjaG8gIiRvdXRwdXRfZmlsZSIgfCBncmVwIC1xICJcLmJ6MiQiICYmIGNvbXByPSJiemlwMiAtOSAtZiIKIAkJZWNobyAiJG91dHB1dF9maWxlIiB8IGdyZXAgLXEgIlwubHptYSQiICYmIGNvbXByPSJsem1hIC05IC1mIgorCQllY2hvICIkb3V0cHV0X2ZpbGUiIHwgZ3JlcCAtcSAiXC54eiQiICYmIFwKKwkJCQljb21wcj0ieHogLS1jaGVjaz1jcmMzMiAtLWx6bWEyPWRpY3Q9MU1pQiIKIAkJZWNobyAiJG91dHB1dF9maWxlIiB8IGdyZXAgLXEgIlwubHpvJCIgJiYgY29tcHI9Imx6b3AgLTkgLWYiCiAJCWVjaG8gIiRvdXRwdXRfZmlsZSIgfCBncmVwIC1xICJcLmNwaW8kIiAmJiBjb21wcj0iY2F0IgogCQlzaGlmdApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbCBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKaW5kZXggZDIxZWMzYS4uMTM5ZTBmZiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAorKysgYi9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCkBAIC0xMyw3ICsxMyw3IEBACiB1c2Ugc3RyaWN0OwogCiBteSAkUCA9ICQwOwotbXkgJFYgPSAnMC4yNi1iZXRhNic7CitteSAkViA9ICcwLjI2JzsKIAogdXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIG5vX2F1dG9fYWJicmV2KTsKIApAQCAtNDAsNyArNDAsNyBAQAogbXkgJG91dHB1dF9tdWx0aWxpbmUgPSAxOwogbXkgJG91dHB1dF9zZXBhcmF0b3IgPSAiLCAiOwogbXkgJG91dHB1dF9yb2xlcyA9IDA7Ci1teSAkb3V0cHV0X3JvbGVzdGF0cyA9IDA7CitteSAkb3V0cHV0X3JvbGVzdGF0cyA9IDE7CiBteSAkc2NtID0gMDsKIG15ICR3ZWIgPSAwOwogbXkgJHN1YnN5c3RlbSA9IDA7CkBAIC00OTQsNiArNDk0LDQwIEBACiAKIGV4aXQoJGV4aXQpOwogCitzdWIgcmFuZ2VfaXNfbWFpbnRhaW5lZCB7CisgICAgbXkgKCRzdGFydCwgJGVuZCkgPSBAXzsKKworICAgIGZvciAobXkgJGkgPSAkc3RhcnQ7ICRpIDwgJGVuZDsgJGkrKykgeworCW15ICRsaW5lID0gJHR5cGV2YWx1ZVskaV07CisJaWYgKCRsaW5lID1+IG0vXihcQyk6XHMqKC4qKS8pIHsKKwkgICAgbXkgJHR5cGUgPSAkMTsKKwkgICAgbXkgJHZhbHVlID0gJDI7CisJICAgIGlmICgkdHlwZSBlcSAnUycpIHsKKwkJaWYgKCR2YWx1ZSA9fiAvKG1haW50YWlufHN1cHBvcnQpL2kpIHsKKwkJICAgIHJldHVybiAxOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdWIgcmFuZ2VfaGFzX21haW50YWluZXIgeworICAgIG15ICgkc3RhcnQsICRlbmQpID0gQF87CisKKyAgICBmb3IgKG15ICRpID0gJHN0YXJ0OyAkaSA8ICRlbmQ7ICRpKyspIHsKKwlteSAkbGluZSA9ICR0eXBldmFsdWVbJGldOworCWlmICgkbGluZSA9fiBtL14oXEMpOlxzKiguKikvKSB7CisJICAgIG15ICR0eXBlID0gJDE7CisJICAgIG15ICR2YWx1ZSA9ICQyOworCSAgICBpZiAoJHR5cGUgZXEgJ00nKSB7CisJCXJldHVybiAxOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogc3ViIGdldF9tYWludGFpbmVycyB7CiAgICAgJWVtYWlsX2hhc2hfbmFtZSA9ICgpOwogICAgICVlbWFpbF9oYXNoX2FkZHJlc3MgPSAoKTsKQEAgLTU1Niw3ICs1OTAsOSBAQAogCQkJCW15ICRmaWxlX3BkID0gKCRmaWxlICA9fiB0ckAvQEApOwogCQkJCSR2YWx1ZV9wZCsrIGlmIChzdWJzdHIoJHZhbHVlLC0xLDEpIG5lICIvIik7CiAJCQkJJHZhbHVlX3BkID0gLTEgaWYgKCR2YWx1ZSA9fiAvXlwuXCovKTsKLQkJCQlpZiAoJHZhbHVlX3BkID49ICRmaWxlX3BkKSB7CisJCQkJaWYgKCR2YWx1ZV9wZCA+PSAkZmlsZV9wZCAmJgorCQkJCSAgICByYW5nZV9pc19tYWludGFpbmVkKCRzdGFydCwgJGVuZCkgJiYKKwkJCQkgICAgcmFuZ2VfaGFzX21haW50YWluZXIoJHN0YXJ0LCAkZW5kKSkgewogCQkJCSAgICAkZXhhY3RfcGF0dGVybl9tYXRjaF9oYXNoeyRmaWxlfSA9IDE7CiAJCQkJfQogCQkJCWlmICgkcGF0dGVybl9kZXB0aCA9PSAwIHx8CkBAIC03MjAsNyArNzU2LDggQEAKICAgLS1oZWxwID0+IHNob3cgdGhpcyBoZWxwIGluZm9ybWF0aW9uCiAKIERlZmF1bHQgb3B0aW9uczoKLSAgWy0tZW1haWwgLS1naXQgLS1tIC0tbiAtLWwgLS1tdWx0aWxpbmUgLS1wYXR0ZXJuLWRlcHRoPTAgLS1yZW1vdmUtZHVwbGljYXRlc10KKyAgWy0tZW1haWwgLS1ub2dpdCAtLWdpdC1mYWxsYmFjayAtLW0gLS1uIC0tbCAtLW11bHRpbGluZSAtcGF0dGVybi1kZXB0aD0wCisgICAtLXJlbW92ZS1kdXBsaWNhdGVzIC0tcm9sZXN0YXRzXQogCiBOb3RlczoKICAgVXNpbmcgIi1mIGRpcmVjdG9yeSIgbWF5IGdpdmUgdW5leHBlY3RlZCByZXN1bHRzOgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCmluZGV4IDk3ZDIyNTkuLmU4ZmJhOTUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYworKysgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKQEAgLTE2MTUsNyArMTYxNSw3IEBACiAgKiBBIG1vZHVsZSBpbmNsdWRlcyBhIG51bWJlciBvZiBzZWN0aW9ucyB0aGF0IGFyZSBkaXNjYXJkZWQKICAqIGVpdGhlciB3aGVuIGxvYWRlZCBvciB3aGVuIHVzZWQgYXMgYnVpbHQtaW4uCiAgKiBGb3IgbG9hZGVkIG1vZHVsZXMgYWxsIGZ1bmN0aW9ucyBtYXJrZWQgX19pbml0IGFuZCBhbGwgZGF0YQotICogbWFya2VkIF9faW5pdGRhdGEgd2lsbCBiZSBkaXNjYXJkZWQgd2hlbiB0aGUgbW9kdWxlIGhhcyBiZWVuIGludGlhbGl6ZWQuCisgKiBtYXJrZWQgX19pbml0ZGF0YSB3aWxsIGJlIGRpc2NhcmRlZCB3aGVuIHRoZSBtb2R1bGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCiAgKiBMaWtld2lzZSBmb3IgbW9kdWxlcyB1c2VkIGJ1aWx0LWluIHRoZSBzZWN0aW9ucyBtYXJrZWQgX19leGl0CiAgKiBhcmUgZGlzY2FyZGVkIGJlY2F1c2UgX19leGl0IG1hcmtlZCBmdW5jdGlvbiBhcmUgc3VwcG9zZWQgdG8gYmUgY2FsbGVkCiAgKiBvbmx5IHdoZW4gYSBtb2R1bGUgaXMgdW5sb2FkZWQgd2hpY2ggbmV2ZXIgaGFwcGVucyBmb3IgYnVpbHQtaW4gbW9kdWxlcy4KZGlmZiAtLWdpdCBhL3NjcmlwdHMveHpfd3JhcC5zaCBiL3NjcmlwdHMveHpfd3JhcC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2E1Nzk4Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy94el93cmFwLnNoCkBAIC0wLDAgKzEsMjMgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIGlzIGEgd3JhcHBlciBmb3IgeHogdG8gY29tcHJlc3MgdGhlIGtlcm5lbCBpbWFnZSB1c2luZyBhcHByb3ByaWF0ZQorIyBjb21wcmVzc2lvbiBvcHRpb25zIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLgorIworIyBBdXRob3I6IExhc3NlIENvbGxpbiA8bGFzc2UuY29sbGluQHR1a2Fhbmkub3JnPgorIworIyBUaGlzIGZpbGUgaGFzIGJlZW4gcHV0IGludG8gdGhlIHB1YmxpYyBkb21haW4uCisjIFlvdSBjYW4gZG8gd2hhdGV2ZXIgeW91IHdhbnQgd2l0aCB0aGlzIGZpbGUuCisjCisKK0JDSj0KK0xaTUEyT1BUUz0KKworY2FzZSAkQVJDSCBpbgorCXg4Nnx4ODZfNjQpICAgICBCQ0o9LS14ODYgOzsKKwlwb3dlcnBjKSAgICAgICAgQkNKPS0tcG93ZXJwYyA7OworCWlhNjQpICAgICAgICAgICBCQ0o9LS1pYTY0OyBMWk1BMk9QVFM9cGI9NCA7OworCWFybSkgICAgICAgICAgICBCQ0o9LS1hcm0gOzsKKwlzcGFyYykgICAgICAgICAgQkNKPS0tc3BhcmMgOzsKK2VzYWMKKworZXhlYyB4eiAtLWNoZWNrPWNyYzMyICRCQ0ogLS1sem1hMj0kTFpNQTJPUFRTLGRpY3Q9MzJNaUIKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvbWF0Y2guaCBiL3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvbWF0Y2guaAppbmRleCAxOWJhMTZlLi5hNGE4NjM5IDEwMDY0NAotLS0gYS9zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL21hdGNoLmgKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9tYXRjaC5oCkBAIC0yOCw3ICsyOCw3IEBACiAgKiBUaGUgZm9ybWF0IHVzZWQgZm9yIHRyYW5zaXRpb24gdGFibGVzIGlzIGJhc2VkIG9uIHRoZSBHTlUgZmxleCB0YWJsZQogICogZmlsZSBmb3JtYXQgKC0tdGFibGVzLWZpbGUgb3B0aW9uOyBzZWUgVGFibGUgRmlsZSBGb3JtYXQgaW4gdGhlIGZsZXgKICAqIGluZm8gcGFnZXMgYW5kIHRoZSBmbGV4IHNvdXJjZXMgZm9yIGRvY3VtZW50YXRpb24pLiBUaGUgbWFnaWMgbnVtYmVyCi0gKiB1c2VkIGluIHRoZSBoZWFkZXIgaXMgMHgxQjVFNzgzRCBpbnN0ZWQgb2YgMHhGMTNDNTdCMSB0aG91Z2gsIGJlY2F1c2UKKyAqIHVzZWQgaW4gdGhlIGhlYWRlciBpcyAweDFCNUU3ODNEIGluc3RlYWQgb2YgMHhGMTNDNTdCMSB0aG91Z2gsIGJlY2F1c2UKICAqIHRoZSBZWV9JRF9DSEsgKGNoZWNrKSBhbmQgWVlfSURfREVGIChkZWZhdWx0KSB0YWJsZXMgYXJlIHVzZWQKICAqIHNsaWdodGx5IGRpZmZlcmVudGx5IChzZWUgdGhlIGFwcGFybW9yLXBhcnNlciBwYWNrYWdlKS4KICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvYWM5N19idXMuYyBiL3NvdW5kL2FjOTdfYnVzLmMKaW5kZXggYTM1MWRkMC4uMmI1MGNiZSAxMDA2NDQKLS0tIGEvc291bmQvYWM5N19idXMuYworKysgYi9zb3VuZC9hYzk3X2J1cy5jCkBAIC0xOSw4ICsxOSw4IEBACiAKIC8qCiAgKiBMZXQgZHJpdmVycyBkZWNpZGUgd2hldGhlciB0aGV5IHdhbnQgdG8gc3VwcG9ydCBnaXZlbiBjb2RlYyBmcm9tIHRoZWlyCi0gKiBwcm9iZSBtZXRob2QuICBEcml2ZXJzIGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgc3RydWN0IHNuZF9hYzk3IHN0cnVjdHVyZSBhbmQgbWF5Ci0gKiBkZWNpZGUgYmFzZWQgb24gdGhlIGlkIGZpZWxkIGFtb25nc3Qgb3RoZXIgdGhpbmdzLgorICogcHJvYmUgbWV0aG9kLiBEcml2ZXJzIGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgc3RydWN0IHNuZF9hYzk3CisgKiBzdHJ1Y3R1cmUgYW5kIG1heSAgZGVjaWRlIGJhc2VkIG9uIHRoZSBpZCBmaWVsZCBhbW9uZ3N0IG90aGVyIHRoaW5ncy4KICAqLwogc3RhdGljIGludCBhYzk3X2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7CmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvY29kZWNzL29ueXguYyBiL3NvdW5kL2FvYS9jb2RlY3Mvb255eC5jCmluZGV4IDkxODUyZTQuLjM2ODdhNmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9jb2RlY3Mvb255eC5jCisrKyBiL3NvdW5kL2FvYS9jb2RlY3Mvb255eC5jCkBAIC0xMTE0LDcgKzExMTQsNiBAQAogCW9mX25vZGVfcHV0KG9ueXgtPmNvZGVjLm5vZGUpOwogCWlmIChvbnl4LT5jb2RlY19pbmZvKQogCQlrZnJlZShvbnl4LT5jb2RlY19pbmZvKTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBvbnl4KTsKIAlrZnJlZShvbnl4KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9jb3JlL2dwaW8tZmVhdHVyZS5jIGIvc291bmQvYW9hL2NvcmUvZ3Bpby1mZWF0dXJlLmMKaW5kZXggZGU4ZTAzYS4uZmFhMzE3NCAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2NvcmUvZ3Bpby1mZWF0dXJlLmMKKysrIGIvc291bmQvYW9hL2NvcmUvZ3Bpby1mZWF0dXJlLmMKQEAgLTI4NywxMCArMjg3LDkgQEAKIAkJZnJlZV9pcnEobGluZWluX2RldGVjdF9pcnEsICZydC0+bGluZV9pbl9ub3RpZnkpOwogCWlmIChydC0+bGluZV9vdXRfbm90aWZ5LmdwaW9fcHJpdmF0ZSkKIAkJZnJlZV9pcnEobGluZW91dF9kZXRlY3RfaXJxLCAmcnQtPmxpbmVfb3V0X25vdGlmeSk7Ci0JY2FuY2VsX2RlbGF5ZWRfd29yaygmcnQtPmhlYWRwaG9uZV9ub3RpZnkud29yayk7Ci0JY2FuY2VsX2RlbGF5ZWRfd29yaygmcnQtPmxpbmVfaW5fbm90aWZ5LndvcmspOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJ0LT5saW5lX291dF9ub3RpZnkud29yayk7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJ0LT5oZWFkcGhvbmVfbm90aWZ5LndvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQtPmxpbmVfaW5fbm90aWZ5LndvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQtPmxpbmVfb3V0X25vdGlmeS53b3JrKTsKIAltdXRleF9kZXN0cm95KCZydC0+aGVhZHBob25lX25vdGlmeS5tdXRleCk7CiAJbXV0ZXhfZGVzdHJveSgmcnQtPmxpbmVfaW5fbm90aWZ5Lm11dGV4KTsKIAltdXRleF9kZXN0cm95KCZydC0+bGluZV9vdXRfbm90aWZ5Lm11dGV4KTsKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9jb3JlL2dwaW8tcG1mLmMgYi9zb3VuZC9hb2EvY29yZS9ncGlvLXBtZi5jCmluZGV4IDdlMjY3YzkuLmM4ZDhhMWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9jb3JlL2dwaW8tcG1mLmMKKysrIGIvc291bmQvYW9hL2NvcmUvZ3Bpby1wbWYuYwpAQCAtMTA3LDEwICsxMDcsOSBAQAogCiAJLyogbWFrZSBzdXJlIG5vIHdvcmsgaXMgcGVuZGluZyBiZWZvcmUgZnJlZWluZwogCSAqIGFsbCB0aGluZ3MgKi8KLQljYW5jZWxfZGVsYXllZF93b3JrKCZydC0+aGVhZHBob25lX25vdGlmeS53b3JrKTsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZydC0+bGluZV9pbl9ub3RpZnkud29yayk7Ci0JY2FuY2VsX2RlbGF5ZWRfd29yaygmcnQtPmxpbmVfb3V0X25vdGlmeS53b3JrKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQtPmhlYWRwaG9uZV9ub3RpZnkud29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZydC0+bGluZV9pbl9ub3RpZnkud29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZydC0+bGluZV9vdXRfbm90aWZ5LndvcmspOwogCiAJbXV0ZXhfZGVzdHJveSgmcnQtPmhlYWRwaG9uZV9ub3RpZnkubXV0ZXgpOwogCW11dGV4X2Rlc3Ryb3koJnJ0LT5saW5lX2luX25vdGlmeS5tdXRleCk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2NvbnRyb2wuYyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCmluZGV4IDQ1YTgxODAuLjljZTAwZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvY29udHJvbC5jCisrKyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCkBAIC0xNDg4LDcgKzE0ODgsNyBAQAogfQogCiAvKgotICogRnJlcXVlbnRseSB1c2VkIGNvbnRyb2wgY2FsbGJhY2tzCisgKiBGcmVxdWVudGx5IHVzZWQgY29udHJvbCBjYWxsYmFja3MvaGVscGVycwogICovCiBpbnQgc25kX2N0bF9ib29sZWFuX21vbm9faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCkBAIC0xNTEzLDMgKzE1MTMsMjkgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChzbmRfY3RsX2Jvb2xlYW5fc3RlcmVvX2luZm8pOworCisvKioKKyAqIHNuZF9jdGxfZW51bV9pbmZvIC0gZmlsbHMgdGhlIGluZm8gc3RydWN0dXJlIGZvciBhbiBlbnVtZXJhdGVkIGNvbnRyb2wKKyAqIEBpbmZvOiB0aGUgc3RydWN0dXJlIHRvIGJlIGZpbGxlZAorICogQGNoYW5uZWxzOiB0aGUgbnVtYmVyIG9mIHRoZSBjb250cm9sJ3MgY2hhbm5lbHM7IG9mdGVuIG9uZQorICogQGl0ZW1zOiB0aGUgbnVtYmVyIG9mIGNvbnRyb2wgdmFsdWVzOyBhbHNvIHRoZSBzaXplIG9mIEBuYW1lcworICogQG5hbWVzOiBhbiBhcnJheSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBhbGwgY29udHJvbCB2YWx1ZXMKKyAqCisgKiBTZXRzIGFsbCByZXF1aXJlZCBmaWVsZHMgaW4gQGluZm8gdG8gdGhlaXIgYXBwcm9wcmlhdGUgdmFsdWVzLgorICogSWYgdGhlIGNvbnRyb2wncyBhY2Nlc3NpYmlsaXR5IGlzIG5vdCB0aGUgZGVmYXVsdCAocmVhZGFibGUgYW5kIHdyaXRhYmxlKSwKKyAqIHRoZSBjYWxsZXIgaGFzIHRvIGZpbGwgQGluZm8tPmFjY2Vzcy4KKyAqLworaW50IHNuZF9jdGxfZW51bV9pbmZvKHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNoYW5uZWxzLAorCQkgICAgICB1bnNpZ25lZCBpbnQgaXRlbXMsIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzW10pCit7CisJaW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwlpbmZvLT5jb3VudCA9IGNoYW5uZWxzOworCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSBpdGVtczsKKwlpZiAoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IGl0ZW1zKQorCQlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSBpdGVtcyAtIDE7CisJc3RybGNweShpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisJCW5hbWVzW2luZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0sCisJCXNpemVvZihpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUpKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc25kX2N0bF9lbnVtX2luZm8pOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbml0LmMgYi9zb3VuZC9jb3JlL2luaXQuYwppbmRleCA1N2I3OTJlMi4uM2U2NWRhMiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9pbml0LmMKKysrIGIvc291bmQvY29yZS9pbml0LmMKQEAgLTY0Miw3ICs2NDIsNyBAQAogICogIGV4dGVybmFsIGFjY2Vzc2VzLiAgVGh1cywgeW91IHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gYXQgdGhlIGVuZAogICogIG9mIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2FyZC4KICAqCi0gKiAgUmV0dXJucyB6ZXJvIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlIHJlZ2lzdHJhaW4gZmFpbGVkLgorICogIFJldHVybnMgemVybyBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZSByZWdpc3RyYXRpb24gZmFpbGVkLgogICovCiBpbnQgc25kX2NhcmRfcmVnaXN0ZXIoc3RydWN0IHNuZF9jYXJkICpjYXJkKQogewpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCmluZGV4IGI3NTNlYzYuLmEyZTRlYjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYworKysgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKQEAgLTQ1Myw4ICs0NTMsMTAgQEAKIAl9IGVsc2UgewogCQkqcGFyYW1zID0gKnNhdmU7CiAJCW1heCA9IHNuZF9wY21faHdfcGFyYW1fbWF4KHBjbSwgcGFyYW1zLCB2YXIsIG1heCwgJm1heGRpcik7Ci0JCWlmIChtYXggPCAwKQorCQlpZiAobWF4IDwgMCkgeworCQkJa2ZyZWUoc2F2ZSk7CiAJCQlyZXR1cm4gbWF4OworCQl9CiAJCWxhc3QgPSAxOwogCX0KICBfZW5kOgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbGliLmMgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwppbmRleCAxMTQ0NmExLi5hODJlMzc1NiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbGliLmMKKysrIGIvc291bmQvY29yZS9wY21fbGliLmMKQEAgLTM3Myw2ICszNzMsMjcgQEAKIAkJCSAgICh1bnNpZ25lZCBsb25nKW5ld19od19wdHIsCiAJCQkgICAodW5zaWduZWQgbG9uZylydW50aW1lLT5od19wdHJfYmFzZSk7CiAJfQorCisJaWYgKHJ1bnRpbWUtPm5vX3BlcmlvZF93YWtldXApIHsKKwkJLyoKKwkJICogV2l0aG91dCByZWd1bGFyIHBlcmlvZCBpbnRlcnJ1cHRzLCB3ZSBoYXZlIHRvIGNoZWNrCisJCSAqIHRoZSBlbGFwc2VkIHRpbWUgdG8gZGV0ZWN0IHhydW5zLgorCQkgKi8KKwkJamRlbHRhID0gamlmZmllcyAtIHJ1bnRpbWUtPmh3X3B0cl9qaWZmaWVzOworCQlpZiAoamRlbHRhIDwgcnVudGltZS0+aHdfcHRyX2J1ZmZlcl9qaWZmaWVzIC8gMikKKwkJCWdvdG8gbm9fZGVsdGFfY2hlY2s7CisJCWhkZWx0YSA9IGpkZWx0YSAtIGRlbHRhICogSFogLyBydW50aW1lLT5yYXRlOworCQl3aGlsZSAoaGRlbHRhID4gcnVudGltZS0+aHdfcHRyX2J1ZmZlcl9qaWZmaWVzIC8gMiArIDEpIHsKKwkJCWRlbHRhICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQkJaHdfYmFzZSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJCWlmIChod19iYXNlID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQorCQkJCWh3X2Jhc2UgPSAwOworCQkJbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7CisJCQloZGVsdGEgLT0gcnVudGltZS0+aHdfcHRyX2J1ZmZlcl9qaWZmaWVzOworCQl9CisJCWdvdG8gbm9fZGVsdGFfY2hlY2s7CisJfQorCiAJLyogc29tZXRoaW5nIG11c3QgYmUgcmVhbGx5IHdyb25nICovCiAJaWYgKGRlbHRhID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICsgcnVudGltZS0+cGVyaW9kX3NpemUpIHsKIAkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwKQEAgLTQ0Miw2ICs0NjMsNyBAQAogCQkJICAgICAobG9uZylvbGRfaHdfcHRyKTsKIAl9CiAKKyBub19kZWx0YV9jaGVjazoKIAlpZiAocnVudGltZS0+c3RhdHVzLT5od19wdHIgPT0gbmV3X2h3X3B0cikKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggZTgyYzFmOS4uNGJlNDVlNyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTQyMiw2ICs0MjIsOSBAQAogCXJ1bnRpbWUtPmluZm8gPSBwYXJhbXMtPmluZm87CiAJcnVudGltZS0+cmF0ZV9udW0gPSBwYXJhbXMtPnJhdGVfbnVtOwogCXJ1bnRpbWUtPnJhdGVfZGVuID0gcGFyYW1zLT5yYXRlX2RlbjsKKwlydW50aW1lLT5ub19wZXJpb2Rfd2FrZXVwID0KKwkJCShwYXJhbXMtPmluZm8gJiBTTkRSVl9QQ01fSU5GT19OT19QRVJJT0RfV0FLRVVQKSAmJgorCQkJKHBhcmFtcy0+ZmxhZ3MgJiBTTkRSVl9QQ01fSFdfUEFSQU1TX05PX1BFUklPRF9XQUtFVVApOwogCiAJYml0cyA9IHNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKHJ1bnRpbWUtPmZvcm1hdCk7CiAJcnVudGltZS0+c2FtcGxlX2JpdHMgPSBiaXRzOwpAQCAtOTg0LDcgKzk4Nyw3IEBACiAJaWYgKHB1c2gpCiAJCXNuZF9wY21fdXBkYXRlX2h3X3B0cihzdWJzdHJlYW0pOwogCS8qIFRoZSBqaWZmaWVzIGNoZWNrIGluIHNuZF9wY21fdXBkYXRlX2h3X3B0ciooKSBpcyBkb25lIGJ5Ci0JICogYSBkZWx0YSBiZXR3ZW4gdGhlIGN1cnJlbnQgamlmZmllcywgdGhpcyBnaXZlcyBhIGxhcmdlIGVub3VnaAorCSAqIGEgZGVsdGEgYmV0d2VlbiB0aGUgY3VycmVudCBqaWZmaWVzLCB0aGlzIGdpdmVzIGEgbGFyZ2UgZW5vdWdoCiAJICogZGVsdGEsIGVmZmVjdGl2ZWx5IHRvIHNraXAgdGhlIGNoZWNrIG9uY2UuCiAJICovCiAJc3Vic3RyZWFtLT5ydW50aW1lLT5od19wdHJfamlmZmllcyA9IGppZmZpZXMgLSBIWiAqIDEwMDA7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXEuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcS5jCmluZGV4IGJmMDlhNWEuLjExOWZkZGI2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXEuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXEuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgInNlcV90aW1lci5oIgogI2luY2x1ZGUgInNlcV9zeXN0ZW0uaCIKICNpbmNsdWRlICJzZXFfaW5mby5oIgorI2luY2x1ZGUgPHNvdW5kL21pbm9ycy5oPgogI2luY2x1ZGUgPHNvdW5kL3NlcV9kZXZpY2UuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1NORF9TRVFfRFVNTVlfTU9EVUxFKQpAQCAtNzMsNiArNzQsOSBAQAogbW9kdWxlX3BhcmFtKHNlcV9kZWZhdWx0X3RpbWVyX3Jlc29sdXRpb24sIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHNlcV9kZWZhdWx0X3RpbWVyX3Jlc29sdXRpb24sICJUaGUgZGVmYXVsdCB0aW1lciByZXNvbHV0aW9uIGluIEh6LiIpOwogCitNT0RVTEVfQUxJQVNfQ0hBUkRFVihDT05GSUdfU05EX01BSk9SLCBTTkRSVl9NSU5PUl9TRVFVRU5DRVIpOworTU9EVUxFX0FMSUFTKCJkZXZuYW1lOnNuZC9zZXEiKTsKKwogLyoKICAqICBJTklUIFBBUlQKICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zb3VuZC5jIGIvc291bmQvY29yZS9zb3VuZC5jCmluZGV4IDY2NjkxZmUuLjFjN2EzZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc291bmQuYworKysgYi9zb3VuZC9jb3JlL3NvdW5kLmMKQEAgLTE4OCwxNCArMTg4LDIyIEBACiB9OwogCiAjaWZkZWYgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUwotc3RhdGljIGludCBzbmRfZmluZF9mcmVlX21pbm9yKHZvaWQpCitzdGF0aWMgaW50IHNuZF9maW5kX2ZyZWVfbWlub3IoaW50IHR5cGUpCiB7CiAJaW50IG1pbm9yOwogCisJLyogc3RhdGljIG1pbm9ycyBmb3IgbW9kdWxlIGF1dG8gbG9hZGluZyAqLworCWlmICh0eXBlID09IFNORFJWX0RFVklDRV9UWVBFX1NFUVVFTkNFUikKKwkJcmV0dXJuIFNORFJWX01JTk9SX1NFUVVFTkNFUjsKKwlpZiAodHlwZSA9PSBTTkRSVl9ERVZJQ0VfVFlQRV9USU1FUikKKwkJcmV0dXJuIFNORFJWX01JTk9SX1RJTUVSOworCiAJZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgQVJSQVlfU0laRShzbmRfbWlub3JzKTsgKyttaW5vcikgewotCQkvKiBza2lwIG1pbm9ycyBzdGlsbCB1c2VkIHN0YXRpY2FsbHkgZm9yIGF1dG9sb2FkaW5nIGRldmljZXMgKi8KLQkJaWYgKFNORFJWX01JTk9SX0RFVklDRShtaW5vcikgPT0gU05EUlZfTUlOT1JfQ09OVFJPTCB8fAotCQkgICAgbWlub3IgPT0gU05EUlZfTUlOT1JfU0VRVUVOQ0VSKQorCQkvKiBza2lwIHN0YXRpYyBtaW5vcnMgc3RpbGwgdXNlZCBmb3IgbW9kdWxlIGF1dG8gbG9hZGluZyAqLworCQlpZiAoU05EUlZfTUlOT1JfREVWSUNFKG1pbm9yKSA9PSBTTkRSVl9NSU5PUl9DT05UUk9MKQorCQkJY29udGludWU7CisJCWlmIChtaW5vciA9PSBTTkRSVl9NSU5PUl9TRVFVRU5DRVIgfHwKKwkJICAgIG1pbm9yID09IFNORFJWX01JTk9SX1RJTUVSKQogCQkJY29udGludWU7CiAJCWlmICghc25kX21pbm9yc1ttaW5vcl0pCiAJCQlyZXR1cm4gbWlub3I7CkBAIC0yNjksNyArMjc3LDcgQEAKIAlwcmVnLT5wcml2YXRlX2RhdGEgPSBwcml2YXRlX2RhdGE7CiAJbXV0ZXhfbG9jaygmc291bmRfbXV0ZXgpOwogI2lmZGVmIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMKLQltaW5vciA9IHNuZF9maW5kX2ZyZWVfbWlub3IoKTsKKwltaW5vciA9IHNuZF9maW5kX2ZyZWVfbWlub3IodHlwZSk7CiAjZWxzZQogCW1pbm9yID0gc25kX2tlcm5lbF9taW5vcih0eXBlLCBjYXJkLCBkZXYpOwogCWlmIChtaW5vciA+PSAwICYmIHNuZF9taW5vcnNbbWlub3JdKQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS90aW1lci5jIGIvc291bmQvY29yZS90aW1lci5jCmluZGV4IDEzYWZiNjAuLmVkMDE2MzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvdGltZXIuYworKysgYi9zb3VuZC9jb3JlL3RpbWVyLmMKQEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfU05EX0hQRVQpIHx8IGRlZmluZWQoQ09ORklHX1NORF9IUEVUX01PRFVMRSkKLSNkZWZpbmUgREVGQVVMVF9USU1FUl9MSU1JVCAzCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0hSVElNRVIpIHx8IGRlZmluZWQoQ09ORklHX1NORF9IUlRJTUVSX01PRFVMRSkKKyNkZWZpbmUgREVGQVVMVF9USU1FUl9MSU1JVCA0CiAjZWxpZiBkZWZpbmVkKENPTkZJR19TTkRfUlRDVElNRVIpIHx8IGRlZmluZWQoQ09ORklHX1NORF9SVENUSU1FUl9NT0RVTEUpCiAjZGVmaW5lIERFRkFVTFRfVElNRVJfTElNSVQgMgogI2Vsc2UKQEAgLTUyLDYgKzUyLDkgQEAKIG1vZHVsZV9wYXJhbSh0aW1lcl90c3RhbXBfbW9ub3RvbmljLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh0aW1lcl90c3RhbXBfbW9ub3RvbmljLCAiVXNlIHBvc2l4IG1vbm90b25pYyBjbG9jayBzb3VyY2UgZm9yIHRpbWVzdGFtcHMgKGRlZmF1bHQpLiIpOwogCitNT0RVTEVfQUxJQVNfQ0hBUkRFVihDT05GSUdfU05EX01BSk9SLCBTTkRSVl9NSU5PUl9USU1FUik7CitNT0RVTEVfQUxJQVMoImRldm5hbWU6c25kL3RpbWVyIik7CisKIHN0cnVjdCBzbmRfdGltZXJfdXNlciB7CiAJc3RydWN0IHNuZF90aW1lcl9pbnN0YW5jZSAqdGltZXJpOwogCWludCB0cmVhZDsJCS8qIGVuaGFuY2VkIHJlYWQgd2l0aCB0aW1lc3RhbXBzIGFuZCBldmVudHMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbWw0MDMtYWM5N2NyLmMgYi9zb3VuZC9kcml2ZXJzL21sNDAzLWFjOTdjci5jCmluZGV4IGExMjgyYzEuLjVjZmNiOTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbWw0MDMtYWM5N2NyLmMKKysrIGIvc291bmQvZHJpdmVycy9tbDQwMy1hYzk3Y3IuYwpAQCAtMTE0Myw4ICsxMTQzLDggQEAKIAkJCQkJICAgICAocmVzb3VyY2UtPnN0YXJ0KSArIDEpOwogCWlmIChtbDQwM19hYzk3Y3ItPnBvcnQgPT0gTlVMTCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFNORF9NTDQwM19BQzk3Q1JfRFJJVkVSICI6ICIKLQkJCSAgICJ1bmFibGUgdG8gcmVtYXAgbWVtb3J5IHJlZ2lvbiAoJXggdG8gJXgpXG4iLAotCQkJICAgcmVzb3VyY2UtPnN0YXJ0LCByZXNvdXJjZS0+ZW5kKTsKKwkJCSAgICJ1bmFibGUgdG8gcmVtYXAgbWVtb3J5IHJlZ2lvbiAoJXBSKVxuIiwKKwkJCSAgIHJlc291cmNlKTsKIAkJc25kX21sNDAzX2FjOTdjcl9mcmVlKG1sNDAzX2FjOTdjcik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvaTJjL290aGVyL2FrNDExMy5jIGIvc291bmQvaTJjL290aGVyL2FrNDExMy5jCmluZGV4IDk3MWE4NGEuLmM0MjRkMzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2kyYy9vdGhlci9hazQxMTMuYworKysgYi9zb3VuZC9pMmMvb3RoZXIvYWs0MTEzLmMKQEAgLTU3LDggKzU3LDcgQEAKIHsKIAljaGlwLT5pbml0ID0gMTsJLyogZG9uJ3Qgc2NoZWR1bGUgbmV3IHdvcmsgKi8KIAltYigpOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNoaXAtPndvcmspOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZjaGlwLT53b3JrKTsKIAlrZnJlZShjaGlwKTsKIH0KIApAQCAtMTQxLDcgKzE0MCw3IEBACiB7CiAJY2hpcC0+aW5pdCA9IDE7CiAJbWIoKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX2RlbGF5ZWRfd29ya19zeW5jKCZjaGlwLT53b3JrKTsKIAlhazQxMTNfaW5pdF9yZWdzKGNoaXApOwogCS8qIGJyaW5nIHVwIHN0YXRpc3RpY3MgLyBldmVudCBxdWVpbmcgKi8KIAljaGlwLT5pbml0ID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9vdGhlci9hazQxMTQuYyBiL3NvdW5kL2kyYy9vdGhlci9hazQxMTQuYwppbmRleCAwMzQxNDUxLi5kOWZiNTM3IDEwMDY0NAotLS0gYS9zb3VuZC9pMmMvb3RoZXIvYWs0MTE0LmMKKysrIGIvc291bmQvaTJjL290aGVyL2FrNDExNC5jCkBAIC02Nyw4ICs2Nyw3IEBACiB7CiAJY2hpcC0+aW5pdCA9IDE7CS8qIGRvbid0IHNjaGVkdWxlIG5ldyB3b3JrICovCiAJbWIoKTsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZjaGlwLT53b3JrKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmY2hpcC0+d29yayk7CiAJa2ZyZWUoY2hpcCk7CiB9CiAKQEAgLTE1NCw3ICsxNTMsNyBAQAogewogCWNoaXAtPmluaXQgPSAxOwogCW1iKCk7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF9kZWxheWVkX3dvcmtfc3luYygmY2hpcC0+d29yayk7CiAJYWs0MTE0X2luaXRfcmVncyhjaGlwKTsKIAkvKiBicmluZyB1cCBzdGF0aXN0aWNzIC8gZXZlbnQgcXVlaW5nICovCiAJY2hpcC0+aW5pdCA9IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3BsM3NhMi5jIGIvc291bmQvaXNhL29wbDNzYTIuYwppbmRleCAyNjVhYmNjLi45YjkxNWUyIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3BsM3NhMi5jCisrKyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogCQlzbmRfcHJpbnRkKCJPUEwzLVNBIFsweCVseF0gZGV0ZWN0ICgxKSA9IDB4JXggKDB4JXgpXG4iLCBwb3J0LCB0bXAsIHRtcDEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JLyogdHJ5IGlmIHRoZSBNSUMgcmVnaXN0ZXIgaXMgYWNjZXNpYmxlICovCisJLyogdHJ5IGlmIHRoZSBNSUMgcmVnaXN0ZXIgaXMgYWNjZXNzaWJsZSAqLwogCXRtcCA9IHNuZF9vcGwzc2EyX3JlYWQoY2hpcCwgT1BMM1NBMl9NSUMpOwogCXNuZF9vcGwzc2EyX3dyaXRlKGNoaXAsIE9QTDNTQTJfTUlDLCAweDhhKTsKIAlpZiAoKCh0bXAxID0gc25kX29wbDNzYTJfcmVhZChjaGlwLCBPUEwzU0EyX01JQykpICYgMHg5ZikgIT0gMHg4YSkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL0tjb25maWcgYi9zb3VuZC9wY2kvS2NvbmZpZwppbmRleCAxMmUzNDY1Li45ODIzZDU5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgICAgIHRyaXN0YXRlCiAKIGNvbmZpZyBTTkRfT1hZR0VOCi0JdHJpc3RhdGUgIkMtTWVkaWEgODc4OCAoT3h5Z2VuKSIKKwl0cmlzdGF0ZSAiQy1NZWRpYSA4Nzg2LCA4Nzg3LCA4Nzg4IChPeHlnZW4pIgogCXNlbGVjdCBTTkRfT1hZR0VOX0xJQgogCXNlbGVjdCBTTkRfUENNCiAJc2VsZWN0IFNORF9NUFU0MDFfVUFSVApAQCAtMjE3LDEzICsyMTcsMTggQEAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIEMtTWVkaWEgQ01JODc4OCAoT3h5Z2VuIEhEIEF1ZGlvKSBjaGlwOgogCSAgICogQXNvdW5kIEEtODc4OAorCSAgICogQXN1cyBYb25hciBERwogCSAgICogQXV6ZW5UZWNoIFgtTWVyaWRpYW4KKwkgICAqIEF1emVuVGVjaCBYLU1lcmlkaWFuIDJHCiAJICAgKiBCZ2VhcnMgYi1FbnNwaXJlcgogCSAgICogQ2x1YjNEIFRoZWF0cm9uIERUUwogCSAgICogSFQtT21lZ2EgQ2xhcm8gKHBsdXMpCiAJICAgKiBIVC1PbWVnYSBDbGFybyBoYWxvIChYVCkKKwkgICAqIEt1cm91dG9zaGlrb3UgQ01JODc4Ny1IRzJQQ0kKIAkgICAqIFJhemVyIEJhcnJhY3VkYSBBQy0xCiAJICAgKiBTb25kaWdvIEluZmVybm8KKwkgICAqIFRlbXBvVGVjL01lZGlhVGVrIEhpRmllciBGYW50YXNpYQorCSAgICogVGVtcG9UZWMvTWVkaWFUZWsgSGlGaWVyIFNlcmVuYWRlCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1veHlnZW4uCkBAIC01NzgsMTggKzU4Myw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtaGRzcG0uCiAKLWNvbmZpZyBTTkRfSElGSUVSCi0JdHJpc3RhdGUgIlRlbXBvVGVjIEhpRmllciBGYW50YXNpYSIKLQlzZWxlY3QgU05EX09YWUdFTl9MSUIKLQlzZWxlY3QgU05EX1BDTQotCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIE1lZGlhVGVrL1RlbXBvVGVjIEhpRmllcgotCSAgRmFudGFzaWEgc291bmQgY2FyZC4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgc25kLWhpZmllci4KLQogY29uZmlnIFNORF9JQ0UxNzEyCiAJdHJpc3RhdGUgIklDRW5zZW1ibGUgSUNFMTcxMiAoRW52eTI0KSIKIAlzZWxlY3QgU05EX01QVTQwMV9VQVJUCkBAIC04MjYsOCArODE5LDggQEAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIEFzdXMgQVY2Ni9BVjEwMC9BVjIwMCBjaGlwcywgaS5lLiwgWG9uYXIgRDEsIERYLCBEMiwgRDJYLCBEUywKIAkgIEVzc2VuY2UgU1QgKERlbHV4ZSksIGFuZCBFc3NlbmNlIFNUWC4KLQkgIFN1cHBvcnQgZm9yIHRoZSBIREFWMS4zIChEZWx1eGUpIGlzIGluY29tcGxldGU7IGZvciB0aGUKLQkgIEhEQVYxLjMgU2xpbSBhbmQgWGVuc2UsIG1pc3NpbmcuCisJICBTdXBwb3J0IGZvciB0aGUgSERBVjEuMyAoRGVsdXhlKSBhbmQgSERBVjEuMyBTbGltIGlzIGV4cGVyaW1lbnRhbDsKKwkgIGZvciB0aGUgWGVuc2UsIG1pc3NpbmcuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC12aXJ0dW9zby4KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYwppbmRleCBhNzYzMGU5Li4wZmM2MTRjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCkBAIC0xMDE0LDggKzEwMTQsNyBAQAogewogCWlmIChhYzk3KSB7CiAjaWZkZWYgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmYWM5Ny0+cG93ZXJfd29yayk7Ci0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYWM5Ny0+cG93ZXJfd29yayk7CiAjZW5kaWYKIAkJc25kX2FjOTdfcHJvY19kb25lKGFjOTcpOwogCQlpZiAoYWM5Ny0+YnVzKQpAQCAtMjQ1Niw4ICsyNDU1LDcgQEAKIAlpZiAoYWM5Ny0+YnVpbGRfb3BzLT5zdXNwZW5kKQogCQlhYzk3LT5idWlsZF9vcHMtPnN1c3BlbmQoYWM5Nyk7CiAjaWZkZWYgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUKLQljYW5jZWxfZGVsYXllZF93b3JrKCZhYzk3LT5wb3dlcl93b3JrKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYWM5Ny0+cG93ZXJfd29yayk7CiAjZW5kaWYKIAlzbmRfYWM5N19wb3dlcmRvd24oYWM5Nyk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXp0MzMyOC5jIGIvc291bmQvcGNpL2F6dDMzMjguYwppbmRleCAyZjNjYWNiLi42MTE3NTk1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXp0MzMyOC5jCisrKyBiL3NvdW5kL3BjaS9henQzMzI4LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogIGF6dDMzMjguYyAtIGRyaXZlciBmb3IgQXp0ZWNoIEFaRjMzMjggYmFzZWQgc291bmRjYXJkcyAoZS5nLiBQQ0kxNjgpLgotICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSAtIDIwMDkgYnkgQW5kcmVhcyBNb2hyIDxhbmRpIEFUIGxpc2FzLmRlPgorICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSAtIDIwMTAgYnkgQW5kcmVhcyBNb2hyIDxhbmRpIEFUIGxpc2FzLmRlPgogICoKICAqICBGcmFtZXdvcmsgYm9ycm93ZWQgZnJvbSBCYXJ0IEhhcnRnZXJzJ3MgYWxzNDAwMC5jLgogICogIERyaXZlciBkZXZlbG9wZWQgb24gUENJMTY4IEFQKFcpIHZlcnNpb24gKFBDSSByZXYuIDEwLCBzdWJzeXN0ZW0gSUQgMTgwMSksCkBAIC0xNzUsNiArMTc1LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9idWcuaD4gLyogV0FSTl9PTkNFICovCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0yMDEsMTQgKzIwMiwxNSBAQAogCiAvKiA9PT0gRGVidWcgc2V0dGluZ3MgPT09CiAgIEZ1cnRoZXIgZGlhZ25vc3RpYyBmdW5jdGlvbmFsaXR5IHRoYW4gdGhlIHNldHRpbmdzIGJlbG93Ci0gIGRvZXMgbm90IG5lZWQgdG8gYmUgcHJvdmlkZWQsIHNpbmNlIG9uZSBjYW4gZWFzaWx5IHdyaXRlIGEgYmFzaCBzY3JpcHQKKyAgZG9lcyBub3QgbmVlZCB0byBiZSBwcm92aWRlZCwgc2luY2Ugb25lIGNhbiBlYXNpbHkgd3JpdGUgYSBQT1NJWCBzaGVsbCBzY3JpcHQKICAgdG8gZHVtcCB0aGUgY2FyZCdzIEkvTyBwb3J0cyAodGhvc2UgbGlzdGVkIGluIGxzcGNpIC12IC12KToKLSAgZnVuY3Rpb24gZHVtcCgpCisgIGR1bXAoKQogICB7CiAgICAgbG9jYWwgZGVzY3I9JDE7IGxvY2FsIGFkZHI9JDI7IGxvY2FsIGNvdW50PSQzCiAKICAgICBlY2hvICIke2Rlc2NyfTogJHtjb3VudH0gQCAke2FkZHJ9OiIKLSAgICBkZCBpZj0vZGV2L3BvcnQgc2tpcD0kWyR7YWRkcn1dIGNvdW50PSR7Y291bnR9IGJzPTEgMj4vZGV2L251bGx8IGhleGR1bXAgLUMKKyAgICBkZCBpZj0vZGV2L3BvcnQgc2tpcD1gcHJpbnRmICVkICR7YWRkcn1gIGNvdW50PSR7Y291bnR9IGJzPTEgXAorICAgICAgMj4vZGV2L251bGx8IGhleGR1bXAgLUMKICAgfQogICBhbmQgdGhlbiB1c2Ugc29tZXRoaW5nIGxpa2UKICAgImR1bXAgam95MjAwIDB4MjAwIDgiLCAiZHVtcCBtcHUzODggMHgzODggNCIsICJkdW1wIGpveSAweGI0MDAgOCIsCkBAIC0yMTYsMTQgKzIxOCwxNCBAQAogICBwb3NzaWJseSB3aXRoaW4gYSAid2hpbGUgdHJ1ZTsgZG8gLi4uIHNsZWVwIDE7IGRvbmUiIGxvb3AuCiAgIFR3ZWFraW5nIHBvcnRzIGNvdWxkIGJlIGRvbmUgdXNpbmcKICAgVkFMU1RSSU5HPSJgcHJpbnRmICIlMDJ4IiAkdmFsdWVgIgotICBwcmludGYgIlx4IiIkVkFMU1RSSU5HInxkZCBvZj0vZGV2L3BvcnQgc2Vlaz0kWyR7YWRkcn1dIGJzPTEgMj4vZGV2L251bGwKKyAgcHJpbnRmICJceCIiJFZBTFNUUklORyJ8ZGQgb2Y9L2Rldi9wb3J0IHNlZWs9YHByaW50ZiAlZCAke2FkZHJ9YCBicz0xIFwKKyAgICAyPi9kZXYvbnVsbAogKi8KIAogI2RlZmluZSBERUJVR19NSVNDCTAKICNkZWZpbmUgREVCVUdfQ0FMTFMJMAogI2RlZmluZSBERUJVR19NSVhFUgkwCiAjZGVmaW5lIERFQlVHX0NPREVDCTAKLSNkZWZpbmUgREVCVUdfSU8JMAogI2RlZmluZSBERUJVR19USU1FUgkwCiAjZGVmaW5lIERFQlVHX0dBTUUJMAogI2RlZmluZSBERUJVR19QTQkwCkBAIC0yOTEsMTkgKzI5MywyMyBAQAogbW9kdWxlX3BhcmFtKHNlcXRpbWVyX3NjYWxpbmcsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHNlcXRpbWVyX3NjYWxpbmcsICJTZXQgMTAyNDAwMEh6IHNlcXVlbmNlciB0aW1lciBzY2FsZSBmYWN0b3IgKGxvY2t1cCBkYW5nZXIhKS4gRGVmYXVsdCAxMjguIik7CiAKLXN0cnVjdCBzbmRfYXpmMzMyOF9jb2RlY19kYXRhIHsKLQl1bnNpZ25lZCBsb25nIGlvX2Jhc2U7Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07Ci0JYm9vbCBydW5uaW5nOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci19OwotCiBlbnVtIHNuZF9hemYzMzI4X2NvZGVjX3R5cGUgeworICAvKiB3YXJuaW5nOiBmaXhlZCBpbmRpY2VzIChhbHNvIHVzZWQgZm9yIGJpdG1hc2sgY2hlY2tzISkgKi8KICAgQVpGX0NPREVDX1BMQVlCQUNLID0gMCwKICAgQVpGX0NPREVDX0NBUFRVUkUgPSAxLAogICBBWkZfQ09ERUNfSTJTX09VVCA9IDIsCiB9OwogCitzdHJ1Y3Qgc25kX2F6ZjMzMjhfY29kZWNfZGF0YSB7CisJdW5zaWduZWQgbG9uZyBpb19iYXNlOyAvKiBrZWVwIGZpcnN0ISAoYXZvaWQgb2Zmc2V0IGNhbGMpICovCisJdW5zaWduZWQgaW50IGRtYV9iYXNlOyAvKiBoZWxwZXIgdG8gYXZvaWQgYW4gaW5kaXJlY3Rpb24gaW4gaG90cGF0aCAqLworCXNwaW5sb2NrX3QgKmxvY2s7IC8qIFRPRE86IGNvbnZlcnQgdG8gb3VyIG93biBwZXItY29kZWMgbG9jayBtZW1iZXIgKi8KKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlib29sIHJ1bm5pbmc7CisJZW51bSBzbmRfYXpmMzMyOF9jb2RlY190eXBlIHR5cGU7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKIHN0cnVjdCBzbmRfYXpmMzMyOCB7CiAJLyogb2Z0ZW4tdXNlZCBmaWVsZHMgdG93YXJkcyBiZWdpbm5pbmcsIHRoZW4gZ3JvdXBlZCAqLwogCkBAIC0zNjIsNiArMzY4LDkgQEAKIHN0YXRpYyBpbnQKIHNuZF9hemYzMzI4X2lvX3JlZ19zZXRiKHVuc2lnbmVkIHJlZywgdTggbWFzaywgYm9vbCBkb19zZXQpCiB7CisJLyogV2VsbCwgc3RyaWN0bHkgc3Bva2VuLCB0aGUgaW5iL291dGIgc2VxdWVuY2UgaXNuJ3QgYXRvbWljCisJICAgYW5kIHdvdWxkIG5lZWQgbG9ja2luZy4gSG93ZXZlciB3ZSBjdXJyZW50bHkgZG9uJ3QgY2FyZQorCSAgIHNpbmNlIGl0IHBvdGVudGlhbGx5IGNvbXBsaWNhdGVzIG1hdHRlcnMuICovCiAJdTggcHJldiA9IGluYihyZWcpLCBuZXc7CiAKIAluZXcgPSAoZG9fc2V0KSA/IChwcmV2fG1hc2spIDogKHByZXYgJiB+bWFzayk7CkBAIC00MTMsNiArNDIyLDIxIEBACiAJb3V0bCh2YWx1ZSwgY29kZWMtPmlvX2Jhc2UgKyByZWcpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK3NuZF9hemYzMzI4X2NvZGVjX291dGxfbXVsdGkoY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4X2NvZGVjX2RhdGEgKmNvZGVjLAorCQkJICAgICB1bnNpZ25lZCByZWcsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgaW50IGNvdW50CispCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gY29kZWMtPmlvX2Jhc2UgKyByZWc7CisJaWYgKGNvdW50KSB7CisJCWNvbnN0IHUzMiAqYnVmID0gYnVmZmVyOworCQlkbyB7CisJCQlvdXRsKCpidWYrKywgYWRkcik7CisJCQlhZGRyICs9IDQ7CisJCX0gd2hpbGUgKC0tY291bnQpOworCX0KK30KKwogc3RhdGljIGlubGluZSB1MzIKIHNuZF9hemYzMzI4X2NvZGVjX2lubChjb25zdCBzdHJ1Y3Qgc25kX2F6ZjMzMjhfY29kZWNfZGF0YSAqY29kZWMsIHVuc2lnbmVkIHJlZykKIHsKQEAgLTk0MywzOCArOTY3LDQzIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1zbmRfYXpmMzMyOF9jb2RlY19zZXRmbXQoc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwLAotCQkJICAgICAgIGVudW0gc25kX2F6ZjMzMjhfY29kZWNfdHlwZSBjb2RlY190eXBlLAorc25kX2F6ZjMzMjhfY29kZWNfc2V0Zm10KHN0cnVjdCBzbmRfYXpmMzMyOF9jb2RlY19kYXRhICpjb2RlYywKIAkJCSAgICAgICBlbnVtIGF6Zl9mcmVxX3QgYml0cmF0ZSwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0X3dpZHRoLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBjaGFubmVscwogKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4X2NvZGVjX2RhdGEgKmNvZGVjID0gJmNoaXAtPmNvZGVjc1tjb2RlY190eXBlXTsKIAl1MTYgdmFsID0gMHhmZjAwOworCXU4IGZyZXEgPSAwOwogCiAJc25kX2F6ZjMzMjhfZGJnY2FsbGVudGVyKCk7CiAJc3dpdGNoIChiaXRyYXRlKSB7Ci0JY2FzZSBBWkZfRlJFUV80MDAwOiAgdmFsIHw9IFNPVU5ERk9STUFUX0ZSRVFfU1VTUEVDVEVEXzQwMDA7IGJyZWFrOwotCWNhc2UgQVpGX0ZSRVFfNDgwMDogIHZhbCB8PSBTT1VOREZPUk1BVF9GUkVRX1NVU1BFQ1RFRF80ODAwOyBicmVhazsKLQljYXNlIEFaRl9GUkVRXzU1MTI6Ci0JCS8qIHRoZSBBWkYzMzI4IG5hbWVzIGl0ICI1NTEwIiBmb3Igc29tZSBzdHJhbmdlIHJlYXNvbiAqLwotCQkJICAgICB2YWwgfD0gU09VTkRGT1JNQVRfRlJFUV81NTEwOyBicmVhazsKLQljYXNlIEFaRl9GUkVRXzY2MjA6ICB2YWwgfD0gU09VTkRGT1JNQVRfRlJFUV82NjIwOyBicmVhazsKLQljYXNlIEFaRl9GUkVRXzgwMDA6ICB2YWwgfD0gU09VTkRGT1JNQVRfRlJFUV84MDAwOyBicmVhazsKLQljYXNlIEFaRl9GUkVRXzk2MDA6ICB2YWwgfD0gU09VTkRGT1JNQVRfRlJFUV85NjAwOyBicmVhazsKLQljYXNlIEFaRl9GUkVRXzExMDI1OiB2YWwgfD0gU09VTkRGT1JNQVRfRlJFUV8xMTAyNTsgYnJlYWs7Ci0JY2FzZSBBWkZfRlJFUV8xMzI0MDogdmFsIHw9IFNPVU5ERk9STUFUX0ZSRVFfU1VTUEVDVEVEXzEzMjQwOyBicmVhazsKLQljYXNlIEFaRl9GUkVRXzE2MDAwOiB2YWwgfD0gU09VTkRGT1JNQVRfRlJFUV8xNjAwMDsgYnJlYWs7Ci0JY2FzZSBBWkZfRlJFUV8yMjA1MDogdmFsIHw9IFNPVU5ERk9STUFUX0ZSRVFfMjIwNTA7IGJyZWFrOwotCWNhc2UgQVpGX0ZSRVFfMzIwMDA6IHZhbCB8PSBTT1VOREZPUk1BVF9GUkVRXzMyMDAwOyBicmVhazsKKyNkZWZpbmUgQVpGX0ZNVF9YTEFURShpbl9mcmVxLCBvdXRfYml0cykgXAorCWRvIHsgXAorCQljYXNlIEFaRl9GUkVRXyAjIyBpbl9mcmVxOiBcCisJCQlmcmVxID0gU09VTkRGT1JNQVRfRlJFUV8gIyMgb3V0X2JpdHM7IFwKKwkJCWJyZWFrOyBcCisJfSB3aGlsZSAoMCk7CisJQVpGX0ZNVF9YTEFURSg0MDAwLCBTVVNQRUNURURfNDAwMCkKKwlBWkZfRk1UX1hMQVRFKDQ4MDAsIFNVU1BFQ1RFRF80ODAwKQorCS8qIHRoZSBBWkYzMzI4IG5hbWVzIGl0ICI1NTEwIiBmb3Igc29tZSBzdHJhbmdlIHJlYXNvbjogKi8KKwlBWkZfRk1UX1hMQVRFKDU1MTIsIDU1MTApCisJQVpGX0ZNVF9YTEFURSg2NjIwLCA2NjIwKQorCUFaRl9GTVRfWExBVEUoODAwMCwgODAwMCkKKwlBWkZfRk1UX1hMQVRFKDk2MDAsIDk2MDApCisJQVpGX0ZNVF9YTEFURSgxMTAyNSwgMTEwMjUpCisJQVpGX0ZNVF9YTEFURSgxMzI0MCwgU1VTUEVDVEVEXzEzMjQwKQorCUFaRl9GTVRfWExBVEUoMTYwMDAsIDE2MDAwKQorCUFaRl9GTVRfWExBVEUoMjIwNTAsIDIyMDUwKQorCUFaRl9GTVRfWExBVEUoMzIwMDAsIDMyMDAwKQogCWRlZmF1bHQ6CiAJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJ1bmtub3duIGJpdHJhdGUgJWQsIGFzc3VtaW5nIDQ0LjFrSHohXG4iLCBiaXRyYXRlKTsKIAkJLyogZmFsbC10aHJvdWdoICovCi0JY2FzZSBBWkZfRlJFUV80NDEwMDogdmFsIHw9IFNPVU5ERk9STUFUX0ZSRVFfNDQxMDA7IGJyZWFrOwotCWNhc2UgQVpGX0ZSRVFfNDgwMDA6IHZhbCB8PSBTT1VOREZPUk1BVF9GUkVRXzQ4MDAwOyBicmVhazsKLQljYXNlIEFaRl9GUkVRXzY2MjAwOiB2YWwgfD0gU09VTkRGT1JNQVRfRlJFUV9TVVNQRUNURURfNjYyMDA7IGJyZWFrOworCUFaRl9GTVRfWExBVEUoNDQxMDAsIDQ0MTAwKQorCUFaRl9GTVRfWExBVEUoNDgwMDAsIDQ4MDAwKQorCUFaRl9GTVRfWExBVEUoNjYyMDAsIFNVU1BFQ1RFRF82NjIwMCkKKyN1bmRlZiBBWkZfRk1UX1hMQVRFCiAJfQogCS8qIHZhbCA9IDB4ZmYwNzsgM20yNy45OTNzICg2NTMwMUh6OyAtPiA2NDAwMEh6Pz8/KSBobW0sIDY2MTIwLCA2NTk2NywgNjYxMjMgKi8KIAkvKiB2YWwgPSAweGZmMDk7IDE3bTE1LjA5OHMgKDEzMTIzLDQ3OEh6OyAtPiAxMjAwMEh6Pz8/KSBobW0sIDEzMjM3LjJIej8gKi8KQEAgLTk4NiwxMyArMTAxNSwxNSBAQAogCS8qIHZhbCA9IDB4ZmYwZDsgNDFtMjMuMTM1cyAoNTUyMyw2MDBIejsgLT4gNTUxMkh6Pz8/KSAqLwogCS8qIHZhbCA9IDB4ZmYwZTsgMjhtMzAuNzc3cyAoODAxN0h6OyAtPiA4MDAwSHo/Pz8pICovCiAKKwl2YWwgfD0gZnJlcTsKKwogCWlmIChjaGFubmVscyA9PSAyKQogCQl2YWwgfD0gU09VTkRGT1JNQVRfRkxBR18yQ0hBTk5FTFM7CiAKIAlpZiAoZm9ybWF0X3dpZHRoID09IDE2KQogCQl2YWwgfD0gU09VTkRGT1JNQVRfRkxBR18xNkJJVDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKGNvZGVjLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBzZXQgYml0cmF0ZS9mb3JtYXQgKi8KIAlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNvZGVjLCBJRFhfSU9fQ09ERUNfU09VTkRGT1JNQVQsIHZhbCk7CkBAIC0xMDA0LDcgKzEwMzUsOCBAQAogCSAqIChGSVhNRTogeWVzLCBpdCB3b3JrcywgYnV0IHdoYXQgZXhhY3RseSBhbSBJIGRvaW5nIGhlcmU/PyA6KQogCSAqIEZJWE1FOiBkb2VzIHRoaXMgaGF2ZSBzb21lIHNpZGUgZWZmZWN0cyBmb3IgZnVsbC1kdXBsZXgKIAkgKiBvciBvdGhlciBkcmFtYXRpYyBzaWRlIGVmZmVjdHM/ICovCi0JaWYgKGNvZGVjX3R5cGUgPT0gQVpGX0NPREVDX1BMQVlCQUNLKSAvKiBvbmx5IGRvIGl0IGZvciBwbGF5YmFjayAqLworCS8qIGRvIGl0IGZvciBub24tY2FwdHVyZSBjb2RlY3Mgb25seSAqLworCWlmIChjb2RlYy0+dHlwZSAhPSBBWkZfQ09ERUNfQ0FQVFVSRSkKIAkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjb2RlYywgSURYX0lPX0NPREVDX0RNQV9GTEFHUywKIAkJCXNuZF9hemYzMzI4X2NvZGVjX2ludyhjb2RlYywgSURYX0lPX0NPREVDX0RNQV9GTEFHUykgfAogCQkJRE1BX1JVTl9TT01FVEhJTkcxIHwKQEAgLTEwMTQsMjAgKzEwNDYsMTkgQEAKIAkJCURNQV9TT01FVEhJTkdfRUxTRQogCQkpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNvZGVjLT5sb2NrLCBmbGFncyk7CiAJc25kX2F6ZjMzMjhfZGJnY2FsbGxlYXZlKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotc25kX2F6ZjMzMjhfY29kZWNfc2V0Zm10X2xvd3Bvd2VyKHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCwKLQkJCSAgICBlbnVtIHNuZF9hemYzMzI4X2NvZGVjX3R5cGUgY29kZWNfdHlwZQorc25kX2F6ZjMzMjhfY29kZWNfc2V0Zm10X2xvd3Bvd2VyKHN0cnVjdCBzbmRfYXpmMzMyOF9jb2RlY19kYXRhICpjb2RlYwogKQogewogCS8qIGNob29zZSBsb3dlc3QgZnJlcXVlbmN5IGZvciBsb3cgcG93ZXIgY29uc3VtcHRpb24uCiAJICogV2hpbGUgdGhpcyB3aWxsIGNhdXNlIGxvdWRlciBub2lzZSBkdWUgdG8gcmF0aGVyIGNvYXJzZSBmcmVxdWVuY3ksCiAJICogaXQgc2hvdWxkIG5ldmVyIG1hdHRlciBzaW5jZSBvdXRwdXQgc2hvdWxkIGFsd2F5cwogCSAqIGdldCBkaXNhYmxlZCBwcm9wZXJseSB3aGVuIGlkbGUgYW55d2F5LiAqLwotCXNuZF9hemYzMzI4X2NvZGVjX3NldGZtdChjaGlwLCBjb2RlY190eXBlLCBBWkZfRlJFUV80MDAwLCA4LCAxKTsKKwlzbmRfYXpmMzMyOF9jb2RlY19zZXRmbXQoY29kZWMsIEFaRl9GUkVRXzQwMDAsIDgsIDEpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTEwMSw2OSArMTEzMiw4NyBAQAogCQkvKiAuLi5hbmQgYWRqdXN0IGNsb2NrLCB0b28KIAkJICogKHJlZHVjZSBub2lzZSBhbmQgcG93ZXIgY29uc3VtcHRpb24pICovCiAJCWlmICghZW5hYmxlKQotCQkJc25kX2F6ZjMzMjhfY29kZWNfc2V0Zm10X2xvd3Bvd2VyKAotCQkJCWNoaXAsCi0JCQkJY29kZWNfdHlwZQotCQkJKTsKKwkJCXNuZF9hemYzMzI4X2NvZGVjX3NldGZtdF9sb3dwb3dlcihjb2RlYyk7CiAJCWNvZGVjLT5ydW5uaW5nID0gZW5hYmxlOwogCX0KIH0KIAogc3RhdGljIHZvaWQKLXNuZF9hemYzMzI4X2NvZGVjX3NldGRtYWEoc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwLAotCQkJCWVudW0gc25kX2F6ZjMzMjhfY29kZWNfdHlwZSBjb2RlY190eXBlLAorc25kX2F6ZjMzMjhfY29kZWNfc2V0ZG1hYShzdHJ1Y3Qgc25kX2F6ZjMzMjhfY29kZWNfZGF0YSAqY29kZWMsCiAJCQkJdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCXVuc2lnbmVkIGludCBjb3VudCwKLQkJCQl1bnNpZ25lZCBpbnQgc2l6ZQorCQkJCXVuc2lnbmVkIGludCBwZXJpb2RfYnl0ZXMsCisJCQkJdW5zaWduZWQgaW50IGJ1ZmZlcl9ieXRlcwogKQogewotCWNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOF9jb2RlY19kYXRhICpjb2RlYyA9ICZjaGlwLT5jb2RlY3NbY29kZWNfdHlwZV07CiAJc25kX2F6ZjMzMjhfZGJnY2FsbGVudGVyKCk7CisJV0FSTl9PTkNFKHBlcmlvZF9ieXRlcyAmIDEsICJvZGQgcGVyaW9kIGxlbmd0aCE/XG4iKTsKKwlXQVJOX09OQ0UoYnVmZmVyX2J5dGVzICE9IDIgKiBwZXJpb2RfYnl0ZXMsCisJCSAibWlzc2VkIG91ciBpbnB1dCBleHBlY3RhdGlvbnMhICV1IHZzLiAldVxuIiwKKwkJIGJ1ZmZlcl9ieXRlcywgcGVyaW9kX2J5dGVzKTsKIAlpZiAoIWNvZGVjLT5ydW5uaW5nKSB7CiAJCS8qIEFaRjMzMjggdXNlcyBhIHR3byBidWZmZXIgcG9pbnRlciBETUEgdHJhbnNmZXIgYXBwcm9hY2ggKi8KIAotCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBhZGRyX2FyZWEyOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCS8qIHdpZHRoIDMyYml0IChwcmV2ZW50IG92ZXJmbG93KTogKi8KLQkJdTMyIGNvdW50X2FyZWFzLCBsZW5ndGhzOworCQl1MzIgYXJlYV9sZW5ndGg7CisJCXN0cnVjdCBjb2RlY19zZXR1cF9pbyB7CisJCQl1MzIgZG1hX3N0YXJ0XzE7CisJCQl1MzIgZG1hX3N0YXJ0XzI7CisJCQl1MzIgZG1hX2xlbmd0aHM7CisJCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2V0dXBfaW87CiAKLQkJY291bnRfYXJlYXMgPSBzaXplLzI7Ci0JCWFkZHJfYXJlYTIgPSBhZGRyK2NvdW50X2FyZWFzOwotCQlzbmRfYXpmMzMyOF9kYmdjb2RlYygic2V0ZG1hOiBidWZmZXJzICUwOGx4WyV1XSAvICUwOGx4WyV1XVxuIiwKLQkJCQlhZGRyLCBjb3VudF9hcmVhcywgYWRkcl9hcmVhMiwgY291bnRfYXJlYXMpOworCQlhcmVhX2xlbmd0aCA9IGJ1ZmZlcl9ieXRlcy8yOwogCi0JCWNvdW50X2FyZWFzLS07IC8qIG1heC4gaW5kZXggKi8KKwkJc2V0dXBfaW8uZG1hX3N0YXJ0XzEgPSBhZGRyOworCQlzZXR1cF9pby5kbWFfc3RhcnRfMiA9IGFkZHIrYXJlYV9sZW5ndGg7CisKKwkJc25kX2F6ZjMzMjhfZGJnY29kZWMoCisJCQkic2V0ZG1hOiBidWZmZXJzICUwOHhbJXVdIC8gJTA4eFsldV0sICV1LCAldVxuIiwKKwkJCQlzZXR1cF9pby5kbWFfc3RhcnRfMSwgYXJlYV9sZW5ndGgsCisJCQkJc2V0dXBfaW8uZG1hX3N0YXJ0XzIsIGFyZWFfbGVuZ3RoLAorCQkJCXBlcmlvZF9ieXRlcywgYnVmZmVyX2J5dGVzKTsKKworCQkvKiBIbW0sIGFyZSB3ZSByZWFsbHkgc3VwcG9zZWQgdG8gZGVjcmVtZW50IHRoaXMgYnkgMT8/CisJCSAgIE1vc3QgZGVmaW5pdGVseSBjZXJ0YWlubHkgbm90OiBjb25maWd1cmluZyBmdWxsIGxlbmd0aCBkb2VzCisJCSAgIHdvcmsgcHJvcGVybHkgKGkuZS4gbGlrZWx5IGJldHRlciksIGFuZCBCVFcgd2UKKwkJICAgdmlvbGF0ZWQgcG9zc2libHkgZGlmZmVyaW5nIGZyYW1lIHNpemVzIHdpdGggdGhpcy4uLgorCisJCWFyZWFfbGVuZ3RoLS07IHwqIG1heC4gaW5kZXggKnwKKwkJKi8KIAogCQkvKiBidWlsZCBjb21iaW5lZCBJL08gYnVmZmVyIGxlbmd0aCB3b3JkICovCi0JCWxlbmd0aHMgPSAoY291bnRfYXJlYXMgPDwgMTYpIHwgKGNvdW50X2FyZWFzKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0JCXNuZF9hemYzMzI4X2NvZGVjX291dGwoY29kZWMsIElEWF9JT19DT0RFQ19ETUFfU1RBUlRfMSwgYWRkcik7Ci0JCXNuZF9hemYzMzI4X2NvZGVjX291dGwoY29kZWMsIElEWF9JT19DT0RFQ19ETUFfU1RBUlRfMiwKLQkJCQkJCQkJYWRkcl9hcmVhMik7Ci0JCXNuZF9hemYzMzI4X2NvZGVjX291dGwoY29kZWMsIElEWF9JT19DT0RFQ19ETUFfTEVOR1RIUywKLQkJCQkJCQkJbGVuZ3Rocyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJCXNldHVwX2lvLmRtYV9sZW5ndGhzID0gKGFyZWFfbGVuZ3RoIDw8IDE2KSB8IChhcmVhX2xlbmd0aCk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoY29kZWMtPmxvY2ssIGZsYWdzKTsKKwkJc25kX2F6ZjMzMjhfY29kZWNfb3V0bF9tdWx0aSgKKwkJCWNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX1NUQVJUXzEsICZzZXR1cF9pbywgMworCQkpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNvZGVjLT5sb2NrLCBmbGFncyk7CiAJfQogCXNuZF9hemYzMzI4X2RiZ2NhbGxsZWF2ZSgpOwogfQogCiBzdGF0aWMgaW50Ci1zbmRfYXpmMzMyOF9jb2RlY19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc25kX2F6ZjMzMjhfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7Ci0jaWYgMAotCXN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfYXpmMzMyOF9jb2RlY19kYXRhICpjb2RlYyA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKyNpZiAwCiAgICAgICAgIHVuc2lnbmVkIGludCBzaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CiAjZW5kaWYKIAogCXNuZF9hemYzMzI4X2RiZ2NhbGxlbnRlcigpOworCisJY29kZWMtPmRtYV9iYXNlID0gcnVudGltZS0+ZG1hX2FkZHI7CisKICNpZiAwCi0Jc25kX2F6ZjMzMjhfY29kZWNfc2V0Zm10KGNoaXAsIEFaRl9DT0RFQ18uLi4sCisJc25kX2F6ZjMzMjhfY29kZWNfc2V0Zm10KGNvZGVjLAogCQlydW50aW1lLT5yYXRlLAogCQlzbmRfcGNtX2Zvcm1hdF93aWR0aChydW50aW1lLT5mb3JtYXQpLAogCQlydW50aW1lLT5jaGFubmVscyk7Ci0Jc25kX2F6ZjMzMjhfY29kZWNfc2V0ZG1hYShjaGlwLCBBWkZfQ09ERUNfLi4uLAorCXNuZF9hemYzMzI4X2NvZGVjX3NldGRtYWEoY29kZWMsCiAJCQkJCXJ1bnRpbWUtPmRtYV9hZGRyLCBjb3VudCwgc2l6ZSk7CiAjZW5kaWYKIAlzbmRfYXpmMzMyOF9kYmdjYWxsbGVhdmUoKTsKQEAgLTExNzEsMjQgKzEyMjAsMjMgQEAKIH0KIAogc3RhdGljIGludAotc25kX2F6ZjMzMjhfY29kZWNfdHJpZ2dlcihlbnVtIHNuZF9hemYzMzI4X2NvZGVjX3R5cGUgY29kZWNfdHlwZSwKLQkJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQorc25kX2F6ZjMzMjhfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCiB7CiAJc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCWNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOF9jb2RlY19kYXRhICpjb2RlYyA9ICZjaGlwLT5jb2RlY3NbY29kZWNfdHlwZV07CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX2F6ZjMzMjhfY29kZWNfZGF0YSAqY29kZWMgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJaW50IHJlc3VsdCA9IDA7CiAJdTE2IGZsYWdzMTsKIAlib29sIHByZXZpb3VzbHlfbXV0ZWQgPSAwOwotCWJvb2wgaXNfcGxheWJhY2tfY29kZWMgPSAoQVpGX0NPREVDX1BMQVlCQUNLID09IGNvZGVjX3R5cGUpOworCWJvb2wgaXNfbWFpbl9taXhlcl9wbGF5YmFja19jb2RlYyA9IChBWkZfQ09ERUNfUExBWUJBQ0sgPT0gY29kZWMtPnR5cGUpOwogCi0Jc25kX2F6ZjMzMjhfZGJnY2FsbHMoInNuZF9hemYzMzI4X2NvZGVjX3RyaWdnZXIgY21kICVkXG4iLCBjbWQpOworCXNuZF9hemYzMzI4X2RiZ2NhbGxzKCJzbmRfYXpmMzMyOF9wY21fdHJpZ2dlciBjbWQgJWRcbiIsIGNtZCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJCXNuZF9hemYzMzI4X2RiZ2NvZGVjKCJTVEFSVCAlc1xuIiwgY29kZWMtPm5hbWUpOwogCi0JCWlmIChpc19wbGF5YmFja19jb2RlYykgeworCQlpZiAoaXNfbWFpbl9taXhlcl9wbGF5YmFja19jb2RlYykgewogCQkJLyogbXV0ZSBXYXZlT3V0IChhdm9pZCBjbGlja2luZyBkdXJpbmcgc2V0dXApICovCiAJCQlwcmV2aW91c2x5X211dGVkID0KIAkJCQlzbmRfYXpmMzMyOF9taXhlcl9zZXRfbXV0ZSgKQEAgLTExOTYsMTIgKzEyNDQsMTIgQEAKIAkJCQkpOwogCQl9CiAKLQkJc25kX2F6ZjMzMjhfY29kZWNfc2V0Zm10KGNoaXAsIGNvZGVjX3R5cGUsCisJCXNuZF9hemYzMzI4X2NvZGVjX3NldGZtdChjb2RlYywKIAkJCXJ1bnRpbWUtPnJhdGUsCiAJCQlzbmRfcGNtX2Zvcm1hdF93aWR0aChydW50aW1lLT5mb3JtYXQpLAogCQkJcnVudGltZS0+Y2hhbm5lbHMpOwogCi0JCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOworCQlzcGluX2xvY2soY29kZWMtPmxvY2spOwogCQkvKiBmaXJzdCwgcmVtZW1iZXIgY3VycmVudCB2YWx1ZTogKi8KIAkJZmxhZ3MxID0gc25kX2F6ZjMzMjhfY29kZWNfaW53KGNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX0ZMQUdTKTsKIApAQCAtMTIxMSwxNCArMTI1OSwxNCBAQAogCiAJCS8qIEZJWE1FOiBjbGVhciBpbnRlcnJ1cHRzIG9yIHdoYXQ/Pz8gKi8KIAkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjb2RlYywgSURYX0lPX0NPREVDX0lSUVRZUEUsIDB4ZmZmZik7Ci0JCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CisJCXNwaW5fdW5sb2NrKGNvZGVjLT5sb2NrKTsKIAotCQlzbmRfYXpmMzMyOF9jb2RlY19zZXRkbWFhKGNoaXAsIGNvZGVjX3R5cGUsIHJ1bnRpbWUtPmRtYV9hZGRyLAorCQlzbmRfYXpmMzMyOF9jb2RlY19zZXRkbWFhKGNvZGVjLCBydW50aW1lLT5kbWFfYWRkciwKIAkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pLAogCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSkKIAkJKTsKIAotCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKKwkJc3Bpbl9sb2NrKGNvZGVjLT5sb2NrKTsKICNpZmRlZiBXSU45WAogCQkvKiBGSVhNRTogZW5hYmxlIHBsYXliYWNrL3JlY29yZGluZz8/PyAqLwogCQlmbGFnczEgfD0gRE1BX1JVTl9TT01FVEhJTkcxIHwgRE1BX1JVTl9TT01FVEhJTkcyOwpAQCAtMTI0MiwxMCArMTI5MCwxMCBAQAogCQkJRE1BX0VQSUxPR1VFX1NPTUVUSElORyB8CiAJCQlETUFfU09NRVRISU5HX0VMU0UpOwogI2VuZGlmCi0JCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7Ci0JCXNuZF9hemYzMzI4X2N0cmxfY29kZWNfYWN0aXZpdHkoY2hpcCwgY29kZWNfdHlwZSwgMSk7CisJCXNwaW5fdW5sb2NrKGNvZGVjLT5sb2NrKTsKKwkJc25kX2F6ZjMzMjhfY3RybF9jb2RlY19hY3Rpdml0eShjaGlwLCBjb2RlYy0+dHlwZSwgMSk7CiAKLQkJaWYgKGlzX3BsYXliYWNrX2NvZGVjKSB7CisJCWlmIChpc19tYWluX21peGVyX3BsYXliYWNrX2NvZGVjKSB7CiAJCQkvKiBub3cgdW5tdXRlIFdhdmVPdXQgKi8KIAkJCWlmICghcHJldmlvdXNseV9tdXRlZCkKIAkJCQlzbmRfYXpmMzMyOF9taXhlcl9zZXRfbXV0ZSgKQEAgLTEyNTgsMTkgKzEzMDYsMTkgQEAKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKIAkJc25kX2F6ZjMzMjhfZGJnY29kZWMoIlJFU1VNRSAlc1xuIiwgY29kZWMtPm5hbWUpOwogCQkvKiByZXN1bWUgY29kZWMgaWYgd2Ugd2VyZSBhY3RpdmUgKi8KLQkJc3Bpbl9sb2NrKCZjaGlwLT5yZWdfbG9jayk7CisJCXNwaW5fbG9jayhjb2RlYy0+bG9jayk7CiAJCWlmIChjb2RlYy0+cnVubmluZykKIAkJCXNuZF9hemYzMzI4X2NvZGVjX291dHcoY29kZWMsIElEWF9JT19DT0RFQ19ETUFfRkxBR1MsCiAJCQkJc25kX2F6ZjMzMjhfY29kZWNfaW53KAogCQkJCQljb2RlYywgSURYX0lPX0NPREVDX0RNQV9GTEFHUwogCQkJCSkgfCBETUFfUkVTVU1FCiAJCQkpOwotCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOworCQlzcGluX3VubG9jayhjb2RlYy0+bG9jayk7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKIAkJc25kX2F6ZjMzMjhfZGJnY29kZWMoIlNUT1AgJXNcbiIsIGNvZGVjLT5uYW1lKTsKIAotCQlpZiAoaXNfcGxheWJhY2tfY29kZWMpIHsKKwkJaWYgKGlzX21haW5fbWl4ZXJfcGxheWJhY2tfY29kZWMpIHsKIAkJCS8qIG11dGUgV2F2ZU91dCAoYXZvaWQgY2xpY2tpbmcgZHVyaW5nIHNldHVwKSAqLwogCQkJcHJldmlvdXNseV9tdXRlZCA9CiAJCQkJc25kX2F6ZjMzMjhfbWl4ZXJfc2V0X211dGUoCkBAIC0xMjc4LDcgKzEzMjYsNyBAQAogCQkJCSk7CiAJCX0KIAotCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKKwkJc3Bpbl9sb2NrKGNvZGVjLT5sb2NrKTsKIAkJLyogZmlyc3QsIHJlbWVtYmVyIGN1cnJlbnQgdmFsdWU6ICovCiAJCWZsYWdzMSA9IHNuZF9hemYzMzI4X2NvZGVjX2ludyhjb2RlYywgSURYX0lPX0NPREVDX0RNQV9GTEFHUyk7CiAKQEAgLTEyOTMsMTAgKzEzNDEsMTAgQEAKIAogCQlmbGFnczEgJj0gfkRNQV9SVU5fU09NRVRISU5HMTsKIAkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjb2RlYywgSURYX0lPX0NPREVDX0RNQV9GTEFHUywgZmxhZ3MxKTsKLQkJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKLQkJc25kX2F6ZjMzMjhfY3RybF9jb2RlY19hY3Rpdml0eShjaGlwLCBjb2RlY190eXBlLCAwKTsKKwkJc3Bpbl91bmxvY2soY29kZWMtPmxvY2spOworCQlzbmRfYXpmMzMyOF9jdHJsX2NvZGVjX2FjdGl2aXR5KGNoaXAsIGNvZGVjLT50eXBlLCAwKTsKIAotCQlpZiAoaXNfcGxheWJhY2tfY29kZWMpIHsKKwkJaWYgKGlzX21haW5fbWl4ZXJfcGxheWJhY2tfY29kZWMpIHsKIAkJCS8qIG5vdyB1bm11dGUgV2F2ZU91dCAqLwogCQkJaWYgKCFwcmV2aW91c2x5X211dGVkKQogCQkJCXNuZF9hemYzMzI4X21peGVyX3NldF9tdXRlKApAQCAtMTMzMCw2NyArMTM3OCwyOSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbnQKLXNuZF9hemYzMzI4X2NvZGVjX3BsYXliYWNrX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCi17Ci0JcmV0dXJuIHNuZF9hemYzMzI4X2NvZGVjX3RyaWdnZXIoQVpGX0NPREVDX1BMQVlCQUNLLCBzdWJzdHJlYW0sIGNtZCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNuZF9hemYzMzI4X2NvZGVjX2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKLXsKLQlyZXR1cm4gc25kX2F6ZjMzMjhfY29kZWNfdHJpZ2dlcihBWkZfQ09ERUNfQ0FQVFVSRSwgc3Vic3RyZWFtLCBjbWQpOwotfQotCi1zdGF0aWMgaW50Ci1zbmRfYXpmMzMyOF9jb2RlY19pMnNfb3V0X3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCi17Ci0JcmV0dXJuIHNuZF9hemYzMzI4X2NvZGVjX3RyaWdnZXIoQVpGX0NPREVDX0kyU19PVVQsIHN1YnN0cmVhbSwgY21kKTsKLX0KLQogc3RhdGljIHNuZF9wY21fdWZyYW1lc190Ci1zbmRfYXpmMzMyOF9jb2RlY19wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJICBlbnVtIHNuZF9hemYzMzI4X2NvZGVjX3R5cGUgY29kZWNfdHlwZQorc25kX2F6ZjMzMjhfcGNtX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0KICkKIHsKLQljb25zdCBzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0JY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4X2NvZGVjX2RhdGEgKmNvZGVjID0gJmNoaXAtPmNvZGVjc1tjb2RlY190eXBlXTsKLQl1bnNpZ25lZCBsb25nIGJ1ZnB0ciwgcmVzdWx0OworCWNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOF9jb2RlY19kYXRhICpjb2RlYyA9CisJCXN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OwogCXNuZF9wY21fdWZyYW1lc190IGZybXJlczsKIAotI2lmZGVmIFFVRVJZX0hBUkRXQVJFCi0JYnVmcHRyID0gc25kX2F6ZjMzMjhfY29kZWNfaW5sKGNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX1NUQVJUXzEpOwotI2Vsc2UKLQlidWZwdHIgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hZGRyOwotI2VuZGlmCiAJcmVzdWx0ID0gc25kX2F6ZjMzMjhfY29kZWNfaW5sKGNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX0NVUlJQT1MpOwogCiAJLyogY2FsY3VsYXRlIG9mZnNldCAqLwotCXJlc3VsdCAtPSBidWZwdHI7CisjaWZkZWYgUVVFUllfSEFSRFdBUkUKKwlyZXN1bHQgLT0gc25kX2F6ZjMzMjhfY29kZWNfaW5sKGNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX1NUQVJUXzEpOworI2Vsc2UKKwlyZXN1bHQgLT0gY29kZWMtPmRtYV9iYXNlOworI2VuZGlmCiAJZnJtcmVzID0gYnl0ZXNfdG9fZnJhbWVzKCBzdWJzdHJlYW0tPnJ1bnRpbWUsIHJlc3VsdCk7Ci0Jc25kX2F6ZjMzMjhfZGJnY29kZWMoIiVzIEAgMHglOGx4LCBmcmFtZXMgJThsZFxuIiwKLQkJCQljb2RlYy0+bmFtZSwgcmVzdWx0LCBmcm1yZXMpOworCXNuZF9hemYzMzI4X2RiZ2NvZGVjKCIlMDhsaSAlcyBAIDB4JThseCwgZnJhbWVzICU4bGRcbiIsCisJCQkJamlmZmllcywgY29kZWMtPm5hbWUsIHJlc3VsdCwgZnJtcmVzKTsKIAlyZXR1cm4gZnJtcmVzOwogfQogCi1zdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKLXNuZF9hemYzMzI4X2NvZGVjX3BsYXliYWNrX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0JcmV0dXJuIHNuZF9hemYzMzI4X2NvZGVjX3BvaW50ZXIoc3Vic3RyZWFtLCBBWkZfQ09ERUNfUExBWUJBQ0spOwotfQotCi1zdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKLXNuZF9hemYzMzI4X2NvZGVjX2NhcHR1cmVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlyZXR1cm4gc25kX2F6ZjMzMjhfY29kZWNfcG9pbnRlcihzdWJzdHJlYW0sIEFaRl9DT0RFQ19DQVBUVVJFKTsKLX0KLQotc3RhdGljIHNuZF9wY21fdWZyYW1lc190Ci1zbmRfYXpmMzMyOF9jb2RlY19pMnNfb3V0X3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0JcmV0dXJuIHNuZF9hemYzMzI4X2NvZGVjX3BvaW50ZXIoc3Vic3RyZWFtLCBBWkZfQ09ERUNfSTJTX09VVCk7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpZmRlZiBTVVBQT1JUX0dBTUVQT1JUCkBAIC0xNTMyLDcgKzE1NDIsNyBAQAogCQl9CiAJfQogCi0JLyogdHJpZ2dlciBuZXh0IGF4ZXMgc2FtcGxpbmcsIHRvIGJlIGV2YWx1YXRlZCB0aGUgbmV4dCB0aW1lIHdlCisJLyogdHJpZ2dlciBuZXh0IHNhbXBsaW5nIG9mIGF4ZXMsIHRvIGJlIGV2YWx1YXRlZCB0aGUgbmV4dCB0aW1lIHdlCiAJICogZW50ZXIgdGhpcyBmdW5jdGlvbiAqLwogCiAJLyogZm9yIHNvbWUgdmVyeSwgdmVyeSBzdHJhbmdlIHJlYXNvbiB3ZSBjYW5ub3QgZW5hYmxlCkBAIC0xNjI0LDI5ICsxNjM0LDI5IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotc25kX2F6ZjMzMjhfY29kZWNfaW50ZXJydXB0KHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCwgdTggc3RhdHVzKQorc25kX2F6ZjMzMjhfcGNtX2ludGVycnVwdChjb25zdCBzdHJ1Y3Qgc25kX2F6ZjMzMjhfY29kZWNfZGF0YSAqZmlyc3RfY29kZWMsCisJCQkgIHU4IHN0YXR1cworKQogewogCXU4IHdoaWNoOwogCWVudW0gc25kX2F6ZjMzMjhfY29kZWNfdHlwZSBjb2RlY190eXBlOwotCWNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOF9jb2RlY19kYXRhICpjb2RlYzsKKwljb25zdCBzdHJ1Y3Qgc25kX2F6ZjMzMjhfY29kZWNfZGF0YSAqY29kZWMgPSBmaXJzdF9jb2RlYzsKIAogCWZvciAoY29kZWNfdHlwZSA9IEFaRl9DT0RFQ19QTEFZQkFDSzsKIAkJIGNvZGVjX3R5cGUgPD0gQVpGX0NPREVDX0kyU19PVVQ7Ci0JCQkgKytjb2RlY190eXBlKSB7CisJCQkgKytjb2RlY190eXBlLCArK2NvZGVjKSB7CiAKIAkJLyogc2tpcCBjb2RlYyBpZiB0aGVyZSdzIG5vIGludGVycnVwdCBmb3IgaXQgKi8KIAkJaWYgKCEoc3RhdHVzICYgKDEgPDwgY29kZWNfdHlwZSkpKQogCQkJY29udGludWU7CiAKLQkJY29kZWMgPSAmY2hpcC0+Y29kZWNzW2NvZGVjX3R5cGVdOwotCi0JCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOworCQlzcGluX2xvY2soY29kZWMtPmxvY2spOwogCQl3aGljaCA9IHNuZF9hemYzMzI4X2NvZGVjX2luYihjb2RlYywgSURYX0lPX0NPREVDX0lSUVRZUEUpOwogCQkvKiBhY2sgYWxsIElSUSB0eXBlcyBpbW1lZGlhdGVseSAqLwogCQlzbmRfYXpmMzMyOF9jb2RlY19vdXRiKGNvZGVjLCBJRFhfSU9fQ09ERUNfSVJRVFlQRSwgd2hpY2gpOwotCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOworCQlzcGluX3VubG9jayhjb2RlYy0+bG9jayk7CiAKLQkJaWYgKChjaGlwLT5wY21bY29kZWNfdHlwZV0pICYmIChjb2RlYy0+c3Vic3RyZWFtKSkgeworCQlpZiAoY29kZWMtPnN1YnN0cmVhbSkgewogCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjb2RlYy0+c3Vic3RyZWFtKTsKIAkJCXNuZF9hemYzMzI4X2RiZ2NvZGVjKCIlcyBwZXJpb2QgZG9uZSAoIyV4KSwgQCAleFxuIiwKIAkJCQljb2RlYy0+bmFtZSwKQEAgLTE3MDEsNyArMTcxMSw3IEBACiAJfQogCiAJaWYgKHN0YXR1cyAmIChJUlFfUExBWUJBQ0t8SVJRX1JFQ09SRElOR3xJUlFfSTJTX09VVCkpCi0JCXNuZF9hemYzMzI4X2NvZGVjX2ludGVycnVwdChjaGlwLCBzdGF0dXMpOworCQlzbmRfYXpmMzMyOF9wY21faW50ZXJydXB0KGNoaXAtPmNvZGVjcywgc3RhdHVzKTsKIAogCWlmIChzdGF0dXMgJiBJUlFfR0FNRVBPUlQpCiAJCXNuZF9hemYzMzI4X2dhbWVwb3J0X2ludGVycnVwdChjaGlwKTsKQEAgLTE3ODksMTAxICsxNzk5LDg1IEBACiB7CiAJc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9hemYzMzI4X2NvZGVjX2RhdGEgKmNvZGVjID0gJmNoaXAtPmNvZGVjc1tjb2RlY190eXBlXTsKIAogCXNuZF9hemYzMzI4X2RiZ2NhbGxlbnRlcigpOwotCWNoaXAtPmNvZGVjc1tjb2RlY190eXBlXS5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJY29kZWMtPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKIAogCS8qIHNhbWUgcGFyYW1ldGVycyBmb3IgYWxsIG91ciBjb2RlY3MgLSBhdCBsZWFzdCB3ZSB0aGluayBzby4uLiAqLwogCXJ1bnRpbWUtPmh3ID0gc25kX2F6ZjMzMjhfaGFyZHdhcmU7CiAKIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKIAkJCQkgICAmc25kX2F6ZjMzMjhfaHdfY29uc3RyYWludHNfcmF0ZXMpOworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGNvZGVjOwogCXNuZF9hemYzMzI4X2RiZ2NhbGxsZWF2ZSgpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50Ci1zbmRfYXpmMzMyOF9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc25kX2F6ZjMzMjhfcGNtX3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJcmV0dXJuIHNuZF9hemYzMzI4X3BjbV9vcGVuKHN1YnN0cmVhbSwgQVpGX0NPREVDX1BMQVlCQUNLKTsKIH0KIAogc3RhdGljIGludAotc25kX2F6ZjMzMjhfY2FwdHVyZV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc25kX2F6ZjMzMjhfcGNtX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlyZXR1cm4gc25kX2F6ZjMzMjhfcGNtX29wZW4oc3Vic3RyZWFtLCBBWkZfQ09ERUNfQ0FQVFVSRSk7CiB9CiAKIHN0YXRpYyBpbnQKLXNuZF9hemYzMzI4X2kyc19vdXRfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3NuZF9hemYzMzI4X3BjbV9pMnNfb3V0X29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJcmV0dXJuIHNuZF9hemYzMzI4X3BjbV9vcGVuKHN1YnN0cmVhbSwgQVpGX0NPREVDX0kyU19PVVQpOwogfQogCiBzdGF0aWMgaW50Ci1zbmRfYXpmMzMyOF9wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCSAgICAgIGVudW0gc25kX2F6ZjMzMjhfY29kZWNfdHlwZSBjb2RlY190eXBlCitzbmRfYXpmMzMyOF9wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0KICkKIHsKLQlzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9hemYzMzI4X2NvZGVjX2RhdGEgKmNvZGVjID0KKwkJc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAKIAlzbmRfYXpmMzMyOF9kYmdjYWxsZW50ZXIoKTsKLQljaGlwLT5jb2RlY3NbY29kZWNfdHlwZV0uc3Vic3RyZWFtID0gTlVMTDsKKwljb2RlYy0+c3Vic3RyZWFtID0gTlVMTDsKIAlzbmRfYXpmMzMyOF9kYmdjYWxsbGVhdmUoKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotc25kX2F6ZjMzMjhfcGxheWJhY2tfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0JcmV0dXJuIHNuZF9hemYzMzI4X3BjbV9jbG9zZShzdWJzdHJlYW0sIEFaRl9DT0RFQ19QTEFZQkFDSyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNuZF9hemYzMzI4X2NhcHR1cmVfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0JcmV0dXJuIHNuZF9hemYzMzI4X3BjbV9jbG9zZShzdWJzdHJlYW0sIEFaRl9DT0RFQ19DQVBUVVJFKTsKLX0KLQotc3RhdGljIGludAotc25kX2F6ZjMzMjhfaTJzX291dF9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlyZXR1cm4gc25kX2F6ZjMzMjhfcGNtX2Nsb3NlKHN1YnN0cmVhbSwgQVpGX0NPREVDX0kyU19PVVQpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9hemYzMzI4X3BsYXliYWNrX29wcyA9IHsKLQkub3BlbiA9CQlzbmRfYXpmMzMyOF9wbGF5YmFja19vcGVuLAotCS5jbG9zZSA9CXNuZF9hemYzMzI4X3BsYXliYWNrX2Nsb3NlLAorCS5vcGVuID0JCXNuZF9hemYzMzI4X3BjbV9wbGF5YmFja19vcGVuLAorCS5jbG9zZSA9CXNuZF9hemYzMzI4X3BjbV9jbG9zZSwKIAkuaW9jdGwgPQlzbmRfcGNtX2xpYl9pb2N0bCwKIAkuaHdfcGFyYW1zID0Jc25kX2F6ZjMzMjhfaHdfcGFyYW1zLAogCS5od19mcmVlID0Jc25kX2F6ZjMzMjhfaHdfZnJlZSwKLQkucHJlcGFyZSA9CXNuZF9hemYzMzI4X2NvZGVjX3ByZXBhcmUsCi0JLnRyaWdnZXIgPQlzbmRfYXpmMzMyOF9jb2RlY19wbGF5YmFja190cmlnZ2VyLAotCS5wb2ludGVyID0Jc25kX2F6ZjMzMjhfY29kZWNfcGxheWJhY2tfcG9pbnRlcgorCS5wcmVwYXJlID0Jc25kX2F6ZjMzMjhfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIgPQlzbmRfYXpmMzMyOF9wY21fdHJpZ2dlciwKKwkucG9pbnRlciA9CXNuZF9hemYzMzI4X3BjbV9wb2ludGVyCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9hemYzMzI4X2NhcHR1cmVfb3BzID0gewotCS5vcGVuID0JCXNuZF9hemYzMzI4X2NhcHR1cmVfb3BlbiwKLQkuY2xvc2UgPQlzbmRfYXpmMzMyOF9jYXB0dXJlX2Nsb3NlLAorCS5vcGVuID0JCXNuZF9hemYzMzI4X3BjbV9jYXB0dXJlX29wZW4sCisJLmNsb3NlID0Jc25kX2F6ZjMzMjhfcGNtX2Nsb3NlLAogCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMgPQlzbmRfYXpmMzMyOF9od19wYXJhbXMsCiAJLmh3X2ZyZWUgPQlzbmRfYXpmMzMyOF9od19mcmVlLAotCS5wcmVwYXJlID0Jc25kX2F6ZjMzMjhfY29kZWNfcHJlcGFyZSwKLQkudHJpZ2dlciA9CXNuZF9hemYzMzI4X2NvZGVjX2NhcHR1cmVfdHJpZ2dlciwKLQkucG9pbnRlciA9CXNuZF9hemYzMzI4X2NvZGVjX2NhcHR1cmVfcG9pbnRlcgorCS5wcmVwYXJlID0Jc25kX2F6ZjMzMjhfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIgPQlzbmRfYXpmMzMyOF9wY21fdHJpZ2dlciwKKwkucG9pbnRlciA9CXNuZF9hemYzMzI4X3BjbV9wb2ludGVyCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9hemYzMzI4X2kyc19vdXRfb3BzID0gewotCS5vcGVuID0JCXNuZF9hemYzMzI4X2kyc19vdXRfb3BlbiwKLQkuY2xvc2UgPQlzbmRfYXpmMzMyOF9pMnNfb3V0X2Nsb3NlLAorCS5vcGVuID0JCXNuZF9hemYzMzI4X3BjbV9pMnNfb3V0X29wZW4sCisJLmNsb3NlID0Jc25kX2F6ZjMzMjhfcGNtX2Nsb3NlLAogCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMgPQlzbmRfYXpmMzMyOF9od19wYXJhbXMsCiAJLmh3X2ZyZWUgPQlzbmRfYXpmMzMyOF9od19mcmVlLAotCS5wcmVwYXJlID0Jc25kX2F6ZjMzMjhfY29kZWNfcHJlcGFyZSwKLQkudHJpZ2dlciA9CXNuZF9hemYzMzI4X2NvZGVjX2kyc19vdXRfdHJpZ2dlciwKLQkucG9pbnRlciA9CXNuZF9hemYzMzI4X2NvZGVjX2kyc19vdXRfcG9pbnRlcgorCS5wcmVwYXJlID0Jc25kX2F6ZjMzMjhfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIgPQlzbmRfYXpmMzMyOF9wY21fdHJpZ2dlciwKKwkucG9pbnRlciA9CXNuZF9hemYzMzI4X3BjbV9wb2ludGVyCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtMTk2Niw3ICsxOTYwLDcgQEAKIAkJc25kX2F6ZjMzMjhfZGJndGltZXIoImRlbGF5IHdhcyB0b28gbG93ICglZCkhXG4iLCBkZWxheSk7CiAJCWRlbGF5ID0gNDk7IC8qIG1pbmltdW0gdGltZSBpcyA0OSB0aWNrcyAqLwogCX0KLQlzbmRfYXpmMzMyOF9kYmd0aW1lcigic2V0dGluZyB0aW1lciBjb3VudGRvd24gdmFsdWUgJWQsIGFkZCBDT1VOVERPV058SVJRXG4iLCBkZWxheSk7CisJc25kX2F6ZjMzMjhfZGJndGltZXIoInNldHRpbmcgdGltZXIgY291bnRkb3duIHZhbHVlICVkXG4iLCBkZWxheSk7CiAJZGVsYXkgfD0gVElNRVJfQ09VTlRET1dOX0VOQUJMRSB8IFRJTUVSX0lSUV9FTkFCTEU7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJc25kX2F6ZjMzMjhfY3RybF9vdXRsKGNoaXAsIElEWF9JT19USU1FUl9WQUxVRSwgZGVsYXkpOwpAQCAtMjE4MCw2ICsyMTc0LDcgQEAKIAl9OwogCXU4IGRtYV9pbml0OwogCWVudW0gc25kX2F6ZjMzMjhfY29kZWNfdHlwZSBjb2RlY190eXBlOworCXN0cnVjdCBzbmRfYXpmMzMyOF9jb2RlY19kYXRhICpjb2RlY19zZXR1cDsKIAogCSpyY2hpcCA9IE5VTEw7CiAKQEAgLTIyMTcsMTUgKzIyMTIsMjMgQEAKIAljaGlwLT5vcGwzX2lvICA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDMpOwogCWNoaXAtPm1peGVyX2lvID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgNCk7CiAKLQljaGlwLT5jb2RlY3NbQVpGX0NPREVDX1BMQVlCQUNLXS5pb19iYXNlID0KLQkJCQljaGlwLT5jdHJsX2lvICsgQVpGX0lPX09GRlNfQ09ERUNfUExBWUJBQ0s7Ci0JY2hpcC0+Y29kZWNzW0FaRl9DT0RFQ19QTEFZQkFDS10ubmFtZSA9ICJQTEFZQkFDSyI7Ci0JY2hpcC0+Y29kZWNzW0FaRl9DT0RFQ19DQVBUVVJFXS5pb19iYXNlID0KLQkJCQljaGlwLT5jdHJsX2lvICsgQVpGX0lPX09GRlNfQ09ERUNfQ0FQVFVSRTsKLQljaGlwLT5jb2RlY3NbQVpGX0NPREVDX0NBUFRVUkVdLm5hbWUgPSAiQ0FQVFVSRSI7Ci0JY2hpcC0+Y29kZWNzW0FaRl9DT0RFQ19JMlNfT1VUXS5pb19iYXNlID0KLQkJCQljaGlwLT5jdHJsX2lvICsgQVpGX0lPX09GRlNfQ09ERUNfSTJTX09VVDsKLQljaGlwLT5jb2RlY3NbQVpGX0NPREVDX0kyU19PVVRdLm5hbWUgPSAiSTJTX09VVCI7CisJY29kZWNfc2V0dXAgPSAmY2hpcC0+Y29kZWNzW0FaRl9DT0RFQ19QTEFZQkFDS107CisJY29kZWNfc2V0dXAtPmlvX2Jhc2UgPSBjaGlwLT5jdHJsX2lvICsgQVpGX0lPX09GRlNfQ09ERUNfUExBWUJBQ0s7CisJY29kZWNfc2V0dXAtPmxvY2sgPSAmY2hpcC0+cmVnX2xvY2s7CisJY29kZWNfc2V0dXAtPnR5cGUgPSBBWkZfQ09ERUNfUExBWUJBQ0s7CisJY29kZWNfc2V0dXAtPm5hbWUgPSAiUExBWUJBQ0siOworCisJY29kZWNfc2V0dXAgPSAmY2hpcC0+Y29kZWNzW0FaRl9DT0RFQ19DQVBUVVJFXTsKKwljb2RlY19zZXR1cC0+aW9fYmFzZSA9IGNoaXAtPmN0cmxfaW8gKyBBWkZfSU9fT0ZGU19DT0RFQ19DQVBUVVJFOworCWNvZGVjX3NldHVwLT5sb2NrID0gJmNoaXAtPnJlZ19sb2NrOworCWNvZGVjX3NldHVwLT50eXBlID0gQVpGX0NPREVDX0NBUFRVUkU7CisJY29kZWNfc2V0dXAtPm5hbWUgPSAiQ0FQVFVSRSI7CisKKwljb2RlY19zZXR1cCA9ICZjaGlwLT5jb2RlY3NbQVpGX0NPREVDX0kyU19PVVRdOworCWNvZGVjX3NldHVwLT5pb19iYXNlID0gY2hpcC0+Y3RybF9pbyArIEFaRl9JT19PRkZTX0NPREVDX0kyU19PVVQ7CisJY29kZWNfc2V0dXAtPmxvY2sgPSAmY2hpcC0+cmVnX2xvY2s7CisJY29kZWNfc2V0dXAtPnR5cGUgPSBBWkZfQ09ERUNfSTJTX09VVDsKKwljb2RlY19zZXR1cC0+bmFtZSA9ICJJMlNfT1VUIjsKIAogCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2F6ZjMzMjhfaW50ZXJydXB0LAogCQkJSVJRRl9TSEFSRUQsIGNhcmQtPnNob3J0bmFtZSwgY2hpcCkpIHsKQEAgLTIyNTcsMTUgKzIyNjAsMTUgQEAKIAkJc3RydWN0IHNuZF9hemYzMzI4X2NvZGVjX2RhdGEgKmNvZGVjID0KIAkJCSAmY2hpcC0+Y29kZWNzW2NvZGVjX3R5cGVdOwogCi0JCS8qIHNodXRkb3duIGNvZGVjcyB0byBzYXZlIHBvd2VyICovCisJCS8qIHNodXRkb3duIGNvZGVjcyB0byByZWR1Y2UgcG93ZXIgLyBub2lzZSAqLwogCQkJLyogaGF2ZSAuLi5jdHJsX2NvZGVjX2FjdGl2aXR5KCkgYWN0IHByb3Blcmx5ICovCiAJCWNvZGVjLT5ydW5uaW5nID0gMTsKIAkJc25kX2F6ZjMzMjhfY3RybF9jb2RlY19hY3Rpdml0eShjaGlwLCBjb2RlY190eXBlLCAwKTsKIAotCQlzcGluX2xvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CisJCXNwaW5fbG9ja19pcnEoY29kZWMtPmxvY2spOwogCQlzbmRfYXpmMzMyOF9jb2RlY19vdXRiKGNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX0ZMQUdTLAogCQkJCQkJIGRtYV9pbml0KTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycShjb2RlYy0+bG9jayk7CiAJfQogCiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNpLT5kZXYpOwpAQCAtMjQxOSw2ICsyNDIyLDcgQEAKIAogCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKIAorCS8qIHNhbWUgcGNtIG9iamVjdCBmb3IgcGxheWJhY2svY2FwdHVyZSAqLwogCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtW0FaRl9DT0RFQ19QTEFZQkFDS10pOwogCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtW0FaRl9DT0RFQ19JMlNfT1VUXSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9idDg3eC5jIGIvc291bmQvcGNpL2J0ODd4LmMKaW5kZXggMzdlMWI1ZC4uMjk1OGEwNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2J0ODd4LmMKKysrIGIvc291bmQvcGNpL2J0ODd4LmMKQEAgLTYzNywxNSArNjM3LDkgQEAKIHN0YXRpYyBpbnQgc25kX2J0ODd4X2NhcHR1cmVfc291cmNlX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCiB7Ci0Jc3RhdGljIGNoYXIgKnRleHRzWzNdID0geyJUViBUdW5lciIsICJGTSIsICJNaWMvTGluZSJ9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0ZXh0c1szXSA9IHsiVFYgVHVuZXIiLCAiRk0iLCAiTWljL0xpbmUifTsKIAotCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7Ci0JaW5mby0+Y291bnQgPSAxOwotCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOwotCWlmIChpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPiAyKQotCQlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSAyOwotCXN0cmNweShpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzW2luZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwotCXJldHVybiAwOworCXJldHVybiBzbmRfY3RsX2VudW1faW5mbyhpbmZvLCAxLCAzLCB0ZXh0cyk7CiB9CiAKIHN0YXRpYyBpbnQgc25kX2J0ODd4X2NhcHR1cmVfc291cmNlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2LmggYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNi5oCmluZGV4IGYxOWMxMTAuLmZjNTNiOWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2LmgKKysrIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDYuaApAQCAtMTg4LDcgKzE4OCw3IEBACiAjZGVmaW5lIFBMQVlCQUNLX0xJU1RfUFRSCTB4MDIJCS8qIFBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgcGVyaW9kIGJlaW5nIHBsYXllZCAqLwogCQkJCQkJLyogUFRSWzU6MF0sIERlZmF1bHQ6IDB4MCAqLwogI2RlZmluZSBQTEFZQkFDS19VTktOT1dOMwkweDAzCQkvKiBOb3QgdXNlZCA/PyAqLwotI2RlZmluZSBQTEFZQkFDS19ETUFfQUREUgkweDA0CQkvKiBQbGF5YmFjayBETUEgYWRkcmVzc3MgKi8KKyNkZWZpbmUgUExBWUJBQ0tfRE1BX0FERFIJMHgwNAkJLyogUGxheWJhY2sgRE1BIGFkZHJlc3MgKi8KIAkJCQkJCS8qIERNQVszMTowXSwgRGVmYXVsdDogMHgwICovCiAjZGVmaW5lIFBMQVlCQUNLX1BFUklPRF9TSVpFCTB4MDUJCS8qIFBsYXliYWNrIHBlcmlvZCBzaXplLiB3aW4yMDAwIHVzZXMgMHgwNDAwMDAwMCAqLwogCQkJCQkJLyogU0laRVszMToxNl0sIERlZmF1bHQ6IDB4MCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCmluZGV4IGQyZDEyYzAuLjAxYjQ5MzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYworKysgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKQEAgLTEwODIsNyArMTA4Miw3IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX2NhMDEwNl9wY20gKmVwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJc25kX3BjbV91ZnJhbWVzX3QgcHRyLCBwdHIxLCBwdHIyID0gMDsKLQlpbnQgY2hhbm5lbCA9IGNoYW5uZWw9ZXBjbS0+Y2hhbm5lbF9pZDsKKwlpbnQgY2hhbm5lbCA9IGVwY20tPmNoYW5uZWxfaWQ7CiAKIAlpZiAoIWVwY20tPnJ1bm5pbmcpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NtaXBjaS5jIGIvc291bmQvcGNpL2NtaXBjaS5jCmluZGV4IDMyOTk2OGUuLmI1YmIwMzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jbWlwY2kuYworKysgYi9zb3VuZC9wY2kvY21pcGNpLmMKQEAgLTI1MDcsMTQgKzI1MDcsMTIgQEAKIAkJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdHJ1Y3QgY21pcGNpICpjbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdGF0aWMgY2hhciAqdGV4dHNbM10gPSB7ICJMaW5lLUluIiwgIlJlYXIgT3V0cHV0IiwgIkJhc3MgT3V0cHV0IiB9OwotCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwotCXVpbmZvLT5jb3VudCA9IDE7Ci0JdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSBjbS0+Y2hpcF92ZXJzaW9uID49IDM5ID8gMyA6IDI7Ci0JaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMpCi0JCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAtIDE7Ci0Jc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKLQlyZXR1cm4gMDsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGV4dHNbM10gPSB7CisJCSJMaW5lLUluIiwgIlJlYXIgT3V0cHV0IiwgIkJhc3MgT3V0cHV0IgorCX07CisKKwlyZXR1cm4gc25kX2N0bF9lbnVtX2luZm8odWluZm8sIDEsCisJCQkJIGNtLT5jaGlwX3ZlcnNpb24gPj0gMzkgPyAzIDogMiwgdGV4dHMpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfbGluZV9pbl9tb2RlKHN0cnVjdCBjbWlwY2kgKmNtKQpAQCAtMjU2NCwxNCArMjU2Miw5IEBACiBzdGF0aWMgaW50IHNuZF9jbWlwY2lfbWljX2luX21vZGVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKLQlzdGF0aWMgY2hhciAqdGV4dHNbMl0gPSB7ICJNaWMtSW4iLCAiQ2VudGVyL0xGRSBPdXRwdXQiIH07Ci0JdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7Ci0JdWluZm8tPmNvdW50ID0gMTsKLQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDI7Ci0JaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMpCi0JCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAtIDE7Ci0Jc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKLQlyZXR1cm4gMDsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGV4dHNbMl0gPSB7ICJNaWMtSW4iLCAiQ2VudGVyL0xGRSBPdXRwdXQiIH07CisKKwlyZXR1cm4gc25kX2N0bF9lbnVtX2luZm8odWluZm8sIDEsIDIsIHRleHRzKTsKIH0KIAogc3RhdGljIGludCBzbmRfY21pcGNpX21pY19pbl9tb2RlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCmluZGV4IGRmNDdmNzMuLjBjNzAxZTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCQkJCQkgKi8KICNkZWZpbmUgUExBWUJBQ0tfTElTVF9TSVpFCTB4MDEJCS8qIFNpemUgb2YgbGlzdCBpbiBieXRlcyA8PCAxNi4gRS5nLiA4IHBlcmlvZHMgLT4gMHgwMDM4MDAwMCAgKi8KICNkZWZpbmUgUExBWUJBQ0tfTElTVF9QVFIJMHgwMgkJLyogUG9pbnRlciB0byB0aGUgY3VycmVudCBwZXJpb2QgYmVpbmcgcGxheWVkICovCi0jZGVmaW5lIFBMQVlCQUNLX0RNQV9BRERSCTB4MDQJCS8qIFBsYXliYWNrIERNQSBhZGRyZXNzcyAqLworI2RlZmluZSBQTEFZQkFDS19ETUFfQUREUgkweDA0CQkvKiBQbGF5YmFjayBETUEgYWRkcmVzcyAqLwogI2RlZmluZSBQTEFZQkFDS19QRVJJT0RfU0laRQkweDA1CQkvKiBQbGF5YmFjayBwZXJpb2Qgc2l6ZSAqLwogI2RlZmluZSBQTEFZQkFDS19QT0lOVEVSCTB4MDYJCS8qIFBsYXliYWNrIHBlcmlvZCBwb2ludGVyLiBTYW1wbGUgY3VycmVudGx5IGluIERBQyAqLwogI2RlZmluZSBQTEFZQkFDS19VTktOT1dOMSAgICAgICAweDA3CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmggYi9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmgKaW5kZXggMTUzMjE0OS4uMDBmNDgxNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvcDE2di5oCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuaApAQCAtOTYsNyArOTYsNyBAQAogI2RlZmluZSBQTEFZQkFDS19MSVNUX1NJWkUJMHgwMQkJLyogU2l6ZSBvZiBsaXN0IGluIGJ5dGVzIDw8IDE2LiBFLmcuIDggcGVyaW9kcyAtPiAweDAwMzgwMDAwICAqLwogI2RlZmluZSBQTEFZQkFDS19MSVNUX1BUUgkweDAyCQkvKiBQb2ludGVyIHRvIHRoZSBjdXJyZW50IHBlcmlvZCBiZWluZyBwbGF5ZWQgKi8KICNkZWZpbmUgUExBWUJBQ0tfVU5LTk9XTjMJMHgwMwkJLyogTm90IHVzZWQgKi8KLSNkZWZpbmUgUExBWUJBQ0tfRE1BX0FERFIJMHgwNAkJLyogUGxheWJhY2sgRE1BIGFkZHJlc3NzICovCisjZGVmaW5lIFBMQVlCQUNLX0RNQV9BRERSCTB4MDQJCS8qIFBsYXliYWNrIERNQSBhZGRyZXNzICovCiAjZGVmaW5lIFBMQVlCQUNLX1BFUklPRF9TSVpFCTB4MDUJCS8qIFBsYXliYWNrIHBlcmlvZCBzaXplLiB3aW4yMDAwIHVzZXMgMHgwNDAwMDAwMCAqLwogI2RlZmluZSBQTEFZQkFDS19QT0lOVEVSCTB4MDYJCS8qIFBsYXliYWNrIHBlcmlvZCBwb2ludGVyLiBVc2VkIHdpdGggUExBWUJBQ0tfTElTVF9QVFIgdG8gZGV0ZXJtaW5lIGJ1ZmZlciBwb3NpdGlvbiBjdXJyZW50bHkgaW4gREFDICovCiAjZGVmaW5lIFBMQVlCQUNLX0ZJRk9fRU5EX0FERFJFU1MJMHgwNwkJLyogUGxheWJhY2sgRklGTyBlbmQgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTk2OC5jIGIvc291bmQvcGNpL2VzMTk2OC5jCmluZGV4IDIzYTU4ZjAuLjdjMTdmNDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5NjguYworKysgYi9zb3VuZC9wY2kvZXMxOTY4LmMKQEAgLTIyMCw3ICsyMjAsNyBAQAogI2RlZmluZQlSSU5HQl9FTl8yQ09ERUMJCTB4MDAyMAogI2RlZmluZSBSSU5HQl9TSU5HX0JJVF9EVUFMCTB4MDA0MAogCi0vKiAqKioqUG9ydCBBZHJlc3NlcyoqKiogKi8KKy8qICoqKipQb3J0IEFkZHJlc3NlcyoqKiogKi8KIAogLyogICBXcml0ZSAmIFJlYWQgKi8KICNkZWZpbmUgRVNNX0lOREVYCQkweDAyCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwppbmRleCA5OGI2ZDAyLi4wNWU1ZWM4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKQEAgLTQ1NzEsNiArNDU3MSw5IEBACiAJCX0KIAkJbWVtc2V0KGNmZy0+aHBfcGlucyArIGNmZy0+aHBfb3V0cywgMCwKIAkJICAgICAgIHNpemVvZihoZGFfbmlkX3QpICogKEFVVE9fQ0ZHX01BWF9PVVRTIC0gY2ZnLT5ocF9vdXRzKSk7CisJCWlmICghY2ZnLT5ocF9vdXRzKQorCQkJY2ZnLT5saW5lX291dF90eXBlID0gQVVUT19QSU5fSFBfT1VUOworCiAJfQogCiAJLyogc29ydCBieSBzZXF1ZW5jZSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggYTFjNDAwOC4uZDNkMThiZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC0xMjM1LDcgKzEyMzUsOCBAQAogCQkJcG9zX2FkaiA9IDA7CiAJCX0gZWxzZSB7CiAJCQlvZnMgPSBzZXR1cF9iZGxlKHN1YnN0cmVhbSwgYXp4X2RldiwKLQkJCQkJICZiZGwsIG9mcywgcG9zX2FkaiwgMSk7CisJCQkJCSAmYmRsLCBvZnMsIHBvc19hZGosCisJCQkJCSAhc3Vic3RyZWFtLT5ydW50aW1lLT5ub19wZXJpb2Rfd2FrZXVwKTsKIAkJCWlmIChvZnMgPCAwKQogCQkJCWdvdG8gZXJyb3I7CiAJCX0KQEAgLTEyNDcsNyArMTI0OCw4IEBACiAJCQkJCSBwZXJpb2RfYnl0ZXMgLSBwb3NfYWRqLCAwKTsKIAkJZWxzZQogCQkJb2ZzID0gc2V0dXBfYmRsZShzdWJzdHJlYW0sIGF6eF9kZXYsICZiZGwsIG9mcywKLQkJCQkJIHBlcmlvZF9ieXRlcywgMSk7CisJCQkJCSBwZXJpb2RfYnl0ZXMsCisJCQkJCSAhc3Vic3RyZWFtLT5ydW50aW1lLT5ub19wZXJpb2Rfd2FrZXVwKTsKIAkJaWYgKG9mcyA8IDApCiAJCQlnb3RvIGVycm9yOwogCX0KQEAgLTE1MTUsNyArMTUxNyw4IEBACiAJCQkJIC8qIE5vIGZ1bGwtcmVzdW1lIHlldCBpbXBsZW1lbnRlZCAqLwogCQkJCSAvKiBTTkRSVl9QQ01fSU5GT19SRVNVTUUgfCovCiAJCQkJIFNORFJWX1BDTV9JTkZPX1BBVVNFIHwKLQkJCQkgU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCksCisJCQkJIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQgfAorCQkJCSBTTkRSVl9QQ01fSU5GT19OT19QRVJJT0RfV0FLRVVQKSwKIAkuZm9ybWF0cyA9CQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKIAkucmF0ZXMgPQkJU05EUlZfUENNX1JBVEVfNDgwMDAsCiAJLnJhdGVfbWluID0JCTQ4MDAwLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggZjdmZjNmNy4uNDY3ODA2NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC02NjYsNyArNjY2LDcgQEAKIAlIREFfQ09ERUNfTVVURSgiQXV4IFBsYXliYWNrIFN3aXRjaCIsIDB4MTYsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MGYsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MGYsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTW9ubyBQbGF5YmFjayBWb2x1bWUiLCAweDFlLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIDB4MWUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtNzI5LDcgKzcyOSw3IEBACiAJSERBX0NPREVDX01VVEUoIkF1eCBQbGF5YmFjayBTd2l0Y2giLCAweDE2LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAogCS8qIAogCSAgIEhEQV9DT0RFQ19WT0xVTUUoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgMHgxZSwgMHgwLCBIREFfT1VUUFVUKSwKIAkgICBIREFfQ09ERUNfTVVURSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCAweDFlLCAweDAsIEhEQV9PVVRQVVQpLCAqLwpAQCAtNzc1LDcgKzc3NSw3IEBACiAJSERBX0NPREVDX01VVEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAweDAzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLAogCXsKQEAgLTEzNTgsNyArMTM1OCw3IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCiAJewpAQCAtMTUxNSw4ICsxNTE1LDggQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKIAl7CkBAIC0xNzI2LDggKzE3MjYsOCBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MWQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MWQsIDB4MCwgSERBX09VVFBVVCksCiAjZW5kaWYKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxOCwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKIAl7CkBAIC0xNzc0LDcgKzE3NzQsNyBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDFkLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDFkLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAogCXsKQEAgLTIxNjAsOCArMjE2MCw4IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiQW5hbG9nIE1peCBQbGF5YmFjayBWb2x1bWUiLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJBbmFsb2cgTWl4IFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDM5LCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4M2MsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IFZvbHVtZSIsIDB4MzksIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4M2MsIDB4MCwgSERBX09VVFBVVCksCiAKIAl7IH0gLyogZW5kICovCiB9OwpAQCAtMjIwMyw4ICsyMjAzLDggQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJBbmFsb2cgTWl4IFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkFuYWxvZyBNaXggUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MzksIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgzYywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgzOSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgzYywgMHgwLCBIREFfT1VUUFVUKSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJDaGFubmVsIE1vZGUiLApAQCAtMjIzMiw3ICsyMjMyLDcgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJBbmFsb2cgTWl4IFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkFuYWxvZyBNaXggUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MzksIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MzksIDB4MCwgSERBX09VVFBVVCksCiAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMjkwMiw3ICsyOTAyLDcgQEAKIAkJaWR4ID0gYWQxOTg4X3Bpbl9pZHgocGluKTsKIAkJYm5pZCA9IGFkMTk4OF9ib29zdF9uaWRzW2lkeF07CiAJCWlmIChibmlkKSB7Ci0JCQlzcHJpbnRmKG5hbWUsICIlcyBCb29zdCIsIGN0bG5hbWUpOworCQkJc3ByaW50ZihuYW1lLCAiJXMgQm9vc3QgVm9sdW1lIiwgY3RsbmFtZSk7CiAJCQlyZXR1cm4gYWRkX2NvbnRyb2woc3BlYywgQURfQ1RMX1dJREdFVF9WT0wsIG5hbWUsCiAJCQkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwoYm5pZCwgMywgaWR4LCBIREFfT1VUUFVUKSk7CiAKQEAgLTMzMDAsOCArMzMwMCw4IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCBWb2x1bWUiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMSwgMHgwZCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM0OTksOSArMzQ5OSw5IEBACiAJSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJEb2NraW5nIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJEb2NraW5nIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRG9ja2luZyBNaWMgQm9vc3QiLCAweDI1LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJEb2NrIE1pYyBCb29zdCBWb2x1bWUiLCAweDI1LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDEsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zNTYwLDggKzM1NjAsOCBAQAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lLUluIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUtSW4gUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJMaW5lLUluIEJvb3N0IiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lLUluIEJvb3N0IFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDEsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zNzQ1LDkgKzM3NDUsOSBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEJvb3N0IiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MjUsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEJvb3N0IFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgyNSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAxLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzg4OCw5ICszODg4LDkgQEAKIAlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRG9jayBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRG9jayBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkRvY2sgTWljIEJvb3N0IiwgMHgyNSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCBWb2x1bWUiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRG9jayBNaWMgQm9vc3QgVm9sdW1lIiwgMHgyNSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAl7IH0gLyogZW5kICovCkBAIC00MTI2LDggKzQxMjYsOCBAQAogCUhEQV9DT0RFQ19NVVRFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAl7CkBAIC00MjU1LDggKzQyNTUsOCBAQAogCUhEQV9DT0RFQ19NVVRFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MjUsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDI1LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCBWb2x1bWUiLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNDQ5NCw5ICs0NDk0LDkgQEAKIAlIREFfQ09ERUNfVk9MVU1FX01PTk8oIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURV9NT05PKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDEsIDB4MCwgSERBX09VVFBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDNjLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MzksIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTGluZS1JbiBCb29zdCIsIDB4M2EsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4M2MsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IFZvbHVtZSIsIDB4MzksIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZS1JbiBCb29zdCBWb2x1bWUiLCAweDNhLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDEsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCkBAIC00NTQ3LDcgKzQ1NDcsNyBAQAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwNiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJEaWdpdGFsIE1pYyBCb29zdCIsIDB4MWYsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJEaWdpdGFsIE1pYyBCb29zdCBWb2x1bWUiLCAweDFmLCAweDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IDc2YmQ1OGEuLmU5NjU4MWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTg2OSwxNiArODY5LDE2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ1X21peGVyc1tdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIENhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwMSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJFeHQgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiRXh0IE1pYyBDYXB0dXJlIFN3aXRjaCIsIDB4MWEsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIENhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgQ2FwdHVyZSBTd2l0Y2giLCAweDFhLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDE3LCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkludCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxNywgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkV4dCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxNywgMHgyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJFeHQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTcsIDB4MiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxNywgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxNywgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDE3LCAweDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDE3LCAweDIsIEhEQV9JTlBVVCksCiAJSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgJmN4dDUwNDVfaHBfYmluZF9tYXN0ZXJfdm9sKSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtOTEwLDE2ICs5MTAsMTYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ1X21peGVyc19ocDUzMFtdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIENhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJFeHQgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiRXh0IE1pYyBDYXB0dXJlIFN3aXRjaCIsIDB4MWEsIDB4MDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIENhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgQ2FwdHVyZSBTd2l0Y2giLCAweDFhLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDE3LCAweDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkludCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxNywgMHgyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkV4dCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxNywgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJFeHQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTcsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxNywgMHgyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxNywgMHgyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDE3LCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDE3LCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgJmN4dDUwNDVfaHBfYmluZF9tYXN0ZXJfdm9sKSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtOTQ3LDcgKzk0Nyw3IEBACiAJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKIAl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAogCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCi0JLyogUmVjb3JkIHNlbGVjdG9yOiBJbnQgbWljICovCisJLyogUmVjb3JkIHNlbGVjdG9yOiBJbnRlcm5hbCBtaWMgKi8KIAl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgxfSwKIAl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkgQUNfQU1QX1NFVF9JTlBVVHxBQ19BTVBfU0VUX1JJR0hUfEFDX0FNUF9TRVRfTEVGVHwweDE3fSwKQEAgLTk2MCw3ICs5NjAsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ1X2JlbnFfaW5pdF92ZXJic1tdID0gewotCS8qIEludCBNaWMsIE1pYyAqLworCS8qIEludGVybmFsIE1pYywgTWljICovCiAJezB4MTIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfEFDX1BJTkNUTF9WUkVGXzgwIH0sCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfEFDX1BJTkNUTF9WUkVGXzgwIH0sCiAJLyogTGluZSBJbixIUCwgQW1wICAqLwpAQCAtOTczLDcgKzk3Myw3IEBACiAJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKIAl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAogCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCi0JLyogUmVjb3JkIHNlbGVjdG9yOiBJbnQgbWljICovCisJLyogUmVjb3JkIHNlbGVjdG9yOiBJbnRlcm5hbCBtaWMgKi8KIAl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJIEFDX0FNUF9TRVRfSU5QVVR8QUNfQU1QX1NFVF9SSUdIVHxBQ19BTVBfU0VUX0xFRlR8MHgxN30sCkBAIC0xMzc2LDcgKzEzNzYsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfYmFzZV9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxYSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxYSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJQQ00gVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCkBAIC0xNzk2LDggKzE3OTYsOCBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfY2FwdHVyZV9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgVm9sdW1lIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFN3aXRjaCIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRXh0ZXJuYWwgTWljIFZvbHVtZSIsIDB4MTQsIDB4MDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkV4dGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBWb2x1bWUiLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJEb2NraW5nIE1pYyBWb2x1bWUiLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJEb2NraW5nIE1pYyBTd2l0Y2giLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAogCXt9CkBAIC0xODA2LDggKzE4MDYsOCBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfaHBfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFZvbHVtZSIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkV4dGVybmFsIE1pYyBWb2x1bWUiLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJFeHRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgVm9sdW1lIiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFN3aXRjaCIsIDB4MTUsIDB4MDAsIEhEQV9JTlBVVCksCiAJe30KIH07CiAKQEAgLTE4MjYsOCArMTgyNiw4IEBACiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA1MV90b3NoaWJhX21peGVyc1tdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBWb2x1bWUiLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJFeHRlcm5hbCBNaWMgVm9sdW1lIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiRXh0ZXJuYWwgTWljIFN3aXRjaCIsIDB4MTQsIDB4MDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFZvbHVtZSIsIDB4MTQsIDB4MDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBTd2l0Y2giLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAogCXt9CiB9OwogCkBAIC0xODQ3LDcgKzE4NDcsNyBAQAogCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAJLyogREFDMSAqLwkKIAl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAotCS8qIFJlY29yZCBzZWxlY3RvcjogSW50IG1pYyAqLworCS8qIFJlY29yZCBzZWxlY3RvcjogSW50ZXJuYWwgbWljICovCiAJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDQ0fSwKIAl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKSB8IDB4NDR9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHg0NH0sCkBAIC0xODc0LDcgKzE4NzQsNyBAQAogCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAJLyogREFDMSAqLwogCXsweDEwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCi0JLyogUmVjb3JkIHNlbGVjdG9yOiBJbnQgbWljICovCisJLyogUmVjb3JkIHNlbGVjdG9yOiBJbnRlcm5hbCBtaWMgKi8KIAl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKSB8IDB4NDR9LAogCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAkvKiBTUERJRiByb3V0ZTogUENNICovCkBAIC0xOTA0LDcgKzE5MDQsNyBAQAogCXsweDE5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAJLyogREFDMSAqLwogCXsweDEwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCi0JLyogUmVjb3JkIHNlbGVjdG9yOiBJbnQgbWljICovCisJLyogUmVjb3JkIHNlbGVjdG9yOiBJbnRlcm5hbCBtaWMgKi8KIAl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4NDR9LAogCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpIHwgMHg0NH0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDQ0fSwKQEAgLTE5MzIsNyArMTkzMiw3IEBACiAJezB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKIAkvKiBEQUMxICovCiAJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKLQkvKiBSZWNvcmQgc2VsZWN0b3I6IEludCBtaWMgKi8KKwkvKiBSZWNvcmQgc2VsZWN0b3I6IEludGVybmFsIG1pYyAqLwogCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpIHwgMHg0NH0sCiAJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCS8qIFNQRElGIHJvdXRlOiBQQ00gKi8KQEAgLTIxMTEsNiArMjExMSwxMSBAQAogCXsgMiwgTlVMTCB9LAogfTsKIAorI2RlZmluZSBIUF9QUkVTRU5UX1BPUlRfQQkoMSA8PCAwKQorI2RlZmluZSBIUF9QUkVTRU5UX1BPUlRfRAkoMSA8PCAxKQorI2RlZmluZSBocF9wb3J0X2FfcHJlc2VudChzcGVjKQkoKHNwZWMpLT5ocF9wcmVzZW50ICYgSFBfUFJFU0VOVF9QT1JUX0EpCisjZGVmaW5lIGhwX3BvcnRfZF9wcmVzZW50KHNwZWMpCSgoc3BlYyktPmhwX3ByZXNlbnQgJiBIUF9QUkVTRU5UX1BPUlRfRCkKKwogc3RhdGljIHZvaWQgY3h0NTA2Nl91cGRhdGVfc3BlYWtlcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMjEyMCwyNCArMjEyNSwyMCBAQAogCQkgICAgc3BlYy0+aHBfcHJlc2VudCwgc3BlYy0+Y3VyX2VhcGQpOwogCiAJLyogUG9ydCBBIChIUCkgKi8KLQlwaW5jdGwgPSAoKHNwZWMtPmhwX3ByZXNlbnQgJiAxKSAmJiBzcGVjLT5jdXJfZWFwZCkgPyBQSU5fSFAgOiAwOworCXBpbmN0bCA9IChocF9wb3J0X2FfcHJlc2VudChzcGVjKSAmJiBzcGVjLT5jdXJfZWFwZCkgPyBQSU5fSFAgOiAwOwogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTksIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKIAkJCXBpbmN0bCk7CiAKIAkvKiBQb3J0IEQgKEhQL0xPKSAqLwotCWlmIChzcGVjLT5kZWxsX2F1dG9tdXRlKSB7Ci0JCS8qIERFTEwgQUlPIFBvcnQgUnVsZTogUG9ydEE+ICBQb3J0RD4gIEludFNwayAqLwotCQlwaW5jdGwgPSAoIShzcGVjLT5ocF9wcmVzZW50ICYgMSkgJiYgc3BlYy0+Y3VyX2VhcGQpCi0JCQk/IFBJTl9PVVQgOiAwOwotCX0gZWxzZSBpZiAoc3BlYy0+dGhpbmtwYWQpIHsKLQkJaWYgKHNwZWMtPmN1cl9lYXBkKQotCQkJcGluY3RsID0gc3BlYy0+cG9ydF9kX21vZGU7Ci0JCS8qIE11dGUgZG9jayBsaW5lLW91dCBpZiBQb3J0IEEgKGxhcHRvcCBIUCkgaXMgcHJlc2VudCAqLwotCQlpZiAoc3BlYy0+aHBfcHJlc2VudCYgIDEpCisJcGluY3RsID0gc3BlYy0+Y3VyX2VhcGQgPyBzcGVjLT5wb3J0X2RfbW9kZSA6IDA7CisJaWYgKHNwZWMtPmRlbGxfYXV0b211dGUgfHwgc3BlYy0+dGhpbmtwYWQpIHsKKwkJLyogTXV0ZSBpZiBQb3J0IEEgaXMgY29ubmVjdGVkICovCisJCWlmIChocF9wb3J0X2FfcHJlc2VudChzcGVjKSkKIAkJCXBpbmN0bCA9IDA7CiAJfSBlbHNlIHsKLQkJcGluY3RsID0gKChzcGVjLT5ocF9wcmVzZW50ICYgMikgJiYgc3BlYy0+Y3VyX2VhcGQpCi0JCQk/IHNwZWMtPnBvcnRfZF9tb2RlIDogMDsKKwkJLyogVGhpbmtwYWQvRGVsbCBkb2Vzbid0IGdpdmUgcGluLUQgc3RhdHVzICovCisJCWlmICghaHBfcG9ydF9kX3ByZXNlbnQoc3BlYykpCisJCQlwaW5jdGwgPSAwOwogCX0KIAlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFjLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCiAJCQlwaW5jdGwpOwpAQCAtMjM3OSw4ICsyMzgwLDggQEAKIAkvKiBQb3J0IEQgKi8KIAlwb3J0RCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MWMpOwogCi0Jc3BlYy0+aHBfcHJlc2VudCA9ICEhKHBvcnRBKTsKLQlzcGVjLT5ocF9wcmVzZW50IHw9IHBvcnREID8gMiA6IDA7CisJc3BlYy0+aHBfcHJlc2VudCA9IHBvcnRBID8gSFBfUFJFU0VOVF9QT1JUX0EgOiAwOworCXNwZWMtPmhwX3ByZXNlbnQgfD0gcG9ydEQgPyBIUF9QUkVTRU5UX1BPUlRfRCA6IDA7CiAJc25kX3ByaW50ZGQoIkNYVDUwNjY6IGhwIGF1dG9tdXRlIHBvcnRBPSV4IHBvcnREPSV4IHByZXNlbnQ9JWRcbiIsCiAJCXBvcnRBLCBwb3J0RCwgc3BlYy0+aHBfcHJlc2VudCk7CiAJY3h0NTA2Nl91cGRhdGVfc3BlYWtlcihjb2RlYyk7CkBAIC0yNzI4LDcgKzI3MjksNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNjZfdm9zdHJvX21peGVyc1tdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkludCBNaWMgQm9vc3QgQ2FwdHVyZSBFbnVtIiwKKwkJLm5hbWUgPSAiSW50ZXJuYWwgTWljIEJvb3N0IENhcHR1cmUgRW51bSIsCiAJCS5pbmZvID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1faW5mbywKIAkJLmdldCA9IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX2dldCwKIAkJLnB1dCA9IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX3B1dCwKQEAgLTI5NTQsNyArMjk1NSw3IEBACiAJezB4MjIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCiAKIAkvKiBpbnRlcm5hbCBtaWNyb3Bob25lICovCi0JezB4MjMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwgLyogZW5hYmxlIGludCBtaWMgKi8KKwl7MHgyMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LCAvKiBlbmFibGUgaW50ZXJuYWwgbWljICovCiAKIAkvKiBFQVBEICovCiAJezB4MWQsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDJ9LCAvKiBkZWZhdWx0IG9uICovCkBAIC0zMDA5LDcgKzMwMTAsNyBAQAogCXsweDIyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAogCiAJLyogaW50ZXJuYWwgbWljcm9waG9uZSAqLwotCXsweDIzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sIC8qIGVuYWJsZSBpbnQgbWljICovCisJezB4MjMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwgLyogZW5hYmxlIGludGVybmFsIG1pYyAqLwogCiAJLyogRUFQRCAqLwogCXsweDFkLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLwpAQCAtMzA5Nyw2ICszMDk4LDcgQEAKIAlTTkRfUENJX1FVSVJLX01BU0soMHgxMDI1LCAweGZmMDAsIDB4MDQwMCwgIkFjZXIiLCBDWFQ1MDY2X0lERUFQQUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyZDgsICJEZWxsIFZvc3RybyIsIENYVDUwNjZfREVMTF9WT1NUUk8pLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyZjUsICJEZWxsIFZvc3RybyAzMjAiLCBDWFQ1MDY2X0lERUFQQUQpLAorCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA0MDEsICJEZWxsIFZvc3RybyAxMDE0IiwgQ1hUNTA2Nl9ERUxMX1ZPU1RSTyksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDQwMiwgIkRlbGwgVm9zdHJvIiwgQ1hUNTA2Nl9ERUxMX1ZPU1RSTyksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDQwOCwgIkRlbGwgSW5zcGlyb24gT25lIDE5VCIsIENYVDUwNjZfSURFQVBBRCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzYwYiwgIkhQIEc2MCIsIENYVDUwNjZfSFBfTEFQVE9QKSwKQEAgLTMxMDgsMTYgKzMxMTAsOSBAQAogCQkgICAgICBDWFQ1MDY2X0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MDgzMywgIk9MUEMgWE8tMS41IiwgQ1hUNTA2Nl9PTFBDX1hPXzFfNSksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjBmMiwgIkxlbm92byBUNDAwcyIsIENYVDUwNjZfVEhJTktQQUQpLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxYjIsICJUaGlua3BhZCBYMTAwZSIsIENYVDUwNjZfSURFQVBBRCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFjNSwgIlRoaW5rcGFkIEVkZ2UgMTMiLCBDWFQ1MDY2X1RISU5LUEFEKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWIzLCAiVGhpbmtwYWQgRWRnZSAxMyAoMTk3KSIsIENYVDUwNjZfSURFQVBBRCksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFiNCwgIlRoaW5rcGFkIEVkZ2UiLCBDWFQ1MDY2X0lERUFQQUQpLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxYzgsICJUaGlua3BhZCBFZGdlIDExIiwgQ1hUNTA2Nl9JREVBUEFEKSwKICAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjE1ZSwgIkxlbm92byBUaGlua3BhZCIsIENYVDUwNjZfVEhJTktQQUQpLAotIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzOGFmLCAiTGVub3ZvIEcgc2VyaWVzIiwgQ1hUNTA2Nl9JREVBUEFEKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzOTBhLCAiTGVub3ZvIFMxMC0zdCIsIENYVDUwNjZfSURFQVBBRCksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MzkzOCwgIkxlbm92byBHIHNlcmllcyAoQU1EKSIsIENYVDUwNjZfSURFQVBBRCksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4M2EwZCwgImlkZWFwYWQiLCBDWFQ1MDY2X0lERUFQQUQpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTdhYSwgIkxlbm92byIsIENYVDUwNjZfSURFQVBBRCksIC8qIEZhbGxiYWNrIGZvciBMZW5vdm9zIHdpdGhvdXQgZG9jayBtaWMgKi8KIAl7fQogfTsKIApAQCAtMzQyMiw2ICszNDE3LDkgQEAKIAkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAogCQkJCSAgICBwcmVzZW50ID8gMCA6IFBJTl9PVVQpOwogCX0KKwlmb3IgKGkgPSAwOyAhcHJlc2VudCAmJiBpIDwgY2ZnLT5saW5lX291dHM7IGkrKykKKwkJaWYgKHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIGNmZy0+bGluZV9vdXRfcGluc1tpXSkpCisJCQlwcmVzZW50ID0gMTsKIAlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5zcGVha2VyX291dHM7IGkrKykgewogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBjZmctPnNwZWFrZXJfcGluc1tpXSwgMCwKIAkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9oZG1pLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYwppbmRleCAzMWRmNzc0Li5mMjliOTdiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYwpAQCAtMzEsMTAgKzMxLDE1IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgImhkYV9jb2RlYy5oIgogI2luY2x1ZGUgImhkYV9sb2NhbC5oIgogCitzdGF0aWMgYm9vbCBzdGF0aWNfaGRtaV9wY207Cittb2R1bGVfcGFyYW0oc3RhdGljX2hkbWlfcGNtLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3RhdGljX2hkbWlfcGNtLCAiRG9uJ3QgcmVzdHJpY3QgUENNIHBhcmFtZXRlcnMgcGVyIEVMRCBpbmZvIik7CisKIC8qCiAgKiBUaGUgSERNSS9EaXNwbGF5UG9ydCBjb25maWd1cmF0aW9uIGNhbiBiZSBoaWdobHkgZHluYW1pYy4gQSBncmFwaGljcyBkZXZpY2UKICAqIGNvdWxkIHN1cHBvcnQgdHdvIGluZGVwZW5kZW50IHBpcGVzLCBlYWNoIG9mIHRoZW0gY2FuIGJlIGNvbm5lY3RlZCB0byBvbmUgb3IKQEAgLTgyNyw3ICs4MzIsNyBAQAogCQkqY29kZWNfcGFycyA9ICpoaW5mbzsKIAogCWVsZCA9ICZzcGVjLT5zaW5rX2VsZFtpZHhdOwotCWlmIChlbGQtPnNhZF9jb3VudCA+IDApIHsKKwlpZiAoIXN0YXRpY19oZG1pX3BjbSAmJiBlbGQtPmVsZF92YWxpZCAmJiBlbGQtPnNhZF9jb3VudCA+IDApIHsKIAkJaGRtaV9lbGRfdXBkYXRlX3BjbV9pbmZvKGVsZCwgaGluZm8sIGNvZGVjX3BhcnMpOwogCQlpZiAoaGluZm8tPmNoYW5uZWxzX21pbiA+IGhpbmZvLT5jaGFubmVsc19tYXggfHwKIAkJICAgICFoaW5mby0+cmF0ZXMgfHwgIWhpbmZvLT5mb3JtYXRzKQpAQCAtOTA0LDIzICs5MDksMjggQEAKIAlzcGVjLT5waW5bc3BlYy0+bnVtX3BpbnNdID0gcGluX25pZDsKIAlzcGVjLT5udW1fcGlucysrOwogCi0JLyoKLQkgKiBJdCBpcyBhc3N1bWVkIHRoYXQgY29udmVydGVyIG5vZGVzIGNvbWUgZmlyc3QgaW4gdGhlIG5vZGUgbGlzdCBhbmQKLQkgKiBoZW5jZSBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBhbmQgdXNhYmxlIG5vdy4KLQkgKi8KIAlyZXR1cm4gaGRtaV9yZWFkX3Bpbl9jb25uKGNvZGVjLCBwaW5fbmlkKTsKIH0KIAogc3RhdGljIGludCBoZG1pX2FkZF9jdnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCiB7CisJaW50IGksIGZvdW5kX3BpbiA9IDA7CiAJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCi0JaWYgKHNwZWMtPm51bV9jdnRzID49IE1BWF9IRE1JX0NWVFMpIHsKLQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICJIRE1JOiBubyBzcGFjZSBmb3IgY29udmVydGVyICVkXG4iLCBuaWQpOwotCQlyZXR1cm4gLUUyQklHOworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKQorCQlpZiAobmlkID09IHNwZWMtPnBpbl9jdnRbaV0pIHsKKwkJCWZvdW5kX3BpbiA9IDE7CisJCQlicmVhazsKKwkJfQorCisJaWYgKCFmb3VuZF9waW4pIHsKKwkJc25kX3ByaW50ZGQoIkhETUk6IFNraXBwaW5nIG5vZGUgJWQgKG5vIGNvbm5lY3Rpb24pXG4iLCBuaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoc25kX0JVR19PTihzcGVjLT5udW1fY3Z0cyA+PSBNQVhfSERNSV9DVlRTKSkKKwkJcmV0dXJuIC1FMkJJRzsKKwogCXNwZWMtPmN2dFtzcGVjLT5udW1fY3Z0c10gPSBuaWQ7CiAJc3BlYy0+bnVtX2N2dHMrKzsKIApAQCAtOTMxLDYgKzk0MSw4IEBACiB7CiAJaGRhX25pZF90IG5pZDsKIAlpbnQgaSwgbm9kZXM7CisJaW50IG51bV90bXBfY3Z0cyA9IDA7CisJaGRhX25pZF90IHRtcF9jdnRbTUFYX0hETUlfQ1ZUU107CiAKIAlub2RlcyA9IHNuZF9oZGFfZ2V0X3N1Yl9ub2Rlcyhjb2RlYywgY29kZWMtPmFmZywgJm5pZCk7CiAJaWYgKCFuaWQgfHwgbm9kZXMgPCAwKSB7CkBAIC05NDEsNiArOTUzLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbm9kZXM7IGkrKywgbmlkKyspIHsKIAkJdW5zaWduZWQgaW50IGNhcHM7CiAJCXVuc2lnbmVkIGludCB0eXBlOworCQl1bnNpZ25lZCBpbnQgY29uZmlnOwogCiAJCWNhcHMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX0FVRElPX1dJREdFVF9DQVApOwogCQl0eXBlID0gZ2V0X3djYXBzX3R5cGUoY2Fwcyk7CkBAIC05NTAsMTcgKzk2MywzMiBAQAogCiAJCXN3aXRjaCAodHlwZSkgewogCQljYXNlIEFDX1dJRF9BVURfT1VUOgotCQkJaGRtaV9hZGRfY3Z0KGNvZGVjLCBuaWQpOworCQkJaWYgKG51bV90bXBfY3Z0cyA+PSBNQVhfSERNSV9DVlRTKSB7CisJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJICAgIkhETUk6IG5vIHNwYWNlIGZvciBjb252ZXJ0ZXIgJWRcbiIsIG5pZCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQl0bXBfY3Z0W251bV90bXBfY3Z0c10gPSBuaWQ7CisJCQludW1fdG1wX2N2dHMrKzsKIAkJCWJyZWFrOwogCQljYXNlIEFDX1dJRF9QSU46CiAJCQljYXBzID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QSU5fQ0FQKTsKIAkJCWlmICghKGNhcHMgJiAoQUNfUElOQ0FQX0hETUkgfCBBQ19QSU5DQVBfRFApKSkKIAkJCQljb250aW51ZTsKKworCQkJY29uZmlnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChjb25maWcpID09IEFDX0pBQ0tfUE9SVF9OT05FKQorCQkJCWNvbnRpbnVlOworCiAJCQloZG1pX2FkZF9waW4oY29kZWMsIG5pZCk7CiAJCQlicmVhazsKIAkJfQogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBudW1fdG1wX2N2dHM7IGkrKykKKwkJaGRtaV9hZGRfY3Z0KGNvZGVjLCB0bXBfY3Z0W2ldKTsKKwogCS8qCiAJICogRzQ1L0liZXhQZWFrIGRvbid0IHN1cHBvcnQgRVBTUzogdGhlIHVuc29saWNpdGVkIHBpbiBob3QgcGx1ZyBldmVudAogCSAqIGNhbiBiZSBsb3N0IGFuZCBwcmVzZW5jZSBzZW5zZSB2ZXJiIHdpbGwgYmVjb21lIGluYWNjdXJhdGUgaWYgdGhlCkBAIC0xMTY1LDExICsxMTkzLDUzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2hhbm5lbHNfMl82XzhbXSA9IHsKKwkyLCA2LCA4Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGNoYW5uZWxzXzJfOFtdID0geworCTIsIDgKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgaHdfY29uc3RyYWludHNfMl82XzhfY2hhbm5lbHMgPSB7CisJLmNvdW50ID0gQVJSQVlfU0laRShjaGFubmVsc18yXzZfOCksCisJLmxpc3QgPSBjaGFubmVsc18yXzZfOCwKKwkubWFzayA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IGh3X2NvbnN0cmFpbnRzXzJfOF9jaGFubmVscyA9IHsKKwkuY291bnQgPSBBUlJBWV9TSVpFKGNoYW5uZWxzXzJfOCksCisJLmxpc3QgPSBjaGFubmVsc18yXzgsCisJLm1hc2sgPSAwLAorfTsKKwogc3RhdGljIGludCBzaW1wbGVfcGxheWJhY2tfcGNtX29wZW4oc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKIAkJCQkgICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgKmh3X2NvbnN0cmFpbnRzX2NoYW5uZWxzID0gTlVMTDsKKworCXN3aXRjaCAoY29kZWMtPnByZXNldC0+aWQpIHsKKwljYXNlIDB4MTBkZTAwMDI6CisJY2FzZSAweDEwZGUwMDAzOgorCWNhc2UgMHgxMGRlMDAwNToKKwljYXNlIDB4MTBkZTAwMDY6CisJCWh3X2NvbnN0cmFpbnRzX2NoYW5uZWxzID0gJmh3X2NvbnN0cmFpbnRzXzJfOF9jaGFubmVsczsKKwkJYnJlYWs7CisJY2FzZSAweDEwZGUwMDA3OgorCQlod19jb25zdHJhaW50c19jaGFubmVscyA9ICZod19jb25zdHJhaW50c18yXzZfOF9jaGFubmVsczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGh3X2NvbnN0cmFpbnRzX2NoYW5uZWxzICE9IE5VTEwpIHsKKwkJc25kX3BjbV9od19jb25zdHJhaW50X2xpc3Qoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAorCQkJCVNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKKwkJCQlod19jb25zdHJhaW50c19jaGFubmVscyk7CisJfQorCiAJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19vcGVuKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQpOwogfQogCkBAIC0xNTMyLDcgKzE2MDIsNyBAQAogeyAuaWQgPSAweDEwMDI3OTNjLCAubmFtZSA9ICJSUzYwMCBIRE1JIiwJLnBhdGNoID0gcGF0Y2hfYXRpaGRtaSB9LAogeyAuaWQgPSAweDEwMDI3OTE5LCAubmFtZSA9ICJSUzYwMCBIRE1JIiwJLnBhdGNoID0gcGF0Y2hfYXRpaGRtaSB9LAogeyAuaWQgPSAweDEwMDI3OTFhLCAubmFtZSA9ICJSUzY5MC83ODAgSERNSSIsCS5wYXRjaCA9IHBhdGNoX2F0aWhkbWkgfSwKLXsgLmlkID0gMHgxMDAyYWEwMSwgLm5hbWUgPSAiUjZ4eCBIRE1JIiwJLnBhdGNoID0gcGF0Y2hfYXRpaGRtaSB9LAoreyAuaWQgPSAweDEwMDJhYTAxLCAubmFtZSA9ICJSNnh4IEhETUkiLAkucGF0Y2ggPSBwYXRjaF9nZW5lcmljX2hkbWkgfSwKIHsgLmlkID0gMHgxMDk1MTM5MCwgLm5hbWUgPSAiU2lJMTM5MCBIRE1JIiwJLnBhdGNoID0gcGF0Y2hfZ2VuZXJpY19oZG1pIH0sCiB7IC5pZCA9IDB4MTA5NTEzOTIsIC5uYW1lID0gIlNpSTEzOTIgSERNSSIsCS5wYXRjaCA9IHBhdGNoX2dlbmVyaWNfaGRtaSB9LAogeyAuaWQgPSAweDE3ZTgwMDQ3LCAubmFtZSA9ICJDaHJvbnRlbCBIRE1JIiwJLnBhdGNoID0gcGF0Y2hfZ2VuZXJpY19oZG1pIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IDU1MmEwOWUuLjUxYzA4ZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC0yMzEsNyArMjMxLDYgQEAKIAlBTEM4ODhfQUNFUl9BU1BJUkVfODkzMEcsCiAJQUxDODg4X0FDRVJfQVNQSVJFXzc3MzBHLAogCUFMQzg4M19NRURJT04sCi0JQUxDODgzX01FRElPTl9NRDIsCiAJQUxDODgzX01FRElPTl9XSU0yMTYwLAogCUFMQzg4M19MQVBUT1BfRUFQRCwKIAlBTEM4ODNfTEVOT1ZPXzEwMUVfMmNoLApAQCAtMTY3OCwyOSArMTY3NywzMiBAQAogCXUzMiB2YWw7CiB9OwogCitzdHJ1Y3QgYWxjX21vZGVsX2ZpeHVwIHsKKwljb25zdCBpbnQgaWQ7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKIHN0cnVjdCBhbGNfZml4dXAgewogCXVuc2lnbmVkIGludCBza3U7CiAJY29uc3Qgc3RydWN0IGFsY19waW5jZmcgKnBpbnM7CiAJY29uc3Qgc3RydWN0IGhkYV92ZXJiICp2ZXJiczsKKwl2b2lkICgqZnVuYykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgKmZpeCwKKwkJICAgICBpbnQgcHJlX2luaXQpOwogfTsKIAotc3RhdGljIHZvaWQgYWxjX3BpY2tfZml4dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkgICBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcXVpcmssCi0JCQkgICBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwICpmaXgsCi0JCQkgICBpbnQgcHJlX2luaXQpCitzdGF0aWMgdm9pZCBfX2FsY19waWNrX2ZpeHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwICpmaXgsCisJCQkgICAgIGNvbnN0IGNoYXIgKm1vZGVsbmFtZSwKKwkJCSAgICAgaW50IHByZV9pbml0KQogewogCWNvbnN0IHN0cnVjdCBhbGNfcGluY2ZnICpjZmc7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjOwogCi0JcXVpcmsgPSBzbmRfcGNpX3F1aXJrX2xvb2t1cChjb2RlYy0+YnVzLT5wY2ksIHF1aXJrKTsKLQlpZiAoIXF1aXJrKQotCQlyZXR1cm47Ci0JZml4ICs9IHF1aXJrLT52YWx1ZTsKIAljZmcgPSBmaXgtPnBpbnM7CiAJaWYgKHByZV9pbml0ICYmIGZpeC0+c2t1KSB7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiAlczogQXBwbHkgc2t1IG92ZXJyaWRlIGZvciAlc1xuIiwKLQkJCSAgICBjb2RlYy0+Y2hpcF9uYW1lLCBxdWlyay0+bmFtZSk7CisJCQkgICAgY29kZWMtPmNoaXBfbmFtZSwgbW9kZWxuYW1lKTsKICNlbmRpZgogCQlzcGVjID0gY29kZWMtPnNwZWM7CiAJCXNwZWMtPmNkZWZpbmUuc2t1X2NmZyA9IGZpeC0+c2t1OwpAQCAtMTcwOSw3ICsxNzExLDcgQEAKIAlpZiAocHJlX2luaXQgJiYgY2ZnKSB7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiAlczogQXBwbHkgcGluY2ZnIGZvciAlc1xuIiwKLQkJCSAgICBjb2RlYy0+Y2hpcF9uYW1lLCBxdWlyay0+bmFtZSk7CisJCQkgICAgY29kZWMtPmNoaXBfbmFtZSwgbW9kZWxuYW1lKTsKICNlbmRpZgogCQlmb3IgKDsgY2ZnLT5uaWQ7IGNmZysrKQogCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCBjZmctPm5pZCwgY2ZnLT52YWwpOwpAQCAtMTcxNywxMCArMTcxOSw1MyBAQAogCWlmICghcHJlX2luaXQgJiYgZml4LT52ZXJicykgewogI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogJXM6IEFwcGx5IGZpeC12ZXJicyBmb3IgJXNcbiIsCi0JCQkgICAgY29kZWMtPmNoaXBfbmFtZSwgcXVpcmstPm5hbWUpOworCQkJICAgIGNvZGVjLT5jaGlwX25hbWUsIG1vZGVsbmFtZSk7CiAjZW5kaWYKIAkJYWRkX3ZlcmIoY29kZWMtPnNwZWMsIGZpeC0+dmVyYnMpOwogCX0KKwlpZiAoZml4LT5mdW5jKSB7CisjaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCisJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiAlczogQXBwbHkgZml4LWZ1bmMgZm9yICVzXG4iLAorCQkJICAgIGNvZGVjLT5jaGlwX25hbWUsIG1vZGVsbmFtZSk7CisjZW5kaWYKKwkJZml4LT5mdW5jKGNvZGVjLCBmaXgsIHByZV9pbml0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFsY19waWNrX2ZpeHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcXVpcmssCisJCQkJIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgKmZpeCwKKwkJCQkgaW50IHByZV9pbml0KQoreworCXF1aXJrID0gc25kX3BjaV9xdWlya19sb29rdXAoY29kZWMtPmJ1cy0+cGNpLCBxdWlyayk7CisJaWYgKHF1aXJrKSB7CisJCWZpeCArPSBxdWlyay0+dmFsdWU7CisjaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCisJCV9fYWxjX3BpY2tfZml4dXAoY29kZWMsIGZpeCwgcXVpcmstPm5hbWUsIHByZV9pbml0KTsKKyNlbHNlCisJCV9fYWxjX3BpY2tfZml4dXAoY29kZWMsIGZpeCwgTlVMTCwgcHJlX2luaXQpOworI2VuZGlmCisJfQorfQorCitzdGF0aWMgdm9pZCBhbGNfcGlja19maXh1cF9tb2RlbChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgY29uc3Qgc3RydWN0IGFsY19tb2RlbF9maXh1cCAqbW9kZWxzLAorCQkJCSBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcXVpcmssCisJCQkJIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgKmZpeCwKKwkJCQkgaW50IHByZV9pbml0KQoreworCWlmIChjb2RlYy0+bW9kZWxuYW1lICYmIG1vZGVscykgeworCQl3aGlsZSAobW9kZWxzLT5uYW1lKSB7CisJCQlpZiAoIXN0cmNtcChjb2RlYy0+bW9kZWxuYW1lLCBtb2RlbHMtPm5hbWUpKSB7CisJCQkJZml4ICs9IG1vZGVscy0+aWQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQltb2RlbHMrKzsKKwkJfQorCQlfX2FsY19waWNrX2ZpeHVwKGNvZGVjLCBmaXgsIGNvZGVjLT5tb2RlbG5hbWUsIHByZV9pbml0KTsKKwl9IGVsc2UgeworCQlhbGNfcGlja19maXh1cChjb2RlYywgcXVpcmssIGZpeCwgcHJlX2luaXQpOworCX0KIH0KIAogc3RhdGljIGludCBhbGNfcmVhZF9jb2VmX2lkeChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKQEAgLTE5ODEsNiArMjAyNiw3IEBACiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMn0sCiAJeyB9CiB9OwogCkBAIC0yMTIwLDE3ICsyMTY2LDE3IEBACiAJewogCQkubnVtX2l0ZW1zID0gNSwKIAkJLml0ZW1zID0gewotCQkJeyAiRXh0IE1pYyIsIDB4MCB9LAorCQkJeyAiTWljIiwgMHgwIH0sCiAJCQl7ICJMaW5lIEluIiwgMHgyIH0sCiAJCQl7ICJDRCIsIDB4NCB9LAogCQkJeyAiSW5wdXQgTWl4IiwgMHhhIH0sCi0JCQl7ICJJbnQgTWljIiwgMHhiIH0sCisJCQl7ICJJbnRlcm5hbCBNaWMiLCAweGIgfSwKIAkJfSwKIAl9LAogCXsKIAkJLm51bV9pdGVtcyA9IDQsCiAJCS5pdGVtcyA9IHsKLQkJCXsgIkV4dCBNaWMiLCAweDAgfSwKKwkJCXsgIk1pYyIsIDB4MCB9LAogCQkJeyAiTGluZSBJbiIsIDB4MiB9LAogCQkJeyAiQ0QiLCAweDQgfSwKIAkJCXsgIklucHV0IE1peCIsIDB4YSB9LApAQCAtMjE4Nyw3ICsyMjMzLDcgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKQEAgLTIyMDUsNyArMjI1MSw3IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CkBAIC0yNzk2LDEwICsyODQyLDEwIEBACiAJSERBX0JJTkRfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBkLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRXh0IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkV4dCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMzMwNyw3ICszMzUzLDcgQEAKIH07CiAKIC8qIGF1dG8tdG9nZ2xlIGZyb250IG1pYyAqLwotc3RhdGljIHZvaWQgYWxjODgwX3VuaXdpbGxfbWljX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODh4X3NpbXBsZV9taWNfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAgCXVuc2lnbmVkIGludCBwcmVzZW50OwogCXVuc2lnbmVkIGNoYXIgYml0czsKQEAgLTMzMjksNyArMzM3NSw3IEBACiBzdGF0aWMgdm9pZCBhbGM4ODBfdW5pd2lsbF9pbml0X2hvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7Ci0JYWxjODgwX3VuaXdpbGxfbWljX2F1dG9tdXRlKGNvZGVjKTsKKwlhbGM4OHhfc2ltcGxlX21pY19hdXRvbXV0ZShjb2RlYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFsYzg4MF91bml3aWxsX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLApAQCAtMzM0MCw3ICszMzg2LDcgQEAKIAkgKi8KIAlzd2l0Y2ggKHJlcyA+PiAyOCkgewogCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKLQkJYWxjODgwX3VuaXdpbGxfbWljX2F1dG9tdXRlKGNvZGVjKTsKKwkJYWxjODh4X3NpbXBsZV9taWNfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50KGNvZGVjLCByZXMpOwpAQCAtNTAyMyw2ICs1MDY5LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICphbGNfZ2V0X2xpbmVfb3V0X3BmeChjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcsCisJCQkJCWJvb2wgY2FuX2JlX21hc3RlcikKK3sKKwlpZiAoIWNmZy0+aHBfb3V0cyAmJiAhY2ZnLT5zcGVha2VyX291dHMgJiYgY2FuX2JlX21hc3RlcikKKwkJcmV0dXJuICJNYXN0ZXIiOworCisJc3dpdGNoIChjZmctPmxpbmVfb3V0X3R5cGUpIHsKKwljYXNlIEFVVE9fUElOX1NQRUFLRVJfT1VUOgorCQlyZXR1cm4gIlNwZWFrZXIiOworCWNhc2UgQVVUT19QSU5fSFBfT1VUOgorCQlyZXR1cm4gIkhlYWRwaG9uZSI7CisJZGVmYXVsdDoKKwkJaWYgKGNmZy0+bGluZV9vdXRzID09IDEpCisJCQlyZXR1cm4gIlBDTSI7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogLyogYWRkIHBsYXliYWNrIGNvbnRyb2xzIGZyb20gdGhlIHBhcnNlZCBEQUMgdGFibGUgKi8KIHN0YXRpYyBpbnQgYWxjODgwX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKIAkJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCkBAIC01MDMwLDYgKzUwOTUsNyBAQAogCXN0YXRpYyBjb25zdCBjaGFyICpjaG5hbWVbNF0gPSB7CiAJCSJGcm9udCIsICJTdXJyb3VuZCIsIE5VTEwgLypDTEZFKi8sICJTaWRlIgogCX07CisJY29uc3QgY2hhciAqcGZ4ID0gYWxjX2dldF9saW5lX291dF9wZngoY2ZnLCBmYWxzZSk7CiAJaGRhX25pZF90IG5pZDsKIAlpbnQgaSwgZXJyOwogCkBAIC01MDM3LDcgKzUxMDMsNyBAQAogCQlpZiAoIXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldKQogCQkJY29udGludWU7CiAJCW5pZCA9IGFsYzg4MF9pZHhfdG9fbWl4ZXIoYWxjODgwX2RhY190b19pZHgoc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0pKTsKLQkJaWYgKGkgPT0gMikgeworCQlpZiAoIXBmeCAmJiBpID09IDIpIHsKIAkJCS8qIENlbnRlci9MRkUgKi8KIAkJCWVyciA9IGFkZF9wYl92b2xfY3RybChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsCiAJCQkJCSAgICAgICJDZW50ZXIiLApAQCAtNTA2NCwxOCArNTEzMCwxNyBAQAogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfSBlbHNlIHsKLQkJCWNvbnN0IGNoYXIgKnBmeDsKLQkJCWlmIChjZmctPmxpbmVfb3V0cyA9PSAxICYmCi0JCQkgICAgY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX1NQRUFLRVJfT1VUKQotCQkJCXBmeCA9ICJTcGVha2VyIjsKLQkJCWVsc2UKLQkJCQlwZnggPSBjaG5hbWVbaV07Ci0JCQllcnIgPSBhZGRfcGJfdm9sX2N0cmwoc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBwZngsCisJCQljb25zdCBjaGFyICpuYW1lID0gcGZ4OworCQkJaWYgKCFuYW1lKQorCQkJCW5hbWUgPSBjaG5hbWVbaV07CisJCQllcnIgPSBfX2FkZF9wYl92b2xfY3RybChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsCisJCQkJCQluYW1lLCBpLAogCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLAogCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7Ci0JCQllcnIgPSBhZGRfcGJfc3dfY3RybChzcGVjLCBBTENfQ1RMX0JJTkRfTVVURSwgcGZ4LAorCQkJZXJyID0gX19hZGRfcGJfc3dfY3RybChzcGVjLCBBTENfQ1RMX0JJTkRfTVVURSwKKwkJCQkJICAgICAgIG5hbWUsIGksCiAJCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDIsCiAJCQkJCQkJICAgICAgSERBX0lOUFVUKSk7CiAJCQlpZiAoZXJyIDwgMCkKQEAgLTUxNTUsNyArNTIyMCw4IEBACiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwotCWludCBpLCBlcnIsIGlkeCwgdHlwZSwgdHlwZV9pZHggPSAwOworCWludCBpLCBlcnIsIGlkeCwgdHlwZV9pZHggPSAwOworCWNvbnN0IGNoYXIgKnByZXZfbGFiZWwgPSBOVUxMOwogCiAJZm9yIChpID0gMDsgaSA8IGNmZy0+bnVtX2lucHV0czsgaSsrKSB7CiAJCWhkYV9uaWRfdCBwaW47CkBAIC01MTY1LDEyICs1MjMxLDEzIEBACiAJCWlmICghYWxjX2lzX2lucHV0X3Bpbihjb2RlYywgcGluKSkKIAkJCWNvbnRpbnVlOwogCi0JCXR5cGUgPSBjZmctPmlucHV0c1tpXS50eXBlOwotCQlpZiAoaSA+IDAgJiYgdHlwZSA9PSBjZmctPmlucHV0c1tpIC0gMV0udHlwZSkKKwkJbGFiZWwgPSBoZGFfZ2V0X2F1dG9jZmdfaW5wdXRfbGFiZWwoY29kZWMsIGNmZywgaSk7CisJCWlmIChwcmV2X2xhYmVsICYmICFzdHJjbXAobGFiZWwsIHByZXZfbGFiZWwpKQogCQkJdHlwZV9pZHgrKzsKIAkJZWxzZQogCQkJdHlwZV9pZHggPSAwOwotCQlsYWJlbCA9IGhkYV9nZXRfYXV0b2NmZ19pbnB1dF9sYWJlbChjb2RlYywgY2ZnLCBpKTsKKwkJcHJldl9sYWJlbCA9IGxhYmVsOworCiAJCWlmIChtaXhlcikgewogCQkJaWR4ID0gZ2V0X2Nvbm5lY3Rpb25faW5kZXgoY29kZWMsIG1peGVyLCBwaW4pOwogCQkJaWYgKGlkeCA+PSAwKSB7CkBAIC03NDA2LDcgKzc0NzMsNyBAQAogCS5udW1faXRlbXMgPSA0LAogCS5pdGVtcyA9IHsKIAkJeyAiTWljIiwgMHgwIH0sCi0JCXsgIkludCBNaWMiLCAweDEgfSwKKwkJeyAiSW50ZXJuYWwgTWljIiwgMHgxIH0sCiAJCXsgIkxpbmUiLCAweDIgfSwKIAkJeyAiQ0QiLCAweDQgfSwKIAl9LApAQCAtNzQxNiw3ICs3NDgzLDcgQEAKIAkubnVtX2l0ZW1zID0gMiwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LAotCQl7ICJJbnQgTWljIiwgMHgxIH0sCisJCXsgIkludGVybmFsIE1pYyIsIDB4MSB9LAogCX0sCiB9OwogCkBAIC03ODUxLDEwICs3OTE4LDEwIEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwpAQCAtNzg3OCw4ICs3OTQ1LDggQEAKIAlIREFfQ09ERUNfTVVURSAgKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUgICgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTGluZSBCb29zdCIsIDB4MWEsIDB4MDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMHgwMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEJvb3N0IFZvbHVtZSIsIDB4MWEsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDB4MDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNzg5Niw4ICs3OTYzLDggQEAKIAlIREFfQ09ERUNfTVVURSAgKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDcsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUgICgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTGluZSBCb29zdCIsIDB4MTUsIDB4MDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOSwgMHgwMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEJvb3N0IFZvbHVtZSIsIDB4MTUsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDB4MDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNzkxMiw3ICs3OTc5LDcgQEAKIAlIREFfQklORF9NVVRFICAgKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwZiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDcsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUgICgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA3LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgQm9vc3QiLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgQm9vc3QgVm9sdW1lIiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03OTMxLDcgKzc5OTgsNyBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwpAQCAtNzk0NiwxMCArODAxMywxMCBAQAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03OTY5LDcgKzgwMzYsNyBAQAogCUhEQV9DT0RFQ19NVVRFKCJNb2JpbGUgTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03OTgyLDcgKzgwNDksNyBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwpAQCAtODc2MywxMCArODgzMCwxMCBAQAogCUhEQV9CSU5EX01VVEVfTU9OTygiTEZFIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDIsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKQEAgLTg3NzcsMTEgKzg4NDQsMTEgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBkLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiSW50IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC04NzkxLDExICs4ODU4LDExIEBACiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZCwgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkludCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtODgwOCwxMCArODg3NSwxMCBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKQEAgLTg4MzEsMTAgKzg4OTgsMTAgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCBWb2x1bWUiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CkBAIC04ODU1LDEwICs4OTIyLDEwIEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwpAQCAtODg3OSwxMCArODk0NiwxMCBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxYiwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxYiwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKQEAgLTg5MDIsMTAgKzg5NjksMTAgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCBWb2x1bWUiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CkBAIC04OTI2LDcgKzg5OTMsNyBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwpAQCAtODkzOSwyMCArOTAwNiwyMCBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCBWb2x1bWUiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfdGFyZ2FfOGNoX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiU2lkZSBQbGF5YmFjayBWb2x1bWUiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIlNpZGUgUGxheWJhY2sgU3dpdGNoIiwgMHgwZiwgMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiSW50IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC04OTYzLDcgKzkwMzAsNyBAQAogCUhEQV9CSU5EX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZCwgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CkBAIC04OTc2LDIxICs5MDQzLDggQEAKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQl7IH0gLyogZW5kICovCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgzX21lZGlvbl9tZDJfbWl4ZXJbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC05MDM3LDcgKzkwOTEsNyBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwpAQCAtOTA1MCw3ICs5MTA0LDcgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwpAQCAtOTA3MiwxMCArOTEyNiwxMCBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKQEAgLTkwOTYsOCArOTE1MCw4IEBACiAJSERBX0NPREVDX01VVEUoIkVuYWJsZSBIZWFkcGhvbmVzIiwgMHgxNSwgMHgwMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfTU9OTygiRW5hYmxlIExGRSIsIDB4MTYsIDIsIDB4MDAsIEhEQV9PVVRQVVQpLAogCS8qIEJvb3N0IG1peGVycyAqLwotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDB4MDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTGluZSBCb29zdCIsIDB4MWEsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBCb29zdCBWb2x1bWUiLCAweDFhLCAweDAwLCBIREFfSU5QVVQpLAogCS8qIElucHV0IG1peGVycyAqLwogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMCwgSERBX0lOUFVUKSwKQEAgLTkxMTEsNyArOTE2NSw3IEBACiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CkBAIC05MTQxLDcgKzkxOTUsNyBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwpAQCAtOTE4MiwxNiArOTIzNiw2IEBACiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDE3OwogfQogCi0vKiBhdXRvLXRvZ2dsZSBmcm9udCBtaWMgKi8KLS8qCi1zdGF0aWMgdm9pZCBhbGM4ODNfbWl0YWNfbWljX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXVuc2lnbmVkIGNoYXIgYml0cyA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MTgpID8gSERBX0FNUF9NVVRFIDogMDsKLQotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgwYiwgSERBX0lOUFVULCAxLCBIREFfQU1QX01VVEUsIGJpdHMpOwotfQotKi8KLQogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfbWl0YWNfdmVyYnNbXSA9IHsKIAkvKiBIUCAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCkBAIC05NDM1LDE4ICs5NDc5LDggQEAKIAkJYWxjODg4X2xlbm92b19tczcxOTVfcmNhX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfbWVkaW9uX21kMl92ZXJic1tdID0gewotCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCi0KLQl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAotCi0JezB4MTQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LAotCXsgfSAvKiBlbmQgKi8KLX07Ci0KIC8qIHRvZ2dsZSBzcGVha2VyLW91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGhwLWphY2sgc3RhdGUgKi8KLXN0YXRpYyB2b2lkIGFsYzg4M19tZWRpb25fbWQyX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODgzX2xlbm92b19uYjA3NjNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKQEAgLTk0NTgsMTUgKzk0OTIsNiBAQAogI2RlZmluZSBhbGM4ODNfdGFyZ2FfaW5pdF9ob29rCQlhbGM4ODJfdGFyZ2FfaW5pdF9ob29rCiAjZGVmaW5lIGFsYzg4M190YXJnYV91bnNvbF9ldmVudAlhbGM4ODJfdGFyZ2FfdW5zb2xfZXZlbnQKIAotc3RhdGljIHZvaWQgYWxjODgzX2NsZXZvX203MjBfbWljX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXVuc2lnbmVkIGludCBwcmVzZW50OwotCi0JcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MTgpOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgwYiwgSERBX0lOUFVULCAxLAotCQkJCSBIREFfQU1QX01VVEUsIHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwKTsKLX0KLQogc3RhdGljIHZvaWQgYWxjODgzX2NsZXZvX203MjBfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC05NDc4LDcgKzk1MDMsNyBAQAogc3RhdGljIHZvaWQgYWxjODgzX2NsZXZvX203MjBfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCWFsY19hdXRvbXV0ZV9hbXAoY29kZWMpOwotCWFsYzg4M19jbGV2b19tNzIwX21pY19hdXRvbXV0ZShjb2RlYyk7CisJYWxjODh4X3NpbXBsZV9taWNfYXV0b211dGUoY29kZWMpOwogfQogCiBzdGF0aWMgdm9pZCBhbGM4ODNfY2xldm9fbTcyMF91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKQEAgLTk0ODYsNyArOTUxMSw3IEBACiB7CiAJc3dpdGNoIChyZXMgPj4gMjYpIHsKIAljYXNlIEFMQzg4MF9NSUNfRVZFTlQ6Ci0JCWFsYzg4M19jbGV2b19tNzIwX21pY19hdXRvbXV0ZShjb2RlYyk7CisJCWFsYzg4eF9zaW1wbGVfbWljX2F1dG9tdXRlKGNvZGVjKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudChjb2RlYywgcmVzKTsKQEAgLTk3MzEsNyArOTc1Niw2IEBACiAJW0FMQzg4OF9BQ0VSX0FTUElSRV84OTMwR10JPSAiYWNlci1hc3BpcmUtODkzMGciLAogCVtBTEM4ODhfQUNFUl9BU1BJUkVfNzczMEddCT0gImFjZXItYXNwaXJlLTc3MzBnIiwKIAlbQUxDODgzX01FRElPTl0JCT0gIm1lZGlvbiIsCi0JW0FMQzg4M19NRURJT05fTUQyXQk9ICJtZWRpb24tbWQyIiwKIAlbQUxDODgzX01FRElPTl9XSU0yMTYwXQk9ICJtZWRpb24td2ltMjE2MCIsCiAJW0FMQzg4M19MQVBUT1BfRUFQRF0JPSAibGFwdG9wLWVhcGQiLAogCVtBTEM4ODNfTEVOT1ZPXzEwMUVfMmNoXSA9ICJsZW5vdm8tMTAxZSIsCkBAIC0xMDM3OSwxOSArMTA0MDMsNiBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzX3NpeHN0YWNrX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19jYXB0dXJlX3NvdXJjZSwKIAl9LAotCVtBTEM4ODNfTUVESU9OX01EMl0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzg4M19tZWRpb25fbWQyX21peGVyfSwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzg4M19pbml0X3ZlcmJzLCBhbGM4ODNfbWVkaW9uX21kMl92ZXJic30sCi0JCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgzX2RhY19uaWRzKSwKLQkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAotCQkuZGlnX291dF9uaWQgPSBBTEM4ODNfRElHT1VUX05JRCwKLQkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4M18zU1RfMmNoX21vZGVzKSwKLQkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M18zU1RfMmNoX21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19jYXB0dXJlX3NvdXJjZSwKLQkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKLQkJLnNldHVwID0gYWxjODgzX21lZGlvbl9tZDJfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAotCX0sCiAJW0FMQzg4M19NRURJT05fV0lNMjE2MF0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M19tZWRpb25fd2ltMjE2MF9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjODgzX2luaXRfdmVyYnMsIGFsYzg4M19tZWRpb25fd2ltMjE2MF92ZXJicyB9LApAQCAtMTA0NjgsNyArMTA0NzksNyBAQAogCQkubmVlZF9kYWNfZml4ID0gMSwKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfbGVub3ZvX25iMDc2M19jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKLQkJLnNldHVwID0gYWxjODgzX21lZGlvbl9tZDJfc2V0dXAsCisJCS5zZXR1cCA9IGFsYzg4M19sZW5vdm9fbmIwNzYzX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKIAl9LAogCVtBTEM4ODhfTEVOT1ZPX01TNzE5NV9ESUddID0gewpAQCAtMTA4MzAsMjUgKzEwODQxLDMwIEBACiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7Ci0JaW50IGksIGVyciwgdHlwZTsKKwlpbnQgaSwgZXJyOwogCWludCB0eXBlX2lkeCA9IDA7CiAJaGRhX25pZF90IG5pZDsKKwljb25zdCBjaGFyICpwcmV2X2xhYmVsID0gTlVMTDsKIAogCWZvciAoaSA9IDA7IGkgPCBjZmctPm51bV9pbnB1dHM7IGkrKykgewogCQlpZiAoY2ZnLT5pbnB1dHNbaV0udHlwZSA+IEFVVE9fUElOX01JQykKIAkJCWJyZWFrOwogCQluaWQgPSBjZmctPmlucHV0c1tpXS5waW47CiAJCWlmIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX0lOX0FNUCkgewotCQkJY2hhciBsYWJlbFszMl07Ci0JCQl0eXBlID0gY2ZnLT5pbnB1dHNbaV0udHlwZTsKLQkJCWlmIChpID4gMCAmJiB0eXBlID09IGNmZy0+aW5wdXRzW2kgLSAxXS50eXBlKQorCQkJY29uc3QgY2hhciAqbGFiZWw7CisJCQljaGFyIGJvb3N0X2xhYmVsWzMyXTsKKworCQkJbGFiZWwgPSBoZGFfZ2V0X2F1dG9jZmdfaW5wdXRfbGFiZWwoY29kZWMsIGNmZywgaSk7CisJCQlpZiAocHJldl9sYWJlbCAmJiAhc3RyY21wKGxhYmVsLCBwcmV2X2xhYmVsKSkKIAkJCQl0eXBlX2lkeCsrOwogCQkJZWxzZQogCQkJCXR5cGVfaWR4ID0gMDsKLQkJCXNucHJpbnRmKGxhYmVsLCBzaXplb2YobGFiZWwpLCAiJXMgQm9vc3QiLAotCQkJCSBoZGFfZ2V0X2F1dG9jZmdfaW5wdXRfbGFiZWwoY29kZWMsIGNmZywgaSkpOwotCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBsYWJlbCwKLQkJCQkJICB0eXBlX2lkeCwKKwkJCXByZXZfbGFiZWwgPSBsYWJlbDsKKworCQkJc25wcmludGYoYm9vc3RfbGFiZWwsIHNpemVvZihib29zdF9sYWJlbCksCisJCQkJICIlcyBCb29zdCBWb2x1bWUiLCBsYWJlbCk7CisJCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsCisJCQkJCSAgYm9vc3RfbGFiZWwsIHR5cGVfaWR4LAogCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsIEhEQV9JTlBVVCkpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKQEAgLTEwODU3LDYgKzEwODczLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhbGM4NjF2ZF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKTsKKwogLyogYWxtb3N0IGlkZW50aWNhbCB3aXRoIEFMQzg4MCBwYXJzZXIuLi4gKi8KIHN0YXRpYyBpbnQgYWxjODgyX3BhcnNlX2F1dG9fY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMTA4NzQsNyArMTA4OTMsMTAgQEAKIAllcnIgPSBhbGM4ODBfYXV0b19maWxsX2RhY19uaWRzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQllcnIgPSBhbGM4ODBfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA4ODcpCisJCWVyciA9IGFsYzg2MXZkX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwllbHNlCisJCWVyciA9IGFsYzg4MF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJZXJyID0gYWxjODgwX2F1dG9fY3JlYXRlX2V4dHJhX291dChzcGVjLCBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0sCkBAIC0xMTA5MCwxMCArMTExMTIsMTAgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwRCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDIsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xMTE5NCwxMCArMTEyMTYsMTAgQEAKIAkJCSAgICBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKQEAgLTExMjE5LDcgKzExMjQxLDcgQEAKIAkJCSAgICBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxYSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxYSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLApAQCAtMTEyMzAsNyArMTEyNTIsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2Ml9IUF9CUENfV2lsZFdlc3Rfb3B0aW9uX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiUmVhciBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJSZWFyIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUmVhciBNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIlJlYXIgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTEyNTAsNyArMTEyNzIsNyBAQAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTEzNTcsMTAgKzExMzc5LDEwIEBACiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKQEAgLTExMzc0LDEwICsxMTM5NiwxMCBAQAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCBWb2x1bWUiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTExNDQ1LDEwICsxMTQ2NywxMCBAQAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCBWb2x1bWUiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTExNjMyLDcgKzExNjU0LDcgQEAKIAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAogCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTExNjg3LDcgKzExNzA5LDcgQEAKIAkubnVtX2l0ZW1zID0gMywKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LAotCQl7ICJJbnQgTWljIiwgMHgxIH0sCisJCXsgIkludGVybmFsIE1pYyIsIDB4MSB9LAogCQl7ICJDRCIsIDB4NCB9LAogCX0sCiB9OwpAQCAtMTE4MzksMTIgKzExODYxLDEyIEBACiAJfSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiSW50IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xMTg3NSwxMiArMTE4OTcsMTIgQEAKIAl9LAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTExODg5LDEwICsxMTkxMSwxMCBAQAogCUFMQzI2Ml9ISVBQT19NQVNURVJfU1dJVENILAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xMTkxOCw4ICsxMTk0MCw4IEBACiAJSERBX0JJTkRfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIE1pYyBCb29zdCIsIDB4MTUsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIE1pYyBCb29zdCBWb2x1bWUiLCAweDE1LCAwLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTEyMDg5LDEzICsxMjExMSw4IEBACiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5wcml2YXRlX2RhY19uaWRzOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdID0gMjsKIAotCWlmICghY2ZnLT5zcGVha2VyX3BpbnNbMF0gJiYgIWNmZy0+aHBfcGluc1swXSkKLQkJcGZ4ID0gIk1hc3RlciI7Ci0JZWxzZSBpZiAoY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX1NQRUFLRVJfT1VUKQotCQlwZnggPSAiU3BlYWtlciI7Ci0JZWxzZSBpZiAoY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX0hQX09VVCkKLQkJcGZ4ID0gIkhlYWRwaG9uZSI7Ci0JZWxzZQorCXBmeCA9IGFsY19nZXRfbGluZV9vdXRfcGZ4KGNmZywgdHJ1ZSk7CisJaWYgKCFwZngpCiAJCXBmeCA9ICJGcm9udCI7CiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQllcnIgPSBhbGMyNjJfYWRkX291dF9zd19jdGwoc3BlYywgY2ZnLT5saW5lX291dF9waW5zW2ldLCBwZngsIGkpOwpAQCAtMTI5OTYsOSArMTMwMTMsOSBAQAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEluIEJvb3N0IiwgMHgxYSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEluIEJvb3N0IFZvbHVtZSIsIDB4MWEsIDAsIEhEQV9JTlBVVCksCiAJeyB9CiB9OwogCkBAIC0xMzAwNyw5ICsxMzAyNCw5IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDMsIDB4MCwgSERBX09VVFBVVCksCiAJQUxDMjYyX0hJUFBPX01BU1RFUl9TV0lUQ0gsCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgSW4gQm9vc3QiLCAweDFhLCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCBWb2x1bWUiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgSW4gQm9vc3QgVm9sdW1lIiwgMHgxYSwgMCwgSERBX0lOUFVUKSwKIAl7IH0KIH07CiAKQEAgLTEzMTEzLDkgKzEzMTMwLDkgQEAKIAkJLnB1dCA9IGFsYzI2OF9hY2VyX21hc3Rlcl9zd19wdXQsCiAJCS5wcml2YXRlX3ZhbHVlID0gSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE0LCAzLCAwLCBIREFfT1VUUFVUKSwKIAl9LAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEluIEJvb3N0IiwgMHgxYSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEluIEJvb3N0IFZvbHVtZSIsIDB4MWEsIDAsIEhEQV9JTlBVVCksCiAJeyB9CiB9OwogCkBAIC0xMzEzMSw4ICsxMzE0OCw4IEBACiAJCS5wdXQgPSBhbGMyNjhfYWNlcl9tYXN0ZXJfc3dfcHV0LAogCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNCwgMywgMCwgSERBX09VVFBVVCksCiAJfSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgSW4gQm9vc3QiLCAweDFhLCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgSW4gQm9vc3QgVm9sdW1lIiwgMHgxYSwgMCwgSERBX0lOUFVUKSwKIAl7IH0KIH07CiAKQEAgLTEzMjI0LDggKzEzMjQxLDggQEAKIAlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDAzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJeyB9CiB9OwogCkBAIC0xMzI1OCw4ICsxMzI3NSw4IEBACiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MjMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiTWljIENhcHR1cmUgU3dpdGNoIiwgMHgyMywgMiwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRXh0IE1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJeyB9CiB9OwogCkBAIC0xNDA4MiwxMCArMTQwOTksMTAgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfTU9OTygiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCAweDE2LCAyLCAweDAsIEhEQV9PVVRQVVQpLAogCXsgfSAvKiBlbmQgKi8KQEAgLTE0MTA1LDEwICsxNDEyMiwxMCBAQAogCX0sCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCBWb2x1bWUiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCXsgfQogfTsKIApAQCAtMTQxMjYsMTMgKzE0MTQzLDEzIEBACiAJfSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRG9jayBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRG9jayBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJEb2NrIE1pYyBCb29zdCIsIDB4MWIsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRG9jayBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxYiwgMCwgSERBX0lOUFVUKSwKIAl7IH0KIH07CiAKQEAgLTE0MTYyLDMwICsxNDE3OSwzMCBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OV9sYXB0b3BfYW5hbG9nX2NhcHR1cmVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnRNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCBWb2x1bWUiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfbGFwdG9wX2RpZ2l0YWxfY2FwdHVyZV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjl2Yl9sYXB0b3BfYW5hbG9nX2NhcHR1cmVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnRNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCBWb2x1bWUiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjl2Yl9sYXB0b3BfZGlnaXRhbF9jYXB0dXJlX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTQ4MDQsMTIgKzE0ODIxLDIzIEBACiB9CiAjZW5kaWYgLyogU05EX0hEQV9ORUVEU19SRVNVTUUgKi8KIAorc3RhdGljIHZvaWQgYWxjMjY5X2ZpeHVwX2h3ZXEoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGFsY19maXh1cCAqZml4LCBpbnQgcHJlX2luaXQpCit7CisJaW50IGNvZWY7CisKKwljb2VmID0gYWxjX3JlYWRfY29lZl9pZHgoY29kZWMsIDB4MWUpOworCWFsY193cml0ZV9jb2VmX2lkeChjb2RlYywgMHgxZSwgY29lZiB8IDB4ODApOworfQorCiBlbnVtIHsKIAlBTEMyNjlfRklYVVBfU09OWV9WQUlPLAogCUFMQzI3NV9GSVhfU09OWV9WQUlPX0dQSU8yLAogCUFMQzI2OV9GSVhVUF9ERUxMX00xMDFaLAogCUFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFLAogCUFMQzI2OV9GSVhVUF9BU1VTX0c3M0pXLAorCUFMQzI2OV9GSVhVUF9MRU5PVk9fRUFQRCwKKwlBTEMyNzVfRklYVVBfU09OWV9IV0VRLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgYWxjMjY5X2ZpeHVwc1tdID0gewpAQCAtMTQ4MjQsNiArMTQ4NTIsNyBAQAogCQkJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fTUFTSywgMHgwNH0sCiAJCQl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIDB4MDR9LAogCQkJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgMHgwMH0sCisJCQl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRkdSRH0sCiAJCQl7IH0KIAkJfQogCX0sCkBAIC0xNDg0NCwxNyArMTQ4NzMsMzQgQEAKIAkJCXsgfQogCQl9CiAJfSwKKwlbQUxDMjY5X0ZJWFVQX0xFTk9WT19FQVBEXSA9IHsKKwkJLnZlcmJzID0gKGNvbnN0IHN0cnVjdCBoZGFfdmVyYltdKSB7CisJCQl7MHgxNCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB9LAorCQkJe30KKwkJfQorCX0sCisJW0FMQzI3NV9GSVhVUF9TT05ZX0hXRVFdID0geworCQkuZnVuYyA9IGFsYzI2OV9maXh1cF9od2VxLAorCQkudmVyYnMgPSAoY29uc3Qgc3RydWN0IGhkYV92ZXJiW10pIHsKKwkJCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX01BU0ssIDB4MDR9LAorCQkJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fRElSRUNUSU9OLCAweDA0fSwKKwkJCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDB4MDB9LAorCQkJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUZHUkR9LAorCQkJeyB9CisJCX0KKwl9CiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjY5X2ZpeHVwX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwNzMsICJTb255IFZBSU8iLCBBTEMyNzVfRklYX1NPTllfVkFJT19HUElPMiksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTA3YiwgIlNvbnkgVkFJTyIsIEFMQzI3NV9GSVhfU09OWV9WQUlPX0dQSU8yKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDg0LCAiU29ueSBWQUlPIiwgQUxDMjc1X0ZJWF9TT05ZX1ZBSU9fR1BJTzIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwN2IsICJTb255IFZBSU8iLCBBTEMyNzVfRklYVVBfU09OWV9IV0VRKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDg0LCAiU29ueSBWQUlPIiwgQUxDMjc1X0ZJWFVQX1NPTllfSFdFUSksCiAJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDRkLCAiU29ueSBWQUlPIiwgQUxDMjY5X0ZJWFVQX1NPTllfVkFJTyksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDQ3MCwgIkRlbGwgTTEwMXoiLCBBTEMyNjlfRklYVVBfREVMTF9NMTAxWiksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFiOCwgIlRoaW5rcGFkIEVkZ2UgMTQiLCBBTEMyNjlfRklYVVBfU0tVX0lHTk9SRSksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjBmMiwgIlRoaW5rcGFkIFNMNDEwLzUxMCIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxYTEzLCAiQXN1cyBHNzNKdyIsIEFMQzI2OV9GSVhVUF9BU1VTX0c3M0pXKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHg5ZTU0LCAiTEVOT1ZPIE5CIiwgQUxDMjY5X0ZJWFVQX0xFTk9WT19FQVBEKSwKIAl7fQogfTsKIApAQCAtMTU4ODksMTMgKzE1OTM1LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWxjODYxX2NyZWF0ZV9vdXRfc3coc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBmeCwKLQkJCQloZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2hzKQorc3RhdGljIGludCBfX2FsYzg2MV9jcmVhdGVfb3V0X3N3KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwZngsCisJCQkJICBoZGFfbmlkX3QgbmlkLCBpbnQgaWR4LCB1bnNpZ25lZCBpbnQgY2hzKQogewotCXJldHVybiBhZGRfcGJfc3dfY3RybChjb2RlYy0+c3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwgcGZ4LAorCXJldHVybiBfX2FkZF9wYl9zd19jdHJsKGNvZGVjLT5zcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBwZngsIGlkeCwKIAkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCBjaHMsIDAsIEhEQV9PVVRQVVQpKTsKIH0KIAorI2RlZmluZSBhbGM4NjFfY3JlYXRlX291dF9zdyhjb2RlYywgcGZ4LCBuaWQsIGNocykgXAorCV9fYWxjODYxX2NyZWF0ZV9vdXRfc3coY29kZWMsIHBmeCwgbmlkLCAwLCBjaHMpCisKIC8qIGFkZCBwbGF5YmFjayBjb250cm9scyBmcm9tIHRoZSBwYXJzZWQgREFDIHRhYmxlICovCiBzdGF0aWMgaW50IGFsYzg2MV9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCkBAIC0xNTkwNCwyNiArMTU5NTMsMTUgQEAKIAlzdGF0aWMgY29uc3QgY2hhciAqY2huYW1lWzRdID0gewogCQkiRnJvbnQiLCAiU3Vycm91bmQiLCBOVUxMIC8qQ0xGRSovLCAiU2lkZSIKIAl9OworCWNvbnN0IGNoYXIgKnBmeCA9IGFsY19nZXRfbGluZV9vdXRfcGZ4KGNmZywgdHJ1ZSk7CiAJaGRhX25pZF90IG5pZDsKIAlpbnQgaSwgZXJyOwogCi0JaWYgKGNmZy0+bGluZV9vdXRzID09IDEpIHsKLQkJY29uc3QgY2hhciAqcGZ4ID0gTlVMTDsKLQkJaWYgKCFjZmctPmhwX291dHMpCi0JCQlwZnggPSAiTWFzdGVyIjsKLQkJZWxzZSBpZiAoY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX1NQRUFLRVJfT1VUKQotCQkJcGZ4ID0gIlNwZWFrZXIiOwotCQlpZiAocGZ4KSB7Ci0JCQluaWQgPSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXTsKLQkJCXJldHVybiBhbGM4NjFfY3JlYXRlX291dF9zdyhjb2RlYywgcGZ4LCBuaWQsIDMpOwotCQl9Ci0JfQotCiAJZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspIHsKIAkJbmlkID0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV07CiAJCWlmICghbmlkKQogCQkJY29udGludWU7Ci0JCWlmIChpID09IDIpIHsKKwkJaWYgKCFwZnggJiYgaSA9PSAyKSB7CiAJCQkvKiBDZW50ZXIvTEZFICovCiAJCQllcnIgPSBhbGM4NjFfY3JlYXRlX291dF9zdyhjb2RlYywgIkNlbnRlciIsIG5pZCwgMSk7CiAJCQlpZiAoZXJyIDwgMCkKQEAgLTE1OTMyLDcgKzE1OTcwLDEwIEBACiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9IGVsc2UgewotCQkJZXJyID0gYWxjODYxX2NyZWF0ZV9vdXRfc3coY29kZWMsIGNobmFtZVtpXSwgbmlkLCAzKTsKKwkJCWNvbnN0IGNoYXIgKm5hbWUgPSBwZng7CisJCQlpZiAoIW5hbWUpCisJCQkJbmFtZSA9IGNobmFtZVtpXTsKKwkJCWVyciA9IF9fYWxjODYxX2NyZWF0ZV9vdXRfc3coY29kZWMsIG5hbWUsIG5pZCwgaSwgMyk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0xNjQwNCw4ICsxNjQ0NSw4IEBACiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODYxdmRfZGFsbGFzX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAyLAogCS5pdGVtcyA9IHsKLQkJeyAiRXh0IE1pYyIsIDB4MCB9LAotCQl7ICJJbnQgTWljIiwgMHgxIH0sCisJCXsgIk1pYyIsIDB4MCB9LAorCQl7ICJJbnRlcm5hbCBNaWMiLCAweDEgfSwKIAl9LAogfTsKIApAQCAtMTY0ODQsMTEgKzE2NTI1LDExIEBACiAKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCBWb2x1bWUiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAKQEAgLTE2NTA3LDExICsxNjU0OCwxMSBAQAogCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLAogCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCi0JSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCkBAIC0xNjUzMSwxMSArMTY1NzIsMTEgQEAKIAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIApAQCAtMTY1NDYsMTkgKzE2NTg3LDE5IEBACiB9OwogCiAvKiBQaW4gYXNzaWdubWVudDogU3BlYWtlcj0weDE0LCBIUCA9IDB4MTUsCi0gKiAgICAgICAgICAgICAgICAgRXh0IE1pYz0weDE4LCBJbnQgTWljID0gMHgxOSwgQ0QgPSAweDFjLCBQQyBCZWVwID0gMHgxZAorICogICAgICAgICAgICAgICAgIE1pYz0weDE4LCBJbnRlcm5hbCBNaWMgPSAweDE5LCBDRCA9IDB4MWMsIFBDIEJlZXAgPSAweDFkCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4NjF2ZF9kYWxsYXNfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDAzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDBkLCAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkV4dCBNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkV4dCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJFeHQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiSW50IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE2NzIzLDE4ICsxNjc2NCw2IEBACiAJe30KIH07CiAKLXN0YXRpYyB2b2lkIGFsYzg2MXZkX2xlbm92b19taWNfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JdW5zaWduZWQgaW50IHByZXNlbnQ7Ci0JdW5zaWduZWQgY2hhciBiaXRzOwotCi0JcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MTgpOwotCWJpdHMgPSBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMDsKLQotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgwYiwgSERBX0lOUFVULCAxLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotfQotCiBzdGF0aWMgdm9pZCBhbGM4NjF2ZF9sZW5vdm9fc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC0xNjc0NSw3ICsxNjc3NCw3IEBACiBzdGF0aWMgdm9pZCBhbGM4NjF2ZF9sZW5vdm9faW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCWFsY19hdXRvbXV0ZV9hbXAoY29kZWMpOwotCWFsYzg2MXZkX2xlbm92b19taWNfYXV0b211dGUoY29kZWMpOworCWFsYzg4eF9zaW1wbGVfbWljX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAogc3RhdGljIHZvaWQgYWxjODYxdmRfbGVub3ZvX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLApAQCAtMTY3NTMsNyArMTY3ODIsNyBAQAogewogCXN3aXRjaCAocmVzID4+IDI2KSB7CiAJY2FzZSBBTEM4ODBfTUlDX0VWRU5UOgotCQlhbGM4NjF2ZF9sZW5vdm9fbWljX2F1dG9tdXRlKGNvZGVjKTsKKwkJYWxjODh4X3NpbXBsZV9taWNfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50KGNvZGVjLCByZXMpOwpAQCAtMTcwNDMsMTIgKzE3MDcyLDEzIEBACiAjZGVmaW5lIGFsYzg2MXZkX2lkeF90b19taXhlcl9zd2l0Y2gobmlkKQkoKG5pZCkgKyAweDBjKQogCiAvKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLwotLyogQmFzZWQgb24gQUxDODgwIHZlcnNpb24uIEJ1dCBBTEM4NjFWRCBoYXMgc2VwYXJhdGUsCisvKiBCYXNlZCBvbiBBTEM4ODAgdmVyc2lvbi4gQnV0IEFMQzg2MVZEIGFuZCBBTEM4ODcgaGF2ZSBzZXBhcmF0ZSwKICAqIGRpZmZlcmVudCBOSURzIGZvciBtdXRlL3VubXV0ZSBzd2l0Y2ggYW5kIHZvbHVtZSBjb250cm9sICovCiBzdGF0aWMgaW50IGFsYzg2MXZkX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKIAkJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmNobmFtZVs0XSA9IHsiRnJvbnQiLCAiU3Vycm91bmQiLCAiQ0xGRSIsICJTaWRlIn07CisJY29uc3QgY2hhciAqcGZ4ID0gYWxjX2dldF9saW5lX291dF9wZngoY2ZnLCB0cnVlKTsKIAloZGFfbmlkX3QgbmlkX3YsIG5pZF9zOwogCWludCBpLCBlcnI7CiAKQEAgLTE3MDYyLDcgKzE3MDkyLDcgQEAKIAkJCQlhbGM4ODBfZGFjX3RvX2lkeCgKIAkJCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0pKTsKIAotCQlpZiAoaSA9PSAyKSB7CisJCWlmICghcGZ4ICYmIGkgPT0gMikgewogCQkJLyogQ2VudGVyL0xGRSAqLwogCQkJZXJyID0gYWRkX3BiX3ZvbF9jdHJsKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKIAkJCQkJICAgICAgIkNlbnRlciIsCkBAIC0xNzA4OSwyNCArMTcxMTksMTcgQEAKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCX0gZWxzZSB7Ci0JCQljb25zdCBjaGFyICpwZng7Ci0JCQlpZiAoY2ZnLT5saW5lX291dHMgPT0gMSAmJgotCQkJICAgIGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9TUEVBS0VSX09VVCkgewotCQkJCWlmICghY2ZnLT5ocF9waW5zKQotCQkJCQlwZnggPSAiU3BlYWtlciI7Ci0JCQkJZWxzZQotCQkJCQlwZnggPSAiUENNIjsKLQkJCX0gZWxzZQotCQkJCXBmeCA9IGNobmFtZVtpXTsKLQkJCWVyciA9IGFkZF9wYl92b2xfY3RybChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsIHBmeCwKKwkJCWNvbnN0IGNoYXIgKm5hbWUgPSBwZng7CisJCQlpZiAoIW5hbWUpCisJCQkJbmFtZSA9IGNobmFtZVtpXTsKKwkJCWVyciA9IF9fYWRkX3BiX3ZvbF9jdHJsKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKKwkJCQkJCW5hbWUsIGksCiAJCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWRfdiwgMywgMCwKIAkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJaWYgKGNmZy0+bGluZV9vdXRzID09IDEgJiYKLQkJCSAgICBjZmctPmxpbmVfb3V0X3R5cGUgPT0gQVVUT19QSU5fU1BFQUtFUl9PVVQpCi0JCQkJcGZ4ID0gIlNwZWFrZXIiOwotCQkJZXJyID0gYWRkX3BiX3N3X2N0cmwoc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsIHBmeCwKKwkJCWVyciA9IF9fYWRkX3BiX3N3X2N0cmwoc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsCisJCQkJCSAgICAgICBuYW1lLCBpLAogCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkX3MsIDMsIDIsCiAJCQkJCQkJICAgICAgSERBX0lOUFVUKSk7CiAJCQlpZiAoZXJyIDwgMCkKQEAgLTE3NTcwLDEzICsxNzU5MywxMyBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAogCUFMQzI2Ml9ISVBQT19NQVNURVJfU1dJVENILAogCi0JSERBX0NPREVDX1ZPTFVNRSgiZS1NaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoImUtTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiZS1NaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJpLU1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiaS1NaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJpLU1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNzcyMCw4ICsxNzc0Myw4IEBACiAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoImktTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiaS1NaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTc3MzIsOCArMTc3NTUsOCBAQAogCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJpLU1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoImktTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KQEAgLTE4NTY2LDEzICsxODU4OSwxMyBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAogCUFMQzI2Ml9ISVBQT19NQVNURVJfU1dJVENILAogCi0JSERBX0NPREVDX1ZPTFVNRSgiZS1NaWMvTGluZUluIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJlLU1pYy9MaW5lSW4gUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJlLU1pYy9MaW5lSW4gUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYy9MaW5lSW4gQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMvTGluZUluIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljL0xpbmVJbiBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJpLU1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiaS1NaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJpLU1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xODU4MywxMyArMTg2MDYsMTMgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJFeHQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiRXh0IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRXh0IE1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCBWb2x1bWUiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE5MDk0LDIwICsxOTExNywyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhbGM2NjJfYWRkX3ZvbF9jdGwoc3RydWN0IGFsY19zcGVjICpzcGVjLCBjb25zdCBjaGFyICpwZngsCi0JCQkgICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2hzKQorc3RhdGljIGlubGluZSBpbnQgX19hbGM2NjJfYWRkX3ZvbF9jdGwoc3RydWN0IGFsY19zcGVjICpzcGVjLCBjb25zdCBjaGFyICpwZngsCisJCQkJICAgICAgIGhkYV9uaWRfdCBuaWQsIGludCBpZHgsIHVuc2lnbmVkIGludCBjaHMpCiB7Ci0JcmV0dXJuIGFkZF9wYl92b2xfY3RybChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsIHBmeCwKKwlyZXR1cm4gX19hZGRfcGJfdm9sX2N0cmwoc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBwZngsIGlkeCwKIAkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCBjaHMsIDAsIEhEQV9PVVRQVVQpKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYWxjNjYyX2FkZF9zd19jdGwoc3RydWN0IGFsY19zcGVjICpzcGVjLCBjb25zdCBjaGFyICpwZngsCi0JCQkgICAgIGhkYV9uaWRfdCBuaWQsIHVuc2lnbmVkIGludCBjaHMpCitzdGF0aWMgaW5saW5lIGludCBfX2FsYzY2Ml9hZGRfc3dfY3RsKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgY29uc3QgY2hhciAqcGZ4LAorCQkJCSAgICAgIGhkYV9uaWRfdCBuaWQsIGludCBpZHgsIHVuc2lnbmVkIGludCBjaHMpCiB7Ci0JcmV0dXJuIGFkZF9wYl9zd19jdHJsKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIHBmeCwKKwlyZXR1cm4gX19hZGRfcGJfc3dfY3RybChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBwZngsIGlkeCwKIAkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCBjaHMsIDAsIEhEQV9JTlBVVCkpOwogfQogCisjZGVmaW5lIGFsYzY2Ml9hZGRfdm9sX2N0bChzcGVjLCBwZngsIG5pZCwgY2hzKSBcCisJX19hbGM2NjJfYWRkX3ZvbF9jdGwoc3BlYywgcGZ4LCBuaWQsIDAsIGNocykKKyNkZWZpbmUgYWxjNjYyX2FkZF9zd19jdGwoc3BlYywgcGZ4LCBuaWQsIGNocykgXAorCV9fYWxjNjYyX2FkZF9zd19jdGwoc3BlYywgcGZ4LCBuaWQsIDAsIGNocykKICNkZWZpbmUgYWxjNjYyX2FkZF9zdGVyZW9fdm9sKHNwZWMsIHBmeCwgbmlkKSBcCiAJYWxjNjYyX2FkZF92b2xfY3RsKHNwZWMsIHBmeCwgbmlkLCAzKQogI2RlZmluZSBhbGM2NjJfYWRkX3N0ZXJlb19zdyhzcGVjLCBwZngsIG5pZCkgXApAQCAtMTkxMjEsNiArMTkxNDgsNyBAQAogCXN0YXRpYyBjb25zdCBjaGFyICpjaG5hbWVbNF0gPSB7CiAJCSJGcm9udCIsICJTdXJyb3VuZCIsIE5VTEwgLypDTEZFKi8sICJTaWRlIgogCX07CisJY29uc3QgY2hhciAqcGZ4ID0gYWxjX2dldF9saW5lX291dF9wZngoY2ZnLCB0cnVlKTsKIAloZGFfbmlkX3QgbmlkLCBtaXg7CiAJaW50IGksIGVycjsKIApAQCAtMTkxMzEsNyArMTkxNTksNyBAQAogCQltaXggPSBhbGM2NjJfZGFjX3RvX21peChjb2RlYywgY2ZnLT5saW5lX291dF9waW5zW2ldLCBuaWQpOwogCQlpZiAoIW1peCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoaSA9PSAyKSB7CisJCWlmICghcGZ4ICYmIGkgPT0gMikgewogCQkJLyogQ2VudGVyL0xGRSAqLwogCQkJZXJyID0gYWxjNjYyX2FkZF92b2xfY3RsKHNwZWMsICJDZW50ZXIiLCBuaWQsIDEpOwogCQkJaWYgKGVyciA8IDApCkBAIC0xOTE0NiwyMiArMTkxNzQsMTMgQEAKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCX0gZWxzZSB7Ci0JCQljb25zdCBjaGFyICpwZng7Ci0JCQlpZiAoY2ZnLT5saW5lX291dHMgPT0gMSAmJgotCQkJICAgIGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9TUEVBS0VSX09VVCkgewotCQkJCWlmIChjZmctPmhwX291dHMpCi0JCQkJCXBmeCA9ICJTcGVha2VyIjsKLQkJCQllbHNlCi0JCQkJCXBmeCA9ICJQQ00iOwotCQkJfSBlbHNlCi0JCQkJcGZ4ID0gY2huYW1lW2ldOwotCQkJZXJyID0gYWxjNjYyX2FkZF92b2xfY3RsKHNwZWMsIHBmeCwgbmlkLCAzKTsKKwkJCWNvbnN0IGNoYXIgKm5hbWUgPSBwZng7CisJCQlpZiAoIW5hbWUpCisJCQkJbmFtZSA9IGNobmFtZVtpXTsKKwkJCWVyciA9IF9fYWxjNjYyX2FkZF92b2xfY3RsKHNwZWMsIG5hbWUsIG5pZCwgaSwgMyk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJaWYgKGNmZy0+bGluZV9vdXRzID09IDEgJiYKLQkJCSAgICBjZmctPmxpbmVfb3V0X3R5cGUgPT0gQVVUT19QSU5fU1BFQUtFUl9PVVQpCi0JCQkJcGZ4ID0gIlNwZWFrZXIiOwotCQkJZXJyID0gYWxjNjYyX2FkZF9zd19jdGwoc3BlYywgcGZ4LCBtaXgsIDMpOworCQkJZXJyID0gX19hbGM2NjJfYWRkX3N3X2N0bChzcGVjLCBuYW1lLCBtaXgsIGksIDMpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtMTkzNTgsOSArMTkzNzcsMjEgQEAKIAkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAorc3RhdGljIHZvaWQgYWxjMjcyX2ZpeHVwX21hcmlvKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgKmZpeCwgaW50IHByZV9pbml0KSB7CisJaWYgKHNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoY29kZWMsIDB4MiwgSERBX09VVFBVVCwKKwkJCQkgICAgICAoMHgzYiA8PCBBQ19BTVBDQVBfT0ZGU0VUX1NISUZUKSB8CisJCQkJICAgICAgKDB4M2IgPDwgQUNfQU1QQ0FQX05VTV9TVEVQU19TSElGVCkgfAorCQkJCSAgICAgICgweDAzIDw8IEFDX0FNUENBUF9TVEVQX1NJWkVfU0hJRlQpIHwKKwkJCQkgICAgICAoMCA8PCBBQ19BTVBDQVBfTVVURV9TSElGVCkpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiaGRhX2NvZGVjOiBmYWlsZWQgdG8gb3ZlcnJpZGUgYW1wIGNhcHMgZm9yIE5JRCAweDJcbiIpOworfQorCiBlbnVtIHsKIAlBTEM2NjJfRklYVVBfQVNQSVJFLAogCUFMQzY2Ml9GSVhVUF9JREVBUEFELAorCUFMQzI3Ml9GSVhVUF9NQVJJTywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwIGFsYzY2Ml9maXh1cHNbXSA9IHsKQEAgLTE5Mzc2LDYgKzE5NDA3LDkgQEAKIAkJCXsgfQogCQl9CiAJfSwKKwlbQUxDMjcyX0ZJWFVQX01BUklPXSA9IHsKKwkJLmZ1bmMgPSBhbGMyNzJfZml4dXBfbWFyaW8sCisJfQogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzY2Ml9maXh1cF90YmxbXSA9IHsKQEAgLTE5Mzg2LDYgKzE5NDIwLDEwIEBACiAJe30KIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX21vZGVsX2ZpeHVwIGFsYzY2Ml9maXh1cF9tb2RlbHNbXSA9IHsKKwl7LmlkID0gQUxDMjcyX0ZJWFVQX01BUklPLCAubmFtZSA9ICJtYXJpbyJ9LAorCXt9Cit9OwogCiAKIHN0YXRpYyBpbnQgcGF0Y2hfYWxjNjYyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtMTk0ODUsNyArMTk1MjMsOCBAQAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOwogCWlmIChib2FyZF9jb25maWcgPT0gQUxDNjYyX0FVVE8pIHsKIAkJc3BlYy0+aW5pdF9ob29rID0gYWxjNjYyX2F1dG9faW5pdDsKLQkJYWxjX3BpY2tfZml4dXAoY29kZWMsIGFsYzY2Ml9maXh1cF90YmwsIGFsYzY2Ml9maXh1cHMsIDApOworCQlhbGNfcGlja19maXh1cF9tb2RlbChjb2RlYywgYWxjNjYyX2ZpeHVwX21vZGVscywKKwkJCQkgICAgIGFsYzY2Ml9maXh1cF90YmwsIGFsYzY2Ml9maXh1cHMsIDApOwogCX0KIAogCWFsY19pbml0X2phY2tzKGNvZGVjKTsKQEAgLTE5NjEyLDkgKzE5NjUxLDkgQEAKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHg0LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxNiwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIEJvb3N0IiwgMHgxMiwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgSW4gQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCBWb2x1bWUiLCAweDEyLCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgSW4gQm9vc3QgVm9sdW1lIiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwppbmRleCBmMDNiMmZmLi40YWIwMTlkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCkBAIC0zODksNiArMzg5LDkgQEAKIAkweDExLCAweDIwLCAwCiB9OwogCisjZGVmaW5lIFNUQUM5MkhEODhYWFhfTlVNX0RNSUNTCVNUQUM5MkhEODNYWFhfTlVNX0RNSUNTCisjZGVmaW5lIHN0YWM5MmhkODh4eHhfZG1pY19uaWRzCXN0YWM5MmhkODN4eHhfZG1pY19uaWRzCisKICNkZWZpbmUgU1RBQzkySEQ4N0JfTlVNX0RNSUNTCSAxCiBzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODdiX2RtaWNfbmlkc1tTVEFDOTJIRDg3Ql9OVU1fRE1JQ1MgKyAxXSA9IHsKIAkweDExLCAwCkBAIC0zNTkxLDcgKzM1OTQsNyBAQAogCQlpZiAoY2hlY2tfbWljX3Bpbihjb2RlYywgc3BlYy0+ZG1pY19uaWRzW2ldLAogCQkgICAgJmZpeGVkLCAmZXh0LCAmZG9jaykpCiAJCQlyZXR1cm4gMDsKLQlpZiAoIWZpeGVkICYmICFleHQgJiYgIWRvY2spCisJaWYgKCFmaXhlZCB8fCAoIWV4dCAmJiAhZG9jaykpCiAJCXJldHVybiAwOyAvKiBubyBpbnB1dCB0byBzd2l0Y2ggKi8KIAlpZiAoIShnZXRfd2NhcHMoY29kZWMsIGV4dCkgJiBBQ19XQ0FQX1VOU09MX0NBUCkpCiAJCXJldHVybiAwOyAvKiBubyB1bnNvbCBzdXBwb3J0ICovCkBAIC01NDIyLDcgKzU0MjUsNyBAQAogCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIGNvZGVjLT5hZmcsIDAsIDB4N0VELCAwKTsKIAljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CiAJY29kZWMtPnNwZWMgPSBzcGVjOwotCXNwZWMtPmxpbmVhcl90b25lX2JlZXAgPSAxOworCXNwZWMtPmxpbmVhcl90b25lX2JlZXAgPSAwOwogCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5MmhkODN4eHhfc2xhdmVfZGlnX291dHM7CiAJc3BlYy0+ZGlnYmVlcF9uaWQgPSAweDIxOwogCXNwZWMtPmRtaWNfbmlkcyA9IHN0YWM5MmhkODN4eHhfZG1pY19uaWRzOwpAQCAtNTQ2MiwxNSArNTQ2NSwyMSBAQAogCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJ4eF9jb25uZWN0ZWRfcG9ydHMoY29kZWMsCiAJCQkJc3RhYzkyaGQ4N2JfZG1pY19uaWRzLAogCQkJCVNUQUM5MkhEODdCX05VTV9ETUlDUyk7Ci0JCS8qIEZhbGwgdGhyb3VnaCAqLworCQlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ4OHh4eF9waW5fbmlkcyk7CisJCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ4OHh4eF9waW5fbmlkczsKKwkJc3BlYy0+bW9ub19uaWQgPSAwOworCQlzcGVjLT5udW1fcHdycyA9IDA7CisJCWJyZWFrOwogCWNhc2UgMHgxMTFkNzY2NjoKIAljYXNlIDB4MTExZDc2Njc6CiAJY2FzZSAweDExMWQ3NjY4OgogCWNhc2UgMHgxMTFkNzY2OToKKwkJc3BlYy0+bnVtX2RtaWNzID0gc3RhYzkyeHhfY29ubmVjdGVkX3BvcnRzKGNvZGVjLAorCQkJCXN0YWM5MmhkODh4eHhfZG1pY19uaWRzLAorCQkJCVNUQUM5MkhEODhYWFhfTlVNX0RNSUNTKTsKIAkJc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkODh4eHhfcGluX25pZHMpOwogCQlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MmhkODh4eHhfcGluX25pZHM7CiAJCXNwZWMtPm1vbm9fbmlkID0gMDsKLQkJc3BlYy0+ZGlnYmVlcF9uaWQgPSAwOwogCQlzcGVjLT5udW1fcHdycyA9IDA7CiAJCWJyZWFrOwogCWNhc2UgMHgxMTFkNzYwNDoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCmluZGV4IGQxYzNmOGQuLjdmNDg1MmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYwpAQCAtMjYzLDggKzI2Myw3IEBACiAJCXJldHVybjsKIAlzbmRfaGRhX2NvZGVjX3dyaXRlKHNwZWMtPmNvZGVjLCAweDEsIDAsIDB4ZjgxLAogCQkJICAgICFzcGVjLT52dDE3MDhfamFja19kZXRlY3RlY3QpOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnNwZWMtPnZ0MTcwOF9ocF93b3JrKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc3BlYy0+dnQxNzA4X2hwX3dvcmspOwogfQogCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2RlbHRhLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9kZWx0YS5jCmluZGV4IDcxMmMxNzEuLjdiNjJkZTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2RlbHRhLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvZGVsdGEuYwpAQCAtOTYsNiArOTYsMTEgQEAKIAkJdG1wIHw9IElDRTE3MTJfREVMVEFfQVBfQ0NMSyB8IElDRTE3MTJfREVMVEFfQVBfQ1NfQ09ERUM7CiAJCXRtcCAmPSB+SUNFMTcxMl9ERUxUQV9BUF9DU19ESUdJVEFMOwogCQlicmVhazsKKwljYXNlIElDRTE3MTJfU1VCREVWSUNFX0RFTFRBNjZFOgorCQl0bXAgfD0gSUNFMTcxMl9ERUxUQV82NkVfQ0NMSyB8IElDRTE3MTJfREVMVEFfNjZFX0NTX0NISVBfQSB8CisJCSAgICAgICBJQ0UxNzEyX0RFTFRBXzY2RV9DU19DSElQX0I7CisJCXRtcCAmPSB+SUNFMTcxMl9ERUxUQV82NkVfQ1NfQ1M4NDI3OworCQlicmVhazsKIAljYXNlIElDRTE3MTJfU1VCREVWSUNFX1ZYNDQyOgogCQl0bXAgfD0gSUNFMTcxMl9WWDQ0Ml9DQ0xLIHwgSUNFMTcxMl9WWDQ0Ml9DT0RFQ19DSElQX0EgfCBJQ0UxNzEyX1ZYNDQyX0NPREVDX0NISVBfQjsKIAkJdG1wICY9IH5JQ0UxNzEyX1ZYNDQyX0NTX0RJR0lUQUw7CkBAIC0xMTksNiArMTI0LDkgQEAKIAljYXNlIElDRTE3MTJfU1VCREVWSUNFX0RFTFRBNDEwOgogCQl0bXAgfD0gSUNFMTcxMl9ERUxUQV9BUF9DU19ESUdJVEFMOwogCQlicmVhazsKKwljYXNlIElDRTE3MTJfU1VCREVWSUNFX0RFTFRBNjZFOgorCQl0bXAgfD0gSUNFMTcxMl9ERUxUQV82NkVfQ1NfQ1M4NDI3OworCQlicmVhazsKIAljYXNlIElDRTE3MTJfU1VCREVWSUNFX1ZYNDQyOgogCQl0bXAgfD0gSUNFMTcxMl9WWDQ0Ml9DU19ESUdJVEFMOwogCQlicmVhazsKQEAgLTI3Niw2ICsyODQsMjAgQEAKIH0KIAogLyoKKyAqIEFLNDUyNCBvbiBEZWx0YTY2IHJldiBFIHRvIGNob29zZSB0aGUgY2hpcCBhZGRyZXNzCisgKi8KK3N0YXRpYyB2b2lkIGRlbHRhNjZlX2FrNDUyNF9sb2NrKHN0cnVjdCBzbmRfYWttNHh4eCAqYWssIGludCBjaGlwKQoreworCXN0cnVjdCBzbmRfYWs0eHh4X3ByaXZhdGUgKnByaXYgPSAodm9pZCAqKWFrLT5wcml2YXRlX3ZhbHVlWzBdOworCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gYWstPnByaXZhdGVfZGF0YVswXTsKKworCXNuZF9pY2UxNzEyX3NhdmVfZ3Bpb19zdGF0dXMoaWNlKTsKKwlwcml2LT5jc19tYXNrID0KKwlwcml2LT5jc19hZGRyID0gY2hpcCA9PSAwID8gSUNFMTcxMl9ERUxUQV82NkVfQ1NfQ0hJUF9BIDoKKwkJCQkgICAgSUNFMTcxMl9ERUxUQV82NkVfQ1NfQ0hJUF9COworfQorCisvKgogICogQUs0NTI4IG9uIFZYNDQyIHRvIGNob29zZSB0aGUgY2hpcCBtYXNrCiAgKi8KIHN0YXRpYyB2b2lkIHZ4NDQyX2FrNDUyNF9sb2NrKHN0cnVjdCBzbmRfYWttNHh4eCAqYWssIGludCBjaGlwKQpAQCAtNDg3LDYgKzUwOSwyOSBAQAogCS5tYXNrX2ZsYWdzID0gMCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2FrbTR4eHggYWttX2RlbHRhNjZlIF9fZGV2aW5pdGRhdGEgPSB7CisJLnR5cGUgPSBTTkRfQUs0NTI0LAorCS5udW1fYWRjcyA9IDQsCisJLm51bV9kYWNzID0gNCwKKwkub3BzID0geworCQkubG9jayA9IGRlbHRhNjZlX2FrNDUyNF9sb2NrLAorCQkuc2V0X3JhdGVfdmFsID0gZGVsdGFfYWs0NTI0X3NldF9yYXRlX3ZhbAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2FrNHh4eF9wcml2YXRlIGFrbV9kZWx0YTY2ZV9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CisJLmNhZGRyID0gMiwKKwkuY2lmID0gMCwgLyogdGhlIGRlZmF1bHQgbGV2ZWwgb2YgdGhlIENJRiBwaW4gZnJvbSBBSzQ1MjQgKi8KKwkuZGF0YV9tYXNrID0gSUNFMTcxMl9ERUxUQV82NkVfRE9VVCwKKwkuY2xrX21hc2sgPSBJQ0UxNzEyX0RFTFRBXzY2RV9DQ0xLLAorCS5jc19tYXNrID0gMCwKKwkuY3NfYWRkciA9IDAsIC8qIHNldCBsYXRlciAqLworCS5jc19ub25lID0gMCwKKwkuYWRkX2ZsYWdzID0gMCwKKwkubWFza19mbGFncyA9IDAsCit9OworCisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2FrbTR4eHggYWttX2RlbHRhNDQgX19kZXZpbml0ZGF0YSA9IHsKIAkudHlwZSA9IFNORF9BSzQ1MjQsCiAJLm51bV9hZGNzID0gNCwKQEAgLTY0NCw5ICs2ODksMTEgQEAKIAkJZXJyID0gc25kX2ljZTE3MTJfYWttNHh4eF9pbml0KGFrLCAmYWttX2RlbHRhNDQsICZha21fZGVsdGE0NF9wcml2LCBpY2UpOwogCQlicmVhazsKIAljYXNlIElDRTE3MTJfU1VCREVWSUNFX1ZYNDQyOgotCWNhc2UgSUNFMTcxMl9TVUJERVZJQ0VfREVMVEE2NkU6CiAJCWVyciA9IHNuZF9pY2UxNzEyX2FrbTR4eHhfaW5pdChhaywgJmFrbV92eDQ0MiwgJmFrbV92eDQ0Ml9wcml2LCBpY2UpOwogCQlicmVhazsKKwljYXNlIElDRTE3MTJfU1VCREVWSUNFX0RFTFRBNjZFOgorCQllcnIgPSBzbmRfaWNlMTcxMl9ha200eHh4X2luaXQoYWssICZha21fZGVsdGE2NmUsICZha21fZGVsdGE2NmVfcHJpdiwgaWNlKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc25kX0JVRygpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2RlbHRhLmggYi9zb3VuZC9wY2kvaWNlMTcxMi9kZWx0YS5oCmluZGV4IDFhMGFjNmMuLjExYTljM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2RlbHRhLmgKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvZGVsdGEuaApAQCAtMTQ0LDYgKzE0NCwxNyBAQAogI2RlZmluZSBJQ0UxNzEyX0RFTFRBXzEwMTBMVF9DU19OT05FCTB4NTAJLyogbm90aGluZyAqLwogI2RlZmluZSBJQ0UxNzEyX0RFTFRBXzEwMTBMVF9XT1JEQ0xPQ0sgMHg4MAkvKiBzYW1wbGUgY2xvY2sgc291cmNlOiAwID0gV29yZCBDbG9jayBJbnB1dCwgMSA9IFMvUERJRiBJbnB1dCA/Pz8gKi8KIAorLyogTS1BdWRpbyBEZWx0YSA2NiByZXYuIEUgZGVmaW5pdGlvbnMuCisgKiBOZXdlciByZXZpc2lvbnMgb2YgRGVsdGEgNjYgaGF2ZSBDUzg0Mjcgb3ZlciBTUEkgZm9yCisgKiBTL1BESUYgdHJhbnNjZWl2ZXIgaW5zdGVhZCBvZiBDUzg0MDQvQ1M4NDE0LiAqLworLyogMHgwMSA9IERGUyAqLworI2RlZmluZSBJQ0UxNzEyX0RFTFRBXzY2RV9DQ0xLCQkweDAyCS8qIFNQSSBjbG9jayAqLworI2RlZmluZSBJQ0UxNzEyX0RFTFRBXzY2RV9ESU4JCTB4MDQJLyogZGF0YSBpbnB1dCAqLworI2RlZmluZSBJQ0UxNzEyX0RFTFRBXzY2RV9ET1VUCQkweDA4CS8qIGRhdGEgb3V0cHV0ICovCisjZGVmaW5lIElDRTE3MTJfREVMVEFfNjZFX0NTX0NTODQyNwkweDEwCS8qIGNoaXAgc2VsZWN0LCBsb3cgPSBDUzg0MjcgKi8KKyNkZWZpbmUgSUNFMTcxMl9ERUxUQV82NkVfQ1NfQ0hJUF9BCTB4MjAJLyogQUs0NTI0ICMwICovCisjZGVmaW5lIElDRTE3MTJfREVMVEFfNjZFX0NTX0NISVBfQgkweDQwCS8qIEFLNDUyNCAjMSAqLworCiAvKiBEaWdpZ3JhbSBWWDQ0MiBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBJQ0UxNzEyX1ZYNDQyX0NDTEsJCTB4MDIJLyogU1BJIGNsb2NrICovCiAjZGVmaW5lIElDRTE3MTJfVlg0NDJfRElOCQkweDA0CS8qIGRhdGEgaW5wdXQgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vTWFrZWZpbGUgYi9zb3VuZC9wY2kvb3h5Z2VuL01ha2VmaWxlCmluZGV4IGFjZDhmMTUuLjBmODcyNjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vTWFrZWZpbGUKKysrIGIvc291bmQvcGNpL294eWdlbi9NYWtlZmlsZQpAQCAtMSwxMCArMSw4IEBACiBzbmQtb3h5Z2VuLWxpYi1vYmpzIDo9IG94eWdlbl9pby5vIG94eWdlbl9saWIubyBveHlnZW5fbWl4ZXIubyBveHlnZW5fcGNtLm8KLXNuZC1oaWZpZXItb2JqcyA6PSBoaWZpZXIubwotc25kLW94eWdlbi1vYmpzIDo9IG94eWdlbi5vCitzbmQtb3h5Z2VuLW9ianMgOj0gb3h5Z2VuLm8geG9uYXJfZGcubwogc25kLXZpcnR1b3NvLW9ianMgOj0gdmlydHVvc28ubyB4b25hcl9saWIubyBcCiAJeG9uYXJfcGNtMTc5eC5vIHhvbmFyX2NzNDN4eC5vIHhvbmFyX3dtODd4Ni5vIHhvbmFyX2hkbWkubwogCiBvYmotJChDT05GSUdfU05EX09YWUdFTl9MSUIpICs9IHNuZC1veHlnZW4tbGliLm8KLW9iai0kKENPTkZJR19TTkRfSElGSUVSKSArPSBzbmQtaGlmaWVyLm8KIG9iai0kKENPTkZJR19TTkRfT1hZR0VOKSArPSBzbmQtb3h5Z2VuLm8KIG9iai0kKENPTkZJR19TTkRfVklSVFVPU08pICs9IHNuZC12aXJ0dW9zby5vCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL2NzNDI0NS5oIGIvc291bmQvcGNpL294eWdlbi9jczQyNDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTAxOTdlCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL294eWdlbi9jczQyNDUuaApAQCAtMCwwICsxLDEwNyBAQAorI2RlZmluZSBDUzQyNDVfQ0hJUF9JRAkJMHgwMQorI2RlZmluZSBDUzQyNDVfUE9XRVJfQ1RSTAkweDAyCisjZGVmaW5lIENTNDI0NV9EQUNfQ1RSTF8xCTB4MDMKKyNkZWZpbmUgQ1M0MjQ1X0FEQ19DVFJMCQkweDA0CisjZGVmaW5lIENTNDI0NV9NQ0xLX0ZSRVEJMHgwNQorI2RlZmluZSBDUzQyNDVfU0lHTkFMX1NFTAkweDA2CisjZGVmaW5lIENTNDI0NV9QR0FfQl9DVFJMCTB4MDcKKyNkZWZpbmUgQ1M0MjQ1X1BHQV9BX0NUUkwJMHgwOAorI2RlZmluZSBDUzQyNDVfQU5BTE9HX0lOCTB4MDkKKyNkZWZpbmUgQ1M0MjQ1X0RBQ19BX0NUUkwJMHgwYQorI2RlZmluZSBDUzQyNDVfREFDX0JfQ1RSTAkweDBiCisjZGVmaW5lIENTNDI0NV9EQUNfQ1RSTF8yCTB4MGMKKyNkZWZpbmUgQ1M0MjQ1X0lOVF9TVEFUVVMJMHgwZAorI2RlZmluZSBDUzQyNDVfSU5UX01BU0sJCTB4MGUKKyNkZWZpbmUgQ1M0MjQ1X0lOVF9NT0RFX01TQgkweDBmCisjZGVmaW5lIENTNDI0NV9JTlRfTU9ERV9MU0IJMHgxMAorCisvKiBDaGlwIElEICovCisjZGVmaW5lIENTNDI0NV9DSElQX1BBUlRfTUFTSwkweGYwCisjZGVmaW5lIENTNDI0NV9DSElQX1JFVl9NQVNLCTB4MGYKKworLyogUG93ZXIgQ29udHJvbCAqLworI2RlZmluZSBDUzQyNDVfRlJFRVpFCQkweDgwCisjZGVmaW5lIENTNDI0NV9QRE5fTUlDCQkweDA4CisjZGVmaW5lIENTNDI0NV9QRE5fQURDCQkweDA0CisjZGVmaW5lIENTNDI0NV9QRE5fREFDCQkweDAyCisjZGVmaW5lIENTNDI0NV9QRE4JCTB4MDEKKworLyogREFDIENvbnRyb2wgKi8KKyNkZWZpbmUgQ1M0MjQ1X0RBQ19GTV9NQVNLCTB4YzAKKyNkZWZpbmUgQ1M0MjQ1X0RBQ19GTV9TSU5HTEUJMHgwMAorI2RlZmluZSBDUzQyNDVfREFDX0ZNX0RPVUJMRQkweDQwCisjZGVmaW5lIENTNDI0NV9EQUNfRk1fUVVBRAkweDgwCisjZGVmaW5lIENTNDI0NV9EQUNfRElGX01BU0sJMHgzMAorI2RlZmluZSBDUzQyNDVfREFDX0RJRl9MSlVTVAkweDAwCisjZGVmaW5lIENTNDI0NV9EQUNfRElGX0kyUwkweDEwCisjZGVmaW5lIENTNDI0NV9EQUNfRElGX1JKVVNUXzE2CTB4MjAKKyNkZWZpbmUgQ1M0MjQ1X0RBQ19ESUZfUkpVU1RfMjQJMHgzMAorI2RlZmluZSBDUzQyNDVfUkVTRVJWRURfMQkweDA4CisjZGVmaW5lIENTNDI0NV9NVVRFX0RBQwkJMHgwNAorI2RlZmluZSBDUzQyNDVfREVFTVBICQkweDAyCisjZGVmaW5lIENTNDI0NV9EQUNfTUFTVEVSCTB4MDEKKworLyogQURDIENvbnRyb2wgKi8KKyNkZWZpbmUgQ1M0MjQ1X0FEQ19GTV9NQVNLCTB4YzAKKyNkZWZpbmUgQ1M0MjQ1X0FEQ19GTV9TSU5HTEUJMHgwMAorI2RlZmluZSBDUzQyNDVfQURDX0ZNX0RPVUJMRQkweDQwCisjZGVmaW5lIENTNDI0NV9BRENfRk1fUVVBRAkweDgwCisjZGVmaW5lIENTNDI0NV9BRENfRElGX01BU0sJMHgxMAorI2RlZmluZSBDUzQyNDVfQURDX0RJRl9MSlVTVAkweDAwCisjZGVmaW5lIENTNDI0NV9BRENfRElGX0kyUwkweDEwCisjZGVmaW5lIENTNDI0NV9NVVRFX0FEQwkJMHgwNAorI2RlZmluZSBDUzQyNDVfSFBGX0ZSRUVaRQkweDAyCisjZGVmaW5lIENTNDI0NV9BRENfTUFTVEVSCTB4MDEKKworLyogTUNMSyBGcmVxdWVuY3kgKi8KKyNkZWZpbmUgQ1M0MjQ1X01DTEsxX01BU0sJMHg3MAorI2RlZmluZSBDUzQyNDVfTUNMSzFfU0hJRlQJNAorI2RlZmluZSBDUzQyNDVfTUNMSzJfTUFTSwkweDA3CisjZGVmaW5lIENTNDI0NV9NQ0xLMl9TSElGVAkwCisjZGVmaW5lIENTNDI0NV9NQ0xLXzEJCTAKKyNkZWZpbmUgQ1M0MjQ1X01DTEtfMV81CQkxCisjZGVmaW5lIENTNDI0NV9NQ0xLXzIJCTIKKyNkZWZpbmUgQ1M0MjQ1X01DTEtfMwkJMworI2RlZmluZSBDUzQyNDVfTUNMS180CQk0CisKKy8qIFNpZ25hbCBTZWxlY3Rpb24gKi8KKyNkZWZpbmUgQ1M0MjQ1X0FfT1VUX1NFTF9NQVNLCTB4NjAKKyNkZWZpbmUgQ1M0MjQ1X0FfT1VUX1NFTF9ISVoJMHgwMAorI2RlZmluZSBDUzQyNDVfQV9PVVRfU0VMX0RBQwkweDIwCisjZGVmaW5lIENTNDI0NV9BX09VVF9TRUxfUEdBCTB4NDAKKyNkZWZpbmUgQ1M0MjQ1X0xPT1AJCTB4MDIKKyNkZWZpbmUgQ1M0MjQ1X0FTWU5DSAkJMHgwMQorCisvKiBDaGFubmVsIEIvQSBQR0EgQ29udHJvbCAqLworI2RlZmluZSBDUzQyNDVfUEdBX0dBSU5fTUFTSwkweDNmCisKKy8qIEFEQyBJbnB1dCBDb250cm9sICovCisjZGVmaW5lIENTNDI0NV9QR0FfU09GVAkJMHgxMAorI2RlZmluZSBDUzQyNDVfUEdBX1pFUk8JCTB4MDgKKyNkZWZpbmUgQ1M0MjQ1X1NFTF9NQVNLCQkweDA3CisjZGVmaW5lIENTNDI0NV9TRUxfTUlDCQkweDAwCisjZGVmaW5lIENTNDI0NV9TRUxfSU5QVVRfMQkweDAxCisjZGVmaW5lIENTNDI0NV9TRUxfSU5QVVRfMgkweDAyCisjZGVmaW5lIENTNDI0NV9TRUxfSU5QVVRfMwkweDAzCisjZGVmaW5lIENTNDI0NV9TRUxfSU5QVVRfNAkweDA0CisjZGVmaW5lIENTNDI0NV9TRUxfSU5QVVRfNQkweDA1CisjZGVmaW5lIENTNDI0NV9TRUxfSU5QVVRfNgkweDA2CisKKy8qIERBQyBDaGFubmVsIEEvQiBWb2x1bWUgQ29udHJvbCAqLworI2RlZmluZSBDUzQyNDVfVk9MX01BU0sJCTB4ZmYKKworLyogREFDIENvbnRyb2wgMiAqLworI2RlZmluZSBDUzQyNDVfREFDX1NPRlQJCTB4ODAKKyNkZWZpbmUgQ1M0MjQ1X0RBQ19aRVJPCQkweDQwCisjZGVmaW5lIENTNDI0NV9JTlZFUlRfREFDCTB4MjAKKyNkZWZpbmUgQ1M0MjQ1X0lOVF9BQ1RJVkVfSElHSAkweDAxCisKKy8qIEludGVycnVwdCBTdGF0dXMvTWFzay9Nb2RlICovCisjZGVmaW5lIENTNDI0NV9BRENfQ0xLX0VSUgkweDA4CisjZGVmaW5lIENTNDI0NV9EQUNfQ0xLX0VSUgkweDA0CisjZGVmaW5lIENTNDI0NV9BRENfT1ZGTAkJMHgwMgorI2RlZmluZSBDUzQyNDVfQURDX1VORFJGTAkweDAxCisKKworI2RlZmluZSBDUzQyNDVfU1BJX0FERFJFU1MJKDB4OWUgPDwgMTYpCisjZGVmaW5lIENTNDI0NV9TUElfV1JJVEUJKDAgPDwgMTYpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jIGIvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE4N2Q2OC4uMDAwMDAwMAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jCisrKyAvZGV2L251bGwKQEAgLTEsMjM5ICswLDAgQEAKLS8qCi0gKiBDLU1lZGlhIENNSTg3ODggZHJpdmVyIGZvciB0aGUgTWVkaWFUZWsvVGVtcG9UZWMgSGlGaWVyIEZhbnRhc2lhCi0gKgotICogQ29weXJpZ2h0IChjKSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KLSAqCi0gKgotICogIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCi0gKgotICogIFRoaXMgZHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgZHJpdmVyOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLyoKLSAqIENNSTg3ODg6Ci0gKgotICogU1BJIDAgLT4gQUs0Mzk2Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvdGx2Lmg+Ci0jaW5jbHVkZSAib3h5Z2VuLmgiCi0jaW5jbHVkZSAiYWs0Mzk2LmgiCi0KLU1PRFVMRV9BVVRIT1IoIkNsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJUZW1wb1RlYyBIaUZpZXIgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0KLXN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7Ci1zdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7Ci1zdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7Ci0KLW1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJjYXJkIGluZGV4Iik7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmciKTsKLW1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJlbmFibGUgY2FyZCIpOwotCi1zdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoaGlmaWVyX2lkcykgPSB7Ci0JeyBPWFlHRU5fUENJX1NVQklEKDB4MTRjMywgMHgxNzEwKSB9LAotCXsgT1hZR0VOX1BDSV9TVUJJRCgweDE0YzMsIDB4MTcxMSkgfSwKLQl7IE9YWUdFTl9QQ0lfU1VCSURfQlJPS0VOX0VFUFJPTSB9LAotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBoaWZpZXJfaWRzKTsKLQotc3RydWN0IGhpZmllcl9kYXRhIHsKLQl1OCBhazQzOTZfcmVnc1s1XTsKLX07Ci0KLXN0YXRpYyB2b2lkIGFrNDM5Nl93cml0ZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1OCByZWcsIHU4IHZhbHVlKQotewotCXN0cnVjdCBoaWZpZXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7Ci0KLQlveHlnZW5fd3JpdGVfc3BpKGNoaXAsIE9YWUdFTl9TUElfVFJJR0dFUiAgfAotCQkJIE9YWUdFTl9TUElfREFUQV9MRU5HVEhfMiB8Ci0JCQkgT1hZR0VOX1NQSV9DTE9DS18xNjAgfAotCQkJICgwIDw8IE9YWUdFTl9TUElfQ09ERUNfU0hJRlQpIHwKLQkJCSBPWFlHRU5fU1BJX0NFTl9MQVRDSF9DTE9DS19ISSwKLQkJCSBBSzQzOTZfV1JJVEUgfCAocmVnIDw8IDgpIHwgdmFsdWUpOwotCWRhdGEtPmFrNDM5Nl9yZWdzW3JlZ10gPSB2YWx1ZTsKLX0KLQotc3RhdGljIHZvaWQgYWs0Mzk2X3dyaXRlX2NhY2hlZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1OCByZWcsIHU4IHZhbHVlKQotewotCXN0cnVjdCBoaWZpZXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7Ci0KLQlpZiAodmFsdWUgIT0gZGF0YS0+YWs0Mzk2X3JlZ3NbcmVnXSkKLQkJYWs0Mzk2X3dyaXRlKGNoaXAsIHJlZywgdmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCBoaWZpZXJfcmVnaXN0ZXJzX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKLXsKLQlzdHJ1Y3QgaGlmaWVyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwotCi0JYWs0Mzk2X3dyaXRlKGNoaXAsIEFLNDM5Nl9DT05UUk9MXzEsIEFLNDM5Nl9ESUZfMjRfTVNCIHwgQUs0Mzk2X1JTVE4pOwotCWFrNDM5Nl93cml0ZShjaGlwLCBBSzQzOTZfQ09OVFJPTF8yLAotCQkgICAgIGRhdGEtPmFrNDM5Nl9yZWdzW0FLNDM5Nl9DT05UUk9MXzJdKTsKLQlhazQzOTZfd3JpdGUoY2hpcCwgQUs0Mzk2X0NPTlRST0xfMywgQUs0Mzk2X1BDTSk7Ci0JYWs0Mzk2X3dyaXRlKGNoaXAsIEFLNDM5Nl9MQ0hfQVRULCBjaGlwLT5kYWNfdm9sdW1lWzBdKTsKLQlhazQzOTZfd3JpdGUoY2hpcCwgQUs0Mzk2X1JDSF9BVFQsIGNoaXAtPmRhY192b2x1bWVbMV0pOwotfQotCi1zdGF0aWMgdm9pZCBoaWZpZXJfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQotewotCXN0cnVjdCBoaWZpZXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7Ci0KLQlkYXRhLT5hazQzOTZfcmVnc1tBSzQzOTZfQ09OVFJPTF8yXSA9Ci0JCUFLNDM5Nl9TTVVURSB8IEFLNDM5Nl9ERU1fT0ZGIHwgQUs0Mzk2X0RGU19OT1JNQUw7Ci0JaGlmaWVyX3JlZ2lzdGVyc19pbml0KGNoaXApOwotCi0Jc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIkFLNDM5NiIpOwotCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJDUzUzNDAiKTsKLX0KLQotc3RhdGljIHZvaWQgaGlmaWVyX2NsZWFudXAoc3RydWN0IG94eWdlbiAqY2hpcCkKLXsKLX0KLQotc3RhdGljIHZvaWQgaGlmaWVyX3Jlc3VtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQotewotCWhpZmllcl9yZWdpc3RlcnNfaW5pdChjaGlwKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X2FrNDM5Nl9wYXJhbXMoc3RydWN0IG94eWdlbiAqY2hpcCwKLQkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3QgaGlmaWVyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwotCXU4IHZhbHVlOwotCi0JdmFsdWUgPSBkYXRhLT5hazQzOTZfcmVnc1tBSzQzOTZfQ09OVFJPTF8yXSAmIH5BSzQzOTZfREZTX01BU0s7Ci0JaWYgKHBhcmFtc19yYXRlKHBhcmFtcykgPD0gNTQwMDApCi0JCXZhbHVlIHw9IEFLNDM5Nl9ERlNfTk9STUFMOwotCWVsc2UgaWYgKHBhcmFtc19yYXRlKHBhcmFtcykgPD0gMTA4MDAwKQotCQl2YWx1ZSB8PSBBSzQzOTZfREZTX0RPVUJMRTsKLQllbHNlCi0JCXZhbHVlIHw9IEFLNDM5Nl9ERlNfUVVBRDsKLQotCW1zbGVlcCgxKTsgLyogd2FpdCBmb3IgdGhlIG5ldyBNQ0xLIHRvIGJlY29tZSBzdGFibGUgKi8KLQotCWlmICh2YWx1ZSAhPSBkYXRhLT5hazQzOTZfcmVnc1tBSzQzOTZfQ09OVFJPTF8yXSkgewotCQlhazQzOTZfd3JpdGUoY2hpcCwgQUs0Mzk2X0NPTlRST0xfMSwKLQkJCSAgICAgQUs0Mzk2X0RJRl8yNF9NU0IpOwotCQlhazQzOTZfd3JpdGUoY2hpcCwgQUs0Mzk2X0NPTlRST0xfMiwgdmFsdWUpOwotCQlhazQzOTZfd3JpdGUoY2hpcCwgQUs0Mzk2X0NPTlRST0xfMSwKLQkJCSAgICAgQUs0Mzk2X0RJRl8yNF9NU0IgfCBBSzQzOTZfUlNUTik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVfYWs0Mzk2X3ZvbHVtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQotewotCWFrNDM5Nl93cml0ZV9jYWNoZWQoY2hpcCwgQUs0Mzk2X0xDSF9BVFQsIGNoaXAtPmRhY192b2x1bWVbMF0pOwotCWFrNDM5Nl93cml0ZV9jYWNoZWQoY2hpcCwgQUs0Mzk2X1JDSF9BVFQsIGNoaXAtPmRhY192b2x1bWVbMV0pOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVfYWs0Mzk2X211dGUoc3RydWN0IG94eWdlbiAqY2hpcCkKLXsKLQlzdHJ1Y3QgaGlmaWVyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwotCXU4IHZhbHVlOwotCi0JdmFsdWUgPSBkYXRhLT5hazQzOTZfcmVnc1tBSzQzOTZfQ09OVFJPTF8yXSAmIH5BSzQzOTZfU01VVEU7Ci0JaWYgKGNoaXAtPmRhY19tdXRlKQotCQl2YWx1ZSB8PSBBSzQzOTZfU01VVEU7Ci0JYWs0Mzk2X3dyaXRlX2NhY2hlZChjaGlwLCBBSzQzOTZfQ09OVFJPTF8yLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9jczUzNDBfcGFyYW1zKHN0cnVjdCBveHlnZW4gKmNoaXAsCi0JCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKLXsKLX0KLQotc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihhazQzOTZfZGJfc2NhbGUsIFRMVl9EQl9HQUlOX01VVEUsIDApOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF9oaWZpZXIgPSB7Ci0JLnNob3J0bmFtZSA9ICJDLU1lZGlhIENNSTg3ODciLAotCS5sb25nbmFtZSA9ICJDLU1lZGlhIE94eWdlbiBIRCBBdWRpbyIsCi0JLmNoaXAgPSAiQ01JODc4OCIsCi0JLmluaXQgPSBoaWZpZXJfaW5pdCwKLQkuY2xlYW51cCA9IGhpZmllcl9jbGVhbnVwLAotCS5yZXN1bWUgPSBoaWZpZXJfcmVzdW1lLAotCS5nZXRfaTJzX21jbGsgPSBveHlnZW5fZGVmYXVsdF9pMnNfbWNsaywKLQkuc2V0X2RhY19wYXJhbXMgPSBzZXRfYWs0Mzk2X3BhcmFtcywKLQkuc2V0X2FkY19wYXJhbXMgPSBzZXRfY3M1MzQwX3BhcmFtcywKLQkudXBkYXRlX2RhY192b2x1bWUgPSB1cGRhdGVfYWs0Mzk2X3ZvbHVtZSwKLQkudXBkYXRlX2RhY19tdXRlID0gdXBkYXRlX2FrNDM5Nl9tdXRlLAotCS5kYWNfdGx2ID0gYWs0Mzk2X2RiX3NjYWxlLAotCS5tb2RlbF9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGhpZmllcl9kYXRhKSwKLQkuZGV2aWNlX2NvbmZpZyA9IFBMQVlCQUNLXzBfVE9fSTJTIHwKLQkJCSBQTEFZQkFDS18xX1RPX1NQRElGIHwKLQkJCSBDQVBUVVJFXzBfRlJPTV9JMlNfMSwKLQkuZGFjX2NoYW5uZWxzID0gMiwKLQkuZGFjX3ZvbHVtZV9taW4gPSAwLAotCS5kYWNfdm9sdW1lX21heCA9IDI1NSwKLQkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fU1BJLAotCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAotCS5hZGNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAotfTsKLQotc3RhdGljIGludCBfX2RldmluaXQgZ2V0X2hpZmllcl9tb2RlbChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQljaGlwLT5tb2RlbCA9IG1vZGVsX2hpZmllcjsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgaGlmaWVyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCi0JCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQotewotCXN0YXRpYyBpbnQgZGV2OwotCWludCBlcnI7Ci0KLQlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoIWVuYWJsZVtkZXZdKSB7Ci0JCSsrZGV2OwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0JZXJyID0gb3h5Z2VuX3BjaV9wcm9iZShwY2ksIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgICAgIGhpZmllcl9pZHMsIGdldF9oaWZpZXJfbW9kZWwpOwotCWlmIChlcnIgPj0gMCkKLQkJKytkZXY7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGhpZmllcl9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiQ01JODc4N0hpRmllciIsCi0JLmlkX3RhYmxlID0gaGlmaWVyX2lkcywKLQkucHJvYmUgPSBoaWZpZXJfcHJvYmUsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG94eWdlbl9wY2lfcmVtb3ZlKSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZCA9IG94eWdlbl9wY2lfc3VzcGVuZCwKLQkucmVzdW1lID0gb3h5Z2VuX3BjaV9yZXN1bWUsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9oaWZpZXJfaW5pdCh2b2lkKQotewotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZoaWZpZXJfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9oaWZpZXJfZXhpdCh2b2lkKQotewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaGlmaWVyX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGFsc2FfY2FyZF9oaWZpZXJfaW5pdCkKLW1vZHVsZV9leGl0KGFsc2FfY2FyZF9oaWZpZXJfZXhpdCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jCmluZGV4IDk4YThlYjMuLmQ3ZThkZGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uYwpAQCAtMjAsMTkgKzIwLDMyIEBACiAvKgogICogQ01JODc4ODoKICAqCi0gKiBTUEkgMCAtPiAxc3QgQUs0Mzk2IChmcm9udCkKLSAqIFNQSSAxIC0+IDJuZCBBSzQzOTYgKHN1cnJvdW5kKQotICogU1BJIDIgLT4gM3JkIEFLNDM5NiAoY2VudGVyL0xGRSkKLSAqIFNQSSAzIC0+IFdNODc4NQotICogU1BJIDQgLT4gNHRoIEFLNDM5NiAoYmFjaykKKyAqICAgU1BJIDAgLT4gMXN0IEFLNDM5NiAoZnJvbnQpCisgKiAgIFNQSSAxIC0+IDJuZCBBSzQzOTYgKHN1cnJvdW5kKQorICogICBTUEkgMiAtPiAzcmQgQUs0Mzk2IChjZW50ZXIvTEZFKQorICogICBTUEkgMyAtPiBXTTg3ODUKKyAqICAgU1BJIDQgLT4gNHRoIEFLNDM5NiAoYmFjaykKICAqCi0gKiBHUElPIDAgLT4gREZTMCBvZiBBSzUzODUKLSAqIEdQSU8gMSAtPiBERlMxIG9mIEFLNTM4NQotICogR1BJTyA4IC0+IGVuYWJsZSBoZWFkcGhvbmUgYW1wbGlmaWVyIG9uIEhULU9tZWdhIG1vZGVscworICogICBHUElPIDAgLT4gREZTMCBvZiBBSzUzODUKKyAqICAgR1BJTyAxIC0+IERGUzEgb2YgQUs1Mzg1CisgKgorICogWC1NZXJpZGlhbiBtb2RlbHM6CisgKiAgIEdQSU8gNCAtPiBlbmFibGUgZXh0ZW5zaW9uIFMvUERJRiBpbnB1dAorICogICBHUElPIDYgLT4gZW5hYmxlIG9uLWJvYXJkIFMvUERJRiBpbnB1dAorICoKKyAqIENsYXJvIG1vZGVsczoKKyAqICAgR1BJTyA2IC0+IFMvUERJRiBmcm9tIG9wdGljYWwgKDApIG9yIGNvYXhpYWwgKDEpIGlucHV0CisgKiAgIEdQSU8gOCAtPiBlbmFibGUgaGVhZHBob25lIGFtcGxpZmllcgogICoKICAqIENNOTc4MDoKICAqCi0gKiBHUE8gMCAtPiByb3V0ZSBsaW5lLWluICgwKSBvciBBQzk3IG91dHB1dCAoMSkgdG8gQURDIGlucHV0CisgKiAgIExJTkVfT1VUIC0+IGlucHV0IG9mIEFEQworICoKKyAqICAgQVVYX0lOIDwtIGF1eAorICogICBDRF9JTiAgPC0gQ0QKKyAqICAgTUlDX0lOIDwtIG1pYworICoKKyAqICAgR1BPIDAgLT4gcm91dGUgbGluZS1pbiAoMCkgb3IgQUM5NyBvdXRwdXQgKDEpIHRvIEFEQyBpbnB1dAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNDEsMTggKzU0LDIyIEBACiAjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAjaW5jbHVkZSAib3h5Z2VuLmgiCisjaW5jbHVkZSAieG9uYXJfZGcuaCIKICNpbmNsdWRlICJhazQzOTYuaCIKICNpbmNsdWRlICJ3bTg3ODUuaCIKIAogTU9EVUxFX0FVVEhPUigiQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkMtTWVkaWEgQ01JODc4OCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0MtTWVkaWEsQ01JODc4OH19Iik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tDLU1lZGlhLENNSTg3ODZ9IgorCQkJIix7Qy1NZWRpYSxDTUk4Nzg3fSIKKwkJCSIse0MtTWVkaWEsQ01JODc4OH19Iik7CiAKIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CkBAIC02NiwyNCArODMsNDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiZW5hYmxlIGNhcmQiKTsKIAogZW51bSB7Ci0JTU9ERUxfQ01FRElBX1JFRiwJLyogQy1NZWRpYSdzIHJlZmVyZW5jZSBkZXNpZ24gKi8KLQlNT0RFTF9NRVJJRElBTiwJCS8qIEF1emVuVGVjaCBYLU1lcmlkaWFuICovCi0JTU9ERUxfQ0xBUk8sCQkvKiBIVC1PbWVnYSBDbGFybyAqLwotCU1PREVMX0NMQVJPX0hBTE8sCS8qIEhULU9tZWdhIENsYXJvIGhhbG8gKi8KKwlNT0RFTF9DTUVESUFfUkVGLAorCU1PREVMX01FUklESUFOLAorCU1PREVMX01FUklESUFOXzJHLAorCU1PREVMX0NMQVJPLAorCU1PREVMX0NMQVJPX0hBTE8sCisJTU9ERUxfRkFOVEFTSUEsCisJTU9ERUxfU0VSRU5BREUsCisJTU9ERUxfMkNIX09VVFBVVCwKKwlNT0RFTF9IRzJQQ0ksCisJTU9ERUxfWE9OQVJfREcsCiB9OwogCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUob3h5Z2VuX2lkcykgPSB7CisJLyogQy1NZWRpYSdzIHJlZmVyZW5jZSBkZXNpZ24gKi8KIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMGIwLCAweDAyMTYpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTUVESUFfUkVGIH0sCisJeyBPWFlHRU5fUENJX1NVQklEKDB4MTBiMCwgMHgwMjE3KSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ01FRElBX1JFRiB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwYjAsIDB4MDIxOCksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMGIwLCAweDAyMTkpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTUVESUFfUkVGIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTNmNiwgMHgwMDAxKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ01FRElBX1JFRiB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEzZjYsIDB4MDAxMCksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxM2Y2LCAweDg3ODgpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTUVESUFfUkVGIH0sCi0JeyBPWFlHRU5fUENJX1NVQklEKDB4MTNmNiwgMHhmZmZmKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ01FRElBX1JFRiB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDE0N2EsIDB4YTAxNyksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxYTU4LCAweDA5MTApLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTUVESUFfUkVGIH0sCisJLyogQXN1cyBYb25hciBERyAqLworCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODQ2NyksIC5kcml2ZXJfZGF0YSA9IE1PREVMX1hPTkFSX0RHIH0sCisJLyogUENJIDIuMCBIRCBBdWRpbyAqLworCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEzZjYsIDB4ODc4MiksIC5kcml2ZXJfZGF0YSA9IE1PREVMXzJDSF9PVVRQVVQgfSwKKwkvKiBLdXJvdXRvc2hpa291IENNSTg3ODctSEcyUENJICovCisJeyBPWFlHRU5fUENJX1NVQklEKDB4MTNmNiwgMHhmZmZmKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfSEcyUENJIH0sCisJLyogVGVtcG9UZWMgSGlGaWVyIEZhbnRhc2lhICovCisJeyBPWFlHRU5fUENJX1NVQklEKDB4MTRjMywgMHgxNzEwKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfRkFOVEFTSUEgfSwKKwkvKiBUZW1wb1RlYyBIaUZpZXIgU2VyZW5hZGUgKi8KKwl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxNGMzLCAweDE3MTEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9TRVJFTkFERSB9LAorCS8qIEF1emVuVGVjaCBYLU1lcmlkaWFuICovCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4NDE1YSwgMHg1NDMxKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfTUVSSURJQU4gfSwKKwkvKiBBdXplblRlY2ggWC1NZXJpZGlhbiAyRyAqLworCXsgT1hZR0VOX1BDSV9TVUJJRCgweDU0MzEsIDB4MDE3YSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX01FUklESUFOXzJHIH0sCisJLyogSFQtT21lZ2EgQ2xhcm8gKi8KIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg3Mjg0LCAweDk3NjEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTEFSTyB9LAorCS8qIEhULU9tZWdhIENsYXJvIGhhbG8gKi8KIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg3Mjg0LCAweDk3ODEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTEFST19IQUxPIH0sCiAJeyB9CiB9OwpAQCAtOTUsOSArMTM0LDE1IEBACiAjZGVmaW5lIEdQSU9fQUs1Mzg1X0RGU19ET1VCTEUJMHgwMDAxCiAjZGVmaW5lIEdQSU9fQUs1Mzg1X0RGU19RVUFECTB4MDAwMgogCisjZGVmaW5lIEdQSU9fTUVSSURJQU5fRElHX01BU0sJMHgwMDUwCisjZGVmaW5lIEdQSU9fTUVSSURJQU5fRElHX0VYVAkweDAwMTAKKyNkZWZpbmUgR1BJT19NRVJJRElBTl9ESUdfQk9BUkQJMHgwMDQwCisKKyNkZWZpbmUgR1BJT19DTEFST19ESUdfQ09BWAkweDAwNDAKICNkZWZpbmUgR1BJT19DTEFST19IUAkJMHgwMTAwCiAKIHN0cnVjdCBnZW5lcmljX2RhdGEgeworCXVuc2lnbmVkIGludCBkYWNzOwogCXU4IGFrNDM5Nl9yZWdzWzRdWzVdOwogCXUxNiB3bTg3ODVfcmVnc1szXTsKIH07CkBAIC0xNDgsNyArMTkzLDcgQEAKIAlzdHJ1Y3QgZ2VuZXJpY19kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+ZGFjczsgKytpKSB7CiAJCWFrNDM5Nl93cml0ZShjaGlwLCBpLCBBSzQzOTZfQ09OVFJPTF8xLAogCQkJICAgICBBSzQzOTZfRElGXzI0X01TQiB8IEFLNDM5Nl9SU1ROKTsKIAkJYWs0Mzk2X3dyaXRlKGNoaXAsIGksIEFLNDM5Nl9DT05UUk9MXzIsCkBAIC0xNjYsNiArMjExLDcgQEAKIHsKIAlzdHJ1Y3QgZ2VuZXJpY19kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKIAorCWRhdGEtPmRhY3MgPSBjaGlwLT5tb2RlbC5kYWNfY2hhbm5lbHNfcGNtIC8gMjsKIAlkYXRhLT5hazQzOTZfcmVnc1swXVtBSzQzOTZfQ09OVFJPTF8yXSA9CiAJCUFLNDM5Nl9TTVVURSB8IEFLNDM5Nl9ERU1fT0ZGIHwgQUs0Mzk2X0RGU19OT1JNQUw7CiAJYWs0Mzk2X3JlZ2lzdGVyc19pbml0KGNoaXApOwpAQCAtMjA3LDYgKzI1MywxMCBAQAogCiBzdGF0aWMgdm9pZCBtZXJpZGlhbl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKKwkJCSAgR1BJT19NRVJJRElBTl9ESUdfTUFTSyk7CisJb3h5Z2VuX3dyaXRlMTZfbWFza2VkKGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsCisJCQkgICAgICBHUElPX01FUklESUFOX0RJR19CT0FSRCwgR1BJT19NRVJJRElBTl9ESUdfTUFTSyk7CiAJYWs0Mzk2X2luaXQoY2hpcCk7CiAJYWs1Mzg1X2luaXQoY2hpcCk7CiB9CkBAIC0yMjAsNiArMjcwLDggQEAKIAogc3RhdGljIHZvaWQgY2xhcm9faW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogeworCW94eWdlbl9zZXRfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0NPTlRST0wsIEdQSU9fQ0xBUk9fRElHX0NPQVgpOworCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgR1BJT19DTEFST19ESUdfQ09BWCk7CiAJYWs0Mzk2X2luaXQoY2hpcCk7CiAJd204Nzg1X2luaXQoY2hpcCk7CiAJY2xhcm9fZW5hYmxlX2hwKGNoaXApOwpAQCAtMjI3LDExICsyNzksMjQgQEAKIAogc3RhdGljIHZvaWQgY2xhcm9faGFsb19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwgR1BJT19DTEFST19ESUdfQ09BWCk7CisJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBLCBHUElPX0NMQVJPX0RJR19DT0FYKTsKIAlhazQzOTZfaW5pdChjaGlwKTsKIAlhazUzODVfaW5pdChjaGlwKTsKIAljbGFyb19lbmFibGVfaHAoY2hpcCk7CiB9CiAKK3N0YXRpYyB2b2lkIGZhbnRhc2lhX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlhazQzOTZfaW5pdChjaGlwKTsKKwlzbmRfY29tcG9uZW50X2FkZChjaGlwLT5jYXJkLCAiQ1M1MzQwIik7Cit9CisKK3N0YXRpYyB2b2lkIHN0ZXJlb19vdXRwdXRfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWFrNDM5Nl9pbml0KGNoaXApOworfQorCiBzdGF0aWMgdm9pZCBnZW5lcmljX2NsZWFudXAoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIH0KQEAgLTI2OCw2ICszMzMsMTEgQEAKIAljbGFyb19lbmFibGVfaHAoY2hpcCk7CiB9CiAKK3N0YXRpYyB2b2lkIHN0ZXJlb19yZXN1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlhazQzOTZfcmVnaXN0ZXJzX2luaXQoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIHNldF9hazQzOTZfcGFyYW1zKHN0cnVjdCBveHlnZW4gKmNoaXAsCiAJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKQEAgLTI4Niw3ICszNTYsNyBAQAogCW1zbGVlcCgxKTsgLyogd2FpdCBmb3IgdGhlIG5ldyBNQ0xLIHRvIGJlY29tZSBzdGFibGUgKi8KIAogCWlmICh2YWx1ZSAhPSBkYXRhLT5hazQzOTZfcmVnc1swXVtBSzQzOTZfQ09OVFJPTF8yXSkgewotCQlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5kYWNzOyArK2kpIHsKIAkJCWFrNDM5Nl93cml0ZShjaGlwLCBpLCBBSzQzOTZfQ09OVFJPTF8xLAogCQkJCSAgICAgQUs0Mzk2X0RJRl8yNF9NU0IpOwogCQkJYWs0Mzk2X3dyaXRlKGNoaXAsIGksIEFLNDM5Nl9DT05UUk9MXzIsIHZhbHVlKTsKQEAgLTI5OCw5ICszNjgsMTAgQEAKIAogc3RhdGljIHZvaWQgdXBkYXRlX2FrNDM5Nl92b2x1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKKwlzdHJ1Y3QgZ2VuZXJpY19kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+ZGFjczsgKytpKSB7CiAJCWFrNDM5Nl93cml0ZV9jYWNoZWQoY2hpcCwgaSwgQUs0Mzk2X0xDSF9BVFQsCiAJCQkJICAgIGNoaXAtPmRhY192b2x1bWVbaSAqIDJdKTsKIAkJYWs0Mzk2X3dyaXRlX2NhY2hlZChjaGlwLCBpLCBBSzQzOTZfUkNIX0FUVCwKQEAgLTMxNyw3ICszODgsNyBAQAogCXZhbHVlID0gZGF0YS0+YWs0Mzk2X3JlZ3NbMF1bQUs0Mzk2X0NPTlRST0xfMl0gJiB+QUs0Mzk2X1NNVVRFOwogCWlmIChjaGlwLT5kYWNfbXV0ZSkKIAkJdmFsdWUgfD0gQUs0Mzk2X1NNVVRFOwotCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPmRhY3M7ICsraSkKIAkJYWs0Mzk2X3dyaXRlX2NhY2hlZChjaGlwLCBpLCBBSzQzOTZfQ09OVFJPTF8yLCB2YWx1ZSk7CiB9CiAKQEAgLTM1Niw2ICs0MjcsMTAgQEAKIAkJCSAgICAgIHZhbHVlLCBHUElPX0FLNTM4NV9ERlNfTUFTSyk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldF9ub19wYXJhbXMoc3RydWN0IG94eWdlbiAqY2hpcCwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7Cit9CisKIHN0YXRpYyBpbnQgcm9sbG9mZl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKIAkJCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKIHsKQEAgLTM2MywxMyArNDM4LDcgQEAKIAkJIlNoYXJwIFJvbGwtb2ZmIiwgIlNsb3cgUm9sbC1vZmYiCiAJfTsKIAotCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7Ci0JaW5mby0+Y291bnQgPSAxOwotCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAyOwotCWlmIChpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gMikKLQkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMTsKLQlzdHJjcHkoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCBuYW1lc1tpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc25kX2N0bF9lbnVtX2luZm8oaW5mbywgMSwgMiwgbmFtZXMpOwogfQogCiBzdGF0aWMgaW50IHJvbGxvZmZfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKQEAgLTQwMCw3ICs0NjksNyBAQAogCQlyZWcgJj0gfkFLNDM5Nl9TTE9XOwogCWNoYW5nZWQgPSByZWcgIT0gZGF0YS0+YWs0Mzk2X3JlZ3NbMF1bQUs0Mzk2X0NPTlRST0xfMl07CiAJaWYgKGNoYW5nZWQpIHsKLQkJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkJZm9yIChpID0gMDsgaSA8IGRhdGEtPmRhY3M7ICsraSkKIAkJCWFrNDM5Nl93cml0ZShjaGlwLCBpLCBBSzQzOTZfQ09OVFJPTF8yLCByZWcpOwogCX0KIAltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKQEAgLTQyMSwxMyArNDkwLDcgQEAKIAkJIk5vbmUiLCAiSGlnaC1wYXNzIEZpbHRlciIKIAl9OwogCi0JaW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKLQlpbmZvLT5jb3VudCA9IDE7Ci0JaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDI7Ci0JaWYgKGluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSAyKQotCQlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSAxOwotCXN0cmNweShpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIG5hbWVzW2luZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwotCXJldHVybiAwOworCXJldHVybiBzbmRfY3RsX2VudW1faW5mbyhpbmZvLCAxLCAyLCBuYW1lcyk7CiB9CiAKIHN0YXRpYyBpbnQgaHBmX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQpAQCAtNDY2LDYgKzUyOSwxMDAgQEAKIAkucHV0ID0gaHBmX3B1dCwKIH07CiAKK3N0YXRpYyBpbnQgbWVyaWRpYW5fZGlnX3NvdXJjZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1syXSA9IHsgIk9uLWJvYXJkIiwgIkV4dGVuc2lvbiIgfTsKKworCXJldHVybiBzbmRfY3RsX2VudW1faW5mbyhpbmZvLCAxLCAyLCBuYW1lcyk7Cit9CisKK3N0YXRpYyBpbnQgY2xhcm9fZGlnX3NvdXJjZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1syXSA9IHsgIk9wdGljYWwiLCAiQ29heGlhbCIgfTsKKworCXJldHVybiBzbmRfY3RsX2VudW1faW5mbyhpbmZvLCAxLCAyLCBuYW1lcyk7Cit9CisKK3N0YXRpYyBpbnQgbWVyaWRpYW5fZGlnX3NvdXJjZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKworCXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPQorCQkhIShveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEpICYKKwkJICAgR1BJT19NRVJJRElBTl9ESUdfRVhUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbGFyb19kaWdfc291cmNlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCisJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9CisJCSEhKG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSkgJgorCQkgICBHUElPX0NMQVJPX0RJR19DT0FYKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZXJpZGlhbl9kaWdfc291cmNlX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXUxNiBvbGRfcmVnLCBuZXdfcmVnOworCWludCBjaGFuZ2VkOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCW9sZF9yZWcgPSBveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEpOworCW5ld19yZWcgPSBvbGRfcmVnICYgfkdQSU9fTUVSSURJQU5fRElHX01BU0s7CisJaWYgKHZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPT0gMCkKKwkJbmV3X3JlZyB8PSBHUElPX01FUklESUFOX0RJR19CT0FSRDsKKwllbHNlCisJCW5ld19yZWcgfD0gR1BJT19NRVJJRElBTl9ESUdfRVhUOworCWNoYW5nZWQgPSBuZXdfcmVnICE9IG9sZF9yZWc7CisJaWYgKGNoYW5nZWQpCisJCW94eWdlbl93cml0ZTE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsIG5ld19yZWcpOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgaW50IGNsYXJvX2RpZ19zb3VyY2VfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJdTE2IG9sZF9yZWcsIG5ld19yZWc7CisJaW50IGNoYW5nZWQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJb2xkX3JlZyA9IG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSk7CisJbmV3X3JlZyA9IG9sZF9yZWcgJiB+R1BJT19DTEFST19ESUdfQ09BWDsKKwlpZiAodmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSkKKwkJbmV3X3JlZyB8PSBHUElPX0NMQVJPX0RJR19DT0FYOworCWNoYW5nZWQgPSBuZXdfcmVnICE9IG9sZF9yZWc7CisJaWYgKGNoYW5nZWQpCisJCW94eWdlbl93cml0ZTE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsIG5ld19yZWcpOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbWVyaWRpYW5fZGlnX3NvdXJjZV9jb250cm9sID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIklFQzk1OCBTb3VyY2UgQ2FwdHVyZSBFbnVtIiwKKwkuaW5mbyA9IG1lcmlkaWFuX2RpZ19zb3VyY2VfaW5mbywKKwkuZ2V0ID0gbWVyaWRpYW5fZGlnX3NvdXJjZV9nZXQsCisJLnB1dCA9IG1lcmlkaWFuX2RpZ19zb3VyY2VfcHV0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNsYXJvX2RpZ19zb3VyY2VfY29udHJvbCA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJJRUM5NTggU291cmNlIENhcHR1cmUgRW51bSIsCisJLmluZm8gPSBjbGFyb19kaWdfc291cmNlX2luZm8sCisJLmdldCA9IGNsYXJvX2RpZ19zb3VyY2VfZ2V0LAorCS5wdXQgPSBjbGFyb19kaWdfc291cmNlX3B1dCwKK307CisKIHN0YXRpYyBpbnQgZ2VuZXJpY19taXhlcl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJcmV0dXJuIHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmcm9sbG9mZl9jb250cm9sLCBjaGlwKSk7CkBAIC00ODQsNiArNjQxLDgxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbWVyaWRpYW5fbWl4ZXJfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWludCBlcnI7CisKKwllcnIgPSBnZW5lcmljX21peGVyX2luaXQoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwKKwkJCSAgc25kX2N0bF9uZXcxKCZtZXJpZGlhbl9kaWdfc291cmNlX2NvbnRyb2wsIGNoaXApKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbGFyb19taXhlcl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJaW50IGVycjsKKworCWVyciA9IGdlbmVyaWNfd204Nzg1X21peGVyX2luaXQoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwKKwkJCSAgc25kX2N0bF9uZXcxKCZjbGFyb19kaWdfc291cmNlX2NvbnRyb2wsIGNoaXApKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbGFyb19oYWxvX21peGVyX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZ2VuZXJpY19taXhlcl9pbml0KGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsCisJCQkgIHNuZF9jdGxfbmV3MSgmY2xhcm9fZGlnX3NvdXJjZV9jb250cm9sLCBjaGlwKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfYWs0Mzk2X3JlZ2lzdGVycyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQoreworCXN0cnVjdCBnZW5lcmljX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBkYWMsIGk7CisKKwlmb3IgKGRhYyA9IDA7IGRhYyA8IGRhdGEtPmRhY3M7ICsrZGFjKSB7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuQUs0Mzk2ICV1OiIsIGRhYyArIDEpOworCQlmb3IgKGkgPSAwOyBpIDwgNTsgKytpKQorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICUwMngiLCBkYXRhLT5hazQzOTZfcmVnc1tkYWNdW2ldKTsKKwl9CisJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF93bTg3ODVfcmVnaXN0ZXJzKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IGdlbmVyaWNfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdW5zaWduZWQgaW50IGk7CisKKwlzbmRfaXByaW50ZihidWZmZXIsICJcbldNODc4NToiKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgKytpKQorCQlzbmRfaXByaW50ZihidWZmZXIsICIgJTAzeCIsIGRhdGEtPndtODc4NV9yZWdzW2ldKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX294eWdlbl9yZWdpc3RlcnMoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3sKKwlkdW1wX2FrNDM5Nl9yZWdpc3RlcnMoY2hpcCwgYnVmZmVyKTsKKwlkdW1wX3dtODc4NV9yZWdpc3RlcnMoY2hpcCwgYnVmZmVyKTsKK30KKwogc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihhazQzOTZfZGJfc2NhbGUsIFRMVl9EQl9HQUlOX01VVEUsIDApOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF9nZW5lcmljID0gewpAQCAtNDk0LDExICs3MjYsMTEgQEAKIAkubWl4ZXJfaW5pdCA9IGdlbmVyaWNfd204Nzg1X21peGVyX2luaXQsCiAJLmNsZWFudXAgPSBnZW5lcmljX2NsZWFudXAsCiAJLnJlc3VtZSA9IGdlbmVyaWNfcmVzdW1lLAotCS5nZXRfaTJzX21jbGsgPSBveHlnZW5fZGVmYXVsdF9pMnNfbWNsaywKIAkuc2V0X2RhY19wYXJhbXMgPSBzZXRfYWs0Mzk2X3BhcmFtcywKIAkuc2V0X2FkY19wYXJhbXMgPSBzZXRfd204Nzg1X3BhcmFtcywKIAkudXBkYXRlX2RhY192b2x1bWUgPSB1cGRhdGVfYWs0Mzk2X3ZvbHVtZSwKIAkudXBkYXRlX2RhY19tdXRlID0gdXBkYXRlX2FrNDM5Nl9tdXRlLAorCS5kdW1wX3JlZ2lzdGVycyA9IGR1bXBfb3h5Z2VuX3JlZ2lzdGVycywKIAkuZGFjX3RsdiA9IGFrNDM5Nl9kYl9zY2FsZSwKIAkubW9kZWxfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBnZW5lcmljX2RhdGEpLAogCS5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfApAQCAtNTA4LDExICs3NDAsMTQgQEAKIAkJCSBDQVBUVVJFXzFfRlJPTV9TUERJRiB8CiAJCQkgQ0FQVFVSRV8yX0ZST01fQUM5N18xIHwKIAkJCSBBQzk3X0NEX0lOUFVULAotCS5kYWNfY2hhbm5lbHMgPSA4LAorCS5kYWNfY2hhbm5lbHNfcGNtID0gOCwKKwkuZGFjX2NoYW5uZWxzX21peGVyID0gOCwKIAkuZGFjX3ZvbHVtZV9taW4gPSAwLAogCS5kYWNfdm9sdW1lX21heCA9IDI1NSwKIAkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fU1BJIHwKIAkJCSAgT1hZR0VOX0ZVTkNUSU9OX0VOQUJMRV9TUElfNF81LAorCS5kYWNfbWNsa3MgPSBPWFlHRU5fTUNMS1MoMjU2LCAxMjgsIDEyOCksCisJLmFkY19tY2xrcyA9IE9YWUdFTl9NQ0xLUygyNTYsIDI1NiwgMTI4KSwKIAkuZGFjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKIAkuYWRjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKIH07CkBAIC01MjAsNDIgKzc1NSw4NyBAQAogc3RhdGljIGludCBfX2RldmluaXQgZ2V0X294eWdlbl9tb2RlbChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbXSA9IHsKKwkJW01PREVMX01FUklESUFOXQk9ICJBdXplblRlY2ggWC1NZXJpZGlhbiIsCisJCVtNT0RFTF9NRVJJRElBTl8yR10JPSAiQXV6ZW5UZWNoIFgtTWVyaWRpYW4gMkciLAorCQlbTU9ERUxfQ0xBUk9dCQk9ICJIVC1PbWVnYSBDbGFybyIsCisJCVtNT0RFTF9DTEFST19IQUxPXQk9ICJIVC1PbWVnYSBDbGFybyBoYWxvIiwKKwkJW01PREVMX0ZBTlRBU0lBXQk9ICJUZW1wb1RlYyBIaUZpZXIgRmFudGFzaWEiLAorCQlbTU9ERUxfU0VSRU5BREVdCT0gIlRlbXBvVGVjIEhpRmllciBTZXJlbmFkZSIsCisJCVtNT0RFTF9IRzJQQ0ldCQk9ICJDTUk4Nzg3LUhHMlBDSSIsCisJfTsKKwogCWNoaXAtPm1vZGVsID0gbW9kZWxfZ2VuZXJpYzsKIAlzd2l0Y2ggKGlkLT5kcml2ZXJfZGF0YSkgewogCWNhc2UgTU9ERUxfTUVSSURJQU46CisJY2FzZSBNT0RFTF9NRVJJRElBTl8yRzoKIAkJY2hpcC0+bW9kZWwuaW5pdCA9IG1lcmlkaWFuX2luaXQ7Ci0JCWNoaXAtPm1vZGVsLm1peGVyX2luaXQgPSBnZW5lcmljX21peGVyX2luaXQ7CisJCWNoaXAtPm1vZGVsLm1peGVyX2luaXQgPSBtZXJpZGlhbl9taXhlcl9pbml0OwogCQljaGlwLT5tb2RlbC5yZXN1bWUgPSBtZXJpZGlhbl9yZXN1bWU7CiAJCWNoaXAtPm1vZGVsLnNldF9hZGNfcGFyYW1zID0gc2V0X2FrNTM4NV9wYXJhbXM7CisJCWNoaXAtPm1vZGVsLmR1bXBfcmVnaXN0ZXJzID0gZHVtcF9hazQzOTZfcmVnaXN0ZXJzOwogCQljaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAogCQkJCQkgICAgUExBWUJBQ0tfMV9UT19TUERJRiB8CiAJCQkJCSAgICBDQVBUVVJFXzBfRlJPTV9JMlNfMiB8CiAJCQkJCSAgICBDQVBUVVJFXzFfRlJPTV9TUERJRjsKKwkJaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSBNT0RFTF9NRVJJRElBTikKKwkJCWNoaXAtPm1vZGVsLmRldmljZV9jb25maWcgfD0gQUM5N19DRF9JTlBVVDsKIAkJYnJlYWs7CiAJY2FzZSBNT0RFTF9DTEFSTzoKIAkJY2hpcC0+bW9kZWwuaW5pdCA9IGNsYXJvX2luaXQ7CisJCWNoaXAtPm1vZGVsLm1peGVyX2luaXQgPSBjbGFyb19taXhlcl9pbml0OwogCQljaGlwLT5tb2RlbC5jbGVhbnVwID0gY2xhcm9fY2xlYW51cDsKIAkJY2hpcC0+bW9kZWwuc3VzcGVuZCA9IGNsYXJvX3N1c3BlbmQ7CiAJCWNoaXAtPm1vZGVsLnJlc3VtZSA9IGNsYXJvX3Jlc3VtZTsKIAkJYnJlYWs7CiAJY2FzZSBNT0RFTF9DTEFST19IQUxPOgogCQljaGlwLT5tb2RlbC5pbml0ID0gY2xhcm9faGFsb19pbml0OwotCQljaGlwLT5tb2RlbC5taXhlcl9pbml0ID0gZ2VuZXJpY19taXhlcl9pbml0OworCQljaGlwLT5tb2RlbC5taXhlcl9pbml0ID0gY2xhcm9faGFsb19taXhlcl9pbml0OwogCQljaGlwLT5tb2RlbC5jbGVhbnVwID0gY2xhcm9fY2xlYW51cDsKIAkJY2hpcC0+bW9kZWwuc3VzcGVuZCA9IGNsYXJvX3N1c3BlbmQ7CiAJCWNoaXAtPm1vZGVsLnJlc3VtZSA9IGNsYXJvX3Jlc3VtZTsKIAkJY2hpcC0+bW9kZWwuc2V0X2FkY19wYXJhbXMgPSBzZXRfYWs1Mzg1X3BhcmFtczsKKwkJY2hpcC0+bW9kZWwuZHVtcF9yZWdpc3RlcnMgPSBkdW1wX2FrNDM5Nl9yZWdpc3RlcnM7CiAJCWNoaXAtPm1vZGVsLmRldmljZV9jb25maWcgPSBQTEFZQkFDS18wX1RPX0kyUyB8CiAJCQkJCSAgICBQTEFZQkFDS18xX1RPX1NQRElGIHwKIAkJCQkJICAgIENBUFRVUkVfMF9GUk9NX0kyU18yIHwKIAkJCQkJICAgIENBUFRVUkVfMV9GUk9NX1NQRElGOwogCQlicmVhazsKKwljYXNlIE1PREVMX0ZBTlRBU0lBOgorCWNhc2UgTU9ERUxfU0VSRU5BREU6CisJY2FzZSBNT0RFTF8yQ0hfT1VUUFVUOgorCWNhc2UgTU9ERUxfSEcyUENJOgorCQljaGlwLT5tb2RlbC5zaG9ydG5hbWUgPSAiQy1NZWRpYSBDTUk4Nzg3IjsKKwkJY2hpcC0+bW9kZWwuY2hpcCA9ICJDTUk4Nzg3IjsKKwkJaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSBNT0RFTF9GQU5UQVNJQSkKKwkJCWNoaXAtPm1vZGVsLmluaXQgPSBmYW50YXNpYV9pbml0OworCQllbHNlCisJCQljaGlwLT5tb2RlbC5pbml0ID0gc3RlcmVvX291dHB1dF9pbml0OworCQljaGlwLT5tb2RlbC5yZXN1bWUgPSBzdGVyZW9fcmVzdW1lOworCQljaGlwLT5tb2RlbC5taXhlcl9pbml0ID0gZ2VuZXJpY19taXhlcl9pbml0OworCQljaGlwLT5tb2RlbC5zZXRfYWRjX3BhcmFtcyA9IHNldF9ub19wYXJhbXM7CisJCWNoaXAtPm1vZGVsLmR1bXBfcmVnaXN0ZXJzID0gZHVtcF9hazQzOTZfcmVnaXN0ZXJzOworCQljaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAorCQkJCQkgICAgUExBWUJBQ0tfMV9UT19TUERJRjsKKwkJaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSBNT0RFTF9GQU5UQVNJQSkgeworCQkJY2hpcC0+bW9kZWwuZGV2aWNlX2NvbmZpZyB8PSBDQVBUVVJFXzBfRlJPTV9JMlNfMTsKKwkJCWNoaXAtPm1vZGVsLmFkY19tY2xrcyA9IE9YWUdFTl9NQ0xLUygyNTYsIDEyOCwgMTI4KTsKKwkJfQorCQljaGlwLT5tb2RlbC5kYWNfY2hhbm5lbHNfcGNtID0gMjsKKwkJY2hpcC0+bW9kZWwuZGFjX2NoYW5uZWxzX21peGVyID0gMjsKKwkJYnJlYWs7CisJY2FzZSBNT0RFTF9YT05BUl9ERzoKKwkJY2hpcC0+bW9kZWwgPSBtb2RlbF94b25hcl9kZzsKKwkJYnJlYWs7CiAJfQogCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gTU9ERUxfTUVSSURJQU4gfHwKKwkgICAgaWQtPmRyaXZlcl9kYXRhID09IE1PREVMX01FUklESUFOXzJHIHx8CiAJICAgIGlkLT5kcml2ZXJfZGF0YSA9PSBNT0RFTF9DTEFST19IQUxPKSB7CiAJCWNoaXAtPm1vZGVsLm1pc2NfZmxhZ3MgPSBPWFlHRU5fTUlTQ19NSURJOwogCQljaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnIHw9IE1JRElfT1VUUFVUIHwgTUlESV9JTlBVVDsKIAl9CisJaWYgKGlkLT5kcml2ZXJfZGF0YSA8IEFSUkFZX1NJWkUobmFtZXMpICYmIG5hbWVzW2lkLT5kcml2ZXJfZGF0YV0pCisJCWNoaXAtPm1vZGVsLnNob3J0bmFtZSA9IG5hbWVzW2lkLT5kcml2ZXJfZGF0YV07CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmggYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oCmluZGV4IDdkNTIyMmMuLmMyYWU2M2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmgKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uaApAQCAtMTYsNiArMTYsMTAgQEAKICNkZWZpbmUgUENNX0FDOTcJNQogI2RlZmluZSBQQ01fQ09VTlQJNgogCisjZGVmaW5lIE9YWUdFTl9NQ0xLUyhmX3NpbmdsZSwgZl9kb3VibGUsIGZfcXVhZCkgKChNQ0xLXyMjZl9zaW5nbGUgPDwgMCkgfCBcCisJCQkJCQkgIChNQ0xLXyMjZl9kb3VibGUgPDwgMikgfCBcCisJCQkJCQkgIChNQ0xLXyMjZl9xdWFkICAgPDwgNCkpCisKICNkZWZpbmUgT1hZR0VOX0lPX1NJWkUJMHgxMDAKIAogI2RlZmluZSBPWFlHRU5fRUVQUk9NX0lECTB4NDM0ZAkvKiAiQ00iICovCkBAIC0zNSw2ICszOSw3IEBACiAjZGVmaW5lIE1JRElfT1VUUFVUCQkweDA4MDAKICNkZWZpbmUgTUlESV9JTlBVVAkJMHgxMDAwCiAjZGVmaW5lIEFDOTdfQ0RfSU5QVVQJCTB4MjAwMAorI2RlZmluZSBBQzk3X0ZNSUNfU1dJVENICTB4NDAwMAogCiBlbnVtIHsKIAlDT05UUk9MX1NQRElGX1BDTSwKQEAgLTY1LDYgKzcwLDcgQEAKIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtczsKIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3Owogc3RydWN0IHNuZF9yYXdtaWRpOworc3RydWN0IHNuZF9pbmZvX2J1ZmZlcjsKIHN0cnVjdCBveHlnZW47CiAKIHN0cnVjdCBveHlnZW5fbW9kZWwgewpAQCAtNzksOCArODUsNiBAQAogCXZvaWQgKCpyZXN1bWUpKHN0cnVjdCBveHlnZW4gKmNoaXApOwogCXZvaWQgKCpwY21faGFyZHdhcmVfZmlsdGVyKSh1bnNpZ25lZCBpbnQgY2hhbm5lbCwKIAkJCQkgICAgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgKmhhcmR3YXJlKTsKLQl1bnNpZ25lZCBpbnQgKCpnZXRfaTJzX21jbGspKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCBjaGFubmVsLAotCQkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpOwogCXZvaWQgKCpzZXRfZGFjX3BhcmFtcykoc3RydWN0IG94eWdlbiAqY2hpcCwKIAkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcyk7CiAJdm9pZCAoKnNldF9hZGNfcGFyYW1zKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLApAQCAtOTIsMTUgKzk2LDE5IEBACiAJdm9pZCAoKnVhcnRfaW5wdXQpKHN0cnVjdCBveHlnZW4gKmNoaXApOwogCXZvaWQgKCphYzk3X3N3aXRjaCkoc3RydWN0IG94eWdlbiAqY2hpcCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgbXV0ZSk7CisJdm9pZCAoKmR1bXBfcmVnaXN0ZXJzKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJICAgICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcik7CiAJY29uc3QgdW5zaWduZWQgaW50ICpkYWNfdGx2OwotCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZV9kYXRhOwogCXNpemVfdCBtb2RlbF9kYXRhX3NpemU7CiAJdW5zaWduZWQgaW50IGRldmljZV9jb25maWc7Ci0JdTggZGFjX2NoYW5uZWxzOworCXU4IGRhY19jaGFubmVsc19wY207CisJdTggZGFjX2NoYW5uZWxzX21peGVyOwogCXU4IGRhY192b2x1bWVfbWluOwogCXU4IGRhY192b2x1bWVfbWF4OwogCXU4IG1pc2NfZmxhZ3M7CiAJdTggZnVuY3Rpb25fZmxhZ3M7CisJdTggZGFjX21jbGtzOworCXU4IGFkY19tY2xrczsKIAl1MTYgZGFjX2kyc19mb3JtYXQ7CiAJdTE2IGFkY19pMnNfZm9ybWF0OwogfTsKQEAgLTEyMSw3ICsxMjksNiBAQAogCXU4IHBjbV9ydW5uaW5nOwogCXU4IGRhY19yb3V0aW5nOwogCXU4IHNwZGlmX3BsYXliYWNrX2VuYWJsZTsKLQl1OCByZXZpc2lvbjsKIAl1OCBoYXNfYWM5N18wOwogCXU4IGhhc19hYzk3XzE7CiAJdTMyIHNwZGlmX2JpdHM7CkBAIC0xNjcsOCArMTc0LDYgQEAKIC8qIG94eWdlbl9wY20uYyAqLwogCiBpbnQgb3h5Z2VuX3BjbV9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApOwotdW5zaWduZWQgaW50IG94eWdlbl9kZWZhdWx0X2kyc19tY2xrKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCBjaGFubmVsLAotCQkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpOwogCiAvKiBveHlnZW5faW8uYyAqLwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9pby5jIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5faW8uYwppbmRleCAwOWIyYjJhLi5mNTE2NGIxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9pby5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMKQEAgLTE5NywxMSArMTk3LDExIEBACiB7CiAJdW5zaWduZWQgaW50IGNvdW50OwogCi0JLyogc2hvdWxkIG5vdCBuZWVkIG1vcmUgdGhhbiA3LjY4IHVzICgyNCAqIDMyMCBucykgKi8KKwkvKiBzaG91bGQgbm90IG5lZWQgbW9yZSB0aGFuIDMwLjcyIHVzICgyNCAqIDEuMjggdXMpICovCiAJY291bnQgPSAxMDsKIAl3aGlsZSAoKG94eWdlbl9yZWFkOChjaGlwLCBPWFlHRU5fU1BJX0NPTlRST0wpICYgT1hZR0VOX1NQSV9CVVNZKQogCSAgICAgICAmJiBjb3VudCA+IDApIHsKLQkJdWRlbGF5KDEpOworCQl1ZGVsYXkoNCk7CiAJCS0tY291bnQ7CiAJfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9saWIuYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCmluZGV4IGU1ZWJlNTYuLjcwYjczOTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCkBAIC0yMDIsNyArMjAyLDEzIEBACiAJc3RydWN0IG94eWdlbiAqY2hpcCA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CiAJaW50IGksIGo7CiAKLQlzbmRfaXByaW50ZihidWZmZXIsICJDTUk4Nzg4XG5cbiIpOworCXN3aXRjaCAob3h5Z2VuX3JlYWQ4KGNoaXAsIE9YWUdFTl9SRVZJU0lPTikgJiBPWFlHRU5fUEFDS0FHRV9JRF9NQVNLKSB7CisJY2FzZSBPWFlHRU5fUEFDS0FHRV9JRF84Nzg2OiBpID0gJzYnOyBicmVhazsKKwljYXNlIE9YWUdFTl9QQUNLQUdFX0lEXzg3ODc6IGkgPSAnNyc7IGJyZWFrOworCWNhc2UgT1hZR0VOX1BBQ0tBR0VfSURfODc4ODogaSA9ICc4JzsgYnJlYWs7CisJZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICBpID0gJz8nOyBicmVhazsKKwl9CisJc25kX2lwcmludGYoYnVmZmVyLCAiQ01JODc4JWM6XG4iLCBpKTsKIAlmb3IgKGkgPSAwOyBpIDwgT1hZR0VOX0lPX1NJWkU7IGkgKz0gMHgxMCkgewogCQlzbmRfaXByaW50ZihidWZmZXIsICIlMDJ4OiIsIGkpOwogCQlmb3IgKGogPSAwOyBqIDwgMHgxMDsgKytqKQpAQCAtMjEyLDcgKzIxOCw3IEBACiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2hpcC0+bXV0ZXgpIDwgMCkKIAkJcmV0dXJuOwogCWlmIChjaGlwLT5oYXNfYWM5N18wKSB7Ci0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuQUM5N1xuIik7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuQUM5NzpcbiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgMHg4MDsgaSArPSAweDEwKSB7CiAJCQlzbmRfaXByaW50ZihidWZmZXIsICIlMDJ4OiIsIGkpOwogCQkJZm9yIChqID0gMDsgaiA8IDB4MTA7IGogKz0gMikKQEAgLTIyMiw3ICsyMjgsNyBAQAogCQl9CiAJfQogCWlmIChjaGlwLT5oYXNfYWM5N18xKSB7Ci0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuQUM5NyAyXG4iKTsKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiXG5BQzk3IDI6XG4iKTsKIAkJZm9yIChpID0gMDsgaSA8IDB4ODA7IGkgKz0gMHgxMCkgewogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiJTAyeDoiLCBpKTsKIAkJCWZvciAoaiA9IDA7IGogPCAweDEwOyBqICs9IDIpCkBAIC0yMzIsMTMgKzIzOCwxNSBAQAogCQl9CiAJfQogCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCWlmIChjaGlwLT5tb2RlbC5kdW1wX3JlZ2lzdGVycykKKwkJY2hpcC0+bW9kZWwuZHVtcF9yZWdpc3RlcnMoY2hpcCwgYnVmZmVyKTsKIH0KIAogc3RhdGljIHZvaWQgb3h5Z2VuX3Byb2NfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnk7CiAKLQlpZiAoIXNuZF9jYXJkX3Byb2NfbmV3KGNoaXAtPmNhcmQsICJjbWk4Nzg4IiwgJmVudHJ5KSkKKwlpZiAoIXNuZF9jYXJkX3Byb2NfbmV3KGNoaXAtPmNhcmQsICJveHlnZW4iLCAmZW50cnkpKQogCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNoaXAsIG94eWdlbl9wcm9jX3JlYWQpOwogfQogI2Vsc2UKQEAgLTI2Miw3ICsyNzAsNyBAQAogCSAqLwogCXN1YmRldmljZSA9IG94eWdlbl9yZWFkX2VlcHJvbShjaGlwLCAyKTsKIAkvKiB1c2UgZGVmYXVsdCBJRCBpZiBFRVBST00gaXMgbWlzc2luZyAqLwotCWlmIChzdWJkZXZpY2UgPT0gMHhmZmZmKQorCWlmIChzdWJkZXZpY2UgPT0gMHhmZmZmICYmIG94eWdlbl9yZWFkX2VlcHJvbShjaGlwLCAxKSA9PSAweGZmZmYpCiAJCXN1YmRldmljZSA9IDB4ODc4ODsKIAkvKgogCSAqIFdlIHVzZSBvbmx5IHRoZSBzdWJzeXN0ZW0gZGV2aWNlIElEIGZvciBzZWFyY2hpbmcgYmVjYXVzZSBpdCBpcwpAQCAtMzY0LDEyICszNzIsNyBAQAogCQkoSUVDOTU4X0FFUzFfQ09OX1BDTV9DT0RFUiA8PCBPWFlHRU5fU1BESUZfQ0FURUdPUllfU0hJRlQpOwogCWNoaXAtPnNwZGlmX3BjbV9iaXRzID0gY2hpcC0+c3BkaWZfYml0czsKIAotCWlmIChveHlnZW5fcmVhZDgoY2hpcCwgT1hZR0VOX1JFVklTSU9OKSAmIE9YWUdFTl9SRVZJU0lPTl8yKQotCQljaGlwLT5yZXZpc2lvbiA9IDI7Ci0JZWxzZQotCQljaGlwLT5yZXZpc2lvbiA9IDE7Ci0KLQlpZiAoY2hpcC0+cmV2aXNpb24gPT0gMSkKKwlpZiAoIShveHlnZW5fcmVhZDgoY2hpcCwgT1hZR0VOX1JFVklTSU9OKSAmIE9YWUdFTl9SRVZJU0lPTl8yKSkKIAkJb3h5Z2VuX3NldF9iaXRzOChjaGlwLCBPWFlHRU5fTUlTQywKIAkJCQkgT1hZR0VOX01JU0NfUENJX01FTV9XXzFfQ0xPQ0spOwogCkBAIC00MDYsMjggKzQwOSw0MCBAQAogCQkgICAgICAoT1hZR0VOX0ZPUk1BVF8xNiA8PCBPWFlHRU5fTVVMVElDSF9GT1JNQVRfU0hJRlQpKTsKIAlveHlnZW5fd3JpdGU4KGNoaXAsIE9YWUdFTl9SRUNfQ0hBTk5FTFMsIE9YWUdFTl9SRUNfQ0hBTk5FTFNfMl8yXzIpOwogCW94eWdlbl93cml0ZTE2KGNoaXAsIE9YWUdFTl9JMlNfTVVMVElDSF9GT1JNQVQsCi0JCSAgICAgICBPWFlHRU5fUkFURV80ODAwMCB8IGNoaXAtPm1vZGVsLmRhY19pMnNfZm9ybWF0IHwKLQkJICAgICAgIE9YWUdFTl9JMlNfTUNMS18yNTYgfCBPWFlHRU5fSTJTX0JJVFNfMTYgfAotCQkgICAgICAgT1hZR0VOX0kyU19NQVNURVIgfCBPWFlHRU5fSTJTX0JDTEtfNjQpOworCQkgICAgICAgT1hZR0VOX1JBVEVfNDgwMDAgfAorCQkgICAgICAgY2hpcC0+bW9kZWwuZGFjX2kyc19mb3JtYXQgfAorCQkgICAgICAgT1hZR0VOX0kyU19NQ0xLKGNoaXAtPm1vZGVsLmRhY19tY2xrcykgfAorCQkgICAgICAgT1hZR0VOX0kyU19CSVRTXzE2IHwKKwkJICAgICAgIE9YWUdFTl9JMlNfTUFTVEVSIHwKKwkJICAgICAgIE9YWUdFTl9JMlNfQkNMS182NCk7CiAJaWYgKGNoaXAtPm1vZGVsLmRldmljZV9jb25maWcgJiBDQVBUVVJFXzBfRlJPTV9JMlNfMSkKIAkJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0kyU19BX0ZPUk1BVCwKLQkJCSAgICAgICBPWFlHRU5fUkFURV80ODAwMCB8IGNoaXAtPm1vZGVsLmFkY19pMnNfZm9ybWF0IHwKLQkJCSAgICAgICBPWFlHRU5fSTJTX01DTEtfMjU2IHwgT1hZR0VOX0kyU19CSVRTXzE2IHwKLQkJCSAgICAgICBPWFlHRU5fSTJTX01BU1RFUiB8IE9YWUdFTl9JMlNfQkNMS182NCk7CisJCQkgICAgICAgT1hZR0VOX1JBVEVfNDgwMDAgfAorCQkJICAgICAgIGNoaXAtPm1vZGVsLmFkY19pMnNfZm9ybWF0IHwKKwkJCSAgICAgICBPWFlHRU5fSTJTX01DTEsoY2hpcC0+bW9kZWwuYWRjX21jbGtzKSB8CisJCQkgICAgICAgT1hZR0VOX0kyU19CSVRTXzE2IHwKKwkJCSAgICAgICBPWFlHRU5fSTJTX01BU1RFUiB8CisJCQkgICAgICAgT1hZR0VOX0kyU19CQ0xLXzY0KTsKIAllbHNlCiAJCW94eWdlbl93cml0ZTE2KGNoaXAsIE9YWUdFTl9JMlNfQV9GT1JNQVQsCi0JCQkgICAgICAgT1hZR0VOX0kyU19NQVNURVIgfCBPWFlHRU5fSTJTX01VVEVfTUNMSyk7CisJCQkgICAgICAgT1hZR0VOX0kyU19NQVNURVIgfAorCQkJICAgICAgIE9YWUdFTl9JMlNfTVVURV9NQ0xLKTsKIAlpZiAoY2hpcC0+bW9kZWwuZGV2aWNlX2NvbmZpZyAmIChDQVBUVVJFXzBfRlJPTV9JMlNfMiB8CiAJCQkJCSBDQVBUVVJFXzJfRlJPTV9JMlNfMikpCiAJCW94eWdlbl93cml0ZTE2KGNoaXAsIE9YWUdFTl9JMlNfQl9GT1JNQVQsCi0JCQkgICAgICAgT1hZR0VOX1JBVEVfNDgwMDAgfCBjaGlwLT5tb2RlbC5hZGNfaTJzX2Zvcm1hdCB8Ci0JCQkgICAgICAgT1hZR0VOX0kyU19NQ0xLXzI1NiB8IE9YWUdFTl9JMlNfQklUU18xNiB8Ci0JCQkgICAgICAgT1hZR0VOX0kyU19NQVNURVIgfCBPWFlHRU5fSTJTX0JDTEtfNjQpOworCQkJICAgICAgIE9YWUdFTl9SQVRFXzQ4MDAwIHwKKwkJCSAgICAgICBjaGlwLT5tb2RlbC5hZGNfaTJzX2Zvcm1hdCB8CisJCQkgICAgICAgT1hZR0VOX0kyU19NQ0xLKGNoaXAtPm1vZGVsLmFkY19tY2xrcykgfAorCQkJICAgICAgIE9YWUdFTl9JMlNfQklUU18xNiB8CisJCQkgICAgICAgT1hZR0VOX0kyU19NQVNURVIgfAorCQkJICAgICAgIE9YWUdFTl9JMlNfQkNMS182NCk7CiAJZWxzZQogCQlveHlnZW5fd3JpdGUxNihjaGlwLCBPWFlHRU5fSTJTX0JfRk9STUFULAotCQkJICAgICAgIE9YWUdFTl9JMlNfTUFTVEVSIHwgT1hZR0VOX0kyU19NVVRFX01DTEspOworCQkJICAgICAgIE9YWUdFTl9JMlNfTUFTVEVSIHwKKwkJCSAgICAgICBPWFlHRU5fSTJTX01VVEVfTUNMSyk7CiAJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0kyU19DX0ZPUk1BVCwKLQkJICAgICAgIE9YWUdFTl9JMlNfTUFTVEVSIHwgT1hZR0VOX0kyU19NVVRFX01DTEspOworCQkgICAgICAgT1hZR0VOX0kyU19NQVNURVIgfAorCQkgICAgICAgT1hZR0VOX0kyU19NVVRFX01DTEspOwogCW94eWdlbl9jbGVhcl9iaXRzMzIoY2hpcCwgT1hZR0VOX1NQRElGX0NPTlRST0wsCiAJCQkgICAgT1hZR0VOX1NQRElGX09VVF9FTkFCTEUgfAogCQkJICAgIE9YWUdFTl9TUERJRl9MT09QQkFDSyk7CkBAIC01NTcsNyArNTcyLDggQEAKIAlveHlnZW5fc2h1dGRvd24oY2hpcCk7CiAJaWYgKGNoaXAtPmlycSA+PSAwKQogCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya19zeW5jKCZjaGlwLT5zcGRpZl9pbnB1dF9iaXRzX3dvcmspOworCWZsdXNoX3dvcmtfc3luYygmY2hpcC0+Z3Bpb193b3JrKTsKIAljaGlwLT5tb2RlbC5jbGVhbnVwKGNoaXApOwogCWtmcmVlKGNoaXAtPm1vZGVsX2RhdGEpOwogCW11dGV4X2Rlc3Ryb3koJmNoaXAtPm11dGV4KTsKQEAgLTY0OCw4ICs2NjQsOCBAQAogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgY2hpcC0+bW9kZWwuY2hpcCk7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgY2hpcC0+bW9kZWwuc2hvcnRuYW1lKTsKLQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgKHJldiAldSkgYXQgJSNseCwgaXJxICVpIiwKLQkJY2hpcC0+bW9kZWwubG9uZ25hbWUsIGNoaXAtPnJldmlzaW9uLCBjaGlwLT5hZGRyLCBjaGlwLT5pcnEpOworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAlI2x4LCBpcnEgJWkiLAorCQljaGlwLT5tb2RlbC5sb25nbmFtZSwgY2hpcC0+YWRkciwgY2hpcC0+aXJxKTsKIAlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCBjaGlwLT5tb2RlbC5jaGlwKTsKIAlzbmRfY29tcG9uZW50X2FkZChjYXJkLCBjaGlwLT5tb2RlbC5jaGlwKTsKIApAQCAtNzMzLDcgKzc0OSw4IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CiAKIAlzeW5jaHJvbml6ZV9pcnEoY2hpcC0+aXJxKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmY2hpcC0+c3BkaWZfaW5wdXRfYml0c193b3JrKTsKKwlmbHVzaF93b3JrX3N5bmMoJmNoaXAtPmdwaW9fd29yayk7CiAJY2hpcC0+aW50ZXJydXB0X21hc2sgPSBzYXZlZF9pbnRlcnJ1cHRfbWFzazsKIAogCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW5fbWl4ZXIuYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX21peGVyLmMKaW5kZXggMjg0OWIzNi4uOWJmZjE0ZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW5fbWl4ZXIuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9taXhlci5jCkBAIC0zMSw3ICszMSw3IEBACiAJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOwogCiAJaW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKLQlpbmZvLT5jb3VudCA9IGNoaXAtPm1vZGVsLmRhY19jaGFubmVsczsKKwlpbmZvLT5jb3VudCA9IGNoaXAtPm1vZGVsLmRhY19jaGFubmVsc19taXhlcjsKIAlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IGNoaXAtPm1vZGVsLmRhY192b2x1bWVfbWluOwogCWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gY2hpcC0+bW9kZWwuZGFjX3ZvbHVtZV9tYXg7CiAJcmV0dXJuIDA7CkBAIC00NCw3ICs0NCw3IEBACiAJdW5zaWduZWQgaW50IGk7CiAKIAltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7Ci0JZm9yIChpID0gMDsgaSA8IGNoaXAtPm1vZGVsLmRhY19jaGFubmVsczsgKytpKQorCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5tb2RlbC5kYWNfY2hhbm5lbHNfbWl4ZXI7ICsraSkKIAkJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbaV0gPSBjaGlwLT5kYWNfdm9sdW1lW2ldOwogCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOwogCXJldHVybiAwOwpAQCAtNTksNyArNTksNyBAQAogCiAJY2hhbmdlZCA9IDA7CiAJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOwotCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5tb2RlbC5kYWNfY2hhbm5lbHM7ICsraSkKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+bW9kZWwuZGFjX2NoYW5uZWxzX21peGVyOyArK2kpCiAJCWlmICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXSAhPSBjaGlwLT5kYWNfdm9sdW1lW2ldKSB7CiAJCQljaGlwLT5kYWNfdm9sdW1lW2ldID0gdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbaV07CiAJCQljaGFuZ2VkID0gMTsKQEAgLTk3LDYgKzk3LDE2IEBACiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXBtaXhfaXRlbV9jb3VudChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWlmIChjaGlwLT5tb2RlbC5kYWNfY2hhbm5lbHNfcGNtIDwgOCkKKwkJcmV0dXJuIDI7CisJZWxzZSBpZiAoY2hpcC0+bW9kZWwudXBkYXRlX2NlbnRlcl9sZmVfbWl4KQorCQlyZXR1cm4gNTsKKwllbHNlCisJCXJldHVybiAzOworfQorCiBzdGF0aWMgaW50IHVwbWl4X2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzWzVdID0gewpAQCAtMTA3LDE1ICsxMTcsOSBAQAogCQkiRnJvbnQrU3Vycm91bmQrQ2VudGVyL0xGRStCYWNrIiwKIAl9OwogCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBpbnQgY291bnQgPSBjaGlwLT5tb2RlbC51cGRhdGVfY2VudGVyX2xmZV9taXggPyA1IDogMzsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSB1cG1peF9pdGVtX2NvdW50KGNoaXApOwogCi0JaW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKLQlpbmZvLT5jb3VudCA9IDE7Ci0JaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IGNvdW50OwotCWlmIChpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gY291bnQpCi0JCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IGNvdW50IC0gMTsKLQlzdHJjcHkoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCBuYW1lc1tpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc25kX2N0bF9lbnVtX2luZm8oaW5mbywgMSwgY291bnQsIG5hbWVzKTsKIH0KIAogc3RhdGljIGludCB1cG1peF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKQEAgLTE4OCw3ICsxOTIsNyBAQAogc3RhdGljIGludCB1cG1peF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKIHsKIAlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgaW50IGNvdW50ID0gY2hpcC0+bW9kZWwudXBkYXRlX2NlbnRlcl9sZmVfbWl4ID8gNSA6IDM7CisJdW5zaWduZWQgaW50IGNvdW50ID0gdXBtaXhfaXRlbV9jb3VudChjaGlwKTsKIAlpbnQgY2hhbmdlZDsKIAogCWlmICh2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID49IGNvdW50KQpAQCAtNDMwLDMwICs0MzQsMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzcGRpZl9sb29wYmFja19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAotCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCitzdGF0aWMgaW50IHNwZGlmX2JpdF9zd2l0Y2hfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKIHsKIAlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJdTMyIGJpdCA9IGN0bC0+cHJpdmF0ZV92YWx1ZTsKIAogCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0KLQkJISEob3h5Z2VuX3JlYWQzMihjaGlwLCBPWFlHRU5fU1BESUZfQ09OVFJPTCkKLQkJICAgJiBPWFlHRU5fU1BESUZfTE9PUEJBQ0spOworCQkhIShveHlnZW5fcmVhZDMyKGNoaXAsIE9YWUdFTl9TUERJRl9DT05UUk9MKSAmIGJpdCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3BkaWZfbG9vcGJhY2tfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKLQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQorc3RhdGljIGludCBzcGRpZl9iaXRfc3dpdGNoX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCiB7CiAJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXUzMiBiaXQgPSBjdGwtPnByaXZhdGVfdmFsdWU7CiAJdTMyIG9sZHJlZywgbmV3cmVnOwogCWludCBjaGFuZ2VkOwogCiAJc3Bpbl9sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwogCW9sZHJlZyA9IG94eWdlbl9yZWFkMzIoY2hpcCwgT1hZR0VOX1NQRElGX0NPTlRST0wpOwogCWlmICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKLQkJbmV3cmVnID0gb2xkcmVnIHwgT1hZR0VOX1NQRElGX0xPT1BCQUNLOworCQluZXdyZWcgPSBvbGRyZWcgfCBiaXQ7CiAJZWxzZQotCQluZXdyZWcgPSBvbGRyZWcgJiB+T1hZR0VOX1NQRElGX0xPT1BCQUNLOworCQluZXdyZWcgPSBvbGRyZWcgJiB+Yml0OwogCWNoYW5nZWQgPSBuZXdyZWcgIT0gb2xkcmVnOwogCWlmIChjaGFuZ2VkKQogCQlveHlnZW5fd3JpdGUzMihjaGlwLCBPWFlHRU5fU1BESUZfQ09OVFJPTCwgbmV3cmVnKTsKQEAgLTY0NCw2ICs2NDksNDYgQEAKIAlyZXR1cm4gY2hhbmdlOwogfQogCitzdGF0aWMgaW50IG1pY19mbWljX3NvdXJjZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbXSA9IHsgIk1pYyBKYWNrIiwgIkZyb250IFBhbmVsIiB9OworCisJcmV0dXJuIHNuZF9jdGxfZW51bV9pbmZvKGluZm8sIDEsIDIsIG5hbWVzKTsKK30KKworc3RhdGljIGludCBtaWNfZm1pY19zb3VyY2VfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9CisJCSEhKG94eWdlbl9yZWFkX2FjOTcoY2hpcCwgMCwgQ005NzgwX0pBQ0spICYgQ005NzgwX0ZNSUMyTUlDKTsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtaWNfZm1pY19zb3VyY2VfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJdTE2IG9sZHJlZywgbmV3cmVnOworCWludCBjaGFuZ2U7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJb2xkcmVnID0gb3h5Z2VuX3JlYWRfYWM5NyhjaGlwLCAwLCBDTTk3ODBfSkFDSyk7CisJaWYgKHZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pCisJCW5ld3JlZyA9IG9sZHJlZyB8IENNOTc4MF9GTUlDMk1JQzsKKwllbHNlCisJCW5ld3JlZyA9IG9sZHJlZyAmIH5DTTk3ODBfRk1JQzJNSUM7CisJY2hhbmdlID0gbmV3cmVnICE9IG9sZHJlZzsKKwlpZiAoY2hhbmdlKQorCQlveHlnZW5fd3JpdGVfYWM5NyhjaGlwLCAwLCBDTTk3ODBfSkFDSywgbmV3cmVnKTsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gY2hhbmdlOworfQorCiBzdGF0aWMgaW50IGFjOTdfZnBfcmVjX3ZvbHVtZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKIAkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCiB7CkBAIC03OTEsOCArODM2LDE3IEBACiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiTG9vcGJhY2sgIiwgTk9ORSwgU1dJVENIKSwKIAkJLmluZm8gPSBzbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvLAotCQkuZ2V0ID0gc3BkaWZfbG9vcGJhY2tfZ2V0LAotCQkucHV0ID0gc3BkaWZfbG9vcGJhY2tfcHV0LAorCQkuZ2V0ID0gc3BkaWZfYml0X3N3aXRjaF9nZXQsCisJCS5wdXQgPSBzcGRpZl9iaXRfc3dpdGNoX3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSBPWFlHRU5fU1BESUZfTE9PUEJBQ0ssCisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiVmFsaWRpdHkgQ2hlY2sgIixDQVBUVVJFLFNXSVRDSCksCisJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKKwkJLmdldCA9IHNwZGlmX2JpdF9zd2l0Y2hfZ2V0LAorCQkucHV0ID0gc3BkaWZfYml0X3N3aXRjaF9wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gT1hZR0VOX1NQRElGX1NQRFZBTElELAogCX0sCiB9OwogCkBAIC05MDgsNiArOTYyLDEzIEBACiAJQUM5N19WT0xVTUUoIk1pYyBDYXB0dXJlIFZvbHVtZSIsIDAsIEFDOTdfTUlDLCAwKSwKIAlBQzk3X1NXSVRDSCgiTWljIENhcHR1cmUgU3dpdGNoIiwgMCwgQUM5N19NSUMsIDE1LCAxKSwKIAlBQzk3X1NXSVRDSCgiTWljIEJvb3N0ICgrMjBkQikiLCAwLCBBQzk3X01JQywgNiwgMCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiTWljIFNvdXJjZSBDYXB0dXJlIEVudW0iLAorCQkuaW5mbyA9IG1pY19mbWljX3NvdXJjZV9pbmZvLAorCQkuZ2V0ID0gbWljX2ZtaWNfc291cmNlX2dldCwKKwkJLnB1dCA9IG1pY19mbWljX3NvdXJjZV9wdXQsCisJfSwKIAlBQzk3X1NXSVRDSCgiTGluZSBDYXB0dXJlIFN3aXRjaCIsIDAsIEFDOTdfTElORSwgMTUsIDEpLAogCUFDOTdfVk9MVU1FKCJDRCBDYXB0dXJlIFZvbHVtZSIsIDAsIEFDOTdfQ0QsIDEpLAogCUFDOTdfU1dJVENIKCJDRCBDYXB0dXJlIFN3aXRjaCIsIDAsIEFDOTdfQ0QsIDE1LCAxKSwKQEAgLTk3MCw3ICsxMDMxLDEwIEBACiAJCQkJY29udGludWU7CiAJCX0KIAkJaWYgKCFzdHJjbXAodGVtcGxhdGUubmFtZSwgIlN0ZXJlbyBVcG1peGluZyIpICYmCi0JCSAgICBjaGlwLT5tb2RlbC5kYWNfY2hhbm5lbHMgPT0gMikKKwkJICAgIGNoaXAtPm1vZGVsLmRhY19jaGFubmVsc19wY20gPT0gMikKKwkJCWNvbnRpbnVlOworCQlpZiAoIXN0cmNtcCh0ZW1wbGF0ZS5uYW1lLCAiTWljIFNvdXJjZSBDYXB0dXJlIEVudW0iKSAmJgorCQkgICAgIShjaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnICYgQUM5N19GTUlDX1NXSVRDSCkpCiAJCQljb250aW51ZTsKIAkJaWYgKCFzdHJuY21wKHRlbXBsYXRlLm5hbWUsICJDRCBDYXB0dXJlICIsIDExKSAmJgogCQkgICAgIShjaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnICYgQUM5N19DRF9JTlBVVCkpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9wY20uYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX3BjbS5jCmluZGV4IDgxNDY2NzQuLmQ1NTMzZTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX3BjbS5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX3BjbS5jCkBAIC0zOSw3ICszOSw4IEBACiAJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAogCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CiAJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKLQkJU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCwKKwkJU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCB8CisJCVNORFJWX1BDTV9JTkZPX05PX1BFUklPRF9XQUtFVVAsCiAJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CiAJCSAgIFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAogCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwKQEAgLTY1LDcgKzY2LDggQEAKIAkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CiAJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKIAkJU05EUlZfUENNX0lORk9fUEFVU0UgfAotCQlTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJULAorCQlTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUIHwKKwkJU05EUlZfUENNX0lORk9fTk9fUEVSSU9EX1dBS0VVUCwKIAkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKIAkJICAgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCiAJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfMzIwMDAgfApAQCAtOTEsNyArOTMsOCBAQAogCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKIAkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAogCQlTTkRSVl9QQ01fSU5GT19QQVVTRSB8Ci0JCVNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQsCisJCVNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQgfAorCQlTTkRSVl9QQ01fSU5GT19OT19QRVJJT0RfV0FLRVVQLAogCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCiAJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCiAJLnJhdGVfbWluID0gNDgwMDAsCkBAIC0xNDAsNyArMTQzLDcgQEAKIAkJcnVudGltZS0+aHcucmF0ZV9taW4gPSA0NDEwMDsKIAkJYnJlYWs7CiAJY2FzZSBQQ01fTVVMVElDSDoKLQkJcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gY2hpcC0+bW9kZWwuZGFjX2NoYW5uZWxzOworCQlydW50aW1lLT5ody5jaGFubmVsc19tYXggPSBjaGlwLT5tb2RlbC5kYWNfY2hhbm5lbHNfcGNtOwogCQlicmVhazsKIAl9CiAJaWYgKGNoaXAtPm1vZGVsLnBjbV9oYXJkd2FyZV9maWx0ZXIpCkBAIC0yNzEsMTcgKzI3NCw2IEBACiAJfQogfQogCi11bnNpZ25lZCBpbnQgb3h5Z2VuX2RlZmF1bHRfaTJzX21jbGsoc3RydWN0IG94eWdlbiAqY2hpcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBjaGFubmVsLAotCQkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCi17Ci0JaWYgKHBhcmFtc19yYXRlKGh3X3BhcmFtcykgPD0gOTYwMDApCi0JCXJldHVybiBPWFlHRU5fSTJTX01DTEtfMjU2OwotCWVsc2UKLQkJcmV0dXJuIE9YWUdFTl9JMlNfTUNMS18xMjg7Ci19Ci1FWFBPUlRfU1lNQk9MKG94eWdlbl9kZWZhdWx0X2kyc19tY2xrKTsKLQogc3RhdGljIHVuc2lnbmVkIGludCBveHlnZW5faTJzX2JpdHMoc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCiB7CiAJaWYgKHBhcmFtc19mb3JtYXQoaHdfcGFyYW1zKSA9PSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRSkKQEAgLTM0MSw2ICszMzMsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHUxNiBnZXRfbWNsayhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXVuc2lnbmVkIGludCBtY2xrcywgc2hpZnQ7CisKKwlpZiAoY2hhbm5lbCA9PSBQQ01fTVVMVElDSCkKKwkJbWNsa3MgPSBjaGlwLT5tb2RlbC5kYWNfbWNsa3M7CisJZWxzZQorCQltY2xrcyA9IGNoaXAtPm1vZGVsLmFkY19tY2xrczsKKworCWlmIChwYXJhbXNfcmF0ZShwYXJhbXMpIDw9IDQ4MDAwKQorCQlzaGlmdCA9IDA7CisJZWxzZSBpZiAocGFyYW1zX3JhdGUocGFyYW1zKSA8PSA5NjAwMCkKKwkJc2hpZnQgPSAyOworCWVsc2UKKwkJc2hpZnQgPSA0OworCisJcmV0dXJuIE9YWUdFTl9JMlNfTUNMSyhtY2xrcyA+PiBzaGlmdCk7Cit9CisKIHN0YXRpYyBpbnQgb3h5Z2VuX3JlY19hX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCQkgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQogewpAQCAtMzU3LDggKzM2OSw4IEBACiAJCQkgICAgIE9YWUdFTl9SRUNfRk9STUFUX0FfTUFTSyk7CiAJb3h5Z2VuX3dyaXRlMTZfbWFza2VkKGNoaXAsIE9YWUdFTl9JMlNfQV9GT1JNQVQsCiAJCQkgICAgICBveHlnZW5fcmF0ZShod19wYXJhbXMpIHwKLQkJCSAgICAgIGNoaXAtPm1vZGVsLmdldF9pMnNfbWNsayhjaGlwLCBQQ01fQSwgaHdfcGFyYW1zKSB8CiAJCQkgICAgICBjaGlwLT5tb2RlbC5hZGNfaTJzX2Zvcm1hdCB8CisJCQkgICAgICBnZXRfbWNsayhjaGlwLCBQQ01fQSwgaHdfcGFyYW1zKSB8CiAJCQkgICAgICBveHlnZW5faTJzX2JpdHMoaHdfcGFyYW1zKSwKIAkJCSAgICAgIE9YWUdFTl9JMlNfUkFURV9NQVNLIHwKIAkJCSAgICAgIE9YWUdFTl9JMlNfRk9STUFUX01BU0sgfApAQCAtMzkzLDkgKzQwNSw4IEBACiAJaWYgKCFpc19hYzk3KQogCQlveHlnZW5fd3JpdGUxNl9tYXNrZWQoY2hpcCwgT1hZR0VOX0kyU19CX0ZPUk1BVCwKIAkJCQkgICAgICBveHlnZW5fcmF0ZShod19wYXJhbXMpIHwKLQkJCQkgICAgICBjaGlwLT5tb2RlbC5nZXRfaTJzX21jbGsoY2hpcCwgUENNX0IsCi0JCQkJCQkJICAgICAgIGh3X3BhcmFtcykgfAogCQkJCSAgICAgIGNoaXAtPm1vZGVsLmFkY19pMnNfZm9ybWF0IHwKKwkJCQkgICAgICBnZXRfbWNsayhjaGlwLCBQQ01fQiwgaHdfcGFyYW1zKSB8CiAJCQkJICAgICAgb3h5Z2VuX2kyc19iaXRzKGh3X3BhcmFtcyksCiAJCQkJICAgICAgT1hZR0VOX0kyU19SQVRFX01BU0sgfAogCQkJCSAgICAgIE9YWUdFTl9JMlNfRk9STUFUX01BU0sgfApAQCAtNDc2LDggKzQ4Nyw3IEBACiAJb3h5Z2VuX3dyaXRlMTZfbWFza2VkKGNoaXAsIE9YWUdFTl9JMlNfTVVMVElDSF9GT1JNQVQsCiAJCQkgICAgICBveHlnZW5fcmF0ZShod19wYXJhbXMpIHwKIAkJCSAgICAgIGNoaXAtPm1vZGVsLmRhY19pMnNfZm9ybWF0IHwKLQkJCSAgICAgIGNoaXAtPm1vZGVsLmdldF9pMnNfbWNsayhjaGlwLCBQQ01fTVVMVElDSCwKLQkJCQkJCSAgICAgICBod19wYXJhbXMpIHwKKwkJCSAgICAgIGdldF9tY2xrKGNoaXAsIFBDTV9NVUxUSUNILCBod19wYXJhbXMpIHwKIAkJCSAgICAgIG94eWdlbl9pMnNfYml0cyhod19wYXJhbXMpLAogCQkJICAgICAgT1hZR0VOX0kyU19SQVRFX01BU0sgfAogCQkJICAgICAgT1hZR0VOX0kyU19GT1JNQVRfTUFTSyB8CkBAIC01MzAsNyArNTQwLDEwIEBACiAJb3h5Z2VuX3NldF9iaXRzOChjaGlwLCBPWFlHRU5fRE1BX0ZMVVNILCBjaGFubmVsX21hc2spOwogCW94eWdlbl9jbGVhcl9iaXRzOChjaGlwLCBPWFlHRU5fRE1BX0ZMVVNILCBjaGFubmVsX21hc2spOwogCi0JY2hpcC0+aW50ZXJydXB0X21hc2sgfD0gY2hhbm5lbF9tYXNrOworCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPm5vX3BlcmlvZF93YWtldXApCisJCWNoaXAtPmludGVycnVwdF9tYXNrICY9IH5jaGFubmVsX21hc2s7CisJZWxzZQorCQljaGlwLT5pbnRlcnJ1cHRfbWFzayB8PSBjaGFubmVsX21hc2s7CiAJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0lOVEVSUlVQVF9NQVNLLCBjaGlwLT5pbnRlcnJ1cHRfbWFzayk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9yZWdzLmggYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9yZWdzLmgKaW5kZXggNGRjZDQxYi4uNjNkYzdhMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW5fcmVncy5oCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX3JlZ3MuaApAQCAtMTM5LDkgKzEzOSwxMSBAQAogI2RlZmluZSAgT1hZR0VOX0kyU19GT1JNQVRfSTJTCQkweDAwMDAKICNkZWZpbmUgIE9YWUdFTl9JMlNfRk9STUFUX0xKVVNUCTB4MDAwOAogI2RlZmluZSAgT1hZR0VOX0kyU19NQ0xLX01BU0sJCTB4MDAzMAkvKiBNQ0xLL0xSQ0sgKi8KLSNkZWZpbmUgIE9YWUdFTl9JMlNfTUNMS18xMjgJCTB4MDAwMAotI2RlZmluZSAgT1hZR0VOX0kyU19NQ0xLXzI1NgkJMHgwMDEwCi0jZGVmaW5lICBPWFlHRU5fSTJTX01DTEtfNTEyCQkweDAwMjAKKyNkZWZpbmUgIE9YWUdFTl9JMlNfTUNMS19TSElGVAkJNAorI2RlZmluZSAgTUNMS18xMjgJCQkwCisjZGVmaW5lICBNQ0xLXzI1NgkJCTEKKyNkZWZpbmUgIE1DTEtfNTEyCQkJMgorI2RlZmluZSAgT1hZR0VOX0kyU19NQ0xLKGYpCQkoKChmKSAmIDMpIDw8IE9YWUdFTl9JMlNfTUNMS19TSElGVCkKICNkZWZpbmUgIE9YWUdFTl9JMlNfQklUU19NQVNLCQkweDAwYzAKICNkZWZpbmUgIE9YWUdFTl9JMlNfQklUU18xNgkJMHgwMDAwCiAjZGVmaW5lICBPWFlHRU5fSTJTX0JJVFNfMjAJCTB4MDA0MApAQCAtMjM4LDExICsyNDAsMTEgQEAKICNkZWZpbmUgIE9YWUdFTl9TUElfREFUQV9MRU5HVEhfTUFTSwkweDAyCiAjZGVmaW5lICBPWFlHRU5fU1BJX0RBVEFfTEVOR1RIXzIJMHgwMAogI2RlZmluZSAgT1hZR0VOX1NQSV9EQVRBX0xFTkdUSF8zCTB4MDIKLSNkZWZpbmUgIE9YWUdFTl9TUElfQ0xPQ0tfTUFTSwkJMHhjMAorI2RlZmluZSAgT1hZR0VOX1NQSV9DTE9DS19NQVNLCQkweDBjCiAjZGVmaW5lICBPWFlHRU5fU1BJX0NMT0NLXzE2MAkJMHgwMAkvKiBucyAqLwotI2RlZmluZSAgT1hZR0VOX1NQSV9DTE9DS18zMjAJCTB4NDAKLSNkZWZpbmUgIE9YWUdFTl9TUElfQ0xPQ0tfNjQwCQkweDgwCi0jZGVmaW5lICBPWFlHRU5fU1BJX0NMT0NLXzEyODAJCTB4YzAKKyNkZWZpbmUgIE9YWUdFTl9TUElfQ0xPQ0tfMzIwCQkweDA0CisjZGVmaW5lICBPWFlHRU5fU1BJX0NMT0NLXzY0MAkJMHgwOAorI2RlZmluZSAgT1hZR0VOX1NQSV9DTE9DS18xMjgwCQkweDBjCiAjZGVmaW5lICBPWFlHRU5fU1BJX0NPREVDX01BU0sJCTB4NzAJLyogMC4uNSAqLwogI2RlZmluZSAgT1hZR0VOX1NQSV9DT0RFQ19TSElGVAkJNAogI2RlZmluZSAgT1hZR0VOX1NQSV9DRU5fTUFTSwkJMHg4MApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi94b25hci5oIGIvc291bmQvcGNpL294eWdlbi94b25hci5oCmluZGV4IGIzNTM0M2IuLjA0MzRjMjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4veG9uYXIuaAorKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyLmgKQEAgLTI0LDYgKzI0LDggQEAKIHZvaWQgeG9uYXJfaW5pdF9jczUzeDEoc3RydWN0IG94eWdlbiAqY2hpcCk7CiB2b2lkIHhvbmFyX3NldF9jczUzeDFfcGFyYW1zKHN0cnVjdCBveHlnZW4gKmNoaXAsCiAJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKTsKKworI2RlZmluZSBYT05BUl9HUElPX0JJVF9JTlZFUlQJKDEgPDwgMTYpCiBpbnQgeG9uYXJfZ3Bpb19iaXRfc3dpdGNoX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCiAJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSk7CiBpbnQgeG9uYXJfZ3Bpb19iaXRfc3dpdGNoX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2NzNDN4eC5jIGIvc291bmQvcGNpL294eWdlbi94b25hcl9jczQzeHguYwppbmRleCBhYTI3YzMxLi45ZjcyZDQyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2NzNDN4eC5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfY3M0M3h4LmMKQEAgLTIyLDI5ICsyMiwyOCBAQAogICoKICAqIENNSTg3ODg6CiAgKgotICogScKyQyA8LT4gQ1M0Mzk4IChmcm9udCkKLSAqICAgICA8LT4gQ1M0MzYyQSAoc3Vycm91bmQsIGNlbnRlci9MRkUsIGJhY2spCisgKiAgIEnCskMgPC0+IENTNDM5OCAoYWRkciAxMDAxMTExKSAoZnJvbnQpCisgKiAgICAgICA8LT4gQ1M0MzYyQSAoYWRkciAwMDExMDAwKSAoc3Vycm91bmQsIGNlbnRlci9MRkUsIGJhY2spCiAgKgotICogR1BJIDAgPC0gZXh0ZXJuYWwgcG93ZXIgcHJlc2VudCAoRFggb25seSkKKyAqICAgR1BJIDAgPC0gZXh0ZXJuYWwgcG93ZXIgcHJlc2VudCAoRFggb25seSkKICAqCi0gKiBHUElPIDAgLT4gZW5hYmxlIG91dHB1dCB0byBzcGVha2VycwotICogR1BJTyAxIC0+IGVuYWJsZSBmcm9udCBwYW5lbCBJL08KLSAqIEdQSU8gMiAtPiBNMCBvZiBDUzUzNjEKLSAqIEdQSU8gMyAtPiBNMSBvZiBDUzUzNjEKLSAqIEdQSU8gOCAtPiByb3V0ZSBpbnB1dCBqYWNrIHRvIGxpbmUtaW4gKDApIG9yIG1pYy1pbiAoMSkKLSAqCi0gKiBDUzQzOTg6Ci0gKgotICogQUQwIDwtIDEKLSAqIEFEMSA8LSAxCi0gKgotICogQ1M0MzYyQToKLSAqCi0gKiBBRDAgPC0gMAorICogICBHUElPIDAgLT4gZW5hYmxlIG91dHB1dCB0byBzcGVha2VycworICogICBHUElPIDEgLT4gcm91dGUgb3V0cHV0IHRvIGZyb250IHBhbmVsCisgKiAgIEdQSU8gMiAtPiBNMCBvZiBDUzUzNjEKKyAqICAgR1BJTyAzIC0+IE0xIG9mIENTNTM2MQorICogICBHUElPIDYgLT4gPworICogICBHUElPIDcgLT4gPworICogICBHUElPIDggLT4gcm91dGUgaW5wdXQgamFjayB0byBsaW5lLWluICgwKSBvciBtaWMtaW4gKDEpCiAgKgogICogQ005NzgwOgogICoKLSAqIEdQTyAwIC0+IHJvdXRlIGxpbmUtaW4gKDApIG9yIEFDOTcgb3V0cHV0ICgxKSB0byBDUzUzNjEgaW5wdXQKKyAqICAgTElORV9PVVQgLT4gaW5wdXQgb2YgQURDCisgKgorICogICBBVVhfSU4gIDwtIGF1eAorICogICBNSUNfSU4gIDwtIG1pYworICogICBGTUlDX0lOIDwtIGZyb250IG1pYworICoKKyAqICAgR1BPIDAgLT4gcm91dGUgbGluZS1pbiAoMCkgb3IgQUM5NyBvdXRwdXQgKDEpIHRvIENTNTM2MSBpbnB1dAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTYzLDYgKzYyLDcgQEAKICNkZWZpbmUgR1BJX0VYVF9QT1dFUgkJMHgwMQogI2RlZmluZSBHUElPX0QxX09VVFBVVF9FTkFCTEUJMHgwMDAxCiAjZGVmaW5lIEdQSU9fRDFfRlJPTlRfUEFORUwJMHgwMDAyCisjZGVmaW5lIEdQSU9fRDFfTUFHSUMJCTB4MDBjMAogI2RlZmluZSBHUElPX0QxX0lOUFVUX1JPVVRFCTB4MDEwMAogCiAjZGVmaW5lIEkyQ19ERVZJQ0VfQ1M0Mzk4CTB4OWUJLyogMTAwMTEsIEFEMT0xLCBBRDA9MSwgL1c9MCAqLwpAQCAtMTY5LDEyICsxNjksMTIgQEAKIAljczQzeHhfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CiAKIAlveHlnZW5fc2V0X2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAotCQkJICBHUElPX0QxX0ZST05UX1BBTkVMIHwgR1BJT19EMV9JTlBVVF9ST1VURSk7CisJCQkgIEdQSU9fRDFfRlJPTlRfUEFORUwgfAorCQkJICBHUElPX0QxX01BR0lDIHwKKwkJCSAgR1BJT19EMV9JTlBVVF9ST1VURSk7CiAJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBLAogCQkJICAgIEdQSU9fRDFfRlJPTlRfUEFORUwgfCBHUElPX0QxX0lOUFVUX1JPVVRFKTsKIAotCW94eWdlbl9hYzk3X3NldF9iaXRzKGNoaXAsIDAsIENNOTc4MF9KQUNLLCBDTTk3ODBfRk1JQzJNSUMpOwotCiAJeG9uYXJfaW5pdF9jczUzeDEoY2hpcCk7CiAJeG9uYXJfZW5hYmxlX291dHB1dChjaGlwKTsKIApAQCAtMjg0LDcgKzI4NCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBmcm9udF9wYW5lbF9zd2l0Y2ggPSB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JLm5hbWUgPSAiRnJvbnQgUGFuZWwgU3dpdGNoIiwKKwkubmFtZSA9ICJGcm9udCBQYW5lbCBQbGF5YmFjayBTd2l0Y2giLAogCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKIAkuZ2V0ID0geG9uYXJfZ3Bpb19iaXRfc3dpdGNoX2dldCwKIAkucHV0ID0geG9uYXJfZ3Bpb19iaXRfc3dpdGNoX3B1dCwKQEAgLTI5OCwxMyArMjk4LDcgQEAKIAkJIkZhc3QgUm9sbC1vZmYiLCAiU2xvdyBSb2xsLW9mZiIKIAl9OwogCi0JaW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKLQlpbmZvLT5jb3VudCA9IDE7Ci0JaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDI7Ci0JaWYgKGluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSAyKQotCQlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSAxOwotCXN0cmNweShpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIG5hbWVzW2luZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwotCXJldHVybiAwOworCXJldHVybiBzbmRfY3RsX2VudW1faW5mbyhpbmZvLCAxLCAyLCBuYW1lcyk7CiB9CiAKIHN0YXRpYyBpbnQgcm9sbG9mZl9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLApAQCAtMzgwLDYgKzM3NCwzMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBkdW1wX2NzNDM2MmFfcmVnaXN0ZXJzKHN0cnVjdCB4b25hcl9jczQzeHggKmRhdGEsCisJCQkJICAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQoreworCXVuc2lnbmVkIGludCBpOworCisJc25kX2lwcmludGYoYnVmZmVyLCAiXG5DUzQzNjJBOiIpOworCWZvciAoaSA9IDE7IGkgPD0gMTQ7ICsraSkKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiICUwMngiLCBkYXRhLT5jczQzNjJhX3JlZ3NbaV0pOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfZDFfcmVnaXN0ZXJzKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHhvbmFyX2NzNDN4eCAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdW5zaWduZWQgaW50IGk7CisKKwlzbmRfaXByaW50ZihidWZmZXIsICJcbkNTNDM5ODogNz8iKTsKKwlmb3IgKGkgPSAyOyBpIDw9IDg7ICsraSkKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiICUwMngiLCBkYXRhLT5jczQzOThfcmVnc1tpXSk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKKwlkdW1wX2NzNDM2MmFfcmVnaXN0ZXJzKGRhdGEsIGJ1ZmZlcik7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX2QxID0gewogCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDEwMCIsCiAJLmNoaXAgPSAiQVYyMDAiLApAQCAtMzg4LDIyICs0MDYsMjYgQEAKIAkuY2xlYW51cCA9IHhvbmFyX2QxX2NsZWFudXAsCiAJLnN1c3BlbmQgPSB4b25hcl9kMV9zdXNwZW5kLAogCS5yZXN1bWUgPSB4b25hcl9kMV9yZXN1bWUsCi0JLmdldF9pMnNfbWNsayA9IG94eWdlbl9kZWZhdWx0X2kyc19tY2xrLAogCS5zZXRfZGFjX3BhcmFtcyA9IHNldF9jczQzeHhfcGFyYW1zLAogCS5zZXRfYWRjX3BhcmFtcyA9IHhvbmFyX3NldF9jczUzeDFfcGFyYW1zLAogCS51cGRhdGVfZGFjX3ZvbHVtZSA9IHVwZGF0ZV9jczQzeHhfdm9sdW1lLAogCS51cGRhdGVfZGFjX211dGUgPSB1cGRhdGVfY3M0M3h4X211dGUsCiAJLnVwZGF0ZV9jZW50ZXJfbGZlX21peCA9IHVwZGF0ZV9jczQzeHhfY2VudGVyX2xmZV9taXgsCiAJLmFjOTdfc3dpdGNoID0geG9uYXJfZDFfbGluZV9taWNfYWM5N19zd2l0Y2gsCisJLmR1bXBfcmVnaXN0ZXJzID0gZHVtcF9kMV9yZWdpc3RlcnMsCiAJLmRhY190bHYgPSBjczQzNjJhX2RiX3NjYWxlLAogCS5tb2RlbF9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHhvbmFyX2NzNDN4eCksCiAJLmRldmljZV9jb25maWcgPSBQTEFZQkFDS18wX1RPX0kyUyB8CiAJCQkgUExBWUJBQ0tfMV9UT19TUERJRiB8Ci0JCQkgQ0FQVFVSRV8wX0ZST01fSTJTXzIsCi0JLmRhY19jaGFubmVscyA9IDgsCisJCQkgQ0FQVFVSRV8wX0ZST01fSTJTXzIgfAorCQkJIEFDOTdfRk1JQ19TV0lUQ0gsCisJLmRhY19jaGFubmVsc19wY20gPSA4LAorCS5kYWNfY2hhbm5lbHNfbWl4ZXIgPSA4LAogCS5kYWNfdm9sdW1lX21pbiA9IDEyNyAtIDYwLAogCS5kYWNfdm9sdW1lX21heCA9IDEyNywKIAkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fMldJUkUsCisJLmRhY19tY2xrcyA9IE9YWUdFTl9NQ0xLUygyNTYsIDEyOCwgMTI4KSwKKwkuYWRjX21jbGtzID0gT1hZR0VOX01DTEtTKDI1NiwgMTI4LCAxMjgpLAogCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogCS5hZGNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfZGcuYyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfZGcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGRlMGI4Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL294eWdlbi94b25hcl9kZy5jCkBAIC0wLDAgKzEsNTcyIEBACisvKgorICogY2FyZCBkcml2ZXIgZm9yIHRoZSBYb25hciBERworICoKKyAqIENvcHlyaWdodCAoYykgQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CisgKgorICoKKyAqICBUaGlzIGRyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICoKKyAqICBUaGlzIGRyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGRyaXZlcjsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qCisgKiBYb25hciBERworICogLS0tLS0tLS0KKyAqCisgKiBDTUk4Nzg4OgorICoKKyAqICAgU1BJIDAgLT4gQ1M0MjQ1CisgKgorICogICBHUElPIDMgPC0gPworICogICBHUElPIDQgPC0gaGVhZHBob25lIGRldGVjdAorICogICBHUElPIDUgLT4gcm91dGUgaW5wdXQgamFjayB0byBsaW5lLWluICgwKSBvciBtaWMtaW4gKDEpCisgKiAgIEdQSU8gNiAtPiByb3V0ZSBpbnB1dCBqYWNrIHRvIGxpbmUtaW4gKDApIG9yIG1pYy1pbiAoMSkKKyAqICAgR1BJTyA3IC0+IGVuYWJsZSByZWFyIGhlYWRwaG9uZSBhbXAKKyAqICAgR1BJTyA4IC0+IGVuYWJsZSBvdXRwdXQgdG8gc3BlYWtlcnMKKyAqCisgKiBDUzQyNDU6CisgKgorICogICBpbnB1dCAxIDwtIGF1eAorICogICBpbnB1dCAyIDwtIGZyb250IG1pYworICogICBpbnB1dCA0IDwtIGxpbmUvbWljCisgKiAgIGF1eCBvdXQgLT4gZnJvbnQgcGFuZWwgaGVhZHBob25lcworICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5mby5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgIm94eWdlbi5oIgorI2luY2x1ZGUgInhvbmFyX2RnLmgiCisjaW5jbHVkZSAiY3M0MjQ1LmgiCisKKyNkZWZpbmUgR1BJT19NQUdJQwkJMHgwMDA4CisjZGVmaW5lIEdQSU9fSFBfREVURUNUCQkweDAwMTAKKyNkZWZpbmUgR1BJT19JTlBVVF9ST1VURQkweDAwNjAKKyNkZWZpbmUgR1BJT19IUF9SRUFSCQkweDAwODAKKyNkZWZpbmUgR1BJT19PVVRQVVRfRU5BQkxFCTB4MDEwMAorCitzdHJ1Y3QgZGcgeworCXVuc2lnbmVkIGludCBvdXRwdXRfc2VsOworCXM4IGlucHV0X3ZvbFs0XVsyXTsKKwl1bnNpZ25lZCBpbnQgaW5wdXRfc2VsOworCXU4IGhwX3ZvbF9hdHQ7CisJdTggY3M0MjQ1X3JlZ3NbMHgxMV07Cit9OworCitzdGF0aWMgdm9pZCBjczQyNDVfd3JpdGUoc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IHJlZywgdTggdmFsdWUpCit7CisJc3RydWN0IGRnICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCW94eWdlbl93cml0ZV9zcGkoY2hpcCwgT1hZR0VOX1NQSV9UUklHR0VSIHwKKwkJCSBPWFlHRU5fU1BJX0RBVEFfTEVOR1RIXzMgfAorCQkJIE9YWUdFTl9TUElfQ0xPQ0tfMTI4MCB8CisJCQkgKDAgPDwgT1hZR0VOX1NQSV9DT0RFQ19TSElGVCkgfAorCQkJIE9YWUdFTl9TUElfQ0VOX0xBVENIX0NMT0NLX0hJLAorCQkJIENTNDI0NV9TUElfQUREUkVTUyB8CisJCQkgQ1M0MjQ1X1NQSV9XUklURSB8CisJCQkgKHZhbHVlIDw8IDgpIHwgcmVnKTsKKwlkYXRhLT5jczQyNDVfcmVnc1tyZWddID0gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIGNzNDI0NV93cml0ZV9jYWNoZWQoc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IHJlZywgdTggdmFsdWUpCit7CisJc3RydWN0IGRnICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCWlmICh2YWx1ZSAhPSBkYXRhLT5jczQyNDVfcmVnc1tyZWddKQorCQljczQyNDVfd3JpdGUoY2hpcCwgcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNzNDI0NV9yZWdpc3RlcnNfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXN0cnVjdCBkZyAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwljczQyNDVfd3JpdGUoY2hpcCwgQ1M0MjQ1X1BPV0VSX0NUUkwsIENTNDI0NV9QRE4pOworCWNzNDI0NV93cml0ZShjaGlwLCBDUzQyNDVfREFDX0NUUkxfMSwKKwkJICAgICBkYXRhLT5jczQyNDVfcmVnc1tDUzQyNDVfREFDX0NUUkxfMV0pOworCWNzNDI0NV93cml0ZShjaGlwLCBDUzQyNDVfQURDX0NUUkwsCisJCSAgICAgZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1X0FEQ19DVFJMXSk7CisJY3M0MjQ1X3dyaXRlKGNoaXAsIENTNDI0NV9TSUdOQUxfU0VMLAorCQkgICAgIGRhdGEtPmNzNDI0NV9yZWdzW0NTNDI0NV9TSUdOQUxfU0VMXSk7CisJY3M0MjQ1X3dyaXRlKGNoaXAsIENTNDI0NV9QR0FfQl9DVFJMLAorCQkgICAgIGRhdGEtPmNzNDI0NV9yZWdzW0NTNDI0NV9QR0FfQl9DVFJMXSk7CisJY3M0MjQ1X3dyaXRlKGNoaXAsIENTNDI0NV9QR0FfQV9DVFJMLAorCQkgICAgIGRhdGEtPmNzNDI0NV9yZWdzW0NTNDI0NV9QR0FfQV9DVFJMXSk7CisJY3M0MjQ1X3dyaXRlKGNoaXAsIENTNDI0NV9BTkFMT0dfSU4sCisJCSAgICAgZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1X0FOQUxPR19JTl0pOworCWNzNDI0NV93cml0ZShjaGlwLCBDUzQyNDVfREFDX0FfQ1RSTCwKKwkJICAgICBkYXRhLT5jczQyNDVfcmVnc1tDUzQyNDVfREFDX0FfQ1RSTF0pOworCWNzNDI0NV93cml0ZShjaGlwLCBDUzQyNDVfREFDX0JfQ1RSTCwKKwkJICAgICBkYXRhLT5jczQyNDVfcmVnc1tDUzQyNDVfREFDX0JfQ1RSTF0pOworCWNzNDI0NV93cml0ZShjaGlwLCBDUzQyNDVfREFDX0NUUkxfMiwKKwkJICAgICBDUzQyNDVfREFDX1NPRlQgfCBDUzQyNDVfREFDX1pFUk8gfCBDUzQyNDVfSU5WRVJUX0RBQyk7CisJY3M0MjQ1X3dyaXRlKGNoaXAsIENTNDI0NV9JTlRfTUFTSywgMCk7CisJY3M0MjQ1X3dyaXRlKGNoaXAsIENTNDI0NV9QT1dFUl9DVFJMLCAwKTsKK30KKworc3RhdGljIHZvaWQgY3M0MjQ1X2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgZGcgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1X0RBQ19DVFJMXzFdID0KKwkJQ1M0MjQ1X0RBQ19GTV9TSU5HTEUgfCBDUzQyNDVfREFDX0RJRl9MSlVTVDsKKwlkYXRhLT5jczQyNDVfcmVnc1tDUzQyNDVfQURDX0NUUkxdID0KKwkJQ1M0MjQ1X0FEQ19GTV9TSU5HTEUgfCBDUzQyNDVfQURDX0RJRl9MSlVTVDsKKwlkYXRhLT5jczQyNDVfcmVnc1tDUzQyNDVfU0lHTkFMX1NFTF0gPQorCQlDUzQyNDVfQV9PVVRfU0VMX0hJWiB8IENTNDI0NV9BU1lOQ0g7CisJZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1X1BHQV9CX0NUUkxdID0gMDsKKwlkYXRhLT5jczQyNDVfcmVnc1tDUzQyNDVfUEdBX0FfQ1RSTF0gPSAwOworCWRhdGEtPmNzNDI0NV9yZWdzW0NTNDI0NV9BTkFMT0dfSU5dID0KKwkJQ1M0MjQ1X1BHQV9TT0ZUIHwgQ1M0MjQ1X1BHQV9aRVJPIHwgQ1M0MjQ1X1NFTF9JTlBVVF80OworCWRhdGEtPmNzNDI0NV9yZWdzW0NTNDI0NV9EQUNfQV9DVFJMXSA9IDA7CisJZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1X0RBQ19CX0NUUkxdID0gMDsKKwljczQyNDVfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CisJc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIkNTNDI0NSIpOworfQorCitzdGF0aWMgdm9pZCBkZ19vdXRwdXRfZW5hYmxlKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJbXNsZWVwKDI1MDApOworCW94eWdlbl9zZXRfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsIEdQSU9fT1VUUFVUX0VOQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkIGRnX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgZGcgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJZGF0YS0+b3V0cHV0X3NlbCA9IDA7CisJZGF0YS0+aW5wdXRfc2VsID0gMzsKKwlkYXRhLT5ocF92b2xfYXR0ID0gMiAqIDE2OworCisJY3M0MjQ1X2luaXQoY2hpcCk7CisKKwlveHlnZW5fY2xlYXJfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0NPTlRST0wsCisJCQkgICAgR1BJT19NQUdJQyB8IEdQSU9fSFBfREVURUNUKTsKKwlveHlnZW5fc2V0X2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAorCQkJICBHUElPX0lOUFVUX1JPVVRFIHwgR1BJT19IUF9SRUFSIHwgR1BJT19PVVRQVVRfRU5BQkxFKTsKKwlveHlnZW5fY2xlYXJfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsCisJCQkgICAgR1BJT19JTlBVVF9ST1VURSB8IEdQSU9fSFBfUkVBUik7CisJZGdfb3V0cHV0X2VuYWJsZShjaGlwKTsKK30KKworc3RhdGljIHZvaWQgZGdfY2xlYW51cChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgR1BJT19PVVRQVVRfRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgZGdfc3VzcGVuZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWRnX2NsZWFudXAoY2hpcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRnX3Jlc3VtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWNzNDI0NV9yZWdpc3RlcnNfaW5pdChjaGlwKTsKKwlkZ19vdXRwdXRfZW5hYmxlKGNoaXApOworfQorCitzdGF0aWMgdm9pZCBzZXRfY3M0MjQ1X2RhY19wYXJhbXMoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBkZyAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdTggdmFsdWU7CisKKwl2YWx1ZSA9IGRhdGEtPmNzNDI0NV9yZWdzW0NTNDI0NV9EQUNfQ1RSTF8xXSAmIH5DUzQyNDVfREFDX0ZNX01BU0s7CisJaWYgKHBhcmFtc19yYXRlKHBhcmFtcykgPD0gNTAwMDApCisJCXZhbHVlIHw9IENTNDI0NV9EQUNfRk1fU0lOR0xFOworCWVsc2UgaWYgKHBhcmFtc19yYXRlKHBhcmFtcykgPD0gMTAwMDAwKQorCQl2YWx1ZSB8PSBDUzQyNDVfREFDX0ZNX0RPVUJMRTsKKwllbHNlCisJCXZhbHVlIHw9IENTNDI0NV9EQUNfRk1fUVVBRDsKKwljczQyNDVfd3JpdGVfY2FjaGVkKGNoaXAsIENTNDI0NV9EQUNfQ1RSTF8xLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jczQyNDVfYWRjX3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGRnICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1OCB2YWx1ZTsKKworCXZhbHVlID0gZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1X0FEQ19DVFJMXSAmIH5DUzQyNDVfQURDX0ZNX01BU0s7CisJaWYgKHBhcmFtc19yYXRlKHBhcmFtcykgPD0gNTAwMDApCisJCXZhbHVlIHw9IENTNDI0NV9BRENfRk1fU0lOR0xFOworCWVsc2UgaWYgKHBhcmFtc19yYXRlKHBhcmFtcykgPD0gMTAwMDAwKQorCQl2YWx1ZSB8PSBDUzQyNDVfQURDX0ZNX0RPVUJMRTsKKwllbHNlCisJCXZhbHVlIHw9IENTNDI0NV9BRENfRk1fUVVBRDsKKwljczQyNDVfd3JpdGVfY2FjaGVkKGNoaXAsIENTNDI0NV9BRENfQ1RSTCwgdmFsdWUpOworfQorCitzdGF0aWMgaW50IG91dHB1dF9zd2l0Y2hfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzWzNdID0geworCQkiU3BlYWtlcnMiLCAiSGVhZHBob25lcyIsICJGUCBIZWFkcGhvbmVzIgorCX07CisKKwlyZXR1cm4gc25kX2N0bF9lbnVtX2luZm8oaW5mbywgMSwgMywgbmFtZXMpOworfQorCitzdGF0aWMgaW50IG91dHB1dF9zd2l0Y2hfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkZyAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGRhdGEtPm91dHB1dF9zZWw7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3V0cHV0X3N3aXRjaF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRnICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1OCByZWc7CisJaW50IGNoYW5nZWQ7CisKKwlpZiAodmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCWNoYW5nZWQgPSB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICE9IGRhdGEtPm91dHB1dF9zZWw7CisJaWYgKGNoYW5nZWQpIHsKKwkJZGF0YS0+b3V0cHV0X3NlbCA9IHZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CisKKwkJcmVnID0gZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1X1NJR05BTF9TRUxdICYKKwkJCQkJCX5DUzQyNDVfQV9PVVRfU0VMX01BU0s7CisJCXJlZyB8PSBkYXRhLT5vdXRwdXRfc2VsID09IDIgPworCQkJCUNTNDI0NV9BX09VVF9TRUxfREFDIDogQ1M0MjQ1X0FfT1VUX1NFTF9ISVo7CisJCWNzNDI0NV93cml0ZV9jYWNoZWQoY2hpcCwgQ1M0MjQ1X1NJR05BTF9TRUwsIHJlZyk7CisKKwkJY3M0MjQ1X3dyaXRlX2NhY2hlZChjaGlwLCBDUzQyNDVfREFDX0FfQ1RSTCwKKwkJCQkgICAgZGF0YS0+b3V0cHV0X3NlbCA/IGRhdGEtPmhwX3ZvbF9hdHQgOiAwKTsKKwkJY3M0MjQ1X3dyaXRlX2NhY2hlZChjaGlwLCBDUzQyNDVfREFDX0JfQ1RSTCwKKwkJCQkgICAgZGF0YS0+b3V0cHV0X3NlbCA/IGRhdGEtPmhwX3ZvbF9hdHQgOiAwKTsKKworCQlveHlnZW5fd3JpdGUxNl9tYXNrZWQoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwKKwkJCQkgICAgICBkYXRhLT5vdXRwdXRfc2VsID09IDEgPyBHUElPX0hQX1JFQVIgOiAwLAorCQkJCSAgICAgIEdQSU9fSFBfUkVBUik7CisJfQorCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgaW50IGhwX3ZvbHVtZV9vZmZzZXRfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbM10gPSB7CisJCSI8IDY0IG9obXMiLCAiNjQtMTUwIG9obXMiLCAiMTUwLTMwMCBvaG1zIgorCX07CisKKwlyZXR1cm4gc25kX2N0bF9lbnVtX2luZm8oaW5mbywgMSwgMywgbmFtZXMpOworfQorCitzdGF0aWMgaW50IGhwX3ZvbHVtZV9vZmZzZXRfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRnICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKKwlpZiAoZGF0YS0+aHBfdm9sX2F0dCA+IDIgKiA3KQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMDsKKwllbHNlIGlmIChkYXRhLT5ocF92b2xfYXR0ID4gMCkKKwkJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDE7CisJZWxzZQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMjsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBocF92b2x1bWVfb2Zmc2V0X3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RhdGljIGNvbnN0IHM4IGF0dHNbM10gPSB7IDIgKiAxNiwgMiAqIDcsIDAgfTsKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRnICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwlzOCBhdHQ7CisJaW50IGNoYW5nZWQ7CisKKwlpZiAodmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCWF0dCA9IGF0dHNbdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXV07CisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCWNoYW5nZWQgPSBhdHQgIT0gZGF0YS0+aHBfdm9sX2F0dDsKKwlpZiAoY2hhbmdlZCkgeworCQlkYXRhLT5ocF92b2xfYXR0ID0gYXR0OworCQlpZiAoZGF0YS0+b3V0cHV0X3NlbCkgeworCQkJY3M0MjQ1X3dyaXRlX2NhY2hlZChjaGlwLCBDUzQyNDVfREFDX0FfQ1RSTCwgYXR0KTsKKwkJCWNzNDI0NV93cml0ZV9jYWNoZWQoY2hpcCwgQ1M0MjQ1X0RBQ19CX0NUUkwsIGF0dCk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgaW5wdXRfdm9sX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCit7CisJaW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwlpbmZvLT5jb3VudCA9IDI7CisJaW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAyICogLTEyOworCWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMiAqIDEyOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlucHV0X3ZvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGcgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBpZHggPSBjdGwtPnByaXZhdGVfdmFsdWU7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBkYXRhLT5pbnB1dF92b2xbaWR4XVswXTsKKwl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IGRhdGEtPmlucHV0X3ZvbFtpZHhdWzFdOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlucHV0X3ZvbF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGcgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBpZHggPSBjdGwtPnByaXZhdGVfdmFsdWU7CisJaW50IGNoYW5nZWQgPSAwOworCisJaWYgKHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIDwgMiAqIC0xMiB8fAorCSAgICB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA+IDIgKiAxMiB8fAorCSAgICB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA8IDIgKiAtMTIgfHwKKwkgICAgdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPiAyICogMTIpCisJCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKKwljaGFuZ2VkID0gZGF0YS0+aW5wdXRfdm9sW2lkeF1bMF0gIT0gdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfHwKKwkJICBkYXRhLT5pbnB1dF92b2xbaWR4XVsxXSAhPSB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXTsKKwlpZiAoY2hhbmdlZCkgeworCQlkYXRhLT5pbnB1dF92b2xbaWR4XVswXSA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCQlkYXRhLT5pbnB1dF92b2xbaWR4XVsxXSA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdOworCQlpZiAoaWR4ID09IGRhdGEtPmlucHV0X3NlbCkgeworCQkJY3M0MjQ1X3dyaXRlX2NhY2hlZChjaGlwLCBDUzQyNDVfUEdBX0FfQ1RSTCwKKwkJCQkJICAgIGRhdGEtPmlucHV0X3ZvbFtpZHhdWzBdKTsKKwkJCWNzNDI0NV93cml0ZV9jYWNoZWQoY2hpcCwgQ1M0MjQ1X1BHQV9CX0NUUkwsCisJCQkJCSAgICBkYXRhLT5pbnB1dF92b2xbaWR4XVsxXSk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBERUNMQVJFX1RMVl9EQl9TQ0FMRShjczQyNDVfcGdhX2RiX3NjYWxlLCAtMTIwMCwgNTAsIDApOworCitzdGF0aWMgaW50IGlucHV0X3NlbF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1s0XSA9IHsKKwkJIk1pYyIsICJBdXgiLCAiRnJvbnQgTWljIiwgIkxpbmUiCisJfTsKKworCXJldHVybiBzbmRfY3RsX2VudW1faW5mbyhpbmZvLCAxLCA0LCBuYW1lcyk7Cit9CisKK3N0YXRpYyBpbnQgaW5wdXRfc2VsX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkZyAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGRhdGEtPmlucHV0X3NlbDsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbnB1dF9zZWxfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdGF0aWMgY29uc3QgdTggc2VsX3ZhbHVlc1s0XSA9IHsKKwkJQ1M0MjQ1X1NFTF9NSUMsCisJCUNTNDI0NV9TRUxfSU5QVVRfMSwKKwkJQ1M0MjQ1X1NFTF9JTlBVVF8yLAorCQlDUzQyNDVfU0VMX0lOUFVUXzQKKwl9OworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGcgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCWludCBjaGFuZ2VkOworCisJaWYgKHZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKKwljaGFuZ2VkID0gdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSAhPSBkYXRhLT5pbnB1dF9zZWw7CisJaWYgKGNoYW5nZWQpIHsKKwkJZGF0YS0+aW5wdXRfc2VsID0gdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKworCQljczQyNDVfd3JpdGUoY2hpcCwgQ1M0MjQ1X0FOQUxPR19JTiwKKwkJCSAgICAgKGRhdGEtPmNzNDI0NV9yZWdzW0NTNDI0NV9BTkFMT0dfSU5dICYKKwkJCQkJCQl+Q1M0MjQ1X1NFTF9NQVNLKSB8CisJCQkgICAgIHNlbF92YWx1ZXNbZGF0YS0+aW5wdXRfc2VsXSk7CisKKwkJY3M0MjQ1X3dyaXRlX2NhY2hlZChjaGlwLCBDUzQyNDVfUEdBX0FfQ1RSTCwKKwkJCQkgICAgZGF0YS0+aW5wdXRfdm9sW2RhdGEtPmlucHV0X3NlbF1bMF0pOworCQljczQyNDVfd3JpdGVfY2FjaGVkKGNoaXAsIENTNDI0NV9QR0FfQl9DVFJMLAorCQkJCSAgICBkYXRhLT5pbnB1dF92b2xbZGF0YS0+aW5wdXRfc2VsXVsxXSk7CisKKwkJb3h5Z2VuX3dyaXRlMTZfbWFza2VkKGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsCisJCQkJICAgICAgZGF0YS0+aW5wdXRfc2VsID8gMCA6IEdQSU9fSU5QVVRfUk9VVEUsCisJCQkJICAgICAgR1BJT19JTlBVVF9ST1VURSk7CisJfQorCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgaW50IGhwZl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1syXSA9IHsgIkFjdGl2ZSIsICJGcm96ZW4iIH07CisKKwlyZXR1cm4gc25kX2N0bF9lbnVtX2luZm8oaW5mbywgMSwgMiwgbmFtZXMpOworfQorCitzdGF0aWMgaW50IGhwZl9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRnICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPQorCQkhIShkYXRhLT5jczQyNDVfcmVnc1tDUzQyNDVfQURDX0NUUkxdICYgQ1M0MjQ1X0hQRl9GUkVFWkUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhwZl9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRnICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1OCByZWc7CisJaW50IGNoYW5nZWQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJcmVnID0gZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1X0FEQ19DVFJMXSAmIH5DUzQyNDVfSFBGX0ZSRUVaRTsKKwlpZiAodmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSkKKwkJcmVnIHw9IENTNDI0NV9IUEZfRlJFRVpFOworCWNoYW5nZWQgPSByZWcgIT0gZGF0YS0+Y3M0MjQ1X3JlZ3NbQ1M0MjQ1X0FEQ19DVFJMXTsKKwlpZiAoY2hhbmdlZCkKKwkJY3M0MjQ1X3dyaXRlKGNoaXAsIENTNDI0NV9BRENfQ1RSTCwgcmVnKTsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworI2RlZmluZSBJTlBVVF9WT0xVTUUoeG5hbWUsIGluZGV4KSB7IFwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAorCS5uYW1lID0geG5hbWUsIFwKKwkuaW5mbyA9IGlucHV0X3ZvbF9pbmZvLCBcCisJLmdldCA9IGlucHV0X3ZvbF9nZXQsIFwKKwkucHV0ID0gaW5wdXRfdm9sX3B1dCwgXAorCS50bHYgPSB7IC5wID0gY3M0MjQ1X3BnYV9kYl9zY2FsZSB9LCBcCisJLnByaXZhdGVfdmFsdWUgPSBpbmRleCwgXAorfQorc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRnX2NvbnRyb2xzW10gPSB7CisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQW5hbG9nIE91dHB1dCBQbGF5YmFjayBFbnVtIiwKKwkJLmluZm8gPSBvdXRwdXRfc3dpdGNoX2luZm8sCisJCS5nZXQgPSBvdXRwdXRfc3dpdGNoX2dldCwKKwkJLnB1dCA9IG91dHB1dF9zd2l0Y2hfcHV0LAorCX0sCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiSGVhZHBob25lcyBJbXBlZGFuY2UgUGxheWJhY2sgRW51bSIsCisJCS5pbmZvID0gaHBfdm9sdW1lX29mZnNldF9pbmZvLAorCQkuZ2V0ID0gaHBfdm9sdW1lX29mZnNldF9nZXQsCisJCS5wdXQgPSBocF92b2x1bWVfb2Zmc2V0X3B1dCwKKwl9LAorCUlOUFVUX1ZPTFVNRSgiTWljIENhcHR1cmUgVm9sdW1lIiwgMCksCisJSU5QVVRfVk9MVU1FKCJBdXggQ2FwdHVyZSBWb2x1bWUiLCAxKSwKKwlJTlBVVF9WT0xVTUUoIkZyb250IE1pYyBDYXB0dXJlIFZvbHVtZSIsIDIpLAorCUlOUFVUX1ZPTFVNRSgiTGluZSBDYXB0dXJlIFZvbHVtZSIsIDMpLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKKwkJLmluZm8gPSBpbnB1dF9zZWxfaW5mbywKKwkJLmdldCA9IGlucHV0X3NlbF9nZXQsCisJCS5wdXQgPSBpbnB1dF9zZWxfcHV0LAorCX0sCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQURDIEhpZ2gtcGFzcyBGaWx0ZXIgQ2FwdHVyZSBFbnVtIiwKKwkJLmluZm8gPSBocGZfaW5mbywKKwkJLmdldCA9IGhwZl9nZXQsCisJCS5wdXQgPSBocGZfcHV0LAorCX0sCit9OworCitzdGF0aWMgaW50IGRnX2NvbnRyb2xfZmlsdGVyKHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICp0ZW1wbGF0ZSkKK3sKKwlpZiAoIXN0cm5jbXAodGVtcGxhdGUtPm5hbWUsICJNYXN0ZXIgUGxheWJhY2sgIiwgMTYpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZ19taXhlcl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVycjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRnX2NvbnRyb2xzKTsgKytpKSB7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsCisJCQkJICBzbmRfY3RsX25ldzEoJmRnX2NvbnRyb2xzW2ldLCBjaGlwKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfY3M0MjQ1X3JlZ2lzdGVycyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQoreworCXN0cnVjdCBkZyAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdW5zaWduZWQgaW50IGk7CisKKwlzbmRfaXByaW50ZihidWZmZXIsICJcbkNTNDI0NToiKTsKKwlmb3IgKGkgPSAxOyBpIDw9IDB4MTA7ICsraSkKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiICUwMngiLCBkYXRhLT5jczQyNDVfcmVnc1tpXSk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKK30KKworc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9kZyA9IHsKKwkuc2hvcnRuYW1lID0gIlhvbmFyIERHIiwKKwkubG9uZ25hbWUgPSAiQy1NZWRpYSBPeHlnZW4gSEQgQXVkaW8iLAorCS5jaGlwID0gIkNNSTg3ODYiLAorCS5pbml0ID0gZGdfaW5pdCwKKwkuY29udHJvbF9maWx0ZXIgPSBkZ19jb250cm9sX2ZpbHRlciwKKwkubWl4ZXJfaW5pdCA9IGRnX21peGVyX2luaXQsCisJLmNsZWFudXAgPSBkZ19jbGVhbnVwLAorCS5zdXNwZW5kID0gZGdfc3VzcGVuZCwKKwkucmVzdW1lID0gZGdfcmVzdW1lLAorCS5zZXRfZGFjX3BhcmFtcyA9IHNldF9jczQyNDVfZGFjX3BhcmFtcywKKwkuc2V0X2FkY19wYXJhbXMgPSBzZXRfY3M0MjQ1X2FkY19wYXJhbXMsCisJLmR1bXBfcmVnaXN0ZXJzID0gZHVtcF9jczQyNDVfcmVnaXN0ZXJzLAorCS5tb2RlbF9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGRnKSwKKwkuZGV2aWNlX2NvbmZpZyA9IFBMQVlCQUNLXzBfVE9fSTJTIHwKKwkJCSBQTEFZQkFDS18xX1RPX1NQRElGIHwKKwkJCSBDQVBUVVJFXzBfRlJPTV9JMlNfMiwKKwkuZGFjX2NoYW5uZWxzX3BjbSA9IDYsCisJLmRhY19jaGFubmVsc19taXhlciA9IDAsCisJLmZ1bmN0aW9uX2ZsYWdzID0gT1hZR0VOX0ZVTkNUSU9OX1NQSSwKKwkuZGFjX21jbGtzID0gT1hZR0VOX01DTEtTKDI1NiwgMTI4LCAxMjgpLAorCS5hZGNfbWNsa3MgPSBPWFlHRU5fTUNMS1MoMjU2LCAxMjgsIDEyOCksCisJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCisJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCit9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi94b25hcl9kZy5oIGIvc291bmQvcGNpL294eWdlbi94b25hcl9kZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ODhkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2RnLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIFhPTkFSX0RHX0hfSU5DTFVERUQKKyNkZWZpbmUgWE9OQVJfREdfSF9JTkNMVURFRAorCisjaW5jbHVkZSAib3h5Z2VuLmgiCisKK2V4dGVybiBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX2RnOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfaGRtaS5jIGIvc291bmQvcGNpL294eWdlbi94b25hcl9oZG1pLmMKaW5kZXggYjEyZGIxZi4uMTM2ZGFjNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi94b25hcl9oZG1pLmMKKysrIGIvc291bmQvcGNpL294eWdlbi94b25hcl9oZG1pLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogaGVscGVyIGZ1bmN0aW9ucyBmb3IgSERNSSBtb2RlbHMgKFhvbmFyIEhEQVYxLjMpCisgKiBoZWxwZXIgZnVuY3Rpb25zIGZvciBIRE1JIG1vZGVscyAoWG9uYXIgSERBVjEuMy9IREFWMS4zIFNsaW0pCiAgKgogICogQ29weXJpZ2h0IChjKSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KICAqCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2xpYi5jIGIvc291bmQvcGNpL294eWdlbi94b25hcl9saWIuYwppbmRleCBiM2ZmNzEzLi4wZWJlN2Y1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2xpYi5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfbGliLmMKQEAgLTEwNCw5ICsxMDQsMTAgQEAKIHsKIAlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CiAJdTE2IGJpdCA9IGN0bC0+cHJpdmF0ZV92YWx1ZTsKKwlib29sIGludmVydCA9IGN0bC0+cHJpdmF0ZV92YWx1ZSAmIFhPTkFSX0dQSU9fQklUX0lOVkVSVDsKIAogCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0KLQkJISEob3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKSAmIGJpdCk7CisJCSEhKG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSkgJiBiaXQpIF4gaW52ZXJ0OwogCXJldHVybiAwOwogfQogCkBAIC0xMTUsMTIgKzExNiwxMyBAQAogewogCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKIAl1MTYgYml0ID0gY3RsLT5wcml2YXRlX3ZhbHVlOworCWJvb2wgaW52ZXJ0ID0gY3RsLT5wcml2YXRlX3ZhbHVlICYgWE9OQVJfR1BJT19CSVRfSU5WRVJUOwogCXUxNiBvbGRfYml0cywgbmV3X2JpdHM7CiAJaW50IGNoYW5nZWQ7CiAKIAlzcGluX2xvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CiAJb2xkX2JpdHMgPSBveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEpOwotCWlmICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKKwlpZiAoISF2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSBeIGludmVydCkKIAkJbmV3X2JpdHMgPSBvbGRfYml0cyB8IGJpdDsKIAllbHNlCiAJCW5ld19iaXRzID0gb2xkX2JpdHMgJiB+Yml0OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi94b25hcl9wY20xNzl4LmMgYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX3BjbTE3OXguYwppbmRleCBkNDkxZmQ2Li41NGNhZDM4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX3BjbTE3OXguYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX3BjbTE3OXguYwpAQCAtMjIsMjAgKzIyLDI2IEBACiAgKgogICogQ01JODc4ODoKICAqCi0gKiBTUEkgMCAtPiAxc3QgUENNMTc5NiAoZnJvbnQpCi0gKiBTUEkgMSAtPiAybmQgUENNMTc5NiAoc3Vycm91bmQpCi0gKiBTUEkgMiAtPiAzcmQgUENNMTc5NiAoY2VudGVyL0xGRSkKLSAqIFNQSSA0IC0+IDR0aCBQQ00xNzk2IChiYWNrKQorICogICBTUEkgMCAtPiAxc3QgUENNMTc5NiAoZnJvbnQpCisgKiAgIFNQSSAxIC0+IDJuZCBQQ00xNzk2IChzdXJyb3VuZCkKKyAqICAgU1BJIDIgLT4gM3JkIFBDTTE3OTYgKGNlbnRlci9MRkUpCisgKiAgIFNQSSA0IC0+IDR0aCBQQ00xNzk2IChiYWNrKQogICoKLSAqIEdQSU8gMiAtPiBNMCBvZiBDUzUzODEKLSAqIEdQSU8gMyAtPiBNMSBvZiBDUzUzODEKLSAqIEdQSU8gNSA8LSBleHRlcm5hbCBwb3dlciBwcmVzZW50IChEMlggb25seSkKLSAqIEdQSU8gNyAtPiBBTFQKLSAqIEdQSU8gOCAtPiBlbmFibGUgb3V0cHV0IHRvIHNwZWFrZXJzCisgKiAgIEdQSU8gMiAtPiBNMCBvZiBDUzUzODEKKyAqICAgR1BJTyAzIC0+IE0xIG9mIENTNTM4MQorICogICBHUElPIDUgPC0gZXh0ZXJuYWwgcG93ZXIgcHJlc2VudCAoRDJYIG9ubHkpCisgKiAgIEdQSU8gNyAtPiBBTFQKKyAqICAgR1BJTyA4IC0+IGVuYWJsZSBvdXRwdXQgdG8gc3BlYWtlcnMKICAqCiAgKiBDTTk3ODA6CiAgKgotICogR1BPIDAgLT4gcm91dGUgbGluZS1pbiAoMCkgb3IgQUM5NyBvdXRwdXQgKDEpIHRvIENTNTM4MSBpbnB1dAorICogICBMSU5FX09VVCAtPiBpbnB1dCBvZiBBREMKKyAqCisgKiAgIEFVWF9JTiAgIDwtIGF1eAorICogICBWSURFT19JTiA8LSBDRAorICogICBGTUlDX0lOICA8LSBtaWMKKyAqCisgKiAgIEdQTyAwIC0+IHJvdXRlIGxpbmUtaW4gKDApIG9yIEFDOTcgb3V0cHV0ICgxKSB0byBDUzUzODEgaW5wdXQKICAqLwogCiAvKgpAQCAtNDQsNTIgKzUwLDUzIEBACiAgKgogICogQ01JODc4ODoKICAqCi0gKiBJwrJDIDwtPiBQQ00xNzk2IChmcm9udCkKKyAqICAgScKyQyA8LT4gUENNMTc5NiAoYWRkciAxMDAxMTAwKSAoZnJvbnQpCiAgKgotICogR1BJIDAgPC0gZXh0ZXJuYWwgcG93ZXIgcHJlc2VudAorICogICBHUEkgMCA8LSBleHRlcm5hbCBwb3dlciBwcmVzZW50CiAgKgotICogR1BJTyAwIC0+IGVuYWJsZSBvdXRwdXQgdG8gc3BlYWtlcnMKLSAqIEdQSU8gMiAtPiBNMCBvZiBDUzUzODEKLSAqIEdQSU8gMyAtPiBNMSBvZiBDUzUzODEKLSAqIEdQSU8gOCAtPiByb3V0ZSBpbnB1dCBqYWNrIHRvIGxpbmUtaW4gKDApIG9yIG1pYy1pbiAoMSkKKyAqICAgR1BJTyAwIC0+IGVuYWJsZSBIRE1JICgwKSBvciBzcGVha2VyICgxKSBvdXRwdXQKKyAqICAgR1BJTyAyIC0+IE0wIG9mIENTNTM4MQorICogICBHUElPIDMgLT4gTTEgb2YgQ1M1MzgxCisgKiAgIEdQSU8gNCA8LSBkYXVnaHRlcmJvYXJkIGRldGVjdGlvbgorICogICBHUElPIDUgPC0gZGF1Z2h0ZXJib2FyZCBkZXRlY3Rpb24KKyAqICAgR1BJTyA2IC0+ID8KKyAqICAgR1BJTyA3IC0+ID8KKyAqICAgR1BJTyA4IC0+IHJvdXRlIGlucHV0IGphY2sgdG8gbGluZS1pbiAoMCkgb3IgbWljLWluICgxKQogICoKLSAqIFRYRCAtPiBIRE1JIGNvbnRyb2xsZXIKLSAqIFJYRCA8LSBIRE1JIGNvbnRyb2xsZXIKLSAqCi0gKiBQQ00xNzk2IGZyb250OiBBRDEsMCA8LSAwLDAKKyAqICAgVUFSVCA8LT4gSERNSSBjb250cm9sbGVyCiAgKgogICogQ005NzgwOgogICoKLSAqIEdQTyAwIC0+IHJvdXRlIGxpbmUtaW4gKDApIG9yIEFDOTcgb3V0cHV0ICgxKSB0byBDUzUzODEgaW5wdXQKKyAqICAgTElORV9PVVQgLT4gaW5wdXQgb2YgQURDCisgKgorICogICBBVVhfSU4gPC0gYXV4CisgKiAgIENEX0lOICA8LSBDRAorICogICBNSUNfSU4gPC0gbWljCisgKgorICogICBHUE8gMCAtPiByb3V0ZSBsaW5lLWluICgwKSBvciBBQzk3IG91dHB1dCAoMSkgdG8gQ1M1MzgxIGlucHV0CiAgKgogICogbm8gZGF1Z2h0ZXJib2FyZAogICogLS0tLS0tLS0tLS0tLS0tLQogICoKLSAqIEdQSU8gNCA8LSAxCisgKiAgIEdQSU8gNCA8LSAxCiAgKgogICogSDYgZGF1Z2h0ZXJib2FyZAogICogLS0tLS0tLS0tLS0tLS0tLQogICoKLSAqIEdQSU8gNCA8LSAwCi0gKiBHUElPIDUgPC0gMAorICogICBHUElPIDQgPC0gMAorICogICBHUElPIDUgPC0gMAogICoKLSAqIEnCskMgPC0+IFBDTTE3OTYgKHN1cnJvdW5kKQotICogICAgIDwtPiBQQ00xNzk2IChjZW50ZXIvTEZFKQotICogICAgIDwtPiBQQ00xNzk2IChiYWNrKQotICoKLSAqIFBDTTE3OTYgc3Vycm91bmQ6ICAgQUQxLDAgPC0gMCwxCi0gKiBQQ00xNzk2IGNlbnRlci9MRkU6IEFEMSwwIDwtIDEsMAotICogUENNMTc5NiBiYWNrOiAgICAgICBBRDEsMCA8LSAxLDEKKyAqICAgScKyQyA8LT4gUENNMTc5NiAoYWRkciAxMDAxMTAxKSAoc3Vycm91bmQpCisgKiAgICAgICA8LT4gUENNMTc5NiAoYWRkciAxMDAxMTEwKSAoY2VudGVyL0xGRSkKKyAqICAgICAgIDwtPiBQQ00xNzk2IChhZGRyIDEwMDExMTEpIChiYWNrKQogICoKICAqIHVua25vd24gZGF1Z2h0ZXJib2FyZAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgotICogR1BJTyA0IDwtIDAKLSAqIEdQSU8gNSA8LSAxCisgKiAgIEdQSU8gNCA8LSAwCisgKiAgIEdQSU8gNSA8LSAxCiAgKgotICogScKyQyA8LT4gQ1M0MzYyQSAoc3Vycm91bmQsIGNlbnRlci9MRkUsIGJhY2spCi0gKgotICogQ1M0MzYyQTogQUQwIDwtIDAKKyAqICAgScKyQyA8LT4gQ1M0MzYyQSAoYWRkciAwMDExMDAwKSAoc3Vycm91bmQsIGNlbnRlci9MRkUsIGJhY2spCiAgKi8KIAogLyoKQEAgLTk4LDMyICsxMDUsMzUgQEAKICAqCiAgKiBDTUk4Nzg4OgogICoKLSAqIEnCskMgPC0+IFBDTTE3OTJBCi0gKiAgICAgPC0+IENTMjAwMCAoU1Qgb25seSkKKyAqICAgScKyQyA8LT4gUENNMTc5MkEgKGFkZHIgMTAwMTEwMCkKKyAqICAgICAgIDwtPiBDUzIwMDAgKGFkZHIgMTAwMTExMCkgKFNUIG9ubHkpCiAgKgotICogQURDMSBNQ0xLIC0+IFJFRl9DTEsgb2YgQ1MyMDAwIChTVCBvbmx5KQorICogICBBREMxIE1DTEsgLT4gUkVGX0NMSyBvZiBDUzIwMDAgKFNUIG9ubHkpCiAgKgotICogR1BJIDAgPC0gZXh0ZXJuYWwgcG93ZXIgcHJlc2VudCAoU1RYIG9ubHkpCisgKiAgIEdQSSAwIDwtIGV4dGVybmFsIHBvd2VyIHByZXNlbnQgKFNUWCBvbmx5KQogICoKLSAqIEdQSU8gMCAtPiBlbmFibGUgb3V0cHV0IHRvIHNwZWFrZXJzCi0gKiBHUElPIDEgLT4gcm91dGUgSFAgdG8gZnJvbnQgcGFuZWwgKDApIG9yIHJlYXIgamFjayAoMSkKLSAqIEdQSU8gMiAtPiBNMCBvZiBDUzUzODEKLSAqIEdQSU8gMyAtPiBNMSBvZiBDUzUzODEKLSAqIEdQSU8gNyAtPiByb3V0ZSBvdXRwdXQgdG8gc3BlYWtlciBqYWNrcyAoMCkgb3IgSFAgKDEpCi0gKiBHUElPIDggLT4gcm91dGUgaW5wdXQgamFjayB0byBsaW5lLWluICgwKSBvciBtaWMtaW4gKDEpCisgKiAgIEdQSU8gMCAtPiBlbmFibGUgb3V0cHV0IHRvIHNwZWFrZXJzCisgKiAgIEdQSU8gMSAtPiByb3V0ZSBIUCB0byBmcm9udCBwYW5lbCAoMCkgb3IgcmVhciBqYWNrICgxKQorICogICBHUElPIDIgLT4gTTAgb2YgQ1M1MzgxCisgKiAgIEdQSU8gMyAtPiBNMSBvZiBDUzUzODEKKyAqICAgR1BJTyA0IDwtIGRhdWdodGVyYm9hcmQgZGV0ZWN0aW9uCisgKiAgIEdQSU8gNSA8LSBkYXVnaHRlcmJvYXJkIGRldGVjdGlvbgorICogICBHUElPIDYgLT4gPworICogICBHUElPIDcgLT4gcm91dGUgb3V0cHV0IHRvIHNwZWFrZXIgamFja3MgKDApIG9yIEhQICgxKQorICogICBHUElPIDggLT4gcm91dGUgaW5wdXQgamFjayB0byBsaW5lLWluICgwKSBvciBtaWMtaW4gKDEpCiAgKgogICogUENNMTc5MkE6CiAgKgotICogQUQxLDAgPC0gMCwwCi0gKiBTQ0sgPC0gQ0xLX09VVCBvZiBDUzIwMDAgKFNUIG9ubHkpCi0gKgotICogQ1MyMDAwOgotICoKLSAqIEFEMCA8LSAwCisgKiAgIFNDSyA8LSBDTEtfT1VUIG9mIENTMjAwMCAoU1Qgb25seSkKICAqCiAgKiBDTTk3ODA6CiAgKgotICogR1BPIDAgLT4gcm91dGUgbGluZS1pbiAoMCkgb3IgQUM5NyBvdXRwdXQgKDEpIHRvIENTNTM4MSBpbnB1dAorICogICBMSU5FX09VVCAtPiBpbnB1dCBvZiBBREMKKyAqCisgKiAgIEFVWF9JTiA8LSBhdXgKKyAqICAgTUlDX0lOIDwtIG1pYworICoKKyAqICAgR1BPIDAgLT4gcm91dGUgbGluZS1pbiAoMCkgb3IgQUM5NyBvdXRwdXQgKDEpIHRvIENTNTM4MSBpbnB1dAogICoKICAqIEg2IGRhdWdodGVyYm9hcmQKICAqIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzMywxNSArMTQzLDM5IEBACiAgKi8KIAogLyoKLSAqIFhvbmFyIEhEQVYxLjMgU2xpbQotICogLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBYb25hciBYZW5zZQorICogLS0tLS0tLS0tLS0KICAqCiAgKiBDTUk4Nzg4OgogICoKLSAqIEdQSU8gMSAtPiBlbmFibGUgb3V0cHV0CisgKiAgIEnCskMgPC0+IFBDTTE3OTYgKGFkZHIgMTAwMTEwMCkgKGZyb250KQorICogICAgICAgPC0+IENTNDM2MkEgKGFkZHIgMDAxMTAwMCkgKHN1cnJvdW5kLCBjZW50ZXIvTEZFLCBiYWNrKQorICogICAgICAgPC0+IENTMjAwMCAoYWRkciAxMDAxMTEwKQogICoKLSAqIFRYRCAtPiBIRE1JIGNvbnRyb2xsZXIKLSAqIFJYRCA8LSBIRE1JIGNvbnRyb2xsZXIKKyAqICAgQURDMSBNQ0xLIC0+IFJFRl9DTEsgb2YgQ1MyMDAwCisgKgorICogICBHUEkgMCA8LSBleHRlcm5hbCBwb3dlciBwcmVzZW50CisgKgorICogICBHUElPIDAgLT4gZW5hYmxlIG91dHB1dAorICogICBHUElPIDEgLT4gcm91dGUgSFAgdG8gZnJvbnQgcGFuZWwgKDApIG9yIHJlYXIgamFjayAoMSkKKyAqICAgR1BJTyAyIC0+IE0wIG9mIENTNTM4MQorICogICBHUElPIDMgLT4gTTEgb2YgQ1M1MzgxCisgKiAgIEdQSU8gNCAtPiBlbmFibGUgb3V0cHV0CisgKiAgIEdQSU8gNSAtPiBlbmFibGUgb3V0cHV0CisgKiAgIEdQSU8gNiAtPiA/CisgKiAgIEdQSU8gNyAtPiByb3V0ZSBvdXRwdXQgdG8gSFAgKDApIG9yIHNwZWFrZXIgKDEpCisgKiAgIEdQSU8gOCAtPiByb3V0ZSBpbnB1dCBqYWNrIHRvIG1pYy1pbiAoMCkgb3IgbGluZS1pbiAoMSkKKyAqCisgKiBDTTk3ODA6CisgKgorICogICBMSU5FX09VVCAtPiBpbnB1dCBvZiBBREMKKyAqCisgKiAgIEFVWF9JTiAgIDwtIGF1eAorICogICBWSURFT19JTiA8LSA/CisgKiAgIEZNSUNfSU4gIDwtIG1pYworICoKKyAqICAgR1BPIDAgLT4gcm91dGUgbGluZS1pbiAoMCkgb3IgQUM5NyBvdXRwdXQgKDEpIHRvIENTNTM4MSBpbnB1dAorICogICBHUE8gMSAtPiByb3V0ZSBtaWMtaW4gZnJvbSBpbnB1dCBqYWNrICgwKSBvciBmcm9udCBwYW5lbCBoZWFkZXIgKDEpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMTUwLDYgKzE4NCw3IEBACiAjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KQEAgLTE2NywxMiArMjAyLDE0IEBACiAjZGVmaW5lIEdQSU9fSU5QVVRfUk9VVEUJMHgwMTAwCiAKICNkZWZpbmUgR1BJT19IREFWX09VVFBVVF9FTkFCTEUJMHgwMDAxCisjZGVmaW5lIEdQSU9fSERBVl9NQUdJQwkJMHgwMGMwCiAKICNkZWZpbmUgR1BJT19EQl9NQVNLCQkweDAwMzAKICNkZWZpbmUgR1BJT19EQl9INgkJMHgwMDAwCiAKICNkZWZpbmUgR1BJT19TVF9PVVRQVVRfRU5BQkxFCTB4MDAwMQogI2RlZmluZSBHUElPX1NUX0hQX1JFQVIJCTB4MDAwMgorI2RlZmluZSBHUElPX1NUX01BR0lDCQkweDAwNDAKICNkZWZpbmUgR1BJT19TVF9IUAkJMHgwMDgwCiAKICNkZWZpbmUgSTJDX0RFVklDRV9QQ00xNzk2KGkpCSgweDk4ICsgKChpKSA8PCAxKSkJLyogMTAwMTEsIGlpLCAvVz0wICovCkBAIC0xODYsMTEgKzIyMywxMiBAQAogCXVuc2lnbmVkIGludCBkYWNzOwogCXU4IHBjbTE3OTZfcmVnc1s0XVs1XTsKIAl1bnNpZ25lZCBpbnQgY3VycmVudF9yYXRlOwotCWJvb2wgb3NfMTI4OworCWJvb2wgaDY7CiAJYm9vbCBocF9hY3RpdmU7CiAJczggaHBfZ2Fpbl9vZmZzZXQ7CiAJYm9vbCBoYXNfY3MyMDAwOwotCXU4IGNzMjAwMF9mdW5fY2ZnXzE7CisJdTggY3MyMDAwX3JlZ3NbMHgxZl07CisJYm9vbCBicm9rZW5faTJjOwogfTsKIAogc3RydWN0IHhvbmFyX2hkYXYgewpAQCAtMjQ5LDE2ICsyODcsMTQgQEAKIAlzdHJ1Y3QgeG9uYXJfcGNtMTc5eCAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CiAKIAlveHlnZW5fd3JpdGVfaTJjKGNoaXAsIEkyQ19ERVZJQ0VfQ1MyMDAwLCByZWcsIHZhbHVlKTsKLQlpZiAocmVnID09IENTMjAwMF9GVU5fQ0ZHXzEpCi0JCWRhdGEtPmNzMjAwMF9mdW5fY2ZnXzEgPSB2YWx1ZTsKKwlkYXRhLT5jczIwMDBfcmVnc1tyZWddID0gdmFsdWU7CiB9CiAKIHN0YXRpYyB2b2lkIGNzMjAwMF93cml0ZV9jYWNoZWQoc3RydWN0IG94eWdlbiAqY2hpcCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgeG9uYXJfcGNtMTc5eCAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CiAKLQlpZiAocmVnICE9IENTMjAwMF9GVU5fQ0ZHXzEgfHwKLQkgICAgdmFsdWUgIT0gZGF0YS0+Y3MyMDAwX2Z1bl9jZmdfMSkKKwlpZiAodmFsdWUgIT0gZGF0YS0+Y3MyMDAwX3JlZ3NbcmVnXSkKIAkJY3MyMDAwX3dyaXRlKGNoaXAsIHJlZywgdmFsdWUpOwogfQogCkBAIC0yNjgsNiArMzA0LDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAlzOCBnYWluX29mZnNldDsKIAorCW1zbGVlcCgxKTsKIAlnYWluX29mZnNldCA9IGRhdGEtPmhwX2FjdGl2ZSA/IGRhdGEtPmhwX2dhaW5fb2Zmc2V0IDogMDsKIAlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+ZGFjczsgKytpKSB7CiAJCS8qIHNldCBBVExEIGJlZm9yZSBBVEwvQVRSICovCkBAIC0yODIsNiArMzE5LDcgQEAKIAkJcGNtMTc5Nl93cml0ZShjaGlwLCBpLCAyMCwKIAkJCSAgICAgIGRhdGEtPnBjbTE3OTZfcmVnc1swXVsyMCAtIFBDTTE3OTZfUkVHX0JBU0VdKTsKIAkJcGNtMTc5Nl93cml0ZShjaGlwLCBpLCAyMSwgMCk7CisJCWdhaW5fb2Zmc2V0ID0gMDsKIAl9CiB9CiAKQEAgLTI5MCwxMCArMzI4LDExIEBACiAJc3RydWN0IHhvbmFyX3BjbTE3OXggKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwogCiAJZGF0YS0+cGNtMTc5Nl9yZWdzWzBdWzE4IC0gUENNMTc5Nl9SRUdfQkFTRV0gPSBQQ00xNzk2X01VVEUgfAotCQlQQ00xNzk2X0RNRl9ESVNBQkxFRCB8IFBDTTE3OTZfRk1UXzI0X0xKVVNUIHwgUENNMTc5Nl9BVExEOworCQlQQ00xNzk2X0RNRl9ESVNBQkxFRCB8IFBDTTE3OTZfRk1UXzI0X0kyUyB8IFBDTTE3OTZfQVRMRDsKIAlkYXRhLT5wY20xNzk2X3JlZ3NbMF1bMTkgLSBQQ00xNzk2X1JFR19CQVNFXSA9CiAJCVBDTTE3OTZfRkxUX1NIQVJQIHwgUENNMTc5Nl9BVFNfMTsKLQlkYXRhLT5wY20xNzk2X3JlZ3NbMF1bMjAgLSBQQ00xNzk2X1JFR19CQVNFXSA9IFBDTTE3OTZfT1NfNjQ7CisJZGF0YS0+cGNtMTc5Nl9yZWdzWzBdWzIwIC0gUENNMTc5Nl9SRUdfQkFTRV0gPQorCQlkYXRhLT5oNiA/IFBDTTE3OTZfT1NfNjQgOiBQQ00xNzk2X09TXzEyODsKIAlwY20xNzk2X3JlZ2lzdGVyc19pbml0KGNoaXApOwogCWRhdGEtPmN1cnJlbnRfcmF0ZSA9IDQ4MDAwOwogfQpAQCAtMzM5LDE4ICszNzgsMjAgQEAKIAlveHlnZW5fd3JpdGUxNihjaGlwLCBPWFlHRU5fMldJUkVfQlVTX1NUQVRVUywKIAkJICAgICAgIE9YWUdFTl8yV0lSRV9MRU5HVEhfOCB8CiAJCSAgICAgICBPWFlHRU5fMldJUkVfSU5URVJSVVBUX01BU0sgfAotCQkgICAgICAgT1hZR0VOXzJXSVJFX1NQRUVEX0ZBU1QpOworCQkgICAgICAgT1hZR0VOXzJXSVJFX1NQRUVEX1NUQU5EQVJEKTsKIAogCWRhdGEtPnBjbTE3OXguZ2VuZXJpYy5hbnRpX3BvcF9kZWxheSA9IDEwMDsKIAlkYXRhLT5wY20xNzl4LmdlbmVyaWMub3V0cHV0X2VuYWJsZV9iaXQgPSBHUElPX0hEQVZfT1VUUFVUX0VOQUJMRTsKIAlkYXRhLT5wY20xNzl4LmdlbmVyaWMuZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElfREFUQTsKIAlkYXRhLT5wY20xNzl4LmdlbmVyaWMuZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJX0lOVEVSUlVQVF9NQVNLOwogCWRhdGEtPnBjbTE3OXguZ2VuZXJpYy5leHRfcG93ZXJfYml0ID0gR1BJX0VYVF9QT1dFUjsKLQlkYXRhLT5wY20xNzl4LmRhY3MgPSBjaGlwLT5tb2RlbC5wcml2YXRlX2RhdGEgPyA0IDogMTsKKwlkYXRhLT5wY20xNzl4LmRhY3MgPSBjaGlwLT5tb2RlbC5kYWNfY2hhbm5lbHNfbWl4ZXIgLyAyOworCWRhdGEtPnBjbTE3OXguaDYgPSBjaGlwLT5tb2RlbC5kYWNfY2hhbm5lbHNfbWl4ZXIgPiAyOwogCiAJcGNtMTc5Nl9pbml0KGNoaXApOwogCi0Jb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwgR1BJT19JTlBVVF9ST1VURSk7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKKwkJCSAgR1BJT19IREFWX01BR0lDIHwgR1BJT19JTlBVVF9ST1VURSk7CiAJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBLCBHUElPX0lOUFVUX1JPVVRFKTsKIAogCXhvbmFyX2luaXRfY3M1M3gxKGNoaXApOwpAQCAtMzY3LDcgKzQwOCw3IEBACiAJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOXzJXSVJFX0JVU19TVEFUVVMsCiAJCSAgICAgICBPWFlHRU5fMldJUkVfTEVOR1RIXzggfAogCQkgICAgICAgT1hZR0VOXzJXSVJFX0lOVEVSUlVQVF9NQVNLIHwKLQkJICAgICAgIE9YWUdFTl8yV0lSRV9TUEVFRF9GQVNUKTsKKwkJICAgICAgIE9YWUdFTl8yV0lSRV9TUEVFRF9TVEFOREFSRCk7CiB9CiAKIHN0YXRpYyB2b2lkIHhvbmFyX3N0X2luaXRfY29tbW9uKHN0cnVjdCBveHlnZW4gKmNoaXApCkBAIC0zNzUsMTMgKzQxNiwxNCBAQAogCXN0cnVjdCB4b25hcl9wY20xNzl4ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKIAogCWRhdGEtPmdlbmVyaWMub3V0cHV0X2VuYWJsZV9iaXQgPSBHUElPX1NUX09VVFBVVF9FTkFCTEU7Ci0JZGF0YS0+ZGFjcyA9IGNoaXAtPm1vZGVsLnByaXZhdGVfZGF0YSA/IDQgOiAxOworCWRhdGEtPmRhY3MgPSBjaGlwLT5tb2RlbC5kYWNfY2hhbm5lbHNfbWl4ZXIgLyAyOwogCWRhdGEtPmhwX2dhaW5fb2Zmc2V0ID0gMiotMTg7CiAKIAlwY20xNzk2X2luaXQoY2hpcCk7CiAKIAlveHlnZW5fc2V0X2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAotCQkJICBHUElPX0lOUFVUX1JPVVRFIHwgR1BJT19TVF9IUF9SRUFSIHwgR1BJT19TVF9IUCk7CisJCQkgIEdQSU9fSU5QVVRfUk9VVEUgfCBHUElPX1NUX0hQX1JFQVIgfAorCQkJICBHUElPX1NUX01BR0lDIHwgR1BJT19TVF9IUCk7CiAJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBLAogCQkJICAgIEdQSU9fSU5QVVRfUk9VVEUgfCBHUElPX1NUX0hQX1JFQVIgfCBHUElPX1NUX0hQKTsKIApAQCAtNDEwLDkgKzQ1MiwxMSBAQAogCWNzMjAwMF93cml0ZShjaGlwLCBDUzIwMDBfUkFUSU9fMCArIDEsIDB4MTApOwogCWNzMjAwMF93cml0ZShjaGlwLCBDUzIwMDBfUkFUSU9fMCArIDIsIDB4MDApOwogCWNzMjAwMF93cml0ZShjaGlwLCBDUzIwMDBfUkFUSU9fMCArIDMsIDB4MDApOwotCWNzMjAwMF93cml0ZShjaGlwLCBDUzIwMDBfRlVOX0NGR18xLCBkYXRhLT5jczIwMDBfZnVuX2NmZ18xKTsKKwljczIwMDBfd3JpdGUoY2hpcCwgQ1MyMDAwX0ZVTl9DRkdfMSwKKwkJICAgICBkYXRhLT5jczIwMDBfcmVnc1tDUzIwMDBfRlVOX0NGR18xXSk7CiAJY3MyMDAwX3dyaXRlKGNoaXAsIENTMjAwMF9GVU5fQ0ZHXzIsIDApOwogCWNzMjAwMF93cml0ZShjaGlwLCBDUzIwMDBfR0xPQkFMX0NGRywgQ1MyMDAwX0VOX0RFVl9DRkdfMik7CisJbXNsZWVwKDMpOyAvKiBQTEwgbG9jayBkZWxheSAqLwogfQogCiBzdGF0aWMgdm9pZCB4b25hcl9zdF9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCkBAIC00MjAsMTMgKzQ2NCwxOCBAQAogCXN0cnVjdCB4b25hcl9wY20xNzl4ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKIAogCWRhdGEtPmdlbmVyaWMuYW50aV9wb3BfZGVsYXkgPSAxMDA7CisJZGF0YS0+aDYgPSBjaGlwLT5tb2RlbC5kYWNfY2hhbm5lbHNfbWl4ZXIgPiAyOwogCWRhdGEtPmhhc19jczIwMDAgPSAxOwotCWRhdGEtPmNzMjAwMF9mdW5fY2ZnXzEgPSBDUzIwMDBfUkVGX0NMS19ESVZfMTsKKwlkYXRhLT5jczIwMDBfcmVnc1tDUzIwMDBfRlVOX0NGR18xXSA9IENTMjAwMF9SRUZfQ0xLX0RJVl8xOworCWRhdGEtPmJyb2tlbl9pMmMgPSB0cnVlOwogCiAJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0kyU19BX0ZPUk1BVCwKLQkJICAgICAgIE9YWUdFTl9SQVRFXzQ4MDAwIHwgT1hZR0VOX0kyU19GT1JNQVRfSTJTIHwKLQkJICAgICAgIE9YWUdFTl9JMlNfTUNMS18xMjggfCBPWFlHRU5fSTJTX0JJVFNfMTYgfAotCQkgICAgICAgT1hZR0VOX0kyU19NQVNURVIgfCBPWFlHRU5fSTJTX0JDTEtfNjQpOworCQkgICAgICAgT1hZR0VOX1JBVEVfNDgwMDAgfAorCQkgICAgICAgT1hZR0VOX0kyU19GT1JNQVRfSTJTIHwKKwkJICAgICAgIE9YWUdFTl9JMlNfTUNMSyhkYXRhLT5oNiA/IE1DTEtfMjU2IDogTUNMS181MTIpIHwKKwkJICAgICAgIE9YWUdFTl9JMlNfQklUU18xNiB8CisJCSAgICAgICBPWFlHRU5fSTJTX01BU1RFUiB8CisJCSAgICAgICBPWFlHRU5fSTJTX0JDTEtfNjQpOwogCiAJeG9uYXJfc3RfaW5pdF9pMmMoY2hpcCk7CiAJY3MyMDAwX3JlZ2lzdGVyc19pbml0KGNoaXApOwpAQCAtNTA3LDQ0ICs1NTYsMTYgQEAKIAl4b25hcl9zdHhfcmVzdW1lKGNoaXApOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IG1jbGtfZnJvbV9yYXRlKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCByYXRlKQotewotCXN0cnVjdCB4b25hcl9wY20xNzl4ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKLQotCWlmIChyYXRlIDw9IDMyMDAwKQotCQlyZXR1cm4gT1hZR0VOX0kyU19NQ0xLXzUxMjsKLQllbHNlIGlmIChyYXRlIDw9IDQ4MDAwICYmIGRhdGEtPm9zXzEyOCkKLQkJcmV0dXJuIE9YWUdFTl9JMlNfTUNMS181MTI7Ci0JZWxzZSBpZiAocmF0ZSA8PSA5NjAwMCkKLQkJcmV0dXJuIE9YWUdFTl9JMlNfTUNMS18yNTY7Ci0JZWxzZQotCQlyZXR1cm4gT1hZR0VOX0kyU19NQ0xLXzEyODsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBnZXRfcGNtMTc5Nl9pMnNfbWNsayhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAotCQkJCQkgdW5zaWduZWQgaW50IGNoYW5uZWwsCi0JCQkJCSBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKLXsKLQlpZiAoY2hhbm5lbCA9PSBQQ01fTVVMVElDSCkKLQkJcmV0dXJuIG1jbGtfZnJvbV9yYXRlKGNoaXAsIHBhcmFtc19yYXRlKHBhcmFtcykpOwotCWVsc2UKLQkJcmV0dXJuIG94eWdlbl9kZWZhdWx0X2kyc19tY2xrKGNoaXAsIGNoYW5uZWwsIHBhcmFtcyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHVwZGF0ZV9wY20xNzk2X292ZXJzYW1wbGluZyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXN0cnVjdCB4b25hcl9wY20xNzl4ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1OCByZWc7CiAKLQlpZiAoZGF0YS0+Y3VycmVudF9yYXRlIDw9IDMyMDAwKQorCWlmIChkYXRhLT5jdXJyZW50X3JhdGUgPD0gNDgwMDAgJiYgIWRhdGEtPmg2KQogCQlyZWcgPSBQQ00xNzk2X09TXzEyODsKLQllbHNlIGlmIChkYXRhLT5jdXJyZW50X3JhdGUgPD0gNDgwMDAgJiYgZGF0YS0+b3NfMTI4KQotCQlyZWcgPSBQQ00xNzk2X09TXzEyODsKLQllbHNlIGlmIChkYXRhLT5jdXJyZW50X3JhdGUgPD0gOTYwMDAgfHwgZGF0YS0+b3NfMTI4KQotCQlyZWcgPSBQQ00xNzk2X09TXzY0OwogCWVsc2UKLQkJcmVnID0gUENNMTc5Nl9PU18zMjsKKwkJcmVnID0gUENNMTc5Nl9PU182NDsKIAlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+ZGFjczsgKytpKQogCQlwY20xNzk2X3dyaXRlX2NhY2hlZChjaGlwLCBpLCAyMCwgcmVnKTsKIH0KQEAgLTU1NCw2ICs1NzUsNyBAQAogewogCXN0cnVjdCB4b25hcl9wY20xNzl4ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKIAorCW1zbGVlcCgxKTsKIAlkYXRhLT5jdXJyZW50X3JhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwogCXVwZGF0ZV9wY20xNzk2X292ZXJzYW1wbGluZyhjaGlwKTsKIH0KQEAgLTU3MCw2ICs1OTIsNyBAQAogCQkJCSAgICAgKyBnYWluX29mZnNldCk7CiAJCXBjbTE3OTZfd3JpdGVfY2FjaGVkKGNoaXAsIGksIDE3LCBjaGlwLT5kYWNfdm9sdW1lW2kgKiAyICsgMV0KIAkJCQkgICAgICsgZ2Fpbl9vZmZzZXQpOworCQlnYWluX29mZnNldCA9IDA7CiAJfQogfQogCkBAIC01NzksNyArNjAyLDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAl1OCB2YWx1ZTsKIAotCXZhbHVlID0gUENNMTc5Nl9ETUZfRElTQUJMRUQgfCBQQ00xNzk2X0ZNVF8yNF9MSlVTVCB8IFBDTTE3OTZfQVRMRDsKKwl2YWx1ZSA9IFBDTTE3OTZfRE1GX0RJU0FCTEVEIHwgUENNMTc5Nl9GTVRfMjRfSTJTIHwgUENNMTc5Nl9BVExEOwogCWlmIChjaGlwLT5kYWNfbXV0ZSkKIAkJdmFsdWUgfD0gUENNMTc5Nl9NVVRFOwogCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5kYWNzOyArK2kpCkBAIC01OTIsNDUgKzYxNSwzNSBAQAogCXU4IHJhdGVfbWNsaywgcmVnOwogCiAJc3dpdGNoIChyYXRlKSB7Ci0JCS8qIFhYWCBXaHkgaXMgdGhlIEkyUyBBIE1DTEsgaGFsZiB0aGUgYWN0dWFsIEkyUyBNQ0xLPyAqLwogCWNhc2UgMzIwMDA6Ci0JCXJhdGVfbWNsayA9IE9YWUdFTl9SQVRFXzMyMDAwIHwgT1hZR0VOX0kyU19NQ0xLXzI1NjsKKwljYXNlIDY0MDAwOgorCQlyYXRlX21jbGsgPSBPWFlHRU5fUkFURV8zMjAwMDsKIAkJYnJlYWs7CiAJY2FzZSA0NDEwMDoKLQkJaWYgKGRhdGEtPm9zXzEyOCkKLQkJCXJhdGVfbWNsayA9IE9YWUdFTl9SQVRFXzQ0MTAwIHwgT1hZR0VOX0kyU19NQ0xLXzI1NjsKLQkJZWxzZQotCQkJcmF0ZV9tY2xrID0gT1hZR0VOX1JBVEVfNDQxMDAgfCBPWFlHRU5fSTJTX01DTEtfMTI4OwotCQlicmVhazsKLQlkZWZhdWx0OiAvKiA0ODAwMCAqLwotCQlpZiAoZGF0YS0+b3NfMTI4KQotCQkJcmF0ZV9tY2xrID0gT1hZR0VOX1JBVEVfNDgwMDAgfCBPWFlHRU5fSTJTX01DTEtfMjU2OwotCQllbHNlCi0JCQlyYXRlX21jbGsgPSBPWFlHRU5fUkFURV80ODAwMCB8IE9YWUdFTl9JMlNfTUNMS18xMjg7Ci0JCWJyZWFrOwotCWNhc2UgNjQwMDA6Ci0JCXJhdGVfbWNsayA9IE9YWUdFTl9SQVRFXzMyMDAwIHwgT1hZR0VOX0kyU19NQ0xLXzI1NjsKLQkJYnJlYWs7CiAJY2FzZSA4ODIwMDoKLQkJcmF0ZV9tY2xrID0gT1hZR0VOX1JBVEVfNDQxMDAgfCBPWFlHRU5fSTJTX01DTEtfMjU2OwotCQlicmVhazsKLQljYXNlIDk2MDAwOgotCQlyYXRlX21jbGsgPSBPWFlHRU5fUkFURV80ODAwMCB8IE9YWUdFTl9JMlNfTUNMS18yNTY7Ci0JCWJyZWFrOwogCWNhc2UgMTc2NDAwOgotCQlyYXRlX21jbGsgPSBPWFlHRU5fUkFURV80NDEwMCB8IE9YWUdFTl9JMlNfTUNMS18yNTY7CisJCXJhdGVfbWNsayA9IE9YWUdFTl9SQVRFXzQ0MTAwOwogCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgNDgwMDA6CisJY2FzZSA5NjAwMDoKIAljYXNlIDE5MjAwMDoKLQkJcmF0ZV9tY2xrID0gT1hZR0VOX1JBVEVfNDgwMDAgfCBPWFlHRU5fSTJTX01DTEtfMjU2OworCQlyYXRlX21jbGsgPSBPWFlHRU5fUkFURV80ODAwMDsKIAkJYnJlYWs7CiAJfQorCisJaWYgKHJhdGUgPD0gOTYwMDAgJiYgKHJhdGUgPiA0ODAwMCB8fCBkYXRhLT5oNikpIHsKKwkJcmF0ZV9tY2xrIHw9IE9YWUdFTl9JMlNfTUNMSyhNQ0xLXzI1Nik7CisJCXJlZyA9IENTMjAwMF9SRUZfQ0xLX0RJVl8xOworCX0gZWxzZSB7CisJCXJhdGVfbWNsayB8PSBPWFlHRU5fSTJTX01DTEsoTUNMS181MTIpOworCQlyZWcgPSBDUzIwMDBfUkVGX0NMS19ESVZfMjsKKwl9CisKIAlveHlnZW5fd3JpdGUxNl9tYXNrZWQoY2hpcCwgT1hZR0VOX0kyU19BX0ZPUk1BVCwgcmF0ZV9tY2xrLAogCQkJICAgICAgT1hZR0VOX0kyU19SQVRFX01BU0sgfCBPWFlHRU5fSTJTX01DTEtfTUFTSyk7Ci0JaWYgKChyYXRlX21jbGsgJiBPWFlHRU5fSTJTX01DTEtfTUFTSykgPD0gT1hZR0VOX0kyU19NQ0xLXzEyOCkKLQkJcmVnID0gQ1MyMDAwX1JFRl9DTEtfRElWXzE7Ci0JZWxzZQotCQlyZWcgPSBDUzIwMDBfUkVGX0NMS19ESVZfMjsKIAljczIwMDBfd3JpdGVfY2FjaGVkKGNoaXAsIENTMjAwMF9GVU5fQ0ZHXzEsIHJlZyk7CisJbXNsZWVwKDMpOyAvKiBQTEwgbG9jayBkZWxheSAqLwogfQogCiBzdGF0aWMgdm9pZCBzZXRfc3RfcGFyYW1zKHN0cnVjdCBveHlnZW4gKmNoaXAsCkBAIC02NjUsMTMgKzY3OCw3IEBACiAJCSJTaGFycCBSb2xsLW9mZiIsICJTbG93IFJvbGwtb2ZmIgogCX07CiAKLQlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwotCWluZm8tPmNvdW50ID0gMTsKLQlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMjsKLQlpZiAoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IDIpCi0JCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDE7Ci0Jc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNuZF9jdGxfZW51bV9pbmZvKGluZm8sIDEsIDIsIG5hbWVzKTsKIH0KIAogc3RhdGljIGludCByb2xsb2ZmX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCkBAIC03MTksNTcgKzcyNiwxMyBAQAogCS5wdXQgPSByb2xsb2ZmX3B1dCwKIH07CiAKLXN0YXRpYyBpbnQgb3NfMTI4X2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzWzJdID0geyAiNjR4IiwgIjEyOHgiIH07Ci0KLQlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwotCWluZm8tPmNvdW50ID0gMTsKLQlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMjsKLQlpZiAoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IDIpCi0JCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDE7Ci0Jc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3NfMTI4X2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCi0JCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQotewotCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgeG9uYXJfcGNtMTc5eCAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7Ci0KLQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gZGF0YS0+b3NfMTI4OwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9zXzEyOF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAotCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKLXsKLQlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHhvbmFyX3BjbTE3OXggKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwotCWludCBjaGFuZ2VkOwotCi0JbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOwotCWNoYW5nZWQgPSB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICE9IGRhdGEtPm9zXzEyODsKLQlpZiAoY2hhbmdlZCkgewotCQlkYXRhLT5vc18xMjggPSB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwotCQlpZiAoZGF0YS0+aGFzX2NzMjAwMCkKLQkJCXVwZGF0ZV9jczIwMDBfcmF0ZShjaGlwLCBkYXRhLT5jdXJyZW50X3JhdGUpOwotCQlveHlnZW5fd3JpdGUxNl9tYXNrZWQoY2hpcCwgT1hZR0VOX0kyU19NVUxUSUNIX0ZPUk1BVCwKLQkJCQkgICAgICBtY2xrX2Zyb21fcmF0ZShjaGlwLCBkYXRhLT5jdXJyZW50X3JhdGUpLAotCQkJCSAgICAgIE9YWUdFTl9JMlNfTUNMS19NQVNLKTsKLQkJdXBkYXRlX3BjbTE3OTZfb3ZlcnNhbXBsaW5nKGNoaXApOwotCX0KLQltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKLQlyZXR1cm4gY2hhbmdlZDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG9zXzEyOF9jb250cm9sID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhkYXZfaGRtaV9jb250cm9sID0gewogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCS5uYW1lID0gIkRBQyBPdmVyc2FtcGxpbmcgUGxheWJhY2sgRW51bSIsCi0JLmluZm8gPSBvc18xMjhfaW5mbywKLQkuZ2V0ID0gb3NfMTI4X2dldCwKLQkucHV0ID0gb3NfMTI4X3B1dCwKKwkubmFtZSA9ICJIRE1JIFBsYXliYWNrIFN3aXRjaCIsCisJLmluZm8gPSBzbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvLAorCS5nZXQgPSB4b25hcl9ncGlvX2JpdF9zd2l0Y2hfZ2V0LAorCS5wdXQgPSB4b25hcl9ncGlvX2JpdF9zd2l0Y2hfcHV0LAorCS5wcml2YXRlX3ZhbHVlID0gR1BJT19IREFWX09VVFBVVF9FTkFCTEUgfCBYT05BUl9HUElPX0JJVF9JTlZFUlQsCiB9OwogCiBzdGF0aWMgaW50IHN0X291dHB1dF9zd2l0Y2hfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCkBAIC03NzksMTMgKzc0Miw3IEBACiAJCSJTcGVha2VycyIsICJIZWFkcGhvbmVzIiwgIkZQIEhlYWRwaG9uZXMiCiAJfTsKIAotCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7Ci0JaW5mby0+Y291bnQgPSAxOwotCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOwotCWlmIChpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gMykKLQkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMjsKLQlzdHJjcHkoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCBuYW1lc1tpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc25kX2N0bF9lbnVtX2luZm8oaW5mbywgMSwgMywgbmFtZXMpOwogfQogCiBzdGF0aWMgaW50IHN0X291dHB1dF9zd2l0Y2hfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKQEAgLTg0MCwxMyArNzk3LDcgQEAKIAkJIjwgNjQgb2htcyIsICI2NC0zMDAgb2htcyIsICIzMDAtNjAwIG9obXMiCiAJfTsKIAotCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7Ci0JaW5mby0+Y291bnQgPSAxOwotCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOwotCWlmIChpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPiAyKQotCQlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSAyOwotCXN0cmNweShpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIG5hbWVzW2luZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwotCXJldHVybiAwOworCXJldHVybiBzbmRfY3RsX2VudW1faW5mbyhpbmZvLCAxLCAzLCBuYW1lcyk7CiB9CiAKIHN0YXRpYyBpbnQgc3RfaHBfdm9sdW1lX29mZnNldF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLApAQCAtOTI4LDE2ICs4NzksMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB4b25hcl9zdF9oNl9jb250cm9sX2ZpbHRlcihzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqdGVtcGxhdGUpCit7CisJaWYgKCFzdHJuY21wKHRlbXBsYXRlLT5uYW1lLCAiTWFzdGVyIFBsYXliYWNrICIsIDE2KSkKKwkJLyogbm8gdm9sdW1lL211dGUsIGFzIEnCskMgdG8gdGhlIHRoaXJkIERBQyBkb2VzIG5vdCB3b3JrICovCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGFkZF9wY20xNzk2X2NvbnRyb2xzKHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CisJc3RydWN0IHhvbmFyX3BjbTE3OXggKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwogCWludCBlcnI7CiAKLQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnJvbGxvZmZfY29udHJvbCwgY2hpcCkpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmb3NfMTI4X2NvbnRyb2wsIGNoaXApKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwlpZiAoIWRhdGEtPmJyb2tlbl9pMmMpIHsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwKKwkJCQkgIHNuZF9jdGxfbmV3MSgmcm9sbG9mZl9jb250cm9sLCBjaGlwKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk1Niw3ICs5MTYsMTUgQEAKIAogc3RhdGljIGludCB4b25hcl9oZGF2X21peGVyX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKLQlyZXR1cm4gYWRkX3BjbTE3OTZfY29udHJvbHMoY2hpcCk7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmaGRhdl9oZG1pX2NvbnRyb2wsIGNoaXApKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBhZGRfcGNtMTc5Nl9jb250cm9scyhjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB4b25hcl9zdF9taXhlcl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCkBAIC05NzYsNiArOTQ0LDQ1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGR1bXBfcGNtMTc5Nl9yZWdpc3RlcnMoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHhvbmFyX3BjbTE3OXggKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBkYWMsIGk7CisKKwlmb3IgKGRhYyA9IDA7IGRhYyA8IGRhdGEtPmRhY3M7ICsrZGFjKSB7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuUENNMTc5NiAldToiLCBkYWMgKyAxKTsKKwkJZm9yIChpID0gMDsgaSA8IDU7ICsraSkKKwkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAlMDJ4IiwKKwkJCQkgICAgZGF0YS0+cGNtMTc5Nl9yZWdzW2RhY11baV0pOworCX0KKwlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2NzMjAwMF9yZWdpc3RlcnMoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgeG9uYXJfcGNtMTc5eCAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoZGF0YS0+aGFzX2NzMjAwMCkgeworCQlzbmRfaXByaW50ZihidWZmZXIsICJcbkNTMjAwMDpcbjAwOiAgICIpOworCQlmb3IgKGkgPSAxOyBpIDwgMHgxMDsgKytpKQorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICUwMngiLCBkYXRhLT5jczIwMDBfcmVnc1tpXSk7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuMTA6Iik7CisJCWZvciAoaSA9IDB4MTA7IGkgPCAweDFmOyArK2kpCisJCQlzbmRfaXByaW50ZihidWZmZXIsICIgJTAyeCIsIGRhdGEtPmNzMjAwMF9yZWdzW2ldKTsKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfc3RfcmVnaXN0ZXJzKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJZHVtcF9wY20xNzk2X3JlZ2lzdGVycyhjaGlwLCBidWZmZXIpOworCWR1bXBfY3MyMDAwX3JlZ2lzdGVycyhjaGlwLCBidWZmZXIpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9kMiA9IHsKIAkubG9uZ25hbWUgPSAiQXN1cyBWaXJ0dW9zbyAyMDAiLAogCS5jaGlwID0gIkFWMjAwIiwKQEAgLTk4NSwxMSArOTkyLDExIEBACiAJLmNsZWFudXAgPSB4b25hcl9kMl9jbGVhbnVwLAogCS5zdXNwZW5kID0geG9uYXJfZDJfc3VzcGVuZCwKIAkucmVzdW1lID0geG9uYXJfZDJfcmVzdW1lLAotCS5nZXRfaTJzX21jbGsgPSBnZXRfcGNtMTc5Nl9pMnNfbWNsaywKIAkuc2V0X2RhY19wYXJhbXMgPSBzZXRfcGNtMTc5Nl9wYXJhbXMsCiAJLnNldF9hZGNfcGFyYW1zID0geG9uYXJfc2V0X2NzNTN4MV9wYXJhbXMsCiAJLnVwZGF0ZV9kYWNfdm9sdW1lID0gdXBkYXRlX3BjbTE3OTZfdm9sdW1lLAogCS51cGRhdGVfZGFjX211dGUgPSB1cGRhdGVfcGNtMTc5Nl9tdXRlLAorCS5kdW1wX3JlZ2lzdGVycyA9IGR1bXBfcGNtMTc5Nl9yZWdpc3RlcnMsCiAJLmRhY190bHYgPSBwY20xNzk2X2RiX3NjYWxlLAogCS5tb2RlbF9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHhvbmFyX3BjbTE3OXgpLAogCS5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfApAQCAtOTk5LDEzICsxMDA2LDE2IEBACiAJCQkgTUlESV9PVVRQVVQgfAogCQkJIE1JRElfSU5QVVQgfAogCQkJIEFDOTdfQ0RfSU5QVVQsCi0JLmRhY19jaGFubmVscyA9IDgsCisJLmRhY19jaGFubmVsc19wY20gPSA4LAorCS5kYWNfY2hhbm5lbHNfbWl4ZXIgPSA4LAogCS5kYWNfdm9sdW1lX21pbiA9IDI1NSAtIDIqNjAsCiAJLmRhY192b2x1bWVfbWF4ID0gMjU1LAogCS5taXNjX2ZsYWdzID0gT1hZR0VOX01JU0NfTUlESSwKIAkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fU1BJIHwKIAkJCSAgT1hZR0VOX0ZVTkNUSU9OX0VOQUJMRV9TUElfNF81LAotCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAorCS5kYWNfbWNsa3MgPSBPWFlHRU5fTUNMS1MoNTEyLCAxMjgsIDEyOCksCisJLmFkY19tY2xrcyA9IE9YWUdFTl9NQ0xLUygyNTYsIDEyOCwgMTI4KSwKKwkuZGFjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9JMlMsCiAJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCiB9OwogCkBAIC0xMDE4LDI1ICsxMDI4LDI4IEBACiAJLnN1c3BlbmQgPSB4b25hcl9oZGF2X3N1c3BlbmQsCiAJLnJlc3VtZSA9IHhvbmFyX2hkYXZfcmVzdW1lLAogCS5wY21faGFyZHdhcmVfZmlsdGVyID0geG9uYXJfaGRtaV9wY21faGFyZHdhcmVfZmlsdGVyLAotCS5nZXRfaTJzX21jbGsgPSBnZXRfcGNtMTc5Nl9pMnNfbWNsaywKIAkuc2V0X2RhY19wYXJhbXMgPSBzZXRfaGRhdl9wYXJhbXMsCiAJLnNldF9hZGNfcGFyYW1zID0geG9uYXJfc2V0X2NzNTN4MV9wYXJhbXMsCiAJLnVwZGF0ZV9kYWNfdm9sdW1lID0gdXBkYXRlX3BjbTE3OTZfdm9sdW1lLAogCS51cGRhdGVfZGFjX211dGUgPSB1cGRhdGVfcGNtMTc5Nl9tdXRlLAogCS51YXJ0X2lucHV0ID0geG9uYXJfaGRtaV91YXJ0X2lucHV0LAogCS5hYzk3X3N3aXRjaCA9IHhvbmFyX2xpbmVfbWljX2FjOTdfc3dpdGNoLAorCS5kdW1wX3JlZ2lzdGVycyA9IGR1bXBfcGNtMTc5Nl9yZWdpc3RlcnMsCiAJLmRhY190bHYgPSBwY20xNzk2X2RiX3NjYWxlLAogCS5tb2RlbF9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHhvbmFyX2hkYXYpLAogCS5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAogCQkJIFBMQVlCQUNLXzFfVE9fU1BESUYgfAogCQkJIENBUFRVUkVfMF9GUk9NX0kyU18yIHwKIAkJCSBDQVBUVVJFXzFfRlJPTV9TUERJRiwKLQkuZGFjX2NoYW5uZWxzID0gOCwKKwkuZGFjX2NoYW5uZWxzX3BjbSA9IDgsCisJLmRhY19jaGFubmVsc19taXhlciA9IDIsCiAJLmRhY192b2x1bWVfbWluID0gMjU1IC0gMio2MCwKIAkuZGFjX3ZvbHVtZV9tYXggPSAyNTUsCiAJLm1pc2NfZmxhZ3MgPSBPWFlHRU5fTUlTQ19NSURJLAogCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl8yV0lSRSwKLQkuZGFjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKKwkuZGFjX21jbGtzID0gT1hZR0VOX01DTEtTKDUxMiwgMTI4LCAxMjgpLAorCS5hZGNfbWNsa3MgPSBPWFlHRU5fTUNMS1MoMjU2LCAxMjgsIDEyOCksCisJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfSTJTLAogCS5hZGNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogfTsKIApAQCAtMTA0OCwyMiArMTA2MSwyNiBAQAogCS5jbGVhbnVwID0geG9uYXJfc3RfY2xlYW51cCwKIAkuc3VzcGVuZCA9IHhvbmFyX3N0X3N1c3BlbmQsCiAJLnJlc3VtZSA9IHhvbmFyX3N0X3Jlc3VtZSwKLQkuZ2V0X2kyc19tY2xrID0gZ2V0X3BjbTE3OTZfaTJzX21jbGssCiAJLnNldF9kYWNfcGFyYW1zID0gc2V0X3N0X3BhcmFtcywKIAkuc2V0X2FkY19wYXJhbXMgPSB4b25hcl9zZXRfY3M1M3gxX3BhcmFtcywKIAkudXBkYXRlX2RhY192b2x1bWUgPSB1cGRhdGVfcGNtMTc5Nl92b2x1bWUsCiAJLnVwZGF0ZV9kYWNfbXV0ZSA9IHVwZGF0ZV9wY20xNzk2X211dGUsCiAJLmFjOTdfc3dpdGNoID0geG9uYXJfbGluZV9taWNfYWM5N19zd2l0Y2gsCisJLmR1bXBfcmVnaXN0ZXJzID0gZHVtcF9zdF9yZWdpc3RlcnMsCiAJLmRhY190bHYgPSBwY20xNzk2X2RiX3NjYWxlLAogCS5tb2RlbF9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHhvbmFyX3BjbTE3OXgpLAogCS5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAogCQkJIFBMQVlCQUNLXzFfVE9fU1BESUYgfAotCQkJIENBUFRVUkVfMF9GUk9NX0kyU18yLAotCS5kYWNfY2hhbm5lbHMgPSAyLAorCQkJIENBUFRVUkVfMF9GUk9NX0kyU18yIHwKKwkJCSBBQzk3X0ZNSUNfU1dJVENILAorCS5kYWNfY2hhbm5lbHNfcGNtID0gMiwKKwkuZGFjX2NoYW5uZWxzX21peGVyID0gMiwKIAkuZGFjX3ZvbHVtZV9taW4gPSAyNTUgLSAyKjYwLAogCS5kYWNfdm9sdW1lX21heCA9IDI1NSwKIAkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fMldJUkUsCi0JLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCisJLmRhY19tY2xrcyA9IE9YWUdFTl9NQ0xLUyg1MTIsIDEyOCwgMTI4KSwKKwkuYWRjX21jbGtzID0gT1hZR0VOX01DTEtTKDI1NiwgMTI4LCAxMjgpLAorCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0kyUywKIAkuYWRjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKIH07CiAKQEAgLTEwODksNyArMTEwNiw4IEBACiAJCQlicmVhazsKIAkJY2FzZSBHUElPX0RCX0g2OgogCQkJY2hpcC0+bW9kZWwuc2hvcnRuYW1lID0gIlhvbmFyIEhEQVYxLjMrSDYiOwotCQkJY2hpcC0+bW9kZWwucHJpdmF0ZV9kYXRhID0gMTsKKwkJCWNoaXAtPm1vZGVsLmRhY19jaGFubmVsc19taXhlciA9IDg7CisJCQljaGlwLT5tb2RlbC5kYWNfbWNsa3MgPSBPWFlHRU5fTUNMS1MoMjU2LCAxMjgsIDEyOCk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTExMDIsOCArMTEyMCwxMCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgR1BJT19EQl9INjoKIAkJCWNoaXAtPm1vZGVsLnNob3J0bmFtZSA9ICJYb25hciBTVCtINiI7Ci0JCQljaGlwLT5tb2RlbC5kYWNfY2hhbm5lbHMgPSA4OwotCQkJY2hpcC0+bW9kZWwucHJpdmF0ZV9kYXRhID0gMTsKKwkJCWNoaXAtPm1vZGVsLmNvbnRyb2xfZmlsdGVyID0geG9uYXJfc3RfaDZfY29udHJvbF9maWx0ZXI7CisJCQljaGlwLT5tb2RlbC5kYWNfY2hhbm5lbHNfcGNtID0gODsKKwkJCWNoaXAtPm1vZGVsLmRhY19jaGFubmVsc19taXhlciA9IDg7CisJCQljaGlwLT5tb2RlbC5kYWNfbWNsa3MgPSBPWFlHRU5fTUNMS1MoMjU2LCAxMjgsIDEyOCk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTExMTQsOSArMTEzNCw2IEBACiAJCWNoaXAtPm1vZGVsLnJlc3VtZSA9IHhvbmFyX3N0eF9yZXN1bWU7CiAJCWNoaXAtPm1vZGVsLnNldF9kYWNfcGFyYW1zID0gc2V0X3BjbTE3OTZfcGFyYW1zOwogCQlicmVhazsKLQljYXNlIDB4ODM1ZToKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAidGhlIEhEQVYxLjMgU2xpbSBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi94b25hcl93bTg3eDYuYyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfd204N3g2LmMKaW5kZXggMjAwZjc2MC4uNDJkMWFiMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi94b25hcl93bTg3eDYuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX3dtODd4Ni5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGNhcmQgZHJpdmVyIGZvciBtb2RlbHMgd2l0aCBXTTg3NzYvV004NzY2IERBQ3MgKFhvbmFyIERTKQorICogY2FyZCBkcml2ZXIgZm9yIG1vZGVscyB3aXRoIFdNODc3Ni9XTTg3NjYgREFDcyAoWG9uYXIgRFMvSERBVjEuMyBTbGltKQogICoKICAqIENvcHlyaWdodCAoYykgQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CiAgKgpAQCAtMjIsMjYgKzIyLDQ4IEBACiAgKgogICogQ01JODc4ODoKICAqCi0gKiBTUEkgMCAtPiBXTTg3NjYgKHN1cnJvdW5kLCBjZW50ZXIvTEZFLCBiYWNrKQotICogU1BJIDEgLT4gV004Nzc2IChmcm9udCwgaW5wdXQpCisgKiAgIFNQSSAwIC0+IFdNODc2NiAoc3Vycm91bmQsIGNlbnRlci9MRkUsIGJhY2spCisgKiAgIFNQSSAxIC0+IFdNODc3NiAoZnJvbnQsIGlucHV0KQogICoKLSAqIEdQSU8gNCA8LSBoZWFkcGhvbmUgZGV0ZWN0LCAwID0gcGx1Z2dlZAotICogR1BJTyA2IC0+IHJvdXRlIGlucHV0IGphY2sgdG8gbWljLWluICgwKSBvciBsaW5lLWluICgxKQotICogR1BJTyA3IC0+IGVuYWJsZSBvdXRwdXQgdG8gZnJvbnQgTC9SIHNwZWFrZXIgY2hhbm5lbHMKLSAqIEdQSU8gOCAtPiBlbmFibGUgb3V0cHV0IHRvIG90aGVyIHNwZWFrZXIgY2hhbm5lbHMgYW5kIGZyb250IHBhbmVsIGhlYWRwaG9uZQorICogICBHUElPIDQgPC0gaGVhZHBob25lIGRldGVjdCwgMCA9IHBsdWdnZWQKKyAqICAgR1BJTyA2IC0+IHJvdXRlIGlucHV0IGphY2sgdG8gbWljLWluICgwKSBvciBsaW5lLWluICgxKQorICogICBHUElPIDcgLT4gZW5hYmxlIG91dHB1dCB0byBmcm9udCBML1Igc3BlYWtlciBjaGFubmVscworICogICBHUElPIDggLT4gZW5hYmxlIG91dHB1dCB0byBvdGhlciBzcGVha2VyIGNoYW5uZWxzIGFuZCBmcm9udCBwYW5lbCBoZWFkcGhvbmUKICAqCi0gKiBXTTg3NjY6CisgKiBXTTg3NzY6CiAgKgotICogaW5wdXQgMSA8LSBsaW5lCi0gKiBpbnB1dCAyIDwtIG1pYwotICogaW5wdXQgMyA8LSBmcm9udCBtaWMKLSAqIGlucHV0IDQgPC0gYXV4CisgKiAgIGlucHV0IDEgPC0gbGluZQorICogICBpbnB1dCAyIDwtIG1pYworICogICBpbnB1dCAzIDwtIGZyb250IG1pYworICogICBpbnB1dCA0IDwtIGF1eAorICovCisKKy8qCisgKiBYb25hciBIREFWMS4zIFNsaW0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIENNSTg3ODg6CisgKgorICogICBJwrJDIDwtPiBXTTg3NzYgKGFkZHIgMDAxMTAxMCkKKyAqCisgKiAgIEdQSU8gMCAgLT4gZGlzYWJsZSBIRE1JIG91dHB1dAorICogICBHUElPIDEgIC0+IGVuYWJsZSBIUCBvdXRwdXQKKyAqICAgR1BJTyA2ICAtPiBmaXJtd2FyZSBFRVBST00gScKyQyBjbG9jaworICogICBHUElPIDcgPC0+IGZpcm13YXJlIEVFUFJPTSBJwrJDIGRhdGEKKyAqCisgKiAgIFVBUlQgPC0+IEhETUkgY29udHJvbGxlcgorICoKKyAqIFdNODc3NjoKKyAqCisgKiAgIGlucHV0IDEgPC0gbWljCisgKiAgIGlucHV0IDIgPC0gYXV4CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAjaW5jbHVkZSA8c291bmQvamFjay5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KQEAgLTU1LDYgKzc3LDEzIEBACiAjZGVmaW5lIEdQSU9fRFNfT1VUUFVUX0ZST05UTFIJMHgwMDgwCiAjZGVmaW5lIEdQSU9fRFNfT1VUUFVUX0VOQUJMRQkweDAxMDAKIAorI2RlZmluZSBHUElPX1NMSU1fSERNSV9ESVNBQkxFCTB4MDAwMQorI2RlZmluZSBHUElPX1NMSU1fT1VUUFVUX0VOQUJMRQkweDAwMDIKKyNkZWZpbmUgR1BJT19TTElNX0ZJUk1XQVJFX0NMSwkweDAwNDAKKyNkZWZpbmUgR1BJT19TTElNX0ZJUk1XQVJFX0RBVEEJMHgwMDgwCisKKyNkZWZpbmUgSTJDX0RFVklDRV9XTTg3NzYJMHgzNAkvKiAwMDExMDEsIDAsIC9XPTAgKi8KKwogI2RlZmluZSBMQ19DT05UUk9MX0xJTUlURVIJMHg0MDAwMDAwMAogI2RlZmluZSBMQ19DT05UUk9MX0FMQwkJMHgyMDAwMDAwMAogCkBAIC02NiwxOSArOTUsMzcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICptaWNfYWRjbXV4X2NvbnRyb2w7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqbGNfY29udHJvbHNbMTNdOwogCXN0cnVjdCBzbmRfamFjayAqaHBfamFjazsKKwlzdHJ1Y3QgeG9uYXJfaGRtaSBoZG1pOwogfTsKIAotc3RhdGljIHZvaWQgd204Nzc2X3dyaXRlKHN0cnVjdCBveHlnZW4gKmNoaXAsCi0JCQkgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQorc3RhdGljIHZvaWQgd204Nzc2X3dyaXRlX3NwaShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7Ci0Jc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7Ci0KIAlveHlnZW5fd3JpdGVfc3BpKGNoaXAsIE9YWUdFTl9TUElfVFJJR0dFUiB8CiAJCQkgT1hZR0VOX1NQSV9EQVRBX0xFTkdUSF8yIHwKIAkJCSBPWFlHRU5fU1BJX0NMT0NLXzE2MCB8CiAJCQkgKDEgPDwgT1hZR0VOX1NQSV9DT0RFQ19TSElGVCkgfAogCQkJIE9YWUdFTl9TUElfQ0VOX0xBVENIX0NMT0NLX0xPLAogCQkJIChyZWcgPDwgOSkgfCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODc3Nl93cml0ZV9pMmMoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQoreworCW94eWdlbl93cml0ZV9pMmMoY2hpcCwgSTJDX0RFVklDRV9XTTg3NzYsCisJCQkgKHJlZyA8PCAxKSB8ICh2YWx1ZSA+PiA4KSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCB3bTg3NzZfd3JpdGUoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCSB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlpZiAoKGNoaXAtPm1vZGVsLmZ1bmN0aW9uX2ZsYWdzICYgT1hZR0VOX0ZVTkNUSU9OXzJXSVJFX1NQSV9NQVNLKSA9PQorCSAgICBPWFlHRU5fRlVOQ1RJT05fU1BJKQorCQl3bTg3NzZfd3JpdGVfc3BpKGNoaXAsIHJlZywgdmFsdWUpOworCWVsc2UKKwkJd204Nzc2X3dyaXRlX2kyYyhjaGlwLCByZWcsIHZhbHVlKTsKIAlpZiAocmVnIDwgQVJSQVlfU0laRShkYXRhLT53bTg3NzZfcmVncykpIHsKIAkJaWYgKHJlZyA+PSBXTTg3NzZfSFBMVk9MICYmIHJlZyA8PSBXTTg3NzZfREFDTUFTVEVSKQogCQkJdmFsdWUgJj0gfldNODc3Nl9VUERBVEU7CkBAIC0yNDUsMTcgKzI5Miw1MCBAQAogCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJXTTg3NjYiKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfaGRhdl9zbGltX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCWRhdGEtPmdlbmVyaWMuYW50aV9wb3BfZGVsYXkgPSAzMDA7CisJZGF0YS0+Z2VuZXJpYy5vdXRwdXRfZW5hYmxlX2JpdCA9IEdQSU9fU0xJTV9PVVRQVVRfRU5BQkxFOworCisJd204Nzc2X2luaXQoY2hpcCk7CisKKwlveHlnZW5fc2V0X2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAorCQkJICBHUElPX1NMSU1fSERNSV9ESVNBQkxFIHwKKwkJCSAgR1BJT19TTElNX0ZJUk1XQVJFX0NMSyB8CisJCQkgIEdQSU9fU0xJTV9GSVJNV0FSRV9EQVRBKTsKKworCXhvbmFyX2hkbWlfaW5pdChjaGlwLCAmZGF0YS0+aGRtaSk7CisJeG9uYXJfZW5hYmxlX291dHB1dChjaGlwKTsKKworCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJXTTg3NzYiKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfZHNfY2xlYW51cChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXhvbmFyX2Rpc2FibGVfb3V0cHV0KGNoaXApOwogCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfUkVTRVQsIDApOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9oZGF2X3NsaW1fY2xlYW51cChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXhvbmFyX2hkbWlfY2xlYW51cChjaGlwKTsKKwl4b25hcl9kaXNhYmxlX291dHB1dChjaGlwKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X1JFU0VULCAwKTsKKwltc2xlZXAoMik7Cit9CisKIHN0YXRpYyB2b2lkIHhvbmFyX2RzX3N1c3BlbmQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAl4b25hcl9kc19jbGVhbnVwKGNoaXApOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9oZGF2X3NsaW1fc3VzcGVuZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXhvbmFyX2hkYXZfc2xpbV9jbGVhbnVwKGNoaXApOworfQorCiBzdGF0aWMgdm9pZCB4b25hcl9kc19yZXN1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAl3bTg3NzZfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CkBAIC0yNjQsNiArMzQ0LDE1IEBACiAJeG9uYXJfZHNfaGFuZGxlX2hwX2phY2soY2hpcCk7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX2hkYXZfc2xpbV9yZXN1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCXdtODc3Nl9yZWdpc3RlcnNfaW5pdChjaGlwKTsKKwl4b25hcl9oZG1pX3Jlc3VtZShjaGlwLCAmZGF0YS0+aGRtaSk7CisJeG9uYXJfZW5hYmxlX291dHB1dChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgd204Nzc2X2FkY19oYXJkd2FyZV9maWx0ZXIodW5zaWduZWQgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlICpoYXJkd2FyZSkKIHsKQEAgLTI3OCw2ICszNjcsMTMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX2hkYXZfc2xpbV9oYXJkd2FyZV9maWx0ZXIodW5zaWduZWQgaW50IGNoYW5uZWwsCisJCQkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSAqaGFyZHdhcmUpCit7CisJd204Nzc2X2FkY19oYXJkd2FyZV9maWx0ZXIoY2hhbm5lbCwgaGFyZHdhcmUpOworCXhvbmFyX2hkbWlfcGNtX2hhcmR3YXJlX2ZpbHRlcihjaGFubmVsLCBoYXJkd2FyZSk7Cit9CisKIHN0YXRpYyB2b2lkIHNldF93bTg3eDZfZGFjX3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CkBAIC0yOTQsNiArMzkwLDE0IEBACiAJd204Nzc2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NzZfTVNUUkNUUkwsIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldF9oZGF2X3NsaW1fZGFjX3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwl4b25hcl9zZXRfaGRtaV9wYXJhbXMoY2hpcCwgJmRhdGEtPmhkbWksIHBhcmFtcyk7Cit9CisKIHN0YXRpYyB2b2lkIHVwZGF0ZV93bTg3NzZfdm9sdW1lKHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CkBAIC00NzMsMTEgKzU3Nyw2IEBACiAJY29uc3QgY2hhciAqY29uc3QgKm5hbWVzOwogCiAJbWF4ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiAweGY7Ci0JaW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKLQlpbmZvLT5jb3VudCA9IDE7Ci0JaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IG1heCArIDE7Ci0JaWYgKGluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+IG1heCkKLQkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gbWF4OwogCXN3aXRjaCAoKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAyNCkgJiAweDFmKSB7CiAJY2FzZSBXTTg3NzZfQUxDQ1RSTDI6CiAJCW5hbWVzID0gaGxkOwpAQCAtNTAxLDggKzYwMCw3IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0Jc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNuZF9jdGxfZW51bV9pbmZvKGluZm8sIDEsIG1heCArIDEsIG5hbWVzKTsKIH0KIAogc3RhdGljIGludCB3bTg3NzZfZmllbGRfdm9sdW1lX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLApAQCAtNzU5LDEzICs4NTcsOCBAQAogCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1szXSA9IHsKIAkJIk5vbmUiLCAiUGVhayBMaW1pdGVyIiwgIkF1dG9tYXRpYyBMZXZlbCBDb250cm9sIgogCX07Ci0JaW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKLQlpbmZvLT5jb3VudCA9IDE7Ci0JaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7Ci0JaWYgKGluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSAzKQotCQlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSAyOwotCXN0cmNweShpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIG5hbWVzW2luZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwotCXJldHVybiAwOworCisJcmV0dXJuIHNuZF9jdGxfZW51bV9pbmZvKGluZm8sIDEsIDMsIG5hbWVzKTsKIH0KIAogc3RhdGljIGludCB3bTg3NzZfbGV2ZWxfY29udHJvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLApAQCAtODUxLDEzICs5NDQsNyBAQAogCQkiTm9uZSIsICJIaWdoLXBhc3MgRmlsdGVyIgogCX07CiAKLQlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwotCWluZm8tPmNvdW50ID0gMTsKLQlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMjsKLQlpZiAoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IDIpCi0JCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDE7Ci0Jc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNuZF9jdGxfZW51bV9pbmZvKGluZm8sIDEsIDIsIG5hbWVzKTsKIH0KIAogc3RhdGljIGludCBocGZfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCkBAIC05ODUsNiArMTA3Miw1MyBAQAogCQkucHJpdmF0ZV92YWx1ZSA9IDAsCiAJfSwKIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaGRhdl9zbGltX2NvbnRyb2xzW10gPSB7CisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiSERNSSBQbGF5YmFjayBTd2l0Y2giLAorCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCisJCS5nZXQgPSB4b25hcl9ncGlvX2JpdF9zd2l0Y2hfZ2V0LAorCQkucHV0ID0geG9uYXJfZ3Bpb19iaXRfc3dpdGNoX3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSBHUElPX1NMSU1fSERNSV9ESVNBQkxFIHwgWE9OQVJfR1BJT19CSVRfSU5WRVJULAorCX0sCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsCisJCS5pbmZvID0gd204Nzc2X2hwX3ZvbF9pbmZvLAorCQkuZ2V0ID0gd204Nzc2X2hwX3ZvbF9nZXQsCisJCS5wdXQgPSB3bTg3NzZfaHBfdm9sX3B1dCwKKwkJLnRsdiA9IHsgLnAgPSB3bTg3NzZfaHBfZGJfc2NhbGUgfSwKKwl9LAorCVdNODc3Nl9CSVRfU1dJVENIKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwKKwkJCSAgV004Nzc2X1BXUkRPV04sIFdNODc3Nl9IUFBELCAxLCAwKSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJJbnB1dCBDYXB0dXJlIFZvbHVtZSIsCisJCS5pbmZvID0gd204Nzc2X2lucHV0X3ZvbF9pbmZvLAorCQkuZ2V0ID0gd204Nzc2X2lucHV0X3ZvbF9nZXQsCisJCS5wdXQgPSB3bTg3NzZfaW5wdXRfdm9sX3B1dCwKKwkJLnRsdiA9IHsgLnAgPSB3bTg3NzZfYWRjX2RiX3NjYWxlIH0sCisJfSwKKwlXTTg3NzZfQklUX1NXSVRDSCgiTWljIENhcHR1cmUgU3dpdGNoIiwKKwkJCSAgV004Nzc2X0FEQ01VWCwgMSA8PCAwLCAwLCAwKSwKKwlXTTg3NzZfQklUX1NXSVRDSCgiQXV4IENhcHR1cmUgU3dpdGNoIiwKKwkJCSAgV004Nzc2X0FEQ01VWCwgMSA8PCAxLCAwLCAwKSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJBREMgRmlsdGVyIENhcHR1cmUgRW51bSIsCisJCS5pbmZvID0gaHBmX2luZm8sCisJCS5nZXQgPSBocGZfZ2V0LAorCQkucHV0ID0gaHBmX3B1dCwKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkxldmVsIENvbnRyb2wgQ2FwdHVyZSBFbnVtIiwKKwkJLmluZm8gPSB3bTg3NzZfbGV2ZWxfY29udHJvbF9pbmZvLAorCQkuZ2V0ID0gd204Nzc2X2xldmVsX2NvbnRyb2xfZ2V0LAorCQkucHV0ID0gd204Nzc2X2xldmVsX2NvbnRyb2xfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IDAsCisJfSwKK307CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGNfY29udHJvbHNbXSA9IHsKIAlXTTg3NzZfRklFTERfQ1RMX1ZPTFVNRSgiTGltaXRlciBUaHJlc2hvbGQiLAogCQkJCVdNODc3Nl9BTENDVFJMMSwgMCwgMTEsIDAsIDE1LCAweGYsCkBAIC0xMDI4LDYgKzExNjIsMjYgQEAKIAkJCQlMQ19DT05UUk9MX0FMQywgd204Nzc2X25ndGhfZGJfc2NhbGUpLAogfTsKIAorc3RhdGljIGludCBhZGRfbGNfY29udHJvbHMoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGw7CisJaW50IGVycjsKKworCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGxjX2NvbnRyb2xzKSAhPSBBUlJBWV9TSVpFKGRhdGEtPmxjX2NvbnRyb2xzKSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGNfY29udHJvbHMpOyArK2kpIHsKKwkJY3RsID0gc25kX2N0bF9uZXcxKCZsY19jb250cm9sc1tpXSwgY2hpcCk7CisJCWlmICghY3RsKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGN0bCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZGF0YS0+bGNfY29udHJvbHNbaV0gPSBjdGw7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHhvbmFyX2RzX21peGVyX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKQEAgLTEwNDksMTcgKzEyMDMsNTQgQEAKIAl9CiAJaWYgKCFkYXRhLT5saW5lX2FkY211eF9jb250cm9sIHx8ICFkYXRhLT5taWNfYWRjbXV4X2NvbnRyb2wpCiAJCXJldHVybiAtRU5YSU87Ci0JQlVJTERfQlVHX09OKEFSUkFZX1NJWkUobGNfY29udHJvbHMpICE9IEFSUkFZX1NJWkUoZGF0YS0+bGNfY29udHJvbHMpKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsY19jb250cm9scyk7ICsraSkgewotCQljdGwgPSBzbmRfY3RsX25ldzEoJmxjX2NvbnRyb2xzW2ldLCBjaGlwKTsKKworCXJldHVybiBhZGRfbGNfY29udHJvbHMoY2hpcCk7Cit9CisKK3N0YXRpYyBpbnQgeG9uYXJfaGRhdl9zbGltX21peGVyX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGw7CisJaW50IGVycjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhkYXZfc2xpbV9jb250cm9scyk7ICsraSkgeworCQljdGwgPSBzbmRfY3RsX25ldzEoJmhkYXZfc2xpbV9jb250cm9sc1tpXSwgY2hpcCk7CiAJCWlmICghY3RsKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGN0bCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJZGF0YS0+bGNfY29udHJvbHNbaV0gPSBjdGw7CiAJfQotCXJldHVybiAwOworCisJcmV0dXJuIGFkZF9sY19jb250cm9scyhjaGlwKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF93bTg3NzZfcmVnaXN0ZXJzKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdW5zaWduZWQgaW50IGk7CisKKwlzbmRfaXByaW50ZihidWZmZXIsICJcbldNODc3NjpcbjAwOiIpOworCWZvciAoaSA9IDA7IGkgPCAweDEwOyArK2kpCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAlMDN4IiwgZGF0YS0+d204Nzc2X3JlZ3NbaV0pOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuMTA6Iik7CisJZm9yIChpID0gMHgxMDsgaSA8IDB4MTc7ICsraSkKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiICUwM3giLCBkYXRhLT53bTg3NzZfcmVnc1tpXSk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF93bTg3eDZfcmVnaXN0ZXJzKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdW5zaWduZWQgaW50IGk7CisKKwlkdW1wX3dtODc3Nl9yZWdpc3RlcnMoY2hpcCwgYnVmZmVyKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJcbldNODc2NjpcbjAwOiIpOworCWZvciAoaSA9IDA7IGkgPCAweDEwOyArK2kpCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAlMDN4IiwgZGF0YS0+d204NzY2X3JlZ3NbaV0pOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX2RzID0gewpAQCAtMTA3MiwyMiArMTI2Myw1NyBAQAogCS5zdXNwZW5kID0geG9uYXJfZHNfc3VzcGVuZCwKIAkucmVzdW1lID0geG9uYXJfZHNfcmVzdW1lLAogCS5wY21faGFyZHdhcmVfZmlsdGVyID0gd204Nzc2X2FkY19oYXJkd2FyZV9maWx0ZXIsCi0JLmdldF9pMnNfbWNsayA9IG94eWdlbl9kZWZhdWx0X2kyc19tY2xrLAogCS5zZXRfZGFjX3BhcmFtcyA9IHNldF93bTg3eDZfZGFjX3BhcmFtcywKIAkuc2V0X2FkY19wYXJhbXMgPSBzZXRfd204Nzc2X2FkY19wYXJhbXMsCiAJLnVwZGF0ZV9kYWNfdm9sdW1lID0gdXBkYXRlX3dtODd4Nl92b2x1bWUsCiAJLnVwZGF0ZV9kYWNfbXV0ZSA9IHVwZGF0ZV93bTg3eDZfbXV0ZSwKIAkudXBkYXRlX2NlbnRlcl9sZmVfbWl4ID0gdXBkYXRlX3dtODc2Nl9jZW50ZXJfbGZlX21peCwKIAkuZ3Bpb19jaGFuZ2VkID0geG9uYXJfZHNfZ3Bpb19jaGFuZ2VkLAorCS5kdW1wX3JlZ2lzdGVycyA9IGR1bXBfd204N3g2X3JlZ2lzdGVycywKIAkuZGFjX3RsdiA9IHdtODd4Nl9kYWNfZGJfc2NhbGUsCiAJLm1vZGVsX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgeG9uYXJfd204N3g2KSwKIAkuZGV2aWNlX2NvbmZpZyA9IFBMQVlCQUNLXzBfVE9fSTJTIHwKIAkJCSBQTEFZQkFDS18xX1RPX1NQRElGIHwKIAkJCSBDQVBUVVJFXzBfRlJPTV9JMlNfMSwKLQkuZGFjX2NoYW5uZWxzID0gOCwKKwkuZGFjX2NoYW5uZWxzX3BjbSA9IDgsCisJLmRhY19jaGFubmVsc19taXhlciA9IDgsCiAJLmRhY192b2x1bWVfbWluID0gMjU1IC0gMio2MCwKIAkuZGFjX3ZvbHVtZV9tYXggPSAyNTUsCiAJLmZ1bmN0aW9uX2ZsYWdzID0gT1hZR0VOX0ZVTkNUSU9OX1NQSSwKKwkuZGFjX21jbGtzID0gT1hZR0VOX01DTEtTKDI1NiwgMjU2LCAxMjgpLAorCS5hZGNfbWNsa3MgPSBPWFlHRU5fTUNMS1MoMjU2LCAyNTYsIDEyOCksCisJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCisJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9oZGF2X3NsaW0gPSB7CisJLnNob3J0bmFtZSA9ICJYb25hciBIREFWMS4zIFNsaW0iLAorCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDIwMCIsCisJLmNoaXAgPSAiQVYyMDAiLAorCS5pbml0ID0geG9uYXJfaGRhdl9zbGltX2luaXQsCisJLm1peGVyX2luaXQgPSB4b25hcl9oZGF2X3NsaW1fbWl4ZXJfaW5pdCwKKwkuY2xlYW51cCA9IHhvbmFyX2hkYXZfc2xpbV9jbGVhbnVwLAorCS5zdXNwZW5kID0geG9uYXJfaGRhdl9zbGltX3N1c3BlbmQsCisJLnJlc3VtZSA9IHhvbmFyX2hkYXZfc2xpbV9yZXN1bWUsCisJLnBjbV9oYXJkd2FyZV9maWx0ZXIgPSB4b25hcl9oZGF2X3NsaW1faGFyZHdhcmVfZmlsdGVyLAorCS5zZXRfZGFjX3BhcmFtcyA9IHNldF9oZGF2X3NsaW1fZGFjX3BhcmFtcywKKwkuc2V0X2FkY19wYXJhbXMgPSBzZXRfd204Nzc2X2FkY19wYXJhbXMsCisJLnVwZGF0ZV9kYWNfdm9sdW1lID0gdXBkYXRlX3dtODc3Nl92b2x1bWUsCisJLnVwZGF0ZV9kYWNfbXV0ZSA9IHVwZGF0ZV93bTg3NzZfbXV0ZSwKKwkudWFydF9pbnB1dCA9IHhvbmFyX2hkbWlfdWFydF9pbnB1dCwKKwkuZHVtcF9yZWdpc3RlcnMgPSBkdW1wX3dtODc3Nl9yZWdpc3RlcnMsCisJLmRhY190bHYgPSB3bTg3eDZfZGFjX2RiX3NjYWxlLAorCS5tb2RlbF9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHhvbmFyX3dtODd4NiksCisJLmRldmljZV9jb25maWcgPSBQTEFZQkFDS18wX1RPX0kyUyB8CisJCQkgUExBWUJBQ0tfMV9UT19TUERJRiB8CisJCQkgQ0FQVFVSRV8wX0ZST01fSTJTXzEsCisJLmRhY19jaGFubmVsc19wY20gPSA4LAorCS5kYWNfY2hhbm5lbHNfbWl4ZXIgPSAyLAorCS5kYWNfdm9sdW1lX21pbiA9IDI1NSAtIDIqNjAsCisJLmRhY192b2x1bWVfbWF4ID0gMjU1LAorCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl8yV0lSRSwKKwkuZGFjX21jbGtzID0gT1hZR0VOX01DTEtTKDI1NiwgMjU2LCAxMjgpLAorCS5hZGNfbWNsa3MgPSBPWFlHRU5fTUNMS1MoMjU2LCAyNTYsIDEyOCksCiAJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCiAJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCiB9OwpAQCAtMTA5OSw2ICsxMzI1LDkgQEAKIAljYXNlIDB4ODM4ZToKIAkJY2hpcC0+bW9kZWwgPSBtb2RlbF94b25hcl9kczsKIAkJYnJlYWs7CisJY2FzZSAweDgzNWU6CisJCWNoaXAtPm1vZGVsID0gbW9kZWxfeG9uYXJfaGRhdl9zbGltOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKaW5kZXggMGI3MjBjZi4uMmQ4MzMyNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwpAQCAtNjAsNiArNjAsNyBAQAogCSAgICAgICAgIntSTUUgSERTUC05NjUyfSwiCiAJCSJ7Uk1FIEhEU1AtOTYzMn19Iik7CiAjaWZkZWYgSERTUF9GV19MT0FERVIKK01PRFVMRV9GSVJNV0FSRSgicnBtX2Zpcm13YXJlLmJpbiIpOwogTU9EVUxFX0ZJUk1XQVJFKCJtdWx0aWZhY2VfZmlybXdhcmUuYmluIik7CiBNT0RVTEVfRklSTVdBUkUoIm11bHRpZmFjZV9maXJtd2FyZV9yZXYxMS5iaW4iKTsKIE1PRFVMRV9GSVJNV0FSRSgiZGlnaWZhY2VfZmlybXdhcmUuYmluIik7CkBAIC04MSw2ICs4Miw3IEBACiAjZGVmaW5lIEg5NjMyX1NTX0NIQU5ORUxTCSAxMgogI2RlZmluZSBIOTYzMl9EU19DSEFOTkVMUwkgOAogI2RlZmluZSBIOTYzMl9RU19DSEFOTkVMUwkgNAorI2RlZmluZSBSUE1fQ0hBTk5FTFMgICAgICAgICAgICAgNgogCiAvKiBXcml0ZSByZWdpc3RlcnMuIFRoZXNlIGFyZSBkZWZpbmVkIGFzIGJ5dGUtb2Zmc2V0cyBmcm9tIHRoZSBpb2Jhc2UgdmFsdWUuCiAgKi8KQEAgLTE5MSw2ICsxOTMsMjUgQEAKICNkZWZpbmUgSERTUF9QaG9uZUdhaW4xCQkgICgxPDwzMCkKICNkZWZpbmUgSERTUF9RdWFkU3BlZWQJICAJICAoMTw8MzEpCiAKKy8qIFJQTSB1c2VzIHNvbWUgb2YgdGhlIHJlZ2lzdGVycyBmb3Igc3BlY2lhbCBwdXJwb3NlcyAqLworI2RlZmluZSBIRFNQX1JQTV9JbnAxMiAgICAgICAgICAgIDB4MDRBMDAKKyNkZWZpbmUgSERTUF9SUE1fSW5wMTJfUGhvbl82ZEIgICAweDAwODAwICAvKiBEb2xieSAqLworI2RlZmluZSBIRFNQX1JQTV9JbnAxMl9QaG9uXzBkQiAgIDB4MDAwMDAgIC8qIC4uICovCisjZGVmaW5lIEhEU1BfUlBNX0lucDEyX1Bob25fbjZkQiAgMHgwNDAwMCAgLyogaW5wXzAgKi8KKyNkZWZpbmUgSERTUF9SUE1fSW5wMTJfTGluZV8wZEIgICAweDA0MjAwICAvKiBEb2xieStQUk8gKi8KKyNkZWZpbmUgSERTUF9SUE1fSW5wMTJfTGluZV9uNmRCICAweDAwMjAwICAvKiBQUk8gKi8KKworI2RlZmluZSBIRFNQX1JQTV9JbnAzNCAgICAgICAgICAgIDB4MzIwMDAKKyNkZWZpbmUgSERTUF9SUE1fSW5wMzRfUGhvbl82ZEIgICAweDIwMDAwICAvKiBTeW5jUmVmMSAqLworI2RlZmluZSBIRFNQX1JQTV9JbnAzNF9QaG9uXzBkQiAgIDB4MDAwMDAgIC8qIC4uICovCisjZGVmaW5lIEhEU1BfUlBNX0lucDM0X1Bob25fbjZkQiAgMHgwMjAwMCAgLyogU3luY1JlZjIgKi8KKyNkZWZpbmUgSERTUF9SUE1fSW5wMzRfTGluZV8wZEIgICAweDMwMDAwICAvKiBTeW5jUmVmMStTeW5jUmVmMCAqLworI2RlZmluZSBIRFNQX1JQTV9JbnAzNF9MaW5lX242ZEIgIDB4MTAwMDAgIC8qIFN5bmNSZWYwICovCisKKyNkZWZpbmUgSERTUF9SUE1fQnlwYXNzICAgICAgICAgICAweDAxMDAwCisKKyNkZWZpbmUgSERTUF9SUE1fRGlzY29ubmVjdCAgICAgICAweDAwMDAxCisKICNkZWZpbmUgSERTUF9BREdhaW5NYXNrICAgICAgIChIRFNQX0FER2FpbjB8SERTUF9BREdhaW4xKQogI2RlZmluZSBIRFNQX0FER2Fpbk1pbnVzMTBkQlYgIEhEU1BfQURHYWluTWFzawogI2RlZmluZSBIRFNQX0FER2FpblBsdXM0ZEJ1ICAgKEhEU1BfQURHYWluMCkKQEAgLTQ1MCw3ICs0NzEsNyBAQAogCXUzMiAgICAgICAgICAgICAgICAgICBjcmVnX3NwZGlmOwogCXUzMiAgICAgICAgICAgICAgICAgICBjcmVnX3NwZGlmX3N0cmVhbTsKIAlpbnQgICAgICAgICAgICAgICAgICAgY2xvY2tfc291cmNlX2xvY2tlZDsKLQljaGFyICAgICAgICAgICAgICAgICAqY2FyZF9uYW1lOwkgICAgIC8qIGRpZ2lmYWNlL211bHRpZmFjZSAqLworCWNoYXIgICAgICAgICAgICAgICAgICpjYXJkX25hbWU7CSAvKiBkaWdpZmFjZS9tdWx0aWZhY2UvcnBtICovCiAJZW51bSBIRFNQX0lPX1R5cGUgICAgIGlvX3R5cGU7ICAgICAgICAgICAgICAgLyogZGl0dG8sIGJ1dCBmb3IgY29kZSB1c2UgKi8KICAgICAgICAgdW5zaWduZWQgc2hvcnQgICAgICAgIGZpcm13YXJlX3JldjsKIAl1bnNpZ25lZCBzaG9ydAkgICAgICBzdGF0ZTsJCSAgICAgLyogc3RvcmVzIHN0YXRlIGJpdHMgKi8KQEAgLTYxMiw2ICs2MzMsNyBAQAogCXN3aXRjaCAoaGRzcC0+aW9fdHlwZSkgewogCWNhc2UgTXVsdGlmYWNlOgogCWNhc2UgRGlnaWZhY2U6CisJY2FzZSBSUE06CiAJZGVmYXVsdDoKIAkJaWYgKGhkc3AtPmZpcm13YXJlX3JldiA9PSAweGEpCiAJCQlyZXR1cm4gKDY0ICogb3V0KSArICgzMiArIChpbikpOwpAQCAtNjI5LDYgKzY1MSw3IEBACiAJc3dpdGNoIChoZHNwLT5pb190eXBlKSB7CiAJY2FzZSBNdWx0aWZhY2U6CiAJY2FzZSBEaWdpZmFjZToKKwljYXNlIFJQTToKIAlkZWZhdWx0OgogCQlpZiAoaGRzcC0+ZmlybXdhcmVfcmV2ID09IDB4YSkKIAkJCXJldHVybiAoNjQgKiBvdXQpICsgaW47CkBAIC02NTUsNyArNjc4LDcgQEAKIHsKIAlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTY1MiB8fCBoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gMDsKIAlpZiAoaGRzcF9yZWFkIChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKSAmIEhEU1BfQ29uZmlnRXJyb3IpIHsKLQkJc25kX3ByaW50ayAoIkhhbW1lcmZhbGwtRFNQOiBubyBEaWdpZmFjZSBvciBNdWx0aWZhY2UgY29ubmVjdGVkIVxuIik7CisJCXNuZF9wcmludGsoIkhhbW1lcmZhbGwtRFNQOiBubyBJTyBib3ggY29ubmVjdGVkIVxuIik7CiAJCWhkc3AtPnN0YXRlICY9IH5IRFNQX0Zpcm13YXJlTG9hZGVkOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC02ODAsNyArNzAzLDcgQEAKIAkJfQogCX0KIAotCXNuZF9wcmludGsoIkhhbW1lcmZhbGwtRFNQOiBubyBEaWdpZmFjZSBvciBNdWx0aWZhY2UgY29ubmVjdGVkIVxuIik7CisJc25kX3ByaW50aygiSGFtbWVyZmFsbC1EU1A6IG5vIElPIGJveCBjb25uZWN0ZWQhXG4iKTsKIAloZHNwLT5zdGF0ZSAmPSB+SERTUF9GaXJtd2FyZUxvYWRlZDsKIAlyZXR1cm4gLUVJTzsKIH0KQEAgLTc1MiwxNyArNzc1LDIxIEBACiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfY29udHJvbDJSZWcsIEhEU1BfU19MT0FEKTsKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9maWZvRGF0YSwgMCk7CiAKLQkJaWYgKGhkc3BfZmlmb193YWl0IChoZHNwLCAwLCBIRFNQX1NIT1JUX1dBSVQpKSB7Ci0JCQloZHNwLT5pb190eXBlID0gTXVsdGlmYWNlOwotCQkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9jb250cm9sMlJlZywgSERTUF9WRVJTSU9OX0JJVCk7Ci0JCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX2NvbnRyb2wyUmVnLCBIRFNQX1NfTE9BRCk7Ci0JCQloZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMCwgSERTUF9TSE9SVF9XQUlUKTsKKwkJaWYgKGhkc3BfZmlmb193YWl0KGhkc3AsIDAsIEhEU1BfU0hPUlRfV0FJVCkpIHsKKwkJCWhkc3Bfd3JpdGUoaGRzcCwgSERTUF9jb250cm9sMlJlZywgSERTUF9WRVJTSU9OX0JJVCk7CisJCQloZHNwX3dyaXRlKGhkc3AsIEhEU1BfY29udHJvbDJSZWcsIEhEU1BfU19MT0FEKTsKKwkJCWlmIChoZHNwX2ZpZm9fd2FpdChoZHNwLCAwLCBIRFNQX1NIT1JUX1dBSVQpKQorCQkJCWhkc3AtPmlvX3R5cGUgPSBSUE07CisJCQllbHNlCisJCQkJaGRzcC0+aW9fdHlwZSA9IE11bHRpZmFjZTsKIAkJfSBlbHNlIHsKIAkJCWhkc3AtPmlvX3R5cGUgPSBEaWdpZmFjZTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIGZpcm13YXJlIHdhcyBhbHJlYWR5IGxvYWRlZCwgZ2V0IGlvYm94IHR5cGUgKi8KLQkJaWYgKGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1czJSZWdpc3RlcikgJiBIRFNQX3ZlcnNpb24xKQorCQlpZiAoaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzMlJlZ2lzdGVyKSAmIEhEU1BfdmVyc2lvbjIpCisJCQloZHNwLT5pb190eXBlID0gUlBNOworCQllbHNlIGlmIChoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXMyUmVnaXN0ZXIpICYgSERTUF92ZXJzaW9uMSkKIAkJCWhkc3AtPmlvX3R5cGUgPSBNdWx0aWZhY2U7CiAJCWVsc2UKIAkJCWhkc3AtPmlvX3R5cGUgPSBEaWdpZmFjZTsKQEAgLTExODQsNiArMTIxMSw3IEBACiAJCQloZHNwLT5jaGFubmVsX21hcCA9IGNoYW5uZWxfbWFwX2RzOwogCX0gZWxzZSB7CiAJCXN3aXRjaCAoaGRzcC0+aW9fdHlwZSkgeworCQljYXNlIFJQTToKIAkJY2FzZSBNdWx0aWZhY2U6CiAJCQloZHNwLT5jaGFubmVsX21hcCA9IGNoYW5uZWxfbWFwX21mX3NzOwogCQkJYnJlYWs7CkBAIC0zMjMxLDYgKzMyNTksMzE4IEBACiBIRFNQX1VTRV9NSURJX1RBU0tMRVQoIlVzZSBNaWRpIFRhc2tsZXQiLCAwKSwKIH07CiAKKworc3RhdGljIGludCBoZHNwX3JwbV9pbnB1dDEyKHN0cnVjdCBoZHNwICpoZHNwKQoreworCXN3aXRjaCAoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfUlBNX0lucDEyKSB7CisJY2FzZSBIRFNQX1JQTV9JbnAxMl9QaG9uXzZkQjoKKwkJcmV0dXJuIDA7CisJY2FzZSBIRFNQX1JQTV9JbnAxMl9QaG9uX242ZEI6CisJCXJldHVybiAyOworCWNhc2UgSERTUF9SUE1fSW5wMTJfTGluZV8wZEI6CisJCXJldHVybiAzOworCWNhc2UgSERTUF9SUE1fSW5wMTJfTGluZV9uNmRCOgorCQlyZXR1cm4gNDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKworc3RhdGljIGludCBzbmRfaGRzcF9nZXRfcnBtX2lucHV0MTIoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfcnBtX2lucHV0MTIoaGRzcCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBoZHNwX3NldF9ycG1faW5wdXQxMihzdHJ1Y3QgaGRzcCAqaGRzcCwgaW50IG1vZGUpCit7CisJaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmPSB+SERTUF9SUE1fSW5wMTI7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAwOgorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUlBNX0lucDEyX1Bob25fNmRCOworCQlicmVhazsKKwljYXNlIDE6CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX1JQTV9JbnAxMl9QaG9uX242ZEI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX1JQTV9JbnAxMl9MaW5lXzBkQjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUlBNX0lucDEyX0xpbmVfbjZkQjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKworCWhkc3Bfd3JpdGUoaGRzcCwgSERTUF9jb250cm9sUmVnaXN0ZXIsIGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc25kX2hkc3BfcHV0X3JwbV9pbnB1dDEyKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgY2hhbmdlOworCWludCB2YWw7CisKKwlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCisJCXJldHVybiAtRUJVU1k7CisJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKwlpZiAodmFsIDwgMCkKKwkJdmFsID0gMDsKKwlpZiAodmFsID4gNCkKKwkJdmFsID0gNDsKKwlzcGluX2xvY2tfaXJxKCZoZHNwLT5sb2NrKTsKKwlpZiAodmFsICE9IGhkc3BfcnBtX2lucHV0MTIoaGRzcCkpCisJCWNoYW5nZSA9IChoZHNwX3NldF9ycG1faW5wdXQxMihoZHNwLCB2YWwpID09IDApID8gMSA6IDA7CisJZWxzZQorCQljaGFuZ2UgPSAwOworCXNwaW5fdW5sb2NrX2lycSgmaGRzcC0+bG9jayk7CisJcmV0dXJuIGNoYW5nZTsKK30KKworCitzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fcnBtX2lucHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyJQaG9ubyArNmRCIiwgIlBob25vIDBkQiIsICJQaG9ubyAtNmRCIiwgIkxpbmUgMGRCIiwgIkxpbmUgLTZkQiJ9OworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDU7CisJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMpCisJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAtIDE7CisJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGhkc3BfcnBtX2lucHV0MzQoc3RydWN0IGhkc3AgKmhkc3ApCit7CisJc3dpdGNoIChoZHNwLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUF9SUE1fSW5wMzQpIHsKKwljYXNlIEhEU1BfUlBNX0lucDM0X1Bob25fNmRCOgorCQlyZXR1cm4gMDsKKwljYXNlIEhEU1BfUlBNX0lucDM0X1Bob25fbjZkQjoKKwkJcmV0dXJuIDI7CisJY2FzZSBIRFNQX1JQTV9JbnAzNF9MaW5lXzBkQjoKKwkJcmV0dXJuIDM7CisJY2FzZSBIRFNQX1JQTV9JbnAzNF9MaW5lX242ZEI6CisJCXJldHVybiA0OworCX0KKwlyZXR1cm4gMTsKK30KKworCitzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9ycG1faW5wdXQzNChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9ycG1faW5wdXQzNChoZHNwKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGhkc3Bfc2V0X3JwbV9pbnB1dDM0KHN0cnVjdCBoZHNwICpoZHNwLCBpbnQgbW9kZSkKK3sKKwloZHNwLT5jb250cm9sX3JlZ2lzdGVyICY9IH5IRFNQX1JQTV9JbnAzNDsKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIDA6CisJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9SUE1fSW5wMzRfUGhvbl82ZEI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYnJlYWs7CisJY2FzZSAyOgorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUlBNX0lucDM0X1Bob25fbjZkQjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUlBNX0lucDM0X0xpbmVfMGRCOworCQlicmVhazsKKwljYXNlIDQ6CisJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9SUE1fSW5wMzRfTGluZV9uNmRCOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCisJaGRzcF93cml0ZShoZHNwLCBIRFNQX2NvbnRyb2xSZWdpc3RlciwgaGRzcC0+Y29udHJvbF9yZWdpc3Rlcik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzbmRfaGRzcF9wdXRfcnBtX2lucHV0MzQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBjaGFuZ2U7CisJaW50IHZhbDsKKworCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKKwkJcmV0dXJuIC1FQlVTWTsKKwl2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCWlmICh2YWwgPCAwKQorCQl2YWwgPSAwOworCWlmICh2YWwgPiA0KQorCQl2YWwgPSA0OworCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOworCWlmICh2YWwgIT0gaGRzcF9ycG1faW5wdXQzNChoZHNwKSkKKwkJY2hhbmdlID0gKGhkc3Bfc2V0X3JwbV9pbnB1dDM0KGhkc3AsIHZhbCkgPT0gMCkgPyAxIDogMDsKKwllbHNlCisJCWNoYW5nZSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxKCZoZHNwLT5sb2NrKTsKKwlyZXR1cm4gY2hhbmdlOworfQorCisKKy8qIFJQTSBCeXBhc3Mgc3dpdGNoICovCitzdGF0aWMgaW50IGhkc3BfcnBtX2J5cGFzcyhzdHJ1Y3QgaGRzcCAqaGRzcCkKK3sKKwlyZXR1cm4gKGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQX1JQTV9CeXBhc3MpID8gMSA6IDA7Cit9CisKKworc3RhdGljIGludCBzbmRfaGRzcF9nZXRfcnBtX2J5cGFzcyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3BfcnBtX2J5cGFzcyhoZHNwKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGhkc3Bfc2V0X3JwbV9ieXBhc3Moc3RydWN0IGhkc3AgKmhkc3AsIGludCBvbikKK3sKKwlpZiAob24pCisJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9SUE1fQnlwYXNzOworCWVsc2UKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmPSB+SERTUF9SUE1fQnlwYXNzOworCWhkc3Bfd3JpdGUoaGRzcCwgSERTUF9jb250cm9sUmVnaXN0ZXIsIGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc25kX2hkc3BfcHV0X3JwbV9ieXBhc3Moc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBjaGFuZ2U7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKKwkJcmV0dXJuIC1FQlVTWTsKKwl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CisJc3Bpbl9sb2NrX2lycSgmaGRzcC0+bG9jayk7CisJY2hhbmdlID0gKGludCl2YWwgIT0gaGRzcF9ycG1fYnlwYXNzKGhkc3ApOworCWhkc3Bfc2V0X3JwbV9ieXBhc3MoaGRzcCwgdmFsKTsKKwlzcGluX3VubG9ja19pcnEoJmhkc3AtPmxvY2spOworCXJldHVybiBjaGFuZ2U7Cit9CisKKworc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX3JwbV9ieXBhc3Moc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7Ik9uIiwgIk9mZiJ9OworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDI7CisJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMpCisJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAtIDE7CisJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiBSUE0gRGlzY29ubmVjdCBzd2l0Y2ggKi8KK3N0YXRpYyBpbnQgaGRzcF9ycG1fZGlzY29ubmVjdChzdHJ1Y3QgaGRzcCAqaGRzcCkKK3sKKwlyZXR1cm4gKGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQX1JQTV9EaXNjb25uZWN0KSA/IDEgOiAwOworfQorCisKK3N0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3JwbV9kaXNjb25uZWN0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcF9ycG1fZGlzY29ubmVjdChoZHNwKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGhkc3Bfc2V0X3JwbV9kaXNjb25uZWN0KHN0cnVjdCBoZHNwICpoZHNwLCBpbnQgb24pCit7CisJaWYgKG9uKQorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUlBNX0Rpc2Nvbm5lY3Q7CisJZWxzZQorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyICY9IH5IRFNQX1JQTV9EaXNjb25uZWN0OworCWhkc3Bfd3JpdGUoaGRzcCwgSERTUF9jb250cm9sUmVnaXN0ZXIsIGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc25kX2hkc3BfcHV0X3JwbV9kaXNjb25uZWN0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgY2hhbmdlOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCisJCXJldHVybiAtRUJVU1k7CisJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOworCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOworCWNoYW5nZSA9IChpbnQpdmFsICE9IGhkc3BfcnBtX2Rpc2Nvbm5lY3QoaGRzcCk7CisJaGRzcF9zZXRfcnBtX2Rpc2Nvbm5lY3QoaGRzcCwgdmFsKTsKKwlzcGluX3VubG9ja19pcnEoJmhkc3AtPmxvY2spOworCXJldHVybiBjaGFuZ2U7Cit9CisKK3N0YXRpYyBpbnQgc25kX2hkc3BfaW5mb19ycG1fZGlzY29ubmVjdChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiT24iLCAiT2ZmIn07CisKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMjsKKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2hkc3BfcnBtX2NvbnRyb2xzW10gPSB7CisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiUlBNIEJ5cGFzcyIsCisJCS5nZXQgPSBzbmRfaGRzcF9nZXRfcnBtX2J5cGFzcywKKwkJLnB1dCA9IHNuZF9oZHNwX3B1dF9ycG1fYnlwYXNzLAorCQkuaW5mbyA9IHNuZF9oZHNwX2luZm9fcnBtX2J5cGFzcworCX0sCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiUlBNIERpc2Nvbm5lY3QiLAorCQkuZ2V0ID0gc25kX2hkc3BfZ2V0X3JwbV9kaXNjb25uZWN0LAorCQkucHV0ID0gc25kX2hkc3BfcHV0X3JwbV9kaXNjb25uZWN0LAorCQkuaW5mbyA9IHNuZF9oZHNwX2luZm9fcnBtX2Rpc2Nvbm5lY3QKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIklucHV0IDEvMiIsCisJCS5nZXQgPSBzbmRfaGRzcF9nZXRfcnBtX2lucHV0MTIsCisJCS5wdXQgPSBzbmRfaGRzcF9wdXRfcnBtX2lucHV0MTIsCisJCS5pbmZvID0gc25kX2hkc3BfaW5mb19ycG1faW5wdXQKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIklucHV0IDMvNCIsCisJCS5nZXQgPSBzbmRfaGRzcF9nZXRfcnBtX2lucHV0MzQsCisJCS5wdXQgPSBzbmRfaGRzcF9wdXRfcnBtX2lucHV0MzQsCisJCS5pbmZvID0gc25kX2hkc3BfaW5mb19ycG1faW5wdXQKKwl9LAorCUhEU1BfU1lTVEVNX1NBTVBMRV9SQVRFKCJTeXN0ZW0gU2FtcGxlIFJhdGUiLCAwKSwKKwlIRFNQX01JWEVSKCJNaXhlciIsIDApCit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2hkc3BfOTZ4eF9hZWIgPSBIRFNQX0FFQigiQW5hbG9nIEV4dGVuc2lvbiBCb2FyZCIsIDApOwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9oZHNwX2FkYXRfc3luY19jaGVjayA9IEhEU1BfQURBVF9TWU5DX0NIRUNLOwogCkBAIC0zMjQwLDYgKzM1ODAsMTYgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CiAKKwlpZiAoaGRzcC0+aW9fdHlwZSA9PSBSUE0pIHsKKwkJLyogUlBNIEJ5cGFzcywgRGlzY29ubmVjdCBhbmQgSW5wdXQgc3dpdGNoZXMgKi8KKwkJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9oZHNwX3JwbV9jb250cm9scyk7IGlkeCsrKSB7CisJCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBrY3RsID0gc25kX2N0bF9uZXcxKCZzbmRfaGRzcF9ycG1fY29udHJvbHNbaWR4XSwgaGRzcCkpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX2hkc3BfY29udHJvbHMpOyBpZHgrKykgewogCQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIGtjdGwgPSBzbmRfY3RsX25ldzEoJnNuZF9oZHNwX2NvbnRyb2xzW2lkeF0sIGhkc3ApKSkgPCAwKQogCQkJcmV0dXJuIGVycjsKQEAgLTM0NTksNDggKzM4MDksMTAyIEBACiAKIAlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOwogCi0Jc3dpdGNoIChoZHNwX3NwZGlmX2luKGhkc3ApKSB7Ci0JY2FzZSBIRFNQX1NQRElGSU5fT1BUSUNBTDoKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IGlucHV0OiBPcHRpY2FsXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBIRFNQX1NQRElGSU5fQ09BWElBTDoKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IGlucHV0OiBDb2F4aWFsXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBIRFNQX1NQRElGSU5fSU5URVJOQUw6Ci0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklFQzk1OCBpbnB1dDogSW50ZXJuYWxcbiIpOwotCQlicmVhazsKLQljYXNlIEhEU1BfU1BESUZJTl9BRVM6Ci0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklFQzk1OCBpbnB1dDogQUVTXG4iKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IGlucHV0OiA/Pz9cbiIpOwotCQlicmVhazsKKwlpZiAoaGRzcC0+aW9fdHlwZSAhPSBSUE0pIHsKKwkJc3dpdGNoIChoZHNwX3NwZGlmX2luKGhkc3ApKSB7CisJCWNhc2UgSERTUF9TUERJRklOX09QVElDQUw6CisJCQlzbmRfaXByaW50ZihidWZmZXIsICJJRUM5NTggaW5wdXQ6IE9wdGljYWxcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgSERTUF9TUERJRklOX0NPQVhJQUw6CisJCQlzbmRfaXByaW50ZihidWZmZXIsICJJRUM5NTggaW5wdXQ6IENvYXhpYWxcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgSERTUF9TUERJRklOX0lOVEVSTkFMOgorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IGlucHV0OiBJbnRlcm5hbFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBIRFNQX1NQRElGSU5fQUVTOgorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IGlucHV0OiBBRVNcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzbmRfaXByaW50ZihidWZmZXIsICJJRUM5NTggaW5wdXQ6ID8/P1xuIik7CisJCQlicmVhazsKKwkJfQogCX0KIAotCWlmIChoZHNwLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUF9TUERJRk9wdGljYWxPdXQpCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklFQzk1OCBvdXRwdXQ6IENvYXhpYWwgJiBBREFUMVxuIik7Ci0JZWxzZQotCQlzbmRfaXByaW50ZihidWZmZXIsICJJRUM5NTggb3V0cHV0OiBDb2F4aWFsIG9ubHlcbiIpOworCWlmIChSUE0gPT0gaGRzcC0+aW9fdHlwZSkgeworCQlpZiAoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfUlBNX0J5cGFzcykKKwkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlJQTSBCeXBhc3M6IGRpc2FibGVkXG4iKTsKKwkJZWxzZQorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiUlBNIEJ5cGFzczogZW5hYmxlZFxuIik7CisJCWlmIChoZHNwLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUF9SUE1fRGlzY29ubmVjdCkKKwkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlJQTSBkaXNjb25uZWN0ZWRcbiIpOworCQllbHNlCisJCQlzbmRfaXByaW50ZihidWZmZXIsICJSUE0gY29ubmVjdGVkXG4iKTsKIAotCWlmIChoZHNwLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUF9TUERJRlByb2Zlc3Npb25hbCkKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IHF1YWxpdHk6IFByb2Zlc3Npb25hbFxuIik7Ci0JZWxzZQotCQlzbmRfaXByaW50ZihidWZmZXIsICJJRUM5NTggcXVhbGl0eTogQ29uc3VtZXJcbiIpOworCQlzd2l0Y2ggKGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQX1JQTV9JbnAxMikgeworCQljYXNlIEhEU1BfUlBNX0lucDEyX1Bob25fNmRCOgorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiSW5wdXQgMS8yOiBQaG9ubywgNmRCXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIEhEU1BfUlBNX0lucDEyX1Bob25fMGRCOgorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiSW5wdXQgMS8yOiBQaG9ubywgMGRCXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIEhEU1BfUlBNX0lucDEyX1Bob25fbjZkQjoKKwkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklucHV0IDEvMjogUGhvbm8sIC02ZEJcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgSERTUF9SUE1fSW5wMTJfTGluZV8wZEI6CisJCQlzbmRfaXByaW50ZihidWZmZXIsICJJbnB1dCAxLzI6IExpbmUsIDBkQlxuIik7CisJCQlicmVhazsKKwkJY2FzZSBIRFNQX1JQTV9JbnAxMl9MaW5lX242ZEI6CisJCQlzbmRfaXByaW50ZihidWZmZXIsICJJbnB1dCAxLzI6IExpbmUsIC02ZEJcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzbmRfaXByaW50ZihidWZmZXIsICJJbnB1dCAxLzI6ID8/P1xuIik7CisJCX0KIAotCWlmIChoZHNwLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUF9TUERJRkVtcGhhc2lzKQotCQlzbmRfaXByaW50ZihidWZmZXIsICJJRUM5NTggZW1waGFzaXM6IG9uXG4iKTsKLQllbHNlCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklFQzk1OCBlbXBoYXNpczogb2ZmXG4iKTsKKwkJc3dpdGNoIChoZHNwLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUF9SUE1fSW5wMzQpIHsKKwkJY2FzZSBIRFNQX1JQTV9JbnAzNF9QaG9uXzZkQjoKKwkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklucHV0IDMvNDogUGhvbm8sIDZkQlxuIik7CisJCQlicmVhazsKKwkJY2FzZSBIRFNQX1JQTV9JbnAzNF9QaG9uXzBkQjoKKwkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklucHV0IDMvNDogUGhvbm8sIDBkQlxuIik7CisJCQlicmVhazsKKwkJY2FzZSBIRFNQX1JQTV9JbnAzNF9QaG9uX242ZEI6CisJCQlzbmRfaXByaW50ZihidWZmZXIsICJJbnB1dCAzLzQ6IFBob25vLCAtNmRCXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIEhEU1BfUlBNX0lucDM0X0xpbmVfMGRCOgorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiSW5wdXQgMy80OiBMaW5lLCAwZEJcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgSERTUF9SUE1fSW5wMzRfTGluZV9uNmRCOgorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiSW5wdXQgMy80OiBMaW5lLCAtNmRCXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiSW5wdXQgMy80OiA/Pz9cbiIpOworCQl9CiAKLQlpZiAoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfU1BESUZOb25BdWRpbykKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IE5vbkF1ZGlvOiBvblxuIik7Ci0JZWxzZQotCQlzbmRfaXByaW50ZihidWZmZXIsICJJRUM5NTggTm9uQXVkaW86IG9mZlxuIik7Ci0JaWYgKCh4ID0gaGRzcF9zcGRpZl9zYW1wbGVfcmF0ZSAoaGRzcCkpICE9IDApCi0JCXNuZF9pcHJpbnRmIChidWZmZXIsICJJRUM5NTggc2FtcGxlIHJhdGU6ICVkXG4iLCB4KTsKLQllbHNlCi0JCXNuZF9pcHJpbnRmIChidWZmZXIsICJJRUM5NTggc2FtcGxlIHJhdGU6IEVycm9yIGZsYWcgc2V0XG4iKTsKKwl9IGVsc2UgeworCQlpZiAoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfU1BESUZPcHRpY2FsT3V0KQorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IG91dHB1dDogQ29heGlhbCAmIEFEQVQxXG4iKTsKKwkJZWxzZQorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IG91dHB1dDogQ29heGlhbCBvbmx5XG4iKTsKIAorCQlpZiAoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfU1BESUZQcm9mZXNzaW9uYWwpCisJCQlzbmRfaXByaW50ZihidWZmZXIsICJJRUM5NTggcXVhbGl0eTogUHJvZmVzc2lvbmFsXG4iKTsKKwkJZWxzZQorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IHF1YWxpdHk6IENvbnN1bWVyXG4iKTsKKworCQlpZiAoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfU1BESUZFbXBoYXNpcykKKwkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklFQzk1OCBlbXBoYXNpczogb25cbiIpOworCQllbHNlCisJCQlzbmRfaXByaW50ZihidWZmZXIsICJJRUM5NTggZW1waGFzaXM6IG9mZlxuIik7CisKKwkJaWYgKGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQX1NQRElGTm9uQXVkaW8pCisJCQlzbmRfaXByaW50ZihidWZmZXIsICJJRUM5NTggTm9uQXVkaW86IG9uXG4iKTsKKwkJZWxzZQorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IE5vbkF1ZGlvOiBvZmZcbiIpOworCQl4ID0gaGRzcF9zcGRpZl9zYW1wbGVfcmF0ZShoZHNwKTsKKwkJaWYgKHggIT0gMCkKKwkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklFQzk1OCBzYW1wbGUgcmF0ZTogJWRcbiIsIHgpOworCQllbHNlCisJCQlzbmRfaXByaW50ZihidWZmZXIsICJJRUM5NTggc2FtcGxlIHJhdGU6IEVycm9yIGZsYWcgc2V0XG4iKTsKKwl9CiAJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKIAogCS8qIFN5bmMgQ2hlY2sgKi8KQEAgLTM3NjUsNyArNDE2OSw3IEBACiAJCQlzbmRfaGRzcF9taWRpX2lucHV0X3JlYWQgKCZoZHNwLT5taWRpWzBdKTsKIAkJfQogCX0KLQlpZiAoaGRzcC0+aW9fdHlwZSAhPSBNdWx0aWZhY2UgJiYgaGRzcC0+aW9fdHlwZSAhPSBIOTYzMiAmJiBtaWRpMSAmJiBtaWRpMXN0YXR1cykgeworCWlmIChoZHNwLT5pb190eXBlICE9IE11bHRpZmFjZSAmJiBoZHNwLT5pb190eXBlICE9IFJQTSAmJiBoZHNwLT5pb190eXBlICE9IEg5NjMyICYmIG1pZGkxICYmIG1pZGkxc3RhdHVzKSB7CiAJCWlmIChoZHNwLT51c2VfbWlkaV90YXNrbGV0KSB7CiAJCQkvKiB3ZSBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoaXMgaW5wdXQgdW50aWwgcHJvY2Vzc2luZyBpcyBkb25lICovCiAJCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyICY9IH5IRFNQX01pZGkxSW50ZXJydXB0RW5hYmxlOwpAQCAtNDA5Myw3ICs0NDk3LDcgQEAKIAkJCQkgU05EUlZfUENNX1JBVEVfOTYwMDApLAogCS5yYXRlX21pbiA9CQkzMjAwMCwKIAkucmF0ZV9tYXggPQkJOTYwMDAsCi0JLmNoYW5uZWxzX21pbiA9CQkxNCwKKwkuY2hhbm5lbHNfbWluID0JCTYsCiAJLmNoYW5uZWxzX21heCA9CQlIRFNQX01BWF9DSEFOTkVMUywKIAkuYnVmZmVyX2J5dGVzX21heCA9CUhEU1BfQ0hBTk5FTF9CVUZGRVJfQllURVMgKiBIRFNQX01BWF9DSEFOTkVMUywKIAkucGVyaW9kX2J5dGVzX21pbiA9CSg2NCAqIDQpICogMTAsCkBAIC00MTIyLDcgKzQ1MjYsNyBAQAogCQkJCSBTTkRSVl9QQ01fUkFURV85NjAwMCksCiAJLnJhdGVfbWluID0JCTMyMDAwLAogCS5yYXRlX21heCA9CQk5NjAwMCwKLQkuY2hhbm5lbHNfbWluID0JCTE0LAorCS5jaGFubmVsc19taW4gPQkJNSwKIAkuY2hhbm5lbHNfbWF4ID0JCUhEU1BfTUFYX0NIQU5ORUxTLAogCS5idWZmZXJfYnl0ZXNfbWF4ID0JSERTUF9DSEFOTkVMX0JVRkZFUl9CWVRFUyAqIEhEU1BfTUFYX0NIQU5ORUxTLAogCS5wZXJpb2RfYnl0ZXNfbWluID0JKDY0ICogNCkgKiAxMCwKQEAgLTQzNTcsMTAgKzQ3NjEsMTIgQEAKIAkJCSAgICAgc25kX2hkc3BfaHdfcnVsZV9yYXRlX291dF9jaGFubmVscywgaGRzcCwKIAkJCSAgICAgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLCAtMSk7CiAKLQloZHNwLT5jcmVnX3NwZGlmX3N0cmVhbSA9IGhkc3AtPmNyZWdfc3BkaWY7Ci0JaGRzcC0+c3BkaWZfY3RsLT52ZFswXS5hY2Nlc3MgJj0gflNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRTsKLQlzbmRfY3RsX25vdGlmeShoZHNwLT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSB8Ci0JCSAgICAgICBTTkRSVl9DVExfRVZFTlRfTUFTS19JTkZPLCAmaGRzcC0+c3BkaWZfY3RsLT5pZCk7CisJaWYgKFJQTSAhPSBoZHNwLT5pb190eXBlKSB7CisJCWhkc3AtPmNyZWdfc3BkaWZfc3RyZWFtID0gaGRzcC0+Y3JlZ19zcGRpZjsKKwkJaGRzcC0+c3BkaWZfY3RsLT52ZFswXS5hY2Nlc3MgJj0gflNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRTsKKwkJc25kX2N0bF9ub3RpZnkoaGRzcC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUgfAorCQkJU05EUlZfQ1RMX0VWRU5UX01BU0tfSU5GTywgJmhkc3AtPnNwZGlmX2N0bC0+aWQpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDM3NSw5ICs0NzgxLDExIEBACiAKIAlzcGluX3VubG9ja19pcnEoJmhkc3AtPmxvY2spOwogCi0JaGRzcC0+c3BkaWZfY3RsLT52ZFswXS5hY2Nlc3MgfD0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFOwotCXNuZF9jdGxfbm90aWZ5KGhkc3AtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFIHwKLQkJICAgICAgIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8sICZoZHNwLT5zcGRpZl9jdGwtPmlkKTsKKwlpZiAoUlBNICE9IGhkc3AtPmlvX3R5cGUpIHsKKwkJaGRzcC0+c3BkaWZfY3RsLT52ZFswXS5hY2Nlc3MgfD0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFOworCQlzbmRfY3RsX25vdGlmeShoZHNwLT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSB8CisJCQlTTkRSVl9DVExfRVZFTlRfTUFTS19JTkZPLCAmaGRzcC0+c3BkaWZfY3RsLT5pZCk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC00NjE2LDcgKzUwMjQsNyBAQAogCQlpZiAoaGRzcC0+aW9fdHlwZSAhPSBIOTYzMikKIAkJICAgIGluZm8uYWRhdHN5bmNfc3luY19jaGVjayA9ICh1bnNpZ25lZCBjaGFyKWhkc3BfYWRhdHN5bmNfc3luY19jaGVjayhoZHNwKTsKIAkJaW5mby5zcGRpZl9zeW5jX2NoZWNrID0gKHVuc2lnbmVkIGNoYXIpaGRzcF9zcGRpZl9zeW5jX2NoZWNrKGhkc3ApOwotCQlmb3IgKGkgPSAwOyBpIDwgKChoZHNwLT5pb190eXBlICE9IE11bHRpZmFjZSAmJiBoZHNwLT5pb190eXBlICE9IEg5NjMyKSA/IDMgOiAxKTsgKytpKQorCQlmb3IgKGkgPSAwOyBpIDwgKChoZHNwLT5pb190eXBlICE9IE11bHRpZmFjZSAmJiBoZHNwLT5pb190eXBlICE9IFJQTSAmJiBoZHNwLT5pb190eXBlICE9IEg5NjMyKSA/IDMgOiAxKTsgKytpKQogCQkJaW5mby5hZGF0X3N5bmNfY2hlY2tbaV0gPSAodW5zaWduZWQgY2hhciloZHNwX2FkYXRfc3luY19jaGVjayhoZHNwLCBpKTsKIAkJaW5mby5zcGRpZl9pbiA9ICh1bnNpZ25lZCBjaGFyKWhkc3Bfc3BkaWZfaW4oaGRzcCk7CiAJCWluZm8uc3BkaWZfb3V0ID0gKHVuc2lnbmVkIGNoYXIpaGRzcF9zcGRpZl9vdXQoaGRzcCk7CkBAIC00NjM2LDYgKzUwNDQsOSBAQAogCQkJaW5mby5waG9uZV9nYWluID0gKHVuc2lnbmVkIGNoYXIpaGRzcF9waG9uZV9nYWluKGhkc3ApOwogCQkJaW5mby54bHJfYnJlYWtvdXRfY2FibGUgPSAodW5zaWduZWQgY2hhciloZHNwX3hscl9icmVha291dF9jYWJsZShoZHNwKTsKIAorCQl9IGVsc2UgaWYgKGhkc3AtPmlvX3R5cGUgPT0gUlBNKSB7CisJCQlpbmZvLmRhX2dhaW4gPSAodW5zaWduZWQgY2hhcikgaGRzcF9ycG1faW5wdXQxMihoZHNwKTsKKwkJCWluZm8uYWRfZ2FpbiA9ICh1bnNpZ25lZCBjaGFyKSBoZHNwX3JwbV9pbnB1dDM0KGhkc3ApOwogCQl9CiAJCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIpCiAJCQlpbmZvLmFuYWxvZ19leHRlbnNpb25fYm9hcmQgPSAodW5zaWduZWQgY2hhciloZHNwX2FlYihoZHNwKTsKQEAgLTQ4NDQsNiArNTI1NSwxNCBAQAogCQloZHNwLT5kc19pbl9jaGFubmVscyA9IGhkc3AtPmRzX291dF9jaGFubmVscyA9IE1VTFRJRkFDRV9EU19DSEFOTkVMUzsKIAkJYnJlYWs7CiAKKwljYXNlIFJQTToKKwkJaGRzcC0+Y2FyZF9uYW1lID0gIlJNRSBIYW1tZXJmYWxsIERTUCArIFJQTSI7CisJCWhkc3AtPnNzX2luX2NoYW5uZWxzID0gUlBNX0NIQU5ORUxTLTE7CisJCWhkc3AtPnNzX291dF9jaGFubmVscyA9IFJQTV9DSEFOTkVMUzsKKwkJaGRzcC0+ZHNfaW5fY2hhbm5lbHMgPSBSUE1fQ0hBTk5FTFMtMTsKKwkJaGRzcC0+ZHNfb3V0X2NoYW5uZWxzID0gUlBNX0NIQU5ORUxTOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAgCQkvKiBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KIAkJYnJlYWs7CkBAIC00OTMwLDYgKzUzNDksOSBAQAogCiAJLyogY2F1dGlvbjogbWF4IGxlbmd0aCBvZiBmaXJtd2FyZSBmaWxlbmFtZSBpcyAzMCEgKi8KIAlzd2l0Y2ggKGhkc3AtPmlvX3R5cGUpIHsKKwljYXNlIFJQTToKKwkJZndmaWxlID0gInJwbV9maXJtd2FyZS5iaW4iOworCQlicmVhazsKIAljYXNlIE11bHRpZmFjZToKIAkJaWYgKGhkc3AtPmZpcm13YXJlX3JldiA9PSAweGEpCiAJCQlmd2ZpbGUgPSAibXVsdGlmYWNlX2Zpcm13YXJlLmJpbiI7CkBAIC01MTAwLDcgKzU1MjIsOSBAQAogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSGFtbWVyZmFsbC1EU1A6IEZpcm13YXJlIGFscmVhZHkgcHJlc2VudCwgaW5pdGlhbGl6aW5nIGNhcmQuXG4iKTsKLQkJCWlmIChoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXMyUmVnaXN0ZXIpICYgSERTUF92ZXJzaW9uMSkKKwkJCWlmIChoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXMyUmVnaXN0ZXIpICYgSERTUF92ZXJzaW9uMikKKwkJCQloZHNwLT5pb190eXBlID0gUlBNOworCQkJZWxzZSBpZiAoaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzMlJlZ2lzdGVyKSAmIEhEU1BfdmVyc2lvbjEpCiAJCQkJaGRzcC0+aW9fdHlwZSA9IE11bHRpZmFjZTsKIAkJCWVsc2UKIAkJCQloZHNwLT5pb190eXBlID0gRGlnaWZhY2U7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwppbmRleCAwYzk4ZWY5Li5mNWVhZGZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKQEAgLTQ4Nyw3ICs0ODcsNyBAQAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKnBsYXliYWNrX21peGVyX2N0bHNbSERTUE1fTUFYX0NIQU5ORUxTXTsKIAkvKiBidXQgaW5wdXQgdG8gbXVjaCwgc28gbm90IHVzZWQgKi8KIAlzdHJ1Y3Qgc25kX2tjb250cm9sICppbnB1dF9taXhlcl9jdGxzW0hEU1BNX01BWF9DSEFOTkVMU107Ci0JLyogZnVsbCBtaXhlciBhY2Nlc3NhYmxlIG92ZXIgbWl4ZXIgaW9jdGwgb3IgaHdkZXAtZGV2aWNlICovCisJLyogZnVsbCBtaXhlciBhY2Nlc3NpYmxlIG92ZXIgbWl4ZXIgaW9jdGwgb3IgaHdkZXAtZGV2aWNlICovCiAJc3RydWN0IGhkc3BtX21peGVyICptaXhlcjsKIAogfTsKQEAgLTU1MCw3ICs1NTAsNyBAQAogCXJldHVybiBiaXQyZnJlcV90YWJbbl07CiB9CiAKLS8qIFdyaXRlL3JlYWQgdG8vZnJvbSBIRFNQTSB3aXRoIEFkcmVzc2VzIGluIEJ5dGVzCisvKiBXcml0ZS9yZWFkIHRvL2Zyb20gSERTUE0gd2l0aCBBZGRyZXNzZXMgaW4gQnl0ZXMKICAgIG5vdCB3b3JkcyBidXQgb25seSAzMkJpdCB3cml0ZXMgYXJlIGFsbG93ZWQgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGhkc3BtX3dyaXRlKHN0cnVjdCBoZHNwbSAqIGhkc3BtLCB1bnNpZ25lZCBpbnQgcmVnLApAQCAtMjkwOCw3ICsyOTA4LDcgQEAKIAogCS8qIENoYW5uZWwgcGxheWJhY2sgbWl4ZXIgYXMgZGVmYXVsdCBjb250cm9sIAogCSAgIE5vdGU6IHRoZSB3aG9sZSBtYXRyaXggd291bGQgYmUgMTI4KkhEU1BNX01JWEVSX0NIQU5ORUxTIEZhZGVycywKLQkgICB0aGF0cyB0b28gKiBiaWcgZm9yIGFueSBhbHNhbWl4ZXIgdGhleSBhcmUgYWNjZXNpYmxlIHZpYSBzcGVjaWFsCisJICAgdGhhdHMgdG9vICogYmlnIGZvciBhbnkgYWxzYW1peGVyIHRoZXkgYXJlIGFjY2Vzc2libGUgdmlhIHNwZWNpYWwKIAkgICBJT0NUTCBvbiBod2RlcCBhbmQgdGhlIG1peGVyIDJkaW1lbnNpb25hbCBtaXhlciBjb250cm9sCiAJKi8KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCmluZGV4IDU1MTgzNzEuLmM5NGMwNTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYworKysgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKQEAgLTEzODksMTUgKzEzODksOSBAQAogCiBzdGF0aWMgaW50IHNuZF95bWZwY2lfZHJlY19zb3VyY2VfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQogewotCXN0YXRpYyBjaGFyICp0ZXh0c1szXSA9IHsiQUMnOTciLCAiSUVDOTU4IiwgIlpWIFBvcnQifTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGV4dHNbM10gPSB7IkFDJzk3IiwgIklFQzk1OCIsICJaViBQb3J0In07CiAKLQlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwotCWluZm8tPmNvdW50ID0gMTsKLQlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKLQlpZiAoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID4gMikKLQkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMjsKLQlzdHJjcHkoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCB0ZXh0c1tpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc25kX2N0bF9lbnVtX2luZm8oaW5mbywgMSwgMywgdGV4dHMpOwogfQogCiBzdGF0aWMgaW50IHNuZF95bWZwY2lfZHJlY19zb3VyY2VfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9zbmRfcHMzLmMgYi9zb3VuZC9wcGMvc25kX3BzMy5jCmluZGV4IDU4MWE2NzAuLmVkY2U4YTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9zbmRfcHMzLmMKKysrIGIvc291bmQvcHBjL3NuZF9wczMuYwpAQCAtNTEsNyArNTEsNyBAQAogc3RhdGljIGludCBzbmRfcHMzX3N0YXJ0X2RlbGF5ID0gQ09ORklHX1NORF9QUzNfREVGQVVMVF9TVEFSVF9ERUxBWTsKIAogbW9kdWxlX3BhcmFtX25hbWVkKHN0YXJ0X2RlbGF5LCBzbmRfcHMzX3N0YXJ0X2RlbGF5LCB1aW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Moc3RhcnRfZGVsYXksICJ0aW1lIHRvIGluc2VydCBzaWxlbnQgZGF0YSBpbiBtaWxpc2VjIik7CitNT0RVTEVfUEFSTV9ERVNDKHN0YXJ0X2RlbGF5LCAidGltZSB0byBpbnNlcnQgc2lsZW50IGRhdGEgaW4gbXMiKTsKIAogc3RhdGljIGludCBpbmRleCA9IFNORFJWX0RFRkFVTFRfSURYMTsKIHN0YXRpYyBjaGFyICppZCA9IFNORFJWX0RFRkFVTFRfU1RSMTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9LY29uZmlnIGIvc291bmQvc29jL0tjb25maWcKaW5kZXggM2U1OThlNy4uYTNlZmM1MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL0tjb25maWcKKysrIGIvc291bmQvc29jL0tjb25maWcKQEAgLTIwLDYgKzIwLDIxIEBACiAKIGlmIFNORF9TT0MKIAorY29uZmlnIFNORF9TT0NfQ0FDSEVfTFpPCisJYm9vbCAiU3VwcG9ydCBMWk8gY29tcHJlc3Npb24gZm9yIHJlZ2lzdGVyIGNhY2hlcyIKKwlzZWxlY3QgTFpPX0NPTVBSRVNTCisJc2VsZWN0IExaT19ERUNPTVBSRVNTCisJLS0taGVscC0tLQorCSAgIFNlbGVjdCB0aGlzIHRvIGVuYWJsZSBMWk8gY29tcHJlc3Npb24gZm9yIHJlZ2lzdGVyIGNhY2hlcy4KKwkgICBUaGlzIHdpbGwgYWxsb3cgbWFjaGluZSBvciBDT0RFQyBkcml2ZXJzIHRvIGNvbXByZXNzIHJlZ2lzdGVyCisJICAgY2FjaGVzIGluIG1lbW9yeSwgcmVkdWNpbmcgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBhdCB0aGUKKwkgICBleHBlbnNlIG9mIHBlcmZvcm1hbmNlLiAgSWYgdGhpcyBpcyBub3QgcHJlc2VudCBhbmQgaXMgdXNlZAorCSAgIHRoZSBzeXN0ZW0gd2lsbCBmYWxsIGJhY2sgdG8gdW5jb21wcmVzc2VkIGNhY2hlcy4KKworCSAgIFVzdWFsbHkgaXQgaXMgc2FmZSB0byBkaXNhYmxlIHRoaXMgb3B0aW9uLCB3aGVyZSBjYWNoZQorCSAgIGNvbXByZXNzaW9uIGluIHVzZWQgdGhlIHJidHJlZSBvcHRpb24gd2lsbCB0eXBpY2FsbHkgcGVyZm9ybQorCSAgIGJldHRlci4KKwogY29uZmlnIFNORF9TT0NfQUM5N19CVVMKIAlib29sCiAKQEAgLTM2LDcgKzUxLDcgQEAKIHNvdXJjZSAic291bmQvc29jL29tYXAvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL2tpcmt3b29kL0tjb25maWciCiBzb3VyY2UgInNvdW5kL3NvYy9weGEvS2NvbmZpZyIKLXNvdXJjZSAic291bmQvc29jL3MzYzI0eHgvS2NvbmZpZyIKK3NvdXJjZSAic291bmQvc29jL3NhbXN1bmcvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL3M2MDAwL0tjb25maWciCiBzb3VyY2UgInNvdW5kL3NvYy9zaC9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2MvdHh4OS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL01ha2VmaWxlIGIvc291bmQvc29jL01ha2VmaWxlCmluZGV4IGViMTgzNDQuLmNlOTEzYmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDcgQEAKIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBvbWFwLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGtpcmt3b29kLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IHB4YS8KLW9iai0kKENPTkZJR19TTkRfU09DKQkrPSBzM2MyNHh4Lworb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IHNhbXN1bmcvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gczYwMDAvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gc2gvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gdHh4OS8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9wbGF5cGFxX3dtODUxMC5jIGIvc291bmQvc29jL2F0bWVsL3BsYXlwYXFfd204NTEwLmMKaW5kZXggNWY0ZTU5Zi4uMWFhYzJmNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL3BsYXlwYXFfd204NTEwLmMKKysrIGIvc291bmQvc29jL2F0bWVsL3BsYXlwYXFfd204NTEwLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPG1hY2gvYXQzMmFwNzAweC5oPgogI2luY2x1ZGUgPG1hY2gvcG9ydG11eC5oPgpAQCAtMzE4LDI3ICszMTcsMjggQEAKIHN0YXRpYyBpbnQgcGxheXBhcV93bTg1MTBfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCWludCBpOwogCiAJLyoKIAkgKiBBZGQgREFQTSB3aWRnZXRzCiAJICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGxheXBhcV9kYXBtX3dpZGdldHMpOyBpKyspCi0JCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbChjb2RlYywgJnBsYXlwYXFfZGFwbV93aWRnZXRzW2ldKTsKKwkJc25kX3NvY19kYXBtX25ld19jb250cm9sKGRhcG0sICZwbGF5cGFxX2RhcG1fd2lkZ2V0c1tpXSk7CiAKIAogCiAJLyoKIAkgKiBTZXR1cCBhdWRpbyBwYXRoIGludGVyY29ubmVjdHMKIAkgKi8KLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOwogCiAKIAogCS8qIGFsd2F5cyBjb25uZWN0ZWQgcGlucyAqLwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSW50IE1pYyIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IFNwayIpOwotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSW50IE1pYyIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJFeHQgU3BrIik7CisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CiAKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYyBiL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jCmluZGV4IGU1MjFhZGEuLmFmM2M3MzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTE0MCw2ICsxMzksNyBAQAogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IHJldDsKIAogCXByaW50ayhLRVJOX0RFQlVHCkBAIC0xNTQsMjUgKzE1NCwyNSBAQAogCX0KIAogCS8qIEFkZCBzcGVjaWZpYyB3aWRnZXRzICovCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgYXQ5MXNhbTlnMjBla19kYXBtX3dpZGdldHMsCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBhdDkxc2FtOWcyMGVrX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUoYXQ5MXNhbTlnMjBla19kYXBtX3dpZGdldHMpKTsKIAkvKiBTZXQgdXAgc3BlY2lmaWMgYXVkaW8gcGF0aCBpbnRlcmNvbm5lY3RzICovCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKIAogCS8qIG5vdCBjb25uZWN0ZWQgKi8KLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUkxJTkVJTiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMTElORUlOIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiUkxJTkVJTiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxMSU5FSU4iKTsKIAogI2lmZGVmIEVOQUJMRV9NSUNfSU5QVVQKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkludCBNaWMiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSW50IE1pYyIpOwogI2Vsc2UKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSW50IE1pYyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkludCBNaWMiKTsKICNlbmRpZgogCiAJLyogYWx3YXlzIGNvbm5lY3RlZCAqLwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IFNwayIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJFeHQgU3BrIik7CiAKLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9zbmQtc29jLWFmZWI5MjYwLmMgYi9zb3VuZC9zb2MvYXRtZWwvc25kLXNvYy1hZmViOTI2MC5jCmluZGV4IDg2ZTBmODUuLmRhMjIwOGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdG1lbC9zbmQtc29jLWFmZWI5MjYwLmMKKysrIGIvc291bmQvc29jL2F0bWVsL3NuZC1zb2MtYWZlYjkyNjAuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0xMDUsMTkgKzEwNCwyMCBAQAogc3RhdGljIGludCBhZmViOTI2MF90bHYzMjBhaWMyM19pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKIAkvKiBBZGQgYWZlYjkyNjAgc3BlY2lmaWMgd2lkZ2V0cyAqLwotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHRsdjMyMGFpYzIzX2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHRsdjMyMGFpYzIzX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUodGx2MzIwYWljMjNfZGFwbV93aWRnZXRzKSk7CiAKIAkvKiBTZXQgdXAgYWZlYjkyNjAgc3BlY2lmaWMgYXVkaW8gcGF0aCBhdWRpb19tYXAgKi8KLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkxpbmUgSW4iKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIk1pYyBKYWNrIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkhlYWRwaG9uZSBKYWNrIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkxpbmUgSW4iKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiTWljIEphY2siKTsKIAotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvZGIxMjAwLmMgYi9zb3VuZC9zb2MvYXUxeC9kYjEyMDAuYwppbmRleCBiNjJmY2QzLi5jYjk5ZjA0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXUxeC9kYjEyMDAuYworKysgYi9zb3VuZC9zb2MvYXUxeC9kYjEyMDAuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X3BzYy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE4MzYuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE4MzYuYwppbmRleCAyMzk0YmZmLi44MzAxMmRhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxODM2LmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTgzNi5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxOTN4LmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxOTN4LmMKaW5kZXggZTRhNjI1My4uZDNjY2I5MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTkzeC5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE5M3guYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkNzMzMTEuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMKaW5kZXggOTAwY2VkNS4uNzMyZmI4YiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkNzMzMTEuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQ3MzMxMS5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3NtMjYwMi5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNzbTI2MDIuYwppbmRleCAzNmYyNzY5Li5lOTAyYjI0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3NtMjYwMi5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zc20yNjAyLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAKICNpbmNsdWRlIDxhc20vZG1hLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzLzg4cG04NjB4LWNvZGVjLmMgYi9zb3VuZC9zb2MvY29kZWNzLzg4cG04NjB4LWNvZGVjLmMKaW5kZXggMDFkMTllOS4uMDZiNjk4MSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy84OHBtODYweC1jb2RlYy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvODhwbTg2MHgtY29kZWMuYwpAQCAtMTksMTAgKzE5LDEwIEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvYXNvYy5oPgogCiAjaW5jbHVkZSAiODhwbTg2MHgtY29kZWMuaCIKIApAQCAtMTQ2LDcgKzE0Niw2IEBACiAKIAlpbnQJCQlpcnFbNF07CiAJdW5zaWduZWQgY2hhcgkJbmFtZVs0XVtNQVhfTkFNRV9MRU5dOwotCXVuc2lnbmVkIGNoYXIJCXJlZ19jYWNoZVtSRUdfQ0FDSEVfU0laRV07CiB9OwogCiAvKiAtOTQ1MGRCIHRvIDBkQiBpbiAxNTBkQiBzdGVwcyAoIG11dGUgaW5zdGVhZCBvZiAtOTQ1MGRCKSAqLwpAQCAtMTE3Miw3ICsxMTcxLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CiAJCQkvKiBFbmFibGUgQXVkaW8gUExMICYgQXVkaW8gc2VjdGlvbiAqLwogCQkJZGF0YSA9IEFVRElPX1BMTCB8IEFVRElPX1NFQ1RJT05fUkVTRVQKIAkJCQl8IEFVRElPX1NFQ1RJT05fT047CkBAIC0xMTg1LDcgKzExODQsNyBAQAogCQlwbTg2MHhfc2V0X2JpdHMoY29kZWMtPmNvbnRyb2xfZGF0YSwgUkVHX01JU0MyLCBkYXRhLCAwKTsKIAkJYnJlYWs7CiAJfQotCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOwogCXJldHVybiAwOwogfQogCkBAIC0xMjYzLDYgKzEyNjIsMTIgQEAKIAltYXNrID0gcG04NjB4LT5kZXQuaHNfc2hydCB8IHBtODYweC0+ZGV0Lmhvb2tfZGV0IHwgcG04NjB4LT5kZXQubG9fc2hydAogCQl8IHBtODYweC0+ZGV0LmhwX2RldDsKIAorI2lmbmRlZiBDT05GSUdfU05EX1NPQ184OFBNODYwWF9NT0RVTEUKKwlpZiAoc3RhdHVzICYgKEhFQURTRVRfU1RBVFVTIHwgTUlDX1NUQVRVUyB8IFNIT1JUX0hTMSB8IFNIT1JUX0hTMiB8CisJCSAgICAgIFNIT1JUX0xPMSB8IFNIT1JUX0xPMikpCisJCXRyYWNlX3NuZF9zb2NfamFja19pcnEoZGV2X25hbWUocG04NjB4LT5jb2RlYy0+ZGV2KSk7CisjZW5kaWYKKwogCWlmICgocG04NjB4LT5kZXQuaHBfZGV0ICYgU05EX0pBQ0tfSEVBRFBIT05FKQogCQkmJiAoc3RhdHVzICYgSEVBRFNFVF9TVEFUVVMpKQogCQlyZXBvcnQgfD0gU05EX0pBQ0tfSEVBRFBIT05FOwpAQCAtMTM0Niw2ICsxMzUxLDcgQEAKIHN0YXRpYyBpbnQgcG04NjB4X3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgcG04NjB4X3ByaXYgKnBtODYweCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlpbnQgaSwgcmV0OwogCiAJcG04NjB4LT5jb2RlYyA9IGNvZGVjOwpAQCAtMTM1OCw3ICsxMzY0LDcgQEAKIAkJCQkJICAgcG04NjB4LT5uYW1lW2ldLCBwbTg2MHgpOwogCQlpZiAocmV0IDwgMCkgewogCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSVJRIVxuIik7Ci0JCQlnb3RvIG91dF9pcnE7CisJCQlnb3RvIG91dDsKIAkJfQogCX0KIApAQCAtMTM2OSwyMiArMTM3NSwyMCBAQAogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBmaWxsIHJlZ2lzdGVyIGNhY2hlOiAlZFxuIiwKIAkJCXJldCk7Ci0JCWdvdG8gb3V0X2NvZGVjOworCQlnb3RvIG91dDsKIAl9CiAKIAlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgcG04NjB4X3NuZF9jb250cm9scywKIAkJCSAgICAgQVJSQVlfU0laRShwbTg2MHhfc25kX2NvbnRyb2xzKSk7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgcG04NjB4X2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHBtODYweF9kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHBtODYweF9kYXBtX3dpZGdldHMpKTsKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAlyZXR1cm4gMDsKIAotb3V0X2NvZGVjOgotCWkgPSAzOwotb3V0X2lycToKLQlmb3IgKDsgaSA+PSAwOyBpLS0pCitvdXQ6CisJd2hpbGUgKC0taSA+PSAwKQogCQlmcmVlX2lycShwbTg2MHgtPmlycVtpXSwgcG04NjB4KTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHBtODYweF9yZW1vdmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCmluZGV4IDNiNTY5MGQuLjg4M2EzMTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKQEAgLTIyLDYgKzIyLDcgQEAKIAlzZWxlY3QgU05EX1NPQ19BSzQ1MzUgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfQUs0NjQyIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX0FLNDY3MSBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19BTEM1NjIzIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX0NRMDA5M1ZDIGlmIE1GRF9EQVZJTkNJX1ZPSUNFQ09ERUMKIAlzZWxlY3QgU05EX1NPQ19DUzQyTDUxIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX0NTNDI3MCBpZiBJMkMKQEAgLTU0LDkgKzU1LDExIEBACiAJc2VsZWN0IFNORF9TT0NfV004NzI3CiAJc2VsZWN0IFNORF9TT0NfV004NzI4IGlmIFNORF9TT0NfSTJDX0FORF9TUEkKIAlzZWxlY3QgU05EX1NPQ19XTTg3MzEgaWYgU05EX1NPQ19JMkNfQU5EX1NQSQorCXNlbGVjdCBTTkRfU09DX1dNODczNyBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCiAJc2VsZWN0IFNORF9TT0NfV004NzQxIGlmIFNORF9TT0NfSTJDX0FORF9TUEkKIAlzZWxlY3QgU05EX1NPQ19XTTg3NTAgaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNODc1MyBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCisJc2VsZWN0IFNORF9TT0NfV004NzcwIGlmIFNQSV9NQVNURVIKIAlzZWxlY3QgU05EX1NPQ19XTTg3NzYgaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNODgwNCBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCiAJc2VsZWN0IFNORF9TT0NfV004OTAwIGlmIEkyQwpAQCAtNzUsNiArNzgsNyBAQAogCXNlbGVjdCBTTkRfU09DX1dNODk5MCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5OTMgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTk0IGlmIE1GRF9XTTg5OTQKKwlzZWxlY3QgU05EX1NPQ19XTTg5OTUgaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNOTA4MSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTkwOTAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV005NzA1IGlmIFNORF9TT0NfQUM5N19CVVMKQEAgLTEzMCw2ICsxMzQsOSBAQAogY29uZmlnIFNORF9TT0NfQUs0NjcxCiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfQUxDNTYyMworICAgICAgIHRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX0NRMDA5M1ZDCiAJdHJpc3RhdGUKIApAQCAtMTYwLDYgKzE2Nyw5IEBACiBjb25maWcgU05EX1NPQ19EQTcyMTAKICAgICAgICAgdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfRE1JQworCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX01BWDk4MDg4CiAgICAgICAgdHJpc3RhdGUKIApAQCAtMjMxLDYgKzI0MSw5IEBACiBjb25maWcgU05EX1NPQ19XTTg3MzEKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg3MzcKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTg3NDEKIAl0cmlzdGF0ZQogCkBAIC0yNDAsNiArMjUzLDkgQEAKIGNvbmZpZyBTTkRfU09DX1dNODc1MwogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNODc3MAorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX1dNODc3NgogCXRyaXN0YXRlCiAKQEAgLTI5NCw2ICszMTAsOSBAQAogY29uZmlnIFNORF9TT0NfV004OTk0CiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfV004OTk1CisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfV005MDgxCiAJdHJpc3RhdGUKIApAQCAtMzE4LDMgKzMzNyw0IEBACiAKIGNvbmZpZyBTTkRfU09DX1dNOTA5MAogCXRyaXN0YXRlCisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCmluZGV4IGY2N2EyZDYuLjU3OWFmOWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQpAQCAtMTQsOSArMTQsMTEgQEAKIHNuZC1zb2MtY3M0MjcwLW9ianMgOj0gY3M0MjcwLm8KIHNuZC1zb2MtY3gyMDQ0Mi1vYmpzIDo9IGN4MjA0NDIubwogc25kLXNvYy1kYTcyMTAtb2JqcyA6PSBkYTcyMTAubworc25kLXNvYy1kbWljLW9ianMgOj0gZG1pYy5vCiBzbmQtc29jLWwzLW9ianMgOj0gbDMubwogc25kLXNvYy1tYXg5ODA4OC1vYmpzIDo9IG1heDk4MDg4Lm8KIHNuZC1zb2MtcGNtMzAwOC1vYmpzIDo9IHBjbTMwMDgubworc25kLXNvYy1hbGM1NjIzLW9ianMgOj0gYWxjNTYyMy5vCiBzbmQtc29jLXNwZGlmLW9ianMgOj0gc3BkaWZfdHJhbnNjaWV2ZXIubwogc25kLXNvYy1zc20yNjAyLW9ianMgOj0gc3NtMjYwMi5vCiBzbmQtc29jLXN0YWM5NzY2LW9ianMgOj0gc3RhYzk3NjYubwpAQCAtMzgsOSArNDAsMTEgQEAKIHNuZC1zb2Mtd204NzI3LW9ianMgOj0gd204NzI3Lm8KIHNuZC1zb2Mtd204NzI4LW9ianMgOj0gd204NzI4Lm8KIHNuZC1zb2Mtd204NzMxLW9ianMgOj0gd204NzMxLm8KK3NuZC1zb2Mtd204NzM3LW9ianMgOj0gd204NzM3Lm8KIHNuZC1zb2Mtd204NzQxLW9ianMgOj0gd204NzQxLm8KIHNuZC1zb2Mtd204NzUwLW9ianMgOj0gd204NzUwLm8KIHNuZC1zb2Mtd204NzUzLW9ianMgOj0gd204NzUzLm8KK3NuZC1zb2Mtd204NzcwLW9ianMgOj0gd204NzcwLm8KIHNuZC1zb2Mtd204Nzc2LW9ianMgOj0gd204Nzc2Lm8KIHNuZC1zb2Mtd204ODA0LW9ianMgOj0gd204ODA0Lm8KIHNuZC1zb2Mtd204OTAwLW9ianMgOj0gd204OTAwLm8KQEAgLTU4LDcgKzYyLDggQEAKIHNuZC1zb2Mtd204OTg4LW9ianMgOj0gd204OTg4Lm8KIHNuZC1zb2Mtd204OTkwLW9ianMgOj0gd204OTkwLm8KIHNuZC1zb2Mtd204OTkzLW9ianMgOj0gd204OTkzLm8KLXNuZC1zb2Mtd204OTk0LW9ianMgOj0gd204OTk0Lm8KK3NuZC1zb2Mtd204OTk0LW9ianMgOj0gd204OTk0Lm8gd204OTk0LXRhYmxlcy5vCitzbmQtc29jLXdtODk5NS1vYmpzIDo9IHdtODk5NS5vCiBzbmQtc29jLXdtOTA4MS1vYmpzIDo9IHdtOTA4MS5vCiBzbmQtc29jLXdtOTcwNS1vYmpzIDo9IHdtOTcwNS5vCiBzbmQtc29jLXdtOTcxMi1vYmpzIDo9IHdtOTcxMi5vCkBAIC04OCwxMCArOTMsMTIgQEAKIG9iai0kKENPTkZJR19TTkRfU09DX0NTNDI3MCkJKz0gc25kLXNvYy1jczQyNzAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQ1gyMDQ0MikJKz0gc25kLXNvYy1jeDIwNDQyLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0RBNzIxMCkJKz0gc25kLXNvYy1kYTcyMTAubworb2JqLSQoQ09ORklHX1NORF9TT0NfRE1JQykJKz0gc25kLXNvYy1kbWljLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0wzKQkrPSBzbmQtc29jLWwzLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0paNDc0MF9DT0RFQykJKz0gc25kLXNvYy1qejQ3NDAtY29kZWMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfTUFYOTgwODgpCSs9IHNuZC1zb2MtbWF4OTgwODgubwogb2JqLSQoQ09ORklHX1NORF9TT0NfUENNMzAwOCkJKz0gc25kLXNvYy1wY20zMDA4Lm8KK29iai0kKENPTkZJR19TTkRfU09DX0FMQzU2MjMpICAgICs9IHNuZC1zb2MtYWxjNTYyMy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19TUERJRikJKz0gc25kLXNvYy1zcGRpZi5vCiBvYmotJChDT05GSUdfU05EX1NPQ19TU00yNjAyKQkrPSBzbmQtc29jLXNzbTI2MDIubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU1RBQzk3NjYpCSs9IHNuZC1zb2Mtc3RhYzk3NjYubwpAQCAtMTEzLDkgKzEyMCwxMSBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfV004NzI3KQkrPSBzbmQtc29jLXdtODcyNy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg3MjgpCSs9IHNuZC1zb2Mtd204NzI4Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODczMSkJKz0gc25kLXNvYy13bTg3MzEubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004NzM3KQkrPSBzbmQtc29jLXdtODczNy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg3NDEpCSs9IHNuZC1zb2Mtd204NzQxLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODc1MCkJKz0gc25kLXNvYy13bTg3NTAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004NzUzKQkrPSBzbmQtc29jLXdtODc1My5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg3NzApCSs9IHNuZC1zb2Mtd204NzcwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODc3NikJKz0gc25kLXNvYy13bTg3NzYubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004ODA0KQkrPSBzbmQtc29jLXdtODgwNC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5MDApCSs9IHNuZC1zb2Mtd204OTAwLm8KQEAgLTEzNCw2ICsxNDMsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTkwKQkrPSBzbmQtc29jLXdtODk5MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5OTMpCSs9IHNuZC1zb2Mtd204OTkzLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk5NCkJKz0gc25kLXNvYy13bTg5OTQubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTk1KQkrPSBzbmQtc29jLXdtODk5NS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTkwODEpCSs9IHNuZC1zb2Mtd205MDgxLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNOTcwNSkJKz0gc25kLXNvYy13bTk3MDUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV005NzEyKQkrPSBzbmQtc29jLXdtOTcxMi5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYwppbmRleCBkMjcyNTM0Li5hYjYzZDUyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSAiYWQxODM2LmgiCiAKQEAgLTIyMCw2ICsyMTksNyBAQAogc3RhdGljIGludCBhZDE4MzZfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE4MzZfcHJpdiAqYWQxODM2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCWludCByZXQgPSAwOwogCiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGFkMTgzNi0+Y29udHJvbF9kYXRhOwpAQCAtMjI3LDcgKzIyNyw2IEBACiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLAogCQkJCXJldCk7Ci0JCWtmcmVlKGFkMTgzNik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yNTIsOSArMjUxLDkgQEAKIAogCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhZDE4MzZfc25kX2NvbnRyb2xzLAogCQkJICAgICBBUlJBWV9TSVpFKGFkMTgzNl9zbmRfY29udHJvbHMpKTsKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBhZDE4MzZfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgYWQxODM2X2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUoYWQxODM2X2RhcG1fd2lkZ2V0cykpOwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19wYXRocywgQVJSQVlfU0laRShhdWRpb19wYXRocykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX3BhdGhzLCBBUlJBWV9TSVpFKGF1ZGlvX3BhdGhzKSk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE5M3guYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTN4LmMKaW5kZXggZmEyODM0Yy4uZGE0NjQ3OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE5M3guYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTkzeC5jCkBAIC0xOSwxMiArMTksMTAgQEAKICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlICJhZDE5M3guaCIKIAogLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCiBzdHJ1Y3QgYWQxOTN4X3ByaXYgewotCXU4IHJlZ19jYWNoZVtBRDE5M1hfTlVNX1JFR1NdOwogCWVudW0gc25kX3NvY19jb250cm9sX3R5cGUgYnVzX3R5cGU7CiAJdm9pZCAqY29udHJvbF9kYXRhOwogCWludCBzeXNjbGs7CkBAIC0zNTMsNiArMzUxLDcgQEAKIHN0YXRpYyBpbnQgYWQxOTN4X3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTN4X3ByaXYgKmFkMTkzeCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlpbnQgcmV0OwogCiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGFkMTkzeC0+Y29udHJvbF9kYXRhOwpAQCAtMzYzLDcgKzM2Miw2IEBACiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLAogCQkJCXJldCk7Ci0JCWtmcmVlKGFkMTkzeCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0zODUsOSArMzgzLDkgQEAKIAogCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhZDE5M3hfc25kX2NvbnRyb2xzLAogCQkJICAgICBBUlJBWV9TSVpFKGFkMTkzeF9zbmRfY29udHJvbHMpKTsKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBhZDE5M3hfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgYWQxOTN4X2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUoYWQxOTN4X2RhcG1fd2lkZ2V0cykpOwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19wYXRocywgQVJSQVlfU0laRShhdWRpb19wYXRocykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX3BhdGhzLCBBUlJBWV9TSVpFKGF1ZGlvX3BhdGhzKSk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTgwLmMKaW5kZXggNDEwY2NkNS4uMzRjYjUxZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTk4MC5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSAiYWQxOTgwLmgiCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jCmluZGV4IGNkODhjOGYuLjhiMzg3MzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQ1MzUuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIAogI2luY2x1ZGUgImFrNDUzNS5oIgpAQCAtMjkwLDEwICsyODksMTEgQEAKIAogc3RhdGljIGludCBhazQ1MzVfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGFrNDUzNV9kYXBtX3dpZGdldHMsCi0JCQkJICBBUlJBWV9TSVpFKGFrNDUzNV9kYXBtX3dpZGdldHMpKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgYWs0NTM1X2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUoYWs0NTM1X2RhcG1fd2lkZ2V0cykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzY2LDkgKzM2Niw5IEBACiBzdGF0aWMgaW50IGFrNDUzNV9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwotCXUxNiBtdXRlX3JlZyA9IGFrNDUzNV9yZWFkX3JlZ19jYWNoZShjb2RlYywgQUs0NTM1X0RBQykgJiAweGZmZGY7CisJdTE2IG11dGVfcmVnID0gYWs0NTM1X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBBSzQ1MzVfREFDKTsKIAlpZiAoIW11dGUpCi0JCWFrNDUzNV93cml0ZShjb2RlYywgQUs0NTM1X0RBQywgbXV0ZV9yZWcpOworCQlhazQ1MzVfd3JpdGUoY29kZWMsIEFLNDUzNV9EQUMsIG11dGVfcmVnICYgfjB4MjApOwogCWVsc2UKIAkJYWs0NTM1X3dyaXRlKGNvZGVjLCBBSzQ1MzVfREFDLCBtdXRlX3JlZyB8IDB4MjApOwogCXJldHVybiAwOwpAQCAtMzgxLDExICszODEsMTEgQEAKIAogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKLQkJbXV0ZV9yZWcgPSBhazQ1MzVfcmVhZF9yZWdfY2FjaGUoY29kZWMsIEFLNDUzNV9EQUMpICYgMHhmZmRmOwotCQlhazQ1MzVfd3JpdGUoY29kZWMsIEFLNDUzNV9EQUMsIG11dGVfcmVnKTsKKwkJbXV0ZV9yZWcgPSBhazQ1MzVfcmVhZF9yZWdfY2FjaGUoY29kZWMsIEFLNDUzNV9EQUMpOworCQlhazQ1MzVfd3JpdGUoY29kZWMsIEFLNDUzNV9EQUMsIG11dGVfcmVnICYgfjB4MjApOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgotCQltdXRlX3JlZyA9IGFrNDUzNV9yZWFkX3JlZ19jYWNoZShjb2RlYywgQUs0NTM1X0RBQykgJiAweGZmZGY7CisJCW11dGVfcmVnID0gYWs0NTM1X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBBSzQ1MzVfREFDKTsKIAkJYWs0NTM1X3dyaXRlKGNvZGVjLCBBSzQ1MzVfREFDLCBtdXRlX3JlZyB8IDB4MjApOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgpAQCAtMzk5LDcgKzM5OSw3IEBACiAJCWFrNDUzNV93cml0ZShjb2RlYywgQUs0NTM1X1BNMSwgaSAmICh+MHg4MCkpOwogCQlicmVhazsKIAl9Ci0JY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gbGV2ZWw7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQyLmMgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDY0Mi5jCmluZGV4IDkwYzkwYjcuLmYwMGViYTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQ2NDIuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQ2NzEuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjcxLmMKaW5kZXggMjRmNWY0OS4uMmVjNzVhYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hazQ2NzEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDY3MS5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKQEAgLTI4LDcgKzI3LDYgQEAKIHN0cnVjdCBhazQ2NzFfcHJpdiB7CiAJZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sX3R5cGU7CiAJdm9pZCAqY29udHJvbF9kYXRhOwotCXU4IHJlZ19jYWNoZVtBSzQ2NzFfQ0FDSEVSRUdOVU1dOwogfTsKIAogLyogYWs0NjcxIHJlZ2lzdGVyIGNhY2hlICYgZGVmYXVsdCByZWdpc3RlciBzZXR0aW5ncyAqLwpAQCAtNDM3LDEwICs0MzUsMTEgQEAKIAogc3RhdGljIGludCBhazQ2NzFfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGFrNDY3MV9kYXBtX3dpZGdldHMsCi0JCQkJICBBUlJBWV9TSVpFKGFrNDY3MV9kYXBtX3dpZGdldHMpKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIGFrNDY3MV9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKGFrNDY3MV9kYXBtX3dpZGdldHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MDIsNyArNjAxLDcgQEAKIAkJc25kX3NvY193cml0ZShjb2RlYywgQUs0NjcxX0FEX0RBX1BPV0VSX01BTkFHRU1FTlQsIDB4MDApOwogCQlicmVhazsKIAl9Ci0JY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gbGV2ZWw7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWxjNTYyMy5jIGIvc291bmQvc29jL2NvZGVjcy9hbGM1NjIzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzNzdjOQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWxjNTYyMy5jCkBAIC0wLDAgKzEsMTExNyBAQAorLyoKKyAqIGFsYzU2MjMuYyAgLS0gIGFsYzU2MlsxMjNdIEFMU0EgU29jIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA4IFJlYWx0ZWsgTWljcm9lbGVjdHJvbmljcworICogQXV0aG9yOiBmbG92ZSA8ZmxvdmVAcmVhbHRlay5jb20+IEV0aGFuIDxla3VAbWFydmVsbC5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMTAgQXJuYXVkIFBhdGFyZCA8YXJuYXVkLnBhdGFyZEBydHAtbmV0Lm9yZz4KKyAqCisgKgorICogQmFzZWQgb24gV004NzUzLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvYWxjNTYyMy5oPgorCisjaW5jbHVkZSAiYWxjNTYyMy5oIgorCitzdGF0aWMgaW50IGNhcHNfY2hhcmdlID0gMjAwMDsKK21vZHVsZV9wYXJhbShjYXBzX2NoYXJnZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoY2Fwc19jaGFyZ2UsICJBTEM1NjIzIGNhcCBjaGFyZ2UgdGltZSAobXNlY3MpIik7CisKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IGFsYzU2MjNfcHJpdiB7CisJZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sX3R5cGU7CisJdm9pZCAqY29udHJvbF9kYXRhOworCXN0cnVjdCBtdXRleCBtdXRleDsKKwl1OCBpZDsKKwl1bnNpZ25lZCBpbnQgc3lzY2xrOworCXUxNiByZWdfY2FjaGVbQUxDNTYyM19WRU5ET1JfSUQyKzJdOworCXVuc2lnbmVkIGludCBhZGRfY3RybDsKKwl1bnNpZ25lZCBpbnQgamFja19kZXRfY3RybDsKK307CisKK3N0YXRpYyB2b2lkIGFsYzU2MjNfZmlsbF9jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IGksIHN0ZXAgPSBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc3RlcDsKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKworCS8qIG5vdCByZWFsbHkgZWZmaWNpZW50IC4uLiAqLworCWZvciAoaSA9IDAgOyBpIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUgOyBpICs9IHN0ZXApCisJCWNhY2hlW2ldID0gY29kZWMtPmh3X3JlYWQoY29kZWMsIGkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhbGM1NjIzX3Jlc2V0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgQUxDNTYyM19SRVNFVCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYW1wX21peGVyX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJLyogdG8gcG93ZXItb24vb2ZmIGNsYXNzLWQgYW1wIGdlbmVyYXRvcnMvc3BlYWtlciAqLworCS8qIG5lZWQgdG8gd3JpdGUgdG8gJ2luZGV4LTQ2aCcgcmVnaXN0ZXIgOiAgICAgICAgKi8KKwkvKiBzbyB3cml0ZSBpbmRleCBudW0gKGhlcmUgMHg0NikgdG8gcmVnIDB4NmEgICAgICovCisJLyogYW5kIHRoZW4gMHhmZmZmLzAgdG8gcmVnIDB4NmMgICAgICAgICAgICAgICAgICAqLworCXNuZF9zb2Nfd3JpdGUody0+Y29kZWMsIEFMQzU2MjNfSElEX0NUUkxfSU5ERVgsIDB4NDYpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCXNuZF9zb2Nfd3JpdGUody0+Y29kZWMsIEFMQzU2MjNfSElEX0NUUkxfREFUQSwgMHhGRkZGKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCXNuZF9zb2Nfd3JpdGUody0+Y29kZWMsIEFMQzU2MjNfSElEX0NUUkxfREFUQSwgMCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogQUxDNTYyMyBDb250cm9scworICovCisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRSh2b2xfdGx2LCAtMzQ1MCwgMTUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShocF90bHYsIC00NjUwLCAxNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGFkY19yZWNfdGx2LCAtMTY1MCwgMTUwLCAwKTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYm9vc3RfdGx2W10gPSB7CisJVExWX0RCX1JBTkdFX0hFQUQoMyksCisJMCwgMCwgVExWX0RCX1NDQUxFX0lURU0oMCwgMCwgMCksCisJMSwgMSwgVExWX0RCX1NDQUxFX0lURU0oMjAwMCwgMCwgMCksCisJMiwgMiwgVExWX0RCX1NDQUxFX0lURU0oMzAwMCwgMCwgMCksCit9Oworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRpZ190bHYsIDAsIDYwMCwgMCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2MjFfdm9sX3NuZF9jb250cm9sc1tdID0geworCVNPQ19ET1VCTEVfVExWKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCisJCQlBTEM1NjIzX1NQS19PVVRfVk9MLCA4LCAwLCAzMSwgMSwgaHBfdGx2KSwKKwlTT0NfRE9VQkxFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsCisJCQlBTEM1NjIzX1NQS19PVVRfVk9MLCAxNSwgNywgMSwgMSksCisJU09DX0RPVUJMRV9UTFYoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLAorCQkJQUxDNTYyM19IUF9PVVRfVk9MLCA4LCAwLCAzMSwgMSwgaHBfdGx2KSwKKwlTT0NfRE9VQkxFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwKKwkJCUFMQzU2MjNfSFBfT1VUX1ZPTCwgMTUsIDcsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTYyMl92b2xfc25kX2NvbnRyb2xzW10gPSB7CisJU09DX0RPVUJMRV9UTFYoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwKKwkJCUFMQzU2MjNfU1BLX09VVF9WT0wsIDgsIDAsIDMxLCAxLCBocF90bHYpLAorCVNPQ19ET1VCTEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJCUFMQzU2MjNfU1BLX09VVF9WT0wsIDE1LCA3LCAxLCAxKSwKKwlTT0NfRE9VQkxFX1RMVigiTGluZSBQbGF5YmFjayBWb2x1bWUiLAorCQkJQUxDNTYyM19IUF9PVVRfVk9MLCA4LCAwLCAzMSwgMSwgaHBfdGx2KSwKKwlTT0NfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsCisJCQlBTEM1NjIzX0hQX09VVF9WT0wsIDE1LCA3LCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM1NjIzX3ZvbF9zbmRfY29udHJvbHNbXSA9IHsKKwlTT0NfRE9VQkxFX1RMVigiTGluZSBQbGF5YmFjayBWb2x1bWUiLAorCQkJQUxDNTYyM19TUEtfT1VUX1ZPTCwgOCwgMCwgMzEsIDEsIGhwX3RsdiksCisJU09DX0RPVUJMRSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLAorCQkJQUxDNTYyM19TUEtfT1VUX1ZPTCwgMTUsIDcsIDEsIDEpLAorCVNPQ19ET1VCTEVfVExWKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkJCUFMQzU2MjNfSFBfT1VUX1ZPTCwgOCwgMCwgMzEsIDEsIGhwX3RsdiksCisJU09DX0RPVUJMRSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsCisJCQlBTEM1NjIzX0hQX09VVF9WT0wsIDE1LCA3LCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM1NjIzX3NuZF9jb250cm9sc1tdID0geworCVNPQ19ET1VCTEVfVExWKCJBdXhvdXQgUGxheWJhY2sgVm9sdW1lIiwKKwkJCUFMQzU2MjNfTU9OT19BVVhfT1VUX1ZPTCwgOCwgMCwgMzEsIDEsIGhwX3RsdiksCisJU09DX0RPVUJMRSgiQXV4b3V0IFBsYXliYWNrIFN3aXRjaCIsCisJCQlBTEM1NjIzX01PTk9fQVVYX09VVF9WT0wsIDE1LCA3LCAxLCAxKSwKKwlTT0NfRE9VQkxFX1RMVigiUENNIFBsYXliYWNrIFZvbHVtZSIsCisJCQlBTEM1NjIzX1NURVJFT19EQUNfVk9MLCA4LCAwLCAzMSwgMSwgdm9sX3RsdiksCisJU09DX0RPVUJMRV9UTFYoIkF1eEkgQ2FwdHVyZSBWb2x1bWUiLAorCQkJQUxDNTYyM19BVVhJTl9WT0wsIDgsIDAsIDMxLCAxLCB2b2xfdGx2KSwKKwlTT0NfRE9VQkxFX1RMVigiTGluZUluIENhcHR1cmUgVm9sdW1lIiwKKwkJCUFMQzU2MjNfTElORV9JTl9WT0wsIDgsIDAsIDMxLCAxLCB2b2xfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiTWljMSBDYXB0dXJlIFZvbHVtZSIsCisJCQlBTEM1NjIzX01JQ19WT0wsIDgsIDMxLCAxLCB2b2xfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiTWljMiBDYXB0dXJlIFZvbHVtZSIsCisJCQlBTEM1NjIzX01JQ19WT0wsIDAsIDMxLCAxLCB2b2xfdGx2KSwKKwlTT0NfRE9VQkxFX1RMVigiUmVjIENhcHR1cmUgVm9sdW1lIiwKKwkJCUFMQzU2MjNfQURDX1JFQ19HQUlOLCA3LCAwLCAzMSwgMCwgYWRjX3JlY190bHYpLAorCVNPQ19TSU5HTEVfVExWKCJNaWMgMSBCb29zdCBWb2x1bWUiLAorCQkJQUxDNTYyM19NSUNfQ1RSTCwgMTAsIDIsIDAsIGJvb3N0X3RsdiksCisJU09DX1NJTkdMRV9UTFYoIk1pYyAyIEJvb3N0IFZvbHVtZSIsCisJCQlBTEM1NjIzX01JQ19DVFJMLCA4LCAyLCAwLCBib29zdF90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJEaWdpdGFsIEJvb3N0IFZvbHVtZSIsCisJCQlBTEM1NjIzX0FERF9DVFJMX1JFRywgNCwgMywgMCwgZGlnX3RsdiksCit9OworCisvKgorICogREFQTSBDb250cm9scworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNTYyM19ocF9taXhlcl9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJMSTJIUCBQbGF5YmFjayBTd2l0Y2giLCBBTEM1NjIzX0xJTkVfSU5fVk9MLCAxNSwgMSwgMSksCitTT0NfREFQTV9TSU5HTEUoIkFVWEkySFAgUGxheWJhY2sgU3dpdGNoIiwgQUxDNTYyM19BVVhJTl9WT0wsIDE1LCAxLCAxKSwKK1NPQ19EQVBNX1NJTkdMRSgiTUlDMTJIUCBQbGF5YmFjayBTd2l0Y2giLCBBTEM1NjIzX01JQ19ST1VUSU5HX0NUUkwsIDE1LCAxLCAxKSwKK1NPQ19EQVBNX1NJTkdMRSgiTUlDMjJIUCBQbGF5YmFjayBTd2l0Y2giLCBBTEM1NjIzX01JQ19ST1VUSU5HX0NUUkwsIDcsIDEsIDEpLAorU09DX0RBUE1fU0lOR0xFKCJEQUMySFAgUGxheWJhY2sgU3dpdGNoIiwgQUxDNTYyM19TVEVSRU9fREFDX1ZPTCwgMTUsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzU2MjNfaHBsX21peGVyX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkFEQzJIUF9MIFBsYXliYWNrIFN3aXRjaCIsIEFMQzU2MjNfQURDX1JFQ19HQUlOLCAxNSwgMSwgMSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNTYyM19ocHJfbWl4ZXJfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiQURDMkhQX1IgUGxheWJhY2sgU3dpdGNoIiwgQUxDNTYyM19BRENfUkVDX0dBSU4sIDE0LCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM1NjIzX21vbm9fbWl4ZXJfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiQURDMk1PTk9fTCBQbGF5YmFjayBTd2l0Y2giLCBBTEM1NjIzX0FEQ19SRUNfR0FJTiwgMTMsIDEsIDEpLAorU09DX0RBUE1fU0lOR0xFKCJBREMyTU9OT19SIFBsYXliYWNrIFN3aXRjaCIsIEFMQzU2MjNfQURDX1JFQ19HQUlOLCAxMiwgMSwgMSksCitTT0NfREFQTV9TSU5HTEUoIkxJMk1PTk8gUGxheWJhY2sgU3dpdGNoIiwgQUxDNTYyM19MSU5FX0lOX1ZPTCwgMTMsIDEsIDEpLAorU09DX0RBUE1fU0lOR0xFKCJBVVhJMk1PTk8gUGxheWJhY2sgU3dpdGNoIiwgQUxDNTYyM19BVVhJTl9WT0wsIDEzLCAxLCAxKSwKK1NPQ19EQVBNX1NJTkdMRSgiTUlDMTJNT05PIFBsYXliYWNrIFN3aXRjaCIsIEFMQzU2MjNfTUlDX1JPVVRJTkdfQ1RSTCwgMTMsIDEsIDEpLAorU09DX0RBUE1fU0lOR0xFKCJNSUMyMk1PTk8gUGxheWJhY2sgU3dpdGNoIiwgQUxDNTYyM19NSUNfUk9VVElOR19DVFJMLCA1LCAxLCAxKSwKK1NPQ19EQVBNX1NJTkdMRSgiREFDMk1PTk8gUGxheWJhY2sgU3dpdGNoIiwgQUxDNTYyM19TVEVSRU9fREFDX1ZPTCwgMTMsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzU2MjNfc3BlYWtlcl9taXhlcl9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJMSTJTUEsgUGxheWJhY2sgU3dpdGNoIiwgQUxDNTYyM19MSU5FX0lOX1ZPTCwgMTQsIDEsIDEpLAorU09DX0RBUE1fU0lOR0xFKCJBVVhJMlNQSyBQbGF5YmFjayBTd2l0Y2giLCBBTEM1NjIzX0FVWElOX1ZPTCwgMTQsIDEsIDEpLAorU09DX0RBUE1fU0lOR0xFKCJNSUMxMlNQSyBQbGF5YmFjayBTd2l0Y2giLCBBTEM1NjIzX01JQ19ST1VUSU5HX0NUUkwsIDE0LCAxLCAxKSwKK1NPQ19EQVBNX1NJTkdMRSgiTUlDMjJTUEsgUGxheWJhY2sgU3dpdGNoIiwgQUxDNTYyM19NSUNfUk9VVElOR19DVFJMLCA2LCAxLCAxKSwKK1NPQ19EQVBNX1NJTkdMRSgiREFDMlNQSyBQbGF5YmFjayBTd2l0Y2giLCBBTEM1NjIzX1NURVJFT19EQUNfVk9MLCAxNCwgMSwgMSksCit9OworCisvKiBMZWZ0IFJlY29yZCBNaXhlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzU2MjNfY2FwdHVyZUxfbWl4ZXJfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTWljMSBDYXB0dXJlIFN3aXRjaCIsIEFMQzU2MjNfQURDX1JFQ19NSVhFUiwgMTQsIDEsIDEpLAorU09DX0RBUE1fU0lOR0xFKCJNaWMyIENhcHR1cmUgU3dpdGNoIiwgQUxDNTYyM19BRENfUkVDX01JWEVSLCAxMywgMSwgMSksCitTT0NfREFQTV9TSU5HTEUoIkxpbmVJbkwgQ2FwdHVyZSBTd2l0Y2giLCBBTEM1NjIzX0FEQ19SRUNfTUlYRVIsIDEyLCAxLCAxKSwKK1NPQ19EQVBNX1NJTkdMRSgiTGVmdCBBdXhJIENhcHR1cmUgU3dpdGNoIiwgQUxDNTYyM19BRENfUkVDX01JWEVSLCAxMSwgMSwgMSksCitTT0NfREFQTV9TSU5HTEUoIkhQTWl4ZXJMIENhcHR1cmUgU3dpdGNoIiwgQUxDNTYyM19BRENfUkVDX01JWEVSLCAxMCwgMSwgMSksCitTT0NfREFQTV9TSU5HTEUoIlNQS01peGVyIENhcHR1cmUgU3dpdGNoIiwgQUxDNTYyM19BRENfUkVDX01JWEVSLCA5LCAxLCAxKSwKK1NPQ19EQVBNX1NJTkdMRSgiTW9ub01peGVyIENhcHR1cmUgU3dpdGNoIiwgQUxDNTYyM19BRENfUkVDX01JWEVSLCA4LCAxLCAxKSwKK307CisKKy8qIFJpZ2h0IFJlY29yZCBNaXhlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzU2MjNfY2FwdHVyZVJfbWl4ZXJfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTWljMSBDYXB0dXJlIFN3aXRjaCIsIEFMQzU2MjNfQURDX1JFQ19NSVhFUiwgNiwgMSwgMSksCitTT0NfREFQTV9TSU5HTEUoIk1pYzIgQ2FwdHVyZSBTd2l0Y2giLCBBTEM1NjIzX0FEQ19SRUNfTUlYRVIsIDUsIDEsIDEpLAorU09DX0RBUE1fU0lOR0xFKCJMaW5lSW5SIENhcHR1cmUgU3dpdGNoIiwgQUxDNTYyM19BRENfUkVDX01JWEVSLCA0LCAxLCAxKSwKK1NPQ19EQVBNX1NJTkdMRSgiUmlnaHQgQXV4SSBDYXB0dXJlIFN3aXRjaCIsIEFMQzU2MjNfQURDX1JFQ19NSVhFUiwgMywgMSwgMSksCitTT0NfREFQTV9TSU5HTEUoIkhQTWl4ZXJSIENhcHR1cmUgU3dpdGNoIiwgQUxDNTYyM19BRENfUkVDX01JWEVSLCAyLCAxLCAxKSwKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTWl4ZXIgQ2FwdHVyZSBTd2l0Y2giLCBBTEM1NjIzX0FEQ19SRUNfTUlYRVIsIDEsIDEsIDEpLAorU09DX0RBUE1fU0lOR0xFKCJNb25vTWl4ZXIgQ2FwdHVyZSBTd2l0Y2giLCBBTEM1NjIzX0FEQ19SRUNfTUlYRVIsIDAsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFsYzU2MjNfc3BrX25fc291cl9zZWxbXSA9IHsKKwkJIlJOLy1SIiwgIlJQLytSIiwgIkxOLy1SIiwgIlZtaWQiIH07CitzdGF0aWMgY29uc3QgY2hhciAqYWxjNTYyM19ocGxfb3V0X2lucHV0X3NlbFtdID0geworCQkiVm1pZCIsICJIUCBMZWZ0IE1peCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKmFsYzU2MjNfaHByX291dF9pbnB1dF9zZWxbXSA9IHsKKwkJIlZtaWQiLCAiSFAgUmlnaHQgTWl4In07CitzdGF0aWMgY29uc3QgY2hhciAqYWxjNTYyM19zcGtvdXRfaW5wdXRfc2VsW10gPSB7CisJCSJWbWlkIiwgIkhQT3V0IE1peCIsICJTcGVha2VyIE1peCIsICJNb25vIE1peCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKmFsYzU2MjNfYXV4X291dF9pbnB1dF9zZWxbXSA9IHsKKwkJIlZtaWQiLCAiSFBPdXQgTWl4IiwgIlNwZWFrZXIgTWl4IiwgIk1vbm8gTWl4In07CisKKy8qIGF1eG91dCBvdXRwdXQgbXV4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFsYzU2MjNfYXV4X291dF9pbnB1dF9lbnVtID0KK1NPQ19FTlVNX1NJTkdMRShBTEM1NjIzX09VVFBVVF9NSVhFUl9DVFJMLCA2LCA0LCBhbGM1NjIzX2F1eF9vdXRfaW5wdXRfc2VsKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM1NjIzX2F1eG91dF9tdXhfY29udHJvbHMgPQorU09DX0RBUE1fRU5VTSgiUm91dGUiLCBhbGM1NjIzX2F1eF9vdXRfaW5wdXRfZW51bSk7CisKKy8qIHNwZWFrZXIgb3V0cHV0IG11eCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhbGM1NjIzX3Nwa291dF9pbnB1dF9lbnVtID0KK1NPQ19FTlVNX1NJTkdMRShBTEM1NjIzX09VVFBVVF9NSVhFUl9DVFJMLCAxMCwgNCwgYWxjNTYyM19zcGtvdXRfaW5wdXRfc2VsKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM1NjIzX3Nwa291dF9tdXhfY29udHJvbHMgPQorU09DX0RBUE1fRU5VTSgiUm91dGUiLCBhbGM1NjIzX3Nwa291dF9pbnB1dF9lbnVtKTsKKworLyogaGVhZHBob25lIGxlZnQgb3V0cHV0IG11eCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhbGM1NjIzX2hwbF9vdXRfaW5wdXRfZW51bSA9CitTT0NfRU5VTV9TSU5HTEUoQUxDNTYyM19PVVRQVVRfTUlYRVJfQ1RSTCwgOSwgMiwgYWxjNTYyM19ocGxfb3V0X2lucHV0X3NlbCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNTYyM19ocGxfb3V0X211eF9jb250cm9scyA9CitTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIGFsYzU2MjNfaHBsX291dF9pbnB1dF9lbnVtKTsKKworLyogaGVhZHBob25lIHJpZ2h0IG91dHB1dCBtdXggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWxjNTYyM19ocHJfb3V0X2lucHV0X2VudW0gPQorU09DX0VOVU1fU0lOR0xFKEFMQzU2MjNfT1VUUFVUX01JWEVSX0NUUkwsIDgsIDIsIGFsYzU2MjNfaHByX291dF9pbnB1dF9zZWwpOworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzU2MjNfaHByX291dF9tdXhfY29udHJvbHMgPQorU09DX0RBUE1fRU5VTSgiUm91dGUiLCBhbGM1NjIzX2hwcl9vdXRfaW5wdXRfZW51bSk7CisKKy8qIHNwZWFrZXIgb3V0cHV0IE4gc2VsZWN0ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFsYzU2MjNfc3BrX25fc291cl9lbnVtID0KK1NPQ19FTlVNX1NJTkdMRShBTEM1NjIzX09VVFBVVF9NSVhFUl9DVFJMLCAxNCwgNCwgYWxjNTYyM19zcGtfbl9zb3VyX3NlbCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNTYyM19zcGtvdXRuX211eF9jb250cm9scyA9CitTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIGFsYzU2MjNfc3BrX25fc291cl9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGFsYzU2MjNfZGFwbV93aWRnZXRzW10gPSB7CisvKiBNdXhlcyAqLworU05EX1NPQ19EQVBNX01VWCgiQXV4T3V0IE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkmYWxjNTYyM19hdXhvdXRfbXV4X2NvbnRyb2xzKSwKK1NORF9TT0NfREFQTV9NVVgoIlNwZWFrZXJPdXQgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCSZhbGM1NjIzX3Nwa291dF9tdXhfY29udHJvbHMpLAorU05EX1NPQ19EQVBNX01VWCgiTGVmdCBIZWFkcGhvbmUgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCSZhbGM1NjIzX2hwbF9vdXRfbXV4X2NvbnRyb2xzKSwKK1NORF9TT0NfREFQTV9NVVgoIlJpZ2h0IEhlYWRwaG9uZSBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJJmFsYzU2MjNfaHByX291dF9tdXhfY29udHJvbHMpLAorU05EX1NPQ19EQVBNX01VWCgiU3BlYWtlck91dCBOIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkmYWxjNTYyM19zcGtvdXRuX211eF9jb250cm9scyksCisKKy8qIG91dHB1dCBtaXhlcnMgKi8KK1NORF9TT0NfREFQTV9NSVhFUigiSFAgTWl4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCSZhbGM1NjIzX2hwX21peGVyX2NvbnRyb2xzWzBdLAorCUFSUkFZX1NJWkUoYWxjNTYyM19ocF9taXhlcl9jb250cm9scykpLAorU05EX1NPQ19EQVBNX01JWEVSKCJIUFIgTWl4IiwgQUxDNTYyM19QV1JfTUFOQUdfQUREMiwgNCwgMCwKKwkmYWxjNTYyM19ocHJfbWl4ZXJfY29udHJvbHNbMF0sCisJQVJSQVlfU0laRShhbGM1NjIzX2hwcl9taXhlcl9jb250cm9scykpLAorU05EX1NPQ19EQVBNX01JWEVSKCJIUEwgTWl4IiwgQUxDNTYyM19QV1JfTUFOQUdfQUREMiwgNSwgMCwKKwkmYWxjNTYyM19ocGxfbWl4ZXJfY29udHJvbHNbMF0sCisJQVJSQVlfU0laRShhbGM1NjIzX2hwbF9taXhlcl9jb250cm9scykpLAorU05EX1NPQ19EQVBNX01JWEVSKCJIUE91dCBNaXgiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX01JWEVSKCJNb25vIE1peCIsIEFMQzU2MjNfUFdSX01BTkFHX0FERDIsIDIsIDAsCisJJmFsYzU2MjNfbW9ub19taXhlcl9jb250cm9sc1swXSwKKwlBUlJBWV9TSVpFKGFsYzU2MjNfbW9ub19taXhlcl9jb250cm9scykpLAorU05EX1NPQ19EQVBNX01JWEVSKCJTcGVha2VyIE1peCIsIEFMQzU2MjNfUFdSX01BTkFHX0FERDIsIDMsIDAsCisJJmFsYzU2MjNfc3BlYWtlcl9taXhlcl9jb250cm9sc1swXSwKKwlBUlJBWV9TSVpFKGFsYzU2MjNfc3BlYWtlcl9taXhlcl9jb250cm9scykpLAorCisvKiBpbnB1dCBtaXhlcnMgKi8KK1NORF9TT0NfREFQTV9NSVhFUigiTGVmdCBDYXB0dXJlIE1peCIsIEFMQzU2MjNfUFdSX01BTkFHX0FERDIsIDEsIDAsCisJJmFsYzU2MjNfY2FwdHVyZUxfbWl4ZXJfY29udHJvbHNbMF0sCisJQVJSQVlfU0laRShhbGM1NjIzX2NhcHR1cmVMX21peGVyX2NvbnRyb2xzKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIlJpZ2h0IENhcHR1cmUgTWl4IiwgQUxDNTYyM19QV1JfTUFOQUdfQUREMiwgMCwgMCwKKwkmYWxjNTYyM19jYXB0dXJlUl9taXhlcl9jb250cm9sc1swXSwKKwlBUlJBWV9TSVpFKGFsYzU2MjNfY2FwdHVyZVJfbWl4ZXJfY29udHJvbHMpKSwKKworU05EX1NPQ19EQVBNX0RBQygiTGVmdCBEQUMiLCAiTGVmdCBIaUZpIFBsYXliYWNrIiwKKwlBTEM1NjIzX1BXUl9NQU5BR19BREQyLCA5LCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIlJpZ2h0IERBQyIsICJSaWdodCBIaUZpIFBsYXliYWNrIiwKKwlBTEM1NjIzX1BXUl9NQU5BR19BREQyLCA4LCAwKSwKK1NORF9TT0NfREFQTV9NSVhFUigiSTJTIE1peCIsIEFMQzU2MjNfUFdSX01BTkFHX0FERDEsIDE1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9NSVhFUigiQXV4SSBNaXgiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX01JWEVSKCJMaW5lIE1peCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fQURDKCJMZWZ0IEFEQyIsICJMZWZ0IEhpRmkgQ2FwdHVyZSIsCisJQUxDNTYyM19QV1JfTUFOQUdfQUREMiwgNywgMCksCitTTkRfU09DX0RBUE1fQURDKCJSaWdodCBBREMiLCAiUmlnaHQgSGlGaSBDYXB0dXJlIiwKKwlBTEM1NjIzX1BXUl9NQU5BR19BREQyLCA2LCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkxlZnQgSGVhZHBob25lIiwgQUxDNTYyM19QV1JfTUFOQUdfQUREMywgMTAsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgSGVhZHBob25lIiwgQUxDNTYyM19QV1JfTUFOQUdfQUREMywgOSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJTcGVha2VyT3V0IiwgQUxDNTYyM19QV1JfTUFOQUdfQUREMywgMTIsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiTGVmdCBBdXhPdXQiLCBBTEM1NjIzX1BXUl9NQU5BR19BREQzLCAxNCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBBdXhPdXQiLCBBTEM1NjIzX1BXUl9NQU5BR19BREQzLCAxMywgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IExpbmVJbiIsIEFMQzU2MjNfUFdSX01BTkFHX0FERDMsIDcsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgTGluZUluIiwgQUxDNTYyM19QV1JfTUFOQUdfQUREMywgNiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IEF1eEkiLCBBTEM1NjIzX1BXUl9NQU5BR19BREQzLCA1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIlJpZ2h0IEF1eEkiLCBBTEM1NjIzX1BXUl9NQU5BR19BREQzLCA0LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIk1JQzEgUEdBIiwgQUxDNTYyM19QV1JfTUFOQUdfQUREMywgMywgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJNSUMyIFBHQSIsIEFMQzU2MjNfUFdSX01BTkFHX0FERDMsIDIsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiTUlDMSBQcmUgQW1wIiwgQUxDNTYyM19QV1JfTUFOQUdfQUREMywgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJNSUMyIFByZSBBbXAiLCBBTEM1NjIzX1BXUl9NQU5BR19BREQzLCAwLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9NSUNCSUFTKCJNaWMgQmlhczEiLCBBTEM1NjIzX1BXUl9NQU5BR19BREQxLCAxMSwgMCksCisKK1NORF9TT0NfREFQTV9PVVRQVVQoIkFVWE9VVEwiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkFVWE9VVFIiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkhQTCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiSFBSIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJTUEtPVVQiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlNQS09VVE4iKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTElORUlOTCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJMSU5FSU5SIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkFVWElOTCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJBVVhJTlIiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTUlDMSIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJNSUMyIiksCitTTkRfU09DX0RBUE1fVk1JRCgiVm1pZCIpLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFsYzU2MjNfYW1wX25hbWVzW10gPSB7IkFCIEFtcCIsICJEIEFtcCJ9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhbGM1NjIzX2FtcF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoQUxDNTYyM19PVVRQVVRfTUlYRVJfQ1RSTCwgMTMsIDIsIGFsYzU2MjNfYW1wX25hbWVzKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM1NjIzX2FtcF9tdXhfY29udHJvbHMgPQorCVNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgYWxjNTYyM19hbXBfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBhbGM1NjIzX2RhcG1fYW1wX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9QR0FfRSgiRCBBbXAiLCBBTEM1NjIzX1BXUl9NQU5BR19BREQyLCAxNCwgMCwgTlVMTCwgMCwKKwlhbXBfbWl4ZXJfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK1NORF9TT0NfREFQTV9QR0EoIkFCIEFtcCIsIEFMQzU2MjNfUFdSX01BTkFHX0FERDIsIDE1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9NVVgoIkFCLUQgQW1wIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkmYWxjNTYyM19hbXBfbXV4X2NvbnRyb2xzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uW10gPSB7CisJLyogdmlydHVhbCBtaXhlciAtIG1peGVzIGxlZnQgJiByaWdodCBjaGFubmVscyAqLworCXsiSTJTIE1peCIsIE5VTEwsCQkJCSJMZWZ0IERBQyJ9LAorCXsiSTJTIE1peCIsIE5VTEwsCQkJCSJSaWdodCBEQUMifSwKKwl7IkxpbmUgTWl4IiwgTlVMTCwJCQkJIlJpZ2h0IExpbmVJbiJ9LAorCXsiTGluZSBNaXgiLCBOVUxMLAkJCQkiTGVmdCBMaW5lSW4ifSwKKwl7IkF1eEkgTWl4IiwgTlVMTCwJCQkJIkxlZnQgQXV4SSJ9LAorCXsiQXV4SSBNaXgiLCBOVUxMLAkJCQkiUmlnaHQgQXV4SSJ9LAorCXsiQVVYT1VUTCIsIE5VTEwsCQkJCSJMZWZ0IEF1eE91dCJ9LAorCXsiQVVYT1VUUiIsIE5VTEwsCQkJCSJSaWdodCBBdXhPdXQifSwKKworCS8qIEhQIG1peGVyICovCisJeyJIUEwgTWl4IiwgIkFEQzJIUF9MIFBsYXliYWNrIFN3aXRjaCIsCQkiTGVmdCBDYXB0dXJlIE1peCJ9LAorCXsiSFBMIE1peCIsIE5VTEwsCQkJCSJIUCBNaXgifSwKKwl7IkhQUiBNaXgiLCAiQURDMkhQX1IgUGxheWJhY2sgU3dpdGNoIiwJCSJSaWdodCBDYXB0dXJlIE1peCJ9LAorCXsiSFBSIE1peCIsIE5VTEwsCQkJCSJIUCBNaXgifSwKKwl7IkhQIE1peCIsICJMSTJIUCBQbGF5YmFjayBTd2l0Y2giLAkJIkxpbmUgTWl4In0sCisJeyJIUCBNaXgiLCAiQVVYSTJIUCBQbGF5YmFjayBTd2l0Y2giLAkJIkF1eEkgTWl4In0sCisJeyJIUCBNaXgiLCAiTUlDMTJIUCBQbGF5YmFjayBTd2l0Y2giLAkJIk1JQzEgUEdBIn0sCisJeyJIUCBNaXgiLCAiTUlDMjJIUCBQbGF5YmFjayBTd2l0Y2giLAkJIk1JQzIgUEdBIn0sCisJeyJIUCBNaXgiLCAiREFDMkhQIFBsYXliYWNrIFN3aXRjaCIsCQkiSTJTIE1peCJ9LAorCisJLyogc3BlYWtlciBtaXhlciAqLworCXsiU3BlYWtlciBNaXgiLCAiTEkyU1BLIFBsYXliYWNrIFN3aXRjaCIsCSJMaW5lIE1peCJ9LAorCXsiU3BlYWtlciBNaXgiLCAiQVVYSTJTUEsgUGxheWJhY2sgU3dpdGNoIiwJIkF1eEkgTWl4In0sCisJeyJTcGVha2VyIE1peCIsICJNSUMxMlNQSyBQbGF5YmFjayBTd2l0Y2giLAkiTUlDMSBQR0EifSwKKwl7IlNwZWFrZXIgTWl4IiwgIk1JQzIyU1BLIFBsYXliYWNrIFN3aXRjaCIsCSJNSUMyIFBHQSJ9LAorCXsiU3BlYWtlciBNaXgiLCAiREFDMlNQSyBQbGF5YmFjayBTd2l0Y2giLAkiSTJTIE1peCJ9LAorCisJLyogbW9ubyBtaXhlciAqLworCXsiTW9ubyBNaXgiLCAiQURDMk1PTk9fTCBQbGF5YmFjayBTd2l0Y2giLAkiTGVmdCBDYXB0dXJlIE1peCJ9LAorCXsiTW9ubyBNaXgiLCAiQURDMk1PTk9fUiBQbGF5YmFjayBTd2l0Y2giLAkiUmlnaHQgQ2FwdHVyZSBNaXgifSwKKwl7Ik1vbm8gTWl4IiwgIkxJMk1PTk8gUGxheWJhY2sgU3dpdGNoIiwJCSJMaW5lIE1peCJ9LAorCXsiTW9ubyBNaXgiLCAiQVVYSTJNT05PIFBsYXliYWNrIFN3aXRjaCIsCSJBdXhJIE1peCJ9LAorCXsiTW9ubyBNaXgiLCAiTUlDMTJNT05PIFBsYXliYWNrIFN3aXRjaCIsCSJNSUMxIFBHQSJ9LAorCXsiTW9ubyBNaXgiLCAiTUlDMjJNT05PIFBsYXliYWNrIFN3aXRjaCIsCSJNSUMyIFBHQSJ9LAorCXsiTW9ubyBNaXgiLCAiREFDMk1PTk8gUGxheWJhY2sgU3dpdGNoIiwJIkkyUyBNaXgifSwKKworCS8qIExlZnQgcmVjb3JkIG1peGVyICovCisJeyJMZWZ0IENhcHR1cmUgTWl4IiwgIkxpbmVJbkwgQ2FwdHVyZSBTd2l0Y2giLAkiTElORUlOTCJ9LAorCXsiTGVmdCBDYXB0dXJlIE1peCIsICJMZWZ0IEF1eEkgQ2FwdHVyZSBTd2l0Y2giLCAiQVVYSU5MIn0sCisJeyJMZWZ0IENhcHR1cmUgTWl4IiwgIk1pYzEgQ2FwdHVyZSBTd2l0Y2giLAkiTUlDMSBQcmUgQW1wIn0sCisJeyJMZWZ0IENhcHR1cmUgTWl4IiwgIk1pYzIgQ2FwdHVyZSBTd2l0Y2giLAkiTUlDMiBQcmUgQW1wIn0sCisJeyJMZWZ0IENhcHR1cmUgTWl4IiwgIkhQTWl4ZXJMIENhcHR1cmUgU3dpdGNoIiwgIkhQTCBNaXgifSwKKwl7IkxlZnQgQ2FwdHVyZSBNaXgiLCAiU1BLTWl4ZXIgQ2FwdHVyZSBTd2l0Y2giLCAiU3BlYWtlciBNaXgifSwKKwl7IkxlZnQgQ2FwdHVyZSBNaXgiLCAiTW9ub01peGVyIENhcHR1cmUgU3dpdGNoIiwgIk1vbm8gTWl4In0sCisKKwkvKlJpZ2h0IHJlY29yZCBtaXhlciAqLworCXsiUmlnaHQgQ2FwdHVyZSBNaXgiLCAiTGluZUluUiBDYXB0dXJlIFN3aXRjaCIsCSJMSU5FSU5SIn0sCisJeyJSaWdodCBDYXB0dXJlIE1peCIsICJSaWdodCBBdXhJIENhcHR1cmUgU3dpdGNoIiwJIkFVWElOUiJ9LAorCXsiUmlnaHQgQ2FwdHVyZSBNaXgiLCAiTWljMSBDYXB0dXJlIFN3aXRjaCIsCSJNSUMxIFByZSBBbXAifSwKKwl7IlJpZ2h0IENhcHR1cmUgTWl4IiwgIk1pYzIgQ2FwdHVyZSBTd2l0Y2giLAkiTUlDMiBQcmUgQW1wIn0sCisJeyJSaWdodCBDYXB0dXJlIE1peCIsICJIUE1peGVyUiBDYXB0dXJlIFN3aXRjaCIsICJIUFIgTWl4In0sCisJeyJSaWdodCBDYXB0dXJlIE1peCIsICJTUEtNaXhlciBDYXB0dXJlIFN3aXRjaCIsICJTcGVha2VyIE1peCJ9LAorCXsiUmlnaHQgQ2FwdHVyZSBNaXgiLCAiTW9ub01peGVyIENhcHR1cmUgU3dpdGNoIiwgIk1vbm8gTWl4In0sCisKKwkvKiBoZWFkcGhvbmUgbGVmdCBtdXggKi8KKwl7IkxlZnQgSGVhZHBob25lIE11eCIsICJIUCBMZWZ0IE1peCIsCQkiSFBMIE1peCJ9LAorCXsiTGVmdCBIZWFkcGhvbmUgTXV4IiwgIlZtaWQiLAkJCSJWbWlkIn0sCisKKwkvKiBoZWFkcGhvbmUgcmlnaHQgbXV4ICovCisJeyJSaWdodCBIZWFkcGhvbmUgTXV4IiwgIkhQIFJpZ2h0IE1peCIsCQkiSFBSIE1peCJ9LAorCXsiUmlnaHQgSGVhZHBob25lIE11eCIsICJWbWlkIiwJCQkiVm1pZCJ9LAorCisJLyogc3BlYWtlciBvdXQgbXV4ICovCisJeyJTcGVha2VyT3V0IE11eCIsICJWbWlkIiwJCQkiVm1pZCJ9LAorCXsiU3BlYWtlck91dCBNdXgiLCAiSFBPdXQgTWl4IiwJCQkiSFBPdXQgTWl4In0sCisJeyJTcGVha2VyT3V0IE11eCIsICJTcGVha2VyIE1peCIsCQkiU3BlYWtlciBNaXgifSwKKwl7IlNwZWFrZXJPdXQgTXV4IiwgIk1vbm8gTWl4IiwJCQkiTW9ubyBNaXgifSwKKworCS8qIE1vbm8vQXV4IE91dCBtdXggKi8KKwl7IkF1eE91dCBNdXgiLCAiVm1pZCIsCQkJCSJWbWlkIn0sCisJeyJBdXhPdXQgTXV4IiwgIkhQT3V0IE1peCIsCQkJIkhQT3V0IE1peCJ9LAorCXsiQXV4T3V0IE11eCIsICJTcGVha2VyIE1peCIsCQkJIlNwZWFrZXIgTWl4In0sCisJeyJBdXhPdXQgTXV4IiwgIk1vbm8gTWl4IiwJCQkiTW9ubyBNaXgifSwKKworCS8qIG91dHB1dCBwZ2EgKi8KKwl7IkhQTCIsIE5VTEwsCQkJCQkiTGVmdCBIZWFkcGhvbmUifSwKKwl7IkxlZnQgSGVhZHBob25lIiwgTlVMTCwJCQkiTGVmdCBIZWFkcGhvbmUgTXV4In0sCisJeyJIUFIiLCBOVUxMLAkJCQkJIlJpZ2h0IEhlYWRwaG9uZSJ9LAorCXsiUmlnaHQgSGVhZHBob25lIiwgTlVMTCwJCQkiUmlnaHQgSGVhZHBob25lIE11eCJ9LAorCXsiTGVmdCBBdXhPdXQiLCBOVUxMLAkJCQkiQXV4T3V0IE11eCJ9LAorCXsiUmlnaHQgQXV4T3V0IiwgTlVMTCwJCQkJIkF1eE91dCBNdXgifSwKKworCS8qIGlucHV0IHBnYSAqLworCXsiTGVmdCBMaW5lSW4iLCBOVUxMLAkJCQkiTElORUlOTCJ9LAorCXsiUmlnaHQgTGluZUluIiwgTlVMTCwJCQkJIkxJTkVJTlIifSwKKwl7IkxlZnQgQXV4SSIsIE5VTEwsCQkJCSJBVVhJTkwifSwKKwl7IlJpZ2h0IEF1eEkiLCBOVUxMLAkJCQkiQVVYSU5SIn0sCisJeyJNSUMxIFByZSBBbXAiLCBOVUxMLAkJCQkiTUlDMSJ9LAorCXsiTUlDMiBQcmUgQW1wIiwgTlVMTCwJCQkJIk1JQzIifSwKKwl7Ik1JQzEgUEdBIiwgTlVMTCwJCQkJIk1JQzEgUHJlIEFtcCJ9LAorCXsiTUlDMiBQR0EiLCBOVUxMLAkJCQkiTUlDMiBQcmUgQW1wIn0sCisKKwkvKiBsZWZ0IEFEQyAqLworCXsiTGVmdCBBREMiLCBOVUxMLAkJCQkiTGVmdCBDYXB0dXJlIE1peCJ9LAorCisJLyogcmlnaHQgQURDICovCisJeyJSaWdodCBBREMiLCBOVUxMLAkJCQkiUmlnaHQgQ2FwdHVyZSBNaXgifSwKKworCXsiU3BlYWtlck91dCBOIE11eCIsICJSTi8tUiIsCQkJIlNwZWFrZXJPdXQifSwKKwl7IlNwZWFrZXJPdXQgTiBNdXgiLCAiUlAvK1IiLAkJCSJTcGVha2VyT3V0In0sCisJeyJTcGVha2VyT3V0IE4gTXV4IiwgIkxOLy1SIiwJCQkiU3BlYWtlck91dCJ9LAorCXsiU3BlYWtlck91dCBOIE11eCIsICJWbWlkIiwJCQkiVm1pZCJ9LAorCisJeyJTUEtPVVQiLCBOVUxMLAkJCQkiU3BlYWtlck91dCJ9LAorCXsiU1BLT1VUTiIsIE5VTEwsCQkJCSJTcGVha2VyT3V0IE4gTXV4In0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBpbnRlcmNvbl9zcGtbXSA9IHsKKwl7IlNwZWFrZXJPdXQiLCBOVUxMLAkJCQkiU3BlYWtlck91dCBNdXgifSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uX2FtcF9zcGtbXSA9IHsKKwl7IkFCIEFtcCIsIE5VTEwsCQkJCSJTcGVha2VyT3V0IE11eCJ9LAorCXsiRCBBbXAiLCBOVUxMLAkJCQkJIlNwZWFrZXJPdXQgTXV4In0sCisJeyJBQi1EIEFtcCBNdXgiLCAiQUIgQW1wIiwJCQkiQUIgQW1wIn0sCisJeyJBQi1EIEFtcCBNdXgiLCAiRCBBbXAiLAkJCSJEIEFtcCJ9LAorCXsiU3BlYWtlck91dCIsIE5VTEwsCQkJCSJBQi1EIEFtcCBNdXgifSwKK307CisKKy8qIFBMTCBkaXZpc29ycyAqLworc3RydWN0IF9wbGxfZGl2IHsKKwl1MzIgcGxsX2luOworCXUzMiBwbGxfb3V0OworCXUxNiByZWd2YWx1ZTsKK307CisKKy8qIE5vdGUgOiBwbGwgY29kZSBmcm9tIG9yaWdpbmFsIGFsYzU2MjMgZHJpdmVyLiBOb3Qgc3VyZSBvZiBob3cgZ29vZCBpdCBpcyAqLworLyogdXNlZnVsbCBvbmx5IGZvciBtYXN0ZXIgbW9kZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBfcGxsX2RpdiBjb2RlY19tYXN0ZXJfcGxsX2RpdltdID0geworCisJeyAgMjA0ODAwMCwgIDgxOTIwMDAsCTB4MGVhMH0sCisJeyAgMzY4NjQwMCwgIDgxOTIwMDAsCTB4NGUyN30sCisJeyAxMjAwMDAwMCwgIDgxOTIwMDAsCTB4NDU2Yn0sCisJeyAxMzAwMDAwMCwgIDgxOTIwMDAsCTB4NDk1Zn0sCisJeyAxMzEwMDAwMCwgIDgxOTIwMDAsCTB4MDMyMH0sCisJeyAgMjA0ODAwMCwgIDExMjg5NjAwLAkweGY2Mzd9LAorCXsgIDM2ODY0MDAsICAxMTI4OTYwMCwJMHgyZjIyfSwKKwl7IDEyMDAwMDAwLCAgMTEyODk2MDAsCTB4M2UyZn0sCisJeyAxMzAwMDAwMCwgIDExMjg5NjAwLAkweDRkNWJ9LAorCXsgMTMxMDAwMDAsICAxMTI4OTYwMCwJMHgzNjNifSwKKwl7ICAyMDQ4MDAwLCAgMTYzODQwMDAsCTB4MWVhMH0sCisJeyAgMzY4NjQwMCwgIDE2Mzg0MDAwLAkweDllMjd9LAorCXsgMTIwMDAwMDAsICAxNjM4NDAwMCwJMHg0NTJifSwKKwl7IDEzMDAwMDAwLCAgMTYzODQwMDAsCTB4NTQyZn0sCisJeyAxMzEwMDAwMCwgIDE2Mzg0MDAwLAkweDAzYTB9LAorCXsgIDIwNDgwMDAsICAxNjkzNDQwMCwJMHhlNjI1fSwKKwl7ICAzNjg2NDAwLCAgMTY5MzQ0MDAsCTB4OTEyNn0sCisJeyAxMjAwMDAwMCwgIDE2OTM0NDAwLAkweDRkMmN9LAorCXsgMTMwMDAwMDAsICAxNjkzNDQwMCwJMHg3NDJmfSwKKwl7IDEzMTAwMDAwLCAgMTY5MzQ0MDAsCTB4M2MyN30sCisJeyAgMjA0ODAwMCwgIDIyNTc5MjAwLAkweDJhYTB9LAorCXsgIDM2ODY0MDAsICAyMjU3OTIwMCwJMHgyZjIwfSwKKwl7IDEyMDAwMDAwLCAgMjI1NzkyMDAsCTB4N2UyZn0sCisJeyAxMzAwMDAwMCwgIDIyNTc5MjAwLAkweDc0MmZ9LAorCXsgMTMxMDAwMDAsICAyMjU3OTIwMCwJMHgzYzI3fSwKKwl7ICAyMDQ4MDAwLCAgMjQ1NzYwMDAsCTB4MmVhMH0sCisJeyAgMzY4NjQwMCwgIDI0NTc2MDAwLAkweGVlMjd9LAorCXsgMTIwMDAwMDAsICAyNDU3NjAwMCwJMHgyOTE1fSwKKwl7IDEzMDAwMDAwLCAgMjQ1NzYwMDAsCTB4NzcyZX0sCisJeyAxMzEwMDAwMCwgIDI0NTc2MDAwLAkweDBkMjB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBfcGxsX2RpdiBjb2RlY19zbGF2ZV9wbGxfZGl2W10gPSB7CisKKwl7ICAxMDI0MDAwLCAgMTYzODQwMDAsICAweDNlYTB9LAorCXsgIDE0MTEyMDAsICAyMjU3OTIwMCwJMHgzZWEwfSwKKwl7ICAxNTM2MDAwLCAgMjQ1NzYwMDAsCTB4M2VhMH0sCisJeyAgMjA0ODAwMCwgIDE2Mzg0MDAwLCAgMHgxZWEwfSwKKwl7ICAyODIyNDAwLCAgMjI1NzkyMDAsCTB4MWVhMH0sCisJeyAgMzA3MjAwMCwgIDI0NTc2MDAwLAkweDFlYTB9LAorCit9OworCitzdGF0aWMgaW50IGFsYzU2MjNfc2V0X2RhaV9wbGwoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIGludCBwbGxfaWQsCisJCWludCBzb3VyY2UsIHVuc2lnbmVkIGludCBmcmVxX2luLCB1bnNpZ25lZCBpbnQgZnJlcV9vdXQpCit7CisJaW50IGk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlpbnQgZ2JsX2NsayA9IDAsIHBsbF9kaXYgPSAwOworCXUxNiByZWc7CisKKwlpZiAocGxsX2lkIDwgQUxDNTYyM19QTExfRlJfTUNMSyB8fCBwbGxfaWQgPiBBTEM1NjIzX1BMTF9GUl9CQ0spCisJCXJldHVybiAtRU5PREVWOworCisJLyogRGlzYWJsZSBQTEwgcG93ZXIgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBTEM1NjIzX1BXUl9NQU5BR19BREQyLAorCQkJCUFMQzU2MjNfUFdSX0FERDJfUExMLAorCQkJCTApOworCisJLyogcGxsIGlzIG5vdCB1c2VkIGluIHNsYXZlIG1vZGUgKi8KKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFMQzU2MjNfREFJX0NPTlRST0wpOworCWlmIChyZWcgJiBBTEM1NjIzX0RBSV9TRFBfU0xBVkVfTU9ERSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWZyZXFfaW4gfHwgIWZyZXFfb3V0KQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAocGxsX2lkKSB7CisJY2FzZSBBTEM1NjIzX1BMTF9GUl9NQ0xLOgorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb2RlY19tYXN0ZXJfcGxsX2Rpdik7IGkrKykgeworCQkJaWYgKGNvZGVjX21hc3Rlcl9wbGxfZGl2W2ldLnBsbF9pbiA9PSBmcmVxX2luCisJCQkgICAmJiBjb2RlY19tYXN0ZXJfcGxsX2RpdltpXS5wbGxfb3V0ID09IGZyZXFfb3V0KSB7CisJCQkJLyogUExMIHNvdXJjZSBmcm9tIE1DTEsgKi8KKwkJCQlwbGxfZGl2ICA9IGNvZGVjX21hc3Rlcl9wbGxfZGl2W2ldLnJlZ3ZhbHVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgQUxDNTYyM19QTExfRlJfQkNLOgorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb2RlY19zbGF2ZV9wbGxfZGl2KTsgaSsrKSB7CisJCQlpZiAoY29kZWNfc2xhdmVfcGxsX2RpdltpXS5wbGxfaW4gPT0gZnJlcV9pbgorCQkJICAgJiYgY29kZWNfc2xhdmVfcGxsX2RpdltpXS5wbGxfb3V0ID09IGZyZXFfb3V0KSB7CisJCQkJLyogUExMIHNvdXJjZSBmcm9tIEJpdGNsayAqLworCQkJCWdibF9jbGsgPSBBTEM1NjIzX0dCTF9DTEtfUExMX1NPVVJfU0VMX0JJVENMSzsKKwkJCQlwbGxfZGl2ID0gY29kZWNfc2xhdmVfcGxsX2RpdltpXS5yZWd2YWx1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIXBsbF9kaXYpCisJCXJldHVybiAtRUlOVkFMOworCisJc25kX3NvY193cml0ZShjb2RlYywgQUxDNTYyM19HTE9CQUxfQ0xLX0NUUkxfUkVHLCBnYmxfY2xrKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBTEM1NjIzX1BMTF9DVFJMLCBwbGxfZGl2KTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBTEM1NjIzX1BXUl9NQU5BR19BREQyLAorCQkJCUFMQzU2MjNfUFdSX0FERDJfUExMLAorCQkJCUFMQzU2MjNfUFdSX0FERDJfUExMKTsKKwlnYmxfY2xrIHw9IEFMQzU2MjNfR0JMX0NMS19TWVNfU09VUl9TRUxfUExMOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFMQzU2MjNfR0xPQkFMX0NMS19DVFJMX1JFRywgZ2JsX2Nsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IF9jb2VmZl9kaXYgeworCXUxNiBmczsKKwl1MTYgcmVndmFsdWU7Cit9OworCisvKiBjb2RlYyBoaWZpIG1jbGsgKGFmdGVyIFBMTCkgY2xvY2sgZGl2aWRlciBjb2VmZmljaWVudHMgKi8KKy8qIHZhbHVlcyBpbnNwaXJlZCBmcm9tIGNvbHVtbiBCQ0xLPTMyRnMgb2YgQXBwZW5kaXggQSB0YWJsZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBfY29lZmZfZGl2IGNvZWZmX2RpdltdID0geworCXsyNTYqOCwgMHgzYTY5fSwKKwl7Mzg0KjgsIDB4M2M2Yn0sCisJezI1Nio0LCAweDJhNjl9LAorCXszODQqNCwgMHgyYzZifSwKKwl7MjU2KjIsIDB4MWE2OX0sCisJezM4NCoyLCAweDFjNmJ9LAorCXsyNTYqMSwgMHgwYTY5fSwKKwl7Mzg0KjEsIDB4MGM2Yn0sCit9OworCitzdGF0aWMgaW50IGdldF9jb2VmZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCByYXRlKQoreworCXN0cnVjdCBhbGM1NjIzX3ByaXYgKmFsYzU2MjMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvZWZmX2Rpdik7IGkrKykgeworCQlpZiAoY29lZmZfZGl2W2ldLmZzICogcmF0ZSA9PSBhbGM1NjIzLT5zeXNjbGspCisJCQlyZXR1cm4gaTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBDbG9jayBhZnRlciBQTEwgYW5kIGRpdmlkZXJzCisgKi8KK3N0YXRpYyBpbnQgYWxjNTYyM19zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgYWxjNTYyM19wcml2ICphbGM1NjIzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlzd2l0Y2ggKGZyZXEpIHsKKwljYXNlICA4MTkyMDAwOgorCWNhc2UgMTEyODk2MDA6CisJY2FzZSAxMjI4ODAwMDoKKwljYXNlIDE2Mzg0MDAwOgorCWNhc2UgMTY5MzQ0MDA6CisJY2FzZSAxODQzMjAwMDoKKwljYXNlIDIyNTc5MjAwOgorCWNhc2UgMjQ1NzYwMDA6CisJCWFsYzU2MjMtPnN5c2NsayA9IGZyZXE7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBhbGM1NjIzX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQl1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTE2IGlmYWNlID0gMDsKKworCS8qIHNldCBtYXN0ZXIvc2xhdmUgYXVkaW8gaW50ZXJmYWNlICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJaWZhY2UgPSBBTEM1NjIzX0RBSV9TRFBfTUFTVEVSX01PREU7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJaWZhY2UgPSBBTEM1NjIzX0RBSV9TRFBfU0xBVkVfTU9ERTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogaW50ZXJmYWNlIGZvcm1hdCAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJaWZhY2UgfD0gQUxDNTYyM19EQUlfSTJTX0RGX0kyUzsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlpZmFjZSB8PSBBTEM1NjIzX0RBSV9JMlNfREZfUklHSFQ7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlpZmFjZSB8PSBBTEM1NjIzX0RBSV9JMlNfREZfTEVGVDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJaWZhY2UgfD0gQUxDNTYyM19EQUlfSTJTX0RGX1BDTTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJaWZhY2UgfD0gQUxDNTYyM19EQUlfSTJTX0RGX1BDTSB8IEFMQzU2MjNfREFJX0kyU19QQ01fTU9ERTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2xvY2sgaW52ZXJzaW9uICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCWlmYWNlIHw9IEFMQzU2MjNfREFJX01BSU5fSTJTX0JDTEtfUE9MX0NUUkw7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCWlmYWNlIHw9IEFMQzU2MjNfREFJX01BSU5fSTJTX0JDTEtfUE9MX0NUUkw7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBBTEM1NjIzX0RBSV9DT05UUk9MLCBpZmFjZSk7Cit9CisKK3N0YXRpYyBpbnQgYWxjNTYyM19wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IGFsYzU2MjNfcHJpdiAqYWxjNTYyMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCBjb2VmZiwgcmF0ZTsKKwl1MTYgaWZhY2U7CisKKwlpZmFjZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUxDNTYyM19EQUlfQ09OVFJPTCk7CisJaWZhY2UgJj0gfkFMQzU2MjNfREFJX0kyU19ETF9NQVNLOworCisJLyogYml0IHNpemUgKi8KKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWlmYWNlIHw9IEFMQzU2MjNfREFJX0kyU19ETF8xNjsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCWlmYWNlIHw9IEFMQzU2MjNfREFJX0kyU19ETF8yMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJaWZhY2UgfD0gQUxDNTYyM19EQUlfSTJTX0RMXzI0OworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQlpZmFjZSB8PSBBTEM1NjIzX0RBSV9JMlNfRExfMzI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHNldCBpZmFjZSAmIHNyYXRlICovCisJc25kX3NvY193cml0ZShjb2RlYywgQUxDNTYyM19EQUlfQ09OVFJPTCwgaWZhY2UpOworCXJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCWNvZWZmID0gZ2V0X2NvZWZmKGNvZGVjLCByYXRlKTsKKwlpZiAoY29lZmYgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvZWZmID0gY29lZmZfZGl2W2NvZWZmXS5yZWd2YWx1ZTsKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlczogc3lzY2xrPSVkLHJhdGU9JWQsY29lZmY9MHglMDR4XG4iLAorCQlfX2Z1bmNfXywgYWxjNTYyMy0+c3lzY2xrLCByYXRlLCBjb2VmZik7CisJc25kX3NvY193cml0ZShjb2RlYywgQUxDNTYyM19TVEVSRU9fQURfREFfQ0xLX0NUUkwsIGNvZWZmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsYzU2MjNfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwl1MTYgaHBfbXV0ZSA9IEFMQzU2MjNfTUlTQ19NX0RBQ19MX0lOUFVUIHwgQUxDNTYyM19NSVNDX01fREFDX1JfSU5QVVQ7CisJdTE2IG11dGVfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBTEM1NjIzX01JU0NfQ1RSTCkgJiB+aHBfbXV0ZTsKKworCWlmIChtdXRlKQorCQltdXRlX3JlZyB8PSBocF9tdXRlOworCisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIEFMQzU2MjNfTUlTQ19DVFJMLCBtdXRlX3JlZyk7Cit9CisKKyNkZWZpbmUgQUxDNTYyM19BREQyX1BPV0VSX0VOIChBTEM1NjIzX1BXUl9BREQyX1ZSRUYgXAorCXwgQUxDNTYyM19QV1JfQUREMl9EQUNfUkVGX0NJUikKKworI2RlZmluZSBBTEM1NjIzX0FERDNfUE9XRVJfRU4gKEFMQzU2MjNfUFdSX0FERDNfTUFJTl9CSUFTIFwKKwl8IEFMQzU2MjNfUFdSX0FERDNfTUlDMV9CT09TVF9BRCkKKworI2RlZmluZSBBTEM1NjIzX0FERDFfUE9XRVJfRU4gXAorCShBTEM1NjIzX1BXUl9BREQxX1NIT1JUX0NVUlJfREVUX0VOIHwgQUxDNTYyM19QV1JfQUREMV9TT0ZUR0VOX0VOIFwKKwl8IEFMQzU2MjNfUFdSX0FERDFfREVQT1BfQlVGX0hQIHwgQUxDNTYyM19QV1JfQUREMV9IUF9PVVRfQU1QIFwKKwl8IEFMQzU2MjNfUFdSX0FERDFfSFBfT1VUX0VOSF9BTVApCisKKyNkZWZpbmUgQUxDNTYyM19BREQxX1BPV0VSX0VOXzU2MjIgXAorCShBTEM1NjIzX1BXUl9BREQxX1NIT1JUX0NVUlJfREVUX0VOIFwKKwl8IEFMQzU2MjNfUFdSX0FERDFfSFBfT1VUX0FNUCkKKworc3RhdGljIHZvaWQgZW5hYmxlX3Bvd2VyX2RlcG9wKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjNTYyM19wcml2ICphbGM1NjIzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBTEM1NjIzX1BXUl9NQU5BR19BREQxLAorCQkJCUFMQzU2MjNfUFdSX0FERDFfU09GVEdFTl9FTiwKKwkJCQlBTEM1NjIzX1BXUl9BREQxX1NPRlRHRU5fRU4pOworCisJc25kX3NvY193cml0ZShjb2RlYywgQUxDNTYyM19QV1JfTUFOQUdfQUREMywgQUxDNTYyM19BREQzX1BPV0VSX0VOKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFMQzU2MjNfTUlTQ19DVFJMLAorCQkJCUFMQzU2MjNfTUlTQ19IUF9ERVBPUF9NT0RFMl9FTiwKKwkJCQlBTEM1NjIzX01JU0NfSFBfREVQT1BfTU9ERTJfRU4pOworCisJbXNsZWVwKDUwMCk7CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBTEM1NjIzX1BXUl9NQU5BR19BREQyLCBBTEM1NjIzX0FERDJfUE9XRVJfRU4pOworCisJLyogYXZvaWQgd3JpdGluZyAnMScgaW50byA1NjIyIHJlc2VydmVkIGJpdHMgKi8KKwlpZiAoYWxjNTYyMy0+aWQgPT0gMHgyMikKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUxDNTYyM19QV1JfTUFOQUdfQUREMSwKKwkJCUFMQzU2MjNfQUREMV9QT1dFUl9FTl81NjIyKTsKKwllbHNlCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFMQzU2MjNfUFdSX01BTkFHX0FERDEsCisJCQlBTEM1NjIzX0FERDFfUE9XRVJfRU4pOworCisJLyogZGlzYWJsZSBIUCBEZXBvcDIgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBTEM1NjIzX01JU0NfQ1RSTCwKKwkJCQlBTEM1NjIzX01JU0NfSFBfREVQT1BfTU9ERTJfRU4sCisJCQkJMCk7CisKK30KKworc3RhdGljIGludCBhbGM1NjIzX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJCWVuYWJsZV9wb3dlcl9kZXBvcChjb2RlYyk7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCS8qIGV2ZXJ5dGhpbmcgb2ZmIGV4Y2VwdCB2cmVmL3ZtaWQsICovCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFMQzU2MjNfUFdSX01BTkFHX0FERDIsCisJCQkJQUxDNTYyM19QV1JfQUREMl9WUkVGKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUxDNTYyM19QV1JfTUFOQUdfQUREMywKKwkJCQlBTEM1NjIzX1BXUl9BREQzX01BSU5fQklBUyk7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJLyogZXZlcnl0aGluZyBvZmYsIGRhYyBtdXRlLCBpbmFjdGl2ZSAqLworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBTEM1NjIzX1BXUl9NQU5BR19BREQyLCAwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUxDNTYyM19QV1JfTUFOQUdfQUREMywgMCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFMQzU2MjNfUFdSX01BTkFHX0FERDEsIDApOworCQlicmVhazsKKwl9CisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOworCXJldHVybiAwOworfQorCisjZGVmaW5lIEFMQzU2MjNfRk9STUFUUwkoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgXAorCQkJfCBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSBcCisJCQl8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhbGM1NjIzX2RhaV9vcHMgPSB7CisJCS5od19wYXJhbXMgPSBhbGM1NjIzX3BjbV9od19wYXJhbXMsCisJCS5kaWdpdGFsX211dGUgPSBhbGM1NjIzX211dGUsCisJCS5zZXRfZm10ID0gYWxjNTYyM19zZXRfZGFpX2ZtdCwKKwkJLnNldF9zeXNjbGsgPSBhbGM1NjIzX3NldF9kYWlfc3lzY2xrLAorCQkuc2V0X3BsbCA9IGFsYzU2MjNfc2V0X2RhaV9wbGwsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBhbGM1NjIzX2RhaSA9IHsKKwkubmFtZSA9ICJhbGM1NjIzLWhpZmkiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZV9taW4gPQk4MDAwLAorCQkucmF0ZV9tYXggPQk0ODAwMCwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJLmZvcm1hdHMgPSBBTEM1NjIzX0ZPUk1BVFMsfSwKKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlX21pbiA9CTgwMDAsCisJCS5yYXRlX21heCA9CTQ4MDAwLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCQkuZm9ybWF0cyA9IEFMQzU2MjNfRk9STUFUUyx9LAorCisJLm9wcyA9ICZhbGM1NjIzX2RhaV9vcHMsCit9OworCitzdGF0aWMgaW50IGFsYzU2MjNfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCWFsYzU2MjNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsYzU2MjNfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgaSwgc3RlcCA9IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zdGVwOworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCisJLyogU3luYyByZWdfY2FjaGUgd2l0aCB0aGUgaGFyZHdhcmUgKi8KKwlmb3IgKGkgPSAyIDsgaSA8IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplIDsgaSArPSBzdGVwKQorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBpLCBjYWNoZVtpXSk7CisKKwlhbGM1NjIzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwkvKiBjaGFyZ2UgYWxjNTYyMyBjYXBzICovCisJaWYgKGNvZGVjLT5kYXBtLnN1c3BlbmRfYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT04pIHsKKwkJYWxjNTYyM19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCQljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09OOworCQlhbGM1NjIzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBjb2RlYy0+ZGFwbS5iaWFzX2xldmVsKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbGM1NjIzX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjNTYyM19wcml2ICphbGM1NjIzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOworCWludCByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgOCwgMTYsIGFsYzU2MjMtPmNvbnRyb2xfdHlwZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWFsYzU2MjNfcmVzZXQoY29kZWMpOworCWFsYzU2MjNfZmlsbF9jYWNoZShjb2RlYyk7CisKKwkvKiBwb3dlciBvbiBkZXZpY2UgKi8KKwlhbGM1NjIzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwlpZiAoYWxjNTYyMy0+YWRkX2N0cmwpIHsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUxDNTYyM19BRERfQ1RSTF9SRUcsCisJCQkJYWxjNTYyMy0+YWRkX2N0cmwpOworCX0KKworCWlmIChhbGM1NjIzLT5qYWNrX2RldF9jdHJsKSB7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFMQzU2MjNfSkFDS19ERVRfQ1RSTCwKKwkJCQlhbGM1NjIzLT5qYWNrX2RldF9jdHJsKTsKKwl9CisKKwlzd2l0Y2ggKGFsYzU2MjMtPmlkKSB7CisJY2FzZSAweDIxOgorCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgcnQ1NjIxX3ZvbF9zbmRfY29udHJvbHMsCisJCQlBUlJBWV9TSVpFKHJ0NTYyMV92b2xfc25kX2NvbnRyb2xzKSk7CisJCWJyZWFrOworCWNhc2UgMHgyMjoKKwkJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHJ0NTYyMl92b2xfc25kX2NvbnRyb2xzLAorCQkJQVJSQVlfU0laRShydDU2MjJfdm9sX3NuZF9jb250cm9scykpOworCQlicmVhazsKKwljYXNlIDB4MjM6CisJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhbGM1NjIzX3ZvbF9zbmRfY29udHJvbHMsCisJCQlBUlJBWV9TSVpFKGFsYzU2MjNfdm9sX3NuZF9jb250cm9scykpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgYWxjNTYyM19zbmRfY29udHJvbHMsCisJCQlBUlJBWV9TSVpFKGFsYzU2MjNfc25kX2NvbnRyb2xzKSk7CisKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIGFsYzU2MjNfZGFwbV93aWRnZXRzLAorCQkJCQlBUlJBWV9TSVpFKGFsYzU2MjNfZGFwbV93aWRnZXRzKSk7CisKKwkvKiBzZXQgdXAgYXVkaW8gcGF0aCBpbnRlcmNvbm5lY3RzICovCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKKworCXN3aXRjaCAoYWxjNTYyMy0+aWQpIHsKKwljYXNlIDB4MjE6CisJY2FzZSAweDIyOgorCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIGFsYzU2MjNfZGFwbV9hbXBfd2lkZ2V0cywKKwkJCQkJQVJSQVlfU0laRShhbGM1NjIzX2RhcG1fYW1wX3dpZGdldHMpKTsKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgaW50ZXJjb25fYW1wX3NwaywKKwkJCQkJQVJSQVlfU0laRShpbnRlcmNvbl9hbXBfc3BrKSk7CisJCWJyZWFrOworCWNhc2UgMHgyMzoKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgaW50ZXJjb25fc3BrLAorCQkJCQlBUlJBWV9TSVpFKGludGVyY29uX3NwaykpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBwb3dlciBkb3duIGNoaXAgKi8KK3N0YXRpYyBpbnQgYWxjNTYyM19yZW1vdmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWFsYzU2MjNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZpY2VfYWxjNTYyMyA9IHsKKwkucHJvYmUgPSBhbGM1NjIzX3Byb2JlLAorCS5yZW1vdmUgPSBhbGM1NjIzX3JlbW92ZSwKKwkuc3VzcGVuZCA9IGFsYzU2MjNfc3VzcGVuZCwKKwkucmVzdW1lID0gYWxjNTYyM19yZXN1bWUsCisJLnNldF9iaWFzX2xldmVsID0gYWxjNTYyM19zZXRfYmlhc19sZXZlbCwKKwkucmVnX2NhY2hlX3NpemUgPSBBTEM1NjIzX1ZFTkRPUl9JRDIrMiwKKwkucmVnX3dvcmRfc2l6ZSA9IHNpemVvZih1MTYpLAorCS5yZWdfY2FjaGVfc3RlcCA9IDIsCit9OworCisvKgorICogQUxDNTYyMyAyIHdpcmUgYWRkcmVzcyBpcyBkZXRlcm1pbmVkIGJ5IEExIHBpbgorICogc3RhdGUgZHVyaW5nIHBvd2VydXAuCisgKiAgICBsb3cgID0gMHgxYQorICogICAgaGlnaCA9IDB4MWIKKyAqLworc3RhdGljIGludCBhbGM1NjIzX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYWxjNTYyM19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgYWxjNTYyM19wcml2ICphbGM1NjIzOworCWludCByZXQsIHZpZDEsIHZpZDI7CisKKwl2aWQxID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgQUxDNTYyM19WRU5ET1JfSUQxKTsKKwlpZiAodmlkMSA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVhZCBJMkNcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJdmlkMSA9ICgodmlkMSAmIDB4ZmYpIDw8IDgpIHwgKHZpZDEgPj4gOCk7CisKKwl2aWQyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQUxDNTYyM19WRU5ET1JfSUQyKTsKKwlpZiAodmlkMiA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVhZCBJMkNcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoKHZpZDEgIT0gMHgxMGVjKSB8fCAodmlkMiAhPSBpZC0+ZHJpdmVyX2RhdGEpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAidW5rbm93biBvciB3cm9uZyBjb2RlY1xuIik7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRXhwZWN0ZWQgJXg6JWx4LCBnb3QgJXg6JXhcbiIsCisJCQkJMHgxMGVjLCBpZC0+ZHJpdmVyX2RhdGEsCisJCQkJdmlkMSwgdmlkMik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiRm91bmQgY29kZWMgaWQgOiBhbGM1NiUwMnhcbiIsIHZpZDIpOworCisJYWxjNTYyMyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhbGM1NjIzX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYWxjNTYyMyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAocGRhdGEpIHsKKwkJYWxjNTYyMy0+YWRkX2N0cmwgPSBwZGF0YS0+YWRkX2N0cmw7CisJCWFsYzU2MjMtPmphY2tfZGV0X2N0cmwgPSBwZGF0YS0+amFja19kZXRfY3RybDsKKwl9CisKKwlhbGM1NjIzLT5pZCA9IHZpZDI7CisJc3dpdGNoIChhbGM1NjIzLT5pZCkgeworCWNhc2UgMHgyMToKKwkJYWxjNTYyM19kYWkubmFtZSA9ICJhbGM1NjIxLWhpZmkiOworCQlicmVhazsKKwljYXNlIDB4MjI6CisJCWFsYzU2MjNfZGFpLm5hbWUgPSAiYWxjNTYyMi1oaWZpIjsKKwkJYnJlYWs7CisJY2FzZSAweDIzOgorCQlhbGM1NjIzX2RhaS5uYW1lID0gImFsYzU2MjMtaGlmaSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWtmcmVlKGFsYzU2MjMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBhbGM1NjIzKTsKKwlhbGM1NjIzLT5jb250cm9sX2RhdGEgPSBjbGllbnQ7CisJYWxjNTYyMy0+Y29udHJvbF90eXBlID0gU05EX1NPQ19JMkM7CisJbXV0ZXhfaW5pdCgmYWxjNTYyMy0+bXV0ZXgpOworCisJcmV0ID0gIHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoJmNsaWVudC0+ZGV2LAorCQkmc29jX2NvZGVjX2RldmljZV9hbGM1NjIzLCAmYWxjNTYyM19kYWksIDEpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCWtmcmVlKGFsYzU2MjMpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWxjNTYyM19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFsYzU2MjNfcHJpdiAqYWxjNTYyMyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZjbGllbnQtPmRldik7CisJa2ZyZWUoYWxjNTYyMyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhbGM1NjIzX2kyY190YWJsZVtdID0geworCXsiYWxjNTYyMSIsIDB4MjF9LAorCXsiYWxjNTYyMiIsIDB4MjJ9LAorCXsiYWxjNTYyMyIsIDB4MjN9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFsYzU2MjNfaTJjX3RhYmxlKTsKKworLyogIGkyYyBjb2RlYyBjb250cm9sIGxheWVyICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWxjNTYyM19pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImFsYzU2MngtY29kZWMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IGFsYzU2MjNfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSAgX19kZXZleGl0X3AoYWxjNTYyM19pMmNfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBhbGM1NjIzX2kyY190YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFsYzU2MjNfbW9kaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmYWxjNTYyM19pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgYWRkIGkyYyBkcml2ZXIiLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KGFsYzU2MjNfbW9kaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbGM1NjIzX21vZGV4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmYWxjNTYyM19pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGFsYzU2MjNfbW9kZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBhbGM1NjIxLzIvMyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkFybmF1ZCBQYXRhcmQgPGFybmF1ZC5wYXRhcmRAcnRwLW5ldC5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FsYzU2MjMuaCBiL3NvdW5kL3NvYy9jb2RlY3MvYWxjNTYyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZDY4MjYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2FsYzU2MjMuaApAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIGFsYzU2MjMuaCAgLS0gIGFsYzU2MlsxMjNdIEFMU0EgU29jIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA4IFJlYWx0ZWsgTWljcm9lbGVjdHJvbmljcworICogQ29weXJpZ2h0IDIwMTAgQXJuYXVkIFBhdGFyZCA8YXJuYXVkLnBhdGFyZEBydHAtbmV0Lm9yZz4KKyAqCisgKiBBdXRob3I6IGZsb3ZlIDxmbG92ZUByZWFsdGVrLmNvbT4KKyAqIEFybmF1ZCBQYXRhcmQgPGFybmF1ZC5wYXRhcmRAcnRwLW5ldC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfQUxDNTYyM19ICisjZGVmaW5lIF9BTEM1NjIzX0gKKworI2RlZmluZSBBTEM1NjIzX1JFU0VUCQkJCTB4MDAKKy8qCQkJCTU2MjEgNTYyMiA1NjIzICAqLworLyogc3BlYWtlciBvdXRwdXQgdm9sCQkgICAyICAgIDIgICAgICAgKi8KKy8qIGxpbmUgb3V0cHV0IHZvbCAgICAgICAgICAgICAgICAgICAgICA0ICAgIDIgICovCisvKiBIUCBvdXRwdXQgdm9sCQkgICA0ICAgIDAgICAgNCAgKi8KKyNkZWZpbmUgQUxDNTYyM19TUEtfT1VUX1ZPTAkJCTB4MDIKKyNkZWZpbmUgQUxDNTYyM19IUF9PVVRfVk9MCQkJMHgwNAorI2RlZmluZSBBTEM1NjIzX01PTk9fQVVYX09VVF9WT0wJCTB4MDYKKyNkZWZpbmUgQUxDNTYyM19BVVhJTl9WT0wJCQkweDA4CisjZGVmaW5lIEFMQzU2MjNfTElORV9JTl9WT0wJCQkweDBBCisjZGVmaW5lIEFMQzU2MjNfU1RFUkVPX0RBQ19WT0wJCQkweDBDCisjZGVmaW5lIEFMQzU2MjNfTUlDX1ZPTAkJCQkweDBFCisjZGVmaW5lIEFMQzU2MjNfTUlDX1JPVVRJTkdfQ1RSTAkJMHgxMAorI2RlZmluZSBBTEM1NjIzX0FEQ19SRUNfR0FJTgkJCTB4MTIKKyNkZWZpbmUgQUxDNTYyM19BRENfUkVDX01JWEVSCQkJMHgxNAorI2RlZmluZSBBTEM1NjIzX1NPRlRfVk9MX0NUUkxfVElNRQkJMHgxNgorLyogQUxDNTYyM19PVVRQVVRfTUlYRVJfQ1RSTCA6CQkJKi8KKy8qIHNhbWUgcmVtYXJrIGFzIGZvciByZWcgMiBsaW5lIHZzIHNwZWFrZXIJKi8KKyNkZWZpbmUgQUxDNTYyM19PVVRQVVRfTUlYRVJfQ1RSTAkJMHgxQworI2RlZmluZSBBTEM1NjIzX01JQ19DVFJMCQkJMHgyMgorCisjZGVmaW5lCUFMQzU2MjNfREFJX0NPTlRST0wJCQkweDM0CisjZGVmaW5lIEFMQzU2MjNfREFJX1NEUF9NQVNURVJfTU9ERQkJKDAgPDwgMTUpCisjZGVmaW5lIEFMQzU2MjNfREFJX1NEUF9TTEFWRV9NT0RFCQkoMSA8PCAxNSkKKyNkZWZpbmUgQUxDNTYyM19EQUlfSTJTX1BDTV9NT0RFCQkoMSA8PCAxNCkKKyNkZWZpbmUgQUxDNTYyM19EQUlfTUFJTl9JMlNfQkNMS19QT0xfQ1RSTAkoMSA8PCAgNykKKyNkZWZpbmUgQUxDNTYyM19EQUlfQURDX0RBVEFfTF9SX1NXQVAJCSgxIDw8ICA1KQorI2RlZmluZSBBTEM1NjIzX0RBSV9EQUNfREFUQV9MX1JfU1dBUAkJKDEgPDwgIDQpCisjZGVmaW5lIEFMQzU2MjNfREFJX0kyU19ETF9NQVNLCQkJKDMgPDwgIDIpCisjZGVmaW5lIEFMQzU2MjNfREFJX0kyU19ETF8zMgkJCSgzIDw8ICAyKQorI2RlZmluZQlBTEM1NjIzX0RBSV9JMlNfRExfMjQJCQkoMiA8PCAgMikKKyNkZWZpbmUgQUxDNTYyM19EQUlfSTJTX0RMXzIwCQkJKDEgPDwgIDIpCisjZGVmaW5lIEFMQzU2MjNfREFJX0kyU19ETF8xNgkJCSgwIDw8ICAyKQorI2RlZmluZSBBTEM1NjIzX0RBSV9JMlNfREZfUENNCQkJKDMgPDwgIDApCisjZGVmaW5lCUFMQzU2MjNfREFJX0kyU19ERl9MRUZUCQkJKDIgPDwgIDApCisjZGVmaW5lIEFMQzU2MjNfREFJX0kyU19ERl9SSUdIVAkJKDEgPDwgIDApCisjZGVmaW5lIEFMQzU2MjNfREFJX0kyU19ERl9JMlMJCQkoMCA8PCAgMCkKKworI2RlZmluZSBBTEM1NjIzX1NURVJFT19BRF9EQV9DTEtfQ1RSTAkJMHgzNgorI2RlZmluZQlBTEM1NjIzX0NPTVBBTkRJTkdfQ1RSTAkJCTB4MzgKKworI2RlZmluZQlBTEM1NjIzX1BXUl9NQU5BR19BREQxCQkJMHgzQQorI2RlZmluZSBBTEM1NjIzX1BXUl9BREQxX01BSU5fSTJTX0VOCQkoMSA8PCAxNSkKKyNkZWZpbmUgQUxDNTYyM19QV1JfQUREMV9aQ19ERVRfUERfRU4JCSgxIDw8IDE0KQorI2RlZmluZSBBTEM1NjIzX1BXUl9BREQxX01JQzFfQklBU19FTgkJKDEgPDwgMTEpCisjZGVmaW5lIEFMQzU2MjNfUFdSX0FERDFfU0hPUlRfQ1VSUl9ERVRfRU4JKDEgPDwgMTApCisjZGVmaW5lIEFMQzU2MjNfUFdSX0FERDFfU09GVEdFTl9FTgkJKDEgPDwgIDgpIC8qIHJzdmQgb24gNTYyMiAqLworI2RlZmluZQlBTEM1NjIzX1BXUl9BREQxX0RFUE9QX0JVRl9IUAkJKDEgPDwgIDYpIC8qIHJzdmQgb24gNTYyMiAqLworI2RlZmluZQlBTEM1NjIzX1BXUl9BREQxX0hQX09VVF9BTVAJCSgxIDw8ICA1KQorI2RlZmluZQlBTEM1NjIzX1BXUl9BREQxX0hQX09VVF9FTkhfQU1QCQkoMSA8PCAgNCkgLyogcnN2ZCBvbiA1NjIyICovCisjZGVmaW5lIEFMQzU2MjNfUFdSX0FERDFfREVQT1BfQlVGX0FVWAkJKDEgPDwgIDIpCisjZGVmaW5lIEFMQzU2MjNfUFdSX0FERDFfQVVYX09VVF9BTVAJCSgxIDw8ICAxKQorI2RlZmluZSBBTEM1NjIzX1BXUl9BREQxX0FVWF9PVVRfRU5IX0FNUAkoMSA8PCAgMCkgLyogcnN2ZCBvbiA1NjIyICovCisKKyNkZWZpbmUgQUxDNTYyM19QV1JfTUFOQUdfQUREMgkJCTB4M0MKKyNkZWZpbmUgQUxDNTYyM19QV1JfQUREMl9MSU5FT1VUCQkoMSA8PCAxNSkgLyogcnQ1NjIzICovCisjZGVmaW5lIEFMQzU2MjNfUFdSX0FERDJfQ0xBU1NfQUIJCSgxIDw8IDE1KSAvKiBydDU2MjEgKi8KKyNkZWZpbmUgQUxDNTYyM19QV1JfQUREMl9DTEFTU19ECQkoMSA8PCAxNCkgLyogcnQ1NjIxICovCisjZGVmaW5lIEFMQzU2MjNfUFdSX0FERDJfVlJFRgkJCSgxIDw8IDEzKQorI2RlZmluZSBBTEM1NjIzX1BXUl9BREQyX1BMTAkJCSgxIDw8IDEyKQorI2RlZmluZSBBTEM1NjIzX1BXUl9BREQyX0RBQ19SRUZfQ0lSCQkoMSA8PCAxMCkKKyNkZWZpbmUgQUxDNTYyM19QV1JfQUREMl9MX0RBQ19DTEsJCSgxIDw8ICA5KQorI2RlZmluZSBBTEM1NjIzX1BXUl9BREQyX1JfREFDX0NMSwkJKDEgPDwgIDgpCisjZGVmaW5lIEFMQzU2MjNfUFdSX0FERDJfTF9BRENfQ0xLX0dBSU4JCSgxIDw8ICA3KQorI2RlZmluZSBBTEM1NjIzX1BXUl9BREQyX1JfQURDX0NMS19HQUlOCQkoMSA8PCAgNikKKyNkZWZpbmUgQUxDNTYyM19QV1JfQUREMl9MX0hQX01JWEVSCQkoMSA8PCAgNSkKKyNkZWZpbmUgQUxDNTYyM19QV1JfQUREMl9SX0hQX01JWEVSCQkoMSA8PCAgNCkKKyNkZWZpbmUgQUxDNTYyM19QV1JfQUREMl9TUEtfTUlYRVIJCSgxIDw8ICAzKQorI2RlZmluZSBBTEM1NjIzX1BXUl9BREQyX01PTk9fTUlYRVIJCSgxIDw8ICAyKQorI2RlZmluZSBBTEM1NjIzX1BXUl9BREQyX0xfQURDX1JFQ19NSVhFUgkoMSA8PCAgMSkKKyNkZWZpbmUgQUxDNTYyM19QV1JfQUREMl9SX0FEQ19SRUNfTUlYRVIJKDEgPDwgIDApCisKKyNkZWZpbmUgQUxDNTYyM19QV1JfTUFOQUdfQUREMwkJCTB4M0UKKyNkZWZpbmUgQUxDNTYyM19QV1JfQUREM19NQUlOX0JJQVMJCSgxIDw8IDE1KQorI2RlZmluZSBBTEM1NjIzX1BXUl9BREQzX0FVWE9VVF9MX1ZPTF9BTVAJKDEgPDwgMTQpCisjZGVmaW5lIEFMQzU2MjNfUFdSX0FERDNfQVVYT1VUX1JfVk9MX0FNUAkoMSA8PCAxMykKKyNkZWZpbmUgQUxDNTYyM19QV1JfQUREM19TUEtfT1VUCQkoMSA8PCAxMikKKyNkZWZpbmUgQUxDNTYyM19QV1JfQUREM19IUF9MX09VVF9WT0wJCSgxIDw8IDEwKQorI2RlZmluZSBBTEM1NjIzX1BXUl9BREQzX0hQX1JfT1VUX1ZPTAkJKDEgPDwgIDkpCisjZGVmaW5lIEFMQzU2MjNfUFdSX0FERDNfTElORUlOX0xfVk9MCQkoMSA8PCAgNykKKyNkZWZpbmUgQUxDNTYyM19QV1JfQUREM19MSU5FSU5fUl9WT0wJCSgxIDw8ICA2KQorI2RlZmluZSBBTEM1NjIzX1BXUl9BREQzX0FVWElOX0xfVk9MCQkoMSA8PCAgNSkKKyNkZWZpbmUgQUxDNTYyM19QV1JfQUREM19BVVhJTl9SX1ZPTAkJKDEgPDwgIDQpCisjZGVmaW5lIEFMQzU2MjNfUFdSX0FERDNfTUlDMV9GVU5fQ1RSTAkJKDEgPDwgIDMpCisjZGVmaW5lIEFMQzU2MjNfUFdSX0FERDNfTUlDMl9GVU5fQ1RSTAkJKDEgPDwgIDIpCisjZGVmaW5lIEFMQzU2MjNfUFdSX0FERDNfTUlDMV9CT09TVF9BRAkJKDEgPDwgIDEpCisjZGVmaW5lIEFMQzU2MjNfUFdSX0FERDNfTUlDMl9CT09TVF9BRAkJKDEgPDwgIDApCisKKyNkZWZpbmUgQUxDNTYyM19BRERfQ1RSTF9SRUcJCQkweDQwCisKKyNkZWZpbmUJQUxDNTYyM19HTE9CQUxfQ0xLX0NUUkxfUkVHCQkweDQyCisjZGVmaW5lIEFMQzU2MjNfR0JMX0NMS19TWVNfU09VUl9TRUxfUExMCSgxIDw8IDE1KQorI2RlZmluZSBBTEM1NjIzX0dCTF9DTEtfU1lTX1NPVVJfU0VMX01DTEsJKDAgPDwgMTUpCisjZGVmaW5lIEFMQzU2MjNfR0JMX0NMS19QTExfU09VUl9TRUxfQklUQ0xLCSgxIDw8IDE0KQorI2RlZmluZSBBTEM1NjIzX0dCTF9DTEtfUExMX1NPVVJfU0VMX01DTEsJKDAgPDwgMTQpCisjZGVmaW5lIEFMQzU2MjNfR0JMX0NMS19QTExfRElWX1JBVElPX0RJVjgJKDMgPDwgIDEpCisjZGVmaW5lIEFMQzU2MjNfR0JMX0NMS19QTExfRElWX1JBVElPX0RJVjQJKDIgPDwgIDEpCisjZGVmaW5lIEFMQzU2MjNfR0JMX0NMS19QTExfRElWX1JBVElPX0RJVjIJKDEgPDwgIDEpCisjZGVmaW5lIEFMQzU2MjNfR0JMX0NMS19QTExfRElWX1JBVElPX0RJVjEJKDAgPDwgIDEpCisjZGVmaW5lIEFMQzU2MjNfR0JMX0NMS19QTExfUFJFX0RJVjIJCSgxIDw8ICAwKQorI2RlZmluZSBBTEM1NjIzX0dCTF9DTEtfUExMX1BSRV9ESVYxCQkoMCA8PCAgMCkKKworI2RlZmluZSBBTEM1NjIzX1BMTF9DVFJMCQkJMHg0NAorI2RlZmluZSBBTEM1NjIzX1BMTF9DVFJMX05fVkFMKG4pCQkoKChuKSYweGZmKSA8PCA4KQorI2RlZmluZSBBTEM1NjIzX1BMTF9DVFJMX0tfVkFMKGspCQkoKChrKSYweDcpICA8PCA0KQorI2RlZmluZSBBTEM1NjIzX1BMTF9DVFJMX01fVkFMKG0pCQkoKG0pJjB4ZikKKworI2RlZmluZSBBTEM1NjIzX0dQSU9fT1VUUFVUX1BJTl9DVFJMCQkweDRBCisjZGVmaW5lIEFMQzU2MjNfR1BJT19QSU5fQ09ORklHCQkJMHg0QworI2RlZmluZSBBTEM1NjIzX0dQSU9fUElOX1BPTEFSSVRZCQkweDRFCisjZGVmaW5lIEFMQzU2MjNfR1BJT19QSU5fU1RJQ0tZCQkJMHg1MAorI2RlZmluZSBBTEM1NjIzX0dQSU9fUElOX1dBS0VVUAkJCTB4NTIKKyNkZWZpbmUgQUxDNTYyM19HUElPX1BJTl9TVEFUVVMJCQkweDU0CisjZGVmaW5lIEFMQzU2MjNfR1BJT19QSU5fU0hBUklORwkJMHg1NgorI2RlZmluZQlBTEM1NjIzX09WRVJfQ1VSUl9TVEFUVVMJCTB4NTgKKyNkZWZpbmUgQUxDNTYyM19KQUNLX0RFVF9DVFJMCQkJMHg1QQorCisjZGVmaW5lIEFMQzU2MjNfTUlTQ19DVFJMCQkJMHg1RQorI2RlZmluZSBBTEM1NjIzX01JU0NfRElTQUJMRV9GQVNUX1ZSRUcJCSgxIDw8IDE1KQorI2RlZmluZSBBTEM1NjIzX01JU0NfU1BLX0NMQVNTX0FCX09DX1BECQkoMSA8PCAxMykgLyogNTYyMSAqLworI2RlZmluZSBBTEM1NjIzX01JU0NfU1BLX0NMQVNTX0FCX09DX0RFVAkoMSA8PCAxMikgLyogNTYyMSAqLworI2RlZmluZSBBTEM1NjIzX01JU0NfSFBfREVQT1BfTU9ERTNfRU4JCSgxIDw8IDEwKQorI2RlZmluZSBBTEM1NjIzX01JU0NfSFBfREVQT1BfTU9ERTJfRU4JCSgxIDw8ICA5KQorI2RlZmluZSBBTEM1NjIzX01JU0NfSFBfREVQT1BfTU9ERTFfRU4JCSgxIDw8ICA4KQorI2RlZmluZSBBTEM1NjIzX01JU0NfQVVYT1VUX0RFUE9QX01PREUzX0VOCSgxIDw8ICA2KQorI2RlZmluZSBBTEM1NjIzX01JU0NfQVVYT1VUX0RFUE9QX01PREUyX0VOCSgxIDw8ICA1KQorI2RlZmluZSBBTEM1NjIzX01JU0NfQVVYT1VUX0RFUE9QX01PREUxX0VOCSgxIDw8ICA0KQorI2RlZmluZSBBTEM1NjIzX01JU0NfTV9EQUNfTF9JTlBVVAkJKDEgPDwgIDMpCisjZGVmaW5lIEFMQzU2MjNfTUlTQ19NX0RBQ19SX0lOUFVUCQkoMSA8PCAgMikKKyNkZWZpbmUgQUxDNTYyM19NSVNDX0lSUU9VVF9JTlZfQ1RSTAkJKDEgPDwgIDApCisKKyNkZWZpbmUJQUxDNTYyM19QU0VEVUVPX1NQQVRJQUxfQ1RSTAkJMHg2MAorI2RlZmluZSBBTEM1NjIzX0VRX0NUUkwJCQkJMHg2MgorI2RlZmluZSBBTEM1NjIzX0VRX01PREVfRU5BQkxFCQkJMHg2NgorI2RlZmluZSBBTEM1NjIzX0FWQ19DVFJMCQkJMHg2OAorI2RlZmluZSBBTEM1NjIzX0hJRF9DVFJMX0lOREVYCQkJMHg2QQorI2RlZmluZSBBTEM1NjIzX0hJRF9DVFJMX0RBVEEJCQkweDZDCisjZGVmaW5lIEFMQzU2MjNfVkVORE9SX0lEMQkJCTB4N0MKKyNkZWZpbmUgQUxDNTYyM19WRU5ET1JfSUQyCQkJMHg3RQorCisjZGVmaW5lIEFMQzU2MjNfUExMX0ZSX01DTEsJCQkwCisjZGVmaW5lIEFMQzU2MjNfUExMX0ZSX0JDSwkJCTEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jcTkzdmMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3E5M3ZjLmMKaW5kZXggODIzNjQzOS4uNDZkYmZkMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9jcTkzdmMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2NxOTN2Yy5jCkBAIC0zNiw4ICszNiw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYWkuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIAogI2luY2x1ZGUgPG1hY2gvZG0zNjUuaD4KQEAgLTExNiw3ICsxMTQsNyBAQAogCQkJICAgICBEQVZJTkNJX1ZDX1JFRzEyX1BPV0VSX0FMTF9PRkYpOwogCQlicmVhazsKIAl9Ci0JY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gbGV2ZWw7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jCmluZGV4IDZkNGJkYzYuLjhiNTEyNDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYwpAQCAtMTA2LDYgKzEwNiwyMSBAQAogI2RlZmluZSBDUzQyNzBfTVVURV9EQUNfQQkweDAxCiAjZGVmaW5lIENTNDI3MF9NVVRFX0RBQ19CCTB4MDIKIAorLyogUG93ZXItb24gZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZWdpc3RlcnMKKyAqCisgKiBUaGlzIGFycmF5IGNvbnRhaW5zIHRoZSBwb3dlci1vbiBkZWZhdWx0IHZhbHVlcyBvZiB0aGUgcmVnaXN0ZXJzLCB3aXRoIHRoZQorICogZXhjZXB0aW9uIG9mIHRoZSAiQ0hJUElEIiByZWdpc3RlciAoMDFoKS4gIFRoZSBsb3dlciBmb3VyIGJpdHMgb2YgdGhhdAorICogcmVnaXN0ZXIgY29udGFpbiB0aGUgaGFyZHdhcmUgcmV2aXNpb24sIHNvIGl0IGlzIHRyZWF0ZWQgYXMgdm9sYXRpbGUuCisgKgorICogQWxzbyBub3RlIHRoYXQgb24gdGhlIENTNDI3MCwgdGhlIGZpcnN0IHJlYWRhYmxlIHJlZ2lzdGVyIGlzIDEsIGJ1dCBBU29DCisgKiBhc3N1bWVzIHRoZSBmaXJzdCByZWdpc3RlciBpcyAwLiAgVGhlcmZvcmUsIHRoZSBhcnJheSBtdXN0IGhhdmUgYW4gZW50cnkgZm9yCisgKiByZWdpc3RlciAwLCBidXQgd2UgdXNlIGNzNDI3MF9yZWdfaXNfcmVhZGFibGUoKSB0byB0ZWxsIEFTb0MgdGhhdCBpdCBjYW4ndAorICogYmUgcmVhZC4KKyAqLworc3RhdGljIGNvbnN0IHU4IGNzNDI3MF9kZWZhdWx0X3JlZ19jYWNoZVtDUzQyNzBfTEFTVFJFRyArIDFdID0geworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NjAsIDB4MjAsIDB4MDAsIDB4MDAKK307CisKIHN0YXRpYyBjb25zdCBjaGFyICpzdXBwbHlfbmFtZXNbXSA9IHsKIAkidmEiLCAidmQiLCAidmxjIgogfTsKQEAgLTExNCw3ICsxMjksNiBAQAogc3RydWN0IGNzNDI3MF9wcml2YXRlIHsKIAllbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2xfdHlwZTsKIAl2b2lkICpjb250cm9sX2RhdGE7Ci0JdTggcmVnX2NhY2hlW0NTNDI3MF9OVU1SRUdTXTsKIAl1bnNpZ25lZCBpbnQgbWNsazsgLyogSW5wdXQgZnJlcXVlbmN5IG9mIHRoZSBNQ0xLIHBpbiAqLwogCXVuc2lnbmVkIGludCBtb2RlOyAvKiBUaGUgbW9kZSAoSTJTIG9yIGxlZnQtanVzdGlmaWVkKSAqLwogCXVuc2lnbmVkIGludCBzbGF2ZV9tb2RlOwpAQCAtMTc5LDYgKzE5MywyMCBAQAogLyogVGhlIG51bWJlciBvZiBNQ0xLL0xSQ0sgcmF0aW9zIHN1cHBvcnRlZCBieSB0aGUgQ1M0MjcwICovCiAjZGVmaW5lIE5VTV9NQ0xLX1JBVElPUwkJQVJSQVlfU0laRShjczQyNzBfbW9kZV9yYXRpb3MpCiAKK3N0YXRpYyBpbnQgY3M0MjcwX3JlZ19pc19yZWFkYWJsZSh1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiAocmVnID49IENTNDI3MF9GSVJTVFJFRykgJiYgKHJlZyA8PSBDUzQyNzBfTEFTVFJFRyk7Cit9CisKK3N0YXRpYyBpbnQgY3M0MjcwX3JlZ19pc192b2xhdGlsZSh1bnNpZ25lZCBpbnQgcmVnKQoreworCS8qIFVucmVhZGFibGUgcmVnaXN0ZXJzIGFyZSBjb25zaWRlcmVkIHZvbGF0aWxlICovCisJaWYgKChyZWcgPCBDUzQyNzBfRklSU1RSRUcpIHx8IChyZWcgPiBDUzQyNzBfTEFTVFJFRykpCisJCXJldHVybiAxOworCisJcmV0dXJuIHJlZyA9PSBDUzQyNzBfQ0hJUElEOworfQorCiAvKioKICAqIGNzNDI3MF9zZXRfZGFpX3N5c2NsayAtIGRldGVybWluZSB0aGUgQ1M0MjcwIHNhbXBsZXMgcmF0ZXMuCiAgKiBAY29kZWNfZGFpOiB0aGUgY29kZWMgREFJCkBAIC0yNjQsOTcgKzI5Miw2IEBACiB9CiAKIC8qKgotICogY3M0MjcwX2ZpbGxfY2FjaGUgLSBwcmUtZmlsbCB0aGUgQ1M0MjcwIHJlZ2lzdGVyIGNhY2hlLgotICogQGNvZGVjOiB0aGUgY29kZWMgZm9yIHRoaXMgQ1M0MjcwCi0gKgotICogVGhpcyBmdW5jdGlvbiBmaWxscyBpbiB0aGUgQ1M0MjcwIHJlZ2lzdGVyIGNhY2hlIGJ5IHJlYWRpbmcgdGhlIHJlZ2lzdGVyCi0gKiB2YWx1ZXMgZnJvbSB0aGUgaGFyZHdhcmUuCi0gKgotICogVGhpcyBDUzQyNzAgcmVnaXN0ZXJzIGFyZSBjYWNoZWQgdG8gYXZvaWQgZXhjZXNzaXZlIEkyQyBJL08gb3BlcmF0aW9ucy4KLSAqIEFmdGVyIHRoZSBpbml0aWFsIHJlYWQgdG8gcHJlLWZpbGwgdGhlIGNhY2hlLCB0aGUgQ1M0MjcwIG5ldmVyIHVwZGF0ZXMKLSAqIHRoZSByZWdpc3RlciB2YWx1ZXMsIHNvIHdlIHdvbid0IGhhdmUgYSBjYWNoZSBjb2hlcmVuY3kgcHJvYmxlbS4KLSAqCi0gKiBXZSB1c2UgdGhlIGF1dG8taW5jcmVtZW50IGZlYXR1cmUgb2YgdGhlIENTNDI3MCB0byByZWFkIGFsbCByZWdpc3RlcnMgaW4KLSAqIG9uZSBzaG90LgotICovCi1zdGF0aWMgaW50IGNzNDI3MF9maWxsX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQl1OCAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50ID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKLQlzMzIgbGVuZ3RoOwotCi0JbGVuZ3RoID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoaTJjX2NsaWVudCwKLQkJQ1M0MjcwX0ZJUlNUUkVHIHwgQ1M0MjcwX0kyQ19JTkNSLCBDUzQyNzBfTlVNUkVHUywgY2FjaGUpOwotCi0JaWYgKGxlbmd0aCAhPSBDUzQyNzBfTlVNUkVHUykgewotCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpMmMgcmVhZCBmYWlsdXJlLCBhZGRyPTB4JXhcbiIsCi0JCSAgICAgICBpMmNfY2xpZW50LT5hZGRyKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogY3M0MjcwX3JlYWRfcmVnX2NhY2hlIC0gcmVhZCBmcm9tIHRoZSBDUzQyNzAgcmVnaXN0ZXIgY2FjaGUuCi0gKiBAY29kZWM6IHRoZSBjb2RlYyBmb3IgdGhpcyBDUzQyNzAKLSAqIEByZWc6IHRoZSByZWdpc3RlciB0byByZWFkCi0gKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiByZWdpc3Rlci4gIEl0IHJlYWRzIG9ubHkgZnJvbQotICogdGhlIHJlZ2lzdGVyIGNhY2hlLCBub3QgdGhlIGhhcmR3YXJlIGl0c2VsZi4KLSAqCi0gKiBUaGlzIENTNDI3MCByZWdpc3RlcnMgYXJlIGNhY2hlZCB0byBhdm9pZCBleGNlc3NpdmUgSTJDIEkvTyBvcGVyYXRpb25zLgotICogQWZ0ZXIgdGhlIGluaXRpYWwgcmVhZCB0byBwcmUtZmlsbCB0aGUgY2FjaGUsIHRoZSBDUzQyNzAgbmV2ZXIgdXBkYXRlcwotICogdGhlIHJlZ2lzdGVyIHZhbHVlcywgc28gd2Ugd29uJ3QgaGF2ZSBhIGNhY2hlIGNvaGVyZW5jeSBwcm9ibGVtLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGNzNDI3MF9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JdW5zaWduZWQgaW50IHJlZykKLXsKLQl1OCAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCi0JaWYgKChyZWcgPCBDUzQyNzBfRklSU1RSRUcpIHx8IChyZWcgPiBDUzQyNzBfTEFTVFJFRykpCi0JCXJldHVybiAtRUlPOwotCi0JcmV0dXJuIGNhY2hlW3JlZyAtIENTNDI3MF9GSVJTVFJFR107Ci19Ci0KLS8qKgotICogY3M0MjcwX2kyY193cml0ZSAtIHdyaXRlIHRvIGEgQ1M0MjcwIHJlZ2lzdGVyIHZpYSB0aGUgSTJDIGJ1cy4KLSAqIEBjb2RlYzogdGhlIGNvZGVjIGZvciB0aGlzIENTNDI3MAotICogQHJlZzogdGhlIHJlZ2lzdGVyIHRvIHdyaXRlCi0gKiBAdmFsdWU6IHRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGdpdmVuIENTNDI3MCByZWdpc3RlciwgYW5kCi0gKiBhbHNvIHVwZGF0ZXMgdGhlIHJlZ2lzdGVyIGNhY2hlLgotICoKLSAqIE5vdGUgdGhhdCB3ZSBkb24ndCB1c2UgdGhlIGh3X3dyaXRlIGZ1bmN0aW9uIHBvaW50ZXIgb2Ygc25kX3NvY19jb2RlYy4KLSAqIFRoYXQncyBiZWNhdXNlIGl0J3MgdG9vIGNsdW5reTogdGhlIGh3X3dyaXRlX3QgcHJvdG90eXBlIGRvZXMgbm90IG1hdGNoCi0gKiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKCksIGFuZCBpdCdzIGp1c3QgYW5vdGhlciBsYXllciBvZiBvdmVyaGVhZC4KLSAqLwotc3RhdGljIGludCBjczQyNzBfaTJjX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKLQkJCSAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTggKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQotCWlmICgocmVnIDwgQ1M0MjcwX0ZJUlNUUkVHKSB8fCAocmVnID4gQ1M0MjcwX0xBU1RSRUcpKQotCQlyZXR1cm4gLUVJTzsKLQotCS8qIE9ubHkgcGVyZm9ybSBhbiBJMkMgb3BlcmF0aW9uIGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50ICovCi0JaWYgKGNhY2hlW3JlZyAtIENTNDI3MF9GSVJTVFJFR10gIT0gdmFsdWUpIHsKLQkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvZGVjLT5jb250cm9sX2RhdGE7Ci0JCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSkpIHsKLQkJCWRldl9lcnIoY29kZWMtPmRldiwgImkyYyB3cml0ZSBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQotCQkvKiBXZSd2ZSB3cml0dGVuIHRvIHRoZSBoYXJkd2FyZSwgc28gdXBkYXRlIHRoZSBjYWNoZSAqLwotCQljYWNoZVtyZWcgLSBDUzQyNzBfRklSU1RSRUddID0gdmFsdWU7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgogICogY3M0MjcwX2h3X3BhcmFtcyAtIHByb2dyYW0gdGhlIENTNDI3MCB3aXRoIHRoZSBnaXZlbiBoYXJkd2FyZSBwYXJhbWV0ZXJzLgogICogQHN1YnN0cmVhbTogdGhlIGF1ZGlvIHN0cmVhbQogICogQHBhcmFtczogdGhlIGhhcmR3YXJlIHBhcmFtZXRlcnMgdG8gc2V0CkBAIC01NTEsMTUgKzQ4OCwxNiBAQAogc3RhdGljIGludCBjczQyNzBfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBjczQyNzBfcHJpdmF0ZSAqY3M0MjcwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0JaW50IGksIHJldCwgcmVnOworCWludCBpLCByZXQ7CiAKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gY3M0MjcwLT5jb250cm9sX2RhdGE7CiAKLQkvKiBUaGUgSTJDIGludGVyZmFjZSBpcyBzZXQgdXAsIHNvIHByZS1maWxsIG91ciByZWdpc3RlciBjYWNoZSAqLwotCi0JcmV0ID0gY3M0MjcwX2ZpbGxfY2FjaGUoY29kZWMpOworCS8qIFRlbGwgQVNvQyB3aGF0IGtpbmQgb2YgSS9PIHRvIHVzZSB0byByZWFkIHRoZSByZWdpc3RlcnMuICBBU29DIHdpbGwKKwkgKiB0aGVuIGRvIHRoZSBJMkMgdHJhbnNhY3Rpb25zIGl0c2VsZi4KKwkgKi8KKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgOCwgOCwgY3M0MjcwLT5jb250cm9sX3R5cGUpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBmaWxsIHJlZ2lzdGVyIGNhY2hlXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHNldCBjYWNoZSBJL08gKHJldD0laSlcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC01NjgsMTAgKzUwNiw3IEBACiAJICogdGhpcyBmZWF0dXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBBbiBhcHBsaWNhdGlvbiAoZS5nLiBhbHNhY3RsKSBjYW4KIAkgKiByZS1lbmFibGVkIGl0IGJ5IHVzaW5nIHRoZSBjb250cm9scy4KIAkgKi8KLQotCXJlZyA9IGNzNDI3MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQ1M0MjcwX01VVEUpOwotCXJlZyAmPSB+Q1M0MjcwX01VVEVfQVVUTzsKLQlyZXQgPSBjczQyNzBfaTJjX3dyaXRlKGNvZGVjLCBDUzQyNzBfTVVURSwgcmVnKTsKKwlyZXQgPSBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBDUzQyNzBfTVVURSwgQ1M0MjcwX01VVEVfQVVUTywgMCk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaTJjIHdyaXRlIGZhaWxlZFxuIik7CiAJCXJldHVybiByZXQ7CkBAIC01ODIsMTAgKzUxNyw4IEBACiAJICogcGxheWJhY2sgaGFzIHN0YXJ0ZWQuICBBbiBhcHBsaWNhdGlvbiAoZS5nLiBhbHNhY3RsKSBjYW4KIAkgKiByZS1lbmFibGVkIGl0IGJ5IHVzaW5nIHRoZSBjb250cm9scy4KIAkgKi8KLQotCXJlZyA9IGNzNDI3MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQ1M0MjcwX1RSQU5TKTsKLQlyZWcgJj0gfihDUzQyNzBfVFJBTlNfU09GVCB8IENTNDI3MF9UUkFOU19aRVJPKTsKLQlyZXQgPSBjczQyNzBfaTJjX3dyaXRlKGNvZGVjLCBDUzQyNzBfVFJBTlMsIHJlZyk7CisJcmV0ID0gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQ1M0MjcwX1RSQU5TLAorCQlDUzQyNzBfVFJBTlNfU09GVCB8IENTNDI3MF9UUkFOU19aRVJPLCAwKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpMmMgd3JpdGUgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKQEAgLTcwOCwxNSArNjQxLDE2IEBACiAgKiBBc3NpZ24gdGhpcyB2YXJpYWJsZSB0byB0aGUgY29kZWNfZGV2IGZpZWxkIG9mIHRoZSBtYWNoaW5lIGRyaXZlcidzCiAgKiBzbmRfc29jX2RldmljZSBzdHJ1Y3R1cmUuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgc29jX2NvZGVjX2RldmljZV9jczQyNzAgPSB7Ci0JLnByb2JlID0JY3M0MjcwX3Byb2JlLAotCS5yZW1vdmUgPQljczQyNzBfcmVtb3ZlLAotCS5zdXNwZW5kID0JY3M0MjcwX3NvY19zdXNwZW5kLAotCS5yZXN1bWUgPQljczQyNzBfc29jX3Jlc3VtZSwKLQkucmVhZCA9IGNzNDI3MF9yZWFkX3JlZ19jYWNoZSwKLQkud3JpdGUgPSBjczQyNzBfaTJjX3dyaXRlLAotCS5yZWdfY2FjaGVfc2l6ZSA9IENTNDI3MF9OVU1SRUdTLAotCS5yZWdfd29yZF9zaXplID0gc2l6ZW9mKHU4KSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgc29jX2NvZGVjX2RldmljZV9jczQyNzAgPSB7CisJLnByb2JlID0JCWNzNDI3MF9wcm9iZSwKKwkucmVtb3ZlID0JCWNzNDI3MF9yZW1vdmUsCisJLnN1c3BlbmQgPQkJY3M0MjcwX3NvY19zdXNwZW5kLAorCS5yZXN1bWUgPQkJY3M0MjcwX3NvY19yZXN1bWUsCisJLnZvbGF0aWxlX3JlZ2lzdGVyID0JY3M0MjcwX3JlZ19pc192b2xhdGlsZSwKKwkucmVhZGFibGVfcmVnaXN0ZXIgPQljczQyNzBfcmVnX2lzX3JlYWRhYmxlLAorCS5yZWdfY2FjaGVfc2l6ZSA9CUNTNDI3MF9MQVNUUkVHICsgMSwKKwkucmVnX3dvcmRfc2l6ZSA9CXNpemVvZih1OCksCisJLnJlZ19jYWNoZV9kZWZhdWx0ID0JY3M0MjcwX2RlZmF1bHRfcmVnX2NhY2hlLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2NzNDJsNTEuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0Mmw1MS5jCmluZGV4IGNiMDg2ZWEuLjhmYjcwNzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0Mmw1MS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0Mmw1MS5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CkBAIC00Nyw3ICs0Niw2IEBACiAJdW5zaWduZWQgaW50IG1jbGs7CiAJdW5zaWduZWQgaW50IGF1ZGlvX21vZGU7CS8qIFRoZSBtb2RlIChJMlMgb3IgbGVmdC1qdXN0aWZpZWQpICovCiAJZW51bSBtYXN0ZXJfc2xhdmVfbW9kZSBmdW5jOwotCXU4IHJlZ19jYWNoZVtDUzQyTDUxX05VTVJFR1NdOwogfTsKIAogI2RlZmluZSBDUzQyTDUxX0ZPUk1BVFMgKCBcCkBAIC01MTksNiArNTE3LDcgQEAKIHN0YXRpYyBpbnQgY3M0Mmw1MV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGNzNDJsNTFfcHJpdmF0ZSAqY3M0Mmw1MSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlpbnQgcmV0LCByZWc7CiAKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gY3M0Mmw1MS0+Y29udHJvbF9kYXRhOwpAQCAtNTUwLDkgKzU0OSw5IEBACiAKIAlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgY3M0Mmw1MV9zbmRfY29udHJvbHMsCiAJCUFSUkFZX1NJWkUoY3M0Mmw1MV9zbmRfY29udHJvbHMpKTsKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBjczQybDUxX2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIGNzNDJsNTFfZGFwbV93aWRnZXRzLAogCQlBUlJBWV9TSVpFKGNzNDJsNTFfZGFwbV93aWRnZXRzKSk7Ci0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGNzNDJsNTFfcm91dGVzLAorCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGNzNDJsNTFfcm91dGVzLAogCQlBUlJBWV9TSVpFKGNzNDJsNTFfcm91dGVzKSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3gyMDQ0Mi5jIGIvc291bmQvc29jL2NvZGVjcy9jeDIwNDQyLmMKaW5kZXggZThkMjdjOC4uMDNkMWU4NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9jeDIwNDQyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9jeDIwNDQyLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KIAogI2luY2x1ZGUgImN4MjA0NDIuaCIKIApAQCAtMjYsNyArMjYsNiBAQAogc3RydWN0IGN4MjA0NDJfcHJpdiB7CiAJZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sX3R5cGU7CiAJdm9pZCAqY29udHJvbF9kYXRhOwotCXU4IHJlZ19jYWNoZVsxXTsKIH07CiAKICNkZWZpbmUgQ1gyMDQ0Ml9QTQkJMHgwCkBAIC04OSwxMCArODgsMTEgQEAKIAogc3RhdGljIGludCBjeDIwNDQyX2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBjeDIwNDQyX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUoY3gyMDQ0Ml9kYXBtX3dpZGdldHMpKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgY3gyMDQ0Ml9hdWRpb19tYXAsCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBjeDIwNDQyX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUoY3gyMDQ0Ml9kYXBtX3dpZGdldHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBjeDIwNDQyX2F1ZGlvX21hcCwKIAkJCQlBUlJBWV9TSVpFKGN4MjA0NDJfYXVkaW9fbWFwKSk7CiAKIAlyZXR1cm4gMDsKQEAgLTI2Myw3ICsyNjMsNyBAQAogCS8qIFByZXZlbnQgdGhlIGNvZGVjIGRyaXZlciBmcm9tIGZ1cnRoZXIgYWNjZXNzaW5nIHRoZSBtb2RlbSAqLwogCWNvZGVjLT5od193cml0ZSA9IE5VTEw7CiAJY3gyMDQ0Mi0+Y29udHJvbF9kYXRhID0gTlVMTDsKLQljb2RlYy0+cG9wX3RpbWUgPSAwOworCWNvZGVjLT5jYXJkLT5wb3BfdGltZSA9IDA7CiB9CiAKIC8qIExpbmUgZGlzY2lwbGluZSAuaGFuZ3VwKCkgKi8KQEAgLTI5MSw3ICsyOTEsNyBAQAogCQkvKiBTZXQgdXAgY29kZWMgZHJpdmVyIGFjY2VzcyB0byBtb2RlbSBjb250cm9scyAqLwogCQljeDIwNDQyLT5jb250cm9sX2RhdGEgPSB0dHk7CiAJCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KXR0eS0+b3BzLT53cml0ZTsKLQkJY29kZWMtPnBvcF90aW1lID0gMTsKKwkJY29kZWMtPmNhcmQtPnBvcF90aW1lID0gMTsKIAl9CiB9CiAKQEAgLTM0OCw3ICszNDgsNyBAQAogCiAJY3gyMDQ0Mi0+Y29udHJvbF9kYXRhID0gTlVMTDsKIAljb2RlYy0+aHdfd3JpdGUgPSBOVUxMOwotCWNvZGVjLT5wb3BfdGltZSA9IDA7CisJY29kZWMtPmNhcmQtPnBvcF90aW1lID0gMDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9kYTcyMTAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvZGE3MjEwLmMKaW5kZXggNThiYjliOS4uOTJmZDlkNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9kYTcyMTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2RhNzIxMC5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9kbWljLmMgYi9zb3VuZC9zb2MvY29kZWNzL2RtaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2U5ZGFjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9kbWljLmMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIGRtaWMuYyAgLS0gIFNvQyBhdWRpbyBmb3IgR2VuZXJpYyBEaWdpdGFsIE1JQ3MKKyAqCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBkbWljX2RhaSA9IHsKKwkubmFtZSA9ICJkbWljLWhpZmkiLAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gOCwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUywKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRQorCQkJfCBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRQorCQkJfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfZG1pYyA9IHt9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkbWljX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZwZGV2LT5kZXYsCisJCQkmc29jX2RtaWMsICZkbWljX2RhaSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRtaWNfZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmcGRldi0+ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpkbWljLWNvZGVjIik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRtaWNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImRtaWMtY29kZWMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IGRtaWNfZGV2X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChkbWljX2Rldl9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZG1pY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZG1pY19kcml2ZXIpOworfQorbW9kdWxlX2luaXQoZG1pY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGRtaWNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkbWljX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChkbWljX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgRE1JQyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2p6NDc0MC5jIGIvc291bmQvc29jL2NvZGVjcy9qejQ3NDAuYwppbmRleCAxNjI1M2VjLi5mN2NkMzQ2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2p6NDc0MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvano0NzQwLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAKICNkZWZpbmUgSlo0NzQwX1JFR19DT0RFQ18xIDB4MApAQCAtMjY2LDcgKzI2NSw3IEBACiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCS8qIFRoZSBvbmx5IHdheSB0byBjbGVhciB0aGUgc3VzcGVuZCBmbGFnIGlzIHRvIHJlc2V0IHRoZSBjb2RlYyAqLwotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikKKwkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikKIAkJCWp6NDc0MF9jb2RlY193YWtldXAoY29kZWMpOwogCiAJCW1hc2sgPSBKWjQ3NDBfQ09ERUNfMV9WUkVGX0RJU0FCTEUgfApAQCAtMjg4LDIzICsyODcsMjUgQEAKIAkJYnJlYWs7CiAJfQogCi0JY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gbGV2ZWw7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBqejQ3NDBfY29kZWNfZGV2X3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CisKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBKWjQ3NDBfUkVHX0NPREVDXzEsCiAJCQlKWjQ3NDBfQ09ERUNfMV9TVzJfRU5BQkxFLCBKWjQ3NDBfQ09ERUNfMV9TVzJfRU5BQkxFKTsKIAogCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBqejQ3NDBfY29kZWNfY29udHJvbHMsCiAJCUFSUkFZX1NJWkUoano0NzQwX2NvZGVjX2NvbnRyb2xzKSk7CiAKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBqejQ3NDBfY29kZWNfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgano0NzQwX2NvZGVjX2RhcG1fd2lkZ2V0cywKIAkJQVJSQVlfU0laRShqejQ3NDBfY29kZWNfZGFwbV93aWRnZXRzKSk7CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgano0NzQwX2NvZGVjX2RhcG1fcm91dGVzLAorCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGp6NDc0MF9jb2RlY19kYXBtX3JvdXRlcywKIAkJQVJSQVlfU0laRShqejQ3NDBfY29kZWNfZGFwbV9yb3V0ZXMpKTsKIAogCXNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhjb2RlYyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL21heDk4MDg4LmMgYi9zb3VuZC9zb2MvY29kZWNzL21heDk4MDg4LmMKaW5kZXggNjQ0N2RiYi4uODk0OThmOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9tYXg5ODA4OC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvbWF4OTgwODguYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0xMjI5LDE1ICsxMjI4LDE3IEBACiAKIHN0YXRpYyBpbnQgbWF4OTgwODhfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotICAgICAgIHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIG1heDk4MDg4X2RhcG1fd2lkZ2V0cywKKyAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CisKKyAgICAgICBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIG1heDk4MDg4X2RhcG1fd2lkZ2V0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUobWF4OTgwODhfZGFwbV93aWRnZXRzKSk7CiAKLSAgICAgICBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworICAgICAgIHNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAogICAgICAgIHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBtYXg5ODA4OF9zbmRfY29udHJvbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJSQVlfU0laRShtYXg5ODA4OF9zbmRfY29udHJvbHMpKTsKIAotICAgICAgIHNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhjb2RlYyk7CisgICAgICAgc25kX3NvY19kYXBtX25ld193aWRnZXRzKGRhcG0pOwogICAgICAgIHJldHVybiAwOwogfQogCkBAIC0xNjIyLDcgKzE2MjMsNyBAQAogICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICBjYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotICAgICAgICAgICAgICAgaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpCisgICAgICAgICAgICAgICBpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKQogICAgICAgICAgICAgICAgICAgICAgICBtYXg5ODA4OF9zeW5jX2NhY2hlKGNvZGVjKTsKIAogICAgICAgICAgICAgICAgc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDg4X1JFR180Q19QV1JfRU5fSU4sCkBAIC0xNjM1LDcgKzE2MzYsNyBAQAogICAgICAgICAgICAgICAgY29kZWMtPmNhY2hlX3N5bmMgPSAxOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQotICAgICAgIGNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisgICAgICAgY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOwogICAgICAgIHJldHVybiAwOwogfQogCkBAIC0xOTU3LDcgKzE5NTgsNyBAQAogICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9CiAKLSAgICAgICAvKiBpbml0YWxpemUgcHJpdmF0ZSBkYXRhICovCisgICAgICAgLyogaW5pdGlhbGl6ZSBwcml2YXRlIGRhdGEgKi8KIAogICAgICAgIG1heDk4MDg4LT5zeXNjbGsgPSAodW5zaWduZWQpLTE7CiAgICAgICAgbWF4OTgwODgtPmVxX3RleHRjbnQgPSAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYwppbmRleCA2ZjM4ZDYxLi4yNzI3YmVmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYwpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIAogI2luY2x1ZGUgInNzbTI2MDIuaCIKQEAgLTIwNywxMCArMjA2LDExIEBACiAKIHN0YXRpYyBpbnQgc3NtMjYwMl9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgc3NtMjYwMl9kYXBtX3dpZGdldHMsCi0JCQkJICBBUlJBWV9TSVpFKHNzbTI2MDJfZGFwbV93aWRnZXRzKSk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX2Nvbm4sIEFSUkFZX1NJWkUoYXVkaW9fY29ubikpOworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgc3NtMjYwMl9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHNzbTI2MDJfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fY29ubiwgQVJSQVlfU0laRShhdWRpb19jb25uKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ5Myw3ICs0OTMsNyBAQAogCQlicmVhazsKIAogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zdGFjOTc2Ni5jIGIvc291bmQvc29jL2NvZGVjcy9zdGFjOTc2Ni5jCmluZGV4IDA2MWY5ZTUuLjc4YjJiNTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvc3RhYzk3NjYuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3N0YWM5NzY2LmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogCQlzdGFjOTc2Nl9hYzk3X3dyaXRlKGNvZGVjLCBBQzk3X1BPV0VSRE9XTiwgMHhmZmZmKTsKIAkJYnJlYWs7CiAJfQotCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKaW5kZXggZTg2NTJiMS4uNTRhMzBlZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIApAQCAtMzkxLDExICszOTAsMTIgQEAKIAogc3RhdGljIGludCB0bHYzMjBhaWMyM19hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgdGx2MzIwYWljMjNfZGFwbV93aWRnZXRzLAotCQkJCSAgQVJSQVlfU0laRSh0bHYzMjBhaWMyM19kYXBtX3dpZGdldHMpKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHRsdjMyMGFpYzIzX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUodGx2MzIwYWljMjNfZGFwbV93aWRnZXRzKSk7CiAJLyogc2V0IHVwIGF1ZGlvIHBhdGggaW50ZXJjb25uZWN0cyAqLwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU3NCw3ICs1NzQsNyBAQAogCQl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfUFdSLCAweGZmZmYpOwogCQlicmVhazsKIAl9Ci0JY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gbGV2ZWw7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjYuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjYuYwppbmRleCA2YjdkNzFlLi5lMmE3NjA4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzI2LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyNi5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCiAjaW5jbHVkZSAidGx2MzIwYWljMjYuaCIKQEAgLTMxLDcgKzMwLDYgQEAKIHN0cnVjdCBhaWMyNiB7CiAJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKLQl1MTYgcmVnX2NhY2hlW0FJQzI2X05VTV9SRUdTXTsJLyogc2hhZG93IHJlZ2lzdGVycyAqLwogCWludCBtYXN0ZXI7CiAJaW50IGRhdGZtOwogCWludCBtY2xrOwpAQCAtMzU1LDcgKzM1Myw2IEBACiAgKi8KIHN0YXRpYyBpbnQgYWljMjZfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXN0cnVjdCBhaWMyNiAqYWljMjYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlpbnQgcmV0LCBlcnIsIGksIHJlZzsKIAogCWRldl9pbmZvKGNvZGVjLT5kZXYsICJQcm9iaW5nIEFJQzI2IFNvQyBDT0RFQyBkcml2ZXJcbiIpOwpAQCAtMzczLDcgKzM3MCw3IEBACiAJYWljMjZfcmVnX3dyaXRlKGNvZGVjLCBBSUMyNl9SRUdfQVVESU9fQ1RSTDMsIHJlZyk7CiAKIAkvKiBGaWxsIHJlZ2lzdGVyIGNhY2hlICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWljMjYtPnJlZ19jYWNoZSk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemU7IGkrKykKIAkJYWljMjZfcmVnX3JlYWQoY29kZWMsIGkpOwogCiAJLyogUmVnaXN0ZXIgdGhlIHN5c2ZzIGZpbGVzIGZvciBkZWJ1Z2dpbmcgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYwppbmRleCA3N2I4ZjlhLi4zYmVkYWIyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPHNvdW5kL3RsdjMyMGFpYzN4Lmg+CkBAIC02MSw2ICs2MCw4IEBACiAJIkRSVkREIiwJLyogQURDIEFuYWxvZyBhbmQgT3V0cHV0IERyaXZlciBWb2x0YWdlICovCiB9OwogCitzdGF0aWMgTElTVF9IRUFEKHJlc2V0X2xpc3QpOworCiBzdHJ1Y3QgYWljM3hfcHJpdjsKIAogc3RydWN0IGFpYzN4X2Rpc2FibGVfbmIgewpAQCAtNzcsNiArNzgsNyBAQAogCXN0cnVjdCBhaWMzeF9zZXR1cF9kYXRhICpzZXR1cDsKIAl2b2lkICpjb250cm9sX2RhdGE7CiAJdW5zaWduZWQgaW50IHN5c2NsazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJaW50IG1hc3RlcjsKIAlpbnQgZ3Bpb19yZXNldDsKIAlpbnQgcG93ZXI7CkBAIC0xODMsNyArMTg1LDcgQEAKIAogCWlmIChzbmRfc29jX3Rlc3RfYml0cyh3aWRnZXQtPmNvZGVjLCByZWcsIHZhbF9tYXNrLCB2YWwpKSB7CiAJCS8qIGZpbmQgZGFwbSB3aWRnZXQgcGF0aCBhc3NvYyB3aXRoIGtjb250cm9sICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkocGF0aCwgJndpZGdldC0+Y29kZWMtPmRhcG1fcGF0aHMsIGxpc3QpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXRoLCAmd2lkZ2V0LT5kYXBtLT5jYXJkLT5wYXRocywgbGlzdCkgewogCQkJaWYgKHBhdGgtPmtjb250cm9sICE9IGtjb250cm9sKQogCQkJCWNvbnRpbnVlOwogCkBAIC0xOTksNyArMjAxLDcgQEAKIAkJfQogCiAJCWlmIChmb3VuZCkKLQkJCXNuZF9zb2NfZGFwbV9zeW5jKHdpZGdldC0+Y29kZWMpOworCQkJc25kX3NvY19kYXBtX3N5bmMod2lkZ2V0LT5kYXBtKTsKIAl9CiAKIAlyZXQgPSBzbmRfc29jX3VwZGF0ZV9iaXRzKHdpZGdldC0+Y29kZWMsIHJlZywgdmFsX21hc2ssIHZhbCk7CkBAIC03ODgsMTcgKzc5MCwxOSBAQAogc3RhdGljIGludCBhaWMzeF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFpYzN4X3ByaXYgKmFpYzN4ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgYWljM3hfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgYWljM3hfZGFwbV93aWRnZXRzLAogCQkJCSAgQVJSQVlfU0laRShhaWMzeF9kYXBtX3dpZGdldHMpKTsKIAogCS8qIHNldCB1cCBhdWRpbyBwYXRoIGludGVyY29ubmVjdHMgKi8KLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOwogCiAJaWYgKGFpYzN4LT5tb2RlbCA9PSBBSUMzWF9NT0RFTF8zMDA3KSB7Ci0JCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGFpYzMwMDdfZGFwbV93aWRnZXRzLAorCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIGFpYzMwMDdfZGFwbV93aWRnZXRzLAogCQkJQVJSQVlfU0laRShhaWMzMDA3X2RhcG1fd2lkZ2V0cykpOwotCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgaW50ZXJjb25fMzAwNywgQVJSQVlfU0laRShpbnRlcmNvbl8zMDA3KSk7CisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uXzMwMDcsCisJCQkJCUFSUkFZX1NJWkUoaW50ZXJjb25fMzAwNykpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTA3NSw3ICsxMDc5LDcgQEAKIAkJICogUHV0IGNvZGVjIHRvIHJlc2V0IGFuZCByZXF1aXJlIGNhY2hlIHN5bmMgYXMgYXQgbGVhc3Qgb25lCiAJCSAqIG9mIHRoZSBzdXBwbGllcyB3YXMgZGlzYWJsZWQKIAkJICovCi0JCWlmIChhaWMzeC0+Z3Bpb19yZXNldCA+PSAwKQorCQlpZiAoZ3Bpb19pc192YWxpZChhaWMzeC0+Z3Bpb19yZXNldCkpCiAJCQlncGlvX3NldF92YWx1ZShhaWMzeC0+Z3Bpb19yZXNldCwgMCk7CiAJCWFpYzN4LT5jb2RlYy0+Y2FjaGVfc3luYyA9IDE7CiAJfQpAQCAtMTEwMiw3ICsxMTA2LDcgQEAKIAkJaWYgKCFjb2RlYy0+Y2FjaGVfc3luYykKIAkJCWdvdG8gb3V0OwogCi0JCWlmIChhaWMzeC0+Z3Bpb19yZXNldCA+PSAwKSB7CisJCWlmIChncGlvX2lzX3ZhbGlkKGFpYzN4LT5ncGlvX3Jlc2V0KSkgewogCQkJdWRlbGF5KDEpOwogCQkJZ3Bpb19zZXRfdmFsdWUoYWljM3gtPmdwaW9fcmVzZXQsIDEpOwogCQl9CkBAIC0xMTM1LDcgKzExMzksNyBAQAogCWNhc2UgU05EX1NPQ19CSUFTX09OOgogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1NUQU5EQlkgJiYKKwkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1NUQU5EQlkgJiYKIAkJICAgIGFpYzN4LT5tYXN0ZXIpIHsKIAkJCS8qIGVuYWJsZSBwbGwgKi8KIAkJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUlDM1hfUExMX1BST0dBX1JFRyk7CkBAIC0xMTQ2LDcgKzExNTAsNyBAQAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCWlmICghYWljM3gtPnBvd2VyKQogCQkJYWljM3hfc2V0X3Bvd2VyKGNvZGVjLCAxKTsKLQkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19QUkVQQVJFICYmCisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19QUkVQQVJFICYmCiAJCSAgICBhaWMzeC0+bWFzdGVyKSB7CiAJCQkvKiBkaXNhYmxlIHBsbCAqLwogCQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBSUMzWF9QTExfUFJPR0FfUkVHKTsKQEAgLTExNTksNyArMTE2Myw3IEBACiAJCQlhaWMzeF9zZXRfcG93ZXIoY29kZWMsIDApOwogCQlicmVhazsKIAl9Ci0JY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gbGV2ZWw7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNDQsMTQgKzEzNDgsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGJvb2wgYWljM3hfaXNfc2hhcmVkX3Jlc2V0KHN0cnVjdCBhaWMzeF9wcml2ICphaWMzeCkKK3sKKwlzdHJ1Y3QgYWljM3hfcHJpdiAqYTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYSwgJnJlc2V0X2xpc3QsIGxpc3QpIHsKKwkJaWYgKGdwaW9faXNfdmFsaWQoYWljM3gtPmdwaW9fcmVzZXQpICYmCisJCSAgICBhaWMzeC0+Z3Bpb19yZXNldCA9PSBhLT5ncGlvX3Jlc2V0KQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgaW50IGFpYzN4X3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWljM3hfcHJpdiAqYWljM3ggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlpbnQgcmV0LCBpOwogCisJSU5JVF9MSVNUX0hFQUQoJmFpYzN4LT5saXN0KTsKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gYWljM3gtPmNvbnRyb2xfZGF0YTsKIAlhaWMzeC0+Y29kZWMgPSBjb2RlYzsKLQljb2RlYy0+aWRsZV9iaWFzX29mZiA9IDE7CisJY29kZWMtPmRhcG0uaWRsZV9iaWFzX29mZiA9IDE7CiAKIAlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgOCwgOCwgYWljM3gtPmNvbnRyb2xfdHlwZSk7CiAJaWYgKHJldCAhPSAwKSB7CkBAIC0xMzU5LDcgKzEzNzcsOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChhaWMzeC0+Z3Bpb19yZXNldCA+PSAwKSB7CisJaWYgKGdwaW9faXNfdmFsaWQoYWljM3gtPmdwaW9fcmVzZXQpICYmCisJICAgICFhaWMzeF9pc19zaGFyZWRfcmVzZXQoYWljM3gpKSB7CiAJCXJldCA9IGdwaW9fcmVxdWVzdChhaWMzeC0+Z3Bpb19yZXNldCwgInRsdjMyMGFpYzN4IHJlc2V0Iik7CiAJCWlmIChyZXQgIT0gMCkKIAkJCWdvdG8gZXJyX2dwaW87CkBAIC0xNDA1LDYgKzE0MjQsNyBAQAogCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgJmFpYzN4X2NsYXNzZF9hbXBfZ2Fpbl9jdHJsLCAxKTsKIAogCWFpYzN4X2FkZF93aWRnZXRzKGNvZGVjKTsKKwlsaXN0X2FkZCgmYWljM3gtPmxpc3QsICZyZXNldF9saXN0KTsKIAogCXJldHVybiAwOwogCkBAIC0xNDE0LDEwICsxNDM0LDEwIEBACiAJCQkJCSAgICAgICZhaWMzeC0+ZGlzYWJsZV9uYltpXS5uYik7CiAJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKGFpYzN4LT5zdXBwbGllcyksIGFpYzN4LT5zdXBwbGllcyk7CiBlcnJfZ2V0OgotCWlmIChhaWMzeC0+Z3Bpb19yZXNldCA+PSAwKQorCWlmIChncGlvX2lzX3ZhbGlkKGFpYzN4LT5ncGlvX3Jlc2V0KSAmJgorCSAgICAhYWljM3hfaXNfc2hhcmVkX3Jlc2V0KGFpYzN4KSkKIAkJZ3Bpb19mcmVlKGFpYzN4LT5ncGlvX3Jlc2V0KTsKIGVycl9ncGlvOgotCWtmcmVlKGFpYzN4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDI3LDcgKzE0NDcsOSBAQAogCWludCBpOwogCiAJYWljM3hfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwotCWlmIChhaWMzeC0+Z3Bpb19yZXNldCA+PSAwKSB7CisJbGlzdF9kZWwoJmFpYzN4LT5saXN0KTsKKwlpZiAoZ3Bpb19pc192YWxpZChhaWMzeC0+Z3Bpb19yZXNldCkgJiYKKwkgICAgIWFpYzN4X2lzX3NoYXJlZF9yZXNldChhaWMzeCkpIHsKIAkJZ3Bpb19zZXRfdmFsdWUoYWljM3gtPmdwaW9fcmVzZXQsIDApOwogCQlncGlvX2ZyZWUoYWljM3gtPmdwaW9fcmVzZXQpOwogCX0KQEAgLTE1MjMsMjEgKzE1NDUsNiBAQAogCS5yZW1vdmUgPSBhaWMzeF9pMmNfcmVtb3ZlLAogCS5pZF90YWJsZSA9IGFpYzN4X2kyY19pZCwKIH07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhaWMzeF9pMmNfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBpMmNfYWRkX2RyaXZlcigmYWljM3hfaTJjX2RyaXZlcik7Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgcmVnc2l0ZXJpbmcgaTJjIGRyaXZlciwgJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgcmV0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFpYzN4X2kyY19leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmFpYzN4X2kyY19kcml2ZXIpOwotfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0IGFpYzN4X21vZGluaXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYwppbmRleCBjNWFiOGM4Li43MWQ3YmU4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jCkBAIC0zNiwyMSArMzYsMjEgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKICNpbmNsdWRlIDxzb3VuZC90bHYzMjBkYWMzMy1wbGF0Lmg+CiAjaW5jbHVkZSAidGx2MzIwZGFjMzMuaCIKIAotI2RlZmluZSBEQUMzM19CVUZGRVJfU0laRV9CWVRFUwkJMjQ1NzYJLyogYnl0ZXMsIDEyMjg4IDE2IGJpdCB3b3JkcywKLQkJCQkJCSAqIDYxNDQgc3RlcmVvICovCi0jZGVmaW5lIERBQzMzX0JVRkZFUl9TSVpFX1NBTVBMRVMJNjE0NAotCi0jZGVmaW5lIE5TQU1QTEVfTUFYCQk1NzAwCi0KLSNkZWZpbmUgTU9ERTdfTFRIUgkJMTAKLSNkZWZpbmUgTU9ERTdfVVRIUgkJKERBQzMzX0JVRkZFUl9TSVpFX1NBTVBMRVMgLSAxMCkKKy8qCisgKiBUaGUgaW50ZXJuYWwgRklGTyBpcyAyNDU3NiBieXRlcyBsb25nCisgKiBJdCBjYW4gYmUgY29uZmlndXJlZCB0byBob2xkIDE2Yml0IG9yIDI0Yml0IHNhbXBsZXMKKyAqIEluIDE2Yml0IGNvbmZpZ3VyYXRpb24gdGhlIEZJRk8gY2FuIGhvbGQgNjE0NCBzdGVyZW8gc2FtcGxlcworICogSW4gMjRiaXQgY29uZmlndXJhdGlvbiB0aGUgRklGTyBjYW4gaG9sZCA0MDk2IHN0ZXJlbyBzYW1wbGVzCisgKi8KKyNkZWZpbmUgREFDMzNfRklGT19TSVpFXzE2QklUCTYxNDQKKyNkZWZpbmUgREFDMzNfRklGT19TSVpFXzI0QklUCTQwOTYKKyNkZWZpbmUgREFDMzNfTU9ERTdfTUFSR0lOCTEwCS8qIFNhZmV0eSBtYXJnaW4gZm9yIEZJRk8gaW4gTW9kZTcgKi8KIAogI2RlZmluZSBCVVJTVF9CQVNFRlJFUV9IWgk0OTE1MjAwMAogCkBAIC0xMDAsMTYgKzEwMCwxMSBAQAogCXVuc2lnbmVkIGludCByZWZjbGs7CiAKIAl1bnNpZ25lZCBpbnQgYWxhcm1fdGhyZXNob2xkOwkvKiBzZXQgdG8gYmUgaGFsZiBvZiBMQVRFTkNZX1RJTUVfTVMgKi8KLQl1bnNpZ25lZCBpbnQgbnNhbXBsZV9taW47CS8qIG5zYW1wbGUgc2hvdWxkIG5vdCBiZSBsb3dlciB0aGFuCi0JCQkJCSAqIHRoaXMgKi8KLQl1bnNpZ25lZCBpbnQgbnNhbXBsZV9tYXg7CS8qIG5zYW1wbGUgc2hvdWxkIG5vdCBiZSBoaWdoZXIgdGhhbgotCQkJCQkgKiB0aGlzICovCiAJZW51bSBkYWMzM19maWZvX21vZGVzIGZpZm9fbW9kZTsvKiBGSUZPIG1vZGUgc2VsZWN0aW9uICovCisJdW5zaWduZWQgaW50IGZpZm9fc2l6ZTsJCS8qIFNpemUgb2YgdGhlIEZJRk8gaW4gc2FtcGxlcyAqLwogCXVuc2lnbmVkIGludCBuc2FtcGxlOwkJLyogYnVyc3QgcmVhZCBhbW91bnQgZnJvbSBob3N0ICovCiAJaW50IG1vZGUxX2xhdGVuY3k7CQkvKiBsYXRlbmN5IGNhdXNlZCBieSB0aGUgaTJjIHdyaXRlcyBpbgogCQkJCQkgKiB1cyAqLwotCWludCBhdXRvX2ZpZm9fY29uZmlnOyAJCS8qIENvbmZpZ3VyZSB0aGUgRklGTyBiYXNlZCBvbiB0aGUKLQkJCQkJICogcGVyaW9kIHNpemUgKi8KIAl1OCBidXJzdF9iY2xrZGl2OwkJLyogQkNMSyBkaXZpZGVyIHZhbHVlIGluIGJ1cnN0IG1vZGUgKi8KIAl1bnNpZ25lZCBpbnQgYnVyc3RfcmF0ZTsJLyogSW50ZXJmYWNlIHNwZWVkIGluIEJ1cnN0IG1vZGVzICovCiAKQEAgLTMwMyw3ICsyOTgsNiBAQAogCWlmICh1bmxpa2VseSghZGFjMzMtPmNoaXBfcG93ZXIpKQogCQlyZXR1cm47CiAKLQkvKiA0NC00NjogREFDIENvbnRyb2wgUmVnaXN0ZXJzICovCiAJLyogQSA6IERBQyBzYW1wbGUgcmF0ZSBGc3JlZi8xLjUgKi8KIAlkYWMzM193cml0ZShjb2RlYywgREFDMzNfREFDX0NUUkxfQSwgREFDMzNfREFDUkFURSgwKSk7CiAJLyogQiA6IERBQyBzcmM9bm9ybWFsLCBub3QgbXV0ZWQgKi8KQEAgLTMxNiw4ICszMTAsNiBAQAogCSBjbG9jayBzb3VyY2UgPSBpbnRlcm5hbCBvc2MgKD8pICovCiAJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0FOQV9WT0xfU09GVF9TVEVQX0NUUkwsIERBQzMzX1ZPTENMS0VOKTsKIAotCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19QV1JfQ1RSTCwgREFDMzNfUEROQUxMQik7Ci0KIAkvKiBSZXN0b3JlIG9ubHkgc2VsZWN0ZWQgcmVnaXN0ZXJzIChnYWlucyBtb3N0bHkpICovCiAJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0xEQUNfRElHX1ZPTF9DVFJMLAogCQkgICAgZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIERBQzMzX0xEQUNfRElHX1ZPTF9DVFJMKSk7CkBAIC0zMjgsNiArMzIwLDEwIEBACiAJCSAgICBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfTElORUxfVE9fTExPX1ZPTCkpOwogCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19MSU5FUl9UT19STE9fVk9MLAogCQkgICAgZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIERBQzMzX0xJTkVSX1RPX1JMT19WT0wpKTsKKworCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19PVVRfQU1QX0NUUkwsCisJCSAgICBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfT1VUX0FNUF9DVFJMKSk7CisKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZGFjMzNfcmVhZF9pZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCkBAIC0zNTcsNiArMzUzLDIxIEBACiAJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1BXUl9DVFJMLCByZWcpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZGFjMzNfZGlzYWJsZV9kaWdpdGFsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwl1OCByZWc7CisKKwkvKiBTdG9wIHRoZSBEQUkgY2xvY2sgKi8KKwlyZWcgPSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9CKTsKKwlyZWcgJj0gfkRBQzMzX0JDTEtPTjsKKwlkYWMzM193cml0ZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9CLCByZWcpOworCisJLyogUG93ZXIgZG93biB0aGUgT3NjaWxsYXRvciwgYW5kIERBQ3MgKi8KKwlyZWcgPSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfUFdSX0NUUkwpOworCXJlZyAmPSB+KERBQzMzX09TQ1BETkIgfCBEQUMzM19EQUNSUEROQiB8IERBQzMzX0RBQ0xQRE5CKTsKKwlkYWMzM193cml0ZShjb2RlYywgREFDMzNfUFdSX0NUUkwsIHJlZyk7Cit9CisKIHN0YXRpYyBpbnQgZGFjMzNfaGFyZF9wb3dlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBwb3dlcikKIHsKIAlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKQEAgLTQwNSw3ICs0MTYsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcGxheWJhY2tfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCitzdGF0aWMgaW50IGRhYzMzX3BsYXliYWNrX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewogCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEody0+Y29kZWMpOwpAQCAtNDE3LDc3ICs0MjgsMTMgQEAKIAkJCWRhYzMzX3ByZXBhcmVfY2hpcChkYWMzMy0+c3Vic3RyZWFtKTsKIAkJfQogCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJZGFjMzNfZGlzYWJsZV9kaWdpdGFsKHctPmNvZGVjKTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRhYzMzX2dldF9uc2FtcGxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQotCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gZGFjMzMtPm5zYW1wbGU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkYWMzM19zZXRfbnNhbXBsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoZGFjMzMtPm5zYW1wbGUgPT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCi0JCXJldHVybiAwOwotCi0JaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIDwgZGFjMzMtPm5zYW1wbGVfbWluIHx8Ci0JICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID4gZGFjMzMtPm5zYW1wbGVfbWF4KSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JfSBlbHNlIHsKLQkJZGFjMzMtPm5zYW1wbGUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKLQkJLyogUmUgY2FsY3VsYXRlIHRoZSBidXJzdCB0aW1lICovCi0JCWRhYzMzLT5tb2RlMV91c19idXJzdCA9IFNBTVBMRVNfVE9fVVMoZGFjMzMtPmJ1cnN0X3JhdGUsCi0JCQkJCQkgICAgICBkYWMzMy0+bnNhbXBsZSk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBkYWMzM19nZXRfdXRocihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0KLQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGRhYzMzLT51dGhyOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGFjMzNfc2V0X3V0aHIoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCWludCByZXQgPSAwOwotCi0JaWYgKGRhYzMzLT5zdWJzdHJlYW0pCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAoZGFjMzMtPnV0aHIgPT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCi0JCXJldHVybiAwOwotCi0JaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIDwgKE1PREU3X0xUSFIgKyAxMCkgfHwKLQkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPiBNT0RFN19VVEhSKQotCQlyZXQgPSAtRUlOVkFMOwotCWVsc2UKLQkJZGFjMzMtPnV0aHIgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgZGFjMzNfZ2V0X2ZpZm9fbW9kZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKQEAgLTU3MiwxMyArNTE5LDYgQEAKIAkJIGRhYzMzX2dldF9maWZvX21vZGUsIGRhYzMzX3NldF9maWZvX21vZGUpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzMzX2ZpZm9fc25kX2NvbnRyb2xzW10gPSB7Ci0JU09DX1NJTkdMRV9FWFQoIm5TYW1wbGUiLCAwLCAwLCA1OTAwLCAwLAotCQlkYWMzM19nZXRfbnNhbXBsZSwgZGFjMzNfc2V0X25zYW1wbGUpLAotCVNPQ19TSU5HTEVfRVhUKCJVVEhSIiwgMCwgMCwgTU9ERTdfVVRIUiwgMCwKLQkJIGRhYzMzX2dldF91dGhyLCBkYWMzM19zZXRfdXRociksCi19OwotCiAvKiBBbmFsb2cgYnlwYXNzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGFjMzNfZGFwbV9hYnlwYXNzbF9jb250cm9sID0KIAlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIERBQzMzX0xJTkVMX1RPX0xMT19WT0wsIDcsIDEsIDEpOwpAQCAtNTg2LDYgKzUyNiwyNSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzMzX2RhcG1fYWJ5cGFzc3JfY29udHJvbCA9CiAJU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBEQUMzM19MSU5FUl9UT19STE9fVk9MLCA3LCAxLCAxKTsKIAorLyogTE9QIEwvUiBpbnZlcnQgc2VsZWN0aW9uICovCitzdGF0aWMgY29uc3QgY2hhciAqZGFjMzNfbHJfbG9tX3RleHRzW10gPSB7IkRBQyIsICJMT1AifTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYWMzM19sZWZ0X2xvbV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoREFDMzNfT1VUX0FNUF9DVFJMLCAzLAorCQkJQVJSQVlfU0laRShkYWMzM19scl9sb21fdGV4dHMpLAorCQkJZGFjMzNfbHJfbG9tX3RleHRzKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzMzX2RhcG1fbGVmdF9sb21fY29udHJvbCA9CitTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIGRhYzMzX2xlZnRfbG9tX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhYzMzX3JpZ2h0X2xvbV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoREFDMzNfT1VUX0FNUF9DVFJMLCAyLAorCQkJQVJSQVlfU0laRShkYWMzM19scl9sb21fdGV4dHMpLAorCQkJZGFjMzNfbHJfbG9tX3RleHRzKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzMzX2RhcG1fcmlnaHRfbG9tX2NvbnRyb2wgPQorU09DX0RBUE1fRU5VTSgiUm91dGUiLCBkYWMzM19yaWdodF9sb21fZW51bSk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBkYWMzM19kYXBtX3dpZGdldHNbXSA9IHsKIAlTTkRfU09DX0RBUE1fT1VUUFVUKCJMRUZUX0xPIiksCiAJU05EX1NPQ19EQVBNX09VVFBVVCgiUklHSFRfTE8iKSwKQEAgLTU5Myw4ICs1NTIsOCBAQAogCVNORF9TT0NfREFQTV9JTlBVVCgiTElORUwiKSwKIAlTTkRfU09DX0RBUE1fSU5QVVQoIkxJTkVSIiksCiAKLQlTTkRfU09DX0RBUE1fREFDKCJEQUNMIiwgIkxlZnQgUGxheWJhY2siLCBEQUMzM19MREFDX1BXUl9DVFJMLCAyLCAwKSwKLQlTTkRfU09DX0RBUE1fREFDKCJEQUNSIiwgIlJpZ2h0IFBsYXliYWNrIiwgREFDMzNfUkRBQ19QV1JfQ1RSTCwgMiwgMCksCisJU05EX1NPQ19EQVBNX0RBQygiREFDTCIsICJMZWZ0IFBsYXliYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fREFDKCJEQUNSIiwgIlJpZ2h0IFBsYXliYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwKSwKIAogCS8qIEFuYWxvZyBieXBhc3MgKi8KIAlTTkRfU09DX0RBUE1fU1dJVENIKCJBbmFsb2cgTGVmdCBCeXBhc3MiLCBTTkRfU09DX05PUE0sIDAsIDAsCkBAIC02MDIsMTIgKzU2MSwzMCBAQAogCVNORF9TT0NfREFQTV9TV0lUQ0goIkFuYWxvZyBSaWdodCBCeXBhc3MiLCBTTkRfU09DX05PUE0sIDAsIDAsCiAJCQkJJmRhYzMzX2RhcG1fYWJ5cGFzc3JfY29udHJvbCksCiAKLQlTTkRfU09DX0RBUE1fUkVHKHNuZF9zb2NfZGFwbV9taXhlciwgIk91dHB1dCBMZWZ0IEFtcCBQb3dlciIsCisJU05EX1NPQ19EQVBNX01VWCgiTGVmdCBMT00gSW52ZXJ0ZWQgRnJvbSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJmRhYzMzX2RhcG1fbGVmdF9sb21fY29udHJvbCksCisJU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgTE9NIEludmVydGVkIEZyb20iLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZkYWMzM19kYXBtX3JpZ2h0X2xvbV9jb250cm9sKSwKKwkvKgorCSAqIEZvciBEQVBNIHBhdGgsIHdoZW4gb25seSB0aGUgYW5sb2cgYnlwYXNzIHBhdGggaXMgZW5hYmxlZCwgYW5kIHRoZQorCSAqIExPUCBpbnZlcnRlZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIERBQyBzaWRlLgorCSAqIFRoaXMgaXMgbmVlZGVkLCBzbyB3ZSBjYW4gYXR0YWNoIHRoZSBEQUMgcG93ZXIgc3VwcGx5IGluIHRoaXMgY2FzZS4KKwkgKi8KKwlTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IEJ5cGFzcyBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlJpZ2h0IEJ5cGFzcyBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCisJU05EX1NPQ19EQVBNX1JFRyhzbmRfc29jX2RhcG1fbWl4ZXIsICJPdXRwdXQgTGVmdCBBbXBsaWZpZXIiLAogCQkJIERBQzMzX09VVF9BTVBfUFdSX0NUUkwsIDYsIDMsIDMsIDApLAotCVNORF9TT0NfREFQTV9SRUcoc25kX3NvY19kYXBtX21peGVyLCAiT3V0cHV0IFJpZ2h0IEFtcCBQb3dlciIsCisJU05EX1NPQ19EQVBNX1JFRyhzbmRfc29jX2RhcG1fbWl4ZXIsICJPdXRwdXQgUmlnaHQgQW1wbGlmaWVyIiwKIAkJCSBEQUMzM19PVVRfQU1QX1BXUl9DVFJMLCA0LCAzLCAzLCAwKSwKIAotCVNORF9TT0NfREFQTV9QUkUoIlByZXBhcmUgUGxheWJhY2siLCBwbGF5YmFja19ldmVudCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiTGVmdCBEQUMgUG93ZXIiLAorCQkJICAgIERBQzMzX0xEQUNfUFdSX0NUUkwsIDIsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIlJpZ2h0IERBQyBQb3dlciIsCisJCQkgICAgREFDMzNfUkRBQ19QV1JfQ1RSTCwgMiwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fUFJFKCJQcmUgUGxheWJhY2siLCBkYWMzM19wbGF5YmFja19ldmVudCksCisJU05EX1NPQ19EQVBNX1BPU1QoIlBvc3QgUGxheWJhY2siLCBkYWMzM19wbGF5YmFja19ldmVudCksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKQEAgLTYxNSwyNCArNTkyLDM5IEBACiAJeyJBbmFsb2cgTGVmdCBCeXBhc3MiLCAiU3dpdGNoIiwgIkxJTkVMIn0sCiAJeyJBbmFsb2cgUmlnaHQgQnlwYXNzIiwgIlN3aXRjaCIsICJMSU5FUiJ9LAogCi0JeyJPdXRwdXQgTGVmdCBBbXAgUG93ZXIiLCBOVUxMLCAiREFDTCJ9LAotCXsiT3V0cHV0IFJpZ2h0IEFtcCBQb3dlciIsIE5VTEwsICJEQUNSIn0sCisJeyJPdXRwdXQgTGVmdCBBbXBsaWZpZXIiLCBOVUxMLCAiREFDTCJ9LAorCXsiT3V0cHV0IFJpZ2h0IEFtcGxpZmllciIsIE5VTEwsICJEQUNSIn0sCiAKLQl7Ik91dHB1dCBMZWZ0IEFtcCBQb3dlciIsIE5VTEwsICJBbmFsb2cgTGVmdCBCeXBhc3MifSwKLQl7Ik91dHB1dCBSaWdodCBBbXAgUG93ZXIiLCBOVUxMLCAiQW5hbG9nIFJpZ2h0IEJ5cGFzcyJ9LAorCXsiTGVmdCBCeXBhc3MgUEdBIiwgTlVMTCwgIkFuYWxvZyBMZWZ0IEJ5cGFzcyJ9LAorCXsiUmlnaHQgQnlwYXNzIFBHQSIsIE5VTEwsICJBbmFsb2cgUmlnaHQgQnlwYXNzIn0sCisKKwl7IkxlZnQgTE9NIEludmVydGVkIEZyb20iLCAiREFDIiwgIkxlZnQgQnlwYXNzIFBHQSJ9LAorCXsiUmlnaHQgTE9NIEludmVydGVkIEZyb20iLCAiREFDIiwgIlJpZ2h0IEJ5cGFzcyBQR0EifSwKKwl7IkxlZnQgTE9NIEludmVydGVkIEZyb20iLCAiTE9QIiwgIkFuYWxvZyBMZWZ0IEJ5cGFzcyJ9LAorCXsiUmlnaHQgTE9NIEludmVydGVkIEZyb20iLCAiTE9QIiwgIkFuYWxvZyBSaWdodCBCeXBhc3MifSwKKworCXsiT3V0cHV0IExlZnQgQW1wbGlmaWVyIiwgTlVMTCwgIkxlZnQgTE9NIEludmVydGVkIEZyb20ifSwKKwl7Ik91dHB1dCBSaWdodCBBbXBsaWZpZXIiLCBOVUxMLCAiUmlnaHQgTE9NIEludmVydGVkIEZyb20ifSwKKworCXsiREFDTCIsIE5VTEwsICJMZWZ0IERBQyBQb3dlciJ9LAorCXsiREFDUiIsIE5VTEwsICJSaWdodCBEQUMgUG93ZXIifSwKKworCXsiTGVmdCBCeXBhc3MgUEdBIiwgTlVMTCwgIkxlZnQgREFDIFBvd2VyIn0sCisJeyJSaWdodCBCeXBhc3MgUEdBIiwgTlVMTCwgIlJpZ2h0IERBQyBQb3dlciJ9LAogCiAJLyogb3V0cHV0ICovCi0JeyJMRUZUX0xPIiwgTlVMTCwgIk91dHB1dCBMZWZ0IEFtcCBQb3dlciJ9LAotCXsiUklHSFRfTE8iLCBOVUxMLCAiT3V0cHV0IFJpZ2h0IEFtcCBQb3dlciJ9LAorCXsiTEVGVF9MTyIsIE5VTEwsICJPdXRwdXQgTGVmdCBBbXBsaWZpZXIifSwKKwl7IlJJR0hUX0xPIiwgTlVMTCwgIk91dHB1dCBSaWdodCBBbXBsaWZpZXIifSwKIH07CiAKIHN0YXRpYyBpbnQgZGFjMzNfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGRhYzMzX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUoZGFjMzNfZGFwbV93aWRnZXRzKSk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBkYWMzM19kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKGRhYzMzX2RhcG1fd2lkZ2V0cykpOwogCS8qIHNldCB1cCBhdWRpbyBwYXRoIGludGVyY29ubmVjdHMgKi8KLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjQwLDE2ICs2MzIsMTggQEAKIHN0YXRpYyBpbnQgZGFjMzNfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogeworCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCWludCByZXQ7CiAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046Ci0JCWRhYzMzX3NvZnRfcG93ZXIoY29kZWMsIDEpOworCQlpZiAoIWRhYzMzLT5zdWJzdHJlYW0pCisJCQlkYWMzM19zb2Z0X3Bvd2VyKGNvZGVjLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKLQkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgewogCQkJLyogQ29taW5nIGZyb20gT0ZGLCBzd2l0Y2ggb24gdGhlIGNvZGVjICovCiAJCQlyZXQgPSBkYWMzM19oYXJkX3Bvd2VyKGNvZGVjLCAxKTsKIAkJCWlmIChyZXQgIT0gMCkKQEAgLTY2MCwxNCArNjU0LDE0IEBACiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKIAkJLyogRG8gbm90IHBvd2VyIG9mZiwgd2hlbiB0aGUgY29kZWMgaXMgYWxyZWFkeSBvZmYgKi8KLQkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpCisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpCiAJCQlyZXR1cm4gMDsKIAkJcmV0ID0gZGFjMzNfaGFyZF9wb3dlcihjb2RlYywgMCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXJldHVybiByZXQ7CiAJCWJyZWFrOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAogCXJldHVybiAwOwogfQpAQCAtNzA1LDcgKzY5OSw3IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmZGFjMzMtPmxvY2spOwogCiAJCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX1BSRUZJTExfTVNCLAotCQkJCURBQzMzX1RIUlJFRyhNT0RFN19MVEhSKSk7CisJCQkJREFDMzNfVEhSUkVHKERBQzMzX01PREU3X01BUkdJTikpOwogCiAJCS8qIEVuYWJsZSBVcHBlciBUaHJlc2hvbGQgSVJRICovCiAJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19GSUZPX0lSUV9NQVNLLCBEQUMzM19NVVQpOwpAQCAtODE1LDYgKzgwOSw4IEBACiAJLyogU3RyZWFtIHN0YXJ0ZWQsIHNhdmUgdGhlIHN1YnN0cmVhbSBwb2ludGVyICovCiAJZGFjMzMtPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKIAorCXNuZF9wY21faHdfY29uc3RyYWludF9tc2JpdHMoc3Vic3RyZWFtLT5ydW50aW1lLCAwLCAzMiwgMjQpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgyNiwxOCArODIyLDE3IEBACiAJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlkYWMzMy0+c3Vic3RyZWFtID0gTlVMTDsKLQotCS8qIFJlc2V0IHRoZSBuU2FtcGxlIHJlc3RyaWN0aW9ucyAqLwotCWRhYzMzLT5uc2FtcGxlX21pbiA9IDA7Ci0JZGFjMzMtPm5zYW1wbGVfbWF4ID0gTlNBTVBMRV9NQVg7CiB9CiAKKyNkZWZpbmUgQ0FMQ19CVVJTVF9SQVRFKGJjbGtkaXYsIGJjbGtfcGVyX3NhbXBsZSkgXAorCShCVVJTVF9CQVNFRlJFUV9IWiAvIGJjbGtkaXYgLyBiY2xrX3Blcl9zYW1wbGUpCiBzdGF0aWMgaW50IGRhYzMzX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAogCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAkvKiBDaGVjayBwYXJhbWV0ZXJzIGZvciB2YWxpZGl0eSAqLwogCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgewpAQCAtODUyLDYgKzg0NywxMiBAQAogCiAJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlkYWMzMy0+Zmlmb19zaXplID0gREFDMzNfRklGT19TSVpFXzE2QklUOworCQlkYWMzMy0+YnVyc3RfcmF0ZSA9IENBTENfQlVSU1RfUkFURShkYWMzMy0+YnVyc3RfYmNsa2RpdiwgMzIpOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQlkYWMzMy0+Zmlmb19zaXplID0gREFDMzNfRklGT19TSVpFXzI0QklUOworCQlkYWMzMy0+YnVyc3RfcmF0ZSA9IENBTENfQlVSU1RfUkFURShkYWMzMy0+YnVyc3RfYmNsa2RpdiwgNjQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJ1bnN1cHBvcnRlZCBmb3JtYXQgJWRcbiIsCkBAIC05MDYsNiArOTA3LDkgQEAKIAkJYWljdHJsX2EgfD0gKERBQzMzX05DWUNMXzE2IHwgREFDMzNfV0xFTl8xNik7CiAJCWZpZm9jdHJsX2EgfD0gREFDMzNfV0lEVEg7CiAJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CisJCWFpY3RybF9hIHw9IChEQUMzM19OQ1lDTF8zMiB8IERBQzMzX1dMRU5fMjQpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJ1bnN1cHBvcnRlZCBmb3JtYXQgJWRcbiIsCiAJCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmZvcm1hdCk7CkBAIC0xMDQwLDcgKzEwNDQsMTAgQEAKIAkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQywKIAkJCQkJCQlkYWMzMy0+YnVyc3RfYmNsa2Rpdik7CiAJZWxzZQotCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9DLCAzMik7CisJCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPmZvcm1hdCA9PSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRSkKKwkJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0MsIDMyKTsKKwkJZWxzZQorCQkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQywgMTYpOwogCiAJc3dpdGNoIChkYWMzMy0+Zmlmb19tb2RlKSB7CiAJY2FzZSBEQUMzM19GSUZPX01PREUxOgpAQCAtMTA1Myw3ICsxMDYwLDggQEAKIAkJICogYXQgdGhlIGJvdHRvbSwgYW5kIGFsc28gYXQgdGhlIHRvcCBvZiB0aGUgRklGTwogCQkgKi8KIAkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfVVRIUl9NU0IsIERBQzMzX1RIUlJFRyhkYWMzMy0+dXRocikpOwotCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19MVEhSX01TQiwgREFDMzNfVEhSUkVHKE1PREU3X0xUSFIpKTsKKwkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfTFRIUl9NU0IsCisJCQkgICAgICBEQUMzM19USFJSRUcoREFDMzNfTU9ERTdfTUFSR0lOKSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTA4Miw0MiArMTA5MCwyMSBAQAogCQkvKiBOdW1iZXIgb2Ygc2FtcGxlcyB1bmRlciBpMmMgbGF0ZW5jeSAqLwogCQlkYWMzMy0+YWxhcm1fdGhyZXNob2xkID0gVVNfVE9fU0FNUExFUyhyYXRlLAogCQkJCQkJZGFjMzMtPm1vZGUxX2xhdGVuY3kpOwotCQluc2FtcGxlX2xpbWl0ID0gREFDMzNfQlVGRkVSX1NJWkVfU0FNUExFUyAtCi0JCQkJZGFjMzMtPmFsYXJtX3RocmVzaG9sZDsKKwkJbnNhbXBsZV9saW1pdCA9IGRhYzMzLT5maWZvX3NpemUgLSBkYWMzMy0+YWxhcm1fdGhyZXNob2xkOwogCi0JCWlmIChkYWMzMy0+YXV0b19maWZvX2NvbmZpZykgewotCQkJaWYgKHBlcmlvZF9zaXplIDw9IGRhYzMzLT5hbGFybV90aHJlc2hvbGQpCi0JCQkJLyoKLQkJCQkgKiBDb25maWd1cmUgblNhbWFwbGUgdG8gbnVtYmVyIG9mIHBlcmlvZHMsCi0JCQkJICogd2hpY2ggY292ZXJzIHRoZSBsYXRlbmN5IHJlcXVpcm9ubWVudC4KLQkJCQkgKi8KLQkJCQlkYWMzMy0+bnNhbXBsZSA9IHBlcmlvZF9zaXplICoKLQkJCQkgICAgICAgKChkYWMzMy0+YWxhcm1fdGhyZXNob2xkIC8gcGVyaW9kX3NpemUpICsKLQkJCQkgICAgICAgKGRhYzMzLT5hbGFybV90aHJlc2hvbGQgJSBwZXJpb2Rfc2l6ZSA/Ci0JCQkJICAgICAgIDEgOiAwKSk7Ci0JCQllbHNlIGlmIChwZXJpb2Rfc2l6ZSA+IG5zYW1wbGVfbGltaXQpCi0JCQkJZGFjMzMtPm5zYW1wbGUgPSBuc2FtcGxlX2xpbWl0OwotCQkJZWxzZQotCQkJCWRhYzMzLT5uc2FtcGxlID0gcGVyaW9kX3NpemU7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBuU2FtcGxlIHRpbWUgc2hhbGwgbm90IGJlIHNob3J0ZXIgdGhhbiBpMmMgbGF0ZW5jeSAqLwotCQkJZGFjMzMtPm5zYW1wbGVfbWluID0gZGFjMzMtPmFsYXJtX3RocmVzaG9sZDsKKwkJaWYgKHBlcmlvZF9zaXplIDw9IGRhYzMzLT5hbGFybV90aHJlc2hvbGQpCiAJCQkvKgotCQkJICogblNhbXBsZSBzaG91bGQgbm90IGJlIGJpZ2dlciB0aGFuIGFsc2EgYnVmZmVyIG1pbnVzCi0JCQkgKiBzaXplIG9mIG9uZSBwZXJpb2QgdG8gYXZvaWQgb3ZlcnJ1bnMKKwkJCSAqIENvbmZpZ3VyZSBuU2FtYXBsZSB0byBudW1iZXIgb2YgcGVyaW9kcywKKwkJCSAqIHdoaWNoIGNvdmVycyB0aGUgbGF0ZW5jeSByZXF1aXJvbm1lbnQuCiAJCQkgKi8KLQkJCWRhYzMzLT5uc2FtcGxlX21heCA9IHN1YnN0cmVhbS0+cnVudGltZS0+YnVmZmVyX3NpemUgLQotCQkJCQkJcGVyaW9kX3NpemU7Ci0KLQkJCWlmIChkYWMzMy0+bnNhbXBsZV9tYXggPiBuc2FtcGxlX2xpbWl0KQotCQkJCWRhYzMzLT5uc2FtcGxlX21heCA9IG5zYW1wbGVfbGltaXQ7Ci0KLQkJCS8qIENvcnJlY3QgdGhlIG5TYW1wbGUgaWYgaXQgaXMgb3V0c2lkZSBvZiB0aGUgcmFuZ2VzICovCi0JCQlpZiAoZGFjMzMtPm5zYW1wbGUgPCBkYWMzMy0+bnNhbXBsZV9taW4pCi0JCQkJZGFjMzMtPm5zYW1wbGUgPSBkYWMzMy0+bnNhbXBsZV9taW47Ci0JCQlpZiAoZGFjMzMtPm5zYW1wbGUgPiBkYWMzMy0+bnNhbXBsZV9tYXgpCi0JCQkJZGFjMzMtPm5zYW1wbGUgPSBkYWMzMy0+bnNhbXBsZV9tYXg7Ci0JCX0KKwkJCWRhYzMzLT5uc2FtcGxlID0gcGVyaW9kX3NpemUgKgorCQkJCSgoZGFjMzMtPmFsYXJtX3RocmVzaG9sZCAvIHBlcmlvZF9zaXplKSArCisJCQkJKGRhYzMzLT5hbGFybV90aHJlc2hvbGQgJSBwZXJpb2Rfc2l6ZSA/CisJCQkJMSA6IDApKTsKKwkJZWxzZSBpZiAocGVyaW9kX3NpemUgPiBuc2FtcGxlX2xpbWl0KQorCQkJZGFjMzMtPm5zYW1wbGUgPSBuc2FtcGxlX2xpbWl0OworCQllbHNlCisJCQlkYWMzMy0+bnNhbXBsZSA9IHBlcmlvZF9zaXplOwogCiAJCWRhYzMzLT5tb2RlMV91c19idXJzdCA9IFNBTVBMRVNfVE9fVVMoZGFjMzMtPmJ1cnN0X3JhdGUsCiAJCQkJCQkgICAgICBkYWMzMy0+bnNhbXBsZSk7CkBAIC0xMTI1LDE5ICsxMTEyLDE2IEBACiAJCWRhYzMzLT50X3N0YW1wMiA9IDA7CiAJCWJyZWFrOwogCWNhc2UgREFDMzNfRklGT19NT0RFNzoKLQkJaWYgKGRhYzMzLT5hdXRvX2ZpZm9fY29uZmlnKSB7Ci0JCQlkYWMzMy0+dXRociA9IFVUSFJfRlJPTV9QRVJJT0RfU0laRSgKLQkJCQkJcGVyaW9kX3NpemUsCi0JCQkJCXJhdGUsCi0JCQkJCWRhYzMzLT5idXJzdF9yYXRlKSArIDk7Ci0JCQlpZiAoZGFjMzMtPnV0aHIgPiBNT0RFN19VVEhSKQotCQkJCWRhYzMzLT51dGhyID0gTU9ERTdfVVRIUjsKLQkJCWlmIChkYWMzMy0+dXRociA8IChNT0RFN19MVEhSICsgMTApKQotCQkJCWRhYzMzLT51dGhyID0gKE1PREU3X0xUSFIgKyAxMCk7Ci0JCX0KKwkJZGFjMzMtPnV0aHIgPSBVVEhSX0ZST01fUEVSSU9EX1NJWkUocGVyaW9kX3NpemUsIHJhdGUsCisJCQkJCQkgICAgZGFjMzMtPmJ1cnN0X3JhdGUpICsgOTsKKwkJaWYgKGRhYzMzLT51dGhyID4gKGRhYzMzLT5maWZvX3NpemUgLSBEQUMzM19NT0RFN19NQVJHSU4pKQorCQkJZGFjMzMtPnV0aHIgPSBkYWMzMy0+Zmlmb19zaXplIC0gREFDMzNfTU9ERTdfTUFSR0lOOworCQlpZiAoZGFjMzMtPnV0aHIgPCAoREFDMzNfTU9ERTdfTUFSR0lOICsgMTApKQorCQkJZGFjMzMtPnV0aHIgPSAoREFDMzNfTU9ERTdfTUFSR0lOICsgMTApOworCiAJCWRhYzMzLT5tb2RlN191c190b19sdGhyID0KIAkJCQlTQU1QTEVTX1RPX1VTKHN1YnN0cmVhbS0+cnVudGltZS0+cmF0ZSwKLQkJCQkJZGFjMzMtPnV0aHIgLSBNT0RFN19MVEhSICsgMSk7CisJCQkJCWRhYzMzLT51dGhyIC0gREFDMzNfTU9ERTdfTUFSR0lOICsgMSk7CiAJCWRhYzMzLT50X3N0YW1wMSA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMjU1LDggKzEyMzksOCBAQAogCQkJc2FtcGxlcyArPSAoc2FtcGxlc19pbiAtIHNhbXBsZXNfb3V0KTsKIAogCQkJaWYgKGxpa2VseShzYW1wbGVzID4gMCkpCi0JCQkJZGVsYXkgPSBzYW1wbGVzID4gREFDMzNfQlVGRkVSX1NJWkVfU0FNUExFUyA/Ci0JCQkJCURBQzMzX0JVRkZFUl9TSVpFX1NBTVBMRVMgOiBzYW1wbGVzOworCQkJCWRlbGF5ID0gc2FtcGxlcyA+IGRhYzMzLT5maWZvX3NpemUgPworCQkJCQlkYWMzMy0+Zmlmb19zaXplIDogc2FtcGxlczsKIAkJCWVsc2UKIAkJCQlkZWxheSA9IDA7CiAJCX0KQEAgLTEzMDgsNyArMTI5Miw3IEBACiAJCQlzYW1wbGVzX2luID0gVVNfVE9fU0FNUExFUygKIAkJCQkJZGFjMzMtPmJ1cnN0X3JhdGUsCiAJCQkJCXRpbWVfZGVsdGEpOwotCQkJZGVsYXkgPSBNT0RFN19MVEhSICsgc2FtcGxlc19pbiAtIHNhbXBsZXNfb3V0OworCQkJZGVsYXkgPSBEQUMzM19NT0RFN19NQVJHSU4gKyBzYW1wbGVzX2luIC0gc2FtcGxlc19vdXQ7CiAKIAkJCWlmICh1bmxpa2VseShkZWxheSA+IHV0aHIpKQogCQkJCWRlbGF5ID0gdXRocjsKQEAgLTE0MTUsNyArMTM5OSw3IEBACiAKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gZGFjMzMtPmNvbnRyb2xfZGF0YTsKIAljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCkgaTJjX21hc3Rlcl9zZW5kOwotCWNvZGVjLT5pZGxlX2JpYXNfb2ZmID0gMTsKKwljb2RlYy0+ZGFwbS5pZGxlX2JpYXNfb2ZmID0gMTsKIAlkYWMzMy0+Y29kZWMgPSBjb2RlYzsKIAogCS8qIFJlYWQgdGhlIHRsdjMyMGRhYzMzIElEIHJlZ2lzdGVycyAqLwpAQCAtMTQ1OSwxNCArMTQ0MywxMCBAQAogCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBkYWMzM19zbmRfY29udHJvbHMsCiAJCQkgICAgIEFSUkFZX1NJWkUoZGFjMzNfc25kX2NvbnRyb2xzKSk7CiAJLyogT25seSBhZGQgdGhlIEZJRk8gY29udHJvbHMsIGlmIHdlIGhhdmUgdmFsaWQgSVJRIG51bWJlciAqLwotCWlmIChkYWMzMy0+aXJxID49IDApIHsKKwlpZiAoZGFjMzMtPmlycSA+PSAwKQogCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgZGFjMzNfbW9kZV9zbmRfY29udHJvbHMsCiAJCQkJICAgICBBUlJBWV9TSVpFKGRhYzMzX21vZGVfc25kX2NvbnRyb2xzKSk7Ci0JCS8qIEZJRk8gdXNhZ2UgY29udHJvbHMgb25seSwgaWYgYXV0b2lvIGNvbmZpZyBpcyBub3Qgc2VsZWN0ZWQgKi8KLQkJaWYgKCFkYWMzMy0+YXV0b19maWZvX2NvbmZpZykKLQkJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBkYWMzM19maWZvX3NuZF9jb250cm9scywKLQkJCQkJQVJSQVlfU0laRShkYWMzM19maWZvX3NuZF9jb250cm9scykpOwotCX0KKwogCWRhYzMzX2FkZF93aWRnZXRzKGNvZGVjKTsKIAogZXJyX3Bvd2VyOgpAQCAtMTUxNSw3ICsxNDk1LDcgQEAKIAogI2RlZmluZSBEQUMzM19SQVRFUwkoU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCiAJCQkgU05EUlZfUENNX1JBVEVfNDgwMDApCi0jZGVmaW5lIERBQzMzX0ZPUk1BVFMJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUKKyNkZWZpbmUgREFDMzNfRk9STUFUUwkoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgZGFjMzNfZGFpX29wcyA9IHsKIAkuc3RhcnR1cAk9IGRhYzMzX3N0YXJ0dXAsCkBAIC0xNTYzLDE3ICsxNTQzLDExIEBACiAKIAlkYWMzMy0+cG93ZXJfZ3BpbyA9IHBkYXRhLT5wb3dlcl9ncGlvOwogCWRhYzMzLT5idXJzdF9iY2xrZGl2ID0gcGRhdGEtPmJ1cnN0X2JjbGtkaXY7Ci0JLyogUHJlIGNhbGN1bGF0ZSB0aGUgYnVyc3QgcmF0ZSAqLwotCWRhYzMzLT5idXJzdF9yYXRlID0gQlVSU1RfQkFTRUZSRVFfSFogLyBkYWMzMy0+YnVyc3RfYmNsa2RpdiAvIDMyOwogCWRhYzMzLT5rZWVwX2JjbGsgPSBwZGF0YS0+a2VlcF9iY2xrOwotCWRhYzMzLT5hdXRvX2ZpZm9fY29uZmlnID0gcGRhdGEtPmF1dG9fZmlmb19jb25maWc7CiAJZGFjMzMtPm1vZGUxX2xhdGVuY3kgPSBwZGF0YS0+bW9kZTFfbGF0ZW5jeTsKIAlpZiAoIWRhYzMzLT5tb2RlMV9sYXRlbmN5KQogCQlkYWMzMy0+bW9kZTFfbGF0ZW5jeSA9IDEwMDAwOyAvKiAxMG1zICovCiAJZGFjMzMtPmlycSA9IGNsaWVudC0+aXJxOwotCWRhYzMzLT5uc2FtcGxlID0gTlNBTVBMRV9NQVg7Ci0JZGFjMzMtPm5zYW1wbGVfbWF4ID0gTlNBTVBMRV9NQVg7Ci0JZGFjMzMtPnV0aHIgPSBNT0RFN19VVEhSOwogCS8qIERpc2FibGUgRklGTyB1c2UgYnkgZGVmYXVsdCAqLwogCWRhYzMzLT5maWZvX21vZGUgPSBEQUMzM19GSUZPX0JZUEFTUzsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90cGE2MTMwYTIuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdHBhNjEzMGEyLmMKaW5kZXggZDJjMjQzMC4uMWYxYWM4MSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90cGE2MTMwYTIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RwYTYxMzBhMi5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPHNvdW5kL3RwYTYxMzBhMi1wbGF0Lmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KIAogI2luY2x1ZGUgInRwYTYxMzBhMi5oIgpAQCAtNDIsNyArNDEsNyBAQAogCXVuc2lnbmVkIGNoYXIgcmVnc1tUUEE2MTMwQTJfQ0FDSEVSRUdOVU1dOwogCXN0cnVjdCByZWd1bGF0b3IgKnN1cHBseTsKIAlpbnQgcG93ZXJfZ3BpbzsKLQl1bnNpZ25lZCBjaGFyIHBvd2VyX3N0YXRlOworCXU4IHBvd2VyX3N0YXRlOjE7CiAJZW51bSB0cGFfbW9kZWwgaWQ7CiB9OwogCkBAIC0xMTcsNyArMTE2LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHRwYTYxMzBhMl9wb3dlcihpbnQgcG93ZXIpCitzdGF0aWMgaW50IHRwYTYxMzBhMl9wb3dlcih1OCBwb3dlcikKIHsKIAlzdHJ1Y3QJdHBhNjEzMGEyX2RhdGEgKmRhdGE7CiAJdTgJdmFsOwpAQCAtMTI3LDE3ICsxMjYsMTkgQEAKIAlkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKHRwYTYxMzBhMl9jbGllbnQpOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+bXV0ZXgpOwotCWlmIChwb3dlciAmJiAhZGF0YS0+cG93ZXJfc3RhdGUpIHsKLQkJLyogUG93ZXIgb24gKi8KLQkJaWYgKGRhdGEtPnBvd2VyX2dwaW8gPj0gMCkKLQkJCWdwaW9fc2V0X3ZhbHVlKGRhdGEtPnBvd2VyX2dwaW8sIDEpOworCWlmIChwb3dlciA9PSBkYXRhLT5wb3dlcl9zdGF0ZSkKKwkJZ290byBleGl0OwogCisJaWYgKHBvd2VyKSB7CiAJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoZGF0YS0+c3VwcGx5KTsKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlkZXZfZXJyKCZ0cGE2MTMwYTJfY2xpZW50LT5kZXYsCiAJCQkJIkZhaWxlZCB0byBlbmFibGUgc3VwcGx5OiAlZFxuIiwgcmV0KTsKIAkJCWdvdG8gZXhpdDsKIAkJfQorCQkvKiBQb3dlciBvbiAqLworCQlpZiAoZGF0YS0+cG93ZXJfZ3BpbyA+PSAwKQorCQkJZ3Bpb19zZXRfdmFsdWUoZGF0YS0+cG93ZXJfZ3BpbywgMSk7CiAKIAkJZGF0YS0+cG93ZXJfc3RhdGUgPSAxOwogCQlyZXQgPSB0cGE2MTMwYTJfaW5pdGlhbGl6ZSgpOwpAQCAtMTUwLDEyICsxNTEsNyBAQAogCQkJZGF0YS0+cG93ZXJfc3RhdGUgPSAwOwogCQkJZ290byBleGl0OwogCQl9Ci0KLQkJLyogQ2xlYXIgU1dTICovCi0JCXZhbCA9IHRwYTYxMzBhMl9yZWFkKFRQQTYxMzBBMl9SRUdfQ09OVFJPTCk7Ci0JCXZhbCAmPSB+VFBBNjEzMEEyX1NXUzsKLQkJdHBhNjEzMGEyX2kyY193cml0ZShUUEE2MTMwQTJfUkVHX0NPTlRST0wsIHZhbCk7Ci0JfSBlbHNlIGlmICghcG93ZXIgJiYgZGF0YS0+cG93ZXJfc3RhdGUpIHsKKwl9IGVsc2UgewogCQkvKiBzZXQgU1dTICovCiAJCXZhbCA9IHRwYTYxMzBhMl9yZWFkKFRQQTYxMzBBMl9SRUdfQ09OVFJPTCk7CiAJCXZhbCB8PSBUUEE2MTMwQTJfU1dTOwpAQCAtMzAwLDYgKzI5Niw3IEBACiAJCS8qIEVuYWJsZSBhbXBsaWZpZXIgKi8KIAkJdmFsID0gdHBhNjEzMGEyX3JlYWQoVFBBNjEzMEEyX1JFR19DT05UUk9MKTsKIAkJdmFsIHw9IGNoYW5uZWw7CisJCXZhbCAmPSB+VFBBNjEzMEEyX1NXUzsKIAkJdHBhNjEzMGEyX2kyY193cml0ZShUUEE2MTMwQTJfUkVHX0NPTlRST0wsIHZhbCk7CiAKIAkJLyogVW5tdXRlIGNoYW5uZWwgKi8KQEAgLTMyMCw3MiArMzE3LDI0IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHRwYTYxMzBhMl9sZWZ0X2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAotCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQotewotCXN3aXRjaCAoZXZlbnQpIHsKLQljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKLQkJdHBhNjEzMGEyX2NoYW5uZWxfZW5hYmxlKFRQQTYxMzBBMl9IUF9FTl9MLCAxKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6Ci0JCXRwYTYxMzBhMl9jaGFubmVsX2VuYWJsZShUUEE2MTMwQTJfSFBfRU5fTCwgMCk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0cGE2MTMwYTJfcmlnaHRfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCi0JCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCi17Ci0Jc3dpdGNoIChldmVudCkgewotCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgotCQl0cGE2MTMwYTJfY2hhbm5lbF9lbmFibGUoVFBBNjEzMEEyX0hQX0VOX1IsIDEpOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKLQkJdHBhNjEzMGEyX2NoYW5uZWxfZW5hYmxlKFRQQTYxMzBBMl9IUF9FTl9SLCAwKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRwYTYxMzBhMl9zdXBwbHlfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCi0JCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCitpbnQgdHBhNjEzMGEyX3N0ZXJlb19lbmFibGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZW5hYmxlKQogewogCWludCByZXQgPSAwOwotCi0Jc3dpdGNoIChldmVudCkgewotCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCWlmIChlbmFibGUpIHsKIAkJcmV0ID0gdHBhNjEzMGEyX3Bvd2VyKDEpOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQl0cGE2MTMwYTJfY2hhbm5lbF9lbmFibGUoVFBBNjEzMEEyX0hQX0VOX1IgfCBUUEE2MTMwQTJfSFBfRU5fTCwKKwkJCQkJIDEpOworCX0gZWxzZSB7CisJCXRwYTYxMzBhMl9jaGFubmVsX2VuYWJsZShUUEE2MTMwQTJfSFBfRU5fUiB8IFRQQTYxMzBBMl9IUF9FTl9MLAorCQkJCQkgMCk7CiAJCXJldCA9IHRwYTYxMzBhMl9wb3dlcigwKTsKLQkJYnJlYWs7CiAJfQorCiAJcmV0dXJuIHJldDsKIH0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHRwYTYxMzBhMl9kYXBtX3dpZGdldHNbXSA9IHsKLQlTTkRfU09DX0RBUE1fUEdBX0UoIlRQQTYxMzBBMiBMZWZ0IiwgU05EX1NPQ19OT1BNLAotCQkJMCwgMCwgTlVMTCwgMCwgdHBhNjEzMGEyX2xlZnRfZXZlbnQsCi0JCQlTTkRfU09DX0RBUE1fUE9TVF9QTVV8U05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKLQlTTkRfU09DX0RBUE1fUEdBX0UoIlRQQTYxMzBBMiBSaWdodCIsIFNORF9TT0NfTk9QTSwKLQkJCTAsIDAsIE5VTEwsIDAsIHRwYTYxMzBhMl9yaWdodF9ldmVudCwKLQkJCVNORF9TT0NfREFQTV9QT1NUX1BNVXxTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAotCVNORF9TT0NfREFQTV9TVVBQTFkoIlRQQTYxMzBBMiBFbmFibGUiLCBTTkRfU09DX05PUE0sCi0JCQkwLCAwLCB0cGE2MTMwYTJfc3VwcGx5X2V2ZW50LAotCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1VfFNORF9TT0NfREFQTV9QT1NUX1BNRCksCi0JLyogT3V0cHV0cyAqLwotCVNORF9TT0NfREFQTV9PVVRQVVQoIlRQQTYxMzBBMiBIZWFkcGhvbmUgTGVmdCIpLAotCVNORF9TT0NfREFQTV9PVVRQVVQoIlRQQTYxMzBBMiBIZWFkcGhvbmUgUmlnaHQiKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0gewotCXsiVFBBNjEzMEEyIEhlYWRwaG9uZSBMZWZ0IiwgTlVMTCwgIlRQQTYxMzBBMiBMZWZ0In0sCi0JeyJUUEE2MTMwQTIgSGVhZHBob25lIFJpZ2h0IiwgTlVMTCwgIlRQQTYxMzBBMiBSaWdodCJ9LAotCi0JeyJUUEE2MTMwQTIgSGVhZHBob25lIExlZnQiLCBOVUxMLCAiVFBBNjEzMEEyIEVuYWJsZSJ9LAotCXsiVFBBNjEzMEEyIEhlYWRwaG9uZSBSaWdodCIsIE5VTEwsICJUUEE2MTMwQTIgRW5hYmxlIn0sCi19OworRVhQT1JUX1NZTUJPTF9HUEwodHBhNjEzMGEyX3N0ZXJlb19lbmFibGUpOwogCiBpbnQgdHBhNjEzMGEyX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CkBAIC0zOTYsMTggKzM0NSwxMiBAQAogCiAJZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YSh0cGE2MTMwYTJfY2xpZW50KTsKIAotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHRwYTYxMzBhMl9kYXBtX3dpZGdldHMsCi0JCQkJQVJSQVlfU0laRSh0cGE2MTMwYTJfZGFwbV93aWRnZXRzKSk7Ci0KLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwotCiAJaWYgKGRhdGEtPmlkID09IFRQQTYxNDBBMikKIAkJcmV0dXJuIHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB0cGE2MTQwYTJfY29udHJvbHMsCiAJCQkJCQlBUlJBWV9TSVpFKHRwYTYxNDBhMl9jb250cm9scykpOwogCWVsc2UKIAkJcmV0dXJuIHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB0cGE2MTMwYTJfY29udHJvbHMsCiAJCQkJCQlBUlJBWV9TSVpFKHRwYTYxMzBhMl9jb250cm9scykpOwotCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cGE2MTMwYTJfYWRkX2NvbnRyb2xzKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90cGE2MTMwYTIuaCBiL3NvdW5kL3NvYy9jb2RlY3MvdHBhNjEzMGEyLmgKaW5kZXggNTdlODY3Zi4uNWRmNDljOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90cGE2MTMwYTIuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3RwYTYxMzBhMi5oCkBAIC01Nyw1ICs1Nyw2IEBACiAjZGVmaW5lIFRQQTYxMzBBMl9WRVJTSU9OX01BU0sJCSgweDBmKQogCiBleHRlcm4gaW50IHRwYTYxMzBhMl9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKTsKK2V4dGVybiBpbnQgdHBhNjEzMGEyX3N0ZXJlb19lbmFibGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZW5hYmxlKTsKIAogI2VuZGlmIC8qIF9fVFBBNjEzMEEyX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYwppbmRleCBjYmViZWM2Li5lNGQ0NjRiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KIApAQCAtMjMzLDYgKzIzMiwxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgdHdsNDAzMF93YWl0X21zKGludCB0aW1lKQoreworCWlmICh0aW1lIDwgNjApIHsKKwkJdGltZSAqPSAxMDAwOworCQl1c2xlZXBfcmFuZ2UodGltZSwgdGltZSArIDUwMCk7CisJfSBlbHNlIHsKKwkJbXNsZWVwKHRpbWUpOworCX0KK30KKwogc3RhdGljIHZvaWQgdHdsNDAzMF9jb2RlY19lbmFibGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZW5hYmxlKQogewogCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKQEAgLTMzOCwxMCArMzQ3LDE0IEBACiAJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQU5BTUlDTCwKIAkJcmVnIHwgVFdMNDAzMF9DTkNMX09GRlNFVF9TVEFSVCk7CiAKLQkvKiB3YWl0IGZvciBvZmZzZXQgY2FuY2VsbGF0aW9uIHRvIGNvbXBsZXRlICovCisJLyoKKwkgKiBXYWl0IGZvciBvZmZzZXQgY2FuY2VsbGF0aW9uIHRvIGNvbXBsZXRlLgorCSAqIFNpbmNlIHRoaXMgdGFrZXMgYSB3aGlsZSwgZG8gbm90IHNsYW0gdGhlIGkyYy4KKwkgKiBTdGFydCBwb2xsaW5nIHRoZSBzdGF0dXMgYWZ0ZXIgfjIwbXMuCisJICovCisJbXNsZWVwKDIwKTsKIAlkbyB7Ci0JCS8qIHRoaXMgdGFrZXMgYSBsaXR0bGUgd2hpbGUsIHNvIGRvbid0IHNsYW0gaTJjICovCi0JCXVkZWxheSgyMDAwKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCQl0d2xfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsICZieXRlLAogCQkJCSAgICBUV0w0MDMwX1JFR19BTkFNSUNMKTsKIAl9IHdoaWxlICgoaSsrIDwgMTAwKSAmJgpAQCAtNzI1LDkgKzczOCwxMiBAQAogCS8qIEJhc2UgdmFsdWVzIGZvciByYW1wIGRlbGF5IGNhbGN1bGF0aW9uOiAyXjE5IC0gMl4yNiAqLwogCXVuc2lnbmVkIGludCByYW1wX2Jhc2VbXSA9IHs1MjQyODgsIDEwNDg1NzYsIDIwOTcxNTIsIDQxOTQzMDQsCiAJCQkJICAgIDgzODg2MDgsIDE2Nzc3MjE2LCAzMzU1NDQzMiwgNjcxMDg4NjR9OworCXVuc2lnbmVkIGludCBkZWxheTsKIAogCWhzX2dhaW4gPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19HQUlOX1NFVCk7CiAJaHNfcG9wID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQpOworCWRlbGF5ID0gKHJhbXBfYmFzZVsoaHNfcG9wICYgVFdMNDAzMF9SQU1QX0RFTEFZKSA+PiAyXSAvCisJCXR3bDQwMzAtPnN5c2NsaykgKyAxOwogCiAJLyogRW5hYmxlIGV4dGVybmFsIG11dGUgY29udHJvbCwgdGhpcyBkcmFtYXRpY2FsbHkgcmVkdWNlcwogCSAqIHRoZSBwb3Atbm9pc2UgKi8KQEAgLTc1MSwxNiArNzY3LDE0IEBACiAJCWhzX3BvcCB8PSBUV0w0MDMwX1JBTVBfRU47CiAJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBoc19wb3ApOwogCQkvKiBXYWl0IHJhbXAgZGVsYXkgdGltZSArIDEsIHNvIHRoZSBWTUlEIGNhbiBzZXR0bGUgKi8KLQkJbWRlbGF5KChyYW1wX2Jhc2VbKGhzX3BvcCAmIFRXTDQwMzBfUkFNUF9ERUxBWSkgPj4gMl0gLwotCQkJdHdsNDAzMC0+c3lzY2xrKSArIDEpOworCQl0d2w0MDMwX3dhaXRfbXMoZGVsYXkpOwogCX0gZWxzZSB7CiAJCS8qIEhlYWRzZXQgcmFtcC1kb3duIF9ub3RfIGFjY29yZGluZyB0bwogCQkgKiB0aGUgVFJNLCBidXQgaW4gYSB3YXkgdGhhdCBpdCBpcyB3b3JraW5nICovCiAJCWhzX3BvcCAmPSB+VFdMNDAzMF9SQU1QX0VOOwogCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgaHNfcG9wKTsKIAkJLyogV2FpdCByYW1wIGRlbGF5IHRpbWUgKyAxLCBzbyB0aGUgVk1JRCBjYW4gc2V0dGxlICovCi0JCW1kZWxheSgocmFtcF9iYXNlWyhoc19wb3AgJiBUV0w0MDMwX1JBTVBfREVMQVkpID4+IDJdIC8KLQkJCXR3bDQwMzAtPnN5c2NsaykgKyAxKTsKKwkJdHdsNDAzMF93YWl0X21zKGRlbGF5KTsKIAkJLyogQnlwYXNzIHRoZSByZWdfY2FjaGUgdG8gbXV0ZSB0aGUgaGVhZHNldCAqLwogCQl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLAogCQkJCQloc19nYWluICYgKH4weDBmKSwKQEAgLTgzNSw3ICs4NDksNyBAQAogCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKHctPmNvZGVjKTsKIAogCWlmICh0d2w0MDMwLT5kaWdpbWljX2RlbGF5KQotCQltZGVsYXkodHdsNDAzMC0+ZGlnaW1pY19kZWxheSk7CisJCXR3bDQwMzBfd2FpdF9tcyh0d2w0MDMwLT5kaWdpbWljX2RlbGF5KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYyMSwxMCArMTYzNSwxMSBAQAogCiBzdGF0aWMgaW50IHR3bDQwMzBfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHR3bDQwMzBfZGFwbV93aWRnZXRzLAotCQkJCSBBUlJBWV9TSVpFKHR3bDQwMzBfZGFwbV93aWRnZXRzKSk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB0d2w0MDMwX2RhcG1fd2lkZ2V0cywKKwkJCQkgQVJSQVlfU0laRSh0d2w0MDMwX2RhcG1fd2lkZ2V0cykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MzgsMTQgKzE2NTMsMTQgQEAKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikKKwkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikKIAkJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgogCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMCk7CiAJCWJyZWFrOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAogCXJldHVybiAwOwogfQpAQCAtMTcwOSw2ICsxNzI0LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwogCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAorCXNuZF9wY21faHdfY29uc3RyYWludF9tc2JpdHMoc3Vic3RyZWFtLT5ydW50aW1lLCAwLCAzMiwgMjQpOwogCWlmICh0d2w0MDMwLT5tYXN0ZXJfc3Vic3RyZWFtKSB7CiAJCXR3bDQwMzAtPnNsYXZlX3N1YnN0cmVhbSA9IHN1YnN0cmVhbTsKIAkJLyogVGhlIERBSSBoYXMgb25lIGNvbmZpZ3VyYXRpb24gZm9yIHBsYXliYWNrIGFuZCBjYXB0dXJlLCBzbwpAQCAtMTgzMyw3ICsxODQ5LDcgQEAKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgogCQlmb3JtYXQgfD0gVFdMNDAzMF9EQVRBX1dJRFRIXzE2U18xNlc7CiAJCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKIAkJZm9ybWF0IHw9IFRXTDQwMzBfREFUQV9XSURUSF8zMlNfMjRXOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjE2Niw3ICsyMTgyLDcgQEAKIH0KIAogI2RlZmluZSBUV0w0MDMwX1JBVEVTCSAoU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCkKLSNkZWZpbmUgVFdMNDAzMF9GT1JNQVRTCSAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRSkKKyNkZWZpbmUgVFdMNDAzMF9GT1JNQVRTCSAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgdHdsNDAzMF9kYWlfaGlmaV9vcHMgPSB7CiAJLnN0YXJ0dXAJPSB0d2w0MDMwX3N0YXJ0dXAsCkBAIC0yMjQ1LDcgKzIyNjEsNyBAQAogCXNuZF9zb2NfY29kZWNfc2V0X2RydmRhdGEoY29kZWMsIHR3bDQwMzApOwogCS8qIFNldCB0aGUgZGVmYXVsdHMsIGFuZCBwb3dlciB1cCB0aGUgY29kZWMgKi8KIAl0d2w0MDMwLT5zeXNjbGsgPSB0d2w0MDMwX2NvZGVjX2dldF9tY2xrKCkgLyAxMDAwOwotCWNvZGVjLT5pZGxlX2JpYXNfb2ZmID0gMTsKKwljb2RlYy0+ZGFwbS5pZGxlX2JpYXNfb2ZmID0gMTsKIAogCXR3bDQwMzBfaW5pdF9jaGlwKGNvZGVjKTsKIApAQCAtMjI1Nyw5ICsyMjczLDEyIEBACiAKIHN0YXRpYyBpbnQgdHdsNDAzMF9zb2NfcmVtb3ZlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKKwlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKIAkvKiBSZXNldCByZWdpc3RlcnMgdG8gdGhlaXIgY2hpcCBkZWZhdWx0IGJlZm9yZSBsZWF2aW5nICovCiAJdHdsNDAzMF9yZXNldF9yZWdpc3RlcnMoY29kZWMpOwogCXR3bDQwMzBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCWtmcmVlKHR3bDQwMzApOwogCXJldHVybiAwOwogfQogCkBAIC0yMjkxLDEwICsyMzEwLDcgQEAKIAogc3RhdGljIGludCBfX2RldmV4aXQgdHdsNDAzMF9jb2RlY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwotCiAJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZwZGV2LT5kZXYpOwotCWtmcmVlKHR3bDQwMzApOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3R3bDYwNDAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNjA0MC5jCmluZGV4IDEwZjZlNTIuLjRiYmYxYjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNjA0MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNjA0MC5jCkBAIC0zNCwxNCArMzQsNDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKICNpbmNsdWRlICJ0d2w2MDQwLmgiCiAKLSNkZWZpbmUgVFdMNjA0MF9SQVRFUwkgKFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDApCi0jZGVmaW5lIFRXTDYwNDBfRk9STUFUUwkgKFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorI2RlZmluZSBUV0w2MDQwX1JBVEVTCQlTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCisjZGVmaW5lIFRXTDYwNDBfRk9STUFUUwkoU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisKKyNkZWZpbmUgVFdMNjA0MF9PVVRIU18wZEIgMHgwMAorI2RlZmluZSBUV0w2MDQwX09VVEhTX00zMGRCIDB4MEYKKyNkZWZpbmUgVFdMNjA0MF9PVVRIRl8wZEIgMHgwMworI2RlZmluZSBUV0w2MDQwX09VVEhGX001MmRCIDB4MUQKKworI2RlZmluZSBUV0w2MDQwX1JBTVBfTk9ORQkwCisjZGVmaW5lIFRXTDYwNDBfUkFNUF9VUAkJMQorI2RlZmluZSBUV0w2MDQwX1JBTVBfRE9XTgkyCisKKyNkZWZpbmUgVFdMNjA0MF9IU0xfVk9MX01BU0sJMHgwRgorI2RlZmluZSBUV0w2MDQwX0hTTF9WT0xfU0hJRlQJMAorI2RlZmluZSBUV0w2MDQwX0hTUl9WT0xfTUFTSwkweEYwCisjZGVmaW5lIFRXTDYwNDBfSFNSX1ZPTF9TSElGVAk0CisjZGVmaW5lIFRXTDYwNDBfSEZfVk9MX01BU0sJMHgxRgorI2RlZmluZSBUV0w2MDQwX0hGX1ZPTF9TSElGVAkwCisKK3N0cnVjdCB0d2w2MDQwX291dHB1dCB7CisJdTE2IGFjdGl2ZTsKKwl1MTYgbGVmdF92b2w7CisJdTE2IHJpZ2h0X3ZvbDsKKwl1MTYgbGVmdF9zdGVwOworCXUxNiByaWdodF9zdGVwOworCXVuc2lnbmVkIGludCBzdGVwX2RlbGF5OworCXUxNiByYW1wOworCXUxNiBtdXRlOworCXN0cnVjdCBjb21wbGV0aW9uIHJhbXBfZG9uZTsKK307CisKK3N0cnVjdCB0d2w2MDQwX2phY2tfZGF0YSB7CisJc3RydWN0IHNuZF9zb2NfamFjayAqamFjazsKKwlpbnQgcmVwb3J0OworfTsKIAogLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCiBzdHJ1Y3QgdHdsNjA0MF9kYXRhIHsKQEAgLTUzLDYgKzg1LDE3IEBACiAJdW5zaWduZWQgaW50IHN5c2NsazsKIAlzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgKnN5c2Nsa19jb25zdHJhaW50czsKIAlzdHJ1Y3QgY29tcGxldGlvbiByZWFkeTsKKwlzdHJ1Y3QgdHdsNjA0MF9qYWNrX2RhdGEgaHNfamFjazsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGRlbGF5ZWRfd29yazsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJc3RydWN0IHR3bDYwNDBfb3V0cHV0IGhlYWRzZXQ7CisJc3RydWN0IHR3bDYwNDBfb3V0cHV0IGhhbmRzZnJlZTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqaGZfd29ya3F1ZXVlOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpoc193b3JrcXVldWU7CisJc3RydWN0IGRlbGF5ZWRfd29yayBoc19kZWxheWVkX3dvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayBoZl9kZWxheWVkX3dvcms7CiB9OwogCiAvKgpAQCAtMjAxLDcgKzI0NCw3IEBACiAJaWYgKHJlZyA+PSBUV0w2MDQwX0NBQ0hFUkVHTlVNKQogCQlyZXR1cm4gLUVJTzsKIAotCXR3bF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwgJnZhbHVlLCByZWcpOworCXR3bF9pMmNfcmVhZF91OChUV0xfTU9EVUxFX0FVRElPX1ZPSUNFLCAmdmFsdWUsIHJlZyk7CiAJdHdsNjA0MF93cml0ZV9yZWdfY2FjaGUoY29kZWMsIHJlZywgdmFsdWUpOwogCiAJcmV0dXJuIHZhbHVlOwpAQCAtMjE3LDcgKzI2MCw3IEBACiAJCXJldHVybiAtRUlPOwogCiAJdHdsNjA0MF93cml0ZV9yZWdfY2FjaGUoY29kZWMsIHJlZywgdmFsdWUpOwotCXJldHVybiB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLCB2YWx1ZSwgcmVnKTsKKwlyZXR1cm4gdHdsX2kyY193cml0ZV91OChUV0xfTU9EVUxFX0FVRElPX1ZPSUNFLCB2YWx1ZSwgcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgdHdsNjA0MF9pbml0X3Zpb19yZWdzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKQEAgLTI1NCw2ICsyOTcsMzA1IEBACiAJfQogfQogCisvKgorICogUmFtcCBIUyBQR0Egdm9sdW1lIHRvIG1pbmltaXNlIHBvcHMgYXQgc3RyZWFtIHN0YXJ0dXAgYW5kIHNodXRkb3duLgorICovCitzdGF0aWMgaW5saW5lIGludCB0d2w2MDQwX2hzX3JhbXBfc3RlcChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQl1bnNpZ25lZCBpbnQgbGVmdF9zdGVwLCB1bnNpZ25lZCBpbnQgcmlnaHRfc3RlcCkKK3sKKworCXN0cnVjdCB0d2w2MDQwX2RhdGEgKnByaXYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgdHdsNjA0MF9vdXRwdXQgKmhlYWRzZXQgPSAmcHJpdi0+aGVhZHNldDsKKwlpbnQgbGVmdF9jb21wbGV0ZSA9IDAsIHJpZ2h0X2NvbXBsZXRlID0gMDsKKwl1OCByZWcsIHZhbDsKKworCS8qIGxlZnQgY2hhbm5lbCAqLworCWxlZnRfc3RlcCA9IChsZWZ0X3N0ZXAgPiAweEYpID8gMHhGIDogbGVmdF9zdGVwOworCXJlZyA9IHR3bDYwNDBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDYwNDBfUkVHX0hTR0FJTik7CisJdmFsID0gKH5yZWcgJiBUV0w2MDQwX0hTTF9WT0xfTUFTSyk7CisKKwlpZiAoaGVhZHNldC0+cmFtcCA9PSBUV0w2MDQwX1JBTVBfVVApIHsKKwkJLyogcmFtcCBzdGVwIHVwICovCisJCWlmICh2YWwgPCBoZWFkc2V0LT5sZWZ0X3ZvbCkgeworCQkJdmFsICs9IGxlZnRfc3RlcDsKKwkJCXJlZyAmPSB+VFdMNjA0MF9IU0xfVk9MX01BU0s7CisJCQl0d2w2MDQwX3dyaXRlKGNvZGVjLCBUV0w2MDQwX1JFR19IU0dBSU4sCisJCQkJCShyZWcgfCAofnZhbCAmIFRXTDYwNDBfSFNMX1ZPTF9NQVNLKSkpOworCQl9IGVsc2UgeworCQkJbGVmdF9jb21wbGV0ZSA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKGhlYWRzZXQtPnJhbXAgPT0gVFdMNjA0MF9SQU1QX0RPV04pIHsKKwkJLyogcmFtcCBzdGVwIGRvd24gKi8KKwkJaWYgKHZhbCA+IDB4MCkgeworCQkJdmFsIC09IGxlZnRfc3RlcDsKKwkJCXJlZyAmPSB+VFdMNjA0MF9IU0xfVk9MX01BU0s7CisJCQl0d2w2MDQwX3dyaXRlKGNvZGVjLCBUV0w2MDQwX1JFR19IU0dBSU4sIHJlZyB8CisJCQkJCQkofnZhbCAmIFRXTDYwNDBfSFNMX1ZPTF9NQVNLKSk7CisJCX0gZWxzZSB7CisJCQlsZWZ0X2NvbXBsZXRlID0gMTsKKwkJfQorCX0KKworCS8qIHJpZ2h0IGNoYW5uZWwgKi8KKwlyaWdodF9zdGVwID0gKHJpZ2h0X3N0ZXAgPiAweEYpID8gMHhGIDogcmlnaHRfc3RlcDsKKwlyZWcgPSB0d2w2MDQwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w2MDQwX1JFR19IU0dBSU4pOworCXZhbCA9ICh+cmVnICYgVFdMNjA0MF9IU1JfVk9MX01BU0spID4+IFRXTDYwNDBfSFNSX1ZPTF9TSElGVDsKKworCWlmIChoZWFkc2V0LT5yYW1wID09IFRXTDYwNDBfUkFNUF9VUCkgeworCQkvKiByYW1wIHN0ZXAgdXAgKi8KKwkJaWYgKHZhbCA8IGhlYWRzZXQtPnJpZ2h0X3ZvbCkgeworCQkJdmFsICs9IHJpZ2h0X3N0ZXA7CisJCQlyZWcgJj0gflRXTDYwNDBfSFNSX1ZPTF9NQVNLOworCQkJdHdsNjA0MF93cml0ZShjb2RlYywgVFdMNjA0MF9SRUdfSFNHQUlOLAorCQkJCShyZWcgfCAofnZhbCA8PCBUV0w2MDQwX0hTUl9WT0xfU0hJRlQpKSk7CisJCX0gZWxzZSB7CisJCQlyaWdodF9jb21wbGV0ZSA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKGhlYWRzZXQtPnJhbXAgPT0gVFdMNjA0MF9SQU1QX0RPV04pIHsKKwkJLyogcmFtcCBzdGVwIGRvd24gKi8KKwkJaWYgKHZhbCA+IDB4MCkgeworCQkJdmFsIC09IHJpZ2h0X3N0ZXA7CisJCQlyZWcgJj0gflRXTDYwNDBfSFNSX1ZPTF9NQVNLOworCQkJdHdsNjA0MF93cml0ZShjb2RlYywgVFdMNjA0MF9SRUdfSFNHQUlOLAorCQkJCQkgcmVnIHwgKH52YWwgPDwgVFdMNjA0MF9IU1JfVk9MX1NISUZUKSk7CisJCX0gZWxzZSB7CisJCQlyaWdodF9jb21wbGV0ZSA9IDE7CisJCX0KKwl9CisKKwlyZXR1cm4gbGVmdF9jb21wbGV0ZSAmIHJpZ2h0X2NvbXBsZXRlOworfQorCisvKgorICogUmFtcCBIRiBQR0Egdm9sdW1lIHRvIG1pbmltaXNlIHBvcHMgYXQgc3RyZWFtIHN0YXJ0dXAgYW5kIHNodXRkb3duLgorICovCitzdGF0aWMgaW5saW5lIGludCB0d2w2MDQwX2hmX3JhbXBfc3RlcChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQl1bnNpZ25lZCBpbnQgbGVmdF9zdGVwLCB1bnNpZ25lZCBpbnQgcmlnaHRfc3RlcCkKK3sKKwlzdHJ1Y3QgdHdsNjA0MF9kYXRhICpwcml2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHR3bDYwNDBfb3V0cHV0ICpoYW5kc2ZyZWUgPSAmcHJpdi0+aGFuZHNmcmVlOworCWludCBsZWZ0X2NvbXBsZXRlID0gMCwgcmlnaHRfY29tcGxldGUgPSAwOworCXUxNiByZWcsIHZhbDsKKworCS8qIGxlZnQgY2hhbm5lbCAqLworCWxlZnRfc3RlcCA9IChsZWZ0X3N0ZXAgPiAweDFEKSA/IDB4MUQgOiBsZWZ0X3N0ZXA7CisJcmVnID0gdHdsNjA0MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNjA0MF9SRUdfSEZMR0FJTik7CisJcmVnID0gMHgxRCAtIHJlZzsKKwl2YWwgPSAocmVnICYgVFdMNjA0MF9IRl9WT0xfTUFTSyk7CisJaWYgKGhhbmRzZnJlZS0+cmFtcCA9PSBUV0w2MDQwX1JBTVBfVVApIHsKKwkJLyogcmFtcCBzdGVwIHVwICovCisJCWlmICh2YWwgPCBoYW5kc2ZyZWUtPmxlZnRfdm9sKSB7CisJCQl2YWwgKz0gbGVmdF9zdGVwOworCQkJcmVnICY9IH5UV0w2MDQwX0hGX1ZPTF9NQVNLOworCQkJdHdsNjA0MF93cml0ZShjb2RlYywgVFdMNjA0MF9SRUdfSEZMR0FJTiwKKwkJCQkJCXJlZyB8ICgweDFEIC0gdmFsKSk7CisJCX0gZWxzZSB7CisJCQlsZWZ0X2NvbXBsZXRlID0gMTsKKwkJfQorCX0gZWxzZSBpZiAoaGFuZHNmcmVlLT5yYW1wID09IFRXTDYwNDBfUkFNUF9ET1dOKSB7CisJCS8qIHJhbXAgc3RlcCBkb3duICovCisJCWlmICh2YWwgPiAwKSB7CisJCQl2YWwgLT0gbGVmdF9zdGVwOworCQkJcmVnICY9IH5UV0w2MDQwX0hGX1ZPTF9NQVNLOworCQkJdHdsNjA0MF93cml0ZShjb2RlYywgVFdMNjA0MF9SRUdfSEZMR0FJTiwKKwkJCQkJCXJlZyB8ICgweDFEIC0gdmFsKSk7CisJCX0gZWxzZSB7CisJCQlsZWZ0X2NvbXBsZXRlID0gMTsKKwkJfQorCX0KKworCS8qIHJpZ2h0IGNoYW5uZWwgKi8KKwlyaWdodF9zdGVwID0gKHJpZ2h0X3N0ZXAgPiAweDFEKSA/IDB4MUQgOiByaWdodF9zdGVwOworCXJlZyA9IHR3bDYwNDBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDYwNDBfUkVHX0hGUkdBSU4pOworCXJlZyA9IDB4MUQgLSByZWc7CisJdmFsID0gKHJlZyAmIFRXTDYwNDBfSEZfVk9MX01BU0spOworCWlmIChoYW5kc2ZyZWUtPnJhbXAgPT0gVFdMNjA0MF9SQU1QX1VQKSB7CisJCS8qIHJhbXAgc3RlcCB1cCAqLworCQlpZiAodmFsIDwgaGFuZHNmcmVlLT5yaWdodF92b2wpIHsKKwkJCXZhbCArPSByaWdodF9zdGVwOworCQkJcmVnICY9IH5UV0w2MDQwX0hGX1ZPTF9NQVNLOworCQkJdHdsNjA0MF93cml0ZShjb2RlYywgVFdMNjA0MF9SRUdfSEZSR0FJTiwKKwkJCQkJCXJlZyB8ICgweDFEIC0gdmFsKSk7CisJCX0gZWxzZSB7CisJCQlyaWdodF9jb21wbGV0ZSA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKGhhbmRzZnJlZS0+cmFtcCA9PSBUV0w2MDQwX1JBTVBfRE9XTikgeworCQkvKiByYW1wIHN0ZXAgZG93biAqLworCQlpZiAodmFsID4gMCkgeworCQkJdmFsIC09IHJpZ2h0X3N0ZXA7CisJCQlyZWcgJj0gflRXTDYwNDBfSEZfVk9MX01BU0s7CisJCQl0d2w2MDQwX3dyaXRlKGNvZGVjLCBUV0w2MDQwX1JFR19IRlJHQUlOLAorCQkJCQkJcmVnIHwgKDB4MUQgLSB2YWwpKTsKKwkJfQorCX0KKworCXJldHVybiBsZWZ0X2NvbXBsZXRlICYgcmlnaHRfY29tcGxldGU7Cit9CisKKy8qCisgKiBUaGlzIHdvcmsgcmFtcHMgYm90aCBvdXRwdXQgUEdBcyBhdCBzdHJlYW0gc3RhcnQvc3RvcCB0aW1lIHRvCisgKiBtaW5pbWlzZSBwb3AgYXNzb2NpYXRlZCB3aXRoIERBUE0gcG93ZXIgc3dpdGNoaW5nLgorICovCitzdGF0aWMgdm9pZCB0d2w2MDQwX3BnYV9oc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdHdsNjA0MF9kYXRhICpwcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0d2w2MDQwX2RhdGEsIGhzX2RlbGF5ZWRfd29yay53b3JrKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBwcml2LT5jb2RlYzsKKwlzdHJ1Y3QgdHdsNjA0MF9vdXRwdXQgKmhlYWRzZXQgPSAmcHJpdi0+aGVhZHNldDsKKwl1bnNpZ25lZCBpbnQgZGVsYXkgPSBoZWFkc2V0LT5zdGVwX2RlbGF5OworCWludCBpLCBoZWFkc2V0X2NvbXBsZXRlOworCisJLyogZG8gd2UgbmVlZCB0byByYW1wIGF0IGFsbCA/ICovCisJaWYgKGhlYWRzZXQtPnJhbXAgPT0gVFdMNjA0MF9SQU1QX05PTkUpCisJCXJldHVybjsKKworCS8qIEhTIFBHQSB2b2x1bWVzIGhhdmUgNCBiaXRzIG9mIHJlc29sdXRpb24gdG8gcmFtcCAqLworCWZvciAoaSA9IDA7IGkgPD0gMTY7IGkrKykgeworCQloZWFkc2V0X2NvbXBsZXRlID0gMTsKKwkJaWYgKGhlYWRzZXQtPnJhbXAgIT0gVFdMNjA0MF9SQU1QX05PTkUpCisJCQloZWFkc2V0X2NvbXBsZXRlID0gdHdsNjA0MF9oc19yYW1wX3N0ZXAoY29kZWMsCisJCQkJCQkJaGVhZHNldC0+bGVmdF9zdGVwLAorCQkJCQkJCWhlYWRzZXQtPnJpZ2h0X3N0ZXApOworCisJCS8qIHJhbXAgZmluaXNoZWQgPyAqLworCQlpZiAoaGVhZHNldF9jb21wbGV0ZSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIFRPRE86IHR1bmU6IGRlbGF5IGlzIGxvbmdlciBvdmVyIDBkQgorCQkgKiBhcyBpbmNyZWFzZXMgYXJlIGxhcmdlci4KKwkJICovCisJCWlmIChpID49IDgpCisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyhkZWxheSArCisJCQkJCQkJKGRlbGF5ID4+IDEpKSk7CisJCWVsc2UKKwkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKGRlbGF5KSk7CisJfQorCisJaWYgKGhlYWRzZXQtPnJhbXAgPT0gVFdMNjA0MF9SQU1QX0RPV04pIHsKKwkJaGVhZHNldC0+YWN0aXZlID0gMDsKKwkJY29tcGxldGUoJmhlYWRzZXQtPnJhbXBfZG9uZSk7CisJfSBlbHNlIHsKKwkJaGVhZHNldC0+YWN0aXZlID0gMTsKKwl9CisJaGVhZHNldC0+cmFtcCA9IFRXTDYwNDBfUkFNUF9OT05FOworfQorCitzdGF0aWMgdm9pZCB0d2w2MDQwX3BnYV9oZl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdHdsNjA0MF9kYXRhICpwcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0d2w2MDQwX2RhdGEsIGhmX2RlbGF5ZWRfd29yay53b3JrKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBwcml2LT5jb2RlYzsKKwlzdHJ1Y3QgdHdsNjA0MF9vdXRwdXQgKmhhbmRzZnJlZSA9ICZwcml2LT5oYW5kc2ZyZWU7CisJdW5zaWduZWQgaW50IGRlbGF5ID0gaGFuZHNmcmVlLT5zdGVwX2RlbGF5OworCWludCBpLCBoYW5kc2ZyZWVfY29tcGxldGU7CisKKwkvKiBkbyB3ZSBuZWVkIHRvIHJhbXAgYXQgYWxsID8gKi8KKwlpZiAoaGFuZHNmcmVlLT5yYW1wID09IFRXTDYwNDBfUkFNUF9OT05FKQorCQlyZXR1cm47CisKKwkvKiBIRiBQR0Egdm9sdW1lcyBoYXZlIDUgYml0cyBvZiByZXNvbHV0aW9uIHRvIHJhbXAgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IDMyOyBpKyspIHsKKwkJaGFuZHNmcmVlX2NvbXBsZXRlID0gMTsKKwkJaWYgKGhhbmRzZnJlZS0+cmFtcCAhPSBUV0w2MDQwX1JBTVBfTk9ORSkKKwkJCWhhbmRzZnJlZV9jb21wbGV0ZSA9IHR3bDYwNDBfaGZfcmFtcF9zdGVwKGNvZGVjLAorCQkJCQkJCWhhbmRzZnJlZS0+bGVmdF9zdGVwLAorCQkJCQkJCWhhbmRzZnJlZS0+cmlnaHRfc3RlcCk7CisKKwkJLyogcmFtcCBmaW5pc2hlZCA/ICovCisJCWlmIChoYW5kc2ZyZWVfY29tcGxldGUpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBUT0RPOiB0dW5lOiBkZWxheSBpcyBsb25nZXIgb3ZlciAwZEIKKwkJICogYXMgaW5jcmVhc2VzIGFyZSBsYXJnZXIuCisJCSAqLworCQlpZiAoaSA+PSAxNikKKwkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKGRlbGF5ICsKKwkJCQkJCSAgICAgICAoZGVsYXkgPj4gMSkpKTsKKwkJZWxzZQorCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoZGVsYXkpKTsKKwl9CisKKworCWlmIChoYW5kc2ZyZWUtPnJhbXAgPT0gVFdMNjA0MF9SQU1QX0RPV04pIHsKKwkJaGFuZHNmcmVlLT5hY3RpdmUgPSAwOworCQljb21wbGV0ZSgmaGFuZHNmcmVlLT5yYW1wX2RvbmUpOworCX0gZWxzZQorCQloYW5kc2ZyZWUtPmFjdGl2ZSA9IDE7CisJaGFuZHNmcmVlLT5yYW1wID0gVFdMNjA0MF9SQU1QX05PTkU7Cit9CisKK3N0YXRpYyBpbnQgcGdhX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3QgdHdsNjA0MF9kYXRhICpwcml2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHR3bDYwNDBfb3V0cHV0ICpvdXQ7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqd29yazsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcXVldWU7CisKKwlzd2l0Y2ggKHctPnNoaWZ0KSB7CisJY2FzZSAyOgorCWNhc2UgMzoKKwkJb3V0ID0gJnByaXYtPmhlYWRzZXQ7CisJCXdvcmsgPSAmcHJpdi0+aHNfZGVsYXllZF93b3JrOworCQlxdWV1ZSA9IHByaXYtPmhzX3dvcmtxdWV1ZTsKKwkJb3V0LT5zdGVwX2RlbGF5ID0gNTsJLyogNSBtcyBiZXR3ZWVuIHZvbHVtZSByYW1wIHN0ZXBzICovCisJCWJyZWFrOworCWNhc2UgNDoKKwkJb3V0ID0gJnByaXYtPmhhbmRzZnJlZTsKKwkJd29yayA9ICZwcml2LT5oZl9kZWxheWVkX3dvcms7CisJCXF1ZXVlID0gcHJpdi0+aGZfd29ya3F1ZXVlOworCQlvdXQtPnN0ZXBfZGVsYXkgPSA1OwkvKiA1IG1zIGJldHdlZW4gdm9sdW1lIHJhbXAgc3RlcHMgKi8KKwkJaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpCisJCQlwcml2LT5ub25fbHArKzsKKwkJZWxzZQorCQkJcHJpdi0+bm9uX2xwLS07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJCWlmIChvdXQtPmFjdGl2ZSkKKwkJCWJyZWFrOworCisJCS8qIGRvbid0IHVzZSB2b2x1bWUgcmFtcCBmb3IgcG93ZXItdXAgKi8KKwkJb3V0LT5sZWZ0X3N0ZXAgPSBvdXQtPmxlZnRfdm9sOworCQlvdXQtPnJpZ2h0X3N0ZXAgPSBvdXQtPnJpZ2h0X3ZvbDsKKworCQlpZiAoIWRlbGF5ZWRfd29ya19wZW5kaW5nKHdvcmspKSB7CisJCQlvdXQtPnJhbXAgPSBUV0w2MDQwX1JBTVBfVVA7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocXVldWUsIHdvcmssCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMSkpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNRDoKKwkJaWYgKCFvdXQtPmFjdGl2ZSkKKwkJCWJyZWFrOworCisJCWlmICghZGVsYXllZF93b3JrX3BlbmRpbmcod29yaykpIHsKKwkJCS8qIHVzZSB2b2x1bWUgcmFtcCBmb3IgcG93ZXItZG93biAqLworCQkJb3V0LT5sZWZ0X3N0ZXAgPSAxOworCQkJb3V0LT5yaWdodF9zdGVwID0gMTsKKwkJCW91dC0+cmFtcCA9IFRXTDYwNDBfUkFNUF9ET1dOOworCQkJSU5JVF9DT01QTEVUSU9OKG91dC0+cmFtcF9kb25lKTsKKworCQkJcXVldWVfZGVsYXllZF93b3JrKHF1ZXVlLCB3b3JrLAorCQkJCQltc2Vjc190b19qaWZmaWVzKDEpKTsKKworCQkJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZvdXQtPnJhbXBfZG9uZSwKKwkJCQkJbXNlY3NfdG9famlmZmllcygyMDAwKSk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qIHR3bDYwNDAgY29kZWMgbWFudWFsIHBvd2VyLXVwIHNlcXVlbmNlICovCiBzdGF0aWMgdm9pZCB0d2w2MDQwX3Bvd2VyX3VwKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKQEAgLTM4Miw2ICs3MjQsNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCB0d2w2MDQwX2hzX2phY2tfcmVwb3J0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQlzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgcmVwb3J0KQoreworCXN0cnVjdCB0d2w2MDQwX2RhdGEgKnByaXYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgc3RhdHVzOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCisJLyogU3luYyBzdGF0dXMgKi8KKwlzdGF0dXMgPSB0d2w2MDQwX3JlYWRfcmVnX3ZvbGF0aWxlKGNvZGVjLCBUV0w2MDQwX1JFR19TVEFUVVMpOworCWlmIChzdGF0dXMgJiBUV0w2MDQwX1BMVUdDT01QKQorCQlzbmRfc29jX2phY2tfcmVwb3J0KGphY2ssIHJlcG9ydCwgcmVwb3J0KTsKKwllbHNlCisJCXNuZF9zb2NfamFja19yZXBvcnQoamFjaywgMCwgcmVwb3J0KTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworfQorCit2b2lkIHR3bDYwNDBfaHNfamFja19kZXRlY3Qoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCXN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCByZXBvcnQpCit7CisJc3RydWN0IHR3bDYwNDBfZGF0YSAqcHJpdiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCB0d2w2MDQwX2phY2tfZGF0YSAqaHNfamFjayA9ICZwcml2LT5oc19qYWNrOworCisJaHNfamFjay0+amFjayA9IGphY2s7CisJaHNfamFjay0+cmVwb3J0ID0gcmVwb3J0OworCisJdHdsNjA0MF9oc19qYWNrX3JlcG9ydChjb2RlYywgaHNfamFjay0+amFjaywgaHNfamFjay0+cmVwb3J0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHR3bDYwNDBfaHNfamFja19kZXRlY3QpOworCitzdGF0aWMgdm9pZCB0d2w2MDQwX2FjY2Vzc29yeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdHdsNjA0MF9kYXRhICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJCXN0cnVjdCB0d2w2MDQwX2RhdGEsIGRlbGF5ZWRfd29yay53b3JrKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBwcml2LT5jb2RlYzsKKwlzdHJ1Y3QgdHdsNjA0MF9qYWNrX2RhdGEgKmhzX2phY2sgPSAmcHJpdi0+aHNfamFjazsKKworCXR3bDYwNDBfaHNfamFja19yZXBvcnQoY29kZWMsIGhzX2phY2stPmphY2ssIGhzX2phY2stPnJlcG9ydCk7Cit9CisKIC8qIGF1ZGlvIGludGVycnVwdCBoYW5kbGVyICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgdHdsNjA0MF9uYXVkaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKQEAgLTM4OSwzMyArNzcyLDE4MCBAQAogCXN0cnVjdCB0d2w2MDQwX2RhdGEgKnByaXYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAl1OCBpbnRpZDsKIAotCXR3bF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwgJmludGlkLCBUV0w2MDQwX1JFR19JTlRJRCk7CisJdHdsX2kyY19yZWFkX3U4KFRXTF9NT0RVTEVfQVVESU9fVk9JQ0UsICZpbnRpZCwgVFdMNjA0MF9SRUdfSU5USUQpOwogCi0Jc3dpdGNoIChpbnRpZCkgewotCWNhc2UgVFdMNjA0MF9USElOVDoKKwlpZiAoaW50aWQgJiBUV0w2MDQwX1RISU5UKQogCQlkZXZfYWxlcnQoY29kZWMtPmRldiwgImRpZSB0ZW1wIG92ZXItbGltaXQgZGV0ZWN0aW9uXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBUV0w2MDQwX1BMVUdJTlQ6Ci0JY2FzZSBUV0w2MDQwX1VOUExVR0lOVDoKLQljYXNlIFRXTDYwNDBfSE9PS0lOVDoKLQkJYnJlYWs7Ci0JY2FzZSBUV0w2MDQwX0hGSU5UOgorCisJaWYgKChpbnRpZCAmIFRXTDYwNDBfUExVR0lOVCkgfHwgKGludGlkICYgVFdMNjA0MF9VTlBMVUdJTlQpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+ZGVsYXllZF93b3JrLAorCQkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMjAwKSk7CisKKwlpZiAoaW50aWQgJiBUV0w2MDQwX0hPT0tJTlQpCisJCWRldl9pbmZvKGNvZGVjLT5kZXYsICJob29rIGRldGVjdGlvblxuIik7CisKKwlpZiAoaW50aWQgJiBUV0w2MDQwX0hGSU5UKQogCQlkZXZfYWxlcnQoY29kZWMtPmRldiwgImhmIGRyaXZlcnMgb3ZlciBjdXJyZW50IGRldGVjdGlvblxuIik7Ci0JCWJyZWFrOwotCWNhc2UgVFdMNjA0MF9WSUJJTlQ6CisKKwlpZiAoaW50aWQgJiBUV0w2MDQwX1ZJQklOVCkKIAkJZGV2X2FsZXJ0KGNvZGVjLT5kZXYsICJ2aWIgZHJpdmVycyBvdmVyIGN1cnJlbnQgZGV0ZWN0aW9uXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBUV0w2MDQwX1JFQURZSU5UOgorCisJaWYgKGludGlkICYgVFdMNjA0MF9SRUFEWUlOVCkKIAkJY29tcGxldGUoJnByaXYtPnJlYWR5KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAidW5rbm93biBhdWRpbyBpbnRlcnJ1cHQgJWRcbiIsIGludGlkKTsKLQkJYnJlYWs7Ci0JfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgaW50IHR3bDYwNDBfcHV0X3ZvbHN3KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB0d2w2MDQwX2RhdGEgKnR3bDYwNDBfcHJpdiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCB0d2w2MDQwX291dHB1dCAqb3V0ID0gTlVMTDsKKwlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jID0KKwkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCWludCByZXQ7CisJdW5zaWduZWQgaW50IHJlZyA9IG1jLT5yZWc7CisKKwkvKiBGb3IgSFMgYW5kIEhGIHdlIHNoYWRvdyB0aGUgdmFsdWVzIGFuZCBvbmx5IGFjdHVhbGx5IHdyaXRlCisJICogdGhlbSBvdXQgd2hlbiBhY3RpdmUgaW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBhbXBsaWZpZXIgY29tZXMgb24KKwkgKiBhcyBxdWlldGx5IGFzIHBvc3NpYmxlLiAqLworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBUV0w2MDQwX1JFR19IU0dBSU46CisJCW91dCA9ICZ0d2w2MDQwX3ByaXYtPmhlYWRzZXQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChvdXQpIHsKKwkJb3V0LT5sZWZ0X3ZvbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCQlvdXQtPnJpZ2h0X3ZvbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdOworCQlpZiAoIW91dC0+YWN0aXZlKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0ID0gc25kX3NvY19wdXRfdm9sc3coa2NvbnRyb2wsIHVjb250cm9sKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHR3bDYwNDBfZ2V0X3ZvbHN3KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgdHdsNjA0MF9kYXRhICp0d2w2MDQwX3ByaXYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgdHdsNjA0MF9vdXRwdXQgKm91dCA9ICZ0d2w2MDQwX3ByaXYtPmhlYWRzZXQ7CisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwl1bnNpZ25lZCBpbnQgcmVnID0gbWMtPnJlZzsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBUV0w2MDQwX1JFR19IU0dBSU46CisJCW91dCA9ICZ0d2w2MDQwX3ByaXYtPmhlYWRzZXQ7CisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gb3V0LT5sZWZ0X3ZvbDsKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBvdXQtPnJpZ2h0X3ZvbDsKKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc25kX3NvY19nZXRfdm9sc3coa2NvbnRyb2wsIHVjb250cm9sKTsKK30KKworc3RhdGljIGludCB0d2w2MDQwX3B1dF92b2xzd18ycl92dShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgdHdsNjA0MF9kYXRhICp0d2w2MDQwX3ByaXYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgdHdsNjA0MF9vdXRwdXQgKm91dCA9IE5VTEw7CisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCByZWcgPSBtYy0+cmVnOworCisJLyogRm9yIEhTIGFuZCBIRiB3ZSBzaGFkb3cgdGhlIHZhbHVlcyBhbmQgb25seSBhY3R1YWxseSB3cml0ZQorCSAqIHRoZW0gb3V0IHdoZW4gYWN0aXZlIGluIG9yZGVyIHRvIGVuc3VyZSB0aGUgYW1wbGlmaWVyIGNvbWVzIG9uCisJICogYXMgcXVpZXRseSBhcyBwb3NzaWJsZS4gKi8KKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgVFdMNjA0MF9SRUdfSEZMR0FJTjoKKwljYXNlIFRXTDYwNDBfUkVHX0hGUkdBSU46CisJCW91dCA9ICZ0d2w2MDQwX3ByaXYtPmhhbmRzZnJlZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKG91dCkgeworCQlvdXQtPmxlZnRfdm9sID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJCW91dC0+cmlnaHRfdm9sID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV07CisJCWlmICghb3V0LT5hY3RpdmUpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3B1dF92b2xzd18ycihrY29udHJvbCwgdWNvbnRyb2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdHdsNjA0MF9nZXRfdm9sc3dfMnIoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB0d2w2MDQwX2RhdGEgKnR3bDYwNDBfcHJpdiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCB0d2w2MDQwX291dHB1dCAqb3V0ID0gJnR3bDYwNDBfcHJpdi0+aGFuZHNmcmVlOworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJdW5zaWduZWQgaW50IHJlZyA9IG1jLT5yZWc7CisKKwkvKiBJZiB0aGVzZSBhcmUgY2FjaGVkIHJlZ2lzdGVycyB1c2UgdGhlIGNhY2hlICovCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFRXTDYwNDBfUkVHX0hGTEdBSU46CisJY2FzZSBUV0w2MDQwX1JFR19IRlJHQUlOOgorCQlvdXQgPSAmdHdsNjA0MF9wcml2LT5oYW5kc2ZyZWU7CisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gb3V0LT5sZWZ0X3ZvbDsKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBvdXQtPnJpZ2h0X3ZvbDsKKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc25kX3NvY19nZXRfdm9sc3dfMnIoa2NvbnRyb2wsIHVjb250cm9sKTsKK30KKworLyogZG91YmxlIGNvbnRyb2wgd2l0aCB2b2x1bWUgdXBkYXRlICovCisjZGVmaW5lIFNPQ19UV0w2MDQwX0RPVUJMRV9UTFYoeG5hbWUsIHhyZWcsIHNoaWZ0X2xlZnQsIHNoaWZ0X3JpZ2h0LCB4bWF4LFwKKwkJCQkJCQl4aW52ZXJ0LCB0bHZfYXJyYXkpXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSAoeG5hbWUpLFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHxcCisJCSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFLFwKKwkudGx2LnAgPSAodGx2X2FycmF5KSwgXAorCS5pbmZvID0gc25kX3NvY19pbmZvX3ZvbHN3LCAuZ2V0ID0gdHdsNjA0MF9nZXRfdm9sc3csIFwKKwkucHV0ID0gdHdsNjA0MF9wdXRfdm9sc3csIFwKKwkucHJpdmF0ZV92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKSYoc3RydWN0IHNvY19taXhlcl9jb250cm9sKSBcCisJCXsucmVnID0geHJlZywgLnNoaWZ0ID0gc2hpZnRfbGVmdCwgLnJzaGlmdCA9IHNoaWZ0X3JpZ2h0LFwKKwkJIC5tYXggPSB4bWF4LCAucGxhdGZvcm1fbWF4ID0geG1heCwgLmludmVydCA9IHhpbnZlcnR9IH0KKworLyogZG91YmxlIGNvbnRyb2wgd2l0aCB2b2x1bWUgdXBkYXRlICovCisjZGVmaW5lIFNPQ19UV0w2MDQwX0RPVUJMRV9SX1RMVih4bmFtZSwgcmVnX2xlZnQsIHJlZ19yaWdodCwgeHNoaWZ0LCB4bWF4LFwKKwkJCQl4aW52ZXJ0LCB0bHZfYXJyYXkpXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSAoeG5hbWUpLFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwgXAorCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgXAorCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsIFwKKwkudGx2LnAgPSAodGx2X2FycmF5KSwgXAorCS5pbmZvID0gc25kX3NvY19pbmZvX3ZvbHN3XzJyLCBcCisJLmdldCA9IHR3bDYwNDBfZ2V0X3ZvbHN3XzJyLCAucHV0ID0gdHdsNjA0MF9wdXRfdm9sc3dfMnJfdnUsIFwKKwkucHJpdmF0ZV92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKSYoc3RydWN0IHNvY19taXhlcl9jb250cm9sKSBcCisJCXsucmVnID0gcmVnX2xlZnQsIC5ycmVnID0gcmVnX3JpZ2h0LCAuc2hpZnQgPSB4c2hpZnQsIFwKKwkJIC5yc2hpZnQgPSB4c2hpZnQsIC5tYXggPSB4bWF4LCAuaW52ZXJ0ID0geGludmVydH0sIH0KKwogLyoKICAqIE1JQ0FUVCB2b2x1bWUgY29udHJvbDoKICAqIGZyb20gLTYgdG8gMCBkQiBpbiA2IGRCIHN0ZXBzCkBAIC00MjQsOSArOTU0LDE1IEBACiAKIC8qCiAgKiBNSUNHQUlOIHZvbHVtZSBjb250cm9sOgotICogZnJvbSA2IHRvIDMwIGRCIGluIDYgZEIgc3RlcHMKKyAqIGZyb20gLTYgdG8gMzAgZEIgaW4gNiBkQiBzdGVwcwogICovCi1zdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUobWljX2FtcF90bHYsIDYwMCwgNjAwLCAwKTsKK3N0YXRpYyBERUNMQVJFX1RMVl9EQl9TQ0FMRShtaWNfYW1wX3RsdiwgLTYwMCwgNjAwLCAwKTsKKworLyoKKyAqIEFGTUdBSU4gdm9sdW1lIGNvbnRyb2w6CisgKiBmcm9tIDE4IHRvIDI0IGRCIGluIDYgZEIgc3RlcHMKKyAqLworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKGFmbV9hbXBfdGx2LCAxODAwLCA2MDAsIDApOwogCiAvKgogICogSFNHQUlOIHZvbHVtZSBjb250cm9sOgpAQCAtNDU1LDggKzk5MSwzMCBAQAogCXsiSGVhZHNldCBNaWMiLCAiU3ViIE1pYyIsICJBdXgvRk0gUmlnaHQiLCAiT2ZmIn07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gdHdsNjA0MF9lbnVtW10gPSB7Ci0JU09DX0VOVU1fU0lOR0xFKFRXTDYwNDBfUkVHX01JQ0xDVEwsIDMsIDMsIHR3bDYwNDBfYW1pY2xfdGV4dHMpLAotCVNPQ19FTlVNX1NJTkdMRShUV0w2MDQwX1JFR19NSUNSQ1RMLCAzLCAzLCB0d2w2MDQwX2FtaWNyX3RleHRzKSwKKwlTT0NfRU5VTV9TSU5HTEUoVFdMNjA0MF9SRUdfTUlDTENUTCwgMywgNCwgdHdsNjA0MF9hbWljbF90ZXh0cyksCisJU09DX0VOVU1fU0lOR0xFKFRXTDYwNDBfUkVHX01JQ1JDVEwsIDMsIDQsIHR3bDYwNDBfYW1pY3JfdGV4dHMpLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnR3bDYwNDBfaHNfdGV4dHNbXSA9IHsKKwkiT2ZmIiwgIkhTIERBQyIsICJMaW5lLUluIGFtcCIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gdHdsNjA0MF9oc19lbnVtW10gPSB7CisJU09DX0VOVU1fU0lOR0xFKFRXTDYwNDBfUkVHX0hTTENUTCwgNSwgQVJSQVlfU0laRSh0d2w2MDQwX2hzX3RleHRzKSwKKwkJCXR3bDYwNDBfaHNfdGV4dHMpLAorCVNPQ19FTlVNX1NJTkdMRShUV0w2MDQwX1JFR19IU1JDVEwsIDUsIEFSUkFZX1NJWkUodHdsNjA0MF9oc190ZXh0cyksCisJCQl0d2w2MDQwX2hzX3RleHRzKSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICp0d2w2MDQwX2hmX3RleHRzW10gPSB7CisJIk9mZiIsICJIRiBEQUMiLCAiTGluZS1JbiBhbXAiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHR3bDYwNDBfaGZfZW51bVtdID0geworCVNPQ19FTlVNX1NJTkdMRShUV0w2MDQwX1JFR19IRkxDVEwsIDIsIEFSUkFZX1NJWkUodHdsNjA0MF9oZl90ZXh0cyksCisJCQl0d2w2MDQwX2hmX3RleHRzKSwKKwlTT0NfRU5VTV9TSU5HTEUoVFdMNjA0MF9SRUdfSEZSQ1RMLCAyLCBBUlJBWV9TSVpFKHR3bDYwNDBfaGZfdGV4dHMpLAorCQkJdHdsNjA0MF9oZl90ZXh0cyksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYW1pY2xfY29udHJvbCA9CkBAIC00NjYsMTggKzEwMjQsMTggQEAKIAlTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHR3bDYwNDBfZW51bVsxXSk7CiAKIC8qIEhlYWRzZXQgREFDIHBsYXliYWNrIHN3aXRjaGVzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaHNkYWNsX3N3aXRjaF9jb250cm9scyA9Ci0JU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBUV0w2MDQwX1JFR19IU0xDVEwsIDUsIDEsIDApOworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhzbF9tdXhfY29udHJvbHMgPQorCVNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgdHdsNjA0MF9oc19lbnVtWzBdKTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhzZGFjcl9zd2l0Y2hfY29udHJvbHMgPQotCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgVFdMNjA0MF9SRUdfSFNSQ1RMLCA1LCAxLCAwKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBoc3JfbXV4X2NvbnRyb2xzID0KKwlTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHR3bDYwNDBfaHNfZW51bVsxXSk7CiAKIC8qIEhhbmRzZnJlZSBEQUMgcGxheWJhY2sgc3dpdGNoZXMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBoZmRhY2xfc3dpdGNoX2NvbnRyb2xzID0KLQlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFRXTDYwNDBfUkVHX0hGTENUTCwgMiwgMSwgMCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaGZsX211eF9jb250cm9scyA9CisJU09DX0RBUE1fRU5VTSgiUm91dGUiLCB0d2w2MDQwX2hmX2VudW1bMF0pOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaGZkYWNyX3N3aXRjaF9jb250cm9scyA9Ci0JU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBUV0w2MDQwX1JFR19IRlJDVEwsIDIsIDEsIDApOworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhmcl9tdXhfY29udHJvbHMgPQorCVNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgdHdsNjA0MF9oZl9lbnVtWzFdKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGVwX2RyaXZlcl9zd2l0Y2hfY29udHJvbHMgPQogCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgVFdMNjA0MF9SRUdfRUFSQ1RMLCAwLCAxLCAwKTsKQEAgLTQ4OSwxMCArMTA0NywxNCBAQAogCVNPQ19ET1VCTEVfVExWKCJDYXB0dXJlIFZvbHVtZSIsCiAJCVRXTDYwNDBfUkVHX01JQ0dBSU4sIDAsIDMsIDQsIDAsIG1pY19hbXBfdGx2KSwKIAorCS8qIEFGTSBnYWlucyAqLworCVNPQ19ET1VCTEVfVExWKCJBdXggRk0gVm9sdW1lIiwKKwkJVFdMNjA0MF9SRUdfTElORUdBSU4sIDAsIDQsIDB4RiwgMCwgYWZtX2FtcF90bHYpLAorCiAJLyogUGxheWJhY2sgZ2FpbnMgKi8KLQlTT0NfRE9VQkxFX1RMVigiSGVhZHNldCBQbGF5YmFjayBWb2x1bWUiLAorCVNPQ19UV0w2MDQwX0RPVUJMRV9UTFYoIkhlYWRzZXQgUGxheWJhY2sgVm9sdW1lIiwKIAkJVFdMNjA0MF9SRUdfSFNHQUlOLCAwLCA0LCAweEYsIDEsIGhzX3RsdiksCi0JU09DX0RPVUJMRV9SX1RMVigiSGFuZHNmcmVlIFBsYXliYWNrIFZvbHVtZSIsCisJU09DX1RXTDYwNDBfRE9VQkxFX1JfVExWKCJIYW5kc2ZyZWUgUGxheWJhY2sgVm9sdW1lIiwKIAkJVFdMNjA0MF9SRUdfSEZMR0FJTiwgVFdMNjA0MF9SRUdfSEZSR0FJTiwgMCwgMHgxRCwgMSwgaGZfdGx2KSwKIAlTT0NfU0lOR0xFX1RMVigiRWFycGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKIAkJVFdMNjA0MF9SRUdfRUFSQ1RMLCAxLCAweEYsIDEsIGVwX3RsdiksCkBAIC01MjUsNiArMTA4NywxMiBAQAogCVNORF9TT0NfREFQTV9QR0EoIk1pY0FtcFIiLAogCQkJVFdMNjA0MF9SRUdfTUlDUkNUTCwgMCwgMCwgTlVMTCwgMCksCiAKKwkvKiBBdXhpbGlhcnkgRk0gUEdBcyAqLworCVNORF9TT0NfREFQTV9QR0EoIkFGTUFtcEwiLAorCQkJVFdMNjA0MF9SRUdfTUlDTENUTCwgMSwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiQUZNQW1wUiIsCisJCQlUV0w2MDQwX1JFR19NSUNSQ1RMLCAxLCAwLCBOVUxMLCAwKSwKKwogCS8qIEFEQ3MgKi8KIAlTTkRfU09DX0RBUE1fQURDKCJBREMgTGVmdCIsICJMZWZ0IEZyb250IENhcHR1cmUiLAogCQkJVFdMNjA0MF9SRUdfTUlDTENUTCwgMiwgMCksCkBAIC01NTksMjkgKzExMjcsMzMgQEAKIAkJCXR3bDYwNDBfcG93ZXJfbW9kZV9ldmVudCwKIAkJCVNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCiAKLQkvKiBBbmFsb2cgcGxheWJhY2sgc3dpdGNoZXMgKi8KLQlTTkRfU09DX0RBUE1fU1dJVENIKCJIU0RBQyBMZWZ0IFBsYXliYWNrIiwKLQkJCVNORF9TT0NfTk9QTSwgMCwgMCwgJmhzZGFjbF9zd2l0Y2hfY29udHJvbHMpLAotCVNORF9TT0NfREFQTV9TV0lUQ0goIkhTREFDIFJpZ2h0IFBsYXliYWNrIiwKLQkJCVNORF9TT0NfTk9QTSwgMCwgMCwgJmhzZGFjcl9zd2l0Y2hfY29udHJvbHMpLAotCVNORF9TT0NfREFQTV9TV0lUQ0goIkhGREFDIExlZnQgUGxheWJhY2siLAotCQkJU05EX1NPQ19OT1BNLCAwLCAwLCAmaGZkYWNsX3N3aXRjaF9jb250cm9scyksCi0JU05EX1NPQ19EQVBNX1NXSVRDSCgiSEZEQUMgUmlnaHQgUGxheWJhY2siLAotCQkJU05EX1NPQ19OT1BNLCAwLCAwLCAmaGZkYWNyX3N3aXRjaF9jb250cm9scyksCisJU05EX1NPQ19EQVBNX01VWCgiSEYgTGVmdCBQbGF5YmFjayIsCisJCQlTTkRfU09DX05PUE0sIDAsIDAsICZoZmxfbXV4X2NvbnRyb2xzKSwKKwlTTkRfU09DX0RBUE1fTVVYKCJIRiBSaWdodCBQbGF5YmFjayIsCisJCQlTTkRfU09DX05PUE0sIDAsIDAsICZoZnJfbXV4X2NvbnRyb2xzKSwKKwkvKiBBbmFsb2cgcGxheWJhY2sgTXV4ZXMgKi8KKwlTTkRfU09DX0RBUE1fTVVYKCJIUyBMZWZ0IFBsYXliYWNrIiwKKwkJCVNORF9TT0NfTk9QTSwgMCwgMCwgJmhzbF9tdXhfY29udHJvbHMpLAorCVNORF9TT0NfREFQTV9NVVgoIkhTIFJpZ2h0IFBsYXliYWNrIiwKKwkJCVNORF9TT0NfTk9QTSwgMCwgMCwgJmhzcl9tdXhfY29udHJvbHMpLAogCiAJLyogQW5hbG9nIHBsYXliYWNrIGRyaXZlcnMgKi8KLQlTTkRfU09DX0RBUE1fUEdBX0UoIkhhbmRzZnJlZSBMZWZ0IERyaXZlciIsCisJU05EX1NPQ19EQVBNX09VVF9EUlZfRSgiSGFuZHNmcmVlIExlZnQgRHJpdmVyIiwKIAkJCVRXTDYwNDBfUkVHX0hGTENUTCwgNCwgMCwgTlVMTCwgMCwKLQkJCXR3bDYwNDBfcG93ZXJfbW9kZV9ldmVudCwKLQkJCVNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCi0JU05EX1NPQ19EQVBNX1BHQV9FKCJIYW5kc2ZyZWUgUmlnaHQgRHJpdmVyIiwKKwkJCXBnYV9ldmVudCwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKKwlTTkRfU09DX0RBUE1fT1VUX0RSVl9FKCJIYW5kc2ZyZWUgUmlnaHQgRHJpdmVyIiwKIAkJCVRXTDYwNDBfUkVHX0hGUkNUTCwgNCwgMCwgTlVMTCwgMCwKLQkJCXR3bDYwNDBfcG93ZXJfbW9kZV9ldmVudCwKLQkJCVNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCi0JU05EX1NPQ19EQVBNX1BHQSgiSGVhZHNldCBMZWZ0IERyaXZlciIsCi0JCQlUV0w2MDQwX1JFR19IU0xDVEwsIDIsIDAsIE5VTEwsIDApLAotCVNORF9TT0NfREFQTV9QR0EoIkhlYWRzZXQgUmlnaHQgRHJpdmVyIiwKLQkJCVRXTDYwNDBfUkVHX0hTUkNUTCwgMiwgMCwgTlVMTCwgMCksCisJCQlwZ2FfZXZlbnQsCisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisJU05EX1NPQ19EQVBNX09VVF9EUlZfRSgiSGVhZHNldCBMZWZ0IERyaXZlciIsCisJCQlUV0w2MDQwX1JFR19IU0xDVEwsIDIsIDAsIE5VTEwsIDAsCisJCQlwZ2FfZXZlbnQsCisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisJU05EX1NPQ19EQVBNX09VVF9EUlZfRSgiSGVhZHNldCBSaWdodCBEcml2ZXIiLAorCQkJVFdMNjA0MF9SRUdfSFNSQ1RMLCAyLCAwLCBOVUxMLCAwLAorCQkJcGdhX2V2ZW50LAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAogCVNORF9TT0NfREFQTV9TV0lUQ0hfRSgiRWFycGhvbmUgRHJpdmVyIiwKIAkJCVNORF9TT0NfTk9QTSwgMCwgMCwgJmVwX2RyaXZlcl9zd2l0Y2hfY29udHJvbHMsCiAJCQl0d2w2MDQwX3Bvd2VyX21vZGVfZXZlbnQsCkBAIC02MTEsMTIgKzExODMsMTggQEAKIAl7IkFEQyBMZWZ0IiwgTlVMTCwgIk1pY0FtcEwifSwKIAl7IkFEQyBSaWdodCIsIE5VTEwsICJNaWNBbXBSIn0sCiAKLQkvKiBIZWFkc2V0IHBsYXliYWNrIHBhdGggKi8KLQl7IkhTREFDIExlZnQgUGxheWJhY2siLCAiU3dpdGNoIiwgIkhTREFDIExlZnQifSwKLQl7IkhTREFDIFJpZ2h0IFBsYXliYWNrIiwgIlN3aXRjaCIsICJIU0RBQyBSaWdodCJ9LAorCS8qIEFGTSBwYXRoICovCisJeyJBRk1BbXBMIiwgIk5VTEwiLCAiQUZNTCJ9LAorCXsiQUZNQW1wUiIsICJOVUxMIiwgIkFGTVIifSwKIAotCXsiSGVhZHNldCBMZWZ0IERyaXZlciIsIE5VTEwsICJIU0RBQyBMZWZ0IFBsYXliYWNrIn0sCi0JeyJIZWFkc2V0IFJpZ2h0IERyaXZlciIsIE5VTEwsICJIU0RBQyBSaWdodCBQbGF5YmFjayJ9LAorCXsiSFMgTGVmdCBQbGF5YmFjayIsICJIUyBEQUMiLCAiSFNEQUMgTGVmdCJ9LAorCXsiSFMgTGVmdCBQbGF5YmFjayIsICJMaW5lLUluIGFtcCIsICJBRk1BbXBMIn0sCisKKwl7IkhTIFJpZ2h0IFBsYXliYWNrIiwgIkhTIERBQyIsICJIU0RBQyBSaWdodCJ9LAorCXsiSFMgUmlnaHQgUGxheWJhY2siLCAiTGluZS1JbiBhbXAiLCAiQUZNQW1wUiJ9LAorCisJeyJIZWFkc2V0IExlZnQgRHJpdmVyIiwgIk5VTEwiLCAiSFMgTGVmdCBQbGF5YmFjayJ9LAorCXsiSGVhZHNldCBSaWdodCBEcml2ZXIiLCAiTlVMTCIsICJIUyBSaWdodCBQbGF5YmFjayJ9LAogCiAJeyJIU09MIiwgTlVMTCwgIkhlYWRzZXQgTGVmdCBEcml2ZXIifSwKIAl7IkhTT1IiLCBOVUxMLCAiSGVhZHNldCBSaWdodCBEcml2ZXIifSwKQEAgLTYyNSwxMiArMTIwMywxNCBAQAogCXsiRWFycGhvbmUgRHJpdmVyIiwgIlN3aXRjaCIsICJIU0RBQyBMZWZ0In0sCiAJeyJFUCIsIE5VTEwsICJFYXJwaG9uZSBEcml2ZXIifSwKIAotCS8qIEhhbmRzZnJlZSBwbGF5YmFjayBwYXRoICovCi0JeyJIRkRBQyBMZWZ0IFBsYXliYWNrIiwgIlN3aXRjaCIsICJIRkRBQyBMZWZ0In0sCi0JeyJIRkRBQyBSaWdodCBQbGF5YmFjayIsICJTd2l0Y2giLCAiSEZEQUMgUmlnaHQifSwKKwl7IkhGIExlZnQgUGxheWJhY2siLCAiSEYgREFDIiwgIkhGREFDIExlZnQifSwKKwl7IkhGIExlZnQgUGxheWJhY2siLCAiTGluZS1JbiBhbXAiLCAiQUZNQW1wTCJ9LAogCi0JeyJIRkRBQyBMZWZ0IFBHQSIsIE5VTEwsICJIRkRBQyBMZWZ0IFBsYXliYWNrIn0sCi0JeyJIRkRBQyBSaWdodCBQR0EiLCBOVUxMLCAiSEZEQUMgUmlnaHQgUGxheWJhY2sifSwKKwl7IkhGIFJpZ2h0IFBsYXliYWNrIiwgIkhGIERBQyIsICJIRkRBQyBSaWdodCJ9LAorCXsiSEYgUmlnaHQgUGxheWJhY2siLCAiTGluZS1JbiBhbXAiLCAiQUZNQW1wUiJ9LAorCisJeyJIRkRBQyBMZWZ0IFBHQSIsIE5VTEwsICJIRiBMZWZ0IFBsYXliYWNrIn0sCisJeyJIRkRBQyBSaWdodCBQR0EiLCBOVUxMLCAiSEYgUmlnaHQgUGxheWJhY2sifSwKIAogCXsiSGFuZHNmcmVlIExlZnQgRHJpdmVyIiwgIlN3aXRjaCIsICJIRkRBQyBMZWZ0IFBHQSJ9LAogCXsiSGFuZHNmcmVlIFJpZ2h0IERyaXZlciIsICJTd2l0Y2giLCAiSEZEQUMgUmlnaHQgUEdBIn0sCkBAIC02NDEsMTIgKzEyMjEsMTIgQEAKIAogc3RhdGljIGludCB0d2w2MDQwX2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB0d2w2MDQwX2RhcG1fd2lkZ2V0cywKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CisKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHR3bDYwNDBfZGFwbV93aWRnZXRzLAogCQkJCSBBUlJBWV9TSVpFKHR3bDYwNDBfZGFwbV93aWRnZXRzKSk7Ci0KLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKLQotCXNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhjb2RlYyk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKKwlzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoZGFwbSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY1OSwxMCArMTIzOSwxMCBAQAogCXU4IGludGlkOwogCiAJdGltZV9sZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZwcml2LT5yZWFkeSwKLQkJCQltc2Vjc190b19qaWZmaWVzKDQ4KSk7CisJCQkJbXNlY3NfdG9famlmZmllcygxNDQpKTsKIAogCWlmICghdGltZV9sZWZ0KSB7Ci0JCXR3bF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwgJmludGlkLAorCQl0d2xfaTJjX3JlYWRfdTgoVFdMX01PRFVMRV9BVURJT19WT0lDRSwgJmludGlkLAogCQkJCQkJCVRXTDYwNDBfUkVHX0lOVElEKTsKIAkJaWYgKCEoaW50aWQgJiBUV0w2MDQwX1JFQURZSU5UKSkgewogCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBSRUFEWUlOVFxuIik7CkBAIC03MTMsNiArMTI5MywxNSBAQAogCiAJCS8qIGluaXRpYWxpemUgdmRkL3ZzcyByZWdpc3RlcnMgd2l0aCByZWdfY2FjaGUgKi8KIAkJdHdsNjA0MF9pbml0X3ZkZF9yZWdzKGNvZGVjKTsKKworCQkvKiBTZXQgZXh0ZXJuYWwgYm9vc3QgR1BPICovCisJCXR3bDYwNDBfd3JpdGUoY29kZWMsIFRXTDYwNDBfUkVHX0dQT0NUTCwgMHgwMik7CisKKwkJLyogU2V0IGluaXRpYWwgbWluaW1hbCBnYWluIHZhbHVlcyAqLworCQl0d2w2MDQwX3dyaXRlKGNvZGVjLCBUV0w2MDQwX1JFR19IU0dBSU4sIDB4RkYpOworCQl0d2w2MDQwX3dyaXRlKGNvZGVjLCBUV0w2MDQwX1JFR19FQVJDVEwsIDB4MUUpOworCQl0d2w2MDQwX3dyaXRlKGNvZGVjLCBUV0w2MDQwX1JFR19IRkxHQUlOLCAweDFEKTsKKwkJdHdsNjA0MF93cml0ZShjb2RlYywgVFdMNjA0MF9SRUdfSEZSR0FJTiwgMHgxRCk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKIAkJaWYgKCFwcml2LT5jb2RlY19wb3dlcmVkKQpAQCAtNzM5LDcgKzEzMjgsNyBAQAogCQlicmVhazsKIAl9CiAKLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAogCXJldHVybiAwOwogfQpAQCAtNzcyLDIzICsxMzYxLDYgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwogCXN0cnVjdCB0d2w2MDQwX2RhdGEgKnByaXYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAotCWlmICghcHJpdi0+c3lzY2xrKSB7Ci0JCWRldl9lcnIoY29kZWMtPmRldiwKLQkJCSJubyBtY2xrIGNvbmZpZ3VyZWQsIGNhbGwgc2V0X3N5c2NsaygpIG9uIGluaXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIGNhcHR1cmUgaXMgbm90IHN1cHBvcnRlZCBhdCAxNy42NCBNSHosCi0JICogaXQncyByZXNlcnZlZCBmb3IgaGVhZHNldCBsb3ctcG93ZXIgcGxheWJhY2sgc2NlbmFyaW8KLQkgKi8KLQlpZiAoKHByaXYtPnN5c2NsayA9PSAxNzY0MDAwMCkgJiYgc3Vic3RyZWFtLT5zdHJlYW0pIHsKLQkJZGV2X2Vycihjb2RlYy0+ZGV2LAotCQkJImNhcHR1cmUgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIGF0ICVkSHpcbiIsCi0JCQlwcml2LT5zeXNjbGspOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCiAJCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCiAJCQkJcHJpdi0+c3lzY2xrX2NvbnN0cmFpbnRzKTsKQEAgLTgxNCwxMCArMTM4NiwxNyBAQAogCiAJcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CiAJc3dpdGNoIChyYXRlKSB7CisJY2FzZSAxMTI1MDoKKwljYXNlIDIyNTAwOgorCWNhc2UgNDQxMDA6CiAJY2FzZSA4ODIwMDoKIAkJbHBwbGxjdGwgfD0gVFdMNjA0MF9MUExMRklOOwogCQlwcml2LT5zeXNjbGsgPSAxNzY0MDAwMDsKIAkJYnJlYWs7CisJY2FzZSA4MDAwOgorCWNhc2UgMTYwMDA6CisJY2FzZSAzMjAwMDoKKwljYXNlIDQ4MDAwOgogCWNhc2UgOTYwMDA6CiAJCWxwcGxsY3RsICY9IH5UV0w2MDQwX0xQTExGSU47CiAJCXByaXYtPnN5c2NsayA9IDE5MjAwMDAwOwpAQCAtODMyLDMxICsxNDExLDM3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdHdsNjA0MF90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJaW50IGNtZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCitzdGF0aWMgaW50IHR3bDYwNDBfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwogCXN0cnVjdCB0d2w2MDQwX2RhdGEgKnByaXYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKLQkJLyoKLQkJICogbG93LXBvd2VyIHBsYXliYWNrIG1vZGUgaXMgcmVzdHJpY3RlZAotCQkgKiBmb3IgaGVhZHNldCBwYXRoIG9ubHkKLQkJICovCi0JCWlmICgocHJpdi0+c3lzY2xrID09IDE3NjQwMDAwKSAmJiBwcml2LT5ub25fbHApIHsKKwlpZiAoIXByaXYtPnN5c2NsaykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkibm8gbWNsayBjb25maWd1cmVkLCBjYWxsIHNldF9zeXNjbGsoKSBvbiBpbml0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBjYXB0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYXQgMTcuNjQgTUh6LAorCSAqIGl0J3MgcmVzZXJ2ZWQgZm9yIGhlYWRzZXQgbG93LXBvd2VyIHBsYXliYWNrIHNjZW5hcmlvCisJICovCisJaWYgKChwcml2LT5zeXNjbGsgPT0gMTc2NDAwMDApICYmCisJCQlzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJImNhcHR1cmUgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIGF0ICVkSHpcbiIsCisJCQlwcml2LT5zeXNjbGspOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKHByaXYtPnN5c2NsayA9PSAxNzY0MDAwMCkgJiYgcHJpdi0+bm9uX2xwKSB7CiAJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCiAJCQkJInNvbWUgZW5hYmxlZCBwYXRocyBhcmVuJ3Qgc3VwcG9ydGVkIGF0ICVkSHpcbiIsCiAJCQkJcHJpdi0+c3lzY2xrKTsKIAkJCXJldHVybiAtRVBFUk07Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk3MCw3ICsxNTU1LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHR3bDYwNDBfZGFpX29wcyA9IHsKIAkuc3RhcnR1cAk9IHR3bDYwNDBfc3RhcnR1cCwKIAkuaHdfcGFyYW1zCT0gdHdsNjA0MF9od19wYXJhbXMsCi0JLnRyaWdnZXIJPSB0d2w2MDQwX3RyaWdnZXIsCisJLnByZXBhcmUJPSB0d2w2MDQwX3ByZXBhcmUsCiAJLnNldF9zeXNjbGsJPSB0d2w2MDQwX3NldF9kYWlfc3lzY2xrLAogfTsKIApAQCAtMTAwNCw2ICsxNTg5LDcgQEAKIHN0YXRpYyBpbnQgdHdsNjA0MF9yZXN1bWUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCXR3bDYwNDBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKwl0d2w2MDQwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBjb2RlYy0+ZGFwbS5zdXNwZW5kX2JpYXNfbGV2ZWwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDE4LDI0ICsxNjA0LDQxIEBACiAJc3RydWN0IHR3bDYwNDBfZGF0YSAqcHJpdjsKIAlpbnQgYXVkcHdyb24sIG5hdWRpbnQ7CiAJaW50IHJldCA9IDA7CisJdTggaWNyZXYsIGludG1yID0gVFdMNjA0MF9BTExJTlRfTVNLOwogCiAJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0d2w2MDQwX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJpdiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzbmRfc29jX2NvZGVjX3NldF9kcnZkYXRhKGNvZGVjLCBwcml2KTsKIAotCWlmICh0d2xfY29kZWMpIHsKKwlwcml2LT5jb2RlYyA9IGNvZGVjOworCisJdHdsX2kyY19yZWFkX3U4KFRXTF9NT0RVTEVfQVVESU9fVk9JQ0UsICZpY3JldiwgVFdMNjA0MF9SRUdfQVNJQ1JFVik7CisKKwlpZiAodHdsX2NvZGVjICYmIChpY3JldiA+IDApKQogCQlhdWRwd3JvbiA9IHR3bF9jb2RlYy0+YXVkcHdyb25fZ3BpbzsKLQkJbmF1ZGludCA9IHR3bF9jb2RlYy0+bmF1ZGludF9pcnE7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWF1ZHB3cm9uID0gLUVJTlZBTDsKKworCWlmICh0d2xfY29kZWMpCisJCW5hdWRpbnQgPSB0d2xfY29kZWMtPm5hdWRpbnRfaXJxOworCWVsc2UKIAkJbmF1ZGludCA9IDA7Ci0JfQogCiAJcHJpdi0+YXVkcHdyb24gPSBhdWRwd3JvbjsKIAlwcml2LT5uYXVkaW50ID0gbmF1ZGludDsKKwlwcml2LT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgidHdsNjA0MC1jb2RlYyIpOworCisJaWYgKCFwcml2LT53b3JrcXVldWUpCisJCWdvdG8gd29ya19lcnI7CisKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+ZGVsYXllZF93b3JrLCB0d2w2MDQwX2FjY2Vzc29yeV93b3JrKTsKKworCW11dGV4X2luaXQoJnByaXYtPm11dGV4KTsKIAogCWluaXRfY29tcGxldGlvbigmcHJpdi0+cmVhZHkpOworCWluaXRfY29tcGxldGlvbigmcHJpdi0+aGVhZHNldC5yYW1wX2RvbmUpOworCWluaXRfY29tcGxldGlvbigmcHJpdi0+aGFuZHNmcmVlLnJhbXBfZG9uZSk7CiAKIAlpZiAoZ3Bpb19pc192YWxpZChhdWRwd3JvbikpIHsKIAkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGF1ZHB3cm9uLCAiYXVkcHdyb24iKTsKQEAgLTEwNDcsNyArMTY1MCwxNCBAQAogCQkJZ290byBncGlvMl9lcnI7CiAKIAkJcHJpdi0+Y29kZWNfcG93ZXJlZCA9IDA7CisKKwkJLyogZW5hYmxlIG9ubHkgY29kZWMgcmVhZHkgaW50ZXJydXB0ICovCisJCWludG1yICY9IH4oVFdMNjA0MF9SRUFEWU1TSyB8IFRXTDYwNDBfUExVR01TSyk7CisKKwkJLyogcmVzZXQgaW50ZXJydXB0IHN0YXR1cyB0byBhbGxvdyBjb3JyZWN0IHBvd2VyIHVwIHNlcXVlbmNlICovCisJCXR3bDYwNDBfcmVhZF9yZWdfdm9sYXRpbGUoY29kZWMsIFRXTDYwNDBfUkVHX0lOVElEKTsKIAl9CisJdHdsNjA0MF93cml0ZShjb2RlYywgVFdMNjA0MF9SRUdfSU5UTVIsIGludG1yKTsKIAogCWlmIChuYXVkaW50KSB7CiAJCS8qIGF1ZGlvIGludGVycnVwdCAqLwpAQCAtMTA1NywyNSArMTY2NywyOSBAQAogCQkJCSJ0d2w2MDQwX2NvZGVjIiwgY29kZWMpOwogCQlpZiAocmV0KQogCQkJZ290byBncGlvMl9lcnI7Ci0JfSBlbHNlIHsKLQkJaWYgKGdwaW9faXNfdmFsaWQoYXVkcHdyb24pKSB7Ci0JCQkvKiBlbmFibGUgb25seSBjb2RlYyByZWFkeSBpbnRlcnJ1cHQgKi8KLQkJCXR3bDYwNDBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCBUV0w2MDQwX1JFR19JTlRNUiwKLQkJCQkJflRXTDYwNDBfUkVBRFlNU0sgJiBUV0w2MDQwX0FMTElOVF9NU0spOwotCQl9IGVsc2UgewotCQkJLyogbm8gaW50ZXJydXB0cyBhdCBhbGwgKi8KLQkJCXR3bDYwNDBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCBUV0w2MDQwX1JFR19JTlRNUiwKLQkJCQkJCVRXTDYwNDBfQUxMSU5UX01TSyk7Ci0JCX0KIAl9CiAKIAkvKiBpbml0IHZpbyByZWdpc3RlcnMgKi8KIAl0d2w2MDQwX2luaXRfdmlvX3JlZ3MoY29kZWMpOwogCisJcHJpdi0+aGZfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInR3bDYwNDAtaGYiKTsKKwlpZiAocHJpdi0+aGZfd29ya3F1ZXVlID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBpcnFfZXJyOworCX0KKwlwcml2LT5oc193b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgidHdsNjA0MC1ocyIpOworCWlmIChwcml2LT5oc193b3JrcXVldWUgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHdxX2VycjsKKwl9CisKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aHNfZGVsYXllZF93b3JrLCB0d2w2MDQwX3BnYV9oc193b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aGZfZGVsYXllZF93b3JrLCB0d2w2MDQwX3BnYV9oZl93b3JrKTsKKwogCS8qIHBvd2VyIG9uIGRldmljZSAqLwogCXJldCA9IHR3bDYwNDBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAlpZiAocmV0KQotCQlnb3RvIGlycV9lcnI7CisJCWdvdG8gYmlhc19lcnI7CiAKIAlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgdHdsNjA0MF9zbmRfY29udHJvbHMsCiAJCQkJQVJSQVlfU0laRSh0d2w2MDQwX3NuZF9jb250cm9scykpOwpAQCAtMTA4Myw2ICsxNjk3LDEwIEBACiAKIAlyZXR1cm4gMDsKIAorYmlhc19lcnI6CisJZGVzdHJveV93b3JrcXVldWUocHJpdi0+aHNfd29ya3F1ZXVlKTsKK3dxX2VycjoKKwlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT5oZl93b3JrcXVldWUpOwogaXJxX2VycjoKIAlpZiAobmF1ZGludCkKIAkJZnJlZV9pcnEobmF1ZGludCwgY29kZWMpOwpAQCAtMTA5MCw2ICsxNzA4LDggQEAKIAlpZiAoZ3Bpb19pc192YWxpZChhdWRwd3JvbikpCiAJCWdwaW9fZnJlZShhdWRwd3Jvbik7CiBncGlvMV9lcnI6CisJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKK3dvcmtfZXJyOgogCWtmcmVlKHByaXYpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMTA4LDYgKzE3MjgsOSBAQAogCWlmIChuYXVkaW50KQogCQlmcmVlX2lycShuYXVkaW50LCBjb2RlYyk7CiAKKwlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOworCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPmhmX3dvcmtxdWV1ZSk7CisJZGVzdHJveV93b3JrcXVldWUocHJpdi0+aHNfd29ya3F1ZXVlKTsKIAlrZnJlZShwcml2KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90d2w2MDQwLmggYi9zb3VuZC9zb2MvY29kZWNzL3R3bDYwNDAuaAppbmRleCBmN2M3N2ZhLi4yM2FlZWQwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3R3bDYwNDAuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDYwNDAuaApAQCAtNzksNiArNzksNyBAQAogCiAvKiBJTlRNUiAoMHgwNCkgZmllbGRzICovCiAKKyNkZWZpbmUgVFdMNjA0MF9QTFVHTVNLCQkJMHgwMgogI2RlZmluZSBUV0w2MDQwX1JFQURZTVNLCQkweDQwCiAjZGVmaW5lIFRXTDYwNDBfQUxMSU5UX01TSwkJMHg3QgogCkBAIC0xMzUsNCArMTM2LDExIEBACiAjZGVmaW5lIFRXTDYwNDBfSFBQTExfSUQJCTEKICNkZWZpbmUgVFdMNjA0MF9MUFBMTF9JRAkJMgogCisvKiBTVEFUVVMgKDB4MkUpIGZpZWxkcyAqLworCisjZGVmaW5lIFRXTDYwNDBfUExVR0NPTVAJCTB4MDIKKwordm9pZCB0d2w2MDQwX2hzX2phY2tfZGV0ZWN0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgcmVwb3J0KTsKKwogI2VuZGlmIC8qIEVuZCBvZiBfX1RXTDYwNDBfSF9fICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguYyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCmluZGV4IDQ2NGYwY2YuLmU3Njg0N2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCiAjaW5jbHVkZSA8c291bmQvdWRhMTM0eC5oPgpAQCAtMzg5LDcgKzM4OCw3IEBACiAJCQlwZC0+cG93ZXIoMCk7CiAJCWJyZWFrOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYwppbmRleCAwYzZjNzI1Li5jNWNhOGNmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KICNpbmNsdWRlIDxzb3VuZC91ZGExMzgwLmg+CiAKQEAgLTM2LDcgKzM1LDYgQEAKIC8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLwogc3RydWN0IHVkYTEzODBfcHJpdiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCXUxNiByZWdfY2FjaGVbVURBMTM4MF9DQUNIRVJFR05VTV07CiAJdW5zaWduZWQgaW50IGRhY19jbGs7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJdm9pZCAqY29udHJvbF9kYXRhOwpAQCAtNDE0LDEwICs0MTIsMTEgQEAKIAogc3RhdGljIGludCB1ZGExMzgwX2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB1ZGExMzgwX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUodWRhMTM4MF9kYXBtX3dpZGdldHMpKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgdWRhMTM4MF9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHVkYTEzODBfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MDMsNyArNjAyLDcgQEAKIAlpbnQgcmVnOwogCXN0cnVjdCB1ZGExMzgwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY29kZWMtPmRldi0+cGxhdGZvcm1fZGF0YTsKIAotCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBsZXZlbCkKKwlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBsZXZlbCkKIAkJcmV0dXJuIDA7CiAKIAlzd2l0Y2ggKGxldmVsKSB7CkBAIC02MTMsNyArNjEyLDcgQEAKIAkJdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9QTSwgUjAyX1BPTl9CSUFTIHwgcG0pOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CiAJCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19wb3dlcikpIHsKIAkJCQlncGlvX3NldF92YWx1ZShwZGF0YS0+Z3Bpb19wb3dlciwgMSk7CiAJCQkJbWRlbGF5KDEpOwpAQCAtNjM2LDcgKzYzNSw3IEBACiAJCWZvciAocmVnID0gVURBMTM4MF9NVk9MOyByZWcgPCBVREExMzgwX0NBQ0hFUkVHTlVNOyByZWcrKykKIAkJCXNldF9iaXQocmVnIC0gMHgxMCwgJnVkYTEzODBfY2FjaGVfZGlydHkpOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bDEyNzMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd2wxMjczLmMKaW5kZXggMGM0N2M3OC4uZDNmZmEyZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bDEyNzMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dsMTI3My5jCkBAIC0yNSw4ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFpLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAKICNpbmNsdWRlICJ3bDEyNzMuaCIKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtMjAwMC5jCmluZGV4IDRiY2QxNjguLjgwZGRmNGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTIwMDAuYwpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KIApAQCAtNzA1LDYgKzcwNCw3IEBACiAvKiBDYWxsZWQgZnJvbSB0aGUgbWFjaGluZSBkcml2ZXIgKi8KIGludCB3bTIwMDBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IHJldDsKIAogCWlmICghd20yMDAwX2kyYykgewpAQCAtNzEyLDEyICs3MTIsMTIgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd20yMDAwX2RhcG1fd2lkZ2V0cywKKwlyZXQgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtMjAwMF9kYXBtX3dpZGdldHMsCiAJCQkJCUFSUkFZX1NJWkUod20yMDAwX2RhcG1fd2lkZ2V0cykpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlyZXQgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCmluZGV4IDc2MTFhZGQuLjZkNmRjOWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYwpAQCAtMjQsOSArMjQsOSBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvYXNvYy5oPgogCiAjaW5jbHVkZSAid204MzUwLmgiCiAKQEAgLTU0LDYgKzU0LDcgQEAKIAogc3RydWN0IHdtODM1MF9qYWNrX2RhdGEgewogCXN0cnVjdCBzbmRfc29jX2phY2sgKmphY2s7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCWludCByZXBvcnQ7CiAJaW50IHNob3J0X3JlcG9ydDsKIH07CkBAIC0yMzAsOCArMjMxLDkgQEAKICAqLwogc3RhdGljIHZvaWQgd204MzUwX3BnYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPQotCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNuZF9zb2NfY29kZWMsIGRlbGF5ZWRfd29yay53b3JrKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0LCBkZWxheWVkX3dvcmsud29yayk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFwbS0+Y29kZWM7CiAJc3RydWN0IHdtODM1MF9kYXRhICp3bTgzNTBfZGF0YSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCXN0cnVjdCB3bTgzNTBfb3V0cHV0ICpvdXQxID0gJndtODM1MF9kYXRhLT5vdXQxLAogCSAgICAqb3V0MiA9ICZ3bTgzNTBfZGF0YS0+b3V0MjsKQEAgLTMwMiw4ICszMDQsOCBAQAogCQlvdXQtPnJhbXAgPSBXTTgzNTBfUkFNUF9VUDsKIAkJb3V0LT5hY3RpdmUgPSAxOwogCi0JCWlmICghZGVsYXllZF93b3JrX3BlbmRpbmcoJmNvZGVjLT5kZWxheWVkX3dvcmspKQotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjb2RlYy0+ZGVsYXllZF93b3JrLAorCQlpZiAoIWRlbGF5ZWRfd29ya19wZW5kaW5nKCZjb2RlYy0+ZGFwbS5kZWxheWVkX3dvcmspKQorCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjb2RlYy0+ZGFwbS5kZWxheWVkX3dvcmssCiAJCQkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMSkpOwogCQlicmVhazsKIApAQCAtMzExLDggKzMxMyw4IEBACiAJCW91dC0+cmFtcCA9IFdNODM1MF9SQU1QX0RPV047CiAJCW91dC0+YWN0aXZlID0gMDsKIAotCQlpZiAoIWRlbGF5ZWRfd29ya19wZW5kaW5nKCZjb2RlYy0+ZGVsYXllZF93b3JrKSkKLQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY29kZWMtPmRlbGF5ZWRfd29yaywKKwkJaWYgKCFkZWxheWVkX3dvcmtfcGVuZGluZygmY29kZWMtPmRhcG0uZGVsYXllZF93b3JrKSkKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY29kZWMtPmRhcG0uZGVsYXllZF93b3JrLAogCQkJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKDEpKTsKIAkJYnJlYWs7CiAJfQpAQCAtNzg2LDkgKzc4OCwxMCBAQAogCiBzdGF0aWMgaW50IHdtODM1MF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCWludCByZXQ7CiAKLQlyZXQgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLAorCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwKIAkJCQkJd204MzUwX2RhcG1fd2lkZ2V0cywKIAkJCQkJQVJSQVlfU0laRSh3bTgzNTBfZGFwbV93aWRnZXRzKSk7CiAJaWYgKHJldCAhPSAwKSB7CkBAIC03OTcsNyArODAwLDcgQEAKIAl9CiAKIAkvKiBzZXQgdXAgYXVkaW8gcGF0aHMgKi8KLQlyZXQgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXJldCA9IHNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiREFQTSByb3V0ZSByZWdpc3RlciBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwpAQCAtMTE4NCw3ICsxMTg3LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CiAJCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShwcml2LT5zdXBwbGllcyksCiAJCQkJCQkgICAgcHJpdi0+c3VwcGxpZXMpOwogCQkJaWYgKHJldCAhPSAwKQpAQCAtMTMxNyw3ICsxMzIwLDcgQEAKIAkJCQkgICAgICAgcHJpdi0+c3VwcGxpZXMpOwogCQlicmVhazsKIAl9Ci0JY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gbGV2ZWw7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzMzQsMzcgKzEzMzcsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlycXJldHVybl90IHdtODM1MF9ocF9qYWNrX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIHdtODM1MF9ocF93b3JrKHN0cnVjdCB3bTgzNTBfZGF0YSAqcHJpdiwKKwkJCSAgIHN0cnVjdCB3bTgzNTBfamFja19kYXRhICpqYWNrLAorCQkJICAgdTE2IG1hc2spCiB7Ci0Jc3RydWN0IHdtODM1MF9kYXRhICpwcml2ID0gZGF0YTsKIAlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBwcml2LT5jb2RlYy5jb250cm9sX2RhdGE7CiAJdTE2IHJlZzsKIAlpbnQgcmVwb3J0OwotCWludCBtYXNrOwotCXN0cnVjdCB3bTgzNTBfamFja19kYXRhICpqYWNrID0gTlVMTDsKLQotCXN3aXRjaCAoaXJxIC0gd204MzUwLT5pcnFfYmFzZSkgewotCWNhc2UgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0w6Ci0JCWphY2sgPSAmcHJpdi0+aHBsOwotCQltYXNrID0gV004MzUwX0pBQ0tfTF9MVkw7Ci0JCWJyZWFrOwotCi0JY2FzZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUjoKLQkJamFjayA9ICZwcml2LT5ocHI7Ci0JCW1hc2sgPSBXTTgzNTBfSkFDS19SX0xWTDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9Ci0KLQlpZiAoIWphY2stPmphY2spIHsKLQkJZGV2X3dhcm4od204MzUwLT5kZXYsICJKYWNrIGludGVycnVwdCBjYWxsZWQgd2l0aCBubyBqYWNrXG4iKTsKLQkJcmV0dXJuIElSUV9OT05FOwotCX0KLQotCS8qIERlYm91bmNlICovCi0JbXNsZWVwKDIwMCk7CiAKIAlyZWcgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfSkFDS19QSU5fU1RBVFVTKTsKIAlpZiAocmVnICYgbWFzaykKQEAgLTEzNzQsNiArMTM1Myw1NCBAQAogCiAJc25kX3NvY19qYWNrX3JlcG9ydChqYWNrLT5qYWNrLCByZXBvcnQsIGphY2stPnJlcG9ydCk7CiAKK30KKworc3RhdGljIHZvaWQgd204MzUwX2hwbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd204MzUwX2RhdGEgKnByaXYgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdtODM1MF9kYXRhLCBocGwud29yay53b3JrKTsKKworCXdtODM1MF9ocF93b3JrKHByaXYsICZwcml2LT5ocGwsIFdNODM1MF9KQUNLX0xfTFZMKTsKK30KKworc3RhdGljIHZvaWQgd204MzUwX2hwcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd204MzUwX2RhdGEgKnByaXYgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdtODM1MF9kYXRhLCBocHIud29yay53b3JrKTsKKwkKKwl3bTgzNTBfaHBfd29yayhwcml2LCAmcHJpdi0+aHByLCBXTTgzNTBfSkFDS19SX0xWTCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB3bTgzNTBfaHBfamFja19oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHdtODM1MF9kYXRhICpwcml2ID0gZGF0YTsKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBwcml2LT5jb2RlYy5jb250cm9sX2RhdGE7CisJc3RydWN0IHdtODM1MF9qYWNrX2RhdGEgKmphY2sgPSBOVUxMOworCisJc3dpdGNoIChpcnEgLSB3bTgzNTAtPmlycV9iYXNlKSB7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTDoKKyNpZm5kZWYgQ09ORklHX1NORF9TT0NfV004MzUwX01PRFVMRQorCQl0cmFjZV9zbmRfc29jX2phY2tfaXJxKCJXTTgzNTAgSFBMIik7CisjZW5kaWYKKwkJamFjayA9ICZwcml2LT5ocGw7CisJCWJyZWFrOworCisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUjoKKyNpZm5kZWYgQ09ORklHX1NORF9TT0NfV004MzUwX01PRFVMRQorCQl0cmFjZV9zbmRfc29jX2phY2tfaXJxKCJXTTgzNTAgSFBSIik7CisjZW5kaWYKKwkJamFjayA9ICZwcml2LT5ocHI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKHdtODM1MC0+ZGV2KSkKKwkJcG1fd2FrZXVwX2V2ZW50KHdtODM1MC0+ZGV2LCAyNTApOworCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZqYWNrLT53b3JrLCAyMDApOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0xNDM2LDYgKzE0NjMsMTAgQEAKIAl1MTYgcmVnOwogCWludCByZXBvcnQgPSAwOwogCisjaWZuZGVmIENPTkZJR19TTkRfU09DX1dNODM1MF9NT0RVTEUKKwl0cmFjZV9zbmRfc29jX2phY2tfaXJxKCJXTTgzNTAgbWljIik7CisjZW5kaWYKKwogCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9KQUNLX1BJTl9TVEFUVVMpOwogCWlmIChyZWcgJiBXTTgzNTBfSkFDS19NSUNTQ0RfTFZMKQogCQlyZXBvcnQgfD0gcHJpdi0+bWljLnNob3J0X3JlcG9ydDsKQEAgLTE1NTAsNyArMTU4MSw5IEBACiAJLyogUHV0IHRoZSBjb2RlYyBpbnRvIHJlc2V0IGlmIGl0IHdhc24ndCBhbHJlYWR5ICovCiAJd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfUE9XRVJfTUdNVF81LCBXTTgzNTBfQ09ERUNfRU5BKTsKIAotCUlOSVRfREVMQVlFRF9XT1JLKCZjb2RlYy0+ZGVsYXllZF93b3JrLCB3bTgzNTBfcGdhX3dvcmspOworCUlOSVRfREVMQVlFRF9XT1JLKCZjb2RlYy0+ZGFwbS5kZWxheWVkX3dvcmssIHdtODM1MF9wZ2Ffd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmhwbC53b3JrLCB3bTgzNTBfaHBsX3dvcmspOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5ocHIud29yaywgd204MzUwX2hwcl93b3JrKTsKIAogCS8qIEVuYWJsZSB0aGUgY29kZWMgKi8KIAl3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfUE9XRVJfTUdNVF81LCBXTTgzNTBfQ09ERUNfRU5BKTsKQEAgLTE2MjYsNyArMTY1OSw2IEBACiB7CiAJc3RydWN0IHdtODM1MF9kYXRhICpwcml2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJc3RydWN0IHdtODM1MCAqd204MzUwID0gZGV2X2dldF9wbGF0ZGF0YShjb2RlYy0+ZGV2KTsKLQlpbnQgcmV0OwogCiAJd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSkFDS19ERVRFQ1QsCiAJCQkgIFdNODM1MF9KRExfRU5BIHwgV004MzUwX0pEUl9FTkEpOwpAQCAtMTY0MSwxNSArMTY3MywxMiBAQAogCXByaXYtPmhwci5qYWNrID0gTlVMTDsKIAlwcml2LT5taWMuamFjayA9IE5VTEw7CiAKLQkvKiBjYW5jZWwgYW55IHdvcmsgd2FpdGluZyB0byBiZSBxdWV1ZWQuICovCi0JcmV0ID0gY2FuY2VsX2RlbGF5ZWRfd29yaygmY29kZWMtPmRlbGF5ZWRfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5ocGwud29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5ocHIud29yayk7CiAKIAkvKiBpZiB0aGVyZSB3YXMgYW55IHdvcmsgd2FpdGluZyB0aGVuIHdlIHJ1biBpdCBub3cgYW5kCiAJICogd2FpdCBmb3IgaXRzIGNvbXBsZXRpb24gKi8KLQlpZiAocmV0KSB7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY29kZWMtPmRlbGF5ZWRfd29yaywgMCk7Ci0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JfQorCWZsdXNoX2RlbGF5ZWRfd29ya19zeW5jKCZjb2RlYy0+ZGFwbS5kZWxheWVkX3dvcmspOwogCiAJd204MzUwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg0MDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmMKaW5kZXggODUwMjk5Ny4uM2MzYmMwNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg0MDAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODQwMC5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogCkBAIC05MTEsMTAgKzkxMCwxMSBAQAogCiBzdGF0aWMgaW50IHdtODQwMF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NDAwX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fd2lkZ2V0cykpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg0MDBfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjE5LDcgKzEyMTksNyBAQAogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKIAkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHBvd2VyKSwKIAkJCQkJCSAgICAmcG93ZXJbMF0pOwogCQkJaWYgKHJldCAhPSAwKSB7CkBAIC0xMzA2LDcgKzEzMDYsNyBAQAogCQlicmVhazsKIAl9CiAKLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMKaW5kZXggOGYxMDcwOS4uZGIwZGNlZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCiAjaW5jbHVkZSAid204NTEwLmgiCkBAIC0yMTYsMTAgKzIxNSwxMSBAQAogCiBzdGF0aWMgaW50IHdtODUxMF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NTEwX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUod204NTEwX2RhcG1fd2lkZ2V0cykpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg1MTBfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg1MTBfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NzgsNyArNDc4LDcgQEAKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgogCQlwb3dlcjEgfD0gV004NTEwX1BPV0VSMV9CSUFTRU4gfCBXTTg1MTBfUE9XRVIxX0JVRklPRU47CiAKLQkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgewogCQkJLyogSW5pdGlhbCBjYXAgY2hhcmdlIGF0IFZNSUQgNWsgKi8KIAkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODUxMF9QT1dFUjEsIHBvd2VyMSB8IDB4Myk7CiAJCQltZGVsYXkoMTAwKTsKQEAgLTQ5NSw3ICs0OTUsNyBAQAogCQlicmVhazsKIAl9CiAKLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1MjMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTIzLmMKaW5kZXggZGVjYTc5ZS4uNWViMmY1MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg1MjMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUyMy5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogCkBAIC0xMDksMTAgKzEwOCwxMSBAQAogCiBzdGF0aWMgaW50IHdtODUyM19hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NTIzX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUod204NTIzX2RhcG1fd2lkZ2V0cykpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204NTIzX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204NTIzX2RhcG1fd2lkZ2V0cykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyNyw3ICszMjcsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKIAkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODUyMy0+c3VwcGxpZXMpLAogCQkJCQkJICAgIHdtODUyMy0+c3VwcGxpZXMpOwogCQkJaWYgKHJldCAhPSAwKSB7CkBAIC0zNjYsNyArMzY2LDcgQEAKIAkJCQkgICAgICAgd204NTIzLT5zdXBwbGllcyk7CiAJCWJyZWFrOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmMKaW5kZXggODcyNWQ0ZS4uOGY2YjVlZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgpAQCAtMTkxLDcgKzE5MCw2IEBACiBzdHJ1Y3Qgd204NTgwX3ByaXYgewogCWVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbF90eXBlOwogCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1dNODU4MF9OVU1fU1VQUExJRVNdOwotCXUxNiByZWdfY2FjaGVbV004NTgwX01BWF9SRUdJU1RFUiArIDFdOwogCXN0cnVjdCBwbGxfc3RhdGUgYTsKIAlzdHJ1Y3QgcGxsX3N0YXRlIGI7CiAJaW50IHN5c2Nsa1syXTsKQEAgLTMwMiwxMCArMzAwLDExIEBACiAKIHN0YXRpYyBpbnQgd204NTgwX2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg1ODBfZGFwbV93aWRnZXRzLAotCQkJCSAgQVJSQVlfU0laRSh3bTg1ODBfZGFwbV93aWRnZXRzKSk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODU4MF9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODU4MF9kYXBtX3dpZGdldHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUwNywxMyArNTA2LDEzIEBACiAJfQogCiAJLyogTG9vayB1cCB0aGUgU1lTQ0xLIHJhdGlvOyBhY2NlcHQgb25seSBleGFjdCBtYXRjaGVzICovCi0JcmF0aW8gPSB3bTg1ODAtPnN5c2Nsa1tkYWktPmlkXSAvIHBhcmFtc19yYXRlKHBhcmFtcyk7CisJcmF0aW8gPSB3bTg1ODAtPnN5c2Nsa1tkYWktPmRyaXZlci0+aWRdIC8gcGFyYW1zX3JhdGUocGFyYW1zKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg1ODBfc3lzY2xrX3JhdGlvcyk7IGkrKykKIAkJaWYgKHJhdGlvID09IHdtODU4MF9zeXNjbGtfcmF0aW9zW2ldKQogCQkJYnJlYWs7CiAJaWYgKGkgPT0gQVJSQVlfU0laRSh3bTg1ODBfc3lzY2xrX3JhdGlvcykpIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiSW52YWxpZCBjbG9jayByYXRpbyAlZC8lZFxuIiwKLQkJCXdtODU4MC0+c3lzY2xrW2RhaS0+aWRdLCBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKKwkJCXdtODU4MC0+c3lzY2xrW2RhaS0+ZHJpdmVyLT5pZF0sIHBhcmFtc19yYXRlKHBhcmFtcykpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcGFpZmEgfD0gaTsKQEAgLTcxNiw3ICs3MTUsNyBAQAogCiAJc3dpdGNoIChjbGtfaWQpIHsKIAljYXNlIFdNODU4MF9DTEtTUkNfQURDTUNMSzoKLQkJaWYgKGRhaS0+aWQgIT0gV004NTgwX0RBSV9QQUlGVFgpCisJCWlmIChkYWktPmRyaXZlci0+aWQgIT0gV004NTgwX0RBSV9QQUlGVFgpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJc2VsID0gMCA8PCBzZWxfc2hpZnQ7CiAJCWJyZWFrOwpAQCAtNzM1LDcgKzczNCw3IEBACiAJfQogCiAJLyogV2UgcmVhbGx5IHNob3VsZCB2YWxpZGF0ZSBQTEwgc2V0dGluZ3MgYnV0IG5vdCB5ZXQgKi8KLQl3bTg1ODAtPnN5c2Nsa1tkYWktPmlkXSA9IGZyZXE7CisJd204NTgwLT5zeXNjbGtbZGFpLT5kcml2ZXItPmlkXSA9IGZyZXE7CiAKIAlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NTgwX0NMS1NFTCwgc2VsX21hc2ssIHNlbCk7CiB9CkBAIC03NjcsNyArNzY2LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CiAJCQkvKiBQb3dlciB1cCBhbmQgZ2V0IGluZGl2aWR1YWwgY29udHJvbCBvZiB0aGUgREFDcyAqLwogCQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg1ODBfUFdSRE4xKTsKIAkJCXJlZyAmPSB+KFdNODU4MF9QV1JETjFfUFdETiB8IFdNODU4MF9QV1JETjFfQUxMREFDUEQpOwpAQCAtNzg1LDcgKzc4NCw3IEBACiAJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODU4MF9QV1JETjEsIHJlZyB8IFdNODU4MF9QV1JETjFfUFdETik7CiAJCWJyZWFrOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTA1LDcgKzkwNCw3IEBACiAJLnNldF9iaWFzX2xldmVsID0gd204NTgwX3NldF9iaWFzX2xldmVsLAogCS5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod204NTgwX3JlZyksCiAJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTE2KSwKLQkucmVnX2NhY2hlX2RlZmF1bHQgPSAmd204NTgwX3JlZywKKwkucmVnX2NhY2hlX2RlZmF1bHQgPSB3bTg1ODBfcmVnLAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzExLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODcxMS5jCmluZGV4IDU0ZmJkNzYuLjk3YzMwMzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzExLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3MTEuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIApAQCAtMzQsNyArMzMsNiBAQAogLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCiBzdHJ1Y3Qgd204NzExX3ByaXYgewogCWVudW0gc25kX3NvY19jb250cm9sX3R5cGUgYnVzX3R5cGU7Ci0JdTE2IHJlZ19jYWNoZVtXTTg3MTFfQ0FDSEVSRUdOVU1dOwogCXVuc2lnbmVkIGludCBzeXNjbGs7CiB9OwogCkBAIC05MywxMCArOTEsMTEgQEAKIAogc3RhdGljIGludCB3bTg3MTFfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODcxMV9kYXBtX3dpZGdldHMsCi0JCQkJICBBUlJBWV9TSVpFKHdtODcxMV9kYXBtX3dpZGdldHMpKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODcxMV9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODcxMV9kYXBtX3dpZGdldHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMTgsNyArMzE3LDcgQEAKIAkJc25kX3NvY193cml0ZShjb2RlYywgV004NzExX1BXUiwgMHhmZmZmKTsKIAkJYnJlYWs7CiAJfQotCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODcyOC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3MjguYwppbmRleCAwNzVmMzVlLi43MzZiMDM1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODcyOC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI4LmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKQEAgLTczLDEwICs3MiwxMSBAQAogCiBzdGF0aWMgaW50IHdtODcyOF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NzI4X2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUod204NzI4X2RhcG1fd2lkZ2V0cykpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204NzI4X2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204NzI4X2RhcG1fd2lkZ2V0cykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4MCw3ICsxODAsNyBAQAogCWNhc2UgU05EX1NPQ19CSUFTX09OOgogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKLQkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgewogCQkJLyogUG93ZXIgZXZlcnl0aGluZyB1cC4uLiAqLwogCQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg3MjhfREFDQ1RMKTsKIAkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODcyOF9EQUNDVEwsIHJlZyAmIH4weDQpOwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODcyOF9EQUNDVEwsIHJlZyB8IDB4NCk7CiAJCWJyZWFrOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKaW5kZXggZTcyNWMwOS4uMGE2N2MzMSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogCkBAIC00NCw5ICs0MywxMCBAQAogc3RydWN0IHdtODczMV9wcml2IHsKIAllbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2xfdHlwZTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tXTTg3MzFfTlVNX1NVUFBMSUVTXTsKLQl1MTYgcmVnX2NhY2hlW1dNODczMV9DQUNIRVJFR05VTV07CiAJdW5zaWduZWQgaW50IHN5c2NsazsKIAlpbnQgc3lzY2xrX3R5cGU7CisJaW50IHBsYXliYWNrX2ZzOworCWJvb2wgZGVlbXBoOwogfTsKIAogCkBAIC02NSwxNiArNjUsNzkgQEAKICNkZWZpbmUgd204NzMxX3Jlc2V0KGMpCXNuZF9zb2Nfd3JpdGUoYywgV004NzMxX1JFU0VULCAwKQogCiBzdGF0aWMgY29uc3QgY2hhciAqd204NzMxX2lucHV0X3NlbGVjdFtdID0geyJMaW5lIEluIiwgIk1pYyJ9Owotc3RhdGljIGNvbnN0IGNoYXIgKndtODczMV9kZWVtcGhbXSA9IHsiTm9uZSIsICIzMktoeiIsICI0NC4xS2h6IiwgIjQ4S2h6In07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204NzMxX2VudW1bXSA9IHsKLQlTT0NfRU5VTV9TSU5HTEUoV004NzMxX0FQQU5BLCAyLCAyLCB3bTg3MzFfaW5wdXRfc2VsZWN0KSwKLQlTT0NfRU5VTV9TSU5HTEUoV004NzMxX0FQRElHSSwgMSwgNCwgd204NzMxX2RlZW1waCksCi19Oworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTg3MzFfaW5zZWxfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODczMV9BUEFOQSwgMiwgMiwgd204NzMxX2lucHV0X3NlbGVjdCk7CisKK3N0YXRpYyBpbnQgd204NzMxX2RlZW1waFtdID0geyAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwIH07CisKK3N0YXRpYyBpbnQgd204NzMxX3NldF9kZWVtcGgoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg3MzFfcHJpdiAqd204NzMxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IHZhbCwgaSwgYmVzdDsKKworCS8qIElmIHdlJ3JlIHVzaW5nIGRlZW1waGFzaXMgc2VsZWN0IHRoZSBuZWFyZXN0IGF2YWlsYWJsZSBzYW1wbGUKKwkgKiByYXRlLgorCSAqLworCWlmICh3bTg3MzEtPmRlZW1waCkgeworCQliZXN0ID0gMTsKKwkJZm9yIChpID0gMjsgaSA8IEFSUkFZX1NJWkUod204NzMxX2RlZW1waCk7IGkrKykgeworCQkJaWYgKGFicyh3bTg3MzFfZGVlbXBoW2ldIC0gd204NzMxLT5wbGF5YmFja19mcykgPAorCQkJICAgIGFicyh3bTg3MzFfZGVlbXBoW2Jlc3RdIC0gd204NzMxLT5wbGF5YmFja19mcykpCisJCQkJYmVzdCA9IGk7CisJCX0KKworCQl2YWwgPSBiZXN0IDw8IDE7CisJfSBlbHNlIHsKKwkJYmVzdCA9IDA7CisJCXZhbCA9IDA7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU2V0IGRlZW1waGFzaXMgJWQgKCVkSHopXG4iLAorCQliZXN0LCB3bTg3MzFfZGVlbXBoW2Jlc3RdKTsKKworCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3MzFfQVBESUdJLCAweDYsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgd204NzMxX2dldF9kZWVtcGgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdtODczMS0+ZGVlbXBoOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NzMxX3B1dF9kZWVtcGgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCBkZWVtcGggPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCWludCByZXQgPSAwOworCisJaWYgKGRlZW1waCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKKwlpZiAod204NzMxLT5kZWVtcGggIT0gZGVlbXBoKSB7CisJCXdtODczMS0+ZGVlbXBoID0gZGVlbXBoOworCisJCXdtODczMV9zZXRfZGVlbXBoKGNvZGVjKTsKKworCQlyZXQgPSAxOworCX0KKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoaW5fdGx2LCAtMzQ1MCwgMTUwLCAwKTsKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShzaWRldG9uZV90bHYsIC0xNTAwLCAzMDAsIDApOwogc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG91dF90bHYsIC0xMjEwMCwgMTAwLCAxKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShtaWNfdGx2LCAwLCAyMDAwLCAwKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODczMV9zbmRfY29udHJvbHNbXSA9IHsKIApAQCAtODcsNyArMTUwLDcgQEAKIAkJIGluX3RsdiksCiBTT0NfRE9VQkxFX1IoIkxpbmUgQ2FwdHVyZSBTd2l0Y2giLCBXTTg3MzFfTElOVk9MLCBXTTg3MzFfUklOVk9MLCA3LCAxLCAxKSwKIAotU09DX1NJTkdMRSgiTWljIEJvb3N0ICgrMjBkQikiLCBXTTg3MzFfQVBBTkEsIDAsIDEsIDApLAorU09DX1NJTkdMRV9UTFYoIk1pYyBCb29zdCBWb2x1bWUiLCBXTTg3MzFfQVBBTkEsIDAsIDEsIDAsIG1pY190bHYpLAogU09DX1NJTkdMRSgiTWljIENhcHR1cmUgU3dpdGNoIiwgV004NzMxX0FQQU5BLCAxLCAxLCAxKSwKIAogU09DX1NJTkdMRV9UTFYoIlNpZGV0b25lIFBsYXliYWNrIFZvbHVtZSIsIFdNODczMV9BUEFOQSwgNiwgMywgMSwKQEAgLTk2LDcgKzE1OSw4IEBACiBTT0NfU0lOR0xFKCJBREMgSGlnaCBQYXNzIEZpbHRlciBTd2l0Y2giLCBXTTg3MzFfQVBESUdJLCAwLCAxLCAxKSwKIFNPQ19TSU5HTEUoIlN0b3JlIERDIE9mZnNldCBTd2l0Y2giLCBXTTg3MzFfQVBESUdJLCA0LCAxLCAwKSwKIAotU09DX0VOVU0oIlBsYXliYWNrIERlLWVtcGhhc2lzIiwgd204NzMxX2VudW1bMV0pLAorU09DX1NJTkdMRV9CT09MX0VYVCgiUGxheWJhY2sgRGVlbXBoYXNpcyBTd2l0Y2giLCAwLAorCQkgICAgd204NzMxX2dldF9kZWVtcGgsIHdtODczMV9wdXRfZGVlbXBoKSwKIH07CiAKIC8qIE91dHB1dCBNaXhlciAqLwpAQCAtMTA4LDcgKzE3Miw3IEBACiAKIC8qIElucHV0IG11eCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODczMV9pbnB1dF9tdXhfY29udHJvbHMgPQotU09DX0RBUE1fRU5VTSgiSW5wdXQgU2VsZWN0Iiwgd204NzMxX2VudW1bMF0pOworU09DX0RBUE1fRU5VTSgiSW5wdXQgU2VsZWN0Iiwgd204NzMxX2luc2VsX2VudW0pOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204NzMxX2RhcG1fd2lkZ2V0c1tdID0gewogU05EX1NPQ19EQVBNX1NVUFBMWSgiT1NDIiwgV004NzMxX1BXUiwgNSwgMSwgTlVMTCwgMCksCkBAIC0xNjUsMTAgKzIyOSwxMSBAQAogCiBzdGF0aWMgaW50IHdtODczMV9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NzMxX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUod204NzMxX2RhcG1fd2lkZ2V0cykpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204NzMxX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204NzMxX2RhcG1fd2lkZ2V0cykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzOSw2ICszMDQsOCBAQAogCXUxNiBzcmF0ZSA9IChjb2VmZl9kaXZbaV0uc3IgPDwgMikgfAogCQkoY29lZmZfZGl2W2ldLmJvc3IgPDwgMSkgfCBjb2VmZl9kaXZbaV0udXNiOwogCisJd204NzMxLT5wbGF5YmFja19mcyA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKIAlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3MzFfU1JBVEUsIHNyYXRlKTsKIAogCS8qIGJpdCBzaXplICovCkBAIC0yNTMsNiArMzIwLDggQEAKIAkJYnJlYWs7CiAJfQogCisJd204NzMxX3NldF9kZWVtcGgoY29kZWMpOworCiAJc25kX3NvY193cml0ZShjb2RlYywgV004NzMxX0lGQUNFLCBpZmFjZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTksNyArMzg4LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKCZjb2RlYy0+ZGFwbSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM5OSw3ICs0NjgsNyBAQAogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKIAkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODczMS0+c3VwcGxpZXMpLAogCQkJCQkJICAgIHdtODczMS0+c3VwcGxpZXMpOwogCQkJaWYgKHJldCAhPSAwKQpAQCAtNDI4LDcgKzQ5Nyw3IEBACiAJCQkJICAgICAgIHdtODczMS0+c3VwcGxpZXMpOwogCQlicmVhazsKIAl9Ci0JY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gbGV2ZWw7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU0Miw3ICs2MTEsNiBAQAogZXJyX3JlZ3VsYXRvcl9nZXQ6CiAJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODczMS0+c3VwcGxpZXMpLCB3bTg3MzEtPnN1cHBsaWVzKTsKIAotCWtmcmVlKHdtODczMSk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3MzcuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzM3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBjNjdkMAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzM3LmMKQEAgLTAsMCArMSw3NTQgQEAKKy8qCisgKiB3bTg3MzcuYyAgLS0gIFdNODczNyBBTFNBIFNvQyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgcGxjCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorCisjaW5jbHVkZSAid204NzM3LmgiCisKKyNkZWZpbmUgV004NzM3X05VTV9TVVBQTElFUyA0CitzdGF0aWMgY29uc3QgY2hhciAqd204NzM3X3N1cHBseV9uYW1lc1tXTTg3MzdfTlVNX1NVUFBMSUVTXSA9IHsKKwkiRENWREQiLAorCSJEQlZERCIsCisJIkFWREQiLAorCSJNVkREIiwKK307CisKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IHdtODczN19wcml2IHsKKwllbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2xfdHlwZTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tXTTg3MzdfTlVNX1NVUFBMSUVTXTsKKwl1bnNpZ25lZCBpbnQgbWNsazsKK307CisKK3N0YXRpYyBjb25zdCB1MTYgd204NzM3X3JlZ1tXTTg3MzdfUkVHSVNURVJfQ09VTlRdID0geworCTB4MDBDMywgICAgIC8qIFIwICAtIExlZnQgUEdBIHZvbHVtZSAqLworCTB4MDBDMywgICAgIC8qIFIxICAtIFJpZ2h0IFBHQSB2b2x1bWUgKi8KKwkweDAwMDcsICAgICAvKiBSMiAgLSBBVURJTyBwYXRoIEwgKi8KKwkweDAwMDcsICAgICAvKiBSMyAgLSBBVURJTyBwYXRoIFIgKi8KKwkweDAwMDAsICAgICAvKiBSNCAgLSAzRCBFbmhhbmNlICovCisJMHgwMDAwLCAgICAgLyogUjUgIC0gQURDIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNiAgLSBQb3dlciBNYW5hZ2VtZW50ICovCisJMHgwMDBBLCAgICAgLyogUjcgIC0gQXVkaW8gRm9ybWF0ICovCisJMHgwMDAwLCAgICAgLyogUjggIC0gQ2xvY2tpbmcgKi8KKwkweDAwMEYsICAgICAvKiBSOSAgLSBNSUMgUHJlYW1wIENvbnRyb2wgKi8KKwkweDAwMDMsICAgICAvKiBSMTAgLSBNaXNjIEJpYXMgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxMSAtIE5vaXNlIEdhdGUgKi8KKwkweDAwN0MsICAgICAvKiBSMTIgLSBBTEMxICovCisJMHgwMDAwLCAgICAgLyogUjEzIC0gQUxDMiAqLworCTB4MDAzMiwgICAgIC8qIFIxNCAtIEFMQzMgKi8KK307CisKK3N0YXRpYyBpbnQgd204NzM3X3Jlc2V0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgV004NzM3X1JFU0VULCAwKTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtaWNib29zdF90bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCg0KSwKKwkwLCAwLCBUTFZfREJfU0NBTEVfSVRFTSgxMzAwLCAwLCAwKSwKKwkxLCAxLCBUTFZfREJfU0NBTEVfSVRFTSgxODAwLCAwLCAwKSwKKwkyLCAyLCBUTFZfREJfU0NBTEVfSVRFTSgyODAwLCAwLCAwKSwKKwkzLCAzLCBUTFZfREJfU0NBTEVfSVRFTSgzMzAwLCAwLCAwKSwKK307CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUocGdhX3RsdiwgLTk3NTAsIDUwLCAxKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShhZGNfdGx2LCAtNjAwLCA2MDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG5nX3RsdiwgLTc4MDAsIDYwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYWxjX21heF90bHYsIC0xMjAwLCA2MDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGFsY190YXJnZXRfdGx2LCAtMTgwMCwgMTAwLCAwKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm1pY2JpYXNfZW51bV90ZXh0W10gPSB7CisJIjI1JSIsCisJIjUwJSIsCisJIjc1JSIsCisJIjEwMCUiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBtaWNiaWFzX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg3MzdfTUlDX1BSRUFNUF9DT05UUk9MLCAwLCA0LCBtaWNiaWFzX2VudW1fdGV4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpsb3dfY3V0b2ZmX3RleHRbXSA9IHsKKwkiTG93IiwgIkhpZ2giCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGxvd18zZCA9CisJU09DX0VOVU1fU0lOR0xFKFdNODczN18zRF9FTkhBTkNFLCA2LCAyLCBsb3dfY3V0b2ZmX3RleHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqaGlnaF9jdXRvZmZfdGV4dFtdID0geworCSJIaWdoIiwgIkxvdyIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaGlnaF8zZCA9CisJU09DX0VOVU1fU0lOR0xFKFdNODczN18zRF9FTkhBTkNFLCA1LCAyLCBoaWdoX2N1dG9mZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFsY19mbl90ZXh0W10gPSB7CisJIkRpc2FibGVkIiwgIlJpZ2h0IiwgIkxlZnQiLCAiU3RlcmVvIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhbGNfZm4gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg3MzdfQUxDMSwgNywgNCwgYWxjX2ZuX3RleHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqYWxjX2hvbGRfdGV4dFtdID0geworCSIwIiwgIjIuNjdtcyIsICI1LjMzbXMiLCAiMTAuNjZtcyIsICIyMS4zMm1zIiwgIjQyLjY0bXMiLCAiODUuMjhtcyIsCisJIjE3MC41Nm1zIiwgIjM0MS4xMm1zIiwgIjY4Mi4yNG1zIiwgIjEuMzY0cyIsICIyLjcyOHMiLCAiNS40NThzIiwKKwkiMTAuOTE2cyIsICIyMS44MzJzIiwgIjQzLjY5MXMiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFsY19ob2xkID0KKwlTT0NfRU5VTV9TSU5HTEUoV004NzM3X0FMQzIsIDAsIDE2LCBhbGNfaG9sZF90ZXh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFsY19hdGtfdGV4dFtdID0geworCSI4LjRtcyIsICIxNi44bXMiLCAiMzMuNm1zIiwgIjY3LjJtcyIsICIxMzQuNG1zIiwgIjI2OC44bXMiLCAiNTM3LjZtcyIsCisJIjEuMDc1cyIsICIyLjE1cyIsICI0LjNzIiwgIjguNnMiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFsY19hdGsgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg3MzdfQUxDMywgMCwgMTEsIGFsY19hdGtfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICphbGNfZGN5X3RleHRbXSA9IHsKKwkiMzMuNm1zIiwgIjY3LjJtcyIsICIxMzQuNG1zIiwgIjI2OC44bXMiLCAiNTM3LjZtcyIsICIxLjA3NXMiLCAiMi4xNXMiLAorCSI0LjNzIiwgIjguNnMiLCAiMTcuMnMiLCAiMzQuNDFzIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhbGNfZGN5ID0KKwlTT0NfRU5VTV9TSU5HTEUoV004NzM3X0FMQzMsIDQsIDExLCBhbGNfZGN5X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzM3X3NuZF9jb250cm9sc1tdID0geworU09DX0RPVUJMRV9SX1RMVigiTWljIEJvb3N0IFZvbHVtZSIsIFdNODczN19BVURJT19QQVRIX0wsIFdNODczN19BVURJT19QQVRIX1IsCisJCSA2LCAzLCAwLCBtaWNib29zdF90bHYpLAorU09DX0RPVUJMRV9SKCJNaWMgQm9vc3QgU3dpdGNoIiwgV004NzM3X0FVRElPX1BBVEhfTCwgV004NzM3X0FVRElPX1BBVEhfUiwKKwkgICAgIDQsIDEsIDApLAorU09DX0RPVUJMRSgiTWljIFpDIFN3aXRjaCIsIFdNODczN19BVURJT19QQVRIX0wsIFdNODczN19BVURJT19QQVRIX1IsCisJICAgMywgMSwgMCksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkNhcHR1cmUgVm9sdW1lIiwgV004NzM3X0xFRlRfUEdBX1ZPTFVNRSwKKwkJIFdNODczN19SSUdIVF9QR0FfVk9MVU1FLCAwLCAyNTUsIDAsIHBnYV90bHYpLAorU09DX0RPVUJMRSgiQ2FwdHVyZSBaQyBTd2l0Y2giLCBXTTg3MzdfQVVESU9fUEFUSF9MLCBXTTg3MzdfQVVESU9fUEFUSF9SLAorCSAgIDIsIDEsIDApLAorCitTT0NfRE9VQkxFKCJJTlBVVDEgREMgQmlhcyBTd2l0Y2giLCBXTTg3MzdfTUlTQ19CSUFTX0NPTlRST0wsIDAsIDEsIDEsIDApLAorCitTT0NfRU5VTSgiTWljIFBHQSBCaWFzIiwgbWljYmlhc19lbnVtKSwKK1NPQ19TSU5HTEUoIkFEQyBMb3cgUG93ZXIgU3dpdGNoIiwgV004NzM3X0FEQ19DT05UUk9MLCAyLCAxLCAwKSwKK1NPQ19TSU5HTEUoIkhpZ2ggUGFzcyBGaWx0ZXIgU3dpdGNoIiwgV004NzM3X0FEQ19DT05UUk9MLCAwLCAxLCAxKSwKK1NPQ19ET1VCTEUoIlBvbGFyaXR5IEludmVydCBTd2l0Y2giLCBXTTg3MzdfQURDX0NPTlRST0wsIDUsIDYsIDEsIDApLAorCitTT0NfU0lOR0xFKCIzRCBTd2l0Y2giLCBXTTg3MzdfM0RfRU5IQU5DRSwgMCwgMSwgMCksCitTT0NfU0lOR0xFKCIzRCBEZXB0aCIsIFdNODczN18zRF9FTkhBTkNFLCAxLCAxNSwgMCksCitTT0NfRU5VTSgiM0QgTG93IEN1dC1vZmYiLCBsb3dfM2QpLAorU09DX0VOVU0oIjNEIEhpZ2ggQ3V0LW9mZiIsIGxvd18zZCksCitTT0NfU0lOR0xFX1RMVigiM0QgQURDIFZvbHVtZSIsIFdNODczN18zRF9FTkhBTkNFLCA3LCAxLCAxLCBhZGNfdGx2KSwKKworU09DX1NJTkdMRSgiTm9pc2UgR2F0ZSBTd2l0Y2giLCBXTTg3MzdfTk9JU0VfR0FURSwgMCwgMSwgMCksCitTT0NfU0lOR0xFX1RMVigiTm9pc2UgR2F0ZSBUaHJlc2hvbGQgVm9sdW1lIiwgV004NzM3X05PSVNFX0dBVEUsIDIsIDcsIDAsCisJICAgICAgIG5nX3RsdiksCisKK1NPQ19FTlVNKCJBTEMiLCBhbGNfZm4pLAorU09DX1NJTkdMRV9UTFYoIkFMQyBNYXggR2FpbiBWb2x1bWUiLCBXTTg3MzdfQUxDMSwgNCwgNywgMCwgYWxjX21heF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFMQyBUYXJnZXQgVm9sdW1lIiwgV004NzM3X0FMQzEsIDAsIDE1LCAwLCBhbGNfdGFyZ2V0X3RsdiksCitTT0NfRU5VTSgiQUxDIEhvbGQgVGltZSIsIGFsY19ob2xkKSwKK1NPQ19TSU5HTEUoIkFMQyBaQyBTd2l0Y2giLCBXTTg3MzdfQUxDMiwgNCwgMSwgMCksCitTT0NfRU5VTSgiQUxDIEF0dGFjayBUaW1lIiwgYWxjX2F0ayksCitTT0NfRU5VTSgiQUxDIERlY2F5IFRpbWUiLCBhbGNfZGN5KSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpsaW5zZWxfdGV4dFtdID0geworCSJMSU5QVVQxIiwgIkxJTlBVVDIiLCAiTElOUFVUMyIsICJMSU5QVVQxIERDIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbGluc2VsX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg3MzdfQVVESU9fUEFUSF9MLCA3LCA0LCBsaW5zZWxfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsaW5zZWxfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJMSU5TRUwiLCBsaW5zZWxfZW51bSk7CisKKworc3RhdGljIGNvbnN0IGNoYXIgKnJpbnNlbF90ZXh0W10gPSB7CisJIlJJTlBVVDEiLCAiUklOUFVUMiIsICJSSU5QVVQzIiwgIlJJTlBVVDEgREMiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSByaW5zZWxfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODczN19BVURJT19QQVRIX1IsIDcsIDQsIHJpbnNlbF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJpbnNlbF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIlJJTlNFTCIsIHJpbnNlbF9lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmJ5cGFzc190ZXh0W10gPSB7CisJIkRpcmVjdCIsICJQcmVhbXAiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGxieXBhc3NfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODczN19NSUNfUFJFQU1QX0NPTlRST0wsIDIsIDIsIGJ5cGFzc190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxieXBhc3NfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJMZWZ0IEJ5cGFzcyIsIGxieXBhc3NfZW51bSk7CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSByYnlwYXNzX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg3MzdfTUlDX1BSRUFNUF9DT05UUk9MLCAzLCAyLCBieXBhc3NfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyByYnlwYXNzX211eCA9CisJU09DX0RBUE1fRU5VTSgiTGVmdCBCeXBhc3MiLCByYnlwYXNzX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204NzM3X2RhcG1fd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX0lOUFVUKCJMSU5QVVQxIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkxJTlBVVDIiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTElOUFVUMyIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJSSU5QVVQxIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIlJJTlBVVDIiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiUklOUFVUMyIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJMQUNJTiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJSQUNJTiIpLAorCitTTkRfU09DX0RBUE1fTVVYKCJMSU5TRUwiLCBTTkRfU09DX05PUE0sIDAsIDAsICZsaW5zZWxfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIlJJTlNFTCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJnJpbnNlbF9tdXgpLAorCitTTkRfU09DX0RBUE1fTVVYKCJMZWZ0IFByZWFtcCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZsYnlwYXNzX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJSaWdodCBQcmVhbXAgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmcmJ5cGFzc19tdXgpLAorCitTTkRfU09DX0RBUE1fUEdBKCJQR0FMIiwgV004NzM3X1BPV0VSX01BTkFHRU1FTlQsIDUsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiUEdBUiIsIFdNODczN19QT1dFUl9NQU5BR0VNRU5ULCA0LCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX0RBQygiQURDTCIsIE5VTEwsIFdNODczN19QT1dFUl9NQU5BR0VNRU5ULCAzLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkFEQ1IiLCBOVUxMLCBXTTg3MzdfUE9XRVJfTUFOQUdFTUVOVCwgMiwgMCksCisKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYiLCAiQ2FwdHVyZSIsIDAsIFdNODczN19QT1dFUl9NQU5BR0VNRU5ULCA2LCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uW10gPSB7CisJeyAiTElOU0VMIiwgIkxJTlBVVDEiLCAiTElOUFVUMSIgfSwKKwl7ICJMSU5TRUwiLCAiTElOUFVUMiIsICJMSU5QVVQyIiB9LAorCXsgIkxJTlNFTCIsICJMSU5QVVQzIiwgIkxJTlBVVDMiIH0sCisJeyAiTElOU0VMIiwgIkxJTlBVVDEgREMiLCAiTElOUFVUMSIgfSwKKworCXsgIlJJTlNFTCIsICJSSU5QVVQxIiwgIlJJTlBVVDEiIH0sCisJeyAiUklOU0VMIiwgIlJJTlBVVDIiLCAiUklOUFVUMiIgfSwKKwl7ICJSSU5TRUwiLCAiUklOUFVUMyIsICJSSU5QVVQzIiB9LAorCXsgIlJJTlNFTCIsICJSSU5QVVQxIERDIiwgIlJJTlBVVDEiIH0sCisKKwl7ICJMZWZ0IFByZWFtcCBNdXgiLCAiUHJlYW1wIiwgIkxJTlNFTCIgfSwKKwl7ICJMZWZ0IFByZWFtcCBNdXgiLCAiRGlyZWN0IiwgIkxBQ0lOIiB9LAorCisJeyAiUmlnaHQgUHJlYW1wIE11eCIsICJQcmVhbXAiLCAiUklOU0VMIiB9LAorCXsgIlJpZ2h0IFByZWFtcCBNdXgiLCAiRGlyZWN0IiwgIlJBQ0lOIiB9LAorCisJeyAiUEdBTCIsIE5VTEwsICJMZWZ0IFByZWFtcCBNdXgiIH0sCisJeyAiUEdBUiIsIE5VTEwsICJSaWdodCBQcmVhbXAgTXV4IiB9LAorCisJeyAiQURDTCIsIE5VTEwsICJQR0FMIiB9LAorCXsgIkFEQ1IiLCBOVUxMLCAiUEdBUiIgfSwKKworCXsgIkFJRiIsIE5VTEwsICJBRENMIiB9LAorCXsgIkFJRiIsIE5VTEwsICJBRENSIiB9LAorfTsKKworc3RhdGljIGludCB3bTg3MzdfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204NzM3X2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204NzM3X2RhcG1fd2lkZ2V0cykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogY29kZWMgbWNsayBjbG9jayBkaXZpZGVyIGNvZWZmaWNpZW50cyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJdTMyIG1jbGs7CisJdTMyIHJhdGU7CisJdTggdXNiOworCXU4IHNyOworfSBjb2VmZl9kaXZbXSA9IHsKKwl7IDEyMjg4MDAwLCAgODAwMCwgMCwgIDB4NCB9LAorCXsgMTIyODgwMDAsIDEyMDAwLCAwLCAgMHg4IH0sCisJeyAxMjI4ODAwMCwgMTYwMDAsIDAsICAweGEgfSwKKwl7IDEyMjg4MDAwLCAyNDAwMCwgMCwgMHgxYyB9LAorCXsgMTIyODgwMDAsIDMyMDAwLCAwLCAgMHhjIH0sCisJeyAxMjI4ODAwMCwgNDgwMDAsIDAsICAgIDAgfSwKKwl7IDEyMjg4MDAwLCA5NjAwMCwgMCwgIDB4ZSB9LAorCisJeyAxMTI4OTYwMCwgIDgwMDAsIDAsIDB4MTQgfSwKKwl7IDExMjg5NjAwLCAxMTAyNSwgMCwgMHgxOCB9LAorCXsgMTEyODk2MDAsIDIyMDUwLCAwLCAweDFhIH0sCisJeyAxMTI4OTYwMCwgNDQxMDAsIDAsIDB4MTAgfSwKKwl7IDExMjg5NjAwLCA4ODIwMCwgMCwgMHgxZSB9LAorCisJeyAxODQzMjAwMCwgIDgwMDAsIDAsICAweDUgfSwKKwl7IDE4NDMyMDAwLCAxMjAwMCwgMCwgIDB4OSB9LAorCXsgMTg0MzIwMDAsIDE2MDAwLCAwLCAgMHhiIH0sCisJeyAxODQzMjAwMCwgMjQwMDAsIDAsIDB4MWIgfSwKKwl7IDE4NDMyMDAwLCAzMjAwMCwgMCwgIDB4ZCB9LAorCXsgMTg0MzIwMDAsIDQ4MDAwLCAwLCAgMHgxIH0sCisJeyAxODQzMjAwMCwgOTYwMDAsIDAsIDB4MWYgfSwKKworCXsgMTY5MzQ0MDAsICA4MDAwLCAwLCAweDE1IH0sCisJeyAxNjkzNDQwMCwgMTEwMjUsIDAsIDB4MTkgfSwKKwl7IDE2OTM0NDAwLCAyMjA1MCwgMCwgMHgxYiB9LAorCXsgMTY5MzQ0MDAsIDQ0MTAwLCAwLCAweDExIH0sCisJeyAxNjkzNDQwMCwgODgyMDAsIDAsIDB4MWYgfSwKKworCXsgMTIwMDAwMDAsICA4MDAwLCAxLCAgMHg0IH0sCisJeyAxMjAwMDAwMCwgMTEwMjUsIDEsIDB4MTkgfSwKKwl7IDEyMDAwMDAwLCAxMjAwMCwgMSwgIDB4OCB9LAorCXsgMTIwMDAwMDAsIDE2MDAwLCAxLCAgMHhhIH0sCisJeyAxMjAwMDAwMCwgMjIwNTAsIDEsIDB4MWIgfSwKKwl7IDEyMDAwMDAwLCAyNDAwMCwgMSwgMHgxYyB9LAorCXsgMTIwMDAwMDAsIDMyMDAwLCAxLCAgMHhjIH0sCisJeyAxMjAwMDAwMCwgNDQxMDAsIDEsIDB4MTEgfSwKKwl7IDEyMDAwMDAwLCA0ODAwMCwgMSwgIDB4MCB9LAorCXsgMTIwMDAwMDAsIDg4MjAwLCAxLCAweDFmIH0sCisJeyAxMjAwMDAwMCwgOTYwMDAsIDEsICAweGUgfSwKK307CisKK3N0YXRpYyBpbnQgd204NzM3X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgd204NzM3X3ByaXYgKndtODczNyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCBpOworCXUxNiBjbG9ja2luZyA9IDA7CisJdTE2IGFmID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvZWZmX2Rpdik7IGkrKykgeworCQlpZiAoY29lZmZfZGl2W2ldLnJhdGUgIT0gcGFyYW1zX3JhdGUocGFyYW1zKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjb2VmZl9kaXZbaV0ubWNsayA9PSB3bTg3MzctPm1jbGspCisJCQlicmVhazsKKworCQlpZiAoY29lZmZfZGl2W2ldLm1jbGsgPT0gd204NzM3LT5tY2xrICogMikgeworCQkJY2xvY2tpbmcgfD0gV004NzM3X0NMS0RJVjI7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpID09IEFSUkFZX1NJWkUoY29lZmZfZGl2KSkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICIlZEh6IE1DTEsgY2FuJ3Qgc3VwcG9ydCAlZEh6XG4iLAorCQkJd204NzM3LT5tY2xrLCBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2xvY2tpbmcgfD0gY29lZmZfZGl2W2ldLnVzYiB8IChjb2VmZl9kaXZbaV0uc3IgPDwgV004NzM3X1NSX1NISUZUKTsKKworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCWFmIHw9IDB4ODsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJYWYgfD0gMHgxMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJYWYgfD0gMHgxODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzM3X0FVRElPX0ZPUk1BVCwgV004NzM3X1dMX01BU0ssIGFmKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3MzdfQ0xPQ0tJTkcsCisJCQkgICAgV004NzM3X1VTQl9NT0RFIHwgV004NzM3X0NMS0RJVjIgfCBXTTg3MzdfU1JfTUFTSywKKwkJCSAgICBjbG9ja2luZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3Mzdfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCQkJIGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IHdtODczN19wcml2ICp3bTg3MzcgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvZWZmX2Rpdik7IGkrKykgeworCQlpZiAoZnJlcSA9PSBjb2VmZl9kaXZbaV0ubWNsayB8fAorCQkgICAgZnJlcSA9PSBjb2VmZl9kaXZbaV0ubWNsayAqIDIpIHsKKwkJCXdtODczNy0+bWNsayA9IGZyZXE7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWRldl9lcnIoY29kZWMtPmRldiwgIk1DTEsgcmF0ZSAlZEh6IG5vdCBzdXBwb3J0ZWRcbiIsIGZyZXEpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworc3RhdGljIGludCB3bTg3Mzdfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCXVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwl1MTYgYWYgPSAwOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJYWYgfD0gV004NzM3X01TOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJYWYgfD0gMHgyOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlhZiB8PSAweDE7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWFmIHw9IDB4MzsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJYWYgfD0gMHgxMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCWFmIHw9IFdNODczN19MUlA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODczN19BVURJT19GT1JNQVQsCisJCQkgICAgV004NzM3X0ZPUk1BVF9NQVNLIHwgV004NzM3X0xSUCB8IFdNODczN19NUywgYWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NzM3X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3RydWN0IHdtODczN19wcml2ICp3bTg3MzcgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgcmV0OworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCS8qIFZNSUQgYXQgMio3NWsgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzM3X01JU0NfQklBU19DT05UUk9MLAorCQkJCSAgICBXTTg3MzdfVk1JRFNFTF9NQVNLLCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg3MzctPnN1cHBsaWVzKSwKKwkJCQkJCSAgICB3bTg3MzctPnN1cHBsaWVzKTsKKwkJCWlmIChyZXQgIT0gMCkgeworCQkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkJIkZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXM6ICVkXG4iLAorCQkJCQlyZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCXNuZF9zb2NfY2FjaGVfc3luYyhjb2RlYyk7CisKKwkJCS8qIEZhc3QgVk1JRCByYW1wIGF0IDIqMi41ayAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzM3X01JU0NfQklBU19DT05UUk9MLAorCQkJCQkgICAgV004NzM3X1ZNSURTRUxfTUFTSywgMHg0KTsKKworCQkJLyogQnJpbmcgVk1JRCB1cCAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzM3X1BPV0VSX01BTkFHRU1FTlQsCisJCQkJCSAgICBXTTg3MzdfVk1JRF9NQVNLIHwKKwkJCQkJICAgIFdNODczN19WUkVGX01BU0ssCisJCQkJCSAgICBXTTg3MzdfVk1JRF9NQVNLIHwKKwkJCQkJICAgIFdNODczN19WUkVGX01BU0spOworCisJCQltc2xlZXAoNTAwKTsKKwkJfQorCisJCS8qIFZNSUQgYXQgMiozMDBrICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODczN19NSVNDX0JJQVNfQ09OVFJPTCwKKwkJCQkgICAgV004NzM3X1ZNSURTRUxfTUFTSywgMik7CisKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODczN19QT1dFUl9NQU5BR0VNRU5ULAorCQkJCSAgICBXTTg3MzdfVk1JRF9NQVNLIHwgV004NzM3X1ZSRUZfTUFTSywgMCk7CisKKwkJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODczNy0+c3VwcGxpZXMpLAorCQkJCSAgICAgICB3bTg3MzctPnN1cHBsaWVzKTsKKwkJYnJlYWs7CisJfQorCisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNODczN19SQVRFUyBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCisKKyNkZWZpbmUgV004NzM3X0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg3MzdfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gd204NzM3X2h3X3BhcmFtcywKKwkuc2V0X3N5c2Nsawk9IHdtODczN19zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IHdtODczN19zZXRfZGFpX2ZtdCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHdtODczN19kYWkgPSB7CisJLm5hbWUgPSAid204NzM3IiwKKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gMiwgIC8qIE1vbm8gbW9kZXMgbm90IHlldCBzdXBwb3J0ZWQgKi8KKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFdNODczN19SQVRFUywKKwkJLmZvcm1hdHMgPSBXTTg3MzdfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmd204NzM3X2RhaV9vcHMsCit9OworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODczN19zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXdtODczN19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NzM3X3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJd204NzM3X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSB3bTg3Mzdfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODczN19yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgd204NzM3X3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204NzM3X3ByaXYgKndtODczNyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCByZXQsIGk7CisKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgNywgOSwgd204NzM3LT5jb250cm9sX3R5cGUpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzM3LT5zdXBwbGllcyk7IGkrKykKKwkJd204NzM3LT5zdXBwbGllc1tpXS5zdXBwbHkgPSB3bTg3Mzdfc3VwcGx5X25hbWVzW2ldOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZ2V0KGNvZGVjLT5kZXYsIEFSUkFZX1NJWkUod204NzM3LT5zdXBwbGllcyksCisJCQkJIHdtODczNy0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204NzM3LT5zdXBwbGllcyksCisJCQkJICAgIHdtODczNy0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZ2V0OworCX0KKworCXJldCA9IHdtODczN19yZXNldChjb2RlYyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGlzc3VlIHJlc2V0XG4iKTsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODczN19MRUZUX1BHQV9WT0xVTUUsIFdNODczN19MVlUsCisJCQkgICAgV004NzM3X0xWVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzM3X1JJR0hUX1BHQV9WT0xVTUUsIFdNODczN19SVlUsCisJCQkgICAgV004NzM3X1JWVSk7CisKKwl3bTg3Mzdfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCS8qIEJpYXMgbGV2ZWwgY29uZmlndXJhdGlvbiB3aWxsIGhhdmUgZG9uZSBhbiBleHRyYSBlbmFibGUgKi8KKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204NzM3LT5zdXBwbGllcyksIHdtODczNy0+c3VwcGxpZXMpOworCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODczN19zbmRfY29udHJvbHMsCisJCQkgICAgIEFSUkFZX1NJWkUod204NzM3X3NuZF9jb250cm9scykpOworCXdtODczN19hZGRfd2lkZ2V0cyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2VuYWJsZToKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204NzM3LT5zdXBwbGllcyksIHdtODczNy0+c3VwcGxpZXMpOworZXJyX2dldDoKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204NzM3LT5zdXBwbGllcyksIHdtODczNy0+c3VwcGxpZXMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bTg3MzdfcmVtb3ZlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204NzM3X3ByaXYgKndtODczNyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJd204NzM3X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204NzM3LT5zdXBwbGllcyksIHdtODczNy0+c3VwcGxpZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZfd204NzM3ID0geworCS5wcm9iZQkJPSB3bTg3MzdfcHJvYmUsCisJLnJlbW92ZQkJPSB3bTg3MzdfcmVtb3ZlLAorCS5zdXNwZW5kCT0gd204NzM3X3N1c3BlbmQsCisJLnJlc3VtZQkJPSB3bTg3MzdfcmVzdW1lLAorCS5zZXRfYmlhc19sZXZlbCA9IHdtODczN19zZXRfYmlhc19sZXZlbCwKKworCS5yZWdfY2FjaGVfc2l6ZSA9IFdNODczN19SRUdJU1RFUl9DT1VOVCAtIDEsIC8qIFNraXAgcmVzZXQgKi8KKwkucmVnX3dvcmRfc2l6ZQk9IHNpemVvZih1MTYpLAorCS5yZWdfY2FjaGVfZGVmYXVsdCA9IHdtODczN19yZWcsCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorc3RhdGljIF9fZGV2aW5pdCBpbnQgd204NzM3X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgd204NzM3X3ByaXYgKndtODczNzsKKwlpbnQgcmV0OworCisJd204NzM3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODczN19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODczNyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODczNyk7CisJd204NzM3LT5jb250cm9sX3R5cGUgPSBTTkRfU09DX0kyQzsKKworCXJldCA9ICBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZpMmMtPmRldiwKKwkJCQkgICAgICAmc29jX2NvZGVjX2Rldl93bTg3MzcsICZ3bTg3MzdfZGFpLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJa2ZyZWUod204NzM3KTsKKwlyZXR1cm4gcmV0OworCit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IHdtODczN19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZjbGllbnQtPmRldik7CisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204NzM3X2kyY19pZFtdID0geworCXsgIndtODczNyIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204NzM3X2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg3MzdfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ3bTg3MzciLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9ICAgIHdtODczN19pMmNfcHJvYmUsCisJLnJlbW92ZSA9ICAgX19kZXZleGl0X3Aod204NzM3X2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IHdtODczN19pMmNfaWQsCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorc3RhdGljIGludCBfX2RldmluaXQgd204NzM3X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCB3bTg3MzdfcHJpdiAqd204NzM3OworCWludCByZXQ7CisKKwl3bTg3MzcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NzM3X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204NzM3ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJd204NzM3LT5jb250cm9sX3R5cGUgPSBTTkRfU09DX1NQSTsKKwlzcGlfc2V0X2RydmRhdGEoc3BpLCB3bTg3MzcpOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmc3BpLT5kZXYsCisJCQkJICAgICAmc29jX2NvZGVjX2Rldl93bTg3MzcsICZ3bTg3MzdfZGFpLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJa2ZyZWUod204NzM3KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg3Mzdfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmc3BpLT5kZXYpOworCWtmcmVlKHNwaV9nZXRfZHJ2ZGF0YShzcGkpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHdtODczN19zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIndtODczNyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHdtODczN19zcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bTg3Mzdfc3BpX3JlbW92ZSksCit9OworI2VuZGlmIC8qIENPTkZJR19TUElfTUFTVEVSICovCisKK3N0YXRpYyBpbnQgX19pbml0IHdtODczN19tb2Rpbml0KHZvaWQpCit7CisJaW50IHJldDsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODczN19pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgV004NzM3IEkyQyBkcml2ZXI6ICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJndtODczN19zcGlfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgV004NzM3IFNQSSBkcml2ZXI6ICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHdtODczN19tb2Rpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODczN19leGl0KHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndtODczN19zcGlfZHJpdmVyKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmd204NzM3X2kyY19kcml2ZXIpOworI2VuZGlmCit9Cittb2R1bGVfZXhpdCh3bTg3MzdfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBXTTg3MzcgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzM3LmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODczNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZDE0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODczNy5oCkBAIC0wLDAgKzEsMzIyIEBACisjaWZuZGVmIF9XTTg3MzdfSAorI2RlZmluZSBfV004NzM3X0gKKworLyoKKyAqIHdtODczNy5jICAtLSAgV004NTIzIEFMU0EgU29DIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDEwIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyoKKyAqIFJlZ2lzdGVyIHZhbHVlcy4KKyAqLworI2RlZmluZSBXTTg3MzdfTEVGVF9QR0FfVk9MVU1FICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBXTTg3MzdfUklHSFRfUEdBX1ZPTFVNRSAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBXTTg3MzdfQVVESU9fUEFUSF9MICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBXTTg3MzdfQVVESU9fUEFUSF9SICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBXTTg3MzdfM0RfRU5IQU5DRSAgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBXTTg3MzdfQURDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBXTTg3MzdfUE9XRVJfTUFOQUdFTUVOVCAgICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBXTTg3MzdfQVVESU9fRk9STUFUICAgICAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBXTTg3MzdfQ0xPQ0tJTkcgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXTTg3MzdfTUlDX1BSRUFNUF9DT05UUk9MICAgICAgICAgICAgICAgMHgwOQorI2RlZmluZSBXTTg3MzdfTUlTQ19CSUFTX0NPTlRST0wgICAgICAgICAgICAgICAgMHgwQQorI2RlZmluZSBXTTg3MzdfTk9JU0VfR0FURSAgICAgICAgICAgICAgICAgICAgICAgMHgwQgorI2RlZmluZSBXTTg3MzdfQUxDMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQworI2RlZmluZSBXTTg3MzdfQUxDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRAorI2RlZmluZSBXTTg3MzdfQUxDMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRQorI2RlZmluZSBXTTg3MzdfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRgorCisjZGVmaW5lIFdNODczN19SRUdJU1RFUl9DT1VOVCAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBXTTg3MzdfTUFYX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgMHgwRgorCisvKgorICogRmllbGQgRGVmaW5pdGlvbnMuCisgKi8KKworLyoKKyAqIFIwICgweDAwKSAtIExlZnQgUEdBIHZvbHVtZQorICovCisjZGVmaW5lIFdNODczN19MVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExWVSAqLworI2RlZmluZSBXTTg3MzdfTFZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMVlUgKi8KKyNkZWZpbmUgV004NzM3X0xWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTFZVICovCisjZGVmaW5lIFdNODczN19MVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExWVSAqLworI2RlZmluZSBXTTg3MzdfTElOVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBMSU5WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg3MzdfTElOVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMSU5WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg3MzdfTElOVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMSU5WT0wgLSBbNzowXSAqLworCisvKgorICogUjEgKDB4MDEpIC0gUmlnaHQgUEdBIHZvbHVtZQorICovCisjZGVmaW5lIFdNODczN19SVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJWVSAqLworI2RlZmluZSBXTTg3MzdfUlZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSVlUgKi8KKyNkZWZpbmUgV004NzM3X1JWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogUlZVICovCisjZGVmaW5lIFdNODczN19SVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJWVSAqLworI2RlZmluZSBXTTg3MzdfUklOVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBSSU5WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg3MzdfUklOVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBSSU5WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg3MzdfUklOVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBSSU5WT0wgLSBbNzowXSAqLworCisvKgorICogUjIgKDB4MDIpIC0gQVVESU8gcGF0aCBMCisgKi8KKyNkZWZpbmUgV004NzM3X0xJTlNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDE4MCAgLyogTElOU0VMIC0gWzg6N10gKi8KKyNkZWZpbmUgV004NzM3X0xJTlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTElOU0VMIC0gWzg6N10gKi8KKyNkZWZpbmUgV004NzM3X0xJTlNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTElOU0VMIC0gWzg6N10gKi8KKyNkZWZpbmUgV004NzM3X0xNSUNCT09TVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA2MCAgLyogTE1JQ0JPT1NUIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004NzM3X0xNSUNCT09TVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTE1JQ0JPT1NUIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004NzM3X0xNSUNCT09TVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTE1JQ0JPT1NUIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004NzM3X0xNQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTE1CRSAqLworI2RlZmluZSBXTTg3MzdfTE1CRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMTUJFICovCisjZGVmaW5lIFdNODczN19MTUJFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExNQkUgKi8KKyNkZWZpbmUgV004NzM3X0xNQkVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE1CRSAqLworI2RlZmluZSBXTTg3MzdfTE1aQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBMTVpDICovCisjZGVmaW5lIFdNODczN19MTVpDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExNWkMgKi8KKyNkZWZpbmUgV004NzM3X0xNWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTE1aQyAqLworI2RlZmluZSBXTTg3MzdfTE1aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMTVpDICovCisjZGVmaW5lIFdNODczN19MUFpDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIExQWkMgKi8KKyNkZWZpbmUgV004NzM3X0xQWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTFBaQyAqLworI2RlZmluZSBXTTg3MzdfTFBaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMUFpDICovCisjZGVmaW5lIFdNODczN19MUFpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExQWkMgKi8KKyNkZWZpbmUgV004NzM3X0xaQ1RPX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogTFpDVE8gLSBbMTowXSAqLworI2RlZmluZSBXTTg3MzdfTFpDVE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMWkNUTyAtIFsxOjBdICovCisjZGVmaW5lIFdNODczN19MWkNUT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExaQ1RPIC0gWzE6MF0gKi8KKworLyoKKyAqIFIzICgweDAzKSAtIEFVRElPIHBhdGggUgorICovCisjZGVmaW5lIFdNODczN19SSU5TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxODAgIC8qIFJJTlNFTCAtIFs4OjddICovCisjZGVmaW5lIFdNODczN19SSU5TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJJTlNFTCAtIFs4OjddICovCisjZGVmaW5lIFdNODczN19SSU5TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFJJTlNFTCAtIFs4OjddICovCisjZGVmaW5lIFdNODczN19STUlDQk9PU1RfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwNjAgIC8qIFJNSUNCT09TVCAtIFs2OjVdICovCisjZGVmaW5lIFdNODczN19STUlDQk9PU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFJNSUNCT09TVCAtIFs2OjVdICovCisjZGVmaW5lIFdNODczN19STUlDQk9PU1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFJNSUNCT09TVCAtIFs2OjVdICovCisjZGVmaW5lIFdNODczN19STUJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFJNQkUgKi8KKyNkZWZpbmUgV004NzM3X1JNQkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUk1CRSAqLworI2RlZmluZSBXTTg3MzdfUk1CRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBSTUJFICovCisjZGVmaW5lIFdNODczN19STUJFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJNQkUgKi8KKyNkZWZpbmUgV004NzM3X1JNWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogUk1aQyAqLworI2RlZmluZSBXTTg3MzdfUk1aQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBSTVpDICovCisjZGVmaW5lIFdNODczN19STVpDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJNWkMgKi8KKyNkZWZpbmUgV004NzM3X1JNWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk1aQyAqLworI2RlZmluZSBXTTg3MzdfUlBaQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBSUFpDICovCisjZGVmaW5lIFdNODczN19SUFpDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFJQWkMgKi8KKyNkZWZpbmUgV004NzM3X1JQWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogUlBaQyAqLworI2RlZmluZSBXTTg3MzdfUlBaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSUFpDICovCisjZGVmaW5lIFdNODczN19SWkNUT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIFJaQ1RPIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004NzM3X1JaQ1RPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUlpDVE8gLSBbMTowXSAqLworI2RlZmluZSBXTTg3MzdfUlpDVE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBSWkNUTyAtIFsxOjBdICovCisKKy8qCisgKiBSNCAoMHgwNCkgLSAzRCBFbmhhbmNlCisgKi8KKyNkZWZpbmUgV004NzM3X0RJVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogRElWMiAqLworI2RlZmluZSBXTTg3MzdfRElWMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBESVYyICovCisjZGVmaW5lIFdNODczN19ESVYyX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERJVjIgKi8KKyNkZWZpbmUgV004NzM3X0RJVjJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRElWMiAqLworI2RlZmluZSBXTTg3MzdfM0RMQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiAzRExDICovCisjZGVmaW5lIFdNODczN18zRExDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIDNETEMgKi8KKyNkZWZpbmUgV004NzM3XzNETENfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogM0RMQyAqLworI2RlZmluZSBXTTg3MzdfM0RMQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiAzRExDICovCisjZGVmaW5lIFdNODczN18zRFVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIDNEVUMgKi8KKyNkZWZpbmUgV004NzM3XzNEVUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogM0RVQyAqLworI2RlZmluZSBXTTg3MzdfM0RVQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiAzRFVDICovCisjZGVmaW5lIFdNODczN18zRFVDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIDNEVUMgKi8KKyNkZWZpbmUgV004NzM3XzNEREVQVEhfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxRSAgLyogM0RERVBUSCAtIFs0OjFdICovCisjZGVmaW5lIFdNODczN18zRERFUFRIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIDNEREVQVEggLSBbNDoxXSAqLworI2RlZmluZSBXTTg3MzdfM0RERVBUSF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiAzRERFUFRIIC0gWzQ6MV0gKi8KKyNkZWZpbmUgV004NzM3XzNERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogM0RFICovCisjZGVmaW5lIFdNODczN18zREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIDNERSAqLworI2RlZmluZSBXTTg3MzdfM0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiAzREUgKi8KKyNkZWZpbmUgV004NzM3XzNERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogM0RFICovCisKKy8qCisgKiBSNSAoMHgwNSkgLSBBREMgQ29udHJvbAorICovCisjZGVmaW5lIFdNODczN19NT05PTUlYX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxODAgIC8qIE1PTk9NSVggLSBbODo3XSAqLworI2RlZmluZSBXTTg3MzdfTU9OT01JWF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBNT05PTUlYIC0gWzg6N10gKi8KKyNkZWZpbmUgV004NzM3X01PTk9NSVhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTU9OT01JWCAtIFs4OjddICovCisjZGVmaW5lIFdNODczN19QT0xBUklUWV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNjAgIC8qIFBPTEFSSVRZIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004NzM3X1BPTEFSSVRZX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogUE9MQVJJVFkgLSBbNjo1XSAqLworI2RlZmluZSBXTTg3MzdfUE9MQVJJVFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBQT0xBUklUWSAtIFs2OjVdICovCisjZGVmaW5lIFdNODczN19IUE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEhQT1IgKi8KKyNkZWZpbmUgV004NzM3X0hQT1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSFBPUiAqLworI2RlZmluZSBXTTg3MzdfSFBPUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBIUE9SICovCisjZGVmaW5lIFdNODczN19IUE9SX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1IgKi8KKyNkZWZpbmUgV004NzM3X0xQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTFAgKi8KKyNkZWZpbmUgV004NzM3X0xQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTFAgKi8KKyNkZWZpbmUgV004NzM3X0xQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTFAgKi8KKyNkZWZpbmUgV004NzM3X0xQX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTFAgKi8KKyNkZWZpbmUgV004NzM3X01PTk9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTU9OT1VUICovCisjZGVmaW5lIFdNODczN19NT05PVVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1PTk9VVCAqLworI2RlZmluZSBXTTg3MzdfTU9OT1VUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNT05PVVQgKi8KKyNkZWZpbmUgV004NzM3X01PTk9VVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTU9OT1VUICovCisjZGVmaW5lIFdNODczN19BRENIUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFEQ0hQRCAqLworI2RlZmluZSBXTTg3MzdfQURDSFBEX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENIUEQgKi8KKyNkZWZpbmUgV004NzM3X0FEQ0hQRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDSFBEICovCisjZGVmaW5lIFdNODczN19BRENIUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0hQRCAqLworCisvKgorICogUjYgKDB4MDYpIC0gUG93ZXIgTWFuYWdlbWVudAorICovCisjZGVmaW5lIFdNODczN19WTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFZNSUQgKi8KKyNkZWZpbmUgV004NzM3X1ZNSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogVk1JRCAqLworI2RlZmluZSBXTTg3MzdfVk1JRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBWTUlEICovCisjZGVmaW5lIFdNODczN19WTUlEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZNSUQgKi8KKyNkZWZpbmUgV004NzM3X1ZSRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogVlJFRiAqLworI2RlZmluZSBXTTg3MzdfVlJFRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBWUkVGICovCisjZGVmaW5lIFdNODczN19WUkVGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFZSRUYgKi8KKyNkZWZpbmUgV004NzM3X1ZSRUZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVlJFRiAqLworI2RlZmluZSBXTTg3MzdfQUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBBSSAqLworI2RlZmluZSBXTTg3MzdfQUlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBBSSAqLworI2RlZmluZSBXTTg3MzdfQUlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBBSSAqLworI2RlZmluZSBXTTg3MzdfQUlfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSSAqLworI2RlZmluZSBXTTg3MzdfUEdMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBQR0wgKi8KKyNkZWZpbmUgV004NzM3X1BHTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogUEdMICovCisjZGVmaW5lIFdNODczN19QR0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFBHTCAqLworI2RlZmluZSBXTTg3MzdfUEdMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBQR0wgKi8KKyNkZWZpbmUgV004NzM3X1BHUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUEdSICovCisjZGVmaW5lIFdNODczN19QR1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFBHUiAqLworI2RlZmluZSBXTTg3MzdfUEdSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBQR1IgKi8KKyNkZWZpbmUgV004NzM3X1BHUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUEdSICovCisjZGVmaW5lIFdNODczN19BREwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFETCAqLworI2RlZmluZSBXTTg3MzdfQURMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBBREwgKi8KKyNkZWZpbmUgV004NzM3X0FETF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogQURMICovCisjZGVmaW5lIFdNODczN19BRExfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFETCAqLworI2RlZmluZSBXTTg3MzdfQURSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBRFIgKi8KKyNkZWZpbmUgV004NzM3X0FEUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQURSICovCisjZGVmaW5lIFdNODczN19BRFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEUiAqLworI2RlZmluZSBXTTg3MzdfQURSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRFIgKi8KKyNkZWZpbmUgV004NzM3X01JQ0JJQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogTUlDQklBUyAtIFsxOjBdICovCisjZGVmaW5lIFdNODczN19NSUNCSUFTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0JJQVMgLSBbMTowXSAqLworI2RlZmluZSBXTTg3MzdfTUlDQklBU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBNSUNCSUFTIC0gWzE6MF0gKi8KKworLyoKKyAqIFI3ICgweDA3KSAtIEF1ZGlvIEZvcm1hdAorICovCisjZGVmaW5lIFdNODczN19TRE9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFNET0RJUyAqLworI2RlZmluZSBXTTg3MzdfU0RPRElTX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBTRE9ESVMgKi8KKyNkZWZpbmUgV004NzM3X1NET0RJU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogU0RPRElTICovCisjZGVmaW5lIFdNODczN19TRE9ESVNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNET0RJUyAqLworI2RlZmluZSBXTTg3MzdfTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNUyAqLworI2RlZmluZSBXTTg3MzdfTVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNUyAqLworI2RlZmluZSBXTTg3MzdfTVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBNUyAqLworI2RlZmluZSBXTTg3MzdfTVNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNUyAqLworI2RlZmluZSBXTTg3MzdfTFJQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMUlAgKi8KKyNkZWZpbmUgV004NzM3X0xSUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTFJQICovCisjZGVmaW5lIFdNODczN19MUlBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExSUCAqLworI2RlZmluZSBXTTg3MzdfTFJQX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMUlAgKi8KKyNkZWZpbmUgV004NzM3X1dMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogV0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg3MzdfV0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBXTCAtIFszOjJdICovCisjZGVmaW5lIFdNODczN19XTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFdMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004NzM3X0ZPUk1BVF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogRk9STUFUIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004NzM3X0ZPUk1BVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRk9STUFUIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004NzM3X0ZPUk1BVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRk9STUFUIC0gWzE6MF0gKi8KKworLyoKKyAqIFI4ICgweDA4KSAtIENsb2NraW5nCisgKi8KKyNkZWZpbmUgV004NzM3X0FVVE9ERVRFQ1QgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQVVUT0RFVEVDVCAqLworI2RlZmluZSBXTTg3MzdfQVVUT0RFVEVDVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBVVRPREVURUNUICovCisjZGVmaW5lIFdNODczN19BVVRPREVURUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEFVVE9ERVRFQ1QgKi8KKyNkZWZpbmUgV004NzM3X0FVVE9ERVRFQ1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQVVUT0RFVEVDVCAqLworI2RlZmluZSBXTTg3MzdfQ0xLRElWMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBDTEtESVYyICovCisjZGVmaW5lIFdNODczN19DTEtESVYyX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIENMS0RJVjIgKi8KKyNkZWZpbmUgV004NzM3X0NMS0RJVjJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogQ0xLRElWMiAqLworI2RlZmluZSBXTTg3MzdfQ0xLRElWMl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDTEtESVYyICovCisjZGVmaW5lIFdNODczN19TUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM0UgIC8qIFNSIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004NzM3X1NSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1IgLSBbNToxXSAqLworI2RlZmluZSBXTTg3MzdfU1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBTUiAtIFs1OjFdICovCisjZGVmaW5lIFdNODczN19VU0JfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFVTQiBNT0RFICovCisjZGVmaW5lIFdNODczN19VU0JfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFVTQiBNT0RFICovCisjZGVmaW5lIFdNODczN19VU0JfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFVTQiBNT0RFICovCisjZGVmaW5lIFdNODczN19VU0JfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFVTQiBNT0RFICovCisKKy8qCisgKiBSOSAoMHgwOSkgLSBNSUMgUHJlYW1wIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTg3MzdfUkJZUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBSQllQRU4gKi8KKyNkZWZpbmUgV004NzM3X1JCWVBFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogUkJZUEVOICovCisjZGVmaW5lIFdNODczN19SQllQRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJCWVBFTiAqLworI2RlZmluZSBXTTg3MzdfUkJZUEVOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSQllQRU4gKi8KKyNkZWZpbmUgV004NzM3X0xCWVBFTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTEJZUEVOICovCisjZGVmaW5lIFdNODczN19MQllQRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIExCWVBFTiAqLworI2RlZmluZSBXTTg3MzdfTEJZUEVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMQllQRU4gKi8KKyNkZWZpbmUgV004NzM3X0xCWVBFTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEJZUEVOICovCisjZGVmaW5lIFdNODczN19NQkNUUkxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIE1CQ1RSTCAtIFsxOjBdICovCisjZGVmaW5lIFdNODczN19NQkNUUkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1CQ1RSTCAtIFsxOjBdICovCisjZGVmaW5lIFdNODczN19NQkNUUkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIE1CQ1RSTCAtIFsxOjBdICovCisKKy8qCisgKiBSMTAgKDB4MEEpIC0gTWlzYyBCaWFzIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTg3MzdfVk1JRFNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBWTUlEU0VMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004NzM3X1ZNSURTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogVk1JRFNFTCAtIFszOjJdICovCisjZGVmaW5lIFdNODczN19WTUlEU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFZNSURTRUwgLSBbMzoyXSAqLworI2RlZmluZSBXTTg3MzdfTElOUFVUMV9EQ19CSUFTX0VOQUJMRSAgICAgICAgICAgMHgwMDAyICAvKiBMSU5QVVQxIERDIEJJQVMgRU5BQkxFICovCisjZGVmaW5lIFdNODczN19MSU5QVVQxX0RDX0JJQVNfRU5BQkxFX01BU0sgICAgICAweDAwMDIgIC8qIExJTlBVVDEgREMgQklBUyBFTkFCTEUgKi8KKyNkZWZpbmUgV004NzM3X0xJTlBVVDFfRENfQklBU19FTkFCTEVfU0hJRlQgICAgICAgICAgMSAgLyogTElOUFVUMSBEQyBCSUFTIEVOQUJMRSAqLworI2RlZmluZSBXTTg3MzdfTElOUFVUMV9EQ19CSUFTX0VOQUJMRV9XSURUSCAgICAgICAgICAxICAvKiBMSU5QVVQxIERDIEJJQVMgRU5BQkxFICovCisjZGVmaW5lIFdNODczN19SSU5QVVQxX0RDX0JJQVNfRU5BQkxFICAgICAgICAgICAweDAwMDEgIC8qIFJJTlBVVDEgREMgQklBUyBFTkFCTEUgKi8KKyNkZWZpbmUgV004NzM3X1JJTlBVVDFfRENfQklBU19FTkFCTEVfTUFTSyAgICAgIDB4MDAwMSAgLyogUklOUFVUMSBEQyBCSUFTIEVOQUJMRSAqLworI2RlZmluZSBXTTg3MzdfUklOUFVUMV9EQ19CSUFTX0VOQUJMRV9TSElGVCAgICAgICAgICAwICAvKiBSSU5QVVQxIERDIEJJQVMgRU5BQkxFICovCisjZGVmaW5lIFdNODczN19SSU5QVVQxX0RDX0JJQVNfRU5BQkxFX1dJRFRIICAgICAgICAgIDEgIC8qIFJJTlBVVDEgREMgQklBUyBFTkFCTEUgKi8KKworLyoKKyAqIFIxMSAoMHgwQikgLSBOb2lzZSBHYXRlCisgKi8KKyNkZWZpbmUgV004NzM3X05HVEhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxQyAgLyogTkdUSCAtIFs0OjJdICovCisjZGVmaW5lIFdNODczN19OR1RIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIE5HVEggLSBbNDoyXSAqLworI2RlZmluZSBXTTg3MzdfTkdUSF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBOR1RIIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004NzM3X05HQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTkdBVCAqLworI2RlZmluZSBXTTg3MzdfTkdBVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBOR0FUICovCisjZGVmaW5lIFdNODczN19OR0FUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE5HQVQgKi8KKyNkZWZpbmUgV004NzM3X05HQVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTkdBVCAqLworCisvKgorICogUjEyICgweDBDKSAtIEFMQzEKKyAqLworI2RlZmluZSBXTTg3MzdfQUxDU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTgwICAvKiBBTENTRUwgLSBbODo3XSAqLworI2RlZmluZSBXTTg3MzdfQUxDU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBBTENTRUwgLSBbODo3XSAqLworI2RlZmluZSBXTTg3MzdfQUxDU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBTENTRUwgLSBbODo3XSAqLworI2RlZmluZSBXTTg3MzdfTUFYX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBNQVggR0FJTiAtIFs2OjRdICovCisjZGVmaW5lIFdNODczN19NQVhfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIE1BWCBHQUlOIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004NzM3X01BWF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTUFYIEdBSU4gLSBbNjo0XSAqLworI2RlZmluZSBXTTg3MzdfQUxDTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBBTENMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004NzM3X0FMQ0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQUxDTCAtIFszOjBdICovCisjZGVmaW5lIFdNODczN19BTENMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFMQ0wgLSBbMzowXSAqLworCisvKgorICogUjEzICgweDBEKSAtIEFMQzIKKyAqLworI2RlZmluZSBXTTg3MzdfQUxDWkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBTENaQ0UgKi8KKyNkZWZpbmUgV004NzM3X0FMQ1pDRV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUxDWkNFICovCisjZGVmaW5lIFdNODczN19BTENaQ0VfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFMQ1pDRSAqLworI2RlZmluZSBXTTg3MzdfQUxDWkNFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBTENaQ0UgKi8KKyNkZWZpbmUgV004NzM3X0hMRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogSExEIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004NzM3X0hMRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSExEIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004NzM3X0hMRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogSExEIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxNCAoMHgwRSkgLSBBTEMzCisgKi8KKyNkZWZpbmUgV004NzM3X0RDWV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGMCAgLyogRENZIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004NzM3X0RDWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRENZIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004NzM3X0RDWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRENZIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004NzM3X0FUS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogQVRLIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004NzM3X0FUS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQVRLIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004NzM3X0FUS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQVRLIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxNSAoMHgwRikgLSBSZXNldAorICovCisjZGVmaW5lIFdNODczN19SRVNFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxRkYgIC8qIFJFU0VUIC0gWzg6MF0gKi8KKyNkZWZpbmUgV004NzM3X1JFU0VUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUkVTRVQgLSBbODowXSAqLworI2RlZmluZSBXTTg3MzdfUkVTRVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBSRVNFVCAtIFs4OjBdICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NDEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzQxLmMKaW5kZXggYWVhNjBlZi4uNDk0ZjJkMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3NDEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc0MS5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogCkBAIC05NCwxMCArOTMsMTEgQEAKIAogc3RhdGljIGludCB3bTg3NDFfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODc0MV9kYXBtX3dpZGdldHMsCi0JCQkJICBBUlJBWV9TSVpFKHdtODc0MV9kYXBtX3dpZGdldHMpKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODc0MV9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODc0MV9kYXBtX3dpZGdldHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NTUsNyArNDU1LDcgQEAKIAkucmVzdW1lID0Jd204NzQxX3Jlc3VtZSwKIAkucmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODc0MV9yZWdfZGVmYXVsdHMpLAogCS5yZWdfd29yZF9zaXplID0gc2l6ZW9mKHUxNiksCi0JLnJlZ19jYWNoZV9kZWZhdWx0ID0gJndtODc0MV9yZWdfZGVmYXVsdHMsCisJLnJlZ19jYWNoZV9kZWZhdWx0ID0gd204NzQxX3JlZ19kZWZhdWx0cywKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYwppbmRleCA2YzkyNGNkLi4zOGYzOGZkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAKICNpbmNsdWRlICJ3bTg3NTAuaCIKQEAgLTUzLDcgKzUyLDYgQEAKIHN0cnVjdCB3bTg3NTBfcHJpdiB7CiAJdW5zaWduZWQgaW50IHN5c2NsazsKIAllbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2xfdHlwZTsKLQl1MTYgcmVnX2NhY2hlW0FSUkFZX1NJWkUod204NzUwX3JlZyldOwogfTsKIAogI2RlZmluZSB3bTg3NTBfcmVzZXQoYykJc25kX3NvY193cml0ZShjLCBXTTg3NTBfUkVTRVQsIDApCkBAIC0zOTksMTAgKzM5NywxMSBAQAogCiBzdGF0aWMgaW50IHdtODc1MF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NzUwX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUod204NzUwX2RhcG1fd2lkZ2V0cykpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg3NTBfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg3NTBfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MTUsNyArNjE0LDcgQEAKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CiAJCQkvKiBTZXQgVk1JRCB0byA1ayAqLwogCQkJc25kX3NvY193cml0ZShjb2RlYywgV004NzUwX1BXUjEsIHB3cl9yZWcgfCAweDAxYzEpOwogCkBAIC02MzAsNyArNjI5LDcgQEAKIAkJc25kX3NvY193cml0ZShjb2RlYywgV004NzUwX1BXUjEsIDB4MDAwMSk7CiAJCWJyZWFrOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKaW5kZXggODdjYWFlNS4uNzliMDJhZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgpAQCAtNjIzLDEwICs2MjIsMTEgQEAKIAogc3RhdGljIGludCB3bTg3NTNfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODc1M19kYXBtX3dpZGdldHMsCi0JCQkJICBBUlJBWV9TSVpFKHdtODc1M19kYXBtX3dpZGdldHMpKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204NzUzX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204NzUzX2RhcG1fd2lkZ2V0cykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTI0NSw3ICsxMjQ1LDcgQEAKIAkJc25kX3NvY193cml0ZShjb2RlYywgV004NzUzX1BXUjEsIDB4MDAwMSk7CiAJCWJyZWFrOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQzNSw5ICsxNDM1LDExIEBACiAKIHN0YXRpYyB2b2lkIHdtODc1M193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHNuZF9zb2NfY29kZWMsIGRlbGF5ZWRfd29yay53b3JrKTsKLQl3bTg3NTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIGNvZGVjLT5iaWFzX2xldmVsKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0LAorCQkJICAgICBkZWxheWVkX3dvcmsud29yayk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFwbS0+Y29kZWM7CisJd204NzUzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBkYXBtLT5iaWFzX2xldmVsKTsKIH0KIAogc3RhdGljIGludCB3bTg3NTNfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKQEAgLTE0NjYsNDEgKzE0NjgsMjIgQEAKIAl3bTg3NTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAogCS8qIGNoYXJnZSB3bTg3NTMgY2FwcyAqLwotCWlmIChjb2RlYy0+c3VzcGVuZF9iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PTikgeworCWlmIChjb2RlYy0+ZGFwbS5zdXNwZW5kX2JpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09OKSB7CiAJCXdtODc1M19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1BSRVBBUkUpOwotCQljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PTjsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjb2RlYy0+ZGVsYXllZF93b3JrLAorCQljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09OOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNvZGVjLT5kYXBtLmRlbGF5ZWRfd29yaywKIAkJCW1zZWNzX3RvX2ppZmZpZXMoY2Fwc19jaGFyZ2UpKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gZm9yY2VzIGFueSBkZWxheWVkIHdvcmsgdG8gYmUgcXVldWVkIGFuZCBydW4uCi0gKi8KLXN0YXRpYyBpbnQgcnVuX2RlbGF5ZWRfd29yayhzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yaykKLXsKLQlpbnQgcmV0OwotCi0JLyogY2FuY2VsIGFueSB3b3JrIHdhaXRpbmcgdG8gYmUgcXVldWVkLiAqLwotCXJldCA9IGNhbmNlbF9kZWxheWVkX3dvcmsoZHdvcmspOwotCi0JLyogaWYgdGhlcmUgd2FzIGFueSB3b3JrIHdhaXRpbmcgdGhlbiB3ZSBydW4gaXQgbm93IGFuZAotCSAqIHdhaXQgZm9yIGl0J3MgY29tcGxldGlvbiAqLwotCWlmIChyZXQpIHsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKGR3b3JrLCAwKTsKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCB3bTg3NTNfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJaW50IHJldDsKIAotCUlOSVRfREVMQVlFRF9XT1JLKCZjb2RlYy0+ZGVsYXllZF93b3JrLCB3bTg3NTNfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJmNvZGVjLT5kYXBtLmRlbGF5ZWRfd29yaywgd204NzUzX3dvcmspOwogCiAJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDcsIDksIHdtODc1My0+Y29udHJvbF90eXBlKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMTUxOSw3ICsxNTAyLDcgQEAKIAogCS8qIGNoYXJnZSBvdXRwdXQgY2FwcyAqLwogCXdtODc1M19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1BSRVBBUkUpOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY29kZWMtPmRlbGF5ZWRfd29yaywKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNvZGVjLT5kYXBtLmRlbGF5ZWRfd29yaywKIAkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoY2Fwc19jaGFyZ2UpKTsKIAogCS8qIHNldCB0aGUgdXBkYXRlIGJpdHMgKi8KQEAgLTE1NDQsNyArMTUyNyw3IEBACiAvKiBwb3dlciBkb3duIGNoaXAgKi8KIHN0YXRpYyBpbnQgd204NzUzX3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JcnVuX2RlbGF5ZWRfd29yaygmY29kZWMtPmRlbGF5ZWRfd29yayk7CisJZmx1c2hfZGVsYXllZF93b3JrX3N5bmMoJmNvZGVjLT5kYXBtLmRlbGF5ZWRfd29yayk7CiAJd204NzUzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NzAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzcwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliOTJiYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzcwLmMKQEAgLTAsMCArMSw3NDkgQEAKKy8qCisgKiB3bTg3NzAuYyAgLS0gIFdNODc3MCBBTFNBIFNvQyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgcGxjCisgKgorICogQXV0aG9yOiBEaW1pdHJpcyBQYXBhc3RhbW9zIDxkcEBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisKKyNpbmNsdWRlICJ3bTg3NzAuaCIKKworI2RlZmluZSBXTTg3NzBfTlVNX1NVUFBMSUVTIDMKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg3NzBfc3VwcGx5X25hbWVzW1dNODc3MF9OVU1fU1VQUExJRVNdID0geworCSJBVkREMSIsCisJIkFWREQyIiwKKwkiRFZERCIKK307CisKK3N0YXRpYyBjb25zdCB1MTYgd204NzcwX3JlZ19kZWZzW1dNODc3MF9DQUNIRVJFR05VTV0gPSB7CisJMHg3ZiwgMHg3ZiwgMHg3ZiwgMHg3ZiwKKwkweDdmLCAweDdmLCAweDdmLCAweDdmLAorCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAwLCAweDkwLCAwLAorCTAsIDB4MjIsIDB4MjIsIDB4M2UsCisJMHhjLCAweGMsIDB4MTAwLCAweDE4OSwKKwkweDE4OSwgMHg4NzcwCit9OworCitzdHJ1Y3Qgd204NzcwX3ByaXYgeworCWVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbF90eXBlOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1dNODc3MF9OVU1fU1VQUExJRVNdOworCXN0cnVjdCBub3RpZmllcl9ibG9jayBkaXNhYmxlX25iW1dNODc3MF9OVU1fU1VQUExJRVNdOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgc3lzY2xrOworfTsKKworc3RhdGljIGludCB2b3V0MTJzdXBwbHlfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCk7CitzdGF0aWMgaW50IHZvdXQzNHN1cHBseV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KTsKKworLyoKKyAqIFdlIGNhbid0IHVzZSB0aGUgc2FtZSBub3RpZmllciBibG9jayBmb3IgbW9yZSB0aGFuIG9uZSBzdXBwbHkgYW5kCisgKiB0aGVyZSdzIG5vIHdheSBJIGNhbiBzZWUgdG8gZ2V0IGZyb20gYSBjYWxsYmFjayB0byB0aGUgY2FsbGVyCisgKiBleGNlcHQgY29udGFpbmVyX29mKCkuCisgKi8KKyNkZWZpbmUgV004NzcwX1JFR1VMQVRPUl9FVkVOVChuKSBcCitzdGF0aWMgaW50IHdtODc3MF9yZWd1bGF0b3JfZXZlbnRfIyNuKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIFwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKSAgICBcCit7IFwKKwlzdHJ1Y3Qgd204NzcwX3ByaXYgKndtODc3MCA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IHdtODc3MF9wcml2LCBcCisJCQkJICAgICBkaXNhYmxlX25iW25dKTsgXAorCWlmIChldmVudCAmIFJFR1VMQVRPUl9FVkVOVF9ESVNBQkxFKSB7IFwKKwkJd204NzcwLT5jb2RlYy0+Y2FjaGVfc3luYyA9IDE7IFwKKwl9IFwKKwlyZXR1cm4gMDsgXAorfQorCitXTTg3NzBfUkVHVUxBVE9SX0VWRU5UKDApCitXTTg3NzBfUkVHVUxBVE9SX0VWRU5UKDEpCitXTTg3NzBfUkVHVUxBVE9SX0VWRU5UKDIpCisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShhZGNfdGx2LCAtMTIwMCwgMTAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYWNfZGlnX3RsdiwgLTEyNzUwLCA1MCwgMSk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGFjX2FsZ190bHYsIC0xMjcwMCwgMTAwLCAxKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmRhY19waGFzZV90ZXh0W11bMl0gPSB7CisJeyAiREFDMSBOb3JtYWwiLCAiREFDMSBJbnZlcnRlZCIgfSwKKwl7ICJEQUMyIE5vcm1hbCIsICJEQUMyIEludmVydGVkIiB9LAorCXsgIkRBQzMgTm9ybWFsIiwgIkRBQzMgSW52ZXJ0ZWQiIH0sCisJeyAiREFDNCBOb3JtYWwiLCAiREFDNCBJbnZlcnRlZCIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGFjX3BoYXNlW10gPSB7CisJU09DX0VOVU1fRE9VQkxFKFdNODc3MF9EQUNQSEFTRSwgMCwgMSwgMiwgZGFjX3BoYXNlX3RleHRbMF0pLAorCVNPQ19FTlVNX0RPVUJMRShXTTg3NzBfREFDUEhBU0UsIDIsIDMsIDIsIGRhY19waGFzZV90ZXh0WzFdKSwKKwlTT0NfRU5VTV9ET1VCTEUoV004NzcwX0RBQ1BIQVNFLCA0LCA1LCAyLCBkYWNfcGhhc2VfdGV4dFsyXSksCisJU09DX0VOVU1fRE9VQkxFKFdNODc3MF9EQUNQSEFTRSwgNiwgNywgMiwgZGFjX3BoYXNlX3RleHRbM10pLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODc3MF9zbmRfY29udHJvbHNbXSA9IHsKKwkvKiBnbG9iYWwgREFDIHBsYXliYWNrIGNvbnRyb2xzICovCisJU09DX1NJTkdMRV9UTFYoIkRBQyBQbGF5YmFjayBWb2x1bWUiLCBXTTg3NzBfTVNESUdWT0wsIDAsIDI1NSwgMCwKKwkJZGFjX2RpZ190bHYpLAorCVNPQ19TSU5HTEUoIkRBQyBQbGF5YmFjayBTd2l0Y2giLCBXTTg3NzBfREFDTVVURSwgNCwgMSwgMSksCisJU09DX1NJTkdMRSgiREFDIFBsYXliYWNrIFpDIFN3aXRjaCIsIFdNODc3MF9EQUNDVFJMMSwgMCwgMSwgMCksCisKKwkvKiBnbG9iYWwgVk9VVCBwbGF5YmFjayBjb250cm9scyAqLworCVNPQ19TSU5HTEVfVExWKCJWT1VUIFBsYXliYWNrIFZvbHVtZSIsIFdNODc3MF9NU0FMR1ZPTCwgMCwgMTI3LCAwLAorCQlkYWNfYWxnX3RsdiksCisJU09DX1NJTkdMRSgiVk9VVCBQbGF5YmFjayBaQyBTd2l0Y2giLCBXTTg3NzBfTVNBTEdWT0wsIDcsIDEsIDApLAorCisJLyogVk9VVDEvMi8zLzQgc3BlY2lmaWMgY29udHJvbHMgKi8KKwlTT0NfRE9VQkxFX1JfVExWKCJWT1VUMSBQbGF5YmFjayBWb2x1bWUiLCBXTTg3NzBfVk9VVDFMVk9MLAorCQlXTTg3NzBfVk9VVDFSVk9MLCAwLCAxMjcsIDAsIGRhY19hbGdfdGx2KSwKKwlTT0NfRE9VQkxFX1IoIlZPVVQxIFBsYXliYWNrIFpDIFN3aXRjaCIsIFdNODc3MF9WT1VUMUxWT0wsCisJCVdNODc3MF9WT1VUMVJWT0wsIDcsIDEsIDApLAorCVNPQ19ET1VCTEVfUl9UTFYoIlZPVVQyIFBsYXliYWNrIFZvbHVtZSIsIFdNODc3MF9WT1VUMkxWT0wsCisJCVdNODc3MF9WT1VUMlJWT0wsIDAsIDEyNywgMCwgZGFjX2FsZ190bHYpLAorCVNPQ19ET1VCTEVfUigiVk9VVDIgUGxheWJhY2sgWkMgU3dpdGNoIiwgV004NzcwX1ZPVVQyTFZPTCwKKwkJV004NzcwX1ZPVVQyUlZPTCwgNywgMSwgMCksCisJU09DX0RPVUJMRV9SX1RMVigiVk9VVDMgUGxheWJhY2sgVm9sdW1lIiwgV004NzcwX1ZPVVQzTFZPTCwKKwkJV004NzcwX1ZPVVQzUlZPTCwgMCwgMTI3LCAwLCBkYWNfYWxnX3RsdiksCisJU09DX0RPVUJMRV9SKCJWT1VUMyBQbGF5YmFjayBaQyBTd2l0Y2giLCBXTTg3NzBfVk9VVDNMVk9MLAorCQlXTTg3NzBfVk9VVDNSVk9MLCA3LCAxLCAwKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJWT1VUNCBQbGF5YmFjayBWb2x1bWUiLCBXTTg3NzBfVk9VVDRMVk9MLAorCQlXTTg3NzBfVk9VVDRSVk9MLCAwLCAxMjcsIDAsIGRhY19hbGdfdGx2KSwKKwlTT0NfRE9VQkxFX1IoIlZPVVQ0IFBsYXliYWNrIFpDIFN3aXRjaCIsIFdNODc3MF9WT1VUNExWT0wsCisJCVdNODc3MF9WT1VUNFJWT0wsIDcsIDEsIDApLAorCisJLyogREFDMS8yLzMvNCBzcGVjaWZpYyBjb250cm9scyAqLworCVNPQ19ET1VCTEVfUl9UTFYoIkRBQzEgUGxheWJhY2sgVm9sdW1lIiwgV004NzcwX0RBQzFMVk9MLAorCQlXTTg3NzBfREFDMVJWT0wsIDAsIDI1NSwgMCwgZGFjX2RpZ190bHYpLAorCVNPQ19TSU5HTEUoIkRBQzEgRGVlbXBoYXNpcyBTd2l0Y2giLCBXTTg3NzBfREFDQ1RSTDIsIDAsIDEsIDApLAorCVNPQ19FTlVNKCJEQUMxIFBoYXNlIiwgZGFjX3BoYXNlWzBdKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJEQUMyIFBsYXliYWNrIFZvbHVtZSIsIFdNODc3MF9EQUMyTFZPTCwKKwkJV004NzcwX0RBQzJSVk9MLCAwLCAyNTUsIDAsIGRhY19kaWdfdGx2KSwKKwlTT0NfU0lOR0xFKCJEQUMyIERlZW1waGFzaXMgU3dpdGNoIiwgV004NzcwX0RBQ0NUUkwyLCAxLCAxLCAwKSwKKwlTT0NfRU5VTSgiREFDMiBQaGFzZSIsIGRhY19waGFzZVsxXSksCisJU09DX0RPVUJMRV9SX1RMVigiREFDMyBQbGF5YmFjayBWb2x1bWUiLCBXTTg3NzBfREFDM0xWT0wsCisJCVdNODc3MF9EQUMzUlZPTCwgMCwgMjU1LCAwLCBkYWNfZGlnX3RsdiksCisJU09DX1NJTkdMRSgiREFDMyBEZWVtcGhhc2lzIFN3aXRjaCIsIFdNODc3MF9EQUNDVFJMMiwgMiwgMSwgMCksCisJU09DX0VOVU0oIkRBQzMgUGhhc2UiLCBkYWNfcGhhc2VbMl0pLAorCVNPQ19ET1VCTEVfUl9UTFYoIkRBQzQgUGxheWJhY2sgVm9sdW1lIiwgV004NzcwX0RBQzRMVk9MLAorCQlXTTg3NzBfREFDNFJWT0wsIDAsIDI1NSwgMCwgZGFjX2RpZ190bHYpLAorCVNPQ19TSU5HTEUoIkRBQzQgRGVlbXBoYXNpcyBTd2l0Y2giLCBXTTg3NzBfREFDQ1RSTDIsIDMsIDEsIDApLAorCVNPQ19FTlVNKCJEQUM0IFBoYXNlIiwgZGFjX3BoYXNlWzNdKSwKKworCS8qIEFEQyBzcGVjaWZpYyBjb250cm9scyAqLworCVNPQ19ET1VCTEVfUl9UTFYoIkNhcHR1cmUgVm9sdW1lIiwgV004NzcwX0FEQ0xDVFJMLCBXTTg3NzBfQURDUkNUUkwsCisJCTAsIDMxLCAwLCBhZGNfdGx2KSwKKwlTT0NfRE9VQkxFX1IoIkNhcHR1cmUgU3dpdGNoIiwgV004NzcwX0FEQ0xDVFJMLCBXTTg3NzBfQURDUkNUUkwsCisJCTUsIDEsIDEpLAorCisJLyogb3RoZXIgY29udHJvbHMgKi8KKwlTT0NfU0lOR0xFKCJBREMgMTI4eCBPdmVyc2FtcGxpbmcgU3dpdGNoIiwgV004NzcwX01TVFJDVFJMLCAzLCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJBREMgSGlnaHBhc3MgRmlsdGVyIFN3aXRjaCIsIFdNODc3MF9JRkFDRUNUUkwsIDgsIDEsIDEpCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqYWluX3RleHRbXSA9IHsKKwkiQUlOMSIsICJBSU4yIiwgIkFJTjMiLCAiQUlONCIsCisJIkFJTjUiLCAiQUlONiIsICJBSU43IiwgIkFJTjgiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpbl9lbnVtID0KKwlTT0NfRU5VTV9ET1VCTEUoV004NzcwX0FEQ01VWCwgMCwgNCwgOCwgYWluX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWluX211eCA9CisJU09DX0RBUE1fRU5VTSgiQ2FwdHVyZSBNdXgiLCBhaW5fZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2b3V0MV9taXhfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkRBQzEgU3dpdGNoIiwgV004NzcwX09VVE1VWDEsIDAsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiQVVYMSBTd2l0Y2giLCBXTTg3NzBfT1VUTVVYMSwgMSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJCeXBhc3MgU3dpdGNoIiwgV004NzcwX09VVE1VWDEsIDIsIDEsIDApCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdm91dDJfbWl4X2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJEQUMyIFN3aXRjaCIsIFdNODc3MF9PVVRNVVgxLCAzLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkFVWDIgU3dpdGNoIiwgV004NzcwX09VVE1VWDEsIDQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiQnlwYXNzIFN3aXRjaCIsIFdNODc3MF9PVVRNVVgxLCA1LCAxLCAwKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZvdXQzX21peF9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiREFDMyBTd2l0Y2giLCBXTTg3NzBfT1VUTVVYMiwgMCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJBVVgzIFN3aXRjaCIsIFdNODc3MF9PVVRNVVgyLCAxLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJ5cGFzcyBTd2l0Y2giLCBXTTg3NzBfT1VUTVVYMiwgMiwgMSwgMCkKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2b3V0NF9taXhfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkRBQzQgU3dpdGNoIiwgV004NzcwX09VVE1VWDIsIDMsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiQnlwYXNzIFN3aXRjaCIsIFdNODc3MF9PVVRNVVgyLCA0LCAxLCAwKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODc3MF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkFVWDEiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkFVWDIiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkFVWDMiKSwKKworCVNORF9TT0NfREFQTV9JTlBVVCgiQUlOMSIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQUlOMiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQUlOMyIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQUlONCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQUlONSIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQUlONiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQUlONyIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQUlOOCIpLAorCisJU05EX1NPQ19EQVBNX01VWCgiQ2FwdHVyZSBNdXgiLCBXTTg3NzBfQURDTVVYLCA4LCAxLCAmYWluX211eCksCisKKwlTTkRfU09DX0RBUE1fQURDKCJBREMiLCAiQ2FwdHVyZSIsIFdNODc3MF9QV0ROQ1RSTCwgMSwgMSksCisKKwlTTkRfU09DX0RBUE1fREFDKCJEQUMxIiwgIlBsYXliYWNrIiwgV004NzcwX1BXRE5DVFJMLCAyLCAxKSwKKwlTTkRfU09DX0RBUE1fREFDKCJEQUMyIiwgIlBsYXliYWNrIiwgV004NzcwX1BXRE5DVFJMLCAzLCAxKSwKKwlTTkRfU09DX0RBUE1fREFDKCJEQUMzIiwgIlBsYXliYWNrIiwgV004NzcwX1BXRE5DVFJMLCA0LCAxKSwKKwlTTkRfU09DX0RBUE1fREFDKCJEQUM0IiwgIlBsYXliYWNrIiwgV004NzcwX1BXRE5DVFJMLCA1LCAxKSwKKworCVNORF9TT0NfREFQTV9TVVBQTFkoIlZPVVQxMiBTdXBwbHkiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCXZvdXQxMnN1cHBseV9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIlZPVVQzNCBTdXBwbHkiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCXZvdXQzNHN1cHBseV9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCisJU05EX1NPQ19EQVBNX01JWEVSKCJWT1VUMSBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJdm91dDFfbWl4X2NvbnRyb2xzLCBBUlJBWV9TSVpFKHZvdXQxX21peF9jb250cm9scykpLAorCVNORF9TT0NfREFQTV9NSVhFUigiVk9VVDIgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCXZvdXQyX21peF9jb250cm9scywgQVJSQVlfU0laRSh2b3V0Ml9taXhfY29udHJvbHMpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlZPVVQzIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQl2b3V0M19taXhfY29udHJvbHMsIEFSUkFZX1NJWkUodm91dDNfbWl4X2NvbnRyb2xzKSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJWT1VUNCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJdm91dDRfbWl4X2NvbnRyb2xzLCBBUlJBWV9TSVpFKHZvdXQ0X21peF9jb250cm9scykpLAorCisJU05EX1NPQ19EQVBNX09VVFBVVCgiVk9VVDEiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJWT1VUMiIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlZPVVQzIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiVk9VVDQiKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204NzcwX2ludGVyY29uW10gPSB7CisJeyAiQ2FwdHVyZSBNdXgiLCAiQUlOMSIsICJBSU4xIiB9LAorCXsgIkNhcHR1cmUgTXV4IiwgIkFJTjIiLCAiQUlOMiIgfSwKKwl7ICJDYXB0dXJlIE11eCIsICJBSU4zIiwgIkFJTjMiIH0sCisJeyAiQ2FwdHVyZSBNdXgiLCAiQUlONCIsICJBSU40IiB9LAorCXsgIkNhcHR1cmUgTXV4IiwgIkFJTjUiLCAiQUlONSIgfSwKKwl7ICJDYXB0dXJlIE11eCIsICJBSU42IiwgIkFJTjYiIH0sCisJeyAiQ2FwdHVyZSBNdXgiLCAiQUlONyIsICJBSU43IiB9LAorCXsgIkNhcHR1cmUgTXV4IiwgIkFJTjgiLCAiQUlOOCIgfSwKKworCXsgIkFEQyIsIE5VTEwsICJDYXB0dXJlIE11eCIgfSwKKworCXsgIlZPVVQxIE1peGVyIiwgTlVMTCwgIlZPVVQxMiBTdXBwbHkiIH0sCisJeyAiVk9VVDEgTWl4ZXIiLCAiREFDMSBTd2l0Y2giLCAiREFDMSIgfSwKKwl7ICJWT1VUMSBNaXhlciIsICJBVVgxIFN3aXRjaCIsICJBVVgxIiB9LAorCXsgIlZPVVQxIE1peGVyIiwgIkJ5cGFzcyBTd2l0Y2giLCAiQ2FwdHVyZSBNdXgiIH0sCisKKwl7ICJWT1VUMiBNaXhlciIsIE5VTEwsICJWT1VUMTIgU3VwcGx5IiB9LAorCXsgIlZPVVQyIE1peGVyIiwgIkRBQzIgU3dpdGNoIiwgIkRBQzIiIH0sCisJeyAiVk9VVDIgTWl4ZXIiLCAiQVVYMiBTd2l0Y2giLCAiQVVYMiIgfSwKKwl7ICJWT1VUMiBNaXhlciIsICJCeXBhc3MgU3dpdGNoIiwgIkNhcHR1cmUgTXV4IiB9LAorCisJeyAiVk9VVDMgTWl4ZXIiLCBOVUxMLCAiVk9VVDM0IFN1cHBseSIgfSwKKwl7ICJWT1VUMyBNaXhlciIsICJEQUMzIFN3aXRjaCIsICJEQUMzIiB9LAorCXsgIlZPVVQzIE1peGVyIiwgIkFVWDMgU3dpdGNoIiwgIkFVWDMiIH0sCisJeyAiVk9VVDMgTWl4ZXIiLCAiQnlwYXNzIFN3aXRjaCIsICJDYXB0dXJlIE11eCIgfSwKKworCXsgIlZPVVQ0IE1peGVyIiwgTlVMTCwgIlZPVVQzNCBTdXBwbHkiIH0sCisJeyAiVk9VVDQgTWl4ZXIiLCAiREFDNCBTd2l0Y2giLCAiREFDNCIgfSwKKwl7ICJWT1VUNCBNaXhlciIsICJCeXBhc3MgU3dpdGNoIiwgIkNhcHR1cmUgTXV4IiB9LAorCisJeyAiVk9VVDEiLCBOVUxMLCAiVk9VVDEgTWl4ZXIiIH0sCisJeyAiVk9VVDIiLCBOVUxMLCAiVk9VVDIgTWl4ZXIiIH0sCisJeyAiVk9VVDMiLCBOVUxMLCAiVk9VVDMgTWl4ZXIiIH0sCisJeyAiVk9VVDQiLCBOVUxMLCAiVk9VVDQgTWl4ZXIiIH0KK307CisKK3N0YXRpYyBpbnQgdm91dDEyc3VwcGx5X2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJY29kZWMgPSB3LT5jb2RlYzsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3NzBfT1VUTVVYMSwgMHgxODAsIDApOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzcwX09VVE1VWDEsIDB4MTgwLCAweDE4MCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZvdXQzNHN1cHBseV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCWNvZGVjID0gdy0+Y29kZWM7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzcwX09VVE1VWDIsIDB4MTgwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODc3MF9PVVRNVVgyLCAweDE4MCwgMHgxODApOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzBfcmVzZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3NzBfUkVTRVQsIDApOworfQorCitzdGF0aWMgaW50IHdtODc3MF9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgaWZhY2UsIG1hc3RlcjsKKworCWNvZGVjID0gZGFpLT5jb2RlYzsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCW1hc3RlciA9IDB4MTAwOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCW1hc3RlciA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmYWNlID0gMDsKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWlmYWNlIHw9IDB4MjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJaWZhY2UgfD0gMHgxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJaWZhY2UgfD0gMHhjOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQlpZmFjZSB8PSAweDg7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCWlmYWNlIHw9IDB4NDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzcwX0lGQUNFQ1RSTCwgMHhmLCBpZmFjZSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzcwX01TVFJDVFJMLCAweDEwMCwgbWFzdGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgaW50IG1jbGtfcmF0aW9zW10gPSB7CisJMTI4LAorCTE5MiwKKwkyNTYsCisJMzg0LAorCTUxMiwKKwk3NjgKK307CisKK3N0YXRpYyBpbnQgd204NzcwX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IHdtODc3MF9wcml2ICp3bTg3NzA7CisJaW50IGk7CisJaW50IGlmYWNlOworCWludCBzaGlmdDsKKwlpbnQgcmF0aW87CisKKwljb2RlYyA9IGRhaS0+Y29kZWM7CisJd204NzcwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlpZmFjZSA9IDA7CisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJaWZhY2UgfD0gMHgxMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJaWZhY2UgfD0gMHgyMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJaWZhY2UgfD0gMHgzMDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChzdWJzdHJlYW0tPnN0cmVhbSkgeworCWNhc2UgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzoKKwkJaSA9IDA7CisJCXNoaWZ0ID0gNDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkU6CisJCWkgPSAyOworCQlzaGlmdCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE9ubHkgbmVlZCB0byBzZXQgTUNMSy9MUkNMSyByYXRpbyBpZiB3ZSdyZSBtYXN0ZXIgKi8KKwlpZiAoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg3NzBfTVNUUkNUUkwpICYgMHgxMDApIHsKKwkJZm9yICg7IGkgPCBBUlJBWV9TSVpFKG1jbGtfcmF0aW9zKTsgKytpKSB7CisJCQlyYXRpbyA9IHdtODc3MC0+c3lzY2xrIC8gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwkJCWlmIChyYXRpbyA9PSBtY2xrX3JhdGlvc1tpXSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChpID09IEFSUkFZX1NJWkUobWNsa19yYXRpb3MpKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkJIlVuYWJsZSB0byBjb25maWd1cmUgTUNMSyByYXRpbyAlZC8lZFxuIiwKKwkJCQl3bTg3NzAtPnN5c2NsaywgcGFyYW1zX3JhdGUocGFyYW1zKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWRldl9kYmcoY29kZWMtPmRldiwgIk1DTEsgaXMgJWRmc1xuIiwgbWNsa19yYXRpb3NbaV0pOworCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODc3MF9NU1RSQ1RSTCwgMHg3IDw8IHNoaWZ0LAorCQkJCSAgICBpIDw8IHNoaWZ0KTsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3NzBfSUZBQ0VDVFJMLCAweDMwLCBpZmFjZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzBfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJY29kZWMgPSBkYWktPmNvZGVjOworCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3NzBfREFDTVVURSwgMHgxMCwKKwkJCQkgICAhIW11dGUgPDwgNCk7Cit9CisKK3N0YXRpYyBpbnQgd204NzcwX3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCQkgICAgIGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3Qgd204NzcwX3ByaXYgKndtODc3MDsKKworCWNvZGVjID0gZGFpLT5jb2RlYzsKKwl3bTg3NzAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl3bTg3NzAtPnN5c2NsayA9IGZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdtODc3MF9zeW5jX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgaTsKKwl1MTYgKmNhY2hlOworCisJaWYgKCFjb2RlYy0+Y2FjaGVfc3luYykKKwkJcmV0dXJuOworCisJY29kZWMtPmNhY2hlX29ubHkgPSAwOworCWNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemU7IGkrKykgeworCQlpZiAoaSA9PSBXTTg3NzBfUkVTRVQgfHwgY2FjaGVbaV0gPT0gd204NzcwX3JlZ19kZWZzW2ldKQorCQkJY29udGludWU7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGksIGNhY2hlW2ldKTsKKwl9CisJY29kZWMtPmNhY2hlX3N5bmMgPSAwOworfQorCitzdGF0aWMgaW50IHdtODc3MF9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCWludCByZXQ7CisJc3RydWN0IHdtODc3MF9wcml2ICp3bTg3NzA7CisKKwl3bTg3NzAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204NzcwLT5zdXBwbGllcyksCisJCQkJCQkgICAgd204NzcwLT5zdXBwbGllcyk7CisJCQlpZiAocmV0KSB7CisJCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCQkiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsCisJCQkJCXJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCXdtODc3MF9zeW5jX2NhY2hlKGNvZGVjKTsKKwkJCS8qIGdsb2JhbCBwb3dlcnVwICovCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3NzBfUFdETkNUUkwsIDApOworCQl9CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJLyogZ2xvYmFsIHBvd2VyZG93biAqLworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3NzBfUFdETkNUUkwsIDEpOworCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204NzcwLT5zdXBwbGllcyksCisJCQkJICAgICAgIHdtODc3MC0+c3VwcGxpZXMpOworCQlicmVhazsKKwl9CisKKwljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gbGV2ZWw7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV004NzcwX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHwgXAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzcwX2RhaV9vcHMgPSB7CisJLmRpZ2l0YWxfbXV0ZSA9IHdtODc3MF9tdXRlLAorCS5od19wYXJhbXMgPSB3bTg3NzBfaHdfcGFyYW1zLAorCS5zZXRfZm10ID0gd204NzcwX3NldF9mbXQsCisJLnNldF9zeXNjbGsgPSB3bTg3NzBfc2V0X3N5c2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHdtODc3MF9kYWkgPSB7CisJLm5hbWUgPSAid204NzcwLWhpZmkiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMCwKKwkJLmZvcm1hdHMgPSBXTTg3NzBfRk9STUFUUworCX0sCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwLAorCQkuZm9ybWF0cyA9IFdNODc3MF9GT1JNQVRTCisJfSwKKwkub3BzID0gJndtODc3MF9kYWlfb3BzLAorCS5zeW1tZXRyaWNfcmF0ZXMgPSAxCit9OworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODc3MF9zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXdtODc3MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NzcwX3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJd204NzcwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSB3bTg3NzBfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODc3MF9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgd204NzcwX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204NzcwX3ByaXYgKndtODc3MDsKKwlpbnQgcmV0OworCWludCBpOworCisJd204NzcwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJd204NzcwLT5jb2RlYyA9IGNvZGVjOworCisJY29kZWMtPmRhcG0uaWRsZV9iaWFzX29mZiA9IDE7CisKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgNywgOSwgd204NzcwLT5jb250cm9sX3R5cGUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NzAtPnN1cHBsaWVzKTsgaSsrKQorCQl3bTg3NzAtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHdtODc3MF9zdXBwbHlfbmFtZXNbaV07CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQoY29kZWMtPmRldiwgQVJSQVlfU0laRSh3bTg3NzAtPnN1cHBsaWVzKSwKKwkJCQkgd204NzcwLT5zdXBwbGllcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJd204NzcwLT5kaXNhYmxlX25iWzBdLm5vdGlmaWVyX2NhbGwgPSB3bTg3NzBfcmVndWxhdG9yX2V2ZW50XzA7CisJd204NzcwLT5kaXNhYmxlX25iWzFdLm5vdGlmaWVyX2NhbGwgPSB3bTg3NzBfcmVndWxhdG9yX2V2ZW50XzE7CisJd204NzcwLT5kaXNhYmxlX25iWzJdLm5vdGlmaWVyX2NhbGwgPSB3bTg3NzBfcmVndWxhdG9yX2V2ZW50XzI7CisKKwkvKiBUaGlzIHNob3VsZCByZWFsbHkgYmUgbW92ZWQgaW50byB0aGUgcmVndWxhdG9yIGNvcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NzAtPnN1cHBsaWVzKTsgaSsrKSB7CisJCXJldCA9IHJlZ3VsYXRvcl9yZWdpc3Rlcl9ub3RpZmllcih3bTg3NzAtPnN1cHBsaWVzW2ldLmNvbnN1bWVyLAorCQkJCQkJICAmd204NzcwLT5kaXNhYmxlX25iW2ldKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgcmVndWxhdG9yIG5vdGlmaWVyOiAlZFxuIiwKKwkJCQlyZXQpOworCQl9CisJfQorCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204NzcwLT5zdXBwbGllcyksCisJCQkJICAgIHdtODc3MC0+c3VwcGxpZXMpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3JlZ19nZXQ7CisJfQorCisJcmV0ID0gd204NzcwX3Jlc2V0KGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9yZWdfZW5hYmxlOworCX0KKworCXdtODc3MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJLyogbGF0Y2ggdGhlIHZvbHVtZSB1cGRhdGUgYml0cyAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODc3MF9NU0RJR1ZPTCwgMHgxMDAsIDB4MTAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3NzBfTVNBTEdWT0wsIDB4MTAwLCAweDEwMCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzcwX1ZPVVQxUlZPTCwgMHgxMDAsIDB4MTAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3NzBfVk9VVDJSVk9MLCAweDEwMCwgMHgxMDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODc3MF9WT1VUM1JWT0wsIDB4MTAwLCAweDEwMCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzcwX1ZPVVQ0UlZPTCwgMHgxMDAsIDB4MTAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3NzBfREFDMVJWT0wsIDB4MTAwLCAweDEwMCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzcwX0RBQzJSVk9MLCAweDEwMCwgMHgxMDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODc3MF9EQUMzUlZPTCwgMHgxMDAsIDB4MTAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3NzBfREFDNFJWT0wsIDB4MTAwLCAweDEwMCk7CisKKwkvKiBtdXRlIGFsbCBEQUNzICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzcwX0RBQ01VVEUsIDB4MTAsIDB4MTApOworCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODc3MF9zbmRfY29udHJvbHMsCisJCQkgICAgIEFSUkFZX1NJWkUod204NzcwX3NuZF9jb250cm9scykpOworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoJmNvZGVjLT5kYXBtLCB3bTg3NzBfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg3NzBfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoJmNvZGVjLT5kYXBtLCB3bTg3NzBfaW50ZXJjb24sCisJCQkJQVJSQVlfU0laRSh3bTg3NzBfaW50ZXJjb24pKTsKKwlyZXR1cm4gMDsKKworZXJyX3JlZ19lbmFibGU6CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODc3MC0+c3VwcGxpZXMpLCB3bTg3NzAtPnN1cHBsaWVzKTsKK2Vycl9yZWdfZ2V0OgorCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRSh3bTg3NzAtPnN1cHBsaWVzKSwgd204NzcwLT5zdXBwbGllcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bTg3NzBfcmVtb3ZlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204NzcwX3ByaXYgKndtODc3MDsKKwlpbnQgaTsKKworCXdtODc3MCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXdtODc3MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NzAtPnN1cHBsaWVzKTsgKytpKQorCQlyZWd1bGF0b3JfdW5yZWdpc3Rlcl9ub3RpZmllcih3bTg3NzAtPnN1cHBsaWVzW2ldLmNvbnN1bWVyLAorCQkJCQkgICAgICAmd204NzcwLT5kaXNhYmxlX25iW2ldKTsKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204NzcwLT5zdXBwbGllcyksIHdtODc3MC0+c3VwcGxpZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZfd204NzcwID0geworCS5wcm9iZSA9IHdtODc3MF9wcm9iZSwKKwkucmVtb3ZlID0gd204NzcwX3JlbW92ZSwKKwkuc3VzcGVuZCA9IHdtODc3MF9zdXNwZW5kLAorCS5yZXN1bWUgPSB3bTg3NzBfcmVzdW1lLAorCS5zZXRfYmlhc19sZXZlbCA9IHdtODc3MF9zZXRfYmlhc19sZXZlbCwKKwkucmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODc3MF9yZWdfZGVmcyksCisJLnJlZ193b3JkX3NpemUgPSBzaXplb2YgKHUxNiksCisJLnJlZ19jYWNoZV9kZWZhdWx0ID0gd204NzcwX3JlZ19kZWZzCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdtODc3MF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgd204NzcwX3ByaXYgKndtODc3MDsKKwlpbnQgcmV0OworCisJd204NzcwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODc3MF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3bTg3NzApCisJCXJldHVybiAtRU5PTUVNOworCisJd204NzcwLT5jb250cm9sX3R5cGUgPSBTTkRfU09DX1NQSTsKKwlzcGlfc2V0X2RydmRhdGEoc3BpLCB3bTg3NzApOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmc3BpLT5kZXYsCisJCQkJICAgICAmc29jX2NvZGVjX2Rldl93bTg3NzAsICZ3bTg3NzBfZGFpLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJa2ZyZWUod204NzcwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg3NzBfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmc3BpLT5kZXYpOworCWtmcmVlKHNwaV9nZXRfZHJ2ZGF0YShzcGkpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHdtODc3MF9zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIndtODc3MCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gd204NzcwX3NwaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aod204NzcwX3NwaV9yZW1vdmUpCit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHdtODc3MF9tb2Rpbml0KHZvaWQpCit7CisJaW50IHJldCA9IDA7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJndtODc3MF9zcGlfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIHdtODc3MCBTUEkgZHJpdmVyOiAlZFxuIiwKKwkJICAgICAgIHJldCk7CisJfQorI2VuZGlmCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KHdtODc3MF9tb2Rpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODc3MF9leGl0KHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndtODc3MF9zcGlfZHJpdmVyKTsKKyNlbmRpZgorfQorbW9kdWxlX2V4aXQod204NzcwX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV004NzcwIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiRGltaXRyaXMgUGFwYXN0YW1vcyA8ZHBAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NzAuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzcwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYxYjNiZAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzcwLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIHdtODc3MC5oICAtLSAgV004NzcwIEFTb0MgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMTAgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIHBsYworICoKKyAqIEF1dGhvcjogRGltaXRyaXMgUGFwYXN0YW1vcyA8ZHBAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfV004NzcwX0gKKyNkZWZpbmUgX1dNODc3MF9ICisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBXTTg3NzBfVk9VVDFMVk9MICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004NzcwX1ZPVVQxUlZPTCAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgV004NzcwX1ZPVVQyTFZPTCAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgV004NzcwX1ZPVVQyUlZPTCAgICAgICAgICAgICAgICAweDMKKyNkZWZpbmUgV004NzcwX1ZPVVQzTFZPTCAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgV004NzcwX1ZPVVQzUlZPTCAgICAgICAgICAgICAgICAweDUKKyNkZWZpbmUgV004NzcwX1ZPVVQ0TFZPTCAgICAgICAgICAgICAgICAweDYKKyNkZWZpbmUgV004NzcwX1ZPVVQ0UlZPTCAgICAgICAgICAgICAgICAweDcKKyNkZWZpbmUgV004NzcwX01TQUxHVk9MICAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgV004NzcwX0RBQzFMVk9MICAgICAgICAgICAgICAgICAweDkKKyNkZWZpbmUgV004NzcwX0RBQzFSVk9MICAgICAgICAgICAgICAgICAweGEKKyNkZWZpbmUgV004NzcwX0RBQzJMVk9MICAgICAgICAgICAgICAgICAweGIKKyNkZWZpbmUgV004NzcwX0RBQzJSVk9MICAgICAgICAgICAgICAgICAweGMKKyNkZWZpbmUgV004NzcwX0RBQzNMVk9MICAgICAgICAgICAgICAgICAweGQKKyNkZWZpbmUgV004NzcwX0RBQzNSVk9MICAgICAgICAgICAgICAgICAweGUKKyNkZWZpbmUgV004NzcwX0RBQzRMVk9MICAgICAgICAgICAgICAgICAweGYKKyNkZWZpbmUgV004NzcwX0RBQzRSVk9MICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIFdNODc3MF9NU0RJR1ZPTCAgICAgICAgICAgICAgICAgMHgxMQorI2RlZmluZSBXTTg3NzBfREFDUEhBU0UgICAgICAgICAgICAgICAgIDB4MTIKKyNkZWZpbmUgV004NzcwX0RBQ0NUUkwxICAgICAgICAgICAgICAgICAweDEzCisjZGVmaW5lIFdNODc3MF9EQUNNVVRFICAgICAgICAgICAgICAgICAgMHgxNAorI2RlZmluZSBXTTg3NzBfREFDQ1RSTDIgICAgICAgICAgICAgICAgIDB4MTUKKyNkZWZpbmUgV004NzcwX0lGQUNFQ1RSTCAgICAgICAgICAgICAgICAweDE2CisjZGVmaW5lIFdNODc3MF9NU1RSQ1RSTCAgICAgICAgICAgICAgICAgMHgxNworI2RlZmluZSBXTTg3NzBfUFdETkNUUkwgICAgICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgV004NzcwX0FEQ0xDVFJMICAgICAgICAgICAgICAgICAweDE5CisjZGVmaW5lIFdNODc3MF9BRENSQ1RSTCAgICAgICAgICAgICAgICAgMHgxYQorI2RlZmluZSBXTTg3NzBfQURDTVVYICAgICAgICAgICAgICAgICAgIDB4MWIKKyNkZWZpbmUgV004NzcwX09VVE1VWDEgICAgICAgICAgICAgICAgICAweDFjCisjZGVmaW5lIFdNODc3MF9PVVRNVVgyICAgICAgICAgICAgICAgICAgMHgxZAorI2RlZmluZSBXTTg3NzBfUkVTRVQgICAgICAgICAgICAgICAgICAgIDB4MzEKKworI2RlZmluZSBXTTg3NzBfQ0FDSEVSRUdOVU0gMHgyMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204Nzc2LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc3Ni5jCmluZGV4IDAxMzJhMjcuLjhlNzk1M2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204Nzc2LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NzYuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KIApAQCAtMzA2LDcgKzMwNSw3IEBACiAJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKLQkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgewogCQkJLyogRGlzYWJsZSB0aGUgZ2xvYmFsIHBvd2VyZG93bjsgREFQTSBkb2VzIHRoZSByZXN0ICovCiAJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3NzZfUFdSRE9XTiwgMSwgMCk7CiAJCX0KQEAgLTMxNyw3ICszMTYsNyBAQAogCQlicmVhazsKIAl9CiAKLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDA0LDYgKzQwMyw3IEBACiBzdGF0aWMgaW50IHdtODc3Nl9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHdtODc3Nl9wcml2ICp3bTg3NzYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IHJldCA9IDA7CiAKIAlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgNywgOSwgd204Nzc2LT5jb250cm9sX3R5cGUpOwpAQCAtNDI3LDkgKzQyNyw5IEBACiAKIAlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204Nzc2X3NuZF9jb250cm9scywKIAkJCSAgICAgQVJSQVlfU0laRSh3bTg3NzZfc25kX2NvbnRyb2xzKSk7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204Nzc2X2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODc3Nl9kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHdtODc3Nl9kYXBtX3dpZGdldHMpKTsKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgcm91dGVzLCBBUlJBWV9TSVpFKHJvdXRlcykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHJvdXRlcywgQVJSQVlfU0laRShyb3V0ZXMpKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODgwNC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg4MDQuYwppbmRleCA0NTk5ZThlLi42ZGFlMWI0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODgwNC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204ODA0LmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKQEAgLTUxNSw3ICs1MTQsNyBAQAogCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg4MDRfUFdSRE4sIDB4OSwgMCk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKIAkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODgwNC0+c3VwcGxpZXMpLAogCQkJCQkJICAgIHdtODgwNC0+c3VwcGxpZXMpOwogCQkJaWYgKHJldCkgewpAQCAtNTM3LDcgKzUzNiw3IEBACiAJCWJyZWFrOwogCX0KIAotCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOwogCXJldHVybiAwOwogfQogCkBAIC01ODEsNyArNTgwLDcgQEAKIAl3bTg4MDQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAl3bTg4MDQtPmNvZGVjID0gY29kZWM7CiAKLQljb2RlYy0+aWRsZV9iaWFzX29mZiA9IDE7CisJY29kZWMtPmRhcG0uaWRsZV9iaWFzX29mZiA9IDE7CiAKIAlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgOCwgOCwgd204ODA0LT5jb250cm9sX3R5cGUpOwogCWlmIChyZXQgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYwppbmRleCBhY2E0YjFlLi5jZDA5NTk5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKQEAgLTE0MCw3ICsxMzksNiBAQAogCiBzdHJ1Y3Qgd204OTAwX3ByaXYgewogCWVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbF90eXBlOwotCXUxNiByZWdfY2FjaGVbV004OTAwX01BWFJFR107CiAKIAl1MzIgZmxsX2luOyAvKiBGTEwgaW5wdXQgZnJlcXVlbmN5ICovCiAJdTMyIGZsbF9vdXQ7IC8qIEZMTCBvdXRwdXQgZnJlcXVlbmN5ICovCkBAIC02MTEsMTAgKzYwOSwxMSBAQAogCiBzdGF0aWMgaW50IHdtODkwMF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTAwX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUod204OTAwX2RhcG1fd2lkZ2V0cykpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5MDBfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg5MDBfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDUxLDcgKzEwNTAsNyBAQAogCiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKIAkJLyogQ2hhcmdlIGNhcGFjaXRvcnMgaWYgaW5pdGlhbCBwb3dlciB1cCAqLwotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CiAJCQkvKiBTVEFSVFVQX0JJQVNfRU5BIG9uICovCiAJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1BPV0VSMSwKIAkJCQkgICAgIFdNODkwMF9SRUdfUE9XRVIxX1NUQVJUVVBfQklBU19FTkEpOwpAQCAtMTExOSw3ICsxMTE4LDcgQEAKIAkJCSAgICAgV004OTAwX1JFR19QT1dFUjJfU1lTQ0xLX0VOQSk7CiAJCWJyZWFrOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKaW5kZXggNjIyYjYwMi4uOTg3NDc2YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCkBAIC0yOSw5ICsyOSw5IEBACiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3dtODkwMy5oPgorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9hc29jLmg+CiAKICNpbmNsdWRlICJ3bTg5MDMuaCIKIApAQCAtMjE0LDE1ICsyMTQsMTQgQEAKIAogc3RydWN0IHdtODkwM19wcml2IHsKIAotCXUxNiByZWdfY2FjaGVbQVJSQVlfU0laRSh3bTg5MDNfcmVnX2RlZmF1bHRzKV07Ci0KIAlpbnQgc3lzY2xrOwogCWludCBpcnE7CiAKLQkvKiBSZWZlcmVuY2UgY291bnRzICovCisJaW50IGZzOworCWludCBkZWVtcGg7CisKKwkvKiBSZWZlcmVuY2UgY291bnQgKi8KIAlpbnQgY2xhc3Nfd191c2VyczsKLQlpbnQgcGxheWJhY2tfYWN0aXZlOwotCWludCBjYXB0dXJlX2FjdGl2ZTsKIAogCXN0cnVjdCBjb21wbGV0aW9uIHdzZXE7CiAKQEAgLTIzMSw5ICsyMzAsNiBAQAogCWludCBtaWNfc2hvcnQ7CiAJaW50IG1pY19sYXN0X3JlcG9ydDsKIAlpbnQgbWljX2RlbGF5OwotCi0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICptYXN0ZXJfc3Vic3RyZWFtOwotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc2xhdmVfc3Vic3RyZWFtOwogfTsKIAogc3RhdGljIGludCB3bTg5MDNfdm9sYXRpbGVfcmVnaXN0ZXIodW5zaWduZWQgaW50IHJlZykKQEAgLTQ2Myw2ICs0NTksNzIgQEAKIAkucHJpdmF0ZV92YWx1ZSA9ICBTT0NfU0lOR0xFX1ZBTFVFKHJlZywgc2hpZnQsIG1heCwgaW52ZXJ0KSB9CiAKIAorc3RhdGljIGludCB3bTg5MDNfZGVlbXBoW10gPSB7IDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfTsKKworc3RhdGljIGludCB3bTg5MDNfc2V0X2RlZW1waChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODkwM19wcml2ICp3bTg5MDMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgdmFsLCBpLCBiZXN0OworCisJLyogSWYgd2UncmUgdXNpbmcgZGVlbXBoYXNpcyBzZWxlY3QgdGhlIG5lYXJlc3QgYXZhaWxhYmxlIHNhbXBsZQorCSAqIHJhdGUuCisJICovCisJaWYgKHdtODkwMy0+ZGVlbXBoKSB7CisJCWJlc3QgPSAxOworCQlmb3IgKGkgPSAyOyBpIDwgQVJSQVlfU0laRSh3bTg5MDNfZGVlbXBoKTsgaSsrKSB7CisJCQlpZiAoYWJzKHdtODkwM19kZWVtcGhbaV0gLSB3bTg5MDMtPmZzKSA8CisJCQkgICAgYWJzKHdtODkwM19kZWVtcGhbYmVzdF0gLSB3bTg5MDMtPmZzKSkKKwkJCQliZXN0ID0gaTsKKwkJfQorCisJCXZhbCA9IGJlc3QgPDwgV004OTAzX0RFRU1QSF9TSElGVDsKKwl9IGVsc2UgeworCQliZXN0ID0gMDsKKwkJdmFsID0gMDsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJTZXQgZGVlbXBoYXNpcyAlZCAoJWRIeilcbiIsCisJCWJlc3QsIHdtODkwM19kZWVtcGhbYmVzdF0pOworCisJcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwM19EQUNfRElHSVRBTF8xLAorCQkJCSAgIFdNODkwM19ERUVNUEhfTUFTSywgdmFsKTsKK30KKworc3RhdGljIGludCB3bTg5MDNfZ2V0X2RlZW1waChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gd204OTAzLT5kZWVtcGg7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5MDNfcHV0X2RlZW1waChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IGRlZW1waCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CisJaW50IHJldCA9IDA7CisKKwlpZiAoZGVlbXBoID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZjb2RlYy0+bXV0ZXgpOworCWlmICh3bTg5MDMtPmRlZW1waCAhPSBkZWVtcGgpIHsKKwkJd204OTAzLT5kZWVtcGggPSBkZWVtcGg7CisKKwkJd204OTAzX3NldF9kZWVtcGgoY29kZWMpOworCisJCXJldCA9IDE7CisJfQorCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qIEFMU0EgY2FuIG9ubHkgZG8gc3RlcHMgb2YgLjAxZEIgKi8KIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkaWdpdGFsX3RsdiwgLTcyMDAsIDc1LCAxKTsKIApAQCAtNDc1LDYgKzUzNywyMyBAQAogc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRyY190bHZfbWF4LCAxMjAwLCA2MDAsIDApOwogc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRyY190bHZfc3RhcnR1cCwgLTMwMCwgNTAsIDApOwogCitzdGF0aWMgY29uc3QgY2hhciAqaHBmX21vZGVfdGV4dFtdID0geworCSJIaS1maSIsICJWb2ljZSAxIiwgIlZvaWNlIDIiLCAiVm9pY2UgMyIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaHBmX21vZGUgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDNfQURDX0RJR0lUQUxfMCwgNSwgNCwgaHBmX21vZGVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpvc3JfdGV4dFtdID0geworCSJMb3cgcG93ZXIiLCAiSGlnaCBwZXJmb3JtYW5jZSIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWRjX29zciA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwM19BTkFMT0dVRV9BRENfMCwgMCwgMiwgb3NyX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhY19vc3IgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDNfREFDX0RJR0lUQUxfMSwgMCwgMiwgb3NyX3RleHQpOworCiBzdGF0aWMgY29uc3QgY2hhciAqZHJjX3Nsb3BlX3RleHRbXSA9IHsKIAkiMSIsICIxLzIiLCAiMS80IiwgIjEvOCIsICIxLzE2IiwgIjAiCiB9OwpAQCAtNTM3LDEzICs2MTYsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBtdXRlX21vZGUgPQogCVNPQ19FTlVNX1NJTkdMRShXTTg5MDNfREFDX0RJR0lUQUxfMSwgOSwgMiwgbXV0ZV9tb2RlX3RleHQpOwogCi1zdGF0aWMgY29uc3QgY2hhciAqZGFjX2RlZW1waGFzaXNfdGV4dFtdID0gewotCSJEaXNhYmxlZCIsICIzMmtIeiIsICI0NC4xa0h6IiwgIjQ4a0h6IgotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYWNfZGVlbXBoYXNpcyA9Ci0JU09DX0VOVU1fU0lOR0xFKFdNODkwM19EQUNfRElHSVRBTF8xLCAxLCA0LCBkYWNfZGVlbXBoYXNpc190ZXh0KTsKLQogc3RhdGljIGNvbnN0IGNoYXIgKmNvbXBhbmRpbmdfdGV4dFtdID0gewogCSJ1bGF3IiwgImFsYXciCiB9OwpAQCAtNjEzLDYgKzY4NSw5IEBACiAJICAgNiwgMSwgMCksCiAKIC8qIEFEQ3MgKi8KK1NPQ19FTlVNKCJBREMgT1NSIiwgYWRjX29zciksCitTT0NfU0lOR0xFKCJIUEYgU3dpdGNoIiwgV004OTAzX0FEQ19ESUdJVEFMXzAsIDQsIDEsIDApLAorU09DX0VOVU0oIkhQRiBNb2RlIiwgaHBmX21vZGUpLAogU09DX1NJTkdMRSgiRFJDIFN3aXRjaCIsIFdNODkwM19EUkNfMCwgMTUsIDEsIDApLAogU09DX0VOVU0oIkRSQyBDb21wcmVzc29yIFNsb3BlIFIwIiwgZHJjX3Nsb3BlX3IwKSwKIFNPQ19FTlVNKCJEUkMgQ29tcHJlc3NvciBTbG9wZSBSMSIsIGRyY19zbG9wZV9yMSksCkBAIC02NDIsMTQgKzcxNywxNiBAQAogCSAgICAgICAxMiwgMCwgZGlnaXRhbF9zaWRldG9uZV90bHYpLAogCiAvKiBEQUMgKi8KK1NPQ19FTlVNKCJEQUMgT1NSIiwgZGFjX29zciksCiBTT0NfRE9VQkxFX1JfVExWKCJEaWdpdGFsIFBsYXliYWNrIFZvbHVtZSIsIFdNODkwM19EQUNfRElHSVRBTF9WT0xVTUVfTEVGVCwKIAkJIFdNODkwM19EQUNfRElHSVRBTF9WT0xVTUVfUklHSFQsIDEsIDEyMCwgMCwgZGlnaXRhbF90bHYpLAogU09DX0VOVU0oIkRBQyBTb2Z0IE11dGUgUmF0ZSIsIHNvZnRfbXV0ZSksCiBTT0NfRU5VTSgiREFDIE11dGUgTW9kZSIsIG11dGVfbW9kZSksCiBTT0NfU0lOR0xFKCJEQUMgTW9ubyBTd2l0Y2giLCBXTTg5MDNfREFDX0RJR0lUQUxfMSwgMTIsIDEsIDApLAotU09DX0VOVU0oIkRBQyBEZS1lbXBoYXNpcyIsIGRhY19kZWVtcGhhc2lzKSwKIFNPQ19FTlVNKCJEQUMgQ29tcGFuZGluZyBNb2RlIiwgZGFjX2NvbXBhbmRpbmcpLAogU09DX1NJTkdMRSgiREFDIENvbXBhbmRpbmcgU3dpdGNoIiwgV004OTAzX0FVRElPX0lOVEVSRkFDRV8wLCAxLCAxLCAwKSwKK1NPQ19TSU5HTEVfQk9PTF9FWFQoIlBsYXliYWNrIERlZW1waGFzaXMgU3dpdGNoIiwgMCwKKwkJICAgIHdtODkwM19nZXRfZGVlbXBoLCB3bTg5MDNfcHV0X2RlZW1waCksCiAKIC8qIEhlYWRwaG9uZXMgKi8KIFNPQ19ET1VCTEVfUigiSGVhZHBob25lIFN3aXRjaCIsCkBAIC05MjMsMTAgKzEwMDAsMTEgQEAKIAogc3RhdGljIGludCB3bTg5MDNfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODkwM19kYXBtX3dpZGdldHMsCi0JCQkJICBBUlJBWV9TSVpFKHdtODkwM19kYXBtX3dpZGdldHMpKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODkwM19kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODkwM19kYXBtX3dpZGdldHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MzQsNyArMTAxMiw3IEBACiBzdGF0aWMgaW50IHdtODkwM19zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewotCXUxNiByZWcsIHJlZzI7CisJdTE2IHJlZzsKIAogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKQEAgLTk0Niw3ICsxMDI0LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CiAJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfQ0xPQ0tfUkFURVNfMiwKIAkJCQkgICAgIFdNODkwM19DTEtfU1lTX0VOQSk7CiAKQEAgLTk1OCwyMyArMTAzNiwxNSBAQAogCQkJd204OTAzX3J1bl9zZXF1ZW5jZShjb2RlYywgMCk7CiAJCQl3bTg5MDNfc3luY19yZWdfY2FjaGUoY29kZWMsIGNvZGVjLT5yZWdfY2FjaGUpOwogCi0JCQkvKiBFbmFibGUgbG93IGltcGVkZW5jZSBjaGFyZ2UgcHVtcCBvdXRwdXQgKi8KLQkJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywKLQkJCQkJICBXTTg5MDNfQ09OVFJPTF9JTlRFUkZBQ0VfVEVTVF8xKTsKLQkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19DT05UUk9MX0lOVEVSRkFDRV9URVNUXzEsCi0JCQkJICAgICByZWcgfCBXTTg5MDNfVEVTVF9LRVkpOwotCQkJcmVnMiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX0NIQVJHRV9QVU1QX1RFU1RfMSk7Ci0JCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfQ0hBUkdFX1BVTVBfVEVTVF8xLAotCQkJCSAgICAgcmVnMiB8IFdNODkwM19DUF9TV19LRUxWSU5fTU9ERV9NQVNLKTsKLQkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19DT05UUk9MX0lOVEVSRkFDRV9URVNUXzEsCi0JCQkJICAgICByZWcpOwotCiAJCQkvKiBCeSBkZWZhdWx0IG5vIGJ5cGFzcyBwYXRocyBhcmUgZW5hYmxlZCBzbwogCQkJICogZW5hYmxlIENsYXNzIFcgc3VwcG9ydC4KIAkJCSAqLwogCQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRW5hYmxpbmcgQ2xhc3MgV1xuIik7Ci0JCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfQ0xBU1NfV18wLCByZWcgfAotCQkJCSAgICAgV004OTAzX0NQX0RZTl9GUkVRIHwgV004OTAzX0NQX0RZTl9WKTsKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwM19DTEFTU19XXzAsCisJCQkJCSAgICBXTTg5MDNfQ1BfRFlOX0ZSRVEgfAorCQkJCQkgICAgV004OTAzX0NQX0RZTl9WLAorCQkJCQkgICAgV004OTAzX0NQX0RZTl9GUkVRIHwKKwkJCQkJICAgIFdNODkwM19DUF9EWU5fVik7CiAJCX0KIAogCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19WTUlEX0NPTlRST0xfMCk7CkBAIC05OTEsNyArMTA2MSw3IEBACiAJCWJyZWFrOwogCX0KIAotCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjIyLDU4ICsxMjkyLDYgQEAKIAl7IDAsICAgICAgMCB9LAogfTsKIAotc3RhdGljIGludCB3bTg5MDNfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCSAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7Ci0Jc3RydWN0IHdtODkwM19wcml2ICp3bTg5MDMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICptYXN0ZXJfcnVudGltZTsKLQotCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQl3bTg5MDMtPnBsYXliYWNrX2FjdGl2ZSsrOwotCWVsc2UKLQkJd204OTAzLT5jYXB0dXJlX2FjdGl2ZSsrOwotCi0JLyogVGhlIERBSSBoYXMgc2hhcmVkIGNsb2NrcyBzbyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBwbGF5YmFjayBvcgotCSAqIGNhcHR1cmUgZ29pbmcgdGhlbiBjb25zdHJhaW4gdGhpcyBzdWJzdHJlYW0gdG8gbWF0Y2ggaXQuCi0JICovCi0JaWYgKHdtODkwMy0+bWFzdGVyX3N1YnN0cmVhbSkgewotCQltYXN0ZXJfcnVudGltZSA9IHdtODkwMy0+bWFzdGVyX3N1YnN0cmVhbS0+cnVudGltZTsKLQotCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJDb25zdHJhaW5pbmcgdG8gJWQgYml0c1xuIiwKLQkJCW1hc3Rlcl9ydW50aW1lLT5zYW1wbGVfYml0cyk7Ci0KLQkJc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChzdWJzdHJlYW0tPnJ1bnRpbWUsCi0JCQkJCSAgICAgU05EUlZfUENNX0hXX1BBUkFNX1NBTVBMRV9CSVRTLAotCQkJCQkgICAgIG1hc3Rlcl9ydW50aW1lLT5zYW1wbGVfYml0cywKLQkJCQkJICAgICBtYXN0ZXJfcnVudGltZS0+c2FtcGxlX2JpdHMpOwotCi0JCXdtODkwMy0+c2xhdmVfc3Vic3RyZWFtID0gc3Vic3RyZWFtOwotCX0gZWxzZQotCQl3bTg5MDMtPm1hc3Rlcl9zdWJzdHJlYW0gPSBzdWJzdHJlYW07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgd204OTAzX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwotCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0KLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJd204OTAzLT5wbGF5YmFja19hY3RpdmUtLTsKLQllbHNlCi0JCXdtODkwMy0+Y2FwdHVyZV9hY3RpdmUtLTsKLQotCWlmICh3bTg5MDMtPm1hc3Rlcl9zdWJzdHJlYW0gPT0gc3Vic3RyZWFtKQotCQl3bTg5MDMtPm1hc3Rlcl9zdWJzdHJlYW0gPSB3bTg5MDMtPnNsYXZlX3N1YnN0cmVhbTsKLQotCXdtODkwMy0+c2xhdmVfc3Vic3RyZWFtID0gTlVMTDsKLX0KLQogc3RhdGljIGludCB3bTg5MDNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAogCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQpAQCAtMTI5OCwxMSArMTMxNiw2IEBACiAJdTE2IGNsb2NrMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX0NMT0NLX1JBVEVTXzEpOwogCXUxNiBkYWNfZGlnaXRhbDEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19EQUNfRElHSVRBTF8xKTsKIAotCWlmIChzdWJzdHJlYW0gPT0gd204OTAzLT5zbGF2ZV9zdWJzdHJlYW0pIHsKLQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiSWdub3JpbmcgaHdfcGFyYW1zIGZvciBzbGF2ZSBzdWJzdHJlYW1cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAkvKiBFbmFibGUgc2xvcGluZyBzdG9wYmFuZCBmaWx0ZXIgZm9yIGxvdyBzYW1wbGUgcmF0ZXMgKi8KIAlpZiAoZnMgPD0gMjQwMDApCiAJCWRhY19kaWdpdGFsMSB8PSBXTTg5MDNfREFDX1NCX0ZJTFQ7CkBAIC0xMzIwLDE5ICsxMzMzLDYgQEAKIAkJfQogCX0KIAotCS8qIENvbnN0cmFpbnRzIHNob3VsZCBzdG9wIHVzIGhpdHRpbmcgdGhpcyBidXQgbGV0J3MgbWFrZSBzdXJlICovCi0JaWYgKHdtODkwMy0+Y2FwdHVyZV9hY3RpdmUpCi0JCXN3aXRjaCAoc2FtcGxlX3JhdGVzW2RzcF9jb25maWddLnJhdGUpIHsKLQkJY2FzZSA4ODIwMDoKLQkJY2FzZSA5NjAwMDoKLQkJCWRldl9lcnIoY29kZWMtPmRldiwgIiVkSHogdW5zdXBwb3J0ZWQgYnkgQURDXG4iLAotCQkJCWZzKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCiAJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRFNQIGZzID0gJWRIelxuIiwgc2FtcGxlX3JhdGVzW2RzcF9jb25maWddLnJhdGUpOwogCWNsb2NrMSAmPSB+V004OTAzX1NBTVBMRV9SQVRFX01BU0s7CiAJY2xvY2sxIHw9IHNhbXBsZV9yYXRlc1tkc3BfY29uZmlnXS52YWx1ZTsKQEAgLTE0MjgsNiArMTQyOCw5IEBACiAJYWlmMiB8PSBiY2xrX2RpdnNbYmNsa19kaXZdLmRpdjsKIAlhaWYzIHw9IGJjbGsgLyBmczsKIAorCXdtODkwMy0+ZnMgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCXdtODkwM19zZXRfZGVlbXBoKGNvZGVjKTsKKwogCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19DTE9DS19SQVRFU18wLCBjbG9jazApOwogCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19DTE9DS19SQVRFU18xLCBjbG9jazEpOwogCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19BVURJT19JTlRFUkZBQ0VfMSwgYWlmMSk7CkBAIC0xNTIxLDYgKzE1MjQsMTEgQEAKIAltaWNfcmVwb3J0ID0gd204OTAzLT5taWNfbGFzdF9yZXBvcnQ7CiAJaW50X3BvbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX0lOVEVSUlVQVF9QT0xBUklUWV8xKTsKIAorI2lmbmRlZiBDT05GSUdfU05EX1NPQ19XTTg5MDNfTU9EVUxFCisJaWYgKGludF92YWwgJiAoV004OTAzX01JQ1NIUlRfRUlOVCB8IFdNODkwM19NSUNERVRfRUlOVCkpCisJCXRyYWNlX3NuZF9zb2NfamFja19pcnEoZGV2X25hbWUoY29kZWMtPmRldikpOworI2VuZGlmCisKIAlpZiAoaW50X3ZhbCAmIFdNODkwM19NSUNTSFJUX0VJTlQpIHsKIAkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTWljcm9waG9uZSBzaG9ydCAocG9sPSV4KVxuIiwgaW50X3BvbCk7CiAKQEAgLTE1NzEsOCArMTU3OSw2IEBACiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTAzX2RhaV9vcHMgPSB7Ci0JLnN0YXJ0dXAJPSB3bTg5MDNfc3RhcnR1cCwKLQkuc2h1dGRvd24JPSB3bTg5MDNfc2h1dGRvd24sCiAJLmh3X3BhcmFtcwk9IHdtODkwM19od19wYXJhbXMsCiAJLmRpZ2l0YWxfbXV0ZQk9IHdtODkwM19kaWdpdGFsX211dGUsCiAJLnNldF9mbXQJPSB3bTg5MDNfc2V0X2RhaV9mbXQsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuaAppbmRleCA5OTY0MzVlLi5lODQ5MGYzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmgKQEAgLTE5LDEwICsxOSw2IEBACiAJCQkgICAgIHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssCiAJCQkgICAgIGludCBkZXQsIGludCBzaHJ0KTsKIAotI2RlZmluZSBXTTg5MDNfTUNMS19ESVZfMiAxCi0jZGVmaW5lIFdNODkwM19DTEtfU1lTICAgIDIKLSNkZWZpbmUgV004OTAzX0JDTEsgICAgICAgMwotI2RlZmluZSBXTTg5MDNfTFJDTEsgICAgICA0CiAKIC8qCiAgKiBSZWdpc3RlciB2YWx1ZXMuCkBAIC05OCw4ICs5NCw2IEBACiAjZGVmaW5lIFdNODkwM19JTlRFUlJVUFRfU1RBVFVTXzFfTUFTSyAgICAgICAgICAweDdBCiAjZGVmaW5lIFdNODkwM19JTlRFUlJVUFRfUE9MQVJJVFlfMSAgICAgICAgICAgICAweDdCCiAjZGVmaW5lIFdNODkwM19JTlRFUlJVUFRfQ09OVFJPTCAgICAgICAgICAgICAgICAweDdFCi0jZGVmaW5lIFdNODkwM19DT05UUk9MX0lOVEVSRkFDRV9URVNUXzEgICAgICAgICAweDgxCi0jZGVmaW5lIFdNODkwM19DSEFSR0VfUFVNUF9URVNUXzEgICAgICAgICAgICAgICAweDk1CiAjZGVmaW5lIFdNODkwM19DTE9DS19SQVRFX1RFU1RfNCAgICAgICAgICAgICAgICAweEE0CiAjZGVmaW5lIFdNODkwM19BTkFMT0dVRV9PVVRQVVRfQklBU18wICAgICAgICAgICAweEFDCiAKQEAgLTEyMDYsMjUgKzEyMDAsNiBAQAogI2RlZmluZSBXTTg5MDNfSVJRX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJUlFfUE9MICovCiAKIC8qCi0gKiBSMTI5ICgweDgxKSAtIENvbnRyb2wgSW50ZXJmYWNlIFRlc3QgMQotICovCi0jZGVmaW5lIFdNODkwM19VU0VSX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFVTRVJfS0VZICovCi0jZGVmaW5lIFdNODkwM19VU0VSX0tFWV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFVTRVJfS0VZICovCi0jZGVmaW5lIFdNODkwM19VU0VSX0tFWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFVTRVJfS0VZICovCi0jZGVmaW5lIFdNODkwM19VU0VSX0tFWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFVTRVJfS0VZICovCi0jZGVmaW5lIFdNODkwM19URVNUX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFRFU1RfS0VZICovCi0jZGVmaW5lIFdNODkwM19URVNUX0tFWV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFRFU1RfS0VZICovCi0jZGVmaW5lIFdNODkwM19URVNUX0tFWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFRFU1RfS0VZICovCi0jZGVmaW5lIFdNODkwM19URVNUX0tFWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRFU1RfS0VZICovCi0KLS8qCi0gKiBSMTQ5ICgweDk1KSAtIENoYXJnZSBQdW1wIFRlc3QgMQotICovCi0jZGVmaW5lIFdNODkwM19DUF9TV19LRUxWSU5fTU9ERV9NQVNLICAgICAgICAgICAweDAwMDYgIC8qIENQX1NXX0tFTFZJTl9NT0RFIC0gWzI6MV0gKi8KLSNkZWZpbmUgV004OTAzX0NQX1NXX0tFTFZJTl9NT0RFX1NISUZUICAgICAgICAgICAgICAgMSAgLyogQ1BfU1dfS0VMVklOX01PREUgLSBbMjoxXSAqLwotI2RlZmluZSBXTTg5MDNfQ1BfU1dfS0VMVklOX01PREVfV0lEVEggICAgICAgICAgICAgICAyICAvKiBDUF9TV19LRUxWSU5fTU9ERSAtIFsyOjFdICovCi0KLS8qCiAgKiBSMTY0ICgweEE0KSAtIENsb2NrIFJhdGUgVGVzdCA0CiAgKi8KICNkZWZpbmUgV004OTAzX0FEQ19ESUdfTUlDICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQURDX0RJR19NSUMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5jCmluZGV4IDFlYzEyZWYuLjlkZTQ0YTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KICNpbmNsdWRlIDxzb3VuZC93bTg5MDQuaD4KQEAgLTE0MjcsMTAgKzE0MjYsMTEgQEAKIHN0YXRpYyBpbnQgd204OTA0X2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODkwNF9jb3JlX2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODkwNF9jb3JlX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUod204OTA0X2NvcmVfZGFwbV93aWRnZXRzKSk7Ci0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGNvcmVfaW50ZXJjb24sCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgY29yZV9pbnRlcmNvbiwKIAkJCQlBUlJBWV9TSVpFKGNvcmVfaW50ZXJjb24pKTsKIAogCXN3aXRjaCAod204OTA0LT5kZXZ0eXBlKSB7CkBAIC0xNDQyLDIwICsxNDQyLDIwIEBACiAJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfc25kX2NvbnRyb2xzLAogCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5MDRfc25kX2NvbnRyb2xzKSk7CiAKLQkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTA0X2FkY19kYXBtX3dpZGdldHMsCisJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTA0X2FkY19kYXBtX3dpZGdldHMsCiAJCQkJCSAgQVJSQVlfU0laRSh3bTg5MDRfYWRjX2RhcG1fd2lkZ2V0cykpOwotCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfZGFjX2RhcG1fd2lkZ2V0cywKKwkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5MDRfZGFjX2RhcG1fd2lkZ2V0cywKIAkJCQkJICBBUlJBWV9TSVpFKHdtODkwNF9kYWNfZGFwbV93aWRnZXRzKSk7Ci0JCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODkwNF9kYXBtX3dpZGdldHMsCisJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTA0X2RhcG1fd2lkZ2V0cywKIAkJCQkJICBBUlJBWV9TSVpFKHdtODkwNF9kYXBtX3dpZGdldHMpKTsKIAotCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgY29yZV9pbnRlcmNvbiwKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgY29yZV9pbnRlcmNvbiwKIAkJCQkJQVJSQVlfU0laRShjb3JlX2ludGVyY29uKSk7Ci0JCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhZGNfaW50ZXJjb24sCisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGFkY19pbnRlcmNvbiwKIAkJCQkJQVJSQVlfU0laRShhZGNfaW50ZXJjb24pKTsKLQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGRhY19pbnRlcmNvbiwKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgZGFjX2ludGVyY29uLAogCQkJCQlBUlJBWV9TSVpFKGRhY19pbnRlcmNvbikpOwotCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgd204OTA0X2ludGVyY29uLAorCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCB3bTg5MDRfaW50ZXJjb24sCiAJCQkJCUFSUkFZX1NJWkUod204OTA0X2ludGVyY29uKSk7CiAJCWJyZWFrOwogCkBAIC0xNDYzLDE3ICsxNDYzLDE3IEBACiAJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfZGFjX3NuZF9jb250cm9scywKIAkJCQkgICAgIEFSUkFZX1NJWkUod204OTA0X2RhY19zbmRfY29udHJvbHMpKTsKIAotCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfZGFjX2RhcG1fd2lkZ2V0cywKKwkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5MDRfZGFjX2RhcG1fd2lkZ2V0cywKIAkJCQkJICBBUlJBWV9TSVpFKHdtODkwNF9kYWNfZGFwbV93aWRnZXRzKSk7CiAKLQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGRhY19pbnRlcmNvbiwKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgZGFjX2ludGVyY29uLAogCQkJCQlBUlJBWV9TSVpFKGRhY19pbnRlcmNvbikpOwotCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgd204OTEyX2ludGVyY29uLAorCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCB3bTg5MTJfaW50ZXJjb24sCiAJCQkJCUFSUkFZX1NJWkUod204OTEyX2ludGVyY29uKSk7CiAJCWJyZWFrOwogCX0KIAotCXNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhjb2RlYyk7CisJc25kX3NvY19kYXBtX25ld193aWRnZXRzKGRhcG0pOwogCXJldHVybiAwOwogfQogCkBAIC0xNTg5LDcgKzE1ODksNyBAQAogCQkgICAgICAgLSB3bTg5MDQtPmZzKTsKIAlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShjbGtfc3lzX3JhdGVzKTsgaSsrKSB7CiAJCWN1cl92YWwgPSBhYnMoKHdtODkwNC0+c3lzY2xrX3JhdGUgLwotCQkJICAgICAgIGNsa19zeXNfcmF0ZXNbaV0ucmF0aW8pIC0gd204OTA0LT5mcyk7OworCQkJICAgICAgIGNsa19zeXNfcmF0ZXNbaV0ucmF0aW8pIC0gd204OTA0LT5mcyk7CiAJCWlmIChjdXJfdmFsIDwgYmVzdF92YWwpIHsKIAkJCWJlc3QgPSBpOwogCQkJYmVzdF92YWwgPSBjdXJfdmFsOwpAQCAtMjEzOCw3ICsyMTM4LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CiAJCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg5MDQtPnN1cHBsaWVzKSwKIAkJCQkJCSAgICB3bTg5MDQtPnN1cHBsaWVzKTsKIAkJCWlmIChyZXQgIT0gMCkgewpAQCAtMjE5Nyw3ICsyMTk3LDcgQEAKIAkJCQkgICAgICAgd204OTA0LT5zdXBwbGllcyk7CiAJCWJyZWFrOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM3Myw3ICsyMzczLDcgQEAKIAlpbnQgcmV0LCBpOwogCiAJY29kZWMtPmNhY2hlX3N5bmMgPSAxOwotCWNvZGVjLT5pZGxlX2JpYXNfb2ZmID0gMTsKKwljb2RlYy0+ZGFwbS5pZGxlX2JpYXNfb2ZmID0gMTsKIAogCXN3aXRjaCAod204OTA0LT5kZXZ0eXBlKSB7CiAJY2FzZSBXTTg5MDQ6CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk0MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NDAuYwppbmRleCAyMzA4NmUyLi4yNTU4MGUzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk0MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKQEAgLTQzLDcgKzQyLDYgQEAKIAogc3RydWN0IHdtODk0MF9wcml2IHsKIAl1bnNpZ25lZCBpbnQgc3lzY2xrOwotCXUxNiByZWdfY2FjaGVbV004OTQwX0NBQ0hFUkVHTlVNXTsKIAllbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2xfdHlwZTsKIAl2b2lkICpjb250cm9sX2RhdGE7CiB9OwpAQCAtMjkxLDEzICsyODksMTQgQEAKIAogc3RhdGljIGludCB3bTg5NDBfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogeworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTQwX2RhcG1fd2lkZ2V0cywKKwlyZXQgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk0MF9kYXBtX3dpZGdldHMsCiAJCQkJCUFSUkFZX1NJWkUod204OTQwX2RhcG1fd2lkZ2V0cykpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmV0OwotCXJldCA9IHNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJcmV0ID0gc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmV0OwogCkBAIC03MzUsNyArNzM0LDYgQEAKIAkJcmV0dXJuIHJldDsKIAogCXJldHVybiByZXQ7Ci07CiB9CiAKIHN0YXRpYyBpbnQgd204OTQwX3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTUuYwppbmRleCAyYWMzNWIwLi43MTY3ZGZjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAjaW5jbHVkZSA8c291bmQvd204OTU1Lmg+CkBAIC01NzYsMTMgKzU3NSwxNCBAQAogCiBzdGF0aWMgaW50IHdtODk1NV9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOworCiAJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODk1NV9zbmRfY29udHJvbHMsCiAJCQkgICAgIEFSUkFZX1NJWkUod204OTU1X3NuZF9jb250cm9scykpOwogCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTU1X2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk1NV9kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHdtODk1NV9kYXBtX3dpZGdldHMpKTsKLQotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCB3bTg5NTVfaW50ZXJjb24sCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgd204OTU1X2ludGVyY29uLAogCQkJCUFSUkFZX1NJWkUod204OTU1X2ludGVyY29uKSk7CiAKIAlyZXR1cm4gMDsKQEAgLTc4Niw3ICs3ODYsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKIAkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpLAogCQkJCQkJICAgIHdtODk1NS0+c3VwcGxpZXMpOwogCQkJaWYgKHJldCAhPSAwKSB7CkBAIC04NTAsNyArODUwLDcgQEAKIAkJCQkgICAgICAgd204OTU1LT5zdXBwbGllcyk7CiAJCWJyZWFrOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NjAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYwLmMKaW5kZXggZmY2ZmYyZi4uNDM5MzM5NCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NjAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2MC5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPHNvdW5kL3dtODk2MC5oPgpAQCAtNzIsNyArNzEsNiBAQAogfTsKIAogc3RydWN0IHdtODk2MF9wcml2IHsKLQl1MTYgcmVnX2NhY2hlW1dNODk2MF9DQUNIRVJFR05VTV07CiAJZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sX3R5cGU7CiAJdm9pZCAqY29udHJvbF9kYXRhOwogCWludCAoKnNldF9iaWFzX2xldmVsKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLApAQCAtMzg5LDI3ICszODcsMjggQEAKIHsKIAlzdHJ1Y3Qgd204OTYwX2RhdGEgKnBkYXRhID0gY29kZWMtPmRldi0+cGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3Qgd204OTYwX3ByaXYgKndtODk2MCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKIAotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODk2MF9kYXBtX3dpZGdldHMsCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5NjBfZGFwbV93aWRnZXRzLAogCQkJCSAgQVJSQVlfU0laRSh3bTg5NjBfZGFwbV93aWRnZXRzKSk7CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fcGF0aHMsIEFSUkFZX1NJWkUoYXVkaW9fcGF0aHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19wYXRocywgQVJSQVlfU0laRShhdWRpb19wYXRocykpOwogCiAJLyogSW4gY2FwbGVzcyBtb2RlIE9VVDMgaXMgdXNlZCB0byBwcm92aWRlIFZNSUQgZm9yIHRoZQogCSAqIGhlYWRwaG9uZSBvdXRwdXRzLCBvdGhlcndpc2UgaXQgaXMgdXNlZCBhcyBhIG1vbm8gbWl4ZXIuCiAJICovCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5jYXBsZXNzKSB7Ci0JCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODk2MF9kYXBtX3dpZGdldHNfY2FwbGVzcywKKwkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5NjBfZGFwbV93aWRnZXRzX2NhcGxlc3MsCiAJCQkJCSAgQVJSQVlfU0laRSh3bTg5NjBfZGFwbV93aWRnZXRzX2NhcGxlc3MpKTsKIAotCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fcGF0aHNfY2FwbGVzcywKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fcGF0aHNfY2FwbGVzcywKIAkJCQkJQVJSQVlfU0laRShhdWRpb19wYXRoc19jYXBsZXNzKSk7CiAJfSBlbHNlIHsKLQkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTYwX2RhcG1fd2lkZ2V0c19vdXQzLAorCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk2MF9kYXBtX3dpZGdldHNfb3V0MywKIAkJCQkJICBBUlJBWV9TSVpFKHdtODk2MF9kYXBtX3dpZGdldHNfb3V0MykpOwogCi0JCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19wYXRoc19vdXQzLAorCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19wYXRoc19vdXQzLAogCQkJCQlBUlJBWV9TSVpFKGF1ZGlvX3BhdGhzX291dDMpKTsKIAl9CiAKQEAgLTQxOCw3ICs0MTcsOSBAQAogCSAqIGxpc3QgZWFjaCB0aW1lIHRvIGZpbmQgdGhlIGRlc2lyZWQgcG93ZXIgc3RhdGUgZG8gc28gbm93CiAJICogYW5kIHNhdmUgdGhlIHJlc3VsdC4KIAkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZjb2RlYy0+ZGFwbV93aWRnZXRzLCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmY29kZWMtPmNhcmQtPndpZGdldHMsIGxpc3QpIHsKKwkJaWYgKHctPmRhcG0gIT0gJmNvZGVjLT5kYXBtKQorCQkJY29udGludWU7CiAJCWlmIChzdHJjbXAody0+bmFtZSwgIkxPVVQxIFBHQSIpID09IDApCiAJCQl3bTg5NjAtPmxvdXQxID0gdzsKIAkJaWYgKHN0cmNtcCh3LT5uYW1lLCAiUk9VVDEgUEdBIikgPT0gMCkKQEAgLTU3Myw3ICs1NzQsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKIAkJCS8qIEVuYWJsZSBhbnRpLXBvcCBmZWF0dXJlcyAqLwogCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYwX0FQT1AxLAogCQkJCSAgICAgIFdNODk2MF9QT0JDVFJMIHwgV004OTYwX1NPRlRfU1QgfApAQCAtNjExLDcgKzYxMiw3IEBACiAJCWJyZWFrOwogCX0KIAotCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MjcsNyArNjI4LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgotCQlzd2l0Y2ggKGNvZGVjLT5iaWFzX2xldmVsKSB7CisJCXN3aXRjaCAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCkgewogCQljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgogCQkJLyogRW5hYmxlIGFudGkgcG9wIG1vZGUgKi8KIAkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk2MF9BUE9QMSwKQEAgLTY4Miw3ICs2ODMsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JCXN3aXRjaCAoY29kZWMtPmJpYXNfbGV2ZWwpIHsKKwkJc3dpdGNoIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsKSB7CiAJCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJCQkvKiBEaXNhYmxlIEhQIGRpc2NoYXJnZSAqLwogCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTYwX0FQT1AyLApAQCAtNzA2LDcgKzcwNyw3IEBACiAJCWJyZWFrOwogCX0KIAotCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2MS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjEuYwppbmRleCA4MzQwNDg1Li41NTI1MmU3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2MS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYxLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKQEAgLTI5MCw3ICsyODksNiBAQAogc3RydWN0IHdtODk2MV9wcml2IHsKIAllbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2xfdHlwZTsKIAlpbnQgc3lzY2xrOwotCXUxNiByZWdfY2FjaGVbV004OTYxX01BWF9SRUdJU1RFUl07CiB9OwogCiBzdGF0aWMgaW50IHdtODk2MV92b2xhdGlsZV9yZWdpc3Rlcih1bnNpZ25lZCBpbnQgcmVnKQpAQCAtODgyLDcgKzg4MCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKLQkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19TVEFOREJZKSB7CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19TVEFOREJZKSB7CiAJCQkvKiBFbmFibGUgYmlhcyBnZW5lcmF0aW9uICovCiAJCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MV9BTlRJX1BPUCk7CiAJCQlyZWcgfD0gV004OTYxX0JVRklPRU4gfCBXTTg5NjFfQlVGRENPUEVOOwpAQCAtODk3LDcgKzg5NSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKLQkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19QUkVQQVJFKSB7CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19QUkVQQVJFKSB7CiAJCQkvKiBWUkVGIG9mZiAqLwogCQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjFfUFdSX01HTVRfMSk7CiAJCQlyZWcgJj0gfldNODk2MV9WUkVGOwpAQCAtOTE5LDcgKzkxNyw3IEBACiAJCWJyZWFrOwogCX0KIAotCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05NTksNiArOTU3LDcgQEAKIAogc3RhdGljIGludCB3bTg5NjFfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogeworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlpbnQgcmV0ID0gMDsKIAl1MTYgcmVnOwogCkBAIC0xMDI0LDkgKzEwMjMsOSBAQAogCiAJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODk2MV9zbmRfY29udHJvbHMsCiAJCQkJQVJSQVlfU0laRSh3bTg5NjFfc25kX2NvbnRyb2xzKSk7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTYxX2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk2MV9kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHdtODk2MV9kYXBtX3dpZGdldHMpKTsKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fcGF0aHMsIEFSUkFZX1NJWkUoYXVkaW9fcGF0aHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19wYXRocywgQVJSQVlfU0laRShhdWRpb19wYXRocykpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYwppbmRleCA3YzQyMWNjLi5iOWNiMWZjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMKQEAgLTI5LDEwICsyOSwxMCBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KICNpbmNsdWRlIDxzb3VuZC93bTg5NjIuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvYXNvYy5oPgogCiAjaW5jbHVkZSAid204OTYyLmgiCiAKQEAgLTE5NTYsNyArMTk1Niw3IEBACiAKIHN0YXRpYyBpbnQgd204OTYyX3Jlc2V0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgV004OTYyX1NPRlRXQVJFX1JFU0VULCAwKTsKKwlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgV004OTYyX1NPRlRXQVJFX1JFU0VULCAweDYyNDMpOwogfQogCiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoaW5wZ2FfdGx2LCAtMjMyNSwgNzUsIDApOwpAQCAtMjY3Nyw2ICsyNjc3LDcgQEAKIHN0YXRpYyBpbnQgd204OTYyX2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgd204OTYyX3BkYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoY29kZWMtPmRldik7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCiAJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODk2Ml9zbmRfY29udHJvbHMsCiAJCQkgICAgIEFSUkFZX1NJWkUod204OTYyX3NuZF9jb250cm9scykpOwpAQCAtMjY4OCwyNiArMjY4OSwyNiBAQAogCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5NjJfc3BrX3N0ZXJlb19jb250cm9scykpOwogCiAKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5NjJfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTYyX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUod204OTYyX2RhcG1fd2lkZ2V0cykpOwogCWlmIChwZGF0YSAmJiBwZGF0YS0+c3BrX21vbm8pCi0JCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODk2Ml9kYXBtX3Nwa19tb25vX3dpZGdldHMsCisJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTYyX2RhcG1fc3BrX21vbm9fd2lkZ2V0cywKIAkJCQkJICBBUlJBWV9TSVpFKHdtODk2Ml9kYXBtX3Nwa19tb25vX3dpZGdldHMpKTsKIAllbHNlCi0JCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODk2Ml9kYXBtX3Nwa19zdGVyZW9fd2lkZ2V0cywKKwkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5NjJfZGFwbV9zcGtfc3RlcmVvX3dpZGdldHMsCiAJCQkJCSAgQVJSQVlfU0laRSh3bTg5NjJfZGFwbV9zcGtfc3RlcmVvX3dpZGdldHMpKTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCB3bTg5NjJfaW50ZXJjb24sCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgd204OTYyX2ludGVyY29uLAogCQkJCUFSUkFZX1NJWkUod204OTYyX2ludGVyY29uKSk7CiAJaWYgKHBkYXRhICYmIHBkYXRhLT5zcGtfbW9ubykKLQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIHdtODk2Ml9zcGtfbW9ub19pbnRlcmNvbiwKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgd204OTYyX3Nwa19tb25vX2ludGVyY29uLAogCQkJCQlBUlJBWV9TSVpFKHdtODk2Ml9zcGtfbW9ub19pbnRlcmNvbikpOwogCWVsc2UKLQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIHdtODk2Ml9zcGtfc3RlcmVvX2ludGVyY29uLAorCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCB3bTg5NjJfc3BrX3N0ZXJlb19pbnRlcmNvbiwKIAkJCQkJQVJSQVlfU0laRSh3bTg5NjJfc3BrX3N0ZXJlb19pbnRlcmNvbikpOwogCiAKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJCZWVwIik7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJCZWVwIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI4MTQsNyArMjgxNSw3IEBACiAJc3RydWN0IHdtODk2Ml9wcml2ICp3bTg5NjIgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlpbnQgcmV0OwogCi0JaWYgKGxldmVsID09IGNvZGVjLT5iaWFzX2xldmVsKQorCWlmIChsZXZlbCA9PSBjb2RlYy0+ZGFwbS5iaWFzX2xldmVsKQogCQlyZXR1cm4gMDsKIAogCXN3aXRjaCAobGV2ZWwpIHsKQEAgLTI4MjgsNyArMjgyOSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKLQkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgewogCQkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204OTYyLT5zdXBwbGllcyksCiAJCQkJCQkgICAgd204OTYyLT5zdXBwbGllcyk7CiAJCQlpZiAocmV0ICE9IDApIHsKQEAgLTI4NzgsNyArMjg3OSw3IEBACiAJCQkJICAgICAgIHdtODk2Mi0+c3VwcGxpZXMpOwogCQlicmVhazsKIAl9Ci0JY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gbGV2ZWw7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzNDgsNiArMzM0OSwxMiBAQAogCWlmIChhY3RpdmUgJiAoV004OTYyX01JQ1NDRF9FSU5UIHwgV004OTYyX01JQ0RfRUlOVCkpIHsKIAkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTWljcm9waG9uZSBldmVudCBkZXRlY3RlZFxuIik7CiAKKyNpZm5kZWYgQ09ORklHX1NORF9TT0NfV004OTYyX01PRFVMRQorCQl0cmFjZV9zbmRfc29jX2phY2tfaXJxKGRldl9uYW1lKGNvZGVjLT5kZXYpKTsKKyNlbmRpZgorCisJCXBtX3dha2V1cF9ldmVudChjb2RlYy0+ZGV2LCAzMDApOworCiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmd204OTYyLT5taWNfd29yaywKIAkJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKDI1MCkpOwogCX0KQEAgLTM0MzMsNiArMzQ0MCw3IEBACiAJc3RydWN0IHdtODk2Ml9wcml2ICp3bTg5NjIgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdtODk2Ml9wcml2LCBiZWVwX3dvcmspOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHdtODk2Mi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCWludCBpOwogCWludCByZWcgPSAwOwogCWludCBiZXN0ID0gMDsKQEAgLTM0NDksMTYgKzM0NTcsMTYgQEAKIAogCQlyZWcgPSBXTTg5NjJfQkVFUF9FTkEgfCAoYmVzdCA8PCBXTTg5NjJfQkVFUF9SQVRFX1NISUZUKTsKIAotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkJlZXAiKTsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkJlZXAiKTsKIAl9IGVsc2UgewogCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJEaXNhYmxpbmcgYmVlcFxuIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkJlZXAiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJCZWVwIik7CiAJfQogCiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTYyX0JFRVBfR0VORVJBVE9SXzEsCiAJCQkgICAgV004OTYyX0JFRVBfRU5BIHwgV004OTYyX0JFRVBfUkFURV9NQVNLLCByZWcpOwogCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogfQogCiAvKiBGb3IgdXNhYmlsaXR5IGRlZmluZSBhIHdheSBvZiBpbmplY3RpbmcgYmVlcCBldmVudHMgZm9yIHRoZSBkZXZpY2UgLQpAQCAtMzcwNiw3ICszNzE0LDcgQEAKIAlJTklUX0RFTEFZRURfV09SSygmd204OTYyLT5taWNfd29yaywgd204OTYyX21pY193b3JrKTsKIAogCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKLQljb2RlYy0+aWRsZV9iaWFzX29mZiA9IDE7CisJY29kZWMtPmRhcG0uaWRsZV9iaWFzX29mZiA9IDE7CiAKIAlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgMTYsIDE2LCBTTkRfU09DX0kyQyk7CiAJaWYgKHJldCAhPSAwKSB7CkBAIC0zODY1LDcgKzM4NzMsNiBAQAogZXJyX2dldDoKIAlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTYyLT5zdXBwbGllcyksIHdtODk2Mi0+c3VwcGxpZXMpOwogZXJyOgotCWtmcmVlKHdtODk2Mik7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NzEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTcxLmMKaW5kZXggOWYxOGRiNi4uNTcyYmI4MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NzEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3MS5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCiAjaW5jbHVkZSAid204OTcxLmgiCkBAIC0zMzMsMTAgKzMzMiwxMSBAQAogCiBzdGF0aWMgaW50IHdtODk3MV9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTcxX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUod204OTcxX2RhcG1fd2lkZ2V0cykpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5NzFfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg5NzFfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NTMsNyArNTUzLDcgQEAKIAkJc25kX3NvY193cml0ZShjb2RlYywgV004OTcxX1BXUjEsIDB4MDAwMSk7CiAJCWJyZWFrOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTkwLDkgKzU5MCwxMSBAQAogCiBzdGF0aWMgdm9pZCB3bTg5NzFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzbmRfc29jX2NvZGVjLCBkZWxheWVkX3dvcmsud29yayk7Ci0Jd204OTcxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBjb2RlYy0+Ymlhc19sZXZlbCk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCwKKwkJCSAgICAgZGVsYXllZF93b3JrLndvcmspOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhcG0tPmNvZGVjOworCXdtODk3MV9zZXRfYmlhc19sZXZlbChjb2RlYywgY29kZWMtPmRhcG0uYmlhc19sZXZlbCk7CiB9CiAKIHN0YXRpYyBpbnQgd204OTcxX3N1c3BlbmQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCkBAIC02MjAsMTEgKzYyMiwxMSBAQAogCXdtODk3MV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCiAJLyogY2hhcmdlIHdtODk3MSBjYXBzICovCi0JaWYgKGNvZGVjLT5zdXNwZW5kX2JpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09OKSB7CisJaWYgKGNvZGVjLT5kYXBtLnN1c3BlbmRfYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT04pIHsKIAkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzFfUFdSMSkgJiAweGZlM2U7CiAJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3MV9QV1IxLCByZWcgfCAweDAxYzApOwotCQljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PTjsKLQkJcXVldWVfZGVsYXllZF93b3JrKHdtODk3MV93b3JrcSwgJmNvZGVjLT5kZWxheWVkX3dvcmssCisJCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT047CisJCXF1ZXVlX2RlbGF5ZWRfd29yayh3bTg5NzFfd29ya3EsICZjb2RlYy0+ZGFwbS5kZWxheWVkX3dvcmssCiAJCQltc2Vjc190b19qaWZmaWVzKDEwMDApKTsKIAl9CiAKQEAgLTY0Myw3ICs2NDUsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCUlOSVRfREVMQVlFRF9XT1JLKCZjb2RlYy0+ZGVsYXllZF93b3JrLCB3bTg5NzFfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJmNvZGVjLT5kYXBtLmRlbGF5ZWRfd29yaywgd204OTcxX3dvcmspOwogCXdtODk3MV93b3JrcSA9IGNyZWF0ZV93b3JrcXVldWUoIndtODk3MSIpOwogCWlmICh3bTg5NzFfd29ya3EgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02NTMsOCArNjU1LDggQEAKIAkvKiBjaGFyZ2Ugb3V0cHV0IGNhcHMgLSBzZXQgdm1pZCB0byA1ayBmb3IgcXVpY2sgcG93ZXIgdXAgKi8KIAlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3MV9QV1IxKSAmIDB4ZmUzZTsKIAlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzFfUFdSMSwgcmVnIHwgMHgwMWMwKTsKLQljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19TVEFOREJZOwotCXF1ZXVlX2RlbGF5ZWRfd29yayh3bTg5NzFfd29ya3EsICZjb2RlYy0+ZGVsYXllZF93b3JrLAorCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfU1RBTkRCWTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsod204OTcxX3dvcmtxLCAmY29kZWMtPmRhcG0uZGVsYXllZF93b3JrLAogCQltc2Vjc190b19qaWZmaWVzKDEwMDApKTsKIAogCS8qIHNldCB0aGUgdXBkYXRlIGJpdHMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5jCmluZGV4IGI0MzYzZjYuLmNhNjQ2YTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KIApAQCAtNTIsNyArNTEsNiBAQAogCiBzdHJ1Y3Qgd204OTc0X3ByaXYgewogCWVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbF90eXBlOwotCXUxNiByZWdfY2FjaGVbV004OTc0X0NBQ0hFUkVHTlVNXTsKIH07CiAKICNkZWZpbmUgd204OTc0X3Jlc2V0KGMpCXNuZF9zb2Nfd3JpdGUoYywgV004OTc0X1JFU0VULCAwKQpAQCAtMjc0LDEwICsyNzIsMTEgQEAKIAogc3RhdGljIGludCB3bTg5NzRfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODk3NF9kYXBtX3dpZGdldHMsCi0JCQkJICBBUlJBWV9TSVpFKHdtODk3NF9kYXBtX3dpZGdldHMpKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTc0X2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204OTc0X2RhcG1fd2lkZ2V0cykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTMwLDcgKzUyOSw3IEBACiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKIAkJcG93ZXIxIHw9IFdNODk3NF9QT1dFUjFfQklBU0VOIHwgV004OTc0X1BPV0VSMV9CVUZJT0VOOwogCi0JCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKIAkJCS8qIEluaXRpYWwgY2FwIGNoYXJnZSBhdCBWTUlEIDVrICovCiAJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzRfUE9XRVIxLCBwb3dlcjEgfCAweDMpOwogCQkJbWRlbGF5KDEwMCk7CkBAIC01NDcsNyArNTQ2LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gbGV2ZWw7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3OC5jCmluZGV4IDEzYjk3OWEuLjRiYmMzNDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzguYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KQEAgLTYwLDcgKzU5LDYgQEAKIAl1bnNpZ25lZCBpbnQgZl9vcGNsazsKIAlpbnQgbWNsa19pZHg7CiAJZW51bSB3bTg5Nzhfc3lzY2xrX3NyYyBzeXNjbGs7Ci0JdTE2IHJlZ19jYWNoZVtXTTg5NzhfQ0FDSEVSRUdOVU1dOwogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKndtODk3OF9jb21wYW5kaW5nW10gPSB7Ik9mZiIsICJOQyIsICJ1LWxhdyIsICJBLWxhdyJ9OwpAQCAtMzU1LDExICszNTMsMTIgQEAKIAogc3RhdGljIGludCB3bTg5NzhfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODk3OF9kYXBtX3dpZGdldHMsCi0JCQkJICBBUlJBWV9TSVpFKHdtODk3OF9kYXBtX3dpZGdldHMpKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk3OF9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODk3OF9kYXBtX3dpZGdldHMpKTsKIAkvKiBzZXQgdXAgdGhlIFdNODk3OCBhdWRpbyBtYXAgKi8KLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAogCXJldHVybiAwOwogfQpAQCAtODM3LDcgKzgzNiw3IEBACiAJCS8qIGJpdCAzOiBlbmFibGUgYmlhcywgYml0IDI6IGVuYWJsZSBJL08gdGllIG9mZiBidWZmZXIgKi8KIAkJcG93ZXIxIHw9IDB4YzsKIAotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CiAJCQkvKiBJbml0aWFsIGNhcCBjaGFyZ2UgYXQgVk1JRCA1ayAqLwogCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMSwKIAkJCQkgICAgICBwb3dlcjEgfCAweDMpOwpAQCAtODU3LDcgKzg1Niw3IEBACiAKIAlkZXZfZGJnKGNvZGVjLT5kZXYsICIlczogJWQsICV4XG4iLCBfX2Z1bmNfXywgbGV2ZWwsIHBvd2VyMSk7CiAKLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5ODUuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTg1LmMKaW5kZXggZmQyZTdjYy4uYmFlNTEwYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5ODUuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk4NS5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogCkBAIC01MzMsMTAgKzUzMiwxMSBAQAogCiBzdGF0aWMgaW50IHdtODk4NV9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTg1X2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUod204OTg1X2RhcG1fd2lkZ2V0cykpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5ODVfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg5ODVfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLAogCQkJCUFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CiAJcmV0dXJuIDA7CiB9CkBAIC04NzksNyArODc5LDcgQEAKIAkJCQkgICAgMSA8PCBXTTg5ODVfVk1JRFNFTF9TSElGVCk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKIAkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODk4NS0+c3VwcGxpZXMpLAogCQkJCQkJICAgIHdtODk4NS0+c3VwcGxpZXMpOwogCQkJaWYgKHJldCkgewpAQCAtOTM5LDcgKzkzOSw3IEBACiAJCWJyZWFrOwogCX0KIAotCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk4OC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5ODguYwppbmRleCBkN2YyNTk3Li5kNzE3MGYxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk4OC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTg4LmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAKICNpbmNsdWRlICJ3bTg5ODguaCIKQEAgLTU0LDcgKzUzLDYgQEAKIAl1bnNpZ25lZCBpbnQgc3lzY2xrOwogCWVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbF90eXBlOwogCXN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCAqc3lzY2xrX2NvbnN0cmFpbnRzOwotCXUxNiByZWdfY2FjaGVbV004OTg4X05VTV9SRUddOwogfTsKIAogCkBAIC02NzcsNyArNjc1LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CiAJCQkvKiBWUkVGLCBWTUlEPTJ4NWsgKi8KIAkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk4OF9QV1IxLCBwd3JfcmVnIHwgMHgxYzEpOwogCkBAIC02OTMsNyArNjkxLDcgQEAKIAkJc25kX3NvY193cml0ZShjb2RlYywgV004OTg4X1BXUjEsIDB4MDAwMCk7CiAJCWJyZWFrOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzU5LDYgKzc1Nyw3IEBACiBzdGF0aWMgaW50IHdtODk4OF9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHdtODk4OF9wcml2ICp3bTg5ODggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IHJldCA9IDA7CiAJdTE2IHJlZzsKIApAQCAtNzkwLDkgKzc4OSw5IEBACiAKIAlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTg4X3NuZF9jb250cm9scywKIAkJCQlBUlJBWV9TSVpFKHdtODk4OF9zbmRfY29udHJvbHMpKTsKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5ODhfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTg4X2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUod204OTg4X2RhcG1fd2lkZ2V0cykpOwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYwppbmRleCAyNjQ4MjhlLi41Yzg3YTYzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC05MTQsMTEgKzkxMywxMiBAQAogCiBzdGF0aWMgaW50IHdtODk5MF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTkwX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUod204OTkwX2RhcG1fd2lkZ2V0cykpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTkwX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204OTkwX2RhcG1fd2lkZ2V0cykpOwogCS8qIHNldCB1cCB0aGUgV004OTkwIGF1ZGlvIG1hcCAqLwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTcwLDcgKzExNzAsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKIAkJCS8qIEVuYWJsZSBhbGwgb3V0cHV0IGRpc2NoYXJnZSBiaXRzICovCiAJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfQU5USVBPUDEsIFdNODk5MF9ESVNfTExJTkUgfAogCQkJCVdNODk5MF9ESVNfUkxJTkUgfCBXTTg5OTBfRElTX09VVDMgfApAQCAtMTI2Niw3ICsxMjY2LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gbGV2ZWw7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5jCmluZGV4IDU4OWUzZmEuLjE4YzBkOWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTMuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC93bTg5OTMuaD4KIApAQCAtMjI2LDcgKzIyNSw2IEBACiAKIHN0cnVjdCB3bTg5OTNfcHJpdiB7CiAJc3RydWN0IHdtX2h1YnNfZGF0YSBodWJzX2RhdGE7Ci0JdTE2IHJlZ19jYWNoZVtXTTg5OTNfUkVHSVNURVJfQ09VTlRdOwogCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1dNODk5M19OVU1fU1VQUExJRVNdOwogCXN0cnVjdCB3bTg5OTNfcGxhdGZvcm1fZGF0YSBwZGF0YTsKIAllbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2xfdHlwZTsKQEAgLTczNSw2ICs3MzMsNyBAQAogCQkJCQkgICAgMCk7CiAJCX0KIAkJd204OTkzLT5jbGFzc193X3VzZXJzKys7CisJCXdtODk5My0+aHVic19kYXRhLmNsYXNzX3cgPSB0cnVlOwogCX0KIAogCS8qIEltcGxlbWVudCB0aGUgY2hhbmdlICovCkBAIC03NTEsNiArNzUwLDcgQEAKIAkJCQkJICAgIFdNODk5M19DUF9EWU5fVik7CiAJCX0KIAkJd204OTkzLT5jbGFzc193X3VzZXJzLS07CisJCXdtODk5My0+aHVic19kYXRhLmNsYXNzX3cgPSBmYWxzZTsKIAl9CiAKIAlkZXZfZGJnKGNvZGVjLT5kZXYsICJJbmRpcmVjdCBEQUMgdXNlIGNvdW50IG5vdyAlZFxuIiwKQEAgLTk2OCw3ICs5NjgsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKIAkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODk5My0+c3VwcGxpZXMpLAogCQkJCQkJICAgIHdtODk5My0+c3VwcGxpZXMpOwogCQkJaWYgKHJldCAhPSAwKQpAQCAtMTAyOSw2ICsxMDI5LDEyIEBACiAJCQkJICAgIFdNODk5M19WTUlEX1NFTF9NQVNLIHwgV004OTkzX0JJQVNfRU5BLAogCQkJCSAgICAwKTsKIAorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQU5USVBPUDIsCisJCQkJICAgIFdNODk5M19TVEFSVFVQX0JJQVNfRU5BIHwKKwkJCQkgICAgV004OTkzX1ZNSURfQlVGX0VOQSB8CisJCQkJICAgIFdNODk5M19WTUlEX1JBTVBfTUFTSyB8CisJCQkJICAgIFdNODk5M19CSUFTX1NSQywgMCk7CisKICNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCiAgICAgICAgICAgICAgICAvKiBQb3N0IDIuNi4zNCB3ZSB3aWxsIGJlIGFibGUgdG8gZ2V0IGEgY2FsbGJhY2sgd2hlbgogICAgICAgICAgICAgICAgICogdGhlIHJlZ3VsYXRvcnMgYXJlIGRpc2FibGVkIHdoaWNoIHdlIGNhbiB1c2UgYnV0CkBAIC0xMDQzLDcgKzEwNDksNyBAQAogCQlicmVhazsKIAl9CiAKLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAogCXJldHVybiAwOwogfQpAQCAtMTIyNSw3ICsxMjMxLDcgQEAKIAkJICAgICAgIC0gd204OTkzLT5mcyk7CiAJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUoY2xrX3N5c19yYXRlcyk7IGkrKykgewogCQljdXJfdmFsID0gYWJzKCh3bTg5OTMtPnN5c2Nsa19yYXRlIC8KLQkJCSAgICAgICBjbGtfc3lzX3JhdGVzW2ldLnJhdGlvKSAtIHdtODk5My0+ZnMpOzsKKwkJCSAgICAgICBjbGtfc3lzX3JhdGVzW2ldLnJhdGlvKSAtIHdtODk5My0+ZnMpOwogCQlpZiAoY3VyX3ZhbCA8IGJlc3RfdmFsKSB7CiAJCQliZXN0ID0gaTsKIAkJCWJlc3RfdmFsID0gY3VyX3ZhbDsKQEAgLTE0MjIsNiArMTQyOCw3IEBACiBzdGF0aWMgaW50IHdtODk5M19wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHdtODk5M19wcml2ICp3bTg5OTMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IHJldCwgaSwgdmFsOwogCiAJd204OTkzLT5odWJzX2RhdGEuaHBfc3RhcnR1cF9tb2RlID0gMTsKQEAgLTE1MDMsMTEgKzE1MTAsMTEgQEAKIAkJCQkgICAgIEFSUkFZX1NJWkUod204OTkzX2VxX2NvbnRyb2xzKSk7CiAJfQogCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTkzX2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk5M19kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHdtODk5M19kYXBtX3dpZGdldHMpKTsKIAl3bV9odWJzX2FkZF9hbmFsb2d1ZV9jb250cm9scyhjb2RlYyk7CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgcm91dGVzLCBBUlJBWV9TSVpFKHJvdXRlcykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHJvdXRlcywgQVJSQVlfU0laRShyb3V0ZXMpKTsKIAl3bV9odWJzX2FkZF9hbmFsb2d1ZV9yb3V0ZXMoY29kZWMsIHdtODk5My0+cGRhdGEubGluZW91dDFfZGlmZiwKIAkJCQkgICAgd204OTkzLT5wZGF0YS5saW5lb3V0Ml9kaWZmKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQtdGFibGVzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC10YWJsZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGU5YjAyCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQtdGFibGVzLmMKQEAgLTAsMCArMSwzMTQ3IEBACisjaW5jbHVkZSAid204OTk0LmgiCisKK2NvbnN0IHN0cnVjdCB3bTg5OTRfYWNjZXNzX21hc2sgd204OTk0X2FjY2Vzc19tYXNrc1tXTTg5OTRfQ0FDSEVfU0laRV0gPSB7CisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMCAgICAgLSBTb2Z0d2FyZSBSZXNldCAqLworCXsgMHgzQjM3LCAweDNCMzcgfSwgLyogUjEgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkgKi8KKwl7IDB4NkJGMCwgMHg2QkYwIH0sIC8qIFIyICAgICAtIFBvd2VyIE1hbmFnZW1lbnQgKDIpICovCisJeyAweDNGRjAsIDB4M0ZGMCB9LCAvKiBSMyAgICAgLSBQb3dlciBNYW5hZ2VtZW50ICgzKSAqLworCXsgMHgzRjNGLCAweDNGM0YgfSwgLyogUjQgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoNCkgKi8KKwl7IDB4M0YwRiwgMHgzRjBGIH0sIC8qIFI1ICAgICAtIFBvd2VyIE1hbmFnZW1lbnQgKDUpICovCisJeyAweDAwM0YsIDB4MDAzRiB9LCAvKiBSNiAgICAgLSBQb3dlciBNYW5hZ2VtZW50ICg2KSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjAgKi8KKwl7IDB4MDFDMCwgMHgwMUMwIH0sIC8qIFIyMSAgICAtIElucHV0IE1peGVyICgxKSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjMgKi8KKwl7IDB4MDBERiwgMHgwMURGIH0sIC8qIFIyNCAgICAtIExlZnQgTGluZSBJbnB1dCAxJjIgVm9sdW1lICovCisJeyAweDAwREYsIDB4MDFERiB9LCAvKiBSMjUgICAgLSBMZWZ0IExpbmUgSW5wdXQgMyY0IFZvbHVtZSAqLworCXsgMHgwMERGLCAweDAxREYgfSwgLyogUjI2ICAgIC0gUmlnaHQgTGluZSBJbnB1dCAxJjIgVm9sdW1lICovCisJeyAweDAwREYsIDB4MDFERiB9LCAvKiBSMjcgICAgLSBSaWdodCBMaW5lIElucHV0IDMmNCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGIH0sIC8qIFIyOCAgICAtIExlZnQgT3V0cHV0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjI5ICAgIC0gUmlnaHQgT3V0cHV0IFZvbHVtZSAqLworCXsgMHgwMDc3LCAweDAwNzcgfSwgLyogUjMwICAgIC0gTGluZSBPdXRwdXRzIFZvbHVtZSAqLworCXsgMHgwMDMwLCAweDAwMzAgfSwgLyogUjMxICAgIC0gSFBPVVQyIFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjMyICAgIC0gTGVmdCBPUEdBIFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjMzICAgIC0gUmlnaHQgT1BHQSBWb2x1bWUgKi8KKwl7IDB4MDA3RiwgMHgwMDdGIH0sIC8qIFIzNCAgICAtIFNQS01JWEwgQXR0ZW51YXRpb24gKi8KKwl7IDB4MDE3RiwgMHgwMTdGIH0sIC8qIFIzNSAgICAtIFNQS01JWFIgQXR0ZW51YXRpb24gKi8KKwl7IDB4MDAzRiwgMHgwMDNGIH0sIC8qIFIzNiAgICAtIFNQS09VVCBNaXhlcnMgKi8KKwl7IDB4MDAzRiwgMHgwMDNGIH0sIC8qIFIzNyAgICAtIENsYXNzRCAqLworCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjM4ICAgIC0gU3BlYWtlciBWb2x1bWUgTGVmdCAqLworCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjM5ICAgIC0gU3BlYWtlciBWb2x1bWUgUmlnaHQgKi8KKwl7IDB4MDBGRiwgMHgwMEZGIH0sIC8qIFI0MCAgICAtIElucHV0IE1peGVyICgyKSAqLworCXsgMHgwMUI3LCAweDAxQjcgfSwgLyogUjQxICAgIC0gSW5wdXQgTWl4ZXIgKDMpICovCisJeyAweDAxQjcsIDB4MDFCNyB9LCAvKiBSNDIgICAgLSBJbnB1dCBNaXhlciAoNCkgKi8KKwl7IDB4MDFDNywgMHgwMUM3IH0sIC8qIFI0MyAgICAtIElucHV0IE1peGVyICg1KSAqLworCXsgMHgwMUM3LCAweDAxQzcgfSwgLyogUjQ0ICAgIC0gSW5wdXQgTWl4ZXIgKDYpICovCisJeyAweDAxRkYsIDB4MDFGRiB9LCAvKiBSNDUgICAgLSBPdXRwdXQgTWl4ZXIgKDEpICovCisJeyAweDAxRkYsIDB4MDFGRiB9LCAvKiBSNDYgICAgLSBPdXRwdXQgTWl4ZXIgKDIpICovCisJeyAweDBGRkYsIDB4MEZGRiB9LCAvKiBSNDcgICAgLSBPdXRwdXQgTWl4ZXIgKDMpICovCisJeyAweDBGRkYsIDB4MEZGRiB9LCAvKiBSNDggICAgLSBPdXRwdXQgTWl4ZXIgKDQpICovCisJeyAweDBGRkYsIDB4MEZGRiB9LCAvKiBSNDkgICAgLSBPdXRwdXQgTWl4ZXIgKDUpICovCisJeyAweDBGRkYsIDB4MEZGRiB9LCAvKiBSNTAgICAgLSBPdXRwdXQgTWl4ZXIgKDYpICovCisJeyAweDAwMzgsIDB4MDAzOCB9LCAvKiBSNTEgICAgLSBIUE9VVDIgTWl4ZXIgKi8KKwl7IDB4MDA3NywgMHgwMDc3IH0sIC8qIFI1MiAgICAtIExpbmUgTWl4ZXIgKDEpICovCisJeyAweDAwNzcsIDB4MDA3NyB9LCAvKiBSNTMgICAgLSBMaW5lIE1peGVyICgyKSAqLworCXsgMHgwM0ZGLCAweDAzRkYgfSwgLyogUjU0ICAgIC0gU3BlYWtlciBNaXhlciAqLworCXsgMHgwMEMxLCAweDAwQzEgfSwgLyogUjU1ICAgIC0gQWRkaXRpb25hbCBDb250cm9sICovCisJeyAweDAwRjAsIDB4MDBGMCB9LCAvKiBSNTYgICAgLSBBbnRpUE9QICgxKSAqLworCXsgMHgwMUVGLCAweDAxRUYgfSwgLyogUjU3ICAgIC0gQW50aVBPUCAoMikgKi8KKwl7IDB4MDBGRiwgMHgwMEZGIH0sIC8qIFI1OCAgICAtIE1JQ0JJQVMgKi8KKwl7IDB4MDAwRiwgMHgwMDBGIH0sIC8qIFI1OSAgICAtIExETyAxICovCisJeyAweDAwMDcsIDB4MDAwNyB9LCAvKiBSNjAgICAgLSBMRE8gMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NSAqLworCXsgMHg4MDAwLCAweDgwMDAgfSwgLyogUjc2ICAgIC0gQ2hhcmdlIFB1bXAgKDEpICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODAgKi8KKwl7IDB4MDMwMSwgMHgwMzAxIH0sIC8qIFI4MSAgICAtIENsYXNzIFcgKDEpICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MyAqLworCXsgMHgzMzNGLCAweDMzM0YgfSwgLyogUjg0ICAgIC0gREMgU2Vydm8gKDEpICovCisJeyAweDBGRUYsIDB4MEZFRiB9LCAvKiBSODUgICAgLSBEQyBTZXJ2byAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NiAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjg3ICAgIC0gREMgU2Vydm8gKDQpICovCisJeyAweDAzMzMsIDB4MDAwMCB9LCAvKiBSODggICAgLSBEQyBTZXJ2byBSZWFkYmFjayAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1ICovCisJeyAweDAwRUUsIDB4MDBFRSB9LCAvKiBSOTYgICAgLSBBbmFsb2d1ZSBIUCAoMSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTUgKi8KKwl7IDB4MDAwRiwgMHgwMDAwIH0sIC8qIFIyNTYgICAtIENoaXAgUmV2aXNpb24gKi8KKwl7IDB4MDA3NCwgMHgwMDc0IH0sIC8qIFIyNTcgICAtIENvbnRyb2wgSW50ZXJmYWNlICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjU4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjU5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjYwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjYxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjYyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjYzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjcwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjcxICovCisJeyAweDgwN0YsIDB4ODM3RiB9LCAvKiBSMjcyICAgLSBXcml0ZSBTZXF1ZW5jZXIgQ3RybCAoMSkgKi8KKwl7IDB4MDE3RiwgMHgwMDAwIH0sIC8qIFIyNzMgICAtIFdyaXRlIFNlcXVlbmNlciBDdHJsICgyKSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUxMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUxMSAqLworCXsgMHgwMDFGLCAweDAwMUYgfSwgLyogUjUxMiAgIC0gQUlGMSBDbG9ja2luZyAoMSkgKi8KKwl7IDB4MDAzRiwgMHgwMDNGIH0sIC8qIFI1MTMgICAtIEFJRjEgQ2xvY2tpbmcgKDIpICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTE0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTE1ICovCisJeyAweDAwMUYsIDB4MDAxRiB9LCAvKiBSNTE2ICAgLSBBSUYyIENsb2NraW5nICgxKSAqLworCXsgMHgwMDNGLCAweDAwM0YgfSwgLyogUjUxNyAgIC0gQUlGMiBDbG9ja2luZyAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MTkgKi8KKwl7IDB4MDAxRiwgMHgwMDFGIH0sIC8qIFI1MjAgICAtIENsb2NraW5nICgxKSAqLworCXsgMHgwNzc3LCAweDA3NzcgfSwgLyogUjUyMSAgIC0gQ2xvY2tpbmcgKDIpICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTIyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTIzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTI0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTI1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTI2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTI3ICovCisJeyAweDAwRkYsIDB4MDBGRiB9LCAvKiBSNTI4ICAgLSBBSUYxIFJhdGUgKi8KKwl7IDB4MDBGRiwgMHgwMEZGIH0sIC8qIFI1MjkgICAtIEFJRjIgUmF0ZSAqLworCXsgMHgwMDBGLCAweDAwMDAgfSwgLyogUjUzMCAgIC0gUmF0ZSBTdGF0dXMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDMgKi8KKwl7IDB4MDAwNywgMHgwMDA3IH0sIC8qIFI1NDQgICAtIEZMTDEgQ29udHJvbCAoMSkgKi8KKwl7IDB4M0Y3NywgMHgzRjc3IH0sIC8qIFI1NDUgICAtIEZMTDEgQ29udHJvbCAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFI1NDYgICAtIEZMTDEgQ29udHJvbCAoMykgKi8KKwl7IDB4N0ZFRiwgMHg3RkVGIH0sIC8qIFI1NDcgICAtIEZMTDEgQ29udHJvbCAoNCkgKi8KKwl7IDB4MUZEQiwgMHgxRkRCIH0sIC8qIFI1NDggICAtIEZMTDEgQ29udHJvbCAoNSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzUgKi8KKwl7IDB4MDAwNywgMHgwMDA3IH0sIC8qIFI1NzYgICAtIEZMTDIgQ29udHJvbCAoMSkgKi8KKwl7IDB4M0Y3NywgMHgzRjc3IH0sIC8qIFI1NzcgICAtIEZMTDIgQ29udHJvbCAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFI1NzggICAtIEZMTDIgQ29udHJvbCAoMykgKi8KKwl7IDB4N0ZFRiwgMHg3RkVGIH0sIC8qIFI1NzkgICAtIEZMTDIgQ29udHJvbCAoNCkgKi8KKwl7IDB4MUZEQiwgMHgxRkRCIH0sIC8qIFI1ODAgICAtIEZMTDIgQ29udHJvbCAoNSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjcgKi8KKwl7IDB4RTFGOCwgMHhFMUY4IH0sIC8qIFI3NjggICAtIEFJRjEgQ29udHJvbCAoMSkgKi8KKwl7IDB4Q0QxRiwgMHhDRDFGIH0sIC8qIFI3NjkgICAtIEFJRjEgQ29udHJvbCAoMikgKi8KKwl7IDB4RjAwMCwgMHhGMDAwIH0sIC8qIFI3NzAgICAtIEFJRjEgTWFzdGVyL1NsYXZlICovCisJeyAweDAxRjAsIDB4MDFGMCB9LCAvKiBSNzcxICAgLSBBSUYxIEJDTEsgKi8KKwl7IDB4MEZGRiwgMHgwRkZGIH0sIC8qIFI3NzIgICAtIEFJRjFBREMgTFJDTEsgKi8KKwl7IDB4MEZGRiwgMHgwRkZGIH0sIC8qIFI3NzMgICAtIEFJRjFEQUMgTFJDTEsgKi8KKwl7IDB4MDAwMywgMHgwMDAzIH0sIC8qIFI3NzQgICAtIEFJRjFEQUMgRGF0YSAqLworCXsgMHgwMDAzLCAweDAwMDMgfSwgLyogUjc3NSAgIC0gQUlGMUFEQyBEYXRhICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzc2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzc3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzc4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzc5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzgwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzgxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzgyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzgzICovCisJeyAweEYxRjgsIDB4RjFGOCB9LCAvKiBSNzg0ICAgLSBBSUYyIENvbnRyb2wgKDEpICovCisJeyAweEZEMUYsIDB4RkQxRiB9LCAvKiBSNzg1ICAgLSBBSUYyIENvbnRyb2wgKDIpICovCisJeyAweEYwMDAsIDB4RjAwMCB9LCAvKiBSNzg2ICAgLSBBSUYyIE1hc3Rlci9TbGF2ZSAqLworCXsgMHgwMUYwLCAweDAxRjAgfSwgLyogUjc4NyAgIC0gQUlGMiBCQ0xLICovCisJeyAweDBGRkYsIDB4MEZGRiB9LCAvKiBSNzg4ICAgLSBBSUYyQURDIExSQ0xLICovCisJeyAweDBGRkYsIDB4MEZGRiB9LCAvKiBSNzg5ICAgLSBBSUYyREFDIExSQ0xLICovCisJeyAweDAwMDMsIDB4MDAwMyB9LCAvKiBSNzkwICAgLSBBSUYyREFDIERhdGEgKi8KKwl7IDB4MDAwMywgMHgwMDAzIH0sIC8qIFI3OTEgICAtIEFJRjJBREMgRGF0YSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDAxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDA0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDA3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDEwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDEzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDE2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDE5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAyMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDIyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAyMyAqLworCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjEwMjQgIC0gQUlGMSBBREMxIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiB9LCAvKiBSMTAyNSAgLSBBSUYxIEFEQzEgUmlnaHQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiB9LCAvKiBSMTAyNiAgLSBBSUYxIERBQzEgTGVmdCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGIH0sIC8qIFIxMDI3ICAtIEFJRjEgREFDMSBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGIH0sIC8qIFIxMDI4ICAtIEFJRjEgQURDMiBMZWZ0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjEwMjkgIC0gQUlGMSBBREMyIFJpZ2h0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjEwMzAgIC0gQUlGMSBEQUMyIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiB9LCAvKiBSMTAzMSAgLSBBSUYxIERBQzIgUmlnaHQgVm9sdW1lICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDM0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDM3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzkgKi8KKwl7IDB4RjgwMCwgMHhGODAwIH0sIC8qIFIxMDQwICAtIEFJRjEgQURDMSBGaWx0ZXJzICovCisJeyAweDc4MDAsIDB4NzgwMCB9LCAvKiBSMTA0MSAgLSBBSUYxIEFEQzIgRmlsdGVycyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA0NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA0NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA1MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDUyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA1MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDU1ICovCisJeyAweDAyQjYsIDB4MDJCNiB9LCAvKiBSMTA1NiAgLSBBSUYxIERBQzEgRmlsdGVycyAoMSkgKi8KKwl7IDB4M0YwMCwgMHgzRjAwIH0sIC8qIFIxMDU3ICAtIEFJRjEgREFDMSBGaWx0ZXJzICgyKSAqLworCXsgMHgwMkI2LCAweDAyQjYgfSwgLyogUjEwNTggIC0gQUlGMSBEQUMyIEZpbHRlcnMgKDEpICovCisJeyAweDNGMDAsIDB4M0YwMCB9LCAvKiBSMTA1OSAgLSBBSUYxIERBQzIgRmlsdGVycyAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDcyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDgxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDg0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDg3ICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTA4OCAgLSBBSUYxIERSQzEgKDEpICovCisJeyAweDFGRkYsIDB4MUZGRiB9LCAvKiBSMTA4OSAgLSBBSUYxIERSQzEgKDIpICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTA5MCAgLSBBSUYxIERSQzEgKDMpICovCisJeyAweDA3RkYsIDB4MDdGRiB9LCAvKiBSMTA5MSAgLSBBSUYxIERSQzEgKDQpICovCisJeyAweDAzRkYsIDB4MDNGRiB9LCAvKiBSMTA5MiAgLSBBSUYxIERSQzEgKDUpICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwOTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDk1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwOTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDk4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTAxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEwMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMDMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTA0ICAtIEFJRjEgRFJDMiAoMSkgKi8KKwl7IDB4MUZGRiwgMHgxRkZGIH0sIC8qIFIxMTA1ICAtIEFJRjEgRFJDMiAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTA2ICAtIEFJRjEgRFJDMiAoMykgKi8KKwl7IDB4MDdGRiwgMHgwN0ZGIH0sIC8qIFIxMTA3ICAtIEFJRjEgRFJDMiAoNCkgKi8KKwl7IDB4MDNGRiwgMHgwM0ZGIH0sIC8qIFIxMTA4ICAtIEFJRjEgRFJDMiAoNSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTA5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTEyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTE1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTE4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTIxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTI0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTI3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTMwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTMzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTM2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTM5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTUxICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE1MiAgLSBBSUYxIERBQzEgRVEgR2FpbnMgKDEpICovCisJeyAweEZGQzAsIDB4RkZDMCB9LCAvKiBSMTE1MyAgLSBBSUYxIERBQzEgRVEgR2FpbnMgKDIpICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE1NCAgLSBBSUYxIERBQzEgRVEgQmFuZCAxIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTU1ICAtIEFJRjEgREFDMSBFUSBCYW5kIDEgQiAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNTYgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMSBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNTcgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMiBBICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE1OCAgLSBBSUYxIERBQzEgRVEgQmFuZCAyIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTU5ICAtIEFJRjEgREFDMSBFUSBCYW5kIDIgQyAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNjAgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMiBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNjEgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMyBBICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE2MiAgLSBBSUYxIERBQzEgRVEgQmFuZCAzIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTYzICAtIEFJRjEgREFDMSBFUSBCYW5kIDMgQyAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNjQgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMyBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNjUgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBBICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE2NiAgLSBBSUYxIERBQzEgRVEgQmFuZCA0IEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTY3ICAtIEFJRjEgREFDMSBFUSBCYW5kIDQgQyAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNjggIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNjkgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNSBBICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE3MCAgLSBBSUYxIERBQzEgRVEgQmFuZCA1IEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTcxICAtIEFJRjEgREFDMSBFUSBCYW5kIDUgUEcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTcyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTc1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTc4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTgxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE4MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExODMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTg0ICAtIEFJRjEgREFDMiBFUSBHYWlucyAoMSkgKi8KKwl7IDB4RkZDMCwgMHhGRkMwIH0sIC8qIFIxMTg1ICAtIEFJRjEgREFDMiBFUSBHYWlucyAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTg2ICAtIEFJRjEgREFDMiBFUSBCYW5kIDEgQSAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExODcgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMSBCICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE4OCAgLSBBSUYxIERBQzIgRVEgQmFuZCAxIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE4OSAgLSBBSUYxIERBQzIgRVEgQmFuZCAyIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTkwICAtIEFJRjEgREFDMiBFUSBCYW5kIDIgQiAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExOTEgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMiBDICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE5MiAgLSBBSUYxIERBQzIgRVEgQmFuZCAyIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE5MyAgLSBBSUYxIERBQzIgRVEgQmFuZCAzIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTk0ICAtIEFJRjEgREFDMiBFUSBCYW5kIDMgQiAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExOTUgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBDICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE5NiAgLSBBSUYxIERBQzIgRVEgQmFuZCAzIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE5NyAgLSBBSUYxIERBQzIgRVEgQmFuZCA0IEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTk4ICAtIEFJRjEgREFDMiBFUSBCYW5kIDQgQiAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExOTkgIC0gQUlGMSBEQUMyIEVRIEJhbmQgNCBDICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTIwMCAgLSBBSUYxIERBQzIgRVEgQmFuZCA0IFBHICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTIwMSAgLSBBSUYxIERBQzIgRVEgQmFuZCA1IEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMjAyICAtIEFJRjEgREFDMiBFUSBCYW5kIDUgQiAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjEyMDMgIC0gQUlGMSBEQUMyIEVRIEJhbmQgNSBQRyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjA1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIwNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjA4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIwOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjExICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjE0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjE3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjIwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjIzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjI2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjI5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjMyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjM1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjM4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjUwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjUzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjU2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjU5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjYyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjY1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjY4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjcxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjc0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjc3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzkgKi8KKwl7IDB4MDBGRiwgMHgwMUZGIH0sIC8qIFIxMjgwICAtIEFJRjIgQURDIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiB9LCAvKiBSMTI4MSAgLSBBSUYyIEFEQyBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGIH0sIC8qIFIxMjgyICAtIEFJRjIgREFDIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiB9LCAvKiBSMTI4MyAgLSBBSUYyIERBQyBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjg0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjg3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjkwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjkzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTUgKi8KKwl7IDB4RjgwMCwgMHhGODAwIH0sIC8qIFIxMjk2ICAtIEFJRjIgQURDIEZpbHRlcnMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjk3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMTEgKi8KKwl7IDB4MDJCNiwgMHgwMkI2IH0sIC8qIFIxMzEyICAtIEFJRjIgREFDIEZpbHRlcnMgKDEpICovCisJeyAweDNGMDAsIDB4M0YwMCB9LCAvKiBSMTMxMyAgLSBBSUYyIERBQyBGaWx0ZXJzICgyKSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM0MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM0MyAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjEzNDQgIC0gQUlGMiBEUkMgKDEpICovCisJeyAweDFGRkYsIDB4MUZGRiB9LCAvKiBSMTM0NSAgLSBBSUYyIERSQyAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMzQ2ICAtIEFJRjIgRFJDICgzKSAqLworCXsgMHgwN0ZGLCAweDA3RkYgfSwgLyogUjEzNDcgIC0gQUlGMiBEUkMgKDQpICovCisJeyAweDAzRkYsIDB4MDNGRiB9LCAvKiBSMTM0OCAgLSBBSUYyIERSQyAoNSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzUyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzU1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzU4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzYxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzY0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzY3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzcwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzczICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzc2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzc5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzgyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzg1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzg4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzkxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzk0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzk3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDAwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDAzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDA2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwNyAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MDggIC0gQUlGMiBFUSBHYWlucyAoMSkgKi8KKwl7IDB4RkZDMCwgMHhGRkMwIH0sIC8qIFIxNDA5ICAtIEFJRjIgRVEgR2FpbnMgKDIpICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTQxMCAgLSBBSUYyIEVRIEJhbmQgMSBBICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTQxMSAgLSBBSUYyIEVRIEJhbmQgMSBCICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTQxMiAgLSBBSUYyIEVRIEJhbmQgMSBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MTMgIC0gQUlGMiBFUSBCYW5kIDIgQSAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MTQgIC0gQUlGMiBFUSBCYW5kIDIgQiAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MTUgIC0gQUlGMiBFUSBCYW5kIDIgQyAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MTYgIC0gQUlGMiBFUSBCYW5kIDIgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxNDE3ICAtIEFJRjIgRVEgQmFuZCAzIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxNDE4ICAtIEFJRjIgRVEgQmFuZCAzIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxNDE5ICAtIEFJRjIgRVEgQmFuZCAzIEMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxNDIwICAtIEFJRjIgRVEgQmFuZCAzIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTQyMSAgLSBBSUYyIEVRIEJhbmQgNCBBICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTQyMiAgLSBBSUYyIEVRIEJhbmQgNCBCICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTQyMyAgLSBBSUYyIEVRIEJhbmQgNCBDICovCisJeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTQyNCAgLSBBSUYyIEVRIEJhbmQgNCBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MjUgIC0gQUlGMiBFUSBCYW5kIDUgQSAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MjYgIC0gQUlGMiBFUSBCYW5kIDUgQiAqLworCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MjcgIC0gQUlGMiBFUSBCYW5kIDUgUEcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDI4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQyOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDMxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDM0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDM3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDUyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDU1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDU4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDYxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDY0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDY3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDcwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3MSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDczICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3NCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDc2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDc5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDgyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDg1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDg4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4OSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDkxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5MiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDk0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5NSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDk3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5OCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTAwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTAzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTA2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwNyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTA5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxMCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTEyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxMyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTE1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxNiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTE4ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxOSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTIxICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyMiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTI0ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyNSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTI3ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyOCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTMwICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzMSAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTMzICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzNCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MzUgKi8KKwl7IDB4MDFFRiwgMHgwMUVGIH0sIC8qIFIxNTM2ICAtIERBQzEgTWl4ZXIgVm9sdW1lcyAqLworCXsgMHgwMDM3LCAweDAwMzcgfSwgLyogUjE1MzcgIC0gREFDMSBMZWZ0IE1peGVyIFJvdXRpbmcgKi8KKwl7IDB4MDAzNywgMHgwMDM3IH0sIC8qIFIxNTM4ICAtIERBQzEgUmlnaHQgTWl4ZXIgUm91dGluZyAqLworCXsgMHgwMUVGLCAweDAxRUYgfSwgLyogUjE1MzkgIC0gREFDMiBNaXhlciBWb2x1bWVzICovCisJeyAweDAwMzcsIDB4MDAzNyB9LCAvKiBSMTU0MCAgLSBEQUMyIExlZnQgTWl4ZXIgUm91dGluZyAqLworCXsgMHgwMDM3LCAweDAwMzcgfSwgLyogUjE1NDEgIC0gREFDMiBSaWdodCBNaXhlciBSb3V0aW5nICovCisJeyAweDAwMDMsIDB4MDAwMyB9LCAvKiBSMTU0MiAgLSBBSUYxIEFEQzEgTGVmdCBNaXhlciBSb3V0aW5nICovCisJeyAweDAwMDMsIDB4MDAwMyB9LCAvKiBSMTU0MyAgLSBBSUYxIEFEQzEgUmlnaHQgTWl4ZXIgUm91dGluZyAqLworCXsgMHgwMDAzLCAweDAwMDMgfSwgLyogUjE1NDQgIC0gQUlGMSBBREMyIExlZnQgTWl4ZXIgUm91dGluZyAqLworCXsgMHgwMDAzLCAweDAwMDMgfSwgLyogUjE1NDUgIC0gQUlGMSBBREMyIFJpZ2h0IG1peGVyIFJvdXRpbmcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU0NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU1MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NTEgKi8KKwl7IDB4MDJGRiwgMHgwM0ZGIH0sIC8qIFIxNTUyICAtIERBQzEgTGVmdCBWb2x1bWUgKi8KKwl7IDB4MDJGRiwgMHgwM0ZGIH0sIC8qIFIxNTUzICAtIERBQzEgUmlnaHQgVm9sdW1lICovCisJeyAweDAyRkYsIDB4MDNGRiB9LCAvKiBSMTU1NCAgLSBEQUMyIExlZnQgVm9sdW1lICovCisJeyAweDAyRkYsIDB4MDNGRiB9LCAvKiBSMTU1NSAgLSBEQUMyIFJpZ2h0IFZvbHVtZSAqLworCXsgMHgwMDAzLCAweDAwMDMgfSwgLyogUjE1NTYgIC0gREFDIFNvZnRtdXRlICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU1NyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTU5ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2MCAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTYyICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2MyAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTY1ICovCisJeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2NiAqLworCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjcgKi8KKwl7IDB4MDAwMywgMHgwMDAzIH0sIC8qIFIxNTY4ICAtIE92ZXJzYW1wbGluZyAqLworCXsgMHgwM0MzLCAweDAzQzMgfSwgLyogUjE1NjkgIC0gU2lkZXRvbmUgKi8KK307CisKK2NvbnN0IF9fZGV2aW5pdGRhdGEgdTE2IHdtODk5NF9yZWdfZGVmYXVsdHNbV004OTk0X0NBQ0hFX1NJWkVdID0geworCTB4ODk5NCwgICAgIC8qIFIwICAgICAtIFNvZnR3YXJlIFJlc2V0ICovCisJMHgwMDAwLCAgICAgLyogUjEgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkgKi8KKwkweDYwMDAsICAgICAvKiBSMiAgICAgLSBQb3dlciBNYW5hZ2VtZW50ICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFIzICAgICAtIFBvd2VyIE1hbmFnZW1lbnQgKDMpICovCisJMHgwMDAwLCAgICAgLyogUjQgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoNCkgKi8KKwkweDAwMDAsICAgICAvKiBSNSAgICAgLSBQb3dlciBNYW5hZ2VtZW50ICg1KSAqLworCTB4MDAwMCwgICAgIC8qIFI2ICAgICAtIFBvd2VyIE1hbmFnZW1lbnQgKDYpICovCisJMHgwMDAwLCAgICAgLyogUjcgKi8KKwkweDAwMDAsICAgICAvKiBSOCAqLworCTB4MDAwMCwgICAgIC8qIFI5ICovCisJMHgwMDAwLCAgICAgLyogUjEwICovCisJMHgwMDAwLCAgICAgLyogUjExICovCisJMHgwMDAwLCAgICAgLyogUjEyICovCisJMHgwMDAwLCAgICAgLyogUjEzICovCisJMHgwMDAwLCAgICAgLyogUjE0ICovCisJMHgwMDAwLCAgICAgLyogUjE1ICovCisJMHgwMDAwLCAgICAgLyogUjE2ICovCisJMHgwMDAwLCAgICAgLyogUjE3ICovCisJMHgwMDAwLCAgICAgLyogUjE4ICovCisJMHgwMDAwLCAgICAgLyogUjE5ICovCisJMHgwMDAwLCAgICAgLyogUjIwICovCisJMHgwMDAwLCAgICAgLyogUjIxICAgIC0gSW5wdXQgTWl4ZXIgKDEpICovCisJMHgwMDAwLCAgICAgLyogUjIyICovCisJMHgwMDAwLCAgICAgLyogUjIzICovCisJMHgwMDhCLCAgICAgLyogUjI0ICAgIC0gTGVmdCBMaW5lIElucHV0IDEmMiBWb2x1bWUgKi8KKwkweDAwOEIsICAgICAvKiBSMjUgICAgLSBMZWZ0IExpbmUgSW5wdXQgMyY0IFZvbHVtZSAqLworCTB4MDA4QiwgICAgIC8qIFIyNiAgICAtIFJpZ2h0IExpbmUgSW5wdXQgMSYyIFZvbHVtZSAqLworCTB4MDA4QiwgICAgIC8qIFIyNyAgICAtIFJpZ2h0IExpbmUgSW5wdXQgMyY0IFZvbHVtZSAqLworCTB4MDA2RCwgICAgIC8qIFIyOCAgICAtIExlZnQgT3V0cHV0IFZvbHVtZSAqLworCTB4MDA2RCwgICAgIC8qIFIyOSAgICAtIFJpZ2h0IE91dHB1dCBWb2x1bWUgKi8KKwkweDAwNjYsICAgICAvKiBSMzAgICAgLSBMaW5lIE91dHB1dHMgVm9sdW1lICovCisJMHgwMDIwLCAgICAgLyogUjMxICAgIC0gSFBPVVQyIFZvbHVtZSAqLworCTB4MDA3OSwgICAgIC8qIFIzMiAgICAtIExlZnQgT1BHQSBWb2x1bWUgKi8KKwkweDAwNzksICAgICAvKiBSMzMgICAgLSBSaWdodCBPUEdBIFZvbHVtZSAqLworCTB4MDAwMywgICAgIC8qIFIzNCAgICAtIFNQS01JWEwgQXR0ZW51YXRpb24gKi8KKwkweDAwMDMsICAgICAvKiBSMzUgICAgLSBTUEtNSVhSIEF0dGVudWF0aW9uICovCisJMHgwMDExLCAgICAgLyogUjM2ICAgIC0gU1BLT1VUIE1peGVycyAqLworCTB4MDE0MCwgICAgIC8qIFIzNyAgICAtIENsYXNzRCAqLworCTB4MDA3OSwgICAgIC8qIFIzOCAgICAtIFNwZWFrZXIgVm9sdW1lIExlZnQgKi8KKwkweDAwNzksICAgICAvKiBSMzkgICAgLSBTcGVha2VyIFZvbHVtZSBSaWdodCAqLworCTB4MDAwMCwgICAgIC8qIFI0MCAgICAtIElucHV0IE1peGVyICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFI0MSAgICAtIElucHV0IE1peGVyICgzKSAqLworCTB4MDAwMCwgICAgIC8qIFI0MiAgICAtIElucHV0IE1peGVyICg0KSAqLworCTB4MDAwMCwgICAgIC8qIFI0MyAgICAtIElucHV0IE1peGVyICg1KSAqLworCTB4MDAwMCwgICAgIC8qIFI0NCAgICAtIElucHV0IE1peGVyICg2KSAqLworCTB4MDAwMCwgICAgIC8qIFI0NSAgICAtIE91dHB1dCBNaXhlciAoMSkgKi8KKwkweDAwMDAsICAgICAvKiBSNDYgICAgLSBPdXRwdXQgTWl4ZXIgKDIpICovCisJMHgwMDAwLCAgICAgLyogUjQ3ICAgIC0gT3V0cHV0IE1peGVyICgzKSAqLworCTB4MDAwMCwgICAgIC8qIFI0OCAgICAtIE91dHB1dCBNaXhlciAoNCkgKi8KKwkweDAwMDAsICAgICAvKiBSNDkgICAgLSBPdXRwdXQgTWl4ZXIgKDUpICovCisJMHgwMDAwLCAgICAgLyogUjUwICAgIC0gT3V0cHV0IE1peGVyICg2KSAqLworCTB4MDAwMCwgICAgIC8qIFI1MSAgICAtIEhQT1VUMiBNaXhlciAqLworCTB4MDAwMCwgICAgIC8qIFI1MiAgICAtIExpbmUgTWl4ZXIgKDEpICovCisJMHgwMDAwLCAgICAgLyogUjUzICAgIC0gTGluZSBNaXhlciAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSNTQgICAgLSBTcGVha2VyIE1peGVyICovCisJMHgwMDAwLCAgICAgLyogUjU1ICAgIC0gQWRkaXRpb25hbCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjU2ICAgIC0gQW50aVBPUCAoMSkgKi8KKwkweDAwMDAsICAgICAvKiBSNTcgICAgLSBBbnRpUE9QICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFI1OCAgICAtIE1JQ0JJQVMgKi8KKwkweDAwMEQsICAgICAvKiBSNTkgICAgLSBMRE8gMSAqLworCTB4MDAwMywgICAgIC8qIFI2MCAgICAtIExETyAyICovCisJMHgwMDAwLCAgICAgLyogUjYxICovCisJMHgwMDAwLCAgICAgLyogUjYyICovCisJMHgwMDAwLCAgICAgLyogUjYzICovCisJMHgwMDAwLCAgICAgLyogUjY0ICovCisJMHgwMDAwLCAgICAgLyogUjY1ICovCisJMHgwMDAwLCAgICAgLyogUjY2ICovCisJMHgwMDAwLCAgICAgLyogUjY3ICovCisJMHgwMDAwLCAgICAgLyogUjY4ICovCisJMHgwMDAwLCAgICAgLyogUjY5ICovCisJMHgwMDAwLCAgICAgLyogUjcwICovCisJMHgwMDAwLCAgICAgLyogUjcxICovCisJMHgwMDAwLCAgICAgLyogUjcyICovCisJMHgwMDAwLCAgICAgLyogUjczICovCisJMHgwMDAwLCAgICAgLyogUjc0ICovCisJMHgwMDAwLCAgICAgLyogUjc1ICovCisJMHgxRjI1LCAgICAgLyogUjc2ICAgIC0gQ2hhcmdlIFB1bXAgKDEpICovCisJMHgwMDAwLCAgICAgLyogUjc3ICovCisJMHgwMDAwLCAgICAgLyogUjc4ICovCisJMHgwMDAwLCAgICAgLyogUjc5ICovCisJMHgwMDAwLCAgICAgLyogUjgwICovCisJMHgwMDA0LCAgICAgLyogUjgxICAgIC0gQ2xhc3MgVyAoMSkgKi8KKwkweDAwMDAsICAgICAvKiBSODIgKi8KKwkweDAwMDAsICAgICAvKiBSODMgKi8KKwkweDAwMDAsICAgICAvKiBSODQgICAgLSBEQyBTZXJ2byAoMSkgKi8KKwkweDA1NEEsICAgICAvKiBSODUgICAgLSBEQyBTZXJ2byAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSODYgKi8KKwkweDAwMDAsICAgICAvKiBSODcgICAgLSBEQyBTZXJ2byAoNCkgKi8KKwkweDAwMDAsICAgICAvKiBSODggICAgLSBEQyBTZXJ2byBSZWFkYmFjayAqLworCTB4MDAwMCwgICAgIC8qIFI4OSAqLworCTB4MDAwMCwgICAgIC8qIFI5MCAqLworCTB4MDAwMCwgICAgIC8qIFI5MSAqLworCTB4MDAwMCwgICAgIC8qIFI5MiAqLworCTB4MDAwMCwgICAgIC8qIFI5MyAqLworCTB4MDAwMCwgICAgIC8qIFI5NCAqLworCTB4MDAwMCwgICAgIC8qIFI5NSAqLworCTB4MDAwMCwgICAgIC8qIFI5NiAgICAtIEFuYWxvZ3VlIEhQICgxKSAqLworCTB4MDAwMCwgICAgIC8qIFI5NyAqLworCTB4MDAwMCwgICAgIC8qIFI5OCAqLworCTB4MDAwMCwgICAgIC8qIFI5OSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDAgKi8KKwkweDAwMDAsICAgICAvKiBSMTAxICovCisJMHgwMDAwLCAgICAgLyogUjEwMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDMgKi8KKwkweDAwMDAsICAgICAvKiBSMTA0ICovCisJMHgwMDAwLCAgICAgLyogUjEwNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDYgKi8KKwkweDAwMDAsICAgICAvKiBSMTA3ICovCisJMHgwMDAwLCAgICAgLyogUjEwOCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDkgKi8KKwkweDAwMDAsICAgICAvKiBSMTEwICovCisJMHgwMDAwLCAgICAgLyogUjExMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTIgKi8KKwkweDAwMDAsICAgICAvKiBSMTEzICovCisJMHgwMDAwLCAgICAgLyogUjExNCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTUgKi8KKwkweDAwMDAsICAgICAvKiBSMTE2ICovCisJMHgwMDAwLCAgICAgLyogUjExNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMTggKi8KKwkweDAwMDAsICAgICAvKiBSMTE5ICovCisJMHgwMDAwLCAgICAgLyogUjEyMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjEgKi8KKwkweDAwMDAsICAgICAvKiBSMTIyICovCisJMHgwMDAwLCAgICAgLyogUjEyMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMjQgKi8KKwkweDAwMDAsICAgICAvKiBSMTI1ICovCisJMHgwMDAwLCAgICAgLyogUjEyNiAqLworCTB4MDAwMCwgICAgIC8qIFIxMjcgKi8KKwkweDAwMDAsICAgICAvKiBSMTI4ICovCisJMHgwMDAwLCAgICAgLyogUjEyOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzAgKi8KKwkweDAwMDAsICAgICAvKiBSMTMxICovCisJMHgwMDAwLCAgICAgLyogUjEzMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMzMgKi8KKwkweDAwMDAsICAgICAvKiBSMTM0ICovCisJMHgwMDAwLCAgICAgLyogUjEzNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzYgKi8KKwkweDAwMDAsICAgICAvKiBSMTM3ICovCisJMHgwMDAwLCAgICAgLyogUjEzOCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzkgKi8KKwkweDAwMDAsICAgICAvKiBSMTQwICovCisJMHgwMDAwLCAgICAgLyogUjE0MSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTQzICovCisJMHgwMDAwLCAgICAgLyogUjE0NCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDUgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ2ICovCisJMHgwMDAwLCAgICAgLyogUjE0NyAqLworCTB4MDAwMCwgICAgIC8qIFIxNDggKi8KKwkweDAwMDAsICAgICAvKiBSMTQ5ICovCisJMHgwMDAwLCAgICAgLyogUjE1MCAqLworCTB4MDAwMCwgICAgIC8qIFIxNTEgKi8KKwkweDAwMDAsICAgICAvKiBSMTUyICovCisJMHgwMDAwLCAgICAgLyogUjE1MyAqLworCTB4MDAwMCwgICAgIC8qIFIxNTQgKi8KKwkweDAwMDAsICAgICAvKiBSMTU1ICovCisJMHgwMDAwLCAgICAgLyogUjE1NiAqLworCTB4MDAwMCwgICAgIC8qIFIxNTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTU4ICovCisJMHgwMDAwLCAgICAgLyogUjE1OSAqLworCTB4MDAwMCwgICAgIC8qIFIxNjAgKi8KKwkweDAwMDAsICAgICAvKiBSMTYxICovCisJMHgwMDAwLCAgICAgLyogUjE2MiAqLworCTB4MDAwMCwgICAgIC8qIFIxNjMgKi8KKwkweDAwMDAsICAgICAvKiBSMTY0ICovCisJMHgwMDAwLCAgICAgLyogUjE2NSAqLworCTB4MDAwMCwgICAgIC8qIFIxNjYgKi8KKwkweDAwMDAsICAgICAvKiBSMTY3ICovCisJMHgwMDAwLCAgICAgLyogUjE2OCAqLworCTB4MDAwMCwgICAgIC8qIFIxNjkgKi8KKwkweDAwMDAsICAgICAvKiBSMTcwICovCisJMHgwMDAwLCAgICAgLyogUjE3MSAqLworCTB4MDAwMCwgICAgIC8qIFIxNzIgKi8KKwkweDAwMDAsICAgICAvKiBSMTczICovCisJMHgwMDAwLCAgICAgLyogUjE3NCAqLworCTB4MDAwMCwgICAgIC8qIFIxNzUgKi8KKwkweDAwMDAsICAgICAvKiBSMTc2ICovCisJMHgwMDAwLCAgICAgLyogUjE3NyAqLworCTB4MDAwMCwgICAgIC8qIFIxNzggKi8KKwkweDAwMDAsICAgICAvKiBSMTc5ICovCisJMHgwMDAwLCAgICAgLyogUjE4MCAqLworCTB4MDAwMCwgICAgIC8qIFIxODEgKi8KKwkweDAwMDAsICAgICAvKiBSMTgyICovCisJMHgwMDAwLCAgICAgLyogUjE4MyAqLworCTB4MDAwMCwgICAgIC8qIFIxODQgKi8KKwkweDAwMDAsICAgICAvKiBSMTg1ICovCisJMHgwMDAwLCAgICAgLyogUjE4NiAqLworCTB4MDAwMCwgICAgIC8qIFIxODcgKi8KKwkweDAwMDAsICAgICAvKiBSMTg4ICovCisJMHgwMDAwLCAgICAgLyogUjE4OSAqLworCTB4MDAwMCwgICAgIC8qIFIxOTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTkxICovCisJMHgwMDAwLCAgICAgLyogUjE5MiAqLworCTB4MDAwMCwgICAgIC8qIFIxOTMgKi8KKwkweDAwMDAsICAgICAvKiBSMTk0ICovCisJMHgwMDAwLCAgICAgLyogUjE5NSAqLworCTB4MDAwMCwgICAgIC8qIFIxOTYgKi8KKwkweDAwMDAsICAgICAvKiBSMTk3ICovCisJMHgwMDAwLCAgICAgLyogUjE5OCAqLworCTB4MDAwMCwgICAgIC8qIFIxOTkgKi8KKwkweDAwMDAsICAgICAvKiBSMjAwICovCisJMHgwMDAwLCAgICAgLyogUjIwMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMDIgKi8KKwkweDAwMDAsICAgICAvKiBSMjAzICovCisJMHgwMDAwLCAgICAgLyogUjIwNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMDUgKi8KKwkweDAwMDAsICAgICAvKiBSMjA2ICovCisJMHgwMDAwLCAgICAgLyogUjIwNyAqLworCTB4MDAwMCwgICAgIC8qIFIyMDggKi8KKwkweDAwMDAsICAgICAvKiBSMjA5ICovCisJMHgwMDAwLCAgICAgLyogUjIxMCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTEgKi8KKwkweDAwMDAsICAgICAvKiBSMjEyICovCisJMHgwMDAwLCAgICAgLyogUjIxMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMTQgKi8KKwkweDAwMDAsICAgICAvKiBSMjE1ICovCisJMHgwMDAwLCAgICAgLyogUjIxNiAqLworCTB4MDAwMCwgICAgIC8qIFIyMTcgKi8KKwkweDAwMDAsICAgICAvKiBSMjE4ICovCisJMHgwMDAwLCAgICAgLyogUjIxOSAqLworCTB4MDAwMCwgICAgIC8qIFIyMjAgKi8KKwkweDAwMDAsICAgICAvKiBSMjIxICovCisJMHgwMDAwLCAgICAgLyogUjIyMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMjMgKi8KKwkweDAwMDAsICAgICAvKiBSMjI0ICovCisJMHgwMDAwLCAgICAgLyogUjIyNSAqLworCTB4MDAwMCwgICAgIC8qIFIyMjYgKi8KKwkweDAwMDAsICAgICAvKiBSMjI3ICovCisJMHgwMDAwLCAgICAgLyogUjIyOCAqLworCTB4MDAwMCwgICAgIC8qIFIyMjkgKi8KKwkweDAwMDAsICAgICAvKiBSMjMwICovCisJMHgwMDAwLCAgICAgLyogUjIzMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMzIgKi8KKwkweDAwMDAsICAgICAvKiBSMjMzICovCisJMHgwMDAwLCAgICAgLyogUjIzNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMzUgKi8KKwkweDAwMDAsICAgICAvKiBSMjM2ICovCisJMHgwMDAwLCAgICAgLyogUjIzNyAqLworCTB4MDAwMCwgICAgIC8qIFIyMzggKi8KKwkweDAwMDAsICAgICAvKiBSMjM5ICovCisJMHgwMDAwLCAgICAgLyogUjI0MCAqLworCTB4MDAwMCwgICAgIC8qIFIyNDEgKi8KKwkweDAwMDAsICAgICAvKiBSMjQyICovCisJMHgwMDAwLCAgICAgLyogUjI0MyAqLworCTB4MDAwMCwgICAgIC8qIFIyNDQgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ1ICovCisJMHgwMDAwLCAgICAgLyogUjI0NiAqLworCTB4MDAwMCwgICAgIC8qIFIyNDcgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ4ICovCisJMHgwMDAwLCAgICAgLyogUjI0OSAqLworCTB4MDAwMCwgICAgIC8qIFIyNTAgKi8KKwkweDAwMDAsICAgICAvKiBSMjUxICovCisJMHgwMDAwLCAgICAgLyogUjI1MiAqLworCTB4MDAwMCwgICAgIC8qIFIyNTMgKi8KKwkweDAwMDAsICAgICAvKiBSMjU0ICovCisJMHgwMDAwLCAgICAgLyogUjI1NSAqLworCTB4MDAwMywgICAgIC8qIFIyNTYgICAtIENoaXAgUmV2aXNpb24gKi8KKwkweDgwMDQsICAgICAvKiBSMjU3ICAgLSBDb250cm9sIEludGVyZmFjZSAqLworCTB4MDAwMCwgICAgIC8qIFIyNTggKi8KKwkweDAwMDAsICAgICAvKiBSMjU5ICovCisJMHgwMDAwLCAgICAgLyogUjI2MCAqLworCTB4MDAwMCwgICAgIC8qIFIyNjEgKi8KKwkweDAwMDAsICAgICAvKiBSMjYyICovCisJMHgwMDAwLCAgICAgLyogUjI2MyAqLworCTB4MDAwMCwgICAgIC8qIFIyNjQgKi8KKwkweDAwMDAsICAgICAvKiBSMjY1ICovCisJMHgwMDAwLCAgICAgLyogUjI2NiAqLworCTB4MDAwMCwgICAgIC8qIFIyNjcgKi8KKwkweDAwMDAsICAgICAvKiBSMjY4ICovCisJMHgwMDAwLCAgICAgLyogUjI2OSAqLworCTB4MDAwMCwgICAgIC8qIFIyNzAgKi8KKwkweDAwMDAsICAgICAvKiBSMjcxICovCisJMHgwMDAwLCAgICAgLyogUjI3MiAgIC0gV3JpdGUgU2VxdWVuY2VyIEN0cmwgKDEpICovCisJMHgwMDAwLCAgICAgLyogUjI3MyAgIC0gV3JpdGUgU2VxdWVuY2VyIEN0cmwgKDIpICovCisJMHgwMDAwLCAgICAgLyogUjI3NCAqLworCTB4MDAwMCwgICAgIC8qIFIyNzUgKi8KKwkweDAwMDAsICAgICAvKiBSMjc2ICovCisJMHgwMDAwLCAgICAgLyogUjI3NyAqLworCTB4MDAwMCwgICAgIC8qIFIyNzggKi8KKwkweDAwMDAsICAgICAvKiBSMjc5ICovCisJMHgwMDAwLCAgICAgLyogUjI4MCAqLworCTB4MDAwMCwgICAgIC8qIFIyODEgKi8KKwkweDAwMDAsICAgICAvKiBSMjgyICovCisJMHgwMDAwLCAgICAgLyogUjI4MyAqLworCTB4MDAwMCwgICAgIC8qIFIyODQgKi8KKwkweDAwMDAsICAgICAvKiBSMjg1ICovCisJMHgwMDAwLCAgICAgLyogUjI4NiAqLworCTB4MDAwMCwgICAgIC8qIFIyODcgKi8KKwkweDAwMDAsICAgICAvKiBSMjg4ICovCisJMHgwMDAwLCAgICAgLyogUjI4OSAqLworCTB4MDAwMCwgICAgIC8qIFIyOTAgKi8KKwkweDAwMDAsICAgICAvKiBSMjkxICovCisJMHgwMDAwLCAgICAgLyogUjI5MiAqLworCTB4MDAwMCwgICAgIC8qIFIyOTMgKi8KKwkweDAwMDAsICAgICAvKiBSMjk0ICovCisJMHgwMDAwLCAgICAgLyogUjI5NSAqLworCTB4MDAwMCwgICAgIC8qIFIyOTYgKi8KKwkweDAwMDAsICAgICAvKiBSMjk3ICovCisJMHgwMDAwLCAgICAgLyogUjI5OCAqLworCTB4MDAwMCwgICAgIC8qIFIyOTkgKi8KKwkweDAwMDAsICAgICAvKiBSMzAwICovCisJMHgwMDAwLCAgICAgLyogUjMwMSAqLworCTB4MDAwMCwgICAgIC8qIFIzMDIgKi8KKwkweDAwMDAsICAgICAvKiBSMzAzICovCisJMHgwMDAwLCAgICAgLyogUjMwNCAqLworCTB4MDAwMCwgICAgIC8qIFIzMDUgKi8KKwkweDAwMDAsICAgICAvKiBSMzA2ICovCisJMHgwMDAwLCAgICAgLyogUjMwNyAqLworCTB4MDAwMCwgICAgIC8qIFIzMDggKi8KKwkweDAwMDAsICAgICAvKiBSMzA5ICovCisJMHgwMDAwLCAgICAgLyogUjMxMCAqLworCTB4MDAwMCwgICAgIC8qIFIzMTEgKi8KKwkweDAwMDAsICAgICAvKiBSMzEyICovCisJMHgwMDAwLCAgICAgLyogUjMxMyAqLworCTB4MDAwMCwgICAgIC8qIFIzMTQgKi8KKwkweDAwMDAsICAgICAvKiBSMzE1ICovCisJMHgwMDAwLCAgICAgLyogUjMxNiAqLworCTB4MDAwMCwgICAgIC8qIFIzMTcgKi8KKwkweDAwMDAsICAgICAvKiBSMzE4ICovCisJMHgwMDAwLCAgICAgLyogUjMxOSAqLworCTB4MDAwMCwgICAgIC8qIFIzMjAgKi8KKwkweDAwMDAsICAgICAvKiBSMzIxICovCisJMHgwMDAwLCAgICAgLyogUjMyMiAqLworCTB4MDAwMCwgICAgIC8qIFIzMjMgKi8KKwkweDAwMDAsICAgICAvKiBSMzI0ICovCisJMHgwMDAwLCAgICAgLyogUjMyNSAqLworCTB4MDAwMCwgICAgIC8qIFIzMjYgKi8KKwkweDAwMDAsICAgICAvKiBSMzI3ICovCisJMHgwMDAwLCAgICAgLyogUjMyOCAqLworCTB4MDAwMCwgICAgIC8qIFIzMjkgKi8KKwkweDAwMDAsICAgICAvKiBSMzMwICovCisJMHgwMDAwLCAgICAgLyogUjMzMSAqLworCTB4MDAwMCwgICAgIC8qIFIzMzIgKi8KKwkweDAwMDAsICAgICAvKiBSMzMzICovCisJMHgwMDAwLCAgICAgLyogUjMzNCAqLworCTB4MDAwMCwgICAgIC8qIFIzMzUgKi8KKwkweDAwMDAsICAgICAvKiBSMzM2ICovCisJMHgwMDAwLCAgICAgLyogUjMzNyAqLworCTB4MDAwMCwgICAgIC8qIFIzMzggKi8KKwkweDAwMDAsICAgICAvKiBSMzM5ICovCisJMHgwMDAwLCAgICAgLyogUjM0MCAqLworCTB4MDAwMCwgICAgIC8qIFIzNDEgKi8KKwkweDAwMDAsICAgICAvKiBSMzQyICovCisJMHgwMDAwLCAgICAgLyogUjM0MyAqLworCTB4MDAwMCwgICAgIC8qIFIzNDQgKi8KKwkweDAwMDAsICAgICAvKiBSMzQ1ICovCisJMHgwMDAwLCAgICAgLyogUjM0NiAqLworCTB4MDAwMCwgICAgIC8qIFIzNDcgKi8KKwkweDAwMDAsICAgICAvKiBSMzQ4ICovCisJMHgwMDAwLCAgICAgLyogUjM0OSAqLworCTB4MDAwMCwgICAgIC8qIFIzNTAgKi8KKwkweDAwMDAsICAgICAvKiBSMzUxICovCisJMHgwMDAwLCAgICAgLyogUjM1MiAqLworCTB4MDAwMCwgICAgIC8qIFIzNTMgKi8KKwkweDAwMDAsICAgICAvKiBSMzU0ICovCisJMHgwMDAwLCAgICAgLyogUjM1NSAqLworCTB4MDAwMCwgICAgIC8qIFIzNTYgKi8KKwkweDAwMDAsICAgICAvKiBSMzU3ICovCisJMHgwMDAwLCAgICAgLyogUjM1OCAqLworCTB4MDAwMCwgICAgIC8qIFIzNTkgKi8KKwkweDAwMDAsICAgICAvKiBSMzYwICovCisJMHgwMDAwLCAgICAgLyogUjM2MSAqLworCTB4MDAwMCwgICAgIC8qIFIzNjIgKi8KKwkweDAwMDAsICAgICAvKiBSMzYzICovCisJMHgwMDAwLCAgICAgLyogUjM2NCAqLworCTB4MDAwMCwgICAgIC8qIFIzNjUgKi8KKwkweDAwMDAsICAgICAvKiBSMzY2ICovCisJMHgwMDAwLCAgICAgLyogUjM2NyAqLworCTB4MDAwMCwgICAgIC8qIFIzNjggKi8KKwkweDAwMDAsICAgICAvKiBSMzY5ICovCisJMHgwMDAwLCAgICAgLyogUjM3MCAqLworCTB4MDAwMCwgICAgIC8qIFIzNzEgKi8KKwkweDAwMDAsICAgICAvKiBSMzcyICovCisJMHgwMDAwLCAgICAgLyogUjM3MyAqLworCTB4MDAwMCwgICAgIC8qIFIzNzQgKi8KKwkweDAwMDAsICAgICAvKiBSMzc1ICovCisJMHgwMDAwLCAgICAgLyogUjM3NiAqLworCTB4MDAwMCwgICAgIC8qIFIzNzcgKi8KKwkweDAwMDAsICAgICAvKiBSMzc4ICovCisJMHgwMDAwLCAgICAgLyogUjM3OSAqLworCTB4MDAwMCwgICAgIC8qIFIzODAgKi8KKwkweDAwMDAsICAgICAvKiBSMzgxICovCisJMHgwMDAwLCAgICAgLyogUjM4MiAqLworCTB4MDAwMCwgICAgIC8qIFIzODMgKi8KKwkweDAwMDAsICAgICAvKiBSMzg0ICovCisJMHgwMDAwLCAgICAgLyogUjM4NSAqLworCTB4MDAwMCwgICAgIC8qIFIzODYgKi8KKwkweDAwMDAsICAgICAvKiBSMzg3ICovCisJMHgwMDAwLCAgICAgLyogUjM4OCAqLworCTB4MDAwMCwgICAgIC8qIFIzODkgKi8KKwkweDAwMDAsICAgICAvKiBSMzkwICovCisJMHgwMDAwLCAgICAgLyogUjM5MSAqLworCTB4MDAwMCwgICAgIC8qIFIzOTIgKi8KKwkweDAwMDAsICAgICAvKiBSMzkzICovCisJMHgwMDAwLCAgICAgLyogUjM5NCAqLworCTB4MDAwMCwgICAgIC8qIFIzOTUgKi8KKwkweDAwMDAsICAgICAvKiBSMzk2ICovCisJMHgwMDAwLCAgICAgLyogUjM5NyAqLworCTB4MDAwMCwgICAgIC8qIFIzOTggKi8KKwkweDAwMDAsICAgICAvKiBSMzk5ICovCisJMHgwMDAwLCAgICAgLyogUjQwMCAqLworCTB4MDAwMCwgICAgIC8qIFI0MDEgKi8KKwkweDAwMDAsICAgICAvKiBSNDAyICovCisJMHgwMDAwLCAgICAgLyogUjQwMyAqLworCTB4MDAwMCwgICAgIC8qIFI0MDQgKi8KKwkweDAwMDAsICAgICAvKiBSNDA1ICovCisJMHgwMDAwLCAgICAgLyogUjQwNiAqLworCTB4MDAwMCwgICAgIC8qIFI0MDcgKi8KKwkweDAwMDAsICAgICAvKiBSNDA4ICovCisJMHgwMDAwLCAgICAgLyogUjQwOSAqLworCTB4MDAwMCwgICAgIC8qIFI0MTAgKi8KKwkweDAwMDAsICAgICAvKiBSNDExICovCisJMHgwMDAwLCAgICAgLyogUjQxMiAqLworCTB4MDAwMCwgICAgIC8qIFI0MTMgKi8KKwkweDAwMDAsICAgICAvKiBSNDE0ICovCisJMHgwMDAwLCAgICAgLyogUjQxNSAqLworCTB4MDAwMCwgICAgIC8qIFI0MTYgKi8KKwkweDAwMDAsICAgICAvKiBSNDE3ICovCisJMHgwMDAwLCAgICAgLyogUjQxOCAqLworCTB4MDAwMCwgICAgIC8qIFI0MTkgKi8KKwkweDAwMDAsICAgICAvKiBSNDIwICovCisJMHgwMDAwLCAgICAgLyogUjQyMSAqLworCTB4MDAwMCwgICAgIC8qIFI0MjIgKi8KKwkweDAwMDAsICAgICAvKiBSNDIzICovCisJMHgwMDAwLCAgICAgLyogUjQyNCAqLworCTB4MDAwMCwgICAgIC8qIFI0MjUgKi8KKwkweDAwMDAsICAgICAvKiBSNDI2ICovCisJMHgwMDAwLCAgICAgLyogUjQyNyAqLworCTB4MDAwMCwgICAgIC8qIFI0MjggKi8KKwkweDAwMDAsICAgICAvKiBSNDI5ICovCisJMHgwMDAwLCAgICAgLyogUjQzMCAqLworCTB4MDAwMCwgICAgIC8qIFI0MzEgKi8KKwkweDAwMDAsICAgICAvKiBSNDMyICovCisJMHgwMDAwLCAgICAgLyogUjQzMyAqLworCTB4MDAwMCwgICAgIC8qIFI0MzQgKi8KKwkweDAwMDAsICAgICAvKiBSNDM1ICovCisJMHgwMDAwLCAgICAgLyogUjQzNiAqLworCTB4MDAwMCwgICAgIC8qIFI0MzcgKi8KKwkweDAwMDAsICAgICAvKiBSNDM4ICovCisJMHgwMDAwLCAgICAgLyogUjQzOSAqLworCTB4MDAwMCwgICAgIC8qIFI0NDAgKi8KKwkweDAwMDAsICAgICAvKiBSNDQxICovCisJMHgwMDAwLCAgICAgLyogUjQ0MiAqLworCTB4MDAwMCwgICAgIC8qIFI0NDMgKi8KKwkweDAwMDAsICAgICAvKiBSNDQ0ICovCisJMHgwMDAwLCAgICAgLyogUjQ0NSAqLworCTB4MDAwMCwgICAgIC8qIFI0NDYgKi8KKwkweDAwMDAsICAgICAvKiBSNDQ3ICovCisJMHgwMDAwLCAgICAgLyogUjQ0OCAqLworCTB4MDAwMCwgICAgIC8qIFI0NDkgKi8KKwkweDAwMDAsICAgICAvKiBSNDUwICovCisJMHgwMDAwLCAgICAgLyogUjQ1MSAqLworCTB4MDAwMCwgICAgIC8qIFI0NTIgKi8KKwkweDAwMDAsICAgICAvKiBSNDUzICovCisJMHgwMDAwLCAgICAgLyogUjQ1NCAqLworCTB4MDAwMCwgICAgIC8qIFI0NTUgKi8KKwkweDAwMDAsICAgICAvKiBSNDU2ICovCisJMHgwMDAwLCAgICAgLyogUjQ1NyAqLworCTB4MDAwMCwgICAgIC8qIFI0NTggKi8KKwkweDAwMDAsICAgICAvKiBSNDU5ICovCisJMHgwMDAwLCAgICAgLyogUjQ2MCAqLworCTB4MDAwMCwgICAgIC8qIFI0NjEgKi8KKwkweDAwMDAsICAgICAvKiBSNDYyICovCisJMHgwMDAwLCAgICAgLyogUjQ2MyAqLworCTB4MDAwMCwgICAgIC8qIFI0NjQgKi8KKwkweDAwMDAsICAgICAvKiBSNDY1ICovCisJMHgwMDAwLCAgICAgLyogUjQ2NiAqLworCTB4MDAwMCwgICAgIC8qIFI0NjcgKi8KKwkweDAwMDAsICAgICAvKiBSNDY4ICovCisJMHgwMDAwLCAgICAgLyogUjQ2OSAqLworCTB4MDAwMCwgICAgIC8qIFI0NzAgKi8KKwkweDAwMDAsICAgICAvKiBSNDcxICovCisJMHgwMDAwLCAgICAgLyogUjQ3MiAqLworCTB4MDAwMCwgICAgIC8qIFI0NzMgKi8KKwkweDAwMDAsICAgICAvKiBSNDc0ICovCisJMHgwMDAwLCAgICAgLyogUjQ3NSAqLworCTB4MDAwMCwgICAgIC8qIFI0NzYgKi8KKwkweDAwMDAsICAgICAvKiBSNDc3ICovCisJMHgwMDAwLCAgICAgLyogUjQ3OCAqLworCTB4MDAwMCwgICAgIC8qIFI0NzkgKi8KKwkweDAwMDAsICAgICAvKiBSNDgwICovCisJMHgwMDAwLCAgICAgLyogUjQ4MSAqLworCTB4MDAwMCwgICAgIC8qIFI0ODIgKi8KKwkweDAwMDAsICAgICAvKiBSNDgzICovCisJMHgwMDAwLCAgICAgLyogUjQ4NCAqLworCTB4MDAwMCwgICAgIC8qIFI0ODUgKi8KKwkweDAwMDAsICAgICAvKiBSNDg2ICovCisJMHgwMDAwLCAgICAgLyogUjQ4NyAqLworCTB4MDAwMCwgICAgIC8qIFI0ODggKi8KKwkweDAwMDAsICAgICAvKiBSNDg5ICovCisJMHgwMDAwLCAgICAgLyogUjQ5MCAqLworCTB4MDAwMCwgICAgIC8qIFI0OTEgKi8KKwkweDAwMDAsICAgICAvKiBSNDkyICovCisJMHgwMDAwLCAgICAgLyogUjQ5MyAqLworCTB4MDAwMCwgICAgIC8qIFI0OTQgKi8KKwkweDAwMDAsICAgICAvKiBSNDk1ICovCisJMHgwMDAwLCAgICAgLyogUjQ5NiAqLworCTB4MDAwMCwgICAgIC8qIFI0OTcgKi8KKwkweDAwMDAsICAgICAvKiBSNDk4ICovCisJMHgwMDAwLCAgICAgLyogUjQ5OSAqLworCTB4MDAwMCwgICAgIC8qIFI1MDAgKi8KKwkweDAwMDAsICAgICAvKiBSNTAxICovCisJMHgwMDAwLCAgICAgLyogUjUwMiAqLworCTB4MDAwMCwgICAgIC8qIFI1MDMgKi8KKwkweDAwMDAsICAgICAvKiBSNTA0ICovCisJMHgwMDAwLCAgICAgLyogUjUwNSAqLworCTB4MDAwMCwgICAgIC8qIFI1MDYgKi8KKwkweDAwMDAsICAgICAvKiBSNTA3ICovCisJMHgwMDAwLCAgICAgLyogUjUwOCAqLworCTB4MDAwMCwgICAgIC8qIFI1MDkgKi8KKwkweDAwMDAsICAgICAvKiBSNTEwICovCisJMHgwMDAwLCAgICAgLyogUjUxMSAqLworCTB4MDAwMCwgICAgIC8qIFI1MTIgICAtIEFJRjEgQ2xvY2tpbmcgKDEpICovCisJMHgwMDAwLCAgICAgLyogUjUxMyAgIC0gQUlGMSBDbG9ja2luZyAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSNTE0ICovCisJMHgwMDAwLCAgICAgLyogUjUxNSAqLworCTB4MDAwMCwgICAgIC8qIFI1MTYgICAtIEFJRjIgQ2xvY2tpbmcgKDEpICovCisJMHgwMDAwLCAgICAgLyogUjUxNyAgIC0gQUlGMiBDbG9ja2luZyAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSNTE4ICovCisJMHgwMDAwLCAgICAgLyogUjUxOSAqLworCTB4MDAwMCwgICAgIC8qIFI1MjAgICAtIENsb2NraW5nICgxKSAqLworCTB4MDAwMCwgICAgIC8qIFI1MjEgICAtIENsb2NraW5nICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFI1MjIgKi8KKwkweDAwMDAsICAgICAvKiBSNTIzICovCisJMHgwMDAwLCAgICAgLyogUjUyNCAqLworCTB4MDAwMCwgICAgIC8qIFI1MjUgKi8KKwkweDAwMDAsICAgICAvKiBSNTI2ICovCisJMHgwMDAwLCAgICAgLyogUjUyNyAqLworCTB4MDA4MywgICAgIC8qIFI1MjggICAtIEFJRjEgUmF0ZSAqLworCTB4MDA4MywgICAgIC8qIFI1MjkgICAtIEFJRjIgUmF0ZSAqLworCTB4MDAwMCwgICAgIC8qIFI1MzAgICAtIFJhdGUgU3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjUzMSAqLworCTB4MDAwMCwgICAgIC8qIFI1MzIgKi8KKwkweDAwMDAsICAgICAvKiBSNTMzICovCisJMHgwMDAwLCAgICAgLyogUjUzNCAqLworCTB4MDAwMCwgICAgIC8qIFI1MzUgKi8KKwkweDAwMDAsICAgICAvKiBSNTM2ICovCisJMHgwMDAwLCAgICAgLyogUjUzNyAqLworCTB4MDAwMCwgICAgIC8qIFI1MzggKi8KKwkweDAwMDAsICAgICAvKiBSNTM5ICovCisJMHgwMDAwLCAgICAgLyogUjU0MCAqLworCTB4MDAwMCwgICAgIC8qIFI1NDEgKi8KKwkweDAwMDAsICAgICAvKiBSNTQyICovCisJMHgwMDAwLCAgICAgLyogUjU0MyAqLworCTB4MDAwMCwgICAgIC8qIFI1NDQgICAtIEZMTDEgQ29udHJvbCAoMSkgKi8KKwkweDAwMDAsICAgICAvKiBSNTQ1ICAgLSBGTEwxIENvbnRyb2wgKDIpICovCisJMHgwMDAwLCAgICAgLyogUjU0NiAgIC0gRkxMMSBDb250cm9sICgzKSAqLworCTB4MDAwMCwgICAgIC8qIFI1NDcgICAtIEZMTDEgQ29udHJvbCAoNCkgKi8KKwkweDBDODAsICAgICAvKiBSNTQ4ICAgLSBGTEwxIENvbnRyb2wgKDUpICovCisJMHgwMDAwLCAgICAgLyogUjU0OSAqLworCTB4MDAwMCwgICAgIC8qIFI1NTAgKi8KKwkweDAwMDAsICAgICAvKiBSNTUxICovCisJMHgwMDAwLCAgICAgLyogUjU1MiAqLworCTB4MDAwMCwgICAgIC8qIFI1NTMgKi8KKwkweDAwMDAsICAgICAvKiBSNTU0ICovCisJMHgwMDAwLCAgICAgLyogUjU1NSAqLworCTB4MDAwMCwgICAgIC8qIFI1NTYgKi8KKwkweDAwMDAsICAgICAvKiBSNTU3ICovCisJMHgwMDAwLCAgICAgLyogUjU1OCAqLworCTB4MDAwMCwgICAgIC8qIFI1NTkgKi8KKwkweDAwMDAsICAgICAvKiBSNTYwICovCisJMHgwMDAwLCAgICAgLyogUjU2MSAqLworCTB4MDAwMCwgICAgIC8qIFI1NjIgKi8KKwkweDAwMDAsICAgICAvKiBSNTYzICovCisJMHgwMDAwLCAgICAgLyogUjU2NCAqLworCTB4MDAwMCwgICAgIC8qIFI1NjUgKi8KKwkweDAwMDAsICAgICAvKiBSNTY2ICovCisJMHgwMDAwLCAgICAgLyogUjU2NyAqLworCTB4MDAwMCwgICAgIC8qIFI1NjggKi8KKwkweDAwMDAsICAgICAvKiBSNTY5ICovCisJMHgwMDAwLCAgICAgLyogUjU3MCAqLworCTB4MDAwMCwgICAgIC8qIFI1NzEgKi8KKwkweDAwMDAsICAgICAvKiBSNTcyICovCisJMHgwMDAwLCAgICAgLyogUjU3MyAqLworCTB4MDAwMCwgICAgIC8qIFI1NzQgKi8KKwkweDAwMDAsICAgICAvKiBSNTc1ICovCisJMHgwMDAwLCAgICAgLyogUjU3NiAgIC0gRkxMMiBDb250cm9sICgxKSAqLworCTB4MDAwMCwgICAgIC8qIFI1NzcgICAtIEZMTDIgQ29udHJvbCAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSNTc4ICAgLSBGTEwyIENvbnRyb2wgKDMpICovCisJMHgwMDAwLCAgICAgLyogUjU3OSAgIC0gRkxMMiBDb250cm9sICg0KSAqLworCTB4MEM4MCwgICAgIC8qIFI1ODAgICAtIEZMTDIgQ29udHJvbCAoNSkgKi8KKwkweDAwMDAsICAgICAvKiBSNTgxICovCisJMHgwMDAwLCAgICAgLyogUjU4MiAqLworCTB4MDAwMCwgICAgIC8qIFI1ODMgKi8KKwkweDAwMDAsICAgICAvKiBSNTg0ICovCisJMHgwMDAwLCAgICAgLyogUjU4NSAqLworCTB4MDAwMCwgICAgIC8qIFI1ODYgKi8KKwkweDAwMDAsICAgICAvKiBSNTg3ICovCisJMHgwMDAwLCAgICAgLyogUjU4OCAqLworCTB4MDAwMCwgICAgIC8qIFI1ODkgKi8KKwkweDAwMDAsICAgICAvKiBSNTkwICovCisJMHgwMDAwLCAgICAgLyogUjU5MSAqLworCTB4MDAwMCwgICAgIC8qIFI1OTIgKi8KKwkweDAwMDAsICAgICAvKiBSNTkzICovCisJMHgwMDAwLCAgICAgLyogUjU5NCAqLworCTB4MDAwMCwgICAgIC8qIFI1OTUgKi8KKwkweDAwMDAsICAgICAvKiBSNTk2ICovCisJMHgwMDAwLCAgICAgLyogUjU5NyAqLworCTB4MDAwMCwgICAgIC8qIFI1OTggKi8KKwkweDAwMDAsICAgICAvKiBSNTk5ICovCisJMHgwMDAwLCAgICAgLyogUjYwMCAqLworCTB4MDAwMCwgICAgIC8qIFI2MDEgKi8KKwkweDAwMDAsICAgICAvKiBSNjAyICovCisJMHgwMDAwLCAgICAgLyogUjYwMyAqLworCTB4MDAwMCwgICAgIC8qIFI2MDQgKi8KKwkweDAwMDAsICAgICAvKiBSNjA1ICovCisJMHgwMDAwLCAgICAgLyogUjYwNiAqLworCTB4MDAwMCwgICAgIC8qIFI2MDcgKi8KKwkweDAwMDAsICAgICAvKiBSNjA4ICovCisJMHgwMDAwLCAgICAgLyogUjYwOSAqLworCTB4MDAwMCwgICAgIC8qIFI2MTAgKi8KKwkweDAwMDAsICAgICAvKiBSNjExICovCisJMHgwMDAwLCAgICAgLyogUjYxMiAqLworCTB4MDAwMCwgICAgIC8qIFI2MTMgKi8KKwkweDAwMDAsICAgICAvKiBSNjE0ICovCisJMHgwMDAwLCAgICAgLyogUjYxNSAqLworCTB4MDAwMCwgICAgIC8qIFI2MTYgKi8KKwkweDAwMDAsICAgICAvKiBSNjE3ICovCisJMHgwMDAwLCAgICAgLyogUjYxOCAqLworCTB4MDAwMCwgICAgIC8qIFI2MTkgKi8KKwkweDAwMDAsICAgICAvKiBSNjIwICovCisJMHgwMDAwLCAgICAgLyogUjYyMSAqLworCTB4MDAwMCwgICAgIC8qIFI2MjIgKi8KKwkweDAwMDAsICAgICAvKiBSNjIzICovCisJMHgwMDAwLCAgICAgLyogUjYyNCAqLworCTB4MDAwMCwgICAgIC8qIFI2MjUgKi8KKwkweDAwMDAsICAgICAvKiBSNjI2ICovCisJMHgwMDAwLCAgICAgLyogUjYyNyAqLworCTB4MDAwMCwgICAgIC8qIFI2MjggKi8KKwkweDAwMDAsICAgICAvKiBSNjI5ICovCisJMHgwMDAwLCAgICAgLyogUjYzMCAqLworCTB4MDAwMCwgICAgIC8qIFI2MzEgKi8KKwkweDAwMDAsICAgICAvKiBSNjMyICovCisJMHgwMDAwLCAgICAgLyogUjYzMyAqLworCTB4MDAwMCwgICAgIC8qIFI2MzQgKi8KKwkweDAwMDAsICAgICAvKiBSNjM1ICovCisJMHgwMDAwLCAgICAgLyogUjYzNiAqLworCTB4MDAwMCwgICAgIC8qIFI2MzcgKi8KKwkweDAwMDAsICAgICAvKiBSNjM4ICovCisJMHgwMDAwLCAgICAgLyogUjYzOSAqLworCTB4MDAwMCwgICAgIC8qIFI2NDAgKi8KKwkweDAwMDAsICAgICAvKiBSNjQxICovCisJMHgwMDAwLCAgICAgLyogUjY0MiAqLworCTB4MDAwMCwgICAgIC8qIFI2NDMgKi8KKwkweDAwMDAsICAgICAvKiBSNjQ0ICovCisJMHgwMDAwLCAgICAgLyogUjY0NSAqLworCTB4MDAwMCwgICAgIC8qIFI2NDYgKi8KKwkweDAwMDAsICAgICAvKiBSNjQ3ICovCisJMHgwMDAwLCAgICAgLyogUjY0OCAqLworCTB4MDAwMCwgICAgIC8qIFI2NDkgKi8KKwkweDAwMDAsICAgICAvKiBSNjUwICovCisJMHgwMDAwLCAgICAgLyogUjY1MSAqLworCTB4MDAwMCwgICAgIC8qIFI2NTIgKi8KKwkweDAwMDAsICAgICAvKiBSNjUzICovCisJMHgwMDAwLCAgICAgLyogUjY1NCAqLworCTB4MDAwMCwgICAgIC8qIFI2NTUgKi8KKwkweDAwMDAsICAgICAvKiBSNjU2ICovCisJMHgwMDAwLCAgICAgLyogUjY1NyAqLworCTB4MDAwMCwgICAgIC8qIFI2NTggKi8KKwkweDAwMDAsICAgICAvKiBSNjU5ICovCisJMHgwMDAwLCAgICAgLyogUjY2MCAqLworCTB4MDAwMCwgICAgIC8qIFI2NjEgKi8KKwkweDAwMDAsICAgICAvKiBSNjYyICovCisJMHgwMDAwLCAgICAgLyogUjY2MyAqLworCTB4MDAwMCwgICAgIC8qIFI2NjQgKi8KKwkweDAwMDAsICAgICAvKiBSNjY1ICovCisJMHgwMDAwLCAgICAgLyogUjY2NiAqLworCTB4MDAwMCwgICAgIC8qIFI2NjcgKi8KKwkweDAwMDAsICAgICAvKiBSNjY4ICovCisJMHgwMDAwLCAgICAgLyogUjY2OSAqLworCTB4MDAwMCwgICAgIC8qIFI2NzAgKi8KKwkweDAwMDAsICAgICAvKiBSNjcxICovCisJMHgwMDAwLCAgICAgLyogUjY3MiAqLworCTB4MDAwMCwgICAgIC8qIFI2NzMgKi8KKwkweDAwMDAsICAgICAvKiBSNjc0ICovCisJMHgwMDAwLCAgICAgLyogUjY3NSAqLworCTB4MDAwMCwgICAgIC8qIFI2NzYgKi8KKwkweDAwMDAsICAgICAvKiBSNjc3ICovCisJMHgwMDAwLCAgICAgLyogUjY3OCAqLworCTB4MDAwMCwgICAgIC8qIFI2NzkgKi8KKwkweDAwMDAsICAgICAvKiBSNjgwICovCisJMHgwMDAwLCAgICAgLyogUjY4MSAqLworCTB4MDAwMCwgICAgIC8qIFI2ODIgKi8KKwkweDAwMDAsICAgICAvKiBSNjgzICovCisJMHgwMDAwLCAgICAgLyogUjY4NCAqLworCTB4MDAwMCwgICAgIC8qIFI2ODUgKi8KKwkweDAwMDAsICAgICAvKiBSNjg2ICovCisJMHgwMDAwLCAgICAgLyogUjY4NyAqLworCTB4MDAwMCwgICAgIC8qIFI2ODggKi8KKwkweDAwMDAsICAgICAvKiBSNjg5ICovCisJMHgwMDAwLCAgICAgLyogUjY5MCAqLworCTB4MDAwMCwgICAgIC8qIFI2OTEgKi8KKwkweDAwMDAsICAgICAvKiBSNjkyICovCisJMHgwMDAwLCAgICAgLyogUjY5MyAqLworCTB4MDAwMCwgICAgIC8qIFI2OTQgKi8KKwkweDAwMDAsICAgICAvKiBSNjk1ICovCisJMHgwMDAwLCAgICAgLyogUjY5NiAqLworCTB4MDAwMCwgICAgIC8qIFI2OTcgKi8KKwkweDAwMDAsICAgICAvKiBSNjk4ICovCisJMHgwMDAwLCAgICAgLyogUjY5OSAqLworCTB4MDAwMCwgICAgIC8qIFI3MDAgKi8KKwkweDAwMDAsICAgICAvKiBSNzAxICovCisJMHgwMDAwLCAgICAgLyogUjcwMiAqLworCTB4MDAwMCwgICAgIC8qIFI3MDMgKi8KKwkweDAwMDAsICAgICAvKiBSNzA0ICovCisJMHgwMDAwLCAgICAgLyogUjcwNSAqLworCTB4MDAwMCwgICAgIC8qIFI3MDYgKi8KKwkweDAwMDAsICAgICAvKiBSNzA3ICovCisJMHgwMDAwLCAgICAgLyogUjcwOCAqLworCTB4MDAwMCwgICAgIC8qIFI3MDkgKi8KKwkweDAwMDAsICAgICAvKiBSNzEwICovCisJMHgwMDAwLCAgICAgLyogUjcxMSAqLworCTB4MDAwMCwgICAgIC8qIFI3MTIgKi8KKwkweDAwMDAsICAgICAvKiBSNzEzICovCisJMHgwMDAwLCAgICAgLyogUjcxNCAqLworCTB4MDAwMCwgICAgIC8qIFI3MTUgKi8KKwkweDAwMDAsICAgICAvKiBSNzE2ICovCisJMHgwMDAwLCAgICAgLyogUjcxNyAqLworCTB4MDAwMCwgICAgIC8qIFI3MTggKi8KKwkweDAwMDAsICAgICAvKiBSNzE5ICovCisJMHgwMDAwLCAgICAgLyogUjcyMCAqLworCTB4MDAwMCwgICAgIC8qIFI3MjEgKi8KKwkweDAwMDAsICAgICAvKiBSNzIyICovCisJMHgwMDAwLCAgICAgLyogUjcyMyAqLworCTB4MDAwMCwgICAgIC8qIFI3MjQgKi8KKwkweDAwMDAsICAgICAvKiBSNzI1ICovCisJMHgwMDAwLCAgICAgLyogUjcyNiAqLworCTB4MDAwMCwgICAgIC8qIFI3MjcgKi8KKwkweDAwMDAsICAgICAvKiBSNzI4ICovCisJMHgwMDAwLCAgICAgLyogUjcyOSAqLworCTB4MDAwMCwgICAgIC8qIFI3MzAgKi8KKwkweDAwMDAsICAgICAvKiBSNzMxICovCisJMHgwMDAwLCAgICAgLyogUjczMiAqLworCTB4MDAwMCwgICAgIC8qIFI3MzMgKi8KKwkweDAwMDAsICAgICAvKiBSNzM0ICovCisJMHgwMDAwLCAgICAgLyogUjczNSAqLworCTB4MDAwMCwgICAgIC8qIFI3MzYgKi8KKwkweDAwMDAsICAgICAvKiBSNzM3ICovCisJMHgwMDAwLCAgICAgLyogUjczOCAqLworCTB4MDAwMCwgICAgIC8qIFI3MzkgKi8KKwkweDAwMDAsICAgICAvKiBSNzQwICovCisJMHgwMDAwLCAgICAgLyogUjc0MSAqLworCTB4MDAwMCwgICAgIC8qIFI3NDIgKi8KKwkweDAwMDAsICAgICAvKiBSNzQzICovCisJMHgwMDAwLCAgICAgLyogUjc0NCAqLworCTB4MDAwMCwgICAgIC8qIFI3NDUgKi8KKwkweDAwMDAsICAgICAvKiBSNzQ2ICovCisJMHgwMDAwLCAgICAgLyogUjc0NyAqLworCTB4MDAwMCwgICAgIC8qIFI3NDggKi8KKwkweDAwMDAsICAgICAvKiBSNzQ5ICovCisJMHgwMDAwLCAgICAgLyogUjc1MCAqLworCTB4MDAwMCwgICAgIC8qIFI3NTEgKi8KKwkweDAwMDAsICAgICAvKiBSNzUyICovCisJMHgwMDAwLCAgICAgLyogUjc1MyAqLworCTB4MDAwMCwgICAgIC8qIFI3NTQgKi8KKwkweDAwMDAsICAgICAvKiBSNzU1ICovCisJMHgwMDAwLCAgICAgLyogUjc1NiAqLworCTB4MDAwMCwgICAgIC8qIFI3NTcgKi8KKwkweDAwMDAsICAgICAvKiBSNzU4ICovCisJMHgwMDAwLCAgICAgLyogUjc1OSAqLworCTB4MDAwMCwgICAgIC8qIFI3NjAgKi8KKwkweDAwMDAsICAgICAvKiBSNzYxICovCisJMHgwMDAwLCAgICAgLyogUjc2MiAqLworCTB4MDAwMCwgICAgIC8qIFI3NjMgKi8KKwkweDAwMDAsICAgICAvKiBSNzY0ICovCisJMHgwMDAwLCAgICAgLyogUjc2NSAqLworCTB4MDAwMCwgICAgIC8qIFI3NjYgKi8KKwkweDAwMDAsICAgICAvKiBSNzY3ICovCisJMHg0MDUwLCAgICAgLyogUjc2OCAgIC0gQUlGMSBDb250cm9sICgxKSAqLworCTB4NDAwMCwgICAgIC8qIFI3NjkgICAtIEFJRjEgQ29udHJvbCAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSNzcwICAgLSBBSUYxIE1hc3Rlci9TbGF2ZSAqLworCTB4MDA0MCwgICAgIC8qIFI3NzEgICAtIEFJRjEgQkNMSyAqLworCTB4MDA0MCwgICAgIC8qIFI3NzIgICAtIEFJRjFBREMgTFJDTEsgKi8KKwkweDAwNDAsICAgICAvKiBSNzczICAgLSBBSUYxREFDIExSQ0xLICovCisJMHgwMDA0LCAgICAgLyogUjc3NCAgIC0gQUlGMURBQyBEYXRhICovCisJMHgwMTAwLCAgICAgLyogUjc3NSAgIC0gQUlGMUFEQyBEYXRhICovCisJMHgwMDAwLCAgICAgLyogUjc3NiAqLworCTB4MDAwMCwgICAgIC8qIFI3NzcgKi8KKwkweDAwMDAsICAgICAvKiBSNzc4ICovCisJMHgwMDAwLCAgICAgLyogUjc3OSAqLworCTB4MDAwMCwgICAgIC8qIFI3ODAgKi8KKwkweDAwMDAsICAgICAvKiBSNzgxICovCisJMHgwMDAwLCAgICAgLyogUjc4MiAqLworCTB4MDAwMCwgICAgIC8qIFI3ODMgKi8KKwkweDQwNTAsICAgICAvKiBSNzg0ICAgLSBBSUYyIENvbnRyb2wgKDEpICovCisJMHg0MDAwLCAgICAgLyogUjc4NSAgIC0gQUlGMiBDb250cm9sICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFI3ODYgICAtIEFJRjIgTWFzdGVyL1NsYXZlICovCisJMHgwMDQwLCAgICAgLyogUjc4NyAgIC0gQUlGMiBCQ0xLICovCisJMHgwMDQwLCAgICAgLyogUjc4OCAgIC0gQUlGMkFEQyBMUkNMSyAqLworCTB4MDA0MCwgICAgIC8qIFI3ODkgICAtIEFJRjJEQUMgTFJDTEsgKi8KKwkweDAwMDAsICAgICAvKiBSNzkwICAgLSBBSUYyREFDIERhdGEgKi8KKwkweDAwMDAsICAgICAvKiBSNzkxICAgLSBBSUYyQURDIERhdGEgKi8KKwkweDAwMDAsICAgICAvKiBSNzkyICovCisJMHgwMDAwLCAgICAgLyogUjc5MyAqLworCTB4MDAwMCwgICAgIC8qIFI3OTQgKi8KKwkweDAwMDAsICAgICAvKiBSNzk1ICovCisJMHgwMDAwLCAgICAgLyogUjc5NiAqLworCTB4MDAwMCwgICAgIC8qIFI3OTcgKi8KKwkweDAwMDAsICAgICAvKiBSNzk4ICovCisJMHgwMDAwLCAgICAgLyogUjc5OSAqLworCTB4MDAwMCwgICAgIC8qIFI4MDAgKi8KKwkweDAwMDAsICAgICAvKiBSODAxICovCisJMHgwMDAwLCAgICAgLyogUjgwMiAqLworCTB4MDAwMCwgICAgIC8qIFI4MDMgKi8KKwkweDAwMDAsICAgICAvKiBSODA0ICovCisJMHgwMDAwLCAgICAgLyogUjgwNSAqLworCTB4MDAwMCwgICAgIC8qIFI4MDYgKi8KKwkweDAwMDAsICAgICAvKiBSODA3ICovCisJMHgwMDAwLCAgICAgLyogUjgwOCAqLworCTB4MDAwMCwgICAgIC8qIFI4MDkgKi8KKwkweDAwMDAsICAgICAvKiBSODEwICovCisJMHgwMDAwLCAgICAgLyogUjgxMSAqLworCTB4MDAwMCwgICAgIC8qIFI4MTIgKi8KKwkweDAwMDAsICAgICAvKiBSODEzICovCisJMHgwMDAwLCAgICAgLyogUjgxNCAqLworCTB4MDAwMCwgICAgIC8qIFI4MTUgKi8KKwkweDAwMDAsICAgICAvKiBSODE2ICovCisJMHgwMDAwLCAgICAgLyogUjgxNyAqLworCTB4MDAwMCwgICAgIC8qIFI4MTggKi8KKwkweDAwMDAsICAgICAvKiBSODE5ICovCisJMHgwMDAwLCAgICAgLyogUjgyMCAqLworCTB4MDAwMCwgICAgIC8qIFI4MjEgKi8KKwkweDAwMDAsICAgICAvKiBSODIyICovCisJMHgwMDAwLCAgICAgLyogUjgyMyAqLworCTB4MDAwMCwgICAgIC8qIFI4MjQgKi8KKwkweDAwMDAsICAgICAvKiBSODI1ICovCisJMHgwMDAwLCAgICAgLyogUjgyNiAqLworCTB4MDAwMCwgICAgIC8qIFI4MjcgKi8KKwkweDAwMDAsICAgICAvKiBSODI4ICovCisJMHgwMDAwLCAgICAgLyogUjgyOSAqLworCTB4MDAwMCwgICAgIC8qIFI4MzAgKi8KKwkweDAwMDAsICAgICAvKiBSODMxICovCisJMHgwMDAwLCAgICAgLyogUjgzMiAqLworCTB4MDAwMCwgICAgIC8qIFI4MzMgKi8KKwkweDAwMDAsICAgICAvKiBSODM0ICovCisJMHgwMDAwLCAgICAgLyogUjgzNSAqLworCTB4MDAwMCwgICAgIC8qIFI4MzYgKi8KKwkweDAwMDAsICAgICAvKiBSODM3ICovCisJMHgwMDAwLCAgICAgLyogUjgzOCAqLworCTB4MDAwMCwgICAgIC8qIFI4MzkgKi8KKwkweDAwMDAsICAgICAvKiBSODQwICovCisJMHgwMDAwLCAgICAgLyogUjg0MSAqLworCTB4MDAwMCwgICAgIC8qIFI4NDIgKi8KKwkweDAwMDAsICAgICAvKiBSODQzICovCisJMHgwMDAwLCAgICAgLyogUjg0NCAqLworCTB4MDAwMCwgICAgIC8qIFI4NDUgKi8KKwkweDAwMDAsICAgICAvKiBSODQ2ICovCisJMHgwMDAwLCAgICAgLyogUjg0NyAqLworCTB4MDAwMCwgICAgIC8qIFI4NDggKi8KKwkweDAwMDAsICAgICAvKiBSODQ5ICovCisJMHgwMDAwLCAgICAgLyogUjg1MCAqLworCTB4MDAwMCwgICAgIC8qIFI4NTEgKi8KKwkweDAwMDAsICAgICAvKiBSODUyICovCisJMHgwMDAwLCAgICAgLyogUjg1MyAqLworCTB4MDAwMCwgICAgIC8qIFI4NTQgKi8KKwkweDAwMDAsICAgICAvKiBSODU1ICovCisJMHgwMDAwLCAgICAgLyogUjg1NiAqLworCTB4MDAwMCwgICAgIC8qIFI4NTcgKi8KKwkweDAwMDAsICAgICAvKiBSODU4ICovCisJMHgwMDAwLCAgICAgLyogUjg1OSAqLworCTB4MDAwMCwgICAgIC8qIFI4NjAgKi8KKwkweDAwMDAsICAgICAvKiBSODYxICovCisJMHgwMDAwLCAgICAgLyogUjg2MiAqLworCTB4MDAwMCwgICAgIC8qIFI4NjMgKi8KKwkweDAwMDAsICAgICAvKiBSODY0ICovCisJMHgwMDAwLCAgICAgLyogUjg2NSAqLworCTB4MDAwMCwgICAgIC8qIFI4NjYgKi8KKwkweDAwMDAsICAgICAvKiBSODY3ICovCisJMHgwMDAwLCAgICAgLyogUjg2OCAqLworCTB4MDAwMCwgICAgIC8qIFI4NjkgKi8KKwkweDAwMDAsICAgICAvKiBSODcwICovCisJMHgwMDAwLCAgICAgLyogUjg3MSAqLworCTB4MDAwMCwgICAgIC8qIFI4NzIgKi8KKwkweDAwMDAsICAgICAvKiBSODczICovCisJMHgwMDAwLCAgICAgLyogUjg3NCAqLworCTB4MDAwMCwgICAgIC8qIFI4NzUgKi8KKwkweDAwMDAsICAgICAvKiBSODc2ICovCisJMHgwMDAwLCAgICAgLyogUjg3NyAqLworCTB4MDAwMCwgICAgIC8qIFI4NzggKi8KKwkweDAwMDAsICAgICAvKiBSODc5ICovCisJMHgwMDAwLCAgICAgLyogUjg4MCAqLworCTB4MDAwMCwgICAgIC8qIFI4ODEgKi8KKwkweDAwMDAsICAgICAvKiBSODgyICovCisJMHgwMDAwLCAgICAgLyogUjg4MyAqLworCTB4MDAwMCwgICAgIC8qIFI4ODQgKi8KKwkweDAwMDAsICAgICAvKiBSODg1ICovCisJMHgwMDAwLCAgICAgLyogUjg4NiAqLworCTB4MDAwMCwgICAgIC8qIFI4ODcgKi8KKwkweDAwMDAsICAgICAvKiBSODg4ICovCisJMHgwMDAwLCAgICAgLyogUjg4OSAqLworCTB4MDAwMCwgICAgIC8qIFI4OTAgKi8KKwkweDAwMDAsICAgICAvKiBSODkxICovCisJMHgwMDAwLCAgICAgLyogUjg5MiAqLworCTB4MDAwMCwgICAgIC8qIFI4OTMgKi8KKwkweDAwMDAsICAgICAvKiBSODk0ICovCisJMHgwMDAwLCAgICAgLyogUjg5NSAqLworCTB4MDAwMCwgICAgIC8qIFI4OTYgKi8KKwkweDAwMDAsICAgICAvKiBSODk3ICovCisJMHgwMDAwLCAgICAgLyogUjg5OCAqLworCTB4MDAwMCwgICAgIC8qIFI4OTkgKi8KKwkweDAwMDAsICAgICAvKiBSOTAwICovCisJMHgwMDAwLCAgICAgLyogUjkwMSAqLworCTB4MDAwMCwgICAgIC8qIFI5MDIgKi8KKwkweDAwMDAsICAgICAvKiBSOTAzICovCisJMHgwMDAwLCAgICAgLyogUjkwNCAqLworCTB4MDAwMCwgICAgIC8qIFI5MDUgKi8KKwkweDAwMDAsICAgICAvKiBSOTA2ICovCisJMHgwMDAwLCAgICAgLyogUjkwNyAqLworCTB4MDAwMCwgICAgIC8qIFI5MDggKi8KKwkweDAwMDAsICAgICAvKiBSOTA5ICovCisJMHgwMDAwLCAgICAgLyogUjkxMCAqLworCTB4MDAwMCwgICAgIC8qIFI5MTEgKi8KKwkweDAwMDAsICAgICAvKiBSOTEyICovCisJMHgwMDAwLCAgICAgLyogUjkxMyAqLworCTB4MDAwMCwgICAgIC8qIFI5MTQgKi8KKwkweDAwMDAsICAgICAvKiBSOTE1ICovCisJMHgwMDAwLCAgICAgLyogUjkxNiAqLworCTB4MDAwMCwgICAgIC8qIFI5MTcgKi8KKwkweDAwMDAsICAgICAvKiBSOTE4ICovCisJMHgwMDAwLCAgICAgLyogUjkxOSAqLworCTB4MDAwMCwgICAgIC8qIFI5MjAgKi8KKwkweDAwMDAsICAgICAvKiBSOTIxICovCisJMHgwMDAwLCAgICAgLyogUjkyMiAqLworCTB4MDAwMCwgICAgIC8qIFI5MjMgKi8KKwkweDAwMDAsICAgICAvKiBSOTI0ICovCisJMHgwMDAwLCAgICAgLyogUjkyNSAqLworCTB4MDAwMCwgICAgIC8qIFI5MjYgKi8KKwkweDAwMDAsICAgICAvKiBSOTI3ICovCisJMHgwMDAwLCAgICAgLyogUjkyOCAqLworCTB4MDAwMCwgICAgIC8qIFI5MjkgKi8KKwkweDAwMDAsICAgICAvKiBSOTMwICovCisJMHgwMDAwLCAgICAgLyogUjkzMSAqLworCTB4MDAwMCwgICAgIC8qIFI5MzIgKi8KKwkweDAwMDAsICAgICAvKiBSOTMzICovCisJMHgwMDAwLCAgICAgLyogUjkzNCAqLworCTB4MDAwMCwgICAgIC8qIFI5MzUgKi8KKwkweDAwMDAsICAgICAvKiBSOTM2ICovCisJMHgwMDAwLCAgICAgLyogUjkzNyAqLworCTB4MDAwMCwgICAgIC8qIFI5MzggKi8KKwkweDAwMDAsICAgICAvKiBSOTM5ICovCisJMHgwMDAwLCAgICAgLyogUjk0MCAqLworCTB4MDAwMCwgICAgIC8qIFI5NDEgKi8KKwkweDAwMDAsICAgICAvKiBSOTQyICovCisJMHgwMDAwLCAgICAgLyogUjk0MyAqLworCTB4MDAwMCwgICAgIC8qIFI5NDQgKi8KKwkweDAwMDAsICAgICAvKiBSOTQ1ICovCisJMHgwMDAwLCAgICAgLyogUjk0NiAqLworCTB4MDAwMCwgICAgIC8qIFI5NDcgKi8KKwkweDAwMDAsICAgICAvKiBSOTQ4ICovCisJMHgwMDAwLCAgICAgLyogUjk0OSAqLworCTB4MDAwMCwgICAgIC8qIFI5NTAgKi8KKwkweDAwMDAsICAgICAvKiBSOTUxICovCisJMHgwMDAwLCAgICAgLyogUjk1MiAqLworCTB4MDAwMCwgICAgIC8qIFI5NTMgKi8KKwkweDAwMDAsICAgICAvKiBSOTU0ICovCisJMHgwMDAwLCAgICAgLyogUjk1NSAqLworCTB4MDAwMCwgICAgIC8qIFI5NTYgKi8KKwkweDAwMDAsICAgICAvKiBSOTU3ICovCisJMHgwMDAwLCAgICAgLyogUjk1OCAqLworCTB4MDAwMCwgICAgIC8qIFI5NTkgKi8KKwkweDAwMDAsICAgICAvKiBSOTYwICovCisJMHgwMDAwLCAgICAgLyogUjk2MSAqLworCTB4MDAwMCwgICAgIC8qIFI5NjIgKi8KKwkweDAwMDAsICAgICAvKiBSOTYzICovCisJMHgwMDAwLCAgICAgLyogUjk2NCAqLworCTB4MDAwMCwgICAgIC8qIFI5NjUgKi8KKwkweDAwMDAsICAgICAvKiBSOTY2ICovCisJMHgwMDAwLCAgICAgLyogUjk2NyAqLworCTB4MDAwMCwgICAgIC8qIFI5NjggKi8KKwkweDAwMDAsICAgICAvKiBSOTY5ICovCisJMHgwMDAwLCAgICAgLyogUjk3MCAqLworCTB4MDAwMCwgICAgIC8qIFI5NzEgKi8KKwkweDAwMDAsICAgICAvKiBSOTcyICovCisJMHgwMDAwLCAgICAgLyogUjk3MyAqLworCTB4MDAwMCwgICAgIC8qIFI5NzQgKi8KKwkweDAwMDAsICAgICAvKiBSOTc1ICovCisJMHgwMDAwLCAgICAgLyogUjk3NiAqLworCTB4MDAwMCwgICAgIC8qIFI5NzcgKi8KKwkweDAwMDAsICAgICAvKiBSOTc4ICovCisJMHgwMDAwLCAgICAgLyogUjk3OSAqLworCTB4MDAwMCwgICAgIC8qIFI5ODAgKi8KKwkweDAwMDAsICAgICAvKiBSOTgxICovCisJMHgwMDAwLCAgICAgLyogUjk4MiAqLworCTB4MDAwMCwgICAgIC8qIFI5ODMgKi8KKwkweDAwMDAsICAgICAvKiBSOTg0ICovCisJMHgwMDAwLCAgICAgLyogUjk4NSAqLworCTB4MDAwMCwgICAgIC8qIFI5ODYgKi8KKwkweDAwMDAsICAgICAvKiBSOTg3ICovCisJMHgwMDAwLCAgICAgLyogUjk4OCAqLworCTB4MDAwMCwgICAgIC8qIFI5ODkgKi8KKwkweDAwMDAsICAgICAvKiBSOTkwICovCisJMHgwMDAwLCAgICAgLyogUjk5MSAqLworCTB4MDAwMCwgICAgIC8qIFI5OTIgKi8KKwkweDAwMDAsICAgICAvKiBSOTkzICovCisJMHgwMDAwLCAgICAgLyogUjk5NCAqLworCTB4MDAwMCwgICAgIC8qIFI5OTUgKi8KKwkweDAwMDAsICAgICAvKiBSOTk2ICovCisJMHgwMDAwLCAgICAgLyogUjk5NyAqLworCTB4MDAwMCwgICAgIC8qIFI5OTggKi8KKwkweDAwMDAsICAgICAvKiBSOTk5ICovCisJMHgwMDAwLCAgICAgLyogUjEwMDAgKi8KKwkweDAwMDAsICAgICAvKiBSMTAwMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDAyICovCisJMHgwMDAwLCAgICAgLyogUjEwMDMgKi8KKwkweDAwMDAsICAgICAvKiBSMTAwNCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDA1ICovCisJMHgwMDAwLCAgICAgLyogUjEwMDYgKi8KKwkweDAwMDAsICAgICAvKiBSMTAwNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMDA4ICovCisJMHgwMDAwLCAgICAgLyogUjEwMDkgKi8KKwkweDAwMDAsICAgICAvKiBSMTAxMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDExICovCisJMHgwMDAwLCAgICAgLyogUjEwMTIgKi8KKwkweDAwMDAsICAgICAvKiBSMTAxMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMDE0ICovCisJMHgwMDAwLCAgICAgLyogUjEwMTUgKi8KKwkweDAwMDAsICAgICAvKiBSMTAxNiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDE3ICovCisJMHgwMDAwLCAgICAgLyogUjEwMTggKi8KKwkweDAwMDAsICAgICAvKiBSMTAxOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDIwICovCisJMHgwMDAwLCAgICAgLyogUjEwMjEgKi8KKwkweDAwMDAsICAgICAvKiBSMTAyMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDIzICovCisJMHgwMEMwLCAgICAgLyogUjEwMjQgIC0gQUlGMSBBREMxIExlZnQgVm9sdW1lICovCisJMHgwMEMwLCAgICAgLyogUjEwMjUgIC0gQUlGMSBBREMxIFJpZ2h0IFZvbHVtZSAqLworCTB4MDBDMCwgICAgIC8qIFIxMDI2ICAtIEFJRjEgREFDMSBMZWZ0IFZvbHVtZSAqLworCTB4MDBDMCwgICAgIC8qIFIxMDI3ICAtIEFJRjEgREFDMSBSaWdodCBWb2x1bWUgKi8KKwkweDAwQzAsICAgICAvKiBSMTAyOCAgLSBBSUYxIEFEQzIgTGVmdCBWb2x1bWUgKi8KKwkweDAwQzAsICAgICAvKiBSMTAyOSAgLSBBSUYxIEFEQzIgUmlnaHQgVm9sdW1lICovCisJMHgwMEMwLCAgICAgLyogUjEwMzAgIC0gQUlGMSBEQUMyIExlZnQgVm9sdW1lICovCisJMHgwMEMwLCAgICAgLyogUjEwMzEgIC0gQUlGMSBEQUMyIFJpZ2h0IFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDMyICovCisJMHgwMDAwLCAgICAgLyogUjEwMzMgKi8KKwkweDAwMDAsICAgICAvKiBSMTAzNCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDM1ICovCisJMHgwMDAwLCAgICAgLyogUjEwMzYgKi8KKwkweDAwMDAsICAgICAvKiBSMTAzNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMDM4ICovCisJMHgwMDAwLCAgICAgLyogUjEwMzkgKi8KKwkweDAwMDAsICAgICAvKiBSMTA0MCAgLSBBSUYxIEFEQzEgRmlsdGVycyAqLworCTB4MDAwMCwgICAgIC8qIFIxMDQxICAtIEFJRjEgQURDMiBGaWx0ZXJzICovCisJMHgwMDAwLCAgICAgLyogUjEwNDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTA0MyAqLworCTB4MDAwMCwgICAgIC8qIFIxMDQ0ICovCisJMHgwMDAwLCAgICAgLyogUjEwNDUgKi8KKwkweDAwMDAsICAgICAvKiBSMTA0NiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDQ3ICovCisJMHgwMDAwLCAgICAgLyogUjEwNDggKi8KKwkweDAwMDAsICAgICAvKiBSMTA0OSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDUwICovCisJMHgwMDAwLCAgICAgLyogUjEwNTEgKi8KKwkweDAwMDAsICAgICAvKiBSMTA1MiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDUzICovCisJMHgwMDAwLCAgICAgLyogUjEwNTQgKi8KKwkweDAwMDAsICAgICAvKiBSMTA1NSAqLworCTB4MDIwMCwgICAgIC8qIFIxMDU2ICAtIEFJRjEgREFDMSBGaWx0ZXJzICgxKSAqLworCTB4MDAxMCwgICAgIC8qIFIxMDU3ICAtIEFJRjEgREFDMSBGaWx0ZXJzICgyKSAqLworCTB4MDIwMCwgICAgIC8qIFIxMDU4ICAtIEFJRjEgREFDMiBGaWx0ZXJzICgxKSAqLworCTB4MDAxMCwgICAgIC8qIFIxMDU5ICAtIEFJRjEgREFDMiBGaWx0ZXJzICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDYwICovCisJMHgwMDAwLCAgICAgLyogUjEwNjEgKi8KKwkweDAwMDAsICAgICAvKiBSMTA2MiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDYzICovCisJMHgwMDAwLCAgICAgLyogUjEwNjQgKi8KKwkweDAwMDAsICAgICAvKiBSMTA2NSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDY2ICovCisJMHgwMDAwLCAgICAgLyogUjEwNjcgKi8KKwkweDAwMDAsICAgICAvKiBSMTA2OCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDY5ICovCisJMHgwMDAwLCAgICAgLyogUjEwNzAgKi8KKwkweDAwMDAsICAgICAvKiBSMTA3MSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDcyICovCisJMHgwMDAwLCAgICAgLyogUjEwNzMgKi8KKwkweDAwMDAsICAgICAvKiBSMTA3NCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDc1ICovCisJMHgwMDAwLCAgICAgLyogUjEwNzYgKi8KKwkweDAwMDAsICAgICAvKiBSMTA3NyAqLworCTB4MDAwMCwgICAgIC8qIFIxMDc4ICovCisJMHgwMDAwLCAgICAgLyogUjEwNzkgKi8KKwkweDAwMDAsICAgICAvKiBSMTA4MCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDgxICovCisJMHgwMDAwLCAgICAgLyogUjEwODIgKi8KKwkweDAwMDAsICAgICAvKiBSMTA4MyAqLworCTB4MDAwMCwgICAgIC8qIFIxMDg0ICovCisJMHgwMDAwLCAgICAgLyogUjEwODUgKi8KKwkweDAwMDAsICAgICAvKiBSMTA4NiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDg3ICovCisJMHgwMDk4LCAgICAgLyogUjEwODggIC0gQUlGMSBEUkMxICgxKSAqLworCTB4MDg0NSwgICAgIC8qIFIxMDg5ICAtIEFJRjEgRFJDMSAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSMTA5MCAgLSBBSUYxIERSQzEgKDMpICovCisJMHgwMDAwLCAgICAgLyogUjEwOTEgIC0gQUlGMSBEUkMxICg0KSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDkyICAtIEFJRjEgRFJDMSAoNSkgKi8KKwkweDAwMDAsICAgICAvKiBSMTA5MyAqLworCTB4MDAwMCwgICAgIC8qIFIxMDk0ICovCisJMHgwMDAwLCAgICAgLyogUjEwOTUgKi8KKwkweDAwMDAsICAgICAvKiBSMTA5NiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDk3ICovCisJMHgwMDAwLCAgICAgLyogUjEwOTggKi8KKwkweDAwMDAsICAgICAvKiBSMTA5OSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTAwICovCisJMHgwMDAwLCAgICAgLyogUjExMDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTEwMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMTAzICovCisJMHgwMDk4LCAgICAgLyogUjExMDQgIC0gQUlGMSBEUkMyICgxKSAqLworCTB4MDg0NSwgICAgIC8qIFIxMTA1ICAtIEFJRjEgRFJDMiAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSMTEwNiAgLSBBSUYxIERSQzIgKDMpICovCisJMHgwMDAwLCAgICAgLyogUjExMDcgIC0gQUlGMSBEUkMyICg0KSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTA4ICAtIEFJRjEgRFJDMiAoNSkgKi8KKwkweDAwMDAsICAgICAvKiBSMTEwOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTEwICovCisJMHgwMDAwLCAgICAgLyogUjExMTEgKi8KKwkweDAwMDAsICAgICAvKiBSMTExMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMTEzICovCisJMHgwMDAwLCAgICAgLyogUjExMTQgKi8KKwkweDAwMDAsICAgICAvKiBSMTExNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTE2ICovCisJMHgwMDAwLCAgICAgLyogUjExMTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTExOCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTE5ICovCisJMHgwMDAwLCAgICAgLyogUjExMjAgKi8KKwkweDAwMDAsICAgICAvKiBSMTEyMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTIyICovCisJMHgwMDAwLCAgICAgLyogUjExMjMgKi8KKwkweDAwMDAsICAgICAvKiBSMTEyNCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTI1ICovCisJMHgwMDAwLCAgICAgLyogUjExMjYgKi8KKwkweDAwMDAsICAgICAvKiBSMTEyNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMTI4ICovCisJMHgwMDAwLCAgICAgLyogUjExMjkgKi8KKwkweDAwMDAsICAgICAvKiBSMTEzMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTMxICovCisJMHgwMDAwLCAgICAgLyogUjExMzIgKi8KKwkweDAwMDAsICAgICAvKiBSMTEzMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMTM0ICovCisJMHgwMDAwLCAgICAgLyogUjExMzUgKi8KKwkweDAwMDAsICAgICAvKiBSMTEzNiAqLworCTB4MDAwMCwgICAgIC8qIFIxMTM3ICovCisJMHgwMDAwLCAgICAgLyogUjExMzggKi8KKwkweDAwMDAsICAgICAvKiBSMTEzOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTQwICovCisJMHgwMDAwLCAgICAgLyogUjExNDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTE0MiAqLworCTB4MDAwMCwgICAgIC8qIFIxMTQzICovCisJMHgwMDAwLCAgICAgLyogUjExNDQgKi8KKwkweDAwMDAsICAgICAvKiBSMTE0NSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTQ2ICovCisJMHgwMDAwLCAgICAgLyogUjExNDcgKi8KKwkweDAwMDAsICAgICAvKiBSMTE0OCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTQ5ICovCisJMHgwMDAwLCAgICAgLyogUjExNTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTE1MSAqLworCTB4NjMxOCwgICAgIC8qIFIxMTUyICAtIEFJRjEgREFDMSBFUSBHYWlucyAoMSkgKi8KKwkweDYzMDAsICAgICAvKiBSMTE1MyAgLSBBSUYxIERBQzEgRVEgR2FpbnMgKDIpICovCisJMHgwRkNBLCAgICAgLyogUjExNTQgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMSBBICovCisJMHgwNDAwLCAgICAgLyogUjExNTUgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMSBCICovCisJMHgwMEQ4LCAgICAgLyogUjExNTYgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMSBQRyAqLworCTB4MUVCNSwgICAgIC8qIFIxMTU3ICAtIEFJRjEgREFDMSBFUSBCYW5kIDIgQSAqLworCTB4RjE0NSwgICAgIC8qIFIxMTU4ICAtIEFJRjEgREFDMSBFUSBCYW5kIDIgQiAqLworCTB4MEI3NSwgICAgIC8qIFIxMTU5ICAtIEFJRjEgREFDMSBFUSBCYW5kIDIgQyAqLworCTB4MDFDNSwgICAgIC8qIFIxMTYwICAtIEFJRjEgREFDMSBFUSBCYW5kIDIgUEcgKi8KKwkweDFDNTgsICAgICAvKiBSMTE2MSAgLSBBSUYxIERBQzEgRVEgQmFuZCAzIEEgKi8KKwkweEYzNzMsICAgICAvKiBSMTE2MiAgLSBBSUYxIERBQzEgRVEgQmFuZCAzIEIgKi8KKwkweDBBNTQsICAgICAvKiBSMTE2MyAgLSBBSUYxIERBQzEgRVEgQmFuZCAzIEMgKi8KKwkweDA1NTgsICAgICAvKiBSMTE2NCAgLSBBSUYxIERBQzEgRVEgQmFuZCAzIFBHICovCisJMHgxNjhFLCAgICAgLyogUjExNjUgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBBICovCisJMHhGODI5LCAgICAgLyogUjExNjYgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBCICovCisJMHgwN0FELCAgICAgLyogUjExNjcgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBDICovCisJMHgxMTAzLCAgICAgLyogUjExNjggIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBQRyAqLworCTB4MDU2NCwgICAgIC8qIFIxMTY5ICAtIEFJRjEgREFDMSBFUSBCYW5kIDUgQSAqLworCTB4MDU1OSwgICAgIC8qIFIxMTcwICAtIEFJRjEgREFDMSBFUSBCYW5kIDUgQiAqLworCTB4NDAwMCwgICAgIC8qIFIxMTcxICAtIEFJRjEgREFDMSBFUSBCYW5kIDUgUEcgKi8KKwkweDAwMDAsICAgICAvKiBSMTE3MiAqLworCTB4MDAwMCwgICAgIC8qIFIxMTczICovCisJMHgwMDAwLCAgICAgLyogUjExNzQgKi8KKwkweDAwMDAsICAgICAvKiBSMTE3NSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTc2ICovCisJMHgwMDAwLCAgICAgLyogUjExNzcgKi8KKwkweDAwMDAsICAgICAvKiBSMTE3OCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTc5ICovCisJMHgwMDAwLCAgICAgLyogUjExODAgKi8KKwkweDAwMDAsICAgICAvKiBSMTE4MSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTgyICovCisJMHgwMDAwLCAgICAgLyogUjExODMgKi8KKwkweDYzMTgsICAgICAvKiBSMTE4NCAgLSBBSUYxIERBQzIgRVEgR2FpbnMgKDEpICovCisJMHg2MzAwLCAgICAgLyogUjExODUgIC0gQUlGMSBEQUMyIEVRIEdhaW5zICgyKSAqLworCTB4MEZDQSwgICAgIC8qIFIxMTg2ICAtIEFJRjEgREFDMiBFUSBCYW5kIDEgQSAqLworCTB4MDQwMCwgICAgIC8qIFIxMTg3ICAtIEFJRjEgREFDMiBFUSBCYW5kIDEgQiAqLworCTB4MDBEOCwgICAgIC8qIFIxMTg4ICAtIEFJRjEgREFDMiBFUSBCYW5kIDEgUEcgKi8KKwkweDFFQjUsICAgICAvKiBSMTE4OSAgLSBBSUYxIERBQzIgRVEgQmFuZCAyIEEgKi8KKwkweEYxNDUsICAgICAvKiBSMTE5MCAgLSBBSUYxIERBQzIgRVEgQmFuZCAyIEIgKi8KKwkweDBCNzUsICAgICAvKiBSMTE5MSAgLSBBSUYxIERBQzIgRVEgQmFuZCAyIEMgKi8KKwkweDAxQzUsICAgICAvKiBSMTE5MiAgLSBBSUYxIERBQzIgRVEgQmFuZCAyIFBHICovCisJMHgxQzU4LCAgICAgLyogUjExOTMgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBBICovCisJMHhGMzczLCAgICAgLyogUjExOTQgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBCICovCisJMHgwQTU0LCAgICAgLyogUjExOTUgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBDICovCisJMHgwNTU4LCAgICAgLyogUjExOTYgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBQRyAqLworCTB4MTY4RSwgICAgIC8qIFIxMTk3ICAtIEFJRjEgREFDMiBFUSBCYW5kIDQgQSAqLworCTB4RjgyOSwgICAgIC8qIFIxMTk4ICAtIEFJRjEgREFDMiBFUSBCYW5kIDQgQiAqLworCTB4MDdBRCwgICAgIC8qIFIxMTk5ICAtIEFJRjEgREFDMiBFUSBCYW5kIDQgQyAqLworCTB4MTEwMywgICAgIC8qIFIxMjAwICAtIEFJRjEgREFDMiBFUSBCYW5kIDQgUEcgKi8KKwkweDA1NjQsICAgICAvKiBSMTIwMSAgLSBBSUYxIERBQzIgRVEgQmFuZCA1IEEgKi8KKwkweDA1NTksICAgICAvKiBSMTIwMiAgLSBBSUYxIERBQzIgRVEgQmFuZCA1IEIgKi8KKwkweDQwMDAsICAgICAvKiBSMTIwMyAgLSBBSUYxIERBQzIgRVEgQmFuZCA1IFBHICovCisJMHgwMDAwLCAgICAgLyogUjEyMDQgKi8KKwkweDAwMDAsICAgICAvKiBSMTIwNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjA2ICovCisJMHgwMDAwLCAgICAgLyogUjEyMDcgKi8KKwkweDAwMDAsICAgICAvKiBSMTIwOCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjA5ICovCisJMHgwMDAwLCAgICAgLyogUjEyMTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTIxMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjEyICovCisJMHgwMDAwLCAgICAgLyogUjEyMTMgKi8KKwkweDAwMDAsICAgICAvKiBSMTIxNCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjE1ICovCisJMHgwMDAwLCAgICAgLyogUjEyMTYgKi8KKwkweDAwMDAsICAgICAvKiBSMTIxNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMjE4ICovCisJMHgwMDAwLCAgICAgLyogUjEyMTkgKi8KKwkweDAwMDAsICAgICAvKiBSMTIyMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjIxICovCisJMHgwMDAwLCAgICAgLyogUjEyMjIgKi8KKwkweDAwMDAsICAgICAvKiBSMTIyMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMjI0ICovCisJMHgwMDAwLCAgICAgLyogUjEyMjUgKi8KKwkweDAwMDAsICAgICAvKiBSMTIyNiAqLworCTB4MDAwMCwgICAgIC8qIFIxMjI3ICovCisJMHgwMDAwLCAgICAgLyogUjEyMjggKi8KKwkweDAwMDAsICAgICAvKiBSMTIyOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjMwICovCisJMHgwMDAwLCAgICAgLyogUjEyMzEgKi8KKwkweDAwMDAsICAgICAvKiBSMTIzMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMjMzICovCisJMHgwMDAwLCAgICAgLyogUjEyMzQgKi8KKwkweDAwMDAsICAgICAvKiBSMTIzNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjM2ICovCisJMHgwMDAwLCAgICAgLyogUjEyMzcgKi8KKwkweDAwMDAsICAgICAvKiBSMTIzOCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjM5ICovCisJMHgwMDAwLCAgICAgLyogUjEyNDAgKi8KKwkweDAwMDAsICAgICAvKiBSMTI0MSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjQyICovCisJMHgwMDAwLCAgICAgLyogUjEyNDMgKi8KKwkweDAwMDAsICAgICAvKiBSMTI0NCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjQ1ICovCisJMHgwMDAwLCAgICAgLyogUjEyNDYgKi8KKwkweDAwMDAsICAgICAvKiBSMTI0NyAqLworCTB4MDAwMCwgICAgIC8qIFIxMjQ4ICovCisJMHgwMDAwLCAgICAgLyogUjEyNDkgKi8KKwkweDAwMDAsICAgICAvKiBSMTI1MCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjUxICovCisJMHgwMDAwLCAgICAgLyogUjEyNTIgKi8KKwkweDAwMDAsICAgICAvKiBSMTI1MyAqLworCTB4MDAwMCwgICAgIC8qIFIxMjU0ICovCisJMHgwMDAwLCAgICAgLyogUjEyNTUgKi8KKwkweDAwMDAsICAgICAvKiBSMTI1NiAqLworCTB4MDAwMCwgICAgIC8qIFIxMjU3ICovCisJMHgwMDAwLCAgICAgLyogUjEyNTggKi8KKwkweDAwMDAsICAgICAvKiBSMTI1OSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjYwICovCisJMHgwMDAwLCAgICAgLyogUjEyNjEgKi8KKwkweDAwMDAsICAgICAvKiBSMTI2MiAqLworCTB4MDAwMCwgICAgIC8qIFIxMjYzICovCisJMHgwMDAwLCAgICAgLyogUjEyNjQgKi8KKwkweDAwMDAsICAgICAvKiBSMTI2NSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjY2ICovCisJMHgwMDAwLCAgICAgLyogUjEyNjcgKi8KKwkweDAwMDAsICAgICAvKiBSMTI2OCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjY5ICovCisJMHgwMDAwLCAgICAgLyogUjEyNzAgKi8KKwkweDAwMDAsICAgICAvKiBSMTI3MSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjcyICovCisJMHgwMDAwLCAgICAgLyogUjEyNzMgKi8KKwkweDAwMDAsICAgICAvKiBSMTI3NCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjc1ICovCisJMHgwMDAwLCAgICAgLyogUjEyNzYgKi8KKwkweDAwMDAsICAgICAvKiBSMTI3NyAqLworCTB4MDAwMCwgICAgIC8qIFIxMjc4ICovCisJMHgwMDAwLCAgICAgLyogUjEyNzkgKi8KKwkweDAwQzAsICAgICAvKiBSMTI4MCAgLSBBSUYyIEFEQyBMZWZ0IFZvbHVtZSAqLworCTB4MDBDMCwgICAgIC8qIFIxMjgxICAtIEFJRjIgQURDIFJpZ2h0IFZvbHVtZSAqLworCTB4MDBDMCwgICAgIC8qIFIxMjgyICAtIEFJRjIgREFDIExlZnQgVm9sdW1lICovCisJMHgwMEMwLCAgICAgLyogUjEyODMgIC0gQUlGMiBEQUMgUmlnaHQgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjEyODQgKi8KKwkweDAwMDAsICAgICAvKiBSMTI4NSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjg2ICovCisJMHgwMDAwLCAgICAgLyogUjEyODcgKi8KKwkweDAwMDAsICAgICAvKiBSMTI4OCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjg5ICovCisJMHgwMDAwLCAgICAgLyogUjEyOTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTI5MSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjkyICovCisJMHgwMDAwLCAgICAgLyogUjEyOTMgKi8KKwkweDAwMDAsICAgICAvKiBSMTI5NCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjk1ICovCisJMHgwMDAwLCAgICAgLyogUjEyOTYgIC0gQUlGMiBBREMgRmlsdGVycyAqLworCTB4MDAwMCwgICAgIC8qIFIxMjk3ICovCisJMHgwMDAwLCAgICAgLyogUjEyOTggKi8KKwkweDAwMDAsICAgICAvKiBSMTI5OSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzAwICovCisJMHgwMDAwLCAgICAgLyogUjEzMDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTMwMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMzAzICovCisJMHgwMDAwLCAgICAgLyogUjEzMDQgKi8KKwkweDAwMDAsICAgICAvKiBSMTMwNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzA2ICovCisJMHgwMDAwLCAgICAgLyogUjEzMDcgKi8KKwkweDAwMDAsICAgICAvKiBSMTMwOCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzA5ICovCisJMHgwMDAwLCAgICAgLyogUjEzMTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTMxMSAqLworCTB4MDIwMCwgICAgIC8qIFIxMzEyICAtIEFJRjIgREFDIEZpbHRlcnMgKDEpICovCisJMHgwMDEwLCAgICAgLyogUjEzMTMgIC0gQUlGMiBEQUMgRmlsdGVycyAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSMTMxNCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzE1ICovCisJMHgwMDAwLCAgICAgLyogUjEzMTYgKi8KKwkweDAwMDAsICAgICAvKiBSMTMxNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMzE4ICovCisJMHgwMDAwLCAgICAgLyogUjEzMTkgKi8KKwkweDAwMDAsICAgICAvKiBSMTMyMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzIxICovCisJMHgwMDAwLCAgICAgLyogUjEzMjIgKi8KKwkweDAwMDAsICAgICAvKiBSMTMyMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMzI0ICovCisJMHgwMDAwLCAgICAgLyogUjEzMjUgKi8KKwkweDAwMDAsICAgICAvKiBSMTMyNiAqLworCTB4MDAwMCwgICAgIC8qIFIxMzI3ICovCisJMHgwMDAwLCAgICAgLyogUjEzMjggKi8KKwkweDAwMDAsICAgICAvKiBSMTMyOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzMwICovCisJMHgwMDAwLCAgICAgLyogUjEzMzEgKi8KKwkweDAwMDAsICAgICAvKiBSMTMzMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMzMzICovCisJMHgwMDAwLCAgICAgLyogUjEzMzQgKi8KKwkweDAwMDAsICAgICAvKiBSMTMzNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzM2ICovCisJMHgwMDAwLCAgICAgLyogUjEzMzcgKi8KKwkweDAwMDAsICAgICAvKiBSMTMzOCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzM5ICovCisJMHgwMDAwLCAgICAgLyogUjEzNDAgKi8KKwkweDAwMDAsICAgICAvKiBSMTM0MSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzQyICovCisJMHgwMDAwLCAgICAgLyogUjEzNDMgKi8KKwkweDAwOTgsICAgICAvKiBSMTM0NCAgLSBBSUYyIERSQyAoMSkgKi8KKwkweDA4NDUsICAgICAvKiBSMTM0NSAgLSBBSUYyIERSQyAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSMTM0NiAgLSBBSUYyIERSQyAoMykgKi8KKwkweDAwMDAsICAgICAvKiBSMTM0NyAgLSBBSUYyIERSQyAoNCkgKi8KKwkweDAwMDAsICAgICAvKiBSMTM0OCAgLSBBSUYyIERSQyAoNSkgKi8KKwkweDAwMDAsICAgICAvKiBSMTM0OSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzUwICovCisJMHgwMDAwLCAgICAgLyogUjEzNTEgKi8KKwkweDAwMDAsICAgICAvKiBSMTM1MiAqLworCTB4MDAwMCwgICAgIC8qIFIxMzUzICovCisJMHgwMDAwLCAgICAgLyogUjEzNTQgKi8KKwkweDAwMDAsICAgICAvKiBSMTM1NSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzU2ICovCisJMHgwMDAwLCAgICAgLyogUjEzNTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTM1OCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzU5ICovCisJMHgwMDAwLCAgICAgLyogUjEzNjAgKi8KKwkweDAwMDAsICAgICAvKiBSMTM2MSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzYyICovCisJMHgwMDAwLCAgICAgLyogUjEzNjMgKi8KKwkweDAwMDAsICAgICAvKiBSMTM2NCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzY1ICovCisJMHgwMDAwLCAgICAgLyogUjEzNjYgKi8KKwkweDAwMDAsICAgICAvKiBSMTM2NyAqLworCTB4MDAwMCwgICAgIC8qIFIxMzY4ICovCisJMHgwMDAwLCAgICAgLyogUjEzNjkgKi8KKwkweDAwMDAsICAgICAvKiBSMTM3MCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzcxICovCisJMHgwMDAwLCAgICAgLyogUjEzNzIgKi8KKwkweDAwMDAsICAgICAvKiBSMTM3MyAqLworCTB4MDAwMCwgICAgIC8qIFIxMzc0ICovCisJMHgwMDAwLCAgICAgLyogUjEzNzUgKi8KKwkweDAwMDAsICAgICAvKiBSMTM3NiAqLworCTB4MDAwMCwgICAgIC8qIFIxMzc3ICovCisJMHgwMDAwLCAgICAgLyogUjEzNzggKi8KKwkweDAwMDAsICAgICAvKiBSMTM3OSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzgwICovCisJMHgwMDAwLCAgICAgLyogUjEzODEgKi8KKwkweDAwMDAsICAgICAvKiBSMTM4MiAqLworCTB4MDAwMCwgICAgIC8qIFIxMzgzICovCisJMHgwMDAwLCAgICAgLyogUjEzODQgKi8KKwkweDAwMDAsICAgICAvKiBSMTM4NSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzg2ICovCisJMHgwMDAwLCAgICAgLyogUjEzODcgKi8KKwkweDAwMDAsICAgICAvKiBSMTM4OCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzg5ICovCisJMHgwMDAwLCAgICAgLyogUjEzOTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTM5MSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzkyICovCisJMHgwMDAwLCAgICAgLyogUjEzOTMgKi8KKwkweDAwMDAsICAgICAvKiBSMTM5NCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzk1ICovCisJMHgwMDAwLCAgICAgLyogUjEzOTYgKi8KKwkweDAwMDAsICAgICAvKiBSMTM5NyAqLworCTB4MDAwMCwgICAgIC8qIFIxMzk4ICovCisJMHgwMDAwLCAgICAgLyogUjEzOTkgKi8KKwkweDAwMDAsICAgICAvKiBSMTQwMCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDAxICovCisJMHgwMDAwLCAgICAgLyogUjE0MDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTQwMyAqLworCTB4MDAwMCwgICAgIC8qIFIxNDA0ICovCisJMHgwMDAwLCAgICAgLyogUjE0MDUgKi8KKwkweDAwMDAsICAgICAvKiBSMTQwNiAqLworCTB4MDAwMCwgICAgIC8qIFIxNDA3ICovCisJMHg2MzE4LCAgICAgLyogUjE0MDggIC0gQUlGMiBFUSBHYWlucyAoMSkgKi8KKwkweDYzMDAsICAgICAvKiBSMTQwOSAgLSBBSUYyIEVRIEdhaW5zICgyKSAqLworCTB4MEZDQSwgICAgIC8qIFIxNDEwICAtIEFJRjIgRVEgQmFuZCAxIEEgKi8KKwkweDA0MDAsICAgICAvKiBSMTQxMSAgLSBBSUYyIEVRIEJhbmQgMSBCICovCisJMHgwMEQ4LCAgICAgLyogUjE0MTIgIC0gQUlGMiBFUSBCYW5kIDEgUEcgKi8KKwkweDFFQjUsICAgICAvKiBSMTQxMyAgLSBBSUYyIEVRIEJhbmQgMiBBICovCisJMHhGMTQ1LCAgICAgLyogUjE0MTQgIC0gQUlGMiBFUSBCYW5kIDIgQiAqLworCTB4MEI3NSwgICAgIC8qIFIxNDE1ICAtIEFJRjIgRVEgQmFuZCAyIEMgKi8KKwkweDAxQzUsICAgICAvKiBSMTQxNiAgLSBBSUYyIEVRIEJhbmQgMiBQRyAqLworCTB4MUM1OCwgICAgIC8qIFIxNDE3ICAtIEFJRjIgRVEgQmFuZCAzIEEgKi8KKwkweEYzNzMsICAgICAvKiBSMTQxOCAgLSBBSUYyIEVRIEJhbmQgMyBCICovCisJMHgwQTU0LCAgICAgLyogUjE0MTkgIC0gQUlGMiBFUSBCYW5kIDMgQyAqLworCTB4MDU1OCwgICAgIC8qIFIxNDIwICAtIEFJRjIgRVEgQmFuZCAzIFBHICovCisJMHgxNjhFLCAgICAgLyogUjE0MjEgIC0gQUlGMiBFUSBCYW5kIDQgQSAqLworCTB4RjgyOSwgICAgIC8qIFIxNDIyICAtIEFJRjIgRVEgQmFuZCA0IEIgKi8KKwkweDA3QUQsICAgICAvKiBSMTQyMyAgLSBBSUYyIEVRIEJhbmQgNCBDICovCisJMHgxMTAzLCAgICAgLyogUjE0MjQgIC0gQUlGMiBFUSBCYW5kIDQgUEcgKi8KKwkweDA1NjQsICAgICAvKiBSMTQyNSAgLSBBSUYyIEVRIEJhbmQgNSBBICovCisJMHgwNTU5LCAgICAgLyogUjE0MjYgIC0gQUlGMiBFUSBCYW5kIDUgQiAqLworCTB4NDAwMCwgICAgIC8qIFIxNDI3ICAtIEFJRjIgRVEgQmFuZCA1IFBHICovCisJMHgwMDAwLCAgICAgLyogUjE0MjggKi8KKwkweDAwMDAsICAgICAvKiBSMTQyOSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDMwICovCisJMHgwMDAwLCAgICAgLyogUjE0MzEgKi8KKwkweDAwMDAsICAgICAvKiBSMTQzMiAqLworCTB4MDAwMCwgICAgIC8qIFIxNDMzICovCisJMHgwMDAwLCAgICAgLyogUjE0MzQgKi8KKwkweDAwMDAsICAgICAvKiBSMTQzNSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDM2ICovCisJMHgwMDAwLCAgICAgLyogUjE0MzcgKi8KKwkweDAwMDAsICAgICAvKiBSMTQzOCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDM5ICovCisJMHgwMDAwLCAgICAgLyogUjE0NDAgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ0MSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDQyICovCisJMHgwMDAwLCAgICAgLyogUjE0NDMgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ0NCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDQ1ICovCisJMHgwMDAwLCAgICAgLyogUjE0NDYgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ0NyAqLworCTB4MDAwMCwgICAgIC8qIFIxNDQ4ICovCisJMHgwMDAwLCAgICAgLyogUjE0NDkgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ1MCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDUxICovCisJMHgwMDAwLCAgICAgLyogUjE0NTIgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ1MyAqLworCTB4MDAwMCwgICAgIC8qIFIxNDU0ICovCisJMHgwMDAwLCAgICAgLyogUjE0NTUgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ1NiAqLworCTB4MDAwMCwgICAgIC8qIFIxNDU3ICovCisJMHgwMDAwLCAgICAgLyogUjE0NTggKi8KKwkweDAwMDAsICAgICAvKiBSMTQ1OSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDYwICovCisJMHgwMDAwLCAgICAgLyogUjE0NjEgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ2MiAqLworCTB4MDAwMCwgICAgIC8qIFIxNDYzICovCisJMHgwMDAwLCAgICAgLyogUjE0NjQgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ2NSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDY2ICovCisJMHgwMDAwLCAgICAgLyogUjE0NjcgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ2OCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDY5ICovCisJMHgwMDAwLCAgICAgLyogUjE0NzAgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ3MSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDcyICovCisJMHgwMDAwLCAgICAgLyogUjE0NzMgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ3NCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDc1ICovCisJMHgwMDAwLCAgICAgLyogUjE0NzYgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ3NyAqLworCTB4MDAwMCwgICAgIC8qIFIxNDc4ICovCisJMHgwMDAwLCAgICAgLyogUjE0NzkgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ4MCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDgxICovCisJMHgwMDAwLCAgICAgLyogUjE0ODIgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ4MyAqLworCTB4MDAwMCwgICAgIC8qIFIxNDg0ICovCisJMHgwMDAwLCAgICAgLyogUjE0ODUgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ4NiAqLworCTB4MDAwMCwgICAgIC8qIFIxNDg3ICovCisJMHgwMDAwLCAgICAgLyogUjE0ODggKi8KKwkweDAwMDAsICAgICAvKiBSMTQ4OSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDkwICovCisJMHgwMDAwLCAgICAgLyogUjE0OTEgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ5MiAqLworCTB4MDAwMCwgICAgIC8qIFIxNDkzICovCisJMHgwMDAwLCAgICAgLyogUjE0OTQgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ5NSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDk2ICovCisJMHgwMDAwLCAgICAgLyogUjE0OTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ5OCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDk5ICovCisJMHgwMDAwLCAgICAgLyogUjE1MDAgKi8KKwkweDAwMDAsICAgICAvKiBSMTUwMSAqLworCTB4MDAwMCwgICAgIC8qIFIxNTAyICovCisJMHgwMDAwLCAgICAgLyogUjE1MDMgKi8KKwkweDAwMDAsICAgICAvKiBSMTUwNCAqLworCTB4MDAwMCwgICAgIC8qIFIxNTA1ICovCisJMHgwMDAwLCAgICAgLyogUjE1MDYgKi8KKwkweDAwMDAsICAgICAvKiBSMTUwNyAqLworCTB4MDAwMCwgICAgIC8qIFIxNTA4ICovCisJMHgwMDAwLCAgICAgLyogUjE1MDkgKi8KKwkweDAwMDAsICAgICAvKiBSMTUxMCAqLworCTB4MDAwMCwgICAgIC8qIFIxNTExICovCisJMHgwMDAwLCAgICAgLyogUjE1MTIgKi8KKwkweDAwMDAsICAgICAvKiBSMTUxMyAqLworCTB4MDAwMCwgICAgIC8qIFIxNTE0ICovCisJMHgwMDAwLCAgICAgLyogUjE1MTUgKi8KKwkweDAwMDAsICAgICAvKiBSMTUxNiAqLworCTB4MDAwMCwgICAgIC8qIFIxNTE3ICovCisJMHgwMDAwLCAgICAgLyogUjE1MTggKi8KKwkweDAwMDAsICAgICAvKiBSMTUxOSAqLworCTB4MDAwMCwgICAgIC8qIFIxNTIwICovCisJMHgwMDAwLCAgICAgLyogUjE1MjEgKi8KKwkweDAwMDAsICAgICAvKiBSMTUyMiAqLworCTB4MDAwMCwgICAgIC8qIFIxNTIzICovCisJMHgwMDAwLCAgICAgLyogUjE1MjQgKi8KKwkweDAwMDAsICAgICAvKiBSMTUyNSAqLworCTB4MDAwMCwgICAgIC8qIFIxNTI2ICovCisJMHgwMDAwLCAgICAgLyogUjE1MjcgKi8KKwkweDAwMDAsICAgICAvKiBSMTUyOCAqLworCTB4MDAwMCwgICAgIC8qIFIxNTI5ICovCisJMHgwMDAwLCAgICAgLyogUjE1MzAgKi8KKwkweDAwMDAsICAgICAvKiBSMTUzMSAqLworCTB4MDAwMCwgICAgIC8qIFIxNTMyICovCisJMHgwMDAwLCAgICAgLyogUjE1MzMgKi8KKwkweDAwMDAsICAgICAvKiBSMTUzNCAqLworCTB4MDAwMCwgICAgIC8qIFIxNTM1ICovCisJMHgwMDAwLCAgICAgLyogUjE1MzYgIC0gREFDMSBNaXhlciBWb2x1bWVzICovCisJMHgwMDAwLCAgICAgLyogUjE1MzcgIC0gREFDMSBMZWZ0IE1peGVyIFJvdXRpbmcgKi8KKwkweDAwMDAsICAgICAvKiBSMTUzOCAgLSBEQUMxIFJpZ2h0IE1peGVyIFJvdXRpbmcgKi8KKwkweDAwMDAsICAgICAvKiBSMTUzOSAgLSBEQUMyIE1peGVyIFZvbHVtZXMgKi8KKwkweDAwMDAsICAgICAvKiBSMTU0MCAgLSBEQUMyIExlZnQgTWl4ZXIgUm91dGluZyAqLworCTB4MDAwMCwgICAgIC8qIFIxNTQxICAtIERBQzIgUmlnaHQgTWl4ZXIgUm91dGluZyAqLworCTB4MDAwMCwgICAgIC8qIFIxNTQyICAtIEFJRjEgQURDMSBMZWZ0IE1peGVyIFJvdXRpbmcgKi8KKwkweDAwMDAsICAgICAvKiBSMTU0MyAgLSBBSUYxIEFEQzEgUmlnaHQgTWl4ZXIgUm91dGluZyAqLworCTB4MDAwMCwgICAgIC8qIFIxNTQ0ICAtIEFJRjEgQURDMiBMZWZ0IE1peGVyIFJvdXRpbmcgKi8KKwkweDAwMDAsICAgICAvKiBSMTU0NSAgLSBBSUYxIEFEQzIgUmlnaHQgbWl4ZXIgUm91dGluZyAqLworCTB4MDAwMCwgICAgIC8qIFIxNTQ2ICovCisJMHgwMDAwLCAgICAgLyogUjE1NDcgKi8KKwkweDAwMDAsICAgICAvKiBSMTU0OCAqLworCTB4MDAwMCwgICAgIC8qIFIxNTQ5ICovCisJMHgwMDAwLCAgICAgLyogUjE1NTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTU1MSAqLworCTB4MDJDMCwgICAgIC8qIFIxNTUyICAtIERBQzEgTGVmdCBWb2x1bWUgKi8KKwkweDAyQzAsICAgICAvKiBSMTU1MyAgLSBEQUMxIFJpZ2h0IFZvbHVtZSAqLworCTB4MDJDMCwgICAgIC8qIFIxNTU0ICAtIERBQzIgTGVmdCBWb2x1bWUgKi8KKwkweDAyQzAsICAgICAvKiBSMTU1NSAgLSBEQUMyIFJpZ2h0IFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFIxNTU2ICAtIERBQyBTb2Z0bXV0ZSAqLworCTB4MDAwMCwgICAgIC8qIFIxNTU3ICovCisJMHgwMDAwLCAgICAgLyogUjE1NTggKi8KKwkweDAwMDAsICAgICAvKiBSMTU1OSAqLworCTB4MDAwMCwgICAgIC8qIFIxNTYwICovCisJMHgwMDAwLCAgICAgLyogUjE1NjEgKi8KKwkweDAwMDAsICAgICAvKiBSMTU2MiAqLworCTB4MDAwMCwgICAgIC8qIFIxNTYzICovCisJMHgwMDAwLCAgICAgLyogUjE1NjQgKi8KKwkweDAwMDAsICAgICAvKiBSMTU2NSAqLworCTB4MDAwMCwgICAgIC8qIFIxNTY2ICovCisJMHgwMDAwLCAgICAgLyogUjE1NjcgKi8KKwkweDAwMDIsICAgICAvKiBSMTU2OCAgLSBPdmVyc2FtcGxpbmcgKi8KKwkweDAwMDAsICAgICAvKiBSMTU2OSAgLSBTaWRldG9uZSAqLworfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCmluZGV4IDRkM2U2ZjEuLjI0N2E2YTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYwpAQCAtMTgsMTUgKzE4LDE3IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9hc29jLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L3JlZ2lzdGVycy5oPgpAQCAtNTcsOCArNTksNiBAQAogCVdNODk5NF9BSUYyX0VRX0dBSU5TXzEsCiB9OwogCi0jZGVmaW5lIFdNODk5NF9SRUdfQ0FDSEVfU0laRSAgMHg2MjEKLQogc3RydWN0IHdtODk5NF9taWNkZXQgewogCXN0cnVjdCBzbmRfc29jX2phY2sgKmphY2s7CiAJaW50IGRldDsKQEAgLTcxLDcgKzcxLDYgQEAKIAllbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2xfdHlwZTsKIAl2b2lkICpjb250cm9sX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCXUxNiByZWdfY2FjaGVbV004OTk0X1JFR19DQUNIRV9TSVpFICsgMV07CiAJaW50IHN5c2Nsa1syXTsKIAlpbnQgc3lzY2xrX3JhdGVbMl07CiAJaW50IG1jbGtbMl07CkBAIC04MSw2ICs4MCw4IEBACiAJaW50IGRhY19yYXRlc1syXTsKIAlpbnQgbHJjbGtfc2hhcmVkWzJdOwogCisJaW50IG1iY19lbmFbM107CisKIAkvKiBQbGF0Zm9ybSBkZXBlbmRhbnQgRFJDIGNvbmZpZ3VyYXRpb24gKi8KIAljb25zdCBjaGFyICoqZHJjX3RleHRzOwogCWludCBkcmNfY2ZnW1dNODk5NF9OVU1fRFJDXTsKQEAgLTkyLDE1ODggKzkzLDIyIEBACiAJaW50IHJldHVuZV9tb2JpbGVfY2ZnW1dNODk5NF9OVU1fRVFdOwogCXN0cnVjdCBzb2NfZW51bSByZXR1bmVfbW9iaWxlX2VudW07CiAKKwkvKiBQbGF0Zm9ybSBkZXBlbmRhbnQgTUJDIGNvbmZpZ3VyYXRpb24gKi8KKwlpbnQgbWJjX2NmZzsKKwljb25zdCBjaGFyICoqbWJjX3RleHRzOworCXN0cnVjdCBzb2NfZW51bSBtYmNfZW51bTsKKwogCXN0cnVjdCB3bTg5OTRfbWljZGV0IG1pY2RldFsyXTsKIAorCXdtODk1OF9taWNkZXRfY2IgamFja19jYjsKKwl2b2lkICpqYWNrX2NiX2RhdGE7CisJYm9vbCBqYWNrX2lzX21pYzsKKwlib29sIGphY2tfaXNfdmlkZW87CisKIAlpbnQgcmV2aXNpb247CiAJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGE7CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLQl1bnNpZ25lZCBzaG9ydCByZWFkYWJsZTsgICAvKiBNYXNrIG9mIHJlYWRhYmxlIGJpdHMgKi8KLQl1bnNpZ25lZCBzaG9ydCB3cml0YWJsZTsgICAvKiBNYXNrIG9mIHdyaXRhYmxlIGJpdHMgKi8KLX0gYWNjZXNzX21hc2tzW10gPSB7Ci0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMCAgICAgLSBTb2Z0d2FyZSBSZXNldCAqLwotCXsgMHgzQjM3LCAweDNCMzcgfSwgLyogUjEgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkgKi8KLQl7IDB4NkJGMCwgMHg2QkYwIH0sIC8qIFIyICAgICAtIFBvd2VyIE1hbmFnZW1lbnQgKDIpICovCi0JeyAweDNGRjAsIDB4M0ZGMCB9LCAvKiBSMyAgICAgLSBQb3dlciBNYW5hZ2VtZW50ICgzKSAqLwotCXsgMHgzRjNGLCAweDNGM0YgfSwgLyogUjQgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoNCkgKi8KLQl7IDB4M0YwRiwgMHgzRjBGIH0sIC8qIFI1ICAgICAtIFBvd2VyIE1hbmFnZW1lbnQgKDUpICovCi0JeyAweDAwM0YsIDB4MDAzRiB9LCAvKiBSNiAgICAgLSBQb3dlciBNYW5hZ2VtZW50ICg2KSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjAgKi8KLQl7IDB4MDFDMCwgMHgwMUMwIH0sIC8qIFIyMSAgICAtIElucHV0IE1peGVyICgxKSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjMgKi8KLQl7IDB4MDBERiwgMHgwMURGIH0sIC8qIFIyNCAgICAtIExlZnQgTGluZSBJbnB1dCAxJjIgVm9sdW1lICovCi0JeyAweDAwREYsIDB4MDFERiB9LCAvKiBSMjUgICAgLSBMZWZ0IExpbmUgSW5wdXQgMyY0IFZvbHVtZSAqLwotCXsgMHgwMERGLCAweDAxREYgfSwgLyogUjI2ICAgIC0gUmlnaHQgTGluZSBJbnB1dCAxJjIgVm9sdW1lICovCi0JeyAweDAwREYsIDB4MDFERiB9LCAvKiBSMjcgICAgLSBSaWdodCBMaW5lIElucHV0IDMmNCBWb2x1bWUgKi8KLQl7IDB4MDBGRiwgMHgwMUZGIH0sIC8qIFIyOCAgICAtIExlZnQgT3V0cHV0IFZvbHVtZSAqLwotCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjI5ICAgIC0gUmlnaHQgT3V0cHV0IFZvbHVtZSAqLwotCXsgMHgwMDc3LCAweDAwNzcgfSwgLyogUjMwICAgIC0gTGluZSBPdXRwdXRzIFZvbHVtZSAqLwotCXsgMHgwMDMwLCAweDAwMzAgfSwgLyogUjMxICAgIC0gSFBPVVQyIFZvbHVtZSAqLwotCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjMyICAgIC0gTGVmdCBPUEdBIFZvbHVtZSAqLwotCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjMzICAgIC0gUmlnaHQgT1BHQSBWb2x1bWUgKi8KLQl7IDB4MDA3RiwgMHgwMDdGIH0sIC8qIFIzNCAgICAtIFNQS01JWEwgQXR0ZW51YXRpb24gKi8KLQl7IDB4MDE3RiwgMHgwMTdGIH0sIC8qIFIzNSAgICAtIFNQS01JWFIgQXR0ZW51YXRpb24gKi8KLQl7IDB4MDAzRiwgMHgwMDNGIH0sIC8qIFIzNiAgICAtIFNQS09VVCBNaXhlcnMgKi8KLQl7IDB4MDAzRiwgMHgwMDNGIH0sIC8qIFIzNyAgICAtIENsYXNzRCAqLwotCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjM4ICAgIC0gU3BlYWtlciBWb2x1bWUgTGVmdCAqLwotCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjM5ICAgIC0gU3BlYWtlciBWb2x1bWUgUmlnaHQgKi8KLQl7IDB4MDBGRiwgMHgwMEZGIH0sIC8qIFI0MCAgICAtIElucHV0IE1peGVyICgyKSAqLwotCXsgMHgwMUI3LCAweDAxQjcgfSwgLyogUjQxICAgIC0gSW5wdXQgTWl4ZXIgKDMpICovCi0JeyAweDAxQjcsIDB4MDFCNyB9LCAvKiBSNDIgICAgLSBJbnB1dCBNaXhlciAoNCkgKi8KLQl7IDB4MDFDNywgMHgwMUM3IH0sIC8qIFI0MyAgICAtIElucHV0IE1peGVyICg1KSAqLwotCXsgMHgwMUM3LCAweDAxQzcgfSwgLyogUjQ0ICAgIC0gSW5wdXQgTWl4ZXIgKDYpICovCi0JeyAweDAxRkYsIDB4MDFGRiB9LCAvKiBSNDUgICAgLSBPdXRwdXQgTWl4ZXIgKDEpICovCi0JeyAweDAxRkYsIDB4MDFGRiB9LCAvKiBSNDYgICAgLSBPdXRwdXQgTWl4ZXIgKDIpICovCi0JeyAweDBGRkYsIDB4MEZGRiB9LCAvKiBSNDcgICAgLSBPdXRwdXQgTWl4ZXIgKDMpICovCi0JeyAweDBGRkYsIDB4MEZGRiB9LCAvKiBSNDggICAgLSBPdXRwdXQgTWl4ZXIgKDQpICovCi0JeyAweDBGRkYsIDB4MEZGRiB9LCAvKiBSNDkgICAgLSBPdXRwdXQgTWl4ZXIgKDUpICovCi0JeyAweDBGRkYsIDB4MEZGRiB9LCAvKiBSNTAgICAgLSBPdXRwdXQgTWl4ZXIgKDYpICovCi0JeyAweDAwMzgsIDB4MDAzOCB9LCAvKiBSNTEgICAgLSBIUE9VVDIgTWl4ZXIgKi8KLQl7IDB4MDA3NywgMHgwMDc3IH0sIC8qIFI1MiAgICAtIExpbmUgTWl4ZXIgKDEpICovCi0JeyAweDAwNzcsIDB4MDA3NyB9LCAvKiBSNTMgICAgLSBMaW5lIE1peGVyICgyKSAqLwotCXsgMHgwM0ZGLCAweDAzRkYgfSwgLyogUjU0ICAgIC0gU3BlYWtlciBNaXhlciAqLwotCXsgMHgwMEMxLCAweDAwQzEgfSwgLyogUjU1ICAgIC0gQWRkaXRpb25hbCBDb250cm9sICovCi0JeyAweDAwRjAsIDB4MDBGMCB9LCAvKiBSNTYgICAgLSBBbnRpUE9QICgxKSAqLwotCXsgMHgwMUVGLCAweDAxRUYgfSwgLyogUjU3ICAgIC0gQW50aVBPUCAoMikgKi8KLQl7IDB4MDBGRiwgMHgwMEZGIH0sIC8qIFI1OCAgICAtIE1JQ0JJQVMgKi8KLQl7IDB4MDAwRiwgMHgwMDBGIH0sIC8qIFI1OSAgICAtIExETyAxICovCi0JeyAweDAwMDcsIDB4MDAwNyB9LCAvKiBSNjAgICAgLSBMRE8gMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NSAqLwotCXsgMHg4MDAwLCAweDgwMDAgfSwgLyogUjc2ICAgIC0gQ2hhcmdlIFB1bXAgKDEpICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODAgKi8KLQl7IDB4MDMwMSwgMHgwMzAxIH0sIC8qIFI4MSAgICAtIENsYXNzIFcgKDEpICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MyAqLwotCXsgMHgzMzNGLCAweDMzM0YgfSwgLyogUjg0ICAgIC0gREMgU2Vydm8gKDEpICovCi0JeyAweDBGRUYsIDB4MEZFRiB9LCAvKiBSODUgICAgLSBEQyBTZXJ2byAoMikgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NiAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjg3ICAgIC0gREMgU2Vydm8gKDQpICovCi0JeyAweDAzMzMsIDB4MDAwMCB9LCAvKiBSODggICAgLSBEQyBTZXJ2byBSZWFkYmFjayAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1ICovCi0JeyAweDAwRUUsIDB4MDBFRSB9LCAvKiBSOTYgICAgLSBBbmFsb2d1ZSBIUCAoMSkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTUgKi8KLQl7IDB4MDAwRiwgMHgwMDAwIH0sIC8qIFIyNTYgICAtIENoaXAgUmV2aXNpb24gKi8KLQl7IDB4MDA3NCwgMHgwMDc0IH0sIC8qIFIyNTcgICAtIENvbnRyb2wgSW50ZXJmYWNlICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjU4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjU5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjYwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjYxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjYyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjYzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjcwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjcxICovCi0JeyAweDgwN0YsIDB4ODM3RiB9LCAvKiBSMjcyICAgLSBXcml0ZSBTZXF1ZW5jZXIgQ3RybCAoMSkgKi8KLQl7IDB4MDE3RiwgMHgwMDAwIH0sIC8qIFIyNzMgICAtIFdyaXRlIFNlcXVlbmNlciBDdHJsICgyKSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUxMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUxMSAqLwotCXsgMHgwMDFGLCAweDAwMUYgfSwgLyogUjUxMiAgIC0gQUlGMSBDbG9ja2luZyAoMSkgKi8KLQl7IDB4MDAzRiwgMHgwMDNGIH0sIC8qIFI1MTMgICAtIEFJRjEgQ2xvY2tpbmcgKDIpICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTE0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTE1ICovCi0JeyAweDAwMUYsIDB4MDAxRiB9LCAvKiBSNTE2ICAgLSBBSUYyIENsb2NraW5nICgxKSAqLwotCXsgMHgwMDNGLCAweDAwM0YgfSwgLyogUjUxNyAgIC0gQUlGMiBDbG9ja2luZyAoMikgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MTkgKi8KLQl7IDB4MDAxRiwgMHgwMDFGIH0sIC8qIFI1MjAgICAtIENsb2NraW5nICgxKSAqLwotCXsgMHgwNzc3LCAweDA3NzcgfSwgLyogUjUyMSAgIC0gQ2xvY2tpbmcgKDIpICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTIyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTIzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTI0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTI1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTI2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTI3ICovCi0JeyAweDAwRkYsIDB4MDBGRiB9LCAvKiBSNTI4ICAgLSBBSUYxIFJhdGUgKi8KLQl7IDB4MDBGRiwgMHgwMEZGIH0sIC8qIFI1MjkgICAtIEFJRjIgUmF0ZSAqLwotCXsgMHgwMDBGLCAweDAwMDAgfSwgLyogUjUzMCAgIC0gUmF0ZSBTdGF0dXMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDMgKi8KLQl7IDB4MDAwNywgMHgwMDA3IH0sIC8qIFI1NDQgICAtIEZMTDEgQ29udHJvbCAoMSkgKi8KLQl7IDB4M0Y3NywgMHgzRjc3IH0sIC8qIFI1NDUgICAtIEZMTDEgQ29udHJvbCAoMikgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFI1NDYgICAtIEZMTDEgQ29udHJvbCAoMykgKi8KLQl7IDB4N0ZFRiwgMHg3RkVGIH0sIC8qIFI1NDcgICAtIEZMTDEgQ29udHJvbCAoNCkgKi8KLQl7IDB4MUZEQiwgMHgxRkRCIH0sIC8qIFI1NDggICAtIEZMTDEgQ29udHJvbCAoNSkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzUgKi8KLQl7IDB4MDAwNywgMHgwMDA3IH0sIC8qIFI1NzYgICAtIEZMTDIgQ29udHJvbCAoMSkgKi8KLQl7IDB4M0Y3NywgMHgzRjc3IH0sIC8qIFI1NzcgICAtIEZMTDIgQ29udHJvbCAoMikgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFI1NzggICAtIEZMTDIgQ29udHJvbCAoMykgKi8KLQl7IDB4N0ZFRiwgMHg3RkVGIH0sIC8qIFI1NzkgICAtIEZMTDIgQ29udHJvbCAoNCkgKi8KLQl7IDB4MUZEQiwgMHgxRkRCIH0sIC8qIFI1ODAgICAtIEZMTDIgQ29udHJvbCAoNSkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjcgKi8KLQl7IDB4RTFGOCwgMHhFMUY4IH0sIC8qIFI3NjggICAtIEFJRjEgQ29udHJvbCAoMSkgKi8KLQl7IDB4Q0QxRiwgMHhDRDFGIH0sIC8qIFI3NjkgICAtIEFJRjEgQ29udHJvbCAoMikgKi8KLQl7IDB4RjAwMCwgMHhGMDAwIH0sIC8qIFI3NzAgICAtIEFJRjEgTWFzdGVyL1NsYXZlICovCi0JeyAweDAxRjAsIDB4MDFGMCB9LCAvKiBSNzcxICAgLSBBSUYxIEJDTEsgKi8KLQl7IDB4MEZGRiwgMHgwRkZGIH0sIC8qIFI3NzIgICAtIEFJRjFBREMgTFJDTEsgKi8KLQl7IDB4MEZGRiwgMHgwRkZGIH0sIC8qIFI3NzMgICAtIEFJRjFEQUMgTFJDTEsgKi8KLQl7IDB4MDAwMywgMHgwMDAzIH0sIC8qIFI3NzQgICAtIEFJRjFEQUMgRGF0YSAqLwotCXsgMHgwMDAzLCAweDAwMDMgfSwgLyogUjc3NSAgIC0gQUlGMUFEQyBEYXRhICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzc2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzc3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzc4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzc5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzgwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzgxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzgyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzgzICovCi0JeyAweEYxRjgsIDB4RjFGOCB9LCAvKiBSNzg0ICAgLSBBSUYyIENvbnRyb2wgKDEpICovCi0JeyAweEZEMUYsIDB4RkQxRiB9LCAvKiBSNzg1ICAgLSBBSUYyIENvbnRyb2wgKDIpICovCi0JeyAweEYwMDAsIDB4RjAwMCB9LCAvKiBSNzg2ICAgLSBBSUYyIE1hc3Rlci9TbGF2ZSAqLwotCXsgMHgwMUYwLCAweDAxRjAgfSwgLyogUjc4NyAgIC0gQUlGMiBCQ0xLICovCi0JeyAweDBGRkYsIDB4MEZGRiB9LCAvKiBSNzg4ICAgLSBBSUYyQURDIExSQ0xLICovCi0JeyAweDBGRkYsIDB4MEZGRiB9LCAvKiBSNzg5ICAgLSBBSUYyREFDIExSQ0xLICovCi0JeyAweDAwMDMsIDB4MDAwMyB9LCAvKiBSNzkwICAgLSBBSUYyREFDIERhdGEgKi8KLQl7IDB4MDAwMywgMHgwMDAzIH0sIC8qIFI3OTEgICAtIEFJRjJBREMgRGF0YSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDAxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDA0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDA3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDEwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDEzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDE2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDE5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAyMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMjEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDIyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAyMyAqLwotCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjEwMjQgIC0gQUlGMSBBREMxIExlZnQgVm9sdW1lICovCi0JeyAweDAwRkYsIDB4MDFGRiB9LCAvKiBSMTAyNSAgLSBBSUYxIEFEQzEgUmlnaHQgVm9sdW1lICovCi0JeyAweDAwRkYsIDB4MDFGRiB9LCAvKiBSMTAyNiAgLSBBSUYxIERBQzEgTGVmdCBWb2x1bWUgKi8KLQl7IDB4MDBGRiwgMHgwMUZGIH0sIC8qIFIxMDI3ICAtIEFJRjEgREFDMSBSaWdodCBWb2x1bWUgKi8KLQl7IDB4MDBGRiwgMHgwMUZGIH0sIC8qIFIxMDI4ICAtIEFJRjEgQURDMiBMZWZ0IFZvbHVtZSAqLwotCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjEwMjkgIC0gQUlGMSBBREMyIFJpZ2h0IFZvbHVtZSAqLwotCXsgMHgwMEZGLCAweDAxRkYgfSwgLyogUjEwMzAgIC0gQUlGMSBEQUMyIExlZnQgVm9sdW1lICovCi0JeyAweDAwRkYsIDB4MDFGRiB9LCAvKiBSMTAzMSAgLSBBSUYxIERBQzIgUmlnaHQgVm9sdW1lICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDM0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDM3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzkgKi8KLQl7IDB4RjgwMCwgMHhGODAwIH0sIC8qIFIxMDQwICAtIEFJRjEgQURDMSBGaWx0ZXJzICovCi0JeyAweDc4MDAsIDB4NzgwMCB9LCAvKiBSMTA0MSAgLSBBSUYxIEFEQzIgRmlsdGVycyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA0NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQ2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA0NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQ5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA1MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDUyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA1MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDU1ICovCi0JeyAweDAyQjYsIDB4MDJCNiB9LCAvKiBSMTA1NiAgLSBBSUYxIERBQzEgRmlsdGVycyAoMSkgKi8KLQl7IDB4M0YwMCwgMHgzRjAwIH0sIC8qIFIxMDU3ICAtIEFJRjEgREFDMSBGaWx0ZXJzICgyKSAqLwotCXsgMHgwMkI2LCAweDAyQjYgfSwgLyogUjEwNTggIC0gQUlGMSBEQUMyIEZpbHRlcnMgKDEpICovCi0JeyAweDNGMDAsIDB4M0YwMCB9LCAvKiBSMTA1OSAgLSBBSUYxIERBQzIgRmlsdGVycyAoMikgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDcyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwODAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDgxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwODMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDg0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwODYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDg3ICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTA4OCAgLSBBSUYxIERSQzEgKDEpICovCi0JeyAweDFGRkYsIDB4MUZGRiB9LCAvKiBSMTA4OSAgLSBBSUYxIERSQzEgKDIpICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTA5MCAgLSBBSUYxIERSQzEgKDMpICovCi0JeyAweDA3RkYsIDB4MDdGRiB9LCAvKiBSMTA5MSAgLSBBSUYxIERSQzEgKDQpICovCi0JeyAweDAzRkYsIDB4MDNGRiB9LCAvKiBSMTA5MiAgLSBBSUYxIERSQzEgKDUpICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwOTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDk1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwOTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDk4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMDAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTAxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEwMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMDMgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTA0ICAtIEFJRjEgRFJDMiAoMSkgKi8KLQl7IDB4MUZGRiwgMHgxRkZGIH0sIC8qIFIxMTA1ICAtIEFJRjEgRFJDMiAoMikgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTA2ICAtIEFJRjEgRFJDMiAoMykgKi8KLQl7IDB4MDdGRiwgMHgwN0ZGIH0sIC8qIFIxMTA3ICAtIEFJRjEgRFJDMiAoNCkgKi8KLQl7IDB4MDNGRiwgMHgwM0ZGIH0sIC8qIFIxMTA4ICAtIEFJRjEgRFJDMiAoNSkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTA5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTEyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTE1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTE4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTIxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTI0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTI3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTMwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTMzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTM2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTM5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQ1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQ4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTUxICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE1MiAgLSBBSUYxIERBQzEgRVEgR2FpbnMgKDEpICovCi0JeyAweEZGQzAsIDB4RkZDMCB9LCAvKiBSMTE1MyAgLSBBSUYxIERBQzEgRVEgR2FpbnMgKDIpICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE1NCAgLSBBSUYxIERBQzEgRVEgQmFuZCAxIEEgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTU1ICAtIEFJRjEgREFDMSBFUSBCYW5kIDEgQiAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNTYgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMSBQRyAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNTcgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMiBBICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE1OCAgLSBBSUYxIERBQzEgRVEgQmFuZCAyIEIgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTU5ICAtIEFJRjEgREFDMSBFUSBCYW5kIDIgQyAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNjAgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMiBQRyAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNjEgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMyBBICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE2MiAgLSBBSUYxIERBQzEgRVEgQmFuZCAzIEIgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTYzICAtIEFJRjEgREFDMSBFUSBCYW5kIDMgQyAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNjQgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMyBQRyAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNjUgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBBICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE2NiAgLSBBSUYxIERBQzEgRVEgQmFuZCA0IEIgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTY3ICAtIEFJRjEgREFDMSBFUSBCYW5kIDQgQyAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNjggIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBQRyAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExNjkgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNSBBICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE3MCAgLSBBSUYxIERBQzEgRVEgQmFuZCA1IEIgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTcxICAtIEFJRjEgREFDMSBFUSBCYW5kIDUgUEcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTcyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTc1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTc4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExODAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTgxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE4MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExODMgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTg0ICAtIEFJRjEgREFDMiBFUSBHYWlucyAoMSkgKi8KLQl7IDB4RkZDMCwgMHhGRkMwIH0sIC8qIFIxMTg1ICAtIEFJRjEgREFDMiBFUSBHYWlucyAoMikgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTg2ICAtIEFJRjEgREFDMiBFUSBCYW5kIDEgQSAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExODcgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMSBCICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE4OCAgLSBBSUYxIERBQzIgRVEgQmFuZCAxIFBHICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE4OSAgLSBBSUYxIERBQzIgRVEgQmFuZCAyIEEgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTkwICAtIEFJRjEgREFDMiBFUSBCYW5kIDIgQiAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExOTEgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMiBDICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE5MiAgLSBBSUYxIERBQzIgRVEgQmFuZCAyIFBHICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE5MyAgLSBBSUYxIERBQzIgRVEgQmFuZCAzIEEgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTk0ICAtIEFJRjEgREFDMiBFUSBCYW5kIDMgQiAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExOTUgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBDICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE5NiAgLSBBSUYxIERBQzIgRVEgQmFuZCAzIFBHICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTE5NyAgLSBBSUYxIERBQzIgRVEgQmFuZCA0IEEgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMTk4ICAtIEFJRjEgREFDMiBFUSBCYW5kIDQgQiAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjExOTkgIC0gQUlGMSBEQUMyIEVRIEJhbmQgNCBDICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTIwMCAgLSBBSUYxIERBQzIgRVEgQmFuZCA0IFBHICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTIwMSAgLSBBSUYxIERBQzIgRVEgQmFuZCA1IEEgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMjAyICAtIEFJRjEgREFDMiBFUSBCYW5kIDUgQiAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjEyMDMgIC0gQUlGMSBEQUMyIEVRIEJhbmQgNSBQRyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjA1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIwNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjA4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIwOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjExICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjE0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjE3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjIwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjIzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjI2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjI5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjMyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjM1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjM4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQ0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQ3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjUwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjUzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjU2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjU5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjYyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjY1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjY4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjcxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjc0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjc3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzkgKi8KLQl7IDB4MDBGRiwgMHgwMUZGIH0sIC8qIFIxMjgwICAtIEFJRjIgQURDIExlZnQgVm9sdW1lICovCi0JeyAweDAwRkYsIDB4MDFGRiB9LCAvKiBSMTI4MSAgLSBBSUYyIEFEQyBSaWdodCBWb2x1bWUgKi8KLQl7IDB4MDBGRiwgMHgwMUZGIH0sIC8qIFIxMjgyICAtIEFJRjIgREFDIExlZnQgVm9sdW1lICovCi0JeyAweDAwRkYsIDB4MDFGRiB9LCAvKiBSMTI4MyAgLSBBSUYyIERBQyBSaWdodCBWb2x1bWUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjg0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyODYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjg3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyODkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjkwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjkzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTUgKi8KLQl7IDB4RjgwMCwgMHhGODAwIH0sIC8qIFIxMjk2ICAtIEFJRjIgQURDIEZpbHRlcnMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjk3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMTEgKi8KLQl7IDB4MDJCNiwgMHgwMkI2IH0sIC8qIFIxMzEyICAtIEFJRjIgREFDIEZpbHRlcnMgKDEpICovCi0JeyAweDNGMDAsIDB4M0YwMCB9LCAvKiBSMTMxMyAgLSBBSUYyIERBQyBGaWx0ZXJzICgyKSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM0MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNDEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM0MyAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjEzNDQgIC0gQUlGMiBEUkMgKDEpICovCi0JeyAweDFGRkYsIDB4MUZGRiB9LCAvKiBSMTM0NSAgLSBBSUYyIERSQyAoMikgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxMzQ2ICAtIEFJRjIgRFJDICgzKSAqLwotCXsgMHgwN0ZGLCAweDA3RkYgfSwgLyogUjEzNDcgIC0gQUlGMiBEUkMgKDQpICovCi0JeyAweDAzRkYsIDB4MDNGRiB9LCAvKiBSMTM0OCAgLSBBSUYyIERSQyAoNSkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQ5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzUyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzU1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzU4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzYxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzY0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzY3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzcwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzczICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzc2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzc5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzgyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzg1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzg4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzkxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzk0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzk3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDAwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDAzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDA2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwNyAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MDggIC0gQUlGMiBFUSBHYWlucyAoMSkgKi8KLQl7IDB4RkZDMCwgMHhGRkMwIH0sIC8qIFIxNDA5ICAtIEFJRjIgRVEgR2FpbnMgKDIpICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTQxMCAgLSBBSUYyIEVRIEJhbmQgMSBBICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTQxMSAgLSBBSUYyIEVRIEJhbmQgMSBCICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTQxMiAgLSBBSUYyIEVRIEJhbmQgMSBQRyAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MTMgIC0gQUlGMiBFUSBCYW5kIDIgQSAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MTQgIC0gQUlGMiBFUSBCYW5kIDIgQiAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MTUgIC0gQUlGMiBFUSBCYW5kIDIgQyAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MTYgIC0gQUlGMiBFUSBCYW5kIDIgUEcgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxNDE3ICAtIEFJRjIgRVEgQmFuZCAzIEEgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxNDE4ICAtIEFJRjIgRVEgQmFuZCAzIEIgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxNDE5ICAtIEFJRjIgRVEgQmFuZCAzIEMgKi8KLQl7IDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIxNDIwICAtIEFJRjIgRVEgQmFuZCAzIFBHICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTQyMSAgLSBBSUYyIEVRIEJhbmQgNCBBICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTQyMiAgLSBBSUYyIEVRIEJhbmQgNCBCICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTQyMyAgLSBBSUYyIEVRIEJhbmQgNCBDICovCi0JeyAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMTQyNCAgLSBBSUYyIEVRIEJhbmQgNCBQRyAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MjUgIC0gQUlGMiBFUSBCYW5kIDUgQSAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MjYgIC0gQUlGMiBFUSBCYW5kIDUgQiAqLwotCXsgMHhGRkZGLCAweEZGRkYgfSwgLyogUjE0MjcgIC0gQUlGMiBFUSBCYW5kIDUgUEcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDI4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQyOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDMxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDM0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDM3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQ2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQ5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDUyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDU1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDU4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDYxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDY0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDY3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDcwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3MSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDczICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3NCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDc2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDc5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDgyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDg1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDg4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4OSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDkxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5MiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDk0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5NSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDk3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5OCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTAwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTAzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDUgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTA2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwNyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTA5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxMCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTEyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxMyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTE1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxNiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTE4ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxOSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjAgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTIxICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyMiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjMgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTI0ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyNSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjYgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTI3ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyOCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjkgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTMwICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzMSAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MzIgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTMzICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzNCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MzUgKi8KLQl7IDB4MDFFRiwgMHgwMUVGIH0sIC8qIFIxNTM2ICAtIERBQzEgTWl4ZXIgVm9sdW1lcyAqLwotCXsgMHgwMDM3LCAweDAwMzcgfSwgLyogUjE1MzcgIC0gREFDMSBMZWZ0IE1peGVyIFJvdXRpbmcgKi8KLQl7IDB4MDAzNywgMHgwMDM3IH0sIC8qIFIxNTM4ICAtIERBQzEgUmlnaHQgTWl4ZXIgUm91dGluZyAqLwotCXsgMHgwMUVGLCAweDAxRUYgfSwgLyogUjE1MzkgIC0gREFDMiBNaXhlciBWb2x1bWVzICovCi0JeyAweDAwMzcsIDB4MDAzNyB9LCAvKiBSMTU0MCAgLSBEQUMyIExlZnQgTWl4ZXIgUm91dGluZyAqLwotCXsgMHgwMDM3LCAweDAwMzcgfSwgLyogUjE1NDEgIC0gREFDMiBSaWdodCBNaXhlciBSb3V0aW5nICovCi0JeyAweDAwMDMsIDB4MDAwMyB9LCAvKiBSMTU0MiAgLSBBSUYxIEFEQzEgTGVmdCBNaXhlciBSb3V0aW5nICovCi0JeyAweDAwMDMsIDB4MDAwMyB9LCAvKiBSMTU0MyAgLSBBSUYxIEFEQzEgUmlnaHQgTWl4ZXIgUm91dGluZyAqLwotCXsgMHgwMDAzLCAweDAwMDMgfSwgLyogUjE1NDQgIC0gQUlGMSBBREMyIExlZnQgTWl4ZXIgUm91dGluZyAqLwotCXsgMHgwMDAzLCAweDAwMDMgfSwgLyogUjE1NDUgIC0gQUlGMSBBREMyIFJpZ2h0IG1peGVyIFJvdXRpbmcgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQ2ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU0NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NDggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQ5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU1MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NTEgKi8KLQl7IDB4MDJGRiwgMHgwM0ZGIH0sIC8qIFIxNTUyICAtIERBQzEgTGVmdCBWb2x1bWUgKi8KLQl7IDB4MDJGRiwgMHgwM0ZGIH0sIC8qIFIxNTUzICAtIERBQzEgUmlnaHQgVm9sdW1lICovCi0JeyAweDAyRkYsIDB4MDNGRiB9LCAvKiBSMTU1NCAgLSBEQUMyIExlZnQgVm9sdW1lICovCi0JeyAweDAyRkYsIDB4MDNGRiB9LCAvKiBSMTU1NSAgLSBEQUMyIFJpZ2h0IFZvbHVtZSAqLwotCXsgMHgwMDAzLCAweDAwMDMgfSwgLyogUjE1NTYgIC0gREFDIFNvZnRtdXRlICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU1NyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NTggKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTU5ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2MCAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjEgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTYyICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2MyAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjQgKi8KLQl7IDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTY1ICovCi0JeyAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2NiAqLwotCXsgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjcgKi8KLQl7IDB4MDAwMywgMHgwMDAzIH0sIC8qIFIxNTY4ICAtIE92ZXJzYW1wbGluZyAqLwotCXsgMHgwM0MzLCAweDAzQzMgfSwgLyogUjE1NjkgIC0gU2lkZXRvbmUgKi8KLX07Ci0KIHN0YXRpYyBpbnQgd204OTk0X3JlYWRhYmxlKHVuc2lnbmVkIGludCByZWcpCiB7CiAJc3dpdGNoIChyZWcpIHsKQEAgLTE2OTYsMTQgKzEzMSwxNCBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAocmVnID49IEFSUkFZX1NJWkUoYWNjZXNzX21hc2tzKSkKKwlpZiAocmVnID49IFdNODk5NF9DQUNIRV9TSVpFKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gYWNjZXNzX21hc2tzW3JlZ10ucmVhZGFibGUgIT0gMDsKKwlyZXR1cm4gd204OTk0X2FjY2Vzc19tYXNrc1tyZWddLnJlYWRhYmxlICE9IDA7CiB9CiAKIHN0YXRpYyBpbnQgd204OTk0X3ZvbGF0aWxlKHVuc2lnbmVkIGludCByZWcpCiB7Ci0JaWYgKHJlZyA+PSBXTTg5OTRfUkVHX0NBQ0hFX1NJWkUpCisJaWYgKHJlZyA+PSBXTTg5OTRfQ0FDSEVfU0laRSkKIAkJcmV0dXJuIDE7CiAKIAlzd2l0Y2ggKHJlZykgewpAQCAtMTcxNCw2ICsxNDksOCBAQAogCWNhc2UgV004OTk0X1JBVEVfU1RBVFVTOgogCWNhc2UgV004OTk0X0xET18xOgogCWNhc2UgV004OTk0X0xET18yOgorCWNhc2UgV004OTU4X0RTUDJfRVhFQ0NPTlRST0w6CisJY2FzZSBXTTg5NThfTUlDX0RFVEVDVF8zOgogCQlyZXR1cm4gMTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKQEAgLTE3MjMsMTQgKzE2MCwxNiBAQAogc3RhdGljIGludCB3bTg5OTRfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAogCXVuc2lnbmVkIGludCB2YWx1ZSkKIHsKLQlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCByZXQ7CiAKIAlCVUdfT04ocmVnID4gV004OTk0X01BWF9SRUdJU1RFUik7CiAKLQlpZiAoIXdtODk5NF92b2xhdGlsZShyZWcpKQotCQl3bTg5OTQtPnJlZ19jYWNoZVtyZWddID0gdmFsdWU7Ci0KLQlkZXZfZGJnKGNvZGVjLT5kZXYsICIweCV4ID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJaWYgKCF3bTg5OTRfdm9sYXRpbGUocmVnKSkgeworCQlyZXQgPSBzbmRfc29jX2NhY2hlX3dyaXRlKGNvZGVjLCByZWcsIHZhbHVlKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQ2FjaGUgd3JpdGUgdG8gJXggZmFpbGVkOiAlZFxuIiwKKwkJCQlyZWcsIHJldCk7CisJfQogCiAJcmV0dXJuIHdtODk5NF9yZWdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgcmVnLCB2YWx1ZSk7CiB9CkBAIC0xNzM4LDE0ICsxNzcsMjIgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgd204OTk0X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCXVuc2lnbmVkIGludCByZWcpCiB7Ci0JdTE2ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCXVuc2lnbmVkIGludCB2YWw7CisJaW50IHJldDsKIAogCUJVR19PTihyZWcgPiBXTTg5OTRfTUFYX1JFR0lTVEVSKTsKIAotCWlmICh3bTg5OTRfdm9sYXRpbGUocmVnKSkKLQkJcmV0dXJuIHdtODk5NF9yZWdfcmVhZChjb2RlYy0+Y29udHJvbF9kYXRhLCByZWcpOwotCWVsc2UKLQkJcmV0dXJuIHJlZ19jYWNoZVtyZWddOworCWlmICghd204OTk0X3ZvbGF0aWxlKHJlZykgJiYgd204OTk0X3JlYWRhYmxlKHJlZykgJiYKKwkgICAgcmVnIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUpIHsKKwkJcmV0ID0gc25kX3NvY19jYWNoZV9yZWFkKGNvZGVjLCByZWcsICZ2YWwpOworCQlpZiAocmV0ID49IDApCisJCQlyZXR1cm4gdmFsOworCQllbHNlCisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJDYWNoZSByZWFkIGZyb20gJXggZmFpbGVkOiAlZFxuIiwKKwkJCQlyZWcsIHJldCk7CisJfQorCisJcmV0dXJuIHdtODk5NF9yZWdfcmVhZChjb2RlYy0+Y29udHJvbF9kYXRhLCByZWcpOwogfQogCiBzdGF0aWMgaW50IGNvbmZpZ3VyZV9haWZfY2xvY2soc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgYWlmKQpAQCAtMTgzNyw3ICsyODQsNyBAQAogCiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0NMT0NLSU5HXzEsIFdNODk5NF9TWVNDTEtfU1JDLCBuZXcpOwogCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKCZjb2RlYy0+ZGFwbSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4NjQsNiArMzExLDE5IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHNpZGV0b25lX2hwZiA9CiAJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9TSURFVE9ORSwgNywgNywgc2lkZXRvbmVfaHBmX3RleHQpOwogCitzdGF0aWMgY29uc3QgY2hhciAqYWRjX2hwZl90ZXh0W10gPSB7CisJIkhpRmkiLCAiVm9pY2UgMSIsICJWb2ljZSAyIiwgIlZvaWNlIDMiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZjFhZGMxX2hwZiA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9BSUYxX0FEQzFfRklMVEVSUywgMTMsIDQsIGFkY19ocGZfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmMWFkYzJfaHBmID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X0FJRjFfQURDMl9GSUxURVJTLCAxMywgNCwgYWRjX2hwZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWYyYWRjX2hwZiA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9BSUYyX0FEQ19GSUxURVJTLCAxMywgNCwgYWRjX2hwZl90ZXh0KTsKKwogc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGFpZl90bHYsIDAsIDYwMCwgMCk7CiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGlnaXRhbF90bHYsIC03MjAwLCA3NSwgMSk7CiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoc3RfdGx2LCAtMzYwMCwgMzAwLCAwKTsKQEAgLTIwNzEsMjEgKzUzMSwyNTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKmFpZmRhY19zcmNfdGV4dFtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmFpZl9jaGFuX3NyY190ZXh0W10gPSB7CiAJIkxlZnQiLCAiUmlnaHQiCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZjFhZGNsX3NyYyA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9BSUYxX0NPTlRST0xfMSwgMTUsIDIsIGFpZl9jaGFuX3NyY190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWYxYWRjcl9zcmMgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfQUlGMV9DT05UUk9MXzEsIDE0LCAyLCBhaWZfY2hhbl9zcmNfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmMmFkY2xfc3JjID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X0FJRjJfQ09OVFJPTF8xLCAxNSwgMiwgYWlmX2NoYW5fc3JjX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZjJhZGNyX3NyYyA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9BSUYyX0NPTlRST0xfMSwgMTQsIDIsIGFpZl9jaGFuX3NyY190ZXh0KTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWYxZGFjbF9zcmMgPQotCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfQUlGMV9DT05UUk9MXzIsIDE1LCAyLCBhaWZkYWNfc3JjX3RleHQpOworCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfQUlGMV9DT05UUk9MXzIsIDE1LCAyLCBhaWZfY2hhbl9zcmNfdGV4dCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmMWRhY3Jfc3JjID0KLQlTT0NfRU5VTV9TSU5HTEUoV004OTk0X0FJRjFfQ09OVFJPTF8yLCAxNCwgMiwgYWlmZGFjX3NyY190ZXh0KTsKKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X0FJRjFfQ09OVFJPTF8yLCAxNCwgMiwgYWlmX2NoYW5fc3JjX3RleHQpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZjJkYWNsX3NyYyA9Ci0JU09DX0VOVU1fU0lOR0xFKFdNODk5NF9BSUYyX0NPTlRST0xfMiwgMTUsIDIsIGFpZmRhY19zcmNfdGV4dCk7CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9BSUYyX0NPTlRST0xfMiwgMTUsIDIsIGFpZl9jaGFuX3NyY190ZXh0KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWYyZGFjcl9zcmMgPQotCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfQUlGMl9DT05UUk9MXzIsIDE0LCAyLCBhaWZkYWNfc3JjX3RleHQpOworCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfQUlGMl9DT05UUk9MXzIsIDE0LCAyLCBhaWZfY2hhbl9zcmNfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpvc3JfdGV4dFtdID0geworCSJMb3cgUG93ZXIiLCAiSGlnaCBQZXJmb3JtYW5jZSIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhY19vc3IgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfT1ZFUlNBTVBMSU5HLCAwLCAyLCBvc3JfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWRjX29zciA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9PVkVSU0FNUExJTkcsIDEsIDIsIG9zcl90ZXh0KTsKKworc3RhdGljIHZvaWQgd204OTU4X21iY19hcHBseShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBtYmMsIGludCBzdGFydCkKK3sKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhID0gd204OTk0LT5wZGF0YTsKKwlpbnQgcHdyX3JlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSk7CisJaW50IGVuYSwgcmVnLCBhaWYsIGk7CisKKwlzd2l0Y2ggKG1iYykgeworCWNhc2UgMDoKKwkJcHdyX3JlZyAmPSAoV004OTk0X0FJRjFEQUMxTF9FTkEgfCBXTTg5OTRfQUlGMURBQzFSX0VOQSk7CisJCWFpZiA9IDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcHdyX3JlZyAmPSAoV004OTk0X0FJRjFEQUMyTF9FTkEgfCBXTTg5OTRfQUlGMURBQzJSX0VOQSk7CisJCWFpZiA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHdyX3JlZyAmPSAoV004OTk0X0FJRjJEQUNMX0VOQSB8IFdNODk5NF9BSUYyREFDUl9FTkEpOworCQlhaWYgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFdlIGNhbiBvbmx5IGVuYWJsZSB0aGUgTUJDIGlmIHRoZSBBSUYgaXMgZW5hYmxlZCBhbmQgd2UKKwkgKiB3YW50IGl0IHRvIGJlIGVuYWJsZWQuICovCisJZW5hID0gcHdyX3JlZyAmJiB3bTg5OTQtPm1iY19lbmFbbWJjXTsKKworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTU4X0RTUDJfUFJPR1JBTSk7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJNQkMgJWQgc3RhcnR1cDogJWQsIHBvd2VyOiAleCwgRFNQOiAleFxuIiwKKwkJbWJjLCBzdGFydCwgcHdyX3JlZywgcmVnKTsKKworCWlmIChzdGFydCAmJiBlbmEpIHsKKwkJLyogSWYgdGhlIERTUCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhlbiBub29wICovCisJCWlmIChyZWcgJiBXTTg5NThfRFNQMl9FTkEpCisJCQlyZXR1cm47CisKKwkJLyogU3dpdGNoIHRoZSBjbG9jayBvdmVyIHRvIHRoZSBhcHByb3ByaWF0ZSBBSUYgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0NMT0NLSU5HXzEsCisJCQkJICAgIFdNODk1OF9EU1AyQ0xLX1NSQyB8IFdNODk1OF9EU1AyQ0xLX0VOQSwKKwkJCQkgICAgYWlmIDw8IFdNODk1OF9EU1AyQ0xLX1NSQ19TSElGVCB8CisJCQkJICAgIFdNODk1OF9EU1AyQ0xLX0VOQSk7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU4X0RTUDJfUFJPR1JBTSwKKwkJCQkgICAgV004OTU4X0RTUDJfRU5BLCBXTTg5NThfRFNQMl9FTkEpOworCisJCS8qIElmIHdlJ3ZlIGdvdCB1c2VyIHN1cHBsaWVkIE1CQyBzZXR0aW5ncyB1c2UgdGhlbSAqLworCQlpZiAocGRhdGEgJiYgcGRhdGEtPm51bV9tYmNfY2ZncykgeworCQkJc3RydWN0IHdtODk1OF9tYmNfY2ZnICpjZmcKKwkJCQk9ICZwZGF0YS0+bWJjX2NmZ3Nbd204OTk0LT5tYmNfY2ZnXTsKKworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2ZnLT5jb2VmZl9yZWdzKTsgaSsrKQorCQkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGkgKyBXTTg5NThfTUJDX0JBTkRfMV9LXzEsCisJCQkJCSAgICAgIGNmZy0+Y29lZmZfcmVnc1tpXSk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNmZy0+Y3V0b2ZmX3JlZ3MpOyBpKyspCisJCQkJc25kX3NvY193cml0ZShjb2RlYywKKwkJCQkJICAgICAgaSArIFdNODk1OF9NQkNfQkFORF8yX0xPV0VSX0NVVE9GRl9DMV8xLAorCQkJCQkgICAgICBjZmctPmN1dG9mZl9yZWdzW2ldKTsKKwkJfQorCisJCS8qIFJ1biB0aGUgRFNQICovCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk1OF9EU1AyX0VYRUNDT05UUk9MLAorCQkJICAgICAgV004OTU4X0RTUDJfUlVOUik7CisKKwkJLyogQW5kIHdlJ3JlIG9mZiEgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU4X0RTUDJfQ09ORklHLAorCQkJCSAgICBXTTg5NThfTUJDX0VOQSB8IFdNODk1OF9NQkNfU0VMX01BU0ssCisJCQkJICAgIG1iYyA8PCBXTTg5NThfTUJDX1NFTF9TSElGVCB8CisJCQkJICAgIFdNODk1OF9NQkNfRU5BKTsKKwl9IGVsc2UgeworCQkvKiBJZiB0aGUgRFNQIGlzIGFscmVhZHkgc3RvcHBlZCB0aGVuIG5vb3AgKi8KKwkJaWYgKCEocmVnICYgV004OTU4X0RTUDJfRU5BKSkKKwkJCXJldHVybjsKKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NThfRFNQMl9DT05GSUcsCisJCQkJICAgIFdNODk1OF9NQkNfRU5BLCAwKTsJCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1OF9EU1AyX1BST0dSQU0sCisJCQkJICAgIFdNODk1OF9EU1AyX0VOQSwgMCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9DTE9DS0lOR18xLAorCQkJCSAgICBXTTg5NThfRFNQMkNMS19FTkEsIDApOworCX0KK30KKworc3RhdGljIGludCB3bTg5NThfYWlmX2V2KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlpbnQgbWJjOworCisJc3dpdGNoICh3LT5zaGlmdCkgeworCWNhc2UgMTM6CisJY2FzZSAxMjoKKwkJbWJjID0gMjsKKwkJYnJlYWs7CisJY2FzZSAxMToKKwljYXNlIDEwOgorCQltYmMgPSAxOworCQlicmVhazsKKwljYXNlIDk6CisJY2FzZSA4OgorCQltYmMgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQl3bTg5NThfbWJjX2FwcGx5KGNvZGVjLCBtYmMsIDEpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJd204OTU4X21iY19hcHBseShjb2RlYywgbWJjLCAwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTU4X3B1dF9tYmNfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+cGRhdGE7CisJaW50IHZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJaW50IHJlZzsKKworCS8qIERvbid0IGFsbG93IG9uIHRoZSBmbHkgcmVjb25maWd1cmF0aW9uICovCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfQ0xPQ0tJTkdfMSk7CisJaWYgKHJlZyA8IDAgfHwgcmVnICYgV004OTU4X0RTUDJDTEtfRU5BKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHZhbHVlID49IHBkYXRhLT5udW1fbWJjX2NmZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJd204OTk0LT5tYmNfY2ZnID0gdmFsdWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NThfZ2V0X21iY19lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdtODk5NC0+bWJjX2NmZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1OF9tYmNfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU47CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTU4X21iY19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCWludCBtYmMgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gd204OTk0LT5tYmNfZW5hW21iY107CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NThfbWJjX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJaW50IG1iYyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCWludCBpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTQtPm1iY19lbmEpOyBpKyspIHsKKwkJaWYgKG1iYyAhPSBpICYmIHdtODk5NC0+bWJjX2VuYVtpXSkgeworCQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTUJDICVkIGFjdGl2ZSBhbHJlYWR5XG4iLCBtYmMpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKworCXdtODk5NC0+bWJjX2VuYVttYmNdID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwl3bTg5NThfbWJjX2FwcGx5KGNvZGVjLCBtYmMsIHdtODk5NC0+bWJjX2VuYVttYmNdKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNODk1OF9NQkNfU1dJVENIKHhuYW1lLCB4dmFsKSB7XAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9ICh4bmFtZSksIFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSxcCisJLmluZm8gPSB3bTg5NThfbWJjX2luZm8sIFwKKwkuZ2V0ID0gd204OTU4X21iY19nZXQsIC5wdXQgPSB3bTg5NThfbWJjX3B1dCwgXAorCS5wcml2YXRlX3ZhbHVlID0geHZhbCB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5OTRfc25kX2NvbnRyb2xzW10gPSB7CiBTT0NfRE9VQkxFX1JfVExWKCJBSUYxQURDMSBWb2x1bWUiLCBXTTg5OTRfQUlGMV9BREMxX0xFRlRfVk9MVU1FLApAQCAtMjA5OCwxMCArNzg5LDE1IEBACiAJCSBXTTg5OTRfQUlGMl9BRENfUklHSFRfVk9MVU1FLAogCQkgMSwgMTE5LCAwLCBkaWdpdGFsX3RsdiksCiAKK1NPQ19FTlVNKCJBSUYxQURDTCBTb3VyY2UiLCBhaWYxYWRjbF9zcmMpLAorU09DX0VOVU0oIkFJRjFBRENSIFNvdXJjZSIsIGFpZjFhZGNyX3NyYyksCitTT0NfRU5VTSgiQUlGMkFEQ0wgU291cmNlIiwgYWlmMmFkY2xfc3JjKSwKK1NPQ19FTlVNKCJBSUYyQURDUiBTb3VyY2UiLCBhaWYyYWRjcl9zcmMpLAorCiBTT0NfRU5VTSgiQUlGMURBQ0wgU291cmNlIiwgYWlmMWRhY2xfc3JjKSwKIFNPQ19FTlVNKCJBSUYxREFDUiBTb3VyY2UiLCBhaWYxZGFjcl9zcmMpLAotU09DX0VOVU0oIkFJRjJEQUNMIFNvdXJjZSIsIGFpZjFkYWNsX3NyYyksCi1TT0NfRU5VTSgiQUlGMkRBQ1IgU291cmNlIiwgYWlmMWRhY3Jfc3JjKSwKK1NPQ19FTlVNKCJBSUYyREFDTCBTb3VyY2UiLCBhaWYyZGFjbF9zcmMpLAorU09DX0VOVU0oIkFJRjJEQUNSIFNvdXJjZSIsIGFpZjJkYWNyX3NyYyksCiAKIFNPQ19ET1VCTEVfUl9UTFYoIkFJRjFEQUMxIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzFfTEVGVF9WT0xVTUUsCiAJCSBXTTg5OTRfQUlGMV9EQUMxX1JJR0hUX1ZPTFVNRSwgMSwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKQEAgLTIxNDAsNiArODM2LDE4IEBACiBTT0NfRU5VTSgiU2lkZXRvbmUgSFBGIE11eCIsIHNpZGV0b25lX2hwZiksCiBTT0NfU0lOR0xFKCJTaWRldG9uZSBIUEYgU3dpdGNoIiwgV004OTk0X1NJREVUT05FLCA2LCAxLCAwKSwKIAorU09DX0VOVU0oIkFJRjFBREMxIEhQRiBNb2RlIiwgYWlmMWFkYzFfaHBmKSwKK1NPQ19ET1VCTEUoIkFJRjFBREMxIEhQRiBTd2l0Y2giLCBXTTg5OTRfQUlGMV9BREMxX0ZJTFRFUlMsIDEyLCAxMSwgMSwgMCksCisKK1NPQ19FTlVNKCJBSUYxQURDMiBIUEYgTW9kZSIsIGFpZjFhZGMyX2hwZiksCitTT0NfRE9VQkxFKCJBSUYxQURDMiBIUEYgU3dpdGNoIiwgV004OTk0X0FJRjFfQURDMl9GSUxURVJTLCAxMiwgMTEsIDEsIDApLAorCitTT0NfRU5VTSgiQUlGMkFEQyBIUEYgTW9kZSIsIGFpZjJhZGNfaHBmKSwKK1NPQ19ET1VCTEUoIkFJRjJBREMgSFBGIFN3aXRjaCIsIFdNODk5NF9BSUYyX0FEQ19GSUxURVJTLCAxMiwgMTEsIDEsIDApLAorCitTT0NfRU5VTSgiQURDIE9TUiIsIGFkY19vc3IpLAorU09DX0VOVU0oIkRBQyBPU1IiLCBkYWNfb3NyKSwKKwogU09DX0RPVUJMRV9SX1RMVigiREFDMSBWb2x1bWUiLCBXTTg5OTRfREFDMV9MRUZUX1ZPTFVNRSwKIAkJIFdNODk5NF9EQUMxX1JJR0hUX1ZPTFVNRSwgMSwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKIFNPQ19ET1VCTEVfUigiREFDMSBTd2l0Y2giLCBXTTg5OTRfREFDMV9MRUZUX1ZPTFVNRSwKQEAgLTIxNjIsMTUgKzg3MCwxNSBAQAogCiBTT0NfU0lOR0xFX1RMVigiQUlGMURBQzEgM0QgU3RlcmVvIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzFfRklMVEVSU18yLAogCSAgICAgICAxMCwgMTUsIDAsIHdtODk5NF8zZF90bHYpLAotU09DX1NJTkdMRSgiQUlGMURBQzEgM0QgU3RlcmVvIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RBQzJfRklMVEVSU18yLAorU09DX1NJTkdMRSgiQUlGMURBQzEgM0QgU3RlcmVvIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RBQzFfRklMVEVSU18yLAogCSAgIDgsIDEsIDApLAogU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMyIDNEIFN0ZXJlbyBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMyX0ZJTFRFUlNfMiwKIAkgICAgICAgMTAsIDE1LCAwLCB3bTg5OTRfM2RfdGx2KSwKIFNPQ19TSU5HTEUoIkFJRjFEQUMyIDNEIFN0ZXJlbyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EQUMyX0ZJTFRFUlNfMiwKIAkgICA4LCAxLCAwKSwKLVNPQ19TSU5HTEVfVExWKCJBSUYyREFDIDNEIFN0ZXJlbyBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMxX0ZJTFRFUlNfMiwKK1NPQ19TSU5HTEVfVExWKCJBSUYyREFDIDNEIFN0ZXJlbyBWb2x1bWUiLCBXTTg5OTRfQUlGMl9EQUNfRklMVEVSU18yLAogCSAgICAgICAxMCwgMTUsIDAsIHdtODk5NF8zZF90bHYpLAotU09DX1NJTkdMRSgiQUlGMkRBQyAzRCBTdGVyZW8gU3dpdGNoIiwgV004OTk0X0FJRjFfREFDMl9GSUxURVJTXzIsCitTT0NfU0lOR0xFKCJBSUYyREFDIDNEIFN0ZXJlbyBTd2l0Y2giLCBXTTg5OTRfQUlGMl9EQUNfRklMVEVSU18yLAogCSAgIDgsIDEsIDApLAogfTsKIApAQCAtMjIwOSw2ICs5MTcsMTMgQEAKIAkgICAgICAgZXFfdGx2KSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NThfc25kX2NvbnRyb2xzW10gPSB7CitTT0NfU0lOR0xFX1RMVigiQUlGMyBCb29zdCBWb2x1bWUiLCBXTTg5NThfQUlGM19DT05UUk9MXzIsIDEwLCAzLCAwLCBhaWZfdGx2KSwKK1dNODk1OF9NQkNfU1dJVENIKCJBSUYxREFDMSBNQkMgU3dpdGNoIiwgMCksCitXTTg5NThfTUJDX1NXSVRDSCgiQUlGMURBQzIgTUJDIFN3aXRjaCIsIDEpLAorV004OTU4X01CQ19TV0lUQ0goIkFJRjJEQUMgTUJDIFN3aXRjaCIsIDIpLAorfTsKKwogc3RhdGljIGludCBjbGtfc3lzX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7CkBAIC0yMjI4LDYgKzk0Myw3IEBACiAKIHN0YXRpYyB2b2lkIHdtODk5NF91cGRhdGVfY2xhc3NfdyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlpbnQgZW5hYmxlID0gMTsKIAlpbnQgc291cmNlID0gMDsgIC8qIEdDQyBmbG93IGFuYWx5c2lzIGNhbid0IHRyYWNrIGVuYWJsZSAqLwogCWludCByZWcsIHJlZ19yOwpAQCAtMjI3OCwxMSArOTk0LDEzIEBACiAJCQkJICAgIFdNODk5NF9DUF9EWU5fUFdSIHwKIAkJCQkgICAgV004OTk0X0NQX0RZTl9TUkNfU0VMX01BU0ssCiAJCQkJICAgIHNvdXJjZSB8IFdNODk5NF9DUF9EWU5fUFdSKTsKKwkJd204OTk0LT5odWJzLmNsYXNzX3cgPSB0cnVlOwogCQkKIAl9IGVsc2UgewogCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJDbGFzcyBXIGRpc2FibGVkXG4iKTsKIAkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0NMQVNTX1dfMSwKIAkJCQkgICAgV004OTk0X0NQX0RZTl9QV1IsIDApOworCQl3bTg5OTQtPmh1YnMuY2xhc3NfdyA9IGZhbHNlOwogCX0KIH0KIApAQCAtMjUxMiwxNCArMTIzMCw0NyBAQAogCVNPQ19EQVBNX0VOVU0oIkFJRjJBREMgTXV4IiwgYWlmMmFkY19lbnVtKTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmFpZjNhZGNfdGV4dFtdID0gewotCSJBSUYxQURDREFUIiwgIkFJRjJBRENEQVQiLCAiQUlGMkRBQ0RBVCIsCisJIkFJRjFBRENEQVQiLCAiQUlGMkFEQ0RBVCIsICJBSUYyREFDREFUIiwgIk1vbm8gUENNIiwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmM2FkY19lbnVtID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204OTk0X2FpZjNhZGNfZW51bSA9CiAJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzYsIDMsIDMsIGFpZjNhZGNfdGV4dCk7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYzYWRjX211eCA9Ci0JU09DX0RBUE1fRU5VTSgiQUlGM0FEQyBNdXgiLCBhaWYzYWRjX2VudW0pOworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk5NF9haWYzYWRjX211eCA9CisJU09DX0RBUE1fRU5VTSgiQUlGM0FEQyBNdXgiLCB3bTg5OTRfYWlmM2FkY19lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTg5NThfYWlmM2FkY19lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNiwgMywgNCwgYWlmM2FkY190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk1OF9haWYzYWRjX211eCA9CisJU09DX0RBUE1fRU5VTSgiQUlGM0FEQyBNdXgiLCB3bTg5NThfYWlmM2FkY19lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm1vbm9fcGNtX291dF90ZXh0W10gPSB7CisJIk5vbmUiLCAiQUlGMkFEQ0wiLCAiQUlGMkFEQ1IiLCAKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbW9ub19wY21fb3V0X2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF82LCA5LCAzLCBtb25vX3BjbV9vdXRfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBtb25vX3BjbV9vdXRfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJNb25vIFBDTSBPdXQgTXV4IiwgbW9ub19wY21fb3V0X2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqYWlmMmRhY19zcmNfdGV4dFtdID0geworCSJBSUYyIiwgIkFJRjMiLAorfTsKKworLyogTm90ZSB0aGF0IHRoZXNlIHR3byBjb250cm9sIHNob3VsZG4ndCBiZSBzaW11bHRhbmVvdXNseSBzd2l0Y2hlZCB0byBBSUYzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZjJkYWNsX3NyY19lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNiwgNywgMiwgYWlmMmRhY19zcmNfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYyZGFjbF9zcmNfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBSUYyREFDTCBNdXgiLCBhaWYyZGFjbF9zcmNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmMmRhY3Jfc3JjX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF82LCA4LCAyLCBhaWYyZGFjX3NyY190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjJkYWNyX3NyY19tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRjJEQUNSIE11eCIsIGFpZjJkYWNyX3NyY19lbnVtKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9kYXBtX3dpZGdldHNbXSA9IHsKIFNORF9TT0NfREFQTV9JTlBVVCgiRE1JQzFEQVQiKSwKQEAgLTI1NDAsMTkgKzEyOTEsMjMgQEAKIAkJICAgICAwLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCA5LCAwKSwKIFNORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMVIiLCAiQUlGMSBDYXB0dXJlIiwKIAkJICAgICAwLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCA4LCAwKSwKLVNORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFEQUMxTCIsIE5VTEwsIDAsCi0JCSAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCA5LCAwKSwKLVNORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFEQUMxUiIsIE5VTEwsIDAsCi0JCSAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCA4LCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU5fRSgiQUlGMURBQzFMIiwgTlVMTCwgMCwKKwkJICAgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgOSwgMCwgd204OTU4X2FpZl9ldiwKKwkJICAgICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK1NORF9TT0NfREFQTV9BSUZfSU5fRSgiQUlGMURBQzFSIiwgTlVMTCwgMCwKKwkJICAgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgOCwgMCwgd204OTU4X2FpZl9ldiwKKwkJICAgICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKIAogU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMyTCIsICJBSUYxIENhcHR1cmUiLAogCQkgICAgIDAsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDExLCAwKSwKIFNORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMlIiLCAiQUlGMSBDYXB0dXJlIiwKIAkJICAgICAwLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAxMCwgMCksCi1TTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxREFDMkwiLCBOVUxMLCAwLAotCQkgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMTEsIDApLAotU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMURBQzJSIiwgTlVMTCwgMCwKLQkJICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDEwLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU5fRSgiQUlGMURBQzJMIiwgTlVMTCwgMCwKKwkJICAgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMTEsIDAsIHdtODk1OF9haWZfZXYsCisJCSAgICAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCitTTkRfU09DX0RBUE1fQUlGX0lOX0UoIkFJRjFEQUMyUiIsIE5VTEwsIDAsCisJCSAgICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDEwLCAwLCB3bTg5NThfYWlmX2V2LAorCQkgICAgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAogCiBTTkRfU09DX0RBUE1fTUlYRVIoIkFJRjFBREMxTCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKIAkJICAgYWlmMWFkYzFsX21peCwgQVJSQVlfU0laRShhaWYxYWRjMWxfbWl4KSksCkBAIC0yNTgxLDEwICsxMzM2LDEyIEBACiAJCSAgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMTMsIDApLAogU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjJBRENSIiwgTlVMTCwgMCwKIAkJICAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAxMiwgMCksCi1TTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYyREFDTCIsIE5VTEwsIDAsCi0JCSAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAxMywgMCksCi1TTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYyREFDUiIsIE5VTEwsIDAsCi0JCSAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAxMiwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOX0UoIkFJRjJEQUNMIiwgTlVMTCwgMCwKKwkJICAgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMTMsIDAsIHdtODk1OF9haWZfZXYsCisJCSAgICAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKK1NORF9TT0NfREFQTV9BSUZfSU5fRSgiQUlGMkRBQ1IiLCBOVUxMLCAwLAorCQkgICAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAxMiwgMCwgd204OTU4X2FpZl9ldiwKKwkJICAgICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAogCiBTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxREFDREFUIiwgIkFJRjEgUGxheWJhY2siLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAogU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMkRBQ0RBVCIsICJBSUYyIFBsYXliYWNrIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKQEAgLTI1OTMsNyArMTM1MCw2IEBACiBTTkRfU09DX0RBUE1fTVVYKCJBSUYxREFDIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZjFkYWNfbXV4KSwKIFNORF9TT0NfREFQTV9NVVgoIkFJRjJEQUMgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmMmRhY19tdXgpLAogU05EX1NPQ19EQVBNX01VWCgiQUlGMkFEQyBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhaWYyYWRjX211eCksCi1TTkRfU09DX0RBUE1fTVVYKCJBSUYzQURDIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZjNhZGNfbXV4KSwKIAogU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGM0RBQ0RBVCIsICJBSUYzIFBsYXliYWNrIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKIFNORF9TT0NfREFQTV9BSUZfSU4oIkFJRjNBRENEQVQiLCAiQUlGMyBDYXB0dXJlIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKQEAgLTI2MzEsOCArMTM4NywxOCBAQAogU05EX1NPQ19EQVBNX1BPU1QoIkRlYnVnIGxvZyIsIHBvc3RfZXYpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgaW50ZXJjb25bXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5OTRfc3BlY2lmaWNfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fTVVYKCJBSUYzQURDIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJndtODk5NF9haWYzYWRjX211eCksCit9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTU4X2RhcG1fd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX01VWCgiTW9ubyBQQ00gT3V0IE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJm1vbm9fcGNtX291dF9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiQUlGMkRBQ0wgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmMmRhY2xfc3JjX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJBSUYyREFDUiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhaWYyZGFjcl9zcmNfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkFJRjNBREMgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmd204OTU4X2FpZjNhZGNfbXV4KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uW10gPSB7CiAJeyAiQ0xLX1NZUyIsIE5VTEwsICJBSUYxQ0xLIiwgY2hlY2tfY2xrX3N5cyB9LAogCXsgIkNMS19TWVMiLCBOVUxMLCAiQUlGMkNMSyIsIGNoZWNrX2Nsa19zeXMgfSwKIApAQCAtMjc0MCw5ICsxNTA2LDYgQEAKIAl7ICJBSUYxREFDMkwiLCBOVUxMLCAiQUlGMURBQyBNdXgiIH0sCiAJeyAiQUlGMURBQzJSIiwgTlVMTCwgIkFJRjFEQUMgTXV4IiB9LAogCi0JeyAiQUlGMkRBQ0wiLCBOVUxMLCAiQUlGMkRBQyBNdXgiIH0sCi0JeyAiQUlGMkRBQ1IiLCBOVUxMLCAiQUlGMkRBQyBNdXgiIH0sCi0KIAl7ICJBSUYxREFDIE11eCIsICJBSUYxREFDREFUIiwgIkFJRjFEQUNEQVQiIH0sCiAJeyAiQUlGMURBQyBNdXgiLCAiQUlGM0RBQ0RBVCIsICJBSUYzREFDREFUIiB9LAogCXsgIkFJRjJEQUMgTXV4IiwgIkFJRjJEQUNEQVQiLCAiQUlGMkRBQ0RBVCIgfSwKQEAgLTI4MTUsNiArMTU3OCwyNiBAQAogCXsgIlJpZ2h0IEhlYWRwaG9uZSBNdXgiLCAiREFDIiwgIkRBQzFSIiB9LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTk0X2ludGVyY29uW10gPSB7CisJeyAiQUlGMkRBQ0wiLCBOVUxMLCAiQUlGMkRBQyBNdXgiIH0sCisJeyAiQUlGMkRBQ1IiLCBOVUxMLCAiQUlGMkRBQyBNdXgiIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSB3bTg5NThfaW50ZXJjb25bXSA9IHsKKwl7ICJBSUYyREFDTCIsIE5VTEwsICJBSUYyREFDTCBNdXgiIH0sCisJeyAiQUlGMkRBQ1IiLCBOVUxMLCAiQUlGMkRBQ1IgTXV4IiB9LAorCisJeyAiQUlGMkRBQ0wgTXV4IiwgIkFJRjIiLCAiQUlGMkRBQyBNdXgiIH0sCisJeyAiQUlGMkRBQ0wgTXV4IiwgIkFJRjMiLCAiQUlGM0RBQ0RBVCIgfSwKKwl7ICJBSUYyREFDUiBNdXgiLCAiQUlGMiIsICJBSUYyREFDIE11eCIgfSwKKwl7ICJBSUYyREFDUiBNdXgiLCAiQUlGMyIsICJBSUYzREFDREFUIiB9LAorCisJeyAiTW9ubyBQQ00gT3V0IE11eCIsICJBSUYyQURDTCIsICJBSUYyQURDTCIgfSwKKwl7ICJNb25vIFBDTSBPdXQgTXV4IiwgIkFJRjJBRENSIiwgIkFJRjJBRENSIiB9LAorCisJeyAiQUlGM0FEQyBNdXgiLCAiTW9ubyBQQ00iLCAiTW9ubyBQQ00gT3V0IE11eCIgfSwKK307CisKIC8qIFRoZSBzaXplIGluIGJpdHMgb2YgdGhlIEZMTCBkaXZpZGUgbXVsdGlwbGllZCBieSAxMAogICogdG8gYWxsb3cgcm91bmRpbmcgbGF0ZXIgKi8KICNkZWZpbmUgRklYRURfRkxMX1NJWkUgKCgxIDw8IDE2KSAqIDEwKQpAQCAtMjkzMCw2ICsxNzEzLDcgQEAKIAkJLyogQWxsb3cgbm8gc291cmNlIHNwZWNpZmljYXRpb24gd2hlbiBzdG9wcGluZyAqLwogCQlpZiAoZnJlcV9vdXQpCiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3JjID0gd204OTk0LT5mbGxbaWRdLnNyYzsKIAkJYnJlYWs7CiAJY2FzZSBXTTg5OTRfRkxMX1NSQ19NQ0xLMToKIAljYXNlIFdNODk5NF9GTExfU1JDX01DTEsyOgpAQCAtMzA5NCw2ICsxODc4LDcgQEAKIHN0YXRpYyBpbnQgd204OTk0X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7CisJc3RydWN0IHdtODk5NCAqY29udHJvbCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAogCXN3aXRjaCAobGV2ZWwpIHsKQEAgLTMxMDcsMTYgKzE4OTIsMzYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgewotCQkJLyogVHdlYWsgREMgc2Vydm8gYW5kIERTUCBjb25maWd1cmF0aW9uIGZvcgotCQkJICogaW1wcm92ZWQgcGVyZm9ybWFuY2UuICovCi0JCQlpZiAod204OTk0LT5yZXZpc2lvbiA8IDQpIHsKLQkJCQkvKiBUd2VhayBEQyBzZXJ2byBhbmQgRFNQIGNvbmZpZ3VyYXRpb24gZm9yCi0JCQkJICogaW1wcm92ZWQgcGVyZm9ybWFuY2UuICovCi0JCQkJc25kX3NvY193cml0ZShjb2RlYywgMHgxMDIsIDB4Myk7Ci0JCQkJc25kX3NvY193cml0ZShjb2RlYywgMHg1NiwgMHgzKTsKLQkJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCAweDgxNywgMCk7Ci0JCQkJc25kX3NvY193cml0ZShjb2RlYywgMHgxMDIsIDApOworCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQlwbV9ydW50aW1lX2dldF9zeW5jKGNvZGVjLT5kZXYpOworCisJCQlzd2l0Y2ggKGNvbnRyb2wtPnR5cGUpIHsKKwkJCWNhc2UgV004OTk0OgorCQkJCWlmICh3bTg5OTQtPnJldmlzaW9uIDwgNCkgeworCQkJCQkvKiBUd2VhayBEQyBzZXJ2byBhbmQgRFNQCisJCQkJCSAqIGNvbmZpZ3VyYXRpb24gZm9yIGltcHJvdmVkCisJCQkJCSAqIHBlcmZvcm1hbmNlLiAqLworCQkJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCAweDEwMiwgMHgzKTsKKwkJCQkJc25kX3NvY193cml0ZShjb2RlYywgMHg1NiwgMHgzKTsKKwkJCQkJc25kX3NvY193cml0ZShjb2RlYywgMHg4MTcsIDApOworCQkJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCAweDEwMiwgMCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFdNODk1ODoKKwkJCQlpZiAod204OTk0LT5yZXZpc2lvbiA9PSAwKSB7CisJCQkJCS8qIE9wdGltaXNlIHBlcmZvcm1hbmNlIGZvciByZXYgQSAqLworCQkJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCAweDEwMiwgMHgzKTsKKwkJCQkJc25kX3NvY193cml0ZShjb2RlYywgMHhjYiwgMHg4MSk7CisJCQkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIDB4ODE3LCAwKTsKKwkJCQkJc25kX3NvY193cml0ZShjb2RlYywgMHgxMDIsIDApOworCisJCQkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsCisJCQkJCQkJICAgIFdNODk1OF9DSEFSR0VfUFVNUF8yLAorCQkJCQkJCSAgICBXTTg5NThfQ1BfRElTQ0gsCisJCQkJCQkJICAgIFdNODk1OF9DUF9ESVNDSCk7CisJCQkJfQorCQkJCWJyZWFrOwogCQkJfQogCiAJCQkvKiBEaXNjaGFyZ2UgTElORU9VVDEgJiAyICovCkBAIC0zMTUxLDcgKzE5NTYsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKLQkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19TVEFOREJZKSB7CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19TVEFOREJZKSB7CiAJCQkvKiBTd2l0Y2ggb3ZlciB0byBzdGFydHVwIGJpYXNlcyAqLwogCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FOVElQT1BfMiwKIAkJCQkJICAgIFdNODk5NF9CSUFTX1NSQyB8CkBAIC0zMTgzLDE2ICsxOTg4LDE5IEBACiAJCQkJCSAgICBXTTg5OTRfU1RBUlRVUF9CSUFTX0VOQSB8CiAJCQkJCSAgICBXTTg5OTRfVk1JRF9CVUZfRU5BIHwKIAkJCQkJICAgIFdNODk5NF9WTUlEX1JBTVBfTUFTSywgMCk7CisKKwkJCXBtX3J1bnRpbWVfcHV0KGNvZGVjLT5kZXYpOwogCQl9CiAJCWJyZWFrOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB3bTg5OTRfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCBmbXQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0ICpjb250cm9sID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAlpbnQgbXNfcmVnOwogCWludCBhaWYxX3JlZzsKIAlpbnQgbXMgPSAwOwpAQCAtMzI3Nyw2ICsyMDg1LDEzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCS8qIFRoZSBBSUYyIGZvcm1hdCBjb25maWd1cmF0aW9uIG5lZWRzIHRvIGJlIG1pcnJvcmVkIHRvIEFJRjMKKwkgKiBvbiBXTTg5NTggaWYgaXQncyBpbiB1c2Ugc28ganVzdCBkbyBpdCBhbGwgdGhlIHRpbWUuICovCisJaWYgKGNvbnRyb2wtPnR5cGUgPT0gV004OTU4ICYmIGRhaS0+aWQgPT0gMikKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU4X0FJRjNfQ09OVFJPTF8xLAorCQkJCSAgICBXTTg5OTRfQUlGMV9MUkNMS19JTlYgfAorCQkJCSAgICBXTTg5NThfQUlGM19GTVRfTUFTSywgYWlmMSk7CisKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBhaWYxX3JlZywKIAkJCSAgICBXTTg5OTRfQUlGMV9CQ0xLX0lOViB8IFdNODk5NF9BSUYxX0xSQ0xLX0lOViB8CiAJCQkgICAgV004OTk0X0FJRjFfRk1UX01BU0ssCkBAIC0zMzE3LDEyICsyMTMyLDE1IEBACiAJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0ICpjb250cm9sID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCWludCBhaWYxX3JlZzsKKwlpbnQgYWlmMl9yZWc7CiAJaW50IGJjbGtfcmVnOwogCWludCBscmNsa19yZWc7CiAJaW50IHJhdGVfcmVnOwogCWludCBhaWYxID0gMDsKKwlpbnQgYWlmMiA9IDA7CiAJaW50IGJjbGsgPSAwOwogCWludCBscmNsayA9IDA7CiAJaW50IHJhdGVfdmFsID0gMDsKQEAgLTMzMzMsNiArMjE1MSw3IEBACiAJc3dpdGNoIChkYWktPmlkKSB7CiAJY2FzZSAxOgogCQlhaWYxX3JlZyA9IFdNODk5NF9BSUYxX0NPTlRST0xfMTsKKwkJYWlmMl9yZWcgPSBXTTg5OTRfQUlGMV9DT05UUk9MXzI7CiAJCWJjbGtfcmVnID0gV004OTk0X0FJRjFfQkNMSzsKIAkJcmF0ZV9yZWcgPSBXTTg5OTRfQUlGMV9SQVRFOwogCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyB8fApAQCAtMzM0NSw2ICsyMTY0LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSAyOgogCQlhaWYxX3JlZyA9IFdNODk5NF9BSUYyX0NPTlRST0xfMTsKKwkJYWlmMl9yZWcgPSBXTTg5OTRfQUlGMl9DT05UUk9MXzI7CiAJCWJjbGtfcmVnID0gV004OTk0X0FJRjJfQkNMSzsKIAkJcmF0ZV9yZWcgPSBXTTg5OTRfQUlGMl9SQVRFOwogCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyB8fApAQCAtMzM1NSw2ICsyMTc1LDE0IEBACiAJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJBSUYyIHVzaW5nIHNwbGl0IExSQ0xLXG4iKTsKIAkJfQogCQlicmVhazsKKwljYXNlIDM6CisJCXN3aXRjaCAoY29udHJvbC0+dHlwZSkgeworCQljYXNlIFdNODk1ODoKKwkJCWFpZjFfcmVnID0gV004OTU4X0FJRjNfQ09OVFJPTF8xOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwkJfQogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTMzOTIsNiArMjIyMCwxMCBAQAogCWRldl9kYmcoZGFpLT5kZXYsICJBSUYlZENMSyBpcyAlZEh6LCB0YXJnZXQgQkNMSyAlZEh6XG4iLAogCQlkYWktPmlkLCB3bTg5OTQtPmFpZmNsa1tpZF0sIGJjbGtfcmF0ZSk7CiAKKwlpZiAocGFyYW1zX2NoYW5uZWxzKHBhcmFtcykgPT0gMSAmJgorCSAgICAoc25kX3NvY19yZWFkKGNvZGVjLCBhaWYxX3JlZykgJiAweDE4KSA9PSAweDE4KQorCQlhaWYyIHw9IFdNODk5NF9BSUYxX01PTk87CisKIAlpZiAod204OTk0LT5haWZjbGtbaWRdID09IDApIHsKIAkJZGV2X2VycihkYWktPmRldiwgIkFJRiVkQ0xLIG5vdCBjb25maWd1cmVkXG4iLCBkYWktPmlkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNDM1LDYgKzIyNjcsNyBAQAogCQlscmNsaywgYmNsa19yYXRlIC8gbHJjbGspOwogCiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYWlmMV9yZWcsIFdNODk5NF9BSUYxX1dMX01BU0ssIGFpZjEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGFpZjJfcmVnLCBXTTg5OTRfQUlGMV9NT05PLCBhaWYyKTsKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBiY2xrX3JlZywgV004OTk0X0FJRjFfQkNMS19ESVZfTUFTSywgYmNsayk7CiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgbHJjbGtfcmVnLCBXTTg5OTRfQUlGMURBQ19SQVRFX01BU0ssCiAJCQkgICAgbHJjbGspOwpAQCAtMzQ1OCw2ICsyMjkxLDQ3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgd204OTk0X2FpZjNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQkgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0ICpjb250cm9sID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKKwlpbnQgYWlmMV9yZWc7CisJaW50IGFpZjEgPSAwOworCisJc3dpdGNoIChkYWktPmlkKSB7CisJY2FzZSAzOgorCQlzd2l0Y2ggKGNvbnRyb2wtPnR5cGUpIHsKKwkJY2FzZSBXTTg5NTg6CisJCQlhaWYxX3JlZyA9IFdNODk1OF9BSUYzX0NPTlRST0xfMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQlhaWYxIHw9IDB4MjA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWFpZjEgfD0gMHg0MDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJYWlmMSB8PSAweDYwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYWlmMV9yZWcsIFdNODk5NF9BSUYxX1dMX01BU0ssIGFpZjEpOworfQorCiBzdGF0aWMgaW50IHdtODk5NF9haWZfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwgaW50IG11dGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKQEAgLTM1MzksNiArMjQxMyw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5OTRfYWlmM19kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB3bTg5OTRfYWlmM19od19wYXJhbXMsCiAJLnNldF90cmlzdGF0ZQk9IHdtODk5NF9zZXRfdHJpc3RhdGUsCiB9OwogCkBAIC0zNTQ4LDE0ICsyNDIzLDE0IEBACiAJCS5pZCA9IDEsCiAJCS5wbGF5YmFjayA9IHsKIAkJCS5zdHJlYW1fbmFtZSA9ICJBSUYxIFBsYXliYWNrIiwKLQkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21pbiA9IDEsCiAJCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJCS5yYXRlcyA9IFdNODk5NF9SQVRFUywKIAkJCS5mb3JtYXRzID0gV004OTk0X0ZPUk1BVFMsCiAJCX0sCiAJCS5jYXB0dXJlID0gewogCQkJLnN0cmVhbV9uYW1lID0gIkFJRjEgQ2FwdHVyZSIsCi0JCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAogCQkJLmNoYW5uZWxzX21heCA9IDIsCiAJCQkucmF0ZXMgPSBXTTg5OTRfUkFURVMsCiAJCQkuZm9ybWF0cyA9IFdNODk5NF9GT1JNQVRTLApAQCAtMzU2NywxNCArMjQ0MiwxNCBAQAogCQkuaWQgPSAyLAogCQkucGxheWJhY2sgPSB7CiAJCQkuc3RyZWFtX25hbWUgPSAiQUlGMiBQbGF5YmFjayIsCi0JCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAogCQkJLmNoYW5uZWxzX21heCA9IDIsCiAJCQkucmF0ZXMgPSBXTTg5OTRfUkFURVMsCiAJCQkuZm9ybWF0cyA9IFdNODk5NF9GT1JNQVRTLAogCQl9LAogCQkuY2FwdHVyZSA9IHsKIAkJCS5zdHJlYW1fbmFtZSA9ICJBSUYyIENhcHR1cmUiLAotCQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKIAkJCS5jaGFubmVsc19tYXggPSAyLAogCQkJLnJhdGVzID0gV004OTk0X1JBVEVTLAogCQkJLmZvcm1hdHMgPSBXTTg5OTRfRk9STUFUUywKQEAgLTM1ODYsMTQgKzI0NjEsMTQgQEAKIAkJLmlkID0gMywKIAkJLnBsYXliYWNrID0gewogCQkJLnN0cmVhbV9uYW1lID0gIkFJRjMgUGxheWJhY2siLAotCQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKIAkJCS5jaGFubmVsc19tYXggPSAyLAogCQkJLnJhdGVzID0gV004OTk0X1JBVEVTLAogCQkJLmZvcm1hdHMgPSBXTTg5OTRfRk9STUFUUywKIAkJfSwKIAkJLmNhcHR1cmUgPSB7CiAJCQkuc3RyZWFtX25hbWUgPSAiQUlGMyBDYXB0dXJlIiwKLQkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21pbiA9IDEsCiAJCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJCS5yYXRlcyA9IFdNODk5NF9SQVRFUywKIAkJCS5mb3JtYXRzID0gV004OTk0X0ZPUk1BVFMsCkBAIC0zNjI1LDI2ICsyNTAwLDEyIEBACiBzdGF0aWMgaW50IHdtODk5NF9yZXN1bWUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0JdTE2ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCWludCBpLCByZXQ7CiAKIAkvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgKi8KLQlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRSh3bTg5OTQtPnJlZ19jYWNoZSk7IGkrKykgewotCQlzd2l0Y2ggKGkpIHsKLQkJY2FzZSBXTTg5OTRfTERPXzE6Ci0JCWNhc2UgV004OTk0X0xET18yOgotCQljYXNlIFdNODk5NF9TT0ZUV0FSRV9SRVNFVDoKLQkJCS8qIEhhbmRsZWQgYnkgb3RoZXIgTUZEIGRyaXZlcnMgKi8KLQkJCWNvbnRpbnVlOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoIWFjY2Vzc19tYXNrc1tpXS53cml0YWJsZSkKLQkJCWNvbnRpbnVlOwotCi0JCXdtODk5NF9yZWdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgaSwgcmVnX2NhY2hlW2ldKTsKLQl9CisJcmV0ID0gc25kX3NvY19jYWNoZV9zeW5jKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApCisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzeW5jIGNhY2hlOiAlZFxuIiwgcmV0KTsKIAogCXdtODk5NF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCkBAIC0zNzk0LDYgKzI2NTUsMzQgQEAKIAlkZXZfZGJnKGNvZGVjLT5kZXYsICIlZCBSZVR1bmUgTW9iaWxlIGNvbmZpZ3VyYXRpb25zXG4iLAogCQlwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2Zncyk7CiAKKwlpZiAocGRhdGEtPm51bV9tYmNfY2ZncykgeworCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjb250cm9sW10gPSB7CisJCQlTT0NfRU5VTV9FWFQoIk1CQyBNb2RlIiwgd204OTk0LT5tYmNfZW51bSwKKwkJCQkgICAgIHdtODk1OF9nZXRfbWJjX2VudW0sIHdtODk1OF9wdXRfbWJjX2VudW0pLAorCQl9OworCisJCS8qIFdlIG5lZWQgYW4gYXJyYXkgb2YgdGV4dHMgZm9yIHRoZSBlbnVtIEFQSSAqLworCQl3bTg5OTQtPm1iY190ZXh0cyA9IGttYWxsb2Moc2l6ZW9mKGNoYXIgKikKKwkJCQkJICAgICogcGRhdGEtPm51bV9tYmNfY2ZncywgR0ZQX0tFUk5FTCk7CisJCWlmICghd204OTk0LT5tYmNfdGV4dHMpIHsKKwkJCWRldl9lcnIod204OTk0LT5jb2RlYy0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgJWQgTUJDIGNvbmZpZyB0ZXh0c1xuIiwKKwkJCQlwZGF0YS0+bnVtX21iY19jZmdzKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX21iY19jZmdzOyBpKyspCisJCQl3bTg5OTQtPm1iY190ZXh0c1tpXSA9IHBkYXRhLT5tYmNfY2Znc1tpXS5uYW1lOworCisJCXdtODk5NC0+bWJjX2VudW0ubWF4ID0gcGRhdGEtPm51bV9tYmNfY2ZnczsKKwkJd204OTk0LT5tYmNfZW51bS50ZXh0cyA9IHdtODk5NC0+bWJjX3RleHRzOworCisJCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKHdtODk5NC0+Y29kZWMsIGNvbnRyb2wsIDEpOworCQlpZiAocmV0ICE9IDApCisJCQlkZXZfZXJyKHdtODk5NC0+Y29kZWMtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGFkZCBNQkMgbW9kZSBjb250cm9sczogJWRcbiIsIHJldCk7CisJfQorCiAJaWYgKHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzKQogCQl3bTg5OTRfaGFuZGxlX3JldHVuZV9tb2JpbGVfcGRhdGEod204OTk0KTsKIAllbHNlCkBAIC0zODIzLDggKzI3MTIsMTIgQEAKIHsKIAlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCXN0cnVjdCB3bTg5OTRfbWljZGV0ICptaWNkZXQ7CisJc3RydWN0IHdtODk5NCAqY29udHJvbCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJaW50IHJlZzsKIAorCWlmIChjb250cm9sLT50eXBlICE9IFdNODk5NCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlzd2l0Y2ggKG1pY2JpYXMpIHsKIAljYXNlIDE6CiAJCW1pY2RldCA9ICZ3bTg5OTQtPm1pY2RldFswXTsKQEAgLTM4NjMsNiArMjc1NiwxMCBAQAogCWludCByZWc7CiAJaW50IHJlcG9ydDsKIAorI2lmbmRlZiBDT05GSUdfU05EX1NPQ19XTTg5OTRfTU9EVUxFCisJdHJhY2Vfc25kX3NvY19qYWNrX2lycShkZXZfbmFtZShjb2RlYy0+ZGV2KSk7CisjZW5kaWYKKwogCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0lOVEVSUlVQVF9SQVdfU1RBVFVTXzIpOwogCWlmIChyZWcgPCAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWFkIG1pY3JvcGhvbmUgc3RhdHVzOiAlZFxuIiwKQEAgLTM4OTEsNzcgKzI3ODgsMjUxIEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCisvKiBEZWZhdWx0IG1pY3JvcGhvbmUgZGV0ZWN0aW9uIGhhbmRsZXIgZm9yIFdNODk1OCAtIHRoZSB1c2VyIGNhbgorICogb3ZlcnJpZGUgdGhpcyBpZiB0aGV5IHdpc2guCisgKi8KK3N0YXRpYyB2b2lkIHdtODk1OF9kZWZhdWx0X21pY2RldCh1MTYgc3RhdHVzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhdGE7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgcmVwb3J0ID0gMDsKKworCS8qIElmIG5vdGhpbmcgcHJlc2VudCB0aGVuIGNsZWFyIG91ciBzdGF0dXNlcyAqLworCWlmICghKHN0YXR1cyAmIFdNODk1OF9NSUNEX1NUUykpIHsKKwkJd204OTk0LT5qYWNrX2lzX3ZpZGVvID0gZmFsc2U7CisJCXdtODk5NC0+amFja19pc19taWMgPSBmYWxzZTsKKwkJZ290byBkb25lOworCX0KKworCS8qIEFzc3VtZSBhbnl0aGluZyBvdmVyIDQ3NSBvaG1zIGlzIGEgbWljcm9waG9uZSBhbmQgcmVtZW1iZXIKKwkgKiB0aGF0IHdlJ3ZlIHNlZW4gb25lIChzaW5jZSBidXR0b25zIG92ZXJyaWRlIGl0KSAqLworCWlmIChzdGF0dXMgJiAweDYwMCkKKwkJd204OTk0LT5qYWNrX2lzX21pYyA9IHRydWU7CisJaWYgKHdtODk5NC0+amFja19pc19taWMpCisJCXJlcG9ydCB8PSBTTkRfSkFDS19NSUNST1BIT05FOworCisJLyogVmlkZW8gaGFzIGFuIGltcGVkZW5jZSBvZiBhcHByb3hpbWF0ZWx5IDc1IG9obXM7IGFzc3VtZQorCSAqIHRoaXMgaXNuJ3QgdXNlZCBhcyBhIGJ1dHRvbiBhbmQgcmVtZW1iZXIgaXQgc2luY2UgYnV0dG9ucworCSAqIG92ZXJyaWRlIGl0LiAqLworCWlmIChzdGF0dXMgJiAweDQwKQorCQl3bTg5OTQtPmphY2tfaXNfdmlkZW8gPSB0cnVlOworCWlmICh3bTg5OTQtPmphY2tfaXNfdmlkZW8pCisJCXJlcG9ydCB8PSBTTkRfSkFDS19WSURFT09VVDsKKworCS8qIEV2ZXJ5dGhpbmcgZWxzZSBpcyBidXR0b25zOyBqdXN0IGFzc2lnbiBzbG90cyAqLworCWlmIChzdGF0dXMgJiAweDQpCisJCXJlcG9ydCB8PSBTTkRfSkFDS19CVE5fMDsKKwlpZiAoc3RhdHVzICYgMHg4KQorCQlyZXBvcnQgfD0gU05EX0pBQ0tfQlROXzE7CisJaWYgKHN0YXR1cyAmIDB4MTApCisJCXJlcG9ydCB8PSBTTkRfSkFDS19CVE5fMjsKKwlpZiAoc3RhdHVzICYgMHgyMCkKKwkJcmVwb3J0IHw9IFNORF9KQUNLX0JUTl8zOworCWlmIChzdGF0dXMgJiAweDgwKQorCQlyZXBvcnQgfD0gU05EX0pBQ0tfQlROXzQ7CisJaWYgKHN0YXR1cyAmIDB4MTAwKQorCQlyZXBvcnQgfD0gU05EX0pBQ0tfQlROXzU7CisKK2RvbmU6CisJc25kX3NvY19qYWNrX3JlcG9ydCh3bTg5OTQtPm1pY2RldFswXS5qYWNrLAorCQkJICAgIFNORF9KQUNLX0JUTl8wIHwgU05EX0pBQ0tfQlROXzEgfCBTTkRfSkFDS19CVE5fMiB8CisJCQkgICAgU05EX0pBQ0tfQlROXzMgfCBTTkRfSkFDS19CVE5fNCB8IFNORF9KQUNLX0JUTl81IHwKKwkJCSAgICBTTkRfSkFDS19NSUNST1BIT05FIHwgU05EX0pBQ0tfVklERU9PVVQsCisJCQkgICAgcmVwb3J0KTsKK30KKworLyoqCisgKiB3bTg5NThfbWljX2RldGVjdCAtIEVuYWJsZSBtaWNyb3Bob25lIGRldGVjdGlvbiB2aWEgdGhlIFdNODk1OCBJUlEKKyAqCisgKiBAY29kZWM6ICAgV004OTU4IGNvZGVjCisgKiBAamFjazogICAgamFjayB0byByZXBvcnQgZGV0ZWN0aW9uIGV2ZW50cyBvbgorICoKKyAqIEVuYWJsZSBtaWNyb3Bob25lIGRldGVjdGlvbiBmdW5jdGlvbmFsaXR5IGZvciB0aGUgV004OTU4LiAgQnkKKyAqIGRlZmF1bHQgc2ltcGxlIGRldGVjdGlvbiB3aGljaCBzdXBwb3J0cyB0aGUgZGV0ZWN0aW9uIG9mIHVwIHRvIDYKKyAqIGJ1dHRvbnMgcGx1cyB2aWRlbyBhbmQgbWljcm9waG9uZSBmdW5jdGlvbmFsaXR5IGlzIHN1cHBvcnRlZC4KKyAqCisgKiBUaGUgV004OTU4IGhhcyBhbiBhZHZhbmNlZCBqYWNrIGRldGVjdGlvbiBmYWNpbGl0eSB3aGljaCBpcyBhYmxlIHRvCisgKiBzdXBwb3J0IGNvbXBsZXggYWNjZXNzb3J5IGRldGVjdGlvbiwgZXNwZWNpYWxseSB3aGVuIHVzZWQgaW4KKyAqIGNvbmp1bmN0aW9uIHdpdGggZXh0ZXJuYWwgY2lyY3VpdHJ5LiAgSW4gb3JkZXIgdG8gcHJvdmlkZSBtYXhpbXVtCisgKiBmbGV4aWJsaXR5IGEgY2FsbGJhY2sgaXMgcHJvdmlkZWQgd2hpY2ggYWxsb3dzIGEgY29tcGxldGVseSBjdXN0b20KKyAqIGRldGVjdGlvbiBhbGdvcml0aG0uCisgKi8KK2ludCB3bTg5NThfbWljX2RldGVjdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssCisJCSAgICAgIHdtODk1OF9taWNkZXRfY2IgY2IsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3Qgd204OTk0ICpjb250cm9sID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKKworCWlmIChjb250cm9sLT50eXBlICE9IFdNODk1OCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoamFjaykgeworCQlpZiAoIWNiKSB7CisJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJVc2luZyBkZWZhdWx0IG1pY2RldCBjYWxsYmFja1xuIik7CisJCQljYiA9IHdtODk1OF9kZWZhdWx0X21pY2RldDsKKwkJCWNiX2RhdGEgPSBjb2RlYzsKKwkJfQorCisJCXdtODk5NC0+bWljZGV0WzBdLmphY2sgPSBqYWNrOworCQl3bTg5OTQtPmphY2tfY2IgPSBjYjsKKwkJd204OTk0LT5qYWNrX2NiX2RhdGEgPSBjYl9kYXRhOworCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1OF9NSUNfREVURUNUXzEsCisJCQkJICAgIFdNODk1OF9NSUNEX0VOQSwgV004OTU4X01JQ0RfRU5BKTsKKwl9IGVsc2UgeworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NThfTUlDX0RFVEVDVF8xLAorCQkJCSAgICBXTTg5NThfTUlDRF9FTkEsIDApOworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwod204OTU4X21pY19kZXRlY3QpOworCitzdGF0aWMgaXJxcmV0dXJuX3Qgd204OTU4X21pY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGRhdGE7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd204OTk0LT5jb2RlYzsKKwlpbnQgcmVnOworCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NThfTUlDX0RFVEVDVF8zKTsKKwlpZiAocmVnIDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBtaWMgZGV0ZWN0IHN0YXR1czogJWRcbiIsCisJCQlyZWcpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaWYgKCEocmVnICYgV004OTU4X01JQ0RfVkFMSUQpKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIk1pYyBkZXRlY3QgZGF0YSBub3QgdmFsaWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKyNpZm5kZWYgQ09ORklHX1NORF9TT0NfV004OTk0X01PRFVMRQorCXRyYWNlX3NuZF9zb2NfamFja19pcnEoZGV2X25hbWUoY29kZWMtPmRldikpOworI2VuZGlmCisKKwlpZiAod204OTk0LT5qYWNrX2NiKQorCQl3bTg5OTQtPmphY2tfY2IocmVnLCB3bTg5OTQtPmphY2tfY2JfZGF0YSk7CisJZWxzZQorCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiQWNjZXNzb3J5IGRldGVjdGlvbiB3aXRoIG5vIGNhbGxiYWNrXG4iKTsKKworb3V0OgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogc3RhdGljIGludCB3bTg5OTRfY29kZWNfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogeworCXN0cnVjdCB3bTg5OTQgKmNvbnRyb2w7CiAJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQ7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCWludCByZXQsIGk7CiAKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gZGV2X2dldF9kcnZkYXRhKGNvZGVjLT5kZXYtPnBhcmVudCk7CisJY29udHJvbCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAKIAl3bTg5OTQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204OTk0X3ByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAod204OTk0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXNuZF9zb2NfY29kZWNfc2V0X2RydmRhdGEoY29kZWMsIHdtODk5NCk7CiAKLQljb2RlYy0+cmVnX2NhY2hlID0gJndtODk5NC0+cmVnX2NhY2hlOwotCiAJd204OTk0LT5wZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoY29kZWMtPmRldi0+cGFyZW50KTsKIAl3bTg5OTQtPmNvZGVjID0gY29kZWM7CiAKLQkvKiBGaWxsIHRoZSBjYWNoZSB3aXRoIHBoeXNpY2FsIHZhbHVlcyB3ZSBpbmhlcml0ZWQ7IGRvbid0IHJlc2V0ICovCi0JcmV0ID0gd204OTk0X2J1bGtfcmVhZChjb2RlYy0+Y29udHJvbF9kYXRhLCAwLAotCQkJICAgICAgIEFSUkFZX1NJWkUod204OTk0LT5yZWdfY2FjaGUpIC0gMSwKLQkJCSAgICAgICBjb2RlYy0+cmVnX2NhY2hlKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZmlsbCByZWdpc3RlciBjYWNoZTogJWRcbiIsCi0JCQlyZXQpOwotCQlnb3RvIGVycjsKLQl9CisJcG1fcnVudGltZV9lbmFibGUoY29kZWMtPmRldik7CisJcG1fcnVudGltZV9yZXN1bWUoY29kZWMtPmRldik7CiAKLQkvKiBDbGVhciB0aGUgY2FjaGVkIHZhbHVlcyBmb3IgdW5yZWFkYWJsZS92b2xhdGlsZSByZWdpc3RlcnMgdG8KLQkgKiBhdm9pZCBwb3RlbnRpYWwgY29uZnVzaW9uLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5NC0+cmVnX2NhY2hlKTsgaSsrKQotCQlpZiAod204OTk0X3ZvbGF0aWxlKGkpIHx8ICF3bTg5OTRfcmVhZGFibGUoaSkpCi0JCQl3bTg5OTQtPnJlZ19jYWNoZVtpXSA9IDA7CisJLyogUmVhZCBvdXIgY3VycmVudCBzdGF0dXMgYmFjayBmcm9tIHRoZSBjaGlwIC0gd2UgZG9uJ3Qgd2FudCB0bworCSAqIHJlc2V0IGFzIHRoaXMgbWF5IGludGVyZmVyZSB3aXRoIHRoZSBHUElPIG9yIExETyBvcGVyYXRpb24uICovCisJZm9yIChpID0gMDsgaSA8IFdNODk5NF9DQUNIRV9TSVpFOyBpKyspIHsKKwkJaWYgKCF3bTg5OTRfcmVhZGFibGUoaSkgfHwgd204OTk0X3ZvbGF0aWxlKGkpKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gd204OTk0X3JlZ19yZWFkKGNvZGVjLT5jb250cm9sX2RhdGEsIGkpOworCQlpZiAocmV0IDw9IDApCisJCQljb250aW51ZTsKKworCQlyZXQgPSBzbmRfc29jX2NhY2hlX3dyaXRlKGNvZGVjLCBpLCByZXQpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGluaXRpYWxpc2UgY2FjaGUgZm9yIDB4JXg6ICVkXG4iLAorCQkJCWksIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KIAogCS8qIFNldCByZXZpc2lvbi1zcGVjaWZpYyBjb25maWd1cmF0aW9uICovCiAJd204OTk0LT5yZXZpc2lvbiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0NISVBfUkVWSVNJT04pOwotCXN3aXRjaCAod204OTk0LT5yZXZpc2lvbikgewotCWNhc2UgMjoKLQljYXNlIDM6Ci0JCXdtODk5NC0+aHVicy5kY3NfY29kZXMgPSAtNTsKLQkJd204OTk0LT5odWJzLmhwX3N0YXJ0dXBfbW9kZSA9IDE7CisJc3dpdGNoIChjb250cm9sLT50eXBlKSB7CisJY2FzZSBXTTg5OTQ6CisJCXN3aXRjaCAod204OTk0LT5yZXZpc2lvbikgeworCQljYXNlIDI6CisJCWNhc2UgMzoKKwkJCXdtODk5NC0+aHVicy5kY3NfY29kZXMgPSAtNTsKKwkJCXdtODk5NC0+aHVicy5ocF9zdGFydHVwX21vZGUgPSAxOworCQkJd204OTk0LT5odWJzLmRjc19yZWFkYmFja19tb2RlID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJd204OTk0LT5odWJzLmRjc19yZWFkYmFja19tb2RlID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFdNODk1ODoKIAkJd204OTk0LT5odWJzLmRjc19yZWFkYmFja19tb2RlID0gMTsKIAkJYnJlYWs7CisKIAlkZWZhdWx0OgotCQl3bTg5OTQtPmh1YnMuZGNzX3JlYWRiYWNrX21vZGUgPSAxOwogCQlicmVhazsKIAl9CiAKLQlyZXQgPSB3bTg5OTRfcmVxdWVzdF9pcnEoY29kZWMtPmNvbnRyb2xfZGF0YSwgV004OTk0X0lSUV9NSUMxX0RFVCwKLQkJCQkgd204OTk0X21pY19pcnEsICJNaWMgMSBkZXRlY3QiLCB3bTg5OTQpOwotCWlmIChyZXQgIT0gMCkKLQkJZGV2X3dhcm4oY29kZWMtPmRldiwKLQkJCSAiRmFpbGVkIHRvIHJlcXVlc3QgTWljMSBkZXRlY3QgSVJROiAlZFxuIiwgcmV0KTsKKwlzd2l0Y2ggKGNvbnRyb2wtPnR5cGUpIHsKKwljYXNlIFdNODk5NDoKKwkJcmV0ID0gd204OTk0X3JlcXVlc3RfaXJxKGNvZGVjLT5jb250cm9sX2RhdGEsCisJCQkJCSBXTTg5OTRfSVJRX01JQzFfREVULAorCQkJCQkgd204OTk0X21pY19pcnEsICJNaWMgMSBkZXRlY3QiLAorCQkJCQkgd204OTk0KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X3dhcm4oY29kZWMtPmRldiwKKwkJCQkgIkZhaWxlZCB0byByZXF1ZXN0IE1pYzEgZGV0ZWN0IElSUTogJWRcbiIsCisJCQkJIHJldCk7CiAKLQlyZXQgPSB3bTg5OTRfcmVxdWVzdF9pcnEoY29kZWMtPmNvbnRyb2xfZGF0YSwgV004OTk0X0lSUV9NSUMxX1NIUlQsCi0JCQkJIHdtODk5NF9taWNfaXJxLCAiTWljIDEgc2hvcnQiLCB3bTg5OTQpOwotCWlmIChyZXQgIT0gMCkKLQkJZGV2X3dhcm4oY29kZWMtPmRldiwKLQkJCSAiRmFpbGVkIHRvIHJlcXVlc3QgTWljMSBzaG9ydCBJUlE6ICVkXG4iLCByZXQpOworCQlyZXQgPSB3bTg5OTRfcmVxdWVzdF9pcnEoY29kZWMtPmNvbnRyb2xfZGF0YSwKKwkJCQkJIFdNODk5NF9JUlFfTUlDMV9TSFJULAorCQkJCQkgd204OTk0X21pY19pcnEsICJNaWMgMSBzaG9ydCIsCisJCQkJCSB3bTg5OTQpOworCQlpZiAocmV0ICE9IDApCisJCQlkZXZfd2Fybihjb2RlYy0+ZGV2LAorCQkJCSAiRmFpbGVkIHRvIHJlcXVlc3QgTWljMSBzaG9ydCBJUlE6ICVkXG4iLAorCQkJCSByZXQpOwogCi0JcmV0ID0gd204OTk0X3JlcXVlc3RfaXJxKGNvZGVjLT5jb250cm9sX2RhdGEsIFdNODk5NF9JUlFfTUlDMl9ERVQsCi0JCQkJIHdtODk5NF9taWNfaXJxLCAiTWljIDIgZGV0ZWN0Iiwgd204OTk0KTsKLQlpZiAocmV0ICE9IDApCi0JCWRldl93YXJuKGNvZGVjLT5kZXYsCi0JCQkgIkZhaWxlZCB0byByZXF1ZXN0IE1pYzIgZGV0ZWN0IElSUTogJWRcbiIsIHJldCk7CisJCXJldCA9IHdtODk5NF9yZXF1ZXN0X2lycShjb2RlYy0+Y29udHJvbF9kYXRhLAorCQkJCQkgV004OTk0X0lSUV9NSUMyX0RFVCwKKwkJCQkJIHdtODk5NF9taWNfaXJxLCAiTWljIDIgZGV0ZWN0IiwKKwkJCQkJIHdtODk5NCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWRldl93YXJuKGNvZGVjLT5kZXYsCisJCQkJICJGYWlsZWQgdG8gcmVxdWVzdCBNaWMyIGRldGVjdCBJUlE6ICVkXG4iLAorCQkJCSByZXQpOwogCi0JcmV0ID0gd204OTk0X3JlcXVlc3RfaXJxKGNvZGVjLT5jb250cm9sX2RhdGEsIFdNODk5NF9JUlFfTUlDMl9TSFJULAotCQkJCSB3bTg5OTRfbWljX2lycSwgIk1pYyAyIHNob3J0Iiwgd204OTk0KTsKLQlpZiAocmV0ICE9IDApCi0JCWRldl93YXJuKGNvZGVjLT5kZXYsCi0JCQkgIkZhaWxlZCB0byByZXF1ZXN0IE1pYzIgc2hvcnQgSVJROiAlZFxuIiwgcmV0KTsKKwkJcmV0ID0gd204OTk0X3JlcXVlc3RfaXJxKGNvZGVjLT5jb250cm9sX2RhdGEsCisJCQkJCSBXTTg5OTRfSVJRX01JQzJfU0hSVCwKKwkJCQkJIHdtODk5NF9taWNfaXJxLCAiTWljIDIgc2hvcnQiLAorCQkJCQkgd204OTk0KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X3dhcm4oY29kZWMtPmRldiwKKwkJCQkgIkZhaWxlZCB0byByZXF1ZXN0IE1pYzIgc2hvcnQgSVJROiAlZFxuIiwKKwkJCQkgcmV0KTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODk1ODoKKwkJcmV0ID0gd204OTk0X3JlcXVlc3RfaXJxKGNvZGVjLT5jb250cm9sX2RhdGEsCisJCQkJCSBXTTg5OTRfSVJRX01JQzFfREVULAorCQkJCQkgd204OTU4X21pY19pcnEsICJNaWMgZGV0ZWN0IiwKKwkJCQkJIHdtODk5NCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWRldl93YXJuKGNvZGVjLT5kZXYsCisJCQkJICJGYWlsZWQgdG8gcmVxdWVzdCBNaWMgZGV0ZWN0IElSUTogJWRcbiIsCisJCQkJIHJldCk7CisJCWJyZWFrOworCX0KIAogCS8qIFJlbWVtYmVyIGlmIEFJRm5MUkNMSyBpcyBjb25maWd1cmVkIGFzIGEgR1BJTy4gIFRoaXMgc2hvdWxkIGJlCiAJICogY29uZmlndXJlZCBvbiBpbml0IC0gaWYgYSBzeXN0ZW0gd2FudHMgdG8gZG8gdGhpcyBkeW5hbWljYWxseQpAQCAtNDAzNCwxMCArMzEwNSwzNiBAQAogCXdtX2h1YnNfYWRkX2FuYWxvZ3VlX2NvbnRyb2xzKGNvZGVjKTsKIAlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTk0X3NuZF9jb250cm9scywKIAkJCSAgICAgQVJSQVlfU0laRSh3bTg5OTRfc25kX2NvbnRyb2xzKSk7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTk0X2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk5NF9kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHdtODk5NF9kYXBtX3dpZGdldHMpKTsKKworCXN3aXRjaCAoY29udHJvbC0+dHlwZSkgeworCWNhc2UgV004OTk0OgorCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk5NF9zcGVjaWZpY19kYXBtX3dpZGdldHMsCisJCQkJCSAgQVJSQVlfU0laRSh3bTg5OTRfc3BlY2lmaWNfZGFwbV93aWRnZXRzKSk7CisJCWJyZWFrOworCWNhc2UgV004OTU4OgorCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTU4X3NuZF9jb250cm9scywKKwkJCQkgICAgIEFSUkFZX1NJWkUod204OTU4X3NuZF9jb250cm9scykpOworCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk1OF9kYXBtX3dpZGdldHMsCisJCQkJCSAgQVJSQVlfU0laRSh3bTg5NThfZGFwbV93aWRnZXRzKSk7CisJCWJyZWFrOworCX0KKwkJCisKIAl3bV9odWJzX2FkZF9hbmFsb2d1ZV9yb3V0ZXMoY29kZWMsIDAsIDApOwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7CisKKwlzd2l0Y2ggKGNvbnRyb2wtPnR5cGUpIHsKKwljYXNlIFdNODk5NDoKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgd204OTk0X2ludGVyY29uLAorCQkJCQlBUlJBWV9TSVpFKHdtODk5NF9pbnRlcmNvbikpOworCQlicmVhazsKKwljYXNlIFdNODk1ODoKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgd204OTU4X2ludGVyY29uLAorCQkJCQlBUlJBWV9TSVpFKHdtODk1OF9pbnRlcmNvbikpOworCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gMDsKIApAQCAtNDA1NCwxMyArMzE1MSwyOSBAQAogc3RhdGljIGludCAgd204OTk0X2NvZGVjX3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3Qgd204OTk0ICpjb250cm9sID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAogCXdtODk5NF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAKLQl3bTg5OTRfZnJlZV9pcnEoY29kZWMtPmNvbnRyb2xfZGF0YSwgV004OTk0X0lSUV9NSUMyX1NIUlQsIHdtODk5NCk7Ci0Jd204OTk0X2ZyZWVfaXJxKGNvZGVjLT5jb250cm9sX2RhdGEsIFdNODk5NF9JUlFfTUlDMl9ERVQsIHdtODk5NCk7Ci0Jd204OTk0X2ZyZWVfaXJxKGNvZGVjLT5jb250cm9sX2RhdGEsIFdNODk5NF9JUlFfTUlDMV9TSFJULCB3bTg5OTQpOwotCXdtODk5NF9mcmVlX2lycShjb2RlYy0+Y29udHJvbF9kYXRhLCBXTTg5OTRfSVJRX01JQzFfREVULCB3bTg5OTQpOworCXBtX3J1bnRpbWVfZGlzYWJsZShjb2RlYy0+ZGV2KTsKKworCXN3aXRjaCAoY29udHJvbC0+dHlwZSkgeworCWNhc2UgV004OTk0OgorCQl3bTg5OTRfZnJlZV9pcnEoY29kZWMtPmNvbnRyb2xfZGF0YSwgV004OTk0X0lSUV9NSUMyX1NIUlQsCisJCQkJd204OTk0KTsKKwkJd204OTk0X2ZyZWVfaXJxKGNvZGVjLT5jb250cm9sX2RhdGEsIFdNODk5NF9JUlFfTUlDMl9ERVQsCisJCQkJd204OTk0KTsKKwkJd204OTk0X2ZyZWVfaXJxKGNvZGVjLT5jb250cm9sX2RhdGEsIFdNODk5NF9JUlFfTUlDMV9TSFJULAorCQkJCXdtODk5NCk7CisJCXdtODk5NF9mcmVlX2lycShjb2RlYy0+Y29udHJvbF9kYXRhLCBXTTg5OTRfSVJRX01JQzFfREVULAorCQkJCXdtODk5NCk7CisJCWJyZWFrOworCisJY2FzZSBXTTg5NTg6CisJCXdtODk5NF9mcmVlX2lycShjb2RlYy0+Y29udHJvbF9kYXRhLCBXTTg5OTRfSVJRX01JQzFfREVULAorCQkJCXdtODk5NCk7CisJCWJyZWFrOworCX0KIAlrZnJlZSh3bTg5OTQtPnJldHVuZV9tb2JpbGVfdGV4dHMpOwogCWtmcmVlKHdtODk5NC0+ZHJjX3RleHRzKTsKIAlrZnJlZSh3bTg5OTQpOwpAQCAtNDA3MywxMSArMzE4NiwxNiBAQAogCS5yZW1vdmUgPQl3bTg5OTRfY29kZWNfcmVtb3ZlLAogCS5zdXNwZW5kID0Jd204OTk0X3N1c3BlbmQsCiAJLnJlc3VtZSA9CXdtODk5NF9yZXN1bWUsCi0JLnJlYWQgPSB3bTg5OTRfcmVhZCwKLQkud3JpdGUgPSB3bTg5OTRfd3JpdGUsCisJLnJlYWQgPQkJd204OTk0X3JlYWQsCisJLndyaXRlID0Jd204OTk0X3dyaXRlLAogCS5yZWFkYWJsZV9yZWdpc3RlciA9IHdtODk5NF9yZWFkYWJsZSwKIAkudm9sYXRpbGVfcmVnaXN0ZXIgPSB3bTg5OTRfdm9sYXRpbGUsCiAJLnNldF9iaWFzX2xldmVsID0gd204OTk0X3NldF9iaWFzX2xldmVsLAorCisJLnJlZ19jYWNoZV9zaXplID0gV004OTk0X0NBQ0hFX1NJWkUsCisJLnJlZ19jYWNoZV9kZWZhdWx0ID0gd204OTk0X3JlZ19kZWZhdWx0cywKKwkucmVnX3dvcmRfc2l6ZSA9IDIsCisJLmNvbXByZXNzX3R5cGUgPSBTTkRfU09DX1JCVFJFRV9DT01QUkVTU0lPTiwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHdtODk5NF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmgKaW5kZXggZDhkY2UyNi4uMGMzNTViZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5oCkBAIC0yOCw3ICsyOCwyMSBAQAogI2RlZmluZSBXTTg5OTRfRkxMX1NSQ19MUkNMSyAgMwogI2RlZmluZSBXTTg5OTRfRkxMX1NSQ19CQ0xLICAgNAogCit0eXBlZGVmIHZvaWQgKCp3bTg5NThfbWljZGV0X2NiKSh1MTYgc3RhdHVzLCB2b2lkICpkYXRhKTsKKwogaW50IHdtODk5NF9taWNfZGV0ZWN0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywKIAkJICAgICAgaW50IG1pY2JpYXMsIGludCBkZXQsIGludCBzaHJ0KTsKK2ludCB3bTg5NThfbWljX2RldGVjdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssCisJCSAgICAgIHdtODk1OF9taWNkZXRfY2IgY2IsIHZvaWQgKmNiX2RhdGEpOworCisjZGVmaW5lIFdNODk5NF9DQUNIRV9TSVpFIDE1NzAKKworc3RydWN0IHdtODk5NF9hY2Nlc3NfbWFzayB7CisJdW5zaWduZWQgc2hvcnQgcmVhZGFibGU7ICAgLyogTWFzayBvZiByZWFkYWJsZSBiaXRzICovCisJdW5zaWduZWQgc2hvcnQgd3JpdGFibGU7ICAgLyogTWFzayBvZiB3cml0YWJsZSBiaXRzICovCit9OworCitleHRlcm4gY29uc3Qgc3RydWN0IHdtODk5NF9hY2Nlc3NfbWFzayB3bTg5OTRfYWNjZXNzX21hc2tzW1dNODk5NF9DQUNIRV9TSVpFXTsKK2V4dGVybiBjb25zdCBfX2RldmluaXRkYXRhICB1MTYgd204OTk0X3JlZ19kZWZhdWx0c1tXTTg5OTRfQ0FDSEVfU0laRV07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTUuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0NWNiZAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMKQEAgLTAsMCArMSwxODE4IEBACisvKgorICogd204OTk1LmMgIC0tICBXTTg5OTUgQUxTQSBTb0MgQXVkaW8gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMTAgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIHBsYworICoKKyAqIEF1dGhvcjogRGltaXRyaXMgUGFwYXN0YW1vcyA8ZHBAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqIEJhc2VkIG9uIHdtODk5NC5jIGFuZCB3bV9odWJzLmMgYnkgTWFyayBCcm93bgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisKKyNpbmNsdWRlICJ3bTg5OTUuaCIKKworc3RhdGljIGNvbnN0IHUxNiB3bTg5OTVfcmVnX2RlZnNbV004OTk1X01BWF9SRUdJU1RFUiArIDFdID0geworCVswXSAgICAgPSAweDg5OTUsIFs1XSAgICAgPSAweDAxMDAsIFsxNl0gICAgPSAweDAwMGIsIFsxN10gICAgPSAweDAwMGIsCisJWzI0XSAgICA9IDB4MDJjMCwgWzI1XSAgICA9IDB4MDJjMCwgWzI2XSAgICA9IDB4MDJjMCwgWzI3XSAgICA9IDB4MDJjMCwKKwlbMjhdICAgID0gMHgwMDBmLCBbMzJdICAgID0gMHgwMDA1LCBbMzNdICAgID0gMHgwMDA1LCBbNDBdICAgID0gMHgwMDAzLAorCVs0MV0gICAgPSAweDAwMTMsIFs0OF0gICAgPSAweDAwMDQsIFs1Nl0gICAgPSAweDA5ZjgsIFs2NF0gICAgPSAweDFmMjUsCisJWzY5XSAgICA9IDB4MDAwNCwgWzgyXSAgICA9IDB4YWFhYSwgWzg0XSAgICA9IDB4MmEyYSwgWzE0Nl0gICA9IDB4MDA2MCwKKwlbMjU2XSAgID0gMHgwMDAyLCBbMjU3XSAgID0gMHg4MDA0LCBbNTIwXSAgID0gMHgwMDEwLCBbNTI4XSAgID0gMHgwMDgzLAorCVs1MjldICAgPSAweDAwODMsIFs1NDhdICAgPSAweDBjODAsIFs1ODBdICAgPSAweDBjODAsIFs3NjhdICAgPSAweDQwNTAsCisJWzc2OV0gICA9IDB4NDAwMCwgWzc3MV0gICA9IDB4MDA0MCwgWzc3Ml0gICA9IDB4MDA0MCwgWzc3M10gICA9IDB4MDA0MCwKKwlbNzc0XSAgID0gMHgwMDA0LCBbNzc1XSAgID0gMHgwMTAwLCBbNzg0XSAgID0gMHg0MDUwLCBbNzg1XSAgID0gMHg0MDAwLAorCVs3ODddICAgPSAweDAwNDAsIFs3ODhdICAgPSAweDAwNDAsIFs3ODldICAgPSAweDAwNDAsIFsxMDI0XSAgPSAweDAwYzAsCisJWzEwMjVdICA9IDB4MDBjMCwgWzEwMjZdICA9IDB4MDBjMCwgWzEwMjddICA9IDB4MDBjMCwgWzEwMjhdICA9IDB4MDBjMCwKKwlbMTAyOV0gID0gMHgwMGMwLCBbMTAzMF0gID0gMHgwMGMwLCBbMTAzMV0gID0gMHgwMGMwLCBbMTA1Nl0gID0gMHgwMjAwLAorCVsxMDU3XSAgPSAweDAwMTAsIFsxMDU4XSAgPSAweDAyMDAsIFsxMDU5XSAgPSAweDAwMTAsIFsxMDg4XSAgPSAweDAwOTgsCisJWzEwODldICA9IDB4MDg0NSwgWzExMDRdICA9IDB4MDA5OCwgWzExMDVdICA9IDB4MDg0NSwgWzExNTJdICA9IDB4NjMxOCwKKwlbMTE1M10gID0gMHg2MzAwLCBbMTE1NF0gID0gMHgwZmNhLCBbMTE1NV0gID0gMHgwNDAwLCBbMTE1Nl0gID0gMHgwMGQ4LAorCVsxMTU3XSAgPSAweDFlYjUsIFsxMTU4XSAgPSAweGYxNDUsIFsxMTU5XSAgPSAweDBiNzUsIFsxMTYwXSAgPSAweDAxYzUsCisJWzExNjFdICA9IDB4MWM1OCwgWzExNjJdICA9IDB4ZjM3MywgWzExNjNdICA9IDB4MGE1NCwgWzExNjRdICA9IDB4MDU1OCwKKwlbMTE2NV0gID0gMHgxNjhlLCBbMTE2Nl0gID0gMHhmODI5LCBbMTE2N10gID0gMHgwN2FkLCBbMTE2OF0gID0gMHgxMTAzLAorCVsxMTY5XSAgPSAweDA1NjQsIFsxMTcwXSAgPSAweDA1NTksIFsxMTcxXSAgPSAweDQwMDAsIFsxMTg0XSAgPSAweDYzMTgsCisJWzExODVdICA9IDB4NjMwMCwgWzExODZdICA9IDB4MGZjYSwgWzExODddICA9IDB4MDQwMCwgWzExODhdICA9IDB4MDBkOCwKKwlbMTE4OV0gID0gMHgxZWI1LCBbMTE5MF0gID0gMHhmMTQ1LCBbMTE5MV0gID0gMHgwYjc1LCBbMTE5Ml0gID0gMHgwMWM1LAorCVsxMTkzXSAgPSAweDFjNTgsIFsxMTk0XSAgPSAweGYzNzMsIFsxMTk1XSAgPSAweDBhNTQsIFsxMTk2XSAgPSAweDA1NTgsCisJWzExOTddICA9IDB4MTY4ZSwgWzExOThdICA9IDB4ZjgyOSwgWzExOTldICA9IDB4MDdhZCwgWzEyMDBdICA9IDB4MTEwMywKKwlbMTIwMV0gID0gMHgwNTY0LCBbMTIwMl0gID0gMHgwNTU5LCBbMTIwM10gID0gMHg0MDAwLCBbMTI4MF0gID0gMHgwMGMwLAorCVsxMjgxXSAgPSAweDAwYzAsIFsxMjgyXSAgPSAweDAwYzAsIFsxMjgzXSAgPSAweDAwYzAsIFsxMzEyXSAgPSAweDAyMDAsCisJWzEzMTNdICA9IDB4MDAxMCwgWzEzNDRdICA9IDB4MDA5OCwgWzEzNDVdICA9IDB4MDg0NSwgWzE0MDhdICA9IDB4NjMxOCwKKwlbMTQwOV0gID0gMHg2MzAwLCBbMTQxMF0gID0gMHgwZmNhLCBbMTQxMV0gID0gMHgwNDAwLCBbMTQxMl0gID0gMHgwMGQ4LAorCVsxNDEzXSAgPSAweDFlYjUsIFsxNDE0XSAgPSAweGYxNDUsIFsxNDE1XSAgPSAweDBiNzUsIFsxNDE2XSAgPSAweDAxYzUsCisJWzE0MTddICA9IDB4MWM1OCwgWzE0MThdICA9IDB4ZjM3MywgWzE0MTldICA9IDB4MGE1NCwgWzE0MjBdICA9IDB4MDU1OCwKKwlbMTQyMV0gID0gMHgxNjhlLCBbMTQyMl0gID0gMHhmODI5LCBbMTQyM10gID0gMHgwN2FkLCBbMTQyNF0gID0gMHgxMTAzLAorCVsxNDI1XSAgPSAweDA1NjQsIFsxNDI2XSAgPSAweDA1NTksIFsxNDI3XSAgPSAweDQwMDAsIFsxNTY4XSAgPSAweDAwMDIsCisJWzE3OTJdICA9IDB4YTEwMCwgWzE3OTNdICA9IDB4YTEwMSwgWzE3OTRdICA9IDB4YTEwMSwgWzE3OTVdICA9IDB4YTEwMSwKKwlbMTc5Nl0gID0gMHhhMTAxLCBbMTc5N10gID0gMHhhMTAxLCBbMTc5OF0gID0gMHhhMTAxLCBbMTc5OV0gID0gMHhhMTAxLAorCVsxODAwXSAgPSAweGExMDEsIFsxODAxXSAgPSAweGExMDEsIFsxODAyXSAgPSAweGExMDEsIFsxODAzXSAgPSAweGExMDEsCisJWzE4MDRdICA9IDB4YTEwMSwgWzE4MDVdICA9IDB4YTEwMSwgWzE4MjVdICA9IDB4MDA1NSwgWzE4NDhdICA9IDB4M2ZmZiwKKwlbMTg0OV0gID0gMHgxZmZmLCBbMjA0OV0gID0gMHgwMDAxLCBbMjA1MF0gID0gMHgwMDY5LCBbMjA1Nl0gID0gMHgwMDAyLAorCVsyMDU3XSAgPSAweDAwMDMsIFsyMDU4XSAgPSAweDAwNjksIFsxMjI4OF0gPSAweDAwMDEsIFsxMjI4OV0gPSAweDAwMDEsCisJWzEyMjkxXSA9IDB4MDAwNiwgWzEyMjkyXSA9IDB4MDA0MCwgWzEyMjkzXSA9IDB4MDAwMSwgWzEyMjk0XSA9IDB4MDAwZiwKKwlbMTIyOTVdID0gMHgwMDA2LCBbMTIyOTZdID0gMHgwMDAxLCBbMTIyOTddID0gMHgwMDAzLCBbMTIyOThdID0gMHgwMTA0LAorCVsxMjMwMF0gPSAweDAwNjAsIFsxMjMwMV0gPSAweDAwMTEsIFsxMjMwMl0gPSAweDA0MDEsIFsxMjMwNF0gPSAweDAwNTAsCisJWzEyMzA1XSA9IDB4MDAwMywgWzEyMzA2XSA9IDB4MDEwMCwgWzEyMzA4XSA9IDB4MDA1MSwgWzEyMzA5XSA9IDB4MDAwMywKKwlbMTIzMTBdID0gMHgwMTA0LCBbMTIzMTFdID0gMHgwMDBhLCBbMTIzMTJdID0gMHgwMDYwLCBbMTIzMTNdID0gMHgwMDNiLAorCVsxMjMxNF0gPSAweDA1MDIsIFsxMjMxNV0gPSAweDAxMDAsIFsxMjMxNl0gPSAweDJmZmYsIFsxMjMyMF0gPSAweDJmZmYsCisJWzEyMzI0XSA9IDB4MmZmZiwgWzEyMzI4XSA9IDB4MmZmZiwgWzEyMzMyXSA9IDB4MmZmZiwgWzEyMzM2XSA9IDB4MmZmZiwKKwlbMTIzNDBdID0gMHgyZmZmLCBbMTIzNDRdID0gMHgyZmZmLCBbMTIzNDhdID0gMHgyZmZmLCBbMTIzNTJdID0gMHgwMDAxLAorCVsxMjM1M10gPSAweDAwMDEsIFsxMjM1NV0gPSAweDAwMDYsIFsxMjM1Nl0gPSAweDAwNDAsIFsxMjM1N10gPSAweDAwMDEsCisJWzEyMzU4XSA9IDB4MDAwZiwgWzEyMzU5XSA9IDB4MDAwNiwgWzEyMzYwXSA9IDB4MDAwMSwgWzEyMzYxXSA9IDB4MDAwMywKKwlbMTIzNjJdID0gMHgwMTA0LCBbMTIzNjRdID0gMHgwMDYwLCBbMTIzNjVdID0gMHgwMDExLCBbMTIzNjZdID0gMHgwNDAxLAorCVsxMjM2OF0gPSAweDAwNTAsIFsxMjM2OV0gPSAweDAwMDMsIFsxMjM3MF0gPSAweDAxMDAsIFsxMjM3Ml0gPSAweDAwNjAsCisJWzEyMzczXSA9IDB4MDAzYiwgWzEyMzc0XSA9IDB4MDUwMiwgWzEyMzc1XSA9IDB4MDEwMCwgWzEyMzc2XSA9IDB4MmZmZiwKKwlbMTIzODBdID0gMHgyZmZmLCBbMTIzODRdID0gMHgyZmZmLCBbMTIzODhdID0gMHgyZmZmLCBbMTIzOTJdID0gMHgyZmZmLAorCVsxMjM5Nl0gPSAweDJmZmYsIFsxMjQwMF0gPSAweDJmZmYsIFsxMjQwNF0gPSAweDJmZmYsIFsxMjQwOF0gPSAweDJmZmYsCisJWzEyNDEyXSA9IDB4MmZmZiwgWzEyNDE2XSA9IDB4MDAwMSwgWzEyNDE3XSA9IDB4MDAwMSwgWzEyNDE5XSA9IDB4MDAwNiwKKwlbMTI0MjBdID0gMHgwMDQwLCBbMTI0MjFdID0gMHgwMDAxLCBbMTI0MjJdID0gMHgwMDBmLCBbMTI0MjNdID0gMHgwMDA2LAorCVsxMjQyNF0gPSAweDAwMDEsIFsxMjQyNV0gPSAweDAwMDMsIFsxMjQyNl0gPSAweDAxMDYsIFsxMjQyOF0gPSAweDAwNjEsCisJWzEyNDI5XSA9IDB4MDAxMSwgWzEyNDMwXSA9IDB4MDQwMSwgWzEyNDMyXSA9IDB4MDA1MCwgWzEyNDMzXSA9IDB4MDAwMywKKwlbMTI0MzRdID0gMHgwMTAyLCBbMTI0MzZdID0gMHgwMDUxLCBbMTI0MzddID0gMHgwMDAzLCBbMTI0MzhdID0gMHgwMTA2LAorCVsxMjQzOV0gPSAweDAwMGEsIFsxMjQ0MF0gPSAweDAwNjEsIFsxMjQ0MV0gPSAweDAwM2IsIFsxMjQ0Ml0gPSAweDA1MDIsCisJWzEyNDQzXSA9IDB4MDEwMCwgWzEyNDQ0XSA9IDB4MmZmZiwgWzEyNDQ4XSA9IDB4MmZmZiwgWzEyNDUyXSA9IDB4MmZmZiwKKwlbMTI0NTZdID0gMHgyZmZmLCBbMTI0NjBdID0gMHgyZmZmLCBbMTI0NjRdID0gMHgyZmZmLCBbMTI0NjhdID0gMHgyZmZmLAorCVsxMjQ3Ml0gPSAweDJmZmYsIFsxMjQ3Nl0gPSAweDJmZmYsIFsxMjQ4MF0gPSAweDAwMDEsIFsxMjQ4MV0gPSAweDAwMDEsCisJWzEyNDgzXSA9IDB4MDAwNiwgWzEyNDg0XSA9IDB4MDA0MCwgWzEyNDg1XSA9IDB4MDAwMSwgWzEyNDg2XSA9IDB4MDAwZiwKKwlbMTI0ODddID0gMHgwMDA2LCBbMTI0ODhdID0gMHgwMDAxLCBbMTI0ODldID0gMHgwMDAzLCBbMTI0OTBdID0gMHgwMTA2LAorCVsxMjQ5Ml0gPSAweDAwNjEsIFsxMjQ5M10gPSAweDAwMTEsIFsxMjQ5NF0gPSAweDA0MDEsIFsxMjQ5Nl0gPSAweDAwNTAsCisJWzEyNDk3XSA9IDB4MDAwMywgWzEyNDk4XSA9IDB4MDEwMiwgWzEyNTAwXSA9IDB4MDA2MSwgWzEyNTAxXSA9IDB4MDAzYiwKKwlbMTI1MDJdID0gMHgwNTAyLCBbMTI1MDNdID0gMHgwMTAwLCBbMTI1MDRdID0gMHgyZmZmLCBbMTI1MDhdID0gMHgyZmZmLAorCVsxMjUxMl0gPSAweDJmZmYsIFsxMjUxNl0gPSAweDJmZmYsIFsxMjUyMF0gPSAweDJmZmYsIFsxMjUyNF0gPSAweDJmZmYsCisJWzEyNTI4XSA9IDB4MmZmZiwgWzEyNTMyXSA9IDB4MmZmZiwgWzEyNTM2XSA9IDB4MmZmZiwgWzEyNTQwXSA9IDB4MmZmZiwKKwlbMTI1NDRdID0gMHgwMDYwLCBbMTI1NDZdID0gMHgwNjAxLCBbMTI1NDhdID0gMHgwMDUwLCBbMTI1NTBdID0gMHgwMTAwLAorCVsxMjU1Ml0gPSAweDAwMDEsIFsxMjU1NF0gPSAweDAxMDQsIFsxMjU1NV0gPSAweDAxMDAsIFsxMjU1Nl0gPSAweDJmZmYsCisJWzEyNTYwXSA9IDB4MmZmZiwgWzEyNTY0XSA9IDB4MmZmZiwgWzEyNTY4XSA9IDB4MmZmZiwgWzEyNTcyXSA9IDB4MmZmZiwKKwlbMTI1NzZdID0gMHgyZmZmLCBbMTI1ODBdID0gMHgyZmZmLCBbMTI1ODRdID0gMHgyZmZmLCBbMTI1ODhdID0gMHgyZmZmLAorCVsxMjU5Ml0gPSAweDJmZmYsIFsxMjU5Nl0gPSAweDJmZmYsIFsxMjYwMF0gPSAweDJmZmYsIFsxMjYwNF0gPSAweDJmZmYsCisJWzEyNjA4XSA9IDB4MDA2MSwgWzEyNjEwXSA9IDB4MDYwMSwgWzEyNjEyXSA9IDB4MDA1MCwgWzEyNjE0XSA9IDB4MDEwMiwKKwlbMTI2MTZdID0gMHgwMDAxLCBbMTI2MThdID0gMHgwMTA2LCBbMTI2MTldID0gMHgwMTAwLCBbMTI2MjBdID0gMHgyZmZmLAorCVsxMjYyNF0gPSAweDJmZmYsIFsxMjYyOF0gPSAweDJmZmYsIFsxMjYzMl0gPSAweDJmZmYsIFsxMjYzNl0gPSAweDJmZmYsCisJWzEyNjQwXSA9IDB4MmZmZiwgWzEyNjQ0XSA9IDB4MmZmZiwgWzEyNjQ4XSA9IDB4MmZmZiwgWzEyNjUyXSA9IDB4MmZmZiwKKwlbMTI2NTZdID0gMHgyZmZmLCBbMTI2NjBdID0gMHgyZmZmLCBbMTI2NjRdID0gMHgyZmZmLCBbMTI2NjhdID0gMHgyZmZmLAorCVsxMjY3Ml0gPSAweDAwNjAsIFsxMjY3NF0gPSAweDA2MDEsIFsxMjY3Nl0gPSAweDAwNjEsIFsxMjY3OF0gPSAweDA2MDEsCisJWzEyNjgwXSA9IDB4MDA1MCwgWzEyNjgyXSA9IDB4MDMwMCwgWzEyNjg0XSA9IDB4MDAwMSwgWzEyNjg2XSA9IDB4MDMwNCwKKwlbMTI2ODhdID0gMHgwMDQwLCBbMTI2OTBdID0gMHgwMDBmLCBbMTI2OTJdID0gMHgwMDAxLCBbMTI2OTVdID0gMHgwMTAwCit9OworCitzdHJ1Y3QgZmxsX2NvbmZpZyB7CisJaW50IHNyYzsKKwlpbnQgaW47CisJaW50IG91dDsKK307CisKK3N0cnVjdCB3bTg5OTVfcHJpdiB7CisJZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sX3R5cGU7CisJaW50IHN5c2Nsa1syXTsKKwlpbnQgbWNsa1syXTsKKwlpbnQgYWlmY2xrWzJdOworCXN0cnVjdCBmbGxfY29uZmlnIGZsbFsyXSwgZmxsX3N1c3BlbmRbMl07Cit9OworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGlnaXRhbF90bHYsIC03MjAwLCA3NSwgMSk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoaW4xbHJfcGdhX3RsdiwgLTE2NTAsIDE1MCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoaW4xbF9ib29zdF90bHYsIDAsIDYwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoc2lkZXRvbmVfdGx2LCAtMzYwMCwgMTUwLCAwKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmluMWxfdGV4dFtdID0geworCSJEaWZmZXJlbnRpYWwiLCAiU2luZ2xlLWVuZGVkIElOMUxOIiwgIlNpbmdsZS1lbmRlZCBJTjFMUCIKK307CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChpbjFsX2VudW0sIFdNODk5NV9MRUZUX0xJTkVfSU5QVVRfQ09OVFJPTCwKKwkJCQkgIDIsIGluMWxfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICppbjFyX3RleHRbXSA9IHsKKwkiRGlmZmVyZW50aWFsIiwgIlNpbmdsZS1lbmRlZCBJTjFSTiIsICJTaW5nbGUtZW5kZWQgSU4xUlAiCit9OworCitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woaW4xcl9lbnVtLCBXTTg5OTVfTEVGVF9MSU5FX0lOUFVUX0NPTlRST0wsCisJCQkJICAwLCBpbjFyX3RleHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqZG1pY19zcmNfdGV4dFtdID0geworCSJETUlDREFUMSIsICJETUlDREFUMiIsICJETUlDREFUMyIKK307CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChkbWljX3NyYzFfZW51bSwgV004OTk1X1BPV0VSX01BTkFHRU1FTlRfNSwKKwkJCQkgIDgsIGRtaWNfc3JjX3RleHQpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGRtaWNfc3JjMl9lbnVtLCBXTTg5OTVfUE9XRVJfTUFOQUdFTUVOVF81LAorCQkJCSAgNiwgZG1pY19zcmNfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5OTVfc25kX2NvbnRyb2xzW10gPSB7CisJU09DX0RPVUJMRV9SX1RMVigiREFDMSBWb2x1bWUiLCBXTTg5OTVfREFDMV9MRUZUX1ZPTFVNRSwKKwkJV004OTk1X0RBQzFfUklHSFRfVk9MVU1FLCAwLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorCVNPQ19ET1VCTEVfUigiREFDMSBTd2l0Y2giLCBXTTg5OTVfREFDMV9MRUZUX1ZPTFVNRSwKKwkJV004OTk1X0RBQzFfUklHSFRfVk9MVU1FLCA5LCAxLCAxKSwKKworCVNPQ19ET1VCTEVfUl9UTFYoIkRBQzIgVm9sdW1lIiwgV004OTk1X0RBQzJfTEVGVF9WT0xVTUUsCisJCVdNODk5NV9EQUMyX1JJR0hUX1ZPTFVNRSwgMCwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKKwlTT0NfRE9VQkxFX1IoIkRBQzIgU3dpdGNoIiwgV004OTk1X0RBQzJfTEVGVF9WT0xVTUUsCisJCVdNODk5NV9EQUMyX1JJR0hUX1ZPTFVNRSwgOSwgMSwgMSksCisKKwlTT0NfRE9VQkxFX1JfVExWKCJBSUYxREFDMSBWb2x1bWUiLCBXTTg5OTVfQUlGMV9EQUMxX0xFRlRfVk9MVU1FLAorCQlXTTg5OTVfQUlGMV9EQUMxX1JJR0hUX1ZPTFVNRSwgMCwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKKwlTT0NfRE9VQkxFX1JfVExWKCJBSUYxREFDMiBWb2x1bWUiLCBXTTg5OTVfQUlGMV9EQUMyX0xFRlRfVk9MVU1FLAorCQlXTTg5OTVfQUlGMV9EQUMyX1JJR0hUX1ZPTFVNRSwgMCwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKKwlTT0NfRE9VQkxFX1JfVExWKCJBSUYyREFDIFZvbHVtZSIsIFdNODk5NV9BSUYyX0RBQ19MRUZUX1ZPTFVNRSwKKwkJV004OTk1X0FJRjJfREFDX1JJR0hUX1ZPTFVNRSwgMCwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKKworCVNPQ19ET1VCTEVfUl9UTFYoIklOMUxSIFZvbHVtZSIsIFdNODk5NV9MRUZUX0xJTkVfSU5QVVRfMV9WT0xVTUUsCisJCVdNODk5NV9SSUdIVF9MSU5FX0lOUFVUXzFfVk9MVU1FLCAwLCAzMSwgMCwgaW4xbHJfcGdhX3RsdiksCisKKwlTT0NfU0lOR0xFX1RMVigiSU4xTCBCb29zdCIsIFdNODk5NV9MRUZUX0xJTkVfSU5QVVRfQ09OVFJPTCwKKwkJNCwgMywgMCwgaW4xbF9ib29zdF90bHYpLAorCisJU09DX0VOVU0oIklOMUwgTW9kZSIsIGluMWxfZW51bSksCisJU09DX0VOVU0oIklOMVIgTW9kZSIsIGluMXJfZW51bSksCisKKwlTT0NfRU5VTSgiRE1JQzEgU1JDIiwgZG1pY19zcmMxX2VudW0pLAorCVNPQ19FTlVNKCJETUlDMiBTUkMiLCBkbWljX3NyYzJfZW51bSksCisKKwlTT0NfRE9VQkxFX1RMVigiREFDMSBTaWRldG9uZSBWb2x1bWUiLCBXTTg5OTVfREFDMV9NSVhFUl9WT0xVTUVTLCAwLCA1LAorCQkyNCwgMCwgc2lkZXRvbmVfdGx2KSwKKwlTT0NfRE9VQkxFX1RMVigiREFDMiBTaWRldG9uZSBWb2x1bWUiLCBXTTg5OTVfREFDMl9NSVhFUl9WT0xVTUVTLCAwLCA1LAorCQkyNCwgMCwgc2lkZXRvbmVfdGx2KSwKKworCVNPQ19ET1VCTEVfUl9UTFYoIkFJRjFBREMxIFZvbHVtZSIsIFdNODk5NV9BSUYxX0FEQzFfTEVGVF9WT0xVTUUsCisJCVdNODk5NV9BSUYxX0FEQzFfUklHSFRfVk9MVU1FLCAwLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkFJRjFBREMyIFZvbHVtZSIsIFdNODk5NV9BSUYxX0FEQzJfTEVGVF9WT0xVTUUsCisJCVdNODk5NV9BSUYxX0FEQzJfUklHSFRfVk9MVU1FLCAwLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkFJRjJBREMgVm9sdW1lIiwgV004OTk1X0FJRjJfQURDX0xFRlRfVk9MVU1FLAorCQlXTTg5OTVfQUlGMl9BRENfUklHSFRfVk9MVU1FLCAwLCA5NiwgMCwgZGlnaXRhbF90bHYpCit9OworCitzdGF0aWMgdm9pZCB3bTg5OTVfdXBkYXRlX2NsYXNzX3coc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCBlbmFibGUgPSAxOworCWludCBzb3VyY2UgPSAwOyAgLyogR0NDIGZsb3cgYW5hbHlzaXMgY2FuJ3QgdHJhY2sgZW5hYmxlICovCisJaW50IHJlZywgcmVnX3I7CisKKwkvKiBXZSBhbHNvIG5lZWQgdGhlIHNhbWUgc2V0dGluZyBmb3IgTC9SIGFuZCBvbmx5IG9uZSBwYXRoICovCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTVfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcpOworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBXTTg5OTVfQUlGMkRBQ0xfVE9fREFDMUw6CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkNsYXNzIFcgc291cmNlIEFJRjJEQUNcbiIpOworCQlzb3VyY2UgPSAyIDw8IFdNODk5NV9DUF9EWU5fU1JDX1NFTF9TSElGVDsKKwkJYnJlYWs7CisJY2FzZSBXTTg5OTVfQUlGMURBQzJMX1RPX0RBQzFMOgorCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJDbGFzcyBXIHNvdXJjZSBBSUYxREFDMlxuIik7CisJCXNvdXJjZSA9IDEgPDwgV004OTk1X0NQX0RZTl9TUkNfU0VMX1NISUZUOworCQlicmVhazsKKwljYXNlIFdNODk5NV9BSUYxREFDMUxfVE9fREFDMUw6CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkNsYXNzIFcgc291cmNlIEFJRjFEQUMxXG4iKTsKKwkJc291cmNlID0gMCA8PCBXTTg5OTVfQ1BfRFlOX1NSQ19TRUxfU0hJRlQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkRBQyBtaXhlciBzZXR0aW5nOiAleFxuIiwgcmVnKTsKKwkJZW5hYmxlID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmVnX3IgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5NV9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcpOworCWlmIChyZWdfciAhPSByZWcpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTGVmdCBhbmQgcmlnaHQgREFDIG1peGVycyBkaWZmZXJlbnRcbiIpOworCQllbmFibGUgPSAwOworCX0KKworCWlmIChlbmFibGUpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ2xhc3MgVyBlbmFibGVkXG4iKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X0NMQVNTX1dfMSwKKwkJCQkgICAgV004OTk1X0NQX0RZTl9QV1JfTUFTSyB8CisJCQkJICAgIFdNODk5NV9DUF9EWU5fU1JDX1NFTF9NQVNLLAorCQkJCSAgICBzb3VyY2UgfCBXTTg5OTVfQ1BfRFlOX1BXUik7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ2xhc3MgVyBkaXNhYmxlZFxuIik7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NV9DTEFTU19XXzEsCisJCQkJICAgIFdNODk5NV9DUF9EWU5fUFdSX01BU0ssIDApOworCX0KK30KKworc3RhdGljIGludCBjaGVja19jbGtfc3lzKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzb3VyY2UsCisJCQkgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNpbmspCit7CisJdW5zaWduZWQgaW50IHJlZzsKKwljb25zdCBjaGFyICpjbGs7CisKKwlyZWcgPSBzbmRfc29jX3JlYWQoc291cmNlLT5jb2RlYywgV004OTk1X0NMT0NLSU5HXzEpOworCS8qIENoZWNrIHdoYXQgd2UncmUgY3VycmVudGx5IHVzaW5nIGZvciBDTEtfU1lTICovCisJaWYgKHJlZyAmIFdNODk5NV9TWVNDTEtfU1JDKQorCQljbGsgPSAiQUlGMkNMSyI7CisJZWxzZQorCQljbGsgPSAiQUlGMUNMSyI7CisJcmV0dXJuICFzdHJjbXAoc291cmNlLT5uYW1lLCBjbGspOworfQorCitzdGF0aWMgaW50IHdtODk5NV9wdXRfY2xhc3NfdyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0OworCisJdyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwljb2RlYyA9IHctPmNvZGVjOworCXJldCA9IHNuZF9zb2NfZGFwbV9wdXRfdm9sc3coa2NvbnRyb2wsIHVjb250cm9sKTsKKwl3bTg5OTVfdXBkYXRlX2NsYXNzX3coY29kZWMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaHBfc3VwcGx5X2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IHdtODk5NV9wcml2ICp3bTg5OTU7CisKKwljb2RlYyA9IHctPmNvZGVjOworCXdtODk5NSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCS8qIEVuYWJsZSB0aGUgaGVhZHBob25lIGFtcCAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTVfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICBXTTg5OTVfSFBPVVQxTF9FTkFfTUFTSyB8CisJCQkJICAgIFdNODk5NV9IUE9VVDFSX0VOQV9NQVNLLAorCQkJCSAgICBXTTg5OTVfSFBPVVQxTF9FTkEgfAorCQkJCSAgICBXTTg5OTVfSFBPVVQxUl9FTkEpOworCisJCS8qIEVuYWJsZSB0aGUgc2Vjb25kIHN0YWdlICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NV9BTkFMT0dVRV9IUF8xLAorCQkJCSAgICBXTTg5OTVfSFBPVVQxTF9ETFlfTUFTSyB8CisJCQkJICAgIFdNODk5NV9IUE9VVDFSX0RMWV9NQVNLLAorCQkJCSAgICBXTTg5OTVfSFBPVVQxTF9ETFkgfAorCQkJCSAgICBXTTg5OTVfSFBPVVQxUl9ETFkpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTVfQ0hBUkdFX1BVTVBfMSwKKwkJCQkgICAgV004OTk1X0NQX0VOQV9NQVNLLCAwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRjX3NlcnZvX2NtZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCwgdW5zaWduZWQgaW50IG1hc2spCit7CisJaW50IHRpbWVvdXQgPSAxMDsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiByZWcgPSAlI3gsIHZhbCA9ICUjeCwgbWFzayA9ICUjeFxuIiwKKwkJX19mdW5jX18sIHJlZywgdmFsLCBtYXNrKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIHJlZywgdmFsKTsKKwl3aGlsZSAodGltZW91dC0tKSB7CisJCW1zbGVlcCgxMCk7CisJCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk1X0RDX1NFUlZPX1JFQURCQUNLXzApOworCQlpZiAoKHZhbCAmIG1hc2spID09IG1hc2spCisJCQlyZXR1cm47CisJfQorCisJZGV2X2Vycihjb2RlYy0+ZGV2LCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIERDIFNlcnZvXG4iKTsKK30KKworc3RhdGljIGludCBocF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXVuc2lnbmVkIGludCByZWc7CisKKwljb2RlYyA9IHctPmNvZGVjOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk1X0FOQUxPR1VFX0hQXzEpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTVfQ0hBUkdFX1BVTVBfMSwKKwkJCQkgICAgV004OTk1X0NQX0VOQV9NQVNLLCBXTTg5OTVfQ1BfRU5BKTsKKworCQltc2xlZXAoNSk7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTk1X0hQT1VUMUxfRU5BX01BU0sgfAorCQkJCSAgICBXTTg5OTVfSFBPVVQxUl9FTkFfTUFTSywKKwkJCQkgICAgV004OTk1X0hQT1VUMUxfRU5BIHwgV004OTk1X0hQT1VUMVJfRU5BKTsKKworCQl1ZGVsYXkoMjApOworCisJCXJlZyB8PSBXTTg5OTVfSFBPVVQxTF9ETFkgfCBXTTg5OTVfSFBPVVQxUl9ETFk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5NV9BTkFMT0dVRV9IUF8xLCByZWcpOworCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5NV9EQ19TRVJWT18xLCBXTTg5OTVfRENTX0VOQV9DSEFOXzAgfAorCQkJICAgICAgV004OTk1X0RDU19FTkFfQ0hBTl8xKTsKKworCQlkY19zZXJ2b19jbWQoY29kZWMsIFdNODk5NV9EQ19TRVJWT18yLAorCQkJICAgICBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8wIHwKKwkJCSAgICAgV004OTk1X0RDU19UUklHX1NUQVJUVVBfMSwKKwkJCSAgICAgV004OTk1X0RDU19UUklHX0RBQ19XUl8wIHwKKwkJCSAgICAgV004OTk1X0RDU19UUklHX0RBQ19XUl8xKTsKKworCQlyZWcgfD0gV004OTk1X0hQT1VUMVJfT1VUUCB8IFdNODk5NV9IUE9VVDFSX1JNVl9TSE9SVCB8CisJCSAgICAgICBXTTg5OTVfSFBPVVQxTF9PVVRQIHwgV004OTk1X0hQT1VUMUxfUk1WX1NIT1JUOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTVfQU5BTE9HVUVfSFBfMSwgcmVnKTsKKworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTVfQU5BTE9HVUVfSFBfMSwKKwkJCQkgICAgV004OTk1X0hQT1VUMUxfT1VUUF9NQVNLIHwKKwkJCQkgICAgV004OTk1X0hQT1VUMVJfT1VUUF9NQVNLIHwKKwkJCQkgICAgV004OTk1X0hQT1VUMUxfUk1WX1NIT1JUX01BU0sgfAorCQkJCSAgICBXTTg5OTVfSFBPVVQxUl9STVZfU0hPUlRfTUFTSywgMCk7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X0FOQUxPR1VFX0hQXzEsCisJCQkJICAgIFdNODk5NV9IUE9VVDFMX0RMWV9NQVNLIHwKKwkJCQkgICAgV004OTk1X0hQT1VUMVJfRExZX01BU0ssIDApOworCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5NV9EQ19TRVJWT18xLCAwKTsKKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTVfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICBXTTg5OTVfSFBPVVQxTF9FTkFfTUFTSyB8CisJCQkJICAgIFdNODk5NV9IUE9VVDFSX0VOQV9NQVNLLAorCQkJCSAgICAwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlndXJlX2FpZl9jbG9jayhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBhaWYpCit7CisJc3RydWN0IHdtODk5NV9wcml2ICp3bTg5OTU7CisJaW50IHJhdGU7CisJaW50IHJlZzEgPSAwOworCWludCBvZmZzZXQ7CisKKwl3bTg5OTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCWlmIChhaWYpCisJCW9mZnNldCA9IDQ7CisJZWxzZQorCQlvZmZzZXQgPSAwOworCisJc3dpdGNoICh3bTg5OTUtPnN5c2Nsa1thaWZdKSB7CisJY2FzZSBXTTg5OTVfU1lTQ0xLX01DTEsxOgorCQlyYXRlID0gd204OTk1LT5tY2xrWzBdOworCQlicmVhazsKKwljYXNlIFdNODk5NV9TWVNDTEtfTUNMSzI6CisJCXJlZzEgfD0gMHg4OworCQlyYXRlID0gd204OTk1LT5tY2xrWzFdOworCQlicmVhazsKKwljYXNlIFdNODk5NV9TWVNDTEtfRkxMMToKKwkJcmVnMSB8PSAweDEwOworCQlyYXRlID0gd204OTk1LT5mbGxbMF0ub3V0OworCQlicmVhazsKKwljYXNlIFdNODk5NV9TWVNDTEtfRkxMMjoKKwkJcmVnMSB8PSAweDE4OworCQlyYXRlID0gd204OTk1LT5mbGxbMV0ub3V0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocmF0ZSA+PSAxMzUwMDAwMCkgeworCQlyYXRlIC89IDI7CisJCXJlZzEgfD0gV004OTk1X0FJRjFDTEtfRElWOworCisJCWRldl9kYmcoY29kZWMtPmRldiwgIkRpdmlkaW5nIEFJRiVkIGNsb2NrIHRvICVkSHpcbiIsCisJCQlhaWYgKyAxLCByYXRlKTsKKwl9CisKKwl3bTg5OTUtPmFpZmNsa1thaWZdID0gcmF0ZTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NV9BSUYxX0NMT0NLSU5HXzEgKyBvZmZzZXQsCisJCQkgICAgV004OTk1X0FJRjFDTEtfU1JDX01BU0sgfCBXTTg5OTVfQUlGMUNMS19ESVZfTUFTSywKKwkJCSAgICByZWcxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb25maWd1cmVfY2xvY2soc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5OTVfcHJpdiAqd204OTk1OworCWludCBvbGQsIG5ldzsKKworCXdtODk5NSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJLyogQnJpbmcgdXAgdGhlIEFJRiBjbG9ja3MgZmlyc3QgKi8KKwljb25maWd1cmVfYWlmX2Nsb2NrKGNvZGVjLCAwKTsKKwljb25maWd1cmVfYWlmX2Nsb2NrKGNvZGVjLCAxKTsKKworCS8qCisJICogVGhlbiBzd2l0Y2ggQ0xLX1NZUyBvdmVyIHRvIHRoZSBoaWdoZXIgb2YgdGhlbTsgYSBjaGFuZ2UKKwkgKiBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSBjbG9ja2luZyBjaGFuZ2Ugd2hpY2ggY2FuCisJICogb25seSBiZSBtYWRlIG91dHNpZGUgb2YgREFQTSBzbyB3ZSBjYW4gc2FmZWx5IHJlZG8gdGhlCisJICogY2xvY2tpbmcuCisJICovCisKKwkvKiBJZiB0aGV5J3JlIGVxdWFsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGlzIHVzZWQgKi8KKwlpZiAod204OTk1LT5haWZjbGtbMF0gPT0gd204OTk1LT5haWZjbGtbMV0pCisJCXJldHVybiAwOworCisJaWYgKHdtODk5NS0+YWlmY2xrWzBdIDwgd204OTk1LT5haWZjbGtbMV0pCisJCW5ldyA9IFdNODk5NV9TWVNDTEtfU1JDOworCWVsc2UKKwkJbmV3ID0gMDsKKworCW9sZCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk1X0NMT0NLSU5HXzEpICYgV004OTk1X1NZU0NMS19TUkM7CisKKwkvKiBJZiB0aGVyZSdzIG5vIGNoYW5nZSB0aGVuIHdlJ3JlIGRvbmUuICovCisJaWYgKG9sZCA9PSBuZXcpCisJCXJldHVybiAwOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X0NMT0NLSU5HXzEsCisJCQkgICAgV004OTk1X1NZU0NMS19TUkNfTUFTSywgbmV3KTsKKworCXNuZF9zb2NfZGFwbV9zeW5jKCZjb2RlYy0+ZGFwbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbGtfc3lzX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJY29kZWMgPSB3LT5jb2RlYzsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQlyZXR1cm4gY29uZmlndXJlX2Nsb2NrKGNvZGVjKTsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQljb25maWd1cmVfY2xvY2soY29kZWMpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNpZGV0b25lX3RleHRbXSA9IHsKKwkiQURDL0RNSUMxIiwgIkRNSUMyIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc2lkZXRvbmUxX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTVfU0lERVRPTkUsIDAsIDIsIHNpZGV0b25lX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc2lkZXRvbmUxX211eCA9CisJU09DX0RBUE1fRU5VTSgiTGVmdCBTaWRldG9uZSBNdXgiLCBzaWRldG9uZTFfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc2lkZXRvbmUyX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTVfU0lERVRPTkUsIDEsIDIsIHNpZGV0b25lX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc2lkZXRvbmUyX211eCA9CisJU09DX0RBUE1fRU5VTSgiUmlnaHQgU2lkZXRvbmUgTXV4Iiwgc2lkZXRvbmUyX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmMWFkYzFsX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiQURDL0RNSUMgU3dpdGNoIiwgV004OTk1X0FJRjFfQURDMV9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTEsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiQUlGMiBTd2l0Y2giLCBXTTg5OTVfQUlGMV9BREMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmMWFkYzFyX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiQURDL0RNSUMgU3dpdGNoIiwgV004OTk1X0FJRjFfQURDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkxLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkFJRjIgU3dpdGNoIiwgV004OTk1X0FJRjFfQURDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYxYWRjMmxfbWl4W10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJETUlDIFN3aXRjaCIsIFdNODk5NV9BSUYxX0FEQzJfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkxLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkFJRjIgU3dpdGNoIiwgV004OTk1X0FJRjFfQURDMl9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjFhZGMycl9taXhbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkRNSUMgU3dpdGNoIiwgV004OTk1X0FJRjFfQURDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkxLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkFJRjIgU3dpdGNoIiwgV004OTk1X0FJRjFfQURDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWMxbF9taXhbXSA9IHsKKwlXTTg5OTVfQ0xBU1NfV19TV0lUQ0goIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5NV9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJNSwgMSwgMCksCisJV004OTk1X0NMQVNTX1dfU1dJVENIKCJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5NV9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJNCwgMSwgMCksCisJV004OTk1X0NMQVNTX1dfU1dJVENIKCJBSUYyIFN3aXRjaCIsIFdNODk5NV9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJMiwgMSwgMCksCisJV004OTk1X0NMQVNTX1dfU1dJVENIKCJBSUYxLjIgU3dpdGNoIiwgV004OTk1X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkxLCAxLCAwKSwKKwlXTTg5OTVfQ0xBU1NfV19TV0lUQ0goIkFJRjEuMSBTd2l0Y2giLCBXTTg5OTVfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzFyX21peFtdID0geworCVdNODk5NV9DTEFTU19XX1NXSVRDSCgiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk1X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywKKwkJNSwgMSwgMCksCisJV004OTk1X0NMQVNTX1dfU1dJVENIKCJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5NV9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTQsIDEsIDApLAorCVdNODk5NV9DTEFTU19XX1NXSVRDSCgiQUlGMiBTd2l0Y2giLCBXTTg5OTVfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkyLCAxLCAwKSwKKwlXTTg5OTVfQ0xBU1NfV19TV0lUQ0goIkFJRjEuMiBTd2l0Y2giLCBXTTg5OTVfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkxLCAxLCAwKSwKKwlXTTg5OTVfQ0xBU1NfV19TV0lUQ0goIkFJRjEuMSBTd2l0Y2giLCBXTTg5OTVfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYyZGFjMmxfbWl4W10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTVfREFDMl9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTUsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTVfREFDMl9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiQUlGMiBTd2l0Y2giLCBXTTg5OTVfREFDMl9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTIsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiQUlGMS4yIFN3aXRjaCIsIFdNODk5NV9EQUMyX0xFRlRfTUlYRVJfUk9VVElORywKKwkJMSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJBSUYxLjEgU3dpdGNoIiwgV004OTk1X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYyZGFjMnJfbWl4W10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTVfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQk1LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk1X0RBQzJfUklHSFRfTUlYRVJfUk9VVElORywKKwkJNCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJBSUYyIFN3aXRjaCIsIFdNODk5NV9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTIsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiQUlGMS4yIFN3aXRjaCIsIFdNODk5NV9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTEsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiQUlGMS4xIFN3aXRjaCIsIFdNODk5NV9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGluMWxfcGdhID0KKwlTT0NfREFQTV9TSU5HTEUoIklOMUwgU3dpdGNoIiwgV004OTk1X1BPV0VSX01BTkFHRU1FTlRfMiwgNSwgMSwgMCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBpbjFyX3BnYSA9CisJU09DX0RBUE1fU0lOR0xFKCJJTjFSIFN3aXRjaCIsIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzIsIDQsIDEsIDApOworCitzdGF0aWMgY29uc3QgY2hhciAqYWRjX211eF90ZXh0W10gPSB7CisJIkFEQyIsCisJIkRNSUMiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhZGNfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKDAsIDAsIDIsIGFkY19tdXhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZGNsX211eCA9CisJU09DX0RBUE1fRU5VTV9WSVJUKCJBRENMIE11eCIsIGFkY19lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkY3JfbXV4ID0KKwlTT0NfREFQTV9FTlVNX1ZJUlQoIkFEQ1IgTXV4IiwgYWRjX2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqc3BrX3NyY190ZXh0W10gPSB7CisJIkRBQzFMIiwgIkRBQzFSIiwgIkRBQzJMIiwgIkRBQzJSIgorfTsKKworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKHNwazFsX3NyY19lbnVtLCBXTTg5OTVfTEVGVF9QRE1fU1BFQUtFUl8xLAorCQkJCSAgMCwgc3BrX3NyY190ZXh0KTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChzcGsxcl9zcmNfZW51bSwgV004OTk1X1JJR0hUX1BETV9TUEVBS0VSXzEsCisJCQkJICAwLCBzcGtfc3JjX3RleHQpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKHNwazJsX3NyY19lbnVtLCBXTTg5OTVfTEVGVF9QRE1fU1BFQUtFUl8yLAorCQkJCSAgMCwgc3BrX3NyY190ZXh0KTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChzcGsycl9zcmNfZW51bSwgV004OTk1X1JJR0hUX1BETV9TUEVBS0VSXzIsCisJCQkJICAwLCBzcGtfc3JjX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3BrMWxfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJTUEsxTCBTUkMiLCBzcGsxbF9zcmNfZW51bSk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3BrMXJfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJTUEsxUiBTUkMiLCBzcGsxcl9zcmNfZW51bSk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3BrMmxfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJTUEsyTCBTUkMiLCBzcGsybF9zcmNfZW51bSk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3BrMnJfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJTUEsyUiBTUkMiLCBzcGsycl9zcmNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5OTVfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDMURBVCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiRE1JQzJEQVQiKSwKKworCVNORF9TT0NfREFQTV9JTlBVVCgiSU4xTCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiSU4xUiIpLAorCisJU05EX1NPQ19EQVBNX01JWEVSKCJJTjFMIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJmluMWxfcGdhLCAxKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIklOMVIgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmaW4xcl9wZ2EsIDEpLAorCisJU05EX1NPQ19EQVBNX01JQ0JJQVMoIk1JQ0JJQVMxIiwgV004OTk1X1BPV0VSX01BTkFHRU1FTlRfMSwgOCwgMCksCisJU05EX1NPQ19EQVBNX01JQ0JJQVMoIk1JQ0JJQVMyIiwgV004OTk1X1BPV0VSX01BTkFHRU1FTlRfMSwgOSwgMCksCisKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJBSUYxQ0xLIiwgV004OTk1X0FJRjFfQ0xPQ0tJTkdfMSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiQUlGMkNMSyIsIFdNODk5NV9BSUYyX0NMT0NLSU5HXzEsIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIkRTUDFDTEsiLCBXTTg5OTVfQ0xPQ0tJTkdfMSwgMywgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiRFNQMkNMSyIsIFdNODk5NV9DTE9DS0lOR18xLCAyLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJTWVNEU1BDTEsiLCBXTTg5OTVfQ0xPQ0tJTkdfMSwgMSwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiQ0xLX1NZUyIsIFNORF9TT0NfTk9QTSwgMCwgMCwgY2xrX3N5c19ldmVudCwKKwkJU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAorCisJU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMxTCIsICJBSUYxIENhcHR1cmUiLCAwLAorCQlXTTg5OTVfUE9XRVJfTUFOQUdFTUVOVF8zLCA5LCAwKSwKKwlTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzFSIiwgIkFJRjEgQ2FwdHVyZSIsIDAsCisJCVdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzMsIDgsIDApLAorCVNORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDREFUIiwgIkFJRjEgQ2FwdHVyZSIsIDAsCisJU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzJMIiwgIkFJRjEgQ2FwdHVyZSIsCisJCTAsIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzMsIDExLCAwKSwKKwlTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzJSIiwgIkFJRjEgQ2FwdHVyZSIsCisJCTAsIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzMsIDEwLCAwKSwKKworCVNORF9TT0NfREFQTV9WSVJUX01VWCgiQURDTCBNdXgiLCBTTkRfU09DX05PUE0sIDEsIDAsCisJCSZhZGNsX211eCksCisJU05EX1NPQ19EQVBNX1ZJUlRfTVVYKCJBRENSIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJmFkY3JfbXV4KSwKKworCVNORF9TT0NfREFQTV9BREMoIkRNSUMyTCIsIE5VTEwsIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzMsIDUsIDApLAorCVNORF9TT0NfREFQTV9BREMoIkRNSUMyUiIsIE5VTEwsIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzMsIDQsIDApLAorCVNORF9TT0NfREFQTV9BREMoIkRNSUMxTCIsIE5VTEwsIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzMsIDMsIDApLAorCVNORF9TT0NfREFQTV9BREMoIkRNSUMxUiIsIE5VTEwsIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzMsIDIsIDApLAorCisJU05EX1NPQ19EQVBNX0FEQygiQURDTCIsIE5VTEwsIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzMsIDEsIDApLAorCVNORF9TT0NfREFQTV9BREMoIkFEQ1IiLCBOVUxMLCBXTTg5OTVfUE9XRVJfTUFOQUdFTUVOVF8zLCAwLCAwKSwKKworCVNORF9TT0NfREFQTV9NSVhFUigiQUlGMUFEQzFMIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQlhaWYxYWRjMWxfbWl4LCBBUlJBWV9TSVpFKGFpZjFhZGMxbF9taXgpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkFJRjFBREMxUiBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJYWlmMWFkYzFyX21peCwgQVJSQVlfU0laRShhaWYxYWRjMXJfbWl4KSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJBSUYxQURDMkwgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCWFpZjFhZGMybF9taXgsIEFSUkFZX1NJWkUoYWlmMWFkYzJsX21peCkpLAorCVNORF9TT0NfREFQTV9NSVhFUigiQUlGMUFEQzJSIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQlhaWYxYWRjMnJfbWl4LCBBUlJBWV9TSVpFKGFpZjFhZGMycl9taXgpKSwKKworCVNORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFEQUMxTCIsIE5VTEwsIDAsIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzQsCisJCTksIDApLAorCVNORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFEQUMxUiIsIE5VTEwsIDAsIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzQsCisJCTgsIDApLAorCVNORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFEQUNEQVQiLCAiQUlGMSBQbGF5YmFjayIsIDAsIFNORF9TT0NfTk9QTSwKKwkJMCwgMCksCisKKwlTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxREFDMkwiLCBOVUxMLCAwLCBXTTg5OTVfUE9XRVJfTUFOQUdFTUVOVF80LAorCQkxMSwgMCksCisJU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMURBQzJSIiwgTlVMTCwgMCwgV004OTk1X1BPV0VSX01BTkFHRU1FTlRfNCwKKwkJMTAsIDApLAorCisJU05EX1NPQ19EQVBNX01JWEVSKCJBSUYyREFDMkwgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCWFpZjJkYWMybF9taXgsIEFSUkFZX1NJWkUoYWlmMmRhYzJsX21peCkpLAorCVNORF9TT0NfREFQTV9NSVhFUigiQUlGMkRBQzJSIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQlhaWYyZGFjMnJfbWl4LCBBUlJBWV9TSVpFKGFpZjJkYWMycl9taXgpKSwKKworCVNORF9TT0NfREFQTV9EQUMoIkRBQzJMIiwgTlVMTCwgV004OTk1X1BPV0VSX01BTkFHRU1FTlRfNCwgMywgMCksCisJU05EX1NPQ19EQVBNX0RBQygiREFDMlIiLCBOVUxMLCBXTTg5OTVfUE9XRVJfTUFOQUdFTUVOVF80LCAyLCAwKSwKKwlTTkRfU09DX0RBUE1fREFDKCJEQUMxTCIsIE5VTEwsIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzQsIDEsIDApLAorCVNORF9TT0NfREFQTV9EQUMoIkRBQzFSIiwgTlVMTCwgV004OTk1X1BPV0VSX01BTkFHRU1FTlRfNCwgMCwgMCksCisKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkRBQzFMIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBkYWMxbF9taXgsCisJCUFSUkFZX1NJWkUoZGFjMWxfbWl4KSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJEQUMxUiBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwgZGFjMXJfbWl4LAorCQlBUlJBWV9TSVpFKGRhYzFyX21peCkpLAorCisJU05EX1NPQ19EQVBNX01VWCgiTGVmdCBTaWRldG9uZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJnNpZGV0b25lMV9tdXgpLAorCVNORF9TT0NfREFQTV9NVVgoIlJpZ2h0IFNpZGV0b25lIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmc2lkZXRvbmUyX211eCksCisKKwlTTkRfU09DX0RBUE1fUEdBX0UoIkhlYWRwaG9uZSBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJCWhwX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJIZWFkcGhvbmUgU3VwcGx5IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQlocF9zdXBwbHlfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAorCisJU05EX1NPQ19EQVBNX01VWCgiU1BLMUwgRHJpdmVyIiwgV004OTk1X0xFRlRfUERNX1NQRUFLRVJfMSwKKwkJNCwgMCwgJnNwazFsX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiU1BLMVIgRHJpdmVyIiwgV004OTk1X1JJR0hUX1BETV9TUEVBS0VSXzEsCisJCTQsIDAsICZzcGsxcl9tdXgpLAorCVNORF9TT0NfREFQTV9NVVgoIlNQSzJMIERyaXZlciIsIFdNODk5NV9MRUZUX1BETV9TUEVBS0VSXzIsCisJCTQsIDAsICZzcGsybF9tdXgpLAorCVNORF9TT0NfREFQTV9NVVgoIlNQSzJSIERyaXZlciIsIFdNODk5NV9SSUdIVF9QRE1fU1BFQUtFUl8yLAorCQk0LCAwLCAmc3BrMnJfbXV4KSwKKworCVNORF9TT0NfREFQTV9TVVBQTFkoIkxETzIiLCBXTTg5OTVfUE9XRVJfTUFOQUdFTUVOVF8yLCAxLCAwLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQMUwiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJIUDFSIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiU1BLMUwiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJTUEsxUiIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlNQSzJMIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiU1BLMlIiKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTk1X2ludGVyY29uW10gPSB7CisJeyAiQ0xLX1NZUyIsIE5VTEwsICJBSUYxQ0xLIiwgY2hlY2tfY2xrX3N5cyB9LAorCXsgIkNMS19TWVMiLCBOVUxMLCAiQUlGMkNMSyIsIGNoZWNrX2Nsa19zeXMgfSwKKworCXsgIkRTUDFDTEsiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJEU1AyQ0xLIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiU1lTRFNQQ0xLIiwgTlVMTCwgIkNMS19TWVMiIH0sCisKKwl7ICJBSUYxQURDMUwiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxQURDMUwiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxQURDMVIiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxQURDMVIiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxQURDMVIiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAorCisJeyAiQUlGMUFEQzJMIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQUlGMUFEQzJMIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQUlGMUFEQzJSIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQUlGMUFEQzJSIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQUlGMUFEQzJSIiwgTlVMTCwgIlNZU0RTUENMSyIgfSwKKworCXsgIkRNSUMxTCIsIE5VTEwsICJETUlDMURBVCIgfSwKKwl7ICJETUlDMUwiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJETUlDMVIiLCBOVUxMLCAiRE1JQzFEQVQiIH0sCisJeyAiRE1JQzFSIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiRE1JQzJMIiwgTlVMTCwgIkRNSUMyREFUIiB9LAorCXsgIkRNSUMyTCIsIE5VTEwsICJDTEtfU1lTIiB9LAorCXsgIkRNSUMyUiIsIE5VTEwsICJETUlDMkRBVCIgfSwKKwl7ICJETUlDMlIiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKworCXsgIkFEQ0wiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBRENMIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQURDTCIsIE5VTEwsICJTWVNEU1BDTEsiIH0sCisKKwl7ICJBRENSIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQURDUiIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkFEQ1IiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAorCisJeyAiSU4xTCBQR0EiLCAiSU4xTCBTd2l0Y2giLCAiSU4xTCIgfSwKKwl7ICJJTjFSIFBHQSIsICJJTjFSIFN3aXRjaCIsICJJTjFSIiB9LAorCXsgIklOMUwgUEdBIiwgTlVMTCwgIkxETzIiIH0sCisJeyAiSU4xUiBQR0EiLCBOVUxMLCAiTERPMiIgfSwKKworCXsgIkFEQ0wiLCBOVUxMLCAiSU4xTCBQR0EiIH0sCisJeyAiQURDUiIsIE5VTEwsICJJTjFSIFBHQSIgfSwKKworCXsgIkFEQ0wgTXV4IiwgIkFEQyIsICJBRENMIiB9LAorCXsgIkFEQ0wgTXV4IiwgIkRNSUMiLCAiRE1JQzFMIiB9LAorCXsgIkFEQ1IgTXV4IiwgIkFEQyIsICJBRENSIiB9LAorCXsgIkFEQ1IgTXV4IiwgIkRNSUMiLCAiRE1JQzFSIiB9LAorCisJLyogQUlGMSBvdXRwdXRzICovCisJeyAiQUlGMUFEQzFMIiwgTlVMTCwgIkFJRjFBREMxTCBNaXhlciIgfSwKKwl7ICJBSUYxQURDMUwgTWl4ZXIiLCAiQURDL0RNSUMgU3dpdGNoIiwgIkFEQ0wgTXV4IiB9LAorCisJeyAiQUlGMUFEQzFSIiwgTlVMTCwgIkFJRjFBREMxUiBNaXhlciIgfSwKKwl7ICJBSUYxQURDMVIgTWl4ZXIiLCAiQURDL0RNSUMgU3dpdGNoIiwgIkFEQ1IgTXV4IiB9LAorCisJeyAiQUlGMUFEQzJMIiwgTlVMTCwgIkFJRjFBREMyTCBNaXhlciIgfSwKKwl7ICJBSUYxQURDMkwgTWl4ZXIiLCAiRE1JQyBTd2l0Y2giLCAiRE1JQzJMIiB9LAorCisJeyAiQUlGMUFEQzJSIiwgTlVMTCwgIkFJRjFBREMyUiBNaXhlciIgfSwKKwl7ICJBSUYxQURDMlIgTWl4ZXIiLCAiRE1JQyBTd2l0Y2giLCAiRE1JQzJSIiB9LAorCisJLyogU2lkZXRvbmUgKi8KKwl7ICJMZWZ0IFNpZGV0b25lIiwgIkFEQy9ETUlDMSIsICJBSUYxQURDMUwiIH0sCisJeyAiTGVmdCBTaWRldG9uZSIsICJETUlDMiIsICJBSUYxQURDMkwiIH0sCisJeyAiUmlnaHQgU2lkZXRvbmUiLCAiQURDL0RNSUMxIiwgIkFJRjFBREMxUiIgfSwKKwl7ICJSaWdodCBTaWRldG9uZSIsICJETUlDMiIsICJBSUYxQURDMlIiIH0sCisKKwl7ICJBSUYxREFDMUwiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxREFDMUwiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxREFDMVIiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxREFDMVIiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxREFDMVIiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAorCisJeyAiQUlGMURBQzJMIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQUlGMURBQzJMIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQUlGMURBQzJSIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQUlGMURBQzJSIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQUlGMURBQzJSIiwgTlVMTCwgIlNZU0RTUENMSyIgfSwKKworCXsgIkRBQzFMIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiREFDMUwiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJEQUMxTCIsIE5VTEwsICJTWVNEU1BDTEsiIH0sCisKKwl7ICJEQUMxUiIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkRBQzFSIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiREFDMVIiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAorCisJeyAiQUlGMURBQzFMIiwgTlVMTCwgIkFJRjFEQUNEQVQiIH0sCisJeyAiQUlGMURBQzFSIiwgTlVMTCwgIkFJRjFEQUNEQVQiIH0sCisJeyAiQUlGMURBQzJMIiwgTlVMTCwgIkFJRjFEQUNEQVQiIH0sCisJeyAiQUlGMURBQzJSIiwgTlVMTCwgIkFJRjFEQUNEQVQiIH0sCisKKwkvKiBEQUMxIGlucHV0cyAqLworCXsgIkRBQzFMIiwgTlVMTCwgIkRBQzFMIE1peGVyIiB9LAorCXsgIkRBQzFMIE1peGVyIiwgIkFJRjEuMSBTd2l0Y2giLCAiQUlGMURBQzFMIiB9LAorCXsgIkRBQzFMIE1peGVyIiwgIkFJRjEuMiBTd2l0Y2giLCAiQUlGMURBQzJMIiB9LAorCXsgIkRBQzFMIE1peGVyIiwgIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgIkxlZnQgU2lkZXRvbmUiIH0sCisJeyAiREFDMUwgTWl4ZXIiLCAiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgIlJpZ2h0IFNpZGV0b25lIiB9LAorCisJeyAiREFDMVIiLCBOVUxMLCAiREFDMVIgTWl4ZXIiIH0sCisJeyAiREFDMVIgTWl4ZXIiLCAiQUlGMS4xIFN3aXRjaCIsICJBSUYxREFDMVIiIH0sCisJeyAiREFDMVIgTWl4ZXIiLCAiQUlGMS4yIFN3aXRjaCIsICJBSUYxREFDMlIiIH0sCisJeyAiREFDMVIgTWl4ZXIiLCAiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCAiTGVmdCBTaWRldG9uZSIgfSwKKwl7ICJEQUMxUiBNaXhlciIsICJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCAiUmlnaHQgU2lkZXRvbmUiIH0sCisKKwkvKiBEQUMyL0FJRjIgb3V0cHV0cyAqLworCXsgIkRBQzJMIiwgTlVMTCwgIkFJRjJEQUMyTCBNaXhlciIgfSwKKwl7ICJBSUYyREFDMkwgTWl4ZXIiLCAiQUlGMS4yIFN3aXRjaCIsICJBSUYxREFDMkwiIH0sCisJeyAiQUlGMkRBQzJMIE1peGVyIiwgIkFJRjEuMSBTd2l0Y2giLCAiQUlGMURBQzFMIiB9LAorCisJeyAiREFDMlIiLCBOVUxMLCAiQUlGMkRBQzJSIE1peGVyIiB9LAorCXsgIkFJRjJEQUMyUiBNaXhlciIsICJBSUYxLjIgU3dpdGNoIiwgIkFJRjFEQUMyUiIgfSwKKwl7ICJBSUYyREFDMlIgTWl4ZXIiLCAiQUlGMS4xIFN3aXRjaCIsICJBSUYxREFDMVIiIH0sCisKKwkvKiBPdXRwdXQgc3RhZ2VzICovCisJeyAiSGVhZHBob25lIFBHQSIsIE5VTEwsICJEQUMxTCIgfSwKKwl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIkRBQzFSIiB9LAorCisJeyAiSGVhZHBob25lIFBHQSIsIE5VTEwsICJEQUMyTCIgfSwKKwl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIkRBQzJSIiB9LAorCisJeyAiSGVhZHBob25lIFBHQSIsIE5VTEwsICJIZWFkcGhvbmUgU3VwcGx5IiB9LAorCXsgIkhlYWRwaG9uZSBQR0EiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIkxETzIiIH0sCisKKwl7ICJIUDFMIiwgTlVMTCwgIkhlYWRwaG9uZSBQR0EiIH0sCisJeyAiSFAxUiIsIE5VTEwsICJIZWFkcGhvbmUgUEdBIiB9LAorCisJeyAiU1BLMUwgRHJpdmVyIiwgIkRBQzFMIiwgIkRBQzFMIiB9LAorCXsgIlNQSzFMIERyaXZlciIsICJEQUMxUiIsICJEQUMxUiIgfSwKKwl7ICJTUEsxTCBEcml2ZXIiLCAiREFDMkwiLCAiREFDMkwiIH0sCisJeyAiU1BLMUwgRHJpdmVyIiwgIkRBQzJSIiwgIkRBQzJSIiB9LAorCXsgIlNQSzFMIERyaXZlciIsIE5VTEwsICJDTEtfU1lTIiB9LAorCisJeyAiU1BLMVIgRHJpdmVyIiwgIkRBQzFMIiwgIkRBQzFMIiB9LAorCXsgIlNQSzFSIERyaXZlciIsICJEQUMxUiIsICJEQUMxUiIgfSwKKwl7ICJTUEsxUiBEcml2ZXIiLCAiREFDMkwiLCAiREFDMkwiIH0sCisJeyAiU1BLMVIgRHJpdmVyIiwgIkRBQzJSIiwgIkRBQzJSIiB9LAorCXsgIlNQSzFSIERyaXZlciIsIE5VTEwsICJDTEtfU1lTIiB9LAorCisJeyAiU1BLMkwgRHJpdmVyIiwgIkRBQzFMIiwgIkRBQzFMIiB9LAorCXsgIlNQSzJMIERyaXZlciIsICJEQUMxUiIsICJEQUMxUiIgfSwKKwl7ICJTUEsyTCBEcml2ZXIiLCAiREFDMkwiLCAiREFDMkwiIH0sCisJeyAiU1BLMkwgRHJpdmVyIiwgIkRBQzJSIiwgIkRBQzJSIiB9LAorCXsgIlNQSzJMIERyaXZlciIsIE5VTEwsICJDTEtfU1lTIiB9LAorCisJeyAiU1BLMlIgRHJpdmVyIiwgIkRBQzFMIiwgIkRBQzFMIiB9LAorCXsgIlNQSzJSIERyaXZlciIsICJEQUMxUiIsICJEQUMxUiIgfSwKKwl7ICJTUEsyUiBEcml2ZXIiLCAiREFDMkwiLCAiREFDMkwiIH0sCisJeyAiU1BLMlIgRHJpdmVyIiwgIkRBQzJSIiwgIkRBQzJSIiB9LAorCXsgIlNQSzJSIERyaXZlciIsIE5VTEwsICJDTEtfU1lTIiB9LAorCisJeyAiU1BLMUwiLCBOVUxMLCAiU1BLMUwgRHJpdmVyIiB9LAorCXsgIlNQSzFSIiwgTlVMTCwgIlNQSzFSIERyaXZlciIgfSwKKwl7ICJTUEsyTCIsIE5VTEwsICJTUEsyTCBEcml2ZXIiIH0sCisJeyAiU1BLMlIiLCBOVUxMLCAiU1BLMlIgRHJpdmVyIiB9Cit9OworCitzdGF0aWMgaW50IHdtODk5NV92b2xhdGlsZSh1bnNpZ25lZCBpbnQgcmVnKQoreworCS8qIG91dCBvZiBib3VuZHMgcmVnaXN0ZXJzIGFyZSBnZW5lcmFsbHkgY29uc2lkZXJlZAorCSAqIHZvbGF0aWxlIHRvIHN1cHBvcnQgcmVnaXN0ZXIgYmFua3MgdGhhdCBhcmUgcGFydGlhbGx5CisJICogb3duZWQgYnkgc29tZXRoaW5nIGVsc2UgZm9yIGUuZy4gYSBEU1AKKwkgKi8KKwlpZiAocmVnID4gV004OTk1X01BWF9DQUNIRURfUkVHSVNURVIpCisJCXJldHVybiAxOworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFdNODk5NV9TT0ZUV0FSRV9SRVNFVDoKKwljYXNlIFdNODk5NV9EQ19TRVJWT19SRUFEQkFDS18wOgorCWNhc2UgV004OTk1X0lOVEVSUlVQVF9TVEFUVVNfMToKKwljYXNlIFdNODk5NV9JTlRFUlJVUFRfU1RBVFVTXzI6CisJY2FzZSBXTTg5OTVfSU5URVJSVVBUX1NUQVRVU18xX01BU0s6CisJY2FzZSBXTTg5OTVfSU5URVJSVVBUX1NUQVRVU18yX01BU0s6CisJY2FzZSBXTTg5OTVfSU5URVJSVVBUX0NPTlRST0w6CisJY2FzZSBXTTg5OTVfQUNDRVNTT1JZX0RFVEVDVF9NT0RFMToKKwljYXNlIFdNODk5NV9BQ0NFU1NPUllfREVURUNUX01PREUyOgorCWNhc2UgV004OTk1X0hFQURQSE9ORV9ERVRFQ1QxOgorCWNhc2UgV004OTk1X0hFQURQSE9ORV9ERVRFQ1QyOgorCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTVfYWlmX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJaW50IG11dGVfcmVnOworCisJc3dpdGNoIChkYWktPmlkKSB7CisJY2FzZSAwOgorCQltdXRlX3JlZyA9IFdNODk5NV9BSUYxX0RBQzFfRklMVEVSU18xOworCQlicmVhazsKKwljYXNlIDE6CisJCW11dGVfcmVnID0gV004OTk1X0FJRjJfREFDX0ZJTFRFUlNfMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgbXV0ZV9yZWcsIFdNODk5NV9BSUYxREFDMV9NVVRFX01BU0ssCisJCQkgICAgISFtdXRlIDw8IFdNODk5NV9BSUYxREFDMV9NVVRFX1NISUZUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTVfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCBtYXN0ZXI7CisJaW50IGFpZjsKKworCWNvZGVjID0gZGFpLT5jb2RlYzsKKworCW1hc3RlciA9IDA7CisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQltYXN0ZXIgPSBXTTg5OTVfQUlGMV9NU1RSOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRhaS0+ZGV2LCAiVW5rbm93biBtYXN0ZXIvc2xhdmUgY29uZmlndXJhdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWFpZiA9IDA7CisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCWFpZiB8PSBXTTg5OTVfQUlGMV9MUkNMS19JTlY7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJYWlmIHw9ICgweDMgPDwgV004OTk1X0FJRjFfRk1UX1NISUZUKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWFpZiB8PSAoMHgyIDw8IFdNODk5NV9BSUYxX0ZNVF9TSElGVCk7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWFpZiB8PSAoMHgxIDw8IFdNODk5NV9BSUYxX0ZNVF9TSElGVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGFpLT5kZXYsICJVbmtub3duIGRhaSBmb3JtYXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQkvKiBmcmFtZSBpbnZlcnNpb24gbm90IHZhbGlkIGZvciBEU1AgbW9kZXMgKi8KKwkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCQlhaWYgfD0gV004OTk1X0FJRjFfQkNMS19JTlY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJCWFpZiB8PSBXTTg5OTVfQUlGMV9CQ0xLX0lOViB8IFdNODk5NV9BSUYxX0xSQ0xLX0lOVjsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQkJYWlmIHw9IFdNODk5NV9BSUYxX0JDTEtfSU5WOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCQlhaWYgfD0gV004OTk1X0FJRjFfTFJDTEtfSU5WOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTVfQUlGMV9DT05UUk9MXzEsCisJCQkgICAgV004OTk1X0FJRjFfQkNMS19JTlZfTUFTSyB8CisJCQkgICAgV004OTk1X0FJRjFfTFJDTEtfSU5WX01BU0sgfAorCQkJICAgIFdNODk5NV9BSUYxX0ZNVF9NQVNLLCBhaWYpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NV9BSUYxX01BU1RFUl9TTEFWRSwKKwkJCSAgICBXTTg5OTVfQUlGMV9NU1RSX01BU0ssIG1hc3Rlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQgc3JzW10gPSB7CisJODAwMCwgMTEwMjUsIDEyMDAwLCAxNjAwMCwgMjIwNTAsIDI0MDAwLCAzMjAwMCwgNDQxMDAsCisJNDgwMDAsIDg4MjAwLCA5NjAwMAorfTsKKworc3RhdGljIGNvbnN0IGludCBmc19yYXRpb3NbXSA9IHsKKwktMSAvKiByZXNlcnZlZCAqLywKKwkxMjgsIDE5MiwgMjU2LCAzODQsIDUxMiwgNzY4LCAxMDI0LCAxNDA4LCAxNTM2Cit9OworCitzdGF0aWMgY29uc3QgaW50IGJjbGtfZGl2c1tdID0geworCTEwLCAxNSwgMjAsIDMwLCA0MCwgNTUsIDYwLCA4MCwgMTEwLCAxMjAsIDE2MCwgMjIwLCAyNDAsIDMyMCwgNDQwLCA0ODAKK307CisKK3N0YXRpYyBpbnQgd204OTk1X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IHdtODk5NV9wcml2ICp3bTg5OTU7CisJaW50IGFpZjFfcmVnOworCWludCBiY2xrX3JlZzsKKwlpbnQgbHJjbGtfcmVnOworCWludCByYXRlX3JlZzsKKwlpbnQgYmNsa19yYXRlOworCWludCBhaWYxOworCWludCBscmNsaywgYmNsazsKKwlpbnQgaSwgcmF0ZV92YWwsIGJlc3QsIGJlc3RfdmFsLCBjdXJfdmFsOworCisJY29kZWMgPSBkYWktPmNvZGVjOworCXdtODk5NSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJc3dpdGNoIChkYWktPmlkKSB7CisJY2FzZSAwOgorCQlhaWYxX3JlZyA9IFdNODk5NV9BSUYxX0NPTlRST0xfMTsKKwkJYmNsa19yZWcgPSBXTTg5OTVfQUlGMV9CQ0xLOworCQlyYXRlX3JlZyA9IFdNODk5NV9BSUYxX1JBVEU7CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLIC8qIHx8CisJCQl3bTg5OTUtPmxyY2xrX3NoYXJlZFswXSAqLykgeworCQkJbHJjbGtfcmVnID0gV004OTk1X0FJRjFEQUNfTFJDTEs7CisJCX0gZWxzZSB7CisJCQlscmNsa19yZWcgPSBXTTg5OTVfQUlGMUFEQ19MUkNMSzsKKwkJCWRldl9kYmcoY29kZWMtPmRldiwgIkFJRjEgdXNpbmcgc3BsaXQgTFJDTEtcbiIpOworCQl9CisJCWJyZWFrOworCWNhc2UgMToKKwkJYWlmMV9yZWcgPSBXTTg5OTVfQUlGMl9DT05UUk9MXzE7CisJCWJjbGtfcmVnID0gV004OTk1X0FJRjJfQkNMSzsKKwkJcmF0ZV9yZWcgPSBXTTg5OTVfQUlGMl9SQVRFOworCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAvKiB8fAorCQkgICAgd204OTk1LT5scmNsa19zaGFyZWRbMV0gKi8pIHsKKwkJCWxyY2xrX3JlZyA9IFdNODk5NV9BSUYyREFDX0xSQ0xLOworCQl9IGVsc2UgeworCQkJbHJjbGtfcmVnID0gV004OTk1X0FJRjJBRENfTFJDTEs7CisJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJBSUYyIHVzaW5nIHNwbGl0IExSQ0xLXG4iKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwliY2xrX3JhdGUgPSBzbmRfc29jX3BhcmFtc190b19iY2xrKHBhcmFtcyk7CisJaWYgKGJjbGtfcmF0ZSA8IDApCisJCXJldHVybiBiY2xrX3JhdGU7CisKKwlhaWYxID0gMDsKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQlhaWYxIHw9ICgweDEgPDwgV004OTk1X0FJRjFfV0xfU0hJRlQpOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlhaWYxIHw9ICgweDIgPDwgV004OTk1X0FJRjFfV0xfU0hJRlQpOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQlhaWYxIHw9ICgweDMgPDwgV004OTk1X0FJRjFfV0xfU0hJRlQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRhaS0+ZGV2LCAiVW5zdXBwb3J0ZWQgd29yZCBsZW5ndGggJXVcbiIsCisJCQlwYXJhbXNfZm9ybWF0KHBhcmFtcykpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiB0cnkgdG8gZmluZCBhIHN1aXRhYmxlIHNhbXBsZSByYXRlICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3JzKTsgKytpKQorCQlpZiAoc3JzW2ldID09IHBhcmFtc19yYXRlKHBhcmFtcykpCisJCQlicmVhazsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKHNycykpIHsKKwkJZGV2X2VycihkYWktPmRldiwgIlNhbXBsZSByYXRlICVkIGlzIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQlwYXJhbXNfcmF0ZShwYXJhbXMpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJhdGVfdmFsID0gaSA8PCBXTTg5OTVfQUlGMV9TUl9TSElGVDsKKworCWRldl9kYmcoZGFpLT5kZXYsICJTYW1wbGUgcmF0ZSBpcyAlZEh6XG4iLCBzcnNbaV0pOworCWRldl9kYmcoZGFpLT5kZXYsICJBSUYlZENMSyBpcyAlZEh6LCB0YXJnZXQgQkNMSyAlZEh6XG4iLAorCQlkYWktPmlkICsgMSwgd204OTk1LT5haWZjbGtbZGFpLT5pZF0sIGJjbGtfcmF0ZSk7CisKKwkvKiBBSUZDTEsvZnMgcmF0aW87IGxvb2sgZm9yIGEgY2xvc2UgbWF0Y2ggaW4gZWl0aGVyIGRpcmVjdGlvbiAqLworCWJlc3QgPSAxOworCWJlc3RfdmFsID0gYWJzKChmc19yYXRpb3NbMV0gKiBwYXJhbXNfcmF0ZShwYXJhbXMpKQorCQkgICAgICAgLSB3bTg5OTUtPmFpZmNsa1tkYWktPmlkXSk7CisJZm9yIChpID0gMjsgaSA8IEFSUkFZX1NJWkUoZnNfcmF0aW9zKTsgaSsrKSB7CisJCWN1cl92YWwgPSBhYnMoKGZzX3JhdGlvc1tpXSAqIHBhcmFtc19yYXRlKHBhcmFtcykpCisJCQkgICAgICAtIHdtODk5NS0+YWlmY2xrW2RhaS0+aWRdKTsKKwkJaWYgKGN1cl92YWwgPj0gYmVzdF92YWwpCisJCQljb250aW51ZTsKKwkJYmVzdCA9IGk7CisJCWJlc3RfdmFsID0gY3VyX3ZhbDsKKwl9CisJcmF0ZV92YWwgfD0gYmVzdDsKKworCWRldl9kYmcoZGFpLT5kZXYsICJTZWxlY3RlZCBBSUYlZENMSy9mcyA9ICVkXG4iLAorCQlkYWktPmlkICsgMSwgZnNfcmF0aW9zW2Jlc3RdKTsKKworCS8qCisJICogV2UgbWF5IG5vdCBnZXQgcXVpdGUgdGhlIHJpZ2h0IGZyZXF1ZW5jeSBpZiB1c2luZworCSAqIGFwcHJveGltYXRlIGNsb2NrcyBzbyBsb29rIGZvciB0aGUgY2xvc2VzdCBtYXRjaCB0aGF0IGlzCisJICogaGlnaGVyIHRoYW4gdGhlIHRhcmdldCAod2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGVyZSBlbm91Z2gKKwkgKiBCQ0xLcyB0byBjbG9jayBvdXQgdGhlIHNhbXBsZXMpLgorCSAqLworCWJlc3QgPSAwOworCWJjbGsgPSAwOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJjbGtfZGl2cyk7IGkrKykgeworCQljdXJfdmFsID0gKHdtODk5NS0+YWlmY2xrW2RhaS0+aWRdICogMTAgLyBiY2xrX2RpdnNbaV0pIC0gYmNsa19yYXRlOworCQlpZiAoY3VyX3ZhbCA8IDApIC8qIEJDTEsgdGFibGUgaXMgc29ydGVkICovCisJCQlicmVhazsKKwkJYmVzdCA9IGk7CisJfQorCWJjbGsgfD0gYmVzdCA8PCBXTTg5OTVfQUlGMV9CQ0xLX0RJVl9TSElGVDsKKworCWJjbGtfcmF0ZSA9IHdtODk5NS0+YWlmY2xrW2RhaS0+aWRdICogMTAgLyBiY2xrX2RpdnNbYmVzdF07CisJZGV2X2RiZyhkYWktPmRldiwgIlVzaW5nIEJDTEtfRElWICVkIGZvciBhY3R1YWwgQkNMSyAlZEh6XG4iLAorCQliY2xrX2RpdnNbYmVzdF0sIGJjbGtfcmF0ZSk7CisKKwlscmNsayA9IGJjbGtfcmF0ZSAvIHBhcmFtc19yYXRlKHBhcmFtcyk7CisJZGV2X2RiZyhkYWktPmRldiwgIlVzaW5nIExSQ0xLIHJhdGUgJWQgZm9yIGFjdHVhbCBMUkNMSyAlZEh6XG4iLAorCQlscmNsaywgYmNsa19yYXRlIC8gbHJjbGspOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYWlmMV9yZWcsCisJCQkgICAgV004OTk1X0FJRjFfV0xfTUFTSywgYWlmMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYmNsa19yZWcsCisJCQkgICAgV004OTk1X0FJRjFfQkNMS19ESVZfTUFTSywgYmNsayk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgbHJjbGtfcmVnLAorCQkJICAgIFdNODk5NV9BSUYxREFDX1JBVEVfTUFTSywgbHJjbGspOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJhdGVfcmVnLAorCQkJICAgIFdNODk5NV9BSUYxX1NSX01BU0sgfAorCQkJICAgIFdNODk5NV9BSUYxQ0xLX1JBVEVfTUFTSywgcmF0ZV92YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NV9zZXRfdHJpc3RhdGUoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIGludCB0cmlzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCWludCByZWcsIHZhbCwgbWFzazsKKworCXN3aXRjaCAoY29kZWNfZGFpLT5pZCkgeworCWNhc2UgMDoKKwkJcmVnID0gV004OTk1X0FJRjFfTUFTVEVSX1NMQVZFOworCQltYXNrID0gV004OTk1X0FJRjFfVFJJOworCQlicmVhazsKKwljYXNlIDE6CisJCXJlZyA9IFdNODk5NV9BSUYyX01BU1RFUl9TTEFWRTsKKwkJbWFzayA9IFdNODk5NV9BSUYyX1RSSTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZWcgPSBXTTg5OTVfUE9XRVJfTUFOQUdFTUVOVF81OworCQltYXNrID0gV004OTk1X0FJRjNfVFJJOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodHJpc3RhdGUpCisJCXZhbCA9IG1hc2s7CisJZWxzZQorCQl2YWwgPSAwOworCisJcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywgbWFzaywgcmVnKTsKK30KKworLyogVGhlIHNpemUgaW4gYml0cyBvZiB0aGUgRkxMIGRpdmlkZSBtdWx0aXBsaWVkIGJ5IDEwCisgKiB0byBhbGxvdyByb3VuZGluZyBsYXRlciAqLworI2RlZmluZSBGSVhFRF9GTExfU0laRSAoKDEgPDwgMTYpICogMTApCisKK3N0cnVjdCBmbGxfZGl2IHsKKwl1MTYgb3V0ZGl2OworCXUxNiBuOworCXUxNiBrOworCXUxNiBjbGtfcmVmX2RpdjsKKwl1MTYgZmxsX2ZyYXRpbzsKK307CisKK3N0YXRpYyBpbnQgd204OTk1X2dldF9mbGxfY29uZmlnKHN0cnVjdCBmbGxfZGl2ICpmbGwsCisJCQkJIGludCBmcmVxX2luLCBpbnQgZnJlcV9vdXQpCit7CisJdTY0IEtwYXJ0OworCXVuc2lnbmVkIGludCBLLCBOZGl2LCBObW9kOworCisJcHJfZGVidWcoIkZMTCBpbnB1dD0lZEh6LCBvdXRwdXQ9JWRIelxuIiwgZnJlcV9pbiwgZnJlcV9vdXQpOworCisJLyogU2NhbGUgdGhlIGlucHV0IGZyZXF1ZW5jeSBkb3duIHRvIDw9IDEzLjVNSHogKi8KKwlmbGwtPmNsa19yZWZfZGl2ID0gMDsKKwl3aGlsZSAoZnJlcV9pbiA+IDEzNTAwMDAwKSB7CisJCWZsbC0+Y2xrX3JlZl9kaXYrKzsKKwkJZnJlcV9pbiAvPSAyOworCisJCWlmIChmbGwtPmNsa19yZWZfZGl2ID4gMykKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlwcl9kZWJ1ZygiQ0xLX1JFRl9ESVY9JWQsIEZyZWY9JWRIelxuIiwgZmxsLT5jbGtfcmVmX2RpdiwgZnJlcV9pbik7CisKKwkvKiBTY2FsZSB0aGUgb3V0cHV0IHRvIGdpdmUgOTBNSHo8PUZ2Y288PTEwME1IeiAqLworCWZsbC0+b3V0ZGl2ID0gMzsKKwl3aGlsZSAoZnJlcV9vdXQgKiAoZmxsLT5vdXRkaXYgKyAxKSA8IDkwMDAwMDAwKSB7CisJCWZsbC0+b3V0ZGl2Kys7CisJCWlmIChmbGwtPm91dGRpdiA+IDYzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWZyZXFfb3V0ICo9IGZsbC0+b3V0ZGl2ICsgMTsKKwlwcl9kZWJ1ZygiT1VURElWPSVkLCBGdmNvPSVkSHpcbiIsIGZsbC0+b3V0ZGl2LCBmcmVxX291dCk7CisKKwlpZiAoZnJlcV9pbiA+IDEwMDAwMDApIHsKKwkJZmxsLT5mbGxfZnJhdGlvID0gMDsKKwl9IGVsc2UgaWYgKGZyZXFfaW4gPiAyNTYwMDApIHsKKwkJZmxsLT5mbGxfZnJhdGlvID0gMTsKKwkJZnJlcV9pbiAqPSAyOworCX0gZWxzZSBpZiAoZnJlcV9pbiA+IDEyODAwMCkgeworCQlmbGwtPmZsbF9mcmF0aW8gPSAyOworCQlmcmVxX2luICo9IDQ7CisJfSBlbHNlIGlmIChmcmVxX2luID4gNjQwMDApIHsKKwkJZmxsLT5mbGxfZnJhdGlvID0gMzsKKwkJZnJlcV9pbiAqPSA4OworCX0gZWxzZSB7CisJCWZsbC0+ZmxsX2ZyYXRpbyA9IDQ7CisJCWZyZXFfaW4gKj0gMTY7CisJfQorCXByX2RlYnVnKCJGTExfRlJBVElPPSVkLCBGcmVmPSVkSHpcbiIsIGZsbC0+ZmxsX2ZyYXRpbywgZnJlcV9pbik7CisKKwkvKiBOb3csIGNhbGN1bGF0ZSBOLksgKi8KKwlOZGl2ID0gZnJlcV9vdXQgLyBmcmVxX2luOworCisJZmxsLT5uID0gTmRpdjsKKwlObW9kID0gZnJlcV9vdXQgJSBmcmVxX2luOworCXByX2RlYnVnKCJObW9kPSVkXG4iLCBObW9kKTsKKworCS8qIENhbGN1bGF0ZSBmcmFjdGlvbmFsIHBhcnQgLSBzY2FsZSB1cCBzbyB3ZSBjYW4gcm91bmQuICovCisJS3BhcnQgPSBGSVhFRF9GTExfU0laRSAqIChsb25nIGxvbmcpTm1vZDsKKworCWRvX2RpdihLcGFydCwgZnJlcV9pbik7CisKKwlLID0gS3BhcnQgJiAweEZGRkZGRkZGOworCisJaWYgKChLICUgMTApID49IDUpCisJCUsgKz0gNTsKKworCS8qIE1vdmUgZG93biB0byBwcm9wZXIgcmFuZ2Ugbm93IHJvdW5kaW5nIGlzIGRvbmUgKi8KKwlmbGwtPmsgPSBLIC8gMTA7CisKKwlwcl9kZWJ1ZygiTj0leCBLPSV4XG4iLCBmbGwtPm4sIGZsbC0+ayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTVfc2V0X2ZsbChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IGlkLAorCQkJICBpbnQgc3JjLCB1bnNpZ25lZCBpbnQgZnJlcV9pbiwKKwkJCSAgdW5zaWduZWQgaW50IGZyZXFfb3V0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3Qgd204OTk1X3ByaXYgKndtODk5NTsKKwlpbnQgcmVnX29mZnNldCwgcmV0OworCXN0cnVjdCBmbGxfZGl2IGZsbDsKKwl1MTYgcmVnLCBhaWYxLCBhaWYyOworCisJY29kZWMgPSBkYWktPmNvZGVjOworCXdtODk5NSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJYWlmMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk1X0FJRjFfQ0xPQ0tJTkdfMSkKKwkgICAgICAgJiBXTTg5OTVfQUlGMUNMS19FTkE7CisKKwlhaWYyID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTVfQUlGMl9DTE9DS0lOR18xKQorCSAgICAgICAmIFdNODk5NV9BSUYyQ0xLX0VOQTsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIFdNODk5NV9GTEwxOgorCQlyZWdfb2Zmc2V0ID0gMDsKKwkJaWQgPSAwOworCQlicmVhazsKKwljYXNlIFdNODk5NV9GTEwyOgorCQlyZWdfb2Zmc2V0ID0gMHgyMDsKKwkJaWQgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHNyYykgeworCWNhc2UgMDoKKwkJLyogQWxsb3cgbm8gc291cmNlIHNwZWNpZmljYXRpb24gd2hlbiBzdG9wcGluZyAqLworCQlpZiAoZnJlcV9vdXQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBXTTg5OTVfRkxMX1NSQ19NQ0xLMToKKwljYXNlIFdNODk5NV9GTExfU1JDX01DTEsyOgorCWNhc2UgV004OTk1X0ZMTF9TUkNfTFJDTEs6CisJY2FzZSBXTTg5OTVfRkxMX1NSQ19CQ0xLOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBBcmUgd2UgY2hhbmdpbmcgYW55dGhpbmc/ICovCisJaWYgKHdtODk5NS0+ZmxsW2lkXS5zcmMgPT0gc3JjICYmCisJICAgIHdtODk5NS0+ZmxsW2lkXS5pbiA9PSBmcmVxX2luICYmIHdtODk5NS0+ZmxsW2lkXS5vdXQgPT0gZnJlcV9vdXQpCisJCXJldHVybiAwOworCisJLyogSWYgd2UncmUgc3RvcHBpbmcgdGhlIEZMTCByZWRvIHRoZSBvbGQgY29uZmlnIC0gbm8KKwkgKiByZWdpc3RlcnMgd2lsbCBhY3R1YWxseSBiZSB3cml0dGVuIGJ1dCB3ZSBhdm9pZCBHQ0MgZmxvdworCSAqIGFuYWx5c2lzIGJ1Z3Mgc3Bld2luZyB3YXJuaW5ncy4KKwkgKi8KKwlpZiAoZnJlcV9vdXQpCisJCXJldCA9IHdtODk5NV9nZXRfZmxsX2NvbmZpZygmZmxsLCBmcmVxX2luLCBmcmVxX291dCk7CisJZWxzZQorCQlyZXQgPSB3bTg5OTVfZ2V0X2ZsbF9jb25maWcoJmZsbCwgd204OTk1LT5mbGxbaWRdLmluLAorCQkJCQkgICAgd204OTk1LT5mbGxbaWRdLm91dCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBHYXRlIHRoZSBBSUYgY2xvY2tzIHdoaWxlIHdlIHJlY2xvY2sgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTVfQUlGMV9DTE9DS0lOR18xLAorCQkJICAgIFdNODk5NV9BSUYxQ0xLX0VOQV9NQVNLLCAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTVfQUlGMl9DTE9DS0lOR18xLAorCQkJICAgIFdNODk5NV9BSUYyQ0xLX0VOQV9NQVNLLCAwKTsKKworCS8qIFdlIGFsd2F5cyBuZWVkIHRvIGRpc2FibGUgdGhlIEZMTCB3aGlsZSByZWNvbmZpZ3VyaW5nICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X0ZMTDFfQ09OVFJPTF8xICsgcmVnX29mZnNldCwKKwkJCSAgICBXTTg5OTVfRkxMMV9FTkFfTUFTSywgMCk7CisKKwlyZWcgPSAoZmxsLm91dGRpdiA8PCBXTTg5OTVfRkxMMV9PVVRESVZfU0hJRlQpIHwKKwkgICAgICAoZmxsLmZsbF9mcmF0aW8gPDwgV004OTk1X0ZMTDFfRlJBVElPX1NISUZUKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTVfRkxMMV9DT05UUk9MXzIgKyByZWdfb2Zmc2V0LAorCQkJICAgIFdNODk5NV9GTEwxX09VVERJVl9NQVNLIHwKKwkJCSAgICBXTTg5OTVfRkxMMV9GUkFUSU9fTUFTSywgcmVnKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5NV9GTEwxX0NPTlRST0xfMyArIHJlZ19vZmZzZXQsIGZsbC5rKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NV9GTEwxX0NPTlRST0xfNCArIHJlZ19vZmZzZXQsCisJCQkgICAgV004OTk1X0ZMTDFfTl9NQVNLLAorCQkJICAgIGZsbC5uIDw8IFdNODk5NV9GTEwxX05fU0hJRlQpOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X0ZMTDFfQ09OVFJPTF81ICsgcmVnX29mZnNldCwKKwkJCSAgICBXTTg5OTVfRkxMMV9SRUZDTEtfRElWX01BU0sgfAorCQkJICAgIFdNODk5NV9GTEwxX1JFRkNMS19TUkNfTUFTSywKKwkJCSAgICAoZmxsLmNsa19yZWZfZGl2IDw8IFdNODk5NV9GTEwxX1JFRkNMS19ESVZfU0hJRlQpIHwKKwkJCSAgICAoc3JjIC0gMSkpOworCisJaWYgKGZyZXFfb3V0KQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTVfRkxMMV9DT05UUk9MXzEgKyByZWdfb2Zmc2V0LAorCQkJCSAgICBXTTg5OTVfRkxMMV9FTkFfTUFTSywgV004OTk1X0ZMTDFfRU5BKTsKKworCXdtODk5NS0+ZmxsW2lkXS5pbiA9IGZyZXFfaW47CisJd204OTk1LT5mbGxbaWRdLm91dCA9IGZyZXFfb3V0OworCXdtODk5NS0+ZmxsW2lkXS5zcmMgPSBzcmM7CisKKwkvKiBFbmFibGUgYW55IGdhdGVkIEFJRiBjbG9ja3MgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTVfQUlGMV9DTE9DS0lOR18xLAorCQkJICAgIFdNODk5NV9BSUYxQ0xLX0VOQV9NQVNLLCBhaWYxKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTVfQUlGMl9DTE9DS0lOR18xLAorCQkJICAgIFdNODk5NV9BSUYyQ0xLX0VOQV9NQVNLLCBhaWYyKTsKKworCWNvbmZpZ3VyZV9jbG9jayhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTVfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCQkJIGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3Qgd204OTk1X3ByaXYgKndtODk5NTsKKworCWNvZGVjID0gZGFpLT5jb2RlYzsKKwl3bTg5OTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXN3aXRjaCAoZGFpLT5pZCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIEFJRjMgc2hhcmVzIGNsb2NraW5nIHdpdGggQUlGMS8yICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoY2xrX2lkKSB7CisJY2FzZSBXTTg5OTVfU1lTQ0xLX01DTEsxOgorCQl3bTg5OTUtPnN5c2Nsa1tkYWktPmlkXSA9IFdNODk5NV9TWVNDTEtfTUNMSzE7CisJCXdtODk5NS0+bWNsa1swXSA9IGZyZXE7CisJCWRldl9kYmcoZGFpLT5kZXYsICJBSUYlZCB1c2luZyBNQ0xLMSBhdCAldUh6XG4iLAorCQkJZGFpLT5pZCArIDEsIGZyZXEpOworCQlicmVhazsKKwljYXNlIFdNODk5NV9TWVNDTEtfTUNMSzI6CisJCXdtODk5NS0+c3lzY2xrW2RhaS0+aWRdID0gV004OTk1X1NZU0NMS19NQ0xLMTsKKwkJd204OTk1LT5tY2xrWzFdID0gZnJlcTsKKwkJZGV2X2RiZyhkYWktPmRldiwgIkFJRiVkIHVzaW5nIE1DTEsyIGF0ICV1SHpcbiIsCisJCQlkYWktPmlkICsgMSwgZnJlcSk7CisJCWJyZWFrOworCWNhc2UgV004OTk1X1NZU0NMS19GTEwxOgorCQl3bTg5OTUtPnN5c2Nsa1tkYWktPmlkXSA9IFdNODk5NV9TWVNDTEtfRkxMMTsKKwkJZGV2X2RiZyhkYWktPmRldiwgIkFJRiVkIHVzaW5nIEZMTDFcbiIsIGRhaS0+aWQgKyAxKTsKKwkJYnJlYWs7CisJY2FzZSBXTTg5OTVfU1lTQ0xLX0ZMTDI6CisJCXdtODk5NS0+c3lzY2xrW2RhaS0+aWRdID0gV004OTk1X1NZU0NMS19GTEwyOworCQlkZXZfZGJnKGRhaS0+ZGV2LCAiQUlGJWQgdXNpbmcgRkxMMlxuIiwgZGFpLT5pZCArIDEpOworCQlicmVhazsKKwljYXNlIFdNODk5NV9TWVNDTEtfT1BDTEs6CisJZGVmYXVsdDoKKwkJZGV2X2VycihkYWktPmRldiwgIlVua25vd24gY2xvY2sgc291cmNlICVkXG4iLCBjbGtfaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljb25maWd1cmVfY2xvY2soY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk1X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3RydWN0IHdtODk5NV9wcml2ICp3bTg5OTU7CisJaW50IHJldDsKKworCXdtODk5NSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQlyZXQgPSBzbmRfc29jX2NhY2hlX3N5bmMoY29kZWMpOworCQkJaWYgKHJldCkgeworCQkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkJIkZhaWxlZCB0byBzeW5jIGNhY2hlOiAlZFxuIiwgcmV0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTVfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCQkgICAgV004OTk1X0JHX0VOQV9NQVNLLCBXTTg5OTVfQkdfRU5BKTsKKworCQl9CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTk1X0JHX0VOQV9NQVNLLCAwKTsKKwkJYnJlYWs7CisJfQorCisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODk5NV9zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXdtODk5NV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk1X3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJd204OTk1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSB3bTg5OTVfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODk5NV9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgd204OTk1X3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODk5NV9wcml2ICp3bTg5OTU7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYzsKKworCWkyYyA9IGNvbnRhaW5lcl9vZihjb2RlYy0+ZGV2LCBzdHJ1Y3QgaTJjX2NsaWVudCwgZGV2KTsKKwl3bTg5OTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl3bTg5OTVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODk5NV9wcml2ICp3bTg5OTU7CisJaW50IHJldDsKKworCWNvZGVjLT5kYXBtLmlkbGVfYmlhc19vZmYgPSAxOworCXdtODk5NSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDE2LCAxNiwgd204OTk1LT5jb250cm9sX3R5cGUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgaS9vOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5NV9TT0ZUV0FSRV9SRVNFVCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgZGV2aWNlIElEOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAocmV0ICE9IDB4ODk5NSkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJJbnZhbGlkIGRldmljZSBJRDogJSN4XG4iLCByZXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTVfU09GVFdBUkVfUkVTRVQsIDApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBpc3N1ZSByZXNldDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJd204OTk1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwkvKiBMYXRjaCB2b2x1bWUgdXBkYXRlcyAocmlnaHQgb25seTsgd2UgYWx3YXlzIGRvIGxlZnQgdGhlbiByaWdodCkuICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X0FJRjFfREFDMV9SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk1X0FJRjFEQUMxX1ZVX01BU0ssIFdNODk5NV9BSUYxREFDMV9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X0FJRjFfREFDMl9SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk1X0FJRjFEQUMyX1ZVX01BU0ssIFdNODk5NV9BSUYxREFDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X0FJRjJfREFDX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTVfQUlGMkRBQ19WVV9NQVNLLCBXTTg5OTVfQUlGMkRBQ19WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X0FJRjFfQURDMV9SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk1X0FJRjFBREMxX1ZVX01BU0ssIFdNODk5NV9BSUYxQURDMV9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X0FJRjFfQURDMl9SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk1X0FJRjFBREMyX1ZVX01BU0ssIFdNODk5NV9BSUYxQURDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X0FJRjJfQURDX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTVfQUlGMkFEQ19WVV9NQVNLLCBXTTg5OTVfQUlGMUFEQzJfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NV9EQUMxX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTVfREFDMV9WVV9NQVNLLCBXTTg5OTVfREFDMV9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk1X0RBQzJfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5NV9EQUMyX1ZVX01BU0ssIFdNODk5NV9EQUMyX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTVfUklHSFRfTElORV9JTlBVVF8xX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTVfSU4xX1ZVX01BU0ssIFdNODk5NV9JTjFfVlUpOworCisJd204OTk1X3VwZGF0ZV9jbGFzc193KGNvZGVjKTsKKworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5OTVfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHdtODk5NV9zbmRfY29udHJvbHMpKTsKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKCZjb2RlYy0+ZGFwbSwgd204OTk1X2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204OTk1X2RhcG1fd2lkZ2V0cykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKCZjb2RlYy0+ZGFwbSwgd204OTk1X2ludGVyY29uLAorCQkJCUFSUkFZX1NJWkUod204OTk1X2ludGVyY29uKSk7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBXTTg5OTVfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODk5NV9haWYxX2RhaV9vcHMgPSB7CisJLnNldF9zeXNjbGsgPSB3bTg5OTVfc2V0X2RhaV9zeXNjbGssCisJLnNldF9mbXQgPSB3bTg5OTVfc2V0X2RhaV9mbXQsCisJLmh3X3BhcmFtcyA9IHdtODk5NV9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZSA9IHdtODk5NV9haWZfbXV0ZSwKKwkuc2V0X3BsbCA9IHdtODk5NV9zZXRfZmxsLAorCS5zZXRfdHJpc3RhdGUgPSB3bTg5OTVfc2V0X3RyaXN0YXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTk1X2FpZjJfZGFpX29wcyA9IHsKKwkuc2V0X3N5c2NsayA9IHdtODk5NV9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdCA9IHdtODk5NV9zZXRfZGFpX2ZtdCwKKwkuaHdfcGFyYW1zID0gd204OTk1X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlID0gd204OTk1X2FpZl9tdXRlLAorCS5zZXRfcGxsID0gd204OTk1X3NldF9mbGwsCisJLnNldF90cmlzdGF0ZSA9IHdtODk5NV9zZXRfdHJpc3RhdGUsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5OTVfYWlmM19kYWlfb3BzID0geworCS5zZXRfdHJpc3RhdGUgPSB3bTg5OTVfc2V0X3RyaXN0YXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgd204OTk1X2RhaVtdID0geworCXsKKwkJLm5hbWUgPSAid204OTk1LWFpZjEiLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMSBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkJCS5mb3JtYXRzID0gV004OTk1X0ZPUk1BVFMKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMSBDYXB0dXJlIiwKKwkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCQkJLmZvcm1hdHMgPSBXTTg5OTVfRk9STUFUUworCQl9LAorCQkub3BzID0gJndtODk5NV9haWYxX2RhaV9vcHMKKwl9LAorCXsKKwkJLm5hbWUgPSAid204OTk1LWFpZjIiLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMiBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkJCS5mb3JtYXRzID0gV004OTk1X0ZPUk1BVFMKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMiBDYXB0dXJlIiwKKwkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCQkJLmZvcm1hdHMgPSBXTTg5OTVfRk9STUFUUworCQl9LAorCQkub3BzID0gJndtODk5NV9haWYyX2RhaV9vcHMKKwl9LAorCXsKKwkJLm5hbWUgPSAid204OTk1LWFpZjMiLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMyBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkJCS5mb3JtYXRzID0gV004OTk1X0ZPUk1BVFMKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMyBDYXB0dXJlIiwKKwkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCQkJLmZvcm1hdHMgPSBXTTg5OTVfRk9STUFUUworCQl9LAorCQkub3BzID0gJndtODk5NV9haWYzX2RhaV9vcHMKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZfd204OTk1ID0geworCS5wcm9iZSA9IHdtODk5NV9wcm9iZSwKKwkucmVtb3ZlID0gd204OTk1X3JlbW92ZSwKKwkuc3VzcGVuZCA9IHdtODk5NV9zdXNwZW5kLAorCS5yZXN1bWUgPSB3bTg5OTVfcmVzdW1lLAorCS5zZXRfYmlhc19sZXZlbCA9IHdtODk5NV9zZXRfYmlhc19sZXZlbCwKKwkucmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODk5NV9yZWdfZGVmcyksCisJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTE2KSwKKwkucmVnX2NhY2hlX2RlZmF1bHQgPSB3bTg5OTVfcmVnX2RlZnMsCisJLnZvbGF0aWxlX3JlZ2lzdGVyID0gd204OTk1X3ZvbGF0aWxlLAorCS5jb21wcmVzc190eXBlID0gU05EX1NPQ19SQlRSRUVfQ09NUFJFU1NJT04KK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorc3RhdGljIGludCBfX2RldmluaXQgd204OTk1X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCB3bTg5OTVfcHJpdiAqd204OTk1OworCWludCByZXQ7CisKKwl3bTg5OTUgPSBremFsbG9jKHNpemVvZiAqd204OTk1LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdtODk5NSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3bTg5OTUtPmNvbnRyb2xfdHlwZSA9IFNORF9TT0NfU1BJOworCXNwaV9zZXRfZHJ2ZGF0YShzcGksIHdtODk5NSk7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZzcGktPmRldiwKKwkJCQkgICAgICZzb2NfY29kZWNfZGV2X3dtODk5NSwgd204OTk1X2RhaSwKKwkJCQkgICAgIEFSUkFZX1NJWkUod204OTk1X2RhaSkpOworCWlmIChyZXQgPCAwKQorCQlrZnJlZSh3bTg5OTUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHdtODk5NV9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZzcGktPmRldik7CisJa2ZyZWUoc3BpX2dldF9kcnZkYXRhKHNwaSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgd204OTk1X3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid204OTk1IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSB3bTg5OTVfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTg5OTVfc3BpX3JlbW92ZSkKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODk5NV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHdtODk5NV9wcml2ICp3bTg5OTU7CisJaW50IHJldDsKKworCXdtODk5NSA9IGt6YWxsb2Moc2l6ZW9mICp3bTg5OTUsIEdGUF9LRVJORUwpOworCWlmICghd204OTk1KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdtODk5NS0+Y29udHJvbF90eXBlID0gU05EX1NPQ19JMkM7CisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204OTk1KTsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoJmkyYy0+ZGV2LAorCQkJCSAgICAgJnNvY19jb2RlY19kZXZfd204OTk1LCB3bTg5OTVfZGFpLAorCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5OTVfZGFpKSk7CisJaWYgKHJldCA8IDApCisJCWtmcmVlKHdtODk5NSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTk1X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJmNsaWVudC0+ZGV2KTsKKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg5OTVfaTJjX2lkW10gPSB7CisJeyJ3bTg5OTUiLCAwfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODk5NV9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204OTk1X2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid204OTk1IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSB3bTg5OTVfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTg5OTVfaTJjX3JlbW92ZSksCisJLmlkX3RhYmxlID0gd204OTk1X2kyY19pZAorfTsKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCB3bTg5OTVfbW9kaW5pdCh2b2lkKQoreworCWludCByZXQgPSAwOworCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg5OTVfaTJjX2RyaXZlcik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciB3bTg5OTUgSTJDIGRyaXZlcjogJWRcbiIsCisJCSAgICAgICByZXQpOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd204OTk1X3NwaV9kcml2ZXIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgd204OTk1IFNQSSBkcml2ZXI6ICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorCittb2R1bGVfaW5pdCh3bTg5OTVfbW9kaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTg5OTVfZXhpdCh2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmd204OTk1X2kyY19kcml2ZXIpOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndtODk5NV9zcGlfZHJpdmVyKTsKKyNlbmRpZgorfQorCittb2R1bGVfZXhpdCh3bTg5OTVfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBXTTg5OTUgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJEaW1pdHJpcyBQYXBhc3RhbW9zIDxkcEBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5NS5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjQyMTIxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTUuaApAQCAtMCwwICsxLDQyNjkgQEAKKy8qCisgKiB3bTg5OTUuaCAgLS0gIFdNODk5NSBBTFNBIFNvQyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgcGxjCisgKgorICogQXV0aG9yOiBEaW1pdHJpcyBQYXBhc3RhbW9zIDxkcEBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9XTTg5OTVfSAorI2RlZmluZSBfV004OTk1X0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisvKgorICogUmVnaXN0ZXIgdmFsdWVzLgorICovCisjZGVmaW5lIFdNODk5NV9TT0ZUV0FSRV9SRVNFVCAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzEgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzIgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzMgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzQgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFdNODk5NV9QT1dFUl9NQU5BR0VNRU5UXzUgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIFdNODk5NV9MRUZUX0xJTkVfSU5QVVRfMV9WT0xVTUUgICAgICAgICAweDEwCisjZGVmaW5lIFdNODk5NV9SSUdIVF9MSU5FX0lOUFVUXzFfVk9MVU1FICAgICAgICAweDExCisjZGVmaW5lIFdNODk5NV9MRUZUX0xJTkVfSU5QVVRfQ09OVFJPTCAgICAgICAgICAweDEyCisjZGVmaW5lIFdNODk5NV9EQUMxX0xFRlRfVk9MVU1FICAgICAgICAgICAgICAgICAweDE4CisjZGVmaW5lIFdNODk5NV9EQUMxX1JJR0hUX1ZPTFVNRSAgICAgICAgICAgICAgICAweDE5CisjZGVmaW5lIFdNODk5NV9EQUMyX0xFRlRfVk9MVU1FICAgICAgICAgICAgICAgICAweDFBCisjZGVmaW5lIFdNODk5NV9EQUMyX1JJR0hUX1ZPTFVNRSAgICAgICAgICAgICAgICAweDFCCisjZGVmaW5lIFdNODk5NV9PVVRQVVRfVk9MVU1FX1pDXzEgICAgICAgICAgICAgICAweDFDCisjZGVmaW5lIFdNODk5NV9NSUNCSUFTXzEgICAgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIFdNODk5NV9NSUNCSUFTXzIgICAgICAgICAgICAgICAgICAgICAgICAweDIxCisjZGVmaW5lIFdNODk5NV9MRE9fMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIFdNODk5NV9MRE9fMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI5CisjZGVmaW5lIFdNODk5NV9BQ0NFU1NPUllfREVURUNUX01PREUxICAgICAgICAgICAweDMwCisjZGVmaW5lIFdNODk5NV9BQ0NFU1NPUllfREVURUNUX01PREUyICAgICAgICAgICAweDMxCisjZGVmaW5lIFdNODk5NV9IRUFEUEhPTkVfREVURUNUMSAgICAgICAgICAgICAgICAweDM0CisjZGVmaW5lIFdNODk5NV9IRUFEUEhPTkVfREVURUNUMiAgICAgICAgICAgICAgICAweDM1CisjZGVmaW5lIFdNODk5NV9NSUNfREVURUNUXzEgICAgICAgICAgICAgICAgICAgICAweDM4CisjZGVmaW5lIFdNODk5NV9NSUNfREVURUNUXzIgICAgICAgICAgICAgICAgICAgICAweDM5CisjZGVmaW5lIFdNODk5NV9DSEFSR0VfUFVNUF8xICAgICAgICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIFdNODk5NV9DTEFTU19XXzEgICAgICAgICAgICAgICAgICAgICAgICAweDQ1CisjZGVmaW5lIFdNODk5NV9EQ19TRVJWT18xICAgICAgICAgICAgICAgICAgICAgICAweDUwCisjZGVmaW5lIFdNODk5NV9EQ19TRVJWT18yICAgICAgICAgICAgICAgICAgICAgICAweDUxCisjZGVmaW5lIFdNODk5NV9EQ19TRVJWT18zICAgICAgICAgICAgICAgICAgICAgICAweDUyCisjZGVmaW5lIFdNODk5NV9EQ19TRVJWT181ICAgICAgICAgICAgICAgICAgICAgICAweDU0CisjZGVmaW5lIFdNODk5NV9EQ19TRVJWT182ICAgICAgICAgICAgICAgICAgICAgICAweDU1CisjZGVmaW5lIFdNODk5NV9EQ19TRVJWT183ICAgICAgICAgICAgICAgICAgICAgICAweDU2CisjZGVmaW5lIFdNODk5NV9EQ19TRVJWT19SRUFEQkFDS18wICAgICAgICAgICAgICAweDU3CisjZGVmaW5lIFdNODk5NV9BTkFMT0dVRV9IUF8xICAgICAgICAgICAgICAgICAgICAweDYwCisjZGVmaW5lIFdNODk5NV9BTkFMT0dVRV9IUF8yICAgICAgICAgICAgICAgICAgICAweDYxCisjZGVmaW5lIFdNODk5NV9DSElQX1JFVklTSU9OICAgICAgICAgICAgICAgICAgICAweDEwMAorI2RlZmluZSBXTTg5OTVfQ09OVFJPTF9JTlRFUkZBQ0VfMSAgICAgICAgICAgICAgMHgxMDEKKyNkZWZpbmUgV004OTk1X0NPTlRST0xfSU5URVJGQUNFXzIgICAgICAgICAgICAgIDB4MTAyCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfQ1RSTF8xICAgICAgICAgICAweDExMAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSX0NUUkxfMiAgICAgICAgICAgMHgxMTEKKyNkZWZpbmUgV004OTk1X0FJRjFfQ0xPQ0tJTkdfMSAgICAgICAgICAgICAgICAgIDB4MjAwCisjZGVmaW5lIFdNODk5NV9BSUYxX0NMT0NLSU5HXzIgICAgICAgICAgICAgICAgICAweDIwMQorI2RlZmluZSBXTTg5OTVfQUlGMl9DTE9DS0lOR18xICAgICAgICAgICAgICAgICAgMHgyMDQKKyNkZWZpbmUgV004OTk1X0FJRjJfQ0xPQ0tJTkdfMiAgICAgICAgICAgICAgICAgIDB4MjA1CisjZGVmaW5lIFdNODk5NV9DTE9DS0lOR18xICAgICAgICAgICAgICAgICAgICAgICAweDIwOAorI2RlZmluZSBXTTg5OTVfQ0xPQ0tJTkdfMiAgICAgICAgICAgICAgICAgICAgICAgMHgyMDkKKyNkZWZpbmUgV004OTk1X0FJRjFfUkFURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEwCisjZGVmaW5lIFdNODk5NV9BSUYyX1JBVEUgICAgICAgICAgICAgICAgICAgICAgICAweDIxMQorI2RlZmluZSBXTTg5OTVfUkFURV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMHgyMTIKKyNkZWZpbmUgV004OTk1X0ZMTDFfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgIDB4MjIwCisjZGVmaW5lIFdNODk5NV9GTEwxX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAweDIyMQorI2RlZmluZSBXTTg5OTVfRkxMMV9DT05UUk9MXzMgICAgICAgICAgICAgICAgICAgMHgyMjIKKyNkZWZpbmUgV004OTk1X0ZMTDFfQ09OVFJPTF80ICAgICAgICAgICAgICAgICAgIDB4MjIzCisjZGVmaW5lIFdNODk5NV9GTEwxX0NPTlRST0xfNSAgICAgICAgICAgICAgICAgICAweDIyNAorI2RlZmluZSBXTTg5OTVfRkxMMl9DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgMHgyNDAKKyNkZWZpbmUgV004OTk1X0ZMTDJfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgIDB4MjQxCisjZGVmaW5lIFdNODk5NV9GTEwyX0NPTlRST0xfMyAgICAgICAgICAgICAgICAgICAweDI0MgorI2RlZmluZSBXTTg5OTVfRkxMMl9DT05UUk9MXzQgICAgICAgICAgICAgICAgICAgMHgyNDMKKyNkZWZpbmUgV004OTk1X0ZMTDJfQ09OVFJPTF81ICAgICAgICAgICAgICAgICAgIDB4MjQ0CisjZGVmaW5lIFdNODk5NV9BSUYxX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgICAweDMwMAorI2RlZmluZSBXTTg5OTVfQUlGMV9DT05UUk9MXzIgICAgICAgICAgICAgICAgICAgMHgzMDEKKyNkZWZpbmUgV004OTk1X0FJRjFfTUFTVEVSX1NMQVZFICAgICAgICAgICAgICAgIDB4MzAyCisjZGVmaW5lIFdNODk5NV9BSUYxX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAweDMwMworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ19MUkNMSyAgICAgICAgICAgICAgICAgICAgMHgzMDQKKyNkZWZpbmUgV004OTk1X0FJRjFEQUNfTFJDTEsgICAgICAgICAgICAgICAgICAgIDB4MzA1CisjZGVmaW5lIFdNODk5NV9BSUYxREFDX0RBVEEgICAgICAgICAgICAgICAgICAgICAweDMwNgorI2RlZmluZSBXTTg5OTVfQUlGMUFEQ19EQVRBICAgICAgICAgICAgICAgICAgICAgMHgzMDcKKyNkZWZpbmUgV004OTk1X0FJRjJfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgIDB4MzEwCisjZGVmaW5lIFdNODk5NV9BSUYyX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAweDMxMQorI2RlZmluZSBXTTg5OTVfQUlGMl9NQVNURVJfU0xBVkUgICAgICAgICAgICAgICAgMHgzMTIKKyNkZWZpbmUgV004OTk1X0FJRjJfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MzEzCisjZGVmaW5lIFdNODk5NV9BSUYyQURDX0xSQ0xLICAgICAgICAgICAgICAgICAgICAweDMxNAorI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19MUkNMSyAgICAgICAgICAgICAgICAgICAgMHgzMTUKKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfREFUQSAgICAgICAgICAgICAgICAgICAgIDB4MzE2CisjZGVmaW5lIFdNODk5NV9BSUYyQURDX0RBVEEgICAgICAgICAgICAgICAgICAgICAweDMxNworI2RlZmluZSBXTTg5OTVfQUlGMV9BREMxX0xFRlRfVk9MVU1FICAgICAgICAgICAgMHg0MDAKKyNkZWZpbmUgV004OTk1X0FJRjFfQURDMV9SSUdIVF9WT0xVTUUgICAgICAgICAgIDB4NDAxCisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzFfTEVGVF9WT0xVTUUgICAgICAgICAgICAweDQwMgorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMxX1JJR0hUX1ZPTFVNRSAgICAgICAgICAgMHg0MDMKKyNkZWZpbmUgV004OTk1X0FJRjFfQURDMl9MRUZUX1ZPTFVNRSAgICAgICAgICAgIDB4NDA0CisjZGVmaW5lIFdNODk5NV9BSUYxX0FEQzJfUklHSFRfVk9MVU1FICAgICAgICAgICAweDQwNQorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMyX0xFRlRfVk9MVU1FICAgICAgICAgICAgMHg0MDYKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMl9SSUdIVF9WT0xVTUUgICAgICAgICAgIDB4NDA3CisjZGVmaW5lIFdNODk5NV9BSUYxX0FEQzFfRklMVEVSUyAgICAgICAgICAgICAgICAweDQxMAorI2RlZmluZSBXTTg5OTVfQUlGMV9BREMyX0ZJTFRFUlMgICAgICAgICAgICAgICAgMHg0MTEKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMV9GSUxURVJTXzEgICAgICAgICAgICAgIDB4NDIwCisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzFfRklMVEVSU18yICAgICAgICAgICAgICAweDQyMQorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMyX0ZJTFRFUlNfMSAgICAgICAgICAgICAgMHg0MjIKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMl9GSUxURVJTXzIgICAgICAgICAgICAgIDB4NDIzCisjZGVmaW5lIFdNODk5NV9BSUYxX0RSQzFfMSAgICAgICAgICAgICAgICAgICAgICAweDQ0MAorI2RlZmluZSBXTTg5OTVfQUlGMV9EUkMxXzIgICAgICAgICAgICAgICAgICAgICAgMHg0NDEKKyNkZWZpbmUgV004OTk1X0FJRjFfRFJDMV8zICAgICAgICAgICAgICAgICAgICAgIDB4NDQyCisjZGVmaW5lIFdNODk5NV9BSUYxX0RSQzFfNCAgICAgICAgICAgICAgICAgICAgICAweDQ0MworI2RlZmluZSBXTTg5OTVfQUlGMV9EUkMxXzUgICAgICAgICAgICAgICAgICAgICAgMHg0NDQKKyNkZWZpbmUgV004OTk1X0FJRjFfRFJDMl8xICAgICAgICAgICAgICAgICAgICAgIDB4NDUwCisjZGVmaW5lIFdNODk5NV9BSUYxX0RSQzJfMiAgICAgICAgICAgICAgICAgICAgICAweDQ1MQorI2RlZmluZSBXTTg5OTVfQUlGMV9EUkMyXzMgICAgICAgICAgICAgICAgICAgICAgMHg0NTIKKyNkZWZpbmUgV004OTk1X0FJRjFfRFJDMl80ICAgICAgICAgICAgICAgICAgICAgIDB4NDUzCisjZGVmaW5lIFdNODk5NV9BSUYxX0RSQzJfNSAgICAgICAgICAgICAgICAgICAgICAweDQ1NAorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMxX0VRX0dBSU5TXzEgICAgICAgICAgICAgMHg0ODAKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMV9FUV9HQUlOU18yICAgICAgICAgICAgIDB4NDgxCisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzFfRVFfQkFORF8xX0EgICAgICAgICAgICAweDQ4MgorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMxX0VRX0JBTkRfMV9CICAgICAgICAgICAgMHg0ODMKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMV9FUV9CQU5EXzFfUEcgICAgICAgICAgIDB4NDg0CisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzFfRVFfQkFORF8yX0EgICAgICAgICAgICAweDQ4NQorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMxX0VRX0JBTkRfMl9CICAgICAgICAgICAgMHg0ODYKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMV9FUV9CQU5EXzJfQyAgICAgICAgICAgIDB4NDg3CisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzFfRVFfQkFORF8yX1BHICAgICAgICAgICAweDQ4OAorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMxX0VRX0JBTkRfM19BICAgICAgICAgICAgMHg0ODkKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMV9FUV9CQU5EXzNfQiAgICAgICAgICAgIDB4NDhBCisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzFfRVFfQkFORF8zX0MgICAgICAgICAgICAweDQ4QgorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMxX0VRX0JBTkRfM19QRyAgICAgICAgICAgMHg0OEMKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMV9FUV9CQU5EXzRfQSAgICAgICAgICAgIDB4NDhECisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzFfRVFfQkFORF80X0IgICAgICAgICAgICAweDQ4RQorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMxX0VRX0JBTkRfNF9DICAgICAgICAgICAgMHg0OEYKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMV9FUV9CQU5EXzRfUEcgICAgICAgICAgIDB4NDkwCisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzFfRVFfQkFORF81X0EgICAgICAgICAgICAweDQ5MQorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMxX0VRX0JBTkRfNV9CICAgICAgICAgICAgMHg0OTIKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMV9FUV9CQU5EXzVfUEcgICAgICAgICAgIDB4NDkzCisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzJfRVFfR0FJTlNfMSAgICAgICAgICAgICAweDRBMAorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMyX0VRX0dBSU5TXzIgICAgICAgICAgICAgMHg0QTEKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMl9FUV9CQU5EXzFfQSAgICAgICAgICAgIDB4NEEyCisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzJfRVFfQkFORF8xX0IgICAgICAgICAgICAweDRBMworI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMyX0VRX0JBTkRfMV9QRyAgICAgICAgICAgMHg0QTQKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMl9FUV9CQU5EXzJfQSAgICAgICAgICAgIDB4NEE1CisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzJfRVFfQkFORF8yX0IgICAgICAgICAgICAweDRBNgorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMyX0VRX0JBTkRfMl9DICAgICAgICAgICAgMHg0QTcKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMl9FUV9CQU5EXzJfUEcgICAgICAgICAgIDB4NEE4CisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzJfRVFfQkFORF8zX0EgICAgICAgICAgICAweDRBOQorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMyX0VRX0JBTkRfM19CICAgICAgICAgICAgMHg0QUEKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMl9FUV9CQU5EXzNfQyAgICAgICAgICAgIDB4NEFCCisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzJfRVFfQkFORF8zX1BHICAgICAgICAgICAweDRBQworI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMyX0VRX0JBTkRfNF9BICAgICAgICAgICAgMHg0QUQKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMl9FUV9CQU5EXzRfQiAgICAgICAgICAgIDB4NEFFCisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzJfRVFfQkFORF80X0MgICAgICAgICAgICAweDRBRgorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMyX0VRX0JBTkRfNF9QRyAgICAgICAgICAgMHg0QjAKKyNkZWZpbmUgV004OTk1X0FJRjFfREFDMl9FUV9CQU5EXzVfQSAgICAgICAgICAgIDB4NEIxCisjZGVmaW5lIFdNODk5NV9BSUYxX0RBQzJfRVFfQkFORF81X0IgICAgICAgICAgICAweDRCMgorI2RlZmluZSBXTTg5OTVfQUlGMV9EQUMyX0VRX0JBTkRfNV9QRyAgICAgICAgICAgMHg0QjMKKyNkZWZpbmUgV004OTk1X0FJRjJfQURDX0xFRlRfVk9MVU1FICAgICAgICAgICAgIDB4NTAwCisjZGVmaW5lIFdNODk5NV9BSUYyX0FEQ19SSUdIVF9WT0xVTUUgICAgICAgICAgICAweDUwMQorI2RlZmluZSBXTTg5OTVfQUlGMl9EQUNfTEVGVF9WT0xVTUUgICAgICAgICAgICAgMHg1MDIKKyNkZWZpbmUgV004OTk1X0FJRjJfREFDX1JJR0hUX1ZPTFVNRSAgICAgICAgICAgIDB4NTAzCisjZGVmaW5lIFdNODk5NV9BSUYyX0FEQ19GSUxURVJTICAgICAgICAgICAgICAgICAweDUxMAorI2RlZmluZSBXTTg5OTVfQUlGMl9EQUNfRklMVEVSU18xICAgICAgICAgICAgICAgMHg1MjAKKyNkZWZpbmUgV004OTk1X0FJRjJfREFDX0ZJTFRFUlNfMiAgICAgICAgICAgICAgIDB4NTIxCisjZGVmaW5lIFdNODk5NV9BSUYyX0RSQ18xICAgICAgICAgICAgICAgICAgICAgICAweDU0MAorI2RlZmluZSBXTTg5OTVfQUlGMl9EUkNfMiAgICAgICAgICAgICAgICAgICAgICAgMHg1NDEKKyNkZWZpbmUgV004OTk1X0FJRjJfRFJDXzMgICAgICAgICAgICAgICAgICAgICAgIDB4NTQyCisjZGVmaW5lIFdNODk5NV9BSUYyX0RSQ180ICAgICAgICAgICAgICAgICAgICAgICAweDU0MworI2RlZmluZSBXTTg5OTVfQUlGMl9EUkNfNSAgICAgICAgICAgICAgICAgICAgICAgMHg1NDQKKyNkZWZpbmUgV004OTk1X0FJRjJfRVFfR0FJTlNfMSAgICAgICAgICAgICAgICAgIDB4NTgwCisjZGVmaW5lIFdNODk5NV9BSUYyX0VRX0dBSU5TXzIgICAgICAgICAgICAgICAgICAweDU4MQorI2RlZmluZSBXTTg5OTVfQUlGMl9FUV9CQU5EXzFfQSAgICAgICAgICAgICAgICAgMHg1ODIKKyNkZWZpbmUgV004OTk1X0FJRjJfRVFfQkFORF8xX0IgICAgICAgICAgICAgICAgIDB4NTgzCisjZGVmaW5lIFdNODk5NV9BSUYyX0VRX0JBTkRfMV9QRyAgICAgICAgICAgICAgICAweDU4NAorI2RlZmluZSBXTTg5OTVfQUlGMl9FUV9CQU5EXzJfQSAgICAgICAgICAgICAgICAgMHg1ODUKKyNkZWZpbmUgV004OTk1X0FJRjJfRVFfQkFORF8yX0IgICAgICAgICAgICAgICAgIDB4NTg2CisjZGVmaW5lIFdNODk5NV9BSUYyX0VRX0JBTkRfMl9DICAgICAgICAgICAgICAgICAweDU4NworI2RlZmluZSBXTTg5OTVfQUlGMl9FUV9CQU5EXzJfUEcgICAgICAgICAgICAgICAgMHg1ODgKKyNkZWZpbmUgV004OTk1X0FJRjJfRVFfQkFORF8zX0EgICAgICAgICAgICAgICAgIDB4NTg5CisjZGVmaW5lIFdNODk5NV9BSUYyX0VRX0JBTkRfM19CICAgICAgICAgICAgICAgICAweDU4QQorI2RlZmluZSBXTTg5OTVfQUlGMl9FUV9CQU5EXzNfQyAgICAgICAgICAgICAgICAgMHg1OEIKKyNkZWZpbmUgV004OTk1X0FJRjJfRVFfQkFORF8zX1BHICAgICAgICAgICAgICAgIDB4NThDCisjZGVmaW5lIFdNODk5NV9BSUYyX0VRX0JBTkRfNF9BICAgICAgICAgICAgICAgICAweDU4RAorI2RlZmluZSBXTTg5OTVfQUlGMl9FUV9CQU5EXzRfQiAgICAgICAgICAgICAgICAgMHg1OEUKKyNkZWZpbmUgV004OTk1X0FJRjJfRVFfQkFORF80X0MgICAgICAgICAgICAgICAgIDB4NThGCisjZGVmaW5lIFdNODk5NV9BSUYyX0VRX0JBTkRfNF9QRyAgICAgICAgICAgICAgICAweDU5MAorI2RlZmluZSBXTTg5OTVfQUlGMl9FUV9CQU5EXzVfQSAgICAgICAgICAgICAgICAgMHg1OTEKKyNkZWZpbmUgV004OTk1X0FJRjJfRVFfQkFORF81X0IgICAgICAgICAgICAgICAgIDB4NTkyCisjZGVmaW5lIFdNODk5NV9BSUYyX0VRX0JBTkRfNV9QRyAgICAgICAgICAgICAgICAweDU5MworI2RlZmluZSBXTTg5OTVfREFDMV9NSVhFUl9WT0xVTUVTICAgICAgICAgICAgICAgMHg2MDAKKyNkZWZpbmUgV004OTk1X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HICAgICAgICAgIDB4NjAxCisjZGVmaW5lIFdNODk5NV9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcgICAgICAgICAweDYwMgorI2RlZmluZSBXTTg5OTVfREFDMl9NSVhFUl9WT0xVTUVTICAgICAgICAgICAgICAgMHg2MDMKKyNkZWZpbmUgV004OTk1X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HICAgICAgICAgIDB4NjA0CisjZGVmaW5lIFdNODk5NV9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkcgICAgICAgICAweDYwNQorI2RlZmluZSBXTTg5OTVfQUlGMV9BREMxX0xFRlRfTUlYRVJfUk9VVElORyAgICAgMHg2MDYKKyNkZWZpbmUgV004OTk1X0FJRjFfQURDMV9SSUdIVF9NSVhFUl9ST1VUSU5HICAgIDB4NjA3CisjZGVmaW5lIFdNODk5NV9BSUYxX0FEQzJfTEVGVF9NSVhFUl9ST1VUSU5HICAgICAweDYwOAorI2RlZmluZSBXTTg5OTVfQUlGMV9BREMyX1JJR0hUX01JWEVSX1JPVVRJTkcgICAgMHg2MDkKKyNkZWZpbmUgV004OTk1X0RBQ19TT0ZUTVVURSAgICAgICAgICAgICAgICAgICAgIDB4NjEwCisjZGVmaW5lIFdNODk5NV9PVkVSU0FNUExJTkcgICAgICAgICAgICAgICAgICAgICAweDYyMAorI2RlZmluZSBXTTg5OTVfU0lERVRPTkUgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MjEKKyNkZWZpbmUgV004OTk1X0dQSU9fMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzAwCisjZGVmaW5lIFdNODk5NV9HUElPXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMQorI2RlZmluZSBXTTg5OTVfR1BJT18zICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDIKKyNkZWZpbmUgV004OTk1X0dQSU9fNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzAzCisjZGVmaW5lIFdNODk5NV9HUElPXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwNAorI2RlZmluZSBXTTg5OTVfR1BJT182ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDUKKyNkZWZpbmUgV004OTk1X0dQSU9fNyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzA2CisjZGVmaW5lIFdNODk5NV9HUElPXzggICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwNworI2RlZmluZSBXTTg5OTVfR1BJT185ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDgKKyNkZWZpbmUgV004OTk1X0dQSU9fMTAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzA5CisjZGVmaW5lIFdNODk5NV9HUElPXzExICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwQQorI2RlZmluZSBXTTg5OTVfR1BJT18xMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MEIKKyNkZWZpbmUgV004OTk1X0dQSU9fMTMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzBDCisjZGVmaW5lIFdNODk5NV9HUElPXzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwRAorI2RlZmluZSBXTTg5OTVfUFVMTF9DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgMHg3MjAKKyNkZWZpbmUgV004OTk1X1BVTExfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgIDB4NzIxCisjZGVmaW5lIFdNODk5NV9JTlRFUlJVUFRfU1RBVFVTXzEgICAgICAgICAgICAgICAweDczMAorI2RlZmluZSBXTTg5OTVfSU5URVJSVVBUX1NUQVRVU18yICAgICAgICAgICAgICAgMHg3MzEKKyNkZWZpbmUgV004OTk1X0lOVEVSUlVQVF9SQVdfU1RBVFVTXzIgICAgICAgICAgIDB4NzMyCisjZGVmaW5lIFdNODk5NV9JTlRFUlJVUFRfU1RBVFVTXzFfTUFTSyAgICAgICAgICAweDczOAorI2RlZmluZSBXTTg5OTVfSU5URVJSVVBUX1NUQVRVU18yX01BU0sgICAgICAgICAgMHg3MzkKKyNkZWZpbmUgV004OTk1X0lOVEVSUlVQVF9DT05UUk9MICAgICAgICAgICAgICAgIDB4NzQwCisjZGVmaW5lIFdNODk5NV9MRUZUX1BETV9TUEVBS0VSXzEgICAgICAgICAgICAgICAweDgwMAorI2RlZmluZSBXTTg5OTVfUklHSFRfUERNX1NQRUFLRVJfMSAgICAgICAgICAgICAgMHg4MDEKKyNkZWZpbmUgV004OTk1X1BETV9TUEVBS0VSXzFfTVVURV9TRVFVRU5DRSAgICAgIDB4ODAyCisjZGVmaW5lIFdNODk5NV9MRUZUX1BETV9TUEVBS0VSXzIgICAgICAgICAgICAgICAweDgwOAorI2RlZmluZSBXTTg5OTVfUklHSFRfUERNX1NQRUFLRVJfMiAgICAgICAgICAgICAgMHg4MDkKKyNkZWZpbmUgV004OTk1X1BETV9TUEVBS0VSXzJfTVVURV9TRVFVRU5DRSAgICAgIDB4ODBBCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMCAgICAgICAgICAgICAgICAweDMwMDAKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xICAgICAgICAgICAgICAgIDB4MzAwMQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIgICAgICAgICAgICAgICAgMHgzMDAyCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMyAgICAgICAgICAgICAgICAweDMwMDMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80ICAgICAgICAgICAgICAgIDB4MzAwNAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzUgICAgICAgICAgICAgICAgMHgzMDA1CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNiAgICAgICAgICAgICAgICAweDMwMDYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl83ICAgICAgICAgICAgICAgIDB4MzAwNworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzggICAgICAgICAgICAgICAgMHgzMDA4CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfOSAgICAgICAgICAgICAgICAweDMwMDkKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMCAgICAgICAgICAgICAgIDB4MzAwQQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzExICAgICAgICAgICAgICAgMHgzMDBCCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTIgICAgICAgICAgICAgICAweDMwMEMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMyAgICAgICAgICAgICAgIDB4MzAwRAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE0ICAgICAgICAgICAgICAgMHgzMDBFCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTUgICAgICAgICAgICAgICAweDMwMEYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xNiAgICAgICAgICAgICAgIDB4MzAxMAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE3ICAgICAgICAgICAgICAgMHgzMDExCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTggICAgICAgICAgICAgICAweDMwMTIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xOSAgICAgICAgICAgICAgIDB4MzAxMworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIwICAgICAgICAgICAgICAgMHgzMDE0CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjEgICAgICAgICAgICAgICAweDMwMTUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yMiAgICAgICAgICAgICAgIDB4MzAxNgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIzICAgICAgICAgICAgICAgMHgzMDE3CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjQgICAgICAgICAgICAgICAweDMwMTgKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yNSAgICAgICAgICAgICAgIDB4MzAxOQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI2ICAgICAgICAgICAgICAgMHgzMDFBCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjcgICAgICAgICAgICAgICAweDMwMUIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yOCAgICAgICAgICAgICAgIDB4MzAxQworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI5ICAgICAgICAgICAgICAgMHgzMDFECisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzAgICAgICAgICAgICAgICAweDMwMUUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zMSAgICAgICAgICAgICAgIDB4MzAxRgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzMyICAgICAgICAgICAgICAgMHgzMDIwCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzMgICAgICAgICAgICAgICAweDMwMjEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNCAgICAgICAgICAgICAgIDB4MzAyMgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM1ICAgICAgICAgICAgICAgMHgzMDIzCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzYgICAgICAgICAgICAgICAweDMwMjQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNyAgICAgICAgICAgICAgIDB4MzAyNQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM4ICAgICAgICAgICAgICAgMHgzMDI2CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzkgICAgICAgICAgICAgICAweDMwMjcKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MCAgICAgICAgICAgICAgIDB4MzAyOAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQxICAgICAgICAgICAgICAgMHgzMDI5CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDIgICAgICAgICAgICAgICAweDMwMkEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MyAgICAgICAgICAgICAgIDB4MzAyQgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ0ICAgICAgICAgICAgICAgMHgzMDJDCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDUgICAgICAgICAgICAgICAweDMwMkQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80NiAgICAgICAgICAgICAgIDB4MzAyRQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ3ICAgICAgICAgICAgICAgMHgzMDJGCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDggICAgICAgICAgICAgICAweDMwMzAKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80OSAgICAgICAgICAgICAgIDB4MzAzMQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzUwICAgICAgICAgICAgICAgMHgzMDMyCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNTEgICAgICAgICAgICAgICAweDMwMzMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl81MiAgICAgICAgICAgICAgIDB4MzAzNAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzUzICAgICAgICAgICAgICAgMHgzMDM1CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNTQgICAgICAgICAgICAgICAweDMwMzYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl81NSAgICAgICAgICAgICAgIDB4MzAzNworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzU2ICAgICAgICAgICAgICAgMHgzMDM4CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNTcgICAgICAgICAgICAgICAweDMwMzkKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl81OCAgICAgICAgICAgICAgIDB4MzAzQQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzU5ICAgICAgICAgICAgICAgMHgzMDNCCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNjAgICAgICAgICAgICAgICAweDMwM0MKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl82MSAgICAgICAgICAgICAgIDB4MzAzRAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzYyICAgICAgICAgICAgICAgMHgzMDNFCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNjMgICAgICAgICAgICAgICAweDMwM0YKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl82NCAgICAgICAgICAgICAgIDB4MzA0MAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzY1ICAgICAgICAgICAgICAgMHgzMDQxCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNjYgICAgICAgICAgICAgICAweDMwNDIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl82NyAgICAgICAgICAgICAgIDB4MzA0MworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzY4ICAgICAgICAgICAgICAgMHgzMDQ0CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNjkgICAgICAgICAgICAgICAweDMwNDUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl83MCAgICAgICAgICAgICAgIDB4MzA0NgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzcxICAgICAgICAgICAgICAgMHgzMDQ3CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNzIgICAgICAgICAgICAgICAweDMwNDgKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl83MyAgICAgICAgICAgICAgIDB4MzA0OQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzc0ICAgICAgICAgICAgICAgMHgzMDRBCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNzUgICAgICAgICAgICAgICAweDMwNEIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl83NiAgICAgICAgICAgICAgIDB4MzA0QworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzc3ICAgICAgICAgICAgICAgMHgzMDRECisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNzggICAgICAgICAgICAgICAweDMwNEUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl83OSAgICAgICAgICAgICAgIDB4MzA0RgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzgwICAgICAgICAgICAgICAgMHgzMDUwCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfODEgICAgICAgICAgICAgICAweDMwNTEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl84MiAgICAgICAgICAgICAgIDB4MzA1MgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzgzICAgICAgICAgICAgICAgMHgzMDUzCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfODQgICAgICAgICAgICAgICAweDMwNTQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl84NSAgICAgICAgICAgICAgIDB4MzA1NQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzg2ICAgICAgICAgICAgICAgMHgzMDU2CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfODcgICAgICAgICAgICAgICAweDMwNTcKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl84OCAgICAgICAgICAgICAgIDB4MzA1OAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzg5ICAgICAgICAgICAgICAgMHgzMDU5CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfOTAgICAgICAgICAgICAgICAweDMwNUEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl85MSAgICAgICAgICAgICAgIDB4MzA1QgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzkyICAgICAgICAgICAgICAgMHgzMDVDCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfOTMgICAgICAgICAgICAgICAweDMwNUQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl85NCAgICAgICAgICAgICAgIDB4MzA1RQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzk1ICAgICAgICAgICAgICAgMHgzMDVGCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfOTYgICAgICAgICAgICAgICAweDMwNjAKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl85NyAgICAgICAgICAgICAgIDB4MzA2MQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzk4ICAgICAgICAgICAgICAgMHgzMDYyCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfOTkgICAgICAgICAgICAgICAweDMwNjMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMDAgICAgICAgICAgICAgIDB4MzA2NAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzEwMSAgICAgICAgICAgICAgMHgzMDY1CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTAyICAgICAgICAgICAgICAweDMwNjYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMDMgICAgICAgICAgICAgIDB4MzA2NworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzEwNCAgICAgICAgICAgICAgMHgzMDY4CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTA1ICAgICAgICAgICAgICAweDMwNjkKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMDYgICAgICAgICAgICAgIDB4MzA2QQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzEwNyAgICAgICAgICAgICAgMHgzMDZCCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTA4ICAgICAgICAgICAgICAweDMwNkMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMDkgICAgICAgICAgICAgIDB4MzA2RAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzExMCAgICAgICAgICAgICAgMHgzMDZFCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTExICAgICAgICAgICAgICAweDMwNkYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMTIgICAgICAgICAgICAgIDB4MzA3MAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzExMyAgICAgICAgICAgICAgMHgzMDcxCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTE0ICAgICAgICAgICAgICAweDMwNzIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMTUgICAgICAgICAgICAgIDB4MzA3MworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzExNiAgICAgICAgICAgICAgMHgzMDc0CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTE3ICAgICAgICAgICAgICAweDMwNzUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMTggICAgICAgICAgICAgIDB4MzA3NgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzExOSAgICAgICAgICAgICAgMHgzMDc3CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTIwICAgICAgICAgICAgICAweDMwNzgKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMjEgICAgICAgICAgICAgIDB4MzA3OQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzEyMiAgICAgICAgICAgICAgMHgzMDdBCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTIzICAgICAgICAgICAgICAweDMwN0IKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMjQgICAgICAgICAgICAgIDB4MzA3QworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzEyNSAgICAgICAgICAgICAgMHgzMDdECisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTI2ICAgICAgICAgICAgICAweDMwN0UKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMjcgICAgICAgICAgICAgIDB4MzA3RgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzEyOCAgICAgICAgICAgICAgMHgzMDgwCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTI5ICAgICAgICAgICAgICAweDMwODEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMzAgICAgICAgICAgICAgIDB4MzA4MgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzEzMSAgICAgICAgICAgICAgMHgzMDgzCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTMyICAgICAgICAgICAgICAweDMwODQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMzMgICAgICAgICAgICAgIDB4MzA4NQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzEzNCAgICAgICAgICAgICAgMHgzMDg2CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTM1ICAgICAgICAgICAgICAweDMwODcKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMzYgICAgICAgICAgICAgIDB4MzA4OAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzEzNyAgICAgICAgICAgICAgMHgzMDg5CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTM4ICAgICAgICAgICAgICAweDMwOEEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xMzkgICAgICAgICAgICAgIDB4MzA4QgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE0MCAgICAgICAgICAgICAgMHgzMDhDCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTQxICAgICAgICAgICAgICAweDMwOEQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xNDIgICAgICAgICAgICAgIDB4MzA4RQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE0MyAgICAgICAgICAgICAgMHgzMDhGCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTQ0ICAgICAgICAgICAgICAweDMwOTAKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xNDUgICAgICAgICAgICAgIDB4MzA5MQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE0NiAgICAgICAgICAgICAgMHgzMDkyCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTQ3ICAgICAgICAgICAgICAweDMwOTMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xNDggICAgICAgICAgICAgIDB4MzA5NAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE0OSAgICAgICAgICAgICAgMHgzMDk1CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTUwICAgICAgICAgICAgICAweDMwOTYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xNTEgICAgICAgICAgICAgIDB4MzA5NworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE1MiAgICAgICAgICAgICAgMHgzMDk4CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTUzICAgICAgICAgICAgICAweDMwOTkKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xNTQgICAgICAgICAgICAgIDB4MzA5QQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE1NSAgICAgICAgICAgICAgMHgzMDlCCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTU2ICAgICAgICAgICAgICAweDMwOUMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xNTcgICAgICAgICAgICAgIDB4MzA5RAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE1OCAgICAgICAgICAgICAgMHgzMDlFCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTU5ICAgICAgICAgICAgICAweDMwOUYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xNjAgICAgICAgICAgICAgIDB4MzBBMAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE2MSAgICAgICAgICAgICAgMHgzMEExCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTYyICAgICAgICAgICAgICAweDMwQTIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xNjMgICAgICAgICAgICAgIDB4MzBBMworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE2NCAgICAgICAgICAgICAgMHgzMEE0CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTY1ICAgICAgICAgICAgICAweDMwQTUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xNjYgICAgICAgICAgICAgIDB4MzBBNgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE2NyAgICAgICAgICAgICAgMHgzMEE3CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTY4ICAgICAgICAgICAgICAweDMwQTgKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xNjkgICAgICAgICAgICAgIDB4MzBBOQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE3MCAgICAgICAgICAgICAgMHgzMEFBCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTcxICAgICAgICAgICAgICAweDMwQUIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xNzIgICAgICAgICAgICAgIDB4MzBBQworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE3MyAgICAgICAgICAgICAgMHgzMEFECisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTc0ICAgICAgICAgICAgICAweDMwQUUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xNzUgICAgICAgICAgICAgIDB4MzBBRgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE3NiAgICAgICAgICAgICAgMHgzMEIwCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTc3ICAgICAgICAgICAgICAweDMwQjEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xNzggICAgICAgICAgICAgIDB4MzBCMgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE3OSAgICAgICAgICAgICAgMHgzMEIzCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTgwICAgICAgICAgICAgICAweDMwQjQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xODEgICAgICAgICAgICAgIDB4MzBCNQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE4MiAgICAgICAgICAgICAgMHgzMEI2CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTgzICAgICAgICAgICAgICAweDMwQjcKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xODQgICAgICAgICAgICAgIDB4MzBCOAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE4NSAgICAgICAgICAgICAgMHgzMEI5CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTg2ICAgICAgICAgICAgICAweDMwQkEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xODcgICAgICAgICAgICAgIDB4MzBCQgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE4OCAgICAgICAgICAgICAgMHgzMEJDCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTg5ICAgICAgICAgICAgICAweDMwQkQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xOTAgICAgICAgICAgICAgIDB4MzBCRQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE5MSAgICAgICAgICAgICAgMHgzMEJGCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTkyICAgICAgICAgICAgICAweDMwQzAKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xOTMgICAgICAgICAgICAgIDB4MzBDMQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE5NCAgICAgICAgICAgICAgMHgzMEMyCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTk1ICAgICAgICAgICAgICAweDMwQzMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xOTYgICAgICAgICAgICAgIDB4MzBDNAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzE5NyAgICAgICAgICAgICAgMHgzMEM1CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMTk4ICAgICAgICAgICAgICAweDMwQzYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8xOTkgICAgICAgICAgICAgIDB4MzBDNworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIwMCAgICAgICAgICAgICAgMHgzMEM4CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjAxICAgICAgICAgICAgICAweDMwQzkKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yMDIgICAgICAgICAgICAgIDB4MzBDQQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIwMyAgICAgICAgICAgICAgMHgzMENCCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjA0ICAgICAgICAgICAgICAweDMwQ0MKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yMDUgICAgICAgICAgICAgIDB4MzBDRAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIwNiAgICAgICAgICAgICAgMHgzMENFCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjA3ICAgICAgICAgICAgICAweDMwQ0YKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yMDggICAgICAgICAgICAgIDB4MzBEMAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIwOSAgICAgICAgICAgICAgMHgzMEQxCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjEwICAgICAgICAgICAgICAweDMwRDIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yMTEgICAgICAgICAgICAgIDB4MzBEMworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIxMiAgICAgICAgICAgICAgMHgzMEQ0CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjEzICAgICAgICAgICAgICAweDMwRDUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yMTQgICAgICAgICAgICAgIDB4MzBENgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIxNSAgICAgICAgICAgICAgMHgzMEQ3CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjE2ICAgICAgICAgICAgICAweDMwRDgKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yMTcgICAgICAgICAgICAgIDB4MzBEOQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIxOCAgICAgICAgICAgICAgMHgzMERBCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjE5ICAgICAgICAgICAgICAweDMwREIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yMjAgICAgICAgICAgICAgIDB4MzBEQworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIyMSAgICAgICAgICAgICAgMHgzMERECisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjIyICAgICAgICAgICAgICAweDMwREUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yMjMgICAgICAgICAgICAgIDB4MzBERgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIyNCAgICAgICAgICAgICAgMHgzMEUwCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjI1ICAgICAgICAgICAgICAweDMwRTEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yMjYgICAgICAgICAgICAgIDB4MzBFMgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIyNyAgICAgICAgICAgICAgMHgzMEUzCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjI4ICAgICAgICAgICAgICAweDMwRTQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yMjkgICAgICAgICAgICAgIDB4MzBFNQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIzMCAgICAgICAgICAgICAgMHgzMEU2CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjMxICAgICAgICAgICAgICAweDMwRTcKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yMzIgICAgICAgICAgICAgIDB4MzBFOAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIzMyAgICAgICAgICAgICAgMHgzMEU5CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjM0ICAgICAgICAgICAgICAweDMwRUEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yMzUgICAgICAgICAgICAgIDB4MzBFQgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIzNiAgICAgICAgICAgICAgMHgzMEVDCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjM3ICAgICAgICAgICAgICAweDMwRUQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yMzggICAgICAgICAgICAgIDB4MzBFRQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzIzOSAgICAgICAgICAgICAgMHgzMEVGCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjQwICAgICAgICAgICAgICAweDMwRjAKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yNDEgICAgICAgICAgICAgIDB4MzBGMQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI0MiAgICAgICAgICAgICAgMHgzMEYyCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjQzICAgICAgICAgICAgICAweDMwRjMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yNDQgICAgICAgICAgICAgIDB4MzBGNAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI0NSAgICAgICAgICAgICAgMHgzMEY1CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjQ2ICAgICAgICAgICAgICAweDMwRjYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yNDcgICAgICAgICAgICAgIDB4MzBGNworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI0OCAgICAgICAgICAgICAgMHgzMEY4CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjQ5ICAgICAgICAgICAgICAweDMwRjkKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yNTAgICAgICAgICAgICAgIDB4MzBGQQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI1MSAgICAgICAgICAgICAgMHgzMEZCCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjUyICAgICAgICAgICAgICAweDMwRkMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yNTMgICAgICAgICAgICAgIDB4MzBGRAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI1NCAgICAgICAgICAgICAgMHgzMEZFCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjU1ICAgICAgICAgICAgICAweDMwRkYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yNTYgICAgICAgICAgICAgIDB4MzEwMAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI1NyAgICAgICAgICAgICAgMHgzMTAxCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjU4ICAgICAgICAgICAgICAweDMxMDIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yNTkgICAgICAgICAgICAgIDB4MzEwMworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI2MCAgICAgICAgICAgICAgMHgzMTA0CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjYxICAgICAgICAgICAgICAweDMxMDUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yNjIgICAgICAgICAgICAgIDB4MzEwNgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI2MyAgICAgICAgICAgICAgMHgzMTA3CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjY0ICAgICAgICAgICAgICAweDMxMDgKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yNjUgICAgICAgICAgICAgIDB4MzEwOQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI2NiAgICAgICAgICAgICAgMHgzMTBBCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjY3ICAgICAgICAgICAgICAweDMxMEIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yNjggICAgICAgICAgICAgIDB4MzEwQworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI2OSAgICAgICAgICAgICAgMHgzMTBECisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjcwICAgICAgICAgICAgICAweDMxMEUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yNzEgICAgICAgICAgICAgIDB4MzEwRgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI3MiAgICAgICAgICAgICAgMHgzMTEwCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjczICAgICAgICAgICAgICAweDMxMTEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yNzQgICAgICAgICAgICAgIDB4MzExMgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI3NSAgICAgICAgICAgICAgMHgzMTEzCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjc2ICAgICAgICAgICAgICAweDMxMTQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yNzcgICAgICAgICAgICAgIDB4MzExNQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI3OCAgICAgICAgICAgICAgMHgzMTE2CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjc5ICAgICAgICAgICAgICAweDMxMTcKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yODAgICAgICAgICAgICAgIDB4MzExOAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI4MSAgICAgICAgICAgICAgMHgzMTE5CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjgyICAgICAgICAgICAgICAweDMxMUEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yODMgICAgICAgICAgICAgIDB4MzExQgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI4NCAgICAgICAgICAgICAgMHgzMTFDCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjg1ICAgICAgICAgICAgICAweDMxMUQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yODYgICAgICAgICAgICAgIDB4MzExRQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI4NyAgICAgICAgICAgICAgMHgzMTFGCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjg4ICAgICAgICAgICAgICAweDMxMjAKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yODkgICAgICAgICAgICAgIDB4MzEyMQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI5MCAgICAgICAgICAgICAgMHgzMTIyCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjkxICAgICAgICAgICAgICAweDMxMjMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yOTIgICAgICAgICAgICAgIDB4MzEyNAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI5MyAgICAgICAgICAgICAgMHgzMTI1CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjk0ICAgICAgICAgICAgICAweDMxMjYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yOTUgICAgICAgICAgICAgIDB4MzEyNworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI5NiAgICAgICAgICAgICAgMHgzMTI4CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMjk3ICAgICAgICAgICAgICAweDMxMjkKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8yOTggICAgICAgICAgICAgIDB4MzEyQQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzI5OSAgICAgICAgICAgICAgMHgzMTJCCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzAwICAgICAgICAgICAgICAweDMxMkMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zMDEgICAgICAgICAgICAgIDB4MzEyRAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzMwMiAgICAgICAgICAgICAgMHgzMTJFCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzAzICAgICAgICAgICAgICAweDMxMkYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zMDQgICAgICAgICAgICAgIDB4MzEzMAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzMwNSAgICAgICAgICAgICAgMHgzMTMxCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzA2ICAgICAgICAgICAgICAweDMxMzIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zMDcgICAgICAgICAgICAgIDB4MzEzMworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzMwOCAgICAgICAgICAgICAgMHgzMTM0CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzA5ICAgICAgICAgICAgICAweDMxMzUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zMTAgICAgICAgICAgICAgIDB4MzEzNgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzMxMSAgICAgICAgICAgICAgMHgzMTM3CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzEyICAgICAgICAgICAgICAweDMxMzgKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zMTMgICAgICAgICAgICAgIDB4MzEzOQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzMxNCAgICAgICAgICAgICAgMHgzMTNBCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzE1ICAgICAgICAgICAgICAweDMxM0IKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zMTYgICAgICAgICAgICAgIDB4MzEzQworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzMxNyAgICAgICAgICAgICAgMHgzMTNECisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzE4ICAgICAgICAgICAgICAweDMxM0UKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zMTkgICAgICAgICAgICAgIDB4MzEzRgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzMyMCAgICAgICAgICAgICAgMHgzMTQwCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzIxICAgICAgICAgICAgICAweDMxNDEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zMjIgICAgICAgICAgICAgIDB4MzE0MgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzMyMyAgICAgICAgICAgICAgMHgzMTQzCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzI0ICAgICAgICAgICAgICAweDMxNDQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zMjUgICAgICAgICAgICAgIDB4MzE0NQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzMyNiAgICAgICAgICAgICAgMHgzMTQ2CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzI3ICAgICAgICAgICAgICAweDMxNDcKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zMjggICAgICAgICAgICAgIDB4MzE0OAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzMyOSAgICAgICAgICAgICAgMHgzMTQ5CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzMwICAgICAgICAgICAgICAweDMxNEEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zMzEgICAgICAgICAgICAgIDB4MzE0QgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzMzMiAgICAgICAgICAgICAgMHgzMTRDCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzMzICAgICAgICAgICAgICAweDMxNEQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zMzQgICAgICAgICAgICAgIDB4MzE0RQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzMzNSAgICAgICAgICAgICAgMHgzMTRGCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzM2ICAgICAgICAgICAgICAweDMxNTAKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zMzcgICAgICAgICAgICAgIDB4MzE1MQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzMzOCAgICAgICAgICAgICAgMHgzMTUyCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzM5ICAgICAgICAgICAgICAweDMxNTMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNDAgICAgICAgICAgICAgIDB4MzE1NAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM0MSAgICAgICAgICAgICAgMHgzMTU1CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzQyICAgICAgICAgICAgICAweDMxNTYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNDMgICAgICAgICAgICAgIDB4MzE1NworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM0NCAgICAgICAgICAgICAgMHgzMTU4CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzQ1ICAgICAgICAgICAgICAweDMxNTkKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNDYgICAgICAgICAgICAgIDB4MzE1QQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM0NyAgICAgICAgICAgICAgMHgzMTVCCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzQ4ICAgICAgICAgICAgICAweDMxNUMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNDkgICAgICAgICAgICAgIDB4MzE1RAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM1MCAgICAgICAgICAgICAgMHgzMTVFCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzUxICAgICAgICAgICAgICAweDMxNUYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNTIgICAgICAgICAgICAgIDB4MzE2MAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM1MyAgICAgICAgICAgICAgMHgzMTYxCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzU0ICAgICAgICAgICAgICAweDMxNjIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNTUgICAgICAgICAgICAgIDB4MzE2MworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM1NiAgICAgICAgICAgICAgMHgzMTY0CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzU3ICAgICAgICAgICAgICAweDMxNjUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNTggICAgICAgICAgICAgIDB4MzE2NgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM1OSAgICAgICAgICAgICAgMHgzMTY3CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzYwICAgICAgICAgICAgICAweDMxNjgKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNjEgICAgICAgICAgICAgIDB4MzE2OQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM2MiAgICAgICAgICAgICAgMHgzMTZBCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzYzICAgICAgICAgICAgICAweDMxNkIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNjQgICAgICAgICAgICAgIDB4MzE2QworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM2NSAgICAgICAgICAgICAgMHgzMTZECisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzY2ICAgICAgICAgICAgICAweDMxNkUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNjcgICAgICAgICAgICAgIDB4MzE2RgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM2OCAgICAgICAgICAgICAgMHgzMTcwCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzY5ICAgICAgICAgICAgICAweDMxNzEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNzAgICAgICAgICAgICAgIDB4MzE3MgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM3MSAgICAgICAgICAgICAgMHgzMTczCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzcyICAgICAgICAgICAgICAweDMxNzQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNzMgICAgICAgICAgICAgIDB4MzE3NQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM3NCAgICAgICAgICAgICAgMHgzMTc2CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzc1ICAgICAgICAgICAgICAweDMxNzcKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNzYgICAgICAgICAgICAgIDB4MzE3OAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM3NyAgICAgICAgICAgICAgMHgzMTc5CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzc4ICAgICAgICAgICAgICAweDMxN0EKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zNzkgICAgICAgICAgICAgIDB4MzE3QgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM4MCAgICAgICAgICAgICAgMHgzMTdDCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzgxICAgICAgICAgICAgICAweDMxN0QKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zODIgICAgICAgICAgICAgIDB4MzE3RQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM4MyAgICAgICAgICAgICAgMHgzMTdGCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzg0ICAgICAgICAgICAgICAweDMxODAKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zODUgICAgICAgICAgICAgIDB4MzE4MQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM4NiAgICAgICAgICAgICAgMHgzMTgyCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzg3ICAgICAgICAgICAgICAweDMxODMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zODggICAgICAgICAgICAgIDB4MzE4NAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM4OSAgICAgICAgICAgICAgMHgzMTg1CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzkwICAgICAgICAgICAgICAweDMxODYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zOTEgICAgICAgICAgICAgIDB4MzE4NworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM5MiAgICAgICAgICAgICAgMHgzMTg4CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzkzICAgICAgICAgICAgICAweDMxODkKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zOTQgICAgICAgICAgICAgIDB4MzE4QQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM5NSAgICAgICAgICAgICAgMHgzMThCCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzk2ICAgICAgICAgICAgICAweDMxOEMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl8zOTcgICAgICAgICAgICAgIDB4MzE4RAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzM5OCAgICAgICAgICAgICAgMHgzMThFCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfMzk5ICAgICAgICAgICAgICAweDMxOEYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MDAgICAgICAgICAgICAgIDB4MzE5MAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQwMSAgICAgICAgICAgICAgMHgzMTkxCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDAyICAgICAgICAgICAgICAweDMxOTIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MDMgICAgICAgICAgICAgIDB4MzE5MworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQwNCAgICAgICAgICAgICAgMHgzMTk0CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDA1ICAgICAgICAgICAgICAweDMxOTUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MDYgICAgICAgICAgICAgIDB4MzE5NgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQwNyAgICAgICAgICAgICAgMHgzMTk3CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDA4ICAgICAgICAgICAgICAweDMxOTgKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MDkgICAgICAgICAgICAgIDB4MzE5OQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQxMCAgICAgICAgICAgICAgMHgzMTlBCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDExICAgICAgICAgICAgICAweDMxOUIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MTIgICAgICAgICAgICAgIDB4MzE5QworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQxMyAgICAgICAgICAgICAgMHgzMTlECisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDE0ICAgICAgICAgICAgICAweDMxOUUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MTUgICAgICAgICAgICAgIDB4MzE5RgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQxNiAgICAgICAgICAgICAgMHgzMUEwCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDE3ICAgICAgICAgICAgICAweDMxQTEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MTggICAgICAgICAgICAgIDB4MzFBMgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQxOSAgICAgICAgICAgICAgMHgzMUEzCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDIwICAgICAgICAgICAgICAweDMxQTQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MjEgICAgICAgICAgICAgIDB4MzFBNQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQyMiAgICAgICAgICAgICAgMHgzMUE2CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDIzICAgICAgICAgICAgICAweDMxQTcKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MjQgICAgICAgICAgICAgIDB4MzFBOAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQyNSAgICAgICAgICAgICAgMHgzMUE5CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDI2ICAgICAgICAgICAgICAweDMxQUEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MjcgICAgICAgICAgICAgIDB4MzFBQgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQyOCAgICAgICAgICAgICAgMHgzMUFDCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDI5ICAgICAgICAgICAgICAweDMxQUQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MzAgICAgICAgICAgICAgIDB4MzFBRQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQzMSAgICAgICAgICAgICAgMHgzMUFGCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDMyICAgICAgICAgICAgICAweDMxQjAKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MzMgICAgICAgICAgICAgIDB4MzFCMQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQzNCAgICAgICAgICAgICAgMHgzMUIyCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDM1ICAgICAgICAgICAgICAweDMxQjMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MzYgICAgICAgICAgICAgIDB4MzFCNAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQzNyAgICAgICAgICAgICAgMHgzMUI1CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDM4ICAgICAgICAgICAgICAweDMxQjYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80MzkgICAgICAgICAgICAgIDB4MzFCNworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ0MCAgICAgICAgICAgICAgMHgzMUI4CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDQxICAgICAgICAgICAgICAweDMxQjkKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80NDIgICAgICAgICAgICAgIDB4MzFCQQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ0MyAgICAgICAgICAgICAgMHgzMUJCCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDQ0ICAgICAgICAgICAgICAweDMxQkMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80NDUgICAgICAgICAgICAgIDB4MzFCRAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ0NiAgICAgICAgICAgICAgMHgzMUJFCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDQ3ICAgICAgICAgICAgICAweDMxQkYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80NDggICAgICAgICAgICAgIDB4MzFDMAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ0OSAgICAgICAgICAgICAgMHgzMUMxCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDUwICAgICAgICAgICAgICAweDMxQzIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80NTEgICAgICAgICAgICAgIDB4MzFDMworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ1MiAgICAgICAgICAgICAgMHgzMUM0CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDUzICAgICAgICAgICAgICAweDMxQzUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80NTQgICAgICAgICAgICAgIDB4MzFDNgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ1NSAgICAgICAgICAgICAgMHgzMUM3CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDU2ICAgICAgICAgICAgICAweDMxQzgKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80NTcgICAgICAgICAgICAgIDB4MzFDOQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ1OCAgICAgICAgICAgICAgMHgzMUNBCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDU5ICAgICAgICAgICAgICAweDMxQ0IKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80NjAgICAgICAgICAgICAgIDB4MzFDQworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ2MSAgICAgICAgICAgICAgMHgzMUNECisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDYyICAgICAgICAgICAgICAweDMxQ0UKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80NjMgICAgICAgICAgICAgIDB4MzFDRgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ2NCAgICAgICAgICAgICAgMHgzMUQwCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDY1ICAgICAgICAgICAgICAweDMxRDEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80NjYgICAgICAgICAgICAgIDB4MzFEMgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ2NyAgICAgICAgICAgICAgMHgzMUQzCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDY4ICAgICAgICAgICAgICAweDMxRDQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80NjkgICAgICAgICAgICAgIDB4MzFENQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ3MCAgICAgICAgICAgICAgMHgzMUQ2CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDcxICAgICAgICAgICAgICAweDMxRDcKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80NzIgICAgICAgICAgICAgIDB4MzFEOAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ3MyAgICAgICAgICAgICAgMHgzMUQ5CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDc0ICAgICAgICAgICAgICAweDMxREEKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80NzUgICAgICAgICAgICAgIDB4MzFEQgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ3NiAgICAgICAgICAgICAgMHgzMURDCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDc3ICAgICAgICAgICAgICAweDMxREQKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80NzggICAgICAgICAgICAgIDB4MzFERQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ3OSAgICAgICAgICAgICAgMHgzMURGCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDgwICAgICAgICAgICAgICAweDMxRTAKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80ODEgICAgICAgICAgICAgIDB4MzFFMQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ4MiAgICAgICAgICAgICAgMHgzMUUyCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDgzICAgICAgICAgICAgICAweDMxRTMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80ODQgICAgICAgICAgICAgIDB4MzFFNAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ4NSAgICAgICAgICAgICAgMHgzMUU1CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDg2ICAgICAgICAgICAgICAweDMxRTYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80ODcgICAgICAgICAgICAgIDB4MzFFNworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ4OCAgICAgICAgICAgICAgMHgzMUU4CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDg5ICAgICAgICAgICAgICAweDMxRTkKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80OTAgICAgICAgICAgICAgIDB4MzFFQQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ5MSAgICAgICAgICAgICAgMHgzMUVCCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDkyICAgICAgICAgICAgICAweDMxRUMKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80OTMgICAgICAgICAgICAgIDB4MzFFRAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ5NCAgICAgICAgICAgICAgMHgzMUVFCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDk1ICAgICAgICAgICAgICAweDMxRUYKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80OTYgICAgICAgICAgICAgIDB4MzFGMAorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzQ5NyAgICAgICAgICAgICAgMHgzMUYxCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNDk4ICAgICAgICAgICAgICAweDMxRjIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl80OTkgICAgICAgICAgICAgIDB4MzFGMworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzUwMCAgICAgICAgICAgICAgMHgzMUY0CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNTAxICAgICAgICAgICAgICAweDMxRjUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl81MDIgICAgICAgICAgICAgIDB4MzFGNgorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzUwMyAgICAgICAgICAgICAgMHgzMUY3CisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNTA0ICAgICAgICAgICAgICAweDMxRjgKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl81MDUgICAgICAgICAgICAgIDB4MzFGOQorI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzUwNiAgICAgICAgICAgICAgMHgzMUZBCisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNTA3ICAgICAgICAgICAgICAweDMxRkIKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl81MDggICAgICAgICAgICAgIDB4MzFGQworI2RlZmluZSBXTTg5OTVfV1JJVEVfU0VRVUVOQ0VSXzUwOSAgICAgICAgICAgICAgMHgzMUZECisjZGVmaW5lIFdNODk5NV9XUklURV9TRVFVRU5DRVJfNTEwICAgICAgICAgICAgICAweDMxRkUKKyNkZWZpbmUgV004OTk1X1dSSVRFX1NFUVVFTkNFUl81MTEgICAgICAgICAgICAgIDB4MzFGRgorCisjZGVmaW5lIFdNODk5NV9SRUdJU1RFUl9DT1VOVCAgICAgICAgICAgICAgICAgICA3MjUKKyNkZWZpbmUgV004OTk1X01BWF9SRUdJU1RFUiAgICAgICAgICAgICAgICAgICAgIDB4MzFGRgorCisjZGVmaW5lIFdNODk5NV9NQVhfQ0FDSEVEX1JFR0lTVEVSCQlXTTg5OTVfTUFYX1JFR0lTVEVSCisKKy8qCisgKiBGaWVsZCBEZWZpbml0aW9ucy4KKyAqLworCisvKgorICogUjAgKDB4MDApIC0gU29mdHdhcmUgUmVzZXQKKyAqLworI2RlZmluZSBXTTg5OTVfU1dfUkVTRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGRkZGCS8qIFNXX1JFU0VUIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9TV19SRVNFVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAJLyogU1dfUkVTRVQgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X1NXX1JFU0VUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxNgkvKiBTV19SRVNFVCAtIFsxNTowXSAqLworCisvKgorICogUjEgKDB4MDEpIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTVfTUlDQjJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIE1JQ0IyX0VOQSAqLworI2RlZmluZSBXTTg5OTVfTUlDQjJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIE1JQ0IyX0VOQSAqLworI2RlZmluZSBXTTg5OTVfTUlDQjJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA5CS8qIE1JQ0IyX0VOQSAqLworI2RlZmluZSBXTTg5OTVfTUlDQjJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxCS8qIE1JQ0IyX0VOQSAqLworI2RlZmluZSBXTTg5OTVfTUlDQjFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIE1JQ0IxX0VOQSAqLworI2RlZmluZSBXTTg5OTVfTUlDQjFfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIE1JQ0IxX0VOQSAqLworI2RlZmluZSBXTTg5OTVfTUlDQjFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4CS8qIE1JQ0IxX0VOQSAqLworI2RlZmluZSBXTTg5OTVfTUlDQjFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxCS8qIE1JQ0IxX0VOQSAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyTF9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCS8qIEhQT1VUMkxfRU5BICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDJMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwODAJLyogSFBPVVQyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMkxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgNwkvKiBIUE9VVDJMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIEhQT1VUMkxfRU5BICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDJSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogSFBPVVQyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMlJfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBIUE9VVDJSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICA2CS8qIEhQT1VUMlJfRU5BICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDJSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogSFBPVVQyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMUxfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAkvKiBIUE9VVDFMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDIwCS8qIEhQT1VUMUxfRU5BICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDFMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUJLyogSFBPVVQxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMUxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMQkvKiBIUE9VVDFMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxUl9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCS8qIEhQT1VUMVJfRU5BICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDFSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMTAJLyogSFBPVVQxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMVJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgNAkvKiBIUE9VVDFSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIEhQT1VUMVJfRU5BICovCisjZGVmaW5lIFdNODk5NV9CR19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogQkdfRU5BICovCisjZGVmaW5lIFdNODk5NV9CR19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogQkdfRU5BICovCisjZGVmaW5lIFdNODk5NV9CR19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAJLyogQkdfRU5BICovCisjZGVmaW5lIFdNODk5NV9CR19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogQkdfRU5BICovCisKKy8qCisgKiBSMiAoMHgwMikgLSBQb3dlciBNYW5hZ2VtZW50ICgyKQorICovCisjZGVmaW5lIFdNODk5NV9PUENMS19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAJLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NV9PUENMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDA4MDAJLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NV9PUENMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTEJLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NV9PUENMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEJLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NV9JTjFMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAJLyogSU4xTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0lOMUxfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMAkvKiBJTjFMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfSU4xTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1CS8qIElOMUxfRU5BICovCisjZGVmaW5lIFdNODk5NV9JTjFMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogSU4xTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0lOMVJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBJTjFSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfSU4xUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwCS8qIElOMVJfRU5BICovCisjZGVmaW5lIFdNODk5NV9JTjFSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQJLyogSU4xUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0lOMVJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBJTjFSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfTERPMl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIExETzJfRU5BICovCisjZGVmaW5lIFdNODk5NV9MRE8yX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIJLyogTERPMl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0xETzJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBMRE8yX0VOQSAqLworI2RlZmluZSBXTTg5OTVfTERPMl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIExETzJfRU5BICovCisKKy8qCisgKiBSMyAoMHgwMykgLSBQb3dlciBNYW5hZ2VtZW50ICgzKQorICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDTF9FTkEgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogQUlGMkFEQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAweDIwMDAJLyogQUlGMkFEQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgMTMJLyogQUlGMkFEQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMkFEQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDUl9FTkEgICAgICAgICAgICAgICAgICAgICAweDEwMDAJLyogQUlGMkFEQ1JfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAweDEwMDAJLyogQUlGMkFEQ1JfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgMTIJLyogQUlGMkFEQ1JfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMkFEQ1JfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMkxfRU5BICAgICAgICAgICAgICAgICAgICAweDA4MDAJLyogQUlGMUFEQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzJMX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwODAwCS8qIEFJRjFBREMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxMQkvKiBBSUYxQURDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMkxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMUFEQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzJSX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwNDAwCS8qIEFJRjFBREMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyUl9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDQwMAkvKiBBSUYxQURDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMlJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMTAJLyogQUlGMUFEQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzJSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFBREMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMxTF9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBBSUYxQURDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMUxfRU5BX01BU0sgICAgICAgICAgICAgICAweDAyMDAJLyogQUlGMUFEQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzFMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICA5CS8qIEFJRjFBREMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMxTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxQURDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMVJfRU5BICAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMUFEQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzFSX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjFBREMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMxUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgOAkvKiBBSUYxQURDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMVJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMUFEQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRE1JQzNMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCS8qIERNSUMzTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0RNSUMzTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MAkvKiBETUlDM0xfRU5BICovCisjZGVmaW5lIFdNODk5NV9ETUlDM0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDcJLyogRE1JQzNMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRE1JQzNMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIERNSUMzTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0RNSUMzUl9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBETUlDM1JfRU5BICovCisjZGVmaW5lIFdNODk5NV9ETUlDM1JfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwNDAJLyogRE1JQzNSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRE1JQzNSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA2CS8qIERNSUMzUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0RNSUMzUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMQkvKiBETUlDM1JfRU5BICovCisjZGVmaW5lIFdNODk5NV9ETUlDMkxfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAJLyogRE1JQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRE1JQzJMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwCS8qIERNSUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0RNSUMyTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNQkvKiBETUlDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NV9ETUlDMkxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEJLyogRE1JQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRE1JQzJSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCS8qIERNSUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0RNSUMyUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBETUlDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NV9ETUlDMlJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQJLyogRE1JQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRE1JQzJSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIERNSUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0RNSUMxTF9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBETUlDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NV9ETUlDMUxfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDgJLyogRE1JQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRE1JQzFMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAzCS8qIERNSUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0RNSUMxTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMQkvKiBETUlDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NV9ETUlDMVJfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQJLyogRE1JQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRE1JQzFSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA0CS8qIERNSUMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0RNSUMxUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMgkvKiBETUlDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NV9ETUlDMVJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEJLyogRE1JQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQURDTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIEFEQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NV9BRENMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIJLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FEQ0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQURDTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEFEQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NV9BRENSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogQURDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FEQ1JfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBBRENSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQURDUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCS8qIEFEQ1JfRU5BICovCisjZGVmaW5lIFdNODk5NV9BRENSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogQURDUl9FTkEgKi8KKworLyoKKyAqIFI0ICgweDA0KSAtIFBvd2VyIE1hbmFnZW1lbnQgKDQpCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNMX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAkvKiBBSUYyREFDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNMX0VOQV9NQVNLICAgICAgICAgICAgICAgIDB4MjAwMAkvKiBBSUYyREFDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAxMwkvKiBBSUYyREFDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYyREFDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNSX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAkvKiBBSUYyREFDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNSX0VOQV9NQVNLICAgICAgICAgICAgICAgIDB4MTAwMAkvKiBBSUYyREFDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAxMgkvKiBBSUYyREFDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYyREFDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyTF9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDgwMAkvKiBBSUYxREFDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMkxfRU5BX01BU0sgICAgICAgICAgICAgICAweDA4MDAJLyogQUlGMURBQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDExCS8qIEFJRjFEQUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxREFDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMlJfRU5BICAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogQUlGMURBQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJSX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwNDAwCS8qIEFJRjFEQUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxMAkvKiBBSUYxREFDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMlJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMURBQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFMX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIEFJRjFEQUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxTF9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDIwMAkvKiBBSUYxREFDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMUxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDkJLyogQUlGMURBQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFEQUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxUl9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBBSUYxREFDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMVJfRU5BX01BU0sgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMURBQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICA4CS8qIEFJRjFEQUMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxREFDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMyTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgJLyogREFDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMyTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDgJLyogREFDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMyTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDMJLyogREFDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMyTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEJLyogREFDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMyUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQJLyogREFDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMyUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDQJLyogREFDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMyUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDIJLyogREFDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMyUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEJLyogREFDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMxTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIJLyogREFDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMxTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDIJLyogREFDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMxTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEJLyogREFDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMxTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEJLyogREFDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMxUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogREFDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMxUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogREFDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMxUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAJLyogREFDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NV9EQUMxUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEJLyogREFDMVJfRU5BICovCisKKy8qCisgKiBSNSAoMHgwNSkgLSBQb3dlciBNYW5hZ2VtZW50ICg1KQorICovCisjZGVmaW5lIFdNODk5NV9ETUlDX1NSQzJfTUFTSyAgICAgICAgICAgICAgICAgICAweDAzMDAJLyogRE1JQ19TUkMyIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk1X0RNSUNfU1JDMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOAkvKiBETUlDX1NSQzIgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTVfRE1JQ19TUkMyX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAyCS8qIERNSUNfU1JDMiAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5NV9ETUlDX1NSQzFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwQzAJLyogRE1JQ19TUkMxIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk1X0RNSUNfU1JDMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNgkvKiBETUlDX1NSQzEgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTVfRE1JQ19TUkMxX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAyCS8qIERNSUNfU1JDMSAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5NV9BSUYzX1RSSSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAJLyogQUlGM19UUkkgKi8KKyNkZWZpbmUgV004OTk1X0FJRjNfVFJJX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMAkvKiBBSUYzX1RSSSAqLworI2RlZmluZSBXTTg5OTVfQUlGM19UUklfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1CS8qIEFJRjNfVFJJICovCisjZGVmaW5lIFdNODk5NV9BSUYzX1RSSV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogQUlGM19UUkkgKi8KKyNkZWZpbmUgV004OTk1X0FJRjNfQURDREFUX1NSQ19NQVNLICAgICAgICAgICAgIDB4MDAxOAkvKiBBSUYzX0FEQ0RBVF9TUkMgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTVfQUlGM19BRENEQVRfU1JDX1NISUZUICAgICAgICAgICAgICAgICAzCS8qIEFJRjNfQURDREFUX1NSQyAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NV9BSUYzX0FEQ0RBVF9TUkNfV0lEVEggICAgICAgICAgICAgICAgIDIJLyogQUlGM19BRENEQVRfU1JDIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfQURDREFUX1NSQyAgICAgICAgICAgICAgICAgIDB4MDAwNAkvKiBBSUYyX0FEQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfQURDREFUX1NSQ19NQVNLICAgICAgICAgICAgIDB4MDAwNAkvKiBBSUYyX0FEQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfQURDREFUX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgMgkvKiBBSUYyX0FEQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfQURDREFUX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgMQkvKiBBSUYyX0FEQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfREFDREFUX1NSQyAgICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBBSUYyX0RBQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfREFDREFUX1NSQ19NQVNLICAgICAgICAgICAgIDB4MDAwMgkvKiBBSUYyX0RBQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfREFDREFUX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgMQkvKiBBSUYyX0RBQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfREFDREFUX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgMQkvKiBBSUYyX0RBQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFfREFDREFUX1NSQyAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYxX0RBQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFfREFDREFUX1NSQ19NQVNLICAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYxX0RBQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFfREFDREFUX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgMAkvKiBBSUYxX0RBQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFfREFDREFUX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgMQkvKiBBSUYxX0RBQ0RBVF9TUkMgKi8KKworLyoKKyAqIFIxNiAoMHgxMCkgLSBMZWZ0IExpbmUgSW5wdXQgMSBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTVfSU4xX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCS8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5OTVfSU4xX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCS8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5OTVfSU4xX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA3CS8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5OTVfSU4xX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5OTVfSU4xTF9aQyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCS8qIElOMUxfWkMgKi8KKyNkZWZpbmUgV004OTk1X0lOMUxfWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAkvKiBJTjFMX1pDICovCisjZGVmaW5lIFdNODk5NV9JTjFMX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDUJLyogSU4xTF9aQyAqLworI2RlZmluZSBXTTg5OTVfSU4xTF9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIElOMUxfWkMgKi8KKyNkZWZpbmUgV004OTk1X0lOMUxfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRgkvKiBJTjFMX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NV9JTjFMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAJLyogSU4xTF9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfSU4xTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA1CS8qIElOMUxfVk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxNyAoMHgxMSkgLSBSaWdodCBMaW5lIElucHV0IDEgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk1X0lOMV9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAkvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTk1X0lOMV9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAkvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTk1X0lOMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNwkvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTk1X0lOMV9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTk1X0lOMVJfWkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAkvKiBJTjFSX1pDICovCisjZGVmaW5lIFdNODk5NV9JTjFSX1pDX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMjAJLyogSU4xUl9aQyAqLworI2RlZmluZSBXTTg5OTVfSU4xUl9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA1CS8qIElOMVJfWkMgKi8KKyNkZWZpbmUgV004OTk1X0lOMVJfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBJTjFSX1pDICovCisjZGVmaW5lIFdNODk5NV9JTjFSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMUYJLyogSU4xUl9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfSU4xUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCS8qIElOMVJfVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0lOMVJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNQkvKiBJTjFSX1ZPTCAtIFs0OjBdICovCisKKy8qCisgKiBSMTggKDB4MTIpIC0gTGVmdCBMaW5lIElucHV0IENvbnRyb2wKKyAqLworI2RlZmluZSBXTTg5OTVfSU4xTF9CT09TVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDMwCS8qIElOMUxfQk9PU1QgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5OTVfSU4xTF9CT09TVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0CS8qIElOMUxfQk9PU1QgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5OTVfSU4xTF9CT09TVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyCS8qIElOMUxfQk9PU1QgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5OTVfSU4xTF9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDBDCS8qIElOMUxfTU9ERSAtIFszOjJdICovCisjZGVmaW5lIFdNODk5NV9JTjFMX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDIJLyogSU4xTF9NT0RFIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTk1X0lOMUxfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMgkvKiBJTjFMX01PREUgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5OTVfSU4xUl9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAzCS8qIElOMVJfTU9ERSAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NV9JTjFSX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAJLyogSU4xUl9NT0RFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk1X0lOMVJfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMgkvKiBJTjFSX01PREUgLSBbMTowXSAqLworCisvKgorICogUjI0ICgweDE4KSAtIERBQzEgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTVfREFDMUxfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIERBQzFMX01VVEUgKi8KKyNkZWZpbmUgV004OTk1X0RBQzFMX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBEQUMxTF9NVVRFICovCisjZGVmaW5lIFdNODk5NV9EQUMxTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkJLyogREFDMUxfTVVURSAqLworI2RlZmluZSBXTTg5OTVfREFDMUxfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIERBQzFMX01VVEUgKi8KKyNkZWZpbmUgV004OTk1X0RBQzFfVlUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5NV9EQUMxX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTVfREFDMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4CS8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk1X0RBQzFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5NV9EQUMxTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkYJLyogREFDMUxfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X0RBQzFMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBEQUMxTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTVfREFDMUxfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4CS8qIERBQzFMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMjUgKDB4MTkpIC0gREFDMSBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTVfREFDMVJfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIERBQzFSX01VVEUgKi8KKyNkZWZpbmUgV004OTk1X0RBQzFSX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBEQUMxUl9NVVRFICovCisjZGVmaW5lIFdNODk5NV9EQUMxUl9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkJLyogREFDMVJfTVVURSAqLworI2RlZmluZSBXTTg5OTVfREFDMVJfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIERBQzFSX01VVEUgKi8KKyNkZWZpbmUgV004OTk1X0RBQzFfVlUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5NV9EQUMxX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTVfREFDMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4CS8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk1X0RBQzFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5NV9EQUMxUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkYJLyogREFDMVJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X0RBQzFSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBEQUMxUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTVfREFDMVJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4CS8qIERBQzFSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMjYgKDB4MUEpIC0gREFDMiBMZWZ0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NV9EQUMyTF9NVVRFICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAJLyogREFDMkxfTVVURSAqLworI2RlZmluZSBXTTg5OTVfREFDMkxfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIERBQzJMX01VVEUgKi8KKyNkZWZpbmUgV004OTk1X0RBQzJMX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOQkvKiBEQUMyTF9NVVRFICovCisjZGVmaW5lIFdNODk5NV9EQUMyTF9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEJLyogREFDMkxfTVVURSAqLworI2RlZmluZSBXTTg5OTVfREFDMl9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk1X0RBQzJfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NV9EQUMyX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDgJLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5OTVfREFDMl9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk1X0RBQzJMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRgkvKiBEQUMyTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTVfREFDMkxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwCS8qIERBQzJMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9EQUMyTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDgJLyogREFDMkxfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIyNyAoMHgxQikgLSBEQUMyIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NV9EQUMyUl9NVVRFICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAJLyogREFDMlJfTVVURSAqLworI2RlZmluZSBXTTg5OTVfREFDMlJfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIERBQzJSX01VVEUgKi8KKyNkZWZpbmUgV004OTk1X0RBQzJSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOQkvKiBEQUMyUl9NVVRFICovCisjZGVmaW5lIFdNODk5NV9EQUMyUl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEJLyogREFDMlJfTVVURSAqLworI2RlZmluZSBXTTg5OTVfREFDMl9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk1X0RBQzJfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NV9EQUMyX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDgJLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5OTVfREFDMl9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk1X0RBQzJSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRgkvKiBEQUMyUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTVfREFDMlJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwCS8qIERBQzJSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9EQUMyUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDgJLyogREFDMlJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIyOCAoMHgxQykgLSBPdXRwdXQgVm9sdW1lIFpDICgxKQorICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDJMX1pDICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgJLyogSFBPVVQyTF9aQyAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyTF9aQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA4CS8qIEhQT1VUMkxfWkMgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMkxfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMwkvKiBIUE9VVDJMX1pDICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDJMX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEJLyogSFBPVVQyTF9aQyAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyUl9aQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CS8qIEhQT1VUMlJfWkMgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMlJfWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwNAkvKiBIUE9VVDJSX1pDICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDJSX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDIJLyogSFBPVVQyUl9aQyAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyUl9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEhQT1VUMlJfWkMgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMUxfWkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBIUE9VVDFMX1pDICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDFMX1pDX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDIJLyogSFBPVVQxTF9aQyAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxTF9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEhQT1VUMUxfWkMgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMUxfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMQkvKiBIUE9VVDFMX1pDICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDFSX1pDICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogSFBPVVQxUl9aQyAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxUl9aQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIEhQT1VUMVJfWkMgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMVJfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMAkvKiBIUE9VVDFSX1pDICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDFSX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEJLyogSFBPVVQxUl9aQyAqLworCisvKgorICogUjMyICgweDIwKSAtIE1JQ0JJQVMgKDEpCisgKi8KKyNkZWZpbmUgV004OTk1X01JQ0IxX01PREUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBNSUNCMV9NT0RFICovCisjZGVmaW5lIFdNODk5NV9NSUNCMV9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDgJLyogTUlDQjFfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfTUlDQjFfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAzCS8qIE1JQ0IxX01PREUgKi8KKyNkZWZpbmUgV004OTk1X01JQ0IxX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMQkvKiBNSUNCMV9NT0RFICovCisjZGVmaW5lIFdNODk5NV9NSUNCMV9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDYJLyogTUlDQjFfTFZMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk1X01JQ0IxX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBNSUNCMV9MVkwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5OTVfTUlDQjFfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAyCS8qIE1JQ0IxX0xWTCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk5NV9NSUNCMV9ESVNDSCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogTUlDQjFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk1X01JQ0IxX0RJU0NIX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBNSUNCMV9ESVNDSCAqLworI2RlZmluZSBXTTg5OTVfTUlDQjFfRElTQ0hfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwCS8qIE1JQ0IxX0RJU0NIICovCisjZGVmaW5lIFdNODk5NV9NSUNCMV9ESVNDSF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogTUlDQjFfRElTQ0ggKi8KKworLyoKKyAqIFIzMyAoMHgyMSkgLSBNSUNCSUFTICgyKQorICovCisjZGVmaW5lIFdNODk5NV9NSUNCMl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgJLyogTUlDQjJfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfTUlDQjJfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA4CS8qIE1JQ0IyX01PREUgKi8KKyNkZWZpbmUgV004OTk1X01JQ0IyX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMwkvKiBNSUNCMl9NT0RFICovCisjZGVmaW5lIFdNODk5NV9NSUNCMl9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEJLyogTUlDQjJfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfTUlDQjJfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA2CS8qIE1JQ0IyX0xWTCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk5NV9NSUNCMl9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEJLyogTUlDQjJfTFZMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk1X01JQ0IyX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMgkvKiBNSUNCMl9MVkwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5OTVfTUlDQjJfRElTQ0ggICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIE1JQ0IyX0RJU0NIICovCisjZGVmaW5lIFdNODk5NV9NSUNCMl9ESVNDSF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEJLyogTUlDQjJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk1X01JQ0IyX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgICAgMAkvKiBNSUNCMl9ESVNDSCAqLworI2RlZmluZSBXTTg5OTVfTUlDQjJfRElTQ0hfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIE1JQ0IyX0RJU0NIICovCisKKy8qCisgKiBSNDAgKDB4MjgpIC0gTERPIDEKKyAqLworI2RlZmluZSBXTTg5OTVfTERPMV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCS8qIExETzFfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfTERPMV9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDIwCS8qIExETzFfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfTERPMV9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA1CS8qIExETzFfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfTERPMV9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxCS8qIExETzFfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfTERPMV9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA2CS8qIExETzFfVlNFTCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk5NV9MRE8xX1ZTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEJLyogTERPMV9WU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk1X0xETzFfVlNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMgkvKiBMRE8xX1ZTRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5OTVfTERPMV9ESVNDSCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIExETzFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk1X0xETzFfRElTQ0hfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBMRE8xX0RJU0NIICovCisjZGVmaW5lIFdNODk5NV9MRE8xX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAJLyogTERPMV9ESVNDSCAqLworI2RlZmluZSBXTTg5OTVfTERPMV9ESVNDSF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIExETzFfRElTQ0ggKi8KKworLyoKKyAqIFI0MSAoMHgyOSkgLSBMRE8gMgorICovCisjZGVmaW5lIFdNODk5NV9MRE8yX01PREUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAJLyogTERPMl9NT0RFICovCisjZGVmaW5lIFdNODk5NV9MRE8yX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMjAJLyogTERPMl9NT0RFICovCisjZGVmaW5lIFdNODk5NV9MRE8yX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUJLyogTERPMl9NT0RFICovCisjZGVmaW5lIFdNODk5NV9MRE8yX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEJLyogTERPMl9NT0RFICovCisjZGVmaW5lIFdNODk5NV9MRE8yX1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMUUJLyogTERPMl9WU0VMIC0gWzQ6MV0gKi8KKyNkZWZpbmUgV004OTk1X0xETzJfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBMRE8yX1ZTRUwgLSBbNDoxXSAqLworI2RlZmluZSBXTTg5OTVfTERPMl9WU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0CS8qIExETzJfVlNFTCAtIFs0OjFdICovCisjZGVmaW5lIFdNODk5NV9MRE8yX0RJU0NIICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogTERPMl9ESVNDSCAqLworI2RlZmluZSBXTTg5OTVfTERPMl9ESVNDSF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIExETzJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk1X0xETzJfRElTQ0hfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMAkvKiBMRE8yX0RJU0NIICovCisjZGVmaW5lIFdNODk5NV9MRE8yX0RJU0NIX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEJLyogTERPMl9ESVNDSCAqLworCisvKgorICogUjQ4ICgweDMwKSAtIEFjY2Vzc29yeSBEZXRlY3QgTW9kZTEKKyAqLworI2RlZmluZSBXTTg5OTVfSkRfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAzCS8qIEpEX01PREUgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTVfSkRfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwCS8qIEpEX01PREUgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTVfSkRfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAyCS8qIEpEX01PREUgLSBbMTowXSAqLworCisvKgorICogUjQ5ICgweDMxKSAtIEFjY2Vzc29yeSBEZXRlY3QgTW9kZTIKKyAqLworI2RlZmluZSBXTTg5OTVfVklEX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIFZJRF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X1ZJRF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBWSURfRU5BICovCisjZGVmaW5lIFdNODk5NV9WSURfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAJLyogVklEX0VOQSAqLworI2RlZmluZSBXTTg5OTVfVklEX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIFZJRF9FTkEgKi8KKworLyoKKyAqIFI1MiAoMHgzNCkgLSBIZWFkcGhvbmUgRGV0ZWN0MQorICovCisjZGVmaW5lIFdNODk5NV9IUF9SQU1QUkFURSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIJLyogSFBfUkFNUFJBVEUgKi8KKyNkZWZpbmUgV004OTk1X0hQX1JBTVBSQVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBIUF9SQU1QUkFURSAqLworI2RlZmluZSBXTTg5OTVfSFBfUkFNUFJBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxCS8qIEhQX1JBTVBSQVRFICovCisjZGVmaW5lIFdNODk5NV9IUF9SQU1QUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogSFBfUkFNUFJBVEUgKi8KKyNkZWZpbmUgV004OTk1X0hQX1BPTEwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBIUF9QT0xMICovCisjZGVmaW5lIFdNODk5NV9IUF9QT0xMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogSFBfUE9MTCAqLworI2RlZmluZSBXTTg5OTVfSFBfUE9MTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwCS8qIEhQX1BPTEwgKi8KKyNkZWZpbmUgV004OTk1X0hQX1BPTExfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBIUF9QT0xMICovCisKKy8qCisgKiBSNTMgKDB4MzUpIC0gSGVhZHBob25lIERldGVjdDIKKyAqLworI2RlZmluZSBXTTg5OTVfSFBfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCS8qIEhQX0RPTkUgKi8KKyNkZWZpbmUgV004OTk1X0hQX0RPTkVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAkvKiBIUF9ET05FICovCisjZGVmaW5lIFdNODk5NV9IUF9ET05FX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDcJLyogSFBfRE9ORSAqLworI2RlZmluZSBXTTg5OTVfSFBfRE9ORV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEhQX0RPTkUgKi8KKyNkZWZpbmUgV004OTk1X0hQX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA3RgkvKiBIUF9MVkwgLSBbNjowXSAqLworI2RlZmluZSBXTTg5OTVfSFBfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwCS8qIEhQX0xWTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk5NV9IUF9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDcJLyogSFBfTFZMIC0gWzY6MF0gKi8KKworLyoKKyAqIFI1NiAoMHgzOCkgLSBNaWMgRGV0ZWN0ICgxKQorICovCisjZGVmaW5lIFdNODk5NV9NSUNEX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgICAweDc4MDAJLyogTUlDRF9SQVRFIC0gWzE0OjExXSAqLworI2RlZmluZSBXTTg5OTVfTUlDRF9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDExCS8qIE1JQ0RfUkFURSAtIFsxNDoxMV0gKi8KKyNkZWZpbmUgV004OTk1X01JQ0RfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNAkvKiBNSUNEX1JBVEUgLSBbMTQ6MTFdICovCisjZGVmaW5lIFdNODk5NV9NSUNEX0xWTF9TRUxfTUFTSyAgICAgICAgICAgICAgICAweDAxRjgJLyogTUlDRF9MVkxfU0VMIC0gWzg6M10gKi8KKyNkZWZpbmUgV004OTk1X01JQ0RfTFZMX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMwkvKiBNSUNEX0xWTF9TRUwgLSBbODozXSAqLworI2RlZmluZSBXTTg5OTVfTUlDRF9MVkxfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICA2CS8qIE1JQ0RfTFZMX1NFTCAtIFs4OjNdICovCisjZGVmaW5lIFdNODk5NV9NSUNEX0RCVElNRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIJLyogTUlDRF9EQlRJTUUgKi8KKyNkZWZpbmUgV004OTk1X01JQ0RfREJUSU1FX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBNSUNEX0RCVElNRSAqLworI2RlZmluZSBXTTg5OTVfTUlDRF9EQlRJTUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxCS8qIE1JQ0RfREJUSU1FICovCisjZGVmaW5lIFdNODk5NV9NSUNEX0RCVElNRV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogTUlDRF9EQlRJTUUgKi8KKyNkZWZpbmUgV004OTk1X01JQ0RfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBNSUNEX0VOQSAqLworI2RlZmluZSBXTTg5OTVfTUlDRF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIE1JQ0RfRU5BICovCisjZGVmaW5lIFdNODk5NV9NSUNEX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAJLyogTUlDRF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X01JQ0RfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBNSUNEX0VOQSAqLworCisvKgorICogUjU3ICgweDM5KSAtIE1pYyBEZXRlY3QgKDIpCisgKi8KKyNkZWZpbmUgV004OTk1X01JQ0RfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDFGQwkvKiBNSUNEX0xWTCAtIFs4OjJdICovCisjZGVmaW5lIFdNODk5NV9NSUNEX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIJLyogTUlDRF9MVkwgLSBbODoyXSAqLworI2RlZmluZSBXTTg5OTVfTUlDRF9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA3CS8qIE1JQ0RfTFZMIC0gWzg6Ml0gKi8KKyNkZWZpbmUgV004OTk1X01JQ0RfVkFMSUQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBNSUNEX1ZBTElEICovCisjZGVmaW5lIFdNODk5NV9NSUNEX1ZBTElEX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDIJLyogTUlDRF9WQUxJRCAqLworI2RlZmluZSBXTTg5OTVfTUlDRF9WQUxJRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxCS8qIE1JQ0RfVkFMSUQgKi8KKyNkZWZpbmUgV004OTk1X01JQ0RfVkFMSURfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMQkvKiBNSUNEX1ZBTElEICovCisjZGVmaW5lIFdNODk5NV9NSUNEX1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogTUlDRF9TVFMgKi8KKyNkZWZpbmUgV004OTk1X01JQ0RfU1RTX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBNSUNEX1NUUyAqLworI2RlZmluZSBXTTg5OTVfTUlDRF9TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCS8qIE1JQ0RfU1RTICovCisjZGVmaW5lIFdNODk5NV9NSUNEX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogTUlDRF9TVFMgKi8KKworLyoKKyAqIFI2NCAoMHg0MCkgLSBDaGFyZ2UgUHVtcCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTVfQ1BfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCS8qIENQX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQ1BfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCS8qIENQX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQ1BfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE1CS8qIENQX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQ1BfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIENQX0VOQSAqLworCisvKgorICogUjY5ICgweDQ1KSAtIENsYXNzIFcgKDEpCisgKi8KKyNkZWZpbmUgV004OTk1X0NQX0RZTl9TUkNfU0VMX01BU0sgICAgICAgICAgICAgIDB4MDMwMAkvKiBDUF9EWU5fU1JDX1NFTCAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5NV9DUF9EWU5fU1JDX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgIDgJLyogQ1BfRFlOX1NSQ19TRUwgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTVfQ1BfRFlOX1NSQ19TRUxfV0lEVEggICAgICAgICAgICAgICAgICAyCS8qIENQX0RZTl9TUkNfU0VMIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk1X0NQX0RZTl9QV1IgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBDUF9EWU5fUFdSICovCisjZGVmaW5lIFdNODk5NV9DUF9EWU5fUFdSX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEJLyogQ1BfRFlOX1BXUiAqLworI2RlZmluZSBXTTg5OTVfQ1BfRFlOX1BXUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwCS8qIENQX0RZTl9QV1IgKi8KKyNkZWZpbmUgV004OTk1X0NQX0RZTl9QV1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMQkvKiBDUF9EWU5fUFdSICovCisKKy8qCisgKiBSODAgKDB4NTApIC0gREMgU2Vydm8gKDEpCisgKi8KKyNkZWZpbmUgV004OTk1X0RDU19FTkFfQ0hBTl8zICAgICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBEQ1NfRU5BX0NIQU5fMyAqLworI2RlZmluZSBXTTg5OTVfRENTX0VOQV9DSEFOXzNfTUFTSyAgICAgICAgICAgICAgMHgwMDA4CS8qIERDU19FTkFfQ0hBTl8zICovCisjZGVmaW5lIFdNODk5NV9EQ1NfRU5BX0NIQU5fM19TSElGVCAgICAgICAgICAgICAgICAgIDMJLyogRENTX0VOQV9DSEFOXzMgKi8KKyNkZWZpbmUgV004OTk1X0RDU19FTkFfQ0hBTl8zX1dJRFRIICAgICAgICAgICAgICAgICAgMQkvKiBEQ1NfRU5BX0NIQU5fMyAqLworI2RlZmluZSBXTTg5OTVfRENTX0VOQV9DSEFOXzIgICAgICAgICAgICAgICAgICAgMHgwMDA0CS8qIERDU19FTkFfQ0hBTl8yICovCisjZGVmaW5lIFdNODk5NV9EQ1NfRU5BX0NIQU5fMl9NQVNLICAgICAgICAgICAgICAweDAwMDQJLyogRENTX0VOQV9DSEFOXzIgKi8KKyNkZWZpbmUgV004OTk1X0RDU19FTkFfQ0hBTl8yX1NISUZUICAgICAgICAgICAgICAgICAgMgkvKiBEQ1NfRU5BX0NIQU5fMiAqLworI2RlZmluZSBXTTg5OTVfRENTX0VOQV9DSEFOXzJfV0lEVEggICAgICAgICAgICAgICAgICAxCS8qIERDU19FTkFfQ0hBTl8yICovCisjZGVmaW5lIFdNODk5NV9EQ1NfRU5BX0NIQU5fMSAgICAgICAgICAgICAgICAgICAweDAwMDIJLyogRENTX0VOQV9DSEFOXzEgKi8KKyNkZWZpbmUgV004OTk1X0RDU19FTkFfQ0hBTl8xX01BU0sgICAgICAgICAgICAgIDB4MDAwMgkvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5OTVfRENTX0VOQV9DSEFOXzFfU0hJRlQgICAgICAgICAgICAgICAgICAxCS8qIERDU19FTkFfQ0hBTl8xICovCisjZGVmaW5lIFdNODk5NV9EQ1NfRU5BX0NIQU5fMV9XSURUSCAgICAgICAgICAgICAgICAgIDEJLyogRENTX0VOQV9DSEFOXzEgKi8KKyNkZWZpbmUgV004OTk1X0RDU19FTkFfQ0hBTl8wICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5OTVfRENTX0VOQV9DSEFOXzBfTUFTSyAgICAgICAgICAgICAgMHgwMDAxCS8qIERDU19FTkFfQ0hBTl8wICovCisjZGVmaW5lIFdNODk5NV9EQ1NfRU5BX0NIQU5fMF9TSElGVCAgICAgICAgICAgICAgICAgIDAJLyogRENTX0VOQV9DSEFOXzAgKi8KKyNkZWZpbmUgV004OTk1X0RDU19FTkFfQ0hBTl8wX1dJRFRIICAgICAgICAgICAgICAgICAgMQkvKiBEQ1NfRU5BX0NIQU5fMCAqLworCisvKgorICogUjgxICgweDUxKSAtIERDIFNlcnZvICgyKQorICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19TSU5HTEVfMyAgICAgICAgICAgICAgICAweDgwMDAJLyogRENTX1RSSUdfU0lOR0xFXzMgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX1NJTkdMRV8zX01BU0sgICAgICAgICAgIDB4ODAwMAkvKiBEQ1NfVFJJR19TSU5HTEVfMyAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU0lOR0xFXzNfU0hJRlQgICAgICAgICAgICAgIDE1CS8qIERDU19UUklHX1NJTkdMRV8zICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19TSU5HTEVfM19XSURUSCAgICAgICAgICAgICAgIDEJLyogRENTX1RSSUdfU0lOR0xFXzMgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX1NJTkdMRV8yICAgICAgICAgICAgICAgIDB4NDAwMAkvKiBEQ1NfVFJJR19TSU5HTEVfMiAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU0lOR0xFXzJfTUFTSyAgICAgICAgICAgMHg0MDAwCS8qIERDU19UUklHX1NJTkdMRV8yICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19TSU5HTEVfMl9TSElGVCAgICAgICAgICAgICAgMTQJLyogRENTX1RSSUdfU0lOR0xFXzIgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX1NJTkdMRV8yX1dJRFRIICAgICAgICAgICAgICAgMQkvKiBEQ1NfVFJJR19TSU5HTEVfMiAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU0lOR0xFXzEgICAgICAgICAgICAgICAgMHgyMDAwCS8qIERDU19UUklHX1NJTkdMRV8xICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19TSU5HTEVfMV9NQVNLICAgICAgICAgICAweDIwMDAJLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX1NJTkdMRV8xX1NISUZUICAgICAgICAgICAgICAxMwkvKiBEQ1NfVFJJR19TSU5HTEVfMSAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU0lOR0xFXzFfV0lEVEggICAgICAgICAgICAgICAxCS8qIERDU19UUklHX1NJTkdMRV8xICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19TSU5HTEVfMCAgICAgICAgICAgICAgICAweDEwMDAJLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX1NJTkdMRV8wX01BU0sgICAgICAgICAgIDB4MTAwMAkvKiBEQ1NfVFJJR19TSU5HTEVfMCAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU0lOR0xFXzBfU0hJRlQgICAgICAgICAgICAgIDEyCS8qIERDU19UUklHX1NJTkdMRV8wICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19TSU5HTEVfMF9XSURUSCAgICAgICAgICAgICAgIDEJLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX1NFUklFU18zICAgICAgICAgICAgICAgIDB4MDgwMAkvKiBEQ1NfVFJJR19TRVJJRVNfMyAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU0VSSUVTXzNfTUFTSyAgICAgICAgICAgMHgwODAwCS8qIERDU19UUklHX1NFUklFU18zICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19TRVJJRVNfM19TSElGVCAgICAgICAgICAgICAgMTEJLyogRENTX1RSSUdfU0VSSUVTXzMgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX1NFUklFU18zX1dJRFRIICAgICAgICAgICAgICAgMQkvKiBEQ1NfVFJJR19TRVJJRVNfMyAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU0VSSUVTXzIgICAgICAgICAgICAgICAgMHgwNDAwCS8qIERDU19UUklHX1NFUklFU18yICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19TRVJJRVNfMl9NQVNLICAgICAgICAgICAweDA0MDAJLyogRENTX1RSSUdfU0VSSUVTXzIgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX1NFUklFU18yX1NISUZUICAgICAgICAgICAgICAxMAkvKiBEQ1NfVFJJR19TRVJJRVNfMiAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU0VSSUVTXzJfV0lEVEggICAgICAgICAgICAgICAxCS8qIERDU19UUklHX1NFUklFU18yICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19TRVJJRVNfMSAgICAgICAgICAgICAgICAweDAyMDAJLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX1NFUklFU18xX01BU0sgICAgICAgICAgIDB4MDIwMAkvKiBEQ1NfVFJJR19TRVJJRVNfMSAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU0VSSUVTXzFfU0hJRlQgICAgICAgICAgICAgICA5CS8qIERDU19UUklHX1NFUklFU18xICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19TRVJJRVNfMV9XSURUSCAgICAgICAgICAgICAgIDEJLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX1NFUklFU18wICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBEQ1NfVFJJR19TRVJJRVNfMCAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU0VSSUVTXzBfTUFTSyAgICAgICAgICAgMHgwMTAwCS8qIERDU19UUklHX1NFUklFU18wICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19TRVJJRVNfMF9TSElGVCAgICAgICAgICAgICAgIDgJLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX1NFUklFU18wX1dJRFRIICAgICAgICAgICAgICAgMQkvKiBEQ1NfVFJJR19TRVJJRVNfMCAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8zICAgICAgICAgICAgICAgMHgwMDgwCS8qIERDU19UUklHX1NUQVJUVVBfMyAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8zX01BU0sgICAgICAgICAgMHgwMDgwCS8qIERDU19UUklHX1NUQVJUVVBfMyAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8zX1NISUZUICAgICAgICAgICAgICA3CS8qIERDU19UUklHX1NUQVJUVVBfMyAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8zX1dJRFRIICAgICAgICAgICAgICAxCS8qIERDU19UUklHX1NUQVJUVVBfMyAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8yICAgICAgICAgICAgICAgMHgwMDQwCS8qIERDU19UUklHX1NUQVJUVVBfMiAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8yX01BU0sgICAgICAgICAgMHgwMDQwCS8qIERDU19UUklHX1NUQVJUVVBfMiAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8yX1NISUZUICAgICAgICAgICAgICA2CS8qIERDU19UUklHX1NUQVJUVVBfMiAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8yX1dJRFRIICAgICAgICAgICAgICAxCS8qIERDU19UUklHX1NUQVJUVVBfMiAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8xICAgICAgICAgICAgICAgMHgwMDIwCS8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8xX01BU0sgICAgICAgICAgMHgwMDIwCS8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8xX1NISUZUICAgICAgICAgICAgICA1CS8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8xX1dJRFRIICAgICAgICAgICAgICAxCS8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8wICAgICAgICAgICAgICAgMHgwMDEwCS8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8wX01BU0sgICAgICAgICAgMHgwMDEwCS8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8wX1NISUZUICAgICAgICAgICAgICA0CS8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfU1RBUlRVUF8wX1dJRFRIICAgICAgICAgICAgICAxCS8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfREFDX1dSXzMgICAgICAgICAgICAgICAgMHgwMDA4CS8qIERDU19UUklHX0RBQ19XUl8zICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19EQUNfV1JfM19NQVNLICAgICAgICAgICAweDAwMDgJLyogRENTX1RSSUdfREFDX1dSXzMgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX0RBQ19XUl8zX1NISUZUICAgICAgICAgICAgICAgMwkvKiBEQ1NfVFJJR19EQUNfV1JfMyAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfREFDX1dSXzNfV0lEVEggICAgICAgICAgICAgICAxCS8qIERDU19UUklHX0RBQ19XUl8zICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19EQUNfV1JfMiAgICAgICAgICAgICAgICAweDAwMDQJLyogRENTX1RSSUdfREFDX1dSXzIgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX0RBQ19XUl8yX01BU0sgICAgICAgICAgIDB4MDAwNAkvKiBEQ1NfVFJJR19EQUNfV1JfMiAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfREFDX1dSXzJfU0hJRlQgICAgICAgICAgICAgICAyCS8qIERDU19UUklHX0RBQ19XUl8yICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19EQUNfV1JfMl9XSURUSCAgICAgICAgICAgICAgIDEJLyogRENTX1RSSUdfREFDX1dSXzIgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX0RBQ19XUl8xICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfREFDX1dSXzFfTUFTSyAgICAgICAgICAgMHgwMDAyCS8qIERDU19UUklHX0RBQ19XUl8xICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19EQUNfV1JfMV9TSElGVCAgICAgICAgICAgICAgIDEJLyogRENTX1RSSUdfREFDX1dSXzEgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX0RBQ19XUl8xX1dJRFRIICAgICAgICAgICAgICAgMQkvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfREFDX1dSXzAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIERDU19UUklHX0RBQ19XUl8wICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVFJJR19EQUNfV1JfMF9NQVNLICAgICAgICAgICAweDAwMDEJLyogRENTX1RSSUdfREFDX1dSXzAgKi8KKyNkZWZpbmUgV004OTk1X0RDU19UUklHX0RBQ19XUl8wX1NISUZUICAgICAgICAgICAgICAgMAkvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5OTVfRENTX1RSSUdfREFDX1dSXzBfV0lEVEggICAgICAgICAgICAgICAxCS8qIERDU19UUklHX0RBQ19XUl8wICovCisKKy8qCisgKiBSODIgKDB4NTIpIC0gREMgU2Vydm8gKDMpCisgKi8KKyNkZWZpbmUgV004OTk1X0RDU19USU1FUl9QRVJJT0RfMjNfTUFTSyAgICAgICAgIDB4MEYwMAkvKiBEQ1NfVElNRVJfUEVSSU9EXzIzIC0gWzExOjhdICovCisjZGVmaW5lIFdNODk5NV9EQ1NfVElNRVJfUEVSSU9EXzIzX1NISUZUICAgICAgICAgICAgIDgJLyogRENTX1RJTUVSX1BFUklPRF8yMyAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5OTVfRENTX1RJTUVSX1BFUklPRF8yM19XSURUSCAgICAgICAgICAgICA0CS8qIERDU19USU1FUl9QRVJJT0RfMjMgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTk1X0RDU19USU1FUl9QRVJJT0RfMDFfTUFTSyAgICAgICAgIDB4MDAwRgkvKiBEQ1NfVElNRVJfUEVSSU9EXzAxIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk1X0RDU19USU1FUl9QRVJJT0RfMDFfU0hJRlQgICAgICAgICAgICAgMAkvKiBEQ1NfVElNRVJfUEVSSU9EXzAxIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk1X0RDU19USU1FUl9QRVJJT0RfMDFfV0lEVEggICAgICAgICAgICAgNAkvKiBEQ1NfVElNRVJfUEVSSU9EXzAxIC0gWzM6MF0gKi8KKworLyoKKyAqIFI4NCAoMHg1NCkgLSBEQyBTZXJ2byAoNSkKKyAqLworI2RlZmluZSBXTTg5OTVfRENTX1NFUklFU19OT18yM19NQVNLICAgICAgICAgICAgMHg3RjAwCS8qIERDU19TRVJJRVNfTk9fMjMgLSBbMTQ6OF0gKi8KKyNkZWZpbmUgV004OTk1X0RDU19TRVJJRVNfTk9fMjNfU0hJRlQgICAgICAgICAgICAgICAgOAkvKiBEQ1NfU0VSSUVTX05PXzIzIC0gWzE0OjhdICovCisjZGVmaW5lIFdNODk5NV9EQ1NfU0VSSUVTX05PXzIzX1dJRFRIICAgICAgICAgICAgICAgIDcJLyogRENTX1NFUklFU19OT18yMyAtIFsxNDo4XSAqLworI2RlZmluZSBXTTg5OTVfRENTX1NFUklFU19OT18wMV9NQVNLICAgICAgICAgICAgMHgwMDdGCS8qIERDU19TRVJJRVNfTk9fMDEgLSBbNjowXSAqLworI2RlZmluZSBXTTg5OTVfRENTX1NFUklFU19OT18wMV9TSElGVCAgICAgICAgICAgICAgICAwCS8qIERDU19TRVJJRVNfTk9fMDEgLSBbNjowXSAqLworI2RlZmluZSBXTTg5OTVfRENTX1NFUklFU19OT18wMV9XSURUSCAgICAgICAgICAgICAgICA3CS8qIERDU19TRVJJRVNfTk9fMDEgLSBbNjowXSAqLworCisvKgorICogUjg1ICgweDU1KSAtIERDIFNlcnZvICg2KQorICovCisjZGVmaW5lIFdNODk5NV9EQ1NfREFDX1dSX1ZBTF8zX01BU0sgICAgICAgICAgICAweEZGMDAJLyogRENTX0RBQ19XUl9WQUxfMyAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5OTVfRENTX0RBQ19XUl9WQUxfM19TSElGVCAgICAgICAgICAgICAgICA4CS8qIERDU19EQUNfV1JfVkFMXzMgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTk1X0RDU19EQUNfV1JfVkFMXzNfV0lEVEggICAgICAgICAgICAgICAgOAkvKiBEQ1NfREFDX1dSX1ZBTF8zIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODk5NV9EQ1NfREFDX1dSX1ZBTF8yX01BU0sgICAgICAgICAgICAweDAwRkYJLyogRENTX0RBQ19XUl9WQUxfMiAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9EQ1NfREFDX1dSX1ZBTF8yX1NISUZUICAgICAgICAgICAgICAgIDAJLyogRENTX0RBQ19XUl9WQUxfMiAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9EQ1NfREFDX1dSX1ZBTF8yX1dJRFRIICAgICAgICAgICAgICAgIDgJLyogRENTX0RBQ19XUl9WQUxfMiAtIFs3OjBdICovCisKKy8qCisgKiBSODYgKDB4NTYpIC0gREMgU2Vydm8gKDcpCisgKi8KKyNkZWZpbmUgV004OTk1X0RDU19EQUNfV1JfVkFMXzFfTUFTSyAgICAgICAgICAgIDB4RkYwMAkvKiBEQ1NfREFDX1dSX1ZBTF8xIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODk5NV9EQ1NfREFDX1dSX1ZBTF8xX1NISUZUICAgICAgICAgICAgICAgIDgJLyogRENTX0RBQ19XUl9WQUxfMSAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5OTVfRENTX0RBQ19XUl9WQUxfMV9XSURUSCAgICAgICAgICAgICAgICA4CS8qIERDU19EQUNfV1JfVkFMXzEgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTk1X0RDU19EQUNfV1JfVkFMXzBfTUFTSyAgICAgICAgICAgIDB4MDBGRgkvKiBEQ1NfREFDX1dSX1ZBTF8wIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X0RDU19EQUNfV1JfVkFMXzBfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBEQ1NfREFDX1dSX1ZBTF8wIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X0RDU19EQUNfV1JfVkFMXzBfV0lEVEggICAgICAgICAgICAgICAgOAkvKiBEQ1NfREFDX1dSX1ZBTF8wIC0gWzc6MF0gKi8KKworLyoKKyAqIFI4NyAoMHg1NykgLSBEQyBTZXJ2byBSZWFkYmFjayAwCisgKi8KKyNkZWZpbmUgV004OTk1X0RDU19DQUxfQ09NUExFVEVfTUFTSyAgICAgICAgICAgIDB4MEYwMAkvKiBEQ1NfQ0FMX0NPTVBMRVRFIC0gWzExOjhdICovCisjZGVmaW5lIFdNODk5NV9EQ1NfQ0FMX0NPTVBMRVRFX1NISUZUICAgICAgICAgICAgICAgIDgJLyogRENTX0NBTF9DT01QTEVURSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5OTVfRENTX0NBTF9DT01QTEVURV9XSURUSCAgICAgICAgICAgICAgICA0CS8qIERDU19DQUxfQ09NUExFVEUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTk1X0RDU19EQUNfV1JfQ09NUExFVEVfTUFTSyAgICAgICAgIDB4MDBGMAkvKiBEQ1NfREFDX1dSX0NPTVBMRVRFIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk1X0RDU19EQUNfV1JfQ09NUExFVEVfU0hJRlQgICAgICAgICAgICAgNAkvKiBEQ1NfREFDX1dSX0NPTVBMRVRFIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk1X0RDU19EQUNfV1JfQ09NUExFVEVfV0lEVEggICAgICAgICAgICAgNAkvKiBEQ1NfREFDX1dSX0NPTVBMRVRFIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk1X0RDU19TVEFSVFVQX0NPTVBMRVRFX01BU0sgICAgICAgIDB4MDAwRgkvKiBEQ1NfU1RBUlRVUF9DT01QTEVURSAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NV9EQ1NfU1RBUlRVUF9DT01QTEVURV9TSElGVCAgICAgICAgICAgIDAJLyogRENTX1NUQVJUVVBfQ09NUExFVEUgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTVfRENTX1NUQVJUVVBfQ09NUExFVEVfV0lEVEggICAgICAgICAgICA0CS8qIERDU19TVEFSVFVQX0NPTVBMRVRFIC0gWzM6MF0gKi8KKworLyoKKyAqIFI5NiAoMHg2MCkgLSBBbmFsb2d1ZSBIUCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxTF9STVZfU0hPUlQgICAgICAgICAgICAgICAgMHgwMDgwCS8qIEhQT1VUMUxfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDFMX1JNVl9TSE9SVF9NQVNLICAgICAgICAgICAweDAwODAJLyogSFBPVVQxTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMUxfUk1WX1NIT1JUX1NISUZUICAgICAgICAgICAgICAgNwkvKiBIUE9VVDFMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxTF9STVZfU0hPUlRfV0lEVEggICAgICAgICAgICAgICAxCS8qIEhQT1VUMUxfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDFMX09VVFAgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogSFBPVVQxTF9PVVRQICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDFMX09VVFBfTUFTSyAgICAgICAgICAgICAgICAweDAwNDAJLyogSFBPVVQxTF9PVVRQICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDFMX09VVFBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDYJLyogSFBPVVQxTF9PVVRQICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDFMX09VVFBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEJLyogSFBPVVQxTF9PVVRQICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDFMX0RMWSAgICAgICAgICAgICAgICAgICAgICAweDAwMjAJLyogSFBPVVQxTF9ETFkgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMUxfRExZX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMAkvKiBIUE9VVDFMX0RMWSAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxTF9ETFlfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1CS8qIEhQT1VUMUxfRExZICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDFMX0RMWV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogSFBPVVQxTF9ETFkgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMVJfUk1WX1NIT1JUICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBIUE9VVDFSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxUl9STVZfU0hPUlRfTUFTSyAgICAgICAgICAgMHgwMDA4CS8qIEhQT1VUMVJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDFSX1JNVl9TSE9SVF9TSElGVCAgICAgICAgICAgICAgIDMJLyogSFBPVVQxUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMVJfUk1WX1NIT1JUX1dJRFRIICAgICAgICAgICAgICAgMQkvKiBIUE9VVDFSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxUl9PVVRQICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CS8qIEhQT1VUMVJfT1VUUCAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxUl9PVVRQX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0CS8qIEhQT1VUMVJfT1VUUCAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxUl9PVVRQX1NISUZUICAgICAgICAgICAgICAgICAgICAyCS8qIEhQT1VUMVJfT1VUUCAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxUl9PVVRQX1dJRFRIICAgICAgICAgICAgICAgICAgICAxCS8qIEhQT1VUMVJfT1VUUCAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxUl9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIEhQT1VUMVJfRExZICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDFSX0RMWV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIJLyogSFBPVVQxUl9ETFkgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMVJfRExZX1NISUZUICAgICAgICAgICAgICAgICAgICAgMQkvKiBIUE9VVDFSX0RMWSAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQxUl9ETFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIEhQT1VUMVJfRExZICovCisKKy8qCisgKiBSOTcgKDB4NjEpIC0gQW5hbG9ndWUgSFAgKDIpCisgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMkxfUk1WX1NIT1JUICAgICAgICAgICAgICAgIDB4MDA4MAkvKiBIUE9VVDJMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyTF9STVZfU0hPUlRfTUFTSyAgICAgICAgICAgMHgwMDgwCS8qIEhQT1VUMkxfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDJMX1JNVl9TSE9SVF9TSElGVCAgICAgICAgICAgICAgIDcJLyogSFBPVVQyTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMkxfUk1WX1NIT1JUX1dJRFRIICAgICAgICAgICAgICAgMQkvKiBIUE9VVDJMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyTF9PVVRQICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCS8qIEhQT1VUMkxfT1VUUCAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyTF9PVVRQX01BU0sgICAgICAgICAgICAgICAgMHgwMDQwCS8qIEhQT1VUMkxfT1VUUCAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyTF9PVVRQX1NISUZUICAgICAgICAgICAgICAgICAgICA2CS8qIEhQT1VUMkxfT1VUUCAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyTF9PVVRQX1dJRFRIICAgICAgICAgICAgICAgICAgICAxCS8qIEhQT1VUMkxfT1VUUCAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyTF9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCS8qIEhQT1VUMkxfRExZICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDJMX0RMWV9NQVNLICAgICAgICAgICAgICAgICAweDAwMjAJLyogSFBPVVQyTF9ETFkgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMkxfRExZX1NISUZUICAgICAgICAgICAgICAgICAgICAgNQkvKiBIUE9VVDJMX0RMWSAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyTF9ETFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIEhQT1VUMkxfRExZICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDJSX1JNVl9TSE9SVCAgICAgICAgICAgICAgICAweDAwMDgJLyogSFBPVVQyUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMlJfUk1WX1NIT1JUX01BU0sgICAgICAgICAgIDB4MDAwOAkvKiBIUE9VVDJSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyUl9STVZfU0hPUlRfU0hJRlQgICAgICAgICAgICAgICAzCS8qIEhQT1VUMlJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDJSX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgIDEJLyogSFBPVVQyUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMlJfT1VUUCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAkvKiBIUE9VVDJSX09VVFAgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMlJfT1VUUF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNAkvKiBIUE9VVDJSX09VVFAgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMlJfT1VUUF9TSElGVCAgICAgICAgICAgICAgICAgICAgMgkvKiBIUE9VVDJSX09VVFAgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMlJfT1VUUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBIUE9VVDJSX09VVFAgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMlJfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBIUE9VVDJSX0RMWSAqLworI2RlZmluZSBXTTg5OTVfSFBPVVQyUl9ETFlfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIEhQT1VUMlJfRExZICovCisjZGVmaW5lIFdNODk5NV9IUE9VVDJSX0RMWV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEJLyogSFBPVVQyUl9ETFkgKi8KKyNkZWZpbmUgV004OTk1X0hQT1VUMlJfRExZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMQkvKiBIUE9VVDJSX0RMWSAqLworCisvKgorICogUjI1NiAoMHgxMDApIC0gQ2hpcCBSZXZpc2lvbgorICovCisjZGVmaW5lIFdNODk5NV9DSElQX1JFVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEYJLyogQ0hJUF9SRVYgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTVfQ0hJUF9SRVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCS8qIENISVBfUkVWIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk1X0NISVBfUkVWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNAkvKiBDSElQX1JFViAtIFszOjBdICovCisKKy8qCisgKiBSMjU3ICgweDEwMSkgLSBDb250cm9sIEludGVyZmFjZSAoMSkKKyAqLworI2RlZmluZSBXTTg5OTVfUkVHX1NZTkMgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCS8qIFJFR19TWU5DICovCisjZGVmaW5lIFdNODk5NV9SRUdfU1lOQ19NQVNLICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogUkVHX1NZTkMgKi8KKyNkZWZpbmUgV004OTk1X1JFR19TWU5DX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNQkvKiBSRUdfU1lOQyAqLworI2RlZmluZSBXTTg5OTVfUkVHX1NZTkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIFJFR19TWU5DICovCisjZGVmaW5lIFdNODk5NV9TUElfQ09OVFJEICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogU1BJX0NPTlRSRCAqLworI2RlZmluZSBXTTg5OTVfU1BJX0NPTlRSRF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDQwCS8qIFNQSV9DT05UUkQgKi8KKyNkZWZpbmUgV004OTk1X1NQSV9DT05UUkRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNgkvKiBTUElfQ09OVFJEICovCisjZGVmaW5lIFdNODk5NV9TUElfQ09OVFJEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEJLyogU1BJX0NPTlRSRCAqLworI2RlZmluZSBXTTg5OTVfU1BJXzRXSVJFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCS8qIFNQSV80V0lSRSAqLworI2RlZmluZSBXTTg5OTVfU1BJXzRXSVJFX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDIwCS8qIFNQSV80V0lSRSAqLworI2RlZmluZSBXTTg5OTVfU1BJXzRXSVJFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA1CS8qIFNQSV80V0lSRSAqLworI2RlZmluZSBXTTg5OTVfU1BJXzRXSVJFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxCS8qIFNQSV80V0lSRSAqLworI2RlZmluZSBXTTg5OTVfU1BJX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCS8qIFNQSV9DRkcgKi8KKyNkZWZpbmUgV004OTk1X1NQSV9DRkdfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBTUElfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9TUElfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDQJLyogU1BJX0NGRyAqLworI2RlZmluZSBXTTg5OTVfU1BJX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIFNQSV9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0FVVE9fSU5DICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAkvKiBBVVRPX0lOQyAqLworI2RlZmluZSBXTTg5OTVfQVVUT19JTkNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA0CS8qIEFVVE9fSU5DICovCisjZGVmaW5lIFdNODk5NV9BVVRPX0lOQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIJLyogQVVUT19JTkMgKi8KKyNkZWZpbmUgV004OTk1X0FVVE9fSU5DX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBBVVRPX0lOQyAqLworCisvKgorICogUjI1OCAoMHgxMDIpIC0gQ29udHJvbCBJbnRlcmZhY2UgKDIpCisgKi8KKyNkZWZpbmUgV004OTk1X0NUUkxfSUZfU1JDICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBDVFJMX0lGX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQ1RSTF9JRl9TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIENUUkxfSUZfU1JDICovCisjZGVmaW5lIFdNODk5NV9DVFJMX0lGX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgIDAJLyogQ1RSTF9JRl9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0NUUkxfSUZfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMQkvKiBDVFJMX0lGX1NSQyAqLworCisvKgorICogUjI3MiAoMHgxMTApIC0gV3JpdGUgU2VxdWVuY2VyIEN0cmwgKDEpCisgKi8KKyNkZWZpbmUgV004OTk1X1dTRVFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBXU0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTVfV1NFUV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwCS8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODk5NV9XU0VRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTUJLyogV1NFUV9FTkEgKi8KKyNkZWZpbmUgV004OTk1X1dTRVFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBXU0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTVfV1NFUV9BQk9SVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTk1X1dTRVFfQUJPUlRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBXU0VRX0FCT1JUICovCisjZGVmaW5lIFdNODk5NV9XU0VRX0FCT1JUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkJLyogV1NFUV9BQk9SVCAqLworI2RlZmluZSBXTTg5OTVfV1NFUV9BQk9SVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTk1X1dTRVFfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODk5NV9XU0VRX1NUQVJUX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAJLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5OTVfV1NFUV9TVEFSVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4CS8qIFdTRVFfU1RBUlQgKi8KKyNkZWZpbmUgV004OTk1X1dTRVFfU1RBUlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMQkvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODk5NV9XU0VRX1NUQVJUX0lOREVYX01BU0sgICAgICAgICAgICAweDAwN0YJLyogV1NFUV9TVEFSVF9JTkRFWCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk5NV9XU0VRX1NUQVJUX0lOREVYX1NISUZUICAgICAgICAgICAgICAgIDAJLyogV1NFUV9TVEFSVF9JTkRFWCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk5NV9XU0VRX1NUQVJUX0lOREVYX1dJRFRIICAgICAgICAgICAgICAgIDcJLyogV1NFUV9TVEFSVF9JTkRFWCAtIFs2OjBdICovCisKKy8qCisgKiBSMjczICgweDExMSkgLSBXcml0ZSBTZXF1ZW5jZXIgQ3RybCAoMikKKyAqLworI2RlZmluZSBXTTg5OTVfV1NFUV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5OTVfV1NFUV9CVVNZX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5OTVfV1NFUV9CVVNZX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4CS8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5OTVfV1NFUV9CVVNZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxCS8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5OTVfV1NFUV9DVVJSRU5UX0lOREVYX01BU0sgICAgICAgICAgMHgwMDdGCS8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk5NV9XU0VRX0NVUlJFTlRfSU5ERVhfU0hJRlQgICAgICAgICAgICAgIDAJLyogV1NFUV9DVVJSRU5UX0lOREVYIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTk1X1dTRVFfQ1VSUkVOVF9JTkRFWF9XSURUSCAgICAgICAgICAgICAgNwkvKiBXU0VRX0NVUlJFTlRfSU5ERVggLSBbNjowXSAqLworCisvKgorICogUjUxMiAoMHgyMDApIC0gQUlGMSBDbG9ja2luZyAoMSkKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUNMS19TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDE4CS8qIEFJRjFDTEtfU1JDIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFDTEtfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgMwkvKiBBSUYxQ0xLX1NSQyAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NV9BSUYxQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgIDIJLyogQUlGMUNMS19TUkMgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUNMS19JTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CS8qIEFJRjFDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYxQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDQJLyogQUlGMUNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgMgkvKiBBSUYxQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMUNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYxQ0xLX0RJViAgICAgICAgICAgICAgICAgICAgICAweDAwMDIJLyogQUlGMUNMS19ESVYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFDTEtfRElWX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBBSUYxQ0xLX0RJViAqLworI2RlZmluZSBXTTg5OTVfQUlGMUNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFDTEtfRElWICovCisjZGVmaW5lIFdNODk5NV9BSUYxQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMUNMS19ESVYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFDTEtfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYxQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUNMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIEFJRjFDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAJLyogQUlGMUNMS19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxQ0xLX0VOQSAqLworCisvKgorICogUjUxMyAoMHgyMDEpIC0gQUlGMSBDbG9ja2luZyAoMikKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQ19ESVZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDM4CS8qIEFJRjFEQUNfRElWIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgMwkvKiBBSUYxREFDX0RJViAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDMJLyogQUlGMURBQ19ESVYgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ19ESVZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA3CS8qIEFJRjFBRENfRElWIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBRENfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgMAkvKiBBSUYxQURDX0RJViAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDMJLyogQUlGMUFEQ19ESVYgLSBbMjowXSAqLworCisvKgorICogUjUxNiAoMHgyMDQpIC0gQUlGMiBDbG9ja2luZyAoMSkKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkNMS19TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDE4CS8qIEFJRjJDTEtfU1JDIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJDTEtfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgMwkvKiBBSUYyQ0xLX1NSQyAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NV9BSUYyQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgIDIJLyogQUlGMkNMS19TUkMgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkNMS19JTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CS8qIEFJRjJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYyQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDQJLyogQUlGMkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgMgkvKiBBSUYyQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYyQ0xLX0RJViAgICAgICAgICAgICAgICAgICAgICAweDAwMDIJLyogQUlGMkNMS19ESVYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJDTEtfRElWX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBBSUYyQ0xLX0RJViAqLworI2RlZmluZSBXTTg5OTVfQUlGMkNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjJDTEtfRElWICovCisjZGVmaW5lIFdNODk5NV9BSUYyQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMkNMS19ESVYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJDTEtfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYyQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkNMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIEFJRjJDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAJLyogQUlGMkNMS19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYyQ0xLX0VOQSAqLworCisvKgorICogUjUxNyAoMHgyMDUpIC0gQUlGMiBDbG9ja2luZyAoMikKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19ESVZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDM4CS8qIEFJRjJEQUNfRElWIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgMwkvKiBBSUYyREFDX0RJViAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDMJLyogQUlGMkRBQ19ESVYgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ19ESVZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA3CS8qIEFJRjJBRENfRElWIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgMAkvKiBBSUYyQURDX0RJViAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDMJLyogQUlGMkFEQ19ESVYgLSBbMjowXSAqLworCisvKgorICogUjUyMCAoMHgyMDgpIC0gQ2xvY2tpbmcgKDEpCisgKi8KKyNkZWZpbmUgV004OTk1X0xGQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAkvKiBMRkNMS19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0xGQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAyMAkvKiBMRkNMS19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0xGQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNQkvKiBMRkNMS19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0xGQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBMRkNMS19FTkEgKi8KKyNkZWZpbmUgV004OTk1X1RPQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTk1X1RPQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTk1X1RPQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNAkvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTk1X1RPQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEU1BDTEtfRU5BICAgICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBBSUYxRFNQQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURTUENMS19FTkFfTUFTSyAgICAgICAgICAgICAgMHgwMDA4CS8qIEFJRjFEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFNQQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDMJLyogQUlGMURTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEU1BDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxRFNQQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRTUENMS19FTkEgICAgICAgICAgICAgICAgICAgMHgwMDA0CS8qIEFJRjJEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFNQQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAweDAwMDQJLyogQUlGMkRTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEU1BDTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMgkvKiBBSUYyRFNQQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRTUENMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAxCS8qIEFJRjJEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NV9TWVNEU1BDTEtfRU5BICAgICAgICAgICAgICAgICAgICAweDAwMDIJLyogU1lTRFNQQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTVfU1lTRFNQQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMDAyCS8qIFNZU0RTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk1X1NZU0RTUENMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgMQkvKiBTWVNEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NV9TWVNEU1BDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEJLyogU1lTRFNQQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTVfU1lTQ0xLX1NSQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIFNZU0NMS19TUkMgKi8KKyNkZWZpbmUgV004OTk1X1NZU0NMS19TUkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBTWVNDTEtfU1JDICovCisjZGVmaW5lIFdNODk5NV9TWVNDTEtfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAJLyogU1lTQ0xLX1NSQyAqLworI2RlZmluZSBXTTg5OTVfU1lTQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIFNZU0NMS19TUkMgKi8KKworLyoKKyAqIFI1MjEgKDB4MjA5KSAtIENsb2NraW5nICgyKQorICovCisjZGVmaW5lIFdNODk5NV9UT0NMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAweDA3MDAJLyogVE9DTEtfRElWIC0gWzEwOjhdICovCisjZGVmaW5lIFdNODk5NV9UT0NMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDgJLyogVE9DTEtfRElWIC0gWzEwOjhdICovCisjZGVmaW5lIFdNODk5NV9UT0NMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMJLyogVE9DTEtfRElWIC0gWzEwOjhdICovCisjZGVmaW5lIFdNODk5NV9EQkNMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRjAJLyogREJDTEtfRElWIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk1X0RCQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNAkvKiBEQkNMS19ESVYgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5OTVfREJDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0CS8qIERCQ0xLX0RJViAtIFs3OjRdICovCisjZGVmaW5lIFdNODk5NV9PUENMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDcJLyogT1BDTEtfRElWIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk1X09QQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBPUENMS19ESVYgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTVfT1BDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzCS8qIE9QQ0xLX0RJViAtIFsyOjBdICovCisKKy8qCisgKiBSNTI4ICgweDIxMCkgLSBBSUYxIFJhdGUKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9TUl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMEYwCS8qIEFJRjFfU1IgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9TUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA0CS8qIEFJRjFfU1IgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9TUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA0CS8qIEFJRjFfU1IgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUNMS19SQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwMDBGCS8qIEFJRjFDTEtfUkFURSAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxQ0xLX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAJLyogQUlGMUNMS19SQVRFIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFDTEtfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgNAkvKiBBSUYxQ0xLX1JBVEUgLSBbMzowXSAqLworCisvKgorICogUjUyOSAoMHgyMTEpIC0gQUlGMiBSYXRlCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDBGMAkvKiBBSUYyX1NSIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfU1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNAkvKiBBSUYyX1NSIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfU1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNAkvKiBBSUYyX1NSIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJDTEtfUkFURV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwRgkvKiBBSUYyQ0xLX1JBVEUgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkNMS19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAwCS8qIEFJRjJDTEtfUkFURSAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyQ0xLX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDQJLyogQUlGMkNMS19SQVRFIC0gWzM6MF0gKi8KKworLyoKKyAqIFI1MzAgKDB4MjEyKSAtIFJhdGUgU3RhdHVzCisgKi8KKyNkZWZpbmUgV004OTk1X1NSX0VSUk9SX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwRgkvKiBTUl9FUlJPUiAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NV9TUl9FUlJPUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAJLyogU1JfRVJST1IgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTVfU1JfRVJST1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA0CS8qIFNSX0VSUk9SIC0gWzM6MF0gKi8KKworLyoKKyAqIFI1NDQgKDB4MjIwKSAtIEZMTDEgQ29udHJvbCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9PU0NfRU5BICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIEZMTDFfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9PU0NfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgwMDAyCS8qIEZMTDFfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9PU0NfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAxCS8qIEZMTDFfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9PU0NfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxCS8qIEZMTDFfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIEZMTDFfRU5BICovCisjZGVmaW5lIFdNODk5NV9GTEwxX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogRkxMMV9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0ZMTDFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBGTEwxX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEZMTDFfRU5BICovCisKKy8qCisgKiBSNTQ1ICgweDIyMSkgLSBGTEwxIENvbnRyb2wgKDIpCisgKi8KKyNkZWZpbmUgV004OTk1X0ZMTDFfT1VURElWX01BU0sgICAgICAgICAgICAgICAgIDB4M0YwMAkvKiBGTEwxX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9PVVRESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4CS8qIEZMTDFfT1VURElWIC0gWzEzOjhdICovCisjZGVmaW5lIFdNODk5NV9GTEwxX09VVERJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDYJLyogRkxMMV9PVVRESVYgLSBbMTM6OF0gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDFfQ1RSTF9SQVRFX01BU0sgICAgICAgICAgICAgIDB4MDA3MAkvKiBGTEwxX0NUUkxfUkFURSAtIFs2OjRdICovCisjZGVmaW5lIFdNODk5NV9GTEwxX0NUUkxfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgIDQJLyogRkxMMV9DVFJMX1JBVEUgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9DVFJMX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAzCS8qIEZMTDFfQ1RSTF9SQVRFIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDFfRlJBVElPX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwNwkvKiBGTEwxX0ZSQVRJTyAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NV9GTEwxX0ZSQVRJT19TSElGVCAgICAgICAgICAgICAgICAgICAgIDAJLyogRkxMMV9GUkFUSU8gLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9GUkFUSU9fV0lEVEggICAgICAgICAgICAgICAgICAgICAzCS8qIEZMTDFfRlJBVElPIC0gWzI6MF0gKi8KKworLyoKKyAqIFI1NDYgKDB4MjIyKSAtIEZMTDEgQ29udHJvbCAoMykKKyAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9LX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGCS8qIEZMTDFfSyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9LX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwCS8qIEZMTDFfSyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9LX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDE2CS8qIEZMTDFfSyAtIFsxNTowXSAqLworCisvKgorICogUjU0NyAoMHgyMjMpIC0gRkxMMSBDb250cm9sICg0KQorICovCisjZGVmaW5lIFdNODk5NV9GTEwxX05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDdGRTAJLyogRkxMMV9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODk5NV9GTEwxX05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDUJLyogRkxMMV9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODk5NV9GTEwxX05fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMTAJLyogRkxMMV9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODk5NV9GTEwxX0xPT1BfR0FJTl9NQVNLICAgICAgICAgICAgICAweDAwMEYJLyogRkxMMV9MT09QX0dBSU4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9MT09QX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAwCS8qIEZMTDFfTE9PUF9HQUlOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDFfTE9PUF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgNAkvKiBGTEwxX0xPT1BfR0FJTiAtIFszOjBdICovCisKKy8qCisgKiBSNTQ4ICgweDIyNCkgLSBGTEwxIENvbnRyb2wgKDUpCisgKi8KKyNkZWZpbmUgV004OTk1X0ZMTDFfRlJDX05DT19WQUxfTUFTSyAgICAgICAgICAgIDB4MUY4MAkvKiBGTEwxX0ZSQ19OQ09fVkFMIC0gWzEyOjddICovCisjZGVmaW5lIFdNODk5NV9GTEwxX0ZSQ19OQ09fVkFMX1NISUZUICAgICAgICAgICAgICAgIDcJLyogRkxMMV9GUkNfTkNPX1ZBTCAtIFsxMjo3XSAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9GUkNfTkNPX1ZBTF9XSURUSCAgICAgICAgICAgICAgICA2CS8qIEZMTDFfRlJDX05DT19WQUwgLSBbMTI6N10gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDFfRlJDX05DTyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBGTEwxX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDFfRlJDX05DT19NQVNLICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBGTEwxX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDFfRlJDX05DT19TSElGVCAgICAgICAgICAgICAgICAgICAgNgkvKiBGTEwxX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDFfRlJDX05DT19XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBGTEwxX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDFfUkVGQ0xLX0RJVl9NQVNLICAgICAgICAgICAgIDB4MDAxOAkvKiBGTEwxX1JFRkNMS19ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9SRUZDTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAzCS8qIEZMTDFfUkVGQ0xLX0RJViAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NV9GTEwxX1JFRkNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgIDIJLyogRkxMMV9SRUZDTEtfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDFfUkVGQ0xLX1NSQ19NQVNLICAgICAgICAgICAgIDB4MDAwMwkvKiBGTEwxX1JFRkNMS19TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9SRUZDTEtfU1JDX1NISUZUICAgICAgICAgICAgICAgICAwCS8qIEZMTDFfUkVGQ0xLX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NV9GTEwxX1JFRkNMS19TUkNfV0lEVEggICAgICAgICAgICAgICAgIDIJLyogRkxMMV9SRUZDTEtfU1JDIC0gWzE6MF0gKi8KKworLyoKKyAqIFI1NzYgKDB4MjQwKSAtIEZMTDIgQ29udHJvbCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9PU0NfRU5BICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIEZMTDJfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9PU0NfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgwMDAyCS8qIEZMTDJfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9PU0NfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAxCS8qIEZMTDJfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9PU0NfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxCS8qIEZMTDJfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIEZMTDJfRU5BICovCisjZGVmaW5lIFdNODk5NV9GTEwyX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogRkxMMl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBGTEwyX0VOQSAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEZMTDJfRU5BICovCisKKy8qCisgKiBSNTc3ICgweDI0MSkgLSBGTEwyIENvbnRyb2wgKDIpCisgKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfT1VURElWX01BU0sgICAgICAgICAgICAgICAgIDB4M0YwMAkvKiBGTEwyX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9PVVRESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4CS8qIEZMTDJfT1VURElWIC0gWzEzOjhdICovCisjZGVmaW5lIFdNODk5NV9GTEwyX09VVERJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDYJLyogRkxMMl9PVVRESVYgLSBbMTM6OF0gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfQ1RSTF9SQVRFX01BU0sgICAgICAgICAgICAgIDB4MDA3MAkvKiBGTEwyX0NUUkxfUkFURSAtIFs2OjRdICovCisjZGVmaW5lIFdNODk5NV9GTEwyX0NUUkxfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgIDQJLyogRkxMMl9DVFJMX1JBVEUgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9DVFJMX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAzCS8qIEZMTDJfQ1RSTF9SQVRFIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfRlJBVElPX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwNwkvKiBGTEwyX0ZSQVRJTyAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NV9GTEwyX0ZSQVRJT19TSElGVCAgICAgICAgICAgICAgICAgICAgIDAJLyogRkxMMl9GUkFUSU8gLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9GUkFUSU9fV0lEVEggICAgICAgICAgICAgICAgICAgICAzCS8qIEZMTDJfRlJBVElPIC0gWzI6MF0gKi8KKworLyoKKyAqIFI1NzggKDB4MjQyKSAtIEZMTDIgQ29udHJvbCAoMykKKyAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9LX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGCS8qIEZMTDJfSyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9LX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwCS8qIEZMTDJfSyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9LX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDE2CS8qIEZMTDJfSyAtIFsxNTowXSAqLworCisvKgorICogUjU3OSAoMHgyNDMpIC0gRkxMMiBDb250cm9sICg0KQorICovCisjZGVmaW5lIFdNODk5NV9GTEwyX05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDdGRTAJLyogRkxMMl9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODk5NV9GTEwyX05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDUJLyogRkxMMl9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODk5NV9GTEwyX05fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMTAJLyogRkxMMl9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODk5NV9GTEwyX0xPT1BfR0FJTl9NQVNLICAgICAgICAgICAgICAweDAwMEYJLyogRkxMMl9MT09QX0dBSU4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9MT09QX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAwCS8qIEZMTDJfTE9PUF9HQUlOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfTE9PUF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgNAkvKiBGTEwyX0xPT1BfR0FJTiAtIFszOjBdICovCisKKy8qCisgKiBSNTgwICgweDI0NCkgLSBGTEwyIENvbnRyb2wgKDUpCisgKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfRlJDX05DT19WQUxfTUFTSyAgICAgICAgICAgIDB4MUY4MAkvKiBGTEwyX0ZSQ19OQ09fVkFMIC0gWzEyOjddICovCisjZGVmaW5lIFdNODk5NV9GTEwyX0ZSQ19OQ09fVkFMX1NISUZUICAgICAgICAgICAgICAgIDcJLyogRkxMMl9GUkNfTkNPX1ZBTCAtIFsxMjo3XSAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9GUkNfTkNPX1ZBTF9XSURUSCAgICAgICAgICAgICAgICA2CS8qIEZMTDJfRlJDX05DT19WQUwgLSBbMTI6N10gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfRlJDX05DTyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBGTEwyX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfRlJDX05DT19NQVNLICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBGTEwyX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfRlJDX05DT19TSElGVCAgICAgICAgICAgICAgICAgICAgNgkvKiBGTEwyX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfRlJDX05DT19XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBGTEwyX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfUkVGQ0xLX0RJVl9NQVNLICAgICAgICAgICAgIDB4MDAxOAkvKiBGTEwyX1JFRkNMS19ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9SRUZDTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAzCS8qIEZMTDJfUkVGQ0xLX0RJViAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NV9GTEwyX1JFRkNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgIDIJLyogRkxMMl9SRUZDTEtfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfUkVGQ0xLX1NSQ19NQVNLICAgICAgICAgICAgIDB4MDAwMwkvKiBGTEwyX1JFRkNMS19TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9SRUZDTEtfU1JDX1NISUZUICAgICAgICAgICAgICAgICAwCS8qIEZMTDJfUkVGQ0xLX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NV9GTEwyX1JFRkNMS19TUkNfV0lEVEggICAgICAgICAgICAgICAgIDIJLyogRkxMMl9SRUZDTEtfU1JDIC0gWzE6MF0gKi8KKworLyoKKyAqIFI3NjggKDB4MzAwKSAtIEFJRjEgQ29udHJvbCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCS8qIEFJRjFBRENMX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ0xfU1JDX01BU0sgICAgICAgICAgICAgICAgMHg4MDAwCS8qIEFJRjFBRENMX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ0xfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgIDE1CS8qIEFJRjFBRENMX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFBRENMX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ1JfU1JDICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCS8qIEFJRjFBRENSX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ1JfU1JDX01BU0sgICAgICAgICAgICAgICAgMHg0MDAwCS8qIEFJRjFBRENSX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ1JfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgIDE0CS8qIEFJRjFBRENSX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ1JfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFBRENSX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ19URE0gICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCS8qIEFJRjFBRENfVERNICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDX1RETV9NQVNLICAgICAgICAgICAgICAgICAweDIwMDAJLyogQUlGMUFEQ19URE0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBRENfVERNX1NISUZUICAgICAgICAgICAgICAgICAgICAxMwkvKiBBSUYxQURDX1RETSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ19URE1fV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFBRENfVERNICovCisjZGVmaW5lIFdNODk5NV9BSUYxX0JDTEtfSU5WICAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMV9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9CQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjFfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFfQkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgOAkvKiBBSUYxX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYxX0JDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMV9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9MUkNMS19JTlYgICAgICAgICAgICAgICAgICAgMHgwMDgwCS8qIEFJRjFfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYxX0xSQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAweDAwODAJLyogQUlGMV9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFfTFJDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgNwkvKiBBSUYxX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9MUkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAxCS8qIEFJRjFfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYxX1dMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNjAJLyogQUlGMV9XTCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5NV9BSUYxX1dMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDUJLyogQUlGMV9XTCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5NV9BSUYxX1dMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDIJLyogQUlGMV9XTCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5NV9BSUYxX0ZNVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTgJLyogQUlGMV9GTVQgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9GTVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAzCS8qIEFJRjFfRk1UIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFfRk1UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMgkvKiBBSUYxX0ZNVCAtIFs0OjNdICovCisKKy8qCisgKiBSNzY5ICgweDMwMSkgLSBBSUYxIENvbnRyb2wgKDIpCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNMX1NSQyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBBSUYxREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNMX1NSQ19NQVNLICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBBSUYxREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNMX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAxNQkvKiBBSUYxREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNMX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNSX1NSQyAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAkvKiBBSUYxREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNSX1NSQ19NQVNLICAgICAgICAgICAgICAgIDB4NDAwMAkvKiBBSUYxREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNSX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAxNAkvKiBBSUYxREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNSX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNfQk9PU1RfTUFTSyAgICAgICAgICAgICAgIDB4MEMwMAkvKiBBSUYxREFDX0JPT1NUIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQ19CT09TVF9TSElGVCAgICAgICAgICAgICAgICAgIDEwCS8qIEFJRjFEQUNfQk9PU1QgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDX0JPT1NUX1dJRFRIICAgICAgICAgICAgICAgICAgIDIJLyogQUlGMURBQ19CT09TVCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNfQ09NUCAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBBSUYxREFDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNfQ09NUF9NQVNLICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBBSUYxREFDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAgNAkvKiBBSUYxREFDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxREFDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNfQ09NUE1PREUgICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBBSUYxREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDX0NPTVBNT0RFX01BU0sgICAgICAgICAgICAweDAwMDgJLyogQUlGMURBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQ19DT01QTU9ERV9TSElGVCAgICAgICAgICAgICAgICAzCS8qIEFJRjFEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNfQ09NUE1PREVfV0lEVEggICAgICAgICAgICAgICAgMQkvKiBBSUYxREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDX0NPTVAgICAgICAgICAgICAgICAgICAgICAweDAwMDQJLyogQUlGMUFEQ19DT01QICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQJLyogQUlGMUFEQ19DT01QICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIJLyogQUlGMUFEQ19DT01QICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMUFEQ19DT01QICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDX0NPTVBNT0RFICAgICAgICAgICAgICAgICAweDAwMDIJLyogQUlGMUFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ19DT01QTU9ERV9NQVNLICAgICAgICAgICAgMHgwMDAyCS8qIEFJRjFBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBRENfQ09NUE1PREVfU0hJRlQgICAgICAgICAgICAgICAgMQkvKiBBSUYxQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDX0NPTVBNT0RFX1dJRFRIICAgICAgICAgICAgICAgIDEJLyogQUlGMUFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9MT09QQkFDSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIEFJRjFfTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFfTE9PUEJBQ0tfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYxX0xPT1BCQUNLICovCisjZGVmaW5lIFdNODk5NV9BSUYxX0xPT1BCQUNLX1NISUZUICAgICAgICAgICAgICAgICAgIDAJLyogQUlGMV9MT09QQkFDSyAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9MT09QQkFDS19XSURUSCAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFfTE9PUEJBQ0sgKi8KKworLyoKKyAqIFI3NzAgKDB4MzAyKSAtIEFJRjEgTWFzdGVyL1NsYXZlCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFfVFJJICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBBSUYxX1RSSSAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9UUklfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwCS8qIEFJRjFfVFJJICovCisjZGVmaW5lIFdNODk5NV9BSUYxX1RSSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTUJLyogQUlGMV9UUkkgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFfVFJJX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxX1RSSSAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9NU1RSICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCS8qIEFJRjFfTVNUUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9NU1RSX01BU0sgICAgICAgICAgICAgICAgICAgMHg0MDAwCS8qIEFJRjFfTVNUUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9NU1RSX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDE0CS8qIEFJRjFfTVNUUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9NU1RSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFfTVNUUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9DTEtfRlJDICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCS8qIEFJRjFfQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9DTEtfRlJDX01BU0sgICAgICAgICAgICAgICAgMHgyMDAwCS8qIEFJRjFfQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9DTEtfRlJDX1NISUZUICAgICAgICAgICAgICAgICAgIDEzCS8qIEFJRjFfQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9DTEtfRlJDX1dJRFRIICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFfQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9MUkNMS19GUkMgICAgICAgICAgICAgICAgICAgMHgxMDAwCS8qIEFJRjFfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODk5NV9BSUYxX0xSQ0xLX0ZSQ19NQVNLICAgICAgICAgICAgICAweDEwMDAJLyogQUlGMV9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFfTFJDTEtfRlJDX1NISUZUICAgICAgICAgICAgICAgICAxMgkvKiBBSUYxX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9MUkNMS19GUkNfV0lEVEggICAgICAgICAgICAgICAgICAxCS8qIEFJRjFfTFJDTEtfRlJDICovCisKKy8qCisgKiBSNzcxICgweDMwMykgLSBBSUYxIEJDTEsKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9CQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgMHgwMEYwCS8qIEFJRjFfQkNMS19ESVYgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9CQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICA0CS8qIEFJRjFfQkNMS19ESVYgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMV9CQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICA0CS8qIEFJRjFfQkNMS19ESVYgLSBbNzo0XSAqLworCisvKgorICogUjc3MiAoMHgzMDQpIC0gQUlGMUFEQyBMUkNMSworICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDX0xSQ0xLX0RJUiAgICAgICAgICAgICAgICAweDA4MDAJLyogQUlGMUFEQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBRENfTFJDTEtfRElSX01BU0sgICAgICAgICAgIDB4MDgwMAkvKiBBSUYxQURDX0xSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ19MUkNMS19ESVJfU0hJRlQgICAgICAgICAgICAgIDExCS8qIEFJRjFBRENfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDX0xSQ0xLX0RJUl9XSURUSCAgICAgICAgICAgICAgIDEJLyogQUlGMUFEQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBRENfUkFURV9NQVNLICAgICAgICAgICAgICAgIDB4MDdGRgkvKiBBSUYxQURDX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBRENfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgMAkvKiBBSUYxQURDX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBRENfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAxMQkvKiBBSUYxQURDX1JBVEUgLSBbMTA6MF0gKi8KKworLyoKKyAqIFI3NzMgKDB4MzA1KSAtIEFJRjFEQUMgTFJDTEsKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQ19MUkNMS19ESVIgICAgICAgICAgICAgICAgMHgwODAwCS8qIEFJRjFEQUNfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDX0xSQ0xLX0RJUl9NQVNLICAgICAgICAgICAweDA4MDAJLyogQUlGMURBQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNfTFJDTEtfRElSX1NISUZUICAgICAgICAgICAgICAxMQkvKiBBSUYxREFDX0xSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQ19MUkNMS19ESVJfV0lEVEggICAgICAgICAgICAgICAxCS8qIEFJRjFEQUNfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAweDA3RkYJLyogQUlGMURBQ19SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAJLyogQUlGMURBQ19SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgMTEJLyogQUlGMURBQ19SQVRFIC0gWzEwOjBdICovCisKKy8qCisgKiBSNzc0ICgweDMwNikgLSBBSUYxREFDIERhdGEKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQ0xfREFUX0lOViAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIEFJRjFEQUNMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNMX0RBVF9JTlZfTUFTSyAgICAgICAgICAgIDB4MDAwMgkvKiBBSUYxREFDTF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDTF9EQVRfSU5WX1NISUZUICAgICAgICAgICAgICAgIDEJLyogQUlGMURBQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQ0xfREFUX0lOVl9XSURUSCAgICAgICAgICAgICAgICAxCS8qIEFJRjFEQUNMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNSX0RBVF9JTlYgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYxREFDUl9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDUl9EQVRfSU5WX01BU0sgICAgICAgICAgICAweDAwMDEJLyogQUlGMURBQ1JfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQ1JfREFUX0lOVl9TSElGVCAgICAgICAgICAgICAgICAwCS8qIEFJRjFEQUNSX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUNSX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAgICAgMQkvKiBBSUYxREFDUl9EQVRfSU5WICovCisKKy8qCisgKiBSNzc1ICgweDMwNykgLSBBSUYxQURDIERhdGEKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ0xfREFUX0lOViAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIEFJRjFBRENMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBRENMX0RBVF9JTlZfTUFTSyAgICAgICAgICAgIDB4MDAwMgkvKiBBSUYxQURDTF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDTF9EQVRfSU5WX1NISUZUICAgICAgICAgICAgICAgIDEJLyogQUlGMUFEQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ0xfREFUX0lOVl9XSURUSCAgICAgICAgICAgICAgICAxCS8qIEFJRjFBRENMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBRENSX0RBVF9JTlYgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYxQURDUl9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDUl9EQVRfSU5WX01BU0sgICAgICAgICAgICAweDAwMDEJLyogQUlGMUFEQ1JfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ1JfREFUX0lOVl9TSElGVCAgICAgICAgICAgICAgICAwCS8qIEFJRjFBRENSX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBRENSX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAgICAgMQkvKiBBSUYxQURDUl9EQVRfSU5WICovCisKKy8qCisgKiBSNzg0ICgweDMxMCkgLSBBSUYyIENvbnRyb2wgKDEpCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENMX1NSQyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBBSUYyQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENMX1NSQ19NQVNLICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBBSUYyQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENMX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAxNQkvKiBBSUYyQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENMX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYyQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENSX1NSQyAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAkvKiBBSUYyQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENSX1NSQ19NQVNLICAgICAgICAgICAgICAgIDB4NDAwMAkvKiBBSUYyQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENSX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAxNAkvKiBBSUYyQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENSX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYyQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfVERNICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAkvKiBBSUYyQURDX1RETSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ19URE1fTUFTSyAgICAgICAgICAgICAgICAgMHgyMDAwCS8qIEFJRjJBRENfVERNICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDX1RETV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTMJLyogQUlGMkFEQ19URE0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfVERNX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYyQURDX1RETSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ19URE1fQ0hBTiAgICAgICAgICAgICAgICAgMHgxMDAwCS8qIEFJRjJBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfVERNX0NIQU5fTUFTSyAgICAgICAgICAgIDB4MTAwMAkvKiBBSUYyQURDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDX1RETV9DSEFOX1NISUZUICAgICAgICAgICAgICAgMTIJLyogQUlGMkFEQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ19URE1fQ0hBTl9XSURUSCAgICAgICAgICAgICAgICAxCS8qIEFJRjJBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfQkNMS19JTlYgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBBSUYyX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0JDTEtfSU5WX01BU0sgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMl9CQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICA4CS8qIEFJRjJfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfQkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBBSUYyX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0xSQ0xLX0lOViAgICAgICAgICAgICAgICAgICAweDAwODAJLyogQUlGMl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfTFJDTEtfSU5WX01BU0sgICAgICAgICAgICAgIDB4MDA4MAkvKiBBSUYyX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMl9MUkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICA3CS8qIEFJRjJfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0xSQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgIDEJLyogQUlGMl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfV0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA2MAkvKiBBSUYyX1dMIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfV0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNQkvKiBBSUYyX1dMIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfV0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMgkvKiBBSUYyX1dMIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfRk1UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxOAkvKiBBSUYyX0ZNVCAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0ZNVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMJLyogQUlGMl9GTVQgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMl9GTVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyCS8qIEFJRjJfRk1UIC0gWzQ6M10gKi8KKworLyoKKyAqIFI3ODUgKDB4MzExKSAtIEFJRjIgQ29udHJvbCAoMikKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCS8qIEFJRjJEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ0xfU1JDX01BU0sgICAgICAgICAgICAgICAgMHg4MDAwCS8qIEFJRjJEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ0xfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgIDE1CS8qIEFJRjJEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjJEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ1JfU1JDICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCS8qIEFJRjJEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ1JfU1JDX01BU0sgICAgICAgICAgICAgICAgMHg0MDAwCS8qIEFJRjJEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ1JfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgIDE0CS8qIEFJRjJEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ1JfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjJEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19URE0gICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCS8qIEFJRjJEQUNfVERNICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX1RETV9NQVNLICAgICAgICAgICAgICAgICAweDIwMDAJLyogQUlGMkRBQ19URE0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfVERNX1NISUZUICAgICAgICAgICAgICAgICAgICAxMwkvKiBBSUYyREFDX1RETSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19URE1fV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjJEQUNfVERNICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX1RETV9DSEFOICAgICAgICAgICAgICAgICAweDEwMDAJLyogQUlGMkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19URE1fQ0hBTl9NQVNLICAgICAgICAgICAgMHgxMDAwCS8qIEFJRjJEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfVERNX0NIQU5fU0hJRlQgICAgICAgICAgICAgICAxMgkvKiBBSUYyREFDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX1RETV9DSEFOX1dJRFRIICAgICAgICAgICAgICAgIDEJLyogQUlGMkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19CT09TVF9NQVNLICAgICAgICAgICAgICAgMHgwQzAwCS8qIEFJRjJEQUNfQk9PU1QgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0JPT1NUX1NISUZUICAgICAgICAgICAgICAgICAgMTAJLyogQUlGMkRBQ19CT09TVCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfQk9PU1RfV0lEVEggICAgICAgICAgICAgICAgICAgMgkvKiBBSUYyREFDX0JPT1NUIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19DT01QICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCS8qIEFJRjJEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19DT01QX01BU0sgICAgICAgICAgICAgICAgMHgwMDEwCS8qIEFJRjJEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICA0CS8qIEFJRjJEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19DT01QX1dJRFRIICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjJEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19DT01QTU9ERSAgICAgICAgICAgICAgICAgMHgwMDA4CS8qIEFJRjJEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfQ09NUE1PREVfTUFTSyAgICAgICAgICAgIDB4MDAwOAkvKiBBSUYyREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0NPTVBNT0RFX1NISUZUICAgICAgICAgICAgICAgIDMJLyogQUlGMkRBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19DT01QTU9ERV9XSURUSCAgICAgICAgICAgICAgICAxCS8qIEFJRjJEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfQ09NUCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAkvKiBBSUYyQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfQ09NUF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNAkvKiBBSUYyQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAgMgkvKiBBSUYyQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYyQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfQ09NUE1PREUgICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBBSUYyQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDX0NPTVBNT0RFX01BU0sgICAgICAgICAgICAweDAwMDIJLyogQUlGMkFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ19DT01QTU9ERV9TSElGVCAgICAgICAgICAgICAgICAxCS8qIEFJRjJBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfQ09NUE1PREVfV0lEVEggICAgICAgICAgICAgICAgMQkvKiBBSUYyQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0xPT1BCQUNLICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogQUlGMl9MT09QQkFDSyAqLworI2RlZmluZSBXTTg5OTVfQUlGMl9MT09QQkFDS19NQVNLICAgICAgICAgICAgICAgMHgwMDAxCS8qIEFJRjJfTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfTE9PUEJBQ0tfU0hJRlQgICAgICAgICAgICAgICAgICAgMAkvKiBBSUYyX0xPT1BCQUNLICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0xPT1BCQUNLX1dJRFRIICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMl9MT09QQkFDSyAqLworCisvKgorICogUjc4NiAoMHgzMTIpIC0gQUlGMiBNYXN0ZXIvU2xhdmUKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMl9UUkkgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCS8qIEFJRjJfVFJJICovCisjZGVmaW5lIFdNODk5NV9BSUYyX1RSSV9NQVNLICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogQUlGMl9UUkkgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfVFJJX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNQkvKiBBSUYyX1RSSSAqLworI2RlZmluZSBXTTg5OTVfQUlGMl9UUklfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjJfVFJJICovCisjZGVmaW5lIFdNODk5NV9BSUYyX01TVFIgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogQUlGMl9NU1RSICovCisjZGVmaW5lIFdNODk5NV9BSUYyX01TVFJfTUFTSyAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogQUlGMl9NU1RSICovCisjZGVmaW5lIFdNODk5NV9BSUYyX01TVFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTQJLyogQUlGMl9NU1RSICovCisjZGVmaW5lIFdNODk5NV9BSUYyX01TVFJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMl9NU1RSICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0NMS19GUkMgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogQUlGMl9DTEtfRlJDICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0NMS19GUkNfTUFTSyAgICAgICAgICAgICAgICAweDIwMDAJLyogQUlGMl9DTEtfRlJDICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0NMS19GUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgMTMJLyogQUlGMl9DTEtfRlJDICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0NMS19GUkNfV0lEVEggICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMl9DTEtfRlJDICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0xSQ0xLX0ZSQyAgICAgICAgICAgICAgICAgICAweDEwMDAJLyogQUlGMl9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJfTFJDTEtfRlJDX01BU0sgICAgICAgICAgICAgIDB4MTAwMAkvKiBBSUYyX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTVfQUlGMl9MUkNMS19GUkNfU0hJRlQgICAgICAgICAgICAgICAgIDEyCS8qIEFJRjJfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0xSQ0xLX0ZSQ19XSURUSCAgICAgICAgICAgICAgICAgIDEJLyogQUlGMl9MUkNMS19GUkMgKi8KKworLyoKKyAqIFI3ODcgKDB4MzEzKSAtIEFJRjIgQkNMSworICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0JDTEtfRElWX01BU0sgICAgICAgICAgICAgICAweDAwRjAJLyogQUlGMl9CQ0xLX0RJViAtIFs3OjRdICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0JDTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgIDQJLyogQUlGMl9CQ0xLX0RJViAtIFs3OjRdICovCisjZGVmaW5lIFdNODk5NV9BSUYyX0JDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgIDQJLyogQUlGMl9CQ0xLX0RJViAtIFs3OjRdICovCisKKy8qCisgKiBSNzg4ICgweDMxNCkgLSBBSUYyQURDIExSQ0xLCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfTFJDTEtfRElSICAgICAgICAgICAgICAgIDB4MDgwMAkvKiBBSUYyQURDX0xSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ19MUkNMS19ESVJfTUFTSyAgICAgICAgICAgMHgwODAwCS8qIEFJRjJBRENfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDX0xSQ0xLX0RJUl9TSElGVCAgICAgICAgICAgICAgMTEJLyogQUlGMkFEQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfTFJDTEtfRElSX1dJRFRIICAgICAgICAgICAgICAgMQkvKiBBSUYyQURDX0xSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ19SQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwN0ZGCS8qIEFJRjJBRENfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAwCS8qIEFJRjJBRENfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgIDExCS8qIEFJRjJBRENfUkFURSAtIFsxMDowXSAqLworCisvKgorICogUjc4OSAoMHgzMTUpIC0gQUlGMkRBQyBMUkNMSworICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0xSQ0xLX0RJUiAgICAgICAgICAgICAgICAweDA4MDAJLyogQUlGMkRBQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfTFJDTEtfRElSX01BU0sgICAgICAgICAgIDB4MDgwMAkvKiBBSUYyREFDX0xSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19MUkNMS19ESVJfU0hJRlQgICAgICAgICAgICAgIDExCS8qIEFJRjJEQUNfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0xSQ0xLX0RJUl9XSURUSCAgICAgICAgICAgICAgIDEJLyogQUlGMkRBQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfUkFURV9NQVNLICAgICAgICAgICAgICAgIDB4MDdGRgkvKiBBSUYyREFDX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgMAkvKiBBSUYyREFDX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAxMQkvKiBBSUYyREFDX1JBVEUgLSBbMTA6MF0gKi8KKworLyoKKyAqIFI3OTAgKDB4MzE2KSAtIEFJRjJEQUMgRGF0YQorICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDTF9EQVRfSU5WICAgICAgICAgICAgICAgICAweDAwMDIJLyogQUlGMkRBQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ0xfREFUX0lOVl9NQVNLICAgICAgICAgICAgMHgwMDAyCS8qIEFJRjJEQUNMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNMX0RBVF9JTlZfU0hJRlQgICAgICAgICAgICAgICAgMQkvKiBBSUYyREFDTF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDTF9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgICAgIDEJLyogQUlGMkRBQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ1JfREFUX0lOViAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIEFJRjJEQUNSX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNSX0RBVF9JTlZfTUFTSyAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYyREFDUl9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDUl9EQVRfSU5WX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMkRBQ1JfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ1JfREFUX0lOVl9XSURUSCAgICAgICAgICAgICAgICAxCS8qIEFJRjJEQUNSX0RBVF9JTlYgKi8KKworLyoKKyAqIFI3OTEgKDB4MzE3KSAtIEFJRjJBREMgRGF0YQorICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDTF9EQVRfSU5WICAgICAgICAgICAgICAgICAweDAwMDIJLyogQUlGMkFEQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ0xfREFUX0lOVl9NQVNLICAgICAgICAgICAgMHgwMDAyCS8qIEFJRjJBRENMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENMX0RBVF9JTlZfU0hJRlQgICAgICAgICAgICAgICAgMQkvKiBBSUYyQURDTF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDTF9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgICAgIDEJLyogQUlGMkFEQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ1JfREFUX0lOViAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIEFJRjJBRENSX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENSX0RBVF9JTlZfTUFTSyAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYyQURDUl9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDUl9EQVRfSU5WX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMkFEQ1JfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ1JfREFUX0lOVl9XSURUSCAgICAgICAgICAgICAgICAxCS8qIEFJRjJBRENSX0RBVF9JTlYgKi8KKworLyoKKyAqIFIxMDI0ICgweDQwMCkgLSBBSUYxIEFEQzEgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzFfVlUgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjFBREMxX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMV9WVV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMUFEQzFfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMxX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgOAkvKiBBSUYxQURDMV9WVSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFBREMxX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMUxfVk9MX01BU0sgICAgICAgICAgICAgICAweDAwRkYJLyogQUlGMUFEQzFMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMUxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAJLyogQUlGMUFEQzFMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMUxfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDgJLyogQUlGMUFEQzFMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTAyNSAoMHg0MDEpIC0gQUlGMSBBREMxIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMV9WVSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMUFEQzFfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMxX1ZVX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBBSUYxQURDMV9WVSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4CS8qIEFJRjFBREMxX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMV9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMUFEQzFfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMxUl9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDBGRgkvKiBBSUYxQURDMVJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMxUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgMAkvKiBBSUYxQURDMVJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMxUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgOAkvKiBBSUYxQURDMVJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMDI2ICgweDQwMikgLSBBSUYxIERBQzEgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfVlUgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjFEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9WVV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMURBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgOAkvKiBBSUYxREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMUxfVk9MX01BU0sgICAgICAgICAgICAgICAweDAwRkYJLyogQUlGMURBQzFMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMUxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzFMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMUxfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDgJLyogQUlGMURBQzFMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTAyNyAoMHg0MDMpIC0gQUlGMSBEQUMxIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9WVSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMURBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX1ZVX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBBSUYxREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4CS8qIEFJRjFEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMURBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxUl9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDBGRgkvKiBBSUYxREFDMVJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMVJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgOAkvKiBBSUYxREFDMVJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMDI4ICgweDQwNCkgLSBBSUYxIEFEQzIgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzJfVlUgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjFBREMyX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMl9WVV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMUFEQzJfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgOAkvKiBBSUYxQURDMl9WVSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzJfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFBREMyX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMkxfVk9MX01BU0sgICAgICAgICAgICAgICAweDAwRkYJLyogQUlGMUFEQzJMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMkxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAJLyogQUlGMUFEQzJMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMkxfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDgJLyogQUlGMUFEQzJMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTAyOSAoMHg0MDUpIC0gQUlGMSBBREMyIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMl9WVSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMUFEQzJfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyX1ZVX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBBSUYxQURDMl9WVSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzJfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4CS8qIEFJRjFBREMyX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMl9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMUFEQzJfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyUl9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDBGRgkvKiBBSUYxQURDMlJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgMAkvKiBBSUYxQURDMlJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgOAkvKiBBSUYxQURDMlJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMDMwICgweDQwNikgLSBBSUYxIERBQzIgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfVlUgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjFEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9WVV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMURBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgOAkvKiBBSUYxREFDMl9WVSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMkxfVk9MX01BU0sgICAgICAgICAgICAgICAweDAwRkYJLyogQUlGMURBQzJMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMkxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzJMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMkxfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDgJLyogQUlGMURBQzJMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTAzMSAoMHg0MDcpIC0gQUlGMSBEQUMyIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9WVSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMURBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX1ZVX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBBSUYxREFDMl9WVSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4CS8qIEFJRjFEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMURBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyUl9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDBGRgkvKiBBSUYxREFDMlJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMlJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgOAkvKiBBSUYxREFDMlJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMDQwICgweDQxMCkgLSBBSUYxIEFEQzEgRmlsdGVycworICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDXzRGUyAgICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogQUlGMUFEQ180RlMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBRENfNEZTX01BU0sgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBBSUYxQURDXzRGUyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQ180RlNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDE1CS8qIEFJRjFBRENfNEZTICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDXzRGU19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMUFEQ180RlMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMxTF9IUEYgICAgICAgICAgICAgICAgICAgIDB4MTAwMAkvKiBBSUYxQURDMUxfSFBGICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMUxfSFBGX01BU0sgICAgICAgICAgICAgICAweDEwMDAJLyogQUlGMUFEQzFMX0hQRiAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzFMX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgIDEyCS8qIEFJRjFBREMxTF9IUEYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMxTF9IUEZfV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxQURDMUxfSFBGICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMVJfSFBGICAgICAgICAgICAgICAgICAgICAweDA4MDAJLyogQUlGMUFEQzFSX0hQRiAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzFSX0hQRl9NQVNLICAgICAgICAgICAgICAgMHgwODAwCS8qIEFJRjFBREMxUl9IUEYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMxUl9IUEZfU0hJRlQgICAgICAgICAgICAgICAgICAxMQkvKiBBSUYxQURDMVJfSFBGICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMVJfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMUFEQzFSX0hQRiAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzFfSFBGX01PREUgICAgICAgICAgICAgICAgMHgwMDA4CS8qIEFJRjFBREMxX0hQRl9NT0RFICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMV9IUEZfTU9ERV9NQVNLICAgICAgICAgICAweDAwMDgJLyogQUlGMUFEQzFfSFBGX01PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMxX0hQRl9NT0RFX1NISUZUICAgICAgICAgICAgICAgMwkvKiBBSUYxQURDMV9IUEZfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzFfSFBGX01PREVfV0lEVEggICAgICAgICAgICAgICAxCS8qIEFJRjFBREMxX0hQRl9NT0RFICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMV9IUEZfQ1VUX01BU0sgICAgICAgICAgICAweDAwMDcJLyogQUlGMUFEQzFfSFBGX0NVVCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMV9IUEZfQ1VUX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMUFEQzFfSFBGX0NVVCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMV9IUEZfQ1VUX1dJRFRIICAgICAgICAgICAgICAgIDMJLyogQUlGMUFEQzFfSFBGX0NVVCAtIFsyOjBdICovCisKKy8qCisgKiBSMTA0MSAoMHg0MTEpIC0gQUlGMSBBREMyIEZpbHRlcnMKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzJMX0hQRiAgICAgICAgICAgICAgICAgICAgMHgxMDAwCS8qIEFJRjFBREMyTF9IUEYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyTF9IUEZfTUFTSyAgICAgICAgICAgICAgIDB4MTAwMAkvKiBBSUYxQURDMkxfSFBGICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMkxfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgMTIJLyogQUlGMUFEQzJMX0hQRiAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzJMX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFBREMyTF9IUEYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyUl9IUEYgICAgICAgICAgICAgICAgICAgIDB4MDgwMAkvKiBBSUYxQURDMlJfSFBGICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMlJfSFBGX01BU0sgICAgICAgICAgICAgICAweDA4MDAJLyogQUlGMUFEQzJSX0hQRiAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzJSX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgIDExCS8qIEFJRjFBREMyUl9IUEYgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyUl9IUEZfV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxQURDMlJfSFBGICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMl9IUEZfTU9ERSAgICAgICAgICAgICAgICAweDAwMDgJLyogQUlGMUFEQzJfSFBGX01PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyX0hQRl9NT0RFX01BU0sgICAgICAgICAgIDB4MDAwOAkvKiBBSUYxQURDMl9IUEZfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzJfSFBGX01PREVfU0hJRlQgICAgICAgICAgICAgICAzCS8qIEFJRjFBREMyX0hQRl9NT0RFICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMl9IUEZfTU9ERV9XSURUSCAgICAgICAgICAgICAgIDEJLyogQUlGMUFEQzJfSFBGX01PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyX0hQRl9DVVRfTUFTSyAgICAgICAgICAgIDB4MDAwNwkvKiBBSUYxQURDMl9IUEZfQ1VUIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyX0hQRl9DVVRfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYxQURDMl9IUEZfQ1VUIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyX0hQRl9DVVRfV0lEVEggICAgICAgICAgICAgICAgMwkvKiBBSUYxQURDMl9IUEZfQ1VUIC0gWzI6MF0gKi8KKworLyoKKyAqIFIxMDU2ICgweDQyMCkgLSBBSUYxIERBQzEgRmlsdGVycyAoMSkKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfTVVURSAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIEFJRjFEQUMxX01VVEUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX01VVEVfTUFTSyAgICAgICAgICAgICAgIDB4MDIwMAkvKiBBSUYxREFDMV9NVVRFICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgIDkJLyogQUlGMURBQzFfTVVURSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjFEQUMxX01VVEUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX01PTk8gICAgICAgICAgICAgICAgICAgIDB4MDA4MAkvKiBBSUYxREFDMV9NT05PICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9NT05PX01BU0sgICAgICAgICAgICAgICAweDAwODAJLyogQUlGMURBQzFfTU9OTyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfTU9OT19TSElGVCAgICAgICAgICAgICAgICAgICA3CS8qIEFJRjFEQUMxX01PTk8gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX01PTk9fV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxREFDMV9NT05PICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9NVVRFUkFURSAgICAgICAgICAgICAgICAweDAwMjAJLyogQUlGMURBQzFfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX01VVEVSQVRFX01BU0sgICAgICAgICAgIDB4MDAyMAkvKiBBSUYxREFDMV9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfTVVURVJBVEVfU0hJRlQgICAgICAgICAgICAgICA1CS8qIEFJRjFEQUMxX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9NVVRFUkFURV9XSURUSCAgICAgICAgICAgICAgIDEJLyogQUlGMURBQzFfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX1VOTVVURV9SQU1QICAgICAgICAgICAgIDB4MDAxMAkvKiBBSUYxREFDMV9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfVU5NVVRFX1JBTVBfTUFTSyAgICAgICAgMHgwMDEwCS8qIEFJRjFEQUMxX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9VTk1VVEVfUkFNUF9TSElGVCAgICAgICAgICAgIDQJLyogQUlGMURBQzFfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX1VOTVVURV9SQU1QX1dJRFRIICAgICAgICAgICAgMQkvKiBBSUYxREFDMV9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfREVFTVBfTUFTSyAgICAgICAgICAgICAgMHgwMDA2CS8qIEFJRjFEQUMxX0RFRU1QIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0RFRU1QX1NISUZUICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxREFDMV9ERUVNUCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9ERUVNUF9XSURUSCAgICAgICAgICAgICAgICAgIDIJLyogQUlGMURBQzFfREVFTVAgLSBbMjoxXSAqLworCisvKgorICogUjEwNTcgKDB4NDIxKSAtIEFJRjEgREFDMSBGaWx0ZXJzICgyKQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV8zRF9HQUlOX01BU0sgICAgICAgICAgICAweDNFMDAJLyogQUlGMURBQzFfM0RfR0FJTiAtIFsxMzo5XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfM0RfR0FJTl9TSElGVCAgICAgICAgICAgICAgICA5CS8qIEFJRjFEQUMxXzNEX0dBSU4gLSBbMTM6OV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxXzNEX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgNQkvKiBBSUYxREFDMV8zRF9HQUlOIC0gWzEzOjldICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV8zRF9FTkEgICAgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMURBQzFfM0RfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV8zRF9FTkFfTUFTSyAgICAgICAgICAgICAweDAxMDAJLyogQUlGMURBQzFfM0RfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV8zRF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgIDgJLyogQUlGMURBQzFfM0RfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV8zRF9FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEJLyogQUlGMURBQzFfM0RfRU5BICovCisKKy8qCisgKiBSMTA1OCAoMHg0MjIpIC0gQUlGMSBEQUMyIEZpbHRlcnMgKDEpCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX01VVEUgICAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBBSUYxREFDMl9NVVRFICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9NVVRFX01BU0sgICAgICAgICAgICAgICAweDAyMDAJLyogQUlGMURBQzJfTVVURSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICA5CS8qIEFJRjFEQUMyX01VVEUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxREFDMl9NVVRFICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9NT05PICAgICAgICAgICAgICAgICAgICAweDAwODAJLyogQUlGMURBQzJfTU9OTyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfTU9OT19NQVNLICAgICAgICAgICAgICAgMHgwMDgwCS8qIEFJRjFEQUMyX01PTk8gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX01PTk9fU0hJRlQgICAgICAgICAgICAgICAgICAgNwkvKiBBSUYxREFDMl9NT05PICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9NT05PX1dJRFRIICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMURBQzJfTU9OTyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfTVVURVJBVEUgICAgICAgICAgICAgICAgMHgwMDIwCS8qIEFJRjFEQUMyX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9NVVRFUkFURV9NQVNLICAgICAgICAgICAweDAwMjAJLyogQUlGMURBQzJfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX01VVEVSQVRFX1NISUZUICAgICAgICAgICAgICAgNQkvKiBBSUYxREFDMl9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfTVVURVJBVEVfV0lEVEggICAgICAgICAgICAgICAxCS8qIEFJRjFEQUMyX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9VTk1VVEVfUkFNUCAgICAgICAgICAgICAweDAwMTAJLyogQUlGMURBQzJfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX1VOTVVURV9SQU1QX01BU0sgICAgICAgIDB4MDAxMAkvKiBBSUYxREFDMl9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfVU5NVVRFX1JBTVBfU0hJRlQgICAgICAgICAgICA0CS8qIEFJRjFEQUMyX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9VTk1VVEVfUkFNUF9XSURUSCAgICAgICAgICAgIDEJLyogQUlGMURBQzJfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0RFRU1QX01BU0sgICAgICAgICAgICAgIDB4MDAwNgkvKiBBSUYxREFDMl9ERUVNUCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9ERUVNUF9TSElGVCAgICAgICAgICAgICAgICAgIDEJLyogQUlGMURBQzJfREVFTVAgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfREVFTVBfV0lEVEggICAgICAgICAgICAgICAgICAyCS8qIEFJRjFEQUMyX0RFRU1QIC0gWzI6MV0gKi8KKworLyoKKyAqIFIxMDU5ICgweDQyMykgLSBBSUYxIERBQzIgRmlsdGVycyAoMikKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfM0RfR0FJTl9NQVNLICAgICAgICAgICAgMHgzRTAwCS8qIEFJRjFEQUMyXzNEX0dBSU4gLSBbMTM6OV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyXzNEX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgOQkvKiBBSUYxREFDMl8zRF9HQUlOIC0gWzEzOjldICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl8zRF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgIDUJLyogQUlGMURBQzJfM0RfR0FJTiAtIFsxMzo5XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfM0RfRU5BICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjFEQUMyXzNEX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfM0RfRU5BX01BU0sgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjFEQUMyXzNEX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfM0RfRU5BX1NISUZUICAgICAgICAgICAgICAgICA4CS8qIEFJRjFEQUMyXzNEX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfM0RfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAxCS8qIEFJRjFEQUMyXzNEX0VOQSAqLworCisvKgorICogUjEwODggKDB4NDQwKSAtIEFJRjEgRFJDMSAoMSkKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfU0lHX0RFVF9STVNfTUFTSyAgICAgICAgMHhGODAwCS8qIEFJRjFEUkMxX1NJR19ERVRfUk1TIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfU0lHX0RFVF9STVNfU0hJRlQgICAgICAgICAgIDExCS8qIEFJRjFEUkMxX1NJR19ERVRfUk1TIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfU0lHX0RFVF9STVNfV0lEVEggICAgICAgICAgICA1CS8qIEFJRjFEUkMxX1NJR19ERVRfUk1TIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfU0lHX0RFVF9QS19NQVNLICAgICAgICAgMHgwNjAwCS8qIEFJRjFEUkMxX1NJR19ERVRfUEsgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX1NJR19ERVRfUEtfU0hJRlQgICAgICAgICAgICAgOQkvKiBBSUYxRFJDMV9TSUdfREVUX1BLIC0gWzEwOjldICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9TSUdfREVUX1BLX1dJRFRIICAgICAgICAgICAgIDIJLyogQUlGMURSQzFfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfTkdfRU5BICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjFEUkMxX05HX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfTkdfRU5BX01BU0sgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjFEUkMxX05HX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfTkdfRU5BX1NISUZUICAgICAgICAgICAgICAgICA4CS8qIEFJRjFEUkMxX05HX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfTkdfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAxCS8qIEFJRjFEUkMxX05HX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfU0lHX0RFVF9NT0RFICAgICAgICAgICAgMHgwMDgwCS8qIEFJRjFEUkMxX1NJR19ERVRfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfU0lHX0RFVF9NT0RFX01BU0sgICAgICAgMHgwMDgwCS8qIEFJRjFEUkMxX1NJR19ERVRfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfU0lHX0RFVF9NT0RFX1NISUZUICAgICAgICAgICA3CS8qIEFJRjFEUkMxX1NJR19ERVRfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfU0lHX0RFVF9NT0RFX1dJRFRIICAgICAgICAgICAxCS8qIEFJRjFEUkMxX1NJR19ERVRfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfU0lHX0RFVCAgICAgICAgICAgICAgICAgMHgwMDQwCS8qIEFJRjFEUkMxX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX1NJR19ERVRfTUFTSyAgICAgICAgICAgIDB4MDA0MAkvKiBBSUYxRFJDMV9TSUdfREVUICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9TSUdfREVUX1NISUZUICAgICAgICAgICAgICAgIDYJLyogQUlGMURSQzFfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfU0lHX0RFVF9XSURUSCAgICAgICAgICAgICAgICAxCS8qIEFJRjFEUkMxX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0tORUUyX09QX0VOQSAgICAgICAgICAgIDB4MDAyMAkvKiBBSUYxRFJDMV9LTkVFMl9PUF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0tORUUyX09QX0VOQV9NQVNLICAgICAgIDB4MDAyMAkvKiBBSUYxRFJDMV9LTkVFMl9PUF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0tORUUyX09QX0VOQV9TSElGVCAgICAgICAgICAgNQkvKiBBSUYxRFJDMV9LTkVFMl9PUF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0tORUUyX09QX0VOQV9XSURUSCAgICAgICAgICAgMQkvKiBBSUYxRFJDMV9LTkVFMl9PUF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX1FSICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBBSUYxRFJDMV9RUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfUVJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDEwCS8qIEFJRjFEUkMxX1FSICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9RUl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDQJLyogQUlGMURSQzFfUVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX1FSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYxRFJDMV9RUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfQU5USUNMSVAgICAgICAgICAgICAgICAgMHgwMDA4CS8qIEFJRjFEUkMxX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9BTlRJQ0xJUF9NQVNLICAgICAgICAgICAweDAwMDgJLyogQUlGMURSQzFfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0FOVElDTElQX1NISUZUICAgICAgICAgICAgICAgMwkvKiBBSUYxRFJDMV9BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfQU5USUNMSVBfV0lEVEggICAgICAgICAgICAgICAxCS8qIEFJRjFEUkMxX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9EUkNfRU5BICAgICAgICAgICAgICAgICAweDAwMDQJLyogQUlGMURBQzFfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRFJDX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDA0CS8qIEFJRjFEQUMxX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgMgkvKiBBSUYxREFDMV9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEJLyogQUlGMURBQzFfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzFMX0RSQ19FTkEgICAgICAgICAgICAgICAgMHgwMDAyCS8qIEFJRjFBREMxTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMUxfRFJDX0VOQV9NQVNLICAgICAgICAgICAweDAwMDIJLyogQUlGMUFEQzFMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMxTF9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgMQkvKiBBSUYxQURDMUxfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzFMX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAxCS8qIEFJRjFBREMxTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMVJfRFJDX0VOQSAgICAgICAgICAgICAgICAweDAwMDEJLyogQUlGMUFEQzFSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMxUl9EUkNfRU5BX01BU0sgICAgICAgICAgIDB4MDAwMQkvKiBBSUYxQURDMVJfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzFSX0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAwCS8qIEFJRjFBREMxUl9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMVJfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgIDEJLyogQUlGMUFEQzFSX0RSQ19FTkEgKi8KKworLyoKKyAqIFIxMDg5ICgweDQ0MSkgLSBBSUYxIERSQzEgKDIpCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0FUS19NQVNLICAgICAgICAgICAgICAgIDB4MUUwMAkvKiBBSUYxRFJDMV9BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0FUS19TSElGVCAgICAgICAgICAgICAgICAgICAgOQkvKiBBSUYxRFJDMV9BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0FUS19XSURUSCAgICAgICAgICAgICAgICAgICAgNAkvKiBBSUYxRFJDMV9BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0RDWV9NQVNLICAgICAgICAgICAgICAgIDB4MDFFMAkvKiBBSUYxRFJDMV9EQ1kgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfRENZX1NISUZUICAgICAgICAgICAgICAgICAgICA1CS8qIEFJRjFEUkMxX0RDWSAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9EQ1lfV0lEVEggICAgICAgICAgICAgICAgICAgIDQJLyogQUlGMURSQzFfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX01JTkdBSU5fTUFTSyAgICAgICAgICAgIDB4MDAxQwkvKiBBSUYxRFJDMV9NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAgICAgMgkvKiBBSUYxRFJDMV9NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX01JTkdBSU5fV0lEVEggICAgICAgICAgICAgICAgMwkvKiBBSUYxRFJDMV9NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX01BWEdBSU5fTUFTSyAgICAgICAgICAgIDB4MDAwMwkvKiBBSUYxRFJDMV9NQVhHQUlOIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX01BWEdBSU5fU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYxRFJDMV9NQVhHQUlOIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX01BWEdBSU5fV0lEVEggICAgICAgICAgICAgICAgMgkvKiBBSUYxRFJDMV9NQVhHQUlOIC0gWzE6MF0gKi8KKworLyoKKyAqIFIxMDkwICgweDQ0MikgLSBBSUYxIERSQzEgKDMpCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX05HX01JTkdBSU5fTUFTSyAgICAgICAgIDB4RjAwMAkvKiBBSUYxRFJDMV9OR19NSU5HQUlOIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfTkdfTUlOR0FJTl9TSElGVCAgICAgICAgICAgIDEyCS8qIEFJRjFEUkMxX05HX01JTkdBSU4gLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9OR19NSU5HQUlOX1dJRFRIICAgICAgICAgICAgIDQJLyogQUlGMURSQzFfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX05HX0VYUF9NQVNLICAgICAgICAgICAgIDB4MEMwMAkvKiBBSUYxRFJDMV9OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9OR19FWFBfU0hJRlQgICAgICAgICAgICAgICAgMTAJLyogQUlGMURSQzFfTkdfRVhQIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfTkdfRVhQX1dJRFRIICAgICAgICAgICAgICAgICAyCS8qIEFJRjFEUkMxX05HX0VYUCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX1FSX1RIUl9NQVNLICAgICAgICAgICAgIDB4MDMwMAkvKiBBSUYxRFJDMV9RUl9USFIgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfUVJfVEhSX1NISUZUICAgICAgICAgICAgICAgICA4CS8qIEFJRjFEUkMxX1FSX1RIUiAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9RUl9USFJfV0lEVEggICAgICAgICAgICAgICAgIDIJLyogQUlGMURSQzFfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX1FSX0RDWV9NQVNLICAgICAgICAgICAgIDB4MDBDMAkvKiBBSUYxRFJDMV9RUl9EQ1kgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfUVJfRENZX1NISUZUICAgICAgICAgICAgICAgICA2CS8qIEFJRjFEUkMxX1FSX0RDWSAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9RUl9EQ1lfV0lEVEggICAgICAgICAgICAgICAgIDIJLyogQUlGMURSQzFfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0hJX0NPTVBfTUFTSyAgICAgICAgICAgIDB4MDAzOAkvKiBBSUYxRFJDMV9ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0hJX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgMwkvKiBBSUYxRFJDMV9ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0hJX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgMwkvKiBBSUYxRFJDMV9ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0xPX0NPTVBfTUFTSyAgICAgICAgICAgIDB4MDAwNwkvKiBBSUYxRFJDMV9MT19DT01QIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0xPX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYxRFJDMV9MT19DT01QIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0xPX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgMwkvKiBBSUYxRFJDMV9MT19DT01QIC0gWzI6MF0gKi8KKworLyoKKyAqIFIxMDkxICgweDQ0MykgLSBBSUYxIERSQzEgKDQpCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0tORUVfSVBfTUFTSyAgICAgICAgICAgIDB4MDdFMAkvKiBBSUYxRFJDMV9LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9LTkVFX0lQX1NISUZUICAgICAgICAgICAgICAgIDUJLyogQUlGMURSQzFfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfS05FRV9JUF9XSURUSCAgICAgICAgICAgICAgICA2CS8qIEFJRjFEUkMxX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0tORUVfT1BfTUFTSyAgICAgICAgICAgIDB4MDAxRgkvKiBBSUYxRFJDMV9LTkVFX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0tORUVfT1BfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYxRFJDMV9LTkVFX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0tORUVfT1BfV0lEVEggICAgICAgICAgICAgICAgNQkvKiBBSUYxRFJDMV9LTkVFX09QIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMDkyICgweDQ0NCkgLSBBSUYxIERSQzEgKDUpCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0tORUUyX0lQX01BU0sgICAgICAgICAgIDB4MDNFMAkvKiBBSUYxRFJDMV9LTkVFMl9JUCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9LTkVFMl9JUF9TSElGVCAgICAgICAgICAgICAgIDUJLyogQUlGMURSQzFfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfS05FRTJfSVBfV0lEVEggICAgICAgICAgICAgICA1CS8qIEFJRjFEUkMxX0tORUUyX0lQIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX0tORUUyX09QX01BU0sgICAgICAgICAgIDB4MDAxRgkvKiBBSUYxRFJDMV9LTkVFMl9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9LTkVFMl9PUF9TSElGVCAgICAgICAgICAgICAgIDAJLyogQUlGMURSQzFfS05FRTJfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfS05FRTJfT1BfV0lEVEggICAgICAgICAgICAgICA1CS8qIEFJRjFEUkMxX0tORUUyX09QIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMTA0ICgweDQ1MCkgLSBBSUYxIERSQzIgKDEpCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1NJR19ERVRfUk1TX01BU0sgICAgICAgIDB4RjgwMAkvKiBBSUYxRFJDMl9TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1NJR19ERVRfUk1TX1NISUZUICAgICAgICAgICAxMQkvKiBBSUYxRFJDMl9TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1NJR19ERVRfUk1TX1dJRFRIICAgICAgICAgICAgNQkvKiBBSUYxRFJDMl9TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1NJR19ERVRfUEtfTUFTSyAgICAgICAgIDB4MDYwMAkvKiBBSUYxRFJDMl9TSUdfREVUX1BLIC0gWzEwOjldICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9TSUdfREVUX1BLX1NISUZUICAgICAgICAgICAgIDkJLyogQUlGMURSQzJfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzJfU0lHX0RFVF9QS19XSURUSCAgICAgICAgICAgICAyCS8qIEFJRjFEUkMyX1NJR19ERVRfUEsgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX05HX0VOQSAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBBSUYxRFJDMl9OR19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX05HX0VOQV9NQVNLICAgICAgICAgICAgIDB4MDEwMAkvKiBBSUYxRFJDMl9OR19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX05HX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgOAkvKiBBSUYxRFJDMl9OR19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX05HX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMQkvKiBBSUYxRFJDMl9OR19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1NJR19ERVRfTU9ERSAgICAgICAgICAgIDB4MDA4MAkvKiBBSUYxRFJDMl9TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1NJR19ERVRfTU9ERV9NQVNLICAgICAgIDB4MDA4MAkvKiBBSUYxRFJDMl9TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1NJR19ERVRfTU9ERV9TSElGVCAgICAgICAgICAgNwkvKiBBSUYxRFJDMl9TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1NJR19ERVRfTU9ERV9XSURUSCAgICAgICAgICAgMQkvKiBBSUYxRFJDMl9TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1NJR19ERVQgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBBSUYxRFJDMl9TSUdfREVUICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9TSUdfREVUX01BU0sgICAgICAgICAgICAweDAwNDAJLyogQUlGMURSQzJfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzJfU0lHX0RFVF9TSElGVCAgICAgICAgICAgICAgICA2CS8qIEFJRjFEUkMyX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1NJR19ERVRfV0lEVEggICAgICAgICAgICAgICAgMQkvKiBBSUYxRFJDMl9TSUdfREVUICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9LTkVFMl9PUF9FTkEgICAgICAgICAgICAweDAwMjAJLyogQUlGMURSQzJfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9LTkVFMl9PUF9FTkFfTUFTSyAgICAgICAweDAwMjAJLyogQUlGMURSQzJfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9LTkVFMl9PUF9FTkFfU0hJRlQgICAgICAgICAgIDUJLyogQUlGMURSQzJfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9LTkVFMl9PUF9FTkFfV0lEVEggICAgICAgICAgIDEJLyogQUlGMURSQzJfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9RUiAgICAgICAgICAgICAgICAgICAgICAweDAwMTAJLyogQUlGMURSQzJfUVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1FSX01BU0sgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBBSUYxRFJDMl9RUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzJfUVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICA0CS8qIEFJRjFEUkMyX1FSICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9RUl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMURSQzJfUVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX0FOVElDTElQICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBBSUYxRFJDMl9BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzJfQU5USUNMSVBfTUFTSyAgICAgICAgICAgMHgwMDA4CS8qIEFJRjFEUkMyX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9BTlRJQ0xJUF9TSElGVCAgICAgICAgICAgICAgIDMJLyogQUlGMURSQzJfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX0FOVElDTElQX1dJRFRIICAgICAgICAgICAgICAgMQkvKiBBSUYxRFJDMl9BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRFJDX0VOQSAgICAgICAgICAgICAgICAgMHgwMDA0CS8qIEFJRjFEQUMyX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0RSQ19FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwNAkvKiBBSUYxREFDMl9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgIDIJLyogQUlGMURBQzJfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxCS8qIEFJRjFEQUMyX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyTF9EUkNfRU5BICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBBSUYxQURDMkxfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzJMX0RSQ19FTkFfTUFTSyAgICAgICAgICAgMHgwMDAyCS8qIEFJRjFBREMyTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMkxfRFJDX0VOQV9TSElGVCAgICAgICAgICAgICAgIDEJLyogQUlGMUFEQzJMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyTF9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgMQkvKiBBSUYxQURDMkxfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzJSX0RSQ19FTkEgICAgICAgICAgICAgICAgMHgwMDAxCS8qIEFJRjFBREMyUl9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxQURDMlJfRFJDX0VOQV9NQVNLICAgICAgICAgICAweDAwMDEJLyogQUlGMUFEQzJSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFBREMyUl9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgMAkvKiBBSUYxQURDMlJfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMUFEQzJSX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAxCS8qIEFJRjFBREMyUl9EUkNfRU5BICovCisKKy8qCisgKiBSMTEwNSAoMHg0NTEpIC0gQUlGMSBEUkMyICgyKQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9BVEtfTUFTSyAgICAgICAgICAgICAgICAweDFFMDAJLyogQUlGMURSQzJfQVRLIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9BVEtfU0hJRlQgICAgICAgICAgICAgICAgICAgIDkJLyogQUlGMURSQzJfQVRLIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9BVEtfV0lEVEggICAgICAgICAgICAgICAgICAgIDQJLyogQUlGMURSQzJfQVRLIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9EQ1lfTUFTSyAgICAgICAgICAgICAgICAweDAxRTAJLyogQUlGMURSQzJfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX0RDWV9TSElGVCAgICAgICAgICAgICAgICAgICAgNQkvKiBBSUYxRFJDMl9EQ1kgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzJfRENZX1dJRFRIICAgICAgICAgICAgICAgICAgICA0CS8qIEFJRjFEUkMyX0RDWSAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9NSU5HQUlOX01BU0sgICAgICAgICAgICAweDAwMUMJLyogQUlGMURSQzJfTUlOR0FJTiAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9NSU5HQUlOX1NISUZUICAgICAgICAgICAgICAgIDIJLyogQUlGMURSQzJfTUlOR0FJTiAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9NSU5HQUlOX1dJRFRIICAgICAgICAgICAgICAgIDMJLyogQUlGMURSQzJfTUlOR0FJTiAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9NQVhHQUlOX01BU0sgICAgICAgICAgICAweDAwMDMJLyogQUlGMURSQzJfTUFYR0FJTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9NQVhHQUlOX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMURSQzJfTUFYR0FJTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9NQVhHQUlOX1dJRFRIICAgICAgICAgICAgICAgIDIJLyogQUlGMURSQzJfTUFYR0FJTiAtIFsxOjBdICovCisKKy8qCisgKiBSMTEwNiAoMHg0NTIpIC0gQUlGMSBEUkMyICgzKQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9OR19NSU5HQUlOX01BU0sgICAgICAgICAweEYwMDAJLyogQUlGMURSQzJfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX05HX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAxMgkvKiBBSUYxRFJDMl9OR19NSU5HQUlOIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzJfTkdfTUlOR0FJTl9XSURUSCAgICAgICAgICAgICA0CS8qIEFJRjFEUkMyX05HX01JTkdBSU4gLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9OR19FWFBfTUFTSyAgICAgICAgICAgICAweDBDMDAJLyogQUlGMURSQzJfTkdfRVhQIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzJfTkdfRVhQX1NISUZUICAgICAgICAgICAgICAgIDEwCS8qIEFJRjFEUkMyX05HX0VYUCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX05HX0VYUF9XSURUSCAgICAgICAgICAgICAgICAgMgkvKiBBSUYxRFJDMl9OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9RUl9USFJfTUFTSyAgICAgICAgICAgICAweDAzMDAJLyogQUlGMURSQzJfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1FSX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgOAkvKiBBSUYxRFJDMl9RUl9USFIgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzJfUVJfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAyCS8qIEFJRjFEUkMyX1FSX1RIUiAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9RUl9EQ1lfTUFTSyAgICAgICAgICAgICAweDAwQzAJLyogQUlGMURSQzJfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1FSX0RDWV9TSElGVCAgICAgICAgICAgICAgICAgNgkvKiBBSUYxRFJDMl9RUl9EQ1kgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzJfUVJfRENZX1dJRFRIICAgICAgICAgICAgICAgICAyCS8qIEFJRjFEUkMyX1FSX0RDWSAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9ISV9DT01QX01BU0sgICAgICAgICAgICAweDAwMzgJLyogQUlGMURSQzJfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9ISV9DT01QX1NISUZUICAgICAgICAgICAgICAgIDMJLyogQUlGMURSQzJfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9ISV9DT01QX1dJRFRIICAgICAgICAgICAgICAgIDMJLyogQUlGMURSQzJfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9MT19DT01QX01BU0sgICAgICAgICAgICAweDAwMDcJLyogQUlGMURSQzJfTE9fQ09NUCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9MT19DT01QX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMURSQzJfTE9fQ09NUCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9MT19DT01QX1dJRFRIICAgICAgICAgICAgICAgIDMJLyogQUlGMURSQzJfTE9fQ09NUCAtIFsyOjBdICovCisKKy8qCisgKiBSMTEwNyAoMHg0NTMpIC0gQUlGMSBEUkMyICg0KQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9LTkVFX0lQX01BU0sgICAgICAgICAgICAweDA3RTAJLyogQUlGMURSQzJfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzJfS05FRV9JUF9TSElGVCAgICAgICAgICAgICAgICA1CS8qIEFJRjFEUkMyX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX0tORUVfSVBfV0lEVEggICAgICAgICAgICAgICAgNgkvKiBBSUYxRFJDMl9LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9LTkVFX09QX01BU0sgICAgICAgICAgICAweDAwMUYJLyogQUlGMURSQzJfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9LTkVFX09QX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMURSQzJfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9LTkVFX09QX1dJRFRIICAgICAgICAgICAgICAgIDUJLyogQUlGMURSQzJfS05FRV9PUCAtIFs0OjBdICovCisKKy8qCisgKiBSMTEwOCAoMHg0NTQpIC0gQUlGMSBEUkMyICg1KQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9LTkVFMl9JUF9NQVNLICAgICAgICAgICAweDAzRTAJLyogQUlGMURSQzJfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzJfS05FRTJfSVBfU0hJRlQgICAgICAgICAgICAgICA1CS8qIEFJRjFEUkMyX0tORUUyX0lQIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX0tORUUyX0lQX1dJRFRIICAgICAgICAgICAgICAgNQkvKiBBSUYxRFJDMl9LTkVFMl9JUCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9LTkVFMl9PUF9NQVNLICAgICAgICAgICAweDAwMUYJLyogQUlGMURSQzJfS05FRTJfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzJfS05FRTJfT1BfU0hJRlQgICAgICAgICAgICAgICAwCS8qIEFJRjFEUkMyX0tORUUyX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX0tORUUyX09QX1dJRFRIICAgICAgICAgICAgICAgNQkvKiBBSUYxRFJDMl9LTkVFMl9PUCAtIFs0OjBdICovCisKKy8qCisgKiBSMTE1MiAoMHg0ODApIC0gQUlGMSBEQUMxIEVRIEdhaW5zICgxKQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CMV9HQUlOX01BU0sgICAgICAgICAweEY4MDAJLyogQUlGMURBQzFfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0IxX0dBSU5fU0hJRlQgICAgICAgICAgICAxMQkvKiBBSUYxREFDMV9FUV9CMV9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjFfR0FJTl9XSURUSCAgICAgICAgICAgICA1CS8qIEFJRjFEQUMxX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CMl9HQUlOX01BU0sgICAgICAgICAweDA3QzAJLyogQUlGMURBQzFfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjJfR0FJTl9TSElGVCAgICAgICAgICAgICA2CS8qIEFJRjFEQUMxX0VRX0IyX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0IyX0dBSU5fV0lEVEggICAgICAgICAgICAgNQkvKiBBSUYxREFDMV9FUV9CMl9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CM19HQUlOX01BU0sgICAgICAgICAweDAwM0UJLyogQUlGMURBQzFfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CM19HQUlOX1NISUZUICAgICAgICAgICAgIDEJLyogQUlGMURBQzFfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CM19HQUlOX1dJRFRIICAgICAgICAgICAgIDUJLyogQUlGMURBQzFfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9FTkEgICAgICAgICAgICAgICAgICAweDAwMDEJLyogQUlGMURBQzFfRVFfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9FTkFfTUFTSyAgICAgICAgICAgICAweDAwMDEJLyogQUlGMURBQzFfRVFfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzFfRVFfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEJLyogQUlGMURBQzFfRVFfRU5BICovCisKKy8qCisgKiBSMTE1MyAoMHg0ODEpIC0gQUlGMSBEQUMxIEVRIEdhaW5zICgyKQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CNF9HQUlOX01BU0sgICAgICAgICAweEY4MDAJLyogQUlGMURBQzFfRVFfQjRfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0I0X0dBSU5fU0hJRlQgICAgICAgICAgICAxMQkvKiBBSUYxREFDMV9FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjRfR0FJTl9XSURUSCAgICAgICAgICAgICA1CS8qIEFJRjFEQUMxX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CNV9HQUlOX01BU0sgICAgICAgICAweDA3QzAJLyogQUlGMURBQzFfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjVfR0FJTl9TSElGVCAgICAgICAgICAgICA2CS8qIEFJRjFEQUMxX0VRX0I1X0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0I1X0dBSU5fV0lEVEggICAgICAgICAgICAgNQkvKiBBSUYxREFDMV9FUV9CNV9HQUlOIC0gWzEwOjZdICovCisKKy8qCisgKiBSMTE1NCAoMHg0ODIpIC0gQUlGMSBEQUMxIEVRIEJhbmQgMSBBCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0IxX0FfTUFTSyAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYxREFDMV9FUV9CMV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CMV9BX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzFfRVFfQjFfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjFfQV9XSURUSCAgICAgICAgICAgICAgIDE2CS8qIEFJRjFEQUMxX0VRX0IxX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTU1ICgweDQ4MykgLSBBSUYxIERBQzEgRVEgQmFuZCAxIEIKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjFfQl9NQVNLICAgICAgICAgICAgMHhGRkZGCS8qIEFJRjFEQUMxX0VRX0IxX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0IxX0JfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMV9FUV9CMV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CMV9CX1dJRFRIICAgICAgICAgICAgICAgMTYJLyogQUlGMURBQzFfRVFfQjFfQiAtIFsxNTowXSAqLworCisvKgorICogUjExNTYgKDB4NDg0KSAtIEFJRjEgREFDMSBFUSBCYW5kIDEgUEcKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjFfUEdfTUFTSyAgICAgICAgICAgMHhGRkZGCS8qIEFJRjFEQUMxX0VRX0IxX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CMV9QR19TSElGVCAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzFfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0IxX1BHX1dJRFRIICAgICAgICAgICAgICAxNgkvKiBBSUYxREFDMV9FUV9CMV9QRyAtIFsxNTowXSAqLworCisvKgorICogUjExNTcgKDB4NDg1KSAtIEFJRjEgREFDMSBFUSBCYW5kIDIgQQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CMl9BX01BU0sgICAgICAgICAgICAweEZGRkYJLyogQUlGMURBQzFfRVFfQjJfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjJfQV9TSElGVCAgICAgICAgICAgICAgICAwCS8qIEFJRjFEQUMxX0VRX0IyX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0IyX0FfV0lEVEggICAgICAgICAgICAgICAxNgkvKiBBSUYxREFDMV9FUV9CMl9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE1OCAoMHg0ODYpIC0gQUlGMSBEQUMxIEVRIEJhbmQgMiBCCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0IyX0JfTUFTSyAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYxREFDMV9FUV9CMl9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CMl9CX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzFfRVFfQjJfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjJfQl9XSURUSCAgICAgICAgICAgICAgIDE2CS8qIEFJRjFEQUMxX0VRX0IyX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTU5ICgweDQ4NykgLSBBSUYxIERBQzEgRVEgQmFuZCAyIEMKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjJfQ19NQVNLICAgICAgICAgICAgMHhGRkZGCS8qIEFJRjFEQUMxX0VRX0IyX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0IyX0NfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMV9FUV9CMl9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CMl9DX1dJRFRIICAgICAgICAgICAgICAgMTYJLyogQUlGMURBQzFfRVFfQjJfQyAtIFsxNTowXSAqLworCisvKgorICogUjExNjAgKDB4NDg4KSAtIEFJRjEgREFDMSBFUSBCYW5kIDIgUEcKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjJfUEdfTUFTSyAgICAgICAgICAgMHhGRkZGCS8qIEFJRjFEQUMxX0VRX0IyX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CMl9QR19TSElGVCAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzFfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0IyX1BHX1dJRFRIICAgICAgICAgICAgICAxNgkvKiBBSUYxREFDMV9FUV9CMl9QRyAtIFsxNTowXSAqLworCisvKgorICogUjExNjEgKDB4NDg5KSAtIEFJRjEgREFDMSBFUSBCYW5kIDMgQQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CM19BX01BU0sgICAgICAgICAgICAweEZGRkYJLyogQUlGMURBQzFfRVFfQjNfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjNfQV9TSElGVCAgICAgICAgICAgICAgICAwCS8qIEFJRjFEQUMxX0VRX0IzX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0IzX0FfV0lEVEggICAgICAgICAgICAgICAxNgkvKiBBSUYxREFDMV9FUV9CM19BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE2MiAoMHg0OEEpIC0gQUlGMSBEQUMxIEVRIEJhbmQgMyBCCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0IzX0JfTUFTSyAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYxREFDMV9FUV9CM19CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CM19CX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzFfRVFfQjNfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjNfQl9XSURUSCAgICAgICAgICAgICAgIDE2CS8qIEFJRjFEQUMxX0VRX0IzX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTYzICgweDQ4QikgLSBBSUYxIERBQzEgRVEgQmFuZCAzIEMKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjNfQ19NQVNLICAgICAgICAgICAgMHhGRkZGCS8qIEFJRjFEQUMxX0VRX0IzX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0IzX0NfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMV9FUV9CM19DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CM19DX1dJRFRIICAgICAgICAgICAgICAgMTYJLyogQUlGMURBQzFfRVFfQjNfQyAtIFsxNTowXSAqLworCisvKgorICogUjExNjQgKDB4NDhDKSAtIEFJRjEgREFDMSBFUSBCYW5kIDMgUEcKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjNfUEdfTUFTSyAgICAgICAgICAgMHhGRkZGCS8qIEFJRjFEQUMxX0VRX0IzX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CM19QR19TSElGVCAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzFfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0IzX1BHX1dJRFRIICAgICAgICAgICAgICAxNgkvKiBBSUYxREFDMV9FUV9CM19QRyAtIFsxNTowXSAqLworCisvKgorICogUjExNjUgKDB4NDhEKSAtIEFJRjEgREFDMSBFUSBCYW5kIDQgQQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CNF9BX01BU0sgICAgICAgICAgICAweEZGRkYJLyogQUlGMURBQzFfRVFfQjRfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjRfQV9TSElGVCAgICAgICAgICAgICAgICAwCS8qIEFJRjFEQUMxX0VRX0I0X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0I0X0FfV0lEVEggICAgICAgICAgICAgICAxNgkvKiBBSUYxREFDMV9FUV9CNF9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE2NiAoMHg0OEUpIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBCCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0I0X0JfTUFTSyAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYxREFDMV9FUV9CNF9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CNF9CX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzFfRVFfQjRfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjRfQl9XSURUSCAgICAgICAgICAgICAgIDE2CS8qIEFJRjFEQUMxX0VRX0I0X0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTY3ICgweDQ4RikgLSBBSUYxIERBQzEgRVEgQmFuZCA0IEMKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjRfQ19NQVNLICAgICAgICAgICAgMHhGRkZGCS8qIEFJRjFEQUMxX0VRX0I0X0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0I0X0NfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMV9FUV9CNF9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CNF9DX1dJRFRIICAgICAgICAgICAgICAgMTYJLyogQUlGMURBQzFfRVFfQjRfQyAtIFsxNTowXSAqLworCisvKgorICogUjExNjggKDB4NDkwKSAtIEFJRjEgREFDMSBFUSBCYW5kIDQgUEcKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjRfUEdfTUFTSyAgICAgICAgICAgMHhGRkZGCS8qIEFJRjFEQUMxX0VRX0I0X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CNF9QR19TSElGVCAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzFfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0I0X1BHX1dJRFRIICAgICAgICAgICAgICAxNgkvKiBBSUYxREFDMV9FUV9CNF9QRyAtIFsxNTowXSAqLworCisvKgorICogUjExNjkgKDB4NDkxKSAtIEFJRjEgREFDMSBFUSBCYW5kIDUgQQorICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CNV9BX01BU0sgICAgICAgICAgICAweEZGRkYJLyogQUlGMURBQzFfRVFfQjVfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjVfQV9TSElGVCAgICAgICAgICAgICAgICAwCS8qIEFJRjFEQUMxX0VRX0I1X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0I1X0FfV0lEVEggICAgICAgICAgICAgICAxNgkvKiBBSUYxREFDMV9FUV9CNV9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE3MCAoMHg0OTIpIC0gQUlGMSBEQUMxIEVRIEJhbmQgNSBCCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0I1X0JfTUFTSyAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYxREFDMV9FUV9CNV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CNV9CX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzFfRVFfQjVfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjVfQl9XSURUSCAgICAgICAgICAgICAgIDE2CS8qIEFJRjFEQUMxX0VRX0I1X0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTcxICgweDQ5MykgLSBBSUYxIERBQzEgRVEgQmFuZCA1IFBHCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxX0VRX0I1X1BHX01BU0sgICAgICAgICAgIDB4RkZGRgkvKiBBSUYxREFDMV9FUV9CNV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzFfRVFfQjVfUEdfU0hJRlQgICAgICAgICAgICAgICAwCS8qIEFJRjFEQUMxX0VRX0I1X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMV9FUV9CNV9QR19XSURUSCAgICAgICAgICAgICAgMTYJLyogQUlGMURBQzFfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTg0ICgweDRBMCkgLSBBSUYxIERBQzIgRVEgR2FpbnMgKDEpCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IxX0dBSU5fTUFTSyAgICAgICAgIDB4RjgwMAkvKiBBSUYxREFDMl9FUV9CMV9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjFfR0FJTl9TSElGVCAgICAgICAgICAgIDExCS8qIEFJRjFEQUMyX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CMV9HQUlOX1dJRFRIICAgICAgICAgICAgIDUJLyogQUlGMURBQzJfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IyX0dBSU5fTUFTSyAgICAgICAgIDB4MDdDMAkvKiBBSUYxREFDMl9FUV9CMl9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CMl9HQUlOX1NISUZUICAgICAgICAgICAgIDYJLyogQUlGMURBQzJfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjJfR0FJTl9XSURUSCAgICAgICAgICAgICA1CS8qIEFJRjFEQUMyX0VRX0IyX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IzX0dBSU5fTUFTSyAgICAgICAgIDB4MDAzRQkvKiBBSUYxREFDMl9FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IzX0dBSU5fU0hJRlQgICAgICAgICAgICAgMQkvKiBBSUYxREFDMl9FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IzX0dBSU5fV0lEVEggICAgICAgICAgICAgNQkvKiBBSUYxREFDMl9FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0VOQSAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYxREFDMl9FUV9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0VOQV9NQVNLICAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYxREFDMl9FUV9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMl9FUV9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMQkvKiBBSUYxREFDMl9FUV9FTkEgKi8KKworLyoKKyAqIFIxMTg1ICgweDRBMSkgLSBBSUYxIERBQzIgRVEgR2FpbnMgKDIpCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0I0X0dBSU5fTUFTSyAgICAgICAgIDB4RjgwMAkvKiBBSUYxREFDMl9FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjRfR0FJTl9TSElGVCAgICAgICAgICAgIDExCS8qIEFJRjFEQUMyX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CNF9HQUlOX1dJRFRIICAgICAgICAgICAgIDUJLyogQUlGMURBQzJfRVFfQjRfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0I1X0dBSU5fTUFTSyAgICAgICAgIDB4MDdDMAkvKiBBSUYxREFDMl9FUV9CNV9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CNV9HQUlOX1NISUZUICAgICAgICAgICAgIDYJLyogQUlGMURBQzJfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjVfR0FJTl9XSURUSCAgICAgICAgICAgICA1CS8qIEFJRjFEQUMyX0VRX0I1X0dBSU4gLSBbMTA6Nl0gKi8KKworLyoKKyAqIFIxMTg2ICgweDRBMikgLSBBSUYxIERBQzIgRVEgQmFuZCAxIEEKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjFfQV9NQVNLICAgICAgICAgICAgMHhGRkZGCS8qIEFJRjFEQUMyX0VRX0IxX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IxX0FfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMl9FUV9CMV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CMV9BX1dJRFRIICAgICAgICAgICAgICAgMTYJLyogQUlGMURBQzJfRVFfQjFfQSAtIFsxNTowXSAqLworCisvKgorICogUjExODcgKDB4NEEzKSAtIEFJRjEgREFDMiBFUSBCYW5kIDEgQgorICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CMV9CX01BU0sgICAgICAgICAgICAweEZGRkYJLyogQUlGMURBQzJfRVFfQjFfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjFfQl9TSElGVCAgICAgICAgICAgICAgICAwCS8qIEFJRjFEQUMyX0VRX0IxX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IxX0JfV0lEVEggICAgICAgICAgICAgICAxNgkvKiBBSUYxREFDMl9FUV9CMV9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE4OCAoMHg0QTQpIC0gQUlGMSBEQUMyIEVRIEJhbmQgMSBQRworICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CMV9QR19NQVNLICAgICAgICAgICAweEZGRkYJLyogQUlGMURBQzJfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IxX1BHX1NISUZUICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMl9FUV9CMV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjFfUEdfV0lEVEggICAgICAgICAgICAgIDE2CS8qIEFJRjFEQUMyX0VRX0IxX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE4OSAoMHg0QTUpIC0gQUlGMSBEQUMyIEVRIEJhbmQgMiBBCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IyX0FfTUFTSyAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYxREFDMl9FUV9CMl9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CMl9BX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzJfRVFfQjJfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjJfQV9XSURUSCAgICAgICAgICAgICAgIDE2CS8qIEFJRjFEQUMyX0VRX0IyX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTkwICgweDRBNikgLSBBSUYxIERBQzIgRVEgQmFuZCAyIEIKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjJfQl9NQVNLICAgICAgICAgICAgMHhGRkZGCS8qIEFJRjFEQUMyX0VRX0IyX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IyX0JfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMl9FUV9CMl9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CMl9CX1dJRFRIICAgICAgICAgICAgICAgMTYJLyogQUlGMURBQzJfRVFfQjJfQiAtIFsxNTowXSAqLworCisvKgorICogUjExOTEgKDB4NEE3KSAtIEFJRjEgREFDMiBFUSBCYW5kIDIgQworICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CMl9DX01BU0sgICAgICAgICAgICAweEZGRkYJLyogQUlGMURBQzJfRVFfQjJfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjJfQ19TSElGVCAgICAgICAgICAgICAgICAwCS8qIEFJRjFEQUMyX0VRX0IyX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IyX0NfV0lEVEggICAgICAgICAgICAgICAxNgkvKiBBSUYxREFDMl9FUV9CMl9DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE5MiAoMHg0QTgpIC0gQUlGMSBEQUMyIEVRIEJhbmQgMiBQRworICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CMl9QR19NQVNLICAgICAgICAgICAweEZGRkYJLyogQUlGMURBQzJfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IyX1BHX1NISUZUICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMl9FUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjJfUEdfV0lEVEggICAgICAgICAgICAgIDE2CS8qIEFJRjFEQUMyX0VRX0IyX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE5MyAoMHg0QTkpIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBBCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IzX0FfTUFTSyAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYxREFDMl9FUV9CM19BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CM19BX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzJfRVFfQjNfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjNfQV9XSURUSCAgICAgICAgICAgICAgIDE2CS8qIEFJRjFEQUMyX0VRX0IzX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTk0ICgweDRBQSkgLSBBSUYxIERBQzIgRVEgQmFuZCAzIEIKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjNfQl9NQVNLICAgICAgICAgICAgMHhGRkZGCS8qIEFJRjFEQUMyX0VRX0IzX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IzX0JfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMl9FUV9CM19CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CM19CX1dJRFRIICAgICAgICAgICAgICAgMTYJLyogQUlGMURBQzJfRVFfQjNfQiAtIFsxNTowXSAqLworCisvKgorICogUjExOTUgKDB4NEFCKSAtIEFJRjEgREFDMiBFUSBCYW5kIDMgQworICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CM19DX01BU0sgICAgICAgICAgICAweEZGRkYJLyogQUlGMURBQzJfRVFfQjNfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjNfQ19TSElGVCAgICAgICAgICAgICAgICAwCS8qIEFJRjFEQUMyX0VRX0IzX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IzX0NfV0lEVEggICAgICAgICAgICAgICAxNgkvKiBBSUYxREFDMl9FUV9CM19DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE5NiAoMHg0QUMpIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBQRworICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CM19QR19NQVNLICAgICAgICAgICAweEZGRkYJLyogQUlGMURBQzJfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0IzX1BHX1NISUZUICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMl9FUV9CM19QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjNfUEdfV0lEVEggICAgICAgICAgICAgIDE2CS8qIEFJRjFEQUMyX0VRX0IzX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE5NyAoMHg0QUQpIC0gQUlGMSBEQUMyIEVRIEJhbmQgNCBBCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0I0X0FfTUFTSyAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYxREFDMl9FUV9CNF9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CNF9BX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzJfRVFfQjRfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjRfQV9XSURUSCAgICAgICAgICAgICAgIDE2CS8qIEFJRjFEQUMyX0VRX0I0X0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTk4ICgweDRBRSkgLSBBSUYxIERBQzIgRVEgQmFuZCA0IEIKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjRfQl9NQVNLICAgICAgICAgICAgMHhGRkZGCS8qIEFJRjFEQUMyX0VRX0I0X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0I0X0JfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMl9FUV9CNF9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CNF9CX1dJRFRIICAgICAgICAgICAgICAgMTYJLyogQUlGMURBQzJfRVFfQjRfQiAtIFsxNTowXSAqLworCisvKgorICogUjExOTkgKDB4NEFGKSAtIEFJRjEgREFDMiBFUSBCYW5kIDQgQworICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CNF9DX01BU0sgICAgICAgICAgICAweEZGRkYJLyogQUlGMURBQzJfRVFfQjRfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjRfQ19TSElGVCAgICAgICAgICAgICAgICAwCS8qIEFJRjFEQUMyX0VRX0I0X0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0I0X0NfV0lEVEggICAgICAgICAgICAgICAxNgkvKiBBSUYxREFDMl9FUV9CNF9DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTIwMCAoMHg0QjApIC0gQUlGMSBEQUMyIEVRIEJhbmQgNCBQRworICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CNF9QR19NQVNLICAgICAgICAgICAweEZGRkYJLyogQUlGMURBQzJfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0I0X1BHX1NISUZUICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMl9FUV9CNF9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjRfUEdfV0lEVEggICAgICAgICAgICAgIDE2CS8qIEFJRjFEQUMyX0VRX0I0X1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTIwMSAoMHg0QjEpIC0gQUlGMSBEQUMyIEVRIEJhbmQgNSBBCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0I1X0FfTUFTSyAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYxREFDMl9FUV9CNV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CNV9BX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzJfRVFfQjVfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjVfQV9XSURUSCAgICAgICAgICAgICAgIDE2CS8qIEFJRjFEQUMyX0VRX0I1X0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMjAyICgweDRCMikgLSBBSUYxIERBQzIgRVEgQmFuZCA1IEIKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjVfQl9NQVNLICAgICAgICAgICAgMHhGRkZGCS8qIEFJRjFEQUMyX0VRX0I1X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0I1X0JfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMl9FUV9CNV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CNV9CX1dJRFRIICAgICAgICAgICAgICAgMTYJLyogQUlGMURBQzJfRVFfQjVfQiAtIFsxNTowXSAqLworCisvKgorICogUjEyMDMgKDB4NEIzKSAtIEFJRjEgREFDMiBFUSBCYW5kIDUgUEcKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURBQzJfRVFfQjVfUEdfTUFTSyAgICAgICAgICAgMHhGRkZGCS8qIEFJRjFEQUMyX0VRX0I1X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMl9FUV9CNV9QR19TSElGVCAgICAgICAgICAgICAgIDAJLyogQUlGMURBQzJfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyX0VRX0I1X1BHX1dJRFRIICAgICAgICAgICAgICAxNgkvKiBBSUYxREFDMl9FUV9CNV9QRyAtIFsxNTowXSAqLworCisvKgorICogUjEyODAgKDB4NTAwKSAtIEFJRjIgQURDIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfVlUgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBBSUYyQURDX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMkFEQ19WVSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4CS8qIEFJRjJBRENfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYyQURDX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAweDAwRkYJLyogQUlGMkFEQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMAkvKiBBSUYyQURDTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ0xfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICA4CS8qIEFJRjJBRENMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTI4MSAoMHg1MDEpIC0gQUlGMiBBREMgUmlnaHQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfVlUgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBBSUYyQURDX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMkFEQ19WVSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4CS8qIEFJRjJBRENfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYyQURDX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAweDAwRkYJLyogQUlGMkFEQ1JfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMAkvKiBBSUYyQURDUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ1JfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICA4CS8qIEFJRjJBRENSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTI4MiAoMHg1MDIpIC0gQUlGMiBEQUMgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19WVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjJEQUNfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfVlVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBBSUYyREFDX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDgJLyogQUlGMkRBQ19WVSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjJEQUNfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNMX1ZPTF9NQVNLICAgICAgICAgICAgICAgIDB4MDBGRgkvKiBBSUYyREFDTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ0xfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAwCS8qIEFJRjJEQUNMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgIDgJLyogQUlGMkRBQ0xfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMjgzICgweDUwMykgLSBBSUYyIERBQyBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19WVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjJEQUNfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfVlVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBBSUYyREFDX1ZVICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDgJLyogQUlGMkRBQ19WVSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjJEQUNfVlUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNSX1ZPTF9NQVNLICAgICAgICAgICAgICAgIDB4MDBGRgkvKiBBSUYyREFDUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ1JfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAwCS8qIEFJRjJEQUNSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgIDgJLyogQUlGMkRBQ1JfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMjk2ICgweDUxMCkgLSBBSUYyIEFEQyBGaWx0ZXJzCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfNEZTICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBBSUYyQURDXzRGUyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ180RlNfTUFTSyAgICAgICAgICAgICAgICAgMHg4MDAwCS8qIEFJRjJBRENfNEZTICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDXzRGU19TSElGVCAgICAgICAgICAgICAgICAgICAgMTUJLyogQUlGMkFEQ180RlMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfNEZTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYyQURDXzRGUyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ0xfSFBGICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCS8qIEFJRjJBRENMX0hQRiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ0xfSFBGX01BU0sgICAgICAgICAgICAgICAgMHgxMDAwCS8qIEFJRjJBRENMX0hQRiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ0xfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgIDEyCS8qIEFJRjJBRENMX0hQRiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ0xfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjJBRENMX0hQRiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ1JfSFBGICAgICAgICAgICAgICAgICAgICAgMHgwODAwCS8qIEFJRjJBRENSX0hQRiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ1JfSFBGX01BU0sgICAgICAgICAgICAgICAgMHgwODAwCS8qIEFJRjJBRENSX0hQRiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ1JfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgIDExCS8qIEFJRjJBRENSX0hQRiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ1JfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjJBRENSX0hQRiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ19IUEZfTU9ERSAgICAgICAgICAgICAgICAgMHgwMDA4CS8qIEFJRjJBRENfSFBGX01PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfSFBGX01PREVfTUFTSyAgICAgICAgICAgIDB4MDAwOAkvKiBBSUYyQURDX0hQRl9NT0RFICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDX0hQRl9NT0RFX1NISUZUICAgICAgICAgICAgICAgIDMJLyogQUlGMkFEQ19IUEZfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ19IUEZfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAxCS8qIEFJRjJBRENfSFBGX01PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENfSFBGX0NVVF9NQVNLICAgICAgICAgICAgIDB4MDAwNwkvKiBBSUYyQURDX0hQRl9DVVQgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ19IUEZfQ1VUX1NISUZUICAgICAgICAgICAgICAgICAwCS8qIEFJRjJBRENfSFBGX0NVVCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDX0hQRl9DVVRfV0lEVEggICAgICAgICAgICAgICAgIDMJLyogQUlGMkFEQ19IUEZfQ1VUIC0gWzI6MF0gKi8KKworLyoKKyAqIFIxMzEyICgweDUyMCkgLSBBSUYyIERBQyBGaWx0ZXJzICgxKQorICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX01VVEUgICAgICAgICAgICAgICAgICAgICAweDAyMDAJLyogQUlGMkRBQ19NVVRFICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX01VVEVfTUFTSyAgICAgICAgICAgICAgICAweDAyMDAJLyogQUlGMkRBQ19NVVRFICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDkJLyogQUlGMkRBQ19NVVRFICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMkRBQ19NVVRFICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX01PTk8gICAgICAgICAgICAgICAgICAgICAweDAwODAJLyogQUlGMkRBQ19NT05PICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX01PTk9fTUFTSyAgICAgICAgICAgICAgICAweDAwODAJLyogQUlGMkRBQ19NT05PICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX01PTk9fU0hJRlQgICAgICAgICAgICAgICAgICAgIDcJLyogQUlGMkRBQ19NT05PICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX01PTk9fV0lEVEggICAgICAgICAgICAgICAgICAgIDEJLyogQUlGMkRBQ19NT05PICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX01VVEVSQVRFICAgICAgICAgICAgICAgICAweDAwMjAJLyogQUlGMkRBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19NVVRFUkFURV9NQVNLICAgICAgICAgICAgMHgwMDIwCS8qIEFJRjJEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfTVVURVJBVEVfU0hJRlQgICAgICAgICAgICAgICAgNQkvKiBBSUYyREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX01VVEVSQVRFX1dJRFRIICAgICAgICAgICAgICAgIDEJLyogQUlGMkRBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19VTk1VVEVfUkFNUCAgICAgICAgICAgICAgMHgwMDEwCS8qIEFJRjJEQUNfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfVU5NVVRFX1JBTVBfTUFTSyAgICAgICAgIDB4MDAxMAkvKiBBSUYyREFDX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX1VOTVVURV9SQU1QX1NISUZUICAgICAgICAgICAgIDQJLyogQUlGMkRBQ19VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19VTk1VVEVfUkFNUF9XSURUSCAgICAgICAgICAgICAxCS8qIEFJRjJEQUNfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfREVFTVBfTUFTSyAgICAgICAgICAgICAgIDB4MDAwNgkvKiBBSUYyREFDX0RFRU1QIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfREVFTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgMQkvKiBBSUYyREFDX0RFRU1QIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfREVFTVBfV0lEVEggICAgICAgICAgICAgICAgICAgMgkvKiBBSUYyREFDX0RFRU1QIC0gWzI6MV0gKi8KKworLyoKKyAqIFIxMzEzICgweDUyMSkgLSBBSUYyIERBQyBGaWx0ZXJzICgyKQorICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDXzNEX0dBSU5fTUFTSyAgICAgICAgICAgICAweDNFMDAJLyogQUlGMkRBQ18zRF9HQUlOIC0gWzEzOjldICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDXzNEX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgIDkJLyogQUlGMkRBQ18zRF9HQUlOIC0gWzEzOjldICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDXzNEX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgIDUJLyogQUlGMkRBQ18zRF9HQUlOIC0gWzEzOjldICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDXzNEX0VOQSAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMkRBQ18zRF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfM0RfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDEwMAkvKiBBSUYyREFDXzNEX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ18zRF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICA4CS8qIEFJRjJEQUNfM0RfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDXzNEX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEJLyogQUlGMkRBQ18zRF9FTkEgKi8KKworLyoKKyAqIFIxMzQ0ICgweDU0MCkgLSBBSUYyIERSQyAoMSkKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19TSUdfREVUX1JNU19NQVNLICAgICAgICAgMHhGODAwCS8qIEFJRjJEUkNfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX1NJR19ERVRfUk1TX1NISUZUICAgICAgICAgICAgMTEJLyogQUlGMkRSQ19TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfU0lHX0RFVF9STVNfV0lEVEggICAgICAgICAgICAgNQkvKiBBSUYyRFJDX1NJR19ERVRfUk1TIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19TSUdfREVUX1BLX01BU0sgICAgICAgICAgMHgwNjAwCS8qIEFJRjJEUkNfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19TSUdfREVUX1BLX1NISUZUICAgICAgICAgICAgICA5CS8qIEFJRjJEUkNfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19TSUdfREVUX1BLX1dJRFRIICAgICAgICAgICAgICAyCS8qIEFJRjJEUkNfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19OR19FTkEgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjJEUkNfTkdfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX05HX0VOQV9NQVNLICAgICAgICAgICAgICAweDAxMDAJLyogQUlGMkRSQ19OR19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfTkdfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgOAkvKiBBSUYyRFJDX05HX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19OR19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAxCS8qIEFJRjJEUkNfTkdfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX1NJR19ERVRfTU9ERSAgICAgICAgICAgICAweDAwODAJLyogQUlGMkRSQ19TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfU0lHX0RFVF9NT0RFX01BU0sgICAgICAgIDB4MDA4MAkvKiBBSUYyRFJDX1NJR19ERVRfTU9ERSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19TSUdfREVUX01PREVfU0hJRlQgICAgICAgICAgICA3CS8qIEFJRjJEUkNfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX1NJR19ERVRfTU9ERV9XSURUSCAgICAgICAgICAgIDEJLyogQUlGMkRSQ19TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfU0lHX0RFVCAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBBSUYyRFJDX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfU0lHX0RFVF9NQVNLICAgICAgICAgICAgIDB4MDA0MAkvKiBBSUYyRFJDX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfU0lHX0RFVF9TSElGVCAgICAgICAgICAgICAgICAgNgkvKiBBSUYyRFJDX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfU0lHX0RFVF9XSURUSCAgICAgICAgICAgICAgICAgMQkvKiBBSUYyRFJDX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfS05FRTJfT1BfRU5BICAgICAgICAgICAgIDB4MDAyMAkvKiBBSUYyRFJDX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19LTkVFMl9PUF9FTkFfTUFTSyAgICAgICAgMHgwMDIwCS8qIEFJRjJEUkNfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX0tORUUyX09QX0VOQV9TSElGVCAgICAgICAgICAgIDUJLyogQUlGMkRSQ19LTkVFMl9PUF9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfS05FRTJfT1BfRU5BX1dJRFRIICAgICAgICAgICAgMQkvKiBBSUYyRFJDX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19RUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCS8qIEFJRjJEUkNfUVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfUVJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBBSUYyRFJDX1FSICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX1FSX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQJLyogQUlGMkRSQ19RUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19RUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEFJRjJEUkNfUVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfQU5USUNMSVAgICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBBSUYyRFJDX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX0FOVElDTElQX01BU0sgICAgICAgICAgICAweDAwMDgJLyogQUlGMkRSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19BTlRJQ0xJUF9TSElGVCAgICAgICAgICAgICAgICAzCS8qIEFJRjJEUkNfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfQU5USUNMSVBfV0lEVEggICAgICAgICAgICAgICAgMQkvKiBBSUYyRFJDX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0RSQ19FTkEgICAgICAgICAgICAgICAgICAweDAwMDQJLyogQUlGMkRBQ19EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0RSQ19FTkFfTUFTSyAgICAgICAgICAgICAweDAwMDQJLyogQUlGMkRBQ19EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgIDIJLyogQUlGMkRBQ19EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEJLyogQUlGMkRBQ19EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDTF9EUkNfRU5BICAgICAgICAgICAgICAgICAweDAwMDIJLyogQUlGMkFEQ0xfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ0xfRFJDX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDAyCS8qIEFJRjJBRENMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENMX0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgMQkvKiBBSUYyQURDTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDTF9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEJLyogQUlGMkFEQ0xfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ1JfRFJDX0VOQSAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIEFJRjJBRENSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJBRENSX0RSQ19FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYyQURDUl9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyQURDUl9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMkFEQ1JfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkFEQ1JfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxCS8qIEFJRjJBRENSX0RSQ19FTkEgKi8KKworLyoKKyAqIFIxMzQ1ICgweDU0MSkgLSBBSUYyIERSQyAoMikKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19BVEtfTUFTSyAgICAgICAgICAgICAgICAgMHgxRTAwCS8qIEFJRjJEUkNfQVRLIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX0FUS19TSElGVCAgICAgICAgICAgICAgICAgICAgIDkJLyogQUlGMkRSQ19BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfQVRLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNAkvKiBBSUYyRFJDX0FUSyAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19EQ1lfTUFTSyAgICAgICAgICAgICAgICAgMHgwMUUwCS8qIEFJRjJEUkNfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfRENZX1NISUZUICAgICAgICAgICAgICAgICAgICAgNQkvKiBBSUYyRFJDX0RDWSAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDQJLyogQUlGMkRSQ19EQ1kgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19NSU5HQUlOX01BU0sgICAgICAgICAgICAgMHgwMDFDCS8qIEFJRjJEUkNfTUlOR0FJTiAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAgICAgIDIJLyogQUlGMkRSQ19NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfTUlOR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgMwkvKiBBSUYyRFJDX01JTkdBSU4gLSBbNDoyXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19NQVhHQUlOX01BU0sgICAgICAgICAgICAgMHgwMDAzCS8qIEFJRjJEUkNfTUFYR0FJTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX01BWEdBSU5fU0hJRlQgICAgICAgICAgICAgICAgIDAJLyogQUlGMkRSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfTUFYR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgMgkvKiBBSUYyRFJDX01BWEdBSU4gLSBbMTowXSAqLworCisvKgorICogUjEzNDYgKDB4NTQyKSAtIEFJRjIgRFJDICgzKQorICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX05HX01JTkdBSU5fTUFTSyAgICAgICAgICAweEYwMDAJLyogQUlGMkRSQ19OR19NSU5HQUlOIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19OR19NSU5HQUlOX1NISUZUICAgICAgICAgICAgIDEyCS8qIEFJRjJEUkNfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfTkdfTUlOR0FJTl9XSURUSCAgICAgICAgICAgICAgNAkvKiBBSUYyRFJDX05HX01JTkdBSU4gLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX05HX0VYUF9NQVNLICAgICAgICAgICAgICAweDBDMDAJLyogQUlGMkRSQ19OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX05HX0VYUF9TSElGVCAgICAgICAgICAgICAgICAgMTAJLyogQUlGMkRSQ19OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX05HX0VYUF9XSURUSCAgICAgICAgICAgICAgICAgIDIJLyogQUlGMkRSQ19OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX1FSX1RIUl9NQVNLICAgICAgICAgICAgICAweDAzMDAJLyogQUlGMkRSQ19RUl9USFIgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19RUl9USFJfU0hJRlQgICAgICAgICAgICAgICAgICA4CS8qIEFJRjJEUkNfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfUVJfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgMgkvKiBBSUYyRFJDX1FSX1RIUiAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX1FSX0RDWV9NQVNLICAgICAgICAgICAgICAweDAwQzAJLyogQUlGMkRSQ19RUl9EQ1kgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19RUl9EQ1lfU0hJRlQgICAgICAgICAgICAgICAgICA2CS8qIEFJRjJEUkNfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfUVJfRENZX1dJRFRIICAgICAgICAgICAgICAgICAgMgkvKiBBSUYyRFJDX1FSX0RDWSAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX0hJX0NPTVBfTUFTSyAgICAgICAgICAgICAweDAwMzgJLyogQUlGMkRSQ19ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfSElfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgMwkvKiBBSUYyRFJDX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19ISV9DT01QX1dJRFRIICAgICAgICAgICAgICAgICAzCS8qIEFJRjJEUkNfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX0xPX0NPTVBfTUFTSyAgICAgICAgICAgICAweDAwMDcJLyogQUlGMkRSQ19MT19DT01QIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfTE9fQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgMAkvKiBBSUYyRFJDX0xPX0NPTVAgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19MT19DT01QX1dJRFRIICAgICAgICAgICAgICAgICAzCS8qIEFJRjJEUkNfTE9fQ09NUCAtIFsyOjBdICovCisKKy8qCisgKiBSMTM0NyAoMHg1NDMpIC0gQUlGMiBEUkMgKDQpCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfS05FRV9JUF9NQVNLICAgICAgICAgICAgIDB4MDdFMAkvKiBBSUYyRFJDX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfS05FRV9JUF9TSElGVCAgICAgICAgICAgICAgICAgNQkvKiBBSUYyRFJDX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfS05FRV9JUF9XSURUSCAgICAgICAgICAgICAgICAgNgkvKiBBSUYyRFJDX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfS05FRV9PUF9NQVNLICAgICAgICAgICAgIDB4MDAxRgkvKiBBSUYyRFJDX0tORUVfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19LTkVFX09QX1NISUZUICAgICAgICAgICAgICAgICAwCS8qIEFJRjJEUkNfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX0tORUVfT1BfV0lEVEggICAgICAgICAgICAgICAgIDUJLyogQUlGMkRSQ19LTkVFX09QIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMzQ4ICgweDU0NCkgLSBBSUYyIERSQyAoNSkKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19LTkVFMl9JUF9NQVNLICAgICAgICAgICAgMHgwM0UwCS8qIEFJRjJEUkNfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19LTkVFMl9JUF9TSElGVCAgICAgICAgICAgICAgICA1CS8qIEFJRjJEUkNfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19LTkVFMl9JUF9XSURUSCAgICAgICAgICAgICAgICA1CS8qIEFJRjJEUkNfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19LTkVFMl9PUF9NQVNLICAgICAgICAgICAgMHgwMDFGCS8qIEFJRjJEUkNfS05FRTJfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19LTkVFMl9PUF9TSElGVCAgICAgICAgICAgICAgICAwCS8qIEFJRjJEUkNfS05FRTJfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19LTkVFMl9PUF9XSURUSCAgICAgICAgICAgICAgICA1CS8qIEFJRjJEUkNfS05FRTJfT1AgLSBbNDowXSAqLworCisvKgorICogUjE0MDggKDB4NTgwKSAtIEFJRjIgRVEgR2FpbnMgKDEpCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjFfR0FJTl9NQVNLICAgICAgICAgIDB4RjgwMAkvKiBBSUYyREFDX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0IxX0dBSU5fU0hJRlQgICAgICAgICAgICAgMTEJLyogQUlGMkRBQ19FUV9CMV9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CMV9HQUlOX1dJRFRIICAgICAgICAgICAgICA1CS8qIEFJRjJEQUNfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjJfR0FJTl9NQVNLICAgICAgICAgIDB4MDdDMAkvKiBBSUYyREFDX0VRX0IyX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjJfR0FJTl9TSElGVCAgICAgICAgICAgICAgNgkvKiBBSUYyREFDX0VRX0IyX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjJfR0FJTl9XSURUSCAgICAgICAgICAgICAgNQkvKiBBSUYyREFDX0VRX0IyX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjNfR0FJTl9NQVNLICAgICAgICAgIDB4MDAzRQkvKiBBSUYyREFDX0VRX0IzX0dBSU4gLSBbNToxXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CM19HQUlOX1NISUZUICAgICAgICAgICAgICAxCS8qIEFJRjJEQUNfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0IzX0dBSU5fV0lEVEggICAgICAgICAgICAgIDUJLyogQUlGMkRBQ19FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfRU5BICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYyREFDX0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9FTkFfTUFTSyAgICAgICAgICAgICAgMHgwMDAxCS8qIEFJRjJEQUNfRVFfRU5BICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDAJLyogQUlGMkRBQ19FUV9FTkEgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMQkvKiBBSUYyREFDX0VRX0VOQSAqLworCisvKgorICogUjE0MDkgKDB4NTgxKSAtIEFJRjIgRVEgR2FpbnMgKDIpCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjRfR0FJTl9NQVNLICAgICAgICAgIDB4RjgwMAkvKiBBSUYyREFDX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0I0X0dBSU5fU0hJRlQgICAgICAgICAgICAgMTEJLyogQUlGMkRBQ19FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CNF9HQUlOX1dJRFRIICAgICAgICAgICAgICA1CS8qIEFJRjJEQUNfRVFfQjRfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjVfR0FJTl9NQVNLICAgICAgICAgIDB4MDdDMAkvKiBBSUYyREFDX0VRX0I1X0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjVfR0FJTl9TSElGVCAgICAgICAgICAgICAgNgkvKiBBSUYyREFDX0VRX0I1X0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjVfR0FJTl9XSURUSCAgICAgICAgICAgICAgNQkvKiBBSUYyREFDX0VRX0I1X0dBSU4gLSBbMTA6Nl0gKi8KKworLyoKKyAqIFIxNDEwICgweDU4MikgLSBBSUYyIEVRIEJhbmQgMSBBCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjFfQV9NQVNLICAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYyREFDX0VRX0IxX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjFfQV9TSElGVCAgICAgICAgICAgICAgICAgMAkvKiBBSUYyREFDX0VRX0IxX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjFfQV9XSURUSCAgICAgICAgICAgICAgICAxNgkvKiBBSUYyREFDX0VRX0IxX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDExICgweDU4MykgLSBBSUYyIEVRIEJhbmQgMSBCCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjFfQl9NQVNLICAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYyREFDX0VRX0IxX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjFfQl9TSElGVCAgICAgICAgICAgICAgICAgMAkvKiBBSUYyREFDX0VRX0IxX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjFfQl9XSURUSCAgICAgICAgICAgICAgICAxNgkvKiBBSUYyREFDX0VRX0IxX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDEyICgweDU4NCkgLSBBSUYyIEVRIEJhbmQgMSBQRworICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0IxX1BHX01BU0sgICAgICAgICAgICAweEZGRkYJLyogQUlGMkRBQ19FUV9CMV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CMV9QR19TSElGVCAgICAgICAgICAgICAgICAwCS8qIEFJRjJEQUNfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjFfUEdfV0lEVEggICAgICAgICAgICAgICAxNgkvKiBBSUYyREFDX0VRX0IxX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxMyAoMHg1ODUpIC0gQUlGMiBFUSBCYW5kIDIgQQorICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0IyX0FfTUFTSyAgICAgICAgICAgICAweEZGRkYJLyogQUlGMkRBQ19FUV9CMl9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0IyX0FfU0hJRlQgICAgICAgICAgICAgICAgIDAJLyogQUlGMkRBQ19FUV9CMl9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0IyX0FfV0lEVEggICAgICAgICAgICAgICAgMTYJLyogQUlGMkRBQ19FUV9CMl9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxNCAoMHg1ODYpIC0gQUlGMiBFUSBCYW5kIDIgQgorICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0IyX0JfTUFTSyAgICAgICAgICAgICAweEZGRkYJLyogQUlGMkRBQ19FUV9CMl9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0IyX0JfU0hJRlQgICAgICAgICAgICAgICAgIDAJLyogQUlGMkRBQ19FUV9CMl9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0IyX0JfV0lEVEggICAgICAgICAgICAgICAgMTYJLyogQUlGMkRBQ19FUV9CMl9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxNSAoMHg1ODcpIC0gQUlGMiBFUSBCYW5kIDIgQworICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0IyX0NfTUFTSyAgICAgICAgICAgICAweEZGRkYJLyogQUlGMkRBQ19FUV9CMl9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0IyX0NfU0hJRlQgICAgICAgICAgICAgICAgIDAJLyogQUlGMkRBQ19FUV9CMl9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0IyX0NfV0lEVEggICAgICAgICAgICAgICAgMTYJLyogQUlGMkRBQ19FUV9CMl9DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxNiAoMHg1ODgpIC0gQUlGMiBFUSBCYW5kIDIgUEcKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CMl9QR19NQVNLICAgICAgICAgICAgMHhGRkZGCS8qIEFJRjJEQUNfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjJfUEdfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYyREFDX0VRX0IyX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0IyX1BHX1dJRFRIICAgICAgICAgICAgICAgMTYJLyogQUlGMkRBQ19FUV9CMl9QRyAtIFsxNTowXSAqLworCisvKgorICogUjE0MTcgKDB4NTg5KSAtIEFJRjIgRVEgQmFuZCAzIEEKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CM19BX01BU0sgICAgICAgICAgICAgMHhGRkZGCS8qIEFJRjJEQUNfRVFfQjNfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CM19BX1NISUZUICAgICAgICAgICAgICAgICAwCS8qIEFJRjJEQUNfRVFfQjNfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CM19BX1dJRFRIICAgICAgICAgICAgICAgIDE2CS8qIEFJRjJEQUNfRVFfQjNfQSAtIFsxNTowXSAqLworCisvKgorICogUjE0MTggKDB4NThBKSAtIEFJRjIgRVEgQmFuZCAzIEIKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CM19CX01BU0sgICAgICAgICAgICAgMHhGRkZGCS8qIEFJRjJEQUNfRVFfQjNfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CM19CX1NISUZUICAgICAgICAgICAgICAgICAwCS8qIEFJRjJEQUNfRVFfQjNfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CM19CX1dJRFRIICAgICAgICAgICAgICAgIDE2CS8qIEFJRjJEQUNfRVFfQjNfQiAtIFsxNTowXSAqLworCisvKgorICogUjE0MTkgKDB4NThCKSAtIEFJRjIgRVEgQmFuZCAzIEMKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CM19DX01BU0sgICAgICAgICAgICAgMHhGRkZGCS8qIEFJRjJEQUNfRVFfQjNfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CM19DX1NISUZUICAgICAgICAgICAgICAgICAwCS8qIEFJRjJEQUNfRVFfQjNfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CM19DX1dJRFRIICAgICAgICAgICAgICAgIDE2CS8qIEFJRjJEQUNfRVFfQjNfQyAtIFsxNTowXSAqLworCisvKgorICogUjE0MjAgKDB4NThDKSAtIEFJRjIgRVEgQmFuZCAzIFBHCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjNfUEdfTUFTSyAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYyREFDX0VRX0IzX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0IzX1BHX1NISUZUICAgICAgICAgICAgICAgIDAJLyogQUlGMkRBQ19FUV9CM19QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CM19QR19XSURUSCAgICAgICAgICAgICAgIDE2CS8qIEFJRjJEQUNfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDIxICgweDU4RCkgLSBBSUYyIEVRIEJhbmQgNCBBCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjRfQV9NQVNLICAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYyREFDX0VRX0I0X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjRfQV9TSElGVCAgICAgICAgICAgICAgICAgMAkvKiBBSUYyREFDX0VRX0I0X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjRfQV9XSURUSCAgICAgICAgICAgICAgICAxNgkvKiBBSUYyREFDX0VRX0I0X0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDIyICgweDU4RSkgLSBBSUYyIEVRIEJhbmQgNCBCCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjRfQl9NQVNLICAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYyREFDX0VRX0I0X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjRfQl9TSElGVCAgICAgICAgICAgICAgICAgMAkvKiBBSUYyREFDX0VRX0I0X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjRfQl9XSURUSCAgICAgICAgICAgICAgICAxNgkvKiBBSUYyREFDX0VRX0I0X0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDIzICgweDU4RikgLSBBSUYyIEVRIEJhbmQgNCBDCisgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjRfQ19NQVNLICAgICAgICAgICAgIDB4RkZGRgkvKiBBSUYyREFDX0VRX0I0X0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjRfQ19TSElGVCAgICAgICAgICAgICAgICAgMAkvKiBBSUYyREFDX0VRX0I0X0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjRfQ19XSURUSCAgICAgICAgICAgICAgICAxNgkvKiBBSUYyREFDX0VRX0I0X0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDI0ICgweDU5MCkgLSBBSUYyIEVRIEJhbmQgNCBQRworICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0I0X1BHX01BU0sgICAgICAgICAgICAweEZGRkYJLyogQUlGMkRBQ19FUV9CNF9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CNF9QR19TSElGVCAgICAgICAgICAgICAgICAwCS8qIEFJRjJEQUNfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjRfUEdfV0lEVEggICAgICAgICAgICAgICAxNgkvKiBBSUYyREFDX0VRX0I0X1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyNSAoMHg1OTEpIC0gQUlGMiBFUSBCYW5kIDUgQQorICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0I1X0FfTUFTSyAgICAgICAgICAgICAweEZGRkYJLyogQUlGMkRBQ19FUV9CNV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0I1X0FfU0hJRlQgICAgICAgICAgICAgICAgIDAJLyogQUlGMkRBQ19FUV9CNV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0I1X0FfV0lEVEggICAgICAgICAgICAgICAgMTYJLyogQUlGMkRBQ19FUV9CNV9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyNiAoMHg1OTIpIC0gQUlGMiBFUSBCYW5kIDUgQgorICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0I1X0JfTUFTSyAgICAgICAgICAgICAweEZGRkYJLyogQUlGMkRBQ19FUV9CNV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0I1X0JfU0hJRlQgICAgICAgICAgICAgICAgIDAJLyogQUlGMkRBQ19FUV9CNV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0I1X0JfV0lEVEggICAgICAgICAgICAgICAgMTYJLyogQUlGMkRBQ19FUV9CNV9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyNyAoMHg1OTMpIC0gQUlGMiBFUSBCYW5kIDUgUEcKKyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ19FUV9CNV9QR19NQVNLICAgICAgICAgICAgMHhGRkZGCS8qIEFJRjJEQUNfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNfRVFfQjVfUEdfU0hJRlQgICAgICAgICAgICAgICAgMAkvKiBBSUYyREFDX0VRX0I1X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDX0VRX0I1X1BHX1dJRFRIICAgICAgICAgICAgICAgMTYJLyogQUlGMkRBQ19FUV9CNV9QRyAtIFsxNTowXSAqLworCisvKgorICogUjE1MzYgKDB4NjAwKSAtIERBQzEgTWl4ZXIgVm9sdW1lcworICovCisjZGVmaW5lIFdNODk5NV9BRENSX0RBQzFfVk9MX01BU0sgICAgICAgICAgICAgICAweDAzRTAJLyogQURDUl9EQUMxX1ZPTCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5NV9BRENSX0RBQzFfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDUJLyogQURDUl9EQUMxX1ZPTCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5NV9BRENSX0RBQzFfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDUJLyogQURDUl9EQUMxX1ZPTCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5NV9BRENMX0RBQzFfVk9MX01BU0sgICAgICAgICAgICAgICAweDAwMUYJLyogQURDTF9EQUMxX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NV9BRENMX0RBQzFfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAJLyogQURDTF9EQUMxX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NV9BRENMX0RBQzFfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDUJLyogQURDTF9EQUMxX1ZPTCAtIFs0OjBdICovCisKKy8qCisgKiBSMTUzNyAoMHg2MDEpIC0gREFDMSBMZWZ0IE1peGVyIFJvdXRpbmcKKyAqLworI2RlZmluZSBXTTg5OTVfQURDUl9UT19EQUMxTCAgICAgICAgICAgICAgICAgICAgMHgwMDIwCS8qIEFEQ1JfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk1X0FEQ1JfVE9fREFDMUxfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMAkvKiBBRENSX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NV9BRENSX1RPX0RBQzFMX1NISUZUICAgICAgICAgICAgICAgICAgIDUJLyogQURDUl9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTVfQURDUl9UT19EQUMxTF9XSURUSCAgICAgICAgICAgICAgICAgICAxCS8qIEFEQ1JfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk1X0FEQ0xfVE9fREFDMUwgICAgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBBRENMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NV9BRENMX1RPX0RBQzFMX01BU0sgICAgICAgICAgICAgICAweDAwMTAJLyogQURDTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTVfQURDTF9UT19EQUMxTF9TSElGVCAgICAgICAgICAgICAgICAgICA0CS8qIEFEQ0xfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk1X0FEQ0xfVE9fREFDMUxfV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBBRENMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDTF9UT19EQUMxTCAgICAgICAgICAgICAgICAweDAwMDQJLyogQUlGMkRBQ0xfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNMX1RPX0RBQzFMX01BU0sgICAgICAgICAgIDB4MDAwNAkvKiBBSUYyREFDTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ0xfVE9fREFDMUxfU0hJRlQgICAgICAgICAgICAgICAyCS8qIEFJRjJEQUNMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDTF9UT19EQUMxTF9XSURUSCAgICAgICAgICAgICAgIDEJLyogQUlGMkRBQ0xfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyTF9UT19EQUMxTCAgICAgICAgICAgICAgIDB4MDAwMgkvKiBBSUYxREFDMkxfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyTF9UT19EQUMxTF9NQVNLICAgICAgICAgIDB4MDAwMgkvKiBBSUYxREFDMkxfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyTF9UT19EQUMxTF9TSElGVCAgICAgICAgICAgICAgMQkvKiBBSUYxREFDMkxfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyTF9UT19EQUMxTF9XSURUSCAgICAgICAgICAgICAgMQkvKiBBSUYxREFDMkxfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxTF9UT19EQUMxTCAgICAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYxREFDMUxfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxTF9UT19EQUMxTF9NQVNLICAgICAgICAgIDB4MDAwMQkvKiBBSUYxREFDMUxfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxTF9UT19EQUMxTF9TSElGVCAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMUxfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxTF9UT19EQUMxTF9XSURUSCAgICAgICAgICAgICAgMQkvKiBBSUYxREFDMUxfVE9fREFDMUwgKi8KKworLyoKKyAqIFIxNTM4ICgweDYwMikgLSBEQUMxIFJpZ2h0IE1peGVyIFJvdXRpbmcKKyAqLworI2RlZmluZSBXTTg5OTVfQURDUl9UT19EQUMxUiAgICAgICAgICAgICAgICAgICAgMHgwMDIwCS8qIEFEQ1JfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk1X0FEQ1JfVE9fREFDMVJfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMAkvKiBBRENSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NV9BRENSX1RPX0RBQzFSX1NISUZUICAgICAgICAgICAgICAgICAgIDUJLyogQURDUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTVfQURDUl9UT19EQUMxUl9XSURUSCAgICAgICAgICAgICAgICAgICAxCS8qIEFEQ1JfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk1X0FEQ0xfVE9fREFDMVIgICAgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBBRENMX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NV9BRENMX1RPX0RBQzFSX01BU0sgICAgICAgICAgICAgICAweDAwMTAJLyogQURDTF9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTVfQURDTF9UT19EQUMxUl9TSElGVCAgICAgICAgICAgICAgICAgICA0CS8qIEFEQ0xfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk1X0FEQ0xfVE9fREFDMVJfV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBBRENMX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDUl9UT19EQUMxUiAgICAgICAgICAgICAgICAweDAwMDQJLyogQUlGMkRBQ1JfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNSX1RPX0RBQzFSX01BU0sgICAgICAgICAgIDB4MDAwNAkvKiBBSUYyREFDUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ1JfVE9fREFDMVJfU0hJRlQgICAgICAgICAgICAgICAyCS8qIEFJRjJEQUNSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDUl9UT19EQUMxUl9XSURUSCAgICAgICAgICAgICAgIDEJLyogQUlGMkRBQ1JfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyUl9UT19EQUMxUiAgICAgICAgICAgICAgIDB4MDAwMgkvKiBBSUYxREFDMlJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyUl9UT19EQUMxUl9NQVNLICAgICAgICAgIDB4MDAwMgkvKiBBSUYxREFDMlJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyUl9UT19EQUMxUl9TSElGVCAgICAgICAgICAgICAgMQkvKiBBSUYxREFDMlJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMyUl9UT19EQUMxUl9XSURUSCAgICAgICAgICAgICAgMQkvKiBBSUYxREFDMlJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxUl9UT19EQUMxUiAgICAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYxREFDMVJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxUl9UT19EQUMxUl9NQVNLICAgICAgICAgIDB4MDAwMQkvKiBBSUYxREFDMVJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxUl9UT19EQUMxUl9TSElGVCAgICAgICAgICAgICAgMAkvKiBBSUYxREFDMVJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEQUMxUl9UT19EQUMxUl9XSURUSCAgICAgICAgICAgICAgMQkvKiBBSUYxREFDMVJfVE9fREFDMVIgKi8KKworLyoKKyAqIFIxNTM5ICgweDYwMykgLSBEQUMyIE1peGVyIFZvbHVtZXMKKyAqLworI2RlZmluZSBXTTg5OTVfQURDUl9EQUMyX1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwM0UwCS8qIEFEQ1JfREFDMl9WT0wgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTVfQURDUl9EQUMyX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICA1CS8qIEFEQ1JfREFDMl9WT0wgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTVfQURDUl9EQUMyX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA1CS8qIEFEQ1JfREFDMl9WT0wgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTVfQURDTF9EQUMyX1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwMDFGCS8qIEFEQ0xfREFDMl9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfQURDTF9EQUMyX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAwCS8qIEFEQ0xfREFDMl9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfQURDTF9EQUMyX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA1CS8qIEFEQ0xfREFDMl9WT0wgLSBbNDowXSAqLworCisvKgorICogUjE1NDAgKDB4NjA0KSAtIERBQzIgTGVmdCBNaXhlciBSb3V0aW5nCisgKi8KKyNkZWZpbmUgV004OTk1X0FEQ1JfVE9fREFDMkwgICAgICAgICAgICAgICAgICAgIDB4MDAyMAkvKiBBRENSX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NV9BRENSX1RPX0RBQzJMX01BU0sgICAgICAgICAgICAgICAweDAwMjAJLyogQURDUl9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTVfQURDUl9UT19EQUMyTF9TSElGVCAgICAgICAgICAgICAgICAgICA1CS8qIEFEQ1JfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk1X0FEQ1JfVE9fREFDMkxfV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBBRENSX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NV9BRENMX1RPX0RBQzJMICAgICAgICAgICAgICAgICAgICAweDAwMTAJLyogQURDTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTVfQURDTF9UT19EQUMyTF9NQVNLICAgICAgICAgICAgICAgMHgwMDEwCS8qIEFEQ0xfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk1X0FEQ0xfVE9fREFDMkxfU0hJRlQgICAgICAgICAgICAgICAgICAgNAkvKiBBRENMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NV9BRENMX1RPX0RBQzJMX1dJRFRIICAgICAgICAgICAgICAgICAgIDEJLyogQURDTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ0xfVE9fREFDMkwgICAgICAgICAgICAgICAgMHgwMDA0CS8qIEFJRjJEQUNMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDTF9UT19EQUMyTF9NQVNLICAgICAgICAgICAweDAwMDQJLyogQUlGMkRBQ0xfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNMX1RPX0RBQzJMX1NISUZUICAgICAgICAgICAgICAgMgkvKiBBSUYyREFDTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ0xfVE9fREFDMkxfV0lEVEggICAgICAgICAgICAgICAxCS8qIEFJRjJEQUNMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMkxfVE9fREFDMkwgICAgICAgICAgICAgICAweDAwMDIJLyogQUlGMURBQzJMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMkxfVE9fREFDMkxfTUFTSyAgICAgICAgICAweDAwMDIJLyogQUlGMURBQzJMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMkxfVE9fREFDMkxfU0hJRlQgICAgICAgICAgICAgIDEJLyogQUlGMURBQzJMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMkxfVE9fREFDMkxfV0lEVEggICAgICAgICAgICAgIDEJLyogQUlGMURBQzJMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMUxfVE9fREFDMkwgICAgICAgICAgICAgICAweDAwMDEJLyogQUlGMURBQzFMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMUxfVE9fREFDMkxfTUFTSyAgICAgICAgICAweDAwMDEJLyogQUlGMURBQzFMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMUxfVE9fREFDMkxfU0hJRlQgICAgICAgICAgICAgIDAJLyogQUlGMURBQzFMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMUxfVE9fREFDMkxfV0lEVEggICAgICAgICAgICAgIDEJLyogQUlGMURBQzFMX1RPX0RBQzJMICovCisKKy8qCisgKiBSMTU0MSAoMHg2MDUpIC0gREFDMiBSaWdodCBNaXhlciBSb3V0aW5nCisgKi8KKyNkZWZpbmUgV004OTk1X0FEQ1JfVE9fREFDMlIgICAgICAgICAgICAgICAgICAgIDB4MDAyMAkvKiBBRENSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NV9BRENSX1RPX0RBQzJSX01BU0sgICAgICAgICAgICAgICAweDAwMjAJLyogQURDUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTVfQURDUl9UT19EQUMyUl9TSElGVCAgICAgICAgICAgICAgICAgICA1CS8qIEFEQ1JfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk1X0FEQ1JfVE9fREFDMlJfV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBBRENSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NV9BRENMX1RPX0RBQzJSICAgICAgICAgICAgICAgICAgICAweDAwMTAJLyogQURDTF9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTVfQURDTF9UT19EQUMyUl9NQVNLICAgICAgICAgICAgICAgMHgwMDEwCS8qIEFEQ0xfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk1X0FEQ0xfVE9fREFDMlJfU0hJRlQgICAgICAgICAgICAgICAgICAgNAkvKiBBRENMX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NV9BRENMX1RPX0RBQzJSX1dJRFRIICAgICAgICAgICAgICAgICAgIDEJLyogQURDTF9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ1JfVE9fREFDMlIgICAgICAgICAgICAgICAgMHgwMDA0CS8qIEFJRjJEQUNSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDUl9UT19EQUMyUl9NQVNLICAgICAgICAgICAweDAwMDQJLyogQUlGMkRBQ1JfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNSX1RPX0RBQzJSX1NISUZUICAgICAgICAgICAgICAgMgkvKiBBSUYyREFDUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ1JfVE9fREFDMlJfV0lEVEggICAgICAgICAgICAgICAxCS8qIEFJRjJEQUNSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMlJfVE9fREFDMlIgICAgICAgICAgICAgICAweDAwMDIJLyogQUlGMURBQzJSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMlJfVE9fREFDMlJfTUFTSyAgICAgICAgICAweDAwMDIJLyogQUlGMURBQzJSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMlJfVE9fREFDMlJfU0hJRlQgICAgICAgICAgICAgIDEJLyogQUlGMURBQzJSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMlJfVE9fREFDMlJfV0lEVEggICAgICAgICAgICAgIDEJLyogQUlGMURBQzJSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMVJfVE9fREFDMlIgICAgICAgICAgICAgICAweDAwMDEJLyogQUlGMURBQzFSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMVJfVE9fREFDMlJfTUFTSyAgICAgICAgICAweDAwMDEJLyogQUlGMURBQzFSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMVJfVE9fREFDMlJfU0hJRlQgICAgICAgICAgICAgIDAJLyogQUlGMURBQzFSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NV9BSUYxREFDMVJfVE9fREFDMlJfV0lEVEggICAgICAgICAgICAgIDEJLyogQUlGMURBQzFSX1RPX0RBQzJSICovCisKKy8qCisgKiBSMTU0MiAoMHg2MDYpIC0gQUlGMSBBREMxIExlZnQgTWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODk5NV9BREMxTF9UT19BSUYxQURDMUwgICAgICAgICAgICAgICAweDAwMDIJLyogQURDMUxfVE9fQUlGMUFEQzFMICovCisjZGVmaW5lIFdNODk5NV9BREMxTF9UT19BSUYxQURDMUxfTUFTSyAgICAgICAgICAweDAwMDIJLyogQURDMUxfVE9fQUlGMUFEQzFMICovCisjZGVmaW5lIFdNODk5NV9BREMxTF9UT19BSUYxQURDMUxfU0hJRlQgICAgICAgICAgICAgIDEJLyogQURDMUxfVE9fQUlGMUFEQzFMICovCisjZGVmaW5lIFdNODk5NV9BREMxTF9UT19BSUYxQURDMUxfV0lEVEggICAgICAgICAgICAgIDEJLyogQURDMUxfVE9fQUlGMUFEQzFMICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDTF9UT19BSUYxQURDMUwgICAgICAgICAgICAweDAwMDEJLyogQUlGMkRBQ0xfVE9fQUlGMUFEQzFMICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDTF9UT19BSUYxQURDMUxfTUFTSyAgICAgICAweDAwMDEJLyogQUlGMkRBQ0xfVE9fQUlGMUFEQzFMICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDTF9UT19BSUYxQURDMUxfU0hJRlQgICAgICAgICAgIDAJLyogQUlGMkRBQ0xfVE9fQUlGMUFEQzFMICovCisjZGVmaW5lIFdNODk5NV9BSUYyREFDTF9UT19BSUYxQURDMUxfV0lEVEggICAgICAgICAgIDEJLyogQUlGMkRBQ0xfVE9fQUlGMUFEQzFMICovCisKKy8qCisgKiBSMTU0MyAoMHg2MDcpIC0gQUlGMSBBREMxIFJpZ2h0IE1peGVyIFJvdXRpbmcKKyAqLworI2RlZmluZSBXTTg5OTVfQURDMVJfVE9fQUlGMUFEQzFSICAgICAgICAgICAgICAgMHgwMDAyCS8qIEFEQzFSX1RPX0FJRjFBREMxUiAqLworI2RlZmluZSBXTTg5OTVfQURDMVJfVE9fQUlGMUFEQzFSX01BU0sgICAgICAgICAgMHgwMDAyCS8qIEFEQzFSX1RPX0FJRjFBREMxUiAqLworI2RlZmluZSBXTTg5OTVfQURDMVJfVE9fQUlGMUFEQzFSX1NISUZUICAgICAgICAgICAgICAxCS8qIEFEQzFSX1RPX0FJRjFBREMxUiAqLworI2RlZmluZSBXTTg5OTVfQURDMVJfVE9fQUlGMUFEQzFSX1dJRFRIICAgICAgICAgICAgICAxCS8qIEFEQzFSX1RPX0FJRjFBREMxUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ1JfVE9fQUlGMUFEQzFSICAgICAgICAgICAgMHgwMDAxCS8qIEFJRjJEQUNSX1RPX0FJRjFBREMxUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ1JfVE9fQUlGMUFEQzFSX01BU0sgICAgICAgMHgwMDAxCS8qIEFJRjJEQUNSX1RPX0FJRjFBREMxUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ1JfVE9fQUlGMUFEQzFSX1NISUZUICAgICAgICAgICAwCS8qIEFJRjJEQUNSX1RPX0FJRjFBREMxUiAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ1JfVE9fQUlGMUFEQzFSX1dJRFRIICAgICAgICAgICAxCS8qIEFJRjJEQUNSX1RPX0FJRjFBREMxUiAqLworCisvKgorICogUjE1NDQgKDB4NjA4KSAtIEFJRjEgQURDMiBMZWZ0IE1peGVyIFJvdXRpbmcKKyAqLworI2RlZmluZSBXTTg5OTVfQURDMkxfVE9fQUlGMUFEQzJMICAgICAgICAgICAgICAgMHgwMDAyCS8qIEFEQzJMX1RPX0FJRjFBREMyTCAqLworI2RlZmluZSBXTTg5OTVfQURDMkxfVE9fQUlGMUFEQzJMX01BU0sgICAgICAgICAgMHgwMDAyCS8qIEFEQzJMX1RPX0FJRjFBREMyTCAqLworI2RlZmluZSBXTTg5OTVfQURDMkxfVE9fQUlGMUFEQzJMX1NISUZUICAgICAgICAgICAgICAxCS8qIEFEQzJMX1RPX0FJRjFBREMyTCAqLworI2RlZmluZSBXTTg5OTVfQURDMkxfVE9fQUlGMUFEQzJMX1dJRFRIICAgICAgICAgICAgICAxCS8qIEFEQzJMX1RPX0FJRjFBREMyTCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ0xfVE9fQUlGMUFEQzJMICAgICAgICAgICAgMHgwMDAxCS8qIEFJRjJEQUNMX1RPX0FJRjFBREMyTCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ0xfVE9fQUlGMUFEQzJMX01BU0sgICAgICAgMHgwMDAxCS8qIEFJRjJEQUNMX1RPX0FJRjFBREMyTCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ0xfVE9fQUlGMUFEQzJMX1NISUZUICAgICAgICAgICAwCS8qIEFJRjJEQUNMX1RPX0FJRjFBREMyTCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRBQ0xfVE9fQUlGMUFEQzJMX1dJRFRIICAgICAgICAgICAxCS8qIEFJRjJEQUNMX1RPX0FJRjFBREMyTCAqLworCisvKgorICogUjE1NDUgKDB4NjA5KSAtIEFJRjEgQURDMiBSaWdodCBtaXhlciBSb3V0aW5nCisgKi8KKyNkZWZpbmUgV004OTk1X0FEQzJSX1RPX0FJRjFBREMyUiAgICAgICAgICAgICAgIDB4MDAwMgkvKiBBREMyUl9UT19BSUYxQURDMlIgKi8KKyNkZWZpbmUgV004OTk1X0FEQzJSX1RPX0FJRjFBREMyUl9NQVNLICAgICAgICAgIDB4MDAwMgkvKiBBREMyUl9UT19BSUYxQURDMlIgKi8KKyNkZWZpbmUgV004OTk1X0FEQzJSX1RPX0FJRjFBREMyUl9TSElGVCAgICAgICAgICAgICAgMQkvKiBBREMyUl9UT19BSUYxQURDMlIgKi8KKyNkZWZpbmUgV004OTk1X0FEQzJSX1RPX0FJRjFBREMyUl9XSURUSCAgICAgICAgICAgICAgMQkvKiBBREMyUl9UT19BSUYxQURDMlIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNSX1RPX0FJRjFBREMyUiAgICAgICAgICAgIDB4MDAwMQkvKiBBSUYyREFDUl9UT19BSUYxQURDMlIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNSX1RPX0FJRjFBREMyUl9NQVNLICAgICAgIDB4MDAwMQkvKiBBSUYyREFDUl9UT19BSUYxQURDMlIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNSX1RPX0FJRjFBREMyUl9TSElGVCAgICAgICAgICAgMAkvKiBBSUYyREFDUl9UT19BSUYxQURDMlIgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEQUNSX1RPX0FJRjFBREMyUl9XSURUSCAgICAgICAgICAgMQkvKiBBSUYyREFDUl9UT19BSUYxQURDMlIgKi8KKworLyoKKyAqIFIxNTUyICgweDYxMCkgLSBEQUMgU29mdG11dGUKKyAqLworI2RlZmluZSBXTTg5OTVfREFDX1NPRlRNVVRFTU9ERSAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIERBQ19TT0ZUTVVURU1PREUgKi8KKyNkZWZpbmUgV004OTk1X0RBQ19TT0ZUTVVURU1PREVfTUFTSyAgICAgICAgICAgIDB4MDAwMgkvKiBEQUNfU09GVE1VVEVNT0RFICovCisjZGVmaW5lIFdNODk5NV9EQUNfU09GVE1VVEVNT0RFX1NISUZUICAgICAgICAgICAgICAgIDEJLyogREFDX1NPRlRNVVRFTU9ERSAqLworI2RlZmluZSBXTTg5OTVfREFDX1NPRlRNVVRFTU9ERV9XSURUSCAgICAgICAgICAgICAgICAxCS8qIERBQ19TT0ZUTVVURU1PREUgKi8KKyNkZWZpbmUgV004OTk1X0RBQ19NVVRFUkFURSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk1X0RBQ19NVVRFUkFURV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk1X0RBQ19NVVRFUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgMAkvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk1X0RBQ19NVVRFUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBEQUNfTVVURVJBVEUgKi8KKworLyoKKyAqIFIxNTY4ICgweDYyMCkgLSBPdmVyc2FtcGxpbmcKKyAqLworI2RlZmluZSBXTTg5OTVfQURDX09TUjEyOCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIEFEQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTk1X0FEQ19PU1IxMjhfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBBRENfT1NSMTI4ICovCisjZGVmaW5lIFdNODk5NV9BRENfT1NSMTI4X1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEJLyogQURDX09TUjEyOCAqLworI2RlZmluZSBXTTg5OTVfQURDX09TUjEyOF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEFEQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTk1X0RBQ19PU1IxMjggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBEQUNfT1NSMTI4ICovCisjZGVmaW5lIFdNODk5NV9EQUNfT1NSMTI4X01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEJLyogREFDX09TUjEyOCAqLworI2RlZmluZSBXTTg5OTVfREFDX09TUjEyOF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwCS8qIERBQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTk1X0RBQ19PU1IxMjhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMQkvKiBEQUNfT1NSMTI4ICovCisKKy8qCisgKiBSMTU2OSAoMHg2MjEpIC0gU2lkZXRvbmUKKyAqLworI2RlZmluZSBXTTg5OTVfU1RfTFBGICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCS8qIFNUX0xQRiAqLworI2RlZmluZSBXTTg5OTVfU1RfTFBGX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCS8qIFNUX0xQRiAqLworI2RlZmluZSBXTTg5OTVfU1RfTFBGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEyCS8qIFNUX0xQRiAqLworI2RlZmluZSBXTTg5OTVfU1RfTFBGX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIFNUX0xQRiAqLworI2RlZmluZSBXTTg5OTVfU1RfSFBGX0NVVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMzgwCS8qIFNUX0hQRl9DVVQgLSBbOTo3XSAqLworI2RlZmluZSBXTTg5OTVfU1RfSFBGX0NVVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA3CS8qIFNUX0hQRl9DVVQgLSBbOTo3XSAqLworI2RlZmluZSBXTTg5OTVfU1RfSFBGX0NVVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAzCS8qIFNUX0hQRl9DVVQgLSBbOTo3XSAqLworI2RlZmluZSBXTTg5OTVfU1RfSFBGICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCS8qIFNUX0hQRiAqLworI2RlZmluZSBXTTg5OTVfU1RfSFBGX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCS8qIFNUX0hQRiAqLworI2RlZmluZSBXTTg5OTVfU1RfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA2CS8qIFNUX0hQRiAqLworI2RlZmluZSBXTTg5OTVfU1RfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIFNUX0hQRiAqLworI2RlZmluZSBXTTg5OTVfU1RSX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIFNUUl9TRUwgKi8KKyNkZWZpbmUgV004OTk1X1NUUl9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBTVFJfU0VMICovCisjZGVmaW5lIFdNODk5NV9TVFJfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogU1RSX1NFTCAqLworI2RlZmluZSBXTTg5OTVfU1RSX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIFNUUl9TRUwgKi8KKyNkZWZpbmUgV004OTk1X1NUTF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBTVExfU0VMICovCisjZGVmaW5lIFdNODk5NV9TVExfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogU1RMX1NFTCAqLworI2RlZmluZSBXTTg5OTVfU1RMX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwCS8qIFNUTF9TRUwgKi8KKyNkZWZpbmUgV004OTk1X1NUTF9TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBTVExfU0VMICovCisKKy8qCisgKiBSMTc5MiAoMHg3MDApIC0gR1BJTyAxCisgKi8KKyNkZWZpbmUgV004OTk1X0dQMV9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBHUDFfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDFfRElSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogR1AxX0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1AxX0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1CS8qIEdQMV9ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQMV9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDFfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDFfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1AxX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDFfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1AxX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDFfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQJLyogR1AxX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDFfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDFfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1AxX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDFfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1AxX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTMJLyogR1AxX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDFfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogR1AxX1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1AxX1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCS8qIEdQMV9QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQMV9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMAkvKiBHUDFfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDFfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxX1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1AxX09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIEdQMV9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQMV9PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDFfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDFfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkJLyogR1AxX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1AxX09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQMV9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQMV9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDFfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMV9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDFfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMV9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOAkvKiBHUDFfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMV9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDFfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMV9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBHUDFfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDFfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogR1AxX0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1AxX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2CS8qIEdQMV9MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQMV9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDFfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDFfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMUYJLyogR1AxX0ZOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0dQMV9GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBHUDFfRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfR1AxX0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA1CS8qIEdQMV9GTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTc5MyAoMHg3MDEpIC0gR1BJTyAyCisgKi8KKyNkZWZpbmUgV004OTk1X0dQMl9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBHUDJfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDJfRElSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogR1AyX0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1AyX0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1CS8qIEdQMl9ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQMl9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDJfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDJfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1AyX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDJfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1AyX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDJfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQJLyogR1AyX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDJfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AyX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDJfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1AyX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDJfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1AyX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDJfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTMJLyogR1AyX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDJfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AyX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDJfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogR1AyX1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1AyX1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCS8qIEdQMl9QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQMl9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMAkvKiBHUDJfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDJfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AyX1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1AyX09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIEdQMl9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQMl9PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDJfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDJfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkJLyogR1AyX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1AyX09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQMl9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQMl9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDJfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMl9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDJfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMl9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOAkvKiBHUDJfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMl9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDJfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMl9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBHUDJfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDJfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogR1AyX0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1AyX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2CS8qIEdQMl9MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQMl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDJfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDJfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMUYJLyogR1AyX0ZOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0dQMl9GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBHUDJfRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfR1AyX0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA1CS8qIEdQMl9GTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTc5NCAoMHg3MDIpIC0gR1BJTyAzCisgKi8KKyNkZWZpbmUgV004OTk1X0dQM19ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBHUDNfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDNfRElSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogR1AzX0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1AzX0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1CS8qIEdQM19ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQM19ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDNfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDNfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1AzX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDNfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1AzX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDNfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQJLyogR1AzX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDNfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AzX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDNfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1AzX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDNfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1AzX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDNfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTMJLyogR1AzX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDNfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AzX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDNfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogR1AzX1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1AzX1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCS8qIEdQM19QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQM19QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMAkvKiBHUDNfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDNfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AzX1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1AzX09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIEdQM19PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQM19PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDNfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDNfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkJLyogR1AzX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1AzX09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQM19PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQM19EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDNfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQM19EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDNfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQM19EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOAkvKiBHUDNfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQM19EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDNfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQM19MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBHUDNfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDNfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogR1AzX0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1AzX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2CS8qIEdQM19MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQM19MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDNfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDNfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMUYJLyogR1AzX0ZOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0dQM19GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBHUDNfRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfR1AzX0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA1CS8qIEdQM19GTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTc5NSAoMHg3MDMpIC0gR1BJTyA0CisgKi8KKyNkZWZpbmUgV004OTk1X0dQNF9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBHUDRfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDRfRElSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogR1A0X0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1A0X0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1CS8qIEdQNF9ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQNF9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDRfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDRfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1A0X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDRfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1A0X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDRfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQJLyogR1A0X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDRfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A0X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDRfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1A0X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDRfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1A0X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDRfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTMJLyogR1A0X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDRfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A0X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDRfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogR1A0X1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1A0X1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCS8qIEdQNF9QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQNF9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMAkvKiBHUDRfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDRfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A0X1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1A0X09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIEdQNF9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQNF9PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDRfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDRfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkJLyogR1A0X09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1A0X09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQNF9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQNF9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDRfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQNF9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDRfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQNF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOAkvKiBHUDRfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQNF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDRfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQNF9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBHUDRfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDRfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogR1A0X0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1A0X0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2CS8qIEdQNF9MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQNF9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDRfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDRfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMUYJLyogR1A0X0ZOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0dQNF9GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBHUDRfRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfR1A0X0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA1CS8qIEdQNF9GTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTc5NiAoMHg3MDQpIC0gR1BJTyA1CisgKi8KKyNkZWZpbmUgV004OTk1X0dQNV9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBHUDVfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDVfRElSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogR1A1X0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1A1X0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1CS8qIEdQNV9ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQNV9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDVfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDVfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1A1X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDVfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1A1X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDVfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQJLyogR1A1X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDVfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A1X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDVfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1A1X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDVfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1A1X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDVfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTMJLyogR1A1X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDVfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A1X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDVfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogR1A1X1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1A1X1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCS8qIEdQNV9QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQNV9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMAkvKiBHUDVfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDVfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A1X1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1A1X09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIEdQNV9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQNV9PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDVfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDVfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkJLyogR1A1X09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1A1X09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQNV9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQNV9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDVfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQNV9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDVfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQNV9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOAkvKiBHUDVfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQNV9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDVfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQNV9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBHUDVfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDVfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogR1A1X0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1A1X0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2CS8qIEdQNV9MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQNV9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDVfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDVfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMUYJLyogR1A1X0ZOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0dQNV9GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBHUDVfRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfR1A1X0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA1CS8qIEdQNV9GTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTc5NyAoMHg3MDUpIC0gR1BJTyA2CisgKi8KKyNkZWZpbmUgV004OTk1X0dQNl9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBHUDZfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDZfRElSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogR1A2X0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1A2X0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1CS8qIEdQNl9ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQNl9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDZfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDZfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1A2X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDZfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1A2X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDZfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQJLyogR1A2X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDZfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A2X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDZfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1A2X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDZfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1A2X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDZfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTMJLyogR1A2X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDZfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A2X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDZfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogR1A2X1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1A2X1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCS8qIEdQNl9QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQNl9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMAkvKiBHUDZfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDZfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A2X1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1A2X09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIEdQNl9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQNl9PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDZfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDZfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkJLyogR1A2X09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1A2X09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQNl9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQNl9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDZfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQNl9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDZfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQNl9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOAkvKiBHUDZfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQNl9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDZfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQNl9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBHUDZfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDZfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogR1A2X0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1A2X0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2CS8qIEdQNl9MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQNl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDZfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDZfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMUYJLyogR1A2X0ZOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0dQNl9GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBHUDZfRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfR1A2X0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA1CS8qIEdQNl9GTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTc5OCAoMHg3MDYpIC0gR1BJTyA3CisgKi8KKyNkZWZpbmUgV004OTk1X0dQN19ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBHUDdfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDdfRElSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogR1A3X0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1A3X0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1CS8qIEdQN19ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQN19ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDdfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDdfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1A3X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDdfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1A3X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDdfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQJLyogR1A3X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDdfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A3X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDdfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1A3X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDdfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1A3X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDdfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTMJLyogR1A3X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDdfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A3X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDdfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogR1A3X1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1A3X1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCS8qIEdQN19QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQN19QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMAkvKiBHUDdfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDdfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A3X1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1A3X09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIEdQN19PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQN19PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDdfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDdfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkJLyogR1A3X09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1A3X09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQN19PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQN19EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDdfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQN19EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDdfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQN19EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOAkvKiBHUDdfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQN19EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDdfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQN19MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBHUDdfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDdfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogR1A3X0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1A3X0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2CS8qIEdQN19MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQN19MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDdfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDdfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMUYJLyogR1A3X0ZOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0dQN19GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBHUDdfRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfR1A3X0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA1CS8qIEdQN19GTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTc5OSAoMHg3MDcpIC0gR1BJTyA4CisgKi8KKyNkZWZpbmUgV004OTk1X0dQOF9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBHUDhfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDhfRElSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogR1A4X0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1A4X0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1CS8qIEdQOF9ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQOF9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDhfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDhfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1A4X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDhfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1A4X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDhfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQJLyogR1A4X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDhfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A4X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDhfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1A4X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDhfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1A4X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDhfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTMJLyogR1A4X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDhfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A4X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDhfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogR1A4X1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1A4X1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCS8qIEdQOF9QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQOF9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMAkvKiBHUDhfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDhfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A4X1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1A4X09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIEdQOF9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQOF9PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDhfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDhfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkJLyogR1A4X09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1A4X09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQOF9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQOF9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDhfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQOF9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDhfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQOF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOAkvKiBHUDhfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQOF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDhfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQOF9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBHUDhfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDhfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogR1A4X0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1A4X0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2CS8qIEdQOF9MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQOF9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDhfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDhfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMUYJLyogR1A4X0ZOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0dQOF9GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBHUDhfRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfR1A4X0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA1CS8qIEdQOF9GTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTgwMCAoMHg3MDgpIC0gR1BJTyA5CisgKi8KKyNkZWZpbmUgV004OTk1X0dQOV9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBHUDlfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDlfRElSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogR1A5X0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1A5X0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1CS8qIEdQOV9ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQOV9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDlfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDlfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1A5X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDlfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1A5X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDlfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQJLyogR1A5X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDlfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A5X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDlfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1A5X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDlfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1A5X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDlfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTMJLyogR1A5X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDlfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A5X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDlfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogR1A5X1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1A5X1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCS8qIEdQOV9QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQOV9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMAkvKiBHUDlfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDlfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A5X1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1A5X09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIEdQOV9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQOV9PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDlfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDlfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkJLyogR1A5X09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1A5X09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQOV9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQOV9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDlfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQOV9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDlfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQOV9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOAkvKiBHUDlfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQOV9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDlfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQOV9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBHUDlfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDlfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogR1A5X0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1A5X0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2CS8qIEdQOV9MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQOV9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDlfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDlfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMUYJLyogR1A5X0ZOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0dQOV9GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBHUDlfRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfR1A5X0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA1CS8qIEdQOV9GTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTgwMSAoMHg3MDkpIC0gR1BJTyAxMAorICovCisjZGVmaW5lIFdNODk5NV9HUDEwX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogR1AxMF9ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfRElSX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBHUDEwX0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1AxMF9ESVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE1CS8qIEdQMTBfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDEwX0RJUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxMF9ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfUFUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAkvKiBHUDEwX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDEwX1BVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1AxMF9QVSAqLworI2RlZmluZSBXTTg5OTVfR1AxMF9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE0CS8qIEdQMTBfUFUgKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDEwX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDEwX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1AxMF9QRCAqLworI2RlZmluZSBXTTg5OTVfR1AxMF9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCS8qIEdQMTBfUEQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMwkvKiBHUDEwX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDEwX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxMF9QRCAqLworI2RlZmluZSBXTTg5OTVfR1AxMF9QT0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCS8qIEdQMTBfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDEwX1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogR1AxMF9QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMAkvKiBHUDEwX1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1AxMF9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQMTBfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDEwX09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAweDAyMDAJLyogR1AxMF9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfT1BfQ0ZHX01BU0sgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDEwX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1AxMF9PUF9DRkdfU0hJRlQgICAgICAgICAgICAgICAgICAgICA5CS8qIEdQMTBfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDEwX09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxMF9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfREIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDEwX0RCICovCisjZGVmaW5lIFdNODk5NV9HUDEwX0RCX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogR1AxMF9EQiAqLworI2RlZmluZSBXTTg5OTVfR1AxMF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4CS8qIEdQMTBfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfREJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDEwX0RCICovCisjZGVmaW5lIFdNODk5NV9HUDEwX0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogR1AxMF9MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBHUDEwX0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1AxMF9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2CS8qIEdQMTBfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDEwX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxMF9MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxRgkvKiBHUDEwX0ZOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfRk5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBHUDEwX0ZOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfRk5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNQkvKiBHUDEwX0ZOIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxODAyICgweDcwQSkgLSBHUElPIDExCisgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfRElSICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBHUDExX0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1AxMV9ESVJfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwCS8qIEdQMTFfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDExX0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTUJLyogR1AxMV9ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfRElSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDExX0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1AxMV9QVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCS8qIEdQMTFfUFUgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAkvKiBHUDExX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDExX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTQJLyogR1AxMV9QVSAqLworI2RlZmluZSBXTTg5OTVfR1AxMV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQMTFfUFUgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfUEQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAkvKiBHUDExX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDExX1BEX01BU0sgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1AxMV9QRCAqLworI2RlZmluZSBXTTg5OTVfR1AxMV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEzCS8qIEdQMTFfUEQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDExX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDExX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogR1AxMV9QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfUE9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDQwMAkvKiBHUDExX1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1AxMV9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEwCS8qIEdQMTFfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDExX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxMV9QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfT1BfQ0ZHICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDExX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1AxMV9PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIEdQMTFfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDExX09QX0NGR19TSElGVCAgICAgICAgICAgICAgICAgICAgIDkJLyogR1AxMV9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfT1BfQ0ZHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDExX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1AxMV9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIEdQMTFfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfREJfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDExX0RCICovCisjZGVmaW5lIFdNODk5NV9HUDExX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDgJLyogR1AxMV9EQiAqLworI2RlZmluZSBXTTg5OTVfR1AxMV9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQMTFfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfTFZMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBHUDExX0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1AxMV9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwCS8qIEdQMTFfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDExX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYJLyogR1AxMV9MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDExX0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1AxMV9GTl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDFGCS8qIEdQMTFfRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfR1AxMV9GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwCS8qIEdQMTFfRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfR1AxMV9GTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA1CS8qIEdQMTFfRk4gLSBbNDowXSAqLworCisvKgorICogUjE4MDMgKDB4NzBCKSAtIEdQSU8gMTIKKyAqLworI2RlZmluZSBXTTg5OTVfR1AxMl9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCS8qIEdQMTJfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDEyX0RJUl9NQVNLICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogR1AxMl9ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQMTJfRElSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNQkvKiBHUDEyX0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1AxMl9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQMTJfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDEyX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1AxMl9QVSAqLworI2RlZmluZSBXTTg5OTVfR1AxMl9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCS8qIEdQMTJfUFUgKi8KKyNkZWZpbmUgV004OTk1X0dQMTJfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxNAkvKiBHUDEyX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDEyX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxMl9QVSAqLworI2RlZmluZSBXTTg5OTVfR1AxMl9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCS8qIEdQMTJfUEQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTJfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAkvKiBHUDEyX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDEyX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTMJLyogR1AxMl9QRCAqLworI2RlZmluZSBXTTg5OTVfR1AxMl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQMTJfUEQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTJfUE9MICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAkvKiBHUDEyX1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1AxMl9QT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwNDAwCS8qIEdQMTJfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDEyX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTAJLyogR1AxMl9QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQMTJfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDEyX1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1AxMl9PUF9DRkcgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIEdQMTJfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDEyX09QX0NGR19NQVNLICAgICAgICAgICAgICAgICAweDAyMDAJLyogR1AxMl9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQMTJfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgOQkvKiBHUDEyX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1AxMl9PUF9DRkdfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIEdQMTJfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDEyX0RCICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogR1AxMl9EQiAqLworI2RlZmluZSBXTTg5OTVfR1AxMl9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIEdQMTJfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMTJfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOAkvKiBHUDEyX0RCICovCisjZGVmaW5lIFdNODk5NV9HUDEyX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxMl9EQiAqLworI2RlZmluZSBXTTg5OTVfR1AxMl9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCS8qIEdQMTJfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDEyX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogR1AxMl9MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQMTJfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNgkvKiBHUDEyX0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1AxMl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQMTJfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDEyX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMUYJLyogR1AxMl9GTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NV9HUDEyX0ZOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAJLyogR1AxMl9GTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NV9HUDEyX0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDUJLyogR1AxMl9GTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTgwNCAoMHg3MEMpIC0gR1BJTyAxMworICovCisjZGVmaW5lIFdNODk5NV9HUDEzX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogR1AxM19ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfRElSX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBHUDEzX0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1AxM19ESVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE1CS8qIEdQMTNfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDEzX0RJUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxM19ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfUFUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAkvKiBHUDEzX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDEzX1BVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDQwMDAJLyogR1AxM19QVSAqLworI2RlZmluZSBXTTg5OTVfR1AxM19QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE0CS8qIEdQMTNfUFUgKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDEzX1BVICovCisjZGVmaW5lIFdNODk5NV9HUDEzX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1AxM19QRCAqLworI2RlZmluZSBXTTg5OTVfR1AxM19QRF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCS8qIEdQMTNfUEQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMwkvKiBHUDEzX1BEICovCisjZGVmaW5lIFdNODk5NV9HUDEzX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxM19QRCAqLworI2RlZmluZSBXTTg5OTVfR1AxM19QT0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCS8qIEdQMTNfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDEzX1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogR1AxM19QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMAkvKiBHUDEzX1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1AxM19QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQMTNfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDEzX09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAweDAyMDAJLyogR1AxM19PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfT1BfQ0ZHX01BU0sgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDEzX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1AxM19PUF9DRkdfU0hJRlQgICAgICAgICAgICAgICAgICAgICA5CS8qIEdQMTNfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDEzX09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxM19PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfREIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDEzX0RCICovCisjZGVmaW5lIFdNODk5NV9HUDEzX0RCX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogR1AxM19EQiAqLworI2RlZmluZSBXTTg5OTVfR1AxM19EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4CS8qIEdQMTNfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfREJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDEzX0RCICovCisjZGVmaW5lIFdNODk5NV9HUDEzX0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogR1AxM19MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBHUDEzX0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1AxM19MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2CS8qIEdQMTNfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDEzX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxM19MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxRgkvKiBHUDEzX0ZOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfRk5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBHUDEzX0ZOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfRk5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNQkvKiBHUDEzX0ZOIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxODA1ICgweDcwRCkgLSBHUElPIDE0CisgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfRElSICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAkvKiBHUDE0X0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1AxNF9ESVJfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwCS8qIEdQMTRfRElSICovCisjZGVmaW5lIFdNODk5NV9HUDE0X0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTUJLyogR1AxNF9ESVIgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfRElSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDE0X0RJUiAqLworI2RlZmluZSBXTTg5OTVfR1AxNF9QVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCS8qIEdQMTRfUFUgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAkvKiBHUDE0X1BVICovCisjZGVmaW5lIFdNODk5NV9HUDE0X1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTQJLyogR1AxNF9QVSAqLworI2RlZmluZSBXTTg5OTVfR1AxNF9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQMTRfUFUgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfUEQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAkvKiBHUDE0X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDE0X1BEX01BU0sgICAgICAgICAgICAgICAgICAgICAweDIwMDAJLyogR1AxNF9QRCAqLworI2RlZmluZSBXTTg5OTVfR1AxNF9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEzCS8qIEdQMTRfUEQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDE0X1BEICovCisjZGVmaW5lIFdNODk5NV9HUDE0X1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogR1AxNF9QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfUE9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDQwMAkvKiBHUDE0X1BPTCAqLworI2RlZmluZSBXTTg5OTVfR1AxNF9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEwCS8qIEdQMTRfUE9MICovCisjZGVmaW5lIFdNODk5NV9HUDE0X1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxNF9QT0wgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfT1BfQ0ZHICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDE0X09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1AxNF9PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIEdQMTRfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NV9HUDE0X09QX0NGR19TSElGVCAgICAgICAgICAgICAgICAgICAgIDkJLyogR1AxNF9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfT1BfQ0ZHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDE0X09QX0NGRyAqLworI2RlZmluZSBXTTg5OTVfR1AxNF9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIEdQMTRfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfREJfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDE0X0RCICovCisjZGVmaW5lIFdNODk5NV9HUDE0X0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDgJLyogR1AxNF9EQiAqLworI2RlZmluZSBXTTg5OTVfR1AxNF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQMTRfREIgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfTFZMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBHUDE0X0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1AxNF9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwCS8qIEdQMTRfTFZMICovCisjZGVmaW5lIFdNODk5NV9HUDE0X0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYJLyogR1AxNF9MVkwgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDE0X0xWTCAqLworI2RlZmluZSBXTTg5OTVfR1AxNF9GTl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDFGCS8qIEdQMTRfRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfR1AxNF9GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwCS8qIEdQMTRfRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTVfR1AxNF9GTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA1CS8qIEdQMTRfRk4gLSBbNDowXSAqLworCisvKgorICogUjE4MjQgKDB4NzIwKSAtIFB1bGwgQ29udHJvbCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTVfRE1JQ0RBVDNfUEQgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCS8qIERNSUNEQVQzX1BEICovCisjZGVmaW5lIFdNODk5NV9ETUlDREFUM19QRF9NQVNLICAgICAgICAgICAgICAgICAweDQwMDAJLyogRE1JQ0RBVDNfUEQgKi8KKyNkZWZpbmUgV004OTk1X0RNSUNEQVQzX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAxNAkvKiBETUlDREFUM19QRCAqLworI2RlZmluZSBXTTg5OTVfRE1JQ0RBVDNfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIERNSUNEQVQzX1BEICovCisjZGVmaW5lIFdNODk5NV9ETUlDREFUMl9QRCAgICAgICAgICAgICAgICAgICAgICAweDEwMDAJLyogRE1JQ0RBVDJfUEQgKi8KKyNkZWZpbmUgV004OTk1X0RNSUNEQVQyX1BEX01BU0sgICAgICAgICAgICAgICAgIDB4MTAwMAkvKiBETUlDREFUMl9QRCAqLworI2RlZmluZSBXTTg5OTVfRE1JQ0RBVDJfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEyCS8qIERNSUNEQVQyX1BEICovCisjZGVmaW5lIFdNODk5NV9ETUlDREFUMl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogRE1JQ0RBVDJfUEQgKi8KKyNkZWZpbmUgV004OTk1X0RNSUNEQVQxX1BEICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAkvKiBETUlDREFUMV9QRCAqLworI2RlZmluZSBXTTg5OTVfRE1JQ0RBVDFfUERfTUFTSyAgICAgICAgICAgICAgICAgMHgwNDAwCS8qIERNSUNEQVQxX1BEICovCisjZGVmaW5lIFdNODk5NV9ETUlDREFUMV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTAJLyogRE1JQ0RBVDFfUEQgKi8KKyNkZWZpbmUgV004OTk1X0RNSUNEQVQxX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMQkvKiBETUlDREFUMV9QRCAqLworI2RlZmluZSBXTTg5OTVfTUNMSzJfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qIE1DTEsyX1BVICovCisjZGVmaW5lIFdNODk5NV9NQ0xLMl9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAyMDAJLyogTUNMSzJfUFUgKi8KKyNkZWZpbmUgV004OTk1X01DTEsyX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOQkvKiBNQ0xLMl9QVSAqLworI2RlZmluZSBXTTg5OTVfTUNMSzJfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIE1DTEsyX1BVICovCisjZGVmaW5lIFdNODk5NV9NQ0xLMl9QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogTUNMSzJfUEQgKi8KKyNkZWZpbmUgV004OTk1X01DTEsyX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBNQ0xLMl9QRCAqLworI2RlZmluZSBXTTg5OTVfTUNMSzJfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA4CS8qIE1DTEsyX1BEICovCisjZGVmaW5lIFdNODk5NV9NQ0xLMl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogTUNMSzJfUEQgKi8KKyNkZWZpbmUgV004OTk1X01DTEsxX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAkvKiBNQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTVfTUNMSzFfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDgwCS8qIE1DTEsxX1BVICovCisjZGVmaW5lIFdNODk5NV9NQ0xLMV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcJLyogTUNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk1X01DTEsxX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBNQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTVfTUNMSzFfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCS8qIE1DTEsxX1BEICovCisjZGVmaW5lIFdNODk5NV9NQ0xLMV9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogTUNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk1X01DTEsxX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNgkvKiBNQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5OTVfTUNMSzFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIE1DTEsxX1BEICovCisjZGVmaW5lIFdNODk5NV9EQUNEQVQxX1BVICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAJLyogREFDREFUMV9QVSAqLworI2RlZmluZSBXTTg5OTVfREFDREFUMV9QVV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwCS8qIERBQ0RBVDFfUFUgKi8KKyNkZWZpbmUgV004OTk1X0RBQ0RBVDFfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNQkvKiBEQUNEQVQxX1BVICovCisjZGVmaW5lIFdNODk5NV9EQUNEQVQxX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEJLyogREFDREFUMV9QVSAqLworI2RlZmluZSBXTTg5OTVfREFDREFUMV9QRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCS8qIERBQ0RBVDFfUEQgKi8KKyNkZWZpbmUgV004OTk1X0RBQ0RBVDFfUERfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBEQUNEQVQxX1BEICovCisjZGVmaW5lIFdNODk5NV9EQUNEQVQxX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQJLyogREFDREFUMV9QRCAqLworI2RlZmluZSBXTTg5OTVfREFDREFUMV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIERBQ0RBVDFfUEQgKi8KKyNkZWZpbmUgV004OTk1X0RBQ0xSQ0xLMV9QVSAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBEQUNMUkNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk1X0RBQ0xSQ0xLMV9QVV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBEQUNMUkNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk1X0RBQ0xSQ0xLMV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgMwkvKiBEQUNMUkNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk1X0RBQ0xSQ0xLMV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBEQUNMUkNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk1X0RBQ0xSQ0xLMV9QRCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAkvKiBEQUNMUkNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk1X0RBQ0xSQ0xLMV9QRF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNAkvKiBEQUNMUkNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk1X0RBQ0xSQ0xLMV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgMgkvKiBEQUNMUkNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk1X0RBQ0xSQ0xLMV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBEQUNMUkNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk1X0JDTEsxX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBCQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTVfQkNMSzFfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIEJDTEsxX1BVICovCisjZGVmaW5lIFdNODk5NV9CQ0xLMV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogQkNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk1X0JDTEsxX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBCQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTVfQkNMSzFfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIEJDTEsxX1BEICovCisjZGVmaW5lIFdNODk5NV9CQ0xLMV9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogQkNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk1X0JDTEsxX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBCQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5OTVfQkNMSzFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEJDTEsxX1BEICovCisKKy8qCisgKiBSMTgyNSAoMHg3MjEpIC0gUHVsbCBDb250cm9sICgyKQorICovCisjZGVmaW5lIFdNODk5NV9MRE8xRU5BX1BEICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAJLyogTERPMUVOQV9QRCAqLworI2RlZmluZSBXTTg5OTVfTERPMUVOQV9QRF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwCS8qIExETzFFTkFfUEQgKi8KKyNkZWZpbmUgV004OTk1X0xETzFFTkFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNAkvKiBMRE8xRU5BX1BEICovCisjZGVmaW5lIFdNODk5NV9MRE8xRU5BX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEJLyogTERPMUVOQV9QRCAqLworI2RlZmluZSBXTTg5OTVfTU9ERV9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CS8qIE1PREVfUEQgKi8KKyNkZWZpbmUgV004OTk1X01PREVfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAkvKiBNT0RFX1BEICovCisjZGVmaW5lIFdNODk5NV9NT0RFX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDIJLyogTU9ERV9QRCAqLworI2RlZmluZSBXTTg5OTVfTU9ERV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIE1PREVfUEQgKi8KKyNkZWZpbmUgV004OTk1X0NTTkFERFJfUEQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBDU05BRERSX1BEICovCisjZGVmaW5lIFdNODk5NV9DU05BRERSX1BEX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEJLyogQ1NOQUREUl9QRCAqLworI2RlZmluZSBXTTg5OTVfQ1NOQUREUl9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwCS8qIENTTkFERFJfUEQgKi8KKyNkZWZpbmUgV004OTk1X0NTTkFERFJfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMQkvKiBDU05BRERSX1BEICovCisKKy8qCisgKiBSMTg0MCAoMHg3MzApIC0gSW50ZXJydXB0IFN0YXR1cyAxCisgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAkvKiBHUDE0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MjAwMAkvKiBHUDE0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxMwkvKiBHUDE0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDE0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAkvKiBHUDEzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MTAwMAkvKiBHUDEzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxMgkvKiBHUDEzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTNfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDEzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTJfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAkvKiBHUDEyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTJfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDgwMAkvKiBHUDEyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTJfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxMQkvKiBHUDEyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTJfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDEyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAkvKiBHUDExX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDQwMAkvKiBHUDExX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxMAkvKiBHUDExX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDExX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDEwX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBHUDEwX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOQkvKiBHUDEwX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMTBfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDEwX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQOV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBHUDlfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfR1A5X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIEdQOV9FSU5UICovCisjZGVmaW5lIFdNODk5NV9HUDlfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDgJLyogR1A5X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQOV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDlfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfR1A4X0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCS8qIEdQOF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9HUDhfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAJLyogR1A4X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQOF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNwkvKiBHUDhfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfR1A4X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQOF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9HUDdfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogR1A3X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQN19FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBHUDdfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfR1A3X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2CS8qIEdQN19FSU5UICovCisjZGVmaW5lIFdNODk5NV9HUDdfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A3X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQNl9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAkvKiBHUDZfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfR1A2X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDIwCS8qIEdQNl9FSU5UICovCisjZGVmaW5lIFdNODk5NV9HUDZfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDUJLyogR1A2X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQNl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDZfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfR1A1X0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCS8qIEdQNV9FSU5UICovCisjZGVmaW5lIFdNODk5NV9HUDVfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAJLyogR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQNV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNAkvKiBHUDVfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfR1A1X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQNV9FSU5UICovCisjZGVmaW5lIFdNODk5NV9HUDRfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgJLyogR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQNF9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBHUDRfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfR1A0X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAzCS8qIEdQNF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9HUDRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQM19FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAkvKiBHUDNfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfR1AzX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA0CS8qIEdQM19FSU5UICovCisjZGVmaW5lIFdNODk5NV9HUDNfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIJLyogR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQM19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDNfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfR1AyX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIEdQMl9FSU5UICovCisjZGVmaW5lIFdNODk5NV9HUDJfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIJLyogR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBHUDJfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfR1AyX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxCS8qIEdQMl9FSU5UICovCisjZGVmaW5lIFdNODk5NV9HUDFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogR1AxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0dQMV9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBHUDFfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfR1AxX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCS8qIEdQMV9FSU5UICovCisjZGVmaW5lIFdNODk5NV9HUDFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogR1AxX0VJTlQgKi8KKworLyoKKyAqIFIxODQxICgweDczMSkgLSBJbnRlcnJ1cHQgU3RhdHVzIDIKKyAqLworI2RlZmluZSBXTTg5OTVfRENTX0RPTkVfMjNfRUlOVCAgICAgICAgICAgICAgICAgMHgxMDAwCS8qIERDU19ET05FXzIzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0RDU19ET05FXzIzX0VJTlRfTUFTSyAgICAgICAgICAgIDB4MTAwMAkvKiBEQ1NfRE9ORV8yM19FSU5UICovCisjZGVmaW5lIFdNODk5NV9EQ1NfRE9ORV8yM19FSU5UX1NISUZUICAgICAgICAgICAgICAgMTIJLyogRENTX0RPTkVfMjNfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfRENTX0RPTkVfMjNfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAxCS8qIERDU19ET05FXzIzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0RDU19ET05FXzAxX0VJTlQgICAgICAgICAgICAgICAgIDB4MDgwMAkvKiBEQ1NfRE9ORV8wMV9FSU5UICovCisjZGVmaW5lIFdNODk5NV9EQ1NfRE9ORV8wMV9FSU5UX01BU0sgICAgICAgICAgICAweDA4MDAJLyogRENTX0RPTkVfMDFfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfRENTX0RPTkVfMDFfRUlOVF9TSElGVCAgICAgICAgICAgICAgIDExCS8qIERDU19ET05FXzAxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0RDU19ET05FXzAxX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgMQkvKiBEQ1NfRE9ORV8wMV9FSU5UICovCisjZGVmaW5lIFdNODk5NV9XU0VRX0RPTkVfRUlOVCAgICAgICAgICAgICAgICAgICAweDA0MDAJLyogV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X1dTRVFfRE9ORV9FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDQwMAkvKiBXU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfV1NFUV9ET05FX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgIDEwCS8qIFdTRVFfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODk5NV9XU0VRX0RPTkVfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEJLyogV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0ZJRk9TX0VSUl9FSU5UICAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBGSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfRklGT1NfRVJSX0VJTlRfTUFTSyAgICAgICAgICAgICAgMHgwMjAwCS8qIEZJRk9TX0VSUl9FSU5UICovCisjZGVmaW5lIFdNODk5NV9GSUZPU19FUlJfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgIDkJLyogRklGT1NfRVJSX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0ZJRk9TX0VSUl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMQkvKiBGSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19TSUdfREVUX0VJTlQgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjJEUkNfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX1NJR19ERVRfRUlOVF9NQVNLICAgICAgICAweDAxMDAJLyogQUlGMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfU0lHX0RFVF9FSU5UX1NISUZUICAgICAgICAgICAgOAkvKiBBSUYyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19TSUdfREVUX0VJTlRfV0lEVEggICAgICAgICAgICAxCS8qIEFJRjJEUkNfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9TSUdfREVUX0VJTlQgICAgICAgICAgICAweDAwODAJLyogQUlGMURSQzJfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9TSUdfREVUX0VJTlRfTUFTSyAgICAgICAweDAwODAJLyogQUlGMURSQzJfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9TSUdfREVUX0VJTlRfU0hJRlQgICAgICAgICAgIDcJLyogQUlGMURSQzJfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9TSUdfREVUX0VJTlRfV0lEVEggICAgICAgICAgIDEJLyogQUlGMURSQzJfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9TSUdfREVUX0VJTlQgICAgICAgICAgICAweDAwNDAJLyogQUlGMURSQzFfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9TSUdfREVUX0VJTlRfTUFTSyAgICAgICAweDAwNDAJLyogQUlGMURSQzFfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9TSUdfREVUX0VJTlRfU0hJRlQgICAgICAgICAgIDYJLyogQUlGMURSQzFfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9TSUdfREVUX0VJTlRfV0lEVEggICAgICAgICAgIDEJLyogQUlGMURSQzFfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9TUkMyX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAgICAweDAwMjAJLyogU1JDMl9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X1NSQzJfTE9DS19FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDAyMAkvKiBTUkMyX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfU1JDMl9MT0NLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICA1CS8qIFNSQzJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NV9TUkMyX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEJLyogU1JDMl9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X1NSQzFfTE9DS19FSU5UICAgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBTUkMxX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfU1JDMV9MT0NLX0VJTlRfTUFTSyAgICAgICAgICAgICAgMHgwMDEwCS8qIFNSQzFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NV9TUkMxX0xPQ0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgIDQJLyogU1JDMV9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X1NSQzFfTE9DS19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMQkvKiBTUkMxX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9MT0NLX0VJTlQgICAgICAgICAgICAgICAgICAgMHgwMDA4CS8qIEZMTDJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NV9GTEwyX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAgICAweDAwMDgJLyogRkxMMl9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfTE9DS19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgMwkvKiBGTEwyX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9MT0NLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAxCS8qIEZMTDJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NV9GTEwxX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAgICAweDAwMDQJLyogRkxMMV9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0ZMTDFfTE9DS19FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDAwNAkvKiBGTEwxX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9MT0NLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAyCS8qIEZMTDFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NV9GTEwxX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEJLyogRkxMMV9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0hQX0RPTkVfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBIUF9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0hQX0RPTkVfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMgkvKiBIUF9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0hQX0RPTkVfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMQkvKiBIUF9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0hQX0RPTkVfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBIUF9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X01JQ0RfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBNSUNEX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X01JQ0RfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBNSUNEX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X01JQ0RfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBNSUNEX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X01JQ0RfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBNSUNEX0VJTlQgKi8KKworLyoKKyAqIFIxODQyICgweDczMikgLSBJbnRlcnJ1cHQgUmF3IFN0YXR1cyAyCisgKi8KKyNkZWZpbmUgV004OTk1X0RDU19ET05FXzIzX1NUUyAgICAgICAgICAgICAgICAgIDB4MTAwMAkvKiBEQ1NfRE9ORV8yM19TVFMgKi8KKyNkZWZpbmUgV004OTk1X0RDU19ET05FXzIzX1NUU19NQVNLICAgICAgICAgICAgIDB4MTAwMAkvKiBEQ1NfRE9ORV8yM19TVFMgKi8KKyNkZWZpbmUgV004OTk1X0RDU19ET05FXzIzX1NUU19TSElGVCAgICAgICAgICAgICAgICAxMgkvKiBEQ1NfRE9ORV8yM19TVFMgKi8KKyNkZWZpbmUgV004OTk1X0RDU19ET05FXzIzX1NUU19XSURUSCAgICAgICAgICAgICAgICAgMQkvKiBEQ1NfRE9ORV8yM19TVFMgKi8KKyNkZWZpbmUgV004OTk1X0RDU19ET05FXzAxX1NUUyAgICAgICAgICAgICAgICAgIDB4MDgwMAkvKiBEQ1NfRE9ORV8wMV9TVFMgKi8KKyNkZWZpbmUgV004OTk1X0RDU19ET05FXzAxX1NUU19NQVNLICAgICAgICAgICAgIDB4MDgwMAkvKiBEQ1NfRE9ORV8wMV9TVFMgKi8KKyNkZWZpbmUgV004OTk1X0RDU19ET05FXzAxX1NUU19TSElGVCAgICAgICAgICAgICAgICAxMQkvKiBEQ1NfRE9ORV8wMV9TVFMgKi8KKyNkZWZpbmUgV004OTk1X0RDU19ET05FXzAxX1NUU19XSURUSCAgICAgICAgICAgICAgICAgMQkvKiBEQ1NfRE9ORV8wMV9TVFMgKi8KKyNkZWZpbmUgV004OTk1X1dTRVFfRE9ORV9TVFMgICAgICAgICAgICAgICAgICAgIDB4MDQwMAkvKiBXU0VRX0RPTkVfU1RTICovCisjZGVmaW5lIFdNODk5NV9XU0VRX0RPTkVfU1RTX01BU0sgICAgICAgICAgICAgICAweDA0MDAJLyogV1NFUV9ET05FX1NUUyAqLworI2RlZmluZSBXTTg5OTVfV1NFUV9ET05FX1NUU19TSElGVCAgICAgICAgICAgICAgICAgIDEwCS8qIFdTRVFfRE9ORV9TVFMgKi8KKyNkZWZpbmUgV004OTk1X1dTRVFfRE9ORV9TVFNfV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBXU0VRX0RPTkVfU1RTICovCisjZGVmaW5lIFdNODk5NV9GSUZPU19FUlJfU1RTICAgICAgICAgICAgICAgICAgICAweDAyMDAJLyogRklGT1NfRVJSX1NUUyAqLworI2RlZmluZSBXTTg5OTVfRklGT1NfRVJSX1NUU19NQVNLICAgICAgICAgICAgICAgMHgwMjAwCS8qIEZJRk9TX0VSUl9TVFMgKi8KKyNkZWZpbmUgV004OTk1X0ZJRk9TX0VSUl9TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgOQkvKiBGSUZPU19FUlJfU1RTICovCisjZGVmaW5lIFdNODk5NV9GSUZPU19FUlJfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgIDEJLyogRklGT1NfRVJSX1NUUyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19TSUdfREVUX1NUUyAgICAgICAgICAgICAgMHgwMTAwCS8qIEFJRjJEUkNfU0lHX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjJEUkNfU0lHX0RFVF9TVFNfTUFTSyAgICAgICAgIDB4MDEwMAkvKiBBSUYyRFJDX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NV9BSUYyRFJDX1NJR19ERVRfU1RTX1NISUZUICAgICAgICAgICAgIDgJLyogQUlGMkRSQ19TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTVfQUlGMkRSQ19TSUdfREVUX1NUU19XSURUSCAgICAgICAgICAgICAxCS8qIEFJRjJEUkNfU0lHX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1NJR19ERVRfU1RTICAgICAgICAgICAgIDB4MDA4MAkvKiBBSUYxRFJDMl9TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzJfU0lHX0RFVF9TVFNfTUFTSyAgICAgICAgMHgwMDgwCS8qIEFJRjFEUkMyX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMl9TSUdfREVUX1NUU19TSElGVCAgICAgICAgICAgIDcJLyogQUlGMURSQzJfU0lHX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMyX1NJR19ERVRfU1RTX1dJRFRIICAgICAgICAgICAgMQkvKiBBSUYxRFJDMl9TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfU0lHX0RFVF9TVFMgICAgICAgICAgICAgMHgwMDQwCS8qIEFJRjFEUkMxX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NV9BSUYxRFJDMV9TSUdfREVUX1NUU19NQVNLICAgICAgICAweDAwNDAJLyogQUlGMURSQzFfU0lHX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk1X0FJRjFEUkMxX1NJR19ERVRfU1RTX1NISUZUICAgICAgICAgICAgNgkvKiBBSUYxRFJDMV9TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTVfQUlGMURSQzFfU0lHX0RFVF9TVFNfV0lEVEggICAgICAgICAgICAxCS8qIEFJRjFEUkMxX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NV9TUkMyX0xPQ0tfU1RTICAgICAgICAgICAgICAgICAgICAweDAwMjAJLyogU1JDMl9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTVfU1JDMl9MT0NLX1NUU19NQVNLICAgICAgICAgICAgICAgMHgwMDIwCS8qIFNSQzJfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk1X1NSQzJfTE9DS19TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgNQkvKiBTUkMyX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NV9TUkMyX0xPQ0tfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgIDEJLyogU1JDMl9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTVfU1JDMV9MT0NLX1NUUyAgICAgICAgICAgICAgICAgICAgMHgwMDEwCS8qIFNSQzFfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk1X1NSQzFfTE9DS19TVFNfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMAkvKiBTUkMxX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NV9TUkMxX0xPQ0tfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgIDQJLyogU1JDMV9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTVfU1JDMV9MT0NLX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAxCS8qIFNSQzFfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfTE9DS19TVFMgICAgICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBGTEwyX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NV9GTEwyX0xPQ0tfU1RTX01BU0sgICAgICAgICAgICAgICAweDAwMDgJLyogRkxMMl9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTVfRkxMMl9MT0NLX1NUU19TSElGVCAgICAgICAgICAgICAgICAgICAzCS8qIEZMTDJfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk1X0ZMTDJfTE9DS19TVFNfV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBGTEwyX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NV9GTEwxX0xPQ0tfU1RTICAgICAgICAgICAgICAgICAgICAweDAwMDQJLyogRkxMMV9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTVfRkxMMV9MT0NLX1NUU19NQVNLICAgICAgICAgICAgICAgMHgwMDA0CS8qIEZMTDFfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk1X0ZMTDFfTE9DS19TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgMgkvKiBGTEwxX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NV9GTEwxX0xPQ0tfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgIDEJLyogRkxMMV9MT0NLX1NUUyAqLworCisvKgorICogUjE4NDggKDB4NzM4KSAtIEludGVycnVwdCBTdGF0dXMgMSBNYXNrCisgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTRfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAkvKiBJTV9HUDE0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTRfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MjAwMAkvKiBJTV9HUDE0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAxMwkvKiBJTV9HUDE0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBJTV9HUDE0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTNfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAkvKiBJTV9HUDEzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTNfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MTAwMAkvKiBJTV9HUDEzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTNfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAxMgkvKiBJTV9HUDEzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTNfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBJTV9HUDEzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTJfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAkvKiBJTV9HUDEyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTJfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDgwMAkvKiBJTV9HUDEyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTJfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAxMQkvKiBJTV9HUDEyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTJfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBJTV9HUDEyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTFfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAkvKiBJTV9HUDExX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTFfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDQwMAkvKiBJTV9HUDExX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTFfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAxMAkvKiBJTV9HUDExX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBJTV9HUDExX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTBfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBJTV9HUDEwX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTBfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDIwMAkvKiBJTV9HUDEwX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTBfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgOQkvKiBJTV9HUDEwX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMTBfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMQkvKiBJTV9HUDEwX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQOV9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvKiBJTV9HUDlfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fR1A5X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIElNX0dQOV9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9HUDlfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDgJLyogSU1fR1A5X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQOV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMQkvKiBJTV9HUDlfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fR1A4X0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCS8qIElNX0dQOF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9HUDhfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwODAJLyogSU1fR1A4X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQOF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgNwkvKiBJTV9HUDhfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fR1A4X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIElNX0dQOF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9HUDdfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwNDAJLyogSU1fR1A3X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQN19FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDA0MAkvKiBJTV9HUDdfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fR1A3X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICA2CS8qIElNX0dQN19FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9HUDdfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogSU1fR1A3X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQNl9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAkvKiBJTV9HUDZfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fR1A2X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDIwCS8qIElNX0dQNl9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9HUDZfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUJLyogSU1fR1A2X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQNl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMQkvKiBJTV9HUDZfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fR1A1X0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCS8qIElNX0dQNV9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9HUDVfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMTAJLyogSU1fR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQNV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgNAkvKiBJTV9HUDVfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fR1A1X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIElNX0dQNV9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9HUDRfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDgJLyogSU1fR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQNF9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBJTV9HUDRfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fR1A0X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAzCS8qIElNX0dQNF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9HUDRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogSU1fR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQM19FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAkvKiBJTV9HUDNfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fR1AzX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA0CS8qIElNX0dQM19FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9HUDNfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIJLyogSU1fR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQM19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMQkvKiBJTV9HUDNfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fR1AyX0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIElNX0dQMl9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9HUDJfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIJLyogSU1fR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMQkvKiBJTV9HUDJfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fR1AyX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxCS8qIElNX0dQMl9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9HUDFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEJLyogSU1fR1AxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0dQMV9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBJTV9HUDFfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fR1AxX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwCS8qIElNX0dQMV9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9HUDFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEJLyogSU1fR1AxX0VJTlQgKi8KKworLyoKKyAqIFIxODQ5ICgweDczOSkgLSBJbnRlcnJ1cHQgU3RhdHVzIDIgTWFzaworICovCisjZGVmaW5lIFdNODk5NV9JTV9EQ1NfRE9ORV8yM19FSU5UICAgICAgICAgICAgICAweDEwMDAJLyogSU1fRENTX0RPTkVfMjNfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fRENTX0RPTkVfMjNfRUlOVF9NQVNLICAgICAgICAgMHgxMDAwCS8qIElNX0RDU19ET05FXzIzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0RDU19ET05FXzIzX0VJTlRfU0hJRlQgICAgICAgICAgICAxMgkvKiBJTV9EQ1NfRE9ORV8yM19FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9EQ1NfRE9ORV8yM19FSU5UX1dJRFRIICAgICAgICAgICAgIDEJLyogSU1fRENTX0RPTkVfMjNfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fRENTX0RPTkVfMDFfRUlOVCAgICAgICAgICAgICAgMHgwODAwCS8qIElNX0RDU19ET05FXzAxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0RDU19ET05FXzAxX0VJTlRfTUFTSyAgICAgICAgIDB4MDgwMAkvKiBJTV9EQ1NfRE9ORV8wMV9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9EQ1NfRE9ORV8wMV9FSU5UX1NISUZUICAgICAgICAgICAgMTEJLyogSU1fRENTX0RPTkVfMDFfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fRENTX0RPTkVfMDFfRUlOVF9XSURUSCAgICAgICAgICAgICAxCS8qIElNX0RDU19ET05FXzAxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX1dTRVFfRE9ORV9FSU5UICAgICAgICAgICAgICAgIDB4MDQwMAkvKiBJTV9XU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fV1NFUV9ET05FX0VJTlRfTUFTSyAgICAgICAgICAgMHgwNDAwCS8qIElNX1dTRVFfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9XU0VRX0RPTkVfRUlOVF9TSElGVCAgICAgICAgICAgICAgMTAJLyogSU1fV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX1dTRVFfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgMQkvKiBJTV9XU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fRklGT1NfRVJSX0VJTlQgICAgICAgICAgICAgICAgMHgwMjAwCS8qIElNX0ZJRk9TX0VSUl9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9GSUZPU19FUlJfRUlOVF9NQVNLICAgICAgICAgICAweDAyMDAJLyogSU1fRklGT1NfRVJSX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0ZJRk9TX0VSUl9FSU5UX1NISUZUICAgICAgICAgICAgICAgOQkvKiBJTV9GSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fRklGT1NfRVJSX0VJTlRfV0lEVEggICAgICAgICAgICAgICAxCS8qIElNX0ZJRk9TX0VSUl9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9BSUYyRFJDX1NJR19ERVRfRUlOVCAgICAgICAgICAweDAxMDAJLyogSU1fQUlGMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0FJRjJEUkNfU0lHX0RFVF9FSU5UX01BU0sgICAgIDB4MDEwMAkvKiBJTV9BSUYyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fQUlGMkRSQ19TSUdfREVUX0VJTlRfU0hJRlQgICAgICAgICA4CS8qIElNX0FJRjJEUkNfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9BSUYyRFJDX1NJR19ERVRfRUlOVF9XSURUSCAgICAgICAgIDEJLyogSU1fQUlGMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0FJRjFEUkMyX1NJR19ERVRfRUlOVCAgICAgICAgIDB4MDA4MAkvKiBJTV9BSUYxRFJDMl9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0FJRjFEUkMyX1NJR19ERVRfRUlOVF9NQVNLICAgIDB4MDA4MAkvKiBJTV9BSUYxRFJDMl9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0FJRjFEUkMyX1NJR19ERVRfRUlOVF9TSElGVCAgICAgICAgNwkvKiBJTV9BSUYxRFJDMl9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0FJRjFEUkMyX1NJR19ERVRfRUlOVF9XSURUSCAgICAgICAgMQkvKiBJTV9BSUYxRFJDMl9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0FJRjFEUkMxX1NJR19ERVRfRUlOVCAgICAgICAgIDB4MDA0MAkvKiBJTV9BSUYxRFJDMV9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0FJRjFEUkMxX1NJR19ERVRfRUlOVF9NQVNLICAgIDB4MDA0MAkvKiBJTV9BSUYxRFJDMV9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0FJRjFEUkMxX1NJR19ERVRfRUlOVF9TSElGVCAgICAgICAgNgkvKiBJTV9BSUYxRFJDMV9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0FJRjFEUkMxX1NJR19ERVRfRUlOVF9XSURUSCAgICAgICAgMQkvKiBJTV9BSUYxRFJDMV9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX1NSQzJfTE9DS19FSU5UICAgICAgICAgICAgICAgIDB4MDAyMAkvKiBJTV9TUkMyX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fU1JDMl9MT0NLX0VJTlRfTUFTSyAgICAgICAgICAgMHgwMDIwCS8qIElNX1NSQzJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9TUkMyX0xPQ0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgIDUJLyogSU1fU1JDMl9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX1NSQzJfTE9DS19FSU5UX1dJRFRIICAgICAgICAgICAgICAgMQkvKiBJTV9TUkMyX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fU1JDMV9MT0NLX0VJTlQgICAgICAgICAgICAgICAgMHgwMDEwCS8qIElNX1NSQzFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9TUkMxX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAweDAwMTAJLyogSU1fU1JDMV9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX1NSQzFfTE9DS19FSU5UX1NISUZUICAgICAgICAgICAgICAgNAkvKiBJTV9TUkMxX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fU1JDMV9MT0NLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAxCS8qIElNX1NSQzFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9GTEwyX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAweDAwMDgJLyogSU1fRkxMMl9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0ZMTDJfTE9DS19FSU5UX01BU0sgICAgICAgICAgIDB4MDAwOAkvKiBJTV9GTEwyX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fRkxMMl9MT0NLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAzCS8qIElNX0ZMTDJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9GTEwyX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgIDEJLyogSU1fRkxMMl9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0ZMTDFfTE9DS19FSU5UICAgICAgICAgICAgICAgIDB4MDAwNAkvKiBJTV9GTEwxX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fRkxMMV9MT0NLX0VJTlRfTUFTSyAgICAgICAgICAgMHgwMDA0CS8qIElNX0ZMTDFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NV9JTV9GTEwxX0xPQ0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgIDIJLyogSU1fRkxMMV9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk1X0lNX0ZMTDFfTE9DS19FSU5UX1dJRFRIICAgICAgICAgICAgICAgMQkvKiBJTV9GTEwxX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fSFBfRE9ORV9FSU5UICAgICAgICAgICAgICAgICAgMHgwMDAyCS8qIElNX0hQX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fSFBfRE9ORV9FSU5UX01BU0sgICAgICAgICAgICAgMHgwMDAyCS8qIElNX0hQX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fSFBfRE9ORV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAxCS8qIElNX0hQX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fSFBfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAxCS8qIElNX0hQX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fTUlDRF9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCS8qIElNX01JQ0RfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fTUlDRF9FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwMDAxCS8qIElNX01JQ0RfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fTUlDRF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAwCS8qIElNX01JQ0RfRUlOVCAqLworI2RlZmluZSBXTTg5OTVfSU1fTUlDRF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxCS8qIElNX01JQ0RfRUlOVCAqLworCisvKgorICogUjE4NTYgKDB4NzQwKSAtIEludGVycnVwdCBDb250cm9sCisgKi8KKyNkZWZpbmUgV004OTk1X0lNX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBJTV9JUlEgKi8KKyNkZWZpbmUgV004OTk1X0lNX0lSUV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQkvKiBJTV9JUlEgKi8KKyNkZWZpbmUgV004OTk1X0lNX0lSUV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBJTV9JUlEgKi8KKyNkZWZpbmUgV004OTk1X0lNX0lSUV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBJTV9JUlEgKi8KKworLyoKKyAqIFIyMDQ4ICgweDgwMCkgLSBMZWZ0IFBETSBTcGVha2VyIDEKKyAqLworI2RlZmluZSBXTTg5OTVfU1BLMUxfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCS8qIFNQSzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfU1BLMUxfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDEwCS8qIFNQSzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfU1BLMUxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA0CS8qIFNQSzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfU1BLMUxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxCS8qIFNQSzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTVfU1BLMUxfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CS8qIFNQSzFMX01VVEUgKi8KKyNkZWZpbmUgV004OTk1X1NQSzFMX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBTUEsxTF9NVVRFICovCisjZGVmaW5lIFdNODk5NV9TUEsxTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDMJLyogU1BLMUxfTVVURSAqLworI2RlZmluZSBXTTg5OTVfU1BLMUxfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxCS8qIFNQSzFMX01VVEUgKi8KKyNkZWZpbmUgV004OTk1X1NQSzFMX01VVEVfWkMgICAgICAgICAgICAgICAgICAgIDB4MDAwNAkvKiBTUEsxTF9NVVRFX1pDICovCisjZGVmaW5lIFdNODk5NV9TUEsxTF9NVVRFX1pDX01BU0sgICAgICAgICAgICAgICAweDAwMDQJLyogU1BLMUxfTVVURV9aQyAqLworI2RlZmluZSBXTTg5OTVfU1BLMUxfTVVURV9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAyCS8qIFNQSzFMX01VVEVfWkMgKi8KKyNkZWZpbmUgV004OTk1X1NQSzFMX01VVEVfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgMQkvKiBTUEsxTF9NVVRFX1pDICovCisjZGVmaW5lIFdNODk5NV9TUEsxTF9TUkNfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDMJLyogU1BLMUxfU1JDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk1X1NQSzFMX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBTUEsxTF9TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTVfU1BLMUxfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAyCS8qIFNQSzFMX1NSQyAtIFsxOjBdICovCisKKy8qCisgKiBSMjA0OSAoMHg4MDEpIC0gUmlnaHQgUERNIFNwZWFrZXIgMQorICovCisjZGVmaW5lIFdNODk5NV9TUEsxUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAJLyogU1BLMVJfRU5BICovCisjZGVmaW5lIFdNODk5NV9TUEsxUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMTAJLyogU1BLMVJfRU5BICovCisjZGVmaW5lIFdNODk5NV9TUEsxUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDQJLyogU1BLMVJfRU5BICovCisjZGVmaW5lIFdNODk5NV9TUEsxUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEJLyogU1BLMVJfRU5BICovCisjZGVmaW5lIFdNODk5NV9TUEsxUl9NVVRFICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgJLyogU1BLMVJfTVVURSAqLworI2RlZmluZSBXTTg5OTVfU1BLMVJfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA4CS8qIFNQSzFSX01VVEUgKi8KKyNkZWZpbmUgV004OTk1X1NQSzFSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMwkvKiBTUEsxUl9NVVRFICovCisjZGVmaW5lIFdNODk5NV9TUEsxUl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEJLyogU1BLMVJfTVVURSAqLworI2RlZmluZSBXTTg5OTVfU1BLMVJfTVVURV9aQyAgICAgICAgICAgICAgICAgICAgMHgwMDA0CS8qIFNQSzFSX01VVEVfWkMgKi8KKyNkZWZpbmUgV004OTk1X1NQSzFSX01VVEVfWkNfTUFTSyAgICAgICAgICAgICAgIDB4MDAwNAkvKiBTUEsxUl9NVVRFX1pDICovCisjZGVmaW5lIFdNODk5NV9TUEsxUl9NVVRFX1pDX1NISUZUICAgICAgICAgICAgICAgICAgIDIJLyogU1BLMVJfTVVURV9aQyAqLworI2RlZmluZSBXTTg5OTVfU1BLMVJfTVVURV9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAxCS8qIFNQSzFSX01VVEVfWkMgKi8KKyNkZWZpbmUgV004OTk1X1NQSzFSX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMwkvKiBTUEsxUl9TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTVfU1BLMVJfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwCS8qIFNQSzFSX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NV9TUEsxUl9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDIJLyogU1BLMVJfU1JDIC0gWzE6MF0gKi8KKworLyoKKyAqIFIyMDUwICgweDgwMikgLSBQRE0gU3BlYWtlciAxIE11dGUgU2VxdWVuY2UKKyAqLworI2RlZmluZSBXTTg5OTVfU1BLMV9NVVRFX1NFUTFfTUFTSyAgICAgICAgICAgICAgMHgwMEZGCS8qIFNQSzFfTVVURV9TRVExIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X1NQSzFfTVVURV9TRVExX1NISUZUICAgICAgICAgICAgICAgICAgMAkvKiBTUEsxX01VVEVfU0VRMSAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NV9TUEsxX01VVEVfU0VRMV9XSURUSCAgICAgICAgICAgICAgICAgIDgJLyogU1BLMV9NVVRFX1NFUTEgLSBbNzowXSAqLworCisvKgorICogUjIwNTYgKDB4ODA4KSAtIExlZnQgUERNIFNwZWFrZXIgMgorICovCisjZGVmaW5lIFdNODk5NV9TUEsyTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAJLyogU1BLMkxfRU5BICovCisjZGVmaW5lIFdNODk5NV9TUEsyTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMTAJLyogU1BLMkxfRU5BICovCisjZGVmaW5lIFdNODk5NV9TUEsyTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDQJLyogU1BLMkxfRU5BICovCisjZGVmaW5lIFdNODk5NV9TUEsyTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEJLyogU1BLMkxfRU5BICovCisjZGVmaW5lIFdNODk5NV9TUEsyTF9NVVRFICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgJLyogU1BLMkxfTVVURSAqLworI2RlZmluZSBXTTg5OTVfU1BLMkxfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA4CS8qIFNQSzJMX01VVEUgKi8KKyNkZWZpbmUgV004OTk1X1NQSzJMX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMwkvKiBTUEsyTF9NVVRFICovCisjZGVmaW5lIFdNODk5NV9TUEsyTF9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEJLyogU1BLMkxfTVVURSAqLworI2RlZmluZSBXTTg5OTVfU1BLMkxfTVVURV9aQyAgICAgICAgICAgICAgICAgICAgMHgwMDA0CS8qIFNQSzJMX01VVEVfWkMgKi8KKyNkZWZpbmUgV004OTk1X1NQSzJMX01VVEVfWkNfTUFTSyAgICAgICAgICAgICAgIDB4MDAwNAkvKiBTUEsyTF9NVVRFX1pDICovCisjZGVmaW5lIFdNODk5NV9TUEsyTF9NVVRFX1pDX1NISUZUICAgICAgICAgICAgICAgICAgIDIJLyogU1BLMkxfTVVURV9aQyAqLworI2RlZmluZSBXTTg5OTVfU1BLMkxfTVVURV9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAxCS8qIFNQSzJMX01VVEVfWkMgKi8KKyNkZWZpbmUgV004OTk1X1NQSzJMX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMwkvKiBTUEsyTF9TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTVfU1BLMkxfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwCS8qIFNQSzJMX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NV9TUEsyTF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDIJLyogU1BLMkxfU1JDIC0gWzE6MF0gKi8KKworLyoKKyAqIFIyMDU3ICgweDgwOSkgLSBSaWdodCBQRE0gU3BlYWtlciAyCisgKi8KKyNkZWZpbmUgV004OTk1X1NQSzJSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBTUEsyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X1NQSzJSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxMAkvKiBTUEsyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X1NQSzJSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNAkvKiBTUEsyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X1NQSzJSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMQkvKiBTUEsyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk1X1NQSzJSX01VVEUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAkvKiBTUEsyUl9NVVRFICovCisjZGVmaW5lIFdNODk5NV9TUEsyUl9NVVRFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDgJLyogU1BLMlJfTVVURSAqLworI2RlZmluZSBXTTg5OTVfU1BLMlJfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAzCS8qIFNQSzJSX01VVEUgKi8KKyNkZWZpbmUgV004OTk1X1NQSzJSX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMQkvKiBTUEsyUl9NVVRFICovCisjZGVmaW5lIFdNODk5NV9TUEsyUl9NVVRFX1pDICAgICAgICAgICAgICAgICAgICAweDAwMDQJLyogU1BLMlJfTVVURV9aQyAqLworI2RlZmluZSBXTTg5OTVfU1BLMlJfTVVURV9aQ19NQVNLICAgICAgICAgICAgICAgMHgwMDA0CS8qIFNQSzJSX01VVEVfWkMgKi8KKyNkZWZpbmUgV004OTk1X1NQSzJSX01VVEVfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgMgkvKiBTUEsyUl9NVVRFX1pDICovCisjZGVmaW5lIFdNODk5NV9TUEsyUl9NVVRFX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgIDEJLyogU1BLMlJfTVVURV9aQyAqLworI2RlZmluZSBXTTg5OTVfU1BLMlJfU1JDX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAzCS8qIFNQSzJSX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NV9TUEsyUl9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAJLyogU1BLMlJfU1JDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk1X1NQSzJSX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMgkvKiBTUEsyUl9TUkMgLSBbMTowXSAqLworCisvKgorICogUjIwNTggKDB4ODBBKSAtIFBETSBTcGVha2VyIDIgTXV0ZSBTZXF1ZW5jZQorICovCisjZGVmaW5lIFdNODk5NV9TUEsyX01VVEVfU0VRMV9NQVNLICAgICAgICAgICAgICAweDAwRkYJLyogU1BLMl9NVVRFX1NFUTEgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTVfU1BLMl9NVVRFX1NFUTFfU0hJRlQgICAgICAgICAgICAgICAgICAwCS8qIFNQSzJfTVVURV9TRVExIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk1X1NQSzJfTVVURV9TRVExX1dJRFRIICAgICAgICAgICAgICAgICAgOAkvKiBTUEsyX01VVEVfU0VRMSAtIFs3OjBdICovCisKKyNkZWZpbmUgV004OTk1X0NMQVNTX1dfU1dJVENIKHhuYW1lLCByZWcsIHNoaWZ0LCBtYXgsIGludmVydCkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgXAorCS5pbmZvID0gc25kX3NvY19pbmZvX3ZvbHN3LCBcCisJLmdldCA9IHNuZF9zb2NfZGFwbV9nZXRfdm9sc3csIC5wdXQgPSB3bTg5OTVfcHV0X2NsYXNzX3csIFwKKwkucHJpdmF0ZV92YWx1ZSA9ICBTT0NfU0lOR0xFX1ZBTFVFKHJlZywgc2hpZnQsIG1heCwgaW52ZXJ0KSBcCit9CisKK3N0cnVjdCB3bTg5OTVfcmVnX2FjY2VzcyB7CisJdTE2IHJlYWQ7CisJdTE2IHdyaXRlOworCXUxNiB2b2w7Cit9OworCisvKiBTb3VyY2VzIGZvciBBSUYxLzIgU1lTQ0xLIC0gdXNlIHdpdGggc2V0X2RhaV9zeXNjbGsoKSAqLworZW51bSBjbGtfc3JjIHsKKwlXTTg5OTVfU1lTQ0xLX01DTEsxID0gMSwKKwlXTTg5OTVfU1lTQ0xLX01DTEsyLAorCVdNODk5NV9TWVNDTEtfRkxMMSwKKwlXTTg5OTVfU1lTQ0xLX0ZMTDIsCisJV004OTk1X1NZU0NMS19PUENMSworfTsKKworI2RlZmluZSBXTTg5OTVfRkxMMSAxCisjZGVmaW5lIFdNODk5NV9GTEwyIDIKKworI2RlZmluZSBXTTg5OTVfRkxMX1NSQ19NQ0xLMSAgMQorI2RlZmluZSBXTTg5OTVfRkxMX1NSQ19NQ0xLMiAgMgorI2RlZmluZSBXTTg5OTVfRkxMX1NSQ19MUkNMSyAgMworI2RlZmluZSBXTTg5OTVfRkxMX1NSQ19CQ0xLICAgNAorCisjZW5kaWYgLyogX1dNODk5NV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jIGIvc291bmQvc29jL2NvZGVjcy93bTkwODEuYwppbmRleCBhNDg2NjcwLi40MzgyNWIyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205MDgxLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKQEAgLTE1OCw3ICsxNTcsNiBAQAogc3RydWN0IHdtOTA4MV9wcml2IHsKIAllbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2xfdHlwZTsKIAl2b2lkICpjb250cm9sX2RhdGE7Ci0JdTE2IHJlZ19jYWNoZVtXTTkwODFfTUFYX1JFR0lTVEVSICsgMV07CiAJaW50IHN5c2Nsa19zb3VyY2U7CiAJaW50IG1jbGtfcmF0ZTsKIAlpbnQgc3lzY2xrX3JhdGU7CkBAIC01OTEsNiArNTg5LDEwIEBACiAJcmVnNSB8PSBmbGxfZGl2LmZsbF9jbGtfcmVmX2RpdiA8PCBXTTkwODFfRkxMX0NMS19SRUZfRElWX1NISUZUOwogCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9GTExfQ09OVFJPTF81LCByZWc1KTsKIAorCS8qIFNldCBnYWluIHRvIHRoZSByZWNvbW1lbmRlZCB2YWx1ZSAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNOTA4MV9GTExfQ09OVFJPTF80LAorCQkJICAgIFdNOTA4MV9GTExfR0FJTl9NQVNLLCAwKTsKKwogCS8qIEVuYWJsZSB0aGUgRkxMICovCiAJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX0ZMTF9DT05UUk9MXzEsIHJlZzEgfCBXTTkwODFfRkxMX0VOQSk7CiAKQEAgLTgwNSw3ICs4MDcsNyBAQAogCiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKIAkJLyogSW5pdGlhbCBjb2xkIHN0YXJ0ICovCi0JCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKIAkJCS8qIERpc2FibGUgTElORU9VVCBkaXNjaGFyZ2UgKi8KIAkJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV005MDgxX0FOVElfUE9QX0NPTlRST0wpOwogCQkJcmVnICY9IH5XTTkwODFfTElORU9VVF9ESVNDSDsKQEAgLTg2NSw3ICs4NjcsNyBAQAogCQlicmVhazsKIAl9CiAKLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAogCXJldHVybiAwOwogfQpAQCAtMTIyOCw2ICsxMjMwLDcgQEAKIHN0YXRpYyBpbnQgd205MDgxX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgd205MDgxX3ByaXYgKndtOTA4MSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlpbnQgcmV0OwogCXUxNiByZWc7CiAKQEAgLTEyNjksOSArMTI3Miw5IEBACiAJCQkJICAgICBBUlJBWV9TSVpFKHdtOTA4MV9lcV9jb250cm9scykpOwogCX0KIAotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtOTA4MV9kYXBtX3dpZGdldHMsCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTkwODFfZGFwbV93aWRnZXRzLAogCQkJCSAgQVJSQVlfU0laRSh3bTkwODFfZGFwbV93aWRnZXRzKSk7Ci0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX3BhdGhzLCBBUlJBWV9TSVpFKGF1ZGlvX3BhdGhzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fcGF0aHMsIEFSUkFZX1NJWkUoYXVkaW9fcGF0aHMpKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA5MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTkwOTAuYwppbmRleCA2ZTVmNjRmLi5hNzg4YzQyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA5MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205MDkwLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAjaW5jbHVkZSA8c291bmQvd205MDkwLmg+CiAKQEAgLTQ0MiwzMSArNDQxLDMyIEBACiBzdGF0aWMgaW50IHdtOTA5MF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCB3bTkwOTBfcHJpdiAqd205MDkwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCWludCBpOwogCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd205MDkwX2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtOTA5MF9kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHdtOTA5MF9kYXBtX3dpZGdldHMpKTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtOTA5MF9jb250cm9scywKIAkJCSAgICAgQVJSQVlfU0laRSh3bTkwOTBfY29udHJvbHMpKTsKIAogCWlmICh3bTkwOTAtPnBkYXRhLmxpbjFfZGlmZikgewotCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwX2luMV9kaWZmLAorCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXBfaW4xX2RpZmYsCiAJCQkJCUFSUkFZX1NJWkUoYXVkaW9fbWFwX2luMV9kaWZmKSk7CiAJfSBlbHNlIHsKLQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcF9pbjFfc2UsCisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcF9pbjFfc2UsCiAJCQkJCUFSUkFZX1NJWkUoYXVkaW9fbWFwX2luMV9zZSkpOwogCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd205MDkwX2luMV9zZV9jb250cm9scywKIAkJCQkgICAgIEFSUkFZX1NJWkUod205MDkwX2luMV9zZV9jb250cm9scykpOwogCX0KIAogCWlmICh3bTkwOTAtPnBkYXRhLmxpbjJfZGlmZikgewotCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwX2luMl9kaWZmLAorCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXBfaW4yX2RpZmYsCiAJCQkJCUFSUkFZX1NJWkUoYXVkaW9fbWFwX2luMl9kaWZmKSk7CiAJfSBlbHNlIHsKLQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcF9pbjJfc2UsCisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcF9pbjJfc2UsCiAJCQkJCUFSUkFZX1NJWkUoYXVkaW9fbWFwX2luMl9zZSkpOwogCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd205MDkwX2luMl9zZV9jb250cm9scywKIAkJCQkgICAgIEFSUkFZX1NJWkUod205MDkwX2luMl9zZV9jb250cm9scykpOwpAQCAtNTEzLDcgKzUxMyw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKLQkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgewogCQkJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXIgY2FjaGUgKi8KIAkJCWZvciAoaSA9IDE7IGkgPCBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZTsgaSsrKSB7CiAJCQkJaWYgKHJlZ19jYWNoZVtpXSA9PSB3bTkwOTBfcmVnX2RlZmF1bHRzW2ldKQpAQCAtNTQzLDcgKzU0Myw3IEBACiAJCWJyZWFrOwogCX0KIAotCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MDUuYwppbmRleCBhMTQ0YWNkLi40N2IzNTdhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKICNpbmNsdWRlICJ3bTk3MDUuaCIKIApAQCAtMjAzLDkgKzIwMiwxMSBAQAogCiBzdGF0aWMgaW50IHdtOTcwNV9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd205NzA1X2RhcG1fd2lkZ2V0cywKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CisKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtOTcwNV9kYXBtX3dpZGdldHMsCiAJCQkJCUFSUkFZX1NJWkUod205NzA1X2RhcG1fd2lkZ2V0cykpOwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYwppbmRleCBkMmYyMjRkLi5iZjVkNGVmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSAid205NzEyLmgiCiAKICNkZWZpbmUgV005NzEyX1ZFUlNJT04gIjAuNCIKQEAgLTQzMiwxMCArNDMxLDExIEBACiAKIHN0YXRpYyBpbnQgd205NzEyX2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTk3MTJfZGFwbV93aWRnZXRzLAotCQkJCSAgQVJSQVlfU0laRSh3bTk3MTJfZGFwbV93aWRnZXRzKSk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtOTcxMl9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtOTcxMl9kYXBtX3dpZGdldHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU3MCw3ICs1NzAsNyBAQAogCQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X1BPV0VSRE9XTiwgMHhmZmZmKTsKIAkJYnJlYWs7CiAJfQotCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYwppbmRleCA3ZGExM2IwLi4zOGVkOTg1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgIndtOTcxMy5oIgogCkBAIC02NDcsMTAgKzY0NiwxMiBAQAogCiBzdGF0aWMgaW50IHdtOTcxM19hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd205NzEzX2RhcG1fd2lkZ2V0cywKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CisKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtOTcxM19kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHdtOTcxM19kYXBtX3dpZGdldHMpKTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTQ3LDcgKzExNDgsNyBAQAogCQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X1BPV0VSRE9XTiwgMHhmZmZmKTsKIAkJYnJlYWs7CiAJfQotCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCmluZGV4IDBlMjQwOTIuLmM0NjY5ODIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogCkBAIC05NCw0MSArOTMsNjEgQEAKIAlzdHJ1Y3Qgd21faHVic19kYXRhICpodWJzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJdTE2IHJlZywgcmVnX2wsIHJlZ19yLCBkY3NfY2ZnOwogCi0JLyogU2V0IGZvciAzMiBzZXJpZXMgdXBkYXRlcyAqLwotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19EQ19TRVJWT18xLAotCQkJICAgIFdNODk5M19EQ1NfU0VSSUVTX05PXzAxX01BU0ssCi0JCQkgICAgMzIgPDwgV004OTkzX0RDU19TRVJJRVNfTk9fMDFfU0hJRlQpOwotCXdhaXRfZm9yX2RjX3NlcnZvKGNvZGVjLAotCQkJICBXTTg5OTNfRENTX1RSSUdfU0VSSUVTXzAgfCBXTTg5OTNfRENTX1RSSUdfU0VSSUVTXzEpOworCS8qIElmIHdlJ3JlIHVzaW5nIGEgZGlnaXRhbCBvbmx5IHBhdGggYW5kIGhhdmUgYSBwcmV2aW91c2x5CisJICogY2FsbGlicmF0ZWQgREMgc2Vydm8gb2Zmc2V0IHN0b3JlZCB0aGVuIHVzZSB0aGF0LiAqLworCWlmIChodWJzLT5jbGFzc193ICYmIGh1YnMtPmNsYXNzX3dfZGNzKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIlVzaW5nIGNhY2hlZCBEQyBzZXJ2byBvZmZzZXQgJXhcbiIsCisJCQlodWJzLT5jbGFzc193X2Rjcyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19EQ19TRVJWT18zLCBodWJzLT5jbGFzc193X2Rjcyk7CisJCXdhaXRfZm9yX2RjX3NlcnZvKGNvZGVjLAorCQkJCSAgV004OTkzX0RDU19UUklHX0RBQ19XUl8wIHwKKwkJCQkgIFdNODk5M19EQ1NfVFJJR19EQUNfV1JfMSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBEZXZpY2VzIG5vdCB1c2luZyBhIERDUyBjb2RlIGNvcnJlY3Rpb24gaGF2ZSBzdGFydHVwIG1vZGUgKi8KKwlpZiAoaHVicy0+ZGNzX2NvZGVzKSB7CisJCS8qIFNldCBmb3IgMzIgc2VyaWVzIHVwZGF0ZXMgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0RDX1NFUlZPXzEsCisJCQkJICAgIFdNODk5M19EQ1NfU0VSSUVTX05PXzAxX01BU0ssCisJCQkJICAgIDMyIDw8IFdNODk5M19EQ1NfU0VSSUVTX05PXzAxX1NISUZUKTsKKwkJd2FpdF9mb3JfZGNfc2Vydm8oY29kZWMsCisJCQkJICBXTTg5OTNfRENTX1RSSUdfU0VSSUVTXzAgfAorCQkJCSAgV004OTkzX0RDU19UUklHX1NFUklFU18xKTsKKwl9IGVsc2UgeworCQl3YWl0X2Zvcl9kY19zZXJ2byhjb2RlYywKKwkJCQkgIFdNODk5M19EQ1NfVFJJR19TVEFSVFVQXzAgfAorCQkJCSAgV004OTkzX0RDU19UUklHX1NUQVJUVVBfMSk7CisJfQorCisJLyogRGlmZmVyZW50IGNoaXBzIGluIHRoZSBmYW1pbHkgc3VwcG9ydCBkaWZmZXJlbnQgcmVhZGJhY2sKKwkgKiBtZXRob2RzLgorCSAqLworCXN3aXRjaCAoaHVicy0+ZGNzX3JlYWRiYWNrX21vZGUpIHsKKwljYXNlIDA6CisJCXJlZ19sID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fUkVBREJBQ0tfMSkKKwkJCSYgV004OTkzX0RDU19JTlRFR19DSEFOXzBfTUFTSzsKKwkJcmVnX3IgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19EQ19TRVJWT19SRUFEQkFDS18yKQorCQkJJiBXTTg5OTNfRENTX0lOVEVHX0NIQU5fMV9NQVNLOworCQlicmVhazsKKwljYXNlIDE6CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0RDX1NFUlZPXzMpOworCQlyZWdfbCA9IChyZWcgJiBXTTg5OTNfRENTX0RBQ19XUl9WQUxfMV9NQVNLKQorCQkJPj4gV004OTkzX0RDU19EQUNfV1JfVkFMXzFfU0hJRlQ7CisJCXJlZ19yID0gcmVnICYgV004OTkzX0RDU19EQUNfV1JfVkFMXzBfTUFTSzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTigxLCAiVW5rbm93biBEQ1MgcmVhZGJhY2sgbWV0aG9kXG4iKTsKKwkJYnJlYWs7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRENTIGlucHV0OiAleCAleFxuIiwgcmVnX2wsIHJlZ19yKTsKIAogCS8qIEFwcGx5IGNvcnJlY3Rpb24gdG8gREMgc2Vydm8gcmVzdWx0ICovCiAJaWYgKGh1YnMtPmRjc19jb2RlcykgewogCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJBcHBseWluZyAlZCBjb2RlIERDIHNlcnZvIGNvcnJlY3Rpb25cbiIsCiAJCQlodWJzLT5kY3NfY29kZXMpOwogCi0JCS8qIERpZmZlcmVudCBjaGlwcyBpbiB0aGUgZmFtaWx5IHN1cHBvcnQgZGlmZmVyZW50Ci0JCSAqIHJlYWRiYWNrIG1ldGhvZHMuCi0JCSAqLwotCQlzd2l0Y2ggKGh1YnMtPmRjc19yZWFkYmFja19tb2RlKSB7Ci0JCWNhc2UgMDoKLQkJCXJlZ19sID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fUkVBREJBQ0tfMSkKLQkJCQkmIFdNODk5M19EQ1NfSU5URUdfQ0hBTl8wX01BU0s7OwotCQkJcmVnX3IgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19EQ19TRVJWT19SRUFEQkFDS18yKQotCQkJCSYgV004OTkzX0RDU19JTlRFR19DSEFOXzFfTUFTSzsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19EQ19TRVJWT18zKTsKLQkJCXJlZ19sID0gKHJlZyAmIFdNODk5M19EQ1NfREFDX1dSX1ZBTF8xX01BU0spCi0JCQkJPj4gV004OTkzX0RDU19EQUNfV1JfVkFMXzFfU0hJRlQ7Ci0JCQlyZWdfciA9IHJlZyAmIFdNODk5M19EQ1NfREFDX1dSX1ZBTF8wX01BU0s7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCVdBUk4oMSwgIlVua25vd24gRENTIHJlYWRiYWNrIG1ldGhvZFxuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWRldl9kYmcoY29kZWMtPmRldiwgIkRDUyBpbnB1dDogJXggJXhcbiIsIHJlZ19sLCByZWdfcik7Ci0KIAkJLyogSFBPVVQxTCAqLwogCQlpZiAocmVnX2wgKyBodWJzLT5kY3NfY29kZXMgPiAwICYmCiAJCSAgICByZWdfbCArIGh1YnMtPmRjc19jb2RlcyA8IDB4ZmYpCkBAIC0xNDgsNyArMTY3LDE1IEBACiAJCXdhaXRfZm9yX2RjX3NlcnZvKGNvZGVjLAogCQkJCSAgV004OTkzX0RDU19UUklHX0RBQ19XUl8wIHwKIAkJCQkgIFdNODk5M19EQ1NfVFJJR19EQUNfV1JfMSk7CisJfSBlbHNlIHsKKwkJZGNzX2NmZyA9IHJlZ19sIDw8IFdNODk5M19EQ1NfREFDX1dSX1ZBTF8xX1NISUZUOworCQlkY3NfY2ZnIHw9IHJlZ19yOwogCX0KKworCS8qIFNhdmUgdGhlIGNhbGxpYnJhdGVkIG9mZnNldCBpZiB3ZSdyZSBpbiBjbGFzcyBXIG1vZGUgYW5kCisJICogdGhlcmVmb3JlIGRvbid0IGhhdmUgYW55IGFuYWxvZ3VlIHNpZ25hbCBtaXhlZCBpbi4gKi8KKwlpZiAoaHVicy0+Y2xhc3NfdykKKwkJaHVicy0+Y2xhc3Nfd19kY3MgPSBkY3NfY2ZnOwogfQogCiAvKgpAQCAtMTYzLDYgKzE5MCw5IEBACiAKIAlyZXQgPSBzbmRfc29jX3B1dF92b2xzd18ycihrY29udHJvbCwgdWNvbnRyb2wpOwogCisJLyogVXBkYXRpbmcgdGhlIGFuYWxvZ3VlIGdhaW5zIGludmFsaWRhdGVzIHRoZSBEQyBzZXJ2byBjYWNoZSAqLworCWh1YnMtPmNsYXNzX3dfZGNzID0gMDsKKwogCS8qIElmIHdlJ3JlIGFwcGx5aW5nIGFuIG9mZnNldCBjb3JyZWN0aW9uIHRoZW4gdXBkYXRpbmcgdGhlCiAJICogY2FsbGlicmF0aW9uIHdvdWxkIGJlIGxpa2VseSB0byBpbnRyb2R1Y2UgZnVydGhlciBvZmZzZXRzLiAqLwogCWlmIChodWJzLT5kY3NfY29kZXMpCkBAIC03OTEsNiArODIxLDggQEAKIAogaW50IHdtX2h1YnNfYWRkX2FuYWxvZ3VlX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CisKIAkvKiBMYXRjaCB2b2x1bWUgdXBkYXRlIGJpdHMgJiBkZWZhdWx0IFpDIG9uICovCiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAogCQkJICAgIFdNODk5M19JTjFfVlUsIFdNODk5M19JTjFfVlUpOwpAQCAtODE5LDcgKzg1MSw3IEBACiAJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFuYWxvZ3VlX3NuZF9jb250cm9scywKIAkJCSAgICAgQVJSQVlfU0laRShhbmFsb2d1ZV9zbmRfY29udHJvbHMpKTsKIAotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGFuYWxvZ3VlX2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIGFuYWxvZ3VlX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUoYW5hbG9ndWVfZGFwbV93aWRnZXRzKSk7CiAJcmV0dXJuIDA7CiB9CkBAIC04MjgsMjQgKzg2MCwyNiBAQAogaW50IHdtX2h1YnNfYWRkX2FuYWxvZ3VlX3JvdXRlcyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJaW50IGxpbmVvdXQxX2RpZmYsIGludCBsaW5lb3V0Ml9kaWZmKQogewotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhbmFsb2d1ZV9yb3V0ZXMsCisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOworCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYW5hbG9ndWVfcm91dGVzLAogCQkJCUFSUkFZX1NJWkUoYW5hbG9ndWVfcm91dGVzKSk7CiAKIAlpZiAobGluZW91dDFfZGlmZikKLQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsCisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sCiAJCQkJCWxpbmVvdXQxX2RpZmZfcm91dGVzLAogCQkJCQlBUlJBWV9TSVpFKGxpbmVvdXQxX2RpZmZfcm91dGVzKSk7CiAJZWxzZQotCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwKIAkJCQkJbGluZW91dDFfc2Vfcm91dGVzLAogCQkJCQlBUlJBWV9TSVpFKGxpbmVvdXQxX3NlX3JvdXRlcykpOwogCiAJaWYgKGxpbmVvdXQyX2RpZmYpCi0JCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLAorCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLAogCQkJCQlsaW5lb3V0Ml9kaWZmX3JvdXRlcywKIAkJCQkJQVJSQVlfU0laRShsaW5lb3V0Ml9kaWZmX3JvdXRlcykpOwogCWVsc2UKLQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsCisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sCiAJCQkJCWxpbmVvdXQyX3NlX3JvdXRlcywKIAkJCQkJQVJSQVlfU0laRShsaW5lb3V0Ml9zZV9yb3V0ZXMpKTsKIApAQCAtODcyLDcgKzkwNiw3IEBACiAJICogVk1JRCBhcyBhbiBvdXRwdXQgYW5kIGNhbiBkaXNhYmxlIGl0LgogCSAqLwogCWlmIChsaW5lb3V0MV9kaWZmICYmIGxpbmVvdXQyX2RpZmYpCi0JCWNvZGVjLT5pZGxlX2JpYXNfb2ZmID0gMTsKKwkJY29kZWMtPmRhcG0uaWRsZV9iaWFzX29mZiA9IDE7CiAKIAlpZiAobGluZW91dDFmYikKIAkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0FERElUSU9OQUxfQ09OVFJPTCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5oIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmgKaW5kZXggZTUxYzE2Ni4uZjhhNWU5NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmgKQEAgLTIzLDYgKzIzLDkgQEAKIAlpbnQgZGNzX2NvZGVzOwogCWludCBkY3NfcmVhZGJhY2tfbW9kZTsKIAlpbnQgaHBfc3RhcnR1cF9tb2RlOworCisJYm9vbCBjbGFzc193OworCXUxNiBjbGFzc193X2RjczsKIH07CiAKIGV4dGVybiBpbnQgd21faHVic19hZGRfYW5hbG9ndWVfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYwppbmRleCBiYzllNmIwLi4wYzJkNmJhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMjcsNyArMjYsNiBAQAogI2luY2x1ZGUgPG1hY2gvZWRtYS5oPgogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAKLSNpbmNsdWRlICIuLi9jb2RlY3MvdGx2MzIwYWljM3guaCIKICNpbmNsdWRlICJkYXZpbmNpLXBjbS5oIgogI2luY2x1ZGUgImRhdmluY2ktaTJzLmgiCiAjaW5jbHVkZSAiZGF2aW5jaS1tY2FzcC5oIgpAQCAtMTMyLDI2ICsxMzAsMjcgQEAKIHN0YXRpYyBpbnQgZXZtX2FpYzN4X2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAogCS8qIEFkZCBkYXZpbmNpLWV2bSBzcGVjaWZpYyB3aWRnZXRzICovCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgYWljM3hfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgYWljM3hfZGFwbV93aWRnZXRzLAogCQkJCSAgQVJSQVlfU0laRShhaWMzeF9kYXBtX3dpZGdldHMpKTsKIAogCS8qIFNldCB1cCBkYXZpbmNpLWV2bSBzcGVjaWZpYyBhdWRpbyBwYXRoIGF1ZGlvX21hcCAqLwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJLyogbm90IGNvbm5lY3RlZCAqLwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIk1PTk9fTE9VVCIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhQTENPTSIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhQUkNPTSIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTU9OT19MT1VUIik7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIUExDT00iKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhQUkNPTSIpOwogCiAJLyogYWx3YXlzIGNvbm5lY3RlZCAqLwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkxpbmUgT3V0Iik7Ci0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJNaWMgSmFjayIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTGluZSBJbiIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIZWFkcGhvbmUgSmFjayIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJMaW5lIE91dCIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJNaWMgSmFjayIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJMaW5lIEluIik7CiAKLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktc2Zmc2RyLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXNmZnNkci5jCmluZGV4IDZjNjY2NmEuLjBmZTU1OGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktc2Zmc2RyLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1zZmZzZHIuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1pMnMuYyBiL3NvdW5kL3NvYy9lcDkzeHgvZXA5M3h4LWkycy5jCmluZGV4IDRmNDg3MzMuLjlhYzkzZjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9lcDkzeHgvZXA5M3h4LWkycy5jCisrKyBiL3NvdW5kL3NvYy9lcDkzeHgvZXA5M3h4LWkycy5jCkBAIC0zNTIsMTMgKzM1MiwxMyBAQAogCS5wbGF5YmFjawk9IHsKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSAyLAotCQkucmF0ZXMJCT0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJLnJhdGVzCQk9IFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAsCiAJCS5mb3JtYXRzCT0gRVA5M1hYX0kyU19GT1JNQVRTLAogCX0sCiAJLmNhcHR1cmUJPSB7CiAJCSAuY2hhbm5lbHNfbWluCT0gMiwKIAkJIC5jaGFubmVsc19tYXgJPSAyLAotCQkgLnJhdGVzCQk9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJCSAucmF0ZXMJCT0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKIAkJIC5mb3JtYXRzCT0gRVA5M1hYX0kyU19GT1JNQVRTLAogCX0sCiAJLm9wcwkJPSAmZXA5M3h4X2kyc19kYWlfb3BzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2VwOTN4eC9lcDkzeHgtcGNtLmMgYi9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1wY20uYwppbmRleCAyZjEyMWRkLi4wNjY3MDc3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1wY20uYworKysgYi9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1wY20uYwpAQCAtMzUsOSArMzUsOSBAQAogCQkJCSAgIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVECXwKIAkJCQkgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiksCiAJCQkJICAgCi0JLnJhdGVzCQkJPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCS5yYXRlcwkJCT0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKIAkucmF0ZV9taW4JCT0gU05EUlZfUENNX1JBVEVfODAwMCwKLQkucmF0ZV9tYXgJCT0gU05EUlZfUENNX1JBVEVfNDgwMDAsCisJLnJhdGVfbWF4CQk9IFNORFJWX1BDTV9SQVRFXzk2MDAwLAogCQogCS5mb3JtYXRzCQk9IChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CiAJCQkJICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2VwOTN4eC9zbmFwcGVyY2wxNS5jIGIvc291bmQvc29jL2VwOTN4eC9zbmFwcGVyY2wxNS5jCmluZGV4IDI4YWI1ZmYuLmRmZTFkN2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9lcDkzeHgvc25hcHBlcmNsMTUuYworKysgYi9zb3VuZC9zb2MvZXA5M3h4L3NuYXBwZXJjbDE1LmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtNzksMTEgKzc4LDEyIEBACiBzdGF0aWMgaW50IHNuYXBwZXJjbDE1X3RsdjMyMGFpYzIzX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHRsdjMyMGFpYzIzX2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHRsdjMyMGFpYzIzX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUodGx2MzIwYWljMjNfZGFwbV93aWRnZXRzKSk7CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9ldWtyZWEtdGx2MzIwLmMgYi9zb3VuZC9zb2MvaW14L2V1a3JlYS10bHYzMjAuYwppbmRleCBkZDRmZmZkLi5lMjBjOWUxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW14L2V1a3JlYS10bHYzMjAuYworKysgYi9zb3VuZC9zb2MvaW14L2V1a3JlYS10bHYzMjAuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKICNpbmNsdWRlICIuLi9jb2RlY3MvdGx2MzIwYWljMjMuaCIKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jIGIvc291bmQvc29jL2lteC9pbXgtc3NpLmMKaW5kZXggMzkwYjZmZi4uMzA4OTRlYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2lteC9pbXgtc3NpLmMKKysrIGIvc291bmQvc29jL2lteC9pbXgtc3NpLmMKQEAgLTQ1NiwxMyArNDU2LDEzIEBACiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBpbXhfc3NpX2RhaSA9IHsKIAkucHJvYmUgPSBpbXhfc3NpX2RhaV9wcm9iZSwKIAkucGxheWJhY2sgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWluID0gMSwKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCiAJfSwKIAkuY2FwdHVyZSA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19taW4gPSAxLAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvcGh5Y29yZS1hYzk3LmMgYi9zb3VuZC9zb2MvaW14L3BoeWNvcmUtYWM5Ny5jCmluZGV4IDllYWJjMjguLmE3ZGViNWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvcGh5Y29yZS1hYzk3LmMKKysrIGIvc291bmQvc29jL2lteC9waHljb3JlLWFjOTcuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGlteF9waHljb3JlOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC93bTExMzMtZXYxLmMgYi9zb3VuZC9zb2MvaW14L3dtMTEzMy1ldjEuYwppbmRleCAzMGZkYjE1Li43NWI0YzcyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW14L3dtMTEzMy1ldjEuYworKysgYi9zb3VuZC9zb2MvaW14L3dtMTEzMy1ldjEuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8bWFjaC9hdWRtdXguaD4KIApAQCAtMjEzLDExICsyMTIsMTIgQEAKIHN0YXRpYyBpbnQgd20xMTMzX2V2MV9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTExMzNfZXYxX3dpZGdldHMsCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTExMzNfZXYxX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHdtMTEzM19ldjFfd2lkZ2V0cykpOwogCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIHdtMTEzM19ldjFfbWFwLAorCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHdtMTEzM19ldjFfbWFwLAogCQkJCUFSUkFZX1NJWkUod20xMTMzX2V2MV9tYXApKTsKIAogCS8qIEhlYWRwaG9uZSBqYWNrIGRldGVjdGlvbiAqLwpAQCAtMjM0LDcgKzIzNCw3IEBACiAJd204MzUwX21pY19qYWNrX2RldGVjdChjb2RlYywgJm1pY19qYWNrLCBTTkRfSkFDS19NSUNST1BIT05FLAogCQkJICAgICAgIFNORF9KQUNLX0JUTl8wKTsKIAotCXNuZF9zb2NfZGFwbV9mb3JjZV9lbmFibGVfcGluKGNvZGVjLCAiTWljIEJpYXMiKTsKKwlzbmRfc29jX2RhcG1fZm9yY2VfZW5hYmxlX3BpbihkYXBtLCAiTWljIEJpYXMiKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2p6NDc0MC9qejQ3NDAtaTJzLmMgYi9zb3VuZC9zb2Mvano0NzQwL2p6NDc0MC1pMnMuYwppbmRleCBmM2NmZmQxLi40MTliZjRmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvano0NzQwL2p6NDc0MC1pMnMuYworKysgYi9zb3VuZC9zb2Mvano0NzQwL2p6NDc0MC1pMnMuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIAogI2luY2x1ZGUgImp6NDc0MC1pMnMuaCIKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9qejQ3NDAvcWlfbGI2MC5jIGIvc291bmQvc29jL2p6NDc0MC9xaV9sYjYwLmMKaW5kZXggZWYxYTk5ZS4uNDk3MjNlMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2p6NDc0MC9xaV9sYjYwLmMKKysrIGIvc291bmQvc29jL2p6NDc0MC9xaV9sYjYwLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNkZWZpbmUgUUlfTEI2MF9TTkRfR1BJTyBKWl9HUElPX1BPUlRCKDI5KQpAQCAtNTksMTAgKzU4LDExIEBACiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmNwdV9kYWk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCWludCByZXQ7CiAKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElOIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJJTiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlJJTiIpOwogCiAJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBRSV9MQjYwX0RBSUZNVCk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTcwLDkgKzcwLDExIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgcWlfbGI2MF93aWRnZXRzLCBBUlJBWV9TSVpFKHFpX2xiNjBfd2lkZ2V0cykpOwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBxaV9sYjYwX3JvdXRlcywgQVJSQVlfU0laRShxaV9sYjYwX3JvdXRlcykpOwotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHFpX2xiNjBfd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUocWlfbGI2MF93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgcWlfbGI2MF9yb3V0ZXMsCisJCQkJQVJSQVlfU0laRShxaV9sYjYwX3JvdXRlcykpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mva2lya3dvb2QvS2NvbmZpZyBiL3NvdW5kL3NvYy9raXJrd29vZC9LY29uZmlnCmluZGV4IDE2ZWMyYTIuLjhmNDllMTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9raXJrd29vZC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9raXJrd29vZC9LY29uZmlnCkBAIC0xMSwxMCArMTEsMTkgQEAKIAogY29uZmlnIFNORF9LSVJLV09PRF9TT0NfT1BFTlJECiAJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBLaXJrd29vZCBPcGVucmQgQ2xpZW50IgotCWRlcGVuZHMgb24gU05EX0tJUktXT09EX1NPQyAmJiBNQUNIX09QRU5SRF9DTElFTlQKKwlkZXBlbmRzIG9uIFNORF9LSVJLV09PRF9TT0MgJiYgKE1BQ0hfT1BFTlJEX0NMSUVOVCB8fCBNQUNIX09QRU5SRF9VTFRJTUFURSkKIAlzZWxlY3QgU05EX0tJUktXT09EX1NPQ19JMlMKIAlzZWxlY3QgU05EX1NPQ19DUzQyTDUxCiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbgogCSAgT3BlbnJkIENsaWVudC4KIAorY29uZmlnIFNORF9LSVJLV09PRF9TT0NfVDUzMjUKKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIEhQIHQ1MzI1IgorCWRlcGVuZHMgb24gU05EX0tJUktXT09EX1NPQyAmJiBNQUNIX1Q1MzI1CisJc2VsZWN0IFNORF9LSVJLV09PRF9TT0NfSTJTCisJc2VsZWN0IFNORF9TT0NfQUxDNTYyMworCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24KKwkgIHRoZSBIUCB0NTMyNSB0aGluIGNsaWVudC4KKwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2tpcmt3b29kL01ha2VmaWxlIGIvc291bmQvc29jL2tpcmt3b29kL01ha2VmaWxlCmluZGV4IDMzYTE2ZGMuLjNlNjJhZTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9raXJrd29vZC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2Mva2lya3dvb2QvTWFrZWZpbGUKQEAgLTUsNSArNSw3IEBACiBvYmotJChDT05GSUdfU05EX0tJUktXT09EX1NPQ19JMlMpICs9IHNuZC1zb2Mta2lya3dvb2QtaTJzLm8KIAogc25kLXNvYy1vcGVucmQtb2JqcyA6PSBraXJrd29vZC1vcGVucmQubworc25kLXNvYy10NTMyNS1vYmpzIDo9IGtpcmt3b29kLXQ1MzI1Lm8KIAogb2JqLSQoQ09ORklHX1NORF9LSVJLV09PRF9TT0NfT1BFTlJEKSArPSBzbmQtc29jLW9wZW5yZC5vCitvYmotJChDT05GSUdfU05EX0tJUktXT09EX1NPQ19UNTMyNSkgKz0gc25kLXNvYy10NTMyNS5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2Qtb3BlbnJkLmMgYi9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2Qtb3BlbnJkLmMKaW5kZXggOWQ3YzgxZS4uZDg2M2FmYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLW9wZW5yZC5jCisrKyBiL3NvdW5kL3NvYy9raXJrd29vZC9raXJrd29vZC1vcGVucmQuYwpAQCAtODYsNyArODYsNyBAQAogewogCWludCByZXQ7CiAKLQlpZiAoIW1hY2hpbmVfaXNfb3BlbnJkX2NsaWVudCgpKQorCWlmICghbWFjaGluZV9pc19vcGVucmRfY2xpZW50KCkgJiYgIW1hY2hpbmVfaXNfb3BlbnJkX3VsdGltYXRlKCkpCiAJCXJldHVybiAwOwogCiAJb3BlbnJkX2NsaWVudF9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2QtdDUzMjUuYyBiL3NvdW5kL3NvYy9raXJrd29vZC9raXJrd29vZC10NTMyNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZDIxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2QtdDUzMjUuYwpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIGtpcmt3b29kLXQ1MzI1LmMKKyAqCisgKiAoYykgMjAxMCBBcm5hdWQgUGF0YXJkIDxhcm5hdWQucGF0YXJkQHJ0cC1uZXQub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxtYWNoL2tpcmt3b29kLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSAiLi4vY29kZWNzL2FsYzU2MjMuaCIKKworc3RhdGljIGludCB0NTMyNV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBmcmVxLCBmbXQ7CisKKwlmbXQgPSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgZm10KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBmbXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZnJlcSA9IHBhcmFtc19yYXRlKHBhcmFtcykgKiAyNTY7CisKKwlyZXR1cm4gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIDAsIGZyZXEsIFNORF9TT0NfQ0xPQ0tfSU4pOworCit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgdDUzMjVfb3BzID0geworCS5od19wYXJhbXMgPSB0NTMyNV9od19wYXJhbXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgdDUzMjVfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0hQKCJIZWFkcGhvbmUgSmFjayIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TUEsoIlNwZWFrZXIiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMgSmFjayIsIE5VTEwpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgdDUzMjVfcm91dGVbXSA9IHsKKwl7ICJIZWFkcGhvbmUgSmFjayIsCU5VTEwsCSJIUEwiIH0sCisJeyAiSGVhZHBob25lIEphY2siLAlOVUxMLAkiSFBSIiB9LAorCisJeyJTcGVha2VyIiwJCU5VTEwsCSJTUEtPVVQifSwKKwl7IlNwZWFrZXIiLAkJTlVMTCwJIlNQS09VVE4ifSwKKworCXsgIk1JQzEiLAkJTlVMTCwJIk1pYyBKYWNrIiB9LAorCXsgIk1JQzIiLAkJTlVMTCwJIk1pYyBKYWNrIiB9LAorfTsKKworc3RhdGljIGludCB0NTMyNV9kYWlfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOworCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB0NTMyNV9kYXBtX3dpZGdldHMsCisJCQkJQVJSQVlfU0laRSh0NTMyNV9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHQ1MzI1X3JvdXRlLCBBUlJBWV9TSVpFKHQ1MzI1X3JvdXRlKSk7CisKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiTWljIEphY2siKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSGVhZHBob25lIEphY2siKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiU3BlYWtlciIpOworCisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHQ1MzI1X2RhaVtdID0geworeworCS5uYW1lID0gIkFMQzU2MjEiLAorCS5zdHJlYW1fbmFtZSA9ICJBTEM1NjIxIEhpRmkiLAorCS5jcHVfZGFpX25hbWUgPSAia2lya3dvb2QtaTJzIiwKKwkucGxhdGZvcm1fbmFtZSA9ICJraXJrd29vZC1wY20tYXVkaW8iLAorCS5jb2RlY19kYWlfbmFtZSA9ICJhbGM1NjIxLWhpZmkiLAorCS5jb2RlY19uYW1lID0gImFsYzU2MngtY29kZWMuMC0wMDFhIiwKKwkub3BzID0gJnQ1MzI1X29wcywKKwkuaW5pdCA9IHQ1MzI1X2RhaV9pbml0LAorfSwKK307CisKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgdDUzMjUgPSB7CisJLm5hbWUgPSAidDUzMjUiLAorCS5kYWlfbGluayA9IHQ1MzI1X2RhaSwKKwkubnVtX2xpbmtzID0gQVJSQVlfU0laRSh0NTMyNV9kYWkpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnQ1MzI1X3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IHQ1MzI1X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtYWNoaW5lX2lzX3Q1MzI1KCkpCisJCXJldHVybiAwOworCisJdDUzMjVfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghdDUzMjVfc25kX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSh0NTMyNV9zbmRfZGV2aWNlLAorCQkJJnQ1MzI1KTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQodDUzMjVfc25kX2RldmljZSk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwbGF0Zm9ybV9kZXZpY2VfYWRkIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHQ1MzI1X3NuZF9kZXZpY2UpOworCX0KKworCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdCh0NTMyNV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHQ1MzI1X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0NTMyNV9zbmRfZGV2aWNlKTsKK30KK21vZHVsZV9leGl0KHQ1MzI1X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBcm5hdWQgUGF0YXJkIDxhcm5hdWQucGF0YXJkQHJ0cC1uZXQub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyB0NTMyNSBhdWRpbyBjbGllbnQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9udWM5MDAvbnVjOTAwLWF1ZGlvLmMgYi9zb3VuZC9zb2MvbnVjOTAwL251YzkwMC1hdWRpby5jCmluZGV4IDE2MWY1YjYuLjM4YTJkMGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9udWM5MDAvbnVjOTAwLWF1ZGlvLmMKKysrIGIvc291bmQvc29jL251YzkwMC9udWM5MDAtYXVkaW8uYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSAibnVjOTAwLWF1ZGlvLmgiCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL2FtMzUxN2V2bS5jIGIvc291bmQvc29jL29tYXAvYW0zNTE3ZXZtLmMKaW5kZXggOTc5ZGQ1MC4uMTYxNzUwNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvYW0zNTE3ZXZtLmMKKysrIGIvc291bmQvc29jL29tYXAvYW0zNTE3ZXZtLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMTE0LDIwICsxMTMsMjEgQEAKIHN0YXRpYyBpbnQgYW0zNTE3ZXZtX2FpYzIzX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAogCS8qIEFkZCBhbTM1MTctZXZtIHNwZWNpZmljIHdpZGdldHMgKi8KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB0bHYzMjBhaWMyM19kYXBtX3dpZGdldHMsCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB0bHYzMjBhaWMyM19kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX2RhcG1fd2lkZ2V0cykpOwogCiAJLyogU2V0IHVwIGRhdmluY2ktZXZtIHNwZWNpZmljIGF1ZGlvIHBhdGggYXVkaW9fbWFwICovCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CiAKIAkvKiBhbHdheXMgY29ubmVjdGVkICovCi0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJMaW5lIE91dCIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTGluZSBJbiIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTWljIEluIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkxpbmUgT3V0Iik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkxpbmUgSW4iKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiTWljIEluIik7CiAKLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL2Ftcy1kZWx0YS5jIGIvc291bmQvc29jL29tYXAvYW1zLWRlbHRhLmMKaW5kZXggNDM4MTQ2YS4uMjEwMWJkYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvYW1zLWRlbHRhLmMKKysrIGIvc291bmQvc29jL29tYXAvYW1zLWRlbHRhLmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogCi0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtOTQsNiArOTQsNyBAQAogCQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAgc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlzdHJ1Y3Qgc29jX2VudW0gKmNvbnRyb2wgPSAoc3RydWN0IHNvY19lbnVtICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJdW5zaWduZWQgc2hvcnQgcGluczsKIAlpbnQgcGluLCBjaGFuZ2VkID0gMDsKQEAgLTExMiw0OCArMTEzLDQ4IEBACiAKIAkvKiBTZXR1cCBwaW5zIGFmdGVyIGNvcnJlc3BvbmRpbmcgYml0cyBpZiBjaGFuZ2VkICovCiAJcGluID0gISEocGlucyAmICgxIDw8IEFNU19ERUxUQV9NT1VUSFBJRUNFKSk7Ci0JaWYgKHBpbiAhPSBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoY29kZWMsICJNb3V0aHBpZWNlIikpIHsKKwlpZiAocGluICE9IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhkYXBtLCAiTW91dGhwaWVjZSIpKSB7CiAJCWNoYW5nZWQgPSAxOwogCQlpZiAocGluKQotCQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJNb3V0aHBpZWNlIik7CisJCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiTW91dGhwaWVjZSIpOwogCQllbHNlCi0JCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJNb3V0aHBpZWNlIik7CisJCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIk1vdXRocGllY2UiKTsKIAl9CiAJcGluID0gISEocGlucyAmICgxIDw8IEFNU19ERUxUQV9FQVJQSUVDRSkpOwotCWlmIChwaW4gIT0gc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKGNvZGVjLCAiRWFycGllY2UiKSkgeworCWlmIChwaW4gIT0gc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKGRhcG0sICJFYXJwaWVjZSIpKSB7CiAJCWNoYW5nZWQgPSAxOwogCQlpZiAocGluKQotCQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFYXJwaWVjZSIpOworCQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkVhcnBpZWNlIik7CiAJCWVsc2UKLQkJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkVhcnBpZWNlIik7CisJCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkVhcnBpZWNlIik7CiAJfQogCXBpbiA9ICEhKHBpbnMgJiAoMSA8PCBBTVNfREVMVEFfTUlDUk9QSE9ORSkpOwotCWlmIChwaW4gIT0gc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKGNvZGVjLCAiTWljcm9waG9uZSIpKSB7CisJaWYgKHBpbiAhPSBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoZGFwbSwgIk1pY3JvcGhvbmUiKSkgewogCQljaGFuZ2VkID0gMTsKIAkJaWYgKHBpbikKLQkJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTWljcm9waG9uZSIpOworCQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIk1pY3JvcGhvbmUiKTsKIAkJZWxzZQotCQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTWljcm9waG9uZSIpOworCQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJNaWNyb3Bob25lIik7CiAJfQogCXBpbiA9ICEhKHBpbnMgJiAoMSA8PCBBTVNfREVMVEFfU1BFQUtFUikpOwotCWlmIChwaW4gIT0gc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKGNvZGVjLCAiU3BlYWtlciIpKSB7CisJaWYgKHBpbiAhPSBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoZGFwbSwgIlNwZWFrZXIiKSkgewogCQljaGFuZ2VkID0gMTsKIAkJaWYgKHBpbikKLQkJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiU3BlYWtlciIpOworCQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIlNwZWFrZXIiKTsKIAkJZWxzZQotCQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiU3BlYWtlciIpOworCQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJTcGVha2VyIik7CiAJfQogCXBpbiA9ICEhKHBpbnMgJiAoMSA8PCBBTVNfREVMVEFfQUdDKSk7CiAJaWYgKHBpbiAhPSBhbXNfZGVsdGFfYXVkaW9fYWdjKSB7CiAJCWFtc19kZWx0YV9hdWRpb19hZ2MgPSBwaW47CiAJCWNoYW5nZWQgPSAxOwogCQlpZiAocGluKQotCQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJBR0NJTiIpOworCQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkFHQ0lOIik7CiAJCWVsc2UKLQkJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkFHQ0lOIik7CisJCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkFHQ0lOIik7CiAJfQogCWlmIChjaGFuZ2VkKQotCQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCiAJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOwogCkBAIC0xNjQsMTkgKzE2NSwyMCBAQAogCQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAgc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAl1bnNpZ25lZCBzaG9ydCBwaW5zLCBtb2RlOwogCi0JcGlucyA9ICgoc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKGNvZGVjLCAiTW91dGhwaWVjZSIpIDw8CisJcGlucyA9ICgoc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKGRhcG0sICJNb3V0aHBpZWNlIikgPDwKIAkJCQkJCQlBTVNfREVMVEFfTU9VVEhQSUVDRSkgfAotCQkJKHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhjb2RlYywgIkVhcnBpZWNlIikgPDwKKwkJCShzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoZGFwbSwgIkVhcnBpZWNlIikgPDwKIAkJCQkJCQlBTVNfREVMVEFfRUFSUElFQ0UpKTsKIAlpZiAocGlucykKLQkJcGlucyB8PSAoc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKGNvZGVjLCAiTWljcm9waG9uZSIpIDw8CisJCXBpbnMgfD0gKHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhkYXBtLCAiTWljcm9waG9uZSIpIDw8CiAJCQkJCQkJQU1TX0RFTFRBX01JQ1JPUEhPTkUpOwogCWVsc2UKLQkJcGlucyA9ICgoc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKGNvZGVjLCAiTWljcm9waG9uZSIpIDw8CisJCXBpbnMgPSAoKHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhkYXBtLCAiTWljcm9waG9uZSIpIDw8CiAJCQkJCQkJQU1TX0RFTFRBX01JQ1JPUEhPTkUpIHwKLQkJCShzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoY29kZWMsICJTcGVha2VyIikgPDwKKwkJCShzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoZGFwbSwgIlNwZWFrZXIiKSA8PAogCQkJCQkJCUFNU19ERUxUQV9TUEVBS0VSKSB8CiAJCQkoYW1zX2RlbHRhX2F1ZGlvX2FnYyA8PCBBTVNfREVMVEFfQUdDKSk7CiAKQEAgLTMwMCw2ICszMDIsNyBAQAogc3RhdGljIHZvaWQgY3g4MTgwMV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHR0eS0+ZGlzY19kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAogCWRlbF90aW1lcl9zeW5jKCZjeDgxODAxX3RpbWVyKTsKIApAQCAtMzEyLDEyICszMTUsMTIgQEAKIAl2MjUzX29wcy5jbG9zZSh0dHkpOwogCiAJLyogUmV2ZXJ0IGJhY2sgdG8gZGVmYXVsdCBhdWRpbyBpbnB1dC9vdXRwdXQgY29uc3RlbGxhdGlvbiAqLwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIk1vdXRocGllY2UiKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkVhcnBpZWNlIik7Ci0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJNaWNyb3Bob25lIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiU3BlYWtlciIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkFHQ0lOIik7Ci0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTW91dGhwaWVjZSIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJFYXJwaWVjZSIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJNaWNyb3Bob25lIik7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJTcGVha2VyIik7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJBR0NJTiIpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogfQogCiAvKiBMaW5lIGRpc2NpcGxpbmUgLmhhbmd1cCgpICovCkBAIC00MzIsMTYgKzQzNSwxNiBAQAogCWNhc2UgU05EX1NPQ19CSUFTX09OOgogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKLQkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpCisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpCiAJCQlhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKEFNU19ERUxUQV9MQVRDSDJfTU9ERU1fTlJFU0VULAogCQkJCQkJQU1TX0RFTFRBX0xBVENIMl9NT0RFTV9OUkVTRVQpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19PRkY6Ci0JCWlmIChjb2RlYy0+Ymlhc19sZXZlbCAhPSBTTkRfU09DX0JJQVNfT0ZGKQorCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCAhPSBTTkRfU09DX0JJQVNfT0ZGKQogCQkJYW1zX2RlbHRhX2xhdGNoMl93cml0ZShBTVNfREVMVEFfTEFUQ0gyX01PREVNX05SRVNFVCwKIAkJCQkJCTApOwogCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKIAogCXJldHVybiAwOwogfQpAQCAtNDkyLDYgKzQ5NSw3IEBACiBzdGF0aWMgaW50IGFtc19kZWx0YV9jeDIwNDQyX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOwogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBydGQtPmNhcmQ7CiAJaW50IHJldDsKQEAgLTU0MSw3ICs1NDUsNyBAQAogCX0KIAogCS8qIEFkZCBib2FyZCBzcGVjaWZpYyBEQVBNIHdpZGdldHMgYW5kIHJvdXRlcyAqLwotCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGFtc19kZWx0YV9kYXBtX3dpZGdldHMsCisJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBhbXNfZGVsdGFfZGFwbV93aWRnZXRzLAogCQkJCQlBUlJBWV9TSVpFKGFtc19kZWx0YV9kYXBtX3dpZGdldHMpKTsKIAlpZiAocmV0KSB7CiAJCWRldl93YXJuKGNhcmQtPmRldiwKQEAgLTU1MCw3ICs1NTQsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXQgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYW1zX2RlbHRhX2F1ZGlvX21hcCwKKwlyZXQgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhbXNfZGVsdGFfYXVkaW9fbWFwLAogCQkJCQlBUlJBWV9TSVpFKGFtc19kZWx0YV9hdWRpb19tYXApKTsKIAlpZiAocmV0KSB7CiAJCWRldl93YXJuKGNhcmQtPmRldiwKQEAgLTU2MCwxMyArNTY0LDEzIEBACiAJfQogCiAJLyogU2V0IHVwIGluaXRpYWwgcGluIGNvbnN0ZWxsYXRpb24gKi8KLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJNb3V0aHBpZWNlIik7Ci0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFYXJwaWVjZSIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTWljcm9waG9uZSIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIlNwZWFrZXIiKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJBR0NJTiIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkFHQ09VVCIpOwotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIk1vdXRocGllY2UiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiRWFycGllY2UiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiTWljcm9waG9uZSIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiU3BlYWtlciIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiQUdDSU4iKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkFHQ09VVCIpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCiAJLyogQWRkIHZpcnR1YWwgc3dpdGNoICovCiAJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFtc19kZWx0YV9hdWRpb19jb250cm9scywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL2lnZXAwMDIwLmMgYi9zb3VuZC9zb2Mvb21hcC9pZ2VwMDAyMC5jCmluZGV4IGZkM2E0MGYuLjBhZTM0NzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL2lnZXAwMDIwLmMKKysrIGIvc291bmQvc29jL29tYXAvaWdlcDAwMjAuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9uODEwLmMgYi9zb3VuZC9zb2Mvb21hcC9uODEwLmMKaW5kZXggYTNiNmQ4OS4uODNkMjEzYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvbjgxMC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL244MTAuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0zNiw3ICszNSw2IEBACiAKICNpbmNsdWRlICJvbWFwLW1jYnNwLmgiCiAjaW5jbHVkZSAib21hcC1wY20uaCIKLSNpbmNsdWRlICIuLi9jb2RlY3MvdGx2MzIwYWljM3guaCIKIAogI2RlZmluZSBOODEwX0hFQURTRVRfQU1QX0dQSU8JMTAKICNkZWZpbmUgTjgxMF9TUEVBS0VSX0FNUF9HUElPCTEwMQpAQCAtNTgsNiArNTYsNyBAQAogCiBzdGF0aWMgdm9pZCBuODEwX2V4dF9jb250cm9sKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IGhwID0gMCwgbGluZTFsID0gMDsKIAogCXN3aXRjaCAobjgxMF9qYWNrX2Z1bmMpIHsKQEAgLTcyLDI1ICs3MSwyNSBAQAogCX0KIAogCWlmIChuODEwX3Nwa19mdW5jKQotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkV4dCBTcGsiKTsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkV4dCBTcGsiKTsKIAllbHNlCi0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkV4dCBTcGsiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJFeHQgU3BrIik7CiAKIAlpZiAoaHApCi0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkhlYWRwaG9uZSBKYWNrIik7CiAJZWxzZQotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkcGhvbmUgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRwaG9uZSBKYWNrIik7CiAJaWYgKGxpbmUxbCkKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJMSU5FMUwiKTsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkxJTkUxTCIpOwogCWVsc2UKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTElORTFMIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTElORTFMIik7CiAKIAlpZiAobjgxMF9kbWljX2Z1bmMpCi0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRE1pYyIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiRE1pYyIpOwogCWVsc2UKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiRE1pYyIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkRNaWMiKTsKIAotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIH0KIAogc3RhdGljIGludCBuODEwX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0yNzQsMTcgKzI3MywxOCBAQAogc3RhdGljIGludCBuODEwX2FpYzMzX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlpbnQgZXJyOwogCiAJLyogTm90IGNvbm5lY3RlZCAqLwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNT05PX0xPVVQiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFBMQ09NIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhQUkNPTSIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNSUMzTCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNSUMzUiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FMVIiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORTJMIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkUyUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIk1PTk9fTE9VVCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkhQTENPTSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkhQUkNPTSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIk1JQzNMIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTUlDM1IiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSU5FMVIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSU5FMkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSU5FMlIiKTsKIAogCS8qIEFkZCBOODEwIHNwZWNpZmljIGNvbnRyb2xzICovCiAJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFpYzMzX244MTBfY29udHJvbHMsCkBAIC0yOTMsMTMgKzI5MywxMyBAQAogCQlyZXR1cm4gZXJyOwogCiAJLyogQWRkIE44MTAgc3BlY2lmaWMgd2lkZ2V0cyAqLwotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGFpYzMzX2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIGFpYzMzX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUoYWljMzNfZGFwbV93aWRnZXRzKSk7CiAKIAkvKiBTZXQgdXAgTjgxMCBzcGVjaWZpYyBhdWRpbyBwYXRoIGF1ZGlvX21hcCAqLwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKaW5kZXggN2U4NGYyNC4uZDIwM2Y0ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwpAQCAtMTAyLDYgKzEwMiwxNyBAQAogc3RhdGljIGNvbnN0IGludCBvbWFwMjR4eF9kbWFfcmVxc1tdWzJdID0ge307CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCitzdGF0aWMgY29uc3QgaW50IG9tYXA0NHh4X2RtYV9yZXFzW11bMl0gPSB7CisJeyBPTUFQNDRYWF9ETUFfTUNCU1AxX1RYLCBPTUFQNDRYWF9ETUFfTUNCU1AxX1JYIH0sCisJeyBPTUFQNDRYWF9ETUFfTUNCU1AyX1RYLCBPTUFQNDRYWF9ETUFfTUNCU1AyX1JYIH0sCisJeyBPTUFQNDRYWF9ETUFfTUNCU1AzX1RYLCBPTUFQNDRYWF9ETUFfTUNCU1AzX1JYIH0sCisJeyBPTUFQNDRYWF9ETUFfTUNCU1A0X1RYLCBPTUFQNDRYWF9ETUFfTUNCU1A0X1JYIH0sCit9OworI2Vsc2UKK3N0YXRpYyBjb25zdCBpbnQgb21hcDQ0eHhfZG1hX3JlcXNbXVsyXSA9IHt9OworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgb21hcDI0MjBfbWNic3BfcG9ydFtdWzJdID0gewogCXsgT01BUDI0WFhfTUNCU1AxX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIxLApAQCAtMTQ3LDYgKzE1OCwyMSBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgb21hcDM0eHhfbWNic3BfcG9ydFtdWzJdID0ge307CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBvbWFwNDR4eF9tY2JzcF9wb3J0W11bMl0gPSB7CisJeyBPTUFQNDRYWF9NQ0JTUDFfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKKwkgIE9NQVA0NFhYX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCisJeyBPTUFQNDRYWF9NQ0JTUDJfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKKwkgIE9NQVA0NFhYX01DQlNQMl9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCisJeyBPTUFQNDRYWF9NQ0JTUDNfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKKwkgIE9NQVA0NFhYX01DQlNQM19CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCisJeyBPTUFQNDRYWF9NQ0JTUDRfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKKwkgIE9NQVA0NFhYX01DQlNQNF9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCit9OworI2Vsc2UKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9tYXA0NHh4X21jYnNwX3BvcnRbXVsyXSA9IHt9OworI2VuZGlmCisKIHN0YXRpYyB2b2lkIG9tYXBfbWNic3Bfc2V0X3RocmVzaG9sZChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CkBAIC0yMjQsNyArMjUwLDcgQEAKIAkgKiAyIGNoYW5uZWxzIChzdGVyZW8pOiBzaXplIGlzIDEyOCAvIDIgPSA2NCBmcmFtZXMgKDIgKiA2NCB3b3JkcykKIAkgKiA0IGNoYW5uZWxzOiBzaXplIGlzIDEyOCAvIDQgPSAzMiBmcmFtZXMgKDQgKiAzMiB3b3JkcykKIAkgKi8KLQlpZiAoY3B1X2lzX29tYXAzNDN4KCkpIHsKKwlpZiAoY3B1X2lzX29tYXAzNDN4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKIAkJLyoKIAkJKiBSdWxlIGZvciB0aGUgYnVmZmVyIHNpemUuIFdlIHNob3VsZCBub3QgYWxsb3cKIAkJKiBzbWFsbGVyIGJ1ZmZlciB0aGFuIHRoZSBGSUZPIHNpemUgdG8gYXZvaWQgdW5kZXJydW5zCkBAIC0zMzIsNiArMzU4LDkgQEAKIAl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzQzeCgpKSB7CiAJCWRtYSA9IG9tYXAyNHh4X2RtYV9yZXFzW2J1c19pZF1bc3Vic3RyZWFtLT5zdHJlYW1dOwogCQlwb3J0ID0gb21hcDM0eHhfbWNic3BfcG9ydFtidXNfaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKKwkgfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQlkbWEgPSBvbWFwNDR4eF9kbWFfcmVxc1tidXNfaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKKwkJcG9ydCA9IG9tYXA0NHh4X21jYnNwX3BvcnRbYnVzX2lkXVtzdWJzdHJlYW0tPnN0cmVhbV07CiAJfSBlbHNlIHsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNDk4LDExICs1MjcsMTEgQEAKIAlyZWdzLT5zcGNyMgl8PSBYSU5UTSgzKSB8IEZSRUU7CiAJcmVncy0+c3BjcjEJfD0gUklOVE0oMyk7CiAJLyogUkZJRyBhbmQgWEZJRyBhcmUgbm90IGRlZmluZWQgaW4gMzR4eCAqLwotCWlmICghY3B1X2lzX29tYXAzNHh4KCkpIHsKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpICYmICFjcHVfaXNfb21hcDQ0eHgoKSkgewogCQlyZWdzLT5yY3IyCXw9IFJGSUc7CiAJCXJlZ3MtPnhjcjIJfD0gWEZJRzsKIAl9Ci0JaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpKSB7CiAJCXJlZ3MtPnhjY3IgPSBEWEVORExZKDEpIHwgWERNQUVOIHwgWERJU0FCTEU7CiAJCXJlZ3MtPnJjY3IgPSBSRlVMTF9DWUNMRSB8IFJETUFFTiB8IFJESVNBQkxFOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuaCBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuaAppbmRleCBmZmRjYzVhLi4xMTBjMTA2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmgKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5oCkBAIC01MCw2ICs1MCwxMCBAQAogI3VuZGVmICBOVU1fTElOS1MKICNkZWZpbmUgTlVNX0xJTktTCTMKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjdW5kZWYgIE5VTV9MSU5LUworI2RlZmluZSBOVU1fTElOS1MJNAorI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKICN1bmRlZiAgTlVNX0xJTktTCiAjZGVmaW5lIE5VTV9MSU5LUwk1CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwMmV2bS5jIGIvc291bmQvc29jL29tYXAvb21hcDJldm0uYwppbmRleCBjZjNmYzhhLi4yOWI2MGQ2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwMmV2bS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAyZXZtLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcDNiZWFnbGUuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzYmVhZ2xlLmMKaW5kZXggZTU2ODMyYi4uNDBkYjgxMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcDNiZWFnbGUuYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM2JlYWdsZS5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAzZXZtLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM2V2bS5jCmluZGV4IDgxMGYxZTM2Li4wZGFhMDQ0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwM2V2bS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzZXZtLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYwppbmRleCA0ZWUzM2NlLi44MDQ3YzUyMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPHBsYXQvbWNic3AuaD4KQEAgLTE3MCw1MSArMTY5LDUzIEBACiBzdGF0aWMgaW50IG9tYXAzcGFuZG9yYV9vdXRfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCWludCByZXQ7CiAKIAkvKiBBbGwgVFdMNDAzMCBvdXRwdXQgcGlucyBhcmUgZmxvYXRpbmcgKi8KLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRUFSUElFQ0UiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVMIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBSRURSSVZFUiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIU09MIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhTT1IiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUTCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRSIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhGTCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIRlIiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiVklCUkEiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJFQVJQSUVDRSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlBSRURSSVZFTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlBSRURSSVZFUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkhTT0wiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJIU09SIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiQ0FSS0lUTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkNBUktJVFIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJIRkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJIRlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJWSUJSQSIpOwogCi0JcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgb21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHMsCisJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBvbWFwM3BhbmRvcmFfb3V0X2RhcG1fd2lkZ2V0cywKIAkJCQlBUlJBWV9TSVpFKG9tYXAzcGFuZG9yYV9vdXRfZGFwbV93aWRnZXRzKSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgb21hcDNwYW5kb3JhX291dF9tYXAsCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgb21hcDNwYW5kb3JhX291dF9tYXAsCiAJCUFSUkFZX1NJWkUob21hcDNwYW5kb3JhX291dF9tYXApKTsKIAotCXJldHVybiBzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJcmV0dXJuIHNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogfQogCiBzdGF0aWMgaW50IG9tYXAzcGFuZG9yYV9pbl9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IHJldDsKIAogCS8qIE5vdCBjb21ubmVjdGVkICovCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhTTUlDIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVE1JQyIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJESUdJTUlDMCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJESUdJTUlDMSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkhTTUlDIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiQ0FSS0lUTUlDIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiRElHSU1JQzAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJESUdJTUlDMSIpOwogCi0JcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgb21hcDNwYW5kb3JhX2luX2RhcG1fd2lkZ2V0cywKKwlyZXQgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIG9tYXAzcGFuZG9yYV9pbl9kYXBtX3dpZGdldHMsCiAJCQkJQVJSQVlfU0laRShvbWFwM3BhbmRvcmFfaW5fZGFwbV93aWRnZXRzKSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgb21hcDNwYW5kb3JhX2luX21hcCwKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBvbWFwM3BhbmRvcmFfaW5fbWFwLAogCQlBUlJBWV9TSVpFKG9tYXAzcGFuZG9yYV9pbl9tYXApKTsKIAotCXJldHVybiBzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJcmV0dXJuIHNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIG9tYXAzcGFuZG9yYV9vcHMgPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vc2s1OTEyLmMgYi9zb3VuZC9zb2Mvb21hcC9vc2s1OTEyLmMKaW5kZXggNjVhZTAwZS4uN2U3NWU3NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb3NrNTkxMi5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29zazU5MTIuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0xMTYsMTkgKzExNSwyMCBAQAogc3RhdGljIGludCBvc2tfdGx2MzIwYWljMjNfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCiAJLyogQWRkIG9zazU5MTIgc3BlY2lmaWMgd2lkZ2V0cyAqLwotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHRsdjMyMGFpYzIzX2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHRsdjMyMGFpYzIzX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUodGx2MzIwYWljMjNfZGFwbV93aWRnZXRzKSk7CiAKIAkvKiBTZXQgdXAgb3NrNTkxMiBzcGVjaWZpYyBhdWRpbyBwYXRoIGF1ZGlvX21hcCAqLwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCi0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJIZWFkcGhvbmUgSmFjayIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTGluZSBJbiIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTWljIEphY2siKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSGVhZHBob25lIEphY2siKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiTGluZSBJbiIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJNaWMgSmFjayIpOwogCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vdmVyby5jIGIvc291bmQvc29jL29tYXAvb3Zlcm8uYwppbmRleCBlOTVhNjA3Li5iYmNmMzgwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vdmVyby5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL292ZXJvLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvcng1MS5jIGIvc291bmQvc29jL29tYXAvcng1MS5jCmluZGV4IDA0YjU3MjMuLjA5ZmIwZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL3J4NTEuYworKysgYi9zb3VuZC9zb2Mvb21hcC9yeDUxLmMKQEAgLTMwLDE0ICszMCwxMiBAQAogI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHBsYXQvbWNic3AuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKICNpbmNsdWRlICJvbWFwLW1jYnNwLmgiCiAjaW5jbHVkZSAib21hcC1wY20uaCIKLSNpbmNsdWRlICIuLi9jb2RlY3MvdGx2MzIwYWljM3guaCIKIAogI2RlZmluZSBSWDUxX1RWT1VUX1NFTF9HUElPCQk0MAogI2RlZmluZSBSWDUxX0pBQ0tfREVURUNUX0dQSU8JCTE3NwpAQCAtNTgsMTkgKzU2LDIxIEBACiAKIHN0YXRpYyB2b2lkIHJ4NTFfZXh0X2NvbnRyb2woc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogeworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKKwogCWlmIChyeDUxX3Nwa19mdW5jKQotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkV4dCBTcGsiKTsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkV4dCBTcGsiKTsKIAllbHNlCi0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkV4dCBTcGsiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJFeHQgU3BrIik7CiAJaWYgKHJ4NTFfZG1pY19mdW5jKQotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkRNaWMiKTsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkRNaWMiKTsKIAllbHNlCi0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkRNaWMiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJETWljIik7CiAKIAlncGlvX3NldF92YWx1ZShSWDUxX1RWT1VUX1NFTF9HUElPLAogCQkgICAgICAgcng1MV9qYWNrX2Z1bmMgPT0gUlg1MV9KQUNLX1RWT1VUKTsKIAotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIH0KIAogc3RhdGljIGludCByeDUxX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0yNDQsMTIgKzI0NCwxMyBAQAogc3RhdGljIGludCByeDUxX2FpYzM0X2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlpbnQgZXJyOwogCiAJLyogU2V0IHVwIE5DIGNvZGVjIHBpbnMgKi8KLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTUlDM0wiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTUlDM1IiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORTFSIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTUlDM0wiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJNSUMzUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTkUxUiIpOwogCiAJLyogQWRkIFJYLTUxIHNwZWNpZmljIGNvbnRyb2xzICovCiAJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFpYzM0X3J4NTFfY29udHJvbHMsCkBAIC0yNTgsMTMgKzI1OSwxMyBAQAogCQlyZXR1cm4gZXJyOwogCiAJLyogQWRkIFJYLTUxIHNwZWNpZmljIHdpZGdldHMgKi8KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBhaWMzNF9kYXBtX3dpZGdldHMsCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBhaWMzNF9kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKGFpYzM0X2RhcG1fd2lkZ2V0cykpOwogCiAJLyogU2V0IHVwIFJYLTUxIHNwZWNpZmljIGF1ZGlvIHBhdGggYXVkaW9fbWFwICovCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CiAKLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CiAKIAkvKiBBViBqYWNrIGRldGVjdGlvbiAqLwogCWVyciA9IHNuZF9zb2NfamFja19uZXcoY29kZWMsICJBViBKYWNrIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL3NkcDM0MzAuYyBiL3NvdW5kL3NvYy9vbWFwL3NkcDM0MzAuYwppbmRleCAwN2ZiY2Y3Li4zZjcyZDE3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9zZHAzNDMwLmMKKysrIGIvc291bmQvc29jL29tYXAvc2RwMzQzMC5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvamFjay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTE5MSwzOSArMTkwLDQwIEBACiBzdGF0aWMgaW50IHNkcDM0MzBfdHdsNDAzMF9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IHJldDsKIAogCS8qIEFkZCBTRFAzNDMwIHNwZWNpZmljIHdpZGdldHMgKi8KLQlyZXQgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBzZHAzNDMwX3R3bDQwMzBfZGFwbV93aWRnZXRzLAorCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgc2RwMzQzMF90d2w0MDMwX2RhcG1fd2lkZ2V0cywKIAkJCQlBUlJBWV9TSVpFKHNkcDM0MzBfdHdsNDAzMF9kYXBtX3dpZGdldHMpKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJLyogU2V0IHVwIFNEUDM0MzAgc3BlY2lmaWMgYXVkaW8gcGF0aCBhdWRpb19tYXAgKi8KLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAogCS8qIFNEUDM0MzAgY29ubmVjdGVkIHBpbnMgKi8KLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkV4dCBNaWMiKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkV4dCBTcGsiKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkc2V0IE1pYyIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgU3RlcmVvcGhvbmUiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiRXh0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJFeHQgU3BrIik7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkc2V0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHNldCBTdGVyZW9waG9uZSIpOwogCiAJLyogVFdMNDAzMCBub3QgY29ubmVjdGVkIHBpbnMgKi8KLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQVVYTCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJBVVhSIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVE1JQyIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJESUdJTUlDMCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJESUdJTUlDMSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkFVWEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJBVVhSIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiQ0FSS0lUTUlDIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiRElHSU1JQzAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJESUdJTUlDMSIpOwogCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVEwiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUUiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJFQVJQSUVDRSIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQUkVEUklWRUwiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVSIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVEwiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIk9VVEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJPVVRSIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiRUFSUElFQ0UiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJQUkVEUklWRUwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJQUkVEUklWRVIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJDQVJLSVRMIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiQ0FSS0lUUiIpOwogCi0JcmV0ID0gc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXJldCA9IHNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL3NkcDQ0MzAuYyBiL3NvdW5kL3NvYy9vbWFwL3NkcDQ0MzAuYwppbmRleCA0YjQ0NjNkLi4xODllMDM5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9zZHA0NDMwLmMKKysrIGIvc291bmQvc29jL29tYXAvc2RwNDQzMC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxwbGF0L2hhcmR3YXJlLmg+CkBAIC02Niw2ICs2NiwyMSBAQAogCS5od19wYXJhbXMgPSBzZHA0NDMwX2h3X3BhcmFtcywKIH07CiAKKy8qIEhlYWRzZXQgamFjayAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2sgaHNfamFjazsKKworLypIZWFkc2V0IGphY2sgZGV0ZWN0aW9uIERBUE0gcGlucyAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfcGluIGhzX2phY2tfcGluc1tdID0geworCXsKKwkJLnBpbiA9ICJIZWFkc2V0IE1pYyIsCisJCS5tYXNrID0gU05EX0pBQ0tfTUlDUk9QSE9ORSwKKwl9LAorCXsKKwkJLnBpbiA9ICJIZWFkc2V0IFN0ZXJlb3Bob25lIiwKKwkJLm1hc2sgPSBTTkRfSkFDS19IRUFEUEhPTkUsCisJfSwKK307CisKIHN0YXRpYyBpbnQgc2RwNDQzMF9nZXRfcG93ZXJfbW9kZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKQEAgLTEwMiw2ICsxMTcsNyBAQAogCVNORF9TT0NfREFQTV9NSUMoIkhlYWRzZXQgTWljIiwgTlVMTCksCiAJU05EX1NPQ19EQVBNX0hQKCJIZWFkc2V0IFN0ZXJlb3Bob25lIiwgTlVMTCksCiAJU05EX1NPQ19EQVBNX1NQSygiRWFycGhvbmUgU3BrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJBdXgvRk0gU3RlcmVvIEluIiksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKQEAgLTEyNCwxMSArMTQwLDE2IEBACiAKIAkvKiBFYXJwaG9uZSBzcGVha2VyICovCiAJeyJFYXJwaG9uZSBTcGsiLCBOVUxMLCAiRVAifSwKKworCS8qIEF1eC9GTSBTdGVyZW8gSW46IEFGTUwsIEFGTVIgKi8KKwl7IkFGTUwiLCBOVUxMLCAiQXV4L0ZNIFN0ZXJlbyBJbiJ9LAorCXsiQUZNUiIsIE5VTEwsICJBdXgvRk0gU3RlcmVvIEluIn0sCiB9OwogCiBzdGF0aWMgaW50IHNkcDQ0MzBfdHdsNjA0MF9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IHJldDsKIAogCS8qIEFkZCBTRFA0NDMwIHNwZWNpZmljIGNvbnRyb2xzICovCkBAIC0xMzgsMjUgKzE1OSwzOSBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogQWRkIFNEUDQ0MzAgc3BlY2lmaWMgd2lkZ2V0cyAqLwotCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHNkcDQ0MzBfdHdsNjA0MF9kYXBtX3dpZGdldHMsCisJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBzZHA0NDMwX3R3bDYwNDBfZGFwbV93aWRnZXRzLAogCQkJCUFSUkFZX1NJWkUoc2RwNDQzMF90d2w2MDQwX2RhcG1fd2lkZ2V0cykpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBTZXQgdXAgU0RQNDQzMCBzcGVjaWZpYyBhdWRpbyBwYXRoIGF1ZGlvX21hcCAqLwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJLyogU0RQNDQzMCBjb25uZWN0ZWQgcGlucyAqLwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IE1pYyIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IFNwayIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHNldCBNaWMiKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgU3RlcmVvcGhvbmUiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiRXh0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJFeHQgU3BrIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkFGTUwiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiQUZNUiIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIZWFkc2V0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIZWFkc2V0IFN0ZXJlb3Bob25lIik7CiAKLQkvKiBUV0w2MDQwIG5vdCBjb25uZWN0ZWQgcGlucyAqLwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJBRk1MIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkFGTVIiKTsKKwlyZXQgPSBzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCS8qIEhlYWRzZXQgamFjayBkZXRlY3Rpb24gKi8KKwlyZXQgPSBzbmRfc29jX2phY2tfbmV3KGNvZGVjLCAiSGVhZHNldCBKYWNrIiwKKwkJCQlTTkRfSkFDS19IRUFEU0VULCAmaHNfamFjayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfamFja19hZGRfcGlucygmaHNfamFjaywgQVJSQVlfU0laRShoc19qYWNrX3BpbnMpLAorCQkJCWhzX2phY2tfcGlucyk7CisKKwlpZiAobWFjaGluZV9pc19vbWFwXzQ0MzBzZHAoKSkKKwkJdHdsNjA0MF9oc19qYWNrX2RldGVjdChjb2RlYywgJmhzX2phY2ssIFNORF9KQUNLX0hFQURTRVQpOworCWVsc2UKKwkJc25kX3NvY19qYWNrX3JlcG9ydCgmaHNfamFjaywgU05EX0pBQ0tfSEVBRFNFVCwgU05EX0pBQ0tfSEVBRFNFVCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvem9vbTIuYyBiL3NvdW5kL3NvYy9vbWFwL3pvb20yLmMKaW5kZXggNzE4MDMxZS4uMDE3MDk5NCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvem9vbTIuYworKysgYi9zb3VuZC9zb2Mvb21hcC96b29tMi5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTE2MiwzNSArMTYxLDM2IEBACiBzdGF0aWMgaW50IHpvb20yX3R3bDQwMzBfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCWludCByZXQ7CiAKIAkvKiBBZGQgWm9vbTIgc3BlY2lmaWMgd2lkZ2V0cyAqLwotCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHpvb20yX3R3bDQwMzBfZGFwbV93aWRnZXRzLAorCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgem9vbTJfdHdsNDAzMF9kYXBtX3dpZGdldHMsCiAJCQkJQVJSQVlfU0laRSh6b29tMl90d2w0MDMwX2RhcG1fd2lkZ2V0cykpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBTZXQgdXAgWm9vbTIgc3BlY2lmaWMgYXVkaW8gcGF0aCBhdWRpb19tYXAgKi8KLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAogCS8qIFpvb20yIGNvbm5lY3RlZCBwaW5zICovCi0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFeHQgTWljIik7Ci0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFeHQgU3BrIik7Ci0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJIZWFkc2V0IE1pYyIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHNldCBTdGVyZW9waG9uZSIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiQXV4IEluIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkV4dCBNaWMiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiRXh0IFNwayIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIZWFkc2V0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIZWFkc2V0IFN0ZXJlb3Bob25lIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkF1eCBJbiIpOwogCiAJLyogVFdMNDAzMCBub3QgY29ubmVjdGVkIHBpbnMgKi8KLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUTUlDIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkRJR0lNSUMwIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkRJR0lNSUMxIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkVBUlBJRUNFIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBSRURSSVZFTCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQUkVEUklWRVIiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUTCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRSIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiQ0FSS0lUTUlDIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiRElHSU1JQzAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJESUdJTUlDMSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkVBUlBJRUNFIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiUFJFRFJJVkVMIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiUFJFRFJJVkVSIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiQ0FSS0lUTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkNBUktJVFIiKTsKIAotCXJldCA9IHNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlyZXQgPSBzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2NvcmdpLmMgYi9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKaW5kZXggZjQ1MWFjZC4uZmM1OTJmMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9jb3JnaS5jCisrKyBiL3NvdW5kL3NvYy9weGEvY29yZ2kuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2NvcmdpLmg+CkBAIC00OCw1MSArNDcsNTMgQEAKIAogc3RhdGljIHZvaWQgY29yZ2lfZXh0X2NvbnRyb2woc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogeworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKKwogCS8qIHNldCB1cCBqYWNrIGNvbm5lY3Rpb24gKi8KIAlzd2l0Y2ggKGNvcmdpX2phY2tfZnVuYykgewogCWNhc2UgQ09SR0lfSFA6CiAJCS8qIHNldCA9IHVubXV0ZSBoZWFkcGhvbmUgKi8KIAkJZ3Bpb19zZXRfdmFsdWUoQ09SR0lfR1BJT19NVVRFX0wsIDEpOwogCQlncGlvX3NldF92YWx1ZShDT1JHSV9HUElPX01VVEVfUiwgMSk7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIk1pYyBKYWNrIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkxpbmUgSmFjayIpOwotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkhlYWRwaG9uZSBKYWNrIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIk1pYyBKYWNrIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTGluZSBKYWNrIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIZWFkcGhvbmUgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRzZXQgSmFjayIpOwogCQlicmVhazsKIAljYXNlIENPUkdJX01JQzoKIAkJLyogcmVzZXQgPSBtdXRlIGhlYWRwaG9uZSAqLwogCQlncGlvX3NldF92YWx1ZShDT1JHSV9HUElPX01VVEVfTCwgMCk7CiAJCWdwaW9fc2V0X3ZhbHVlKENPUkdJX0dQSU9fTVVURV9SLCAwKTsKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJNaWMgSmFjayIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJMaW5lIEphY2siKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBKYWNrIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJNaWMgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkxpbmUgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRwaG9uZSBKYWNrIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHNldCBKYWNrIik7CiAJCWJyZWFrOwogCWNhc2UgQ09SR0lfTElORToKIAkJZ3Bpb19zZXRfdmFsdWUoQ09SR0lfR1BJT19NVVRFX0wsIDApOwogCQlncGlvX3NldF92YWx1ZShDT1JHSV9HUElPX01VVEVfUiwgMCk7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIk1pYyBKYWNrIik7Ci0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTGluZSBKYWNrIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRwaG9uZSBKYWNrIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIk1pYyBKYWNrIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJMaW5lIEphY2siKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkcGhvbmUgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRzZXQgSmFjayIpOwogCQlicmVhazsKIAljYXNlIENPUkdJX0hFQURTRVQ6CiAJCWdwaW9fc2V0X3ZhbHVlKENPUkdJX0dQSU9fTVVURV9MLCAwKTsKIAkJZ3Bpb19zZXRfdmFsdWUoQ09SR0lfR1BJT19NVVRFX1IsIDEpOwotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIk1pYyBKYWNrIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkxpbmUgSmFjayIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkcGhvbmUgSmFjayIpOwotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiTWljIEphY2siKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJMaW5lIEphY2siKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkcGhvbmUgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSGVhZHNldCBKYWNrIik7CiAJCWJyZWFrOwogCX0KIAogCWlmIChjb3JnaV9zcGtfZnVuYyA9PSBDT1JHSV9TUEtfT04pCi0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IFNwayIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiRXh0IFNwayIpOwogCWVsc2UKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiRXh0IFNwayIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkV4dCBTcGsiKTsKIAogCS8qIHNpZ25hbCBhIERBUE0gZXZlbnQgKi8KLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CiB9CiAKIHN0YXRpYyBpbnQgY29yZ2lfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKQEAgLTI3OSwxMCArMjgwLDExIEBACiBzdGF0aWMgaW50IGNvcmdpX3dtODczMV9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IGVycjsKIAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMTElORUlOIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJMSU5FSU4iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMTElORUlOIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiUkxJTkVJTiIpOwogCiAJLyogQWRkIGNvcmdpIHNwZWNpZmljIGNvbnRyb2xzICovCiAJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODczMV9jb3JnaV9jb250cm9scywKQEAgLTI5MSwxMyArMjkzLDEzIEBACiAJCXJldHVybiBlcnI7CiAKIAkvKiBBZGQgY29yZ2kgc3BlY2lmaWMgd2lkZ2V0cyAqLwotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODczMV9kYXBtX3dpZGdldHMsCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg3MzFfZGFwbV93aWRnZXRzLAogCQkJCSAgQVJSQVlfU0laRSh3bTg3MzFfZGFwbV93aWRnZXRzKSk7CiAKIAkvKiBTZXQgdXAgY29yZ2kgc3BlY2lmaWMgYXVkaW8gcGF0aCBhdWRpb19tYXAgKi8KLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9lNzQwX3dtOTcwNS5jIGIvc291bmQvc29jL3B4YS9lNzQwX3dtOTcwNS5jCmluZGV4IGM4MmNlZGIuLjI4MzMzZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvZTc0MF93bTk3MDUuYworKysgYi9zb3VuZC9zb2MvcHhhL2U3NDBfd205NzA1LmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgpAQCAtOTIsMjMgKzkxLDI0IEBACiBzdGF0aWMgaW50IGU3NDBfYWM5N19pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFBPVVRMIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhQT1VUUiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQSE9ORSIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FSU5MIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVJTlIiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0RJTkwiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0RJTlIiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUENCRUVQIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1JQzIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJIUE9VVEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJIUE9VVFIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJQSE9ORSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTkVJTkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSU5FSU5SIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiQ0RJTkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJDRElOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlBDQkVFUCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIk1JQzIiKTsKIAotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGU3NDBfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgZTc0MF9kYXBtX3dpZGdldHMsCiAJCQkJCUFSUkFZX1NJWkUoZTc0MF9kYXBtX3dpZGdldHMpKTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2U3NTBfd205NzA1LmMgYi9zb3VuZC9zb2MvcHhhL2U3NTBfd205NzA1LmMKaW5kZXggNGMxNDM4MC4uMDFiZjMxNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9lNzUwX3dtOTcwNS5jCisrKyBiL3NvdW5kL3NvYy9weGEvZTc1MF93bTk3MDUuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+CkBAIC03NCwyMyArNzMsMjQgQEAKIHN0YXRpYyBpbnQgZTc1MF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMT1VUIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJPVVQiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUEhPTkUiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORUlOTCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FSU5SIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNESU5MIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNESU5SIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBDQkVFUCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNSUMyIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTE9VVCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlJPVVQiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJQSE9ORSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTkVJTkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSU5FSU5SIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiQ0RJTkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJDRElOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlBDQkVFUCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIk1JQzIiKTsKIAotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGU3NTBfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgZTc1MF9kYXBtX3dpZGdldHMsCiAJCQkJCUFSUkFZX1NJWkUoZTc1MF9kYXBtX3dpZGdldHMpKTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMgYi9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMKaW5kZXggZDQyZTVmZS4uYzZhMzdjNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9lODAwX3dtOTcxMi5jCisrKyBiL3NvdW5kL3NvYy9weGEvZTgwMF93bTk3MTIuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CkBAIC03NSwxMiArNzQsMTMgQEAKIHN0YXRpYyBpbnQgZTgwMF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGU4MDBfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgZTgwMF9kYXBtX3dpZGdldHMsCiAJCQkJCUFSUkFZX1NJWkUoZTgwMF9kYXBtX3dpZGdldHMpKTsKIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7Ci0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9lbS14MjcwLmMgYi9zb3VuZC9zb2MvcHhhL2VtLXgyNzAuYwppbmRleCBlYWRmOWQzLi5mYzIyZTZlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL2VtLXgyNzAuYworKysgYi9zb3VuZC9zb2MvcHhhL2VtLXgyNzAuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL21hZ2ljaWFuLmMgYi9zb3VuZC9zb2MvcHhhL21hZ2ljaWFuLmMKaW5kZXggNWVmMDUyNi4uNjdkY2MzNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9tYWdpY2lhbi5jCisrKyBiL3NvdW5kL3NvYy9weGEvbWFnaWNpYW4uYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL3VkYTEzODAuaD4KIAogI2luY2x1ZGUgPG1hY2gvbWFnaWNpYW4uaD4KQEAgLTQ0LDI3ICs0MywyOSBAQAogCiBzdGF0aWMgdm9pZCBtYWdpY2lhbl9leHRfY29udHJvbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOworCiAJaWYgKG1hZ2ljaWFuX3Nwa19zd2l0Y2gpCi0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiU3BlYWtlciIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiU3BlYWtlciIpOwogCWVsc2UKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiU3BlYWtlciIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIlNwZWFrZXIiKTsKIAlpZiAobWFnaWNpYW5faHBfc3dpdGNoKQotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkhlYWRwaG9uZSBKYWNrIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIZWFkcGhvbmUgSmFjayIpOwogCWVsc2UKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkcGhvbmUgSmFjayIpOwogCiAJc3dpdGNoIChtYWdpY2lhbl9pbl9zZWwpIHsKIAljYXNlIE1BR0lDSUFOX01JQzoKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBNaWMiKTsKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJDYWxsIE1pYyIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRzZXQgTWljIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJDYWxsIE1pYyIpOwogCQlicmVhazsKIAljYXNlIE1BR0lDSUFOX01JQ19FWFQ6Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkNhbGwgTWljIik7Ci0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHNldCBNaWMiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJDYWxsIE1pYyIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSGVhZHNldCBNaWMiKTsKIAkJYnJlYWs7CiAJfQogCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogfQogCiBzdGF0aWMgaW50IG1hZ2ljaWFuX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0zOTksMTUgKzQwMCwxNiBAQAogc3RhdGljIGludCBtYWdpY2lhbl91ZGExMzgwX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlpbnQgZXJyOwogCiAJLyogTkMgY29kZWMgcGlucyAqLwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJWT1VUTEhQIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlZPVVRSSFAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJWT1VUTEhQIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiVk9VVFJIUCIpOwogCiAJLyogRklYTUU6IGlzIGFueXRoaW5nIGNvbm5lY3RlZCBoZXJlPyAqLwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJWSU5MIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlZJTlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJWSU5MIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiVklOUiIpOwogCiAJLyogQWRkIG1hZ2ljaWFuIHNwZWNpZmljIGNvbnRyb2xzICovCiAJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHVkYTEzODBfbWFnaWNpYW5fY29udHJvbHMsCkBAIC00MTYsMTMgKzQxOCwxMyBAQAogCQlyZXR1cm4gZXJyOwogCiAJLyogQWRkIG1hZ2ljaWFuIHNwZWNpZmljIHdpZGdldHMgKi8KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB1ZGExMzgwX2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHVkYTEzODBfZGFwbV93aWRnZXRzLAogCQkJCSAgQVJSQVlfU0laRSh1ZGExMzgwX2RhcG1fd2lkZ2V0cykpOwogCiAJLyogU2V0IHVwIG1hZ2ljaWFuIHNwZWNpZmljIGF1ZGlvIHBhdGggaW50ZXJjb25uZWN0cyAqLwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMgYi9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMKaW5kZXggZjI4NGNjNS4uMGQ3MGZjOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9taW9hNzAxX3dtOTcxMy5jCisrKyBiL3NvdW5kL3NvYy9weGEvbWlvYTcwMV93bTk3MTMuYwpAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAKQEAgLTEzMCwxMyArMTI5LDE0IEBACiBzdGF0aWMgaW50IG1pb2E3MDFfd205NzEzX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAl1bnNpZ25lZCBzaG9ydCByZWc7CiAKIAkvKiBBZGQgbWlvYTcwMSBzcGVjaWZpYyB3aWRnZXRzICovCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgQVJSQVlfQU5EX1NJWkUobWlvYTcwMV9kYXBtX3dpZGdldHMpKTsKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIEFSUkFZX0FORF9TSVpFKG1pb2E3MDFfZGFwbV93aWRnZXRzKSk7CiAKIAkvKiBTZXQgdXAgbWlvYTcwMSBzcGVjaWZpYyBhdWRpbyBwYXRoIGF1ZGlvX21hcG5lY3RzICovCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIEFSUkFZX0FORF9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIEFSUkFZX0FORF9TSVpFKGF1ZGlvX21hcCkpOwogCiAJLyogUHJlcGFyZSBHUElPOCBmb3IgcmVhciBzcGVha2VyIGFtcGxpZmllciAqLwogCXJlZyA9IGNvZGVjLT5kcml2ZXItPnJlYWQoY29kZWMsIEFDOTdfR1BJT19DRkcpOwpAQCAtMTQ2LDEyICsxNDYsMTIgQEAKIAlyZWcgPSBjb2RlYy0+ZHJpdmVyLT5yZWFkKGNvZGVjLCBBQzk3XzNEX0NPTlRST0wpOwogCWNvZGVjLT5kcml2ZXItPndyaXRlKGNvZGVjLCBBQzk3XzNEX0NPTlRST0wsIHJlZyB8IDB4YzAwMCk7CiAKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkZyb250IFNwZWFrZXIiKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIlJlYXIgU3BlYWtlciIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRnJvbnQgTWljIik7Ci0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBJbiIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiR1NNIExpbmUgT3V0Iik7Ci0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJGcm9udCBTcGVha2VyIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIlJlYXIgU3BlYWtlciIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJGcm9udCBNaWMiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiR1NNIExpbmUgSW4iKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiR1NNIExpbmUgT3V0Iik7CisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jIGIvc291bmQvc29jL3B4YS9wYWxtMjd4LmMKaW5kZXggMTNmNmQ0OC4uODU3ZGI5NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9wYWxtMjd4LmMKKysrIGIvc291bmQvc29jL3B4YS9wYWxtMjd4LmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtNzcsMzcgKzc2LDM4IEBACiBzdGF0aWMgaW50IHBhbG0yN3hfYWM5N19pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IGVycjsKIAogCS8qIGFkZCBwYWxtMjd4IHNwZWNpZmljIHdpZGdldHMgKi8KLQllcnIgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBwYWxtMjd4X2RhcG1fd2lkZ2V0cywKKwllcnIgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHBhbG0yN3hfZGFwbV93aWRnZXRzLAogCQkJCUFSUkFZX1NJWkUocGFsbTI3eF9kYXBtX3dpZGdldHMpKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJLyogc2V0IHVwIHBhbG0yN3ggc3BlY2lmaWMgYXVkaW8gcGF0aCBhdWRpb19tYXAgKi8KLQllcnIgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCWVyciA9IHNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJLyogY29ubmVjdGVkIHBpbnMgKi8KIAlpZiAobWFjaGluZV9pc19wYWxtbGQoKSkKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJNSUMxIik7Ci0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJIUE9VVEwiKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkhQT1VUUiIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTE9VVDIiKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIlJPVVQyIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJNSUMxIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkhQT1VUTCIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIUE9VVFIiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiTE9VVDIiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiUk9VVDIiKTsKIAogCS8qIG5vdCBjb25uZWN0ZWQgcGlucyAqLwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVQzIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk9PVVQiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORUlOTCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FSU5SIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBDQkVFUCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQSE9ORSIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNSUMyIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiT1VUMyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIk1PTk9PVVQiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSU5FSU5MIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORUlOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlBDQkVFUCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlBIT05FIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTUlDMiIpOwogCi0JZXJyID0gc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCWVyciA9IHNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMgYi9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCmluZGV4IDg0ZWRkMDMuLjYyOThlZTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKKysrIGIvc291bmQvc29jL3B4YS9wb29kbGUuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvbG9jb21vLmg+CkBAIC00Niw2ICs0NSw4IEBACiAKIHN0YXRpYyB2b2lkIHBvb2RsZV9leHRfY29udHJvbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOworCiAJLyogc2V0IHVwIGphY2sgY29ubmVjdGlvbiAqLwogCWlmIChwb29kbGVfamFja19mdW5jID09IFBPT0RMRV9IUCkgewogCQkvKiBzZXQgPSB1bm11dGUgaGVhZHBob25lICovCkBAIC01MywyMyArNTQsMjMgQEAKIAkJCVBPT0RMRV9MT0NPTU9fR1BJT19NVVRFX0wsIDEpOwogCQlsb2NvbW9fZ3Bpb193cml0ZSgmcG9vZGxlX2xvY29tb19kZXZpY2UuZGV2LAogCQkJUE9PRExFX0xPQ09NT19HUElPX01VVEVfUiwgMSk7Ci0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkhlYWRwaG9uZSBKYWNrIik7CiAJfSBlbHNlIHsKIAkJbG9jb21vX2dwaW9fd3JpdGUoJnBvb2RsZV9sb2NvbW9fZGV2aWNlLmRldiwKIAkJCVBPT0RMRV9MT0NPTU9fR1BJT19NVVRFX0wsIDApOwogCQlsb2NvbW9fZ3Bpb193cml0ZSgmcG9vZGxlX2xvY29tb19kZXZpY2UuZGV2LAogCQkJUE9PRExFX0xPQ09NT19HUElPX01VVEVfUiwgMCk7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRwaG9uZSBKYWNrIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHBob25lIEphY2siKTsKIAl9CiAKIAkvKiBzZXQgdGhlIGVucG9pbnRzIHRvIHRoZWlyIG5ldyBjb25uZXRpb24gc3RhdGVzICovCiAJaWYgKHBvb2RsZV9zcGtfZnVuYyA9PSBQT09ETEVfU1BLX09OKQotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkV4dCBTcGsiKTsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkV4dCBTcGsiKTsKIAllbHNlCi0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkV4dCBTcGsiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJFeHQgU3BrIik7CiAKIAkvKiBzaWduYWwgYSBEQVBNIGV2ZW50ICovCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogfQogCiBzdGF0aWMgaW50IHBvb2RsZV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMjQ0LDExICsyNDUsMTIgQEAKIHN0YXRpYyBpbnQgcG9vZGxlX3dtODczMV9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IGVycjsKIAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMTElORUlOIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJMSU5FSU4iKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIk1JQ0lOIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTExJTkVJTiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlJMSU5FSU4iKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiTUlDSU4iKTsKIAogCS8qIEFkZCBwb29kbGUgc3BlY2lmaWMgY29udHJvbHMgKi8KIAllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzMxX3Bvb2RsZV9jb250cm9scywKQEAgLTI1NywxMyArMjU5LDEzIEBACiAJCXJldHVybiBlcnI7CiAKIAkvKiBBZGQgcG9vZGxlIHNwZWNpZmljIHdpZGdldHMgKi8KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3MzFfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204NzMxX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUod204NzMxX2RhcG1fd2lkZ2V0cykpOwogCiAJLyogU2V0IHVwIHBvb2RsZSBzcGVjaWZpYyBhdWRpbyBwYXRoIGF1ZGlvX21hcCAqLwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3JhdW1mZWxkLmMgYi9zb3VuZC9zb2MvcHhhL3JhdW1mZWxkLmMKaW5kZXggMmNkYTgyYmMuLjBmZDYwZjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcmF1bWZlbGQuYworKysgYi9zb3VuZC9zb2MvcHhhL3JhdW1mZWxkLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvc2FhcmIuYyBiL3NvdW5kL3NvYy9weGEvc2FhcmIuYwppbmRleCBkNjNjYjQ3Li45NTk1MTg5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3NhYXJiLmMKKysrIGIvc291bmQvc29jL3B4YS9zYWFyYi5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvamFjay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTEzMywyMCArMTMyLDIxIEBACiBzdGF0aWMgaW50IHNhYXJiX3BtODYweF9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IHJldDsKIAotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHNhYXJiX2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHNhYXJiX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUoc2FhcmJfZGFwbV93aWRnZXRzKSk7Ci0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CiAKIAkvKiBjb25uZWN0ZWQgcGlucyAqLwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IFNwZWFrZXIiKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkV4dCBNaWMgMSIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IE1pYyAzIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBNaWMgMiIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgU3RlcmVvcGhvbmUiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiRXh0IFNwZWFrZXIiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiRXh0IE1pYyAxIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkV4dCBNaWMgMyIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHNldCBNaWMgMiIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHNldCBTdGVyZW9waG9uZSIpOwogCi0JcmV0ID0gc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXJldCA9IHNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvc3BpdHouYyBiL3NvdW5kL3NvYy9weGEvc3BpdHouYwppbmRleCAwYjMwZDdkLi5jMmFjYjY5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKKysrIGIvc291bmQvc29jL3B4YS9zcGl0ei5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvc3BpdHouaD4KQEAgLTQ2LDYxICs0NSw2MyBAQAogCiBzdGF0aWMgdm9pZCBzcGl0el9leHRfY29udHJvbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOworCiAJaWYgKHNwaXR6X3Nwa19mdW5jID09IFNQSVRaX1NQS19PTikKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFeHQgU3BrIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJFeHQgU3BrIik7CiAJZWxzZQotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJFeHQgU3BrIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiRXh0IFNwayIpOwogCiAJLyogc2V0IHVwIGphY2sgY29ubmVjdGlvbiAqLwogCXN3aXRjaCAoc3BpdHpfamFja19mdW5jKSB7CiAJY2FzZSBTUElUWl9IUDoKIAkJLyogZW5hYmxlIGFuZCB1bm11dGUgaHAgamFjaywgZGlzYWJsZSBtaWMgYmlhcyAqLwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkc2V0IEphY2siKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTWljIEphY2siKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTGluZSBKYWNrIik7Ci0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkc2V0IEphY2siKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJNaWMgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkxpbmUgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSGVhZHBob25lIEphY2siKTsKIAkJZ3Bpb19zZXRfdmFsdWUoU1BJVFpfR1BJT19NVVRFX0wsIDEpOwogCQlncGlvX3NldF92YWx1ZShTUElUWl9HUElPX01VVEVfUiwgMSk7CiAJCWJyZWFrOwogCWNhc2UgU1BJVFpfTUlDOgogCQkvKiBlbmFibGUgbWljIGphY2sgYW5kIGJpYXMsIG11dGUgaHAgKi8KLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBKYWNrIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkxpbmUgSmFjayIpOwotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIk1pYyBKYWNrIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHBob25lIEphY2siKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkc2V0IEphY2siKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJMaW5lIEphY2siKTsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIk1pYyBKYWNrIik7CiAJCWdwaW9fc2V0X3ZhbHVlKFNQSVRaX0dQSU9fTVVURV9MLCAwKTsKIAkJZ3Bpb19zZXRfdmFsdWUoU1BJVFpfR1BJT19NVVRFX1IsIDApOwogCQlicmVhazsKIAljYXNlIFNQSVRaX0xJTkU6CiAJCS8qIGVuYWJsZSBsaW5lIGphY2ssIGRpc2FibGUgbWljIGJpYXMgYW5kIG11dGUgaHAgKi8KLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBKYWNrIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIk1pYyBKYWNrIik7Ci0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTGluZSBKYWNrIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHBob25lIEphY2siKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkc2V0IEphY2siKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJNaWMgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiTGluZSBKYWNrIik7CiAJCWdwaW9fc2V0X3ZhbHVlKFNQSVRaX0dQSU9fTVVURV9MLCAwKTsKIAkJZ3Bpb19zZXRfdmFsdWUoU1BJVFpfR1BJT19NVVRFX1IsIDApOwogCQlicmVhazsKIAljYXNlIFNQSVRaX0hFQURTRVQ6CiAJCS8qIGVuYWJsZSBhbmQgdW5tdXRlIGhlYWRzZXQgamFjayBlbmFibGUgbWljIGJpYXMsIG11dGUgTCBocCAqLwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkcGhvbmUgSmFjayIpOwotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIk1pYyBKYWNrIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkxpbmUgSmFjayIpOwotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRwaG9uZSBKYWNrIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJNaWMgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkxpbmUgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSGVhZHNldCBKYWNrIik7CiAJCWdwaW9fc2V0X3ZhbHVlKFNQSVRaX0dQSU9fTVVURV9MLCAwKTsKIAkJZ3Bpb19zZXRfdmFsdWUoU1BJVFpfR1BJT19NVVRFX1IsIDEpOwogCQlicmVhazsKIAljYXNlIFNQSVRaX0hQX09GRjoKIAogCQkvKiBqYWNrIHJlbW92ZWQsIGV2ZXJ5dGhpbmcgb2ZmICovCi0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRwaG9uZSBKYWNrIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgSmFjayIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJNaWMgSmFjayIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJMaW5lIEphY2siKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkcGhvbmUgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRzZXQgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIk1pYyBKYWNrIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTGluZSBKYWNrIik7CiAJCWdwaW9fc2V0X3ZhbHVlKFNQSVRaX0dQSU9fTVVURV9MLCAwKTsKIAkJZ3Bpb19zZXRfdmFsdWUoU1BJVFpfR1BJT19NVVRFX1IsIDApOwogCQlicmVhazsKIAl9Ci0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogfQogCiBzdGF0aWMgaW50IHNwaXR6X3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0yODEsMTYgKzI4MiwxNyBAQAogc3RhdGljIGludCBzcGl0el93bTg3NTBfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCWludCBlcnI7CiAKIAkvKiBOQyBjb2RlYyBwaW5zICovCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJJTlBVVDEiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElOUFVUMiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJSSU5QVVQyIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTlBVVDMiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUklOUFVUMyIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVQzIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk8xIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiUklOUFVUMSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTlBVVDIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJSSU5QVVQyIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElOUFVUMyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlJJTlBVVDMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJPVVQzIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTU9OTzEiKTsKIAogCS8qIEFkZCBzcGl0eiBzcGVjaWZpYyBjb250cm9scyAqLwogCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3NTBfc3BpdHpfY29udHJvbHMsCkBAIC0yOTksMTMgKzMwMSwxMyBAQAogCQlyZXR1cm4gZXJyOwogCiAJLyogQWRkIHNwaXR6IHNwZWNpZmljIHdpZGdldHMgKi8KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3NTBfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204NzUwX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUod204NzUwX2RhcG1fd2lkZ2V0cykpOwogCiAJLyogU2V0IHVwIHNwaXR6IHNwZWNpZmljIGF1ZGlvIHBhdGhzICovCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CiAKLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvdGF2b3JldmIzLmMgYi9zb3VuZC9zb2MvcHhhL3Rhdm9yZXZiMy5jCmluZGV4IDI0OGMyODMuLmY4ODFmNjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvdGF2b3JldmIzLmMKKysrIGIvc291bmQvc29jL3B4YS90YXZvcmV2YjMuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0xMzMsMjAgKzEzMiwyMSBAQAogc3RhdGljIGludCBldmIzX3BtODYweF9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IHJldDsKIAotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGV2YjNfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgZXZiM19kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKGV2YjNfZGFwbV93aWRnZXRzKSk7Ci0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CiAKIAkvKiBjb25uZWN0ZWQgcGlucyAqLwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IFNwZWFrZXIiKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkV4dCBNaWMgMSIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IE1pYyAzIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBNaWMgMiIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgU3RlcmVvcGhvbmUiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiRXh0IFNwZWFrZXIiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiRXh0IE1pYyAxIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkV4dCBNaWMgMyIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHNldCBNaWMgMiIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHNldCBTdGVyZW9waG9uZSIpOwogCi0JcmV0ID0gc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXJldCA9IHNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvdG9zYS5jIGIvc291bmQvc29jL3B4YS90b3NhLmMKaW5kZXggN2I5ODNmOS4uZjc1ODA0ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS90b3NhLmMKKysrIGIvc291bmQvc29jL3B4YS90b3NhLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC90b3NhLmg+CkBAIC00OSwzMSArNDgsMzMgQEAKIAogc3RhdGljIHZvaWQgdG9zYV9leHRfY29udHJvbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOworCiAJLyogc2V0IHVwIGphY2sgY29ubmVjdGlvbiAqLwogCXN3aXRjaCAodG9zYV9qYWNrX2Z1bmMpIHsKIAljYXNlIFRPU0FfSFA6Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIk1pYyAoSW50ZXJuYWwpIik7Ci0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBKYWNrIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTWljIChJbnRlcm5hbCkiKTsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkhlYWRwaG9uZSBKYWNrIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHNldCBKYWNrIik7CiAJCWJyZWFrOwogCWNhc2UgVE9TQV9NSUNfSU5UOgotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIk1pYyAoSW50ZXJuYWwpIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRwaG9uZSBKYWNrIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiTWljIChJbnRlcm5hbCkiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkcGhvbmUgSmFjayIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRzZXQgSmFjayIpOwogCQlicmVhazsKIAljYXNlIFRPU0FfSEVBRFNFVDoKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTWljIChJbnRlcm5hbCkiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJIZWFkc2V0IEphY2siKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJNaWMgKEludGVybmFsKSIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRwaG9uZSBKYWNrIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIZWFkc2V0IEphY2siKTsKIAkJYnJlYWs7CiAJfQogCiAJaWYgKHRvc2Ffc3BrX2Z1bmMgPT0gVE9TQV9TUEtfT04pCi0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiU3BlYWtlciIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiU3BlYWtlciIpOwogCWVsc2UKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiU3BlYWtlciIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIlNwZWFrZXIiKTsKIAotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIH0KIAogc3RhdGljIGludCB0b3NhX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0xOTEsMTAgKzE5MiwxMSBAQAogc3RhdGljIGludCB0b3NhX2FjOTdfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCWludCBlcnI7CiAKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUMyIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNT05PT1VUIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiT1VUMyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIk1PTk9PVVQiKTsKIAogCS8qIGFkZCB0b3NhIHNwZWNpZmljIGNvbnRyb2xzICovCiAJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHRvc2FfY29udHJvbHMsCkBAIC0yMDMsMTMgKzIwNSwxMyBAQAogCQlyZXR1cm4gZXJyOwogCiAJLyogYWRkIHRvc2Egc3BlY2lmaWMgd2lkZ2V0cyAqLwotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHRvc2FfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgdG9zYV9kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHRvc2FfZGFwbV93aWRnZXRzKSk7CiAKIAkvKiBzZXQgdXAgdG9zYSBzcGVjaWZpYyBhdWRpbyBwYXRoIGF1ZGlvX21hcCAqLwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3oyLmMgYi9zb3VuZC9zb2MvcHhhL3oyLmMKaW5kZXggNGNjODQxYi4uMmQ0Zjg5NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS96Mi5jCisrKyBiL3NvdW5kL3NvYy9weGEvejIuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0xNDAsMjIgKzEzOSwyMyBAQAogc3RhdGljIGludCB6Ml93bTg3NTBfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCWludCByZXQ7CiAKIAkvKiBOQyBjb2RlYyBwaW5zICovCi0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTElOUFVUMyIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIlJJTlBVVDMiKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJPVVQzIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTU9OTyIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTElOUFVUMyIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiUklOUFVUMyIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiT1VUMyIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTU9OTyIpOwogCiAJLyogQWRkIHoyIHNwZWNpZmljIHdpZGdldHMgKi8KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3NTBfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204NzUwX2RhcG1fd2lkZ2V0cywKIAkJCQkgQVJSQVlfU0laRSh3bTg3NTBfZGFwbV93aWRnZXRzKSk7CiAKIAkvKiBTZXQgdXAgejIgc3BlY2lmaWMgYXVkaW8gcGF0aHMgKi8KLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKIAotCXJldCA9IHNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlyZXQgPSBzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS96eWxvbml0ZS5jIGIvc291bmQvc29jL3B4YS96eWxvbml0ZS5jCmluZGV4IGQyN2UwNWEuLmIyMjJhN2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYworKysgYi9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgIi4uL2NvZGVjcy93bTk3MTMuaCIKICNpbmNsdWRlICJweGEyeHgtYWM5Ny5oIgpAQCAtNzMsMjEgKzcyLDIyIEBACiBzdGF0aWMgaW50IHp5bG9uaXRlX3dtOTcxM19pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKIAlpZiAoY2xrX3BvdXQpCiAJCXNuZF9zb2NfZGFpX3NldF9wbGwocnRkLT5jb2RlY19kYWksIDAsIDAsCiAJCQkJICAgIGNsa19nZXRfcmF0ZShwb3V0KSwgMCk7CiAKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB6eWxvbml0ZV9kYXBtX3dpZGdldHMsCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB6eWxvbml0ZV9kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHp5bG9uaXRlX2RhcG1fd2lkZ2V0cykpOwogCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CiAKIAkvKiBTdGF0aWMgc2V0dXAgZm9yIG5vdyAqLwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIik7Ci0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJIZWFkc2V0IEVhcnBpZWNlIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkhlYWRwaG9uZSIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIZWFkc2V0IEVhcnBpZWNlIik7CiAKLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcgYi9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODViZjhhLi4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotY29uZmlnIFNORF9TM0MyNFhYX1NPQwotCXRyaXN0YXRlICJTb0MgQXVkaW8gZm9yIHRoZSBTYW1zdW5nIFMzQ1hYWFggY2hpcHMiCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TM0M2NFhYIHx8IEFSQ0hfUzVQQzEwMCB8fCBBUkNIX1M1UFYyMTAKLQlzZWxlY3QgUzNDNjRYWF9ETUEgaWYgQVJDSF9TM0M2NFhYCi0Jc2VsZWN0IFMzQzI0MTBfRE1BIGlmIEFSQ0hfUzNDMjQxMAotCWhlbHAKLQkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGNvZGVjcyBhdHRhY2hlZCB0bwotCSAgdGhlIFMzQzI0WFggQUM5NyBvciBJMlMgaW50ZXJmYWNlcy4gWW91IHdpbGwgYWxzbyBuZWVkIHRvCi0JICBzZWxlY3QgdGhlIGF1ZGlvIGludGVyZmFjZXMgdG8gc3VwcG9ydCBiZWxvdy4KLQotY29uZmlnIFNORF9TM0MyNFhYX1NPQ19JMlMKLQl0cmlzdGF0ZQotCXNlbGVjdCBTM0MyNDEwX0RNQQotCi1jb25maWcgU05EX1MzQ19JMlNWMl9TT0MKLQl0cmlzdGF0ZQotCi1jb25maWcgU05EX1MzQzI0MTJfU09DX0kyUwotCXRyaXN0YXRlCi0Jc2VsZWN0IFNORF9TM0NfSTJTVjJfU09DCi0Jc2VsZWN0IFMzQzI0MTBfRE1BCi0KLWNvbmZpZyBTTkRfUzNDNjRYWF9TT0NfSTJTCi0JdHJpc3RhdGUKLQlzZWxlY3QgU05EX1MzQ19JMlNWMl9TT0MKLQlzZWxlY3QgUzNDNjRYWF9ETUEKLQotY29uZmlnIFNORF9TM0M2NFhYX1NPQ19JMlNfVjQKLQl0cmlzdGF0ZQotCXNlbGVjdCBTTkRfUzNDX0kyU1YyX1NPQwotCXNlbGVjdCBTM0M2NFhYX0RNQQotCi1jb25maWcgU05EX1MzQ19TT0NfUENNCi0JdHJpc3RhdGUKLQotY29uZmlnIFNORF9TM0NfU09DX0FDOTcKLQl0cmlzdGF0ZQotCXNlbGVjdCBTTkRfU09DX0FDOTdfQlVTCi0KLWNvbmZpZyBTTkRfUzVQX1NPQ19TUERJRgotCXRyaXN0YXRlCi0Jc2VsZWN0IFNORF9TT0NfU1BESUYKLQotY29uZmlnIFNORF9TM0MyNFhYX1NPQ19ORU8xOTczX1dNODc1MwotCXRyaXN0YXRlICJTb0MgSTJTIEF1ZGlvIHN1cHBvcnQgZm9yIE5FTzE5NzMgLSBXTTg3NTMiCi0JZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MgJiYgTUFDSF9ORU8xOTczX0dUQTAxCi0Jc2VsZWN0IFNORF9TM0MyNFhYX1NPQ19JMlMKLQlzZWxlY3QgU05EX1NPQ19XTTg3NTMKLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHNtZGsyNDQwCi0JICB3aXRoIHRoZSBXTTg3NTMuCi0KLWNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfTkVPMTk3M19HVEEwMl9XTTg3NTMKLQl0cmlzdGF0ZSAiQXVkaW8gc3VwcG9ydCBmb3IgdGhlIE9wZW5tb2tvIE5lbyBGcmVlUnVubmVyIChHVEEwMikiCi0JZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MgJiYgTUFDSF9ORU8xOTczX0dUQTAyCi0Jc2VsZWN0IFNORF9TM0MyNFhYX1NPQ19JMlMKLQlzZWxlY3QgU05EX1NPQ19XTTg3NTMKLQloZWxwCi0JICBUaGlzIGRyaXZlciBwcm92aWRlcyBhdWRpbyBzdXBwb3J0IGZvciB0aGUgT3Blbm1va28gTmVvIEZyZWVSdW5uZXIKLQkgIHNtYXJ0cGhvbmUuCi0JICAKLWNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfSklWRV9XTTg3NTAKLQl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBKaXZlIgotCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfSklWRQotCXNlbGVjdCBTTkRfU09DX1dNODc1MAotCXNlbGVjdCBTTkRfUzNDMjQxMl9TT0NfSTJTCi0JaGVscAotCSAgU2F0IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgSml2ZS4KLQotY29uZmlnIFNORF9TM0M2NFhYX1NPQ19XTTg1ODAKLQl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBXTTg1ODAgb24gU01ESzY0WFgiCi0JZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MgJiYgTUFDSF9TTURLNjQxMAotCXNlbGVjdCBTTkRfU09DX1dNODU4MAotCXNlbGVjdCBTTkRfUzNDNjRYWF9TT0NfSTJTX1Y0Ci0JaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgU01ESzY0MTAuCi0KLWNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfU01ESzI0NDNfV005NzEwCi0JdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIFNNREsyNDQzIC0gV005NzEwIgotCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfU01ESzI0NDMKLQlzZWxlY3QgUzNDMjQxMF9ETUEKLQlzZWxlY3QgQUM5N19CVVMKLQlzZWxlY3QgU05EX1NPQ19BQzk3X0NPREVDCi0Jc2VsZWN0IFNORF9TM0NfU09DX0FDOTcKLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHNtZGsyNDQzCi0JICB3aXRoIHRoZSBXTTk3MTAuCi0KLWNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfTE4yNDQwU0JDX0FMQzY1MAotCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBzdXBwb3J0IGZvciBMTjI0NDBTQkMgLSBBTEM2NTAiCi0JZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MgJiYgQVJDSF9TM0MyNDEwCi0Jc2VsZWN0IFMzQzI0MTBfRE1BCi0Jc2VsZWN0IEFDOTdfQlVTCi0Jc2VsZWN0IFNORF9TT0NfQUM5N19DT0RFQwotCXNlbGVjdCBTTkRfUzNDX1NPQ19BQzk3Ci0JaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBsbjI0NDBzYmMKLQkgIHdpdGggdGhlIEFMQzY1MC4KLQotY29uZmlnIFNORF9TM0MyNFhYX1NPQ19TM0MyNFhYX1VEQTEzNFgKLQl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IFVEQTEzNFggd2lyZWQgdG8gYSBTM0MyNFhYIgotICAgICAgIAlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQyAmJiBBUkNIX1MzQzI0MTAKLSAgICAgICAJc2VsZWN0IFNORF9TM0MyNFhYX1NPQ19JMlMKLQlzZWxlY3QgU05EX1NPQ19MMwotICAgICAgIAlzZWxlY3QgU05EX1NPQ19VREExMzRYCi0KLWNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfU0lNVEVDCi0JdHJpc3RhdGUKLQloZWxwCi0JICBJbnRlcm5hbCBub2RlIGZvciBjb21tb24gUzNDMjRYWC9TaW10ZWMgc3VwcG9yCi0KLWNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfU0lNVEVDX1RMVjMyMEFJQzIzCi0JdHJpc3RhdGUgIlNvQyBJMlMgQXVkaW8gc3VwcG9ydCBmb3IgVExWMzIwQUlDMjMgb24gU2ltdGVjIGJvYXJkcyIKLQlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQyAmJiBBUkNIX1MzQzI0MTAKLQlzZWxlY3QgU05EX1MzQzI0WFhfU09DX0kyUwotCXNlbGVjdCBTTkRfU09DX1RMVjMyMEFJQzIzCi0Jc2VsZWN0IFNORF9TM0MyNFhYX1NPQ19TSU1URUMKLQotY29uZmlnIFNORF9TM0MyNFhYX1NPQ19TSU1URUNfSEVSTUVTCi0JdHJpc3RhdGUgIlNvQyBJMlMgQXVkaW8gc3VwcG9ydCBmb3IgU2ltdGVjIEhlcm1lcyBib2FyZCIKLQlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQyAmJiBBUkNIX1MzQzI0MTAKLQlzZWxlY3QgU05EX1MzQzI0WFhfU09DX0kyUwotCXNlbGVjdCBTTkRfU09DX1RMVjMyMEFJQzNYCi0Jc2VsZWN0IFNORF9TM0MyNFhYX1NPQ19TSU1URUMKLQotY29uZmlnIFNORF9TM0MyNFhYX1NPQ19SWDE5NTBfVURBMTM4MAotCXRyaXN0YXRlICJBdWRpbyBzdXBwb3J0IGZvciB0aGUgSFAgaVBBUSBSWDE5NTAiCi0JZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MgJiYgTUFDSF9SWDE5NTAKLQlzZWxlY3QgU05EX1MzQzI0WFhfU09DX0kyUwotCXNlbGVjdCBTTkRfU09DX1VEQTEzODAKLQloZWxwCi0JICBUaGlzIGRyaXZlciBwcm92aWRlcyBhdWRpbyBzdXBwb3J0IGZvciBIUCBpUEFRIFJYMTk1MCBQREEuCi0KLWNvbmZpZyBTTkRfU09DX1NNREtfV005NzEzCi0JdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIFNNREsgd2l0aCBXTTk3MTMiCi0JZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MgJiYgKE1BQ0hfU01ESzY0MTAgfHwgTUFDSF9TTURLQzEwMCB8fCBNQUNIX1NNREtWMjEwIHx8IE1BQ0hfU01ES0MxMTApCi0Jc2VsZWN0IFNORF9TT0NfV005NzEzCi0Jc2VsZWN0IFNORF9TM0NfU09DX0FDOTcKLQloZWxwCi0JICBTYXQgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZSBTTURLLgotCi1jb25maWcgU05EX1MzQzY0WFhfU09DX1NNQVJUUQotCXRyaXN0YXRlICJTb0MgSTJTIEF1ZGlvIHN1cHBvcnQgZm9yIFNtYXJ0USBib2FyZCIKLQlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQyAmJiBNQUNIX1NNQVJUUQotCXNlbGVjdCBTTkRfUzNDNjRYWF9TT0NfSTJTCi0Jc2VsZWN0IFNORF9TT0NfV004NzUwCi0KLWNvbmZpZyBTTkRfUzVQQzExMF9TT0NfQVFVSUxBX1dNODk5NAotCXRyaXN0YXRlICJTb0MgSTJTIEF1ZGlvIHN1cHBvcnQgZm9yIEFRVUlMQSAtIFdNODk5NCIKLQlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQyAmJiBNQUNIX0FRVUlMQQotCXNlbGVjdCBTTkRfUzNDNjRYWF9TT0NfSTJTX1Y0Ci0Jc2VsZWN0IFNORF9TT0NfV004OTk0Ci0JaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBhcXVpbGEKLQkgIHdpdGggdGhlIFdNODk5NC4KLQotY29uZmlnIFNORF9TNVBWMjEwX1NPQ19HT05JX1dNODk5NAotCXRyaXN0YXRlICJTb0MgSTJTIEF1ZGlvIHN1cHBvcnQgZm9yIEdPTkkgLSBXTTg5OTQiCi0JZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MgJiYgTUFDSF9HT05JCi0Jc2VsZWN0IFNORF9TM0M2NFhYX1NPQ19JMlNfVjQKLQlzZWxlY3QgU05EX1NPQ19XTTg5OTQKLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIGdvbmkKLQkgIHdpdGggdGhlIFdNODk5NC4KLQotY29uZmlnIFNORF9TT0NfU01ES19TUERJRgotCXRyaXN0YXRlICJTb0MgUy9QRElGIEF1ZGlvIHN1cHBvcnQgZm9yIFNNREsiCi0JZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MgJiYgKE1BQ0hfU01ES0MxMDAgfHwgTUFDSF9TTURLQzExMCB8fCBNQUNIX1NNREtWMjEwKQotCXNlbGVjdCBTTkRfUzVQX1NPQ19TUERJRgotCWhlbHAKLQkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgUy9QRElGIGF1ZGlvIG9uIHRoZSBTTURLLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvTWFrZWZpbGUgYi9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU4ZjQxZC4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLSMgUzNjMjRYWCBQbGF0Zm9ybSBTdXBwb3J0Ci1zbmQtc29jLXMzYzI0eHgtb2JqcyA6PSBzM2MtZG1hLm8KLXNuZC1zb2MtczNjMjR4eC1pMnMtb2JqcyA6PSBzM2MyNHh4LWkycy5vCi1zbmQtc29jLXMzYzI0MTItaTJzLW9ianMgOj0gczNjMjQxMi1pMnMubwotc25kLXNvYy1zM2M2NHh4LWkycy1vYmpzIDo9IHMzYzY0eHgtaTJzLm8KLXNuZC1zb2MtczNjLWFjOTctb2JqcyA6PSBzM2MtYWM5Ny5vCi1zbmQtc29jLXMzYzY0eHgtaTJzLXY0LW9ianMgOj0gczNjNjR4eC1pMnMtdjQubwotc25kLXNvYy1zM2MtaTJzLXYyLW9ianMgOj0gczNjLWkycy12Mi5vCi1zbmQtc29jLXMzYy1wY20tb2JqcyA6PSBzM2MtcGNtLm8KLXNuZC1zb2Mtc2Ftc3VuZy1zcGRpZi1vYmpzIDo9IHNwZGlmLm8KLQotb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQykgKz0gc25kLXNvYy1zM2MyNHh4Lm8KLW9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfSTJTKSArPSBzbmQtc29jLXMzYzI0eHgtaTJzLm8KLW9iai0kKENPTkZJR19TTkRfUzNDX1NPQ19BQzk3KSArPSBzbmQtc29jLXMzYy1hYzk3Lm8KLW9iai0kKENPTkZJR19TTkRfUzNDMjQxMl9TT0NfSTJTKSArPSBzbmQtc29jLXMzYzI0MTItaTJzLm8KLW9iai0kKENPTkZJR19TTkRfUzNDNjRYWF9TT0NfSTJTKSArPSBzbmQtc29jLXMzYzY0eHgtaTJzLm8KLW9iai0kKENPTkZJR19TTkRfUzNDNjRYWF9TT0NfSTJTX1Y0KSArPSBzbmQtc29jLXMzYzY0eHgtaTJzLXY0Lm8KLW9iai0kKENPTkZJR19TTkRfUzNDX0kyU1YyX1NPQykgKz0gc25kLXNvYy1zM2MtaTJzLXYyLm8KLW9iai0kKENPTkZJR19TTkRfUzNDX1NPQ19QQ00pICs9IHNuZC1zb2MtczNjLXBjbS5vCi1vYmotJChDT05GSUdfU05EX1M1UF9TT0NfU1BESUYpICs9IHNuZC1zb2Mtc2Ftc3VuZy1zcGRpZi5vCi0KLSMgUzNDMjRYWCBNYWNoaW5lIFN1cHBvcnQKLXNuZC1zb2Mtaml2ZS13bTg3NTAtb2JqcyA6PSBqaXZlX3dtODc1MC5vCi1zbmQtc29jLW5lbzE5NzMtd204NzUzLW9ianMgOj0gbmVvMTk3M193bTg3NTMubwotc25kLXNvYy1uZW8xOTczLWd0YTAyLXdtODc1My1vYmpzIDo9IG5lbzE5NzNfZ3RhMDJfd204NzUzLm8KLXNuZC1zb2Mtc21kazI0NDMtd205NzEwLW9ianMgOj0gc21kazI0NDNfd205NzEwLm8KLXNuZC1zb2MtbG4yNDQwc2JjLWFsYzY1MC1vYmpzIDo9IGxuMjQ0MHNiY19hbGM2NTAubwotc25kLXNvYy1zM2MyNHh4LXVkYTEzNHgtb2JqcyA6PSBzM2MyNHh4X3VkYTEzNHgubwotc25kLXNvYy1zM2MyNHh4LXNpbXRlYy1vYmpzIDo9IHMzYzI0eHhfc2ltdGVjLm8KLXNuZC1zb2MtczNjMjR4eC1zaW10ZWMtaGVybWVzLW9ianMgOj0gczNjMjR4eF9zaW10ZWNfaGVybWVzLm8KLXNuZC1zb2MtczNjMjR4eC1zaW10ZWMtdGx2MzIwYWljMjMtb2JqcyA6PSBzM2MyNHh4X3NpbXRlY190bHYzMjBhaWMyMy5vCi1zbmQtc29jLXJ4MTk1MC11ZGExMzgwLW9ianMgOj0gcngxOTUwX3VkYTEzODAubwotc25kLXNvYy1zbWRrNjR4eC13bTg1ODAtb2JqcyA6PSBzbWRrNjR4eF93bTg1ODAubwotc25kLXNvYy1zbWRrLXdtOTcxMy1vYmpzIDo9IHNtZGtfd205NzEzLm8KLXNuZC1zb2MtczNjNjR4eC1zbWFydHEtd204OTg3LW9ianMgOj0gc21hcnRxX3dtODk4Ny5vCi1zbmQtc29jLWFxdWlsYS13bTg5OTQtb2JqcyA6PSBhcXVpbGFfd204OTk0Lm8KLXNuZC1zb2MtZ29uaS13bTg5OTQtb2JqcyA6PSBnb25pX3dtODk5NC5vCi1zbmQtc29jLXNtZGstc3BkaWYtb2JqcyA6PSBzbWRrX3NwZGlmLm8KLQotb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19KSVZFX1dNODc1MCkgKz0gc25kLXNvYy1qaXZlLXdtODc1MC5vCi1vYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX05FTzE5NzNfV004NzUzKSArPSBzbmQtc29jLW5lbzE5NzMtd204NzUzLm8KLW9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfTkVPMTk3M19HVEEwMl9XTTg3NTMpICs9IHNuZC1zb2MtbmVvMTk3My1ndGEwMi13bTg3NTMubwotb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19TTURLMjQ0M19XTTk3MTApICs9IHNuZC1zb2Mtc21kazI0NDMtd205NzEwLm8KLW9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfTE4yNDQwU0JDX0FMQzY1MCkgKz0gc25kLXNvYy1sbjI0NDBzYmMtYWxjNjUwLm8KLW9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfUzNDMjRYWF9VREExMzRYKSArPSBzbmQtc29jLXMzYzI0eHgtdWRhMTM0eC5vCi1vYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX1NJTVRFQykgKz0gc25kLXNvYy1zM2MyNHh4LXNpbXRlYy5vCi1vYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX1NJTVRFQ19IRVJNRVMpICs9IHNuZC1zb2MtczNjMjR4eC1zaW10ZWMtaGVybWVzLm8KLW9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfU0lNVEVDX1RMVjMyMEFJQzIzKSArPSBzbmQtc29jLXMzYzI0eHgtc2ltdGVjLXRsdjMyMGFpYzIzLm8KLW9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfUlgxOTUwX1VEQTEzODApICs9IHNuZC1zb2MtcngxOTUwLXVkYTEzODAubwotb2JqLSQoQ09ORklHX1NORF9TM0M2NFhYX1NPQ19XTTg1ODApICs9IHNuZC1zb2Mtc21kazY0eHgtd204NTgwLm8KLW9iai0kKENPTkZJR19TTkRfU09DX1NNREtfV005NzEzKSArPSBzbmQtc29jLXNtZGstd205NzEzLm8KLW9iai0kKENPTkZJR19TTkRfUzNDNjRYWF9TT0NfU01BUlRRKSArPSBzbmQtc29jLXMzYzY0eHgtc21hcnRxLXdtODk4Ny5vCi1vYmotJChDT05GSUdfU05EX1M1UEMxMTBfU09DX0FRVUlMQV9XTTg5OTQpICs9IHNuZC1zb2MtYXF1aWxhLXdtODk5NC5vCi1vYmotJChDT05GSUdfU05EX1M1UFYyMTBfU09DX0dPTklfV004OTk0KSArPSBzbmQtc29jLWdvbmktd204OTk0Lm8KLW9iai0kKENPTkZJR19TTkRfU09DX1NNREtfU1BESUYpICs9IHNuZC1zb2Mtc21kay1zcGRpZi5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9hcXVpbGFfd204OTk0LmMgYi9zb3VuZC9zb2MvczNjMjR4eC9hcXVpbGFfd204OTk0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNWQxOTcuLjAwMDAwMDAKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvYXF1aWxhX3dtODk5NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk1ICswLDAgQEAKLS8qCi0gKiBhcXVpbGFfd204OTk0LmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQKLSAqIEF1dGhvcjogQ2hhbndvbyBDaG9pIDxjdzAwLmNob2lAc2Ftc3VuZy5jb20+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KLSNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KLQotI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvcmVnaXN0ZXJzLmg+Ci0jaW5jbHVkZSAiLi4vY29kZWNzL3dtODk5NC5oIgotI2luY2x1ZGUgInMzYy1kbWEuaCIKLSNpbmNsdWRlICJzM2M2NHh4LWkycy5oIgotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBhcXVpbGE7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXF1aWxhX3NuZF9kZXZpY2U7Ci0KLS8qIDMuNSBwaWUgamFjayAqLwotc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2sgamFjazsKLQotLyogMy41IHBpZSBqYWNrIGRldGVjdGlvbiBEQVBNIHBpbnMgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiBqYWNrX3BpbnNbXSA9IHsKLQl7Ci0JCS5waW4gPSAiSGVhZHNldCBNaWMiLAotCQkubWFzayA9IFNORF9KQUNLX01JQ1JPUEhPTkUsCi0JfSwgewotCQkucGluID0gIkhlYWRzZXQgU3RlcmVvcGhvbmUiLAotCQkubWFzayA9IFNORF9KQUNLX0hFQURQSE9ORSB8IFNORF9KQUNLX01FQ0hBTklDQUwgfAotCQkJU05EX0pBQ0tfQVZPVVQsCi0JfSwKLX07Ci0KLS8qIDMuNSBwaWUgamFjayBkZXRlY3Rpb24gZ3Bpb3MgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gamFja19ncGlvc1tdID0gewotCXsKLQkJLmdwaW8gPSBTNVBWMjEwX0dQSDAoNiksCi0JCS5uYW1lID0gIkRFVF8zLjUiLAotCQkucmVwb3J0ID0gU05EX0pBQ0tfSEVBRFNFVCB8IFNORF9KQUNLX01FQ0hBTklDQUwgfAotCQkJU05EX0pBQ0tfQVZPVVQsCi0JCS5kZWJvdW5jZV90aW1lID0gMjAwLAotCX0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgYXF1aWxhX2RhcG1fd2lkZ2V0c1tdID0gewotCVNORF9TT0NfREFQTV9TUEsoIkV4dCBTcGsiLCBOVUxMKSwKLQlTTkRfU09DX0RBUE1fU1BLKCJFeHQgUmN2IiwgTlVMTCksCi0JU05EX1NPQ19EQVBNX0hQKCJIZWFkc2V0IFN0ZXJlb3Bob25lIiwgTlVMTCksCi0JU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCBNaWMiLCBOVUxMKSwKLQlTTkRfU09DX0RBUE1fTUlDKCJNYWluIE1pYyIsIE5VTEwpLAotCVNORF9TT0NfREFQTV9NSUMoIjJuZCBNaWMiLCBOVUxMKSwKLQlTTkRfU09DX0RBUE1fTElORSgiUmFkaW8gSW4iLCBOVUxMKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGFxdWlsYV9kYXBtX3JvdXRlc1tdID0gewotCXsiRXh0IFNwayIsIE5VTEwsICJTUEtPVVRMUCJ9LAotCXsiRXh0IFNwayIsIE5VTEwsICJTUEtPVVRMTiJ9LAotCi0JeyJFeHQgUmN2IiwgTlVMTCwgIkhQT1VUMk4ifSwKLQl7IkV4dCBSY3YiLCBOVUxMLCAiSFBPVVQyUCJ9LAotCi0JeyJIZWFkc2V0IFN0ZXJlb3Bob25lIiwgTlVMTCwgIkhQT1VUMUwifSwKLQl7IkhlYWRzZXQgU3RlcmVvcGhvbmUiLCBOVUxMLCAiSFBPVVQxUiJ9LAotCi0JeyJJTjFSTiIsIE5VTEwsICJIZWFkc2V0IE1pYyJ9LAotCXsiSU4xUlAiLCBOVUxMLCAiSGVhZHNldCBNaWMifSwKLQotCXsiSU4xUk4iLCBOVUxMLCAiMm5kIE1pYyJ9LAotCXsiSU4xUlAiLCBOVUxMLCAiMm5kIE1pYyJ9LAotCi0JeyJJTjFMTiIsIE5VTEwsICJNYWluIE1pYyJ9LAotCXsiSU4xTFAiLCBOVUxMLCAiTWFpbiBNaWMifSwKLQotCXsiSU4yTE4iLCBOVUxMLCAiUmFkaW8gSW4ifSwKLQl7IklOMlJOIiwgTlVMTCwgIlJhZGlvIEluIn0sCi19OwotCi1zdGF0aWMgaW50IGFxdWlsYV93bTg5OTRfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7Ci0JaW50IHJldDsKLQotCS8qIGFkZCBhcXVpbGEgc3BlY2lmaWMgd2lkZ2V0cyAqLwotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGFxdWlsYV9kYXBtX3dpZGdldHMsCi0JCQlBUlJBWV9TSVpFKGFxdWlsYV9kYXBtX3dpZGdldHMpKTsKLQotCS8qIHNldCB1cCBhcXVpbGEgc3BlY2lmaWMgYXVkaW8gcm91dGVzICovCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGFxdWlsYV9kYXBtX3JvdXRlcywKLQkJCUFSUkFZX1NJWkUoYXF1aWxhX2RhcG1fcm91dGVzKSk7Ci0KLQkvKiBzZXQgZW5kcG9pbnRzIHRvIG5vdCBjb25uZWN0ZWQgKi8KLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSU4yTFA6VlhSTiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJJTjJSUDpWWFJQIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVPVVQxTiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FT1VUMVAiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORU9VVDJOIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVPVVQyUCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJTUEtPVVRSTiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJTUEtPVVRSUCIpOwotCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOwotCi0JLyogSGVhZHNldCBqYWNrIGRldGVjdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfamFja19uZXcoJmFxdWlsYSwgIkhlYWRzZXQgSmFjayIsCi0JCQlTTkRfSkFDS19IRUFEU0VUIHwgU05EX0pBQ0tfTUVDSEFOSUNBTCB8IFNORF9KQUNLX0FWT1VULAotCQkJJmphY2spOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBzbmRfc29jX2phY2tfYWRkX3BpbnMoJmphY2ssIEFSUkFZX1NJWkUoamFja19waW5zKSwgamFja19waW5zKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gc25kX3NvY19qYWNrX2FkZF9ncGlvcygmamFjaywgQVJSQVlfU0laRShqYWNrX2dwaW9zKSwgamFja19ncGlvcyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFxdWlsYV9oaWZpX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwotCXVuc2lnbmVkIGludCBwbGxfb3V0ID0gMjQwMDAwMDA7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBzZXQgdGhlIGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKLQkJCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBzZXQgdGhlIGNwdSBzeXN0ZW0gY2xvY2sgKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNwdV9kYWksIFMzQzY0WFhfQ0xLU1JDX1BDTEssCi0JCQkwLCBTTkRfU09DX0NMT0NLX0lOKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAotCQkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIHNldCB0aGUgY29kZWMgRkxMICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3BsbChjb2RlY19kYWksIFdNODk5NF9GTEwxLCAwLCBwbGxfb3V0LAotCQkJcGFyYW1zX3JhdGUocGFyYW1zKSAqIDI1Nik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBzZXQgdGhlIGNvZGVjIHN5c3RlbSBjbG9jayAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg5OTRfU1lTQ0xLX0ZMTDEsCi0JCQlwYXJhbXNfcmF0ZShwYXJhbXMpICogMjU2LCBTTkRfU09DX0NMT0NLX0lOKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGFxdWlsYV9oaWZpX29wcyA9IHsKLQkuaHdfcGFyYW1zID0gYXF1aWxhX2hpZmlfaHdfcGFyYW1zLAotfTsKLQotc3RhdGljIGludCBhcXVpbGFfdm9pY2VfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKLQl1bnNpZ25lZCBpbnQgcGxsX291dCA9IDI0MDAwMDAwOwotCWludCByZXQgPSAwOwotCi0JaWYgKHBhcmFtc19yYXRlKHBhcmFtcykgIT0gODAwMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfTEVGVF9KIHwKLQkJCVNORF9TT0NfREFJRk1UX0lCX0lGIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBzZXQgdGhlIGNvZGVjIEZMTCAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9wbGwoY29kZWNfZGFpLCBXTTg5OTRfRkxMMiwgMCwgcGxsX291dCwKLQkJCXBhcmFtc19yYXRlKHBhcmFtcykgKiAyNTYpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogc2V0IHRoZSBjb2RlYyBzeXN0ZW0gY2xvY2sgKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004OTk0X1NZU0NMS19GTEwyLAotCQkJcGFyYW1zX3JhdGUocGFyYW1zKSAqIDI1NiwgU05EX1NPQ19DTE9DS19JTik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgdm9pY2VfZGFpID0gewotCS5uYW1lID0gImFxdWlsYS12b2ljZS1kYWkiLAotCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwLAotCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLmNhcHR1cmUgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMCwKLQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBhcXVpbGFfdm9pY2Vfb3BzID0gewotCS5od19wYXJhbXMgPSBhcXVpbGFfdm9pY2VfaHdfcGFyYW1zLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGFxdWlsYV9kYWlbXSA9IHsKLXsKLQkubmFtZSA9ICJXTTg5OTQiLAotCS5zdHJlYW1fbmFtZSA9ICJXTTg5OTQgSGlGaSIsCi0JLmNwdV9kYWlfbmFtZSA9ICJzM2M2NHh4LWkycy12NCIsCi0JLmNvZGVjX2RhaV9uYW1lID0gIndtODk5NC1oaWZpIiwKLQkucGxhdGZvcm1fbmFtZSA9ICJzM2MyNHh4LXBjbS1hdWRpbyIsCi0JLmNvZGVjX25hbWUgPSAid204OTk0LWNvZGVjLjAtMHgxYSIsCi0JLmluaXQgPSBhcXVpbGFfd204OTk0X2luaXQsCi0JLm9wcyA9ICZhcXVpbGFfaGlmaV9vcHMsCi19LCB7Ci0JLm5hbWUgPSAiV004OTk0IFZvaWNlIiwKLQkuc3RyZWFtX25hbWUgPSAiVm9pY2UiLAotCS5jcHVfZGFpX25hbWUgPSAiYXF1aWxhLXZvaWNlLWRhaSIsCi0JLmNvZGVjX2RhaV9uYW1lID0gIndtODk5NC12b2ljZSIsCi0JLnBsYXRmb3JtX25hbWUgPSAiczNjMjR4eC1wY20tYXVkaW8iLAotCS5jb2RlY19uYW1lID0gIndtODk5NC1jb2RlYy4wLTB4MWEiLAotCS5vcHMgPSAmYXF1aWxhX3ZvaWNlX29wcywKLX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBhcXVpbGEgPSB7Ci0JLm5hbWUgPSAiYXF1aWxhIiwKLQkuZGFpX2xpbmsgPSBhcXVpbGFfZGFpLAotCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKGFxdWlsYV9kYWkpLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgYXF1aWxhX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JaWYgKCFtYWNoaW5lX2lzX2FxdWlsYSgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWFxdWlsYV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7Ci0JaWYgKCFhcXVpbGFfc25kX2RldmljZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiByZWdpc3RlciB2b2ljZSBEQUkgaGVyZSAqLwotCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZhcXVpbGFfc25kX2RldmljZS0+ZGV2LCAmdm9pY2VfZGFpKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEoYXF1aWxhX3NuZF9kZXZpY2UsICZhcXVpbGEpOwotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoYXF1aWxhX3NuZF9kZXZpY2UpOwotCi0JaWYgKHJldCkKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChhcXVpbGFfc25kX2RldmljZSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYXF1aWxhX2V4aXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhcXVpbGFfc25kX2RldmljZSk7Ci19Ci0KLW1vZHVsZV9pbml0KGFxdWlsYV9pbml0KTsKLW1vZHVsZV9leGl0KGFxdWlsYV9leGl0KTsKLQotLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIFdNODk5NCBBcXVpbGEoUzVQQzExMCkiKTsKLU1PRFVMRV9BVVRIT1IoIkNoYW53b28gQ2hvaSA8Y3cwMC5jaG9pQHNhbXN1bmcuY29tPiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMtdjQuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLXY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NjI4NDcuLjAwMDAwMDAKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMtdjQuYworKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0vKiBzb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy12NC5jCi0gKgotICogQUxTQSBTb0MgQXVkaW8gTGF5ZXIgLSBTM0M2NFhYIEkyU3Y0IGRyaXZlcgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uIEx0ZAotICogCUF1dGhvcjogSmFzd2luZGVyIFNpbmdoIDxqYXNzaS5icmFyQHNhbXN1bmcuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgotCi0jaW5jbHVkZSA8cGxhdC9hdWRpby5oPgotCi0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxtYWNoL2RtYS5oPgotCi0jaW5jbHVkZSAiczNjLWRtYS5oIgotI2luY2x1ZGUgInJlZ3MtaTJzLXYyLmgiCi0jaW5jbHVkZSAiczNjNjR4eC1pMnMuaCIKLQotc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjNjR4eF9kbWFfY2xpZW50X291dCA9IHsKLQkubmFtZQkJPSAiSTJTdjQgUENNIFN0ZXJlbyBvdXQiCi19OwotCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2M2NHh4X2RtYV9jbGllbnRfaW4gPSB7Ci0JLm5hbWUJCT0gIkkyU3Y0IFBDTSBTdGVyZW8gaW4iCi19OwotCi1zdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzYzY0eHhfaTJzdjRfcGNtX3N0ZXJlb19vdXQ7Ci1zdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzYzY0eHhfaTJzdjRfcGNtX3N0ZXJlb19pbjsKLXN0YXRpYyBzdHJ1Y3QgczNjX2kyc3YyX2luZm8gczNjNjR4eF9pMnN2NDsKLQotc3RhdGljIGludCBzM2M2NHh4X2kyc3Y0X3Byb2JlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gJnMzYzY0eHhfaTJzdjQ7Ci0JaW50IHJldCA9IDA7Ci0KLQlzbmRfc29jX2RhaV9zZXRfZHJ2ZGF0YShkYWksIGkycyk7Ci0KLQlyZXQgPSBzM2NfaTJzdjJfcHJvYmUoZGFpLCBpMnMsIGkycy0+YmFzZSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHMzY19pMnN2NF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJCSBzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCi17Ci0Jc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShjcHVfZGFpKTsKLQlzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgKmRtYV9kYXRhOwotCXUzMiBpaXNtb2Q7Ci0KLQlkZXZfZGJnKGNwdV9kYWktPmRldiwgIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQlkbWFfZGF0YSA9IGkycy0+ZG1hX3BsYXliYWNrOwotCWVsc2UKLQkJZG1hX2RhdGEgPSBpMnMtPmRtYV9jYXB0dXJlOwotCi0Jc25kX3NvY19kYWlfc2V0X2RtYV9kYXRhKGNwdV9kYWksIHN1YnN0cmVhbSwgZG1hX2RhdGEpOwotCi0JaWlzbW9kID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCWRldl9kYmcoY3B1X2RhaS0+ZGV2LCAiJXM6IHI6IElJU01PRDogJXhcbiIsIF9fZnVuY19fLCBpaXNtb2QpOwotCi0JaWlzbW9kICY9IH5TM0M2NFhYX0lJU01PRF9CTENfTUFTSzsKLQlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewotCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TODoKLQkJaWlzbW9kIHw9IFMzQzY0WFhfSUlTTU9EX0JMQ184QklUOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgotCQlpaXNtb2QgfD0gUzNDNjRYWF9JSVNNT0RfQkxDXzI0QklUOwotCQlicmVhazsKLQl9Ci0KLQl3cml0ZWwoaWlzbW9kLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JZGV2X2RiZyhjcHVfZGFpLT5kZXYsICIlczogdzogSUlTTU9EOiAleFxuIiwgX19mdW5jX18sIGlpc21vZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjNjR4eF9pMnN2NF9kYWlfb3BzID0gewotCS5od19wYXJhbXMJPSBzM2NfaTJzdjRfaHdfcGFyYW1zLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgczNjNjR4eF9pMnNfdjRfZGFpID0gewotCS5zeW1tZXRyaWNfcmF0ZXMgPSAxLAotCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDIsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBTM0M2NFhYX0kyU19SQVRFUywKLQkJLmZvcm1hdHMgPSBTM0M2NFhYX0kyU19GTVRTLAotCX0sCi0JLmNhcHR1cmUgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAyLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gUzNDNjRYWF9JMlNfUkFURVMsCi0JCS5mb3JtYXRzID0gUzNDNjRYWF9JMlNfRk1UUywKLQl9LAotCS5wcm9iZSA9IHMzYzY0eHhfaTJzdjRfcHJvYmUsCi0JLm9wcyA9ICZzM2M2NHh4X2kyc3Y0X2RhaV9vcHMsCi19OwotCi1zdGF0aWMgX19kZXZpbml0IGludCBzM2M2NHh4X2kyc3Y0X2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgKmkyc19wZGF0YTsKLQlzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkyczsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlpbnQgcmV0OwotCi0JaTJzID0gJnMzYzY0eHhfaTJzdjQ7Ci0KLQlpMnMtPmZlYXR1cmUgfD0gUzNDX0ZFQVRVUkVfQ0RDTEtDT047Ci0KLQlpMnMtPmRtYV9jYXB0dXJlID0gJnMzYzY0eHhfaTJzdjRfcGNtX3N0ZXJlb19pbjsKLQlpMnMtPmRtYV9wbGF5YmFjayA9ICZzM2M2NHh4X2kyc3Y0X3BjbV9zdGVyZW9fb3V0OwotCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKLQlpZiAoIXJlcykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IEkyUy1UWCBkbWEgcmVzb3VyY2VcbiIpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQlpMnMtPmRtYV9wbGF5YmFjay0+Y2hhbm5lbCA9IHJlcy0+c3RhcnQ7Ci0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOwotCWlmICghcmVzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgSTJTLVJYIGRtYSByZXNvdXJjZVxuIik7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCWkycy0+ZG1hX2NhcHR1cmUtPmNoYW5uZWwgPSByZXMtPnN0YXJ0OwotCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAoIXJlcykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IEkyUyBTRlIgYWRkcmVzc1xuIik7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAotCQkJCSJzM2M2NHh4LWkycy12NCIpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byByZXF1ZXN0IFNGUiByZWdpb25cbiIpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQlpMnMtPmRtYV9jYXB0dXJlLT5kbWFfYWRkciA9IHJlcy0+c3RhcnQgKyBTM0MyNDEyX0lJU1JYRDsKLQlpMnMtPmRtYV9wbGF5YmFjay0+ZG1hX2FkZHIgPSByZXMtPnN0YXJ0ICsgUzNDMjQxMl9JSVNUWEQ7Ci0KLQlpMnMtPmRtYV9jYXB0dXJlLT5jbGllbnQgPSAmczNjNjR4eF9kbWFfY2xpZW50X2luOwotCWkycy0+ZG1hX2NhcHR1cmUtPmRtYV9zaXplID0gNDsKLQlpMnMtPmRtYV9wbGF5YmFjay0+Y2xpZW50ID0gJnMzYzY0eHhfZG1hX2NsaWVudF9vdXQ7Ci0JaTJzLT5kbWFfcGxheWJhY2stPmRtYV9zaXplID0gNDsKLQotCWkycy0+YmFzZSA9IHJlcy0+c3RhcnQ7Ci0KLQlpMnNfcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlpZiAoaTJzX3BkYXRhICYmIGkyc19wZGF0YS0+Y2ZnX2dwaW8gJiYgaTJzX3BkYXRhLT5jZmdfZ3BpbyhwZGV2KSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gY29uZmlndXJlIGdwaW9cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpMnMtPmlpc19jY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiYXVkaW8tYnVzIik7Ci0JaWYgKElTX0VSUihpMnMtPmlpc19jY2xrKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGF1ZGlvLWJ1c1xuIik7Ci0JCXJldCA9IFBUUl9FUlIoaTJzLT5paXNfY2Nsayk7Ci0JCWdvdG8gZXJyOwotCX0KLQotCWNsa19lbmFibGUoaTJzLT5paXNfY2Nsayk7Ci0KLQlyZXQgPSBzM2NfaTJzdjJfcmVnaXN0ZXJfZGFpKCZwZGV2LT5kZXYsIHBkZXYtPmlkLCAmczNjNjR4eF9pMnNfdjRfZGFpKTsKLQlpZiAocmV0ICE9IDApCi0JCWdvdG8gZXJyX2kyc3YyOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9pMnN2MjoKLQljbGtfcHV0KGkycy0+aWlzX2NjbGspOwotZXJyOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBfX2RldmV4aXQgaW50IHMzYzY0eHhfaTJzdjRfZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gJnMzYzY0eHhfaTJzdjQ7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZwZGV2LT5kZXYpOwotCWNsa19wdXQoaTJzLT5paXNfY2Nsayk7Ci0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWlmIChyZXMpCi0JCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwotCWVsc2UKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgSTJTIFNGUiBhZGRyZXNzXG4iKTsKLQkJCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzY0eHhfaTJzdjRfZHJpdmVyID0gewotCS5wcm9iZSAgPSBzM2M2NHh4X2kyc3Y0X2Rldl9wcm9iZSwKLQkucmVtb3ZlID0gczNjNjR4eF9pMnN2NF9kZXZfcmVtb3ZlLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInMzYzY0eHgtaWlzLXY0IiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHMzYzY0eHhfaTJzdjRfaW5pdCh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzY0eHhfaTJzdjRfZHJpdmVyKTsKLX0KLW1vZHVsZV9pbml0KHMzYzY0eHhfaTJzdjRfaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzM2M2NHh4X2kyc3Y0X2V4aXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjNjR4eF9pMnN2NF9kcml2ZXIpOwotfQotbW9kdWxlX2V4aXQoczNjNjR4eF9pMnN2NF9leGl0KTsKLQotLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCJKYXN3aW5kZXIgU2luZ2gsIDxqYXNzaS5icmFyQHNhbXN1bmcuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTM0M2NFhYIEkyU3Y0IFNvQyBJbnRlcmZhY2UiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BTElBUygicGxhdGZvcm06czNjNjR4eC1paXMtdjQiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTdhY2I2Li4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotLyogc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYwotICoKLSAqIEFMU0EgU29DIEF1ZGlvIExheWVyIC0gUzNDNjRYWCBJMlMgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8c291bmQvc29jLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvZG1hLmg+Ci0KLSNpbmNsdWRlICJzM2MtZG1hLmgiCi0jaW5jbHVkZSAicmVncy1pMnMtdjIuaCIKLSNpbmNsdWRlICJzM2M2NHh4LWkycy5oIgotCi0vKiBUaGUgdmFsdWUgc2hvdWxkIGJlIHNldCB0byBtYXhpbXVtIG9mIHRoZSB0b3RhbCBudW1iZXIKLSAqIG9mIEkyU3YzIGNvbnRyb2xsZXJzIHRoYXQgYW55IHN1cHBvcnRlZCBTb0MgaGFzLgotICovCi0jZGVmaW5lIE1BWF9JMlNWMwkyCi0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzY0eHhfZG1hX2NsaWVudF9vdXQgPSB7Ci0JLm5hbWUJCT0gIkkyUyBQQ00gU3RlcmVvIG91dCIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzY0eHhfZG1hX2NsaWVudF9pbiA9IHsKLQkubmFtZQkJPSAiSTJTIFBDTSBTdGVyZW8gaW4iCi19OwotCi1zdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzYzY0eHhfaTJzX3BjbV9zdGVyZW9fb3V0W01BWF9JMlNWM107Ci1zdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzYzY0eHhfaTJzX3BjbV9zdGVyZW9faW5bTUFYX0kyU1YzXTsKLXN0YXRpYyBzdHJ1Y3QgczNjX2kyc3YyX2luZm8gczNjNjR4eF9pMnNbTUFYX0kyU1YzXTsKLQotc3RydWN0IGNsayAqczNjNjR4eF9pMnNfZ2V0X2Nsb2NrKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKLQl1MzIgaWlzbW9kID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCi0JaWYgKGlpc21vZCAmIFMzQzI0MTJfSUlTTU9EX0lNU19TWVNNVVgpCi0JCXJldHVybiBpMnMtPmlpc19jY2xrOwotCWVsc2UKLQkJcmV0dXJuIGkycy0+aWlzX3BjbGs7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChzM2M2NHh4X2kyc19nZXRfY2xvY2spOwotCi1zdGF0aWMgaW50IHMzYzY0eHhfaTJzX3Byb2JlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzOwotCWludCByZXQ7Ci0KLQlpZiAoZGFpLT5pZCA+PSBNQVhfSTJTVjMpIHsKLQkJZGV2X2VycihkYWktPmRldiwgImlkICVkIG91dCBvZiByYW5nZVxuIiwgZGFpLT5pZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWkycyA9ICZzM2M2NHh4X2kyc1tkYWktPmlkXTsKLQlzbmRfc29jX2RhaV9zZXRfZHJ2ZGF0YShkYWksIGkycyk7Ci0KLQlpMnMtPmlpc19jY2xrID0gY2xrX2dldChkYWktPmRldiwgImF1ZGlvLWJ1cyIpOwotCWlmIChJU19FUlIoaTJzLT5paXNfY2NsaykpIHsKLQkJZGV2X2VycihkYWktPmRldiwgImZhaWxlZCB0byBnZXQgYXVkaW8tYnVzXG4iKTsKLQkJcmV0ID0gUFRSX0VSUihpMnMtPmlpc19jY2xrKTsKLQkJZ290byBlcnI7Ci0JfQotCi0JY2xrX2VuYWJsZShpMnMtPmlpc19jY2xrKTsKLQotCXJldCA9IHMzY19pMnN2Ml9wcm9iZShkYWksIGkycywgaTJzLT5iYXNlKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9jbGs7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2NsazoKLQljbGtfZGlzYWJsZShpMnMtPmlpc19jY2xrKTsKLQljbGtfcHV0KGkycy0+aWlzX2NjbGspOwotZXJyOgotCWtmcmVlKGkycyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBzM2M2NHh4X2kyc19yZW1vdmUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOwotCi0JY2xrX2Rpc2FibGUoaTJzLT5paXNfY2Nsayk7Ci0JY2xrX3B1dChpMnMtPmlpc19jY2xrKTsKLQlrZnJlZShpMnMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzM2M2NHh4X2kyc19kYWlfb3BzOwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBzM2M2NHh4X2kyc19kYWlbTUFYX0kyU1YzXSA9IHsKLXsKLQkubmFtZSA9ICJzM2M2NHh4LWkycy0wIiwKLQkucHJvYmUgPSBzM2M2NHh4X2kyc19wcm9iZSwKLQkucmVtb3ZlID0gczNjNjR4eF9pMnNfcmVtb3ZlLAotCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDIsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBTM0M2NFhYX0kyU19SQVRFUywKLQkJLmZvcm1hdHMgPSBTM0M2NFhYX0kyU19GTVRTLH0sCi0JLmNhcHR1cmUgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAyLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gUzNDNjRYWF9JMlNfUkFURVMsCi0JCS5mb3JtYXRzID0gUzNDNjRYWF9JMlNfRk1UUyx9LAotCS5vcHMgPSAmczNjNjR4eF9pMnNfZGFpX29wcywKLQkuc3ltbWV0cmljX3JhdGVzID0gMSwKLX0sIHsKLQkubmFtZSA9ICJzM2M2NHh4LWkycy0xIiwKLQkucHJvYmUgPSBzM2M2NHh4X2kyc19wcm9iZSwKLQkucmVtb3ZlID0gczNjNjR4eF9pMnNfcmVtb3ZlLAotCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDIsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBTM0M2NFhYX0kyU19SQVRFUywKLQkJLmZvcm1hdHMgPSBTM0M2NFhYX0kyU19GTVRTLH0sCi0JLmNhcHR1cmUgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAyLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gUzNDNjRYWF9JMlNfUkFURVMsCi0JCS5mb3JtYXRzID0gUzNDNjRYWF9JMlNfRk1UUyx9LAotCS5vcHMgPSAmczNjNjR4eF9pMnNfZGFpX29wcywKLQkuc3ltbWV0cmljX3JhdGVzID0gMSwKLX0sfTsKLQotc3RhdGljIF9fZGV2aW5pdCBpbnQgczNjNjR4eF9paXNfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHMzY19hdWRpb19wZGF0YSAqaTJzX3BkYXRhOwotCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCBpLCByZXQ7Ci0KLQlpZiAocGRldi0+aWQgPj0gTUFYX0kyU1YzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImlkICVkIG91dCBvZiByYW5nZVxuIiwgcGRldi0+aWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpMnMgPSAmczNjNjR4eF9pMnNbcGRldi0+aWRdOwotCi0JaTJzLT5kbWFfY2FwdHVyZSA9ICZzM2M2NHh4X2kyc19wY21fc3RlcmVvX2luW3BkZXYtPmlkXTsKLQlpMnMtPmRtYV9wbGF5YmFjayA9ICZzM2M2NHh4X2kyc19wY21fc3RlcmVvX291dFtwZGV2LT5pZF07Ci0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOwotCWlmICghcmVzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgSTJTLVRYIGRtYSByZXNvdXJjZVxuIik7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCWkycy0+ZG1hX3BsYXliYWNrLT5jaGFubmVsID0gcmVzLT5zdGFydDsKLQotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSk7Ci0JaWYgKCFyZXMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGdldCBJMlMtUlggZG1hIHJlc291cmNlXG4iKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0JaTJzLT5kbWFfY2FwdHVyZS0+Y2hhbm5lbCA9IHJlcy0+c3RhcnQ7Ci0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWlmICghcmVzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgSTJTIFNGUiBhZGRyZXNzXG4iKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksCi0JCQkJInMzYzY0eHgtaTJzIikpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgU0ZSIHJlZ2lvblxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCWkycy0+YmFzZSA9IHJlcy0+c3RhcnQ7Ci0KLQlpMnNfcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlpZiAoaTJzX3BkYXRhICYmIGkyc19wZGF0YS0+Y2ZnX2dwaW8gJiYgaTJzX3BkYXRhLT5jZmdfZ3BpbyhwZGV2KSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gY29uZmlndXJlIGdwaW9cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaTJzLT5kbWFfY2FwdHVyZS0+ZG1hX2FkZHIgPSByZXMtPnN0YXJ0ICsgUzNDMjQxMl9JSVNSWEQ7Ci0JaTJzLT5kbWFfcGxheWJhY2stPmRtYV9hZGRyID0gcmVzLT5zdGFydCArIFMzQzI0MTJfSUlTVFhEOwotCi0JaTJzLT5kbWFfY2FwdHVyZS0+Y2xpZW50ID0gJnMzYzY0eHhfZG1hX2NsaWVudF9pbjsKLQlpMnMtPmRtYV9jYXB0dXJlLT5kbWFfc2l6ZSA9IDQ7Ci0JaTJzLT5kbWFfcGxheWJhY2stPmNsaWVudCA9ICZzM2M2NHh4X2RtYV9jbGllbnRfb3V0OwotCWkycy0+ZG1hX3BsYXliYWNrLT5kbWFfc2l6ZSA9IDQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzM2M2NHh4X2kyc19kYWkpOyBpKyspIHsKLQkJcmV0ID0gczNjX2kyc3YyX3JlZ2lzdGVyX2RhaSgmcGRldi0+ZGV2LCBpLAotCQkJCQkJJnMzYzY0eHhfaTJzX2RhaVtpXSk7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2RldmV4aXQgaW50IHMzYzY0eHhfaWlzX2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcygmcGRldi0+ZGV2LCBBUlJBWV9TSVpFKHMzYzY0eHhfaTJzX2RhaSkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2M2NHh4X2lpc19kcml2ZXIgPSB7Ci0JLnByb2JlICA9IHMzYzY0eHhfaWlzX2Rldl9wcm9iZSwKLQkucmVtb3ZlID0gczNjNjR4eF9paXNfZGV2X3JlbW92ZSwKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJzM2M2NHh4LWlpcyIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzM2M2NHh4X2kyc19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjNjR4eF9paXNfZHJpdmVyKTsKLX0KLW1vZHVsZV9pbml0KHMzYzY0eHhfaTJzX2luaXQpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgczNjNjR4eF9pMnNfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2M2NHh4X2lpc19kcml2ZXIpOwotfQotbW9kdWxlX2V4aXQoczNjNjR4eF9pMnNfZXhpdCk7Ci0KLS8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLwotTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzLCA8YmVuQHNpbXRlYy5jby51az4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUzNDNjRYWCBJMlMgU29DIEludGVyZmFjZSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2M2NHh4LWlpcyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuaCBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNDA3NWQuLjAwMDAwMDAKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qIHNvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmgKLSAqCi0gKiBBTFNBIFNvQyBBdWRpbyBMYXllciAtIFMzQzY0WFggSTJTIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX1NORF9TT0NfUzNDMjRYWF9TM0M2NFhYX0kyU19ICi0jZGVmaW5lIF9fU05EX1NPQ19TM0MyNFhYX1MzQzY0WFhfSTJTX0ggX19GSUxFX18KLQotc3RydWN0IGNsazsKLQotI2luY2x1ZGUgInMzYy1pMnMtdjIuaCIKLQotI2RlZmluZSBTM0M2NFhYX0RJVl9CQ0xLCVMzQ19JMlNWMl9ESVZfQkNMSwotI2RlZmluZSBTM0M2NFhYX0RJVl9SQ0xLCVMzQ19JMlNWMl9ESVZfUkNMSwotI2RlZmluZSBTM0M2NFhYX0RJVl9QUkVTQ0FMRVIJUzNDX0kyU1YyX0RJVl9QUkVTQ0FMRVIKLQotI2RlZmluZSBTM0M2NFhYX0NMS1NSQ19QQ0xLCVMzQ19JMlNWMl9DTEtTUkNfUENMSwotI2RlZmluZSBTM0M2NFhYX0NMS1NSQ19NVVgJUzNDX0kyU1YyX0NMS1NSQ19BVURJT0JVUwotI2RlZmluZSBTM0M2NFhYX0NMS1NSQ19DRENMSyAgICBTM0NfSTJTVjJfQ0xLU1JDX0NEQ0xLCi0KLSNkZWZpbmUgUzNDNjRYWF9JMlNfUkFURVMgXAotCShTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTEwMjUgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFwKLQlTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCi0JU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV84ODIwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwKQotCi0jZGVmaW5lIFMzQzY0WFhfSTJTX0ZNVFMgXAotCShTTkRSVl9QQ01fRk1UQklUX1M4IHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfFwKLQkgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCi0KLXN0cnVjdCBjbGsgKnMzYzY0eHhfaTJzX2dldF9jbG9jayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSk7Ci0KLSNlbmRpZiAvKiBfX1NORF9TT0NfUzNDMjRYWF9TM0M2NFhYX0kyU19IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zbWRrNjR4eF93bTg1ODAuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGs2NHh4X3dtODU4MC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTJlNDk5Li4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGs2NHh4X3dtODU4MC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjcyICswLDAgQEAKLS8qCi0gKiAgc21kazY0eHhfd204NTgwLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uIEx0ZAotICogIEF1dGhvcjogSmFzd2luZGVyIFNpbmdoIDxqYXNzaS5icmFyQHNhbXN1bmcuY29tPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+Ci0KLSNpbmNsdWRlICIuLi9jb2RlY3Mvd204NTgwLmgiCi0jaW5jbHVkZSAiczNjLWRtYS5oIgotI2luY2x1ZGUgInMzYzY0eHgtaTJzLmgiCi0KLS8qCi0gKiBEZWZhdWx0IENGRyBzd2l0Y2ggc2V0dGluZ3MgdG8gdXNlIHRoaXMgZHJpdmVyOgotICoKLSAqICAgU01ESzY0MTA6IFNldCBDRkcxIDEtMyBPZmYsIENGRzIgMS00IE9uCi0gKi8KLQotLyogU01ESzY0WFggaGFzIGEgMTJNSFogY3J5c3RhbCBhdHRhY2hlZCB0byBXTTg1ODAgKi8KLSNkZWZpbmUgU01ESzY0WFhfV004NTgwX0ZSRVEgMTIwMDAwMDAKLQotc3RhdGljIGludCBzbWRrNjR4eF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0Jc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOwotCXVuc2lnbmVkIGludCBwbGxfb3V0OwotCWludCBiZnMsIHJmcywgcmV0OwotCi0Jc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfVTg6Ci0JY2FzZSBTTkRSVl9QQ01fRk9STUFUX1M4OgotCQliZnMgPSAxNjsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fRk9STUFUX1UxNl9MRToKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgotCQliZnMgPSAzMjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogVGhlIEZ2Y28gZm9yIFdNODU4MCBQTExzIG11c3QgZmFsbCB3aXRoaW4gWzkwLDEwMF1NSHouCi0JICogVGhpcyBjcml0ZXJpb24gY2FuJ3QgYmUgbWV0IGlmIHdlIHJlcXVlc3QgUExMIG91dHB1dAotCSAqIGFzIHs4MDAweDI1NiwgNjQwMDB4MjU2LCAxMTAyNXgyNTZ9SHouCi0JICogQXMgYSB3YXlvdXQsIHdlIHJhdGhlciBjaGFuZ2UgcmZzIHRvIGEgbWluaW11bSB2YWx1ZSB0aGF0Ci0JICogcmVzdWx0cyBpbiAocGFyYW1zX3JhdGUocGFyYW1zKSAqIHJmcyksIGFuZCBpdHNlbGYsIGFjY2VwdGFibGUKLQkgKiB0byBib3RoIC0gdGhlIENPREVDIGFuZCB0aGUgQ1BVLgotCSAqLwotCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgewotCWNhc2UgMTYwMDA6Ci0JY2FzZSAyMjA1MDoKLQljYXNlIDMyMDAwOgotCWNhc2UgNDQxMDA6Ci0JY2FzZSA0ODAwMDoKLQljYXNlIDg4MjAwOgotCWNhc2UgOTYwMDA6Ci0JCXJmcyA9IDI1NjsKLQkJYnJlYWs7Ci0JY2FzZSA2NDAwMDoKLQkJcmZzID0gMzg0OwotCQlicmVhazsKLQljYXNlIDgwMDA6Ci0JY2FzZSAxMTAyNToKLQkJcmZzID0gNTEyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcGxsX291dCA9IHBhcmFtc19yYXRlKHBhcmFtcykgKiByZnM7Ci0KLQkvKiBTZXQgdGhlIENvZGVjIERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0kyUwotCQkJCQkgfCBTTkRfU09DX0RBSUZNVF9OQl9ORgotCQkJCQkgfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFNldCB0aGUgQVAgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIFNORF9TT0NfREFJRk1UX0kyUwotCQkJCQkgfCBTTkRfU09DX0RBSUZNVF9OQl9ORgotCQkJCQkgfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUzNDNjRYWF9DTEtTUkNfQ0RDTEssCi0JCQkJCTAsIFNORF9TT0NfQ0xPQ0tfSU4pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogV2UgdXNlIFBDTEsgZm9yIGJhc2ljIG9wcyBpbiBTb0MtU2xhdmUgbW9kZSAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUzNDNjRYWF9DTEtTUkNfUENMSywKLQkJCQkJMCwgU05EX1NPQ19DTE9DS19JTik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBTZXQgV004NTgwIHRvIGRyaXZlIE1DTEsgZnJvbSBpdHMgUExMQSAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY29kZWNfZGFpLCBXTTg1ODBfTUNMSywKLQkJCQkJV004NTgwX0NMS1NSQ19QTExBKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9wbGwoY29kZWNfZGFpLCBXTTg1ODBfUExMQSwgMCwKLQkJCQkJU01ESzY0WFhfV004NTgwX0ZSRVEsIHBsbF9vdXQpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODU4MF9DTEtTUkNfUExMQSwKLQkJCQkgICAgIHBsbF9vdXQsIFNORF9TT0NfQ0xPQ0tfSU4pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2RpdihjcHVfZGFpLCBTM0NfSTJTVjJfRElWX0JDTEssIGJmcyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksIFMzQ19JMlNWMl9ESVZfUkNMSywgcmZzKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogU01ESzY0WFggV004NTgwIERBSSBvcGVyYXRpb25zLgotICovCi1zdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIHNtZGs2NHh4X29wcyA9IHsKLQkuaHdfcGFyYW1zID0gc21kazY0eHhfaHdfcGFyYW1zLAotfTsKLQotLyogU01ESzY0eHggUGxheWJhY2sgd2lkZ2V0cyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODU4MF9kYXBtX3dpZGdldHNfcGJrW10gPSB7Ci0JU05EX1NPQ19EQVBNX0hQKCJGcm9udCIsIE5VTEwpLAotCVNORF9TT0NfREFQTV9IUCgiQ2VudGVyK1N1YiIsIE5VTEwpLAotCVNORF9TT0NfREFQTV9IUCgiUmVhciIsIE5VTEwpLAotfTsKLQotLyogU01ESzY0eHggQ2FwdHVyZSB3aWRnZXRzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204NTgwX2RhcG1fd2lkZ2V0c19jcHRbXSA9IHsKLQlTTkRfU09DX0RBUE1fTUlDKCJNaWNJbiIsIE5VTEwpLAotCVNORF9TT0NfREFQTV9MSU5FKCJMaW5lSW4iLCBOVUxMKSwKLX07Ci0KLS8qIFNNREstUEFJRlRYIGNvbm5lY3Rpb25zICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBfdHhbXSA9IHsKLQkvKiBNaWNJbiBmZWVkcyBBSU5MICovCi0JeyJBSU5MIiwgTlVMTCwgIk1pY0luIn0sCi0KLQkvKiBMaW5lSW4gZmVlZHMgQUlOTC9SICovCi0JeyJBSU5MIiwgTlVMTCwgIkxpbmVJbiJ9LAotCXsiQUlOUiIsIE5VTEwsICJMaW5lSW4ifSwKLX07Ci0KLS8qIFNNREstUEFJRlJYIGNvbm5lY3Rpb25zICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBfcnhbXSA9IHsKLQkvKiBGcm9udCBMZWZ0L1JpZ2h0IGFyZSBmZWQgVk9VVDFML1IgKi8KLQl7IkZyb250IiwgTlVMTCwgIlZPVVQxTCJ9LAotCXsiRnJvbnQiLCBOVUxMLCAiVk9VVDFSIn0sCi0KLQkvKiBDZW50ZXIvU3ViIGFyZSBmZWQgVk9VVDJML1IgKi8KLQl7IkNlbnRlcitTdWIiLCBOVUxMLCAiVk9VVDJMIn0sCi0JeyJDZW50ZXIrU3ViIiwgTlVMTCwgIlZPVVQyUiJ9LAotCi0JLyogUmVhciBMZWZ0L1JpZ2h0IGFyZSBmZWQgVk9VVDNML1IgKi8KLQl7IlJlYXIiLCBOVUxMLCAiVk9VVDNMIn0sCi0JeyJSZWFyIiwgTlVMTCwgIlZPVVQzUiJ9LAotfTsKLQotc3RhdGljIGludCBzbWRrNjR4eF93bTg1ODBfaW5pdF9wYWlmdHgoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwotCi0JLyogQWRkIHNtZGs2NHh4IHNwZWNpZmljIENhcHR1cmUgd2lkZ2V0cyAqLwotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODU4MF9kYXBtX3dpZGdldHNfY3B0LAotCQkJCSAgQVJSQVlfU0laRSh3bTg1ODBfZGFwbV93aWRnZXRzX2NwdCkpOwotCi0JLyogU2V0IHVwIFBBSUZUWCBhdWRpbyBwYXRoICovCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcF90eCwgQVJSQVlfU0laRShhdWRpb19tYXBfdHgpKTsKLQotCS8qIEVuYWJsaW5nIHRoZSBtaWNyb3Bob25lIHJlcXVpcmVzIHRoZSBmaXR0aW5nIG9mIGEgMFIKLQkgKiByZXNpc3RvciB0byBjb25uZWN0IHRoZSBsaW5lIGZyb20gdGhlIG1pY3JvcGhvbmUgamFjay4KLQkgKi8KLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJNaWNJbiIpOwotCi0JLyogc2lnbmFsIGEgREFQTSBldmVudCAqLwotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNtZGs2NHh4X3dtODU4MF9pbml0X3BhaWZyeChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7Ci0KLQkvKiBBZGQgc21kazY0eHggc3BlY2lmaWMgUGxheWJhY2sgd2lkZ2V0cyAqLwotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODU4MF9kYXBtX3dpZGdldHNfcGJrLAotCQkJCSAgQVJSQVlfU0laRSh3bTg1ODBfZGFwbV93aWRnZXRzX3BiaykpOwotCi0JLyogU2V0IHVwIFBBSUZSWCBhdWRpbyBwYXRoICovCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcF9yeCwgQVJSQVlfU0laRShhdWRpb19tYXBfcngpKTsKLQotCS8qIHNpZ25hbCBhIERBUE0gZXZlbnQgKi8KLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNtZGs2NHh4X2RhaVtdID0gewoteyAvKiBQcmltYXJ5IFBsYXliYWNrIGkvZiAqLwotCS5uYW1lID0gIldNODU4MCBQQUlGIFJYIiwKLQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAotCS5jcHVfZGFpX25hbWUgPSAiczNjNjR4eC1paXMtdjQiLAotCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg1ODAtaGlmaS1wbGF5YmFjayIsCi0JLnBsYXRmb3JtX25hbWUgPSAiczNjMjR4eC1wY20tYXVkaW8iLAotCS5jb2RlY19uYW1lID0gIndtODU4MC1jb2RlYy4wLTAwMWIiLAotCS5pbml0ID0gc21kazY0eHhfd204NTgwX2luaXRfcGFpZnJ4LAotCS5vcHMgPSAmc21kazY0eHhfb3BzLAotfSwKLXsgLyogUHJpbWFyeSBDYXB0dXJlIGkvZiAqLwotCS5uYW1lID0gIldNODU4MCBQQUlGIFRYIiwKLQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCi0JLmNwdV9kYWlfbmFtZSA9ICJzM2M2NHh4LWlpcy12NCIsCi0JLmNvZGVjX2RhaV9uYW1lID0gIndtODU4MC1oaWZpLWNhcHR1cmUiLAotCS5wbGF0Zm9ybV9uYW1lID0gInMzYzI0eHgtcGNtLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg1ODAtY29kZWMuMC0wMDFiIiwKLQkuaW5pdCA9IHNtZGs2NHh4X3dtODU4MF9pbml0X3BhaWZ0eCwKLQkub3BzID0gJnNtZGs2NHh4X29wcywKLX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbWRrNjR4eCA9IHsKLQkubmFtZSA9ICJTTURLNjR4eCA1LjEiLAotCS5kYWlfbGluayA9IHNtZGs2NHh4X2RhaSwKLQkubnVtX2xpbmtzID0gQVJSQVlfU0laRShzbWRrNjR4eF9kYWkpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNtZGs2NHh4X3NuZF9kZXZpY2U7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNtZGs2NHh4X2F1ZGlvX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0Jc21kazY0eHhfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwotCWlmICghc21kazY0eHhfc25kX2RldmljZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShzbWRrNjR4eF9zbmRfZGV2aWNlLCAmc21kazY0eHgpOwotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoc21kazY0eHhfc25kX2RldmljZSk7Ci0KLQlpZiAocmV0KQotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHNtZGs2NHh4X3NuZF9kZXZpY2UpOwotCi0JcmV0dXJuIHJldDsKLX0KLW1vZHVsZV9pbml0KHNtZGs2NHh4X2F1ZGlvX2luaXQpOwotCi1NT0RVTEVfQVVUSE9SKCJKYXN3aW5kZXIgU2luZ2gsIGphc3NpLmJyYXJAc2Ftc3VuZy5jb20iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgU01ESzY0WFggV004NTgwIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczYwMDAvczYxMDUtaXBjYW0uYyBiL3NvdW5kL3NvYy9zNjAwMC9zNjEwNS1pcGNhbS5jCmluZGV4IGMxMjQ0YzUuLjU4OTBlNDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zNjAwMC9zNjEwNS1pcGNhbS5jCisrKyBiL3NvdW5kL3NvYy9zNjAwMC9zNjEwNS1pcGNhbS5jCkBAIC0xOCwxMSArMTgsOSBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8dmFyaWFudC9kbWFjLmg+CiAKLSNpbmNsdWRlICIuLi9jb2RlY3MvdGx2MzIwYWljM3guaCIKICNpbmNsdWRlICJzNjAwMC1wY20uaCIKICNpbmNsdWRlICJzNjAwMC1pMnMuaCIKIApAQCAtMTA3LDYgKzEwNSw3IEBACiAJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBrY29udHJvbC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAl1bnNpZ25lZCBpbnQgdmFsID0gKHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gIT0gMCk7CiAJY2hhciAqZGlmZmVyZW50aWFsID0gIkF1ZGlvIE91dCBEaWZmZXJlbnRpYWwiOwogCWNoYXIgKnN0ZXJlbyA9ICJBdWRpbyBPdXQgU3RlcmVvIjsKQEAgLTExNCwxMCArMTEzLDEwIEBACiAJaWYgKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID09IHZhbCkKIAkJcmV0dXJuIDA7CiAJa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPSB2YWw7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCB2YWwgPyBkaWZmZXJlbnRpYWwgOiBzdGVyZW8pOwotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgdmFsID8gc3RlcmVvIDogZGlmZmVyZW50aWFsKTsKLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sIHZhbCA/IGRpZmZlcmVudGlhbCA6IHN0ZXJlbyk7CisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgdmFsID8gc3RlcmVvIDogZGlmZmVyZW50aWFsKTsKKwlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTM3LDM1ICsxMzYsMzYgQEAKIHN0YXRpYyBpbnQgczYxMDVfYWljM3hfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCiAJLyogQWRkIHM2MTA1IHNwZWNpZmljIHdpZGdldHMgKi8KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBhaWMzeF9kYXBtX3dpZGdldHMsCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBhaWMzeF9kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKGFpYzN4X2RhcG1fd2lkZ2V0cykpOwogCiAJLyogU2V0IHVwIHM2MTA1IHNwZWNpZmljIGF1ZGlvIHBhdGggYXVkaW9fbWFwICovCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CiAKIAkvKiBub3QgcHJlc2VudCAqLwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNT05PX0xPVVQiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORTJMIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkUyUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIk1PTk9fTE9VVCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTkUyTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTkUyUiIpOwogCiAJLyogbm90IGNvbm5lY3RlZCAqLwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNSUMzTCIpOyAvKiBMSU5FMkwgb24gdGhpcyBjaGlwICovCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1JQzNSIik7IC8qIExJTkUyUiBvbiB0aGlzIGNoaXAgKi8KLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTExPVVQiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUkxPVVQiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFBSQ09NIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTUlDM0wiKTsgLyogTElORTJMIG9uIHRoaXMgY2hpcCAqLworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIk1JQzNSIik7IC8qIExJTkUyUiBvbiB0aGlzIGNoaXAgKi8KKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMTE9VVCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlJMT1VUIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiSFBSQ09NIik7CiAKIAkvKiBhbHdheXMgY29ubmVjdGVkICovCi0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJBdWRpbyBJbiIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJBdWRpbyBJbiIpOwogCiAJLyogbXVzdCBjb3JyZXNwb25kIHRvIGF1ZGlvX291dF9tdXgucHJpdmF0ZV92YWx1ZSBpbml0aWFsaXplciAqLwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkF1ZGlvIE91dCBEaWZmZXJlbnRpYWwiKTsKLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7Ci0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJBdWRpbyBPdXQgU3RlcmVvIik7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJBdWRpbyBPdXQgRGlmZmVyZW50aWFsIik7CisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkF1ZGlvIE91dCBTdGVyZW8iKTsKIAotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIAogCXNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLT5zbmRfY2FyZCwgc25kX2N0bF9uZXcxKCZhdWRpb19vdXRfbXV4LCBjb2RlYykpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9LY29uZmlnIGIvc291bmQvc29jL3NhbXN1bmcvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmE2YjVmCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NhbXN1bmcvS2NvbmZpZwpAQCAtMCwwICsxLDE3MSBAQAorY29uZmlnIFNORF9TT0NfU0FNU1VORworCXRyaXN0YXRlICJBU29DIHN1cHBvcnQgZm9yIFNhbXN1bmciCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TM0M2NFhYIHx8IEFSQ0hfUzVQQzEwMCB8fCBBUkNIX1M1UFYyMTAgfHwgQVJDSF9TNVA2NFgwIHx8IEFSQ0hfUzVQNjQ0MiB8fCBBUkNIX1M1UFYzMTAKKwlzZWxlY3QgUzNDNjRYWF9ETUEgaWYgQVJDSF9TM0M2NFhYCisJc2VsZWN0IFMzQzI0MTBfRE1BIGlmIEFSQ0hfUzNDMjQxMAorCWhlbHAKKwkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGNvZGVjcyBhdHRhY2hlZCB0bworCSAgdGhlIFNhbXN1bmcgU29DcycgQXVkaW8gaW50ZXJmYWNlcy4gWW91IHdpbGwgYWxzbyBuZWVkIHRvCisJICBzZWxlY3QgdGhlIGF1ZGlvIGludGVyZmFjZXMgdG8gc3VwcG9ydCBiZWxvdy4KKworY29uZmlnIFNORF9TM0MyNFhYX0kyUworCXRyaXN0YXRlCisJc2VsZWN0IFMzQzI0MTBfRE1BCisKK2NvbmZpZyBTTkRfUzNDX0kyU1YyX1NPQworCXRyaXN0YXRlCisKK2NvbmZpZyBTTkRfUzNDMjQxMl9TT0NfSTJTCisJdHJpc3RhdGUKKwlzZWxlY3QgU05EX1MzQ19JMlNWMl9TT0MKKwlzZWxlY3QgUzNDMjQxMF9ETUEKKworY29uZmlnIFNORF9TQU1TVU5HX1BDTQorCXRyaXN0YXRlCisKK2NvbmZpZyBTTkRfU0FNU1VOR19BQzk3CisJdHJpc3RhdGUKKwlzZWxlY3QgU05EX1NPQ19BQzk3X0JVUworCitjb25maWcgU05EX1NBTVNVTkdfU1BESUYKKwl0cmlzdGF0ZQorCXNlbGVjdCBTTkRfU09DX1NQRElGCisKK2NvbmZpZyBTTkRfU0FNU1VOR19JMlMKKwl0cmlzdGF0ZQorCitjb25maWcgU05EX1NPQ19TQU1TVU5HX05FTzE5NzNfV004NzUzCisJdHJpc3RhdGUgIlNvQyBJMlMgQXVkaW8gc3VwcG9ydCBmb3IgTkVPMTk3MyAtIFdNODc1MyIKKwlkZXBlbmRzIG9uIFNORF9TT0NfU0FNU1VORyAmJiBNQUNIX05FTzE5NzNfR1RBMDEKKwlzZWxlY3QgU05EX1MzQzI0WFhfSTJTCisJc2VsZWN0IFNORF9TT0NfV004NzUzCisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBzbWRrMjQ0MAorCSAgd2l0aCB0aGUgV004NzUzLgorCitjb25maWcgU05EX1NPQ19TQU1TVU5HX05FTzE5NzNfR1RBMDJfV004NzUzCisJdHJpc3RhdGUgIkF1ZGlvIHN1cHBvcnQgZm9yIHRoZSBPcGVubW9rbyBOZW8gRnJlZVJ1bm5lciAoR1RBMDIpIgorCWRlcGVuZHMgb24gU05EX1NPQ19TQU1TVU5HICYmIE1BQ0hfTkVPMTk3M19HVEEwMgorCXNlbGVjdCBTTkRfUzNDMjRYWF9JMlMKKwlzZWxlY3QgU05EX1NPQ19XTTg3NTMKKwloZWxwCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBhdWRpbyBzdXBwb3J0IGZvciB0aGUgT3Blbm1va28gTmVvIEZyZWVSdW5uZXIKKwkgIHNtYXJ0cGhvbmUuCisJICAKK2NvbmZpZyBTTkRfU09DX1NBTVNVTkdfSklWRV9XTTg3NTAKKwl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBKaXZlIgorCWRlcGVuZHMgb24gU05EX1NPQ19TQU1TVU5HICYmIE1BQ0hfSklWRQorCXNlbGVjdCBTTkRfU09DX1dNODc1MAorCXNlbGVjdCBTTkRfUzNDMjQxMl9TT0NfSTJTCisJaGVscAorCSAgU2F0IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgSml2ZS4KKworY29uZmlnIFNORF9TT0NfU0FNU1VOR19TTURLX1dNODU4MAorCXRyaXN0YXRlICJTb0MgSTJTIEF1ZGlvIHN1cHBvcnQgZm9yIFdNODU4MCBvbiBTTURLIgorCWRlcGVuZHMgb24gU05EX1NPQ19TQU1TVU5HICYmIChNQUNIX1NNREs2NDEwIHx8IE1BQ0hfU01ES0MxMDAgfHwgTUFDSF9TTURLNjQ0MCB8fCBNQUNIX1NNREs2NDUwIHx8IE1BQ0hfU01ESzY0NDIgfHwgTUFDSF9TTURLVjIxMCB8fCBNQUNIX1NNREtDMTEwKQorCXNlbGVjdCBTTkRfU09DX1dNODU4MAorCXNlbGVjdCBTTkRfU0FNU1VOR19JMlMKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZSBTTURLcy4KKworY29uZmlnIFNORF9TT0NfU0FNU1VOR19TTURLX1dNODk5NAorCXRyaXN0YXRlICJTb0MgSTJTIEF1ZGlvIHN1cHBvcnQgZm9yIFdNODk5NCBvbiBTTURLIgorCWRlcGVuZHMgb24gU05EX1NPQ19TQU1TVU5HICYmIChNQUNIX1NNREtWMzEwIHx8IE1BQ0hfU01ES0MyMTApCisJc2VsZWN0IFNORF9TT0NfV004OTk0CisJc2VsZWN0IFNORF9TQU1TVU5HX0kyUworCWhlbHAKKwkJU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgU01ES3MuCisKK2NvbmZpZyBTTkRfU09DX1NBTVNVTkdfU01ESzI0NDNfV005NzEwCisJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIFNNREsyNDQzIC0gV005NzEwIgorCWRlcGVuZHMgb24gU05EX1NPQ19TQU1TVU5HICYmIE1BQ0hfU01ESzI0NDMKKwlzZWxlY3QgUzNDMjQxMF9ETUEKKwlzZWxlY3QgQUM5N19CVVMKKwlzZWxlY3QgU05EX1NPQ19BQzk3X0NPREVDCisJc2VsZWN0IFNORF9TQU1TVU5HX0FDOTcKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHNtZGsyNDQzCisJICB3aXRoIHRoZSBXTTk3MTAuCisKK2NvbmZpZyBTTkRfU09DX1NBTVNVTkdfTE4yNDQwU0JDX0FMQzY1MAorCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBzdXBwb3J0IGZvciBMTjI0NDBTQkMgLSBBTEM2NTAiCisJZGVwZW5kcyBvbiBTTkRfU09DX1NBTVNVTkcgJiYgQVJDSF9TM0MyNDEwCisJc2VsZWN0IFMzQzI0MTBfRE1BCisJc2VsZWN0IEFDOTdfQlVTCisJc2VsZWN0IFNORF9TT0NfQUM5N19DT0RFQworCXNlbGVjdCBTTkRfU0FNU1VOR19BQzk3CisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBsbjI0NDBzYmMKKwkgIHdpdGggdGhlIEFMQzY1MC4KKworY29uZmlnIFNORF9TT0NfU0FNU1VOR19TM0MyNFhYX1VEQTEzNFgKKwl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IFVEQTEzNFggd2lyZWQgdG8gYSBTM0MyNFhYIgorCWRlcGVuZHMgb24gU05EX1NPQ19TQU1TVU5HICYmIEFSQ0hfUzNDMjQxMAorCXNlbGVjdCBTTkRfUzNDMjRYWF9JMlMKKwlzZWxlY3QgU05EX1NPQ19MMworCXNlbGVjdCBTTkRfU09DX1VEQTEzNFgKKworY29uZmlnIFNORF9TT0NfU0FNU1VOR19TSU1URUMKKwl0cmlzdGF0ZQorCWhlbHAKKwkgIEludGVybmFsIG5vZGUgZm9yIGNvbW1vbiBTM0MyNFhYL1NpbXRlYyBzdXBwb3IKKworY29uZmlnIFNORF9TT0NfU0FNU1VOR19TSU1URUNfVExWMzIwQUlDMjMKKwl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBUTFYzMjBBSUMyMyBvbiBTaW10ZWMgYm9hcmRzIgorCWRlcGVuZHMgb24gU05EX1NPQ19TQU1TVU5HICYmIEFSQ0hfUzNDMjQxMAorCXNlbGVjdCBTTkRfUzNDMjRYWF9JMlMKKwlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMyMworCXNlbGVjdCBTTkRfU09DX1NBTVNVTkdfU0lNVEVDCisKK2NvbmZpZyBTTkRfU09DX1NBTVNVTkdfU0lNVEVDX0hFUk1FUworCXRyaXN0YXRlICJTb0MgSTJTIEF1ZGlvIHN1cHBvcnQgZm9yIFNpbXRlYyBIZXJtZXMgYm9hcmQiCisJZGVwZW5kcyBvbiBTTkRfU09DX1NBTVNVTkcgJiYgQVJDSF9TM0MyNDEwCisJc2VsZWN0IFNORF9TM0MyNFhYX0kyUworCXNlbGVjdCBTTkRfU09DX1RMVjMyMEFJQzNYCisJc2VsZWN0IFNORF9TT0NfU0FNU1VOR19TSU1URUMKKworY29uZmlnIFNORF9TT0NfU0FNU1VOR19IMTk0MF9VREExMzgwCisJdHJpc3RhdGUgIkF1ZGlvIHN1cHBvcnQgZm9yIHRoZSBIUCBpUEFRIEgxOTQwIgorCWRlcGVuZHMgb24gU05EX1NPQ19TQU1TVU5HICYmIEFSQ0hfSDE5NDAKKwlzZWxlY3QgU05EX1MzQzI0WFhfSTJTCisJc2VsZWN0IFNORF9TT0NfVURBMTM4MAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGF1ZGlvIHN1cHBvcnQgZm9yIEhQIGlQQVEgaDE5NDAgUERBLgorCitjb25maWcgU05EX1NPQ19TQU1TVU5HX1JYMTk1MF9VREExMzgwCisJdHJpc3RhdGUgIkF1ZGlvIHN1cHBvcnQgZm9yIHRoZSBIUCBpUEFRIFJYMTk1MCIKKwlkZXBlbmRzIG9uIFNORF9TT0NfU0FNU1VORyAmJiBNQUNIX1JYMTk1MAorCXNlbGVjdCBTTkRfUzNDMjRYWF9JMlMKKwlzZWxlY3QgU05EX1NPQ19VREExMzgwCisJaGVscAorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYXVkaW8gc3VwcG9ydCBmb3IgSFAgaVBBUSBSWDE5NTAgUERBLgorCitjb25maWcgU05EX1NPQ19TQU1TVU5HX1NNREtfV005NzEzCisJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIFNNREsgd2l0aCBXTTk3MTMiCisJZGVwZW5kcyBvbiBTTkRfU09DX1NBTVNVTkcgJiYgKE1BQ0hfU01ESzY0MTAgfHwgTUFDSF9TTURLQzEwMCB8fCBNQUNIX1NNREtWMjEwIHx8IE1BQ0hfU01ES0MxMTAgfHwgTUFDSF9TTURLVjMxMCB8fCBNQUNIX1NNREtDMjEwKQorCXNlbGVjdCBTTkRfU09DX1dNOTcxMworCXNlbGVjdCBTTkRfU0FNU1VOR19BQzk3CisJaGVscAorCSAgU2F0IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgU01ESy4KKworY29uZmlnIFNORF9TT0NfU01BUlRRCisJdHJpc3RhdGUgIlNvQyBJMlMgQXVkaW8gc3VwcG9ydCBmb3IgU21hcnRRIGJvYXJkIgorCWRlcGVuZHMgb24gU05EX1NPQ19TQU1TVU5HICYmIE1BQ0hfU01BUlRRCisJc2VsZWN0IFNORF9TQU1TVU5HX0kyUworCXNlbGVjdCBTTkRfU09DX1dNODc1MAorCitjb25maWcgU05EX1NPQ19HT05JX0FRVUlMQV9XTTg5OTQKKwl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBBUVVJTEEvR09OSSAtIFdNODk5NCIKKwlkZXBlbmRzIG9uIFNORF9TT0NfU0FNU1VORyAmJiAoTUFDSF9HT05JIHx8IE1BQ0hfQVFVSUxBKQorCXNlbGVjdCBTTkRfU0FNU1VOR19JMlMKKwlzZWxlY3QgU05EX1NPQ19XTTg5OTQKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIGdvbmkgb3IgYXF1aWxhCisJICB3aXRoIHRoZSBXTTg5OTQuCisKK2NvbmZpZyBTTkRfU09DX1NBTVNVTkdfU01ES19TUERJRgorCXRyaXN0YXRlICJTb0MgUy9QRElGIEF1ZGlvIHN1cHBvcnQgZm9yIFNNREsiCisJZGVwZW5kcyBvbiBTTkRfU09DX1NBTVNVTkcgJiYgKE1BQ0hfU01ES0MxMDAgfHwgTUFDSF9TTURLQzExMCB8fCBNQUNIX1NNREtWMjEwKQorCXNlbGVjdCBTTkRfU0FNU1VOR19TUERJRgorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgUy9QRElGIGF1ZGlvIG9uIHRoZSBTTURLLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvTWFrZWZpbGUgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDVkNGU4Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NhbXN1bmcvTWFrZWZpbGUKQEAgLTAsMCArMSw1NSBAQAorIyBTM2MyNFhYIFBsYXRmb3JtIFN1cHBvcnQKK3NuZC1zb2MtczNjMjR4eC1vYmpzIDo9IGRtYS5vCitzbmQtc29jLXMzYzI0eHgtaTJzLW9ianMgOj0gczNjMjR4eC1pMnMubworc25kLXNvYy1zM2MyNDEyLWkycy1vYmpzIDo9IHMzYzI0MTItaTJzLm8KK3NuZC1zb2MtYWM5Ny1vYmpzIDo9IGFjOTcubworc25kLXNvYy1zM2MtaTJzLXYyLW9ianMgOj0gczNjLWkycy12Mi5vCitzbmQtc29jLXNhbXN1bmctc3BkaWYtb2JqcyA6PSBzcGRpZi5vCitzbmQtc29jLXBjbS1vYmpzIDo9IHBjbS5vCitzbmQtc29jLWkycy1vYmpzIDo9IGkycy5vCisKK29iai0kKENPTkZJR19TTkRfU09DX1NBTVNVTkcpICs9IHNuZC1zb2MtczNjMjR4eC5vCitvYmotJChDT05GSUdfU05EX1MzQzI0WFhfSTJTKSArPSBzbmQtc29jLXMzYzI0eHgtaTJzLm8KK29iai0kKENPTkZJR19TTkRfU0FNU1VOR19BQzk3KSArPSBzbmQtc29jLWFjOTcubworb2JqLSQoQ09ORklHX1NORF9TM0MyNDEyX1NPQ19JMlMpICs9IHNuZC1zb2MtczNjMjQxMi1pMnMubworb2JqLSQoQ09ORklHX1NORF9TM0NfSTJTVjJfU09DKSArPSBzbmQtc29jLXMzYy1pMnMtdjIubworb2JqLSQoQ09ORklHX1NORF9TQU1TVU5HX1NQRElGKSArPSBzbmQtc29jLXNhbXN1bmctc3BkaWYubworb2JqLSQoQ09ORklHX1NORF9TQU1TVU5HX1BDTSkgKz0gc25kLXNvYy1wY20ubworb2JqLSQoQ09ORklHX1NORF9TQU1TVU5HX0kyUykgKz0gc25kLXNvYy1pMnMubworCisjIFMzQzI0WFggTWFjaGluZSBTdXBwb3J0CitzbmQtc29jLWppdmUtd204NzUwLW9ianMgOj0gaml2ZV93bTg3NTAubworc25kLXNvYy1uZW8xOTczLXdtODc1My1vYmpzIDo9IG5lbzE5NzNfd204NzUzLm8KK3NuZC1zb2MtbmVvMTk3My1ndGEwMi13bTg3NTMtb2JqcyA6PSBuZW8xOTczX2d0YTAyX3dtODc1My5vCitzbmQtc29jLXNtZGsyNDQzLXdtOTcxMC1vYmpzIDo9IHNtZGsyNDQzX3dtOTcxMC5vCitzbmQtc29jLWxuMjQ0MHNiYy1hbGM2NTAtb2JqcyA6PSBsbjI0NDBzYmNfYWxjNjUwLm8KK3NuZC1zb2MtczNjMjR4eC11ZGExMzR4LW9ianMgOj0gczNjMjR4eF91ZGExMzR4Lm8KK3NuZC1zb2MtczNjMjR4eC1zaW10ZWMtb2JqcyA6PSBzM2MyNHh4X3NpbXRlYy5vCitzbmQtc29jLXMzYzI0eHgtc2ltdGVjLWhlcm1lcy1vYmpzIDo9IHMzYzI0eHhfc2ltdGVjX2hlcm1lcy5vCitzbmQtc29jLXMzYzI0eHgtc2ltdGVjLXRsdjMyMGFpYzIzLW9ianMgOj0gczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMubworc25kLXNvYy1oMTk0MC11ZGExMzgwLW9ianMgOj0gaDE5NDBfdWRhMTM4MC5vCitzbmQtc29jLXJ4MTk1MC11ZGExMzgwLW9ianMgOj0gcngxOTUwX3VkYTEzODAubworc25kLXNvYy1zbWRrLXdtODU4MC1vYmpzIDo9IHNtZGtfd204NTgwLm8KK3NuZC1zb2Mtc21kay13bTg5OTQtb2JqcyA6PSBzbWRrX3dtODk5NC5vCitzbmQtc29jLXNtZGstd205NzEzLW9ianMgOj0gc21ka193bTk3MTMubworc25kLXNvYy1zM2M2NHh4LXNtYXJ0cS13bTg5ODctb2JqcyA6PSBzbWFydHFfd204OTg3Lm8KK3NuZC1zb2MtZ29uaS13bTg5OTQtb2JqcyA6PSBnb25pX3dtODk5NC5vCitzbmQtc29jLXNtZGstc3BkaWYtb2JqcyA6PSBzbWRrX3NwZGlmLm8KKworb2JqLSQoQ09ORklHX1NORF9TT0NfU0FNU1VOR19KSVZFX1dNODc1MCkgKz0gc25kLXNvYy1qaXZlLXdtODc1MC5vCitvYmotJChDT05GSUdfU05EX1NPQ19TQU1TVU5HX05FTzE5NzNfV004NzUzKSArPSBzbmQtc29jLW5lbzE5NzMtd204NzUzLm8KK29iai0kKENPTkZJR19TTkRfU09DX1NBTVNVTkdfTkVPMTk3M19HVEEwMl9XTTg3NTMpICs9IHNuZC1zb2MtbmVvMTk3My1ndGEwMi13bTg3NTMubworb2JqLSQoQ09ORklHX1NORF9TT0NfU0FNU1VOR19TTURLMjQ0M19XTTk3MTApICs9IHNuZC1zb2Mtc21kazI0NDMtd205NzEwLm8KK29iai0kKENPTkZJR19TTkRfU09DX1NBTVNVTkdfTE4yNDQwU0JDX0FMQzY1MCkgKz0gc25kLXNvYy1sbjI0NDBzYmMtYWxjNjUwLm8KK29iai0kKENPTkZJR19TTkRfU09DX1NBTVNVTkdfUzNDMjRYWF9VREExMzRYKSArPSBzbmQtc29jLXMzYzI0eHgtdWRhMTM0eC5vCitvYmotJChDT05GSUdfU05EX1NPQ19TQU1TVU5HX1NJTVRFQykgKz0gc25kLXNvYy1zM2MyNHh4LXNpbXRlYy5vCitvYmotJChDT05GSUdfU05EX1NPQ19TQU1TVU5HX1NJTVRFQ19IRVJNRVMpICs9IHNuZC1zb2MtczNjMjR4eC1zaW10ZWMtaGVybWVzLm8KK29iai0kKENPTkZJR19TTkRfU09DX1NBTVNVTkdfU0lNVEVDX1RMVjMyMEFJQzIzKSArPSBzbmQtc29jLXMzYzI0eHgtc2ltdGVjLXRsdjMyMGFpYzIzLm8KK29iai0kKENPTkZJR19TTkRfU09DX1NBTVNVTkdfSDE5NDBfVURBMTM4MCkgKz0gc25kLXNvYy1oMTk0MC11ZGExMzgwLm8KK29iai0kKENPTkZJR19TTkRfU09DX1NBTVNVTkdfUlgxOTUwX1VEQTEzODApICs9IHNuZC1zb2MtcngxOTUwLXVkYTEzODAubworb2JqLSQoQ09ORklHX1NORF9TT0NfU0FNU1VOR19TTURLX1dNODU4MCkgKz0gc25kLXNvYy1zbWRrLXdtODU4MC5vCitvYmotJChDT05GSUdfU05EX1NPQ19TQU1TVU5HX1NNREtfV004OTk0KSArPSBzbmQtc29jLXNtZGstd204OTk0Lm8KK29iai0kKENPTkZJR19TTkRfU09DX1NBTVNVTkdfU01ES19XTTk3MTMpICs9IHNuZC1zb2Mtc21kay13bTk3MTMubworb2JqLSQoQ09ORklHX1NORF9TT0NfU01BUlRRKSArPSBzbmQtc29jLXMzYzY0eHgtc21hcnRxLXdtODk4Ny5vCitvYmotJChDT05GSUdfU05EX1NPQ19TQU1TVU5HX1NNREtfU1BESUYpICs9IHNuZC1zb2Mtc21kay1zcGRpZi5vCitvYmotJChDT05GSUdfU05EX1NPQ19HT05JX0FRVUlMQV9XTTg5OTQpICs9IHNuZC1zb2MtZ29uaS13bTg5OTQubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2FjOTcuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBzb3VuZC9zb2MvczNjMjR4eC9zM2MtYWM5Ny5jCnJlbmFtZSB0byBzb3VuZC9zb2Mvc2Ftc3VuZy9hYzk3LmMKaW5kZXggZjg5MWViNy4uNDc3MGE5NSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9hYzk3LmMKQEAgLTEsNCArMSw0IEBACi0vKiBzb3VuZC9zb2MvczNjMjR4eC9zM2MtYWM5Ny5jCisvKiBzb3VuZC9zb2Mvc2Ftc3VuZy9hYzk3LmMKICAqCiAgKiBBTFNBIFNvQyBBdWRpbyBMYXllciAtIFMzQyBBQzk3IENvbnRyb2xsZXIgZHJpdmVyCiAgKiAJRXZvbHZlZCBmcm9tIHMzYzI0NDMtYWM5Ny5jCkBAIC0yNCw4ICsyNCw4IEBACiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CiAKLSNpbmNsdWRlICJzM2MtZG1hLmgiCi0jaW5jbHVkZSAiczNjLWFjOTcuaCIKKyNpbmNsdWRlICJkbWEuaCIKKyNpbmNsdWRlICJhYzk3LmgiCiAKICNkZWZpbmUgQUNfQ01EX0FERFIoeCkgKHggPDwgMTYpCiAjZGVmaW5lIEFDX0NNRF9EQVRBKHgpICh4ICYgMHhmZmZmKQpAQCAtMTIyLDcgKzEyMiw3IEBACiAJZGF0YSA9IChzdGF0ICYgMHhmZmZmKTsKIAogCWlmIChhZGRyICE9IHJlZykKLQkJcHJfZXJyKCJzM2MtYWM5NzogcmVxIGFkZHIgPSAlMDJ4LCByZXAgYWRkciA9ICUwMnhcbiIsCisJCXByX2VycigiYWM5NzogcmVxIGFkZHIgPSAlMDJ4LCByZXAgYWRkciA9ICUwMnhcbiIsCiAJCQlyZWcsIGFkZHIpOwogCiAJbXV0ZXhfdW5sb2NrKCZzM2NfYWM5Ny5sb2NrKTsKQEAgLTMzNCw3ICszMzQsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBzM2NfYWM5N19kYWlbXSA9IHsKIAlbUzNDX0FDOTdfREFJX1BDTV0gPSB7Ci0JCS5uYW1lID0JInMzYy1hYzk3IiwKKwkJLm5hbWUgPQkic2Ftc3VuZy1hYzk3IiwKIAkJLmFjOTdfY29udHJvbCA9IDEsCiAJCS5wbGF5YmFjayA9IHsKIAkJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IFBsYXliYWNrIiwKQEAgLTM1MSw3ICszNTEsNyBAQAogCQkub3BzID0gJnMzY19hYzk3X2RhaV9vcHMsCiAJfSwKIAlbUzNDX0FDOTdfREFJX01JQ10gPSB7Ci0JCS5uYW1lID0gInMzYy1hYzk3LW1pYyIsCisJCS5uYW1lID0gInNhbXN1bmctYWM5Ny1taWMiLAogCQkuYWM5N19jb250cm9sID0gMSwKIAkJLmNhcHR1cmUgPSB7CiAJCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBNaWMgQ2FwdHVyZSIsCkBAIC00MDcsNyArNDA3LDcgQEAKIAl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwKLQkJCQlyZXNvdXJjZV9zaXplKG1lbV9yZXMpLCAiczNjLWFjOTciKSkgeworCQkJCXJlc291cmNlX3NpemUobWVtX3JlcyksICJhYzk3IikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgcmVnaXN0ZXIgcmVnaW9uXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC00MzEsNyArNDMxLDcgQEAKIAogCXMzY19hYzk3LmFjOTdfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiYWM5NyIpOwogCWlmIChJU19FUlIoczNjX2FjOTcuYWM5N19jbGspKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInMzYy1hYzk3IGZhaWxlZCB0byBnZXQgYWM5N19jbG9ja1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImFjOTcgZmFpbGVkIHRvIGdldCBhYzk3X2Nsb2NrXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBlcnIyOwogCX0KQEAgLTQ0Niw3ICs0NDYsNyBAQAogCXJldCA9IHJlcXVlc3RfaXJxKGlycV9yZXMtPnN0YXJ0LCBzM2NfYWM5N19pcnEsCiAJCQkJCUlSUUZfRElTQUJMRUQsICJBQzk3IiwgTlVMTCk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiczNjLWFjOTc6IGludGVycnVwdCByZXF1ZXN0IGZhaWxlZC5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJhYzk3OiBpbnRlcnJ1cHQgcmVxdWVzdCBmYWlsZWQuXG4iKTsKIAkJZ290byBlcnI0OwogCX0KIApAQCAtNDk3LDcgKzQ5Nyw3IEBACiAJLnByb2JlICA9IHMzY19hYzk3X3Byb2JlLAogCS5yZW1vdmUgPSBzM2NfYWM5N19yZW1vdmUsCiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiczNjLWFjOTciLAorCQkubmFtZSA9ICJzYW1zdW5nLWFjOTciLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogfTsKQEAgLTUxNyw0ICs1MTcsNCBAQAogTU9EVUxFX0FVVEhPUigiSmFzd2luZGVyIFNpbmdoLCA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQUM5NyBkcml2ZXIgZm9yIHRoZSBTYW1zdW5nIFNvQyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MtYWM5NyIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzYW1zdW5nLWFjOTciKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmggYi9zb3VuZC9zb2Mvc2Ftc3VuZy9hYzk3LmgKc2ltaWxhcml0eSBpbmRleCA3MyUKcmVuYW1lIGZyb20gc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuaApyZW5hbWUgdG8gc291bmQvc29jL3NhbXN1bmcvYWM5Ny5oCmluZGV4IDVkY2VkZDAuLjBkMGUxYjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmgKKysrIGIvc291bmQvc29jL3NhbXN1bmcvYWM5Ny5oCkBAIC0xLDExICsxLDExIEBACi0vKiBzb3VuZC9zb2MvczNjMjR4eC9zM2MtYWM5Ny5oCisvKiBzb3VuZC9zb2Mvc2Ftc3VuZy9hYzk3LmgKICAqCiAgKiBBTFNBIFNvQyBBdWRpbyBMYXllciAtIFMzQyBBQzk3IENvbnRyb2xsZXIgZHJpdmVyCi0gKiAJRXZvbHZlZCBmcm9tIHMzYzI0NDMtYWM5Ny5oCisgKglFdm9sdmVkIGZyb20gczNjMjQ0My1hYzk3LmgKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4gTHRkCi0gKiAJQXV0aG9yOiBKYXN3aW5kZXIgU2luZ2ggPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+Ci0gKiAJQ3JlZGl0czogR3JhZW1lIEdyZWdvcnksIFNlYW4gQ2hvaQorICoJQXV0aG9yOiBKYXN3aW5kZXIgU2luZ2ggPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+CisgKglDcmVkaXRzOiBHcmFlbWUgR3JlZ29yeSwgU2VhbiBDaG9pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtZG1hLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9kbWEuYwpzaW1pbGFyaXR5IGluZGV4IDc0JQpyZW5hbWUgZnJvbSBzb3VuZC9zb2MvczNjMjR4eC9zM2MtZG1hLmMKcmVuYW1lIHRvIHNvdW5kL3NvYy9zYW1zdW5nL2RtYS5jCmluZGV4IDI0M2Y3OWIuLjIxMjQwMTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1kbWEuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9kbWEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBzM2MtZG1hLmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgorICogZG1hLmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgogICoKICAqIChjKSAyMDA2IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCiAgKiBHcmFlbWUgR3JlZ29yeSBncmFlbWUuZ3JlZ29yeUB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KQEAgLTMwLDkgKzMwLDkgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAotI2luY2x1ZGUgInMzYy1kbWEuaCIKKyNpbmNsdWRlICJkbWEuaCIKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHMzY19kbWFfaGFyZHdhcmUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgZG1hX2hhcmR3YXJlID0gewogCS5pbmZvCQkJPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CiAJCQkJICAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKIAkJCQkgICAgU05EUlZfUENNX0lORk9fTU1BUCB8CkBAIC01Myw3ICs1Myw3IEBACiAJLmZpZm9fc2l6ZQkJPSAzMiwKIH07CiAKLXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSB7CitzdHJ1Y3QgcnVudGltZV9kYXRhIHsKIAlzcGlubG9ja190IGxvY2s7CiAJaW50IHN0YXRlOwogCXVuc2lnbmVkIGludCBkbWFfbG9hZGVkOwpAQCAtNjUsMTQgKzY1LDE0IEBACiAJc3RydWN0IHMzY19kbWFfcGFyYW1zICpwYXJhbXM7CiB9OwogCi0vKiBzM2NfZG1hX2VucXVldWUKKy8qIGRtYV9lbnF1ZXVlCiAgKgogICogcGxhY2UgYSBkbWEgYnVmZmVyIG9udG8gdGhlIHF1ZXVlIGZvciB0aGUgZG1hIHN5c3RlbQogICogdG8gaGFuZGxlLgogKi8KLXN0YXRpYyB2b2lkIHMzY19kbWFfZW5xdWV1ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyB2b2lkIGRtYV9lbnF1ZXVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewotCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlkbWFfYWRkcl90IHBvcyA9IHBydGQtPmRtYV9wb3M7CiAJdW5zaWduZWQgaW50IGxpbWl0OwogCWludCByZXQ7CkBAIC0xMTIsMTIgKzExMiwxMiBAQAogCXBydGQtPmRtYV9wb3MgPSBwb3M7CiB9CiAKLXN0YXRpYyB2b2lkIHMzYzI0eHhfYXVkaW9fYnVmZmRvbmUoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW5uZWwsCitzdGF0aWMgdm9pZCBhdWRpb19idWZmZG9uZShzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbm5lbCwKIAkJCQl2b2lkICpkZXZfaWQsIGludCBzaXplLAogCQkJCWVudW0gczNjMjQxMF9kbWFfYnVmZnJlc3VsdCByZXN1bHQpCiB7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBkZXZfaWQ7Ci0Jc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkOworCXN0cnVjdCBydW50aW1lX2RhdGEgKnBydGQ7CiAKIAlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCkBAIC0xMzIsMTcgKzEzMiwxNyBAQAogCXNwaW5fbG9jaygmcHJ0ZC0+bG9jayk7CiAJaWYgKHBydGQtPnN0YXRlICYgU1RfUlVOTklORyAmJiAhczNjX2RtYV9oYXNfY2lyY3VsYXIoKSkgewogCQlwcnRkLT5kbWFfbG9hZGVkLS07Ci0JCXMzY19kbWFfZW5xdWV1ZShzdWJzdHJlYW0pOworCQlkbWFfZW5xdWV1ZShzdWJzdHJlYW0pOwogCX0KIAogCXNwaW5fdW5sb2NrKCZwcnRkLT5sb2NrKTsKIH0KIAotc3RhdGljIGludCBzM2NfZG1hX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKK3N0YXRpYyBpbnQgZG1hX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBsb25nIHRvdGJ5dGVzID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpOwogCXN0cnVjdCBzM2NfZG1hX3BhcmFtcyAqZG1hID0KQEAgLTE4MSw3ICsxODEsNyBAQAogCX0KIAogCXMzYzI0MTBfZG1hX3NldF9idWZmZG9uZV9mbihwcnRkLT5wYXJhbXMtPmNoYW5uZWwsCi0JCQkJICAgIHMzYzI0eHhfYXVkaW9fYnVmZmRvbmUpOworCQkJCSAgICBhdWRpb19idWZmZG9uZSk7CiAKIAlzbmRfcGNtX3NldF9ydW50aW1lX2J1ZmZlcihzdWJzdHJlYW0sICZzdWJzdHJlYW0tPmRtYV9idWZmZXIpOwogCkBAIC0xOTksOSArMTk5LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2NfZG1hX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzdGF0aWMgaW50IGRtYV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewotCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAogCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTIxNiw5ICsyMTYsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzY19kbWFfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgZG1hX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7Ci0Jc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHJ1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCWludCByZXQgPSAwOwogCiAJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKQEAgLTI0OSwxNCArMjQ5LDE0IEBACiAJcHJ0ZC0+ZG1hX3BvcyA9IHBydGQtPmRtYV9zdGFydDsKIAogCS8qIGVucXVldWUgZG1hIGJ1ZmZlcnMgKi8KLQlzM2NfZG1hX2VucXVldWUoc3Vic3RyZWFtKTsKKwlkbWFfZW5xdWV1ZShzdWJzdHJlYW0pOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzM2NfZG1hX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCitzdGF0aWMgaW50IGRtYV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQogewotCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0ID0gMDsKIAogCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CkBAIC0yODksMTAgKzI4OSwxMCBAQAogfQogCiBzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKLXMzY19kbWFfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK2RtYV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyByZXM7CiAJZG1hX2FkZHJfdCBzcmMsIGRzdDsKIApAQCAtMzI0LDE3ICszMjQsMTcgQEAKIAlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwgcmVzKTsKIH0KIAotc3RhdGljIGludCBzM2NfZG1hX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzdGF0aWMgaW50IGRtYV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkOworCXN0cnVjdCBydW50aW1lX2RhdGEgKnBydGQ7CiAKIAlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOwotCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmczNjX2RtYV9oYXJkd2FyZSk7CisJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZkbWFfaGFyZHdhcmUpOwogCi0JcHJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSksIEdGUF9LRVJORUwpOworCXBydGQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcnVudGltZV9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBydGQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTM0NCwyMiArMzQ0LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczNjX2RtYV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgZG1hX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAKIAlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKCFwcnRkKQotCQlwcl9kZWJ1ZygiczNjX2RtYV9jbG9zZSBjYWxsZWQgd2l0aCBwcnRkID09IE5VTExcbiIpOworCQlwcl9kZWJ1ZygiZG1hX2Nsb3NlIGNhbGxlZCB3aXRoIHBydGQgPT0gTlVMTFxuIik7CiAKIAlrZnJlZShwcnRkKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzY19kbWFfbW1hcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKK3N0YXRpYyBpbnQgZG1hX21tYXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKQEAgLTM3MiwyMyArMzcyLDIzIEBACiAJCQkJICAgICBydW50aW1lLT5kbWFfYnl0ZXMpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHMzY19kbWFfb3BzID0gewotCS5vcGVuCQk9IHMzY19kbWFfb3BlbiwKLQkuY2xvc2UJCT0gczNjX2RtYV9jbG9zZSwKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgZG1hX29wcyA9IHsKKwkub3BlbgkJPSBkbWFfb3BlbiwKKwkuY2xvc2UJCT0gZG1hX2Nsb3NlLAogCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKLQkuaHdfcGFyYW1zCT0gczNjX2RtYV9od19wYXJhbXMsCi0JLmh3X2ZyZWUJPSBzM2NfZG1hX2h3X2ZyZWUsCi0JLnByZXBhcmUJPSBzM2NfZG1hX3ByZXBhcmUsCi0JLnRyaWdnZXIJPSBzM2NfZG1hX3RyaWdnZXIsCi0JLnBvaW50ZXIJPSBzM2NfZG1hX3BvaW50ZXIsCi0JLm1tYXAJCT0gczNjX2RtYV9tbWFwLAorCS5od19wYXJhbXMJPSBkbWFfaHdfcGFyYW1zLAorCS5od19mcmVlCT0gZG1hX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBkbWFfcHJlcGFyZSwKKwkudHJpZ2dlcgk9IGRtYV90cmlnZ2VyLAorCS5wb2ludGVyCT0gZG1hX3BvaW50ZXIsCisJLm1tYXAJCT0gZG1hX21tYXAsCiB9OwogCi1zdGF0aWMgaW50IHMzY19wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0pCitzdGF0aWMgaW50IHByZWFsbG9jYXRlX2RtYV9idWZmZXIoc3RydWN0IHNuZF9wY20gKnBjbSwgaW50IHN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tzdHJlYW1dLnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZiA9ICZzdWJzdHJlYW0tPmRtYV9idWZmZXI7Ci0Jc2l6ZV90IHNpemUgPSBzM2NfZG1hX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXg7CisJc2l6ZV90IHNpemUgPSBkbWFfaGFyZHdhcmUuYnVmZmVyX2J5dGVzX21heDsKIAogCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTQwMyw3ICs0MDMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzM2NfZG1hX2ZyZWVfZG1hX2J1ZmZlcnMoc3RydWN0IHNuZF9wY20gKnBjbSkKK3N0YXRpYyB2b2lkIGRtYV9mcmVlX2RtYV9idWZmZXJzKHN0cnVjdCBzbmRfcGNtICpwY20pCiB7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWY7CkBAIC00MjYsOSArNDI2LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyB1NjQgczNjX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyB1NjQgZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwogCi1zdGF0aWMgaW50IHMzY19kbWFfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKK3N0YXRpYyBpbnQgZG1hX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCiAJc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHN0cnVjdCBzbmRfcGNtICpwY20pCiB7CiAJaW50IHJldCA9IDA7CkBAIC00MzYsNjcgKzQzNiw2NyBAQAogCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoIWNhcmQtPmRldi0+ZG1hX21hc2spCi0JCWNhcmQtPmRldi0+ZG1hX21hc2sgPSAmczNjX2RtYV9tYXNrOworCQljYXJkLT5kZXYtPmRtYV9tYXNrID0gJmRtYV9tYXNrOwogCWlmICghY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzaykKIAkJY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmY7CiAKIAlpZiAoZGFpLT5kcml2ZXItPnBsYXliYWNrLmNoYW5uZWxzX21pbikgewotCQlyZXQgPSBzM2NfcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCisJCXJldCA9IHByZWFsbG9jYXRlX2RtYV9idWZmZXIocGNtLAogCQkJU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoZGFpLT5kcml2ZXItPmNhcHR1cmUuY2hhbm5lbHNfbWluKSB7Ci0JCXJldCA9IHMzY19wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHBjbSwKKwkJcmV0ID0gcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCiAJCQlTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAJfQotIG91dDoKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfcGxhdGZvcm1fZHJpdmVyIHMzYzI0eHhfc29jX3BsYXRmb3JtID0gewotCS5vcHMJCT0gJnMzY19kbWFfb3BzLAotCS5wY21fbmV3CT0gczNjX2RtYV9uZXcsCi0JLnBjbV9mcmVlCT0gczNjX2RtYV9mcmVlX2RtYV9idWZmZXJzLAorc3RhdGljIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtX2RyaXZlciBzYW1zdW5nX2Fzb2NfcGxhdGZvcm0gPSB7CisJLm9wcwkJPSAmZG1hX29wcywKKwkucGNtX25ldwk9IGRtYV9uZXcsCisJLnBjbV9mcmVlCT0gZG1hX2ZyZWVfZG1hX2J1ZmZlcnMsCiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzM2MyNHh4X3NvY19wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc2Ftc3VuZ19hc29jX3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfcGxhdGZvcm0oJnBkZXYtPmRldiwgJnMzYzI0eHhfc29jX3BsYXRmb3JtKTsKKwlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9wbGF0Zm9ybSgmcGRldi0+ZGV2LCAmc2Ftc3VuZ19hc29jX3BsYXRmb3JtKTsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgczNjMjR4eF9zb2NfcGxhdGZvcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzYW1zdW5nX2Fzb2NfcGxhdGZvcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNHh4X3BjbV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhc29jX2RtYV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiczNjMjR4eC1wY20tYXVkaW8iLAorCQkubmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAotCS5wcm9iZSA9IHMzYzI0eHhfc29jX3BsYXRmb3JtX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzM2MyNHh4X3NvY19wbGF0Zm9ybV9yZW1vdmUpLAorCS5wcm9iZSA9IHNhbXN1bmdfYXNvY19wbGF0Zm9ybV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc2Ftc3VuZ19hc29jX3BsYXRmb3JtX3JlbW92ZSksCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfczNjMjR4eF9wY21faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc2Ftc3VuZ19hc29jX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNHh4X3BjbV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFzb2NfZG1hX2RyaXZlcik7CiB9Ci1tb2R1bGVfaW5pdChzbmRfczNjMjR4eF9wY21faW5pdCk7Cittb2R1bGVfaW5pdChzYW1zdW5nX2Fzb2NfaW5pdCk7CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBzbmRfczNjMjR4eF9wY21fZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNhbXN1bmdfYXNvY19leGl0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0eHhfcGNtX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFzb2NfZG1hX2RyaXZlcik7CiB9Ci1tb2R1bGVfZXhpdChzbmRfczNjMjR4eF9wY21fZXhpdCk7Cittb2R1bGVfZXhpdChzYW1zdW5nX2Fzb2NfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIkJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcgUzNDIEF1ZGlvIERNQSBtb2R1bGUiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBBU29DIERNQSBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjR4eC1wY20tYXVkaW8iKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06c2Ftc3VuZy1hdWRpbyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjLWRtYS5oIGIvc291bmQvc29jL3NhbXN1bmcvZG1hLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gc291bmQvc29jL3MzYzI0eHgvczNjLWRtYS5oCnJlbmFtZSB0byBzb3VuZC9zb2Mvc2Ftc3VuZy9kbWEuaAppbmRleCA3NDhjMDdkLi5mOGNkMmI0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtZG1hLmgKKysrIGIvc291bmQvc29jL3NhbXN1bmcvZG1hLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogIHMzYy1kbWEuaCAtLQorICogIGRtYS5oIC0tCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvZ29uaV93bTg5OTQuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2dvbmlfd204OTk0LmMKc2ltaWxhcml0eSBpbmRleCA4MyUKcmVuYW1lIGZyb20gc291bmQvc29jL3MzYzI0eHgvZ29uaV93bTg5OTQuYwpyZW5hbWUgdG8gc291bmQvc29jL3NhbXN1bmcvZ29uaV93bTg5OTQuYwppbmRleCA2OTRmNzAyLi4zNGRkOWVmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9nb25pX3dtODk5NC5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL2dvbmlfd204OTk0LmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvamFjay5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CkBAIC0yNSw4ICsyNCwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvcmVnaXN0ZXJzLmg+CiAjaW5jbHVkZSAiLi4vY29kZWNzL3dtODk5NC5oIgotI2luY2x1ZGUgInMzYy1kbWEuaCIKLSNpbmNsdWRlICJzM2M2NHh4LWkycy5oIgorI2luY2x1ZGUgImRtYS5oIgorI2luY2x1ZGUgImkycy5oIgorCisjZGVmaW5lIE1BQ0hJTkVfTkFNRQkwCisjZGVmaW5lIENQVV9WT0lDRV9EQUkJMQorCitzdGF0aWMgY29uc3QgY2hhciAqYXF1aWxhX3N0cltdID0geworCVtNQUNISU5FX05BTUVdID0gImFxdWlsYSIsCisJW0NQVV9WT0lDRV9EQUldID0gImFxdWlsYS12b2ljZS1kYWkiLAorfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZ29uaTsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnb25pX3NuZF9kZXZpY2U7CkBAIC05NywyOCArMTA0LDM0IEBACiBzdGF0aWMgaW50IGdvbmlfd204OTk0X2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlpbnQgcmV0OwogCiAJLyogYWRkIGdvbmkgc3BlY2lmaWMgd2lkZ2V0cyAqLwotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGdvbmlfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgZ29uaV9kYXBtX3dpZGdldHMsCiAJCQlBUlJBWV9TSVpFKGdvbmlfZGFwbV93aWRnZXRzKSk7CiAKIAkvKiBzZXQgdXAgZ29uaSBzcGVjaWZpYyBhdWRpbyByb3V0ZXMgKi8KLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgZ29uaV9kYXBtX3JvdXRlcywKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBnb25pX2RhcG1fcm91dGVzLAogCQkJQVJSQVlfU0laRShnb25pX2RhcG1fcm91dGVzKSk7CiAKIAkvKiBzZXQgZW5kcG9pbnRzIHRvIG5vdCBjb25uZWN0ZWQgKi8KLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSU4yTFA6VlhSTiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJJTjJSUDpWWFJQIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVPVVQxTiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FT1VUMVAiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORU9VVDJOIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVPVVQyUCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIklOMkxQOlZYUk4iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJJTjJSUDpWWFJQIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORU9VVDFOIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORU9VVDFQIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORU9VVDJOIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORU9VVDJQIik7CiAKLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJaWYgKG1hY2hpbmVfaXNfYXF1aWxhKCkpIHsKKwkJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiU1BLT1VUUk4iKTsKKwkJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiU1BLT1VUUlAiKTsKKwl9CisKKwlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIAogCS8qIEhlYWRzZXQgamFjayBkZXRlY3Rpb24gKi8KLQlyZXQgPSBzbmRfc29jX2phY2tfbmV3KCZnb25pLCAiSGVhZHNldCBKYWNrIiwKKwlyZXQgPSBzbmRfc29jX2phY2tfbmV3KGNvZGVjLCAiSGVhZHNldCBKYWNrIiwKIAkJCVNORF9KQUNLX0hFQURTRVQgfCBTTkRfSkFDS19NRUNIQU5JQ0FMIHwgU05EX0pBQ0tfQVZPVVQsCiAJCQkmamFjayk7CiAJaWYgKHJldCkKQEAgLTE1MCwxMiArMTYzLDYgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIHNldCB0aGUgY3B1IHN5c3RlbSBjbG9jayAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUzNDNjRYWF9DTEtTUkNfUENMSywKLQkJCTAsIFNORF9TT0NfQ0xPQ0tfSU4pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCiAJLyogc2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCiAJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8CiAJCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOwpAQCAtMjM2LDkgKzI0Myw5IEBACiB7CiAJLm5hbWUgPSAiV004OTk0IiwKIAkuc3RyZWFtX25hbWUgPSAiV004OTk0IEhpRmkiLAotCS5jcHVfZGFpX25hbWUgPSAiczNjNjR4eC1pMnMtdjQiLAorCS5jcHVfZGFpX25hbWUgPSAic2Ftc3VuZy1pMnMuMCIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODk5NC1oaWZpIiwKLQkucGxhdGZvcm1fbmFtZSA9ICJzM2MyNHh4LXBjbS1hdWRpbyIsCisJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCiAJLmNvZGVjX25hbWUgPSAid204OTk0LWNvZGVjLjAtMHgxYSIsCiAJLmluaXQgPSBnb25pX3dtODk5NF9pbml0LAogCS5vcHMgPSAmZ29uaV9oaWZpX29wcywKQEAgLTI0Nyw3ICsyNTQsNyBAQAogCS5zdHJlYW1fbmFtZSA9ICJWb2ljZSIsCiAJLmNwdV9kYWlfbmFtZSA9ICJnb25pLXZvaWNlLWRhaSIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODk5NC12b2ljZSIsCi0JLnBsYXRmb3JtX25hbWUgPSAiczNjMjR4eC1wY20tYXVkaW8iLAorCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAogCS5jb2RlY19uYW1lID0gIndtODk5NC1jb2RlYy4wLTB4MWEiLAogCS5vcHMgPSAmZ29uaV92b2ljZV9vcHMsCiB9LApAQCAtMjYzLDcgKzI3MCwxMSBAQAogewogCWludCByZXQ7CiAKLQlpZiAoIW1hY2hpbmVfaXNfZ29uaSgpKQorCWlmIChtYWNoaW5lX2lzX2FxdWlsYSgpKSB7CisJCXZvaWNlX2RhaS5uYW1lID0gYXF1aWxhX3N0cltDUFVfVk9JQ0VfREFJXTsKKwkJZ29uaV9kYWlbMV0uY3B1X2RhaV9uYW1lID0gYXF1aWxhX3N0cltDUFVfVk9JQ0VfREFJXTsKKwkJZ29uaS5uYW1lID0gYXF1aWxhX3N0cltNQUNISU5FX05BTUVdOworCX0gZWxzZSBpZiAoIW1hY2hpbmVfaXNfZ29uaSgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWdvbmlfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwpAQCAtMjcyLDIwICsyODMsMjUgQEAKIAogCS8qIHJlZ2lzdGVyIHZvaWNlIERBSSBoZXJlICovCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJmdvbmlfc25kX2RldmljZS0+ZGV2LCAmdm9pY2VfZGFpKTsKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChnb25pX3NuZF9kZXZpY2UpOwogCQlyZXR1cm4gcmV0OworCX0KIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKGdvbmlfc25kX2RldmljZSwgJmdvbmkpOwogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoZ29uaV9zbmRfZGV2aWNlKTsKIAotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZnb25pX3NuZF9kZXZpY2UtPmRldik7CiAJCXBsYXRmb3JtX2RldmljZV9wdXQoZ29uaV9zbmRfZGV2aWNlKTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZ29uaV9leGl0KHZvaWQpCiB7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmZ29uaV9zbmRfZGV2aWNlLT5kZXYpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGdvbmlfc25kX2RldmljZSk7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2gxOTQwX3VkYTEzODAuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2gxOTQwX3VkYTEzODAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDVmN2NlCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NhbXN1bmcvaDE5NDBfdWRhMTM4MC5jCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogaDE5NDAtdWRhMTM4MC5jICAtLSAgQUxTQSBTb2MgQXVkaW8gTGF5ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgQXJuYXVkIFBhdGFyZCA8YXJuYXVkLnBhdGFyZEBydHAtbmV0Lm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAxMCBWYXNpbHkgS2hvcnV6aGljayA8YW5hcnNvdWxAZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIHZlcnNpb24gZnJvbSBBcm5hdWQgUGF0YXJkIDxhcm5hdWQucGF0YXJkQHJ0cC1uZXQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3VkYTEzODAuaD4KKyNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CisKKyNpbmNsdWRlIDxtYWNoL2gxOTQwLWxhdGNoLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSAiZG1hLmgiCisjaW5jbHVkZSAiczNjMjR4eC1pMnMuaCIKKyNpbmNsdWRlICIuLi9jb2RlY3MvdWRhMTM4MC5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IHJhdGVzW10gPSB7CisJMTEwMjUsCisJMjIwNTAsCisJNDQxMDAsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IGh3X3JhdGVzID0geworCS5jb3VudCA9IEFSUkFZX1NJWkUocmF0ZXMpLAorCS5saXN0ID0gcmF0ZXMsCisJLm1hc2sgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2sgaHBfamFjazsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfcGluIGhwX2phY2tfcGluc1tdID0geworCXsKKwkJLnBpbgk9ICJIZWFkcGhvbmUgSmFjayIsCisJCS5tYXNrCT0gU05EX0pBQ0tfSEVBRFBIT05FLAorCX0sCisJeworCQkucGluCT0gIlNwZWFrZXIiLAorCQkubWFzawk9IFNORF9KQUNLX0hFQURQSE9ORSwKKwkJLmludmVydAk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gaHBfamFja19ncGlvc1tdID0geworCXsKKwkJLmdwaW8JCQk9IFMzQzI0MTBfR1BHKDQpLAorCQkubmFtZQkJCT0gImhwLWdwaW8iLAorCQkucmVwb3J0CQkJPSBTTkRfSkFDS19IRUFEUEhPTkUsCisJCS5pbnZlcnQJCQk9IDEsCisJCS5kZWJvdW5jZV90aW1lCQk9IDIwMCwKKwl9LAorfTsKKworc3RhdGljIGludCBoMTk0MF9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwlydW50aW1lLT5ody5yYXRlX21pbiA9IGh3X3JhdGVzLmxpc3RbMF07CisJcnVudGltZS0+aHcucmF0ZV9tYXggPSBod19yYXRlcy5saXN0W2h3X3JhdGVzLmNvdW50IC0gMV07CisJcnVudGltZS0+aHcucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9LTk9UOworCisJcmV0dXJuIHNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsCisJCQkJCVNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAorCQkJCQkmaHdfcmF0ZXMpOworfQorCitzdGF0aWMgaW50IGgxOTQwX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CisJaW50IGRpdjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgMTEwMjU6CisJY2FzZSAyMjA1MDoKKwljYXNlIDQ0MTAwOgorCQlkaXYgPSBzM2MyNHh4X2kyc19nZXRfY2xvY2tyYXRlKCkgLyAoMzg0ICogcmF0ZSk7CisJCWlmIChzM2MyNHh4X2kyc19nZXRfY2xvY2tyYXRlKCkgJSAoMzg0ICogcmF0ZSkgPiAoMTkyICogcmF0ZSkpCisJCQlkaXYrKzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmcnRkLT5kZXYsICIlczogcmF0ZSAlZCBpcyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJX19mdW5jX18sIHJhdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKKwkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8CisJCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBzZWxlY3QgY2xvY2sgc291cmNlICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBTM0MyNFhYX0NMS1NSQ19QQ0xLLCByYXRlLAorCQkJU05EX1NPQ19DTE9DS19PVVQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogc2V0IE1DTEsgZGl2aXNpb24gZm9yIHNhbXBsZSByYXRlICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2RpdihjcHVfZGFpLCBTM0MyNFhYX0RJVl9NQ0xLLAorCQlTM0MyNDEwX0lJU01PRF8zODRGUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBzZXQgQkNMSyBkaXZpc2lvbiBmb3Igc2FtcGxlIHJhdGUgKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksIFMzQzI0WFhfRElWX0JDTEssCisJCVMzQzI0MTBfSUlTTU9EXzMyRlMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogc2V0IHByZXNjYWxlciBkaXZpc2lvbiBmb3Igc2FtcGxlIHJhdGUgKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksIFMzQzI0WFhfRElWX1BSRVNDQUxFUiwKKwkJUzNDMjRYWF9QUkVTQ0FMRShkaXYsIGRpdikpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgaDE5NDBfb3BzID0geworCS5zdGFydHVwCT0gaDE5NDBfc3RhcnR1cCwKKwkuaHdfcGFyYW1zCT0gaDE5NDBfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIGludCBoMTk0MF9zcGtfcG93ZXIoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlpZiAoU05EX1NPQ19EQVBNX0VWRU5UX09OKGV2ZW50KSkKKwkJZ3Bpb19zZXRfdmFsdWUoSDE5NDBfTEFUQ0hfQVVESU9fUE9XRVIsIDEpOworCWVsc2UKKwkJZ3Bpb19zZXRfdmFsdWUoSDE5NDBfTEFUQ0hfQVVESU9fUE9XRVIsIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGgxOTQwIG1hY2hpbmUgZGFwbSB3aWRnZXRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgdWRhMTM4MF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJTcGVha2VyIiwgaDE5NDBfc3BrX3Bvd2VyKSwKK307CisKKy8qIGgxOTQwIG1hY2hpbmUgYXVkaW9fbWFwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwkvKiBoZWFkcGhvbmUgY29ubmVjdGVkIHRvIFZPVVRMSFAsIFZPVVRSSFAgKi8KKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIlZPVVRMSFAifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIlZPVVRSSFAifSwKKworCS8qIGV4dCBzcGVha2VyIGNvbm5lY3RlZCB0byBWT1VUTCwgVk9VVFIgICovCisJeyJTcGVha2VyIiwgTlVMTCwgIlZPVVRMIn0sCisJeyJTcGVha2VyIiwgTlVMTCwgIlZPVVRSIn0sCisKKwkvKiBtaWMgaXMgY29ubmVjdGVkIHRvIFZJTk0gKi8KKwl7IlZJTk0iLCBOVUxMLCAiTWljIEphY2sifSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzM2MyNHh4X3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgaDE5NDBfdWRhMTM4MF9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CisJaW50IGVycjsKKworCS8qIEFkZCBoMTk0MCBzcGVjaWZpYyB3aWRnZXRzICovCisJZXJyID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB1ZGExMzgwX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUodWRhMTM4MF9kYXBtX3dpZGdldHMpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogU2V0IHVwIGgxOTQwIHNwZWNpZmljIGF1ZGlvIHBhdGggYXVkaW9fbWFwbmVjdHMgKi8KKwllcnIgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsCisJCQkJICAgICAgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkhlYWRwaG9uZSBKYWNrIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIlNwZWFrZXIiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiTWljIEphY2siKTsKKworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOworCisJc25kX3NvY19qYWNrX25ldyhjb2RlYywgIkhlYWRwaG9uZSBKYWNrIiwgU05EX0pBQ0tfSEVBRFBIT05FLAorCQkmaHBfamFjayk7CisKKwlzbmRfc29jX2phY2tfYWRkX3BpbnMoJmhwX2phY2ssIEFSUkFZX1NJWkUoaHBfamFja19waW5zKSwKKwkJaHBfamFja19waW5zKTsKKworCXNuZF9zb2NfamFja19hZGRfZ3Bpb3MoJmhwX2phY2ssIEFSUkFZX1NJWkUoaHBfamFja19ncGlvcyksCisJCWhwX2phY2tfZ3Bpb3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHMzYzI0eHggZGlnaXRhbCBhdWRpbyBpbnRlcmZhY2UgZ2x1ZSAtIGNvbm5lY3RzIGNvZGVjIDwtLT4gQ1BVICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgaDE5NDBfdWRhMTM4MF9kYWlbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJ1ZGExMzgwIiwKKwkJLnN0cmVhbV9uYW1lCT0gIlVEQTEzODAgRHVwbGV4IiwKKwkJLmNwdV9kYWlfbmFtZQk9ICJzM2MyNHh4LWlpcyIsCisJCS5jb2RlY19kYWlfbmFtZQk9ICJ1ZGExMzgwLWhpZmkiLAorCQkuaW5pdAkJPSBoMTk0MF91ZGExMzgwX2luaXQsCisJCS5wbGF0Zm9ybV9uYW1lCT0gInNhbXN1bmctYXVkaW8iLAorCQkuY29kZWNfbmFtZQk9ICJ1ZGExMzgwLWNvZGVjLjAtMDAxYSIsCisJCS5vcHMJCT0gJmgxOTQwX29wcywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgaDE5NDBfYXNvYyA9IHsKKwkubmFtZSA9ICJoMTk0MCIsCisJLmRhaV9saW5rID0gaDE5NDBfdWRhMTM4MF9kYWksCisJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUoaDE5NDBfdWRhMTM4MF9kYWkpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaDE5NDBfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfaDE5NDAoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBjb25maWd1cmUgc29tZSBncGlvcyAqLworCXJldCA9IGdwaW9fcmVxdWVzdChIMTk0MF9MQVRDSF9BVURJT19QT1dFUiwgInNwZWFrZXItcG93ZXIiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9vdXQ7CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoSDE5NDBfTEFUQ0hfQVVESU9fUE9XRVIsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dwaW87CisKKwlzM2MyNHh4X3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIXMzYzI0eHhfc25kX2RldmljZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9ncGlvOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHMzYzI0eHhfc25kX2RldmljZSwgJmgxOTQwX2Fzb2MpOworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoczNjMjR4eF9zbmRfZGV2aWNlKTsKKworCWlmIChyZXQpCisJCWdvdG8gZXJyX3BsYXQ7CisKKwlyZXR1cm4gMDsKKworZXJyX3BsYXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChzM2MyNHh4X3NuZF9kZXZpY2UpOworZXJyX2dwaW86CisJZ3Bpb19mcmVlKEgxOTQwX0xBVENIX0FVRElPX1BPV0VSKTsKKworZXJyX291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaDE5NDBfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHMzYzI0eHhfc25kX2RldmljZSk7CisJc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3MoJmhwX2phY2ssIEFSUkFZX1NJWkUoaHBfamFja19ncGlvcyksCisJCWhwX2phY2tfZ3Bpb3MpOworCWdwaW9fZnJlZShIMTk0MF9MQVRDSF9BVURJT19QT1dFUik7Cit9CisKK21vZHVsZV9pbml0KGgxOTQwX2luaXQpOworbW9kdWxlX2V4aXQoaDE5NDBfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiQXJuYXVkIFBhdGFyZCwgVmFzaWx5IEtob3J1emhpY2siKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgSDE5NDAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jIGIvc291bmQvc29jL3NhbXN1bmcvaTJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwYWMzYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jCkBAIC0wLDAgKzEsMTI1OCBAQAorLyogc291bmQvc29jL3NhbXN1bmcvaTJzLmMKKyAqCisgKiBBTFNBIFNvQyBBdWRpbyBMYXllciAtIFNhbXN1bmcgSTJTIENvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uIEx0ZC4KKyAqCUphc3dpbmRlciBTaW5naCA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgorCisjaW5jbHVkZSAiZG1hLmgiCisjaW5jbHVkZSAiaTJzLmgiCisKKyNkZWZpbmUgSTJTQ09OCQkweDAKKyNkZWZpbmUgSTJTTU9ECQkweDQKKyNkZWZpbmUgSTJTRklDCQkweDgKKyNkZWZpbmUgSTJTUFNSCQkweGMKKyNkZWZpbmUgSTJTVFhECQkweDEwCisjZGVmaW5lIEkyU1JYRAkJMHgxNAorI2RlZmluZSBJMlNGSUNTCQkweDE4CisjZGVmaW5lIEkyU1RYRFMJCTB4MWMKKworI2RlZmluZSBDT05fUlNUQ0xSCQkoMSA8PCAzMSkKKyNkZWZpbmUgQ09OX0ZSWE9GU1RBVFVTCQkoMSA8PCAyNikKKyNkZWZpbmUgQ09OX0ZSWE9SSU5URU4JCSgxIDw8IDI1KQorI2RlZmluZSBDT05fRlRYU1VSU1RBVAkJKDEgPDwgMjQpCisjZGVmaW5lIENPTl9GVFhTVVJJTlRFTgkJKDEgPDwgMjMpCisjZGVmaW5lIENPTl9UWFNETUFfUEFVU0UJKDEgPDwgMjApCisjZGVmaW5lIENPTl9UWFNETUFfQUNUSVZFCSgxIDw8IDE4KQorCisjZGVmaW5lIENPTl9GVFhVUlNUQVRVUwkJKDEgPDwgMTcpCisjZGVmaW5lIENPTl9GVFhVUklOVEVOCQkoMSA8PCAxNikKKyNkZWZpbmUgQ09OX1RYRklGTzJfRU1QVFkJKDEgPDwgMTUpCisjZGVmaW5lIENPTl9UWEZJRk8xX0VNUFRZCSgxIDw8IDE0KQorI2RlZmluZSBDT05fVFhGSUZPMl9GVUxMCSgxIDw8IDEzKQorI2RlZmluZSBDT05fVFhGSUZPMV9GVUxMCSgxIDw8IDEyKQorCisjZGVmaW5lIENPTl9MUklOREVYCQkoMSA8PCAxMSkKKyNkZWZpbmUgQ09OX1RYRklGT19FTVBUWQkoMSA8PCAxMCkKKyNkZWZpbmUgQ09OX1JYRklGT19FTVBUWQkoMSA8PCA5KQorI2RlZmluZSBDT05fVFhGSUZPX0ZVTEwJCSgxIDw8IDgpCisjZGVmaW5lIENPTl9SWEZJRk9fRlVMTAkJKDEgPDwgNykKKyNkZWZpbmUgQ09OX1RYRE1BX1BBVVNFCQkoMSA8PCA2KQorI2RlZmluZSBDT05fUlhETUFfUEFVU0UJCSgxIDw8IDUpCisjZGVmaW5lIENPTl9UWENIX1BBVVNFCQkoMSA8PCA0KQorI2RlZmluZSBDT05fUlhDSF9QQVVTRQkJKDEgPDwgMykKKyNkZWZpbmUgQ09OX1RYRE1BX0FDVElWRQkoMSA8PCAyKQorI2RlZmluZSBDT05fUlhETUFfQUNUSVZFCSgxIDw8IDEpCisjZGVmaW5lIENPTl9BQ1RJVkUJCSgxIDw8IDApCisKKyNkZWZpbmUgTU9EX09QQ0xLX0NEQ0xLX09VVAkoMCA8PCAzMCkKKyNkZWZpbmUgTU9EX09QQ0xLX0NEQ0xLX0lOCSgxIDw8IDMwKQorI2RlZmluZSBNT0RfT1BDTEtfQkNMS19PVVQJKDIgPDwgMzApCisjZGVmaW5lIE1PRF9PUENMS19QQ0xLCQkoMyA8PCAzMCkKKyNkZWZpbmUgTU9EX09QQ0xLX01BU0sJCSgzIDw8IDMwKQorI2RlZmluZSBNT0RfVFhTX0lETUEJCSgxIDw8IDI4KSAvKiBTZWNfVFhGSUZPIHVzZSBJLURNQSAqLworCisjZGVmaW5lIE1PRF9CTENTX1NISUZUCTI2CisjZGVmaW5lIE1PRF9CTENTXzE2QklUCSgwIDw8IE1PRF9CTENTX1NISUZUKQorI2RlZmluZSBNT0RfQkxDU184QklUCSgxIDw8IE1PRF9CTENTX1NISUZUKQorI2RlZmluZSBNT0RfQkxDU18yNEJJVAkoMiA8PCBNT0RfQkxDU19TSElGVCkKKyNkZWZpbmUgTU9EX0JMQ1NfTUFTSwkoMyA8PCBNT0RfQkxDU19TSElGVCkKKyNkZWZpbmUgTU9EX0JMQ1BfU0hJRlQJMjQKKyNkZWZpbmUgTU9EX0JMQ1BfMTZCSVQJKDAgPDwgTU9EX0JMQ1BfU0hJRlQpCisjZGVmaW5lIE1PRF9CTENQXzhCSVQJKDEgPDwgTU9EX0JMQ1BfU0hJRlQpCisjZGVmaW5lIE1PRF9CTENQXzI0QklUCSgyIDw8IE1PRF9CTENQX1NISUZUKQorI2RlZmluZSBNT0RfQkxDUF9NQVNLCSgzIDw8IE1PRF9CTENQX1NISUZUKQorCisjZGVmaW5lIE1PRF9DMkREX0hIQUxGCQkoMSA8PCAyMSkgLyogRGlzY2FyZCBIaWdoZXItaGFsZiAqLworI2RlZmluZSBNT0RfQzJERF9MSEFMRgkJKDEgPDwgMjApIC8qIERpc2NhcmQgTG93ZXItaGFsZiAqLworI2RlZmluZSBNT0RfQzFERF9ISEFMRgkJKDEgPDwgMTkpCisjZGVmaW5lIE1PRF9DMUREX0xIQUxGCQkoMSA8PCAxOCkKKyNkZWZpbmUgTU9EX0RDMl9FTgkJKDEgPDwgMTcpCisjZGVmaW5lIE1PRF9EQzFfRU4JCSgxIDw8IDE2KQorI2RlZmluZSBNT0RfQkxDXzE2QklUCQkoMCA8PCAxMykKKyNkZWZpbmUgTU9EX0JMQ184QklUCQkoMSA8PCAxMykKKyNkZWZpbmUgTU9EX0JMQ18yNEJJVAkJKDIgPDwgMTMpCisjZGVmaW5lIE1PRF9CTENfTUFTSwkJKDMgPDwgMTMpCisKKyNkZWZpbmUgTU9EX0lNU19TWVNNVVgJCSgxIDw8IDEwKQorI2RlZmluZSBNT0RfU0xBVkUJCSgxIDw8IDExKQorI2RlZmluZSBNT0RfVFhPTkxZCQkoMCA8PCA4KQorI2RlZmluZSBNT0RfUlhPTkxZCQkoMSA8PCA4KQorI2RlZmluZSBNT0RfVFhSWAkJKDIgPDwgOCkKKyNkZWZpbmUgTU9EX01BU0sJCSgzIDw8IDgpCisjZGVmaW5lIE1PRF9MUl9MTE9XCQkoMCA8PCA3KQorI2RlZmluZSBNT0RfTFJfUkxPVwkJKDEgPDwgNykKKyNkZWZpbmUgTU9EX1NERl9JSVMJCSgwIDw8IDUpCisjZGVmaW5lIE1PRF9TREZfTVNCCQkoMSA8PCA1KQorI2RlZmluZSBNT0RfU0RGX0xTQgkJKDIgPDwgNSkKKyNkZWZpbmUgTU9EX1NERl9NQVNLCQkoMyA8PCA1KQorI2RlZmluZSBNT0RfUkNMS18yNTZGUwkJKDAgPDwgMykKKyNkZWZpbmUgTU9EX1JDTEtfNTEyRlMJCSgxIDw8IDMpCisjZGVmaW5lIE1PRF9SQ0xLXzM4NEZTCQkoMiA8PCAzKQorI2RlZmluZSBNT0RfUkNMS183NjhGUwkJKDMgPDwgMykKKyNkZWZpbmUgTU9EX1JDTEtfTUFTSwkJKDMgPDwgMykKKyNkZWZpbmUgTU9EX0JDTEtfMzJGUwkJKDAgPDwgMSkKKyNkZWZpbmUgTU9EX0JDTEtfNDhGUwkJKDEgPDwgMSkKKyNkZWZpbmUgTU9EX0JDTEtfMTZGUwkJKDIgPDwgMSkKKyNkZWZpbmUgTU9EX0JDTEtfMjRGUwkJKDMgPDwgMSkKKyNkZWZpbmUgTU9EX0JDTEtfTUFTSwkJKDMgPDwgMSkKKyNkZWZpbmUgTU9EXzhCSVQJCSgxIDw8IDApCisKKyNkZWZpbmUgTU9EX0NEQ0xLQ09OCQkoMSA8PCAxMikKKworI2RlZmluZSBQU1JfUFNSRU4JCSgxIDw8IDE1KQorCisjZGVmaW5lIEZJQ19UWDJDT1VOVCh4KQkJKCgoeCkgPj4gIDI0KSAmIDB4ZikKKyNkZWZpbmUgRklDX1RYMUNPVU5UKHgpCQkoKCh4KSA+PiAgMTYpICYgMHhmKQorCisjZGVmaW5lIEZJQ19UWEZMVVNICQkoMSA8PCAxNSkKKyNkZWZpbmUgRklDX1JYRkxVU0gJCSgxIDw8IDcpCisjZGVmaW5lIEZJQ19UWENPVU5UKHgpCQkoKCh4KSA+PiAgOCkgJiAweGYpCisjZGVmaW5lIEZJQ19SWENPVU5UKHgpCQkoKCh4KSA+PiAgMCkgJiAweGYpCisjZGVmaW5lIEZJQ1NfVFhDT1VOVCh4KQkJKCgoeCkgPj4gIDgpICYgMHg3ZikKKworI2RlZmluZSBtc2Vjc190b19sb29wcyh0KSAobG9vcHNfcGVyX2ppZmZ5IC8gMTAwMCAqIEhaICogdCkKKworc3RydWN0IGkyc19kYWkgeworCS8qIFBsYXRmb3JtIGRldmljZSBmb3IgdGhpcyBEQUkgKi8KKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCS8qIElPUkVNQVAnZCBTRlJzICovCisJdm9pZCBfX2lvbWVtCSphZGRyOworCS8qIFBoeXNpY2FsIGJhc2UgYWRkcmVzcyBvZiBTRlJzICovCisJdTMyCWJhc2U7CisJLyogUmF0ZSBvZiBSQ0xLIHNvdXJjZSBjbG9jayAqLworCXVuc2lnbmVkIGxvbmcgcmNsa19zcmNyYXRlOworCS8qIEZyYW1lIENsb2NrICovCisJdW5zaWduZWQgZnJtY2xrOworCS8qCisJICogU3BlY2lmaWNhbGx5IHJlcXVlc3RlZCBSQ0xLLEJDTEsgYnkgTUFDSElORSBEcml2ZXIuCisJICogMCBpbmRpY2F0ZXMgQ1BVIGRyaXZlciBpcyBmcmVlIHRvIGNob29zZSBhbnkgdmFsdWUuCisJICovCisJdW5zaWduZWQgcmZzLCBiZnM7CisJLyogSTJTIENvbnRyb2xsZXIncyBjb3JlIGNsb2NrICovCisJc3RydWN0IGNsayAqY2xrOworCS8qIENsb2NrIGZvciBnZW5lcmF0aW5nIEkyUyBzaWduYWxzICovCisJc3RydWN0IGNsayAqb3BfY2xrOworCS8qIEFycmF5IG9mIGNsb2NrIG5hbWVzIGZvciBvcF9jbGsgKi8KKwljb25zdCBjaGFyICoqc3JjX2NsazsKKwkvKiBQb2ludGVyIHRvIHRoZSBQcmltYXJ5X0ZpZm8gaWYgdGhpcyBpcyBTZWNfRmlmbywgTlVMTCBvdGhlcndpc2UgKi8KKwlzdHJ1Y3QgaTJzX2RhaSAqcHJpX2RhaTsKKwkvKiBQb2ludGVyIHRvIHRoZSBTZWNvbmRhcnlfRmlmbyBpZiBpdCBoYXMgb25lLCBOVUxMIG90aGVyd2lzZSAqLworCXN0cnVjdCBpMnNfZGFpICpzZWNfZGFpOworI2RlZmluZSBEQUlfT1BFTkVECSgxIDw8IDApIC8qIERhaSBpcyBvcGVuZWQgKi8KKyNkZWZpbmUgREFJX01BTkFHRVIJKDEgPDwgMSkgLyogRGFpIGlzIHRoZSBtYW5hZ2VyICovCisJdW5zaWduZWQgbW9kZTsKKwkvKiBEcml2ZXIgZm9yIHRoaXMgREFJICovCisJc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBpMnNfZGFpX2RydjsKKwkvKiBETUEgcGFyYW1ldGVycyAqLworCXN0cnVjdCBzM2NfZG1hX3BhcmFtcyBkbWFfcGxheWJhY2s7CisJc3RydWN0IHMzY19kbWFfcGFyYW1zIGRtYV9jYXB0dXJlOworCXUzMglxdWlya3M7CisJdTMyCXN1c3BlbmRfaTJzbW9kOworCXUzMglzdXNwZW5kX2kyc2NvbjsKKwl1MzIJc3VzcGVuZF9pMnNwc3I7Cit9OworCisvKiBMb2NrIGZvciBjcm9zcyBpL2YgY2hlY2tzICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvY2spOworCisvKiBJZiB0aGlzIGlzIHRoZSAnb3ZlcmxheScgc3RlcmVvIERBSSAqLworc3RhdGljIGlubGluZSBib29sIGlzX3NlY29uZGFyeShzdHJ1Y3QgaTJzX2RhaSAqaTJzKQoreworCXJldHVybiBpMnMtPnByaV9kYWkgPyB0cnVlIDogZmFsc2U7Cit9CisKKy8qIElmIG9wZXJhdGluZyBpbiBTb0MtU2xhdmUgbW9kZSAqLworc3RhdGljIGlubGluZSBib29sIGlzX3NsYXZlKHN0cnVjdCBpMnNfZGFpICppMnMpCit7CisJcmV0dXJuIChyZWFkbChpMnMtPmFkZHIgKyBJMlNNT0QpICYgTU9EX1NMQVZFKSA/IHRydWUgOiBmYWxzZTsKK30KKworLyogSWYgdGhpcyBpbnRlcmZhY2Ugb2YgdGhlIGNvbnRyb2xsZXIgaXMgdHJhbnNtaXR0aW5nIGRhdGEgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB0eF9hY3RpdmUoc3RydWN0IGkyc19kYWkgKmkycykKK3sKKwl1MzIgYWN0aXZlOworCisJaWYgKCFpMnMpCisJCXJldHVybiBmYWxzZTsKKworCWFjdGl2ZSA9IHJlYWRsKGkycy0+YWRkciArIEkyU01PRCk7CisKKwlpZiAoaXNfc2Vjb25kYXJ5KGkycykpCisJCWFjdGl2ZSAmPSBDT05fVFhTRE1BX0FDVElWRTsKKwllbHNlCisJCWFjdGl2ZSAmPSBDT05fVFhETUFfQUNUSVZFOworCisJcmV0dXJuIGFjdGl2ZSA/IHRydWUgOiBmYWxzZTsKK30KKworLyogSWYgdGhlIG90aGVyIGludGVyZmFjZSBvZiB0aGUgY29udHJvbGxlciBpcyB0cmFuc21pdHRpbmcgZGF0YSAqLworc3RhdGljIGlubGluZSBib29sIG90aGVyX3R4X2FjdGl2ZShzdHJ1Y3QgaTJzX2RhaSAqaTJzKQoreworCXN0cnVjdCBpMnNfZGFpICpvdGhlciA9IGkycy0+cHJpX2RhaSA/IDogaTJzLT5zZWNfZGFpOworCisJcmV0dXJuIHR4X2FjdGl2ZShvdGhlcik7Cit9CisKKy8qIElmIGFueSBpbnRlcmZhY2Ugb2YgdGhlIGNvbnRyb2xsZXIgaXMgdHJhbnNtaXR0aW5nIGRhdGEgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBhbnlfdHhfYWN0aXZlKHN0cnVjdCBpMnNfZGFpICppMnMpCit7CisJcmV0dXJuIHR4X2FjdGl2ZShpMnMpIHx8IG90aGVyX3R4X2FjdGl2ZShpMnMpOworfQorCisvKiBJZiB0aGlzIGludGVyZmFjZSBvZiB0aGUgY29udHJvbGxlciBpcyByZWNlaXZpbmcgZGF0YSAqLworc3RhdGljIGlubGluZSBib29sIHJ4X2FjdGl2ZShzdHJ1Y3QgaTJzX2RhaSAqaTJzKQoreworCXUzMiBhY3RpdmU7CisKKwlpZiAoIWkycykKKwkJcmV0dXJuIGZhbHNlOworCisJYWN0aXZlID0gcmVhZGwoaTJzLT5hZGRyICsgSTJTTU9EKSAmIENPTl9SWERNQV9BQ1RJVkU7CisKKwlyZXR1cm4gYWN0aXZlID8gdHJ1ZSA6IGZhbHNlOworfQorCisvKiBJZiB0aGUgb3RoZXIgaW50ZXJmYWNlIG9mIHRoZSBjb250cm9sbGVyIGlzIHJlY2VpdmluZyBkYXRhICovCitzdGF0aWMgaW5saW5lIGJvb2wgb3RoZXJfcnhfYWN0aXZlKHN0cnVjdCBpMnNfZGFpICppMnMpCit7CisJc3RydWN0IGkyc19kYWkgKm90aGVyID0gaTJzLT5wcmlfZGFpID8gOiBpMnMtPnNlY19kYWk7CisKKwlyZXR1cm4gcnhfYWN0aXZlKG90aGVyKTsKK30KKworLyogSWYgYW55IGludGVyZmFjZSBvZiB0aGUgY29udHJvbGxlciBpcyByZWNlaXZpbmcgZGF0YSAqLworc3RhdGljIGlubGluZSBib29sIGFueV9yeF9hY3RpdmUoc3RydWN0IGkyc19kYWkgKmkycykKK3sKKwlyZXR1cm4gcnhfYWN0aXZlKGkycykgfHwgb3RoZXJfcnhfYWN0aXZlKGkycyk7Cit9CisKKy8qIElmIHRoZSBvdGhlciBEQUkgaXMgdHJhbnNtaXR0aW5nIG9yIHJlY2VpdmluZyBkYXRhICovCitzdGF0aWMgaW5saW5lIGJvb2wgb3RoZXJfYWN0aXZlKHN0cnVjdCBpMnNfZGFpICppMnMpCit7CisJcmV0dXJuIG90aGVyX3J4X2FjdGl2ZShpMnMpIHx8IG90aGVyX3R4X2FjdGl2ZShpMnMpOworfQorCisvKiBJZiB0aGlzIERBSSBpcyB0cmFuc21pdHRpbmcgb3IgcmVjZWl2aW5nIGRhdGEgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB0aGlzX2FjdGl2ZShzdHJ1Y3QgaTJzX2RhaSAqaTJzKQoreworCXJldHVybiB0eF9hY3RpdmUoaTJzKSB8fCByeF9hY3RpdmUoaTJzKTsKK30KKworLyogSWYgdGhlIGNvbnRyb2xsZXIgaXMgYWN0aXZlIGFueXdheSAqLworc3RhdGljIGlubGluZSBib29sIGFueV9hY3RpdmUoc3RydWN0IGkyc19kYWkgKmkycykKK3sKKwlyZXR1cm4gdGhpc19hY3RpdmUoaTJzKSB8fCBvdGhlcl9hY3RpdmUoaTJzKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaTJzX2RhaSAqdG9faW5mbyhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlyZXR1cm4gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzX29wZW5lZChzdHJ1Y3QgaTJzX2RhaSAqaTJzKQoreworCWlmIChpMnMgJiYgKGkycy0+bW9kZSAmIERBSV9PUEVORUQpKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzX21hbmFnZXIoc3RydWN0IGkyc19kYWkgKmkycykKK3sKKwlpZiAoaXNfb3BlbmVkKGkycykgJiYgKGkycy0+bW9kZSAmIERBSV9NQU5BR0VSKSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIFJlYWQgUkNMSyBvZiBJMlMgKGluIG11bHRpcGxlcyBvZiBMUkNMSykgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0X3JmcyhzdHJ1Y3QgaTJzX2RhaSAqaTJzKQoreworCXUzMiByZnMgPSAocmVhZGwoaTJzLT5hZGRyICsgSTJTTU9EKSA+PiAzKSAmIDB4MzsKKworCXN3aXRjaCAocmZzKSB7CisJY2FzZSAzOglyZXR1cm4gNzY4OworCWNhc2UgMjogcmV0dXJuIDM4NDsKKwljYXNlIDE6CXJldHVybiA1MTI7CisJZGVmYXVsdDogcmV0dXJuIDI1NjsKKwl9Cit9CisKKy8qIFdyaXRlIFJDTEsgb2YgSTJTIChpbiBtdWx0aXBsZXMgb2YgTFJDTEspICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3JmcyhzdHJ1Y3QgaTJzX2RhaSAqaTJzLCB1bnNpZ25lZCByZnMpCit7CisJdTMyIG1vZCA9IHJlYWRsKGkycy0+YWRkciArIEkyU01PRCk7CisKKwltb2QgJj0gfk1PRF9SQ0xLX01BU0s7CisKKwlzd2l0Y2ggKHJmcykgeworCWNhc2UgNzY4OgorCQltb2QgfD0gTU9EX1JDTEtfNzY4RlM7CisJCWJyZWFrOworCWNhc2UgNTEyOgorCQltb2QgfD0gTU9EX1JDTEtfNTEyRlM7CisJCWJyZWFrOworCWNhc2UgMzg0OgorCQltb2QgfD0gTU9EX1JDTEtfMzg0RlM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1vZCB8PSBNT0RfUkNMS18yNTZGUzsKKwkJYnJlYWs7CisJfQorCisJd3JpdGVsKG1vZCwgaTJzLT5hZGRyICsgSTJTTU9EKTsKK30KKworLyogUmVhZCBCaXQtQ2xvY2sgb2YgSTJTIChpbiBtdWx0aXBsZXMgb2YgTFJDTEspICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldF9iZnMoc3RydWN0IGkyc19kYWkgKmkycykKK3sKKwl1MzIgYmZzID0gKHJlYWRsKGkycy0+YWRkciArIEkyU01PRCkgPj4gMSkgJiAweDM7CisKKwlzd2l0Y2ggKGJmcykgeworCWNhc2UgMzogcmV0dXJuIDI0OworCWNhc2UgMjogcmV0dXJuIDE2OworCWNhc2UgMToJcmV0dXJuIDQ4OworCWRlZmF1bHQ6IHJldHVybiAzMjsKKwl9Cit9CisKKy8qIFdyaXRlIEJpdC1DbG9jayBvZiBJMlMgKGluIG11bHRpcGxlcyBvZiBMUkNMSykgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYmZzKHN0cnVjdCBpMnNfZGFpICppMnMsIHVuc2lnbmVkIGJmcykKK3sKKwl1MzIgbW9kID0gcmVhZGwoaTJzLT5hZGRyICsgSTJTTU9EKTsKKworCW1vZCAmPSB+TU9EX0JDTEtfTUFTSzsKKworCXN3aXRjaCAoYmZzKSB7CisJY2FzZSA0ODoKKwkJbW9kIHw9IE1PRF9CQ0xLXzQ4RlM7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCW1vZCB8PSBNT0RfQkNMS18zMkZTOworCQlicmVhazsKKwljYXNlIDI0OgorCQltb2QgfD0gTU9EX0JDTEtfMjRGUzsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJbW9kIHw9IE1PRF9CQ0xLXzE2RlM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmkycy0+cGRldi0+ZGV2LCAiV3JvbmcgQkNMSyBEaXZpZGVyIVxuIik7CisJCXJldHVybjsKKwl9CisKKwl3cml0ZWwobW9kLCBpMnMtPmFkZHIgKyBJMlNNT0QpOworfQorCisvKiBTYW1wbGUtU2l6ZSAqLworc3RhdGljIGlubGluZSBpbnQgZ2V0X2JsYyhzdHJ1Y3QgaTJzX2RhaSAqaTJzKQoreworCWludCBibGMgPSByZWFkbChpMnMtPmFkZHIgKyBJMlNNT0QpOworCisJYmxjID0gKGJsYyA+PiAxMykgJiAweDM7CisKKwlzd2l0Y2ggKGJsYykgeworCWNhc2UgMjogcmV0dXJuIDI0OworCWNhc2UgMToJcmV0dXJuIDg7CisJZGVmYXVsdDogcmV0dXJuIDE2OworCX0KK30KKworLyogVFggQ2hhbm5lbCBDb250cm9sICovCitzdGF0aWMgdm9pZCBpMnNfdHhjdHJsKHN0cnVjdCBpMnNfZGFpICppMnMsIGludCBvbikKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSBpMnMtPmFkZHI7CisJdTMyIGNvbiA9IHJlYWRsKGFkZHIgKyBJMlNDT04pOworCXUzMiBtb2QgPSByZWFkbChhZGRyICsgSTJTTU9EKSAmIH5NT0RfTUFTSzsKKworCWlmIChvbikgeworCQljb24gfD0gQ09OX0FDVElWRTsKKwkJY29uICY9IH5DT05fVFhDSF9QQVVTRTsKKworCQlpZiAoaXNfc2Vjb25kYXJ5KGkycykpIHsKKwkJCWNvbiB8PSBDT05fVFhTRE1BX0FDVElWRTsKKwkJCWNvbiAmPSB+Q09OX1RYU0RNQV9QQVVTRTsKKwkJfSBlbHNlIHsKKwkJCWNvbiB8PSBDT05fVFhETUFfQUNUSVZFOworCQkJY29uICY9IH5DT05fVFhETUFfUEFVU0U7CisJCX0KKworCQlpZiAoYW55X3J4X2FjdGl2ZShpMnMpKQorCQkJbW9kIHw9IE1PRF9UWFJYOworCQllbHNlCisJCQltb2QgfD0gTU9EX1RYT05MWTsKKwl9IGVsc2UgeworCQlpZiAoaXNfc2Vjb25kYXJ5KGkycykpIHsKKwkJCWNvbiB8PSAgQ09OX1RYU0RNQV9QQVVTRTsKKwkJCWNvbiAmPSB+Q09OX1RYU0RNQV9BQ1RJVkU7CisJCX0gZWxzZSB7CisJCQljb24gfD0gIENPTl9UWERNQV9QQVVTRTsKKwkJCWNvbiAmPSB+Q09OX1RYRE1BX0FDVElWRTsKKwkJfQorCisJCWlmIChvdGhlcl90eF9hY3RpdmUoaTJzKSkgeworCQkJd3JpdGVsKGNvbiwgYWRkciArIEkyU0NPTik7CisJCQlyZXR1cm47CisJCX0KKworCQljb24gfD0gIENPTl9UWENIX1BBVVNFOworCisJCWlmIChhbnlfcnhfYWN0aXZlKGkycykpCisJCQltb2QgfD0gTU9EX1JYT05MWTsKKwkJZWxzZQorCQkJY29uICY9IH5DT05fQUNUSVZFOworCX0KKworCXdyaXRlbChtb2QsIGFkZHIgKyBJMlNNT0QpOworCXdyaXRlbChjb24sIGFkZHIgKyBJMlNDT04pOworfQorCisvKiBSWCBDaGFubmVsIENvbnRyb2wgKi8KK3N0YXRpYyB2b2lkIGkyc19yeGN0cmwoc3RydWN0IGkyc19kYWkgKmkycywgaW50IG9uKQoreworCXZvaWQgX19pb21lbSAqYWRkciA9IGkycy0+YWRkcjsKKwl1MzIgY29uID0gcmVhZGwoYWRkciArIEkyU0NPTik7CisJdTMyIG1vZCA9IHJlYWRsKGFkZHIgKyBJMlNNT0QpICYgfk1PRF9NQVNLOworCisJaWYgKG9uKSB7CisJCWNvbiB8PSBDT05fUlhETUFfQUNUSVZFIHwgQ09OX0FDVElWRTsKKwkJY29uICY9IH4oQ09OX1JYRE1BX1BBVVNFIHwgQ09OX1JYQ0hfUEFVU0UpOworCisJCWlmIChhbnlfdHhfYWN0aXZlKGkycykpCisJCQltb2QgfD0gTU9EX1RYUlg7CisJCWVsc2UKKwkJCW1vZCB8PSBNT0RfUlhPTkxZOworCX0gZWxzZSB7CisJCWNvbiB8PSAgQ09OX1JYRE1BX1BBVVNFIHwgQ09OX1JYQ0hfUEFVU0U7CisJCWNvbiAmPSB+Q09OX1JYRE1BX0FDVElWRTsKKworCQlpZiAoYW55X3R4X2FjdGl2ZShpMnMpKQorCQkJbW9kIHw9IE1PRF9UWE9OTFk7CisJCWVsc2UKKwkJCWNvbiAmPSB+Q09OX0FDVElWRTsKKwl9CisKKwl3cml0ZWwobW9kLCBhZGRyICsgSTJTTU9EKTsKKwl3cml0ZWwoY29uLCBhZGRyICsgSTJTQ09OKTsKK30KKworLyogRmx1c2ggRklGTyBvZiBhbiBpbnRlcmZhY2UgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpMnNfZmlmbyhzdHJ1Y3QgaTJzX2RhaSAqaTJzLCB1MzIgZmx1c2gpCit7CisJdm9pZCBfX2lvbWVtICpmaWM7CisJdTMyIHZhbDsKKworCWlmICghaTJzKQorCQlyZXR1cm47CisKKwlpZiAoaXNfc2Vjb25kYXJ5KGkycykpCisJCWZpYyA9IGkycy0+YWRkciArIEkyU0ZJQ1M7CisJZWxzZQorCQlmaWMgPSBpMnMtPmFkZHIgKyBJMlNGSUM7CisKKwkvKiBGbHVzaCB0aGUgRklGTyAqLworCXdyaXRlbChyZWFkbChmaWMpIHwgZmx1c2gsIGZpYyk7CisKKwkvKiBCZSBwYXRpZW50ICovCisJdmFsID0gbXNlY3NfdG9fbG9vcHMoMSkgLyAxMDAwOyAvKiAxIHVzZWMgKi8KKwl3aGlsZSAoLS12YWwpCisJCWNwdV9yZWxheCgpOworCisJd3JpdGVsKHJlYWRsKGZpYykgJiB+Zmx1c2gsIGZpYyk7Cit9CisKK3N0YXRpYyBpbnQgaTJzX3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJICBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgcmZzLCBpbnQgZGlyKQoreworCXN0cnVjdCBpMnNfZGFpICppMnMgPSB0b19pbmZvKGRhaSk7CisJc3RydWN0IGkyc19kYWkgKm90aGVyID0gaTJzLT5wcmlfZGFpID8gOiBpMnMtPnNlY19kYWk7CisJdTMyIG1vZCA9IHJlYWRsKGkycy0+YWRkciArIEkyU01PRCk7CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgU0FNU1VOR19JMlNfQ0RDTEs6CisJCS8qIFNob3VsZG4ndCBtYXR0ZXIgaW4gR0FUSU5HKENMT0NLX0lOKSBtb2RlICovCisJCWlmIChkaXIgPT0gU05EX1NPQ19DTE9DS19JTikKKwkJCXJmcyA9IDA7CisKKwkJaWYgKChyZnMgJiYgb3RoZXItPnJmcyAmJiAob3RoZXItPnJmcyAhPSByZnMpKSB8fAorCQkJCShhbnlfYWN0aXZlKGkycykgJiYKKwkJCQkoKChkaXIgPT0gU05EX1NPQ19DTE9DS19JTikKKwkJCQkJJiYgIShtb2QgJiBNT0RfQ0RDTEtDT04pKSB8fAorCQkJCSgoZGlyID09IFNORF9TT0NfQ0xPQ0tfT1VUKQorCQkJCQkmJiAobW9kICYgTU9EX0NEQ0xLQ09OKSkpKSkgeworCQkJZGV2X2VycigmaTJzLT5wZGV2LT5kZXYsCisJCQkJIiVzOiVkIE90aGVyIERBSSBidXN5XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKworCQlpZiAoZGlyID09IFNORF9TT0NfQ0xPQ0tfSU4pCisJCQltb2QgfD0gTU9EX0NEQ0xLQ09OOworCQllbHNlCisJCQltb2QgJj0gfk1PRF9DRENMS0NPTjsKKworCQlpMnMtPnJmcyA9IHJmczsKKwkJYnJlYWs7CisKKwljYXNlIFNBTVNVTkdfSTJTX1JDTEtTUkNfMDogLyogY2xvY2sgY29ycnNwb25kaW5nIHRvIElJU01PRFsxMF0gOj0gMCAqLworCWNhc2UgU0FNU1VOR19JMlNfUkNMS1NSQ18xOiAvKiBjbG9jayBjb3Jyc3BvbmRpbmcgdG8gSUlTTU9EWzEwXSA6PSAxICovCisJCWlmICgoaTJzLT5xdWlya3MgJiBRVUlSS19OT19NVVhQU1IpCisJCQkJfHwgKGNsa19pZCA9PSBTQU1TVU5HX0kyU19SQ0xLU1JDXzApKQorCQkJY2xrX2lkID0gMDsKKwkJZWxzZQorCQkJY2xrX2lkID0gMTsKKworCQlpZiAoIWFueV9hY3RpdmUoaTJzKSkgeworCQkJaWYgKGkycy0+b3BfY2xrKSB7CisJCQkJaWYgKChjbGtfaWQgJiYgIShtb2QgJiBNT0RfSU1TX1NZU01VWCkpIHx8CisJCQkJCSghY2xrX2lkICYmIChtb2QgJiBNT0RfSU1TX1NZU01VWCkpKSB7CisJCQkJCWNsa19kaXNhYmxlKGkycy0+b3BfY2xrKTsKKwkJCQkJY2xrX3B1dChpMnMtPm9wX2Nsayk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaTJzLT5yY2xrX3NyY3JhdGUgPQorCQkJCQkJY2xrX2dldF9yYXRlKGkycy0+b3BfY2xrKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCisJCQlpMnMtPm9wX2NsayA9IGNsa19nZXQoJmkycy0+cGRldi0+ZGV2LAorCQkJCQkJaTJzLT5zcmNfY2xrW2Nsa19pZF0pOworCQkJY2xrX2VuYWJsZShpMnMtPm9wX2Nsayk7CisJCQlpMnMtPnJjbGtfc3JjcmF0ZSA9IGNsa19nZXRfcmF0ZShpMnMtPm9wX2Nsayk7CisKKwkJCS8qIE92ZXItcmlkZSB0aGUgb3RoZXIncyAqLworCQkJaWYgKG90aGVyKSB7CisJCQkJb3RoZXItPm9wX2NsayA9IGkycy0+b3BfY2xrOworCQkJCW90aGVyLT5yY2xrX3NyY3JhdGUgPSBpMnMtPnJjbGtfc3JjcmF0ZTsKKwkJCX0KKwkJfSBlbHNlIGlmICgoIWNsa19pZCAmJiAobW9kICYgTU9EX0lNU19TWVNNVVgpKQorCQkJCXx8IChjbGtfaWQgJiYgIShtb2QgJiBNT0RfSU1TX1NZU01VWCkpKSB7CisJCQlkZXZfZXJyKCZpMnMtPnBkZXYtPmRldiwKKwkJCQkiJXM6JWQgT3RoZXIgREFJIGJ1c3lcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfSBlbHNlIHsKKwkJCS8qIENhbGwgY2FuJ3QgYmUgb24gdGhlIGFjdGl2ZSBEQUkgKi8KKwkJCWkycy0+b3BfY2xrID0gb3RoZXItPm9wX2NsazsKKwkJCWkycy0+cmNsa19zcmNyYXRlID0gb3RoZXItPnJjbGtfc3JjcmF0ZTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGNsa19pZCA9PSAwKQorCQkJbW9kICY9IH5NT0RfSU1TX1NZU01VWDsKKwkJZWxzZQorCQkJbW9kIHw9IE1PRF9JTVNfU1lTTVVYOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmkycy0+cGRldi0+ZGV2LCAiV2UgZG9uJ3Qgc2VydmUgdGhhdCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3cml0ZWwobW9kLCBpMnMtPmFkZHIgKyBJMlNNT0QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTJzX3NldF9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3QgaTJzX2RhaSAqaTJzID0gdG9faW5mbyhkYWkpOworCXUzMiBtb2QgPSByZWFkbChpMnMtPmFkZHIgKyBJMlNNT0QpOworCXUzMiB0bXAgPSAwOworCisJLyogRm9ybWF0IGlzIHByaW9yaXR5ICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJdG1wIHw9IE1PRF9MUl9STE9XOworCQl0bXAgfD0gTU9EX1NERl9NU0I7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQl0bXAgfD0gTU9EX0xSX1JMT1c7CisJCXRtcCB8PSBNT0RfU0RGX0xTQjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCXRtcCB8PSBNT0RfU0RGX0lJUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmaTJzLT5wZGV2LT5kZXYsICJGb3JtYXQgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogSU5WIGZsYWcgaXMgcmVsYXRpdmUgdG8gdGhlIEZPUk1BVCBmbGFnIC0gaWYgc2V0IGl0IHNpbXBseQorCSAqIGZsaXBzIHRoZSBwb2xhcml0eSBzcGVjaWZpZWQgYnkgdGhlIFN0YW5kYXJkCisJICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCWlmICh0bXAgJiBNT0RfTFJfUkxPVykKKwkJCXRtcCAmPSB+TU9EX0xSX1JMT1c7CisJCWVsc2UKKwkJCXRtcCB8PSBNT0RfTFJfUkxPVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmaTJzLT5wZGV2LT5kZXYsICJQb2xhcml0eSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJdG1wIHw9IE1PRF9TTEFWRTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQkvKiBTZXQgZGVmYXVsdCBzb3VyY2UgY2xvY2sgaW4gTWFzdGVyIG1vZGUgKi8KKwkJaWYgKGkycy0+cmNsa19zcmNyYXRlID09IDApCisJCQlpMnNfc2V0X3N5c2NsayhkYWksIFNBTVNVTkdfSTJTX1JDTEtTUkNfMCwKKwkJCQkJCQkwLCBTTkRfU09DX0NMT0NLX0lOKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmaTJzLT5wZGV2LT5kZXYsICJtYXN0ZXIvc2xhdmUgZm9ybWF0IG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoYW55X2FjdGl2ZShpMnMpICYmCisJCQkoKG1vZCAmIChNT0RfU0RGX01BU0sgfCBNT0RfTFJfUkxPVworCQkJCXwgTU9EX1NMQVZFKSkgIT0gdG1wKSkgeworCQlkZXZfZXJyKCZpMnMtPnBkZXYtPmRldiwKKwkJCQkiJXM6JWQgT3RoZXIgREFJIGJ1c3lcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCW1vZCAmPSB+KE1PRF9TREZfTUFTSyB8IE1PRF9MUl9STE9XIHwgTU9EX1NMQVZFKTsKKwltb2QgfD0gdG1wOworCXdyaXRlbChtb2QsIGkycy0+YWRkciArIEkyU01PRCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpMnNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgaTJzX2RhaSAqaTJzID0gdG9faW5mbyhkYWkpOworCXUzMiBtb2QgPSByZWFkbChpMnMtPmFkZHIgKyBJMlNNT0QpOworCisJaWYgKCFpc19zZWNvbmRhcnkoaTJzKSkKKwkJbW9kICY9IH4oTU9EX0RDMl9FTiB8IE1PRF9EQzFfRU4pOworCisJc3dpdGNoIChwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSkgeworCWNhc2UgNjoKKwkJbW9kIHw9IE1PRF9EQzJfRU47CisJY2FzZSA0OgorCQltb2QgfD0gTU9EX0RDMV9FTjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZpMnMtPnBkZXYtPmRldiwgIiVkIGNoYW5uZWxzIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkJcGFyYW1zX2NoYW5uZWxzKHBhcmFtcykpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaXNfc2Vjb25kYXJ5KGkycykpCisJCW1vZCAmPSB+TU9EX0JMQ1NfTUFTSzsKKwllbHNlCisJCW1vZCAmPSB+TU9EX0JMQ1BfTUFTSzsKKworCWlmIChpc19tYW5hZ2VyKGkycykpCisJCW1vZCAmPSB+TU9EX0JMQ19NQVNLOworCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzg6CisJCWlmIChpc19zZWNvbmRhcnkoaTJzKSkKKwkJCW1vZCB8PSBNT0RfQkxDU184QklUOworCQllbHNlCisJCQltb2QgfD0gTU9EX0JMQ1BfOEJJVDsKKwkJaWYgKGlzX21hbmFnZXIoaTJzKSkKKwkJCW1vZCB8PSBNT0RfQkxDXzhCSVQ7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWlmIChpc19zZWNvbmRhcnkoaTJzKSkKKwkJCW1vZCB8PSBNT0RfQkxDU18xNkJJVDsKKwkJZWxzZQorCQkJbW9kIHw9IE1PRF9CTENQXzE2QklUOworCQlpZiAoaXNfbWFuYWdlcihpMnMpKQorCQkJbW9kIHw9IE1PRF9CTENfMTZCSVQ7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWlmIChpc19zZWNvbmRhcnkoaTJzKSkKKwkJCW1vZCB8PSBNT0RfQkxDU18yNEJJVDsKKwkJZWxzZQorCQkJbW9kIHw9IE1PRF9CTENQXzI0QklUOworCQlpZiAoaXNfbWFuYWdlcihpMnMpKQorCQkJbW9kIHw9IE1PRF9CTENfMjRCSVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmkycy0+cGRldi0+ZGV2LCAiRm9ybWF0KCVkKSBub3Qgc3VwcG9ydGVkXG4iLAorCQkJCXBhcmFtc19mb3JtYXQocGFyYW1zKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl3cml0ZWwobW9kLCBpMnMtPmFkZHIgKyBJMlNNT0QpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXNuZF9zb2NfZGFpX3NldF9kbWFfZGF0YShkYWksIHN1YnN0cmVhbSwKKwkJCSh2b2lkICopJmkycy0+ZG1hX3BsYXliYWNrKTsKKwllbHNlCisJCXNuZF9zb2NfZGFpX3NldF9kbWFfZGF0YShkYWksIHN1YnN0cmVhbSwKKwkJCSh2b2lkICopJmkycy0+ZG1hX2NhcHR1cmUpOworCisJaTJzLT5mcm1jbGsgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFdlIHNldCBjb25zdHJhaW50cyBvbiB0aGUgc3Vic3RyZWFtIGFjYyB0byB0aGUgdmVyc2lvbiBvZiBJMlMgKi8KK3N0YXRpYyBpbnQgaTJzX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgaTJzX2RhaSAqaTJzID0gdG9faW5mbyhkYWkpOworCXN0cnVjdCBpMnNfZGFpICpvdGhlciA9IGkycy0+cHJpX2RhaSA/IDogaTJzLT5zZWNfZGFpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jaywgZmxhZ3MpOworCisJaTJzLT5tb2RlIHw9IERBSV9PUEVORUQ7CisKKwlpZiAoaXNfbWFuYWdlcihvdGhlcikpCisJCWkycy0+bW9kZSAmPSB+REFJX01BTkFHRVI7CisJZWxzZQorCQlpMnMtPm1vZGUgfD0gREFJX01BTkFHRVI7CisKKwkvKiBFbmZvcmNlIHNldF9zeXNjbGsgaW4gTWFzdGVyIG1vZGUgKi8KKwlpMnMtPnJjbGtfc3JjcmF0ZSA9IDA7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaTJzX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBpMnNfZGFpICppMnMgPSB0b19pbmZvKGRhaSk7CisJc3RydWN0IGkyc19kYWkgKm90aGVyID0gaTJzLT5wcmlfZGFpID8gOiBpMnMtPnNlY19kYWk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrLCBmbGFncyk7CisKKwlpMnMtPm1vZGUgJj0gfkRBSV9PUEVORUQ7CisJaTJzLT5tb2RlICY9IH5EQUlfTUFOQUdFUjsKKworCWlmIChpc19vcGVuZWQob3RoZXIpKQorCQlvdGhlci0+bW9kZSB8PSBEQUlfTUFOQUdFUjsKKworCS8qIFJlc2V0IGFueSBjb25zdHJhaW50IG9uIFJGUyBhbmQgQkZTICovCisJaTJzLT5yZnMgPSAwOworCWkycy0+YmZzID0gMDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2ssIGZsYWdzKTsKKworCS8qIEdhdGUgQ0RDTEsgYnkgZGVmYXVsdCAqLworCWlmICghaXNfb3BlbmVkKG90aGVyKSkKKwkJaTJzX3NldF9zeXNjbGsoZGFpLCBTQU1TVU5HX0kyU19DRENMSywKKwkJCQkwLCBTTkRfU09DX0NMT0NLX0lOKTsKK30KKworc3RhdGljIGludCBjb25maWdfc2V0dXAoc3RydWN0IGkyc19kYWkgKmkycykKK3sKKwlzdHJ1Y3QgaTJzX2RhaSAqb3RoZXIgPSBpMnMtPnByaV9kYWkgPyA6IGkycy0+c2VjX2RhaTsKKwl1bnNpZ25lZCByZnMsIGJmcywgYmxjOworCXUzMiBwc3I7CisKKwlibGMgPSBnZXRfYmxjKGkycyk7CisKKwliZnMgPSBpMnMtPmJmczsKKworCWlmICghYmZzICYmIG90aGVyKQorCQliZnMgPSBvdGhlci0+YmZzOworCisJLyogU2VsZWN0IGxlYXN0IHBvc3NpYmxlIG11bHRpcGxlKDIpIGlmIG5vIGNvbnN0cmFpbnQgc2V0ICovCisJaWYgKCFiZnMpCisJCWJmcyA9IGJsYyAqIDI7CisKKwlyZnMgPSBpMnMtPnJmczsKKworCWlmICghcmZzICYmIG90aGVyKQorCQlyZnMgPSBvdGhlci0+cmZzOworCisJaWYgKChyZnMgPT0gMjU2IHx8IHJmcyA9PSA1MTIpICYmIChibGMgPT0gMjQpKSB7CisJCWRldl9lcnIoJmkycy0+cGRldi0+ZGV2LAorCQkJIiVkLVJGUyBub3Qgc3VwcG9ydGVkIGZvciAyNC1ibGNcbiIsIHJmcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghcmZzKSB7CisJCWlmIChiZnMgPT0gMTYgfHwgYmZzID09IDMyKQorCQkJcmZzID0gMjU2OworCQllbHNlCisJCQlyZnMgPSAzODQ7CisJfQorCisJLyogSWYgYWxyZWFkeSBzZXR1cCBhbmQgcnVubmluZyAqLworCWlmIChhbnlfYWN0aXZlKGkycykgJiYgKGdldF9yZnMoaTJzKSAhPSByZnMgfHwgZ2V0X2JmcyhpMnMpICE9IGJmcykpIHsKKwkJZGV2X2VycigmaTJzLT5wZGV2LT5kZXYsCisJCQkJIiVzOiVkIE90aGVyIERBSSBidXN5XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwkvKiBEb24ndCBib3RoZXIgUkZTLCBCRlMgJiBQU1IgaW4gU2xhdmUgbW9kZSAqLworCWlmIChpc19zbGF2ZShpMnMpKQorCQlyZXR1cm4gMDsKKworCXNldF9iZnMoaTJzLCBiZnMpOworCXNldF9yZnMoaTJzLCByZnMpOworCisJaWYgKCEoaTJzLT5xdWlya3MgJiBRVUlSS19OT19NVVhQU1IpKSB7CisJCXBzciA9IGkycy0+cmNsa19zcmNyYXRlIC8gaTJzLT5mcm1jbGsgLyByZnM7CisJCXdyaXRlbCgoKHBzciAtIDEpIDw8IDgpIHwgUFNSX1BTUkVOLCBpMnMtPmFkZHIgKyBJMlNQU1IpOworCQlkZXZfZGJnKCZpMnMtPnBkZXYtPmRldiwKKwkJCSJSQ0xLX1NSQz0lbHVIeiBQU1I9JXUsIFJDTEs9JWRmcywgQkNMSz0lZGZzXG4iLAorCQkJCWkycy0+cmNsa19zcmNyYXRlLCBwc3IsIHJmcywgYmZzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpMnNfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlpbnQgY21kLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlpbnQgY2FwdHVyZSA9IChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaTJzX2RhaSAqaTJzID0gdG9faW5mbyhydGQtPmNwdV9kYWkpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkJaWYgKGNvbmZpZ19zZXR1cChpMnMpKSB7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChjYXB0dXJlKQorCQkJaTJzX3J4Y3RybChpMnMsIDEpOworCQllbHNlCisJCQlpMnNfdHhjdHJsKGkycywgMSk7CisKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJCWlmIChjYXB0dXJlKQorCQkJaTJzX3J4Y3RybChpMnMsIDApOworCQllbHNlCisJCQlpMnNfdHhjdHJsKGkycywgMCk7CisKKwkJaWYgKGNhcHR1cmUpCisJCQlpMnNfZmlmbyhpMnMsIEZJQ19SWEZMVVNIKTsKKwkJZWxzZQorCQkJaTJzX2ZpZm8oaTJzLCBGSUNfVFhGTFVTSCk7CisKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpMnNfc2V0X2Nsa2RpdihzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwlpbnQgZGl2X2lkLCBpbnQgZGl2KQoreworCXN0cnVjdCBpMnNfZGFpICppMnMgPSB0b19pbmZvKGRhaSk7CisJc3RydWN0IGkyc19kYWkgKm90aGVyID0gaTJzLT5wcmlfZGFpID8gOiBpMnMtPnNlY19kYWk7CisKKwlzd2l0Y2ggKGRpdl9pZCkgeworCWNhc2UgU0FNU1VOR19JMlNfRElWX0JDTEs6CisJCWlmICgoYW55X2FjdGl2ZShpMnMpICYmIGRpdiAmJiAoZ2V0X2JmcyhpMnMpICE9IGRpdikpCisJCQl8fCAob3RoZXIgJiYgb3RoZXItPmJmcyAmJiAob3RoZXItPmJmcyAhPSBkaXYpKSkgeworCQkJZGV2X2VycigmaTJzLT5wZGV2LT5kZXYsCisJCQkJIiVzOiVkIE90aGVyIERBSSBidXN5XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJaTJzLT5iZnMgPSBkaXY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmkycy0+cGRldi0+ZGV2LAorCQkJIkludmFsaWQgY2xvY2sgZGl2aWRlciglZClcbiIsIGRpdl9pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc25kX3BjbV9zZnJhbWVzX3QKK2kyc19kZWxheShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGkyc19kYWkgKmkycyA9IHRvX2luZm8oZGFpKTsKKwl1MzIgcmVnID0gcmVhZGwoaTJzLT5hZGRyICsgSTJTRklDKTsKKwlzbmRfcGNtX3NmcmFtZXNfdCBkZWxheTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCisJCWRlbGF5ID0gRklDX1JYQ09VTlQocmVnKTsKKwllbHNlIGlmIChpc19zZWNvbmRhcnkoaTJzKSkKKwkJZGVsYXkgPSBGSUNTX1RYQ09VTlQocmVhZGwoaTJzLT5hZGRyICsgSTJTRklDUykpOworCWVsc2UKKwkJZGVsYXkgPSBGSUNfVFhDT1VOVChyZWcpOworCisJcmV0dXJuIGRlbGF5OworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGkyc19zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBpMnNfZGFpICppMnMgPSB0b19pbmZvKGRhaSk7CisKKwlpZiAoZGFpLT5hY3RpdmUpIHsKKwkJaTJzLT5zdXNwZW5kX2kyc21vZCA9IHJlYWRsKGkycy0+YWRkciArIEkyU01PRCk7CisJCWkycy0+c3VzcGVuZF9pMnNjb24gPSByZWFkbChpMnMtPmFkZHIgKyBJMlNDT04pOworCQlpMnMtPnN1c3BlbmRfaTJzcHNyID0gcmVhZGwoaTJzLT5hZGRyICsgSTJTUFNSKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpMnNfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBpMnNfZGFpICppMnMgPSB0b19pbmZvKGRhaSk7CisKKwlpZiAoZGFpLT5hY3RpdmUpIHsKKwkJd3JpdGVsKGkycy0+c3VzcGVuZF9pMnNjb24sIGkycy0+YWRkciArIEkyU0NPTik7CisJCXdyaXRlbChpMnMtPnN1c3BlbmRfaTJzbW9kLCBpMnMtPmFkZHIgKyBJMlNNT0QpOworCQl3cml0ZWwoaTJzLT5zdXNwZW5kX2kyc3BzciwgaTJzLT5hZGRyICsgSTJTUFNSKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGkyc19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgaTJzX3Jlc3VtZSAgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgc2Ftc3VuZ19pMnNfZGFpX3Byb2JlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBpMnNfZGFpICppMnMgPSB0b19pbmZvKGRhaSk7CisJc3RydWN0IGkyc19kYWkgKm90aGVyID0gaTJzLT5wcmlfZGFpID8gOiBpMnMtPnNlY19kYWk7CisKKwlpZiAob3RoZXIgJiYgb3RoZXItPmNsaykgLyogSWYgdGhpcyBpcyBwcm9iZSBvbiBzZWNvbmRhcnkgKi8KKwkJZ290byBwcm9iZV9leGl0OworCisJaTJzLT5hZGRyID0gaW9yZW1hcChpMnMtPmJhc2UsIDB4MTAwKTsKKwlpZiAoaTJzLT5hZGRyID09IE5VTEwpIHsKKwkJZGV2X2VycigmaTJzLT5wZGV2LT5kZXYsICJjYW5ub3QgaW9yZW1hcCByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWkycy0+Y2xrID0gY2xrX2dldCgmaTJzLT5wZGV2LT5kZXYsICJpaXMiKTsKKwlpZiAoSVNfRVJSKGkycy0+Y2xrKSkgeworCQlkZXZfZXJyKCZpMnMtPnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgaTJzX2Nsb2NrXG4iKTsKKwkJaW91bm1hcChpMnMtPmFkZHIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJY2xrX2VuYWJsZShpMnMtPmNsayk7CisKKwlpZiAob3RoZXIpIHsKKwkJb3RoZXItPmFkZHIgPSBpMnMtPmFkZHI7CisJCW90aGVyLT5jbGsgPSBpMnMtPmNsazsKKwl9CisKKwlpZiAoaTJzLT5xdWlya3MgJiBRVUlSS19ORUVEX1JTVENMUikKKwkJd3JpdGVsKENPTl9SU1RDTFIsIGkycy0+YWRkciArIEkyU0NPTik7CisKK3Byb2JlX2V4aXQ6CisJLyogUmVzZXQgYW55IGNvbnN0cmFpbnQgb24gUkZTIGFuZCBCRlMgKi8KKwlpMnMtPnJmcyA9IDA7CisJaTJzLT5iZnMgPSAwOworCWkyc190eGN0cmwoaTJzLCAwKTsKKwlpMnNfcnhjdHJsKGkycywgMCk7CisJaTJzX2ZpZm8oaTJzLCBGSUNfVFhGTFVTSCk7CisJaTJzX2ZpZm8ob3RoZXIsIEZJQ19UWEZMVVNIKTsKKwlpMnNfZmlmbyhpMnMsIEZJQ19SWEZMVVNIKTsKKworCS8qIEdhdGUgQ0RDTEsgYnkgZGVmYXVsdCAqLworCWlmICghaXNfb3BlbmVkKG90aGVyKSkKKwkJaTJzX3NldF9zeXNjbGsoZGFpLCBTQU1TVU5HX0kyU19DRENMSywKKwkJCQkwLCBTTkRfU09DX0NMT0NLX0lOKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhbXN1bmdfaTJzX2RhaV9yZW1vdmUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGkyc19kYWkgKmkycyA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisJc3RydWN0IGkyc19kYWkgKm90aGVyID0gaTJzLT5wcmlfZGFpID8gOiBpMnMtPnNlY19kYWk7CisKKwlpZiAoIW90aGVyIHx8ICFvdGhlci0+Y2xrKSB7CisKKwkJaWYgKGkycy0+cXVpcmtzICYgUVVJUktfTkVFRF9SU1RDTFIpCisJCQl3cml0ZWwoMCwgaTJzLT5hZGRyICsgSTJTQ09OKTsKKworCQljbGtfZGlzYWJsZShpMnMtPmNsayk7CisJCWNsa19wdXQoaTJzLT5jbGspOworCisJCWlvdW5tYXAoaTJzLT5hZGRyKTsKKwl9CisKKwlpMnMtPmNsayA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgc2Ftc3VuZ19pMnNfZGFpX29wcyA9IHsKKwkudHJpZ2dlciA9IGkyc190cmlnZ2VyLAorCS5od19wYXJhbXMgPSBpMnNfaHdfcGFyYW1zLAorCS5zZXRfZm10ID0gaTJzX3NldF9mbXQsCisJLnNldF9jbGtkaXYgPSBpMnNfc2V0X2Nsa2RpdiwKKwkuc2V0X3N5c2NsayA9IGkyc19zZXRfc3lzY2xrLAorCS5zdGFydHVwID0gaTJzX3N0YXJ0dXAsCisJLnNodXRkb3duID0gaTJzX3NodXRkb3duLAorCS5kZWxheSA9IGkyc19kZWxheSwKK307CisKKyNkZWZpbmUgU0FNU1VOR19JMlNfUkFURVMJU05EUlZfUENNX1JBVEVfODAwMF85NjAwMAorCisjZGVmaW5lIFNBTVNVTkdfSTJTX0ZNVFMJKFNORFJWX1BDTV9GTVRCSVRfUzggfCBcCisJCQkJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgXAorCQkJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKKworc3RhdGljIF9fZGV2aW5pdAorc3RydWN0IGkyc19kYWkgKmkyc19hbGxvY19kYWkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgYm9vbCBzZWMpCit7CisJc3RydWN0IGkyc19kYWkgKmkyczsKKworCWkycyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMnNfZGFpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGkycyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWkycy0+cGRldiA9IHBkZXY7CisJaTJzLT5wcmlfZGFpID0gTlVMTDsKKwlpMnMtPnNlY19kYWkgPSBOVUxMOworCWkycy0+aTJzX2RhaV9kcnYuc3ltbWV0cmljX3JhdGVzID0gMTsKKwlpMnMtPmkyc19kYWlfZHJ2LnByb2JlID0gc2Ftc3VuZ19pMnNfZGFpX3Byb2JlOworCWkycy0+aTJzX2RhaV9kcnYucmVtb3ZlID0gc2Ftc3VuZ19pMnNfZGFpX3JlbW92ZTsKKwlpMnMtPmkyc19kYWlfZHJ2Lm9wcyA9ICZzYW1zdW5nX2kyc19kYWlfb3BzOworCWkycy0+aTJzX2RhaV9kcnYuc3VzcGVuZCA9IGkyc19zdXNwZW5kOworCWkycy0+aTJzX2RhaV9kcnYucmVzdW1lID0gaTJzX3Jlc3VtZTsKKwlpMnMtPmkyc19kYWlfZHJ2LnBsYXliYWNrLmNoYW5uZWxzX21pbiA9IDI7CisJaTJzLT5pMnNfZGFpX2Rydi5wbGF5YmFjay5jaGFubmVsc19tYXggPSAyOworCWkycy0+aTJzX2RhaV9kcnYucGxheWJhY2sucmF0ZXMgPSBTQU1TVU5HX0kyU19SQVRFUzsKKwlpMnMtPmkyc19kYWlfZHJ2LnBsYXliYWNrLmZvcm1hdHMgPSBTQU1TVU5HX0kyU19GTVRTOworCisJaWYgKCFzZWMpIHsKKwkJaTJzLT5pMnNfZGFpX2Rydi5jYXB0dXJlLmNoYW5uZWxzX21pbiA9IDI7CisJCWkycy0+aTJzX2RhaV9kcnYuY2FwdHVyZS5jaGFubmVsc19tYXggPSAyOworCQlpMnMtPmkyc19kYWlfZHJ2LmNhcHR1cmUucmF0ZXMgPSBTQU1TVU5HX0kyU19SQVRFUzsKKwkJaTJzLT5pMnNfZGFpX2Rydi5jYXB0dXJlLmZvcm1hdHMgPSBTQU1TVU5HX0kyU19GTVRTOworCX0gZWxzZSB7CS8qIENyZWF0ZSBhIG5ldyBwbGF0Zm9ybV9kZXZpY2UgZm9yIFNlY29uZGFyeSAqLworCQlpMnMtPnBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwKKwkJCQlwZGV2LT5uYW1lLCBwZGV2LT5pZCArIFNBTVNVTkdfSTJTX1NFQ09GRiwKKwkJCQlOVUxMLCAwLCBOVUxMLCAwKTsKKwkJaWYgKElTX0VSUihpMnMtPnBkZXYpKSB7CisJCQlrZnJlZShpMnMpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwkvKiBQcmUtYXNzaWduIHNuZF9zb2NfZGFpX3NldF9kcnZkYXRhICovCisJZGV2X3NldF9kcnZkYXRhKCZpMnMtPnBkZXYtPmRldiwgaTJzKTsKKworCXJldHVybiBpMnM7Cit9CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHNhbXN1bmdfaTJzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdTMyIGRtYV9wbF9jaGFuLCBkbWFfY3BfY2hhbiwgZG1hX3BsX3NlY19jaGFuOworCXN0cnVjdCBpMnNfZGFpICpwcmlfZGFpLCAqc2VjX2RhaSA9IE5VTEw7CisJc3RydWN0IHMzY19hdWRpb19wZGF0YSAqaTJzX3BkYXRhOworCXN0cnVjdCBzYW1zdW5nX2kycyAqaTJzX2NmZzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1MzIgcmVnc19iYXNlLCBxdWlya3M7CisJaW50IHJldCA9IDA7CisKKwkvKiBDYWxsIGR1cmluZyBTZWNvbmRheSBpbnRlcmZhY2UgcmVnaXN0cmF0aW9uICovCisJaWYgKHBkZXYtPmlkID49IFNBTVNVTkdfSTJTX1NFQ09GRikgeworCQlzZWNfZGFpID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCQlzbmRfc29jX3JlZ2lzdGVyX2RhaSgmc2VjX2RhaS0+cGRldi0+ZGV2LAorCQkJJnNlY19kYWktPmkyc19kYWlfZHJ2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaTJzX3BkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKGkyc19wZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IHdvcmsgd2l0aG91dCBzM2NfYXVkaW9fcGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgSTJTLVRYIGRtYSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCWRtYV9wbF9jaGFuID0gcmVzLT5zdGFydDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGdldCBJMlMtUlggZG1hIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJZG1hX2NwX2NoYW4gPSByZXMtPnN0YXJ0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAyKTsKKwlpZiAocmVzKQorCQlkbWFfcGxfc2VjX2NoYW4gPSByZXMtPnN0YXJ0OworCWVsc2UKKwkJZG1hX3BsX3NlY19jaGFuID0gMDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGdldCBJMlMgU0ZSIGFkZHJlc3NcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKKwkJCQkJCQkic2Ftc3VuZy1pMnMiKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gcmVxdWVzdCBTRlIgcmVnaW9uXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcmVnc19iYXNlID0gcmVzLT5zdGFydDsKKworCWkyc19jZmcgPSAmaTJzX3BkYXRhLT50eXBlLmkyczsKKwlxdWlya3MgPSBpMnNfY2ZnLT5xdWlya3M7CisKKwlwcmlfZGFpID0gaTJzX2FsbG9jX2RhaShwZGV2LCBmYWxzZSk7CisJaWYgKCFwcmlfZGFpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvYyBJMlNfcHJpXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnIxOworCX0KKworCXByaV9kYWktPmRtYV9wbGF5YmFjay5kbWFfYWRkciA9IHJlZ3NfYmFzZSArIEkyU1RYRDsKKwlwcmlfZGFpLT5kbWFfY2FwdHVyZS5kbWFfYWRkciA9IHJlZ3NfYmFzZSArIEkyU1JYRDsKKwlwcmlfZGFpLT5kbWFfcGxheWJhY2suY2xpZW50ID0KKwkJKHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgKikmcHJpX2RhaS0+ZG1hX3BsYXliYWNrOworCXByaV9kYWktPmRtYV9jYXB0dXJlLmNsaWVudCA9CisJCShzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50ICopJnByaV9kYWktPmRtYV9jYXB0dXJlOworCXByaV9kYWktPmRtYV9wbGF5YmFjay5jaGFubmVsID0gZG1hX3BsX2NoYW47CisJcHJpX2RhaS0+ZG1hX2NhcHR1cmUuY2hhbm5lbCA9IGRtYV9jcF9jaGFuOworCXByaV9kYWktPnNyY19jbGsgPSBpMnNfY2ZnLT5zcmNfY2xrOworCXByaV9kYWktPmRtYV9wbGF5YmFjay5kbWFfc2l6ZSA9IDQ7CisJcHJpX2RhaS0+ZG1hX2NhcHR1cmUuZG1hX3NpemUgPSA0OworCXByaV9kYWktPmJhc2UgPSByZWdzX2Jhc2U7CisJcHJpX2RhaS0+cXVpcmtzID0gcXVpcmtzOworCisJaWYgKHF1aXJrcyAmIFFVSVJLX1BSSV82Q0hBTikKKwkJcHJpX2RhaS0+aTJzX2RhaV9kcnYucGxheWJhY2suY2hhbm5lbHNfbWF4ID0gNjsKKworCWlmIChxdWlya3MgJiBRVUlSS19TRUNfREFJKSB7CisJCXNlY19kYWkgPSBpMnNfYWxsb2NfZGFpKHBkZXYsIHRydWUpOworCQlpZiAoIXNlY19kYWkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvYyBJMlNfc2VjXG4iKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycjI7CisJCX0KKwkJc2VjX2RhaS0+ZG1hX3BsYXliYWNrLmRtYV9hZGRyID0gcmVnc19iYXNlICsgSTJTVFhEUzsKKwkJc2VjX2RhaS0+ZG1hX3BsYXliYWNrLmNsaWVudCA9CisJCQkoc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCAqKSZzZWNfZGFpLT5kbWFfcGxheWJhY2s7CisJCS8qIFVzZSBpRE1BIGFsd2F5cyBpZiBTeXNETUEgbm90IHByb3ZpZGVkICovCisJCXNlY19kYWktPmRtYV9wbGF5YmFjay5jaGFubmVsID0gZG1hX3BsX3NlY19jaGFuID8gOiAtMTsKKwkJc2VjX2RhaS0+c3JjX2NsayA9IGkyc19jZmctPnNyY19jbGs7CisJCXNlY19kYWktPmRtYV9wbGF5YmFjay5kbWFfc2l6ZSA9IDQ7CisJCXNlY19kYWktPmJhc2UgPSByZWdzX2Jhc2U7CisJCXNlY19kYWktPnF1aXJrcyA9IHF1aXJrczsKKwkJc2VjX2RhaS0+cHJpX2RhaSA9IHByaV9kYWk7CisJCXByaV9kYWktPnNlY19kYWkgPSBzZWNfZGFpOworCX0KKworCWlmIChpMnNfcGRhdGEtPmNmZ19ncGlvICYmIGkyc19wZGF0YS0+Y2ZnX2dwaW8ocGRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGNvbmZpZ3VyZSBncGlvXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnIzOworCX0KKworCXNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZwcmlfZGFpLT5wZGV2LT5kZXYsICZwcmlfZGFpLT5pMnNfZGFpX2Rydik7CisKKwlyZXR1cm4gMDsKK2VycjM6CisJa2ZyZWUoc2VjX2RhaSk7CitlcnIyOgorCWtmcmVlKHByaV9kYWkpOworZXJyMToKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVnc19iYXNlLCByZXNvdXJjZV9zaXplKHJlcykpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgc2Ftc3VuZ19pMnNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGkyc19kYWkgKmkycywgKm90aGVyOworCisJaTJzID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCW90aGVyID0gaTJzLT5wcmlfZGFpID8gOiBpMnMtPnNlY19kYWk7CisKKwlpZiAob3RoZXIpIHsKKwkJb3RoZXItPnByaV9kYWkgPSBOVUxMOworCQlvdGhlci0+c2VjX2RhaSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJc3RydWN0IHJlc291cmNlICpyZXM7CisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJCWlmIChyZXMpCisJCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwl9CisKKwlpMnMtPnByaV9kYWkgPSBOVUxMOworCWkycy0+c2VjX2RhaSA9IE5VTEw7CisKKwlrZnJlZShpMnMpOworCisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmcGRldi0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYW1zdW5nX2kyc19kcml2ZXIgPSB7CisJLnByb2JlICA9IHNhbXN1bmdfaTJzX3Byb2JlLAorCS5yZW1vdmUgPSBzYW1zdW5nX2kyc19yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAic2Ftc3VuZy1pMnMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2Ftc3VuZ19pMnNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNhbXN1bmdfaTJzX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChzYW1zdW5nX2kyc19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNhbXN1bmdfaTJzX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2Ftc3VuZ19pMnNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNhbXN1bmdfaTJzX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIkphc3dpbmRlciBTaW5naCwgPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcgSTJTIEludGVyZmFjZSIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzYW1zdW5nLWkycyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvaTJzLmggYi9zb3VuZC9zb2Mvc2Ftc3VuZy9pMnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTE1ZjZhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NhbXN1bmcvaTJzLmgKQEAgLTAsMCArMSwyOSBAQAorLyogc291bmQvc29jL3NhbXN1bmcvaTJzLmgKKyAqCisgKiBBTFNBIFNvQyBBdWRpbyBMYXllciAtIFNhbXN1bmcgSTJTIENvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uIEx0ZC4KKyAqCUphc3dpbmRlciBTaW5naCA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19TTkRfU09DX1NBTVNVTkdfSTJTX0gKKyNkZWZpbmUgX19TTkRfU09DX1NBTVNVTkdfSTJTX0gKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIEkyUyBibG9ja3MgdGhhdCBhbnkgU29DIGNhbiBoYXZlLgorICogVGhlIHNlY29uZGFyeSBpbnRlcmZhY2Ugb2YgYSBDUFUgZGFpKGlmIHRoZXJlIGV4aXN0cyBhbnkpLAorICogaXMgaW5kZXhlZCBhdCBbY3B1LWRhaSdzIElEICsgU0FNU1VOR19JMlNfU0VDT0ZGXQorICovCisjZGVmaW5lIFNBTVNVTkdfSTJTX1NFQ09GRgk0CisKKyNkZWZpbmUgU0FNU1VOR19JMlNfRElWX0JDTEsJMQorCisjZGVmaW5lIFNBTVNVTkdfSTJTX1JDTEtTUkNfMAkwCisjZGVmaW5lIFNBTVNVTkdfSTJTX1JDTEtTUkNfMQkxCisjZGVmaW5lIFNBTVNVTkdfSTJTX0NEQ0xLCQkyCisKKyNlbmRpZiAvKiBfX1NORF9TT0NfU0FNU1VOR19JMlNfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvaml2ZV93bTg3NTAuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2ppdmVfd204NzUwLmMKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gc291bmQvc29jL3MzYzI0eHgvaml2ZV93bTg3NTAuYwpyZW5hbWUgdG8gc291bmQvc29jL3NhbXN1bmcvaml2ZV93bTg3NTAuYwppbmRleCA0OTYwNWNkLi4wODgwMjUyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9qaXZlX3dtODc1MC5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL2ppdmVfd204NzUwLmMKQEAgLTEsNCArMSw0IEBACi0vKiBzb3VuZC9zb2MvczNjMjR4eC9qaXZlX3dtODc1MC5jCisvKiBzb3VuZC9zb2Mvc2Ftc3VuZy9qaXZlX3dtODc1MC5jCiAgKgogICogQ29weXJpZ2h0IDIwMDcsMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCkBAIC0yMSwxMSArMjEsMTAgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlICJzM2MtZG1hLmgiCisjaW5jbHVkZSAiZG1hLmgiCiAjaW5jbHVkZSAiczNjMjQxMi1pMnMuaCIKIAogI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg3NTAuaCIKQEAgLTExMSwxOCArMTEwLDE5IEBACiBzdGF0aWMgaW50IGppdmVfd204NzUwX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlpbnQgZXJyOwogCiAJLyogVGhlc2UgZW5kcG9pbnRzIGFyZSBub3QgYmVpbmcgdXNlZC4gKi8KLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElOUFVUMiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJSSU5QVVQyIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTlBVVDMiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUklOUFVUMyIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVQzIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk8iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSU5QVVQyIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiUklOUFVUMiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTlBVVDMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJSSU5QVVQzIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiT1VUMyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIk1PTk8iKTsKIAogCS8qIEFkZCBqaXZlIHNwZWNpZmljIHdpZGdldHMgKi8KLQllcnIgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3NTBfZGFwbV93aWRnZXRzLAorCWVyciA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204NzUwX2RhcG1fd2lkZ2V0cywKIAkJCQkJQVJSQVlfU0laRSh3bTg3NTBfZGFwbV93aWRnZXRzKSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWRkIHdpZGdldHMgKCVkKVxuIiwKQEAgLTEzMCw4ICsxMzAsOCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7Ci0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQxLDcgKzE0MSw3IEBACiAJLnN0cmVhbV9uYW1lCT0gIldNODc1MCIsCiAJLmNwdV9kYWlfbmFtZQk9ICJzM2MyNDEyLWkycyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1MC1oaWZpIiwKLQkucGxhdGZvcm1fbmFtZQk9ICJzM2MyNHh4LXBjbS1hdWRpbyIsCisJLnBsYXRmb3JtX25hbWUJPSAic2Ftc3VuZy1hdWRpbyIsCiAJLmNvZGVjX25hbWUJPSAid204NzUwLWNvZGVjLjAtMHgxYSIsCiAJLmluaXQJCT0gaml2ZV93bTg3NTBfaW5pdCwKIAkub3BzCQk9ICZqaXZlX29wcywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L2xtNDg1Ny5oIGIvc291bmQvc29jL3NhbXN1bmcvbG00ODU3LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNvdW5kL3NvYy9zM2MyNHh4L2xtNDg1Ny5oCnJlbmFtZSB0byBzb3VuZC9zb2Mvc2Ftc3VuZy9sbTQ4NTcuaApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvbG4yNDQwc2JjX2FsYzY1MC5jIGIvc291bmQvc29jL3NhbXN1bmcvbG4yNDQwc2JjX2FsYzY1MC5jCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIHNvdW5kL3NvYy9zM2MyNHh4L2xuMjQ0MHNiY19hbGM2NTAuYwpyZW5hbWUgdG8gc291bmQvc29jL3NhbXN1bmcvbG4yNDQwc2JjX2FsYzY1MC5jCmluZGV4IGFiZTY0YWIuLmEyYmIzNGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L2xuMjQ0MHNiY19hbGM2NTAuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9sbjI0NDBzYmNfYWxjNjUwLmMKQEAgLTIxLDEwICsyMSw5IEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKLSNpbmNsdWRlICJzM2MtZG1hLmgiCi0jaW5jbHVkZSAiczNjLWFjOTcuaCIKKyNpbmNsdWRlICJkbWEuaCIKKyNpbmNsdWRlICJhYzk3LmgiCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGxuMjQ0MHNiYzsKIApAQCAtMzIsMTAgKzMxLDEwIEBACiB7CiAJLm5hbWUgPSAiQUM5NyIsCiAJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JLmNwdV9kYWlfbmFtZSA9ICJzM2MtYWM5NyIsCisJLmNwdV9kYWlfbmFtZSA9ICJzYW1zdW5nLWFjOTciLAogCS5jb2RlY19kYWlfbmFtZSA9ICJhYzk3LWhpZmkiLAogCS5jb2RlY19uYW1lID0gImFjOTctY29kZWMiLAotCS5wbGF0Zm9ybV9uYW1lID0gInMzYzI0eHgtcGNtLWF1ZGlvIiwKKwkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKIH0sCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9uZW8xOTczX2d0YTAyX3dtODc1My5jIGIvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M19ndGEwMl93bTg3NTMuYwpzaW1pbGFyaXR5IGluZGV4IDg4JQpyZW5hbWUgZnJvbSBzb3VuZC9zb2MvczNjMjR4eC9uZW8xOTczX2d0YTAyX3dtODc1My5jCnJlbmFtZSB0byBzb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX2d0YTAyX3dtODc1My5jCmluZGV4IGU5N2JkZjEuLjNlZWM2MTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L25lbzE5NzNfZ3RhMDJfd204NzUzLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M19ndGEwMl93bTg3NTMuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIApAQCAtMzIsNyArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPG1hY2gvZ3RhMDIuaD4KICNpbmNsdWRlICIuLi9jb2RlY3Mvd204NzUzLmgiCi0jaW5jbHVkZSAiczNjLWRtYS5oIgorI2luY2x1ZGUgImRtYS5oIgogI2luY2x1ZGUgInMzYzI0eHgtaTJzLmgiCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIG5lbzE5NzNfZ3RhMDI7CkBAIC0zMzMsMTYgKzMzMiwxNyBAQAogc3RhdGljIGludCBuZW8xOTczX2d0YTAyX3dtODc1M19pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IGVycjsKIAogCS8qIHNldCB1cCBOQyBjb2RlYyBwaW5zICovCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVDMiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUNCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FMSIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FMiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIk9VVDMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJPVVQ0Iik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORTEiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSU5FMiIpOwogCiAJLyogQWRkIG5lbzE5NzMgZ3RhMDIgc3BlY2lmaWMgd2lkZ2V0cyAqLwotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODc1M19kYXBtX3dpZGdldHMsCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg3NTNfZGFwbV93aWRnZXRzLAogCQkJCSAgQVJSQVlfU0laRSh3bTg3NTNfZGFwbV93aWRnZXRzKSk7CiAKIAkvKiBhZGQgbmVvMTk3MyBndGEwMiBzcGVjaWZpYyBjb250cm9scyAqLwpAQCAtMzUzLDI1ICszNTMsMjUgQEAKIAkJcmV0dXJuIGVycjsKIAogCS8qIHNldCB1cCBuZW8xOTczIGd0YTAyIHNwZWNpZmljIGF1ZGlvIHBhdGggYXVkaW9fbWFwICovCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CiAKIAkvKiBzZXQgZW5kcG9pbnRzIHRvIGRlZmF1bHQgb2ZmIG1vZGUgKi8KLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJTdGVyZW8gT3V0Iik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiR1NNIExpbmUgT3V0Iik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiR1NNIExpbmUgSW4iKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkc2V0IE1pYyIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhhbmRzZXQgTWljIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGFuZHNldCBTcGsiKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIlN0ZXJlbyBPdXQiKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIE91dCIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiR1NNIExpbmUgSW4iKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRzZXQgTWljIik7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIYW5kc2V0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGFuZHNldCBTcGsiKTsKIAogCS8qIGFsbG93IGF1ZGlvIHBhdGhzIGZyb20gdGhlIEdTTSBtb2RlbSB0byBydW4gZHVyaW5nIHN1c3BlbmQgKi8KLQlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoY29kZWMsICJTdGVyZW8gT3V0Iik7Ci0Jc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKGNvZGVjLCAiR1NNIExpbmUgT3V0Iik7Ci0Jc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKGNvZGVjLCAiR1NNIExpbmUgSW4iKTsKLQlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoY29kZWMsICJIZWFkc2V0IE1pYyIpOwotCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZChjb2RlYywgIkhhbmRzZXQgTWljIik7Ci0Jc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKGNvZGVjLCAiSGFuZHNldCBTcGsiKTsKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoZGFwbSwgIlN0ZXJlbyBPdXQiKTsKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoZGFwbSwgIkdTTSBMaW5lIE91dCIpOworCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZChkYXBtLCAiR1NNIExpbmUgSW4iKTsKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoZGFwbSwgIkhlYWRzZXQgTWljIik7CisJc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKGRhcG0sICJIYW5kc2V0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZChkYXBtLCAiSGFuZHNldCBTcGsiKTsKIAotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDAwLDcgKzQwMCw3IEBACiAJLmNwdV9kYWlfbmFtZSA9ICJzM2MyNHh4LWkycyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My1oaWZpIiwKIAkuaW5pdCA9IG5lbzE5NzNfZ3RhMDJfd204NzUzX2luaXQsCi0JLnBsYXRmb3JtX25hbWUgPSAiczNjMjR4eC1wY20tYXVkaW8iLAorCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAogCS5jb2RlY19uYW1lID0gIndtODc1My1jb2RlYy4wLTB4MWEiLAogCS5vcHMgPSAmbmVvMTk3M19ndGEwMl9oaWZpX29wcywKIH0sCkBAIC00MTEsNyArNDExLDcgQEAKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzUzLXZvaWNlIiwKIAkub3BzID0gJm5lbzE5NzNfZ3RhMDJfdm9pY2Vfb3BzLAogCS5jb2RlY19uYW1lID0gIndtODc1My1jb2RlYy4wLTB4MWEiLAotCS5wbGF0Zm9ybV9uYW1lID0gInMzYzI0eHgtcGNtLWF1ZGlvIiwKKwkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKIH0sCiB9OwogCkBAIC00MzgsMjUgKzQzOCwyMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIHJlZ2lzdGVyIGJsdWV0b290aCBEQUkgaGVyZSAqLwotCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZuZW8xOTczX2d0YTAyX3NuZF9kZXZpY2UtPmRldiwgLTEsICZidF9kYWkpOwotCWlmIChyZXQpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChuZW8xOTczX2d0YTAyX3NuZF9kZXZpY2UpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmbmVvMTk3M19ndGEwMl9zbmRfZGV2aWNlLT5kZXYsICZidF9kYWkpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3B1dF9kZXZpY2U7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShuZW8xOTczX2d0YTAyX3NuZF9kZXZpY2UsICZuZW8xOTczX2d0YTAyKTsKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG5lbzE5NzNfZ3RhMDJfc25kX2RldmljZSk7CiAKLQlpZiAocmV0KSB7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQobmVvMTk3M19ndGEwMl9zbmRfZGV2aWNlKTsKLQkJcmV0dXJuIHJldDsKLQl9CisJaWYgKHJldCkKKwkJZ290byBlcnJfdW5yZWdpc3Rlcl9kYWk7CiAKIAkvKiBJbml0aWFsaXNlIEdQSU9zIHVzZWQgYnkgYW1wICovCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdUQTAyX0dQSU9fSFBfSU4sICJHVEEwMl9IUF9JTiIpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJndGEwMl93bTg3NTM6IEZhaWxlZCB0byByZWdpc3RlciBHUElPICVkXG4iLCBHVEEwMl9HUElPX0hQX0lOKTsKLQkJZ290byBlcnJfdW5yZWdpc3Rlcl9kZXZpY2U7CisJCWdvdG8gZXJyX2RlbF9kZXZpY2U7CiAJfQogCiAJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdUQTAyX0dQSU9fSFBfSU4sIDEpOwpAQCAtNDgzLDE1ICs0NzksMTkgQEAKIAlncGlvX2ZyZWUoR1RBMDJfR1BJT19BTVBfU0hVVCk7CiBlcnJfZnJlZV9ncGlvX2hwX2luOgogCWdwaW9fZnJlZShHVEEwMl9HUElPX0hQX0lOKTsKLWVycl91bnJlZ2lzdGVyX2RldmljZToKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihuZW8xOTczX2d0YTAyX3NuZF9kZXZpY2UpOworZXJyX2RlbF9kZXZpY2U6CisJcGxhdGZvcm1fZGV2aWNlX2RlbChuZW8xOTczX2d0YTAyX3NuZF9kZXZpY2UpOworZXJyX3VucmVnaXN0ZXJfZGFpOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJm5lbzE5NzNfZ3RhMDJfc25kX2RldmljZS0+ZGV2KTsKK2Vycl9wdXRfZGV2aWNlOgorCXBsYXRmb3JtX2RldmljZV9wdXQobmVvMTk3M19ndGEwMl9zbmRfZGV2aWNlKTsKIAlyZXR1cm4gcmV0OwogfQogbW9kdWxlX2luaXQobmVvMTk3M19ndGEwMl9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IG5lbzE5NzNfZ3RhMDJfZXhpdCh2b2lkKQogewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJm5lbzE5NzNfZ3RhMDJfc25kX2RldmljZS0+ZGV2LCAtMSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmbmVvMTk3M19ndGEwMl9zbmRfZGV2aWNlLT5kZXYpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG5lbzE5NzNfZ3RhMDJfc25kX2RldmljZSk7CiAJZ3Bpb19mcmVlKEdUQTAyX0dQSU9fSFBfSU4pOwogCWdwaW9fZnJlZShHVEEwMl9HUElPX0FNUF9TSFVUKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L25lbzE5NzNfd204NzUzLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jCnNpbWlsYXJpdHkgaW5kZXggODMlCnJlbmFtZSBmcm9tIHNvdW5kL3NvYy9zM2MyNHh4L25lbzE5NzNfd204NzUzLmMKcmVuYW1lIHRvIHNvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfd204NzUzLmMKaW5kZXggZjRmMmVlNy4uYzdhMjQ1MSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvbmVvMTk3M193bTg3NTMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMzYsNyArMzUsNyBAQAogCiAjaW5jbHVkZSAiLi4vY29kZWNzL3dtODc1My5oIgogI2luY2x1ZGUgImxtNDg1Ny5oIgotI2luY2x1ZGUgInMzYy1kbWEuaCIKKyNpbmNsdWRlICJkbWEuaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgogCiAvKiBkZWZpbmUgdGhlIHNjZW5hcmlvcyAqLwpAQCAtMjM3LDgxICsyMzYsODMgQEAKIAogc3RhdGljIGludCBzZXRfc2NlbmFyaW9fZW5kcG9pbnRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHNjZW5hcmlvKQogeworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKKwogCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzd2l0Y2ggKG5lbzE5NzNfc2NlbmFyaW8pIHsKIAljYXNlIE5FT19BVURJT19PRkY6Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkF1ZGlvIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiR1NNIExpbmUgSW4iKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBNaWMiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiQ2FsbCBNaWMiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJBdWRpbyBPdXQiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJHU00gTGluZSBPdXQiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJHU00gTGluZSBJbiIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRzZXQgTWljIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiQ2FsbCBNaWMiKTsKIAkJYnJlYWs7CiAJY2FzZSBORU9fR1NNX0NBTExfQVVESU9fSEFORFNFVDoKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJBdWRpbyBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBJbiIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkc2V0IE1pYyIpOwotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkNhbGwgTWljIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJBdWRpbyBPdXQiKTsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIE91dCIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiR1NNIExpbmUgSW4iKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkc2V0IE1pYyIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiQ2FsbCBNaWMiKTsKIAkJYnJlYWs7CiAJY2FzZSBORU9fR1NNX0NBTExfQVVESU9fSEVBRFNFVDoKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJBdWRpbyBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBJbiIpOwotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgTWljIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkNhbGwgTWljIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJBdWRpbyBPdXQiKTsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIE91dCIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiR1NNIExpbmUgSW4iKTsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkhlYWRzZXQgTWljIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiQ2FsbCBNaWMiKTsKIAkJYnJlYWs7CiAJY2FzZSBORU9fR1NNX0NBTExfQVVESU9fQkxVRVRPT1RIOgotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJBdWRpbyBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBJbiIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkc2V0IE1pYyIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJDYWxsIE1pYyIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkF1ZGlvIE91dCIpOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiR1NNIExpbmUgT3V0Iik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJHU00gTGluZSBJbiIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRzZXQgTWljIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiQ2FsbCBNaWMiKTsKIAkJYnJlYWs7CiAJY2FzZSBORU9fU1RFUkVPX1RPX1NQRUFLRVJTOgotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkF1ZGlvIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiR1NNIExpbmUgSW4iKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBNaWMiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiQ2FsbCBNaWMiKTsKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkF1ZGlvIE91dCIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIE91dCIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIEluIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiSGVhZHNldCBNaWMiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJDYWxsIE1pYyIpOwogCQlicmVhazsKIAljYXNlIE5FT19TVEVSRU9fVE9fSEVBRFBIT05FUzoKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJBdWRpbyBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiR1NNIExpbmUgT3V0Iik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkdTTSBMaW5lIEluIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgTWljIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkNhbGwgTWljIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJBdWRpbyBPdXQiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJHU00gTGluZSBPdXQiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJHU00gTGluZSBJbiIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRzZXQgTWljIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiQ2FsbCBNaWMiKTsKIAkJYnJlYWs7CiAJY2FzZSBORU9fQ0FQVFVSRV9IQU5EU0VUOgotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJBdWRpbyBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiR1NNIExpbmUgT3V0Iik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkdTTSBMaW5lIEluIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgTWljIik7Ci0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiQ2FsbCBNaWMiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJBdWRpbyBPdXQiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJHU00gTGluZSBPdXQiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJHU00gTGluZSBJbiIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRzZXQgTWljIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJDYWxsIE1pYyIpOwogCQlicmVhazsKIAljYXNlIE5FT19DQVBUVVJFX0hFQURTRVQ6Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkF1ZGlvIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiR1NNIExpbmUgSW4iKTsKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJIZWFkc2V0IE1pYyIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJDYWxsIE1pYyIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkF1ZGlvIE91dCIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIE91dCIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkdTTSBMaW5lIEluIik7CisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIZWFkc2V0IE1pYyIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkNhbGwgTWljIik7CiAJCWJyZWFrOwogCWNhc2UgTkVPX0NBUFRVUkVfQkxVRVRPT1RIOgotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJBdWRpbyBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiR1NNIExpbmUgT3V0Iik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkdTTSBMaW5lIEluIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgTWljIik7Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkNhbGwgTWljIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiQXVkaW8gT3V0Iik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiR1NNIExpbmUgT3V0Iik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiR1NNIExpbmUgSW4iKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkc2V0IE1pYyIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkNhbGwgTWljIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkF1ZGlvIE91dCIpOwotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBPdXQiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiR1NNIExpbmUgSW4iKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBNaWMiKTsKLQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiQ2FsbCBNaWMiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJBdWRpbyBPdXQiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJHU00gTGluZSBPdXQiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJHU00gTGluZSBJbiIpOworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRzZXQgTWljIik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiQ2FsbCBNaWMiKTsKIAl9CiAKLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUwMiwyMCArNTAzLDIxIEBACiBzdGF0aWMgaW50IG5lbzE5NzNfd204NzUzX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlpbnQgZXJyOwogCiAJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIHNldCB1cCBOQyBjb2RlYyBwaW5zICovCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxPVVQyIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJPVVQyIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVDMiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUNCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FMSIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FMiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxPVVQyIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiUk9VVDIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJPVVQzIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiT1VUNCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTkUxIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORTIiKTsKIAogCS8qIEFkZCBuZW8xOTczIHNwZWNpZmljIHdpZGdldHMgKi8KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3NTNfZGFwbV93aWRnZXRzLAorCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204NzUzX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUod204NzUzX2RhcG1fd2lkZ2V0cykpOwogCiAJLyogc2V0IGVuZHBvaW50cyB0byBkZWZhdWx0IG1vZGUgKi8KQEAgLTUyOCwxMCArNTMwLDEwIEBACiAJCXJldHVybiBlcnI7CiAKIAkvKiBzZXQgdXAgbmVvMTk3MyBzcGVjaWZpYyBhdWRpbyByb3V0ZXMgKi8KLQllcnIgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgZGFwbV9yb3V0ZXMsCisJZXJyID0gc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgZGFwbV9yb3V0ZXMsCiAJCQkJICAgICAgQVJSQVlfU0laRShkYXBtX3JvdXRlcykpOwogCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCXJldHVybiAwOwogfQogCkBAIC01NTYsNyArNTU4LDcgQEAKIHsgLyogSGlmaSBQbGF5YmFjayAtIGZvciBzaW1pbGF0aW91cyB1c2Ugd2l0aCB2b2ljZSBiZWxvdyAqLwogCS5uYW1lID0gIldNODc1MyIsCiAJLnN0cmVhbV9uYW1lID0gIldNODc1MyBIaUZpIiwKLQkucGxhdGZvcm1fbmFtZSA9ICJzM2MyNHh4LXBjbS1hdWRpbyIsCisJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCiAJLmNwdV9kYWlfbmFtZSA9ICJzM2MyNHh4LWkycyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My1oaWZpIiwKIAkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0weDFhIiwKQEAgLTU2Niw3ICs1NjgsNyBAQAogeyAvKiBWb2ljZSB2aWEgQlQgKi8KIAkubmFtZSA9ICJCbHVldG9vdGgiLAogCS5zdHJlYW1fbmFtZSA9ICJWb2ljZSIsCi0JLnBsYXRmb3JtX25hbWUgPSAiczNjMjR4eC1wY20tYXVkaW8iLAorCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAogCS5jcHVfZGFpX25hbWUgPSAiYmx1ZXRvb3RoLWRhaSIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My12b2ljZSIsCiAJLmNvZGVjX25hbWUgPSAid204NzUzLWNvZGVjLjAtMHgxYSIsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtcGNtLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9wY20uYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBzb3VuZC9zb2MvczNjMjR4eC9zM2MtcGNtLmMKcmVuYW1lIHRvIHNvdW5kL3NvYy9zYW1zdW5nL3BjbS5jCmluZGV4IDJlMDIwZTEuLjQ4ZDBiNzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1wY20uYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9wY20uYwpAQCAtMSw0ICsxLDQgQEAKLS8qIHNvdW5kL3NvYy9zM2MyNHh4L3MzYy1wY20uYworLyogc291bmQvc29jL3NhbXN1bmcvcGNtLmMKICAqCiAgKiBBTFNBIFNvQyBBdWRpbyBMYXllciAtIFMzQyBQQ00tQ29udHJvbGxlciBkcml2ZXIKICAqCkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgogI2luY2x1ZGUgPHBsYXQvZG1hLmg+CiAKLSNpbmNsdWRlICJzM2MtZG1hLmgiCi0jaW5jbHVkZSAiczNjLXBjbS5oIgorI2luY2x1ZGUgImRtYS5oIgorI2luY2x1ZGUgInBjbS5oIgogCiBzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2NfcGNtX2RtYV9jbGllbnRfb3V0ID0gewogCS5uYW1lCQk9ICJQQ00gU3RlcmVvIG91dCIKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1wY20uaCBiL3NvdW5kL3NvYy9zYW1zdW5nL3BjbS5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHNvdW5kL3NvYy9zM2MyNHh4L3MzYy1wY20uaApyZW5hbWUgdG8gc291bmQvc29jL3NhbXN1bmcvcGNtLmgKaW5kZXggZjYwYmFhMS4uMDMzOTNkYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjLXBjbS5oCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3BjbS5oCkBAIC0xLDQgKzEsNCBAQAotLyogIHNvdW5kL3NvYy9zM2MyNHh4L3MzYy1wY20uaAorLyogIHNvdW5kL3NvYy9zYW1zdW5nL3BjbS5oCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9yZWdzLWkycy12Mi5oIGIvc291bmQvc29jL3NhbXN1bmcvcmVncy1pMnMtdjIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc291bmQvc29jL3MzYzI0eHgvcmVncy1pMnMtdjIuaApyZW5hbWUgdG8gc291bmQvc29jL3NhbXN1bmcvcmVncy1pMnMtdjIuaApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvcngxOTUwX3VkYTEzODAuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3J4MTk1MF91ZGExMzgwLmMKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gc291bmQvc29jL3MzYzI0eHgvcngxOTUwX3VkYTEzODAuYwpyZW5hbWUgdG8gc291bmQvc29jL3NhbXN1bmcvcngxOTUwX3VkYTEzODAuYwppbmRleCA0NjhjYzExLi5mNDAwMjc0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9yeDE5NTBfdWRhMTM4MC5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3J4MTk1MF91ZGExMzgwLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvdWRhMTM4MC5oPgogI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KIApAQCAtMzUsNyArMzQsNyBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgInMzYy1kbWEuaCIKKyNpbmNsdWRlICJkbWEuaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgogI2luY2x1ZGUgIi4uL2NvZGVjcy91ZGExMzgwLmgiCiAKQEAgLTk1LDcgKzk0LDcgQEAKIAkJLmNwdV9kYWlfbmFtZQk9ICJzM2MyNHh4LWlpcyIsCiAJCS5jb2RlY19kYWlfbmFtZQk9ICJ1ZGExMzgwLWhpZmkiLAogCQkuaW5pdAkJPSByeDE5NTBfdWRhMTM4MF9pbml0LAotCQkucGxhdGZvcm1fbmFtZQk9ICJzM2MyNHh4LXBjbS1hdWRpbyIsCisJCS5wbGF0Zm9ybV9uYW1lCT0gInNhbXN1bmctYXVkaW8iLAogCQkuY29kZWNfbmFtZQk9ICJ1ZGExMzgwLWNvZGVjLjAtMDAxYSIsCiAJCS5vcHMJCT0gJnJ4MTk1MF9vcHMsCiAJfSwKQEAgLTIyOCwyNiArMjI3LDI4IEBACiBzdGF0aWMgaW50IHJ4MTk1MF91ZGExMzgwX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlpbnQgZXJyOwogCiAJLyogQWRkIHJ4MTk1MCBzcGVjaWZpYyB3aWRnZXRzICovCi0JZXJyID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgdWRhMTM4MF9kYXBtX3dpZGdldHMsCisJZXJyID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB1ZGExMzgwX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUodWRhMTM4MF9kYXBtX3dpZGdldHMpKTsKIAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAkvKiBTZXQgdXAgcngxOTUwIHNwZWNpZmljIGF1ZGlvIHBhdGggYXVkaW9fbWFwbmVjdHMgKi8KLQllcnIgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLAorCWVyciA9IHNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwKIAkJCQkgICAgICBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIlNwZWFrZXIiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSGVhZHBob25lIEphY2siKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiU3BlYWtlciIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJNaWMgSmFjayIpOwogCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCiAJc25kX3NvY19qYWNrX25ldyhjb2RlYywgIkhlYWRwaG9uZSBKYWNrIiwgU05EX0pBQ0tfSEVBRFBIT05FLAogCQkmaHBfamFjayk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MtaTJzLXYyLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5jCnJlbmFtZSB0byBzb3VuZC9zb2Mvc2Ftc3VuZy9zM2MtaTJzLXYyLmMKaW5kZXggYjM4NjZkNS4uMDk0ZjM2ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYy1pMnMtdjIuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIHNvdW5kL3NvYy9zM2MyNHh4L3MzYy1pMmMtdjIuYworLyogc291bmQvc29jL3NhbXN1bmcvczNjLWkyYy12Mi5jCiAgKgogICogQUxTQSBTb2MgQXVkaW8gTGF5ZXIgLSBJMlMgY29yZSBmb3IgbmV3ZXIgU2Ftc3VuZyBTb0NzLgogICoKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgInJlZ3MtaTJzLXYyLmgiCiAjaW5jbHVkZSAiczNjLWkycy12Mi5oIgotI2luY2x1ZGUgInMzYy1kbWEuaCIKKyNpbmNsdWRlICJkbWEuaCIKIAogI3VuZGVmIFMzQ19JSVNfVjJfU1VQUE9SVEVECiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1pMnMtdjIuaCBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYy1pMnMtdjIuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBzb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmgKcmVuYW1lIHRvIHNvdW5kL3NvYy9zYW1zdW5nL3MzYy1pMnMtdjIuaAppbmRleCBkNDU4MzAxLi5mODI5N2Q5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmgKKysrIGIvc291bmQvc29jL3NhbXN1bmcvczNjLWkycy12Mi5oCkBAIC0xLDQgKzEsNCBAQAotLyogc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5oCisvKiBzb3VuZC9zb2Mvc2Ftc3VuZy9zM2MtaTJzLXYyLmgKICAqCiAgKiBBTFNBIFNvYyBBdWRpbyBMYXllciAtIFMzQ19JMlNWMiBJMlMgZHJpdmVyCiAgKgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0MTItaTJzLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuYwpyZW5hbWUgdG8gc291bmQvc29jL3NhbXN1bmcvczNjMjQxMi1pMnMuYwppbmRleCA0YTg2MWNmLi43ZWE4Mzc4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0MTItaTJzLmMKQEAgLTEsNCArMSw0IEBACi0vKiBzb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5jCisvKiBzb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNDEyLWkycy5jCiAgKgogICogQUxTQSBTb2MgQXVkaW8gTGF5ZXIgLSBTM0MyNDEyIEkyUyBkcml2ZXIKICAqCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCi0jaW5jbHVkZSAiczNjLWRtYS5oIgorI2luY2x1ZGUgImRtYS5oIgogI2luY2x1ZGUgInJlZ3MtaTJzLXYyLmgiCiAjaW5jbHVkZSAiczNjMjQxMi1pMnMuaCIKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuaCBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0MTItaTJzLmgKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuaApyZW5hbWUgdG8gc291bmQvc29jL3NhbXN1bmcvczNjMjQxMi1pMnMuaAppbmRleCAwMWEwNDcxLi4wMmFkNTc5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5oCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0MTItaTJzLmgKQEAgLTEsNCArMSw0IEBACi0vKiBzb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5jCisvKiBzb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNDEyLWkycy5jCiAgKgogICogQUxTQSBTb2MgQXVkaW8gTGF5ZXIgLSBTM0MyNDEyIEkyUyBkcml2ZXIKICAqCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWkycy5jIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eC1pMnMuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWkycy5jCnJlbmFtZSB0byBzb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4LWkycy5jCmluZGV4IGUwNjBkYWEuLjEzZTQxZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtaTJzLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eC1pMnMuYwpAQCAtMzgsNyArMzgsNyBAQAogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogCi0jaW5jbHVkZSAiczNjLWRtYS5oIgorI2luY2x1ZGUgImRtYS5oIgogI2luY2x1ZGUgInMzYzI0eHgtaTJzLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzI0eHhfZG1hX2NsaWVudF9vdXQgPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWkycy5oIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eC1pMnMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1pMnMuaApyZW5hbWUgdG8gc291bmQvc29jL3NhbXN1bmcvczNjMjR4eC1pMnMuaApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWMuYwpyZW5hbWUgdG8gc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWMuYwppbmRleCBjNGMxMTE0Li5hNDM0MDMyZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlYy5jCkBAIC0xLDQgKzEsNCBAQAotLyogc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWMuYworLyogc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWMuYwogICoKICAqIENvcHlyaWdodCAyMDA5IFNpbXRlYyBFbGVjdHJvbmljcwogICoKQEAgLTE3LDExICsxNywxMCBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8cGxhdC9hdWRpby1zaW10ZWMuaD4KIAotI2luY2x1ZGUgInMzYy1kbWEuaCIKKyNpbmNsdWRlICJkbWEuaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgogI2luY2x1ZGUgInMzYzI0eHhfc2ltdGVjLmgiCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjLmggYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlYy5oCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIHNvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjLmgKcmVuYW1lIHRvIHNvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjLmgKaW5kZXggZTYzZDVmZi4uODI3MDc0OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWMuaAorKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlYy5oCkBAIC0xLDQgKzEsNCBAQAotLyogc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWMuaAorLyogc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWMuaAogICoKICAqIENvcHlyaWdodCAyMDA5IFNpbXRlYyBFbGVjdHJvbmljcwogICoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjX2hlcm1lcy5jIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfaGVybWVzLmMKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWNfaGVybWVzLmMKcmVuYW1lIHRvIHNvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjX2hlcm1lcy5jCmluZGV4IGY4ODQ1MzcuLmJiNDI5MmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjX2hlcm1lcy5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjX2hlcm1lcy5jCkBAIC0xLDQgKzEsNCBAQAotLyogc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWNfaGVybWVzLmMKKy8qIHNvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjX2hlcm1lcy5jCiAgKgogICogQ29weXJpZ2h0IDIwMDkgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKgpAQCAtMTQsMTYgKzE0LDEzIEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKICNpbmNsdWRlIDxwbGF0L2F1ZGlvLXNpbXRlYy5oPgogCi0jaW5jbHVkZSAiczNjLWRtYS5oIgorI2luY2x1ZGUgImRtYS5oIgogI2luY2x1ZGUgInMzYzI0eHgtaTJzLmgiCiAjaW5jbHVkZSAiczNjMjR4eF9zaW10ZWMuaCIKIAotI2luY2x1ZGUgIi4uL2NvZGVjcy90bHYzMjBhaWMzeC5oIgotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgZGFwbV93aWRnZXRzW10gPSB7CiAJU05EX1NPQ19EQVBNX0xJTkUoIkdTTSBPdXQiLCBOVUxMKSwKIAlTTkRfU09DX0RBUE1fTElORSgiR1NNIEluIiwgTlVMTCksCkBAIC03NiwxOSArNzMsMjAgQEAKIHN0YXRpYyBpbnQgc2ltdGVjX2hlcm1lc19pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBkYXBtX3dpZGdldHMsCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBkYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKGRhcG1fd2lkZ2V0cykpOwogCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGJhc2VfbWFwLCBBUlJBWV9TSVpFKGJhc2VfbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYmFzZV9tYXAsIEFSUkFZX1NJWkUoYmFzZV9tYXApKTsKIAotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkxpbmUgSW4iKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkxpbmUgT3V0Iik7Ci0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJNaWMgSmFjayIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJIZWFkcGhvbmUgSmFjayIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJMaW5lIEluIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkxpbmUgT3V0Iik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIk1pYyBKYWNrIik7CiAKIAlzaW10ZWNfYXVkaW9faW5pdChydGQpOwotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTksNyArOTcsNyBAQAogCS5jb2RlY19uYW1lCT0gInRsdjMyMGFpYzN4LWNvZGVjLjAtMHgxYSIsCiAJLmNwdV9kYWlfbmFtZQk9ICJzM2MyNHh4LWkycyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gInRsdjMyMGFpYzN4LWhpZmkiLAotCS5wbGF0Zm9ybV9uYW1lCT0gInMzYzI0eHgtcGNtLWF1ZGlvIiwKKwkucGxhdGZvcm1fbmFtZQk9ICJzYW1zdW5nLWF1ZGlvIiwKIAkuaW5pdAkJPSBzaW10ZWNfaGVybWVzX2luaXQsCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3NpbXRlY190bHYzMjBhaWMyMy5jIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYwpzaW1pbGFyaXR5IGluZGV4IDg2JQpyZW5hbWUgZnJvbSBzb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3NpbXRlY190bHYzMjBhaWMyMy5jCnJlbmFtZSB0byBzb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY190bHYzMjBhaWMyMy5jCmluZGV4IGMwOTY3NTkuLmZiYmE0ZTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjX3RsdjMyMGFpYzIzLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIHNvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjX3RsdjMyMGFpYzIzLmMKKy8qIHNvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjX3RsdjMyMGFpYzIzLmMKICAqCiAgKiBDb3B5cmlnaHQgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCkBAIC0xNCwxMSArMTQsMTAgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPHBsYXQvYXVkaW8tc2ltdGVjLmg+CiAKLSNpbmNsdWRlICJzM2MtZG1hLmgiCisjaW5jbHVkZSAiZG1hLmgiCiAjaW5jbHVkZSAiczNjMjR4eC1pMnMuaCIKICNpbmNsdWRlICJzM2MyNHh4X3NpbXRlYy5oIgogCkBAIC02NSwxOSArNjQsMjAgQEAKIHN0YXRpYyBpbnQgc2ltdGVjX3RsdjMyMGFpYzIzX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGRhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIGRhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUoZGFwbV93aWRnZXRzKSk7CiAKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYmFzZV9tYXAsIEFSUkFZX1NJWkUoYmFzZV9tYXApKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBiYXNlX21hcCwgQVJSQVlfU0laRShiYXNlX21hcCkpOwogCi0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJIZWFkcGhvbmUgSmFjayIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTGluZSBJbiIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTGluZSBPdXQiKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIk1pYyBKYWNrIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkhlYWRwaG9uZSBKYWNrIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkxpbmUgSW4iKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiTGluZSBPdXQiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiTWljIEphY2siKTsKIAogCXNpbXRlY19hdWRpb19pbml0KHJ0ZCk7Ci0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04OCw3ICs4OCw3IEBACiAJLmNvZGVjX25hbWUJPSAidGx2MzIwYWljM3gtY29kZWMuMC0weDFhIiwKIAkuY3B1X2RhaV9uYW1lCT0gInMzYzI0eHgtaTJzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAidGx2MzIwYWljM3gtaGlmaSIsCi0JLnBsYXRmb3JtX25hbWUJPSAiczNjMjR4eC1wY20tYXVkaW8iLAorCS5wbGF0Zm9ybV9uYW1lCT0gInNhbXN1bmctYXVkaW8iLAogCS5pbml0CQk9IHNpbXRlY190bHYzMjBhaWMyM19pbml0LAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF91ZGExMzR4LmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3VkYTEzNHguYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBzb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3VkYTEzNHguYwpyZW5hbWUgdG8gc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKaW5kZXggYmQ0OGZmYi4uY2RjOGVjYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF91ZGExMzR4LmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKQEAgLTE4LDEzICsxOCwxMiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL3MzYzI0eHhfdWRhMTM0eC5oPgogI2luY2x1ZGUgPHNvdW5kL3VkYTEzNHguaD4KIAogI2luY2x1ZGUgPHBsYXQvcmVncy1paXMuaD4KIAotI2luY2x1ZGUgInMzYy1kbWEuaCIKKyNpbmNsdWRlICJkbWEuaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgogI2luY2x1ZGUgIi4uL2NvZGVjcy91ZGExMzR4LmgiCiAKQEAgLTIzMSw3ICsyMzAsNyBAQAogCS5jb2RlY19kYWlfbmFtZSA9ICJ1ZGExMzR4LWhpZmkiLAogCS5jcHVfZGFpX25hbWUgPSAiczNjMjR4eC1pMnMiLAogCS5vcHMgPSAmczNjMjR4eF91ZGExMzR4X29wcywKLQkucGxhdGZvcm1fbmFtZQk9ICJzM2MyNHh4LXBjbS1hdWRpbyIsCisJLnBsYXRmb3JtX25hbWUJPSAic2Ftc3VuZy1hdWRpbyIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbmRfc29jX3MzYzI0eHhfdWRhMTM0eCA9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3NtYXJ0cV93bTg5ODcuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NtYXJ0cV93bTg5ODcuYwpzaW1pbGFyaXR5IGluZGV4IDgyJQpyZW5hbWUgZnJvbSBzb3VuZC9zb2MvczNjMjR4eC9zbWFydHFfd204OTg3LmMKcmVuYW1lIHRvIHNvdW5kL3NvYy9zYW1zdW5nL3NtYXJ0cV93bTg5ODcuYwppbmRleCBkZDIwY2E3Li42MWUyYjUyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zbWFydHFfd204OTg3LmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvc21hcnRxX3dtODk4Ny5jCkBAIC0xLDQgKzEsNCBAQAotLyogc291bmQvc29jL3MzYzI0eHgvc21hcnRxX3dtODk4Ny5jCisvKiBzb3VuZC9zb2Mvc2Ftc3VuZy9zbWFydHFfd204OTg3LmMKICAqCiAgKiBDb3B5cmlnaHQgMjAxMCBNYXVydXMgQ3VlbGVuYWVyZSA8bWN1ZWxlbmFlcmVAZ21haWwuY29tPgogICoKQEAgLTE5LDEzICsxOSwxMyBAQAogCiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvamFjay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgInMzYy1kbWEuaCIKLSNpbmNsdWRlICJzM2M2NHh4LWkycy5oIgorI2luY2x1ZGUgImRtYS5oIgorI2luY2x1ZGUgImkycy5oIgogCiAjaW5jbHVkZSAiLi4vY29kZWNzL3dtODc1MC5oIgogCkBAIC0zOSwxNSArMzksMTEgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwotCXN0cnVjdCBzM2NfaTJzdjJfcmF0ZV9jYWxjIGRpdjsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKIAl1bnNpZ25lZCBpbnQgY2xrID0gMDsKIAlpbnQgcmV0OwogCi0JczNjX2kyc3YyX2lpc19jYWxjX3JhdGUoJmRpdiwgTlVMTCwgcGFyYW1zX3JhdGUocGFyYW1zKSwKLQkJCQlzM2NfaTJzdjJfZ2V0X2Nsb2NrKGNwdV9kYWkpKTsKLQogCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgewogCWNhc2UgODAwMDoKIAljYXNlIDE2MDAwOgpAQCAtNzgsMjMgKzc0LDI0IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKKwkvKiBVc2UgUENMSyBmb3IgSTJTIHNpZ25hbCBnZW5lcmF0aW9uICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBTQU1TVU5HX0kyU19SQ0xLU1JDXzAsCisJCQkJCTAsIFNORF9TT0NfQ0xPQ0tfSU4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogR2F0ZSB0aGUgUkNMSyBvdXRwdXQgb24gUEFEICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBTQU1TVU5HX0kyU19DRENMSywKKwkJCQkJMCwgU05EX1NPQ19DTE9DS19JTik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKIAkvKiBzZXQgdGhlIGNvZGVjIHN5c3RlbSBjbG9jayBmb3IgREFDIGFuZCBBREMgKi8KIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004NzUwX1NZU0NMSywgY2xrLAogCQkJCSAgICAgU05EX1NPQ19DTE9DS19JTik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQkvKiBzZXQgTUNMSyBkaXZpc2lvbiBmb3Igc2FtcGxlIHJhdGUgKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksIFMzQ19JMlNWMl9ESVZfUkNMSywgZGl2LmZzX2Rpdik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBzZXQgcHJlc2NhbGVyIGRpdmlzaW9uIGZvciBzYW1wbGUgcmF0ZSAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY3B1X2RhaSwgUzNDX0kyU1YyX0RJVl9QUkVTQ0FMRVIsCi0JCQkJICAgICBkaXYuY2xrX2RpdiAtIDEpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1NiwxMiArMTUzLDE0IEBACiAJeyJMSU5QVVQyIiwgTlVMTCwgIk1pYyBCaWFzIn0sCiB9OwogCi1zdGF0aWMgaW50IHNtYXJ0cV93bTg5ODdfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCitzdGF0aWMgaW50IHNtYXJ0cV93bTg5ODdfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCWludCBlcnIgPSAwOwogCiAJLyogQWRkIFNtYXJ0USBzcGVjaWZpYyB3aWRnZXRzICovCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTg3X2RhcG1fd2lkZ2V0cywKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk4N19kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHdtODk4N19kYXBtX3dpZGdldHMpKTsKIAogCS8qIGFkZCBTbWFydFEgc3BlY2lmaWMgY29udHJvbHMgKi8KQEAgLTE3MiwyNSArMTcxLDI1IEBACiAJCXJldHVybiBlcnI7CiAKIAkvKiBzZXR1cCBTbWFydFEgc3BlY2lmaWMgYXVkaW8gcGF0aCAqLwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOwogCiAJLyogc2V0IGVuZHBvaW50cyB0byBub3QgY29ubmVjdGVkICovCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTlBVVDEiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUklOUFVUMSIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVQzIik7Ci0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJPVVQxIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElOUFVUMSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlJJTlBVVDEiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJPVVQzIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiUk9VVDEiKTsKIAogCS8qIHNldCBlbmRwb2ludHMgdG8gZGVmYXVsdCBvZmYgbW9kZSAqLwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSW50ZXJuYWwgU3BlYWtlciIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSW50ZXJuYWwgTWljIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSW50ZXJuYWwgU3BlYWtlciIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJJbnRlcm5hbCBNaWMiKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhlYWRwaG9uZSBKYWNrIik7CiAKLQllcnIgPSBzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJZXJyID0gc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCS8qIEhlYWRwaG9uZSBqYWNrIGRldGVjdGlvbiAqLwotCWVyciA9IHNuZF9zb2NfamFja19uZXcoJnNuZF9zb2Nfc21hcnRxLCAiSGVhZHBob25lIEphY2siLAorCWVyciA9IHNuZF9zb2NfamFja19uZXcoY29kZWMsICJIZWFkcGhvbmUgSmFjayIsCiAJCQkgICAgICAgU05EX0pBQ0tfSEVBRFBIT05FLCAmc21hcnRxX2phY2spOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0yMTEsOSArMjEwLDkgQEAKIAl7CiAJCS5uYW1lCQk9ICJ3bTg5ODciLAogCQkuc3RyZWFtX25hbWUJPSAiU21hcnRRIEhpLUZpIiwKLQkJLmNwdV9kYWlfbmFtZQk9ICJzM2M2NHh4LWkycy4wIiwKKwkJLmNwdV9kYWlfbmFtZQk9ICJzYW1zdW5nLWkycy4wIiwKIAkJLmNvZGVjX2RhaV9uYW1lCT0gIndtODc1MC1oaWZpIiwKLQkJLnBsYXRmb3JtX25hbWUJPSAiczNjMjR4eC1wY20tYXVkaW8iLAorCQkucGxhdGZvcm1fbmFtZQk9ICJzYW1zdW5nLWF1ZGlvIiwKIAkJLmNvZGVjX25hbWUJPSAid204NzUwLWNvZGVjLjAtMHgxYSIsCiAJCS5pbml0CQk9IHNtYXJ0cV93bTg5ODdfaW5pdCwKIAkJLm9wcwkJPSAmc21hcnRxX2hpZmlfb3BzLApAQCAtMjc1LDYgKzI3NCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbWFydHFfZXhpdCh2b2lkKQogeworCWdwaW9fZnJlZShTM0M2NFhYX0dQSygxMikpOwogCXNuZF9zb2NfamFja19mcmVlX2dwaW9zKCZzbWFydHFfamFjaywgQVJSQVlfU0laRShzbWFydHFfamFja19ncGlvcyksCiAJCQkJc21hcnRxX2phY2tfZ3Bpb3MpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zbWRrMjQ0M193bTk3MTAuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NtZGsyNDQzX3dtOTcxMC5jCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIHNvdW5kL3NvYy9zM2MyNHh4L3NtZGsyNDQzX3dtOTcxMC5jCnJlbmFtZSB0byBzb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrMjQ0M193bTk3MTAuYwppbmRleCA0NjEzMjg4Li4zYmU3ZTdlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zbWRrMjQ0M193bTk3MTAuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrMjQ0M193bTk3MTAuYwpAQCAtMTcsMTAgKzE3LDkgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAotI2luY2x1ZGUgInMzYy1kbWEuaCIKLSNpbmNsdWRlICJzM2MtYWM5Ny5oIgorI2luY2x1ZGUgImRtYS5oIgorI2luY2x1ZGUgImFjOTcuaCIKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc21kazI0NDM7CiAKQEAgLTI4LDEwICsyNywxMCBAQAogewogCS5uYW1lID0gIkFDOTciLAogCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAotCS5jcHVfZGFpX25hbWUgPSAiczNjLWFjOTciLAorCS5jcHVfZGFpX25hbWUgPSAic2Ftc3VuZy1hYzk3IiwKIAkuY29kZWNfZGFpX25hbWUgPSAiYWM5Ny1oaWZpIiwKIAkuY29kZWNfbmFtZSA9ICJhYzk3LWNvZGVjIiwKLQkucGxhdGZvcm1fbmFtZSA9ICJzM2MyNHh4LXBjbS1hdWRpbyIsCisJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCiB9LAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvc21ka19zcGRpZi5jIGIvc291bmQvc29jL3NhbXN1bmcvc21ka19zcGRpZi5jCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIHNvdW5kL3NvYy9zM2MyNHh4L3NtZGtfc3BkaWYuYwpyZW5hbWUgdG8gc291bmQvc29jL3NhbXN1bmcvc21ka19zcGRpZi5jCmluZGV4IGM4YmQ5MDQuLmI1YzNmYWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGtfc3BkaWYuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3NwZGlmLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogCi0jaW5jbHVkZSAiczNjLWRtYS5oIgorI2luY2x1ZGUgImRtYS5oIgogI2luY2x1ZGUgInNwZGlmLmgiCiAKIC8qIEF1ZGlvIGNsb2NrIHNldHRpbmdzIGFyZSBiZWxvbmdlZCB0byBib2FyZCBzcGVjaWZpYyBwYXJ0LiBFdmVyeQpAQCAtMjgsNyArMjgsNyBAQAogc3RhdGljIGludCBzZXRfYXVkaW9fY2xvY2tfaGVpcmFjaHkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgY2xrICpmb3V0X2VwbGwsICptb3V0X2VwbGwsICpzY2xrX2F1ZGlvMCwgKnNjbGtfc3BkaWY7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWZvdXRfZXBsbCA9IGNsa19nZXQoTlVMTCwgImZvdXRfZXBsbCIpOwogCWlmIChJU19FUlIoZm91dF9lcGxsKSkgewpAQCAtNjEsNyArNjEsNyBAQAogCQlnb3RvIG91dDM7CiAJfQogCi0JLyogU2V0IGF1ZGlvIGNsb2NrIGhlaXJhY2h5IGZvciBTL1BESUYgKi8KKwkvKiBTZXQgYXVkaW8gY2xvY2sgaGllcmFyY2h5IGZvciBTL1BESUYgKi8KIAljbGtfc2V0X3BhcmVudChtb3V0X2VwbGwsIGZvdXRfZXBsbCk7CiAJY2xrX3NldF9wYXJlbnQoc2Nsa19hdWRpbzAsIG1vdXRfZXBsbCk7CiAJY2xrX3NldF9wYXJlbnQoc2Nsa19zcGRpZiwgc2Nsa19hdWRpbzApOwpAQCAtNzksNyArNzksNyBAQAogCiAvKiBXZSBzaG91bGQgaGF2ZWQgdG8gc2V0IGNsb2NrIGRpcmVjdGx5IG9uIHRoaXMgcGFydCBiZWNhdXNlIG9mIGNsb2NrCiAgKiBzY2hlbWUgb2YgU2Ftc3VkbmcgU29DcyBkaWQgbm90IHN1cHBvcnQgdG8gc2V0IHJhdGVzIGZyb20gYWJzdHJjdAotICogY2xvY2sgb2YgaXQncyBoZWlyYWNoeS4KKyAqIGNsb2NrIG9mIGl0J3MgaGllcmFyY2h5LgogICovCiBzdGF0aWMgaW50IHNldF9hdWRpb19jbG9ja19yYXRlKHVuc2lnbmVkIGxvbmcgZXBsbF9yYXRlLAogCQkJCXVuc2lnbmVkIGxvbmcgYXVkaW9fcmF0ZSkKQEAgLTE1MiwxMiArMTUyLDEwIEBACiAJLmh3X3BhcmFtcyA9IHNtZGtfaHdfcGFyYW1zLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc21kazsKLQogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNtZGtfZGFpID0gewogCS5uYW1lID0gIlMvUERJRiIsCiAJLnN0cmVhbV9uYW1lID0gIlMvUERJRiBQQ00gUGxheWJhY2siLAotCS5wbGF0Zm9ybV9uYW1lID0gInMzYzI0eHgtcGNtLWF1ZGlvIiwKKwkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKIAkuY3B1X2RhaV9uYW1lID0gInNhbXN1bmctc3BkaWYiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJkaXQtaGlmaSIsCiAJLmNvZGVjX25hbWUgPSAic3BkaWYtZGl0IiwKQEAgLTE4Myw3ICsxODEsNyBAQAogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChzbWRrX3NuZF9zcGRpZl9kaXRfZGV2aWNlKTsKIAlpZiAocmV0KQotCQlnb3RvIGVycjI7CisJCWdvdG8gZXJyMTsKIAogCXNtZGtfc25kX3NwZGlmX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwogCWlmICghc21ka19zbmRfc3BkaWZfZGV2aWNlKSB7CkBAIC0xOTUsMTcgKzE5MywyMSBAQAogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChzbWRrX3NuZF9zcGRpZl9kZXZpY2UpOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyMTsKKwkJZ290byBlcnIzOwogCi0JLyogU2V0IGF1ZGlvIGNsb2NrIGhlaXJhY2h5IG1hbnVhbGx5ICovCisJLyogU2V0IGF1ZGlvIGNsb2NrIGhpZXJhcmNoeSBtYW51YWxseSAqLwogCXJldCA9IHNldF9hdWRpb19jbG9ja19oZWlyYWNoeShzbWRrX3NuZF9zcGRpZl9kZXZpY2UpOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyMTsKKwkJZ290byBlcnI0OwogCiAJcmV0dXJuIDA7Ci1lcnIxOgorZXJyNDoKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKHNtZGtfc25kX3NwZGlmX2RldmljZSk7CitlcnIzOgogCXBsYXRmb3JtX2RldmljZV9wdXQoc21ka19zbmRfc3BkaWZfZGV2aWNlKTsKIGVycjI6CisJcGxhdGZvcm1fZGV2aWNlX2RlbChzbWRrX3NuZF9zcGRpZl9kaXRfZGV2aWNlKTsKK2VycjE6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChzbWRrX3NuZF9zcGRpZl9kaXRfZGV2aWNlKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjEzLDYgKzIxNSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgc21ka19leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc21ka19zbmRfc3BkaWZfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzbWRrX3NuZF9zcGRpZl9kaXRfZGV2aWNlKTsKIH0KIAogbW9kdWxlX2luaXQoc21ka19pbml0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3NtZGtfd204NTgwLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3dtODU4MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyY2ZmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3dtODU4MC5jCkBAIC0wLDAgKzEsMjkyIEBACisvKgorICogIHNtZGtfd204NTgwLmMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uIEx0ZAorICogIEF1dGhvcjogSmFzd2luZGVyIFNpbmdoIDxqYXNzaS5icmFyQHNhbXN1bmcuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg1ODAuaCIKKyNpbmNsdWRlICJkbWEuaCIKKyNpbmNsdWRlICJpMnMuaCIKKworLyoKKyAqIERlZmF1bHQgQ0ZHIHN3aXRjaCBzZXR0aW5ncyB0byB1c2UgdGhpcyBkcml2ZXI6CisgKgorICogICBTTURLNjQxMDogU2V0IENGRzEgMS0zIE9mZiwgQ0ZHMiAxLTQgT24KKyAqLworCisvKiBTTURLIGhhcyBhIDEyTUhaIGNyeXN0YWwgYXR0YWNoZWQgdG8gV004NTgwICovCisjZGVmaW5lIFNNREtfV004NTgwX0ZSRVEgMTIwMDAwMDAKKworc3RhdGljIGludCBzbWRrX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CisJdW5zaWduZWQgaW50IHBsbF9vdXQ7CisJaW50IGJmcywgcmZzLCByZXQ7CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9VODoKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzg6CisJCWJmcyA9IDE2OworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfVTE2X0xFOgorCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWJmcyA9IDMyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUaGUgRnZjbyBmb3IgV004NTgwIFBMTHMgbXVzdCBmYWxsIHdpdGhpbiBbOTAsMTAwXU1Iei4KKwkgKiBUaGlzIGNyaXRlcmlvbiBjYW4ndCBiZSBtZXQgaWYgd2UgcmVxdWVzdCBQTEwgb3V0cHV0CisJICogYXMgezgwMDB4MjU2LCA2NDAwMHgyNTYsIDExMDI1eDI1Nn1Iei4KKwkgKiBBcyBhIHdheW91dCwgd2UgcmF0aGVyIGNoYW5nZSByZnMgdG8gYSBtaW5pbXVtIHZhbHVlIHRoYXQKKwkgKiByZXN1bHRzIGluIChwYXJhbXNfcmF0ZShwYXJhbXMpICogcmZzKSwgYW5kIGl0c2VsZiwgYWNjZXB0YWJsZQorCSAqIHRvIGJvdGggLSB0aGUgQ09ERUMgYW5kIHRoZSBDUFUuCisJICovCisJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CisJY2FzZSAxNjAwMDoKKwljYXNlIDIyMDUwOgorCWNhc2UgMzIwMDA6CisJY2FzZSA0NDEwMDoKKwljYXNlIDQ4MDAwOgorCWNhc2UgODgyMDA6CisJY2FzZSA5NjAwMDoKKwkJcmZzID0gMjU2OworCQlicmVhazsKKwljYXNlIDY0MDAwOgorCQlyZnMgPSAzODQ7CisJCWJyZWFrOworCWNhc2UgODAwMDoKKwljYXNlIDExMDI1OgorCQlyZnMgPSA1MTI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlwbGxfb3V0ID0gcGFyYW1zX3JhdGUocGFyYW1zKSAqIHJmczsKKworCS8qIFNldCB0aGUgQ29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTCisJCQkJCSB8IFNORF9TT0NfREFJRk1UX05CX05GCisJCQkJCSB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogU2V0IHRoZSBBUCBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTCisJCQkJCSB8IFNORF9TT0NfREFJRk1UX05CX05GCisJCQkJCSB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogU2V0IFdNODU4MCB0byBkcml2ZSBNQ0xLIGZyb20gaXRzIFBMTEEgKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV004NTgwX01DTEssCisJCQkJCVdNODU4MF9DTEtTUkNfUExMQSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfcGxsKGNvZGVjX2RhaSwgV004NTgwX1BMTEEsIDAsCisJCQkJCVNNREtfV004NTgwX0ZSRVEsIHBsbF9vdXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODU4MF9DTEtTUkNfUExMQSwKKwkJCQkgICAgIHBsbF9vdXQsIFNORF9TT0NfQ0xPQ0tfSU4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTTURLIFdNODU4MCBEQUkgb3BlcmF0aW9ucy4KKyAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBzbWRrX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gc21ka19od19wYXJhbXMsCit9OworCisvKiBTTURLIFBsYXliYWNrIHdpZGdldHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg1ODBfZGFwbV93aWRnZXRzX3Bia1tdID0geworCVNORF9TT0NfREFQTV9IUCgiRnJvbnQiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fSFAoIkNlbnRlcitTdWIiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fSFAoIlJlYXIiLCBOVUxMKSwKK307CisKKy8qIFNNREsgQ2FwdHVyZSB3aWRnZXRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204NTgwX2RhcG1fd2lkZ2V0c19jcHRbXSA9IHsKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWNJbiIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9MSU5FKCJMaW5lSW4iLCBOVUxMKSwKK307CisKKy8qIFNNREstUEFJRlRYIGNvbm5lY3Rpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBfdHhbXSA9IHsKKwkvKiBNaWNJbiBmZWVkcyBBSU5MICovCisJeyJBSU5MIiwgTlVMTCwgIk1pY0luIn0sCisKKwkvKiBMaW5lSW4gZmVlZHMgQUlOTC9SICovCisJeyJBSU5MIiwgTlVMTCwgIkxpbmVJbiJ9LAorCXsiQUlOUiIsIE5VTEwsICJMaW5lSW4ifSwKK307CisKKy8qIFNNREstUEFJRlJYIGNvbm5lY3Rpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBfcnhbXSA9IHsKKwkvKiBGcm9udCBMZWZ0L1JpZ2h0IGFyZSBmZWQgVk9VVDFML1IgKi8KKwl7IkZyb250IiwgTlVMTCwgIlZPVVQxTCJ9LAorCXsiRnJvbnQiLCBOVUxMLCAiVk9VVDFSIn0sCisKKwkvKiBDZW50ZXIvU3ViIGFyZSBmZWQgVk9VVDJML1IgKi8KKwl7IkNlbnRlcitTdWIiLCBOVUxMLCAiVk9VVDJMIn0sCisJeyJDZW50ZXIrU3ViIiwgTlVMTCwgIlZPVVQyUiJ9LAorCisJLyogUmVhciBMZWZ0L1JpZ2h0IGFyZSBmZWQgVk9VVDNML1IgKi8KKwl7IlJlYXIiLCBOVUxMLCAiVk9VVDNMIn0sCisJeyJSZWFyIiwgTlVMTCwgIlZPVVQzUiJ9LAorfTsKKworc3RhdGljIGludCBzbWRrX3dtODU4MF9pbml0X3BhaWZ0eChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOworCisJLyogQWRkIHNtZGsgc3BlY2lmaWMgQ2FwdHVyZSB3aWRnZXRzICovCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg1ODBfZGFwbV93aWRnZXRzX2NwdCwKKwkJCQkgIEFSUkFZX1NJWkUod204NTgwX2RhcG1fd2lkZ2V0c19jcHQpKTsKKworCS8qIFNldCB1cCBQQUlGVFggYXVkaW8gcGF0aCAqLworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcF90eCwgQVJSQVlfU0laRShhdWRpb19tYXBfdHgpKTsKKworCS8qIEVuYWJsaW5nIHRoZSBtaWNyb3Bob25lIHJlcXVpcmVzIHRoZSBmaXR0aW5nIG9mIGEgMFIKKwkgKiByZXNpc3RvciB0byBjb25uZWN0IHRoZSBsaW5lIGZyb20gdGhlIG1pY3JvcGhvbmUgamFjay4KKwkgKi8KKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIk1pY0luIik7CisKKwkvKiBzaWduYWwgYSBEQVBNIGV2ZW50ICovCisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbWRrX3dtODU4MF9pbml0X3BhaWZyeChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOworCisJLyogQWRkIHNtZGsgc3BlY2lmaWMgUGxheWJhY2sgd2lkZ2V0cyAqLworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204NTgwX2RhcG1fd2lkZ2V0c19wYmssCisJCQkJICBBUlJBWV9TSVpFKHdtODU4MF9kYXBtX3dpZGdldHNfcGJrKSk7CisKKwkvKiBTZXQgdXAgUEFJRlJYIGF1ZGlvIHBhdGggKi8KKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXBfcngsIEFSUkFZX1NJWkUoYXVkaW9fbWFwX3J4KSk7CisKKwkvKiBzaWduYWwgYSBEQVBNIGV2ZW50ICovCisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CisKKwlyZXR1cm4gMDsKK30KKworZW51bSB7CisJUFJJX1BMQVlCQUNLID0gMCwKKwlQUklfQ0FQVFVSRSwKKwlTRUNfUExBWUJBQ0ssCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc21ka19kYWlbXSA9IHsKKwlbUFJJX1BMQVlCQUNLXSA9IHsgLyogUHJpbWFyeSBQbGF5YmFjayBpL2YgKi8KKwkJLm5hbWUgPSAiV004NTgwIFBBSUYgUlgiLAorCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY3B1X2RhaV9uYW1lID0gInNhbXN1bmctaTJzLjAiLAorCQkuY29kZWNfZGFpX25hbWUgPSAid204NTgwLWhpZmktcGxheWJhY2siLAorCQkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKKwkJLmNvZGVjX25hbWUgPSAid204NTgwLWNvZGVjLjAtMDAxYiIsCisJCS5pbml0ID0gc21ka193bTg1ODBfaW5pdF9wYWlmcngsCisJCS5vcHMgPSAmc21ka19vcHMsCisJfSwKKwlbUFJJX0NBUFRVUkVdID0geyAvKiBQcmltYXJ5IENhcHR1cmUgaS9mICovCisJCS5uYW1lID0gIldNODU4MCBQQUlGIFRYIiwKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY3B1X2RhaV9uYW1lID0gInNhbXN1bmctaTJzLjAiLAorCQkuY29kZWNfZGFpX25hbWUgPSAid204NTgwLWhpZmktY2FwdHVyZSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAorCQkuY29kZWNfbmFtZSA9ICJ3bTg1ODAtY29kZWMuMC0wMDFiIiwKKwkJLmluaXQgPSBzbWRrX3dtODU4MF9pbml0X3BhaWZ0eCwKKwkJLm9wcyA9ICZzbWRrX29wcywKKwl9LAorCVtTRUNfUExBWUJBQ0tdID0geyAvKiBTZWNfRmlmbyBQbGF5YmFjayBpL2YgKi8KKwkJLm5hbWUgPSAiU2VjX0ZJRk8gVFgiLAorCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY3B1X2RhaV9uYW1lID0gInNhbXN1bmctaTJzLngiLAorCQkuY29kZWNfZGFpX25hbWUgPSAid204NTgwLWhpZmktcGxheWJhY2siLAorCQkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKKwkJLmNvZGVjX25hbWUgPSAid204NTgwLWNvZGVjLjAtMDAxYiIsCisJCS5pbml0ID0gc21ka193bTg1ODBfaW5pdF9wYWlmcngsCisJCS5vcHMgPSAmc21ka19vcHMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNtZGsgPSB7CisJLm5hbWUgPSAiU01ESy1JMlMiLAorCS5kYWlfbGluayA9IHNtZGtfZGFpLAorCS5udW1fbGlua3MgPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNtZGtfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgc21ka19hdWRpb19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwljaGFyICpzdHI7CisKKwlpZiAobWFjaGluZV9pc19zbWRrYzEwMCgpIHx8IG1hY2hpbmVfaXNfc21kazY0NDIoKQorCQkJfHwgbWFjaGluZV9pc19zbWRrdjIxMCgpIHx8IG1hY2hpbmVfaXNfc21ka2MxMTAoKSkgeworCQlzbWRrLm51bV9saW5rcyA9IDM7CisJCS8qIFNlY29uZGFyeSBpcyBhdCBvZmZzZXQgU0FNU1VOR19JMlNfU0VDT0ZGIGZyb20gUHJpbWFyeSAqLworCQlzdHIgPSAoY2hhciAqKXNtZGtfZGFpW1NFQ19QTEFZQkFDS10uY3B1X2RhaV9uYW1lOworCQlzdHJbc3RybGVuKHN0cikgLSAxXSA9ICcwJyArIFNBTVNVTkdfSTJTX1NFQ09GRjsKKwl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfc21kazY0MTAoKSkgeworCQlzdHIgPSAoY2hhciAqKXNtZGtfZGFpW1BSSV9QTEFZQkFDS10uY3B1X2RhaV9uYW1lOworCQlzdHJbc3RybGVuKHN0cikgLSAxXSA9ICcyJzsKKwkJc3RyID0gKGNoYXIgKilzbWRrX2RhaVtQUklfQ0FQVFVSRV0uY3B1X2RhaV9uYW1lOworCQlzdHJbc3RybGVuKHN0cikgLSAxXSA9ICcyJzsKKwl9CisKKwlzbWRrX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIXNtZGtfc25kX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShzbWRrX3NuZF9kZXZpY2UsICZzbWRrKTsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHNtZGtfc25kX2RldmljZSk7CisKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHNtZGtfc25kX2RldmljZSk7CisKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQoc21ka19hdWRpb19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNtZGtfYXVkaW9fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNtZGtfc25kX2RldmljZSk7Cit9Cittb2R1bGVfZXhpdChzbWRrX2F1ZGlvX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKYXN3aW5kZXIgU2luZ2gsIGphc3NpLmJyYXJAc2Ftc3VuZy5jb20iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgU01ESyBXTTg1ODAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3NtZGtfd204OTk0LmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3dtODk5NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YzEwMDkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3dtODk5NC5jCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogIHNtZGtfd204OTk0LmMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtODk5NC5oIgorCisgLyoKKyAgKiBEZWZhdWx0IENGRyBzd2l0Y2ggc2V0dGluZ3MgdG8gdXNlIHRoaXMgZHJpdmVyOgorICAqCVNNREtWMzEwOiBDRkc1LTEwMDAsIENGRzctMTExMTExCisgICovCisKKyAvKgorICAqIENvbmZpZ3VyZSBhdWRpbyByb3V0ZSBhcyA6LQorICAqICQgYW1peGVyIHNzZXQgJ0RBQzEnIG9uLG9uCisgICogJCBhbWl4ZXIgc3NldCAnUmlnaHQgSGVhZHBob25lIE11eCcgJ0RBQycKKyAgKiAkIGFtaXhlciBzc2V0ICdMZWZ0IEhlYWRwaG9uZSBNdXgnICdEQUMnCisgICogJCBhbWl4ZXIgc3NldCAnREFDMVIgTWl4ZXIgQUlGMS4xJyBvbgorICAqICQgYW1peGVyIHNzZXQgJ0RBQzFMIE1peGVyIEFJRjEuMScgb24KKyAgKiAkIGFtaXhlciBzc2V0ICdJTjJMJyBvbgorICAqICQgYW1peGVyIHNzZXQgJ0lOMkwgUEdBIElOMkxOJyBvbgorICAqICQgYW1peGVyIHNzZXQgJ01JWElOTCBJTjJMJyBvbgorICAqICQgYW1peGVyIHNzZXQgJ0FJRjFBREMxTCBNaXhlciBBREMvRE1JQycgb24KKyAgKiAkIGFtaXhlciBzc2V0ICdJTjJSJyBvbgorICAqICQgYW1peGVyIHNzZXQgJ0lOMlIgUEdBIElOMlJOJyBvbgorICAqICQgYW1peGVyIHNzZXQgJ01JWElOUiBJTjJSJyBvbgorICAqICQgYW1peGVyIHNzZXQgJ0FJRjFBREMxUiBNaXhlciBBREMvRE1JQycgb24KKyAgKi8KKworLyogU01ESyBoYXMgYSAxNi45MzRNSFogY3J5c3RhbCBhdHRhY2hlZCB0byBXTTg5OTQgKi8KKyNkZWZpbmUgU01ES19XTTg5OTRfRlJFUSAxNjkzNDAwMAorCitzdGF0aWMgaW50IHNtZGtfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmNwdV9kYWk7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKKwl1bnNpZ25lZCBpbnQgcGxsX291dDsKKwlpbnQgcmV0OworCisJLyogQUlGMUNMSyBzaG91bGQgYmUgPj0zTUh6IGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlICovCisJaWYgKHBhcmFtc19yYXRlKHBhcmFtcykgPT0gODAwMCB8fCBwYXJhbXNfcmF0ZShwYXJhbXMpID09IDExMDI1KQorCQlwbGxfb3V0ID0gcGFyYW1zX3JhdGUocGFyYW1zKSAqIDUxMjsKKwllbHNlCisJCXBsbF9vdXQgPSBwYXJhbXNfcmF0ZShwYXJhbXMpICogMjU2OworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0kyUworCQkJCQkgfCBTTkRfU09DX0RBSUZNVF9OQl9ORgorCQkJCQkgfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTCisJCQkJCSB8IFNORF9TT0NfREFJRk1UX05CX05GCisJCQkJCSB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3BsbChjb2RlY19kYWksIFdNODk5NF9GTEwxLCBXTTg5OTRfRkxMX1NSQ19NQ0xLMSwKKwkJCQkJU01ES19XTTg5OTRfRlJFUSwgcGxsX291dCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004OTk0X1NZU0NMS19GTEwxLAorCQkJCQlwbGxfb3V0LCBTTkRfU09DX0NMT0NLX0lOKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCisvKgorICogU01ESyBXTTg5OTQgREFJIG9wZXJhdGlvbnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgc21ka19vcHMgPSB7CisJLmh3X3BhcmFtcyA9IHNtZGtfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIGludCBzbWRrX3dtODk5NF9pbml0X3BhaWZ0eChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOworCisJLyogSGVhZFBob25lICovCisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgIkhQT1VUMVIiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSFBPVVQxTCIpOworCisJLyogTWljSW4gKi8KKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSU4xTE4iKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSU4xUk4iKTsKKworCS8qIExpbmVJbiAqLworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJJTjJMTiIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJJTjJSTiIpOworCisJLyogT3RoZXIgcGlucyBOQyAqLworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkhQT1VUMlAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJIUE9VVDJOIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiU1BLT1VUTE4iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJTUEtPVVRMUCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlNQS09VVFJQIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiU1BLT1VUUk4iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSU5FT1VUMU4iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSU5FT1VUMVAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSU5FT1VUMk4iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSU5FT1VUMlAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJJTjFMUCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIklOMkxQOlZYUk4iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJJTjFSUCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIklOMlJQOlZYUlAiKTsKKworCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBzbWRrX2RhaVtdID0geworCXsgLyogUHJpbWFyeSBEQUkgaS9mICovCisJCS5uYW1lID0gIldNODk5NCBBSUYxIiwKKwkJLnN0cmVhbV9uYW1lID0gIlByaV9EYWkiLAorCQkuY3B1X2RhaV9uYW1lID0gInNhbXN1bmctaTJzLjAiLAorCQkuY29kZWNfZGFpX25hbWUgPSAid204OTk0LWFpZjEiLAorCQkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKKwkJLmNvZGVjX25hbWUgPSAid204OTk0LWNvZGVjIiwKKwkJLmluaXQgPSBzbWRrX3dtODk5NF9pbml0X3BhaWZ0eCwKKwkJLm9wcyA9ICZzbWRrX29wcywKKwl9LCB7IC8qIFNlY19GaWZvIFBsYXliYWNrIGkvZiAqLworCQkubmFtZSA9ICJTZWNfRklGTyBUWCIsCisJCS5zdHJlYW1fbmFtZSA9ICJTZWNfRGFpIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJzYW1zdW5nLWkycy40IiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gIndtODk5NC1haWYxIiwKKwkJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCisJCS5jb2RlY19uYW1lID0gIndtODk5NC1jb2RlYyIsCisJCS5vcHMgPSAmc21ka19vcHMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNtZGsgPSB7CisJLm5hbWUgPSAiU01ESy1JMlMiLAorCS5kYWlfbGluayA9IHNtZGtfZGFpLAorCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKHNtZGtfZGFpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrX3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IHNtZGtfYXVkaW9faW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlzbWRrX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIXNtZGtfc25kX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShzbWRrX3NuZF9kZXZpY2UsICZzbWRrKTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoc21ka19zbmRfZGV2aWNlKTsKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHNtZGtfc25kX2RldmljZSk7CisKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQoc21ka19hdWRpb19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNtZGtfYXVkaW9fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNtZGtfc25kX2RldmljZSk7Cit9Cittb2R1bGVfZXhpdChzbWRrX2F1ZGlvX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIFNNREsgV004OTk0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zbWRrX3dtOTcxMy5jIGIvc291bmQvc29jL3NhbXN1bmcvc21ka193bTk3MTMuYwpzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBzb3VuZC9zb2MvczNjMjR4eC9zbWRrX3dtOTcxMy5jCnJlbmFtZSB0byBzb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3dtOTcxMy5jCmluZGV4IDMzYmE4ZmQuLmFlNWZlZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGtfd205NzEzLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvc21ka193bTk3MTMuYwpAQCAtMTUsOCArMTUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogCi0jaW5jbHVkZSAiczNjLWRtYS5oIgotI2luY2x1ZGUgInMzYy1hYzk3LmgiCisjaW5jbHVkZSAiZG1hLmgiCisjaW5jbHVkZSAiYWM5Ny5oIgogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbWRrOwogCkBAIC0yNyw2ICsyNyw3IEBACiAgKiAgIFNNREtDMTAwOiBTZXQgQ0ZHNiAxLTMgT24sIENGRzcgMSAgIE9uCiAgKiAgIFNNREtDMTEwOiBTZXQgQ0ZHQjEwIDEtMiBPZmYsIENGR0IxMiAxLTMgT24KICAqICAgU01ES1YyMTA6IFNldCBDRkdCMTAgMS0yIE9mZiwgQ0ZHQjEyIDEtMyBPbgorICogICBTTURLVjMxMDogU2V0IENGRzIgMS0yIE9mZiwgQ0ZHNCBBbGwgT24sIENGRzcgQWxsIE9mZiwgQ0ZHOCAxLU9uCiAgKi8KIAogLyoKQEAgLTQ1LDggKzQ2LDggQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBzbWRrX2RhaSA9IHsKIAkubmFtZSA9ICJBQzk3IiwKIAkuc3RyZWFtX25hbWUgPSAiQUM5NyBQQ00iLAotCS5wbGF0Zm9ybV9uYW1lID0gInMzYzI0eHgtcGNtLWF1ZGlvIiwKLQkuY3B1X2RhaV9uYW1lID0gInMzYy1hYzk3IiwKKwkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKKwkuY3B1X2RhaV9uYW1lID0gInNhbXN1bmctYWM5NyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtOTcxMy1oaWZpIiwKIAkuY29kZWNfbmFtZSA9ICJ3bTk3MTMtY29kZWMiLAogfTsKQEAgLTcwLDI0ICs3MSwyNyBAQAogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChzbWRrX3NuZF93bTk3MTNfZGV2aWNlKTsKIAlpZiAocmV0KQotCQlnb3RvIGVycjsKKwkJZ290byBlcnIxOwogCiAJc21ka19zbmRfYWM5N19kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKIAlpZiAoIXNtZGtfc25kX2FjOTdfZGV2aWNlKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOworCQlnb3RvIGVycjI7CiAJfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoc21ka19zbmRfYWM5N19kZXZpY2UsICZzbWRrKTsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoc21ka19zbmRfYWM5N19kZXZpY2UpOwotCWlmIChyZXQpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChzbWRrX3NuZF9hYzk3X2RldmljZSk7Ci0JCWdvdG8gZXJyOwotCX0KKwlpZiAocmV0KQorCQlnb3RvIGVycjM7CiAKIAlyZXR1cm4gMDsKLWVycjoKKworZXJyMzoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHNtZGtfc25kX2FjOTdfZGV2aWNlKTsKK2VycjI6CisJcGxhdGZvcm1fZGV2aWNlX2RlbChzbWRrX3NuZF93bTk3MTNfZGV2aWNlKTsKK2VycjE6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChzbWRrX3NuZF93bTk3MTNfZGV2aWNlKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvc3BkaWYuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NwZGlmLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc291bmQvc29jL3MzYzI0eHgvc3BkaWYuYwpyZW5hbWUgdG8gc291bmQvc29jL3NhbXN1bmcvc3BkaWYuYwppbmRleCBjZTU1NGU5Li5mMDgxNjQwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zcGRpZi5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NwZGlmLmMKQEAgLTEsNCArMSw0IEBACi0vKiBzb3VuZC9zb2MvczNjMjR4eC9zcGRpZi5jCisvKiBzb3VuZC9zb2Mvc2Ftc3VuZy9zcGRpZi5jCiAgKgogICogQUxTQSBTb0MgQXVkaW8gTGF5ZXIgLSBTYW1zdW5nIFMvUERJRiBDb250cm9sbGVyIGRyaXZlcgogICoKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAotI2luY2x1ZGUgInMzYy1kbWEuaCIKKyNpbmNsdWRlICJkbWEuaCIKICNpbmNsdWRlICJzcGRpZi5oIgogCiAvKiBSZWdpc3RlcnMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3NwZGlmLmggYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zcGRpZi5oCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIHNvdW5kL3NvYy9zM2MyNHh4L3NwZGlmLmgKcmVuYW1lIHRvIHNvdW5kL3NvYy9zYW1zdW5nL3NwZGlmLmgKaW5kZXggM2VkNTU1OS4uNGY3MmNiNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvc3BkaWYuaAorKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zcGRpZi5oCkBAIC0xLDQgKzEsNCBAQAotLyogc291bmQvc29jL3MzYzI0eHgvc3BkaWYuaAorLyogc291bmQvc29jL3NhbXN1bmcvc3BkaWYuaAogICoKICAqIEFMU0EgU29DIEF1ZGlvIExheWVyIC0gU2Ftc3VuZyBTL1BESUYgQ29udHJvbGxlciBkcml2ZXIKICAqCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvS2NvbmZpZyBiL3NvdW5kL3NvYy9zaC9LY29uZmlnCmluZGV4IDdmMGE0OTYuLmQ4ZTA2YTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9zaC9LY29uZmlnCkBAIC00OCw3ICs0OCw3IEBACiAKIGNvbmZpZyBTTkRfRlNJX0FLNDY0MgogCXRyaXN0YXRlICJGU0ktQUs0NjQyIHNvdW5kIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTTkRfU09DX1NINF9GU0kgJiYgSTJDX1NIX01PQklMRQorCWRlcGVuZHMgb24gU05EX1NPQ19TSDRfRlNJICYmIEkyQwogCXNlbGVjdCBTTkRfU09DX0FLNDY0MgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZ2VuZXJpYyBzb3VuZCBzdXBwb3J0IGZvciB0aGUKQEAgLTU2LDcgKzU2LDcgQEAKIAogY29uZmlnIFNORF9GU0lfREE3MjEwCiAJdHJpc3RhdGUgIkZTSS1EQTcyMTAgc291bmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNORF9TT0NfU0g0X0ZTSSAmJiBJMkNfU0hfTU9CSUxFCisJZGVwZW5kcyBvbiBTTkRfU09DX1NINF9GU0kgJiYgSTJDCiAJc2VsZWN0IFNORF9TT0NfREE3MjEwCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBnZW5lcmljIHNvdW5kIHN1cHBvcnQgZm9yIHRoZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS1hazQ2NDIuYyBiL3NvdW5kL3NvYy9zaC9mc2ktYWs0NjQyLmMKaW5kZXggZDk2NjAyZC4uYTE0ODIwYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2ZzaS1hazQ2NDIuYworKysgYi9zb3VuZC9zb2Mvc2gvZnNpLWFrNDY0Mi5jCkBAIC0xMiw2ICsxMiwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPHNvdW5kL3NoX2ZzaS5oPgogCitzdHJ1Y3QgZnNpX2FrNDY0Ml9kYXRhIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmNhcmQ7CisJY29uc3QgY2hhciAqY3B1X2RhaTsKKwljb25zdCBjaGFyICpjb2RlYzsKKwljb25zdCBjaGFyICpwbGF0Zm9ybTsKK307CisKIHN0YXRpYyBpbnQgZnNpX2FrNDY0Ml9kYWlfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gcnRkLT5jb2RlY19kYWk7CkBAIC0yNywzNyArMzUsNDIgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGZzaV9kYWlfbGluayA9IHsKLQkubmFtZQkJPSAiQUs0NjQyIiwKLQkuc3RyZWFtX25hbWUJPSAiQUs0NjQyIiwKLQkuY3B1X2RhaV9uYW1lCT0gImZzaWEtZGFpIiwgLyogZnNpIEEgKi8KIAkuY29kZWNfZGFpX25hbWUJPSAiYWs0NjQyLWhpZmkiLAotI2lmZGVmIENPTkZJR19NQUNIX0FQNEVWQgotCS5wbGF0Zm9ybV9uYW1lCT0gInNoX2ZzaTIiLAotCS5jb2RlY19uYW1lCT0gImFrNDY0Mi1jb2RlYy4wLTAwMTMiLAotI2Vsc2UKLQkucGxhdGZvcm1fbmFtZQk9ICJzaF9mc2kuMCIsCi0JLmNvZGVjX25hbWUJPSAiYWs0NjQyLWNvZGVjLjAtMDAxMiIsCi0jZW5kaWYKIAkuaW5pdAkJPSBmc2lfYWs0NjQyX2RhaV9pbml0LAotCS5vcHMJCT0gTlVMTCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGZzaV9zb2NfY2FyZCAgPSB7Ci0JLm5hbWUJCT0gIkZTSSAoQUs0NjQyKSIsCiAJLmRhaV9saW5rCT0gJmZzaV9kYWlfbGluaywKIAkubnVtX2xpbmtzCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpmc2lfc25kX2RldmljZTsKIAotc3RhdGljIGludCBfX2luaXQgZnNpX2FrNDY0Ml9pbml0KHZvaWQpCitzdGF0aWMgaW50IGZzaV9hazQ2NDJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmV0ID0gLUVOT01FTTsKKwljb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkCSppZF9lbnRyeTsKKwlzdHJ1Y3QgZnNpX2FrNDY0Ml9kYXRhICpwZGF0YTsKKworCWlkX2VudHJ5ID0gcGRldi0+aWRfZW50cnk7CisJaWYgKCFpZF9lbnRyeSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmtub3duIGZzaSBhazQ2NDJcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwZGF0YSA9IChzdHJ1Y3QgZnNpX2FrNDY0Ml9kYXRhICopaWRfZW50cnktPmRyaXZlcl9kYXRhOwogCiAJZnNpX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIEZTSV9QT1JUX0EpOwogCWlmICghZnNpX3NuZF9kZXZpY2UpCiAJCWdvdG8gb3V0OwogCisJZnNpX2RhaV9saW5rLm5hbWUJCT0gcGRhdGEtPm5hbWU7CisJZnNpX2RhaV9saW5rLnN0cmVhbV9uYW1lCT0gcGRhdGEtPm5hbWU7CisJZnNpX2RhaV9saW5rLmNwdV9kYWlfbmFtZQk9IHBkYXRhLT5jcHVfZGFpOworCWZzaV9kYWlfbGluay5wbGF0Zm9ybV9uYW1lCT0gcGRhdGEtPnBsYXRmb3JtOworCWZzaV9kYWlfbGluay5jb2RlY19uYW1lCQk9IHBkYXRhLT5jb2RlYzsKKwlmc2lfc29jX2NhcmQubmFtZQkJPSBwZGF0YS0+Y2FyZDsKKwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKGZzaV9zbmRfZGV2aWNlLCAmZnNpX3NvY19jYXJkKTsKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGZzaV9zbmRfZGV2aWNlKTsKIApAQCAtNjgsOSArODEsMTA4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGZzaV9hazQ2NDJfZXhpdCh2b2lkKQorc3RhdGljIGludCBmc2lfYWs0NjQyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGZzaV9zbmRfZGV2aWNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmc2lfYWs0NjQyX2RhdGEgZnNpX2FfYWs0NjQyID0geworCS5uYW1lCQk9ICJBSzQ2NDIiLAorCS5jYXJkCQk9ICJGU0lBIChBSzQ2NDIpIiwKKwkuY3B1X2RhaQk9ICJmc2lhLWRhaSIsCisJLmNvZGVjCQk9ICJhazQ2NDItY29kZWMuMC0wMDEyIiwKKwkucGxhdGZvcm0JPSAic2hfZnNpLjAiLAorfTsKKworc3RhdGljIHN0cnVjdCBmc2lfYWs0NjQyX2RhdGEgZnNpX2JfYWs0NjQyID0geworCS5uYW1lCQk9ICJBSzQ2NDIiLAorCS5jYXJkCQk9ICJGU0lCIChBSzQ2NDIpIiwKKwkuY3B1X2RhaQk9ICJmc2liLWRhaSIsCisJLmNvZGVjCQk9ICJhazQ2NDItY29kZWMuMC0wMDEyIiwKKwkucGxhdGZvcm0JPSAic2hfZnNpLjAiLAorfTsKKworc3RhdGljIHN0cnVjdCBmc2lfYWs0NjQyX2RhdGEgZnNpX2FfYWs0NjQzID0geworCS5uYW1lCQk9ICJBSzQ2NDMiLAorCS5jYXJkCQk9ICJGU0lBIChBSzQ2NDMpIiwKKwkuY3B1X2RhaQk9ICJmc2lhLWRhaSIsCisJLmNvZGVjCQk9ICJhazQ2NDItY29kZWMuMC0wMDEzIiwKKwkucGxhdGZvcm0JPSAic2hfZnNpLjAiLAorfTsKKworc3RhdGljIHN0cnVjdCBmc2lfYWs0NjQyX2RhdGEgZnNpX2JfYWs0NjQzID0geworCS5uYW1lCQk9ICJBSzQ2NDMiLAorCS5jYXJkCQk9ICJGU0lCIChBSzQ2NDMpIiwKKwkuY3B1X2RhaQk9ICJmc2liLWRhaSIsCisJLmNvZGVjCQk9ICJhazQ2NDItY29kZWMuMC0wMDEzIiwKKwkucGxhdGZvcm0JPSAic2hfZnNpLjAiLAorfTsKKworc3RhdGljIHN0cnVjdCBmc2lfYWs0NjQyX2RhdGEgZnNpMl9hX2FrNDY0MiA9IHsKKwkubmFtZQkJPSAiQUs0NjQyIiwKKwkuY2FyZAkJPSAiRlNJMkEgKEFLNDY0MikiLAorCS5jcHVfZGFpCT0gImZzaWEtZGFpIiwKKwkuY29kZWMJCT0gImFrNDY0Mi1jb2RlYy4wLTAwMTIiLAorCS5wbGF0Zm9ybQk9ICJzaF9mc2kyIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZnNpX2FrNDY0Ml9kYXRhIGZzaTJfYl9hazQ2NDIgPSB7CisJLm5hbWUJCT0gIkFLNDY0MiIsCisJLmNhcmQJCT0gIkZTSTJCIChBSzQ2NDIpIiwKKwkuY3B1X2RhaQk9ICJmc2liLWRhaSIsCisJLmNvZGVjCQk9ICJhazQ2NDItY29kZWMuMC0wMDEyIiwKKwkucGxhdGZvcm0JPSAic2hfZnNpMiIsCit9OworCitzdGF0aWMgc3RydWN0IGZzaV9hazQ2NDJfZGF0YSBmc2kyX2FfYWs0NjQzID0geworCS5uYW1lCQk9ICJBSzQ2NDMiLAorCS5jYXJkCQk9ICJGU0kyQSAoQUs0NjQzKSIsCisJLmNwdV9kYWkJPSAiZnNpYS1kYWkiLAorCS5jb2RlYwkJPSAiYWs0NjQyLWNvZGVjLjAtMDAxMyIsCisJLnBsYXRmb3JtCT0gInNoX2ZzaTIiLAorfTsKKworc3RhdGljIHN0cnVjdCBmc2lfYWs0NjQyX2RhdGEgZnNpMl9iX2FrNDY0MyA9IHsKKwkubmFtZQkJPSAiQUs0NjQzIiwKKwkuY2FyZAkJPSAiRlNJMkIgKEFLNDY0MykiLAorCS5jcHVfZGFpCT0gImZzaWItZGFpIiwKKwkuY29kZWMJCT0gImFrNDY0Mi1jb2RlYy4wLTAwMTMiLAorCS5wbGF0Zm9ybQk9ICJzaF9mc2kyIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIGZzaV9pZF90YWJsZVtdID0geworCS8qIEZTSSAqLworCXsgInNoX2ZzaV9hX2FrNDY0MiIsCShrZXJuZWxfdWxvbmdfdCkmZnNpX2FfYWs0NjQyIH0sCisJeyAic2hfZnNpX2JfYWs0NjQyIiwJKGtlcm5lbF91bG9uZ190KSZmc2lfYl9hazQ2NDIgfSwKKwl7ICJzaF9mc2lfYV9hazQ2NDMiLAkoa2VybmVsX3Vsb25nX3QpJmZzaV9hX2FrNDY0MyB9LAorCXsgInNoX2ZzaV9iX2FrNDY0MyIsCShrZXJuZWxfdWxvbmdfdCkmZnNpX2JfYWs0NjQzIH0sCisKKwkvKiBGU0kgMiAqLworCXsgInNoX2ZzaTJfYV9hazQ2NDIiLAkoa2VybmVsX3Vsb25nX3QpJmZzaTJfYV9hazQ2NDIgfSwKKwl7ICJzaF9mc2kyX2JfYWs0NjQyIiwJKGtlcm5lbF91bG9uZ190KSZmc2kyX2JfYWs0NjQyIH0sCisJeyAic2hfZnNpMl9hX2FrNDY0MyIsCShrZXJuZWxfdWxvbmdfdCkmZnNpMl9hX2FrNDY0MyB9LAorCXsgInNoX2ZzaTJfYl9hazQ2NDMiLAkoa2VybmVsX3Vsb25nX3QpJmZzaTJfYl9hazQ2NDMgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzaV9hazQ2NDIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiZnNpLWFrNDY0Mi1hdWRpbyIsCisJfSwKKwkucHJvYmUJCT0gZnNpX2FrNDY0Ml9wcm9iZSwKKwkucmVtb3ZlCQk9IGZzaV9hazQ2NDJfcmVtb3ZlLAorCS5pZF90YWJsZQk9IGZzaV9pZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGZzaV9hazQ2NDJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmZzaV9hazQ2NDIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZnNpX2FrNDY0Ml9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmZzaV9hazQ2NDIpOwogfQogCiBtb2R1bGVfaW5pdChmc2lfYWs0NjQyX2luaXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS1kYTcyMTAuYyBiL3NvdW5kL3NvYy9zaC9mc2ktZGE3MjEwLmMKaW5kZXggYTZhZGI2ZS4uZThkZjlkYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2ZzaS1kYTcyMTAuYworKysgYi9zb3VuZC9zb2Mvc2gvZnNpLWRhNzIxMC5jCkBAIC0xOCw3ICsxOCw3IEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBydGQtPmNvZGVjX2RhaTsKIAogCXJldHVybiBzbmRfc29jX2RhaV9zZXRfZm10KGRhaSwKLQkJCQkgICBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCQkJICAgU05EX1NPQ19EQUlGTVRfSTJTIHwKIAkJCQkgICBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS5jIGIvc291bmQvc29jL3NoL2ZzaS5jCmluZGV4IDRjMjQwNGIuLjJiMDY0MDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9mc2kuYworKysgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKQEAgLTE5LDIwICsxOSwyNiBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL3NoX2ZzaS5oPgogCi0jZGVmaW5lIERPX0ZNVAkJMHgwMDAwCi0jZGVmaW5lIERPRkZfQ1RMCTB4MDAwNAotI2RlZmluZSBET0ZGX1NUCQkweDAwMDgKLSNkZWZpbmUgRElfRk1UCQkweDAwMEMKLSNkZWZpbmUgRElGRl9DVEwJMHgwMDEwCi0jZGVmaW5lIERJRkZfU1QJCTB4MDAxNAotI2RlZmluZSBDS0cxCQkweDAwMTgKLSNkZWZpbmUgQ0tHMgkJMHgwMDFDCi0jZGVmaW5lIERJRFQJCTB4MDAyMAotI2RlZmluZSBET0RUCQkweDAwMjQKLSNkZWZpbmUgTVVURV9TVAkJMHgwMDI4Ci0jZGVmaW5lIE9VVF9TRUwJCTB4MDAzMAotI2RlZmluZSBSRUdfRU5ECQlPVVRfU0VMCisvKiBQb3J0QS9Qb3J0QiByZWdpc3RlciAqLworI2RlZmluZSBSRUdfRE9fRk1UCTB4MDAwMAorI2RlZmluZSBSRUdfRE9GRl9DVEwJMHgwMDA0CisjZGVmaW5lIFJFR19ET0ZGX1NUCTB4MDAwOAorI2RlZmluZSBSRUdfRElfRk1UCTB4MDAwQworI2RlZmluZSBSRUdfRElGRl9DVEwJMHgwMDEwCisjZGVmaW5lIFJFR19ESUZGX1NUCTB4MDAxNAorI2RlZmluZSBSRUdfQ0tHMQkweDAwMTgKKyNkZWZpbmUgUkVHX0NLRzIJMHgwMDFDCisjZGVmaW5lIFJFR19ESURUCTB4MDAyMAorI2RlZmluZSBSRUdfRE9EVAkweDAwMjQKKyNkZWZpbmUgUkVHX01VVEVfU1QJMHgwMDI4CisjZGVmaW5lIFJFR19PVVRfU0VMCTB4MDAzMAogCisvKiBtYXN0ZXIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVNUX0NMS19SU1QJMHgwMjEwCisjZGVmaW5lIE1TVF9TT0ZUX1JTVAkweDAyMTQKKyNkZWZpbmUgTVNUX0ZJRk9fU1oJMHgwMjE4CisKKy8qIGNvcmUgcmVnaXN0ZXIgKGRlcGVuZCBvbiBGU0kgdmVyc2lvbikgKi8KICNkZWZpbmUgQV9NU1RfQ1RMUgkweDAxODAKICNkZWZpbmUgQl9NU1RfQ1RMUgkweDAxQTAKICNkZWZpbmUgQ1BVX0lOVF9TVAkweDAxRjQKQEAgLTQxLDIyICs0NywyMyBAQAogI2RlZmluZSBJTlRfU1QJCTB4MDIwMAogI2RlZmluZSBJRU1TSwkJMHgwMjA0CiAjZGVmaW5lIElNU0sJCTB4MDIwOAotI2RlZmluZSBNVVRFCQkweDAyMEMKLSNkZWZpbmUgQ0xLX1JTVAkJMHgwMjEwCi0jZGVmaW5lIFNPRlRfUlNUCTB4MDIxNAotI2RlZmluZSBGSUZPX1NaCQkweDAyMTgKLSNkZWZpbmUgTVJFR19TVEFSVAlBX01TVF9DVExSCi0jZGVmaW5lIE1SRUdfRU5ECUZJRk9fU1oKIAogLyogRE9fRk1UICovCiAvKiBESV9GTVQgKi8KKyNkZWZpbmUgQ1JfQldTXzI0CSgweDAgPDwgMjApIC8qIEZTSTIgKi8KKyNkZWZpbmUgQ1JfQldTXzE2CSgweDEgPDwgMjApIC8qIEZTSTIgKi8KKyNkZWZpbmUgQ1JfQldTXzIwCSgweDIgPDwgMjApIC8qIEZTSTIgKi8KKworI2RlZmluZSBDUl9EVE1EX1BDTQkJKDB4MCA8PCA4KSAvKiBGU0kyICovCisjZGVmaW5lIENSX0RUTURfU1BESUZfUENNCSgweDEgPDwgOCkgLyogRlNJMiAqLworI2RlZmluZSBDUl9EVE1EX1NQRElGX1NUUkVBTQkoMHgyIDw8IDgpIC8qIEZTSTIgKi8KKwogI2RlZmluZSBDUl9NT05PCQkoMHgwIDw8IDQpCiAjZGVmaW5lIENSX01PTk9fRAkoMHgxIDw8IDQpCiAjZGVmaW5lIENSX1BDTQkJKDB4MiA8PCA0KQogI2RlZmluZSBDUl9JMlMJCSgweDMgPDwgNCkKICNkZWZpbmUgQ1JfVERNCQkoMHg0IDw8IDQpCiAjZGVmaW5lIENSX1RETV9ECSgweDUgPDwgNCkKLSNkZWZpbmUgQ1JfU1BESUYJMHgwMDEwMDEyMAogCiAvKiBET0ZGX0NUTCAqLwogLyogRElGRl9DVEwgKi8KQEAgLTkzLDYgKzEwMCwxMCBAQAogI2RlZmluZSBJUgkJKDEgPDwgIDQpIC8qIEludGVycnVwdCBSZXNldCAqLwogI2RlZmluZSBGU0lTUgkJKDEgPDwgIDApIC8qIFNvZnR3YXJlIFJlc2V0ICovCiAKKy8qIE9VVF9TRUwgKEZTSTIpICovCisjZGVmaW5lIERNTUQJCSgxIDw8IDQpIC8qIFNQRElGIG91dHB1dCB0aW1pbmcgMDogQmlwaGFzZSBvbmx5ICovCisJCQkJIC8qCQkJMTogQmlwaGFzZSBhbmQgc2VyaWFsICovCisKIC8qIEZJRk9fU1ogKi8KICNkZWZpbmUgRklGT19TWl9NQVNLCTB4NwogCkBAIC0xMjMsNiArMTM0LDkgQEAKIAlpbnQgYnVmZl9sZW47CiAJaW50IHBlcmlvZF9sZW47CiAJaW50IHBlcmlvZF9udW07CisKKwlpbnQgdWVycl9udW07CisJaW50IG9lcnJfbnVtOwogfTsKIAogc3RydWN0IGZzaV9wcml2IHsKQEAgLTEzMyw4ICsxNDcsNiBAQAogCXN0cnVjdCBmc2lfc3RyZWFtIGNhcHR1cmU7CiAKIAlsb25nIHJhdGU7Ci0KLQl1MzIgbXN0X2N0cmw7CiB9OwogCiBzdHJ1Y3QgZnNpX2NvcmUgewpAQCAtMTQzLDYgKzE1NSw4IEBACiAJdTMyIGludF9zdDsKIAl1MzIgaWVtc2s7CiAJdTMyIGltc2s7CisJdTMyIGFfbWNsazsKKwl1MzIgYl9tY2xrOwogfTsKIAogc3RydWN0IGZzaV9tYXN0ZXIgewpAQCAtMTgyLDYyICsxOTYsMjIgQEAKIAlfX2ZzaV9yZWdfd3JpdGUocmVnLCB2YWwpOwogfQogCi1zdGF0aWMgdm9pZCBmc2lfcmVnX3dyaXRlKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCB1MzIgcmVnLCB1MzIgZGF0YSkKLXsKLQlpZiAocmVnID4gUkVHX0VORCkgewotCQlwcl9lcnIoImZzaTogcmVnaXN0ZXIgYWNjZXNzIGVyciAoJXMpXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9CisjZGVmaW5lIGZzaV9yZWdfd3JpdGUocCwgciwgZClcCisJX19mc2lfcmVnX3dyaXRlKCh1MzIpKHAtPmJhc2UgKyBSRUdfIyNyKSwgZCkKIAotCV9fZnNpX3JlZ193cml0ZSgodTMyKShmc2ktPmJhc2UgKyByZWcpLCBkYXRhKTsKLX0KKyNkZWZpbmUgZnNpX3JlZ19yZWFkKHAsIHIpXAorCV9fZnNpX3JlZ19yZWFkKCh1MzIpKHAtPmJhc2UgKyBSRUdfIyNyKSkKIAotc3RhdGljIHUzMiBmc2lfcmVnX3JlYWQoc3RydWN0IGZzaV9wcml2ICpmc2ksIHUzMiByZWcpCi17Ci0JaWYgKHJlZyA+IFJFR19FTkQpIHsKLQkJcHJfZXJyKCJmc2k6IHJlZ2lzdGVyIGFjY2VzcyBlcnIgKCVzKVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gMDsKLQl9CisjZGVmaW5lIGZzaV9yZWdfbWFza19zZXQocCwgciwgbSwgZClcCisJX19mc2lfcmVnX21hc2tfc2V0KCh1MzIpKHAtPmJhc2UgKyBSRUdfIyNyKSwgbSwgZCkKIAotCXJldHVybiBfX2ZzaV9yZWdfcmVhZCgodTMyKShmc2ktPmJhc2UgKyByZWcpKTsKLX0KLQotc3RhdGljIHZvaWQgZnNpX3JlZ19tYXNrX3NldChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBkYXRhKQotewotCWlmIChyZWcgPiBSRUdfRU5EKSB7Ci0JCXByX2VycigiZnNpOiByZWdpc3RlciBhY2Nlc3MgZXJyICglcylcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQotCV9fZnNpX3JlZ19tYXNrX3NldCgodTMyKShmc2ktPmJhc2UgKyByZWcpLCBtYXNrLCBkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgZnNpX21hc3Rlcl93cml0ZShzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyLCB1MzIgcmVnLCB1MzIgZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKChyZWcgPCBNUkVHX1NUQVJUKSB8fAotCSAgICAocmVnID4gTVJFR19FTkQpKSB7Ci0JCXByX2VycigiZnNpOiByZWdpc3RlciBhY2Nlc3MgZXJyICglcylcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtYXN0ZXItPmxvY2ssIGZsYWdzKTsKLQlfX2ZzaV9yZWdfd3JpdGUoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSwgZGF0YSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFzdGVyLT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB1MzIgZnNpX21hc3Rlcl9yZWFkKHN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIsIHUzMiByZWcpCisjZGVmaW5lIGZzaV9tYXN0ZXJfcmVhZChwLCByKSBfZnNpX21hc3Rlcl9yZWFkKHAsIE1TVF8jI3IpCisjZGVmaW5lIGZzaV9jb3JlX3JlYWQocCwgcikgICBfZnNpX21hc3Rlcl9yZWFkKHAsIHAtPmNvcmUtPnIpCitzdGF0aWMgdTMyIF9mc2lfbWFzdGVyX3JlYWQoc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciwgdTMyIHJlZykKIHsKIAl1MzIgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoKHJlZyA8IE1SRUdfU1RBUlQpIHx8Ci0JICAgIChyZWcgPiBNUkVHX0VORCkpIHsKLQkJcHJfZXJyKCJmc2k6IHJlZ2lzdGVyIGFjY2VzcyBlcnIgKCVzKVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWFzdGVyLT5sb2NrLCBmbGFncyk7CiAJcmV0ID0gX19mc2lfcmVnX3JlYWQoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFzdGVyLT5sb2NrLCBmbGFncyk7CkBAIC0yNDUsMTcgKzIxOSwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGZzaV9tYXN0ZXJfbWFza19zZXQoc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciwKKyNkZWZpbmUgZnNpX21hc3Rlcl9tYXNrX3NldChwLCByLCBtLCBkKSBfZnNpX21hc3Rlcl9tYXNrX3NldChwLCBNU1RfIyNyLCBtLCBkKQorI2RlZmluZSBmc2lfY29yZV9tYXNrX3NldChwLCByLCBtLCBkKSAgX2ZzaV9tYXN0ZXJfbWFza19zZXQocCwgcC0+Y29yZS0+ciwgbSwgZCkKK3N0YXRpYyB2b2lkIF9mc2lfbWFzdGVyX21hc2tfc2V0KHN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIsCiAJCQkgICAgICAgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBkYXRhKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoKHJlZyA8IE1SRUdfU1RBUlQpIHx8Ci0JICAgIChyZWcgPiBNUkVHX0VORCkpIHsKLQkJcHJfZXJyKCJmc2k6IHJlZ2lzdGVyIGFjY2VzcyBlcnIgKCVzKVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1hc3Rlci0+bG9jaywgZmxhZ3MpOwogCV9fZnNpX3JlZ19tYXNrX3NldCgodTMyKShtYXN0ZXItPmJhc2UgKyByZWcpLCBtYXNrLCBkYXRhKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXN0ZXItPmxvY2ssIGZsYWdzKTsKQEAgLTM1OSwyNyArMzI5LDQxIEBACiAJaW8tPmJ1ZmZfb2Zmc2V0CT0gMDsKIAlpby0+cGVyaW9kX2xlbgk9IHBlcmlvZF9sZW47CiAJaW8tPnBlcmlvZF9udW0JPSAwOworCWlvLT5vZXJyX251bQk9IC0xOyAvKiBpZ25vcmUgMXN0IGVyciAqLworCWlvLT51ZXJyX251bQk9IC0xOyAvKiBpZ25vcmUgMXN0IGVyciAqLwogfQogCiBzdGF0aWMgdm9pZCBmc2lfc3RyZWFtX3BvcChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IGlzX3BsYXkpCiB7CiAJc3RydWN0IGZzaV9zdHJlYW0gKmlvID0gZnNpX2dldF9zdHJlYW0oZnNpLCBpc19wbGF5KTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IGZzaV9nZXRfZGFpKGlvLT5zdWJzdHJlYW0pOworCisKKwlpZiAoaW8tPm9lcnJfbnVtID4gMCkKKwkJZGV2X2VycihkYWktPmRldiwgIm92ZXJfcnVuID0gJWRcbiIsIGlvLT5vZXJyX251bSk7CisKKwlpZiAoaW8tPnVlcnJfbnVtID4gMCkKKwkJZGV2X2VycihkYWktPmRldiwgInVuZGVyX3J1biA9ICVkXG4iLCBpby0+dWVycl9udW0pOwogCiAJaW8tPnN1YnN0cmVhbQk9IE5VTEw7CiAJaW8tPmJ1ZmZfbGVuCT0gMDsKIAlpby0+YnVmZl9vZmZzZXQJPSAwOwogCWlvLT5wZXJpb2RfbGVuCT0gMDsKIAlpby0+cGVyaW9kX251bQk9IDA7CisJaW8tPm9lcnJfbnVtCT0gMDsKKwlpby0+dWVycl9udW0JPSAwOwogfQogCiBzdGF0aWMgaW50IGZzaV9nZXRfZmlmb19kYXRhX251bShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IGlzX3BsYXkpCiB7CiAJdTMyIHN0YXR1czsKLQl1MzIgcmVnID0gaXNfcGxheSA/IERPRkZfU1QgOiBESUZGX1NUOwogCXN0cnVjdCBmc2lfc3RyZWFtICppbyA9IGZzaV9nZXRfc3RyZWFtKGZzaSwgaXNfcGxheSk7CiAJaW50IGRhdGFfbnVtOwogCi0Jc3RhdHVzID0gZnNpX3JlZ19yZWFkKGZzaSwgcmVnKTsKKwlzdGF0dXMgPSBpc19wbGF5ID8KKwkJZnNpX3JlZ19yZWFkKGZzaSwgRE9GRl9TVCkgOgorCQlmc2lfcmVnX3JlYWQoZnNpLCBESUZGX1NUKTsKKwogCWRhdGFfbnVtID0gMHgxZmYgJiAoc3RhdHVzID4+IDgpOwogCWRhdGFfbnVtICo9IGlvLT5jaGFuX251bTsKIApAQCAtNDA2LDYgKzM5MCwyNyBAQAogCXJldHVybiBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkgLyBpby0+Y2hhbl9udW07CiB9CiAKK3N0YXRpYyB2b2lkIGZzaV9jb3VudF9maWZvX2VycihzdHJ1Y3QgZnNpX3ByaXYgKmZzaSkKK3sKKwl1MzIgb3N0YXR1cyA9IGZzaV9yZWdfcmVhZChmc2ksIERPRkZfU1QpOworCXUzMiBpc3RhdHVzID0gZnNpX3JlZ19yZWFkKGZzaSwgRElGRl9TVCk7CisKKwlpZiAob3N0YXR1cyAmIEVSUl9PVkVSKQorCQlmc2ktPnBsYXliYWNrLm9lcnJfbnVtKys7CisKKwlpZiAob3N0YXR1cyAmIEVSUl9VTkRFUikKKwkJZnNpLT5wbGF5YmFjay51ZXJyX251bSsrOworCisJaWYgKGlzdGF0dXMgJiBFUlJfT1ZFUikKKwkJZnNpLT5jYXB0dXJlLm9lcnJfbnVtKys7CisKKwlpZiAoaXN0YXR1cyAmIEVSUl9VTkRFUikKKwkJZnNpLT5jYXB0dXJlLnVlcnJfbnVtKys7CisKKwlmc2lfcmVnX3dyaXRlKGZzaSwgRE9GRl9TVCwgMCk7CisJZnNpX3JlZ193cml0ZShmc2ksIERJRkZfU1QsIDApOworfQorCiAvKgogICoJCWRtYSBmdW5jdGlvbgogICovCkBAIC00NzMsOCArNDc4LDggQEAKIAl1MzIgZGF0YSA9IEFCX0lPKDEsIGZzaV9nZXRfcG9ydF9zaGlmdChmc2ksIGlzX3BsYXkpKTsKIAlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZnNpX2dldF9tYXN0ZXIoZnNpKTsKIAotCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBtYXN0ZXItPmNvcmUtPmltc2ssICBkYXRhLCBkYXRhKTsKLQlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgbWFzdGVyLT5jb3JlLT5pZW1zaywgZGF0YSwgZGF0YSk7CisJZnNpX2NvcmVfbWFza19zZXQobWFzdGVyLCBpbXNrLCAgZGF0YSwgZGF0YSk7CisJZnNpX2NvcmVfbWFza19zZXQobWFzdGVyLCBpZW1zaywgZGF0YSwgZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZzaV9pcnFfZGlzYWJsZShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IGlzX3BsYXkpCkBAIC00ODIsMTggKzQ4NywxMyBAQAogCXUzMiBkYXRhID0gQUJfSU8oMSwgZnNpX2dldF9wb3J0X3NoaWZ0KGZzaSwgaXNfcGxheSkpOwogCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBmc2lfZ2V0X21hc3Rlcihmc2kpOwogCi0JZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIG1hc3Rlci0+Y29yZS0+aW1zaywgIGRhdGEsIDApOwotCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBtYXN0ZXItPmNvcmUtPmllbXNrLCBkYXRhLCAwKTsKKwlmc2lfY29yZV9tYXNrX3NldChtYXN0ZXIsIGltc2ssICBkYXRhLCAwKTsKKwlmc2lfY29yZV9tYXNrX3NldChtYXN0ZXIsIGllbXNrLCBkYXRhLCAwKTsKIH0KIAogc3RhdGljIHUzMiBmc2lfaXJxX2dldF9zdGF0dXMoc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlcikKIHsKLQlyZXR1cm4gZnNpX21hc3Rlcl9yZWFkKG1hc3RlciwgbWFzdGVyLT5jb3JlLT5pbnRfc3QpOwotfQotCi1zdGF0aWMgdm9pZCBmc2lfaXJxX2NsZWFyX2FsbF9zdGF0dXMoc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlcikKLXsKLQlmc2lfbWFzdGVyX3dyaXRlKG1hc3RlciwgbWFzdGVyLT5jb3JlLT5pbnRfc3QsIDApOworCXJldHVybiBmc2lfY29yZV9yZWFkKG1hc3RlciwgaW50X3N0KTsKIH0KIAogc3RhdGljIHZvaWQgZnNpX2lycV9jbGVhcl9zdGF0dXMoc3RydWN0IGZzaV9wcml2ICpmc2kpCkBAIC01MDUsNyArNTA1LDcgQEAKIAlkYXRhIHw9IEFCX0lPKDEsIGZzaV9nZXRfcG9ydF9zaGlmdChmc2ksIDEpKTsKIAogCS8qIGNsZWFyIGludGVycnVwdCBmYWN0b3IgKi8KLQlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgbWFzdGVyLT5jb3JlLT5pbnRfc3QsIGRhdGEsIDApOworCWZzaV9jb3JlX21hc2tfc2V0KG1hc3RlciwgaW50X3N0LCBkYXRhLCAwKTsKIH0KIAogLyoKQEAgLTUxNiwxNyArNTE2LDE5IEBACiBzdGF0aWMgdm9pZCBmc2lfc3BkaWZfY2xrX2N0cmwoc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBlbmFibGUpCiB7CiAJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciA9IGZzaV9nZXRfbWFzdGVyKGZzaSk7Ci0JdTMyIHZhbCA9IEJQIHwgU0U7CisJdTMyIG1hc2ssIHZhbDsKIAogCWlmIChtYXN0ZXItPmNvcmUtPnZlciA8IDIpIHsKIAkJcHJfZXJyKCJmc2k6IHJlZ2lzdGVyIGFjY2VzcyBlcnIgKCVzKVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKGVuYWJsZSkKLQkJZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIGZzaS0+bXN0X2N0cmwsIHZhbCwgdmFsKTsKLQllbHNlCi0JCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBmc2ktPm1zdF9jdHJsLCB2YWwsIDApOworCW1hc2sgPSBCUCB8IFNFOworCXZhbCA9IGVuYWJsZSA/IG1hc2sgOiAwOworCisJZnNpX2lzX3BvcnRfYShmc2kpID8KKwkJZnNpX2NvcmVfbWFza19zZXQobWFzdGVyLCBhX21jbGssIG1hc2ssIHZhbCkgOgorCQlmc2lfY29yZV9tYXNrX3NldChtYXN0ZXIsIGJfbWNsaywgbWFzaywgdmFsKTsKIH0KIAogLyoKQEAgLTU1MCw3ICs1NTIsNyBAQAogewogCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBmc2lfZ2V0X21hc3Rlcihmc2kpOwogCXN0cnVjdCBmc2lfc3RyZWFtICppbyA9IGZzaV9nZXRfc3RyZWFtKGZzaSwgaXNfcGxheSk7Ci0JdTMyIGN0cmwsIHNoaWZ0LCBpOworCXUzMiBzaGlmdCwgaTsKIAogCS8qIGdldCBvbi1jaGlwIFJBTSBjYXBhY2l0eSAqLwogCXNoaWZ0ID0gZnNpX21hc3Rlcl9yZWFkKG1hc3RlciwgRklGT19TWik7CkBAIC01ODMsMTMgKzU4NSwxNyBAQAogCWRldl9kYmcoZGFpLT5kZXYsICIlZCBjaGFubmVsICVkIHN0b3JlXG4iLAogCQlpby0+Y2hhbl9udW0sIGlvLT5maWZvX21heF9udW0pOwogCi0JY3RybCA9IGlzX3BsYXkgPyBET0ZGX0NUTCA6IERJRkZfQ1RMOwotCi0JLyogc2V0IGludGVycnVwdCBnZW5lcmF0aW9uIGZhY3RvciAqLwotCWZzaV9yZWdfd3JpdGUoZnNpLCBjdHJsLCBJUlFfSEFMRik7Ci0KLQkvKiBjbGVhciBGSUZPICovCi0JZnNpX3JlZ19tYXNrX3NldChmc2ksIGN0cmwsIEZJRk9fQ0xSLCBGSUZPX0NMUik7CisJLyoKKwkgKiBzZXQgaW50ZXJydXB0IGdlbmVyYXRpb24gZmFjdG9yCisJICogY2xlYXIgRklGTworCSAqLworCWlmIChpc19wbGF5KSB7CisJCWZzaV9yZWdfd3JpdGUoZnNpLAlET0ZGX0NUTCwgSVJRX0hBTEYpOworCQlmc2lfcmVnX21hc2tfc2V0KGZzaSwJRE9GRl9DVEwsIEZJRk9fQ0xSLCBGSUZPX0NMUik7CisJfSBlbHNlIHsKKwkJZnNpX3JlZ193cml0ZShmc2ksCURJRkZfQ1RMLCBJUlFfSEFMRik7CisJCWZzaV9yZWdfbWFza19zZXQoZnNpLAlESUZGX0NUTCwgRklGT19DTFIsIEZJRk9fQ0xSKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGZzaV9zb2Z0X2FsbF9yZXNldChzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyKQpAQCAtNjA0LDEzICs2MTAsMTIgQEAKIAltZGVsYXkoMTApOwogfQogCi1zdGF0aWMgaW50IGZzaV9maWZvX2RhdGFfY3RybChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IHN0YXJ0dXAsIGludCBzdHJlYW0pCitzdGF0aWMgaW50IGZzaV9maWZvX2RhdGFfY3RybChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IHN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gTlVMTDsKIAlpbnQgaXNfcGxheSA9IGZzaV9zdHJlYW1faXNfcGxheShzdHJlYW0pOwogCXN0cnVjdCBmc2lfc3RyZWFtICppbyA9IGZzaV9nZXRfc3RyZWFtKGZzaSwgaXNfcGxheSk7Ci0JdTMyIHN0YXR1c19yZWcgPSBpc19wbGF5ID8gRE9GRl9TVCA6IERJRkZfU1Q7CiAJaW50IGRhdGFfcmVzaWR1ZV9udW07CiAJaW50IGRhdGFfbnVtOwogCWludCBkYXRhX251bV9tYXg7CkBAIC02OTgsMzUgKzcwMywyMCBAQAogCS8qIHVwZGF0ZSBidWZmX29mZnNldCAqLwogCWlvLT5idWZmX29mZnNldCArPSBmc2lfbnVtMm9mZnNldChkYXRhX251bSwgY2hfd2lkdGgpOwogCi0JLyogY2hlY2sgZmlmbyBzdGF0dXMgKi8KLQlpZiAoIXN0YXJ0dXApIHsKLQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBmc2lfZ2V0X2RhaShzdWJzdHJlYW0pOwotCQl1MzIgc3RhdHVzID0gZnNpX3JlZ19yZWFkKGZzaSwgc3RhdHVzX3JlZyk7Ci0KLQkJaWYgKHN0YXR1cyAmIEVSUl9PVkVSKQotCQkJZGV2X2VycihkYWktPmRldiwgIm92ZXIgcnVuXG4iKTsKLQkJaWYgKHN0YXR1cyAmIEVSUl9VTkRFUikKLQkJCWRldl9lcnIoZGFpLT5kZXYsICJ1bmRlciBydW5cbiIpOwotCX0KLQlmc2lfcmVnX3dyaXRlKGZzaSwgc3RhdHVzX3JlZywgMCk7Ci0KLQkvKiByZS1lbmFibGUgaXJxICovCi0JZnNpX2lycV9lbmFibGUoZnNpLCBpc19wbGF5KTsKLQogCWlmIChvdmVyX3BlcmlvZCkKIAkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZnNpX2RhdGFfcG9wKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCBpbnQgc3RhcnR1cCkKK3N0YXRpYyBpbnQgZnNpX2RhdGFfcG9wKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQogewotCXJldHVybiBmc2lfZmlmb19kYXRhX2N0cmwoZnNpLCBzdGFydHVwLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOworCXJldHVybiBmc2lfZmlmb19kYXRhX2N0cmwoZnNpLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOwogfQogCi1zdGF0aWMgaW50IGZzaV9kYXRhX3B1c2goc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBzdGFydHVwKQorc3RhdGljIGludCBmc2lfZGF0YV9wdXNoKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQogewotCXJldHVybiBmc2lfZmlmb19kYXRhX2N0cmwoZnNpLCBzdGFydHVwLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKKwlyZXR1cm4gZnNpX2ZpZm9fZGF0YV9jdHJsKGZzaSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBmc2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRhdGEpCkBAIC03MzksMTUgKzcyOSwxOSBAQAogCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBTT0ZUX1JTVCwgSVIsIElSKTsKIAogCWlmIChpbnRfc3QgJiBBQl9JTygxLCBBT19TSElGVCkpCi0JCWZzaV9kYXRhX3B1c2goJm1hc3Rlci0+ZnNpYSwgMCk7CisJCWZzaV9kYXRhX3B1c2goJm1hc3Rlci0+ZnNpYSk7CiAJaWYgKGludF9zdCAmIEFCX0lPKDEsIEJPX1NISUZUKSkKLQkJZnNpX2RhdGFfcHVzaCgmbWFzdGVyLT5mc2liLCAwKTsKKwkJZnNpX2RhdGFfcHVzaCgmbWFzdGVyLT5mc2liKTsKIAlpZiAoaW50X3N0ICYgQUJfSU8oMSwgQUlfU0hJRlQpKQotCQlmc2lfZGF0YV9wb3AoJm1hc3Rlci0+ZnNpYSwgMCk7CisJCWZzaV9kYXRhX3BvcCgmbWFzdGVyLT5mc2lhKTsKIAlpZiAoaW50X3N0ICYgQUJfSU8oMSwgQklfU0hJRlQpKQotCQlmc2lfZGF0YV9wb3AoJm1hc3Rlci0+ZnNpYiwgMCk7CisJCWZzaV9kYXRhX3BvcCgmbWFzdGVyLT5mc2liKTsKIAotCWZzaV9pcnFfY2xlYXJfYWxsX3N0YXR1cyhtYXN0ZXIpOworCWZzaV9jb3VudF9maWZvX2VycigmbWFzdGVyLT5mc2lhKTsKKwlmc2lfY291bnRfZmlmb19lcnIoJm1hc3Rlci0+ZnNpYik7CisKKwlmc2lfaXJxX2NsZWFyX3N0YXR1cygmbWFzdGVyLT5mc2lhKTsKKwlmc2lfaXJxX2NsZWFyX3N0YXR1cygmbWFzdGVyLT5mc2liKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTc2NCw3ICs3NTgsNiBAQAogCXN0cnVjdCBmc2lfc3RyZWFtICppbzsKIAl1MzIgZmxhZ3MgPSBmc2lfZ2V0X2luZm9fZmxhZ3MoZnNpKTsKIAl1MzIgZm10OwotCXUzMiByZWc7CiAJdTMyIGRhdGE7CiAJaW50IGlzX3BsYXkgPSBmc2lfaXNfcGxheShzdWJzdHJlYW0pOwogCWludCBpc19tYXN0ZXI7CkBAIC03OTYsNyArNzg5LDYgQEAKIAogCS8qIGRvIGZtdCwgZGkgZm10ICovCiAJZGF0YSA9IDA7Ci0JcmVnID0gaXNfcGxheSA/IERPX0ZNVCA6IERJX0ZNVDsKIAlmbXQgPSBpc19wbGF5ID8gU0hfRlNJX0dFVF9PRk1UKGZsYWdzKSA6IFNIX0ZTSV9HRVRfSUZNVChmbGFncyk7CiAJc3dpdGNoIChmbXQpIHsKIAljYXNlIFNIX0ZTSV9GTVRfTU9OTzoKQEAgLTgzMCwxNiArODIyLDE4IEBACiAJCQlkZXZfZXJyKGRhaS0+ZGV2LCAiVGhpcyBGU0kgY2FuIG5vdCB1c2UgU1BESUZcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJZGF0YSA9IENSX1NQRElGOworCQlkYXRhID0gQ1JfQldTXzE2IHwgQ1JfRFRNRF9TUERJRl9QQ00gfCBDUl9QQ007CiAJCWlvLT5jaGFuX251bSA9IDI7CiAJCWZzaV9zcGRpZl9jbGtfY3RybChmc2ksIDEpOwotCQlmc2lfcmVnX21hc2tfc2V0KGZzaSwgT1VUX1NFTCwgMHgwMDEwLCAweDAwMTApOworCQlmc2lfcmVnX21hc2tfc2V0KGZzaSwgT1VUX1NFTCwgRE1NRCwgRE1NRCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoZGFpLT5kZXYsICJ1bmtub3duIGZvcm1hdC5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JZnNpX3JlZ193cml0ZShmc2ksIHJlZywgZGF0YSk7CisJaXNfcGxheSA/CisJCWZzaV9yZWdfd3JpdGUoZnNpLCBET19GTVQsIGRhdGEpIDoKKwkJZnNpX3JlZ193cml0ZShmc2ksIERJX0ZNVCwgZGF0YSk7CiAKIAkvKiBpcnEgY2xlYXIgKi8KIAlmc2lfaXJxX2Rpc2FibGUoZnNpLCBpc19wbGF5KTsKQEAgLTg4Myw3ICs4NzcsOCBAQAogCQlmc2lfc3RyZWFtX3B1c2goZnNpLCBpc19wbGF5LCBzdWJzdHJlYW0sCiAJCQkJZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSwKIAkJCQlmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpKTsKLQkJcmV0ID0gaXNfcGxheSA/IGZzaV9kYXRhX3B1c2goZnNpLCAxKSA6IGZzaV9kYXRhX3BvcChmc2ksIDEpOworCQlyZXQgPSBpc19wbGF5ID8gZnNpX2RhdGFfcHVzaChmc2kpIDogZnNpX2RhdGFfcG9wKGZzaSk7CisJCWZzaV9pcnFfZW5hYmxlKGZzaSwgaXNfcGxheSk7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKIAkJZnNpX2lycV9kaXNhYmxlKGZzaSwgaXNfcGxheSk7CkBAIC0xMTc0LDEyICsxMTY5LDEwIEBACiAJLyogRlNJIEEgc2V0dGluZyAqLwogCW1hc3Rlci0+ZnNpYS5iYXNlCT0gbWFzdGVyLT5iYXNlOwogCW1hc3Rlci0+ZnNpYS5tYXN0ZXIJPSBtYXN0ZXI7Ci0JbWFzdGVyLT5mc2lhLm1zdF9jdHJsCT0gQV9NU1RfQ1RMUjsKIAogCS8qIEZTSSBCIHNldHRpbmcgKi8KIAltYXN0ZXItPmZzaWIuYmFzZQk9IG1hc3Rlci0+YmFzZSArIDB4NDA7CiAJbWFzdGVyLT5mc2liLm1hc3Rlcgk9IG1hc3RlcjsKLQltYXN0ZXItPmZzaWIubXN0X2N0cmwJPSBCX01TVF9DVExSOwogCiAJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CiAJcG1fcnVudGltZV9yZXN1bWUoJnBkZXYtPmRldik7CkBAIC0xMjY2LDYgKzEyNTksOCBAQAogCS5pbnRfc3QJPSBDUFVfSU5UX1NULAogCS5pZW1zawk9IENQVV9JRU1TSywKIAkuaW1zawk9IENQVV9JTVNLLAorCS5hX21jbGsJPSBBX01TVF9DVExSLAorCS5iX21jbGsJPSBCX01TVF9DVExSLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgZnNpX2lkX3RhYmxlW10gPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvbWlnb3IuYyBiL3NvdW5kL3NvYy9zaC9taWdvci5jCmluZGV4IGFjNmM0OWMuLjYwODhhNmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9taWdvci5jCisrKyBiL3NvdW5kL3NvYy9zaC9taWdvci5jCkBAIC04LDExICs4LDExIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KIAogI2luY2x1ZGUgPGNwdS9zaDc3MjIuaD4KQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg5NzguaCIKICNpbmNsdWRlICJzaXUuaCIKQEAgLTE0MCwxMSArMTM5LDEyIEBACiBzdGF0aWMgaW50IG1pZ29yX2RhaV9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBtaWdvcl9kYXBtX3dpZGdldHMsCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBtaWdvcl9kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKG1pZ29yX2RhcG1fd2lkZ2V0cykpOwogCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9zaDc3NjAtYWM5Ny5jIGIvc291bmQvc29jL3NoL3NoNzc2MC1hYzk3LmMKaW5kZXggZjhlMGFiOC4uOTE3ZDNjZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3NoNzc2MC1hYzk3LmMKKysrIGIvc291bmQvc29jL3NoL3NoNzc2MC1hYzk3LmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2RlZmluZSBJUFNFTCAweEZFNDAwMDM0CkBAIC0yMyw3ICsyMiw3IEBACiAKIHN0YXRpYyBpbnQgbWFjaGluZV9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7Ci0Jc25kX3NvY19kYXBtX3N5bmMocnRkLT5jb2RlYyk7CisJc25kX3NvY19kYXBtX3N5bmMoJnJ0ZC0+Y29kZWMtPmRhcG0pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvc2l1LmggYi9zb3VuZC9zb2Mvc2gvc2l1LmgKaW5kZXggOWY0ZGNiOS4uODNjMzQzMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3NpdS5oCisrKyBiL3NvdW5kL3NvYy9zaC9zaXUuaApAQCAtNzUsNyArNzUsNyBAQAogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYWkuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KIAogI2RlZmluZSBTSVVfUEVSSU9EX0JZVEVTX01BWAk4MTkyCQkvKiBETUEgdHJhbnNmZXIvcGVyaW9kIHNpemUgKi8KICNkZWZpbmUgU0lVX1BFUklPRF9CWVRFU19NSU4JMjU2CQkvKiBETUEgdHJhbnNmZXIvcGVyaW9kIHNpemUgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9zaXVfZGFpLmMgYi9zb3VuZC9zb2Mvc2gvc2l1X2RhaS5jCmluZGV4IGFmNTNiNjQuLjQ5NzNjMjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9zaXVfZGFpLmMKKysrIGIvc291bmQvc29jL3NoL3NpdV9kYWkuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9zaXUuaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFpLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CiAKICNpbmNsdWRlICJzaXUuaCIKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3NpdV9wY20uYyBiL3NvdW5kL3NvYy9zaC9zaXVfcGNtLmMKaW5kZXggZWQyOWM5ZS4uYTQyM2JhYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3NpdV9wY20uYworKysgYi9zb3VuZC9zb2Mvc2gvc2l1X3BjbS5jCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFpLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CiAKICNpbmNsdWRlIDxhc20vc2l1Lmg+CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY2FjaGUuYyBiL3NvdW5kL3NvYy9zb2MtY2FjaGUuYwppbmRleCBkMjE0ZjAyLi44YzJhMjFhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNhY2hlLmMKKysrIGIvc291bmQvc29jL3NvYy1jYWNoZS5jCkBAIC0xNCwyNyArMTQsMzQgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8bGludXgvbHpvLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3NvY180XzEyX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZykKIHsKLQl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCB2YWw7CiAKIAlpZiAocmVnID49IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplIHx8CiAJCXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykpIHsKIAkJCWlmIChjb2RlYy0+Y2FjaGVfb25seSkKIAkJCQlyZXR1cm4gLTE7CiAKKwkJCUJVR19PTighY29kZWMtPmh3X3JlYWQpOwogCQkJcmV0dXJuIGNvZGVjLT5od19yZWFkKGNvZGVjLCByZWcpOwogCX0KIAotCXJldHVybiBjYWNoZVtyZWddOworCXJldCA9IHNuZF9zb2NfY2FjaGVfcmVhZChjb2RlYywgcmVnLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiB2YWw7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3NvY180XzEyX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKIAkJCSAgICAgdW5zaWduZWQgaW50IHZhbHVlKQogewotCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCXU4IGRhdGFbMl07CiAJaW50IHJldDsKIApAQCAtNDIsMTYgKzQ5LDE3IEBACiAJZGF0YVsxXSA9IHZhbHVlICYgMHgwMGZmOwogCiAJaWYgKCFzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpICYmCi0JCXJlZyA8IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplKQotCQkJY2FjaGVbcmVnXSA9IHZhbHVlOworCQlyZWcgPCBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSkgeworCQlyZXQgPSBzbmRfc29jX2NhY2hlX3dyaXRlKGNvZGVjLCByZWcsIHZhbHVlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQogCiAJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KSB7CiAJCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZGV2X2RiZyhjb2RlYy0+ZGV2LCAiMHgleCA9IDB4JXhcbiIsIHJlZywgdmFsdWUpOwotCiAJcmV0ID0gY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpOwogCWlmIChyZXQgPT0gMikKIAkJcmV0dXJuIDA7CkBAIC03Nyw3ICs4NSw3IEBACiAJbXNnWzFdID0gZGF0YVswXTsKIAogCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCW1lbXNldCgmdCwgMCwgKHNpemVvZiB0KSk7CisJbWVtc2V0KCZ0LCAwLCBzaXplb2YgdCk7CiAKIAl0LnR4X2J1ZiA9ICZtc2dbMF07CiAJdC5sZW4gPSBsZW47CkBAIC05NCwyMyArMTAyLDI3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfN185X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZykKIHsKLQl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCB2YWw7CiAKIAlpZiAocmVnID49IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplIHx8CiAJCXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykpIHsKIAkJCWlmIChjb2RlYy0+Y2FjaGVfb25seSkKIAkJCQlyZXR1cm4gLTE7CiAKKwkJCUJVR19PTighY29kZWMtPmh3X3JlYWQpOwogCQkJcmV0dXJuIGNvZGVjLT5od19yZWFkKGNvZGVjLCByZWcpOwogCX0KIAotCXJldHVybiBjYWNoZVtyZWddOworCXJldCA9IHNuZF9zb2NfY2FjaGVfcmVhZChjb2RlYywgcmVnLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiB2YWw7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3NvY183Xzlfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAogCQkJICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7Ci0JdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAJdTggZGF0YVsyXTsKIAlpbnQgcmV0OwogCkBAIC0xMTgsMTYgKzEzMCwxNyBAQAogCWRhdGFbMV0gPSB2YWx1ZSAmIDB4MDBmZjsKIAogCWlmICghc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSAmJgotCQlyZWcgPCBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSkKLQkJCWNhY2hlW3JlZ10gPSB2YWx1ZTsKKwkJcmVnIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUpIHsKKwkJcmV0ID0gc25kX3NvY19jYWNoZV93cml0ZShjb2RlYywgcmVnLCB2YWx1ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KIAogCWlmIChjb2RlYy0+Y2FjaGVfb25seSkgewogCQljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CiAJCXJldHVybiAwOwogCX0KIAotCWRldl9kYmcoY29kZWMtPmRldiwgIjB4JXggPSAweCV4XG4iLCByZWcsIHZhbHVlKTsKLQogCXJldCA9IGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKTsKIAlpZiAocmV0ID09IDIpCiAJCXJldHVybiAwOwpAQCAtMTUzLDcgKzE2Niw3IEBACiAJbXNnWzFdID0gZGF0YVsxXTsKIAogCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCW1lbXNldCgmdCwgMCwgKHNpemVvZiB0KSk7CisJbWVtc2V0KCZ0LCAwLCBzaXplb2YgdCk7CiAKIAl0LnR4X2J1ZiA9ICZtc2dbMF07CiAJdC5sZW4gPSBsZW47CkBAIC0xNzAsMjQgKzE4MywyNSBAQAogc3RhdGljIGludCBzbmRfc29jXzhfOF93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCiAJCQkgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKLQl1OCAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCXU4IGRhdGFbMl07CisJaW50IHJldDsKIAogCXJlZyAmPSAweGZmOwogCWRhdGFbMF0gPSByZWc7CiAJZGF0YVsxXSA9IHZhbHVlICYgMHhmZjsKIAogCWlmICghc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSAmJgotCQlyZWcgPCBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSkKLQkJCWNhY2hlW3JlZ10gPSB2YWx1ZTsKKwkJcmVnIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUpIHsKKwkJcmV0ID0gc25kX3NvY19jYWNoZV93cml0ZShjb2RlYywgcmVnLCB2YWx1ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KIAogCWlmIChjb2RlYy0+Y2FjaGVfb25seSkgewogCQljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CiAJCXJldHVybiAwOwogCX0KIAotCWRldl9kYmcoY29kZWMtPmRldiwgIjB4JXggPSAweCV4XG4iLCByZWcsIHZhbHVlKTsKLQogCWlmIChjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMikgPT0gMikKIAkJcmV0dXJuIDA7CiAJZWxzZQpAQCAtMTk3LDcgKzIxMSw4IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfOF84X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZykKIHsKLQl1OCAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCWludCByZXQ7CisJdW5zaWduZWQgaW50IHZhbDsKIAogCXJlZyAmPSAweGZmOwogCWlmIChyZWcgPj0gY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUgfHwKQEAgLTIwNSwxMCArMjIwLDE0IEBACiAJCQlpZiAoY29kZWMtPmNhY2hlX29ubHkpCiAJCQkJcmV0dXJuIC0xOwogCisJCQlCVUdfT04oIWNvZGVjLT5od19yZWFkKTsKIAkJCXJldHVybiBjb2RlYy0+aHdfcmVhZChjb2RlYywgcmVnKTsKIAl9CiAKLQlyZXR1cm4gY2FjaGVbcmVnXTsKKwlyZXQgPSBzbmRfc29jX2NhY2hlX3JlYWQoY29kZWMsIHJlZywgJnZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gdmFsOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKQEAgLTIyNyw3ICsyNDYsNyBAQAogCW1zZ1sxXSA9IGRhdGFbMV07CiAKIAlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOworCW1lbXNldCgmdCwgMCwgc2l6ZW9mIHQpOwogCiAJdC50eF9idWYgPSAmbXNnWzBdOwogCXQubGVuID0gbGVuOwpAQCAtMjQ0LDI0ICsyNjMsMjUgQEAKIHN0YXRpYyBpbnQgc25kX3NvY184XzE2X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKIAkJCSAgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKLQl1MTYgKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAJdTggZGF0YVszXTsKKwlpbnQgcmV0OwogCiAJZGF0YVswXSA9IHJlZzsKIAlkYXRhWzFdID0gKHZhbHVlID4+IDgpICYgMHhmZjsKIAlkYXRhWzJdID0gdmFsdWUgJiAweGZmOwogCiAJaWYgKCFzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpICYmCi0JICAgIHJlZyA8IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplKQotCQlyZWdfY2FjaGVbcmVnXSA9IHZhbHVlOworCQlyZWcgPCBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSkgeworCQlyZXQgPSBzbmRfc29jX2NhY2hlX3dyaXRlKGNvZGVjLCByZWcsIHZhbHVlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQogCiAJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KSB7CiAJCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZGV2X2RiZyhjb2RlYy0+ZGV2LCAiMHgleCA9IDB4JXhcbiIsIHJlZywgdmFsdWUpOwotCiAJaWYgKGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAzKSA9PSAzKQogCQlyZXR1cm4gMDsKIAllbHNlCkBAIC0yNzEsMTcgKzI5MSwyMiBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzhfMTZfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJICAgICAgdW5zaWduZWQgaW50IHJlZykKIHsKLQl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCB2YWw7CiAKIAlpZiAocmVnID49IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplIHx8CiAJICAgIHNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykpIHsKIAkJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KQogCQkJcmV0dXJuIC0xOwogCisJCUJVR19PTighY29kZWMtPmh3X3JlYWQpOwogCQlyZXR1cm4gY29kZWMtPmh3X3JlYWQoY29kZWMsIHJlZyk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIGNhY2hlW3JlZ107CiAJfQorCisJcmV0ID0gc25kX3NvY19jYWNoZV9yZWFkKGNvZGVjLCByZWcsICZ2YWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHZhbDsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCkBAIC0zMDEsNyArMzI2LDcgQEAKIAltc2dbMl0gPSBkYXRhWzJdOwogCiAJc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JbWVtc2V0KCZ0LCAwLCAoc2l6ZW9mIHQpKTsKKwltZW1zZXQoJnQsIDAsIHNpemVvZiB0KTsKIAogCXQudHhfYnVmID0gJm1zZ1swXTsKIAl0LmxlbiA9IGxlbjsKQEAgLTQyMCw3ICs0NDUsOCBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzE2XzhfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnKQogewotCXU4ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgdmFsOwogCiAJcmVnICY9IDB4ZmY7CiAJaWYgKHJlZyA+PSBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSB8fApAQCAtNDI4LDE2ICs0NTQsMTkgQEAKIAkJCWlmIChjb2RlYy0+Y2FjaGVfb25seSkKIAkJCQlyZXR1cm4gLTE7CiAKKwkJCUJVR19PTighY29kZWMtPmh3X3JlYWQpOwogCQkJcmV0dXJuIGNvZGVjLT5od19yZWFkKGNvZGVjLCByZWcpOwogCX0KIAotCXJldHVybiBjYWNoZVtyZWddOworCXJldCA9IHNuZF9zb2NfY2FjaGVfcmVhZChjb2RlYywgcmVnLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiB2YWw7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3NvY18xNl84X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKIAkJCSAgICAgdW5zaWduZWQgaW50IHZhbHVlKQogewotCXU4ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAJdTggZGF0YVszXTsKIAlpbnQgcmV0OwogCkBAIC00NDcsMTYgKzQ3NiwxNyBAQAogCiAJcmVnICY9IDB4ZmY7CiAJaWYgKCFzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpICYmCi0JCXJlZyA8IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplKQotCQkJY2FjaGVbcmVnXSA9IHZhbHVlOworCQlyZWcgPCBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSkgeworCQlyZXQgPSBzbmRfc29jX2NhY2hlX3dyaXRlKGNvZGVjLCByZWcsIHZhbHVlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQogCiAJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KSB7CiAJCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZGV2X2RiZyhjb2RlYy0+ZGV2LCAiMHgleCA9IDB4JXhcbiIsIHJlZywgdmFsdWUpOwotCiAJcmV0ID0gY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDMpOwogCWlmIChyZXQgPT0gMykKIAkJcmV0dXJuIDA7CkBAIC00ODMsNyArNTEzLDcgQEAKIAltc2dbMl0gPSBkYXRhWzJdOwogCiAJc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JbWVtc2V0KCZ0LCAwLCAoc2l6ZW9mIHQpKTsKKwltZW1zZXQoJnQsIDAsIHNpemVvZiB0KTsKIAogCXQudHhfYnVmID0gJm1zZ1swXTsKIAl0LmxlbiA9IGxlbjsKQEAgLTUzNCwyMyArNTY0LDI4IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfMTZfMTZfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCByZWcpCiB7Ci0JdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgdmFsOwogCiAJaWYgKHJlZyA+PSBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSB8fAogCSAgICBzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpKSB7CiAJCWlmIChjb2RlYy0+Y2FjaGVfb25seSkKIAkJCXJldHVybiAtMTsKIAorCQlCVUdfT04oIWNvZGVjLT5od19yZWFkKTsKIAkJcmV0dXJuIGNvZGVjLT5od19yZWFkKGNvZGVjLCByZWcpOwogCX0KIAotCXJldHVybiBjYWNoZVtyZWddOworCXJldCA9IHNuZF9zb2NfY2FjaGVfcmVhZChjb2RlYywgcmVnLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHZhbDsKIH0KIAogc3RhdGljIGludCBzbmRfc29jXzE2XzE2X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7Ci0JdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAJdTggZGF0YVs0XTsKIAlpbnQgcmV0OwogCkBAIC01NjAsMTYgKzU5NSwxNyBAQAogCWRhdGFbM10gPSB2YWx1ZSAmIDB4ZmY7CiAKIAlpZiAoIXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykgJiYKLQkJcmVnIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUpCi0JCQljYWNoZVtyZWddID0gdmFsdWU7CisJCXJlZyA8IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplKSB7CisJCXJldCA9IHNuZF9zb2NfY2FjaGVfd3JpdGUoY29kZWMsIHJlZywgdmFsdWUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CiAKIAlpZiAoY29kZWMtPmNhY2hlX29ubHkpIHsKIAkJY29kZWMtPmNhY2hlX3N5bmMgPSAxOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlkZXZfZGJnKGNvZGVjLT5kZXYsICIweCV4ID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7Ci0KIAlyZXQgPSBjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgNCk7CiAJaWYgKHJldCA9PSA0KQogCQlyZXR1cm4gMDsKQEAgLTU5Nyw3ICs2MzMsNyBAQAogCW1zZ1szXSA9IGRhdGFbM107CiAKIAlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOworCW1lbXNldCgmdCwgMCwgc2l6ZW9mIHQpOwogCiAJdC50eF9idWYgPSAmbXNnWzBdOwogCXQubGVuID0gbGVuOwpAQCAtNjkyLDggKzcyOCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWNvZGVjLT5kcml2ZXItPndyaXRlID0gaW9fdHlwZXNbaV0ud3JpdGU7Ci0JY29kZWMtPmRyaXZlci0+cmVhZCA9IGlvX3R5cGVzW2ldLnJlYWQ7CisJY29kZWMtPndyaXRlID0gaW9fdHlwZXNbaV0ud3JpdGU7CisJY29kZWMtPnJlYWQgPSBpb190eXBlc1tpXS5yZWFkOwogCiAJc3dpdGNoIChjb250cm9sKSB7CiAJY2FzZSBTTkRfU09DX0NVU1RPTToKQEAgLTcyNCwzICs3NjAsOTMwIEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyk7CisKK3N0cnVjdCBzbmRfc29jX3JidHJlZV9ub2RlIHsKKwlzdHJ1Y3QgcmJfbm9kZSBub2RlOworCXVuc2lnbmVkIGludCByZWc7CisJdW5zaWduZWQgaW50IHZhbHVlOworCXVuc2lnbmVkIGludCBkZWZ2YWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHNuZF9zb2NfcmJ0cmVlX2N0eCB7CisJc3RydWN0IHJiX3Jvb3Qgcm9vdDsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19yYnRyZWVfbm9kZSAqc25kX3NvY19yYnRyZWVfbG9va3VwKAorCXN0cnVjdCByYl9yb290ICpyb290LCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN0cnVjdCByYl9ub2RlICpub2RlOworCXN0cnVjdCBzbmRfc29jX3JidHJlZV9ub2RlICpyYm5vZGU7CisKKwlub2RlID0gcm9vdC0+cmJfbm9kZTsKKwl3aGlsZSAobm9kZSkgeworCQlyYm5vZGUgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IHNuZF9zb2NfcmJ0cmVlX25vZGUsIG5vZGUpOworCQlpZiAocmJub2RlLT5yZWcgPCByZWcpCisJCQlub2RlID0gbm9kZS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAocmJub2RlLT5yZWcgPiByZWcpCisJCQlub2RlID0gbm9kZS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiByYm5vZGU7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvY19yYnRyZWVfaW5zZXJ0KHN0cnVjdCByYl9yb290ICpyb290LAorCQkJCSBzdHJ1Y3Qgc25kX3NvY19yYnRyZWVfbm9kZSAqcmJub2RlKQoreworCXN0cnVjdCByYl9ub2RlICoqbmV3LCAqcGFyZW50OworCXN0cnVjdCBzbmRfc29jX3JidHJlZV9ub2RlICpyYm5vZGVfdG1wOworCisJcGFyZW50ID0gTlVMTDsKKwluZXcgPSAmcm9vdC0+cmJfbm9kZTsKKwl3aGlsZSAoKm5ldykgeworCQlyYm5vZGVfdG1wID0gY29udGFpbmVyX29mKCpuZXcsIHN0cnVjdCBzbmRfc29jX3JidHJlZV9ub2RlLAorCQkJCQkgIG5vZGUpOworCQlwYXJlbnQgPSAqbmV3OworCQlpZiAocmJub2RlX3RtcC0+cmVnIDwgcmJub2RlLT5yZWcpCisJCQluZXcgPSAmKCgqbmV3KS0+cmJfbGVmdCk7CisJCWVsc2UgaWYgKHJibm9kZV90bXAtPnJlZyA+IHJibm9kZS0+cmVnKQorCQkJbmV3ID0gJigoKm5ldyktPnJiX3JpZ2h0KTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogaW5zZXJ0IHRoZSBub2RlIGludG8gdGhlIHJidHJlZSAqLworCXJiX2xpbmtfbm9kZSgmcmJub2RlLT5ub2RlLCBwYXJlbnQsIG5ldyk7CisJcmJfaW5zZXJ0X2NvbG9yKCZyYm5vZGUtPm5vZGUsIHJvb3QpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvY19yYnRyZWVfY2FjaGVfc3luYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHNuZF9zb2NfcmJ0cmVlX2N0eCAqcmJ0cmVlX2N0eDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlzdHJ1Y3Qgc25kX3NvY19yYnRyZWVfbm9kZSAqcmJub2RlOworCXVuc2lnbmVkIGludCB2YWw7CisJaW50IHJldDsKKworCXJidHJlZV9jdHggPSBjb2RlYy0+cmVnX2NhY2hlOworCWZvciAobm9kZSA9IHJiX2ZpcnN0KCZyYnRyZWVfY3R4LT5yb290KTsgbm9kZTsgbm9kZSA9IHJiX25leHQobm9kZSkpIHsKKwkJcmJub2RlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IHNuZF9zb2NfcmJ0cmVlX25vZGUsIG5vZGUpOworCQlpZiAocmJub2RlLT52YWx1ZSA9PSByYm5vZGUtPmRlZnZhbCkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBzbmRfc29jX2NhY2hlX3JlYWQoY29kZWMsIHJibm9kZS0+cmVnLCAmdmFsKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIHJibm9kZS0+cmVnLCB2YWwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU3luY2VkIHJlZ2lzdGVyICUjeCwgdmFsdWUgPSAlI3hcbiIsCisJCQlyYm5vZGUtPnJlZywgdmFsKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc29jX3JidHJlZV9jYWNoZV93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0cnVjdCBzbmRfc29jX3JidHJlZV9jdHggKnJidHJlZV9jdHg7CisJc3RydWN0IHNuZF9zb2NfcmJ0cmVlX25vZGUgKnJibm9kZTsKKworCXJidHJlZV9jdHggPSBjb2RlYy0+cmVnX2NhY2hlOworCXJibm9kZSA9IHNuZF9zb2NfcmJ0cmVlX2xvb2t1cCgmcmJ0cmVlX2N0eC0+cm9vdCwgcmVnKTsKKwlpZiAocmJub2RlKSB7CisJCWlmIChyYm5vZGUtPnZhbHVlID09IHZhbHVlKQorCQkJcmV0dXJuIDA7CisJCXJibm9kZS0+dmFsdWUgPSB2YWx1ZTsKKwl9IGVsc2UgeworCQkvKiBiYWlsIG91dCBlYXJseSwgbm8gbmVlZCB0byBjcmVhdGUgdGhlIHJibm9kZSB5ZXQgKi8KKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiAwOworCQkvKgorCQkgKiBmb3IgdW5pbml0aWFsaXplZCByZWdpc3RlcnMgd2hvc2UgdmFsdWUgaXMgY2hhbmdlZAorCQkgKiBmcm9tIHRoZSBkZWZhdWx0IHplcm8sIGNyZWF0ZSBhbiByYm5vZGUgYW5kIGluc2VydAorCQkgKiBpdCBpbnRvIHRoZSB0cmVlLgorCQkgKi8KKwkJcmJub2RlID0ga3phbGxvYyhzaXplb2YgKnJibm9kZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcmJub2RlKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXJibm9kZS0+cmVnID0gcmVnOworCQlyYm5vZGUtPnZhbHVlID0gdmFsdWU7CisJCXNuZF9zb2NfcmJ0cmVlX2luc2VydCgmcmJ0cmVlX2N0eC0+cm9vdCwgcmJub2RlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc29jX3JidHJlZV9jYWNoZV9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCAqdmFsdWUpCit7CisJc3RydWN0IHNuZF9zb2NfcmJ0cmVlX2N0eCAqcmJ0cmVlX2N0eDsKKwlzdHJ1Y3Qgc25kX3NvY19yYnRyZWVfbm9kZSAqcmJub2RlOworCisJcmJ0cmVlX2N0eCA9IGNvZGVjLT5yZWdfY2FjaGU7CisJcmJub2RlID0gc25kX3NvY19yYnRyZWVfbG9va3VwKCZyYnRyZWVfY3R4LT5yb290LCByZWcpOworCWlmIChyYm5vZGUpIHsKKwkJKnZhbHVlID0gcmJub2RlLT52YWx1ZTsKKwl9IGVsc2UgeworCQkvKiB1bmluaXRpYWxpemVkIHJlZ2lzdGVycyBkZWZhdWx0IHRvIDAgKi8KKwkJKnZhbHVlID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc29jX3JidHJlZV9jYWNoZV9leGl0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmV4dDsKKwlzdHJ1Y3Qgc25kX3NvY19yYnRyZWVfY3R4ICpyYnRyZWVfY3R4OworCXN0cnVjdCBzbmRfc29jX3JidHJlZV9ub2RlICpyYnRyZWVfbm9kZTsKKworCS8qIGlmIHdlJ3ZlIGFscmVhZHkgYmVlbiBjYWxsZWQgdGhlbiBqdXN0IHJldHVybiAqLworCXJidHJlZV9jdHggPSBjb2RlYy0+cmVnX2NhY2hlOworCWlmICghcmJ0cmVlX2N0eCkKKwkJcmV0dXJuIDA7CisKKwkvKiBmcmVlIHVwIHRoZSByYnRyZWUgKi8KKwluZXh0ID0gcmJfZmlyc3QoJnJidHJlZV9jdHgtPnJvb3QpOworCXdoaWxlIChuZXh0KSB7CisJCXJidHJlZV9ub2RlID0gcmJfZW50cnkobmV4dCwgc3RydWN0IHNuZF9zb2NfcmJ0cmVlX25vZGUsIG5vZGUpOworCQluZXh0ID0gcmJfbmV4dCgmcmJ0cmVlX25vZGUtPm5vZGUpOworCQlyYl9lcmFzZSgmcmJ0cmVlX25vZGUtPm5vZGUsICZyYnRyZWVfY3R4LT5yb290KTsKKwkJa2ZyZWUocmJ0cmVlX25vZGUpOworCX0KKworCS8qIHJlbGVhc2UgdGhlIHJlc291cmNlcyAqLworCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOworCWNvZGVjLT5yZWdfY2FjaGUgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvY19yYnRyZWVfY2FjaGVfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHNuZF9zb2NfcmJ0cmVlX2N0eCAqcmJ0cmVlX2N0eDsKKworCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWFsbG9jKHNpemVvZiAqcmJ0cmVlX2N0eCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb2RlYy0+cmVnX2NhY2hlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJidHJlZV9jdHggPSBjb2RlYy0+cmVnX2NhY2hlOworCXJidHJlZV9jdHgtPnJvb3QgPSBSQl9ST09UOworCisJaWYgKCFjb2RlYy0+cmVnX2RlZl9jb3B5KQorCQlyZXR1cm4gMDsKKworLyoKKyAqIHBvcHVsYXRlIHRoZSByYnRyZWUgd2l0aCB0aGUgaW5pdGlhbGl6ZWQgcmVnaXN0ZXJzLiAgQWxsIG90aGVyCisgKiByZWdpc3RlcnMgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlIHdoZW4gdGhleSBhcmUgZmlyc3Qgd3JpdHRlbi4KKyAqCisgKiBUaGUgcmVhc29uaW5nIGJlaGluZCB0aGlzLCBpcyB0aGF0IHdlIG5lZWQgdG8gc3RlcCB0aHJvdWdoIGFuZAorICogZGVyZWZlcmVuY2UgdGhlIGNhY2hlIGluIHU4L3UxNiBpbmNyZW1lbnRzIHdpdGhvdXQgc2FjcmlmaWNpbmcKKyAqIHBvcnRhYmlsaXR5LiAgVGhpcyBjb3VsZCBhbHNvIGJlIGRvbmUgdXNpbmcgbWVtY3B5KCkgYnV0IHRoYXQgd291bGQKKyAqIGJlIHNsaWdodGx5IG1vcmUgY3J5cHRpYy4KKyAqLworI2RlZmluZSBzbmRfc29jX3JidHJlZV9wb3B1bGF0ZShjYWNoZSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCByZXQsIGk7CQkJCQkJCVwKKwlzdHJ1Y3Qgc25kX3NvY19yYnRyZWVfbm9kZSAqcmJ0cmVlX25vZGU7CQkJXAorCQkJCQkJCQkJXAorCXJldCA9IDA7CQkJCQkJCVwKKwljYWNoZSA9IGNvZGVjLT5yZWdfZGVmX2NvcHk7CQkJCQlcCisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplOyArK2kpIHsJCVwKKwkJaWYgKCFjYWNoZVtpXSkJCQkJCQlcCisJCQljb250aW51ZTsJCQkJCVwKKwkJcmJ0cmVlX25vZGUgPSBremFsbG9jKHNpemVvZiAqcmJ0cmVlX25vZGUsIEdGUF9LRVJORUwpOwlcCisJCWlmICghcmJ0cmVlX25vZGUpIHsJCQkJCVwKKwkJCXJldCA9IC1FTk9NRU07CQkJCQlcCisJCQlzbmRfc29jX2NhY2hlX2V4aXQoY29kZWMpOwkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJfQkJCQkJCQlcCisJCXJidHJlZV9ub2RlLT5yZWcgPSBpOwkJCQkJXAorCQlyYnRyZWVfbm9kZS0+dmFsdWUgPSBjYWNoZVtpXTsJCQkJXAorCQlyYnRyZWVfbm9kZS0+ZGVmdmFsID0gY2FjaGVbaV07CQkJCVwKKwkJc25kX3NvY19yYnRyZWVfaW5zZXJ0KCZyYnRyZWVfY3R4LT5yb290LAkJXAorCQkJCSAgICAgIHJidHJlZV9ub2RlKTsJCQlcCisJfQkJCQkJCQkJXAorCXJldDsJCQkJCQkJCVwKK30pCisKKwlzd2l0Y2ggKGNvZGVjLT5kcml2ZXItPnJlZ193b3JkX3NpemUpIHsKKwljYXNlIDE6IHsKKwkJY29uc3QgdTggKmNhY2hlOworCisJCXJldHVybiBzbmRfc29jX3JidHJlZV9wb3B1bGF0ZShjYWNoZSk7CisJfQorCWNhc2UgMjogeworCQljb25zdCB1MTYgKmNhY2hlOworCisJCXJldHVybiBzbmRfc29jX3JidHJlZV9wb3B1bGF0ZShjYWNoZSk7CisJfQorCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1NORF9TT0NfQ0FDSEVfTFpPCitzdHJ1Y3Qgc25kX3NvY19sem9fY3R4IHsKKwl2b2lkICp3bWVtOworCXZvaWQgKmRzdDsKKwljb25zdCB2b2lkICpzcmM7CisJc2l6ZV90IHNyY19sZW47CisJc2l6ZV90IGRzdF9sZW47CisJc2l6ZV90IGRlY29tcHJlc3NlZF9zaXplOworCXVuc2lnbmVkIGxvbmcgKnN5bmNfYm1wOworCWludCBzeW5jX2JtcF9uYml0czsKK307CisKKyNkZWZpbmUgTFpPX0JMT0NLX05VTSA4CitzdGF0aWMgaW50IHNuZF9zb2NfbHpvX2Jsb2NrX2NvdW50KHZvaWQpCit7CisJcmV0dXJuIExaT19CTE9DS19OVU07Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvY19sem9fcHJlcGFyZShzdHJ1Y3Qgc25kX3NvY19sem9fY3R4ICpsem9fY3R4KQoreworCWx6b19jdHgtPndtZW0gPSBrbWFsbG9jKExaTzFYX01FTV9DT01QUkVTUywgR0ZQX0tFUk5FTCk7CisJaWYgKCFsem9fY3R4LT53bWVtKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc29jX2x6b19jb21wcmVzcyhzdHJ1Y3Qgc25kX3NvY19sem9fY3R4ICpsem9fY3R4KQoreworCXNpemVfdCBjb21wcmVzc19zaXplOworCWludCByZXQ7CisKKwlyZXQgPSBsem8xeF8xX2NvbXByZXNzKGx6b19jdHgtPnNyYywgbHpvX2N0eC0+c3JjX2xlbiwKKwkJCSAgICAgICBsem9fY3R4LT5kc3QsICZjb21wcmVzc19zaXplLCBsem9fY3R4LT53bWVtKTsKKwlpZiAocmV0ICE9IExaT19FX09LIHx8IGNvbXByZXNzX3NpemUgPiBsem9fY3R4LT5kc3RfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlsem9fY3R4LT5kc3RfbGVuID0gY29tcHJlc3Nfc2l6ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc29jX2x6b19kZWNvbXByZXNzKHN0cnVjdCBzbmRfc29jX2x6b19jdHggKmx6b19jdHgpCit7CisJc2l6ZV90IGRzdF9sZW47CisJaW50IHJldDsKKworCWRzdF9sZW4gPSBsem9fY3R4LT5kc3RfbGVuOworCXJldCA9IGx6bzF4X2RlY29tcHJlc3Nfc2FmZShsem9fY3R4LT5zcmMsIGx6b19jdHgtPnNyY19sZW4sCisJCQkJICAgIGx6b19jdHgtPmRzdCwgJmRzdF9sZW4pOworCWlmIChyZXQgIT0gTFpPX0VfT0sgfHwgZHN0X2xlbiAhPSBsem9fY3R4LT5kc3RfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc29jX2x6b19jb21wcmVzc19jYWNoZV9ibG9jayhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCXN0cnVjdCBzbmRfc29jX2x6b19jdHggKmx6b19jdHgpCit7CisJaW50IHJldDsKKworCWx6b19jdHgtPmRzdF9sZW4gPSBsem8xeF93b3JzdF9jb21wcmVzcyhQQUdFX1NJWkUpOworCWx6b19jdHgtPmRzdCA9IGttYWxsb2MobHpvX2N0eC0+ZHN0X2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsem9fY3R4LT5kc3QpIHsKKwkJbHpvX2N0eC0+ZHN0X2xlbiA9IDA7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IHNuZF9zb2NfbHpvX2NvbXByZXNzKGx6b19jdHgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9zb2NfbHpvX2RlY29tcHJlc3NfY2FjaGVfYmxvY2soc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQlzdHJ1Y3Qgc25kX3NvY19sem9fY3R4ICpsem9fY3R4KQoreworCWludCByZXQ7CisKKwlsem9fY3R4LT5kc3RfbGVuID0gbHpvX2N0eC0+ZGVjb21wcmVzc2VkX3NpemU7CisJbHpvX2N0eC0+ZHN0ID0ga21hbGxvYyhsem9fY3R4LT5kc3RfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWx6b19jdHgtPmRzdCkgeworCQlsem9fY3R4LT5kc3RfbGVuID0gMDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gc25kX3NvY19sem9fZGVjb21wcmVzcyhsem9fY3R4KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc25kX3NvY19sem9fZ2V0X2Jsa2luZGV4KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJdW5zaWduZWQgaW50IHJlZykKK3sKKwljb25zdCBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgKmNvZGVjX2RydjsKKwlzaXplX3QgcmVnX3NpemU7CisKKwljb2RlY19kcnYgPSBjb2RlYy0+ZHJpdmVyOworCXJlZ19zaXplID0gY29kZWNfZHJ2LT5yZWdfY2FjaGVfc2l6ZSAqIGNvZGVjX2Rydi0+cmVnX3dvcmRfc2l6ZTsKKwlyZXR1cm4gKHJlZyAqIGNvZGVjX2Rydi0+cmVnX3dvcmRfc2l6ZSkgLworCSAgICAgICBESVZfUk9VTkRfVVAocmVnX3NpemUsIHNuZF9zb2NfbHpvX2Jsb2NrX2NvdW50KCkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzbmRfc29jX2x6b19nZXRfYmxrcG9zKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJdW5zaWduZWQgaW50IHJlZykKK3sKKwljb25zdCBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgKmNvZGVjX2RydjsKKwlzaXplX3QgcmVnX3NpemU7CisKKwljb2RlY19kcnYgPSBjb2RlYy0+ZHJpdmVyOworCXJlZ19zaXplID0gY29kZWNfZHJ2LT5yZWdfY2FjaGVfc2l6ZSAqIGNvZGVjX2Rydi0+cmVnX3dvcmRfc2l6ZTsKKwlyZXR1cm4gcmVnICUgKERJVl9ST1VORF9VUChyZWdfc2l6ZSwgc25kX3NvY19sem9fYmxvY2tfY291bnQoKSkgLworCQkgICAgICBjb2RlY19kcnYtPnJlZ193b3JkX3NpemUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzbmRfc29jX2x6b19nZXRfYmxrc2l6ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJY29uc3Qgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyICpjb2RlY19kcnY7CisJc2l6ZV90IHJlZ19zaXplOworCisJY29kZWNfZHJ2ID0gY29kZWMtPmRyaXZlcjsKKwlyZWdfc2l6ZSA9IGNvZGVjX2Rydi0+cmVnX2NhY2hlX3NpemUgKiBjb2RlY19kcnYtPnJlZ193b3JkX3NpemU7CisJcmV0dXJuIERJVl9ST1VORF9VUChyZWdfc2l6ZSwgc25kX3NvY19sem9fYmxvY2tfY291bnQoKSk7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvY19sem9fY2FjaGVfc3luYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHNuZF9zb2NfbHpvX2N0eCAqKmx6b19ibG9ja3M7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJbHpvX2Jsb2NrcyA9IGNvZGVjLT5yZWdfY2FjaGU7CisJZm9yX2VhY2hfc2V0X2JpdChpLCBsem9fYmxvY2tzWzBdLT5zeW5jX2JtcCwgbHpvX2Jsb2Nrc1swXS0+c3luY19ibXBfbmJpdHMpIHsKKwkJcmV0ID0gc25kX3NvY19jYWNoZV9yZWFkKGNvZGVjLCBpLCAmdmFsKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIGksIHZhbCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJTeW5jZWQgcmVnaXN0ZXIgJSN4LCB2YWx1ZSA9ICUjeFxuIiwKKwkJCWksIHZhbCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvY19sem9fY2FjaGVfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19sem9fY3R4ICpsem9fYmxvY2ssICoqbHpvX2Jsb2NrczsKKwlpbnQgcmV0LCBibGtpbmRleCwgYmxrcG9zOworCXNpemVfdCBibGtzaXplLCB0bXBfZHN0X2xlbjsKKwl2b2lkICp0bXBfZHN0OworCisJLyogaW5kZXggb2YgdGhlIGNvbXByZXNzZWQgbHpvIGJsb2NrICovCisJYmxraW5kZXggPSBzbmRfc29jX2x6b19nZXRfYmxraW5kZXgoY29kZWMsIHJlZyk7CisJLyogcmVnaXN0ZXIgaW5kZXggd2l0aGluIHRoZSBkZWNvbXByZXNzZWQgYmxvY2sgKi8KKwlibGtwb3MgPSBzbmRfc29jX2x6b19nZXRfYmxrcG9zKGNvZGVjLCByZWcpOworCS8qIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgYmxvY2sgKi8KKwlibGtzaXplID0gc25kX3NvY19sem9fZ2V0X2Jsa3NpemUoY29kZWMpOworCWx6b19ibG9ja3MgPSBjb2RlYy0+cmVnX2NhY2hlOworCWx6b19ibG9jayA9IGx6b19ibG9ja3NbYmxraW5kZXhdOworCisJLyogc2F2ZSB0aGUgcG9pbnRlciBhbmQgbGVuZ3RoIG9mIHRoZSBjb21wcmVzc2VkIGJsb2NrICovCisJdG1wX2RzdCA9IGx6b19ibG9jay0+ZHN0OworCXRtcF9kc3RfbGVuID0gbHpvX2Jsb2NrLT5kc3RfbGVuOworCisJLyogcHJlcGFyZSB0aGUgc291cmNlIHRvIGJlIHRoZSBjb21wcmVzc2VkIGJsb2NrICovCisJbHpvX2Jsb2NrLT5zcmMgPSBsem9fYmxvY2stPmRzdDsKKwlsem9fYmxvY2stPnNyY19sZW4gPSBsem9fYmxvY2stPmRzdF9sZW47CisKKwkvKiBkZWNvbXByZXNzIHRoZSBibG9jayAqLworCXJldCA9IHNuZF9zb2NfbHpvX2RlY29tcHJlc3NfY2FjaGVfYmxvY2soY29kZWMsIGx6b19ibG9jayk7CisJaWYgKHJldCA8IDApIHsKKwkJa2ZyZWUobHpvX2Jsb2NrLT5kc3QpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiB3cml0ZSB0aGUgbmV3IHZhbHVlIHRvIHRoZSBjYWNoZSAqLworCXN3aXRjaCAoY29kZWMtPmRyaXZlci0+cmVnX3dvcmRfc2l6ZSkgeworCWNhc2UgMTogeworCQl1OCAqY2FjaGU7CisJCWNhY2hlID0gbHpvX2Jsb2NrLT5kc3Q7CisJCWlmIChjYWNoZVtibGtwb3NdID09IHZhbHVlKSB7CisJCQlrZnJlZShsem9fYmxvY2stPmRzdCk7CisJCQlnb3RvIG91dDsKKwkJfQorCQljYWNoZVtibGtwb3NdID0gdmFsdWU7CisJfQorCWJyZWFrOworCWNhc2UgMjogeworCQl1MTYgKmNhY2hlOworCQljYWNoZSA9IGx6b19ibG9jay0+ZHN0OworCQlpZiAoY2FjaGVbYmxrcG9zXSA9PSB2YWx1ZSkgeworCQkJa2ZyZWUobHpvX2Jsb2NrLT5kc3QpOworCQkJZ290byBvdXQ7CisJCX0KKwkJY2FjaGVbYmxrcG9zXSA9IHZhbHVlOworCX0KKwlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwkvKiBwcmVwYXJlIHRoZSBzb3VyY2UgdG8gYmUgdGhlIGRlY29tcHJlc3NlZCBibG9jayAqLworCWx6b19ibG9jay0+c3JjID0gbHpvX2Jsb2NrLT5kc3Q7CisJbHpvX2Jsb2NrLT5zcmNfbGVuID0gbHpvX2Jsb2NrLT5kc3RfbGVuOworCisJLyogY29tcHJlc3MgdGhlIGJsb2NrICovCisJcmV0ID0gc25kX3NvY19sem9fY29tcHJlc3NfY2FjaGVfYmxvY2soY29kZWMsIGx6b19ibG9jayk7CisJaWYgKHJldCA8IDApIHsKKwkJa2ZyZWUobHpvX2Jsb2NrLT5kc3QpOworCQlrZnJlZShsem9fYmxvY2stPnNyYyk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHNldCB0aGUgYml0IHNvIHdlIGtub3cgd2UgaGF2ZSB0byBzeW5jIHRoaXMgcmVnaXN0ZXIgKi8KKwlzZXRfYml0KHJlZywgbHpvX2Jsb2NrLT5zeW5jX2JtcCk7CisJa2ZyZWUodG1wX2RzdCk7CisJa2ZyZWUobHpvX2Jsb2NrLT5zcmMpOworCXJldHVybiAwOworb3V0OgorCWx6b19ibG9jay0+ZHN0ID0gdG1wX2RzdDsKKwlsem9fYmxvY2stPmRzdF9sZW4gPSB0bXBfZHN0X2xlbjsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNuZF9zb2NfbHpvX2NhY2hlX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50ICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19sem9fY3R4ICpsem9fYmxvY2ssICoqbHpvX2Jsb2NrczsKKwlpbnQgcmV0LCBibGtpbmRleCwgYmxrcG9zOworCXNpemVfdCBibGtzaXplLCB0bXBfZHN0X2xlbjsKKwl2b2lkICp0bXBfZHN0OworCisJKnZhbHVlID0gMDsKKwkvKiBpbmRleCBvZiB0aGUgY29tcHJlc3NlZCBsem8gYmxvY2sgKi8KKwlibGtpbmRleCA9IHNuZF9zb2NfbHpvX2dldF9ibGtpbmRleChjb2RlYywgcmVnKTsKKwkvKiByZWdpc3RlciBpbmRleCB3aXRoaW4gdGhlIGRlY29tcHJlc3NlZCBibG9jayAqLworCWJsa3BvcyA9IHNuZF9zb2NfbHpvX2dldF9ibGtwb3MoY29kZWMsIHJlZyk7CisJLyogc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBibG9jayAqLworCWJsa3NpemUgPSBzbmRfc29jX2x6b19nZXRfYmxrc2l6ZShjb2RlYyk7CisJbHpvX2Jsb2NrcyA9IGNvZGVjLT5yZWdfY2FjaGU7CisJbHpvX2Jsb2NrID0gbHpvX2Jsb2Nrc1tibGtpbmRleF07CisKKwkvKiBzYXZlIHRoZSBwb2ludGVyIGFuZCBsZW5ndGggb2YgdGhlIGNvbXByZXNzZWQgYmxvY2sgKi8KKwl0bXBfZHN0ID0gbHpvX2Jsb2NrLT5kc3Q7CisJdG1wX2RzdF9sZW4gPSBsem9fYmxvY2stPmRzdF9sZW47CisKKwkvKiBwcmVwYXJlIHRoZSBzb3VyY2UgdG8gYmUgdGhlIGNvbXByZXNzZWQgYmxvY2sgKi8KKwlsem9fYmxvY2stPnNyYyA9IGx6b19ibG9jay0+ZHN0OworCWx6b19ibG9jay0+c3JjX2xlbiA9IGx6b19ibG9jay0+ZHN0X2xlbjsKKworCS8qIGRlY29tcHJlc3MgdGhlIGJsb2NrICovCisJcmV0ID0gc25kX3NvY19sem9fZGVjb21wcmVzc19jYWNoZV9ibG9jayhjb2RlYywgbHpvX2Jsb2NrKTsKKwlpZiAocmV0ID49IDApIHsKKwkJLyogZmV0Y2ggdGhlIHZhbHVlIGZyb20gdGhlIGNhY2hlICovCisJCXN3aXRjaCAoY29kZWMtPmRyaXZlci0+cmVnX3dvcmRfc2l6ZSkgeworCQljYXNlIDE6IHsKKwkJCXU4ICpjYWNoZTsKKwkJCWNhY2hlID0gbHpvX2Jsb2NrLT5kc3Q7CisJCQkqdmFsdWUgPSBjYWNoZVtibGtwb3NdOworCQl9CisJCWJyZWFrOworCQljYXNlIDI6IHsKKwkJCXUxNiAqY2FjaGU7CisJCQljYWNoZSA9IGx6b19ibG9jay0+ZHN0OworCQkJKnZhbHVlID0gY2FjaGVbYmxrcG9zXTsKKwkJfQorCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisJfQorCisJa2ZyZWUobHpvX2Jsb2NrLT5kc3QpOworCS8qIHJlc3RvcmUgdGhlIHBvaW50ZXIgYW5kIGxlbmd0aCBvZiB0aGUgY29tcHJlc3NlZCBibG9jayAqLworCWx6b19ibG9jay0+ZHN0ID0gdG1wX2RzdDsKKwlsem9fYmxvY2stPmRzdF9sZW4gPSB0bXBfZHN0X2xlbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc29jX2x6b19jYWNoZV9leGl0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19sem9fY3R4ICoqbHpvX2Jsb2NrczsKKwlpbnQgaSwgYmxrY291bnQ7CisKKwlsem9fYmxvY2tzID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpZiAoIWx6b19ibG9ja3MpCisJCXJldHVybiAwOworCisJYmxrY291bnQgPSBzbmRfc29jX2x6b19ibG9ja19jb3VudCgpOworCS8qCisJICogdGhlIHBvaW50ZXIgdG8gdGhlIGJpdG1hcCB1c2VkIGZvciBzeW5jaW5nIHRoZSBjYWNoZQorCSAqIGlzIHNoYXJlZCBhbW9uZ3N0IGFsbCBsem9fYmxvY2tzLiAgRW5zdXJlIGl0IGlzIGZyZWVkCisJICogb25seSBvbmNlLgorCSAqLworCWlmIChsem9fYmxvY2tzWzBdKQorCQlrZnJlZShsem9fYmxvY2tzWzBdLT5zeW5jX2JtcCk7CisJZm9yIChpID0gMDsgaSA8IGJsa2NvdW50OyArK2kpIHsKKwkJaWYgKGx6b19ibG9ja3NbaV0pIHsKKwkJCWtmcmVlKGx6b19ibG9ja3NbaV0tPndtZW0pOworCQkJa2ZyZWUobHpvX2Jsb2Nrc1tpXS0+ZHN0KTsKKwkJfQorCQkvKiBlYWNoIGx6b19ibG9jayBpcyBhIHBvaW50ZXIgcmV0dXJuZWQgYnkga21hbGxvYyBvciBOVUxMICovCisJCWtmcmVlKGx6b19ibG9ja3NbaV0pOworCX0KKwlrZnJlZShsem9fYmxvY2tzKTsKKwljb2RlYy0+cmVnX2NhY2hlID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc29jX2x6b19jYWNoZV9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19sem9fY3R4ICoqbHpvX2Jsb2NrczsKKwlzaXplX3QgcmVnX3NpemUsIGJtcF9zaXplOworCWNvbnN0IHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciAqY29kZWNfZHJ2OworCWludCByZXQsIHRvZnJlZSwgaSwgYmxrc2l6ZSwgYmxrY291bnQ7CisJY29uc3QgY2hhciAqcCwgKmVuZDsKKwl1bnNpZ25lZCBsb25nICpzeW5jX2JtcDsKKworCXJldCA9IDA7CisJY29kZWNfZHJ2ID0gY29kZWMtPmRyaXZlcjsKKwlyZWdfc2l6ZSA9IGNvZGVjX2Rydi0+cmVnX2NhY2hlX3NpemUgKiBjb2RlY19kcnYtPnJlZ193b3JkX3NpemU7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgbm90IGJlZW4gZ2l2ZW4gYSBkZWZhdWx0IHJlZ2lzdGVyIGNhY2hlCisJICogdGhlbiBhbGxvY2F0ZSBhIGR1bW15IHplcm8tZWQgb3V0IHJlZ2lvbiwgY29tcHJlc3MgaXQKKwkgKiBhbmQgcmVtZW1iZXIgdG8gZnJlZSBpdCBhZnRlcndhcmRzLgorCSAqLworCXRvZnJlZSA9IDA7CisJaWYgKCFjb2RlYy0+cmVnX2RlZl9jb3B5KQorCQl0b2ZyZWUgPSAxOworCisJaWYgKCFjb2RlYy0+cmVnX2RlZl9jb3B5KSB7CisJCWNvZGVjLT5yZWdfZGVmX2NvcHkgPSBremFsbG9jKHJlZ19zaXplLAorCQkJCQkJICAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIWNvZGVjLT5yZWdfZGVmX2NvcHkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlibGtjb3VudCA9IHNuZF9zb2NfbHpvX2Jsb2NrX2NvdW50KCk7CisJY29kZWMtPnJlZ19jYWNoZSA9IGt6YWxsb2MoYmxrY291bnQgKiBzaXplb2YgKmx6b19ibG9ja3MsCisJCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb2RlYy0+cmVnX2NhY2hlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3RvZnJlZTsKKwl9CisJbHpvX2Jsb2NrcyA9IGNvZGVjLT5yZWdfY2FjaGU7CisKKwkvKgorCSAqIGFsbG9jYXRlIGEgYml0bWFwIHRvIGJlIHVzZWQgd2hlbiBzeW5jaW5nIHRoZSBjYWNoZSB3aXRoCisJICogdGhlIGhhcmR3YXJlLiAgRWFjaCB0aW1lIGEgcmVnaXN0ZXIgaXMgbW9kaWZpZWQsIHRoZSBjb3JyZXNwb25kaW5nCisJICogYml0IGlzIHNldCBpbiB0aGUgYml0bWFwLCBzbyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSB0byBzeW5jCisJICogdGhhdCByZWdpc3Rlci4KKwkgKi8KKwlibXBfc2l6ZSA9IGNvZGVjX2Rydi0+cmVnX2NhY2hlX3NpemU7CisJc3luY19ibXAgPSBrbWFsbG9jKEJJVFNfVE9fTE9OR1MoYm1wX3NpemUpICogc2l6ZW9mKGxvbmcpLAorCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFzeW5jX2JtcCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisJYml0bWFwX3plcm8oc3luY19ibXAsIGJtcF9zaXplKTsKKworCS8qIGFsbG9jYXRlIHRoZSBsem8gYmxvY2tzIGFuZCBpbml0aWFsaXplIHRoZW0gKi8KKwlmb3IgKGkgPSAwOyBpIDwgYmxrY291bnQ7ICsraSkgeworCQlsem9fYmxvY2tzW2ldID0ga3phbGxvYyhzaXplb2YgKipsem9fYmxvY2tzLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFsem9fYmxvY2tzW2ldKSB7CisJCQlrZnJlZShzeW5jX2JtcCk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKwkJbHpvX2Jsb2Nrc1tpXS0+c3luY19ibXAgPSBzeW5jX2JtcDsKKwkJbHpvX2Jsb2Nrc1tpXS0+c3luY19ibXBfbmJpdHMgPSBibXBfc2l6ZTsKKwkJLyogYWxsb2MgdGhlIHdvcmtpbmcgc3BhY2UgZm9yIHRoZSBjb21wcmVzc2VkIGJsb2NrICovCisJCXJldCA9IHNuZF9zb2NfbHpvX3ByZXBhcmUobHpvX2Jsb2Nrc1tpXSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnI7CisJfQorCisJYmxrc2l6ZSA9IHNuZF9zb2NfbHpvX2dldF9ibGtzaXplKGNvZGVjKTsKKwlwID0gY29kZWMtPnJlZ19kZWZfY29weTsKKwllbmQgPSBjb2RlYy0+cmVnX2RlZl9jb3B5ICsgcmVnX3NpemU7CisJLyogY29tcHJlc3MgdGhlIHJlZ2lzdGVyIG1hcCBhbmQgZmlsbCB0aGUgbHpvIGJsb2NrcyAqLworCWZvciAoaSA9IDA7IGkgPCBibGtjb3VudDsgKytpLCBwICs9IGJsa3NpemUpIHsKKwkJbHpvX2Jsb2Nrc1tpXS0+c3JjID0gcDsKKwkJaWYgKHAgKyBibGtzaXplID4gZW5kKQorCQkJbHpvX2Jsb2Nrc1tpXS0+c3JjX2xlbiA9IGVuZCAtIHA7CisJCWVsc2UKKwkJCWx6b19ibG9ja3NbaV0tPnNyY19sZW4gPSBibGtzaXplOworCQlyZXQgPSBzbmRfc29jX2x6b19jb21wcmVzc19jYWNoZV9ibG9jayhjb2RlYywKKwkJCQkJCSAgICAgICBsem9fYmxvY2tzW2ldKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKwkJbHpvX2Jsb2Nrc1tpXS0+ZGVjb21wcmVzc2VkX3NpemUgPQorCQkJbHpvX2Jsb2Nrc1tpXS0+c3JjX2xlbjsKKwl9CisKKwlpZiAodG9mcmVlKSB7CisJCWtmcmVlKGNvZGVjLT5yZWdfZGVmX2NvcHkpOworCQljb2RlYy0+cmVnX2RlZl9jb3B5ID0gTlVMTDsKKwl9CisJcmV0dXJuIDA7CitlcnI6CisJc25kX3NvY19jYWNoZV9leGl0KGNvZGVjKTsKK2Vycl90b2ZyZWU6CisJaWYgKHRvZnJlZSkgeworCQlrZnJlZShjb2RlYy0+cmVnX2RlZl9jb3B5KTsKKwkJY29kZWMtPnJlZ19kZWZfY29weSA9IE5VTEw7CisJfQorCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBzbmRfc29jX2ZsYXRfY2FjaGVfc3luYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IGk7CisJaW50IHJldDsKKwljb25zdCBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgKmNvZGVjX2RydjsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJY29kZWNfZHJ2ID0gY29kZWMtPmRyaXZlcjsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWNfZHJ2LT5yZWdfY2FjaGVfc2l6ZTsgKytpKSB7CisJCXJldCA9IHNuZF9zb2NfY2FjaGVfcmVhZChjb2RlYywgaSwgJnZhbCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlpZiAoY29kZWNfZHJ2LT5yZWdfY2FjaGVfZGVmYXVsdCkgeworCQkJc3dpdGNoIChjb2RlY19kcnYtPnJlZ193b3JkX3NpemUpIHsKKwkJCWNhc2UgMTogeworCQkJCWNvbnN0IHU4ICpjYWNoZTsKKworCQkJCWNhY2hlID0gY29kZWNfZHJ2LT5yZWdfY2FjaGVfZGVmYXVsdDsKKwkJCQlpZiAoY2FjaGVbaV0gPT0gdmFsKQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJCWJyZWFrOworCQkJY2FzZSAyOiB7CisJCQkJY29uc3QgdTE2ICpjYWNoZTsKKworCQkJCWNhY2hlID0gY29kZWNfZHJ2LT5yZWdfY2FjaGVfZGVmYXVsdDsKKwkJCQlpZiAoY2FjaGVbaV0gPT0gdmFsKQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlCVUcoKTsKKwkJCX0KKwkJfQorCQlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBpLCB2YWwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU3luY2VkIHJlZ2lzdGVyICUjeCwgdmFsdWUgPSAlI3hcbiIsCisJCQlpLCB2YWwpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc29jX2ZsYXRfY2FjaGVfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3dpdGNoIChjb2RlYy0+ZHJpdmVyLT5yZWdfd29yZF9zaXplKSB7CisJY2FzZSAxOiB7CisJCXU4ICpjYWNoZTsKKworCQljYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJCWNhY2hlW3JlZ10gPSB2YWx1ZTsKKwl9CisJYnJlYWs7CisJY2FzZSAyOiB7CisJCXUxNiAqY2FjaGU7CisKKwkJY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCQljYWNoZVtyZWddID0gdmFsdWU7CisJfQorCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9zb2NfZmxhdF9jYWNoZV9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgKnZhbHVlKQoreworCXN3aXRjaCAoY29kZWMtPmRyaXZlci0+cmVnX3dvcmRfc2l6ZSkgeworCWNhc2UgMTogeworCQl1OCAqY2FjaGU7CisKKwkJY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCQkqdmFsdWUgPSBjYWNoZVtyZWddOworCX0KKwlicmVhazsKKwljYXNlIDI6IHsKKwkJdTE2ICpjYWNoZTsKKworCQljYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJCSp2YWx1ZSA9IGNhY2hlW3JlZ107CisJfQorCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9zb2NfZmxhdF9jYWNoZV9leGl0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpZiAoIWNvZGVjLT5yZWdfY2FjaGUpCisJCXJldHVybiAwOworCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOworCWNvZGVjLT5yZWdfY2FjaGUgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9zb2NfZmxhdF9jYWNoZV9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwljb25zdCBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgKmNvZGVjX2RydjsKKwlzaXplX3QgcmVnX3NpemU7CisKKwljb2RlY19kcnYgPSBjb2RlYy0+ZHJpdmVyOworCXJlZ19zaXplID0gY29kZWNfZHJ2LT5yZWdfY2FjaGVfc2l6ZSAqIGNvZGVjX2Rydi0+cmVnX3dvcmRfc2l6ZTsKKworCS8qCisJICogZm9yIGZsYXQgY29tcHJlc3Npb24sIHdlIGRvbid0IG5lZWQgdG8ga2VlcCBhIGNvcHkgb2YgdGhlCisJICogb3JpZ2luYWwgZGVmYXVsdHMgcmVnaXN0ZXIgY2FjaGUgYXMgaXQgd2lsbCBkZWZpbml0ZWx5IG5vdAorCSAqIGJlIG1hcmtlZCBhcyBfX2RldmluaXRjb25zdAorCSAqLworCWtmcmVlKGNvZGVjLT5yZWdfZGVmX2NvcHkpOworCWNvZGVjLT5yZWdfZGVmX2NvcHkgPSBOVUxMOworCisJaWYgKGNvZGVjX2Rydi0+cmVnX2NhY2hlX2RlZmF1bHQpCisJCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKGNvZGVjX2Rydi0+cmVnX2NhY2hlX2RlZmF1bHQsCisJCQkJCSAgIHJlZ19zaXplLCBHRlBfS0VSTkVMKTsKKwllbHNlCisJCWNvZGVjLT5yZWdfY2FjaGUgPSBremFsbG9jKHJlZ19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvZGVjLT5yZWdfY2FjaGUpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGFuIGFycmF5IG9mIGFsbCBzdXBwb3J0ZWQgY29tcHJlc3Npb24gdHlwZXMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jYWNoZV9vcHMgY2FjaGVfdHlwZXNbXSA9IHsKKwkvKiBGbGF0ICptdXN0KiBiZSB0aGUgZmlyc3QgZW50cnkgZm9yIGZhbGxiYWNrICovCisJeworCQkuaWQgPSBTTkRfU09DX0ZMQVRfQ09NUFJFU1NJT04sCisJCS5uYW1lID0gImZsYXQiLAorCQkuaW5pdCA9IHNuZF9zb2NfZmxhdF9jYWNoZV9pbml0LAorCQkuZXhpdCA9IHNuZF9zb2NfZmxhdF9jYWNoZV9leGl0LAorCQkucmVhZCA9IHNuZF9zb2NfZmxhdF9jYWNoZV9yZWFkLAorCQkud3JpdGUgPSBzbmRfc29jX2ZsYXRfY2FjaGVfd3JpdGUsCisJCS5zeW5jID0gc25kX3NvY19mbGF0X2NhY2hlX3N5bmMKKwl9LAorI2lmZGVmIENPTkZJR19TTkRfU09DX0NBQ0hFX0xaTworCXsKKwkJLmlkID0gU05EX1NPQ19MWk9fQ09NUFJFU1NJT04sCisJCS5uYW1lID0gIkxaTyIsCisJCS5pbml0ID0gc25kX3NvY19sem9fY2FjaGVfaW5pdCwKKwkJLmV4aXQgPSBzbmRfc29jX2x6b19jYWNoZV9leGl0LAorCQkucmVhZCA9IHNuZF9zb2NfbHpvX2NhY2hlX3JlYWQsCisJCS53cml0ZSA9IHNuZF9zb2NfbHpvX2NhY2hlX3dyaXRlLAorCQkuc3luYyA9IHNuZF9zb2NfbHpvX2NhY2hlX3N5bmMKKwl9LAorI2VuZGlmCisJeworCQkuaWQgPSBTTkRfU09DX1JCVFJFRV9DT01QUkVTU0lPTiwKKwkJLm5hbWUgPSAicmJ0cmVlIiwKKwkJLmluaXQgPSBzbmRfc29jX3JidHJlZV9jYWNoZV9pbml0LAorCQkuZXhpdCA9IHNuZF9zb2NfcmJ0cmVlX2NhY2hlX2V4aXQsCisJCS5yZWFkID0gc25kX3NvY19yYnRyZWVfY2FjaGVfcmVhZCwKKwkJLndyaXRlID0gc25kX3NvY19yYnRyZWVfY2FjaGVfd3JpdGUsCisJCS5zeW5jID0gc25kX3NvY19yYnRyZWVfY2FjaGVfc3luYworCX0KK307CisKK2ludCBzbmRfc29jX2NhY2hlX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2FjaGVfdHlwZXMpOyArK2kpCisJCWlmIChjYWNoZV90eXBlc1tpXS5pZCA9PSBjb2RlYy0+Y29tcHJlc3NfdHlwZSkKKwkJCWJyZWFrOworCisJLyogRmFsbCBiYWNrIHRvIGZsYXQgY29tcHJlc3Npb24gKi8KKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGNhY2hlX3R5cGVzKSkgeworCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiQ291bGQgbm90IG1hdGNoIGNvbXByZXNzIHR5cGU6ICVkXG4iLAorCQkJIGNvZGVjLT5jb21wcmVzc190eXBlKTsKKwkJaSA9IDA7CisJfQorCisJbXV0ZXhfaW5pdCgmY29kZWMtPmNhY2hlX3J3X211dGV4KTsKKwljb2RlYy0+Y2FjaGVfb3BzID0gJmNhY2hlX3R5cGVzW2ldOworCisJaWYgKGNvZGVjLT5jYWNoZV9vcHMtPmluaXQpIHsKKwkJaWYgKGNvZGVjLT5jYWNoZV9vcHMtPm5hbWUpCisJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJJbml0aWFsaXppbmcgJXMgY2FjaGUgZm9yICVzIGNvZGVjXG4iLAorCQkJCWNvZGVjLT5jYWNoZV9vcHMtPm5hbWUsIGNvZGVjLT5uYW1lKTsKKwkJcmV0dXJuIGNvZGVjLT5jYWNoZV9vcHMtPmluaXQoY29kZWMpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIE5PVEU6IGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgY2FsbGVkCisgKiBtdWx0aXBsZSB0aW1lcy4KKyAqLworaW50IHNuZF9zb2NfY2FjaGVfZXhpdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaWYgKGNvZGVjLT5jYWNoZV9vcHMgJiYgY29kZWMtPmNhY2hlX29wcy0+ZXhpdCkgeworCQlpZiAoY29kZWMtPmNhY2hlX29wcy0+bmFtZSkKKwkJCWRldl9kYmcoY29kZWMtPmRldiwgIkRlc3Ryb3lpbmcgJXMgY2FjaGUgZm9yICVzIGNvZGVjXG4iLAorCQkJCWNvZGVjLT5jYWNoZV9vcHMtPm5hbWUsIGNvZGVjLT5uYW1lKTsKKwkJcmV0dXJuIGNvZGVjLT5jYWNoZV9vcHMtPmV4aXQoY29kZWMpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiBzbmRfc29jX2NhY2hlX3JlYWQ6IEZldGNoIHRoZSB2YWx1ZSBvZiBhIGdpdmVuIHJlZ2lzdGVyIGZyb20gdGhlIGNhY2hlLgorICoKKyAqIEBjb2RlYzogQ09ERUMgdG8gY29uZmlndXJlLgorICogQHJlZzogVGhlIHJlZ2lzdGVyIGluZGV4LgorICogQHZhbHVlOiBUaGUgdmFsdWUgdG8gYmUgcmV0dXJuZWQuCisgKi8KK2ludCBzbmRfc29jX2NhY2hlX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkgICAgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50ICp2YWx1ZSkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY29kZWMtPmNhY2hlX3J3X211dGV4KTsKKworCWlmICh2YWx1ZSAmJiBjb2RlYy0+Y2FjaGVfb3BzICYmIGNvZGVjLT5jYWNoZV9vcHMtPnJlYWQpIHsKKwkJcmV0ID0gY29kZWMtPmNhY2hlX29wcy0+cmVhZChjb2RlYywgcmVnLCB2YWx1ZSk7CisJCW11dGV4X3VubG9jaygmY29kZWMtPmNhY2hlX3J3X211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltdXRleF91bmxvY2soJmNvZGVjLT5jYWNoZV9yd19tdXRleCk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2NhY2hlX3JlYWQpOworCisvKioKKyAqIHNuZF9zb2NfY2FjaGVfd3JpdGU6IFNldCB0aGUgdmFsdWUgb2YgYSBnaXZlbiByZWdpc3RlciBpbiB0aGUgY2FjaGUuCisgKgorICogQGNvZGVjOiBDT0RFQyB0byBjb25maWd1cmUuCisgKiBAcmVnOiBUaGUgcmVnaXN0ZXIgaW5kZXguCisgKiBAdmFsdWU6IFRoZSBuZXcgcmVnaXN0ZXIgdmFsdWUuCisgKi8KK2ludCBzbmRfc29jX2NhY2hlX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCXVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY29kZWMtPmNhY2hlX3J3X211dGV4KTsKKworCWlmIChjb2RlYy0+Y2FjaGVfb3BzICYmIGNvZGVjLT5jYWNoZV9vcHMtPndyaXRlKSB7CisJCXJldCA9IGNvZGVjLT5jYWNoZV9vcHMtPndyaXRlKGNvZGVjLCByZWcsIHZhbHVlKTsKKwkJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+Y2FjaGVfcndfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKworCW11dGV4X3VubG9jaygmY29kZWMtPmNhY2hlX3J3X211dGV4KTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfY2FjaGVfd3JpdGUpOworCisvKioKKyAqIHNuZF9zb2NfY2FjaGVfc3luYzogU3luYyB0aGUgcmVnaXN0ZXIgY2FjaGUgd2l0aCB0aGUgaGFyZHdhcmUuCisgKgorICogQGNvZGVjOiBDT0RFQyB0byBjb25maWd1cmUuCisgKgorICogQW55IHJlZ2lzdGVycyB0aGF0IHNob3VsZCBub3QgYmUgc3luY2VkIHNob3VsZCBiZSBtYXJrZWQgYXMKKyAqIHZvbGF0aWxlLiAgSW4gZ2VuZXJhbCBkcml2ZXJzIGNhbiBjaG9vc2Ugbm90IHRvIHVzZSB0aGUgcHJvdmlkZWQKKyAqIHN5bmNpbmcgZnVuY3Rpb25hbGl0eSBpZiB0aGV5IHNvIHJlcXVpcmUuCisgKi8KK2ludCBzbmRfc29jX2NhY2hlX3N5bmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCByZXQ7CisKKwlpZiAoIWNvZGVjLT5jYWNoZV9zeW5jKSB7CisJCXJldHVybiAwOworCX0KKworCWlmIChjb2RlYy0+Y2FjaGVfb3BzICYmIGNvZGVjLT5jYWNoZV9vcHMtPnN5bmMpIHsKKwkJaWYgKGNvZGVjLT5jYWNoZV9vcHMtPm5hbWUpCisJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJTeW5jaW5nICVzIGNhY2hlIGZvciAlcyBjb2RlY1xuIiwKKwkJCQljb2RlYy0+Y2FjaGVfb3BzLT5uYW1lLCBjb2RlYy0+bmFtZSk7CisJCXJldCA9IGNvZGVjLT5jYWNoZV9vcHMtPnN5bmMoY29kZWMpOworCQlpZiAoIXJldCkKKwkJCWNvZGVjLT5jYWNoZV9zeW5jID0gMDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfY2FjaGVfc3luYyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IDg1YjdkNTQuLmJhYzcyOTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC0zMywxMiArMzMsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCisjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvYXNvYy5oPgorCiAjZGVmaW5lIE5BTUVfU0laRQkzMgogCiBzdGF0aWMgREVGSU5FX01VVEVYKHBjbV9tdXRleCk7CkBAIC02NywyNSArNzAsNiBAQAogbW9kdWxlX3BhcmFtKHBtZG93bl90aW1lLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwbWRvd25fdGltZSwgIkRBUE0gc3RyZWFtIHBvd2VyZG93biB0aW1lIChtc2VjcykiKTsKIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gZm9yY2VzIGFueSBkZWxheWVkIHdvcmsgdG8gYmUgcXVldWVkIGFuZCBydW4uCi0gKi8KLXN0YXRpYyBpbnQgcnVuX2RlbGF5ZWRfd29yayhzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yaykKLXsKLQlpbnQgcmV0OwotCi0JLyogY2FuY2VsIGFueSB3b3JrIHdhaXRpbmcgdG8gYmUgcXVldWVkLiAqLwotCXJldCA9IGNhbmNlbF9kZWxheWVkX3dvcmsoZHdvcmspOwotCi0JLyogaWYgdGhlcmUgd2FzIGFueSB3b3JrIHdhaXRpbmcgdGhlbiB3ZSBydW4gaXQgbm93IGFuZAotCSAqIHdhaXQgZm9yIGl0J3MgY29tcGxldGlvbiAqLwotCWlmIChyZXQpIHsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKGR3b3JrLCAwKTsKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQogLyogY29kZWMgcmVnaXN0ZXIgZHVtcCAqLwogc3RhdGljIHNzaXplX3Qgc29jX2NvZGVjX3JlZ19zaG93KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqYnVmKQogewpAQCAtMTE0LDcgKzk4LDcgQEAKIAkJCSAqIHRoZSByZWdpc3RlciBiZWluZyB2b2xhdGlsZSBhbmQgdGhlIGRldmljZSBiZWluZwogCQkJICogcG93ZXJlZCBvZmYuCiAJCQkgKi8KLQkJCXJldCA9IGNvZGVjLT5kcml2ZXItPnJlYWQoY29kZWMsIGkpOworCQkJcmV0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBpKTsKIAkJCWlmIChyZXQgPj0gMCkKIAkJCQljb3VudCArPSBzbnByaW50ZihidWYgKyBjb3VudCwKIAkJCQkJCSAgUEFHRV9TSVpFIC0gY291bnQsCkBAIC0yMjUsNyArMjA5LDcgQEAKIAkJc3RhcnQrKzsKIAlpZiAoc3RyaWN0X3N0cnRvdWwoc3RhcnQsIDE2LCAmdmFsdWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQljb2RlYy0+ZHJpdmVyLT53cml0ZShjb2RlYywgcmVnLCB2YWx1ZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgcmVnLCB2YWx1ZSk7CiAJcmV0dXJuIGJ1Zl9zaXplOwogfQogCkBAIC0yMzgsOCArMjIyLDEwIEBACiAKIHN0YXRpYyB2b2lkIHNvY19pbml0X2NvZGVjX2RlYnVnZnMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWNvZGVjLT5kZWJ1Z2ZzX2NvZGVjX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoY29kZWMtPm5hbWUgLAotCQkJCQkJICAgICAgIGRlYnVnZnNfcm9vdCk7CisJc3RydWN0IGRlbnRyeSAqZGVidWdmc19jYXJkX3Jvb3QgPSBjb2RlYy0+Y2FyZC0+ZGVidWdmc19jYXJkX3Jvb3Q7CisKKwljb2RlYy0+ZGVidWdmc19jb2RlY19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKGNvZGVjLT5uYW1lLAorCQkJCQkJICAgICAgIGRlYnVnZnNfY2FyZF9yb290KTsKIAlpZiAoIWNvZGVjLT5kZWJ1Z2ZzX2NvZGVjX3Jvb3QpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIkFTb0M6IEZhaWxlZCB0byBjcmVhdGUgY29kZWMgZGVidWdmcyBkaXJlY3RvcnlcbiIpOwpAQCAtMjUzLDIwICsyMzksMTMgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIkFTb0M6IEZhaWxlZCB0byBjcmVhdGUgY29kZWMgcmVnaXN0ZXIgZGVidWdmcyBmaWxlXG4iKTsKIAotCWNvZGVjLT5kZWJ1Z2ZzX3BvcF90aW1lID0gZGVidWdmc19jcmVhdGVfdTMyKCJkYXBtX3BvcF90aW1lIiwgMDY0NCwKLQkJCQkJCSAgICAgY29kZWMtPmRlYnVnZnNfY29kZWNfcm9vdCwKLQkJCQkJCSAgICAgJmNvZGVjLT5wb3BfdGltZSk7Ci0JaWYgKCFjb2RlYy0+ZGVidWdmc19wb3BfdGltZSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgcG9wIHRpbWUgZGVidWdmcyBmaWxlXG4iKTsKLQotCWNvZGVjLT5kZWJ1Z2ZzX2RhcG0gPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImRhcG0iLAorCWNvZGVjLT5kYXBtLmRlYnVnZnNfZGFwbSA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZGFwbSIsCiAJCQkJCQkgY29kZWMtPmRlYnVnZnNfY29kZWNfcm9vdCk7Ci0JaWYgKCFjb2RlYy0+ZGVidWdmc19kYXBtKQorCWlmICghY29kZWMtPmRhcG0uZGVidWdmc19kYXBtKQogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBEQVBNIGRlYnVnZnMgZGlyZWN0b3J5XG4iKTsKIAotCXNuZF9zb2NfZGFwbV9kZWJ1Z2ZzX2luaXQoY29kZWMpOworCXNuZF9zb2NfZGFwbV9kZWJ1Z2ZzX2luaXQoJmNvZGVjLT5kYXBtKTsKIH0KIAogc3RhdGljIHZvaWQgc29jX2NsZWFudXBfY29kZWNfZGVidWdmcyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCkBAIC0zNzQsNiArMzUzLDI5IEBACiAJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLC8qIHJlYWQgYWNjZXNzZXMgZl9wb3MgKi8KIH07CiAKK3N0YXRpYyB2b2lkIHNvY19pbml0X2NhcmRfZGVidWdmcyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQoreworCWNhcmQtPmRlYnVnZnNfY2FyZF9yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKGNhcmQtPm5hbWUsCisJCQkJCQkgICAgIGRlYnVnZnNfcm9vdCk7CisJaWYgKCFjYXJkLT5kZWJ1Z2ZzX2NhcmRfcm9vdCkgeworCQlkZXZfd2FybihjYXJkLT5kZXYsCisJCQkgIkFTb0M6IEZhaWxlZCB0byBjcmVhdGUgY29kZWMgZGVidWdmcyBkaXJlY3RvcnlcbiIpOworCQlyZXR1cm47CisJfQorCisJY2FyZC0+ZGVidWdmc19wb3BfdGltZSA9IGRlYnVnZnNfY3JlYXRlX3UzMigiZGFwbV9wb3BfdGltZSIsIDA2NDQsCisJCQkJCQkgICAgY2FyZC0+ZGVidWdmc19jYXJkX3Jvb3QsCisJCQkJCQkgICAgJmNhcmQtPnBvcF90aW1lKTsKKwlpZiAoIWNhcmQtPmRlYnVnZnNfcG9wX3RpbWUpCisJCWRldl93YXJuKGNhcmQtPmRldiwKKwkJICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIHBvcCB0aW1lIGRlYnVnZnMgZmlsZVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHNvY19jbGVhbnVwX2NhcmRfZGVidWdmcyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQoreworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShjYXJkLT5kZWJ1Z2ZzX2NhcmRfcm9vdCk7Cit9CisKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzb2NfaW5pdF9jb2RlY19kZWJ1Z2ZzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKQEAgLTM4Myw2ICszODUsMTQgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzb2NfY2xlYW51cF9jb2RlY19kZWJ1Z2ZzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIH0KKworc3RhdGljIGlubGluZSB2b2lkIHNvY19pbml0X2NhcmRfZGVidWdmcyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc29jX2NsZWFudXBfY2FyZF9kZWJ1Z2ZzKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCit7Cit9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TTkRfU09DX0FDOTdfQlVTCkBAIC00OTcsNyArNTA3LDcgQEAKIAkJfQogCX0KIAotCS8qIENoZWNrIHRoYXQgdGhlIGNvZGVjIGFuZCBjcHUgREFJJ3MgYXJlIGNvbXBhdGlibGUgKi8KKwkvKiBDaGVjayB0aGF0IHRoZSBjb2RlYyBhbmQgY3B1IERBSXMgYXJlIGNvbXBhdGlibGUgKi8KIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewogCQlydW50aW1lLT5ody5yYXRlX21pbiA9CiAJCQltYXgoY29kZWNfZGFpX2Rydi0+cGxheWJhY2sucmF0ZV9taW4sCkBAIC04NDYsNyArODU2LDcgQEAKIH0KIAogLyoKLSAqIEZyZWUncyByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IGh3X3BhcmFtcywgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcworICogRnJlZXMgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSBod19wYXJhbXMsIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMKICAqLwogc3RhdGljIGludCBzb2NfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CkBAIC04NzAsNyArODgwLDcgQEAKIAlpZiAocGxhdGZvcm0tPmRyaXZlci0+b3BzLT5od19mcmVlKQogCQlwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPmh3X2ZyZWUoc3Vic3RyZWFtKTsKIAotCS8qIG5vdyBmcmVlIGh3IHBhcmFtcyBmb3IgdGhlIERBSSdzICAqLworCS8qIG5vdyBmcmVlIGh3IHBhcmFtcyBmb3IgdGhlIERBSXMgICovCiAJaWYgKGNvZGVjX2RhaS0+ZHJpdmVyLT5vcHMtPmh3X2ZyZWUpCiAJCWNvZGVjX2RhaS0+ZHJpdmVyLT5vcHMtPmh3X2ZyZWUoc3Vic3RyZWFtLCBjb2RlY19kYWkpOwogCkBAIC05NTgsNiArOTY4LDcgQEAKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlpbnQgaTsKIAogCS8qIElmIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIHNvYyBkZXZpY2UgZmFpbGVkLCB0aGVyZSBpcyBubyBjb2RlYwpAQCAtOTc2LDcgKzk4Nyw3IEBACiAJLyogd2UncmUgZ29pbmcgdG8gYmxvY2sgdXNlcnNwYWNlIHRvdWNoaW5nIHVzIHVudGlsIHJlc3VtZSBjb21wbGV0ZXMgKi8KIAlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQtPnNuZF9jYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwogCi0JLyogbXV0ZSBhbnkgYWN0aXZlIERBQydzICovCisJLyogbXV0ZSBhbnkgYWN0aXZlIERBQ3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX3J0ZDsgaSsrKSB7CiAJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gY2FyZC0+cnRkW2ldLmNvZGVjX2RhaTsKIAkJc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciAqZHJ2ID0gZGFpLT5kcml2ZXI7CkBAIC0xMDE2LDggKzEwMjcsOCBAQAogCiAJLyogY2xvc2UgYW55IHdhaXRpbmcgc3RyZWFtcyBhbmQgc2F2ZSBzdGF0ZSAqLwogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspIHsKLQkJcnVuX2RlbGF5ZWRfd29yaygmY2FyZC0+cnRkW2ldLmRlbGF5ZWRfd29yayk7Ci0JCWNhcmQtPnJ0ZFtpXS5jb2RlYy0+c3VzcGVuZF9iaWFzX2xldmVsID0gY2FyZC0+cnRkW2ldLmNvZGVjLT5iaWFzX2xldmVsOworCQlmbHVzaF9kZWxheWVkX3dvcmtfc3luYygmY2FyZC0+cnRkW2ldLmRlbGF5ZWRfd29yayk7CisJCWNhcmQtPnJ0ZFtpXS5jb2RlYy0+ZGFwbS5zdXNwZW5kX2JpYXNfbGV2ZWwgPSBjYXJkLT5ydGRbaV0uY29kZWMtPmRhcG0uYmlhc19sZXZlbDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX3J0ZDsgaSsrKSB7CkBAIC0xMDM2LDEyICsxMDQ3LDExIEBACiAJfQogCiAJLyogc3VzcGVuZCBhbGwgQ09ERUNzICovCi0JZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9ydGQ7IGkrKykgewotCQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5ydGRbaV0uY29kZWM7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb2RlYywgJmNhcmQtPmNvZGVjX2Rldl9saXN0LCBjYXJkX2xpc3QpIHsKIAkJLyogSWYgdGhlcmUgYXJlIHBhdGhzIGFjdGl2ZSB0aGVuIHRoZSBDT0RFQyB3aWxsIGJlIGhlbGQgd2l0aAogCQkgKiBiaWFzIF9PTiBhbmQgc2hvdWxkIG5vdCBiZSBzdXNwZW5kZWQuICovCiAJCWlmICghY29kZWMtPnN1c3BlbmRlZCAmJiBjb2RlYy0+ZHJpdmVyLT5zdXNwZW5kKSB7Ci0JCQlzd2l0Y2ggKGNvZGVjLT5iaWFzX2xldmVsKSB7CisJCQlzd2l0Y2ggKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwpIHsKIAkJCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCQljYXNlIFNORF9TT0NfQklBU19PRkY6CiAJCQkJY29kZWMtPmRyaXZlci0+c3VzcGVuZChjb2RlYywgUE1TR19TVVNQRU5EKTsKQEAgLTEwNzgsNiArMTA4OCw3IEBACiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9CiAJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHNuZF9zb2NfY2FyZCwgZGVmZXJyZWRfcmVzdW1lX3dvcmspOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoY2FyZC0+ZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJaW50IGk7CiAKIAkvKiBvdXIgcG93ZXIgc3RhdGUgaXMgc3RpbGwgU05EUlZfQ1RMX1BPV0VSX0QzaG90IGZyb20gc3VzcGVuZCB0aW1lLApAQCAtMTEwMywxNCArMTExNCwxMyBAQAogCQkJY3B1X2RhaS0+ZHJpdmVyLT5yZXN1bWUoY3B1X2RhaSk7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9ydGQ7IGkrKykgewotCQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5ydGRbaV0uY29kZWM7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb2RlYywgJmNhcmQtPmNvZGVjX2Rldl9saXN0LCBjYXJkX2xpc3QpIHsKIAkJLyogSWYgdGhlIENPREVDIHdhcyBpZGxlIG92ZXIgc3VzcGVuZCB0aGVuIGl0IHdpbGwgaGF2ZSBiZWVuCiAJCSAqIGxlZnQgd2l0aCBiaWFzIE9GRiBvciBTVEFOREJZIGFuZCBzdXNwZW5kZWQgc28gd2UgbXVzdCBub3cKIAkJICogcmVzdW1lLiAgT3RoZXJ3aXNlIHRoZSBzdXNwZW5kIHdhcyBzdXBwcmVzc2VkLgogCQkgKi8KIAkJaWYgKGNvZGVjLT5kcml2ZXItPnJlc3VtZSAmJiBjb2RlYy0+c3VzcGVuZGVkKSB7Ci0JCQlzd2l0Y2ggKGNvZGVjLT5iaWFzX2xldmVsKSB7CisJCQlzd2l0Y2ggKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwpIHsKIAkJCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCQljYXNlIFNORF9TT0NfQklBU19PRkY6CiAJCQkJY29kZWMtPmRyaXZlci0+cmVzdW1lKGNvZGVjKTsKQEAgLTEyNDksOSArMTI1OSw2IEBACiAJCWlmICghc3RyY21wKGNvZGVjLT5uYW1lLCBkYWlfbGluay0+Y29kZWNfbmFtZSkpIHsKIAkJCXJ0ZC0+Y29kZWMgPSBjb2RlYzsKIAotCQkJaWYgKCF0cnlfbW9kdWxlX2dldChjb2RlYy0+ZGV2LT5kcml2ZXItPm93bmVyKSkKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQogCQkJLyogQ09ERUMgZm91bmQsIHNvIGZpbmQgQ09ERUMgREFJIGZyb20gcmVnaXN0ZXJlZCBEQUlzIGZyb20gdGhpcyBDT0RFQyovCiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvZGVjX2RhaSwgJmRhaV9saXN0LCBsaXN0KSB7CiAJCQkJaWYgKGNvZGVjLT5kZXYgPT0gY29kZWNfZGFpLT5kZXYgJiYKQEAgLTEyNzcsMTAgKzEyODQsNiBAQAogCS8qIG5vLCB0aGVuIGZpbmQgQ1BVIERBSSBmcm9tIHJlZ2lzdGVyZWQgREFJcyovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwbGF0Zm9ybSwgJnBsYXRmb3JtX2xpc3QsIGxpc3QpIHsKIAkJaWYgKCFzdHJjbXAocGxhdGZvcm0tPm5hbWUsIGRhaV9saW5rLT5wbGF0Zm9ybV9uYW1lKSkgewotCi0JCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHBsYXRmb3JtLT5kZXYtPmRyaXZlci0+b3duZXIpKQotCQkJCXJldHVybiAtRU5PREVWOwotCiAJCQlydGQtPnBsYXRmb3JtID0gcGxhdGZvcm07CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTI5OSw2ICsxMzAyLDI3IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkIHNvY19yZW1vdmVfY29kZWMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCBlcnI7CisKKwlpZiAoY29kZWMtPmRyaXZlci0+cmVtb3ZlKSB7CisJCWVyciA9IGNvZGVjLT5kcml2ZXItPnJlbW92ZShjb2RlYyk7CisJCWlmIChlcnIgPCAwKQorCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCSJhc29jOiBmYWlsZWQgdG8gcmVtb3ZlICVzOiAlZFxuIiwKKwkJCQljb2RlYy0+bmFtZSwgZXJyKTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgYWxsIERBUE0gd2lkZ2V0cyBhcmUgZnJlZWQgKi8KKwlzbmRfc29jX2RhcG1fZnJlZSgmY29kZWMtPmRhcG0pOworCisJc29jX2NsZWFudXBfY29kZWNfZGVidWdmcyhjb2RlYyk7CisJY29kZWMtPnByb2JlZCA9IDA7CisJbGlzdF9kZWwoJmNvZGVjLT5jYXJkX2xpc3QpOworCW1vZHVsZV9wdXQoY29kZWMtPmRldi0+ZHJpdmVyLT5vd25lcik7Cit9CisKIHN0YXRpYyB2b2lkIHNvY19yZW1vdmVfZGFpX2xpbmsoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCwgaW50IG51bSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gJmNhcmQtPnJ0ZFtudW1dOwpAQCAtMTMxMCw2ICsxMzM0LDcgQEAKIAkvKiB1bnJlZ2lzdGVyIHRoZSBydGQgZGV2aWNlICovCiAJaWYgKHJ0ZC0+ZGV2X3JlZ2lzdGVyZWQpIHsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZydGQtPmRldiwgJmRldl9hdHRyX3BtZG93bl90aW1lKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZydGQtPmRldiwgJmRldl9hdHRyX2NvZGVjX3JlZyk7CiAJCWRldmljZV91bnJlZ2lzdGVyKCZydGQtPmRldik7CiAJCXJ0ZC0+ZGV2X3JlZ2lzdGVyZWQgPSAwOwogCX0KQEAgLTEzMzgsMjIgKzEzNjMsOCBAQAogCX0KIAogCS8qIHJlbW92ZSB0aGUgQ09ERUMgKi8KLQlpZiAoY29kZWMgJiYgY29kZWMtPnByb2JlZCkgewotCQlpZiAoY29kZWMtPmRyaXZlci0+cmVtb3ZlKSB7Ci0JCQllcnIgPSBjb2RlYy0+ZHJpdmVyLT5yZW1vdmUoY29kZWMpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBmYWlsZWQgdG8gcmVtb3ZlICVzXG4iLCBjb2RlYy0+bmFtZSk7Ci0JCX0KLQotCQkvKiBNYWtlIHN1cmUgYWxsIERBUE0gd2lkZ2V0cyBhcmUgZnJlZWQgKi8KLQkJc25kX3NvY19kYXBtX2ZyZWUoY29kZWMpOwotCi0JCXNvY19jbGVhbnVwX2NvZGVjX2RlYnVnZnMoY29kZWMpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnJ0ZC0+ZGV2LCAmZGV2X2F0dHJfY29kZWNfcmVnKTsKLQkJY29kZWMtPnByb2JlZCA9IDA7Ci0JCWxpc3RfZGVsKCZjb2RlYy0+Y2FyZF9saXN0KTsKLQkJbW9kdWxlX3B1dChjb2RlYy0+ZGV2LT5kcml2ZXItPm93bmVyKTsKLQl9CisJaWYgKGNvZGVjICYmIGNvZGVjLT5wcm9iZWQpCisJCXNvY19yZW1vdmVfY29kZWMoY29kZWMpOwogCiAJLyogcmVtb3ZlIHRoZSBjcHVfZGFpICovCiAJaWYgKGNwdV9kYWkgJiYgY3B1X2RhaS0+cHJvYmVkKSB7CkBAIC0xMzY4LDggKzEzNzksMTI2IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBzb2Nfc2V0X25hbWVfcHJlZml4KHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsCisJCQkJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCBpOworCisJaWYgKGNhcmQtPmNvZGVjX2NvbmYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9jb25maWdzOyBpKyspIHsKKwkJc3RydWN0IHNuZF9zb2NfY29kZWNfY29uZiAqbWFwID0gJmNhcmQtPmNvZGVjX2NvbmZbaV07CisJCWlmIChtYXAtPmRldl9uYW1lICYmICFzdHJjbXAoY29kZWMtPm5hbWUsIG1hcC0+ZGV2X25hbWUpKSB7CisJCQljb2RlYy0+bmFtZV9wcmVmaXggPSBtYXAtPm5hbWVfcHJlZml4OworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgc29jX3Byb2JlX2NvZGVjKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsCisJCQkgICBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IHJldCA9IDA7CisKKwljb2RlYy0+Y2FyZCA9IGNhcmQ7CisJY29kZWMtPmRhcG0uY2FyZCA9IGNhcmQ7CisJc29jX3NldF9uYW1lX3ByZWZpeChjYXJkLCBjb2RlYyk7CisKKwlpZiAoY29kZWMtPmRyaXZlci0+cHJvYmUpIHsKKwkJcmV0ID0gY29kZWMtPmRyaXZlci0+cHJvYmUoY29kZWMpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCSJhc29jOiBmYWlsZWQgdG8gcHJvYmUgQ09ERUMgJXM6ICVkXG4iLAorCQkJCWNvZGVjLT5uYW1lLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXNvY19pbml0X2NvZGVjX2RlYnVnZnMoY29kZWMpOworCisJLyogbWFyayBjb2RlYyBhcyBwcm9iZWQgYW5kIGFkZCB0byBjYXJkIGNvZGVjIGxpc3QgKi8KKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNvZGVjLT5kZXYtPmRyaXZlci0+b3duZXIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNvZGVjLT5wcm9iZWQgPSAxOworCWxpc3RfYWRkKCZjb2RlYy0+Y2FyZF9saXN0LCAmY2FyZC0+Y29kZWNfZGV2X2xpc3QpOworCWxpc3RfYWRkKCZjb2RlYy0+ZGFwbS5saXN0LCAmY2FyZC0+ZGFwbV9saXN0KTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyB2b2lkIHJ0ZF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikge30KIAorc3RhdGljIGludCBzb2NfcG9zdF9jb21wb25lbnRfaW5pdChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAorCQkJCSAgIHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICBpbnQgbnVtLCBpbnQgZGFpbGVzcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqZGFpX2xpbmsgPSBOVUxMOworCXN0cnVjdCBzbmRfc29jX2F1eF9kZXYgKmF1eF9kZXYgPSBOVUxMOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7CisJY29uc3QgY2hhciAqdGVtcCwgKm5hbWU7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWRhaWxlc3MpIHsKKwkJZGFpX2xpbmsgPSAmY2FyZC0+ZGFpX2xpbmtbbnVtXTsKKwkJcnRkID0gJmNhcmQtPnJ0ZFtudW1dOworCQluYW1lID0gZGFpX2xpbmstPm5hbWU7CisJfSBlbHNlIHsKKwkJYXV4X2RldiA9ICZjYXJkLT5hdXhfZGV2W251bV07CisJCXJ0ZCA9ICZjYXJkLT5ydGRfYXV4W251bV07CisJCW5hbWUgPSBhdXhfZGV2LT5uYW1lOworCX0KKworCS8qIG1hY2hpbmUgY29udHJvbHMsIHJvdXRlcyBhbmQgd2lkZ2V0cyBhcmUgbm90IHByZWZpeGVkICovCisJdGVtcCA9IGNvZGVjLT5uYW1lX3ByZWZpeDsKKwljb2RlYy0+bmFtZV9wcmVmaXggPSBOVUxMOworCisJLyogZG8gbWFjaGluZSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiAqLworCWlmICghZGFpbGVzcyAmJiBkYWlfbGluay0+aW5pdCkKKwkJcmV0ID0gZGFpX2xpbmstPmluaXQocnRkKTsKKwllbHNlIGlmIChkYWlsZXNzICYmIGF1eF9kZXYtPmluaXQpCisJCXJldCA9IGF1eF9kZXYtPmluaXQoJmNvZGVjLT5kYXBtKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNhcmQtPmRldiwgImFzb2M6IGZhaWxlZCB0byBpbml0ICVzOiAlZFxuIiwgbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJY29kZWMtPm5hbWVfcHJlZml4ID0gdGVtcDsKKworCS8qIE1ha2Ugc3VyZSBhbGwgREFQTSB3aWRnZXRzIGFyZSBpbnN0YW50aWF0ZWQgKi8KKwlzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoJmNvZGVjLT5kYXBtKTsKKwlzbmRfc29jX2RhcG1fc3luYygmY29kZWMtPmRhcG0pOworCisJLyogcmVnaXN0ZXIgdGhlIHJ0ZCBkZXZpY2UgKi8KKwlydGQtPmNvZGVjID0gY29kZWM7CisJcnRkLT5jYXJkID0gY2FyZDsKKwlydGQtPmRldi5wYXJlbnQgPSBjYXJkLT5kZXY7CisJcnRkLT5kZXYucmVsZWFzZSA9IHJ0ZF9yZWxlYXNlOworCXJ0ZC0+ZGV2LmluaXRfbmFtZSA9IG5hbWU7CisJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZydGQtPmRldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihjYXJkLT5kZXYsCisJCQkiYXNvYzogZmFpbGVkIHRvIHJlZ2lzdGVyIHJ1bnRpbWUgZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcnRkLT5kZXZfcmVnaXN0ZXJlZCA9IDE7CisKKwkvKiBhZGQgREFQTSBzeXNmcyBlbnRyaWVzIGZvciB0aGlzIGNvZGVjICovCisJcmV0ID0gc25kX3NvY19kYXBtX3N5c19hZGQoJnJ0ZC0+ZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJImFzb2M6IGZhaWxlZCB0byBhZGQgY29kZWMgZGFwbSBzeXNmcyBlbnRyaWVzOiAlZFxuIiwKKwkJCXJldCk7CisKKwkvKiBhZGQgY29kZWMgc3lzZnMgZW50cmllcyAqLworCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmcnRkLT5kZXYsICZkZXZfYXR0cl9jb2RlY19yZWcpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkiYXNvYzogZmFpbGVkIHRvIGFkZCBjb2RlYyBzeXNmcyBmaWxlczogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzb2NfcHJvYmVfZGFpX2xpbmsoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCwgaW50IG51bSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqZGFpX2xpbmsgPSAmY2FyZC0+ZGFpX2xpbmtbbnVtXTsKQEAgLTEzODMsMTAgKzE1MTIsNyBAQAogCiAJLyogY29uZmlnIGNvbXBvbmVudHMgKi8KIAljb2RlY19kYWktPmNvZGVjID0gY29kZWM7Ci0JY29kZWMtPmNhcmQgPSBjYXJkOwogCWNwdV9kYWktPnBsYXRmb3JtID0gcGxhdGZvcm07Ci0JcnRkLT5jYXJkID0gY2FyZDsKLQlydGQtPmRldi5wYXJlbnQgPSBjYXJkLT5kZXY7CiAJY29kZWNfZGFpLT5jYXJkID0gY2FyZDsKIAljcHVfZGFpLT5jYXJkID0gY2FyZDsKIApAQCAtMTQxMCwyMCArMTUzNiw5IEBACiAKIAkvKiBwcm9iZSB0aGUgQ09ERUMgKi8KIAlpZiAoIWNvZGVjLT5wcm9iZWQpIHsKLQkJaWYgKGNvZGVjLT5kcml2ZXItPnByb2JlKSB7Ci0JCQlyZXQgPSBjb2RlYy0+ZHJpdmVyLT5wcm9iZShjb2RlYyk7Ci0JCQlpZiAocmV0IDwgMCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogZmFpbGVkIHRvIHByb2JlIENPREVDICVzXG4iLAotCQkJCQkJY29kZWMtPm5hbWUpOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCX0KLQotCQlzb2NfaW5pdF9jb2RlY19kZWJ1Z2ZzKGNvZGVjKTsKLQotCQkvKiBtYXJrIGNvZGVjIGFzIHByb2JlZCBhbmQgYWRkIHRvIGNhcmQgY29kZWMgbGlzdCAqLwotCQljb2RlYy0+cHJvYmVkID0gMTsKLQkJbGlzdF9hZGQoJmNvZGVjLT5jYXJkX2xpc3QsICZjYXJkLT5jb2RlY19kZXZfbGlzdCk7CisJCXJldCA9IHNvY19wcm9iZV9jb2RlYyhjYXJkLCBjb2RlYyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKIAl9CiAKIAkvKiBwcm9iZSB0aGUgcGxhdGZvcm0gKi8KQEAgLTE0MzcsNiArMTU1MiwxMCBAQAogCQkJfQogCQl9CiAJCS8qIG1hcmsgcGxhdGZvcm0gYXMgcHJvYmVkIGFuZCBhZGQgdG8gY2FyZCBwbGF0Zm9ybSBsaXN0ICovCisKKwkJaWYgKCF0cnlfbW9kdWxlX2dldChwbGF0Zm9ybS0+ZGV2LT5kcml2ZXItPm93bmVyKSkKKwkJCXJldHVybiAtRU5PREVWOworCiAJCXBsYXRmb3JtLT5wcm9iZWQgPSAxOwogCQlsaXN0X2FkZCgmcGxhdGZvcm0tPmNhcmRfbGlzdCwgJmNhcmQtPnBsYXRmb3JtX2Rldl9saXN0KTsKIAl9CkBAIC0xNDYwLDQzICsxNTc5LDE0IEBACiAJLyogREFQTSBkYWkgbGluayBzdHJlYW0gd29yayAqLwogCUlOSVRfREVMQVlFRF9XT1JLKCZydGQtPmRlbGF5ZWRfd29yaywgY2xvc2VfZGVsYXllZF93b3JrKTsKIAotCS8qIG5vdyB0aGF0IGFsbCBjbGllbnRzIGhhdmUgcHJvYmVkLCBpbml0aWFsaXNlIHRoZSBEQUkgbGluayAqLwotCWlmIChkYWlfbGluay0+aW5pdCkgewotCQlyZXQgPSBkYWlfbGluay0+aW5pdChydGQpOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBmYWlsZWQgdG8gaW5pdCAlc1xuIiwgZGFpX2xpbmstPnN0cmVhbV9uYW1lKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KLQkvKiBNYWtlIHN1cmUgYWxsIERBUE0gd2lkZ2V0cyBhcmUgaW5zdGFudGlhdGVkICovCi0Jc25kX3NvY19kYXBtX25ld193aWRnZXRzKGNvZGVjKTsKLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7Ci0KLQkvKiByZWdpc3RlciB0aGUgcnRkIGRldmljZSAqLwotCXJ0ZC0+ZGV2LnJlbGVhc2UgPSBydGRfcmVsZWFzZTsKLQlydGQtPmRldi5pbml0X25hbWUgPSBkYWlfbGluay0+bmFtZTsKLQlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJnJ0ZC0+ZGV2KTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGZhaWxlZCB0byByZWdpc3RlciBEQUkgcnVudGltZSBkZXZpY2UgJWRcbiIsIHJldCk7CisJcmV0ID0gc29jX3Bvc3RfY29tcG9uZW50X2luaXQoY2FyZCwgY29kZWMsIG51bSwgMCk7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKLQl9CiAKLQlydGQtPmRldl9yZWdpc3RlcmVkID0gMTsKIAlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnJ0ZC0+ZGV2LCAmZGV2X2F0dHJfcG1kb3duX3RpbWUpOwogCWlmIChyZXQgPCAwKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJhc29jOiBmYWlsZWQgdG8gYWRkIHBtZG93bl90aW1lIHN5c2ZzXG4iKTsKIAotCS8qIGFkZCBEQVBNIHN5c2ZzIGVudHJpZXMgZm9yIHRoaXMgY29kZWMgKi8KLQlyZXQgPSBzbmRfc29jX2RhcG1fc3lzX2FkZCgmcnRkLT5kZXYpOwotCWlmIChyZXQgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJhc29jOiBmYWlsZWQgdG8gYWRkIGNvZGVjIGRhcG0gc3lzZnMgZW50cmllc1xuIik7Ci0KLQkvKiBhZGQgY29kZWMgc3lzZnMgZW50cmllcyAqLwotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmcnRkLT5kZXYsICZkZXZfYXR0cl9jb2RlY19yZWcpOwotCWlmIChyZXQgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJhc29jOiBmYWlsZWQgdG8gYWRkIGNvZGVjIHN5c2ZzIGZpbGVzXG4iKTsKLQogCS8qIGNyZWF0ZSB0aGUgcGNtICovCiAJcmV0ID0gc29jX25ld19wY20ocnRkLCBudW0pOwogCWlmIChyZXQgPCAwKSB7CkBAIC0xNTUxLDkgKzE2NDEsODUgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IHNvY19wcm9iZV9hdXhfZGV2KHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsIGludCBudW0pCit7CisJc3RydWN0IHNuZF9zb2NfYXV4X2RldiAqYXV4X2RldiA9ICZjYXJkLT5hdXhfZGV2W251bV07CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQgPSAtRU5PREVWOworCisJLyogZmluZCBDT0RFQyBmcm9tIHJlZ2lzdGVyZWQgQ09ERUNzKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvZGVjLCAmY29kZWNfbGlzdCwgbGlzdCkgeworCQlpZiAoIXN0cmNtcChjb2RlYy0+bmFtZSwgYXV4X2Rldi0+Y29kZWNfbmFtZSkpIHsKKwkJCWlmIChjb2RlYy0+cHJvYmVkKSB7CisJCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCQkiYXNvYzogY29kZWMgYWxyZWFkeSBwcm9iZWQiKTsKKwkJCQlyZXQgPSAtRUJVU1k7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCS8qIGNvZGVjIG5vdCBmb3VuZCAqLworCWRldl9lcnIoY2FyZC0+ZGV2LCAiYXNvYzogY29kZWMgJXMgbm90IGZvdW5kIiwgYXV4X2Rldi0+Y29kZWNfbmFtZSk7CisJZ290byBvdXQ7CisKK2ZvdW5kOgorCWlmICghdHJ5X21vZHVsZV9nZXQoY29kZWMtPmRldi0+ZHJpdmVyLT5vd25lcikpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gc29jX3Byb2JlX2NvZGVjKGNhcmQsIGNvZGVjKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNvY19wb3N0X2NvbXBvbmVudF9pbml0KGNhcmQsIGNvZGVjLCBudW0sIDEpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc29jX3JlbW92ZV9hdXhfZGV2KHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsIGludCBudW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9ICZjYXJkLT5ydGRfYXV4W251bV07CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKworCS8qIHVucmVnaXN0ZXIgdGhlIHJ0ZCBkZXZpY2UgKi8KKwlpZiAocnRkLT5kZXZfcmVnaXN0ZXJlZCkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnJ0ZC0+ZGV2LCAmZGV2X2F0dHJfY29kZWNfcmVnKTsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJnJ0ZC0+ZGV2KTsKKwkJcnRkLT5kZXZfcmVnaXN0ZXJlZCA9IDA7CisJfQorCisJaWYgKGNvZGVjICYmIGNvZGVjLT5wcm9iZWQpCisJCXNvY19yZW1vdmVfY29kZWMoY29kZWMpOworfQorCitzdGF0aWMgaW50IHNuZF9zb2NfaW5pdF9jb2RlY19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgIGVudW0gc25kX3NvY19jb21wcmVzc190eXBlIGNvbXByZXNzX3R5cGUpCit7CisJaW50IHJldDsKKworCWlmIChjb2RlYy0+Y2FjaGVfaW5pdCkKKwkJcmV0dXJuIDA7CisKKwkvKiBvdmVycmlkZSB0aGUgY29tcHJlc3NfdHlwZSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoY29tcHJlc3NfdHlwZSAmJiBjb2RlYy0+Y29tcHJlc3NfdHlwZSAhPSBjb21wcmVzc190eXBlKQorCQljb2RlYy0+Y29tcHJlc3NfdHlwZSA9IGNvbXByZXNzX3R5cGU7CisJcmV0ID0gc25kX3NvY19jYWNoZV9pbml0KGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIGNvbXByZXNzaW9uIHR5cGU6ICVkXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJY29kZWMtPmNhY2hlX2luaXQgPSAxOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBzbmRfc29jX2luc3RhbnRpYXRlX2NhcmQoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGNhcmQtPmRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjX2NvbmYgKmNvZGVjX2NvbmY7CisJZW51bSBzbmRfc29jX2NvbXByZXNzX3R5cGUgY29tcHJlc3NfdHlwZTsKIAlpbnQgcmV0LCBpOwogCiAJbXV0ZXhfbG9jaygmY2FyZC0+bXV0ZXgpOwpAQCAtMTU3Myw2ICsxNzM5LDM5IEBACiAJCXJldHVybjsKIAl9CiAKKwkvKiBpbml0aWFsaXplIHRoZSByZWdpc3RlciBjYWNoZSBmb3IgZWFjaCBhdmFpbGFibGUgY29kZWMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvZGVjLCAmY29kZWNfbGlzdCwgbGlzdCkgeworCQlpZiAoY29kZWMtPmNhY2hlX2luaXQpCisJCQljb250aW51ZTsKKwkJLyogY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhlIGNvbXByZXNzX3R5cGUgKi8KKwkJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9jb25maWdzOyArK2kpIHsKKwkJCWNvZGVjX2NvbmYgPSAmY2FyZC0+Y29kZWNfY29uZltpXTsKKwkJCWlmICghc3RyY21wKGNvZGVjLT5uYW1lLCBjb2RlY19jb25mLT5kZXZfbmFtZSkpIHsKKwkJCQljb21wcmVzc190eXBlID0gY29kZWNfY29uZi0+Y29tcHJlc3NfdHlwZTsKKwkJCQlpZiAoY29tcHJlc3NfdHlwZSAmJiBjb21wcmVzc190eXBlCisJCQkJICAgICE9IGNvZGVjLT5jb21wcmVzc190eXBlKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA9PSBjYXJkLT5udW1fY29uZmlncykgeworCQkJLyogbm8gbmVlZCB0byBvdmVycmlkZSB0aGUgY29tcHJlc3NfdHlwZSBzbworCQkJICogZ28gYWhlYWQgYW5kIGRvIHRoZSBzdGFuZGFyZCB0aGluZyAqLworCQkJcmV0ID0gc25kX3NvY19pbml0X2NvZGVjX2NhY2hlKGNvZGVjLCAwKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZjYXJkLT5tdXRleCk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJLyogb3ZlcnJpZGUgdGhlIGNvbXByZXNzX3R5cGUgd2l0aCB0aGUgb25lIHN1cHBsaWVkIGluCisJCSAqIHRoZSBtYWNoaW5lIGRyaXZlciAqLworCQlyZXQgPSBzbmRfc29jX2luaXRfY29kZWNfY2FjaGUoY29kZWMsIGNvbXByZXNzX3R5cGUpOworCQlpZiAocmV0IDwgMCkgeworCQkJbXV0ZXhfdW5sb2NrKCZjYXJkLT5tdXRleCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKIAkvKiBjYXJkIGJpbmQgY29tcGxldGUgc28gcmVnaXN0ZXIgYSBzb3VuZCBjYXJkICovCiAJcmV0ID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAogCQkJY2FyZC0+b3duZXIsIDAsICZjYXJkLT5zbmRfY2FyZCk7CkBAIC0xNjA1LDYgKzE4MDQsMTUgQEAKIAkJfQogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fYXV4X2RldnM7IGkrKykgeworCQlyZXQgPSBzb2NfcHJvYmVfYXV4X2RldihjYXJkLCBpKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX2VycigiYXNvYzogZmFpbGVkIHRvIGFkZCBhdXhpbGlhcnkgZGV2aWNlcyAlczogJWRcbiIsCisJCQkgICAgICAgY2FyZC0+bmFtZSwgcmV0KTsKKwkJCWdvdG8gcHJvYmVfYXV4X2Rldl9lcnI7CisJCX0KKwl9CisKIAlzbnByaW50ZihjYXJkLT5zbmRfY2FyZC0+c2hvcnRuYW1lLCBzaXplb2YoY2FyZC0+c25kX2NhcmQtPnNob3J0bmFtZSksCiAJCSAiJXMiLCAgY2FyZC0+bmFtZSk7CiAJc25wcmludGYoY2FyZC0+c25kX2NhcmQtPmxvbmduYW1lLCBzaXplb2YoY2FyZC0+c25kX2NhcmQtPmxvbmduYW1lKSwKQEAgLTE2MTMsNyArMTgyMSw3IEBACiAJcmV0ID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZC0+c25kX2NhcmQpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogZmFpbGVkIHRvIHJlZ2lzdGVyIHNvdW5kY2FyZCBmb3IgJXNcbiIsIGNhcmQtPm5hbWUpOwotCQlnb3RvIHByb2JlX2RhaV9lcnI7CisJCWdvdG8gcHJvYmVfYXV4X2Rldl9lcnI7CiAJfQogCiAjaWZkZWYgQ09ORklHX1NORF9TT0NfQUM5N19CVVMKQEAgLTE2MjMsOCArMTgzMSw4IEBACiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGZhaWxlZCB0byByZWdpc3RlciBBQzk3ICVzXG4iLCBjYXJkLT5uYW1lKTsKIAkJCXdoaWxlICgtLWkgPj0gMCkKLQkJCQlzb2NfdW5yZWdpc3Rlcl9hYzk3X2RhaV9saW5rKCZjYXJkLT5ydGRbaV0pOwotCQkJZ290byBwcm9iZV9kYWlfZXJyOworCQkJCXNvY191bnJlZ2lzdGVyX2FjOTdfZGFpX2xpbmsoY2FyZC0+cnRkW2ldLmNvZGVjKTsKKwkJCWdvdG8gcHJvYmVfYXV4X2Rldl9lcnI7CiAJCX0KIAl9CiAjZW5kaWYKQEAgLTE2MzMsNiArMTg0MSwxMCBAQAogCW11dGV4X3VubG9jaygmY2FyZC0+bXV0ZXgpOwogCXJldHVybjsKIAorcHJvYmVfYXV4X2Rldl9lcnI6CisJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9hdXhfZGV2czsgaSsrKQorCQlzb2NfcmVtb3ZlX2F1eF9kZXYoY2FyZCwgaSk7CisKIHByb2JlX2RhaV9lcnI6CiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKQogCQlzb2NfcmVtb3ZlX2RhaV9saW5rKGNhcmQsIGkpOwpAQCAtMTY2OCw2ICsxODgwLDExIEBACiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmRhaV9kZXZfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmNvZGVjX2Rldl9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmY2FyZC0+cGxhdGZvcm1fZGV2X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT53aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY2FyZC0+cGF0aHMpOworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5kYXBtX2xpc3QpOworCisJc29jX2luaXRfY2FyZF9kZWJ1Z2ZzKGNhcmQpOwogCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jYXJkKGNhcmQpOwogCWlmIChyZXQgIT0gMCkgewpAQCAtMTY4OSwxMyArMTkwNiwxOSBAQAogCQkvKiBtYWtlIHN1cmUgYW55IGRlbGF5ZWQgd29yayBydW5zICovCiAJCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspIHsKIAkJCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSAmY2FyZC0+cnRkW2ldOwotCQkJcnVuX2RlbGF5ZWRfd29yaygmcnRkLT5kZWxheWVkX3dvcmspOworCQkJZmx1c2hfZGVsYXllZF93b3JrX3N5bmMoJnJ0ZC0+ZGVsYXllZF93b3JrKTsKIAkJfQogCisJCS8qIHJlbW92ZSBhdXhpbGlhcnkgZGV2aWNlcyAqLworCQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX2F1eF9kZXZzOyBpKyspCisJCQlzb2NfcmVtb3ZlX2F1eF9kZXYoY2FyZCwgaSk7CisKIAkJLyogcmVtb3ZlIGFuZCBmcmVlIGVhY2ggREFJICovCiAJCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspCiAJCQlzb2NfcmVtb3ZlX2RhaV9saW5rKGNhcmQsIGkpOwogCisJCXNvY19jbGVhbnVwX2NhcmRfZGVidWdmcyhjYXJkKTsKKwogCQkvKiByZW1vdmUgdGhlIGNhcmQgKi8KIAkJaWYgKGNhcmQtPnJlbW92ZSkKIAkJCWNhcmQtPnJlbW92ZShwZGV2KTsKQEAgLTE3MjAsNyArMTk0Myw3IEBACiAJICogbm93LCB3ZSdyZSBzaHV0dGluZyBkb3duIHNvIG5vIGltbWluZW50IHJlc3RhcnQuICovCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9ydGQ7IGkrKykgewogCQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gJmNhcmQtPnJ0ZFtpXTsKLQkJcnVuX2RlbGF5ZWRfd29yaygmcnRkLT5kZWxheWVkX3dvcmspOworCQlmbHVzaF9kZWxheWVkX3dvcmtfc3luYygmcnRkLT5kZWxheWVkX3dvcmspOwogCX0KIAogCXNuZF9zb2NfZGFwbV9zaHV0ZG93bihjYXJkKTsKQEAgLTE4NzksNiArMjEwMiwyNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19mcmVlX2FjOTdfY29kZWMpOwogCit1bnNpZ25lZCBpbnQgc25kX3NvY19yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZykKK3sKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJcmV0ID0gY29kZWMtPnJlYWQoY29kZWMsIHJlZyk7CisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAicmVhZCAleCA9PiAleFxuIiwgcmVnLCByZXQpOworCXRyYWNlX3NuZF9zb2NfcmVnX3JlYWQoY29kZWMsIHJlZywgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX3JlYWQpOworCit1bnNpZ25lZCBpbnQgc25kX3NvY193cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCWRldl9kYmcoY29kZWMtPmRldiwgIndyaXRlICV4ID0gJXhcbiIsIHJlZywgdmFsKTsKKwl0cmFjZV9zbmRfc29jX3JlZ193cml0ZShjb2RlYywgcmVnLCB2YWwpOworCXJldHVybiBjb2RlYy0+d3JpdGUoY29kZWMsIHJlZywgdmFsKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2Nfd3JpdGUpOworCiAvKioKICAqIHNuZF9zb2NfdXBkYXRlX2JpdHMgLSB1cGRhdGUgY29kZWMgcmVnaXN0ZXIgYml0cwogICogQGNvZGVjOiBhdWRpbyBjb2RlYwpAQCAtMjAxOSwxNCArMjI2MywyMiBAQAogCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjb250cm9scywgaW50IG51bV9jb250cm9scykKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBjb2RlYy0+Y2FyZC0+c25kX2NhcmQ7CisJY2hhciBwcmVmaXhlZF9uYW1lWzQ0XSwgKm5hbWU7CiAJaW50IGVyciwgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fY29udHJvbHM7IGkrKykgewogCQljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY29udHJvbCA9ICZjb250cm9sc1tpXTsKLQkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX3NvY19jbmV3KGNvbnRyb2wsIGNvZGVjLCBOVUxMKSk7CisJCWlmIChjb2RlYy0+bmFtZV9wcmVmaXgpIHsKKwkJCXNucHJpbnRmKHByZWZpeGVkX25hbWUsIHNpemVvZihwcmVmaXhlZF9uYW1lKSwgIiVzICVzIiwKKwkJCQkgY29kZWMtPm5hbWVfcHJlZml4LCBjb250cm9sLT5uYW1lKTsKKwkJCW5hbWUgPSBwcmVmaXhlZF9uYW1lOworCQl9IGVsc2UgeworCQkJbmFtZSA9IGNvbnRyb2wtPm5hbWU7CisJCX0KKwkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX3NvY19jbmV3KGNvbnRyb2wsIGNvZGVjLCBuYW1lKSk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICIlczogRmFpbGVkIHRvIGFkZCAlczogJWRcbiIsCi0JCQkJY29kZWMtPm5hbWUsIGNvbnRyb2wtPm5hbWUsIGVycik7CisJCQkJY29kZWMtPm5hbWUsIG5hbWUsIGVycik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQpAQCAtMjg2MywxMCArMzExNSwxMiBAQAogCWlmICghY2FyZC0+bmFtZSB8fCAhY2FyZC0+ZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNhcmQtPnJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lKSAqIGNhcmQtPm51bV9saW5rcywKLQkJCUdGUF9LRVJORUwpOworCWNhcmQtPnJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lKSAqCisJCQkgICAgKGNhcmQtPm51bV9saW5rcyArIGNhcmQtPm51bV9hdXhfZGV2cyksCisJCQkgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKGNhcmQtPnJ0ZCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKKwljYXJkLT5ydGRfYXV4ID0gJmNhcmQtPnJ0ZFtjYXJkLT5udW1fbGlua3NdOwogCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKQogCQljYXJkLT5ydGRbaV0uZGFpX2xpbmsgPSAmY2FyZC0+ZGFpX2xpbmtbaV07CkBAIC0yOTA4LDcgKzMxNjIsNyBAQAogICogU2ltcGxpZnkgREFJIGxpbmsgY29uZmlndXJhdGlvbiBieSByZW1vdmluZyAiLi0xIiBmcm9tIGRldmljZSBuYW1lcwogICogYW5kIHNhbml0aXppbmcgbmFtZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgY2hhciAqZm10X3NpbmdsZV9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50ICppZCkKK3N0YXRpYyBjaGFyICpmbXRfc2luZ2xlX25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgKmlkKQogewogCWNoYXIgKmZvdW5kLCBuYW1lW05BTUVfU0laRV07CiAJaW50IGlkMSwgaWQyOwpAQCAtMjkxNiw3ICszMTcwLDcgQEAKIAlpZiAoZGV2X25hbWUoZGV2KSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCXN0cm5jcHkobmFtZSwgZGV2X25hbWUoZGV2KSwgTkFNRV9TSVpFKTsKKwlzdHJsY3B5KG5hbWUsIGRldl9uYW1lKGRldiksIE5BTUVfU0laRSk7CiAKIAkvKiBhcmUgd2UgYSAiJXMuJWQiIG5hbWUgKHBsYXRmb3JtIGFuZCBTUEkgY29tcG9uZW50cykgKi8KIAlmb3VuZCA9IHN0cnN0cihuYW1lLCBkZXYtPmRyaXZlci0+bmFtZSk7CkBAIC0yOTM5LDcgKzMxOTMsNyBAQAogCiAJCQkvKiBzYW5pdGl6ZSBjb21wb25lbnQgbmFtZSBmb3IgREFJIGxpbmsgY3JlYXRpb24gKi8KIAkJCXNucHJpbnRmKHRtcCwgTkFNRV9TSVpFLCAiJXMuJXMiLCBkZXYtPmRyaXZlci0+bmFtZSwgbmFtZSk7Ci0JCQlzdHJuY3B5KG5hbWUsIHRtcCwgTkFNRV9TSVpFKTsKKwkJCXN0cmxjcHkobmFtZSwgdG1wLCBOQU1FX1NJWkUpOwogCQl9IGVsc2UKIAkJCSppZCA9IDA7CiAJfQpAQCAtMzIwNCw5ICszNDU4LDExIEBACiAgKiBAY29kZWM6IGNvZGVjIHRvIHJlZ2lzdGVyCiAgKi8KIGludCBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyICpjb2RlY19kcnYsCi0JCXN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgKmRhaV9kcnYsIGludCBudW1fZGFpKQorCQkJICAgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyICpjb2RlY19kcnYsCisJCQkgICBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyICpkYWlfZHJ2LAorCQkJICAgaW50IG51bV9kYWkpCiB7CisJc2l6ZV90IHJlZ19zaXplOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlpbnQgcmV0LCBpOwogCkBAIC0zMjIzLDMwICszNDc5LDM3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCS8qIGFsbG9jYXRlIENPREVDIHJlZ2lzdGVyIGNhY2hlICovCi0JaWYgKGNvZGVjX2Rydi0+cmVnX2NhY2hlX3NpemUgJiYgY29kZWNfZHJ2LT5yZWdfd29yZF9zaXplKSB7CisJaWYgKGNvZGVjX2Rydi0+Y29tcHJlc3NfdHlwZSkKKwkJY29kZWMtPmNvbXByZXNzX3R5cGUgPSBjb2RlY19kcnYtPmNvbXByZXNzX3R5cGU7CisJZWxzZQorCQljb2RlYy0+Y29tcHJlc3NfdHlwZSA9IFNORF9TT0NfRkxBVF9DT01QUkVTU0lPTjsKIAotCQlpZiAoY29kZWNfZHJ2LT5yZWdfY2FjaGVfZGVmYXVsdCkKLQkJCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKGNvZGVjX2Rydi0+cmVnX2NhY2hlX2RlZmF1bHQsCi0JCQkJY29kZWNfZHJ2LT5yZWdfY2FjaGVfc2l6ZSAqIGNvZGVjX2Rydi0+cmVnX3dvcmRfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWVsc2UKLQkJCWNvZGVjLT5yZWdfY2FjaGUgPSBremFsbG9jKGNvZGVjX2Rydi0+cmVnX2NhY2hlX3NpemUgKgotCQkJCWNvZGVjX2Rydi0+cmVnX3dvcmRfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKGNvZGVjLT5yZWdfY2FjaGUgPT0gTlVMTCkgewotCQkJa2ZyZWUoY29kZWMtPm5hbWUpOwotCQkJa2ZyZWUoY29kZWMpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQl9Ci0KKwljb2RlYy0+d3JpdGUgPSBjb2RlY19kcnYtPndyaXRlOworCWNvZGVjLT5yZWFkID0gY29kZWNfZHJ2LT5yZWFkOworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCWNvZGVjLT5kYXBtLmRldiA9IGRldjsKKwljb2RlYy0+ZGFwbS5jb2RlYyA9IGNvZGVjOwogCWNvZGVjLT5kZXYgPSBkZXY7CiAJY29kZWMtPmRyaXZlciA9IGNvZGVjX2RydjsKLQljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CiAJY29kZWMtPm51bV9kYWkgPSBudW1fZGFpOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwkvKiBhbGxvY2F0ZSBDT0RFQyByZWdpc3RlciBjYWNoZSAqLworCWlmIChjb2RlY19kcnYtPnJlZ19jYWNoZV9zaXplICYmIGNvZGVjX2Rydi0+cmVnX3dvcmRfc2l6ZSkgeworCQlyZWdfc2l6ZSA9IGNvZGVjX2Rydi0+cmVnX2NhY2hlX3NpemUgKiBjb2RlY19kcnYtPnJlZ193b3JkX3NpemU7CisJCS8qIGl0IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGEgY29weSBvZiB0aGUgZGVmYXVsdCByZWdpc3RlciBjYWNoZQorCQkgKiBiZWNhdXNlIGluIHRoZSBjYXNlIG9mIHVzaW5nIGEgY29tcHJlc3Npb24gdHlwZSB0aGF0IHJlcXVpcmVzCisJCSAqIHRoZSBkZWZhdWx0IHJlZ2lzdGVyIGNhY2hlIHRvIGJlIG1hcmtlZCBhcyBfX2RldmluaXRjb25zdCB0aGUKKwkJICoga2VybmVsIG1pZ2h0IGhhdmUgZnJlZWQgdGhlIGFycmF5IGJ5IHRoZSB0aW1lIHdlIGluaXRpYWxpemUKKwkJICogdGhlIGNhY2hlLgorCQkgKi8KKwkJY29kZWMtPnJlZ19kZWZfY29weSA9IGttZW1kdXAoY29kZWNfZHJ2LT5yZWdfY2FjaGVfZGVmYXVsdCwKKwkJCQkJICAgICAgcmVnX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWNvZGVjLT5yZWdfZGVmX2NvcHkpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2RhaTsgaSsrKSB7CiAJCWZpeHVwX2NvZGVjX2Zvcm1hdHMoJmRhaV9kcnZbaV0ucGxheWJhY2spOwpAQCAtMzI1Nyw3ICszNTIwLDcgQEAKIAlpZiAobnVtX2RhaSkgewogCQlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaXMoZGV2LCBkYWlfZHJ2LCBudW1fZGFpKTsKIAkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVycm9yOworCQkJZ290byBmYWlsOwogCX0KIAogCW11dGV4X2xvY2soJmNsaWVudF9tdXRleCk7CkBAIC0zMjY4LDkgKzM1MzEsOSBAQAogCXByX2RlYnVnKCJSZWdpc3RlcmVkIGNvZGVjICclcydcbiIsIGNvZGVjLT5uYW1lKTsKIAlyZXR1cm4gMDsKIAotZXJyb3I6Ci0JaWYgKGNvZGVjLT5yZWdfY2FjaGUpCi0JCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOworZmFpbDoKKwlrZnJlZShjb2RlYy0+cmVnX2RlZl9jb3B5KTsKKwljb2RlYy0+cmVnX2RlZl9jb3B5ID0gTlVMTDsKIAlrZnJlZShjb2RlYy0+bmFtZSk7CiAJa2ZyZWUoY29kZWMpOwogCXJldHVybiByZXQ7CkBAIC0zMzA0LDggKzM1NjcsOCBAQAogCiAJcHJfZGVidWcoIlVucmVnaXN0ZXJlZCBjb2RlYyAnJXMnXG4iLCBjb2RlYy0+bmFtZSk7CiAKLQlpZiAoY29kZWMtPnJlZ19jYWNoZSkKLQkJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CisJc25kX3NvY19jYWNoZV9leGl0KGNvZGVjKTsKKwlrZnJlZShjb2RlYy0+cmVnX2RlZl9jb3B5KTsKIAlrZnJlZShjb2RlYy0+bmFtZSk7CiAJa2ZyZWUoY29kZWMpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1kYXBtLmMgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwppbmRleCBjNzIxNTAyLi40OTk3MzBhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWRhcG0uYworKysgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwpAQCAtNDIsOSArNDIsMTEgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2Fzb2MuaD4KKwogLyogZGFwbSBwb3dlciBzZXF1ZW5jZXMgLSBtYWtlIHRoaXMgcGVyIGNvZGVjIGluIHRoZSBmdXR1cmUgKi8KIHN0YXRpYyBpbnQgZGFwbV91cF9zZXFbXSA9IHsKIAlbc25kX3NvY19kYXBtX3ByZV0gPSAwLApAQCAtNTQsMTIgKzU2LDE0IEBACiAJW3NuZF9zb2NfZGFwbV9haWZfb3V0XSA9IDMsCiAJW3NuZF9zb2NfZGFwbV9taWNdID0gNCwKIAlbc25kX3NvY19kYXBtX211eF0gPSA1LAorCVtzbmRfc29jX2RhcG1fdmlydF9tdXhdID0gNSwKIAlbc25kX3NvY19kYXBtX3ZhbHVlX211eF0gPSA1LAogCVtzbmRfc29jX2RhcG1fZGFjXSA9IDYsCiAJW3NuZF9zb2NfZGFwbV9taXhlcl0gPSA3LAogCVtzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsXSA9IDcsCiAJW3NuZF9zb2NfZGFwbV9wZ2FdID0gOCwKIAlbc25kX3NvY19kYXBtX2FkY10gPSA5LAorCVtzbmRfc29jX2RhcG1fb3V0X2Rydl0gPSAxMCwKIAlbc25kX3NvY19kYXBtX2hwXSA9IDEwLAogCVtzbmRfc29jX2RhcG1fc3BrXSA9IDEwLAogCVtzbmRfc29jX2RhcG1fcG9zdF0gPSAxMSwKQEAgLTcwLDYgKzc0LDcgQEAKIAlbc25kX3NvY19kYXBtX2FkY10gPSAxLAogCVtzbmRfc29jX2RhcG1faHBdID0gMiwKIAlbc25kX3NvY19kYXBtX3Nwa10gPSAyLAorCVtzbmRfc29jX2RhcG1fb3V0X2Rydl0gPSAyLAogCVtzbmRfc29jX2RhcG1fcGdhXSA9IDQsCiAJW3NuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGxdID0gNSwKIAlbc25kX3NvY19kYXBtX21peGVyXSA9IDUsCkBAIC03Nyw2ICs4Miw3IEBACiAJW3NuZF9zb2NfZGFwbV9taWNdID0gNywKIAlbc25kX3NvY19kYXBtX21pY2JpYXNdID0gOCwKIAlbc25kX3NvY19kYXBtX211eF0gPSA5LAorCVtzbmRfc29jX2RhcG1fdmlydF9tdXhdID0gOSwKIAlbc25kX3NvY19kYXBtX3ZhbHVlX211eF0gPSA5LAogCVtzbmRfc29jX2RhcG1fYWlmX2luXSA9IDEwLAogCVtzbmRfc29jX2RhcG1fYWlmX291dF0gPSAxMCwKQEAgLTkwLDE3ICs5NiwyNCBAQAogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKHBvcF90aW1lKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBvcF9kYmcodTMyIHBvcF90aW1lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3N0YXRpYyB2b2lkIHBvcF9kYmcoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgcG9wX3RpbWUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKKwljaGFyICpidWY7CisKKwlpZiAoIXBvcF90aW1lKQorCQlyZXR1cm47CisKKwlidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm47CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCi0JaWYgKHBvcF90aW1lKSB7Ci0JCXZwcmludGsoZm10LCBhcmdzKTsKLQl9Ci0KKwl2c25wcmludGYoYnVmLCBQQUdFX1NJWkUsIGZtdCwgYXJncyk7CisJZGV2X2luZm8oZGV2LCAiJXMiLCBidWYpOwogCXZhX2VuZChhcmdzKTsKKworCWtmcmVlKGJ1Zik7CiB9CiAKIC8qIGNyZWF0ZSBhIG5ldyBkYXBtIHdpZGdldCAqLwpAQCAtMTIwLDM2ICsxMzMsNDUgQEAKICAqIFJldHVybnMgMCBmb3Igc3VjY2VzcyBlbHNlIGVycm9yLgogICovCiBzdGF0aWMgaW50IHNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAotCQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCisJCQkJICAgICAgIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewogCWludCByZXQgPSAwOwogCiAJc3dpdGNoIChsZXZlbCkgewogCWNhc2UgU05EX1NPQ19CSUFTX09OOgotCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJTZXR0aW5nIGZ1bGwgYmlhc1xuIik7CisJCWRldl9kYmcoZGFwbS0+ZGV2LCAiU2V0dGluZyBmdWxsIGJpYXNcbiIpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgotCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJTZXR0aW5nIGJpYXMgcHJlcGFyZVxuIik7CisJCWRldl9kYmcoZGFwbS0+ZGV2LCAiU2V0dGluZyBiaWFzIHByZXBhcmVcbiIpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJTZXR0aW5nIHN0YW5kYnkgYmlhc1xuIik7CisJCWRldl9kYmcoZGFwbS0+ZGV2LCAiU2V0dGluZyBzdGFuZGJ5IGJpYXNcbiIpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19PRkY6Ci0JCWRldl9kYmcoY29kZWMtPmRldiwgIlNldHRpbmcgYmlhcyBvZmZcbiIpOworCQlkZXZfZGJnKGRhcG0tPmRldiwgIlNldHRpbmcgYmlhcyBvZmZcbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJTZXR0aW5nIGludmFsaWQgYmlhcyAlZFxuIiwgbGV2ZWwpOworCQlkZXZfZXJyKGRhcG0tPmRldiwgIlNldHRpbmcgaW52YWxpZCBiaWFzICVkXG4iLCBsZXZlbCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXRyYWNlX3NuZF9zb2NfYmlhc19sZXZlbF9zdGFydChjYXJkLCBsZXZlbCk7CisKIAlpZiAoY2FyZCAmJiBjYXJkLT5zZXRfYmlhc19sZXZlbCkKIAkJcmV0ID0gY2FyZC0+c2V0X2JpYXNfbGV2ZWwoY2FyZCwgbGV2ZWwpOwogCWlmIChyZXQgPT0gMCkgewotCQlpZiAoY29kZWMtPmRyaXZlci0+c2V0X2JpYXNfbGV2ZWwpCi0JCQlyZXQgPSBjb2RlYy0+ZHJpdmVyLT5zZXRfYmlhc19sZXZlbChjb2RlYywgbGV2ZWwpOworCQlpZiAoZGFwbS0+Y29kZWMgJiYgZGFwbS0+Y29kZWMtPmRyaXZlci0+c2V0X2JpYXNfbGV2ZWwpCisJCQlyZXQgPSBkYXBtLT5jb2RlYy0+ZHJpdmVyLT5zZXRfYmlhc19sZXZlbChkYXBtLT5jb2RlYywgbGV2ZWwpOwogCQllbHNlCi0JCQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCQkJZGFwbS0+Ymlhc19sZXZlbCA9IGxldmVsOwogCX0KKwlpZiAocmV0ID09IDApIHsKKwkJaWYgKGNhcmQgJiYgY2FyZC0+c2V0X2JpYXNfbGV2ZWxfcG9zdCkKKwkJCXJldCA9IGNhcmQtPnNldF9iaWFzX2xldmVsX3Bvc3QoY2FyZCwgbGV2ZWwpOworCX0KKworCXRyYWNlX3NuZF9zb2NfYmlhc19sZXZlbF9kb25lKGNhcmQsIGxldmVsKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xOTYsNiArMjE4LDIwIEBACiAJCX0KIAl9CiAJYnJlYWs7CisJY2FzZSBzbmRfc29jX2RhcG1fdmlydF9tdXg6IHsKKwkJc3RydWN0IHNvY19lbnVtICplID0gKHN0cnVjdCBzb2NfZW51bSAqKXctPmtjb250cm9sc1tpXS5wcml2YXRlX3ZhbHVlOworCisJCXAtPmNvbm5lY3QgPSAwOworCQkvKiBzaW5jZSBhIHZpcnR1YWwgbXV4IGhhcyBubyBiYWNraW5nIHJlZ2lzdGVycyB0bworCQkgKiBkZWNpZGUgd2hpY2ggcGF0aCB0byBjb25uZWN0LCBpdCB3aWxsIHRyeSB0byBtYXRjaAorCQkgKiB3aXRoIHRoZSBmaXJzdCBlbnVtZXJhdGlvbi4gIFRoaXMgaXMgdG8gZW5zdXJlCisJCSAqIHRoYXQgdGhlIGRlZmF1bHQgbXV4IGNob2ljZSAodGhlIGZpcnN0KSB3aWxsIGJlCisJCSAqIGNvcnJlY3RseSBwb3dlcmVkIHVwIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKwkJICovCisJCWlmICghc3RyY21wKHAtPm5hbWUsIGUtPnRleHRzWzBdKSkKKwkJCXAtPmNvbm5lY3QgPSAxOworCX0KKwlicmVhazsKIAljYXNlIHNuZF9zb2NfZGFwbV92YWx1ZV9tdXg6IHsKIAkJc3RydWN0IHNvY19lbnVtICplID0gKHN0cnVjdCBzb2NfZW51bSAqKQogCQkJdy0+a2NvbnRyb2xzW2ldLnByaXZhdGVfdmFsdWU7CkBAIC0yMTcsNiArMjUzLDcgQEAKIAlicmVhazsKIAkvKiBkb2VzIG5vdCBlZmZlY3Qgcm91dGluZyAtIGFsd2F5cyBjb25uZWN0ZWQgKi8KIAljYXNlIHNuZF9zb2NfZGFwbV9wZ2E6CisJY2FzZSBzbmRfc29jX2RhcG1fb3V0X2RydjoKIAljYXNlIHNuZF9zb2NfZGFwbV9vdXRwdXQ6CiAJY2FzZSBzbmRfc29jX2RhcG1fYWRjOgogCWNhc2Ugc25kX3NvY19kYXBtX2lucHV0OgpAQCAtMjQxLDcgKzI3OCw3IEBACiB9CiAKIC8qIGNvbm5lY3QgbXV4IHdpZGdldCB0byBpdHMgaW50ZXJjb25uZWN0aW5nIGF1ZGlvIHBhdGhzICovCi1zdGF0aWMgaW50IGRhcG1fY29ubmVjdF9tdXgoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorc3RhdGljIGludCBkYXBtX2Nvbm5lY3RfbXV4KHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc3JjLCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqZGVzdCwKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3BhdGggKnBhdGgsIGNvbnN0IGNoYXIgKmNvbnRyb2xfbmFtZSwKIAljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa2NvbnRyb2wpCkBAIC0yNTEsNyArMjg4LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBlLT5tYXg7IGkrKykgewogCQlpZiAoIShzdHJjbXAoY29udHJvbF9uYW1lLCBlLT50ZXh0c1tpXSkpKSB7Ci0JCQlsaXN0X2FkZCgmcGF0aC0+bGlzdCwgJmNvZGVjLT5kYXBtX3BhdGhzKTsKKwkJCWxpc3RfYWRkKCZwYXRoLT5saXN0LCAmZGFwbS0+Y2FyZC0+cGF0aHMpOwogCQkJbGlzdF9hZGQoJnBhdGgtPmxpc3Rfc2luaywgJmRlc3QtPnNvdXJjZXMpOwogCQkJbGlzdF9hZGQoJnBhdGgtPmxpc3Rfc291cmNlLCAmc3JjLT5zaW5rcyk7CiAJCQlwYXRoLT5uYW1lID0gKGNoYXIqKWUtPnRleHRzW2ldOwpAQCAtMjY0LDcgKzMwMSw3IEBACiB9CiAKIC8qIGNvbm5lY3QgbWl4ZXIgd2lkZ2V0IHRvIGl0cyBpbnRlcmNvbm5lY3RpbmcgYXVkaW8gcGF0aHMgKi8KLXN0YXRpYyBpbnQgZGFwbV9jb25uZWN0X21peGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKK3N0YXRpYyBpbnQgZGFwbV9jb25uZWN0X21peGVyKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc3JjLCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqZGVzdCwKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3BhdGggKnBhdGgsIGNvbnN0IGNoYXIgKmNvbnRyb2xfbmFtZSkKIHsKQEAgLTI3Myw3ICszMTAsNyBAQAogCS8qIHNlYXJjaCBmb3IgbWl4ZXIga2NvbnRyb2wgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGVzdC0+bnVtX2tjb250cm9sczsgaSsrKSB7CiAJCWlmICghc3RyY21wKGNvbnRyb2xfbmFtZSwgZGVzdC0+a2NvbnRyb2xzW2ldLm5hbWUpKSB7Ci0JCQlsaXN0X2FkZCgmcGF0aC0+bGlzdCwgJmNvZGVjLT5kYXBtX3BhdGhzKTsKKwkJCWxpc3RfYWRkKCZwYXRoLT5saXN0LCAmZGFwbS0+Y2FyZC0+cGF0aHMpOwogCQkJbGlzdF9hZGQoJnBhdGgtPmxpc3Rfc2luaywgJmRlc3QtPnNvdXJjZXMpOwogCQkJbGlzdF9hZGQoJnBhdGgtPmxpc3Rfc291cmNlLCAmc3JjLT5zaW5rcyk7CiAJCQlwYXRoLT5uYW1lID0gZGVzdC0+a2NvbnRyb2xzW2ldLm5hbWU7CkBAIC0yOTAsNiArMzI3LDggQEAKIAlpbnQgY2hhbmdlLCBwb3dlcjsKIAl1bnNpZ25lZCBpbnQgb2xkLCBuZXc7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd2lkZ2V0LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSB3aWRnZXQtPmRhcG07CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IGRhcG0tPmNhcmQ7CiAKIAkvKiBjaGVjayBmb3IgdmFsaWQgd2lkZ2V0cyAqLwogCWlmICh3aWRnZXQtPnJlZyA8IDAgfHwgd2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1faW5wdXQgfHwKQEAgLTMwOSwyNCArMzQ4LDI2IEBACiAKIAljaGFuZ2UgPSBvbGQgIT0gbmV3OwogCWlmIChjaGFuZ2UpIHsKLQkJcG9wX2RiZyhjb2RlYy0+cG9wX3RpbWUsICJwb3AgdGVzdCAlcyA6ICVzIGluICVkIG1zXG4iLAorCQlwb3BfZGJnKGRhcG0tPmRldiwgY2FyZC0+cG9wX3RpbWUsCisJCQkicG9wIHRlc3QgJXMgOiAlcyBpbiAlZCBtc1xuIiwKIAkJCXdpZGdldC0+bmFtZSwgd2lkZ2V0LT5wb3dlciA/ICJvbiIgOiAib2ZmIiwKLQkJCWNvZGVjLT5wb3BfdGltZSk7Ci0JCXBvcF93YWl0KGNvZGVjLT5wb3BfdGltZSk7CisJCQljYXJkLT5wb3BfdGltZSk7CisJCXBvcF93YWl0KGNhcmQtPnBvcF90aW1lKTsKIAkJc25kX3NvY193cml0ZShjb2RlYywgd2lkZ2V0LT5yZWcsIG5ldyk7CiAJfQotCXByX2RlYnVnKCJyZWcgJXggb2xkICV4IG5ldyAleCBjaGFuZ2UgJWRcbiIsIHdpZGdldC0+cmVnLAotCQkgb2xkLCBuZXcsIGNoYW5nZSk7CisJZGV2X2RiZyhkYXBtLT5kZXYsICJyZWcgJXggb2xkICV4IG5ldyAleCBjaGFuZ2UgJWRcbiIsIHdpZGdldC0+cmVnLAorCQlvbGQsIG5ldywgY2hhbmdlKTsKIAlyZXR1cm4gY2hhbmdlOwogfQogCiAvKiBjcmVhdGUgbmV3IGRhcG0gbWl4ZXIgY29udHJvbCAqLwotc3RhdGljIGludCBkYXBtX25ld19taXhlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCitzdGF0aWMgaW50IGRhcG1fbmV3X21peGVyKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKIHsKIAlpbnQgaSwgcmV0ID0gMDsKIAlzaXplX3QgbmFtZV9sZW47CiAJc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwYXRoOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRhcG0tPmNvZGVjLT5jYXJkLT5zbmRfY2FyZDsKIAogCS8qIGFkZCBrY29udHJvbCAqLwogCWZvciAoaSA9IDA7IGkgPCB3LT5udW1fa2NvbnRyb2xzOyBpKyspIHsKQEAgLTM2OCwxMSArNDA5LDExIEBACiAKIAkJCXBhdGgtPmtjb250cm9sID0gc25kX3NvY19jbmV3KCZ3LT5rY29udHJvbHNbaV0sIHcsCiAJCQkJcGF0aC0+bG9uZ19uYW1lKTsKLQkJCXJldCA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLT5zbmRfY2FyZCwgcGF0aC0+a2NvbnRyb2wpOworCQkJcmV0ID0gc25kX2N0bF9hZGQoY2FyZCwgcGF0aC0+a2NvbnRyb2wpOwogCQkJaWYgKHJldCA8IDApIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGZhaWxlZCB0byBhZGQgZGFwbSBrY29udHJvbCAlczogJWRcbiIsCi0JCQkJICAgICAgIHBhdGgtPmxvbmdfbmFtZSwKLQkJCQkgICAgICAgcmV0KTsKKwkJCQlkZXZfZXJyKGRhcG0tPmRldiwKKwkJCQkJImFzb2M6IGZhaWxlZCB0byBhZGQgZGFwbSBrY29udHJvbCAlczogJWRcbiIsCisJCQkJCXBhdGgtPmxvbmdfbmFtZSwgcmV0KTsKIAkJCQlrZnJlZShwYXRoLT5sb25nX25hbWUpOwogCQkJCXBhdGgtPmxvbmdfbmFtZSA9IE5VTEw7CiAJCQkJcmV0dXJuIHJldDsKQEAgLTM4MywyMCArNDI0LDIyIEBACiB9CiAKIC8qIGNyZWF0ZSBuZXcgZGFwbSBtdXggY29udHJvbCAqLwotc3RhdGljIGludCBkYXBtX25ld19tdXgoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorc3RhdGljIGludCBkYXBtX25ld19tdXgoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQogewogCXN0cnVjdCBzbmRfc29jX2RhcG1fcGF0aCAqcGF0aCA9IE5VTEw7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2w7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGFwbS0+Y29kZWMtPmNhcmQtPnNuZF9jYXJkOwogCWludCByZXQgPSAwOwogCiAJaWYgKCF3LT5udW1fa2NvbnRyb2xzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXNvYzogbXV4ICVzIGhhcyBubyBjb250cm9sc1xuIiwgdy0+bmFtZSk7CisJCWRldl9lcnIoZGFwbS0+ZGV2LCAiYXNvYzogbXV4ICVzIGhhcyBubyBjb250cm9sc1xuIiwgdy0+bmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWtjb250cm9sID0gc25kX3NvY19jbmV3KCZ3LT5rY29udHJvbHNbMF0sIHcsIHctPm5hbWUpOwotCXJldCA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLT5zbmRfY2FyZCwga2NvbnRyb2wpOworCXJldCA9IHNuZF9jdGxfYWRkKGNhcmQsIGtjb250cm9sKTsKKwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjsKIApAQCAtNDA2LDI2ICs0NDksMjcgQEAKIAlyZXR1cm4gcmV0OwogCiBlcnI6Ci0JcHJpbnRrKEtFUk5fRVJSICJhc29jOiBmYWlsZWQgdG8gYWRkIGtjb250cm9sICVzXG4iLCB3LT5uYW1lKTsKKwlkZXZfZXJyKGRhcG0tPmRldiwgImFzb2M6IGZhaWxlZCB0byBhZGQga2NvbnRyb2wgJXNcbiIsIHctPm5hbWUpOwogCXJldHVybiByZXQ7CiB9CiAKIC8qIGNyZWF0ZSBuZXcgZGFwbSB2b2x1bWUgY29udHJvbCAqLwotc3RhdGljIGludCBkYXBtX25ld19wZ2Eoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorc3RhdGljIGludCBkYXBtX25ld19wZ2Eoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQogewogCWlmICh3LT5udW1fa2NvbnRyb2xzKQotCQlwcl9lcnIoImFzb2M6IFBHQSBjb250cm9scyBub3Qgc3VwcG9ydGVkOiAnJXMnXG4iLCB3LT5uYW1lKTsKKwkJZGV2X2Vycih3LT5kYXBtLT5kZXYsCisJCQkiYXNvYzogUEdBIGNvbnRyb2xzIG5vdCBzdXBwb3J0ZWQ6ICclcydcbiIsIHctPm5hbWUpOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qIHJlc2V0ICd3YWxrZWQnIGJpdCBmb3IgZWFjaCBkYXBtIHBhdGggKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkYXBtX2NsZWFyX3dhbGsoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQorc3RhdGljIGlubGluZSB2b2lkIGRhcG1fY2xlYXJfd2FsayhzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0pCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY29kZWMtPmRhcG1fcGF0aHMsIGxpc3QpCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmZGFwbS0+Y2FyZC0+cGF0aHMsIGxpc3QpCiAJCXAtPndhbGtlZCA9IDA7CiB9CiAKQEAgLTQzNSwxMyArNDc5LDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgc25kX3NvY19kYXBtX3N1c3BlbmRfY2hlY2soc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCkKIHsKLQlpbnQgbGV2ZWwgPSBzbmRfcG93ZXJfZ2V0X3N0YXRlKHdpZGdldC0+Y29kZWMtPmNhcmQtPnNuZF9jYXJkKTsKKwlpbnQgbGV2ZWwgPSBzbmRfcG93ZXJfZ2V0X3N0YXRlKHdpZGdldC0+ZGFwbS0+Y29kZWMtPmNhcmQtPnNuZF9jYXJkKTsKIAogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORFJWX0NUTF9QT1dFUl9EM2hvdDoKIAljYXNlIFNORFJWX0NUTF9QT1dFUl9EM2NvbGQ6CiAJCWlmICh3aWRnZXQtPmlnbm9yZV9zdXNwZW5kKQotCQkJcHJfZGVidWcoIiVzIGlnbm9yaW5nIHN1c3BlbmRcbiIsIHdpZGdldC0+bmFtZSk7CisJCQlkZXZfZGJnKHdpZGdldC0+ZGFwbS0+ZGV2LCAiJXMgaWdub3Jpbmcgc3VzcGVuZFxuIiwKKwkJCQl3aWRnZXQtPm5hbWUpOwogCQlyZXR1cm4gd2lkZ2V0LT5pZ25vcmVfc3VzcGVuZDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMTsKQEAgLTU3Miw3ICs2MTcsNyBAQAogCiAJLyogY2FsbCBhbnkgcG93ZXIgY2hhbmdlIGV2ZW50IGhhbmRsZXJzICovCiAJaWYgKHctPmV2ZW50KQotCQlwcl9kZWJ1ZygicG93ZXIgJXMgZXZlbnQgZm9yICVzIGZsYWdzICV4XG4iLAorCQlkZXZfZGJnKHctPmRhcG0tPmRldiwgInBvd2VyICVzIGV2ZW50IGZvciAlcyBmbGFncyAleFxuIiwKIAkJCSB3LT5wb3dlciA/ICJvbiIgOiAib2ZmIiwKIAkJCSB3LT5uYW1lLCB3LT5ldmVudF9mbGFncyk7CiAKQEAgLTYyMSw5ICs2NjYsOSBAQAogCWludCBpbiwgb3V0OwogCiAJaW4gPSBpc19jb25uZWN0ZWRfaW5wdXRfZXAodyk7Ci0JZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKKwlkYXBtX2NsZWFyX3dhbGsody0+ZGFwbSk7CiAJb3V0ID0gaXNfY29ubmVjdGVkX291dHB1dF9lcCh3KTsKLQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOworCWRhcG1fY2xlYXJfd2Fsayh3LT5kYXBtKTsKIAlyZXR1cm4gb3V0ICE9IDAgJiYgaW4gIT0gMDsKIH0KIApAQCAtNjM0LDcgKzY3OSw3IEBACiAKIAlpZiAody0+YWN0aXZlKSB7CiAJCWluID0gaXNfY29ubmVjdGVkX2lucHV0X2VwKHcpOwotCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOworCQlkYXBtX2NsZWFyX3dhbGsody0+ZGFwbSk7CiAJCXJldHVybiBpbiAhPSAwOwogCX0gZWxzZSB7CiAJCXJldHVybiBkYXBtX2dlbmVyaWNfY2hlY2tfcG93ZXIodyk7CkBAIC02NDgsNyArNjkzLDcgQEAKIAogCWlmICh3LT5hY3RpdmUpIHsKIAkJb3V0ID0gaXNfY29ubmVjdGVkX291dHB1dF9lcCh3KTsKLQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKKwkJZGFwbV9jbGVhcl93YWxrKHctPmRhcG0pOwogCQlyZXR1cm4gb3V0ICE9IDA7CiAJfSBlbHNlIHsKIAkJcmV0dXJuIGRhcG1fZ2VuZXJpY19jaGVja19wb3dlcih3KTsKQEAgLTY3NCw3ICs3MTksNyBAQAogCQl9CiAJfQogCi0JZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKKwlkYXBtX2NsZWFyX3dhbGsody0+ZGFwbSk7CiAKIAlyZXR1cm4gcG93ZXI7CiB9CkBAIC02ODcsOCArNzMyLDggQEAKIAkJcmV0dXJuIHNvcnRbYS0+aWRdIC0gc29ydFtiLT5pZF07CiAJaWYgKGEtPnJlZyAhPSBiLT5yZWcpCiAJCXJldHVybiBhLT5yZWcgLSBiLT5yZWc7Ci0JaWYgKGEtPmNvZGVjICE9IGItPmNvZGVjKQotCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYS0+Y29kZWMgLSAodW5zaWduZWQgbG9uZyliLT5jb2RlYzsKKwlpZiAoYS0+ZGFwbSAhPSBiLT5kYXBtKQorCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYS0+ZGFwbSAtICh1bnNpZ25lZCBsb25nKWItPmRhcG07CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcwOSwxMiArNzU0LDU3IEBACiAJbGlzdF9hZGRfdGFpbCgmbmV3X3dpZGdldC0+cG93ZXJfbGlzdCwgbGlzdCk7CiB9CiAKK3N0YXRpYyB2b2lkIGRhcG1fc2VxX2NoZWNrX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKKwkJCQkgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gZGFwbS0+Y2FyZDsKKwljb25zdCBjaGFyICpldl9uYW1lOworCWludCBwb3dlciwgcmV0OworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCWV2X25hbWUgPSAiUFJFX1BNVSI7CisJCXBvd2VyID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJCWV2X25hbWUgPSAiUE9TVF9QTVUiOworCQlwb3dlciA9IDE7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6CisJCWV2X25hbWUgPSAiUFJFX1BNRCI7CisJCXBvd2VyID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCWV2X25hbWUgPSAiUE9TVF9QTUQiOworCQlwb3dlciA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm47CisJfQorCisJaWYgKHctPnBvd2VyICE9IHBvd2VyKQorCQlyZXR1cm47CisKKwlpZiAody0+ZXZlbnQgJiYgKHctPmV2ZW50X2ZsYWdzICYgZXZlbnQpKSB7CisJCXBvcF9kYmcoZGFwbS0+ZGV2LCBjYXJkLT5wb3BfdGltZSwgInBvcCB0ZXN0IDogJXMgJXNcbiIsCisJCQl3LT5uYW1lLCBldl9uYW1lKTsKKwkJdHJhY2Vfc25kX3NvY19kYXBtX3dpZGdldF9ldmVudF9zdGFydCh3LCBldmVudCk7CisJCXJldCA9IHctPmV2ZW50KHcsIE5VTEwsIGV2ZW50KTsKKwkJdHJhY2Vfc25kX3NvY19kYXBtX3dpZGdldF9ldmVudF9kb25lKHcsIGV2ZW50KTsKKwkJaWYgKHJldCA8IDApCisJCQlwcl9lcnIoIiVzOiAlcyBldmVudCBmYWlsZWQ6ICVkXG4iLAorCQkJICAgICAgIGV2X25hbWUsIHctPm5hbWUsIHJldCk7CisJfQorfQorCiAvKiBBcHBseSB0aGUgY29hbGVzY2VkIGNoYW5nZXMgZnJvbSBhIERBUE0gc2VxdWVuY2UgKi8KLXN0YXRpYyB2b2lkIGRhcG1fc2VxX3J1bl9jb2FsZXNjZWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorc3RhdGljIHZvaWQgZGFwbV9zZXFfcnVuX2NvYWxlc2NlZChzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCiAJCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqcGVuZGluZykKIHsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gZGFwbS0+Y2FyZDsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKLQlpbnQgcmVnLCBwb3dlciwgcmV0OworCWludCByZWcsIHBvd2VyOwogCXVuc2lnbmVkIGludCB2YWx1ZSA9IDA7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwogCXVuc2lnbmVkIGludCBjdXJfbWFzazsKQEAgLTczNSw2NCArODI1LDI2IEBACiAJCWlmIChwb3dlcikKIAkJCXZhbHVlIHw9IGN1cl9tYXNrOwogCi0JCXBvcF9kYmcoY29kZWMtPnBvcF90aW1lLAorCQlwb3BfZGJnKGRhcG0tPmRldiwgY2FyZC0+cG9wX3RpbWUsCiAJCQkicG9wIHRlc3QgOiBRdWV1ZSAlczogcmVnPTB4JXgsIDB4JXgvMHgleFxuIiwKIAkJCXctPm5hbWUsIHJlZywgdmFsdWUsIG1hc2spOwogCi0JCS8qIHBvd2VyIHVwIHByZSBldmVudCAqLwotCQlpZiAody0+cG93ZXIgJiYgdy0+ZXZlbnQgJiYKLQkJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QUkVfUE1VKSkgewotCQkJcG9wX2RiZyhjb2RlYy0+cG9wX3RpbWUsICJwb3AgdGVzdCA6ICVzIFBSRV9QTVVcbiIsCi0JCQkJdy0+bmFtZSk7Ci0JCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNVSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlwcl9lcnIoIiVzOiBwcmUgZXZlbnQgZmFpbGVkOiAlZFxuIiwKLQkJCQkgICAgICAgdy0+bmFtZSwgcmV0KTsKLQkJfQotCi0JCS8qIHBvd2VyIGRvd24gcHJlIGV2ZW50ICovCi0JCWlmICghdy0+cG93ZXIgJiYgdy0+ZXZlbnQgJiYKLQkJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QUkVfUE1EKSkgewotCQkJcG9wX2RiZyhjb2RlYy0+cG9wX3RpbWUsICJwb3AgdGVzdCA6ICVzIFBSRV9QTURcbiIsCi0JCQkJdy0+bmFtZSk7Ci0JCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNRCk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlwcl9lcnIoIiVzOiBwcmUgZXZlbnQgZmFpbGVkOiAlZFxuIiwKLQkJCQkgICAgICAgdy0+bmFtZSwgcmV0KTsKLQkJfQorCQkvKiBDaGVjayBmb3IgZXZlbnRzICovCisJCWRhcG1fc2VxX2NoZWNrX2V2ZW50KGRhcG0sIHcsIFNORF9TT0NfREFQTV9QUkVfUE1VKTsKKwkJZGFwbV9zZXFfY2hlY2tfZXZlbnQoZGFwbSwgdywgU05EX1NPQ19EQVBNX1BSRV9QTUQpOwogCX0KIAogCWlmIChyZWcgPj0gMCkgewotCQlwb3BfZGJnKGNvZGVjLT5wb3BfdGltZSwKKwkJcG9wX2RiZyhkYXBtLT5kZXYsIGNhcmQtPnBvcF90aW1lLAogCQkJInBvcCB0ZXN0IDogQXBwbHlpbmcgMHgleC8weCV4IHRvICV4IGluICVkbXNcbiIsCi0JCQl2YWx1ZSwgbWFzaywgcmVnLCBjb2RlYy0+cG9wX3RpbWUpOwotCQlwb3Bfd2FpdChjb2RlYy0+cG9wX3RpbWUpOwotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsIG1hc2ssIHZhbHVlKTsKKwkJCXZhbHVlLCBtYXNrLCByZWcsIGNhcmQtPnBvcF90aW1lKTsKKwkJcG9wX3dhaXQoY2FyZC0+cG9wX3RpbWUpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGRhcG0tPmNvZGVjLCByZWcsIG1hc2ssIHZhbHVlKTsKIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsIHBlbmRpbmcsIHBvd2VyX2xpc3QpIHsKLQkJLyogcG93ZXIgdXAgcG9zdCBldmVudCAqLwotCQlpZiAody0+cG93ZXIgJiYgdy0+ZXZlbnQgJiYKLQkJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QT1NUX1BNVSkpIHsKLQkJCXBvcF9kYmcoY29kZWMtPnBvcF90aW1lLCAicG9wIHRlc3QgOiAlcyBQT1NUX1BNVVxuIiwKLQkJCQl3LT5uYW1lKTsKLQkJCXJldCA9IHctPmV2ZW50KHcsCi0JCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNVSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlwcl9lcnIoIiVzOiBwb3N0IGV2ZW50IGZhaWxlZDogJWRcbiIsCi0JCQkJICAgICAgIHctPm5hbWUsIHJldCk7Ci0JCX0KLQotCQkvKiBwb3dlciBkb3duIHBvc3QgZXZlbnQgKi8KLQkJaWYgKCF3LT5wb3dlciAmJiB3LT5ldmVudCAmJgotCQkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSkgewotCQkJcG9wX2RiZyhjb2RlYy0+cG9wX3RpbWUsICJwb3AgdGVzdCA6ICVzIFBPU1RfUE1EXG4iLAotCQkJCXctPm5hbWUpOwotCQkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCXByX2VycigiJXM6IHBvc3QgZXZlbnQgZmFpbGVkOiAlZFxuIiwKLQkJCQkgICAgICAgdy0+bmFtZSwgcmV0KTsKLQkJfQorCQlkYXBtX3NlcV9jaGVja19ldmVudChkYXBtLCB3LCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpOworCQlkYXBtX3NlcV9jaGVja19ldmVudChkYXBtLCB3LCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpOwogCX0KIH0KIApAQCAtODA0LDI2ICs4NTYsMjkgQEAKICAqIEN1cnJlbnRseSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIG1vcmUgdGhhbiBhIHNpbmdsZSB3cml0ZSBpcyBub3QKICAqIGhhbmRsZWQuCiAgKi8KLXN0YXRpYyB2b2lkIGRhcG1fc2VxX3J1bihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCi0JCQkgaW50IGV2ZW50LCBpbnQgc29ydFtdKQorc3RhdGljIHZvaWQgZGFwbV9zZXFfcnVuKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKKwkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgZXZlbnQsIGludCBzb3J0W10pCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsICpuOwogCUxJU1RfSEVBRChwZW5kaW5nKTsKIAlpbnQgY3VyX3NvcnQgPSAtMTsKIAlpbnQgY3VyX3JlZyA9IFNORF9TT0NfTk9QTTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmN1cl9kYXBtID0gTlVMTDsKIAlpbnQgcmV0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHcsIG4sIGxpc3QsIHBvd2VyX2xpc3QpIHsKIAkJcmV0ID0gMDsKIAogCQkvKiBEbyB3ZSBuZWVkIHRvIGFwcGx5IGFueSBxdWV1ZWQgY2hhbmdlcz8gKi8KLQkJaWYgKHNvcnRbdy0+aWRdICE9IGN1cl9zb3J0IHx8IHctPnJlZyAhPSBjdXJfcmVnKSB7CisJCWlmIChzb3J0W3ctPmlkXSAhPSBjdXJfc29ydCB8fCB3LT5yZWcgIT0gY3VyX3JlZyB8fAorCQkgICAgdy0+ZGFwbSAhPSBjdXJfZGFwbSkgewogCQkJaWYgKCFsaXN0X2VtcHR5KCZwZW5kaW5nKSkKLQkJCQlkYXBtX3NlcV9ydW5fY29hbGVzY2VkKGNvZGVjLCAmcGVuZGluZyk7CisJCQkJZGFwbV9zZXFfcnVuX2NvYWxlc2NlZChjdXJfZGFwbSwgJnBlbmRpbmcpOwogCiAJCQlJTklUX0xJU1RfSEVBRCgmcGVuZGluZyk7CiAJCQljdXJfc29ydCA9IC0xOwogCQkJY3VyX3JlZyA9IFNORF9TT0NfTk9QTTsKKwkJCWN1cl9kYXBtID0gTlVMTDsKIAkJfQogCiAJCXN3aXRjaCAody0+aWQpIHsKQEAgLTg2NywxOSArOTIyLDU1IEBACiAJCQkvKiBRdWV1ZSBpdCB1cCBmb3IgYXBwbGljYXRpb24gKi8KIAkJCWN1cl9zb3J0ID0gc29ydFt3LT5pZF07CiAJCQljdXJfcmVnID0gdy0+cmVnOworCQkJY3VyX2RhcG0gPSB3LT5kYXBtOwogCQkJbGlzdF9tb3ZlKCZ3LT5wb3dlcl9saXN0LCAmcGVuZGluZyk7CiAJCQlicmVhazsKIAkJfQogCiAJCWlmIChyZXQgPCAwKQotCQkJcHJfZXJyKCJGYWlsZWQgdG8gYXBwbHkgd2lkZ2V0IHBvd2VyOiAlZFxuIiwKLQkJCSAgICAgICByZXQpOworCQkJZGV2X2Vycih3LT5kYXBtLT5kZXYsCisJCQkJIkZhaWxlZCB0byBhcHBseSB3aWRnZXQgcG93ZXI6ICVkXG4iLCByZXQpOwogCX0KIAogCWlmICghbGlzdF9lbXB0eSgmcGVuZGluZykpCi0JCWRhcG1fc2VxX3J1bl9jb2FsZXNjZWQoY29kZWMsICZwZW5kaW5nKTsKKwkJZGFwbV9zZXFfcnVuX2NvYWxlc2NlZChkYXBtLCAmcGVuZGluZyk7CiB9CiAKK3N0YXRpYyB2b2lkIGRhcG1fd2lkZ2V0X3VwZGF0ZShzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0pCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV91cGRhdGUgKnVwZGF0ZSA9IGRhcG0tPnVwZGF0ZTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKKwlpbnQgcmV0OworCisJaWYgKCF1cGRhdGUpCisJCXJldHVybjsKKworCXcgPSB1cGRhdGUtPndpZGdldDsKKworCWlmICh3LT5ldmVudCAmJgorCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUFJFX1JFRykpIHsKKwkJcmV0ID0gdy0+ZXZlbnQodywgdXBkYXRlLT5rY29udHJvbCwgU05EX1NPQ19EQVBNX1BSRV9SRUcpOworCQlpZiAocmV0ICE9IDApCisJCQlwcl9lcnIoIiVzIERBUE0gcHJlLWV2ZW50IGZhaWxlZDogJWRcbiIsCisJCQkgICAgICAgdy0+bmFtZSwgcmV0KTsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3VwZGF0ZV9iaXRzKHctPmNvZGVjLCB1cGRhdGUtPnJlZywgdXBkYXRlLT5tYXNrLAorCQkJCSAgdXBkYXRlLT52YWwpOworCWlmIChyZXQgPCAwKQorCQlwcl9lcnIoIiVzIERBUE0gdXBkYXRlIGZhaWxlZDogJWRcbiIsIHctPm5hbWUsIHJldCk7CisKKwlpZiAody0+ZXZlbnQgJiYKKwkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUkVHKSkgeworCQlyZXQgPSB3LT5ldmVudCh3LCB1cGRhdGUtPmtjb250cm9sLCBTTkRfU09DX0RBUE1fUE9TVF9SRUcpOworCQlpZiAocmV0ICE9IDApCisJCQlwcl9lcnIoIiVzIERBUE0gcG9zdC1ldmVudCBmYWlsZWQ6ICVkXG4iLAorCQkJICAgICAgIHctPm5hbWUsIHJldCk7CisJfQorfQorCisKKwogLyoKICAqIFNjYW4gZWFjaCBkYXBtIHdpZGdldCBmb3IgY29tcGxldGUgYXVkaW8gcGF0aC4KICAqIEEgY29tcGxldGUgcGF0aCBpcyBhIHJvdXRlIHRoYXQgaGFzIHZhbGlkIGVuZHBvaW50cyBpLmUuOi0KQEAgLTg4OSwyMCArOTgwLDI2IEBACiAgKiAgbyBJbnB1dCBwaW4gdG8gT3V0cHV0IHBpbiAoYnlwYXNzLCBzaWRldG9uZSkKICAqICBvIERBQyB0byBBREMgKGxvb3BiYWNrKS4KICAqLwotc3RhdGljIGludCBkYXBtX3Bvd2VyX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZXZlbnQpCitzdGF0aWMgaW50IGRhcG1fcG93ZXJfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gY29kZWMtPmNhcmQ7CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IGRhcG0tPmNvZGVjLT5jYXJkOwogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZDsKIAlMSVNUX0hFQUQodXBfbGlzdCk7CiAJTElTVF9IRUFEKGRvd25fbGlzdCk7CiAJaW50IHJldCA9IDA7CiAJaW50IHBvd2VyOwotCWludCBzeXNfcG93ZXIgPSAwOworCisJdHJhY2Vfc25kX3NvY19kYXBtX3N0YXJ0KGNhcmQpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkLCAmY2FyZC0+ZGFwbV9saXN0LCBsaXN0KQorCQlpZiAoZC0+bl93aWRnZXRzKQorCQkJZC0+ZGV2X3Bvd2VyID0gMDsKIAogCS8qIENoZWNrIHdoaWNoIHdpZGdldHMgd2UgbmVlZCB0byBwb3dlciBhbmQgc3RvcmUgdGhlbSBpbgogCSAqIGxpc3RzIGluZGljYXRpbmcgaWYgdGhleSBzaG91bGQgYmUgcG93ZXJlZCB1cCBvciBkb3duLgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmNvZGVjLT5kYXBtX3dpZGdldHMsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZjYXJkLT53aWRnZXRzLCBsaXN0KSB7CiAJCXN3aXRjaCAody0+aWQpIHsKIAkJY2FzZSBzbmRfc29jX2RhcG1fcHJlOgogCQkJZGFwbV9zZXFfaW5zZXJ0KHcsICZkb3duX2xpc3QsIGRhcG1fZG93bl9zZXEpOwpAQCAtOTIwLDExICsxMDE3LDEzIEBACiAJCQllbHNlCiAJCQkJcG93ZXIgPSAxOwogCQkJaWYgKHBvd2VyKQotCQkJCXN5c19wb3dlciA9IDE7CisJCQkJdy0+ZGFwbS0+ZGV2X3Bvd2VyID0gMTsKIAogCQkJaWYgKHctPnBvd2VyID09IHBvd2VyKQogCQkJCWNvbnRpbnVlOwogCisJCQl0cmFjZV9zbmRfc29jX2RhcG1fd2lkZ2V0X3Bvd2VyKHcsIHBvd2VyKTsKKwogCQkJaWYgKHBvd2VyKQogCQkJCWRhcG1fc2VxX2luc2VydCh3LCAmdXBfbGlzdCwgZGFwbV91cF9zZXEpOwogCQkJZWxzZQpAQCAtOTM4LDI2ICsxMDM3LDI2IEBACiAJLyogSWYgdGhlcmUgYXJlIG5vIERBUE0gd2lkZ2V0cyB0aGVuIHRyeSB0byBmaWd1cmUgb3V0IHBvd2VyIGZyb20gdGhlCiAJICogZXZlbnQgdHlwZS4KIAkgKi8KLQlpZiAobGlzdF9lbXB0eSgmY29kZWMtPmRhcG1fd2lkZ2V0cykpIHsKKwlpZiAoIWRhcG0tPm5fd2lkZ2V0cykgewogCQlzd2l0Y2ggKGV2ZW50KSB7CiAJCWNhc2UgU05EX1NPQ19EQVBNX1NUUkVBTV9TVEFSVDoKIAkJY2FzZSBTTkRfU09DX0RBUE1fU1RSRUFNX1JFU1VNRToKLQkJCXN5c19wb3dlciA9IDE7CisJCQlkYXBtLT5kZXZfcG93ZXIgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgU05EX1NPQ19EQVBNX1NUUkVBTV9TVE9QOgotCQkJc3lzX3Bvd2VyID0gISFjb2RlYy0+YWN0aXZlOworCQkJZGFwbS0+ZGV2X3Bvd2VyID0gISFkYXBtLT5jb2RlYy0+YWN0aXZlOwogCQkJYnJlYWs7CiAJCWNhc2UgU05EX1NPQ19EQVBNX1NUUkVBTV9TVVNQRU5EOgotCQkJc3lzX3Bvd2VyID0gMDsKKwkJCWRhcG0tPmRldl9wb3dlciA9IDA7CiAJCQlicmVhazsKIAkJY2FzZSBTTkRfU09DX0RBUE1fU1RSRUFNX05PUDoKLQkJCXN3aXRjaCAoY29kZWMtPmJpYXNfbGV2ZWwpIHsKKwkJCXN3aXRjaCAoZGFwbS0+Ymlhc19sZXZlbCkgewogCQkJCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCQkJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgotCQkJCQlzeXNfcG93ZXIgPSAwOworCQkJCQlkYXBtLT5kZXZfcG93ZXIgPSAwOwogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgotCQkJCQlzeXNfcG93ZXIgPSAxOworCQkJCQlkYXBtLT5kZXZfcG93ZXIgPSAxOwogCQkJCQlicmVhazsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtOTY2LDUyICsxMDY1LDcxIEBACiAJCX0KIAl9CiAKLQlpZiAoc3lzX3Bvd2VyICYmIGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKLQkJcmV0ID0gc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKGNhcmQsIGNvZGVjLAotCQkJCQkJICBTTkRfU09DX0JJQVNfU1RBTkRCWSk7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCXByX2VycigiRmFpbGVkIHRvIHR1cm4gb24gYmlhczogJWRcbiIsIHJldCk7Ci0JfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZCwgJmRhcG0tPmNhcmQtPmRhcG1fbGlzdCwgbGlzdCkgeworCQlpZiAoZC0+ZGV2X3Bvd2VyICYmIGQtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJcmV0ID0gc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKGNhcmQsIGQsCisJCQkJCQkJICBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisJCQlpZiAocmV0ICE9IDApCisJCQkJZGV2X2VycihkLT5kZXYsCisJCQkJCSJGYWlsZWQgdG8gdHVybiBvbiBiaWFzOiAlZFxuIiwgcmV0KTsKKwkJfQogCi0JLyogSWYgd2UncmUgY2hhbmdpbmcgdG8gYWxsIG9uIG9yIGFsbCBvZmYgdGhlbiBwcmVwYXJlICovCi0JaWYgKChzeXNfcG93ZXIgJiYgY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1NUQU5EQlkpIHx8Ci0JICAgICghc3lzX3Bvd2VyICYmIGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PTikpIHsKLQkJcmV0ID0gc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKGNhcmQsIGNvZGVjLCBTTkRfU09DX0JJQVNfUFJFUEFSRSk7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCXByX2VycigiRmFpbGVkIHRvIHByZXBhcmUgYmlhczogJWRcbiIsIHJldCk7CisJCS8qIElmIHdlJ3JlIGNoYW5naW5nIHRvIGFsbCBvbiBvciBhbGwgb2ZmIHRoZW4gcHJlcGFyZSAqLworCQlpZiAoKGQtPmRldl9wb3dlciAmJiBkLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19TVEFOREJZKSB8fAorCQkgICAgKCFkLT5kZXZfcG93ZXIgJiYgZC0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT04pKSB7CisJCQlyZXQgPSBzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoY2FyZCwgZCwKKwkJCQkJCQkgIFNORF9TT0NfQklBU19QUkVQQVJFKTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlkZXZfZXJyKGQtPmRldiwKKwkJCQkJIkZhaWxlZCB0byBwcmVwYXJlIGJpYXM6ICVkXG4iLCByZXQpOworCQl9CiAJfQogCiAJLyogUG93ZXIgZG93biB3aWRnZXRzIGZpcnN0OyB0cnkgdG8gYXZvaWQgYW1wbGlmeWluZyBwb3BzLiAqLwotCWRhcG1fc2VxX3J1bihjb2RlYywgJmRvd25fbGlzdCwgZXZlbnQsIGRhcG1fZG93bl9zZXEpOworCWRhcG1fc2VxX3J1bihkYXBtLCAmZG93bl9saXN0LCBldmVudCwgZGFwbV9kb3duX3NlcSk7CisKKwlkYXBtX3dpZGdldF91cGRhdGUoZGFwbSk7CiAKIAkvKiBOb3cgcG93ZXIgdXAuICovCi0JZGFwbV9zZXFfcnVuKGNvZGVjLCAmdXBfbGlzdCwgZXZlbnQsIGRhcG1fdXBfc2VxKTsKKwlkYXBtX3NlcV9ydW4oZGFwbSwgJnVwX2xpc3QsIGV2ZW50LCBkYXBtX3VwX3NlcSk7CiAKLQkvKiBJZiB3ZSBqdXN0IHBvd2VyZWQgdGhlIGxhc3QgdGhpbmcgb2ZmIGRyb3AgdG8gc3RhbmRieSBiaWFzICovCi0JaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19QUkVQQVJFICYmICFzeXNfcG93ZXIpIHsKLQkJcmV0ID0gc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKGNhcmQsIGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCXByX2VycigiRmFpbGVkIHRvIGFwcGx5IHN0YW5kYnkgYmlhczogJWRcbiIsIHJldCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkLCAmZGFwbS0+Y2FyZC0+ZGFwbV9saXN0LCBsaXN0KSB7CisJCS8qIElmIHdlIGp1c3QgcG93ZXJlZCB0aGUgbGFzdCB0aGluZyBvZmYgZHJvcCB0byBzdGFuZGJ5IGJpYXMgKi8KKwkJaWYgKGQtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1BSRVBBUkUgJiYgIWQtPmRldl9wb3dlcikgeworCQkJcmV0ID0gc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKGNhcmQsIGQsCisJCQkJCQkJICBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisJCQlpZiAocmV0ICE9IDApCisJCQkJZGV2X2VycihkLT5kZXYsCisJCQkJCSJGYWlsZWQgdG8gYXBwbHkgc3RhbmRieSBiaWFzOiAlZFxuIiwKKwkJCQkJcmV0KTsKKwkJfQorCisJCS8qIElmIHdlJ3JlIGluIHN0YW5kYnkgYW5kIGNhbiBzdXBwb3J0IGJpYXMgb2ZmIHRoZW4gZG8gdGhhdCAqLworCQlpZiAoZC0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfU1RBTkRCWSAmJgorCQkgICAgZC0+aWRsZV9iaWFzX29mZikgeworCQkJcmV0ID0gc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKGNhcmQsIGQsCisJCQkJCQkJICBTTkRfU09DX0JJQVNfT0ZGKTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlkZXZfZXJyKGQtPmRldiwKKwkJCQkJIkZhaWxlZCB0byB0dXJuIG9mZiBiaWFzOiAlZFxuIiwgcmV0KTsKKwkJfQorCisJCS8qIElmIHdlIGp1c3QgcG93ZXJlZCB1cCB0aGVuIG1vdmUgdG8gYWN0aXZlIGJpYXMgKi8KKwkJaWYgKGQtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1BSRVBBUkUgJiYgZC0+ZGV2X3Bvd2VyKSB7CisJCQlyZXQgPSBzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoY2FyZCwgZCwKKwkJCQkJCQkgIFNORF9TT0NfQklBU19PTik7CisJCQlpZiAocmV0ICE9IDApCisJCQkJZGV2X2VycihkLT5kZXYsCisJCQkJCSJGYWlsZWQgdG8gYXBwbHkgYWN0aXZlIGJpYXM6ICVkXG4iLAorCQkJCQlyZXQpOworCQl9CiAJfQogCi0JLyogSWYgd2UncmUgaW4gc3RhbmRieSBhbmQgY2FuIHN1cHBvcnQgYmlhcyBvZmYgdGhlbiBkbyB0aGF0ICovCi0JaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19TVEFOREJZICYmCi0JICAgIGNvZGVjLT5pZGxlX2JpYXNfb2ZmKSB7Ci0JCXJldCA9IHNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChjYXJkLCBjb2RlYywgU05EX1NPQ19CSUFTX09GRik7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCXByX2VycigiRmFpbGVkIHRvIHR1cm4gb2ZmIGJpYXM6ICVkXG4iLCByZXQpOwotCX0KKwlwb3BfZGJnKGRhcG0tPmRldiwgY2FyZC0+cG9wX3RpbWUsCisJCSJEQVBNIHNlcXVlbmNpbmcgZmluaXNoZWQsIHdhaXRpbmcgJWRtc1xuIiwgY2FyZC0+cG9wX3RpbWUpOworCXBvcF93YWl0KGNhcmQtPnBvcF90aW1lKTsKIAotCS8qIElmIHdlIGp1c3QgcG93ZXJlZCB1cCB0aGVuIG1vdmUgdG8gYWN0aXZlIGJpYXMgKi8KLQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1BSRVBBUkUgJiYgc3lzX3Bvd2VyKSB7Ci0JCXJldCA9IHNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChjYXJkLCBjb2RlYywgU05EX1NPQ19CSUFTX09OKTsKLQkJaWYgKHJldCAhPSAwKQotCQkJcHJfZXJyKCJGYWlsZWQgdG8gYXBwbHkgYWN0aXZlIGJpYXM6ICVkXG4iLCByZXQpOwotCX0KLQotCXBvcF9kYmcoY29kZWMtPnBvcF90aW1lLCAiREFQTSBzZXF1ZW5jaW5nIGZpbmlzaGVkLCB3YWl0aW5nICVkbXNcbiIsCi0JCWNvZGVjLT5wb3BfdGltZSk7Ci0JcG9wX3dhaXQoY29kZWMtPnBvcF90aW1lKTsKKwl0cmFjZV9zbmRfc29jX2RhcG1fZG9uZShjYXJkKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTAzOCw5ICsxMTU2LDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpbiA9IGlzX2Nvbm5lY3RlZF9pbnB1dF9lcCh3KTsKLQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOworCWRhcG1fY2xlYXJfd2Fsayh3LT5kYXBtKTsKIAlvdXQgPSBpc19jb25uZWN0ZWRfb3V0cHV0X2VwKHcpOwotCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7CisJZGFwbV9jbGVhcl93YWxrKHctPmRhcG0pOwogCiAJcmV0ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlczogJXMgIGluICVkIG91dCAlZCIsCiAJCSAgICAgICB3LT5uYW1lLCB3LT5wb3dlciA/ICJPbiIgOiAiT2ZmIiwgaW4sIG91dCk7CkBAIC0xMDkwLDI5ICsxMjA4LDI5IEBACiAJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAogfTsKIAotdm9pZCBzbmRfc29jX2RhcG1fZGVidWdmc19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3ZvaWQgc25kX3NvY19kYXBtX2RlYnVnZnNfaW5pdChzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0pCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CiAJc3RydWN0IGRlbnRyeSAqZDsKIAotCWlmICghY29kZWMtPmRlYnVnZnNfZGFwbSkKKwlpZiAoIWRhcG0tPmRlYnVnZnNfZGFwbSkKIAkJcmV0dXJuOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmY29kZWMtPmRhcG1fd2lkZ2V0cywgbGlzdCkgewotCQlpZiAoIXctPm5hbWUpCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmZGFwbS0+Y2FyZC0+d2lkZ2V0cywgbGlzdCkgeworCQlpZiAoIXctPm5hbWUgfHwgdy0+ZGFwbSAhPSBkYXBtKQogCQkJY29udGludWU7CiAKIAkJZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUody0+bmFtZSwgMDQ0NCwKLQkJCQkJY29kZWMtPmRlYnVnZnNfZGFwbSwgdywKKwkJCQkJZGFwbS0+ZGVidWdmc19kYXBtLCB3LAogCQkJCQkmZGFwbV93aWRnZXRfcG93ZXJfZm9wcyk7CiAJCWlmICghZCkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiQVNvQzogRmFpbGVkIHRvIGNyZWF0ZSAlcyBkZWJ1Z2ZzIGZpbGVcbiIsCi0JCQkgICAgICAgdy0+bmFtZSk7CisJCQlkZXZfd2Fybih3LT5kYXBtLT5kZXYsCisJCQkJIkFTb0M6IEZhaWxlZCB0byBjcmVhdGUgJXMgZGVidWdmcyBmaWxlXG4iLAorCQkJCXctPm5hbWUpOwogCX0KIH0KICNlbHNlCi12b2lkIHNuZF9zb2NfZGFwbV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQordm9pZCBzbmRfc29jX2RhcG1fZGVidWdmc19pbml0KHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSkKIHsKIH0KICNlbmRpZgpAQCAtMTEyNiw2ICsxMjQ0LDcgQEAKIAlpbnQgZm91bmQgPSAwOwogCiAJaWYgKHdpZGdldC0+aWQgIT0gc25kX3NvY19kYXBtX211eCAmJgorCSAgICB3aWRnZXQtPmlkICE9IHNuZF9zb2NfZGFwbV92aXJ0X211eCAmJgogCSAgICB3aWRnZXQtPmlkICE9IHNuZF9zb2NfZGFwbV92YWx1ZV9tdXgpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC0xMTMzLDcgKzEyNTIsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIGZpbmQgZGFwbSB3aWRnZXQgcGF0aCBhc3NvYyB3aXRoIGtjb250cm9sICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwYXRoLCAmd2lkZ2V0LT5jb2RlYy0+ZGFwbV9wYXRocywgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkocGF0aCwgJndpZGdldC0+ZGFwbS0+Y2FyZC0+cGF0aHMsIGxpc3QpIHsKIAkJaWYgKHBhdGgtPmtjb250cm9sICE9IGtjb250cm9sKQogCQkJY29udGludWU7CiAKQEAgLTExNDksNyArMTI2OCw3IEBACiAJfQogCiAJaWYgKGZvdW5kKQotCQlkYXBtX3Bvd2VyX3dpZGdldHMod2lkZ2V0LT5jb2RlYywgU05EX1NPQ19EQVBNX1NUUkVBTV9OT1ApOworCQlkYXBtX3Bvd2VyX3dpZGdldHMod2lkZ2V0LT5kYXBtLCBTTkRfU09DX0RBUE1fU1RSRUFNX05PUCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNjcsNyArMTI4Niw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogZmluZCBkYXBtIHdpZGdldCBwYXRoIGFzc29jIHdpdGgga2NvbnRyb2wgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdGgsICZ3aWRnZXQtPmNvZGVjLT5kYXBtX3BhdGhzLCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXRoLCAmd2lkZ2V0LT5kYXBtLT5jYXJkLT5wYXRocywgbGlzdCkgewogCQlpZiAocGF0aC0+a2NvbnRyb2wgIT0ga2NvbnRyb2wpCiAJCQljb250aW51ZTsKIApAQCAtMTE3OCw3ICsxMjk3LDcgQEAKIAl9CiAKIAlpZiAoZm91bmQpCi0JCWRhcG1fcG93ZXJfd2lkZ2V0cyh3aWRnZXQtPmNvZGVjLCBTTkRfU09DX0RBUE1fU1RSRUFNX05PUCk7CisJCWRhcG1fcG93ZXJfd2lkZ2V0cyh3aWRnZXQtPmRhcG0sIFNORF9TT0NfREFQTV9TVFJFQU1fTk9QKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTE5NCw3ICsxMzEzLDkgQEAKIAlpbnQgY291bnQgPSAwOwogCWNoYXIgKnN0YXRlID0gIm5vdCBzZXQiOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmY29kZWMtPmRhcG1fd2lkZ2V0cywgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmNvZGVjLT5jYXJkLT53aWRnZXRzLCBsaXN0KSB7CisJCWlmICh3LT5kYXBtICE9ICZjb2RlYy0+ZGFwbSkKKwkJCWNvbnRpbnVlOwogCiAJCS8qIG9ubHkgZGlzcGxheSB3aWRnZXRzIHRoYXQgYnVybm0gcG93ZXIgKi8KIAkJc3dpdGNoICh3LT5pZCkgewpAQCAtMTIwNiw2ICsxMzI3LDcgQEAKIAkJY2FzZSBzbmRfc29jX2RhcG1fZGFjOgogCQljYXNlIHNuZF9zb2NfZGFwbV9hZGM6CiAJCWNhc2Ugc25kX3NvY19kYXBtX3BnYToKKwkJY2FzZSBzbmRfc29jX2RhcG1fb3V0X2RydjoKIAkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CiAJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKIAkJY2FzZSBzbmRfc29jX2RhcG1fc3VwcGx5OgpAQCAtMTIxOCw3ICsxMzQwLDcgQEAKIAkJfQogCX0KIAotCXN3aXRjaCAoY29kZWMtPmJpYXNfbGV2ZWwpIHsKKwlzd2l0Y2ggKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKIAkJc3RhdGUgPSAiT24iOwogCQlicmVhazsKQEAgLTEyNTAsMzEgKzEzNzIsNTAgQEAKIH0KIAogLyogZnJlZSBhbGwgZGFwbSB3aWRnZXRzIGFuZCByZXNvdXJjZXMgKi8KLXN0YXRpYyB2b2lkIGRhcG1fZnJlZV93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGRhcG1fZnJlZV93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywgKm5leHRfdzsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3BhdGggKnAsICpuZXh0X3A7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodywgbmV4dF93LCAmY29kZWMtPmRhcG1fd2lkZ2V0cywgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3LCBuZXh0X3csICZkYXBtLT5jYXJkLT53aWRnZXRzLCBsaXN0KSB7CisJCWlmICh3LT5kYXBtICE9IGRhcG0pCisJCQljb250aW51ZTsKIAkJbGlzdF9kZWwoJnctPmxpc3QpOworCQkvKgorCQkgKiByZW1vdmUgc291cmNlIGFuZCBzaW5rIHBhdGhzIGFzc29jaWF0ZWQgdG8gdGhpcyB3aWRnZXQuCisJCSAqIFdoaWxlIHJlbW92aW5nIHRoZSBwYXRoLCByZW1vdmUgcmVmZXJlbmNlIHRvIGl0IGZyb20gYm90aAorCQkgKiBzb3VyY2UgYW5kIHNpbmsgd2lkZ2V0cyBzbyB0aGF0IHBhdGggaXMgcmVtb3ZlZCBvbmx5IG9uY2UuCisJCSAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dF9wLCAmdy0+c291cmNlcywgbGlzdF9zaW5rKSB7CisJCQlsaXN0X2RlbCgmcC0+bGlzdF9zaW5rKTsKKwkJCWxpc3RfZGVsKCZwLT5saXN0X3NvdXJjZSk7CisJCQlsaXN0X2RlbCgmcC0+bGlzdCk7CisJCQlrZnJlZShwLT5sb25nX25hbWUpOworCQkJa2ZyZWUocCk7CisJCX0KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG5leHRfcCwgJnctPnNpbmtzLCBsaXN0X3NvdXJjZSkgeworCQkJbGlzdF9kZWwoJnAtPmxpc3Rfc2luayk7CisJCQlsaXN0X2RlbCgmcC0+bGlzdF9zb3VyY2UpOworCQkJbGlzdF9kZWwoJnAtPmxpc3QpOworCQkJa2ZyZWUocC0+bG9uZ19uYW1lKTsKKwkJCWtmcmVlKHApOworCQl9CisJCWtmcmVlKHctPm5hbWUpOwogCQlrZnJlZSh3KTsKIAl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dF9wLCAmY29kZWMtPmRhcG1fcGF0aHMsIGxpc3QpIHsKLQkJbGlzdF9kZWwoJnAtPmxpc3QpOwotCQlrZnJlZShwLT5sb25nX25hbWUpOwotCQlrZnJlZShwKTsKLQl9CiB9CiAKLXN0YXRpYyBpbnQgc25kX3NvY19kYXBtX3NldF9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorc3RhdGljIGludCBzbmRfc29jX2RhcG1fc2V0X3BpbihzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCiAJCQkJY29uc3QgY2hhciAqcGluLCBpbnQgc3RhdHVzKQogewogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmY29kZWMtPmRhcG1fd2lkZ2V0cywgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmRhcG0tPmNhcmQtPndpZGdldHMsIGxpc3QpIHsKKwkJaWYgKHctPmRhcG0gIT0gZGFwbSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoIXN0cmNtcCh3LT5uYW1lLCBwaW4pKSB7Ci0JCQlwcl9kZWJ1ZygiZGFwbTogJXM6IHBpbiAlc1xuIiwgY29kZWMtPm5hbWUsIHBpbik7CisJCQlkZXZfZGJnKHctPmRhcG0tPmRldiwgImRhcG06IHBpbiAlcyA9ICVkXG4iLAorCQkJCXBpbiwgc3RhdHVzKTsKIAkJCXctPmNvbm5lY3RlZCA9IHN0YXR1czsKIAkJCS8qIEFsbG93IGRpc2FibGluZyBvZiBmb3JjZWQgcGlucyAqLwogCQkJaWYgKHN0YXR1cyA9PSAwKQpAQCAtMTI4Myw0NiArMTQyNCw3MiBAQAogCQl9CiAJfQogCi0JcHJfZXJyKCJkYXBtOiAlczogY29uZmlndXJpbmcgdW5rbm93biBwaW4gJXNcbiIsIGNvZGVjLT5uYW1lLCBwaW4pOworCWRldl9lcnIoZGFwbS0+ZGV2LCAiZGFwbTogdW5rbm93biBwaW4gJXNcbiIsIHBpbik7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qKgogICogc25kX3NvY19kYXBtX3N5bmMgLSBzY2FuIGFuZCBwb3dlciBkYXBtIHBhdGhzCi0gKiBAY29kZWM6IGF1ZGlvIGNvZGVjCisgKiBAZGFwbTogREFQTSBjb250ZXh0CiAgKgogICogV2Fsa3MgYWxsIGRhcG0gYXVkaW8gcGF0aHMgYW5kIHBvd2VycyB3aWRnZXRzIGFjY29yZGluZyB0byB0aGVpcgogICogc3RyZWFtIG9yIHBhdGggdXNhZ2UuCiAgKgogICogUmV0dXJucyAwIGZvciBzdWNjZXNzLgogICovCi1pbnQgc25kX3NvY19kYXBtX3N5bmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoraW50IHNuZF9zb2NfZGFwbV9zeW5jKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSkKIHsKLQlyZXR1cm4gZGFwbV9wb3dlcl93aWRnZXRzKGNvZGVjLCBTTkRfU09DX0RBUE1fU1RSRUFNX05PUCk7CisJcmV0dXJuIGRhcG1fcG93ZXJfd2lkZ2V0cyhkYXBtLCBTTkRfU09DX0RBUE1fU1RSRUFNX05PUCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fc3luYyk7CiAKLXN0YXRpYyBpbnQgc25kX3NvY19kYXBtX2FkZF9yb3V0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCitzdGF0aWMgaW50IHNuZF9zb2NfZGFwbV9hZGRfcm91dGUoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAogCQkJCSAgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSAqcm91dGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwYXRoOwogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3c291cmNlID0gTlVMTCwgKndzaW5rID0gTlVMTCwgKnc7Ci0JY29uc3QgY2hhciAqc2luayA9IHJvdXRlLT5zaW5rOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3dHNvdXJjZSA9IE5VTEwsICp3dHNpbmsgPSBOVUxMOworCWNvbnN0IGNoYXIgKnNpbms7CiAJY29uc3QgY2hhciAqY29udHJvbCA9IHJvdXRlLT5jb250cm9sOwotCWNvbnN0IGNoYXIgKnNvdXJjZSA9IHJvdXRlLT5zb3VyY2U7CisJY29uc3QgY2hhciAqc291cmNlOworCWNoYXIgcHJlZml4ZWRfc2lua1s4MF07CisJY2hhciBwcmVmaXhlZF9zb3VyY2VbODBdOwogCWludCByZXQgPSAwOwogCi0JLyogZmluZCBzcmMgYW5kIGRlc3Qgd2lkZ2V0cyAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmNvZGVjLT5kYXBtX3dpZGdldHMsIGxpc3QpIHsKKwlpZiAoZGFwbS0+Y29kZWMtPm5hbWVfcHJlZml4KSB7CisJCXNucHJpbnRmKHByZWZpeGVkX3NpbmssIHNpemVvZihwcmVmaXhlZF9zaW5rKSwgIiVzICVzIiwKKwkJCSBkYXBtLT5jb2RlYy0+bmFtZV9wcmVmaXgsIHJvdXRlLT5zaW5rKTsKKwkJc2luayA9IHByZWZpeGVkX3Npbms7CisJCXNucHJpbnRmKHByZWZpeGVkX3NvdXJjZSwgc2l6ZW9mKHByZWZpeGVkX3NvdXJjZSksICIlcyAlcyIsCisJCQkgZGFwbS0+Y29kZWMtPm5hbWVfcHJlZml4LCByb3V0ZS0+c291cmNlKTsKKwkJc291cmNlID0gcHJlZml4ZWRfc291cmNlOworCX0gZWxzZSB7CisJCXNpbmsgPSByb3V0ZS0+c2luazsKKwkJc291cmNlID0gcm91dGUtPnNvdXJjZTsKKwl9CiAKKwkvKgorCSAqIGZpbmQgc3JjIGFuZCBkZXN0IHdpZGdldHMgb3ZlciBhbGwgd2lkZ2V0cyBidXQgZmF2b3IgYSB3aWRnZXQgZnJvbQorCSAqIGN1cnJlbnQgREFQTSBjb250ZXh0CisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmZGFwbS0+Y2FyZC0+d2lkZ2V0cywgbGlzdCkgewogCQlpZiAoIXdzaW5rICYmICEoc3RyY21wKHctPm5hbWUsIHNpbmspKSkgewotCQkJd3NpbmsgPSB3OworCQkJd3RzaW5rID0gdzsKKwkJCWlmICh3LT5kYXBtID09IGRhcG0pCisJCQkJd3NpbmsgPSB3OwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKCF3c291cmNlICYmICEoc3RyY21wKHctPm5hbWUsIHNvdXJjZSkpKSB7Ci0JCQl3c291cmNlID0gdzsKKwkJCXd0c291cmNlID0gdzsKKwkJCWlmICh3LT5kYXBtID09IGRhcG0pCisJCQkJd3NvdXJjZSA9IHc7CiAJCX0KIAl9CisJLyogdXNlIHdpZGdldCBmcm9tIGFub3RoZXIgREFQTSBjb250ZXh0IGlmIG5vdCBmb3VuZCBmcm9tIHRoaXMgKi8KKwlpZiAoIXdzaW5rKQorCQl3c2luayA9IHd0c2luazsKKwlpZiAoIXdzb3VyY2UpCisJCXdzb3VyY2UgPSB3dHNvdXJjZTsKIAogCWlmICh3c291cmNlID09IE5VTEwgfHwgd3NpbmsgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMzU2LDcgKzE1MjMsNyBAQAogCiAJLyogY29ubmVjdCBzdGF0aWMgcGF0aHMgKi8KIAlpZiAoY29udHJvbCA9PSBOVUxMKSB7Ci0JCWxpc3RfYWRkKCZwYXRoLT5saXN0LCAmY29kZWMtPmRhcG1fcGF0aHMpOworCQlsaXN0X2FkZCgmcGF0aC0+bGlzdCwgJmRhcG0tPmNhcmQtPnBhdGhzKTsKIAkJbGlzdF9hZGQoJnBhdGgtPmxpc3Rfc2luaywgJndzaW5rLT5zb3VyY2VzKTsKIAkJbGlzdF9hZGQoJnBhdGgtPmxpc3Rfc291cmNlLCAmd3NvdXJjZS0+c2lua3MpOwogCQlwYXRoLT5jb25uZWN0ID0gMTsKQEAgLTEzNjgsNiArMTUzNSw3IEBACiAJY2FzZSBzbmRfc29jX2RhcG1fYWRjOgogCWNhc2Ugc25kX3NvY19kYXBtX2RhYzoKIAljYXNlIHNuZF9zb2NfZGFwbV9wZ2E6CisJY2FzZSBzbmRfc29jX2RhcG1fb3V0X2RydjoKIAljYXNlIHNuZF9zb2NfZGFwbV9pbnB1dDoKIAljYXNlIHNuZF9zb2NfZGFwbV9vdXRwdXQ6CiAJY2FzZSBzbmRfc29jX2RhcG1fbWljYmlhczoKQEAgLTEzNzcsMTQgKzE1NDUsMTUgQEAKIAljYXNlIHNuZF9zb2NfZGFwbV9zdXBwbHk6CiAJY2FzZSBzbmRfc29jX2RhcG1fYWlmX2luOgogCWNhc2Ugc25kX3NvY19kYXBtX2FpZl9vdXQ6Ci0JCWxpc3RfYWRkKCZwYXRoLT5saXN0LCAmY29kZWMtPmRhcG1fcGF0aHMpOworCQlsaXN0X2FkZCgmcGF0aC0+bGlzdCwgJmRhcG0tPmNhcmQtPnBhdGhzKTsKIAkJbGlzdF9hZGQoJnBhdGgtPmxpc3Rfc2luaywgJndzaW5rLT5zb3VyY2VzKTsKIAkJbGlzdF9hZGQoJnBhdGgtPmxpc3Rfc291cmNlLCAmd3NvdXJjZS0+c2lua3MpOwogCQlwYXRoLT5jb25uZWN0ID0gMTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBzbmRfc29jX2RhcG1fbXV4OgorCWNhc2Ugc25kX3NvY19kYXBtX3ZpcnRfbXV4OgogCWNhc2Ugc25kX3NvY19kYXBtX3ZhbHVlX211eDoKLQkJcmV0ID0gZGFwbV9jb25uZWN0X211eChjb2RlYywgd3NvdXJjZSwgd3NpbmssIHBhdGgsIGNvbnRyb2wsCisJCXJldCA9IGRhcG1fY29ubmVjdF9tdXgoZGFwbSwgd3NvdXJjZSwgd3NpbmssIHBhdGgsIGNvbnRyb2wsCiAJCQkmd3NpbmstPmtjb250cm9sc1swXSk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCWdvdG8gZXJyOwpAQCAtMTM5Miw3ICsxNTYxLDcgQEAKIAljYXNlIHNuZF9zb2NfZGFwbV9zd2l0Y2g6CiAJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CiAJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgotCQlyZXQgPSBkYXBtX2Nvbm5lY3RfbWl4ZXIoY29kZWMsIHdzb3VyY2UsIHdzaW5rLCBwYXRoLCBjb250cm9sKTsKKwkJcmV0ID0gZGFwbV9jb25uZWN0X21peGVyKGRhcG0sIHdzb3VyY2UsIHdzaW5rLCBwYXRoLCBjb250cm9sKTsKIAkJaWYgKHJldCAhPSAwKQogCQkJZ290byBlcnI7CiAJCWJyZWFrOwpAQCAtMTQwMCw3ICsxNTY5LDcgQEAKIAljYXNlIHNuZF9zb2NfZGFwbV9taWM6CiAJY2FzZSBzbmRfc29jX2RhcG1fbGluZToKIAljYXNlIHNuZF9zb2NfZGFwbV9zcGs6Ci0JCWxpc3RfYWRkKCZwYXRoLT5saXN0LCAmY29kZWMtPmRhcG1fcGF0aHMpOworCQlsaXN0X2FkZCgmcGF0aC0+bGlzdCwgJmRhcG0tPmNhcmQtPnBhdGhzKTsKIAkJbGlzdF9hZGQoJnBhdGgtPmxpc3Rfc2luaywgJndzaW5rLT5zb3VyY2VzKTsKIAkJbGlzdF9hZGQoJnBhdGgtPmxpc3Rfc291cmNlLCAmd3NvdXJjZS0+c2lua3MpOwogCQlwYXRoLT5jb25uZWN0ID0gMDsKQEAgLTE0MDksMTUgKzE1NzgsMTUgQEAKIAlyZXR1cm4gMDsKIAogZXJyOgotCXByaW50ayhLRVJOX1dBUk5JTkcgImFzb2M6IG5vIGRhcG0gbWF0Y2ggZm9yICVzIC0tPiAlcyAtLT4gJXNcbiIsIHNvdXJjZSwKLQkJY29udHJvbCwgc2luayk7CisJZGV2X3dhcm4oZGFwbS0+ZGV2LCAiYXNvYzogbm8gZGFwbSBtYXRjaCBmb3IgJXMgLS0+ICVzIC0tPiAlc1xuIiwKKwkJIHNvdXJjZSwgY29udHJvbCwgc2luayk7CiAJa2ZyZWUocGF0aCk7CiAJcmV0dXJuIHJldDsKIH0KIAogLyoqCiAgKiBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyAtIEFkZCByb3V0ZXMgYmV0d2VlbiBEQVBNIHdpZGdldHMKLSAqIEBjb2RlYzogY29kZWMKKyAqIEBkYXBtOiBEQVBNIGNvbnRleHQKICAqIEByb3V0ZTogYXVkaW8gcm91dGVzCiAgKiBAbnVtOiBudW1iZXIgb2Ygcm91dGVzCiAgKgpAQCAtMTQyOCwxNyArMTU5NywxNiBAQAogICogUmV0dXJucyAwIGZvciBzdWNjZXNzIGVsc2UgZXJyb3IuIE9uIGVycm9yIGFsbCByZXNvdXJjZXMgY2FuIGJlIGZyZWVkCiAgKiB3aXRoIGEgY2FsbCB0byBzbmRfc29jX2NhcmRfZnJlZSgpLgogICovCi1pbnQgc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAoraW50IHNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKIAkJCSAgICBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlICpyb3V0ZSwgaW50IG51bSkKIHsKIAlpbnQgaSwgcmV0OwogCiAJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0JCXJldCA9IHNuZF9zb2NfZGFwbV9hZGRfcm91dGUoY29kZWMsIHJvdXRlKTsKKwkJcmV0ID0gc25kX3NvY19kYXBtX2FkZF9yb3V0ZShkYXBtLCByb3V0ZSk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhZGQgcm91dGUgJXMtPiVzXG4iLAotCQkJICAgICAgIHJvdXRlLT5zb3VyY2UsCi0JCQkgICAgICAgcm91dGUtPnNpbmspOworCQkJZGV2X2VycihkYXBtLT5kZXYsICJGYWlsZWQgdG8gYWRkIHJvdXRlICVzLT4lc1xuIiwKKwkJCQlyb3V0ZS0+c291cmNlLCByb3V0ZS0+c2luayk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCXJvdXRlKys7CkBAIC0xNDUwLDE3ICsxNjE4LDE3IEBACiAKIC8qKgogICogc25kX3NvY19kYXBtX25ld193aWRnZXRzIC0gYWRkIG5ldyBkYXBtIHdpZGdldHMKLSAqIEBjb2RlYzogYXVkaW8gY29kZWMKKyAqIEBkYXBtOiBEQVBNIGNvbnRleHQKICAqCiAgKiBDaGVja3MgdGhlIGNvZGVjIGZvciBhbnkgbmV3IGRhcG0gd2lkZ2V0cyBhbmQgY3JlYXRlcyB0aGVtIGlmIGZvdW5kLgogICoKICAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcy4KICAqLwotaW50IHNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCitpbnQgc25kX3NvY19kYXBtX25ld193aWRnZXRzKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmNvZGVjLT5kYXBtX3dpZGdldHMsIGxpc3QpCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmZGFwbS0+Y2FyZC0+d2lkZ2V0cywgbGlzdCkKIAl7CiAJCWlmICh3LT5uZXcpCiAJCQljb250aW51ZTsKQEAgLTE0NzAsMTIgKzE2MzgsMTMgQEAKIAkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CiAJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKIAkJCXctPnBvd2VyX2NoZWNrID0gZGFwbV9nZW5lcmljX2NoZWNrX3Bvd2VyOwotCQkJZGFwbV9uZXdfbWl4ZXIoY29kZWMsIHcpOworCQkJZGFwbV9uZXdfbWl4ZXIoZGFwbSwgdyk7CiAJCQlicmVhazsKIAkJY2FzZSBzbmRfc29jX2RhcG1fbXV4OgorCQljYXNlIHNuZF9zb2NfZGFwbV92aXJ0X211eDoKIAkJY2FzZSBzbmRfc29jX2RhcG1fdmFsdWVfbXV4OgogCQkJdy0+cG93ZXJfY2hlY2sgPSBkYXBtX2dlbmVyaWNfY2hlY2tfcG93ZXI7Ci0JCQlkYXBtX25ld19tdXgoY29kZWMsIHcpOworCQkJZGFwbV9uZXdfbXV4KGRhcG0sIHcpOwogCQkJYnJlYWs7CiAJCWNhc2Ugc25kX3NvY19kYXBtX2FkYzoKIAkJY2FzZSBzbmRfc29jX2RhcG1fYWlmX291dDoKQEAgLTE0ODYsOCArMTY1NSw5IEBACiAJCQl3LT5wb3dlcl9jaGVjayA9IGRhcG1fZGFjX2NoZWNrX3Bvd2VyOwogCQkJYnJlYWs7CiAJCWNhc2Ugc25kX3NvY19kYXBtX3BnYToKKwkJY2FzZSBzbmRfc29jX2RhcG1fb3V0X2RydjoKIAkJCXctPnBvd2VyX2NoZWNrID0gZGFwbV9nZW5lcmljX2NoZWNrX3Bvd2VyOwotCQkJZGFwbV9uZXdfcGdhKGNvZGVjLCB3KTsKKwkJCWRhcG1fbmV3X3BnYShkYXBtLCB3KTsKIAkJCWJyZWFrOwogCQljYXNlIHNuZF9zb2NfZGFwbV9pbnB1dDoKIAkJY2FzZSBzbmRfc29jX2RhcG1fb3V0cHV0OgpAQCAtMTUwOCw3ICsxNjc4LDcgQEAKIAkJdy0+bmV3ID0gMTsKIAl9CiAKLQlkYXBtX3Bvd2VyX3dpZGdldHMoY29kZWMsIFNORF9TT0NfREFQTV9TVFJFQU1fTk9QKTsKKwlkYXBtX3Bvd2VyX3dpZGdldHMoZGFwbSwgU05EX1NPQ19EQVBNX1NUUkVBTV9OT1ApOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX25ld193aWRnZXRzKTsKQEAgLTE1NjksMTMgKzE3MzksMTIgQEAKIAkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCXVuc2lnbmVkIGludCByZWcgPSBtYy0+cmVnOwogCXVuc2lnbmVkIGludCBzaGlmdCA9IG1jLT5zaGlmdDsKLQl1bnNpZ25lZCBpbnQgcnNoaWZ0ID0gbWMtPnJzaGlmdDsKIAlpbnQgbWF4ID0gbWMtPm1heDsKIAl1bnNpZ25lZCBpbnQgbWFzayA9ICgxIDw8IGZscyhtYXgpKSAtIDE7CiAJdW5zaWduZWQgaW50IGludmVydCA9IG1jLT5pbnZlcnQ7Ci0JdW5zaWduZWQgaW50IHZhbCwgdmFsMiwgdmFsX21hc2s7Ci0JaW50IGNvbm5lY3Q7Ci0JaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgdmFsLCB2YWxfbWFzazsKKwlpbnQgY29ubmVjdCwgY2hhbmdlOworCXN0cnVjdCBzbmRfc29jX2RhcG1fdXBkYXRlIHVwZGF0ZTsKIAogCXZhbCA9ICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIG1hc2spOwogCkBAIC0xNTgzLDE4ICsxNzUyLDEyIEBACiAJCXZhbCA9IG1heCAtIHZhbDsKIAl2YWxfbWFzayA9IG1hc2sgPDwgc2hpZnQ7CiAJdmFsID0gdmFsIDw8IHNoaWZ0OwotCWlmIChzaGlmdCAhPSByc2hpZnQpIHsKLQkJdmFsMiA9ICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSAmIG1hc2spOwotCQlpZiAoaW52ZXJ0KQotCQkJdmFsMiA9IG1heCAtIHZhbDI7Ci0JCXZhbF9tYXNrIHw9IG1hc2sgPDwgcnNoaWZ0OwotCQl2YWwgfD0gdmFsMiA8PCByc2hpZnQ7Ci0JfQogCiAJbXV0ZXhfbG9jaygmd2lkZ2V0LT5jb2RlYy0+bXV0ZXgpOwogCXdpZGdldC0+dmFsdWUgPSB2YWw7CiAKLQlpZiAoc25kX3NvY190ZXN0X2JpdHMod2lkZ2V0LT5jb2RlYywgcmVnLCB2YWxfbWFzaywgdmFsKSkgeworCWNoYW5nZSA9IHNuZF9zb2NfdGVzdF9iaXRzKHdpZGdldC0+Y29kZWMsIHJlZywgdmFsX21hc2ssIHZhbCk7CisJaWYgKGNoYW5nZSkgewogCQlpZiAodmFsKQogCQkJLyogbmV3IGNvbm5lY3Rpb24gKi8KIAkJCWNvbm5lY3QgPSBpbnZlcnQgPyAwOjE7CkBAIC0xNjAyLDI4ICsxNzY1LDIwIEBACiAJCQkvKiBvbGQgY29ubmVjdGlvbiBtdXN0IGJlIHBvd2VyZWQgZG93biAqLwogCQkJY29ubmVjdCA9IGludmVydCA/IDE6MDsKIAorCQl1cGRhdGUua2NvbnRyb2wgPSBrY29udHJvbDsKKwkJdXBkYXRlLndpZGdldCA9IHdpZGdldDsKKwkJdXBkYXRlLnJlZyA9IHJlZzsKKwkJdXBkYXRlLm1hc2sgPSBtYXNrOworCQl1cGRhdGUudmFsID0gdmFsOworCQl3aWRnZXQtPmRhcG0tPnVwZGF0ZSA9ICZ1cGRhdGU7CisKIAkJZGFwbV9taXhlcl91cGRhdGVfcG93ZXIod2lkZ2V0LCBrY29udHJvbCwgY29ubmVjdCk7CisKKwkJd2lkZ2V0LT5kYXBtLT51cGRhdGUgPSBOVUxMOwogCX0KIAotCWlmICh3aWRnZXQtPmV2ZW50KSB7Ci0JCWlmICh3aWRnZXQtPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BSRV9SRUcpIHsKLQkJCXJldCA9IHdpZGdldC0+ZXZlbnQod2lkZ2V0LCBrY29udHJvbCwKLQkJCQkJCVNORF9TT0NfREFQTV9QUkVfUkVHKTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJcmV0ID0gMTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCQlyZXQgPSBzbmRfc29jX3VwZGF0ZV9iaXRzKHdpZGdldC0+Y29kZWMsIHJlZywgdmFsX21hc2ssIHZhbCk7Ci0JCWlmICh3aWRnZXQtPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUkVHKQotCQkJcmV0ID0gd2lkZ2V0LT5ldmVudCh3aWRnZXQsIGtjb250cm9sLAotCQkJCQkJU05EX1NPQ19EQVBNX1BPU1RfUkVHKTsKLQl9IGVsc2UKLQkJcmV0ID0gc25kX3NvY191cGRhdGVfYml0cyh3aWRnZXQtPmNvZGVjLCByZWcsIHZhbF9tYXNrLCB2YWwpOwotCi1vdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ3aWRnZXQtPmNvZGVjLT5tdXRleCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9wdXRfdm9sc3cpOwogCkBAIC0xNjcxLDcgKzE4MjYsNyBAQAogCXN0cnVjdCBzb2NfZW51bSAqZSA9IChzdHJ1Y3Qgc29jX2VudW0gKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAl1bnNpZ25lZCBpbnQgdmFsLCBtdXgsIGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgbWFzaywgYml0bWFzazsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3VwZGF0ZSB1cGRhdGU7CiAKIAlmb3IgKGJpdG1hc2sgPSAxOyBiaXRtYXNrIDwgZS0+bWF4OyBiaXRtYXNrIDw8PSAxKQogCQk7CkBAIC0xNjkwLDI0ICsxODQ1LDIwIEBACiAJbXV0ZXhfbG9jaygmd2lkZ2V0LT5jb2RlYy0+bXV0ZXgpOwogCXdpZGdldC0+dmFsdWUgPSB2YWw7CiAJY2hhbmdlID0gc25kX3NvY190ZXN0X2JpdHMod2lkZ2V0LT5jb2RlYywgZS0+cmVnLCBtYXNrLCB2YWwpOworCisJdXBkYXRlLmtjb250cm9sID0ga2NvbnRyb2w7CisJdXBkYXRlLndpZGdldCA9IHdpZGdldDsKKwl1cGRhdGUucmVnID0gZS0+cmVnOworCXVwZGF0ZS5tYXNrID0gbWFzazsKKwl1cGRhdGUudmFsID0gdmFsOworCXdpZGdldC0+ZGFwbS0+dXBkYXRlID0gJnVwZGF0ZTsKKwogCWRhcG1fbXV4X3VwZGF0ZV9wb3dlcih3aWRnZXQsIGtjb250cm9sLCBjaGFuZ2UsIG11eCwgZSk7CiAKLQlpZiAod2lkZ2V0LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QUkVfUkVHKSB7Ci0JCXJldCA9IHdpZGdldC0+ZXZlbnQod2lkZ2V0LAotCQkJCSAgICBrY29udHJvbCwgU05EX1NPQ19EQVBNX1BSRV9SRUcpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCX0KKwl3aWRnZXQtPmRhcG0tPnVwZGF0ZSA9IE5VTEw7CiAKLQlyZXQgPSBzbmRfc29jX3VwZGF0ZV9iaXRzKHdpZGdldC0+Y29kZWMsIGUtPnJlZywgbWFzaywgdmFsKTsKLQotCWlmICh3aWRnZXQtPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUkVHKQotCQlyZXQgPSB3aWRnZXQtPmV2ZW50KHdpZGdldCwKLQkJCQkgICAga2NvbnRyb2wsIFNORF9TT0NfREFQTV9QT1NUX1JFRyk7Ci0KLW91dDoKIAltdXRleF91bmxvY2soJndpZGdldC0+Y29kZWMtPm11dGV4KTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBjaGFuZ2U7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fcHV0X2VudW1fZG91YmxlKTsKIApAQCAtMTgxOSw3ICsxOTcwLDcgQEAKIAlzdHJ1Y3Qgc29jX2VudW0gKmUgPSAoc3RydWN0IHNvY19lbnVtICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJdW5zaWduZWQgaW50IHZhbCwgbXV4LCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IG1hc2s7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IHNuZF9zb2NfZGFwbV91cGRhdGUgdXBkYXRlOwogCiAJaWYgKHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPiBlLT5tYXggLSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE4MzYsMjQgKzE5ODcsMjAgQEAKIAltdXRleF9sb2NrKCZ3aWRnZXQtPmNvZGVjLT5tdXRleCk7CiAJd2lkZ2V0LT52YWx1ZSA9IHZhbDsKIAljaGFuZ2UgPSBzbmRfc29jX3Rlc3RfYml0cyh3aWRnZXQtPmNvZGVjLCBlLT5yZWcsIG1hc2ssIHZhbCk7CisKKwl1cGRhdGUua2NvbnRyb2wgPSBrY29udHJvbDsKKwl1cGRhdGUud2lkZ2V0ID0gd2lkZ2V0OworCXVwZGF0ZS5yZWcgPSBlLT5yZWc7CisJdXBkYXRlLm1hc2sgPSBtYXNrOworCXVwZGF0ZS52YWwgPSB2YWw7CisJd2lkZ2V0LT5kYXBtLT51cGRhdGUgPSAmdXBkYXRlOworCiAJZGFwbV9tdXhfdXBkYXRlX3Bvd2VyKHdpZGdldCwga2NvbnRyb2wsIGNoYW5nZSwgbXV4LCBlKTsKIAotCWlmICh3aWRnZXQtPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BSRV9SRUcpIHsKLQkJcmV0ID0gd2lkZ2V0LT5ldmVudCh3aWRnZXQsCi0JCQkJICAgIGtjb250cm9sLCBTTkRfU09DX0RBUE1fUFJFX1JFRyk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0JfQorCXdpZGdldC0+ZGFwbS0+dXBkYXRlID0gTlVMTDsKIAotCXJldCA9IHNuZF9zb2NfdXBkYXRlX2JpdHMod2lkZ2V0LT5jb2RlYywgZS0+cmVnLCBtYXNrLCB2YWwpOwotCi0JaWYgKHdpZGdldC0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUE9TVF9SRUcpCi0JCXJldCA9IHdpZGdldC0+ZXZlbnQod2lkZ2V0LAotCQkJCSAgICBrY29udHJvbCwgU05EX1NPQ19EQVBNX1BPU1RfUkVHKTsKLQotb3V0OgogCW11dGV4X3VubG9jaygmd2lkZ2V0LT5jb2RlYy0+bXV0ZXgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGNoYW5nZTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9wdXRfdmFsdWVfZW51bV9kb3VibGUpOwogCkBAIC0xODkyLDcgKzIwMzksNyBAQAogCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CiAKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9Ci0JCXNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhjb2RlYywgcGluKTsKKwkJc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKCZjb2RlYy0+ZGFwbSwgcGluKTsKIAogCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKIApAQCAtMTkxNSwxMSArMjA2MiwxMSBAQAogCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CiAKIAlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCi0JCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCBwaW4pOworCQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbigmY29kZWMtPmRhcG0sIHBpbik7CiAJZWxzZQotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsIHBpbik7CisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbigmY29kZWMtPmRhcG0sIHBpbik7CiAKLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJc25kX3NvY19kYXBtX3N5bmMoJmNvZGVjLT5kYXBtKTsKIAogCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKIApAQCAtMTkyOSwyNiArMjA3Niw0MyBAQAogCiAvKioKICAqIHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbCAtIGNyZWF0ZSBuZXcgZGFwbSBjb250cm9sCi0gKiBAY29kZWM6IGF1ZGlvIGNvZGVjCisgKiBAZGFwbTogREFQTSBjb250ZXh0CiAgKiBAd2lkZ2V0OiB3aWRnZXQgdGVtcGxhdGUKICAqCiAgKiBDcmVhdGVzIGEgbmV3IGRhcG0gY29udHJvbCBiYXNlZCB1cG9uIHRoZSB0ZW1wbGF0ZS4KICAqCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MgZWxzZSBlcnJvci4KICAqLwotaW50IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCitpbnQgc25kX3NvY19kYXBtX25ld19jb250cm9sKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKIAljb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0KQogewogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OworCXNpemVfdCBuYW1lX2xlbjsKIAogCWlmICgodyA9IGRhcG1fY25ld193aWRnZXQod2lkZ2V0KSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQl3LT5jb2RlYyA9IGNvZGVjOworCW5hbWVfbGVuID0gc3RybGVuKHdpZGdldC0+bmFtZSkgKyAxOworCWlmIChkYXBtLT5jb2RlYy0+bmFtZV9wcmVmaXgpCisJCW5hbWVfbGVuICs9IDEgKyBzdHJsZW4oZGFwbS0+Y29kZWMtPm5hbWVfcHJlZml4KTsKKwl3LT5uYW1lID0ga21hbGxvYyhuYW1lX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKHctPm5hbWUgPT0gTlVMTCkgeworCQlrZnJlZSh3KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmIChkYXBtLT5jb2RlYy0+bmFtZV9wcmVmaXgpCisJCXNucHJpbnRmKHctPm5hbWUsIG5hbWVfbGVuLCAiJXMgJXMiLAorCQkJZGFwbS0+Y29kZWMtPm5hbWVfcHJlZml4LCB3aWRnZXQtPm5hbWUpOworCWVsc2UKKwkJc25wcmludGYody0+bmFtZSwgbmFtZV9sZW4sICIlcyIsIHdpZGdldC0+bmFtZSk7CisKKwlkYXBtLT5uX3dpZGdldHMrKzsKKwl3LT5kYXBtID0gZGFwbTsKKwl3LT5jb2RlYyA9IGRhcG0tPmNvZGVjOwogCUlOSVRfTElTVF9IRUFEKCZ3LT5zb3VyY2VzKTsKIAlJTklUX0xJU1RfSEVBRCgmdy0+c2lua3MpOwogCUlOSVRfTElTVF9IRUFEKCZ3LT5saXN0KTsKLQlsaXN0X2FkZCgmdy0+bGlzdCwgJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCWxpc3RfYWRkKCZ3LT5saXN0LCAmZGFwbS0+Y2FyZC0+d2lkZ2V0cyk7CiAKIAkvKiBtYWNoaW5lIGxheWVyIHNldCB1cHMgdW5jb25uZWN0ZWQgcGlucyBhbmQgaW5zZXJ0aW9ucyAqLwogCXctPmNvbm5lY3RlZCA9IDE7CkBAIC0xOTU4LDcgKzIxMjIsNyBAQAogCiAvKioKICAqIHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMgLSBjcmVhdGUgbmV3IGRhcG0gY29udHJvbHMKLSAqIEBjb2RlYzogYXVkaW8gY29kZWMKKyAqIEBkYXBtOiBEQVBNIGNvbnRleHQKICAqIEB3aWRnZXQ6IHdpZGdldCBhcnJheQogICogQG51bTogbnVtYmVyIG9mIHdpZGdldHMKICAqCkBAIC0xOTY2LDE4ICsyMTMwLDE4IEBACiAgKgogICogUmV0dXJucyAwIGZvciBzdWNjZXNzIGVsc2UgZXJyb3IuCiAgKi8KLWludCBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKK2ludCBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKIAljb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0LAogCWludCBudW0pCiB7CiAJaW50IGksIHJldDsKIAogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQlyZXQgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2woY29kZWMsIHdpZGdldCk7CisJCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbChkYXBtLCB3aWRnZXQpOwogCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIkFTb0M6IEZhaWxlZCB0byBjcmVhdGUgREFQTSBjb250cm9sICVzOiAlZFxuIiwKLQkJCSAgICAgICB3aWRnZXQtPm5hbWUsIHJldCk7CisJCQlkZXZfZXJyKGRhcG0tPmRldiwKKwkJCQkiQVNvQzogRmFpbGVkIHRvIGNyZWF0ZSBEQVBNIGNvbnRyb2wgJXM6ICVkXG4iLAorCQkJCXdpZGdldC0+bmFtZSwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJd2lkZ2V0Kys7CkBAIC0xOTg2LDM0ICsyMTUwLDE3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKTsKIAotCi0vKioKLSAqIHNuZF9zb2NfZGFwbV9zdHJlYW1fZXZlbnQgLSBzZW5kIGEgc3RyZWFtIGV2ZW50IHRvIHRoZSBkYXBtIGNvcmUKLSAqIEBjb2RlYzogYXVkaW8gY29kZWMKLSAqIEBzdHJlYW06IHN0cmVhbSBuYW1lCi0gKiBAZXZlbnQ6IHN0cmVhbSBldmVudAotICoKLSAqIFNlbmRzIGEgc3RyZWFtIGV2ZW50IHRvIHRoZSBkYXBtIGNvcmUuIFRoZSBjb3JlIHRoZW4gbWFrZXMgYW55Ci0gKiBuZWNlc3Nhcnkgd2lkZ2V0IHBvd2VyIGNoYW5nZXMuCi0gKgotICogUmV0dXJucyAwIGZvciBzdWNjZXNzIGVsc2UgZXJyb3IuCi0gKi8KLWludCBzbmRfc29jX2RhcG1fc3RyZWFtX2V2ZW50KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQsCitzdGF0aWMgdm9pZCBzb2NfZGFwbV9zdHJlYW1fZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAogCWNvbnN0IGNoYXIgKnN0cmVhbSwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CiAKLQlpZiAoc3RyZWFtID09IE5VTEwpCi0JCXJldHVybiAwOwotCi0JbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZjb2RlYy0+ZGFwbV93aWRnZXRzLCBsaXN0KQorCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmRhcG0tPmNhcmQtPndpZGdldHMsIGxpc3QpCiAJewotCQlpZiAoIXctPnNuYW1lKQorCQlpZiAoIXctPnNuYW1lIHx8IHctPmRhcG0gIT0gZGFwbSkKIAkJCWNvbnRpbnVlOwotCQlwcl9kZWJ1Zygid2lkZ2V0ICVzXG4gJXMgc3RyZWFtICVzIGV2ZW50ICVkXG4iLAotCQkJIHctPm5hbWUsIHctPnNuYW1lLCBzdHJlYW0sIGV2ZW50KTsKKwkJZGV2X2RiZyh3LT5kYXBtLT5kZXYsICJ3aWRnZXQgJXNcbiAlcyBzdHJlYW0gJXMgZXZlbnQgJWRcbiIsCisJCQl3LT5uYW1lLCB3LT5zbmFtZSwgc3RyZWFtLCBldmVudCk7CiAJCWlmIChzdHJzdHIody0+c25hbWUsIHN0cmVhbSkpIHsKIAkJCXN3aXRjaChldmVudCkgewogCQkJY2FzZSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUQVJUOgpAQCAtMjAzMSw3ICsyMTc4LDMwIEBACiAJCX0KIAl9CiAKLQlkYXBtX3Bvd2VyX3dpZGdldHMoY29kZWMsIGV2ZW50KTsKKwlkYXBtX3Bvd2VyX3dpZGdldHMoZGFwbSwgZXZlbnQpOworfQorCisvKioKKyAqIHNuZF9zb2NfZGFwbV9zdHJlYW1fZXZlbnQgLSBzZW5kIGEgc3RyZWFtIGV2ZW50IHRvIHRoZSBkYXBtIGNvcmUKKyAqIEBydGQ6IFBDTSBydW50aW1lIGRhdGEKKyAqIEBzdHJlYW06IHN0cmVhbSBuYW1lCisgKiBAZXZlbnQ6IHN0cmVhbSBldmVudAorICoKKyAqIFNlbmRzIGEgc3RyZWFtIGV2ZW50IHRvIHRoZSBkYXBtIGNvcmUuIFRoZSBjb3JlIHRoZW4gbWFrZXMgYW55CisgKiBuZWNlc3Nhcnkgd2lkZ2V0IHBvd2VyIGNoYW5nZXMuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzIGVsc2UgZXJyb3IuCisgKi8KK2ludCBzbmRfc29jX2RhcG1fc3RyZWFtX2V2ZW50KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQsCisJY29uc3QgY2hhciAqc3RyZWFtLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKworCWlmIChzdHJlYW0gPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZjb2RlYy0+bXV0ZXgpOworCXNvY19kYXBtX3N0cmVhbV9ldmVudCgmY29kZWMtPmRhcG0sIHN0cmVhbSwgZXZlbnQpOwogCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIwMzksNyArMjIwOSw3IEBACiAKIC8qKgogICogc25kX3NvY19kYXBtX2VuYWJsZV9waW4gLSBlbmFibGUgcGluLgotICogQGNvZGVjOiBTb0MgY29kZWMKKyAqIEBkYXBtOiBEQVBNIGNvbnRleHQKICAqIEBwaW46IHBpbiBuYW1lCiAgKgogICogRW5hYmxlcyBpbnB1dC9vdXRwdXQgcGluIGFuZCBpdHMgcGFyZW50cyBvciBjaGlsZHJlbiB3aWRnZXRzIGlmZiB0aGVyZSBpcwpAQCAtMjA0NywxNSArMjIxNywxNSBAQAogICogTk9URTogc25kX3NvY19kYXBtX3N5bmMoKSBuZWVkcyB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBmb3IgREFQTSB0bwogICogZG8gYW55IHdpZGdldCBwb3dlciBzd2l0Y2hpbmcuCiAgKi8KLWludCBzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbikKK2ludCBzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sIGNvbnN0IGNoYXIgKnBpbikKIHsKLQlyZXR1cm4gc25kX3NvY19kYXBtX3NldF9waW4oY29kZWMsIHBpbiwgMSk7CisJcmV0dXJuIHNuZF9zb2NfZGFwbV9zZXRfcGluKGRhcG0sIHBpbiwgMSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbik7CiAKIC8qKgogICogc25kX3NvY19kYXBtX2ZvcmNlX2VuYWJsZV9waW4gLSBmb3JjZSBhIHBpbiB0byBiZSBlbmFibGVkCi0gKiBAY29kZWM6IFNvQyBjb2RlYworICogQGRhcG06IERBUE0gY29udGV4dAogICogQHBpbjogcGluIG5hbWUKICAqCiAgKiBFbmFibGVzIGlucHV0L291dHB1dCBwaW4gcmVnYXJkbGVzcyBvZiBhbnkgb3RoZXIgc3RhdGUuICBUaGlzIGlzCkBAIC0yMDY1LDQyICsyMjM1LDQ3IEBACiAgKiBOT1RFOiBzbmRfc29jX2RhcG1fc3luYygpIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciB0aGlzIGZvciBEQVBNIHRvCiAgKiBkbyBhbnkgd2lkZ2V0IHBvd2VyIHN3aXRjaGluZy4KICAqLwotaW50IHNuZF9zb2NfZGFwbV9mb3JjZV9lbmFibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKQoraW50IHNuZF9zb2NfZGFwbV9mb3JjZV9lbmFibGVfcGluKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKKwkJCQkgIGNvbnN0IGNoYXIgKnBpbikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmNvZGVjLT5kYXBtX3dpZGdldHMsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZkYXBtLT5jYXJkLT53aWRnZXRzLCBsaXN0KSB7CisJCWlmICh3LT5kYXBtICE9IGRhcG0pCisJCQljb250aW51ZTsKIAkJaWYgKCFzdHJjbXAody0+bmFtZSwgcGluKSkgewotCQkJcHJfZGVidWcoImRhcG06ICVzOiBwaW4gJXNcbiIsIGNvZGVjLT5uYW1lLCBwaW4pOworCQkJZGV2X2RiZyh3LT5kYXBtLT5kZXYsCisJCQkJImRhcG06IGZvcmNlIGVuYWJsZSBwaW4gJXNcbiIsIHBpbik7CiAJCQl3LT5jb25uZWN0ZWQgPSAxOwogCQkJdy0+Zm9yY2UgPSAxOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKLQlwcl9lcnIoImRhcG06ICVzOiBjb25maWd1cmluZyB1bmtub3duIHBpbiAlc1xuIiwgY29kZWMtPm5hbWUsIHBpbik7CisJZGV2X2VycihkYXBtLT5kZXYsICJkYXBtOiB1bmtub3duIHBpbiAlc1xuIiwgcGluKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9mb3JjZV9lbmFibGVfcGluKTsKIAogLyoqCiAgKiBzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4gLSBkaXNhYmxlIHBpbi4KLSAqIEBjb2RlYzogU29DIGNvZGVjCisgKiBAZGFwbTogREFQTSBjb250ZXh0CiAgKiBAcGluOiBwaW4gbmFtZQogICoKICAqIERpc2FibGVzIGlucHV0L291dHB1dCBwaW4gYW5kIGl0cyBwYXJlbnRzIG9yIGNoaWxkcmVuIHdpZGdldHMuCiAgKiBOT1RFOiBzbmRfc29jX2RhcG1fc3luYygpIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciB0aGlzIGZvciBEQVBNIHRvCiAgKiBkbyBhbnkgd2lkZ2V0IHBvd2VyIHN3aXRjaGluZy4KICAqLwotaW50IHNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbikKK2ludCBzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAorCQkJICAgICBjb25zdCBjaGFyICpwaW4pCiB7Ci0JcmV0dXJuIHNuZF9zb2NfZGFwbV9zZXRfcGluKGNvZGVjLCBwaW4sIDApOworCXJldHVybiBzbmRfc29jX2RhcG1fc2V0X3BpbihkYXBtLCBwaW4sIDApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKTsKIAogLyoqCiAgKiBzbmRfc29jX2RhcG1fbmNfcGluIC0gcGVybWFuZW50bHkgZGlzYWJsZSBwaW4uCi0gKiBAY29kZWM6IFNvQyBjb2RlYworICogQGRhcG06IERBUE0gY29udGV4dAogICogQHBpbjogcGluIG5hbWUKICAqCiAgKiBNYXJrcyB0aGUgc3BlY2lmaWVkIHBpbiBhcyBiZWluZyBub3QgY29ubmVjdGVkLCBkaXNhYmxpbmcgaXQgYWxvbmcKQEAgLTIxMTIsMjYgKzIyODcsMjkgQEAKICAqIE5PVEU6IHNuZF9zb2NfZGFwbV9zeW5jKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGFmdGVyIHRoaXMgZm9yIERBUE0gdG8KICAqIGRvIGFueSB3aWRnZXQgcG93ZXIgc3dpdGNoaW5nLgogICovCi1pbnQgc25kX3NvY19kYXBtX25jX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbikKK2ludCBzbmRfc29jX2RhcG1fbmNfcGluKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwgY29uc3QgY2hhciAqcGluKQogewotCXJldHVybiBzbmRfc29jX2RhcG1fc2V0X3Bpbihjb2RlYywgcGluLCAwKTsKKwlyZXR1cm4gc25kX3NvY19kYXBtX3NldF9waW4oZGFwbSwgcGluLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9uY19waW4pOwogCiAvKioKICAqIHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyAtIGdldCBhdWRpbyBwaW4gc3RhdHVzCi0gKiBAY29kZWM6IGF1ZGlvIGNvZGVjCisgKiBAZGFwbTogREFQTSBjb250ZXh0CiAgKiBAcGluOiBhdWRpbyBzaWduYWwgcGluIGVuZHBvaW50IChvciBzdGFydCBwb2ludCkKICAqCiAgKiBHZXQgYXVkaW8gcGluIHN0YXR1cyAtIGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQuCiAgKgogICogUmV0dXJucyAxIGZvciBjb25uZWN0ZWQgb3RoZXJ3aXNlIDAuCiAgKi8KLWludCBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pCitpbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKKwkJCQljb25zdCBjaGFyICpwaW4pCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZjb2RlYy0+ZGFwbV93aWRnZXRzLCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmZGFwbS0+Y2FyZC0+d2lkZ2V0cywgbGlzdCkgeworCQlpZiAody0+ZGFwbSAhPSBkYXBtKQorCQkJY29udGludWU7CiAJCWlmICghc3RyY21wKHctPm5hbWUsIHBpbikpCiAJCQlyZXR1cm4gdy0+Y29ubmVjdGVkOwogCX0KQEAgLTIxNDIsNyArMjMyMCw3IEBACiAKIC8qKgogICogc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kIC0gaWdub3JlIHN1c3BlbmQgc3RhdHVzIGZvciBEQVBNIGVuZHBvaW50Ci0gKiBAY29kZWM6IGF1ZGlvIGNvZGVjCisgKiBAZGFwbTogREFQTSBjb250ZXh0CiAgKiBAcGluOiBhdWRpbyBzaWduYWwgcGluIGVuZHBvaW50IChvciBzdGFydCBwb2ludCkKICAqCiAgKiBNYXJrIHRoZSBnaXZlbiBlbmRwb2ludCBvciBwaW4gYXMgaWdub3Jpbmcgc3VzcGVuZC4gIFdoZW4gdGhlCkBAIC0yMTUxLDE4ICsyMzI5LDIxIEBACiAgKiBub3JtYWwgbWVhbnMgYXQgc3VzcGVuZCB0aW1lLCBpdCB3aWxsIG5vdCBiZSB0dXJuZWQgb24gaWYgaXQgd2FzIG5vdAogICogYWxyZWFkeSBlbmFibGVkLgogICovCi1pbnQgc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKQoraW50IHNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCisJCQkJY29uc3QgY2hhciAqcGluKQogewogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmY29kZWMtPmRhcG1fd2lkZ2V0cywgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmRhcG0tPmNhcmQtPndpZGdldHMsIGxpc3QpIHsKKwkJaWYgKHctPmRhcG0gIT0gZGFwbSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoIXN0cmNtcCh3LT5uYW1lLCBwaW4pKSB7CiAJCQl3LT5pZ25vcmVfc3VzcGVuZCA9IDE7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAotCXByX2VycigiVW5rbm93biBEQVBNIHBpbjogJXNcbiIsIHBpbik7CisJZGV2X2VycihkYXBtLT5kZXYsICJkYXBtOiB1bmtub3duIHBpbiAlc1xuIiwgcGluKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZCk7CkBAIC0yMTczLDIwICsyMzU0LDIzIEBACiAgKgogICogRnJlZSBhbGwgZGFwbSB3aWRnZXRzIGFuZCByZXNvdXJjZXMuCiAgKi8KLXZvaWQgc25kX3NvY19kYXBtX2ZyZWUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQordm9pZCBzbmRfc29jX2RhcG1fZnJlZShzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0pCiB7Ci0Jc25kX3NvY19kYXBtX3N5c19yZW1vdmUoY29kZWMtPmRldik7Ci0JZGFwbV9mcmVlX3dpZGdldHMoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeXNfcmVtb3ZlKGRhcG0tPmRldik7CisJZGFwbV9mcmVlX3dpZGdldHMoZGFwbSk7CisJbGlzdF9kZWwoJmRhcG0tPmxpc3QpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX2ZyZWUpOwogCi1zdGF0aWMgdm9pZCBzb2NfZGFwbV9zaHV0ZG93bl9jb2RlYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBzb2NfZGFwbV9zaHV0ZG93bl9jb2RlYyhzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0pCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CiAJTElTVF9IRUFEKGRvd25fbGlzdCk7CiAJaW50IHBvd2VyZG93biA9IDA7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZjb2RlYy0+ZGFwbV93aWRnZXRzLCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmZGFwbS0+Y2FyZC0+d2lkZ2V0cywgbGlzdCkgeworCQlpZiAody0+ZGFwbSAhPSBkYXBtKQorCQkJY29udGludWU7CiAJCWlmICh3LT5wb3dlcikgewogCQkJZGFwbV9zZXFfaW5zZXJ0KHcsICZkb3duX2xpc3QsIGRhcG1fZG93bl9zZXEpOwogCQkJdy0+cG93ZXIgPSAwOwpAQCAtMjE5OCw5ICsyMzgyLDkgQEAKIAkgKiBzdGFuZGJ5LgogCSAqLwogCWlmIChwb3dlcmRvd24pIHsKLQkJc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKE5VTEwsIGNvZGVjLCBTTkRfU09DX0JJQVNfUFJFUEFSRSk7Ci0JCWRhcG1fc2VxX3J1bihjb2RlYywgJmRvd25fbGlzdCwgMCwgZGFwbV9kb3duX3NlcSk7Ci0JCXNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChOVUxMLCBjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCQlzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoTlVMTCwgZGFwbSwgU05EX1NPQ19CSUFTX1BSRVBBUkUpOworCQlkYXBtX3NlcV9ydW4oZGFwbSwgJmRvd25fbGlzdCwgMCwgZGFwbV9kb3duX3NlcSk7CisJCXNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChOVUxMLCBkYXBtLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAJfQogfQogCkBAIC0yMjExLDEwICsyMzk1LDEwIEBACiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb2RlYywgJmNhcmQtPmNvZGVjX2Rldl9saXN0LCBsaXN0KQotCQlzb2NfZGFwbV9zaHV0ZG93bl9jb2RlYyhjb2RlYyk7Ci0KLQlzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoY2FyZCwgY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29kZWMsICZjYXJkLT5jb2RlY19kZXZfbGlzdCwgbGlzdCkgeworCQlzb2NfZGFwbV9zaHV0ZG93bl9jb2RlYygmY29kZWMtPmRhcG0pOworCQlzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoY2FyZCwgJmNvZGVjLT5kYXBtLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwl9CiB9CiAKIC8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1qYWNrLmMgYi9zb3VuZC9zb2Mvc29jLWphY2suYwppbmRleCA4YTBhOTIwLi5hYzVhNWJjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWphY2suYworKysgYi9zb3VuZC9zb2Mvc29jLWphY2suYwpAQCAtMTMsMTEgKzEzLDExIEBACiAKICNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvYXNvYy5oPgogCiAvKioKICAqIHNuZF9zb2NfamFja19uZXcgLSBDcmVhdGUgYSBuZXcgamFjawpAQCAtNjAsMTQgKzYwLDE4IEBACiB2b2lkIHNuZF9zb2NfamFja19yZXBvcnQoc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IHN0YXR1cywgaW50IG1hc2spCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbTsKIAlzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiAqcGluOwogCWludCBlbmFibGU7CiAJaW50IG9sZHN0YXR1czsKIAorCXRyYWNlX3NuZF9zb2NfamFja19yZXBvcnQoamFjaywgbWFzaywgc3RhdHVzKTsKKwogCWlmICghamFjaykKIAkJcmV0dXJuOwogCiAJY29kZWMgPSBqYWNrLT5jb2RlYzsKKwlkYXBtID0gICZjb2RlYy0+ZGFwbTsKIAogCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CiAKQEAgLTgxLDYgKzg1LDggQEAKIAlpZiAobWFzayAmJiAoamFjay0+c3RhdHVzID09IG9sZHN0YXR1cykpCiAJCWdvdG8gb3V0OwogCisJdHJhY2Vfc25kX3NvY19qYWNrX25vdGlmeShqYWNrLCBzdGF0dXMpOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sICZqYWNrLT5waW5zLCBsaXN0KSB7CiAJCWVuYWJsZSA9IHBpbi0+bWFzayAmIGphY2stPnN0YXR1czsKIApAQCAtODgsMTUgKzk0LDE1IEBACiAJCQllbmFibGUgPSAhZW5hYmxlOwogCiAJCWlmIChlbmFibGUpCi0JCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgcGluLT5waW4pOworCQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oZGFwbSwgcGluLT5waW4pOwogCQllbHNlCi0JCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsIHBpbi0+cGluKTsKKwkJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCBwaW4tPnBpbik7CiAJfQogCiAJLyogUmVwb3J0IGJlZm9yZSB0aGUgREFQTSBzeW5jIHRvIGhlbHAgdXNlcnMgdXBkYXRpbmcgbWljYmlhcyBzdGF0dXMgKi8KIAlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZqYWNrLT5ub3RpZmllciwgc3RhdHVzLCBOVUxMKTsKIAotCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIAogCXNuZF9qYWNrX3JlcG9ydChqYWNrLT5qYWNrLCBzdGF0dXMpOwogCkBAIC0yMDcsNiArMjEzLDEyIEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgZ3Bpb19oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHNuZF9zb2NfamFja19ncGlvICpncGlvID0gZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBncGlvLT5qYWNrLT5jb2RlYy0+Y2FyZC0+ZGV2OworCisJdHJhY2Vfc25kX3NvY19qYWNrX2lycShncGlvLT5uYW1lKTsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQorCQlwbV93YWtldXBfZXZlbnQoZGV2LCBncGlvLT5kZWJvdW5jZV90aW1lICsgNTApOwogCiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZncGlvLT53b3JrLAogCQkJICAgICAgbXNlY3NfdG9famlmZmllcyhncGlvLT5kZWJvdW5jZV90aW1lKSk7CkBAIC0yNjMsMTEgKzI3NSwxMiBAQAogCQlJTklUX0RFTEFZRURfV09SSygmZ3Bpb3NbaV0ud29yaywgZ3Bpb193b3JrKTsKIAkJZ3Bpb3NbaV0uamFjayA9IGphY2s7CiAKLQkJcmV0ID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoZ3Bpb3NbaV0uZ3BpbyksCi0JCQkJZ3Bpb19oYW5kbGVyLAotCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCQlqYWNrLT5jb2RlYy0+ZGV2LT5kcml2ZXItPm5hbWUsCi0JCQkJJmdwaW9zW2ldKTsKKwkJcmV0ID0gcmVxdWVzdF9hbnlfY29udGV4dF9pcnEoZ3Bpb190b19pcnEoZ3Bpb3NbaV0uZ3BpbyksCisJCQkJCSAgICAgIGdwaW9faGFuZGxlciwKKwkJCQkJICAgICAgSVJRRl9UUklHR0VSX1JJU0lORyB8CisJCQkJCSAgICAgIElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCQkgICAgICBqYWNrLT5jb2RlYy0+ZGV2LT5kcml2ZXItPm5hbWUsCisJCQkJCSAgICAgICZncGlvc1tpXSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2Zvcm1hdC5jIGIvc291bmQvdXNiL2Zvcm1hdC5jCmluZGV4IDY5MTQ4MjEuLjViNzkyZDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9mb3JtYXQuYworKysgYi9zb3VuZC91c2IvZm9ybWF0LmMKQEAgLTc2LDcgKzc2LDEwIEBACiAJCWZvcm1hdCA9IDEgPDwgVUFDX0ZPUk1BVF9UWVBFX0lfUENNOwogCX0KIAlpZiAoZm9ybWF0ICYgKDEgPDwgVUFDX0ZPUk1BVF9UWVBFX0lfUENNKSkgewotCQlpZiAoc2FtcGxlX3dpZHRoID4gc2FtcGxlX2J5dGVzICogOCkgeworCQlpZiAoY2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA1ODIsIDB4MDAxNikgLyogRWRpcm9sIFNELTkwICovICYmCisJCSAgICBzYW1wbGVfd2lkdGggPT0gMjQgJiYgc2FtcGxlX2J5dGVzID09IDIpCisJCQlzYW1wbGVfYnl0ZXMgPSAzOworCQllbHNlIGlmIChzYW1wbGVfd2lkdGggPiBzYW1wbGVfYnl0ZXMgKiA4KSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiJWQ6JXU6JWQgOiBzYW1wbGUgYml0d2lkdGggJWQgaW4gb3ZlciBzYW1wbGUgYnl0ZXMgJWRcbiIsCiAJCQkJICAgY2hpcC0+ZGV2LT5kZXZudW0sIGZwLT5pZmFjZSwgZnAtPmFsdHNldHRpbmcsCiAJCQkJICAgc2FtcGxlX3dpZHRoLCBzYW1wbGVfYnl0ZXMpOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL21pZGkuYyBiL3NvdW5kL3VzYi9taWRpLmMKaW5kZXggMjViY2U3ZS4uZGIyZGM1ZiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL21pZGkuYworKysgYi9zb3VuZC91c2IvbWlkaS5jCkBAIC04NTAsOCArODUwLDggQEAKIAkJcmV0dXJuOwogCX0KIAotCW1lbXNldCh1cmItPnRyYW5zZmVyX2J1ZmZlciArIGNvdW50LCAweEZELCA5IC0gY291bnQpOwotCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGNvdW50OworCW1lbXNldCh1cmItPnRyYW5zZmVyX2J1ZmZlciArIGNvdW50LCAweEZELCBlcC0+bWF4X3RyYW5zZmVyIC0gY291bnQpOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGVwLT5tYXhfdHJhbnNmZXI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3Byb3RvY29sX29wcyBzbmRfdXNibWlkaV8xMjJsX29wcyA9IHsKQEAgLTEyOTUsNiArMTI5NSwxMyBAQAogCWNhc2UgVVNCX0lEKDB4MWE4NiwgMHg3NTJkKTogLyogUWluSGVuZyBDSDM0NSAiVVNCMi4wLU1JREkiICovCiAJCWVwLT5tYXhfdHJhbnNmZXIgPSA0OwogCQlicmVhazsKKwkJLyoKKwkJICogU29tZSBkZXZpY2VzIG9ubHkgd29yayB3aXRoIDkgYnl0ZXMgcGFja2V0IHNpemU6CisJCSAqLworCWNhc2UgVVNCX0lEKDB4MDY0NCwgMHg4MDBFKTogLyogVGFzY2FtIFVTLTEyMkwgKi8KKwljYXNlIFVTQl9JRCgweDA2NDQsIDB4ODAwRik6IC8qIFRhc2NhbSBVUy0xNDQgKi8KKwkJZXAtPm1heF90cmFuc2ZlciA9IDk7CisJCWJyZWFrOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgT1VUUFVUX1VSQlM7ICsraSkgewogCQlidWZmZXIgPSB1c2JfYWxsb2NfY29oZXJlbnQodW1pZGktPmRldiwKQEAgLTE3MjksMTMgKzE3MzYsNyBAQAogewogCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1tdID0geyAiSGlnaCBMb2FkIiwgIkxpZ2h0IExvYWQiIH07CiAKLQlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwotCWluZm8tPmNvdW50ID0gMTsKLQlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMjsKLQlpZiAoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID4gMSkKLQkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMTsKLQlzdHJjcHkoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCBuYW1lc1tpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc25kX2N0bF9lbnVtX2luZm8oaW5mbywgMSwgMiwgbmFtZXMpOwogfQogCiBzdGF0aWMgaW50IHJvbGFuZF9sb2FkX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9taXhlci5jIGIvc291bmQvdXNiL21peGVyLmMKaW5kZXggZjJkNzRkNi4uN2RmODliMyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL21peGVyLmMKKysrIGIvc291bmQvdXNiL21peGVyLmMKQEAgLTE2MzMsMTggKzE2MzMsMTEgQEAKIHN0YXRpYyBpbnQgbWl4ZXJfY3RsX3NlbGVjdG9yX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwgPSBrY29udHJvbC0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKippdGVtbGlzdCA9IChjaGFyICoqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCWNvbnN0IGNoYXIgKippdGVtbGlzdCA9IChjb25zdCBjaGFyICoqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCiAJaWYgKHNuZF9CVUdfT04oIWl0ZW1saXN0KSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7Ci0JdWluZm8tPmNvdW50ID0gMTsKLQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IGN2YWwtPm1heDsKLQlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSBjdmFsLT5tYXgpCi0JCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSBjdmFsLT5tYXggLSAxOwotCXN0cmxjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgaXRlbWxpc3RbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0sCi0JCXNpemVvZih1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lKSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNuZF9jdGxfZW51bV9pbmZvKHVpbmZvLCAxLCBjdmFsLT5tYXgsIGl0ZW1saXN0KTsKIH0KIAogLyogZ2V0IGNhbGxiYWNrIGZvciBzZWxlY3RvciB1bml0ICovCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmggYi9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmgKaW5kZXggYWQ3MDc5ZC4uMzU5OTk4NyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3F1aXJrcy10YWJsZS5oCisrKyBiL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaApAQCAtNzA1LDExICs3MDUsMTEgQEAKIAkJLmRhdGEgPSAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmtbXSkgewogCQkJewogCQkJCS5pZm51bSA9IDAsCi0JCQkJLnR5cGUgPSBRVUlSS19JR05PUkVfSU5URVJGQUNFCisJCQkJLnR5cGUgPSBRVUlSS19BVURJT19TVEFOREFSRF9JTlRFUkZBQ0UKIAkJCX0sCiAJCQl7CiAJCQkJLmlmbnVtID0gMSwKLQkJCQkudHlwZSA9IFFVSVJLX0lHTk9SRV9JTlRFUkZBQ0UKKwkJCQkudHlwZSA9IFFVSVJLX0FVRElPX1NUQU5EQVJEX0lOVEVSRkFDRQogCQkJfSwKIAkJCXsKIAkJCQkuaWZudW0gPSAyLApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jIGIvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCmluZGV4IDZlZjY4ZTQuLjA4NGU2ZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKQEAgLTI3MywyOSArMjczLDI2IEBACiAJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7CiAJc3RydWN0IHVzMTIybAkqdXMxMjJsID0gaHctPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgdXNiX3N0cmVhbSAqcyA9IHVzMTIybC0+c2suczsKIAl1bnNpZ25lZAkqcG9sbGVkOwogCXVuc2lnbmVkIGludAltYXNrOwogCiAJcG9sbF93YWl0KGZpbGUsICZ1czEyMmwtPnNrLnNsZWVwLCB3YWl0KTsKIAotCXN3aXRjaCAocy0+c3RhdGUpIHsKLQljYXNlIHVzYl9zdHJlYW1fcmVhZHk6Ci0JCWlmICh1czEyMmwtPmZpcnN0ID09IGZpbGUpCi0JCQlwb2xsZWQgPSAmcy0+cGVyaW9kc19wb2xsZWQ7Ci0JCWVsc2UKLQkJCXBvbGxlZCA9ICZ1czEyMmwtPnNlY29uZF9wZXJpb2RzX3BvbGxlZDsKLQkJaWYgKCpwb2xsZWQgIT0gcy0+cGVyaW9kc19kb25lKSB7Ci0JCQkqcG9sbGVkID0gcy0+cGVyaW9kc19kb25lOwotCQkJbWFzayA9IFBPTExJTiB8IFBPTExPVVQgfCBQT0xMV1JOT1JNOwotCQkJYnJlYWs7CisJbWFzayA9IFBPTExJTiB8IFBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTEVSUjsKKwlpZiAobXV0ZXhfdHJ5bG9jaygmdXMxMjJsLT5tdXRleCkpIHsKKwkJc3RydWN0IHVzYl9zdHJlYW0gKnMgPSB1czEyMmwtPnNrLnM7CisJCWlmIChzICYmIHMtPnN0YXRlID09IHVzYl9zdHJlYW1fcmVhZHkpIHsKKwkJCWlmICh1czEyMmwtPmZpcnN0ID09IGZpbGUpCisJCQkJcG9sbGVkID0gJnMtPnBlcmlvZHNfcG9sbGVkOworCQkJZWxzZQorCQkJCXBvbGxlZCA9ICZ1czEyMmwtPnNlY29uZF9wZXJpb2RzX3BvbGxlZDsKKwkJCWlmICgqcG9sbGVkICE9IHMtPnBlcmlvZHNfZG9uZSkgeworCQkJCSpwb2xsZWQgPSBzLT5wZXJpb2RzX2RvbmU7CisJCQkJbWFzayA9IFBPTExJTiB8IFBPTExPVVQgfCBQT0xMV1JOT1JNOworCQkJfSBlbHNlCisJCQkJbWFzayA9IDA7CiAJCX0KLQkJLyogRmFsbCB0aHJvdWdoICovCi0JCW1hc2sgPSAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQltYXNrID0gUE9MTElOIHwgUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMRVJSOwotCQlicmVhazsKKwkJbXV0ZXhfdW5sb2NrKCZ1czEyMmwtPm11dGV4KTsKIAl9CiAJcmV0dXJuIG1hc2s7CiB9CkBAIC0zODEsNiArMzc4LDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX3N0cmVhbV9jb25maWcgKmNmZzsKIAlzdHJ1Y3QgdXMxMjJsICp1czEyMmwgPSBody0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2Jfc3RyZWFtICpzOwogCXVuc2lnbmVkIG1pbl9wZXJpb2RfZnJhbWVzOwogCWludCBlcnIgPSAwOwogCWJvb2wgaGlnaF9zcGVlZDsKQEAgLTQyNiwxOCArNDI0LDE4IEBACiAJc25kX3Bvd2VyX3dhaXQoaHctPmNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CiAKIAltdXRleF9sb2NrKCZ1czEyMmwtPm11dGV4KTsKKwlzID0gdXMxMjJsLT5zay5zOwogCWlmICghdXMxMjJsLT5tYXN0ZXIpCiAJCXVzMTIybC0+bWFzdGVyID0gZmlsZTsKIAllbHNlIGlmICh1czEyMmwtPm1hc3RlciAhPSBmaWxlKSB7Ci0JCWlmIChtZW1jbXAoY2ZnLCAmdXMxMjJsLT5zay5zLT5jZmcsIHNpemVvZigqY2ZnKSkpIHsKKwkJaWYgKCFzIHx8IG1lbWNtcChjZmcsICZzLT5jZmcsIHNpemVvZigqY2ZnKSkpIHsKIAkJCWVyciA9IC1FSU87CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQl1czEyMmwtPnNsYXZlID0gZmlsZTsKIAl9Ci0JaWYgKCF1czEyMmwtPnNrLnMgfHwKLQkgICAgbWVtY21wKGNmZywgJnVzMTIybC0+c2sucy0+Y2ZnLCBzaXplb2YoKmNmZykpIHx8Ci0JICAgIHVzMTIybC0+c2sucy0+c3RhdGUgPT0gdXNiX3N0cmVhbV94cnVuKSB7CisJaWYgKCFzIHx8IG1lbWNtcChjZmcsICZzLT5jZmcsIHNpemVvZigqY2ZnKSkgfHwKKwkgICAgcy0+c3RhdGUgPT0gdXNiX3N0cmVhbV94cnVuKSB7CiAJCXVzMTIybF9zdG9wKHVzMTIybCk7CiAJCWlmICghdXMxMjJsX3N0YXJ0KHVzMTIybCwgY2ZnLT5zYW1wbGVfcmF0ZSwgY2ZnLT5wZXJpb2RfZnJhbWVzKSkKIAkJCWVyciA9IC1FSU87CkBAIC00NDgsNiArNDQ2LDcgQEAKIAltdXRleF91bmxvY2soJnVzMTIybC0+bXV0ZXgpOwogZnJlZToKIAlrZnJlZShjZmcpOworCXdha2VfdXBfYWxsKCZ1czEyMmwtPnNrLnNsZWVwKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCAxYjliMTNlLi4yYjUzODdkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTIyNyw3ICsyMjcsNyBAQAogICBDRkxBR1NfT1BUSU1JWkUgPSAtTzYKIGVuZGlmCiAKLUNGTEFHUyA9IC1nZ2RiMyAtV2FsbCAtV2V4dHJhIC1zdGQ9Z251OTkgLVdlcnJvciAkKENGTEFHU19PUFRJTUlaRSkgLURfRk9SVElGWV9TT1VSQ0U9MiAkKEVYVFJBX1dBUk5JTkdTKSAkKEVYVFJBX0NGTEFHUykKK0NGTEFHUyA9IC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1nZ2RiMyAtV2FsbCAtV2V4dHJhIC1zdGQ9Z251OTkgLVdlcnJvciAkKENGTEFHU19PUFRJTUlaRSkgLURfRk9SVElGWV9TT1VSQ0U9MiAkKEVYVFJBX1dBUk5JTkdTKSAkKEVYVFJBX0NGTEFHUykKIEVYVExJQlMgPSAtbHB0aHJlYWQgLWxydCAtbGVsZiAtbG0KIEFMTF9DRkxBR1MgPSAkKENGTEFHUykgLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKIEFMTF9MREZMQUdTID0gJChMREZMQUdTKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCmluZGV4IDdiYzA0OTAuLjcwNjliZDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTMzMSw2ICszMzEsOSBAQAogCQkJZWxzZSBpZiAoZXJyID09ICBFTk9ERVYgJiYgY3B1X2xpc3QpIHsKIAkJCQlkaWUoIk5vIHN1Y2ggZGV2aWNlIC0gZGlkIHlvdSBzcGVjaWZ5IgogCQkJCQkiIGFuIG91dC1vZi1yYW5nZSBwcm9maWxlIENQVT9cbiIpOworCQkJfSBlbHNlIGlmIChlcnIgPT0gRU5PRU5UKSB7CisJCQkJZGllKCIlcyBldmVudCBpcyBub3Qgc3VwcG9ydGVkLiAiLAorCQkJCSAgICAgZXZlbnRfbmFtZShldnNlbCkpOwogCQkJfSBlbHNlIGlmIChlcnIgPT0gRUlOVkFMICYmIHNhbXBsZV9pZF9hbGxfYXZhaWwpIHsKIAkJCQkvKgogCQkJCSAqIE9sZCBrZXJuZWwsIG5vIGF0dHItPnNhbXBsZV9pZF90eXBlX2FsbCBmaWVsZApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwppbmRleCA3YTRlYmViLi5hYmQ0Yjg0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwpAQCAtNDg5LDcgKzQ4OSw4IEBACiAKIAllcnIgPSBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7CiAJQlVHX09OKGVycik7Ci0JZXJyID0gcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSgmYXR0ciwgKHNpemVfdCkoMTYqMTAyNCkpOworCWVyciA9IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUoJmF0dHIsCisJCQkoc2l6ZV90KSBtYXgoMTYgKiAxMDI0LCBQVEhSRUFEX1NUQUNLX01JTikpOwogCUJVR19PTihlcnIpOwogCWVyciA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmc3RhcnRfd29ya19tdXRleCk7CiAJQlVHX09OKGVycik7CkBAIC0xODYxLDcgKzE4NjIsNyBAQAogCXJlY19hcmdjID0gQVJSQVlfU0laRShyZWNvcmRfYXJncykgKyBhcmdjIC0gMTsKIAlyZWNfYXJndiA9IGNhbGxvYyhyZWNfYXJnYyArIDEsIHNpemVvZihjaGFyICopKTsKIAotCWlmIChyZWNfYXJndikKKwlpZiAocmVjX2FyZ3YgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWNvcmRfYXJncyk7IGkrKykKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCmluZGV4IDAyYjJkODAuLmMzODVhNjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwpAQCAtMzE2LDYgKzMxNiw4IEBACiAJCQkJICAgICAgIlx0IENvbnNpZGVyIHR3ZWFraW5nIgogCQkJCSAgICAgICIgL3Byb2Mvc3lzL2tlcm5lbC9wZXJmX2V2ZW50X3BhcmFub2lkIG9yIHJ1bm5pbmcgYXMgcm9vdC4iLAogCQkJCSAgICAgIHN5c3RlbV93aWRlID8gInN5c3RlbS13aWRlICIgOiAiIik7CisJCQl9IGVsc2UgaWYgKGVycm5vID09IEVOT0VOVCkgeworCQkJCWVycm9yKCIlcyBldmVudCBpcyBub3Qgc3VwcG9ydGVkLiAiLCBldmVudF9uYW1lKGNvdW50ZXIpKTsKIAkJCX0gZWxzZSB7CiAJCQkJZXJyb3IoIm9wZW5fY291bnRlciByZXR1cm5lZCB3aXRoICVkICglcykuICIKIAkJCQkgICAgICAiL2Jpbi9kbWVzZyBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuIiwKQEAgLTY4Myw4ICs2ODUsNyBAQAogCQlucl9jb3VudGVycyA9IEFSUkFZX1NJWkUoZGVmYXVsdF9hdHRycyk7CiAKIAkJZm9yIChjID0gMDsgYyA8IEFSUkFZX1NJWkUoZGVmYXVsdF9hdHRycyk7ICsrYykgewotCQkJcG9zID0gcGVyZl9ldnNlbF9fbmV3KGRlZmF1bHRfYXR0cnNbY10udHlwZSwKLQkJCQkJICAgICAgZGVmYXVsdF9hdHRyc1tjXS5jb25maWcsCisJCQlwb3MgPSBwZXJmX2V2c2VsX19uZXcoJmRlZmF1bHRfYXR0cnNbY10sCiAJCQkJCSAgICAgIG5yX2NvdW50ZXJzKTsKIAkJCWlmIChwb3MgPT0gTlVMTCkKIAkJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCmluZGV4IDFjOTg0MzQuLmVkNTY5NjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYwpAQCAtMjM0LDYgKzIzNCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2luY2x1ZGUgInV0aWwvY3B1bWFwLmgiCiAjaW5jbHVkZSAidXRpbC9ldnNlbC5oIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCkBAIC0yNjQsNiArMjY1LDcgQEAKIAlpbnQgZXJyID0gLTEsIGZkOwogCXN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzOwogCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7CiAJdW5zaWduZWQgaW50IG5yX29wZW5fY2FsbHMgPSAxMTEsIGk7CiAJaW50IGlkID0gdHJhY2VfZXZlbnRfX2lkKCJzeXNfZW50ZXJfb3BlbiIpOwogCkBAIC0yNzgsNyArMjgwLDEwIEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlldnNlbCA9IHBlcmZfZXZzZWxfX25ldyhQRVJGX1RZUEVfVFJBQ0VQT0lOVCwgaWQsIDApOworCW1lbXNldCgmYXR0ciwgMCwgc2l6ZW9mKGF0dHIpKTsKKwlhdHRyLnR5cGUgPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVDsKKwlhdHRyLmNvbmZpZyA9IGlkOworCWV2c2VsID0gcGVyZl9ldnNlbF9fbmV3KCZhdHRyLCAwKTsKIAlpZiAoZXZzZWwgPT0gTlVMTCkgewogCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fbmV3XG4iKTsKIAkJZ290byBvdXRfdGhyZWFkX21hcF9kZWxldGU7CkBAIC0zMTcsNiArMzIyLDExMSBAQAogCXJldHVybiBlcnI7CiB9CiAKKyNpbmNsdWRlIDxzY2hlZC5oPgorCitzdGF0aWMgaW50IHRlc3RfX29wZW5fc3lzY2FsbF9ldmVudF9vbl9hbGxfY3B1cyh2b2lkKQoreworCWludCBlcnIgPSAtMSwgZmQsIGNwdTsKKwlzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkczsKKwlzdHJ1Y3QgY3B1X21hcCAqY3B1czsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CisJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOworCXVuc2lnbmVkIGludCBucl9vcGVuX2NhbGxzID0gMTExLCBpOworCWNwdV9zZXRfdCAqY3B1X3NldDsKKwlzaXplX3QgY3B1X3NldF9zaXplOworCWludCBpZCA9IHRyYWNlX2V2ZW50X19pZCgic3lzX2VudGVyX29wZW4iKTsKKworCWlmIChpZCA8IDApIHsKKwkJcHJfZGVidWcoImlzIGRlYnVnZnMgbW91bnRlZCBvbiAvc3lzL2tlcm5lbC9kZWJ1Zz9cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJdGhyZWFkcyA9IHRocmVhZF9tYXBfX25ldygtMSwgZ2V0cGlkKCkpOworCWlmICh0aHJlYWRzID09IE5VTEwpIHsKKwkJcHJfZGVidWcoInRocmVhZF9tYXBfX25ld1xuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwljcHVzID0gY3B1X21hcF9fbmV3KE5VTEwpOworCWlmICh0aHJlYWRzID09IE5VTEwpIHsKKwkJcHJfZGVidWcoInRocmVhZF9tYXBfX25ld1xuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwljcHVfc2V0ID0gQ1BVX0FMTE9DKGNwdXMtPm5yKTsKKworCWlmIChjcHVfc2V0ID09IE5VTEwpCisJCWdvdG8gb3V0X3RocmVhZF9tYXBfZGVsZXRlOworCisJY3B1X3NldF9zaXplID0gQ1BVX0FMTE9DX1NJWkUoY3B1cy0+bnIpOworCUNQVV9aRVJPX1MoY3B1X3NldF9zaXplLCBjcHVfc2V0KTsKKworCW1lbXNldCgmYXR0ciwgMCwgc2l6ZW9mKGF0dHIpKTsKKwlhdHRyLnR5cGUgPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVDsKKwlhdHRyLmNvbmZpZyA9IGlkOworCWV2c2VsID0gcGVyZl9ldnNlbF9fbmV3KCZhdHRyLCAwKTsKKwlpZiAoZXZzZWwgPT0gTlVMTCkgeworCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fbmV3XG4iKTsKKwkJZ290byBvdXRfY3B1X2ZyZWU7CisJfQorCisJaWYgKHBlcmZfZXZzZWxfX29wZW4oZXZzZWwsIGNwdXMsIHRocmVhZHMpIDwgMCkgeworCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIG9wZW4gY291bnRlcjogJXMsICIKKwkJCSAidHdlYWsgL3Byb2Mvc3lzL2tlcm5lbC9wZXJmX2V2ZW50X3BhcmFub2lkP1xuIiwKKwkJCSBzdHJlcnJvcihlcnJubykpOworCQlnb3RvIG91dF9ldnNlbF9kZWxldGU7CisJfQorCisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVzLT5ucjsgKytjcHUpIHsKKwkJdW5zaWduZWQgaW50IG5jYWxscyA9IG5yX29wZW5fY2FsbHMgKyBjcHU7CisKKwkJQ1BVX1NFVChjcHUsIGNwdV9zZXQpOworCQlzY2hlZF9zZXRhZmZpbml0eSgwLCBjcHVfc2V0X3NpemUsIGNwdV9zZXQpOworCQlmb3IgKGkgPSAwOyBpIDwgbmNhbGxzOyArK2kpIHsKKwkJCWZkID0gb3BlbigiL2V0Yy9wYXNzd2QiLCBPX1JET05MWSk7CisJCQljbG9zZShmZCk7CisJCX0KKwkJQ1BVX0NMUihjcHUsIGNwdV9zZXQpOworCX0KKworCS8qCisJICogSGVyZSB3ZSBuZWVkIHRvIGV4cGxpY2l0ZWx5IHByZWFsbG9jYXRlIHRoZSBjb3VudHMsIGFzIGlmCisJICogd2UgdXNlIHRoZSBhdXRvIGFsbG9jYXRpb24gaXQgd2lsbCBhbGxvY2F0ZSBqdXN0IGZvciAxIGNwdSwKKwkgKiBhcyB3ZSBzdGFydCBieSBjcHUgMC4KKwkgKi8KKwlpZiAocGVyZl9ldnNlbF9fYWxsb2NfY291bnRzKGV2c2VsLCBjcHVzLT5ucikgPCAwKSB7CisJCXByX2RlYnVnKCJwZXJmX2V2c2VsX19hbGxvY19jb3VudHMobmNwdXM9JWQpXG4iLCBjcHVzLT5ucik7CisJCWdvdG8gb3V0X2Nsb3NlX2ZkOworCX0KKworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1cy0+bnI7ICsrY3B1KSB7CisJCXVuc2lnbmVkIGludCBleHBlY3RlZDsKKworCQlpZiAocGVyZl9ldnNlbF9fcmVhZF9vbl9jcHUoZXZzZWwsIGNwdSwgMCkgPCAwKSB7CisJCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fb3Blbl9yZWFkX29uX2NwdVxuIik7CisJCQlnb3RvIG91dF9jbG9zZV9mZDsKKwkJfQorCisJCWV4cGVjdGVkID0gbnJfb3Blbl9jYWxscyArIGNwdTsKKwkJaWYgKGV2c2VsLT5jb3VudHMtPmNwdVtjcHVdLnZhbCAhPSBleHBlY3RlZCkgeworCQkJcHJfZGVidWcoInBlcmZfZXZzZWxfX3JlYWRfb25fY3B1OiBleHBlY3RlZCB0byBpbnRlcmNlcHQgJWQgY2FsbHMgb24gY3B1ICVkLCBnb3QgJUxkXG4iLAorCQkJCSBleHBlY3RlZCwgY3B1LCBldnNlbC0+Y291bnRzLT5jcHVbY3B1XS52YWwpOworCQkJZ290byBvdXRfY2xvc2VfZmQ7CisJCX0KKwl9CisKKwllcnIgPSAwOworb3V0X2Nsb3NlX2ZkOgorCXBlcmZfZXZzZWxfX2Nsb3NlX2ZkKGV2c2VsLCAxLCB0aHJlYWRzLT5ucik7CitvdXRfZXZzZWxfZGVsZXRlOgorCXBlcmZfZXZzZWxfX2RlbGV0ZShldnNlbCk7CitvdXRfY3B1X2ZyZWU6CisJQ1BVX0ZSRUUoY3B1X3NldCk7CitvdXRfdGhyZWFkX21hcF9kZWxldGU6CisJdGhyZWFkX21hcF9fZGVsZXRlKHRocmVhZHMpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdGVzdCB7CiAJY29uc3QgY2hhciAqZGVzYzsKIAlpbnQgKCpmdW5jKSh2b2lkKTsKQEAgLTMzMCw2ICs0NDAsMTAgQEAKIAkJLmZ1bmMgPSB0ZXN0X19vcGVuX3N5c2NhbGxfZXZlbnQsCiAJfSwKIAl7CisJCS5kZXNjID0gImRldGVjdCBvcGVuIHN5c2NhbGwgZXZlbnQgb24gYWxsIGNwdXMiLAorCQkuZnVuYyA9IHRlc3RfX29wZW5fc3lzY2FsbF9ldmVudF9vbl9hbGxfY3B1cywKKwl9LAorCXsKIAkJLmZ1bmMgPSBOVUxMLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IDFlNjdhYjkuLjZjZTQwNDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTEyNDcsNiArMTI0Nyw4IEBACiAJCQkJZGllKCJQZXJtaXNzaW9uIGVycm9yIC0gYXJlIHlvdSByb290P1xuIgogCQkJCQkiXHQgQ29uc2lkZXIgdHdlYWtpbmciCiAJCQkJCSIgL3Byb2Mvc3lzL2tlcm5lbC9wZXJmX2V2ZW50X3BhcmFub2lkLlxuIik7CisJCQlpZiAoZXJyID09IEVOT0VOVCkKKwkJCQlkaWUoIiVzIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQuICIsIGV2ZW50X25hbWUoZXZzZWwpKTsKIAkJCS8qCiAJCQkgKiBJZiBpdCdzIGN5Y2xlcyB0aGVuIGZhbGwgYmFjayB0byBocnRpbWVyCiAJCQkgKiBiYXNlZCBjcHUtY2xvY2stdGljayBzdyBjb3VudGVyLCB3aGljaApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwppbmRleCBjOTUyNjdlLi5mNWNmZWQ2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZzZWwuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwpAQCAtNiwxNCArNiwxMyBAQAogCiAjZGVmaW5lIEZEKGUsIHgsIHkpICgqKGludCAqKXh5YXJyYXlfX2VudHJ5KGUtPmZkLCB4LCB5KSkKIAotc3RydWN0IHBlcmZfZXZzZWwgKnBlcmZfZXZzZWxfX25ldyh1MzIgdHlwZSwgdTY0IGNvbmZpZywgaW50IGlkeCkKK3N0cnVjdCBwZXJmX2V2c2VsICpwZXJmX2V2c2VsX19uZXcoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwgaW50IGlkeCkKIHsKIAlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwgPSB6YWxsb2Moc2l6ZW9mKCpldnNlbCkpOwogCiAJaWYgKGV2c2VsICE9IE5VTEwpIHsKIAkJZXZzZWwtPmlkeAkgICA9IGlkeDsKLQkJZXZzZWwtPmF0dHIudHlwZSAgID0gdHlwZTsKLQkJZXZzZWwtPmF0dHIuY29uZmlnID0gY29uZmlnOworCQlldnNlbC0+YXR0cgkgICA9ICphdHRyOwogCQlJTklUX0xJU1RfSEVBRCgmZXZzZWwtPm5vZGUpOwogCX0KIApAQCAtMTI4LDU5ICsxMjcsNzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHBlcmZfZXZzZWxfX29wZW5fcGVyX2NwdShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIHN0cnVjdCBjcHVfbWFwICpjcHVzKQorc3RhdGljIGludCBfX3BlcmZfZXZzZWxfX29wZW4oc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBzdHJ1Y3QgY3B1X21hcCAqY3B1cywKKwkJCSAgICAgIHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzKQogewotCWludCBjcHU7CisJaW50IGNwdSwgdGhyZWFkOwogCi0JaWYgKGV2c2VsLT5mZCA9PSBOVUxMICYmIHBlcmZfZXZzZWxfX2FsbG9jX2ZkKGV2c2VsLCBjcHVzLT5uciwgMSkgPCAwKQorCWlmIChldnNlbC0+ZmQgPT0gTlVMTCAmJgorCSAgICBwZXJmX2V2c2VsX19hbGxvY19mZChldnNlbCwgY3B1cy0+bnIsIHRocmVhZHMtPm5yKSA8IDApCiAJCXJldHVybiAtMTsKIAogCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1cy0+bnI7IGNwdSsrKSB7Ci0JCUZEKGV2c2VsLCBjcHUsIDApID0gc3lzX3BlcmZfZXZlbnRfb3BlbigmZXZzZWwtPmF0dHIsIC0xLAotCQkJCQkJCWNwdXMtPm1hcFtjcHVdLCAtMSwgMCk7Ci0JCWlmIChGRChldnNlbCwgY3B1LCAwKSA8IDApCi0JCQlnb3RvIG91dF9jbG9zZTsKKwkJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCB0aHJlYWRzLT5ucjsgdGhyZWFkKyspIHsKKwkJCUZEKGV2c2VsLCBjcHUsIHRocmVhZCkgPSBzeXNfcGVyZl9ldmVudF9vcGVuKCZldnNlbC0+YXR0ciwKKwkJCQkJCQkJICAgICB0aHJlYWRzLT5tYXBbdGhyZWFkXSwKKwkJCQkJCQkJICAgICBjcHVzLT5tYXBbY3B1XSwgLTEsIDApOworCQkJaWYgKEZEKGV2c2VsLCBjcHUsIHRocmVhZCkgPCAwKQorCQkJCWdvdG8gb3V0X2Nsb3NlOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CiAKIG91dF9jbG9zZToKLQl3aGlsZSAoLS1jcHUgPj0gMCkgewotCQljbG9zZShGRChldnNlbCwgY3B1LCAwKSk7Ci0JCUZEKGV2c2VsLCBjcHUsIDApID0gLTE7Ci0JfQorCWRvIHsKKwkJd2hpbGUgKC0tdGhyZWFkID49IDApIHsKKwkJCWNsb3NlKEZEKGV2c2VsLCBjcHUsIHRocmVhZCkpOworCQkJRkQoZXZzZWwsIGNwdSwgdGhyZWFkKSA9IC0xOworCQl9CisJCXRocmVhZCA9IHRocmVhZHMtPm5yOworCX0gd2hpbGUgKC0tY3B1ID49IDApOwogCXJldHVybiAtMTsKIH0KIAorc3RhdGljIHN0cnVjdCB7CisJc3RydWN0IGNwdV9tYXAgbWFwOworCWludCBjcHVzWzFdOworfSBlbXB0eV9jcHVfbWFwID0geworCS5tYXAubnIJPSAxLAorCS5jcHVzCT0geyAtMSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeworCXN0cnVjdCB0aHJlYWRfbWFwIG1hcDsKKwlpbnQgdGhyZWFkc1sxXTsKK30gZW1wdHlfdGhyZWFkX21hcCA9IHsKKwkubWFwLm5yCSA9IDEsCisJLnRocmVhZHMgPSB7IC0xLCB9LAorfTsKKworaW50IHBlcmZfZXZzZWxfX29wZW4oc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorCQkgICAgIHN0cnVjdCBjcHVfbWFwICpjcHVzLCBzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcykKK3sKKworCWlmIChjcHVzID09IE5VTEwpIHsKKwkJLyogV29yayBhcm91bmQgb2xkIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHN0cmljdCBhbGlhc2luZyAqLworCQljcHVzID0gJmVtcHR5X2NwdV9tYXAubWFwOworCX0KKworCWlmICh0aHJlYWRzID09IE5VTEwpCisJCXRocmVhZHMgPSAmZW1wdHlfdGhyZWFkX21hcC5tYXA7CisKKwlyZXR1cm4gX19wZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCB0aHJlYWRzKTsKK30KKworaW50IHBlcmZfZXZzZWxfX29wZW5fcGVyX2NwdShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIHN0cnVjdCBjcHVfbWFwICpjcHVzKQoreworCXJldHVybiBfX3BlcmZfZXZzZWxfX29wZW4oZXZzZWwsIGNwdXMsICZlbXB0eV90aHJlYWRfbWFwLm1hcCk7Cit9CisKIGludCBwZXJmX2V2c2VsX19vcGVuX3Blcl90aHJlYWQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcykKIHsKLQlpbnQgdGhyZWFkOwotCi0JaWYgKGV2c2VsLT5mZCA9PSBOVUxMICYmIHBlcmZfZXZzZWxfX2FsbG9jX2ZkKGV2c2VsLCAxLCB0aHJlYWRzLT5ucikpCi0JCXJldHVybiAtMTsKLQotCWZvciAodGhyZWFkID0gMDsgdGhyZWFkIDwgdGhyZWFkcy0+bnI7IHRocmVhZCsrKSB7Ci0JCUZEKGV2c2VsLCAwLCB0aHJlYWQpID0gc3lzX3BlcmZfZXZlbnRfb3BlbigmZXZzZWwtPmF0dHIsCi0JCQkJCQkJICAgdGhyZWFkcy0+bWFwW3RocmVhZF0sIC0xLCAtMSwgMCk7Ci0JCWlmIChGRChldnNlbCwgMCwgdGhyZWFkKSA8IDApCi0JCQlnb3RvIG91dF9jbG9zZTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotb3V0X2Nsb3NlOgotCXdoaWxlICgtLXRocmVhZCA+PSAwKSB7Ci0JCWNsb3NlKEZEKGV2c2VsLCAwLCB0aHJlYWQpKTsKLQkJRkQoZXZzZWwsIDAsIHRocmVhZCkgPSAtMTsKLQl9Ci0JcmV0dXJuIC0xOwotfQotCi1pbnQgcGVyZl9ldnNlbF9fb3BlbihzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIAotCQkgICAgIHN0cnVjdCBjcHVfbWFwICpjcHVzLCBzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcykKLXsKLQlpZiAodGhyZWFkcyA9PSBOVUxMKQotCQlyZXR1cm4gcGVyZl9ldnNlbF9fb3Blbl9wZXJfY3B1KGV2c2VsLCBjcHVzKTsKLQotCXJldHVybiBwZXJmX2V2c2VsX19vcGVuX3Blcl90aHJlYWQoZXZzZWwsIHRocmVhZHMpOworCXJldHVybiBfX3BlcmZfZXZzZWxfX29wZW4oZXZzZWwsICZlbXB0eV9jcHVfbWFwLm1hcCwgdGhyZWFkcyk7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZzZWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCmluZGV4IGEwY2NkNjkuLmIyZDc1NWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCkBAIC0zNyw3ICszNyw3IEBACiBzdHJ1Y3QgY3B1X21hcDsKIHN0cnVjdCB0aHJlYWRfbWFwOwogCi1zdHJ1Y3QgcGVyZl9ldnNlbCAqcGVyZl9ldnNlbF9fbmV3KHUzMiB0eXBlLCB1NjQgY29uZmlnLCBpbnQgaWR4KTsKK3N0cnVjdCBwZXJmX2V2c2VsICpwZXJmX2V2c2VsX19uZXcoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwgaW50IGlkeCk7CiB2b2lkIHBlcmZfZXZzZWxfX2RlbGV0ZShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpOwogCiBpbnQgcGVyZl9ldnNlbF9fYWxsb2NfZmQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgbmNwdXMsIGludCBudGhyZWFkcyk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKaW5kZXggNjQ5MDgzZi4uNWNiNmY0YiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwpAQCAtNDkwLDYgKzQ5MCwzMSBAQAogCXJldHVybiBFVlRfSEFORExFRF9BTEw7CiB9CiAKK3N0YXRpYyBpbnQgc3RvcmVfZXZlbnRfdHlwZShjb25zdCBjaGFyICpvcmduYW1lKQoreworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdLCAqYzsKKwlGSUxFICpmaWxlOworCWludCBpZCwgbjsKKworCXNwcmludGYoZmlsZW5hbWUsICIlcy8iLCBkZWJ1Z2ZzX3BhdGgpOworCXN0cm5jYXQoZmlsZW5hbWUsIG9yZ25hbWUsIHN0cmxlbihvcmduYW1lKSk7CisJc3RyY2F0KGZpbGVuYW1lLCAiL2lkIik7CisKKwljID0gc3RyY2hyKGZpbGVuYW1lLCAnOicpOworCWlmIChjKQorCQkqYyA9ICcvJzsKKworCWZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKwlpZiAoIWZpbGUpCisJCXJldHVybiAwOworCW4gPSBmc2NhbmYoZmlsZSwgIiVpIiwgJmlkKTsKKwlmY2xvc2UoZmlsZSk7CisJaWYgKG4gPCAxKSB7CisJCXByX2VycigiY2Fubm90IHN0b3JlIGV2ZW50IElEXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBwZXJmX2hlYWRlcl9fcHVzaF9ldmVudChpZCwgb3JnbmFtZSk7Cit9CiAKIHN0YXRpYyBlbnVtIGV2ZW50X3Jlc3VsdCBwYXJzZV90cmFjZXBvaW50X2V2ZW50KGNvbnN0IGNoYXIgKipzdHJwLAogCQkJCSAgICBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKQpAQCAtNTMzLDkgKzU1OCwxMyBAQAogCQkqc3RycCArPSBzdHJsZW4oc3lzX25hbWUpICsgZXZ0X2xlbmd0aDsKIAkJcmV0dXJuIHBhcnNlX211bHRpcGxlX3RyYWNlcG9pbnRfZXZlbnQoc3lzX25hbWUsIGV2dF9uYW1lLAogCQkJCQkJICAgICAgIGZsYWdzKTsKLQl9IGVsc2UKKwl9IGVsc2UgeworCQlpZiAoc3RvcmVfZXZlbnRfdHlwZShldnRfbmFtZSkgPCAwKQorCQkJcmV0dXJuIEVWVF9GQUlMRUQ7CisKIAkJcmV0dXJuIHBhcnNlX3NpbmdsZV90cmFjZXBvaW50X2V2ZW50KHN5c19uYW1lLCBldnRfbmFtZSwKIAkJCQkJCSAgICAgZXZ0X2xlbmd0aCwgYXR0ciwgc3RycCk7CisJfQogfQogCiBzdGF0aWMgZW51bSBldmVudF9yZXN1bHQKQEAgLTc3OCw0MSArODA3LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzdG9yZV9ldmVudF90eXBlKGNvbnN0IGNoYXIgKm9yZ25hbWUpCi17Ci0JY2hhciBmaWxlbmFtZVtQQVRIX01BWF0sICpjOwotCUZJTEUgKmZpbGU7Ci0JaW50IGlkLCBuOwotCi0Jc3ByaW50ZihmaWxlbmFtZSwgIiVzLyIsIGRlYnVnZnNfcGF0aCk7Ci0Jc3RybmNhdChmaWxlbmFtZSwgb3JnbmFtZSwgc3RybGVuKG9yZ25hbWUpKTsKLQlzdHJjYXQoZmlsZW5hbWUsICIvaWQiKTsKLQotCWMgPSBzdHJjaHIoZmlsZW5hbWUsICc6Jyk7Ci0JaWYgKGMpCi0JCSpjID0gJy8nOwotCi0JZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwotCWlmICghZmlsZSkKLQkJcmV0dXJuIDA7Ci0JbiA9IGZzY2FuZihmaWxlLCAiJWkiLCAmaWQpOwotCWZjbG9zZShmaWxlKTsKLQlpZiAobiA8IDEpIHsKLQkJcHJfZXJyKCJjYW5ub3Qgc3RvcmUgZXZlbnQgSURcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KGlkLCBvcmduYW1lKTsKLX0KLQogaW50IHBhcnNlX2V2ZW50cyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLCBjb25zdCBjaGFyICpzdHIsIGludCB1bnNldCBfX3VzZWQpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOwogCWVudW0gZXZlbnRfcmVzdWx0IHJldDsKIAotCWlmIChzdHJjaHIoc3RyLCAnOicpKQotCQlpZiAoc3RvcmVfZXZlbnRfdHlwZShzdHIpIDwgMCkKLQkJCXJldHVybiAtMTsKLQogCWZvciAoOzspIHsKIAkJbWVtc2V0KCZhdHRyLCAwLCBzaXplb2YoYXR0cikpOwogCQlyZXQgPSBwYXJzZV9ldmVudF9zeW1ib2xzKCZzdHIsICZhdHRyKTsKQEAgLTgyNCw3ICs4MjMsNyBAQAogCiAJCWlmIChyZXQgIT0gRVZUX0hBTkRMRURfQUxMKSB7CiAJCQlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7Ci0JCQlldnNlbCA9IHBlcmZfZXZzZWxfX25ldyhhdHRyLnR5cGUsIGF0dHIuY29uZmlnLAorCQkJZXZzZWwgPSBwZXJmX2V2c2VsX19uZXcoJmF0dHIsCiAJCQkJCQlucl9jb3VudGVycyk7CiAJCQlpZiAoZXZzZWwgPT0gTlVMTCkKIAkJCQlyZXR1cm4gLTE7CkBAIC0xMDE0LDggKzEwMTMsMTUgQEAKIAogaW50IHBlcmZfZXZzZWxfbGlzdF9fY3JlYXRlX2RlZmF1bHQodm9pZCkKIHsKLQlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwgPSBwZXJmX2V2c2VsX19uZXcoUEVSRl9UWVBFX0hBUkRXQVJFLAotCQkJCQkJICAgUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLCAwKTsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CisJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOworCisJbWVtc2V0KCZhdHRyLCAwLCBzaXplb2YoYXR0cikpOworCWF0dHIudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRTsKKwlhdHRyLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUzsKKworCWV2c2VsID0gcGVyZl9ldnNlbF9fbmV3KCZhdHRyLCAwKTsKKwogCWlmIChldnNlbCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKaW5kZXggNmZiNDY5NC4uMzEzZGFjMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogCWlmIChzaXplID09IDApCiAJCXNpemUgPSA4OwogCi0JaWYgKGhlYWQgKyBldmVudC0+aGVhZGVyLnNpemUgPj0gbW1hcF9zaXplKSB7CisJaWYgKGhlYWQgKyBldmVudC0+aGVhZGVyLnNpemUgPiBtbWFwX3NpemUpIHsKIAkJaWYgKG1tYXBzW21hcF9pZHhdKSB7CiAJCQltdW5tYXAobW1hcHNbbWFwX2lkeF0sIG1tYXBfc2l6ZSk7CiAJCQltbWFwc1ttYXBfaWR4XSA9IE5VTEw7CmRpZmYgLS1naXQgYS90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L01ha2VmaWxlIGIvdG9vbHMvcG93ZXIveDg2L3R1cmJvc3RhdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDhlMWYxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIveDg2L3R1cmJvc3RhdC9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKK3R1cmJvc3RhdCA6IHR1cmJvc3RhdC5jCisKK2NsZWFuIDoKKwlybSAtZiB0dXJib3N0YXQKKworaW5zdGFsbCA6CisJaW5zdGFsbCB0dXJib3N0YXQgL3Vzci9iaW4vdHVyYm9zdGF0CisJaW5zdGFsbCB0dXJib3N0YXQuOCAvdXNyL3NoYXJlL21hbi9tYW44CmRpZmYgLS1naXQgYS90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC44IGIvdG9vbHMvcG93ZXIveDg2L3R1cmJvc3RhdC90dXJib3N0YXQuOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjc1MTI1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIveDg2L3R1cmJvc3RhdC90dXJib3N0YXQuOApAQCAtMCwwICsxLDE3MiBAQAorLlRIIFRVUkJPU1RBVCA4CisuU0ggTkFNRQordHVyYm9zdGF0IFwtIFJlcG9ydCBwcm9jZXNzb3IgZnJlcXVlbmN5IGFuZCBpZGxlIHN0YXRpc3RpY3MKKy5TSCBTWU5PUFNJUworLmZ0IEIKKy5CIHR1cmJvc3RhdAorLlJCIFsgIlwtdiIgXQorLlJCIFsgIlwtTSBNU1IjIiBdCisuUkIgY29tbWFuZAorLmJyCisuQiB0dXJib3N0YXQKKy5SQiBbICJcLXYiIF0KKy5SQiBbICJcLU0gTVNSIyIgXQorLlJCIFsgIlwtaSBpbnRlcnZhbF9zZWMiIF0KKy5TSCBERVNDUklQVElPTgorXGZCdHVyYm9zdGF0IFxmUCByZXBvcnRzIHByb2Nlc3NvciB0b3BvbG9neSwgZnJlcXVlbmN5CithbmQgaWRsZSBwb3dlciBzdGF0ZSBzdGF0aXN0aWNzIG9uIG1vZGVybiBYODYgcHJvY2Vzc29ycy4KK0VpdGhlciBcZkJjb21tYW5kXGZQIGlzIGZvcmtlZCBhbmQgc3RhdGlzdGljcyBhcmUgcHJpbnRlZAordXBvbiBpdHMgY29tcGxldGlvbiwgb3Igc3RhdGlzdGljcyBhcmUgcHJpbnRlZCBwZXJpb2RpY2FsbHkuCisKK1xmQnR1cmJvc3RhdCBcZlAKK3JlcXVpcmVzIHRoYXQgdGhlIHByb2Nlc3Nvcgorc3VwcG9ydHMgYW4gImludmFyaWFudCIgVFNDLCBwbHVzIHRoZSBBUEVSRiBhbmQgTVBFUkYgTVNScy4KK1xmQnR1cmJvc3RhdCBcZlAgd2lsbCByZXBvcnQgaWRsZSBjcHUgcG93ZXIgc3RhdGUgcmVzaWRlbmN5CitvbiBwcm9jZXNzb3JzIHRoYXQgYWRkaXRpb25hbGx5IHN1cHBvcnQgQy1zdGF0ZSByZXNpZGVuY3kgY291bnRlcnMuCisKKy5TUyBPcHRpb25zCitUaGUgXGZCLXZcZlAgb3B0aW9uIGluY3JlYXNlcyB2ZXJib3NpdHkuCisuUFAKK1RoZSBcZkItTSBNU1IjXGZQIG9wdGlvbiBkdW1wcyB0aGUgc3BlY2lmaWVkIE1TUiwKK2luIGFkZGl0aW9uIHRvIHRoZSB1c3VhbCBmcmVxdWVuY3kgYW5kIGlkbGUgc3RhdGlzdGljcy4KKy5QUAorVGhlIFxmQi1pIGludGVydmFsX3NlY1xmUCBvcHRpb24gcHJpbnRzIHN0YXRpc3RpY3MgZXZlcnkgXGZpaW50ZXJ2YWxfc2VjXGZQIHNlY29uZHMuCitUaGUgZGVmYXVsdCBpcyA1IHNlY29uZHMuCisuUFAKK1RoZSBcZkJjb21tYW5kXGZQIHBhcmFtZXRlciBmb3JrcyBcZkJjb21tYW5kXGZQIGFuZCB1cG9uIGl0cyBleGl0LAorZGlzcGxheXMgdGhlIHN0YXRpc3RpY3MgZ2F0aGVyZWQgc2luY2UgaXQgd2FzIGZvcmtlZC4KKy5QUAorLlNIIEZJRUxEIERFU0NSSVBUSU9OUworLm5mCitcZkJwa2dcZlAgcHJvY2Vzc29yIHBhY2thZ2UgbnVtYmVyLgorXGZCY29yZVxmUCBwcm9jZXNzb3IgY29yZSBudW1iZXIuCitcZkJDUFVcZlAgTGludXggQ1BVIChsb2dpY2FsIHByb2Nlc3NvcikgbnVtYmVyLgorXGZCJWMwXGZQIHBlcmNlbnQgb2YgdGhlIGludGVydmFsIHRoYXQgdGhlIENQVSByZXRpcmVkIGluc3RydWN0aW9ucy4KK1xmQkdIelxmUCBhdmVyYWdlIGNsb2NrIHJhdGUgd2hpbGUgdGhlIENQVSB3YXMgaW4gYzAgc3RhdGUuCitcZkJUU0NcZlAgYXZlcmFnZSBHSHogdGhhdCB0aGUgVFNDIHJhbiBkdXJpbmcgdGhlIGVudGlyZSBpbnRlcnZhbC4KK1xmQiVjMSwgJWMzLCAlYzZcZlAgc2hvdyB0aGUgcGVyY2VudGFnZSByZXNpZGVuY3kgaW4gaGFyZHdhcmUgY29yZSBpZGxlIHN0YXRlcy4KK1xmQiVwYzMsICVwYzZcZlAgcGVyY2VudGFnZSByZXNpZGVuY3kgaW4gaGFyZHdhcmUgcGFja2FnZSBpZGxlIHN0YXRlcy4KKy5maQorLlBQCisuU0ggRVhBTVBMRQorV2l0aG91dCBhbnkgcGFyYW1ldGVycywgdHVyYm9zdGF0IHByaW50cyBvdXQgY291bnRlcnMgZXZlciA1IHNlY29uZHMuCisob3ZlcnJpZGUgaW50ZXJ2YWwgd2l0aCAiLWkgc2VjIiBvcHRpb24sIG9yIHNwZWNpZnkgYSBjb21tYW5kCitmb3IgdHVyYm9zdGF0IHRvIGZvcmspLgorCitUaGUgZmlyc3Qgcm93IG9mIHN0YXRpc3RpY3MgcmVmbGVjdCB0aGUgYXZlcmFnZSBmb3IgdGhlIGVudGlyZSBzeXN0ZW0uCitTdWJzZXF1ZW50IHJvd3Mgc2hvdyBwZXItQ1BVIHN0YXRpc3RpY3MuCisKKy5uZgorW3Jvb3RAeDk4MF0jIC4vdHVyYm9zdGF0Citjb3JlIENQVSAgICVjMCAgIEdIeiAgVFNDICAgJWMxICAgICVjMyAgICAlYzYgICAlcGMzICAgJXBjNgorICAgICAgICAgIDAuMDQgMS42MiAzLjM4ICAgMC4xMSAgIDAuMDAgIDk5Ljg1ICAgMC4wMCAgOTUuMDcKKyAgMCAgIDAgICAwLjA0IDEuNjIgMy4zOCAgIDAuMDYgICAwLjAwICA5OS45MCAgIDAuMDAgIDk1LjA3CisgIDAgICA2ICAgMC4wMiAxLjYyIDMuMzggICAwLjA4ICAgMC4wMCAgOTkuOTAgICAwLjAwICA5NS4wNworICAxICAgMiAgIDAuMTAgMS42MiAzLjM4ICAgMC4yOSAgIDAuMDAgIDk5LjYxICAgMC4wMCAgOTUuMDcKKyAgMSAgIDggICAwLjExIDEuNjIgMy4zOCAgIDAuMjggICAwLjAwICA5OS42MSAgIDAuMDAgIDk1LjA3CisgIDIgICA0ICAgMC4wMSAxLjYyIDMuMzggICAwLjAxICAgMC4wMCAgOTkuOTggICAwLjAwICA5NS4wNworICAyICAxMCAgIDAuMDEgMS42MSAzLjM4ICAgMC4wMiAgIDAuMDAgIDk5Ljk4ICAgMC4wMCAgOTUuMDcKKyAgOCAgIDEgICAwLjA3IDEuNjIgMy4zOCAgIDAuMTUgICAwLjAwICA5OS43OCAgIDAuMDAgIDk1LjA3CisgIDggICA3ICAgMC4wMyAxLjYyIDMuMzggICAwLjE5ICAgMC4wMCAgOTkuNzggICAwLjAwICA5NS4wNworICA5ICAgMyAgIDAuMDEgMS42MiAzLjM4ICAgMC4wMiAgIDAuMDAgIDk5Ljk4ICAgMC4wMCAgOTUuMDcKKyAgOSAgIDkgICAwLjAxIDEuNjIgMy4zOCAgIDAuMDIgICAwLjAwICA5OS45OCAgIDAuMDAgIDk1LjA3CisgMTAgICA1ICAgMC4wMSAxLjYyIDMuMzggICAwLjEzICAgMC4wMCAgOTkuODYgICAwLjAwICA5NS4wNworIDEwICAxMSAgIDAuMDggMS42MiAzLjM4ICAgMC4wNSAgIDAuMDAgIDk5Ljg2ICAgMC4wMCAgOTUuMDcKKy5maQorLlNIIFZFUkJPU0UgRVhBTVBMRQorVGhlICItdiIgb3B0aW9uIGFkZHMgdmVyYm9zaXR5IHRvIHRoZSBvdXRwdXQ6CisKKy5uZgorR2VudWluZUludGVsIDExIENQVUlEIGxldmVsczsgZmFtaWx5Om1vZGVsOnN0ZXBwaW5nIDB4NjoyYzoyICg2OjQ0OjIpCisxMiAqIDEzMyA9IDE2MDAgTUh6IG1heCBlZmZpY2llbmN5CisyNSAqIDEzMyA9IDMzMzMgTUh6IFRTQyBmcmVxdWVuY3kKKzI2ICogMTMzID0gMzQ2NyBNSHogbWF4IHR1cmJvIDQgYWN0aXZlIGNvcmVzCisyNiAqIDEzMyA9IDM0NjcgTUh6IG1heCB0dXJibyAzIGFjdGl2ZSBjb3JlcworMjcgKiAxMzMgPSAzNjAwIE1IeiBtYXggdHVyYm8gMiBhY3RpdmUgY29yZXMKKzI3ICogMTMzID0gMzYwMCBNSHogbWF4IHR1cmJvIDEgYWN0aXZlIGNvcmVzCisKKy5maQorVGhlIFxmQm1heCBlZmZpY2llbmN5XGZQIGZyZXF1ZW5jeSwgYS5rLmEuIExvdyBGcmVxdWVuY3kgTW9kZSwgaXMgdGhlIGZyZXF1ZW5jeQorYXZhaWxhYmxlIGF0IHRoZSBtaW5pbXVtIHBhY2thZ2Ugdm9sdGFnZS4gIFRoZSBcZkJUU0MgZnJlcXVlbmN5XGZQIGlzIHRoZSBub21pbmFsCittYXhpbXVtIGZyZXF1ZW5jeSBvZiB0aGUgcHJvY2Vzc29yIGlmIHR1cmJvLW1vZGUgd2VyZSBub3QgYXZhaWxhYmxlLiAgVGhpcyBmcmVxdWVuY3kKK3Nob3VsZCBiZSBzdXN0YWluYWJsZSBvbiBhbGwgQ1BVcyBpbmRlZmluaXRlbHksIGdpdmVuIG5vbWluYWwgcG93ZXIgYW5kIGNvb2xpbmcuCitUaGUgcmVtYWluaW5nIHJvd3Mgc2hvdyB3aGF0IG1heGltdW0gdHVyYm8gZnJlcXVlbmN5IGlzIHBvc3NpYmxlCitkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBpZGxlIGNvcmVzLiAgTm90ZSB0aGF0IHRoaXMgaW5mb3JtYXRpb24gaXMKK25vdCBhdmFpbGFibGUgb24gYWxsIHByb2Nlc3NvcnMuCisuU0ggRk9SSyBFWEFNUExFCitJZiB0dXJib3N0YXQgaXMgaW52b2tlZCB3aXRoIGEgY29tbWFuZCwgaXQgd2lsbCBmb3JrIHRoYXQgY29tbWFuZAorYW5kIG91dHB1dCB0aGUgc3RhdGlzdGljcyBnYXRoZXJlZCB3aGVuIHRoZSBjb21tYW5kIGV4aXRzLgorZWcuIEhlcmUgYSBjeWNsZSBzb2FrZXIgaXMgcnVuIG9uIDEgQ1BVIChzZWUgJWMwKSBmb3IgYSBmZXcgc2Vjb25kcwordW50aWwgXkMgd2hpbGUgdGhlIG90aGVyIENQVXMgYXJlIG1vc3RseSBpZGxlOgorCisubmYKK1tyb290QHg5ODAgbGVuYl0jIC4vdHVyYm9zdGF0IGNhdCAvZGV2L3plcm8gPiAvZGV2L251bGwKKworXkNjb3JlIENQVSAgICVjMCAgIEdIeiAgVFNDICAgJWMxICAgICVjMyAgICAlYzYgICAlcGMzICAgJXBjNgorICAgICAgICAgICA4LjQ5IDMuNjMgMy4zOCAgMTYuMjMgICAwLjY2ICA3NC42MyAgIDAuMDAgICAwLjAwCisgICAwICAgMCAgIDEuMjIgMy42MiAzLjM4ICAzMi4xOCAgIDAuMDAgIDY2LjYwICAgMC4wMCAgIDAuMDAKKyAgIDAgICA2ICAgMC40MCAzLjYxIDMuMzggIDMzLjAwICAgMC4wMCAgNjYuNjAgICAwLjAwICAgMC4wMAorICAgMSAgIDIgICAwLjExIDMuMTQgMy4zOCAgIDAuMTkgICAzLjk1ICA5NS43NSAgIDAuMDAgICAwLjAwCisgICAxICAgOCAgIDAuMDUgMi44OCAzLjM4ICAgMC4yNSAgIDMuOTUgIDk1Ljc1ICAgMC4wMCAgIDAuMDAKKyAgIDIgICA0ICAgMC4wMCAzLjEzIDMuMzggICAwLjAyICAgMC4wMCAgOTkuOTggICAwLjAwICAgMC4wMAorICAgMiAgMTAgICAwLjAwIDMuMDkgMy4zOCAgIDAuMDIgICAwLjAwICA5OS45OCAgIDAuMDAgICAwLjAwCisgICA4ICAgMSAgIDAuMDQgMy41MCAzLjM4ICAxNC40MyAgIDAuMDAgIDg1LjU0ICAgMC4wMCAgIDAuMDAKKyAgIDggICA3ICAgMC4wMyAyLjk4IDMuMzggIDE0LjQzICAgMC4wMCAgODUuNTQgICAwLjAwICAgMC4wMAorICAgOSAgIDMgICAwLjAwIDMuMTYgMy4zOCAxMDAuMDAgICAwLjAwICAgMC4wMCAgIDAuMDAgICAwLjAwCisgICA5ICAgOSAgOTkuOTMgMy42MyAzLjM4ICAgMC4wNiAgIDAuMDAgICAwLjAwICAgMC4wMCAgIDAuMDAKKyAgMTAgICA1ICAgMC4wMSAyLjgyIDMuMzggICAwLjA4ICAgMC4wMCAgOTkuOTEgICAwLjAwICAgMC4wMAorICAxMCAgMTEgICAwLjAyIDMuMzYgMy4zOCAgIDAuMDYgICAwLjAwICA5OS45MSAgIDAuMDAgICAwLjAwCis2Ljk1MDg2NiBzZWMKKworLmZpCitBYm92ZSB0aGUgY3ljbGUgc29ha2VyIGRyaXZlcyBjcHU5IHVwIDMuNiBHaHogdHVyYm8gbGltaXQKK3doaWxlIHRoZSBvdGhlciBwcm9jZXNzb3JzIGFyZSBnZW5lcmFsbHkgaW4gdmFyaW91cyBzdGF0ZXMgb2YgaWRsZS4KKworTm90ZSB0aGF0IGNwdTMgaXMgYW4gSFQgc2libGluZyBzaGFyaW5nIGNvcmU5Cit3aXRoIGNwdTksIGFuZCB0aHVzIGl0IGlzIHVuYWJsZSB0byBnZXQgdG8gYW4gaWRsZSBzdGF0ZQorZGVlcGVyIHRoYW4gYzEgd2hpbGUgY3B1OSBpcyBidXN5LgorCitOb3RlIHRoYXQgdHVyYm9zdGF0IHJlcG9ydHMgYXZlcmFnZSBHSHogb2YgMy42MSwgd2hpbGUKK3RoZSBhcml0aG1ldGljIGF2ZXJhZ2Ugb2YgdGhlIEdIeiBjb2x1bW4gYWJvdmUgaXMgMy4yNC4KK1RoaXMgaXMgYSB3ZWlnaHRlZCBhdmVyYWdlLCB3aGVyZSB0aGUgd2VpZ2h0IGlzICVjMC4gIGllLiBpdCBpcyB0aGUgdG90YWwgbnVtYmVyIG9mCit1bi1oYWx0ZWQgY3ljbGVzIGVsYXBzZWQgcGVyIHRpbWUgZGl2aWRlZCBieSB0aGUgbnVtYmVyIG9mIENQVXMuCisuU0ggTk9URVMKKworLkIgInR1cmJvc3RhdCAiCittdXN0IGJlIHJ1biBhcyByb290LgorCisuQiAidHVyYm9zdGF0ICIKK3JlYWRzIGhhcmR3YXJlIGNvdW50ZXJzLCBidXQgZG9lc24ndCB3cml0ZSB0aGVtLgorU28gaXQgd2lsbCBub3QgaW50ZXJmZXJlIHdpdGggdGhlIE9TIG9yIG90aGVyIHByb2dyYW1zLCBpbmNsdWRpbmcKK211bHRpcGxlIGludm9jYXRpb25zIG9mIGl0c2VsZi4KKworXGZCdHVyYm9zdGF0IFxmUAorbWF5IHdvcmsgcG9vcmx5IG9uIExpbnV4LTIuNi4yMCB0aHJvdWdoIDIuNi4yOSwKK2FzIFxmQmFjcGktY3B1ZnJlcSBcZlBwZXJpb2RpY2FsbHkgY2xlYXJlZCB0aGUgQVBFUkYgYW5kIE1QRVJGCitpbiB0aG9zZSBrZXJuZWxzLgorCitUaGUgQVBFUkYsIE1QRVJGIE1TUnMgYXJlIGRlZmluZWQgdG8gY291bnQgbm9uLWhhbHRlZCBjeWNsZXMuCitBbHRob3VnaCBpdCBpcyBub3QgZ3VhcmFudGVlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLCB0dXJib3N0YXQgYXNzdW1lcwordGhhdCB0aGV5IGNvdW50IGF0IFRTQyByYXRlLCB3aGljaCBpcyB0cnVlIG9uIGFsbCBwcm9jZXNzb3JzIHRlc3RlZCB0byBkYXRlLgorCisuU0ggUkVGRVJFTkNFUworIkludGVswq4gVHVyYm8gQm9vc3QgVGVjaG5vbG9neQoraW4gSW50ZWzCriBDb3Jl4oSiIE1pY3JvYXJjaGl0ZWN0dXJlIChOZWhhbGVtKSBCYXNlZCBQcm9jZXNzb3JzIgoraHR0cDovL2Rvd25sb2FkLmludGVsLmNvbS9kZXNpZ24vcHJvY2Vzc29yL2FwcGxub3RzLzMyMDM1NC5wZGYKKworIkludGVswq4gNjQgYW5kIElBLTMyIEFyY2hpdGVjdHVyZXMgU29mdHdhcmUgRGV2ZWxvcGVyJ3MgTWFudWFsCitWb2x1bWUgM0I6IFN5c3RlbSBQcm9ncmFtbWluZyBHdWlkZSIKK2h0dHA6Ly93d3cuaW50ZWwuY29tL3Byb2R1Y3RzL3Byb2Nlc3Nvci9tYW51YWxzLworCisuU0ggRklMRVMKKy50YQorLm5mCisvZGV2L2NwdS8qL21zcgorLmZpCisKKy5TSCAiU0VFIEFMU08iCittc3IoNCksIHZtc3RhdCg4KQorLlBQCisuU0ggQVVUSE9SUworLm5mCitXcml0dGVuIGJ5IExlbiBCcm93biA8bGVuLmJyb3duQGludGVsLmNvbT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL3g4Ni90dXJib3N0YXQvdHVyYm9zdGF0LmMgYi90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNjk4M2QKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC5jCkBAIC0wLDAgKzEsMTA0OCBAQAorLyoKKyAqIHR1cmJvc3RhdCAtLSBzaG93IENQVSBmcmVxdWVuY3kgYW5kIEMtc3RhdGUgcmVzaWRlbmN5CisgKiBvbiBtb2Rlcm4gSW50ZWwgdHVyYm8tY2FwYWJsZSBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24uCisgKiBMZW4gQnJvd24gPGxlbi5icm93bkBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNkZWZpbmUgTVNSX1RTQwkweDEwCisjZGVmaW5lIE1TUl9ORUhBTEVNX1BMQVRGT1JNX0lORk8JMHhDRQorI2RlZmluZSBNU1JfTkVIQUxFTV9UVVJCT19SQVRJT19MSU1JVAkweDFBRAorI2RlZmluZSBNU1JfQVBFUkYJMHhFOAorI2RlZmluZSBNU1JfTVBFUkYJMHhFNworI2RlZmluZSBNU1JfUEtHX0MyX1JFU0lERU5DWQkweDYwRAkvKiBTTkIgb25seSAqLworI2RlZmluZSBNU1JfUEtHX0MzX1JFU0lERU5DWQkweDNGOAorI2RlZmluZSBNU1JfUEtHX0M2X1JFU0lERU5DWQkweDNGOQorI2RlZmluZSBNU1JfUEtHX0M3X1JFU0lERU5DWQkweDNGQQkvKiBTTkIgb25seSAqLworI2RlZmluZSBNU1JfQ09SRV9DM19SRVNJREVOQ1kJMHgzRkMKKyNkZWZpbmUgTVNSX0NPUkVfQzZfUkVTSURFTkNZCTB4M0ZECisjZGVmaW5lIE1TUl9DT1JFX0M3X1JFU0lERU5DWQkweDNGRQkvKiBTTkIgb25seSAqLworCitjaGFyICpwcm9jX3N0YXQgPSAiL3Byb2Mvc3RhdCI7Cit1bnNpZ25lZCBpbnQgaW50ZXJ2YWxfc2VjID0gNTsJLyogc2V0IHdpdGggLWkgaW50ZXJ2YWxfc2VjICovCit1bnNpZ25lZCBpbnQgdmVyYm9zZTsJCS8qIHNldCB3aXRoIC12ICovCit1bnNpZ25lZCBpbnQgc2tpcF9jMDsKK3Vuc2lnbmVkIGludCBza2lwX2MxOwordW5zaWduZWQgaW50IGRvX25obV9jc3RhdGVzOwordW5zaWduZWQgaW50IGRvX3NuYl9jc3RhdGVzOwordW5zaWduZWQgaW50IGhhc19hcGVyZjsKK3Vuc2lnbmVkIGludCB1bml0cyA9IDEwMDAwMDAwMDA7CS8qIEdoeiBldGMgKi8KK3Vuc2lnbmVkIGludCBnZW51aW5lX2ludGVsOwordW5zaWduZWQgaW50IGhhc19pbnZhcmlhbnRfdHNjOwordW5zaWduZWQgaW50IGRvX25laGFsZW1fcGxhdGZvcm1faW5mbzsKK3Vuc2lnbmVkIGludCBkb19uZWhhbGVtX3R1cmJvX3JhdGlvX2xpbWl0OwordW5zaWduZWQgaW50IGV4dHJhX21zcl9vZmZzZXQ7Citkb3VibGUgYmNsazsKK3Vuc2lnbmVkIGludCBzaG93X3BrZzsKK3Vuc2lnbmVkIGludCBzaG93X2NvcmU7Cit1bnNpZ25lZCBpbnQgc2hvd19jcHU7CisKK2ludCBhcGVyZl9tcGVyZl91bnN0YWJsZTsKK2ludCBiYWNrd2FyZHNfY291bnQ7CitjaGFyICpwcm9nbmFtZTsKK2ludCBuZWVkX3JlaW5pdGlhbGl6ZTsKKworaW50IG51bV9jcHVzOworCit0eXBlZGVmIHN0cnVjdCBwZXJfY3B1X2NvdW50ZXJzIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdHNjOwkJLyogcGVyIHRocmVhZCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBhcGVyZjsJLyogcGVyIHRocmVhZCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBtcGVyZjsJLyogcGVyIHRocmVhZCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBjMTsJLyogcGVyIHRocmVhZCAoY2FsY3VsYXRlZCkgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgYzM7CS8qIHBlciBjb3JlICovCisJdW5zaWduZWQgbG9uZyBsb25nIGM2OwkvKiBwZXIgY29yZSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBjNzsJLyogcGVyIGNvcmUgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgcGMyOwkvKiBwZXIgcGFja2FnZSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBwYzM7CS8qIHBlciBwYWNrYWdlICovCisJdW5zaWduZWQgbG9uZyBsb25nIHBjNjsJLyogcGVyIHBhY2thZ2UgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgcGM3OwkvKiBwZXIgcGFja2FnZSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBleHRyYV9tc3I7CS8qIHBlciB0aHJlYWQgKi8KKwlpbnQgcGtnOworCWludCBjb3JlOworCWludCBjcHU7CisJc3RydWN0IHBlcl9jcHVfY291bnRlcnMgKm5leHQ7Cit9IFBDQzsKKworUENDICpwY2NfZXZlbjsKK1BDQyAqcGNjX29kZDsKK1BDQyAqcGNjX2RlbHRhOworUENDICpwY2NfYXZlcmFnZTsKK3N0cnVjdCB0aW1ldmFsIHR2X2V2ZW47CitzdHJ1Y3QgdGltZXZhbCB0dl9vZGQ7CitzdHJ1Y3QgdGltZXZhbCB0dl9kZWx0YTsKKwordW5zaWduZWQgbG9uZyBsb25nIGdldF9tc3IoaW50IGNwdSwgb2ZmX3Qgb2Zmc2V0KQoreworCXNzaXplX3QgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBtc3I7CisJY2hhciBwYXRobmFtZVszMl07CisJaW50IGZkOworCisJc3ByaW50ZihwYXRobmFtZSwgIi9kZXYvY3B1LyVkL21zciIsIGNwdSk7CisJZmQgPSBvcGVuKHBhdGhuYW1lLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQlwZXJyb3IocGF0aG5hbWUpOworCQluZWVkX3JlaW5pdGlhbGl6ZSA9IDE7CisJCXJldHVybiAwOworCX0KKworCXJldHZhbCA9IHByZWFkKGZkLCAmbXNyLCBzaXplb2YgbXNyLCBvZmZzZXQpOworCWlmIChyZXR2YWwgIT0gc2l6ZW9mIG1zcikgeworCQlmcHJpbnRmKHN0ZGVyciwgImNwdSVkIHByZWFkKC4uLiwgMHglengpID0gJWpkXG4iLAorCQkJY3B1LCBvZmZzZXQsIHJldHZhbCk7CisJCWV4aXQoLTIpOworCX0KKworCWNsb3NlKGZkKTsKKwlyZXR1cm4gbXNyOworfQorCit2b2lkIHByaW50X2hlYWRlcigpCit7CisJaWYgKHNob3dfcGtnKQorCQlmcHJpbnRmKHN0ZGVyciwgInBrZyAiKTsKKwlpZiAoc2hvd19jb3JlKQorCQlmcHJpbnRmKHN0ZGVyciwgImNvcmUiKTsKKwlpZiAoc2hvd19jcHUpCisJCWZwcmludGYoc3RkZXJyLCAiIENQVSIpOworCWlmIChkb19uaG1fY3N0YXRlcykKKwkJZnByaW50ZihzdGRlcnIsICIgICAlJWMwICIpOworCWlmIChoYXNfYXBlcmYpCisJCWZwcmludGYoc3RkZXJyLCAiICBHSHoiKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgVFNDIik7CisJaWYgKGRvX25obV9jc3RhdGVzKQorCQlmcHJpbnRmKHN0ZGVyciwgIiAgICUlYzEgIik7CisJaWYgKGRvX25obV9jc3RhdGVzKQorCQlmcHJpbnRmKHN0ZGVyciwgIiAgICUlYzMgIik7CisJaWYgKGRvX25obV9jc3RhdGVzKQorCQlmcHJpbnRmKHN0ZGVyciwgIiAgICUlYzYgIik7CisJaWYgKGRvX3NuYl9jc3RhdGVzKQorCQlmcHJpbnRmKHN0ZGVyciwgIiAgICUlYzcgIik7CisJaWYgKGRvX3NuYl9jc3RhdGVzKQorCQlmcHJpbnRmKHN0ZGVyciwgIiAgJSVwYzIgIik7CisJaWYgKGRvX25obV9jc3RhdGVzKQorCQlmcHJpbnRmKHN0ZGVyciwgIiAgJSVwYzMgIik7CisJaWYgKGRvX25obV9jc3RhdGVzKQorCQlmcHJpbnRmKHN0ZGVyciwgIiAgJSVwYzYgIik7CisJaWYgKGRvX3NuYl9jc3RhdGVzKQorCQlmcHJpbnRmKHN0ZGVyciwgIiAgJSVwYzcgIik7CisJaWYgKGV4dHJhX21zcl9vZmZzZXQpCisJCWZwcmludGYoc3RkZXJyLCAiICAgICAgIE1TUiAweCV4ICIsIGV4dHJhX21zcl9vZmZzZXQpOworCisJcHV0YygnXG4nLCBzdGRlcnIpOworfQorCit2b2lkIGR1bXBfcGNjKFBDQyAqcGNjKQoreworCWZwcmludGYoc3RkZXJyLCAicGFja2FnZTogJWQgIiwgcGNjLT5wa2cpOworCWZwcmludGYoc3RkZXJyLCAiY29yZTo6ICVkICIsIHBjYy0+Y29yZSk7CisJZnByaW50ZihzdGRlcnIsICJDUFU6ICVkICIsIHBjYy0+Y3B1KTsKKwlmcHJpbnRmKHN0ZGVyciwgIlRTQzogJTAxNmxsWFxuIiwgcGNjLT50c2MpOworCWZwcmludGYoc3RkZXJyLCAiYzM6ICUwMTZsbFhcbiIsIHBjYy0+YzMpOworCWZwcmludGYoc3RkZXJyLCAiYzY6ICUwMTZsbFhcbiIsIHBjYy0+YzYpOworCWZwcmludGYoc3RkZXJyLCAiYzc6ICUwMTZsbFhcbiIsIHBjYy0+YzcpOworCWZwcmludGYoc3RkZXJyLCAiYXBlcmY6ICUwMTZsbFhcbiIsIHBjYy0+YXBlcmYpOworCWZwcmludGYoc3RkZXJyLCAicGMyOiAlMDE2bGxYXG4iLCBwY2MtPnBjMik7CisJZnByaW50ZihzdGRlcnIsICJwYzM6ICUwMTZsbFhcbiIsIHBjYy0+cGMzKTsKKwlmcHJpbnRmKHN0ZGVyciwgInBjNjogJTAxNmxsWFxuIiwgcGNjLT5wYzYpOworCWZwcmludGYoc3RkZXJyLCAicGM3OiAlMDE2bGxYXG4iLCBwY2MtPnBjNyk7CisJZnByaW50ZihzdGRlcnIsICJtc3IweCV4OiAlMDE2bGxYXG4iLCBleHRyYV9tc3Jfb2Zmc2V0LCBwY2MtPmV4dHJhX21zcik7Cit9CisKK3ZvaWQgZHVtcF9saXN0KFBDQyAqcGNjKQoreworCXByaW50ZigiZHVtcF9saXN0IDB4JXBcbiIsIHBjYyk7CisKKwlmb3IgKDsgcGNjOyBwY2MgPSBwY2MtPm5leHQpCisJCWR1bXBfcGNjKHBjYyk7Cit9CisKK3ZvaWQgcHJpbnRfcGNjKFBDQyAqcCkKK3sKKwlkb3VibGUgaW50ZXJ2YWxfZmxvYXQ7CisKKwlpbnRlcnZhbF9mbG9hdCA9IHR2X2RlbHRhLnR2X3NlYyArIHR2X2RlbHRhLnR2X3VzZWMvMTAwMDAwMC4wOworCisJLyogdG9wb2xvZ3kgY29sdW1ucywgcHJpbnQgYmxhbmtzIG9uIDFzdCAoYXZlcmFnZSkgbGluZSAqLworCWlmIChwID09IHBjY19hdmVyYWdlKSB7CisJCWlmIChzaG93X3BrZykKKwkJCWZwcmludGYoc3RkZXJyLCAiICAgICIpOworCQlpZiAoc2hvd19jb3JlKQorCQkJZnByaW50ZihzdGRlcnIsICIgICAgIik7CisJCWlmIChzaG93X2NwdSkKKwkJCWZwcmludGYoc3RkZXJyLCAiICAgICIpOworCX0gZWxzZSB7CisJCWlmIChzaG93X3BrZykKKwkJCWZwcmludGYoc3RkZXJyLCAiJTRkIiwgcC0+cGtnKTsKKwkJaWYgKHNob3dfY29yZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiJTRkIiwgcC0+Y29yZSk7CisJCWlmIChzaG93X2NwdSkKKwkJCWZwcmludGYoc3RkZXJyLCAiJTRkIiwgcC0+Y3B1KTsKKwl9CisKKwkvKiAlYzAgKi8KKwlpZiAoZG9fbmhtX2NzdGF0ZXMpIHsKKwkJaWYgKCFza2lwX2MwKQorCQkJZnByaW50ZihzdGRlcnIsICIlNy4yZiIsIDEwMC4wICogcC0+bXBlcmYvcC0+dHNjKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsICIgICAqKioqIik7CisJfQorCisJLyogR0h6ICovCisJaWYgKGhhc19hcGVyZikgeworCQlpZiAoIWFwZXJmX21wZXJmX3Vuc3RhYmxlKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiU1LjJmIiwKKwkJCQkxLjAgKiBwLT50c2MgLyB1bml0cyAqIHAtPmFwZXJmIC8KKwkJCQlwLT5tcGVyZiAvIGludGVydmFsX2Zsb2F0KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChwLT5hcGVyZiA+IHAtPnRzYyB8fCBwLT5tcGVyZiA+IHAtPnRzYykgeworCQkJCWZwcmludGYoc3RkZXJyLCAiICoqKioiKTsKKwkJCX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsICIlNC4xZioiLAorCQkJCQkxLjAgKiBwLT50c2MgLworCQkJCQl1bml0cyAqIHAtPmFwZXJmIC8KKwkJCQkJcC0+bXBlcmYgLyBpbnRlcnZhbF9mbG9hdCk7CisJCQl9CisJCX0KKwl9CisKKwkvKiBUU0MgKi8KKwlmcHJpbnRmKHN0ZGVyciwgIiU1LjJmIiwgMS4wICogcC0+dHNjL3VuaXRzL2ludGVydmFsX2Zsb2F0KTsKKworCWlmIChkb19uaG1fY3N0YXRlcykgeworCQlpZiAoIXNraXBfYzEpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiU3LjJmIiwgMTAwLjAgKiBwLT5jMS9wLT50c2MpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICoqKioiKTsKKwl9CisJaWYgKGRvX25obV9jc3RhdGVzKQorCQlmcHJpbnRmKHN0ZGVyciwgIiU3LjJmIiwgMTAwLjAgKiBwLT5jMy9wLT50c2MpOworCWlmIChkb19uaG1fY3N0YXRlcykKKwkJZnByaW50ZihzdGRlcnIsICIlNy4yZiIsIDEwMC4wICogcC0+YzYvcC0+dHNjKTsKKwlpZiAoZG9fc25iX2NzdGF0ZXMpCisJCWZwcmludGYoc3RkZXJyLCAiJTcuMmYiLCAxMDAuMCAqIHAtPmM3L3AtPnRzYyk7CisJaWYgKGRvX3NuYl9jc3RhdGVzKQorCQlmcHJpbnRmKHN0ZGVyciwgIiU3LjJmIiwgMTAwLjAgKiBwLT5wYzIvcC0+dHNjKTsKKwlpZiAoZG9fbmhtX2NzdGF0ZXMpCisJCWZwcmludGYoc3RkZXJyLCAiJTcuMmYiLCAxMDAuMCAqIHAtPnBjMy9wLT50c2MpOworCWlmIChkb19uaG1fY3N0YXRlcykKKwkJZnByaW50ZihzdGRlcnIsICIlNy4yZiIsIDEwMC4wICogcC0+cGM2L3AtPnRzYyk7CisJaWYgKGRvX3NuYl9jc3RhdGVzKQorCQlmcHJpbnRmKHN0ZGVyciwgIiU3LjJmIiwgMTAwLjAgKiBwLT5wYzcvcC0+dHNjKTsKKwlpZiAoZXh0cmFfbXNyX29mZnNldCkKKwkJZnByaW50ZihzdGRlcnIsICIgIDB4JTAxNmxseCIsIHAtPmV4dHJhX21zcik7CisJcHV0YygnXG4nLCBzdGRlcnIpOworfQorCit2b2lkIHByaW50X2NvdW50ZXJzKFBDQyAqY250KQoreworCVBDQyAqcGNjOworCisJcHJpbnRfaGVhZGVyKCk7CisKKwlpZiAobnVtX2NwdXMgPiAxKQorCQlwcmludF9wY2MocGNjX2F2ZXJhZ2UpOworCisJZm9yIChwY2MgPSBjbnQ7IHBjYyAhPSBOVUxMOyBwY2MgPSBwY2MtPm5leHQpCisJCXByaW50X3BjYyhwY2MpOworCit9CisKKyNkZWZpbmUgU1VCVFJBQ1RfQ09VTlRFUihhZnRlciwgYmVmb3JlLCBkZWx0YSkgKGRlbHRhID0gKGFmdGVyIC0gYmVmb3JlKSwgKGJlZm9yZSA+IGFmdGVyKSkKKworCitpbnQgY29tcHV0ZV9kZWx0YShQQ0MgKmFmdGVyLCBQQ0MgKmJlZm9yZSwgUENDICpkZWx0YSkKK3sKKwlpbnQgZXJyb3JzID0gMDsKKwlpbnQgcGVyZl9lcnIgPSAwOworCisJc2tpcF9jMCA9IHNraXBfYzEgPSAwOworCisJZm9yICggOyBhZnRlciAmJiBiZWZvcmUgJiYgZGVsdGE7CisJCWFmdGVyID0gYWZ0ZXItPm5leHQsIGJlZm9yZSA9IGJlZm9yZS0+bmV4dCwgZGVsdGEgPSBkZWx0YS0+bmV4dCkgeworCQlpZiAoYmVmb3JlLT5jcHUgIT0gYWZ0ZXItPmNwdSkgeworCQkJcHJpbnRmKCJjcHUgY29uZmlndXJhdGlvbiBjaGFuZ2VkOiAlZCAhPSAlZFxuIiwKKwkJCQliZWZvcmUtPmNwdSwgYWZ0ZXItPmNwdSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoU1VCVFJBQ1RfQ09VTlRFUihhZnRlci0+dHNjLCBiZWZvcmUtPnRzYywgZGVsdGEtPnRzYykpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiY3B1JWQgVFNDIHdlbnQgYmFja3dhcmRzICVsbFggdG8gJWxsWFxuIiwKKwkJCQliZWZvcmUtPmNwdSwgYmVmb3JlLT50c2MsIGFmdGVyLT50c2MpOworCQkJZXJyb3JzKys7CisJCX0KKwkJLyogY2hlY2sgZm9yIFRTQyA8IDEgTWN5Y2xlcyBvdmVyIGludGVydmFsICovCisJCWlmIChkZWx0YS0+dHNjIDwgKDEwMDAgKiAxMDAwKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJJbnNhbmVseSBzbG93IFRTQyByYXRlLCIKKwkJCQkiIFRTQyBzdG9wcyBpbiBpZGxlP1xuIik7CisJCQlmcHJpbnRmKHN0ZGVyciwgIllvdSBjYW4gZGlzYWJsZSBhbGwgYy1zdGF0ZXMiCisJCQkJIiBieSBib290aW5nIHdpdGggXCJpZGxlPXBvbGxcIlxuIik7CisJCQlmcHJpbnRmKHN0ZGVyciwgIm9yIGp1c3QgdGhlIGRlZXAgb25lcyB3aXRoIgorCQkJCSIgXCJwcm9jZXNzb3IubWF4X2NzdGF0ZT0xXCJcbiIpOworCQkJZXhpdCgtMyk7CisJCX0KKwkJaWYgKFNVQlRSQUNUX0NPVU5URVIoYWZ0ZXItPmMzLCBiZWZvcmUtPmMzLCBkZWx0YS0+YzMpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgImNwdSVkIGMzIGNvdW50ZXIgd2VudCBiYWNrd2FyZHMgJWxsWCB0byAlbGxYXG4iLAorCQkJCWJlZm9yZS0+Y3B1LCBiZWZvcmUtPmMzLCBhZnRlci0+YzMpOworCQkJZXJyb3JzKys7CisJCX0KKwkJaWYgKFNVQlRSQUNUX0NPVU5URVIoYWZ0ZXItPmM2LCBiZWZvcmUtPmM2LCBkZWx0YS0+YzYpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgImNwdSVkIGM2IGNvdW50ZXIgd2VudCBiYWNrd2FyZHMgJWxsWCB0byAlbGxYXG4iLAorCQkJCWJlZm9yZS0+Y3B1LCBiZWZvcmUtPmM2LCBhZnRlci0+YzYpOworCQkJZXJyb3JzKys7CisJCX0KKwkJaWYgKFNVQlRSQUNUX0NPVU5URVIoYWZ0ZXItPmM3LCBiZWZvcmUtPmM3LCBkZWx0YS0+YzcpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgImNwdSVkIGM3IGNvdW50ZXIgd2VudCBiYWNrd2FyZHMgJWxsWCB0byAlbGxYXG4iLAorCQkJCWJlZm9yZS0+Y3B1LCBiZWZvcmUtPmM3LCBhZnRlci0+YzcpOworCQkJZXJyb3JzKys7CisJCX0KKwkJaWYgKFNVQlRSQUNUX0NPVU5URVIoYWZ0ZXItPnBjMiwgYmVmb3JlLT5wYzIsIGRlbHRhLT5wYzIpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgImNwdSVkIHBjMiBjb3VudGVyIHdlbnQgYmFja3dhcmRzICVsbFggdG8gJWxsWFxuIiwKKwkJCQliZWZvcmUtPmNwdSwgYmVmb3JlLT5wYzIsIGFmdGVyLT5wYzIpOworCQkJZXJyb3JzKys7CisJCX0KKwkJaWYgKFNVQlRSQUNUX0NPVU5URVIoYWZ0ZXItPnBjMywgYmVmb3JlLT5wYzMsIGRlbHRhLT5wYzMpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgImNwdSVkIHBjMyBjb3VudGVyIHdlbnQgYmFja3dhcmRzICVsbFggdG8gJWxsWFxuIiwKKwkJCQliZWZvcmUtPmNwdSwgYmVmb3JlLT5wYzMsIGFmdGVyLT5wYzMpOworCQkJZXJyb3JzKys7CisJCX0KKwkJaWYgKFNVQlRSQUNUX0NPVU5URVIoYWZ0ZXItPnBjNiwgYmVmb3JlLT5wYzYsIGRlbHRhLT5wYzYpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgImNwdSVkIHBjNiBjb3VudGVyIHdlbnQgYmFja3dhcmRzICVsbFggdG8gJWxsWFxuIiwKKwkJCQliZWZvcmUtPmNwdSwgYmVmb3JlLT5wYzYsIGFmdGVyLT5wYzYpOworCQkJZXJyb3JzKys7CisJCX0KKwkJaWYgKFNVQlRSQUNUX0NPVU5URVIoYWZ0ZXItPnBjNywgYmVmb3JlLT5wYzcsIGRlbHRhLT5wYzcpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgImNwdSVkIHBjNyBjb3VudGVyIHdlbnQgYmFja3dhcmRzICVsbFggdG8gJWxsWFxuIiwKKwkJCQliZWZvcmUtPmNwdSwgYmVmb3JlLT5wYzcsIGFmdGVyLT5wYzcpOworCQkJZXJyb3JzKys7CisJCX0KKworCQlwZXJmX2VyciA9IFNVQlRSQUNUX0NPVU5URVIoYWZ0ZXItPmFwZXJmLCBiZWZvcmUtPmFwZXJmLCBkZWx0YS0+YXBlcmYpOworCQlpZiAocGVyZl9lcnIpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiY3B1JWQgYXBlcmYgY291bnRlciB3ZW50IGJhY2t3YXJkcyAlbGxYIHRvICVsbFhcbiIsCisJCQkJYmVmb3JlLT5jcHUsIGJlZm9yZS0+YXBlcmYsIGFmdGVyLT5hcGVyZik7CisJCX0KKwkJcGVyZl9lcnIgfD0gU1VCVFJBQ1RfQ09VTlRFUihhZnRlci0+bXBlcmYsIGJlZm9yZS0+bXBlcmYsIGRlbHRhLT5tcGVyZik7CisJCWlmIChwZXJmX2VycikgeworCQkJZnByaW50ZihzdGRlcnIsICJjcHUlZCBtcGVyZiBjb3VudGVyIHdlbnQgYmFja3dhcmRzICVsbFggdG8gJWxsWFxuIiwKKwkJCQliZWZvcmUtPmNwdSwgYmVmb3JlLT5tcGVyZiwgYWZ0ZXItPm1wZXJmKTsKKwkJfQorCQlpZiAocGVyZl9lcnIpIHsKKwkJCWlmICghYXBlcmZfbXBlcmZfdW5zdGFibGUpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBBUEVSRiBvciBNUEVSRiB3ZW50IGJhY2t3YXJkcyAqXG4iLCBwcm9nbmFtZSk7CisJCQkJZnByaW50ZihzdGRlcnIsICIqIEZyZXF1ZW5jeSByZXN1bHRzIGRvIG5vdCBjb3ZlciBlbnRpcmUgaW50ZXJ2YWwgKlxuIik7CisJCQkJZnByaW50ZihzdGRlcnIsICIqIGZpeCB0aGlzIGJ5IHJ1bm5pbmcgTGludXgtMi42LjMwIG9yIGxhdGVyICpcbiIpOworCisJCQkJYXBlcmZfbXBlcmZfdW5zdGFibGUgPSAxOworCQkJfQorCQkJLyoKKwkJCSAqIG1wZXJmIGRlbHRhIGlzIGxpa2VseSBhIGh1Z2UgInBvc2l0aXZlIiBudW1iZXIKKwkJCSAqIGNhbiBub3QgdXNlIGl0IGZvciBjYWxjdWxhdGluZyBjMCB0aW1lCisJCQkgKi8KKwkJCXNraXBfYzAgPSAxOworCQkJc2tpcF9jMSA9IDE7CisJCX0KKworCQkvKgorCQkgKiBBcyBtcGVyZiBhbmQgdHNjIGNvbGxlY3Rpb24gYXJlIG5vdCBhdG9taWMsCisJCSAqIGl0IGlzIHBvc3NpYmxlIGZvciBtcGVyZidzIG5vbi1oYWx0ZWQgY3ljbGVzCisJCSAqIHRvIGV4Y2VlZCBUU0MncyBhbGwgY3ljbGVzOiBzaG93IGMxID0gMCUgaW4gdGhhdCBjYXNlLgorCQkgKi8KKwkJaWYgKGRlbHRhLT5tcGVyZiA+IGRlbHRhLT50c2MpCisJCQlkZWx0YS0+YzEgPSAwOworCQllbHNlIC8qIG5vcm1hbCBjYXNlLCBkZXJpdmUgYzEgKi8KKwkJCWRlbHRhLT5jMSA9IGRlbHRhLT50c2MgLSBkZWx0YS0+bXBlcmYKKwkJCQktIGRlbHRhLT5jMyAtIGRlbHRhLT5jNiAtIGRlbHRhLT5jNzsKKworCQlpZiAoZGVsdGEtPm1wZXJmID09IDApCisJCQlkZWx0YS0+bXBlcmYgPSAxOwkvKiBkaXZpZGUgYnkgMCBwcm90ZWN0aW9uICovCisKKwkJLyoKKwkJICogZm9yICJleHRyYSBtc3IiLCBqdXN0IGNvcHkgdGhlIGxhdGVzdCB3L28gc3VidHJhY3RpbmcKKwkJICovCisJCWRlbHRhLT5leHRyYV9tc3IgPSBhZnRlci0+ZXh0cmFfbXNyOworCQlpZiAoZXJyb3JzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGNwdSVkIGJlZm9yZTpcbiIsIGJlZm9yZS0+Y3B1KTsKKwkJCWR1bXBfcGNjKGJlZm9yZSk7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGNwdSVkIGFmdGVyOlxuIiwgYmVmb3JlLT5jcHUpOworCQkJZHVtcF9wY2MoYWZ0ZXIpOworCQkJZXJyb3JzID0gMDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBjb21wdXRlX2F2ZXJhZ2UoUENDICpkZWx0YSwgUENDICphdmcpCit7CisJUENDICpzdW07CisKKwlzdW0gPSBjYWxsb2MoMSwgc2l6ZW9mKFBDQykpOworCWlmIChzdW0gPT0gTlVMTCkgeworCQlwZXJyb3IoImNhbGxvYyBzdW0iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlmb3IgKDsgZGVsdGE7IGRlbHRhID0gZGVsdGEtPm5leHQpIHsKKwkJc3VtLT50c2MgKz0gZGVsdGEtPnRzYzsKKwkJc3VtLT5jMSArPSBkZWx0YS0+YzE7CisJCXN1bS0+YzMgKz0gZGVsdGEtPmMzOworCQlzdW0tPmM2ICs9IGRlbHRhLT5jNjsKKwkJc3VtLT5jNyArPSBkZWx0YS0+Yzc7CisJCXN1bS0+YXBlcmYgKz0gZGVsdGEtPmFwZXJmOworCQlzdW0tPm1wZXJmICs9IGRlbHRhLT5tcGVyZjsKKwkJc3VtLT5wYzIgKz0gZGVsdGEtPnBjMjsKKwkJc3VtLT5wYzMgKz0gZGVsdGEtPnBjMzsKKwkJc3VtLT5wYzYgKz0gZGVsdGEtPnBjNjsKKwkJc3VtLT5wYzcgKz0gZGVsdGEtPnBjNzsKKwl9CisJYXZnLT50c2MgPSBzdW0tPnRzYy9udW1fY3B1czsKKwlhdmctPmMxID0gc3VtLT5jMS9udW1fY3B1czsKKwlhdmctPmMzID0gc3VtLT5jMy9udW1fY3B1czsKKwlhdmctPmM2ID0gc3VtLT5jNi9udW1fY3B1czsKKwlhdmctPmM3ID0gc3VtLT5jNy9udW1fY3B1czsKKwlhdmctPmFwZXJmID0gc3VtLT5hcGVyZi9udW1fY3B1czsKKwlhdmctPm1wZXJmID0gc3VtLT5tcGVyZi9udW1fY3B1czsKKwlhdmctPnBjMiA9IHN1bS0+cGMyL251bV9jcHVzOworCWF2Zy0+cGMzID0gc3VtLT5wYzMvbnVtX2NwdXM7CisJYXZnLT5wYzYgPSBzdW0tPnBjNi9udW1fY3B1czsKKwlhdmctPnBjNyA9IHN1bS0+cGM3L251bV9jcHVzOworCisJZnJlZShzdW0pOworfQorCit2b2lkIGdldF9jb3VudGVycyhQQ0MgKnBjYykKK3sKKwlmb3IgKCA7IHBjYzsgcGNjID0gcGNjLT5uZXh0KSB7CisJCXBjYy0+dHNjID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX1RTQyk7CisJCWlmIChkb19uaG1fY3N0YXRlcykKKwkJCXBjYy0+YzMgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfQ09SRV9DM19SRVNJREVOQ1kpOworCQlpZiAoZG9fbmhtX2NzdGF0ZXMpCisJCQlwY2MtPmM2ID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX0NPUkVfQzZfUkVTSURFTkNZKTsKKwkJaWYgKGRvX3NuYl9jc3RhdGVzKQorCQkJcGNjLT5jNyA9IGdldF9tc3IocGNjLT5jcHUsIE1TUl9DT1JFX0M3X1JFU0lERU5DWSk7CisJCWlmIChoYXNfYXBlcmYpCisJCQlwY2MtPmFwZXJmID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX0FQRVJGKTsKKwkJaWYgKGhhc19hcGVyZikKKwkJCXBjYy0+bXBlcmYgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfTVBFUkYpOworCQlpZiAoZG9fc25iX2NzdGF0ZXMpCisJCQlwY2MtPnBjMiA9IGdldF9tc3IocGNjLT5jcHUsIE1TUl9QS0dfQzJfUkVTSURFTkNZKTsKKwkJaWYgKGRvX25obV9jc3RhdGVzKQorCQkJcGNjLT5wYzMgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfUEtHX0MzX1JFU0lERU5DWSk7CisJCWlmIChkb19uaG1fY3N0YXRlcykKKwkJCXBjYy0+cGM2ID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX1BLR19DNl9SRVNJREVOQ1kpOworCQlpZiAoZG9fc25iX2NzdGF0ZXMpCisJCQlwY2MtPnBjNyA9IGdldF9tc3IocGNjLT5jcHUsIE1TUl9QS0dfQzdfUkVTSURFTkNZKTsKKwkJaWYgKGV4dHJhX21zcl9vZmZzZXQpCisJCQlwY2MtPmV4dHJhX21zciA9IGdldF9tc3IocGNjLT5jcHUsIGV4dHJhX21zcl9vZmZzZXQpOworCX0KK30KKworCit2b2lkIHByaW50X25laGFsZW1faW5mbygpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIG1zcjsKKwl1bnNpZ25lZCBpbnQgcmF0aW87CisKKwlpZiAoIWRvX25laGFsZW1fcGxhdGZvcm1faW5mbykKKwkJcmV0dXJuOworCisJbXNyID0gZ2V0X21zcigwLCBNU1JfTkVIQUxFTV9QTEFURk9STV9JTkZPKTsKKworCXJhdGlvID0gKG1zciA+PiA0MCkgJiAweEZGOworCWZwcmludGYoc3RkZXJyLCAiJWQgKiAlLjBmID0gJS4wZiBNSHogbWF4IGVmZmljaWVuY3lcbiIsCisJCXJhdGlvLCBiY2xrLCByYXRpbyAqIGJjbGspOworCisJcmF0aW8gPSAobXNyID4+IDgpICYgMHhGRjsKKwlmcHJpbnRmKHN0ZGVyciwgIiVkICogJS4wZiA9ICUuMGYgTUh6IFRTQyBmcmVxdWVuY3lcbiIsCisJCXJhdGlvLCBiY2xrLCByYXRpbyAqIGJjbGspOworCisJaWYgKHZlcmJvc2UgPiAxKQorCQlmcHJpbnRmKHN0ZGVyciwgIk1TUl9ORUhBTEVNX1BMQVRGT1JNX0lORk86IDB4JWxseFxuIiwgbXNyKTsKKworCWlmICghZG9fbmVoYWxlbV90dXJib19yYXRpb19saW1pdCkKKwkJcmV0dXJuOworCisJbXNyID0gZ2V0X21zcigwLCBNU1JfTkVIQUxFTV9UVVJCT19SQVRJT19MSU1JVCk7CisKKwlyYXRpbyA9IChtc3IgPj4gMjQpICYgMHhGRjsKKwlpZiAocmF0aW8pCisJCWZwcmludGYoc3RkZXJyLCAiJWQgKiAlLjBmID0gJS4wZiBNSHogbWF4IHR1cmJvIDQgYWN0aXZlIGNvcmVzXG4iLAorCQkJcmF0aW8sIGJjbGssIHJhdGlvICogYmNsayk7CisKKwlyYXRpbyA9IChtc3IgPj4gMTYpICYgMHhGRjsKKwlpZiAocmF0aW8pCisJCWZwcmludGYoc3RkZXJyLCAiJWQgKiAlLjBmID0gJS4wZiBNSHogbWF4IHR1cmJvIDMgYWN0aXZlIGNvcmVzXG4iLAorCQkJcmF0aW8sIGJjbGssIHJhdGlvICogYmNsayk7CisKKwlyYXRpbyA9IChtc3IgPj4gOCkgJiAweEZGOworCWlmIChyYXRpbykKKwkJZnByaW50ZihzdGRlcnIsICIlZCAqICUuMGYgPSAlLjBmIE1IeiBtYXggdHVyYm8gMiBhY3RpdmUgY29yZXNcbiIsCisJCQlyYXRpbywgYmNsaywgcmF0aW8gKiBiY2xrKTsKKworCXJhdGlvID0gKG1zciA+PiAwKSAmIDB4RkY7CisJaWYgKHJhdGlvKQorCQlmcHJpbnRmKHN0ZGVyciwgIiVkICogJS4wZiA9ICUuMGYgTUh6IG1heCB0dXJibyAxIGFjdGl2ZSBjb3Jlc1xuIiwKKwkJCXJhdGlvLCBiY2xrLCByYXRpbyAqIGJjbGspOworCit9CisKK3ZvaWQgZnJlZV9jb3VudGVyX2xpc3QoUENDICpsaXN0KQoreworCVBDQyAqcDsKKworCWZvciAocCA9IGxpc3Q7IHA7ICkgeworCQlQQ0MgKmZyZWVfbWU7CisKKwkJZnJlZV9tZSA9IHA7CisJCXAgPSBwLT5uZXh0OworCQlmcmVlKGZyZWVfbWUpOworCX0KKwlyZXR1cm47Cit9CisKK3ZvaWQgZnJlZV9hbGxfY291bnRlcnModm9pZCkKK3sKKwlmcmVlX2NvdW50ZXJfbGlzdChwY2NfZXZlbik7CisJcGNjX2V2ZW4gPSBOVUxMOworCisJZnJlZV9jb3VudGVyX2xpc3QocGNjX29kZCk7CisJcGNjX29kZCA9IE5VTEw7CisKKwlmcmVlX2NvdW50ZXJfbGlzdChwY2NfZGVsdGEpOworCXBjY19kZWx0YSA9IE5VTEw7CisKKwlmcmVlX2NvdW50ZXJfbGlzdChwY2NfYXZlcmFnZSk7CisJcGNjX2F2ZXJhZ2UgPSBOVUxMOworfQorCit2b2lkIGluc2VydF9jcHVfY291bnRlcnMoUENDICoqbGlzdCwgUENDICpuZXcpCit7CisJUENDICpwcmV2OworCisJLyoKKwkgKiBsaXN0IHdhcyBlbXB0eQorCSAqLworCWlmICgqbGlzdCA9PSBOVUxMKSB7CisJCW5ldy0+bmV4dCA9ICpsaXN0OworCQkqbGlzdCA9IG5ldzsKKwkJcmV0dXJuOworCX0KKworCXNob3dfY3B1ID0gMTsJLyogdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBDUFUgKi8KKworCS8qCisJICogaW5zZXJ0IG9uIGZyb250IG9mIGxpc3QuCisJICogSXQgaXMgc29ydGVkIGJ5IGFzY2VuZGluZyBwYWNrYWdlIywgY29yZSMsIGNwdSMKKwkgKi8KKwlpZiAoKCgqbGlzdCktPnBrZyA+IG5ldy0+cGtnKSB8fAorCSAgICAoKCgqbGlzdCktPnBrZyA9PSBuZXctPnBrZykgJiYgKCgqbGlzdCktPmNvcmUgPiBuZXctPmNvcmUpKSB8fAorCSAgICAoKCgqbGlzdCktPnBrZyA9PSBuZXctPnBrZykgJiYgKCgqbGlzdCktPmNvcmUgPT0gbmV3LT5jb3JlKSAmJiAoKCpsaXN0KS0+Y3B1ID4gbmV3LT5jcHUpKSkgeworCQluZXctPm5leHQgPSAqbGlzdDsKKwkJKmxpc3QgPSBuZXc7CisJCXJldHVybjsKKwl9CisKKwlwcmV2ID0gKmxpc3Q7CisKKwl3aGlsZSAocHJldi0+bmV4dCAmJiAocHJldi0+bmV4dC0+cGtnIDwgbmV3LT5wa2cpKSB7CisJCXByZXYgPSBwcmV2LT5uZXh0OworCQlzaG93X3BrZyA9IDE7CS8qIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHBhY2thZ2UgKi8KKwl9CisKKwl3aGlsZSAocHJldi0+bmV4dCAmJiAocHJldi0+bmV4dC0+cGtnID09IG5ldy0+cGtnKQorCQkmJiAocHJldi0+bmV4dC0+Y29yZSA8IG5ldy0+Y29yZSkpIHsKKwkJcHJldiA9IHByZXYtPm5leHQ7CisJCXNob3dfY29yZSA9IDE7CS8qIHRoZXJlIGlzIG1vcmUgdGhhbiAxIGNvcmUgKi8KKwl9CisKKwl3aGlsZSAocHJldi0+bmV4dCAmJiAocHJldi0+bmV4dC0+cGtnID09IG5ldy0+cGtnKQorCQkmJiAocHJldi0+bmV4dC0+Y29yZSA9PSBuZXctPmNvcmUpCisJCSYmIChwcmV2LT5uZXh0LT5jcHUgPCBuZXctPmNwdSkpIHsKKwkJcHJldiA9IHByZXYtPm5leHQ7CisJfQorCisJLyoKKwkgKiBpbnNlcnQgYWZ0ZXIgInByZXYiCisJICovCisJbmV3LT5uZXh0ID0gcHJldi0+bmV4dDsKKwlwcmV2LT5uZXh0ID0gbmV3OworCisJcmV0dXJuOworfQorCit2b2lkIGFsbG9jX25ld19jcHVfY291bnRlcnMoaW50IHBrZywgaW50IGNvcmUsIGludCBjcHUpCit7CisJUENDICpuZXc7CisKKwlpZiAodmVyYm9zZSA+IDEpCisJCXByaW50ZigicGtnJWQgY29yZSVkLCBjcHUlZFxuIiwgcGtnLCBjb3JlLCBjcHUpOworCisJbmV3ID0gKFBDQyAqKWNhbGxvYygxLCBzaXplb2YoUENDKSk7CisJaWYgKG5ldyA9PSBOVUxMKSB7CisJCXBlcnJvcigiY2FsbG9jIik7CisJCWV4aXQoMSk7CisJfQorCW5ldy0+cGtnID0gcGtnOworCW5ldy0+Y29yZSA9IGNvcmU7CisJbmV3LT5jcHUgPSBjcHU7CisJaW5zZXJ0X2NwdV9jb3VudGVycygmcGNjX29kZCwgbmV3KTsKKworCW5ldyA9IChQQ0MgKiljYWxsb2MoMSwgc2l6ZW9mKFBDQykpOworCWlmIChuZXcgPT0gTlVMTCkgeworCQlwZXJyb3IoImNhbGxvYyIpOworCQlleGl0KDEpOworCX0KKwluZXctPnBrZyA9IHBrZzsKKwluZXctPmNvcmUgPSBjb3JlOworCW5ldy0+Y3B1ID0gY3B1OworCWluc2VydF9jcHVfY291bnRlcnMoJnBjY19ldmVuLCBuZXcpOworCisJbmV3ID0gKFBDQyAqKWNhbGxvYygxLCBzaXplb2YoUENDKSk7CisJaWYgKG5ldyA9PSBOVUxMKSB7CisJCXBlcnJvcigiY2FsbG9jIik7CisJCWV4aXQoMSk7CisJfQorCW5ldy0+cGtnID0gcGtnOworCW5ldy0+Y29yZSA9IGNvcmU7CisJbmV3LT5jcHUgPSBjcHU7CisJaW5zZXJ0X2NwdV9jb3VudGVycygmcGNjX2RlbHRhLCBuZXcpOworCisJbmV3ID0gKFBDQyAqKWNhbGxvYygxLCBzaXplb2YoUENDKSk7CisJaWYgKG5ldyA9PSBOVUxMKSB7CisJCXBlcnJvcigiY2FsbG9jIik7CisJCWV4aXQoMSk7CisJfQorCW5ldy0+cGtnID0gcGtnOworCW5ldy0+Y29yZSA9IGNvcmU7CisJbmV3LT5jcHUgPSBjcHU7CisJcGNjX2F2ZXJhZ2UgPSBuZXc7Cit9CisKK2ludCBnZXRfcGh5c2ljYWxfcGFja2FnZV9pZChpbnQgY3B1KQoreworCWNoYXIgcGF0aFs2NF07CisJRklMRSAqZmlsZXA7CisJaW50IHBrZzsKKworCXNwcmludGYocGF0aCwgIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSVkL3RvcG9sb2d5L3BoeXNpY2FsX3BhY2thZ2VfaWQiLCBjcHUpOworCWZpbGVwID0gZm9wZW4ocGF0aCwgInIiKTsKKwlpZiAoZmlsZXAgPT0gTlVMTCkgeworCQlwZXJyb3IocGF0aCk7CisJCWV4aXQoMSk7CisJfQorCWZzY2FuZihmaWxlcCwgIiVkIiwgJnBrZyk7CisJZmNsb3NlKGZpbGVwKTsKKwlyZXR1cm4gcGtnOworfQorCitpbnQgZ2V0X2NvcmVfaWQoaW50IGNwdSkKK3sKKwljaGFyIHBhdGhbNjRdOworCUZJTEUgKmZpbGVwOworCWludCBjb3JlOworCisJc3ByaW50ZihwYXRoLCAiL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1JWQvdG9wb2xvZ3kvY29yZV9pZCIsIGNwdSk7CisJZmlsZXAgPSBmb3BlbihwYXRoLCAiciIpOworCWlmIChmaWxlcCA9PSBOVUxMKSB7CisJCXBlcnJvcihwYXRoKTsKKwkJZXhpdCgxKTsKKwl9CisJZnNjYW5mKGZpbGVwLCAiJWQiLCAmY29yZSk7CisJZmNsb3NlKGZpbGVwKTsKKwlyZXR1cm4gY29yZTsKK30KKworLyoKKyAqIHJ1biBmdW5jKGluZGV4LCBjcHUpIG9uIGV2ZXJ5IGNwdSBpbiAvcHJvYy9zdGF0CisgKi8KKworaW50IGZvcl9hbGxfY3B1cyh2b2lkIChmdW5jKShpbnQsIGludCwgaW50KSkKK3sKKwlGSUxFICpmcDsKKwlpbnQgY3B1X2NvdW50OworCWludCByZXR2YWw7CisKKwlmcCA9IGZvcGVuKHByb2Nfc3RhdCwgInIiKTsKKwlpZiAoZnAgPT0gTlVMTCkgeworCQlwZXJyb3IocHJvY19zdGF0KTsKKwkJZXhpdCgxKTsKKwl9CisKKwlyZXR2YWwgPSBmc2NhbmYoZnAsICJjcHUgJSpkICUqZCAlKmQgJSpkICUqZCAlKmQgJSpkICUqZCAlKmQgJSpkXG4iKTsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJcGVycm9yKCIvcHJvYy9zdGF0IGZvcm1hdCIpOworCQlleGl0KDEpOworCX0KKworCWZvciAoY3B1X2NvdW50ID0gMDsgOyBjcHVfY291bnQrKykgeworCQlpbnQgY3B1OworCisJCXJldHZhbCA9IGZzY2FuZihmcCwgImNwdSV1ICUqZCAlKmQgJSpkICUqZCAlKmQgJSpkICUqZCAlKmQgJSpkICUqZFxuIiwgJmNwdSk7CisJCWlmIChyZXR2YWwgIT0gMSkKKwkJCWJyZWFrOworCisJCWZ1bmMoZ2V0X3BoeXNpY2FsX3BhY2thZ2VfaWQoY3B1KSwgZ2V0X2NvcmVfaWQoY3B1KSwgY3B1KTsKKwl9CisJZmNsb3NlKGZwKTsKKwlyZXR1cm4gY3B1X2NvdW50OworfQorCit2b2lkIHJlX2luaXRpYWxpemUodm9pZCkKK3sKKwlwcmludGYoInR1cmJvc3RhdDogdG9wb2xvZ3kgY2hhbmdlZCwgcmUtaW5pdGlhbGl6aW5nLlxuIik7CisJZnJlZV9hbGxfY291bnRlcnMoKTsKKwludW1fY3B1cyA9IGZvcl9hbGxfY3B1cyhhbGxvY19uZXdfY3B1X2NvdW50ZXJzKTsKKwluZWVkX3JlaW5pdGlhbGl6ZSA9IDA7CisJcHJpbnRmKCJudW1fY3B1cyBpcyBub3cgJWRcbiIsIG51bV9jcHVzKTsKK30KKwordm9pZCBkdW1teShpbnQgcGtnLCBpbnQgY29yZSwgaW50IGNwdSkgeyByZXR1cm47IH0KKy8qCisgKiBjaGVjayB0byBzZWUgaWYgYSBjcHUgY2FtZSBvbi1saW5lCisgKi8KK3ZvaWQgdmVyaWZ5X251bV9jcHVzKCkKK3sKKwlpbnQgbmV3X251bV9jcHVzOworCisJbmV3X251bV9jcHVzID0gZm9yX2FsbF9jcHVzKGR1bW15KTsKKworCWlmIChuZXdfbnVtX2NwdXMgIT0gbnVtX2NwdXMpIHsKKwkJaWYgKHZlcmJvc2UpCisJCQlwcmludGYoIm51bV9jcHVzIHdhcyAlZCwgaXMgbm93ICAlZFxuIiwKKwkJCQludW1fY3B1cywgbmV3X251bV9jcHVzKTsKKwkJbmVlZF9yZWluaXRpYWxpemUgPSAxOworCX0KKworCXJldHVybjsKK30KKwordm9pZCB0dXJib3N0YXRfbG9vcCgpCit7CityZXN0YXJ0OgorCWdldF9jb3VudGVycyhwY2NfZXZlbik7CisJZ2V0dGltZW9mZGF5KCZ0dl9ldmVuLCAoc3RydWN0IHRpbWV6b25lICopTlVMTCk7CisKKwl3aGlsZSAoMSkgeworCQl2ZXJpZnlfbnVtX2NwdXMoKTsKKwkJaWYgKG5lZWRfcmVpbml0aWFsaXplKSB7CisJCQlyZV9pbml0aWFsaXplKCk7CisJCQlnb3RvIHJlc3RhcnQ7CisJCX0KKwkJc2xlZXAoaW50ZXJ2YWxfc2VjKTsKKwkJZ2V0X2NvdW50ZXJzKHBjY19vZGQpOworCQlnZXR0aW1lb2ZkYXkoJnR2X29kZCwgKHN0cnVjdCB0aW1lem9uZSAqKU5VTEwpOworCisJCWNvbXB1dGVfZGVsdGEocGNjX29kZCwgcGNjX2V2ZW4sIHBjY19kZWx0YSk7CisJCXRpbWVyc3ViKCZ0dl9vZGQsICZ0dl9ldmVuLCAmdHZfZGVsdGEpOworCQljb21wdXRlX2F2ZXJhZ2UocGNjX2RlbHRhLCBwY2NfYXZlcmFnZSk7CisJCXByaW50X2NvdW50ZXJzKHBjY19kZWx0YSk7CisJCWlmIChuZWVkX3JlaW5pdGlhbGl6ZSkgeworCQkJcmVfaW5pdGlhbGl6ZSgpOworCQkJZ290byByZXN0YXJ0OworCQl9CisJCXNsZWVwKGludGVydmFsX3NlYyk7CisJCWdldF9jb3VudGVycyhwY2NfZXZlbik7CisJCWdldHRpbWVvZmRheSgmdHZfZXZlbiwgKHN0cnVjdCB0aW1lem9uZSAqKU5VTEwpOworCQljb21wdXRlX2RlbHRhKHBjY19ldmVuLCBwY2Nfb2RkLCBwY2NfZGVsdGEpOworCQl0aW1lcnN1YigmdHZfZXZlbiwgJnR2X29kZCwgJnR2X2RlbHRhKTsKKwkJY29tcHV0ZV9hdmVyYWdlKHBjY19kZWx0YSwgcGNjX2F2ZXJhZ2UpOworCQlwcmludF9jb3VudGVycyhwY2NfZGVsdGEpOworCX0KK30KKwordm9pZCBjaGVja19kZXZfbXNyKCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzYjsKKworCWlmIChzdGF0KCIvZGV2L2NwdS8wL21zciIsICZzYikpIHsKKwkJZnByaW50ZihzdGRlcnIsICJubyAvZGV2L2NwdS8wL21zclxuIik7CisJCWZwcmludGYoc3RkZXJyLCAiVHJ5IFwiIyBtb2Rwcm9iZSBtc3JcIlxuIik7CisJCWV4aXQoLTUpOworCX0KK30KKwordm9pZCBjaGVja19zdXBlcl91c2VyKCkKK3sKKwlpZiAoZ2V0dWlkKCkgIT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIm11c3QgYmUgcm9vdFxuIik7CisJCWV4aXQoLTYpOworCX0KK30KKworaW50IGhhc19uZWhhbGVtX3R1cmJvX3JhdGlvX2xpbWl0KHVuc2lnbmVkIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBtb2RlbCkKK3sKKwlpZiAoIWdlbnVpbmVfaW50ZWwpCisJCXJldHVybiAwOworCisJaWYgKGZhbWlseSAhPSA2KQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAobW9kZWwpIHsKKwljYXNlIDB4MUE6CS8qIENvcmUgaTcsIFhlb24gNTUwMCBzZXJpZXMgLSBCbG9vbWZpZWxkLCBHYWluc3Rvd24gTkhNLUVQICovCisJY2FzZSAweDFFOgkvKiBDb3JlIGk3IGFuZCBpNSBQcm9jZXNzb3IgLSBDbGFya3NmaWVsZCwgTHlubmZpZWxkLCBKYXNwZXIgRm9yZXN0ICovCisJY2FzZSAweDFGOgkvKiBDb3JlIGk3IGFuZCBpNSBQcm9jZXNzb3IgLSBOZWhhbGVtICovCisJY2FzZSAweDI1OgkvKiBXZXN0bWVyZSBDbGllbnQgLSBDbGFya2RhbGUsIEFycmFuZGFsZSAqLworCWNhc2UgMHgyQzoJLyogV2VzdG1lcmUgRVAgLSBHdWxmdG93biAqLworCWNhc2UgMHgyQToJLyogU05CICovCisJY2FzZSAweDJEOgkvKiBTTkIgWGVvbiAqLworCQlyZXR1cm4gMTsKKwljYXNlIDB4MkU6CS8qIE5laGFsZW0tRVggWGVvbiAtIEJlY2t0b24gKi8KKwljYXNlIDB4MkY6CS8qIFdlc3RtZXJlLUVYIFhlb24gLSBFYWdsZXRvbiAqLworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworaW50IGlzX3NuYih1bnNpZ25lZCBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgbW9kZWwpCit7CisJaWYgKCFnZW51aW5lX2ludGVsKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAobW9kZWwpIHsKKwljYXNlIDB4MkE6CisJY2FzZSAweDJEOgorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBkaXNjb3Zlcl9iY2xrKHVuc2lnbmVkIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBtb2RlbCkKK3sKKwlpZiAoaXNfc25iKGZhbWlseSwgbW9kZWwpKQorCQlyZXR1cm4gMTAwLjAwOworCWVsc2UKKwkJcmV0dXJuIDEzMy4zMzsKK30KKwordm9pZCBjaGVja19jcHVpZCgpCit7CisJdW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeCwgbWF4X2xldmVsOworCXVuc2lnbmVkIGludCBmbXMsIGZhbWlseSwgbW9kZWwsIHN0ZXBwaW5nOworCisJZWF4ID0gZWJ4ID0gZWN4ID0gZWR4ID0gMDsKKworCWFzbSgiY3B1aWQiIDogIj1hIiAobWF4X2xldmVsKSwgIj1iIiAoZWJ4KSwgIj1jIiAoZWN4KSwgIj1kIiAoZWR4KSA6ICJhIiAoMCkpOworCisJaWYgKGVieCA9PSAweDc1NmU2NTQ3ICYmIGVkeCA9PSAweDQ5NjU2ZTY5ICYmIGVjeCA9PSAweDZjNjU3NDZlKQorCQlnZW51aW5lX2ludGVsID0gMTsKKworCWlmICh2ZXJib3NlKQorCQlmcHJpbnRmKHN0ZGVyciwgIiUuNHMlLjRzJS40cyAiLAorCQkJKGNoYXIgKikmZWJ4LCAoY2hhciAqKSZlZHgsIChjaGFyICopJmVjeCk7CisKKwlhc20oImNwdWlkIiA6ICI9YSIgKGZtcyksICI9YyIgKGVjeCksICI9ZCIgKGVkeCkgOiAiYSIgKDEpIDogImVieCIpOworCWZhbWlseSA9IChmbXMgPj4gOCkgJiAweGY7CisJbW9kZWwgPSAoZm1zID4+IDQpICYgMHhmOworCXN0ZXBwaW5nID0gZm1zICYgMHhmOworCWlmIChmYW1pbHkgPT0gNiB8fCBmYW1pbHkgPT0gMHhmKQorCQltb2RlbCArPSAoKGZtcyA+PiAxNikgJiAweGYpIDw8IDQ7CisKKwlpZiAodmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICIlZCBDUFVJRCBsZXZlbHM7IGZhbWlseTptb2RlbDpzdGVwcGluZyAweCV4OiV4OiV4ICglZDolZDolZClcbiIsCisJCQltYXhfbGV2ZWwsIGZhbWlseSwgbW9kZWwsIHN0ZXBwaW5nLCBmYW1pbHksIG1vZGVsLCBzdGVwcGluZyk7CisKKwlpZiAoIShlZHggJiAoMSA8PCA1KSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJDUFVJRDogbm8gTVNSXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkvKgorCSAqIGNoZWNrIG1heCBleHRlbmRlZCBmdW5jdGlvbiBsZXZlbHMgb2YgQ1BVSUQuCisJICogVGhpcyBpcyBuZWVkZWQgdG8gY2hlY2sgZm9yIGludmFyaWFudCBUU0MuCisJICogVGhpcyBjaGVjayBpcyB2YWxpZCBmb3IgYm90aCBJbnRlbCBhbmQgQU1ELgorCSAqLworCWVieCA9IGVjeCA9IGVkeCA9IDA7CisJYXNtKCJjcHVpZCIgOiAiPWEiIChtYXhfbGV2ZWwpLCAiPWIiIChlYngpLCAiPWMiIChlY3gpLCAiPWQiIChlZHgpIDogImEiICgweDgwMDAwMDAwKSk7CisKKwlpZiAobWF4X2xldmVsIDwgMHg4MDAwMDAwNykgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNQVUlEOiBubyBpbnZhcmlhbnQgVFNDIChtYXhfbGV2ZWwgMHgleClcbiIsIG1heF9sZXZlbCk7CisJCWV4aXQoMSk7CisJfQorCisJLyoKKwkgKiBOb24tU3RvcCBUU0MgaXMgYWR2ZXJ0aXNlZCBieSBDUFVJRC5FQVg9MHg4MDAwMDAwNzogRURYLmJpdDgKKwkgKiB0aGlzIGNoZWNrIGlzIHZhbGlkIGZvciBib3RoIEludGVsIGFuZCBBTUQKKwkgKi8KKwlhc20oImNwdWlkIiA6ICI9YSIgKGVheCksICI9YiIgKGVieCksICI9YyIgKGVjeCksICI9ZCIgKGVkeCkgOiAiYSIgKDB4ODAwMDAwMDcpKTsKKwloYXNfaW52YXJpYW50X3RzYyA9IGVkeCAmJiAoMSA8PCA4KTsKKworCWlmICghaGFzX2ludmFyaWFudF90c2MpIHsKKwkJZnByaW50ZihzdGRlcnIsICJObyBpbnZhcmlhbnQgVFNDXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkvKgorCSAqIEFQRVJGL01QRVJGIGlzIGFkdmVydGlzZWQgYnkgQ1BVSUQuRUFYPTB4NjogRUNYLmJpdDAKKwkgKiB0aGlzIGNoZWNrIGlzIHZhbGlkIGZvciBib3RoIEludGVsIGFuZCBBTUQKKwkgKi8KKworCWFzbSgiY3B1aWQiIDogIj1hIiAoZWF4KSwgIj1iIiAoZWJ4KSwgIj1jIiAoZWN4KSwgIj1kIiAoZWR4KSA6ICJhIiAoMHg2KSk7CisJaGFzX2FwZXJmID0gZWN4ICYmICgxIDw8IDApOworCWlmICghaGFzX2FwZXJmKSB7CisJCWZwcmludGYoc3RkZXJyLCAiTm8gQVBFUkYgTVNSXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlkb19uZWhhbGVtX3BsYXRmb3JtX2luZm8gPSBnZW51aW5lX2ludGVsICYmIGhhc19pbnZhcmlhbnRfdHNjOworCWRvX25obV9jc3RhdGVzID0gZ2VudWluZV9pbnRlbDsJLyogYWxsIEludGVsIHcvIG5vbi1zdG9wIFRTQyBoYXZlIE5ITSBjb3VudGVycyAqLworCWRvX3NuYl9jc3RhdGVzID0gaXNfc25iKGZhbWlseSwgbW9kZWwpOworCWJjbGsgPSBkaXNjb3Zlcl9iY2xrKGZhbWlseSwgbW9kZWwpOworCisJZG9fbmVoYWxlbV90dXJib19yYXRpb19saW1pdCA9IGhhc19uZWhhbGVtX3R1cmJvX3JhdGlvX2xpbWl0KGZhbWlseSwgbW9kZWwpOworfQorCisKK3ZvaWQgdXNhZ2UoKQoreworCWZwcmludGYoc3RkZXJyLCAiJXM6IFstdl0gWy1NIE1TUiNdIFstaSBpbnRlcnZhbF9zZWMgfCBjb21tYW5kIC4uLl1cbiIsCisJCXByb2duYW1lKTsKKwlleGl0KDEpOworfQorCisKKy8qCisgKiBpbiAvZGV2L2NwdS8gcmV0dXJuIHN1Y2Nlc3MgZm9yIG5hbWVzIHRoYXQgYXJlIG51bWJlcnMKKyAqIGllLiBmaWx0ZXIgb3V0ICIuIiwgIi4uIiwgIm1pY3JvY29kZSIuCisgKi8KK2ludCBkaXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBkaXJlbnQgKmRpcnApCit7CisJaWYgKGlzZGlnaXQoZGlycC0+ZF9uYW1lWzBdKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworaW50IG9wZW5fZGV2X2NwdV9tc3IoaW50IGR1bW15MSkKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZCB0dXJib3N0YXRfaW5pdCgpCit7CisJY2hlY2tfY3B1aWQoKTsKKworCWNoZWNrX2Rldl9tc3IoKTsKKwljaGVja19zdXBlcl91c2VyKCk7CisKKwludW1fY3B1cyA9IGZvcl9hbGxfY3B1cyhhbGxvY19uZXdfY3B1X2NvdW50ZXJzKTsKKworCWlmICh2ZXJib3NlKQorCQlwcmludF9uZWhhbGVtX2luZm8oKTsKK30KKworaW50IGZvcmtfaXQoY2hhciAqKmFyZ3YpCit7CisJaW50IHJldHZhbDsKKwlwaWRfdCBjaGlsZF9waWQ7CisJZ2V0X2NvdW50ZXJzKHBjY19ldmVuKTsKKwlnZXR0aW1lb2ZkYXkoJnR2X2V2ZW4sIChzdHJ1Y3QgdGltZXpvbmUgKilOVUxMKTsKKworCWNoaWxkX3BpZCA9IGZvcmsoKTsKKwlpZiAoIWNoaWxkX3BpZCkgeworCQkvKiBjaGlsZCAqLworCQlleGVjdnAoYXJndlswXSwgYXJndik7CisJfSBlbHNlIHsKKwkJaW50IHN0YXR1czsKKworCQkvKiBwYXJlbnQgKi8KKwkJaWYgKGNoaWxkX3BpZCA9PSAtMSkgeworCQkJcGVycm9yKCJmb3JrIik7CisJCQlleGl0KDEpOworCQl9CisKKwkJc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7CisJCXNpZ25hbChTSUdRVUlULCBTSUdfSUdOKTsKKwkJaWYgKHdhaXRwaWQoY2hpbGRfcGlkLCAmc3RhdHVzLCAwKSA9PSAtMSkgeworCQkJcGVycm9yKCJ3YWl0Iik7CisJCQlleGl0KDEpOworCQl9CisJfQorCWdldF9jb3VudGVycyhwY2Nfb2RkKTsKKwlnZXR0aW1lb2ZkYXkoJnR2X29kZCwgKHN0cnVjdCB0aW1lem9uZSAqKU5VTEwpOworCXJldHZhbCA9IGNvbXB1dGVfZGVsdGEocGNjX29kZCwgcGNjX2V2ZW4sIHBjY19kZWx0YSk7CisKKwl0aW1lcnN1YigmdHZfb2RkLCAmdHZfZXZlbiwgJnR2X2RlbHRhKTsKKwljb21wdXRlX2F2ZXJhZ2UocGNjX2RlbHRhLCBwY2NfYXZlcmFnZSk7CisJaWYgKCFyZXR2YWwpCisJCXByaW50X2NvdW50ZXJzKHBjY19kZWx0YSk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIiUuNmYgc2VjXG4iLCB0dl9kZWx0YS50dl9zZWMgKyB0dl9kZWx0YS50dl91c2VjLzEwMDAwMDAuMCk7OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY21kbGluZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IG9wdDsKKworCXByb2duYW1lID0gYXJndlswXTsKKworCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICIrdmk6TToiKSkgIT0gLTEpIHsKKwkJc3dpdGNoIChvcHQpIHsKKwkJY2FzZSAndic6CisJCQl2ZXJib3NlKys7CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQlpbnRlcnZhbF9zZWMgPSBhdG9pKG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAnTSc6CisJCQlzc2NhbmYob3B0YXJnLCAiJXgiLCAmZXh0cmFfbXNyX29mZnNldCk7CisJCQlpZiAodmVyYm9zZSA+IDEpCisJCQkJZnByaW50ZihzdGRlcnIsICJNU1IgMHglWFxuIiwgZXh0cmFfbXNyX29mZnNldCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKCk7CisJCX0KKwl9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljbWRsaW5lKGFyZ2MsIGFyZ3YpOworCisJaWYgKHZlcmJvc2UgPiAxKQorCQlmcHJpbnRmKHN0ZGVyciwgInR1cmJvc3RhdCBEZWMgNiwgMjAxMCIKKwkJCSIgLSBMZW4gQnJvd24gPGxlbmJAa2VybmVsLm9yZz5cbiIpOworCWlmICh2ZXJib3NlID4gMSkKKwkJZnByaW50ZihzdGRlcnIsICJodHRwOi8vdXNlcndlYi5rZXJuZWwub3JnL35sZW5iL2FjcGkvdXRpbHMvcG10b29scy90dXJib3N0YXQvXG4iKTsKKworCXR1cmJvc3RhdF9pbml0KCk7CisKKwkvKgorCSAqIGlmIGFueSBwYXJhbXMgbGVmdCwgaXQgbXVzdCBiZSBhIGNvbW1hbmQgdG8gZm9yaworCSAqLworCWlmIChhcmdjIC0gb3B0aW5kKQorCQlyZXR1cm4gZm9ya19pdChhcmd2ICsgb3B0aW5kKTsKKwllbHNlCisJCXR1cmJvc3RhdF9sb29wKCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL3g4Ni94ODZfZW5lcmd5X3BlcmZfcG9saWN5L01ha2VmaWxlIGIvdG9vbHMvcG93ZXIveDg2L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ1ODIzNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL3g4Ni94ODZfZW5lcmd5X3BlcmZfcG9saWN5L01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAoreDg2X2VuZXJneV9wZXJmX3BvbGljeSA6IHg4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kuYworCitjbGVhbiA6CisJcm0gLWYgeDg2X2VuZXJneV9wZXJmX3BvbGljeQorCitpbnN0YWxsIDoKKwlpbnN0YWxsIHg4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kgL3Vzci9iaW4vCisJaW5zdGFsbCB4ODZfZW5lcmd5X3BlcmZfcG9saWN5LjggL3Vzci9zaGFyZS9tYW4vbWFuOC8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL3g4Ni94ODZfZW5lcmd5X3BlcmZfcG9saWN5L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kuOCBiL3Rvb2xzL3Bvd2VyL3g4Ni94ODZfZW5lcmd5X3BlcmZfcG9saWN5L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kuOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWFhYWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIveDg2L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kveDg2X2VuZXJneV9wZXJmX3BvbGljeS44CkBAIC0wLDAgKzEsMTA0IEBACisuXCIgIFRoaXMgcGFnZSBDb3B5cmlnaHQgKEMpIDIwMTAgTGVuIEJyb3duIDxsZW4uYnJvd25AaW50ZWwuY29tPgorLlwiICBEaXN0cmlidXRlZCB1bmRlciB0aGUgR1BMLCBDb3B5bGVmdCAxOTk0LgorLlRIIFg4Nl9FTkVSR1lfUEVSRl9QT0xJQ1kgOAorLlNIIE5BTUUKK3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kgXC0gcmVhZCBvciB3cml0ZSBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTCisuU0ggU1lOT1BTSVMKKy5mdCBCCisuQiB4ODZfZW5lcmd5X3BlcmZfcG9saWN5CisuUkIgWyAiXC1jIGNwdSIgXQorLlJCIFsgIlwtdiIgXQorLlJCICJcLXIiCisuYnIKKy5CIHg4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kKKy5SQiBbICJcLWMgY3B1IiBdCisuUkIgWyAiXC12IiBdCisuUkIgJ3BlcmZvcm1hbmNlJworLmJyCisuQiB4ODZfZW5lcmd5X3BlcmZfcG9saWN5CisuUkIgWyAiXC1jIGNwdSIgXQorLlJCIFsgIlwtdiIgXQorLlJCICdub3JtYWwnCisuYnIKKy5CIHg4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kKKy5SQiBbICJcLWMgY3B1IiBdCisuUkIgWyAiXC12IiBdCisuUkIgJ3Bvd2Vyc2F2ZScKKy5icgorLkIgeDg2X2VuZXJneV9wZXJmX3BvbGljeQorLlJCIFsgIlwtYyBjcHUiIF0KKy5SQiBbICJcLXYiIF0KKy5SQiBuCisuYnIKKy5TSCBERVNDUklQVElPTgorXGZCeDg2X2VuZXJneV9wZXJmX3BvbGljeVxmUAorYWxsb3dzIHNvZnR3YXJlIHRvIGNvbnZleQoraXRzIHBvbGljeSBmb3IgdGhlIHJlbGF0aXZlIGltcG9ydGFuY2Ugb2YgcGVyZm9ybWFuY2UKK3ZlcnN1cyBlbmVyZ3kgc2F2aW5ncyB0byB0aGUgcHJvY2Vzc29yLgorCitUaGUgcHJvY2Vzc29yIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiBpbiBtb2RlbC1zcGVjaWZpYyB3YXlzCit3aGVuIGl0IG11c3Qgc2VsZWN0IHRyYWRlLW9mZnMgYmV0d2VlbiBwZXJmb3JtYW5jZSBhbmQKK2VuZXJneSBlZmZpY2llbmN5LgorCitUaGlzIHBvbGljeSBoaW50IGRvZXMgbm90IHN1cGVyc2VkZSBQcm9jZXNzb3IgUGVyZm9ybWFuY2Ugc3RhdGVzCisoUC1zdGF0ZXMpIG9yIENQVSBJZGxlIHBvd2VyIHN0YXRlcyAoQy1zdGF0ZXMpLCBidXQgYWxsb3dzCitzb2Z0d2FyZSB0byBoYXZlIGluZmx1ZW5jZSB3aGVyZSBpdCB3b3VsZCBvdGhlcndpc2UgYmUgdW5hYmxlCit0byBleHByZXNzIGEgcHJlZmVyZW5jZS4KKworRm9yIGV4YW1wbGUsIHRoaXMgc2V0dGluZyBtYXkgdGVsbCB0aGUgaGFyZHdhcmUgaG93CithZ2dyZXNzaXZlbHkgb3IgY29uc2VydmF0aXZlbHkgdG8gY29udHJvbCBmcmVxdWVuY3kKK2luIHRoZSAidHVyYm8gcmFuZ2UiIGFib3ZlIHRoZSBleHBsaWNpdGx5IE9TLWNvbnRyb2xsZWQKK1Atc3RhdGUgZnJlcXVlbmN5IHJhbmdlLiAgSXQgbWF5IGFsc28gdGVsbCB0aGUgaGFyZHdhcmUKK2hvdyBhZ2dyZXNzaXZlbHkgaXMgc2hvdWxkIGVudGVyIHRoZSBPUyByZXF1ZXN0ZWQgQy1zdGF0ZXMuCisKK1N1cHBvcnQgZm9yIHRoaXMgZmVhdHVyZSBpcyBpbmRpY2F0ZWQgYnkgQ1BVSUQuMDZILkVDWC5iaXQzCitwZXIgdGhlIEludGVsIEFyY2hpdGVjdHVyZXMgU29mdHdhcmUgRGV2ZWxvcGVyJ3MgTWFudWFsLgorCisuU1MgT3B0aW9ucworXGZCLWNcZlAgbGltaXRzIG9wZXJhdGlvbiB0byBhIHNpbmdsZSBDUFUuCitUaGUgZGVmYXVsdCBpcyB0byBvcGVyYXRlIG9uIGFsbCBDUFVzLgorTm90ZSB0aGF0IE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMgaXMgZGVmaW5lZCBwZXIKK2xvZ2ljYWwgcHJvY2Vzc29yLCBidXQgdGhhdCB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbnMKK29mIHRoZSBNU1Igd2VyZSBzaGFyZWQgYW1vbmcgYWxsIHByb2Nlc3NvcnMgaW4gZWFjaCBwYWNrYWdlLgorLlBQCitcZkItdlxmUCBpbmNyZWFzZXMgdmVyYm9zaXR5LiAgQnkgZGVmYXVsdAoreDg2X2VuZXJneV9wZXJmX3BvbGljeSBpcyBzaWxlbnQuCisuUFAKK1xmQi1yXGZQIGlzIGZvciAicmVhZC1vbmx5IiBtb2RlIC0gdGhlIHVuY2hhbmdlZCBzdGF0ZQoraXMgcmVhZCBhbmQgZGlzcGxheWVkLgorLlBQCisuSSBwZXJmb3JtYW5jZQorU2V0IGEgcG9saWN5IHdoZXJlIHBlcmZvcm1hbmNlIGlzIHBhcmFtb3VudC4KK1RoZSBwcm9jZXNzb3Igd2lsbCBiZSB1bndpbGxpbmcgdG8gc2FjcmlmaWNlIGFueSBwZXJmb3JtYW5jZQorZm9yIHRoZSBzYWtlIG9mIGVuZXJneSBzYXZpbmcuIFRoaXMgaXMgdGhlIGhhcmR3YXJlIGRlZmF1bHQuCisuUFAKKy5JIG5vcm1hbAorU2V0IGEgcG9saWN5IHdpdGggYSBub3JtYWwgYmFsYW5jZSBiZXR3ZWVuIHBlcmZvcm1hbmNlIGFuZCBlbmVyZ3kgZWZmaWNpZW5jeS4KK1RoZSBwcm9jZXNzb3Igd2lsbCB0b2xlcmF0ZSBtaW5vciBwZXJmb3JtYW5jZSBjb21wcm9taXNlCitmb3IgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgZW5lcmd5IHNhdmluZ3MuCitUaGlzIHJlYXNvbmFibGUgZGVmYXVsdCBmb3IgbW9zdCBkZXNrdG9wcyBhbmQgc2VydmVycy4KKy5QUAorLkkgcG93ZXJzYXZlCitTZXQgYSBwb2xpY3kgd2hlcmUgdGhlIHByb2Nlc3NvciBjYW4gYWNjZXB0CithIG1lYXN1cmFibGUgcGVyZm9ybWFuY2UgaGl0IHRvIG1heGltaXplIGVuZXJneSBlZmZpY2llbmN5LgorLlBQCisuSSBuCitTZXQgTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUyB0byB0aGUgc3BlY2lmaWVkIG51bWJlci4KK1RoZSByYW5nZSBvZiB2YWxpZCBudW1iZXJzIGlzIDAtMTUsIHdoZXJlIDAgaXMgbWF4aW11bQorcGVyZm9ybWFuY2UgYW5kIDE1IGlzIG1heGltdW0gZW5lcmd5IGVmZmljaWVuY3kuCisKKy5TSCBOT1RFUworLkIgIng4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kgIgorcnVucyBvbmx5IGFzIHJvb3QuCisuU0ggRklMRVMKKy50YQorLm5mCisvZGV2L2NwdS8qL21zcgorLmZpCisKKy5TSCAiU0VFIEFMU08iCittc3IoNCkKKy5QUAorLlNIIEFVVEhPUlMKKy5uZgorV3JpdHRlbiBieSBMZW4gQnJvd24gPGxlbi5icm93bkBpbnRlbC5jb20+CmRpZmYgLS1naXQgYS90b29scy9wb3dlci94ODYveDg2X2VuZXJneV9wZXJmX3BvbGljeS94ODZfZW5lcmd5X3BlcmZfcG9saWN5LmMgYi90b29scy9wb3dlci94ODYveDg2X2VuZXJneV9wZXJmX3BvbGljeS94ODZfZW5lcmd5X3BlcmZfcG9saWN5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2NzhhMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL3g4Ni94ODZfZW5lcmd5X3BlcmZfcG9saWN5L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kuYwpAQCAtMCwwICsxLDMyNSBAQAorLyoKKyAqIHg4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kgLS0gc2V0IHRoZSBlbmVyZ3kgdmVyc3VzIHBlcmZvcm1hbmNlCisgKiBwb2xpY3kgcHJlZmVyZW5jZSBiaWFzIG9uIHJlY2VudCBYODYgcHJvY2Vzc29ycy4KKyAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24uCisgKiBMZW4gQnJvd24gPGxlbi5icm93bkBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwordW5zaWduZWQgaW50IHZlcmJvc2U7CQkvKiBzZXQgd2l0aCAtdiAqLwordW5zaWduZWQgaW50IHJlYWRfb25seTsJCS8qIHNldCB3aXRoIC1yICovCitjaGFyICpwcm9nbmFtZTsKK3Vuc2lnbmVkIGxvbmcgbG9uZyBuZXdfYmlhczsKK2ludCBjcHUgPSAtMTsKKworLyoKKyAqIFVzYWdlOgorICoKKyAqIC1jIGNwdTogbGltaXQgYWN0aW9uIHRvIGEgc2luZ2xlIENQVSAoZGVmYXVsdCBpcyBhbGwgQ1BVcykKKyAqIC12OiB2ZXJib3NlIG91dHB1dCAoY2FuIGludm9rZSBtb3JlIHRoYW4gb25jZSkKKyAqIC1yOiByZWFkLW9ubHksIGRvbid0IGNoYW5nZSBhbnkgc2V0dGluZ3MKKyAqCisgKiAgcGVyZm9ybWFuY2UKKyAqCVBlcmZvcm1hbmNlIGlzIHBhcmFtb3VudC4KKyAqCVVud2lsbGluZyB0byBzYWNyYWZpY2UgYW55IHBlcmZvcm1hbmNlCisgKglmb3IgdGhlIHNha2Ugb2YgZW5lcmd5IHNhdmluZy4gKGhhcmR3YXJlIGRlZmF1bHQpCisgKgorICogIG5vcm1hbAorICoJQ2FuIHRvbGVyYXRlIG1pbm9yIHBlcmZvcm1hbmNlIGNvbXByb21pc2UKKyAqCWZvciBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBlbmVyZ3kgc2F2aW5ncy4KKyAqCShyZWFzb25hYmxlIGRlZmF1bHQgZm9yIG1vc3QgZGVza3RvcHMgYW5kIHNlcnZlcnMpCisgKgorICogIHBvd2Vyc2F2ZQorICoJQ2FuIHRvbGVyYXRlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGhpdAorICoJdG8gbWF4aW1pemUgZW5lcmd5IHNhdmluZ3MuCisgKgorICogbgorICoJYSBudW1lcmljYWwgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIHVuZGVybHlpbmcgTVNSLgorICovCit2b2lkIHVzYWdlKHZvaWQpCit7CisJcHJpbnRmKCIlczogWy1jIGNwdV0gWy12XSAiCisJCSIoLXIgfCAncGVyZm9ybWFuY2UnIHwgJ25vcm1hbCcgfCAncG93ZXJzYXZlJyB8IG4pXG4iLAorCQlwcm9nbmFtZSk7CisJZXhpdCgxKTsKK30KKworI2RlZmluZSBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTCTB4MDAwMDAxYjAKKworI2RlZmluZQlCSUFTX1BFUkZPUk1BTkNFCQkwCisjZGVmaW5lIEJJQVNfQkFMQU5DRQkJCTYKKyNkZWZpbmUJQklBU19QT1dFUlNBVkUJCQkxNQorCit2b2lkIGNtZGxpbmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBvcHQ7CisKKwlwcm9nbmFtZSA9IGFyZ3ZbMF07CisKKwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiK3J2YzoiKSkgIT0gLTEpIHsKKwkJc3dpdGNoIChvcHQpIHsKKwkJY2FzZSAnYyc6CisJCQljcHUgPSBhdG9pKG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlyZWFkX29ubHkgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ3YnOgorCQkJdmVyYm9zZSsrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl1c2FnZSgpOworCQl9CisJfQorCS8qIGlmIC1yLCB0aGVuIHNob3VsZCBiZSBubyBhZGRpdGlvbmFsIG9wdGluZCAqLworCWlmIChyZWFkX29ubHkgJiYgKGFyZ2MgPiBvcHRpbmQpKQorCQl1c2FnZSgpOworCisJLyoKKwkgKiBpZiBubyAtciAsIHRoZW4gbXVzdCBiZSBvbmUgYWRkaXRpb25hbCBvcHRpbmQKKwkgKi8KKwlpZiAoIXJlYWRfb25seSkgeworCisJCWlmIChhcmdjICE9IG9wdGluZCArIDEpIHsKKwkJCXByaW50ZigibXVzdCBzdXBwbHkgLXIgb3IgcG9saWN5IHBhcmFtXG4iKTsKKwkJCXVzYWdlKCk7CisJCQl9CisKKwkJaWYgKCFzdHJjbXAoInBlcmZvcm1hbmNlIiwgYXJndltvcHRpbmRdKSkgeworCQkJbmV3X2JpYXMgPSBCSUFTX1BFUkZPUk1BTkNFOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoIm5vcm1hbCIsIGFyZ3Zbb3B0aW5kXSkpIHsKKwkJCW5ld19iaWFzID0gQklBU19CQUxBTkNFOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoInBvd2Vyc2F2ZSIsIGFyZ3Zbb3B0aW5kXSkpIHsKKwkJCW5ld19iaWFzID0gQklBU19QT1dFUlNBVkU7CisJCX0gZWxzZSB7CisJCQljaGFyICplbmRwdHI7CisKKwkJCW5ld19iaWFzID0gc3RydG91bGwoYXJndltvcHRpbmRdLCAmZW5kcHRyLCAwKTsKKwkJCWlmIChlbmRwdHIgPT0gYXJndltvcHRpbmRdIHx8CisJCQkJbmV3X2JpYXMgPiBCSUFTX1BPV0VSU0FWRSkgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgdmFsdWU6ICVzXG4iLAorCQkJCQkJYXJndltvcHRpbmRdKTsKKwkJCQl1c2FnZSgpOworCQkJfQorCQl9CisJfQorfQorCisvKgorICogdmFsaWRhdGVfY3B1aWQoKQorICogcmV0dXJucyBvbiBzdWNjZXNzLCBxdWlldGx5IGV4aXRzIG9uIGZhaWx1cmUgKG1ha2UgdmVyYm9zZSB3aXRoIC12KQorICovCit2b2lkIHZhbGlkYXRlX2NwdWlkKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeCwgbWF4X2xldmVsOworCWNoYXIgYnJhbmRbMTZdOworCXVuc2lnbmVkIGludCBmbXMsIGZhbWlseSwgbW9kZWwsIHN0ZXBwaW5nOworCisJZWF4ID0gZWJ4ID0gZWN4ID0gZWR4ID0gMDsKKworCWFzbSgiY3B1aWQiIDogIj1hIiAobWF4X2xldmVsKSwgIj1iIiAoZWJ4KSwgIj1jIiAoZWN4KSwKKwkJIj1kIiAoZWR4KSA6ICJhIiAoMCkpOworCisJaWYgKGVieCAhPSAweDc1NmU2NTQ3IHx8IGVkeCAhPSAweDQ5NjU2ZTY5IHx8IGVjeCAhPSAweDZjNjU3NDZlKSB7CisJCWlmICh2ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICIlLjRzJS40cyUuNHMgIT0gR2VudWluZUludGVsIiwKKwkJCQkoY2hhciAqKSZlYngsIChjaGFyICopJmVkeCwgKGNoYXIgKikmZWN4KTsKKwkJZXhpdCgxKTsKKwl9CisKKwlhc20oImNwdWlkIiA6ICI9YSIgKGZtcyksICI9YyIgKGVjeCksICI9ZCIgKGVkeCkgOiAiYSIgKDEpIDogImVieCIpOworCWZhbWlseSA9IChmbXMgPj4gOCkgJiAweGY7CisJbW9kZWwgPSAoZm1zID4+IDQpICYgMHhmOworCXN0ZXBwaW5nID0gZm1zICYgMHhmOworCWlmIChmYW1pbHkgPT0gNiB8fCBmYW1pbHkgPT0gMHhmKQorCQltb2RlbCArPSAoKGZtcyA+PiAxNikgJiAweGYpIDw8IDQ7CisKKwlpZiAodmVyYm9zZSA+IDEpCisJCXByaW50ZigiQ1BVSUQgJXMgJWQgbGV2ZWxzIGZhbWlseTptb2RlbDpzdGVwcGluZyAiCisJCQkiMHgleDoleDoleCAoJWQ6JWQ6JWQpXG4iLCBicmFuZCwgbWF4X2xldmVsLAorCQkJZmFtaWx5LCBtb2RlbCwgc3RlcHBpbmcsIGZhbWlseSwgbW9kZWwsIHN0ZXBwaW5nKTsKKworCWlmICghKGVkeCAmICgxIDw8IDUpKSkgeworCQlpZiAodmVyYm9zZSkKKwkJCXByaW50ZigiQ1BVSUQ6IG5vIE1TUlxuIik7CisJCWV4aXQoMSk7CisJfQorCisJLyoKKwkgKiBTdXBwb3J0IGZvciBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTCisJICogaXMgaW5kaWNhdGVkIGJ5IENQVUlELjA2SC5FQ1guYml0MworCSAqLworCWFzbSgiY3B1aWQiIDogIj1hIiAoZWF4KSwgIj1iIiAoZWJ4KSwgIj1jIiAoZWN4KSwgIj1kIiAoZWR4KSA6ICJhIiAoNikpOworCWlmICh2ZXJib3NlKQorCQlwcmludGYoIkNQVUlELjA2SC5FQ1g6IDB4JXhcbiIsIGVjeCk7CisJaWYgKCEoZWN4ICYgKDEgPDwgMykpKSB7CisJCWlmICh2ZXJib3NlKQorCQkJcHJpbnRmKCJDUFVJRDogTm8gTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBU1xuIik7CisJCWV4aXQoMSk7CisJfQorCXJldHVybjsJLyogc3VjY2VzcyAqLworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgZ2V0X21zcihpbnQgY3B1LCBpbnQgb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBtc3I7CisJY2hhciBtc3JfcGF0aFszMl07CisJaW50IHJldHZhbDsKKwlpbnQgZmQ7CisKKwlzcHJpbnRmKG1zcl9wYXRoLCAiL2Rldi9jcHUvJWQvbXNyIiwgY3B1KTsKKwlmZCA9IG9wZW4obXNyX3BhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJCXByaW50ZigiVHJ5IFwiIyBtb2Rwcm9iZSBtc3JcIlxuIik7CisJCXBlcnJvcihtc3JfcGF0aCk7CisJCWV4aXQoMSk7CisJfQorCisJcmV0dmFsID0gcHJlYWQoZmQsICZtc3IsIHNpemVvZiBtc3IsIG9mZnNldCk7CisKKwlpZiAocmV0dmFsICE9IHNpemVvZiBtc3IpIHsKKwkJcHJpbnRmKCJwcmVhZCBjcHUlZCAweCV4ID0gJWRcbiIsIGNwdSwgb2Zmc2V0LCByZXR2YWwpOworCQlleGl0KC0yKTsKKwl9CisJY2xvc2UoZmQpOworCXJldHVybiBtc3I7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyAgcHV0X21zcihpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGxvbmcgbmV3X21zciwgaW50IG9mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgb2xkX21zcjsKKwljaGFyIG1zcl9wYXRoWzMyXTsKKwlpbnQgcmV0dmFsOworCWludCBmZDsKKworCXNwcmludGYobXNyX3BhdGgsICIvZGV2L2NwdS8lZC9tc3IiLCBjcHUpOworCWZkID0gb3Blbihtc3JfcGF0aCwgT19SRFdSKTsKKwlpZiAoZmQgPCAwKSB7CisJCXBlcnJvcihtc3JfcGF0aCk7CisJCWV4aXQoMSk7CisJfQorCisJcmV0dmFsID0gcHJlYWQoZmQsICZvbGRfbXNyLCBzaXplb2Ygb2xkX21zciwgb2Zmc2V0KTsKKwlpZiAocmV0dmFsICE9IHNpemVvZiBvbGRfbXNyKSB7CisJCXBlcnJvcigicHdyaXRlIik7CisJCXByaW50ZigicHJlYWQgY3B1JWQgMHgleCA9ICVkXG4iLCBjcHUsIG9mZnNldCwgcmV0dmFsKTsKKwkJZXhpdCgtMik7CisJfQorCisJcmV0dmFsID0gcHdyaXRlKGZkLCAmbmV3X21zciwgc2l6ZW9mIG5ld19tc3IsIG9mZnNldCk7CisJaWYgKHJldHZhbCAhPSBzaXplb2YgbmV3X21zcikgeworCQlwZXJyb3IoInB3cml0ZSIpOworCQlwcmludGYoInB3cml0ZSBjcHUlZCAweCV4ID0gJWRcbiIsIGNwdSwgb2Zmc2V0LCByZXR2YWwpOworCQlleGl0KC0yKTsKKwl9CisKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gb2xkX21zcjsKK30KKwordm9pZCBwcmludF9tc3IoaW50IGNwdSkKK3sKKwlwcmludGYoImNwdSVkOiAweCUwMTZsbHhcbiIsCisJCWNwdSwgZ2V0X21zcihjcHUsIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMpKTsKK30KKwordm9pZCB1cGRhdGVfbXNyKGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHByZXZpb3VzX21zcjsKKworCXByZXZpb3VzX21zciA9IHB1dF9tc3IoY3B1LCBuZXdfYmlhcywgTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUyk7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRmKCJjcHUlZCAgbXNyMHgleCAweCUwMTZsbHggLT4gMHglMDE2bGx4XG4iLAorCQkJY3B1LCBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTLCBwcmV2aW91c19tc3IsIG5ld19iaWFzKTsKKworCXJldHVybjsKK30KKworY2hhciAqcHJvY19zdGF0ID0gIi9wcm9jL3N0YXQiOworLyoKKyAqIHJ1biBmdW5jKCkgb24gZXZlcnkgY3B1IGluIC9kZXYvY3B1CisgKi8KK3ZvaWQgZm9yX2V2ZXJ5X2NwdSh2b2lkIChmdW5jKShpbnQpKQoreworCUZJTEUgKmZwOworCWludCByZXR2YWw7CisKKwlmcCA9IGZvcGVuKHByb2Nfc3RhdCwgInIiKTsKKwlpZiAoZnAgPT0gTlVMTCkgeworCQlwZXJyb3IocHJvY19zdGF0KTsKKwkJZXhpdCgxKTsKKwl9CisKKwlyZXR2YWwgPSBmc2NhbmYoZnAsICJjcHUgJSpkICUqZCAlKmQgJSpkICUqZCAlKmQgJSpkICUqZCAlKmQgJSpkXG4iKTsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJcGVycm9yKCIvcHJvYy9zdGF0IGZvcm1hdCIpOworCQlleGl0KDEpOworCX0KKworCXdoaWxlICgxKSB7CisJCWludCBjcHU7CisKKwkJcmV0dmFsID0gZnNjYW5mKGZwLAorCQkJImNwdSV1ICUqZCAlKmQgJSpkICUqZCAlKmQgJSpkICUqZCAlKmQgJSpkICUqZFxuIiwKKwkJCSZjcHUpOworCQlpZiAocmV0dmFsICE9IDEpCisJCQlyZXR1cm47CisKKwkJZnVuYyhjcHUpOworCX0KKwlmY2xvc2UoZnApOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY21kbGluZShhcmdjLCBhcmd2KTsKKworCWlmICh2ZXJib3NlID4gMSkKKwkJcHJpbnRmKCJ4ODZfZW5lcmd5X3BlcmZfcG9saWN5IE5vdiAyNCwgMjAxMCIKKwkJCQkiIC0gTGVuIEJyb3duIDxsZW5iQGtlcm5lbC5vcmc+XG4iKTsKKwlpZiAodmVyYm9zZSA+IDEgJiYgIXJlYWRfb25seSkKKwkJcHJpbnRmKCJuZXdfYmlhcyAlbGxkXG4iLCBuZXdfYmlhcyk7CisKKwl2YWxpZGF0ZV9jcHVpZCgpOworCisJaWYgKGNwdSAhPSAtMSkgeworCQlpZiAocmVhZF9vbmx5KQorCQkJcHJpbnRfbXNyKGNwdSk7CisJCWVsc2UKKwkJCXVwZGF0ZV9tc3IoY3B1KTsKKwl9IGVsc2UgeworCQlpZiAocmVhZF9vbmx5KQorCQkJZm9yX2V2ZXJ5X2NwdShwcmludF9tc3IpOworCQllbHNlCisJCQlmb3JfZXZlcnlfY3B1KHVwZGF0ZV9tc3IpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9rdGVzdC9jb21wYXJlLWt0ZXN0LXNhbXBsZS5wbCBiL3Rvb2xzL3Rlc3Rpbmcva3Rlc3QvY29tcGFyZS1rdGVzdC1zYW1wbGUucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWE1NzFlNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcva3Rlc3QvY29tcGFyZS1rdGVzdC1zYW1wbGUucGwKQEAgLTAsMCArMSwzMCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK29wZW4gKElOLCJrdGVzdC5wbCIpOword2hpbGUgKDxJTj4pIHsKKyAgICBpZiAoL1wkb3B0XHsiPyhbQS1aXS4qPykoXFsuKlxdKT8iP1x9LyB8fAorCS9zZXRfdGVzdF9vcHRpb25cKCIoLio/KSIvKSB7CisJJG9wdHskMX0gPSAxOworICAgIH0KK30KK2Nsb3NlIElOOworCitvcGVuIChJTiwgInNhbXBsZS5jb25mIik7Cit3aGlsZSAoPElOPikgeworICAgIGlmICgvXlxzKiM/XHMqKFxTKylccyo9LykgeworCSRzYW1weyQxfSA9IDE7CisgICAgfQorfQorY2xvc2UgSU47CisKK2ZvcmVhY2ggJG9wdCAoa2V5cyAlb3B0KSB7CisgICAgaWYgKCFkZWZpbmVkKCRzYW1weyRvcHR9KSkgeworCXByaW50ICJvcHQgPSAkb3B0XG4iOworICAgIH0KK30KKworZm9yZWFjaCAkc2FtcCAoa2V5cyAlc2FtcCkgeworICAgIGlmICghZGVmaW5lZCgkb3B0eyRzYW1wfSkpIHsKKwlwcmludCAic2FtcCA9ICRzYW1wXG4iOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcva3Rlc3Qva3Rlc3QucGwgYi90b29scy90ZXN0aW5nL2t0ZXN0L2t0ZXN0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUxYzYyZWUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy90ZXN0aW5nL2t0ZXN0L2t0ZXN0LnBsCkBAIC0wLDAgKzEsMjAyMyBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjCisjIENvcHl3cml0ZSAyMDEwIC0gU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+LCBSZWQgSGF0IEluYy4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisKK3VzZSBzdHJpY3Q7Cit1c2UgSVBDOjpPcGVuMjsKK3VzZSBGY250bCBxdyhGX0dFVEZMIEZfU0VURkwgT19OT05CTE9DSyk7Cit1c2UgRmlsZTo6UGF0aCBxdyhta3BhdGgpOwordXNlIEZpbGU6OkNvcHkgcXcoY3ApOwordXNlIEZpbGVIYW5kbGU7CisKK215ICRWRVJTSU9OID0gIjAuMiI7CisKKyR8ID0gMTsKKworbXkgJW9wdDsKK215ICVyZXBlYXRfdGVzdHM7CitteSAlcmVwZWF0czsKK215ICVkZWZhdWx0OworCisjZGVmYXVsdCBvcHRzCiskZGVmYXVsdHsiTlVNX1RFU1RTIn0JCT0gMTsKKyRkZWZhdWx0eyJSRUJPT1RfVFlQRSJ9CQk9ICJncnViIjsKKyRkZWZhdWx0eyJURVNUX1RZUEUifQkJPSAidGVzdCI7CiskZGVmYXVsdHsiQlVJTERfVFlQRSJ9CQk9ICJyYW5kY29uZmlnIjsKKyRkZWZhdWx0eyJNQUtFX0NNRCJ9CQk9ICJtYWtlIjsKKyRkZWZhdWx0eyJUSU1FT1VUIn0JCT0gMTIwOworJGRlZmF1bHR7IlRNUF9ESVIifQkJPSAiL3RtcC9rdGVzdCI7CiskZGVmYXVsdHsiU0xFRVBfVElNRSJ9CQk9IDYwOwkjIHNsZWVwIHRpbWUgYmV0d2VlbiB0ZXN0cworJGRlZmF1bHR7IkJVSUxEX05PQ0xFQU4ifQk9IDA7CiskZGVmYXVsdHsiUkVCT09UX09OX0VSUk9SIn0JPSAwOworJGRlZmF1bHR7IlBPV0VST0ZGX09OX0VSUk9SIn0JPSAwOworJGRlZmF1bHR7IlJFQk9PVF9PTl9TVUNDRVNTIn0JPSAxOworJGRlZmF1bHR7IlBPV0VST0ZGX09OX1NVQ0NFU1MifQk9IDA7CiskZGVmYXVsdHsiQlVJTERfT1BUSU9OUyJ9CT0gIiI7CiskZGVmYXVsdHsiQklTRUNUX1NMRUVQX1RJTUUifQk9IDYwOyAgICMgc2xlZXAgdGltZSBiZXR3ZWVuIGJpc2VjdHMKKyRkZWZhdWx0eyJDTEVBUl9MT0cifQkJPSAwOworJGRlZmF1bHR7IlNVQ0NFU1NfTElORSJ9CT0gImxvZ2luOiI7CiskZGVmYXVsdHsiQk9PVEVEX1RJTUVPVVQifQk9IDE7CiskZGVmYXVsdHsiRElFX09OX0ZBSUxVUkUifQk9IDE7CiskZGVmYXVsdHsiU1NIX0VYRUMifQkJPSAic3NoIFwkU1NIX1VTRVJcQFwkTUFDSElORSBcJFNTSF9DT01NQU5EIjsKKyRkZWZhdWx0eyJTQ1BfVE9fVEFSR0VUIn0JPSAic2NwIFwkU1JDX0ZJTEUgXCRTU0hfVVNFUlxAXCRNQUNISU5FOlwkRFNUX0ZJTEUiOworJGRlZmF1bHR7IlJFQk9PVCJ9CQk9ICJzc2ggXCRTU0hfVVNFUlxAXCRNQUNISU5FIHJlYm9vdCI7CiskZGVmYXVsdHsiU1RPUF9BRlRFUl9TVUNDRVNTIn0JPSAxMDsKKyRkZWZhdWx0eyJTVE9QX0FGVEVSX0ZBSUxVUkUifQk9IDYwOworJGRlZmF1bHR7IkxPQ0FMVkVSU0lPTiJ9CT0gIi10ZXN0IjsKKworbXkgJGt0ZXN0X2NvbmZpZzsKK215ICR2ZXJzaW9uOworbXkgJG1hY2hpbmU7CitteSAkc3NoX3VzZXI7CitteSAkdG1wZGlyOworbXkgJGJ1aWxkZGlyOworbXkgJG91dHB1dGRpcjsKK215ICRvdXRwdXRfY29uZmlnOworbXkgJHRlc3RfdHlwZTsKK215ICRidWlsZF90eXBlOworbXkgJGJ1aWxkX29wdGlvbnM7CitteSAkcmVib290X3R5cGU7CitteSAkcmVib290X3NjcmlwdDsKK215ICRwb3dlcl9jeWNsZTsKK215ICRyZWJvb3Q7CitteSAkcmVib290X29uX2Vycm9yOworbXkgJHBvd2Vyb2ZmX29uX2Vycm9yOworbXkgJGRpZV9vbl9mYWlsdXJlOworbXkgJHBvd2VyY3ljbGVfYWZ0ZXJfcmVib290OworbXkgJHBvd2Vyb2ZmX2FmdGVyX2hhbHQ7CitteSAkc3NoX2V4ZWM7CitteSAkc2NwX3RvX3RhcmdldDsKK215ICRwb3dlcl9vZmY7CitteSAkZ3J1Yl9tZW51OworbXkgJGdydWJfbnVtYmVyOworbXkgJHRhcmdldDsKK215ICRtYWtlOworbXkgJHBvc3RfaW5zdGFsbDsKK215ICRub2NsZWFuOworbXkgJG1pbmNvbmZpZzsKK215ICRhZGRjb25maWc7CitteSAkaW5fYmlzZWN0ID0gMDsKK215ICRiaXNlY3RfYmFkID0gIiI7CitteSAkcmV2ZXJzZV9iaXNlY3Q7CitteSAkaW5fcGF0Y2hjaGVjayA9IDA7CitteSAkcnVuX3Rlc3Q7CitteSAkcmVkaXJlY3Q7CitteSAkYnVpbGRsb2c7CitteSAkZG1lc2c7CitteSAkbW9uaXRvcl9mcDsKK215ICRtb25pdG9yX3BpZDsKK215ICRtb25pdG9yX2NudCA9IDA7CitteSAkc2xlZXBfdGltZTsKK215ICRiaXNlY3Rfc2xlZXBfdGltZTsKK215ICRzdG9yZV9mYWlsdXJlczsKK215ICR0aW1lb3V0OworbXkgJGJvb3RlZF90aW1lb3V0OworbXkgJGNvbnNvbGU7CitteSAkc3VjY2Vzc19saW5lOworbXkgJHN0b3BfYWZ0ZXJfc3VjY2VzczsKK215ICRzdG9wX2FmdGVyX2ZhaWx1cmU7CitteSAkYnVpbGRfdGFyZ2V0OworbXkgJHRhcmdldF9pbWFnZTsKK215ICRsb2NhbHZlcnNpb247CitteSAkaXRlcmF0aW9uID0gMDsKK215ICRzdWNjZXNzZXMgPSAwOworCitteSAlZW50ZXJlZF9jb25maWdzOworbXkgJWNvbmZpZ19oZWxwOworCiskY29uZmlnX2hlbHB7Ik1BQ0hJTkUifSA9IDw8ICJFT0YiCisgVGhlIG1hY2hpbmUgaG9zdG5hbWUgdGhhdCB5b3Ugd2lsbCB0ZXN0LgorRU9GCisgICAgOworJGNvbmZpZ19oZWxweyJTU0hfVVNFUiJ9ID0gPDwgIkVPRiIKKyBUaGUgYm94IGlzIGV4cGVjdGVkIHRvIGhhdmUgc3NoIG9uIG5vcm1hbCBib290dXAsIHByb3ZpZGUgdGhlIHVzZXIKKyAgKG1vc3QgbGlrZWx5IHJvb3QsIHNpbmNlIHlvdSBuZWVkIHByaXZpbGVnZWQgb3BlcmF0aW9ucykKK0VPRgorICAgIDsKKyRjb25maWdfaGVscHsiQlVJTERfRElSIn0gPSA8PCAiRU9GIgorIFRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgTGludXggc291cmNlIGNvZGUgKGZ1bGwgcGF0aCkuCitFT0YKKyAgICA7CiskY29uZmlnX2hlbHB7Ik9VVFBVVF9ESVIifSA9IDw8ICJFT0YiCisgVGhlIGRpcmVjdG9yeSB0aGF0IHRoZSBvYmplY3RzIHdpbGwgYmUgYnVpbHQgKGZ1bGwgcGF0aCkuCisgKGNhbiBub3QgYmUgc2FtZSBhcyBCVUlMRF9ESVIpCitFT0YKKyAgICA7CiskY29uZmlnX2hlbHB7IkJVSUxEX1RBUkdFVCJ9ID0gPDwgIkVPRiIKKyBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbXBpbGVkIGZpbGUgdG8gY29weSB0byB0aGUgdGFyZ2V0LgorIChyZWxhdGl2ZSB0byBPVVRQVVRfRElSKQorRU9GCisgICAgOworJGNvbmZpZ19oZWxweyJUQVJHRVRfSU1BR0UifSA9IDw8ICJFT0YiCisgVGhlIHBsYWNlIHRvIHB1dCB5b3VyIGltYWdlIG9uIHRoZSB0ZXN0IG1hY2hpbmUuCitFT0YKKyAgICA7CiskY29uZmlnX2hlbHB7IlBPV0VSX0NZQ0xFIn0gPSA8PCAiRU9GIgorIEEgc2NyaXB0IG9yIGNvbW1hbmQgdG8gcmVib290IHRoZSBib3guCisKKyBIZXJlIGlzIGEgZGlnaXRhbCBsb2dnZXJzIHBvd2VyIHN3aXRjaCBleGFtcGxlCisgUE9XRVJfQ1lDTEUgPSB3Z2V0IC0tbm8tcHJveHkgLU8gL2Rldi9udWxsIC1xICAtLWF1dGgtbm8tY2hhbGxlbmdlICdodHRwOi8vYWRtaW46YWRtaW5cQHBvd2VyL291dGxldD81PUNDTCcKKworIEhlcmUgaXMgYW4gZXhhbXBsZSB0byByZWJvb3QgYSB2aXJ0dWFsIGJveCBvbiB0aGUgY3VycmVudCBob3N0Cisgd2l0aCB0aGUgbmFtZSAiR3Vlc3QiLgorIFBPV0VSX0NZQ0xFID0gdmlyc2ggZGVzdHJveSBHdWVzdDsgc2xlZXAgNTsgdmlyc2ggc3RhcnQgR3Vlc3QKK0VPRgorICAgIDsKKyRjb25maWdfaGVscHsiQ09OU09MRSJ9ID0gPDwgIkVPRiIKKyBUaGUgc2NyaXB0IG9yIGNvbW1hbmQgdGhhdCByZWFkcyB0aGUgY29uc29sZQorCisgIElmIHlvdSB1c2UgdHR5d2F0Y2ggc2VydmVyLCBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHdvdWxkIHdvcmsuCitDT05TT0xFID0gbmMgLWQgbG9jYWxob3N0IDMwMDEKKworIEZvciBhIHZpcnR1YWwgbWFjaGluZSB3aXRoIGd1ZXN0IG5hbWUgIkd1ZXN0Ii4KK0NPTlNPTEUgPSAgdmlyc2ggY29uc29sZSBHdWVzdAorRU9GCisgICAgOworJGNvbmZpZ19oZWxweyJMT0NBTFZFUlNJT04ifSA9IDw8ICJFT0YiCisgUmVxdWlyZWQgdmVyc2lvbiBlbmRpbmcgdG8gZGlmZmVyZW50aWF0ZSB0aGUgdGVzdAorIGZyb20gb3RoZXIgbGludXggYnVpbGRzIG9uIHRoZSBzeXN0ZW0uCitFT0YKKyAgICA7CiskY29uZmlnX2hlbHB7IlJFQk9PVF9UWVBFIn0gPSA8PCAiRU9GIgorIFdheSB0byByZWJvb3QgdGhlIGJveCB0byB0aGUgdGVzdCBrZXJuZWwuCisgT25seSB2YWxpZCBvcHRpb25zIHNvIGZhciBhcmUgImdydWIiIGFuZCAic2NyaXB0Ii4KKworIElmIHlvdSBzcGVjaWZ5IGdydWIsIGl0IHdpbGwgYXNzdW1lIGdydWIgdmVyc2lvbiAxCisgYW5kIHdpbGwgc2VhcmNoIGluIC9ib290L2dydWIvbWVudS5sc3QgZm9yIHRoZSB0aXRsZSBcJEdSVUJfTUVOVQorIGFuZCBzZWxlY3QgdGhhdCB0YXJnZXQgdG8gcmVib290IHRvIHRoZSBrZXJuZWwuIElmIHRoaXMgaXMgbm90CisgeW91ciBzZXR1cCwgdGhlbiBzcGVjaWZ5ICJzY3JpcHQiIGFuZCBoYXZlIGEgY29tbWFuZCBvciBzY3JpcHQKKyBzcGVjaWZpZWQgaW4gUkVCT09UX1NDUklQVCB0byBib290IHRvIHRoZSB0YXJnZXQuCisKKyBUaGUgZW50cnkgaW4gL2Jvb3QvZ3J1Yi9tZW51LmxzdCBtdXN0IGJlIGVudGVyZWQgaW4gbWFudWFsbHkuCisgVGhlIHRlc3Qgd2lsbCBub3QgbW9kaWZ5IHRoYXQgZmlsZS4KK0VPRgorICAgIDsKKyRjb25maWdfaGVscHsiR1JVQl9NRU5VIn0gPSA8PCAiRU9GIgorIFRoZSBncnViIHRpdGxlIG5hbWUgZm9yIHRoZSB0ZXN0IGtlcm5lbCB0byBib290CisgKE9ubHkgbWFuZGF0b3J5IGlmIFJFQk9PVF9UWVBFID0gZ3J1YikKKworIE5vdGUsIGt0ZXN0LnBsIHdpbGwgbm90IHVwZGF0ZSB0aGUgZ3J1YiBtZW51LmxzdCwgeW91IG5lZWQgdG8KKyBtYW51YWxseSBhZGQgYW4gb3B0aW9uIGZvciB0aGUgdGVzdC4ga3Rlc3QucGwgd2lsbCBzZWFyY2gKKyB0aGUgZ3J1YiBtZW51LmxzdCBmb3IgdGhpcyBvcHRpb24gdG8gZmluZCB3aGF0IGtlcm5lbCB0bworIHJlYm9vdCBpbnRvLgorCisgRm9yIGV4YW1wbGUsIGlmIGluIHRoZSAvYm9vdC9ncnViL21lbnUubHN0IHRoZSB0ZXN0IGtlcm5lbCB0aXRsZSBoYXM6CisgdGl0bGUgVGVzdCBLZXJuZWwKKyBrZXJuZWwgdm1saW51ei10ZXN0CisgR1JVQl9NRU5VID0gVGVzdCBLZXJuZWwKK0VPRgorICAgIDsKKyRjb25maWdfaGVscHsiUkVCT09UX1NDUklQVCJ9ID0gPDwgIkVPRiIKKyBBIHNjcmlwdCB0byByZWJvb3QgdGhlIHRhcmdldCBpbnRvIHRoZSB0ZXN0IGtlcm5lbAorIChPbmx5IG1hbmRhdG9yeSBpZiBSRUJPT1RfVFlQRSA9IHNjcmlwdCkKK0VPRgorICAgIDsKKworCitzdWIgZ2V0X2t0ZXN0X2NvbmZpZyB7CisgICAgbXkgKCRjb25maWcpID0gQF87CisKKyAgICByZXR1cm4gaWYgKGRlZmluZWQoJG9wdHskY29uZmlnfSkpOworCisgICAgaWYgKGRlZmluZWQoJGNvbmZpZ19oZWxweyRjb25maWd9KSkgeworCXByaW50ICJcbiI7CisJcHJpbnQgJGNvbmZpZ19oZWxweyRjb25maWd9OworICAgIH0KKworICAgIGZvciAoOzspIHsKKwlwcmludCAiJGNvbmZpZyA9ICI7CisJaWYgKGRlZmluZWQoJGRlZmF1bHR7JGNvbmZpZ30pKSB7CisJICAgIHByaW50ICJcWyRkZWZhdWx0eyRjb25maWd9XF0gIjsKKwl9CisJJGVudGVyZWRfY29uZmlnc3skY29uZmlnfSA9IDxTVERJTj47CisJJGVudGVyZWRfY29uZmlnc3skY29uZmlnfSA9fiBzL15ccyooLipcUylccyokLyQxLzsKKwlpZiAoJGVudGVyZWRfY29uZmlnc3skY29uZmlnfSA9fiAvXlxzKiQvKSB7CisJICAgIGlmICgkZGVmYXVsdHskY29uZmlnfSkgeworCQkkZW50ZXJlZF9jb25maWdzeyRjb25maWd9ID0gJGRlZmF1bHR7JGNvbmZpZ307CisJICAgIH0gZWxzZSB7CisJCXByaW50ICJZb3VyIGFuc3dlciBjYW4gbm90IGJlIGJsYW5rXG4iOworCQluZXh0OworCSAgICB9CisJfQorCWxhc3Q7CisgICAgfQorfQorCitzdWIgZ2V0X2t0ZXN0X2NvbmZpZ3MgeworICAgIGdldF9rdGVzdF9jb25maWcoIk1BQ0hJTkUiKTsKKyAgICBnZXRfa3Rlc3RfY29uZmlnKCJTU0hfVVNFUiIpOworICAgIGdldF9rdGVzdF9jb25maWcoIkJVSUxEX0RJUiIpOworICAgIGdldF9rdGVzdF9jb25maWcoIk9VVFBVVF9ESVIiKTsKKyAgICBnZXRfa3Rlc3RfY29uZmlnKCJCVUlMRF9UQVJHRVQiKTsKKyAgICBnZXRfa3Rlc3RfY29uZmlnKCJUQVJHRVRfSU1BR0UiKTsKKyAgICBnZXRfa3Rlc3RfY29uZmlnKCJQT1dFUl9DWUNMRSIpOworICAgIGdldF9rdGVzdF9jb25maWcoIkNPTlNPTEUiKTsKKyAgICBnZXRfa3Rlc3RfY29uZmlnKCJMT0NBTFZFUlNJT04iKTsKKworICAgIG15ICRydHlwZSA9ICRvcHR7IlJFQk9PVF9UWVBFIn07CisKKyAgICBpZiAoIWRlZmluZWQoJHJ0eXBlKSkgeworCWlmICghZGVmaW5lZCgkb3B0eyJHUlVCX01FTlUifSkpIHsKKwkgICAgZ2V0X2t0ZXN0X2NvbmZpZygiUkVCT09UX1RZUEUiKTsKKwkgICAgJHJ0eXBlID0gJGVudGVyZWRfY29uZmlnc3siUkVCT09UX1RZUEUifTsKKwl9IGVsc2UgeworCSAgICAkcnR5cGUgPSAiZ3J1YiI7CisJfQorICAgIH0KKworICAgIGlmICgkcnR5cGUgZXEgImdydWIiKSB7CisJZ2V0X2t0ZXN0X2NvbmZpZygiR1JVQl9NRU5VIik7CisgICAgfSBlbHNlIHsKKwlnZXRfa3Rlc3RfY29uZmlnKCJSRUJPT1RfU0NSSVBUIik7CisgICAgfQorfQorCitzdWIgc2V0X3ZhbHVlIHsKKyAgICBteSAoJGx2YWx1ZSwgJHJ2YWx1ZSkgPSBAXzsKKworICAgIGlmIChkZWZpbmVkKCRvcHR7JGx2YWx1ZX0pKSB7CisJZGllICJFcnJvcjogT3B0aW9uICRsdmFsdWUgZGVmaW5lZCBtb3JlIHRoYW4gb25jZSFcbiI7CisgICAgfQorICAgIGlmICgkcnZhbHVlID1+IC9eXHMqJC8pIHsKKwlkZWxldGUgJG9wdHskbHZhbHVlfTsKKyAgICB9IGVsc2UgeworCSRvcHR7JGx2YWx1ZX0gPSAkcnZhbHVlOworICAgIH0KK30KKworc3ViIHJlYWRfY29uZmlnIHsKKyAgICBteSAoJGNvbmZpZykgPSBAXzsKKworICAgIG9wZW4oSU4sICRjb25maWcpIHx8IGRpZSAiY2FuJ3QgcmVhZCBmaWxlICRjb25maWciOworCisgICAgbXkgJG5hbWUgPSAkY29uZmlnOworICAgICRuYW1lID1+IHMsLiovKC4qKSwkMSw7CisKKyAgICBteSAkdGVzdF9udW0gPSAwOworICAgIG15ICRkZWZhdWx0ID0gMTsKKyAgICBteSAkcmVwZWF0ID0gMTsKKyAgICBteSAkbnVtX3Rlc3RzX3NldCA9IDA7CisgICAgbXkgJHNraXAgPSAwOworICAgIG15ICRyZXN0OworCisgICAgd2hpbGUgKDxJTj4pIHsKKworCSMgaWdub3JlIGJsYW5rIGxpbmVzIGFuZCBjb21tZW50cworCW5leHQgaWYgKC9eXHMqJC8gfHwgL1xzKlwjLyk7CisKKwlpZiAoL15ccypURVNUX1NUQVJUKC4qKS8pIHsKKworCSAgICAkcmVzdCA9ICQxOworCisJICAgIGlmICgkbnVtX3Rlc3RzX3NldCkgeworCQlkaWUgIiRuYW1lOiAkLjogQ2FuIG5vdCBzcGVjaWZ5IGJvdGggTlVNX1RFU1RTIGFuZCBURVNUX1NUQVJUXG4iOworCSAgICB9CisKKwkgICAgbXkgJG9sZF90ZXN0X251bSA9ICR0ZXN0X251bTsKKwkgICAgbXkgJG9sZF9yZXBlYXQgPSAkcmVwZWF0OworCisJICAgICR0ZXN0X251bSArPSAkcmVwZWF0OworCSAgICAkZGVmYXVsdCA9IDA7CisJICAgICRyZXBlYXQgPSAxOworCisJICAgIGlmICgkcmVzdCA9fiAvXHMrU0tJUCguKikvKSB7CisJCSRyZXN0ID0gJDE7CisJCSRza2lwID0gMTsKKwkgICAgfSBlbHNlIHsKKwkJJHNraXAgPSAwOworCSAgICB9CisKKwkgICAgaWYgKCRyZXN0ID1+IC9ccytJVEVSQVRFXHMrKFxkKykoLiopJC8pIHsKKwkJJHJlcGVhdCA9ICQxOworCQkkcmVzdCA9ICQyOworCQkkcmVwZWF0X3Rlc3RzeyIkdGVzdF9udW0ifSA9ICRyZXBlYXQ7CisJICAgIH0KKworCSAgICBpZiAoJHJlc3QgPX4gL1xzK1NLSVAoLiopLykgeworCQkkcmVzdCA9ICQxOworCQkkc2tpcCA9IDE7CisJICAgIH0KKworCSAgICBpZiAoJHJlc3QgIX4gL15ccyokLykgeworCQlkaWUgIiRuYW1lOiAkLjogR2FyZ2JhZ2UgZm91bmQgYWZ0ZXIgVEVTVF9TVEFSVFxuJF8iOworCSAgICB9CisKKwkgICAgaWYgKCRza2lwKSB7CisJCSR0ZXN0X251bSA9ICRvbGRfdGVzdF9udW07CisJCSRyZXBlYXQgPSAkb2xkX3JlcGVhdDsKKwkgICAgfQorCisJfSBlbHNpZiAoL15ccypERUZBVUxUUyguKikkLykgeworCSAgICAkZGVmYXVsdCA9IDE7CisKKwkgICAgJHJlc3QgPSAkMTsKKworCSAgICBpZiAoJHJlc3QgPX4gL1xzK1NLSVAoLiopLykgeworCQkkcmVzdCA9ICQxOworCQkkc2tpcCA9IDE7CisJICAgIH0gZWxzZSB7CisJCSRza2lwID0gMDsKKwkgICAgfQorCisJICAgIGlmICgkcmVzdCAhfiAvXlxzKiQvKSB7CisJCWRpZSAiJG5hbWU6ICQuOiBHYXJnYmFnZSBmb3VuZCBhZnRlciBERUZBVUxUU1xuJF8iOworCSAgICB9CisKKwl9IGVsc2lmICgvXlxzKihbQS1aX1xbXF1cZF0rKVxzKj1ccyooLio/KVxzKiQvKSB7CisKKwkgICAgbmV4dCBpZiAoJHNraXApOworCisJICAgIG15ICRsdmFsdWUgPSAkMTsKKwkgICAgbXkgJHJ2YWx1ZSA9ICQyOworCisJICAgIGlmICghJGRlZmF1bHQgJiYKKwkJKCRsdmFsdWUgZXEgIk5VTV9URVNUUyIgfHwKKwkJICRsdmFsdWUgZXEgIkxPR19GSUxFIiB8fAorCQkgJGx2YWx1ZSBlcSAiQ0xFQVJfTE9HIikpIHsKKwkJZGllICIkbmFtZTogJC46ICRsdmFsdWUgbXVzdCBiZSBzZXQgaW4gREVGQVVMVFMgc2VjdGlvblxuIjsKKwkgICAgfQorCisJICAgIGlmICgkbHZhbHVlIGVxICJOVU1fVEVTVFMiKSB7CisJCWlmICgkdGVzdF9udW0pIHsKKwkJICAgIGRpZSAiJG5hbWU6ICQuOiBDYW4gbm90IHNwZWNpZnkgYm90aCBOVU1fVEVTVFMgYW5kIFRFU1RfU1RBUlRcbiI7CisJCX0KKwkJaWYgKCEkZGVmYXVsdCkgeworCQkgICAgZGllICIkbmFtZTogJC46IE5VTV9URVNUUyBtdXN0IGJlIHNldCBpbiBkZWZhdWx0IHNlY3Rpb25cbiI7CisJCX0KKwkJJG51bV90ZXN0c19zZXQgPSAxOworCSAgICB9CisKKwkgICAgaWYgKCRkZWZhdWx0IHx8ICRsdmFsdWUgPX4gL1xbXGQrXF0kLykgeworCQlzZXRfdmFsdWUoJGx2YWx1ZSwgJHJ2YWx1ZSk7CisJICAgIH0gZWxzZSB7CisJCW15ICR2YWwgPSAiJGx2YWx1ZVxbJHRlc3RfbnVtXF0iOworCQlzZXRfdmFsdWUoJHZhbCwgJHJ2YWx1ZSk7CisKKwkJaWYgKCRyZXBlYXQgPiAxKSB7CisJCSAgICAkcmVwZWF0c3skdmFsfSA9ICRyZXBlYXQ7CisJCX0KKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGRpZSAiJG5hbWU6ICQuOiBHYXJiYWdlIGZvdW5kIGluIGNvbmZpZ1xuJF8iOworCX0KKyAgICB9CisKKyAgICBjbG9zZShJTik7CisKKyAgICBpZiAoJHRlc3RfbnVtKSB7CisJJHRlc3RfbnVtICs9ICRyZXBlYXQgLSAxOworCSRvcHR7Ik5VTV9URVNUUyJ9ID0gJHRlc3RfbnVtOworICAgIH0KKworICAgICMgbWFrZSBzdXJlIHdlIGhhdmUgYWxsIG1hbmRhdG9yeSBjb25maWdzCisgICAgZ2V0X2t0ZXN0X2NvbmZpZ3M7CisKKyAgICAjIHNldCBhbnkgZGVmYXVsdHMKKworICAgIGZvcmVhY2ggbXkgJGRlZmF1bHQgKGtleXMgJWRlZmF1bHQpIHsKKwlpZiAoIWRlZmluZWQoJG9wdHskZGVmYXVsdH0pKSB7CisJICAgICRvcHR7JGRlZmF1bHR9ID0gJGRlZmF1bHR7JGRlZmF1bHR9OworCX0KKyAgICB9Cit9CisKK3N1YiBfbG9naXQgeworICAgIGlmIChkZWZpbmVkKCRvcHR7IkxPR19GSUxFIn0pKSB7CisJb3BlbihPVVQsICI+PiAkb3B0e0xPR19GSUxFfSIpIG9yIGRpZSAiQ2FuJ3Qgd3JpdGUgdG8gJG9wdHtMT0dfRklMRX0iOworCXByaW50IE9VVCBAXzsKKwljbG9zZShPVVQpOworICAgIH0KK30KKworc3ViIGxvZ2l0IHsKKyAgICBpZiAoZGVmaW5lZCgkb3B0eyJMT0dfRklMRSJ9KSkgeworCV9sb2dpdCBAXzsKKyAgICB9IGVsc2UgeworCXByaW50IEBfOworICAgIH0KK30KKworc3ViIGRvcHJpbnQgeworICAgIHByaW50IEBfOworICAgIF9sb2dpdCBAXzsKK30KKworc3ViIHJ1bl9jb21tYW5kOworCitzdWIgcmVib290IHsKKyAgICAjIHRyeSB0byByZWJvb3Qgbm9ybWFsbHkKKyAgICBpZiAocnVuX2NvbW1hbmQgJHJlYm9vdCkgeworCWlmIChkZWZpbmVkKCRwb3dlcmN5Y2xlX2FmdGVyX3JlYm9vdCkpIHsKKwkgICAgc2xlZXAgJHBvd2VyY3ljbGVfYWZ0ZXJfcmVib290OworCSAgICBydW5fY29tbWFuZCAiJHBvd2VyX2N5Y2xlIjsKKwl9CisgICAgfSBlbHNlIHsKKwkjIG5vcGU/IHBvd2VyIGN5Y2xlIGl0LgorCXJ1bl9jb21tYW5kICIkcG93ZXJfY3ljbGUiOworICAgIH0KK30KKworc3ViIGRvX25vdF9yZWJvb3QgeworICAgIG15ICRpID0gJGl0ZXJhdGlvbjsKKworICAgIHJldHVybiAkdGVzdF90eXBlIGVxICJidWlsZCIgfHwKKwkoJHRlc3RfdHlwZSBlcSAicGF0Y2hjaGVjayIgJiYgJG9wdHsiUEFUQ0hDSEVDS19UWVBFWyRpXSJ9IGVxICJidWlsZCIpIHx8CisJKCR0ZXN0X3R5cGUgZXEgImJpc2VjdCIgJiYgJG9wdHsiQklTRUNUX1RZUEVbJGldIn0gZXEgImJ1aWxkIik7Cit9CisKK3N1YiBkb2RpZSB7CisgICAgZG9wcmludCAiQ1JJVElDQUwgRkFJTFVSRS4uLiAiLCBAXywgIlxuIjsKKworICAgIG15ICRpID0gJGl0ZXJhdGlvbjsKKworICAgIGlmICgkcmVib290X29uX2Vycm9yICYmICFkb19ub3RfcmVib290KSB7CisKKwlkb3ByaW50ICJSRUJPT1RJTkdcbiI7CisJcmVib290OworCisgICAgfSBlbHNpZiAoJHBvd2Vyb2ZmX29uX2Vycm9yICYmIGRlZmluZWQoJHBvd2VyX29mZikpIHsKKwlkb3ByaW50ICJQT1dFUklORyBPRkZcbiI7CisJYCRwb3dlcl9vZmZgOworICAgIH0KKworICAgIGRpZSBAXywgIlxuIjsKK30KKworc3ViIG9wZW5fY29uc29sZSB7CisgICAgbXkgKCRmcCkgPSBAXzsKKworICAgIG15ICRmbGFnczsKKworICAgIG15ICRwaWQgPSBvcGVuKCRmcCwgIiRjb25zb2xlfCIpIG9yCisJZG9kaWUgIkNhbid0IG9wZW4gY29uc29sZSAkY29uc29sZSI7CisKKyAgICAkZmxhZ3MgPSBmY250bCgkZnAsIEZfR0VURkwsIDApIG9yCisJZG9kaWUgIkNhbid0IGdldCBmbGFncyBmb3IgdGhlIHNvY2tldDogJCEiOworICAgICRmbGFncyA9IGZjbnRsKCRmcCwgRl9TRVRGTCwgJGZsYWdzIHwgT19OT05CTE9DSykgb3IKKwlkb2RpZSAiQ2FuJ3Qgc2V0IGZsYWdzIGZvciB0aGUgc29ja2V0OiAkISI7CisKKyAgICByZXR1cm4gJHBpZDsKK30KKworc3ViIGNsb3NlX2NvbnNvbGUgeworICAgIG15ICgkZnAsICRwaWQpID0gQF87CisKKyAgICBkb3ByaW50ICJraWxsIGNoaWxkIHByb2Nlc3MgJHBpZFxuIjsKKyAgICBraWxsIDIsICRwaWQ7CisKKyAgICBwcmludCAiY2xvc2luZyFcbiI7CisgICAgY2xvc2UoJGZwKTsKK30KKworc3ViIHN0YXJ0X21vbml0b3IgeworICAgIGlmICgkbW9uaXRvcl9jbnQrKykgeworCXJldHVybjsKKyAgICB9CisgICAgJG1vbml0b3JfZnAgPSBcKk1PTkZEOworICAgICRtb25pdG9yX3BpZCA9IG9wZW5fY29uc29sZSAkbW9uaXRvcl9mcDsKKworICAgIHJldHVybjsKKworICAgIG9wZW4oTU9ORkQsICJTdG9wIHBlcmwgZnJvbSB3YXJuaW5nIGFib3V0IHNpbmdsZSB1c2Ugb2YgTU9ORkQiKTsKK30KKworc3ViIGVuZF9tb25pdG9yIHsKKyAgICBpZiAoLS0kbW9uaXRvcl9jbnQpIHsKKwlyZXR1cm47CisgICAgfQorICAgIGNsb3NlX2NvbnNvbGUoJG1vbml0b3JfZnAsICRtb25pdG9yX3BpZCk7Cit9CisKK3N1YiB3YWl0X2Zvcl9tb25pdG9yIHsKKyAgICBteSAoJHRpbWUpID0gQF87CisgICAgbXkgJGxpbmU7CisKKyAgICBkb3ByaW50ICIqKiBXYWl0IGZvciBtb25pdG9yIHRvIHNldHRsZSBkb3duICoqXG4iOworCisgICAgIyByZWFkIHRoZSBtb25pdG9yIGFuZCB3YWl0IGZvciB0aGUgc3lzdGVtIHRvIGNhbG0gZG93bgorICAgIGRvIHsKKwkkbGluZSA9IHdhaXRfZm9yX2lucHV0KCRtb25pdG9yX2ZwLCAkdGltZSk7CisJcHJpbnQgIiRsaW5lIiBpZiAoZGVmaW5lZCgkbGluZSkpOworICAgIH0gd2hpbGUgKGRlZmluZWQoJGxpbmUpKTsKKyAgICBwcmludCAiKiogTW9uaXRvciBmbHVzaGVkICoqXG4iOworfQorCitzdWIgZmFpbCB7CisKKwlpZiAoJGRpZV9vbl9mYWlsdXJlKSB7CisJCWRvZGllIEBfOworCX0KKworCWRvcHJpbnQgIkZBSUxFRFxuIjsKKworCW15ICRpID0gJGl0ZXJhdGlvbjsKKworCSMgbm8gbmVlZCB0byByZWJvb3QgZm9yIGp1c3QgYnVpbGRpbmcuCisJaWYgKCFkb19ub3RfcmVib290KSB7CisJICAgIGRvcHJpbnQgIlJFQk9PVElOR1xuIjsKKwkgICAgcmVib290OworCSAgICBzdGFydF9tb25pdG9yOworCSAgICB3YWl0X2Zvcl9tb25pdG9yICRzbGVlcF90aW1lOworCSAgICBlbmRfbW9uaXRvcjsKKwl9CisKKwlkb3ByaW50ICIlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlXG4iOworCWRvcHJpbnQgIiUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSVcbiI7CisJZG9wcmludCAiS1RFU1QgUkVTVUxUOiBURVNUICRpIEZhaWxlZDogIiwgQF8sICJcbiI7CisJZG9wcmludCAiJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJVxuIjsKKwlkb3ByaW50ICIlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlXG4iOworCisJcmV0dXJuIDEgaWYgKCFkZWZpbmVkKCRzdG9yZV9mYWlsdXJlcykpOworCisJbXkgQHQgPSBsb2NhbHRpbWU7CisJbXkgJGRhdGUgPSBzcHJpbnRmICIlMDRkJTAyZCUwMmQlMDJkJTAyZCUwMmQiLAorCQkxOTAwKyR0WzVdLCR0WzRdLCR0WzNdLCR0WzJdLCR0WzFdLCR0WzBdOworCisJbXkgJHR5cGUgPSAkYnVpbGRfdHlwZTsKKwlpZiAoJHR5cGUgPX4gL3VzZWNvbmZpZy8pIHsKKwkgICAgJHR5cGUgPSAidXNlY29uZmlnIjsKKwl9CisKKwlteSAkZGlyID0gIiRtYWNoaW5lLSR0ZXN0X3R5cGUtJHR5cGUtZmFpbC0kZGF0ZSI7CisJbXkgJGZhaWxkaXIgPSAiJHN0b3JlX2ZhaWx1cmVzLyRkaXIiOworCisJaWYgKCEtZCAkZmFpbGRpcikgeworCSAgICBta3BhdGgoJGZhaWxkaXIpIG9yCisJCWRpZSAiY2FuJ3QgY3JlYXRlICRmYWlsZGlyIjsKKwl9CisJaWYgKC1mICIkb3V0cHV0X2NvbmZpZyIpIHsKKwkgICAgY3AgIiRvdXRwdXRfY29uZmlnIiwgIiRmYWlsZGlyL2NvbmZpZyIgb3IKKwkJZGllICJmYWlsZWQgdG8gY29weSAuY29uZmlnIjsKKwl9CisJaWYgKC1mICRidWlsZGxvZykgeworCSAgICBjcCAkYnVpbGRsb2csICIkZmFpbGRpci9idWlsZGxvZyIgb3IKKwkJZGllICJmYWlsZWQgdG8gbW92ZSAkYnVpbGRsb2ciOworCX0KKwlpZiAoLWYgJGRtZXNnKSB7CisJICAgIGNwICRkbWVzZywgIiRmYWlsZGlyL2RtZXNnIiBvcgorCQlkaWUgImZhaWxlZCB0byBtb3ZlICRkbWVzZyI7CisJfQorCisJZG9wcmludCAiKioqIFNhdmVkIGluZm8gdG8gJGZhaWxkaXIgKioqXG4iOworCisJcmV0dXJuIDE7Cit9CisKK3N1YiBydW5fY29tbWFuZCB7CisgICAgbXkgKCRjb21tYW5kKSA9IEBfOworICAgIG15ICRkb2xvZyA9IDA7CisgICAgbXkgJGRvcmQgPSAwOworICAgIG15ICRwaWQ7CisKKyAgICAkY29tbWFuZCA9fiBzL1wkU1NIX1VTRVIvJHNzaF91c2VyL2c7CisgICAgJGNvbW1hbmQgPX4gcy9cJE1BQ0hJTkUvJG1hY2hpbmUvZzsKKworICAgIGRvcHJpbnQoIiRjb21tYW5kIC4uLiAiKTsKKworICAgICRwaWQgPSBvcGVuKENNRCwgIiRjb21tYW5kIDI+JjEgfCIpIG9yCisJKGZhaWwgInVuYWJsZSB0byBleGVjICRjb21tYW5kIiBhbmQgcmV0dXJuIDApOworCisgICAgaWYgKGRlZmluZWQoJG9wdHsiTE9HX0ZJTEUifSkpIHsKKwlvcGVuKExPRywgIj4+JG9wdHtMT0dfRklMRX0iKSBvcgorCSAgICBkb2RpZSAiZmFpbGVkIHRvIHdyaXRlIHRvIGxvZyI7CisJJGRvbG9nID0gMTsKKyAgICB9CisKKyAgICBpZiAoZGVmaW5lZCgkcmVkaXJlY3QpKSB7CisJb3BlbiAoUkQsICI+JHJlZGlyZWN0Iikgb3IKKwkgICAgZG9kaWUgImZhaWxlZCB0byB3cml0ZSB0byByZWRpcmVjdCAkcmVkaXJlY3QiOworCSRkb3JkID0gMTsKKyAgICB9CisKKyAgICB3aGlsZSAoPENNRD4pIHsKKwlwcmludCBMT0cgaWYgKCRkb2xvZyk7CisJcHJpbnQgUkQgIGlmICgkZG9yZCk7CisgICAgfQorCisgICAgd2FpdHBpZCgkcGlkLCAwKTsKKyAgICBteSAkZmFpbGVkID0gJD87CisKKyAgICBjbG9zZShDTUQpOworICAgIGNsb3NlKExPRykgaWYgKCRkb2xvZyk7CisgICAgY2xvc2UoUkQpICBpZiAoJGRvcmQpOworCisgICAgaWYgKCRmYWlsZWQpIHsKKwlkb3ByaW50ICJGQUlMRUQhXG4iOworICAgIH0gZWxzZSB7CisJZG9wcmludCAiU1VDQ0VTU1xuIjsKKyAgICB9CisKKyAgICByZXR1cm4gISRmYWlsZWQ7Cit9CisKK3N1YiBydW5fc3NoIHsKKyAgICBteSAoJGNtZCkgPSBAXzsKKyAgICBteSAkY3BfZXhlYyA9ICRzc2hfZXhlYzsKKworICAgICRjcF9leGVjID1+IHMvXCRTU0hfQ09NTUFORC8kY21kL2c7CisgICAgcmV0dXJuIHJ1bl9jb21tYW5kICIkY3BfZXhlYyI7Cit9CisKK3N1YiBydW5fc2NwIHsKKyAgICBteSAoJHNyYywgJGRzdCkgPSBAXzsKKyAgICBteSAkY3Bfc2NwID0gJHNjcF90b190YXJnZXQ7CisKKyAgICAkY3Bfc2NwID1+IHMvXCRTUkNfRklMRS8kc3JjL2c7CisgICAgJGNwX3NjcCA9fiBzL1wkRFNUX0ZJTEUvJGRzdC9nOworCisgICAgcmV0dXJuIHJ1bl9jb21tYW5kICIkY3Bfc2NwIjsKK30KKworc3ViIGdldF9ncnViX2luZGV4IHsKKworICAgIGlmICgkcmVib290X3R5cGUgbmUgImdydWIiKSB7CisJcmV0dXJuOworICAgIH0KKyAgICByZXR1cm4gaWYgKGRlZmluZWQoJGdydWJfbnVtYmVyKSk7CisKKyAgICBkb3ByaW50ICJGaW5kIGdydWIgbWVudSAuLi4gIjsKKyAgICAkZ3J1Yl9udW1iZXIgPSAtMTsKKworICAgIG15ICRzc2hfZ3J1YiA9ICRzc2hfZXhlYzsKKyAgICAkc3NoX2dydWIgPX4gcyxcJFNTSF9DT01NQU5ELGNhdCAvYm9vdC9ncnViL21lbnUubHN0LGc7CisKKyAgICBvcGVuKElOLCAiJHNzaF9ncnViIHwiKQorCW9yIGRpZSAidW5hYmxlIHRvIGdldCBtZW51LmxzdCI7CisKKyAgICB3aGlsZSAoPElOPikgeworCWlmICgvXlxzKnRpdGxlXHMrJGdydWJfbWVudVxzKiQvKSB7CisJICAgICRncnViX251bWJlcisrOworCSAgICBsYXN0OworCX0gZWxzaWYgKC9eXHMqdGl0bGVccy8pIHsKKwkgICAgJGdydWJfbnVtYmVyKys7CisJfQorICAgIH0KKyAgICBjbG9zZShJTik7CisKKyAgICBkaWUgIkNvdWxkIG5vdCBmaW5kICckZ3J1Yl9tZW51JyBpbiAvYm9vdC9ncnViL21lbnUgb24gJG1hY2hpbmUiCisJaWYgKCRncnViX251bWJlciA8IDApOworICAgIGRvcHJpbnQgIiRncnViX251bWJlclxuIjsKK30KKworc3ViIHdhaXRfZm9yX2lucHV0Cit7CisgICAgbXkgKCRmcCwgJHRpbWUpID0gQF87CisgICAgbXkgJHJpbjsKKyAgICBteSAkcmVhZHk7CisgICAgbXkgJGxpbmU7CisgICAgbXkgJGNoOworCisgICAgaWYgKCFkZWZpbmVkKCR0aW1lKSkgeworCSR0aW1lID0gJHRpbWVvdXQ7CisgICAgfQorCisgICAgJHJpbiA9ICcnOworICAgIHZlYygkcmluLCBmaWxlbm8oJGZwKSwgMSkgPSAxOworICAgICRyZWFkeSA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsICR0aW1lKTsKKworICAgICRsaW5lID0gIiI7CisKKyAgICAjIHRyeSB0byByZWFkIG9uZSBjaGFyIGF0IGEgdGltZQorICAgIHdoaWxlIChzeXNyZWFkICRmcCwgJGNoLCAxKSB7CisJJGxpbmUgLj0gJGNoOworCWxhc3QgaWYgKCRjaCBlcSAiXG4iKTsKKyAgICB9CisKKyAgICBpZiAoIWxlbmd0aCgkbGluZSkpIHsKKwlyZXR1cm4gdW5kZWY7CisgICAgfQorCisgICAgcmV0dXJuICRsaW5lOworfQorCitzdWIgcmVib290X3RvIHsKKyAgICBpZiAoJHJlYm9vdF90eXBlIGVxICJncnViIikgeworCXJ1bl9zc2ggIicoZWNobyBcInNhdmVkZWZhdWx0IC0tZGVmYXVsdD0kZ3J1Yl9udW1iZXIgLS1vbmNlXCIgfCBncnViIC0tYmF0Y2g7IHJlYm9vdCknIjsKKwlyZXR1cm47CisgICAgfQorCisgICAgcnVuX2NvbW1hbmQgIiRyZWJvb3Rfc2NyaXB0IjsKK30KKworc3ViIGdldF9zaGExIHsKKyAgICBteSAoJGNvbW1pdCkgPSBAXzsKKworICAgIGRvcHJpbnQgImdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xICRjb21taXQgLi4uICI7CisgICAgbXkgJHNoYTEgPSBgZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgJGNvbW1pdGA7CisgICAgbXkgJHJldCA9ICQ/OworCisgICAgbG9naXQgJHNoYTE7CisKKyAgICBpZiAoJHJldCkgeworCWRvcHJpbnQgIkZBSUxFRFxuIjsKKwlkb2RpZSAiRmFpbGVkIHRvIGdldCBnaXQgJGNvbW1pdCI7CisgICAgfQorCisgICAgcHJpbnQgIlNVQ0NFU1NcbiI7CisKKyAgICBjaG9tcCAkc2hhMTsKKworICAgIHJldHVybiAkc2hhMTsKK30KKworc3ViIG1vbml0b3IgeworICAgIG15ICRib290ZWQgPSAwOworICAgIG15ICRidWcgPSAwOworICAgIG15ICRza2lwX2NhbGxfdHJhY2UgPSAwOworICAgIG15ICRsb29wczsKKworICAgIHdhaXRfZm9yX21vbml0b3IgNTsKKworICAgIG15ICRsaW5lOworICAgIG15ICRmdWxsX2xpbmUgPSAiIjsKKworICAgIG9wZW4oRE1FU0csICI+ICRkbWVzZyIpIG9yCisJZGllICJ1bmFibGUgdG8gd3JpdGUgdG8gJGRtZXNnIjsKKworICAgIHJlYm9vdF90bzsKKworICAgIG15ICRzdWNjZXNzX3N0YXJ0OworICAgIG15ICRmYWlsdXJlX3N0YXJ0OworCisgICAgZm9yICg7OykgeworCisJaWYgKCRib290ZWQpIHsKKwkgICAgJGxpbmUgPSB3YWl0X2Zvcl9pbnB1dCgkbW9uaXRvcl9mcCwgJGJvb3RlZF90aW1lb3V0KTsKKwl9IGVsc2UgeworCSAgICAkbGluZSA9IHdhaXRfZm9yX2lucHV0KCRtb25pdG9yX2ZwKTsKKwl9CisKKwlsYXN0IGlmICghZGVmaW5lZCgkbGluZSkpOworCisJZG9wcmludCAkbGluZTsKKwlwcmludCBETUVTRyAkbGluZTsKKworCSMgd2UgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGdldCBhIGZ1bGwgbGluZQorCSRmdWxsX2xpbmUgLj0gJGxpbmU7CisKKwlpZiAoJGZ1bGxfbGluZSA9fiAvJHN1Y2Nlc3NfbGluZS8pIHsKKwkgICAgJGJvb3RlZCA9IDE7CisJICAgICRzdWNjZXNzX3N0YXJ0ID0gdGltZTsKKwl9CisKKwlpZiAoJGJvb3RlZCAmJiBkZWZpbmVkKCRzdG9wX2FmdGVyX3N1Y2Nlc3MpICYmCisJICAgICRzdG9wX2FmdGVyX3N1Y2Nlc3MgPj0gMCkgeworCSAgICBteSAkbm93ID0gdGltZTsKKwkgICAgaWYgKCRub3cgLSAkc3VjY2Vzc19zdGFydCA+PSAkc3RvcF9hZnRlcl9zdWNjZXNzKSB7CisJCWRvcHJpbnQgIlRlc3QgZm9yY2VkIHRvIHN0b3AgYWZ0ZXIgJHN0b3BfYWZ0ZXJfc3VjY2VzcyBzZWNvbmRzIGFmdGVyIHN1Y2Nlc3NcbiI7CisJCWxhc3Q7CisJICAgIH0KKwl9CisKKwlpZiAoJGZ1bGxfbGluZSA9fiAvXFsgYmFja3RyYWNlIHRlc3RpbmcgXF0vKSB7CisJICAgICRza2lwX2NhbGxfdHJhY2UgPSAxOworCX0KKworCWlmICgkZnVsbF9saW5lID1+IC9jYWxsIHRyYWNlOi9pKSB7CisJICAgIGlmICghJHNraXBfY2FsbF90cmFjZSkgeworCQkkYnVnID0gMTsKKwkJJGZhaWx1cmVfc3RhcnQgPSB0aW1lOworCSAgICB9CisJfQorCisJaWYgKCRidWcgJiYgZGVmaW5lZCgkc3RvcF9hZnRlcl9mYWlsdXJlKSAmJgorCSAgICAkc3RvcF9hZnRlcl9mYWlsdXJlID49IDApIHsKKwkgICAgbXkgJG5vdyA9IHRpbWU7CisJICAgIGlmICgkbm93IC0gJGZhaWx1cmVfc3RhcnQgPj0gJHN0b3BfYWZ0ZXJfZmFpbHVyZSkgeworCQlkb3ByaW50ICJUZXN0IGZvcmNlZCB0byBzdG9wIGFmdGVyICRzdG9wX2FmdGVyX2ZhaWx1cmUgc2Vjb25kcyBhZnRlciBmYWlsdXJlXG4iOworCQlsYXN0OworCSAgICB9CisJfQorCisJaWYgKCRmdWxsX2xpbmUgPX4gL1xbIGVuZCBvZiBiYWNrdHJhY2UgdGVzdGluZyBcXS8pIHsKKwkgICAgJHNraXBfY2FsbF90cmFjZSA9IDA7CisJfQorCisJaWYgKCRmdWxsX2xpbmUgPX4gL0tlcm5lbCBwYW5pYyAtLykgeworCSAgICAkYnVnID0gMTsKKwl9CisKKwlpZiAoJGxpbmUgPX4gL1xuLykgeworCSAgICAkZnVsbF9saW5lID0gIiI7CisJfQorICAgIH0KKworICAgIGNsb3NlKERNRVNHKTsKKworICAgIGlmICgkYnVnKSB7CisJcmV0dXJuIDAgaWYgKCRpbl9iaXNlY3QpOworCWZhaWwgImZhaWxlZCAtIGdvdCBhIGJ1ZyByZXBvcnQiIGFuZCByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoISRib290ZWQpIHsKKwlyZXR1cm4gMCBpZiAoJGluX2Jpc2VjdCk7CisJZmFpbCAiZmFpbGVkIC0gbmV2ZXIgZ290IGEgYm9vdCBwcm9tcHQuIiBhbmQgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKK3N1YiBpbnN0YWxsIHsKKworICAgIHJ1bl9zY3AgIiRvdXRwdXRkaXIvJGJ1aWxkX3RhcmdldCIsICIkdGFyZ2V0X2ltYWdlIiBvcgorCWRvZGllICJmYWlsZWQgdG8gY29weSBpbWFnZSI7CisKKyAgICBteSAkaW5zdGFsbF9tb2RzID0gMDsKKworICAgICMgc2hvdWxkIHdlIHByb2Nlc3MgbW9kdWxlcz8KKyAgICAkaW5zdGFsbF9tb2RzID0gMDsKKyAgICBvcGVuKElOLCAiJG91dHB1dF9jb25maWciKSBvciBkb2RpZSgiQ2FuJ3QgcmVhZCBjb25maWcgZmlsZSIpOworICAgIHdoaWxlICg8SU4+KSB7CisJaWYgKC9DT05GSUdfTU9EVUxFUyg9eSk/LykgeworCSAgICAkaW5zdGFsbF9tb2RzID0gMSBpZiAoZGVmaW5lZCgkMSkpOworCSAgICBsYXN0OworCX0KKyAgICB9CisgICAgY2xvc2UoSU4pOworCisgICAgaWYgKCEkaW5zdGFsbF9tb2RzKSB7CisJZG9wcmludCAiTm8gbW9kdWxlcyBuZWVkZWRcbiI7CisJcmV0dXJuOworICAgIH0KKworICAgIHJ1bl9jb21tYW5kICIkbWFrZSBJTlNUQUxMX01PRF9QQVRIPSR0bXBkaXIgbW9kdWxlc19pbnN0YWxsIiBvcgorCWRvZGllICJGYWlsZWQgdG8gaW5zdGFsbCBtb2R1bGVzIjsKKworICAgIG15ICRtb2RsaWIgPSAiL2xpYi9tb2R1bGVzLyR2ZXJzaW9uIjsKKyAgICBteSAkbW9kdGFyID0gImt0ZXN0LW1vZHMudGFyLmJ6MiI7CisKKyAgICBydW5fc3NoICJybSAtcmYgJG1vZGxpYiIgb3IKKwlkb2RpZSAiZmFpbGVkIHRvIHJlbW92ZSBvbGQgbW9kczogJG1vZGxpYiI7CisKKyAgICAjIHdvdWxkIGJlIG5pY2UgaWYgc2NwIC1yIGRpZCBub3QgZm9sbG93IHN5bWJvbGljIGxpbmtzCisgICAgcnVuX2NvbW1hbmQgImNkICR0bXBkaXIgJiYgdGFyIC1jamYgJG1vZHRhciBsaWIvbW9kdWxlcy8kdmVyc2lvbiIgb3IKKwlkb2RpZSAibWFraW5nIHRhcmJhbGwiOworCisgICAgcnVuX3NjcCAiJHRtcGRpci8kbW9kdGFyIiwgIi90bXAiIG9yCisJZG9kaWUgImZhaWxlZCB0byBjb3B5IG1vZHVsZXMiOworCisgICAgdW5saW5rICIkdG1wZGlyLyRtb2R0YXIiOworCisgICAgcnVuX3NzaCAiJyhjZCAvICYmIHRhciB4ZiAvdG1wLyRtb2R0YXIpJyIgb3IKKwlkb2RpZSAiZmFpbGVkIHRvIHRhciBtb2R1bGVzIjsKKworICAgIHJ1bl9zc2ggInJtIC1mIC90bXAvJG1vZHRhciI7CisKKyAgICByZXR1cm4gaWYgKCFkZWZpbmVkKCRwb3N0X2luc3RhbGwpKTsKKworICAgIG15ICRjcF9wb3N0X2luc3RhbGwgPSAkcG9zdF9pbnN0YWxsOworICAgICRjcF9wb3N0X2luc3RhbGwgPSBzL1wkS0VSTkVMX1ZFUlNJT04vJHZlcnNpb24vZzsKKyAgICBydW5fY29tbWFuZCAiJGNwX3Bvc3RfaW5zdGFsbCIgb3IKKwlkb2RpZSAiRmFpbGVkIHRvIHJ1biBwb3N0IGluc3RhbGwiOworfQorCitzdWIgY2hlY2tfYnVpbGRsb2cgeworICAgIG15ICgkcGF0Y2gpID0gQF87CisKKyAgICBteSBAZmlsZXMgPSBgZ2l0IHNob3cgJHBhdGNoIHwgZGlmZnN0YXQgLWxgOworCisgICAgb3BlbihJTiwgImdpdCBzaG93ICRwYXRjaCB8Iikgb3IKKwlkb2RpZSAiZmFpbGVkIHRvIHNob3cgJHBhdGNoIjsKKyAgICB3aGlsZSAoPElOPikgeworCWlmIChtLF4tLS0gYS8oLiopLCkgeworCSAgICBjaG9tcCAkMTsKKwkgICAgJGZpbGVzWyQjZmlsZXNdID0gJDE7CisJfQorICAgIH0KKyAgICBjbG9zZShJTik7CisKKyAgICBvcGVuKElOLCAkYnVpbGRsb2cpIG9yIGRvZGllICJDYW4ndCBvcGVuICRidWlsZGxvZyI7CisgICAgd2hpbGUgKDxJTj4pIHsKKwlpZiAoL15ccyooLio/KTouKih3YXJuaW5nfGVycm9yKS8pIHsKKwkgICAgbXkgJGVyciA9ICQxOworCSAgICBmb3JlYWNoIG15ICRmaWxlIChAZmlsZXMpIHsKKwkJbXkgJGZ1bGxwYXRoID0gIiRidWlsZGRpci8kZmlsZSI7CisJCWlmICgkZmlsZSBlcSAkZXJyIHx8ICRmdWxscGF0aCBlcSAkZXJyKSB7CisJCSAgICBmYWlsICIkZmlsZSBidWlsdCB3aXRoIHdhcm5pbmdzIiBhbmQgcmV0dXJuIDA7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgY2xvc2UoSU4pOworCisgICAgcmV0dXJuIDE7Cit9CisKK3N1YiBidWlsZCB7CisgICAgbXkgKCR0eXBlKSA9IEBfOworICAgIG15ICRkZWZjb25maWcgPSAiIjsKKworICAgIHVubGluayAkYnVpbGRsb2c7CisKKyAgICBpZiAoJHR5cGUgPX4gL151c2Vjb25maWc6KC4qKS8pIHsKKwlydW5fY29tbWFuZCAiY3AgJDEgJG91dHB1dF9jb25maWciIG9yCisJICAgIGRvZGllICJjb3VsZCBub3QgY29weSAkMSB0byAuY29uZmlnIjsKKworCSR0eXBlID0gIm9sZGNvbmZpZyI7CisgICAgfQorCisgICAgIyBvbGQgY29uZmlnIGNhbiBhc2sgcXVlc3Rpb25zCisgICAgaWYgKCR0eXBlIGVxICJvbGRjb25maWciKSB7CisJJHR5cGUgPSAib2xkbm9jb25maWciOworCisJIyBhbGxvdyBmb3IgZW1wdHkgY29uZmlncworCXJ1bl9jb21tYW5kICJ0b3VjaCAkb3V0cHV0X2NvbmZpZyI7CisKKwlydW5fY29tbWFuZCAibXYgJG91dHB1dF9jb25maWcgJG91dHB1dGRpci9jb25maWdfdGVtcCIgb3IKKwkgICAgZG9kaWUgIm1vdmluZyAuY29uZmlnIjsKKworCWlmICghJG5vY2xlYW4gJiYgIXJ1bl9jb21tYW5kICIkbWFrZSBtcnByb3BlciIpIHsKKwkgICAgZG9kaWUgIm1ha2UgbXJwcm9wZXIiOworCX0KKworCXJ1bl9jb21tYW5kICJtdiAkb3V0cHV0ZGlyL2NvbmZpZ190ZW1wICRvdXRwdXRfY29uZmlnIiBvcgorCSAgICBkb2RpZSAibW92aW5nIGNvbmZpZ190ZW1wIjsKKworICAgIH0gZWxzaWYgKCEkbm9jbGVhbikgeworCXVubGluayAiJG91dHB1dF9jb25maWciOworCXJ1bl9jb21tYW5kICIkbWFrZSBtcnByb3BlciIgb3IKKwkgICAgZG9kaWUgIm1ha2UgbXJwcm9wZXIiOworICAgIH0KKworICAgICMgYWRkIHNvbWV0aGluZyB0byBkaXN0aW5ndWlzaCB0aGlzIGJ1aWxkCisgICAgb3BlbihPVVQsICI+ICRvdXRwdXRkaXIvbG9jYWx2ZXJzaW9uIikgb3IgZG9kaWUoIkNhbid0IG1ha2UgbG9jYWx2ZXJzaW9uIGZpbGUiKTsKKyAgICBwcmludCBPVVQgIiRsb2NhbHZlcnNpb25cbiI7CisgICAgY2xvc2UoT1VUKTsKKworICAgIGlmIChkZWZpbmVkKCRtaW5jb25maWcpKSB7CisJJGRlZmNvbmZpZyA9ICJLQ09ORklHX0FMTENPTkZJRz0kbWluY29uZmlnIjsKKyAgICB9CisKKyAgICBydW5fY29tbWFuZCAiJGRlZmNvbmZpZyAkbWFrZSAkdHlwZSIgb3IKKwlkb2RpZSAiZmFpbGVkIG1ha2UgY29uZmlnIjsKKworICAgICRyZWRpcmVjdCA9ICIkYnVpbGRsb2ciOworICAgIGlmICghcnVuX2NvbW1hbmQgIiRtYWtlICRidWlsZF9vcHRpb25zIikgeworCXVuZGVmICRyZWRpcmVjdDsKKwkjIGJpc2VjdCBtYXkgbmVlZCB0aGlzIHRvIHBhc3MKKwlyZXR1cm4gMCBpZiAoJGluX2Jpc2VjdCk7CisJZmFpbCAiZmFpbGVkIGJ1aWxkIiBhbmQgcmV0dXJuIDA7CisgICAgfQorICAgIHVuZGVmICRyZWRpcmVjdDsKKworICAgIHJldHVybiAxOworfQorCitzdWIgaGFsdCB7CisgICAgaWYgKCFydW5fc3NoICJoYWx0IiBvciBkZWZpbmVkKCRwb3dlcl9vZmYpKSB7CisJaWYgKGRlZmluZWQoJHBvd2Vyb2ZmX2FmdGVyX2hhbHQpKSB7CisJICAgIHNsZWVwICRwb3dlcm9mZl9hZnRlcl9oYWx0OworCSAgICBydW5fY29tbWFuZCAiJHBvd2VyX29mZiI7CisJfQorICAgIH0gZWxzZSB7CisJIyBub3BlPyB0aGUgemFwIGl0IQorCXJ1bl9jb21tYW5kICIkcG93ZXJfb2ZmIjsKKyAgICB9Cit9CisKK3N1YiBzdWNjZXNzIHsKKyAgICBteSAoJGkpID0gQF87CisKKyAgICAkc3VjY2Vzc2VzKys7CisKKyAgICBkb3ByaW50ICJcblxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsKKyAgICBkb3ByaW50ICAgICAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsKKyAgICBkb3ByaW50ICAgICAiS1RFU1QgUkVTVUxUOiBURVNUICRpIFNVQ0NFU1MhISEhICAgICAgICAgKipcbiI7CisgICAgZG9wcmludCAgICAgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7CisgICAgZG9wcmludCAgICAgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7CisKKyAgICBpZiAoJGkgIT0gJG9wdHsiTlVNX1RFU1RTIn0gJiYgIWRvX25vdF9yZWJvb3QpIHsKKwlkb3ByaW50ICJSZWJvb3QgYW5kIHdhaXQgJHNsZWVwX3RpbWUgc2Vjb25kc1xuIjsKKwlyZWJvb3Q7CisJc3RhcnRfbW9uaXRvcjsKKwl3YWl0X2Zvcl9tb25pdG9yICRzbGVlcF90aW1lOworCWVuZF9tb25pdG9yOworICAgIH0KK30KKworc3ViIGdldF92ZXJzaW9uIHsKKyAgICAjIGdldCB0aGUgcmVsZWFzZSBuYW1lCisgICAgZG9wcmludCAiJG1ha2Uga2VybmVscmVsZWFzZSAuLi4gIjsKKyAgICAkdmVyc2lvbiA9IGAkbWFrZSBrZXJuZWxyZWxlYXNlIHwgdGFpbCAtMWA7CisgICAgY2hvbXAoJHZlcnNpb24pOworICAgIGRvcHJpbnQgIiR2ZXJzaW9uXG4iOworfQorCitzdWIgY2hpbGRfcnVuX3Rlc3QgeworICAgIG15ICRmYWlsZWQgPSAwOworCisgICAgIyBjaGlsZCBzaG91bGQgaGF2ZSBubyBwb3dlcgorICAgICRyZWJvb3Rfb25fZXJyb3IgPSAwOworICAgICRwb3dlcm9mZl9vbl9lcnJvciA9IDA7CisgICAgJGRpZV9vbl9mYWlsdXJlID0gMTsKKworICAgIHJ1bl9jb21tYW5kICRydW5fdGVzdCBvciAkZmFpbGVkID0gMTsKKyAgICBleGl0ICRmYWlsZWQ7Cit9CisKK215ICRjaGlsZF9kb25lOworCitzdWIgY2hpbGRfZmluaXNoZWQgeworICAgICRjaGlsZF9kb25lID0gMTsKK30KKworc3ViIGRvX3J1bl90ZXN0IHsKKyAgICBteSAkY2hpbGRfcGlkOworICAgIG15ICRjaGlsZF9leGl0OworICAgIG15ICRsaW5lOworICAgIG15ICRmdWxsX2xpbmU7CisgICAgbXkgJGJ1ZyA9IDA7CisKKyAgICB3YWl0X2Zvcl9tb25pdG9yIDE7CisKKyAgICBkb3ByaW50ICJydW4gdGVzdCAkcnVuX3Rlc3RcbiI7CisKKyAgICAkY2hpbGRfZG9uZSA9IDA7CisKKyAgICAkU0lHe0NITER9ID0gcXcoY2hpbGRfZmluaXNoZWQpOworCisgICAgJGNoaWxkX3BpZCA9IGZvcms7CisKKyAgICBjaGlsZF9ydW5fdGVzdCBpZiAoISRjaGlsZF9waWQpOworCisgICAgJGZ1bGxfbGluZSA9ICIiOworCisgICAgZG8geworCSRsaW5lID0gd2FpdF9mb3JfaW5wdXQoJG1vbml0b3JfZnAsIDEpOworCWlmIChkZWZpbmVkKCRsaW5lKSkgeworCisJICAgICMgd2UgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGdldCBhIGZ1bGwgbGluZQorCSAgICAkZnVsbF9saW5lIC49ICRsaW5lOworCisJICAgIGlmICgkZnVsbF9saW5lID1+IC9jYWxsIHRyYWNlOi9pKSB7CisJCSRidWcgPSAxOworCSAgICB9CisKKwkgICAgaWYgKCRmdWxsX2xpbmUgPX4gL0tlcm5lbCBwYW5pYyAtLykgeworCQkkYnVnID0gMTsKKwkgICAgfQorCisJICAgIGlmICgkbGluZSA9fiAvXG4vKSB7CisJCSRmdWxsX2xpbmUgPSAiIjsKKwkgICAgfQorCX0KKyAgICB9IHdoaWxlICghJGNoaWxkX2RvbmUgJiYgISRidWcpOworCisgICAgaWYgKCRidWcpIHsKKwlkb3ByaW50ICJEZXRlY3RlZCBrZXJuZWwgY3Jhc2ghXG4iOworCSMga2lsbCB0aGUgY2hpbGQgd2l0aCBleHRyZW1lIHByZWp1ZGljZQorCWtpbGwgOSwgJGNoaWxkX3BpZDsKKyAgICB9CisKKyAgICB3YWl0cGlkICRjaGlsZF9waWQsIDA7CisgICAgJGNoaWxkX2V4aXQgPSAkPzsKKworICAgIGlmICgkYnVnIHx8ICRjaGlsZF9leGl0KSB7CisJcmV0dXJuIDAgaWYgJGluX2Jpc2VjdDsKKwlmYWlsICJ0ZXN0IGZhaWxlZCIgYW5kIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworc3ViIHJ1bl9naXRfYmlzZWN0IHsKKyAgICBteSAoJGNvbW1hbmQpID0gQF87CisKKyAgICBkb3ByaW50ICIkY29tbWFuZCAuLi4gIjsKKworICAgIG15ICRvdXRwdXQgPSBgJGNvbW1hbmQgMj4mMWA7CisgICAgbXkgJHJldCA9ICQ/OworCisgICAgbG9naXQgJG91dHB1dDsKKworICAgIGlmICgkcmV0KSB7CisJZG9wcmludCAiRkFJTEVEXG4iOworCWRvZGllICJGYWlsZWQgdG8gZ2l0IGJpc2VjdCI7CisgICAgfQorCisgICAgZG9wcmludCAiU1VDQ0VTU1xuIjsKKyAgICBpZiAoJG91dHB1dCA9fiBtL14oQmlzZWN0aW5nOiAuKlwocm91Z2hseSBcZCsgc3RlcHM/XCkpXHMrXFsoW1s6eGRpZ2l0Ol1dKylcXS8pIHsKKwlkb3ByaW50ICIkMSBbJDJdXG4iOworICAgIH0gZWxzaWYgKCRvdXRwdXQgPX4gbS9eKFtbOnhkaWdpdDpdXSspIGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0LykgeworCSRiaXNlY3RfYmFkID0gJDE7CisJZG9wcmludCAiRm91bmQgYmFkIGNvbW1pdC4uLiAkMVxuIjsKKwlyZXR1cm4gMDsKKyAgICB9IGVsc2UgeworCSMgd2UgYWxyZWFkeSBsb2dnZWQgaXQsIGp1c3QgcHJpbnQgaXQgbm93LgorCXByaW50ICRvdXRwdXQ7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKKyMgcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZQorc3ViIHJ1bl9iaXNlY3RfdGVzdCB7CisgICAgbXkgKCR0eXBlLCAkYnVpbGR0eXBlKSA9IEBfOworCisgICAgbXkgJGZhaWxlZCA9IDA7CisgICAgbXkgJHJlc3VsdDsKKyAgICBteSAkb3V0cHV0OworICAgIG15ICRyZXQ7CisKKyAgICAkaW5fYmlzZWN0ID0gMTsKKworICAgIGJ1aWxkICRidWlsZHR5cGUgb3IgJGZhaWxlZCA9IDE7CisKKyAgICBpZiAoJHR5cGUgbmUgImJ1aWxkIikgeworCWRvZGllICJGYWlsZWQgb24gYnVpbGQiIGlmICRmYWlsZWQ7CisKKwkjIE5vdyBib290IHRoZSBib3gKKwlnZXRfZ3J1Yl9pbmRleDsKKwlnZXRfdmVyc2lvbjsKKwlpbnN0YWxsOworCisJc3RhcnRfbW9uaXRvcjsKKwltb25pdG9yIG9yICRmYWlsZWQgPSAxOworCisJaWYgKCR0eXBlIG5lICJib290IikgeworCSAgICBkb2RpZSAiRmFpbGVkIG9uIGJvb3QiIGlmICRmYWlsZWQ7CisKKwkgICAgZG9fcnVuX3Rlc3Qgb3IgJGZhaWxlZCA9IDE7CisJfQorCWVuZF9tb25pdG9yOworICAgIH0KKworICAgIGlmICgkZmFpbGVkKSB7CisJJHJlc3VsdCA9IDA7CisKKwkjIHJlYm9vdCB0aGUgYm94IHRvIGEgZ29vZCBrZXJuZWwKKwlpZiAoJHR5cGUgbmUgImJ1aWxkIikgeworCSAgICBkb3ByaW50ICJSZWJvb3QgYW5kIHNsZWVwICRiaXNlY3Rfc2xlZXBfdGltZSBzZWNvbmRzXG4iOworCSAgICByZWJvb3Q7CisJICAgIHN0YXJ0X21vbml0b3I7CisJICAgIHdhaXRfZm9yX21vbml0b3IgJGJpc2VjdF9zbGVlcF90aW1lOworCSAgICBlbmRfbW9uaXRvcjsKKwl9CisgICAgfSBlbHNlIHsKKwkkcmVzdWx0ID0gMTsKKyAgICB9CisgICAgJGluX2Jpc2VjdCA9IDA7CisKKyAgICByZXR1cm4gJHJlc3VsdDsKK30KKworc3ViIHJ1bl9iaXNlY3QgeworICAgIG15ICgkdHlwZSkgPSBAXzsKKyAgICBteSAkYnVpbGR0eXBlID0gIm9sZGNvbmZpZyI7CisKKyAgICAjIFdlIHNob3VsZCBoYXZlIGEgbWluY29uZmlnIHRvIHVzZT8KKyAgICBpZiAoZGVmaW5lZCgkbWluY29uZmlnKSkgeworCSRidWlsZHR5cGUgPSAidXNlY29uZmlnOiRtaW5jb25maWciOworICAgIH0KKworICAgIG15ICRyZXQgPSBydW5fYmlzZWN0X3Rlc3QgJHR5cGUsICRidWlsZHR5cGU7CisKKworICAgICMgQXJlIHdlIGxvb2tpbmcgZm9yIHdoZXJlIGl0IHdvcmtlZCwgbm90IGZhaWxlZD8KKyAgICBpZiAoJHJldmVyc2VfYmlzZWN0KSB7CisJJHJldCA9ICEkcmV0OworICAgIH0KKworICAgIGlmICgkcmV0KSB7CisJcmV0dXJuICJnb29kIjsKKyAgICB9IGVsc2UgeworCXJldHVybiAgImJhZCI7CisgICAgfQorfQorCitzdWIgYmlzZWN0IHsKKyAgICBteSAoJGkpID0gQF87CisKKyAgICBteSAkcmVzdWx0OworCisgICAgZGllICJCSVNFQ1RfR09PRFskaV0gbm90IGRlZmluZWRcbiIJaWYgKCFkZWZpbmVkKCRvcHR7IkJJU0VDVF9HT09EWyRpXSJ9KSk7CisgICAgZGllICJCSVNFQ1RfQkFEWyRpXSBub3QgZGVmaW5lZFxuIglpZiAoIWRlZmluZWQoJG9wdHsiQklTRUNUX0JBRFskaV0ifSkpOworICAgIGRpZSAiQklTRUNUX1RZUEVbJGldIG5vdCBkZWZpbmVkXG4iCWlmICghZGVmaW5lZCgkb3B0eyJCSVNFQ1RfVFlQRVskaV0ifSkpOworCisgICAgbXkgJGdvb2QgPSAkb3B0eyJCSVNFQ1RfR09PRFskaV0ifTsKKyAgICBteSAkYmFkID0gJG9wdHsiQklTRUNUX0JBRFskaV0ifTsKKyAgICBteSAkdHlwZSA9ICRvcHR7IkJJU0VDVF9UWVBFWyRpXSJ9OworICAgIG15ICRzdGFydCA9ICRvcHR7IkJJU0VDVF9TVEFSVFskaV0ifTsKKyAgICBteSAkcmVwbGF5ID0gJG9wdHsiQklTRUNUX1JFUExBWVskaV0ifTsKKworICAgICMgY29udmVydCB0byB0cnVlIHNoYTEncworICAgICRnb29kID0gZ2V0X3NoYTEoJGdvb2QpOworICAgICRiYWQgPSBnZXRfc2hhMSgkYmFkKTsKKworICAgIGlmIChkZWZpbmVkKCRvcHR7IkJJU0VDVF9SRVZFUlNFWyRpXSJ9KSAmJgorCSRvcHR7IkJJU0VDVF9SRVZFUlNFWyRpXSJ9ID09IDEpIHsKKwlkb3ByaW50ICJQZXJmb3JtaW5nIGEgcmV2ZXJzZSBiaXNlY3QgKGJhZCBpcyBnb29kLCBnb29kIGlzIGJhZCEpXG4iOworCSRyZXZlcnNlX2Jpc2VjdCA9IDE7CisgICAgfSBlbHNlIHsKKwkkcmV2ZXJzZV9iaXNlY3QgPSAwOworICAgIH0KKworICAgICMgQ2FuJ3QgaGF2ZSBhIHRlc3Qgd2l0aG91dCBoYXZpbmcgYSB0ZXN0IHRvIHJ1bgorICAgIGlmICgkdHlwZSBlcSAidGVzdCIgJiYgIWRlZmluZWQoJHJ1bl90ZXN0KSkgeworCSR0eXBlID0gImJvb3QiOworICAgIH0KKworICAgIG15ICRjaGVjayA9ICRvcHR7IkJJU0VDVF9DSEVDS1skaV0ifTsKKyAgICBpZiAoZGVmaW5lZCgkY2hlY2spICYmICRjaGVjayBuZSAiMCIpIHsKKworCSMgZ2V0IGN1cnJlbnQgSEVBRAorCW15ICRoZWFkID0gZ2V0X3NoYTEoIkhFQUQiKTsKKworCWlmICgkY2hlY2sgbmUgImdvb2QiKSB7CisJICAgIGRvcHJpbnQgIlRFU1RJTkcgQklTRUNUIEJBRCBbJGJhZF1cbiI7CisJICAgIHJ1bl9jb21tYW5kICJnaXQgY2hlY2tvdXQgJGJhZCIgb3IKKwkJZGllICJGYWlsZWQgdG8gY2hlY2tvdXQgJGJhZCI7CisKKwkgICAgJHJlc3VsdCA9IHJ1bl9iaXNlY3QgJHR5cGU7CisKKwkgICAgaWYgKCRyZXN1bHQgbmUgImJhZCIpIHsKKwkJZmFpbCAiVGVzdGVkIEJJU0VDVF9CQUQgWyRiYWRdIGFuZCBpdCBzdWNjZWVkZWQiIGFuZCByZXR1cm4gMDsKKwkgICAgfQorCX0KKworCWlmICgkY2hlY2sgbmUgImJhZCIpIHsKKwkgICAgZG9wcmludCAiVEVTVElORyBCSVNFQ1QgR09PRCBbJGdvb2RdXG4iOworCSAgICBydW5fY29tbWFuZCAiZ2l0IGNoZWNrb3V0ICRnb29kIiBvcgorCQlkaWUgIkZhaWxlZCB0byBjaGVja291dCAkZ29vZCI7CisKKwkgICAgJHJlc3VsdCA9IHJ1bl9iaXNlY3QgJHR5cGU7CisKKwkgICAgaWYgKCRyZXN1bHQgbmUgImdvb2QiKSB7CisJCWZhaWwgIlRlc3RlZCBCSVNFQ1RfR09PRCBbJGdvb2RdIGFuZCBpdCBmYWlsZWQiIGFuZCByZXR1cm4gMDsKKwkgICAgfQorCX0KKworCSMgY2hlY2tvdXQgd2hlcmUgd2Ugc3RhcnRlZAorCXJ1bl9jb21tYW5kICJnaXQgY2hlY2tvdXQgJGhlYWQiIG9yCisJICAgIGRpZSAiRmFpbGVkIHRvIGNoZWNrb3V0ICRoZWFkIjsKKyAgICB9CisKKyAgICBydW5fY29tbWFuZCAiZ2l0IGJpc2VjdCBzdGFydCIgb3IKKwlkb2RpZSAiY291bGQgbm90IHN0YXJ0IGJpc2VjdCI7CisKKyAgICBydW5fY29tbWFuZCAiZ2l0IGJpc2VjdCBnb29kICRnb29kIiBvcgorCWRvZGllICJjb3VsZCBub3Qgc2V0IGJpc2VjdCBnb29kIHRvICRnb29kIjsKKworICAgIHJ1bl9naXRfYmlzZWN0ICJnaXQgYmlzZWN0IGJhZCAkYmFkIiBvcgorCWRvZGllICJjb3VsZCBub3Qgc2V0IGJpc2VjdCBiYWQgdG8gJGJhZCI7CisKKyAgICBpZiAoZGVmaW5lZCgkcmVwbGF5KSkgeworCXJ1bl9jb21tYW5kICJnaXQgYmlzZWN0IHJlcGxheSAkcmVwbGF5IiBvcgorCSAgICBkb2RpZSAiZmFpbGVkIHRvIHJ1biByZXBsYXkiOworICAgIH0KKworICAgIGlmIChkZWZpbmVkKCRzdGFydCkpIHsKKwlydW5fY29tbWFuZCAiZ2l0IGNoZWNrb3V0ICRzdGFydCIgb3IKKwkgICAgZG9kaWUgImZhaWxlZCB0byBjaGVja291dCAkc3RhcnQiOworICAgIH0KKworICAgIG15ICR0ZXN0OworICAgIGRvIHsKKwkkcmVzdWx0ID0gcnVuX2Jpc2VjdCAkdHlwZTsKKwkkdGVzdCA9IHJ1bl9naXRfYmlzZWN0ICJnaXQgYmlzZWN0ICRyZXN1bHQiOworICAgIH0gd2hpbGUgKCR0ZXN0KTsKKworICAgIHJ1bl9jb21tYW5kICJnaXQgYmlzZWN0IGxvZyIgb3IKKwlkb2RpZSAiY291bGQgbm90IGNhcHR1cmUgZ2l0IGJpc2VjdCBsb2ciOworCisgICAgcnVuX2NvbW1hbmQgImdpdCBiaXNlY3QgcmVzZXQiIG9yCisJZG9kaWUgImNvdWxkIG5vdCByZXNldCBnaXQgYmlzZWN0IjsKKworICAgIGRvcHJpbnQgIkJhZCBjb21taXQgd2FzIFskYmlzZWN0X2JhZF1cbiI7CisKKyAgICBzdWNjZXNzICRpOworfQorCitteSAlY29uZmlnX2lnbm9yZTsKK215ICVjb25maWdfc2V0OworCitteSAlY29uZmlnX2xpc3Q7CitteSAlbnVsbF9jb25maWc7CisKK215ICVkZXBlbmRlbmN5OworCitzdWIgcHJvY2Vzc19jb25maWdfaWdub3JlIHsKKyAgICBteSAoJGNvbmZpZykgPSBAXzsKKworICAgIG9wZW4gKElOLCAkY29uZmlnKQorCW9yIGRvZGllICJGYWlsZWQgdG8gcmVhZCAkY29uZmlnIjsKKworICAgIHdoaWxlICg8SU4+KSB7CisJaWYgKC9eKC4qPyhDT05GSUdcUyopKD0uKnwgaXMgbm90IHNldCkpLykgeworCSAgICAkY29uZmlnX2lnbm9yZXskMn0gPSAkMTsKKwl9CisgICAgfQorCisgICAgY2xvc2UoSU4pOworfQorCitzdWIgcmVhZF9jdXJyZW50X2NvbmZpZyB7CisgICAgbXkgKCRjb25maWdfcmVmKSA9IEBfOworCisgICAgJXskY29uZmlnX3JlZn0gPSAoKTsKKyAgICB1bmRlZiAleyRjb25maWdfcmVmfTsKKworICAgIG15IEBrZXkgPSBrZXlzICV7JGNvbmZpZ19yZWZ9OworICAgIGlmICgkI2tleSA+PSAwKSB7CisJcHJpbnQgImRpZCBub3QgZGVsZXRlIVxuIjsKKwlleGl0OworICAgIH0KKyAgICBvcGVuIChJTiwgIiRvdXRwdXRfY29uZmlnIik7CisKKyAgICB3aGlsZSAoPElOPikgeworCWlmICgvXihDT05GSUdcUyspPSguKikvKSB7CisJICAgICR7JGNvbmZpZ19yZWZ9eyQxfSA9ICQyOworCX0KKyAgICB9CisgICAgY2xvc2UoSU4pOworfQorCitzdWIgZ2V0X2RlcGVuZGVuY2llcyB7CisgICAgbXkgKCRjb25maWcpID0gQF87CisKKyAgICBteSAkYXJyID0gJGRlcGVuZGVuY3l7JGNvbmZpZ307CisgICAgaWYgKCFkZWZpbmVkKCRhcnIpKSB7CisJcmV0dXJuICgpOworICAgIH0KKworICAgIG15IEBkZXBzID0gQHskYXJyfTsKKworICAgIGZvcmVhY2ggbXkgJGRlcCAoQHskYXJyfSkgeworCXByaW50ICJBREQgREVQICRkZXBcbiI7CisJQGRlcHMgPSAoQGRlcHMsIGdldF9kZXBlbmRlbmNpZXMgJGRlcCk7CisgICAgfQorCisgICAgcmV0dXJuIEBkZXBzOworfQorCitzdWIgY3JlYXRlX2NvbmZpZyB7CisgICAgbXkgQGNvbmZpZ3MgPSBAXzsKKworICAgIG9wZW4oT1VULCAiPiRvdXRwdXRfY29uZmlnIikgb3IgZG9kaWUgIkNhbiBub3Qgd3JpdGUgdG8gJG91dHB1dF9jb25maWciOworCisgICAgZm9yZWFjaCBteSAkY29uZmlnIChAY29uZmlncykgeworCXByaW50IE9VVCAiJGNvbmZpZ19zZXR7JGNvbmZpZ31cbiI7CisJbXkgQGRlcHMgPSBnZXRfZGVwZW5kZW5jaWVzICRjb25maWc7CisJZm9yZWFjaCBteSAkZGVwIChAZGVwcykgeworCSAgICBwcmludCBPVVQgIiRjb25maWdfc2V0eyRkZXB9XG4iOworCX0KKyAgICB9CisKKyAgICBmb3JlYWNoIG15ICRjb25maWcgKGtleXMgJWNvbmZpZ19pZ25vcmUpIHsKKwlwcmludCBPVVQgIiRjb25maWdfaWdub3JleyRjb25maWd9XG4iOworICAgIH0KKyAgICBjbG9zZShPVVQpOworCisjICAgIGV4aXQ7CisgICAgcnVuX2NvbW1hbmQgIiRtYWtlIG9sZG5vY29uZmlnIiBvcgorCWRvZGllICJmYWlsZWQgbWFrZSBjb25maWcgb2xkY29uZmlnIjsKKworfQorCitzdWIgY29tcGFyZV9jb25maWdzIHsKKyAgICBteSAoJWEsICViKSA9IEBfOworCisgICAgZm9yZWFjaCBteSAkaXRlbSAoa2V5cyAlYSkgeworCWlmICghZGVmaW5lZCgkYnskaXRlbX0pKSB7CisJICAgIHByaW50ICJkaWZmICRpdGVtXG4iOworCSAgICByZXR1cm4gMTsKKwl9CisJZGVsZXRlICRieyRpdGVtfTsKKyAgICB9CisKKyAgICBteSBAa2V5cyA9IGtleXMgJWI7CisgICAgaWYgKCQja2V5cykgeworCXByaW50ICJkaWZmMiAka2V5c1swXVxuIjsKKyAgICB9CisgICAgcmV0dXJuIC0xIGlmICgkI2tleXMgPj0gMCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3ViIHJ1bl9jb25maWdfYmlzZWN0X3Rlc3QgeworICAgIG15ICgkdHlwZSkgPSBAXzsKKworICAgIHJldHVybiBydW5fYmlzZWN0X3Rlc3QgJHR5cGUsICJvbGRjb25maWciOworfQorCitzdWIgcHJvY2Vzc19wYXNzZWQgeworICAgIG15ICglY29uZmlncykgPSBAXzsKKworICAgIGRvcHJpbnQgIlRoZXNlIGNvbmZpZ3MgaGFkIG5vIGZhaWx1cmU6IChFbmFibGluZyB0aGVtIGZvciBmdXJ0aGVyIGNvbXBpbGVzKVxuIjsKKyAgICAjIFBhc3NlZCEgQWxsIHRoZXNlIGNvbmZpZ3MgYXJlIHBhcnQgb2YgYSBnb29kIGNvbXBpbGUuCisgICAgIyBBZGQgdGhlbSB0byB0aGUgbWluIG9wdGlvbnMuCisgICAgZm9yZWFjaCBteSAkY29uZmlnIChrZXlzICVjb25maWdzKSB7CisJaWYgKGRlZmluZWQoJGNvbmZpZ19saXN0eyRjb25maWd9KSkgeworCSAgICBkb3ByaW50ICIgcmVtb3ZpbmcgJGNvbmZpZ1xuIjsKKwkgICAgJGNvbmZpZ19pZ25vcmV7JGNvbmZpZ30gPSAkY29uZmlnX2xpc3R7JGNvbmZpZ307CisJICAgIGRlbGV0ZSAkY29uZmlnX2xpc3R7JGNvbmZpZ307CisJfQorICAgIH0KKyAgICBkb3ByaW50ICJjb25maWcgY29waWVkIHRvICRvdXRwdXRkaXIvY29uZmlnX2dvb2RcbiI7CisgICAgcnVuX2NvbW1hbmQgImNwIC1mICRvdXRwdXRfY29uZmlnICRvdXRwdXRkaXIvY29uZmlnX2dvb2QiOworfQorCitzdWIgcHJvY2Vzc19mYWlsZWQgeworICAgIG15ICgkY29uZmlnKSA9IEBfOworCisgICAgZG9wcmludCAiXG5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsKKyAgICBkb3ByaW50ICJGb3VuZCBiYWQgY29uZmlnOiAkY29uZmlnXG4iOworICAgIGRvcHJpbnQgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4iOworfQorCitzdWIgcnVuX2NvbmZpZ19iaXNlY3QgeworCisgICAgbXkgQHN0YXJ0X2xpc3QgPSBrZXlzICVjb25maWdfbGlzdDsKKworICAgIGlmICgkI3N0YXJ0X2xpc3QgPCAwKSB7CisJZG9wcmludCAiTm8gbW9yZSBjb25maWdzIHRvIHRlc3QhISFcbiI7CisJcmV0dXJuIC0xOworICAgIH0KKworICAgIGRvcHJpbnQgIioqKioqIFJVTiBURVNUICoqKlxuIjsKKyAgICBteSAkdHlwZSA9ICRvcHR7IkNPTkZJR19CSVNFQ1RfVFlQRVskaXRlcmF0aW9uXSJ9OworICAgIG15ICRyZXQ7CisgICAgbXkgJWN1cnJlbnRfY29uZmlnOworCisgICAgbXkgJGNvdW50ID0gJCNzdGFydF9saXN0ICsgMTsKKyAgICBkb3ByaW50ICIgICRjb3VudCBjb25maWdzIHRvIHRlc3RcbiI7CisKKyAgICBteSAkaGFsZiA9IGludCgkI3N0YXJ0X2xpc3QgLyAyKTsKKworICAgIGRvIHsKKwlteSBAdG9waGFsZiA9IEBzdGFydF9saXN0WzAgLi4gJGhhbGZdOworCisJY3JlYXRlX2NvbmZpZyBAdG9waGFsZjsKKwlyZWFkX2N1cnJlbnRfY29uZmlnIFwlY3VycmVudF9jb25maWc7CisKKwkkY291bnQgPSAkI3RvcGhhbGYgKyAxOworCWRvcHJpbnQgIlRlc3RpbmcgJGNvdW50IGNvbmZpZ3NcbiI7CisJbXkgJGZvdW5kID0gMDsKKwkjIG1ha2Ugc3VyZSB3ZSB0ZXN0IHNvbWV0aGluZworCWZvcmVhY2ggbXkgJGNvbmZpZyAoQHRvcGhhbGYpIHsKKwkgICAgaWYgKGRlZmluZWQoJGN1cnJlbnRfY29uZmlneyRjb25maWd9KSkgeworCQlsb2dpdCAiICRjb25maWdcbiI7CisJCSRmb3VuZCA9IDE7CisJICAgIH0KKwl9CisJaWYgKCEkZm91bmQpIHsKKwkgICAgIyB0cnkgdGhlIG90aGVyIGhhbGYKKwkgICAgZG9wcmludCAiVG9wIGhhbGYgcHJvZHVjZWQgbm8gc2V0IGNvbmZpZ3MsIHRyeWluZyBib3R0b20gaGFsZlxuIjsKKwkgICAgQHRvcGhhbGYgPSBAc3RhcnRfbGlzdFskaGFsZiAuLiAkI3N0YXJ0X2xpc3RdOworCSAgICBjcmVhdGVfY29uZmlnIEB0b3BoYWxmOworCSAgICByZWFkX2N1cnJlbnRfY29uZmlnIFwlY3VycmVudF9jb25maWc7CisJICAgIGZvcmVhY2ggbXkgJGNvbmZpZyAoQHRvcGhhbGYpIHsKKwkJaWYgKGRlZmluZWQoJGN1cnJlbnRfY29uZmlneyRjb25maWd9KSkgeworCQkgICAgbG9naXQgIiAkY29uZmlnXG4iOworCQkgICAgJGZvdW5kID0gMTsKKwkJfQorCSAgICB9CisJICAgIGlmICghJGZvdW5kKSB7CisJCWRvcHJpbnQgIkZhaWxlZDogQ2FuJ3QgbWFrZSBuZXcgY29uZmlnIHdpdGggY3VycmVudCBjb25maWdzXG4iOworCQlmb3JlYWNoIG15ICRjb25maWcgKEBzdGFydF9saXN0KSB7CisJCSAgICBkb3ByaW50ICIgIENPTkZJRzogJGNvbmZpZ1xuIjsKKwkJfQorCQlyZXR1cm4gLTE7CisJICAgIH0KKwkgICAgJGNvdW50ID0gJCN0b3BoYWxmICsgMTsKKwkgICAgZG9wcmludCAiVGVzdGluZyAkY291bnQgY29uZmlnc1xuIjsKKwl9CisKKwkkcmV0ID0gcnVuX2NvbmZpZ19iaXNlY3RfdGVzdCAkdHlwZTsKKworCWlmICgkcmV0KSB7CisJICAgIHByb2Nlc3NfcGFzc2VkICVjdXJyZW50X2NvbmZpZzsKKwkgICAgcmV0dXJuIDA7CisJfQorCisJZG9wcmludCAiVGhpcyBjb25maWcgaGFkIGEgZmFpbHVyZS5cbiI7CisJZG9wcmludCAiUmVtb3ZpbmcgdGhlc2UgY29uZmlncyB0aGF0IHdlcmUgbm90IHNldCBpbiB0aGlzIGNvbmZpZzpcbiI7CisJZG9wcmludCAiY29uZmlnIGNvcGllZCB0byAkb3V0cHV0ZGlyL2NvbmZpZ19iYWRcbiI7CisJcnVuX2NvbW1hbmQgImNwIC1mICRvdXRwdXRfY29uZmlnICRvdXRwdXRkaXIvY29uZmlnX2JhZCI7CisKKwkjIEEgY29uZmlnIGV4aXN0cyBpbiB0aGlzIGdyb3VwIHRoYXQgd2FzIGJhZC4KKwlmb3JlYWNoIG15ICRjb25maWcgKGtleXMgJWNvbmZpZ19saXN0KSB7CisJICAgIGlmICghZGVmaW5lZCgkY3VycmVudF9jb25maWd7JGNvbmZpZ30pKSB7CisJCWRvcHJpbnQgIiByZW1vdmluZyAkY29uZmlnXG4iOworCQlkZWxldGUgJGNvbmZpZ19saXN0eyRjb25maWd9OworCSAgICB9CisJfQorCisJQHN0YXJ0X2xpc3QgPSBAdG9waGFsZjsKKworCWlmICgkI3N0YXJ0X2xpc3QgPT0gMCkgeworCSAgICBwcm9jZXNzX2ZhaWxlZCAkc3RhcnRfbGlzdFswXTsKKwkgICAgcmV0dXJuIDE7CisJfQorCisJIyByZW1vdmUgaGFsZiB0aGUgY29uZmlncyB3ZSBhcmUgbG9va2luZyBhdCBhbmQgc2VlIGlmCisJIyB0aGV5IGFyZSBnb29kLgorCSRoYWxmID0gaW50KCQjc3RhcnRfbGlzdCAvIDIpOworICAgIH0gd2hpbGUgKCRoYWxmID4gMCk7CisKKyAgICAjIHdlIGZvdW5kIGEgc2luZ2xlIGNvbmZpZywgdHJ5IGl0IGFnYWluCisgICAgbXkgQHRvcGhhbGYgPSBAc3RhcnRfbGlzdFswIC4uIDBdOworCisgICAgJHJldCA9IHJ1bl9jb25maWdfYmlzZWN0X3Rlc3QgJHR5cGU7CisgICAgaWYgKCRyZXQpIHsKKwlwcm9jZXNzX3Bhc3NlZCAlY3VycmVudF9jb25maWc7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgcHJvY2Vzc19mYWlsZWQgJHN0YXJ0X2xpc3RbMF07CisgICAgcmV0dXJuIDE7Cit9CisKK3N1YiBjb25maWdfYmlzZWN0IHsKKyAgICBteSAoJGkpID0gQF87CisKKyAgICBteSAkc3RhcnRfY29uZmlnID0gJG9wdHsiQ09ORklHX0JJU0VDVFskaV0ifTsKKworICAgIG15ICR0bXBjb25maWcgPSAiJHRtcGRpci91c2VfY29uZmlnIjsKKworICAgICMgTWFrZSB0aGUgZmlsZSB3aXRoIHRoZSBiYWQgY29uZmlnIGFuZCB0aGUgbWluIGNvbmZpZworICAgIGlmIChkZWZpbmVkKCRtaW5jb25maWcpKSB7CisJIyByZWFkIHRoZSBtaW4gY29uZmlnIGZvciB0aGluZ3MgdG8gaWdub3JlCisJcnVuX2NvbW1hbmQgImNwICRtaW5jb25maWcgJHRtcGNvbmZpZyIgb3IKKwkgICAgZG9kaWUgImZhaWxlZCB0byBjb3B5ICRtaW5jb25maWcgdG8gJHRtcGNvbmZpZyI7CisgICAgfSBlbHNlIHsKKwl1bmxpbmsgJHRtcGNvbmZpZzsKKyAgICB9CisKKyAgICAjIEFkZCBvdGhlciBjb25maWdzCisgICAgaWYgKGRlZmluZWQoJGFkZGNvbmZpZykpIHsKKwlydW5fY29tbWFuZCAiY2F0ICRhZGRjb25maWcgPj4gJHRtcGNvbmZpZyIgb3IKKwkgICAgZG9kaWUgImZhaWxlZCB0byBhcHBlbmQgJGFkZGNvbmZpZyI7CisgICAgfQorCisgICAgbXkgJGRlZmNvbmZpZyA9ICIiOworICAgIGlmICgtZiAkdG1wY29uZmlnKSB7CisJJGRlZmNvbmZpZyA9ICJLQ09ORklHX0FMTENPTkZJRz0kdG1wY29uZmlnIjsKKwlwcm9jZXNzX2NvbmZpZ19pZ25vcmUgJHRtcGNvbmZpZzsKKyAgICB9CisKKyAgICAjIG5vdyBwcm9jZXNzIHRoZSBzdGFydCBjb25maWcKKyAgICBydW5fY29tbWFuZCAiY3AgJHN0YXJ0X2NvbmZpZyAkb3V0cHV0X2NvbmZpZyIgb3IKKwlkb2RpZSAiZmFpbGVkIHRvIGNvcHkgJHN0YXJ0X2NvbmZpZyB0byAkb3V0cHV0X2NvbmZpZyI7CisKKyAgICAjIHJlYWQgZGlyZWN0bHkgd2hhdCB3ZSB3YW50IHRvIGNoZWNrCisgICAgbXkgJWNvbmZpZ19jaGVjazsKKyAgICBvcGVuIChJTiwgJG91dHB1dF9jb25maWcpCisJb3IgZG9kaWUgImZhaWVkIHRvIG9wZW4gJG91dHB1dF9jb25maWciOworCisgICAgd2hpbGUgKDxJTj4pIHsKKwlpZiAoL14oKENPTkZJR1xTKik9LiopLykgeworCSAgICAkY29uZmlnX2NoZWNreyQyfSA9ICQxOworCX0KKyAgICB9CisgICAgY2xvc2UoSU4pOworCisgICAgIyBOb3cgcnVuIG9sZGNvbmZpZyB3aXRoIHRoZSBtaW5jb25maWcgKGFuZCBhZGRjb25maWdzKQorICAgIHJ1bl9jb21tYW5kICIkZGVmY29uZmlnICRtYWtlIG9sZG5vY29uZmlnIiBvcgorCWRvZGllICJmYWlsZWQgbWFrZSBjb25maWcgb2xkY29uZmlnIjsKKworICAgICMgY2hlY2sgdG8gc2VlIHdoYXQgd2UgbG9zdCAob3IgZ2FpbmVkKQorICAgIG9wZW4gKElOLCAkb3V0cHV0X2NvbmZpZykKKwlvciBkb2RpZSAiRmFpbGVkIHRvIHJlYWQgJHN0YXJ0X2NvbmZpZyI7CisKKyAgICBteSAlcmVtb3ZlZF9jb25maWdzOworICAgIG15ICVhZGRlZF9jb25maWdzOworCisgICAgd2hpbGUgKDxJTj4pIHsKKwlpZiAoL14oKENPTkZJR1xTKik9LiopLykgeworCSAgICAjIHNhdmUgb2ZmIGFsbCBvcHRpb25zCisJICAgICRjb25maWdfc2V0eyQyfSA9ICQxOworCSAgICBpZiAoZGVmaW5lZCgkY29uZmlnX2NoZWNreyQyfSkpIHsKKwkJaWYgKGRlZmluZWQoJGNvbmZpZ19pZ25vcmV7JDJ9KSkgeworCQkgICAgJHJlbW92ZWRfY29uZmlnc3skMn0gPSAkMTsKKwkJfSBlbHNlIHsKKwkJICAgICRjb25maWdfbGlzdHskMn0gPSAkMTsKKwkJfQorCSAgICB9IGVsc2lmICghZGVmaW5lZCgkY29uZmlnX2lnbm9yZXskMn0pKSB7CisJCSRhZGRlZF9jb25maWdzeyQyfSA9ICQxOworCQkkY29uZmlnX2xpc3R7JDJ9ID0gJDE7CisJICAgIH0KKwl9CisgICAgfQorICAgIGNsb3NlKElOKTsKKworICAgIG15IEBjb25mcyA9IGtleXMgJXJlbW92ZWRfY29uZmlnczsKKyAgICBpZiAoJCNjb25mcyA+PSAwKSB7CisJZG9wcmludCAiQ29uZmlncyBvdmVycmlkZGVuIGJ5IGRlZmF1bHQgY29uZmlncyBhbmQgcmVtb3ZlZCBmcm9tIGNoZWNrOlxuIjsKKwlmb3JlYWNoIG15ICRjb25maWcgKEBjb25mcykgeworCSAgICBkb3ByaW50ICIgJGNvbmZpZ1xuIjsKKwl9CisgICAgfQorICAgIEBjb25mcyA9IGtleXMgJWFkZGVkX2NvbmZpZ3M7CisgICAgaWYgKCQjY29uZnMgPj0gMCkgeworCWRvcHJpbnQgIkNvbmZpZ3MgYXBwZWFyaW5nIGluIG1ha2Ugb2xkY29uZmlnIGFuZCBhZGRlZDpcbiI7CisJZm9yZWFjaCBteSAkY29uZmlnIChAY29uZnMpIHsKKwkgICAgZG9wcmludCAiICRjb25maWdcbiI7CisJfQorICAgIH0KKworICAgIG15ICVjb25maWdfdGVzdDsKKyAgICBteSAkb25jZSA9IDA7CisKKyAgICAjIFNvbWV0aW1lcyBrY29uZmlnIGRvZXMgd2VpcmQgdGhpbmdzLiBXZSBtdXN0IG1ha2Ugc3VyZQorICAgICMgdGhhdCB0aGUgY29uZmlnIHdlIGF1dG9jcmVhdGUgaGFzIGV2ZXJ5dGhpbmcgd2UgbmVlZAorICAgICMgdG8gdGVzdCwgb3RoZXJ3aXNlIHdlIG1heSBtaXNzIHRlc3RpbmcgY29uZmlncywgb3IKKyAgICAjIG1heSBub3QgYmUgYWJsZSB0byBjcmVhdGUgYSBuZXcgY29uZmlnLgorICAgICMgSGVyZSB3ZSBjcmVhdGUgYSBjb25maWcgd2l0aCBldmVyeXRoaW5nIHNldC4KKyAgICBjcmVhdGVfY29uZmlnIChrZXlzICVjb25maWdfbGlzdCk7CisgICAgcmVhZF9jdXJyZW50X2NvbmZpZyBcJWNvbmZpZ190ZXN0OworICAgIGZvcmVhY2ggbXkgJGNvbmZpZyAoa2V5cyAlY29uZmlnX2xpc3QpIHsKKwlpZiAoIWRlZmluZWQoJGNvbmZpZ190ZXN0eyRjb25maWd9KSkgeworCSAgICBpZiAoISRvbmNlKSB7CisJCSRvbmNlID0gMTsKKwkJZG9wcmludCAiQ29uZmlncyBub3QgcHJvZHVjZWQgYnkga2NvbmZpZyAod2lsbCBub3QgYmUgY2hlY2tlZCk6XG4iOworCSAgICB9CisJICAgIGRvcHJpbnQgIiAgJGNvbmZpZ1xuIjsKKwkgICAgZGVsZXRlICRjb25maWdfbGlzdHskY29uZmlnfTsKKwl9CisgICAgfQorICAgIG15ICRyZXQ7CisgICAgZG8geworCSRyZXQgPSBydW5fY29uZmlnX2Jpc2VjdDsKKyAgICB9IHdoaWxlICghJHJldCk7CisKKyAgICByZXR1cm4gJHJldCBpZiAoJHJldCA8IDApOworCisgICAgc3VjY2VzcyAkaTsKK30KKworc3ViIHBhdGNoY2hlY2sgeworICAgIG15ICgkaSkgPSBAXzsKKworICAgIGRpZSAiUEFUQ0hDSEVDS19TVEFSVFskaV0gbm90IGRlZmluZWRcbiIKKwlpZiAoIWRlZmluZWQoJG9wdHsiUEFUQ0hDSEVDS19TVEFSVFskaV0ifSkpOworICAgIGRpZSAiUEFUQ0hDSEVDS19UWVBFWyRpXSBub3QgZGVmaW5lZFxuIgorCWlmICghZGVmaW5lZCgkb3B0eyJQQVRDSENIRUNLX1RZUEVbJGldIn0pKTsKKworICAgIG15ICRzdGFydCA9ICRvcHR7IlBBVENIQ0hFQ0tfU1RBUlRbJGldIn07CisKKyAgICBteSAkZW5kID0gIkhFQUQiOworICAgIGlmIChkZWZpbmVkKCRvcHR7IlBBVENIQ0hFQ0tfRU5EWyRpXSJ9KSkgeworCSRlbmQgPSAkb3B0eyJQQVRDSENIRUNLX0VORFskaV0ifTsKKyAgICB9CisKKyAgICAjIEdldCB0aGUgdHJ1ZSBzaGExJ3Mgc2luY2Ugd2UgY2FuIHVzZSB0aGluZ3MgbGlrZSBIRUFEfjMKKyAgICAkc3RhcnQgPSBnZXRfc2hhMSgkc3RhcnQpOworICAgICRlbmQgPSBnZXRfc2hhMSgkZW5kKTsKKworICAgIG15ICR0eXBlID0gJG9wdHsiUEFUQ0hDSEVDS19UWVBFWyRpXSJ9OworCisgICAgIyBDYW4ndCBoYXZlIGEgdGVzdCB3aXRob3V0IGhhdmluZyBhIHRlc3QgdG8gcnVuCisgICAgaWYgKCR0eXBlIGVxICJ0ZXN0IiAmJiAhZGVmaW5lZCgkcnVuX3Rlc3QpKSB7CisJJHR5cGUgPSAiYm9vdCI7CisgICAgfQorCisgICAgb3BlbiAoSU4sICJnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgJGVuZHwiKSBvcgorCWRvZGllICJjb3VsZCBub3QgZ2V0IGdpdCBsaXN0IjsKKworICAgIG15IEBsaXN0OworCisgICAgd2hpbGUgKDxJTj4pIHsKKwljaG9tcDsKKwkkbGlzdFskI2xpc3QrMV0gPSAkXzsKKwlsYXN0IGlmICgvXiRzdGFydC8pOworICAgIH0KKyAgICBjbG9zZShJTik7CisKKyAgICBpZiAoJGxpc3RbJCNsaXN0XSAhfiAvXiRzdGFydC8pIHsKKwlmYWlsICJTSEExICRzdGFydCBub3QgZm91bmQiOworICAgIH0KKworICAgICMgZ28gYmFja3dhcmRzIGluIHRoZSBsaXN0CisgICAgQGxpc3QgPSByZXZlcnNlIEBsaXN0OworCisgICAgbXkgJHNhdmVfY2xlYW4gPSAkbm9jbGVhbjsKKworICAgICRpbl9wYXRjaGNoZWNrID0gMTsKKyAgICBmb3JlYWNoIG15ICRpdGVtIChAbGlzdCkgeworCW15ICRzaGExID0gJGl0ZW07CisJJHNoYTEgPX4gcy9eKFtbOnhkaWdpdDpdXSspLiovJDEvOworCisJZG9wcmludCAiXG5Qcm9jZXNzaW5nIGNvbW1pdCAkaXRlbVxuXG4iOworCisJcnVuX2NvbW1hbmQgImdpdCBjaGVja291dCAkc2hhMSIgb3IKKwkgICAgZGllICJGYWlsZWQgdG8gY2hlY2tvdXQgJHNoYTEiOworCisJIyBvbmx5IGNsZWFuIG9uIHRoZSBmaXJzdCBhbmQgbGFzdCBwYXRjaAorCWlmICgkaXRlbSBlcSAkbGlzdFswXSB8fAorCSAgICAkaXRlbSBlcSAkbGlzdFskI2xpc3RdKSB7CisJICAgICRub2NsZWFuID0gJHNhdmVfY2xlYW47CisJfSBlbHNlIHsKKwkgICAgJG5vY2xlYW4gPSAxOworCX0KKworCWlmIChkZWZpbmVkKCRtaW5jb25maWcpKSB7CisJICAgIGJ1aWxkICJ1c2Vjb25maWc6JG1pbmNvbmZpZyIgb3IgcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkgICAgIyA/PyBubyBjb25maWcgdG8gdXNlPworCSAgICBidWlsZCAib2xkY29uZmlnIiBvciByZXR1cm4gMDsKKwl9CisKKwljaGVja19idWlsZGxvZyAkc2hhMSBvciByZXR1cm4gMDsKKworCW5leHQgaWYgKCR0eXBlIGVxICJidWlsZCIpOworCisJZ2V0X2dydWJfaW5kZXg7CisJZ2V0X3ZlcnNpb247CisJaW5zdGFsbDsKKworCW15ICRmYWlsZWQgPSAwOworCisJc3RhcnRfbW9uaXRvcjsKKwltb25pdG9yIG9yICRmYWlsZWQgPSAxOworCisJaWYgKCEkZmFpbGVkICYmICR0eXBlIG5lICJib290Iil7CisJICAgIGRvX3J1bl90ZXN0IG9yICRmYWlsZWQgPSAxOworCX0KKwllbmRfbW9uaXRvcjsKKwlyZXR1cm4gMCBpZiAoJGZhaWxlZCk7CisKKyAgICB9CisgICAgJGluX3BhdGNoY2hlY2sgPSAwOworICAgIHN1Y2Nlc3MgJGk7CisKKyAgICByZXR1cm4gMTsKK30KKworJCNBUkdWIDwgMSBvciBkaWUgImt0ZXN0LnBsIHZlcnNpb246ICRWRVJTSU9OXG4gICB1c2FnZToga3Rlc3QucGwgY29uZmlnLWZpbGVcbiI7CisKK2lmICgkI0FSR1YgPT0gMCkgeworICAgICRrdGVzdF9jb25maWcgPSAkQVJHVlswXTsKKyAgICBpZiAoISAtZiAka3Rlc3RfY29uZmlnKSB7CisJcHJpbnQgIiRrdGVzdF9jb25maWcgZG9lcyBub3QgZXhpc3QuXG4iOworCW15ICRhbnM7CisgICAgICAgIGZvciAoOzspIHsKKwkgICAgcHJpbnQgIkNyZWF0ZSBpdD8gW1kvbl0gIjsKKwkgICAgJGFucyA9IDxTVERJTj47CisJICAgIGNob21wICRhbnM7CisJICAgIGlmICgkYW5zID1+IC9eXHMqJC8pIHsKKwkJJGFucyA9ICJ5IjsKKwkgICAgfQorCSAgICBsYXN0IGlmICgkYW5zID1+IC9eeSQvaSB8fCAkYW5zID1+IC9ebiQvaSk7CisJICAgIHByaW50ICJQbGVhc2UgYW5zd2VyIGVpdGhlciAneScgb3IgJ24nLlxuIjsKKwl9CisJaWYgKCRhbnMgIX4gL155JC9pKSB7CisJICAgIGV4aXQgMDsKKwl9CisgICAgfQorfSBlbHNlIHsKKyAgICAka3Rlc3RfY29uZmlnID0gImt0ZXN0LmNvbmYiOworfQorCitpZiAoISAtZiAka3Rlc3RfY29uZmlnKSB7CisgICAgb3BlbihPVVQsICI+JGt0ZXN0X2NvbmZpZyIpIG9yIGRpZSAiQ2FuIG5vdCBjcmVhdGUgJGt0ZXN0X2NvbmZpZyI7CisgICAgcHJpbnQgT1VUIDw8ICJFT0YiCisjIEdlbmVyYXRlZCBieSBrdGVzdC5wbAorIworIyBEZWZpbmUgZWFjaCB0ZXN0IHdpdGggVEVTVF9TVEFSVAorIyBUaGUgY29uZmlnIG9wdGlvbnMgYmVsb3cgaXQgd2lsbCBvdmVycmlkZSB0aGUgZGVmYXVsdHMKK1RFU1RfU1RBUlQKKworREVGQVVMVFMKK0VPRgorOworICAgIGNsb3NlKE9VVCk7Cit9CityZWFkX2NvbmZpZyAka3Rlc3RfY29uZmlnOworCisjIEFwcGVuZCBhbnkgY29uZmlncyBlbnRlcmVkIGluIG1hbnVhbGx5IHRvIHRoZSBjb25maWcgZmlsZS4KK215IEBuZXdfY29uZmlncyA9IGtleXMgJWVudGVyZWRfY29uZmlnczsKK2lmICgkI25ld19jb25maWdzID49IDApIHsKKyAgICBwcmludCAiXG5BcHBlbmRpbmcgZW50ZXJlZCBpbiBjb25maWdzIHRvICRrdGVzdF9jb25maWdcbiI7CisgICAgb3BlbihPVVQsICI+PiRrdGVzdF9jb25maWciKSBvciBkaWUgIkNhbiBub3QgYXBwZW5kIHRvICRrdGVzdF9jb25maWciOworICAgIGZvcmVhY2ggbXkgJGNvbmZpZyAoQG5ld19jb25maWdzKSB7CisJcHJpbnQgT1VUICIkY29uZmlnID0gJGVudGVyZWRfY29uZmlnc3skY29uZmlnfVxuIjsKKwkkb3B0eyRjb25maWd9ID0gJGVudGVyZWRfY29uZmlnc3skY29uZmlnfTsKKyAgICB9Cit9CisKK2lmICgkb3B0eyJDTEVBUl9MT0cifSAmJiBkZWZpbmVkKCRvcHR7IkxPR19GSUxFIn0pKSB7CisgICAgdW5saW5rICRvcHR7IkxPR19GSUxFIn07Cit9CisKK2RvcHJpbnQgIlxuXG5TVEFSVElORyBBVVRPTUFURUQgVEVTVFNcblxuIjsKKworZm9yIChteSAkaSA9IDAsIG15ICRyZXBlYXQgPSAxOyAkaSA8PSAkb3B0eyJOVU1fVEVTVFMifTsgJGkgKz0gJHJlcGVhdCkgeworCisgICAgaWYgKCEkaSkgeworCWRvcHJpbnQgIkRFRkFVTFQgT1BUSU9OUzpcbiI7CisgICAgfSBlbHNlIHsKKwlkb3ByaW50ICJcblRFU1QgJGkgT1BUSU9OUyI7CisJaWYgKGRlZmluZWQoJHJlcGVhdF90ZXN0c3skaX0pKSB7CisJICAgICRyZXBlYXQgPSAkcmVwZWF0X3Rlc3RzeyRpfTsKKwkgICAgZG9wcmludCAiIElURVJBVEUgJHJlcGVhdCI7CisJfQorCWRvcHJpbnQgIlxuIjsKKyAgICB9CisKKyAgICBmb3JlYWNoIG15ICRvcHRpb24gKHNvcnQga2V5cyAlb3B0KSB7CisKKwlpZiAoJG9wdGlvbiA9fiAvXFsoXGQrKVxdJC8pIHsKKwkgICAgbmV4dCBpZiAoJGkgIT0gJDEpOworCX0gZWxzZSB7CisJICAgIG5leHQgaWYgKCRpKTsKKwl9CisKKwlkb3ByaW50ICIkb3B0aW9uID0gJG9wdHskb3B0aW9ufVxuIjsKKyAgICB9Cit9CisKK3N1YiBzZXRfdGVzdF9vcHRpb24geworICAgIG15ICgkbmFtZSwgJGkpID0gQF87CisKKyAgICBteSAkb3B0aW9uID0gIiRuYW1lXFskaVxdIjsKKworICAgIGlmIChkZWZpbmVkKCRvcHR7JG9wdGlvbn0pKSB7CisJcmV0dXJuICRvcHR7JG9wdGlvbn07CisgICAgfQorCisgICAgZm9yZWFjaCBteSAkdGVzdCAoa2V5cyAlcmVwZWF0X3Rlc3RzKSB7CisJaWYgKCRpID49ICR0ZXN0ICYmCisJICAgICRpIDwgJHRlc3QgKyAkcmVwZWF0X3Rlc3RzeyR0ZXN0fSkgeworCSAgICAkb3B0aW9uID0gIiRuYW1lXFskdGVzdFxdIjsKKwkgICAgaWYgKGRlZmluZWQoJG9wdHskb3B0aW9ufSkpIHsKKwkJcmV0dXJuICRvcHR7JG9wdGlvbn07CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYgKGRlZmluZWQoJG9wdHskbmFtZX0pKSB7CisJcmV0dXJuICRvcHR7JG5hbWV9OworICAgIH0KKworICAgIHJldHVybiB1bmRlZjsKK30KKworIyBGaXJzdCB3ZSBuZWVkIHRvIGRvIGlzIHRoZSBidWlsZHMKK2ZvciAobXkgJGkgPSAxOyAkaSA8PSAkb3B0eyJOVU1fVEVTVFMifTsgJGkrKykgeworCisgICAgJGl0ZXJhdGlvbiA9ICRpOworCisgICAgbXkgJG1ha2VjbWQgPSBzZXRfdGVzdF9vcHRpb24oIk1BS0VfQ01EIiwgJGkpOworCisgICAgJG1hY2hpbmUgPSBzZXRfdGVzdF9vcHRpb24oIk1BQ0hJTkUiLCAkaSk7CisgICAgJHNzaF91c2VyID0gc2V0X3Rlc3Rfb3B0aW9uKCJTU0hfVVNFUiIsICRpKTsKKyAgICAkdG1wZGlyID0gc2V0X3Rlc3Rfb3B0aW9uKCJUTVBfRElSIiwgJGkpOworICAgICRvdXRwdXRkaXIgPSBzZXRfdGVzdF9vcHRpb24oIk9VVFBVVF9ESVIiLCAkaSk7CisgICAgJGJ1aWxkZGlyID0gc2V0X3Rlc3Rfb3B0aW9uKCJCVUlMRF9ESVIiLCAkaSk7CisgICAgJHRlc3RfdHlwZSA9IHNldF90ZXN0X29wdGlvbigiVEVTVF9UWVBFIiwgJGkpOworICAgICRidWlsZF90eXBlID0gc2V0X3Rlc3Rfb3B0aW9uKCJCVUlMRF9UWVBFIiwgJGkpOworICAgICRidWlsZF9vcHRpb25zID0gc2V0X3Rlc3Rfb3B0aW9uKCJCVUlMRF9PUFRJT05TIiwgJGkpOworICAgICRwb3dlcl9jeWNsZSA9IHNldF90ZXN0X29wdGlvbigiUE9XRVJfQ1lDTEUiLCAkaSk7CisgICAgJHJlYm9vdCA9IHNldF90ZXN0X29wdGlvbigiUkVCT09UIiwgJGkpOworICAgICRub2NsZWFuID0gc2V0X3Rlc3Rfb3B0aW9uKCJCVUlMRF9OT0NMRUFOIiwgJGkpOworICAgICRtaW5jb25maWcgPSBzZXRfdGVzdF9vcHRpb24oIk1JTl9DT05GSUciLCAkaSk7CisgICAgJHJ1bl90ZXN0ID0gc2V0X3Rlc3Rfb3B0aW9uKCJURVNUIiwgJGkpOworICAgICRhZGRjb25maWcgPSBzZXRfdGVzdF9vcHRpb24oIkFERF9DT05GSUciLCAkaSk7CisgICAgJHJlYm9vdF90eXBlID0gc2V0X3Rlc3Rfb3B0aW9uKCJSRUJPT1RfVFlQRSIsICRpKTsKKyAgICAkZ3J1Yl9tZW51ID0gc2V0X3Rlc3Rfb3B0aW9uKCJHUlVCX01FTlUiLCAkaSk7CisgICAgJHBvc3RfaW5zdGFsbCA9IHNldF90ZXN0X29wdGlvbigiUE9TVF9JTlNUQUxMIiwgJGkpOworICAgICRyZWJvb3Rfc2NyaXB0ID0gc2V0X3Rlc3Rfb3B0aW9uKCJSRUJPT1RfU0NSSVBUIiwgJGkpOworICAgICRyZWJvb3Rfb25fZXJyb3IgPSBzZXRfdGVzdF9vcHRpb24oIlJFQk9PVF9PTl9FUlJPUiIsICRpKTsKKyAgICAkcG93ZXJvZmZfb25fZXJyb3IgPSBzZXRfdGVzdF9vcHRpb24oIlBPV0VST0ZGX09OX0VSUk9SIiwgJGkpOworICAgICRkaWVfb25fZmFpbHVyZSA9IHNldF90ZXN0X29wdGlvbigiRElFX09OX0ZBSUxVUkUiLCAkaSk7CisgICAgJHBvd2VyX29mZiA9IHNldF90ZXN0X29wdGlvbigiUE9XRVJfT0ZGIiwgJGkpOworICAgICRwb3dlcmN5Y2xlX2FmdGVyX3JlYm9vdCA9IHNldF90ZXN0X29wdGlvbigiUE9XRVJDWUNMRV9BRlRFUl9SRUJPT1QiLCAkaSk7CisgICAgJHBvd2Vyb2ZmX2FmdGVyX2hhbHQgPSBzZXRfdGVzdF9vcHRpb24oIlBPV0VST0ZGX0FGVEVSX0hBTFQiLCAkaSk7CisgICAgJHNsZWVwX3RpbWUgPSBzZXRfdGVzdF9vcHRpb24oIlNMRUVQX1RJTUUiLCAkaSk7CisgICAgJGJpc2VjdF9zbGVlcF90aW1lID0gc2V0X3Rlc3Rfb3B0aW9uKCJCSVNFQ1RfU0xFRVBfVElNRSIsICRpKTsKKyAgICAkc3RvcmVfZmFpbHVyZXMgPSBzZXRfdGVzdF9vcHRpb24oIlNUT1JFX0ZBSUxVUkVTIiwgJGkpOworICAgICR0aW1lb3V0ID0gc2V0X3Rlc3Rfb3B0aW9uKCJUSU1FT1VUIiwgJGkpOworICAgICRib290ZWRfdGltZW91dCA9IHNldF90ZXN0X29wdGlvbigiQk9PVEVEX1RJTUVPVVQiLCAkaSk7CisgICAgJGNvbnNvbGUgPSBzZXRfdGVzdF9vcHRpb24oIkNPTlNPTEUiLCAkaSk7CisgICAgJHN1Y2Nlc3NfbGluZSA9IHNldF90ZXN0X29wdGlvbigiU1VDQ0VTU19MSU5FIiwgJGkpOworICAgICRzdG9wX2FmdGVyX3N1Y2Nlc3MgPSBzZXRfdGVzdF9vcHRpb24oIlNUT1BfQUZURVJfU1VDQ0VTUyIsICRpKTsKKyAgICAkc3RvcF9hZnRlcl9mYWlsdXJlID0gc2V0X3Rlc3Rfb3B0aW9uKCJTVE9QX0FGVEVSX0ZBSUxVUkUiLCAkaSk7CisgICAgJGJ1aWxkX3RhcmdldCA9IHNldF90ZXN0X29wdGlvbigiQlVJTERfVEFSR0VUIiwgJGkpOworICAgICRzc2hfZXhlYyA9IHNldF90ZXN0X29wdGlvbigiU1NIX0VYRUMiLCAkaSk7CisgICAgJHNjcF90b190YXJnZXQgPSBzZXRfdGVzdF9vcHRpb24oIlNDUF9UT19UQVJHRVQiLCAkaSk7CisgICAgJHRhcmdldF9pbWFnZSA9IHNldF90ZXN0X29wdGlvbigiVEFSR0VUX0lNQUdFIiwgJGkpOworICAgICRsb2NhbHZlcnNpb24gPSBzZXRfdGVzdF9vcHRpb24oIkxPQ0FMVkVSU0lPTiIsICRpKTsKKworICAgIGNoZGlyICRidWlsZGRpciB8fCBkaWUgImNhbid0IGNoYW5nZSBkaXJlY3RvcnkgdG8gJGJ1aWxkZGlyIjsKKworICAgIGlmICghLWQgJHRtcGRpcikgeworCW1rcGF0aCgkdG1wZGlyKSBvcgorCSAgICBkaWUgImNhbid0IGNyZWF0ZSAkdG1wZGlyIjsKKyAgICB9CisKKyAgICAkRU5WeyJTU0hfVVNFUiJ9ID0gJHNzaF91c2VyOworICAgICRFTlZ7Ik1BQ0hJTkUifSA9ICRtYWNoaW5lOworCisgICAgJHRhcmdldCA9ICIkc3NoX3VzZXJcQCRtYWNoaW5lIjsKKworICAgICRidWlsZGxvZyA9ICIkdG1wZGlyL2J1aWxkbG9nLSRtYWNoaW5lIjsKKyAgICAkZG1lc2cgPSAiJHRtcGRpci9kbWVzZy0kbWFjaGluZSI7CisgICAgJG1ha2UgPSAiJG1ha2VjbWQgTz0kb3V0cHV0ZGlyIjsKKyAgICAkb3V0cHV0X2NvbmZpZyA9ICIkb3V0cHV0ZGlyLy5jb25maWciOworCisgICAgaWYgKCRyZWJvb3RfdHlwZSBlcSAiZ3J1YiIpIHsKKwlkb2RpZSAiR1JVQl9NRU5VIG5vdCBkZWZpbmVkIiBpZiAoIWRlZmluZWQoJGdydWJfbWVudSkpOworICAgIH0gZWxzaWYgKCFkZWZpbmVkKCRyZWJvb3Rfc2NyaXB0KSkgeworCWRvZGllICJSRUJPT1RfU0NSSVBUIG5vdCBkZWZpbmVkIgorICAgIH0KKworICAgIG15ICRydW5fdHlwZSA9ICRidWlsZF90eXBlOworICAgIGlmICgkdGVzdF90eXBlIGVxICJwYXRjaGNoZWNrIikgeworCSRydW5fdHlwZSA9ICRvcHR7IlBBVENIQ0hFQ0tfVFlQRVskaV0ifTsKKyAgICB9IGVsc2lmICgkdGVzdF90eXBlIGVxICJiaXNlY3QiKSB7CisJJHJ1bl90eXBlID0gJG9wdHsiQklTRUNUX1RZUEVbJGldIn07CisgICAgfSBlbHNpZiAoJHRlc3RfdHlwZSBlcSAiY29uZmlnX2Jpc2VjdCIpIHsKKwkkcnVuX3R5cGUgPSAkb3B0eyJDT05GSUdfQklTRUNUX1RZUEVbJGldIn07CisgICAgfQorCisgICAgIyBtaXN0YWtlIGluIGNvbmZpZyBmaWxlPworICAgIGlmICghZGVmaW5lZCgkcnVuX3R5cGUpKSB7CisJJHJ1bl90eXBlID0gIkVSUk9SIjsKKyAgICB9CisKKyAgICBkb3ByaW50ICJcblxuIjsKKyAgICBkb3ByaW50ICJSVU5OSU5HIFRFU1QgJGkgb2YgJG9wdHtOVU1fVEVTVFN9IHdpdGggb3B0aW9uICR0ZXN0X3R5cGUgJHJ1bl90eXBlXG5cbiI7CisKKyAgICB1bmxpbmsgJGRtZXNnOworICAgIHVubGluayAkYnVpbGRsb2c7CisKKyAgICBpZiAoIWRlZmluZWQoJG1pbmNvbmZpZykpIHsKKwkkbWluY29uZmlnID0gJGFkZGNvbmZpZzsKKworICAgIH0gZWxzaWYgKGRlZmluZWQoJGFkZGNvbmZpZykpIHsKKwlydW5fY29tbWFuZCAiY2F0ICRhZGRjb25maWcgJG1pbmNvbmZpZyA+ICR0bXBkaXIvYWRkX2NvbmZpZyIgb3IKKwkgICAgZG9kaWUgIkZhaWxlZCB0byBjcmVhdGUgdGVtcCBjb25maWciOworCSRtaW5jb25maWcgPSAiJHRtcGRpci9hZGRfY29uZmlnIjsKKyAgICB9CisKKyAgICBteSAkY2hlY2tvdXQgPSAkb3B0eyJDSEVDS09VVFskaV0ifTsKKyAgICBpZiAoZGVmaW5lZCgkY2hlY2tvdXQpKSB7CisJcnVuX2NvbW1hbmQgImdpdCBjaGVja291dCAkY2hlY2tvdXQiIG9yCisJICAgIGRpZSAiZmFpbGVkIHRvIGNoZWNrb3V0ICRjaGVja291dCI7CisgICAgfQorCisgICAgaWYgKCR0ZXN0X3R5cGUgZXEgImJpc2VjdCIpIHsKKwliaXNlY3QgJGk7CisJbmV4dDsKKyAgICB9IGVsc2lmICgkdGVzdF90eXBlIGVxICJjb25maWdfYmlzZWN0IikgeworCWNvbmZpZ19iaXNlY3QgJGk7CisJbmV4dDsKKyAgICB9IGVsc2lmICgkdGVzdF90eXBlIGVxICJwYXRjaGNoZWNrIikgeworCXBhdGNoY2hlY2sgJGk7CisJbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGJ1aWxkX3R5cGUgbmUgIm5vYnVpbGQiKSB7CisJYnVpbGQgJGJ1aWxkX3R5cGUgb3IgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJHRlc3RfdHlwZSBuZSAiYnVpbGQiKSB7CisJZ2V0X2dydWJfaW5kZXg7CisJZ2V0X3ZlcnNpb247CisJaW5zdGFsbDsKKworCW15ICRmYWlsZWQgPSAwOworCXN0YXJ0X21vbml0b3I7CisJbW9uaXRvciBvciAkZmFpbGVkID0gMTs7CisKKwlpZiAoISRmYWlsZWQgJiYgJHRlc3RfdHlwZSBuZSAiYm9vdCIgJiYgZGVmaW5lZCgkcnVuX3Rlc3QpKSB7CisJICAgIGRvX3J1bl90ZXN0IG9yICRmYWlsZWQgPSAxOworCX0KKwllbmRfbW9uaXRvcjsKKwluZXh0IGlmICgkZmFpbGVkKTsKKyAgICB9CisKKyAgICBzdWNjZXNzICRpOworfQorCitpZiAoJG9wdHsiUE9XRVJPRkZfT05fU1VDQ0VTUyJ9KSB7CisgICAgaGFsdDsKK30gZWxzaWYgKCRvcHR7IlJFQk9PVF9PTl9TVUNDRVNTIn0gJiYgIWRvX25vdF9yZWJvb3QpIHsKKyAgICByZWJvb3Q7Cit9CisKK2RvcHJpbnQgIlxuICAgICRzdWNjZXNzZXMgb2YgJG9wdHtOVU1fVEVTVFN9IHRlc3RzIHdlcmUgc3VjY2Vzc2Z1bFxuXG4iOworCitleGl0IDA7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL2t0ZXN0L3NhbXBsZS5jb25mIGIvdG9vbHMvdGVzdGluZy9rdGVzdC9zYW1wbGUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDA4YzU5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdGVzdGluZy9rdGVzdC9zYW1wbGUuY29uZgpAQCAtMCwwICsxLDYyMiBAQAorIworIyBDb25maWcgZmlsZSBmb3Iga3Rlc3QucGwKKyMKKyMgTm90ZSwgYWxsIHBhdGhzIG11c3QgYmUgYWJzb2x1dGUKKyMKKworIyBPcHRpb25zIHNldCBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGFyZSBjb25zaWRlcmVkIHRvIGJlCisjIGRlZmF1bHQgb3B0aW9ucy4gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHRlc3Qgc3BlY2lmaWMKKyMgb3B0aW9ucywgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnM6CisjCisjICBMT0dfRklMRQorIyAgQ0xFQVJfTE9HCisjICBQT1dFUk9GRl9PTl9TVUNDRVNTCisjICBSRUJPT1RfT05fU1VDQ0VTUworIworIyBUZXN0IHNwZWNpZmljIG9wdGlvbnMgYXJlIHNldCBhZnRlciB0aGUgbGFiZWw6CisjCisjIFRFU1RfU1RBUlQKKyMKKyMgVGhlIG9wdGlvbnMgYWZ0ZXIgYSBURVNUX1NUQVJUIGxhYmVsIGFyZSBzcGVjaWZpYyB0byB0aGF0IHRlc3QuCisjIEVhY2ggVEVTVF9TVEFSVCBsYWJlbCB3aWxsIHNldCB1cCBhIG5ldyB0ZXN0LiBJZiB5b3Ugd2FudCB0bworIyBwZXJmb3JtIGEgdGVzdCBtb3JlIHRoYW4gb25jZSwgeW91IGNhbiBhZGQgdGhlIElURVJBVEUgbGFiZWwKKyMgdG8gaXQgZm9sbG93ZWQgYnkgdGhlIG51bWJlciBvZiB0aW1lcyB5b3Ugd2FudCB0aGF0IHRlc3QKKyMgdG8gaXRlcmF0ZS4gSWYgdGhlIElURVJBVEUgaXMgbGVmdCBvZmYsIHRoZSB0ZXN0IHdpbGwgb25seQorIyBiZSBwZXJmb3JtZWQgb25jZS4KKyMKKyMgVEVTVF9TVEFSVCBJVEVSQVRFIDEwCisjCisjIFlvdSBjYW4gc2tpcCBhIHRlc3QgYnkgYWRkaW5nIFNLSVAgKGJlZm9yZSBvciBhZnRlciB0aGUgSVRFUkFURQorIyBhbmQgbnVtYmVyKQorIworIyBURVNUX1NUQVJUIFNLSVAKKyMKKyMgVEVTVF9TVEFSVCBTS0lQIElURVJBVEUgMTAKKyMKKyMgVEVTVF9TVEFSVCBJVEVSQVRFIDEwIFNLSVAKKyMKKyMgVGhlIFNLSVAgbGFiZWwgY2F1c2VzIHRoZSBvcHRpb25zIGFuZCB0aGUgdGVzdCBpdHNlbGYgdG8gYmUgaWdub3JlZC4KKyMgVGhpcyBpcyB1c2VmdWwgdG8gc2V0IHVwIHNldmVyYWwgZGlmZmVyZW50IHRlc3RzIGluIG9uZSBjb25maWcgZmlsZSwgYW5kCisjIG9ubHkgZW5hYmxpbmcgdGhlIG9uZXMgeW91IHdhbnQgdG8gdXNlIGZvciBhIGN1cnJlbnQgdGVzdCBydW4uCisjCisjIFlvdSBjYW4gYWRkIGRlZmF1bHQgb3B0aW9ucyBhbnl3aGVyZSBpbiB0aGUgZmlsZSBhcyB3ZWxsCisjIHdpdGggdGhlIERFRkFVTFRTIHRhZy4gVGhpcyBhbGxvd3MgeW91IHRvIGhhdmUgZGVmYXVsdCBvcHRpb25zCisjIGFmdGVyIHRoZSB0ZXN0IG9wdGlvbnMgdG8ga2VlcCB0aGUgdGVzdCBvcHRpb25zIGF0IHRoZSB0b3AKKyMgb2YgdGhlIGZpbGUuIFlvdSBjYW4gZXZlbiBwbGFjZSB0aGUgREVGQVVMVFMgdGFnIGJldHdlZW4KKyMgdGVzdCBjYXNlcyAoYnV0IG5vdCBpbiB0aGUgbWlkZGxlIG9mIGEgc2luZ2xlIHRlc3QgY2FzZSkKKyMKKyMgVEVTVF9TVEFSVAorIyBNSU5fQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctdGVzdDEKKyMKKyMgREVGQVVMVFMKKyMgTUlOX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLWRlZmF1bHQKKyMKKyMgVEVTVF9TVEFSVCBJVEVSQVRFIDEwCisjCisjIFRoZSBhYm92ZSB3aWxsIHJ1biB0aGUgZmlyc3QgdGVzdCB3aXRoIE1JTl9DT05GSUcgc2V0IHRvCisjIC9ob21lL3Rlc3QvY29uZmlnLXRlc3QtMS4gVGhlbiAxMCB0ZXN0cyB3aWxsIGJlIGV4ZWN1dGVkCisjIHdpdGggTUlOX0NPTkZJRyB3aXRoIC9ob21lL3Rlc3QvY29uZmlnLWRlZmF1bHQuCisjCisjIFlvdSBjYW4gYWxzbyBkaXNhYmxlIGRlZmF1bHRzIHdpdGggdGhlIFNLSVAgb3B0aW9uCisjCisjIERFRkFVTFRTIFNLSVAKKyMgTUlOX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLXVzZS1zb21ldGltZXMKKyMKKyMgREVGQVVMVFMKKyMgTUlOX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLW1vc3QtdGltZXMKKyMKKyMgVGhlIGFib3ZlIHdpbGwgaWdub3JlIHRoZSBmaXJzdCBNSU5fQ09ORklHLiBJZiB5b3Ugd2FudCB0bworIyB1c2UgdGhlIGZpcnN0IE1JTl9DT05GSUcsIHJlbW92ZSB0aGUgU0tJUCBmcm9tIHRoZSBmaXJzdAorIyBERUZBVUxUUyB0YWcgYW5kIGFkZCBpdCB0byB0aGUgc2Vjb25kLiBCZSBjYXJlZnVsLCBvcHRpb25zCisjIG1heSBvbmx5IGJlIGRlY2xhcmVkIG9uY2UgcGVyIHRlc3Qgb3IgZGVmYXVsdC4gSWYgeW91IGhhdmUKKyMgdGhlIHNhbWUgb3B0aW9uIG5hbWUgdW5kZXIgdGhlIHNhbWUgdGVzdCBvciBhcyBkZWZhdWx0CisjIGt0ZXN0IHdpbGwgZmFpbCB0byBleGVjdXRlLCBhbmQgbm8gdGVzdHMgd2lsbCBydW4uCisjCisKKworIyMjIyBNYW5kYXRvcnkgRGVmYXVsdCBPcHRpb25zICMjIyMKKworIyBUaGVzZSBvcHRpb25zIG11c3QgYmUgaW4gdGhlIGRlZmF1bHQgc2VjdGlvbiwgYWx0aG91Z2ggbW9zdAorIyBtYXkgYmUgb3ZlcnJpZGRlbiBieSB0ZXN0IG9wdGlvbnMuCisKKyMgVGhlIG1hY2hpbmUgaG9zdG5hbWUgdGhhdCB5b3Ugd2lsbCB0ZXN0CisjTUFDSElORSA9IHRhcmdldAorCisjIFRoZSBib3ggaXMgZXhwZWN0ZWQgdG8gaGF2ZSBzc2ggb24gbm9ybWFsIGJvb3R1cCwgcHJvdmlkZSB0aGUgdXNlcgorIyAgKG1vc3QgbGlrZWx5IHJvb3QsIHNpbmNlIHlvdSBuZWVkIHByaXZpbGVnZWQgb3BlcmF0aW9ucykKKyNTU0hfVVNFUiA9IHJvb3QKKworIyBUaGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIExpbnV4IHNvdXJjZSBjb2RlCisjQlVJTERfRElSID0gL2hvbWUvdGVzdC9saW51eC5naXQKKworIyBUaGUgZGlyZWN0b3J5IHRoYXQgdGhlIG9iamVjdHMgd2lsbCBiZSBidWlsdAorIyAoY2FuIG5vdCBiZSBzYW1lIGFzIEJVSUxEX0RJUikKKyNPVVRQVVRfRElSID0gL2hvbWUvdGVzdC9idWlsZC90YXJnZXQKKworIyBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbXBpbGVkIGZpbGUgdG8gY29weSB0byB0aGUgdGFyZ2V0CisjIChyZWxhdGl2ZSB0byBPVVRQVVRfRElSKQorI0JVSUxEX1RBUkdFVCA9IGFyY2gveDg2L2Jvb3QvYnpJbWFnZQorCisjIFRoZSBwbGFjZSB0byBwdXQgeW91ciBpbWFnZSBvbiB0aGUgdGVzdCBtYWNoaW5lCisjVEFSR0VUX0lNQUdFID0gL2Jvb3Qvdm1saW51ei10ZXN0CisKKyMgQSBzY3JpcHQgb3IgY29tbWFuZCB0byByZWJvb3QgdGhlIGJveAorIworIyBIZXJlIGlzIGEgZGlnaXRhbCBsb2dnZXJzIHBvd2VyIHN3aXRjaCBleGFtcGxlCisjUE9XRVJfQ1lDTEUgPSB3Z2V0IC0tbm8tcHJveHkgLU8gL2Rldi9udWxsIC1xICAtLWF1dGgtbm8tY2hhbGxlbmdlICdodHRwOi8vYWRtaW46YWRtaW5AcG93ZXIvb3V0bGV0PzU9Q0NMJworIworIyBIZXJlIGlzIGFuIGV4YW1wbGUgdG8gcmVib290IGEgdmlydHVhbCBib3ggb24gdGhlIGN1cnJlbnQgaG9zdAorIyB3aXRoIHRoZSBuYW1lICJHdWVzdCIuCisjUE9XRVJfQ1lDTEUgPSB2aXJzaCBkZXN0cm95IEd1ZXN0OyBzbGVlcCA1OyB2aXJzaCBzdGFydCBHdWVzdAorCisjIFRoZSBzY3JpcHQgb3IgY29tbWFuZCB0aGF0IHJlYWRzIHRoZSBjb25zb2xlCisjCisjICBJZiB5b3UgdXNlIHR0eXdhdGNoIHNlcnZlciwgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyB3b3VsZCB3b3JrLgorI0NPTlNPTEUgPSBuYyAtZCBsb2NhbGhvc3QgMzAwMQorIworIyBGb3IgYSB2aXJ0dWFsIG1hY2hpbmUgd2l0aCBndWVzdCBuYW1lICJHdWVzdCIuCisjQ09OU09MRSA9ICB2aXJzaCBjb25zb2xlIEd1ZXN0CisKKyMgUmVxdWlyZWQgdmVyc2lvbiBlbmRpbmcgdG8gZGlmZmVyZW50aWF0ZSB0aGUgdGVzdAorIyBmcm9tIG90aGVyIGxpbnV4IGJ1aWxkcyBvbiB0aGUgc3lzdGVtLgorI0xPQ0FMVkVSU0lPTiA9IC10ZXN0CisKKyMgVGhlIGdydWIgdGl0bGUgbmFtZSBmb3IgdGhlIHRlc3Qga2VybmVsIHRvIGJvb3QKKyMgKE9ubHkgbWFuZGF0b3J5IGlmIFJFQk9PVF9UWVBFID0gZ3J1YikKKyMKKyMgTm90ZSwga3Rlc3QucGwgd2lsbCBub3QgdXBkYXRlIHRoZSBncnViIG1lbnUubHN0LCB5b3UgbmVlZCB0bworIyBtYW51YWxseSBhZGQgYW4gb3B0aW9uIGZvciB0aGUgdGVzdC4ga3Rlc3QucGwgd2lsbCBzZWFyY2gKKyMgdGhlIGdydWIgbWVudS5sc3QgZm9yIHRoaXMgb3B0aW9uIHRvIGZpbmQgd2hhdCBrZXJuZWwgdG8KKyMgcmVib290IGludG8uCisjCisjIEZvciBleGFtcGxlLCBpZiBpbiB0aGUgL2Jvb3QvZ3J1Yi9tZW51LmxzdCB0aGUgdGVzdCBrZXJuZWwgdGl0bGUgaGFzOgorIyB0aXRsZSBUZXN0IEtlcm5lbAorIyBrZXJuZWwgdm1saW51ei10ZXN0CisjR1JVQl9NRU5VID0gVGVzdCBLZXJuZWwKKworIyBBIHNjcmlwdCB0byByZWJvb3QgdGhlIHRhcmdldCBpbnRvIHRoZSB0ZXN0IGtlcm5lbAorIyAoT25seSBtYW5kYXRvcnkgaWYgUkVCT09UX1RZUEUgPSBzY3JpcHQpCisjUkVCT09UX1NDUklQVCA9CisKKyMjIyMgT3B0aW9uYWwgQ29uZmlnIE9wdGlvbnMgKGFsbCBoYXZlIGRlZmF1bHRzKSAjIyMjCisKKyMgU3RhcnQgYSB0ZXN0IHNldHVwLiBJZiB5b3UgbGVhdmUgdGhpcyBvZmYsIGFsbCBvcHRpb25zCisjIHdpbGwgYmUgZGVmYXVsdCBhbmQgdGhlIHRlc3Qgd2lsbCBydW4gb25jZS4KKyMgVGhpcyBpcyBhIGxhYmVsIGFuZCBub3QgcmVhbGx5IGFuIG9wdGlvbiAoaXQgdGFrZXMgbm8gdmFsdWUpLgorIyBZb3UgY2FuIGFwcGVuZCBJVEVSQVRFIGFuZCBhIG51bWJlciBhZnRlciBpdCB0byBpdGVyYXRlIHRoZQorIyB0ZXN0IGEgbnVtYmVyIG9mIHRpbWVzLCBvciBTS0lQIHRvIGlnbm9yZSB0aGlzIHRlc3QuCisjCisjVEVTVF9TVEFSVAorI1RFU1RfU1RBUlQgSVRFUkFURSA1CisjVEVTVF9TVEFSVCBTS0lQCisKKyMgSGF2ZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXMgZGVmYXVsdCBhZ2Fpbi4gVXNlZCBhZnRlciB0ZXN0cworIyBoYXZlIGFscmVhZHkgYmVlbiBkZWZpbmVkIGJ5IFRFU1RfU1RBUlQuIE9wdGlvbmFsbHksIHlvdSBjYW4KKyMganVzdCBkZWZpbmUgYWxsIGRlZmF1bHQgb3B0aW9ucyBiZWZvcmUgdGhlIGZpcnN0IFRFU1RfU1RBUlQKKyMgYW5kIHlvdSBkbyBub3QgbmVlZCB0aGlzIG9wdGlvbi4KKyMKKyMgVGhpcyBpcyBhIGxhYmVsIGFuZCBub3QgcmVhbGx5IGFuIG9wdGlvbiAoaXQgdGFrZXMgbm8gdmFsdWUpLgorIyBZb3UgY2FuIGFwcGVuZCBTS0lQIHRvIHRoaXMgbGFiZWwgYW5kIHRoZSBvcHRpb25zIHdpdGhpbiB0aGlzCisjIHNlY3Rpb24gd2lsbCBiZSBpZ25vcmVkLgorIworIyBERUZBVUxUUworIyBERUZBVUxUUyBTS0lQCisKKyMgVGhlIGRlZmF1bHQgdGVzdCB0eXBlIChkZWZhdWx0IHRlc3QpCisjIFRoZSB0ZXN0IHR5cGVzIG1heSBiZToKKyMgICBidWlsZCAtIG9ubHkgYnVpbGQgdGhlIGtlcm5lbCwgZG8gbm90aGluZyBlbHNlCisjICAgYm9vdCAtIGJ1aWxkIGFuZCBib290IHRoZSBrZXJuZWwKKyMgICB0ZXN0IC0gYnVpbGQsIGJvb3QgYW5kIGlmIFRFU1QgaXMgc2V0LCBydW4gdGhlIHRlc3Qgc2NyaXB0CisjICAgICAgICAgIChJZiBURVNUIGlzIG5vdCBzZXQsIGl0IGRlZmF1bHRzIGJhY2sgdG8gYm9vdCkKKyMgICBiaXNlY3QgLSBQZXJmb3JtIGEgYmlzZWN0IG9uIHRoZSBrZXJuZWwgKHNlZSBCSVNFQ1RfVFlQRSBiZWxvdykKKyMgICBwYXRjaGNoZWNrIC0gRG8gYSB0ZXN0IG9uIGEgc2VyaWVzIG9mIGNvbW1pdHMgaW4gZ2l0IChzZWUgUEFUQ0hDSEVDSyBiZWxvdykKKyNURVNUX1RZUEUgPSB0ZXN0CisKKyMgVGVzdCB0byBydW4gaWYgdGhlcmUgaXMgYSBzdWNjZXNzZnVsIGJvb3QgYW5kIFRFU1RfVFlQRSBpcyB0ZXN0LgorIyBNdXN0IGV4aXQgd2l0aCAwIG9uIHN1Y2Nlc3MgYW5kIG5vbiB6ZXJvIG9uIGVycm9yCisjIGRlZmF1bHQgKHVuZGVmaW5lZCkKKyNURVNUID0gc3NoIHVzZXJAbWFjaGluZSAvcm9vdC9ydW5fdGVzdAorCisjIFRoZSBidWlsZCB0eXBlIGlzIGFueSBtYWtlIGNvbmZpZyB0eXBlIG9yIHNwZWNpYWwgY29tbWFuZAorIyAgKGRlZmF1bHQgcmFuZGNvbmZpZykKKyMgICBub2J1aWxkIC0gc2tpcCB0aGUgY2xlYW4gYW5kIGJ1aWxkIHN0ZXAKKyMgICB1c2Vjb25maWc6L3BhdGgvdG8vY29uZmlnIC0gdXNlIHRoZSBnaXZlbiBjb25maWcgYW5kIHJ1bgorIyAgICAgICAgICAgICAgb2xkY29uZmlnIG9uIGl0LgorIyBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIFRFU1RfVFlQRSBpcyBwYXRjaGNoZWNrIG9yIGJpc2VjdAorI0JVSUxEX1RZUEUgPSByYW5kY29uZmlnCisKKyMgVGhlIG1ha2UgY29tbWFuZCAoZGVmYXVsdCBtYWtlKQorIyBJZiB5b3UgYXJlIGJ1aWxkaW5nIGEgMzJiaXQgeDg2IG9uIGEgNjQgYml0IGhvc3QKKyNNQUtFX0NNRCA9IENDPWkzODYtZ2NjIEFTPWkzODYtYXMgbWFrZSBBUkNIPWkzODYKKworIyBBbnkgYnVpbGQgb3B0aW9ucyBmb3IgdGhlIG1ha2Ugb2YgdGhlIGtlcm5lbCAobm90IGZvciBvdGhlciBtYWtlcywgbGlrZSBjb25maWdzKQorIyAoZGVmYXVsdCAiIikKKyNCVUlMRF9PUFRJT05TID0gLWoyMAorCisjIElmIHlvdSBuZWVkIGFuIGluaXRyZCwgeW91IGNhbiBhZGQgYSBzY3JpcHQgb3IgY29kZSBoZXJlIHRvIGluc3RhbGwKKyMgaXQuIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBLRVJORUxfVkVSU0lPTiB3aWxsIGJlIHNldCB0byB0aGUKKyMga2VybmVsIHZlcnNpb24gdGhhdCBpcyB1c2VkLiBSZW1lbWJlciB0byBhZGQgdGhlIGluaXRyZCBsaW5lCisjIHRvIHlvdXIgZ3J1YiBtZW51LmxzdCBmaWxlLgorIworIyBIZXJlJ3MgYSBjb3VwbGUgb2YgZXhhbXBsZXMgdG8gdXNlOgorI1BPU1RfSU5TVEFMTCA9IHNzaCB1c2VyQHRhcmdldCAvc2Jpbi9ta2luaXRyZCAtLWFsbG93LW1pc3NpbmcgLWYgL2Jvb3QvaW5pdHJhbWZzLXRlc3QuaW1nICRLRVJORUxfVkVSU0lPTgorIworIyBvciBvbiBzb21lIHN5c3RlbXM6CisjUE9TVF9JTlNUQUxMID0gc3NoIHVzZXJAdGFyZ2V0IC9zYmluL2RyYWN1dCAtZiAvYm9vdC9pbml0cmFtZnMtdGVzdC5pbWcgJEtFUk5FTF9WRVJTSU9OCisKKyMgV2F5IHRvIHJlYm9vdCB0aGUgYm94IHRvIHRoZSB0ZXN0IGtlcm5lbC4KKyMgT25seSB2YWxpZCBvcHRpb25zIHNvIGZhciBhcmUgImdydWIiIGFuZCAic2NyaXB0IgorIyAoZGVmYXVsdCBncnViKQorIyBJZiB5b3Ugc3BlY2lmeSBncnViLCBpdCB3aWxsIGFzc3VtZSBncnViIHZlcnNpb24gMQorIyBhbmQgd2lsbCBzZWFyY2ggaW4gL2Jvb3QvZ3J1Yi9tZW51LmxzdCBmb3IgdGhlIHRpdGxlICRHUlVCX01FTlUKKyMgYW5kIHNlbGVjdCB0aGF0IHRhcmdldCB0byByZWJvb3QgdG8gdGhlIGtlcm5lbC4gSWYgdGhpcyBpcyBub3QKKyMgeW91ciBzZXR1cCwgdGhlbiBzcGVjaWZ5ICJzY3JpcHQiIGFuZCBoYXZlIGEgY29tbWFuZCBvciBzY3JpcHQKKyMgc3BlY2lmaWVkIGluIFJFQk9PVF9TQ1JJUFQgdG8gYm9vdCB0byB0aGUgdGFyZ2V0LgorIworIyBUaGUgZW50cnkgaW4gL2Jvb3QvZ3J1Yi9tZW51LmxzdCBtdXN0IGJlIGVudGVyZWQgaW4gbWFudWFsbHkuCisjIFRoZSB0ZXN0IHdpbGwgbm90IG1vZGlmeSB0aGF0IGZpbGUuCisjUkVCT09UX1RZUEUgPSBncnViCisKKyMgVGhlIG1pbiBjb25maWcgdGhhdCBpcyBuZWVkZWQgdG8gYnVpbGQgZm9yIHRoZSBtYWNoaW5lCisjIEEgbmljZSB3YXkgdG8gY3JlYXRlIHRoaXMgaXMgd2l0aCB0aGUgZm9sbG93aW5nOgorIworIyAgICQgc3NoIHRhcmdldAorIyAgICQgbHNtb2QgPiBteW1vZHMKKyMgICAkIHNjcCBteW1vZHMgaG9zdDovdG1wCisjICAgJCBleGl0CisjICAgJCBjZCBsaW51eC5naXQKKyMgICAkIHJtIC5jb25maWcKKyMgICAkIG1ha2UgTFNNT0Q9bXltb2RzIGxvY2FseWVzY29uZmlnCisjICAgJCBncmVwICdeQ09ORklHJyAuY29uZmlnID4gL2hvbWUvdGVzdC9jb25maWctbWluCisjCisjIElmIHlvdSB3YW50IGV2ZW4gbGVzcyBjb25maWdzOgorIworIyAgIGxvZyBpbiBkaXJlY3RseSB0byB0YXJnZXQgKGRvIG5vdCBzc2gpCisjCisjICAgJCBzdQorIyAgICMgbHNtb2QgfCBjdXQgLWQnICcgLWYxIHwgeGFyZ3Mgcm1tb2QKKyMKKyMgICByZXBlYXQgdGhlIGFib3ZlIHNldmVyYWwgdGltZXMKKyMKKyMgICAjIGxzbW9kID4gbXltb2RzCisjICAgIyByZWJvb3QKKyMKKyMgTWF5IG5lZWQgdG8gcmVib290IHRvIGdldCB5b3VyIG5ldHdvcmsgYmFjayB0byBjb3B5IHRoZSBteW1vZHMKKyMgdG8gdGhlIGhvc3QsIGFuZCB0aGVuIHJlbW92ZSB0aGUgcHJldmlvdXMgLmNvbmZpZyBhbmQgcnVuIHRoZQorIyBsb2NhbHllc2NvbmZpZyBhZ2Fpbi4gVGhlIENPTkZJR19NSU4gZ2VuZXJhdGVkIGxpa2UgdGhpcyB3aWxsCisjIG5vdCBndWFyYW50ZWUgbmV0d29yayBhY3Rpdml0eSB0byB0aGUgYm94IHNvIHRoZSBURVNUX1RZUEUgb2YKKyMgdGVzdCBtYXkgZmFpbC4KKyMKKyMgWW91IG1pZ2h0IGFsc28gd2FudCB0byBzZXQ6CisjICAgQ09ORklHX0NNRExJTkU9Ijx5b3VyIG9wdGlvbnMgaGVyZT4iCisjICByYW5kY29uZmlnIG1heSBzZXQgdGhlIGFib3ZlIGFuZCBvdmVycmlkZSB5b3VyIHJlYWwgY29tbWFuZAorIyAgbGluZSBvcHRpb25zLgorIyAoZGVmYXVsdCB1bmRlZmluZWQpCisjTUlOX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLW1pbgorCisjIFNvbWV0aW1lcyB0aGVyZSdzIG9wdGlvbnMgdGhhdCBqdXN0IGJyZWFrIHRoZSBib290IGFuZAorIyB5b3UgZG8gbm90IGNhcmUgYWJvdXQuIEhlcmUgYXJlIGEgZmV3OgorIyAgICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorIyAgU3RhZ2luZyBkcml2ZXJzIGFyZSBob3JyaWJsZSwgYW5kIGNhbiBicmVhayB0aGUgYnVpbGQuCisjICAgIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjICBTQ1NJX0RFQlVHIG1heSBjaGFuZ2UgeW91ciByb290IHBhcnRpdGlvbgorIyAgICMgQ09ORklHX0tHREJfU0VSSUFMX0NPTlNPTEUgaXMgbm90IHNldAorIyAgS0dEQiBtYXkgY2F1c2Ugb29wcyB3YWl0aW5nIGZvciBhIGNvbm5lY3Rpb24gdGhhdCdzIG5vdCB0aGVyZS4KKyMgVGhpcyBvcHRpb24gcG9pbnRzIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgY29uZmlnIG9wdGlvbnMgdGhhdCB3aWxsIGJlIHByZXBlbmRlZAorIyB0byB0aGUgTUlOX0NPTkZJRyAob3IgYmUgdGhlIE1JTl9DT05GSUcgaWYgaXQgaXMgbm90IHNldCkKKyMKKyMgTm90ZSwgY29uZmlnIG9wdGlvbnMgaW4gTUlOX0NPTkZJRyB3aWxsIG92ZXJyaWRlIHRoZXNlIG9wdGlvbnMuCisjCisjIChkZWZhdWx0IHVuZGVmaW5lZCkKKyNBRERfQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctYnJva2VuCisKKyMgVGhlIGxvY2F0aW9uIG9uIHRoZSBob3N0IHdoZXJlIHRvIHdyaXRlIHRlbXAgZmlsZXMKKyMgKGRlZmF1bHQgL3RtcC9rdGVzdCkKKyNUTVBfRElSID0gL3RtcC9rdGVzdAorCisjIE9wdGlvbmFsIGxvZyBmaWxlIHRvIHdyaXRlIHRoZSBzdGF0dXMgKHJlY29tbWVuZGVkKQorIyAgTm90ZSwgdGhpcyBpcyBhIERFRkFVTFQgc2VjdGlvbiBvbmx5IG9wdGlvbi4KKyMgKGRlZmF1bHQgdW5kZWZpbmVkKQorI0xPR19GSUxFID0gL2hvbWUvdGVzdC9sb2dmaWxlcy90YXJnZXQubG9nCisKKyMgUmVtb3ZlIG9sZCBsb2dmaWxlIGlmIGl0IGV4aXN0cyBiZWZvcmUgc3RhcnRpbmcgYWxsIHRlc3RzLgorIyAgTm90ZSwgdGhpcyBpcyBhIERFRkFVTFQgc2VjdGlvbiBvbmx5IG9wdGlvbi4KKyMgKGRlZmF1bHQgMCkKKyNDTEVBUl9MT0cgPSAwCisKKyMgTGluZSB0byBkZWZpbmUgYSBzdWNjZXNzZnVsIGJvb3QgdXAgaW4gY29uc29sZSBvdXRwdXQuCisjIFRoaXMgaXMgd2hhdCB0aGUgbGluZSBjb250YWlucywgbm90IHRoZSBlbnRpcmUgbGluZS4gSWYgeW91IG5lZWQKKyMgdGhlIGVudGlyZSBsaW5lIHRvIG1hdGNoLCB0aGVuIHVzZSByZWd1cmFsIGV4cHJlc3Npb24gc3ludGF4IGxpa2U6CisjICAoZG8gbm90IGFkZCBhbnkgcXVvdGVzIGFyb3VuZCBpdCkKKyMKKyMgIFNVQ0NFU1NfTElORSA9IF5NeUJveCBMb2dpbjokCisjCisjIChkZWZhdWx0ICJsb2dpbjoiKQorI1NVQ0NFU1NfTElORSA9IGxvZ2luOgorCisjIEluIGNhc2UgdGhlIGNvbnNvbGUgY29uc3RhbnRseSBmaWxscyB0aGUgc2NyZWVuLCBoYXZpbmcKKyMgYSBzcGVjaWZpZWQgdGltZSB0byBzdG9wIHRoZSB0ZXN0IGFmdGVyIHN1Y2Nlc3MgaXMgcmVjb21tZW5kZWQuCisjIChpbiBzZWNvbmRzKQorIyAoZGVmYXVsdCAxMCkKKyNTVE9QX0FGVEVSX1NVQ0NFU1MgPSAxMAorCisjIEluIGNhc2UgdGhlIGNvbnNvbGUgY29uc3RhbnRseSBmaWxscyB0aGUgc2NyZWVuLCBoYXZpbmcKKyMgYSBzcGVjaWZpZWQgdGltZSB0byBzdG9wIHRoZSB0ZXN0IGFmdGVyIGZhaWx1cmUgaXMgcmVjb21tZW5kZWQuCisjIChpbiBzZWNvbmRzKQorIyAoZGVmYXVsdCA2MCkKKyNTVE9QX0FGVEVSX0ZBSUxVUkUgPSA2MAorCisjIFN0b3AgdGVzdGluZyBpZiBhIGJ1aWxkIGZhaWxzLiBJZiBzZXQsIHRoZSBzY3JpcHQgd2lsbCBlbmQgaWYKKyMgYSBmYWlsdXJlIGlzIGRldGVjdGVkLCBvdGhlcndpc2UgaXQgd2lsbCBzYXZlIG9mZiB0aGUgLmNvbmZpZywKKyMgZG1lc2cgYW5kIGJvb3Rsb2cgaW4gYSBkaXJlY3RvcnkgY2FsbGVkCisjIE1BQ0hJTkUtVEVTVF9UWVBFX0JVSUxEX1RZUEUtZmFpbC15eXl5bW1kZGhobW1zcworIyBpZiB0aGUgU1RPUkVfRkFJTFVSRVMgZGlyZWN0b3J5IGlzIHNldC4KKyMgKGRlZmF1bHQgMSkKKyMgTm90ZSwgZXZlbiBpZiB0aGlzIGlzIHNldCB0byB6ZXJvLCB0aGVyZSBhcmUgc29tZSBlcnJvcnMgdGhhdCBzdGlsbAorIyBzdG9wIHRoZSB0ZXN0cy4KKyNESUVfT05fRkFJTFVSRSA9IDEKKworIyBEaXJlY3RvcnkgdG8gc3RvcmUgZmFpbHVyZSBkaXJlY3RvcmllcyBvbiBmYWlsdXJlLiBJZiB0aGlzIGlzIG5vdAorIyBzZXQsIERJRV9PTl9GQUlMVVJFPTAgd2lsbCBub3Qgc2F2ZSBvZmYgdGhlIC5jb25maWcsIGRtZXNnIGFuZAorIyBib290bG9nLiBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIERJRV9PTl9GQUlMVVJFIGlzIG5vdCBzZXQuCisjIChkZWZhdWx0IHVuZGVmaW5lZCkKKyNTVE9SRV9GQUlMVVJFUyA9IC9ob21lL3Rlc3QvZmFpbHVyZXMKKworIyBCdWlsZCB3aXRob3V0IGRvaW5nIGEgbWFrZSBtcnByb3Blciwgb3IgcmVtb3ZpbmcgLmNvbmZpZworIyAoZGVmYXVsdCAwKQorI0JVSUxEX05PQ0xFQU4gPSAwCisKKyMgQXMgdGhlIHRlc3QgcmVhZHMgdGhlIGNvbnNvbGUsIGFmdGVyIGl0IGhpdHMgdGhlIFNVQ0NFU1NfTElORQorIyB0aGUgdGltZSBpdCB3YWl0cyBmb3IgdGhlIG1vbml0b3IgdG8gc2V0dGxlIGRvd24gYmV0d2VlbiByZWFkcworIyBjYW4gdXN1YWxseSBiZSBsb3dlcmVkLgorIyAoaW4gc2Vjb25kcykgKGRlZmF1bHQgMSkKKyNCT09URURfVElNRU9VVCA9IDEKKworIyBUaGUgdGltZW91dCBpbiBzZWNvbmRzIHdoZW4gd2UgY29uc2lkZXIgdGhlIGJveCBodW5nIGFmdGVyCisjIHRoZSBjb25zb2xlIHN0b3AgcHJvZHVjaW5nIG91dHB1dC4gQmUgc3VyZSB0byBsZWF2ZSBlbm91Z2gKKyMgdGltZSBoZXJlIHRvIGdldCBwYXNzIGEgcmVib290LiBTb21lIG1hY2hpbmVzIG1heSBub3QgcHJvZHVjZQorIyBhbnkgY29uc29sZSBvdXRwdXQgZm9yIGEgbG9uZyB0aW1lIGR1cmluZyBhIHJlYm9vdC4gWW91IGRvCisjIG5vdCB3YW50IHRoZSB0ZXN0IHRvIGZhaWwganVzdCBiZWNhdXNlIHRoZSBzeXN0ZW0gd2FzIGluCisjIHRoZSBwcm9jZXNzIG9mIHJlYm9vdGluZyB0byB0aGUgdGVzdCBrZXJuZWwuCisjIChkZWZhdWx0IDEyMCkKKyNUSU1FT1VUID0gMTIwCisKKyMgSW4gYmV0d2VlbiB0ZXN0cywgYSByZWJvb3Qgb2YgdGhlIGJveCBtYXkgb2NjdXIsIGFuZCB0aGlzCisjIGlzIHRoZSB0aW1lIHRvIHdhaXQgZm9yIHRoZSBjb25zb2xlIGFmdGVyIGl0IHN0b3BzIHByb2R1Y2luZworIyBvdXRwdXQuIFNvbWUgbWFjaGluZXMgbWF5IG5vdCBwcm9kdWNlIGEgbGFyZ2UgbGFnIG9uIHJlYm9vdAorIyBzbyB0aGlzIHNob3VsZCBhY2NvbW1vZGF0ZSBpdC4KKyMgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGFuZCBUSU1FT1VULCBpcyB0aGF0IFRJTUVPVVQgaGFwcGVucworIyB3aGVuIHJlYm9vdGluZyB0byB0aGUgdGVzdCBrZXJuZWwuIFRoaXMgc2xlZXAgdGltZSBoYXBwZW5zCisjIGFmdGVyIGEgdGVzdCBoYXMgY29tcGxldGVkIGFuZCB3ZSBhcmUgYWJvdXQgdG8gc3RhcnQgcnVubmluZworIyBhbm90aGVyIHRlc3QuIElmIGEgcmVib290IHRvIHRoZSByZWxpYWJsZSBrZXJuZWwgaGFwcGVucywKKyMgd2Ugd2FpdCBTTEVFUF9USU1FIGZvciB0aGUgY29uc29sZSB0byBzdG9wIHByb2R1Y2luZyBvdXRwdXQKKyMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBuZXh0IHRlc3QuCisjIChkZWZhdWx0IDYwKQorI1NMRUVQX1RJTUUgPSA2MAorCisjIFRoZSB0aW1lIGluIGJldHdlZW4gYmlzZWN0cyB0byBzbGVlcCAoaW4gc2Vjb25kcykKKyMgKGRlZmF1bHQgNjApCisjQklTRUNUX1NMRUVQX1RJTUUgPSA2MAorCisjIFJlYm9vdCB0aGUgdGFyZ2V0IGJveCBvbiBlcnJvciAoZGVmYXVsdCAwKQorI1JFQk9PVF9PTl9FUlJPUiA9IDAKKworIyBQb3dlciBvZmYgdGhlIHRhcmdldCBvbiBlcnJvciAoaWdub3JlZCBpZiBSRUJPT1RfT05fRVJST1IgaXMgc2V0KQorIyAgTm90ZSwgdGhpcyBpcyBhIERFRkFVTFQgc2VjdGlvbiBvbmx5IG9wdGlvbi4KKyMgKGRlZmF1bHQgMCkKKyNQT1dFUk9GRl9PTl9FUlJPUiA9IDAKKworIyBQb3dlciBvZmYgdGhlIHRhcmdldCBhZnRlciBhbGwgdGVzdHMgaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CisjICBOb3RlLCB0aGlzIGlzIGEgREVGQVVMVCBzZWN0aW9uIG9ubHkgb3B0aW9uLgorIyAoZGVmYXVsdCAwKQorI1BPV0VST0ZGX09OX1NVQ0NFU1MgPSAwCisKKyMgUmVib290IHRoZSB0YXJnZXQgYWZ0ZXIgYWxsIHRlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAoZGVmYXVsdCAxKQorIyAoaWdub3JlZCBpZiBQT1dFUk9GRl9PTl9TVUNDRVNTIGlzIHNldCkKKyNSRUJPT1RfT05fU1VDQ0VTUyA9IDEKKworIyBJbiBjYXNlIHRoZXJlIGFyZSBpc3NlcyB3aXRoIHJlYm9vdGluZywgeW91IGNhbiBzcGVjaWZ5IHRoaXMKKyMgdG8gYWx3YXlzIHBvd2VyY3ljbGUgYWZ0ZXIgdGhpcyBhbW91bnQgb2YgdGltZSBhZnRlciBjYWxsaW5nCisjIHJlYm9vdC4KKyMgTm90ZSwgUE9XRVJDWUNMRV9BRlRFUl9SRUJPT1QgPSAwIGRvZXMgTk9UIGRpc2FibGUgaXQuIEl0IGp1c3QKKyMgbWFrZXMgaXQgcG93ZXJjeWNsZSBpbW1lZGlhdGVseSBhZnRlciByZWJvb3RpbmcuIERvIG5vdCBkZWZpbmUKKyMgaXQgaWYgeW91IGRvIG5vdCB3YW50IGl0LgorIyAoZGVmYXVsdCB1bmRlZmluZWQpCisjUE9XRVJDWUNMRV9BRlRFUl9SRUJPT1QgPSA1CisKKyMgSW4gY2FzZSB0aGVyZSdzIGlzc2VzIHdpdGggaGFsdGluZywgeW91IGNhbiBzcGVjaWZ5IHRoaXMKKyMgdG8gYWx3YXlzIHBvd2Vyb2ZmIGFmdGVyIHRoaXMgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgY2FsbGluZworIyBoYWx0LgorIyBOb3RlLCBQT1dFUk9GRl9BRlRFUl9IQUxUID0gMCBkb2VzIE5PVCBkaXNhYmxlIGl0LiBJdCBqdXN0CisjIG1ha2VzIGl0IHBvd2Vyb2ZmIGltbWVkaWF0ZWx5IGFmdGVyIGhhbHRpbmcuIERvIG5vdCBkZWZpbmUKKyMgaXQgaWYgeW91IGRvIG5vdCB3YW50IGl0LgorIyAoZGVmYXVsdCB1bmRlZmluZWQpCisjUE9XRVJPRkZfQUZURVJfSEFMVCA9IDIwCisKKyMgQSBzY3JpcHQgb3IgY29tbWFuZCB0byBwb3dlciBvZmYgdGhlIGJveCAoZGVmYXVsdCB1bmRlZmluZWQpCisjIE5lZWRlZCBmb3IgUE9XRVJPRkZfT05fRVJST1IgYW5kIFNVQ0NFU1MKKyMKKyMgRXhhbXBsZSBmb3IgZGlnaXRhbCBsb2dnZXJzIHBvd2VyIHN3aXRjaDoKKyNQT1dFUl9PRkYgPSB3Z2V0IC0tbm8tcHJveHkgLU8gL2Rldi9udWxsIC1xICAtLWF1dGgtbm8tY2hhbGxlbmdlICdodHRwOi8vYWRtaW46YWRtaW5AcG93ZXIvb3V0bGV0PzU9T0ZGJworIworIyBFeGFtcGxlIGZvciBhIHZpcnR1YWwgZ3Vlc3QgY2FsbCAiR3Vlc3QiLgorI1BPV0VSX09GRiA9IHZpcnNoIGRlc3Ryb3kgR3Vlc3QKKworIyBUaGUgd2F5IHRvIGV4ZWN1dGUgYSBjb21tYW5kIG9uIHRoZSB0YXJnZXQKKyMgKGRlZmF1bHQgc3NoICRTU0hfVVNFUkAkTUFDSElORSAkU1NIX0NPTU1BTkQiOykKKyMgVGhlIHZhcmlhYmxlcyBTU0hfVVNFUiwgTUFDSElORSBhbmQgU1NIX0NPTU1BTkQgYXJlIGRlZmluZWQKKyNTU0hfRVhFQyA9IHNzaCAkU1NIX1VTRVJAJE1BQ0hJTkUgJFNTSF9DT01NQU5EIjsKKworIyBUaGUgd2F5IHRvIGNvcHkgYSBmaWxlIHRvIHRoZSB0YXJnZXQKKyMgKGRlZmF1bHQgc2NwICRTUkNfRklMRSAkU1NIX1VTRVJAJE1BQ0hJTkU6JERTVF9GSUxFKQorIyBUaGUgdmFyaWFibGVzIFNTSF9VU0VSLCBNQUNISU5FLCBTUkNfRklMRSBhbmQgRFNUX0ZJTEUgYXJlIGRlZmluZWQuCisjU0NQX1RPX1RBUkdFVCA9IHNjcCAkU1JDX0ZJTEUgJFNTSF9VU0VSQCRNQUNISU5FOiREU1RfRklMRQorCisjIFRoZSBuaWNlIHdheSB0byByZWJvb3QgdGhlIHRhcmdldAorIyAoZGVmYXVsdCBzc2ggJFNTSF9VU0VSQCRNQUNISU5FIHJlYm9vdCkKKyMgVGhlIHZhcmlhYmxlcyBTU0hfVVNFUiBhbmQgTUFDSElORSBhcmUgZGVmaW5lZC4KKyNSRUJPT1QgPSBzc2ggJFNTSF9VU0VSQCRNQUNISU5FIHJlYm9vdAorCisjIyMjIFBlciB0ZXN0IHJ1biBvcHRpb25zICMjIyMKKyMgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBvbmx5IGFsbG93ZWQgaW4gVEVTVF9TVEFSVCBzZWN0aW9ucy4KKyMgVGhleSBhcmUgaWdub3JlZCBpbiB0aGUgREVGQVVMVFMgc2VjdGlvbnMuCisjCisjIEFsbCBvZiB0aGVzZSBhcmUgb3B0aW9uYWwgYW5kIHVuZGVmaW5lZCBieSBkZWZhdWx0LCBhbHRob3VnaAorIyAgc29tZSBvZiB0aGVzZSBvcHRpb25zIGFyZSByZXF1aXJlZCBmb3IgVEVTVF9UWVBFIG9mIHBhdGNoY2hlY2sKKyMgIGFuZCBiaXNlY3QuCisjCisjCisjIENIRUNLT1VUID0gYnJhbmNoCisjCisjICBJZiB0aGUgQlVJTERfRElSIGlzIGEgZ2l0IHJlcG9zaXRvcnksIHRoZW4geW91IGNhbiBzZXQgdGhpcyBvcHRpb24KKyMgIHRvIGNoZWNrb3V0IHRoZSBnaXZlbiBicmFuY2ggYmVmb3JlIHJ1bm5pbmcgdGhlIFRFU1QuIElmIHlvdQorIyAgc3BlY2lmeSB0aGlzIGZvciB0aGUgZmlyc3QgcnVuLCB0aGF0IGJyYW5jaCB3aWxsIGJlIHVzZWQgZm9yCisjICBhbGwgcHJlY2VkaW5nIHRlc3RzIHVudGlsIGEgbmV3IENIRUNLT1VUIGlzIHNldC4KKyMKKyMKKyMKKyMgRm9yIFRFU1RfVFlQRSA9IHBhdGNoY2hlY2sKKyMKKyMgIFRoaXMgZXhwZWN0cyB0aGUgQlVJTERfRElSIHRvIGJlIGEgZ2l0IHJlcG9zaXRvcnksIGFuZAorIyAgd2lsbCBjaGVja291dCB0aGUgUEFUQ0hDSEVDS19TVEFSVCBjb21taXQuCisjCisjICBUaGUgb3B0aW9uIEJVSUxEX1RZUEUgd2lsbCBiZSBpZ25vcmVkLgorIworIyAgVGhlIE1JTl9DT05GSUcgd2lsbCBiZSB1c2VkIGZvciBhbGwgYnVpbGRzIG9mIHRoZSBwYXRjaGNoZWNrLiBUaGUgYnVpbGQgdHlwZQorIyAgdXNlZCBmb3IgcGF0Y2hjaGVjayBpcyBvbGRjb25maWcuCisjCisjICBQQVRDSENIRUNLX1NUQVJUIGlzIHJlcXVpcmVkIGFuZCBpcyB0aGUgZmlyc3QgcGF0Y2ggdG8KKyMgICB0ZXN0ICh0aGUgU0hBMSBvZiB0aGUgY29tbWl0KS4gWW91IG1heSBhbHNvIHNwZWNpZnkgYW55dGhpbmcKKyMgICB0aGF0IGdpdCBjaGVja291dCBhbGxvd3MgKGJyYW5jaCBuYW1lLCB0YWdlLCBIRUFEfjMpLgorIworIyAgUEFUQ0hDSEVDS19FTkQgaXMgdGhlIGxhc3QgcGF0Y2ggdG8gY2hlY2sgKGRlZmF1bHQgSEVBRCkKKyMKKyMgIFBBVENIQ0hFQ0tfVFlQRSBpcyByZXF1aXJlZCBhbmQgaXMgdGhlIHR5cGUgb2YgdGVzdCB0byBydW46CisjICAgICAgYnVpbGQsIGJvb3QsIHRlc3QuCisjCisjICAgTm90ZSwgdGhlIGJ1aWxkIHRlc3Qgd2lsbCBsb29rIGZvciB3YXJuaW5ncywgaWYgYSB3YXJuaW5nIG9jY3VycmVkCisjICAgICBpbiBhIGZpbGUgdGhhdCBhIGNvbW1pdCB0b3VjaGVzLCB0aGUgYnVpbGQgd2lsbCBmYWlsLgorIworIyAgIElmIEJVSUxEX05PQ0xFQU4gaXMgc2V0LCB0aGVuIG1ha2UgbXJwcm9wZXIgd2lsbCBub3QgYmUgcnVuIG9uCisjICAgYW55IG9mIHRoZSBidWlsZHMsIGp1c3QgbGlrZSBhbGwgb3RoZXIgVEVTVF9UWVBFIHRlc3RzLiBCdXQKKyMgICB3aGF0IG1ha2VzIHBhdGNoY2hlY2sgZGlmZmVyZW50IGZyb20gdGhlIG90aGVyIHRlc3RzLCBpcyBpZgorIyAgIEJVSUxEX05PQ0xFQU4gaXMgbm90IHNldCwgb25seSB0aGUgZmlyc3QgYW5kIGxhc3QgcGF0Y2ggcnVuCisjICAgbWFrZSBtcnByb3Blci4gVGhpcyBoZWxwcyBzcGVlZCB1cCB0aGUgdGVzdC4KKyMKKyMgRXhhbXBsZToKKyMgICBURVNUX1NUQVJUCisjICAgVEVTVF9UWVBFID0gcGF0Y2hjaGVjaworIyAgIENIRUNLT1VUID0gbXlicmFuY2gKKyMgICBQQVRDSENIRUNLX1RZUEUgPSBib290CisjICAgUEFUQ0hDSEVDS19TVEFSVCA9IDc0N2U5NGFlM2QxYjRjOWJmNTM4MGU1NjlmNjE0ZWI5MDQwYjc5ZTcKKyMgICBQQVRDSENIRUNLX0VORCA9IEhFQUR+MgorIworIworIworIyBGb3IgVEVTVF9UWVBFID0gYmlzZWN0CisjCisjICBZb3UgY2FuIHNwZWNpZnkgYSBnaXQgYmlzZWN0IGlmIHRoZSBCVUlMRF9ESVIgaXMgYSBnaXQgcmVwb3NpdG9yeS4KKyMgIFRoZSBNSU5fQ09ORklHIHdpbGwgYmUgdXNlZCBmb3IgYWxsIGJ1aWxkcyBvZiB0aGUgYmlzZWN0LiBUaGUgYnVpbGQgdHlwZQorIyAgdXNlZCBmb3IgYmlzZWN0aW5nIGlzIG9sZGNvbmZpZy4KKyMKKyMgIFRoZSBvcHRpb24gQlVJTERfVFlQRSB3aWxsIGJlIGlnbm9yZWQuCisjCisjICBCSVNFQ1RfVFlQRSBpcyB0aGUgdHlwZSBvZiB0ZXN0IHRvIHBlcmZvcm06CisjCWJ1aWxkCS0gYmFkIGZhaWxzIHRvIGJ1aWxkCisjCWJvb3QJLSBiYWQgYnVpbGRzIGJ1dCBmYWlscyB0byBib290CisjCXRlc3QJLSBiYWQgYm9vdHMgYnV0IGZhaWxzIGEgdGVzdAorIworIyBCSVNFQ1RfR09PRCBpcyB0aGUgY29tbWl0IChTSEExKSB0byBsYWJlbCBhcyBnb29kIChhY2NlcHRzIGFsbCBnaXQgZ29vZCBjb21taXQgdHlwZXMpCisjIEJJU0VDVF9CQUQgaXMgdGhlIGNvbW1pdCB0byBsYWJlbCBhcyBiYWQgKGFjY2VwdHMgYWxsIGdpdCBiYWQgY29tbWl0IHR5cGVzKQorIworIyBUaGUgYWJvdmUgdGhyZWUgb3B0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIGEgYmlzZWN0IG9wZXJhdGlvbi4KKyMKKyMgQklTRUNUX1JFUExBWSA9IC9wYXRoL3RvL3JlcGxheS9maWxlIChvcHRpb25hbCwgZGVmYXVsdCB1bmRlZmluZWQpCisjCisjICAgSWYgYW4gb3BlcmF0aW9uIGZhaWxlZCBpbiB0aGUgYmlzZWN0IHRoYXQgd2FzIG5vdCBleHBlY3RlZCB0bworIyAgIGZhaWwuIFRoZW4gdGhlIHRlc3QgZW5kcy4gVGhlIHN0YXRlIG9mIHRoZSBCVUlMRF9ESVIgd2lsbCBiZQorIyAgIGxlZnQgb2ZmIGF0IHdoZXJlIHRoZSBmYWlsdXJlIG9jY3VycmVkLiBZb3UgY2FuIGV4YW1pbmUgdGhlCisjICAgcmVhc29uIGZvciB0aGUgZmFpbHVyZSwgYW5kIHBlcmhhcHMgZXZlbiBmaW5kIGEgZ2l0IGNvbW1pdAorIyAgIHRoYXQgd291bGQgd29yayB0byBjb250aW51ZSB3aXRoLiBZb3UgY2FuIHJ1bjoKKyMKKyMgICBnaXQgYmlzZWN0IGxvZyA+IC9wYXRoL3RvL3JlcGxheS9maWxlCisjCisjICAgVGhlIGFkZGluZzoKKyMKKyMgICAgQklTRUNUX1JFUExBWT0gL3BhdGgvdG8vcmVwbGF5L2ZpbGUKKyMKKyMgICBBbmQgcnVubmluZyB0aGUgdGVzdCBhZ2Fpbi4gVGhlIHRlc3Qgd2lsbCBwZXJmb3JtIHRoZSBpbml0aWFsCisjICAgIGdpdCBiaXNlY3Qgc3RhcnQsIGdpdCBiaXNlY3QgZ29vZCwgYW5kIGdpdCBiaXNlY3QgYmFkLCBhbmQKKyMgICAgdGhlbiBpdCB3aWxsIHJ1biBnaXQgYmlzZWN0IHJlcGxheSBvbiB0aGlzIGZpbGUsIGJlZm9yZQorIyAgICBjb250aW51aW5nIHdpdGggdGhlIGJpc2VjdC4KKyMKKyMgQklTRUNUX1NUQVJUID0gY29tbWl0IChvcHRpb25hbCwgZGVmYXVsdCB1bmRlZmluZWQpCisjCisjICAgQXMgd2l0aCBCSVNFQ1RfUkVQTEFZLCBpZiB0aGUgdGVzdCBmYWlsZWQgb24gYSBjb21taXQgdGhhdAorIyAgIGp1c3QgaGFwcGVuIHRvIGhhdmUgYSBiYWQgY29tbWl0IGluIHRoZSBtaWRkbGUgb2YgdGhlIGJpc2VjdCwKKyMgICBhbmQgeW91IG5lZWQgdG8gc2tpcCBpdC4gSWYgQklTRUNUX1NUQVJUIGlzIGRlZmluZWQsIGl0CisjICAgd2lsbCBjaGVja291dCB0aGF0IGNvbW1pdCBhZnRlciBkb2luZyB0aGUgaW5pdGlhbCBnaXQgYmlzZWN0IHN0YXJ0LAorIyAgIGdpdCBiaXNlY3QgZ29vZCwgZ2l0IGJpc2VjdCBiYWQsIGFuZCBydW5uaW5nIHRoZSBnaXQgYmlzZWN0IHJlcGxheQorIyAgIGlmIHRoZSBCSVNFQ1RfUkVQTEFZIGlzIHNldC4KKyMKKyMgQklTRUNUX1JFVkVSU0UgPSAxIChvcHRpb25hbCwgZGVmYXVsdCAwKQorIworIyAgIEluIHRob3NlIHN0cmFuZ2UgaW5zdGFuY2VzIHdoZXJlIGl0IHdhcyBicm9rZW4gZm9yZXZlcgorIyAgIGFuZCB5b3UgYXJlIHRyeWluZyB0byBmaW5kIHdoZXJlIGl0IHN0YXJ0ZWQgdG8gd29yayEKKyMgICBTZXQgQklTRUNUX0dPT0QgdG8gdGhlIGNvbW1pdCB0aGF0IHdhcyBsYXN0IGtub3duIHRvIGZhaWwKKyMgICBTZXQgQklTRUNUX0JBRCB0byB0aGUgY29tbWl0IHRoYXQgaXMga25vd24gdG8gc3RhcnQgd29ya2luZy4KKyMgICBXaXRoIEJJU0VDVF9SRVZFUlNFID0gMSwgVGhlIHRlc3Qgd2lsbCBjb25zaWRlciBmYWlsdXJlcyBhcworIyAgIGdvb2QsIGFuZCBzdWNjZXNzIGFzIGJhZC4KKyMKKyMgQklTRUNUX0NIRUNLID0gMSAob3B0aW9uYWwsIGRlZmF1bHQgMCkKKyMKKyMgICBKdXN0IHRvIGJlIHN1cmUgdGhlIGdvb2QgaXMgZ29vZCBhbmQgYmFkIGlzIGJhZCwgc2V0dGluZworIyAgIEJJU0VDVF9DSEVDSyB0byAxIHdpbGwgc3RhcnQgdGhlIGJpc2VjdCBieSBmaXJzdCBjaGVja2luZworIyAgIG91dCBCSVNFQ1RfQkFEIGFuZCBtYWtlcyBzdXJlIGl0IGZhaWxzLCB0aGVuIGl0IHdpbGwgY2hlY2sKKyMgICBvdXQgQklTRUNUX0dPT0QgYW5kIG1ha2VzIHN1cmUgaXQgc3VjY2VlZHMgYmVmb3JlIHN0YXJ0aW5nCisjICAgdGhlIGJpc2VjdCAoaXQgd29ya3MgZm9yIEJJU0VDVF9SRVZFUlNFIHRvbykuCisjCisjICAgWW91IGNhbiBsaW1pdCB0aGUgdGVzdCB0byBqdXN0IGNoZWNrIEJJU0VDVF9HT09EIG9yCisjICAgQklTRUNUX0JBRCB3aXRoIEJJU0VDVF9DSEVDSyA9IGdvb2Qgb3IKKyMgICBCSVNFQ1RfQ0hFQ0sgPSBiYWQsIHJlc3BlY3RpdmVseS4KKyMKKyMgRXhhbXBsZToKKyMgICBURVNUX1NUQVJUCisjICAgVEVTVF9UWVBFID0gYmlzZWN0CisjICAgQklTRUNUX0dPT0QgPSB2Mi42LjM2CisjICAgQklTRUNUX0JBRCA9IGI1MTUzMTYzZWQ1ODBlMDBjNjdiZGZlY2IwMmIyZTM4NDM4MTdiM2UKKyMgICBCSVNFQ1RfVFlQRSA9IGJ1aWxkCisjICAgTUlOX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLWJpc2VjdAorIworIworIworIyBGb3IgVEVTVF9UWVBFID0gY29uZmlnX2Jpc2VjdAorIworIyAgSW4gdGhvc2UgY2FzZXMgdGhhdCB5b3UgaGF2ZSB0d28gZGlmZmVyZW50IGNvbmZpZ3MuIE9uZSBvZiB0aGVtCisjICB3b3JrLCB0aGUgb3RoZXIgZG9lcyBub3QsIGFuZCB5b3UgZG8gbm90IGtub3cgd2hhdCBjb25maWcgY2F1c2VzCisjICB0aGUgcHJvYmxlbS4KKyMgIFRoZSBURVNUX1RZUEUgY29uZmlnX2Jpc2VjdCB3aWxsIGJpc2VjdCB0aGUgYmFkIGNvbmZpZyBsb29raW5nIGZvcgorIyAgd2hhdCBjb25maWcgY2F1c2VzIHRoZSBmYWlsdXJlLgorIworIyAgVGhlIHdheSBpdCB3b3JrcyBpcyB0aGlzOgorIworIyAgIEZpcnN0IGl0IGZpbmRzIGEgY29uZmlnIHRvIHdvcmsgd2l0aC4gU2luY2UgYSBkaWZmZXJlbnQgdmVyc2lvbiwgb3IKKyMgICBNSU5fQ09ORklHIG1heSBjYXVzZSBkaWZmZXJlbnQgZGVwZW5kZWNpZXMsIGl0IG11c3QgcnVuIHRocm91Z2ggdGhpcworIyAgIHByZXBhcmF0aW9uLgorIworIyAgIE92ZXJ3cml0ZXMgYW55IGNvbmZpZyBzZXQgaW4gdGhlIGJhZCBjb25maWcgd2l0aCBhIGNvbmZpZyBzZXQgaW4KKyMgICBlaXRoZXIgdGhlIE1JTl9DT05GSUcgb3IgQUREX0NPTkZJRy4gVGh1cywgbWFrZSBzdXJlIHRoZXNlIGNvbmZpZ3MKKyMgICBhcmUgbWluaW1hbCBhbmQgZG8gbm90IGRpc2FibGUgY29uZmlncyB5b3Ugd2FudCB0byB0ZXN0OgorIyAgIChpZS4gICMgQ09ORklHX0ZPTyBpcyBub3Qgc2V0KS4KKyMKKyMgICBBbiBvbGRjb25maWcgaXMgcnVuIG9uIHRoZSBiYWQgY29uZmlnIGFuZCBhbnkgbmV3IGNvbmZpZyB0aGF0CisjICAgYXBwZWFycyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjb25maWdzIHRvIHRlc3QuCisjCisjICAgRmluYWxseSwgaXQgZ2VuZXJhdGVzIGEgY29uZmlnIHdpdGggdGhlIGFib3ZlIHJlc3VsdCBhbmQgcnVucyBpdAorIyAgIGFnYWluIHRocm91Z2ggbWFrZSBvbGRjb25maWcgdG8gcHJvZHVjZSBhIGNvbmZpZyB0aGF0IHNob3VsZCBiZQorIyAgIHNhdGlzZmllZCBieSBrY29uZmlnLgorIworIyAgIFRoZW4gaXQgc3RhcnRzIHRoZSBiaXNlY3QuCisjCisjICAgVGhlIGNvbmZpZ3MgdG8gdGVzdCBhcmUgY3V0IGluIGhhbGYuIElmIGFsbCB0aGUgY29uZmlncyBpbiB0aGlzCisjICAgaGFsZiBkZXBlbmQgb24gYSBjb25maWcgaW4gdGhlIG90aGVyIGhhbGYsIHRoZW4gdGhlIG90aGVyIGhhbGYKKyMgICBpcyB0ZXN0ZWQgaW5zdGVhZC4gSWYgbm8gY29uZmlncyBhcmUgZW5hYmxlZCBieSBlaXRoZXIgaGFsZiwgdGhlbgorIyAgIHRoaXMgbWVhbnMgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGV4aXN0cyBhbmQgdGhlIHRlc3QgZmFpbHMuCisjCisjICAgQSBjb25maWcgaXMgY3JlYXRlZCB3aXRoIHRoZSB0ZXN0IGhhbGYsIGFuZCB0aGUgYmlzZWN0IHRlc3QgaXMgcnVuLgorIworIyAgIElmIHRoZSBiaXNlY3Qgc3VjY2VlZHMsIHRoZW4gYWxsIGNvbmZpZ3MgaW4gdGhlIGdlbmVyYXRlZCBjb25maWcKKyMgICBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBjb25maWdzIHRvIHRlc3QgYW5kIGFkZGVkIHRvIHRoZSBjb25maWdzIHRoYXQKKyMgICB3aWxsIGJlIGVuYWJsZWQgZm9yIGFsbCBidWlsZHMgKHRoZXkgd2lsbCBiZSBlbmFibGVkLCBidXQgbm90IGJlIHBhcnQKKyMgICBvZiB0aGUgY29uZmlncyB0byBleGFtaW5lKS4KKyMKKyMgICBJZiB0aGUgYmlzZWN0IGZhaWxzLCB0aGVuIGFsbCB0ZXN0IGNvbmZpZ3MgdGhhdCB3ZXJlIG5vdCBlbmFibGVkIGJ5CisjICAgdGhlIGNvbmZpZyBmaWxlIGFyZSByZW1vdmVkIGZyb20gdGhlIHRlc3QuIFRoZXNlIGNvbmZpZ3Mgd2lsbCBub3QKKyMgICBiZSBlbmFibGVkIGluIGZ1dHVyZSB0ZXN0cy4gU2luY2UgY3VycmVudCBjb25maWcgZmFpbGVkLCB3ZSBjb25zaWRlcgorIyAgIHRoaXMgdG8gYmUgYSBzdWJzZXQgb2YgdGhlIGNvbmZpZyB0aGF0IHdlIHN0YXJ0ZWQgd2l0aC4KKyMKKyMgICBXaGVuIHdlIGFyZSBkb3duIHRvIG9uZSBjb25maWcsIGl0IGlzIGNvbnNpZGVyZWQgdGhlIGJhZCBjb25maWcuCisjCisjICAgTm90ZSwgdGhlIGNvbmZpZyBjaG9zZW4gbWF5IG5vdCBiZSB0aGUgdHJ1ZSBiYWQgY29uZmlnLiBEdWUgdG8KKyMgICBkZXBlbmRlbmNpZXMgYW5kIHNlbGVjdGlvbnMgb2YgdGhlIGtidWlsZCBzeXN0ZW0sIG11bGl0cGxlCisjICAgY29uZmlncyBtYXkgYmUgbmVlZGVkIHRvIGNhdXNlIGEgZmFpbHVyZS4gSWYgeW91IGRpc2FibGUgdGhlCisjICAgY29uZmlnIHRoYXQgd2FzIGZvdW5kIGFuZCByZXN0YXJ0IHRoZSB0ZXN0LCBpZiB0aGUgdGVzdCBmYWlscworIyAgIGFnYWluLCBpdCBpcyByZWNvbW1lbmRlZCB0byByZXJ1biB0aGUgY29uZmlnX2Jpc2VjdCB3aXRoIGEgbmV3CisjICAgYmFkIGNvbmZpZyB3aXRob3V0IHRoZSBmb3VuZCBjb25maWcgZW5hYmxlZC4KKyMKKyMgIFRoZSBvcHRpb24gQlVJTERfVFlQRSB3aWxsIGJlIGlnbm9yZWQuCisjCisjICBDT05GSUdfQklTRUNUX1RZUEUgaXMgdGhlIHR5cGUgb2YgdGVzdCB0byBwZXJmb3JtOgorIwlidWlsZAktIGJhZCBmYWlscyB0byBidWlsZAorIwlib290CS0gYmFkIGJ1aWxkcyBidXQgZmFpbHMgdG8gYm9vdAorIwl0ZXN0CS0gYmFkIGJvb3RzIGJ1dCBmYWlscyBhIHRlc3QKKyMKKyMgICBDT05GSUdfQklTRUNUIGlzIHRoZSBjb25maWcgdGhhdCBmYWlsZWQgdG8gYm9vdAorIworIyBFeGFtcGxlOgorIyAgIFRFU1RfU1RBUlQKKyMgICBURVNUX1RZUEUgPSBjb25maWdfYmlzZWN0CisjICAgQ09ORklHX0JJU0VDVF9UWVBFID0gYnVpbGQKKyMgICBDT05GSUdfQklTRUNUID0gL2hvbWUvdGVzdC+ib25maWctYmFkCisjICAgTUlOX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLW1pbgorIwpkaWZmIC0tZ2l0IGEvdXNyL0tjb25maWcgYi91c3IvS2NvbmZpZwppbmRleCBjMmM3ZmUyLi40NzgwZGVhIDEwMDY0NAotLS0gYS91c3IvS2NvbmZpZworKysgYi91c3IvS2NvbmZpZwpAQCAtNzIsNiArNzIsMTUgQEAKIAkgIFN1cHBvcnQgbG9hZGluZyBvZiBhIExaTUEgZW5jb2RlZCBpbml0aWFsIHJhbWRpc2sgb3IgY3BpbyBidWZmZXIKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBSRF9YWgorCWJvb2wgIlN1cHBvcnQgaW5pdGlhbCByYW1kaXNrcyBjb21wcmVzc2VkIHVzaW5nIFhaIiBpZiBFTUJFRERFRAorCWRlZmF1bHQgIUVNQkVEREVECisJZGVwZW5kcyBvbiBCTEtfREVWX0lOSVRSRAorCXNlbGVjdCBERUNPTVBSRVNTX1haCisJaGVscAorCSAgU3VwcG9ydCBsb2FkaW5nIG9mIGEgWFogZW5jb2RlZCBpbml0aWFsIHJhbWRpc2sgb3IgY3BpbyBidWZmZXIuCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgUkRfTFpPCiAJYm9vbCAiU3VwcG9ydCBpbml0aWFsIHJhbWRpc2tzIGNvbXByZXNzZWQgdXNpbmcgTFpPIiBpZiBFTUJFRERFRAogCWRlZmF1bHQgIUVNQkVEREVECkBAIC0xMzksNiArMTQ4LDE1IEBACiAJICB0aHJlZS4gQ29tcHJlc3Npb24gaXMgc2xvd2VzdC4gVGhlIGluaXRyYW1mcyBzaXplIGlzIGFib3V0IDMzJQogCSAgc21hbGxlciB3aXRoIExaTUEgaW4gY29tcGFyaXNvbiB0byBnemlwLgogCitjb25maWcgSU5JVFJBTUZTX0NPTVBSRVNTSU9OX1haCisJYm9vbCAiWFoiCisJZGVwZW5kcyBvbiBSRF9YWgorCWhlbHAKKwkgIFhaIHVzZXMgdGhlIExaTUEyIGFsZ29yaXRobS4gVGhlIGluaXRyYW1mcyBzaXplIGlzIGFib3V0IDMwJQorCSAgc21hbGxlciB3aXRoIFhaIGluIGNvbXBhcmlzb24gdG8gZ3ppcC4gRGVjb21wcmVzc2lvbiBzcGVlZAorCSAgaXMgYmV0dGVyIHRoYW4gdGhhdCBvZiBiemlwMiBidXQgd29yc2UgdGhhbiBnemlwIGFuZCBMWk8uCisJICBDb21wcmVzc2lvbiBpcyBzbG93LgorCiBjb25maWcgSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0xaTwogCWJvb2wgIkxaTyIKIAlkZXBlbmRzIG9uIFJEX0xaTwpkaWZmIC0tZ2l0IGEvdXNyL01ha2VmaWxlIGIvdXNyL01ha2VmaWxlCmluZGV4IDZmYWE0NDQuLjAyOWZmZTYgMTAwNjQ0Ci0tLSBhL3Vzci9NYWtlZmlsZQorKysgYi91c3IvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDkgQEAKICMgTHptYQogc3VmZml4XyQoQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9MWk1BKSAgID0gLmx6bWEKIAorIyBYWgorc3VmZml4XyQoQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9YWikgICAgID0gLnh6CisKICMgTHpvCiBzdWZmaXhfJChDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0xaTykgICA9IC5sem8KIApAQCAtNTAsNyArNTMsNyBAQAogcXVpZXRfY21kX2luaXRmcyA9IEdFTiAgICAgJEAKICAgICAgIGNtZF9pbml0ZnMgPSAkKGluaXRyYW1mcykgLW8gJEAgJChyYW1mcy1hcmdzKSAkKHJhbWZzLWlucHV0KQogCi10YXJnZXRzIDo9IGluaXRyYW1mc19kYXRhLmNwaW8uZ3ogaW5pdHJhbWZzX2RhdGEuY3Bpby5iejIgaW5pdHJhbWZzX2RhdGEuY3Bpby5sem1hIGluaXRyYW1mc19kYXRhLmNwaW8ubHpvIGluaXRyYW1mc19kYXRhLmNwaW8KK3RhcmdldHMgOj0gaW5pdHJhbWZzX2RhdGEuY3Bpby5neiBpbml0cmFtZnNfZGF0YS5jcGlvLmJ6MiBpbml0cmFtZnNfZGF0YS5jcGlvLmx6bWEgaW5pdHJhbWZzX2RhdGEuY3Bpby54eiBpbml0cmFtZnNfZGF0YS5jcGlvLmx6byBpbml0cmFtZnNfZGF0YS5jcGlvCiAjIGRvIG5vdCB0cnkgdG8gdXBkYXRlIGZpbGVzIGluY2x1ZGVkIGluIGluaXRyYW1mcwogJChkZXBzX2luaXRyYW1mcyk6IDsKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vS2NvbmZpZyBiL3ZpcnQva3ZtL0tjb25maWcKaW5kZXggN2YxMTc4Zi4uZjYzY2NiMCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vS2NvbmZpZworKysgYi92aXJ0L2t2bS9LY29uZmlnCkBAIC0xNSwzICsxNSw2IEBACiAKIGNvbmZpZyBLVk1fTU1JTwogICAgICAgIGJvb2wKKworY29uZmlnIEtWTV9BU1lOQ19QRgorICAgICAgIGJvb2wKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2Fzc2lnbmVkLWRldi5jIGIvdmlydC9rdm0vYXNzaWduZWQtZGV2LmMKaW5kZXggN2M5ODkyOC4uYWU3MmFlNiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vYXNzaWduZWQtZGV2LmMKKysrIGIvdmlydC9rdm0vYXNzaWduZWQtZGV2LmMKQEAgLTU1LDU4ICs1NSwzMSBAQAogCXJldHVybiBpbmRleDsKIH0KIAotc3RhdGljIHZvaWQga3ZtX2Fzc2lnbmVkX2Rldl9pbnRlcnJ1cHRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyBpcnFyZXR1cm5fdCBrdm1fYXNzaWduZWRfZGV2X3RocmVhZChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICphc3NpZ25lZF9kZXY7Ci0JaW50IGk7CisJc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICphc3NpZ25lZF9kZXYgPSBkZXZfaWQ7CisJdTMyIHZlY3RvcjsKKwlpbnQgaW5kZXg7CiAKLQlhc3NpZ25lZF9kZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsLAotCQkJCSAgICBpbnRlcnJ1cHRfd29yayk7CisJaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0RFVl9JUlFfSE9TVF9JTlRYKSB7CisJCXNwaW5fbG9jaygmYXNzaWduZWRfZGV2LT5pbnR4X2xvY2spOworCQlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKKwkJYXNzaWduZWRfZGV2LT5ob3N0X2lycV9kaXNhYmxlZCA9IHRydWU7CisJCXNwaW5fdW5sb2NrKCZhc3NpZ25lZF9kZXYtPmludHhfbG9jayk7CisJfQogCi0Jc3Bpbl9sb2NrX2lycSgmYXNzaWduZWRfZGV2LT5hc3NpZ25lZF9kZXZfbG9jayk7CiAJaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0RFVl9JUlFfSE9TVF9NU0lYKSB7Ci0JCXN0cnVjdCBrdm1fZ3Vlc3RfbXNpeF9lbnRyeSAqZ3Vlc3RfZW50cmllcyA9Ci0JCQlhc3NpZ25lZF9kZXYtPmd1ZXN0X21zaXhfZW50cmllczsKLQkJZm9yIChpID0gMDsgaSA8IGFzc2lnbmVkX2Rldi0+ZW50cmllc19ucjsgaSsrKSB7Ci0JCQlpZiAoIShndWVzdF9lbnRyaWVzW2ldLmZsYWdzICYKLQkJCQkJS1ZNX0FTU0lHTkVEX01TSVhfUEVORElORykpCi0JCQkJY29udGludWU7Ci0JCQlndWVzdF9lbnRyaWVzW2ldLmZsYWdzICY9IH5LVk1fQVNTSUdORURfTVNJWF9QRU5ESU5HOworCQlpbmRleCA9IGZpbmRfaW5kZXhfZnJvbV9ob3N0X2lycShhc3NpZ25lZF9kZXYsIGlycSk7CisJCWlmIChpbmRleCA+PSAwKSB7CisJCQl2ZWN0b3IgPSBhc3NpZ25lZF9kZXYtPgorCQkJCQlndWVzdF9tc2l4X2VudHJpZXNbaW5kZXhdLnZlY3RvcjsKIAkJCWt2bV9zZXRfaXJxKGFzc2lnbmVkX2Rldi0+a3ZtLAotCQkJCSAgICBhc3NpZ25lZF9kZXYtPmlycV9zb3VyY2VfaWQsCi0JCQkJICAgIGd1ZXN0X2VudHJpZXNbaV0udmVjdG9yLCAxKTsKKwkJCQkgICAgYXNzaWduZWRfZGV2LT5pcnFfc291cmNlX2lkLCB2ZWN0b3IsIDEpOwogCQl9CiAJfSBlbHNlCiAJCWt2bV9zZXRfaXJxKGFzc2lnbmVkX2Rldi0+a3ZtLCBhc3NpZ25lZF9kZXYtPmlycV9zb3VyY2VfaWQsCiAJCQkgICAgYXNzaWduZWRfZGV2LT5ndWVzdF9pcnEsIDEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZhc3NpZ25lZF9kZXYtPmFzc2lnbmVkX2Rldl9sb2NrKTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IGt2bV9hc3NpZ25lZF9kZXZfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmFzc2lnbmVkX2RldiA9Ci0JCShzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKikgZGV2X2lkOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFzc2lnbmVkX2Rldi0+YXNzaWduZWRfZGV2X2xvY2ssIGZsYWdzKTsKLQlpZiAoYXNzaWduZWRfZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fREVWX0lSUV9IT1NUX01TSVgpIHsKLQkJaW50IGluZGV4ID0gZmluZF9pbmRleF9mcm9tX2hvc3RfaXJxKGFzc2lnbmVkX2RldiwgaXJxKTsKLQkJaWYgKGluZGV4IDwgMCkKLQkJCWdvdG8gb3V0OwotCQlhc3NpZ25lZF9kZXYtPmd1ZXN0X21zaXhfZW50cmllc1tpbmRleF0uZmxhZ3MgfD0KLQkJCUtWTV9BU1NJR05FRF9NU0lYX1BFTkRJTkc7Ci0JfQotCi0Jc2NoZWR1bGVfd29yaygmYXNzaWduZWRfZGV2LT5pbnRlcnJ1cHRfd29yayk7Ci0KLQlpZiAoYXNzaWduZWRfZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fREVWX0lSUV9HVUVTVF9JTlRYKSB7Ci0JCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwotCQlhc3NpZ25lZF9kZXYtPmhvc3RfaXJxX2Rpc2FibGVkID0gdHJ1ZTsKLQl9Ci0KLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhc3NpZ25lZF9kZXYtPmFzc2lnbmVkX2Rldl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0xMTQsNyArODcsNiBAQAogc3RhdGljIHZvaWQga3ZtX2Fzc2lnbmVkX2Rldl9hY2tfaXJxKHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbikKIHsKIAlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmRldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGtpYW4tPmdzaSA9PSAtMSkKIAkJcmV0dXJuOwpAQCAtMTI3LDEyICs5OSwxMiBAQAogCS8qIFRoZSBndWVzdCBpcnEgbWF5IGJlIHNoYXJlZCBzbyB0aGlzIGFjayBtYXkgYmUKIAkgKiBmcm9tIGFub3RoZXIgZGV2aWNlLgogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmFzc2lnbmVkX2Rldl9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZkZXYtPmludHhfbG9jayk7CiAJaWYgKGRldi0+aG9zdF9pcnFfZGlzYWJsZWQpIHsKIAkJZW5hYmxlX2lycShkZXYtPmhvc3RfaXJxKTsKIAkJZGV2LT5ob3N0X2lycV9kaXNhYmxlZCA9IGZhbHNlOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmFzc2lnbmVkX2Rldl9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2soJmRldi0+aW50eF9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgZGVhc3NpZ25fZ3Vlc3RfaXJxKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTE0MSw2ICsxMTMsOSBAQAogCWt2bV91bnJlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoa3ZtLCAmYXNzaWduZWRfZGV2LT5hY2tfbm90aWZpZXIpOwogCWFzc2lnbmVkX2Rldi0+YWNrX25vdGlmaWVyLmdzaSA9IC0xOwogCisJa3ZtX3NldF9pcnEoYXNzaWduZWRfZGV2LT5rdm0sIGFzc2lnbmVkX2Rldi0+aXJxX3NvdXJjZV9pZCwKKwkJICAgIGFzc2lnbmVkX2Rldi0+Z3Vlc3RfaXJxLCAwKTsKKwogCWlmIChhc3NpZ25lZF9kZXYtPmlycV9zb3VyY2VfaWQgIT0gLTEpCiAJCWt2bV9mcmVlX2lycV9zb3VyY2VfaWQoa3ZtLCBhc3NpZ25lZF9kZXYtPmlycV9zb3VyY2VfaWQpOwogCWFzc2lnbmVkX2Rldi0+aXJxX3NvdXJjZV9pZCA9IC0xOwpAQCAtMTUyLDI4ICsxMjcsMTkgQEAKIAkJCSAgICAgIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqYXNzaWduZWRfZGV2KQogewogCS8qCi0JICogSW4ga3ZtX2ZyZWVfZGV2aWNlX2lycSwgY2FuY2VsX3dvcmtfc3luYyByZXR1cm4gdHJ1ZSBpZjoKLQkgKiAxLiB3b3JrIGlzIHNjaGVkdWxlZCwgYW5kIHRoZW4gY2FuY2VsbGVkLgotCSAqIDIuIHdvcmsgY2FsbGJhY2sgaXMgZXhlY3V0ZWQuCi0JICoKLQkgKiBUaGUgZmlyc3Qgb25lIGVuc3VyZWQgdGhhdCB0aGUgaXJxIGlzIGRpc2FibGVkIGFuZCBubyBtb3JlIGV2ZW50cwotCSAqIHdvdWxkIGhhcHBlbi4gQnV0IGZvciB0aGUgc2Vjb25kIG9uZSwgdGhlIGlycSBtYXkgYmUgZW5hYmxlZCAoZS5nLgotCSAqIGZvciBNU0kpLiBTbyB3ZSBkaXNhYmxlIGlycSBoZXJlIHRvIHByZXZlbnQgZnVydGhlciBldmVudHMuCisJICogV2UgZGlzYWJsZSBpcnEgaGVyZSB0byBwcmV2ZW50IGZ1cnRoZXIgZXZlbnRzLgogCSAqCiAJICogTm90aWNlIHRoaXMgbWF5YmUgcmVzdWx0IGluIG5lc3RlZCBkaXNhYmxlIGlmIHRoZSBpbnRlcnJ1cHQgdHlwZSBpcwogCSAqIElOVHgsIGJ1dCBpdCdzIE9LIGZvciB3ZSBhcmUgZ29pbmcgdG8gZnJlZSBpdC4KIAkgKgogCSAqIElmIHRoaXMgZnVuY3Rpb24gaXMgYSBwYXJ0IG9mIFZNIGRlc3Ryb3ksIHBsZWFzZSBlbnN1cmUgdGhhdCB0aWxsCiAJICogbm93LCB0aGUga3ZtIHN0YXRlIGlzIHN0aWxsIGxlZ2FsIGZvciBwcm9iYWJseSB3ZSBhbHNvIGhhdmUgdG8gd2FpdAotCSAqIGludGVycnVwdF93b3JrIGRvbmUuCisJICogb24gYSBjdXJyZW50bHkgcnVubmluZyBJUlEgaGFuZGxlci4KIAkgKi8KIAlpZiAoYXNzaWduZWRfZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fREVWX0lSUV9IT1NUX01TSVgpIHsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCBhc3NpZ25lZF9kZXYtPmVudHJpZXNfbnI7IGkrKykKLQkJCWRpc2FibGVfaXJxX25vc3luYyhhc3NpZ25lZF9kZXYtPgotCQkJCQkgICBob3N0X21zaXhfZW50cmllc1tpXS52ZWN0b3IpOwotCi0JCWNhbmNlbF93b3JrX3N5bmMoJmFzc2lnbmVkX2Rldi0+aW50ZXJydXB0X3dvcmspOworCQkJZGlzYWJsZV9pcnEoYXNzaWduZWRfZGV2LT5ob3N0X21zaXhfZW50cmllc1tpXS52ZWN0b3IpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBhc3NpZ25lZF9kZXYtPmVudHJpZXNfbnI7IGkrKykKIAkJCWZyZWVfaXJxKGFzc2lnbmVkX2Rldi0+aG9zdF9tc2l4X2VudHJpZXNbaV0udmVjdG9yLApAQCAtMTg1LDggKzE1MSw3IEBACiAJCXBjaV9kaXNhYmxlX21zaXgoYXNzaWduZWRfZGV2LT5kZXYpOwogCX0gZWxzZSB7CiAJCS8qIERlYWwgd2l0aCBNU0kgYW5kIElOVHggKi8KLQkJZGlzYWJsZV9pcnFfbm9zeW5jKGFzc2lnbmVkX2Rldi0+aG9zdF9pcnEpOwotCQljYW5jZWxfd29ya19zeW5jKCZhc3NpZ25lZF9kZXYtPmludGVycnVwdF93b3JrKTsKKwkJZGlzYWJsZV9pcnEoYXNzaWduZWRfZGV2LT5ob3N0X2lycSk7CiAKIAkJZnJlZV9pcnEoYXNzaWduZWRfZGV2LT5ob3N0X2lycSwgKHZvaWQgKilhc3NpZ25lZF9kZXYpOwogCkBAIC0yMzIsNyArMTk3LDggQEAKIHsKIAlrdm1fZnJlZV9hc3NpZ25lZF9pcnEoa3ZtLCBhc3NpZ25lZF9kZXYpOwogCi0JcGNpX3Jlc2V0X2Z1bmN0aW9uKGFzc2lnbmVkX2Rldi0+ZGV2KTsKKwlfX3BjaV9yZXNldF9mdW5jdGlvbihhc3NpZ25lZF9kZXYtPmRldik7CisJcGNpX3Jlc3RvcmVfc3RhdGUoYXNzaWduZWRfZGV2LT5kZXYpOwogCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhhc3NpZ25lZF9kZXYtPmRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGFzc2lnbmVkX2Rldi0+ZGV2KTsKQEAgLTI2NSw4ICsyMzEsOCBAQAogCSAqIG9uIHRoZSBzYW1lIGludGVycnVwdCBsaW5lIGlzIG5vdCBhIGhhcHB5IHNpdHVhdGlvbjogdGhlcmUKIAkgKiBhcmUgZ29pbmcgdG8gYmUgbG9uZyBkZWxheXMgaW4gYWNjZXB0aW5nLCBhY2tpbmcsIGV0Yy4KIAkgKi8KLQlpZiAocmVxdWVzdF9pcnEoZGV2LT5ob3N0X2lycSwga3ZtX2Fzc2lnbmVkX2Rldl9pbnRyLAotCQkJMCwgImt2bV9hc3NpZ25lZF9pbnR4X2RldmljZSIsICh2b2lkICopZGV2KSkKKwlpZiAocmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LT5ob3N0X2lycSwgTlVMTCwga3ZtX2Fzc2lnbmVkX2Rldl90aHJlYWQsCisJCQkJIElSUUZfT05FU0hPVCwgZGV2LT5pcnFfbmFtZSwgKHZvaWQgKilkZXYpKQogCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gMDsKIH0KQEAgLTI4NCw4ICsyNTAsOCBAQAogCX0KIAogCWRldi0+aG9zdF9pcnEgPSBkZXYtPmRldi0+aXJxOwotCWlmIChyZXF1ZXN0X2lycShkZXYtPmhvc3RfaXJxLCBrdm1fYXNzaWduZWRfZGV2X2ludHIsIDAsCi0JCQkia3ZtX2Fzc2lnbmVkX21zaV9kZXZpY2UiLCAodm9pZCAqKWRldikpIHsKKwlpZiAocmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LT5ob3N0X2lycSwgTlVMTCwga3ZtX2Fzc2lnbmVkX2Rldl90aHJlYWQsCisJCQkJIDAsIGRldi0+aXJxX25hbWUsICh2b2lkICopZGV2KSkgewogCQlwY2lfZGlzYWJsZV9tc2koZGV2LT5kZXYpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0zMTAsMTAgKzI3Niw5IEBACiAJCXJldHVybiByOwogCiAJZm9yIChpID0gMDsgaSA8IGRldi0+ZW50cmllc19ucjsgaSsrKSB7Ci0JCXIgPSByZXF1ZXN0X2lycShkZXYtPmhvc3RfbXNpeF9lbnRyaWVzW2ldLnZlY3RvciwKLQkJCQlrdm1fYXNzaWduZWRfZGV2X2ludHIsIDAsCi0JCQkJImt2bV9hc3NpZ25lZF9tc2l4X2RldmljZSIsCi0JCQkJKHZvaWQgKilkZXYpOworCQlyID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LT5ob3N0X21zaXhfZW50cmllc1tpXS52ZWN0b3IsCisJCQkJCSBOVUxMLCBrdm1fYXNzaWduZWRfZGV2X3RocmVhZCwKKwkJCQkJIDAsIGRldi0+aXJxX25hbWUsICh2b2lkICopZGV2KTsKIAkJaWYgKHIpCiAJCQlnb3RvIGVycjsKIAl9CkBAIC0zNzAsNiArMzM1LDkgQEAKIAlpZiAoZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fREVWX0lSUV9IT1NUX01BU0spCiAJCXJldHVybiByOwogCisJc25wcmludGYoZGV2LT5pcnFfbmFtZSwgc2l6ZW9mKGRldi0+aXJxX25hbWUpLCAia3ZtOiVzIiwKKwkJIHBjaV9uYW1lKGRldi0+ZGV2KSk7CisKIAlzd2l0Y2ggKGhvc3RfaXJxX3R5cGUpIHsKIAljYXNlIEtWTV9ERVZfSVJRX0hPU1RfSU5UWDoKIAkJciA9IGFzc2lnbmVkX2RldmljZV9lbmFibGVfaG9zdF9pbnR4KGt2bSwgZGV2KTsKQEAgLTU0Nyw2ICs1MTUsNyBAQAogCX0KIAogCXBjaV9yZXNldF9mdW5jdGlvbihkZXYpOworCXBjaV9zYXZlX3N0YXRlKGRldik7CiAKIAltYXRjaC0+YXNzaWduZWRfZGV2X2lkID0gYXNzaWduZWRfZGV2LT5hc3NpZ25lZF9kZXZfaWQ7CiAJbWF0Y2gtPmhvc3Rfc2VnbnIgPSBhc3NpZ25lZF9kZXYtPnNlZ25yOwpAQCAtNTU0LDEyICs1MjMsMTAgQEAKIAltYXRjaC0+aG9zdF9kZXZmbiA9IGFzc2lnbmVkX2Rldi0+ZGV2Zm47CiAJbWF0Y2gtPmZsYWdzID0gYXNzaWduZWRfZGV2LT5mbGFnczsKIAltYXRjaC0+ZGV2ID0gZGV2OwotCXNwaW5fbG9ja19pbml0KCZtYXRjaC0+YXNzaWduZWRfZGV2X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZtYXRjaC0+aW50eF9sb2NrKTsKIAltYXRjaC0+aXJxX3NvdXJjZV9pZCA9IC0xOwogCW1hdGNoLT5rdm0gPSBrdm07CiAJbWF0Y2gtPmFja19ub3RpZmllci5pcnFfYWNrZWQgPSBrdm1fYXNzaWduZWRfZGV2X2Fja19pcnE7Ci0JSU5JVF9XT1JLKCZtYXRjaC0+aW50ZXJydXB0X3dvcmssCi0JCSAga3ZtX2Fzc2lnbmVkX2Rldl9pbnRlcnJ1cHRfd29ya19oYW5kbGVyKTsKIAogCWxpc3RfYWRkKCZtYXRjaC0+bGlzdCwgJmt2bS0+YXJjaC5hc3NpZ25lZF9kZXZfaGVhZCk7CiAKQEAgLTU3OSw2ICs1NDYsNyBAQAogCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIAlyZXR1cm4gcjsKIG91dF9saXN0X2RlbDoKKwlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOwogCWxpc3RfZGVsKCZtYXRjaC0+bGlzdCk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOwogb3V0X2Rpc2FibGU6CkBAIC02NTEsOSArNjE5LDkgQEAKIAkJCXIgPSAtRU5PTUVNOwogCQkJZ290byBtc2l4X25yX291dDsKIAkJfQotCQlhZGV2LT5ndWVzdF9tc2l4X2VudHJpZXMgPSBremFsbG9jKAotCQkJCXNpemVvZihzdHJ1Y3Qga3ZtX2d1ZXN0X21zaXhfZW50cnkpICoKLQkJCQllbnRyeV9uci0+ZW50cnlfbnIsIEdGUF9LRVJORUwpOworCQlhZGV2LT5ndWVzdF9tc2l4X2VudHJpZXMgPQorCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpICogZW50cnlfbnItPmVudHJ5X25yLAorCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIWFkZXYtPmd1ZXN0X21zaXhfZW50cmllcykgewogCQkJa2ZyZWUoYWRldi0+aG9zdF9tc2l4X2VudHJpZXMpOwogCQkJciA9IC1FTk9NRU07CkBAIC03MDYsNyArNjc0LDcgQEAKIAkJCQkgIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwotCWludCByID0gLUVOT1RUWTsKKwlpbnQgcjsKIAogCXN3aXRjaCAoaW9jdGwpIHsKIAljYXNlIEtWTV9BU1NJR05fUENJX0RFVklDRTogewpAQCAtNzI0LDcgKzY5Miw2IEBACiAJCXIgPSAtRU9QTk9UU1VQUDsKIAkJYnJlYWs7CiAJfQotI2lmZGVmIEtWTV9DQVBfQVNTSUdOX0RFVl9JUlEKIAljYXNlIEtWTV9BU1NJR05fREVWX0lSUTogewogCQlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2lycSBhc3NpZ25lZF9pcnE7CiAKQEAgLTc0Nyw4ICs3MTQsNiBAQAogCQkJZ290byBvdXQ7CiAJCWJyZWFrOwogCX0KLSNlbmRpZgotI2lmZGVmIEtWTV9DQVBfREVWSUNFX0RFQVNTSUdOTUVOVAogCWNhc2UgS1ZNX0RFQVNTSUdOX1BDSV9ERVZJQ0U6IHsKIAkJc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2IGFzc2lnbmVkX2RldjsKIApAQCAtNzYwLDcgKzcyNSw2IEBACiAJCQlnb3RvIG91dDsKIAkJYnJlYWs7CiAJfQotI2VuZGlmCiAjaWZkZWYgS1ZNX0NBUF9JUlFfUk9VVElORwogCWNhc2UgS1ZNX1NFVF9HU0lfUk9VVElORzogewogCQlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nIHJvdXRpbmc7CkBAIC04MTMsNiArNzc3LDkgQEAKIAkJYnJlYWs7CiAJfQogI2VuZGlmCisJZGVmYXVsdDoKKwkJciA9IC1FTk9UVFk7CisJCWJyZWFrOwogCX0KIG91dDoKIAlyZXR1cm4gcjsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2FzeW5jX3BmLmMgYi92aXJ0L2t2bS9hc3luY19wZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MjY4YjQKLS0tIC9kZXYvbnVsbAorKysgYi92aXJ0L2t2bS9hc3luY19wZi5jCkBAIC0wLDAgKzEsMjE2IEBACisvKgorICoga3ZtIGFzeW5jaHJvbm91cyBmYXVsdCBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IDIwMTAgUmVkIEhhdCwgSW5jLgorICoKKyAqIEF1dGhvcjoKKyAqICAgICAgR2xlYiBOYXRhcG92IDxnbGViQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW11X2NvbnRleHQuaD4KKworI2luY2x1ZGUgImFzeW5jX3BmLmgiCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2t2bS5oPgorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmFzeW5jX3BmX2NhY2hlOworCitpbnQga3ZtX2FzeW5jX3BmX2luaXQodm9pZCkKK3sKKwlhc3luY19wZl9jYWNoZSA9IEtNRU1fQ0FDSEUoa3ZtX2FzeW5jX3BmLCAwKTsKKworCWlmICghYXN5bmNfcGZfY2FjaGUpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQga3ZtX2FzeW5jX3BmX2RlaW5pdCh2b2lkKQoreworCWlmIChhc3luY19wZl9jYWNoZSkKKwkJa21lbV9jYWNoZV9kZXN0cm95KGFzeW5jX3BmX2NhY2hlKTsKKwlhc3luY19wZl9jYWNoZSA9IE5VTEw7Cit9CisKK3ZvaWQga3ZtX2FzeW5jX3BmX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJSU5JVF9MSVNUX0hFQUQoJnZjcHUtPmFzeW5jX3BmLmRvbmUpOworCUlOSVRfTElTVF9IRUFEKCZ2Y3B1LT5hc3luY19wZi5xdWV1ZSk7CisJc3Bpbl9sb2NrX2luaXQoJnZjcHUtPmFzeW5jX3BmLmxvY2spOworfQorCitzdGF0aWMgdm9pZCBhc3luY19wZl9leGVjdXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CisJc3RydWN0IGt2bV9hc3luY19wZiAqYXBmID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBrdm1fYXN5bmNfcGYsIHdvcmspOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gYXBmLT5tbTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBhcGYtPnZjcHU7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gYXBmLT5hZGRyOworCWd2YV90IGd2YSA9IGFwZi0+Z3ZhOworCisJbWlnaHRfc2xlZXAoKTsKKworCXVzZV9tbShtbSk7CisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCBhZGRyLCAxLCAxLCAwLCAmcGFnZSwgTlVMTCk7CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwl1bnVzZV9tbShtbSk7CisKKwlzcGluX2xvY2soJnZjcHUtPmFzeW5jX3BmLmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmFwZi0+bGluaywgJnZjcHUtPmFzeW5jX3BmLmRvbmUpOworCWFwZi0+cGFnZSA9IHBhZ2U7CisJYXBmLT5kb25lID0gdHJ1ZTsKKwlzcGluX3VubG9jaygmdmNwdS0+YXN5bmNfcGYubG9jayk7CisKKwkvKgorCSAqIGFwZiBtYXkgYmUgZnJlZWQgYnkga3ZtX2NoZWNrX2FzeW5jX3BmX2NvbXBsZXRpb24oKSBhZnRlcgorCSAqIHRoaXMgcG9pbnQKKwkgKi8KKworCXRyYWNlX2t2bV9hc3luY19wZl9jb21wbGV0ZWQoYWRkciwgcGFnZSwgZ3ZhKTsKKworCWlmICh3YWl0cXVldWVfYWN0aXZlKCZ2Y3B1LT53cSkpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdmNwdS0+d3EpOworCisJbW1kcm9wKG1tKTsKKwlrdm1fcHV0X2t2bSh2Y3B1LT5rdm0pOworfQorCit2b2lkIGt2bV9jbGVhcl9hc3luY19wZl9jb21wbGV0aW9uX3F1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwkvKiBjYW5jZWwgb3V0c3RhbmRpbmcgd29yayBxdWV1ZSBpdGVtICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ2Y3B1LT5hc3luY19wZi5xdWV1ZSkpIHsKKwkJc3RydWN0IGt2bV9hc3luY19wZiAqd29yayA9CisJCQlsaXN0X2VudHJ5KHZjcHUtPmFzeW5jX3BmLnF1ZXVlLm5leHQsCisJCQkJICAgdHlwZW9mKCp3b3JrKSwgcXVldWUpOworCQljYW5jZWxfd29ya19zeW5jKCZ3b3JrLT53b3JrKTsKKwkJbGlzdF9kZWwoJndvcmstPnF1ZXVlKTsKKwkJaWYgKCF3b3JrLT5kb25lKSAvKiB3b3JrIHdhcyBjYW5jZWxlZCAqLworCQkJa21lbV9jYWNoZV9mcmVlKGFzeW5jX3BmX2NhY2hlLCB3b3JrKTsKKwl9CisKKwlzcGluX2xvY2soJnZjcHUtPmFzeW5jX3BmLmxvY2spOworCXdoaWxlICghbGlzdF9lbXB0eSgmdmNwdS0+YXN5bmNfcGYuZG9uZSkpIHsKKwkJc3RydWN0IGt2bV9hc3luY19wZiAqd29yayA9CisJCQlsaXN0X2VudHJ5KHZjcHUtPmFzeW5jX3BmLmRvbmUubmV4dCwKKwkJCQkgICB0eXBlb2YoKndvcmspLCBsaW5rKTsKKwkJbGlzdF9kZWwoJndvcmstPmxpbmspOworCQlpZiAod29yay0+cGFnZSkKKwkJCXB1dF9wYWdlKHdvcmstPnBhZ2UpOworCQlrbWVtX2NhY2hlX2ZyZWUoYXN5bmNfcGZfY2FjaGUsIHdvcmspOworCX0KKwlzcGluX3VubG9jaygmdmNwdS0+YXN5bmNfcGYubG9jayk7CisKKwl2Y3B1LT5hc3luY19wZi5xdWV1ZWQgPSAwOworfQorCit2b2lkIGt2bV9jaGVja19hc3luY19wZl9jb21wbGV0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtX2FzeW5jX3BmICp3b3JrOworCisJd2hpbGUgKCFsaXN0X2VtcHR5X2NhcmVmdWwoJnZjcHUtPmFzeW5jX3BmLmRvbmUpICYmCisJICAgICAga3ZtX2FyY2hfY2FuX2luamVjdF9hc3luY19wYWdlX3ByZXNlbnQodmNwdSkpIHsKKwkJc3Bpbl9sb2NrKCZ2Y3B1LT5hc3luY19wZi5sb2NrKTsKKwkJd29yayA9IGxpc3RfZmlyc3RfZW50cnkoJnZjcHUtPmFzeW5jX3BmLmRvbmUsIHR5cGVvZigqd29yayksCisJCQkJCSAgICAgIGxpbmspOworCQlsaXN0X2RlbCgmd29yay0+bGluayk7CisJCXNwaW5fdW5sb2NrKCZ2Y3B1LT5hc3luY19wZi5sb2NrKTsKKworCQlpZiAod29yay0+cGFnZSkKKwkJCWt2bV9hcmNoX2FzeW5jX3BhZ2VfcmVhZHkodmNwdSwgd29yayk7CisJCWt2bV9hcmNoX2FzeW5jX3BhZ2VfcHJlc2VudCh2Y3B1LCB3b3JrKTsKKworCQlsaXN0X2RlbCgmd29yay0+cXVldWUpOworCQl2Y3B1LT5hc3luY19wZi5xdWV1ZWQtLTsKKwkJaWYgKHdvcmstPnBhZ2UpCisJCQlwdXRfcGFnZSh3b3JrLT5wYWdlKTsKKwkJa21lbV9jYWNoZV9mcmVlKGFzeW5jX3BmX2NhY2hlLCB3b3JrKTsKKwl9Cit9CisKK2ludCBrdm1fc2V0dXBfYXN5bmNfcGYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIGdmbl90IGdmbiwKKwkJICAgICAgIHN0cnVjdCBrdm1fYXJjaF9hc3luY19wZiAqYXJjaCkKK3sKKwlzdHJ1Y3Qga3ZtX2FzeW5jX3BmICp3b3JrOworCisJaWYgKHZjcHUtPmFzeW5jX3BmLnF1ZXVlZCA+PSBBU1lOQ19QRl9QRVJfVkNQVSkKKwkJcmV0dXJuIDA7CisKKwkvKiBzZXR1cCBkZWxheWVkIHdvcmsgKi8KKworCS8qCisJICogZG8gYWxsb2Mgbm93YWl0IHNpbmNlIGlmIHdlIGFyZSBnb2luZyB0byBzbGVlcCBhbnl3YXkgd2UKKwkgKiBtYXkgYXMgd2VsbCBzbGVlcCBmYXVsdGluZyBpbiBwYWdlCisJICovCisJd29yayA9IGttZW1fY2FjaGVfemFsbG9jKGFzeW5jX3BmX2NhY2hlLCBHRlBfTk9XQUlUKTsKKwlpZiAoIXdvcmspCisJCXJldHVybiAwOworCisJd29yay0+cGFnZSA9IE5VTEw7CisJd29yay0+ZG9uZSA9IGZhbHNlOworCXdvcmstPnZjcHUgPSB2Y3B1OworCXdvcmstPmd2YSA9IGd2YTsKKwl3b3JrLT5hZGRyID0gZ2ZuX3RvX2h2YSh2Y3B1LT5rdm0sIGdmbik7CisJd29yay0+YXJjaCA9ICphcmNoOworCXdvcmstPm1tID0gY3VycmVudC0+bW07CisJYXRvbWljX2luYygmd29yay0+bW0tPm1tX2NvdW50KTsKKwlrdm1fZ2V0X2t2bSh3b3JrLT52Y3B1LT5rdm0pOworCisJLyogdGhpcyBjYW4ndCByZWFsbHkgaGFwcGVuIG90aGVyd2lzZSBnZm5fdG9fcGZuX2FzeW5jCisJICAgd291bGQgc3VjY2VlZCAqLworCWlmICh1bmxpa2VseShrdm1faXNfZXJyb3JfaHZhKHdvcmstPmFkZHIpKSkKKwkJZ290byByZXRyeV9zeW5jOworCisJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCBhc3luY19wZl9leGVjdXRlKTsKKwlpZiAoIXNjaGVkdWxlX3dvcmsoJndvcmstPndvcmspKQorCQlnb3RvIHJldHJ5X3N5bmM7CisKKwlsaXN0X2FkZF90YWlsKCZ3b3JrLT5xdWV1ZSwgJnZjcHUtPmFzeW5jX3BmLnF1ZXVlKTsKKwl2Y3B1LT5hc3luY19wZi5xdWV1ZWQrKzsKKwlrdm1fYXJjaF9hc3luY19wYWdlX25vdF9wcmVzZW50KHZjcHUsIHdvcmspOworCXJldHVybiAxOworcmV0cnlfc3luYzoKKwlrdm1fcHV0X2t2bSh3b3JrLT52Y3B1LT5rdm0pOworCW1tZHJvcCh3b3JrLT5tbSk7CisJa21lbV9jYWNoZV9mcmVlKGFzeW5jX3BmX2NhY2hlLCB3b3JrKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGt2bV9hc3luY19wZl93YWtldXBfYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtX2FzeW5jX3BmICp3b3JrOworCisJaWYgKCFsaXN0X2VtcHR5X2NhcmVmdWwoJnZjcHUtPmFzeW5jX3BmLmRvbmUpKQorCQlyZXR1cm4gMDsKKworCXdvcmsgPSBrbWVtX2NhY2hlX3phbGxvYyhhc3luY19wZl9jYWNoZSwgR0ZQX0FUT01JQyk7CisJaWYgKCF3b3JrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdvcmstPnBhZ2UgPSBiYWRfcGFnZTsKKwlnZXRfcGFnZShiYWRfcGFnZSk7CisJSU5JVF9MSVNUX0hFQUQoJndvcmstPnF1ZXVlKTsgLyogZm9yIGxpc3RfZGVsIHRvIHdvcmsgKi8KKworCXNwaW5fbG9jaygmdmNwdS0+YXN5bmNfcGYubG9jayk7CisJbGlzdF9hZGRfdGFpbCgmd29yay0+bGluaywgJnZjcHUtPmFzeW5jX3BmLmRvbmUpOworCXNwaW5fdW5sb2NrKCZ2Y3B1LT5hc3luY19wZi5sb2NrKTsKKworCXZjcHUtPmFzeW5jX3BmLnF1ZXVlZCsrOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vYXN5bmNfcGYuaCBiL3ZpcnQva3ZtL2FzeW5jX3BmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdlZjY0NAotLS0gL2Rldi9udWxsCisrKyBiL3ZpcnQva3ZtL2FzeW5jX3BmLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIGt2bSBhc3luY2hyb25vdXMgZmF1bHQgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAyMDEwIFJlZCBIYXQsIEluYy4KKyAqCisgKiBBdXRob3I6CisgKiAgICAgIEdsZWIgTmF0YXBvdiA8Z2xlYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0tWTV9BU1lOQ19QRl9IX18KKyNkZWZpbmUgX19LVk1fQVNZTkNfUEZfSF9fCisKKyNpZmRlZiBDT05GSUdfS1ZNX0FTWU5DX1BGCitpbnQga3ZtX2FzeW5jX3BmX2luaXQodm9pZCk7Cit2b2lkIGt2bV9hc3luY19wZl9kZWluaXQodm9pZCk7Cit2b2lkIGt2bV9hc3luY19wZl92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKyNlbHNlCisjZGVmaW5lIGt2bV9hc3luY19wZl9pbml0KCkgKDApCisjZGVmaW5lIGt2bV9hc3luY19wZl9kZWluaXQoKSBkb3t9d2hpbGUoMCkKKyNkZWZpbmUga3ZtX2FzeW5jX3BmX3ZjcHVfaW5pdChDKSBkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2V2ZW50ZmQuYyBiL3ZpcnQva3ZtL2V2ZW50ZmQuYwppbmRleCBjMWYxZTNjLi4yY2E0NTM1IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9ldmVudGZkLmMKKysrIGIvdmlydC9rdm0vZXZlbnRmZC5jCkBAIC00NCwxNCArNDQsMTkgQEAKICAqLwogCiBzdHJ1Y3QgX2lycWZkIHsKLQlzdHJ1Y3Qga3ZtICAgICAgICAgICAgICAgKmt2bTsKLQlzdHJ1Y3QgZXZlbnRmZF9jdHggICAgICAgKmV2ZW50ZmQ7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgICBnc2k7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICBsaXN0OwotCXBvbGxfdGFibGUgICAgICAgICAgICAgICAgcHQ7Ci0Jd2FpdF9xdWV1ZV90ICAgICAgICAgICAgICB3YWl0OwotCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgaW5qZWN0OwotCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgc2h1dGRvd247CisJLyogVXNlZCBmb3IgTVNJIGZhc3QtcGF0aCAqLworCXN0cnVjdCBrdm0gKmt2bTsKKwl3YWl0X3F1ZXVlX3Qgd2FpdDsKKwkvKiBVcGRhdGUgc2lkZSBpcyBwcm90ZWN0ZWQgYnkgaXJxZmRzLmxvY2sgKi8KKwlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSBfX3JjdSAqaXJxX2VudHJ5OworCS8qIFVzZWQgZm9yIGxldmVsIElSUSBmYXN0LXBhdGggKi8KKwlpbnQgZ3NpOworCXN0cnVjdCB3b3JrX3N0cnVjdCBpbmplY3Q7CisJLyogVXNlZCBmb3Igc2V0dXAvc2h1dGRvd24gKi8KKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmV2ZW50ZmQ7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXBvbGxfdGFibGUgcHQ7CisJc3RydWN0IHdvcmtfc3RydWN0IHNodXRkb3duOwogfTsKIAogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICppcnFmZF9jbGVhbnVwX3dxOwpAQCAtMTI1LDE0ICsxMzAsMjIgQEAKIHsKIAlzdHJ1Y3QgX2lycWZkICppcnFmZCA9IGNvbnRhaW5lcl9vZih3YWl0LCBzdHJ1Y3QgX2lycWZkLCB3YWl0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gKHVuc2lnbmVkIGxvbmcpa2V5OworCXN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICppcnE7CisJc3RydWN0IGt2bSAqa3ZtID0gaXJxZmQtPmt2bTsKIAotCWlmIChmbGFncyAmIFBPTExJTikKKwlpZiAoZmxhZ3MgJiBQT0xMSU4pIHsKKwkJcmN1X3JlYWRfbG9jaygpOworCQlpcnEgPSByY3VfZGVyZWZlcmVuY2UoaXJxZmQtPmlycV9lbnRyeSk7CiAJCS8qIEFuIGV2ZW50IGhhcyBiZWVuIHNpZ25hbGVkLCBpbmplY3QgYW4gaW50ZXJydXB0ICovCi0JCXNjaGVkdWxlX3dvcmsoJmlycWZkLT5pbmplY3QpOworCQlpZiAoaXJxKQorCQkJa3ZtX3NldF9tc2koaXJxLCBrdm0sIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRCwgMSk7CisJCWVsc2UKKwkJCXNjaGVkdWxlX3dvcmsoJmlycWZkLT5pbmplY3QpOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CiAKIAlpZiAoZmxhZ3MgJiBQT0xMSFVQKSB7CiAJCS8qIFRoZSBldmVudGZkIGlzIGNsb3NpbmcsIGRldGFjaCBmcm9tIEtWTSAqLwotCQlzdHJ1Y3Qga3ZtICprdm0gPSBpcnFmZC0+a3ZtOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZrdm0tPmlycWZkcy5sb2NrLCBmbGFncyk7CkBAIC0xNjMsOSArMTc2LDMxIEBACiAJYWRkX3dhaXRfcXVldWUod3FoLCAmaXJxZmQtPndhaXQpOwogfQogCisvKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBpcnFmZHMubG9jayAqLworc3RhdGljIHZvaWQgaXJxZmRfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IF9pcnFmZCAqaXJxZmQsCisJCQkgc3RydWN0IGt2bV9pcnFfcm91dGluZ190YWJsZSAqaXJxX3J0KQoreworCXN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplOworCXN0cnVjdCBobGlzdF9ub2RlICpuOworCisJaWYgKGlycWZkLT5nc2kgPj0gaXJxX3J0LT5ucl9ydF9lbnRyaWVzKSB7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihpcnFmZC0+aXJxX2VudHJ5LCBOVUxMKTsKKwkJcmV0dXJuOworCX0KKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG4sICZpcnFfcnQtPm1hcFtpcnFmZC0+Z3NpXSwgbGluaykgeworCQkvKiBPbmx5IGZhc3QtcGF0aCBNU0kuICovCisJCWlmIChlLT50eXBlID09IEtWTV9JUlFfUk9VVElOR19NU0kpCisJCQlyY3VfYXNzaWduX3BvaW50ZXIoaXJxZmQtPmlycV9lbnRyeSwgZSk7CisJCWVsc2UKKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihpcnFmZC0+aXJxX2VudHJ5LCBOVUxMKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQKIGt2bV9pcnFmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgZmQsIGludCBnc2kpCiB7CisJc3RydWN0IGt2bV9pcnFfcm91dGluZ190YWJsZSAqaXJxX3J0OwogCXN0cnVjdCBfaXJxZmQgKmlycWZkLCAqdG1wOwogCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKIAlzdHJ1Y3QgZXZlbnRmZF9jdHggKmV2ZW50ZmQgPSBOVUxMOwpAQCAtMjE1LDYgKzI1MCwxMCBAQAogCQlnb3RvIGZhaWw7CiAJfQogCisJaXJxX3J0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChrdm0tPmlycV9yb3V0aW5nLAorCQkJCQkgICBsb2NrZGVwX2lzX2hlbGQoJmt2bS0+aXJxZmRzLmxvY2spKTsKKwlpcnFmZF91cGRhdGUoa3ZtLCBpcnFmZCwgaXJxX3J0KTsKKwogCWV2ZW50cyA9IGZpbGUtPmZfb3AtPnBvbGwoZmlsZSwgJmlycWZkLT5wdCk7CiAKIAlsaXN0X2FkZF90YWlsKCZpcnFmZC0+bGlzdCwgJmt2bS0+aXJxZmRzLml0ZW1zKTsKQEAgLTI3MSw4ICszMTAsMTcgQEAKIAlzcGluX2xvY2tfaXJxKCZrdm0tPmlycWZkcy5sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpcnFmZCwgdG1wLCAma3ZtLT5pcnFmZHMuaXRlbXMsIGxpc3QpIHsKLQkJaWYgKGlycWZkLT5ldmVudGZkID09IGV2ZW50ZmQgJiYgaXJxZmQtPmdzaSA9PSBnc2kpCisJCWlmIChpcnFmZC0+ZXZlbnRmZCA9PSBldmVudGZkICYmIGlycWZkLT5nc2kgPT0gZ3NpKSB7CisJCQkvKgorCQkJICogVGhpcyByY3VfYXNzaWduX3BvaW50ZXIgaXMgbmVlZGVkIGZvciB3aGVuCisJCQkgKiBhbm90aGVyIHRocmVhZCBjYWxscyBrdm1faXJxZmRfdXBkYXRlIGJlZm9yZQorCQkJICogd2UgZmx1c2ggd29ya3F1ZXVlIGJlbG93LgorCQkJICogSXQgaXMgcGFpcmVkIHdpdGggc3luY2hyb25pemVfcmN1IGRvbmUgYnkgY2FsbGVyCisJCQkgKiBvZiB0aGF0IGZ1bmN0aW9uLgorCQkJICovCisJCQlyY3VfYXNzaWduX3BvaW50ZXIoaXJxZmQtPmlycV9lbnRyeSwgTlVMTCk7CiAJCQlpcnFmZF9kZWFjdGl2YXRlKGlycWZkKTsKKwkJfQogCX0KIAogCXNwaW5fdW5sb2NrX2lycSgma3ZtLT5pcnFmZHMubG9jayk7CkBAIC0zMjIsNiArMzcwLDI1IEBACiB9CiAKIC8qCisgKiBDaGFuZ2UgaXJxX3JvdXRpbmcgYW5kIGlycWZkLgorICogQ2FsbGVyIG11c3QgaW52b2tlIHN5bmNocm9uaXplX3JjdSBhZnRlcndhcmRzLgorICovCit2b2lkIGt2bV9pcnFfcm91dGluZ191cGRhdGUoc3RydWN0IGt2bSAqa3ZtLAorCQkJICAgIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfdGFibGUgKmlycV9ydCkKK3sKKwlzdHJ1Y3QgX2lycWZkICppcnFmZDsKKworCXNwaW5fbG9ja19pcnEoJmt2bS0+aXJxZmRzLmxvY2spOworCisJcmN1X2Fzc2lnbl9wb2ludGVyKGt2bS0+aXJxX3JvdXRpbmcsIGlycV9ydCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlycWZkLCAma3ZtLT5pcnFmZHMuaXRlbXMsIGxpc3QpCisJCWlycWZkX3VwZGF0ZShrdm0sIGlycWZkLCBpcnFfcnQpOworCisJc3Bpbl91bmxvY2tfaXJxKCZrdm0tPmlycWZkcy5sb2NrKTsKK30KKworLyoKICAqIGNyZWF0ZSBhIGhvc3Qtd2lkZSB3b3JrcXVldWUgZm9yIGlzc3VpbmcgZGVmZXJyZWQgc2h1dGRvd24gcmVxdWVzdHMKICAqIGFnZ3JlZ2F0ZWQgZnJvbSBhbGwgdm0qIGluc3RhbmNlcy4gV2UgbmVlZCBvdXIgb3duIGlzb2xhdGVkIHNpbmdsZS10aHJlYWQKICAqIHF1ZXVlIHRvIHByZXZlbnQgZGVhZGxvY2sgYWdhaW5zdCBmbHVzaGluZyB0aGUgbm9ybWFsIHdvcmstcXVldWUuCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pcnFfY29tbS5jIGIvdmlydC9rdm0vaXJxX2NvbW0uYwppbmRleCA4ZWRjYTkxLi45ZjYxNGI0IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pcnFfY29tbS5jCisrKyBiL3ZpcnQva3ZtL2lycV9jb21tLmMKQEAgLTExNCw4ICsxMTQsOCBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgaW50IGt2bV9zZXRfbXNpKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLAotCQkgICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsKQoraW50IGt2bV9zZXRfbXNpKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLAorCQlzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwpCiB7CiAJc3RydWN0IGt2bV9sYXBpY19pcnEgaXJxOwogCkBAIC00MDksOCArNDA5LDkgQEAKIAogCW11dGV4X2xvY2soJmt2bS0+aXJxX2xvY2spOwogCW9sZCA9IGt2bS0+aXJxX3JvdXRpbmc7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGt2bS0+aXJxX3JvdXRpbmcsIG5ldyk7CisJa3ZtX2lycV9yb3V0aW5nX3VwZGF0ZShrdm0sIG5ldyk7CiAJbXV0ZXhfdW5sb2NrKCZrdm0tPmlycV9sb2NrKTsKKwogCXN5bmNocm9uaXplX3JjdSgpOwogCiAJbmV3ID0gb2xkOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNTIyNTA1Mi4uN2Y2ODYyNSAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xlLmg+CiAKICNpbmNsdWRlICJjb2FsZXNjZWRfbW1pby5oIgorI2luY2x1ZGUgImFzeW5jX3BmLmgiCiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9rdm0uaD4KQEAgLTg5LDcgKzkwLDggQEAKIAogc3RhdGljIHZvaWQga3ZtX2lvX2J1c19kZXN0cm95KHN0cnVjdCBrdm1faW9fYnVzICpidXMpOwogCi1zdGF0aWMgYm9vbCBrdm1fcmVib290aW5nOworYm9vbCBrdm1fcmVib290aW5nOworRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3JlYm9vdGluZyk7CiAKIHN0YXRpYyBib29sIGxhcmdlcGFnZXNfZW5hYmxlZCA9IHRydWU7CiAKQEAgLTE2Nyw4ICsxNjksMTIgQEAKIAogdm9pZCBrdm1fZmx1c2hfcmVtb3RlX3RsYnMoc3RydWN0IGt2bSAqa3ZtKQogeworCWludCBkaXJ0eV9jb3VudCA9IGt2bS0+dGxic19kaXJ0eTsKKworCXNtcF9tYigpOwogCWlmIChtYWtlX2FsbF9jcHVzX3JlcXVlc3Qoa3ZtLCBLVk1fUkVRX1RMQl9GTFVTSCkpCiAJCSsra3ZtLT5zdGF0LnJlbW90ZV90bGJfZmx1c2g7CisJY21weGNoZygma3ZtLT50bGJzX2RpcnR5LCBkaXJ0eV9jb3VudCwgMCk7CiB9CiAKIHZvaWQga3ZtX3JlbG9hZF9yZW1vdGVfbW11cyhzdHJ1Y3Qga3ZtICprdm0pCkBAIC0xODYsNiArMTkyLDcgQEAKIAl2Y3B1LT5rdm0gPSBrdm07CiAJdmNwdS0+dmNwdV9pZCA9IGlkOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnZjcHUtPndxKTsKKwlrdm1fYXN5bmNfcGZfdmNwdV9pbml0KHZjcHUpOwogCiAJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwogCWlmICghcGFnZSkgewpAQCAtMjQ3LDcgKzI1NCw3IEBACiAJaWR4ID0gc3JjdV9yZWFkX2xvY2soJmt2bS0+c3JjdSk7CiAJc3Bpbl9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKIAlrdm0tPm1tdV9ub3RpZmllcl9zZXErKzsKLQluZWVkX3RsYl9mbHVzaCA9IGt2bV91bm1hcF9odmEoa3ZtLCBhZGRyZXNzKTsKKwluZWVkX3RsYl9mbHVzaCA9IGt2bV91bm1hcF9odmEoa3ZtLCBhZGRyZXNzKSB8IGt2bS0+dGxic19kaXJ0eTsKIAlzcGluX3VubG9jaygma3ZtLT5tbXVfbG9jayk7CiAJc3JjdV9yZWFkX3VubG9jaygma3ZtLT5zcmN1LCBpZHgpOwogCkBAIC0yOTEsNiArMjk4LDcgQEAKIAlrdm0tPm1tdV9ub3RpZmllcl9jb3VudCsrOwogCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gUEFHRV9TSVpFKQogCQluZWVkX3RsYl9mbHVzaCB8PSBrdm1fdW5tYXBfaHZhKGt2bSwgc3RhcnQpOworCW5lZWRfdGxiX2ZsdXNoIHw9IGt2bS0+dGxic19kaXJ0eTsKIAlzcGluX3VubG9jaygma3ZtLT5tbXVfbG9jayk7CiAJc3JjdV9yZWFkX3VubG9jaygma3ZtLT5zcmN1LCBpZHgpOwogCkBAIC0zODEsMTEgKzM4OSwxNSBAQAogCiBzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh2b2lkKQogewotCWludCByID0gMCwgaTsKLQlzdHJ1Y3Qga3ZtICprdm0gPSBrdm1fYXJjaF9jcmVhdGVfdm0oKTsKKwlpbnQgciwgaTsKKwlzdHJ1Y3Qga3ZtICprdm0gPSBrdm1fYXJjaF9hbGxvY192bSgpOwogCi0JaWYgKElTX0VSUihrdm0pKQotCQlnb3RvIG91dDsKKwlpZiAoIWt2bSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlyID0ga3ZtX2FyY2hfaW5pdF92bShrdm0pOworCWlmIChyKQorCQlnb3RvIG91dF9lcnJfbm9kaXNhYmxlOwogCiAJciA9IGhhcmR3YXJlX2VuYWJsZV9hbGwoKTsKIAlpZiAocikKQEAgLTM5OSwyMyArNDExLDE5IEBACiAJciA9IC1FTk9NRU07CiAJa3ZtLT5tZW1zbG90cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fbWVtc2xvdHMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWt2bS0+bWVtc2xvdHMpCi0JCWdvdG8gb3V0X2VycjsKKwkJZ290byBvdXRfZXJyX25vc3JjdTsKIAlpZiAoaW5pdF9zcmN1X3N0cnVjdCgma3ZtLT5zcmN1KSkKLQkJZ290byBvdXRfZXJyOworCQlnb3RvIG91dF9lcnJfbm9zcmN1OwogCWZvciAoaSA9IDA7IGkgPCBLVk1fTlJfQlVTRVM7IGkrKykgewogCQlrdm0tPmJ1c2VzW2ldID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9pb19idXMpLAogCQkJCQlHRlBfS0VSTkVMKTsKLQkJaWYgKCFrdm0tPmJ1c2VzW2ldKSB7Ci0JCQljbGVhbnVwX3NyY3Vfc3RydWN0KCZrdm0tPnNyY3UpOworCQlpZiAoIWt2bS0+YnVzZXNbaV0pCiAJCQlnb3RvIG91dF9lcnI7Ci0JCX0KIAl9CiAKIAlyID0ga3ZtX2luaXRfbW11X25vdGlmaWVyKGt2bSk7Ci0JaWYgKHIpIHsKLQkJY2xlYW51cF9zcmN1X3N0cnVjdCgma3ZtLT5zcmN1KTsKKwlpZiAocikKIAkJZ290byBvdXRfZXJyOwotCX0KIAogCWt2bS0+bW0gPSBjdXJyZW50LT5tbTsKIAlhdG9taWNfaW5jKCZrdm0tPm1tLT5tbV9jb3VudCk7CkBAIC00MjksMTkgKzQzNywzNSBAQAogCXNwaW5fbG9jaygma3ZtX2xvY2spOwogCWxpc3RfYWRkKCZrdm0tPnZtX2xpc3QsICZ2bV9saXN0KTsKIAlzcGluX3VubG9jaygma3ZtX2xvY2spOwotb3V0OgorCiAJcmV0dXJuIGt2bTsKIAogb3V0X2VycjoKKwljbGVhbnVwX3NyY3Vfc3RydWN0KCZrdm0tPnNyY3UpOworb3V0X2Vycl9ub3NyY3U6CiAJaGFyZHdhcmVfZGlzYWJsZV9hbGwoKTsKIG91dF9lcnJfbm9kaXNhYmxlOgogCWZvciAoaSA9IDA7IGkgPCBLVk1fTlJfQlVTRVM7IGkrKykKIAkJa2ZyZWUoa3ZtLT5idXNlc1tpXSk7CiAJa2ZyZWUoa3ZtLT5tZW1zbG90cyk7Ci0Ja2ZyZWUoa3ZtKTsKKwlrdm1fYXJjaF9mcmVlX3ZtKGt2bSk7CiAJcmV0dXJuIEVSUl9QVFIocik7CiB9CiAKK3N0YXRpYyB2b2lkIGt2bV9kZXN0cm95X2RpcnR5X2JpdG1hcChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KQoreworCWlmICghbWVtc2xvdC0+ZGlydHlfYml0bWFwKQorCQlyZXR1cm47CisKKwlpZiAoMiAqIGt2bV9kaXJ0eV9iaXRtYXBfYnl0ZXMobWVtc2xvdCkgPiBQQUdFX1NJWkUpCisJCXZmcmVlKG1lbXNsb3QtPmRpcnR5X2JpdG1hcF9oZWFkKTsKKwllbHNlCisJCWtmcmVlKG1lbXNsb3QtPmRpcnR5X2JpdG1hcF9oZWFkKTsKKworCW1lbXNsb3QtPmRpcnR5X2JpdG1hcCA9IE5VTEw7CisJbWVtc2xvdC0+ZGlydHlfYml0bWFwX2hlYWQgPSBOVUxMOworfQorCiAvKgogICogRnJlZSBhbnkgbWVtb3J5IGluIEBmcmVlIGJ1dCBub3QgaW4gQGRvbnQuCiAgKi8KQEAgLTQ1NCw3ICs0NzgsNyBAQAogCQl2ZnJlZShmcmVlLT5ybWFwKTsKIAogCWlmICghZG9udCB8fCBmcmVlLT5kaXJ0eV9iaXRtYXAgIT0gZG9udC0+ZGlydHlfYml0bWFwKQotCQl2ZnJlZShmcmVlLT5kaXJ0eV9iaXRtYXApOworCQlrdm1fZGVzdHJveV9kaXJ0eV9iaXRtYXAoZnJlZSk7CiAKIAogCWZvciAoaSA9IDA7IGkgPCBLVk1fTlJfUEFHRV9TSVpFUyAtIDE7ICsraSkgewpAQCAtNDY1LDcgKzQ4OSw2IEBACiAJfQogCiAJZnJlZS0+bnBhZ2VzID0gMDsKLQlmcmVlLT5kaXJ0eV9iaXRtYXAgPSBOVUxMOwogCWZyZWUtPnJtYXAgPSBOVUxMOwogfQogCkBAIC00OTksNiArNTIyLDkgQEAKIAlrdm1fYXJjaF9mbHVzaF9zaGFkb3coa3ZtKTsKICNlbmRpZgogCWt2bV9hcmNoX2Rlc3Ryb3lfdm0oa3ZtKTsKKwlrdm1fZnJlZV9waHlzbWVtKGt2bSk7CisJY2xlYW51cF9zcmN1X3N0cnVjdCgma3ZtLT5zcmN1KTsKKwlrdm1fYXJjaF9mcmVlX3ZtKGt2bSk7CiAJaGFyZHdhcmVfZGlzYWJsZV9hbGwoKTsKIAltbWRyb3AobW0pOwogfQpAQCAtNTI4LDYgKzU1NCwyNyBAQAogfQogCiAvKgorICogQWxsb2NhdGlvbiBzaXplIGlzIHR3aWNlIGFzIGxhcmdlIGFzIHRoZSBhY3R1YWwgZGlydHkgYml0bWFwIHNpemUuCisgKiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRvIGRvdWJsZSBidWZmZXJpbmc6IHNlZSB4ODYncworICoga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coKS4KKyAqLworc3RhdGljIGludCBrdm1fY3JlYXRlX2RpcnR5X2JpdG1hcChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KQoreworCXVuc2lnbmVkIGxvbmcgZGlydHlfYnl0ZXMgPSAyICoga3ZtX2RpcnR5X2JpdG1hcF9ieXRlcyhtZW1zbG90KTsKKworCWlmIChkaXJ0eV9ieXRlcyA+IFBBR0VfU0laRSkKKwkJbWVtc2xvdC0+ZGlydHlfYml0bWFwID0gdnphbGxvYyhkaXJ0eV9ieXRlcyk7CisJZWxzZQorCQltZW1zbG90LT5kaXJ0eV9iaXRtYXAgPSBremFsbG9jKGRpcnR5X2J5dGVzLCBHRlBfS0VSTkVMKTsKKworCWlmICghbWVtc2xvdC0+ZGlydHlfYml0bWFwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNsb3QtPmRpcnR5X2JpdG1hcF9oZWFkID0gbWVtc2xvdC0+ZGlydHlfYml0bWFwOworCXJldHVybiAwOworfQorCisvKgogICogQWxsb2NhdGUgc29tZSBtZW1vcnkgYW5kIGdpdmUgaXQgYW4gYWRkcmVzcyBpbiB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcwogICogc3BhY2UuCiAgKgpAQCAtNjA0LDEzICs2NTEsMTEgQEAKIAkvKiBBbGxvY2F0ZSBpZiBhIHNsb3QgaXMgYmVpbmcgY3JlYXRlZCAqLwogI2lmbmRlZiBDT05GSUdfUzM5MAogCWlmIChucGFnZXMgJiYgIW5ldy5ybWFwKSB7Ci0JCW5ldy5ybWFwID0gdm1hbGxvYyhucGFnZXMgKiBzaXplb2YoKm5ldy5ybWFwKSk7CisJCW5ldy5ybWFwID0gdnphbGxvYyhucGFnZXMgKiBzaXplb2YoKm5ldy5ybWFwKSk7CiAKIAkJaWYgKCFuZXcucm1hcCkKIAkJCWdvdG8gb3V0X2ZyZWU7CiAKLQkJbWVtc2V0KG5ldy5ybWFwLCAwLCBucGFnZXMgKiBzaXplb2YoKm5ldy5ybWFwKSk7Ci0KIAkJbmV3LnVzZXJfYWxsb2MgPSB1c2VyX2FsbG9jOwogCQluZXcudXNlcnNwYWNlX2FkZHIgPSBtZW0tPnVzZXJzcGFjZV9hZGRyOwogCX0KQEAgLTYzMywxNCArNjc4LDExIEBACiAJCQkgICAgID4+IEtWTV9IUEFHRV9HRk5fU0hJRlQobGV2ZWwpKTsKIAkJbHBhZ2VzIC09IGJhc2VfZ2ZuID4+IEtWTV9IUEFHRV9HRk5fU0hJRlQobGV2ZWwpOwogCi0JCW5ldy5scGFnZV9pbmZvW2ldID0gdm1hbGxvYyhscGFnZXMgKiBzaXplb2YoKm5ldy5scGFnZV9pbmZvW2ldKSk7CisJCW5ldy5scGFnZV9pbmZvW2ldID0gdnphbGxvYyhscGFnZXMgKiBzaXplb2YoKm5ldy5scGFnZV9pbmZvW2ldKSk7CiAKIAkJaWYgKCFuZXcubHBhZ2VfaW5mb1tpXSkKIAkJCWdvdG8gb3V0X2ZyZWU7CiAKLQkJbWVtc2V0KG5ldy5scGFnZV9pbmZvW2ldLCAwLAotCQkgICAgICAgbHBhZ2VzICogc2l6ZW9mKCpuZXcubHBhZ2VfaW5mb1tpXSkpOwotCiAJCWlmIChiYXNlX2dmbiAmIChLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKSAtIDEpKQogCQkJbmV3LmxwYWdlX2luZm9baV1bMF0ud3JpdGVfY291bnQgPSAxOwogCQlpZiAoKGJhc2VfZ2ZuK25wYWdlcykgJiAoS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkgLSAxKSkKQEAgLTY2MSwxMiArNzAzLDggQEAKIAogCS8qIEFsbG9jYXRlIHBhZ2UgZGlydHkgYml0bWFwIGlmIG5lZWRlZCAqLwogCWlmICgobmV3LmZsYWdzICYgS1ZNX01FTV9MT0dfRElSVFlfUEFHRVMpICYmICFuZXcuZGlydHlfYml0bWFwKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZGlydHlfYnl0ZXMgPSBrdm1fZGlydHlfYml0bWFwX2J5dGVzKCZuZXcpOwotCi0JCW5ldy5kaXJ0eV9iaXRtYXAgPSB2bWFsbG9jKGRpcnR5X2J5dGVzKTsKLQkJaWYgKCFuZXcuZGlydHlfYml0bWFwKQorCQlpZiAoa3ZtX2NyZWF0ZV9kaXJ0eV9iaXRtYXAoJm5ldykgPCAwKQogCQkJZ290byBvdXRfZnJlZTsKLQkJbWVtc2V0KG5ldy5kaXJ0eV9iaXRtYXAsIDAsIGRpcnR5X2J5dGVzKTsKIAkJLyogZGVzdHJveSBhbnkgbGFyZ2VwYWdlIG1hcHBpbmdzIGZvciBkaXJ0eSB0cmFja2luZyAqLwogCQlpZiAob2xkLm5wYWdlcykKIAkJCWZsdXNoX3NoYWRvdyA9IDE7CkBAIC02ODUsNiArNzIzLDcgQEAKIAkJbWVtY3B5KHNsb3RzLCBrdm0tPm1lbXNsb3RzLCBzaXplb2Yoc3RydWN0IGt2bV9tZW1zbG90cykpOwogCQlpZiAobWVtLT5zbG90ID49IHNsb3RzLT5ubWVtc2xvdHMpCiAJCQlzbG90cy0+bm1lbXNsb3RzID0gbWVtLT5zbG90ICsgMTsKKwkJc2xvdHMtPmdlbmVyYXRpb24rKzsKIAkJc2xvdHMtPm1lbXNsb3RzW21lbS0+c2xvdF0uZmxhZ3MgfD0gS1ZNX01FTVNMT1RfSU5WQUxJRDsKIAogCQlvbGRfbWVtc2xvdHMgPSBrdm0tPm1lbXNsb3RzOwpAQCAtNzE5LDYgKzc1OCw3IEBACiAJbWVtY3B5KHNsb3RzLCBrdm0tPm1lbXNsb3RzLCBzaXplb2Yoc3RydWN0IGt2bV9tZW1zbG90cykpOwogCWlmIChtZW0tPnNsb3QgPj0gc2xvdHMtPm5tZW1zbG90cykKIAkJc2xvdHMtPm5tZW1zbG90cyA9IG1lbS0+c2xvdCArIDE7CisJc2xvdHMtPmdlbmVyYXRpb24rKzsKIAogCS8qIGFjdHVhbCBtZW1vcnkgaXMgZnJlZWQgdmlhIG9sZCBpbiBrdm1fZnJlZV9waHlzbWVtX3Nsb3QgYmVsb3cgKi8KIAlpZiAoIW5wYWdlcykgewpAQCAtODQ5LDEwICs4ODksMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9pc19lcnJvcl9odmEpOwogCi1zdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpnZm5fdG9fbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKK3N0YXRpYyBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpfX2dmbl90b19tZW1zbG90KHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzLAorCQkJCQkJZ2ZuX3QgZ2ZuKQogewogCWludCBpOwotCXN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2xvdHMtPm5tZW1zbG90czsgKytpKSB7CiAJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QgPSAmc2xvdHMtPm1lbXNsb3RzW2ldOwpAQCAtODYzLDYgKzkwMywxMSBAQAogCX0KIAlyZXR1cm4gTlVMTDsKIH0KKworc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCit7CisJcmV0dXJuIF9fZ2ZuX3RvX21lbXNsb3Qoa3ZtX21lbXNsb3RzKGt2bSksIGdmbik7Cit9CiBFWFBPUlRfU1lNQk9MX0dQTChnZm5fdG9fbWVtc2xvdCk7CiAKIGludCBrdm1faXNfdmlzaWJsZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCkBAIC05MjUsMTIgKzk3MCw5IEBACiAJcmV0dXJuIG1lbXNsb3QgLSBzbG90cy0+bWVtc2xvdHM7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdmbl90b19odmFfbWFueShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdmbl90b19odmFfbWFueShzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sCiAJCQkJICAgICBnZm5fdCAqbnJfcGFnZXMpCiB7Ci0Jc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDsKLQotCXNsb3QgPSBnZm5fdG9fbWVtc2xvdChrdm0sIGdmbik7CiAJaWYgKCFzbG90IHx8IHNsb3QtPmZsYWdzICYgS1ZNX01FTVNMT1RfSU5WQUxJRCkKIAkJcmV0dXJuIGJhZF9odmEoKTsKIApAQCAtOTQyLDI4ICs5ODQsNjEgQEAKIAogdW5zaWduZWQgbG9uZyBnZm5fdG9faHZhKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogewotCXJldHVybiBnZm5fdG9faHZhX21hbnkoa3ZtLCBnZm4sIE5VTEwpOworCXJldHVybiBnZm5fdG9faHZhX21hbnkoZ2ZuX3RvX21lbXNsb3Qoa3ZtLCBnZm4pLCBnZm4sIE5VTEwpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2ZuX3RvX2h2YSk7CiAKLXN0YXRpYyBwZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGF0b21pYykKK3N0YXRpYyBwZm5fdCBnZXRfZmF1bHRfcGZuKHZvaWQpCit7CisJZ2V0X3BhZ2UoZmF1bHRfcGFnZSk7CisJcmV0dXJuIGZhdWx0X3BmbjsKK30KKworc3RhdGljIHBmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgYXRvbWljLAorCQkJYm9vbCAqYXN5bmMsIGJvb2wgd3JpdGVfZmF1bHQsIGJvb2wgKndyaXRhYmxlKQogewogCXN0cnVjdCBwYWdlICpwYWdlWzFdOwotCWludCBucGFnZXM7CisJaW50IG5wYWdlcyA9IDA7CiAJcGZuX3QgcGZuOwogCi0JaWYgKGF0b21pYykKKwkvKiB3ZSBjYW4gZG8gaXQgZWl0aGVyIGF0b21pY2FsbHkgb3IgYXN5bmNocm9ub3VzbHksIG5vdCBib3RoICovCisJQlVHX09OKGF0b21pYyAmJiBhc3luYyk7CisKKwlCVUdfT04oIXdyaXRlX2ZhdWx0ICYmICF3cml0YWJsZSk7CisKKwlpZiAod3JpdGFibGUpCisJCSp3cml0YWJsZSA9IHRydWU7CisKKwlpZiAoYXRvbWljIHx8IGFzeW5jKQogCQlucGFnZXMgPSBfX2dldF91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgMSwgMSwgcGFnZSk7Ci0JZWxzZSB7CisKKwlpZiAodW5saWtlbHkobnBhZ2VzICE9IDEpICYmICFhdG9taWMpIHsKIAkJbWlnaHRfc2xlZXAoKTsKLQkJbnBhZ2VzID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChhZGRyLCAxLCAxLCBwYWdlKTsKKworCQlpZiAod3JpdGFibGUpCisJCQkqd3JpdGFibGUgPSB3cml0ZV9mYXVsdDsKKworCQlucGFnZXMgPSBnZXRfdXNlcl9wYWdlc19mYXN0KGFkZHIsIDEsIHdyaXRlX2ZhdWx0LCBwYWdlKTsKKworCQkvKiBtYXAgcmVhZCBmYXVsdCBhcyB3cml0YWJsZSBpZiBwb3NzaWJsZSAqLworCQlpZiAodW5saWtlbHkoIXdyaXRlX2ZhdWx0KSAmJiBucGFnZXMgPT0gMSkgeworCQkJc3RydWN0IHBhZ2UgKndwYWdlWzFdOworCisJCQlucGFnZXMgPSBfX2dldF91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgMSwgMSwgd3BhZ2UpOworCQkJaWYgKG5wYWdlcyA9PSAxKSB7CisJCQkJKndyaXRhYmxlID0gdHJ1ZTsKKwkJCQlwdXRfcGFnZShwYWdlWzBdKTsKKwkJCQlwYWdlWzBdID0gd3BhZ2VbMF07CisJCQl9CisJCQlucGFnZXMgPSAxOworCQl9CiAJfQogCiAJaWYgKHVubGlrZWx5KG5wYWdlcyAhPSAxKSkgewogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAogCQlpZiAoYXRvbWljKQotCQkJZ290byByZXR1cm5fZmF1bHRfcGFnZTsKKwkJCXJldHVybiBnZXRfZmF1bHRfcGZuKCk7CiAKIAkJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCQlpZiAoaXNfaHdwb2lzb25fYWRkcmVzcyhhZGRyKSkgewpAQCAtOTcyLDE5ICsxMDQ3LDIwIEBACiAJCQlyZXR1cm4gcGFnZV90b19wZm4oaHdwb2lzb25fcGFnZSk7CiAJCX0KIAotCQl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcik7CisJCXZtYSA9IGZpbmRfdm1hX2ludGVyc2VjdGlvbihjdXJyZW50LT5tbSwgYWRkciwgYWRkcisxKTsKIAotCQlpZiAodm1hID09IE5VTEwgfHwgYWRkciA8IHZtYS0+dm1fc3RhcnQgfHwKLQkJICAgICEodm1hLT52bV9mbGFncyAmIFZNX1BGTk1BUCkpIHsKLQkJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci1yZXR1cm5fZmF1bHRfcGFnZToKLQkJCWdldF9wYWdlKGZhdWx0X3BhZ2UpOwotCQkJcmV0dXJuIHBhZ2VfdG9fcGZuKGZhdWx0X3BhZ2UpOworCQlpZiAodm1hID09IE5VTEwpCisJCQlwZm4gPSBnZXRfZmF1bHRfcGZuKCk7CisJCWVsc2UgaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fUEZOTUFQKSkgeworCQkJcGZuID0gKChhZGRyIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVCkgKworCQkJCXZtYS0+dm1fcGdvZmY7CisJCQlCVUdfT04oIWt2bV9pc19tbWlvX3BmbihwZm4pKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChhc3luYyAmJiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkKKwkJCQkqYXN5bmMgPSB0cnVlOworCQkJcGZuID0gZ2V0X2ZhdWx0X3BmbigpOwogCQl9Ci0KLQkJcGZuID0gKChhZGRyIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVCkgKyB2bWEtPnZtX3Bnb2ZmOwogCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQlCVUdfT04oIWt2bV9pc19tbWlvX3BmbihwZm4pKTsKIAl9IGVsc2UKIAkJcGZuID0gcGFnZV90b19wZm4ocGFnZVswXSk7CiAKQEAgLTk5Myw0MCArMTA2OSw1OCBAQAogCiBwZm5fdCBodmFfdG9fcGZuX2F0b21pYyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlyZXR1cm4gaHZhX3RvX3Bmbihrdm0sIGFkZHIsIHRydWUpOworCXJldHVybiBodmFfdG9fcGZuKGt2bSwgYWRkciwgdHJ1ZSwgTlVMTCwgdHJ1ZSwgTlVMTCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChodmFfdG9fcGZuX2F0b21pYyk7CiAKLXN0YXRpYyBwZm5fdCBfX2dmbl90b19wZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGJvb2wgYXRvbWljKQorc3RhdGljIHBmbl90IF9fZ2ZuX3RvX3BmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgYm9vbCBhdG9taWMsIGJvb2wgKmFzeW5jLAorCQkJICBib29sIHdyaXRlX2ZhdWx0LCBib29sICp3cml0YWJsZSkKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAKKwlpZiAoYXN5bmMpCisJCSphc3luYyA9IGZhbHNlOworCiAJYWRkciA9IGdmbl90b19odmEoa3ZtLCBnZm4pOwogCWlmIChrdm1faXNfZXJyb3JfaHZhKGFkZHIpKSB7CiAJCWdldF9wYWdlKGJhZF9wYWdlKTsKIAkJcmV0dXJuIHBhZ2VfdG9fcGZuKGJhZF9wYWdlKTsKIAl9CiAKLQlyZXR1cm4gaHZhX3RvX3Bmbihrdm0sIGFkZHIsIGF0b21pYyk7CisJcmV0dXJuIGh2YV90b19wZm4oa3ZtLCBhZGRyLCBhdG9taWMsIGFzeW5jLCB3cml0ZV9mYXVsdCwgd3JpdGFibGUpOwogfQogCiBwZm5fdCBnZm5fdG9fcGZuX2F0b21pYyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKIHsKLQlyZXR1cm4gX19nZm5fdG9fcGZuKGt2bSwgZ2ZuLCB0cnVlKTsKKwlyZXR1cm4gX19nZm5fdG9fcGZuKGt2bSwgZ2ZuLCB0cnVlLCBOVUxMLCB0cnVlLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdmbl90b19wZm5fYXRvbWljKTsKIAorcGZuX3QgZ2ZuX3RvX3Bmbl9hc3luYyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgYm9vbCAqYXN5bmMsCisJCSAgICAgICBib29sIHdyaXRlX2ZhdWx0LCBib29sICp3cml0YWJsZSkKK3sKKwlyZXR1cm4gX19nZm5fdG9fcGZuKGt2bSwgZ2ZuLCBmYWxzZSwgYXN5bmMsIHdyaXRlX2ZhdWx0LCB3cml0YWJsZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnZm5fdG9fcGZuX2FzeW5jKTsKKwogcGZuX3QgZ2ZuX3RvX3BmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKIHsKLQlyZXR1cm4gX19nZm5fdG9fcGZuKGt2bSwgZ2ZuLCBmYWxzZSk7CisJcmV0dXJuIF9fZ2ZuX3RvX3Bmbihrdm0sIGdmbiwgZmFsc2UsIE5VTEwsIHRydWUsIE5VTEwpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2ZuX3RvX3Bmbik7CiAKK3Bmbl90IGdmbl90b19wZm5fcHJvdChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgYm9vbCB3cml0ZV9mYXVsdCwKKwkJICAgICAgYm9vbCAqd3JpdGFibGUpCit7CisJcmV0dXJuIF9fZ2ZuX3RvX3Bmbihrdm0sIGdmbiwgZmFsc2UsIE5VTEwsIHdyaXRlX2ZhdWx0LCB3cml0YWJsZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnZm5fdG9fcGZuX3Byb3QpOworCiBwZm5fdCBnZm5fdG9fcGZuX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLAogCQkJIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbikKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZm5fdG9faHZhX21lbXNsb3Qoc2xvdCwgZ2ZuKTsKLQlyZXR1cm4gaHZhX3RvX3Bmbihrdm0sIGFkZHIsIGZhbHNlKTsKKwlyZXR1cm4gaHZhX3RvX3Bmbihrdm0sIGFkZHIsIGZhbHNlLCBOVUxMLCB0cnVlLCBOVUxMKTsKIH0KIAogaW50IGdmbl90b19wYWdlX21hbnlfYXRvbWljKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLApAQCAtMTAzNSw3ICsxMTI5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJZ2ZuX3QgZW50cnk7CiAKLQlhZGRyID0gZ2ZuX3RvX2h2YV9tYW55KGt2bSwgZ2ZuLCAmZW50cnkpOworCWFkZHIgPSBnZm5fdG9faHZhX21hbnkoZ2ZuX3RvX21lbXNsb3Qoa3ZtLCBnZm4pLCBnZm4sICZlbnRyeSk7CiAJaWYgKGt2bV9pc19lcnJvcl9odmEoYWRkcikpCiAJCXJldHVybiAtMTsKIApAQCAtMTIxOSw5ICsxMzEzLDUxIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBrdm1fZ2ZuX3RvX2h2YV9jYWNoZV9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGdmbl90b19odmFfY2FjaGUgKmdoYywKKwkJCSAgICAgIGdwYV90IGdwYSkKK3sKKwlzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pOworCWludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShncGEpOworCWdmbl90IGdmbiA9IGdwYSA+PiBQQUdFX1NISUZUOworCisJZ2hjLT5ncGEgPSBncGE7CisJZ2hjLT5nZW5lcmF0aW9uID0gc2xvdHMtPmdlbmVyYXRpb247CisJZ2hjLT5tZW1zbG90ID0gX19nZm5fdG9fbWVtc2xvdChzbG90cywgZ2ZuKTsKKwlnaGMtPmh2YSA9IGdmbl90b19odmFfbWFueShnaGMtPm1lbXNsb3QsIGdmbiwgTlVMTCk7CisJaWYgKCFrdm1faXNfZXJyb3JfaHZhKGdoYy0+aHZhKSkKKwkJZ2hjLT5odmEgKz0gb2Zmc2V0OworCWVsc2UKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZm5fdG9faHZhX2NhY2hlX2luaXQpOworCitpbnQga3ZtX3dyaXRlX2d1ZXN0X2NhY2hlZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMsCisJCQkgICB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pOworCWludCByOworCisJaWYgKHNsb3RzLT5nZW5lcmF0aW9uICE9IGdoYy0+Z2VuZXJhdGlvbikKKwkJa3ZtX2dmbl90b19odmFfY2FjaGVfaW5pdChrdm0sIGdoYywgZ2hjLT5ncGEpOworCisJaWYgKGt2bV9pc19lcnJvcl9odmEoZ2hjLT5odmEpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXIgPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopZ2hjLT5odmEsIGRhdGEsIGxlbik7CisJaWYgKHIpCisJCXJldHVybiAtRUZBVUxUOworCW1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KGt2bSwgZ2hjLT5tZW1zbG90LCBnaGMtPmdwYSA+PiBQQUdFX1NISUZUKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3dyaXRlX2d1ZXN0X2NhY2hlZCk7CisKIGludCBrdm1fY2xlYXJfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgaW50IG9mZnNldCwgaW50IGxlbikKIHsKLQlyZXR1cm4ga3ZtX3dyaXRlX2d1ZXN0X3BhZ2Uoa3ZtLCBnZm4sIGVtcHR5X3plcm9fcGFnZSwgb2Zmc2V0LCBsZW4pOworCXJldHVybiBrdm1fd3JpdGVfZ3Vlc3RfcGFnZShrdm0sIGdmbiwgKGNvbnN0IHZvaWQgKikgZW1wdHlfemVyb19wYWdlLAorCQkJCSAgICBvZmZzZXQsIGxlbik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fY2xlYXJfZ3Vlc3RfcGFnZSk7CiAKQEAgLTEyNDQsMTEgKzEzODAsOSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2NsZWFyX2d1ZXN0KTsKIAotdm9pZCBtYXJrX3BhZ2VfZGlydHkoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCit2b2lkIG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwKKwkJCSAgICAgZ2ZuX3QgZ2ZuKQogewotCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7Ci0KLQltZW1zbG90ID0gZ2ZuX3RvX21lbXNsb3Qoa3ZtLCBnZm4pOwogCWlmIChtZW1zbG90ICYmIG1lbXNsb3QtPmRpcnR5X2JpdG1hcCkgewogCQl1bnNpZ25lZCBsb25nIHJlbF9nZm4gPSBnZm4gLSBtZW1zbG90LT5iYXNlX2dmbjsKIApAQCAtMTI1Niw2ICsxMzkwLDE0IEBACiAJfQogfQogCit2b2lkIG1hcmtfcGFnZV9kaXJ0eShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKK3sKKwlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90OworCisJbWVtc2xvdCA9IGdmbl90b19tZW1zbG90KGt2bSwgZ2ZuKTsKKwltYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7Cit9CisKIC8qCiAgKiBUaGUgdkNQVSBoYXMgZXhlY3V0ZWQgYSBITFQgaW5zdHJ1Y3Rpb24gd2l0aCBpbi1rZXJuZWwgbW9kZSBlbmFibGVkLgogICovCkBAIC0xNDU3LDYgKzE1OTksNyBAQAogCQlpZiAoYXJnKQogCQkJZ290byBvdXQ7CiAJCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bih2Y3B1LCB2Y3B1LT5ydW4pOworCQl0cmFjZV9rdm1fdXNlcnNwYWNlX2V4aXQodmNwdS0+cnVuLT5leGl0X3JlYXNvbiwgcik7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0dFVF9SRUdTOiB7CiAJCXN0cnVjdCBrdm1fcmVncyAqa3ZtX3JlZ3M7CkBAIC0xODI0LDcgKzE5NjcsNyBAQAogCiBzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtKHZvaWQpCiB7Ci0JaW50IGZkLCByOworCWludCByOwogCXN0cnVjdCBrdm0gKmt2bTsKIAogCWt2bSA9IGt2bV9jcmVhdGVfdm0oKTsKQEAgLTE4MzcsMTEgKzE5ODAsMTEgQEAKIAkJcmV0dXJuIHI7CiAJfQogI2VuZGlmCi0JZmQgPSBhbm9uX2lub2RlX2dldGZkKCJrdm0tdm0iLCAma3ZtX3ZtX2ZvcHMsIGt2bSwgT19SRFdSKTsKLQlpZiAoZmQgPCAwKQorCXIgPSBhbm9uX2lub2RlX2dldGZkKCJrdm0tdm0iLCAma3ZtX3ZtX2ZvcHMsIGt2bSwgT19SRFdSKTsKKwlpZiAociA8IDApCiAJCWt2bV9wdXRfa3ZtKGt2bSk7CiAKLQlyZXR1cm4gZmQ7CisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBsb25nIGt2bV9kZXZfaW9jdGxfY2hlY2tfZXh0ZW5zaW9uX2dlbmVyaWMobG9uZyBhcmcpCkBAIC0xOTIyLDcgKzIwNjUsNyBAQAogCSZrdm1fY2hhcmRldl9vcHMsCiB9OwogCi1zdGF0aWMgdm9pZCBoYXJkd2FyZV9lbmFibGUodm9pZCAqanVuaykKK3N0YXRpYyB2b2lkIGhhcmR3YXJlX2VuYWJsZV9ub2xvY2sodm9pZCAqanVuaykKIHsKIAlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgcjsKQEAgLTE5NDIsNyArMjA4NSwxNCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaGFyZHdhcmVfZGlzYWJsZSh2b2lkICpqdW5rKQorc3RhdGljIHZvaWQgaGFyZHdhcmVfZW5hYmxlKHZvaWQgKmp1bmspCit7CisJc3Bpbl9sb2NrKCZrdm1fbG9jayk7CisJaGFyZHdhcmVfZW5hYmxlX25vbG9jayhqdW5rKTsKKwlzcGluX3VubG9jaygma3ZtX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBoYXJkd2FyZV9kaXNhYmxlX25vbG9jayh2b2lkICpqdW5rKQogewogCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCkBAIC0xOTUyLDEzICsyMTAyLDIwIEBACiAJa3ZtX2FyY2hfaGFyZHdhcmVfZGlzYWJsZShOVUxMKTsKIH0KIAorc3RhdGljIHZvaWQgaGFyZHdhcmVfZGlzYWJsZSh2b2lkICpqdW5rKQoreworCXNwaW5fbG9jaygma3ZtX2xvY2spOworCWhhcmR3YXJlX2Rpc2FibGVfbm9sb2NrKGp1bmspOworCXNwaW5fdW5sb2NrKCZrdm1fbG9jayk7Cit9CisKIHN0YXRpYyB2b2lkIGhhcmR3YXJlX2Rpc2FibGVfYWxsX25vbG9jayh2b2lkKQogewogCUJVR19PTigha3ZtX3VzYWdlX2NvdW50KTsKIAogCWt2bV91c2FnZV9jb3VudC0tOwogCWlmICgha3ZtX3VzYWdlX2NvdW50KQotCQlvbl9lYWNoX2NwdShoYXJkd2FyZV9kaXNhYmxlLCBOVUxMLCAxKTsKKwkJb25fZWFjaF9jcHUoaGFyZHdhcmVfZGlzYWJsZV9ub2xvY2ssIE5VTEwsIDEpOwogfQogCiBzdGF0aWMgdm9pZCBoYXJkd2FyZV9kaXNhYmxlX2FsbCh2b2lkKQpAQCAtMTk3Nyw3ICsyMTM0LDcgQEAKIAlrdm1fdXNhZ2VfY291bnQrKzsKIAlpZiAoa3ZtX3VzYWdlX2NvdW50ID09IDEpIHsKIAkJYXRvbWljX3NldCgmaGFyZHdhcmVfZW5hYmxlX2ZhaWxlZCwgMCk7Ci0JCW9uX2VhY2hfY3B1KGhhcmR3YXJlX2VuYWJsZSwgTlVMTCwgMSk7CisJCW9uX2VhY2hfY3B1KGhhcmR3YXJlX2VuYWJsZV9ub2xvY2ssIE5VTEwsIDEpOwogCiAJCWlmIChhdG9taWNfcmVhZCgmaGFyZHdhcmVfZW5hYmxlX2ZhaWxlZCkpIHsKIAkJCWhhcmR3YXJlX2Rpc2FibGVfYWxsX25vbG9jaygpOwpAQCAtMjAwOCwyNyArMjE2NSwxOSBAQAogCWNhc2UgQ1BVX1NUQVJUSU5HOgogCQlwcmludGsoS0VSTl9JTkZPICJrdm06IGVuYWJsaW5nIHZpcnR1YWxpemF0aW9uIG9uIENQVSVkXG4iLAogCQkgICAgICAgY3B1KTsKLQkJc3Bpbl9sb2NrKCZrdm1fbG9jayk7CiAJCWhhcmR3YXJlX2VuYWJsZShOVUxMKTsKLQkJc3Bpbl91bmxvY2soJmt2bV9sb2NrKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKIAotYXNtbGlua2FnZSB2b2lkIGt2bV9oYW5kbGVfZmF1bHRfb25fcmVib290KHZvaWQpCithc21saW5rYWdlIHZvaWQga3ZtX3NwdXJpb3VzX2ZhdWx0KHZvaWQpCiB7Ci0JaWYgKGt2bV9yZWJvb3RpbmcpIHsKLQkJLyogc3BpbiB3aGlsZSByZXNldCBnb2VzIG9uICovCi0JCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJd2hpbGUgKHRydWUpCi0JCQljcHVfcmVsYXgoKTsKLQl9CiAJLyogRmF1bHQgd2hpbGUgbm90IHJlYm9vdGluZy4gIFdlIHdhbnQgdGhlIHRyYWNlLiAqLwogCUJVRygpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2hhbmRsZV9mYXVsdF9vbl9yZWJvb3QpOworRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3NwdXJpb3VzX2ZhdWx0KTsKIAogc3RhdGljIGludCBrdm1fcmVib290KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbm90aWZpZXIsIHVuc2lnbmVkIGxvbmcgdmFsLAogCQkgICAgICB2b2lkICp2KQpAQCAtMjA0MSw3ICsyMTkwLDcgQEAKIAkgKi8KIAlwcmludGsoS0VSTl9JTkZPICJrdm06IGV4aXRpbmcgaGFyZHdhcmUgdmlydHVhbGl6YXRpb25cbiIpOwogCWt2bV9yZWJvb3RpbmcgPSB0cnVlOwotCW9uX2VhY2hfY3B1KGhhcmR3YXJlX2Rpc2FibGUsIE5VTEwsIDEpOworCW9uX2VhY2hfY3B1KGhhcmR3YXJlX2Rpc2FibGVfbm9sb2NrLCBOVUxMLCAxKTsKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCkBAIC0yMjExLDcgKzIzNjAsNyBAQAogc3RhdGljIGludCBrdm1fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaWYgKGt2bV91c2FnZV9jb3VudCkKLQkJaGFyZHdhcmVfZGlzYWJsZShOVUxMKTsKKwkJaGFyZHdhcmVfZGlzYWJsZV9ub2xvY2soTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyMTksNyArMjM2OCw3IEBACiB7CiAJaWYgKGt2bV91c2FnZV9jb3VudCkgewogCQlXQVJOX09OKHNwaW5faXNfbG9ja2VkKCZrdm1fbG9jaykpOwotCQloYXJkd2FyZV9lbmFibGUoTlVMTCk7CisJCWhhcmR3YXJlX2VuYWJsZV9ub2xvY2soTlVMTCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjMzNiw2ICsyNDg1LDEwIEBACiAJCWdvdG8gb3V0X2ZyZWVfNTsKIAl9CiAKKwlyID0ga3ZtX2FzeW5jX3BmX2luaXQoKTsKKwlpZiAocikKKwkJZ290byBvdXRfZnJlZTsKKwogCWt2bV9jaGFyZGV2X29wcy5vd25lciA9IG1vZHVsZTsKIAlrdm1fdm1fZm9wcy5vd25lciA9IG1vZHVsZTsKIAlrdm1fdmNwdV9mb3BzLm93bmVyID0gbW9kdWxlOwpAQCAtMjM0Myw3ICsyNDk2LDcgQEAKIAlyID0gbWlzY19yZWdpc3Rlcigma3ZtX2Rldik7CiAJaWYgKHIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJrdm06IG1pc2MgZGV2aWNlIHJlZ2lzdGVyIGZhaWxlZFxuIik7Ci0JCWdvdG8gb3V0X2ZyZWU7CisJCWdvdG8gb3V0X3VucmVnOwogCX0KIAogCWt2bV9wcmVlbXB0X29wcy5zY2hlZF9pbiA9IGt2bV9zY2hlZF9pbjsKQEAgLTIzNTMsNiArMjUwNiw4IEBACiAKIAlyZXR1cm4gMDsKIAorb3V0X3VucmVnOgorCWt2bV9hc3luY19wZl9kZWluaXQoKTsKIG91dF9mcmVlOgogCWttZW1fY2FjaGVfZGVzdHJveShrdm1fdmNwdV9jYWNoZSk7CiBvdXRfZnJlZV81OgpAQCAtMjM4NSwxMSArMjU0MCwxMiBAQAogCWt2bV9leGl0X2RlYnVnKCk7CiAJbWlzY19kZXJlZ2lzdGVyKCZrdm1fZGV2KTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koa3ZtX3ZjcHVfY2FjaGUpOworCWt2bV9hc3luY19wZl9kZWluaXQoKTsKIAlzeXNkZXZfdW5yZWdpc3Rlcigma3ZtX3N5c2Rldik7CiAJc3lzZGV2X2NsYXNzX3VucmVnaXN0ZXIoJmt2bV9zeXNkZXZfY2xhc3MpOwogCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZrdm1fcmVib290X25vdGlmaWVyKTsKIAl1bnJlZ2lzdGVyX2NwdV9ub3RpZmllcigma3ZtX2NwdV9ub3RpZmllcik7Ci0Jb25fZWFjaF9jcHUoaGFyZHdhcmVfZGlzYWJsZSwgTlVMTCwgMSk7CisJb25fZWFjaF9jcHUoaGFyZHdhcmVfZGlzYWJsZV9ub2xvY2ssIE5VTEwsIDEpOwogCWt2bV9hcmNoX2hhcmR3YXJlX3Vuc2V0dXAoKTsKIAlrdm1fYXJjaF9leGl0KCk7CiAJZnJlZV9jcHVtYXNrX3ZhcihjcHVzX2hhcmR3YXJlX2VuYWJsZWQpOwo=